[
  {
    "path": "AUTHORS",
    "content": "Martin Gieseking <martin.gieseking@uos.de>\n\tauthor of dvisvgm\n\nYann Collet\n\tlibs/xxHash/xxhash.*\n\thttps://github.com/Cyan4973/xxHash\n\nGoogle Inc.\n\tlibs/brotli/*\n\tlibs/woff2/*\n\thttps://github.com/google/brotli\n\thttps://github.com/google/woff2\n\nAngus Johnson\n\tlibs/clipper/clipper.*\n\thttps://sourceforge.net/projects/polyclipping/\n\nMichael Park\n\tlibs/variant/include/mpark/*\n\thttps://github.com/mpark/variant\n\nAlexander Peslyak\n\tlibs/md5/*\n\nPeter Selinger\n\tlibs/potrace/*\n\thttps://potrace.sourceforge.net\n\n"
  },
  {
    "path": "COPYING",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "INSTALL",
    "content": "Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software\nFoundation, Inc.\n\n   This file is free documentation; the Free Software Foundation gives\nunlimited permission to copy, distribute and modify it.\n\nBasic Installation\n==================\n\n   These are generic installation instructions.\n\n   The `configure' shell script attempts to guess correct values for\nvarious system-dependent variables used during compilation.  It uses\nthose values to create a `Makefile' in each directory of the package.\nIt may also create one or more `.h' files containing system-dependent\ndefinitions.  Finally, it creates a shell script `config.status' that\nyou can run in the future to recreate the current configuration, and a\nfile `config.log' containing compiler output (useful mainly for\ndebugging `configure').\n\n   It can also use an optional file (typically called `config.cache'\nand enabled with `--cache-file=config.cache' or simply `-C') that saves\nthe results of its tests to speed up reconfiguring.  (Caching is\ndisabled by default to prevent problems with accidental use of stale\ncache files.)\n\n   If you need to do unusual things to compile the package, please try\nto figure out how `configure' could check whether to do them, and mail\ndiffs or instructions to the address given in the `README' so they can\nbe considered for the next release.  If you are using the cache, and at\nsome point `config.cache' contains results you don't want to keep, you\nmay remove or edit it.\n\n   The file `configure.ac' (or `configure.in') is used to create\n`configure' by a program called `autoconf'.  You only need\n`configure.ac' if you want to change it or regenerate `configure' using\na newer version of `autoconf'.\n\nThe simplest way to compile this package is:\n\n  1. `cd' to the directory containing the package's source code and type\n     `./configure' to configure the package for your system.  If you're\n     using `csh' on an old version of System V, you might need to type\n     `sh ./configure' instead to prevent `csh' from trying to execute\n     `configure' itself.\n\n     Running `configure' takes awhile.  While running, it prints some\n     messages telling which features it is checking for.\n\n  2. Type `make' to compile the package.\n\n  3. Optionally, type `make check' to run any self-tests that come with\n     the package.\n\n  4. Type `make install' to install the programs and any data files and\n     documentation.\n\n  5. You can remove the program binaries and object files from the\n     source code directory by typing `make clean'.  To also remove the\n     files that `configure' created (so you can compile the package for\n     a different kind of computer), type `make distclean'.  There is\n     also a `make maintainer-clean' target, but that is intended mainly\n     for the package's developers.  If you use it, you may have to get\n     all sorts of other programs in order to regenerate files that came\n     with the distribution.\n\nCompilers and Options\n=====================\n\n   Some systems require unusual options for compilation or linking that\nthe `configure' script does not know about.  Run `./configure --help'\nfor details on some of the pertinent environment variables.\n\n   You can give `configure' initial values for configuration parameters\nby setting variables in the command line or in the environment.  Here\nis an example:\n\n     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix\n\n   *Note Defining Variables::, for more details.\n\nCompiling For Multiple Architectures\n====================================\n\n   You can compile the package for more than one kind of computer at the\nsame time, by placing the object files for each architecture in their\nown directory.  To do this, you must use a version of `make' that\nsupports the `VPATH' variable, such as GNU `make'.  `cd' to the\ndirectory where you want the object files and executables to go and run\nthe `configure' script.  `configure' automatically checks for the\nsource code in the directory that `configure' is in and in `..'.\n\n   If you have to use a `make' that does not support the `VPATH'\nvariable, you have to compile the package for one architecture at a\ntime in the source code directory.  After you have installed the\npackage for one architecture, use `make distclean' before reconfiguring\nfor another architecture.\n\nInstallation Names\n==================\n\n   By default, `make install' will install the package's files in\n`/usr/local/bin', `/usr/local/man', etc.  You can specify an\ninstallation prefix other than `/usr/local' by giving `configure' the\noption `--prefix=PATH'.\n\n   You can specify separate installation prefixes for\narchitecture-specific files and architecture-independent files.  If you\ngive `configure' the option `--exec-prefix=PATH', the package will use\nPATH as the prefix for installing programs and libraries.\nDocumentation and other data files will still use the regular prefix.\n\n   In addition, if you use an unusual directory layout you can give\noptions like `--bindir=PATH' to specify different values for particular\nkinds of files.  Run `configure --help' for a list of the directories\nyou can set and what kinds of files go in them.\n\n   If the package supports it, you can cause programs to be installed\nwith an extra prefix or suffix on their names by giving `configure' the\noption `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.\n\nOptional Features\n=================\n\n   Some packages pay attention to `--enable-FEATURE' options to\n`configure', where FEATURE indicates an optional part of the package.\nThey may also pay attention to `--with-PACKAGE' options, where PACKAGE\nis something like `gnu-as' or `x' (for the X Window System).  The\n`README' should mention any `--enable-' and `--with-' options that the\npackage recognizes.\n\n   For packages that use the X Window System, `configure' can usually\nfind the X include and library files automatically, but if it doesn't,\nyou can use the `configure' options `--x-includes=DIR' and\n`--x-libraries=DIR' to specify their locations.\n\nSpecifying the System Type\n==========================\n\n   There may be some features `configure' cannot figure out\nautomatically, but needs to determine by the type of machine the package\nwill run on.  Usually, assuming the package is built to be run on the\n_same_ architectures, `configure' can figure that out, but if it prints\na message saying it cannot guess the machine type, give it the\n`--build=TYPE' option.  TYPE can either be a short name for the system\ntype, such as `sun4', or a canonical name which has the form:\n\n     CPU-COMPANY-SYSTEM\n\nwhere SYSTEM can have one of these forms:\n\n     OS KERNEL-OS\n\n   See the file `config.sub' for the possible values of each field.  If\n`config.sub' isn't included in this package, then this package doesn't\nneed to know the machine type.\n\n   If you are _building_ compiler tools for cross-compiling, you should\nuse the `--target=TYPE' option to select the type of system they will\nproduce code for.\n\n   If you want to _use_ a cross compiler, that generates code for a\nplatform different from the build platform, you should specify the\n\"host\" platform (i.e., that on which the generated programs will\neventually be run) with `--host=TYPE'.\n\nSharing Defaults\n================\n\n   If you want to set default values for `configure' scripts to share,\nyou can create a site shell script called `config.site' that gives\ndefault values for variables like `CC', `cache_file', and `prefix'.\n`configure' looks for `PREFIX/share/config.site' if it exists, then\n`PREFIX/etc/config.site' if it exists.  Or, you can set the\n`CONFIG_SITE' environment variable to the location of the site script.\nA warning: not all `configure' scripts look for a site script.\n\nDefining Variables\n==================\n\n   Variables not defined in a site shell script can be set in the\nenvironment passed to `configure'.  However, some packages may run\nconfigure again during the build, and the customized values of these\nvariables may be lost.  In order to avoid this problem, you should set\nthem in the `configure' command line, using `VAR=value'.  For example:\n\n     ./configure CC=/usr/local2/bin/gcc\n\nwill cause the specified gcc to be used as the C compiler (unless it is\noverridden in the site shell script).\n\n`configure' Invocation\n======================\n\n   `configure' recognizes the following options to control how it\noperates.\n\n`--help'\n`-h'\n     Print a summary of the options to `configure', and exit.\n\n`--version'\n`-V'\n     Print the version of Autoconf used to generate the `configure'\n     script, and exit.\n\n`--cache-file=FILE'\n     Enable the cache: use and save the results of the tests in FILE,\n     traditionally `config.cache'.  FILE defaults to `/dev/null' to\n     disable caching.\n\n`--config-cache'\n`-C'\n     Alias for `--cache-file=config.cache'.\n\n`--quiet'\n`--silent'\n`-q'\n     Do not print messages saying which checks are being made.  To\n     suppress all normal output, redirect it to `/dev/null' (any error\n     messages will still be shown).\n\n`--srcdir=DIR'\n     Look for the package's source code in directory DIR.  Usually\n     `configure' can determine that directory automatically.\n\n`configure' also accepts some other, not widely useful, options.  Run\n`configure --help' for more details.\n\n"
  },
  {
    "path": "Makefile.am",
    "content": "## This file is part of dvisvgm\n## Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>\n##\n## Process this file with automake.\n\ninclude $(top_srcdir)/aminclude_static.am\n\nAUTOMAKE_OPTIONS = foreign\nEXTRA_DIST = COPYING\nSUBDIRS = libs src\nif !TEXLIVE_BUILD\nSUBDIRS += tests doc\nendif\nACLOCAL_AMFLAGS = -I m4\n\nif USE_BUNDLED_LIBS\nAM_DISTCHECK_CONFIGURE_FLAGS = --enable-bundled-libs\nendif\n\nif CODE_COVERAGE_ENABLED\nlcov_dir=$(top_builddir)/lcov\nlcov_file=$(lcov_dir)/lcov.info\n\nlcov-report:\n\t@mkdir -p $(lcov_dir)\n\tlcov --capture --directory . --no-external -o $(lcov_file)\n\tgenhtml --title \"dvisvgm\" --num-spaces 2 --legend -o $(lcov_dir) $(lcov_file)\n\nlcov-clean:\n\t@rm -rf $(lcov_dir)\n\t@find . -name \"*.gcda\" -exec rm {} \\;\n\tlcov --zerocounters --directory .\n\ncoverage: lcov-clean check lcov-report\nendif\n"
  },
  {
    "path": "NEWS",
    "content": "dvisvgm-3.6 (2025-12-08)\n- removed the restriction to process PDF-1.x files only (GH issue #291)\n- option --page: added evaluation of %P which expands to the maximum page\n  number. Also, %(expr) is supported to evaluate arithmetic expressions,\n  like %(P-1)\n- option --page: page numbers greater than the maximum page number are no\n  longer replaced by the maximum page number but ignored\n- PDF handler: extended computation of opacity values (GH issue #292)\n- fixed lookup of character code 0 in character maps (GH issue #294)\n- fixed height and depth values shown when processing data created by\n  the 'preview' package\n- updated bundled brotli library to version 1.2.0\n- some code improvements\n\ndvisvgm-3.5 (2025-05-23)\n- fonts are now embedded in deterministic order (GH issue #288)\n- different glyphs are now always assigned to different Unicode code points\n  to prevent collisions (GH issue #287)\n- fixed font-related segmentation faults caused by malformed DVI files\n  (GH issue #289)\n- fixed a regression that led to incorrect results produced by the\n  SVG optimizer\n- DVI error messages now also mention the byte position where the\n  error occurred in the DVI file\n- simplified the evaluation of PostScript operators\n- many code refactorings and improvements\n\ndvisvgm-3.4.4 (2025-03-06)\n- extended computation of Unicode points by looking for known glyph names\n- added some common glyph names not yet covered by the AGL table\n- added warning shown if unsupported PDF specials have been ignored\n- some additions to the manual page\n- several code improvements\n\ndvisvgm-3.4.3 (2025-01-04)\n- fixed index error in PS operator \"colorimage\" (GH issue #279)\n- updated bundled xxHash library to version 0.8.3\n- minor changes to the manual page\n\ndvisvgm-3.4.2 (2024-11-14)\n- fixed evaluation of Unicode data when converting PDF files (GH issue #276)\n- fixed horizontal character positioning in the PDF handler (GH issue #276)\n- fixed drawing of single-colored tensor product patches\n- use static creation and modification dates in TTF/WOFF fonts generated by\n  dvisvgm in order to prevent varying SVG output for unchanged input files\n  (GH issue #120)\n- small improvements of the manual page\n\ndvisvgm-3.4.1 (2024-09-16)\n- show number of page being processed when converting PDF files\n- added missing #include required as of GCC 15 (GH issue #273)\n\ndvisvgm-3.4 (2024-07-24)\n- option --embed-bitmaps is now also applied to images included with special\n  dvisvgm:img\n- added macro {?cmyk(c,m,y,k)} to allow for directly specifying CMYK colors\n  in literal SVG fragments\n- extended dvips color specials to distinguish between fill and stroke colors\n- added color special \"color set\" to replace the current color without pushing\n  a new value onto the color stack\n- added macros {?fillcolor} and {?strokecolor} to retrieve the current fill and\n  stroke color, respectively. Former macro {?color} equals {?fillcolor} and is\n  still available too\n- replaced millimeter units with big point (bp) units in the message showing\n  the extent of generated SVG file\n- fixed the detection of MIME types depending of file name suffixes\n- several small code improvements\n\ndvisvgm-3.3 (2024-04-10)\n- added file dvisvgm.map to the default font map files being looked up\n- added evaluation of #include and #includefirst present in font map files\n- changed conversion of CMYK colors to RGB so that the resulting colors are\n  now similar to those created by Ghostscript and several PDF viewers\n- fixed invalid bounding boxes assigned when converting multiple DVI pages\n  (GH issue #268)\n- fixed computation of internal Coons tensor points\n- updated bundled Google Test to version 1.12.1\n\ndvisvgm-3.2.2 (2024-03-07)\n- fixed the extraction of bitmaps from PS/EPS files that no longer worked\n  since Ghostscript 10.02.1 due to the removal of GS-specific operators\n  (GH issue #264)\n- minor automake updates required for TeX Live builds\n\ndvisvgm-3.2.1 (2024-02-29)\n- delayed loading of Ghostscript library to speed up the conversion of\n  DVI files\twithout PS specials (GH issue #262)\n- some improvements required for TeX Live builds\n  (patches by Karl Berry, GH issues #259, #260)\n- added more details to some DVI warning messages\n- added some further information to the manual page\n\ndvisvgm-3.2 (2024-01-11)\n- PDF handler: fixed a rounding issue that could lead to slightly bigger\n  text extents (GH issue #256)\n- added macros {?pageno}, {?svgfile}, and {?svgpath} to the dvisvgm special\n  commands\n- added separate verbosity flag 8 for user messages printed by special\n  dvisvgm:message\n- added command-line option --message to allow for printing user messages\n  after writing an SVG file (GH issue #258)\n- applied upstream patch regarding undefined type punning to the bundled\n  woff2 library\n- few improvements of the manual page\n\ndvisvgm-3.1.2 (2023-10-12)\n- improved evaluation of graphic extents created by the 'preview' package\n  (GH issue #246)\n- fixed computation of character boxes when using --exact-bbox (GH issue #248)\n- fixed memory error in optimizer module (GH issue #250)\n- updated bundled brotli library to version 1.1.0\n\ndvisvgm-3.1.1 (2023-08-29)\n- added evaluation of optional dash prefixes to command-line option --optimize\n  to exclude selected optimizer modules\n- fixed invalid removal of clipping paths referenced in 'defs' section\n- fixed automatic calls of optimizer module 'remove-clippaths'\n- suppress Ghostscript warning about deprecated option -dNEWPDF (GH issue #245)\n- updated bundled xxHash library to version 0.8.2\n- few fixes in the manual page\n\ndvisvgm-3.1 (2023-07-06)\n- added command-line option --currentcolor to replace a given color with\n  CSS variable 'currentColor' (GH issue #214)\n- added special dvisvgm:currentcolor to replace the currently active color\n  with CSS variable 'currentColor' (GH issue #214)\n- added special 'dvisvgm:message' to print given texts to the console\n- added support for Omega Font Metric (OFM) files\n- added fallback mechanism for missing characters in OFM-based virtual fonts\n  proposed by Takuji Tanaka (GH issue #241)\n- fixed handling of whitespace in PDF file paths (GH issue #233)\n- fixed vertical placement of \"vertical fonts\" in horizontal mode\n  (GH issue #235)\n- fixed parsing of floating point numbers occurred with libc++ (GH issue #240)\n- fixed potential segmentation faults triggered by missing font files\n  (GH issue #241)\n- fixed GLIBCXX assertion error in new PDF handler (GH issue #242)\n- improved handling of font subset prefixes in new, mutool-based PDF handler\n  (GH issue #242)\n- several minor code improvements\n\ndvisvgm-3.0.4 (2023-03-10)\n- fixed issue that could prevent reading the output of subprocesses\n  (GH issue #232)\n- removed optional dependency on libcrypto (OpenSSL) because the MD5 functions\n  have been deprecated (always using the bundled MD5 function now)\n- added TeX Live conditionals to the build system (patch by Karl Berry)\n- small code and manual page improvements\n\ndvisvgm-3.0.3 (2023-02-21)\n- fixed resetting of character contexts (GH issue #227)\n- added missing #includes required for GCC 13\n\ndvisvgm-3.0.2 (2023-01-30)\n- fixed computation of font sizes in new PDF handler (GH issue #220)\n- fixed viewBox coordinates determined by new PDF handler (GH issue #223)\n- improved detection of font names used in PDF files (GH issue #224)\n- minor code improvements\n\ndvisvgm-3.0.1 (2023-01-10)\n- added support for the 64-bit GS library in TeX Live\n  (patch sent by Akira Kakuto)\n- MacTeX: explicitly lookup libgs in /usr/local/lib (GH issue #197)\n- fixed character spacing when processing XDV glyph arrays (GH issue #198)\n- fixed invalid removal of non-redundant clipPath elements (GH issue #203)\n- fixed computation of the graphics extents printed to the console when using\n  the preview package (GH issue #209)\n- several improvements of the autotool scripts (thanks to Sam James)\n- improved processing of fonts when using the new PDF handler\n\ndvisvgm-3.0 (2022-10-16)\n- added a new PDF handler based on mutool to keep the PDF functionality\n  available which can no longer be realized with Ghostscript 10.1.0 due to\n  the replacement of its PostScript-based PDF interpreter\n- replaced the bundled minimal Fontforge library (ff-woff) with a dedicated,\n  newly implemented library for embedding TTF/WOFF data into the SVG files\n- added option --embed-bitmaps to embed bitmaps into the generated SVG files\n  instead of referencing the external files\n- extended option --tmpdir to optionally suppress the creation of uniquely\n  named subfolders\n- added filters :even and :odd to option --page to limit the given page ranges\n  to even and odd page numbers respectively\n- fixed the call of ttfautohint to prevent potential memory errors\n\ndvisvgm-2.14 (2022-08-12)\n- added processing of SVG path elements inserted by \"raw\" specials in order to\n  treat them similar to generated ones\n- added support for native font references lacking a file name suffix\n- improved lookup of native fonts\n- improved the removal of redundant SVG group elements\n- fixed conversion of empty glyphs to TTF/WOFF\n- updated bundled WOFF2 library\n\ndvisvgm-2.13.4 (2022-04-20)\n- fixed the size of bounding boxes applied when converting multiple pages\n  (GH issue #182)\n- try to enable old PDF interpreter when using Ghostscript >= 9.56.0\n  (dvisvgm does not work with Ghostscript's new PDF interpreter)\n\ndvisvgm-2.13.3 (2022-02-27)\n- added SVG optimizer module 'reassign-clippaths' that searches for duplicate\n  clipPath elements, removes them, and updates the clip-path references\n- replaced method to clip embedded EPS/PDF graphics that usually results in\n  faster rendering of the affected SVG sections\n- fixed a regression regarding transformations of embedded EPS/PDF graphics\n\ndvisvgm-2.13.2 (2022-02-23)\n- improved clipping of embedded EPS/PDF graphics (GH issue #176)\n\ndvisvgm-2.13.1 (2022-01-26)\n- added evaluation of expression {?(...)} to special dvisvgm:rawdef\n- fixed regression regarding positioning of PDF graphics (GH issue #174)\n- fixed some build issues\n\ndvisvgm-2.13 (2022-01-20)\n- allow for conversion of multiple EPS files given on the command-line\n- added variables n and N to option --output representing the current file\n  number and total number of files given on the command-line, respectively\n- fixed selection of hash algorithm\n- improved computation of glyph height and depth\n- extended several paragraphs of the manual page with more detailed information\n- SVG optimizer: simplify transform attributes also when collapsing groups\n- updated bundled xxHash library to version 0.8.1\n- updated bundled gtest to version 1.11\n\ndvisvgm-2.12 (2021-08-16)\n- added transparency support of SVG elements created outside the PS handler\n  (GH issue #148)\n- fixed spacing issue caused by unexpected newline characters in SVG output\n- fixed PS error occurred when defining (yet unsupported) PS shading patterns\n- fixed issue in color handling of PS tiling patterns (GH issue #158)\n- fixed displaced graphics occurred if PDF MediaBox is not located at the origin\n- fixed handling of root directories of file paths\n- improved handling of drive letters (Windows only)\n- several code refactorings and improvements\n\ndvisvgm-2.11.1 (2021-01-21)\n- fixed possible ambiguity of GID to charcode mappings (GH issue #147)\n- refactored representation of token objects in calculator class\n- few minor code and test improvements\n\ndvisvgm-2.11 (2020-11-28)\n- added fallback mechanism for JFM-based virtual fonts proposed\n  by Takuji Tanaka (GH issue #144)\n- improved detection of proper CMap files for current encoding\n- fixed processing of Unicode surrogates present in CMap files\n- fixed handling of pdf:mapline and pdf:mapfile specials\n\ndvisvgm-2.10.1 (2020-09-22)\n- added support for new Ghostscript transparency operators\n  .setfillconstantalpha and .setstrokeconstantalpha\n- added support for new Ghostscript versioning scheme introduced with GS 9.53.0\n- added few additional information to the manual page\n- updated bundled brotli library to version 1.0.9\n\ndvisvgm-2.10 (2020-08-12)\n- added evaluation of LuaTeX native font definitions\n- added computation of of italic correction for fake slanted glyphs\n- dvisvgm now creates dedicated temporary folders for each call of\n  the program to prevent file collisions between different processes\n- added evaluation of internal GS operators '.fillstroke' and '.eofillstroke'\n  introduced with GS 9.52 to implement PDF operators 'B' and 'B*'\n  (GH issue #139)\n- fixed and improved optimization of nested group elements\n- fixed optimization of 'scale' transformation\n- fixed optimization of 'transform' attributes applied to images clipping paths\n- fixed processing of PS operator 'eoclip'\n- fixed processing of clipping path intersections with different\n  fill rule properties\n- fixed processing of {?(...)} expressions (GH issue #136)\n- fixed error message about unmatched closing tags in XML parser\n- updated bundled FreeType library to version 2.10.2\n- updated bundled xxHash library to version 0.8\n\ndvisvgm-2.9.1 (2020-03-21)\n- added macro {?(expr)} to enable the evaluation of math expressions in\n  raw SVG fragments (GH #130)\n- multiplication operator \"*\" preceding an opening parentheses can now be\n  omitted in math expressions\n- fixed the evaluation of transformation command \"scale(c)\" which is now\n  correctly treated as \"scale(c, c)\" (GH #131)\n- minor layout optimizations of the PDF manual page\n\ndvisvgm-2.9 (2020-03-13)\n- added processing of PS operators 'image' and 'colorimage' to embed bitmaps\n  present in PS/PDF data into the generated SVG\n- added command-line option --bitmap-format to set the format used to embed\n  bitmaps present in EPS/PDF files\n- added fallback method to retrieve the resolution of GF files if stdout\n  of the Metafont subprocess can't be read through a pipe (GH #129)\n- fixed broken conversion of PS tiling patterns\n- fixed the functionality of PS operators 'xshow', 'yshow', and 'xyshow' for\n  multibyte characters\n- fixed a PS error triggered by unsupported shading types < 4\n- prevent negative 'height' and 'width' attributes created by optimizer\n  module 'simplify-transform'\n- fixed potential segfault caused by deep recursion in huge SVG trees\n- look for Ghostscript library name 'libgs.dylib.N' additionally to\n  'libgs.N.dylib' (Mac only)\n- ensure that 'make install' installs the bundled manual page if it can't be\n  rebuilt due to missing build tools\n- updated bundled xxHash library to version 0.7.3\n\ndvisvgm-2.8.2 (2019-12-07)\n- if available, call 'mf-nowin' instead of 'mf' to process Metafont files\n  (GH #121)\n- fixed handling of null device in PS operator 'restore' (GH #122)\n- fixed PS error triggered by backslashes in file paths (GH #123)\n- fixed build issue related to GCC on Solaris 11\n- some code cleanup\n\ndvisvgm-2.8.1 (2019-11-14)\n- added SVG optimizer module 'simplify-text'\n- added support for PS operator 'nulldevice'\n- copy absolute paths from special 'psfile' unchanged to the SVG file\n- some code refactorings\n\ndvisvgm-2.8 (2019-10-25)\n- added support for JPEG, PNG, PDF, and SVG files to special 'psfile'\n- added support for Ghostscript 9.50\n- added support for elliptical arc segments in graphics paths\n- added support for CMap operator 'begincidchar' (patch by Akira Kakuto)\n- added support for experimental 128-bit XXH3 hashes\n- extended optimizer module 'simplify-transform' to incorporate translation and\n  scaling components into positional and size attributes\n- replaced CRC32 checksums used in cache files with XXH32 hashes\n- updated potrace to version 1.16\n- updated xxHash to version 0.7.2\n- updated gtest to 1.10\n- lots of code refactorings\n\ndvisvgm-2.7.4 (2019-07-28)\n- fixed memory issue occurred when calling Metafont\n- fixed rounding issue in color conversion (GH #116)\n- changed location of cache files from ~/.dvisvgm/cache to\n  $XDG_CACHE_HOME/dvisvgm which usually expands to ~/.cache/dvisvgm (GH #112)\n- some minor refactorings\n\ndvisvgm-2.7.3 (2019-07-12)\n- fixed randomly missing glyph paths referenced by 'use' elements (GH #110)\n- minor update of the man page\n- some code refactorings\n\ndvisvgm-2.7.2 (2019-06-07)\n- adapted PostScript handler to incompatible changes introduced with\n  Ghostscript 9.27 (removal of GS_PDF_ProcSet and pdfdict)\n\ndvisvgm-2.7.1 (2019-05-20)\n- fixed a bug in PS operator 'setmatrix' (GH #106)\n- fixed build issue reported on MacPorts\n  (https://trac.macports.org/ticket/58347)\n- added source files required to access the MIKTeX session object\n  (required due to deprecation of the MiKTeX SDK)\n\ndvisvgm-2.7 (2019-04-13)\n- added option --optimize to perform several optimizations on the\n  generated SVG files (current optimizer modules: collapse-groups,\n  group-attributes, remove-clippath, simplify-transform) (GH #97)\n- dvisvgm's \"raw\" specials are now parsed and converted to proper XML nodes\n- several improvements to SVG graphics path descriptions:\n  * omit redundant spaces and leading zeros\n  * omit line commands representing zero-length lines\n  * improved detection of reflected control points in Bézier curve sequences\n- added evaluation of PS operators xshow, yshow, and xyshow\n- added evaluation of psfile/pdffile attribute 'clip' to clip the\n  drawing region to the bounding box of the image being processed (GH #104)\n- added specials 'dvisvgm:bbox lock' and 'dvisvgm:bbox unlock' to disable and\n  enable updating the bounding box of the current page (GH #105)\n- added optional modifier 'transform' to dvisvgm:bbox specials to allow for\n  applying the current transformation to the bounding box\n- added macro '{?matrix}' to dvisvgm's 'raw' specials that expands to the\n  current transformation matrix\n- renamed option --exact to --exact-bbox (backward compatible change)\n- updated the bundled xxHash library to version 0.7.0\n- lots of code refactorings\n\ndvisvgm-2.6.3 (2019-03-09)\n- create short RGB hex values for color attributes if possible\n- fixed rejection of paper formats, like A4, by option --bbox\n- fixed incomplete adaption of vertical orientation when processing\n  EPS/PDF files\n- fixed handling of backslashes in EPS/PDF file paths (Windows only)\n- updated bundled Google Test library to version 1.8.1\n- some code refactorings and improvements of the build system\n\ndvisvgm-2.6.2 (2019-01-23)\n- fixed scaling of line properties in PS operator 'grestore'\n- fixed handling of PS operators 'charpath' and 'show' which may\n  call each other internally\n- improved processing of PS operator 'clippath'\n- prevent visible side-effects of PS operator 'stringwidth'\n- updated bundled brotli library to version 1.0.7\n- some modifications of the build system to simplify maintenance in TeX Live\n\ndvisvgm-2.6.1 (2018-10-12)\n- added configuration option --disable-manpage to prevent generating\n  the manual page (GH issue #93)\n- if configuration option --disable-bundled-libs is given and some of the\n  required system libraries are missing, the corresponding bundled library\n  is used as a fallback (GH issue #94)\n- updated bundled brotli library to version 1.0.6\n- fixed build issue occurred with GCC 4.8\n\ndvisvgm-2.6 (2018-09-08)\n- added option --page-hashes that allows for skipping the conversion of\n  a page if its content hasn't changed\n- relaxed plausibility check of total page count stated in the postamble\n  (this value overflows if the DVI file contains more than 65535 pages)\n- added validity checks for bop (begin of page) offsets present in the\n  bop and post commands\n- some refactorings and minor improvements\n\ndvisvgm-2.5 (2018-08-08)\n- added multi-page support (option --page) to PDF mode (option --pdf)\n- added evaluation of transformation options in PDF mode\n- added support for all length units to option --transform\n- TeX Live Win32: look for Ghostscript DLL in the TL folders as well\n  (thanks to Akira Kakuto for sending the patch)\n- potrace has been added again to the bundled third-party libraries\n- instead of linking the bundled libraries brotli, potrace, woff2, and\n  xxhash, the configure script now looks for the corresponding system\n  libraries by default\n- added option --enable-bundled-libs to the configure script to build and\n  statically link the bundled libraries\n- some refactorings\n\ndvisvgm-2.4.2 (2018-07-18)\n- fixed height and depth values computed when using the preview package\n- removed additional borders from the bounding boxes of hyperlinked areas\n- prevent warnings if special \"psfile\" is called with argument \"/dev/null\"\n  (e.g. option \"psfixbb\" of the preview package adds such specials)\n- \"make install\" no longer fails if the manpage can't be built\n\ndvisvgm-2.4.1 (2018-07-07)\n- fixed handling of delay parameter of option --progress\n- updated brotli library to version 1.0.5\n- updated woff2 library to version 1.0.2\n- updated URLs in manual page\n- several minor code refactorings\n\ndvisvgm-2.4 (2018-05-03)\n- added special 'pdffile' similar to 'psfile' to embed PDF graphics\n- added option --pdf to convert single-page PDF documents to SVG\n- reassigned short option -P from --progress to --pdf\n- added option --stdin to receive input from stdin\n- option --stdout can now be combined with option --zip\n- added processing of GS operators '.setshapealpha' and '.setblendmode'\n- fixed outer transformations applied to psfile specials\n- fixed computation of bounding boxes triggered by psfile specials\n- several code refactorings\n\ndvisvgm-2.3.5 (2018-03-23)\n- added evaluation of PS operator 'setpagedevice' in psfile specials\n- fixed evaluation of dvips color names\n- fixed warning printed when using Ghostscript 9.23\n\ndvisvgm-2.3.4 (2018-03-14)\n- fixed error message printed when adding a single '-' on the command-line\n- added missing data file that lead to failing tests (GH bug #87)\n- updated brotli library to version 1.0.3\n- some code refactorings\n\ndvisvgm-2.3.3 (2018-02-20)\n- fixed wrong behavior when requiring both default mapfiles and\n  pdf:mapline or pdf:mapfile specials\n- fixed an exception thrown in case of unavailable fonts\n\ndvisvgm-2.3.2 (2018-02-08)\n- prevent the creation of redundant tspan elements\n- added support for new JFM format (patch by Hironobu Yamashita)\n- fixed build error occurred if GS development files were missing\n- fixed a potential memory issue regarding option --cache\n\ndvisvgm-2.3.1 (2018-01-12)\n- fixed the width of characters slanted by a mapfile entry (GH bug #82)\n- if ttfautohint fails for a font, dvisvgm now uses the unhinted font and\n  prints a corresponding warning message\n- some code cleanup\n\ndvisvgm-2.3 (2017-12-28)\n- added experimental support for ttfautohint\n- updated xxHash to version 0.6.4\n- added configuration option to set location of libkpathsea (GH bug #71)\n- some improvements of the build system\n\ndvisvgm-2.2.3 (2017-12-12)\n- updated the bundled brotli library to version 1.0.2\n- fixed a potential memory issue\n- some code and test improvements\n\ndvisvgm-2.2.2 (2017-11-17)\n- fixed memory issue regarding font maps (GH bug #79)\n- avoid scientific notation of floating point numbers\n- minor code improvements\n\ndvisvgm-2.2.1 (2017-11-13)\n- fixed portability issue when building the manpage (GH bug #72)\n- fixed incomplete computation of PS line width (GH bug #77)\n- further code refactorings\n\ndvisvgm-2.2 (2017-10-19)\n- added evaluation of pdf:pagesize specials\n- added evaluation of PDF hyperlink specials\n- try to load Ghostscript dylib on Mac systems (patch by Toby Fleming, GH bug #66)\n- improved TPIC special handler, added evaluation of 'tx' special\n- length values in dvisvgm specials now accept unit specifiers\n- added pdftex.map to default mapfiles\n- fixed potential infinite loop after starting subprocesses (GH bug #68)\n- files included with psfile are now also searched in the texmf tree if not\n  present in the current working directory (GH bug #69)\n- fixed transformation issue in computation of psfile position (GH bug #70)\n- updated bundled brotli, woff2, and xxhash libraries\n- several code refactorings and improvements\n\ndvisvgm-2.1.3 (2017-02-20)\n- fixed build failures of libfontforge on Solaris 10\n- increased code portablity\n\ndvisvgm-2.1.2 (2017-02-12)\n- bundled the googletest sources to simplify building and executing the tests\n- fixed a couple of issues related to LLVM's libc++\n  (thanks to Mojca Miklavec and Rasmus Larsen for their help to isolate the problems)\n- fixed some potential memory leaks\n- removed 'restrict' keyword from xxHash sources to avoid C++ compilation errors\n  (https://github.com/Cyan4973/xxHash/issues/88)\n\ndvisvgm-2.1.1 (2017-02-07)\n- don't rerun Metafont for missing fonts\n- fixed build failure on OS X (GH bug #65)\n- several minor code improvements and test enhancements\n\ndvisvgm-2.1 (2017-01-19)\n- added option --tmpdir to explicitly set temp folder\n- temporary files are no longer created in the current working directory by\n  default but in the system's temp folder (GH bug #63)\n- added warning/error messages if temporary files could not be written\n- fixed collision of Unicode points in AGL table (GH bug #64)\n- retain letter case of filenames even if not significant (Windows only)\n- code refactorings and cleanup\n\ndvisvgm-2.0.4 (2016-11-16)\n- bundled reduced FontForge library (ff-woff) with the sources\n- minor fixes in manpage and --help texts\n- few code improvements\n\ndvisvgm-2.0.3 (2016-09-27)\n- fixed a regression in the character positioning of virtual fonts\n- fixed positioning of rules\n\ndvisvgm-2.0.2 (2016-09-19)\n- fixed computation of the character depths of native fonts\n- fixed a regression in the computation of DVI positions (GH bug #61)\n\ndvisvgm-2.0.1 (2016-09-03)\n- added optional argument parameter \"autohint\" to option --font-format in order\n  to create autohinted TTF, WOFF, or WOFF2 fonts\n\ndvisvgm-2.0 (2016-08-29)\n- added option --font-format to select the data format of embedded fonts\n  (currently supported formats: SVG, TTF, WOFF, WOFF2)\n- switched the code base from C++03 to C++11\n- reimplemented the command-line parser and the CommandLine class generator\n- major refactorings of several parts of the code\n\ndvisvgm-1.16 (2016-07-04)\n- added support for XDV version 7 introduced by XeTeX 0.99995\n- added optional processing of papersize specials\n- added support for length units cc, dd, and sp\n- fixed unit conversion in computation of bounding boxes\n- fixed propagation of resolution value to the glyph vectorizer\n- fixed transformation of background rectangle\n- prevent processing of corrupted GF files\n- major refactorings of the DVI reader and the SVG backend\n\ndvisvgm-1.15.1 (2016-04-19)\n- added explicit encoding attribute to the XML declaration again (GH bug #54)\n- added support for AGL character names of the form 'uFOO' and 'uniFOO'\n- fixed parsing of transformation parameters given on the command-line\n- minor code and test improvements\n\ndvisvgm-1.15 (2016-02-27)\n- added option --comments to add additional information to the SVG file\n- fixed a clipping bug in the PostScript handler\n- some code improvements and refactorings\n- moved test data files to a separate folder\n\ndvisvgm-1.14.2 (2016-01-20)\n- fixed handling of background color specials (now they affect all succeeding pages until the next change)\n- fixed a potential memory issue caused by accessing an invalid iterator\n- updated xxHash to version 0.5.0\n- added xxHash to the output of --version=1\n- minor additions to the manpage\n- added test case to validate the hash values used in Unicode.cpp\n\ndvisvgm-1.14.1 (2016-01-05)\n- fixed an issue in the PostScript handler that could lead to invalid SVG files\n  if multiple DVI pages were converted\n- added checks for invalid GF files to prevent undefined behavior\n\ndvisvgm-1.14 (2015-12-28)\n- added evaluation of PSTricks specials 'pst:' and 'PST:'\n- the bounding box data created by the preview package is now adapted to create a tight box by default\n- added option --bbox=preview to apply the unmodified bounding box data created by the preview package\n- improved lookup of files located in the current working directory\n- fixed a memory issue related to graphics paths\n- improved extraction of kapathsea version number\n- minor code and test improvements\n\ndvisvgm-1.13 (2015-12-08)\n- added evaluation of PS operators 'ashow', 'awidthshow', and 'widthshow' (GH bug #49)\n- improved conversion of fonts referenced by PS code to graphics paths\n- redundant 'moveto' commands are now removed from paths\n- fixed issue concerning evaluation of PS operator 'setcolor'\n- fixed output of PS error messages\n- updated bundled xxHash library to revision 42\n- minor code refactorings and cleanup\n\ndvisvgm-1.12 (2015-11-18)\n- added option --colornames to replace RGB values by SVG color names\n- fixed resolving of character codes for fonts without supported chracater maps\n- fixed a memory issue that could occur when calling Metafont\n\ndvisvgm-1.11 (2015-09-21)\n- improved mapping of unknown characters to Unicode\n- improved handling of text elements in conjunction with \\specials (patch by Till Tantau)\n- fixed an issue that could lead to (invalid) U+0000 codepoints\n- prevent creating invalid XML by quoting xlink:title attributes properly\n- documentation: updated links to new website address\n\ndvisvgm-1.10 (2015-07-15)\n- added support for the new XDV format 6 created by XeTeX 0.99992\n- improved mapping of PostScript character names to Unicode points\n\ndvisvgm-1.9.2 (2015-04-08)\n- avoid retracing of fonts if option --no-fonts and --trace-all=y are given\n- skip tracer messages if no glyphs have been traced\n- extended the build system to generate code coverage reports\n- improved some tests of the test suite\n- some general code refactorings and improvements\n\ndvisvgm-1.9.1 (2015-02-28)\n- extended --output pattern syntax by arithmetic expressions and width specifiers\n- improved formatting of manpage\n- fixed Clang build issue (patch by Peter Breitenlohner)\n- fixed a build issue occurred with old MinGW compilers\n- code cleanup and refactorings\n\ndvisvgm-1.9 (2014-12-29)\n- added partial implementation of PostScript operator 'shfill' to create color\n  gradient fills (supported shading types: free-form triangular, lattice-form\n  triangular, Coons, and tensor-product patch meshes)\n- added options --grad-segments, --grad-overlap, and --grad-simplify to control\n  the approximation of color gradients\n- added option --no-merge to create separate text elements for each character\n  (patch by Khaled Hosny)\n- added a simple progress counter to the EPS to SVG converter\n- added opt2cpp.py as a free replacement for my non-free opt2cpp.xsl script\n  (thanks to Khaled Hosny for the implementation and for providing it for free)\n- added lookup of Ghostscript library in the Windows registry\n- fixed validity check of DVI files\n- fixed interaction of color specials and PostScript color operators\n- several code refactorings and improvements\n\ndvisvgm-1.8.1 (2014-08-29)\n- unreferenced clipPath elements are now removed from the SVG files\n- fixed side-effects caused by unexpected bop/eop operators in\n  PS specials (LP bug #1350688)\n- few improvements to configure.ac (patches by Khaled Hosny)\n- removed redundant code\n\ndvisvgm-1.8 (2014-07-29)\n- added option --clipjoin which tells dvisvgm to compute intersections\n  of clipping paths itself and not to delegate this task to the SVG renderer\n- added option --relative to create relative rather than absolute path commands\n- added evaluation of PS operator 'clippath' which copies the current clipping\n  path into the graphics path\n- fixed PS operator 'show' to prevent the creation of unintended path overlays\n- fixed memory leak in class FontEngine  (patch by Khaled Hosny)\n- fixed unintended throwing of a DVIException when dvisvgm is called with\n  option --list-specials\n- Cygwin builds of dvisvgm now look for the proper filename of the Ghostscript DLL\n\ndvisvgm-1.7 (2014-06-18)\n- all DVI files are pre-processed now to allow the implementation of\n  advanced features that rely on data not available on the pages being\n  converted\n- added support for internal hyperref links across pages\n- added \\special command dvisvgm:rawdef to insert raw SVG fragments to\n  the <defs> section\n- added the new \\special commands dvisvgm:rawset, dvisvgm:endrawset, and\n  dvisvgm:rawput to assign and access a sequence of SVG fragments via an\n  identifier (LP feature request #1215878)\n- removed redundant <missing-glyph> elements from SVG files\n- fixed support of external fonts containing characters not mapped by the\n  embedded unicode tables (LP bug #1276689)\n- fixed incorrect extent values shown in conjunction with the preview package\n- many refactorings and code improvements\n\ndvisvgm-1.6 (2014-04-22)\n- added option --zoom to \"visually\" scale the generated SVG graphics while\n  preserving the original size and position values of the graphic objects\n- extended argument syntax of option --linkmark to allow to select the\n  box/line color\n- changed default link marker from 'line' to 'box'\n- changed link markers to be only split on line breaks while extended in all\n  other cases\n- if libgs is not directly linked to the binary, dvisvgm now looks for\n  libgs.so.X instead of libgs.so (supported GS ABIs: X = 7, 8, 9)\n- removed time stamp and machine triplet from generated SVG files\n- some code improvements and refactorings\n\ndvisvgm-1.5.3 (2014-04-11)\n- improved positioning of PostScript graphics\n- fixed positioning of DVI rules/rectangles\n- switched internal computations from TeX points (pt) to PostScript points (bp)\n\ndvisvgm-1.5.2 (2014-01-10)\n- fixed handling of global font colors and color specials\n- several code improvements\n\ndvisvgm-1.5.1 (2013-10-29)\n- fixed processing of bounding box data created by the preview package\n- fixed processing of font definitions across DVI pages\n- fixed compilation issues occurred if processing of PS specials is disabled\n- don't print the logical page number if it's equal to the physical one\n- some minor code improvements\n\ndvisvgm-1.5 (2013-09-02)\n- added support for DVI format 3 as created by pTeX in vertical/tate mode\n- added support for DVI format 5 (XDV) as created by XeTeX\n- replaced numeric entity references by corresponding UTF-8 characters in\n  generated SVG files\n- added px unit to font-size attributes as used in the stylesheet section\n  to ensure correct computation of font sizes (LP bug #1215857)\n- various code refactorings\n\ndvisvgm-1.4 (2013-08-02)\n- added basic support for CMap files and CID-based fonts\n- added character mapping from CIDs to char codes based on the encoding tables of a non-CID font\n- added support for OTF fonts\n- added evaluation of bounding box data generated by the preview package\n- extended option --linkmark to mark hyperlinked areas with an arbitrary background color\n- PS handler: improved evaluation of PS header specials\n- PS handler: improved evaluation of operator 'show'\n- removed DOCTYPE declaration from generated SVG files\n- removed encoding attribute from xml declaration (replaces ISO-8859-1 with UTF-8)\n- various code improvements and refactorings\n\ndvisvgm-1.3 (2013-05-13)\n- added support for hyperref specials\n- added command-line option --linkmarker to select the way how to mark hyperlinked areas\n- dvisvgm builds for MiKTeX now try to access the Ghostscript DLL provided by MiKTeX so that\n  it's no longer necessary to install Ghostscript separately\n- improved the handling of TFM files to avoid failures in case of malformed files\n- added evaluation of Japanese Font Metric (JFM) files\n- the bundled potrace library has been removed from the source tarball as it's easy to build\n  the latest releases from the original sources available at http://potrace.sourceforge.net\n- several code refactorings\n\ndvisvgm-1.2.2 (2013-04-26)\n- fixed a bug that prevented the lookup of fontmap files\n- avoid throwing an exception but print a warning message if MiKTeX is not available\n- print a warning message if PostScript specials are found but ignored\n- added information about \"dvisvgm -E\" to the --help text and to the manpage\n- various code refactorings and cleanups\n\ndvisvgm-1.2.1 (2013-04-09)\n- updated bundled potrace library to version 1.11\n- avoid building bundled potracelib if system library is present (patch by Alexis Ballier)\n- allow background color specials to create white background rectangles\n- code refactorings and cleanup\n\ndvisvgm-1.2 (2013-03-01)\n- PostScript handler: added support of tiling patterns\n- PostScript handler: added support for EPS files with binary headers/footers\n- added option --eps to directly convert EPS files to SVG\n- added option --precision to select the number of decimal places used in the generated SVG files\n- added an optional argument to --help to choose a display variant\n- fixed the text alignment of the --help output\n- improved handling of PostScript operator \"show\"\n- choose the correct output location if the input file argument contains path specifiers (Windows only)\n\ndvisvgm-1.1 (2013-01-22)\n- added evaluation of pdf:mapline and pdf:mapfile specials\n- added evaluation of subfont file definitions (.sfd files)\n- added support for TTC (TrueType collection) fonts\n- added evaluation of font style parameters given in a font map definition\n- renamed option --map-file to --fontmap\n- the new option --fontmap allows multiple mapfile arguments and optional mode specifiers\n- if a PostScript error occurs, dvisvgm prints an error message together with the\n  PS operand stack, as generated by Ghostscript\n- if font checksums don't match, dvisvgm prints a warning now\n- avoid throwing exceptions if referenced encoding files are not available\n- added support for 64bit Windows builds\n- removed compilation error when using a C++11 compiler (patch by Peter Breitenlohner)\n- some code refactorings and improvements\n\ndvisvgm-1.0.12 (2012-09-27)\n- print a message if the processing of PostScript specials is disabled\n- the resulting SVG is now scaled to bp (\"big point\" units) properly\n- added the evaluation of PS operators rectclip, rectfill, and rectstroke\n- ignore dvips operator bop if present in a PS special\n- fixed processing of special strings that contain newline characters\n\ndvisvgm-1.0.11 (2012-03-09)\n- added Ghostscript to library list printed by --version=yes\n- fixed a bug in the number parser that could lead to displaced objects (SF bug #3471097)\n- corrected the computation of bounding boxes of DVI rules (lp bug #948713)\n- improved code compatibility to make dvisvgm compile with clang++ (patch by Vladimir Lomov)\n- fixed formatting issues in the manual page\n- updated information about bug reporting (tracker moved to Launchpad)\n\ndvisvgm-1.0.10 (2011-12-18)\n- introduced environment variable DVISVGM_COLORS to allow user-defined message colors\n- fixed linking issue concerning libfreetype\n- fixed potential clashes of character IDs\n\ndvisvgm-1.0.9 (2011-10-13)\n- fixed segfault occurred in TeX Live Win32 caused by mf.exe being unavailable\n  (thanks to Akira Kakuto for tracking down the issue)\n- updated bundled potrace library to version 1.10\n- some minor code improvements\n\ndvisvgm-1.0.8 (2011-05-31)\n- PS handler: added evaluation of PS operators save, restore, and grestoreall\n- PS handler: fixed potential segfault caused by invisible zero-length paths\n- fixed computation of current drawing position influenced by PS and DVI actions\n- don't stop Metafont conversions on errors any longer in order to convert\n  buggy MF fonts properly\n\ndvisvgm-1.0.7 (2011-05-06)\n- improved overall handling of PS specials\n- fixed broken PS special subset 'ps::'\n- fixed scaling of PS line properties (width, dash distance, etc.)\n- fixed semantics of TPIC special 'ip' (doesn't draw polygon outlines any longer)\n\ndvisvgm-1.0.6 (2011-04-21)\n- fixed segfault occurred if a (malformed) DVI file calls set_char/put_char\n  without preceding font definition\n- added CTRL-C handler\n- MiKTeX support updated to version 2.9\n- some code refactorings\n\ndvisvgm-1.0.5 (2011-03-01)\n- added optional integer argument to option -n to disable generation of <use> elements\n- added missing unit to width/height attributes of svg root element (SF bug #3185773)\n- added integrity check to font cache files\n- updated bundled potrace library to version 1.9\n- fixed a couple of minor issues\n\ndvisvgm-1.0.4 (2010-12-18)\n- added missing line width/dash pattern scaling to PS handler\n- fixed scaling issue in PS positioning\n- fixed compilation issue related to FreeType 2.4.0\n\ndvisvgm-1.0.3 (2010-08-06)\n- applied some more portability patches for TeX Live\n- fixed a potential memory issue\n- fixed a transformation issue regarding special 'psfile' (SF bug #3037372)\n\ndvisvgm-1.0.2 (2010-06-22)\n- applied latest TeX Live portability patches sent by Peter Breitenlohner and Karl Berry\n- fixed a potrace name clash occurred on Mac OS X Tiger\n- fixed putchar() name clash occurred on Solaris\n- fixed a couple of conversion warnings\n- updated the test suite\n\ndvisvgm-1.0.1 (2010-06-11)\n- fixed a memory issue in the PS handler that could lead to a segfault (SF bug #3013392)\n- fixed a recursion issue in the PS handler\n- suppress ANSI color code when terminating\n\ndvisvgm-1.0 (2010-06-08)\n- conversion of multiple pages (must be enabled explicitly, see option --pages)\n- added transparency support to the PS handler\n- improved conversion results of the PS handler\n- added support for computation of local bounding boxes\n- optional colorization of dvisvgm messages (option --color)\n- improved progress indicator (option --progress)\n- a couple of improvements of the build system\n\ndvisvgm-0.9.1 (2010-04-23)\n- CSS style definitions omit unnecessary fonts now\n- SVG validity was broken when using font elements\n- fixed two memory issues that could lead to segfaults\n\ndvisvgm-0.9 (2010-03-25)\n- added option --exact and corresponding algorithms to compute the exact\n  bounding boxes of characters\n- added option --keep that prevents deleting temporary font files\n- extended option --trace-all by an optional boolean argument controlling\n  the re-tracing of glyphs\n- fixed bug in evaluation of embedded PS headers\n- several code refactorings\n\ndvisvgm-0.8.8 (2010-02-02)\n- added option --libgs and evaluation of environment variable LIBGS\n  to overwrite the expected file name of the GS shared library\n  (only available if dvisvgm isn't linked against libgs and GS support\n  isn't completely disabled)\n- option --bbox can now be used to enlarge the minimal bounding box by\n  a given amount\n- fixed bug in evaluation of option --page\n- applied patches sent by Peter Breitenlohner to prepare the integration of\n  dvisvgm into TeX Live\n- some code refactorings\n\ndvisvgm-0.8.7 (2009-11-09)\n- fixed a bounding box issue concerning italic corrections\n- PS handler: zero-length paths are now drawn as dots\n- PS handler: fixed a path positioning issue\n- PS handler: colors set by color specials are now considered properly\n- added macro {?nl} to be used with special dvisvgm:raw\n\ndvisvgm-0.8.6 (2009-10-13)\n- renamed command-line option --bbox-format to --bbox\n- option --bbox can now be used to set an arbitrary bounding box\n- added the two special variants \"dvisvgm:bbox abs\" and \"dvisvgm:bbox fix\"\n- PS clipping path sequences and intersections are now handled correctly\n- fixed a PS bounding box bug\n- fixed a couple of PS positioning issues reported by John Bowman\n- fixed a bit shift overflow in the font tracer occurred on 64-bit systems\n\ndvisvgm-0.8.5 (2009-10-01)\n- added an optional depth parameter to special dvisvgm:raw\n- updated the man page\n- added LGPL license text needed for the gzstream wrapper classes\n\ndvisvgm-0.8.4 (2009-09-17)\n- improved the command-line parser to be more POSIX-compliant\n- added a simple progress indicator for time-consuming special operations\n- option --cache prints more information about the cached fonts\n- fixed a clipping bug in the PostScript handler\n  (thanks to John Bowman for also providing a patch for this issue)\n- fixed a bug in computation of the PS bounding box\n- fixed a memory bug in the GF tracer module\n\ndvisvgm-0.8.3 (2009-08-28)\n- added basic evaluation of the PostScript \"show\" operator\n  (handles PSTricks Type 3 fonts properly now)\n- improved checks for Ghostscript and potrace library in configure script\n- external Ghostscript and potrace development files are used if available\n- PostScript header/prologue files are now loaded regardless of converted page\n- replaced command-line option variant --cache=? by --cache\n\ndvisvgm-0.8.2 (2009-08-24)\n- changed license of dvisvgm to GPL version 3 or later\n- replaced getopt-based command-line parser by own implementation\n  in order to simplify future internationalizations\n- fixed memory bug in fontmap reader\n\ndvisvgm-0.8.1 (2009-08-02)\n- added evaluation of more psfile parameters\n- fixed computation of bounding box in psfile special\n- fixed compilation errors and a conversion bug occurred on x64 systems\n\ndvisvgm-0.8 (2009-07-27)\n- experimental evaluation of PostScript specials has been added (requires\n  a recent version of the Ghostscript shared library libgs.so or gsdll32.dll)\n- several code improvements and refactorings\n- fixed compilation bug occurred when using GCC 4.4.x\n\ndvisvgm-0.7.3 (2009-04-24)\n- fixed bug in font map reader that could cause a segmentation fault\n- fixed bug in creation of shorthand path drawing commands\n- fixed bug in TPIC special handler\n\ndvisvgm-0.7.2 (2009-04-02)\n- font caching has been added (speeds up embedding of bitmap fonts)\n- added option --trace-all that enables tracing of all glyphs of all\n  bitmap fonts used in the current DVI file. Even glyphs that are currently\n  not needed are considered. This avoids multiple calls of Metafont for the\n  same fonts. In combination with the new caching functionality this can\n  drastically increase the speed of successive dvisvgm calls.\n- if option --no-fonts is used, all glyph sizes are now computed correctly\n- use shorthand path commands in SVG fonts if possible\n\ndvisvgm-0.7.1 (2009-03-09)\n- evaluation of a subset of emTeX specials has been added\n- specials for embedding of raw SVG snippets have been added\n- evaluation of TPIC specials has been added\n- added background color support\n- added option -n, --no-fonts that replaces fonts by paths\n  (enables applications w/o SVG font support to render dvisvgm's output properly)\n- moved defs to top of SVG file to make Firefox's SVG renderer happy\n- fixed bug in color handler\n\ndvisvgm-0.7 (2009-02-16)\n- basic support for evaluation of specials has been added\n- evaluation of color specials has been added\n- renamed command-line option -S to --no-specials and inverted previous behavior\n- selected special sets can be disabled by optional arguments to --no-specials\n  (currently only color specials)\n- added option --no-style (see manpage for further details)\n- added optional '+' flag to option --map-file (see manpage for further details)\n- fixed \\magnificaton bug (dvi magnification factor is now applied properly)\n- fixed buggy call of maketfm/makemf in Windows/MiKTeX version\n- fixed buggy evaluation of command-line argument -m/--map-file\n- several internal code improvements\n\ndvisvgm-0.6.1 (2009-01-29)\n- added support for dvips map files\n- removed dependency on dvipdfm's map file (now ps2pk.map, psfonts.map or dvipdfm.map is used by default)\n- fixed compilation bug #2535497\n- some internal refactorings\n\ndvisvgm-0.6 (2009-01-23)\n- added support for varying font encodings\n- updated MiKTeX support using its COM interface\n- fixed incomplete handling of nested virtual fonts\n- fixed a font handling bug that could cause segmentation faults\n- fixed bug in matrix transformation code\n- updated bundled potrace library to version 1.8\n\ndvisvgm-0.5 (2007-03-26)\n- redesigned and improved font handling\n- added support for virtual fonts\n- evaluation of dvipdfm's map file to find font files with differing\n  names (e.g. cork-lmr10 => lmr10)\n- automatic invocation of mktexmf etc. in case of missing font files (tfm, mf)\n- command-line option -m has been renamed to -M\n- added command-line options -m/--map-file and -n/--no-mktexmf\n- memory bug in StreamCounter class has been fixed\n- added sources of Peter Selinger's potrace library (part of potrace, https://potrace.sourceforge.net)\n  to simplify the build process\n\ndvisvgm-0.4.3 (2007-01-03)\n- problem with changed freetype API (freetype version >= 2.2.1) has been fixed\n- updated MiKTeX support to version 2.5\n- minor code improvements\n- some unit tests based on CxxTest (http://cxxtest.sourceforge.net) have been added\n\ndvisvgm-0.4.2 (2005-09-22)\n- added SVG transformation options\n- some bugfixes in command line frontend and TFM handling\n- code refactorings to improve modularity and extensibility\n\ndvisvgm-0.4.1 (2005-09-02)\n- added option -b to specify the bounding box\n- added a manual page\n\ndvisvgm-0.4 (2005-08-24)\n- Added a glyph tracing module that vectorizes Metafont's bitmap output\n  if no corresponding Type 1 font file is available.\n\ndvisvgm-0.3 (2005-08-10)\n- Initial public release with basic conversion functionality.\n"
  },
  {
    "path": "README",
    "content": "dvisvgm -- A DVI to SVG converter\n\nDESCRIPTION\n\n dvisvgm is a utility for TeX/LaTeX users. It converts DVI, EPS, and\n PDF files to the XML-based scalable vector graphics format SVG.\n\n\nDEPENDENCIES\n\n dvisvgm relies on the following free libraries:\n * Clipper (https://www.angusj.com/delphi/clipper/documentation/Docs/Overview/_Body.htm)\n   To compute the intersections of two curved paths, dvisvgm flattens the paths\n   to polygons, intersects them using Clipper, and reconstructs the curves\n   afterwards.\n\n * FreeType 2 (https://freetype.org)\n   This library is used to extract the glyph outlines from vector fonts\n   (PFB, OTF, TTF).\n\n * Ghostscript (https://www.ghostscript.com)\n   The PostScript special handler requires the Ghostscript shared library\n   libgs.so.N (Linux) or gsdll32.dll/gsdll64.dll (Windows) to be installed.\n   If the configure script finds the corresponding Ghostscript development\n   files on the system, it directly links against libgs.so.N, where N is the\n   library's ABI version. Otherwise, the library is looked up during runtime,\n   and the PostScript support is enabled only if the shared library can be\n   found. Due to incompatible changes of the Ghostscript API, dvisvgm requires\n   Ghostscript 8.31 or later.\n\n * kpathsea (https://tug.org/kpathsea)\n   This library is part of the Web2C package and is usually installed in\n   conjunction with a TeX distribution. kpathsea provides functions for\n   searching files in the large texmf tree. Please ensure that you use the\n   kpathsea version coming with or matching your TeX system.\n\n * potracelib (https://potrace.sourceforge.net)\n   Peter Selinger's bitmap tracing library is utilized to vectorize Metafont's\n   bitmap output. A recent version is also part of the dvisvgm sources.\n\n * ttfautohint (https://www.freetype.org/ttfautohint)\n   dvisvgm can optionally be built with ttfautohint support to allow for\n   autohinting the generated TrueType, WOFF, and WOFF2 fonts. Since this is\n   still an experimental feature, ttfautohint support is disabled by default.\n   The development files required for Windows can be found at\n   https://github.com/mgieseki/ttfautohint-dll.\n\n * woff2 and brotli (https://github.com/google/woff2)\n   These Google libraries are bundled with the dvisvgm sources. They are used\n   to create WOFF2 from TrueType fonts.\n\n * xxHash (https://github.com/Cyan4973/xxHash)\n   The xxHash library provides a fast hash algorithm. dvisvgm uses it to\n   create unique integer values from PostScript character names in order to\n   store them in a compact way together with their Unicode points. A recent\n   version of xxHash is bundled with the dvisvgm sources.\n\n * zlib (https://www.zlib.net)\n   This library is required to create compressed SVGZ files.\n\n\nBUILDING DVISVGM FROM SOURCE\n\n dvisvgm is written in C++11 (ISO C++ standard 2011) and requires an appropriate\n compiler, like GCC 4.9, Clang 3.3, or any later version. The configure script\n checks for the availability of C++11 support and adds the proper compiler\n options if necessary.\n\n Quick installation info:\n   * ensure that the development packages of all libraries, listed above,\n     are installed\n   * type \"autoreconf -fi\" if \"configure\" is not present in the dvisvgm\n     root folder\n   * either type \"./configure\" if you don't want to use the bundled libraries\n     brotli, potrace, woff2, and xxHash but link against the corresponding\n     system libraries,\n     or type \"./configure --enable-bundled-libs\" in order to build and\n     statically link the bundled libraries.\n   * type \"make\"\n   * type \"make install\" as root (or \"sudo make install\")\n\n For generic configuration instructions see the file INSTALL.\n\n The configure script should recognize all necessary parameters.\n If a library is installed but not detected, specify its location\n as commandline parameter of configure, e.g.\n   ./configure --with-freetype=/usr/local/freetype\n (all available options can be displayed with ./configure --help)\n\n The tracer module calls Metafont in case of lacking TFM or PFB files\n via a system call. Please ensure that Metafont is installed and\n reachable through the system's search path.\n\n If you don't like compiling the sources yourself, you can\n download pre-compiled executables for Windows and MiKTeX\n from the project website instead (see below).\n\n\nUSAGE\n Information about the command-line interface and the available options can be\n found in the manual page.\n\n\nADDITIONAL INFORMATION\n This package is available from CTAN (dviware/dvisvgm) and can be downloaded\n from the project website as well:\n\n    https://dvisvgm.de\n\n Here you can find the sources, pre-compiled binaries and further additional\n information about the converter and related topics.\n\n If you've found a bug, please let me know. You can either send me an email or\n preferably use the bug tracker at GitHub (https://github.com/mgieseki/dvisvgm).\n\n\nCOPYRIGHT\n\n Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>\n\n This program is free software; you can redistribute it and/or modify it\n under the terms of the GNU General Public License as published by the\n Free Software Foundation; either version 3 of the License, or (at your\n option) any later version.\n\n This program is distributed in the hope that it will be useful, but\n WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\n Public License for more details.\n\n See file COPYING for details.\n\n"
  },
  {
    "path": "README.md",
    "content": "_dvisvgm_ &ndash; A fast DVI to SVG converter\n=============================================\n[![C/C++ CI](https://github.com/mgieseki/dvisvgm/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/mgieseki/dvisvgm/actions/workflows/c-cpp.yml)\n[![Build Status](https://ci.appveyor.com/api/projects/status/0rbkw88js1on4g2u/branch/master?svg=true)](https://ci.appveyor.com/project/mgieseki/dvisvgm/branch/master)\n[![Copr Status](https://copr.fedorainfracloud.org/coprs/mgieseki/dvisvgm/package/dvisvgm/status_image/last_build.png)](https://copr.fedorainfracloud.org/coprs/mgieseki/dvisvgm/package/dvisvgm)\n[![Code Status](https://scan.coverity.com/projects/1099/badge.svg)](https://scan.coverity.com/projects/1099)\n[![License](https://img.shields.io/:license-GPL%20v3+-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.en.html)\n[![Releases](https://img.shields.io/github/release/mgieseki/dvisvgm.svg)](https://github.com/mgieseki/dvisvgm/releases)\n\nDescription\n-----------\n\n_dvisvgm_ is a utility for TeX/LaTeX users. It converts\n[DVI](https://en.wikipedia.org/wiki/Device_independent_file_format),\n[EPS](https://en.wikipedia.org/wiki/Encapsulated_PostScript), and\n[PDF](https://en.wikipedia.org/wiki/PDF) files to the\nXML-based scalable vector graphics format [SVG](https://www.w3.org/TR/SVG).\nThe latest releases support standard DVI files (version 2) as well as DVI output\ncreated by [pTeX](https://ctan.org/pkg/ptex) in vertical mode (version 3),\nand [XeTeX](https://xetex.sourceforge.net) (versions 5 to 7, also known as XDV).\n\nTo get an impression of the conversion results, have a look at the\n[examples](https://dvisvgm.de/Examples) created with _dvisvgm_.\n\nShort overview of the main features:\n\n* Complete font support including [virtual fonts](https://texfaq.org/FAQ-virtualfonts), evaluation of [font encodings](https://texfaq.org/FAQ-whatenc), CMap files, sub-font definitions and font maps.\n* Glyph outlines of all required fonts are embedded into the generated SVG files.\n* The font data can be embedded in SVG, TrueType, WOFF, or WOFF2 format.\n* Glyph outlines of fonts that are not available in a vector format are generated on-the-fly by vectorizing [METAFONT](https://en.wikipedia.org/wiki/Metafont)'s bitmap output.\n* _dvisvgm_ allows to replace [font elements](https://www.w3.org/TR/SVG/fonts.html) by [paths](https://www.w3.org/TR/SVG/paths.html) so that applications without SVG font support are enabled to render dvisvgm's output properly.\n* Computes tight bounding boxes for the generated graphics, but supports common paper formats and arbitrary user-defined sizes as well.\n* Option `--eps` allows to convert [EPS](https://en.wikipedia.org/wiki/Encapsulated_PostScript) files to SVG.\n* Option `--pdf` allows to convert [PDF](https://en.wikipedia.org/wiki/PDF) documents to SVG.\n* [Intersections of clipping paths](https://dvisvgm.de/Clipping) can be computed directly instead of delegating this task to the SVG renderer which increases the compatibility of the generated SVG files.\n* Approximates PostScript [color gradient fills](https://dvisvgm.de/Gradients) not directly supported by SVG 1.1.\n* The generated SVG structure and data can be improved with the built-in [SVG optimizer](https://dvisvgm.de/Manpage/#opt-optimize).\n* Optionally creates compressed [SVGZ](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics#Compression) files.\n* Provides options for applying page transformations, like translation, rotation, scaling, and skewing.\n* Evaluates several [specials](https://texfaq.org/FAQ-specials) including color, emTeX, tpic, hyperref/HyperTeX, papersize, PDF hyperlink and mapfile, as well as PostScript specials.\n* The converter was successfully tested on various Linux ([TeX Live](https://www.tug.org/texlive)) and Windows ([MiKTeX](https://www.miktex.org), TeX Live) systems.\n* _dvisvgm_ has been added to [TeX Live](https://www.tug.org/texlive), [MiKTeX](https://www.miktex.org), and [MacPorts](https://www.macports.org). It is therefore available for a wide range of operating systems.\n\n\nUsage\n-----\nFor detailed information about the command-line interface and all available\noptions of _dvisvgm_, see the [manual page](https://dvisvgm.de/Manpage).\n\n\nDependencies\n------------\n\n_dvisvgm_ relies on the following free libraries:\n\n* [Clipper](https://www.angusj.com/delphi/clipper/documentation/Docs/Overview/_Body.htm)  \n  To compute the intersection of two curved paths, _dvisvgm_ flattens the paths to\n  polygons, intersects them using a slightly modified version of Clipper, and reconstructs\n  the curves afterwards. A slightly modified version of Clipper is bundled with the sources.\n\n* [FreeType 2](https://freetype.org)  \n  This library is used to extract the glyph outlines from vector fonts (PFB, OTF, TTF).\n\n* [Ghostscript](https://www.ghostscript.com)  \n  The PostScript special handler requires the Ghostscript shared library `libgs.so.N` (Linux)\n  or `gsdll32.dll`/`gsdll64.dll` (Windows) to be installed. If the configure script\n  finds the corresponding Ghostscript development files on the system, it\n  directly links against `libgs.so.N`, where _N_ is the library's ABI version.\n  Otherwise, the library is looked up during runtime, and the PostScript support is\n  enabled only if the shared library can be found. Due to incompatible changes of the\n  Ghostscript API, _dvisvgm_ requires Ghostscript 8.31 or later.\n\n* [Kpathsea](https://tug.org/kpathsea)  \n  This library is part of the Web2C package and is usually installed in\n  conjunction with a TeX distribution. Kpathsea provides functions for searching\n  files in the large `texmf` tree. Please ensure that you use the kpathsea version\n  coming with or matching your TeX system.\n\n* [potracelib](https://potrace.sourceforge.net)  \n  Peter Selinger's bitmap tracing library is utilized to vectorize Metafont's\n  bitmap output. It's also bundled with the _dvisvgm_ sources.\n\n* [ttfautohint](https://www.freetype.org/ttfautohint)  \n  _dvisvgm_ can optionally be built with ttfautohint support to allow for autohinting the\n  generated TrueType, WOFF, and WOFF2 fonts. Since this is still an experimental feature,\n  ttfautohint support is disabled by default. To enable it, run `configure` with option\n  `--with-ttfautohint`.\n\n* [woff2](https://github.com/google/woff2) and [brotli](https://github.com/google/brotli)  \n  These Google libraries are bundled with the _dvisvgm_ sources. They are used\n  to create WOFF2 files from TrueType fonts.\n\n* [xxHash](https://github.com/Cyan4973/xxHash)  \n  The xxHash library provides a fast hash algorithm. _dvisvgm_ uses it to create\n  unique integer values from PostScript character names in order to store them in\n  a compact way together with their Unicode points. A recent version of xxHash is\n  bundled with the _dvisvgm_ sources.\n\n* [zlib](https://www.zlib.net)  \n  This library is required to create compressed [SVGZ](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics#Compression) files.\n\n\nBuilding dvisvgm from source\n----------------------------\n\n_dvisvgm_ is written in C++11 ([ISO C++ standard 2011](https://www.iso.org/standard/83626.html))\nand requires an appropriate compiler, like [GCC](https://gcc.gnu.org) 4.9, [Clang](https://clang.llvm.org) 3.3,\nor any later version. The configure script checks for the availability of C++11 support and\nadds the proper compiler options if necessary.\n\nQuick installation info:\n\n* ensure that the development packages of all libraries, listed above, are installed\n* type `autoreconf -fi` if `configure` is not present in the _dvisvgm_ root folder\n* either type `./configure` if you don't want to use the bundled libraries _brotli_, _potrace_, _woff2_, and _xxHash_ but link\nagainst the corresponding system libraries,\n* or type `./configure --enable-bundled-libs` in order to build and statically link the bundled libraries.\n* type `make`\n* type `make install` as root (or `sudo make install`)\n\nFor generic configuration instructions see the file INSTALL.\n\nThe configure script should recognize all necessary parameters.\nIf a library is installed but not detected, specify its location\nas command-line parameter of configure, e.g.\n`./configure --with-freetype=/usr/local/freetype`\n(all available options can be displayed with `./configure --help`)\n\nThe tracer module calls Metafont in case of lacking TFM or PFB files\nvia a system call. Please ensure that Metafont is installed and\nreachable through the system's search path.\n\nIf you don't like compiling the sources yourself, you can download\npre-compiled binaries for Windows and MiKTeX from the\n[project website](https://dvisvgm.de) instead.\n\n\nAdditional Information\n----------------------\n\nThis package is available from [CTAN](https://ctan.org/pkg/dvisvgm), and can be\ndownloaded from the [project website](https://dvisvgm.de) as well. There you find\nthe sources, [pre-compiled binaries](https://dvisvgm.de/Downloads), the\n[manual page](https://dvisvgm.de/Manpage), [FAQs](https://dvisvgm.de/FAQ) and further\ninformation about the converter and related topics.\n\nIf you've found a bug, please let me know. You can either send me an email or\npreferably use the [bug tracker at GitHub](https://github.com/mgieseki/dvisvgm/issues).\n\n\nCopyright\n---------\n\nCopyright &copy; 2005&ndash;2025 [Martin Gieseking](mailto:martin.gieseking@uos.de)\n\nThis program is free software; you can redistribute it and/or modify it under the terms\nof the GNU General Public License as published by the Free Software Foundation; either\nversion 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\nwithout even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\nSee the [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.en.html) for more\ndetails.\n\n"
  },
  {
    "path": "configure.ac",
    "content": "# This file is part of dvisvgm\n# Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>\n#\n# Process this file with autoconf to produce a configure script.\n\nAC_PREREQ([2.69])\nAC_INIT([dvisvgm],[3.6],[martin.gieseking@uos.de])\nDATE=\"October 2025\"\nAC_CONFIG_SRCDIR(src)\nAC_CONFIG_HEADERS([config.h])\nAC_CONFIG_MACRO_DIR([m4])\nAC_CANONICAL_HOST\nAM_INIT_AUTOMAKE([subdir-objects dist-xz])\n\nAM_CONDITIONAL([TEXLIVE_BUILD], [test \"x$enable_texlive_build\" = xyes])\n\nAH_TEMPLATE([HOST_SYSTEM], [The machine triplet of the host system])\nAC_DEFINE_UNQUOTED([HOST_SYSTEM], [\"$host\"])\n\n# Checks for programs.\nAC_PROG_CC\nAC_PROG_CXX\nAX_CXX_COMPILE_STDCXX([11])\nAM_PROG_AR\nLT_INIT\n\nAC_LANG(C)\n\nAX_CHECK_COMPILE_FLAG([-Wmismatched-tags -Wno-mismatched-tags], [CXXFLAGS=\"$CXXFLAGS -Wno-mismatched-tags\"])\nAC_CHECK_HEADERS([sys/time.h sys/timeb.h xlocale.h])\nAC_HEADER_TIOCGWINSZ\n\nCPPFLAGS_SAVE=\"$CPPFLAGS\"\nCFLAGS_SAVE=\"$CFLAGS\"\nLDFLAGS_SAVE=\"$LDFLAGS\"\n\n# Check availability and usability of the kpathsea library\nAC_ARG_VAR(KPSE_CFLAGS, [C/C++ compiler flags for the kpathsea library])\nAC_ARG_VAR(KPSE_LIBS, [linker flags for the kpathsea library])\nAC_ARG_VAR(KPSE_LIBS, [])\nAC_ARG_WITH([kpathsea],\n\t[AS_HELP_STRING([--with-kpathsea=prefix], [set location of kpathsea library])],\n\t[with_kpathsea=\"$withval\"],\n\t[with_kpathsea=yes])\n\nAS_IF([test \"x$with_kpathsea\" != \"xyes\"],\n\t[KPSE_CFLAGS=\"-I$with_kpathsea/include\" KPSE_LIBS=\"-L$with_kpathsea/lib\"]\n\t[CPPFLAGS=\"$CPPFLAGS $KPSE_CFLAGS\" CFLAGS=\"$CFLAGS $KPSE_CFLAGS\" LDFLAGS=\"$LDFLAGS $KPSE_LIBS\"])\n\nAC_CHECK_HEADER([kpathsea/kpathsea.h],,\n\t[AC_MSG_ERROR([please install the kpathsea development package])])\nAC_CHECK_LIB([kpathsea], [kpse_find_file],,\n\t[AC_MSG_ERROR([libkpathsea not found, please install the corresponding package first])])\n\nAC_MSG_CHECKING([kpathsea version])\nAC_RUN_IFELSE([AC_LANG_SOURCE([#include <stdio.h>\n\t#include <stdlib.h>\n\t#include <kpathsea/kpathsea.h>\n\tint main() {\n\t\tFILE *f;\n\t\tf = fopen(\"kpseversion\", \"w\");\n\t\tif(!f) exit(1);\n\t\tfprintf(f, \"%s\\n\", KPSEVERSION);\n\t\tfclose(f);\n\t\texit(0);\n\t}])],\n\t[kpseversion=`cat kpseversion|sed 's/kpathsea version //'`], [kpseversion=], [kpseversion=unknown])\nAC_MSG_RESULT(\"$kpseversion\")\nrm -f kpseversion\nAS_IF([test -z \"$kpseversion\"],\n\t[AC_MSG_ERROR([Could not compile a simple kpathsea program -- check your installation])])\nAC_SUBST(KPSE_CFLAGS)\nAC_SUBST(KPSE_LIBS)\n\n# Check how to link Ghostscript\nhave_libgs=yes\nAC_CHECK_HEADER([ghostscript/iapi.h],\n\t[AC_CHECK_LIB(gs, gsapi_revision,, [have_libgs=no])],\n\t[have_libgs=no])\nAS_IF([test \"x$have_libgs\" = \"xno\"],\n\t# Ghostscript not found, check for dlopen\n\t[AC_CHECK_LIB(dl, dlopen,,\n\t\t[AC_DEFINE(DISABLE_GS, 1, [Set to 1 if PostScript support should be disabled])]\n\t\t[AC_MSG_WARN(PostScript support disabled)])])\n\n# Check for pkg-config\nPKG_PROG_PKG_CONFIG\n\n# Check for libraries.\nPKG_CHECK_MODULES([FREETYPE], [freetype2])\n\nAC_ARG_ENABLE([woff],\n\t[AS_HELP_STRING([--disable-woff], [Disable WOFF support @<:@default=no@:>@])],\n\t[],\n\t[enable_woff=yes])\nAM_CONDITIONAL([ENABLE_WOFF], [test \"x$enable_woff\" = \"xyes\"])\n\nAC_ARG_WITH([ttfautohint],\n\t[AS_HELP_STRING([--with-ttfautohint@<:@=prefix@:>@], [enable ttfautohint support (disabled by default)])],\n\t[with_ttfautohint=\"$withval\"],\n\t[with_ttfautohint=no])\n\n# Add option to enable linking of bundled libraries (brotli, potrace, woff2, xxhash).\nAC_ARG_ENABLE([bundled-libs],\n\t[AS_HELP_STRING([--enable-bundled-libs], [use bundled libraries instead of the system ones @<:@default=no@:>@])])\nAM_CONDITIONAL([USE_BUNDLED_LIBS], [test \"x$enable_bundled_libs\" = \"xyes\"])\n\n# If option --enable-bundled-libs is not given, look for system libraries of brotli, potrace, woff2, and xxhash.\nAS_IF([test \"x$enable_bundled_libs\" != \"xyes\"],\n\t[AC_CHECK_HEADER(potracelib.h,\n\t\t[AC_SEARCH_LIBS(potrace_trace, [potrace], [have_potrace=yes])])]\n\t[AC_CHECK_HEADER([xxhash.h],\n\t\t[AC_SEARCH_LIBS(XXH32, [xxhash], [have_xxhash=yes])])]\n\t[AS_IF([test \"x$enable_woff\" = \"xyes\"],\n\t\t[PKG_CHECK_MODULES(BROTLI, [libbrotlienc], [have_brotli=yes])]\n\t\t[PKG_CHECK_MODULES(WOFF2, [libwoff2enc], [have_woff2=yes])])])\nAM_CONDITIONAL(HAVE_POTRACE, [test \"x$have_potrace\" = \"xyes\"])\nAM_CONDITIONAL(HAVE_BROTLI, [test \"x$have_brotli\" = \"xyes\"])\nAM_CONDITIONAL(HAVE_WOFF2, [test \"x$have_woff2\" = \"xyes\"])\nAM_CONDITIONAL(HAVE_XXHASH, [test \"x$have_xxhash\" = \"xyes\"])\n\n# Dummy required for TL build sections in automake files\nAM_CONDITIONAL(WIN32, false)\n\nAS_IF([test \"x$enable_woff\" != \"xyes\"],\n\t[AC_DEFINE([DISABLE_WOFF], 1, [Define if WOFF support is disabled])],\n\t[AS_IF([test \"x$with_ttfautohint\" != \"xno\"],\n\t\t[AS_IF([test \"x$with_ttfautohint\" = \"xyes\"],\n\t\t\t# --with-ttfautohint without path => check via pkg-config\n\t\t\t[PKG_CHECK_MODULES([TTFAUTOHINT], [ttfautohint],,\n\t\t\t\t[AC_MSG_ERROR([can't locate ttfautohint, use \"--with-ttfautohint=path\" to specify its location])])],\n\t\t\t# --with-ttfautohint=/path/ttfautohint given\n\t\t\t[TTFAUTOHINT_CFLAGS=\"-I$with_ttfautohint/include\"]\n\t\t\t[TTFAUTOHINT_LIBS=\"-L$with_ttfautohint/lib\"])]\n\t\t[CPPFLAGS=\"$CPPFLAGS $TTFAUTOHINT_CFLAGS\" CFLAGS=\"$CFLAGS $TTFAUTOHINT_CFLAGS\" LDFLAGS=\"$LDFLAGS $TTFAUTOHINT_LIBS\"]\n\t\t[AC_CHECK_HEADERS([ttfautohint.h],, [AC_MSG_WARN([ttfautohint.h not found])])]\n\t\t[AC_CHECK_LIB([ttfautohint], [TTF_autohint],,\n\t\t\t[AC_MSG_WARN([no working ttfautohint library found])]\n\t\t\t[AC_CHECK_LIB(dl, dlopen,\n\t\t\t\t[AC_MSG_NOTICE([enabled dynamic loading of ttfautohint])],\n\t\t\t\t[AC_MSG_WARN([disabled ttfautohint support])])])]\n\t\t[AC_SUBST(TTFAUTOHINT_CFLAGS) AC_SUBST(TTFAUTOHINT_LIBS)])])\n\nAC_CHECK_LIB(z, gzopen)\n\n# Check for header files.\nAC_HEADER_DIRENT\n\nAC_CHECK_HEADERS_ONCE([libintl.h stdlib.h string.h strings.h unistd.h])\n\n# Check for typedefs, structures, and compiler characteristics.\nAC_HEADER_STDBOOL\nAC_TYPE_SIZE_T\nAC_STRUCT_TM\n\n# Check for library functions.\nAC_FUNC_STAT\nAC_CHECK_FUNCS_ONCE([ftime gettimeofday sigaction umask uselocale])\nAX_GCC_BUILTIN(__builtin_clz)\n\n# add options for selection of \"optional\" library locations\n# currently these libraries are mandatory; the --with-foo options\n# are used to specify the locations explicitly\n\nAC_ARG_WITH(zlib,\n\t[AS_HELP_STRING([--with-zlib=DIR], [set location of the zlib library])],\n\t[AS_IF([test \"x$withval\" != \"xno\"],\n\t\t[AS_IF([test \"x$withval\" != \"xyes\"], [ZLIB_DIR=$withval])]\n\t\t[AS_IF([test -n \"$ZLIB_DIR\"],\n\t\t\t[ZLIB_CFLAGS=\"-I$ZLIB_DIR -I$ZLIB_DIR/include\"]\n\t\t\t[ZLIB_LIBS=\"-L$ZLIB_DIR/lib\" -lz])])])\n\nAC_SUBST([ZLIB_CFLAGS])\nAC_SUBST([ZLIB_LIBS])\n\n# Check if the kpathsea headers are C++ safe\nAC_MSG_CHECKING([if the kpathsea headers are C++ safe])\nAC_LANG_PUSH([C++])\nAC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <kpathsea/kpathsea.h>]],\n                                [[printf(\"%s\\n\", concat(\"one\", \"two\"))]])],\n               [AC_MSG_RESULT([yes])],\n               [AC_MSG_RESULT([no])\n                AC_DEFINE([KPSE_CXX_UNSAFE], 1,\n                          [Define to 1 if the kpathsea headers are not C++ safe.])])\nAC_LANG_POP([C++])\n\nCPPFLAGS=\"$CPPFLAGS_SAVE\"\nCFLAGS=\"$CFLAGS_SAVE\"\nLDFLAGS=\"$LDFLAGS_SAVE\"\n\nAC_ARG_ENABLE([manpage],\n\t[AS_HELP_STRING([--disable-manpage], [disable generation of manual page @<:@default=no@:>@])])\nAS_IF([test \"x$enable_manpage\" != \"xno\"],[\n\tenable_manpage=\"no\"\n\t# Check for utilities required to build the manpage\n\tAC_CHECK_PROG(ASCIIDOC, asciidoc, yes)\n\tAS_IF([test \"x$ASCIIDOC\" = \"xyes\"], [\n\t\tAC_CHECK_PROG(XMLTO, xmlto, yes)\n\t\tAS_IF([test \"x$XMLTO\" = \"xyes\"], [\n\t\t\tAC_CHECK_PROG(XSLTPROC, xsltproc, yes)\n\t\t\tAS_IF([test \"x$XSLTPROC\" = \"xyes\"],[enable_manpage=\"yes\"])])])])\nAS_IF([test \"x$enable_manpage\" != \"xyes\"],\n\tAC_MSG_NOTICE([generation of manual page has been disabled]))\nAM_CONDITIONAL([BUILD_MANPAGE], [test \"x$enable_manpage\" = \"xyes\"])\n\nAX_CODE_COVERAGE\n\nAS_IF([ test \"$enable_code_coverage\" = \"yes\" ], [\n\t# disable optimization\n\tchangequote({,})\n\tCFLAGS=`echo $CFLAGS | sed 's/-O[1-9s]//g'`\n\tCXXFLAGS=`echo $CXXFLAGS | sed 's/-O[1-9s]//g'`\n\tchangequote([,])\n])\n\nAC_SUBST([dvisvgm_srcdir], ['$(top_srcdir)'])\nAC_SUBST(DATE)\nAC_SUBST(AM_CPPFLAGS)\nAC_SUBST(AM_LDFLAGS)\nAC_CONFIG_FILES([\n\tMakefile\n\tlibs/Makefile\n\tlibs/boost/Makefile\n\tlibs/brotli/Makefile\n\tlibs/clipper/Makefile\n\tlibs/md5/Makefile\n\tlibs/potrace/Makefile\n\tlibs/variant/Makefile\n\tlibs/woff2/Makefile\n\tlibs/xxHash/Makefile\n\tsrc/Makefile\n\tsrc/version.hpp\n\tsrc/fonts/Makefile\n\tsrc/optimizer/Makefile\n\tsrc/ttf/Makefile\n\ttests/Makefile\n\ttests/data/Makefile\n\tdoc/Makefile])\nAC_OUTPUT\n"
  },
  {
    "path": "doc/Makefile.am",
    "content": "## This file is part of dvisvgm\n## Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>\n##\n## Process this file with automake.\n\n# Don't try to install the manpage file if it can't be built due to missing utilities.\n# However, the distribution tarball should always contain a recent manpage. We ensure\n# this by adding a dist-hook rule below.\n\nman_MANS = dvisvgm.1\n\nEXTRA_DIST = $(man_MANS) \\\n\tconf-dblatex-man.xsl \\\n\tconf-dblatex-pdf.xsl \\\n\tdvisvgm.txt.in \\\n\tgenerate-dvisvgm-sty.xsl \\\n\ttweak-dblatex-pdf.xsl \\\n\ttweak-dblatex-tex.py \\\n\ttweak-db-refentry.xsl\n\nif BUILD_MANPAGE\n\nCONF_DBLATEX_MAN  = $(dvisvgm_srcdir)/doc/conf-dblatex-man.xsl\nCONF_DBLATEX_PDF  = $(dvisvgm_srcdir)/doc/conf-dblatex-pdf.xsl\nTWEAK_DBLATEX_PDF = $(dvisvgm_srcdir)/doc/tweak-dblatex-pdf.xsl\nTWEAK_DBLATEX_TEX = $(dvisvgm_srcdir)/doc/tweak-dblatex-tex.py\nTWEAK_DB_ARTICLE  = $(dvisvgm_srcdir)/doc/tweak-db-article.xsl\nTWEAK_DB_REFENTRY = $(dvisvgm_srcdir)/doc/tweak-db-refentry.xsl\nGEN_DBLATEX_STY   = $(dvisvgm_srcdir)/doc/generate-dvisvgm-sty.xsl\n\nDB_VARS = man.endnotes.list.enabled=0 man.endnotes.are.numbered=0 man.authors.section.enabled=0\n\ndvisvgm.1: dvisvgm-man.xml $(CONF_DBLATEX_MAN)\n\txmlto -m $(CONF_DBLATEX_MAN) $(addprefix --stringparam , $(DB_VARS)) man $<\n\ndvisvgm.pdf: dvisvgm-man.xml dvisvgm.sty $(CONF_DBLATEX_PDF) $(TWEAK_DBLATEX_PDF) $(TWEAK_DBLATEX_TEX)\n\tmv $< $<.tmp\n\txsltproc -o $< $(TWEAK_DBLATEX_PDF) $<.tmp\n\tdblatex -bxetex --texstyle=./dvisvgm.sty -p $(CONF_DBLATEX_PDF) -r plugin:$(basename $(TWEAK_DBLATEX_TEX)) $<\n\tmv $<.tmp $<\n\tmv $(basename $<).pdf $@\n\ndvi-pdf: dvisvgm.dvi\n\tdvipdfm $<\n\trm -f $<\n\ndvisvgm.dvi: dvisvgm.1\n\tgroff -Tdvi -mandoc ./$< >$@\n\ndvisvgm.html: dvisvgm-man.xml db2html.xsl\n\txsltproc -o $@ db2html.xsl $<\n\ndvisvgm.md: dvisvgm-man.xml db2md.xsl\n\txsltproc -o $@ db2md.xsl $<\n\ndvisvgm.epub: dvisvgm-article.xml\n\ta2x -darticle -fepub -L --icons --icons-dir=. $<\n\tmv $(basename $<).epub $@\n\n.SECONDARY: dvisvgm-article.xml dvisvgm-man.xml dvisvgm.sty\n\ndvisvgm-man.xml: dvisvgm.txt $(TWEAK_DB_REFENTRY)\n\tasciidoc -a icons -a 'iconsdir=.' -a badges -a 'revnumber=@VERSION@' --unsafe -bdocbook -dmanpage -o $@.tmp $<\n\txsltproc -o $@ $(TWEAK_DB_REFENTRY) $@.tmp\n\trm $@.tmp\n\ndvisvgm-article.xml: dvisvgm.txt $(TWEAK_DB_ARTICLE)\n\tasciidoc -a icons -a 'iconsdir=.' -a badges -a 'revnumber=@VERSION@' --unsafe -bdocbook -darticle -o $@.tmp $<\n\txsltproc -o $@ $(TWEAK_DB_ARTICLE) $@.tmp\n\trm $@.tmp\n\tsed -i \"s/{VERSION}/@VERSION@/\" $@\n\ndvisvgm.sty: dvisvgm-man.xml $(GEN_DBLATEX_STY)\n\txsltproc -o dvisvgm.sty $(GEN_DBLATEX_STY) $<\n\n.NOTPARALLEL:\ndvisvgm.txt: dvisvgm.txt.in ../configure.ac\n\tsed -e 's/@VERSION[@]/@VERSION@/g' -e 's/@PACKAGE_BUGREPORT[@]/@PACKAGE_BUGREPORT@/g' $< >$@\n\tif [ $< -nt ../configure.ac ]; \\\n\tthen touch -r $< $@; \\\n\telse touch -r ../configure.ac $@; \\\n\tfi\n\nepub: dvisvgm.epub\nhtml: dvisvgm.html\nman: dvisvgm.1\nmd: dvisvgm.md\npdf: dvisvgm.pdf\n\nendif\n\nclean:\n\trm -f dvisvgm.pdf dvisvgm.html dvisvgm.md dvisvgm-man.xml dvisvgm-article.xml dvisvgm.txt dvisvgm.sty dvisvgm.dvi dvisvgm.epub\n\ndistclean-local:\n\trm -f dvisvgm.pdf dvisvgm.html dvisvgm.md dvisvgm-man.xml dvisvgm-article.xml dvisvgm.txt dvisvgm.sty dvisvgm.dvi dvisvgm.epub dvisvgm.1\n\nif !BUILD_MANPAGE\n# Ensure that distribution tarballs always contain a recent manpage, i.e.\n# let \"make dist\" and \"make distcheck\" fail if dvisvgm.1 can't be built.\ndist-hook:\n\t@echo \"----------------------------------------------------------------\"; \\\n\techo  \"manpage file dvisvgm.1 could not be built because one or more of\"; \\\n\techo  \"the following utilities are missing: asciidoc, xmlto, xsltproc  \"; \\\n\techo  \"----------------------------------------------------------------\"; \\\n\tfalse;\nendif\n"
  },
  {
    "path": "doc/conf-dblatex-man.xsl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- This file is part of dvisvgm -->\n<!-- Copyright (C) 2015-2025 Martin Gieseking <martin.gieseking@uos.de> -->\n<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n  <!-- output monospaced text in bold -->\n  <xsl:template match=\"literal\">\n    <xsl:text>\\fB</xsl:text>\n    <xsl:apply-templates/>\n    <xsl:text>\\fR</xsl:text>\n  </xsl:template>\n\n  <!-- append URL to hyperlinked text pointing to external targets -->\n  <xsl:template match=\"ulink[not(contains(., '://')) and not(contains(@url, 'mailto:'))]\">\n    <xsl:apply-templates/>\n    <xsl:text> (\\m[blue]</xsl:text>\n    <xsl:value-of select=\"@url\"/>\n    <xsl:text>\\m[])</xsl:text>\n  </xsl:template>\n\n  <!-- expand width of last table column up to the line end -->\n  <xsl:template match=\"cell\" mode=\"table.format\">\n    <xsl:apply-imports/>\n    <xsl:if test=\"not(following-sibling::cell) or following-sibling::cell[1]/@row != @row\">\n      <xsl:text>x</xsl:text>\n    </xsl:if>\n  </xsl:template>\n</xsl:stylesheet>\n"
  },
  {
    "path": "doc/conf-dblatex-pdf.xsl",
    "content": "<?xml version='1.0' encoding=\"iso-8859-1\"?>\n<!-- This file is part of dvisvgm -->\n<!-- Copyright (C) 2015-2025 Martin Gieseking <martin.gieseking@uos.de> -->\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n  <xsl:param name=\"xetex.font\">\n    <xsl:text>\\setmainfont{Source Serif 4}&#10;</xsl:text>\n    <xsl:text>\\setsansfont{Source Sans 3}&#10;</xsl:text>\n    <xsl:text>\\setmonofont[Scale=0.9]{Source Code Pro Medium}&#10;</xsl:text>\n  </xsl:param>\n\n  <xsl:param name=\"doc.toc.show\">0</xsl:param>\n  <xsl:param name=\"refentry.numbered\">0</xsl:param>\n  <xsl:param name=\"figure.caution\">caution</xsl:param>\n  <xsl:param name=\"figure.note\">note</xsl:param>\n  <xsl:param name=\"literal.layout.options\"/>\n  <xsl:param name=\"table.default.tabstyle\">tabular</xsl:param>\n  <xsl:param name=\"table.in.float\">0</xsl:param>\n  <xsl:param name=\"term.breakline\">1</xsl:param>\n\n  <xsl:param name=\"literal.layout.options\">\n    <xsl:text>basicstyle=\\ttfamily\\small,backgroundcolor=\\color[gray]{0.9},columns=fullflexible,frame=single</xsl:text>\n  </xsl:param>\n\n  <!-- ensure processing of refmiscinfo elements -->\n  <xsl:template match=\"refentry\">\n    <xsl:apply-templates select=\"refmeta/refmiscinfo\"/>\n    <xsl:apply-imports/>\n  </xsl:template>\n\n  <!-- put refmiscinfo data into the TeX file -->\n  <xsl:template match=\"refmiscinfo[@class]\">\n    <xsl:value-of select=\"concat('\\def\\refmiscinfo', @class, '{', ., '}&#10;')\"/>\n  </xsl:template>\n\n  <!-- output TOC before synopsis section -->\n  <xsl:template match=\"refsynopsisdiv\">\n    <xsl:text>\\tableofcontents&#10;</xsl:text>\n    <xsl:call-template name=\"makeheading\">\n      <xsl:with-param name=\"level\">2</xsl:with-param>\n      <xsl:with-param name=\"num\">1</xsl:with-param>\n    </xsl:call-template>\n    <xsl:apply-templates/>\n  </xsl:template>\n\n  <!-- force non-star \\subsection commands  -->\n  <xsl:template match=\"refsect1\">\n    <xsl:call-template name=\"makeheading\">\n      <xsl:with-param name=\"level\">2</xsl:with-param>\n      <xsl:with-param name=\"num\">1</xsl:with-param>\n    </xsl:call-template>\n    <xsl:apply-templates/>\n  </xsl:template>\n\n  <!-- add named list items (e.g. command-line options, specials) to PDF bookmarks -->\n  <xsl:template match=\"refsect1/variablelist/varlistentry/term[emphasis]\">\n    <xsl:text>\\phantomsection\\pdfbookmark[3]{</xsl:text>\n    <xsl:choose>\n      <xsl:when test=\"contains(emphasis, '--')\">\n        <xsl:value-of select=\"substring-after(emphasis, '--')\"/>\n      </xsl:when>\n      <xsl:otherwise>\n        <xsl:value-of select=\"emphasis\"/>\n      </xsl:otherwise>\n    </xsl:choose>\n    <xsl:value-of select=\"concat('}{', generate-id(emphasis), '}&#10;')\"/>\n    <xsl:apply-imports/>\n  </xsl:template>\n</xsl:stylesheet>\n"
  },
  {
    "path": "doc/dvisvgm.txt.in",
    "content": "//////////////////////////////////////////////////////////////////////////\n// This file is part of dvisvgm -- a fast DVI to SVG converter          //\n// Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   //\n//                                                                      //\n// This program is free software; you can redistribute it and/or        //\n// modify it under the terms of the GNU General Public License as       //\n// published by the Free Software Foundation; either version 3 of       //\n// the License, or (at your option) any later version.                  //\n//                                                                      //\n// This program is distributed in the hope that it will be useful, but  //\n// WITHOUT ANY WARRANTY; without even the implied warranty of           //\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         //\n// GNU General Public License for more details.                         //\n//                                                                      //\n// You should have received a copy of the GNU General Public License    //\n// along with this program; if not, see <http://www.gnu.org/licenses/>. //\n//////////////////////////////////////////////////////////////////////////\n\ndvisvgm(1)\n==========\nMartin Gieseking <@PACKAGE_BUGREPORT@>\n:man source: dvisvgm\n:man version: @VERSION@\n:man manual: dvisvgm Manual\n:revdate: 2025-10-28 09:58 +0100\n\nName\n----\ndvisvgm - converts DVI, EPS, and PDF files to the XML-based SVG format\n\n\nSynopsis\n--------\n*dvisvgm* ['options'] 'file'[.dvi]\n\n*dvisvgm* --eps ['options'] 'file1'[.eps] 'file2'[.eps] ...\n\n*dvisvgm* --pdf ['options'] 'file'[.pdf]\n\n\nDescription\n-----------\nThe command-line utility *dvisvgm* converts DVI files, as generated by TeX/LaTeX, to the\nXML-based scalable vector graphics format SVG. It supports the classic DVI version 2 as\nwell as version 3 (created by pTeX in vertical mode), and the XeTeX versions 5 to 7 which are\nalso known as XDV. Besides the basic DVI commands, dvisvgm also evaluates many so-called\n'specials' which heavily extend the capabilities of the plain DVI format. For a more detailed\noverview, see section <<specials,*Supported Specials*>> below.\n\nSince the current SVG standard 1.1 doesn't specify multi-page graphics, dvisvgm creates\nseparate SVG files for each DVI page. Because of compatibility reasons, only the first page\nis converted by default. In order to select a different page or arbitrary page sequences,\nuse option *-p* which is described below.\n\nSVG is a vector-based graphics format and therefore dvisvgm tries to convert the glyph outlines\nof all fonts referenced in a DVI page section to scalable path descriptions. The fastest way\nto achieve this is to extract the path information from vector-based font files available in\nPFB, TTF, or OTF format. If dvisvgm is able to find such a file, it extracts all necessary\noutline information about the glyphs from it.\n\nHowever, TeX's former main source for font descriptions is Metafont, which produces bitmap output\nin terms of GF files. That's why not all obtainable TeX fonts are available in a scalable format.\nIn these cases, dvisvgm tries to vectorize Metafont's output by tracing the glyph bitmaps.\nThe results are not as perfect as most (manually optimized) PFB or OTF counterparts, but are\nnonetheless really nice in most cases.\n\nWhen running dvisvgm without option *--no-fonts*, it creates 'font' elements (+<font>+...+</font>+)\nto embed the font data into the SVG files. Unfortunately, only few SVG renderers support these\nelements. Most web browsers and vector graphics applications don't evaluate them properly so\nthat the text components of the resulting graphics might look strange. In order to create more\ncompatible SVG files, command-line option *--no-fonts* can be given to replace the font elements\nby plain graphics paths. Most web browsers (but only few external SVG renderers) also support\nWOFF and WOFF2 fonts that can be used instead of the default SVG fonts. Option *--font-format*\noffers the functionality to change the format applied to the fonts being embedded. This, however,\nonly works when converting DVI files. Text present in PDF and PostScript files is always\nconverted to path elements.\n\n\nOptions\n-------\ndvisvgm provides a POSIX-compliant command-line interface with short and long option names.\nThey may be given before and/or after the name of the file to be converted. Also, the order of\nspecifying the options is not significant, i.e. you can add them in any order without changing\ndvisvgm's behavior. Certain options accept or require additional parameters which are directly\nappended to or separated by whitespace from a short option (e.g. +-v0+ or +-v 0+). Long options\nrequire an additional equals sign (+=+) between option name and argument but without any surrounding\nwhitespace (e.g. +--verbosity=0+). Multiple short options that don't expect further parameters can\nbe combined after a single dash (e.g. +-ejs+ rather than +-e -j -s+).\n\nLong option names may also be shortened by omitting trailing characters as long as the shortened\nname is still unambiguous. For example, option +--exact-bbox+ can be shortened to +--exact+,\n+--exa+, or +--ex+. In case of ambiguous abbreviations, dvisvgm prints an error message together\nwith all matching option names.\n\n*-b, --bbox*='fmt'::\nSets the bounding box of the generated SVG graphic to the specified format. This option only affects\nthe conversion of DVI files. SVG documents generated from PDF and PostScript always inherit the\nbounding boxes of the input files.\n+\nParameter 'fmt' takes either one of the format specifiers listed below, or a sequence of four comma-\nor whitespace-separated length values 'x1', 'y1', 'x2' and 'y2'. The latter define the absolute\ncoordinates of two diagonal corners of the bounding box. Each length value consists of a floating\npoint number and an optional length unit (pt, bp, cm, mm, in, pc, dd, cc, or sp). If the unit is\nomitted, TeX points (pt) are assumed.\n+\nIt's also possible to give only one length value 'l'. In this case, the minimal bounding box\nis computed and enlarged by adding (-'l',-'l') to the upper left and ('l','l') to the lower\nright corner.\n+\nAdditionally, dvisvgm also supports the following format specifiers:\n \n *International DIN/ISO paper sizes*;;\n A__n__, B__n__, C__n__, D__n__, where 'n' is a non-negative integer, e.g. A4 or a4 for DIN/ISO A4\n format (210mm &#215; 297mm).\n \n *North American paper sizes*;;\n   invoice, executive, legal, letter, ledger\n \n *Special bounding box sizes*;;\n[horizontal]\n   *dvi*       ::: page size stored in the DVI file\n   *min*       ::: computes the minimal/tightest bounding box\n   *none*      ::: no bounding box is assigned\n   *papersize* ::: box sizes specified by 'papersize' specials present in the DVI file\n   *preview*   ::: bounding box data computed by the preview package (if present in the DVI file)\n//\n *Page orientation*;;\n   The default page orientation for DIN/ISO and American paper sizes is 'portrait',\n   i.e. 'width' < 'height'. Appending *-landscape* or simply *-l* to the format\n   string switches to 'landscape' mode ('width' > 'height'). For symmetry reasons you can\n   also explicitly add *-portrait* or *-p* to indicate the default portrait format.\n   Note that these suffixes are part of the size string and not separate options. Thus,\n   they must directly follow the size specifier without additional blanks.\n   Furthermore, the orientation suffixes can't be used with *dvi*, *min*, and *none*.\n+\n[NOTE]\nOption *-b, --bbox* only affects the bounding box and does not transform the page content.\nHence, if you choose a landscape format, the page won't be rotated.\n+\n//\n\n//\n*-B, --bitmap-format*='fmt'::\nThis option sets the image format used to embed bitmaps that are extracted from PostScript or PDF data.\nBy default, dvisvgm embeds all bitmaps as JPEG images because it's the most compact of the two formats\nsupported by SVG. To select the alternative lossless PNG format, *--bitmap-format=png* can be used.\nThere are some more format variants dvisvgm currently supports even though +jpeg+ and +png+ should be\nsufficient in most cases. The following list gives an overview of the known format names which\ncorrespond to names of Ghostscript output devices.\n+\n--\n[horizontal]\n*none*     ::: disable processing of bitmap images\n*jpeg*     ::: color JPEG format\n*jpeggray* ::: grayscale JPEG format\n*png*      ::: grayscale or 24-bit color PNG format depending on current color space\n*pnggray*  ::: grayscale PNG format\n*pngmono*  ::: black-and-white PNG format\n*pngmonod* ::: dithered black-and-white PNG format\n*png16*    ::: 4-bit color PNG format\n*png256*   ::: 8-bit color PNG format\n*png16m*   ::: 24-bit color PNG format\n--\n+\nSince the collection of supported output devices can vary among local Ghostscript installations,\nnot all formats may be available in some environments. dvisvgm quits with a PostScript error message\nif the selected output format requires a locally unsupported output device.\n+\nThe two JPEG format specifiers accept an optional parameter to set the IJG quality level\nwhich must directly follow the format specifier separated by a colon, e.g. *--bitmap-format=jpeg:50*.\nThe quality value is an integer between 0 and 100. Higher values result in better image quality but\nlower compression rates and therefore larger files. The default quality level is 75 which is applied\nif no quality parameter is given or if it's set to 0.\n\n*-C, --cache*[='dir']::\nTo speed up the conversion process of bitmap fonts, dvisvgm saves intermediate conversion\ninformation in cache files. By default, these files are stored in +$XDG_CACHE_HOME/dvisvgm/+\nor +$HOME/.cache/dvisvgm+ if +XDG_CACHE_HOME+ is not set.\nIf you prefer a different location, use option *--cache* to overwrite the default. Furthermore,\nit is also possible to disable the font caching mechanism completely with option *--cache=none*.\nIf argument 'dir' is omitted, dvisvgm prints the path of the default cache directory together\nwith further information about the stored fonts. Additionally, outdated and corrupted cache files\nare removed.\n\n*-j, --clipjoin*::\nThis option tells dvisvgm to compute all intersections of clipping paths itself rather than\ndelegating this task to the SVG renderer. The resulting SVG files are more portable because\nsome SVG viewers don't support intersecting clipping paths which are defined by 'clipPath'\nelements containing a 'clip-path' attribute.\n\n*--color*::\nEnables colorization of messages printed during the conversion process. The colors can be\ncustomized via environment variable *DVISVGM_COLORS*. See the <<environment, Environment section>>\nbelow for further information.\n\n*--colornames*::\nBy default, dvisvgm exclusively uses RGB values of the form '#RRGGBB' or '#RGB' to represent\ncolors in the SVG file. The latter is a short form for colors whose RGB components each \nconsist of two identical hex digits, e.g. +#123+ equals +#112233+.\nAccording to the SVG standard, it's also possible to use color names (like +black+ and +darkblue+)\nfor a limited number of https://www.w3.org/TR/SVG11/types.html#ColorKeywords[predefined colors].\nIn order to apply these color names rather than their RGB values, call dvisvgm with option\n*--colornames*. All colors without an SVG color name will still be represented by RGB values.\n\n*--comments*::\nAdds comments with further information about selected data to the SVG file. Currently, only\nfont elements and font CSS rules related to native fonts are annotated.\n\n*--currentcolor*[='color']::\nThis option tells dvisvgm to replace the specified color with CSS variable `currentColor` which\nholds the current foreground color set by CSS property `color`. This way an application or website\ncan change the color via CSS without the need to modify the SVG code.\n+\nThe optional argument of `--currentcolor` specifies the RGB color value to be replaced and must\nbe given as either https://www.w3.org/TR/css-color/#typedef-hex-color[six or three digit hex color value]\npreceded by character `#`, e.g. `#0000ff` or `#00f` for blue. If the optional argument is omitted, black\nis assumed.\n\n*--embed-bitmaps*::\nEmbeds the contents of bitmap files into the generated SVG files instead of adding file references.\nBecause of the base64-encoded data, the SVG files are usually much bigger but at the same time\nmore portable because they don't rely on external bitmap files.\n+\nThis option only affects bitmaps referenced in DVI/XDV files, e.g. by +\\includegraphics+ or\nspecial command +dvisvgm:img+ (see below). Bitmaps present in PostScript or PDF files are always\nembedded. Also see option *bitmap-format*.\n\n*-E, --eps*::\nIf this option is given, dvisvgm does not expect a DVI but a single or multiple EPS input files,\nand tries to convert them to SVG. In order to do so, a single 'psfile' special command is created\nand forwarded to the PostScript special handler.\nThis option is only available if dvisvgm was built with PostScript support enabled, and requires\nGhostscript to be available. See option *--libgs* for further information.\n\n*-e, --exact-bbox*::\nThis option tells dvisvgm to compute the precise bounding box of each character. By default,\nthe values stored in a font's TFM file are used to determine a glyph's extent. As these values are\nintended to implement optimal character placements and are not designed to represent the exact\ndimensions, they don't necessarily correspond with the bounds of the visual glyphs. Thus, width\nand/or height of some glyphs may be larger (or smaller) than the respective TFM values. As a result,\nthis can lead to clipped characters at the bounds of the SVG graphics. With option *--exact-bbox*\ngiven, dvisvgm analyzes the actual shape of each character and derives a usually tight bounding box.\n+\nThis option only affects the processing of DVI files. When converting EPS or PDF files, the bounding\nbox information stored in these files are used to derive the SVG bounding box.\n\n*-f, --font-format*='format'::\nSelects the file format used to embed font data into the generated SVG output when converting DVI\nor PDF files. The latter require the new mutool-based PDF handler introduced with dvisvgm 3.0 (also\nsee option *--pdf*). Option *--font-format* has no effect when converting PDF or PostScript files\nusing Ghostscript. Text fragments present in these files are then always converted to path elements.\n+\nFollowing formats are supported: +SVG+ (that's the default), +TTF+ (TrueType), +WOFF+, and +WOFF2+\n(Web Open Font Format version 1 and 2).\nBy default, dvisvgm creates unhinted fonts that might look bad on low-resolution devices. In order to\nimprove the display quality, the generated TrueType, WOFF, or WOFF2 fonts can be autohinted. The\nautohinter is enabled by appending +,autohint+ or +,ah+ to the font format,\ne.g. +--font-format=woff,autohint+ or +--fwoff,ah+. This functionality requires the\nhttps://freetype.org/ttfautohint[ttfautohint library]. If it's not available or can't be found,\ndvisvgm issues a corresponding warning message.\n+\nOption *--font-format* is only available if dvisvgm was built with WOFF support enabled.\n\n*-m, --fontmap*='filenames'::\nLoads and evaluates a single font map file or a sequence of font map files. These files are required\nto resolve font file names and encodings. dvisvgm does not provide its own map files but tries to read\navailable ones coming with dvips or dvipdfm. If option *--fontmap* is omitted, dvisvgm looks for the\ndefault map files 'dvisvgm.map', 'ps2pk.map', 'pdftex.map', 'dvipdfm.map', and 'psfonts.map' (in this order).\nOtherwise, the files given as option arguments are evaluated in the given order. Multiple filenames\nmust be separated by commas without leading and/or trailing whitespace.\n+\nBy default, redefined mappings do not replace previous ones. However, each filename can be preceded by\nan optional mode specifier (*+*, *-*, or *=*) to change this behavior:\n \n  +mapfile;;\n    Only those entries in the given map file that don't redefine a font mapping are applied, i.e.\n\t fonts already mapped keep untouched. That's also the default mode if no mode specifier is given.\n  \n  -mapfile;;\n    Ensures that none of the font mappings defined in the given map file are used, i.e. previously\n    defined mappings for the specified fonts are removed.\n  \n  =mapfile;;\n    All mappings defined in the map file are applied. Previously defined settings for the same fonts\n    are replaced.\n+\nIf the first filename in the filename sequence is preceded by a mode specifier, dvisvgm loads the\ndefault font map (see above) and applies the other map files afterwards. Otherwise, none of default\nmap files will be loaded automatically.\n+\nExamples: +--fontmap=myfile1.map,+myfile2.map+ loads 'myfile1.map' followed by 'myfile2.map' where all\nredefinitions of `myfile2.map` are ignored.\n+--fontmap==myfile1.map,-myfile2.map+ loads the default map file followed by 'myfile1.map' and 'myfile2.map'\nwhere all redefinitions of 'myfile1.map' replace previous entries. Afterwards, all definitions for the fonts\ngiven in 'myfile2.map' are removed from the font map tree.\n+\nFor further information about the map file formats and the mode specifiers, see the manuals of\nhttps://tug.org/texinfohtml/dvips.html[dvips] and https://ctan.org/tex-archive/dviware/dvipdfm[dvipdfm].\n+\ndvisvgm supports both the 'dvips' and the 'dvipdfm' map file formats. It extends both variants by two\ninclude statements that allow for loading other map files inside a map file. The syntax is as follows:\n+\n[listing]\n----------------------------------------------\n#include [<modechar>] <filename|filepath>\n#includefirst [<modechar>] <filename|filepath>\n----------------------------------------------\n+\nThey must be placed on a separate line and start at the first column of that line. Otherwise, they are ignored.\nWhile the first variant always tries to include the specified file, +#includefirst+ is only executed once, i.e.\nonce a file was successfully included by this statement, all subsequent +#includefirst+ lines are skipped.\nThis can be used to include one of several alternative files, whereby the first one found is loaded and all\nothers are ignored.\n+\nThe optional parameter '<modechar>' (which can be +pass:[+]+, +-+, or +=+) determines how to integrate the data\nread from the included file into the already present mapping data. They work the same way as the mode\nspecifiers described above. If '<modechar>' parameter is omitted, it defaults to +pass:[+]+.\n+\nThe following filename or file path specifies the file to include. In case of plain filenames (without path\nindicators), the files are looked up using the TeX file search functionality, i.e. files in the TeX directory\ntree can easily be added. Relative paths are relative to the location of the file containing the +#include+\nstatement. Path components must be separated by forward slashes (+/+), also on Windows systems.\n+\nExamples: +#include pdftex.map+ looks for _pdftex.map_ in the current working directory and in the\nTeX directory tree. +#include ./pdftex.map+, on the other hand, looks for _pdftex.map_ only in the\ndirectory where the including file is located.\n\n*--grad-overlap*::\nTells dvisvgm to create overlapping grid segments when approximating color gradient fills (also see\noption *--grad-segments* below). By default, adjacent segments don't overlap but only touch each other\nlike separate tiles. However, this alignment can lead to visible gaps between the segments\nbecause the background color usually influences the color at the boundary of the segments if the\nSVG renderer uses anti-aliasing to create smooth contours.\nOne way to avoid this and to create seamlessly touching color regions is to enlarge the segments so\nthat they extend into the area of their right and bottom neighbors. Since the latter are drawn on top\nof the overlapping parts, the visible size of all segments keeps unchanged. Just the former gaps\ndisappear as the background is now completely covered by the correct colors.\nCurrently, dvisvgm computes the overlapping segments separately for each patch of the mesh (a patch mesh\nmay consist of multiple patches of the same type). Therefore, there still might be visible gaps\nat the seam of two adjacent patches.\n\n*--grad-segments*='number'::\nDetermines the maximum number of segments per column and row used to approximate gradient color fills.\nSince SVG 1.1 only supports a small subset of the shading algorithms available in PostScript,\ndvisvgm approximates some of them by subdividing the area to be filled into smaller, monochromatic\nsegments. Each of these segments gets the average color of the region it covers. Thus, increasing the\nnumber of segments leads to smaller monochromatic areas and therefore a better approximation of the\nactual color gradient. As a drawback, more segments imply bigger SVG files because every segment is\nrepresented by a separate path element.\n+\nCurrently, dvisvgm supports free- and lattice-form triangular patch meshes as well as Coons and\ntensor-product patch meshes. They are approximated by subdividing the area of each patch into a\n__n__&#215;__n__ grid of smaller segments. The maximum number of segments per column and row can be\nchanged with option *--grad-segments*.\n\n*--grad-simplify*='delta'::\nIf the size of the segments created to approximate gradient color fills falls below the given delta\nvalue, dvisvgm reduces their level of detail. For example, Bézier curves are replaced by straight\nlines, and triangular segments are combined to tetragons. For a small 'delta', these simplifications\nare usually not noticeable but reduce the size of the generated SVG files significantly.\n\n*-h, --help*[='mode']::\nPrints a short summary of all available command-line options. The optional 'mode' parameter is\nan integer value between 0 and 2. It selects the display variant of the help text. Mode 0\nlists all options divided into categories with section headers. This is also the default if\ndvisvgm is called without parameters. Mode 1 lists all options ordered by the short option names,\nwhile mode 2 sorts the lines by the long option names.\n+\nA values in brackets after the description text indicate the default parameter of the option. They\nare applied if an option with a mandatory parameter is not used or if an optional parameter is omitted.\nFor example, option *--bbox* requires a size parameter which defaults to +min+ if *--bbox* is not\nused. Option *--zip*, which isn't applied by default, accepts an optional compression level parameter.\nIf it's omitted, the stated default value 9 is used.\n\n*--keep*::\nDisables the removal of temporary files as created by Metafont (usually .gf, .tfm, and .log files) or\nthe TrueType/WOFF module.\n\n*--libgs*='path'::\nThis option is only available if the Ghostscript library is not directly linked to dvisvgm and if\nPostScript support was not completely disabled during compilation. In this case, dvisvgm tries\nto load the shared GS library dynamically during runtime. By default, it expects the library's name\nto be +libgs.so.X+ (on Unix-like systems, where +X+ is the ABI version of the library) or\n+gsdll32.dll+/+gsdll64.dll+ (Windows). If dvisvgm doesn't find the library, option *--libgs* can be\nused to specify the correct path and filename, e.g. +--libgs=/usr/local/lib/libgs.so.9+ or\n+--libgs=\\gs\\gs9.25\\bin\\gsdll64.dll+.\n+\nAlternatively, it's also possible to assign the path to environment variable *LIBGS*, e.g.\n+export LIBGS=/usr/local/lib/libgs.so.9+ or +set LIBGS=\\gs\\gs9.25\\bin\\gsdll63.dll+. *LIBGS* has\nless precedence than the command-line option, i.e. dvisvgm ignores variable *LIBGS* if *--libgs*\nis given.\n\n*-L, --linkmark*='style'::\nSelects the method how to mark hyperlinked areas. The 'style' argument can take one of the values\n'none', 'box', and 'line', where 'box' is the default, i.e. a rectangle is drawn around\nthe linked region if option *--linkmark* is omitted. Style argument 'line' just draws the lower edge of\nthe bounding rectangle, and 'none' tells dvisvgm not to add any visible objects to hyperlinks.\nThe lines and boxes get the current text color selected. In order to apply a different, constant color,\na colon followed by a color specifier can be appended to the style string. A 'color specifier' is either\na hexadecimal RGB value of the form '#RRGGBB', or a\nhttps://en.wikibooks.org/wiki/LaTeX/Colors#The_68_standard_colors_known_to_dvips[dvips color name].\n+\nMoreover, argument 'style' can take a single color specifier to highlight the linked region by\na frameless box filled with that color. An optional second color specifier separated by a colon\nselects the frame color.\n+\nExamples: +box:red+ or +box:#ff0000+ draws red boxes around the linked areas. +yellow:blue+ creates\nyellow filled rectangles with blue frames.\n\n*-l, --list-specials*::\nPrints a list of registered special handlers and exits. Each handler processes a set of special\nstatements belonging to the same category. In most cases, these categories are identified by the\nprefix of the special statements which is usually a leading string followed by a colon or a blank,\ne.g. 'color' or 'ps'. The listed handler names, however, don't need to match these prefixes, e.g.\nif there is no common prefix or if functionality is split into separate handlers in order to allow\nthem to be disabled separately using option *--no-specials*. All special statements not covered by\none of the special handlers are silently ignored.\n\n*-M, --mag*='factor'::\nSets the magnification factor applied in conjunction with Metafont calls prior tracing the glyphs.\nThe larger this value, the better the tracing results. Nevertheless, large magnification values\ncan cause Metafont arithmetic errors due to number overflows. So, use this option with care.\nThe default setting usually produces nice results.\n\n*--message*='text'::\nPrints a given message to the console after an SVG file has been written. Argument 'text' may consist\nof static text as well as the macros listed below in the description of special command +dvisvgm:raw+.\nFor example, +--message=\"page {?pageno} written to {?svgfile}\"+ prints the message with the macros\nexpanded after the conversion of each page of a DVI or PDF file or after processing an EPS file.\n+\nThe output of option *--message* is not affected by a specified verbosity level, i.e. dvisvgm prints\nthe text even with +--verbosity=0+.\n\n*--no-merge*::\nPuts every single character in a separate 'text' element with corresponding 'x' and 'y' attributes.\nBy default, new 'text' or 'tspan' elements are only created if a string starts at a location that\ndiffers from the regular position defined by the characters' advance values.\n\n*--no-mktexmf*::\nSuppresses the generation of missing font files. If dvisvgm can't find a font file\nthrough the kpathsea lookup mechanism, it calls the external tools 'mktextfm' or 'mktexmf'.\nThis option disables these calls.\n\n*-n, --no-fonts*[='variant']::\nIf this option is given, dvisvgm doesn't create SVG 'font' elements but uses 'paths' instead. The\nresulting SVG files tend to be larger but are concurrently more compatible with most applications that\ndon't support SVG fonts. The optional argument 'variant' selects the method how to substitute fonts\nby paths. Variant 0 creates 'path' and 'use' elements in order to avoid lengthy duplicates.\nVariant 1 creates 'path' elements only.\nOption *--no-fonts* implies *--no-styles*.\n\n*-c, --scale*='sx'[,'sy']::\nScales the page content horizontally by 'sx' and vertically by 'sy'. This option is equivalent\nto *-TS*'sx','sy'.\n\n*-S, --no-specials*[='names']::\nDisable processing of special commands embedded in the DVI file. If no further parameter is given,\nall specials are ignored. To disable a selected set of specials, an optional comma-separated list\nof names can be appended to this option. A 'name' is the unique identifier referencing the intended\nspecial handler as listed by option *--list-specials*.\n\n*--no-styles*::\nBy default, dvisvgm creates CSS styles and class attributes to reference fonts. This variant is\nmore compact than adding the complete font information to each text element over and over again.\nHowever, if you prefer direct font references, the default behavior can be disabled with\noption *--no-styles*.\n\n*-O, --optimize*[='modules']::\nApplies several optimizations on the generated SVG tree to reduce the file size. The optimizations\nare performed by running separate optimizer modules specified by optional argument 'modules'.\nIt may consist of a single module name or a comma-separated list of several module names.\nThe corresponding modules are executed one by one in the given order and thus transform the\nXML tree gradually.\nA leading hyphen (+-+) can be used to exclude a module from processing. For example\n+-Oall,-collapse-groups+ performs all optimizations except +collapse-groups+. If the first\nmodule name in the list starts with a hyphen, dvisvgm automatically inserts +all+ at the\nbeginning, i.e. +-O-collapse-groups+ is identical to +-Oall,-collapse-groups+.\n+\nThe following list describes the currently available optimizer modules.\n\n  *list*;;\n  Lists all available optimizer modules and exits.\n\n  *none*;;\n  If this argument is given, dvisvgm doesn't apply any optimization. *none* can't be combined\n  with other module names.\n\n  *all*;;\n  Performs all optimizations listed below. This is also the default if option *--optimize* is\n  used without any arguments. The modules are executed in a predefined order that usually leads\n  to the best results. *all* must be the only or the first entry in the list of module names.\n\n  *collapse-groups*;;\n  Combines nested group elements (+<g>+...+</g>+) that contain only a single attribute each. If possible,\n  the group attributes are moved to the outermost element of the processed subtree. This module also\n  unwraps group elements that have no attributes at all.\n\n  *group-attributes*;;\n  Creates groups (+<g>+...+</g>+) for common attributes around adjacent elements. Each attribute is\n  moved to a separate group so that multiple common attributes lead to nested groups. They can be\n  combined by applying optimizer module 'collapse-groups' afterwards. The algorithm only takes\n  inheritable properties, such as +fill+ or +stroke-width+, into account and only removes them from\n  an element if none of the other attributes, like +id+, prevents this.\n\n  *reassign-clippaths*;;\n  Collects all +clipPath+ elements that differ only by their IDs. Afterwards, the duplicates are\n  removed so that only one remains. All +clip-path+ attributes referencing one of the duplicates\n  are updated accordingly.\n\n  *remove-clippaths*;;\n  Removes all redundant 'clipPath' elements. This optimization was already present in former versions\n  of dvisvgm and was always applied by default. This behavior is retained, i.e. dvisvgm executes\n  this module even if option *--optimize* is not given. You can use argument 'none' to prevent that.\n\n  *simplify-text*;;\n  If a +text+ element only contains whitespace nodes and +tspan+ elements, all common inheritable\n  attributes of the latter are moved to the enclosing text element. All +tspan+ elements without\n  further attributes are unwrapped, i.e. the +tspan+ tags are removed.\n\n  *simplify-transform*;;\n  Tries to shorten all 'transform' attributes. This module combines the transformation commands of\n  each attribute and decomposes the resulting transformation matrix into a sequence of basic\n  transformations, i.e. translation, scaling, rotation, and skewing. If this sequence is shorter\n  than the equivalent 'matrix' expression, it's assigned to the attribute. Otherwise, the matrix\n  expression is used.\n\n*-o, --output*='pattern'::\nSets the pattern that determines the names of the generated SVG files, optionally including the file\npath. The required parameter 'pattern' may consist of an arbitrary sequence of characters which make\nup the filenames or file paths relative to the current working directory. With the exception of the\nfollowing mentioned variables and expressions, all characters are treated as static parts of the\nfilenames/folders and are therefore identical for all pages processed during a run of dvisvgm.\nThe strings +%f+, +%p+, +%P+, +%n+, +%N+, +%hd+, +%ho+, and +%hc+ are variables that can be used as\npart of the pattern. +%f+ expands to the base name of the DVI file, i.e. the filename without suffix,\n+%p+ is the current page number, and +%P+ the total number of pages in the DVI file. The variables\n+%n+ and +%N+ expand to the number of the current file being converted (starting at 1) and the total\nnumber of files given, respectively.\n+\nAn optional number (0-9) specified directly after the percent sign of a variable holding a numeric\nvalue denotes the minimal number of digits to be created. If a particular value consists of less\ndigits, the number is padded with leading zeros.\nExample: +%3p+ enforces 3 digits for the current page number (001, 002, etc.). Without an explicit\nwidth specifier, +%p+ gets the same number of digits as +%P+.\n+\nIf you need more control over the numbering, you can use arithmetic expressions as part of the pattern.\nThe syntax is +%(+'expr'+)+ where 'expr' may contain additions, subtractions, multiplications, and\ninteger divisions with common precedence. The variables *p* and *P* contain the current page number\nand the total number of pages, respectively. For example, +--output=\"%f-%(p-1)\"+ creates filenames\nwhere the numbering starts with 0 rather than 1.\n+\nThe variables +%hX+ contain different hash values computed from the DVI page data and the options\ngiven on the command-line. +%hd+ and +%hc+ are only set if option *--page-hashes* is present.\nOtherwise, they are empty. For further information, see the description of option *--page-hashes*\nbelow.\n+\nThe default pattern is +%f-%p.svg+ if the DVI file consists of more than one page, and\n+%f.svg+ otherwise. That means, a DVI file 'foo.dvi' is converted to 'foo.svg' if 'foo.dvi'\nis a single-page document. Otherwise, multiple SVG files 'foo-01.svg', 'foo-02.svg', etc. are\nproduced. In Windows environments, the percent sign indicates dereferenced environment\nvariables, and must therefore be protected by a second percent sign, e.g. +--output=%%f-%%p+.\n\n*-p, --page*='ranges'::\nThis option selects the pages to be processed. Parameter 'ranges' consists of a comma-separated\nlist of single page numbers and/or page ranges. A page range is a pair of numbers separated by\na hyphen, e.g. 5-12. Thus, a page sequence might look like this: 2-4,6,9-12,15. It doesn't matter\nif a page is given more than once or if page ranges overlap. dvisvgm always extracts the page\nnumbers in ascending order and converts them only once.\n+\nIn order to stay compatible with previous versions, the default page sequence is +1+. dvisvgm\ntherefore converts only the first page and not the whole document if option *--page* is omitted.\nUsually, page ranges consist of two numbers denoting the first and last page to be converted.\nIf the conversion should start at page 1, or if it should continue up to the last DVI page, the\nfirst or second range number can be omitted, respectively. Example: +--page=-10+ converts all\npages up to page 10, +--page=10-+ converts all pages starting with page 10.\nPlease consider that the page values don't refer to the page numbers printed on the\ncorresponding page. Instead, the physical page count is expected, where the first page always\ngets number 1.\n+\nTo select the last page, expression +%P+ can be used instead of an explicit page number. It's\nreplaced by the number of the last page. For example, +--page=1,%P+ converts the first and the\nlast page of the document.\n+\nAdditionally, arithmetic expressions of the form +%(+'expr'+)+ in place of numbers are valid too.\nThe resulting values are always rounded down to the nearest integer. See option *--output* for\nmore information about the syntax and the supported arithmetic operators.\nExample: +--page=%(P-2)-+ converts the last three pages.\n+\nAt the end of the range sequence an optional filter specifier can be appended in order to remove\ncertain page numbers from the sequence. Currently, the two filters +:even+ and +:odd+ are supported\nwhich restrict the preceding values to even and odd numbers, respectively. For example,\n+--page=1-11,20:even+ is equivalent to +--page=2,4,6,8,10,20+.\n\n*-H, --page-hashes*[='params']::\nIf this option is given, dvisvgm computes hash values of all pages to be processed. As long as the\npage contents don't change, the hash value of that page stays the same. This property can be used\nto determine whether a DVI page must be converted again or can be skipped in consecutive runs of\ndvisvgm. This is done by propagating the hash value to variable +%hd+ which can be accessed in\nthe output pattern (see option *--output*). By default, dvisvgm changes the output pattern to\n+%f-%hd+ if option *--page-hashes* is given. As a result, all SVG file names contain the hash\nvalue instead of the page number. When calling dvisvgm again with option *--page-hashes* with the\nsame output pattern, it checks the existence of the SVG file to be created and skips the conversion\nif it's already present. This also applies for consecutive calls of dvisvgm with different\ncommand-line parameters. If you want to force another conversion of a DVI file that hasn't changed,\nyou must remove the corresponding SVG files beforehand or add the parameter +replace+ (see below).\nIf you manually set the output pattern to not contain a hash value, the conversion won't be skipped.\n+\nAlternatively, the output pattern may contain the variables +%ho+ and +%hc+. +%ho+ expands to a\n32-bit hash representing the given command-line options that affect the generated SVG output, like\n*--no-fonts* and *--precision*. Different combinations of options and parameters lead to different\nhashes. Thus pattern +%f-%hd-%ho+ creates filenames that change depending on the DVI data and\nthe given command-line options. Variable +%hc+ provides a combined hash computed from the DVI data\nand the command-line options. It has the same length as +%hd+.\n+\nSince the page number isn't part of the file name by default, different DVI pages with identical\ncontents get the same file name. Therefore, only the first one is converted while the others are\nskipped. To create separate files for each page, you can add the page number to the output pattern,\ne.g. +--output=\"%f-%p-%hc\"+.\n+\nBy default, dvisvgm uses the fast XXH64 hash algorithm to compute the values provided through +%hd+ and\n+%hc+. 64-bit hashes should be sufficient for most documents with an average size of pages. Alternatively,\nXXH32 and MD5 can be used as well. The desired algorithm is specified by argument 'params' of option\n*--page-hashes*. It takes one of the strings +MD5+, +XXH32+, and +XXH64+, where the names can be given\nin lower case too, like +--page-hashes=md5+. Since version 0.7.1, xxHash provides an experimental 128-bit\nhash function whose algorithm has been stabilized as of version 0.8. When using a version prior to 0.8,\nthe 128-bit hash values can vary depending on the used xxHash version. If the corresponding API is\navailable, dvisvgm supports the new hash function, and option *--page-hashes* additionally accepts the\nalgorithm specifier +XXH128+.\n+\nFinally, option *--page-hashes* can take a second argument that must be separated by a comma.\nCurrently, only the two parameters 'list' and 'replace' are evaluated, e.g. +--page-hashes=md5,list+\nor +--page-hashes=replace+. When 'list' is present, dvisvgm doesn't perform any conversion but just\nlists the hash values +%hd+ and +%hc+ of the pages specified by option *--page*. Parameter 'replace'\nforces dvisvgm to convert a DVI page even if a file with the target name already exists.\n\n*-P, --pdf*::\nIf this option is given, dvisvgm does not expect a DVI but a PDF input file, and tries to convert\nit to SVG. Similar to the conversion of DVI files, only the first page is processed by default.\nOption *--page* can be used to select different pages, page ranges, and/or page sequences.\n+\nIf a Ghostscript version < 10.01.0 is found, dvisvgm uses Ghostscript to process the PDF file. In\nthis case, the conversion is realized by creating a single 'pdffile' special command which is\nforwarded to dvisvgm's PostScript special handler. Therefore, this option is only available if\ndvisvgm was built with PostScript support enabled, and requires Ghostscript to be accessible.\nSee option *--libgs* for further information.\n+\nAs of Ghostscript 10.01.0, this will no longer work due to the introduction of a new PDF interpreter.\nTherefore, an alternative conversion module based on _mutool_, a utility which is part of the\nhttps://mupdf.com[MuPDF] package, has been introduced. It's automatically invoked if Ghostscript\ncan't be used and if a working +mutool+ executable is present in a directory which is part of the\nsystem's search path.\n+\nAlternatively, environment variable +DVISVGM_PDF_PROC+ can be used to select the PDF processor.\nThe currently supported values are +gs+ and +mutool+.\n\n*-d, --precision*='digits'::\nSpecifies the maximum number of decimal places applied to floating-point attribute values.\nAll attribute values written to the generated SVG file(s) are rounded accordingly. The\nparameter 'digits' accepts integer values from 0 to 6, where 0 enables the automatic selection\nof significant decimal places. This is also the default value if dvisvgm is called without\noption *--precision*.\n\n*--progress*[='delay']::\nEnables a simple progress indicator shown when time-consuming operations like PostScript specials\nare processed. The indicator doesn't appear before the given delay (in seconds) has elapsed.\nThe default delay value is 0.5 seconds.\n\n*-r, --rotate*='angle'::\nRotates the page content clockwise by 'angle' degrees around the page center.\nThis option is equivalent to *-TR*'angle'.\n\n*-R, --relative*::\nSVG allows you to define graphics paths by a sequence of absolute and/or relative path commands,\ni.e. each command expects either absolute coordinates or coordinates relative to the\ncurrent drawing position. By default, dvisvgm creates paths made up of absolute commands.\nIf option *--relative* is given, relative commands are created instead. This slightly reduces\nthe size of the SVG files in most cases.\n\n*--stdin*::\nTells dvisvgm to read the DVI or EPS input data from *stdin* instead from a file. Alternatively\nto option *--stdin*, a single dash (-) can be given. The default name of the generated SVG file\nis 'stdin.svg' which can be changed with option *--output*.\n\n*-s, --stdout*::\nDon't write the SVG output to a file but redirect it to *stdout*.\n\n*--tmpdir*[='path']::\nIn some cases, dvisvgm needs to create temporary files to work properly. These files go to the\nsystem's temporary folder by default, e.g. +/tmp+ on Linux systems. Option *--tmpdir* can be used\nto specify a different location. Please note that dvisvgm does not create this folder if it doesn't\nexist. Therefore, you must ensure that it's actually present before running dvisvgm.\n+\nIn order to prevent colliding files caused by parallel calls of dvisvgm, the program doesn't write\nthe files directly in the specified directory but furthermore creates a uniquely named subfolder in\nthere, where the temporary files will be placed. This can be prevented by appending +//+ or +\\\\+\n(on Windows) to the specified directory name. For example, +--tmpdir=.//+ creates the temporary files\ndirectly in the current working directory, while +--tmpdir=.+ places them in a dedicated subfolder of\nthe current working directory.\n+\nIf the optional parameter 'path' of option *--tmpdir* is omitted, dvisvgm prints the location of the\nsystem's temp folder and exits.\n\n*-a, --trace-all*=['retrace']::\nThis option forces dvisvgm to vectorize not only the glyphs actually required to render the\nSVG file correctly – which is the default –, but processes all glyphs of all fonts referenced in\nthe DVI file. Because dvisvgm stores the tracing results in a font cache, all following conversions\nof these fonts will speed up significantly.\nThe boolean option 'retrace' determines how to handle glyphs already stored in the cache.\nBy default, these glyphs are skipped. Setting argument 'retrace' to 'yes' or 'true' forces dvisvgm\nto retrace the corresponding bitmaps again.\n+\n[NOTE]\nThis option only takes effect if font caching is active. Therefore, *--trace-all* cannot be\ncombined with option *--cache=none*.\n+\n\n*-T, --transform*='commands'::\nApplies a sequence of transformations to the SVG content. Each transformation is described\nby a 'command' beginning with a capital letter followed by a list of comma-separated\nparameters. Following transformation commands are supported:\n \n  *T* 'tx'[,'ty'];;\n    Translates (moves/shifts) the page in direction of vector ('tx','ty'). If 'ty' is omitted,\n    'ty'=0 is assumed.\n    The expected unit length of 'tx' and 'ty' are TeX points (1pt = 1/72.27in). However, there\n    are several constants defined to simplify the unit conversion (see below).\n  \n  *S* 'sx'[,'sy'];;\n    Scales the page horizontally by 'sx' and vertically by 'sy'. If 'sy' is omitted,\n    'sy'='sx' is assumed.\n  \n  *R* 'angle'[,'x','y'];;\n    Rotates the page clockwise by 'angle' degrees around point ('x','y'). If the optional\n    arguments 'x' and 'y' are omitted, the page will be rotated around its center depending on\n    the chosen page format. When option *-bnone* is given, the rotation center is origin (0,0).\n  \n  *KX* 'angle';;\n    Skews the page along the 'x'-axis by 'angle' degrees. Argument 'angle' can take any value\n    except 90+180__k__, where 'k' is an integer.\n  \n  *KY* 'angle';;\n    Skews the page along the 'y'-axis by 'angle' degrees. Argument 'angle' can take any value\n    except 90+180__k__, where 'k' is an integer.\n  \n  *FH* ['y'];;\n  Mirrors (flips) the page at the horizontal line through point (0,'y'). Omitting the optional argument\n  leads to 'y'='h'/2, where 'h' denotes the page height (see <<constants,'pre-defined constants'>> below).\n  \n  *FV* ['x'];;\n  Mirrors (flips) the page at the vertical line through point ('x',0). Omitting the optional argument\n  leads to 'x'='w'/2, where 'w' denotes the page width (see <<constants,'pre-defined constants'>> below).\n  \n  *M* 'm1',...,'m6';;\n  Applies a transformation described by the 3&#215;3 matrix\n  \\(('m1','m2','m3'),('m4','m5','m6'),(0,0,1)), where the inner triples denote\n  the rows.\n+\n[NOTE]\n=================================================================================================\nAll transformation commands of option *-T, --transform* are applied in the order of their appearance.\nMultiple commands can optionally be separated by spaces. In this case the whole transformation string\nhas to be enclosed in double quotes to keep them together. All parameters are expressions of floating\npoint type. You can either give plain numbers or arithmetic terms combined by the operators *+* (addition),\n*-* (subtraction), *** (multiplication), */* (division) or *%* (modulo) with common associativity and\nprecedence rules. Parentheses may be used as well.\n\n[[constants]]\nAdditionally, some pre-defined constants are provided:\n\n[horizontal]\n*ux*:: horizontal position of upper left page corner in TeX point units\n*uy*:: vertical position of upper left page corner in TeX point units\n*h*:: page height in TeX point units (0 in case of *-bnone*)\n*w*:: page width in TeX point units (0 in case of *-bnone*)\n\nFurthermore, you can use the 9 length constants +pt+, +bp+, +cm+, +mm+, +in+, +pc+, +dd+, +cc+,\nand +sp+, e.g. +2cm+ or +1.6in+. Thus, option +-TT1in,0R45+ moves the page content 1 inch to\nthe right and rotates it by 45 degrees around the page center afterwards.\n\nFor single transformations, there are also the short-hand options *-c*, *-t* and *-r* available.\nIn contrast to the *--transform* commands, the order of these options is not significant, so\nthat it's not possible to describe transformation sequences with them.\n\n=================================================================================================\n+\n//\n\n//\n*-t, --translate*='tx'[,'ty']::\nTranslates (moves) the page content in direction of vector ('tx','ty'). This option is\nequivalent to *-TT*'tx','ty'.\n\n\n*-v, --verbosity*='level'::\nControls the type of messages printed during a dvisvgm run:\n[horizontal]\n  *0*;; no message output at all\n  *1*;; error messages only\n  *2*;; warning messages only\n  *4*;; informational messages only\n  *8*;; user messages only (e.g. created by special +dvisvgm:message+)\n\n+\n[NOTE]\nBy adding these values you can combine the categories. The default level is 15, i.e. all\nmessages are printed.\n+\n\n*-V, --version*[='extended']::\nPrints the version of dvisvgm and exits. If the optional argument is set to 'yes', the\nversion numbers of the linked libraries are printed as well.\n\n*-z, --zip*[='level']::\nCreates a compressed SVG file with suffix .svgz. The optional argument specifies the compression\nlevel. Valid values are in the range of 1 to 9 (default value is 9). Larger values cause better\ncompression results but may take slightly more computation time.\n\n*-Z, --zoom*='factor'::\nMultiplies the values of the 'width' and 'height' attributes of the SVG root element by argument 'factor'\nwhile the coordinate system of the graphic content is retained. As a result, most SVG viewers zoom the\ngraphics accordingly. If a negative zoom factor is given, the 'width' and 'height' attributes are omitted.\n\n[[specials]]\nSupported Specials\n------------------\ndvisvgm supports several 'special commands' that enrich the DVI command set with additional instructions\nfor features, like color, graphics, and hyperlinks. The term 'special command', or just 'special', originates\nfrom the TeX command +\\special{...}+ which does almost nothing. TeX only forwards the argument of this command\nto the DVI file using the corresponding 'xxx' opcode, thus delegating its execution to the DVI driver. The\ndriver can then decide to either process or ignore it, depending on the supported statements. The parameter\nof TeX's +\\special+ command is given in curly braces and may consist of an arbitrary character sequence\nrepresenting the actual instruction, for example +color Red+.\n\nIt might be worth mentioning that specials are only evaluated when processing DVI files. PS/EPS and PDF\ndon't know anything about the concept of specials and therefore don't provide means to represent them.\n\nIn order to evaluate the special commands, dvisvgm implements several dedicated handlers. Each handler is\nresponsible for all special statements belonging to the same command set, i.e. commands usually &#x2013;\nbut not necessarily &#x2013; beginning with a common prefix. For example, all PDF specials start with the\nprefix +pdf:+, while the TPIC special set consists of 13 different commands without common identifier. The\nPDF specials are processed by dvisvgm's 'pdf' handler, the TPIC ones by the 'tpic' handler. To get a list of\nthe actually provided special handlers, use option *--list-specials* (see above). The following list gives an\noverview of the special sets currently supported. The names of the handlers can also be used to disable the\nprocessing of individual sets of specials. For further information on this, see option *--no-specials*.\n\n*bgcolor*::\nSpecial statements for changing the background/page color. Currently, dvisvgm only supports the +background+\nstatement as specified in the https://tug.org/texinfohtml/dvips.html#Color-specifications[dvips manual].\nSince SVG 1.1 doesn't support background colors, dvisvgm inserts a rectangle of the chosen color into the\ngenerated SVG document. This rectangle always gets the same size as the selected or computed bounding box.\nThis background color command is part of the color special set but is handled separately in order to let\nthe user turn it off.\n\n*color*::\nStatements of this command set provide instructions to change the text/paint color. For an overview of the\nexact syntax, see the documentation of dvips, for instance.\n+\ndvisvgm extends the dvips syntax of the color specials by two optional modifiers to enable the differentiation\nbetween fill and stroke colors, i.e. colors used to fill enclosed areas and to draw lines, respectively.\nIf one of the color specifiers, like a color name or a color model followed by a sequence of color components,\nis preceded by +fill+ or +stroke+, only the corresponding color is changed. Without these modifiers both colors\nare affected. Example: +color push fill rgb 1 0 1+ pushes a new color pair onto the color stack whereby the fill\ncolor is set to magenta and the stroke color retains its current value.\n+color push rgb 1 0 1+ pushes a color pair with both colors set to magenta.\n+\nAdditionally, the new special *color set* is introduced. Its syntax is the same as the one of *color push*\nincluding the optional +fill+ and +stroke+ modifiers. Instead of pushing a new color pair it modifies the\ntopmost one on the stack. If the color stack is empty, the default (black) fill/stroke color is changed.\n\n*dvisvgm*::\nThe following list gives a brief overview of dvisvgm's own set of currently supported specials.\n\n*dvisvgm:raw* 'text':::\nAdds an arbitrary sequence of XML nodes to the page section of the SVG document. dvisvgm checks syntax and\nproper nesting of the inserted elements but does not perform any validation, thus the user has to ensure\nthat the resulting SVG is still valid. Opening and closing tags may be distributed among different 'raw'\nspecials. The tags themselves can also be split but must be continued with the immediately following 'raw'\nspecial. Both syntactically incorrect and wrongly nested tags lead to error messages.\n+\nParameter 'text' may also contain the expressions *{?x}*, *{?y}*, *{?color}*, *{?fillcolor}*, *{?strokecolor}*,\n*{?matrix}*, *{?pageno}*, *{?svgfile}*, and *{?svgpath}* that respectively expand to the current 'x' and 'y'\ncoordinate, an RGB hex string of the current active fill and stroke color, the current transformation matrix,\nthe current page number, and the relative and absolute path of the SVG file being created. *{?color}* expands\nto the same string as *{?fillcolor}* and is still available for compatibility with older dvisvgm versions that\ndidn't distinguish between fill and stroke colors (see information about color specials below).\n+\nAs SVG doesn't support CMYK colors, for example in +fill+ and +stroke+ attributes, dvisvgm provides macro\n*{?cmyk(_c_,_m_,_y_,_k_)}* to create an RGB hex string from a CMYK color. It can be used instead of\na combination of color/PostScript specials and color macros to directly insert a CMYK color value.\n+\nCharacter sequence *{?nl}* expands to a newline character. Finally, constructions of the form *{?(_expr_)}*\nenable the evaluation of mathematical expressions which may consist of basic arithmetic operations including\nmodulo. As above, the variables 'x' and 'y' represent the current coordinates.\nInvalid operations, like divisions by zero, lead to an error message on the console.\nExample: +{?(-10*(x+2y)-5)}+ is a valid expression and expands to the corresponding numeric string.\n\n*dvisvgm:rawdef* 'text':::\nThis command is similar to *dvisvgm:raw*, but puts the XML nodes into the <defs> section of the SVG document\ncurrently being generated.\n\n*dvisvgm:rawset* 'name' ... *dvisvgm:endrawset*:::\nThis pair of specials marks the begin and end of a definition of a named raw SVG fragment. All *dvisvgm:raw*\nand *dvisvgm:rawdef* specials enclosed by *dvisvgm:rawset* and *dvisvgm:endrawset* are not evaluated\nimmediately but stored together under the given 'name' for later use. Once defined, the named fragment can be\nreferenced throughout the DVI file by *dvisvgm:rawput* (see below).\nThe two commands *dvisvgm:rawset* and *dvisvgm:endrawset* must not be nested, i.e. each call of *dvisvgm:rawset*\nhas to be followed by a corresponding call of *dvisvgm:endrawset* before another *dvisvgm:rawset* may occur.\nAlso, the identifier 'name' must be unique throughout the DVI file. Using *dvisvgm:rawset* multiple times\ntogether with the same 'name' leads to warning messages.\n\n*dvisvgm:rawput* 'name':::\nInserts raw SVG fragments previously stored under the given 'name'. dvisvgm distinguishes between fragments\nthat were specified with *dvisvgm:raw* or *dvisvgm:rawdef*, and handles them differently: It inserts all\n*dvisvgm:raw* parts every time *dvisvgm:rawput* is called, whereas the *dvisvgm:rawdef* portions go to the\n<defs> section of the current SVG document only once.\n\n*dvisvgm:img* 'width' 'height' 'file':::\nCreates an +image+ element using the current graphic position, transformation matrix, the specified extents,\nand the given filename. This special command also updates the bounding box of the resulting SVG to entirely\nenclose the transformed image. The image itself is positioned such that the lower left corner of the\nuntransformed image lies at the current graphic position. The length 'width' and 'height' specify the extents\nof the untransformed image. For a list of supported length units see option *--bbox*. Plain numbers without an\nappended unit specifier imply TeX points (1in = 72.27pt).\n+\nParameter 'file' can be a plain filename or a relative or absolute path of a file. By default, dvisvgm just\ncreates links referencing the image file so that the SVG renderer will evaluate the filename or path relative\nto the location of the generated SVG file. If option *--embed-bitmaps* is given, JPEG and PNG images are\nembedded into the SVG document. As this requires base64-encoding of the image data, the resulting SVG files\ncan become quite big.\n\n*dvisvgm:bbox* lock:::\nLocks the bounding box of the current page and prevents it from further updating, i.e. graphics elements added\nafter calling this special are not taken into account in determining the extent of the bounding box.\n\n*dvisvgm:bbox* unlock:::\nUnlocks the previously locked bounding box of the current page so that it gets updated again when adding\ngraphics elements to the page.\n\n*dvisvgm:bbox* n[ew] 'name':::\nDefines or resets a local bounding box called 'name'. The name may consist of letters and digits.\nWhile processing a DVI page, dvisvgm continuously updates the (global) bounding box of the current page in order to\ndetermine the minimal rectangle containing all visible page components (characters, images, drawing elements etc.)\nAdditionally to the global bounding box, the user can request an arbitrary number of named local bounding boxes.\nOnce defined, these boxes are updated together with the global bounding box starting with the first character that\nfollows the definition. Thus, the local boxes can be used to compute the extent of parts of the page. This is useful\nfor scenarios where the generated SVG file is post-processed.\n+\nIn conjunction with special *dvisvgm:raw*, the macro *{?bbox 'name'}* expands to the four values 'x', 'y', 'w', and 'h'\n(separated by spaces) specifying the coordinates of the upper left corner, width, and height of the local box 'name'.\nIf box 'name' wasn't previously defined, all four values equal to zero.\n\n*dvisvgm:bbox* 'width' 'height' ['depth'] [+transform+]:::\nUpdates the bounding box of the current page by embedding a virtual rectangle ('x', 'y', 'width', 'height')\nwhere the lower left corner is located at the current DVI drawing position ('x','y'). If the optional parameter 'depth'\nis specified, dvisvgm embeds a second rectangle ('x', 'y', 'width', -__depth__). The lengths 'width', 'height', and\n'depth' can be given together with a unit specifier (see option *--bbox*) or as plain floating point numbers.\nIn the latter case, TeX point units are assumed (1in = 72.27pt). Depending on size and position of the virtual rectangle,\nthis command either enlarges the overall bounding box or leaves it as is. So, it's not possible to reduce its extent.\n+\nThis special is supposed to be used together with *dvisvgm:raw* in order to update the viewport of the page properly.\nBy default, the box extents are assigned unchanged and, in particular, are not altered by transformation commands.\nIn order to apply the current transformation matrix, the optional modifier +transform+ can be added at the end of\nthe special statement.\n\n*dvisvgm:bbox* a[bs] 'x1' 'y1' 'x2' 'y2' [+transform+]:::\nThis variant of the bbox special updates the bounding box by embedding a virtual rectangle ('x1','y1','x2','y2').\nThe points ('x1','y1') and ('x2','y2') denote the absolute coordinates of two diagonal corners of the rectangle.\nAs with the relative special variant described above, the optional modifier +transform+ allows for applying the\ncurrent transformation matrix to the bounding box.\n\n*dvisvgm:bbox* f[ix] 'x1' 'y1' 'x2' 'y2' [+transform+]:::\nThis variant of the bbox special assigns an absolute (final) bounding box to the resulting SVG. After executing\nthis command, dvisvgm doesn't further alter the bounding box coordinates, except this special is called again later.\nThe points ('x1','y1') and ('x2','y2') denote the absolute coordinates of two diagonal corners of the rectangle.\nAs with the relative special variant described above, the optional modifier +transform+ allows for applying the\ncurrent transformation matrix to the bounding box.\n+\nThe following TeX fragment adds two raw SVG elements to the output and updates the bounding box accordingly:\n+\n[source,tex]\n-------------------------------------------------------------------------------------\n\\special{dvisvgm:raw <circle cx='{?x}' cy='{?y}' r='10' stroke='black' fill='red'/>}%\n\\special{dvisvgm:bbox 10bp 10bp 10bp transform}%\n\\special{dvisvgm:bbox -10bp 10bp 10bp transform}\n\n\\special{dvisvgm:raw <path d='M50 200 L10 250 H100 Z' stroke='black' fill='blue'/>}%\n\\special{dvisvgm:bbox abs 10bp 200bp 100bp 250bp transform}\n-------------------------------------------------------------------------------------\n\n*dvisvgm:currentcolor* [on|off]:::\nThis special works similar to option `--currentcolor` but doesn't require an explicit color argument. Instead,\nit takes the currently active color and replaces it with `currentColor`. Therefore, the result depends on both the\nplacement of the special and the preceding color changes. Argument `on` &#x2013; which activates the 'currentColor'\nfunctionality &#x2013; can be omitted. When called with argument `off`, the functionality is deactivated again.\n\n*dvisvgm:message* 'msg':::\nPrints the given text 'msg' to the console. Besides static text it may also contain the macros +{?...}+ mentioned\nin the description of *dvisvgm:raw*. The messages created by this special can be suppressed with option\n*--verbosity* (see above).\n\n*em*::\nThese specials were introduced with the 'emTeX' distribution by Eberhard Mattes. They provide line drawing\nstatements, instructions for embedding MSP, PCX, and BMP image files, as well as two PCL commands.\ndvisvgm supports only the line drawing statements and ignores all other em specials silently.\nA description of the command syntax can be found in the DVI driver documentation coming with\nhttps://ctan.org/pkg/emtex[emTeX].\n\n*html*::\nThe hyperref specification defines several variants on how to mark hyperlinked areas in a DVI file. dvisvgm\nsupports the plain HyperTeX special constructs as created with hyperref package option 'hypertex'.\nBy default, all linked areas of the document are marked by a rectangle. Option *--linkmark* allows you to change\nthis behavior. See above for further details. Information on syntax and semantics of the HyperTeX specials can be\nfound in the https://ctan.org/pkg/hyperref[hyperref manual].\n\n*papersize*::\nThe 'papersize' special, which is an extension introduced by dvips, can be used to specify the widths and\nheights of the pages in the DVI file. It affects the page it appears on as well as all following pages until\nanother papersize special is found. If there is more than one papersize special present on a page, dvisvgm\napplies the last one. However, in order to stay compatible with previous versions of dvisvgm that did not\nevaluate these specials, their processing must be explicitly enabled by adding option *--bbox=papersize* on\nthe command-line. Otherwise, dvisvgm ignores them and computes tight bounding boxes.\n\n*pdf*::\npdfTeX and dvipdfmx introduced several special commands related to the generation of PDF files. Currently,\nonly 'pdf:mapfile', 'pdf:mapline', 'pdf:pagesize', and PDF hyperlink specials are supported by dvisvgm.\nThe latter are the PDF pendants to the HTML HyperTeX specials. They are generated by the hyperref package in\nPDF mode, for example.\nIf a DVI page contains unsupported PDF specials, dvisvgm prints a warning message showing the number of\nignored special commands.\n+\n'pdf:pagesize' is similar to the 'papersize' special (see above) which specifies the size of the current\nand all following pages. In order to actually apply the extents to the generated SVG files,\noption *--bbox=papersize* must be given.\n+\n'pdf:mapfile' and 'pdf:mapline' allow for modifying the font map tree while processing the DVI file.\nThey are used by CTeX, for example. dvisvgm supports both, the dvips and dvipdfm font map format. For further\ninformation on the command syntax and semantics, see the documentation of +\\pdfmapfile+ in the\nhttps://ctan.org/pkg/pdftex[pdfTeX user manual].\n\n*ps*::\nThe famous DVI driver https://www.tug.org/texinfohtml/dvips.html['dvips'] introduced its own set of specials\nin order to embed PostScript code into DVI files, which greatly improves the capabilities of DVI documents.\nOne aim of dvisvgm is to completely evaluate all PostScript fragments and to convert as many of them as possible\nto SVG. In contrast to dvips, dvisvgm uses floating point arithmetic to compute the precise position of each\ngraphic element, i.e. it doesn't round the coordinates. Therefore, the relative locations of the graphic elements\nmay slightly differ from those computed by dvips.\n+\nSince PostScript is a rather complex language, dvisvgm does not implement its own PostScript interpreter\nbut relies on https://ghostscript.com[Ghostscript] instead. If the Ghostscript library was not linked to the\ndvisvgm binary, it is looked up and loaded dynamically during runtime. In this case, dvisvgm looks for\n'libgs.so.X' on Unix-like systems (supported ABI versions: 7,8,9), for 'libgs.X.dylib' on macOS, and for\n'gsdll32.dll' or 'gsdll64.dll' on Windows. You can override the default file names with environment variable\n*LIBGS* or the command-line option *--libgs*. The library must be reachable through the ld search path (\\*nix)\nor the PATH environment variable (Windows). Alternatively, the absolute file path can be specified. If the library\ncannot be found, dvisvgm disables the processing of PostScript specials and prints a warning message.\nUse option *--list-specials* to check whether PostScript support is available, i.e. entry 'ps' is present.\n+\nThe PostScript handler also recognizes and evaluates bounding box data generated by the\nhttps://ctan.org/pkg/preview[preview package] with option 'tightpage'. If such data is present in the DVI file\nand if dvisvgm is called with option *--bbox=preview*, dvisvgm sets the width and total height of the SVG file to\nthe values derived from the preview data. Additionally, it prints a message showing the width, height,\nand depth of the box in TeX point units to the console. Especially, the depth value can be read by a post-processor\nto vertically align the SVG graphics with the baseline of surrounding text in HTML or XSL-FO documents, for example.\nPlease note that SVG bounding boxes are defined by a width and (total) height. In contrast to TeX, SVG provides\nno means to differentiate between height and depth, i.e. the vertical extents above and below the baseline,\nrespectively. Therefore, it is generally not possible to retrieve the depth value from the SVG file itself.\n+\nIf you call dvisvgm with option *--bbox=min* (the default) and preview data is present in the DVI file, dvisvgm\ndoesn't apply the preview extents but computes a bounding box that tightly encloses the page contents. The height,\ndepth and width values written to console are adapted accordingly.\n\n*tpic*::\nThe TPIC special set defines instructions for drawing simple geometric objects. Some LaTeX packages, like\neepic and tplot, use these specials to describe graphics.\n\n\nExamples\n--------\n+dvisvgm file+::\n\tConverts the first page of 'file.dvi' to 'file.svg'.\n\n+dvisvgm -p1-5 file+::\n\tConverts the first five pages of 'file.dvi' to 'file-1.svg',...,'file-5.svg'.\n\n+dvisvgm -p1- file+::\n\tConverts all pages of 'file.dvi' to separate SVG files.\n\n+dvisvgm -p1,3 -O file+::\n\tConverts the first and third page of 'file.dvi' to optimized SVG files.\n\n+dvisvgm - < file.dvi+::\n\tConverts the first page of 'file.dvi' to 'stdin.svg' where the contents of 'file.dvi' is read from *stdin*.\n\n+dvisvgm -z file+::\n\tConverts the first page of 'file.dvi' to 'file.svgz' with default compression level 9.\n\n+dvisvgm -p5 -z3 -ba4-l -o newfile file+::\n\tConverts the fifth page of 'file.dvi' to 'newfile.svgz' with compression level 3. The bounding box is set to DIN/ISO A4 in landscape format.\n\n+dvisvgm --transform=\"R20,w/3,2h/5 T1cm,1cm S2,3\" file+::\n\tConverts the first page of 'file.dvi' to 'file.svg' where three transformations are applied.\n\n[[environment]]\nEnvironment\n-----------\ndvisvgm uses the *kpathsea* library for locating the files that it opens.\nHence, the environment variables described in the library's documentation influence the converter.\n\nIf dvisvgm was linked without the Ghostscript library, and if PostScript support has not been disabled,\nthe shared Ghostscript library is looked up during runtime via dlopen(). The environment variable *LIBGS*\ncan be used to specify path and file name of the library.\n\nThe pre-compiled Windows versions of dvisvgm require a working installation of MiKTeX 2.9 or above.\ndvisvgm does not work together with the portable edition of MiKTeX because it relies on MiKTeX's COM\ninterface that is only accessible in a local installation.\nTo enable the evaluation of PostScript specials, the original Ghostscript DLL 'gsdll32.dll' must be present\nand reachable through the search path. 64-bit Windows builds require the 64-bit Ghostscript DLL 'gsdll64.dll'.\nBoth DLLs come with the corresponding Ghostscript installers available from https://ghostscript.com.\n\nThe environment variable *DVISVGM_COLORS* specifies the colors used to highlight various parts of dvisvgm's\nmessage output. It is only evaluated if option *--color* is given. The value of *DVISVGM_COLORS* is a list of\ncolon-separated entries of the form 'gg'='BF', where 'gg' denotes one of the color group indicators listed\nbelow, and 'BF' are two hexadecimal digits specifying the background (first digit) and foreground/text color\n(second digit). The color values are defined as follows: 0=black, 1=red, 2=green, 3=yellow, 4=blue,\n5=magenta, 6=cyan, 7=gray, 8=bright red, 9=bright green, A=bright yellow, B=bright blue, C=bright magenta,\nD=bright cyan, E=bright gray, F=white. Depending on the terminal, the colors may differ. Rather than changing\nboth the text and background color, it's also possible to change only one of them: An asterisk (*) in\nplace of a hexadecimal digit indicates the default text or background color of the terminal.\n\nAll malformed entries in the list are silently ignored.\n\n[horizontal]\n*er*:: error messages\n*wn*:: warning messages\n*pn*:: messages about page numbers\n*ps*:: page size messages\n*fw*:: information about the files written\n*sm*:: state messages\n*tr*:: messages of the glyph tracer\n*pi*:: progress indicator\n\n*Example:* +er=01:pi=\\*5+ sets the colors of error messages (+er+) to red (+1+) on black (+0+), and those\nof progress indicators (+pi+) to cyan (+5+) on default background (+*+).\n\nVariable *DVISVGM_PDF_PROC* allows you to select the desired PDF processor. dvisvgm requires either\nGhostscript (version < 10.01.0) or mutool to process PDF files. IF *DVISVGM_PDF_PROC* is not set, dvisvgm\ntries to detect the available processors. See option *--pdf* for further information. To select a\nspecific PDF processor, you can set *DVISVGM_PDF_PROC* to +gs+ or +mutool+ which forces the use of\nGhostscript and mutool respectively.\n\nFiles\n-----\nThe location of the following files is determined by the kpathsea library.\nTo check the actual kpathsea configuration you can use the *kpsewhich* utility.\n\n[horizontal]\n**.enc*:: Font encoding files\n**.fgd*:: Font glyph data files (cache files created by dvisvgm)\n**.map*:: Font map files\n**.mf*::  Metafont input files\n**.pfb*:: PostScript Type 1 font files\n**.pro*:: PostScript header/prologue files\n**.tfm*:: TeX font metric files\n**.ttf*:: TrueType font files\n**.vf*::  Virtual font files\n\nSee also\n--------\n*tex(1), mf(1), mktexmf(1), grodvi(1), potrace(1)*, and the *kpathsea library* info documentation.\n\nResources\n---------\nProject home page::: https://dvisvgm.de\nCode repository::: https://github.com/mgieseki/dvisvgm\n\nBugs\n----\nPlease report bugs using the bug tracker at https://github.com/mgieseki/dvisvgm/issues[GitHub].\n\nAuthor\n------\nWritten by {author} <{email}>\n\nCopying\n-------\nCopyright (C) 2005-2025 Martin Gieseking. Free use of this software is\ngranted under the terms of the GNU General Public License (GPL) version 3\nor, (at your option) any later version.\n\n// vim: set syntax=asciidoc:\n"
  },
  {
    "path": "doc/generate-dvisvgm-sty.xsl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n    <xsl:output method=\"text\"/>\n\n    <xsl:template match=\"/\">% This is a generated file -- don't modify it manually.\n\\NeedsTeXFormat{LaTeX2e}\n\\ProvidesPackage{dvisvgm}[2015/02/04 dvisvgm DocBook style]\n\\RequirePackageWithOptions{docbook}\n\\RequirePackage[english]{babel}\n\\RequirePackage[shortcuts]{extdash}\n\\RequirePackage{underscore}\n\\renewcommand*{\\arraystretch}{-0.4}\n\\AtBeginDocument{%\n  \\thispagestyle{empty}\n  \\lhead[]{\\refmiscinfomanual}\n  \\rhead[]{\\thepage}\n  \\lfoot[]{\\refmiscinfosource{} \\refmiscinfoversion}\n  \\rfoot[]{<xsl:value-of select=\"refentry/refentryinfo/date\"/>} % revision date given in dvisvgm.txt.in\n  \\def\\tableofcontents{\\stdtoc} % keep TOC on current page\n}\n    </xsl:template>\n</xsl:stylesheet>\n"
  },
  {
    "path": "doc/tweak-db-article.xsl",
    "content": "<?xml version=\"1.0\"?>\n<!-- This file is part of dvisvgm -->\n<!-- Copyright (C) 2015-2025 Martin Gieseking <martin.gieseking@uos.de> -->\n<xsl:stylesheet version=\"1.0\"\n  xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\n  xmlns:my=\"my-namespace\"\n  exclude-result-prefixes=\"my\">\n\n  <xsl:import href=\"tweak-db-refentry.xsl\"/>\n  <xsl:output doctype-public=\"-//OASIS//DTD DocBook XML V4.5//EN\" doctype-system=\"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd\"/>\n\n  <!-- add subtitle -->\n  <xsl:template match=\"articleinfo\">\n    <xsl:copy>\n      <title>dvisvgm {VERSION} Manual</title>\n      <subtitle>A fast DVI to SVG converter</subtitle>\n      <xsl:apply-templates select=\"*[not(self::title)]\"/>\n    </xsl:copy>\n  </xsl:template>\n\n  <!-- adapt ISO date created by keyword expansion -->\n  <xsl:template match=\"articleinfo/date | revision[1]/date\">\n    <date>\n      <xsl:value-of select=\"my:extract-date(.)\"/>\n    </date>\n  </xsl:template>\n\n  <!-- drop redundant section 'Name' -->\n  <xsl:template match=\"section[@id='_name']\"/>\n</xsl:stylesheet>\n"
  },
  {
    "path": "doc/tweak-db-refentry.xsl",
    "content": "<?xml version=\"1.0\"?>\n<!-- This file is part of dvisvgm -->\n<!-- Copyright (C) 2015-2025 Martin Gieseking <martin.gieseking@uos.de> -->\n<xsl:stylesheet version=\"1.0\"\n  xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\n  xmlns:date=\"http://exslt.org/dates-and-times\"\n  xmlns:func=\"http://exslt.org/functions\"\n  xmlns:my=\"my-namespace\"\n  exclude-result-prefixes=\"my\"\n  extension-element-prefixes=\"date func\">\n\n  <xsl:output doctype-public=\"-//OASIS//DTD DocBook XML V4.5//EN\" doctype-system=\"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd\"/>\n\n  <!-- adapt ISO date created by keyword expansion -->\n  <xsl:template match=\"refentryinfo/date | revision[1]/date\">\n    <date>\n      <xsl:value-of select=\"my:extract-date(.)\"/>\n    </date>\n  </xsl:template>\n\n  <!-- add date to refmeta element -->\n  <xsl:template match=\"refmeta\">\n    <xsl:copy>\n      <xsl:copy-of select=\"*\"/>\n      <refmiscinfo class=\"date\">\n        <xsl:value-of select=\"my:extract-date(../refentryinfo/date)\"/>\n      </refmiscinfo>\n    </xsl:copy>\n  </xsl:template>\n\n  <func:function name=\"my:extract-date\">\n    <xsl:param name=\"isodate\"/>\n    <xsl:variable name=\"shortdate\" select=\"substring($isodate, 1, 10)\"/>\n    <xsl:choose>\n      <xsl:when test=\"translate($shortdate, '0123456789', '##########') = '####-##-##'\">\n        <!-- use date part of expanded keyword -->\n        <func:result select=\"$shortdate\"/>\n      </xsl:when>\n      <xsl:otherwise>\n        <!-- use current date as fallback -->\n        <func:result select=\"substring(date:date(), 1, 10)\"/>\n      </xsl:otherwise>\n    </xsl:choose>\n  </func:function>\n\n  <!-- copy everything else unchanged -->\n  <xsl:template match=\"@*|node()\">\n    <xsl:copy>\n      <xsl:apply-templates select=\"@*|node()\"/>\n    </xsl:copy>\n  </xsl:template>\n</xsl:stylesheet>\n"
  },
  {
    "path": "doc/tweak-dblatex-pdf.xsl",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- This file is part of dvisvgm -->\n<!-- Copyright (C) 2015-2025 Martin Gieseking <martin.gieseking@uos.de> -->\n<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n  <xsl:output doctype-public=\"-//OASIS//DTD DocBook XML V4.5//EN\" doctype-system=\"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd\"/>\n\n  <!-- replace default document title -->\n  <xsl:template match=\"refentrytitle[. != ../refmiscinfo[@class='manual']]\">\n    <xsl:copy>\n      <xsl:value-of select=\"../refmiscinfo[@class='manual']\"/>\n    </xsl:copy>\n  </xsl:template>\n\n  <!-- add static title to the synopsis section to prevent creating a dynamic one -->\n  <xsl:template match=\"refsynopsisdiv[not(title)]\">\n    <xsl:copy>\n      <xsl:copy-of select=\"@*\"/>\n      <title>Synopsis</title>\n      <xsl:apply-templates/>\n    </xsl:copy>\n  </xsl:template>\n\n  <!-- copy everything else unchanged -->\n  <xsl:template match=\"@*|node()\">\n    <xsl:copy>\n      <xsl:apply-templates select=\"@*|node()\"/>\n    </xsl:copy>\n  </xsl:template>\n</xsl:stylesheet>\n"
  },
  {
    "path": "doc/tweak-dblatex-tex.py",
    "content": "import re\nimport os\n\ndef main (latex_file, stdout):\n    latex_file_old = latex_file+\"-old\"\n    os.rename(latex_file, latex_file_old)\n    os.remove(os.path.splitext(latex_file)[0]+\".pdf\")\n    with open(latex_file, \"w\") as outfile:\n        with open(latex_file_old) as infile:\n            lines = infile.readlines()\n            for line in lines:\n                if re.match(r'(.*\\\\def)|(.*\\\\href)', line) == None:\n                    line = re.sub(r'([a-zA-Z0-9]+)/', r'\\1\\\\slash{}', line)\n                    line = re.sub(r'-{}-{}', r'\\=/\\=/', line)\n                    line = re.sub(r'([^a-zA-Z0-9])-{}', r'\\1\\=/', line)\n                print(line.rstrip(), file=outfile)\n    os.remove(latex_file_old)\n    return 0\n"
  },
  {
    "path": "libs/Makefile.am",
    "content": "## This file is part of dvisvgm\n## Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>\n##\n## Process this file with automake.\n\nSUBDIRS = boost clipper md5 variant xxHash\n\nif !TEXLIVE_BUILD\nSUBDIRS += potrace\nendif\n\nif ENABLE_WOFF\nSUBDIRS += brotli woff2\nendif\n"
  },
  {
    "path": "libs/boost/LICENSE.txt",
    "content": "Boost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization\nobtaining a copy of the software and accompanying documentation covered by\nthis license (the \"Software\") to use, reproduce, display, distribute,\nexecute, and transmit the Software, and to prepare derivative works of the\nSoftware, and to permit third-parties to whom the Software is furnished to\ndo so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including\nthe above license grant, this restriction and the following disclaimer,\nmust be included in all copies of the Software, in whole or in part, and\nall derivative works of the Software, unless such copies or derivative\nworks are solely in the form of machine-executable object code generated by\na source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\nSHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\nFOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "libs/boost/Makefile.am",
    "content": "noinst_HEADERS = \\\n\tboost-vectorstream.hpp \\\n\tvectorstream.hpp\n\nEXTRA_DIST = LICENSE.txt\n"
  },
  {
    "path": "libs/boost/boost-vectorstream.hpp",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n// (C) Copyright Ion Gaztanaga 2005-2012. Distributed under the Boost\n// Software License, Version 1.0. (See accompanying file\n// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n//\n// See http://www.boost.org/libs/interprocess for documentation.\n//\n//////////////////////////////////////////////////////////////////////////////\n//\n// This file comes from SGI's sstream file. Modified by Ion Gaztanaga 2005-2012.\n// Changed internal SGI string to a generic, templatized vector. Added efficient\n// internal buffer get/set/swap functions, so that we can obtain/establish the\n// internal buffer without any reallocation or copy. Kill those temporaries!\n///////////////////////////////////////////////////////////////////////////////\n/*\n * Copyright (c) 1998\n * Silicon Graphics Computer Systems, Inc.\n *\n * Permission to use, copy, modify, distribute and sell this software\n * and its documentation for any purpose is hereby granted without fee,\n * provided that the above copyright notice appear in all copies and\n * that both that copyright notice and this permission notice appear\n * in supporting documentation.  Silicon Graphics makes no\n * representations about the suitability of this software for any\n * purpose.  It is provided \"as is\" without express or implied warranty.\n */\n\n//!\\file\n//!This file defines basic_vectorbuf, basic_ivectorstream,\n//!basic_ovectorstream, and basic_vectorstreamclasses.  These classes\n//!represent streamsbufs and streams whose sources or destinations are\n//!STL-like vectors that can be swapped with external vectors to avoid\n//!unnecessary allocations/copies.\n\n#ifndef BOOST_INTERPROCESS_VECTORSTREAM_HPP\n#define BOOST_INTERPROCESS_VECTORSTREAM_HPP\n\n#include <iosfwd>\n#include <ios>\n#include <istream>\n#include <ostream>\n#include <string>    // char traits\n#include <cstddef>   // ptrdiff_t\n\n#ifdef __GNUC__\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wreorder\"\n#endif\n\nnamespace boost {  namespace interprocess {\n\n//!A streambuf class that controls the transmission of elements to and from\n//!a basic_ivectorstream, basic_ovectorstream or basic_vectorstream.\n//!It holds a character vector specified by CharVector template parameter\n//!as its formatting buffer. The vector must have contiguous storage, like\n//!std::vector, boost::interprocess::vector or boost::interprocess::basic_string\ntemplate <class CharVector, class CharTraits>\nclass basic_vectorbuf\n   : public std::basic_streambuf<typename CharVector::value_type, CharTraits>\n{\n   public:\n   typedef CharVector                        vector_type;\n   typedef typename CharVector::value_type   char_type;\n   typedef typename CharTraits::int_type     int_type;\n   typedef typename CharTraits::pos_type     pos_type;\n   typedef typename CharTraits::off_type     off_type;\n   typedef CharTraits                        traits_type;\n\n   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)\n   private:\n   typedef std::basic_streambuf<char_type, traits_type> base_t;\n\n   basic_vectorbuf(const basic_vectorbuf&);\n   basic_vectorbuf & operator =(const basic_vectorbuf&);\n   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED\n\n   public:\n   //!Constructor. Throws if vector_type default\n   //!constructor throws.\n   explicit basic_vectorbuf(std::ios_base::openmode mode\n                              = std::ios_base::in | std::ios_base::out)\n      :  base_t(), m_mode(mode)\n   {  this->initialize_pointers();   }\n\n   //!Constructor. Throws if\n   //!vector_type(const VectorParameter &param) throws.\n   template<class VectorParameter>\n   explicit basic_vectorbuf(const VectorParameter &param,\n                            std::ios_base::openmode mode\n                                 = std::ios_base::in | std::ios_base::out)\n      :  base_t(), m_mode(mode), m_vect(param)\n   {  this->initialize_pointers();   }\n\n   public:\n\n   //!Swaps the underlying vector with the passed vector.\n   //!This function resets the read/write position in the stream.\n   //!Does not throw.\n   void swap_vector(vector_type &vect)\n   {\n      if (this->m_mode & std::ios_base::out){\n         //Update high water if necessary\n         //And resize vector to remove extra size\n         if (mp_high_water < base_t::pptr()){\n            //Restore the vector's size if necessary\n            mp_high_water = base_t::pptr();\n         }\n         //This does not reallocate\n         m_vect.resize(std::size_t(mp_high_water - (m_vect.size() ? &m_vect[0] : 0)));\n      }\n      //Now swap vector\n      m_vect.swap(vect);\n      this->initialize_pointers();\n   }\n\n   //!Returns a const reference to the internal vector.\n   //!Does not throw.\n   const vector_type &vector() const\n   {\n      if (this->m_mode & std::ios_base::out){\n         if (mp_high_water < base_t::pptr()){\n            //Restore the vector's size if necessary\n            mp_high_water = base_t::pptr();\n         }\n         //This shouldn't reallocate\n         typedef typename vector_type::size_type size_type;\n         char_type *old_ptr = base_t::pbase();\n         size_type high_pos = size_type(mp_high_water-old_ptr);\n         if(m_vect.size() > high_pos){\n            m_vect.resize(high_pos);\n            //But we must update end write pointer because vector size is now shorter\n            int old_pos = (int)(base_t::pptr() - base_t::pbase());\n            const_cast<basic_vectorbuf*>(this)->base_t::setp(old_ptr, old_ptr + high_pos);\n            const_cast<basic_vectorbuf*>(this)->base_t::pbump(old_pos);\n         }\n      }\n      return m_vect;\n   }\n\n   //!Preallocates memory from the internal vector.\n   //!Resets the stream to the first position.\n   //!Throws if the internals vector's memory allocation throws.\n   void reserve(typename vector_type::size_type size)\n   {\n      if (this->m_mode & std::ios_base::out && size > m_vect.size()){\n         typename vector_type::difference_type write_pos = base_t::pptr() - base_t::pbase();\n         typename vector_type::difference_type read_pos  = base_t::gptr() - base_t::eback();\n         //Now update pointer data\n         m_vect.reserve(size);\n         this->initialize_pointers();\n         base_t::pbump((int)write_pos);\n         if(this->m_mode & std::ios_base::in){\n            base_t::gbump((int)read_pos);\n         }\n      }\n   }\n\n   //!Calls clear() method of the internal vector.\n   //!Resets the stream to the first position.\n   void clear()\n   {  m_vect.clear();   this->initialize_pointers();   }\n\n   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)\n   private:\n   //Maximizes high watermark to the initial vector size,\n   //initializes read and write iostream buffers to the capacity\n   //and resets stream positions\n   void initialize_pointers()\n   {\n      // The initial read position is the beginning of the vector.\n      if(!(m_mode & std::ios_base::out)){\n         if(m_vect.empty()){\n            this->setg(0, 0, 0);\n         }\n         else{\n            this->setg(&m_vect[0], &m_vect[0], &m_vect[0] + m_vect.size());\n         }\n      }\n\n      // The initial write position is the beginning of the vector.\n      if(m_mode & std::ios_base::out){\n         //First get real size\n         int real_size = (int)m_vect.size();\n         //Then maximize size for high watermarking\n         m_vect.resize(m_vect.capacity());\n         BOOST_ASSERT(m_vect.size() == m_vect.capacity());\n         //Set high watermarking with the expanded size\n         mp_high_water = m_vect.size() ? (&m_vect[0] + real_size) : 0;\n         //Now set formatting pointers\n         if(m_vect.empty()){\n            this->setp(0, 0);\n            if(m_mode & std::ios_base::in)\n               this->setg(0, 0, 0);\n         }\n         else{\n            char_type *p = &m_vect[0];\n            this->setp(p, p + m_vect.size());\n            if(m_mode & std::ios_base::in)\n               this->setg(p, p, p + real_size);\n         }\n         if (m_mode & (std::ios_base::app | std::ios_base::ate)){\n            base_t::pbump((int)real_size);\n         }\n      }\n   }\n\n   protected:\n   virtual int_type underflow() BOOST_OVERRIDE\n   {\n      if (base_t::gptr() == 0)\n         return CharTraits::eof();\n      if(m_mode & std::ios_base::out){\n         if (mp_high_water < base_t::pptr())\n            mp_high_water = base_t::pptr();\n         if (base_t::egptr() < mp_high_water)\n            base_t::setg(base_t::eback(), base_t::gptr(), mp_high_water);\n      }\n      if (base_t::gptr() < base_t::egptr())\n         return CharTraits::to_int_type(*base_t::gptr());\n      return CharTraits::eof();\n   }\n\n   virtual int_type pbackfail(int_type c = CharTraits::eof()) BOOST_OVERRIDE\n   {\n      if(this->gptr() != this->eback()) {\n         if(!CharTraits::eq_int_type(c, CharTraits::eof())) {\n            if(CharTraits::eq(CharTraits::to_char_type(c), this->gptr()[-1])) {\n               this->gbump(-1);\n               return c;\n            }\n            else if(m_mode & std::ios_base::out) {\n               this->gbump(-1);\n               *this->gptr() = CharTraits::to_char_type(c);\n               return c;\n            }\n            else\n               return CharTraits::eof();\n         }\n         else {\n            this->gbump(-1);\n            return CharTraits::not_eof(c);\n         }\n      }\n      else\n         return CharTraits::eof();\n   }\n\n   virtual int_type overflow(int_type c = CharTraits::eof()) BOOST_OVERRIDE\n   {\n      if(m_mode & std::ios_base::out) {\n         if(!CharTraits::eq_int_type(c, CharTraits::eof())) {\n               typedef typename vector_type::difference_type dif_t;\n               //The new output position is the previous one plus one\n               //because 'overflow' requires putting 'c' on the buffer\n               dif_t new_outpos = base_t::pptr() - base_t::pbase() + 1;\n               //Adjust high water if necessary\n               dif_t hipos = mp_high_water - base_t::pbase();\n               if (hipos < new_outpos)\n                  hipos = new_outpos;\n               //Insert the new data\n               m_vect.push_back(CharTraits::to_char_type(c));\n               m_vect.resize(m_vect.capacity());\n               BOOST_ASSERT(m_vect.size() == m_vect.capacity());\n               char_type* p = const_cast<char_type*>(&m_vect[0]);\n               //A reallocation might have happened, update pointers\n               base_t::setp(p, p + (dif_t)m_vect.size());\n               mp_high_water = p + hipos;\n               if (m_mode & std::ios_base::in)\n                  base_t::setg(p, p + (base_t::gptr() - base_t::eback()), mp_high_water);\n               //Update write position to the old position + 1\n               base_t::pbump((int)new_outpos);\n               return c;\n         }\n         else  // c is EOF, so we don't have to do anything\n            return CharTraits::not_eof(c);\n      }\n      else     // Overflow always fails if it's read-only.\n         return CharTraits::eof();\n   }\n\n   virtual pos_type seekoff(off_type off, std::ios_base::seekdir dir,\n                              std::ios_base::openmode mode\n                                 = std::ios_base::in | std::ios_base::out) BOOST_OVERRIDE\n   {\n      //Get seek mode\n      bool in(0 != (mode & std::ios_base::in)), out(0 != (mode & std::ios_base::out));\n      //Test for logic errors\n      if(!in & !out)\n         return pos_type(off_type(-1));\n      else if((in && out) && (dir == std::ios_base::cur))\n         return pos_type(off_type(-1));\n      else if((in  && (!(m_mode & std::ios_base::in) || (off != 0 && this->gptr() == 0) )) ||\n               (out && (!(m_mode & std::ios_base::out) || (off != 0 && this->pptr() == 0))))\n         return pos_type(off_type(-1));\n\n      off_type newoff;\n      //Just calculate the end of the stream. If the stream is read-only\n      //the limit is the size of the vector. Otherwise, the high water mark\n      //will mark the real size.\n      off_type limit;\n      if(m_mode & std::ios_base::out){\n         //Update high water marking because pptr() is going to change and it might\n         //have been updated since last overflow()\n         if(mp_high_water < base_t::pptr())\n            mp_high_water = base_t::pptr();\n         //Update read limits in case high water mark was changed\n         if(m_mode & std::ios_base::in){\n            if (base_t::egptr() < mp_high_water)\n               base_t::setg(base_t::eback(), base_t::gptr(), mp_high_water);\n         }\n         limit = static_cast<off_type>(mp_high_water - base_t::pbase());\n      }\n      else{\n         limit = static_cast<off_type>(m_vect.size());\n      }\n\n      switch(dir) {\n         case std::ios_base::beg:\n            newoff = 0;\n         break;\n         case std::ios_base::end:\n            newoff = limit;\n         break;\n         case std::ios_base::cur:\n            newoff = in ? static_cast<std::streamoff>(this->gptr() - this->eback())\n                        : static_cast<std::streamoff>(this->pptr() - this->pbase());\n         break;\n         default:\n            return pos_type(off_type(-1));\n      }\n\n      newoff += off;\n\n      if (newoff < 0 || newoff > limit)\n         return pos_type(-1);\n      if (m_mode & std::ios_base::app && mode & std::ios_base::out && newoff != limit)\n         return pos_type(-1);\n      //This can reassign pointers\n      //if(m_vect.size() != m_vect.capacity())\n         //this->initialize_pointers();\n      if (in)\n         base_t::setg(base_t::eback(), base_t::eback() + newoff, base_t::egptr());\n      if (out){\n         base_t::setp(base_t::pbase(), base_t::epptr());\n         base_t::pbump(static_cast<int>(newoff));\n      }\n      return pos_type(newoff);\n   }\n\n   virtual pos_type seekpos(pos_type pos, std::ios_base::openmode mode\n                                 = std::ios_base::in | std::ios_base::out) BOOST_OVERRIDE\n   {  return seekoff(pos - pos_type(off_type(0)), std::ios_base::beg, mode);  }\n\n   private:\n   std::ios_base::openmode m_mode;\n   mutable vector_type     m_vect;\n   mutable char_type*      mp_high_water;\n   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED\n};\n\n//!A basic_istream class that holds a character vector specified by CharVector\n//!template parameter as its formatting buffer. The vector must have\n//!contiguous storage, like std::vector, boost::interprocess::vector or\n//!boost::interprocess::basic_string\ntemplate <class CharVector, class CharTraits>\nclass basic_ivectorstream\n   : public std::basic_istream<typename CharVector::value_type, CharTraits>\n   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)\n   , private basic_vectorbuf<CharVector, CharTraits>\n   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED\n{\n   public:\n   typedef CharVector                                                   vector_type;\n   typedef typename std::basic_ios\n      <typename CharVector::value_type, CharTraits>::char_type          char_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::int_type     int_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::pos_type     pos_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::off_type     off_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::traits_type  traits_type;\n\n   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)\n   private:\n   typedef basic_vectorbuf<CharVector, CharTraits>    vectorbuf_t;\n   typedef std::basic_ios<char_type, CharTraits>      basic_ios_t;\n   typedef std::basic_istream<char_type, CharTraits>  base_t;\n\n   vectorbuf_t &       get_buf()      {  return *this;  }\n   const vectorbuf_t & get_buf() const{  return *this;  }\n   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED\n\n   public:\n\n   //!Constructor. Throws if vector_type default\n   //!constructor throws.\n   basic_ivectorstream(std::ios_base::openmode mode = std::ios_base::in)\n      : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base\n                  //(via basic_ios::init() call in base_t's constructor) without the risk of a\n                  //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.\n      , vectorbuf_t(mode | std::ios_base::in)\n   {  this->base_t::rdbuf(&get_buf()); }\n\n   //!Constructor. Throws if vector_type(const VectorParameter &param)\n   //!throws.\n   template<class VectorParameter>\n   basic_ivectorstream(const VectorParameter &param,\n                       std::ios_base::openmode mode = std::ios_base::in)\n      : vectorbuf_t(param, mode | std::ios_base::in)\n         //basic_ios_t() is constructed uninitialized as virtual base\n         //and initialized inside base_t calling basic_ios::init()\n      , base_t(&get_buf())\n   {}\n\n   public:\n   //!Returns the address of the stored\n   //!stream buffer.\n   basic_vectorbuf<CharVector, CharTraits>* rdbuf() const\n   { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&get_buf()); }\n\n   //!Swaps the underlying vector with the passed vector.\n   //!This function resets the read position in the stream.\n   //!Does not throw.\n   void swap_vector(vector_type &vect)\n   {  get_buf().swap_vector(vect);   }\n\n   //!Returns a const reference to the internal vector.\n   //!Does not throw.\n   const vector_type &vector() const\n   {  return get_buf().vector();   }\n\n   //!Calls reserve() method of the internal vector.\n   //!Resets the stream to the first position.\n   //!Throws if the internals vector's reserve throws.\n   void reserve(typename vector_type::size_type size)\n   {  get_buf().reserve(size);   }\n\n   //!Calls clear() method of the internal vector.\n   //!Resets the stream to the first position.\n   void clear()\n   {  get_buf().clear();   }\n};\n\n//!A basic_ostream class that holds a character vector specified by CharVector\n//!template parameter as its formatting buffer. The vector must have\n//!contiguous storage, like std::vector, boost::interprocess::vector or\n//!boost::interprocess::basic_string\ntemplate <class CharVector, class CharTraits>\nclass basic_ovectorstream\n   : public std::basic_ostream<typename CharVector::value_type, CharTraits>\n   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)\n   , private basic_vectorbuf<CharVector, CharTraits>\n   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED\n{\n   public:\n   typedef CharVector                                                   vector_type;\n   typedef typename std::basic_ios\n      <typename CharVector::value_type, CharTraits>::char_type          char_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::int_type     int_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::pos_type     pos_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::off_type     off_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::traits_type  traits_type;\n\n   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)\n   private:\n   typedef basic_vectorbuf<CharVector, CharTraits>    vectorbuf_t;\n   typedef std::basic_ios<char_type, CharTraits>      basic_ios_t;\n   typedef std::basic_ostream<char_type, CharTraits>  base_t;\n\n   vectorbuf_t &       get_buf()      {  return *this;  }\n   const vectorbuf_t & get_buf()const {  return *this;  }\n   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED\n\n   public:\n   //!Constructor. Throws if vector_type default\n   //!constructor throws.\n   basic_ovectorstream(std::ios_base::openmode mode = std::ios_base::out)\n      : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base\n                  //(via basic_ios::init() call in base_t's constructor) without the risk of a\n                  //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.\n      , vectorbuf_t(mode | std::ios_base::out)\n   {  this->base_t::rdbuf(&get_buf()); }\n\n   //!Constructor. Throws if vector_type(const VectorParameter &param)\n   //!throws.\n   template<class VectorParameter>\n   basic_ovectorstream(const VectorParameter &param,\n                        std::ios_base::openmode mode = std::ios_base::out)\n      : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base\n                  //(via basic_ios::init() call in base_t's constructor) without the risk of a\n                  //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.\n      , vectorbuf_t(param, mode | std::ios_base::out)\n   {  this->base_t::rdbuf(&get_buf()); }\n\n   public:\n   //!Returns the address of the stored\n   //!stream buffer.\n   basic_vectorbuf<CharVector, CharTraits>* rdbuf() const\n   { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&get_buf()); }\n\n   //!Swaps the underlying vector with the passed vector.\n   //!This function resets the write position in the stream.\n   //!Does not throw.\n   void swap_vector(vector_type &vect)\n   {  get_buf().swap_vector(vect);   }\n\n   //!Returns a const reference to the internal vector.\n   //!Does not throw.\n   const vector_type &vector() const\n   {  return get_buf().vector();   }\n\n   //!Calls reserve() method of the internal vector.\n   //!Resets the stream to the first position.\n   //!Throws if the internals vector's reserve throws.\n   void reserve(typename vector_type::size_type size)\n   {  get_buf().reserve(size);   }\n};\n\n//!A basic_iostream class that holds a character vector specified by CharVector\n//!template parameter as its formatting buffer. The vector must have\n//!contiguous storage, like std::vector, boost::interprocess::vector or\n//!boost::interprocess::basic_string\ntemplate <class CharVector, class CharTraits>\nclass basic_vectorstream\n   : public std::basic_iostream<typename CharVector::value_type, CharTraits>\n   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)\n   , private basic_vectorbuf<CharVector, CharTraits>\n   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED\n{\n   public:\n   typedef CharVector                                                   vector_type;\n   typedef typename std::basic_ios\n      <typename CharVector::value_type, CharTraits>::char_type          char_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::int_type     int_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::pos_type     pos_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::off_type     off_type;\n   typedef typename std::basic_ios<char_type, CharTraits>::traits_type  traits_type;\n\n   #if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)\n   private:\n   typedef basic_vectorbuf<CharVector, CharTraits>    vectorbuf_t;\n   typedef std::basic_ios<char_type, CharTraits>      basic_ios_t;\n   typedef std::basic_iostream<char_type, CharTraits> base_t;\n\n   vectorbuf_t &       get_buf()      {  return *this;  }\n   const vectorbuf_t & get_buf() const{  return *this;  }\n   #endif   //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED\n\n   public:\n   //!Constructor. Throws if vector_type default\n   //!constructor throws.\n   basic_vectorstream(std::ios_base::openmode mode\n                      = std::ios_base::in | std::ios_base::out)\n      : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base\n                  //(via basic_ios::init() call in base_t's constructor) without the risk of a\n                  //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.\n      , vectorbuf_t(mode)\n   {  this->base_t::rdbuf(&get_buf()); }\n\n   //!Constructor. Throws if vector_type(const VectorParameter &param)\n   //!throws.\n   template<class VectorParameter>\n   basic_vectorstream(const VectorParameter &param, std::ios_base::openmode mode\n                      = std::ios_base::in | std::ios_base::out)\n      : base_t(0) //Initializes first the base class to safely init the virtual basic_ios base\n                  //(via basic_ios::init() call in base_t's constructor) without the risk of a\n                  //previous throwing vectorbuf constructor. Set the streambuf after risk has gone.\n      , vectorbuf_t(param, mode)\n   {  this->base_t::rdbuf(&get_buf()); }\n\n   public:\n   //Returns the address of the stored stream buffer.\n   basic_vectorbuf<CharVector, CharTraits>* rdbuf() const\n   { return const_cast<basic_vectorbuf<CharVector, CharTraits>*>(&get_buf()); }\n\n   //!Swaps the underlying vector with the passed vector.\n   //!This function resets the read/write position in the stream.\n   //!Does not throw.\n   void swap_vector(vector_type &vect)\n   {  get_buf().swap_vector(vect);   }\n\n   //!Returns a const reference to the internal vector.\n   //!Does not throw.\n   const vector_type &vector() const\n   {  return get_buf().vector();   }\n\n   //!Calls reserve() method of the internal vector.\n   //!Resets the stream to the first position.\n   //!Throws if the internals vector's reserve throws.\n   void reserve(typename vector_type::size_type size)\n   {  get_buf().reserve(size);   }\n\n   //!Calls clear() method of the internal vector.\n   //!Resets the stream to the first position.\n   void clear()\n   {  get_buf().clear();   }\n};\n\n//Some typedefs to simplify usage\n//!\n//!typedef basic_vectorbuf<std::vector<char> >        vectorbuf;\n//!typedef basic_vectorstream<std::vector<char> >     vectorstream;\n//!typedef basic_ivectorstream<std::vector<char> >    ivectorstream;\n//!typedef basic_ovectorstream<std::vector<char> >    ovectorstream;\n//!\n//!typedef basic_vectorbuf<std::vector<wchar_t> >     wvectorbuf;\n//!typedef basic_vectorstream<std::vector<wchar_t> >  wvectorstream;\n//!typedef basic_ivectorstream<std::vector<wchar_t> > wivectorstream;\n//!typedef basic_ovectorstream<std::vector<wchar_t> > wovectorstream;\n\n}} //namespace boost {  namespace interprocess {\n\n#ifdef __GNUC__\n#pragma GCC diagnostic pop\n#endif\n\n#endif /* BOOST_INTERPROCESS_VECTORSTREAM_HPP */\n"
  },
  {
    "path": "libs/boost/vectorstream.hpp",
    "content": "#pragma once\n\n#ifndef BOOST_OVERRIDE\n#define BOOST_OVERRIDE override\n#endif\n\n#ifndef BOOST_ASSERT\n#define BOOST_ASSERT(expr)\n#endif\n\n#include \"boost-vectorstream.hpp\"\n\ntemplate <class CharVector>\nusing ovectorstream = boost::interprocess::basic_ovectorstream<CharVector, std::char_traits<typename CharVector::value_type>>;\n\ntemplate <class CharVector>\nusing ivectorstream = boost::interprocess::basic_ivectorstream<CharVector, std::char_traits<typename CharVector::value_type>>;\n"
  },
  {
    "path": "libs/brotli/LICENSE",
    "content": "Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "libs/brotli/Makefile.am",
    "content": "if !HAVE_BROTLI\nnoinst_LIBRARIES = libbrotli.a\nlibbrotli_a_SOURCES = \\\n\tcommon/constants.c \\\n\tcommon/constants.h \\\n\tcommon/context.c \\\n\tcommon/context.h \\\n\tcommon/dictionary.c \\\n\tcommon/dictionary.h \\\n\tcommon/dictionary_inc.h \\\n\tcommon/platform.c \\\n\tcommon/platform.h \\\n\tcommon/shared_dictionary_internal.h \\\n\tcommon/static_init.h \\\n\tcommon/transform.c \\\n\tcommon/transform.h \\\n\tcommon/version.h \\\n\tenc/backward_references.c \\\n\tenc/backward_references.h \\\n\tenc/backward_references_hq.c \\\n\tenc/backward_references_hq.h \\\n\tenc/backward_references_inc.h \\\n\tenc/bit_cost.c \\\n\tenc/bit_cost.h \\\n\tenc/bit_cost_inc.h \\\n\tenc/block_encoder_inc.h \\\n\tenc/block_splitter.c \\\n\tenc/block_splitter.h \\\n\tenc/block_splitter_inc.h \\\n\tenc/brotli_bit_stream.c \\\n\tenc/brotli_bit_stream.h \\\n\tenc/cluster.c \\\n\tenc/cluster.h \\\n\tenc/cluster_inc.h \\\n\tenc/command.c \\\n\tenc/command.h \\\n\tenc/compound_dictionary.c \\\n\tenc/compound_dictionary.h \\\n\tenc/compress_fragment.c \\\n\tenc/compress_fragment.h \\\n\tenc/compress_fragment_two_pass.c \\\n\tenc/compress_fragment_two_pass.h \\\n\tenc/dictionary_hash.c \\\n\tenc/dictionary_hash.h \\\n\tenc/dictionary_hash_inc.h \\\n\tenc/encode.c \\\n\tenc/encoder_dict.c \\\n\tenc/encoder_dict.h \\\n\tenc/entropy_encode.c \\\n\tenc/entropy_encode.h \\\n\tenc/entropy_encode_static.h \\\n\tenc/fast_log.c \\\n\tenc/fast_log.h \\\n\tenc/find_match_length.h \\\n\tenc/hash.h \\\n\tenc/hash_base.h \\\n\tenc/hash_composite_inc.h \\\n\tenc/hash_forgetful_chain_inc.h \\\n\tenc/hash_longest_match64_inc.h \\\n\tenc/hash_longest_match64_simd_inc.h \\\n\tenc/hash_longest_match_inc.h \\\n\tenc/hash_longest_match_quickly_inc.h \\\n\tenc/hash_longest_match_simd_inc.h \\\n\tenc/hash_rolling_inc.h \\\n\tenc/hash_to_binary_tree_inc.h \\\n\tenc/histogram.c \\\n\tenc/histogram.h \\\n\tenc/histogram_inc.h \\\n\tenc/literal_cost.c \\\n\tenc/literal_cost.h \\\n\tenc/matching_tag_mask.h \\\n\tenc/memory.c \\\n\tenc/memory.h \\\n\tenc/metablock.c \\\n\tenc/metablock.h \\\n\tenc/metablock_inc.h \\\n\tenc/params.h \\\n\tenc/prefix.h \\\n\tenc/quality.h \\\n\tenc/ringbuffer.h \\\n\tenc/state.h \\\n\tenc/static_dict.c \\\n\tenc/static_dict.h \\\n\tenc/static_dict_lut.c \\\n\tenc/static_dict_lut.h \\\n\tenc/static_dict_lut_inc.h \\\n\tenc/static_init.c \\\n\tenc/static_init.h \\\n\tenc/utf8_util.c \\\n\tenc/utf8_util.h \\\n\tenc/write_bits.h \\\n\tinclude/brotli/decode.h \\\n\tinclude/brotli/encode.h \\\n\tinclude/brotli/port.h \\\n\tinclude/brotli/shared_dictionary.h \\\n\tinclude/brotli/types.h\n\nAM_CFLAGS = -Wall -I$(srcdir)/include\n\nendif\n\nEXTRA_DIST = LICENSE\nCLEANFILES = *.gcda *.gcno\n"
  },
  {
    "path": "libs/brotli/common/constants.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"constants.h\"\n\nconst BROTLI_MODEL(\"small\")\nBrotliPrefixCodeRange _kBrotliPrefixCodeRanges[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {\n    {1, 2},     {5, 2},     {9, 2},   {13, 2},    {17, 3},    {25, 3},\n    {33, 3},    {41, 3},    {49, 4},  {65, 4},    {81, 4},    {97, 4},\n    {113, 5},   {145, 5},   {177, 5}, {209, 5},   {241, 6},   {305, 6},\n    {369, 7},   {497, 8},   {753, 9}, {1265, 10}, {2289, 11}, {4337, 12},\n    {8433, 13}, {16625, 24}};\n"
  },
  {
    "path": "libs/brotli/common/constants.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @file\n * Common constants used in decoder and encoder API.\n */\n\n#ifndef BROTLI_COMMON_CONSTANTS_H_\n#define BROTLI_COMMON_CONSTANTS_H_\n\n#include \"platform.h\"\n\n/* Specification: 7.3. Encoding of the context map */\n#define BROTLI_CONTEXT_MAP_MAX_RLE 16\n\n/* Specification: 2. Compressed representation overview */\n#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256\n\n/* Specification: 3.3. Alphabet sizes: insert-and-copy length */\n#define BROTLI_NUM_LITERAL_SYMBOLS 256\n#define BROTLI_NUM_COMMAND_SYMBOLS 704\n#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26\n#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \\\n                                        BROTLI_CONTEXT_MAP_MAX_RLE)\n#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2)\n\n/* Specification: 3.5. Complex prefix codes */\n#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16\n#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17\n#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1)\n/* \"code length of 8 is repeated\" */\n#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8\n\n/* \"Large Window Brotli\" */\n\n/**\n * The theoretical maximum number of distance bits specified for large window\n * brotli, for 64-bit encoders and decoders. Even when in practice 32-bit\n * encoders and decoders only support up to 30 max distance bits, the value is\n * set to 62 because it affects the large window brotli file format.\n * Specifically, it affects the encoding of simple huffman tree for distances,\n * see Specification RFC 7932 chapter 3.4.\n */\n#define BROTLI_LARGE_MAX_DISTANCE_BITS 62U\n#define BROTLI_LARGE_MIN_WBITS 10\n/**\n * The maximum supported large brotli window bits by the encoder and decoder.\n * Large window brotli allows up to 62 bits, however the current encoder and\n * decoder, designed for 32-bit integers, only support up to 30 bits maximum.\n */\n#define BROTLI_LARGE_MAX_WBITS 30\n\n/* Specification: 4. Encoding of distances */\n#define BROTLI_NUM_DISTANCE_SHORT_CODES 16\n/**\n * Maximal number of \"postfix\" bits.\n *\n * Number of \"postfix\" bits is stored as 2 bits in meta-block header.\n */\n#define BROTLI_MAX_NPOSTFIX 3\n#define BROTLI_MAX_NDIRECT 120\n#define BROTLI_MAX_DISTANCE_BITS 24U\n#define BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX, NDIRECT, MAXNBITS) ( \\\n    BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) +                    \\\n    ((MAXNBITS) << ((NPOSTFIX) + 1)))\n/* BROTLI_NUM_DISTANCE_SYMBOLS == 1128 */\n#define BROTLI_NUM_DISTANCE_SYMBOLS \\\n    BROTLI_DISTANCE_ALPHABET_SIZE(  \\\n        BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANCE_BITS)\n\n/* ((1 << 26) - 4) is the maximal distance that can be expressed in RFC 7932\n   brotli stream using NPOSTFIX = 0 and NDIRECT = 0. With other NPOSTFIX and\n   NDIRECT values distances up to ((1 << 29) + 88) could be expressed. */\n#define BROTLI_MAX_DISTANCE 0x3FFFFFC\n\n/* ((1 << 31) - 4) is the safe distance limit. Using this number as a limit\n   allows safe distance calculation without overflows, given the distance\n   alphabet size is limited to corresponding size\n   (see kLargeWindowDistanceCodeLimits). */\n#define BROTLI_MAX_ALLOWED_DISTANCE 0x7FFFFFFC\n\n\n/* Specification: 4. Encoding of Literal Insertion Lengths and Copy Lengths */\n#define BROTLI_NUM_INS_COPY_CODES 24\n\n/* 7.1. Context modes and context ID lookup for literals */\n/* \"context IDs for literals are in the range of 0..63\" */\n#define BROTLI_LITERAL_CONTEXT_BITS 6\n\n/* 7.2. Context ID for distances */\n#define BROTLI_DISTANCE_CONTEXT_BITS 2\n\n/* 9.1. Format of the Stream Header */\n/* Number of slack bytes for window size. Don't confuse\n   with BROTLI_NUM_DISTANCE_SHORT_CODES. */\n#define BROTLI_WINDOW_GAP 16\n#define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) - BROTLI_WINDOW_GAP)\n\ntypedef struct BrotliDistanceCodeLimit {\n  uint32_t max_alphabet_size;\n  uint32_t max_distance;\n} BrotliDistanceCodeLimit;\n\n/* This function calculates maximal size of distance alphabet, such that the\n   distances greater than the given values can not be represented.\n\n   This limits are designed to support fast and safe 32-bit decoders.\n   \"32-bit\" means that signed integer values up to ((1 << 31) - 1) could be\n   safely expressed.\n\n   Brotli distance alphabet symbols do not represent consecutive distance\n   ranges. Each distance alphabet symbol (excluding direct distances and short\n   codes), represent interleaved (for NPOSTFIX > 0) range of distances.\n   A \"group\" of consecutive (1 << NPOSTFIX) symbols represent non-interleaved\n   range. Two consecutive groups require the same amount of \"extra bits\".\n\n   It is important that distance alphabet represents complete \"groups\".\n   To avoid complex logic on encoder side about interleaved ranges\n   it was decided to restrict both sides to complete distance code \"groups\".\n */\nBROTLI_UNUSED_FUNCTION BrotliDistanceCodeLimit BrotliCalculateDistanceCodeLimit(\n    uint32_t max_distance, uint32_t npostfix, uint32_t ndirect) {\n  BrotliDistanceCodeLimit result;\n  /* Marking this function as unused, because not all files\n     including \"constants.h\" use it -> compiler warns about that. */\n  BROTLI_UNUSED(&BrotliCalculateDistanceCodeLimit);\n  if (max_distance <= ndirect) {\n    /* This case never happens / exists only for the sake of completeness. */\n    result.max_alphabet_size = max_distance + BROTLI_NUM_DISTANCE_SHORT_CODES;\n    result.max_distance = max_distance;\n    return result;\n  } else {\n    /* The first prohibited value. */\n    uint32_t forbidden_distance = max_distance + 1;\n    /* Subtract \"directly\" encoded region. */\n    uint32_t offset = forbidden_distance - ndirect - 1;\n    uint32_t ndistbits = 0;\n    uint32_t tmp;\n    uint32_t half;\n    uint32_t group;\n    /* Postfix for the last dcode in the group. */\n    uint32_t postfix = (1u << npostfix) - 1;\n    uint32_t extra;\n    uint32_t start;\n    /* Remove postfix and \"head-start\". */\n    offset = (offset >> npostfix) + 4;\n    /* Calculate the number of distance bits. */\n    tmp = offset / 2;\n    /* Poor-man's log2floor, to avoid extra dependencies. */\n    while (tmp != 0) {ndistbits++; tmp = tmp >> 1;}\n    /* One bit is covered with subrange addressing (\"half\"). */\n    ndistbits--;\n    /* Find subrange. */\n    half = (offset >> ndistbits) & 1;\n    /* Calculate the \"group\" part of dcode. */\n    group = ((ndistbits - 1) << 1) | half;\n    /* Calculated \"group\" covers the prohibited distance value. */\n    if (group == 0) {\n      /* This case is added for correctness; does not occur for limit > 128. */\n      result.max_alphabet_size = ndirect + BROTLI_NUM_DISTANCE_SHORT_CODES;\n      result.max_distance = ndirect;\n      return result;\n    }\n    /* Decrement \"group\", so it is the last permitted \"group\". */\n    group--;\n    /* After group was decremented, ndistbits and half must be recalculated. */\n    ndistbits = (group >> 1) + 1;\n    /* The last available distance in the subrange has all extra bits set. */\n    extra = (1u << ndistbits) - 1;\n    /* Calculate region start. NB: ndistbits >= 1. */\n    start = (1u << (ndistbits + 1)) - 4;\n    /* Move to subregion. */\n    start += (group & 1) << ndistbits;\n    /* Calculate the alphabet size. */\n    result.max_alphabet_size = ((group << npostfix) | postfix) + ndirect +\n        BROTLI_NUM_DISTANCE_SHORT_CODES + 1;\n    /* Calculate the maximal distance representable by alphabet. */\n    result.max_distance = ((start + extra) << npostfix) + postfix + ndirect + 1;\n    return result;\n  }\n}\n\n/* Represents the range of values belonging to a prefix code:\n   [offset, offset + 2^nbits) */\ntypedef struct {\n  uint16_t offset;\n  uint8_t nbits;\n} BrotliPrefixCodeRange;\n\n/* \"Soft-private\", it is exported, but not \"advertised\" as API. */\nBROTLI_COMMON_API extern const BROTLI_MODEL(\"small\")\nBrotliPrefixCodeRange _kBrotliPrefixCodeRanges[BROTLI_NUM_BLOCK_LEN_SYMBOLS];\n\n#endif  /* BROTLI_COMMON_CONSTANTS_H_ */\n"
  },
  {
    "path": "libs/brotli/common/context.c",
    "content": "#include \"context.h\"\n\n#include \"platform.h\"\n\n/* Common context lookup table for all context modes. */\nconst BROTLI_MODEL(\"small\") uint8_t _kBrotliContextLookupTable[2048] = {\n  /* CONTEXT_LSB6, last byte. */\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,\n  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n  32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n  48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n\n  /* CONTEXT_LSB6, second last byte, */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n\n  /* CONTEXT_MSB6, last byte. */\n   0,  0,  0,  0,  1,  1,  1,  1,  2,  2,  2,  2,  3,  3,  3,  3,\n   4,  4,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,\n   8,  8,  8,  8,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11, 11,\n  12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,\n  16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,\n  20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,\n  24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,\n  28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,\n  32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,\n  36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,\n  40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,\n  44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,\n  48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,\n  52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,\n  56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,\n  60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,\n\n  /* CONTEXT_MSB6, second last byte, */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n\n  /* CONTEXT_UTF8, last byte. */\n  /* ASCII range. */\n   0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  4,  0,  0,\n   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,\n   8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,\n  44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,\n  12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,\n  52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,\n  12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,\n  60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12,  0,\n  /* UTF8 continuation byte range. */\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n  /* UTF8 lead byte range. */\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n  2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n\n  /* CONTEXT_UTF8 second last byte. */\n  /* ASCII range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,\n  1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,\n  1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,\n  /* UTF8 continuation byte range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  /* UTF8 lead byte range. */\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n\n  /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */\n   0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n  48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,\n\n  /* CONTEXT_SIGNED, second last byte. */\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,\n};\n"
  },
  {
    "path": "libs/brotli/common/context.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Lookup table to map the previous two bytes to a context id.\n\n  There are four different context modeling modes defined here:\n    CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,\n    CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,\n    CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,\n    CONTEXT_SIGNED: second-order context model tuned for signed integers.\n\n  If |p1| and |p2| are the previous two bytes, and |mode| is current context\n  mode, we calculate the context as:\n\n    context = ContextLut(mode)[p1] | ContextLut(mode)[p2 + 256].\n\n  For CONTEXT_UTF8 mode, if the previous two bytes are ASCII characters\n  (i.e. < 128), this will be equivalent to\n\n    context = 4 * context1(p1) + context2(p2),\n\n  where context1 is based on the previous byte in the following way:\n\n    0  : non-ASCII control\n    1  : \\t, \\n, \\r\n    2  : space\n    3  : other punctuation\n    4  : \" '\n    5  : %\n    6  : ( < [ {\n    7  : ) > ] }\n    8  : , ; :\n    9  : .\n    10 : =\n    11 : number\n    12 : upper-case vowel\n    13 : upper-case consonant\n    14 : lower-case vowel\n    15 : lower-case consonant\n\n  and context2 is based on the second last byte:\n\n    0 : control, space\n    1 : punctuation\n    2 : upper-case letter, number\n    3 : lower-case letter\n\n  If the last byte is ASCII, and the second last byte is not (in a valid UTF8\n  stream it will be a continuation byte, value between 128 and 191), the\n  context is the same as if the second last byte was an ASCII control or space.\n\n  If the last byte is a UTF8 lead byte (value >= 192), then the next byte will\n  be a continuation byte and the context id is 2 or 3 depending on the LSB of\n  the last byte and to a lesser extent on the second last byte if it is ASCII.\n\n  If the last byte is a UTF8 continuation byte, the second last byte can be:\n    - continuation byte: the next byte is probably ASCII or lead byte (assuming\n      4-byte UTF8 characters are rare) and the context id is 0 or 1.\n    - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1\n    - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3\n\n  The possible value combinations of the previous two bytes, the range of\n  context ids and the type of the next byte is summarized in the table below:\n\n  |--------\\-----------------------------------------------------------------|\n  |         \\                         Last byte                              |\n  | Second   \\---------------------------------------------------------------|\n  | last byte \\    ASCII            |   cont. byte        |   lead byte      |\n  |            \\   (0-127)          |   (128-191)         |   (192-)         |\n  |=============|===================|=====================|==================|\n  |  ASCII      | next: ASCII/lead  |  not valid          |  next: cont.     |\n  |  (0-127)    | context: 4 - 63   |                     |  context: 2 - 3  |\n  |-------------|-------------------|---------------------|------------------|\n  |  cont. byte | next: ASCII/lead  |  next: ASCII/lead   |  next: cont.     |\n  |  (128-191)  | context: 4 - 63   |  context: 0 - 1     |  context: 2 - 3  |\n  |-------------|-------------------|---------------------|------------------|\n  |  lead byte  | not valid         |  next: ASCII/lead   |  not valid       |\n  |  (192-207)  |                   |  context: 0 - 1     |                  |\n  |-------------|-------------------|---------------------|------------------|\n  |  lead byte  | not valid         |  next: cont.        |  not valid       |\n  |  (208-)     |                   |  context: 2 - 3     |                  |\n  |-------------|-------------------|---------------------|------------------|\n*/\n\n#ifndef BROTLI_COMMON_CONTEXT_H_\n#define BROTLI_COMMON_CONTEXT_H_\n\n#include \"platform.h\"\n\ntypedef enum ContextType {\n  CONTEXT_LSB6 = 0,\n  CONTEXT_MSB6 = 1,\n  CONTEXT_UTF8 = 2,\n  CONTEXT_SIGNED = 3\n} ContextType;\n\n/* \"Soft-private\", it is exported, but not \"advertised\" as API. */\n/* Common context lookup table for all context modes. */\nBROTLI_COMMON_API extern const uint8_t _kBrotliContextLookupTable[2048];\n\ntypedef const uint8_t* ContextLut;\n\n/* typeof(MODE) == ContextType; returns ContextLut */\n#define BROTLI_CONTEXT_LUT(MODE) (&_kBrotliContextLookupTable[(MODE) << 9])\n\n/* typeof(LUT) == ContextLut */\n#define BROTLI_CONTEXT(P1, P2, LUT) ((LUT)[P1] | ((LUT) + 256)[P2])\n\n#endif  /* BROTLI_COMMON_CONTEXT_H_ */\n"
  },
  {
    "path": "libs/brotli/common/dictionary.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"dictionary.h\"\n#include \"platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if !defined(BROTLI_EXTERNAL_DICTIONARY_DATA)\n/* Embed kBrotliDictionaryData */\n#include \"dictionary_inc.h\"\nstatic const BROTLI_MODEL(\"small\") BrotliDictionary kBrotliDictionary = {\n#else\nstatic BROTLI_MODEL(\"small\") BrotliDictionary kBrotliDictionary = {\n#endif\n  /* size_bits_by_length */\n  {\n    0, 0, 0, 0, 10, 10, 11, 11,\n    10, 10, 10, 10, 10, 9, 9, 8,\n    7, 7, 8, 7, 7, 6, 6, 5,\n    5, 0, 0, 0, 0, 0, 0, 0\n  },\n\n  /* offsets_by_length */\n  {\n    0, 0, 0, 0, 0, 4096, 9216, 21504,\n    35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864,\n    104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280,\n    122016, 122784, 122784, 122784, 122784, 122784, 122784, 122784\n  },\n\n  /* data_size ==  sizeof(kBrotliDictionaryData) */\n  122784,\n\n  /* data */\n#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)\n  NULL\n#else\n  kBrotliDictionaryData\n#endif\n};\n\nconst BrotliDictionary* BrotliGetDictionary(void) {\n  return &kBrotliDictionary;\n}\n\nvoid BrotliSetDictionaryData(const uint8_t* data) {\n#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)\n  if (!!data && !kBrotliDictionary.data) {\n    kBrotliDictionary.data = data;\n  }\n#else\n  BROTLI_UNUSED(data);  // Appease -Werror=unused-parameter\n#endif\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/common/dictionary.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Collection of static dictionary words. */\n\n#ifndef BROTLI_COMMON_DICTIONARY_H_\n#define BROTLI_COMMON_DICTIONARY_H_\n\n#include \"platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct BrotliDictionary {\n  /**\n   * Number of bits to encode index of dictionary word in a bucket.\n   *\n   * Specification: Appendix A. Static Dictionary Data\n   *\n   * Words in a dictionary are bucketed by length.\n   * @c 0 means that there are no words of a given length.\n   * Dictionary consists of words with length of [4..24] bytes.\n   * Values at [0..3] and [25..31] indices should not be addressed.\n   */\n  uint8_t size_bits_by_length[32];\n\n  /* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */\n  uint32_t offsets_by_length[32];\n\n  /* assert(data_size == offsets_by_length[31]) */\n  size_t data_size;\n\n  /* Data array is not bound, and should obey to size_bits_by_length values.\n     Specified size matches default (RFC 7932) dictionary. Its size is\n     defined by data_size */\n  const uint8_t* data;\n} BrotliDictionary;\n\nBROTLI_COMMON_API const BrotliDictionary* BrotliGetDictionary(void);\n\n/**\n * Sets dictionary data.\n *\n * When dictionary data is already set / present, this method is no-op.\n *\n * Dictionary data MUST be provided before BrotliGetDictionary is invoked.\n * This method is used ONLY in multi-client environment (e.g. C + Java),\n * to reduce storage by sharing single dictionary between implementations.\n */\nBROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data);\n\n#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4\n#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_COMMON_DICTIONARY_H_ */\n"
  },
  {
    "path": "libs/brotli/common/dictionary_inc.h",
    "content": "static const BROTLI_MODEL(\"small\") uint8_t kBrotliDictionaryData[] = {\n116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,107,99,\n111,100,101,100,97,116,97,115,104,111,119,111,110,108,121,115,105,116,101,99,105\n,116,121,111,112,101,110,106,117,115,116,108,105,107,101,102,114,101,101,119,111\n,114,107,116,101,120,116,121,101,97,114,111,118,101,114,98,111,100,121,108,111,\n118,101,102,111,114,109,98,111,111,107,112,108,97,121,108,105,118,101,108,105,\n110,101,104,101,108,112,104,111,109,101,115,105,100,101,109,111,114,101,119,111,\n114,100,108,111,110,103,116,104,101,109,118,105,101,119,102,105,110,100,112,97,\n103,101,100,97,121,115,102,117,108,108,104,101,97,100,116,101,114,109,101,97,99,\n104,97,114,101,97,102,114,111,109,116,114,117,101,109,97,114,107,97,98,108,101,\n117,112,111,110,104,105,103,104,100,97,116,101,108,97,110,100,110,101,119,115,\n101,118,101,110,110,101,120,116,99,97,115,101,98,111,116,104,112,111,115,116,117\n,115,101,100,109,97,100,101,104,97,110,100,104,101,114,101,119,104,97,116,110,97\n,109,101,76,105,110,107,98,108,111,103,115,105,122,101,98,97,115,101,104,101,108\n,100,109,97,107,101,109,97,105,110,117,115,101,114,39,41,32,43,104,111,108,100,\n101,110,100,115,119,105,116,104,78,101,119,115,114,101,97,100,119,101,114,101,\n115,105,103,110,116,97,107,101,104,97,118,101,103,97,109,101,115,101,101,110,99,\n97,108,108,112,97,116,104,119,101,108,108,112,108,117,115,109,101,110,117,102,\n105,108,109,112,97,114,116,106,111,105,110,116,104,105,115,108,105,115,116,103,\n111,111,100,110,101,101,100,119,97,121,115,119,101,115,116,106,111,98,115,109,\n105,110,100,97,108,115,111,108,111,103,111,114,105,99,104,117,115,101,115,108,97\n,115,116,116,101,97,109,97,114,109,121,102,111,111,100,107,105,110,103,119,105,\n108,108,101,97,115,116,119,97,114,100,98,101,115,116,102,105,114,101,80,97,103,\n101,107,110,111,119,97,119,97,121,46,112,110,103,109,111,118,101,116,104,97,110,\n108,111,97,100,103,105,118,101,115,101,108,102,110,111,116,101,109,117,99,104,\n102,101,101,100,109,97,110,121,114,111,99,107,105,99,111,110,111,110,99,101,108,\n111,111,107,104,105,100,101,100,105,101,100,72,111,109,101,114,117,108,101,104,\n111,115,116,97,106,97,120,105,110,102,111,99,108,117,98,108,97,119,115,108,101,\n115,115,104,97,108,102,115,111,109,101,115,117,99,104,122,111,110,101,49,48,48,\n37,111,110,101,115,99,97,114,101,84,105,109,101,114,97,99,101,98,108,117,101,102\n,111,117,114,119,101,101,107,102,97,99,101,104,111,112,101,103,97,118,101,104,97\n,114,100,108,111,115,116,119,104,101,110,112,97,114,107,107,101,112,116,112,97,\n115,115,115,104,105,112,114,111,111,109,72,84,77,76,112,108,97,110,84,121,112,\n101,100,111,110,101,115,97,118,101,107,101,101,112,102,108,97,103,108,105,110,\n107,115,111,108,100,102,105,118,101,116,111,111,107,114,97,116,101,116,111,119,\n110,106,117,109,112,116,104,117,115,100,97,114,107,99,97,114,100,102,105,108,101\n,102,101,97,114,115,116,97,121,107,105,108,108,116,104,97,116,102,97,108,108,97,\n117,116,111,101,118,101,114,46,99,111,109,116,97,108,107,115,104,111,112,118,111\n,116,101,100,101,101,112,109,111,100,101,114,101,115,116,116,117,114,110,98,111,\n114,110,98,97,110,100,102,101,108,108,114,111,115,101,117,114,108,40,115,107,105\n,110,114,111,108,101,99,111,109,101,97,99,116,115,97,103,101,115,109,101,101,116\n,103,111,108,100,46,106,112,103,105,116,101,109,118,97,114,121,102,101,108,116,\n116,104,101,110,115,101,110,100,100,114,111,112,86,105,101,119,99,111,112,121,49\n,46,48,34,60,47,97,62,115,116,111,112,101,108,115,101,108,105,101,115,116,111,\n117,114,112,97,99,107,46,103,105,102,112,97,115,116,99,115,115,63,103,114,97,121\n,109,101,97,110,38,103,116,59,114,105,100,101,115,104,111,116,108,97,116,101,115\n,97,105,100,114,111,97,100,118,97,114,32,102,101,101,108,106,111,104,110,114,105\n,99,107,112,111,114,116,102,97,115,116,39,85,65,45,100,101,97,100,60,47,98,62,\n112,111,111,114,98,105,108,108,116,121,112,101,85,46,83,46,119,111,111,100,109,\n117,115,116,50,112,120,59,73,110,102,111,114,97,110,107,119,105,100,101,119,97,\n110,116,119,97,108,108,108,101,97,100,91,48,93,59,112,97,117,108,119,97,118,101,\n115,117,114,101,36,40,39,35,119,97,105,116,109,97,115,115,97,114,109,115,103,111\n,101,115,103,97,105,110,108,97,110,103,112,97,105,100,33,45,45,32,108,111,99,107\n,117,110,105,116,114,111,111,116,119,97,108,107,102,105,114,109,119,105,102,101,\n120,109,108,34,115,111,110,103,116,101,115,116,50,48,112,120,107,105,110,100,114\n,111,119,115,116,111,111,108,102,111,110,116,109,97,105,108,115,97,102,101,115,\n116,97,114,109,97,112,115,99,111,114,101,114,97,105,110,102,108,111,119,98,97,98\n,121,115,112,97,110,115,97,121,115,52,112,120,59,54,112,120,59,97,114,116,115,\n102,111,111,116,114,101,97,108,119,105,107,105,104,101,97,116,115,116,101,112,\n116,114,105,112,111,114,103,47,108,97,107,101,119,101,97,107,116,111,108,100,70,\n111,114,109,99,97,115,116,102,97,110,115,98,97,110,107,118,101,114,121,114,117,\n110,115,106,117,108,121,116,97,115,107,49,112,120,59,103,111,97,108,103,114,101,\n119,115,108,111,119,101,100,103,101,105,100,61,34,115,101,116,115,53,112,120,59,\n46,106,115,63,52,48,112,120,105,102,32,40,115,111,111,110,115,101,97,116,110,111\n,110,101,116,117,98,101,122,101,114,111,115,101,110,116,114,101,101,100,102,97,\n99,116,105,110,116,111,103,105,102,116,104,97,114,109,49,56,112,120,99,97,109,\n101,104,105,108,108,98,111,108,100,122,111,111,109,118,111,105,100,101,97,115,\n121,114,105,110,103,102,105,108,108,112,101,97,107,105,110,105,116,99,111,115,\n116,51,112,120,59,106,97,99,107,116,97,103,115,98,105,116,115,114,111,108,108,\n101,100,105,116,107,110,101,119,110,101,97,114,60,33,45,45,103,114,111,119,74,83\n,79,78,100,117,116,121,78,97,109,101,115,97,108,101,121,111,117,32,108,111,116,\n115,112,97,105,110,106,97,122,122,99,111,108,100,101,121,101,115,102,105,115,104\n,119,119,119,46,114,105,115,107,116,97,98,115,112,114,101,118,49,48,112,120,114,\n105,115,101,50,53,112,120,66,108,117,101,100,105,110,103,51,48,48,44,98,97,108,\n108,102,111,114,100,101,97,114,110,119,105,108,100,98,111,120,46,102,97,105,114,\n108,97,99,107,118,101,114,115,112,97,105,114,106,117,110,101,116,101,99,104,105,\n102,40,33,112,105,99,107,101,118,105,108,36,40,34,35,119,97,114,109,108,111,114,\n100,100,111,101,115,112,117,108,108,44,48,48,48,105,100,101,97,100,114,97,119,\n104,117,103,101,115,112,111,116,102,117,110,100,98,117,114,110,104,114,101,102,\n99,101,108,108,107,101,121,115,116,105,99,107,104,111,117,114,108,111,115,115,\n102,117,101,108,49,50,112,120,115,117,105,116,100,101,97,108,82,83,83,34,97,103,\n101,100,103,114,101,121,71,69,84,34,101,97,115,101,97,105,109,115,103,105,114,\n108,97,105,100,115,56,112,120,59,110,97,118,121,103,114,105,100,116,105,112,115,\n35,57,57,57,119,97,114,115,108,97,100,121,99,97,114,115,41,59,32,125,112,104,112\n,63,104,101,108,108,116,97,108,108,119,104,111,109,122,104,58,229,42,47,13,10,32\n,49,48,48,104,97,108,108,46,10,10,65,55,112,120,59,112,117,115,104,99,104,97,116\n,48,112,120,59,99,114,101,119,42,47,60,47,104,97,115,104,55,53,112,120,102,108,\n97,116,114,97,114,101,32,38,38,32,116,101,108,108,99,97,109,112,111,110,116,111,\n108,97,105,100,109,105,115,115,115,107,105,112,116,101,110,116,102,105,110,101,\n109,97,108,101,103,101,116,115,112,108,111,116,52,48,48,44,13,10,13,10,99,111,\n111,108,102,101,101,116,46,112,104,112,60,98,114,62,101,114,105,99,109,111,115,\n116,103,117,105,100,98,101,108,108,100,101,115,99,104,97,105,114,109,97,116,104,\n97,116,111,109,47,105,109,103,38,35,56,50,108,117,99,107,99,101,110,116,48,48,48\n,59,116,105,110,121,103,111,110,101,104,116,109,108,115,101,108,108,100,114,117,\n103,70,82,69,69,110,111,100,101,110,105,99,107,63,105,100,61,108,111,115,101,110\n,117,108,108,118,97,115,116,119,105,110,100,82,83,83,32,119,101,97,114,114,101,\n108,121,98,101,101,110,115,97,109,101,100,117,107,101,110,97,115,97,99,97,112,\n101,119,105,115,104,103,117,108,102,84,50,51,58,104,105,116,115,115,108,111,116,\n103,97,116,101,107,105,99,107,98,108,117,114,116,104,101,121,49,53,112,120,39,39\n,41,59,41,59,34,62,109,115,105,101,119,105,110,115,98,105,114,100,115,111,114,\n116,98,101,116,97,115,101,101,107,84,49,56,58,111,114,100,115,116,114,101,101,\n109,97,108,108,54,48,112,120,102,97,114,109,226,128,153,115,98,111,121,115,91,48\n,93,46,39,41,59,34,80,79,83,84,98,101,97,114,107,105,100,115,41,59,125,125,109,\n97,114,121,116,101,110,100,40,85,75,41,113,117,97,100,122,104,58,230,45,115,105,\n122,45,45,45,45,112,114,111,112,39,41,59,13,108,105,102,116,84,49,57,58,118,105,\n99,101,97,110,100,121,100,101,98,116,62,82,83,83,112,111,111,108,110,101,99,107,\n98,108,111,119,84,49,54,58,100,111,111,114,101,118,97,108,84,49,55,58,108,101,\n116,115,102,97,105,108,111,114,97,108,112,111,108,108,110,111,118,97,99,111,108,\n115,103,101,110,101,32,226,128,148,115,111,102,116,114,111,109,101,116,105,108,\n108,114,111,115,115,60,104,51,62,112,111,117,114,102,97,100,101,112,105,110,107,\n60,116,114,62,109,105,110,105,41,124,33,40,109,105,110,101,122,104,58,232,98,97,\n114,115,104,101,97,114,48,48,41,59,109,105,108,107,32,45,45,62,105,114,111,110,\n102,114,101,100,100,105,115,107,119,101,110,116,115,111,105,108,112,117,116,115,\n47,106,115,47,104,111,108,121,84,50,50,58,73,83,66,78,84,50,48,58,97,100,97,109,\n115,101,101,115,60,104,50,62,106,115,111,110,39,44,32,39,99,111,110,116,84,50,49\n,58,32,82,83,83,108,111,111,112,97,115,105,97,109,111,111,110,60,47,112,62,115,\n111,117,108,76,73,78,69,102,111,114,116,99,97,114,116,84,49,52,58,60,104,49,62,\n56,48,112,120,33,45,45,60,57,112,120,59,84,48,52,58,109,105,107,101,58,52,54,90,\n110,105,99,101,105,110,99,104,89,111,114,107,114,105,99,101,122,104,58,228,39,41\n,41,59,112,117,114,101,109,97,103,101,112,97,114,97,116,111,110,101,98,111,110,\n100,58,51,55,90,95,111,102,95,39,93,41,59,48,48,48,44,122,104,58,231,116,97,110,\n107,121,97,114,100,98,111,119,108,98,117,115,104,58,53,54,90,74,97,118,97,51,48,\n112,120,10,124,125,10,37,67,51,37,58,51,52,90,106,101,102,102,69,88,80,73,99,97,\n115,104,118,105,115,97,103,111,108,102,115,110,111,119,122,104,58,233,113,117,\n101,114,46,99,115,115,115,105,99,107,109,101,97,116,109,105,110,46,98,105,110,\n100,100,101,108,108,104,105,114,101,112,105,99,115,114,101,110,116,58,51,54,90,\n72,84,84,80,45,50,48,49,102,111,116,111,119,111,108,102,69,78,68,32,120,98,111,\n120,58,53,52,90,66,79,68,89,100,105,99,107,59,10,125,10,101,120,105,116,58,51,53\n,90,118,97,114,115,98,101,97,116,39,125,41,59,100,105,101,116,57,57,57,59,97,110\n,110,101,125,125,60,47,91,105,93,46,76,97,110,103,107,109,194,178,119,105,114,\n101,116,111,121,115,97,100,100,115,115,101,97,108,97,108,101,120,59,10,9,125,101\n,99,104,111,110,105,110,101,46,111,114,103,48,48,53,41,116,111,110,121,106,101,\n119,115,115,97,110,100,108,101,103,115,114,111,111,102,48,48,48,41,32,50,48,48,\n119,105,110,101,103,101,97,114,100,111,103,115,98,111,111,116,103,97,114,121,99,\n117,116,115,116,121,108,101,116,101,109,112,116,105,111,110,46,120,109,108,99,\n111,99,107,103,97,110,103,36,40,39,46,53,48,112,120,80,104,46,68,109,105,115,99,\n97,108,97,110,108,111,97,110,100,101,115,107,109,105,108,101,114,121,97,110,117,\n110,105,120,100,105,115,99,41,59,125,10,100,117,115,116,99,108,105,112,41,46,10,\n10,55,48,112,120,45,50,48,48,68,86,68,115,55,93,62,60,116,97,112,101,100,101,109\n,111,105,43,43,41,119,97,103,101,101,117,114,111,112,104,105,108,111,112,116,115\n,104,111,108,101,70,65,81,115,97,115,105,110,45,50,54,84,108,97,98,115,112,101,\n116,115,85,82,76,32,98,117,108,107,99,111,111,107,59,125,13,10,72,69,65,68,91,48\n,93,41,97,98,98,114,106,117,97,110,40,49,57,56,108,101,115,104,116,119,105,110,\n60,47,105,62,115,111,110,121,103,117,121,115,102,117,99,107,112,105,112,101,124,\n45,10,33,48,48,50,41,110,100,111,119,91,49,93,59,91,93,59,10,76,111,103,32,115,\n97,108,116,13,10,9,9,98,97,110,103,116,114,105,109,98,97,116,104,41,123,13,10,48\n,48,112,120,10,125,41,59,107,111,58,236,102,101,101,115,97,100,62,13,115,58,47,\n47,32,91,93,59,116,111,108,108,112,108,117,103,40,41,123,10,123,13,10,32,46,106,\n115,39,50,48,48,112,100,117,97,108,98,111,97,116,46,74,80,71,41,59,10,125,113,\n117,111,116,41,59,10,10,39,41,59,10,13,10,125,13,50,48,49,52,50,48,49,53,50,48,\n49,54,50,48,49,55,50,48,49,56,50,48,49,57,50,48,50,48,50,48,50,49,50,48,50,50,50\n,48,50,51,50,48,50,52,50,48,50,53,50,48,50,54,50,48,50,55,50,48,50,56,50,48,50,\n57,50,48,51,48,50,48,51,49,50,48,51,50,50,48,51,51,50,48,51,52,50,48,51,53,50,48\n,51,54,50,48,51,55,50,48,49,51,50,48,49,50,50,48,49,49,50,48,49,48,50,48,48,57,\n50,48,48,56,50,48,48,55,50,48,48,54,50,48,48,53,50,48,48,52,50,48,48,51,50,48,48\n,50,50,48,48,49,50,48,48,48,49,57,57,57,49,57,57,56,49,57,57,55,49,57,57,54,49,\n57,57,53,49,57,57,52,49,57,57,51,49,57,57,50,49,57,57,49,49,57,57,48,49,57,56,57\n,49,57,56,56,49,57,56,55,49,57,56,54,49,57,56,53,49,57,56,52,49,57,56,51,49,57,\n56,50,49,57,56,49,49,57,56,48,49,57,55,57,49,57,55,56,49,57,55,55,49,57,55,54,49\n,57,55,53,49,57,55,52,49,57,55,51,49,57,55,50,49,57,55,49,49,57,55,48,49,57,54,\n57,49,57,54,56,49,57,54,55,49,57,54,54,49,57,54,53,49,57,54,52,49,57,54,51,49,57\n,54,50,49,57,54,49,49,57,54,48,49,57,53,57,49,57,53,56,49,57,53,55,49,57,53,54,\n49,57,53,53,49,57,53,52,49,57,53,51,49,57,53,50,49,57,53,49,49,57,53,48,49,48,48\n,48,49,48,50,52,49,51,57,52,48,48,48,48,57,57,57,57,99,111,109,111,109,195,161,\n115,101,115,116,101,101,115,116,97,112,101,114,111,116,111,100,111,104,97,99,101\n,99,97,100,97,97,195,177,111,98,105,101,110,100,195,173,97,97,115,195,173,118,\n105,100,97,99,97,115,111,111,116,114,111,102,111,114,111,115,111,108,111,111,116\n,114,97,99,117,97,108,100,105,106,111,115,105,100,111,103,114,97,110,116,105,112\n,111,116,101,109,97,100,101,98,101,97,108,103,111,113,117,195,169,101,115,116,\n111,110,97,100,97,116,114,101,115,112,111,99,111,99,97,115,97,98,97,106,111,116,\n111,100,97,115,105,110,111,97,103,117,97,112,117,101,115,117,110,111,115,97,110,\n116,101,100,105,99,101,108,117,105,115,101,108,108,97,109,97,121,111,122,111,110\n,97,97,109,111,114,112,105,115,111,111,98,114,97,99,108,105,99,101,108,108,111,\n100,105,111,115,104,111,114,97,99,97,115,105,208,183,208,176,208,189,208,176,208\n,190,208,188,209,128,208,176,209,128,209,131,209,130,208,176,208,189,208,181,208\n,191,208,190,208,190,209,130,208,184,208,183,208,189,208,190,208,180,208,190,209\n,130,208,190,208,182,208,181,208,190,208,189,208,184,209,133,208,157,208,176,208\n,181,208,181,208,177,209,139,208,188,209,139,208,146,209,139,209,129,208,190,208\n,178,209,139,208,178,208,190,208,157,208,190,208,190,208,177,208,159,208,190,208\n,187,208,184,208,189,208,184,208,160,208,164,208,157,208,181,208,156,209,139,209\n,130,209,139,208,158,208,189,208,184,208,188,208,180,208,176,208,151,208,176,208\n,148,208,176,208,157,209,131,208,158,208,177,209,130,208,181,208,152,208,183,208\n,181,208,185,208,189,209,131,208,188,208,188,208,162,209,139,209,131,208,182,217\n,129,217,138,216,163,217,134,217,133,216,167,217,133,216,185,217,131,217,132,216\n,163,217,136,216,177,216,175,217,138,216,167,217,129,217,137,217,135,217,136,217\n,132,217,133,217,132,217,131,216,167,217,136,217,132,217,135,216,168,216,179,216\n,167,217,132,216,165,217,134,217,135,217,138,216,163,217,138,217,130,216,175,217\n,135,217,132,216,171,217,133,216,168,217,135,217,132,217,136,217,132,217,138,216\n,168,217,132,216,167,217,138,216,168,217,131,216,180,217,138,216,167,217,133,216\n,163,217,133,217,134,216,170,216,168,217,138,217,132,217,134,216,173,216,168,217\n,135,217,133,217,133,216,180,217,136,216,180,102,105,114,115,116,118,105,100,101\n,111,108,105,103,104,116,119,111,114,108,100,109,101,100,105,97,119,104,105,116,\n101,99,108,111,115,101,98,108,97,99,107,114,105,103,104,116,115,109,97,108,108,\n98,111,111,107,115,112,108,97,99,101,109,117,115,105,99,102,105,101,108,100,111,\n114,100,101,114,112,111,105,110,116,118,97,108,117,101,108,101,118,101,108,116,\n97,98,108,101,98,111,97,114,100,104,111,117,115,101,103,114,111,117,112,119,111,\n114,107,115,121,101,97,114,115,115,116,97,116,101,116,111,100,97,121,119,97,116,\n101,114,115,116,97,114,116,115,116,121,108,101,100,101,97,116,104,112,111,119,\n101,114,112,104,111,110,101,110,105,103,104,116,101,114,114,111,114,105,110,112,\n117,116,97,98,111,117,116,116,101,114,109,115,116,105,116,108,101,116,111,111,\n108,115,101,118,101,110,116,108,111,99,97,108,116,105,109,101,115,108,97,114,103\n,101,119,111,114,100,115,103,97,109,101,115,115,104,111,114,116,115,112,97,99,\n101,102,111,99,117,115,99,108,101,97,114,109,111,100,101,108,98,108,111,99,107,\n103,117,105,100,101,114,97,100,105,111,115,104,97,114,101,119,111,109,101,110,97\n,103,97,105,110,109,111,110,101,121,105,109,97,103,101,110,97,109,101,115,121,\n111,117,110,103,108,105,110,101,115,108,97,116,101,114,99,111,108,111,114,103,\n114,101,101,110,102,114,111,110,116,38,97,109,112,59,119,97,116,99,104,102,111,\n114,99,101,112,114,105,99,101,114,117,108,101,115,98,101,103,105,110,97,102,116,\n101,114,118,105,115,105,116,105,115,115,117,101,97,114,101,97,115,98,101,108,111\n,119,105,110,100,101,120,116,111,116,97,108,104,111,117,114,115,108,97,98,101,\n108,112,114,105,110,116,112,114,101,115,115,98,117,105,108,116,108,105,110,107,\n115,115,112,101,101,100,115,116,117,100,121,116,114,97,100,101,102,111,117,110,\n100,115,101,110,115,101,117,110,100,101,114,115,104,111,119,110,102,111,114,109,\n115,114,97,110,103,101,97,100,100,101,100,115,116,105,108,108,109,111,118,101,\n100,116,97,107,101,110,97,98,111,118,101,102,108,97,115,104,102,105,120,101,100,\n111,102,116,101,110,111,116,104,101,114,118,105,101,119,115,99,104,101,99,107,\n108,101,103,97,108,114,105,118,101,114,105,116,101,109,115,113,117,105,99,107,\n115,104,97,112,101,104,117,109,97,110,101,120,105,115,116,103,111,105,110,103,\n109,111,118,105,101,116,104,105,114,100,98,97,115,105,99,112,101,97,99,101,115,\n116,97,103,101,119,105,100,116,104,108,111,103,105,110,105,100,101,97,115,119,\n114,111,116,101,112,97,103,101,115,117,115,101,114,115,100,114,105,118,101,115,\n116,111,114,101,98,114,101,97,107,115,111,117,116,104,118,111,105,99,101,115,105\n,116,101,115,109,111,110,116,104,119,104,101,114,101,98,117,105,108,100,119,104,\n105,99,104,101,97,114,116,104,102,111,114,117,109,116,104,114,101,101,115,112,\n111,114,116,112,97,114,116,121,67,108,105,99,107,108,111,119,101,114,108,105,118\n,101,115,99,108,97,115,115,108,97,121,101,114,101,110,116,114,121,115,116,111,\n114,121,117,115,97,103,101,115,111,117,110,100,99,111,117,114,116,121,111,117,\n114,32,98,105,114,116,104,112,111,112,117,112,116,121,112,101,115,97,112,112,108\n,121,73,109,97,103,101,98,101,105,110,103,117,112,112,101,114,110,111,116,101,\n115,101,118,101,114,121,115,104,111,119,115,109,101,97,110,115,101,120,116,114,\n97,109,97,116,99,104,116,114,97,99,107,107,110,111,119,110,101,97,114,108,121,98\n,101,103,97,110,115,117,112,101,114,112,97,112,101,114,110,111,114,116,104,108,\n101,97,114,110,103,105,118,101,110,110,97,109,101,100,101,110,100,101,100,84,101\n,114,109,115,112,97,114,116,115,71,114,111,117,112,98,114,97,110,100,117,115,105\n,110,103,119,111,109,97,110,102,97,108,115,101,114,101,97,100,121,97,117,100,105\n,111,116,97,107,101,115,119,104,105,108,101,46,99,111,109,47,108,105,118,101,100\n,99,97,115,101,115,100,97,105,108,121,99,104,105,108,100,103,114,101,97,116,106,\n117,100,103,101,116,104,111,115,101,117,110,105,116,115,110,101,118,101,114,98,\n114,111,97,100,99,111,97,115,116,99,111,118,101,114,97,112,112,108,101,102,105,\n108,101,115,99,121,99,108,101,115,99,101,110,101,112,108,97,110,115,99,108,105,\n99,107,119,114,105,116,101,113,117,101,101,110,112,105,101,99,101,101,109,97,105\n,108,102,114,97,109,101,111,108,100,101,114,112,104,111,116,111,108,105,109,105,\n116,99,97,99,104,101,99,105,118,105,108,115,99,97,108,101,101,110,116,101,114,\n116,104,101,109,101,116,104,101,114,101,116,111,117,99,104,98,111,117,110,100,\n114,111,121,97,108,97,115,107,101,100,119,104,111,108,101,115,105,110,99,101,115\n,116,111,99,107,32,110,97,109,101,102,97,105,116,104,104,101,97,114,116,101,109,\n112,116,121,111,102,102,101,114,115,99,111,112,101,111,119,110,101,100,109,105,\n103,104,116,97,108,98,117,109,116,104,105,110,107,98,108,111,111,100,97,114,114,\n97,121,109,97,106,111,114,116,114,117,115,116,99,97,110,111,110,117,110,105,111,\n110,99,111,117,110,116,118,97,108,105,100,115,116,111,110,101,83,116,121,108,101\n,76,111,103,105,110,104,97,112,112,121,111,99,99,117,114,108,101,102,116,58,102,\n114,101,115,104,113,117,105,116,101,102,105,108,109,115,103,114,97,100,101,110,\n101,101,100,115,117,114,98,97,110,102,105,103,104,116,98,97,115,105,115,104,111,\n118,101,114,97,117,116,111,59,114,111,117,116,101,46,104,116,109,108,109,105,120\n,101,100,102,105,110,97,108,89,111,117,114,32,115,108,105,100,101,116,111,112,\n105,99,98,114,111,119,110,97,108,111,110,101,100,114,97,119,110,115,112,108,105,\n116,114,101,97,99,104,82,105,103,104,116,100,97,116,101,115,109,97,114,99,104,\n113,117,111,116,101,103,111,111,100,115,76,105,110,107,115,100,111,117,98,116,97\n,115,121,110,99,116,104,117,109,98,97,108,108,111,119,99,104,105,101,102,121,111\n,117,116,104,110,111,118,101,108,49,48,112,120,59,115,101,114,118,101,117,110,\n116,105,108,104,97,110,100,115,67,104,101,99,107,83,112,97,99,101,113,117,101,\n114,121,106,97,109,101,115,101,113,117,97,108,116,119,105,99,101,48,44,48,48,48,\n83,116,97,114,116,112,97,110,101,108,115,111,110,103,115,114,111,117,110,100,101\n,105,103,104,116,115,104,105,102,116,119,111,114,116,104,112,111,115,116,115,108\n,101,97,100,115,119,101,101,107,115,97,118,111,105,100,116,104,101,115,101,109,\n105,108,101,115,112,108,97,110,101,115,109,97,114,116,97,108,112,104,97,112,108,\n97,110,116,109,97,114,107,115,114,97,116,101,115,112,108,97,121,115,99,108,97,\n105,109,115,97,108,101,115,116,101,120,116,115,115,116,97,114,115,119,114,111,\n110,103,60,47,104,51,62,116,104,105,110,103,46,111,114,103,47,109,117,108,116,\n105,104,101,97,114,100,80,111,119,101,114,115,116,97,110,100,116,111,107,101,110\n,115,111,108,105,100,40,116,104,105,115,98,114,105,110,103,115,104,105,112,115,\n115,116,97,102,102,116,114,105,101,100,99,97,108,108,115,102,117,108,108,121,102\n,97,99,116,115,97,103,101,110,116,84,104,105,115,32,47,47,45,45,62,97,100,109,\n105,110,101,103,121,112,116,69,118,101,110,116,49,53,112,120,59,69,109,97,105,\n108,116,114,117,101,34,99,114,111,115,115,115,112,101,110,116,98,108,111,103,115\n,98,111,120,34,62,110,111,116,101,100,108,101,97,118,101,99,104,105,110,97,115,\n105,122,101,115,103,117,101,115,116,60,47,104,52,62,114,111,98,111,116,104,101,\n97,118,121,116,114,117,101,44,115,101,118,101,110,103,114,97,110,100,99,114,105,\n109,101,115,105,103,110,115,97,119,97,114,101,100,97,110,99,101,112,104,97,115,\n101,62,60,33,45,45,101,110,95,85,83,38,35,51,57,59,50,48,48,112,120,95,110,97,\n109,101,108,97,116,105,110,101,110,106,111,121,97,106,97,120,46,97,116,105,111,\n110,115,109,105,116,104,85,46,83,46,32,104,111,108,100,115,112,101,116,101,114,\n105,110,100,105,97,110,97,118,34,62,99,104,97,105,110,115,99,111,114,101,99,111,\n109,101,115,100,111,105,110,103,112,114,105,111,114,83,104,97,114,101,49,57,57,\n48,115,114,111,109,97,110,108,105,115,116,115,106,97,112,97,110,102,97,108,108,\n115,116,114,105,97,108,111,119,110,101,114,97,103,114,101,101,60,47,104,50,62,97\n,98,117,115,101,97,108,101,114,116,111,112,101,114,97,34,45,47,47,87,99,97,114,\n100,115,104,105,108,108,115,116,101,97,109,115,80,104,111,116,111,116,114,117,\n116,104,99,108,101,97,110,46,112,104,112,63,115,97,105,110,116,109,101,116,97,\n108,108,111,117,105,115,109,101,97,110,116,112,114,111,111,102,98,114,105,101,\n102,114,111,119,34,62,103,101,110,114,101,116,114,117,99,107,108,111,111,107,115\n,86,97,108,117,101,70,114,97,109,101,46,110,101,116,47,45,45,62,10,60,116,114,\n121,32,123,10,118,97,114,32,109,97,107,101,115,99,111,115,116,115,112,108,97,105\n,110,97,100,117,108,116,113,117,101,115,116,116,114,97,105,110,108,97,98,111,114\n,104,101,108,112,115,99,97,117,115,101,109,97,103,105,99,109,111,116,111,114,116\n,104,101,105,114,50,53,48,112,120,108,101,97,115,116,115,116,101,112,115,67,111,\n117,110,116,99,111,117,108,100,103,108,97,115,115,115,105,100,101,115,102,117,\n110,100,115,104,111,116,101,108,97,119,97,114,100,109,111,117,116,104,109,111,\n118,101,115,112,97,114,105,115,103,105,118,101,115,100,117,116,99,104,116,101,\n120,97,115,102,114,117,105,116,110,117,108,108,44,124,124,91,93,59,116,111,112,\n34,62,10,60,33,45,45,80,79,83,84,34,111,99,101,97,110,60,98,114,47,62,102,108,\n111,111,114,115,112,101,97,107,100,101,112,116,104,32,115,105,122,101,98,97,110,\n107,115,99,97,116,99,104,99,104,97,114,116,50,48,112,120,59,97,108,105,103,110,\n100,101,97,108,115,119,111,117,108,100,53,48,112,120,59,117,114,108,61,34,112,97\n,114,107,115,109,111,117,115,101,77,111,115,116,32,46,46,46,60,47,97,109,111,110\n,103,98,114,97,105,110,98,111,100,121,32,110,111,110,101,59,98,97,115,101,100,99\n,97,114,114,121,100,114,97,102,116,114,101,102,101,114,112,97,103,101,95,104,111\n,109,101,46,109,101,116,101,114,100,101,108,97,121,100,114,101,97,109,112,114,\n111,118,101,106,111,105,110,116,60,47,116,114,62,100,114,117,103,115,60,33,45,45\n,32,97,112,114,105,108,105,100,101,97,108,97,108,108,101,110,101,120,97,99,116,\n102,111,114,116,104,99,111,100,101,115,108,111,103,105,99,86,105,101,119,32,115,\n101,101,109,115,98,108,97,110,107,112,111,114,116,115,32,40,50,48,48,115,97,118,\n101,100,95,108,105,110,107,103,111,97,108,115,103,114,97,110,116,103,114,101,101\n,107,104,111,109,101,115,114,105,110,103,115,114,97,116,101,100,51,48,112,120,59\n,119,104,111,115,101,112,97,114,115,101,40,41,59,34,32,66,108,111,99,107,108,105\n,110,117,120,106,111,110,101,115,112,105,120,101,108,39,41,59,34,62,41,59,105,\n102,40,45,108,101,102,116,100,97,118,105,100,104,111,114,115,101,70,111,99,117,\n115,114,97,105,115,101,98,111,120,101,115,84,114,97,99,107,101,109,101,110,116,\n60,47,101,109,62,98,97,114,34,62,46,115,114,99,61,116,111,119,101,114,97,108,116\n,61,34,99,97,98,108,101,104,101,110,114,121,50,52,112,120,59,115,101,116,117,112\n,105,116,97,108,121,115,104,97,114,112,109,105,110,111,114,116,97,115,116,101,\n119,97,110,116,115,116,104,105,115,46,114,101,115,101,116,119,104,101,101,108,\n103,105,114,108,115,47,99,115,115,47,49,48,48,37,59,99,108,117,98,115,115,116,\n117,102,102,98,105,98,108,101,118,111,116,101,115,32,49,48,48,48,107,111,114,101\n,97,125,41,59,13,10,98,97,110,100,115,113,117,101,117,101,61,32,123,125,59,56,48\n,112,120,59,99,107,105,110,103,123,13,10,9,9,97,104,101,97,100,99,108,111,99,107\n,105,114,105,115,104,108,105,107,101,32,114,97,116,105,111,115,116,97,116,115,70\n,111,114,109,34,121,97,104,111,111,41,91,48,93,59,65,98,111,117,116,102,105,110,\n100,115,60,47,104,49,62,100,101,98,117,103,116,97,115,107,115,85,82,76,32,61,99,\n101,108,108,115,125,41,40,41,59,49,50,112,120,59,112,114,105,109,101,116,101,108\n,108,115,116,117,114,110,115,48,120,54,48,48,46,106,112,103,34,115,112,97,105,\n110,98,101,97,99,104,116,97,120,101,115,109,105,99,114,111,97,110,103,101,108,45\n,45,62,60,47,103,105,102,116,115,115,116,101,118,101,45,108,105,110,107,98,111,\n100,121,46,125,41,59,10,9,109,111,117,110,116,32,40,49,57,57,70,65,81,60,47,114,\n111,103,101,114,102,114,97,110,107,67,108,97,115,115,50,56,112,120,59,102,101,\n101,100,115,60,104,49,62,60,115,99,111,116,116,116,101,115,116,115,50,50,112,120\n,59,100,114,105,110,107,41,32,124,124,32,108,101,119,105,115,115,104,97,108,108,\n35,48,51,57,59,32,102,111,114,32,108,111,118,101,100,119,97,115,116,101,48,48,\n112,120,59,106,97,58,227,130,115,105,109,111,110,60,102,111,110,116,114,101,112,\n108,121,109,101,101,116,115,117,110,116,101,114,99,104,101,97,112,116,105,103,\n104,116,66,114,97,110,100,41,32,33,61,32,100,114,101,115,115,99,108,105,112,115,\n114,111,111,109,115,111,110,107,101,121,109,111,98,105,108,109,97,105,110,46,78,\n97,109,101,32,112,108,97,116,101,102,117,110,110,121,116,114,101,101,115,99,111,\n109,47,34,49,46,106,112,103,119,109,111,100,101,112,97,114,97,109,83,84,65,82,84\n,108,101,102,116,32,105,100,100,101,110,44,32,50,48,49,41,59,10,125,10,102,111,\n114,109,46,118,105,114,117,115,99,104,97,105,114,116,114,97,110,115,119,111,114,\n115,116,80,97,103,101,115,105,116,105,111,110,112,97,116,99,104,60,33,45,45,10,\n111,45,99,97,99,102,105,114,109,115,116,111,117,114,115,44,48,48,48,32,97,115,\n105,97,110,105,43,43,41,123,97,100,111,98,101,39,41,91,48,93,105,100,61,49,48,98\n,111,116,104,59,109,101,110,117,32,46,50,46,109,105,46,112,110,103,34,107,101,\n118,105,110,99,111,97,99,104,67,104,105,108,100,98,114,117,99,101,50,46,106,112,\n103,85,82,76,41,43,46,106,112,103,124,115,117,105,116,101,115,108,105,99,101,104\n,97,114,114,121,49,50,48,34,32,115,119,101,101,116,116,114,62,13,10,110,97,109,\n101,61,100,105,101,103,111,112,97,103,101,32,115,119,105,115,115,45,45,62,10,10,\n35,102,102,102,59,34,62,76,111,103,46,99,111,109,34,116,114,101,97,116,115,104,\n101,101,116,41,32,38,38,32,49,52,112,120,59,115,108,101,101,112,110,116,101,110,\n116,102,105,108,101,100,106,97,58,227,131,105,100,61,34,99,78,97,109,101,34,119,\n111,114,115,101,115,104,111,116,115,45,98,111,120,45,100,101,108,116,97,10,38,\n108,116,59,98,101,97,114,115,58,52,56,90,60,100,97,116,97,45,114,117,114,97,108,\n60,47,97,62,32,115,112,101,110,100,98,97,107,101,114,115,104,111,112,115,61,32,\n34,34,59,112,104,112,34,62,99,116,105,111,110,49,51,112,120,59,98,114,105,97,110\n,104,101,108,108,111,115,105,122,101,61,111,61,37,50,70,32,106,111,105,110,109,\n97,121,98,101,60,105,109,103,32,105,109,103,34,62,44,32,102,106,115,105,109,103,\n34,32,34,41,91,48,93,77,84,111,112,66,84,121,112,101,34,110,101,119,108,121,68,\n97,110,115,107,99,122,101,99,104,116,114,97,105,108,107,110,111,119,115,60,47,\n104,53,62,102,97,113,34,62,122,104,45,99,110,49,48,41,59,10,45,49,34,41,59,116,\n121,112,101,61,98,108,117,101,115,116,114,117,108,121,100,97,118,105,115,46,106,\n115,39,59,62,13,10,60,33,115,116,101,101,108,32,121,111,117,32,104,50,62,13,10,\n102,111,114,109,32,106,101,115,117,115,49,48,48,37,32,109,101,110,117,46,13,10,9\n,13,10,119,97,108,101,115,114,105,115,107,115,117,109,101,110,116,100,100,105,\n110,103,98,45,108,105,107,116,101,97,99,104,103,105,102,34,32,118,101,103,97,115\n,100,97,110,115,107,101,101,115,116,105,115,104,113,105,112,115,117,111,109,105,\n115,111,98,114,101,100,101,115,100,101,101,110,116,114,101,116,111,100,111,115,\n112,117,101,100,101,97,195,177,111,115,101,115,116,195,161,116,105,101,110,101,\n104,97,115,116,97,111,116,114,111,115,112,97,114,116,101,100,111,110,100,101,110\n,117,101,118,111,104,97,99,101,114,102,111,114,109,97,109,105,115,109,111,109,\n101,106,111,114,109,117,110,100,111,97,113,117,195,173,100,195,173,97,115,115,\n195,179,108,111,97,121,117,100,97,102,101,99,104,97,116,111,100,97,115,116,97,\n110,116,111,109,101,110,111,115,100,97,116,111,115,111,116,114,97,115,115,105,\n116,105,111,109,117,99,104,111,97,104,111,114,97,108,117,103,97,114,109,97,121,\n111,114,101,115,116,111,115,104,111,114,97,115,116,101,110,101,114,97,110,116,\n101,115,102,111,116,111,115,101,115,116,97,115,112,97,195,173,115,110,117,101,\n118,97,115,97,108,117,100,102,111,114,111,115,109,101,100,105,111,113,117,105,\n101,110,109,101,115,101,115,112,111,100,101,114,99,104,105,108,101,115,101,114,\n195,161,118,101,99,101,115,100,101,99,105,114,106,111,115,195,169,101,115,116,97\n,114,118,101,110,116,97,103,114,117,112,111,104,101,99,104,111,101,108,108,111,\n115,116,101,110,103,111,97,109,105,103,111,99,111,115,97,115,110,105,118,101,108\n,103,101,110,116,101,109,105,115,109,97,97,105,114,101,115,106,117,108,105,111,\n116,101,109,97,115,104,97,99,105,97,102,97,118,111,114,106,117,110,105,111,108,\n105,98,114,101,112,117,110,116,111,98,117,101,110,111,97,117,116,111,114,97,98,\n114,105,108,98,117,101,110,97,116,101,120,116,111,109,97,114,122,111,115,97,98,\n101,114,108,105,115,116,97,108,117,101,103,111,99,195,179,109,111,101,110,101,\n114,111,106,117,101,103,111,112,101,114,195,186,104,97,98,101,114,101,115,116,\n111,121,110,117,110,99,97,109,117,106,101,114,118,97,108,111,114,102,117,101,114\n,97,108,105,98,114,111,103,117,115,116,97,105,103,117,97,108,118,111,116,111,115\n,99,97,115,111,115,103,117,195,173,97,112,117,101,100,111,115,111,109,111,115,97\n,118,105,115,111,117,115,116,101,100,100,101,98,101,110,110,111,99,104,101,98,\n117,115,99,97,102,97,108,116,97,101,117,114,111,115,115,101,114,105,101,100,105,\n99,104,111,99,117,114,115,111,99,108,97,118,101,99,97,115,97,115,108,101,195,179\n,110,112,108,97,122,111,108,97,114,103,111,111,98,114,97,115,118,105,115,116,97,\n97,112,111,121,111,106,117,110,116,111,116,114,97,116,97,118,105,115,116,111,99,\n114,101,97,114,99,97,109,112,111,104,101,109,111,115,99,105,110,99,111,99,97,114\n,103,111,112,105,115,111,115,111,114,100,101,110,104,97,99,101,110,195,161,114,\n101,97,100,105,115,99,111,112,101,100,114,111,99,101,114,99,97,112,117,101,100,\n97,112,97,112,101,108,109,101,110,111,114,195,186,116,105,108,99,108,97,114,111,\n106,111,114,103,101,99,97,108,108,101,112,111,110,101,114,116,97,114,100,101,110\n,97,100,105,101,109,97,114,99,97,115,105,103,117,101,101,108,108,97,115,115,105,\n103,108,111,99,111,99,104,101,109,111,116,111,115,109,97,100,114,101,99,108,97,\n115,101,114,101,115,116,111,110,105,195,177,111,113,117,101,100,97,112,97,115,97\n,114,98,97,110,99,111,104,105,106,111,115,118,105,97,106,101,112,97,98,108,111,\n195,169,115,116,101,118,105,101,110,101,114,101,105,110,111,100,101,106,97,114,\n102,111,110,100,111,99,97,110,97,108,110,111,114,116,101,108,101,116,114,97,99,\n97,117,115,97,116,111,109,97,114,109,97,110,111,115,108,117,110,101,115,97,117,\n116,111,115,118,105,108,108,97,118,101,110,100,111,112,101,115,97,114,116,105,\n112,111,115,116,101,110,103,97,109,97,114,99,111,108,108,101,118,97,112,97,100,\n114,101,117,110,105,100,111,118,97,109,111,115,122,111,110,97,115,97,109,98,111,\n115,98,97,110,100,97,109,97,114,105,97,97,98,117,115,111,109,117,99,104,97,115,\n117,98,105,114,114,105,111,106,97,118,105,118,105,114,103,114,97,100,111,99,104,\n105,99,97,97,108,108,195,173,106,111,118,101,110,100,105,99,104,97,101,115,116,\n97,110,116,97,108,101,115,115,97,108,105,114,115,117,101,108,111,112,101,115,111\n,115,102,105,110,101,115,108,108,97,109,97,98,117,115,99,111,195,169,115,116,97,\n108,108,101,103,97,110,101,103,114,111,112,108,97,122,97,104,117,109,111,114,112\n,97,103,97,114,106,117,110,116,97,100,111,98,108,101,105,115,108,97,115,98,111,\n108,115,97,98,97,195,177,111,104,97,98,108,97,108,117,99,104,97,195,129,114,101,\n97,100,105,99,101,110,106,117,103,97,114,110,111,116,97,115,118,97,108,108,101,\n97,108,108,195,161,99,97,114,103,97,100,111,108,111,114,97,98,97,106,111,101,115\n,116,195,169,103,117,115,116,111,109,101,110,116,101,109,97,114,105,111,102,105,\n114,109,97,99,111,115,116,111,102,105,99,104,97,112,108,97,116,97,104,111,103,97\n,114,97,114,116,101,115,108,101,121,101,115,97,113,117,101,108,109,117,115,101,\n111,98,97,115,101,115,112,111,99,111,115,109,105,116,97,100,99,105,101,108,111,\n99,104,105,99,111,109,105,101,100,111,103,97,110,97,114,115,97,110,116,111,101,\n116,97,112,97,100,101,98,101,115,112,108,97,121,97,114,101,100,101,115,115,105,\n101,116,101,99,111,114,116,101,99,111,114,101,97,100,117,100,97,115,100,101,115,\n101,111,118,105,101,106,111,100,101,115,101,97,97,103,117,97,115,38,113,117,111,\n116,59,100,111,109,97,105,110,99,111,109,109,111,110,115,116,97,116,117,115,101,\n118,101,110,116,115,109,97,115,116,101,114,115,121,115,116,101,109,97,99,116,105\n,111,110,98,97,110,110,101,114,114,101,109,111,118,101,115,99,114,111,108,108,\n117,112,100,97,116,101,103,108,111,98,97,108,109,101,100,105,117,109,102,105,108\n,116,101,114,110,117,109,98,101,114,99,104,97,110,103,101,114,101,115,117,108,\n116,112,117,98,108,105,99,115,99,114,101,101,110,99,104,111,111,115,101,110,111,\n114,109,97,108,116,114,97,118,101,108,105,115,115,117,101,115,115,111,117,114,99\n,101,116,97,114,103,101,116,115,112,114,105,110,103,109,111,100,117,108,101,109,\n111,98,105,108,101,115,119,105,116,99,104,112,104,111,116,111,115,98,111,114,100\n,101,114,114,101,103,105,111,110,105,116,115,101,108,102,115,111,99,105,97,108,\n97,99,116,105,118,101,99,111,108,117,109,110,114,101,99,111,114,100,102,111,108,\n108,111,119,116,105,116,108,101,62,101,105,116,104,101,114,108,101,110,103,116,\n104,102,97,109,105,108,121,102,114,105,101,110,100,108,97,121,111,117,116,97,117\n,116,104,111,114,99,114,101,97,116,101,114,101,118,105,101,119,115,117,109,109,\n101,114,115,101,114,118,101,114,112,108,97,121,101,100,112,108,97,121,101,114,\n101,120,112,97,110,100,112,111,108,105,99,121,102,111,114,109,97,116,100,111,117\n,98,108,101,112,111,105,110,116,115,115,101,114,105,101,115,112,101,114,115,111,\n110,108,105,118,105,110,103,100,101,115,105,103,110,109,111,110,116,104,115,102,\n111,114,99,101,115,117,110,105,113,117,101,119,101,105,103,104,116,112,101,111,\n112,108,101,101,110,101,114,103,121,110,97,116,117,114,101,115,101,97,114,99,104\n,102,105,103,117,114,101,104,97,118,105,110,103,99,117,115,116,111,109,111,102,\n102,115,101,116,108,101,116,116,101,114,119,105,110,100,111,119,115,117,98,109,\n105,116,114,101,110,100,101,114,103,114,111,117,112,115,117,112,108,111,97,100,\n104,101,97,108,116,104,109,101,116,104,111,100,118,105,100,101,111,115,115,99,\n104,111,111,108,102,117,116,117,114,101,115,104,97,100,111,119,100,101,98,97,116\n,101,118,97,108,117,101,115,79,98,106,101,99,116,111,116,104,101,114,115,114,105\n,103,104,116,115,108,101,97,103,117,101,99,104,114,111,109,101,115,105,109,112,\n108,101,110,111,116,105,99,101,115,104,97,114,101,100,101,110,100,105,110,103,\n115,101,97,115,111,110,114,101,112,111,114,116,111,110,108,105,110,101,115,113,\n117,97,114,101,98,117,116,116,111,110,105,109,97,103,101,115,101,110,97,98,108,\n101,109,111,118,105,110,103,108,97,116,101,115,116,119,105,110,116,101,114,70,\n114,97,110,99,101,112,101,114,105,111,100,115,116,114,111,110,103,114,101,112,\n101,97,116,76,111,110,100,111,110,100,101,116,97,105,108,102,111,114,109,101,100\n,100,101,109,97,110,100,115,101,99,117,114,101,112,97,115,115,101,100,116,111,\n103,103,108,101,112,108,97,99,101,115,100,101,118,105,99,101,115,116,97,116,105,\n99,99,105,116,105,101,115,115,116,114,101,97,109,121,101,108,108,111,119,97,116,\n116,97,99,107,115,116,114,101,101,116,102,108,105,103,104,116,104,105,100,100,\n101,110,105,110,102,111,34,62,111,112,101,110,101,100,117,115,101,102,117,108,\n118,97,108,108,101,121,99,97,117,115,101,115,108,101,97,100,101,114,115,101,99,\n114,101,116,115,101,99,111,110,100,100,97,109,97,103,101,115,112,111,114,116,115\n,101,120,99,101,112,116,114,97,116,105,110,103,115,105,103,110,101,100,116,104,\n105,110,103,115,101,102,102,101,99,116,102,105,101,108,100,115,115,116,97,116,\n101,115,111,102,102,105,99,101,118,105,115,117,97,108,101,100,105,116,111,114,\n118,111,108,117,109,101,82,101,112,111,114,116,109,117,115,101,117,109,109,111,\n118,105,101,115,112,97,114,101,110,116,97,99,99,101,115,115,109,111,115,116,108,\n121,109,111,116,104,101,114,34,32,105,100,61,34,109,97,114,107,101,116,103,114,\n111,117,110,100,99,104,97,110,99,101,115,117,114,118,101,121,98,101,102,111,114,\n101,115,121,109,98,111,108,109,111,109,101,110,116,115,112,101,101,99,104,109,\n111,116,105,111,110,105,110,115,105,100,101,109,97,116,116,101,114,67,101,110,\n116,101,114,111,98,106,101,99,116,101,120,105,115,116,115,109,105,100,100,108,\n101,69,117,114,111,112,101,103,114,111,119,116,104,108,101,103,97,99,121,109,97,\n110,110,101,114,101,110,111,117,103,104,99,97,114,101,101,114,97,110,115,119,101\n,114,111,114,105,103,105,110,112,111,114,116,97,108,99,108,105,101,110,116,115,\n101,108,101,99,116,114,97,110,100,111,109,99,108,111,115,101,100,116,111,112,105\n,99,115,99,111,109,105,110,103,102,97,116,104,101,114,111,112,116,105,111,110,\n115,105,109,112,108,121,114,97,105,115,101,100,101,115,99,97,112,101,99,104,111,\n115,101,110,99,104,117,114,99,104,100,101,102,105,110,101,114,101,97,115,111,110\n,99,111,114,110,101,114,111,117,116,112,117,116,109,101,109,111,114,121,105,102,\n114,97,109,101,112,111,108,105,99,101,109,111,100,101,108,115,78,117,109,98,101,\n114,100,117,114,105,110,103,111,102,102,101,114,115,115,116,121,108,101,115,107,\n105,108,108,101,100,108,105,115,116,101,100,99,97,108,108,101,100,115,105,108,\n118,101,114,109,97,114,103,105,110,100,101,108,101,116,101,98,101,116,116,101,\n114,98,114,111,119,115,101,108,105,109,105,116,115,71,108,111,98,97,108,115,105,\n110,103,108,101,119,105,100,103,101,116,99,101,110,116,101,114,98,117,100,103,\n101,116,110,111,119,114,97,112,99,114,101,100,105,116,99,108,97,105,109,115,101,\n110,103,105,110,101,115,97,102,101,116,121,99,104,111,105,99,101,115,112,105,114\n,105,116,45,115,116,121,108,101,115,112,114,101,97,100,109,97,107,105,110,103,\n110,101,101,100,101,100,114,117,115,115,105,97,112,108,101,97,115,101,101,120,\n116,101,110,116,83,99,114,105,112,116,98,114,111,107,101,110,97,108,108,111,119,\n115,99,104,97,114,103,101,100,105,118,105,100,101,102,97,99,116,111,114,109,101,\n109,98,101,114,45,98,97,115,101,100,116,104,101,111,114,121,99,111,110,102,105,\n103,97,114,111,117,110,100,119,111,114,107,101,100,104,101,108,112,101,100,67,\n104,117,114,99,104,105,109,112,97,99,116,115,104,111,117,108,100,97,108,119,97,\n121,115,108,111,103,111,34,32,98,111,116,116,111,109,108,105,115,116,34,62,41,\n123,118,97,114,32,112,114,101,102,105,120,111,114,97,110,103,101,72,101,97,100,\n101,114,46,112,117,115,104,40,99,111,117,112,108,101,103,97,114,100,101,110,98,\n114,105,100,103,101,108,97,117,110,99,104,82,101,118,105,101,119,116,97,107,105,\n110,103,118,105,115,105,111,110,108,105,116,116,108,101,100,97,116,105,110,103,\n66,117,116,116,111,110,98,101,97,117,116,121,116,104,101,109,101,115,102,111,114\n,103,111,116,83,101,97,114,99,104,97,110,99,104,111,114,97,108,109,111,115,116,\n108,111,97,100,101,100,67,104,97,110,103,101,114,101,116,117,114,110,115,116,114\n,105,110,103,114,101,108,111,97,100,77,111,98,105,108,101,105,110,99,111,109,101\n,115,117,112,112,108,121,83,111,117,114,99,101,111,114,100,101,114,115,118,105,\n101,119,101,100,38,110,98,115,112,59,99,111,117,114,115,101,65,98,111,117,116,32\n,105,115,108,97,110,100,60,104,116,109,108,32,99,111,111,107,105,101,110,97,109,\n101,61,34,97,109,97,122,111,110,109,111,100,101,114,110,97,100,118,105,99,101,\n105,110,60,47,97,62,58,32,84,104,101,32,100,105,97,108,111,103,104,111,117,115,\n101,115,66,69,71,73,78,32,77,101,120,105,99,111,115,116,97,114,116,115,99,101,\n110,116,114,101,104,101,105,103,104,116,97,100,100,105,110,103,73,115,108,97,110\n,100,97,115,115,101,116,115,69,109,112,105,114,101,83,99,104,111,111,108,101,102\n,102,111,114,116,100,105,114,101,99,116,110,101,97,114,108,121,109,97,110,117,97\n,108,83,101,108,101,99,116,46,10,10,79,110,101,106,111,105,110,101,100,109,101,\n110,117,34,62,80,104,105,108,105,112,97,119,97,114,100,115,104,97,110,100,108,\n101,105,109,112,111,114,116,79,102,102,105,99,101,114,101,103,97,114,100,115,107\n,105,108,108,115,110,97,116,105,111,110,83,112,111,114,116,115,100,101,103,114,\n101,101,119,101,101,107,108,121,32,40,101,46,103,46,98,101,104,105,110,100,100,\n111,99,116,111,114,108,111,103,103,101,100,117,110,105,116,101,100,60,47,98,62,\n60,47,98,101,103,105,110,115,112,108,97,110,116,115,97,115,115,105,115,116,97,\n114,116,105,115,116,105,115,115,117,101,100,51,48,48,112,120,124,99,97,110,97,\n100,97,97,103,101,110,99,121,115,99,104,101,109,101,114,101,109,97,105,110,66,\n114,97,122,105,108,115,97,109,112,108,101,108,111,103,111,34,62,98,101,121,111,\n110,100,45,115,99,97,108,101,97,99,99,101,112,116,115,101,114,118,101,100,109,97\n,114,105,110,101,70,111,111,116,101,114,99,97,109,101,114,97,60,47,104,49,62,10,\n95,102,111,114,109,34,108,101,97,118,101,115,115,116,114,101,115,115,34,32,47,62\n,13,10,46,103,105,102,34,32,111,110,108,111,97,100,108,111,97,100,101,114,79,120\n,102,111,114,100,115,105,115,116,101,114,115,117,114,118,105,118,108,105,115,116\n,101,110,102,101,109,97,108,101,68,101,115,105,103,110,115,105,122,101,61,34,97,\n112,112,101,97,108,116,101,120,116,34,62,108,101,118,101,108,115,116,104,97,110,\n107,115,104,105,103,104,101,114,102,111,114,99,101,100,97,110,105,109,97,108,97,\n110,121,111,110,101,65,102,114,105,99,97,97,103,114,101,101,100,114,101,99,101,\n110,116,80,101,111,112,108,101,60,98,114,32,47,62,119,111,110,100,101,114,112,\n114,105,99,101,115,116,117,114,110,101,100,124,124,32,123,125,59,109,97,105,110,\n34,62,105,110,108,105,110,101,115,117,110,100,97,121,119,114,97,112,34,62,102,97\n,105,108,101,100,99,101,110,115,117,115,109,105,110,117,116,101,98,101,97,99,111\n,110,113,117,111,116,101,115,49,53,48,112,120,124,101,115,116,97,116,101,114,101\n,109,111,116,101,101,109,97,105,108,34,108,105,110,107,101,100,114,105,103,104,\n116,59,115,105,103,110,97,108,102,111,114,109,97,108,49,46,104,116,109,108,115,\n105,103,110,117,112,112,114,105,110,99,101,102,108,111,97,116,58,46,112,110,103,\n34,32,102,111,114,117,109,46,65,99,99,101,115,115,112,97,112,101,114,115,115,111\n,117,110,100,115,101,120,116,101,110,100,72,101,105,103,104,116,115,108,105,100,\n101,114,85,84,70,45,56,34,38,97,109,112,59,32,66,101,102,111,114,101,46,32,87,\n105,116,104,115,116,117,100,105,111,111,119,110,101,114,115,109,97,110,97,103,\n101,112,114,111,102,105,116,106,81,117,101,114,121,97,110,110,117,97,108,112,97,\n114,97,109,115,98,111,117,103,104,116,102,97,109,111,117,115,103,111,111,103,108\n,101,108,111,110,103,101,114,105,43,43,41,32,123,105,115,114,97,101,108,115,97,\n121,105,110,103,100,101,99,105,100,101,104,111,109,101,34,62,104,101,97,100,101,\n114,101,110,115,117,114,101,98,114,97,110,99,104,112,105,101,99,101,115,98,108,\n111,99,107,59,115,116,97,116,101,100,116,111,112,34,62,60,114,97,99,105,110,103,\n114,101,115,105,122,101,45,45,38,103,116,59,112,97,99,105,116,121,115,101,120,\n117,97,108,98,117,114,101,97,117,46,106,112,103,34,32,49,48,44,48,48,48,111,98,\n116,97,105,110,116,105,116,108,101,115,97,109,111,117,110,116,44,32,73,110,99,46\n,99,111,109,101,100,121,109,101,110,117,34,32,108,121,114,105,99,115,116,111,100\n,97,121,46,105,110,100,101,101,100,99,111,117,110,116,121,95,108,111,103,111,46,\n70,97,109,105,108,121,108,111,111,107,101,100,77,97,114,107,101,116,108,115,101,\n32,105,102,80,108,97,121,101,114,116,117,114,107,101,121,41,59,118,97,114,32,102\n,111,114,101,115,116,103,105,118,105,110,103,101,114,114,111,114,115,68,111,109,\n97,105,110,125,101,108,115,101,123,105,110,115,101,114,116,66,108,111,103,60,47,\n102,111,111,116,101,114,108,111,103,105,110,46,102,97,115,116,101,114,97,103,101\n,110,116,115,60,98,111,100,121,32,49,48,112,120,32,48,112,114,97,103,109,97,102,\n114,105,100,97,121,106,117,110,105,111,114,100,111,108,108,97,114,112,108,97,99,\n101,100,99,111,118,101,114,115,112,108,117,103,105,110,53,44,48,48,48,32,112,97,\n103,101,34,62,98,111,115,116,111,110,46,116,101,115,116,40,97,118,97,116,97,114,\n116,101,115,116,101,100,95,99,111,117,110,116,102,111,114,117,109,115,115,99,104\n,101,109,97,105,110,100,101,120,44,102,105,108,108,101,100,115,104,97,114,101,\n115,114,101,97,100,101,114,97,108,101,114,116,40,97,112,112,101,97,114,83,117,98\n,109,105,116,108,105,110,101,34,62,98,111,100,121,34,62,10,42,32,84,104,101,84,\n104,111,117,103,104,115,101,101,105,110,103,106,101,114,115,101,121,78,101,119,\n115,60,47,118,101,114,105,102,121,101,120,112,101,114,116,105,110,106,117,114,\n121,119,105,100,116,104,61,67,111,111,107,105,101,83,84,65,82,84,32,97,99,114,\n111,115,115,95,105,109,97,103,101,116,104,114,101,97,100,110,97,116,105,118,101,\n112,111,99,107,101,116,98,111,120,34,62,10,83,121,115,116,101,109,32,68,97,118,\n105,100,99,97,110,99,101,114,116,97,98,108,101,115,112,114,111,118,101,100,65,\n112,114,105,108,32,114,101,97,108,108,121,100,114,105,118,101,114,105,116,101,\n109,34,62,109,111,114,101,34,62,98,111,97,114,100,115,99,111,108,111,114,115,99,\n97,109,112,117,115,102,105,114,115,116,32,124,124,32,91,93,59,109,101,100,105,97\n,46,103,117,105,116,97,114,102,105,110,105,115,104,119,105,100,116,104,58,115,\n104,111,119,101,100,79,116,104,101,114,32,46,112,104,112,34,32,97,115,115,117,\n109,101,108,97,121,101,114,115,119,105,108,115,111,110,115,116,111,114,101,115,\n114,101,108,105,101,102,115,119,101,100,101,110,67,117,115,116,111,109,101,97,\n115,105,108,121,32,121,111,117,114,32,83,116,114,105,110,103,10,10,87,104,105,\n108,116,97,121,108,111,114,99,108,101,97,114,58,114,101,115,111,114,116,102,114,\n101,110,99,104,116,104,111,117,103,104,34,41,32,43,32,34,60,98,111,100,121,62,98\n,117,121,105,110,103,98,114,97,110,100,115,77,101,109,98,101,114,110,97,109,101,\n34,62,111,112,112,105,110,103,115,101,99,116,111,114,53,112,120,59,34,62,118,115\n,112,97,99,101,112,111,115,116,101,114,109,97,106,111,114,32,99,111,102,102,101,\n101,109,97,114,116,105,110,109,97,116,117,114,101,104,97,112,112,101,110,60,47,\n110,97,118,62,107,97,110,115,97,115,108,105,110,107,34,62,73,109,97,103,101,115,\n61,102,97,108,115,101,119,104,105,108,101,32,104,115,112,97,99,101,48,38,97,109,\n112,59,32,10,10,73,110,32,32,112,111,119,101,114,80,111,108,115,107,105,45,99,\n111,108,111,114,106,111,114,100,97,110,66,111,116,116,111,109,83,116,97,114,116,\n32,45,99,111,117,110,116,50,46,104,116,109,108,110,101,119,115,34,62,48,49,46,\n106,112,103,79,110,108,105,110,101,45,114,105,103,104,116,109,105,108,108,101,\n114,115,101,110,105,111,114,73,83,66,78,32,48,48,44,48,48,48,32,103,117,105,100,\n101,115,118,97,108,117,101,41,101,99,116,105,111,110,114,101,112,97,105,114,46,\n120,109,108,34,32,32,114,105,103,104,116,115,46,104,116,109,108,45,98,108,111,99\n,107,114,101,103,69,120,112,58,104,111,118,101,114,119,105,116,104,105,110,118,\n105,114,103,105,110,112,104,111,110,101,115,60,47,116,114,62,13,117,115,105,110,\n103,32,10,9,118,97,114,32,62,39,41,59,10,9,60,47,116,100,62,10,60,47,116,114,62,\n10,98,97,104,97,115,97,98,114,97,115,105,108,103,97,108,101,103,111,109,97,103,\n121,97,114,112,111,108,115,107,105,115,114,112,115,107,105,216,177,216,175,217,\n136,228,184,173,230,150,135,231,174,128,228,189,147,231,185,129,233,171,148,228,\n191,161,230,129,175,228,184,173,229,155,189,230,136,145,228,187,172,228,184,128,\n228,184,170,229,133,172,229,143,184,231,174,161,231,144,134,232,174,186,229,157,\n155,229,143,175,228,187,165,230,156,141,229,138,161,230,151,182,233,151,180,228,\n184,170,228,186,186,228,186,167,229,147,129,232,135,170,229,183,177,228,188,129,\n228,184,154,230,159,165,231,156,139,229,183,165,228,189,156,232,129,148,231,179,\n187,230,178,161,230,156,137,231,189,145,231,171,153,230,137,128,230,156,137,232,\n175,132,232,174,186,228,184,173,229,191,131,230,150,135,231,171,160,231,148,168,\n230,136,183,233,166,150,233,161,181,228,189,156,232,128,133,230,138,128,230,156,\n175,233,151,174,233,162,152,231,155,184,229,133,179,228,184,139,232,189,189,230,\n144,156,231,180,162,228,189,191,231,148,168,232,189,175,228,187,182,229,156,168,\n231,186,191,228,184,187,233,162,152,232,181,132,230,150,153,232,167,134,233,162,\n145,229,155,158,229,164,141,230,179,168,229,134,140,231,189,145,231,187,156,230,\n148,182,232,151,143,229,134,133,229,174,185,230,142,168,232,141,144,229,184,130,\n229,156,186,230,182,136,230,129,175,231,169,186,233,151,180,229,143,145,229,184,\n131,228,187,128,228,185,136,229,165,189,229,143,139,231,148,159,230,180,187,229,\n155,190,231,137,135,229,143,145,229,177,149,229,166,130,230,158,156,230,137,139,\n230,156,186,230,150,176,233,151,187,230,156,128,230,150,176,230,150,185,229,188,\n143,229,140,151,228,186,172,230,143,144,228,190,155,229,133,179,228,186,142,230,\n155,180,229,164,154,232,191,153,228,184,170,231,179,187,231,187,159,231,159,165,\n233,129,147,230,184,184,230,136,143,229,185,191,229,145,138,229,133,182,228,187,\n150,229,143,145,232,161,168,229,174,137,229,133,168,231,172,172,228,184,128,228,\n188,154,229,145,152,232,191,155,232,161,140,231,130,185,229,135,187,231,137,136,\n230,157,131,231,148,181,229,173,144,228,184,150,231,149,140,232,174,190,232,174,\n161,229,133,141,232,180,185,230,149,153,232,130,178,229,138,160,229,133,165,230,\n180,187,229,138,168,228,187,150,228,187,172,229,149,134,229,147,129,229,141,154,\n229,174,162,231,142,176,229,156,168,228,184,138,230,181,183,229,166,130,228,189,\n149,229,183,178,231,187,143,231,149,153,232,168,128,232,175,166,231,187,134,231,\n164,190,229,140,186,231,153,187,229,189,149,230,156,172,231,171,153,233,156,128,\n232,166,129,228,187,183,230,160,188,230,148,175,230,140,129,229,155,189,233,153,\n133,233,147,190,230,142,165,229,155,189,229,174,182,229,187,186,232,174,190,230,\n156,139,229,143,139,233,152,133,232,175,187,230,179,149,229,190,139,228,189,141,\n231,189,174,231,187,143,230,181,142,233,128,137,230,139,169,232,191,153,230,160,\n183,229,189,147,229,137,141,229,136,134,231,177,187,230,142,146,232,161,140,229,\n155,160,228,184,186,228,186,164,230,152,147,230,156,128,229,144,142,233,159,179,\n228,185,144,228,184,141,232,131,189,233,128,154,232,191,135,232,161,140,228,184,\n154,231,167,145,230,138,128,229,143,175,232,131,189,232,174,190,229,164,135,229,\n144,136,228,189,156,229,164,167,229,174,182,231,164,190,228,188,154,231,160,148,\n231,169,182,228,184,147,228,184,154,229,133,168,233,131,168,233,161,185,231,155,\n174,232,191,153,233,135,140,232,191,152,230,152,175,229,188,128,229,167,139,230,\n131,133,229,134,181,231,148,181,232,132,145,230,150,135,228,187,182,229,147,129,\n231,137,140,229,184,174,229,138,169,230,150,135,229,140,150,232,181,132,230,186,\n144,229,164,167,229,173,166,229,173,166,228,185,160,229,156,176,229,157,128,230,\n181,143,232,167,136,230,138,149,232,181,132,229,183,165,231,168,139,232,166,129,\n230,177,130,230,128,142,228,185,136,230,151,182,229,128,153,229,138,159,232,131,\n189,228,184,187,232,166,129,231,155,174,229,137,141,232,181,132,232,174,175,229,\n159,142,229,184,130,230,150,185,230,179,149,231,148,181,229,189,177,230,139,155,\n232,129,152,229,163,176,230,152,142,228,187,187,228,189,149,229,129,165,229,186,\n183,230,149,176,230,141,174,231,190,142,229,155,189,230,177,189,232,189,166,228,\n187,139,231,187,141,228,189,134,230,152,175,228,186,164,230,181,129,231,148,159,\n228,186,167,230,137,128,228,187,165,231,148,181,232,175,157,230,152,190,231,164,\n186,228,184,128,228,186,155,229,141,149,228,189,141,228,186,186,229,145,152,229,\n136,134,230,158,144,229,156,176,229,155,190,230,151,133,230,184,184,229,183,165,\n229,133,183,229,173,166,231,148,159,231,179,187,229,136,151,231,189,145,229,143,\n139,229,184,150,229,173,144,229,175,134,231,160,129,233,162,145,233,129,147,230,\n142,167,229,136,182,229,156,176,229,140,186,229,159,186,230,156,172,229,133,168,\n229,155,189,231,189,145,228,184,138,233,135,141,232,166,129,231,172,172,228,186,\n140,229,150,156,230,172,162,232,191,155,229,133,165,229,143,139,230,131,133,232,\n191,153,228,186,155,232,128,131,232,175,149,229,143,145,231,142,176,229,159,185,\n232,174,173,228,187,165,228,184,138,230,148,191,229,186,156,230,136,144,228,184,\n186,231,142,175,229,162,131,233,166,153,230,184,175,229,144,140,230,151,182,229,\n168,177,228,185,144,229,143,145,233,128,129,228,184,128,229,174,154,229,188,128,\n229,143,145,228,189,156,229,147,129,230,160,135,229,135,134,230,172,162,232,191,\n142,232,167,163,229,134,179,229,156,176,230,150,185,228,184,128,228,184,139,228,\n187,165,229,143,138,232,180,163,228,187,187,230,136,150,232,128,133,229,174,162,\n230,136,183,228,187,163,232,161,168,231,167,175,229,136,134,229,165,179,228,186,\n186,230,149,176,231,160,129,233,148,128,229,148,174,229,135,186,231,142,176,231,\n166,187,231,186,191,229,186,148,231,148,168,229,136,151,232,161,168,228,184,141,\n229,144,140,231,188,150,232,190,145,231,187,159,232,174,161,230,159,165,232,175,\n162,228,184,141,232,166,129,230,156,137,229,133,179,230,156,186,230,158,132,229,\n190,136,229,164,154,230,146,173,230,148,190,231,187,132,231,187,135,230,148,191,\n231,173,150,231,155,180,230,142,165,232,131,189,229,138,155,230,157,165,230,186,\n144,230,153,130,233,150,147,231,156,139,229,136,176,231,131,173,233,151,168,229,\n133,179,233,148,174,228,184,147,229,140,186,233,157,158,229,184,184,232,139,177,\n232,175,173,231,153,190,229,186,166,229,184,140,230,156,155,231,190,142,229,165,\n179,230,175,148,232,190,131,231,159,165,232,175,134,232,167,132,229,174,154,229,\n187,186,232,174,174,233,131,168,233,151,168,230,132,143,232,167,129,231,178,190,\n229,189,169,230,151,165,230,156,172,230,143,144,233,171,152,229,143,145,232,168,\n128,230,150,185,233,157,162,229,159,186,233,135,145,229,164,132,231,144,134,230,\n157,131,233,153,144,229,189,177,231,137,135,233,147,182,232,161,140,232,191,152,\n230,156,137,229,136,134,228,186,171,231,137,169,229,147,129,231,187,143,232,144,\n165,230,183,187,229,138,160,228,184,147,229,174,182,232,191,153,231,167,141,232,\n175,157,233,162,152,232,181,183,230,157,165,228,184,154,229,138,161,229,133,172,\n229,145,138,232,174,176,229,189,149,231,174,128,228,187,139,232,180,168,233,135,\n143,231,148,183,228,186,186,229,189,177,229,147,141,229,188,149,231,148,168,230,\n138,165,229,145,138,233,131,168,229,136,134,229,191,171,233,128,159,229,146,168,\n232,175,162,230,151,182,229,176,154,230,179,168,230,132,143,231,148,179,232,175,\n183,229,173,166,230,160,161,229,186,148,232,175,165,229,142,134,229,143,178,229,\n143,170,230,152,175,232,191,148,229,155,158,232,180,173,228,185,176,229,144,141,\n231,167,176,228,184,186,228,186,134,230,136,144,229,138,159,232,175,180,230,152,\n142,228,190,155,229,186,148,229,173,169,229,173,144,228,184,147,233,162,152,231,\n168,139,229,186,143,228,184,128,232,136,172,230,156,131,229,147,161,229,143,170,\n230,156,137,229,133,182,229,174,131,228,191,157,230,138,164,232,128,140,228,184,\n148,228,187,138,229,164,169,231,170,151,229,143,163,229,138,168,230,128,129,231,\n138,182,230,128,129,231,137,185,229,136,171,232,174,164,228,184,186,229,191,133,\n233,161,187,230,155,180,230,150,176,229,176,143,232,175,180,230,136,145,229,128,\n145,228,189,156,228,184,186,229,170,146,228,189,147,229,140,133,230,139,172,233,\n130,163,228,185,136,228,184,128,230,160,183,229,155,189,229,134,133,230,152,175,\n229,144,166,230,160,185,230,141,174,231,148,181,232,167,134,229,173,166,233,153,\n162,229,133,183,230,156,137,232,191,135,231,168,139,231,148,177,228,186,142,228,\n186,186,230,137,141,229,135,186,230,157,165,228,184,141,232,191,135,230,173,163,\n229,156,168,230,152,142,230,152,159,230,149,133,228,186,139,229,133,179,231,179,\n187,230,160,135,233,162,152,229,149,134,229,138,161,232,190,147,229,133,165,228,\n184,128,231,155,180,229,159,186,231,161,128,230,149,153,229,173,166,228,186,134,\n232,167,163,229,187,186,231,173,145,231,187,147,230,158,156,229,133,168,231,144,\n131,233,128,154,231,159,165,232,174,161,229,136,146,229,175,185,228,186,142,232,\n137,186,230,156,175,231,155,184,229,134,140,229,143,145,231,148,159,231,156,159,\n231,154,132,229,187,186,231,171,139,231,173,137,231,186,167,231,177,187,229,158,\n139,231,187,143,233,170,140,229,174,158,231,142,176,229,136,182,228,189,156,230,\n157,165,232,135,170,230,160,135,231,173,190,228,187,165,228,184,139,229,142,159,\n229,136,155,230,151,160,230,179,149,229,133,182,228,184,173,229,128,139,228,186,\n186,228,184,128,229,136,135,230,140,135,229,141,151,229,133,179,233,151,173,233,\n155,134,229,155,162,231,172,172,228,184,137,229,133,179,230,179,168,229,155,160,\n230,173,164,231,133,167,231,137,135,230,183,177,229,156,179,229,149,134,228,184,\n154,229,185,191,229,183,158,230,151,165,230,156,159,233,171,152,231,186,167,230,\n156,128,232,191,145,231,187,188,229,144,136,232,161,168,231,164,186,228,184,147,\n232,190,145,232,161,140,228,184,186,228,186,164,233,128,154,232,175,132,228,187,\n183,232,167,137,229,190,151,231,178,190,229,141,142,229,174,182,229,186,173,229,\n174,140,230,136,144,230,132,159,232,167,137,229,174,137,232,163,133,229,190,151,\n229,136,176,233,130,174,228,187,182,229,136,182,229,186,166,233,163,159,229,147,\n129,232,153,189,231,132,182,232,189,172,232,189,189,230,138,165,228,187,183,232,\n174,176,232,128,133,230,150,185,230,161,136,232,161,140,230,148,191,228,186,186,\n230,176,145,231,148,168,229,147,129,228,184,156,232,165,191,230,143,144,229,135,\n186,233,133,146,229,186,151,231,132,182,229,144,142,228,187,152,230,172,190,231,\n131,173,231,130,185,228,187,165,229,137,141,229,174,140,229,133,168,229,143,145,\n229,184,150,232,174,190,231,189,174,233,162,134,229,175,188,229,183,165,228,184,\n154,229,140,187,233,153,162,231,156,139,231,156,139,231,187,143,229,133,184,229,\n142,159,229,155,160,229,185,179,229,143,176,229,144,132,231,167,141,229,162,158,\n229,138,160,230,157,144,230,150,153,230,150,176,229,162,158,228,185,139,229,144,\n142,232,129,140,228,184,154,230,149,136,230,158,156,228,187,138,229,185,180,232,\n174,186,230,150,135,230,136,145,229,155,189,229,145,138,232,175,137,231,137,136,\n228,184,187,228,191,174,230,148,185,229,143,130,228,184,142,230,137,147,229,141,\n176,229,191,171,228,185,144,230,156,186,230,162,176,232,167,130,231,130,185,229,\n173,152,229,156,168,231,178,190,231,165,158,232,142,183,229,190,151,229,136,169,\n231,148,168,231,187,167,231,187,173,228,189,160,228,187,172,232,191,153,228,185,\n136,230,168,161,229,188,143,232,175,173,232,168,128,232,131,189,229,164,159,233,\n155,133,232,153,142,230,147,141,228,189,156,233,163,142,230,160,188,228,184,128,\n232,181,183,231,167,145,229,173,166,228,189,147,232,130,178,231,159,173,228,191,\n161,230,157,161,228,187,182,230,178,187,231,150,151,232,191,144,229,138,168,228,\n186,167,228,184,154,228,188,154,232,174,174,229,175,188,232,136,170,229,133,136,\n231,148,159,232,129,148,231,155,159,229,143,175,230,152,175,229,149,143,233,161,\n140,231,187,147,230,158,132,228,189,156,231,148,168,232,176,131,230,159,165,232,\n179,135,230,150,153,232,135,170,229,138,168,232,180,159,232,180,163,229,134,156,\n228,184,154,232,174,191,233,151,174,229,174,158,230,150,189,230,142,165,229,143,\n151,232,174,168,232,174,186,233,130,163,228,184,170,229,143,141,233,166,136,229,\n138,160,229,188,186,229,165,179,230,128,167,232,140,131,229,155,180,230,156,141,\n229,139,153,228,188,145,233,151,178,228,187,138,230,151,165,229,174,162,230,156,\n141,232,167,128,231,156,139,229,143,130,229,138,160,231,154,132,232,175,157,228,\n184,128,231,130,185,228,191,157,232,175,129,229,155,190,228,185,166,230,156,137,\n230,149,136,230,181,139,232,175,149,231,167,187,229,138,168,230,137,141,232,131,\n189,229,134,179,229,174,154,232,130,161,231,165,168,228,184,141,230,150,173,233,\n156,128,230,177,130,228,184,141,229,190,151,229,138,158,230,179,149,228,185,139,\n233,151,180,233,135,135,231,148,168,232,144,165,233,148,128,230,138,149,232,175,\n137,231,155,174,230,160,135,231,136,177,230,131,133,230,145,132,229,189,177,230,\n156,137,228,186,155,232,164,135,232,163,189,230,150,135,229,173,166,230,156,186,\n228,188,154,230,149,176,229,173,151,232,163,133,228,191,174,232,180,173,231,137,\n169,229,134,156,230,157,145,229,133,168,233,157,162,231,178,190,229,147,129,229,\n133,182,229,174,158,228,186,139,230,131,133,230,176,180,229,185,179,230,143,144,\n231,164,186,228,184,138,229,184,130,232,176,162,232,176,162,230,153,174,233,128,\n154,230,149,153,229,184,136,228,184,138,228,188,160,231,177,187,229,136,171,230,\n173,140,230,155,178,230,139,165,230,156,137,229,136,155,230,150,176,233,133,141,\n228,187,182,229,143,170,232,166,129,230,151,182,228,187,163,232,179,135,232,168,\n138,232,190,190,229,136,176,228,186,186,231,148,159,232,174,162,233,152,133,232,\n128,129,229,184,136,229,177,149,231,164,186,229,191,131,231,144,134,232,180,180,\n229,173,144,231,182,178,231,171,153,228,184,187,233,161,140,232,135,170,231,132,\n182,231,186,167,229,136,171,231,174,128,229,141,149,230,148,185,233,157,169,233,\n130,163,228,186,155,230,157,165,232,175,180,230,137,147,229,188,128,228,187,163,\n231,160,129,229,136,160,233,153,164,232,175,129,229,136,184,232,138,130,231,155,\n174,233,135,141,231,130,185,230,172,161,230,149,184,229,164,154,229,176,145,232,\n167,132,229,136,146,232,181,132,233,135,145,230,137,190,229,136,176,228,187,165,\n229,144,142,229,164,167,229,133,168,228,184,187,233,161,181,230,156,128,228,189,\n179,229,155,158,231,173,148,229,164,169,228,184,139,228,191,157,233,154,156,231,\n142,176,228,187,163,230,163,128,230,159,165,230,138,149,231,165,168,229,176,143,\n230,151,182,230,178,146,230,156,137,230,173,163,229,184,184,231,148,154,232,135,\n179,228,187,163,231,144,134,231,155,174,229,189,149,229,133,172,229,188,128,229,\n164,141,229,136,182,233,135,145,232,158,141,229,185,184,231,166,143,231,137,136,\n230,156,172,229,189,162,230,136,144,229,135,134,229,164,135,232,161,140,230,131,\n133,229,155,158,229,136,176,230,128,157,230,131,179,230,128,142,230,160,183,229,\n141,143,232,174,174,232,174,164,232,175,129,230,156,128,229,165,189,228,186,167,\n231,148,159,230,140,137,231,133,167,230,156,141,232,163,133,229,185,191,228,184,\n156,229,138,168,230,188,171,233,135,135,232,180,173,230,150,176,230,137,139,231,\n187,132,229,155,190,233,157,162,230,157,191,229,143,130,232,128,131,230,148,191,\n230,178,187,229,174,185,230,152,147,229,164,169,229,156,176,229,138,170,229,138,\n155,228,186,186,228,187,172,229,141,135,231,186,167,233,128,159,229,186,166,228,\n186,186,231,137,169,232,176,131,230,149,180,230,181,129,232,161,140,233,128,160,\n230,136,144,230,150,135,229,173,151,233,159,169,229,155,189,232,180,184,230,152,\n147,229,188,128,229,177,149,231,155,184,233,151,156,232,161,168,231,142,176,229,\n189,177,232,167,134,229,166,130,230,173,164,231,190,142,229,174,185,229,164,167,\n229,176,143,230,138,165,233,129,147,230,157,161,230,172,190,229,191,131,230,131,\n133,232,174,184,229,164,154,230,179,149,232,167,132,229,174,182,229,177,133,228,\n185,166,229,186,151,232,191,158,230,142,165,231,171,139,229,141,179,228,184,190,\n230,138,165,230,138,128,229,183,167,229,165,165,232,191,144,231,153,187,229,133,\n165,228,187,165,230,157,165,231,144,134,232,174,186,228,186,139,228,187,182,232,\n135,170,231,148,177,228,184,173,229,141,142,229,138,158,229,133,172,229,166,136,\n229,166,136,231,156,159,230,173,163,228,184,141,233,148,153,229,133,168,230,150,\n135,229,144,136,229,144,140,228,187,183,229,128,188,229,136,171,228,186,186,231,\n155,145,231,157,163,229,133,183,228,189,147,228,184,150,231,186,170,229,155,162,\n233,152,159,229,136,155,228,184,154,230,137,191,230,139,133,229,162,158,233,149,\n191,230,156,137,228,186,186,228,191,157,230,140,129,229,149,134,229,174,182,231,\n187,180,228,191,174,229,143,176,230,185,190,229,183,166,229,143,179,232,130,161,\n228,187,189,231,173,148,230,161,136,229,174,158,233,153,133,231,148,181,228,191,\n161,231,187,143,231,144,134,231,148,159,229,145,189,229,174,163,228,188,160,228,\n187,187,229,138,161,230,173,163,229,188,143,231,137,185,232,137,178,228,184,139,\n230,157,165,229,141,143,228,188,154,229,143,170,232,131,189,229,189,147,231,132,\n182,233,135,141,230,150,176,229,133,167,229,174,185,230,140,135,229,175,188,232,\n191,144,232,161,140,230,151,165,229,191,151,232,179,163,229,174,182,232,182,133,\n232,191,135,229,156,159,229,156,176,230,181,153,230,177,159,230,148,175,228,187,\n152,230,142,168,229,135,186,231,171,153,233,149,191,230,157,173,229,183,158,230,\n137,167,232,161,140,229,136,182,233,128,160,228,185,139,228,184,128,230,142,168,\n229,185,191,231,142,176,229,156,186,230,143,143,232,191,176,229,143,152,229,140,\n150,228,188,160,231,187,159,230,173,140,230,137,139,228,191,157,233,153,169,232,\n175,190,231,168,139,229,140,187,231,150,151,231,187,143,232,191,135,232,191,135,\n229,142,187,228,185,139,229,137,141,230,148,182,229,133,165,229,185,180,229,186,\n166,230,157,130,229,191,151,231,190,142,228,184,189,230,156,128,233,171,152,231,\n153,187,233,153,134,230,156,170,230,157,165,229,138,160,229,183,165,229,133,141,\n232,180,163,230,149,153,231,168,139,231,137,136,229,157,151,232,186,171,228,189,\n147,233,135,141,229,186,134,229,135,186,229,148,174,230,136,144,230,156,172,229,\n189,162,229,188,143,229,156,159,232,177,134,229,135,186,229,131,185,228,184,156,\n230,150,185,233,130,174,231,174,177,229,141,151,228,186,172,230,177,130,232,129,\n140,229,143,150,229,190,151,232,129,140,228,189,141,231,155,184,228,191,161,233,\n161,181,233,157,162,229,136,134,233,146,159,231,189,145,233,161,181,231,161,174,\n229,174,154,229,155,190,228,190,139,231,189,145,229,157,128,231,167,175,230,158,\n129,233,148,153,232,175,175,231,155,174,231,154,132,229,174,157,232,180,157,230,\n156,186,229,133,179,233,163,142,233,153,169,230,142,136,230,157,131,231,151,133,\n230,175,146,229,174,160,231,137,169,233,153,164,228,186,134,232,169,149,232,171,\n150,231,150,190,231,151,133,229,143,138,230,151,182,230,177,130,232,180,173,231,\n171,153,231,130,185,229,132,191,231,171,165,230,175,143,229,164,169,228,184,173,\n229,164,174,232,174,164,232,175,134,230,175,143,228,184,170,229,164,169,230,180,\n165,229,173,151,228,189,147,229,143,176,231,129,163,231,187,180,230,138,164,230,\n156,172,233,161,181,228,184,170,230,128,167,229,174,152,230,150,185,229,184,184,\n232,167,129,231,155,184,230,156,186,230,136,152,231,149,165,229,186,148,229,189,\n147,229,190,139,229,184,136,230,150,185,228,190,191,230,160,161,229,155,173,232,\n130,161,229,184,130,230,136,191,229,177,139,230,160,143,231,155,174,229,145,152,\n229,183,165,229,175,188,232,135,180,231,170,129,231,132,182,233,129,147,229,133,\n183,230,156,172,231,189,145,231,187,147,229,144,136,230,161,163,230,161,136,229,\n138,179,229,138,168,229,143,166,229,164,150,231,190,142,229,133,131,229,188,149,\n232,181,183,230,148,185,229,143,152,231,172,172,229,155,155,228,188,154,232,174,\n161,232,170,170,230,152,142,233,154,144,231,167,129,229,174,157,229,174,157,232,\n167,132,232,140,131,230,182,136,232,180,185,229,133,177,229,144,140,229,191,152,\n232,174,176,228,189,147,231,179,187,229,184,166,230,157,165,229,144,141,229,173,\n151,231,153,188,232,161,168,229,188,128,230,148,190,229,138,160,231,155,159,229,\n143,151,229,136,176,228,186,140,230,137,139,229,164,167,233,135,143,230,136,144,\n228,186,186,230,149,176,233,135,143,229,133,177,228,186,171,229,140,186,229,159,\n159,229,165,179,229,173,169,229,142,159,229,136,153,230,137,128,229,156,168,231,\n187,147,230,157,159,233,128,154,228,191,161,232,182,133,231,186,167,233,133,141,\n231,189,174,229,189,147,230,151,182,228,188,152,231,167,128,230,128,167,230,132,\n159,230,136,191,228,186,167,233,129,138,230,136,178,229,135,186,229,143,163,230,\n143,144,228,186,164,229,176,177,228,184,154,228,191,157,229,129,165,231,168,139,\n229,186,166,229,143,130,230,149,176,228,186,139,228,184,154,230,149,180,228,184,\n170,229,177,177,228,184,156,230,131,133,230,132,159,231,137,185,230,174,138,229,\n136,134,233,161,158,230,144,156,229,176,139,229,177,158,228,186,142,233,151,168,\n230,136,183,232,180,162,229,138,161,229,163,176,233,159,179,229,143,138,229,133,\n182,232,180,162,231,187,143,229,157,154,230,140,129,229,185,178,233,131,168,230,\n136,144,231,171,139,229,136,169,231,155,138,232,128,131,232,153,145,230,136,144,\n233,131,189,229,140,133,232,163,133,231,148,168,230,136,182,230,175,148,232,181,\n155,230,150,135,230,152,142,230,139,155,229,149,134,229,174,140,230,149,180,231,\n156,159,230,152,175,231,156,188,231,157,155,228,188,153,228,188,180,229,168,129,\n230,156,155,233,162,134,229,159,159,229,141,171,231,148,159,228,188,152,230,131,\n160,232,171,150,229,163,135,229,133,172,229,133,177,232,137,175,229,165,189,229,\n133,133,229,136,134,231,172,166,229,144,136,233,153,132,228,187,182,231,137,185,\n231,130,185,228,184,141,229,143,175,232,139,177,230,150,135,232,181,132,228,186,\n167,230,160,185,230,156,172,230,152,142,230,152,190,229,175,134,231,162,188,229,\n133,172,228,188,151,230,176,145,230,151,143,230,155,180,229,138,160,228,186,171,\n229,143,151,229,144,140,229,173,166,229,144,175,229,138,168,233,128,130,229,144,\n136,229,142,159,230,157,165,233,151,174,231,173,148,230,156,172,230,150,135,231,\n190,142,233,163,159,231,187,191,232,137,178,231,168,179,229,174,154,231,187,136,\n228,186,142,231,148,159,231,137,169,228,190,155,230,177,130,230,144,156,231,139,\n144,229,138,155,233,135,143,228,184,165,233,135,141,230,176,184,232,191,156,229,\n134,153,231,156,159,230,156,137,233,153,144,231,171,158,228,186,137,229,175,185,\n232,177,161,232,180,185,231,148,168,228,184,141,229,165,189,231,187,157,229,175,\n185,229,141,129,229,136,134,228,191,131,232,191,155,231,130,185,232,175,132,229,\n189,177,233,159,179,228,188,152,229,138,191,228,184,141,229,176,145,230,172,163,\n232,181,143,229,185,182,228,184,148,230,156,137,231,130,185,230,150,185,229,144,\n145,229,133,168,230,150,176,228,191,161,231,148,168,232,174,190,230,150,189,229,\n189,162,232,177,161,232,181,132,230,160,188,231,170,129,231,160,180,233,154,143,\n231,157,128,233,135,141,229,164,167,228,186,142,230,152,175,230,175,149,228,184,\n154,230,153,186,232,131,189,229,140,150,229,183,165,229,174,140,231,190,142,229,\n149,134,229,159,142,231,187,159,228,184,128,229,135,186,231,137,136,230,137,147,\n233,128,160,231,148,162,229,147,129,230,166,130,229,134,181,231,148,168,228,186,\n142,228,191,157,231,149,153,229,155,160,231,180,160,228,184,173,229,156,139,229,\n173,152,229,130,168,232,180,180,229,155,190,230,156,128,230,132,155,233,149,191,\n230,156,159,229,143,163,228,187,183,231,144,134,232,180,162,229,159,186,229,156,\n176,229,174,137,230,142,146,230,173,166,230,177,137,233,135,140,233,157,162,229,\n136,155,229,187,186,229,164,169,231,169,186,233,166,150,229,133,136,229,174,140,\n229,150,132,233,169,177,229,138,168,228,184,139,233,157,162,228,184,141,229,134,\n141,232,175,154,228,191,161,230,132,143,228,185,137,233,152,179,229,133,137,232,\n139,177,229,155,189,230,188,130,228,186,174,229,134,155,228,186,139,231,142,169,\n229,174,182,231,190,164,228,188,151,229,134,156,230,176,145,229,141,179,229,143,\n175,229,144,141,231,168,177,229,174,182,229,133,183,229,138,168,231,148,187,230,\n131,179,229,136,176,230,179,168,230,152,142,229,176,143,229,173,166,230,128,167,\n232,131,189,232,128,131,231,160,148,231,161,172,228,187,182,232,167,130,231,156,\n139,230,184,133,230,165,154,230,144,158,231,172,145,233,166,150,233,160,129,233,\n187,132,233,135,145,233,128,130,231,148,168,230,177,159,232,139,143,231,156,159,\n229,174,158,228,184,187,231,174,161,233,152,182,230,174,181,232,168,187,229,134,\n138,231,191,187,232,175,145,230,157,131,229,136,169,229,129,154,229,165,189,228,\n188,188,228,185,142,233,128,154,232,174,175,230,150,189,229,183,165,231,139,128,\n230,133,139,228,185,159,232,174,184,231,142,175,228,191,157,229,159,185,229,133,\n187,230,166,130,229,191,181,229,164,167,229,158,139,230,156,186,231,165,168,231,\n144,134,232,167,163,229,140,191,229,144,141,99,117,97,110,100,111,101,110,118,\n105,97,114,109,97,100,114,105,100,98,117,115,99,97,114,105,110,105,99,105,111,\n116,105,101,109,112,111,112,111,114,113,117,101,99,117,101,110,116,97,101,115,\n116,97,100,111,112,117,101,100,101,110,106,117,101,103,111,115,99,111,110,116,\n114,97,101,115,116,195,161,110,110,111,109,98,114,101,116,105,101,110,101,110,\n112,101,114,102,105,108,109,97,110,101,114,97,97,109,105,103,111,115,99,105,117,\n100,97,100,99,101,110,116,114,111,97,117,110,113,117,101,112,117,101,100,101,115\n,100,101,110,116,114,111,112,114,105,109,101,114,112,114,101,99,105,111,115,101,\n103,195,186,110,98,117,101,110,111,115,118,111,108,118,101,114,112,117,110,116,\n111,115,115,101,109,97,110,97,104,97,98,195,173,97,97,103,111,115,116,111,110,\n117,101,118,111,115,117,110,105,100,111,115,99,97,114,108,111,115,101,113,117,\n105,112,111,110,105,195,177,111,115,109,117,99,104,111,115,97,108,103,117,110,97\n,99,111,114,114,101,111,105,109,97,103,101,110,112,97,114,116,105,114,97,114,114\n,105,98,97,109,97,114,195,173,97,104,111,109,98,114,101,101,109,112,108,101,111,\n118,101,114,100,97,100,99,97,109,98,105,111,109,117,99,104,97,115,102,117,101,\n114,111,110,112,97,115,97,100,111,108,195,173,110,101,97,112,97,114,101,99,101,\n110,117,101,118,97,115,99,117,114,115,111,115,101,115,116,97,98,97,113,117,105,\n101,114,111,108,105,98,114,111,115,99,117,97,110,116,111,97,99,99,101,115,111,\n109,105,103,117,101,108,118,97,114,105,111,115,99,117,97,116,114,111,116,105,101\n,110,101,115,103,114,117,112,111,115,115,101,114,195,161,110,101,117,114,111,112\n,97,109,101,100,105,111,115,102,114,101,110,116,101,97,99,101,114,99,97,100,101,\n109,195,161,115,111,102,101,114,116,97,99,111,99,104,101,115,109,111,100,101,108\n,111,105,116,97,108,105,97,108,101,116,114,97,115,97,108,103,195,186,110,99,111,\n109,112,114,97,99,117,97,108,101,115,101,120,105,115,116,101,99,117,101,114,112,\n111,115,105,101,110,100,111,112,114,101,110,115,97,108,108,101,103,97,114,118,\n105,97,106,101,115,100,105,110,101,114,111,109,117,114,99,105,97,112,111,100,114\n,195,161,112,117,101,115,116,111,100,105,97,114,105,111,112,117,101,98,108,111,\n113,117,105,101,114,101,109,97,110,117,101,108,112,114,111,112,105,111,99,114,\n105,115,105,115,99,105,101,114,116,111,115,101,103,117,114,111,109,117,101,114,\n116,101,102,117,101,110,116,101,99,101,114,114,97,114,103,114,97,110,100,101,101\n,102,101,99,116,111,112,97,114,116,101,115,109,101,100,105,100,97,112,114,111,\n112,105,97,111,102,114,101,99,101,116,105,101,114,114,97,101,45,109,97,105,108,\n118,97,114,105,97,115,102,111,114,109,97,115,102,117,116,117,114,111,111,98,106,\n101,116,111,115,101,103,117,105,114,114,105,101,115,103,111,110,111,114,109,97,\n115,109,105,115,109,111,115,195,186,110,105,99,111,99,97,109,105,110,111,115,105\n,116,105,111,115,114,97,122,195,179,110,100,101,98,105,100,111,112,114,117,101,\n98,97,116,111,108,101,100,111,116,101,110,195,173,97,106,101,115,195,186,115,101\n,115,112,101,114,111,99,111,99,105,110,97,111,114,105,103,101,110,116,105,101,\n110,100,97,99,105,101,110,116,111,99,195,161,100,105,122,104,97,98,108,97,114,\n115,101,114,195,173,97,108,97,116,105,110,97,102,117,101,114,122,97,101,115,116,\n105,108,111,103,117,101,114,114,97,101,110,116,114,97,114,195,169,120,105,116,\n111,108,195,179,112,101,122,97,103,101,110,100,97,118,195,173,100,101,111,101,\n118,105,116,97,114,112,97,103,105,110,97,109,101,116,114,111,115,106,97,118,105,\n101,114,112,97,100,114,101,115,102,195,161,99,105,108,99,97,98,101,122,97,195,\n161,114,101,97,115,115,97,108,105,100,97,101,110,118,195,173,111,106,97,112,195,\n179,110,97,98,117,115,111,115,98,105,101,110,101,115,116,101,120,116,111,115,108\n,108,101,118,97,114,112,117,101,100,97,110,102,117,101,114,116,101,99,111,109,\n195,186,110,99,108,97,115,101,115,104,117,109,97,110,111,116,101,110,105,100,111\n,98,105,108,98,97,111,117,110,105,100,97,100,101,115,116,195,161,115,101,100,105\n,116,97,114,99,114,101,97,100,111,208,180,208,187,209,143,209,135,209,130,208,\n190,208,186,208,176,208,186,208,184,208,187,208,184,209,141,209,130,208,190,208,\n178,209,129,208,181,208,181,208,179,208,190,208,191,209,128,208,184,209,130,208,\n176,208,186,208,181,209,137,208,181,209,131,208,182,208,181,208,154,208,176,208,\n186,208,177,208,181,208,183,208,177,209,139,208,187,208,190,208,189,208,184,208,\n146,209,129,208,181,208,191,208,190,208,180,208,173,209,130,208,190,209,130,208,\n190,208,188,209,135,208,181,208,188,208,189,208,181,209,130,208,187,208,181,209,\n130,209,128,208,176,208,183,208,190,208,189,208,176,208,179,208,180,208,181,208,\n188,208,189,208,181,208,148,208,187,209,143,208,159,209,128,208,184,208,189,208,\n176,209,129,208,189,208,184,209,133,209,130,208,181,208,188,208,186,209,130,208,\n190,208,179,208,190,208,180,208,178,208,190,209,130,209,130,208,176,208,188,208,\n161,208,168,208,144,208,188,208,176,209,143,208,167,209,130,208,190,208,178,208,\n176,209,129,208,178,208,176,208,188,208,181,208,188,209,131,208,162,208,176,208,\n186,208,180,208,178,208,176,208,189,208,176,208,188,209,141,209,130,208,184,209,\n141,209,130,209,131,208,146,208,176,208,188,209,130,208,181,209,133,208,191,209,\n128,208,190,209,130,209,131,209,130,208,189,208,176,208,180,208,180,208,189,209,\n143,208,146,208,190,209,130,209,130,209,128,208,184,208,189,208,181,208,185,208,\n146,208,176,209,129,208,189,208,184,208,188,209,129,208,176,208,188,209,130,208,\n190,209,130,209,128,209,131,208,177,208,158,208,189,208,184,208,188,208,184,209,\n128,208,189,208,181,208,181,208,158,208,158,208,158,208,187,208,184,209,134,209,\n141,209,130,208,176,208,158,208,189,208,176,208,189,208,181,208,188,208,180,208,\n190,208,188,208,188,208,190,208,185,208,180,208,178,208,181,208,190,208,189,208,\n190,209,129,209,131,208,180,224,164,149,224,165,135,224,164,185,224,165,136,224,\n164,149,224,165,128,224,164,184,224,165,135,224,164,149,224,164,190,224,164,149,\n224,165,139,224,164,148,224,164,176,224,164,170,224,164,176,224,164,168,224,165,\n135,224,164,143,224,164,149,224,164,149,224,164,191,224,164,173,224,165,128,224,\n164,135,224,164,184,224,164,149,224,164,176,224,164,164,224,165,139,224,164,185,\n224,165,139,224,164,134,224,164,170,224,164,185,224,165,128,224,164,175,224,164,\n185,224,164,175,224,164,190,224,164,164,224,164,149,224,164,165,224,164,190,106,\n97,103,114,97,110,224,164,134,224,164,156,224,164,156,224,165,139,224,164,133,\n224,164,172,224,164,166,224,165,139,224,164,151,224,164,136,224,164,156,224,164,\n190,224,164,151,224,164,143,224,164,185,224,164,174,224,164,135,224,164,168,224,\n164,181,224,164,185,224,164,175,224,165,135,224,164,165,224,165,135,224,164,165,\n224,165,128,224,164,152,224,164,176,224,164,156,224,164,172,224,164,166,224,165,\n128,224,164,149,224,164,136,224,164,156,224,165,128,224,164,181,224,165,135,224,\n164,168,224,164,136,224,164,168,224,164,143,224,164,185,224,164,176,224,164,137,\n224,164,184,224,164,174,224,165,135,224,164,149,224,164,174,224,164,181,224,165,\n139,224,164,178,224,165,135,224,164,184,224,164,172,224,164,174,224,164,136,224,\n164,166,224,165,135,224,164,147,224,164,176,224,164,134,224,164,174,224,164,172,\n224,164,184,224,164,173,224,164,176,224,164,172,224,164,168,224,164,154,224,164,\n178,224,164,174,224,164,168,224,164,134,224,164,151,224,164,184,224,165,128,224,\n164,178,224,165,128,216,185,217,132,217,137,216,165,217,132,217,137,217,135,216,\n176,216,167,216,162,216,174,216,177,216,185,216,175,216,175,216,167,217,132,217,\n137,217,135,216,176,217,135,216,181,217,136,216,177,216,186,217,138,216,177,217,\n131,216,167,217,134,217,136,217,132,216,167,216,168,217,138,217,134,216,185,216,\n177,216,182,216,176,217,132,217,131,217,135,217,134,216,167,217,138,217,136,217,\n133,217,130,216,167,217,132,216,185,217,132,217,138,216,167,217,134,216,167,217,\n132,217,131,217,134,216,173,216,170,217,137,217,130,216,168,217,132,217,136,216,\n173,216,169,216,167,216,174,216,177,217,129,217,130,216,183,216,185,216,168,216,\n175,216,177,217,131,217,134,216,165,216,176,216,167,217,131,217,133,216,167,216,\n167,216,173,216,175,216,165,217,132,216,167,217,129,217,138,217,135,216,168,216,\n185,216,182,217,131,217,138,217,129,216,168,216,173,216,171,217,136,217,133,217,\n134,217,136,217,135,217,136,216,163,217,134,216,167,216,172,216,175,216,167,217,\n132,217,135,216,167,216,179,217,132,217,133,216,185,217,134,216,175,217,132,217,\n138,216,179,216,185,216,168,216,177,216,181,217,132,217,137,217,133,217,134,216,\n176,216,168,217,135,216,167,216,163,217,134,217,135,217,133,216,171,217,132,217,\n131,217,134,216,170,216,167,217,132,216,167,216,173,217,138,216,171,217,133,216,\n181,216,177,216,180,216,177,216,173,216,173,217,136,217,132,217,136,217,129,217,\n138,216,167,216,176,216,167,217,132,217,131,217,132,217,133,216,177,216,169,216,\n167,217,134,216,170,216,167,217,132,217,129,216,163,216,168,217,136,216,174,216,\n167,216,181,216,163,217,134,216,170,216,167,217,134,217,135,216,167,217,132,217,\n138,216,185,216,182,217,136,217,136,217,130,216,175,216,167,216,168,217,134,216,\n174,217,138,216,177,216,168,217,134,216,170,217,132,217,131,217,133,216,180,216,\n167,216,161,217,136,217,135,217,138,216,167,216,168,217,136,217,130,216,181,216,\n181,217,136,217,133,216,167,216,177,217,130,217,133,216,163,216,173,216,175,217,\n134,216,173,217,134,216,185,216,175,217,133,216,177,216,163,217,138,216,167,216,\n173,216,169,217,131,216,170,216,168,216,175,217,136,217,134,217,138,216,172,216,\n168,217,133,217,134,217,135,216,170,216,173,216,170,216,172,217,135,216,169,216,\n179,217,134,216,169,217,138,216,170,217,133,217,131,216,177,216,169,216,186,216,\n178,216,169,217,134,217,129,216,179,216,168,217,138,216,170,217,132,217,132,217,\n135,217,132,217,134,216,167,216,170,217,132,217,131,217,130,217,132,216,168,217,\n132,217,133,216,167,216,185,217,134,217,135,216,163,217,136,217,132,216,180,217,\n138,216,161,217,134,217,136,216,177,216,163,217,133,216,167,217,129,217,138,217,\n131,216,168,217,131,217,132,216,176,216,167,216,170,216,177,216,170,216,168,216,\n168,216,163,217,134,217,135,217,133,216,179,216,167,217,134,217,131,216,168,217,\n138,216,185,217,129,217,130,216,175,216,173,216,179,217,134,217,132,217,135,217,\n133,216,180,216,185,216,177,216,163,217,135,217,132,216,180,217,135,216,177,217,\n130,216,183,216,177,216,183,217,132,216,168,112,114,111,102,105,108,101,115,101,\n114,118,105,99,101,100,101,102,97,117,108,116,104,105,109,115,101,108,102,100,\n101,116,97,105,108,115,99,111,110,116,101,110,116,115,117,112,112,111,114,116,\n115,116,97,114,116,101,100,109,101,115,115,97,103,101,115,117,99,99,101,115,115,\n102,97,115,104,105,111,110,60,116,105,116,108,101,62,99,111,117,110,116,114,121,\n97,99,99,111,117,110,116,99,114,101,97,116,101,100,115,116,111,114,105,101,115,\n114,101,115,117,108,116,115,114,117,110,110,105,110,103,112,114,111,99,101,115,\n115,119,114,105,116,105,110,103,111,98,106,101,99,116,115,118,105,115,105,98,108\n,101,119,101,108,99,111,109,101,97,114,116,105,99,108,101,117,110,107,110,111,\n119,110,110,101,116,119,111,114,107,99,111,109,112,97,110,121,100,121,110,97,109\n,105,99,98,114,111,119,115,101,114,112,114,105,118,97,99,121,112,114,111,98,108,\n101,109,83,101,114,118,105,99,101,114,101,115,112,101,99,116,100,105,115,112,108\n,97,121,114,101,113,117,101,115,116,114,101,115,101,114,118,101,119,101,98,115,\n105,116,101,104,105,115,116,111,114,121,102,114,105,101,110,100,115,111,112,116,\n105,111,110,115,119,111,114,107,105,110,103,118,101,114,115,105,111,110,109,105,\n108,108,105,111,110,99,104,97,110,110,101,108,119,105,110,100,111,119,46,97,100,\n100,114,101,115,115,118,105,115,105,116,101,100,119,101,97,116,104,101,114,99,\n111,114,114,101,99,116,112,114,111,100,117,99,116,101,100,105,114,101,99,116,102\n,111,114,119,97,114,100,121,111,117,32,99,97,110,114,101,109,111,118,101,100,115\n,117,98,106,101,99,116,99,111,110,116,114,111,108,97,114,99,104,105,118,101,99,\n117,114,114,101,110,116,114,101,97,100,105,110,103,108,105,98,114,97,114,121,108\n,105,109,105,116,101,100,109,97,110,97,103,101,114,102,117,114,116,104,101,114,\n115,117,109,109,97,114,121,109,97,99,104,105,110,101,109,105,110,117,116,101,115\n,112,114,105,118,97,116,101,99,111,110,116,101,120,116,112,114,111,103,114,97,\n109,115,111,99,105,101,116,121,110,117,109,98,101,114,115,119,114,105,116,116,\n101,110,101,110,97,98,108,101,100,116,114,105,103,103,101,114,115,111,117,114,99\n,101,115,108,111,97,100,105,110,103,101,108,101,109,101,110,116,112,97,114,116,\n110,101,114,102,105,110,97,108,108,121,112,101,114,102,101,99,116,109,101,97,110\n,105,110,103,115,121,115,116,101,109,115,107,101,101,112,105,110,103,99,117,108,\n116,117,114,101,38,113,117,111,116,59,44,106,111,117,114,110,97,108,112,114,111,\n106,101,99,116,115,117,114,102,97,99,101,115,38,113,117,111,116,59,101,120,112,\n105,114,101,115,114,101,118,105,101,119,115,98,97,108,97,110,99,101,69,110,103,\n108,105,115,104,67,111,110,116,101,110,116,116,104,114,111,117,103,104,80,108,\n101,97,115,101,32,111,112,105,110,105,111,110,99,111,110,116,97,99,116,97,118,\n101,114,97,103,101,112,114,105,109,97,114,121,118,105,108,108,97,103,101,83,112,\n97,110,105,115,104,103,97,108,108,101,114,121,100,101,99,108,105,110,101,109,101\n,101,116,105,110,103,109,105,115,115,105,111,110,112,111,112,117,108,97,114,113,\n117,97,108,105,116,121,109,101,97,115,117,114,101,103,101,110,101,114,97,108,115\n,112,101,99,105,101,115,115,101,115,115,105,111,110,115,101,99,116,105,111,110,\n119,114,105,116,101,114,115,99,111,117,110,116,101,114,105,110,105,116,105,97,\n108,114,101,112,111,114,116,115,102,105,103,117,114,101,115,109,101,109,98,101,\n114,115,104,111,108,100,105,110,103,100,105,115,112,117,116,101,101,97,114,108,\n105,101,114,101,120,112,114,101,115,115,100,105,103,105,116,97,108,112,105,99,\n116,117,114,101,65,110,111,116,104,101,114,109,97,114,114,105,101,100,116,114,97\n,102,102,105,99,108,101,97,100,105,110,103,99,104,97,110,103,101,100,99,101,110,\n116,114,97,108,118,105,99,116,111,114,121,105,109,97,103,101,115,47,114,101,97,\n115,111,110,115,115,116,117,100,105,101,115,102,101,97,116,117,114,101,108,105,\n115,116,105,110,103,109,117,115,116,32,98,101,115,99,104,111,111,108,115,86,101,\n114,115,105,111,110,117,115,117,97,108,108,121,101,112,105,115,111,100,101,112,\n108,97,121,105,110,103,103,114,111,119,105,110,103,111,98,118,105,111,117,115,\n111,118,101,114,108,97,121,112,114,101,115,101,110,116,97,99,116,105,111,110,115\n,60,47,117,108,62,13,10,119,114,97,112,112,101,114,97,108,114,101,97,100,121,99,\n101,114,116,97,105,110,114,101,97,108,105,116,121,115,116,111,114,97,103,101,97,\n110,111,116,104,101,114,100,101,115,107,116,111,112,111,102,102,101,114,101,100,\n112,97,116,116,101,114,110,117,110,117,115,117,97,108,68,105,103,105,116,97,108,\n99,97,112,105,116,97,108,87,101,98,115,105,116,101,102,97,105,108,117,114,101,99\n,111,110,110,101,99,116,114,101,100,117,99,101,100,65,110,100,114,111,105,100,\n100,101,99,97,100,101,115,114,101,103,117,108,97,114,32,38,97,109,112,59,32,97,\n110,105,109,97,108,115,114,101,108,101,97,115,101,65,117,116,111,109,97,116,103,\n101,116,116,105,110,103,109,101,116,104,111,100,115,110,111,116,104,105,110,103,\n80,111,112,117,108,97,114,99,97,112,116,105,111,110,108,101,116,116,101,114,115,\n99,97,112,116,117,114,101,115,99,105,101,110,99,101,108,105,99,101,110,115,101,\n99,104,97,110,103,101,115,69,110,103,108,97,110,100,61,49,38,97,109,112,59,72,\n105,115,116,111,114,121,32,61,32,110,101,119,32,67,101,110,116,114,97,108,117,\n112,100,97,116,101,100,83,112,101,99,105,97,108,78,101,116,119,111,114,107,114,\n101,113,117,105,114,101,99,111,109,109,101,110,116,119,97,114,110,105,110,103,67\n,111,108,108,101,103,101,116,111,111,108,98,97,114,114,101,109,97,105,110,115,98\n,101,99,97,117,115,101,101,108,101,99,116,101,100,68,101,117,116,115,99,104,102,\n105,110,97,110,99,101,119,111,114,107,101,114,115,113,117,105,99,107,108,121,98,\n101,116,119,101,101,110,101,120,97,99,116,108,121,115,101,116,116,105,110,103,\n100,105,115,101,97,115,101,83,111,99,105,101,116,121,119,101,97,112,111,110,115,\n101,120,104,105,98,105,116,38,108,116,59,33,45,45,67,111,110,116,114,111,108,99,\n108,97,115,115,101,115,99,111,118,101,114,101,100,111,117,116,108,105,110,101,97\n,116,116,97,99,107,115,100,101,118,105,99,101,115,40,119,105,110,100,111,119,112\n,117,114,112,111,115,101,116,105,116,108,101,61,34,77,111,98,105,108,101,32,107,\n105,108,108,105,110,103,115,104,111,119,105,110,103,73,116,97,108,105,97,110,100\n,114,111,112,112,101,100,104,101,97,118,105,108,121,101,102,102,101,99,116,115,\n45,49,39,93,41,59,10,99,111,110,102,105,114,109,67,117,114,114,101,110,116,97,\n100,118,97,110,99,101,115,104,97,114,105,110,103,111,112,101,110,105,110,103,100\n,114,97,119,105,110,103,98,105,108,108,105,111,110,111,114,100,101,114,101,100,\n71,101,114,109,97,110,121,114,101,108,97,116,101,100,60,47,102,111,114,109,62,\n105,110,99,108,117,100,101,119,104,101,116,104,101,114,100,101,102,105,110,101,\n100,83,99,105,101,110,99,101,99,97,116,97,108,111,103,65,114,116,105,99,108,101,\n98,117,116,116,111,110,115,108,97,114,103,101,115,116,117,110,105,102,111,114,\n109,106,111,117,114,110,101,121,115,105,100,101,98,97,114,67,104,105,99,97,103,\n111,104,111,108,105,100,97,121,71,101,110,101,114,97,108,112,97,115,115,97,103,\n101,44,38,113,117,111,116,59,97,110,105,109,97,116,101,102,101,101,108,105,110,\n103,97,114,114,105,118,101,100,112,97,115,115,105,110,103,110,97,116,117,114,97,\n108,114,111,117,103,104,108,121,46,10,10,84,104,101,32,98,117,116,32,110,111,116\n,100,101,110,115,105,116,121,66,114,105,116,97,105,110,67,104,105,110,101,115,\n101,108,97,99,107,32,111,102,116,114,105,98,117,116,101,73,114,101,108,97,110,\n100,34,32,100,97,116,97,45,102,97,99,116,111,114,115,114,101,99,101,105,118,101,\n116,104,97,116,32,105,115,76,105,98,114,97,114,121,104,117,115,98,97,110,100,105\n,110,32,102,97,99,116,97,102,102,97,105,114,115,67,104,97,114,108,101,115,114,97\n,100,105,99,97,108,98,114,111,117,103,104,116,102,105,110,100,105,110,103,108,97\n,110,100,105,110,103,58,108,97,110,103,61,34,114,101,116,117,114,110,32,108,101,\n97,100,101,114,115,112,108,97,110,110,101,100,112,114,101,109,105,117,109,112,97\n,99,107,97,103,101,65,109,101,114,105,99,97,69,100,105,116,105,111,110,93,38,113\n,117,111,116,59,77,101,115,115,97,103,101,110,101,101,100,32,116,111,118,97,108,\n117,101,61,34,99,111,109,112,108,101,120,108,111,111,107,105,110,103,115,116,97,\n116,105,111,110,98,101,108,105,101,118,101,115,109,97,108,108,101,114,45,109,111\n,98,105,108,101,114,101,99,111,114,100,115,119,97,110,116,32,116,111,107,105,110\n,100,32,111,102,70,105,114,101,102,111,120,121,111,117,32,97,114,101,115,105,109\n,105,108,97,114,115,116,117,100,105,101,100,109,97,120,105,109,117,109,104,101,\n97,100,105,110,103,114,97,112,105,100,108,121,99,108,105,109,97,116,101,107,105,\n110,103,100,111,109,101,109,101,114,103,101,100,97,109,111,117,110,116,115,102,\n111,117,110,100,101,100,112,105,111,110,101,101,114,102,111,114,109,117,108,97,\n100,121,110,97,115,116,121,104,111,119,32,116,111,32,83,117,112,112,111,114,116,\n114,101,118,101,110,117,101,101,99,111,110,111,109,121,82,101,115,117,108,116,\n115,98,114,111,116,104,101,114,115,111,108,100,105,101,114,108,97,114,103,101,\n108,121,99,97,108,108,105,110,103,46,38,113,117,111,116,59,65,99,99,111,117,110,\n116,69,100,119,97,114,100,32,115,101,103,109,101,110,116,82,111,98,101,114,116,\n32,101,102,102,111,114,116,115,80,97,99,105,102,105,99,108,101,97,114,110,101,\n100,117,112,32,119,105,116,104,104,101,105,103,104,116,58,119,101,32,104,97,118,\n101,65,110,103,101,108,101,115,110,97,116,105,111,110,115,95,115,101,97,114,99,\n104,97,112,112,108,105,101,100,97,99,113,117,105,114,101,109,97,115,115,105,118,\n101,103,114,97,110,116,101,100,58,32,102,97,108,115,101,116,114,101,97,116,101,\n100,98,105,103,103,101,115,116,98,101,110,101,102,105,116,100,114,105,118,105,\n110,103,83,116,117,100,105,101,115,109,105,110,105,109,117,109,112,101,114,104,\n97,112,115,109,111,114,110,105,110,103,115,101,108,108,105,110,103,105,115,32,\n117,115,101,100,114,101,118,101,114,115,101,118,97,114,105,97,110,116,32,114,111\n,108,101,61,34,109,105,115,115,105,110,103,97,99,104,105,101,118,101,112,114,111\n,109,111,116,101,115,116,117,100,101,110,116,115,111,109,101,111,110,101,101,120\n,116,114,101,109,101,114,101,115,116,111,114,101,98,111,116,116,111,109,58,101,\n118,111,108,118,101,100,97,108,108,32,116,104,101,115,105,116,101,109,97,112,101\n,110,103,108,105,115,104,119,97,121,32,116,111,32,32,65,117,103,117,115,116,115,\n121,109,98,111,108,115,67,111,109,112,97,110,121,109,97,116,116,101,114,115,109,\n117,115,105,99,97,108,97,103,97,105,110,115,116,115,101,114,118,105,110,103,125,\n41,40,41,59,13,10,112,97,121,109,101,110,116,116,114,111,117,98,108,101,99,111,\n110,99,101,112,116,99,111,109,112,97,114,101,112,97,114,101,110,116,115,112,108,\n97,121,101,114,115,114,101,103,105,111,110,115,109,111,110,105,116,111,114,32,39\n,39,84,104,101,32,119,105,110,110,105,110,103,101,120,112,108,111,114,101,97,100\n,97,112,116,101,100,71,97,108,108,101,114,121,112,114,111,100,117,99,101,97,98,\n105,108,105,116,121,101,110,104,97,110,99,101,99,97,114,101,101,114,115,41,46,32\n,84,104,101,32,99,111,108,108,101,99,116,83,101,97,114,99,104,32,97,110,99,105,\n101,110,116,101,120,105,115,116,101,100,102,111,111,116,101,114,32,104,97,110,\n100,108,101,114,112,114,105,110,116,101,100,99,111,110,115,111,108,101,69,97,115\n,116,101,114,110,101,120,112,111,114,116,115,119,105,110,100,111,119,115,67,104,\n97,110,110,101,108,105,108,108,101,103,97,108,110,101,117,116,114,97,108,115,117\n,103,103,101,115,116,95,104,101,97,100,101,114,115,105,103,110,105,110,103,46,\n104,116,109,108,34,62,115,101,116,116,108,101,100,119,101,115,116,101,114,110,99\n,97,117,115,105,110,103,45,119,101,98,107,105,116,99,108,97,105,109,101,100,74,\n117,115,116,105,99,101,99,104,97,112,116,101,114,118,105,99,116,105,109,115,84,\n104,111,109,97,115,32,109,111,122,105,108,108,97,112,114,111,109,105,115,101,112\n,97,114,116,105,101,115,101,100,105,116,105,111,110,111,117,116,115,105,100,101,\n58,102,97,108,115,101,44,104,117,110,100,114,101,100,79,108,121,109,112,105,99,\n95,98,117,116,116,111,110,97,117,116,104,111,114,115,114,101,97,99,104,101,100,\n99,104,114,111,110,105,99,100,101,109,97,110,100,115,115,101,99,111,110,100,115,\n112,114,111,116,101,99,116,97,100,111,112,116,101,100,112,114,101,112,97,114,101\n,110,101,105,116,104,101,114,103,114,101,97,116,108,121,103,114,101,97,116,101,\n114,111,118,101,114,97,108,108,105,109,112,114,111,118,101,99,111,109,109,97,110\n,100,115,112,101,99,105,97,108,115,101,97,114,99,104,46,119,111,114,115,104,105,\n112,102,117,110,100,105,110,103,116,104,111,117,103,104,116,104,105,103,104,101,\n115,116,105,110,115,116,101,97,100,117,116,105,108,105,116,121,113,117,97,114,\n116,101,114,67,117,108,116,117,114,101,116,101,115,116,105,110,103,99,108,101,97\n,114,108,121,101,120,112,111,115,101,100,66,114,111,119,115,101,114,108,105,98,\n101,114,97,108,125,32,99,97,116,99,104,80,114,111,106,101,99,116,101,120,97,109,\n112,108,101,104,105,100,101,40,41,59,70,108,111,114,105,100,97,97,110,115,119,\n101,114,115,97,108,108,111,119,101,100,69,109,112,101,114,111,114,100,101,102,\n101,110,115,101,115,101,114,105,111,117,115,102,114,101,101,100,111,109,83,101,\n118,101,114,97,108,45,98,117,116,116,111,110,70,117,114,116,104,101,114,111,117,\n116,32,111,102,32,33,61,32,110,117,108,108,116,114,97,105,110,101,100,68,101,110\n,109,97,114,107,118,111,105,100,40,48,41,47,97,108,108,46,106,115,112,114,101,\n118,101,110,116,82,101,113,117,101,115,116,83,116,101,112,104,101,110,10,10,87,\n104,101,110,32,111,98,115,101,114,118,101,60,47,104,50,62,13,10,77,111,100,101,\n114,110,32,112,114,111,118,105,100,101,34,32,97,108,116,61,34,98,111,114,100,101\n,114,115,46,10,10,70,111,114,32,10,10,77,97,110,121,32,97,114,116,105,115,116,\n115,112,111,119,101,114,101,100,112,101,114,102,111,114,109,102,105,99,116,105,\n111,110,116,121,112,101,32,111,102,109,101,100,105,99,97,108,116,105,99,107,101,\n116,115,111,112,112,111,115,101,100,67,111,117,110,99,105,108,119,105,116,110,\n101,115,115,106,117,115,116,105,99,101,71,101,111,114,103,101,32,66,101,108,103,\n105,117,109,46,46,46,60,47,97,62,116,119,105,116,116,101,114,110,111,116,97,98,\n108,121,119,97,105,116,105,110,103,119,97,114,102,97,114,101,32,79,116,104,101,\n114,32,114,97,110,107,105,110,103,112,104,114,97,115,101,115,109,101,110,116,105\n,111,110,115,117,114,118,105,118,101,115,99,104,111,108,97,114,60,47,112,62,13,\n10,32,67,111,117,110,116,114,121,105,103,110,111,114,101,100,108,111,115,115,32,\n111,102,106,117,115,116,32,97,115,71,101,111,114,103,105,97,115,116,114,97,110,\n103,101,60,104,101,97,100,62,60,115,116,111,112,112,101,100,49,39,93,41,59,13,10\n,105,115,108,97,110,100,115,110,111,116,97,98,108,101,98,111,114,100,101,114,58,\n108,105,115,116,32,111,102,99,97,114,114,105,101,100,49,48,48,44,48,48,48,60,47,\n104,51,62,10,32,115,101,118,101,114,97,108,98,101,99,111,109,101,115,115,101,108\n,101,99,116,32,119,101,100,100,105,110,103,48,48,46,104,116,109,108,109,111,110,\n97,114,99,104,111,102,102,32,116,104,101,116,101,97,99,104,101,114,104,105,103,\n104,108,121,32,98,105,111,108,111,103,121,108,105,102,101,32,111,102,111,114,32,\n101,118,101,110,114,105,115,101,32,111,102,38,114,97,113,117,111,59,112,108,117,\n115,111,110,101,104,117,110,116,105,110,103,40,116,104,111,117,103,104,68,111,\n117,103,108,97,115,106,111,105,110,105,110,103,99,105,114,99,108,101,115,70,111,\n114,32,116,104,101,65,110,99,105,101,110,116,86,105,101,116,110,97,109,118,101,\n104,105,99,108,101,115,117,99,104,32,97,115,99,114,121,115,116,97,108,118,97,108\n,117,101,32,61,87,105,110,100,111,119,115,101,110,106,111,121,101,100,97,32,115,\n109,97,108,108,97,115,115,117,109,101,100,60,97,32,105,100,61,34,102,111,114,101\n,105,103,110,32,65,108,108,32,114,105,104,111,119,32,116,104,101,68,105,115,112,\n108,97,121,114,101,116,105,114,101,100,104,111,119,101,118,101,114,104,105,100,\n100,101,110,59,98,97,116,116,108,101,115,115,101,101,107,105,110,103,99,97,98,\n105,110,101,116,119,97,115,32,110,111,116,108,111,111,107,32,97,116,99,111,110,\n100,117,99,116,103,101,116,32,116,104,101,74,97,110,117,97,114,121,104,97,112,\n112,101,110,115,116,117,114,110,105,110,103,97,58,104,111,118,101,114,79,110,108\n,105,110,101,32,70,114,101,110,99,104,32,108,97,99,107,105,110,103,116,121,112,\n105,99,97,108,101,120,116,114,97,99,116,101,110,101,109,105,101,115,101,118,101,\n110,32,105,102,103,101,110,101,114,97,116,100,101,99,105,100,101,100,97,114,101,\n32,110,111,116,47,115,101,97,114,99,104,98,101,108,105,101,102,115,45,105,109,97\n,103,101,58,108,111,99,97,116,101,100,115,116,97,116,105,99,46,108,111,103,105,\n110,34,62,99,111,110,118,101,114,116,118,105,111,108,101,110,116,101,110,116,101\n,114,101,100,102,105,114,115,116,34,62,99,105,114,99,117,105,116,70,105,110,108,\n97,110,100,99,104,101,109,105,115,116,115,104,101,32,119,97,115,49,48,112,120,59\n,34,62,97,115,32,115,117,99,104,100,105,118,105,100,101,100,60,47,115,112,97,110\n,62,119,105,108,108,32,98,101,108,105,110,101,32,111,102,97,32,103,114,101,97,\n116,109,121,115,116,101,114,121,47,105,110,100,101,120,46,102,97,108,108,105,110\n,103,100,117,101,32,116,111,32,114,97,105,108,119,97,121,99,111,108,108,101,103,\n101,109,111,110,115,116,101,114,100,101,115,99,101,110,116,105,116,32,119,105,\n116,104,110,117,99,108,101,97,114,74,101,119,105,115,104,32,112,114,111,116,101,\n115,116,66,114,105,116,105,115,104,102,108,111,119,101,114,115,112,114,101,100,\n105,99,116,114,101,102,111,114,109,115,98,117,116,116,111,110,32,119,104,111,32,\n119,97,115,108,101,99,116,117,114,101,105,110,115,116,97,110,116,115,117,105,99,\n105,100,101,103,101,110,101,114,105,99,112,101,114,105,111,100,115,109,97,114,\n107,101,116,115,83,111,99,105,97,108,32,102,105,115,104,105,110,103,99,111,109,\n98,105,110,101,103,114,97,112,104,105,99,119,105,110,110,101,114,115,60,98,114,\n32,47,62,60,98,121,32,116,104,101,32,78,97,116,117,114,97,108,80,114,105,118,97,\n99,121,99,111,111,107,105,101,115,111,117,116,99,111,109,101,114,101,115,111,108\n,118,101,83,119,101,100,105,115,104,98,114,105,101,102,108,121,80,101,114,115,\n105,97,110,115,111,32,109,117,99,104,67,101,110,116,117,114,121,100,101,112,105,\n99,116,115,99,111,108,117,109,110,115,104,111,117,115,105,110,103,115,99,114,105\n,112,116,115,110,101,120,116,32,116,111,98,101,97,114,105,110,103,109,97,112,112\n,105,110,103,114,101,118,105,115,101,100,106,81,117,101,114,121,40,45,119,105,\n100,116,104,58,116,105,116,108,101,34,62,116,111,111,108,116,105,112,83,101,99,\n116,105,111,110,100,101,115,105,103,110,115,84,117,114,107,105,115,104,121,111,\n117,110,103,101,114,46,109,97,116,99,104,40,125,41,40,41,59,10,10,98,117,114,110\n,105,110,103,111,112,101,114,97,116,101,100,101,103,114,101,101,115,115,111,117,\n114,99,101,61,82,105,99,104,97,114,100,99,108,111,115,101,108,121,112,108,97,115\n,116,105,99,101,110,116,114,105,101,115,60,47,116,114,62,13,10,99,111,108,111,\n114,58,35,117,108,32,105,100,61,34,112,111,115,115,101,115,115,114,111,108,108,\n105,110,103,112,104,121,115,105,99,115,102,97,105,108,105,110,103,101,120,101,99\n,117,116,101,99,111,110,116,101,115,116,108,105,110,107,32,116,111,68,101,102,97\n,117,108,116,60,98,114,32,47,62,10,58,32,116,114,117,101,44,99,104,97,114,116,\n101,114,116,111,117,114,105,115,109,99,108,97,115,115,105,99,112,114,111,99,101,\n101,100,101,120,112,108,97,105,110,60,47,104,49,62,13,10,111,110,108,105,110,101\n,46,63,120,109,108,32,118,101,104,101,108,112,105,110,103,100,105,97,109,111,110\n,100,117,115,101,32,116,104,101,97,105,114,108,105,110,101,101,110,100,32,45,45,\n62,41,46,97,116,116,114,40,114,101,97,100,101,114,115,104,111,115,116,105,110,\n103,35,102,102,102,102,102,102,114,101,97,108,105,122,101,86,105,110,99,101,110,\n116,115,105,103,110,97,108,115,32,115,114,99,61,34,47,80,114,111,100,117,99,116,\n100,101,115,112,105,116,101,100,105,118,101,114,115,101,116,101,108,108,105,110,\n103,80,117,98,108,105,99,32,104,101,108,100,32,105,110,74,111,115,101,112,104,32\n,116,104,101,97,116,114,101,97,102,102,101,99,116,115,60,115,116,121,108,101,62,\n97,32,108,97,114,103,101,100,111,101,115,110,39,116,108,97,116,101,114,44,32,69,\n108,101,109,101,110,116,102,97,118,105,99,111,110,99,114,101,97,116,111,114,72,\n117,110,103,97,114,121,65,105,114,112,111,114,116,115,101,101,32,116,104,101,115\n,111,32,116,104,97,116,77,105,99,104,97,101,108,83,121,115,116,101,109,115,80,\n114,111,103,114,97,109,115,44,32,97,110,100,32,32,119,105,100,116,104,61,101,38,\n113,117,111,116,59,116,114,97,100,105,110,103,108,101,102,116,34,62,10,112,101,\n114,115,111,110,115,71,111,108,100,101,110,32,65,102,102,97,105,114,115,103,114,\n97,109,109,97,114,102,111,114,109,105,110,103,100,101,115,116,114,111,121,105,\n100,101,97,32,111,102,99,97,115,101,32,111,102,111,108,100,101,115,116,32,116,\n104,105,115,32,105,115,46,115,114,99,32,61,32,99,97,114,116,111,111,110,114,101,\n103,105,115,116,114,67,111,109,109,111,110,115,77,117,115,108,105,109,115,87,104\n,97,116,32,105,115,105,110,32,109,97,110,121,109,97,114,107,105,110,103,114,101,\n118,101,97,108,115,73,110,100,101,101,100,44,101,113,117,97,108,108,121,47,115,\n104,111,119,95,97,111,117,116,100,111,111,114,101,115,99,97,112,101,40,65,117,\n115,116,114,105,97,103,101,110,101,116,105,99,115,121,115,116,101,109,44,73,110,\n32,116,104,101,32,115,105,116,116,105,110,103,72,101,32,97,108,115,111,73,115,\n108,97,110,100,115,65,99,97,100,101,109,121,10,9,9,60,33,45,45,68,97,110,105,101\n,108,32,98,105,110,100,105,110,103,98,108,111,99,107,34,62,105,109,112,111,115,\n101,100,117,116,105,108,105,122,101,65,98,114,97,104,97,109,40,101,120,99,101,\n112,116,123,119,105,100,116,104,58,112,117,116,116,105,110,103,41,46,104,116,109\n,108,40,124,124,32,91,93,59,10,68,65,84,65,91,32,42,107,105,116,99,104,101,110,\n109,111,117,110,116,101,100,97,99,116,117,97,108,32,100,105,97,108,101,99,116,\n109,97,105,110,108,121,32,95,98,108,97,110,107,39,105,110,115,116,97,108,108,101\n,120,112,101,114,116,115,105,102,40,116,121,112,101,73,116,32,97,108,115,111,38,\n99,111,112,121,59,32,34,62,84,101,114,109,115,98,111,114,110,32,105,110,79,112,\n116,105,111,110,115,101,97,115,116,101,114,110,116,97,108,107,105,110,103,99,111\n,110,99,101,114,110,103,97,105,110,101,100,32,111,110,103,111,105,110,103,106,\n117,115,116,105,102,121,99,114,105,116,105,99,115,102,97,99,116,111,114,121,105,\n116,115,32,111,119,110,97,115,115,97,117,108,116,105,110,118,105,116,101,100,108\n,97,115,116,105,110,103,104,105,115,32,111,119,110,104,114,101,102,61,34,47,34,\n32,114,101,108,61,34,100,101,118,101,108,111,112,99,111,110,99,101,114,116,100,\n105,97,103,114,97,109,100,111,108,108,97,114,115,99,108,117,115,116,101,114,112,\n104,112,63,105,100,61,97,108,99,111,104,111,108,41,59,125,41,40,41,59,117,115,\n105,110,103,32,97,62,60,115,112,97,110,62,118,101,115,115,101,108,115,114,101,\n118,105,118,97,108,65,100,100,114,101,115,115,97,109,97,116,101,117,114,97,110,\n100,114,111,105,100,97,108,108,101,103,101,100,105,108,108,110,101,115,115,119,\n97,108,107,105,110,103,99,101,110,116,101,114,115,113,117,97,108,105,102,121,109\n,97,116,99,104,101,115,117,110,105,102,105,101,100,101,120,116,105,110,99,116,68\n,101,102,101,110,115,101,100,105,101,100,32,105,110,10,9,60,33,45,45,32,99,117,\n115,116,111,109,115,108,105,110,107,105,110,103,76,105,116,116,108,101,32,66,111\n,111,107,32,111,102,101,118,101,110,105,110,103,109,105,110,46,106,115,63,97,114\n,101,32,116,104,101,107,111,110,116,97,107,116,116,111,100,97,121,39,115,46,104,\n116,109,108,34,32,116,97,114,103,101,116,61,119,101,97,114,105,110,103,65,108,\n108,32,82,105,103,59,10,125,41,40,41,59,114,97,105,115,105,110,103,32,65,108,115\n,111,44,32,99,114,117,99,105,97,108,97,98,111,117,116,34,62,100,101,99,108,97,\n114,101,45,45,62,10,60,115,99,102,105,114,101,102,111,120,97,115,32,109,117,99,\n104,97,112,112,108,105,101,115,105,110,100,101,120,44,32,115,44,32,98,117,116,32\n,116,121,112,101,32,61,32,10,13,10,60,33,45,45,116,111,119,97,114,100,115,82,101\n,99,111,114,100,115,80,114,105,118,97,116,101,70,111,114,101,105,103,110,80,114,\n101,109,105,101,114,99,104,111,105,99,101,115,86,105,114,116,117,97,108,114,101,\n116,117,114,110,115,67,111,109,109,101,110,116,80,111,119,101,114,101,100,105,\n110,108,105,110,101,59,112,111,118,101,114,116,121,99,104,97,109,98,101,114,76,\n105,118,105,110,103,32,118,111,108,117,109,101,115,65,110,116,104,111,110,121,\n108,111,103,105,110,34,32,82,101,108,97,116,101,100,69,99,111,110,111,109,121,\n114,101,97,99,104,101,115,99,117,116,116,105,110,103,103,114,97,118,105,116,121,\n108,105,102,101,32,105,110,67,104,97,112,116,101,114,45,115,104,97,100,111,119,\n78,111,116,97,98,108,101,60,47,116,100,62,13,10,32,114,101,116,117,114,110,115,\n116,97,100,105,117,109,119,105,100,103,101,116,115,118,97,114,121,105,110,103,\n116,114,97,118,101,108,115,104,101,108,100,32,98,121,119,104,111,32,97,114,101,\n119,111,114,107,32,105,110,102,97,99,117,108,116,121,97,110,103,117,108,97,114,\n119,104,111,32,104,97,100,97,105,114,112,111,114,116,116,111,119,110,32,111,102,\n10,10,83,111,109,101,32,39,99,108,105,99,107,39,99,104,97,114,103,101,115,107,\n101,121,119,111,114,100,105,116,32,119,105,108,108,99,105,116,121,32,111,102,40,\n116,104,105,115,41,59,65,110,100,114,101,119,32,117,110,105,113,117,101,32,99,\n104,101,99,107,101,100,111,114,32,109,111,114,101,51,48,48,112,120,59,32,114,101\n,116,117,114,110,59,114,115,105,111,110,61,34,112,108,117,103,105,110,115,119,\n105,116,104,105,110,32,104,101,114,115,101,108,102,83,116,97,116,105,111,110,70,\n101,100,101,114,97,108,118,101,110,116,117,114,101,112,117,98,108,105,115,104,\n115,101,110,116,32,116,111,116,101,110,115,105,111,110,97,99,116,114,101,115,115\n,99,111,109,101,32,116,111,102,105,110,103,101,114,115,68,117,107,101,32,111,102\n,112,101,111,112,108,101,44,101,120,112,108,111,105,116,119,104,97,116,32,105,\n115,104,97,114,109,111,110,121,97,32,109,97,106,111,114,34,58,34,104,116,116,112\n,105,110,32,104,105,115,32,109,101,110,117,34,62,10,109,111,110,116,104,108,121,\n111,102,102,105,99,101,114,99,111,117,110,99,105,108,103,97,105,110,105,110,103,\n101,118,101,110,32,105,110,83,117,109,109,97,114,121,100,97,116,101,32,111,102,\n108,111,121,97,108,116,121,102,105,116,110,101,115,115,97,110,100,32,119,97,115,\n101,109,112,101,114,111,114,115,117,112,114,101,109,101,83,101,99,111,110,100,32\n,104,101,97,114,105,110,103,82,117,115,115,105,97,110,108,111,110,103,101,115,\n116,65,108,98,101,114,116,97,108,97,116,101,114,97,108,115,101,116,32,111,102,32\n,115,109,97,108,108,34,62,46,97,112,112,101,110,100,100,111,32,119,105,116,104,\n102,101,100,101,114,97,108,98,97,110,107,32,111,102,98,101,110,101,97,116,104,68\n,101,115,112,105,116,101,67,97,112,105,116,97,108,103,114,111,117,110,100,115,41\n,44,32,97,110,100,32,112,101,114,99,101,110,116,105,116,32,102,114,111,109,99,\n108,111,115,105,110,103,99,111,110,116,97,105,110,73,110,115,116,101,97,100,102,\n105,102,116,101,101,110,97,115,32,119,101,108,108,46,121,97,104,111,111,46,114,\n101,115,112,111,110,100,102,105,103,104,116,101,114,111,98,115,99,117,114,101,\n114,101,102,108,101,99,116,111,114,103,97,110,105,99,61,32,77,97,116,104,46,101,\n100,105,116,105,110,103,111,110,108,105,110,101,32,112,97,100,100,105,110,103,97\n,32,119,104,111,108,101,111,110,101,114,114,111,114,121,101,97,114,32,111,102,\n101,110,100,32,111,102,32,98,97,114,114,105,101,114,119,104,101,110,32,105,116,\n104,101,97,100,101,114,32,104,111,109,101,32,111,102,114,101,115,117,109,101,100\n,114,101,110,97,109,101,100,115,116,114,111,110,103,62,104,101,97,116,105,110,\n103,114,101,116,97,105,110,115,99,108,111,117,100,102,114,119,97,121,32,111,102,\n32,77,97,114,99,104,32,49,107,110,111,119,105,110,103,105,110,32,112,97,114,116,\n66,101,116,119,101,101,110,108,101,115,115,111,110,115,99,108,111,115,101,115,\n116,118,105,114,116,117,97,108,108,105,110,107,115,34,62,99,114,111,115,115,101,\n100,69,78,68,32,45,45,62,102,97,109,111,117,115,32,97,119,97,114,100,101,100,76,\n105,99,101,110,115,101,72,101,97,108,116,104,32,102,97,105,114,108,121,32,119,\n101,97,108,116,104,121,109,105,110,105,109,97,108,65,102,114,105,99,97,110,99,\n111,109,112,101,116,101,108,97,98,101,108,34,62,115,105,110,103,105,110,103,102,\n97,114,109,101,114,115,66,114,97,115,105,108,41,100,105,115,99,117,115,115,114,\n101,112,108,97,99,101,71,114,101,103,111,114,121,102,111,110,116,32,99,111,112,\n117,114,115,117,101,100,97,112,112,101,97,114,115,109,97,107,101,32,117,112,114,\n111,117,110,100,101,100,98,111,116,104,32,111,102,98,108,111,99,107,101,100,115,\n97,119,32,116,104,101,111,102,102,105,99,101,115,99,111,108,111,117,114,115,105,\n102,40,100,111,99,117,119,104,101,110,32,104,101,101,110,102,111,114,99,101,112,\n117,115,104,40,102,117,65,117,103,117,115,116,32,85,84,70,45,56,34,62,70,97,110,\n116,97,115,121,105,110,32,109,111,115,116,105,110,106,117,114,101,100,85,115,117\n,97,108,108,121,102,97,114,109,105,110,103,99,108,111,115,117,114,101,111,98,106\n,101,99,116,32,100,101,102,101,110,99,101,117,115,101,32,111,102,32,77,101,100,\n105,99,97,108,60,98,111,100,121,62,10,101,118,105,100,101,110,116,98,101,32,117,\n115,101,100,107,101,121,67,111,100,101,115,105,120,116,101,101,110,73,115,108,97\n,109,105,99,35,48,48,48,48,48,48,101,110,116,105,114,101,32,119,105,100,101,108,\n121,32,97,99,116,105,118,101,32,40,116,121,112,101,111,102,111,110,101,32,99,97,\n110,99,111,108,111,114,32,61,115,112,101,97,107,101,114,101,120,116,101,110,100,\n115,80,104,121,115,105,99,115,116,101,114,114,97,105,110,60,116,98,111,100,121,\n62,102,117,110,101,114,97,108,118,105,101,119,105,110,103,109,105,100,100,108,\n101,32,99,114,105,99,107,101,116,112,114,111,112,104,101,116,115,104,105,102,116\n,101,100,100,111,99,116,111,114,115,82,117,115,115,101,108,108,32,116,97,114,103\n,101,116,99,111,109,112,97,99,116,97,108,103,101,98,114,97,115,111,99,105,97,108\n,45,98,117,108,107,32,111,102,109,97,110,32,97,110,100,60,47,116,100,62,10,32,\n104,101,32,108,101,102,116,41,46,118,97,108,40,41,102,97,108,115,101,41,59,108,\n111,103,105,99,97,108,98,97,110,107,105,110,103,104,111,109,101,32,116,111,110,\n97,109,105,110,103,32,65,114,105,122,111,110,97,99,114,101,100,105,116,115,41,59\n,10,125,41,59,10,102,111,117,110,100,101,114,105,110,32,116,117,114,110,67,111,\n108,108,105,110,115,98,101,102,111,114,101,32,66,117,116,32,116,104,101,99,104,\n97,114,103,101,100,84,105,116,108,101,34,62,67,97,112,116,97,105,110,115,112,101\n,108,108,101,100,103,111,100,100,101,115,115,84,97,103,32,45,45,62,65,100,100,\n105,110,103,58,98,117,116,32,119,97,115,82,101,99,101,110,116,32,112,97,116,105,\n101,110,116,98,97,99,107,32,105,110,61,102,97,108,115,101,38,76,105,110,99,111,\n108,110,119,101,32,107,110,111,119,67,111,117,110,116,101,114,74,117,100,97,105,\n115,109,115,99,114,105,112,116,32,97,108,116,101,114,101,100,39,93,41,59,10,32,\n32,104,97,115,32,116,104,101,117,110,99,108,101,97,114,69,118,101,110,116,39,44,\n98,111,116,104,32,105,110,110,111,116,32,97,108,108,10,10,60,33,45,45,32,112,108\n,97,99,105,110,103,104,97,114,100,32,116,111,32,99,101,110,116,101,114,115,111,\n114,116,32,111,102,99,108,105,101,110,116,115,115,116,114,101,101,116,115,66,101\n,114,110,97,114,100,97,115,115,101,114,116,115,116,101,110,100,32,116,111,102,97\n,110,116,97,115,121,100,111,119,110,32,105,110,104,97,114,98,111,117,114,70,114,\n101,101,100,111,109,106,101,119,101,108,114,121,47,97,98,111,117,116,46,46,115,\n101,97,114,99,104,108,101,103,101,110,100,115,105,115,32,109,97,100,101,109,111,\n100,101,114,110,32,111,110,108,121,32,111,110,111,110,108,121,32,116,111,105,109\n,97,103,101,34,32,108,105,110,101,97,114,32,112,97,105,110,116,101,114,97,110,\n100,32,110,111,116,114,97,114,101,108,121,32,97,99,114,111,110,121,109,100,101,\n108,105,118,101,114,115,104,111,114,116,101,114,48,48,38,97,109,112,59,97,115,32\n,109,97,110,121,119,105,100,116,104,61,34,47,42,32,60,33,91,67,116,105,116,108,\n101,32,61,111,102,32,116,104,101,32,108,111,119,101,115,116,32,112,105,99,107,\n101,100,32,101,115,99,97,112,101,100,117,115,101,115,32,111,102,112,101,111,112,\n108,101,115,32,80,117,98,108,105,99,77,97,116,116,104,101,119,116,97,99,116,105,\n99,115,100,97,109,97,103,101,100,119,97,121,32,102,111,114,108,97,119,115,32,111\n,102,101,97,115,121,32,116,111,32,119,105,110,100,111,119,115,116,114,111,110,\n103,32,32,115,105,109,112,108,101,125,99,97,116,99,104,40,115,101,118,101,110,\n116,104,105,110,102,111,98,111,120,119,101,110,116,32,116,111,112,97,105,110,116\n,101,100,99,105,116,105,122,101,110,73,32,100,111,110,39,116,114,101,116,114,101\n,97,116,46,32,83,111,109,101,32,119,119,46,34,41,59,10,98,111,109,98,105,110,103\n,109,97,105,108,116,111,58,109,97,100,101,32,105,110,46,32,77,97,110,121,32,99,\n97,114,114,105,101,115,124,124,123,125,59,119,105,119,111,114,107,32,111,102,115\n,121,110,111,110,121,109,100,101,102,101,97,116,115,102,97,118,111,114,101,100,\n111,112,116,105,99,97,108,112,97,103,101,84,114,97,117,110,108,101,115,115,32,\n115,101,110,100,105,110,103,108,101,102,116,34,62,60,99,111,109,83,99,111,114,65\n,108,108,32,116,104,101,106,81,117,101,114,121,46,116,111,117,114,105,115,116,67\n,108,97,115,115,105,99,102,97,108,115,101,34,32,87,105,108,104,101,108,109,115,\n117,98,117,114,98,115,103,101,110,117,105,110,101,98,105,115,104,111,112,115,46,\n115,112,108,105,116,40,103,108,111,98,97,108,32,102,111,108,108,111,119,115,98,\n111,100,121,32,111,102,110,111,109,105,110,97,108,67,111,110,116,97,99,116,115,\n101,99,117,108,97,114,108,101,102,116,32,116,111,99,104,105,101,102,108,121,45,\n104,105,100,100,101,110,45,98,97,110,110,101,114,60,47,108,105,62,10,10,46,32,87\n,104,101,110,32,105,110,32,98,111,116,104,100,105,115,109,105,115,115,69,120,112\n,108,111,114,101,97,108,119,97,121,115,32,118,105,97,32,116,104,101,115,112,97,\n195,177,111,108,119,101,108,102,97,114,101,114,117,108,105,110,103,32,97,114,114\n,97,110,103,101,99,97,112,116,97,105,110,104,105,115,32,115,111,110,114,117,108,\n101,32,111,102,104,101,32,116,111,111,107,105,116,115,101,108,102,44,61,48,38,97\n,109,112,59,40,99,97,108,108,101,100,115,97,109,112,108,101,115,116,111,32,109,\n97,107,101,99,111,109,47,112,97,103,77,97,114,116,105,110,32,75,101,110,110,101,\n100,121,97,99,99,101,112,116,115,102,117,108,108,32,111,102,104,97,110,100,108,\n101,100,66,101,115,105,100,101,115,47,47,45,45,62,60,47,97,98,108,101,32,116,111\n,116,97,114,103,101,116,115,101,115,115,101,110,99,101,104,105,109,32,116,111,32\n,105,116,115,32,98,121,32,99,111,109,109,111,110,46,109,105,110,101,114,97,108,\n116,111,32,116,97,107,101,119,97,121,115,32,116,111,115,46,111,114,103,47,108,97\n,100,118,105,115,101,100,112,101,110,97,108,116,121,115,105,109,112,108,101,58,\n105,102,32,116,104,101,121,76,101,116,116,101,114,115,97,32,115,104,111,114,116,\n72,101,114,98,101,114,116,115,116,114,105,107,101,115,32,103,114,111,117,112,115\n,46,108,101,110,103,116,104,102,108,105,103,104,116,115,111,118,101,114,108,97,\n112,115,108,111,119,108,121,32,108,101,115,115,101,114,32,115,111,99,105,97,108,\n32,60,47,112,62,10,9,9,105,116,32,105,110,116,111,114,97,110,107,101,100,32,114,\n97,116,101,32,111,102,117,108,62,13,10,32,32,97,116,116,101,109,112,116,112,97,\n105,114,32,111,102,109,97,107,101,32,105,116,75,111,110,116,97,107,116,65,110,\n116,111,110,105,111,104,97,118,105,110,103,32,114,97,116,105,110,103,115,32,97,\n99,116,105,118,101,115,116,114,101,97,109,115,116,114,97,112,112,101,100,34,41,\n46,99,115,115,40,104,111,115,116,105,108,101,108,101,97,100,32,116,111,108,105,\n116,116,108,101,32,103,114,111,117,112,115,44,80,105,99,116,117,114,101,45,45,62\n,13,10,13,10,32,114,111,119,115,61,34,32,111,98,106,101,99,116,105,110,118,101,\n114,115,101,60,102,111,111,116,101,114,67,117,115,116,111,109,86,62,60,92,47,115\n,99,114,115,111,108,118,105,110,103,67,104,97,109,98,101,114,115,108,97,118,101,\n114,121,119,111,117,110,100,101,100,119,104,101,114,101,97,115,33,61,32,39,117,\n110,100,102,111,114,32,97,108,108,112,97,114,116,108,121,32,45,114,105,103,104,\n116,58,65,114,97,98,105,97,110,98,97,99,107,101,100,32,99,101,110,116,117,114,\n121,117,110,105,116,32,111,102,109,111,98,105,108,101,45,69,117,114,111,112,101,\n44,105,115,32,104,111,109,101,114,105,115,107,32,111,102,100,101,115,105,114,101\n,100,67,108,105,110,116,111,110,99,111,115,116,32,111,102,97,103,101,32,111,102,\n32,98,101,99,111,109,101,32,110,111,110,101,32,111,102,112,38,113,117,111,116,59\n,77,105,100,100,108,101,32,101,97,100,39,41,91,48,67,114,105,116,105,99,115,115,\n116,117,100,105,111,115,62,38,99,111,112,121,59,103,114,111,117,112,34,62,97,115\n,115,101,109,98,108,109,97,107,105,110,103,32,112,114,101,115,115,101,100,119,\n105,100,103,101,116,46,112,115,58,34,32,63,32,114,101,98,117,105,108,116,98,121,\n32,115,111,109,101,70,111,114,109,101,114,32,101,100,105,116,111,114,115,100,101\n,108,97,121,101,100,67,97,110,111,110,105,99,104,97,100,32,116,104,101,112,117,\n115,104,105,110,103,99,108,97,115,115,61,34,98,117,116,32,97,114,101,112,97,114,\n116,105,97,108,66,97,98,121,108,111,110,98,111,116,116,111,109,32,99,97,114,114,\n105,101,114,67,111,109,109,97,110,100,105,116,115,32,117,115,101,65,115,32,119,\n105,116,104,99,111,117,114,115,101,115,97,32,116,104,105,114,100,100,101,110,111\n,116,101,115,97,108,115,111,32,105,110,72,111,117,115,116,111,110,50,48,112,120,\n59,34,62,97,99,99,117,115,101,100,100,111,117,98,108,101,32,103,111,97,108,32,\n111,102,70,97,109,111,117,115,32,41,46,98,105,110,100,40,112,114,105,101,115,116\n,115,32,79,110,108,105,110,101,105,110,32,74,117,108,121,115,116,32,43,32,34,103\n,99,111,110,115,117,108,116,100,101,99,105,109,97,108,104,101,108,112,102,117,\n108,114,101,118,105,118,101,100,105,115,32,118,101,114,121,114,39,43,39,105,112,\n116,108,111,115,105,110,103,32,102,101,109,97,108,101,115,105,115,32,97,108,115,\n111,115,116,114,105,110,103,115,100,97,121,115,32,111,102,97,114,114,105,118,97,\n108,102,117,116,117,114,101,32,60,111,98,106,101,99,116,102,111,114,99,105,110,\n103,83,116,114,105,110,103,40,34,32,47,62,10,9,9,104,101,114,101,32,105,115,101,\n110,99,111,100,101,100,46,32,32,84,104,101,32,98,97,108,108,111,111,110,100,111,\n110,101,32,98,121,47,99,111,109,109,111,110,98,103,99,111,108,111,114,108,97,119\n,32,111,102,32,73,110,100,105,97,110,97,97,118,111,105,100,101,100,98,117,116,32\n,116,104,101,50,112,120,32,51,112,120,106,113,117,101,114,121,46,97,102,116,101,\n114,32,97,112,111,108,105,99,121,46,109,101,110,32,97,110,100,102,111,111,116,\n101,114,45,61,32,116,114,117,101,59,102,111,114,32,117,115,101,115,99,114,101,\n101,110,46,73,110,100,105,97,110,32,105,109,97,103,101,32,61,102,97,109,105,108,\n121,44,104,116,116,112,58,47,47,32,38,110,98,115,112,59,100,114,105,118,101,114,\n115,101,116,101,114,110,97,108,115,97,109,101,32,97,115,110,111,116,105,99,101,\n100,118,105,101,119,101,114,115,125,41,40,41,59,10,32,105,115,32,109,111,114,101\n,115,101,97,115,111,110,115,102,111,114,109,101,114,32,116,104,101,32,110,101,\n119,105,115,32,106,117,115,116,99,111,110,115,101,110,116,32,83,101,97,114,99,\n104,119,97,115,32,116,104,101,119,104,121,32,116,104,101,115,104,105,112,112,101\n,100,98,114,62,60,98,114,62,119,105,100,116,104,58,32,104,101,105,103,104,116,61\n,109,97,100,101,32,111,102,99,117,105,115,105,110,101,105,115,32,116,104,97,116,\n97,32,118,101,114,121,32,65,100,109,105,114,97,108,32,102,105,120,101,100,59,110\n,111,114,109,97,108,32,77,105,115,115,105,111,110,80,114,101,115,115,44,32,111,\n110,116,97,114,105,111,99,104,97,114,115,101,116,116,114,121,32,116,111,32,105,\n110,118,97,100,101,100,61,34,116,114,117,101,34,115,112,97,99,105,110,103,105,\n115,32,109,111,115,116,97,32,109,111,114,101,32,116,111,116,97,108,108,121,102,\n97,108,108,32,111,102,125,41,59,13,10,32,32,105,109,109,101,110,115,101,116,105,\n109,101,32,105,110,115,101,116,32,111,117,116,115,97,116,105,115,102,121,116,111\n,32,102,105,110,100,100,111,119,110,32,116,111,108,111,116,32,111,102,32,80,108,\n97,121,101,114,115,105,110,32,74,117,110,101,113,117,97,110,116,117,109,110,111,\n116,32,116,104,101,116,105,109,101,32,116,111,100,105,115,116,97,110,116,70,105,\n110,110,105,115,104,115,114,99,32,61,32,40,115,105,110,103,108,101,32,104,101,\n108,112,32,111,102,71,101,114,109,97,110,32,108,97,119,32,97,110,100,108,97,98,\n101,108,101,100,102,111,114,101,115,116,115,99,111,111,107,105,110,103,115,112,\n97,99,101,34,62,104,101,97,100,101,114,45,119,101,108,108,32,97,115,83,116,97,\n110,108,101,121,98,114,105,100,103,101,115,47,103,108,111,98,97,108,67,114,111,\n97,116,105,97,32,65,98,111,117,116,32,91,48,93,59,10,32,32,105,116,44,32,97,110,\n100,103,114,111,117,112,101,100,98,101,105,110,103,32,97,41,123,116,104,114,111,\n119,104,101,32,109,97,100,101,108,105,103,104,116,101,114,101,116,104,105,99,97,\n108,70,70,70,70,70,70,34,98,111,116,116,111,109,34,108,105,107,101,32,97,32,101,\n109,112,108,111,121,115,108,105,118,101,32,105,110,97,115,32,115,101,101,110,112\n,114,105,110,116,101,114,109,111,115,116,32,111,102,117,98,45,108,105,110,107,\n114,101,106,101,99,116,115,97,110,100,32,117,115,101,105,109,97,103,101,34,62,\n115,117,99,99,101,101,100,102,101,101,100,105,110,103,78,117,99,108,101,97,114,\n105,110,102,111,114,109,97,116,111,32,104,101,108,112,87,111,109,101,110,39,115,\n78,101,105,116,104,101,114,77,101,120,105,99,97,110,112,114,111,116,101,105,110,\n60,116,97,98,108,101,32,98,121,32,109,97,110,121,104,101,97,108,116,104,121,108,\n97,119,115,117,105,116,100,101,118,105,115,101,100,46,112,117,115,104,40,123,115\n,101,108,108,101,114,115,115,105,109,112,108,121,32,84,104,114,111,117,103,104,\n46,99,111,111,107,105,101,32,73,109,97,103,101,40,111,108,100,101,114,34,62,117,\n115,46,106,115,34,62,32,83,105,110,99,101,32,117,110,105,118,101,114,115,108,97,\n114,103,101,114,32,111,112,101,110,32,116,111,33,45,45,32,101,110,100,108,105,\n101,115,32,105,110,39,93,41,59,13,10,32,32,109,97,114,107,101,116,119,104,111,32\n,105,115,32,40,34,68,79,77,67,111,109,97,110,97,103,101,100,111,110,101,32,102,\n111,114,116,121,112,101,111,102,32,75,105,110,103,100,111,109,112,114,111,102,\n105,116,115,112,114,111,112,111,115,101,116,111,32,115,104,111,119,99,101,110,\n116,101,114,59,109,97,100,101,32,105,116,100,114,101,115,115,101,100,119,101,114\n,101,32,105,110,109,105,120,116,117,114,101,112,114,101,99,105,115,101,97,114,\n105,115,105,110,103,115,114,99,32,61,32,39,109,97,107,101,32,97,32,115,101,99,\n117,114,101,100,66,97,112,116,105,115,116,118,111,116,105,110,103,32,10,9,9,118,\n97,114,32,77,97,114,99,104,32,50,103,114,101,119,32,117,112,67,108,105,109,97,\n116,101,46,114,101,109,111,118,101,115,107,105,108,108,101,100,119,97,121,32,116\n,104,101,60,47,104,101,97,100,62,102,97,99,101,32,111,102,97,99,116,105,110,103,\n32,114,105,103,104,116,34,62,116,111,32,119,111,114,107,114,101,100,117,99,101,\n115,104,97,115,32,104,97,100,101,114,101,99,116,101,100,115,104,111,119,40,41,59\n,97,99,116,105,111,110,61,98,111,111,107,32,111,102,97,110,32,97,114,101,97,61,\n61,32,34,104,116,116,60,104,101,97,100,101,114,10,60,104,116,109,108,62,99,111,\n110,102,111,114,109,102,97,99,105,110,103,32,99,111,111,107,105,101,46,114,101,\n108,121,32,111,110,104,111,115,116,101,100,32,46,99,117,115,116,111,109,104,101,\n32,119,101,110,116,98,117,116,32,102,111,114,115,112,114,101,97,100,32,70,97,109\n,105,108,121,32,97,32,109,101,97,110,115,111,117,116,32,116,104,101,102,111,114,\n117,109,115,46,102,111,111,116,97,103,101,34,62,77,111,98,105,108,67,108,101,109\n,101,110,116,115,34,32,105,100,61,34,97,115,32,104,105,103,104,105,110,116,101,\n110,115,101,45,45,62,60,33,45,45,102,101,109,97,108,101,32,105,115,32,115,101,\n101,110,105,109,112,108,105,101,100,115,101,116,32,116,104,101,97,32,115,116,97,\n116,101,97,110,100,32,104,105,115,102,97,115,116,101,115,116,98,101,115,105,100,\n101,115,98,117,116,116,111,110,95,98,111,117,110,100,101,100,34,62,60,105,109,\n103,32,73,110,102,111,98,111,120,101,118,101,110,116,115,44,97,32,121,111,117,\n110,103,97,110,100,32,97,114,101,78,97,116,105,118,101,32,99,104,101,97,112,101,\n114,84,105,109,101,111,117,116,97,110,100,32,104,97,115,101,110,103,105,110,101,\n115,119,111,110,32,116,104,101,40,109,111,115,116,108,121,114,105,103,104,116,58\n,32,102,105,110,100,32,97,32,45,98,111,116,116,111,109,80,114,105,110,99,101,32,\n97,114,101,97,32,111,102,109,111,114,101,32,111,102,115,101,97,114,99,104,95,110\n,97,116,117,114,101,44,108,101,103,97,108,108,121,112,101,114,105,111,100,44,108\n,97,110,100,32,111,102,111,114,32,119,105,116,104,105,110,100,117,99,101,100,112\n,114,111,118,105,110,103,109,105,115,115,105,108,101,108,111,99,97,108,108,121,\n65,103,97,105,110,115,116,116,104,101,32,119,97,121,107,38,113,117,111,116,59,\n112,120,59,34,62,13,10,112,117,115,104,101,100,32,97,98,97,110,100,111,110,110,\n117,109,101,114,97,108,67,101,114,116,97,105,110,73,110,32,116,104,105,115,109,\n111,114,101,32,105,110,111,114,32,115,111,109,101,110,97,109,101,32,105,115,97,\n110,100,44,32,105,110,99,114,111,119,110,101,100,73,83,66,78,32,48,45,99,114,101\n,97,116,101,115,79,99,116,111,98,101,114,109,97,121,32,110,111,116,99,101,110,\n116,101,114,32,108,97,116,101,32,105,110,68,101,102,101,110,99,101,101,110,97,99\n,116,101,100,119,105,115,104,32,116,111,98,114,111,97,100,108,121,99,111,111,108\n,105,110,103,111,110,108,111,97,100,61,105,116,46,32,84,104,101,114,101,99,111,\n118,101,114,77,101,109,98,101,114,115,104,101,105,103,104,116,32,97,115,115,117,\n109,101,115,60,104,116,109,108,62,10,112,101,111,112,108,101,46,105,110,32,111,\n110,101,32,61,119,105,110,100,111,119,102,111,111,116,101,114,95,97,32,103,111,\n111,100,32,114,101,107,108,97,109,97,111,116,104,101,114,115,44,116,111,32,116,\n104,105,115,95,99,111,111,107,105,101,112,97,110,101,108,34,62,76,111,110,100,\n111,110,44,100,101,102,105,110,101,115,99,114,117,115,104,101,100,98,97,112,116,\n105,115,109,99,111,97,115,116,97,108,115,116,97,116,117,115,32,116,105,116,108,\n101,34,32,109,111,118,101,32,116,111,108,111,115,116,32,105,110,98,101,116,116,\n101,114,32,105,109,112,108,105,101,115,114,105,118,97,108,114,121,115,101,114,\n118,101,114,115,32,83,121,115,116,101,109,80,101,114,104,97,112,115,101,115,32,\n97,110,100,32,99,111,110,116,101,110,100,102,108,111,119,105,110,103,108,97,115,\n116,101,100,32,114,105,115,101,32,105,110,71,101,110,101,115,105,115,118,105,101\n,119,32,111,102,114,105,115,105,110,103,32,115,101,101,109,32,116,111,98,117,116\n,32,105,110,32,98,97,99,107,105,110,103,104,101,32,119,105,108,108,103,105,118,\n101,110,32,97,103,105,118,105,110,103,32,99,105,116,105,101,115,46,102,108,111,\n119,32,111,102,32,76,97,116,101,114,32,97,108,108,32,98,117,116,72,105,103,104,\n119,97,121,111,110,108,121,32,98,121,115,105,103,110,32,111,102,104,101,32,100,\n111,101,115,100,105,102,102,101,114,115,98,97,116,116,101,114,121,38,97,109,112,\n59,108,97,115,105,110,103,108,101,115,116,104,114,101,97,116,115,105,110,116,101\n,103,101,114,116,97,107,101,32,111,110,114,101,102,117,115,101,100,99,97,108,108\n,101,100,32,61,85,83,38,97,109,112,83,101,101,32,116,104,101,110,97,116,105,118,\n101,115,98,121,32,116,104,105,115,115,121,115,116,101,109,46,104,101,97,100,32,\n111,102,58,104,111,118,101,114,44,108,101,115,98,105,97,110,115,117,114,110,97,\n109,101,97,110,100,32,97,108,108,99,111,109,109,111,110,47,104,101,97,100,101,\n114,95,95,112,97,114,97,109,115,72,97,114,118,97,114,100,47,112,105,120,101,108,\n46,114,101,109,111,118,97,108,115,111,32,108,111,110,103,114,111,108,101,32,111,\n102,106,111,105,110,116,108,121,115,107,121,115,99,114,97,85,110,105,99,111,100,\n101,98,114,32,47,62,13,10,65,116,108,97,110,116,97,110,117,99,108,101,117,115,67\n,111,117,110,116,121,44,112,117,114,101,108,121,32,99,111,117,110,116,34,62,101,\n97,115,105,108,121,32,98,117,105,108,100,32,97,111,110,99,108,105,99,107,97,32,\n103,105,118,101,110,112,111,105,110,116,101,114,104,38,113,117,111,116,59,101,\n118,101,110,116,115,32,101,108,115,101,32,123,10,100,105,116,105,111,110,115,110\n,111,119,32,116,104,101,44,32,119,105,116,104,32,109,97,110,32,119,104,111,111,\n114,103,47,87,101,98,111,110,101,32,97,110,100,99,97,118,97,108,114,121,72,101,\n32,100,105,101,100,115,101,97,116,116,108,101,48,48,44,48,48,48,32,123,119,105,\n110,100,111,119,104,97,118,101,32,116,111,105,102,40,119,105,110,100,97,110,100,\n32,105,116,115,115,111,108,101,108,121,32,109,38,113,117,111,116,59,114,101,110,\n101,119,101,100,68,101,116,114,111,105,116,97,109,111,110,103,115,116,101,105,\n116,104,101,114,32,116,104,101,109,32,105,110,83,101,110,97,116,111,114,85,115,\n60,47,97,62,60,75,105,110,103,32,111,102,70,114,97,110,99,105,115,45,112,114,111\n,100,117,99,104,101,32,117,115,101,100,97,114,116,32,97,110,100,104,105,109,32,\n97,110,100,117,115,101,100,32,98,121,115,99,111,114,105,110,103,97,116,32,104,\n111,109,101,116,111,32,104,97,118,101,114,101,108,97,116,101,115,105,98,105,108,\n105,116,121,102,97,99,116,105,111,110,66,117,102,102,97,108,111,108,105,110,107,\n34,62,60,119,104,97,116,32,104,101,102,114,101,101,32,116,111,67,105,116,121,32,\n111,102,99,111,109,101,32,105,110,115,101,99,116,111,114,115,99,111,117,110,116,\n101,100,111,110,101,32,100,97,121,110,101,114,118,111,117,115,115,113,117,97,114\n,101,32,125,59,105,102,40,103,111,105,110,32,119,104,97,116,105,109,103,34,32,97\n,108,105,115,32,111,110,108,121,115,101,97,114,99,104,47,116,117,101,115,100,97,\n121,108,111,111,115,101,108,121,83,111,108,111,109,111,110,115,101,120,117,97,\n108,32,45,32,60,97,32,104,114,109,101,100,105,117,109,34,68,79,32,78,79,84,32,70\n,114,97,110,99,101,44,119,105,116,104,32,97,32,119,97,114,32,97,110,100,115,101,\n99,111,110,100,32,116,97,107,101,32,97,32,62,13,10,13,10,13,10,109,97,114,107,\n101,116,46,104,105,103,104,119,97,121,100,111,110,101,32,105,110,99,116,105,118,\n105,116,121,34,108,97,115,116,34,62,111,98,108,105,103,101,100,114,105,115,101,\n32,116,111,34,117,110,100,101,102,105,109,97,100,101,32,116,111,32,69,97,114,108\n,121,32,112,114,97,105,115,101,100,105,110,32,105,116,115,32,102,111,114,32,104,\n105,115,97,116,104,108,101,116,101,74,117,112,105,116,101,114,89,97,104,111,111,\n33,32,116,101,114,109,101,100,32,115,111,32,109,97,110,121,114,101,97,108,108,\n121,32,115,46,32,84,104,101,32,97,32,119,111,109,97,110,63,118,97,108,117,101,61\n,100,105,114,101,99,116,32,114,105,103,104,116,34,32,98,105,99,121,99,108,101,97\n,99,105,110,103,61,34,100,97,121,32,97,110,100,115,116,97,116,105,110,103,82,97,\n116,104,101,114,44,104,105,103,104,101,114,32,79,102,102,105,99,101,32,97,114,\n101,32,110,111,119,116,105,109,101,115,44,32,119,104,101,110,32,97,32,112,97,121\n,32,102,111,114,111,110,32,116,104,105,115,45,108,105,110,107,34,62,59,98,111,\n114,100,101,114,97,114,111,117,110,100,32,97,110,110,117,97,108,32,116,104,101,\n32,78,101,119,112,117,116,32,116,104,101,46,99,111,109,34,32,116,97,107,105,110,\n32,116,111,97,32,98,114,105,101,102,40,105,110,32,116,104,101,103,114,111,117,\n112,115,46,59,32,119,105,100,116,104,101,110,122,121,109,101,115,115,105,109,112\n,108,101,32,105,110,32,108,97,116,101,123,114,101,116,117,114,110,116,104,101,\n114,97,112,121,97,32,112,111,105,110,116,98,97,110,110,105,110,103,105,110,107,\n115,34,62,10,40,41,59,34,32,114,101,97,32,112,108,97,99,101,92,117,48,48,51,67,\n97,97,98,111,117,116,32,97,116,114,62,13,10,9,9,99,99,111,117,110,116,32,103,105\n,118,101,115,32,97,60,83,67,82,73,80,84,82,97,105,108,119,97,121,116,104,101,109\n,101,115,47,116,111,111,108,98,111,120,66,121,73,100,40,34,120,104,117,109,97,\n110,115,44,119,97,116,99,104,101,115,105,110,32,115,111,109,101,32,105,102,32,40\n,119,105,99,111,109,105,110,103,32,102,111,114,109,97,116,115,32,85,110,100,101,\n114,32,98,117,116,32,104,97,115,104,97,110,100,101,100,32,109,97,100,101,32,98,\n121,116,104,97,110,32,105,110,102,101,97,114,32,111,102,100,101,110,111,116,101,\n100,47,105,102,114,97,109,101,108,101,102,116,32,105,110,118,111,108,116,97,103,\n101,105,110,32,101,97,99,104,97,38,113,117,111,116,59,98,97,115,101,32,111,102,\n73,110,32,109,97,110,121,117,110,100,101,114,103,111,114,101,103,105,109,101,115\n,97,99,116,105,111,110,32,60,47,112,62,13,10,60,117,115,116,111,109,86,97,59,38,\n103,116,59,60,47,105,109,112,111,114,116,115,111,114,32,116,104,97,116,109,111,\n115,116,108,121,32,38,97,109,112,59,114,101,32,115,105,122,101,61,34,60,47,97,62\n,60,47,104,97,32,99,108,97,115,115,112,97,115,115,105,118,101,72,111,115,116,32,\n61,32,87,104,101,116,104,101,114,102,101,114,116,105,108,101,86,97,114,105,111,\n117,115,61,91,93,59,40,102,117,99,97,109,101,114,97,115,47,62,60,47,116,100,62,\n97,99,116,115,32,97,115,73,110,32,115,111,109,101,62,13,10,13,10,60,33,111,114,\n103,97,110,105,115,32,60,98,114,32,47,62,66,101,105,106,105,110,103,99,97,116,97\n,108,195,160,100,101,117,116,115,99,104,101,117,114,111,112,101,117,101,117,115,\n107,97,114,97,103,97,101,105,108,103,101,115,118,101,110,115,107,97,101,115,112,\n97,195,177,97,109,101,110,115,97,106,101,117,115,117,97,114,105,111,116,114,97,\n98,97,106,111,109,195,169,120,105,99,111,112,195,161,103,105,110,97,115,105,101,\n109,112,114,101,115,105,115,116,101,109,97,111,99,116,117,98,114,101,100,117,114\n,97,110,116,101,97,195,177,97,100,105,114,101,109,112,114,101,115,97,109,111,109\n,101,110,116,111,110,117,101,115,116,114,111,112,114,105,109,101,114,97,116,114,\n97,118,195,169,115,103,114,97,99,105,97,115,110,117,101,115,116,114,97,112,114,\n111,99,101,115,111,101,115,116,97,100,111,115,99,97,108,105,100,97,100,112,101,\n114,115,111,110,97,110,195,186,109,101,114,111,97,99,117,101,114,100,111,109,195\n,186,115,105,99,97,109,105,101,109,98,114,111,111,102,101,114,116,97,115,97,108,\n103,117,110,111,115,112,97,195,173,115,101,115,101,106,101,109,112,108,111,100,\n101,114,101,99,104,111,97,100,101,109,195,161,115,112,114,105,118,97,100,111,97,\n103,114,101,103,97,114,101,110,108,97,99,101,115,112,111,115,105,98,108,101,104,\n111,116,101,108,101,115,115,101,118,105,108,108,97,112,114,105,109,101,114,111,\n195,186,108,116,105,109,111,101,118,101,110,116,111,115,97,114,99,104,105,118,\n111,99,117,108,116,117,114,97,109,117,106,101,114,101,115,101,110,116,114,97,100\n,97,97,110,117,110,99,105,111,101,109,98,97,114,103,111,109,101,114,99,97,100,\n111,103,114,97,110,100,101,115,101,115,116,117,100,105,111,109,101,106,111,114,\n101,115,102,101,98,114,101,114,111,100,105,115,101,195,177,111,116,117,114,105,\n115,109,111,99,195,179,100,105,103,111,112,111,114,116,97,100,97,101,115,112,97,\n99,105,111,102,97,109,105,108,105,97,97,110,116,111,110,105,111,112,101,114,109,\n105,116,101,103,117,97,114,100,97,114,97,108,103,117,110,97,115,112,114,101,99,\n105,111,115,97,108,103,117,105,101,110,115,101,110,116,105,100,111,118,105,115,\n105,116,97,115,116,195,173,116,117,108,111,99,111,110,111,99,101,114,115,101,103\n,117,110,100,111,99,111,110,115,101,106,111,102,114,97,110,99,105,97,109,105,110\n,117,116,111,115,115,101,103,117,110,100,97,116,101,110,101,109,111,115,101,102,\n101,99,116,111,115,109,195,161,108,97,103,97,115,101,115,105,195,179,110,114,101\n,118,105,115,116,97,103,114,97,110,97,100,97,99,111,109,112,114,97,114,105,110,\n103,114,101,115,111,103,97,114,99,195,173,97,97,99,99,105,195,179,110,101,99,117\n,97,100,111,114,113,117,105,101,110,101,115,105,110,99,108,117,115,111,100,101,\n98,101,114,195,161,109,97,116,101,114,105,97,104,111,109,98,114,101,115,109,117,\n101,115,116,114,97,112,111,100,114,195,173,97,109,97,195,177,97,110,97,195,186,\n108,116,105,109,97,101,115,116,97,109,111,115,111,102,105,99,105,97,108,116,97,\n109,98,105,101,110,110,105,110,103,195,186,110,115,97,108,117,100,111,115,112,\n111,100,101,109,111,115,109,101,106,111,114,97,114,112,111,115,105,116,105,111,\n110,98,117,115,105,110,101,115,115,104,111,109,101,112,97,103,101,115,101,99,117\n,114,105,116,121,108,97,110,103,117,97,103,101,115,116,97,110,100,97,114,100,99,\n97,109,112,97,105,103,110,102,101,97,116,117,114,101,115,99,97,116,101,103,111,\n114,121,101,120,116,101,114,110,97,108,99,104,105,108,100,114,101,110,114,101,\n115,101,114,118,101,100,114,101,115,101,97,114,99,104,101,120,99,104,97,110,103,\n101,102,97,118,111,114,105,116,101,116,101,109,112,108,97,116,101,109,105,108,\n105,116,97,114,121,105,110,100,117,115,116,114,121,115,101,114,118,105,99,101,\n115,109,97,116,101,114,105,97,108,112,114,111,100,117,99,116,115,122,45,105,110,\n100,101,120,58,99,111,109,109,101,110,116,115,115,111,102,116,119,97,114,101,99,\n111,109,112,108,101,116,101,99,97,108,101,110,100,97,114,112,108,97,116,102,111,\n114,109,97,114,116,105,99,108,101,115,114,101,113,117,105,114,101,100,109,111,\n118,101,109,101,110,116,113,117,101,115,116,105,111,110,98,117,105,108,100,105,\n110,103,112,111,108,105,116,105,99,115,112,111,115,115,105,98,108,101,114,101,\n108,105,103,105,111,110,112,104,121,115,105,99,97,108,102,101,101,100,98,97,99,\n107,114,101,103,105,115,116,101,114,112,105,99,116,117,114,101,115,100,105,115,\n97,98,108,101,100,112,114,111,116,111,99,111,108,97,117,100,105,101,110,99,101,\n115,101,116,116,105,110,103,115,97,99,116,105,118,105,116,121,101,108,101,109,\n101,110,116,115,108,101,97,114,110,105,110,103,97,110,121,116,104,105,110,103,97\n,98,115,116,114,97,99,116,112,114,111,103,114,101,115,115,111,118,101,114,118,\n105,101,119,109,97,103,97,122,105,110,101,101,99,111,110,111,109,105,99,116,114,\n97,105,110,105,110,103,112,114,101,115,115,117,114,101,118,97,114,105,111,117,\n115,32,60,115,116,114,111,110,103,62,112,114,111,112,101,114,116,121,115,104,111\n,112,112,105,110,103,116,111,103,101,116,104,101,114,97,100,118,97,110,99,101,\n100,98,101,104,97,118,105,111,114,100,111,119,110,108,111,97,100,102,101,97,116,\n117,114,101,100,102,111,111,116,98,97,108,108,115,101,108,101,99,116,101,100,76,\n97,110,103,117,97,103,101,100,105,115,116,97,110,99,101,114,101,109,101,109,98,\n101,114,116,114,97,99,107,105,110,103,112,97,115,115,119,111,114,100,109,111,100\n,105,102,105,101,100,115,116,117,100,101,110,116,115,100,105,114,101,99,116,108,\n121,102,105,103,104,116,105,110,103,110,111,114,116,104,101,114,110,100,97,116,\n97,98,97,115,101,102,101,115,116,105,118,97,108,98,114,101,97,107,105,110,103,\n108,111,99,97,116,105,111,110,105,110,116,101,114,110,101,116,100,114,111,112,\n100,111,119,110,112,114,97,99,116,105,99,101,101,118,105,100,101,110,99,101,102,\n117,110,99,116,105,111,110,109,97,114,114,105,97,103,101,114,101,115,112,111,110\n,115,101,112,114,111,98,108,101,109,115,110,101,103,97,116,105,118,101,112,114,\n111,103,114,97,109,115,97,110,97,108,121,115,105,115,114,101,108,101,97,115,101,\n100,98,97,110,110,101,114,34,62,112,117,114,99,104,97,115,101,112,111,108,105,99\n,105,101,115,114,101,103,105,111,110,97,108,99,114,101,97,116,105,118,101,97,114\n,103,117,109,101,110,116,98,111,111,107,109,97,114,107,114,101,102,101,114,114,\n101,114,99,104,101,109,105,99,97,108,100,105,118,105,115,105,111,110,99,97,108,\n108,98,97,99,107,115,101,112,97,114,97,116,101,112,114,111,106,101,99,116,115,99\n,111,110,102,108,105,99,116,104,97,114,100,119,97,114,101,105,110,116,101,114,\n101,115,116,100,101,108,105,118,101,114,121,109,111,117,110,116,97,105,110,111,\n98,116,97,105,110,101,100,61,32,102,97,108,115,101,59,102,111,114,40,118,97,114,\n32,97,99,99,101,112,116,101,100,99,97,112,97,99,105,116,121,99,111,109,112,117,\n116,101,114,105,100,101,110,116,105,116,121,97,105,114,99,114,97,102,116,101,109\n,112,108,111,121,101,100,112,114,111,112,111,115,101,100,100,111,109,101,115,116\n,105,99,105,110,99,108,117,100,101,115,112,114,111,118,105,100,101,100,104,111,\n115,112,105,116,97,108,118,101,114,116,105,99,97,108,99,111,108,108,97,112,115,\n101,97,112,112,114,111,97,99,104,112,97,114,116,110,101,114,115,108,111,103,111,\n34,62,60,97,100,97,117,103,104,116,101,114,97,117,116,104,111,114,34,32,99,117,\n108,116,117,114,97,108,102,97,109,105,108,105,101,115,47,105,109,97,103,101,115,\n47,97,115,115,101,109,98,108,121,112,111,119,101,114,102,117,108,116,101,97,99,\n104,105,110,103,102,105,110,105,115,104,101,100,100,105,115,116,114,105,99,116,\n99,114,105,116,105,99,97,108,99,103,105,45,98,105,110,47,112,117,114,112,111,115\n,101,115,114,101,113,117,105,114,101,115,101,108,101,99,116,105,111,110,98,101,\n99,111,109,105,110,103,112,114,111,118,105,100,101,115,97,99,97,100,101,109,105,\n99,101,120,101,114,99,105,115,101,97,99,116,117,97,108,108,121,109,101,100,105,\n99,105,110,101,99,111,110,115,116,97,110,116,97,99,99,105,100,101,110,116,77,97,\n103,97,122,105,110,101,100,111,99,117,109,101,110,116,115,116,97,114,116,105,110\n,103,98,111,116,116,111,109,34,62,111,98,115,101,114,118,101,100,58,32,38,113,\n117,111,116,59,101,120,116,101,110,100,101,100,112,114,101,118,105,111,117,115,\n83,111,102,116,119,97,114,101,99,117,115,116,111,109,101,114,100,101,99,105,115,\n105,111,110,115,116,114,101,110,103,116,104,100,101,116,97,105,108,101,100,115,\n108,105,103,104,116,108,121,112,108,97,110,110,105,110,103,116,101,120,116,97,\n114,101,97,99,117,114,114,101,110,99,121,101,118,101,114,121,111,110,101,115,116\n,114,97,105,103,104,116,116,114,97,110,115,102,101,114,112,111,115,105,116,105,\n118,101,112,114,111,100,117,99,101,100,104,101,114,105,116,97,103,101,115,104,\n105,112,112,105,110,103,97,98,115,111,108,117,116,101,114,101,99,101,105,118,101\n,100,114,101,108,101,118,97,110,116,98,117,116,116,111,110,34,32,118,105,111,108\n,101,110,99,101,97,110,121,119,104,101,114,101,98,101,110,101,102,105,116,115,\n108,97,117,110,99,104,101,100,114,101,99,101,110,116,108,121,97,108,108,105,97,\n110,99,101,102,111,108,108,111,119,101,100,109,117,108,116,105,112,108,101,98,\n117,108,108,101,116,105,110,105,110,99,108,117,100,101,100,111,99,99,117,114,114\n,101,100,105,110,116,101,114,110,97,108,36,40,116,104,105,115,41,46,114,101,112,\n117,98,108,105,99,62,60,116,114,62,60,116,100,99,111,110,103,114,101,115,115,114\n,101,99,111,114,100,101,100,117,108,116,105,109,97,116,101,115,111,108,117,116,\n105,111,110,60,117,108,32,105,100,61,34,100,105,115,99,111,118,101,114,72,111,\n109,101,60,47,97,62,119,101,98,115,105,116,101,115,110,101,116,119,111,114,107,\n115,97,108,116,104,111,117,103,104,101,110,116,105,114,101,108,121,109,101,109,\n111,114,105,97,108,109,101,115,115,97,103,101,115,99,111,110,116,105,110,117,101\n,97,99,116,105,118,101,34,62,115,111,109,101,119,104,97,116,118,105,99,116,111,\n114,105,97,87,101,115,116,101,114,110,32,32,116,105,116,108,101,61,34,76,111,99,\n97,116,105,111,110,99,111,110,116,114,97,99,116,118,105,115,105,116,111,114,115,\n68,111,119,110,108,111,97,100,119,105,116,104,111,117,116,32,114,105,103,104,116\n,34,62,10,109,101,97,115,117,114,101,115,119,105,100,116,104,32,61,32,118,97,114\n,105,97,98,108,101,105,110,118,111,108,118,101,100,118,105,114,103,105,110,105,\n97,110,111,114,109,97,108,108,121,104,97,112,112,101,110,101,100,97,99,99,111,\n117,110,116,115,115,116,97,110,100,105,110,103,110,97,116,105,111,110,97,108,82,\n101,103,105,115,116,101,114,112,114,101,112,97,114,101,100,99,111,110,116,114,\n111,108,115,97,99,99,117,114,97,116,101,98,105,114,116,104,100,97,121,115,116,\n114,97,116,101,103,121,111,102,102,105,99,105,97,108,103,114,97,112,104,105,99,\n115,99,114,105,109,105,110,97,108,112,111,115,115,105,98,108,121,99,111,110,115,\n117,109,101,114,80,101,114,115,111,110,97,108,115,112,101,97,107,105,110,103,118\n,97,108,105,100,97,116,101,97,99,104,105,101,118,101,100,46,106,112,103,34,32,47\n,62,109,97,99,104,105,110,101,115,60,47,104,50,62,10,32,32,107,101,121,119,111,\n114,100,115,102,114,105,101,110,100,108,121,98,114,111,116,104,101,114,115,99,\n111,109,98,105,110,101,100,111,114,105,103,105,110,97,108,99,111,109,112,111,115\n,101,100,101,120,112,101,99,116,101,100,97,100,101,113,117,97,116,101,112,97,107\n,105,115,116,97,110,102,111,108,108,111,119,34,32,118,97,108,117,97,98,108,101,\n60,47,108,97,98,101,108,62,114,101,108,97,116,105,118,101,98,114,105,110,103,105\n,110,103,105,110,99,114,101,97,115,101,103,111,118,101,114,110,111,114,112,108,\n117,103,105,110,115,47,76,105,115,116,32,111,102,32,72,101,97,100,101,114,34,62,\n34,32,110,97,109,101,61,34,32,40,38,113,117,111,116,59,103,114,97,100,117,97,116\n,101,60,47,104,101,97,100,62,10,99,111,109,109,101,114,99,101,109,97,108,97,121,\n115,105,97,100,105,114,101,99,116,111,114,109,97,105,110,116,97,105,110,59,104,\n101,105,103,104,116,58,115,99,104,101,100,117,108,101,99,104,97,110,103,105,110,\n103,98,97,99,107,32,116,111,32,99,97,116,104,111,108,105,99,112,97,116,116,101,\n114,110,115,99,111,108,111,114,58,32,35,103,114,101,97,116,101,115,116,115,117,\n112,112,108,105,101,115,114,101,108,105,97,98,108,101,60,47,117,108,62,10,9,9,60\n,115,101,108,101,99,116,32,99,105,116,105,122,101,110,115,99,108,111,116,104,105\n,110,103,119,97,116,99,104,105,110,103,60,108,105,32,105,100,61,34,115,112,101,\n99,105,102,105,99,99,97,114,114,121,105,110,103,115,101,110,116,101,110,99,101,\n60,99,101,110,116,101,114,62,99,111,110,116,114,97,115,116,116,104,105,110,107,\n105,110,103,99,97,116,99,104,40,101,41,115,111,117,116,104,101,114,110,77,105,99\n,104,97,101,108,32,109,101,114,99,104,97,110,116,99,97,114,111,117,115,101,108,\n112,97,100,100,105,110,103,58,105,110,116,101,114,105,111,114,46,115,112,108,105\n,116,40,34,108,105,122,97,116,105,111,110,79,99,116,111,98,101,114,32,41,123,114\n,101,116,117,114,110,105,109,112,114,111,118,101,100,45,45,38,103,116,59,10,10,\n99,111,118,101,114,97,103,101,99,104,97,105,114,109,97,110,46,112,110,103,34,32,\n47,62,115,117,98,106,101,99,116,115,82,105,99,104,97,114,100,32,119,104,97,116,\n101,118,101,114,112,114,111,98,97,98,108,121,114,101,99,111,118,101,114,121,98,\n97,115,101,98,97,108,108,106,117,100,103,109,101,110,116,99,111,110,110,101,99,\n116,46,46,99,115,115,34,32,47,62,32,119,101,98,115,105,116,101,114,101,112,111,\n114,116,101,100,100,101,102,97,117,108,116,34,47,62,60,47,97,62,13,10,101,108,\n101,99,116,114,105,99,115,99,111,116,108,97,110,100,99,114,101,97,116,105,111,\n110,113,117,97,110,116,105,116,121,46,32,73,83,66,78,32,48,100,105,100,32,110,\n111,116,32,105,110,115,116,97,110,99,101,45,115,101,97,114,99,104,45,34,32,108,\n97,110,103,61,34,115,112,101,97,107,101,114,115,67,111,109,112,117,116,101,114,\n99,111,110,116,97,105,110,115,97,114,99,104,105,118,101,115,109,105,110,105,115,\n116,101,114,114,101,97,99,116,105,111,110,100,105,115,99,111,117,110,116,73,116,\n97,108,105,97,110,111,99,114,105,116,101,114,105,97,115,116,114,111,110,103,108,\n121,58,32,39,104,116,116,112,58,39,115,99,114,105,112,116,39,99,111,118,101,114,\n105,110,103,111,102,102,101,114,105,110,103,97,112,112,101,97,114,101,100,66,114\n,105,116,105,115,104,32,105,100,101,110,116,105,102,121,70,97,99,101,98,111,111,\n107,110,117,109,101,114,111,117,115,118,101,104,105,99,108,101,115,99,111,110,99\n,101,114,110,115,65,109,101,114,105,99,97,110,104,97,110,100,108,105,110,103,100\n,105,118,32,105,100,61,34,87,105,108,108,105,97,109,32,112,114,111,118,105,100,\n101,114,95,99,111,110,116,101,110,116,97,99,99,117,114,97,99,121,115,101,99,116,\n105,111,110,32,97,110,100,101,114,115,111,110,102,108,101,120,105,98,108,101,67,\n97,116,101,103,111,114,121,108,97,119,114,101,110,99,101,60,115,99,114,105,112,\n116,62,108,97,121,111,117,116,61,34,97,112,112,114,111,118,101,100,32,109,97,120\n,105,109,117,109,104,101,97,100,101,114,34,62,60,47,116,97,98,108,101,62,83,101,\n114,118,105,99,101,115,104,97,109,105,108,116,111,110,99,117,114,114,101,110,116\n,32,99,97,110,97,100,105,97,110,99,104,97,110,110,101,108,115,47,116,104,101,109\n,101,115,47,47,97,114,116,105,99,108,101,111,112,116,105,111,110,97,108,112,111,\n114,116,117,103,97,108,118,97,108,117,101,61,34,34,105,110,116,101,114,118,97,\n108,119,105,114,101,108,101,115,115,101,110,116,105,116,108,101,100,97,103,101,\n110,99,105,101,115,83,101,97,114,99,104,34,32,109,101,97,115,117,114,101,100,116\n,104,111,117,115,97,110,100,115,112,101,110,100,105,110,103,38,104,101,108,108,\n105,112,59,110,101,119,32,68,97,116,101,34,32,115,105,122,101,61,34,112,97,103,\n101,78,97,109,101,109,105,100,100,108,101,34,32,34,32,47,62,60,47,97,62,104,105,\n100,100,101,110,34,62,115,101,113,117,101,110,99,101,112,101,114,115,111,110,97,\n108,111,118,101,114,102,108,111,119,111,112,105,110,105,111,110,115,105,108,108,\n105,110,111,105,115,108,105,110,107,115,34,62,10,9,60,116,105,116,108,101,62,118\n,101,114,115,105,111,110,115,115,97,116,117,114,100,97,121,116,101,114,109,105,\n110,97,108,105,116,101,109,112,114,111,112,101,110,103,105,110,101,101,114,115,\n101,99,116,105,111,110,115,100,101,115,105,103,110,101,114,112,114,111,112,111,\n115,97,108,61,34,102,97,108,115,101,34,69,115,112,97,195,177,111,108,114,101,108\n,101,97,115,101,115,115,117,98,109,105,116,34,32,101,114,38,113,117,111,116,59,\n97,100,100,105,116,105,111,110,115,121,109,112,116,111,109,115,111,114,105,101,\n110,116,101,100,114,101,115,111,117,114,99,101,114,105,103,104,116,34,62,60,112,\n108,101,97,115,117,114,101,115,116,97,116,105,111,110,115,104,105,115,116,111,\n114,121,46,108,101,97,118,105,110,103,32,32,98,111,114,100,101,114,61,99,111,110\n,116,101,110,116,115,99,101,110,116,101,114,34,62,46,10,10,83,111,109,101,32,100\n,105,114,101,99,116,101,100,115,117,105,116,97,98,108,101,98,117,108,103,97,114,\n105,97,46,115,104,111,119,40,41,59,100,101,115,105,103,110,101,100,71,101,110,\n101,114,97,108,32,99,111,110,99,101,112,116,115,69,120,97,109,112,108,101,115,\n119,105,108,108,105,97,109,115,79,114,105,103,105,110,97,108,34,62,60,115,112,97\n,110,62,115,101,97,114,99,104,34,62,111,112,101,114,97,116,111,114,114,101,113,\n117,101,115,116,115,97,32,38,113,117,111,116,59,97,108,108,111,119,105,110,103,\n68,111,99,117,109,101,110,116,114,101,118,105,115,105,111,110,46,32,10,10,84,104\n,101,32,121,111,117,114,115,101,108,102,67,111,110,116,97,99,116,32,109,105,99,\n104,105,103,97,110,69,110,103,108,105,115,104,32,99,111,108,117,109,98,105,97,\n112,114,105,111,114,105,116,121,112,114,105,110,116,105,110,103,100,114,105,110,\n107,105,110,103,102,97,99,105,108,105,116,121,114,101,116,117,114,110,101,100,67\n,111,110,116,101,110,116,32,111,102,102,105,99,101,114,115,82,117,115,115,105,97\n,110,32,103,101,110,101,114,97,116,101,45,56,56,53,57,45,49,34,105,110,100,105,\n99,97,116,101,102,97,109,105,108,105,97,114,32,113,117,97,108,105,116,121,109,97\n,114,103,105,110,58,48,32,99,111,110,116,101,110,116,118,105,101,119,112,111,114\n,116,99,111,110,116,97,99,116,115,45,116,105,116,108,101,34,62,112,111,114,116,\n97,98,108,101,46,108,101,110,103,116,104,32,101,108,105,103,105,98,108,101,105,\n110,118,111,108,118,101,115,97,116,108,97,110,116,105,99,111,110,108,111,97,100,\n61,34,100,101,102,97,117,108,116,46,115,117,112,112,108,105,101,100,112,97,121,\n109,101,110,116,115,103,108,111,115,115,97,114,121,10,10,65,102,116,101,114,32,\n103,117,105,100,97,110,99,101,60,47,116,100,62,60,116,100,101,110,99,111,100,105\n,110,103,109,105,100,100,108,101,34,62,99,97,109,101,32,116,111,32,100,105,115,\n112,108,97,121,115,115,99,111,116,116,105,115,104,106,111,110,97,116,104,97,110,\n109,97,106,111,114,105,116,121,119,105,100,103,101,116,115,46,99,108,105,110,105\n,99,97,108,116,104,97,105,108,97,110,100,116,101,97,99,104,101,114,115,60,104,\n101,97,100,62,10,9,97,102,102,101,99,116,101,100,115,117,112,112,111,114,116,115\n,112,111,105,110,116,101,114,59,116,111,83,116,114,105,110,103,60,47,115,109,97,\n108,108,62,111,107,108,97,104,111,109,97,119,105,108,108,32,98,101,32,105,110,\n118,101,115,116,111,114,48,34,32,97,108,116,61,34,104,111,108,105,100,97,121,115\n,82,101,115,111,117,114,99,101,108,105,99,101,110,115,101,100,32,40,119,104,105,\n99,104,32,46,32,65,102,116,101,114,32,99,111,110,115,105,100,101,114,118,105,115\n,105,116,105,110,103,101,120,112,108,111,114,101,114,112,114,105,109,97,114,121,\n32,115,101,97,114,99,104,34,32,97,110,100,114,111,105,100,34,113,117,105,99,107,\n108,121,32,109,101,101,116,105,110,103,115,101,115,116,105,109,97,116,101,59,114\n,101,116,117,114,110,32,59,99,111,108,111,114,58,35,32,104,101,105,103,104,116,\n61,97,112,112,114,111,118,97,108,44,32,38,113,117,111,116,59,32,99,104,101,99,\n107,101,100,46,109,105,110,46,106,115,34,109,97,103,110,101,116,105,99,62,60,47,\n97,62,60,47,104,102,111,114,101,99,97,115,116,46,32,87,104,105,108,101,32,116,\n104,117,114,115,100,97,121,100,118,101,114,116,105,115,101,38,101,97,99,117,116,\n101,59,104,97,115,67,108,97,115,115,101,118,97,108,117,97,116,101,111,114,100,\n101,114,105,110,103,101,120,105,115,116,105,110,103,112,97,116,105,101,110,116,\n115,32,79,110,108,105,110,101,32,99,111,108,111,114,97,100,111,79,112,116,105,\n111,110,115,34,99,97,109,112,98,101,108,108,60,33,45,45,32,101,110,100,60,47,115\n,112,97,110,62,60,60,98,114,32,47,62,13,10,95,112,111,112,117,112,115,124,115,99\n,105,101,110,99,101,115,44,38,113,117,111,116,59,32,113,117,97,108,105,116,121,\n32,87,105,110,100,111,119,115,32,97,115,115,105,103,110,101,100,104,101,105,103,\n104,116,58,32,60,98,32,99,108,97,115,115,108,101,38,113,117,111,116,59,32,118,97\n,108,117,101,61,34,32,67,111,109,112,97,110,121,101,120,97,109,112,108,101,115,\n60,105,102,114,97,109,101,32,98,101,108,105,101,118,101,115,112,114,101,115,101,\n110,116,115,109,97,114,115,104,97,108,108,112,97,114,116,32,111,102,32,112,114,\n111,112,101,114,108,121,41,46,10,10,84,104,101,32,116,97,120,111,110,111,109,121\n,109,117,99,104,32,111,102,32,60,47,115,112,97,110,62,10,34,32,100,97,116,97,45,\n115,114,116,117,103,117,195,170,115,115,99,114,111,108,108,84,111,32,112,114,111\n,106,101,99,116,60,104,101,97,100,62,13,10,97,116,116,111,114,110,101,121,101,\n109,112,104,97,115,105,115,115,112,111,110,115,111,114,115,102,97,110,99,121,98,\n111,120,119,111,114,108,100,39,115,32,119,105,108,100,108,105,102,101,99,104,101\n,99,107,101,100,61,115,101,115,115,105,111,110,115,112,114,111,103,114,97,109,\n109,112,120,59,102,111,110,116,45,32,80,114,111,106,101,99,116,106,111,117,114,\n110,97,108,115,98,101,108,105,101,118,101,100,118,97,99,97,116,105,111,110,116,\n104,111,109,112,115,111,110,108,105,103,104,116,105,110,103,97,110,100,32,116,\n104,101,32,115,112,101,99,105,97,108,32,98,111,114,100,101,114,61,48,99,104,101,\n99,107,105,110,103,60,47,116,98,111,100,121,62,60,98,117,116,116,111,110,32,67,\n111,109,112,108,101,116,101,99,108,101,97,114,102,105,120,10,60,104,101,97,100,\n62,10,97,114,116,105,99,108,101,32,60,115,101,99,116,105,111,110,102,105,110,100\n,105,110,103,115,114,111,108,101,32,105,110,32,112,111,112,117,108,97,114,32,32,\n79,99,116,111,98,101,114,119,101,98,115,105,116,101,32,101,120,112,111,115,117,\n114,101,117,115,101,100,32,116,111,32,32,99,104,97,110,103,101,115,111,112,101,\n114,97,116,101,100,99,108,105,99,107,105,110,103,101,110,116,101,114,105,110,103\n,99,111,109,109,97,110,100,115,105,110,102,111,114,109,101,100,32,110,117,109,98\n,101,114,115,32,32,60,47,100,105,118,62,99,114,101,97,116,105,110,103,111,110,83\n,117,98,109,105,116,109,97,114,121,108,97,110,100,99,111,108,108,101,103,101,115\n,97,110,97,108,121,116,105,99,108,105,115,116,105,110,103,115,99,111,110,116,97,\n99,116,46,108,111,103,103,101,100,73,110,97,100,118,105,115,111,114,121,115,105,\n98,108,105,110,103,115,99,111,110,116,101,110,116,34,115,38,113,117,111,116,59,\n41,115,46,32,84,104,105,115,32,112,97,99,107,97,103,101,115,99,104,101,99,107,98\n,111,120,115,117,103,103,101,115,116,115,112,114,101,103,110,97,110,116,116,111,\n109,111,114,114,111,119,115,112,97,99,105,110,103,61,105,99,111,110,46,112,110,\n103,106,97,112,97,110,101,115,101,99,111,100,101,98,97,115,101,98,117,116,116,\n111,110,34,62,103,97,109,98,108,105,110,103,115,117,99,104,32,97,115,32,44,32,\n119,104,105,108,101,32,60,47,115,112,97,110,62,32,109,105,115,115,111,117,114,\n105,115,112,111,114,116,105,110,103,116,111,112,58,49,112,120,32,46,60,47,115,\n112,97,110,62,116,101,110,115,105,111,110,115,119,105,100,116,104,61,34,50,108,\n97,122,121,108,111,97,100,110,111,118,101,109,98,101,114,117,115,101,100,32,105,\n110,32,104,101,105,103,104,116,61,34,99,114,105,112,116,34,62,10,38,110,98,115,\n112,59,60,47,60,116,114,62,60,116,100,32,104,101,105,103,104,116,58,50,47,112,\n114,111,100,117,99,116,99,111,117,110,116,114,121,32,105,110,99,108,117,100,101,\n32,102,111,111,116,101,114,34,32,38,108,116,59,33,45,45,32,116,105,116,108,101,\n34,62,60,47,106,113,117,101,114,121,46,60,47,102,111,114,109,62,10,40,231,174,\n128,228,189,147,41,40,231,185,129,233,171,148,41,104,114,118,97,116,115,107,105,\n105,116,97,108,105,97,110,111,114,111,109,195,162,110,196,131,116,195,188,114,\n107,195,167,101,216,167,216,177,216,175,217,136,116,97,109,98,105,195,169,110,\n110,111,116,105,99,105,97,115,109,101,110,115,97,106,101,115,112,101,114,115,111\n,110,97,115,100,101,114,101,99,104,111,115,110,97,99,105,111,110,97,108,115,101,\n114,118,105,99,105,111,99,111,110,116,97,99,116,111,117,115,117,97,114,105,111,\n115,112,114,111,103,114,97,109,97,103,111,98,105,101,114,110,111,101,109,112,114\n,101,115,97,115,97,110,117,110,99,105,111,115,118,97,108,101,110,99,105,97,99,\n111,108,111,109,98,105,97,100,101,115,112,117,195,169,115,100,101,112,111,114,\n116,101,115,112,114,111,121,101,99,116,111,112,114,111,100,117,99,116,111,112,\n195,186,98,108,105,99,111,110,111,115,111,116,114,111,115,104,105,115,116,111,\n114,105,97,112,114,101,115,101,110,116,101,109,105,108,108,111,110,101,115,109,\n101,100,105,97,110,116,101,112,114,101,103,117,110,116,97,97,110,116,101,114,105\n,111,114,114,101,99,117,114,115,111,115,112,114,111,98,108,101,109,97,115,97,110\n,116,105,97,103,111,110,117,101,115,116,114,111,115,111,112,105,110,105,195,179,\n110,105,109,112,114,105,109,105,114,109,105,101,110,116,114,97,115,97,109,195,\n169,114,105,99,97,118,101,110,100,101,100,111,114,115,111,99,105,101,100,97,100,\n114,101,115,112,101,99,116,111,114,101,97,108,105,122,97,114,114,101,103,105,115\n,116,114,111,112,97,108,97,98,114,97,115,105,110,116,101,114,195,169,115,101,110\n,116,111,110,99,101,115,101,115,112,101,99,105,97,108,109,105,101,109,98,114,111\n,115,114,101,97,108,105,100,97,100,99,195,179,114,100,111,98,97,122,97,114,97,\n103,111,122,97,112,195,161,103,105,110,97,115,115,111,99,105,97,108,101,115,98,\n108,111,113,117,101,97,114,103,101,115,116,105,195,179,110,97,108,113,117,105,\n108,101,114,115,105,115,116,101,109,97,115,99,105,101,110,99,105,97,115,99,111,\n109,112,108,101,116,111,118,101,114,115,105,195,179,110,99,111,109,112,108,101,\n116,97,101,115,116,117,100,105,111,115,112,195,186,98,108,105,99,97,111,98,106,\n101,116,105,118,111,97,108,105,99,97,110,116,101,98,117,115,99,97,100,111,114,99\n,97,110,116,105,100,97,100,101,110,116,114,97,100,97,115,97,99,99,105,111,110,\n101,115,97,114,99,104,105,118,111,115,115,117,112,101,114,105,111,114,109,97,121\n,111,114,195,173,97,97,108,101,109,97,110,105,97,102,117,110,99,105,195,179,110,\n195,186,108,116,105,109,111,115,104,97,99,105,101,110,100,111,97,113,117,101,108\n,108,111,115,101,100,105,99,105,195,179,110,102,101,114,110,97,110,100,111,97,\n109,98,105,101,110,116,101,102,97,99,101,98,111,111,107,110,117,101,115,116,114,\n97,115,99,108,105,101,110,116,101,115,112,114,111,99,101,115,111,115,98,97,115,\n116,97,110,116,101,112,114,101,115,101,110,116,97,114,101,112,111,114,116,97,114\n,99,111,110,103,114,101,115,111,112,117,98,108,105,99,97,114,99,111,109,101,114,\n99,105,111,99,111,110,116,114,97,116,111,106,195,179,118,101,110,101,115,100,105\n,115,116,114,105,116,111,116,195,169,99,110,105,99,97,99,111,110,106,117,110,116\n,111,101,110,101,114,103,195,173,97,116,114,97,98,97,106,97,114,97,115,116,117,\n114,105,97,115,114,101,99,105,101,110,116,101,117,116,105,108,105,122,97,114,98,\n111,108,101,116,195,173,110,115,97,108,118,97,100,111,114,99,111,114,114,101,99,\n116,97,116,114,97,98,97,106,111,115,112,114,105,109,101,114,111,115,110,101,103,\n111,99,105,111,115,108,105,98,101,114,116,97,100,100,101,116,97,108,108,101,115,\n112,97,110,116,97,108,108,97,112,114,195,179,120,105,109,111,97,108,109,101,114,\n195,173,97,97,110,105,109,97,108,101,115,113,117,105,195,169,110,101,115,99,111,\n114,97,122,195,179,110,115,101,99,99,105,195,179,110,98,117,115,99,97,110,100,\n111,111,112,99,105,111,110,101,115,101,120,116,101,114,105,111,114,99,111,110,99\n,101,112,116,111,116,111,100,97,118,195,173,97,103,97,108,101,114,195,173,97,101\n,115,99,114,105,98,105,114,109,101,100,105,99,105,110,97,108,105,99,101,110,99,\n105,97,99,111,110,115,117,108,116,97,97,115,112,101,99,116,111,115,99,114,195,\n173,116,105,99,97,100,195,179,108,97,114,101,115,106,117,115,116,105,99,105,97,\n100,101,98,101,114,195,161,110,112,101,114,195,173,111,100,111,110,101,99,101,\n115,105,116,97,109,97,110,116,101,110,101,114,112,101,113,117,101,195,177,111,\n114,101,99,105,98,105,100,97,116,114,105,98,117,110,97,108,116,101,110,101,114,\n105,102,101,99,97,110,99,105,195,179,110,99,97,110,97,114,105,97,115,100,101,115\n,99,97,114,103,97,100,105,118,101,114,115,111,115,109,97,108,108,111,114,99,97,\n114,101,113,117,105,101,114,101,116,195,169,99,110,105,99,111,100,101,98,101,114\n,195,173,97,118,105,118,105,101,110,100,97,102,105,110,97,110,122,97,115,97,100,\n101,108,97,110,116,101,102,117,110,99,105,111,110,97,99,111,110,115,101,106,111,\n115,100,105,102,195,173,99,105,108,99,105,117,100,97,100,101,115,97,110,116,105,\n103,117,97,115,97,118,97,110,122,97,100,97,116,195,169,114,109,105,110,111,117,\n110,105,100,97,100,101,115,115,195,161,110,99,104,101,122,99,97,109,112,97,195,\n177,97,115,111,102,116,111,110,105,99,114,101,118,105,115,116,97,115,99,111,110,\n116,105,101,110,101,115,101,99,116,111,114,101,115,109,111,109,101,110,116,111,\n115,102,97,99,117,108,116,97,100,99,114,195,169,100,105,116,111,100,105,118,101,\n114,115,97,115,115,117,112,117,101,115,116,111,102,97,99,116,111,114,101,115,115\n,101,103,117,110,100,111,115,112,101,113,117,101,195,177,97,208,179,208,190,208,\n180,208,176,208,181,209,129,208,187,208,184,208,181,209,129,209,130,209,140,208,\n177,209,139,208,187,208,190,208,177,209,139,209,130,209,140,209,141,209,130,208,\n190,208,188,208,149,209,129,208,187,208,184,209,130,208,190,208,179,208,190,208,\n188,208,181,208,189,209,143,208,178,209,129,208,181,209,133,209,141,209,130,208,\n190,208,185,208,180,208,176,208,182,208,181,208,177,209,139,208,187,208,184,208,\n179,208,190,208,180,209,131,208,180,208,181,208,189,209,140,209,141,209,130,208,\n190,209,130,208,177,209,139,208,187,208,176,209,129,208,181,208,177,209,143,208,\n190,208,180,208,184,208,189,209,129,208,181,208,177,208,181,208,189,208,176,208,\n180,208,190,209,129,208,176,208,185,209,130,209,132,208,190,209,130,208,190,208,\n189,208,181,208,179,208,190,209,129,208,178,208,190,208,184,209,129,208,178,208,\n190,208,185,208,184,208,179,209,128,209,139,209,130,208,190,208,182,208,181,208,\n178,209,129,208,181,208,188,209,129,208,178,208,190,209,142,208,187,208,184,209,\n136,209,140,209,141,209,130,208,184,209,133,208,191,208,190,208,186,208,176,208,\n180,208,189,208,181,208,185,208,180,208,190,208,188,208,176,208,188,208,184,209,\n128,208,176,208,187,208,184,208,177,208,190,209,130,208,181,208,188,209,131,209,\n133,208,190,209,130,209,143,208,180,208,178,209,131,209,133,209,129,208,181,209,\n130,208,184,208,187,209,142,208,180,208,184,208,180,208,181,208,187,208,190,208,\n188,208,184,209,128,208,181,209,130,208,181,208,177,209,143,209,129,208,178,208,\n190,208,181,208,178,208,184,208,180,208,181,209,135,208,181,208,179,208,190,209,\n141,209,130,208,184,208,188,209,129,209,135,208,181,209,130,209,130,208,181,208,\n188,209,139,209,134,208,181,208,189,209,139,209,129,209,130,208,176,208,187,208,\n178,208,181,208,180,209,140,209,130,208,181,208,188,208,181,208,178,208,190,208,\n180,209,139,209,130,208,181,208,177,208,181,208,178,209,139,209,136,208,181,208,\n189,208,176,208,188,208,184,209,130,208,184,208,191,208,176,209,130,208,190,208,\n188,209,131,208,191,209,128,208,176,208,178,208,187,208,184,209,134,208,176,208,\n190,208,180,208,189,208,176,208,179,208,190,208,180,209,139,208,183,208,189,208,\n176,209,142,208,188,208,190,208,179,209,131,208,180,209,128,209,131,208,179,208,\n178,209,129,208,181,208,185,208,184,208,180,208,181,209,130,208,186,208,184,208,\n189,208,190,208,190,208,180,208,189,208,190,208,180,208,181,208,187,208,176,208,\n180,208,181,208,187,208,181,209,129,209,128,208,190,208,186,208,184,209,142,208,\n189,209,143,208,178,208,181,209,129,209,140,208,149,209,129,209,130,209,140,209,\n128,208,176,208,183,208,176,208,189,208,176,209,136,208,184,216,167,217,132,217,\n132,217,135,216,167,217,132,216,170,217,138,216,172,217,133,217,138,216,185,216,\n174,216,167,216,181,216,169,216,167,217,132,216,176,217,138,216,185,217,132,217,\n138,217,135,216,172,216,175,217,138,216,175,216,167,217,132,216,162,217,134,216,\n167,217,132,216,177,216,175,216,170,216,173,217,131,217,133,216,181,217,129,216,\n173,216,169,217,131,216,167,217,134,216,170,216,167,217,132,217,132,217,138,217,\n138,217,131,217,136,217,134,216,180,216,168,217,131,216,169,217,129,217,138,217,\n135,216,167,216,168,217,134,216,167,216,170,216,173,217,136,216,167,216,161,216,\n163,217,131,216,171,216,177,216,174,217,132,216,167,217,132,216,167,217,132,216,\n173,216,168,216,175,217,132,217,138,217,132,216,175,216,177,217,136,216,179,216,\n167,216,182,216,186,216,183,216,170,217,131,217,136,217,134,217,135,217,134,216,\n167,217,131,216,179,216,167,216,173,216,169,217,134,216,167,216,175,217,138,216,\n167,217,132,216,183,216,168,216,185,217,132,217,138,217,131,216,180,217,131,216,\n177,216,167,217,138,217,133,217,131,217,134,217,133,217,134,217,135,216,167,216,\n180,216,177,217,131,216,169,216,177,216,166,217,138,216,179,217,134,216,180,217,\n138,216,183,217,133,216,167,216,176,216,167,216,167,217,132,217,129,217,134,216,\n180,216,168,216,167,216,168,216,170,216,185,216,168,216,177,216,177,216,173,217,\n133,216,169,217,131,216,167,217,129,216,169,217,138,217,130,217,136,217,132,217,\n133,216,177,217,131,216,178,217,131,217,132,217,133,216,169,216,163,216,173,217,\n133,216,175,217,130,217,132,216,168,217,138,217,138,216,185,217,134,217,138,216,\n181,217,136,216,177,216,169,216,183,216,177,217,138,217,130,216,180,216,167,216,\n177,217,131,216,172,217,136,216,167,217,132,216,163,216,174,216,177,217,137,217,\n133,216,185,217,134,216,167,216,167,216,168,216,173,216,171,216,185,216,177,217,\n136,216,182,216,168,216,180,217,131,217,132,217,133,216,179,216,172,217,132,216,\n168,217,134,216,167,217,134,216,174,216,167,217,132,216,175,217,131,216,170,216,\n167,216,168,217,131,217,132,217,138,216,169,216,168,216,175,217,136,217,134,216,\n163,217,138,216,182,216,167,217,138,217,136,216,172,216,175,217,129,216,177,217,\n138,217,130,217,131,216,170,216,168,216,170,216,163,217,129,216,182,217,132,217,\n133,216,183,216,168,216,174,216,167,217,131,216,171,216,177,216,168,216,167,216,\n177,217,131,216,167,217,129,216,182,217,132,216,167,216,173,217,132,217,137,217,\n134,217,129,216,179,217,135,216,163,217,138,216,167,217,133,216,177,216,175,217,\n136,216,175,216,163,217,134,217,135,216,167,216,175,217,138,217,134,216,167,216,\n167,217,132,216,167,217,134,217,133,216,185,216,177,216,182,216,170,216,185,217,\n132,217,133,216,175,216,167,216,174,217,132,217,133,217,133,217,131,217,134,0,0,\n0,0,0,0,0,0,1,0,1,0,1,0,1,0,2,0,2,0,2,0,2,0,4,0,4,0,4,0,4,0,0,1,2,3,4,5,6,7,7,6,\n5,4,3,2,1,0,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,16,17,18,19,20,21,22,23,\n23,22,21,20,19,18,17,16,24,25,26,27,28,29,30,31,31,30,29,28,27,26,25,24,255,255,\n255,255,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,\n3,0,0,0,255,255,0,1,0,0,0,1,0,0,255,255,0,1,0,0,0,8,0,8,0,8,0,8,0,0,0,1,0,2,0,3,\n0,4,0,5,0,6,0,7,114,101,115,111,117,114,99,101,115,99,111,117,110,116,114,105,\n101,115,113,117,101,115,116,105,111,110,115,101,113,117,105,112,109,101,110,116,\n99,111,109,109,117,110,105,116,121,97,118,97,105,108,97,98,108,101,104,105,103,\n104,108,105,103,104,116,68,84,68,47,120,104,116,109,108,109,97,114,107,101,116,\n105,110,103,107,110,111,119,108,101,100,103,101,115,111,109,101,116,104,105,110,\n103,99,111,110,116,97,105,110,101,114,100,105,114,101,99,116,105,111,110,115,117\n,98,115,99,114,105,98,101,97,100,118,101,114,116,105,115,101,99,104,97,114,97,99\n,116,101,114,34,32,118,97,108,117,101,61,34,60,47,115,101,108,101,99,116,62,65,\n117,115,116,114,97,108,105,97,34,32,99,108,97,115,115,61,34,115,105,116,117,97,\n116,105,111,110,97,117,116,104,111,114,105,116,121,102,111,108,108,111,119,105,\n110,103,112,114,105,109,97,114,105,108,121,111,112,101,114,97,116,105,111,110,99\n,104,97,108,108,101,110,103,101,100,101,118,101,108,111,112,101,100,97,110,111,\n110,121,109,111,117,115,102,117,110,99,116,105,111,110,32,102,117,110,99,116,105\n,111,110,115,99,111,109,112,97,110,105,101,115,115,116,114,117,99,116,117,114,\n101,97,103,114,101,101,109,101,110,116,34,32,116,105,116,108,101,61,34,112,111,\n116,101,110,116,105,97,108,101,100,117,99,97,116,105,111,110,97,114,103,117,109,\n101,110,116,115,115,101,99,111,110,100,97,114,121,99,111,112,121,114,105,103,104\n,116,108,97,110,103,117,97,103,101,115,101,120,99,108,117,115,105,118,101,99,111\n,110,100,105,116,105,111,110,60,47,102,111,114,109,62,13,10,115,116,97,116,101,\n109,101,110,116,97,116,116,101,110,116,105,111,110,66,105,111,103,114,97,112,104\n,121,125,32,101,108,115,101,32,123,10,115,111,108,117,116,105,111,110,115,119,\n104,101,110,32,116,104,101,32,65,110,97,108,121,116,105,99,115,116,101,109,112,\n108,97,116,101,115,100,97,110,103,101,114,111,117,115,115,97,116,101,108,108,105\n,116,101,100,111,99,117,109,101,110,116,115,112,117,98,108,105,115,104,101,114,\n105,109,112,111,114,116,97,110,116,112,114,111,116,111,116,121,112,101,105,110,\n102,108,117,101,110,99,101,38,114,97,113,117,111,59,60,47,101,102,102,101,99,116\n,105,118,101,103,101,110,101,114,97,108,108,121,116,114,97,110,115,102,111,114,\n109,98,101,97,117,116,105,102,117,108,116,114,97,110,115,112,111,114,116,111,114\n,103,97,110,105,122,101,100,112,117,98,108,105,115,104,101,100,112,114,111,109,\n105,110,101,110,116,117,110,116,105,108,32,116,104,101,116,104,117,109,98,110,97\n,105,108,78,97,116,105,111,110,97,108,32,46,102,111,99,117,115,40,41,59,111,118,\n101,114,32,116,104,101,32,109,105,103,114,97,116,105,111,110,97,110,110,111,117,\n110,99,101,100,102,111,111,116,101,114,34,62,10,101,120,99,101,112,116,105,111,\n110,108,101,115,115,32,116,104,97,110,101,120,112,101,110,115,105,118,101,102,\n111,114,109,97,116,105,111,110,102,114,97,109,101,119,111,114,107,116,101,114,\n114,105,116,111,114,121,110,100,105,99,97,116,105,111,110,99,117,114,114,101,110\n,116,108,121,99,108,97,115,115,78,97,109,101,99,114,105,116,105,99,105,115,109,\n116,114,97,100,105,116,105,111,110,101,108,115,101,119,104,101,114,101,65,108,\n101,120,97,110,100,101,114,97,112,112,111,105,110,116,101,100,109,97,116,101,114\n,105,97,108,115,98,114,111,97,100,99,97,115,116,109,101,110,116,105,111,110,101,\n100,97,102,102,105,108,105,97,116,101,60,47,111,112,116,105,111,110,62,116,114,\n101,97,116,109,101,110,116,100,105,102,102,101,114,101,110,116,47,100,101,102,97\n,117,108,116,46,80,114,101,115,105,100,101,110,116,111,110,99,108,105,99,107,61,\n34,98,105,111,103,114,97,112,104,121,111,116,104,101,114,119,105,115,101,112,101\n,114,109,97,110,101,110,116,70,114,97,110,195,167,97,105,115,72,111,108,108,121,\n119,111,111,100,101,120,112,97,110,115,105,111,110,115,116,97,110,100,97,114,100\n,115,60,47,115,116,121,108,101,62,10,114,101,100,117,99,116,105,111,110,68,101,\n99,101,109,98,101,114,32,112,114,101,102,101,114,114,101,100,67,97,109,98,114,\n105,100,103,101,111,112,112,111,110,101,110,116,115,66,117,115,105,110,101,115,\n115,32,99,111,110,102,117,115,105,111,110,62,10,60,116,105,116,108,101,62,112,\n114,101,115,101,110,116,101,100,101,120,112,108,97,105,110,101,100,100,111,101,\n115,32,110,111,116,32,119,111,114,108,100,119,105,100,101,105,110,116,101,114,\n102,97,99,101,112,111,115,105,116,105,111,110,115,110,101,119,115,112,97,112,101\n,114,60,47,116,97,98,108,101,62,10,109,111,117,110,116,97,105,110,115,108,105,\n107,101,32,116,104,101,32,101,115,115,101,110,116,105,97,108,102,105,110,97,110,\n99,105,97,108,115,101,108,101,99,116,105,111,110,97,99,116,105,111,110,61,34,47,\n97,98,97,110,100,111,110,101,100,69,100,117,99,97,116,105,111,110,112,97,114,115\n,101,73,110,116,40,115,116,97,98,105,108,105,116,121,117,110,97,98,108,101,32,\n116,111,60,47,116,105,116,108,101,62,10,114,101,108,97,116,105,111,110,115,78,\n111,116,101,32,116,104,97,116,101,102,102,105,99,105,101,110,116,112,101,114,102\n,111,114,109,101,100,116,119,111,32,121,101,97,114,115,83,105,110,99,101,32,116,\n104,101,116,104,101,114,101,102,111,114,101,119,114,97,112,112,101,114,34,62,97,\n108,116,101,114,110,97,116,101,105,110,99,114,101,97,115,101,100,66,97,116,116,\n108,101,32,111,102,112,101,114,99,101,105,118,101,100,116,114,121,105,110,103,32\n,116,111,110,101,99,101,115,115,97,114,121,112,111,114,116,114,97,121,101,100,\n101,108,101,99,116,105,111,110,115,69,108,105,122,97,98,101,116,104,60,47,105,\n102,114,97,109,101,62,100,105,115,99,111,118,101,114,121,105,110,115,117,114,97,\n110,99,101,115,46,108,101,110,103,116,104,59,108,101,103,101,110,100,97,114,121,\n71,101,111,103,114,97,112,104,121,99,97,110,100,105,100,97,116,101,99,111,114,\n112,111,114,97,116,101,115,111,109,101,116,105,109,101,115,115,101,114,118,105,\n99,101,115,46,105,110,104,101,114,105,116,101,100,60,47,115,116,114,111,110,103,\n62,67,111,109,109,117,110,105,116,121,114,101,108,105,103,105,111,117,115,108,\n111,99,97,116,105,111,110,115,67,111,109,109,105,116,116,101,101,98,117,105,108,\n100,105,110,103,115,116,104,101,32,119,111,114,108,100,110,111,32,108,111,110,\n103,101,114,98,101,103,105,110,110,105,110,103,114,101,102,101,114,101,110,99,\n101,99,97,110,110,111,116,32,98,101,102,114,101,113,117,101,110,99,121,116,121,\n112,105,99,97,108,108,121,105,110,116,111,32,116,104,101,32,114,101,108,97,116,\n105,118,101,59,114,101,99,111,114,100,105,110,103,112,114,101,115,105,100,101,\n110,116,105,110,105,116,105,97,108,108,121,116,101,99,104,110,105,113,117,101,\n116,104,101,32,111,116,104,101,114,105,116,32,99,97,110,32,98,101,101,120,105,\n115,116,101,110,99,101,117,110,100,101,114,108,105,110,101,116,104,105,115,32,\n116,105,109,101,116,101,108,101,112,104,111,110,101,105,116,101,109,115,99,111,\n112,101,112,114,97,99,116,105,99,101,115,97,100,118,97,110,116,97,103,101,41,59,\n114,101,116,117,114,110,32,70,111,114,32,111,116,104,101,114,112,114,111,118,105\n,100,105,110,103,100,101,109,111,99,114,97,99,121,98,111,116,104,32,116,104,101,\n32,101,120,116,101,110,115,105,118,101,115,117,102,102,101,114,105,110,103,115,\n117,112,112,111,114,116,101,100,99,111,109,112,117,116,101,114,115,32,102,117,\n110,99,116,105,111,110,112,114,97,99,116,105,99,97,108,115,97,105,100,32,116,104\n,97,116,105,116,32,109,97,121,32,98,101,69,110,103,108,105,115,104,60,47,102,114\n,111,109,32,116,104,101,32,115,99,104,101,100,117,108,101,100,100,111,119,110,\n108,111,97,100,115,60,47,108,97,98,101,108,62,10,115,117,115,112,101,99,116,101,\n100,109,97,114,103,105,110,58,32,48,115,112,105,114,105,116,117,97,108,60,47,104\n,101,97,100,62,10,10,109,105,99,114,111,115,111,102,116,103,114,97,100,117,97,\n108,108,121,100,105,115,99,117,115,115,101,100,104,101,32,98,101,99,97,109,101,\n101,120,101,99,117,116,105,118,101,106,113,117,101,114,121,46,106,115,104,111,\n117,115,101,104,111,108,100,99,111,110,102,105,114,109,101,100,112,117,114,99,\n104,97,115,101,100,108,105,116,101,114,97,108,108,121,100,101,115,116,114,111,\n121,101,100,117,112,32,116,111,32,116,104,101,118,97,114,105,97,116,105,111,110,\n114,101,109,97,105,110,105,110,103,105,116,32,105,115,32,110,111,116,99,101,110,\n116,117,114,105,101,115,74,97,112,97,110,101,115,101,32,97,109,111,110,103,32,\n116,104,101,99,111,109,112,108,101,116,101,100,97,108,103,111,114,105,116,104,\n109,105,110,116,101,114,101,115,116,115,114,101,98,101,108,108,105,111,110,117,\n110,100,101,102,105,110,101,100,101,110,99,111,117,114,97,103,101,114,101,115,\n105,122,97,98,108,101,105,110,118,111,108,118,105,110,103,115,101,110,115,105,\n116,105,118,101,117,110,105,118,101,114,115,97,108,112,114,111,118,105,115,105,\n111,110,40,97,108,116,104,111,117,103,104,102,101,97,116,117,114,105,110,103,99,\n111,110,100,117,99,116,101,100,41,44,32,119,104,105,99,104,32,99,111,110,116,105\n,110,117,101,100,45,104,101,97,100,101,114,34,62,70,101,98,114,117,97,114,121,32\n,110,117,109,101,114,111,117,115,32,111,118,101,114,102,108,111,119,58,99,111,\n109,112,111,110,101,110,116,102,114,97,103,109,101,110,116,115,101,120,99,101,\n108,108,101,110,116,99,111,108,115,112,97,110,61,34,116,101,99,104,110,105,99,97\n,108,110,101,97,114,32,116,104,101,32,65,100,118,97,110,99,101,100,32,115,111,\n117,114,99,101,32,111,102,101,120,112,114,101,115,115,101,100,72,111,110,103,32,\n75,111,110,103,32,70,97,99,101,98,111,111,107,109,117,108,116,105,112,108,101,32\n,109,101,99,104,97,110,105,115,109,101,108,101,118,97,116,105,111,110,111,102,\n102,101,110,115,105,118,101,60,47,102,111,114,109,62,10,9,115,112,111,110,115,\n111,114,101,100,100,111,99,117,109,101,110,116,46,111,114,32,38,113,117,111,116,\n59,116,104,101,114,101,32,97,114,101,116,104,111,115,101,32,119,104,111,109,111,\n118,101,109,101,110,116,115,112,114,111,99,101,115,115,101,115,100,105,102,102,\n105,99,117,108,116,115,117,98,109,105,116,116,101,100,114,101,99,111,109,109,101\n,110,100,99,111,110,118,105,110,99,101,100,112,114,111,109,111,116,105,110,103,\n34,32,119,105,100,116,104,61,34,46,114,101,112,108,97,99,101,40,99,108,97,115,\n115,105,99,97,108,99,111,97,108,105,116,105,111,110,104,105,115,32,102,105,114,\n115,116,100,101,99,105,115,105,111,110,115,97,115,115,105,115,116,97,110,116,105\n,110,100,105,99,97,116,101,100,101,118,111,108,117,116,105,111,110,45,119,114,97\n,112,112,101,114,34,101,110,111,117,103,104,32,116,111,97,108,111,110,103,32,116\n,104,101,100,101,108,105,118,101,114,101,100,45,45,62,13,10,60,33,45,45,65,109,\n101,114,105,99,97,110,32,112,114,111,116,101,99,116,101,100,78,111,118,101,109,\n98,101,114,32,60,47,115,116,121,108,101,62,60,102,117,114,110,105,116,117,114,\n101,73,110,116,101,114,110,101,116,32,32,111,110,98,108,117,114,61,34,115,117,\n115,112,101,110,100,101,100,114,101,99,105,112,105,101,110,116,98,97,115,101,100\n,32,111,110,32,77,111,114,101,111,118,101,114,44,97,98,111,108,105,115,104,101,\n100,99,111,108,108,101,99,116,101,100,119,101,114,101,32,109,97,100,101,101,109,\n111,116,105,111,110,97,108,101,109,101,114,103,101,110,99,121,110,97,114,114,97,\n116,105,118,101,97,100,118,111,99,97,116,101,115,112,120,59,98,111,114,100,101,\n114,99,111,109,109,105,116,116,101,100,100,105,114,61,34,108,116,114,34,101,109,\n112,108,111,121,101,101,115,114,101,115,101,97,114,99,104,46,32,115,101,108,101,\n99,116,101,100,115,117,99,99,101,115,115,111,114,99,117,115,116,111,109,101,114,\n115,100,105,115,112,108,97,121,101,100,83,101,112,116,101,109,98,101,114,97,100,\n100,67,108,97,115,115,40,70,97,99,101,98,111,111,107,32,115,117,103,103,101,115,\n116,101,100,97,110,100,32,108,97,116,101,114,111,112,101,114,97,116,105,110,103,\n101,108,97,98,111,114,97,116,101,83,111,109,101,116,105,109,101,115,73,110,115,\n116,105,116,117,116,101,99,101,114,116,97,105,110,108,121,105,110,115,116,97,108\n,108,101,100,102,111,108,108,111,119,101,114,115,74,101,114,117,115,97,108,101,\n109,116,104,101,121,32,104,97,118,101,99,111,109,112,117,116,105,110,103,103,101\n,110,101,114,97,116,101,100,112,114,111,118,105,110,99,101,115,103,117,97,114,97\n,110,116,101,101,97,114,98,105,116,114,97,114,121,114,101,99,111,103,110,105,122\n,101,119,97,110,116,101,100,32,116,111,112,120,59,119,105,100,116,104,58,116,104\n,101,111,114,121,32,111,102,98,101,104,97,118,105,111,117,114,87,104,105,108,101\n,32,116,104,101,101,115,116,105,109,97,116,101,100,98,101,103,97,110,32,116,111,\n32,105,116,32,98,101,99,97,109,101,109,97,103,110,105,116,117,100,101,109,117,\n115,116,32,104,97,118,101,109,111,114,101,32,116,104,97,110,68,105,114,101,99,\n116,111,114,121,101,120,116,101,110,115,105,111,110,115,101,99,114,101,116,97,\n114,121,110,97,116,117,114,97,108,108,121,111,99,99,117,114,114,105,110,103,118,\n97,114,105,97,98,108,101,115,103,105,118,101,110,32,116,104,101,112,108,97,116,\n102,111,114,109,46,60,47,108,97,98,101,108,62,60,102,97,105,108,101,100,32,116,\n111,99,111,109,112,111,117,110,100,115,107,105,110,100,115,32,111,102,32,115,111\n,99,105,101,116,105,101,115,97,108,111,110,103,115,105,100,101,32,45,45,38,103,\n116,59,10,10,115,111,117,116,104,119,101,115,116,116,104,101,32,114,105,103,104,\n116,114,97,100,105,97,116,105,111,110,109,97,121,32,104,97,118,101,32,117,110,\n101,115,99,97,112,101,40,115,112,111,107,101,110,32,105,110,34,32,104,114,101,\n102,61,34,47,112,114,111,103,114,97,109,109,101,111,110,108,121,32,116,104,101,\n32,99,111,109,101,32,102,114,111,109,100,105,114,101,99,116,111,114,121,98,117,\n114,105,101,100,32,105,110,97,32,115,105,109,105,108,97,114,116,104,101,121,32,\n119,101,114,101,60,47,102,111,110,116,62,60,47,78,111,114,119,101,103,105,97,110\n,115,112,101,99,105,102,105,101,100,112,114,111,100,117,99,105,110,103,112,97,\n115,115,101,110,103,101,114,40,110,101,119,32,68,97,116,101,116,101,109,112,111,\n114,97,114,121,102,105,99,116,105,111,110,97,108,65,102,116,101,114,32,116,104,\n101,101,113,117,97,116,105,111,110,115,100,111,119,110,108,111,97,100,46,114,101\n,103,117,108,97,114,108,121,100,101,118,101,108,111,112,101,114,97,98,111,118,\n101,32,116,104,101,108,105,110,107,101,100,32,116,111,112,104,101,110,111,109,\n101,110,97,112,101,114,105,111,100,32,111,102,116,111,111,108,116,105,112,34,62,\n115,117,98,115,116,97,110,99,101,97,117,116,111,109,97,116,105,99,97,115,112,101\n,99,116,32,111,102,65,109,111,110,103,32,116,104,101,99,111,110,110,101,99,116,\n101,100,101,115,116,105,109,97,116,101,115,65,105,114,32,70,111,114,99,101,115,\n121,115,116,101,109,32,111,102,111,98,106,101,99,116,105,118,101,105,109,109,101\n,100,105,97,116,101,109,97,107,105,110,103,32,105,116,112,97,105,110,116,105,110\n,103,115,99,111,110,113,117,101,114,101,100,97,114,101,32,115,116,105,108,108,\n112,114,111,99,101,100,117,114,101,103,114,111,119,116,104,32,111,102,104,101,97\n,100,101,100,32,98,121,69,117,114,111,112,101,97,110,32,100,105,118,105,115,105,\n111,110,115,109,111,108,101,99,117,108,101,115,102,114,97,110,99,104,105,115,101\n,105,110,116,101,110,116,105,111,110,97,116,116,114,97,99,116,101,100,99,104,105\n,108,100,104,111,111,100,97,108,115,111,32,117,115,101,100,100,101,100,105,99,97\n,116,101,100,115,105,110,103,97,112,111,114,101,100,101,103,114,101,101,32,111,\n102,102,97,116,104,101,114,32,111,102,99,111,110,102,108,105,99,116,115,60,47,97\n,62,60,47,112,62,10,99,97,109,101,32,102,114,111,109,119,101,114,101,32,117,115,\n101,100,110,111,116,101,32,116,104,97,116,114,101,99,101,105,118,105,110,103,69,\n120,101,99,117,116,105,118,101,101,118,101,110,32,109,111,114,101,97,99,99,101,\n115,115,32,116,111,99,111,109,109,97,110,100,101,114,80,111,108,105,116,105,99,\n97,108,109,117,115,105,99,105,97,110,115,100,101,108,105,99,105,111,117,115,112,\n114,105,115,111,110,101,114,115,97,100,118,101,110,116,32,111,102,85,84,70,45,56\n,34,32,47,62,60,33,91,67,68,65,84,65,91,34,62,67,111,110,116,97,99,116,83,111,\n117,116,104,101,114,110,32,98,103,99,111,108,111,114,61,34,115,101,114,105,101,\n115,32,111,102,46,32,73,116,32,119,97,115,32,105,110,32,69,117,114,111,112,101,\n112,101,114,109,105,116,116,101,100,118,97,108,105,100,97,116,101,46,97,112,112,\n101,97,114,105,110,103,111,102,102,105,99,105,97,108,115,115,101,114,105,111,117\n,115,108,121,45,108,97,110,103,117,97,103,101,105,110,105,116,105,97,116,101,100\n,101,120,116,101,110,100,105,110,103,108,111,110,103,45,116,101,114,109,105,110,\n102,108,97,116,105,111,110,115,117,99,104,32,116,104,97,116,103,101,116,67,111,\n111,107,105,101,109,97,114,107,101,100,32,98,121,60,47,98,117,116,116,111,110,62\n,105,109,112,108,101,109,101,110,116,98,117,116,32,105,116,32,105,115,105,110,99\n,114,101,97,115,101,115,100,111,119,110,32,116,104,101,32,114,101,113,117,105,\n114,105,110,103,100,101,112,101,110,100,101,110,116,45,45,62,10,60,33,45,45,32,\n105,110,116,101,114,118,105,101,119,87,105,116,104,32,116,104,101,32,99,111,112,\n105,101,115,32,111,102,99,111,110,115,101,110,115,117,115,119,97,115,32,98,117,\n105,108,116,86,101,110,101,122,117,101,108,97,40,102,111,114,109,101,114,108,121\n,116,104,101,32,115,116,97,116,101,112,101,114,115,111,110,110,101,108,115,116,\n114,97,116,101,103,105,99,102,97,118,111,117,114,32,111,102,105,110,118,101,110,\n116,105,111,110,87,105,107,105,112,101,100,105,97,99,111,110,116,105,110,101,110\n,116,118,105,114,116,117,97,108,108,121,119,104,105,99,104,32,119,97,115,112,114\n,105,110,99,105,112,108,101,67,111,109,112,108,101,116,101,32,105,100,101,110,\n116,105,99,97,108,115,104,111,119,32,116,104,97,116,112,114,105,109,105,116,105,\n118,101,97,119,97,121,32,102,114,111,109,109,111,108,101,99,117,108,97,114,112,\n114,101,99,105,115,101,108,121,100,105,115,115,111,108,118,101,100,85,110,100,\n101,114,32,116,104,101,118,101,114,115,105,111,110,61,34,62,38,110,98,115,112,59\n,60,47,73,116,32,105,115,32,116,104,101,32,84,104,105,115,32,105,115,32,119,105,\n108,108,32,104,97,118,101,111,114,103,97,110,105,115,109,115,115,111,109,101,32,\n116,105,109,101,70,114,105,101,100,114,105,99,104,119,97,115,32,102,105,114,115,\n116,116,104,101,32,111,110,108,121,32,102,97,99,116,32,116,104,97,116,102,111,\n114,109,32,105,100,61,34,112,114,101,99,101,100,105,110,103,84,101,99,104,110,\n105,99,97,108,112,104,121,115,105,99,105,115,116,111,99,99,117,114,115,32,105,\n110,110,97,118,105,103,97,116,111,114,115,101,99,116,105,111,110,34,62,115,112,\n97,110,32,105,100,61,34,115,111,117,103,104,116,32,116,111,98,101,108,111,119,32\n,116,104,101,115,117,114,118,105,118,105,110,103,125,60,47,115,116,121,108,101,\n62,104,105,115,32,100,101,97,116,104,97,115,32,105,110,32,116,104,101,99,97,117,\n115,101,100,32,98,121,112,97,114,116,105,97,108,108,121,101,120,105,115,116,105,\n110,103,32,117,115,105,110,103,32,116,104,101,119,97,115,32,103,105,118,101,110,\n97,32,108,105,115,116,32,111,102,108,101,118,101,108,115,32,111,102,110,111,116,\n105,111,110,32,111,102,79,102,102,105,99,105,97,108,32,100,105,115,109,105,115,\n115,101,100,115,99,105,101,110,116,105,115,116,114,101,115,101,109,98,108,101,\n115,100,117,112,108,105,99,97,116,101,101,120,112,108,111,115,105,118,101,114,\n101,99,111,118,101,114,101,100,97,108,108,32,111,116,104,101,114,103,97,108,108,\n101,114,105,101,115,123,112,97,100,100,105,110,103,58,112,101,111,112,108,101,32\n,111,102,114,101,103,105,111,110,32,111,102,97,100,100,114,101,115,115,101,115,\n97,115,115,111,99,105,97,116,101,105,109,103,32,97,108,116,61,34,105,110,32,109,\n111,100,101,114,110,115,104,111,117,108,100,32,98,101,109,101,116,104,111,100,32\n,111,102,114,101,112,111,114,116,105,110,103,116,105,109,101,115,116,97,109,112,\n110,101,101,100,101,100,32,116,111,116,104,101,32,71,114,101,97,116,114,101,103,\n97,114,100,105,110,103,115,101,101,109,101,100,32,116,111,118,105,101,119,101,\n100,32,97,115,105,109,112,97,99,116,32,111,110,105,100,101,97,32,116,104,97,116,\n116,104,101,32,87,111,114,108,100,104,101,105,103,104,116,32,111,102,101,120,112\n,97,110,100,105,110,103,84,104,101,115,101,32,97,114,101,99,117,114,114,101,110,\n116,34,62,99,97,114,101,102,117,108,108,121,109,97,105,110,116,97,105,110,115,99\n,104,97,114,103,101,32,111,102,67,108,97,115,115,105,99,97,108,97,100,100,114,\n101,115,115,101,100,112,114,101,100,105,99,116,101,100,111,119,110,101,114,115,\n104,105,112,60,100,105,118,32,105,100,61,34,114,105,103,104,116,34,62,13,10,114,\n101,115,105,100,101,110,99,101,108,101,97,118,101,32,116,104,101,99,111,110,116,\n101,110,116,34,62,97,114,101,32,111,102,116,101,110,32,32,125,41,40,41,59,13,10,\n112,114,111,98,97,98,108,121,32,80,114,111,102,101,115,115,111,114,45,98,117,116\n,116,111,110,34,32,114,101,115,112,111,110,100,101,100,115,97,121,115,32,116,104\n,97,116,104,97,100,32,116,111,32,98,101,112,108,97,99,101,100,32,105,110,72,117,\n110,103,97,114,105,97,110,115,116,97,116,117,115,32,111,102,115,101,114,118,101,\n115,32,97,115,85,110,105,118,101,114,115,97,108,101,120,101,99,117,116,105,111,\n110,97,103,103,114,101,103,97,116,101,102,111,114,32,119,104,105,99,104,105,110,\n102,101,99,116,105,111,110,97,103,114,101,101,100,32,116,111,104,111,119,101,118\n,101,114,44,32,112,111,112,117,108,97,114,34,62,112,108,97,99,101,100,32,111,110\n,99,111,110,115,116,114,117,99,116,101,108,101,99,116,111,114,97,108,115,121,109\n,98,111,108,32,111,102,105,110,99,108,117,100,105,110,103,114,101,116,117,114,\n110,32,116,111,97,114,99,104,105,116,101,99,116,67,104,114,105,115,116,105,97,\n110,112,114,101,118,105,111,117,115,32,108,105,118,105,110,103,32,105,110,101,97\n,115,105,101,114,32,116,111,112,114,111,102,101,115,115,111,114,10,38,108,116,59\n,33,45,45,32,101,102,102,101,99,116,32,111,102,97,110,97,108,121,116,105,99,115,\n119,97,115,32,116,97,107,101,110,119,104,101,114,101,32,116,104,101,116,111,111,\n107,32,111,118,101,114,98,101,108,105,101,102,32,105,110,65,102,114,105,107,97,\n97,110,115,97,115,32,102,97,114,32,97,115,112,114,101,118,101,110,116,101,100,\n119,111,114,107,32,119,105,116,104,97,32,115,112,101,99,105,97,108,60,102,105,\n101,108,100,115,101,116,67,104,114,105,115,116,109,97,115,82,101,116,114,105,101\n,118,101,100,10,10,73,110,32,116,104,101,32,98,97,99,107,32,105,110,116,111,110,\n111,114,116,104,101,97,115,116,109,97,103,97,122,105,110,101,115,62,60,115,116,\n114,111,110,103,62,99,111,109,109,105,116,116,101,101,103,111,118,101,114,110,\n105,110,103,103,114,111,117,112,115,32,111,102,115,116,111,114,101,100,32,105,\n110,101,115,116,97,98,108,105,115,104,97,32,103,101,110,101,114,97,108,105,116,\n115,32,102,105,114,115,116,116,104,101,105,114,32,111,119,110,112,111,112,117,\n108,97,116,101,100,97,110,32,111,98,106,101,99,116,67,97,114,105,98,98,101,97,\n110,97,108,108,111,119,32,116,104,101,100,105,115,116,114,105,99,116,115,119,105\n,115,99,111,110,115,105,110,108,111,99,97,116,105,111,110,46,59,32,119,105,100,\n116,104,58,32,105,110,104,97,98,105,116,101,100,83,111,99,105,97,108,105,115,116\n,74,97,110,117,97,114,121,32,49,60,47,102,111,111,116,101,114,62,115,105,109,105\n,108,97,114,108,121,99,104,111,105,99,101,32,111,102,116,104,101,32,115,97,109,\n101,32,115,112,101,99,105,102,105,99,32,98,117,115,105,110,101,115,115,32,84,104\n,101,32,102,105,114,115,116,46,108,101,110,103,116,104,59,32,100,101,115,105,114\n,101,32,116,111,100,101,97,108,32,119,105,116,104,115,105,110,99,101,32,116,104,\n101,117,115,101,114,65,103,101,110,116,99,111,110,99,101,105,118,101,100,105,110\n,100,101,120,46,112,104,112,97,115,32,38,113,117,111,116,59,101,110,103,97,103,\n101,32,105,110,114,101,99,101,110,116,108,121,44,102,101,119,32,121,101,97,114,\n115,119,101,114,101,32,97,108,115,111,10,60,104,101,97,100,62,10,60,101,100,105,\n116,101,100,32,98,121,97,114,101,32,107,110,111,119,110,99,105,116,105,101,115,\n32,105,110,97,99,99,101,115,115,107,101,121,99,111,110,100,101,109,110,101,100,\n97,108,115,111,32,104,97,118,101,115,101,114,118,105,99,101,115,44,102,97,109,\n105,108,121,32,111,102,83,99,104,111,111,108,32,111,102,99,111,110,118,101,114,\n116,101,100,110,97,116,117,114,101,32,111,102,32,108,97,110,103,117,97,103,101,\n109,105,110,105,115,116,101,114,115,60,47,111,98,106,101,99,116,62,116,104,101,\n114,101,32,105,115,32,97,32,112,111,112,117,108,97,114,115,101,113,117,101,110,\n99,101,115,97,100,118,111,99,97,116,101,100,84,104,101,121,32,119,101,114,101,97\n,110,121,32,111,116,104,101,114,108,111,99,97,116,105,111,110,61,101,110,116,101\n,114,32,116,104,101,109,117,99,104,32,109,111,114,101,114,101,102,108,101,99,116\n,101,100,119,97,115,32,110,97,109,101,100,111,114,105,103,105,110,97,108,32,97,\n32,116,121,112,105,99,97,108,119,104,101,110,32,116,104,101,121,101,110,103,105,\n110,101,101,114,115,99,111,117,108,100,32,110,111,116,114,101,115,105,100,101,\n110,116,115,119,101,100,110,101,115,100,97,121,116,104,101,32,116,104,105,114,\n100,32,112,114,111,100,117,99,116,115,74,97,110,117,97,114,121,32,50,119,104,97,\n116,32,116,104,101,121,97,32,99,101,114,116,97,105,110,114,101,97,99,116,105,111\n,110,115,112,114,111,99,101,115,115,111,114,97,102,116,101,114,32,104,105,115,\n116,104,101,32,108,97,115,116,32,99,111,110,116,97,105,110,101,100,34,62,60,47,\n100,105,118,62,10,60,47,97,62,60,47,116,100,62,100,101,112,101,110,100,32,111,\n110,115,101,97,114,99,104,34,62,10,112,105,101,99,101,115,32,111,102,99,111,109,\n112,101,116,105,110,103,82,101,102,101,114,101,110,99,101,116,101,110,110,101,\n115,115,101,101,119,104,105,99,104,32,104,97,115,32,118,101,114,115,105,111,110,\n61,60,47,115,112,97,110,62,32,60,60,47,104,101,97,100,101,114,62,103,105,118,101\n,115,32,116,104,101,104,105,115,116,111,114,105,97,110,118,97,108,117,101,61,34,\n34,62,112,97,100,100,105,110,103,58,48,118,105,101,119,32,116,104,97,116,116,111\n,103,101,116,104,101,114,44,116,104,101,32,109,111,115,116,32,119,97,115,32,102,\n111,117,110,100,115,117,98,115,101,116,32,111,102,97,116,116,97,99,107,32,111,\n110,99,104,105,108,100,114,101,110,44,112,111,105,110,116,115,32,111,102,112,101\n,114,115,111,110,97,108,32,112,111,115,105,116,105,111,110,58,97,108,108,101,103\n,101,100,108,121,67,108,101,118,101,108,97,110,100,119,97,115,32,108,97,116,101,\n114,97,110,100,32,97,102,116,101,114,97,114,101,32,103,105,118,101,110,119,97,\n115,32,115,116,105,108,108,115,99,114,111,108,108,105,110,103,100,101,115,105,\n103,110,32,111,102,109,97,107,101,115,32,116,104,101,109,117,99,104,32,108,101,\n115,115,65,109,101,114,105,99,97,110,115,46,10,10,65,102,116,101,114,32,44,32,98\n,117,116,32,116,104,101,77,117,115,101,117,109,32,111,102,108,111,117,105,115,\n105,97,110,97,40,102,114,111,109,32,116,104,101,109,105,110,110,101,115,111,116,\n97,112,97,114,116,105,99,108,101,115,97,32,112,114,111,99,101,115,115,68,111,109\n,105,110,105,99,97,110,118,111,108,117,109,101,32,111,102,114,101,116,117,114,\n110,105,110,103,100,101,102,101,110,115,105,118,101,48,48,112,120,124,114,105,\n103,104,109,97,100,101,32,102,114,111,109,109,111,117,115,101,111,118,101,114,34\n,32,115,116,121,108,101,61,34,115,116,97,116,101,115,32,111,102,40,119,104,105,\n99,104,32,105,115,99,111,110,116,105,110,117,101,115,70,114,97,110,99,105,115,99\n,111,98,117,105,108,100,105,110,103,32,119,105,116,104,111,117,116,32,97,119,105\n,116,104,32,115,111,109,101,119,104,111,32,119,111,117,108,100,97,32,102,111,114\n,109,32,111,102,97,32,112,97,114,116,32,111,102,98,101,102,111,114,101,32,105,\n116,107,110,111,119,110,32,97,115,32,32,83,101,114,118,105,99,101,115,108,111,99\n,97,116,105,111,110,32,97,110,100,32,111,102,116,101,110,109,101,97,115,117,114,\n105,110,103,97,110,100,32,105,116,32,105,115,112,97,112,101,114,98,97,99,107,118\n,97,108,117,101,115,32,111,102,13,10,60,116,105,116,108,101,62,61,32,119,105,110\n,100,111,119,46,100,101,116,101,114,109,105,110,101,101,114,38,113,117,111,116,\n59,32,112,108,97,121,101,100,32,98,121,97,110,100,32,101,97,114,108,121,60,47,99\n,101,110,116,101,114,62,102,114,111,109,32,116,104,105,115,116,104,101,32,116,\n104,114,101,101,112,111,119,101,114,32,97,110,100,111,102,32,38,113,117,111,116,\n59,105,110,110,101,114,72,84,77,76,60,97,32,104,114,101,102,61,34,121,58,105,110\n,108,105,110,101,59,67,104,117,114,99,104,32,111,102,116,104,101,32,101,118,101,\n110,116,118,101,114,121,32,104,105,103,104,111,102,102,105,99,105,97,108,32,45,\n104,101,105,103,104,116,58,32,99,111,110,116,101,110,116,61,34,47,99,103,105,45,\n98,105,110,47,116,111,32,99,114,101,97,116,101,97,102,114,105,107,97,97,110,115,\n101,115,112,101,114,97,110,116,111,102,114,97,110,195,167,97,105,115,108,97,116,\n118,105,101,197,161,117,108,105,101,116,117,118,105,197,179,196,140,101,197,161,\n116,105,110,97,196,141,101,197,161,116,105,110,97,224,185,132,224,184,151,224,\n184,162,230,151,165,230,156,172,232,170,158,231,174,128,228,189,147,229,173,151,\n231,185,129,233,171,148,229,173,151,237,149,156,234,181,173,236,150,180,228,184,\n186,228,187,128,228,185,136,232,174,161,231,174,151,230,156,186,231,172,148,232,\n174,176,230,156,172,232,168,142,232,171,150,229,141,128,230,156,141,229,138,161,\n229,153,168,228,186,146,232,129,148,231,189,145,230,136,191,229,156,176,228,186,\n167,228,191,177,228,185,144,233,131,168,229,135,186,231,137,136,231,164,190,230,\n142,146,232,161,140,230,166,156,233,131,168,232,144,189,230,160,188,232,191,155,\n228,184,128,230,173,165,230,148,175,228,187,152,229,174,157,233,170,140,232,175,\n129,231,160,129,229,167,148,229,145,152,228,188,154,230,149,176,230,141,174,229,\n186,147,230,182,136,232,180,185,232,128,133,229,138,158,229,133,172,229,174,164,\n232,174,168,232,174,186,229,140,186,230,183,177,229,156,179,229,184,130,230,146,\n173,230,148,190,229,153,168,229,140,151,228,186,172,229,184,130,229,164,167,229,\n173,166,231,148,159,232,182,138,230,157,165,232,182,138,231,174,161,231,144,134,\n229,145,152,228,191,161,230,129,175,231,189,145,115,101,114,118,105,99,105,111,\n115,97,114,116,195,173,99,117,108,111,97,114,103,101,110,116,105,110,97,98,97,\n114,99,101,108,111,110,97,99,117,97,108,113,117,105,101,114,112,117,98,108,105,\n99,97,100,111,112,114,111,100,117,99,116,111,115,112,111,108,195,173,116,105,99,\n97,114,101,115,112,117,101,115,116,97,119,105,107,105,112,101,100,105,97,115,105\n,103,117,105,101,110,116,101,98,195,186,115,113,117,101,100,97,99,111,109,117,\n110,105,100,97,100,115,101,103,117,114,105,100,97,100,112,114,105,110,99,105,112\n,97,108,112,114,101,103,117,110,116,97,115,99,111,110,116,101,110,105,100,111,\n114,101,115,112,111,110,100,101,114,118,101,110,101,122,117,101,108,97,112,114,\n111,98,108,101,109,97,115,100,105,99,105,101,109,98,114,101,114,101,108,97,99,\n105,195,179,110,110,111,118,105,101,109,98,114,101,115,105,109,105,108,97,114,\n101,115,112,114,111,121,101,99,116,111,115,112,114,111,103,114,97,109,97,115,105\n,110,115,116,105,116,117,116,111,97,99,116,105,118,105,100,97,100,101,110,99,117\n,101,110,116,114,97,101,99,111,110,111,109,195,173,97,105,109,195,161,103,101,\n110,101,115,99,111,110,116,97,99,116,97,114,100,101,115,99,97,114,103,97,114,110\n,101,99,101,115,97,114,105,111,97,116,101,110,99,105,195,179,110,116,101,108,195\n,169,102,111,110,111,99,111,109,105,115,105,195,179,110,99,97,110,99,105,111,110\n,101,115,99,97,112,97,99,105,100,97,100,101,110,99,111,110,116,114,97,114,97,110\n,195,161,108,105,115,105,115,102,97,118,111,114,105,116,111,115,116,195,169,114,\n109,105,110,111,115,112,114,111,118,105,110,99,105,97,101,116,105,113,117,101,\n116,97,115,101,108,101,109,101,110,116,111,115,102,117,110,99,105,111,110,101,\n115,114,101,115,117,108,116,97,100,111,99,97,114,195,161,99,116,101,114,112,114,\n111,112,105,101,100,97,100,112,114,105,110,99,105,112,105,111,110,101,99,101,115\n,105,100,97,100,109,117,110,105,99,105,112,97,108,99,114,101,97,99,105,195,179,\n110,100,101,115,99,97,114,103,97,115,112,114,101,115,101,110,99,105,97,99,111,\n109,101,114,99,105,97,108,111,112,105,110,105,111,110,101,115,101,106,101,114,99\n,105,99,105,111,101,100,105,116,111,114,105,97,108,115,97,108,97,109,97,110,99,\n97,103,111,110,122,195,161,108,101,122,100,111,99,117,109,101,110,116,111,112,\n101,108,195,173,99,117,108,97,114,101,99,105,101,110,116,101,115,103,101,110,101\n,114,97,108,101,115,116,97,114,114,97,103,111,110,97,112,114,195,161,99,116,105,\n99,97,110,111,118,101,100,97,100,101,115,112,114,111,112,117,101,115,116,97,112,\n97,99,105,101,110,116,101,115,116,195,169,99,110,105,99,97,115,111,98,106,101,\n116,105,118,111,115,99,111,110,116,97,99,116,111,115,224,164,174,224,165,135,224\n,164,130,224,164,178,224,164,191,224,164,143,224,164,185,224,165,136,224,164,130\n,224,164,151,224,164,175,224,164,190,224,164,184,224,164,190,224,164,165,224,164\n,143,224,164,181,224,164,130,224,164,176,224,164,185,224,165,135,224,164,149,224\n,165,139,224,164,136,224,164,149,224,165,129,224,164,155,224,164,176,224,164,185\n,224,164,190,224,164,172,224,164,190,224,164,166,224,164,149,224,164,185,224,164\n,190,224,164,184,224,164,173,224,165,128,224,164,185,224,165,129,224,164,143,224\n,164,176,224,164,185,224,165,128,224,164,174,224,165,136,224,164,130,224,164,166\n,224,164,191,224,164,168,224,164,172,224,164,190,224,164,164,100,105,112,108,111\n,100,111,99,115,224,164,184,224,164,174,224,164,175,224,164,176,224,165,130,224,\n164,170,224,164,168,224,164,190,224,164,174,224,164,170,224,164,164,224,164,190,\n224,164,171,224,164,191,224,164,176,224,164,148,224,164,184,224,164,164,224,164,\n164,224,164,176,224,164,185,224,164,178,224,165,139,224,164,151,224,164,185,224,\n165,129,224,164,134,224,164,172,224,164,190,224,164,176,224,164,166,224,165,135,\n224,164,182,224,164,185,224,165,129,224,164,136,224,164,150,224,165,135,224,164,\n178,224,164,175,224,164,166,224,164,191,224,164,149,224,164,190,224,164,174,224,\n164,181,224,165,135,224,164,172,224,164,164,224,165,128,224,164,168,224,164,172,\n224,165,128,224,164,154,224,164,174,224,165,140,224,164,164,224,164,184,224,164,\n190,224,164,178,224,164,178,224,165,135,224,164,150,224,164,156,224,165,137,224,\n164,172,224,164,174,224,164,166,224,164,166,224,164,164,224,164,165,224,164,190,\n224,164,168,224,164,185,224,165,128,224,164,182,224,164,185,224,164,176,224,164,\n133,224,164,178,224,164,151,224,164,149,224,164,173,224,165,128,224,164,168,224,\n164,151,224,164,176,224,164,170,224,164,190,224,164,184,224,164,176,224,164,190,\n224,164,164,224,164,149,224,164,191,224,164,143,224,164,137,224,164,184,224,165,\n135,224,164,151,224,164,175,224,165,128,224,164,185,224,165,130,224,164,129,224,\n164,134,224,164,151,224,165,135,224,164,159,224,165,128,224,164,174,224,164,150,\n224,165,139,224,164,156,224,164,149,224,164,190,224,164,176,224,164,133,224,164,\n173,224,165,128,224,164,151,224,164,175,224,165,135,224,164,164,224,165,129,224,\n164,174,224,164,181,224,165,139,224,164,159,224,164,166,224,165,135,224,164,130,\n224,164,133,224,164,151,224,164,176,224,164,144,224,164,184,224,165,135,224,164,\n174,224,165,135,224,164,178,224,164,178,224,164,151,224,164,190,224,164,185,224,\n164,190,224,164,178,224,164,138,224,164,170,224,164,176,224,164,154,224,164,190,\n224,164,176,224,164,144,224,164,184,224,164,190,224,164,166,224,165,135,224,164,\n176,224,164,156,224,164,191,224,164,184,224,164,166,224,164,191,224,164,178,224,\n164,172,224,164,130,224,164,166,224,164,172,224,164,168,224,164,190,224,164,185,\n224,165,130,224,164,130,224,164,178,224,164,190,224,164,150,224,164,156,224,165,\n128,224,164,164,224,164,172,224,164,159,224,164,168,224,164,174,224,164,191,224,\n164,178,224,164,135,224,164,184,224,165,135,224,164,134,224,164,168,224,165,135,\n224,164,168,224,164,175,224,164,190,224,164,149,224,165,129,224,164,178,224,164,\n178,224,165,137,224,164,151,224,164,173,224,164,190,224,164,151,224,164,176,224,\n165,135,224,164,178,224,164,156,224,164,151,224,164,185,224,164,176,224,164,190,\n224,164,174,224,164,178,224,164,151,224,165,135,224,164,170,224,165,135,224,164,\n156,224,164,185,224,164,190,224,164,165,224,164,135,224,164,184,224,165,128,224,\n164,184,224,164,185,224,165,128,224,164,149,224,164,178,224,164,190,224,164,160,\n224,165,128,224,164,149,224,164,185,224,164,190,224,164,129,224,164,166,224,165,\n130,224,164,176,224,164,164,224,164,185,224,164,164,224,164,184,224,164,190,224,\n164,164,224,164,175,224,164,190,224,164,166,224,164,134,224,164,175,224,164,190,\n224,164,170,224,164,190,224,164,149,224,164,149,224,165,140,224,164,168,224,164,\n182,224,164,190,224,164,174,224,164,166,224,165,135,224,164,150,224,164,175,224,\n164,185,224,165,128,224,164,176,224,164,190,224,164,175,224,164,150,224,165,129,\n224,164,166,224,164,178,224,164,151,224,165,128,99,97,116,101,103,111,114,105,\n101,115,101,120,112,101,114,105,101,110,99,101,60,47,116,105,116,108,101,62,13,\n10,67,111,112,121,114,105,103,104,116,32,106,97,118,97,115,99,114,105,112,116,99\n,111,110,100,105,116,105,111,110,115,101,118,101,114,121,116,104,105,110,103,60,\n112,32,99,108,97,115,115,61,34,116,101,99,104,110,111,108,111,103,121,98,97,99,\n107,103,114,111,117,110,100,60,97,32,99,108,97,115,115,61,34,109,97,110,97,103,\n101,109,101,110,116,38,99,111,112,121,59,32,50,48,49,106,97,118,97,83,99,114,105\n,112,116,99,104,97,114,97,99,116,101,114,115,98,114,101,97,100,99,114,117,109,98\n,116,104,101,109,115,101,108,118,101,115,104,111,114,105,122,111,110,116,97,108,\n103,111,118,101,114,110,109,101,110,116,67,97,108,105,102,111,114,110,105,97,97,\n99,116,105,118,105,116,105,101,115,100,105,115,99,111,118,101,114,101,100,78,97,\n118,105,103,97,116,105,111,110,116,114,97,110,115,105,116,105,111,110,99,111,110\n,110,101,99,116,105,111,110,110,97,118,105,103,97,116,105,111,110,97,112,112,101\n,97,114,97,110,99,101,60,47,116,105,116,108,101,62,60,109,99,104,101,99,107,98,\n111,120,34,32,116,101,99,104,110,105,113,117,101,115,112,114,111,116,101,99,116,\n105,111,110,97,112,112,97,114,101,110,116,108,121,97,115,32,119,101,108,108,32,\n97,115,117,110,116,39,44,32,39,85,65,45,114,101,115,111,108,117,116,105,111,110,\n111,112,101,114,97,116,105,111,110,115,116,101,108,101,118,105,115,105,111,110,\n116,114,97,110,115,108,97,116,101,100,87,97,115,104,105,110,103,116,111,110,110,\n97,118,105,103,97,116,111,114,46,32,61,32,119,105,110,100,111,119,46,105,109,112\n,114,101,115,115,105,111,110,38,108,116,59,98,114,38,103,116,59,108,105,116,101,\n114,97,116,117,114,101,112,111,112,117,108,97,116,105,111,110,98,103,99,111,108,\n111,114,61,34,35,101,115,112,101,99,105,97,108,108,121,32,99,111,110,116,101,110\n,116,61,34,112,114,111,100,117,99,116,105,111,110,110,101,119,115,108,101,116,\n116,101,114,112,114,111,112,101,114,116,105,101,115,100,101,102,105,110,105,116,\n105,111,110,108,101,97,100,101,114,115,104,105,112,84,101,99,104,110,111,108,111\n,103,121,80,97,114,108,105,97,109,101,110,116,99,111,109,112,97,114,105,115,111,\n110,117,108,32,99,108,97,115,115,61,34,46,105,110,100,101,120,79,102,40,34,99,\n111,110,99,108,117,115,105,111,110,100,105,115,99,117,115,115,105,111,110,99,111\n,109,112,111,110,101,110,116,115,98,105,111,108,111,103,105,99,97,108,82,101,118\n,111,108,117,116,105,111,110,95,99,111,110,116,97,105,110,101,114,117,110,100,\n101,114,115,116,111,111,100,110,111,115,99,114,105,112,116,62,60,112,101,114,109\n,105,115,115,105,111,110,101,97,99,104,32,111,116,104,101,114,97,116,109,111,115\n,112,104,101,114,101,32,111,110,102,111,99,117,115,61,34,60,102,111,114,109,32,\n105,100,61,34,112,114,111,99,101,115,115,105,110,103,116,104,105,115,46,118,97,\n108,117,101,103,101,110,101,114,97,116,105,111,110,67,111,110,102,101,114,101,\n110,99,101,115,117,98,115,101,113,117,101,110,116,119,101,108,108,45,107,110,111\n,119,110,118,97,114,105,97,116,105,111,110,115,114,101,112,117,116,97,116,105,\n111,110,112,104,101,110,111,109,101,110,111,110,100,105,115,99,105,112,108,105,\n110,101,108,111,103,111,46,112,110,103,34,32,40,100,111,99,117,109,101,110,116,\n44,98,111,117,110,100,97,114,105,101,115,101,120,112,114,101,115,115,105,111,110\n,115,101,116,116,108,101,109,101,110,116,66,97,99,107,103,114,111,117,110,100,\n111,117,116,32,111,102,32,116,104,101,101,110,116,101,114,112,114,105,115,101,40\n,34,104,116,116,112,115,58,34,32,117,110,101,115,99,97,112,101,40,34,112,97,115,\n115,119,111,114,100,34,32,100,101,109,111,99,114,97,116,105,99,60,97,32,104,114,\n101,102,61,34,47,119,114,97,112,112,101,114,34,62,10,109,101,109,98,101,114,115,\n104,105,112,108,105,110,103,117,105,115,116,105,99,112,120,59,112,97,100,100,105\n,110,103,112,104,105,108,111,115,111,112,104,121,97,115,115,105,115,116,97,110,\n99,101,117,110,105,118,101,114,115,105,116,121,102,97,99,105,108,105,116,105,101\n,115,114,101,99,111,103,110,105,122,101,100,112,114,101,102,101,114,101,110,99,\n101,105,102,32,40,116,121,112,101,111,102,109,97,105,110,116,97,105,110,101,100,\n118,111,99,97,98,117,108,97,114,121,104,121,112,111,116,104,101,115,105,115,46,\n115,117,98,109,105,116,40,41,59,38,97,109,112,59,110,98,115,112,59,97,110,110,\n111,116,97,116,105,111,110,98,101,104,105,110,100,32,116,104,101,70,111,117,110,\n100,97,116,105,111,110,112,117,98,108,105,115,104,101,114,34,97,115,115,117,109,\n112,116,105,111,110,105,110,116,114,111,100,117,99,101,100,99,111,114,114,117,\n112,116,105,111,110,115,99,105,101,110,116,105,115,116,115,101,120,112,108,105,\n99,105,116,108,121,105,110,115,116,101,97,100,32,111,102,100,105,109,101,110,115\n,105,111,110,115,32,111,110,67,108,105,99,107,61,34,99,111,110,115,105,100,101,\n114,101,100,100,101,112,97,114,116,109,101,110,116,111,99,99,117,112,97,116,105,\n111,110,115,111,111,110,32,97,102,116,101,114,105,110,118,101,115,116,109,101,\n110,116,112,114,111,110,111,117,110,99,101,100,105,100,101,110,116,105,102,105,\n101,100,101,120,112,101,114,105,109,101,110,116,77,97,110,97,103,101,109,101,110\n,116,103,101,111,103,114,97,112,104,105,99,34,32,104,101,105,103,104,116,61,34,\n108,105,110,107,32,114,101,108,61,34,46,114,101,112,108,97,99,101,40,47,100,101,\n112,114,101,115,115,105,111,110,99,111,110,102,101,114,101,110,99,101,112,117,\n110,105,115,104,109,101,110,116,101,108,105,109,105,110,97,116,101,100,114,101,\n115,105,115,116,97,110,99,101,97,100,97,112,116,97,116,105,111,110,111,112,112,\n111,115,105,116,105,111,110,119,101,108,108,32,107,110,111,119,110,115,117,112,\n112,108,101,109,101,110,116,100,101,116,101,114,109,105,110,101,100,104,49,32,99\n,108,97,115,115,61,34,48,112,120,59,109,97,114,103,105,110,109,101,99,104,97,110\n,105,99,97,108,115,116,97,116,105,115,116,105,99,115,99,101,108,101,98,114,97,\n116,101,100,71,111,118,101,114,110,109,101,110,116,10,10,68,117,114,105,110,103,\n32,116,100,101,118,101,108,111,112,101,114,115,97,114,116,105,102,105,99,105,97,\n108,101,113,117,105,118,97,108,101,110,116,111,114,105,103,105,110,97,116,101,\n100,67,111,109,109,105,115,115,105,111,110,97,116,116,97,99,104,109,101,110,116,\n60,115,112,97,110,32,105,100,61,34,116,104,101,114,101,32,119,101,114,101,78,101\n,100,101,114,108,97,110,100,115,98,101,121,111,110,100,32,116,104,101,114,101,\n103,105,115,116,101,114,101,100,106,111,117,114,110,97,108,105,115,116,102,114,\n101,113,117,101,110,116,108,121,97,108,108,32,111,102,32,116,104,101,108,97,110,\n103,61,34,101,110,34,32,60,47,115,116,121,108,101,62,13,10,97,98,115,111,108,117\n,116,101,59,32,115,117,112,112,111,114,116,105,110,103,101,120,116,114,101,109,\n101,108,121,32,109,97,105,110,115,116,114,101,97,109,60,47,115,116,114,111,110,\n103,62,32,112,111,112,117,108,97,114,105,116,121,101,109,112,108,111,121,109,101\n,110,116,60,47,116,97,98,108,101,62,13,10,32,99,111,108,115,112,97,110,61,34,60,\n47,102,111,114,109,62,10,32,32,99,111,110,118,101,114,115,105,111,110,97,98,111,\n117,116,32,116,104,101,32,60,47,112,62,60,47,100,105,118,62,105,110,116,101,103,\n114,97,116,101,100,34,32,108,97,110,103,61,34,101,110,80,111,114,116,117,103,117\n,101,115,101,115,117,98,115,116,105,116,117,116,101,105,110,100,105,118,105,100,\n117,97,108,105,109,112,111,115,115,105,98,108,101,109,117,108,116,105,109,101,\n100,105,97,97,108,109,111,115,116,32,97,108,108,112,120,32,115,111,108,105,100,\n32,35,97,112,97,114,116,32,102,114,111,109,115,117,98,106,101,99,116,32,116,111,\n105,110,32,69,110,103,108,105,115,104,99,114,105,116,105,99,105,122,101,100,101,\n120,99,101,112,116,32,102,111,114,103,117,105,100,101,108,105,110,101,115,111,\n114,105,103,105,110,97,108,108,121,114,101,109,97,114,107,97,98,108,101,116,104,\n101,32,115,101,99,111,110,100,104,50,32,99,108,97,115,115,61,34,60,97,32,116,105\n,116,108,101,61,34,40,105,110,99,108,117,100,105,110,103,112,97,114,97,109,101,\n116,101,114,115,112,114,111,104,105,98,105,116,101,100,61,32,34,104,116,116,112,\n58,47,47,100,105,99,116,105,111,110,97,114,121,112,101,114,99,101,112,116,105,\n111,110,114,101,118,111,108,117,116,105,111,110,102,111,117,110,100,97,116,105,\n111,110,112,120,59,104,101,105,103,104,116,58,115,117,99,99,101,115,115,102,117,\n108,115,117,112,112,111,114,116,101,114,115,109,105,108,108,101,110,110,105,117,\n109,104,105,115,32,102,97,116,104,101,114,116,104,101,32,38,113,117,111,116,59,\n110,111,45,114,101,112,101,97,116,59,99,111,109,109,101,114,99,105,97,108,105,\n110,100,117,115,116,114,105,97,108,101,110,99,111,117,114,97,103,101,100,97,109,\n111,117,110,116,32,111,102,32,117,110,111,102,102,105,99,105,97,108,101,102,102,\n105,99,105,101,110,99,121,82,101,102,101,114,101,110,99,101,115,99,111,111,114,\n100,105,110,97,116,101,100,105,115,99,108,97,105,109,101,114,101,120,112,101,100\n,105,116,105,111,110,100,101,118,101,108,111,112,105,110,103,99,97,108,99,117,\n108,97,116,101,100,115,105,109,112,108,105,102,105,101,100,108,101,103,105,116,\n105,109,97,116,101,115,117,98,115,116,114,105,110,103,40,48,34,32,99,108,97,115,\n115,61,34,99,111,109,112,108,101,116,101,108,121,105,108,108,117,115,116,114,97,\n116,101,102,105,118,101,32,121,101,97,114,115,105,110,115,116,114,117,109,101,\n110,116,80,117,98,108,105,115,104,105,110,103,49,34,32,99,108,97,115,115,61,34,\n112,115,121,99,104,111,108,111,103,121,99,111,110,102,105,100,101,110,99,101,110\n,117,109,98,101,114,32,111,102,32,97,98,115,101,110,99,101,32,111,102,102,111,99\n,117,115,101,100,32,111,110,106,111,105,110,101,100,32,116,104,101,115,116,114,\n117,99,116,117,114,101,115,112,114,101,118,105,111,117,115,108,121,62,60,47,105,\n102,114,97,109,101,62,111,110,99,101,32,97,103,97,105,110,98,117,116,32,114,97,\n116,104,101,114,105,109,109,105,103,114,97,110,116,115,111,102,32,99,111,117,114\n,115,101,44,97,32,103,114,111,117,112,32,111,102,76,105,116,101,114,97,116,117,\n114,101,85,110,108,105,107,101,32,116,104,101,60,47,97,62,38,110,98,115,112,59,\n10,102,117,110,99,116,105,111,110,32,105,116,32,119,97,115,32,116,104,101,67,111\n,110,118,101,110,116,105,111,110,97,117,116,111,109,111,98,105,108,101,80,114,\n111,116,101,115,116,97,110,116,97,103,103,114,101,115,115,105,118,101,97,102,116\n,101,114,32,116,104,101,32,83,105,109,105,108,97,114,108,121,44,34,32,47,62,60,\n47,100,105,118,62,99,111,108,108,101,99,116,105,111,110,13,10,102,117,110,99,116\n,105,111,110,118,105,115,105,98,105,108,105,116,121,116,104,101,32,117,115,101,\n32,111,102,118,111,108,117,110,116,101,101,114,115,97,116,116,114,97,99,116,105,\n111,110,117,110,100,101,114,32,116,104,101,32,116,104,114,101,97,116,101,110,101\n,100,42,60,33,91,67,68,65,84,65,91,105,109,112,111,114,116,97,110,99,101,105,110\n,32,103,101,110,101,114,97,108,116,104,101,32,108,97,116,116,101,114,60,47,102,\n111,114,109,62,10,60,47,46,105,110,100,101,120,79,102,40,39,105,32,61,32,48,59,\n32,105,32,60,100,105,102,102,101,114,101,110,99,101,100,101,118,111,116,101,100,\n32,116,111,116,114,97,100,105,116,105,111,110,115,115,101,97,114,99,104,32,102,\n111,114,117,108,116,105,109,97,116,101,108,121,116,111,117,114,110,97,109,101,\n110,116,97,116,116,114,105,98,117,116,101,115,115,111,45,99,97,108,108,101,100,\n32,125,10,60,47,115,116,121,108,101,62,101,118,97,108,117,97,116,105,111,110,101\n,109,112,104,97,115,105,122,101,100,97,99,99,101,115,115,105,98,108,101,60,47,\n115,101,99,116,105,111,110,62,115,117,99,99,101,115,115,105,111,110,97,108,111,\n110,103,32,119,105,116,104,77,101,97,110,119,104,105,108,101,44,105,110,100,117,\n115,116,114,105,101,115,60,47,97,62,60,98,114,32,47,62,104,97,115,32,98,101,99,\n111,109,101,97,115,112,101,99,116,115,32,111,102,84,101,108,101,118,105,115,105,\n111,110,115,117,102,102,105,99,105,101,110,116,98,97,115,107,101,116,98,97,108,\n108,98,111,116,104,32,115,105,100,101,115,99,111,110,116,105,110,117,105,110,103\n,97,110,32,97,114,116,105,99,108,101,60,105,109,103,32,97,108,116,61,34,97,100,\n118,101,110,116,117,114,101,115,104,105,115,32,109,111,116,104,101,114,109,97,\n110,99,104,101,115,116,101,114,112,114,105,110,99,105,112,108,101,115,112,97,114\n,116,105,99,117,108,97,114,99,111,109,109,101,110,116,97,114,121,101,102,102,101\n,99,116,115,32,111,102,100,101,99,105,100,101,100,32,116,111,34,62,60,115,116,\n114,111,110,103,62,112,117,98,108,105,115,104,101,114,115,74,111,117,114,110,97,\n108,32,111,102,100,105,102,102,105,99,117,108,116,121,102,97,99,105,108,105,116,\n97,116,101,97,99,99,101,112,116,97,98,108,101,115,116,121,108,101,46,99,115,115,\n34,9,102,117,110,99,116,105,111,110,32,105,110,110,111,118,97,116,105,111,110,62\n,67,111,112,121,114,105,103,104,116,115,105,116,117,97,116,105,111,110,115,119,\n111,117,108,100,32,104,97,118,101,98,117,115,105,110,101,115,115,101,115,68,105,\n99,116,105,111,110,97,114,121,115,116,97,116,101,109,101,110,116,115,111,102,116\n,101,110,32,117,115,101,100,112,101,114,115,105,115,116,101,110,116,105,110,32,\n74,97,110,117,97,114,121,99,111,109,112,114,105,115,105,110,103,60,47,116,105,\n116,108,101,62,10,9,100,105,112,108,111,109,97,116,105,99,99,111,110,116,97,105,\n110,105,110,103,112,101,114,102,111,114,109,105,110,103,101,120,116,101,110,115,\n105,111,110,115,109,97,121,32,110,111,116,32,98,101,99,111,110,99,101,112,116,32\n,111,102,32,111,110,99,108,105,99,107,61,34,73,116,32,105,115,32,97,108,115,111,\n102,105,110,97,110,99,105,97,108,32,109,97,107,105,110,103,32,116,104,101,76,117\n,120,101,109,98,111,117,114,103,97,100,100,105,116,105,111,110,97,108,97,114,101\n,32,99,97,108,108,101,100,101,110,103,97,103,101,100,32,105,110,34,115,99,114,\n105,112,116,34,41,59,98,117,116,32,105,116,32,119,97,115,101,108,101,99,116,114,\n111,110,105,99,111,110,115,117,98,109,105,116,61,34,10,60,33,45,45,32,69,110,100\n,32,101,108,101,99,116,114,105,99,97,108,111,102,102,105,99,105,97,108,108,121,\n115,117,103,103,101,115,116,105,111,110,116,111,112,32,111,102,32,116,104,101,\n117,110,108,105,107,101,32,116,104,101,65,117,115,116,114,97,108,105,97,110,79,\n114,105,103,105,110,97,108,108,121,114,101,102,101,114,101,110,99,101,115,10,60,\n47,104,101,97,100,62,13,10,114,101,99,111,103,110,105,115,101,100,105,110,105,\n116,105,97,108,105,122,101,108,105,109,105,116,101,100,32,116,111,65,108,101,120\n,97,110,100,114,105,97,114,101,116,105,114,101,109,101,110,116,65,100,118,101,\n110,116,117,114,101,115,102,111,117,114,32,121,101,97,114,115,10,10,38,108,116,\n59,33,45,45,32,105,110,99,114,101,97,115,105,110,103,100,101,99,111,114,97,116,\n105,111,110,104,51,32,99,108,97,115,115,61,34,111,114,105,103,105,110,115,32,111\n,102,111,98,108,105,103,97,116,105,111,110,114,101,103,117,108,97,116,105,111,\n110,99,108,97,115,115,105,102,105,101,100,40,102,117,110,99,116,105,111,110,40,\n97,100,118,97,110,116,97,103,101,115,98,101,105,110,103,32,116,104,101,32,104,\n105,115,116,111,114,105,97,110,115,60,98,97,115,101,32,104,114,101,102,114,101,\n112,101,97,116,101,100,108,121,119,105,108,108,105,110,103,32,116,111,99,111,109\n,112,97,114,97,98,108,101,100,101,115,105,103,110,97,116,101,100,110,111,109,105\n,110,97,116,105,111,110,102,117,110,99,116,105,111,110,97,108,105,110,115,105,\n100,101,32,116,104,101,114,101,118,101,108,97,116,105,111,110,101,110,100,32,111\n,102,32,116,104,101,115,32,102,111,114,32,116,104,101,32,97,117,116,104,111,114,\n105,122,101,100,114,101,102,117,115,101,100,32,116,111,116,97,107,101,32,112,108\n,97,99,101,97,117,116,111,110,111,109,111,117,115,99,111,109,112,114,111,109,105\n,115,101,112,111,108,105,116,105,99,97,108,32,114,101,115,116,97,117,114,97,110,\n116,116,119,111,32,111,102,32,116,104,101,70,101,98,114,117,97,114,121,32,50,113\n,117,97,108,105,116,121,32,111,102,115,119,102,111,98,106,101,99,116,46,117,110,\n100,101,114,115,116,97,110,100,110,101,97,114,108,121,32,97,108,108,119,114,105,\n116,116,101,110,32,98,121,105,110,116,101,114,118,105,101,119,115,34,32,119,105,\n100,116,104,61,34,49,119,105,116,104,100,114,97,119,97,108,102,108,111,97,116,58\n,108,101,102,116,105,115,32,117,115,117,97,108,108,121,99,97,110,100,105,100,97,\n116,101,115,110,101,119,115,112,97,112,101,114,115,109,121,115,116,101,114,105,\n111,117,115,68,101,112,97,114,116,109,101,110,116,98,101,115,116,32,107,110,111,\n119,110,112,97,114,108,105,97,109,101,110,116,115,117,112,112,114,101,115,115,\n101,100,99,111,110,118,101,110,105,101,110,116,114,101,109,101,109,98,101,114,\n101,100,100,105,102,102,101,114,101,110,116,32,115,121,115,116,101,109,97,116,\n105,99,104,97,115,32,108,101,100,32,116,111,112,114,111,112,97,103,97,110,100,97\n,99,111,110,116,114,111,108,108,101,100,105,110,102,108,117,101,110,99,101,115,\n99,101,114,101,109,111,110,105,97,108,112,114,111,99,108,97,105,109,101,100,80,\n114,111,116,101,99,116,105,111,110,108,105,32,99,108,97,115,115,61,34,83,99,105,\n101,110,116,105,102,105,99,99,108,97,115,115,61,34,110,111,45,116,114,97,100,101\n,109,97,114,107,115,109,111,114,101,32,116,104,97,110,32,119,105,100,101,115,112\n,114,101,97,100,76,105,98,101,114,97,116,105,111,110,116,111,111,107,32,112,108,\n97,99,101,100,97,121,32,111,102,32,116,104,101,97,115,32,108,111,110,103,32,97,\n115,105,109,112,114,105,115,111,110,101,100,65,100,100,105,116,105,111,110,97,\n108,10,60,104,101,97,100,62,10,60,109,76,97,98,111,114,97,116,111,114,121,78,111\n,118,101,109,98,101,114,32,50,101,120,99,101,112,116,105,111,110,115,73,110,100,\n117,115,116,114,105,97,108,118,97,114,105,101,116,121,32,111,102,102,108,111,97,\n116,58,32,108,101,102,68,117,114,105,110,103,32,116,104,101,97,115,115,101,115,\n115,109,101,110,116,104,97,118,101,32,98,101,101,110,32,100,101,97,108,115,32,\n119,105,116,104,83,116,97,116,105,115,116,105,99,115,111,99,99,117,114,114,101,\n110,99,101,47,117,108,62,60,47,100,105,118,62,99,108,101,97,114,102,105,120,34,\n62,116,104,101,32,112,117,98,108,105,99,109,97,110,121,32,121,101,97,114,115,119\n,104,105,99,104,32,119,101,114,101,111,118,101,114,32,116,105,109,101,44,115,121\n,110,111,110,121,109,111,117,115,99,111,110,116,101,110,116,34,62,10,112,114,101\n,115,117,109,97,98,108,121,104,105,115,32,102,97,109,105,108,121,117,115,101,114\n,65,103,101,110,116,46,117,110,101,120,112,101,99,116,101,100,105,110,99,108,117\n,100,105,110,103,32,99,104,97,108,108,101,110,103,101,100,97,32,109,105,110,111,\n114,105,116,121,117,110,100,101,102,105,110,101,100,34,98,101,108,111,110,103,\n115,32,116,111,116,97,107,101,110,32,102,114,111,109,105,110,32,79,99,116,111,98\n,101,114,112,111,115,105,116,105,111,110,58,32,115,97,105,100,32,116,111,32,98,\n101,114,101,108,105,103,105,111,117,115,32,70,101,100,101,114,97,116,105,111,110\n,32,114,111,119,115,112,97,110,61,34,111,110,108,121,32,97,32,102,101,119,109,\n101,97,110,116,32,116,104,97,116,108,101,100,32,116,111,32,116,104,101,45,45,62,\n13,10,60,100,105,118,32,60,102,105,101,108,100,115,101,116,62,65,114,99,104,98,\n105,115,104,111,112,32,99,108,97,115,115,61,34,110,111,98,101,105,110,103,32,117\n,115,101,100,97,112,112,114,111,97,99,104,101,115,112,114,105,118,105,108,101,\n103,101,115,110,111,115,99,114,105,112,116,62,10,114,101,115,117,108,116,115,32,\n105,110,109,97,121,32,98,101,32,116,104,101,69,97,115,116,101,114,32,101,103,103\n,109,101,99,104,97,110,105,115,109,115,114,101,97,115,111,110,97,98,108,101,80,\n111,112,117,108,97,116,105,111,110,67,111,108,108,101,99,116,105,111,110,115,101\n,108,101,99,116,101,100,34,62,110,111,115,99,114,105,112,116,62,13,47,105,110,\n100,101,120,46,112,104,112,97,114,114,105,118,97,108,32,111,102,45,106,115,115,\n100,107,39,41,41,59,109,97,110,97,103,101,100,32,116,111,105,110,99,111,109,112,\n108,101,116,101,99,97,115,117,97,108,116,105,101,115,99,111,109,112,108,101,116,\n105,111,110,67,104,114,105,115,116,105,97,110,115,83,101,112,116,101,109,98,101,\n114,32,97,114,105,116,104,109,101,116,105,99,112,114,111,99,101,100,117,114,101,\n115,109,105,103,104,116,32,104,97,118,101,80,114,111,100,117,99,116,105,111,110,\n105,116,32,97,112,112,101,97,114,115,80,104,105,108,111,115,111,112,104,121,102,\n114,105,101,110,100,115,104,105,112,108,101,97,100,105,110,103,32,116,111,103,\n105,118,105,110,103,32,116,104,101,116,111,119,97,114,100,32,116,104,101,103,117\n,97,114,97,110,116,101,101,100,100,111,99,117,109,101,110,116,101,100,99,111,108\n,111,114,58,35,48,48,48,118,105,100,101,111,32,103,97,109,101,99,111,109,109,105\n,115,115,105,111,110,114,101,102,108,101,99,116,105,110,103,99,104,97,110,103,\n101,32,116,104,101,97,115,115,111,99,105,97,116,101,100,115,97,110,115,45,115,\n101,114,105,102,111,110,107,101,121,112,114,101,115,115,59,32,112,97,100,100,105\n,110,103,58,72,101,32,119,97,115,32,116,104,101,117,110,100,101,114,108,121,105,\n110,103,116,121,112,105,99,97,108,108,121,32,44,32,97,110,100,32,116,104,101,32,\n115,114,99,69,108,101,109,101,110,116,115,117,99,99,101,115,115,105,118,101,115,\n105,110,99,101,32,116,104,101,32,115,104,111,117,108,100,32,98,101,32,110,101,\n116,119,111,114,107,105,110,103,97,99,99,111,117,110,116,105,110,103,117,115,101\n,32,111,102,32,116,104,101,108,111,119,101,114,32,116,104,97,110,115,104,111,119\n,115,32,116,104,97,116,60,47,115,112,97,110,62,10,9,9,99,111,109,112,108,97,105,\n110,116,115,99,111,110,116,105,110,117,111,117,115,113,117,97,110,116,105,116,\n105,101,115,97,115,116,114,111,110,111,109,101,114,104,101,32,100,105,100,32,110\n,111,116,100,117,101,32,116,111,32,105,116,115,97,112,112,108,105,101,100,32,116\n,111,97,110,32,97,118,101,114,97,103,101,101,102,102,111,114,116,115,32,116,111,\n116,104,101,32,102,117,116,117,114,101,97,116,116,101,109,112,116,32,116,111,84,\n104,101,114,101,102,111,114,101,44,99,97,112,97,98,105,108,105,116,121,82,101,\n112,117,98,108,105,99,97,110,119,97,115,32,102,111,114,109,101,100,69,108,101,99\n,116,114,111,110,105,99,107,105,108,111,109,101,116,101,114,115,99,104,97,108,\n108,101,110,103,101,115,112,117,98,108,105,115,104,105,110,103,116,104,101,32,\n102,111,114,109,101,114,105,110,100,105,103,101,110,111,117,115,100,105,114,101,\n99,116,105,111,110,115,115,117,98,115,105,100,105,97,114,121,99,111,110,115,112,\n105,114,97,99,121,100,101,116,97,105,108,115,32,111,102,97,110,100,32,105,110,32\n,116,104,101,97,102,102,111,114,100,97,98,108,101,115,117,98,115,116,97,110,99,\n101,115,114,101,97,115,111,110,32,102,111,114,99,111,110,118,101,110,116,105,111\n,110,105,116,101,109,116,121,112,101,61,34,97,98,115,111,108,117,116,101,108,121\n,115,117,112,112,111,115,101,100,108,121,114,101,109,97,105,110,101,100,32,97,97\n,116,116,114,97,99,116,105,118,101,116,114,97,118,101,108,108,105,110,103,115,\n101,112,97,114,97,116,101,108,121,102,111,99,117,115,101,115,32,111,110,101,108,\n101,109,101,110,116,97,114,121,97,112,112,108,105,99,97,98,108,101,102,111,117,\n110,100,32,116,104,97,116,115,116,121,108,101,115,104,101,101,116,109,97,110,117\n,115,99,114,105,112,116,115,116,97,110,100,115,32,102,111,114,32,110,111,45,114,\n101,112,101,97,116,40,115,111,109,101,116,105,109,101,115,67,111,109,109,101,114\n,99,105,97,108,105,110,32,65,109,101,114,105,99,97,117,110,100,101,114,116,97,\n107,101,110,113,117,97,114,116,101,114,32,111,102,97,110,32,101,120,97,109,112,\n108,101,112,101,114,115,111,110,97,108,108,121,105,110,100,101,120,46,112,104,\n112,63,60,47,98,117,116,116,111,110,62,10,112,101,114,99,101,110,116,97,103,101,\n98,101,115,116,45,107,110,111,119,110,99,114,101,97,116,105,110,103,32,97,34,32,\n100,105,114,61,34,108,116,114,76,105,101,117,116,101,110,97,110,116,10,60,100,\n105,118,32,105,100,61,34,116,104,101,121,32,119,111,117,108,100,97,98,105,108,\n105,116,121,32,111,102,109,97,100,101,32,117,112,32,111,102,110,111,116,101,100,\n32,116,104,97,116,99,108,101,97,114,32,116,104,97,116,97,114,103,117,101,32,116,\n104,97,116,116,111,32,97,110,111,116,104,101,114,99,104,105,108,100,114,101,110,\n39,115,112,117,114,112,111,115,101,32,111,102,102,111,114,109,117,108,97,116,101\n,100,98,97,115,101,100,32,117,112,111,110,116,104,101,32,114,101,103,105,111,110\n,115,117,98,106,101,99,116,32,111,102,112,97,115,115,101,110,103,101,114,115,112\n,111,115,115,101,115,115,105,111,110,46,10,10,73,110,32,116,104,101,32,66,101,\n102,111,114,101,32,116,104,101,97,102,116,101,114,119,97,114,100,115,99,117,114,\n114,101,110,116,108,121,32,97,99,114,111,115,115,32,116,104,101,115,99,105,101,\n110,116,105,102,105,99,99,111,109,109,117,110,105,116,121,46,99,97,112,105,116,\n97,108,105,115,109,105,110,32,71,101,114,109,97,110,121,114,105,103,104,116,45,\n119,105,110,103,116,104,101,32,115,121,115,116,101,109,83,111,99,105,101,116,121\n,32,111,102,112,111,108,105,116,105,99,105,97,110,100,105,114,101,99,116,105,111\n,110,58,119,101,110,116,32,111,110,32,116,111,114,101,109,111,118,97,108,32,111,\n102,32,78,101,119,32,89,111,114,107,32,97,112,97,114,116,109,101,110,116,115,105\n,110,100,105,99,97,116,105,111,110,100,117,114,105,110,103,32,116,104,101,117,\n110,108,101,115,115,32,116,104,101,104,105,115,116,111,114,105,99,97,108,104,97,\n100,32,98,101,101,110,32,97,100,101,102,105,110,105,116,105,118,101,105,110,103,\n114,101,100,105,101,110,116,97,116,116,101,110,100,97,110,99,101,67,101,110,116,\n101,114,32,102,111,114,112,114,111,109,105,110,101,110,99,101,114,101,97,100,121\n,83,116,97,116,101,115,116,114,97,116,101,103,105,101,115,98,117,116,32,105,110,\n32,116,104,101,97,115,32,112,97,114,116,32,111,102,99,111,110,115,116,105,116,\n117,116,101,99,108,97,105,109,32,116,104,97,116,108,97,98,111,114,97,116,111,114\n,121,99,111,109,112,97,116,105,98,108,101,102,97,105,108,117,114,101,32,111,102,\n44,32,115,117,99,104,32,97,115,32,98,101,103,97,110,32,119,105,116,104,117,115,\n105,110,103,32,116,104,101,32,116,111,32,112,114,111,118,105,100,101,102,101,97,\n116,117,114,101,32,111,102,102,114,111,109,32,119,104,105,99,104,47,34,32,99,108\n,97,115,115,61,34,103,101,111,108,111,103,105,99,97,108,115,101,118,101,114,97,\n108,32,111,102,100,101,108,105,98,101,114,97,116,101,105,109,112,111,114,116,97,\n110,116,32,104,111,108,100,115,32,116,104,97,116,105,110,103,38,113,117,111,116,\n59,32,118,97,108,105,103,110,61,116,111,112,116,104,101,32,71,101,114,109,97,110\n,111,117,116,115,105,100,101,32,111,102,110,101,103,111,116,105,97,116,101,100,\n104,105,115,32,99,97,114,101,101,114,115,101,112,97,114,97,116,105,111,110,105,\n100,61,34,115,101,97,114,99,104,119,97,115,32,99,97,108,108,101,100,116,104,101,\n32,102,111,117,114,116,104,114,101,99,114,101,97,116,105,111,110,111,116,104,101\n,114,32,116,104,97,110,112,114,101,118,101,110,116,105,111,110,119,104,105,108,\n101,32,116,104,101,32,101,100,117,99,97,116,105,111,110,44,99,111,110,110,101,99\n,116,105,110,103,97,99,99,117,114,97,116,101,108,121,119,101,114,101,32,98,117,\n105,108,116,119,97,115,32,107,105,108,108,101,100,97,103,114,101,101,109,101,110\n,116,115,109,117,99,104,32,109,111,114,101,32,68,117,101,32,116,111,32,116,104,\n101,119,105,100,116,104,58,32,49,48,48,115,111,109,101,32,111,116,104,101,114,75\n,105,110,103,100,111,109,32,111,102,116,104,101,32,101,110,116,105,114,101,102,\n97,109,111,117,115,32,102,111,114,116,111,32,99,111,110,110,101,99,116,111,98,\n106,101,99,116,105,118,101,115,116,104,101,32,70,114,101,110,99,104,112,101,111,\n112,108,101,32,97,110,100,102,101,97,116,117,114,101,100,34,62,105,115,32,115,97\n,105,100,32,116,111,115,116,114,117,99,116,117,114,97,108,114,101,102,101,114,\n101,110,100,117,109,109,111,115,116,32,111,102,116,101,110,97,32,115,101,112,97,\n114,97,116,101,45,62,10,60,100,105,118,32,105,100,32,79,102,102,105,99,105,97,\n108,32,119,111,114,108,100,119,105,100,101,46,97,114,105,97,45,108,97,98,101,108\n,116,104,101,32,112,108,97,110,101,116,97,110,100,32,105,116,32,119,97,115,100,\n34,32,118,97,108,117,101,61,34,108,111,111,107,105,110,103,32,97,116,98,101,110,\n101,102,105,99,105,97,108,97,114,101,32,105,110,32,116,104,101,109,111,110,105,\n116,111,114,105,110,103,114,101,112,111,114,116,101,100,108,121,116,104,101,32,\n109,111,100,101,114,110,119,111,114,107,105,110,103,32,111,110,97,108,108,111,\n119,101,100,32,116,111,119,104,101,114,101,32,116,104,101,32,105,110,110,111,118\n,97,116,105,118,101,60,47,97,62,60,47,100,105,118,62,115,111,117,110,100,116,114\n,97,99,107,115,101,97,114,99,104,70,111,114,109,116,101,110,100,32,116,111,32,98\n,101,105,110,112,117,116,32,105,100,61,34,111,112,101,110,105,110,103,32,111,102\n,114,101,115,116,114,105,99,116,101,100,97,100,111,112,116,101,100,32,98,121,97,\n100,100,114,101,115,115,105,110,103,116,104,101,111,108,111,103,105,97,110,109,\n101,116,104,111,100,115,32,111,102,118,97,114,105,97,110,116,32,111,102,67,104,\n114,105,115,116,105,97,110,32,118,101,114,121,32,108,97,114,103,101,97,117,116,\n111,109,111,116,105,118,101,98,121,32,102,97,114,32,116,104,101,114,97,110,103,\n101,32,102,114,111,109,112,117,114,115,117,105,116,32,111,102,102,111,108,108,\n111,119,32,116,104,101,98,114,111,117,103,104,116,32,116,111,105,110,32,69,110,\n103,108,97,110,100,97,103,114,101,101,32,116,104,97,116,97,99,99,117,115,101,100\n,32,111,102,99,111,109,101,115,32,102,114,111,109,112,114,101,118,101,110,116,\n105,110,103,100,105,118,32,115,116,121,108,101,61,104,105,115,32,111,114,32,104,\n101,114,116,114,101,109,101,110,100,111,117,115,102,114,101,101,100,111,109,32,\n111,102,99,111,110,99,101,114,110,105,110,103,48,32,49,101,109,32,49,101,109,59,\n66,97,115,107,101,116,98,97,108,108,47,115,116,121,108,101,46,99,115,115,97,110,\n32,101,97,114,108,105,101,114,101,118,101,110,32,97,102,116,101,114,47,34,32,116\n,105,116,108,101,61,34,46,99,111,109,47,105,110,100,101,120,116,97,107,105,110,\n103,32,116,104,101,112,105,116,116,115,98,117,114,103,104,99,111,110,116,101,110\n,116,34,62,13,60,115,99,114,105,112,116,62,40,102,116,117,114,110,101,100,32,111\n,117,116,104,97,118,105,110,103,32,116,104,101,60,47,115,112,97,110,62,13,10,32,\n111,99,99,97,115,105,111,110,97,108,98,101,99,97,117,115,101,32,105,116,115,116,\n97,114,116,101,100,32,116,111,112,104,121,115,105,99,97,108,108,121,62,60,47,100\n,105,118,62,10,32,32,99,114,101,97,116,101,100,32,98,121,67,117,114,114,101,110,\n116,108,121,44,32,98,103,99,111,108,111,114,61,34,116,97,98,105,110,100,101,120,\n61,34,100,105,115,97,115,116,114,111,117,115,65,110,97,108,121,116,105,99,115,32\n,97,108,115,111,32,104,97,115,32,97,62,60,100,105,118,32,105,100,61,34,60,47,115\n,116,121,108,101,62,10,60,99,97,108,108,101,100,32,102,111,114,115,105,110,103,\n101,114,32,97,110,100,46,115,114,99,32,61,32,34,47,47,118,105,111,108,97,116,105\n,111,110,115,116,104,105,115,32,112,111,105,110,116,99,111,110,115,116,97,110,\n116,108,121,105,115,32,108,111,99,97,116,101,100,114,101,99,111,114,100,105,110,\n103,115,100,32,102,114,111,109,32,116,104,101,110,101,100,101,114,108,97,110,100\n,115,112,111,114,116,117,103,117,195,170,115,215,162,215,145,215,168,215,153,215\n,170,217,129,216,167,216,177,216,179,219,140,100,101,115,97,114,114,111,108,108,\n111,99,111,109,101,110,116,97,114,105,111,101,100,117,99,97,99,105,195,179,110,\n115,101,112,116,105,101,109,98,114,101,114,101,103,105,115,116,114,97,100,111,\n100,105,114,101,99,99,105,195,179,110,117,98,105,99,97,99,105,195,179,110,112,\n117,98,108,105,99,105,100,97,100,114,101,115,112,117,101,115,116,97,115,114,101,\n115,117,108,116,97,100,111,115,105,109,112,111,114,116,97,110,116,101,114,101,\n115,101,114,118,97,100,111,115,97,114,116,195,173,99,117,108,111,115,100,105,102\n,101,114,101,110,116,101,115,115,105,103,117,105,101,110,116,101,115,114,101,112\n,195,186,98,108,105,99,97,115,105,116,117,97,99,105,195,179,110,109,105,110,105,\n115,116,101,114,105,111,112,114,105,118,97,99,105,100,97,100,100,105,114,101,99,\n116,111,114,105,111,102,111,114,109,97,99,105,195,179,110,112,111,98,108,97,99,\n105,195,179,110,112,114,101,115,105,100,101,110,116,101,99,111,110,116,101,110,\n105,100,111,115,97,99,99,101,115,111,114,105,111,115,116,101,99,104,110,111,114,\n97,116,105,112,101,114,115,111,110,97,108,101,115,99,97,116,101,103,111,114,195,\n173,97,101,115,112,101,99,105,97,108,101,115,100,105,115,112,111,110,105,98,108,\n101,97,99,116,117,97,108,105,100,97,100,114,101,102,101,114,101,110,99,105,97,\n118,97,108,108,97,100,111,108,105,100,98,105,98,108,105,111,116,101,99,97,114,\n101,108,97,99,105,111,110,101,115,99,97,108,101,110,100,97,114,105,111,112,111,\n108,195,173,116,105,99,97,115,97,110,116,101,114,105,111,114,101,115,100,111,99,\n117,109,101,110,116,111,115,110,97,116,117,114,97,108,101,122,97,109,97,116,101,\n114,105,97,108,101,115,100,105,102,101,114,101,110,99,105,97,101,99,111,110,195,\n179,109,105,99,97,116,114,97,110,115,112,111,114,116,101,114,111,100,114,195,173\n,103,117,101,122,112,97,114,116,105,99,105,112,97,114,101,110,99,117,101,110,116\n,114,97,110,100,105,115,99,117,115,105,195,179,110,101,115,116,114,117,99,116,\n117,114,97,102,117,110,100,97,99,105,195,179,110,102,114,101,99,117,101,110,116,\n101,115,112,101,114,109,97,110,101,110,116,101,116,111,116,97,108,109,101,110,\n116,101,208,188,208,190,208,182,208,189,208,190,208,177,209,131,208,180,208,181,\n209,130,208,188,208,190,208,182,208,181,209,130,208,178,209,128,208,181,208,188,\n209,143,209,130,208,176,208,186,208,182,208,181,209,135,209,130,208,190,208,177,\n209,139,208,177,208,190,208,187,208,181,208,181,208,190,209,135,208,181,208,189,\n209,140,209,141,209,130,208,190,208,179,208,190,208,186,208,190,208,179,208,180,\n208,176,208,191,208,190,209,129,208,187,208,181,208,178,209,129,208,181,208,179,\n208,190,209,129,208,176,208,185,209,130,208,181,209,135,208,181,209,128,208,181,\n208,183,208,188,208,190,208,179,209,131,209,130,209,129,208,176,208,185,209,130,\n208,176,208,182,208,184,208,183,208,189,208,184,208,188,208,181,208,182,208,180,\n209,131,208,177,209,131,208,180,209,131,209,130,208,159,208,190,208,184,209,129,\n208,186,208,183,208,180,208,181,209,129,209,140,208,178,208,184,208,180,208,181,\n208,190,209,129,208,178,209,143,208,183,208,184,208,189,209,131,208,182,208,189,\n208,190,209,129,208,178,208,190,208,181,208,185,208,187,209,142,208,180,208,181,\n208,185,208,191,208,190,209,128,208,189,208,190,208,188,208,189,208,190,208,179,\n208,190,208,180,208,181,209,130,208,181,208,185,209,129,208,178,208,190,208,184,\n209,133,208,191,209,128,208,176,208,178,208,176,209,130,208,176,208,186,208,190,\n208,185,208,188,208,181,209,129,209,130,208,190,208,184,208,188,208,181,208,181,\n209,130,208,182,208,184,208,183,208,189,209,140,208,190,208,180,208,189,208,190,\n208,185,208,187,209,131,209,135,209,136,208,181,208,191,208,181,209,128,208,181,\n208,180,209,135,208,176,209,129,209,130,208,184,209,135,208,176,209,129,209,130,\n209,140,209,128,208,176,208,177,208,190,209,130,208,189,208,190,208,178,209,139,\n209,133,208,191,209,128,208,176,208,178,208,190,209,129,208,190,208,177,208,190,\n208,185,208,191,208,190,209,130,208,190,208,188,208,188,208,181,208,189,208,181,\n208,181,209,135,208,184,209,129,208,187,208,181,208,189,208,190,208,178,209,139,\n208,181,209,131,209,129,208,187,209,131,208,179,208,190,208,186,208,190,208,187,\n208,190,208,189,208,176,208,183,208,176,208,180,209,130,208,176,208,186,208,190,\n208,181,209,130,208,190,208,179,208,180,208,176,208,191,208,190,209,135,209,130,\n208,184,208,159,208,190,209,129,208,187,208,181,209,130,208,176,208,186,208,184,\n208,181,208,189,208,190,208,178,209,139,208,185,209,129,209,130,208,190,208,184,\n209,130,209,130,208,176,208,186,208,184,209,133,209,129,209,128,208,176,208,183,\n209,131,208,161,208,176,208,189,208,186,209,130,209,132,208,190,209,128,209,131,\n208,188,208,154,208,190,208,179,208,180,208,176,208,186,208,189,208,184,208,179,\n208,184,209,129,208,187,208,190,208,178,208,176,208,189,208,176,209,136,208,181,\n208,185,208,189,208,176,208,185,209,130,208,184,209,129,208,178,208,190,208,184,\n208,188,209,129,208,178,209,143,208,183,209,140,208,187,209,142,208,177,208,190,\n208,185,209,135,208,176,209,129,209,130,208,190,209,129,209,128,208,181,208,180,\n208,184,208,154,209,128,208,190,208,188,208,181,208,164,208,190,209,128,209,131,\n208,188,209,128,209,139,208,189,208,186,208,181,209,129,209,130,208,176,208,187,\n208,184,208,191,208,190,208,184,209,129,208,186,209,130,209,139,209,129,209,143,\n209,135,208,188,208,181,209,129,209,143,209,134,209,134,208,181,208,189,209,130,\n209,128,209,130,209,128,209,131,208,180,208,176,209,129,208,176,208,188,209,139,\n209,133,209,128,209,139,208,189,208,186,208,176,208,157,208,190,208,178,209,139,\n208,185,209,135,208,176,209,129,208,190,208,178,208,188,208,181,209,129,209,130,\n208,176,209,132,208,184,208,187,209,140,208,188,208,188,208,176,209,128,209,130,\n208,176,209,129,209,130,209,128,208,176,208,189,208,188,208,181,209,129,209,130,\n208,181,209,130,208,181,208,186,209,129,209,130,208,189,208,176,209,136,208,184,\n209,133,208,188,208,184,208,189,209,131,209,130,208,184,208,188,208,181,208,189,\n208,184,208,184,208,188,208,181,209,142,209,130,208,189,208,190,208,188,208,181,\n209,128,208,179,208,190,209,128,208,190,208,180,209,129,208,176,208,188,208,190,\n208,188,209,141,209,130,208,190,208,188,209,131,208,186,208,190,208,189,209,134,\n208,181,209,129,208,178,208,190,208,181,208,188,208,186,208,176,208,186,208,190,\n208,185,208,144,209,128,209,133,208,184,208,178,217,133,217,134,216,170,216,175,\n217,137,216,165,216,177,216,179,216,167,217,132,216,177,216,179,216,167,217,132,\n216,169,216,167,217,132,216,185,216,167,217,133,217,131,216,170,216,168,217,135,\n216,167,216,168,216,177,216,167,217,133,216,172,216,167,217,132,217,138,217,136,\n217,133,216,167,217,132,216,181,217,136,216,177,216,172,216,175,217,138,216,175,\n216,169,216,167,217,132,216,185,216,182,217,136,216,165,216,182,216,167,217,129,\n216,169,216,167,217,132,217,130,216,179,217,133,216,167,217,132,216,185,216,167,\n216,168,216,170,216,173,217,133,217,138,217,132,217,133,217,132,217,129,216,167,\n216,170,217,133,217,132,216,170,217,130,217,137,216,170,216,185,216,175,217,138,\n217,132,216,167,217,132,216,180,216,185,216,177,216,163,216,174,216,168,216,167,\n216,177,216,170,216,183,217,136,217,138,216,177,216,185,217,132,217,138,217,131,\n217,133,216,165,216,177,217,129,216,167,217,130,216,183,217,132,216,168,216,167,\n216,170,216,167,217,132,217,132,216,186,216,169,216,170,216,177,216,170,217,138,\n216,168,216,167,217,132,217,134,216,167,216,179,216,167,217,132,216,180,217,138,\n216,174,217,133,217,134,216,170,216,175,217,138,216,167,217,132,216,185,216,177,\n216,168,216,167,217,132,217,130,216,181,216,181,216,167,217,129,217,132,216,167,\n217,133,216,185,217,132,217,138,217,135,216,167,216,170,216,173,216,175,217,138,\n216,171,216,167,217,132,217,132,217,135,217,133,216,167,217,132,216,185,217,133,\n217,132,217,133,217,131,216,170,216,168,216,169,217,138,217,133,217,131,217,134,\n217,131,216,167,217,132,216,183,217,129,217,132,217,129,217,138,216,175,217,138,\n217,136,216,165,216,175,216,167,216,177,216,169,216,170,216,167,216,177,217,138,\n216,174,216,167,217,132,216,181,216,173,216,169,216,170,216,179,216,172,217,138,\n217,132,216,167,217,132,217,136,217,130,216,170,216,185,217,134,216,175,217,133,\n216,167,217,133,216,175,217,138,217,134,216,169,216,170,216,181,217,133,217,138,\n217,133,216,163,216,177,216,180,217,138,217,129,216,167,217,132,216,176,217,138,\n217,134,216,185,216,177,216,168,217,138,216,169,216,168,217,136,216,167,216,168,\n216,169,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,179,217,129,\n216,177,217,133,216,180,216,167,217,131,217,132,216,170,216,185,216,167,217,132,\n217,137,216,167,217,132,216,163,217,136,217,132,216,167,217,132,216,179,217,134,\n216,169,216,172,216,167,217,133,216,185,216,169,216,167,217,132,216,181,216,173,\n217,129,216,167,217,132,216,175,217,138,217,134,217,131,217,132,217,133,216,167,\n216,170,216,167,217,132,216,174,216,167,216,181,216,167,217,132,217,133,217,132,\n217,129,216,163,216,185,216,182,216,167,216,161,217,131,216,170,216,167,216,168,\n216,169,216,167,217,132,216,174,217,138,216,177,216,177,216,179,216,167,216,166,\n217,132,216,167,217,132,217,130,217,132,216,168,216,167,217,132,216,163,216,175,\n216,168,217,133,217,130,216,167,216,183,216,185,217,133,216,177,216,167,216,179,\n217,132,217,133,217,134,216,183,217,130,216,169,216,167,217,132,217,131,216,170,\n216,168,216,167,217,132,216,177,216,172,217,132,216,167,216,180,216,170,216,177,\n217,131,216,167,217,132,217,130,216,175,217,133,217,138,216,185,216,183,217,138,\n217,131,115,66,121,84,97,103,78,97,109,101,40,46,106,112,103,34,32,97,108,116,61\n,34,49,112,120,32,115,111,108,105,100,32,35,46,103,105,102,34,32,97,108,116,61,\n34,116,114,97,110,115,112,97,114,101,110,116,105,110,102,111,114,109,97,116,105,\n111,110,97,112,112,108,105,99,97,116,105,111,110,34,32,111,110,99,108,105,99,107\n,61,34,101,115,116,97,98,108,105,115,104,101,100,97,100,118,101,114,116,105,115,\n105,110,103,46,112,110,103,34,32,97,108,116,61,34,101,110,118,105,114,111,110,\n109,101,110,116,112,101,114,102,111,114,109,97,110,99,101,97,112,112,114,111,112\n,114,105,97,116,101,38,97,109,112,59,109,100,97,115,104,59,105,109,109,101,100,\n105,97,116,101,108,121,60,47,115,116,114,111,110,103,62,60,47,114,97,116,104,101\n,114,32,116,104,97,110,116,101,109,112,101,114,97,116,117,114,101,100,101,118,\n101,108,111,112,109,101,110,116,99,111,109,112,101,116,105,116,105,111,110,112,\n108,97,99,101,104,111,108,100,101,114,118,105,115,105,98,105,108,105,116,121,58,\n99,111,112,121,114,105,103,104,116,34,62,48,34,32,104,101,105,103,104,116,61,34,\n101,118,101,110,32,116,104,111,117,103,104,114,101,112,108,97,99,101,109,101,110\n,116,100,101,115,116,105,110,97,116,105,111,110,67,111,114,112,111,114,97,116,\n105,111,110,60,117,108,32,99,108,97,115,115,61,34,65,115,115,111,99,105,97,116,\n105,111,110,105,110,100,105,118,105,100,117,97,108,115,112,101,114,115,112,101,\n99,116,105,118,101,115,101,116,84,105,109,101,111,117,116,40,117,114,108,40,104,\n116,116,112,58,47,47,109,97,116,104,101,109,97,116,105,99,115,109,97,114,103,105\n,110,45,116,111,112,58,101,118,101,110,116,117,97,108,108,121,32,100,101,115,99,\n114,105,112,116,105,111,110,41,32,110,111,45,114,101,112,101,97,116,99,111,108,\n108,101,99,116,105,111,110,115,46,74,80,71,124,116,104,117,109,98,124,112,97,114\n,116,105,99,105,112,97,116,101,47,104,101,97,100,62,60,98,111,100,121,102,108,\n111,97,116,58,108,101,102,116,59,60,108,105,32,99,108,97,115,115,61,34,104,117,\n110,100,114,101,100,115,32,111,102,10,10,72,111,119,101,118,101,114,44,32,99,111\n,109,112,111,115,105,116,105,111,110,99,108,101,97,114,58,98,111,116,104,59,99,\n111,111,112,101,114,97,116,105,111,110,119,105,116,104,105,110,32,116,104,101,32\n,108,97,98,101,108,32,102,111,114,61,34,98,111,114,100,101,114,45,116,111,112,58\n,78,101,119,32,90,101,97,108,97,110,100,114,101,99,111,109,109,101,110,100,101,\n100,112,104,111,116,111,103,114,97,112,104,121,105,110,116,101,114,101,115,116,\n105,110,103,38,108,116,59,115,117,112,38,103,116,59,99,111,110,116,114,111,118,\n101,114,115,121,78,101,116,104,101,114,108,97,110,100,115,97,108,116,101,114,110\n,97,116,105,118,101,109,97,120,108,101,110,103,116,104,61,34,115,119,105,116,122\n,101,114,108,97,110,100,68,101,118,101,108,111,112,109,101,110,116,101,115,115,\n101,110,116,105,97,108,108,121,10,10,65,108,116,104,111,117,103,104,32,60,47,116\n,101,120,116,97,114,101,97,62,116,104,117,110,100,101,114,98,105,114,100,114,101\n,112,114,101,115,101,110,116,101,100,38,97,109,112,59,110,100,97,115,104,59,115,\n112,101,99,117,108,97,116,105,111,110,99,111,109,109,117,110,105,116,105,101,115\n,108,101,103,105,115,108,97,116,105,111,110,101,108,101,99,116,114,111,110,105,\n99,115,10,9,60,100,105,118,32,105,100,61,34,105,108,108,117,115,116,114,97,116,\n101,100,101,110,103,105,110,101,101,114,105,110,103,116,101,114,114,105,116,111,\n114,105,101,115,97,117,116,104,111,114,105,116,105,101,115,100,105,115,116,114,\n105,98,117,116,101,100,54,34,32,104,101,105,103,104,116,61,34,115,97,110,115,45,\n115,101,114,105,102,59,99,97,112,97,98,108,101,32,111,102,32,100,105,115,97,112,\n112,101,97,114,101,100,105,110,116,101,114,97,99,116,105,118,101,108,111,111,107\n,105,110,103,32,102,111,114,105,116,32,119,111,117,108,100,32,98,101,65,102,103,\n104,97,110,105,115,116,97,110,119,97,115,32,99,114,101,97,116,101,100,77,97,116,\n104,46,102,108,111,111,114,40,115,117,114,114,111,117,110,100,105,110,103,99,97,\n110,32,97,108,115,111,32,98,101,111,98,115,101,114,118,97,116,105,111,110,109,97\n,105,110,116,101,110,97,110,99,101,101,110,99,111,117,110,116,101,114,101,100,60\n,104,50,32,99,108,97,115,115,61,34,109,111,114,101,32,114,101,99,101,110,116,105\n,116,32,104,97,115,32,98,101,101,110,105,110,118,97,115,105,111,110,32,111,102,\n41,46,103,101,116,84,105,109,101,40,41,102,117,110,100,97,109,101,110,116,97,108\n,68,101,115,112,105,116,101,32,116,104,101,34,62,60,100,105,118,32,105,100,61,34\n,105,110,115,112,105,114,97,116,105,111,110,101,120,97,109,105,110,97,116,105,\n111,110,112,114,101,112,97,114,97,116,105,111,110,101,120,112,108,97,110,97,116,\n105,111,110,60,105,110,112,117,116,32,105,100,61,34,60,47,97,62,60,47,115,112,97\n,110,62,118,101,114,115,105,111,110,115,32,111,102,105,110,115,116,114,117,109,\n101,110,116,115,98,101,102,111,114,101,32,116,104,101,32,32,61,32,39,104,116,116\n,112,58,47,47,68,101,115,99,114,105,112,116,105,111,110,114,101,108,97,116,105,\n118,101,108,121,32,46,115,117,98,115,116,114,105,110,103,40,101,97,99,104,32,111\n,102,32,116,104,101,101,120,112,101,114,105,109,101,110,116,115,105,110,102,108,\n117,101,110,116,105,97,108,105,110,116,101,103,114,97,116,105,111,110,109,97,110\n,121,32,112,101,111,112,108,101,100,117,101,32,116,111,32,116,104,101,32,99,111,\n109,98,105,110,97,116,105,111,110,100,111,32,110,111,116,32,104,97,118,101,77,\n105,100,100,108,101,32,69,97,115,116,60,110,111,115,99,114,105,112,116,62,60,99,\n111,112,121,114,105,103,104,116,34,32,112,101,114,104,97,112,115,32,116,104,101,\n105,110,115,116,105,116,117,116,105,111,110,105,110,32,68,101,99,101,109,98,101,\n114,97,114,114,97,110,103,101,109,101,110,116,109,111,115,116,32,102,97,109,111,\n117,115,112,101,114,115,111,110,97,108,105,116,121,99,114,101,97,116,105,111,110\n,32,111,102,108,105,109,105,116,97,116,105,111,110,115,101,120,99,108,117,115,\n105,118,101,108,121,115,111,118,101,114,101,105,103,110,116,121,45,99,111,110,\n116,101,110,116,34,62,10,60,116,100,32,99,108,97,115,115,61,34,117,110,100,101,\n114,103,114,111,117,110,100,112,97,114,97,108,108,101,108,32,116,111,100,111,99,\n116,114,105,110,101,32,111,102,111,99,99,117,112,105,101,100,32,98,121,116,101,\n114,109,105,110,111,108,111,103,121,82,101,110,97,105,115,115,97,110,99,101,97,\n32,110,117,109,98,101,114,32,111,102,115,117,112,112,111,114,116,32,102,111,114,\n101,120,112,108,111,114,97,116,105,111,110,114,101,99,111,103,110,105,116,105,\n111,110,112,114,101,100,101,99,101,115,115,111,114,60,105,109,103,32,115,114,99,\n61,34,47,60,104,49,32,99,108,97,115,115,61,34,112,117,98,108,105,99,97,116,105,\n111,110,109,97,121,32,97,108,115,111,32,98,101,115,112,101,99,105,97,108,105,122\n,101,100,60,47,102,105,101,108,100,115,101,116,62,112,114,111,103,114,101,115,\n115,105,118,101,109,105,108,108,105,111,110,115,32,111,102,115,116,97,116,101,\n115,32,116,104,97,116,101,110,102,111,114,99,101,109,101,110,116,97,114,111,117,\n110,100,32,116,104,101,32,111,110,101,32,97,110,111,116,104,101,114,46,112,97,\n114,101,110,116,78,111,100,101,97,103,114,105,99,117,108,116,117,114,101,65,108,\n116,101,114,110,97,116,105,118,101,114,101,115,101,97,114,99,104,101,114,115,116\n,111,119,97,114,100,115,32,116,104,101,77,111,115,116,32,111,102,32,116,104,101,\n109,97,110,121,32,111,116,104,101,114,32,40,101,115,112,101,99,105,97,108,108,\n121,60,116,100,32,119,105,100,116,104,61,34,59,119,105,100,116,104,58,49,48,48,\n37,105,110,100,101,112,101,110,100,101,110,116,60,104,51,32,99,108,97,115,115,61\n,34,32,111,110,99,104,97,110,103,101,61,34,41,46,97,100,100,67,108,97,115,115,40\n,105,110,116,101,114,97,99,116,105,111,110,79,110,101,32,111,102,32,116,104,101,\n32,100,97,117,103,104,116,101,114,32,111,102,97,99,99,101,115,115,111,114,105,\n101,115,98,114,97,110,99,104,101,115,32,111,102,13,10,60,100,105,118,32,105,100,\n61,34,116,104,101,32,108,97,114,103,101,115,116,100,101,99,108,97,114,97,116,105\n,111,110,114,101,103,117,108,97,116,105,111,110,115,73,110,102,111,114,109,97,\n116,105,111,110,116,114,97,110,115,108,97,116,105,111,110,100,111,99,117,109,101\n,110,116,97,114,121,105,110,32,111,114,100,101,114,32,116,111,34,62,10,60,104,\n101,97,100,62,10,60,34,32,104,101,105,103,104,116,61,34,49,97,99,114,111,115,115\n,32,116,104,101,32,111,114,105,101,110,116,97,116,105,111,110,41,59,60,47,115,99\n,114,105,112,116,62,105,109,112,108,101,109,101,110,116,101,100,99,97,110,32,98,\n101,32,115,101,101,110,116,104,101,114,101,32,119,97,115,32,97,100,101,109,111,\n110,115,116,114,97,116,101,99,111,110,116,97,105,110,101,114,34,62,99,111,110,\n110,101,99,116,105,111,110,115,116,104,101,32,66,114,105,116,105,115,104,119,97,\n115,32,119,114,105,116,116,101,110,33,105,109,112,111,114,116,97,110,116,59,112,\n120,59,32,109,97,114,103,105,110,45,102,111,108,108,111,119,101,100,32,98,121,97\n,98,105,108,105,116,121,32,116,111,32,99,111,109,112,108,105,99,97,116,101,100,\n100,117,114,105,110,103,32,116,104,101,32,105,109,109,105,103,114,97,116,105,111\n,110,97,108,115,111,32,99,97,108,108,101,100,60,104,52,32,99,108,97,115,115,61,\n34,100,105,115,116,105,110,99,116,105,111,110,114,101,112,108,97,99,101,100,32,\n98,121,103,111,118,101,114,110,109,101,110,116,115,108,111,99,97,116,105,111,110\n,32,111,102,105,110,32,78,111,118,101,109,98,101,114,119,104,101,116,104,101,114\n,32,116,104,101,60,47,112,62,10,60,47,100,105,118,62,97,99,113,117,105,115,105,\n116,105,111,110,99,97,108,108,101,100,32,116,104,101,32,112,101,114,115,101,99,\n117,116,105,111,110,100,101,115,105,103,110,97,116,105,111,110,123,102,111,110,\n116,45,115,105,122,101,58,97,112,112,101,97,114,101,100,32,105,110,105,110,118,\n101,115,116,105,103,97,116,101,101,120,112,101,114,105,101,110,99,101,100,109,\n111,115,116,32,108,105,107,101,108,121,119,105,100,101,108,121,32,117,115,101,\n100,100,105,115,99,117,115,115,105,111,110,115,112,114,101,115,101,110,99,101,32\n,111,102,32,40,100,111,99,117,109,101,110,116,46,101,120,116,101,110,115,105,118\n,101,108,121,73,116,32,104,97,115,32,98,101,101,110,105,116,32,100,111,101,115,\n32,110,111,116,99,111,110,116,114,97,114,121,32,116,111,105,110,104,97,98,105,\n116,97,110,116,115,105,109,112,114,111,118,101,109,101,110,116,115,99,104,111,\n108,97,114,115,104,105,112,99,111,110,115,117,109,112,116,105,111,110,105,110,\n115,116,114,117,99,116,105,111,110,102,111,114,32,101,120,97,109,112,108,101,111\n,110,101,32,111,114,32,109,111,114,101,112,120,59,32,112,97,100,100,105,110,103,\n116,104,101,32,99,117,114,114,101,110,116,97,32,115,101,114,105,101,115,32,111,\n102,97,114,101,32,117,115,117,97,108,108,121,114,111,108,101,32,105,110,32,116,\n104,101,112,114,101,118,105,111,117,115,108,121,32,100,101,114,105,118,97,116,\n105,118,101,115,101,118,105,100,101,110,99,101,32,111,102,101,120,112,101,114,\n105,101,110,99,101,115,99,111,108,111,114,115,99,104,101,109,101,115,116,97,116,\n101,100,32,116,104,97,116,99,101,114,116,105,102,105,99,97,116,101,60,47,97,62,\n60,47,100,105,118,62,10,32,115,101,108,101,99,116,101,100,61,34,104,105,103,104,\n32,115,99,104,111,111,108,114,101,115,112,111,110,115,101,32,116,111,99,111,109,\n102,111,114,116,97,98,108,101,97,100,111,112,116,105,111,110,32,111,102,116,104,\n114,101,101,32,121,101,97,114,115,116,104,101,32,99,111,117,110,116,114,121,105,\n110,32,70,101,98,114,117,97,114,121,115,111,32,116,104,97,116,32,116,104,101,112\n,101,111,112,108,101,32,119,104,111,32,112,114,111,118,105,100,101,100,32,98,121\n,60,112,97,114,97,109,32,110,97,109,101,97,102,102,101,99,116,101,100,32,98,121,\n105,110,32,116,101,114,109,115,32,111,102,97,112,112,111,105,110,116,109,101,110\n,116,73,83,79,45,56,56,53,57,45,49,34,119,97,115,32,98,111,114,110,32,105,110,\n104,105,115,116,111,114,105,99,97,108,32,114,101,103,97,114,100,101,100,32,97,\n115,109,101,97,115,117,114,101,109,101,110,116,105,115,32,98,97,115,101,100,32,\n111,110,32,97,110,100,32,111,116,104,101,114,32,58,32,102,117,110,99,116,105,111\n,110,40,115,105,103,110,105,102,105,99,97,110,116,99,101,108,101,98,114,97,116,\n105,111,110,116,114,97,110,115,109,105,116,116,101,100,47,106,115,47,106,113,117\n,101,114,121,46,105,115,32,107,110,111,119,110,32,97,115,116,104,101,111,114,101\n,116,105,99,97,108,32,116,97,98,105,110,100,101,120,61,34,105,116,32,99,111,117,\n108,100,32,98,101,60,110,111,115,99,114,105,112,116,62,10,104,97,118,105,110,103\n,32,98,101,101,110,13,10,60,104,101,97,100,62,13,10,60,32,38,113,117,111,116,59,\n84,104,101,32,99,111,109,112,105,108,97,116,105,111,110,104,101,32,104,97,100,32\n,98,101,101,110,112,114,111,100,117,99,101,100,32,98,121,112,104,105,108,111,115\n,111,112,104,101,114,99,111,110,115,116,114,117,99,116,101,100,105,110,116,101,\n110,100,101,100,32,116,111,97,109,111,110,103,32,111,116,104,101,114,99,111,109,\n112,97,114,101,100,32,116,111,116,111,32,115,97,121,32,116,104,97,116,69,110,103\n,105,110,101,101,114,105,110,103,97,32,100,105,102,102,101,114,101,110,116,114,\n101,102,101,114,114,101,100,32,116,111,100,105,102,102,101,114,101,110,99,101,\n115,98,101,108,105,101,102,32,116,104,97,116,112,104,111,116,111,103,114,97,112,\n104,115,105,100,101,110,116,105,102,121,105,110,103,72,105,115,116,111,114,121,\n32,111,102,32,82,101,112,117,98,108,105,99,32,111,102,110,101,99,101,115,115,97,\n114,105,108,121,112,114,111,98,97,98,105,108,105,116,121,116,101,99,104,110,105,\n99,97,108,108,121,108,101,97,118,105,110,103,32,116,104,101,115,112,101,99,116,\n97,99,117,108,97,114,102,114,97,99,116,105,111,110,32,111,102,101,108,101,99,116\n,114,105,99,105,116,121,104,101,97,100,32,111,102,32,116,104,101,114,101,115,116\n,97,117,114,97,110,116,115,112,97,114,116,110,101,114,115,104,105,112,101,109,\n112,104,97,115,105,115,32,111,110,109,111,115,116,32,114,101,99,101,110,116,115,\n104,97,114,101,32,119,105,116,104,32,115,97,121,105,110,103,32,116,104,97,116,\n102,105,108,108,101,100,32,119,105,116,104,100,101,115,105,103,110,101,100,32,\n116,111,105,116,32,105,115,32,111,102,116,101,110,34,62,60,47,105,102,114,97,109\n,101,62,97,115,32,102,111,108,108,111,119,115,58,109,101,114,103,101,100,32,119,\n105,116,104,116,104,114,111,117,103,104,32,116,104,101,99,111,109,109,101,114,99\n,105,97,108,32,112,111,105,110,116,101,100,32,111,117,116,111,112,112,111,114,\n116,117,110,105,116,121,118,105,101,119,32,111,102,32,116,104,101,114,101,113,\n117,105,114,101,109,101,110,116,100,105,118,105,115,105,111,110,32,111,102,112,\n114,111,103,114,97,109,109,105,110,103,104,101,32,114,101,99,101,105,118,101,100\n,115,101,116,73,110,116,101,114,118,97,108,34,62,60,47,115,112,97,110,62,60,47,\n105,110,32,78,101,119,32,89,111,114,107,97,100,100,105,116,105,111,110,97,108,32\n,99,111,109,112,114,101,115,115,105,111,110,10,10,60,100,105,118,32,105,100,61,\n34,105,110,99,111,114,112,111,114,97,116,101,59,60,47,115,99,114,105,112,116,62,\n60,97,116,116,97,99,104,69,118,101,110,116,98,101,99,97,109,101,32,116,104,101,\n32,34,32,116,97,114,103,101,116,61,34,95,99,97,114,114,105,101,100,32,111,117,\n116,83,111,109,101,32,111,102,32,116,104,101,115,99,105,101,110,99,101,32,97,110\n,100,116,104,101,32,116,105,109,101,32,111,102,67,111,110,116,97,105,110,101,114\n,34,62,109,97,105,110,116,97,105,110,105,110,103,67,104,114,105,115,116,111,112,\n104,101,114,77,117,99,104,32,111,102,32,116,104,101,119,114,105,116,105,110,103,\n115,32,111,102,34,32,104,101,105,103,104,116,61,34,50,115,105,122,101,32,111,102\n,32,116,104,101,118,101,114,115,105,111,110,32,111,102,32,109,105,120,116,117,\n114,101,32,111,102,32,98,101,116,119,101,101,110,32,116,104,101,69,120,97,109,\n112,108,101,115,32,111,102,101,100,117,99,97,116,105,111,110,97,108,99,111,109,\n112,101,116,105,116,105,118,101,32,111,110,115,117,98,109,105,116,61,34,100,105,\n114,101,99,116,111,114,32,111,102,100,105,115,116,105,110,99,116,105,118,101,47,\n68,84,68,32,88,72,84,77,76,32,114,101,108,97,116,105,110,103,32,116,111,116,101,\n110,100,101,110,99,121,32,116,111,112,114,111,118,105,110,99,101,32,111,102,119,\n104,105,99,104,32,119,111,117,108,100,100,101,115,112,105,116,101,32,116,104,101\n,115,99,105,101,110,116,105,102,105,99,32,108,101,103,105,115,108,97,116,117,114\n,101,46,105,110,110,101,114,72,84,77,76,32,97,108,108,101,103,97,116,105,111,110\n,115,65,103,114,105,99,117,108,116,117,114,101,119,97,115,32,117,115,101,100,32,\n105,110,97,112,112,114,111,97,99,104,32,116,111,105,110,116,101,108,108,105,103,\n101,110,116,121,101,97,114,115,32,108,97,116,101,114,44,115,97,110,115,45,115,\n101,114,105,102,100,101,116,101,114,109,105,110,105,110,103,80,101,114,102,111,\n114,109,97,110,99,101,97,112,112,101,97,114,97,110,99,101,115,44,32,119,104,105,\n99,104,32,105,115,32,102,111,117,110,100,97,116,105,111,110,115,97,98,98,114,101\n,118,105,97,116,101,100,104,105,103,104,101,114,32,116,104,97,110,115,32,102,114\n,111,109,32,116,104,101,32,105,110,100,105,118,105,100,117,97,108,32,99,111,109,\n112,111,115,101,100,32,111,102,115,117,112,112,111,115,101,100,32,116,111,99,108\n,97,105,109,115,32,116,104,97,116,97,116,116,114,105,98,117,116,105,111,110,102,\n111,110,116,45,115,105,122,101,58,49,101,108,101,109,101,110,116,115,32,111,102,\n72,105,115,116,111,114,105,99,97,108,32,104,105,115,32,98,114,111,116,104,101,\n114,97,116,32,116,104,101,32,116,105,109,101,97,110,110,105,118,101,114,115,97,\n114,121,103,111,118,101,114,110,101,100,32,98,121,114,101,108,97,116,101,100,32,\n116,111,32,117,108,116,105,109,97,116,101,108,121,32,105,110,110,111,118,97,116,\n105,111,110,115,105,116,32,105,115,32,115,116,105,108,108,99,97,110,32,111,110,\n108,121,32,98,101,100,101,102,105,110,105,116,105,111,110,115,116,111,71,77,84,\n83,116,114,105,110,103,65,32,110,117,109,98,101,114,32,111,102,105,109,103,32,99\n,108,97,115,115,61,34,69,118,101,110,116,117,97,108,108,121,44,119,97,115,32,99,\n104,97,110,103,101,100,111,99,99,117,114,114,101,100,32,105,110,110,101,105,103,\n104,98,111,114,105,110,103,100,105,115,116,105,110,103,117,105,115,104,119,104,\n101,110,32,104,101,32,119,97,115,105,110,116,114,111,100,117,99,105,110,103,116,\n101,114,114,101,115,116,114,105,97,108,77,97,110,121,32,111,102,32,116,104,101,\n97,114,103,117,101,115,32,116,104,97,116,97,110,32,65,109,101,114,105,99,97,110,\n99,111,110,113,117,101,115,116,32,111,102,119,105,100,101,115,112,114,101,97,100\n,32,119,101,114,101,32,107,105,108,108,101,100,115,99,114,101,101,110,32,97,110,\n100,32,73,110,32,111,114,100,101,114,32,116,111,101,120,112,101,99,116,101,100,\n32,116,111,100,101,115,99,101,110,100,97,110,116,115,97,114,101,32,108,111,99,97\n,116,101,100,108,101,103,105,115,108,97,116,105,118,101,103,101,110,101,114,97,\n116,105,111,110,115,32,98,97,99,107,103,114,111,117,110,100,109,111,115,116,32,\n112,101,111,112,108,101,121,101,97,114,115,32,97,102,116,101,114,116,104,101,114\n,101,32,105,115,32,110,111,116,104,101,32,104,105,103,104,101,115,116,102,114,\n101,113,117,101,110,116,108,121,32,116,104,101,121,32,100,111,32,110,111,116,97,\n114,103,117,101,100,32,116,104,97,116,115,104,111,119,101,100,32,116,104,97,116,\n112,114,101,100,111,109,105,110,97,110,116,116,104,101,111,108,111,103,105,99,97\n,108,98,121,32,116,104,101,32,116,105,109,101,99,111,110,115,105,100,101,114,105\n,110,103,115,104,111,114,116,45,108,105,118,101,100,60,47,115,112,97,110,62,60,\n47,97,62,99,97,110,32,98,101,32,117,115,101,100,118,101,114,121,32,108,105,116,\n116,108,101,111,110,101,32,111,102,32,116,104,101,32,104,97,100,32,97,108,114,\n101,97,100,121,105,110,116,101,114,112,114,101,116,101,100,99,111,109,109,117,\n110,105,99,97,116,101,102,101,97,116,117,114,101,115,32,111,102,103,111,118,101,\n114,110,109,101,110,116,44,60,47,110,111,115,99,114,105,112,116,62,101,110,116,\n101,114,101,100,32,116,104,101,34,32,104,101,105,103,104,116,61,34,51,73,110,100\n,101,112,101,110,100,101,110,116,112,111,112,117,108,97,116,105,111,110,115,108,\n97,114,103,101,45,115,99,97,108,101,46,32,65,108,116,104,111,117,103,104,32,117,\n115,101,100,32,105,110,32,116,104,101,100,101,115,116,114,117,99,116,105,111,110\n,112,111,115,115,105,98,105,108,105,116,121,115,116,97,114,116,105,110,103,32,\n105,110,116,119,111,32,111,114,32,109,111,114,101,101,120,112,114,101,115,115,\n105,111,110,115,115,117,98,111,114,100,105,110,97,116,101,108,97,114,103,101,114\n,32,116,104,97,110,104,105,115,116,111,114,121,32,97,110,100,60,47,111,112,116,\n105,111,110,62,13,10,67,111,110,116,105,110,101,110,116,97,108,101,108,105,109,\n105,110,97,116,105,110,103,119,105,108,108,32,110,111,116,32,98,101,112,114,97,\n99,116,105,99,101,32,111,102,105,110,32,102,114,111,110,116,32,111,102,115,105,\n116,101,32,111,102,32,116,104,101,101,110,115,117,114,101,32,116,104,97,116,116,\n111,32,99,114,101,97,116,101,32,97,109,105,115,115,105,115,115,105,112,112,105,\n112,111,116,101,110,116,105,97,108,108,121,111,117,116,115,116,97,110,100,105,\n110,103,98,101,116,116,101,114,32,116,104,97,110,119,104,97,116,32,105,115,32,\n110,111,119,115,105,116,117,97,116,101,100,32,105,110,109,101,116,97,32,110,97,\n109,101,61,34,84,114,97,100,105,116,105,111,110,97,108,115,117,103,103,101,115,\n116,105,111,110,115,84,114,97,110,115,108,97,116,105,111,110,116,104,101,32,102,\n111,114,109,32,111,102,97,116,109,111,115,112,104,101,114,105,99,105,100,101,111\n,108,111,103,105,99,97,108,101,110,116,101,114,112,114,105,115,101,115,99,97,108\n,99,117,108,97,116,105,110,103,101,97,115,116,32,111,102,32,116,104,101,114,101,\n109,110,97,110,116,115,32,111,102,112,108,117,103,105,110,115,112,97,103,101,47,\n105,110,100,101,120,46,112,104,112,63,114,101,109,97,105,110,101,100,32,105,110,\n116,114,97,110,115,102,111,114,109,101,100,72,101,32,119,97,115,32,97,108,115,\n111,119,97,115,32,97,108,114,101,97,100,121,115,116,97,116,105,115,116,105,99,97\n,108,105,110,32,102,97,118,111,114,32,111,102,77,105,110,105,115,116,114,121,32,\n111,102,109,111,118,101,109,101,110,116,32,111,102,102,111,114,109,117,108,97,\n116,105,111,110,105,115,32,114,101,113,117,105,114,101,100,60,108,105,110,107,32\n,114,101,108,61,34,84,104,105,115,32,105,115,32,116,104,101,32,60,97,32,104,114,\n101,102,61,34,47,112,111,112,117,108,97,114,105,122,101,100,105,110,118,111,108,\n118,101,100,32,105,110,97,114,101,32,117,115,101,100,32,116,111,97,110,100,32,\n115,101,118,101,114,97,108,109,97,100,101,32,98,121,32,116,104,101,115,101,101,\n109,115,32,116,111,32,98,101,108,105,107,101,108,121,32,116,104,97,116,80,97,108\n,101,115,116,105,110,105,97,110,110,97,109,101,100,32,97,102,116,101,114,105,116\n,32,104,97,100,32,98,101,101,110,109,111,115,116,32,99,111,109,109,111,110,116,\n111,32,114,101,102,101,114,32,116,111,98,117,116,32,116,104,105,115,32,105,115,\n99,111,110,115,101,99,117,116,105,118,101,116,101,109,112,111,114,97,114,105,108\n,121,73,110,32,103,101,110,101,114,97,108,44,99,111,110,118,101,110,116,105,111,\n110,115,116,97,107,101,115,32,112,108,97,99,101,115,117,98,100,105,118,105,115,\n105,111,110,116,101,114,114,105,116,111,114,105,97,108,111,112,101,114,97,116,\n105,111,110,97,108,112,101,114,109,97,110,101,110,116,108,121,119,97,115,32,108,\n97,114,103,101,108,121,111,117,116,98,114,101,97,107,32,111,102,105,110,32,116,\n104,101,32,112,97,115,116,102,111,108,108,111,119,105,110,103,32,97,32,120,109,\n108,110,115,58,111,103,61,34,62,60,97,32,99,108,97,115,115,61,34,99,108,97,115,\n115,61,34,116,101,120,116,67,111,110,118,101,114,115,105,111,110,32,109,97,121,\n32,98,101,32,117,115,101,100,109,97,110,117,102,97,99,116,117,114,101,97,102,116\n,101,114,32,98,101,105,110,103,99,108,101,97,114,102,105,120,34,62,10,113,117,\n101,115,116,105,111,110,32,111,102,119,97,115,32,101,108,101,99,116,101,100,116,\n111,32,98,101,99,111,109,101,32,97,98,101,99,97,117,115,101,32,111,102,32,115,\n111,109,101,32,112,101,111,112,108,101,105,110,115,112,105,114,101,100,32,98,121\n,115,117,99,99,101,115,115,102,117,108,32,97,32,116,105,109,101,32,119,104,101,\n110,109,111,114,101,32,99,111,109,109,111,110,97,109,111,110,103,115,116,32,116,\n104,101,97,110,32,111,102,102,105,99,105,97,108,119,105,100,116,104,58,49,48,48,\n37,59,116,101,99,104,110,111,108,111,103,121,44,119,97,115,32,97,100,111,112,116\n,101,100,116,111,32,107,101,101,112,32,116,104,101,115,101,116,116,108,101,109,\n101,110,116,115,108,105,118,101,32,98,105,114,116,104,115,105,110,100,101,120,46\n,104,116,109,108,34,67,111,110,110,101,99,116,105,99,117,116,97,115,115,105,103,\n110,101,100,32,116,111,38,97,109,112,59,116,105,109,101,115,59,97,99,99,111,117,\n110,116,32,102,111,114,97,108,105,103,110,61,114,105,103,104,116,116,104,101,32,\n99,111,109,112,97,110,121,97,108,119,97,121,115,32,98,101,101,110,114,101,116,\n117,114,110,101,100,32,116,111,105,110,118,111,108,118,101,109,101,110,116,66,\n101,99,97,117,115,101,32,116,104,101,116,104,105,115,32,112,101,114,105,111,100,\n34,32,110,97,109,101,61,34,113,34,32,99,111,110,102,105,110,101,100,32,116,111,\n97,32,114,101,115,117,108,116,32,111,102,118,97,108,117,101,61,34,34,32,47,62,\n105,115,32,97,99,116,117,97,108,108,121,69,110,118,105,114,111,110,109,101,110,\n116,13,10,60,47,104,101,97,100,62,13,10,67,111,110,118,101,114,115,101,108,121,\n44,62,10,60,100,105,118,32,105,100,61,34,48,34,32,119,105,100,116,104,61,34,49,\n105,115,32,112,114,111,98,97,98,108,121,104,97,118,101,32,98,101,99,111,109,101,\n99,111,110,116,114,111,108,108,105,110,103,116,104,101,32,112,114,111,98,108,101\n,109,99,105,116,105,122,101,110,115,32,111,102,112,111,108,105,116,105,99,105,97\n,110,115,114,101,97,99,104,101,100,32,116,104,101,97,115,32,101,97,114,108,121,\n32,97,115,58,110,111,110,101,59,32,111,118,101,114,60,116,97,98,108,101,32,99,\n101,108,108,118,97,108,105,100,105,116,121,32,111,102,100,105,114,101,99,116,108\n,121,32,116,111,111,110,109,111,117,115,101,100,111,119,110,119,104,101,114,101,\n32,105,116,32,105,115,119,104,101,110,32,105,116,32,119,97,115,109,101,109,98,\n101,114,115,32,111,102,32,114,101,108,97,116,105,111,110,32,116,111,97,99,99,111\n,109,109,111,100,97,116,101,97,108,111,110,103,32,119,105,116,104,32,73,110,32,\n116,104,101,32,108,97,116,101,116,104,101,32,69,110,103,108,105,115,104,100,101,\n108,105,99,105,111,117,115,34,62,116,104,105,115,32,105,115,32,110,111,116,116,\n104,101,32,112,114,101,115,101,110,116,105,102,32,116,104,101,121,32,97,114,101,\n97,110,100,32,102,105,110,97,108,108,121,97,32,109,97,116,116,101,114,32,111,102\n,13,10,9,60,47,100,105,118,62,13,10,13,10,60,47,115,99,114,105,112,116,62,102,97\n,115,116,101,114,32,116,104,97,110,109,97,106,111,114,105,116,121,32,111,102,97,\n102,116,101,114,32,119,104,105,99,104,99,111,109,112,97,114,97,116,105,118,101,\n116,111,32,109,97,105,110,116,97,105,110,105,109,112,114,111,118,101,32,116,104,\n101,97,119,97,114,100,101,100,32,116,104,101,101,114,34,32,99,108,97,115,115,61,\n34,102,114,97,109,101,98,111,114,100,101,114,114,101,115,116,111,114,97,116,105,\n111,110,105,110,32,116,104,101,32,115,97,109,101,97,110,97,108,121,115,105,115,\n32,111,102,116,104,101,105,114,32,102,105,114,115,116,68,117,114,105,110,103,32,\n116,104,101,32,99,111,110,116,105,110,101,110,116,97,108,115,101,113,117,101,110\n,99,101,32,111,102,102,117,110,99,116,105,111,110,40,41,123,102,111,110,116,45,\n115,105,122,101,58,32,119,111,114,107,32,111,110,32,116,104,101,60,47,115,99,114\n,105,112,116,62,10,60,98,101,103,105,110,115,32,119,105,116,104,106,97,118,97,\n115,99,114,105,112,116,58,99,111,110,115,116,105,116,117,101,110,116,119,97,115,\n32,102,111,117,110,100,101,100,101,113,117,105,108,105,98,114,105,117,109,97,115\n,115,117,109,101,32,116,104,97,116,105,115,32,103,105,118,101,110,32,98,121,110,\n101,101,100,115,32,116,111,32,98,101,99,111,111,114,100,105,110,97,116,101,115,\n116,104,101,32,118,97,114,105,111,117,115,97,114,101,32,112,97,114,116,32,111,\n102,111,110,108,121,32,105,110,32,116,104,101,115,101,99,116,105,111,110,115,32,\n111,102,105,115,32,97,32,99,111,109,109,111,110,116,104,101,111,114,105,101,115,\n32,111,102,100,105,115,99,111,118,101,114,105,101,115,97,115,115,111,99,105,97,\n116,105,111,110,101,100,103,101,32,111,102,32,116,104,101,115,116,114,101,110,\n103,116,104,32,111,102,112,111,115,105,116,105,111,110,32,105,110,112,114,101,\n115,101,110,116,45,100,97,121,117,110,105,118,101,114,115,97,108,108,121,116,111\n,32,102,111,114,109,32,116,104,101,98,117,116,32,105,110,115,116,101,97,100,99,\n111,114,112,111,114,97,116,105,111,110,97,116,116,97,99,104,101,100,32,116,111,\n105,115,32,99,111,109,109,111,110,108,121,114,101,97,115,111,110,115,32,102,111,\n114,32,38,113,117,111,116,59,116,104,101,32,99,97,110,32,98,101,32,109,97,100,\n101,119,97,115,32,97,98,108,101,32,116,111,119,104,105,99,104,32,109,101,97,110,\n115,98,117,116,32,100,105,100,32,110,111,116,111,110,77,111,117,115,101,79,118,\n101,114,97,115,32,112,111,115,115,105,98,108,101,111,112,101,114,97,116,101,100,\n32,98,121,99,111,109,105,110,103,32,102,114,111,109,116,104,101,32,112,114,105,\n109,97,114,121,97,100,100,105,116,105,111,110,32,111,102,102,111,114,32,115,101,\n118,101,114,97,108,116,114,97,110,115,102,101,114,114,101,100,97,32,112,101,114,\n105,111,100,32,111,102,97,114,101,32,97,98,108,101,32,116,111,104,111,119,101,\n118,101,114,44,32,105,116,115,104,111,117,108,100,32,104,97,118,101,109,117,99,\n104,32,108,97,114,103,101,114,10,9,60,47,115,99,114,105,112,116,62,97,100,111,\n112,116,101,100,32,116,104,101,112,114,111,112,101,114,116,121,32,111,102,100,\n105,114,101,99,116,101,100,32,98,121,101,102,102,101,99,116,105,118,101,108,121,\n119,97,115,32,98,114,111,117,103,104,116,99,104,105,108,100,114,101,110,32,111,\n102,80,114,111,103,114,97,109,109,105,110,103,108,111,110,103,101,114,32,116,104\n,97,110,109,97,110,117,115,99,114,105,112,116,115,119,97,114,32,97,103,97,105,\n110,115,116,98,121,32,109,101,97,110,115,32,111,102,97,110,100,32,109,111,115,\n116,32,111,102,115,105,109,105,108,97,114,32,116,111,32,112,114,111,112,114,105,\n101,116,97,114,121,111,114,105,103,105,110,97,116,105,110,103,112,114,101,115,\n116,105,103,105,111,117,115,103,114,97,109,109,97,116,105,99,97,108,101,120,112,\n101,114,105,101,110,99,101,46,116,111,32,109,97,107,101,32,116,104,101,73,116,32\n,119,97,115,32,97,108,115,111,105,115,32,102,111,117,110,100,32,105,110,99,111,\n109,112,101,116,105,116,111,114,115,105,110,32,116,104,101,32,85,46,83,46,114,\n101,112,108,97,99,101,32,116,104,101,98,114,111,117,103,104,116,32,116,104,101,\n99,97,108,99,117,108,97,116,105,111,110,102,97,108,108,32,111,102,32,116,104,101\n,116,104,101,32,103,101,110,101,114,97,108,112,114,97,99,116,105,99,97,108,108,\n121,105,110,32,104,111,110,111,114,32,111,102,114,101,108,101,97,115,101,100,32,\n105,110,114,101,115,105,100,101,110,116,105,97,108,97,110,100,32,115,111,109,101\n,32,111,102,107,105,110,103,32,111,102,32,116,104,101,114,101,97,99,116,105,111,\n110,32,116,111,49,115,116,32,69,97,114,108,32,111,102,99,117,108,116,117,114,101\n,32,97,110,100,112,114,105,110,99,105,112,97,108,108,121,60,47,116,105,116,108,\n101,62,10,32,32,116,104,101,121,32,99,97,110,32,98,101,98,97,99,107,32,116,111,\n32,116,104,101,115,111,109,101,32,111,102,32,104,105,115,101,120,112,111,115,117\n,114,101,32,116,111,97,114,101,32,115,105,109,105,108,97,114,102,111,114,109,32,\n111,102,32,116,104,101,97,100,100,70,97,118,111,114,105,116,101,99,105,116,105,\n122,101,110,115,104,105,112,112,97,114,116,32,105,110,32,116,104,101,112,101,111\n,112,108,101,32,119,105,116,104,105,110,32,112,114,97,99,116,105,99,101,116,111,\n32,99,111,110,116,105,110,117,101,38,97,109,112,59,109,105,110,117,115,59,97,112\n,112,114,111,118,101,100,32,98,121,32,116,104,101,32,102,105,114,115,116,32,97,\n108,108,111,119,101,100,32,116,104,101,97,110,100,32,102,111,114,32,116,104,101,\n102,117,110,99,116,105,111,110,105,110,103,112,108,97,121,105,110,103,32,116,104\n,101,115,111,108,117,116,105,111,110,32,116,111,104,101,105,103,104,116,61,34,48\n,34,32,105,110,32,104,105,115,32,98,111,111,107,109,111,114,101,32,116,104,97,\n110,32,97,102,111,108,108,111,119,115,32,116,104,101,99,114,101,97,116,101,100,\n32,116,104,101,112,114,101,115,101,110,99,101,32,105,110,38,110,98,115,112,59,60\n,47,116,100,62,110,97,116,105,111,110,97,108,105,115,116,116,104,101,32,105,100,\n101,97,32,111,102,97,32,99,104,97,114,97,99,116,101,114,119,101,114,101,32,102,\n111,114,99,101,100,32,99,108,97,115,115,61,34,98,116,110,100,97,121,115,32,111,\n102,32,116,104,101,102,101,97,116,117,114,101,100,32,105,110,115,104,111,119,105\n,110,103,32,116,104,101,105,110,116,101,114,101,115,116,32,105,110,105,110,32,\n112,108,97,99,101,32,111,102,116,117,114,110,32,111,102,32,116,104,101,116,104,\n101,32,104,101,97,100,32,111,102,76,111,114,100,32,111,102,32,116,104,101,112,\n111,108,105,116,105,99,97,108,108,121,104,97,115,32,105,116,115,32,111,119,110,\n69,100,117,99,97,116,105,111,110,97,108,97,112,112,114,111,118,97,108,32,111,102\n,115,111,109,101,32,111,102,32,116,104,101,101,97,99,104,32,111,116,104,101,114,\n44,98,101,104,97,118,105,111,114,32,111,102,97,110,100,32,98,101,99,97,117,115,\n101,97,110,100,32,97,110,111,116,104,101,114,97,112,112,101,97,114,101,100,32,\n111,110,114,101,99,111,114,100,101,100,32,105,110,98,108,97,99,107,38,113,117,\n111,116,59,109,97,121,32,105,110,99,108,117,100,101,116,104,101,32,119,111,114,\n108,100,39,115,99,97,110,32,108,101,97,100,32,116,111,114,101,102,101,114,115,32\n,116,111,32,97,98,111,114,100,101,114,61,34,48,34,32,103,111,118,101,114,110,109\n,101,110,116,32,119,105,110,110,105,110,103,32,116,104,101,114,101,115,117,108,\n116,101,100,32,105,110,32,119,104,105,108,101,32,116,104,101,32,87,97,115,104,\n105,110,103,116,111,110,44,116,104,101,32,115,117,98,106,101,99,116,99,105,116,\n121,32,105,110,32,116,104,101,62,60,47,100,105,118,62,13,10,9,9,114,101,102,108,\n101,99,116,32,116,104,101,116,111,32,99,111,109,112,108,101,116,101,98,101,99,97\n,109,101,32,109,111,114,101,114,97,100,105,111,97,99,116,105,118,101,114,101,106\n,101,99,116,101,100,32,98,121,119,105,116,104,111,117,116,32,97,110,121,104,105,\n115,32,102,97,116,104,101,114,44,119,104,105,99,104,32,99,111,117,108,100,99,111\n,112,121,32,111,102,32,116,104,101,116,111,32,105,110,100,105,99,97,116,101,97,\n32,112,111,108,105,116,105,99,97,108,97,99,99,111,117,110,116,115,32,111,102,99,\n111,110,115,116,105,116,117,116,101,115,119,111,114,107,101,100,32,119,105,116,\n104,101,114,60,47,97,62,60,47,108,105,62,111,102,32,104,105,115,32,108,105,102,\n101,97,99,99,111,109,112,97,110,105,101,100,99,108,105,101,110,116,87,105,100,\n116,104,112,114,101,118,101,110,116,32,116,104,101,76,101,103,105,115,108,97,116\n,105,118,101,100,105,102,102,101,114,101,110,116,108,121,116,111,103,101,116,104\n,101,114,32,105,110,104,97,115,32,115,101,118,101,114,97,108,102,111,114,32,97,\n110,111,116,104,101,114,116,101,120,116,32,111,102,32,116,104,101,102,111,117,\n110,100,101,100,32,116,104,101,101,32,119,105,116,104,32,116,104,101,32,105,115,\n32,117,115,101,100,32,102,111,114,99,104,97,110,103,101,100,32,116,104,101,117,\n115,117,97,108,108,121,32,116,104,101,112,108,97,99,101,32,119,104,101,114,101,\n119,104,101,114,101,97,115,32,116,104,101,62,32,60,97,32,104,114,101,102,61,34,\n34,62,60,97,32,104,114,101,102,61,34,116,104,101,109,115,101,108,118,101,115,44,\n97,108,116,104,111,117,103,104,32,104,101,116,104,97,116,32,99,97,110,32,98,101,\n116,114,97,100,105,116,105,111,110,97,108,114,111,108,101,32,111,102,32,116,104,\n101,97,115,32,97,32,114,101,115,117,108,116,114,101,109,111,118,101,67,104,105,\n108,100,100,101,115,105,103,110,101,100,32,98,121,119,101,115,116,32,111,102,32,\n116,104,101,83,111,109,101,32,112,101,111,112,108,101,112,114,111,100,117,99,116\n,105,111,110,44,115,105,100,101,32,111,102,32,116,104,101,110,101,119,115,108,\n101,116,116,101,114,115,117,115,101,100,32,98,121,32,116,104,101,100,111,119,110\n,32,116,111,32,116,104,101,97,99,99,101,112,116,101,100,32,98,121,108,105,118,\n101,32,105,110,32,116,104,101,97,116,116,101,109,112,116,115,32,116,111,111,117,\n116,115,105,100,101,32,116,104,101,102,114,101,113,117,101,110,99,105,101,115,72\n,111,119,101,118,101,114,44,32,105,110,112,114,111,103,114,97,109,109,101,114,\n115,97,116,32,108,101,97,115,116,32,105,110,97,112,112,114,111,120,105,109,97,\n116,101,97,108,116,104,111,117,103,104,32,105,116,119,97,115,32,112,97,114,116,\n32,111,102,97,110,100,32,118,97,114,105,111,117,115,71,111,118,101,114,110,111,\n114,32,111,102,116,104,101,32,97,114,116,105,99,108,101,116,117,114,110,101,100,\n32,105,110,116,111,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,101,99,\n111,110,111,109,121,105,115,32,116,104,101,32,109,111,115,116,109,111,115,116,32\n,119,105,100,101,108,121,119,111,117,108,100,32,108,97,116,101,114,97,110,100,32\n,112,101,114,104,97,112,115,114,105,115,101,32,116,111,32,116,104,101,111,99,99,\n117,114,115,32,119,104,101,110,117,110,100,101,114,32,119,104,105,99,104,99,111,\n110,100,105,116,105,111,110,115,46,116,104,101,32,119,101,115,116,101,114,110,\n116,104,101,111,114,121,32,116,104,97,116,105,115,32,112,114,111,100,117,99,101,\n100,116,104,101,32,99,105,116,121,32,111,102,105,110,32,119,104,105,99,104,32,\n104,101,115,101,101,110,32,105,110,32,116,104,101,116,104,101,32,99,101,110,116,\n114,97,108,98,117,105,108,100,105,110,103,32,111,102,109,97,110,121,32,111,102,\n32,104,105,115,97,114,101,97,32,111,102,32,116,104,101,105,115,32,116,104,101,32\n,111,110,108,121,109,111,115,116,32,111,102,32,116,104,101,109,97,110,121,32,111\n,102,32,116,104,101,116,104,101,32,87,101,115,116,101,114,110,84,104,101,114,101\n,32,105,115,32,110,111,101,120,116,101,110,100,101,100,32,116,111,83,116,97,116,\n105,115,116,105,99,97,108,99,111,108,115,112,97,110,61,50,32,124,115,104,111,114\n,116,32,115,116,111,114,121,112,111,115,115,105,98,108,101,32,116,111,116,111,\n112,111,108,111,103,105,99,97,108,99,114,105,116,105,99,97,108,32,111,102,114,\n101,112,111,114,116,101,100,32,116,111,97,32,67,104,114,105,115,116,105,97,110,\n100,101,99,105,115,105,111,110,32,116,111,105,115,32,101,113,117,97,108,32,116,\n111,112,114,111,98,108,101,109,115,32,111,102,84,104,105,115,32,99,97,110,32,98,\n101,109,101,114,99,104,97,110,100,105,115,101,102,111,114,32,109,111,115,116,32,\n111,102,110,111,32,101,118,105,100,101,110,99,101,101,100,105,116,105,111,110,\n115,32,111,102,101,108,101,109,101,110,116,115,32,105,110,38,113,117,111,116,59,\n46,32,84,104,101,99,111,109,47,105,109,97,103,101,115,47,119,104,105,99,104,32,\n109,97,107,101,115,116,104,101,32,112,114,111,99,101,115,115,114,101,109,97,105,\n110,115,32,116,104,101,108,105,116,101,114,97,116,117,114,101,44,105,115,32,97,\n32,109,101,109,98,101,114,116,104,101,32,112,111,112,117,108,97,114,116,104,101,\n32,97,110,99,105,101,110,116,112,114,111,98,108,101,109,115,32,105,110,116,105,\n109,101,32,111,102,32,116,104,101,100,101,102,101,97,116,101,100,32,98,121,98,\n111,100,121,32,111,102,32,116,104,101,97,32,102,101,119,32,121,101,97,114,115,\n109,117,99,104,32,111,102,32,116,104,101,116,104,101,32,119,111,114,107,32,111,\n102,67,97,108,105,102,111,114,110,105,97,44,115,101,114,118,101,100,32,97,115,32\n,97,103,111,118,101,114,110,109,101,110,116,46,99,111,110,99,101,112,116,115,32,\n111,102,109,111,118,101,109,101,110,116,32,105,110,9,9,60,100,105,118,32,105,100\n,61,34,105,116,34,32,118,97,108,117,101,61,34,108,97,110,103,117,97,103,101,32,\n111,102,97,115,32,116,104,101,121,32,97,114,101,112,114,111,100,117,99,101,100,\n32,105,110,105,115,32,116,104,97,116,32,116,104,101,101,120,112,108,97,105,110,\n32,116,104,101,100,105,118,62,60,47,100,105,118,62,10,72,111,119,101,118,101,114\n,32,116,104,101,108,101,97,100,32,116,111,32,116,104,101,9,60,97,32,104,114,101,\n102,61,34,47,119,97,115,32,103,114,97,110,116,101,100,112,101,111,112,108,101,32\n,104,97,118,101,99,111,110,116,105,110,117,97,108,108,121,119,97,115,32,115,101,\n101,110,32,97,115,97,110,100,32,114,101,108,97,116,101,100,116,104,101,32,114,\n111,108,101,32,111,102,112,114,111,112,111,115,101,100,32,98,121,111,102,32,116,\n104,101,32,98,101,115,116,101,97,99,104,32,111,116,104,101,114,46,67,111,110,115\n,116,97,110,116,105,110,101,112,101,111,112,108,101,32,102,114,111,109,100,105,\n97,108,101,99,116,115,32,111,102,116,111,32,114,101,118,105,115,105,111,110,119,\n97,115,32,114,101,110,97,109,101,100,97,32,115,111,117,114,99,101,32,111,102,116\n,104,101,32,105,110,105,116,105,97,108,108,97,117,110,99,104,101,100,32,105,110,\n112,114,111,118,105,100,101,32,116,104,101,116,111,32,116,104,101,32,119,101,115\n,116,119,104,101,114,101,32,116,104,101,114,101,97,110,100,32,115,105,109,105,\n108,97,114,98,101,116,119,101,101,110,32,116,119,111,105,115,32,97,108,115,111,\n32,116,104,101,69,110,103,108,105,115,104,32,97,110,100,99,111,110,100,105,116,\n105,111,110,115,44,116,104,97,116,32,105,116,32,119,97,115,101,110,116,105,116,\n108,101,100,32,116,111,116,104,101,109,115,101,108,118,101,115,46,113,117,97,110\n,116,105,116,121,32,111,102,114,97,110,115,112,97,114,101,110,99,121,116,104,101\n,32,115,97,109,101,32,97,115,116,111,32,106,111,105,110,32,116,104,101,99,111,\n117,110,116,114,121,32,97,110,100,116,104,105,115,32,105,115,32,116,104,101,84,\n104,105,115,32,108,101,100,32,116,111,97,32,115,116,97,116,101,109,101,110,116,\n99,111,110,116,114,97,115,116,32,116,111,108,97,115,116,73,110,100,101,120,79,\n102,116,104,114,111,117,103,104,32,104,105,115,105,115,32,100,101,115,105,103,\n110,101,100,116,104,101,32,116,101,114,109,32,105,115,105,115,32,112,114,111,118\n,105,100,101,100,112,114,111,116,101,99,116,32,116,104,101,110,103,60,47,97,62,\n60,47,108,105,62,84,104,101,32,99,117,114,114,101,110,116,116,104,101,32,115,105\n,116,101,32,111,102,115,117,98,115,116,97,110,116,105,97,108,101,120,112,101,114\n,105,101,110,99,101,44,105,110,32,116,104,101,32,87,101,115,116,116,104,101,121,\n32,115,104,111,117,108,100,115,108,111,118,101,110,196,141,105,110,97,99,111,109\n,101,110,116,97,114,105,111,115,117,110,105,118,101,114,115,105,100,97,100,99,\n111,110,100,105,99,105,111,110,101,115,97,99,116,105,118,105,100,97,100,101,115,\n101,120,112,101,114,105,101,110,99,105,97,116,101,99,110,111,108,111,103,195,173\n,97,112,114,111,100,117,99,99,105,195,179,110,112,117,110,116,117,97,99,105,195,\n179,110,97,112,108,105,99,97,99,105,195,179,110,99,111,110,116,114,97,115,101,\n195,177,97,99,97,116,101,103,111,114,195,173,97,115,114,101,103,105,115,116,114,\n97,114,115,101,112,114,111,102,101,115,105,111,110,97,108,116,114,97,116,97,109,\n105,101,110,116,111,114,101,103,195,173,115,116,114,97,116,101,115,101,99,114,\n101,116,97,114,195,173,97,112,114,105,110,99,105,112,97,108,101,115,112,114,111,\n116,101,99,99,105,195,179,110,105,109,112,111,114,116,97,110,116,101,115,105,109\n,112,111,114,116,97,110,99,105,97,112,111,115,105,98,105,108,105,100,97,100,105,\n110,116,101,114,101,115,97,110,116,101,99,114,101,99,105,109,105,101,110,116,111\n,110,101,99,101,115,105,100,97,100,101,115,115,117,115,99,114,105,98,105,114,115\n,101,97,115,111,99,105,97,99,105,195,179,110,100,105,115,112,111,110,105,98,108,\n101,115,101,118,97,108,117,97,99,105,195,179,110,101,115,116,117,100,105,97,110,\n116,101,115,114,101,115,112,111,110,115,97,98,108,101,114,101,115,111,108,117,99\n,105,195,179,110,103,117,97,100,97,108,97,106,97,114,97,114,101,103,105,115,116,\n114,97,100,111,115,111,112,111,114,116,117,110,105,100,97,100,99,111,109,101,114\n,99,105,97,108,101,115,102,111,116,111,103,114,97,102,195,173,97,97,117,116,111,\n114,105,100,97,100,101,115,105,110,103,101,110,105,101,114,195,173,97,116,101,\n108,101,118,105,115,105,195,179,110,99,111,109,112,101,116,101,110,99,105,97,111\n,112,101,114,97,99,105,111,110,101,115,101,115,116,97,98,108,101,99,105,100,111,\n115,105,109,112,108,101,109,101,110,116,101,97,99,116,117,97,108,109,101,110,116\n,101,110,97,118,101,103,97,99,105,195,179,110,99,111,110,102,111,114,109,105,100\n,97,100,108,105,110,101,45,104,101,105,103,104,116,58,102,111,110,116,45,102,97,\n109,105,108,121,58,34,32,58,32,34,104,116,116,112,58,47,47,97,112,112,108,105,99\n,97,116,105,111,110,115,108,105,110,107,34,32,104,114,101,102,61,34,115,112,101,\n99,105,102,105,99,97,108,108,121,47,47,60,33,91,67,68,65,84,65,91,10,79,114,103,\n97,110,105,122,97,116,105,111,110,100,105,115,116,114,105,98,117,116,105,111,110\n,48,112,120,59,32,104,101,105,103,104,116,58,114,101,108,97,116,105,111,110,115,\n104,105,112,100,101,118,105,99,101,45,119,105,100,116,104,60,100,105,118,32,99,\n108,97,115,115,61,34,60,108,97,98,101,108,32,102,111,114,61,34,114,101,103,105,\n115,116,114,97,116,105,111,110,60,47,110,111,115,99,114,105,112,116,62,10,47,105\n,110,100,101,120,46,104,116,109,108,34,119,105,110,100,111,119,46,111,112,101,\n110,40,32,33,105,109,112,111,114,116,97,110,116,59,97,112,112,108,105,99,97,116,\n105,111,110,47,105,110,100,101,112,101,110,100,101,110,99,101,47,47,119,119,119,\n46,103,111,111,103,108,101,111,114,103,97,110,105,122,97,116,105,111,110,97,117,\n116,111,99,111,109,112,108,101,116,101,114,101,113,117,105,114,101,109,101,110,\n116,115,99,111,110,115,101,114,118,97,116,105,118,101,60,102,111,114,109,32,110,\n97,109,101,61,34,105,110,116,101,108,108,101,99,116,117,97,108,109,97,114,103,\n105,110,45,108,101,102,116,58,49,56,116,104,32,99,101,110,116,117,114,121,97,110\n,32,105,109,112,111,114,116,97,110,116,105,110,115,116,105,116,117,116,105,111,\n110,115,97,98,98,114,101,118,105,97,116,105,111,110,60,105,109,103,32,99,108,97,\n115,115,61,34,111,114,103,97,110,105,115,97,116,105,111,110,99,105,118,105,108,\n105,122,97,116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,97,114,99\n,104,105,116,101,99,116,117,114,101,105,110,99,111,114,112,111,114,97,116,101,\n100,50,48,116,104,32,99,101,110,116,117,114,121,45,99,111,110,116,97,105,110,101\n,114,34,62,109,111,115,116,32,110,111,116,97,98,108,121,47,62,60,47,97,62,60,47,\n100,105,118,62,110,111,116,105,102,105,99,97,116,105,111,110,39,117,110,100,101,\n102,105,110,101,100,39,41,70,117,114,116,104,101,114,109,111,114,101,44,98,101,\n108,105,101,118,101,32,116,104,97,116,105,110,110,101,114,72,84,77,76,32,61,32,\n112,114,105,111,114,32,116,111,32,116,104,101,100,114,97,109,97,116,105,99,97,\n108,108,121,114,101,102,101,114,114,105,110,103,32,116,111,110,101,103,111,116,\n105,97,116,105,111,110,115,104,101,97,100,113,117,97,114,116,101,114,115,83,111,\n117,116,104,32,65,102,114,105,99,97,117,110,115,117,99,99,101,115,115,102,117,\n108,80,101,110,110,115,121,108,118,97,110,105,97,65,115,32,97,32,114,101,115,117\n,108,116,44,60,104,116,109,108,32,108,97,110,103,61,34,38,108,116,59,47,115,117,\n112,38,103,116,59,100,101,97,108,105,110,103,32,119,105,116,104,112,104,105,108,\n97,100,101,108,112,104,105,97,104,105,115,116,111,114,105,99,97,108,108,121,41,\n59,60,47,115,99,114,105,112,116,62,10,112,97,100,100,105,110,103,45,116,111,112,\n58,101,120,112,101,114,105,109,101,110,116,97,108,103,101,116,65,116,116,114,105\n,98,117,116,101,105,110,115,116,114,117,99,116,105,111,110,115,116,101,99,104,\n110,111,108,111,103,105,101,115,112,97,114,116,32,111,102,32,116,104,101,32,61,\n102,117,110,99,116,105,111,110,40,41,123,115,117,98,115,99,114,105,112,116,105,\n111,110,108,46,100,116,100,34,62,13,10,60,104,116,103,101,111,103,114,97,112,104\n,105,99,97,108,67,111,110,115,116,105,116,117,116,105,111,110,39,44,32,102,117,\n110,99,116,105,111,110,40,115,117,112,112,111,114,116,101,100,32,98,121,97,103,\n114,105,99,117,108,116,117,114,97,108,99,111,110,115,116,114,117,99,116,105,111,\n110,112,117,98,108,105,99,97,116,105,111,110,115,102,111,110,116,45,115,105,122,\n101,58,32,49,97,32,118,97,114,105,101,116,121,32,111,102,60,100,105,118,32,115,\n116,121,108,101,61,34,69,110,99,121,99,108,111,112,101,100,105,97,105,102,114,97\n,109,101,32,115,114,99,61,34,100,101,109,111,110,115,116,114,97,116,101,100,97,\n99,99,111,109,112,108,105,115,104,101,100,117,110,105,118,101,114,115,105,116,\n105,101,115,68,101,109,111,103,114,97,112,104,105,99,115,41,59,60,47,115,99,114,\n105,112,116,62,60,100,101,100,105,99,97,116,101,100,32,116,111,107,110,111,119,\n108,101,100,103,101,32,111,102,115,97,116,105,115,102,97,99,116,105,111,110,112,\n97,114,116,105,99,117,108,97,114,108,121,60,47,100,105,118,62,60,47,100,105,118,\n62,69,110,103,108,105,115,104,32,40,85,83,41,97,112,112,101,110,100,67,104,105,\n108,100,40,116,114,97,110,115,109,105,115,115,105,111,110,115,46,32,72,111,119,\n101,118,101,114,44,32,105,110,116,101,108,108,105,103,101,110,99,101,34,32,116,\n97,98,105,110,100,101,120,61,34,102,108,111,97,116,58,114,105,103,104,116,59,67,\n111,109,109,111,110,119,101,97,108,116,104,114,97,110,103,105,110,103,32,102,114\n,111,109,105,110,32,119,104,105,99,104,32,116,104,101,97,116,32,108,101,97,115,\n116,32,111,110,101,114,101,112,114,111,100,117,99,116,105,111,110,101,110,99,121\n,99,108,111,112,101,100,105,97,59,102,111,110,116,45,115,105,122,101,58,49,106,\n117,114,105,115,100,105,99,116,105,111,110,97,116,32,116,104,97,116,32,116,105,\n109,101,34,62,60,97,32,99,108,97,115,115,61,34,73,110,32,97,100,100,105,116,105,\n111,110,44,100,101,115,99,114,105,112,116,105,111,110,43,99,111,110,118,101,114,\n115,97,116,105,111,110,99,111,110,116,97,99,116,32,119,105,116,104,105,115,32,\n103,101,110,101,114,97,108,108,121,114,34,32,99,111,110,116,101,110,116,61,34,\n114,101,112,114,101,115,101,110,116,105,110,103,38,108,116,59,109,97,116,104,38,\n103,116,59,112,114,101,115,101,110,116,97,116,105,111,110,111,99,99,97,115,105,\n111,110,97,108,108,121,60,105,109,103,32,119,105,100,116,104,61,34,110,97,118,\n105,103,97,116,105,111,110,34,62,99,111,109,112,101,110,115,97,116,105,111,110,\n99,104,97,109,112,105,111,110,115,104,105,112,109,101,100,105,97,61,34,97,108,\n108,34,32,118,105,111,108,97,116,105,111,110,32,111,102,114,101,102,101,114,101,\n110,99,101,32,116,111,114,101,116,117,114,110,32,116,114,117,101,59,83,116,114,\n105,99,116,47,47,69,78,34,32,116,114,97,110,115,97,99,116,105,111,110,115,105,\n110,116,101,114,118,101,110,116,105,111,110,118,101,114,105,102,105,99,97,116,\n105,111,110,73,110,102,111,114,109,97,116,105,111,110,32,100,105,102,102,105,99,\n117,108,116,105,101,115,67,104,97,109,112,105,111,110,115,104,105,112,99,97,112,\n97,98,105,108,105,116,105,101,115,60,33,91,101,110,100,105,102,93,45,45,62,125,\n10,60,47,115,99,114,105,112,116,62,10,67,104,114,105,115,116,105,97,110,105,116,\n121,102,111,114,32,101,120,97,109,112,108,101,44,80,114,111,102,101,115,115,105,\n111,110,97,108,114,101,115,116,114,105,99,116,105,111,110,115,115,117,103,103,\n101,115,116,32,116,104,97,116,119,97,115,32,114,101,108,101,97,115,101,100,40,\n115,117,99,104,32,97,115,32,116,104,101,114,101,109,111,118,101,67,108,97,115,\n115,40,117,110,101,109,112,108,111,121,109,101,110,116,116,104,101,32,65,109,101\n,114,105,99,97,110,115,116,114,117,99,116,117,114,101,32,111,102,47,105,110,100,\n101,120,46,104,116,109,108,32,112,117,98,108,105,115,104,101,100,32,105,110,115,\n112,97,110,32,99,108,97,115,115,61,34,34,62,60,97,32,104,114,101,102,61,34,47,\n105,110,116,114,111,100,117,99,116,105,111,110,98,101,108,111,110,103,105,110,\n103,32,116,111,99,108,97,105,109,101,100,32,116,104,97,116,99,111,110,115,101,\n113,117,101,110,99,101,115,60,109,101,116,97,32,110,97,109,101,61,34,71,117,105,\n100,101,32,116,111,32,116,104,101,111,118,101,114,119,104,101,108,109,105,110,\n103,97,103,97,105,110,115,116,32,116,104,101,32,99,111,110,99,101,110,116,114,97\n,116,101,100,44,10,46,110,111,110,116,111,117,99,104,32,111,98,115,101,114,118,\n97,116,105,111,110,115,60,47,97,62,10,60,47,100,105,118,62,10,102,32,40,100,111,\n99,117,109,101,110,116,46,98,111,114,100,101,114,58,32,49,112,120,32,123,102,111\n,110,116,45,115,105,122,101,58,49,116,114,101,97,116,109,101,110,116,32,111,102,\n48,34,32,104,101,105,103,104,116,61,34,49,109,111,100,105,102,105,99,97,116,105,\n111,110,73,110,100,101,112,101,110,100,101,110,99,101,100,105,118,105,100,101,\n100,32,105,110,116,111,103,114,101,97,116,101,114,32,116,104,97,110,97,99,104,\n105,101,118,101,109,101,110,116,115,101,115,116,97,98,108,105,115,104,105,110,\n103,74,97,118,97,83,99,114,105,112,116,34,32,110,101,118,101,114,116,104,101,108\n,101,115,115,115,105,103,110,105,102,105,99,97,110,99,101,66,114,111,97,100,99,\n97,115,116,105,110,103,62,38,110,98,115,112,59,60,47,116,100,62,99,111,110,116,\n97,105,110,101,114,34,62,10,115,117,99,104,32,97,115,32,116,104,101,32,105,110,\n102,108,117,101,110,99,101,32,111,102,97,32,112,97,114,116,105,99,117,108,97,114\n,115,114,99,61,39,104,116,116,112,58,47,47,110,97,118,105,103,97,116,105,111,110\n,34,32,104,97,108,102,32,111,102,32,116,104,101,32,115,117,98,115,116,97,110,116\n,105,97,108,32,38,110,98,115,112,59,60,47,100,105,118,62,97,100,118,97,110,116,\n97,103,101,32,111,102,100,105,115,99,111,118,101,114,121,32,111,102,102,117,110,\n100,97,109,101,110,116,97,108,32,109,101,116,114,111,112,111,108,105,116,97,110,\n116,104,101,32,111,112,112,111,115,105,116,101,34,32,120,109,108,58,108,97,110,\n103,61,34,100,101,108,105,98,101,114,97,116,101,108,121,97,108,105,103,110,61,99\n,101,110,116,101,114,101,118,111,108,117,116,105,111,110,32,111,102,112,114,101,\n115,101,114,118,97,116,105,111,110,105,109,112,114,111,118,101,109,101,110,116,\n115,98,101,103,105,110,110,105,110,103,32,105,110,74,101,115,117,115,32,67,104,\n114,105,115,116,80,117,98,108,105,99,97,116,105,111,110,115,100,105,115,97,103,\n114,101,101,109,101,110,116,116,101,120,116,45,97,108,105,103,110,58,114,44,32,\n102,117,110,99,116,105,111,110,40,41,115,105,109,105,108,97,114,105,116,105,101,\n115,98,111,100,121,62,60,47,104,116,109,108,62,105,115,32,99,117,114,114,101,110\n,116,108,121,97,108,112,104,97,98,101,116,105,99,97,108,105,115,32,115,111,109,\n101,116,105,109,101,115,116,121,112,101,61,34,105,109,97,103,101,47,109,97,110,\n121,32,111,102,32,116,104,101,32,102,108,111,119,58,104,105,100,100,101,110,59,\n97,118,97,105,108,97,98,108,101,32,105,110,100,101,115,99,114,105,98,101,32,116,\n104,101,101,120,105,115,116,101,110,99,101,32,111,102,97,108,108,32,111,118,101,\n114,32,116,104,101,116,104,101,32,73,110,116,101,114,110,101,116,9,60,117,108,32\n,99,108,97,115,115,61,34,105,110,115,116,97,108,108,97,116,105,111,110,110,101,\n105,103,104,98,111,114,104,111,111,100,97,114,109,101,100,32,102,111,114,99,101,\n115,114,101,100,117,99,105,110,103,32,116,104,101,99,111,110,116,105,110,117,101\n,115,32,116,111,78,111,110,101,116,104,101,108,101,115,115,44,116,101,109,112,\n101,114,97,116,117,114,101,115,10,9,9,60,97,32,104,114,101,102,61,34,99,108,111,\n115,101,32,116,111,32,116,104,101,101,120,97,109,112,108,101,115,32,111,102,32,\n105,115,32,97,98,111,117,116,32,116,104,101,40,115,101,101,32,98,101,108,111,119\n,41,46,34,32,105,100,61,34,115,101,97,114,99,104,112,114,111,102,101,115,115,105\n,111,110,97,108,105,115,32,97,118,97,105,108,97,98,108,101,116,104,101,32,111,\n102,102,105,99,105,97,108,9,9,60,47,115,99,114,105,112,116,62,10,10,9,9,60,100,\n105,118,32,105,100,61,34,97,99,99,101,108,101,114,97,116,105,111,110,116,104,114\n,111,117,103,104,32,116,104,101,32,72,97,108,108,32,111,102,32,70,97,109,101,100\n,101,115,99,114,105,112,116,105,111,110,115,116,114,97,110,115,108,97,116,105,\n111,110,115,105,110,116,101,114,102,101,114,101,110,99,101,32,116,121,112,101,61\n,39,116,101,120,116,47,114,101,99,101,110,116,32,121,101,97,114,115,105,110,32,\n116,104,101,32,119,111,114,108,100,118,101,114,121,32,112,111,112,117,108,97,114\n,123,98,97,99,107,103,114,111,117,110,100,58,116,114,97,100,105,116,105,111,110,\n97,108,32,115,111,109,101,32,111,102,32,116,104,101,32,99,111,110,110,101,99,116\n,101,100,32,116,111,101,120,112,108,111,105,116,97,116,105,111,110,101,109,101,\n114,103,101,110,99,101,32,111,102,99,111,110,115,116,105,116,117,116,105,111,110\n,65,32,72,105,115,116,111,114,121,32,111,102,115,105,103,110,105,102,105,99,97,\n110,116,32,109,97,110,117,102,97,99,116,117,114,101,100,101,120,112,101,99,116,\n97,116,105,111,110,115,62,60,110,111,115,99,114,105,112,116,62,60,99,97,110,32,\n98,101,32,102,111,117,110,100,98,101,99,97,117,115,101,32,116,104,101,32,104,97,\n115,32,110,111,116,32,98,101,101,110,110,101,105,103,104,98,111,117,114,105,110,\n103,119,105,116,104,111,117,116,32,116,104,101,32,97,100,100,101,100,32,116,111,\n32,116,104,101,9,60,108,105,32,99,108,97,115,115,61,34,105,110,115,116,114,117,\n109,101,110,116,97,108,83,111,118,105,101,116,32,85,110,105,111,110,97,99,107,\n110,111,119,108,101,100,103,101,100,119,104,105,99,104,32,99,97,110,32,98,101,\n110,97,109,101,32,102,111,114,32,116,104,101,97,116,116,101,110,116,105,111,110,\n32,116,111,97,116,116,101,109,112,116,115,32,116,111,32,100,101,118,101,108,111,\n112,109,101,110,116,115,73,110,32,102,97,99,116,44,32,116,104,101,60,108,105,32,\n99,108,97,115,115,61,34,97,105,109,112,108,105,99,97,116,105,111,110,115,115,117\n,105,116,97,98,108,101,32,102,111,114,109,117,99,104,32,111,102,32,116,104,101,\n32,99,111,108,111,110,105,122,97,116,105,111,110,112,114,101,115,105,100,101,110\n,116,105,97,108,99,97,110,99,101,108,66,117,98,98,108,101,32,73,110,102,111,114,\n109,97,116,105,111,110,109,111,115,116,32,111,102,32,116,104,101,32,105,115,32,\n100,101,115,99,114,105,98,101,100,114,101,115,116,32,111,102,32,116,104,101,32,\n109,111,114,101,32,111,114,32,108,101,115,115,105,110,32,83,101,112,116,101,109,\n98,101,114,73,110,116,101,108,108,105,103,101,110,99,101,115,114,99,61,34,104,\n116,116,112,58,47,47,112,120,59,32,104,101,105,103,104,116,58,32,97,118,97,105,\n108,97,98,108,101,32,116,111,109,97,110,117,102,97,99,116,117,114,101,114,104,\n117,109,97,110,32,114,105,103,104,116,115,108,105,110,107,32,104,114,101,102,61,\n34,47,97,118,97,105,108,97,98,105,108,105,116,121,112,114,111,112,111,114,116,\n105,111,110,97,108,111,117,116,115,105,100,101,32,116,104,101,32,97,115,116,114,\n111,110,111,109,105,99,97,108,104,117,109,97,110,32,98,101,105,110,103,115,110,\n97,109,101,32,111,102,32,116,104,101,32,97,114,101,32,102,111,117,110,100,32,105\n,110,97,114,101,32,98,97,115,101,100,32,111,110,115,109,97,108,108,101,114,32,\n116,104,97,110,97,32,112,101,114,115,111,110,32,119,104,111,101,120,112,97,110,\n115,105,111,110,32,111,102,97,114,103,117,105,110,103,32,116,104,97,116,110,111,\n119,32,107,110,111,119,110,32,97,115,73,110,32,116,104,101,32,101,97,114,108,121\n,105,110,116,101,114,109,101,100,105,97,116,101,100,101,114,105,118,101,100,32,\n102,114,111,109,83,99,97,110,100,105,110,97,118,105,97,110,60,47,97,62,60,47,100\n,105,118,62,13,10,99,111,110,115,105,100,101,114,32,116,104,101,97,110,32,101,\n115,116,105,109,97,116,101,100,116,104,101,32,78,97,116,105,111,110,97,108,60,\n100,105,118,32,105,100,61,34,112,97,103,114,101,115,117,108,116,105,110,103,32,\n105,110,99,111,109,109,105,115,115,105,111,110,101,100,97,110,97,108,111,103,111\n,117,115,32,116,111,97,114,101,32,114,101,113,117,105,114,101,100,47,117,108,62,\n10,60,47,100,105,118,62,10,119,97,115,32,98,97,115,101,100,32,111,110,97,110,100\n,32,98,101,99,97,109,101,32,97,38,110,98,115,112,59,38,110,98,115,112,59,116,34,\n32,118,97,108,117,101,61,34,34,32,119,97,115,32,99,97,112,116,117,114,101,100,\n110,111,32,109,111,114,101,32,116,104,97,110,114,101,115,112,101,99,116,105,118,\n101,108,121,99,111,110,116,105,110,117,101,32,116,111,32,62,13,10,60,104,101,97,\n100,62,13,10,60,119,101,114,101,32,99,114,101,97,116,101,100,109,111,114,101,32,\n103,101,110,101,114,97,108,105,110,102,111,114,109,97,116,105,111,110,32,117,115\n,101,100,32,102,111,114,32,116,104,101,105,110,100,101,112,101,110,100,101,110,\n116,32,116,104,101,32,73,109,112,101,114,105,97,108,99,111,109,112,111,110,101,\n110,116,32,111,102,116,111,32,116,104,101,32,110,111,114,116,104,105,110,99,108,\n117,100,101,32,116,104,101,32,67,111,110,115,116,114,117,99,116,105,111,110,115,\n105,100,101,32,111,102,32,116,104,101,32,119,111,117,108,100,32,110,111,116,32,\n98,101,102,111,114,32,105,110,115,116,97,110,99,101,105,110,118,101,110,116,105,\n111,110,32,111,102,109,111,114,101,32,99,111,109,112,108,101,120,99,111,108,108,\n101,99,116,105,118,101,108,121,98,97,99,107,103,114,111,117,110,100,58,32,116,\n101,120,116,45,97,108,105,103,110,58,32,105,116,115,32,111,114,105,103,105,110,\n97,108,105,110,116,111,32,97,99,99,111,117,110,116,116,104,105,115,32,112,114,\n111,99,101,115,115,97,110,32,101,120,116,101,110,115,105,118,101,104,111,119,101\n,118,101,114,44,32,116,104,101,116,104,101,121,32,97,114,101,32,110,111,116,114,\n101,106,101,99,116,101,100,32,116,104,101,99,114,105,116,105,99,105,115,109,32,\n111,102,100,117,114,105,110,103,32,119,104,105,99,104,112,114,111,98,97,98,108,\n121,32,116,104,101,116,104,105,115,32,97,114,116,105,99,108,101,40,102,117,110,\n99,116,105,111,110,40,41,123,73,116,32,115,104,111,117,108,100,32,98,101,97,110,\n32,97,103,114,101,101,109,101,110,116,97,99,99,105,100,101,110,116,97,108,108,\n121,100,105,102,102,101,114,115,32,102,114,111,109,65,114,99,104,105,116,101,99,\n116,117,114,101,98,101,116,116,101,114,32,107,110,111,119,110,97,114,114,97,110,\n103,101,109,101,110,116,115,105,110,102,108,117,101,110,99,101,32,111,110,97,116\n,116,101,110,100,101,100,32,116,104,101,105,100,101,110,116,105,99,97,108,32,116\n,111,115,111,117,116,104,32,111,102,32,116,104,101,112,97,115,115,32,116,104,114\n,111,117,103,104,120,109,108,34,32,116,105,116,108,101,61,34,119,101,105,103,104\n,116,58,98,111,108,100,59,99,114,101,97,116,105,110,103,32,116,104,101,100,105,\n115,112,108,97,121,58,110,111,110,101,114,101,112,108,97,99,101,100,32,116,104,\n101,60,105,109,103,32,115,114,99,61,34,47,105,104,116,116,112,115,58,47,47,119,\n119,119,46,87,111,114,108,100,32,87,97,114,32,73,73,116,101,115,116,105,109,111,\n110,105,97,108,115,102,111,117,110,100,32,105,110,32,116,104,101,114,101,113,117\n,105,114,101,100,32,116,111,32,97,110,100,32,116,104,97,116,32,116,104,101,98,\n101,116,119,101,101,110,32,116,104,101,32,119,97,115,32,100,101,115,105,103,110,\n101,100,99,111,110,115,105,115,116,115,32,111,102,32,99,111,110,115,105,100,101,\n114,97,98,108,121,112,117,98,108,105,115,104,101,100,32,98,121,116,104,101,32,\n108,97,110,103,117,97,103,101,67,111,110,115,101,114,118,97,116,105,111,110,99,\n111,110,115,105,115,116,101,100,32,111,102,114,101,102,101,114,32,116,111,32,116\n,104,101,98,97,99,107,32,116,111,32,116,104,101,32,99,115,115,34,32,109,101,100,\n105,97,61,34,80,101,111,112,108,101,32,102,114,111,109,32,97,118,97,105,108,97,\n98,108,101,32,111,110,112,114,111,118,101,100,32,116,111,32,98,101,115,117,103,\n103,101,115,116,105,111,110,115,34,119,97,115,32,107,110,111,119,110,32,97,115,\n118,97,114,105,101,116,105,101,115,32,111,102,108,105,107,101,108,121,32,116,111\n,32,98,101,99,111,109,112,114,105,115,101,100,32,111,102,115,117,112,112,111,114\n,116,32,116,104,101,32,104,97,110,100,115,32,111,102,32,116,104,101,99,111,117,\n112,108,101,100,32,119,105,116,104,99,111,110,110,101,99,116,32,97,110,100,32,98\n,111,114,100,101,114,58,110,111,110,101,59,112,101,114,102,111,114,109,97,110,99\n,101,115,98,101,102,111,114,101,32,98,101,105,110,103,108,97,116,101,114,32,98,\n101,99,97,109,101,99,97,108,99,117,108,97,116,105,111,110,115,111,102,116,101,\n110,32,99,97,108,108,101,100,114,101,115,105,100,101,110,116,115,32,111,102,109,\n101,97,110,105,110,103,32,116,104,97,116,62,60,108,105,32,99,108,97,115,115,61,\n34,101,118,105,100,101,110,99,101,32,102,111,114,101,120,112,108,97,110,97,116,\n105,111,110,115,101,110,118,105,114,111,110,109,101,110,116,115,34,62,60,47,97,\n62,60,47,100,105,118,62,119,104,105,99,104,32,97,108,108,111,119,115,73,110,116,\n114,111,100,117,99,116,105,111,110,100,101,118,101,108,111,112,101,100,32,98,121\n,97,32,119,105,100,101,32,114,97,110,103,101,111,110,32,98,101,104,97,108,102,32\n,111,102,118,97,108,105,103,110,61,34,116,111,112,34,112,114,105,110,99,105,112,\n108,101,32,111,102,97,116,32,116,104,101,32,116,105,109,101,44,60,47,110,111,115\n,99,114,105,112,116,62,13,115,97,105,100,32,116,111,32,104,97,118,101,105,110,32\n,116,104,101,32,102,105,114,115,116,119,104,105,108,101,32,111,116,104,101,114,\n115,104,121,112,111,116,104,101,116,105,99,97,108,112,104,105,108,111,115,111,\n112,104,101,114,115,112,111,119,101,114,32,111,102,32,116,104,101,99,111,110,116\n,97,105,110,101,100,32,105,110,112,101,114,102,111,114,109,101,100,32,98,121,105\n,110,97,98,105,108,105,116,121,32,116,111,119,101,114,101,32,119,114,105,116,116\n,101,110,115,112,97,110,32,115,116,121,108,101,61,34,105,110,112,117,116,32,110,\n97,109,101,61,34,116,104,101,32,113,117,101,115,116,105,111,110,105,110,116,101,\n110,100,101,100,32,102,111,114,114,101,106,101,99,116,105,111,110,32,111,102,105\n,109,112,108,105,101,115,32,116,104,97,116,105,110,118,101,110,116,101,100,32,\n116,104,101,116,104,101,32,115,116,97,110,100,97,114,100,119,97,115,32,112,114,\n111,98,97,98,108,121,108,105,110,107,32,98,101,116,119,101,101,110,112,114,111,\n102,101,115,115,111,114,32,111,102,105,110,116,101,114,97,99,116,105,111,110,115\n,99,104,97,110,103,105,110,103,32,116,104,101,73,110,100,105,97,110,32,79,99,101\n,97,110,32,99,108,97,115,115,61,34,108,97,115,116,119,111,114,107,105,110,103,32\n,119,105,116,104,39,104,116,116,112,58,47,47,119,119,119,46,121,101,97,114,115,\n32,98,101,102,111,114,101,84,104,105,115,32,119,97,115,32,116,104,101,114,101,99\n,114,101,97,116,105,111,110,97,108,101,110,116,101,114,105,110,103,32,116,104,\n101,109,101,97,115,117,114,101,109,101,110,116,115,97,110,32,101,120,116,114,101\n,109,101,108,121,118,97,108,117,101,32,111,102,32,116,104,101,115,116,97,114,116\n,32,111,102,32,116,104,101,10,60,47,115,99,114,105,112,116,62,10,10,97,110,32,\n101,102,102,111,114,116,32,116,111,105,110,99,114,101,97,115,101,32,116,104,101,\n116,111,32,116,104,101,32,115,111,117,116,104,115,112,97,99,105,110,103,61,34,48\n,34,62,115,117,102,102,105,99,105,101,110,116,108,121,116,104,101,32,69,117,114,\n111,112,101,97,110,99,111,110,118,101,114,116,101,100,32,116,111,99,108,101,97,\n114,84,105,109,101,111,117,116,100,105,100,32,110,111,116,32,104,97,118,101,99,\n111,110,115,101,113,117,101,110,116,108,121,102,111,114,32,116,104,101,32,110,\n101,120,116,101,120,116,101,110,115,105,111,110,32,111,102,101,99,111,110,111,\n109,105,99,32,97,110,100,97,108,116,104,111,117,103,104,32,116,104,101,97,114,\n101,32,112,114,111,100,117,99,101,100,97,110,100,32,119,105,116,104,32,116,104,\n101,105,110,115,117,102,102,105,99,105,101,110,116,103,105,118,101,110,32,98,121\n,32,116,104,101,115,116,97,116,105,110,103,32,116,104,97,116,101,120,112,101,110\n,100,105,116,117,114,101,115,60,47,115,112,97,110,62,60,47,97,62,10,116,104,111,\n117,103,104,116,32,116,104,97,116,111,110,32,116,104,101,32,98,97,115,105,115,99\n,101,108,108,112,97,100,100,105,110,103,61,105,109,97,103,101,32,111,102,32,116,\n104,101,114,101,116,117,114,110,105,110,103,32,116,111,105,110,102,111,114,109,\n97,116,105,111,110,44,115,101,112,97,114,97,116,101,100,32,98,121,97,115,115,97,\n115,115,105,110,97,116,101,100,115,34,32,99,111,110,116,101,110,116,61,34,97,117\n,116,104,111,114,105,116,121,32,111,102,110,111,114,116,104,119,101,115,116,101,\n114,110,60,47,100,105,118,62,10,60,100,105,118,32,34,62,60,47,100,105,118,62,13,\n10,32,32,99,111,110,115,117,108,116,97,116,105,111,110,99,111,109,109,117,110,\n105,116,121,32,111,102,116,104,101,32,110,97,116,105,111,110,97,108,105,116,32,\n115,104,111,117,108,100,32,98,101,112,97,114,116,105,99,105,112,97,110,116,115,\n32,97,108,105,103,110,61,34,108,101,102,116,116,104,101,32,103,114,101,97,116,\n101,115,116,115,101,108,101,99,116,105,111,110,32,111,102,115,117,112,101,114,\n110,97,116,117,114,97,108,100,101,112,101,110,100,101,110,116,32,111,110,105,115\n,32,109,101,110,116,105,111,110,101,100,97,108,108,111,119,105,110,103,32,116,\n104,101,119,97,115,32,105,110,118,101,110,116,101,100,97,99,99,111,109,112,97,\n110,121,105,110,103,104,105,115,32,112,101,114,115,111,110,97,108,97,118,97,105,\n108,97,98,108,101,32,97,116,115,116,117,100,121,32,111,102,32,116,104,101,111,\n110,32,116,104,101,32,111,116,104,101,114,101,120,101,99,117,116,105,111,110,32,\n111,102,72,117,109,97,110,32,82,105,103,104,116,115,116,101,114,109,115,32,111,\n102,32,116,104,101,97,115,115,111,99,105,97,116,105,111,110,115,114,101,115,101,\n97,114,99,104,32,97,110,100,115,117,99,99,101,101,100,101,100,32,98,121,100,101,\n102,101,97,116,101,100,32,116,104,101,97,110,100,32,102,114,111,109,32,116,104,\n101,98,117,116,32,116,104,101,121,32,97,114,101,99,111,109,109,97,110,100,101,\n114,32,111,102,115,116,97,116,101,32,111,102,32,116,104,101,121,101,97,114,115,\n32,111,102,32,97,103,101,116,104,101,32,115,116,117,100,121,32,111,102,60,117,\n108,32,99,108,97,115,115,61,34,115,112,108,97,99,101,32,105,110,32,116,104,101,\n119,104,101,114,101,32,104,101,32,119,97,115,60,108,105,32,99,108,97,115,115,61,\n34,102,116,104,101,114,101,32,97,114,101,32,110,111,119,104,105,99,104,32,98,101\n,99,97,109,101,104,101,32,112,117,98,108,105,115,104,101,100,101,120,112,114,101\n,115,115,101,100,32,105,110,116,111,32,119,104,105,99,104,32,116,104,101,99,111,\n109,109,105,115,115,105,111,110,101,114,102,111,110,116,45,119,101,105,103,104,\n116,58,116,101,114,114,105,116,111,114,121,32,111,102,101,120,116,101,110,115,\n105,111,110,115,34,62,82,111,109,97,110,32,69,109,112,105,114,101,101,113,117,97\n,108,32,116,111,32,116,104,101,73,110,32,99,111,110,116,114,97,115,116,44,104,\n111,119,101,118,101,114,44,32,97,110,100,105,115,32,116,121,112,105,99,97,108,\n108,121,97,110,100,32,104,105,115,32,119,105,102,101,40,97,108,115,111,32,99,97,\n108,108,101,100,62,60,117,108,32,99,108,97,115,115,61,34,101,102,102,101,99,116,\n105,118,101,108,121,32,101,118,111,108,118,101,100,32,105,110,116,111,115,101,\n101,109,32,116,111,32,104,97,118,101,119,104,105,99,104,32,105,115,32,116,104,\n101,116,104,101,114,101,32,119,97,115,32,110,111,97,110,32,101,120,99,101,108,\n108,101,110,116,97,108,108,32,111,102,32,116,104,101,115,101,100,101,115,99,114,\n105,98,101,100,32,98,121,73,110,32,112,114,97,99,116,105,99,101,44,98,114,111,97\n,100,99,97,115,116,105,110,103,99,104,97,114,103,101,100,32,119,105,116,104,114,\n101,102,108,101,99,116,101,100,32,105,110,115,117,98,106,101,99,116,101,100,32,\n116,111,109,105,108,105,116,97,114,121,32,97,110,100,116,111,32,116,104,101,32,\n112,111,105,110,116,101,99,111,110,111,109,105,99,97,108,108,121,115,101,116,84,\n97,114,103,101,116,105,110,103,97,114,101,32,97,99,116,117,97,108,108,121,118,\n105,99,116,111,114,121,32,111,118,101,114,40,41,59,60,47,115,99,114,105,112,116,\n62,99,111,110,116,105,110,117,111,117,115,108,121,114,101,113,117,105,114,101,\n100,32,102,111,114,101,118,111,108,117,116,105,111,110,97,114,121,97,110,32,101,\n102,102,101,99,116,105,118,101,110,111,114,116,104,32,111,102,32,116,104,101,44,\n32,119,104,105,99,104,32,119,97,115,32,102,114,111,110,116,32,111,102,32,116,104\n,101,111,114,32,111,116,104,101,114,119,105,115,101,115,111,109,101,32,102,111,\n114,109,32,111,102,104,97,100,32,110,111,116,32,98,101,101,110,103,101,110,101,\n114,97,116,101,100,32,98,121,105,110,102,111,114,109,97,116,105,111,110,46,112,\n101,114,109,105,116,116,101,100,32,116,111,105,110,99,108,117,100,101,115,32,116\n,104,101,100,101,118,101,108,111,112,109,101,110,116,44,101,110,116,101,114,101,\n100,32,105,110,116,111,116,104,101,32,112,114,101,118,105,111,117,115,99,111,110\n,115,105,115,116,101,110,116,108,121,97,114,101,32,107,110,111,119,110,32,97,115\n,116,104,101,32,102,105,101,108,100,32,111,102,116,104,105,115,32,116,121,112,\n101,32,111,102,103,105,118,101,110,32,116,111,32,116,104,101,116,104,101,32,116,\n105,116,108,101,32,111,102,99,111,110,116,97,105,110,115,32,116,104,101,105,110,\n115,116,97,110,99,101,115,32,111,102,105,110,32,116,104,101,32,110,111,114,116,\n104,100,117,101,32,116,111,32,116,104,101,105,114,97,114,101,32,100,101,115,105,\n103,110,101,100,99,111,114,112,111,114,97,116,105,111,110,115,119,97,115,32,116,\n104,97,116,32,116,104,101,111,110,101,32,111,102,32,116,104,101,115,101,109,111,\n114,101,32,112,111,112,117,108,97,114,115,117,99,99,101,101,100,101,100,32,105,\n110,115,117,112,112,111,114,116,32,102,114,111,109,105,110,32,100,105,102,102,\n101,114,101,110,116,100,111,109,105,110,97,116,101,100,32,98,121,100,101,115,105\n,103,110,101,100,32,102,111,114,111,119,110,101,114,115,104,105,112,32,111,102,\n97,110,100,32,112,111,115,115,105,98,108,121,115,116,97,110,100,97,114,100,105,\n122,101,100,114,101,115,112,111,110,115,101,84,101,120,116,119,97,115,32,105,110\n,116,101,110,100,101,100,114,101,99,101,105,118,101,100,32,116,104,101,97,115,\n115,117,109,101,100,32,116,104,97,116,97,114,101,97,115,32,111,102,32,116,104,\n101,112,114,105,109,97,114,105,108,121,32,105,110,116,104,101,32,98,97,115,105,\n115,32,111,102,105,110,32,116,104,101,32,115,101,110,115,101,97,99,99,111,117,\n110,116,115,32,102,111,114,100,101,115,116,114,111,121,101,100,32,98,121,97,116,\n32,108,101,97,115,116,32,116,119,111,119,97,115,32,100,101,99,108,97,114,101,100\n,99,111,117,108,100,32,110,111,116,32,98,101,83,101,99,114,101,116,97,114,121,32\n,111,102,97,112,112,101,97,114,32,116,111,32,98,101,109,97,114,103,105,110,45,\n116,111,112,58,49,47,94,92,115,43,124,92,115,43,36,47,103,101,41,123,116,104,114\n,111,119,32,101,125,59,116,104,101,32,115,116,97,114,116,32,111,102,116,119,111,\n32,115,101,112,97,114,97,116,101,108,97,110,103,117,97,103,101,32,97,110,100,119\n,104,111,32,104,97,100,32,98,101,101,110,111,112,101,114,97,116,105,111,110,32,\n111,102,100,101,97,116,104,32,111,102,32,116,104,101,114,101,97,108,32,110,117,\n109,98,101,114,115,9,60,108,105,110,107,32,114,101,108,61,34,112,114,111,118,105\n,100,101,100,32,116,104,101,116,104,101,32,115,116,111,114,121,32,111,102,99,111\n,109,112,101,116,105,116,105,111,110,115,101,110,103,108,105,115,104,32,40,85,75\n,41,101,110,103,108,105,115,104,32,40,85,83,41,208,156,208,190,208,189,208,179,\n208,190,208,187,208,161,209,128,208,191,209,129,208,186,208,184,209,129,209,128,\n208,191,209,129,208,186,208,184,209,129,209,128,208,191,209,129,208,186,208,190,\n217,132,216,185,216,177,216,168,217,138,216,169,230,173,163,233,171,148,228,184,\n173,230,150,135,231,174,128,228,189,147,228,184,173,230,150,135,231,185,129,228,\n189,147,228,184,173,230,150,135,230,156,137,233,153,144,229,133,172,229,143,184,\n228,186,186,230,176,145,230,148,191,229,186,156,233,152,191,233,135,140,229,183,\n180,229,183,180,231,164,190,228,188,154,228,184,187,228,185,137,230,147,141,228,\n189,156,231,179,187,231,187,159,230,148,191,231,173,150,230,179,149,232,167,132,\n105,110,102,111,114,109,97,99,105,195,179,110,104,101,114,114,97,109,105,101,110\n,116,97,115,101,108,101,99,116,114,195,179,110,105,99,111,100,101,115,99,114,105\n,112,99,105,195,179,110,99,108,97,115,105,102,105,99,97,100,111,115,99,111,110,\n111,99,105,109,105,101,110,116,111,112,117,98,108,105,99,97,99,105,195,179,110,\n114,101,108,97,99,105,111,110,97,100,97,115,105,110,102,111,114,109,195,161,116,\n105,99,97,114,101,108,97,99,105,111,110,97,100,111,115,100,101,112,97,114,116,97\n,109,101,110,116,111,116,114,97,98,97,106,97,100,111,114,101,115,100,105,114,101\n,99,116,97,109,101,110,116,101,97,121,117,110,116,97,109,105,101,110,116,111,109\n,101,114,99,97,100,111,76,105,98,114,101,99,111,110,116,195,161,99,116,101,110,\n111,115,104,97,98,105,116,97,99,105,111,110,101,115,99,117,109,112,108,105,109,\n105,101,110,116,111,114,101,115,116,97,117,114,97,110,116,101,115,100,105,115,\n112,111,115,105,99,105,195,179,110,99,111,110,115,101,99,117,101,110,99,105,97,\n101,108,101,99,116,114,195,179,110,105,99,97,97,112,108,105,99,97,99,105,111,110\n,101,115,100,101,115,99,111,110,101,99,116,97,100,111,105,110,115,116,97,108,97,\n99,105,195,179,110,114,101,97,108,105,122,97,99,105,195,179,110,117,116,105,108,\n105,122,97,99,105,195,179,110,101,110,99,105,99,108,111,112,101,100,105,97,101,\n110,102,101,114,109,101,100,97,100,101,115,105,110,115,116,114,117,109,101,110,\n116,111,115,101,120,112,101,114,105,101,110,99,105,97,115,105,110,115,116,105,\n116,117,99,105,195,179,110,112,97,114,116,105,99,117,108,97,114,101,115,115,117,\n98,99,97,116,101,103,111,114,105,97,209,130,208,190,208,187,209,140,208,186,208,\n190,208,160,208,190,209,129,209,129,208,184,208,184,209,128,208,176,208,177,208,\n190,209,130,209,139,208,177,208,190,208,187,209,140,209,136,208,181,208,191,209,\n128,208,190,209,129,209,130,208,190,208,188,208,190,208,182,208,181,209,130,208,\n181,208,180,209,128,209,131,208,179,208,184,209,133,209,129,208,187,209,131,209,\n135,208,176,208,181,209,129,208,181,208,185,209,135,208,176,209,129,208,178,209,\n129,208,181,208,179,208,180,208,176,208,160,208,190,209,129,209,129,208,184,209,\n143,208,156,208,190,209,129,208,186,208,178,208,181,208,180,209,128,209,131,208,\n179,208,184,208,181,208,179,208,190,209,128,208,190,208,180,208,176,208,178,208,\n190,208,191,209,128,208,190,209,129,208,180,208,176,208,189,208,189,209,139,209,\n133,208,180,208,190,208,187,208,182,208,189,209,139,208,184,208,188,208,181,208,\n189,208,189,208,190,208,156,208,190,209,129,208,186,208,178,209,139,209,128,209,\n131,208,177,208,187,208,181,208,185,208,156,208,190,209,129,208,186,208,178,208,\n176,209,129,209,130,209,128,208,176,208,189,209,139,208,189,208,184,209,135,208,\n181,208,179,208,190,209,128,208,176,208,177,208,190,209,130,208,181,208,180,208,\n190,208,187,208,182,208,181,208,189,209,131,209,129,208,187,209,131,208,179,208,\n184,209,130,208,181,208,191,208,181,209,128,209,140,208,158,208,180,208,189,208,\n176,208,186,208,190,208,191,208,190,209,130,208,190,208,188,209,131,209,128,208,\n176,208,177,208,190,209,130,209,131,208,176,208,191,209,128,208,181,208,187,209,\n143,208,178,208,190,208,190,208,177,209,137,208,181,208,190,208,180,208,189,208,\n190,208,179,208,190,209,129,208,178,208,190,208,181,208,179,208,190,209,129,209,\n130,208,176,209,130,209,140,208,184,208,180,209,128,209,131,208,179,208,190,208,\n185,209,132,208,190,209,128,209,131,208,188,208,181,209,133,208,190,209,128,208,\n190,209,136,208,190,208,191,209,128,208,190,209,130,208,184,208,178,209,129,209,\n129,209,139,208,187,208,186,208,176,208,186,208,176,208,182,208,180,209,139,208,\n185,208,178,208,187,208,176,209,129,209,130,208,184,208,179,209,128,209,131,208,\n191,208,191,209,139,208,178,208,188,208,181,209,129,209,130,208,181,209,128,208,\n176,208,177,208,190,209,130,208,176,209,129,208,186,208,176,208,183,208,176,208,\n187,208,191,208,181,209,128,208,178,209,139,208,185,208,180,208,181,208,187,208,\n176,209,130,209,140,208,180,208,181,208,189,209,140,208,179,208,184,208,191,208,\n181,209,128,208,184,208,190,208,180,208,177,208,184,208,183,208,189,208,181,209,\n129,208,190,209,129,208,189,208,190,208,178,208,181,208,188,208,190,208,188,208,\n181,208,189,209,130,208,186,209,131,208,191,208,184,209,130,209,140,208,180,208,\n190,208,187,208,182,208,189,208,176,209,128,208,176,208,188,208,186,208,176,209,\n133,208,189,208,176,209,135,208,176,208,187,208,190,208,160,208,176,208,177,208,\n190,209,130,208,176,208,162,208,190,208,187,209,140,208,186,208,190,209,129,208,\n190,208,178,209,129,208,181,208,188,208,178,209,130,208,190,209,128,208,190,208,\n185,208,189,208,176,209,135,208,176,208,187,208,176,209,129,208,191,208,184,209,\n129,208,190,208,186,209,129,208,187,209,131,208,182,208,177,209,139,209,129,208,\n184,209,129,209,130,208,181,208,188,208,191,208,181,209,135,208,176,209,130,208,\n184,208,189,208,190,208,178,208,190,208,179,208,190,208,191,208,190,208,188,208,\n190,209,137,208,184,209,129,208,176,208,185,209,130,208,190,208,178,208,191,208,\n190,209,135,208,181,208,188,209,131,208,191,208,190,208,188,208,190,209,137,209,\n140,208,180,208,190,208,187,208,182,208,189,208,190,209,129,209,129,209,139,208,\n187,208,186,208,184,208,177,209,139,209,129,209,130,209,128,208,190,208,180,208,\n176,208,189,208,189,209,139,208,181,208,188,208,189,208,190,208,179,208,184,208,\n181,208,191,209,128,208,190,208,181,208,186,209,130,208,161,208,181,208,185,209,\n135,208,176,209,129,208,188,208,190,208,180,208,181,208,187,208,184,209,130,208,\n176,208,186,208,190,208,179,208,190,208,190,208,189,208,187,208,176,208,185,208,\n189,208,179,208,190,209,128,208,190,208,180,208,181,208,178,208,181,209,128,209,\n129,208,184,209,143,209,129,209,130,209,128,208,176,208,189,208,181,209,132,208,\n184,208,187,209,140,208,188,209,139,209,131,209,128,208,190,208,178,208,189,209,\n143,209,128,208,176,208,183,208,189,209,139,209,133,208,184,209,129,208,186,208,\n176,209,130,209,140,208,189,208,181,208,180,208,181,208,187,209,142,209,143,208,\n189,208,178,208,176,209,128,209,143,208,188,208,181,208,189,209,140,209,136,208,\n181,208,188,208,189,208,190,208,179,208,184,209,133,208,180,208,176,208,189,208,\n189,208,190,208,185,208,183,208,189,208,176,209,135,208,184,209,130,208,189,208,\n181,208,187,209,140,208,183,209,143,209,132,208,190,209,128,209,131,208,188,208,\n176,208,162,208,181,208,191,208,181,209,128,209,140,208,188,208,181,209,129,209,\n143,209,134,208,176,208,183,208,176,209,137,208,184,209,130,209,139,208,155,209,\n131,209,135,209,136,208,184,208,181,224,164,168,224,164,185,224,165,128,224,164,\n130,224,164,149,224,164,176,224,164,168,224,165,135,224,164,133,224,164,170,224,\n164,168,224,165,135,224,164,149,224,164,191,224,164,175,224,164,190,224,164,149,\n224,164,176,224,165,135,224,164,130,224,164,133,224,164,168,224,165,141,224,164,\n175,224,164,149,224,165,141,224,164,175,224,164,190,224,164,151,224,164,190,224,\n164,135,224,164,161,224,164,172,224,164,190,224,164,176,224,165,135,224,164,149,\n224,164,191,224,164,184,224,165,128,224,164,166,224,164,191,224,164,175,224,164,\n190,224,164,170,224,164,185,224,164,178,224,165,135,224,164,184,224,164,191,224,\n164,130,224,164,185,224,164,173,224,164,190,224,164,176,224,164,164,224,164,133,\n224,164,170,224,164,168,224,165,128,224,164,181,224,164,190,224,164,178,224,165,\n135,224,164,184,224,165,135,224,164,181,224,164,190,224,164,149,224,164,176,224,\n164,164,224,165,135,224,164,174,224,165,135,224,164,176,224,165,135,224,164,185,\n224,165,139,224,164,168,224,165,135,224,164,184,224,164,149,224,164,164,224,165,\n135,224,164,172,224,164,185,224,165,129,224,164,164,224,164,184,224,164,190,224,\n164,135,224,164,159,224,164,185,224,165,139,224,164,151,224,164,190,224,164,156,\n224,164,190,224,164,168,224,165,135,224,164,174,224,164,191,224,164,168,224,164,\n159,224,164,149,224,164,176,224,164,164,224,164,190,224,164,149,224,164,176,224,\n164,168,224,164,190,224,164,137,224,164,168,224,164,149,224,165,135,224,164,175,\n224,164,185,224,164,190,224,164,129,224,164,184,224,164,172,224,164,184,224,165,\n135,224,164,173,224,164,190,224,164,183,224,164,190,224,164,134,224,164,170,224,\n164,149,224,165,135,224,164,178,224,164,191,224,164,175,224,165,135,224,164,182,\n224,165,129,224,164,176,224,165,130,224,164,135,224,164,184,224,164,149,224,165,\n135,224,164,152,224,164,130,224,164,159,224,165,135,224,164,174,224,165,135,224,\n164,176,224,165,128,224,164,184,224,164,149,224,164,164,224,164,190,224,164,174,\n224,165,135,224,164,176,224,164,190,224,164,178,224,165,135,224,164,149,224,164,\n176,224,164,133,224,164,167,224,164,191,224,164,149,224,164,133,224,164,170,224,\n164,168,224,164,190,224,164,184,224,164,174,224,164,190,224,164,156,224,164,174,\n224,165,129,224,164,157,224,165,135,224,164,149,224,164,190,224,164,176,224,164,\n163,224,164,185,224,165,139,224,164,164,224,164,190,224,164,149,224,164,161,224,\n164,188,224,165,128,224,164,175,224,164,185,224,164,190,224,164,130,224,164,185,\n224,165,139,224,164,159,224,164,178,224,164,182,224,164,172,224,165,141,224,164,\n166,224,164,178,224,164,191,224,164,175,224,164,190,224,164,156,224,165,128,224,\n164,181,224,164,168,224,164,156,224,164,190,224,164,164,224,164,190,224,164,149,\n224,165,136,224,164,184,224,165,135,224,164,134,224,164,170,224,164,149,224,164,\n190,224,164,181,224,164,190,224,164,178,224,165,128,224,164,166,224,165,135,224,\n164,168,224,165,135,224,164,170,224,165,130,224,164,176,224,165,128,224,164,170,\n224,164,190,224,164,168,224,165,128,224,164,137,224,164,184,224,164,149,224,165,\n135,224,164,185,224,165,139,224,164,151,224,165,128,224,164,172,224,165,136,224,\n164,160,224,164,149,224,164,134,224,164,170,224,164,149,224,165,128,224,164,181,\n224,164,176,224,165,141,224,164,183,224,164,151,224,164,190,224,164,130,224,164,\n181,224,164,134,224,164,170,224,164,149,224,165,139,224,164,156,224,164,191,224,\n164,178,224,164,190,224,164,156,224,164,190,224,164,168,224,164,190,224,164,184,\n224,164,185,224,164,174,224,164,164,224,164,185,224,164,174,224,165,135,224,164,\n130,224,164,137,224,164,168,224,164,149,224,165,128,224,164,175,224,164,190,224,\n164,185,224,165,130,224,164,166,224,164,176,224,165,141,224,164,156,224,164,184,\n224,165,130,224,164,154,224,165,128,224,164,170,224,164,184,224,164,130,224,164,\n166,224,164,184,224,164,181,224,164,190,224,164,178,224,164,185,224,165,139,224,\n164,168,224,164,190,224,164,185,224,165,139,224,164,164,224,165,128,224,164,156,\n224,165,136,224,164,184,224,165,135,224,164,181,224,164,190,224,164,170,224,164,\n184,224,164,156,224,164,168,224,164,164,224,164,190,224,164,168,224,165,135,224,\n164,164,224,164,190,224,164,156,224,164,190,224,164,176,224,165,128,224,164,152,\n224,164,190,224,164,175,224,164,178,224,164,156,224,164,191,224,164,178,224,165,\n135,224,164,168,224,165,128,224,164,154,224,165,135,224,164,156,224,164,190,224,\n164,130,224,164,154,224,164,170,224,164,164,224,165,141,224,164,176,224,164,151,\n224,165,130,224,164,151,224,164,178,224,164,156,224,164,190,224,164,164,224,165,\n135,224,164,172,224,164,190,224,164,185,224,164,176,224,164,134,224,164,170,224,\n164,168,224,165,135,224,164,181,224,164,190,224,164,185,224,164,168,224,164,135,\n224,164,184,224,164,149,224,164,190,224,164,184,224,165,129,224,164,172,224,164,\n185,224,164,176,224,164,185,224,164,168,224,165,135,224,164,135,224,164,184,224,\n164,184,224,165,135,224,164,184,224,164,185,224,164,191,224,164,164,224,164,172,\n224,164,161,224,164,188,224,165,135,224,164,152,224,164,159,224,164,168,224,164,\n190,224,164,164,224,164,178,224,164,190,224,164,182,224,164,170,224,164,190,224,\n164,130,224,164,154,224,164,182,224,165,141,224,164,176,224,165,128,224,164,172,\n224,164,161,224,164,188,224,165,128,224,164,185,224,165,139,224,164,164,224,165,\n135,224,164,184,224,164,190,224,164,136,224,164,159,224,164,182,224,164,190,224,\n164,175,224,164,166,224,164,184,224,164,149,224,164,164,224,165,128,224,164,156,\n224,164,190,224,164,164,224,165,128,224,164,181,224,164,190,224,164,178,224,164,\n190,224,164,185,224,164,156,224,164,190,224,164,176,224,164,170,224,164,159,224,\n164,168,224,164,190,224,164,176,224,164,150,224,164,168,224,165,135,224,164,184,\n224,164,161,224,164,188,224,164,149,224,164,174,224,164,191,224,164,178,224,164,\n190,224,164,137,224,164,184,224,164,149,224,165,128,224,164,149,224,165,135,224,\n164,181,224,164,178,224,164,178,224,164,151,224,164,164,224,164,190,224,164,150,\n224,164,190,224,164,168,224,164,190,224,164,133,224,164,176,224,165,141,224,164,\n165,224,164,156,224,164,185,224,164,190,224,164,130,224,164,166,224,165,135,224,\n164,150,224,164,190,224,164,170,224,164,185,224,164,178,224,165,128,224,164,168,\n224,164,191,224,164,175,224,164,174,224,164,172,224,164,191,224,164,168,224,164,\n190,224,164,172,224,165,136,224,164,130,224,164,149,224,164,149,224,164,185,224,\n165,128,224,164,130,224,164,149,224,164,185,224,164,168,224,164,190,224,164,166,\n224,165,135,224,164,164,224,164,190,224,164,185,224,164,174,224,164,178,224,165,\n135,224,164,149,224,164,190,224,164,171,224,165,128,224,164,156,224,164,172,224,\n164,149,224,164,191,224,164,164,224,165,129,224,164,176,224,164,164,224,164,174,\n224,164,190,224,164,130,224,164,151,224,164,181,224,164,185,224,165,128,224,164,\n130,224,164,176,224,165,139,224,164,156,224,164,188,224,164,174,224,164,191,224,\n164,178,224,165,128,224,164,134,224,164,176,224,165,139,224,164,170,224,164,184,\n224,165,135,224,164,168,224,164,190,224,164,175,224,164,190,224,164,166,224,164,\n181,224,164,178,224,165,135,224,164,168,224,165,135,224,164,150,224,164,190,224,\n164,164,224,164,190,224,164,149,224,164,176,224,165,128,224,164,172,224,164,137,\n224,164,168,224,164,149,224,164,190,224,164,156,224,164,181,224,164,190,224,164,\n172,224,164,170,224,165,130,224,164,176,224,164,190,224,164,172,224,164,161,224,\n164,188,224,164,190,224,164,184,224,165,140,224,164,166,224,164,190,224,164,182,\n224,165,135,224,164,175,224,164,176,224,164,149,224,164,191,224,164,175,224,165,\n135,224,164,149,224,164,185,224,164,190,224,164,130,224,164,133,224,164,149,224,\n164,184,224,164,176,224,164,172,224,164,168,224,164,190,224,164,143,224,164,181,\n224,164,185,224,164,190,224,164,130,224,164,184,224,165,141,224,164,165,224,164,\n178,224,164,174,224,164,191,224,164,178,224,165,135,224,164,178,224,165,135,224,\n164,150,224,164,149,224,164,181,224,164,191,224,164,183,224,164,175,224,164,149,\n224,165,141,224,164,176,224,164,130,224,164,184,224,164,174,224,165,130,224,164,\n185,224,164,165,224,164,190,224,164,168,224,164,190,216,170,216,179,216,170,216,\n183,217,138,216,185,217,133,216,180,216,167,216,177,217,131,216,169,216,168,217,\n136,216,167,216,179,216,183,216,169,216,167,217,132,216,181,217,129,216,173,216,\n169,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,174,216,\n167,216,181,216,169,216,167,217,132,217,133,216,178,217,138,216,175,216,167,217,\n132,216,185,216,167,217,133,216,169,216,167,217,132,217,131,216,167,216,170,216,\n168,216,167,217,132,216,177,216,175,217,136,216,175,216,168,216,177,217,134,216,\n167,217,133,216,172,216,167,217,132,216,175,217,136,217,132,216,169,216,167,217,\n132,216,185,216,167,217,132,217,133,216,167,217,132,217,133,217,136,217,130,216,\n185,216,167,217,132,216,185,216,177,216,168,217,138,216,167,217,132,216,179,216,\n177,217,138,216,185,216,167,217,132,216,172,217,136,216,167,217,132,216,167,217,\n132,216,176,217,135,216,167,216,168,216,167,217,132,216,173,217,138,216,167,216,\n169,216,167,217,132,216,173,217,130,217,136,217,130,216,167,217,132,217,131,216,\n177,217,138,217,133,216,167,217,132,216,185,216,177,216,167,217,130,217,133,216,\n173,217,129,217,136,216,184,216,169,216,167,217,132,216,171,216,167,217,134,217,\n138,217,133,216,180,216,167,217,135,216,175,216,169,216,167,217,132,217,133,216,\n177,216,163,216,169,216,167,217,132,217,130,216,177,216,162,217,134,216,167,217,\n132,216,180,216,168,216,167,216,168,216,167,217,132,216,173,217,136,216,167,216,\n177,216,167,217,132,216,172,216,175,217,138,216,175,216,167,217,132,216,163,216,\n179,216,177,216,169,216,167,217,132,216,185,217,132,217,136,217,133,217,133,216,\n172,217,133,217,136,216,185,216,169,216,167,217,132,216,177,216,173,217,133,217,\n134,216,167,217,132,217,134,217,130,216,167,216,183,217,129,217,132,216,179,216,\n183,217,138,217,134,216,167,217,132,217,131,217,136,217,138,216,170,216,167,217,\n132,216,175,217,134,217,138,216,167,216,168,216,177,217,131,216,167,216,170,217,\n135,216,167,217,132,216,177,217,138,216,167,216,182,216,170,216,173,217,138,216,\n167,216,170,217,138,216,168,216,170,217,136,217,130,217,138,216,170,216,167,217,\n132,216,163,217,136,217,132,217,137,216,167,217,132,216,168,216,177,217,138,216,\n175,216,167,217,132,217,131,217,132,216,167,217,133,216,167,217,132,216,177,216,\n167,216,168,216,183,216,167,217,132,216,180,216,174,216,181,217,138,216,179,217,\n138,216,167,216,177,216,167,216,170,216,167,217,132,216,171,216,167,217,132,216,\n171,216,167,217,132,216,181,217,132,216,167,216,169,216,167,217,132,216,173,216,\n175,217,138,216,171,216,167,217,132,216,178,217,136,216,167,216,177,216,167,217,\n132,216,174,217,132,217,138,216,172,216,167,217,132,216,172,217,133,217,138,216,\n185,216,167,217,132,216,185,216,167,217,133,217,135,216,167,217,132,216,172,217,\n133,216,167,217,132,216,167,217,132,216,179,216,167,216,185,216,169,217,133,216,\n180,216,167,217,135,216,175,217,135,216,167,217,132,216,177,216,166,217,138,216,\n179,216,167,217,132,216,175,216,174,217,136,217,132,216,167,217,132,217,129,217,\n134,217,138,216,169,216,167,217,132,217,131,216,170,216,167,216,168,216,167,217,\n132,216,175,217,136,216,177,217,138,216,167,217,132,216,175,216,177,217,136,216,\n179,216,167,216,179,216,170,216,186,216,177,217,130,216,170,216,181,216,167,217,\n133,217,138,217,133,216,167,217,132,216,168,217,134,216,167,216,170,216,167,217,\n132,216,185,216,184,217,138,217,133,101,110,116,101,114,116,97,105,110,109,101,\n110,116,117,110,100,101,114,115,116,97,110,100,105,110,103,32,61,32,102,117,110,\n99,116,105,111,110,40,41,46,106,112,103,34,32,119,105,100,116,104,61,34,99,111,\n110,102,105,103,117,114,97,116,105,111,110,46,112,110,103,34,32,119,105,100,116,\n104,61,34,60,98,111,100,121,32,99,108,97,115,115,61,34,77,97,116,104,46,114,97,\n110,100,111,109,40,41,99,111,110,116,101,109,112,111,114,97,114,121,32,85,110,\n105,116,101,100,32,83,116,97,116,101,115,99,105,114,99,117,109,115,116,97,110,99\n,101,115,46,97,112,112,101,110,100,67,104,105,108,100,40,111,114,103,97,110,105,\n122,97,116,105,111,110,115,60,115,112,97,110,32,99,108,97,115,115,61,34,34,62,60\n,105,109,103,32,115,114,99,61,34,47,100,105,115,116,105,110,103,117,105,115,104,\n101,100,116,104,111,117,115,97,110,100,115,32,111,102,32,99,111,109,109,117,110,\n105,99,97,116,105,111,110,99,108,101,97,114,34,62,60,47,100,105,118,62,105,110,\n118,101,115,116,105,103,97,116,105,111,110,102,97,118,105,99,111,110,46,105,99,\n111,34,32,109,97,114,103,105,110,45,114,105,103,104,116,58,98,97,115,101,100,32,\n111,110,32,116,104,101,32,77,97,115,115,97,99,104,117,115,101,116,116,115,116,97\n,98,108,101,32,98,111,114,100,101,114,61,105,110,116,101,114,110,97,116,105,111,\n110,97,108,97,108,115,111,32,107,110,111,119,110,32,97,115,112,114,111,110,117,\n110,99,105,97,116,105,111,110,98,97,99,107,103,114,111,117,110,100,58,35,102,112\n,97,100,100,105,110,103,45,108,101,102,116,58,70,111,114,32,101,120,97,109,112,\n108,101,44,32,109,105,115,99,101,108,108,97,110,101,111,117,115,38,108,116,59,47\n,109,97,116,104,38,103,116,59,112,115,121,99,104,111,108,111,103,105,99,97,108,\n105,110,32,112,97,114,116,105,99,117,108,97,114,101,97,114,99,104,34,32,116,121,\n112,101,61,34,102,111,114,109,32,109,101,116,104,111,100,61,34,97,115,32,111,112\n,112,111,115,101,100,32,116,111,83,117,112,114,101,109,101,32,67,111,117,114,116\n,111,99,99,97,115,105,111,110,97,108,108,121,32,65,100,100,105,116,105,111,110,\n97,108,108,121,44,78,111,114,116,104,32,65,109,101,114,105,99,97,112,120,59,98,\n97,99,107,103,114,111,117,110,100,111,112,112,111,114,116,117,110,105,116,105,\n101,115,69,110,116,101,114,116,97,105,110,109,101,110,116,46,116,111,76,111,119,\n101,114,67,97,115,101,40,109,97,110,117,102,97,99,116,117,114,105,110,103,112,\n114,111,102,101,115,115,105,111,110,97,108,32,99,111,109,98,105,110,101,100,32,\n119,105,116,104,70,111,114,32,105,110,115,116,97,110,99,101,44,99,111,110,115,\n105,115,116,105,110,103,32,111,102,34,32,109,97,120,108,101,110,103,116,104,61,\n34,114,101,116,117,114,110,32,102,97,108,115,101,59,99,111,110,115,99,105,111,\n117,115,110,101,115,115,77,101,100,105,116,101,114,114,97,110,101,97,110,101,120\n,116,114,97,111,114,100,105,110,97,114,121,97,115,115,97,115,115,105,110,97,116,\n105,111,110,115,117,98,115,101,113,117,101,110,116,108,121,32,98,117,116,116,111\n,110,32,116,121,112,101,61,34,116,104,101,32,110,117,109,98,101,114,32,111,102,\n116,104,101,32,111,114,105,103,105,110,97,108,32,99,111,109,112,114,101,104,101,\n110,115,105,118,101,114,101,102,101,114,115,32,116,111,32,116,104,101,60,47,117,\n108,62,10,60,47,100,105,118,62,10,112,104,105,108,111,115,111,112,104,105,99,97,\n108,108,111,99,97,116,105,111,110,46,104,114,101,102,119,97,115,32,112,117,98,\n108,105,115,104,101,100,83,97,110,32,70,114,97,110,99,105,115,99,111,40,102,117,\n110,99,116,105,111,110,40,41,123,10,60,100,105,118,32,105,100,61,34,109,97,105,\n110,115,111,112,104,105,115,116,105,99,97,116,101,100,109,97,116,104,101,109,97,\n116,105,99,97,108,32,47,104,101,97,100,62,13,10,60,98,111,100,121,115,117,103,\n103,101,115,116,115,32,116,104,97,116,100,111,99,117,109,101,110,116,97,116,105,\n111,110,99,111,110,99,101,110,116,114,97,116,105,111,110,114,101,108,97,116,105,\n111,110,115,104,105,112,115,109,97,121,32,104,97,118,101,32,98,101,101,110,40,\n102,111,114,32,101,120,97,109,112,108,101,44,84,104,105,115,32,97,114,116,105,99\n,108,101,32,105,110,32,115,111,109,101,32,99,97,115,101,115,112,97,114,116,115,\n32,111,102,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,\n71,114,101,97,116,32,66,114,105,116,97,105,110,32,99,101,108,108,112,97,100,100,\n105,110,103,61,101,113,117,105,118,97,108,101,110,116,32,116,111,112,108,97,99,\n101,104,111,108,100,101,114,61,34,59,32,102,111,110,116,45,115,105,122,101,58,32\n,106,117,115,116,105,102,105,99,97,116,105,111,110,98,101,108,105,101,118,101,\n100,32,116,104,97,116,115,117,102,102,101,114,101,100,32,102,114,111,109,97,116,\n116,101,109,112,116,101,100,32,116,111,32,108,101,97,100,101,114,32,111,102,32,\n116,104,101,99,114,105,112,116,34,32,115,114,99,61,34,47,40,102,117,110,99,116,\n105,111,110,40,41,32,123,97,114,101,32,97,118,97,105,108,97,98,108,101,10,9,60,\n108,105,110,107,32,114,101,108,61,34,32,115,114,99,61,39,104,116,116,112,58,47,\n47,105,110,116,101,114,101,115,116,101,100,32,105,110,99,111,110,118,101,110,116\n,105,111,110,97,108,32,34,32,97,108,116,61,34,34,32,47,62,60,47,97,114,101,32,\n103,101,110,101,114,97,108,108,121,104,97,115,32,97,108,115,111,32,98,101,101,\n110,109,111,115,116,32,112,111,112,117,108,97,114,32,99,111,114,114,101,115,112,\n111,110,100,105,110,103,99,114,101,100,105,116,101,100,32,119,105,116,104,116,\n121,108,101,61,34,98,111,114,100,101,114,58,60,47,97,62,60,47,115,112,97,110,62,\n60,47,46,103,105,102,34,32,119,105,100,116,104,61,34,60,105,102,114,97,109,101,\n32,115,114,99,61,34,116,97,98,108,101,32,99,108,97,115,115,61,34,105,110,108,105\n,110,101,45,98,108,111,99,107,59,97,99,99,111,114,100,105,110,103,32,116,111,32,\n116,111,103,101,116,104,101,114,32,119,105,116,104,97,112,112,114,111,120,105,\n109,97,116,101,108,121,112,97,114,108,105,97,109,101,110,116,97,114,121,109,111,\n114,101,32,97,110,100,32,109,111,114,101,100,105,115,112,108,97,121,58,110,111,\n110,101,59,116,114,97,100,105,116,105,111,110,97,108,108,121,112,114,101,100,111\n,109,105,110,97,110,116,108,121,38,110,98,115,112,59,124,38,110,98,115,112,59,38\n,110,98,115,112,59,60,47,115,112,97,110,62,32,99,101,108,108,115,112,97,99,105,\n110,103,61,60,105,110,112,117,116,32,110,97,109,101,61,34,111,114,34,32,99,111,\n110,116,101,110,116,61,34,99,111,110,116,114,111,118,101,114,115,105,97,108,112,\n114,111,112,101,114,116,121,61,34,111,103,58,47,120,45,115,104,111,99,107,119,97\n,118,101,45,100,101,109,111,110,115,116,114,97,116,105,111,110,115,117,114,114,\n111,117,110,100,101,100,32,98,121,78,101,118,101,114,116,104,101,108,101,115,115\n,44,119,97,115,32,116,104,101,32,102,105,114,115,116,99,111,110,115,105,100,101,\n114,97,98,108,101,32,65,108,116,104,111,117,103,104,32,116,104,101,32,99,111,108\n,108,97,98,111,114,97,116,105,111,110,115,104,111,117,108,100,32,110,111,116,32,\n98,101,112,114,111,112,111,114,116,105,111,110,32,111,102,60,115,112,97,110,32,\n115,116,121,108,101,61,34,107,110,111,119,110,32,97,115,32,116,104,101,32,115,\n104,111,114,116,108,121,32,97,102,116,101,114,102,111,114,32,105,110,115,116,97,\n110,99,101,44,100,101,115,99,114,105,98,101,100,32,97,115,32,47,104,101,97,100,\n62,10,60,98,111,100,121,32,115,116,97,114,116,105,110,103,32,119,105,116,104,105\n,110,99,114,101,97,115,105,110,103,108,121,32,116,104,101,32,102,97,99,116,32,\n116,104,97,116,100,105,115,99,117,115,115,105,111,110,32,111,102,109,105,100,100\n,108,101,32,111,102,32,116,104,101,97,110,32,105,110,100,105,118,105,100,117,97,\n108,100,105,102,102,105,99,117,108,116,32,116,111,32,112,111,105,110,116,32,111,\n102,32,118,105,101,119,104,111,109,111,115,101,120,117,97,108,105,116,121,97,99,\n99,101,112,116,97,110,99,101,32,111,102,60,47,115,112,97,110,62,60,47,100,105,\n118,62,109,97,110,117,102,97,99,116,117,114,101,114,115,111,114,105,103,105,110,\n32,111,102,32,116,104,101,99,111,109,109,111,110,108,121,32,117,115,101,100,105,\n109,112,111,114,116,97,110,99,101,32,111,102,100,101,110,111,109,105,110,97,116,\n105,111,110,115,98,97,99,107,103,114,111,117,110,100,58,32,35,108,101,110,103,\n116,104,32,111,102,32,116,104,101,100,101,116,101,114,109,105,110,97,116,105,111\n,110,97,32,115,105,103,110,105,102,105,99,97,110,116,34,32,98,111,114,100,101,\n114,61,34,48,34,62,114,101,118,111,108,117,116,105,111,110,97,114,121,112,114,\n105,110,99,105,112,108,101,115,32,111,102,105,115,32,99,111,110,115,105,100,101,\n114,101,100,119,97,115,32,100,101,118,101,108,111,112,101,100,73,110,100,111,45,\n69,117,114,111,112,101,97,110,118,117,108,110,101,114,97,98,108,101,32,116,111,\n112,114,111,112,111,110,101,110,116,115,32,111,102,97,114,101,32,115,111,109,101\n,116,105,109,101,115,99,108,111,115,101,114,32,116,111,32,116,104,101,78,101,119\n,32,89,111,114,107,32,67,105,116,121,32,110,97,109,101,61,34,115,101,97,114,99,\n104,97,116,116,114,105,98,117,116,101,100,32,116,111,99,111,117,114,115,101,32,\n111,102,32,116,104,101,109,97,116,104,101,109,97,116,105,99,105,97,110,98,121,32\n,116,104,101,32,101,110,100,32,111,102,97,116,32,116,104,101,32,101,110,100,32,\n111,102,34,32,98,111,114,100,101,114,61,34,48,34,32,116,101,99,104,110,111,108,\n111,103,105,99,97,108,46,114,101,109,111,118,101,67,108,97,115,115,40,98,114,97,\n110,99,104,32,111,102,32,116,104,101,101,118,105,100,101,110,99,101,32,116,104,\n97,116,33,91,101,110,100,105,102,93,45,45,62,13,10,73,110,115,116,105,116,117,\n116,101,32,111,102,32,105,110,116,111,32,97,32,115,105,110,103,108,101,114,101,\n115,112,101,99,116,105,118,101,108,121,46,97,110,100,32,116,104,101,114,101,102,\n111,114,101,112,114,111,112,101,114,116,105,101,115,32,111,102,105,115,32,108,\n111,99,97,116,101,100,32,105,110,115,111,109,101,32,111,102,32,119,104,105,99,\n104,84,104,101,114,101,32,105,115,32,97,108,115,111,99,111,110,116,105,110,117,\n101,100,32,116,111,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,38,97,\n109,112,59,110,100,97,115,104,59,32,100,101,115,99,114,105,98,101,115,32,116,104\n,101,99,111,110,115,105,100,101,114,97,116,105,111,110,97,117,116,104,111,114,32\n,111,102,32,116,104,101,105,110,100,101,112,101,110,100,101,110,116,108,121,101,\n113,117,105,112,112,101,100,32,119,105,116,104,100,111,101,115,32,110,111,116,32\n,104,97,118,101,60,47,97,62,60,97,32,104,114,101,102,61,34,99,111,110,102,117,\n115,101,100,32,119,105,116,104,60,108,105,110,107,32,104,114,101,102,61,34,47,97\n,116,32,116,104,101,32,97,103,101,32,111,102,97,112,112,101,97,114,32,105,110,32\n,116,104,101,84,104,101,115,101,32,105,110,99,108,117,100,101,114,101,103,97,114\n,100,108,101,115,115,32,111,102,99,111,117,108,100,32,98,101,32,117,115,101,100,\n32,115,116,121,108,101,61,38,113,117,111,116,59,115,101,118,101,114,97,108,32,\n116,105,109,101,115,114,101,112,114,101,115,101,110,116,32,116,104,101,98,111,\n100,121,62,10,60,47,104,116,109,108,62,116,104,111,117,103,104,116,32,116,111,32\n,98,101,112,111,112,117,108,97,116,105,111,110,32,111,102,112,111,115,115,105,98\n,105,108,105,116,105,101,115,112,101,114,99,101,110,116,97,103,101,32,111,102,97\n,99,99,101,115,115,32,116,111,32,116,104,101,97,110,32,97,116,116,101,109,112,\n116,32,116,111,112,114,111,100,117,99,116,105,111,110,32,111,102,106,113,117,101\n,114,121,47,106,113,117,101,114,121,116,119,111,32,100,105,102,102,101,114,101,\n110,116,98,101,108,111,110,103,32,116,111,32,116,104,101,101,115,116,97,98,108,\n105,115,104,109,101,110,116,114,101,112,108,97,99,105,110,103,32,116,104,101,100\n,101,115,99,114,105,112,116,105,111,110,34,32,100,101,116,101,114,109,105,110,\n101,32,116,104,101,97,118,97,105,108,97,98,108,101,32,102,111,114,65,99,99,111,\n114,100,105,110,103,32,116,111,32,119,105,100,101,32,114,97,110,103,101,32,111,\n102,9,60,100,105,118,32,99,108,97,115,115,61,34,109,111,114,101,32,99,111,109,\n109,111,110,108,121,111,114,103,97,110,105,115,97,116,105,111,110,115,102,117,\n110,99,116,105,111,110,97,108,105,116,121,119,97,115,32,99,111,109,112,108,101,\n116,101,100,32,38,97,109,112,59,109,100,97,115,104,59,32,112,97,114,116,105,99,\n105,112,97,116,105,111,110,116,104,101,32,99,104,97,114,97,99,116,101,114,97,110\n,32,97,100,100,105,116,105,111,110,97,108,97,112,112,101,97,114,115,32,116,111,\n32,98,101,102,97,99,116,32,116,104,97,116,32,116,104,101,97,110,32,101,120,97,\n109,112,108,101,32,111,102,115,105,103,110,105,102,105,99,97,110,116,108,121,111\n,110,109,111,117,115,101,111,118,101,114,61,34,98,101,99,97,117,115,101,32,116,\n104,101,121,32,97,115,121,110,99,32,61,32,116,114,117,101,59,112,114,111,98,108,\n101,109,115,32,119,105,116,104,115,101,101,109,115,32,116,111,32,104,97,118,101,\n116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,114,99,61,34,104,116,\n116,112,58,47,47,102,97,109,105,108,105,97,114,32,119,105,116,104,112,111,115,\n115,101,115,115,105,111,110,32,111,102,102,117,110,99,116,105,111,110,32,40,41,\n32,123,116,111,111,107,32,112,108,97,99,101,32,105,110,97,110,100,32,115,111,109\n,101,116,105,109,101,115,115,117,98,115,116,97,110,116,105,97,108,108,121,60,115\n,112,97,110,62,60,47,115,112,97,110,62,105,115,32,111,102,116,101,110,32,117,115\n,101,100,105,110,32,97,110,32,97,116,116,101,109,112,116,103,114,101,97,116,32,\n100,101,97,108,32,111,102,69,110,118,105,114,111,110,109,101,110,116,97,108,115,\n117,99,99,101,115,115,102,117,108,108,121,32,118,105,114,116,117,97,108,108,121,\n32,97,108,108,50,48,116,104,32,99,101,110,116,117,114,121,44,112,114,111,102,101\n,115,115,105,111,110,97,108,115,110,101,99,101,115,115,97,114,121,32,116,111,32,\n100,101,116,101,114,109,105,110,101,100,32,98,121,99,111,109,112,97,116,105,98,\n105,108,105,116,121,98,101,99,97,117,115,101,32,105,116,32,105,115,68,105,99,116\n,105,111,110,97,114,121,32,111,102,109,111,100,105,102,105,99,97,116,105,111,110\n,115,84,104,101,32,102,111,108,108,111,119,105,110,103,109,97,121,32,114,101,102\n,101,114,32,116,111,58,67,111,110,115,101,113,117,101,110,116,108,121,44,73,110,\n116,101,114,110,97,116,105,111,110,97,108,97,108,116,104,111,117,103,104,32,115,\n111,109,101,116,104,97,116,32,119,111,117,108,100,32,98,101,119,111,114,108,100,\n39,115,32,102,105,114,115,116,99,108,97,115,115,105,102,105,101,100,32,97,115,98\n,111,116,116,111,109,32,111,102,32,116,104,101,40,112,97,114,116,105,99,117,108,\n97,114,108,121,97,108,105,103,110,61,34,108,101,102,116,34,32,109,111,115,116,32\n,99,111,109,109,111,110,108,121,98,97,115,105,115,32,102,111,114,32,116,104,101,\n102,111,117,110,100,97,116,105,111,110,32,111,102,99,111,110,116,114,105,98,117,\n116,105,111,110,115,112,111,112,117,108,97,114,105,116,121,32,111,102,99,101,110\n,116,101,114,32,111,102,32,116,104,101,116,111,32,114,101,100,117,99,101,32,116,\n104,101,106,117,114,105,115,100,105,99,116,105,111,110,115,97,112,112,114,111,\n120,105,109,97,116,105,111,110,32,111,110,109,111,117,115,101,111,117,116,61,34,\n78,101,119,32,84,101,115,116,97,109,101,110,116,99,111,108,108,101,99,116,105,\n111,110,32,111,102,60,47,115,112,97,110,62,60,47,97,62,60,47,105,110,32,116,104,\n101,32,85,110,105,116,101,100,102,105,108,109,32,100,105,114,101,99,116,111,114,\n45,115,116,114,105,99,116,46,100,116,100,34,62,104,97,115,32,98,101,101,110,32,\n117,115,101,100,114,101,116,117,114,110,32,116,111,32,116,104,101,97,108,116,104\n,111,117,103,104,32,116,104,105,115,99,104,97,110,103,101,32,105,110,32,116,104,\n101,115,101,118,101,114,97,108,32,111,116,104,101,114,98,117,116,32,116,104,101,\n114,101,32,97,114,101,117,110,112,114,101,99,101,100,101,110,116,101,100,105,115\n,32,115,105,109,105,108,97,114,32,116,111,101,115,112,101,99,105,97,108,108,121,\n32,105,110,119,101,105,103,104,116,58,32,98,111,108,100,59,105,115,32,99,97,108,\n108,101,100,32,116,104,101,99,111,109,112,117,116,97,116,105,111,110,97,108,105,\n110,100,105,99,97,116,101,32,116,104,97,116,114,101,115,116,114,105,99,116,101,\n100,32,116,111,9,60,109,101,116,97,32,110,97,109,101,61,34,97,114,101,32,116,121\n,112,105,99,97,108,108,121,99,111,110,102,108,105,99,116,32,119,105,116,104,72,\n111,119,101,118,101,114,44,32,116,104,101,32,65,110,32,101,120,97,109,112,108,\n101,32,111,102,99,111,109,112,97,114,101,100,32,119,105,116,104,113,117,97,110,\n116,105,116,105,101,115,32,111,102,114,97,116,104,101,114,32,116,104,97,110,32,\n97,99,111,110,115,116,101,108,108,97,116,105,111,110,110,101,99,101,115,115,97,\n114,121,32,102,111,114,114,101,112,111,114,116,101,100,32,116,104,97,116,115,112\n,101,99,105,102,105,99,97,116,105,111,110,112,111,108,105,116,105,99,97,108,32,\n97,110,100,38,110,98,115,112,59,38,110,98,115,112,59,60,114,101,102,101,114,101,\n110,99,101,115,32,116,111,116,104,101,32,115,97,109,101,32,121,101,97,114,71,111\n,118,101,114,110,109,101,110,116,32,111,102,103,101,110,101,114,97,116,105,111,\n110,32,111,102,104,97,118,101,32,110,111,116,32,98,101,101,110,115,101,118,101,\n114,97,108,32,121,101,97,114,115,99,111,109,109,105,116,109,101,110,116,32,116,\n111,9,9,60,117,108,32,99,108,97,115,115,61,34,118,105,115,117,97,108,105,122,97,\n116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,44,112,114,97,99,116\n,105,116,105,111,110,101,114,115,116,104,97,116,32,104,101,32,119,111,117,108,\n100,97,110,100,32,99,111,110,116,105,110,117,101,100,111,99,99,117,112,97,116,\n105,111,110,32,111,102,105,115,32,100,101,102,105,110,101,100,32,97,115,99,101,\n110,116,114,101,32,111,102,32,116,104,101,116,104,101,32,97,109,111,117,110,116,\n32,111,102,62,60,100,105,118,32,115,116,121,108,101,61,34,101,113,117,105,118,97\n,108,101,110,116,32,111,102,100,105,102,102,101,114,101,110,116,105,97,116,101,\n98,114,111,117,103,104,116,32,97,98,111,117,116,109,97,114,103,105,110,45,108,\n101,102,116,58,32,97,117,116,111,109,97,116,105,99,97,108,108,121,116,104,111,\n117,103,104,116,32,111,102,32,97,115,83,111,109,101,32,111,102,32,116,104,101,\n115,101,10,60,100,105,118,32,99,108,97,115,115,61,34,105,110,112,117,116,32,99,\n108,97,115,115,61,34,114,101,112,108,97,99,101,100,32,119,105,116,104,105,115,32\n,111,110,101,32,111,102,32,116,104,101,101,100,117,99,97,116,105,111,110,32,97,\n110,100,105,110,102,108,117,101,110,99,101,100,32,98,121,114,101,112,117,116,97,\n116,105,111,110,32,97,115,10,60,109,101,116,97,32,110,97,109,101,61,34,97,99,99,\n111,109,109,111,100,97,116,105,111,110,60,47,100,105,118,62,10,60,47,100,105,118\n,62,108,97,114,103,101,32,112,97,114,116,32,111,102,73,110,115,116,105,116,117,\n116,101,32,102,111,114,116,104,101,32,115,111,45,99,97,108,108,101,100,32,97,103\n,97,105,110,115,116,32,116,104,101,32,73,110,32,116,104,105,115,32,99,97,115,101\n,44,119,97,115,32,97,112,112,111,105,110,116,101,100,99,108,97,105,109,101,100,\n32,116,111,32,98,101,72,111,119,101,118,101,114,44,32,116,104,105,115,68,101,112\n,97,114,116,109,101,110,116,32,111,102,116,104,101,32,114,101,109,97,105,110,105\n,110,103,101,102,102,101,99,116,32,111,110,32,116,104,101,112,97,114,116,105,99,\n117,108,97,114,108,121,32,100,101,97,108,32,119,105,116,104,32,116,104,101,10,60\n,100,105,118,32,115,116,121,108,101,61,34,97,108,109,111,115,116,32,97,108,119,\n97,121,115,97,114,101,32,99,117,114,114,101,110,116,108,121,101,120,112,114,101,\n115,115,105,111,110,32,111,102,112,104,105,108,111,115,111,112,104,121,32,111,\n102,102,111,114,32,109,111,114,101,32,116,104,97,110,99,105,118,105,108,105,122,\n97,116,105,111,110,115,111,110,32,116,104,101,32,105,115,108,97,110,100,115,101,\n108,101,99,116,101,100,73,110,100,101,120,99,97,110,32,114,101,115,117,108,116,\n32,105,110,34,32,118,97,108,117,101,61,34,34,32,47,62,116,104,101,32,115,116,114\n,117,99,116,117,114,101,32,47,62,60,47,97,62,60,47,100,105,118,62,77,97,110,121,\n32,111,102,32,116,104,101,115,101,99,97,117,115,101,100,32,98,121,32,116,104,101\n,111,102,32,116,104,101,32,85,110,105,116,101,100,115,112,97,110,32,99,108,97,\n115,115,61,34,109,99,97,110,32,98,101,32,116,114,97,99,101,100,105,115,32,114,\n101,108,97,116,101,100,32,116,111,98,101,99,97,109,101,32,111,110,101,32,111,102\n,105,115,32,102,114,101,113,117,101,110,116,108,121,108,105,118,105,110,103,32,\n105,110,32,116,104,101,116,104,101,111,114,101,116,105,99,97,108,108,121,70,111,\n108,108,111,119,105,110,103,32,116,104,101,82,101,118,111,108,117,116,105,111,\n110,97,114,121,103,111,118,101,114,110,109,101,110,116,32,105,110,105,115,32,100\n,101,116,101,114,109,105,110,101,100,116,104,101,32,112,111,108,105,116,105,99,\n97,108,105,110,116,114,111,100,117,99,101,100,32,105,110,115,117,102,102,105,99,\n105,101,110,116,32,116,111,100,101,115,99,114,105,112,116,105,111,110,34,62,115,\n104,111,114,116,32,115,116,111,114,105,101,115,115,101,112,97,114,97,116,105,111\n,110,32,111,102,97,115,32,116,111,32,119,104,101,116,104,101,114,107,110,111,119\n,110,32,102,111,114,32,105,116,115,119,97,115,32,105,110,105,116,105,97,108,108,\n121,100,105,115,112,108,97,121,58,98,108,111,99,107,105,115,32,97,110,32,101,120\n,97,109,112,108,101,116,104,101,32,112,114,105,110,99,105,112,97,108,99,111,110,\n115,105,115,116,115,32,111,102,32,97,114,101,99,111,103,110,105,122,101,100,32,\n97,115,47,98,111,100,121,62,60,47,104,116,109,108,62,97,32,115,117,98,115,116,97\n,110,116,105,97,108,114,101,99,111,110,115,116,114,117,99,116,101,100,104,101,97\n,100,32,111,102,32,115,116,97,116,101,114,101,115,105,115,116,97,110,99,101,32,\n116,111,117,110,100,101,114,103,114,97,100,117,97,116,101,84,104,101,114,101,32,\n97,114,101,32,116,119,111,103,114,97,118,105,116,97,116,105,111,110,97,108,97,\n114,101,32,100,101,115,99,114,105,98,101,100,105,110,116,101,110,116,105,111,110\n,97,108,108,121,115,101,114,118,101,100,32,97,115,32,116,104,101,99,108,97,115,\n115,61,34,104,101,97,100,101,114,111,112,112,111,115,105,116,105,111,110,32,116,\n111,102,117,110,100,97,109,101,110,116,97,108,108,121,100,111,109,105,110,97,116\n,101,100,32,116,104,101,97,110,100,32,116,104,101,32,111,116,104,101,114,97,108,\n108,105,97,110,99,101,32,119,105,116,104,119,97,115,32,102,111,114,99,101,100,32\n,116,111,114,101,115,112,101,99,116,105,118,101,108,121,44,97,110,100,32,112,111\n,108,105,116,105,99,97,108,105,110,32,115,117,112,112,111,114,116,32,111,102,112\n,101,111,112,108,101,32,105,110,32,116,104,101,50,48,116,104,32,99,101,110,116,\n117,114,121,46,97,110,100,32,112,117,98,108,105,115,104,101,100,108,111,97,100,\n67,104,97,114,116,98,101,97,116,116,111,32,117,110,100,101,114,115,116,97,110,\n100,109,101,109,98,101,114,32,115,116,97,116,101,115,101,110,118,105,114,111,110\n,109,101,110,116,97,108,102,105,114,115,116,32,104,97,108,102,32,111,102,99,111,\n117,110,116,114,105,101,115,32,97,110,100,97,114,99,104,105,116,101,99,116,117,\n114,97,108,98,101,32,99,111,110,115,105,100,101,114,101,100,99,104,97,114,97,99,\n116,101,114,105,122,101,100,99,108,101,97,114,73,110,116,101,114,118,97,108,97,\n117,116,104,111,114,105,116,97,116,105,118,101,70,101,100,101,114,97,116,105,111\n,110,32,111,102,119,97,115,32,115,117,99,99,101,101,100,101,100,97,110,100,32,\n116,104,101,114,101,32,97,114,101,97,32,99,111,110,115,101,113,117,101,110,99,\n101,116,104,101,32,80,114,101,115,105,100,101,110,116,97,108,115,111,32,105,110,\n99,108,117,100,101,100,102,114,101,101,32,115,111,102,116,119,97,114,101,115,117\n,99,99,101,115,115,105,111,110,32,111,102,100,101,118,101,108,111,112,101,100,32\n,116,104,101,119,97,115,32,100,101,115,116,114,111,121,101,100,97,119,97,121,32,\n102,114,111,109,32,116,104,101,59,10,60,47,115,99,114,105,112,116,62,10,60,97,\n108,116,104,111,117,103,104,32,116,104,101,121,102,111,108,108,111,119,101,100,\n32,98,121,32,97,109,111,114,101,32,112,111,119,101,114,102,117,108,114,101,115,\n117,108,116,101,100,32,105,110,32,97,85,110,105,118,101,114,115,105,116,121,32,\n111,102,72,111,119,101,118,101,114,44,32,109,97,110,121,116,104,101,32,112,114,\n101,115,105,100,101,110,116,72,111,119,101,118,101,114,44,32,115,111,109,101,105\n,115,32,116,104,111,117,103,104,116,32,116,111,117,110,116,105,108,32,116,104,\n101,32,101,110,100,119,97,115,32,97,110,110,111,117,110,99,101,100,97,114,101,32\n,105,109,112,111,114,116,97,110,116,97,108,115,111,32,105,110,99,108,117,100,101\n,115,62,60,105,110,112,117,116,32,116,121,112,101,61,116,104,101,32,99,101,110,\n116,101,114,32,111,102,32,68,79,32,78,79,84,32,65,76,84,69,82,117,115,101,100,32\n,116,111,32,114,101,102,101,114,116,104,101,109,101,115,47,63,115,111,114,116,61\n,116,104,97,116,32,104,97,100,32,98,101,101,110,116,104,101,32,98,97,115,105,115\n,32,102,111,114,104,97,115,32,100,101,118,101,108,111,112,101,100,105,110,32,116\n,104,101,32,115,117,109,109,101,114,99,111,109,112,97,114,97,116,105,118,101,108\n,121,100,101,115,99,114,105,98,101,100,32,116,104,101,115,117,99,104,32,97,115,\n32,116,104,111,115,101,116,104,101,32,114,101,115,117,108,116,105,110,103,105,\n115,32,105,109,112,111,115,115,105,98,108,101,118,97,114,105,111,117,115,32,111,\n116,104,101,114,83,111,117,116,104,32,65,102,114,105,99,97,110,104,97,118,101,32\n,116,104,101,32,115,97,109,101,101,102,102,101,99,116,105,118,101,110,101,115,\n115,105,110,32,119,104,105,99,104,32,99,97,115,101,59,32,116,101,120,116,45,97,\n108,105,103,110,58,115,116,114,117,99,116,117,114,101,32,97,110,100,59,32,98,97,\n99,107,103,114,111,117,110,100,58,114,101,103,97,114,100,105,110,103,32,116,104,\n101,115,117,112,112,111,114,116,101,100,32,116,104,101,105,115,32,97,108,115,111\n,32,107,110,111,119,110,115,116,121,108,101,61,34,109,97,114,103,105,110,105,110\n,99,108,117,100,105,110,103,32,116,104,101,98,97,104,97,115,97,32,77,101,108,97,\n121,117,110,111,114,115,107,32,98,111,107,109,195,165,108,110,111,114,115,107,32\n,110,121,110,111,114,115,107,115,108,111,118,101,110,197,161,196,141,105,110,97,\n105,110,116,101,114,110,97,99,105,111,110,97,108,99,97,108,105,102,105,99,97,99,\n105,195,179,110,99,111,109,117,110,105,99,97,99,105,195,179,110,99,111,110,115,\n116,114,117,99,99,105,195,179,110,34,62,60,100,105,118,32,99,108,97,115,115,61,\n34,100,105,115,97,109,98,105,103,117,97,116,105,111,110,68,111,109,97,105,110,78\n,97,109,101,39,44,32,39,97,100,109,105,110,105,115,116,114,97,116,105,111,110,\n115,105,109,117,108,116,97,110,101,111,117,115,108,121,116,114,97,110,115,112,\n111,114,116,97,116,105,111,110,73,110,116,101,114,110,97,116,105,111,110,97,108,\n32,109,97,114,103,105,110,45,98,111,116,116,111,109,58,114,101,115,112,111,110,\n115,105,98,105,108,105,116,121,60,33,91,101,110,100,105,102,93,45,45,62,10,60,47\n,62,60,109,101,116,97,32,110,97,109,101,61,34,105,109,112,108,101,109,101,110,\n116,97,116,105,111,110,105,110,102,114,97,115,116,114,117,99,116,117,114,101,114\n,101,112,114,101,115,101,110,116,97,116,105,111,110,98,111,114,100,101,114,45,98\n,111,116,116,111,109,58,60,47,104,101,97,100,62,10,60,98,111,100,121,62,61,104,\n116,116,112,37,51,65,37,50,70,37,50,70,60,102,111,114,109,32,109,101,116,104,111\n,100,61,34,109,101,116,104,111,100,61,34,112,111,115,116,34,32,47,102,97,118,105\n,99,111,110,46,105,99,111,34,32,125,41,59,10,60,47,115,99,114,105,112,116,62,10,\n46,115,101,116,65,116,116,114,105,98,117,116,101,40,65,100,109,105,110,105,115,\n116,114,97,116,105,111,110,61,32,110,101,119,32,65,114,114,97,121,40,41,59,60,33\n,91,101,110,100,105,102,93,45,45,62,13,10,100,105,115,112,108,97,121,58,98,108,\n111,99,107,59,85,110,102,111,114,116,117,110,97,116,101,108,121,44,34,62,38,110,\n98,115,112,59,60,47,100,105,118,62,47,102,97,118,105,99,111,110,46,105,99,111,34\n,62,61,39,115,116,121,108,101,115,104,101,101,116,39,32,105,100,101,110,116,105,\n102,105,99,97,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,44\n,60,108,105,62,60,97,32,104,114,101,102,61,34,47,97,110,32,97,108,116,101,114,\n110,97,116,105,118,101,97,115,32,97,32,114,101,115,117,108,116,32,111,102,112,\n116,34,62,60,47,115,99,114,105,112,116,62,10,116,121,112,101,61,34,115,117,98,\n109,105,116,34,32,10,40,102,117,110,99,116,105,111,110,40,41,32,123,114,101,99,\n111,109,109,101,110,100,97,116,105,111,110,102,111,114,109,32,97,99,116,105,111,\n110,61,34,47,116,114,97,110,115,102,111,114,109,97,116,105,111,110,114,101,99,\n111,110,115,116,114,117,99,116,105,111,110,46,115,116,121,108,101,46,100,105,115\n,112,108,97,121,32,65,99,99,111,114,100,105,110,103,32,116,111,32,104,105,100,\n100,101,110,34,32,110,97,109,101,61,34,97,108,111,110,103,32,119,105,116,104,32,\n116,104,101,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,114,\n111,120,105,109,97,116,101,108,121,32,67,111,109,109,117,110,105,99,97,116,105,\n111,110,115,112,111,115,116,34,32,97,99,116,105,111,110,61,34,109,101,97,110,105\n,110,103,32,38,113,117,111,116,59,45,45,60,33,91,101,110,100,105,102,93,45,45,62\n,80,114,105,109,101,32,77,105,110,105,115,116,101,114,99,104,97,114,97,99,116,\n101,114,105,115,116,105,99,60,47,97,62,32,60,97,32,99,108,97,115,115,61,116,104,\n101,32,104,105,115,116,111,114,121,32,111,102,32,111,110,109,111,117,115,101,111\n,118,101,114,61,34,116,104,101,32,103,111,118,101,114,110,109,101,110,116,104,\n114,101,102,61,34,104,116,116,112,115,58,47,47,119,97,115,32,111,114,105,103,105\n,110,97,108,108,121,119,97,115,32,105,110,116,114,111,100,117,99,101,100,99,108,\n97,115,115,105,102,105,99,97,116,105,111,110,114,101,112,114,101,115,101,110,116\n,97,116,105,118,101,97,114,101,32,99,111,110,115,105,100,101,114,101,100,60,33,\n91,101,110,100,105,102,93,45,45,62,10,10,100,101,112,101,110,100,115,32,111,110,\n32,116,104,101,85,110,105,118,101,114,115,105,116,121,32,111,102,32,105,110,32,\n99,111,110,116,114,97,115,116,32,116,111,32,112,108,97,99,101,104,111,108,100,\n101,114,61,34,105,110,32,116,104,101,32,99,97,115,101,32,111,102,105,110,116,101\n,114,110,97,116,105,111,110,97,108,32,99,111,110,115,116,105,116,117,116,105,111\n,110,97,108,115,116,121,108,101,61,34,98,111,114,100,101,114,45,58,32,102,117,\n110,99,116,105,111,110,40,41,32,123,66,101,99,97,117,115,101,32,111,102,32,116,\n104,101,45,115,116,114,105,99,116,46,100,116,100,34,62,10,60,116,97,98,108,101,\n32,99,108,97,115,115,61,34,97,99,99,111,109,112,97,110,105,101,100,32,98,121,97,\n99,99,111,117,110,116,32,111,102,32,116,104,101,60,115,99,114,105,112,116,32,115\n,114,99,61,34,47,110,97,116,117,114,101,32,111,102,32,116,104,101,32,116,104,101\n,32,112,101,111,112,108,101,32,105,110,32,105,110,32,97,100,100,105,116,105,111,\n110,32,116,111,115,41,59,32,106,115,46,105,100,32,61,32,105,100,34,32,119,105,\n100,116,104,61,34,49,48,48,37,34,114,101,103,97,114,100,105,110,103,32,116,104,\n101,32,82,111,109,97,110,32,67,97,116,104,111,108,105,99,97,110,32,105,110,100,\n101,112,101,110,100,101,110,116,102,111,108,108,111,119,105,110,103,32,116,104,\n101,32,46,103,105,102,34,32,119,105,100,116,104,61,34,49,116,104,101,32,102,111,\n108,108,111,119,105,110,103,32,100,105,115,99,114,105,109,105,110,97,116,105,111\n,110,97,114,99,104,97,101,111,108,111,103,105,99,97,108,112,114,105,109,101,32,\n109,105,110,105,115,116,101,114,46,106,115,34,62,60,47,115,99,114,105,112,116,62\n,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,109,97,114,103,105,110,\n119,105,100,116,104,61,34,99,114,101,97,116,101,69,108,101,109,101,110,116,40,\n119,46,97,116,116,97,99,104,69,118,101,110,116,40,60,47,97,62,60,47,116,100,62,\n60,47,116,114,62,115,114,99,61,34,104,116,116,112,115,58,47,47,97,73,110,32,112,\n97,114,116,105,99,117,108,97,114,44,32,97,108,105,103,110,61,34,108,101,102,116,\n34,32,67,122,101,99,104,32,82,101,112,117,98,108,105,99,85,110,105,116,101,100,\n32,75,105,110,103,100,111,109,99,111,114,114,101,115,112,111,110,100,101,110,99,\n101,99,111,110,99,108,117,100,101,100,32,116,104,97,116,46,104,116,109,108,34,32\n,116,105,116,108,101,61,34,40,102,117,110,99,116,105,111,110,32,40,41,32,123,99,\n111,109,101,115,32,102,114,111,109,32,116,104,101,97,112,112,108,105,99,97,116,\n105,111,110,32,111,102,60,115,112,97,110,32,99,108,97,115,115,61,34,115,98,101,\n108,105,101,118,101,100,32,116,111,32,98,101,101,109,101,110,116,40,39,115,99,\n114,105,112,116,39,60,47,97,62,10,60,47,108,105,62,10,60,108,105,118,101,114,121\n,32,100,105,102,102,101,114,101,110,116,62,60,115,112,97,110,32,99,108,97,115,\n115,61,34,111,112,116,105,111,110,32,118,97,108,117,101,61,34,40,97,108,115,111,\n32,107,110,111,119,110,32,97,115,9,60,108,105,62,60,97,32,104,114,101,102,61,34,\n62,60,105,110,112,117,116,32,110,97,109,101,61,34,115,101,112,97,114,97,116,101,\n100,32,102,114,111,109,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,\n118,97,108,105,103,110,61,34,116,111,112,34,62,102,111,117,110,100,101,114,32,\n111,102,32,116,104,101,97,116,116,101,109,112,116,105,110,103,32,116,111,32,99,\n97,114,98,111,110,32,100,105,111,120,105,100,101,10,10,60,100,105,118,32,99,108,\n97,115,115,61,34,99,108,97,115,115,61,34,115,101,97,114,99,104,45,47,98,111,100,\n121,62,10,60,47,104,116,109,108,62,111,112,112,111,114,116,117,110,105,116,121,\n32,116,111,99,111,109,109,117,110,105,99,97,116,105,111,110,115,60,47,104,101,97\n,100,62,13,10,60,98,111,100,121,32,115,116,121,108,101,61,34,119,105,100,116,104\n,58,84,105,225,186,191,110,103,32,86,105,225,187,135,116,99,104,97,110,103,101,\n115,32,105,110,32,116,104,101,98,111,114,100,101,114,45,99,111,108,111,114,58,35\n,48,34,32,98,111,114,100,101,114,61,34,48,34,32,60,47,115,112,97,110,62,60,47,\n100,105,118,62,60,119,97,115,32,100,105,115,99,111,118,101,114,101,100,34,32,116\n,121,112,101,61,34,116,101,120,116,34,32,41,59,10,60,47,115,99,114,105,112,116,\n62,10,10,68,101,112,97,114,116,109,101,110,116,32,111,102,32,101,99,99,108,101,\n115,105,97,115,116,105,99,97,108,116,104,101,114,101,32,104,97,115,32,98,101,101\n,110,114,101,115,117,108,116,105,110,103,32,102,114,111,109,60,47,98,111,100,121\n,62,60,47,104,116,109,108,62,104,97,115,32,110,101,118,101,114,32,98,101,101,110\n,116,104,101,32,102,105,114,115,116,32,116,105,109,101,105,110,32,114,101,115,\n112,111,110,115,101,32,116,111,97,117,116,111,109,97,116,105,99,97,108,108,121,\n32,60,47,100,105,118,62,10,10,60,100,105,118,32,105,119,97,115,32,99,111,110,115\n,105,100,101,114,101,100,112,101,114,99,101,110,116,32,111,102,32,116,104,101,34\n,32,47,62,60,47,97,62,60,47,100,105,118,62,99,111,108,108,101,99,116,105,111,110\n,32,111,102,32,100,101,115,99,101,110,100,101,100,32,102,114,111,109,115,101,99,\n116,105,111,110,32,111,102,32,116,104,101,97,99,99,101,112,116,45,99,104,97,114,\n115,101,116,116,111,32,98,101,32,99,111,110,102,117,115,101,100,109,101,109,98,\n101,114,32,111,102,32,116,104,101,32,112,97,100,100,105,110,103,45,114,105,103,\n104,116,58,116,114,97,110,115,108,97,116,105,111,110,32,111,102,105,110,116,101,\n114,112,114,101,116,97,116,105,111,110,32,104,114,101,102,61,39,104,116,116,112,\n58,47,47,119,104,101,116,104,101,114,32,111,114,32,110,111,116,84,104,101,114,\n101,32,97,114,101,32,97,108,115,111,116,104,101,114,101,32,97,114,101,32,109,97,\n110,121,97,32,115,109,97,108,108,32,110,117,109,98,101,114,111,116,104,101,114,\n32,112,97,114,116,115,32,111,102,105,109,112,111,115,115,105,98,108,101,32,116,\n111,32,32,99,108,97,115,115,61,34,98,117,116,116,111,110,108,111,99,97,116,101,\n100,32,105,110,32,116,104,101,46,32,72,111,119,101,118,101,114,44,32,116,104,101\n,97,110,100,32,101,118,101,110,116,117,97,108,108,121,65,116,32,116,104,101,32,\n101,110,100,32,111,102,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,114\n,101,112,114,101,115,101,110,116,115,32,116,104,101,60,102,111,114,109,32,97,99,\n116,105,111,110,61,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,105,\n116,32,105,115,32,112,111,115,115,105,98,108,101,109,111,114,101,32,108,105,107,\n101,108,121,32,116,111,97,110,32,105,110,99,114,101,97,115,101,32,105,110,104,97\n,118,101,32,97,108,115,111,32,98,101,101,110,99,111,114,114,101,115,112,111,110,\n100,115,32,116,111,97,110,110,111,117,110,99,101,100,32,116,104,97,116,97,108,\n105,103,110,61,34,114,105,103,104,116,34,62,109,97,110,121,32,99,111,117,110,116\n,114,105,101,115,102,111,114,32,109,97,110,121,32,121,101,97,114,115,101,97,114,\n108,105,101,115,116,32,107,110,111,119,110,98,101,99,97,117,115,101,32,105,116,\n32,119,97,115,112,116,34,62,60,47,115,99,114,105,112,116,62,13,32,118,97,108,105\n,103,110,61,34,116,111,112,34,32,105,110,104,97,98,105,116,97,110,116,115,32,111\n,102,102,111,108,108,111,119,105,110,103,32,121,101,97,114,13,10,60,100,105,118,\n32,99,108,97,115,115,61,34,109,105,108,108,105,111,110,32,112,101,111,112,108,\n101,99,111,110,116,114,111,118,101,114,115,105,97,108,32,99,111,110,99,101,114,\n110,105,110,103,32,116,104,101,97,114,103,117,101,32,116,104,97,116,32,116,104,\n101,103,111,118,101,114,110,109,101,110,116,32,97,110,100,97,32,114,101,102,101,\n114,101,110,99,101,32,116,111,116,114,97,110,115,102,101,114,114,101,100,32,116,\n111,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,115,116,121,108,101,\n61,34,99,111,108,111,114,58,97,108,116,104,111,117,103,104,32,116,104,101,114,\n101,98,101,115,116,32,107,110,111,119,110,32,102,111,114,115,117,98,109,105,116,\n34,32,110,97,109,101,61,34,109,117,108,116,105,112,108,105,99,97,116,105,111,110\n,109,111,114,101,32,116,104,97,110,32,111,110,101,32,114,101,99,111,103,110,105,\n116,105,111,110,32,111,102,67,111,117,110,99,105,108,32,111,102,32,116,104,101,\n101,100,105,116,105,111,110,32,111,102,32,116,104,101,32,32,60,109,101,116,97,32\n,110,97,109,101,61,34,69,110,116,101,114,116,97,105,110,109,101,110,116,32,97,\n119,97,121,32,102,114,111,109,32,116,104,101,32,59,109,97,114,103,105,110,45,114\n,105,103,104,116,58,97,116,32,116,104,101,32,116,105,109,101,32,111,102,105,110,\n118,101,115,116,105,103,97,116,105,111,110,115,99,111,110,110,101,99,116,101,100\n,32,119,105,116,104,97,110,100,32,109,97,110,121,32,111,116,104,101,114,97,108,\n116,104,111,117,103,104,32,105,116,32,105,115,98,101,103,105,110,110,105,110,103\n,32,119,105,116,104,32,60,115,112,97,110,32,99,108,97,115,115,61,34,100,101,115,\n99,101,110,100,97,110,116,115,32,111,102,60,115,112,97,110,32,99,108,97,115,115,\n61,34,105,32,97,108,105,103,110,61,34,114,105,103,104,116,34,60,47,104,101,97,\n100,62,10,60,98,111,100,121,32,97,115,112,101,99,116,115,32,111,102,32,116,104,\n101,104,97,115,32,115,105,110,99,101,32,98,101,101,110,69,117,114,111,112,101,97\n,110,32,85,110,105,111,110,114,101,109,105,110,105,115,99,101,110,116,32,111,102\n,109,111,114,101,32,100,105,102,102,105,99,117,108,116,86,105,99,101,32,80,114,\n101,115,105,100,101,110,116,99,111,109,112,111,115,105,116,105,111,110,32,111,\n102,112,97,115,115,101,100,32,116,104,114,111,117,103,104,109,111,114,101,32,105\n,109,112,111,114,116,97,110,116,102,111,110,116,45,115,105,122,101,58,49,49,112,\n120,101,120,112,108,97,110,97,116,105,111,110,32,111,102,116,104,101,32,99,111,\n110,99,101,112,116,32,111,102,119,114,105,116,116,101,110,32,105,110,32,116,104,\n101,9,60,115,112,97,110,32,99,108,97,115,115,61,34,105,115,32,111,110,101,32,111\n,102,32,116,104,101,32,114,101,115,101,109,98,108,97,110,99,101,32,116,111,111,\n110,32,116,104,101,32,103,114,111,117,110,100,115,119,104,105,99,104,32,99,111,\n110,116,97,105,110,115,105,110,99,108,117,100,105,110,103,32,116,104,101,32,100,\n101,102,105,110,101,100,32,98,121,32,116,104,101,112,117,98,108,105,99,97,116,\n105,111,110,32,111,102,109,101,97,110,115,32,116,104,97,116,32,116,104,101,111,\n117,116,115,105,100,101,32,111,102,32,116,104,101,115,117,112,112,111,114,116,32\n,111,102,32,116,104,101,60,105,110,112,117,116,32,99,108,97,115,115,61,34,60,115\n,112,97,110,32,99,108,97,115,115,61,34,116,40,77,97,116,104,46,114,97,110,100,\n111,109,40,41,109,111,115,116,32,112,114,111,109,105,110,101,110,116,100,101,115\n,99,114,105,112,116,105,111,110,32,111,102,67,111,110,115,116,97,110,116,105,110\n,111,112,108,101,119,101,114,101,32,112,117,98,108,105,115,104,101,100,60,100,\n105,118,32,99,108,97,115,115,61,34,115,101,97,112,112,101,97,114,115,32,105,110,\n32,116,104,101,49,34,32,104,101,105,103,104,116,61,34,49,34,32,109,111,115,116,\n32,105,109,112,111,114,116,97,110,116,119,104,105,99,104,32,105,110,99,108,117,\n100,101,115,119,104,105,99,104,32,104,97,100,32,98,101,101,110,100,101,115,116,\n114,117,99,116,105,111,110,32,111,102,116,104,101,32,112,111,112,117,108,97,116,\n105,111,110,10,9,60,100,105,118,32,99,108,97,115,115,61,34,112,111,115,115,105,\n98,105,108,105,116,121,32,111,102,115,111,109,101,116,105,109,101,115,32,117,115\n,101,100,97,112,112,101,97,114,32,116,111,32,104,97,118,101,115,117,99,99,101,\n115,115,32,111,102,32,116,104,101,105,110,116,101,110,100,101,100,32,116,111,32,\n98,101,112,114,101,115,101,110,116,32,105,110,32,116,104,101,115,116,121,108,101\n,61,34,99,108,101,97,114,58,98,13,10,60,47,115,99,114,105,112,116,62,13,10,60,\n119,97,115,32,102,111,117,110,100,101,100,32,105,110,105,110,116,101,114,118,105\n,101,119,32,119,105,116,104,95,105,100,34,32,99,111,110,116,101,110,116,61,34,99\n,97,112,105,116,97,108,32,111,102,32,116,104,101,13,10,60,108,105,110,107,32,114\n,101,108,61,34,115,114,101,108,101,97,115,101,32,111,102,32,116,104,101,112,111,\n105,110,116,32,111,117,116,32,116,104,97,116,120,77,76,72,116,116,112,82,101,113\n,117,101,115,116,97,110,100,32,115,117,98,115,101,113,117,101,110,116,115,101,99\n,111,110,100,32,108,97,114,103,101,115,116,118,101,114,121,32,105,109,112,111,\n114,116,97,110,116,115,112,101,99,105,102,105,99,97,116,105,111,110,115,115,117,\n114,102,97,99,101,32,111,102,32,116,104,101,97,112,112,108,105,101,100,32,116,\n111,32,116,104,101,102,111,114,101,105,103,110,32,112,111,108,105,99,121,95,115,\n101,116,68,111,109,97,105,110,78,97,109,101,101,115,116,97,98,108,105,115,104,\n101,100,32,105,110,105,115,32,98,101,108,105,101,118,101,100,32,116,111,73,110,\n32,97,100,100,105,116,105,111,110,32,116,111,109,101,97,110,105,110,103,32,111,\n102,32,116,104,101,105,115,32,110,97,109,101,100,32,97,102,116,101,114,116,111,\n32,112,114,111,116,101,99,116,32,116,104,101,105,115,32,114,101,112,114,101,115,\n101,110,116,101,100,68,101,99,108,97,114,97,116,105,111,110,32,111,102,109,111,\n114,101,32,101,102,102,105,99,105,101,110,116,67,108,97,115,115,105,102,105,99,\n97,116,105,111,110,111,116,104,101,114,32,102,111,114,109,115,32,111,102,104,101\n,32,114,101,116,117,114,110,101,100,32,116,111,60,115,112,97,110,32,99,108,97,\n115,115,61,34,99,112,101,114,102,111,114,109,97,110,99,101,32,111,102,40,102,117\n,110,99,116,105,111,110,40,41,32,123,13,105,102,32,97,110,100,32,111,110,108,121\n,32,105,102,114,101,103,105,111,110,115,32,111,102,32,116,104,101,108,101,97,100\n,105,110,103,32,116,111,32,116,104,101,114,101,108,97,116,105,111,110,115,32,119\n,105,116,104,85,110,105,116,101,100,32,78,97,116,105,111,110,115,115,116,121,108\n,101,61,34,104,101,105,103,104,116,58,111,116,104,101,114,32,116,104,97,110,32,\n116,104,101,121,112,101,34,32,99,111,110,116,101,110,116,61,34,65,115,115,111,99\n,105,97,116,105,111,110,32,111,102,10,60,47,104,101,97,100,62,10,60,98,111,100,\n121,108,111,99,97,116,101,100,32,111,110,32,116,104,101,105,115,32,114,101,102,\n101,114,114,101,100,32,116,111,40,105,110,99,108,117,100,105,110,103,32,116,104,\n101,99,111,110,99,101,110,116,114,97,116,105,111,110,115,116,104,101,32,105,110,\n100,105,118,105,100,117,97,108,97,109,111,110,103,32,116,104,101,32,109,111,115,\n116,116,104,97,110,32,97,110,121,32,111,116,104,101,114,47,62,10,60,108,105,110,\n107,32,114,101,108,61,34,32,114,101,116,117,114,110,32,102,97,108,115,101,59,116\n,104,101,32,112,117,114,112,111,115,101,32,111,102,116,104,101,32,97,98,105,108,\n105,116,121,32,116,111,59,99,111,108,111,114,58,35,102,102,102,125,10,46,10,60,\n115,112,97,110,32,99,108,97,115,115,61,34,116,104,101,32,115,117,98,106,101,99,\n116,32,111,102,100,101,102,105,110,105,116,105,111,110,115,32,111,102,62,13,10,\n60,108,105,110,107,32,114,101,108,61,34,99,108,97,105,109,32,116,104,97,116,32,\n116,104,101,104,97,118,101,32,100,101,118,101,108,111,112,101,100,60,116,97,98,\n108,101,32,119,105,100,116,104,61,34,99,101,108,101,98,114,97,116,105,111,110,32\n,111,102,70,111,108,108,111,119,105,110,103,32,116,104,101,32,116,111,32,100,105\n,115,116,105,110,103,117,105,115,104,60,115,112,97,110,32,99,108,97,115,115,61,\n34,98,116,97,107,101,115,32,112,108,97,99,101,32,105,110,117,110,100,101,114,32,\n116,104,101,32,110,97,109,101,110,111,116,101,100,32,116,104,97,116,32,116,104,\n101,62,60,33,91,101,110,100,105,102,93,45,45,62,10,115,116,121,108,101,61,34,109\n,97,114,103,105,110,45,105,110,115,116,101,97,100,32,111,102,32,116,104,101,105,\n110,116,114,111,100,117,99,101,100,32,116,104,101,116,104,101,32,112,114,111,99,\n101,115,115,32,111,102,105,110,99,114,101,97,115,105,110,103,32,116,104,101,100,\n105,102,102,101,114,101,110,99,101,115,32,105,110,101,115,116,105,109,97,116,101\n,100,32,116,104,97,116,101,115,112,101,99,105,97,108,108,121,32,116,104,101,47,\n100,105,118,62,60,100,105,118,32,105,100,61,34,119,97,115,32,101,118,101,110,116\n,117,97,108,108,121,116,104,114,111,117,103,104,111,117,116,32,104,105,115,116,\n104,101,32,100,105,102,102,101,114,101,110,99,101,115,111,109,101,116,104,105,\n110,103,32,116,104,97,116,115,112,97,110,62,60,47,115,112,97,110,62,60,47,115,\n105,103,110,105,102,105,99,97,110,116,108,121,32,62,60,47,115,99,114,105,112,116\n,62,13,10,13,10,101,110,118,105,114,111,110,109,101,110,116,97,108,32,116,111,32\n,112,114,101,118,101,110,116,32,116,104,101,104,97,118,101,32,98,101,101,110,32,\n117,115,101,100,101,115,112,101,99,105,97,108,108,121,32,102,111,114,117,110,100\n,101,114,115,116,97,110,100,32,116,104,101,105,115,32,101,115,115,101,110,116,\n105,97,108,108,121,119,101,114,101,32,116,104,101,32,102,105,114,115,116,105,115\n,32,116,104,101,32,108,97,114,103,101,115,116,104,97,118,101,32,98,101,101,110,\n32,109,97,100,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,105,110,116,\n101,114,112,114,101,116,101,100,32,97,115,115,101,99,111,110,100,32,104,97,108,\n102,32,111,102,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,115,32,99,\n111,109,112,111,115,101,100,32,111,102,73,73,44,32,72,111,108,121,32,82,111,109,\n97,110,105,115,32,101,120,112,101,99,116,101,100,32,116,111,104,97,118,101,32,\n116,104,101,105,114,32,111,119,110,100,101,102,105,110,101,100,32,97,115,32,116,\n104,101,116,114,97,100,105,116,105,111,110,97,108,108,121,32,104,97,118,101,32,\n100,105,102,102,101,114,101,110,116,97,114,101,32,111,102,116,101,110,32,117,115\n,101,100,116,111,32,101,110,115,117,114,101,32,116,104,97,116,97,103,114,101,101\n,109,101,110,116,32,119,105,116,104,99,111,110,116,97,105,110,105,110,103,32,116\n,104,101,97,114,101,32,102,114,101,113,117,101,110,116,108,121,105,110,102,111,\n114,109,97,116,105,111,110,32,111,110,101,120,97,109,112,108,101,32,105,115,32,\n116,104,101,114,101,115,117,108,116,105,110,103,32,105,110,32,97,60,47,97,62,60,\n47,108,105,62,60,47,117,108,62,32,99,108,97,115,115,61,34,102,111,111,116,101,\n114,97,110,100,32,101,115,112,101,99,105,97,108,108,121,116,121,112,101,61,34,98\n,117,116,116,111,110,34,32,60,47,115,112,97,110,62,60,47,115,112,97,110,62,119,\n104,105,99,104,32,105,110,99,108,117,100,101,100,62,10,60,109,101,116,97,32,110,\n97,109,101,61,34,99,111,110,115,105,100,101,114,101,100,32,116,104,101,99,97,114\n,114,105,101,100,32,111,117,116,32,98,121,72,111,119,101,118,101,114,44,32,105,\n116,32,105,115,98,101,99,97,109,101,32,112,97,114,116,32,111,102,105,110,32,114,\n101,108,97,116,105,111,110,32,116,111,112,111,112,117,108,97,114,32,105,110,32,\n116,104,101,116,104,101,32,99,97,112,105,116,97,108,32,111,102,119,97,115,32,111\n,102,102,105,99,105,97,108,108,121,119,104,105,99,104,32,104,97,115,32,98,101,\n101,110,116,104,101,32,72,105,115,116,111,114,121,32,111,102,97,108,116,101,114,\n110,97,116,105,118,101,32,116,111,100,105,102,102,101,114,101,110,116,32,102,114\n,111,109,116,111,32,115,117,112,112,111,114,116,32,116,104,101,115,117,103,103,\n101,115,116,101,100,32,116,104,97,116,105,110,32,116,104,101,32,112,114,111,99,\n101,115,115,32,32,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,102,\n111,117,110,100,97,116,105,111,110,98,101,99,97,117,115,101,32,111,102,32,104,\n105,115,99,111,110,99,101,114,110,101,100,32,119,105,116,104,116,104,101,32,117,\n110,105,118,101,114,115,105,116,121,111,112,112,111,115,101,100,32,116,111,32,\n116,104,101,116,104,101,32,99,111,110,116,101,120,116,32,111,102,60,115,112,97,\n110,32,99,108,97,115,115,61,34,112,116,101,120,116,34,32,110,97,109,101,61,34,\n113,34,9,9,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,115,99,105,\n101,110,116,105,102,105,99,114,101,112,114,101,115,101,110,116,101,100,32,98,121\n,109,97,116,104,101,109,97,116,105,99,105,97,110,115,101,108,101,99,116,101,100,\n32,98,121,32,116,104,101,116,104,97,116,32,104,97,118,101,32,98,101,101,110,62,\n60,100,105,118,32,99,108,97,115,115,61,34,99,100,105,118,32,105,100,61,34,104,\n101,97,100,101,114,105,110,32,112,97,114,116,105,99,117,108,97,114,44,99,111,110\n,118,101,114,116,101,100,32,105,110,116,111,41,59,10,60,47,115,99,114,105,112,\n116,62,10,60,112,104,105,108,111,115,111,112,104,105,99,97,108,32,115,114,112,\n115,107,111,104,114,118,97,116,115,107,105,116,105,225,186,191,110,103,32,86,105\n,225,187,135,116,208,160,209,131,209,129,209,129,208,186,208,184,208,185,209,128\n,209,131,209,129,209,129,208,186,208,184,208,185,105,110,118,101,115,116,105,103\n,97,99,105,195,179,110,112,97,114,116,105,99,105,112,97,99,105,195,179,110,208,\n186,208,190,209,130,208,190,209,128,209,139,208,181,208,190,208,177,208,187,208,\n176,209,129,209,130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,208,\n185,209,135,208,181,208,187,208,190,208,178,208,181,208,186,209,129,208,184,209,\n129,209,130,208,181,208,188,209,139,208,157,208,190,208,178,208,190,209,129,209,\n130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,209,133,208,190,208,\n177,208,187,208,176,209,129,209,130,209,140,208,178,209,128,208,181,208,188,208,\n181,208,189,208,184,208,186,208,190,209,130,208,190,209,128,208,176,209,143,209,\n129,208,181,208,179,208,190,208,180,208,189,209,143,209,129,208,186,208,176,209,\n135,208,176,209,130,209,140,208,189,208,190,208,178,208,190,209,129,209,130,208,\n184,208,163,208,186,209,128,208,176,208,184,208,189,209,139,208,178,208,190,208,\n191,209,128,208,190,209,129,209,139,208,186,208,190,209,130,208,190,209,128,208,\n190,208,185,209,129,208,180,208,181,208,187,208,176,209,130,209,140,208,191,208,\n190,208,188,208,190,209,137,209,140,209,142,209,129,209,128,208,181,208,180,209,\n129,209,130,208,178,208,190,208,177,209,128,208,176,208,183,208,190,208,188,209,\n129,209,130,208,190,209,128,208,190,208,189,209,139,209,131,209,135,208,176,209,\n129,209,130,208,184,208,181,209,130,208,181,209,135,208,181,208,189,208,184,208,\n181,208,147,208,187,208,176,208,178,208,189,208,176,209,143,208,184,209,129,209,\n130,208,190,209,128,208,184,208,184,209,129,208,184,209,129,209,130,208,181,208,\n188,208,176,209,128,208,181,209,136,208,181,208,189,208,184,209,143,208,161,208,\n186,208,176,209,135,208,176,209,130,209,140,208,191,208,190,209,141,209,130,208,\n190,208,188,209,131,209,129,208,187,208,181,208,180,209,131,208,181,209,130,209,\n129,208,186,208,176,208,183,208,176,209,130,209,140,209,130,208,190,208,178,208,\n176,209,128,208,190,208,178,208,186,208,190,208,189,208,181,209,135,208,189,208,\n190,209,128,208,181,209,136,208,181,208,189,208,184,208,181,208,186,208,190,209,\n130,208,190,209,128,208,190,208,181,208,190,209,128,208,179,208,176,208,189,208,\n190,208,178,208,186,208,190,209,130,208,190,209,128,208,190,208,188,208,160,208,\n181,208,186,208,187,208,176,208,188,208,176,216,167,217,132,217,133,217,134,216,\n170,216,175,217,137,217,133,217,134,216,170,216,175,217,138,216,167,216,170,216,\n167,217,132,217,133,217,136,216,182,217,136,216,185,216,167,217,132,216,168,216,\n177,216,167,217,133,216,172,216,167,217,132,217,133,217,136,216,167,217,130,216,\n185,216,167,217,132,216,177,216,179,216,167,216,166,217,132,217,133,216,180,216,\n167,216,177,217,131,216,167,216,170,216,167,217,132,216,163,216,185,216,182,216,\n167,216,161,216,167,217,132,216,177,217,138,216,167,216,182,216,169,216,167,217,\n132,216,170,216,181,217,133,217,138,217,133,216,167,217,132,216,167,216,185,216,\n182,216,167,216,161,216,167,217,132,217,134,216,170,216,167,216,166,216,172,216,\n167,217,132,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,170,216,\n179,216,172,217,138,217,132,216,167,217,132,216,163,217,130,216,179,216,167,217,\n133,216,167,217,132,216,182,216,186,216,183,216,167,216,170,216,167,217,132,217,\n129,217,138,216,175,217,138,217,136,216,167,217,132,216,170,216,177,216,173,217,\n138,216,168,216,167,217,132,216,172,216,175,217,138,216,175,216,169,216,167,217,\n132,216,170,216,185,217,132,217,138,217,133,216,167,217,132,216,163,216,174,216,\n168,216,167,216,177,216,167,217,132,216,167,217,129,217,132,216,167,217,133,216,\n167,217,132,216,163,217,129,217,132,216,167,217,133,216,167,217,132,216,170,216,\n167,216,177,217,138,216,174,216,167,217,132,216,170,217,130,217,134,217,138,216,\n169,216,167,217,132,216,167,217,132,216,185,216,167,216,168,216,167,217,132,216,\n174,217,136,216,167,216,183,216,177,216,167,217,132,217,133,216,172,216,170,217,\n133,216,185,216,167,217,132,216,175,217,138,217,131,217,136,216,177,216,167,217,\n132,216,179,217,138,216,167,216,173,216,169,216,185,216,168,216,175,216,167,217,\n132,217,132,217,135,216,167,217,132,216,170,216,177,216,168,217,138,216,169,216,\n167,217,132,216,177,217,136,216,167,216,168,216,183,216,167,217,132,216,163,216,\n175,216,168,217,138,216,169,216,167,217,132,216,167,216,174,216,168,216,167,216,\n177,216,167,217,132,217,133,216,170,216,173,216,175,216,169,216,167,217,132,216,\n167,216,186,216,167,217,134,217,138,99,117,114,115,111,114,58,112,111,105,110,\n116,101,114,59,60,47,116,105,116,108,101,62,10,60,109,101,116,97,32,34,32,104,\n114,101,102,61,34,104,116,116,112,58,47,47,34,62,60,115,112,97,110,32,99,108,97,\n115,115,61,34,109,101,109,98,101,114,115,32,111,102,32,116,104,101,32,119,105,\n110,100,111,119,46,108,111,99,97,116,105,111,110,118,101,114,116,105,99,97,108,\n45,97,108,105,103,110,58,47,97,62,32,124,32,60,97,32,104,114,101,102,61,34,60,33\n,100,111,99,116,121,112,101,32,104,116,109,108,62,109,101,100,105,97,61,34,115,\n99,114,101,101,110,34,32,60,111,112,116,105,111,110,32,118,97,108,117,101,61,34,\n102,97,118,105,99,111,110,46,105,99,111,34,32,47,62,10,9,9,60,100,105,118,32,99,\n108,97,115,115,61,34,99,104,97,114,97,99,116,101,114,105,115,116,105,99,115,34,\n32,109,101,116,104,111,100,61,34,103,101,116,34,32,47,98,111,100,121,62,10,60,47\n,104,116,109,108,62,10,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,\n100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,112,97,100,100,105,110,\n103,45,98,111,116,116,111,109,58,114,101,112,114,101,115,101,110,116,97,116,105,\n118,101,115,115,117,98,109,105,116,34,32,118,97,108,117,101,61,34,97,108,105,103\n,110,61,34,99,101,110,116,101,114,34,32,116,104,114,111,117,103,104,111,117,116,\n32,116,104,101,32,115,99,105,101,110,99,101,32,102,105,99,116,105,111,110,10,32,\n32,60,100,105,118,32,99,108,97,115,115,61,34,115,117,98,109,105,116,34,32,99,108\n,97,115,115,61,34,111,110,101,32,111,102,32,116,104,101,32,109,111,115,116,32,\n118,97,108,105,103,110,61,34,116,111,112,34,62,60,119,97,115,32,101,115,116,97,\n98,108,105,115,104,101,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10,114\n,101,116,117,114,110,32,102,97,108,115,101,59,34,62,41,46,115,116,121,108,101,46\n,100,105,115,112,108,97,121,98,101,99,97,117,115,101,32,111,102,32,116,104,101,\n32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,102,111,114,109,\n32,97,99,116,105,111,110,61,34,47,125,98,111,100,121,123,109,97,114,103,105,110,\n58,48,59,69,110,99,121,99,108,111,112,101,100,105,97,32,111,102,118,101,114,115,\n105,111,110,32,111,102,32,116,104,101,32,46,99,114,101,97,116,101,69,108,101,109\n,101,110,116,40,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,60,47,100,\n105,118,62,10,60,47,100,105,118,62,10,10,97,100,109,105,110,105,115,116,114,97,\n116,105,118,101,32,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,104,105,\n115,116,111,114,121,32,111,102,32,116,104,101,32,34,62,60,105,110,112,117,116,32\n,116,121,112,101,61,34,112,111,114,116,105,111,110,32,111,102,32,116,104,101,32,\n97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,38,110,98,115,112,59,60,97\n,32,104,114,101,102,61,34,111,116,104,101,114,32,99,111,117,110,116,114,105,101,\n115,34,62,10,60,100,105,118,32,99,108,97,115,115,61,34,60,47,115,112,97,110,62,\n60,47,115,112,97,110,62,60,73,110,32,111,116,104,101,114,32,119,111,114,100,115,\n44,100,105,115,112,108,97,121,58,32,98,108,111,99,107,59,99,111,110,116,114,111,\n108,32,111,102,32,116,104,101,32,105,110,116,114,111,100,117,99,116,105,111,110,\n32,111,102,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,97,115,32,119,101,\n108,108,32,97,115,32,116,104,101,32,105,110,32,114,101,99,101,110,116,32,121,101\n,97,114,115,13,10,9,60,100,105,118,32,99,108,97,115,115,61,34,60,47,100,105,118,\n62,10,9,60,47,100,105,118,62,10,105,110,115,112,105,114,101,100,32,98,121,32,116\n,104,101,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,99,111,109,112,\n97,116,105,98,108,101,32,119,105,116,104,98,101,99,97,109,101,32,107,110,111,119\n,110,32,97,115,32,115,116,121,108,101,61,34,109,97,114,103,105,110,58,46,106,115\n,34,62,60,47,115,99,114,105,112,116,62,60,32,73,110,116,101,114,110,97,116,105,\n111,110,97,108,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,71,101\n,114,109,97,110,32,108,97,110,103,117,97,103,101,32,115,116,121,108,101,61,34,99\n,111,108,111,114,58,35,67,111,109,109,117,110,105,115,116,32,80,97,114,116,121,\n99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,98,111,114,100,101,114\n,61,34,48,34,32,99,101,108,108,32,109,97,114,103,105,110,104,101,105,103,104,116\n,61,34,116,104,101,32,109,97,106,111,114,105,116,121,32,111,102,34,32,97,108,105\n,103,110,61,34,99,101,110,116,101,114,114,101,108,97,116,101,100,32,116,111,32,\n116,104,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,79,114,\n116,104,111,100,111,120,32,67,104,117,114,99,104,115,105,109,105,108,97,114,32,\n116,111,32,116,104,101,32,47,62,10,60,108,105,110,107,32,114,101,108,61,34,115,\n119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,117,110,116,105,108,32,\n104,105,115,32,100,101,97,116,104,125,41,40,41,59,10,60,47,115,99,114,105,112,\n116,62,111,116,104,101,114,32,108,97,110,103,117,97,103,101,115,99,111,109,112,\n97,114,101,100,32,116,111,32,116,104,101,112,111,114,116,105,111,110,115,32,111,\n102,32,116,104,101,116,104,101,32,78,101,116,104,101,114,108,97,110,100,115,116,\n104,101,32,109,111,115,116,32,99,111,109,109,111,110,98,97,99,107,103,114,111,\n117,110,100,58,117,114,108,40,97,114,103,117,101,100,32,116,104,97,116,32,116,\n104,101,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,110,99,108,\n117,100,101,100,32,105,110,32,116,104,101,78,111,114,116,104,32,65,109,101,114,\n105,99,97,110,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,105,110\n,116,101,114,112,114,101,116,97,116,105,111,110,115,116,104,101,32,116,114,97,\n100,105,116,105,111,110,97,108,100,101,118,101,108,111,112,109,101,110,116,32,\n111,102,32,102,114,101,113,117,101,110,116,108,121,32,117,115,101,100,97,32,99,\n111,108,108,101,99,116,105,111,110,32,111,102,118,101,114,121,32,115,105,109,105\n,108,97,114,32,116,111,115,117,114,114,111,117,110,100,105,110,103,32,116,104,\n101,101,120,97,109,112,108,101,32,111,102,32,116,104,105,115,97,108,105,103,110,\n61,34,99,101,110,116,101,114,34,62,119,111,117,108,100,32,104,97,118,101,32,98,\n101,101,110,105,109,97,103,101,95,99,97,112,116,105,111,110,32,61,97,116,116,97,\n99,104,101,100,32,116,111,32,116,104,101,115,117,103,103,101,115,116,105,110,103\n,32,116,104,97,116,105,110,32,116,104,101,32,102,111,114,109,32,111,102,32,105,\n110,118,111,108,118,101,100,32,105,110,32,116,104,101,105,115,32,100,101,114,105\n,118,101,100,32,102,114,111,109,110,97,109,101,100,32,97,102,116,101,114,32,116,\n104,101,73,110,116,114,111,100,117,99,116,105,111,110,32,116,111,114,101,115,116\n,114,105,99,116,105,111,110,115,32,111,110,32,115,116,121,108,101,61,34,119,105,\n100,116,104,58,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,116,104,\n101,32,99,114,101,97,116,105,111,110,32,111,102,109,111,115,116,32,105,109,112,\n111,114,116,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,110,\n100,114,101,115,117,108,116,101,100,32,105,110,32,116,104,101,99,111,108,108,97,\n112,115,101,32,111,102,32,116,104,101,84,104,105,115,32,109,101,97,110,115,32,\n116,104,97,116,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,119,97,\n115,32,114,101,112,108,97,99,101,100,32,98,121,97,110,97,108,121,115,105,115,32,\n111,102,32,116,104,101,105,110,115,112,105,114,97,116,105,111,110,32,102,111,114\n,114,101,103,97,114,100,101,100,32,97,115,32,116,104,101,109,111,115,116,32,115,\n117,99,99,101,115,115,102,117,108,107,110,111,119,110,32,97,115,32,38,113,117,\n111,116,59,97,32,99,111,109,112,114,101,104,101,110,115,105,118,101,72,105,115,\n116,111,114,121,32,111,102,32,116,104,101,32,119,101,114,101,32,99,111,110,115,\n105,100,101,114,101,100,114,101,116,117,114,110,101,100,32,116,111,32,116,104,\n101,97,114,101,32,114,101,102,101,114,114,101,100,32,116,111,85,110,115,111,117,\n114,99,101,100,32,105,109,97,103,101,62,10,9,60,100,105,118,32,99,108,97,115,115\n,61,34,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,115,116,111,112,\n80,114,111,112,97,103,97,116,105,111,110,105,110,116,101,114,101,115,116,32,105,\n110,32,116,104,101,97,118,97,105,108,97,98,105,108,105,116,121,32,111,102,97,112\n,112,101,97,114,115,32,116,111,32,104,97,118,101,101,108,101,99,116,114,111,109,\n97,103,110,101,116,105,99,101,110,97,98,108,101,83,101,114,118,105,99,101,115,40\n,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,73,116,32,105,115,32,\n105,109,112,111,114,116,97,110,116,60,47,115,99,114,105,112,116,62,60,47,100,105\n,118,62,102,117,110,99,116,105,111,110,40,41,123,118,97,114,32,114,101,108,97,\n116,105,118,101,32,116,111,32,116,104,101,97,115,32,97,32,114,101,115,117,108,\n116,32,111,102,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,102,70,\n111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,109,101,116,104,111,100,\n61,34,112,111,115,116,34,32,119,97,115,32,102,111,108,108,111,119,101,100,32,98,\n121,38,97,109,112,59,109,100,97,115,104,59,32,116,104,101,116,104,101,32,97,112,\n112,108,105,99,97,116,105,111,110,106,115,34,62,60,47,115,99,114,105,112,116,62,\n13,10,117,108,62,60,47,100,105,118,62,60,47,100,105,118,62,97,102,116,101,114,32\n,116,104,101,32,100,101,97,116,104,119,105,116,104,32,114,101,115,112,101,99,116\n,32,116,111,115,116,121,108,101,61,34,112,97,100,100,105,110,103,58,105,115,32,\n112,97,114,116,105,99,117,108,97,114,108,121,100,105,115,112,108,97,121,58,105,\n110,108,105,110,101,59,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,105\n,115,32,100,105,118,105,100,101,100,32,105,110,116,111,228,184,173,230,150,135,\n32,40,231,174,128,228,189,147,41,114,101,115,112,111,110,115,97,98,105,108,105,\n100,97,100,97,100,109,105,110,105,115,116,114,97,99,105,195,179,110,105,110,116,\n101,114,110,97,99,105,111,110,97,108,101,115,99,111,114,114,101,115,112,111,110,\n100,105,101,110,116,101,224,164,137,224,164,170,224,164,175,224,165,139,224,164,\n151,224,164,170,224,165,130,224,164,176,224,165,141,224,164,181,224,164,185,224,\n164,174,224,164,190,224,164,176,224,165,135,224,164,178,224,165,139,224,164,151,\n224,165,139,224,164,130,224,164,154,224,165,129,224,164,168,224,164,190,224,164,\n181,224,164,178,224,165,135,224,164,149,224,164,191,224,164,168,224,164,184,224,\n164,176,224,164,149,224,164,190,224,164,176,224,164,170,224,165,129,224,164,178,\n224,164,191,224,164,184,224,164,150,224,165,139,224,164,156,224,165,135,224,164,\n130,224,164,154,224,164,190,224,164,185,224,164,191,224,164,143,224,164,173,224,\n165,135,224,164,156,224,165,135,224,164,130,224,164,182,224,164,190,224,164,174,\n224,164,191,224,164,178,224,164,185,224,164,174,224,164,190,224,164,176,224,165,\n128,224,164,156,224,164,190,224,164,151,224,164,176,224,164,163,224,164,172,224,\n164,168,224,164,190,224,164,168,224,165,135,224,164,149,224,165,129,224,164,174,\n224,164,190,224,164,176,224,164,172,224,165,141,224,164,178,224,165,137,224,164,\n151,224,164,174,224,164,190,224,164,178,224,164,191,224,164,149,224,164,174,224,\n164,185,224,164,191,224,164,178,224,164,190,224,164,170,224,165,131,224,164,183,\n224,165,141,224,164,160,224,164,172,224,164,162,224,164,188,224,164,164,224,165,\n135,224,164,173,224,164,190,224,164,156,224,164,170,224,164,190,224,164,149,224,\n165,141,224,164,178,224,164,191,224,164,149,224,164,159,224,165,141,224,164,176,\n224,165,135,224,164,168,224,164,150,224,164,191,224,164,178,224,164,190,224,164,\n171,224,164,166,224,165,140,224,164,176,224,164,190,224,164,168,224,164,174,224,\n164,190,224,164,174,224,164,178,224,165,135,224,164,174,224,164,164,224,164,166,\n224,164,190,224,164,168,224,164,172,224,164,190,224,164,156,224,164,190,224,164,\n176,224,164,181,224,164,191,224,164,149,224,164,190,224,164,184,224,164,149,224,\n165,141,224,164,175,224,165,139,224,164,130,224,164,154,224,164,190,224,164,185,\n224,164,164,224,165,135,224,164,170,224,164,185,224,165,129,224,164,129,224,164,\n154,224,164,172,224,164,164,224,164,190,224,164,175,224,164,190,224,164,184,224,\n164,130,224,164,181,224,164,190,224,164,166,224,164,166,224,165,135,224,164,150,\n224,164,168,224,165,135,224,164,170,224,164,191,224,164,155,224,164,178,224,165,\n135,224,164,181,224,164,191,224,164,182,224,165,135,224,164,183,224,164,176,224,\n164,190,224,164,156,224,165,141,224,164,175,224,164,137,224,164,164,224,165,141,\n224,164,164,224,164,176,224,164,174,224,165,129,224,164,130,224,164,172,224,164,\n136,224,164,166,224,165,139,224,164,168,224,165,139,224,164,130,224,164,137,224,\n164,170,224,164,149,224,164,176,224,164,163,224,164,170,224,164,162,224,164,188,\n224,165,135,224,164,130,224,164,184,224,165,141,224,164,165,224,164,191,224,164,\n164,224,164,171,224,164,191,224,164,178,224,165,141,224,164,174,224,164,174,224,\n165,129,224,164,150,224,165,141,224,164,175,224,164,133,224,164,154,224,165,141,\n224,164,155,224,164,190,224,164,155,224,165,130,224,164,159,224,164,164,224,165,\n128,224,164,184,224,164,130,224,164,151,224,165,128,224,164,164,224,164,156,224,\n164,190,224,164,143,224,164,151,224,164,190,224,164,181,224,164,191,224,164,173,\n224,164,190,224,164,151,224,164,152,224,164,163,224,165,141,224,164,159,224,165,\n135,224,164,166,224,165,130,224,164,184,224,164,176,224,165,135,224,164,166,224,\n164,191,224,164,168,224,165,139,224,164,130,224,164,185,224,164,164,224,165,141,\n224,164,175,224,164,190,224,164,184,224,165,135,224,164,149,224,165,141,224,164,\n184,224,164,151,224,164,190,224,164,130,224,164,167,224,165,128,224,164,181,224,\n164,191,224,164,182,224,165,141,224,164,181,224,164,176,224,164,190,224,164,164,\n224,165,135,224,164,130,224,164,166,224,165,136,224,164,159,224,165,141,224,164,\n184,224,164,168,224,164,149,224,165,141,224,164,182,224,164,190,224,164,184,224,\n164,190,224,164,174,224,164,168,224,165,135,224,164,133,224,164,166,224,164,190,\n224,164,178,224,164,164,224,164,172,224,164,191,224,164,156,224,164,178,224,165,\n128,224,164,170,224,165,129,224,164,176,224,165,130,224,164,183,224,164,185,224,\n164,191,224,164,130,224,164,166,224,165,128,224,164,174,224,164,191,224,164,164,\n224,165,141,224,164,176,224,164,149,224,164,181,224,164,191,224,164,164,224,164,\n190,224,164,176,224,165,129,224,164,170,224,164,175,224,165,135,224,164,184,224,\n165,141,224,164,165,224,164,190,224,164,168,224,164,149,224,164,176,224,165,139,\n224,164,161,224,164,188,224,164,174,224,165,129,224,164,149,224,165,141,224,164,\n164,224,164,175,224,165,139,224,164,156,224,164,168,224,164,190,224,164,149,224,\n165,131,224,164,170,224,164,175,224,164,190,224,164,170,224,165,139,224,164,184,\n224,165,141,224,164,159,224,164,152,224,164,176,224,165,135,224,164,178,224,165,\n130,224,164,149,224,164,190,224,164,176,224,165,141,224,164,175,224,164,181,224,\n164,191,224,164,154,224,164,190,224,164,176,224,164,184,224,165,130,224,164,154,\n224,164,168,224,164,190,224,164,174,224,165,130,224,164,178,224,165,141,224,164,\n175,224,164,166,224,165,135,224,164,150,224,165,135,224,164,130,224,164,185,224,\n164,174,224,165,135,224,164,182,224,164,190,224,164,184,224,165,141,224,164,149,\n224,165,130,224,164,178,224,164,174,224,165,136,224,164,130,224,164,168,224,165,\n135,224,164,164,224,165,136,224,164,175,224,164,190,224,164,176,224,164,156,224,\n164,191,224,164,184,224,164,149,224,165,135,114,115,115,43,120,109,108,34,32,116\n,105,116,108,101,61,34,45,116,121,112,101,34,32,99,111,110,116,101,110,116,61,34\n,116,105,116,108,101,34,32,99,111,110,116,101,110,116,61,34,97,116,32,116,104,\n101,32,115,97,109,101,32,116,105,109,101,46,106,115,34,62,60,47,115,99,114,105,\n112,116,62,10,60,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,32,60,47\n,115,112,97,110,62,60,47,97,62,60,47,108,105,62,118,101,114,116,105,99,97,108,45\n,97,108,105,103,110,58,116,47,106,113,117,101,114,121,46,109,105,110,46,106,115,\n34,62,46,99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,32,115,116,121,\n108,101,61,34,112,97,100,100,105,110,103,45,125,41,40,41,59,10,60,47,115,99,114,\n105,112,116,62,10,60,47,115,112,97,110,62,60,97,32,104,114,101,102,61,34,60,97,\n32,104,114,101,102,61,34,104,116,116,112,58,47,47,41,59,32,114,101,116,117,114,\n110,32,102,97,108,115,101,59,116,101,120,116,45,100,101,99,111,114,97,116,105,\n111,110,58,32,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,98,111,114,\n100,101,114,45,99,111,108,108,97,112,115,101,58,97,115,115,111,99,105,97,116,101\n,100,32,119,105,116,104,32,66,97,104,97,115,97,32,73,110,100,111,110,101,115,105\n,97,69,110,103,108,105,115,104,32,108,97,110,103,117,97,103,101,60,116,101,120,\n116,32,120,109,108,58,115,112,97,99,101,61,46,103,105,102,34,32,98,111,114,100,\n101,114,61,34,48,34,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,10,111,\n118,101,114,102,108,111,119,58,104,105,100,100,101,110,59,105,109,103,32,115,114\n,99,61,34,104,116,116,112,58,47,47,97,100,100,69,118,101,110,116,76,105,115,116,\n101,110,101,114,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,32,115\n,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,47,102,97,118,105,99,111,\n110,46,105,99,111,34,32,47,62,111,112,101,114,97,116,105,110,103,32,115,121,115,\n116,101,109,34,32,115,116,121,108,101,61,34,119,105,100,116,104,58,49,116,97,114\n,103,101,116,61,34,95,98,108,97,110,107,34,62,83,116,97,116,101,32,85,110,105,\n118,101,114,115,105,116,121,116,101,120,116,45,97,108,105,103,110,58,108,101,102\n,116,59,10,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,44,32,105,\n110,99,108,117,100,105,110,103,32,116,104,101,32,97,114,111,117,110,100,32,116,\n104,101,32,119,111,114,108,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10\n,60,34,32,115,116,121,108,101,61,34,104,101,105,103,104,116,58,59,111,118,101,\n114,102,108,111,119,58,104,105,100,100,101,110,109,111,114,101,32,105,110,102,\n111,114,109,97,116,105,111,110,97,110,32,105,110,116,101,114,110,97,116,105,111,\n110,97,108,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,111,110,101\n,32,111,102,32,116,104,101,32,102,105,114,115,116,99,97,110,32,98,101,32,102,111\n,117,110,100,32,105,110,32,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,\n100,105,115,112,108,97,121,58,32,110,111,110,101,59,34,62,34,32,47,62,10,60,108,\n105,110,107,32,114,101,108,61,34,10,32,32,40,102,117,110,99,116,105,111,110,40,\n41,32,123,116,104,101,32,49,53,116,104,32,99,101,110,116,117,114,121,46,112,114,\n101,118,101,110,116,68,101,102,97,117,108,116,40,108,97,114,103,101,32,110,117,\n109,98,101,114,32,111,102,32,66,121,122,97,110,116,105,110,101,32,69,109,112,105\n,114,101,46,106,112,103,124,116,104,117,109,98,124,108,101,102,116,124,118,97,\n115,116,32,109,97,106,111,114,105,116,121,32,111,102,109,97,106,111,114,105,116,\n121,32,111,102,32,116,104,101,32,32,97,108,105,103,110,61,34,99,101,110,116,101,\n114,34,62,85,110,105,118,101,114,115,105,116,121,32,80,114,101,115,115,100,111,\n109,105,110,97,116,101,100,32,98,121,32,116,104,101,83,101,99,111,110,100,32,87,\n111,114,108,100,32,87,97,114,100,105,115,116,114,105,98,117,116,105,111,110,32,\n111,102,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,116,104,\n101,32,114,101,115,116,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101,\n114,105,122,101,100,32,98,121,32,114,101,108,61,34,110,111,102,111,108,108,111,\n119,34,62,100,101,114,105,118,101,115,32,102,114,111,109,32,116,104,101,114,97,\n116,104,101,114,32,116,104,97,110,32,116,104,101,32,97,32,99,111,109,98,105,110,\n97,116,105,111,110,32,111,102,115,116,121,108,101,61,34,119,105,100,116,104,58,\n49,48,48,69,110,103,108,105,115,104,45,115,112,101,97,107,105,110,103,99,111,109\n,112,117,116,101,114,32,115,99,105,101,110,99,101,98,111,114,100,101,114,61,34,\n48,34,32,97,108,116,61,34,116,104,101,32,101,120,105,115,116,101,110,99,101,32,\n111,102,68,101,109,111,99,114,97,116,105,99,32,80,97,114,116,121,34,32,115,116,\n121,108,101,61,34,109,97,114,103,105,110,45,70,111,114,32,116,104,105,115,32,114\n,101,97,115,111,110,44,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,9,115\n,66,121,84,97,103,78,97,109,101,40,115,41,91,48,93,106,115,34,62,60,47,115,99,\n114,105,112,116,62,13,10,60,46,106,115,34,62,60,47,115,99,114,105,112,116,62,13,\n10,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,39,32,97,108,116,61\n,39,39,32,99,108,97,115,115,61,39,102,111,114,109,97,116,105,111,110,32,111,102,\n32,116,104,101,118,101,114,115,105,111,110,115,32,111,102,32,116,104,101,32,60,\n47,97,62,60,47,100,105,118,62,60,47,100,105,118,62,47,112,97,103,101,62,10,32,32\n,60,112,97,103,101,62,10,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,\n116,98,101,99,97,109,101,32,116,104,101,32,102,105,114,115,116,98,97,104,97,115,\n97,32,73,110,100,111,110,101,115,105,97,101,110,103,108,105,115,104,32,40,115,\n105,109,112,108,101,41,206,149,206,187,206,187,206,183,206,189,206,185,206,186,\n206,172,209,133,209,128,208,178,208,176,209,130,209,129,208,186,208,184,208,186,\n208,190,208,188,208,191,208,176,208,189,208,184,208,184,209,143,208,178,208,187,\n209,143,208,181,209,130,209,129,209,143,208,148,208,190,208,177,208,176,208,178,\n208,184,209,130,209,140,209,135,208,181,208,187,208,190,208,178,208,181,208,186,\n208,176,209,128,208,176,208,183,208,178,208,184,209,130,208,184,209,143,208,152,\n208,189,209,130,208,181,209,128,208,189,208,181,209,130,208,158,209,130,208,178,\n208,181,209,130,208,184,209,130,209,140,208,189,208,176,208,191,209,128,208,184,\n208,188,208,181,209,128,208,184,208,189,209,130,208,181,209,128,208,189,208,181,\n209,130,208,186,208,190,209,130,208,190,209,128,208,190,208,179,208,190,209,129,\n209,130,209,128,208,176,208,189,208,184,209,134,209,139,208,186,208,176,209,135,\n208,181,209,129,209,130,208,178,208,181,209,131,209,129,208,187,208,190,208,178,\n208,184,209,143,209,133,208,191,209,128,208,190,208,177,208,187,208,181,208,188,\n209,139,208,191,208,190,208,187,209,131,209,135,208,184,209,130,209,140,209,143,\n208,178,208,187,209,143,209,142,209,130,209,129,209,143,208,189,208,176,208,184,\n208,177,208,190,208,187,208,181,208,181,208,186,208,190,208,188,208,191,208,176,\n208,189,208,184,209,143,208,178,208,189,208,184,208,188,208,176,208,189,208,184,\n208,181,209,129,209,128,208,181,208,180,209,129,209,130,208,178,208,176,216,167,\n217,132,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,177,\n216,166,217,138,216,179,217,138,216,169,216,167,217,132,216,167,217,134,216,170,\n217,130,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216,167,216,170,\n217,131,216,167,217,132,216,179,217,138,216,167,216,177,216,167,216,170,216,167,\n217,132,217,133,217,131,216,170,217,136,216,168,216,169,216,167,217,132,216,179,\n216,185,217,136,216,175,217,138,216,169,216,167,216,173,216,181,216,167,216,166,\n217,138,216,167,216,170,216,167,217,132,216,185,216,167,217,132,217,133,217,138,\n216,169,216,167,217,132,216,181,217,136,216,170,217,138,216,167,216,170,216,167,\n217,132,216,167,217,134,216,170,216,177,217,134,216,170,216,167,217,132,216,170,\n216,181,216,167,217,133,217,138,217,133,216,167,217,132,216,165,216,179,217,132,\n216,167,217,133,217,138,216,167,217,132,217,133,216,180,216,167,216,177,217,131,\n216,169,216,167,217,132,217,133,216,177,216,166,217,138,216,167,216,170,114,111,\n98,111,116,115,34,32,99,111,110,116,101,110,116,61,34,60,100,105,118,32,105,100,\n61,34,102,111,111,116,101,114,34,62,116,104,101,32,85,110,105,116,101,100,32,83,\n116,97,116,101,115,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,\n46,106,112,103,124,114,105,103,104,116,124,116,104,117,109,98,124,46,106,115,34,\n62,60,47,115,99,114,105,112,116,62,13,10,60,108,111,99,97,116,105,111,110,46,112\n,114,111,116,111,99,111,108,102,114,97,109,101,98,111,114,100,101,114,61,34,48,\n34,32,115,34,32,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,60,47,97,62,\n60,47,100,105,118,62,60,47,100,105,118,62,60,102,111,110,116,45,119,101,105,103,\n104,116,58,98,111,108,100,59,38,113,117,111,116,59,32,97,110,100,32,38,113,117,\n111,116,59,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,109,\n97,114,103,105,110,58,48,59,112,97,100,100,105,110,103,58,34,32,114,101,108,61,\n34,110,111,102,111,108,108,111,119,34,32,80,114,101,115,105,100,101,110,116,32,\n111,102,32,116,104,101,32,116,119,101,110,116,105,101,116,104,32,99,101,110,116,\n117,114,121,101,118,105,115,105,111,110,62,10,32,32,60,47,112,97,103,101,73,110,\n116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,97,46,97,115,121,110,\n99,32,61,32,116,114,117,101,59,13,10,105,110,102,111,114,109,97,116,105,111,110,\n32,97,98,111,117,116,60,100,105,118,32,105,100,61,34,104,101,97,100,101,114,34,\n62,34,32,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,60,97,32,104,114,\n101,102,61,34,104,116,116,112,115,58,47,47,60,100,105,118,32,105,100,61,34,99,\n111,110,116,101,110,116,34,60,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10\n,60,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,60,105,109,\n103,32,115,114,99,61,39,104,116,116,112,58,47,47,97,99,99,111,114,100,105,110,\n103,32,116,111,32,116,104,101,32,10,60,47,98,111,100,121,62,10,60,47,104,116,109\n,108,62,10,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,115,\n99,114,105,112,116,32,108,97,110,103,117,97,103,101,61,34,65,114,105,97,108,44,\n32,72,101,108,118,101,116,105,99,97,44,60,47,97,62,60,115,112,97,110,32,99,108,\n97,115,115,61,34,60,47,115,99,114,105,112,116,62,60,115,99,114,105,112,116,32,\n112,111,108,105,116,105,99,97,108,32,112,97,114,116,105,101,115,116,100,62,60,47\n,116,114,62,60,47,116,97,98,108,101,62,60,104,114,101,102,61,34,104,116,116,112,\n58,47,47,119,119,119,46,105,110,116,101,114,112,114,101,116,97,116,105,111,110,\n32,111,102,114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,100,\n111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,99,104,97,114,115,101\n,116,61,34,117,116,102,45,56,34,62,10,98,101,103,105,110,110,105,110,103,32,111,\n102,32,116,104,101,32,114,101,118,101,97,108,101,100,32,116,104,97,116,32,116,\n104,101,116,101,108,101,118,105,115,105,111,110,32,115,101,114,105,101,115,34,32\n,114,101,108,61,34,110,111,102,111,108,108,111,119,34,62,32,116,97,114,103,101,\n116,61,34,95,98,108,97,110,107,34,62,99,108,97,105,109,105,110,103,32,116,104,97\n,116,32,116,104,101,104,116,116,112,37,51,65,37,50,70,37,50,70,119,119,119,46,\n109,97,110,105,102,101,115,116,97,116,105,111,110,115,32,111,102,80,114,105,109,\n101,32,77,105,110,105,115,116,101,114,32,111,102,105,110,102,108,117,101,110,99,\n101,100,32,98,121,32,116,104,101,99,108,97,115,115,61,34,99,108,101,97,114,102,\n105,120,34,62,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10,13,10,116,104,\n114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,67,104,117,114,99,104,\n32,111,102,32,69,110,103,108,97,110,100,111,102,32,78,111,114,116,104,32,67,97,\n114,111,108,105,110,97,115,113,117,97,114,101,32,107,105,108,111,109,101,116,114\n,101,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,100,105\n,115,116,105,110,99,116,32,102,114,111,109,32,116,104,101,99,111,109,109,111,110\n,108,121,32,107,110,111,119,110,32,97,115,80,104,111,110,101,116,105,99,32,65,\n108,112,104,97,98,101,116,100,101,99,108,97,114,101,100,32,116,104,97,116,32,116\n,104,101,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,66,101,\n110,106,97,109,105,110,32,70,114,97,110,107,108,105,110,114,111,108,101,45,112,\n108,97,121,105,110,103,32,103,97,109,101,116,104,101,32,85,110,105,118,101,114,\n115,105,116,121,32,111,102,105,110,32,87,101,115,116,101,114,110,32,69,117,114,\n111,112,101,112,101,114,115,111,110,97,108,32,99,111,109,112,117,116,101,114,80,\n114,111,106,101,99,116,32,71,117,116,101,110,98,101,114,103,114,101,103,97,114,\n100,108,101,115,115,32,111,102,32,116,104,101,104,97,115,32,98,101,101,110,32,\n112,114,111,112,111,115,101,100,116,111,103,101,116,104,101,114,32,119,105,116,\n104,32,116,104,101,62,60,47,108,105,62,60,108,105,32,99,108,97,115,115,61,34,105\n,110,32,115,111,109,101,32,99,111,117,110,116,114,105,101,115,109,105,110,46,106\n,115,34,62,60,47,115,99,114,105,112,116,62,111,102,32,116,104,101,32,112,111,112\n,117,108,97,116,105,111,110,111,102,102,105,99,105,97,108,32,108,97,110,103,117,\n97,103,101,60,105,109,103,32,115,114,99,61,34,105,109,97,103,101,115,47,105,100,\n101,110,116,105,102,105,101,100,32,98,121,32,116,104,101,110,97,116,117,114,97,\n108,32,114,101,115,111,117,114,99,101,115,99,108,97,115,115,105,102,105,99,97,\n116,105,111,110,32,111,102,99,97,110,32,98,101,32,99,111,110,115,105,100,101,114\n,101,100,113,117,97,110,116,117,109,32,109,101,99,104,97,110,105,99,115,78,101,\n118,101,114,116,104,101,108,101,115,115,44,32,116,104,101,109,105,108,108,105,\n111,110,32,121,101,97,114,115,32,97,103,111,60,47,98,111,100,121,62,13,10,60,47,\n104,116,109,108,62,13,206,149,206,187,206,187,206,183,206,189,206,185,206,186,\n206,172,10,116,97,107,101,32,97,100,118,97,110,116,97,103,101,32,111,102,97,110,\n100,44,32,97,99,99,111,114,100,105,110,103,32,116,111,97,116,116,114,105,98,117,\n116,101,100,32,116,111,32,116,104,101,77,105,99,114,111,115,111,102,116,32,87,\n105,110,100,111,119,115,116,104,101,32,102,105,114,115,116,32,99,101,110,116,117\n,114,121,117,110,100,101,114,32,116,104,101,32,99,111,110,116,114,111,108,100,\n105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,115,104,111,114,116,\n108,121,32,97,102,116,101,114,32,116,104,101,110,111,116,97,98,108,101,32,101,\n120,99,101,112,116,105,111,110,116,101,110,115,32,111,102,32,116,104,111,117,115\n,97,110,100,115,115,101,118,101,114,97,108,32,100,105,102,102,101,114,101,110,\n116,97,114,111,117,110,100,32,116,104,101,32,119,111,114,108,100,46,114,101,97,\n99,104,105,110,103,32,109,105,108,105,116,97,114,121,105,115,111,108,97,116,101,\n100,32,102,114,111,109,32,116,104,101,111,112,112,111,115,105,116,105,111,110,32\n,116,111,32,116,104,101,116,104,101,32,79,108,100,32,84,101,115,116,97,109,101,\n110,116,65,102,114,105,99,97,110,32,65,109,101,114,105,99,97,110,115,105,110,115\n,101,114,116,101,100,32,105,110,116,111,32,116,104,101,115,101,112,97,114,97,116\n,101,32,102,114,111,109,32,116,104,101,109,101,116,114,111,112,111,108,105,116,\n97,110,32,97,114,101,97,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,\n108,101,97,99,107,110,111,119,108,101,100,103,101,100,32,116,104,97,116,97,114,\n103,117,97,98,108,121,32,116,104,101,32,109,111,115,116,116,121,112,101,61,34,\n116,101,120,116,47,99,115,115,34,62,10,116,104,101,32,73,110,116,101,114,110,97,\n116,105,111,110,97,108,65,99,99,111,114,100,105,110,103,32,116,111,32,116,104,\n101,32,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,99,111,105,110\n,99,105,100,101,32,119,105,116,104,32,116,104,101,116,119,111,45,116,104,105,114\n,100,115,32,111,102,32,116,104,101,68,117,114,105,110,103,32,116,104,105,115,32,\n116,105,109,101,44,100,117,114,105,110,103,32,116,104,101,32,112,101,114,105,111\n,100,97,110,110,111,117,110,99,101,100,32,116,104,97,116,32,104,101,116,104,101,\n32,105,110,116,101,114,110,97,116,105,111,110,97,108,97,110,100,32,109,111,114,\n101,32,114,101,99,101,110,116,108,121,98,101,108,105,101,118,101,100,32,116,104,\n97,116,32,116,104,101,99,111,110,115,99,105,111,117,115,110,101,115,115,32,97,\n110,100,102,111,114,109,101,114,108,121,32,107,110,111,119,110,32,97,115,115,117\n,114,114,111,117,110,100,101,100,32,98,121,32,116,104,101,102,105,114,115,116,32\n,97,112,112,101,97,114,101,100,32,105,110,111,99,99,97,115,105,111,110,97,108,\n108,121,32,117,115,101,100,112,111,115,105,116,105,111,110,58,97,98,115,111,108,\n117,116,101,59,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,112\n,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,116,101,120,\n116,45,97,108,105,103,110,58,99,101,110,116,101,114,59,106,97,120,47,108,105,98,\n115,47,106,113,117,101,114,121,47,49,46,98,97,99,107,103,114,111,117,110,100,45,\n99,111,108,111,114,58,35,116,121,112,101,61,34,97,112,112,108,105,99,97,116,105,\n111,110,47,97,110,103,117,97,103,101,34,32,99,111,110,116,101,110,116,61,34,60,\n109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,80,114,105,118,97\n,99,121,32,80,111,108,105,99,121,60,47,97,62,101,40,34,37,51,67,115,99,114,105,\n112,116,32,115,114,99,61,39,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,\n107,34,62,79,110,32,116,104,101,32,111,116,104,101,114,32,104,97,110,100,44,46,\n106,112,103,124,116,104,117,109,98,124,114,105,103,104,116,124,50,60,47,100,105,\n118,62,60,100,105,118,32,99,108,97,115,115,61,34,60,100,105,118,32,115,116,121,\n108,101,61,34,102,108,111,97,116,58,110,105,110,101,116,101,101,110,116,104,32,\n99,101,110,116,117,114,121,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,\n62,13,10,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,115,59,116,\n101,120,116,45,97,108,105,103,110,58,99,101,110,116,101,114,102,111,110,116,45,\n119,101,105,103,104,116,58,32,98,111,108,100,59,32,65,99,99,111,114,100,105,110,\n103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,\n101,116,119,101,101,110,34,32,102,114,97,109,101,98,111,114,100,101,114,61,34,48\n,34,32,34,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,108,\n105,110,107,32,104,114,101,102,61,34,104,116,116,112,58,47,47,104,116,109,108,52\n,47,108,111,111,115,101,46,100,116,100,34,62,10,100,117,114,105,110,103,32,116,\n104,105,115,32,112,101,114,105,111,100,60,47,116,100,62,60,47,116,114,62,60,47,\n116,97,98,108,101,62,99,108,111,115,101,108,121,32,114,101,108,97,116,101,100,32\n,116,111,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,59\n,102,111,110,116,45,119,101,105,103,104,116,58,98,111,108,100,59,105,110,112,117\n,116,32,116,121,112,101,61,34,116,101,120,116,34,32,60,115,112,97,110,32,115,116\n,121,108,101,61,34,102,111,110,116,45,111,110,114,101,97,100,121,115,116,97,116,\n101,99,104,97,110,103,101,9,60,100,105,118,32,99,108,97,115,115,61,34,99,108,101\n,97,114,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,32,70\n,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,32,119,105,100,\n101,32,118,97,114,105,101,116,121,32,111,102,32,60,33,68,79,67,84,89,80,69,32,\n104,116,109,108,62,13,10,60,38,110,98,115,112,59,38,110,98,115,112,59,38,110,98,\n115,112,59,34,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,115,116\n,121,108,101,61,34,102,108,111,97,116,58,108,101,102,116,59,99,111,110,99,101,\n114,110,101,100,32,119,105,116,104,32,116,104,101,61,104,116,116,112,37,51,65,37\n,50,70,37,50,70,119,119,119,46,105,110,32,112,111,112,117,108,97,114,32,99,117,\n108,116,117,114,101,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47\n,62,105,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,72,97,114\n,118,97,114,100,32,85,110,105,118,101,114,115,105,116,121,116,121,108,101,115,\n104,101,101,116,34,32,104,114,101,102,61,34,47,116,104,101,32,109,97,105,110,32,\n99,104,97,114,97,99,116,101,114,79,120,102,111,114,100,32,85,110,105,118,101,114\n,115,105,116,121,32,32,110,97,109,101,61,34,107,101,121,119,111,114,100,115,34,\n32,99,115,116,121,108,101,61,34,116,101,120,116,45,97,108,105,103,110,58,116,104\n,101,32,85,110,105,116,101,100,32,75,105,110,103,100,111,109,102,101,100,101,114\n,97,108,32,103,111,118,101,114,110,109,101,110,116,60,100,105,118,32,115,116,121\n,108,101,61,34,109,97,114,103,105,110,32,100,101,112,101,110,100,105,110,103,32,\n111,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,\n32,116,104,101,60,100,105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,\n46,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,100,101,115,116,\n114,117,99,116,105,111,110,32,111,102,32,116,104,101,115,108,105,103,104,116,108\n,121,32,100,105,102,102,101,114,101,110,116,105,110,32,97,99,99,111,114,100,97,\n110,99,101,32,119,105,116,104,116,101,108,101,99,111,109,109,117,110,105,99,97,\n116,105,111,110,115,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,116,\n104,101,115,104,111,114,116,108,121,32,116,104,101,114,101,97,102,116,101,114,\n101,115,112,101,99,105,97,108,108,121,32,105,110,32,116,104,101,32,69,117,114,\n111,112,101,97,110,32,99,111,117,110,116,114,105,101,115,72,111,119,101,118,101,\n114,44,32,116,104,101,114,101,32,97,114,101,115,114,99,61,34,104,116,116,112,58,\n47,47,115,116,97,116,105,99,115,117,103,103,101,115,116,101,100,32,116,104,97,\n116,32,116,104,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,\n46,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,84,101,108,\n101,99,111,109,109,117,110,105,99,97,116,105,111,110,115,34,32,114,101,108,61,34\n,110,111,102,111,108,108,111,119,34,32,116,72,111,108,121,32,82,111,109,97,110,\n32,69,109,112,101,114,111,114,97,108,109,111,115,116,32,101,120,99,108,117,115,\n105,118,101,108,121,34,32,98,111,114,100,101,114,61,34,48,34,32,97,108,116,61,34\n,83,101,99,114,101,116,97,114,121,32,111,102,32,83,116,97,116,101,99,117,108,109\n,105,110,97,116,105,110,103,32,105,110,32,116,104,101,67,73,65,32,87,111,114,108\n,100,32,70,97,99,116,98,111,111,107,116,104,101,32,109,111,115,116,32,105,109,\n112,111,114,116,97,110,116,97,110,110,105,118,101,114,115,97,114,121,32,111,102,\n32,116,104,101,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45\n,60,108,105,62,60,101,109,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,65\n,116,108,97,110,116,105,99,32,79,99,101,97,110,115,116,114,105,99,116,108,121,32\n,115,112,101,97,107,105,110,103,44,115,104,111,114,116,108,121,32,98,101,102,111\n,114,101,32,116,104,101,100,105,102,102,101,114,101,110,116,32,116,121,112,101,\n115,32,111,102,116,104,101,32,79,116,116,111,109,97,110,32,69,109,112,105,114,\n101,62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,65,110,32,73,\n110,116,114,111,100,117,99,116,105,111,110,32,116,111,99,111,110,115,101,113,117\n,101,110,99,101,32,111,102,32,116,104,101,100,101,112,97,114,116,117,114,101,32,\n102,114,111,109,32,116,104,101,67,111,110,102,101,100,101,114,97,116,101,32,83,\n116,97,116,101,115,105,110,100,105,103,101,110,111,117,115,32,112,101,111,112,\n108,101,115,80,114,111,99,101,101,100,105,110,103,115,32,111,102,32,116,104,101,\n105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,104,101,116,104,101\n,111,114,105,101,115,32,104,97,118,101,32,98,101,101,110,105,110,118,111,108,118\n,101,109,101,110,116,32,105,110,32,116,104,101,100,105,118,105,100,101,100,32,\n105,110,116,111,32,116,104,114,101,101,97,100,106,97,99,101,110,116,32,99,111,\n117,110,116,114,105,101,115,105,115,32,114,101,115,112,111,110,115,105,98,108,\n101,32,102,111,114,100,105,115,115,111,108,117,116,105,111,110,32,111,102,32,116\n,104,101,99,111,108,108,97,98,111,114,97,116,105,111,110,32,119,105,116,104,119,\n105,100,101,108,121,32,114,101,103,97,114,100,101,100,32,97,115,104,105,115,32,\n99,111,110,116,101,109,112,111,114,97,114,105,101,115,102,111,117,110,100,105,\n110,103,32,109,101,109,98,101,114,32,111,102,68,111,109,105,110,105,99,97,110,32\n,82,101,112,117,98,108,105,99,103,101,110,101,114,97,108,108,121,32,97,99,99,101\n,112,116,101,100,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,32,\n111,102,97,114,101,32,97,108,115,111,32,97,118,97,105,108,97,98,108,101,117,110,\n100,101,114,32,99,111,110,115,116,114,117,99,116,105,111,110,114,101,115,116,111\n,114,97,116,105,111,110,32,111,102,32,116,104,101,116,104,101,32,103,101,110,101\n,114,97,108,32,112,117,98,108,105,99,105,115,32,97,108,109,111,115,116,32,101,\n110,116,105,114,101,108,121,112,97,115,115,101,115,32,116,104,114,111,117,103,\n104,32,116,104,101,104,97,115,32,98,101,101,110,32,115,117,103,103,101,115,116,\n101,100,99,111,109,112,117,116,101,114,32,97,110,100,32,118,105,100,101,111,71,\n101,114,109,97,110,105,99,32,108,97,110,103,117,97,103,101,115,32,97,99,99,111,\n114,100,105,110,103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110\n,116,32,102,114,111,109,32,116,104,101,115,104,111,114,116,108,121,32,97,102,116\n,101,114,119,97,114,100,115,104,114,101,102,61,34,104,116,116,112,115,58,47,47,\n119,119,119,46,114,101,99,101,110,116,32,100,101,118,101,108,111,112,109,101,110\n,116,66,111,97,114,100,32,111,102,32,68,105,114,101,99,116,111,114,115,60,100,\n105,118,32,99,108,97,115,115,61,34,115,101,97,114,99,104,124,32,60,97,32,104,114\n,101,102,61,34,104,116,116,112,58,47,47,73,110,32,112,97,114,116,105,99,117,108,\n97,114,44,32,116,104,101,77,117,108,116,105,112,108,101,32,102,111,111,116,110,\n111,116,101,115,111,114,32,111,116,104,101,114,32,115,117,98,115,116,97,110,99,\n101,116,104,111,117,115,97,110,100,115,32,111,102,32,121,101,97,114,115,116,114,\n97,110,115,108,97,116,105,111,110,32,111,102,32,116,104,101,60,47,100,105,118,62\n,13,10,60,47,100,105,118,62,13,10,13,10,60,97,32,104,114,101,102,61,34,105,110,\n100,101,120,46,112,104,112,119,97,115,32,101,115,116,97,98,108,105,115,104,101,\n100,32,105,110,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,\n112,97,114,116,105,99,105,112,97,116,101,32,105,110,32,116,104,101,97,32,115,116\n,114,111,110,103,32,105,110,102,108,117,101,110,99,101,115,116,121,108,101,61,34\n,109,97,114,103,105,110,45,116,111,112,58,114,101,112,114,101,115,101,110,116,\n101,100,32,98,121,32,116,104,101,103,114,97,100,117,97,116,101,100,32,102,114,\n111,109,32,116,104,101,84,114,97,100,105,116,105,111,110,97,108,108,121,44,32,\n116,104,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41,59,72,\n111,119,101,118,101,114,44,32,115,105,110,99,101,32,116,104,101,47,100,105,118,\n62,10,60,47,100,105,118,62,10,60,100,105,118,32,108,101,102,116,59,32,109,97,114\n,103,105,110,45,108,101,102,116,58,112,114,111,116,101,99,116,105,111,110,32,97,\n103,97,105,110,115,116,48,59,32,118,101,114,116,105,99,97,108,45,97,108,105,103,\n110,58,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32,116,104,101,116,\n121,112,101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,47,100,105,118,62,\n10,60,100,105,118,32,99,108,97,115,115,61,34,32,99,108,97,115,115,61,34,99,108,\n101,97,114,102,105,120,34,62,60,100,105,118,32,99,108,97,115,115,61,34,102,111,\n111,116,101,114,9,9,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,116,104,\n101,32,109,111,116,105,111,110,32,112,105,99,116,117,114,101,208,145,209,138,208\n,187,208,179,208,176,209,128,209,129,208,186,208,184,208,177,209,138,208,187,208\n,179,208,176,209,128,209,129,208,186,208,184,208,164,208,181,208,180,208,181,209\n,128,208,176,209,134,208,184,208,184,208,189,208,181,209,129,208,186,208,190,208\n,187,209,140,208,186,208,190,209,129,208,190,208,190,208,177,209,137,208,181,208\n,189,208,184,208,181,209,129,208,190,208,190,208,177,209,137,208,181,208,189,208\n,184,209,143,208,191,209,128,208,190,208,179,209,128,208,176,208,188,208,188,209\n,139,208,158,209,130,208,191,209,128,208,176,208,178,208,184,209,130,209,140,208\n,177,208,181,209,129,208,191,208,187,208,176,209,130,208,189,208,190,208,188,208\n,176,209,130,208,181,209,128,208,184,208,176,208,187,209,139,208,191,208,190,208\n,183,208,178,208,190,208,187,209,143,208,181,209,130,208,191,208,190,209,129,208\n,187,208,181,208,180,208,189,208,184,208,181,209,128,208,176,208,183,208,187,208\n,184,209,135,208,189,209,139,209,133,208,191,209,128,208,190,208,180,209,131,208\n,186,209,134,208,184,208,184,208,191,209,128,208,190,208,179,209,128,208,176,208\n,188,208,188,208,176,208,191,208,190,208,187,208,189,208,190,209,129,209,130,209\n,140,209,142,208,189,208,176,209,133,208,190,208,180,208,184,209,130,209,129,209\n,143,208,184,208,183,208,177,209,128,208,176,208,189,208,189,208,190,208,181,208\n,189,208,176,209,129,208,181,208,187,208,181,208,189,208,184,209,143,208,184,208\n,183,208,188,208,181,208,189,208,181,208,189,208,184,209,143,208,186,208,176,209\n,130,208,181,208,179,208,190,209,128,208,184,208,184,208,144,208,187,208,181,208\n,186,209,129,208,176,208,189,208,180,209,128,224,164,166,224,165,141,224,164,181\n,224,164,190,224,164,176,224,164,190,224,164,174,224,165,136,224,164,168,224,165\n,129,224,164,133,224,164,178,224,164,170,224,165,141,224,164,176,224,164,166,224\n,164,190,224,164,168,224,164,173,224,164,190,224,164,176,224,164,164,224,165,128\n,224,164,175,224,164,133,224,164,168,224,165,129,224,164,166,224,165,135,224,164\n,182,224,164,185,224,164,191,224,164,168,224,165,141,224,164,166,224,165,128,224\n,164,135,224,164,130,224,164,161,224,164,191,224,164,175,224,164,190,224,164,166\n,224,164,191,224,164,178,224,165,141,224,164,178,224,165,128,224,164,133,224,164\n,167,224,164,191,224,164,149,224,164,190,224,164,176,224,164,181,224,165,128,224\n,164,161,224,164,191,224,164,175,224,165,139,224,164,154,224,164,191,224,164,159\n,224,165,141,224,164,160,224,165,135,224,164,184,224,164,174,224,164,190,224,164\n,154,224,164,190,224,164,176,224,164,156,224,164,130,224,164,149,224,165,141,224\n,164,182,224,164,168,224,164,166,224,165,129,224,164,168,224,164,191,224,164,175\n,224,164,190,224,164,170,224,165,141,224,164,176,224,164,175,224,165,139,224,164\n,151,224,164,133,224,164,168,224,165,129,224,164,184,224,164,190,224,164,176,224\n,164,145,224,164,168,224,164,178,224,164,190,224,164,135,224,164,168,224,164,170\n,224,164,190,224,164,176,224,165,141,224,164,159,224,165,128,224,164,182,224,164\n,176,224,165,141,224,164,164,224,165,139,224,164,130,224,164,178,224,165,139,224\n,164,149,224,164,184,224,164,173,224,164,190,224,164,171,224,164,188,224,165,141\n,224,164,178,224,165,136,224,164,182,224,164,182,224,164,176,224,165,141,224,164\n,164,224,165,135,224,164,130,224,164,170,224,165,141,224,164,176,224,164,166,224\n,165,135,224,164,182,224,164,170,224,165,141,224,164,178,224,165,135,224,164,175\n,224,164,176,224,164,149,224,165,135,224,164,130,224,164,166,224,165,141,224,164\n,176,224,164,184,224,165,141,224,164,165,224,164,191,224,164,164,224,164,191,224\n,164,137,224,164,164,224,165,141,224,164,170,224,164,190,224,164,166,224,164,137\n,224,164,168,224,165,141,224,164,185,224,165,135,224,164,130,224,164,154,224,164\n,191,224,164,159,224,165,141,224,164,160,224,164,190,224,164,175,224,164,190,224\n,164,164,224,165,141,224,164,176,224,164,190,224,164,156,224,165,141,224,164,175\n,224,164,190,224,164,166,224,164,190,224,164,170,224,165,129,224,164,176,224,164\n,190,224,164,168,224,165,135,224,164,156,224,165,139,224,164,161,224,164,188,224\n,165,135,224,164,130,224,164,133,224,164,168,224,165,129,224,164,181,224,164,190\n,224,164,166,224,164,182,224,165,141,224,164,176,224,165,135,224,164,163,224,165\n,128,224,164,182,224,164,191,224,164,149,224,165,141,224,164,183,224,164,190,224\n,164,184,224,164,176,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184\n,224,164,130,224,164,151,224,165,141,224,164,176,224,164,185,224,164,170,224,164\n,176,224,164,191,224,164,163,224,164,190,224,164,174,224,164,172,224,165,141,224\n,164,176,224,164,190,224,164,130,224,164,161,224,164,172,224,164,154,224,165,141\n,224,164,154,224,165,139,224,164,130,224,164,137,224,164,170,224,164,178,224,164\n,172,224,165,141,224,164,167,224,164,174,224,164,130,224,164,164,224,165,141,224\n,164,176,224,165,128,224,164,184,224,164,130,224,164,170,224,164,176,224,165,141\n,224,164,149,224,164,137,224,164,174,224,165,141,224,164,174,224,165,128,224,164\n,166,224,164,174,224,164,190,224,164,167,224,165,141,224,164,175,224,164,174,224\n,164,184,224,164,185,224,164,190,224,164,175,224,164,164,224,164,190,224,164,182\n,224,164,172,224,165,141,224,164,166,224,165,139,224,164,130,224,164,174,224,165\n,128,224,164,161,224,164,191,224,164,175,224,164,190,224,164,134,224,164,136,224\n,164,170,224,165,128,224,164,143,224,164,178,224,164,174,224,165,139,224,164,172\n,224,164,190,224,164,135,224,164,178,224,164,184,224,164,130,224,164,150,224,165\n,141,224,164,175,224,164,190,224,164,134,224,164,170,224,164,176,224,165,135,224\n,164,182,224,164,168,224,164,133,224,164,168,224,165,129,224,164,172,224,164,130\n,224,164,167,224,164,172,224,164,190,224,164,156,224,164,188,224,164,190,224,164\n,176,224,164,168,224,164,181,224,165,128,224,164,168,224,164,164,224,164,174,224\n,164,170,224,165,141,224,164,176,224,164,174,224,165,129,224,164,150,224,164,170\n,224,165,141,224,164,176,224,164,182,224,165,141,224,164,168,224,164,170,224,164\n,176,224,164,191,224,164,181,224,164,190,224,164,176,224,164,168,224,165,129,224\n,164,149,224,164,184,224,164,190,224,164,168,224,164,184,224,164,174,224,164,176\n,224,165,141,224,164,165,224,164,168,224,164,134,224,164,175,224,165,139,224,164\n,156,224,164,191,224,164,164,224,164,184,224,165,139,224,164,174,224,164,181,224\n,164,190,224,164,176,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216\n,167,216,170,216,167,217,132,217,133,217,134,216,170,216,175,217,138,216,167,216\n,170,216,167,217,132,217,131,217,133,216,168,217,138,217,136,216,170,216,177,216\n,167,217,132,217,133,216,180,216,167,217,135,216,175,216,167,216,170,216,185,216\n,175,216,175,216,167,217,132,216,178,217,136,216,167,216,177,216,185,216,175,216\n,175,216,167,217,132,216,177,216,175,217,136,216,175,216,167,217,132,216,165,216\n,179,217,132,216,167,217,133,217,138,216,169,216,167,217,132,217,129,217,136,216\n,170,217,136,216,180,217,136,216,168,216,167,217,132,217,133,216,179,216,167,216\n,168,217,130,216,167,216,170,216,167,217,132,217,133,216,185,217,132,217,136,217\n,133,216,167,216,170,216,167,217,132,217,133,216,179,217,132,216,179,217,132,216\n,167,216,170,216,167,217,132,216,172,216,177,216,167,217,129,217,138,217,131,216\n,179,216,167,217,132,216,167,216,179,217,132,216,167,217,133,217,138,216,169,216\n,167,217,132,216,167,216,170,216,181,216,167,217,132,216,167,216,170,107,101,121\n,119,111,114,100,115,34,32,99,111,110,116,101,110,116,61,34,119,51,46,111,114,\n103,47,49,57,57,57,47,120,104,116,109,108,34,62,60,97,32,116,97,114,103,101,116,\n61,34,95,98,108,97,110,107,34,32,116,101,120,116,47,104,116,109,108,59,32,99,104\n,97,114,115,101,116,61,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,\n34,62,60,116,97,98,108,101,32,99,101,108,108,112,97,100,100,105,110,103,61,34,97\n,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,116,101,120,\n116,45,97,108,105,103,110,58,32,99,101,110,116,101,114,59,116,111,32,108,97,115,\n116,32,118,101,114,115,105,111,110,32,98,121,32,98,97,99,107,103,114,111,117,110\n,100,45,99,111,108,111,114,58,32,35,34,32,104,114,101,102,61,34,104,116,116,112,\n58,47,47,119,119,119,46,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,32\n,105,100,61,60,97,32,104,114,101,102,61,34,35,34,32,99,108,97,115,115,61,34,34,\n62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,99,114,105,112,\n116,34,32,115,114,99,61,34,104,116,116,112,58,47,47,10,60,115,99,114,105,112,116\n,32,108,97,110,103,117,97,103,101,61,34,47,47,69,78,34,32,34,104,116,116,112,58,\n47,47,119,119,119,46,119,101,110,99,111,100,101,85,82,73,67,111,109,112,111,110,\n101,110,116,40,34,32,104,114,101,102,61,34,106,97,118,97,115,99,114,105,112,116,\n58,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,116,101,110,116,100,111,\n99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,112,111,115,105,\n116,105,111,110,58,32,97,98,115,111,108,117,116,101,59,115,99,114,105,112,116,32\n,115,114,99,61,34,104,116,116,112,58,47,47,32,115,116,121,108,101,61,34,109,97,\n114,103,105,110,45,116,111,112,58,46,109,105,110,46,106,115,34,62,60,47,115,99,\n114,105,112,116,62,10,60,47,100,105,118,62,10,60,100,105,118,32,99,108,97,115,\n115,61,34,119,51,46,111,114,103,47,49,57,57,57,47,120,104,116,109,108,34,32,10,\n13,10,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,62,100,105,115,116,105\n,110,99,116,105,111,110,32,98,101,116,119,101,101,110,47,34,32,116,97,114,103,\n101,116,61,34,95,98,108,97,110,107,34,62,60,108,105,110,107,32,104,114,101,102,\n61,34,104,116,116,112,58,47,47,101,110,99,111,100,105,110,103,61,34,117,116,102,\n45,56,34,63,62,10,119,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,\n101,114,63,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,119,119,119,46,\n105,99,111,110,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,32,115,116,\n121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,58,116,121,112,101,61,34,\n116,101,120,116,47,99,115,115,34,32,47,62,10,109,101,116,97,32,112,114,111,112,\n101,114,116,121,61,34,111,103,58,116,60,105,110,112,117,116,32,116,121,112,101,\n61,34,116,101,120,116,34,32,32,115,116,121,108,101,61,34,116,101,120,116,45,97,\n108,105,103,110,58,116,104,101,32,100,101,118,101,108,111,112,109,101,110,116,32\n,111,102,32,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,\n101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,105,115\n,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,116,97,98,108,\n101,32,119,105,100,116,104,61,34,49,48,48,37,34,32,73,110,32,97,100,100,105,116,\n105,111,110,32,116,111,32,116,104,101,32,99,111,110,116,114,105,98,117,116,101,\n100,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,115,32,\n98,101,116,119,101,101,110,100,101,118,101,108,111,112,109,101,110,116,32,111,\n102,32,116,104,101,32,73,116,32,105,115,32,105,109,112,111,114,116,97,110,116,32\n,116,111,32,60,47,115,99,114,105,112,116,62,10,10,60,115,99,114,105,112,116,32,\n32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,62,60,47,\n115,112,97,110,62,60,115,112,97,110,32,105,100,61,103,98,76,105,98,114,97,114,\n121,32,111,102,32,67,111,110,103,114,101,115,115,60,105,109,103,32,115,114,99,61\n,34,104,116,116,112,58,47,47,105,109,69,110,103,108,105,115,104,32,116,114,97,\n110,115,108,97,116,105,111,110,65,99,97,100,101,109,121,32,111,102,32,83,99,105,\n101,110,99,101,115,100,105,118,32,115,116,121,108,101,61,34,100,105,115,112,108,\n97,121,58,99,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116,104,\n101,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,105,100,41,105,\n110,32,99,111,110,106,117,110,99,116,105,111,110,32,119,105,116,104,69,108,101,\n109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,60,109,101,116,97,32,\n112,114,111,112,101,114,116,121,61,34,111,103,58,208,145,209,138,208,187,208,179\n,208,176,209,128,209,129,208,186,208,184,10,32,116,121,112,101,61,34,116,101,120\n,116,34,32,110,97,109,101,61,34,62,80,114,105,118,97,99,121,32,80,111,108,105,99\n,121,60,47,97,62,97,100,109,105,110,105,115,116,101,114,101,100,32,98,121,32,116\n,104,101,101,110,97,98,108,101,83,105,110,103,108,101,82,101,113,117,101,115,116\n,115,116,121,108,101,61,38,113,117,111,116,59,109,97,114,103,105,110,58,60,47,\n100,105,118,62,60,47,100,105,118,62,60,47,100,105,118,62,60,62,60,105,109,103,32\n,115,114,99,61,34,104,116,116,112,58,47,47,105,32,115,116,121,108,101,61,38,113,\n117,111,116,59,102,108,111,97,116,58,114,101,102,101,114,114,101,100,32,116,111,\n32,97,115,32,116,104,101,32,116,111,116,97,108,32,112,111,112,117,108,97,116,105\n,111,110,32,111,102,105,110,32,87,97,115,104,105,110,103,116,111,110,44,32,68,46\n,67,46,32,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45,97,\n109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,44,111,114,103\n,97,110,105,122,97,116,105,111,110,32,111,102,32,116,104,101,112,97,114,116,105,\n99,105,112,97,116,101,100,32,105,110,32,116,104,101,116,104,101,32,105,110,116,\n114,111,100,117,99,116,105,111,110,32,111,102,105,100,101,110,116,105,102,105,\n101,100,32,119,105,116,104,32,116,104,101,102,105,99,116,105,111,110,97,108,32,\n99,104,97,114,97,99,116,101,114,32,79,120,102,111,114,100,32,85,110,105,118,101,\n114,115,105,116,121,32,109,105,115,117,110,100,101,114,115,116,97,110,100,105,\n110,103,32,111,102,84,104,101,114,101,32,97,114,101,44,32,104,111,119,101,118,\n101,114,44,115,116,121,108,101,115,104,101,101,116,34,32,104,114,101,102,61,34,\n47,67,111,108,117,109,98,105,97,32,85,110,105,118,101,114,115,105,116,121,101,\n120,112,97,110,100,101,100,32,116,111,32,105,110,99,108,117,100,101,117,115,117,\n97,108,108,121,32,114,101,102,101,114,114,101,100,32,116,111,105,110,100,105,99,\n97,116,105,110,103,32,116,104,97,116,32,116,104,101,104,97,118,101,32,115,117,\n103,103,101,115,116,101,100,32,116,104,97,116,97,102,102,105,108,105,97,116,101,\n100,32,119,105,116,104,32,116,104,101,99,111,114,114,101,108,97,116,105,111,110,\n32,98,101,116,119,101,101,110,110,117,109,98,101,114,32,111,102,32,100,105,102,\n102,101,114,101,110,116,62,60,47,116,100,62,60,47,116,114,62,60,47,116,97,98,108\n,101,62,82,101,112,117,98,108,105,99,32,111,102,32,73,114,101,108,97,110,100,10,\n60,47,115,99,114,105,112,116,62,10,60,115,99,114,105,112,116,32,117,110,100,101,\n114,32,116,104,101,32,105,110,102,108,117,101,110,99,101,99,111,110,116,114,105,\n98,117,116,105,111,110,32,116,111,32,116,104,101,79,102,102,105,99,105,97,108,32\n,119,101,98,115,105,116,101,32,111,102,104,101,97,100,113,117,97,114,116,101,114\n,115,32,111,102,32,116,104,101,99,101,110,116,101,114,101,100,32,97,114,111,117,\n110,100,32,116,104,101,105,109,112,108,105,99,97,116,105,111,110,115,32,111,102,\n32,116,104,101,104,97,118,101,32,98,101,101,110,32,100,101,118,101,108,111,112,\n101,100,70,101,100,101,114,97,108,32,82,101,112,117,98,108,105,99,32,111,102,98,\n101,99,97,109,101,32,105,110,99,114,101,97,115,105,110,103,108,121,99,111,110,\n116,105,110,117,97,116,105,111,110,32,111,102,32,116,104,101,78,111,116,101,44,\n32,104,111,119,101,118,101,114,44,32,116,104,97,116,115,105,109,105,108,97,114,\n32,116,111,32,116,104,97,116,32,111,102,32,99,97,112,97,98,105,108,105,116,105,\n101,115,32,111,102,32,116,104,101,97,99,99,111,114,100,97,110,99,101,32,119,105,\n116,104,32,116,104,101,112,97,114,116,105,99,105,112,97,110,116,115,32,105,110,\n32,116,104,101,102,117,114,116,104,101,114,32,100,101,118,101,108,111,112,109,\n101,110,116,117,110,100,101,114,32,116,104,101,32,100,105,114,101,99,116,105,111\n,110,105,115,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,101,100,\n104,105,115,32,121,111,117,110,103,101,114,32,98,114,111,116,104,101,114,60,47,\n116,100,62,60,47,116,114,62,60,47,116,97,98,108,101,62,60,97,32,104,116,116,112,\n45,101,113,117,105,118,61,34,88,45,85,65,45,112,104,121,115,105,99,97,108,32,112\n,114,111,112,101,114,116,105,101,115,111,102,32,66,114,105,116,105,115,104,32,67\n,111,108,117,109,98,105,97,104,97,115,32,98,101,101,110,32,99,114,105,116,105,99\n,105,122,101,100,40,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105\n,111,110,113,117,101,115,116,105,111,110,115,32,97,98,111,117,116,32,116,104,101\n,112,97,115,115,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,48,34,\n32,99,101,108,108,112,97,100,100,105,110,103,61,34,48,34,32,116,104,111,117,115,\n97,110,100,115,32,111,102,32,112,101,111,112,108,101,114,101,100,105,114,101,99,\n116,115,32,104,101,114,101,46,32,70,111,114,104,97,118,101,32,99,104,105,108,100\n,114,101,110,32,117,110,100,101,114,37,51,69,37,51,67,47,115,99,114,105,112,116,\n37,51,69,34,41,41,59,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119\n,119,119,46,60,108,105,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,\n47,115,105,116,101,95,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,116,\n101,120,116,45,100,101,99,111,114,97,116,105,111,110,58,110,111,110,101,115,116,\n121,108,101,61,34,100,105,115,112,108,97,121,58,32,110,111,110,101,60,109,101,\n116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,88,45,110,101,119,32,68,\n97,116,101,40,41,46,103,101,116,84,105,109,101,40,41,32,116,121,112,101,61,34,\n105,109,97,103,101,47,120,45,105,99,111,110,34,60,47,115,112,97,110,62,60,115,\n112,97,110,32,99,108,97,115,115,61,34,108,97,110,103,117,97,103,101,61,34,106,97\n,118,97,115,99,114,105,112,116,119,105,110,100,111,119,46,108,111,99,97,116,105,\n111,110,46,104,114,101,102,60,97,32,104,114,101,102,61,34,106,97,118,97,115,99,\n114,105,112,116,58,45,45,62,13,10,60,115,99,114,105,112,116,32,116,121,112,101,\n61,34,116,60,97,32,104,114,101,102,61,39,104,116,116,112,58,47,47,119,119,119,46\n,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,114,101,102,61,34,60,47,\n100,105,118,62,13,10,60,100,105,118,32,99,108,97,115,115,61,34,60,115,99,114,105\n,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,34,32,114,101,108,61,34,\n115,116,121,108,101,115,104,101,101,116,34,32,116,60,47,100,105,118,62,10,60,115\n,99,114,105,112,116,32,116,121,112,101,61,47,97,62,32,60,97,32,104,114,101,102,\n61,34,104,116,116,112,58,47,47,32,97,108,108,111,119,84,114,97,110,115,112,97,\n114,101,110,99,121,61,34,88,45,85,65,45,67,111,109,112,97,116,105,98,108,101,34,\n32,99,111,110,114,101,108,97,116,105,111,110,115,104,105,112,32,98,101,116,119,\n101,101,110,10,60,47,115,99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,\n32,60,47,97,62,60,47,108,105,62,60,47,117,108,62,60,47,100,105,118,62,97,115,115\n,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,111,103,\n114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,60,47,97,62,60,97,32\n,104,114,101,102,61,34,104,116,116,112,58,47,47,60,47,97,62,60,47,108,105,62,60,\n108,105,32,99,108,97,115,115,61,34,102,111,114,109,32,97,99,116,105,111,110,61,\n34,104,116,116,112,58,47,47,60,100,105,118,32,115,116,121,108,101,61,34,100,105,\n115,112,108,97,121,58,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101\n,61,34,113,34,60,116,97,98,108,101,32,119,105,100,116,104,61,34,49,48,48,37,34,\n32,98,97,99,107,103,114,111,117,110,100,45,112,111,115,105,116,105,111,110,58,34\n,32,98,111,114,100,101,114,61,34,48,34,32,119,105,100,116,104,61,34,114,101,108,\n61,34,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,54,62,60,117,\n108,62,60,108,105,62,60,97,32,104,114,101,102,61,34,32,32,60,109,101,116,97,32,\n104,116,116,112,45,101,113,117,105,118,61,34,99,115,115,34,32,109,101,100,105,97\n,61,34,115,99,114,101,101,110,34,32,114,101,115,112,111,110,115,105,98,108,101,\n32,102,111,114,32,116,104,101,32,34,32,116,121,112,101,61,34,97,112,112,108,105,\n99,97,116,105,111,110,47,34,32,115,116,121,108,101,61,34,98,97,99,107,103,114,\n111,117,110,100,45,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,\n102,45,56,34,32,97,108,108,111,119,116,114,97,110,115,112,97,114,101,110,99,121,\n61,34,115,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,\n101,13,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,62,\n60,47,115,112,97,110,62,60,115,112,97,110,32,99,108,97,115,115,61,34,48,34,32,99\n,101,108,108,115,112,97,99,105,110,103,61,34,48,34,62,59,10,60,47,115,99,114,105\n,112,116,62,10,60,115,99,114,105,112,116,32,115,111,109,101,116,105,109,101,115,\n32,99,97,108,108,101,100,32,116,104,101,100,111,101,115,32,110,111,116,32,110,\n101,99,101,115,115,97,114,105,108,121,70,111,114,32,109,111,114,101,32,105,110,\n102,111,114,109,97,116,105,111,110,97,116,32,116,104,101,32,98,101,103,105,110,\n110,105,110,103,32,111,102,32,60,33,68,79,67,84,89,80,69,32,104,116,109,108,62,\n60,104,116,109,108,112,97,114,116,105,99,117,108,97,114,108,121,32,105,110,32,\n116,104,101,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,97,109,\n101,61,34,106,97,118,97,115,99,114,105,112,116,58,118,111,105,100,40,48,41,59,34\n,101,102,102,101,99,116,105,118,101,110,101,115,115,32,111,102,32,116,104,101,32\n,97,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,103,101,\n110,101,114,97,108,108,121,32,99,111,110,115,105,100,101,114,101,100,62,60,105,\n110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,34,62,60,47,115,\n99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,116,104,114,111,117,103,\n104,111,117,116,32,116,104,101,32,119,111,114,108,100,99,111,109,109,111,110,32,\n109,105,115,99,111,110,99,101,112,116,105,111,110,97,115,115,111,99,105,97,116,\n105,111,110,32,119,105,116,104,32,116,104,101,60,47,100,105,118,62,10,60,47,100,\n105,118,62,10,60,100,105,118,32,99,100,117,114,105,110,103,32,104,105,115,32,108\n,105,102,101,116,105,109,101,44,99,111,114,114,101,115,112,111,110,100,105,110,\n103,32,116,111,32,116,104,101,116,121,112,101,61,34,105,109,97,103,101,47,120,45\n,105,99,111,110,34,32,97,110,32,105,110,99,114,101,97,115,105,110,103,32,110,117\n,109,98,101,114,100,105,112,108,111,109,97,116,105,99,32,114,101,108,97,116,105,\n111,110,115,97,114,101,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,\n101,100,109,101,116,97,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,\n32,60,105,110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,101,120\n,97,109,112,108,101,115,32,105,110,99,108,117,100,101,32,116,104,101,34,62,60,\n105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,105,112,97,114,116,105,\n99,105,112,97,116,105,111,110,32,105,110,32,116,104,101,116,104,101,32,101,115,\n116,97,98,108,105,115,104,109,101,110,116,32,111,102,10,60,47,100,105,118,62,10,\n60,100,105,118,32,99,108,97,115,115,61,34,38,97,109,112,59,110,98,115,112,59,38,\n97,109,112,59,110,98,115,112,59,116,111,32,100,101,116,101,114,109,105,110,101,\n32,119,104,101,116,104,101,114,113,117,105,116,101,32,100,105,102,102,101,114,\n101,110,116,32,102,114,111,109,109,97,114,107,101,100,32,116,104,101,32,98,101,\n103,105,110,110,105,110,103,100,105,115,116,97,110,99,101,32,98,101,116,119,101,\n101,110,32,116,104,101,99,111,110,116,114,105,98,117,116,105,111,110,115,32,116,\n111,32,116,104,101,99,111,110,102,108,105,99,116,32,98,101,116,119,101,101,110,\n32,116,104,101,119,105,100,101,108,121,32,99,111,110,115,105,100,101,114,101,100\n,32,116,111,119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,102,105,114,\n115,116,119,105,116,104,32,118,97,114,121,105,110,103,32,100,101,103,114,101,101\n,115,104,97,118,101,32,115,112,101,99,117,108,97,116,101,100,32,116,104,97,116,\n40,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,112,\n97,114,116,105,99,105,112,97,116,105,110,103,32,105,110,32,116,104,101,111,114,\n105,103,105,110,97,108,108,121,32,100,101,118,101,108,111,112,101,100,101,116,97\n,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,32,116,121,112,101,\n61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,105,110,116,101,114,99,104,97\n,110,103,101,97,98,108,121,32,119,105,116,104,109,111,114,101,32,99,108,111,115,\n101,108,121,32,114,101,108,97,116,101,100,115,111,99,105,97,108,32,97,110,100,32\n,112,111,108,105,116,105,99,97,108,116,104,97,116,32,119,111,117,108,100,32,111,\n116,104,101,114,119,105,115,101,112,101,114,112,101,110,100,105,99,117,108,97,\n114,32,116,111,32,116,104,101,115,116,121,108,101,32,116,121,112,101,61,34,116,\n101,120,116,47,99,115,115,116,121,112,101,61,34,115,117,98,109,105,116,34,32,110\n,97,109,101,61,34,102,97,109,105,108,105,101,115,32,114,101,115,105,100,105,110,\n103,32,105,110,100,101,118,101,108,111,112,105,110,103,32,99,111,117,110,116,114\n,105,101,115,99,111,109,112,117,116,101,114,32,112,114,111,103,114,97,109,109,\n105,110,103,101,99,111,110,111,109,105,99,32,100,101,118,101,108,111,112,109,101\n,110,116,100,101,116,101,114,109,105,110,97,116,105,111,110,32,111,102,32,116,\n104,101,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111\n,110,111,110,32,115,101,118,101,114,97,108,32,111,99,99,97,115,105,111,110,115,\n112,111,114,116,117,103,117,195,170,115,32,40,69,117,114,111,112,101,117,41,208,\n163,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,209,\n131,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,208,\n160,208,190,209,129,209,129,208,184,208,185,209,129,208,186,208,190,208,185,208,\n188,208,176,209,130,208,181,209,128,208,184,208,176,208,187,208,190,208,178,208,\n184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,208,184,209,\n131,208,191,209,128,208,176,208,178,208,187,208,181,208,189,208,184,209,143,208,\n189,208,181,208,190,208,177,209,133,208,190,208,180,208,184,208,188,208,190,208,\n184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,\n152,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,\n160,208,181,209,129,208,191,209,131,208,177,208,187,208,184,208,186,208,184,208,\n186,208,190,208,187,208,184,209,135,208,181,209,129,209,130,208,178,208,190,208,\n184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,142,209,\n130,208,181,209,128,209,128,208,184,209,130,208,190,209,128,208,184,208,184,208,\n180,208,190,209,129,209,130,208,176,209,130,208,190,209,135,208,189,208,190,216,\n167,217,132,217,133,216,170,217,136,216,167,216,172,216,175,217,136,217,134,216,\n167,217,132,216,167,216,180,216,170,216,177,216,167,217,131,216,167,216,170,216,\n167,217,132,216,167,217,130,216,170,216,177,216,167,216,173,216,167,216,170,104,\n116,109,108,59,32,99,104,97,114,115,101,116,61,85,84,70,45,56,34,32,115,101,116,\n84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,100,105,115,\n112,108,97,121,58,105,110,108,105,110,101,45,98,108,111,99,107,59,60,105,110,112\n,117,116,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,116,121,112,101,\n32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,60,105,109,103,32,\n115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,34,32,34,104,116,116,\n112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,115,104,111,114,116,99,117,\n116,32,105,99,111,110,34,32,104,114,101,102,61,34,34,32,97,117,116,111,99,111,\n109,112,108,101,116,101,61,34,111,102,102,34,32,60,47,97,62,60,47,100,105,118,62\n,60,100,105,118,32,99,108,97,115,115,61,60,47,97,62,60,47,108,105,62,10,60,108,\n105,32,99,108,97,115,115,61,34,99,115,115,34,32,116,121,112,101,61,34,116,101,\n120,116,47,99,115,115,34,32,60,102,111,114,109,32,97,99,116,105,111,110,61,34,\n104,116,116,112,58,47,47,120,116,47,99,115,115,34,32,104,114,101,102,61,34,104,\n116,116,112,58,47,47,108,105,110,107,32,114,101,108,61,34,97,108,116,101,114,110\n,97,116,101,34,32,13,10,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,\n101,120,116,47,32,111,110,99,108,105,99,107,61,34,106,97,118,97,115,99,114,105,\n112,116,58,40,110,101,119,32,68,97,116,101,41,46,103,101,116,84,105,109,101,40,\n41,125,104,101,105,103,104,116,61,34,49,34,32,119,105,100,116,104,61,34,49,34,32\n,80,101,111,112,108,101,39,115,32,82,101,112,117,98,108,105,99,32,111,102,32,32,\n60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,116,101,\n120,116,45,100,101,99,111,114,97,116,105,111,110,58,117,110,100,101,114,116,104,\n101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,60,47,100\n,105,118,62,10,60,47,100,105,118,62,10,60,47,100,105,118,62,10,101,115,116,97,98\n,108,105,115,104,109,101,110,116,32,111,102,32,116,104,101,32,60,47,100,105,118,\n62,60,47,100,105,118,62,60,47,100,105,118,62,60,47,100,35,118,105,101,119,112,\n111,114,116,123,109,105,110,45,104,101,105,103,104,116,58,10,60,115,99,114,105,\n112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,111,112,116,105,111,110,62,\n60,111,112,116,105,111,110,32,118,97,108,117,101,61,111,102,116,101,110,32,114,\n101,102,101,114,114,101,100,32,116,111,32,97,115,32,47,111,112,116,105,111,110,\n62,10,60,111,112,116,105,111,110,32,118,97,108,117,60,33,68,79,67,84,89,80,69,32\n,104,116,109,108,62,10,60,33,45,45,91,73,110,116,101,114,110,97,116,105,111,110,\n97,108,32,65,105,114,112,111,114,116,62,10,60,97,32,104,114,101,102,61,34,104,\n116,116,112,58,47,47,119,119,119,60,47,97,62,60,97,32,104,114,101,102,61,34,104,\n116,116,112,58,47,47,119,224,184,160,224,184,178,224,184,169,224,184,178,224,185\n,132,224,184,151,224,184,162,225,131,165,225,131,144,225,131,160,225,131,151,225\n,131,163,225,131,154,225,131,152,230,173,163,233,171,148,228,184,173,230,150,135\n,32,40,231,185,129,233,171,148,41,224,164,168,224,164,191,224,164,176,224,165,\n141,224,164,166,224,165,135,224,164,182,224,164,161,224,164,190,224,164,137,224,\n164,168,224,164,178,224,165,139,224,164,161,224,164,149,224,165,141,224,164,183,\n224,165,135,224,164,164,224,165,141,224,164,176,224,164,156,224,164,190,224,164,\n168,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184,224,164,130,224,\n164,172,224,164,130,224,164,167,224,164,191,224,164,164,224,164,184,224,165,141,\n224,164,165,224,164,190,224,164,170,224,164,168,224,164,190,224,164,184,224,165,\n141,224,164,181,224,165,128,224,164,149,224,164,190,224,164,176,224,164,184,224,\n164,130,224,164,184,224,165,141,224,164,149,224,164,176,224,164,163,224,164,184,\n224,164,190,224,164,174,224,164,151,224,165,141,224,164,176,224,165,128,224,164,\n154,224,164,191,224,164,159,224,165,141,224,164,160,224,165,139,224,164,130,224,\n164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164,168,\n224,164,133,224,164,174,224,165,135,224,164,176,224,164,191,224,164,149,224,164,\n190,224,164,181,224,164,191,224,164,173,224,164,191,224,164,168,224,165,141,224,\n164,168,224,164,151,224,164,190,224,164,161,224,164,191,224,164,175,224,164,190,\n224,164,129,224,164,149,224,165,141,224,164,175,224,165,139,224,164,130,224,164,\n149,224,164,191,224,164,184,224,165,129,224,164,176,224,164,149,224,165,141,224,\n164,183,224,164,190,224,164,170,224,164,185,224,165,129,224,164,129,224,164,154,\n224,164,164,224,165,128,224,164,170,224,165,141,224,164,176,224,164,172,224,164,\n130,224,164,167,224,164,168,224,164,159,224,164,191,224,164,170,224,165,141,224,\n164,170,224,164,163,224,165,128,224,164,149,224,165,141,224,164,176,224,164,191,\n224,164,149,224,165,135,224,164,159,224,164,170,224,165,141,224,164,176,224,164,\n190,224,164,176,224,164,130,224,164,173,224,164,170,224,165,141,224,164,176,224,\n164,190,224,164,170,224,165,141,224,164,164,224,164,174,224,164,190,224,164,178,\n224,164,191,224,164,149,224,165,139,224,164,130,224,164,176,224,164,171,224,164,\n188,224,165,141,224,164,164,224,164,190,224,164,176,224,164,168,224,164,191,224,\n164,176,224,165,141,224,164,174,224,164,190,224,164,163,224,164,178,224,164,191,\n224,164,174,224,164,191,224,164,159,224,165,135,224,164,161,100,101,115,99,114,\n105,112,116,105,111,110,34,32,99,111,110,116,101,110,116,61,34,100,111,99,117,\n109,101,110,116,46,108,111,99,97,116,105,111,110,46,112,114,111,116,46,103,101,\n116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,60,33,68,79\n,67,84,89,80,69,32,104,116,109,108,62,10,60,104,116,109,108,32,60,109,101,116,97\n,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,58,117,114,108,34,32\n,99,111,110,116,101,110,116,61,34,104,116,116,112,58,47,47,46,99,115,115,34,32,\n114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,115,116,121,108,101\n,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,62,116,121,112,101,61\n,34,116,101,120,116,47,99,115,115,34,32,104,114,101,102,61,34,119,51,46,111,114,\n103,47,49,57,57,57,47,120,104,116,109,108,34,32,120,109,108,116,121,112,101,61,\n34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,109,101,116,104\n,111,100,61,34,103,101,116,34,32,97,99,116,105,111,110,61,34,108,105,110,107,32,\n114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,32,61,32,100,111\n,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,116,121,112,\n101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,34,32,47,62,99,101,108,108\n,112,97,100,100,105,110,103,61,34,48,34,32,99,101,108,108,115,112,46,99,115,115,\n34,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,60,47,97,62,60,\n47,108,105,62,60,108,105,62,60,97,32,104,114,101,102,61,34,34,32,119,105,100,116\n,104,61,34,49,34,32,104,101,105,103,104,116,61,34,49,34,34,62,60,97,32,104,114,\n101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,116,121,108,101,61,34,\n100,105,115,112,108,97,121,58,110,111,110,101,59,34,62,97,108,116,101,114,110,97\n,116,101,34,32,116,121,112,101,61,34,97,112,112,108,105,45,47,47,87,51,67,47,47,\n68,84,68,32,88,72,84,77,76,32,49,46,48,32,101,108,108,115,112,97,99,105,110,103,\n61,34,48,34,32,99,101,108,108,112,97,100,32,116,121,112,101,61,34,104,105,100,\n100,101,110,34,32,118,97,108,117,101,61,34,47,97,62,38,110,98,115,112,59,60,115,\n112,97,110,32,114,111,108,101,61,34,115,10,60,105,110,112,117,116,32,116,121,112\n,101,61,34,104,105,100,100,101,110,34,32,108,97,110,103,117,97,103,101,61,34,74,\n97,118,97,83,99,114,105,112,116,34,32,32,100,111,99,117,109,101,110,116,46,103,\n101,116,69,108,101,109,101,110,116,115,66,103,61,34,48,34,32,99,101,108,108,115,\n112,97,99,105,110,103,61,34,48,34,32,121,112,101,61,34,116,101,120,116,47,99,115\n,115,34,32,109,101,100,105,97,61,34,116,121,112,101,61,39,116,101,120,116,47,106\n,97,118,97,115,99,114,105,112,116,39,119,105,116,104,32,116,104,101,32,101,120,\n99,101,112,116,105,111,110,32,111,102,32,121,112,101,61,34,116,101,120,116,47,99\n,115,115,34,32,114,101,108,61,34,115,116,32,104,101,105,103,104,116,61,34,49,34,\n32,119,105,100,116,104,61,34,49,34,32,61,39,43,101,110,99,111,100,101,85,82,73,\n67,111,109,112,111,110,101,110,116,40,60,108,105,110,107,32,114,101,108,61,34,97\n,108,116,101,114,110,97,116,101,34,32,10,98,111,100,121,44,32,116,114,44,32,105,\n110,112,117,116,44,32,116,101,120,116,109,101,116,97,32,110,97,109,101,61,34,114\n,111,98,111,116,115,34,32,99,111,110,109,101,116,104,111,100,61,34,112,111,115,\n116,34,32,97,99,116,105,111,110,61,34,62,10,60,97,32,104,114,101,102,61,34,104,\n116,116,112,58,47,47,119,119,119,46,99,115,115,34,32,114,101,108,61,34,115,116,\n121,108,101,115,104,101,101,116,34,32,60,47,100,105,118,62,60,47,100,105,118,62,\n60,100,105,118,32,99,108,97,115,115,108,97,110,103,117,97,103,101,61,34,106,97,\n118,97,115,99,114,105,112,116,34,62,97,114,105,97,45,104,105,100,100,101,110,61,\n34,116,114,117,101,34,62,194,183,60,114,105,112,116,34,32,116,121,112,101,61,34,\n116,101,120,116,47,106,97,118,97,115,108,61,48,59,125,41,40,41,59,10,40,102,117,\n110,99,116,105,111,110,40,41,123,98,97,99,107,103,114,111,117,110,100,45,105,109\n,97,103,101,58,32,117,114,108,40,47,97,62,60,47,108,105,62,60,108,105,62,60,97,\n32,104,114,101,102,61,34,104,9,9,60,108,105,62,60,97,32,104,114,101,102,61,34,\n104,116,116,112,58,47,47,97,116,111,114,34,32,97,114,105,97,45,104,105,100,100,\n101,110,61,34,116,114,117,62,32,60,97,32,104,114,101,102,61,34,104,116,116,112,\n58,47,47,119,119,119,46,108,97,110,103,117,97,103,101,61,34,106,97,118,97,115,99\n,114,105,112,116,34,32,47,111,112,116,105,111,110,62,10,60,111,112,116,105,111,\n110,32,118,97,108,117,101,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,\n32,99,108,97,115,115,61,114,97,116,111,114,34,32,97,114,105,97,45,104,105,100,\n100,101,110,61,34,116,114,101,61,40,110,101,119,32,68,97,116,101,41,46,103,101,\n116,84,105,109,101,40,41,112,111,114,116,117,103,117,195,170,115,32,40,100,111,\n32,66,114,97,115,105,108,41,208,190,209,128,208,179,208,176,208,189,208,184,208,\n183,208,176,209,134,208,184,208,184,208,178,208,190,208,183,208,188,208,190,208,\n182,208,189,208,190,209,129,209,130,209,140,208,190,208,177,209,128,208,176,208,\n183,208,190,208,178,208,176,208,189,208,184,209,143,209,128,208,181,208,179,208,\n184,209,129,209,130,209,128,208,176,209,134,208,184,208,184,208,178,208,190,208,\n183,208,188,208,190,208,182,208,189,208,190,209,129,209,130,208,184,208,190,208,\n177,209,143,208,183,208,176,209,130,208,181,208,187,209,140,208,189,208,176,60,\n33,68,79,67,84,89,80,69,32,104,116,109,108,32,80,85,66,76,73,67,32,34,110,116,45\n,84,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47,60,109\n,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,116,101,\n114,97,110,115,105,116,105,111,110,97,108,47,47,69,78,34,32,34,104,116,116,112,\n58,60,104,116,109,108,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119,\n119,119,45,47,47,87,51,67,47,47,68,84,68,32,88,72,84,77,76,32,49,46,48,32,84,68,\n84,68,47,120,104,116,109,108,49,45,116,114,97,110,115,105,116,105,111,110,97,108\n,47,47,119,119,119,46,119,51,46,111,114,103,47,84,82,47,120,104,116,109,108,49,\n47,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,\n39,59,60,109,101,116,97,32,110,97,109,101,61,34,100,101,115,99,114,105,112,116,\n105,111,110,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,116,66,\n101,102,111,114,101,60,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,\n100,101,110,34,32,110,97,106,115,34,32,116,121,112,101,61,34,116,101,120,116,47,\n106,97,118,97,115,99,114,105,40,100,111,99,117,109,101,110,116,41,46,114,101,97,\n100,121,40,102,117,110,99,116,105,115,99,114,105,112,116,32,116,121,112,101,61,\n34,116,101,120,116,47,106,97,118,97,115,105,109,97,103,101,34,32,99,111,110,116,\n101,110,116,61,34,104,116,116,112,58,47,47,85,65,45,67,111,109,112,97,116,105,98\n,108,101,34,32,99,111,110,116,101,110,116,61,116,109,108,59,32,99,104,97,114,115\n,101,116,61,117,116,102,45,56,34,32,47,62,10,108,105,110,107,32,114,101,108,61,\n34,115,104,111,114,116,99,117,116,32,105,99,111,110,60,108,105,110,107,32,114,\n101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,60,47,115,99,114,105\n,112,116,62,10,60,115,99,114,105,112,116,32,116,121,112,101,61,61,32,100,111,99,\n117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,60,97,32,116\n,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,104,114,101,102,61,32,100,\n111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,105,\n110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61\n,97,46,116,121,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,\n105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,\n97,109,101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,\n34,32,47,62,100,116,100,34,62,10,60,104,116,109,108,32,120,109,108,110,115,61,34\n,104,116,116,112,45,47,47,87,51,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,\n32,84,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,115,99,114,105,112,\n116,39,41,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,\n34,32,110,97,109,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,\n116,47,106,97,118,97,115,34,32,115,116,121,108,101,61,34,100,105,115,112,108,97,\n121,58,110,111,110,101,59,34,62,100,111,99,117,109,101,110,116,46,103,101,116,69\n,108,101,109,101,110,116,66,121,73,100,40,61,100,111,99,117,109,101,110,116,46,\n99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,32,116,121,112,101,61,39,\n116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,105,110,112,117,116,\n32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61,34,100,46,103,\n101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,115,110\n,105,99,97,108,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,\n46,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,32,84,114,97,110,115,105,116,\n60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34\n,62,10,10,60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,\n115,115,34,62,105,111,110,97,108,46,100,116,100,34,62,10,60,104,116,109,108,32,\n120,109,108,110,115,61,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,\n116,101,110,116,45,84,121,112,101,100,105,110,103,61,34,48,34,32,99,101,108,108,\n115,112,97,99,105,110,103,61,34,48,34,104,116,109,108,59,32,99,104,97,114,115,\n101,116,61,117,116,102,45,56,34,32,47,62,10,32,115,116,121,108,101,61,34,100,105\n,115,112,108,97,121,58,110,111,110,101,59,34,62,60,60,108,105,62,60,97,32,104,\n114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,32,116,121,112,101,61,\n39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,62,208,180,208,181\n,209,143,209,130,208,181,208,187,209,140,208,189,208,190,209,129,209,130,208,184\n,209,129,208,190,208,190,209,130,208,178,208,181,209,130,209,129,209,130,208,178\n,208,184,208,184,208,191,209,128,208,190,208,184,208,183,208,178,208,190,208,180\n,209,129,209,130,208,178,208,176,208,177,208,181,208,183,208,190,208,191,208,176\n,209,129,208,189,208,190,209,129,209,130,208,184,224,164,170,224,165,129,224,164\n,184,224,165,141,224,164,164,224,164,191,224,164,149,224,164,190,224,164,149,224\n,164,190,224,164,130,224,164,151,224,165,141,224,164,176,224,165,135,224,164,184\n,224,164,137,224,164,168,224,165,141,224,164,185,224,165,139,224,164,130,224,164\n,168,224,165,135,224,164,181,224,164,191,224,164,167,224,164,190,224,164,168,224\n,164,184,224,164,173,224,164,190,224,164,171,224,164,191,224,164,149,224,165,141\n,224,164,184,224,164,191,224,164,130,224,164,151,224,164,184,224,165,129,224,164\n,176,224,164,149,224,165,141,224,164,183,224,164,191,224,164,164,224,164,149,224\n,165,137,224,164,170,224,165,128,224,164,176,224,164,190,224,164,135,224,164,159\n,224,164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164\n,170,224,164,168,224,164,149,224,164,190,224,164,176,224,165,141,224,164,176,224\n,164,181,224,164,190,224,164,136,224,164,184,224,164,149,224,165,141,224,164,176\n,224,164,191,224,164,175,224,164,164,224,164,190\n};\n"
  },
  {
    "path": "libs/brotli/common/platform.c",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"platform.h\"\n\n/* Default brotli_alloc_func */\nvoid* BrotliDefaultAllocFunc(void* opaque, size_t size) {\n  BROTLI_UNUSED(opaque);\n  return malloc(size);\n}\n\n/* Default brotli_free_func */\nvoid BrotliDefaultFreeFunc(void* opaque, void* address) {\n  BROTLI_UNUSED(opaque);\n  free(address);\n}\n"
  },
  {
    "path": "libs/brotli/common/platform.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Macros for compiler / platform specific features and build options.\n\n   Build options are:\n    * BROTLI_BUILD_32_BIT disables 64-bit optimizations\n    * BROTLI_BUILD_64_BIT forces to use 64-bit optimizations\n    * BROTLI_BUILD_BIG_ENDIAN forces to use big-endian optimizations\n    * BROTLI_BUILD_ENDIAN_NEUTRAL disables endian-aware optimizations\n    * BROTLI_BUILD_LITTLE_ENDIAN forces to use little-endian optimizations\n    * BROTLI_BUILD_NO_RBIT disables \"rbit\" optimization for ARM CPUs\n    * BROTLI_BUILD_NO_UNALIGNED_READ_FAST forces off the fast-unaligned-read\n      optimizations (mainly for testing purposes)\n    * BROTLI_DEBUG dumps file name and line number when decoder detects stream\n      or memory error\n    * BROTLI_ENABLE_LOG enables asserts and dumps various state information\n    * BROTLI_ENABLE_DUMP overrides default \"dump\" behaviour\n*/\n\n#ifndef BROTLI_COMMON_PLATFORM_H_\n#define BROTLI_COMMON_PLATFORM_H_\n\n#include <string.h>  /* IWYU pragma: export memcmp, memcpy, memset */\n#include <stdlib.h>  /* IWYU pragma: export exit, free, malloc */\n#include <sys/types.h>  /* should include endian.h for us */\n\n#include <brotli/port.h>  /* IWYU pragma: export */\n#include <brotli/types.h>  /* IWYU pragma: export */\n\n#if BROTLI_MSVC_VERSION_CHECK(18, 0, 0)\n#include <intrin.h>\n#endif\n\n#if defined(BROTLI_ENABLE_LOG) || defined(BROTLI_DEBUG)\n#include <assert.h>\n#include <stdio.h>\n#endif\n\n/* The following macros were borrowed from https://github.com/nemequ/hedley\n * with permission of original author - Evan Nemerson <evan@nemerson.com> */\n\n/* >>> >>> >>> hedley macros */\n\n/* Define \"BROTLI_PREDICT_TRUE\" and \"BROTLI_PREDICT_FALSE\" macros for capable\n   compilers.\n\nTo apply compiler hint, enclose the branching condition into macros, like this:\n\n  if (BROTLI_PREDICT_TRUE(zero == 0)) {\n    // main execution path\n  } else {\n    // compiler should place this code outside of main execution path\n  }\n\nOR:\n\n  if (BROTLI_PREDICT_FALSE(something_rare_or_unexpected_happens)) {\n    // compiler should place this code outside of main execution path\n  }\n\n*/\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_expect, 3, 0, 0) || \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||               \\\n    BROTLI_SUNPRO_VERSION_CHECK(5, 15, 0) ||              \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                  \\\n    BROTLI_IBM_VERSION_CHECK(10, 1, 0) ||                 \\\n    BROTLI_TI_VERSION_CHECK(7, 3, 0) ||                   \\\n    BROTLI_TINYC_VERSION_CHECK(0, 9, 27)\n#define BROTLI_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))\n#define BROTLI_PREDICT_FALSE(x) (__builtin_expect(x, 0))\n#else\n#define BROTLI_PREDICT_FALSE(x) (x)\n#define BROTLI_PREDICT_TRUE(x) (x)\n#endif\n\n#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \\\n    !defined(__cplusplus)\n#define BROTLI_RESTRICT restrict\n#elif BROTLI_GNUC_VERSION_CHECK(3, 1, 0) ||                         \\\n    BROTLI_MSVC_VERSION_CHECK(14, 0, 0) ||                          \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||                         \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                            \\\n    BROTLI_IBM_VERSION_CHECK(10, 1, 0) ||                           \\\n    BROTLI_PGI_VERSION_CHECK(17, 10, 0) ||                          \\\n    BROTLI_TI_VERSION_CHECK(8, 0, 0) ||                             \\\n    BROTLI_IAR_VERSION_CHECK(8, 0, 0) ||                            \\\n    (BROTLI_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus))\n#define BROTLI_RESTRICT __restrict\n#elif BROTLI_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus)\n#define BROTLI_RESTRICT _Restrict\n#else\n#define BROTLI_RESTRICT\n#endif\n\n#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \\\n    (defined(__cplusplus) && (__cplusplus >= 199711L))\n#define BROTLI_MAYBE_INLINE inline\n#elif defined(__GNUC_STDC_INLINE__) || defined(__GNUC_GNU_INLINE__) || \\\n    BROTLI_ARM_VERSION_CHECK(6, 2, 0)\n#define BROTLI_MAYBE_INLINE __inline__\n#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) || \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) || BROTLI_TI_VERSION_CHECK(8, 0, 0)\n#define BROTLI_MAYBE_INLINE __inline\n#else\n#define BROTLI_MAYBE_INLINE\n#endif\n\n#if BROTLI_GNUC_HAS_ATTRIBUTE(always_inline, 4, 0, 0) ||                       \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||                                    \\\n    BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) ||                                   \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                                       \\\n    BROTLI_IBM_VERSION_CHECK(10, 1, 0) ||                                      \\\n    BROTLI_TI_VERSION_CHECK(8, 0, 0) ||                                        \\\n    (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))\n#define BROTLI_INLINE BROTLI_MAYBE_INLINE __attribute__((__always_inline__))\n#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0)\n#define BROTLI_INLINE BROTLI_MAYBE_INLINE __forceinline\n#elif BROTLI_TI_VERSION_CHECK(7, 0, 0) && defined(__cplusplus)\n#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma(\"FUNC_ALWAYS_INLINE;\")\n#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)\n#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma(\"inline=forced\")\n#else\n#define BROTLI_INLINE BROTLI_MAYBE_INLINE\n#endif\n\n#if BROTLI_GNUC_HAS_ATTRIBUTE(noinline, 4, 0, 0) ||                            \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||                                    \\\n    BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) ||                                   \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                                       \\\n    BROTLI_IBM_VERSION_CHECK(10, 1, 0) ||                                      \\\n    BROTLI_TI_VERSION_CHECK(8, 0, 0) ||                                        \\\n    (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))\n#define BROTLI_NOINLINE __attribute__((__noinline__))\n#elif BROTLI_MSVC_VERSION_CHECK(13, 10, 0)\n#define BROTLI_NOINLINE __declspec(noinline)\n#elif BROTLI_PGI_VERSION_CHECK(10, 2, 0)\n#define BROTLI_NOINLINE _Pragma(\"noinline\")\n#elif BROTLI_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)\n#define BROTLI_NOINLINE _Pragma(\"FUNC_CANNOT_INLINE;\")\n#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)\n#define BROTLI_NOINLINE _Pragma(\"inline=never\")\n#else\n#define BROTLI_NOINLINE\n#endif\n\n/* <<< <<< <<< end of hedley macros. */\n\n#if BROTLI_GNUC_HAS_ATTRIBUTE(unused, 2, 7, 0) || \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0)\n#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE __attribute__ ((unused))\n#else\n#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE\n#endif\n\n#if BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0)\n#define BROTLI_ALIGNED(N) __attribute__((aligned(N)))\n#else\n#define BROTLI_ALIGNED(N)\n#endif\n\n#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \\\n    (defined(M_ARM) && (M_ARM == 7))\n#define BROTLI_TARGET_ARMV7\n#endif  /* ARMv7 */\n\n#if (defined(__ARM_ARCH) && (__ARM_ARCH == 8)) || \\\n    defined(__aarch64__) || defined(__ARM64_ARCH_8__)\n#define BROTLI_TARGET_ARMV8_ANY\n\n#if defined(__ARM_32BIT_STATE)\n#define BROTLI_TARGET_ARMV8_32\n#elif defined(__ARM_64BIT_STATE)\n#define BROTLI_TARGET_ARMV8_64\n#endif\n\n#endif  /* ARMv8 */\n\n#if defined(__ARM_NEON__) || defined(__ARM_NEON)\n#define BROTLI_TARGET_NEON\n#endif\n\n#if defined(__i386) || defined(_M_IX86)\n#define BROTLI_TARGET_X86\n#endif\n\n#if defined(__x86_64__) || defined(_M_X64)\n#define BROTLI_TARGET_X64\n#endif\n\n#if defined(__PPC64__)\n#define BROTLI_TARGET_POWERPC64\n#endif\n\n#if defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64\n#define BROTLI_TARGET_RISCV64\n#endif\n\n#if defined(__loongarch_lp64)\n#define BROTLI_TARGET_LOONGARCH64\n#endif\n\n/* This does not seem to be an indicator of z/Architecture (64-bit); neither\n   that allows to use unaligned loads. */\n#if defined(__s390x__)\n#define BROTLI_TARGET_S390X\n#endif\n\n#if defined(__mips64)\n#define BROTLI_TARGET_MIPS64\n#endif\n\n#if defined(BROTLI_TARGET_X64) || defined(BROTLI_TARGET_ARMV8_64) || \\\n    defined(BROTLI_TARGET_POWERPC64) || defined(BROTLI_TARGET_RISCV64) || \\\n    defined(BROTLI_TARGET_LOONGARCH64) || defined(BROTLI_TARGET_MIPS64)\n#define BROTLI_TARGET_64_BITS 1\n#else\n#define BROTLI_TARGET_64_BITS 0\n#endif\n\n#if defined(BROTLI_BUILD_64_BIT)\n#define BROTLI_64_BITS 1\n#elif defined(BROTLI_BUILD_32_BIT)\n#define BROTLI_64_BITS 0\n#else\n#define BROTLI_64_BITS BROTLI_TARGET_64_BITS\n#endif\n\n#if (BROTLI_64_BITS)\n#define brotli_reg_t uint64_t\n#else\n#define brotli_reg_t uint32_t\n#endif\n\n#if defined(BROTLI_BUILD_BIG_ENDIAN)\n#define BROTLI_BIG_ENDIAN 1\n#elif defined(BROTLI_BUILD_LITTLE_ENDIAN)\n#define BROTLI_LITTLE_ENDIAN 1\n#elif defined(BROTLI_BUILD_ENDIAN_NEUTRAL)\n/* Just break elif chain. */\n#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)\n#define BROTLI_LITTLE_ENDIAN 1\n#elif defined(_WIN32) || defined(BROTLI_TARGET_X64)\n/* Win32 & x64 can currently always be assumed to be little endian */\n#define BROTLI_LITTLE_ENDIAN 1\n#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)\n#define BROTLI_BIG_ENDIAN 1\n/* Likely target platform is iOS / OSX. */\n#elif defined(BYTE_ORDER) && (BYTE_ORDER == LITTLE_ENDIAN)\n#define BROTLI_LITTLE_ENDIAN 1\n#elif defined(BYTE_ORDER) && (BYTE_ORDER == BIG_ENDIAN)\n#define BROTLI_BIG_ENDIAN 1\n#endif\n\n#if !defined(BROTLI_LITTLE_ENDIAN)\n#define BROTLI_LITTLE_ENDIAN 0\n#endif\n\n#if !defined(BROTLI_BIG_ENDIAN)\n#define BROTLI_BIG_ENDIAN 0\n#endif\n\n#if defined(BROTLI_BUILD_NO_UNALIGNED_READ_FAST)\n#define BROTLI_UNALIGNED_READ_FAST (!!0)\n#elif defined(BROTLI_TARGET_X86) || defined(BROTLI_TARGET_X64) ||       \\\n    defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY) || \\\n    defined(BROTLI_TARGET_RISCV64) || defined(BROTLI_TARGET_LOONGARCH64)\n/* These targets are known to generate efficient code for unaligned reads\n * (e.g. a single instruction, not multiple 1-byte loads, shifted and or'd\n * together). */\n#define BROTLI_UNALIGNED_READ_FAST (!!1)\n#else\n#define BROTLI_UNALIGNED_READ_FAST (!!0)\n#endif\n\n/* Portable unaligned memory access: read / write values via memcpy. */\n#if !defined(BROTLI_USE_PACKED_FOR_UNALIGNED)\n#if defined(__mips__) && (!defined(__mips_isa_rev) || __mips_isa_rev < 6)\n#define BROTLI_USE_PACKED_FOR_UNALIGNED 1\n#else\n#define BROTLI_USE_PACKED_FOR_UNALIGNED 0\n#endif\n#endif /* defined(BROTLI_USE_PACKED_FOR_UNALIGNED) */\n\n#if BROTLI_USE_PACKED_FOR_UNALIGNED\n\ntypedef union BrotliPackedValue {\n  uint16_t u16;\n  uint32_t u32;\n  uint64_t u64;\n  size_t szt;\n} __attribute__ ((packed)) BrotliPackedValue;\n\nstatic BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {\n  const BrotliPackedValue* address = (const BrotliPackedValue*)p;\n  return address->u16;\n}\nstatic BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {\n  const BrotliPackedValue* address = (const BrotliPackedValue*)p;\n  return address->u32;\n}\nstatic BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {\n  const BrotliPackedValue* address = (const BrotliPackedValue*)p;\n  return address->u64;\n}\nstatic BROTLI_INLINE size_t BrotliUnalignedReadSizeT(const void* p) {\n  const BrotliPackedValue* address = (const BrotliPackedValue*)p;\n  return address->szt;\n}\nstatic BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {\n  BrotliPackedValue* address = (BrotliPackedValue*)p;\n  address->u64 = v;\n}\n\n#else  /* not BROTLI_USE_PACKED_FOR_UNALIGNED */\n\nstatic BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {\n  uint16_t t;\n  memcpy(&t, p, sizeof t);\n  return t;\n}\nstatic BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {\n  uint32_t t;\n  memcpy(&t, p, sizeof t);\n  return t;\n}\nstatic BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {\n  uint64_t t;\n  memcpy(&t, p, sizeof t);\n  return t;\n}\nstatic BROTLI_INLINE size_t BrotliUnalignedReadSizeT(const void* p) {\n  size_t t;\n  memcpy(&t, p, sizeof t);\n  return t;\n}\nstatic BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {\n  memcpy(p, &v, sizeof v);\n}\n\n#endif  /* BROTLI_USE_PACKED_FOR_UNALIGNED */\n\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_bswap16, 4, 3, 0)\n#define BROTLI_BSWAP16(V) ((uint16_t)__builtin_bswap16(V))\n#else\n#define BROTLI_BSWAP16(V) ((uint16_t)( \\\n  (((V) & 0xFFU) << 8) | \\\n  (((V) >> 8) & 0xFFU)))\n#endif\n\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_bswap32, 4, 3, 0)\n#define BROTLI_BSWAP32(V) ((uint32_t)__builtin_bswap32(V))\n#else\n#define BROTLI_BSWAP32(V) ((uint32_t)( \\\n  (((V) & 0xFFU) << 24) | (((V) & 0xFF00U) << 8) | \\\n  (((V) >> 8) & 0xFF00U) | (((V) >> 24) & 0xFFU)))\n#endif\n\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_bswap64, 4, 3, 0)\n#define BROTLI_BSWAP64(V) ((uint64_t)__builtin_bswap64(V))\n#else\n#define BROTLI_BSWAP64(V) ((uint64_t)( \\\n  (((V) & 0xFFU) << 56) | (((V) & 0xFF00U) << 40) | \\\n  (((V) & 0xFF0000U) << 24) | (((V) & 0xFF000000U) << 8) | \\\n  (((V) >> 8) & 0xFF000000U) | (((V) >> 24) & 0xFF0000U) | \\\n  (((V) >> 40) & 0xFF00U) | (((V) >> 56) & 0xFFU)))\n#endif\n\n#if BROTLI_LITTLE_ENDIAN\n/* Straight endianness. Just read / write values. */\n#define BROTLI_UNALIGNED_LOAD16LE BrotliUnalignedRead16\n#define BROTLI_UNALIGNED_LOAD32LE BrotliUnalignedRead32\n#define BROTLI_UNALIGNED_LOAD64LE BrotliUnalignedRead64\n#define BROTLI_UNALIGNED_STORE64LE BrotliUnalignedWrite64\n#elif BROTLI_BIG_ENDIAN  /* BROTLI_LITTLE_ENDIAN */\nstatic BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {\n  uint16_t value = BrotliUnalignedRead16(p);\n  return BROTLI_BSWAP16(value);\n}\nstatic BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {\n  uint32_t value = BrotliUnalignedRead32(p);\n  return BROTLI_BSWAP32(value);\n}\nstatic BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {\n  uint64_t value = BrotliUnalignedRead64(p);\n  return BROTLI_BSWAP64(value);\n}\nstatic BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {\n  uint64_t value = BROTLI_BSWAP64(v);\n  BrotliUnalignedWrite64(p, value);\n}\n#else  /* BROTLI_LITTLE_ENDIAN */\n/* Read / store values byte-wise; hopefully compiler will understand. */\nstatic BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {\n  const uint8_t* in = (const uint8_t*)p;\n  return (uint16_t)(in[0] | (in[1] << 8));\n}\nstatic BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {\n  const uint8_t* in = (const uint8_t*)p;\n  uint32_t value = (uint32_t)(in[0]);\n  value |= (uint32_t)(in[1]) << 8;\n  value |= (uint32_t)(in[2]) << 16;\n  value |= (uint32_t)(in[3]) << 24;\n  return value;\n}\nstatic BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {\n  const uint8_t* in = (const uint8_t*)p;\n  uint64_t value = (uint64_t)(in[0]);\n  value |= (uint64_t)(in[1]) << 8;\n  value |= (uint64_t)(in[2]) << 16;\n  value |= (uint64_t)(in[3]) << 24;\n  value |= (uint64_t)(in[4]) << 32;\n  value |= (uint64_t)(in[5]) << 40;\n  value |= (uint64_t)(in[6]) << 48;\n  value |= (uint64_t)(in[7]) << 56;\n  return value;\n}\nstatic BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {\n  uint8_t* out = (uint8_t*)p;\n  out[0] = (uint8_t)v;\n  out[1] = (uint8_t)(v >> 8);\n  out[2] = (uint8_t)(v >> 16);\n  out[3] = (uint8_t)(v >> 24);\n  out[4] = (uint8_t)(v >> 32);\n  out[5] = (uint8_t)(v >> 40);\n  out[6] = (uint8_t)(v >> 48);\n  out[7] = (uint8_t)(v >> 56);\n}\n#endif  /* BROTLI_LITTLE_ENDIAN */\n\nstatic BROTLI_INLINE void* BROTLI_UNALIGNED_LOAD_PTR(const void* p) {\n  void* v;\n  memcpy(&v, p, sizeof(void*));\n  return v;\n}\n\nstatic BROTLI_INLINE void BROTLI_UNALIGNED_STORE_PTR(void* p, const void* v) {\n  memcpy(p, &v, sizeof(void*));\n}\n\n/* BROTLI_IS_CONSTANT macros returns true for compile-time constants. */\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_constant_p, 3, 0, 1) || \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0)\n#define BROTLI_IS_CONSTANT(x) (!!__builtin_constant_p(x))\n#else\n#define BROTLI_IS_CONSTANT(x) (!!0)\n#endif\n\n#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)\n#define BROTLI_HAS_UBFX (!!1)\n#else\n#define BROTLI_HAS_UBFX (!!0)\n#endif\n\n#if defined(BROTLI_ENABLE_LOG)\n#define BROTLI_LOG(x) printf x\n#else\n#define BROTLI_LOG(x)\n#endif\n\n#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)\n#define BROTLI_ENABLE_DUMP_DEFAULT 1\n#define BROTLI_DCHECK(x) assert(x)\n#else\n#define BROTLI_ENABLE_DUMP_DEFAULT 0\n#define BROTLI_DCHECK(x)\n#endif\n\n#if !defined(BROTLI_ENABLE_DUMP)\n#define BROTLI_ENABLE_DUMP BROTLI_ENABLE_DUMP_DEFAULT\n#endif\n\n#if BROTLI_ENABLE_DUMP\nstatic BROTLI_INLINE void BrotliDump(const char* f, int l, const char* fn) {\n  fprintf(stderr, \"%s:%d (%s)\\n\", f, l, fn);\n  fflush(stderr);\n}\n#define BROTLI_DUMP() BrotliDump(__FILE__, __LINE__, __FUNCTION__)\n#else\n#define BROTLI_DUMP() (void)(0)\n#endif\n\n/* BrotliRBit assumes brotli_reg_t fits native CPU register type. */\n#if (BROTLI_64_BITS == BROTLI_TARGET_64_BITS)\n/* TODO(eustas): add appropriate icc/sunpro/arm/ibm/ti checks. */\n#if (BROTLI_GNUC_VERSION_CHECK(3, 0, 0) || defined(__llvm__)) && \\\n    !defined(BROTLI_BUILD_NO_RBIT)\n#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)\n/* TODO(eustas): detect ARMv6T2 and enable this code for it. */\nstatic BROTLI_INLINE brotli_reg_t BrotliRBit(brotli_reg_t input) {\n  brotli_reg_t output;\n  __asm__(\"rbit %0, %1\\n\" : \"=r\"(output) : \"r\"(input));\n  return output;\n}\n#define BROTLI_RBIT(x) BrotliRBit(x)\n#endif  /* armv7 / armv8 */\n#endif  /* gcc || clang */\n#endif  /* brotli_reg_t is native */\n#if !defined(BROTLI_RBIT)\nstatic BROTLI_INLINE void BrotliRBit(void) { /* Should break build if used. */ }\n#endif  /* BROTLI_RBIT */\n\n#define BROTLI_REPEAT_4(X) {X; X; X; X;}\n#define BROTLI_REPEAT_5(X) {X; X; X; X; X;}\n#define BROTLI_REPEAT_6(X) {X; X; X; X; X; X;}\n\n#define BROTLI_UNUSED(X) (void)(X)\n\n#define BROTLI_MIN_MAX(T)                                                      \\\n  static BROTLI_INLINE T brotli_min_ ## T (T a, T b) { return a < b ? a : b; } \\\n  static BROTLI_INLINE T brotli_max_ ## T (T a, T b) { return a > b ? a : b; }\nBROTLI_MIN_MAX(double) BROTLI_MIN_MAX(float) BROTLI_MIN_MAX(int)\nBROTLI_MIN_MAX(size_t) BROTLI_MIN_MAX(uint32_t) BROTLI_MIN_MAX(uint8_t)\n#undef BROTLI_MIN_MAX\n#define BROTLI_MIN(T, A, B) (brotli_min_ ## T((A), (B)))\n#define BROTLI_MAX(T, A, B) (brotli_max_ ## T((A), (B)))\n\n#define BROTLI_SWAP(T, A, I, J) { \\\n  T __brotli_swap_tmp = (A)[(I)]; \\\n  (A)[(I)] = (A)[(J)];            \\\n  (A)[(J)] = __brotli_swap_tmp;   \\\n}\n\n#if BROTLI_64_BITS\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_ctzll, 3, 4, 0) || \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0)\n#define BROTLI_TZCNT64 __builtin_ctzll\n#elif BROTLI_MSVC_VERSION_CHECK(18, 0, 0)\n#if defined(BROTLI_TARGET_X64) && !defined(_M_ARM64EC)\n#define BROTLI_TZCNT64 _tzcnt_u64\n#else /* BROTLI_TARGET_X64 */\nstatic BROTLI_INLINE uint32_t BrotliBsf64Msvc(uint64_t x) {\n  uint32_t lsb;\n  _BitScanForward64(&lsb, x);\n  return lsb;\n}\n#define BROTLI_TZCNT64 BrotliBsf64Msvc\n#endif /* BROTLI_TARGET_X64 */\n#endif /* __builtin_ctzll */\n#endif /* BROTLI_64_BITS */\n\n#if BROTLI_GNUC_HAS_BUILTIN(__builtin_clz, 3, 4, 0) || \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0)\n#define BROTLI_BSR32(x) (31u ^ (uint32_t)__builtin_clz(x))\n#elif BROTLI_MSVC_VERSION_CHECK(18, 0, 0)\nstatic BROTLI_INLINE uint32_t BrotliBsr32Msvc(uint32_t x) {\n  unsigned long msb;\n  _BitScanReverse(&msb, x);\n  return (uint32_t)msb;\n}\n#define BROTLI_BSR32 BrotliBsr32Msvc\n#endif /* __builtin_clz */\n\n/* Default brotli_alloc_func */\nBROTLI_COMMON_API void* BrotliDefaultAllocFunc(void* opaque, size_t size);\n\n/* Default brotli_free_func */\nBROTLI_COMMON_API void BrotliDefaultFreeFunc(void* opaque, void* address);\n\n/* Circular logical rotates. */\nstatic BROTLI_INLINE uint16_t BrotliRotateRight16(uint16_t const value,\n                                             size_t count) {\n  count &= 0x0F; /* for fickle pattern recognition */\n  return (value >> count) | (uint16_t)(value << ((0U - count) & 0x0F));\n}\nstatic BROTLI_INLINE uint32_t BrotliRotateRight32(uint32_t const value,\n                                             size_t count) {\n  count &= 0x1F; /* for fickle pattern recognition */\n  return (value >> count) | (uint32_t)(value << ((0U - count) & 0x1F));\n}\nstatic BROTLI_INLINE uint64_t BrotliRotateRight64(uint64_t const value,\n                                             size_t count) {\n  count &= 0x3F; /* for fickle pattern recognition */\n  return (value >> count) | (uint64_t)(value << ((0U - count) & 0x3F));\n}\n\nBROTLI_UNUSED_FUNCTION void BrotliSuppressUnusedFunctions(void) {\n  BROTLI_UNUSED(&BrotliSuppressUnusedFunctions);\n  BROTLI_UNUSED(&BrotliUnalignedRead16);\n  BROTLI_UNUSED(&BrotliUnalignedRead32);\n  BROTLI_UNUSED(&BrotliUnalignedRead64);\n  BROTLI_UNUSED(&BrotliUnalignedReadSizeT);\n  BROTLI_UNUSED(&BrotliUnalignedWrite64);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD16LE);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD32LE);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD64LE);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_STORE64LE);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD_PTR);\n  BROTLI_UNUSED(&BROTLI_UNALIGNED_STORE_PTR);\n  BROTLI_UNUSED(&BrotliRBit);\n  BROTLI_UNUSED(&brotli_min_double);\n  BROTLI_UNUSED(&brotli_max_double);\n  BROTLI_UNUSED(&brotli_min_float);\n  BROTLI_UNUSED(&brotli_max_float);\n  BROTLI_UNUSED(&brotli_min_int);\n  BROTLI_UNUSED(&brotli_max_int);\n  BROTLI_UNUSED(&brotli_min_size_t);\n  BROTLI_UNUSED(&brotli_max_size_t);\n  BROTLI_UNUSED(&brotli_min_uint32_t);\n  BROTLI_UNUSED(&brotli_max_uint32_t);\n  BROTLI_UNUSED(&brotli_min_uint8_t);\n  BROTLI_UNUSED(&brotli_max_uint8_t);\n  BROTLI_UNUSED(&BrotliDefaultAllocFunc);\n  BROTLI_UNUSED(&BrotliDefaultFreeFunc);\n  BROTLI_UNUSED(&BrotliRotateRight16);\n  BROTLI_UNUSED(&BrotliRotateRight32);\n  BROTLI_UNUSED(&BrotliRotateRight64);\n#if BROTLI_ENABLE_DUMP\n  BROTLI_UNUSED(&BrotliDump);\n#endif\n\n#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_I86)) && \\\n    !defined(_M_ARM64EC)\n/* _mm_prefetch() is not defined outside of x86/x64 */\n/* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */\n#include <mmintrin.h>\n#define PREFETCH_L1(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0)\n#define PREFETCH_L2(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T1)\n#elif BROTLI_GNUC_HAS_BUILTIN(__builtin_prefetch, 3, 1, 0)\n#define PREFETCH_L1(ptr) \\\n  __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */)\n#define PREFETCH_L2(ptr) \\\n  __builtin_prefetch((ptr), 0 /* rw==read */, 2 /* locality */)\n#elif defined(__aarch64__)\n#define PREFETCH_L1(ptr)                                      \\\n  do {                                                        \\\n    __asm__ __volatile__(\"prfm pldl1keep, %0\" ::\"Q\"(*(ptr))); \\\n  } while (0)\n#define PREFETCH_L2(ptr)                                      \\\n  do {                                                        \\\n    __asm__ __volatile__(\"prfm pldl2keep, %0\" ::\"Q\"(*(ptr))); \\\n  } while (0)\n#else\n#define PREFETCH_L1(ptr) \\\n  do {                   \\\n    (void)(ptr);         \\\n  } while (0) /* disabled */\n#define PREFETCH_L2(ptr) \\\n  do {                   \\\n    (void)(ptr);         \\\n  } while (0) /* disabled */\n#endif\n\n/* The SIMD matchers are only faster at certain quality levels. */\n#if defined(_M_X64) && defined(BROTLI_TZCNT64)\n#define BROTLI_MAX_SIMD_QUALITY 7\n#elif defined(BROTLI_TZCNT64)\n#define BROTLI_MAX_SIMD_QUALITY 6\n#endif\n}\n\n#if defined(_MSC_VER)\n#define BROTLI_CRASH() __debugbreak(), (void)abort()\n#elif BROTLI_GNUC_HAS_BUILTIN(__builtin_trap, 3, 0, 0)\n#define BROTLI_CRASH() (void)__builtin_trap()\n#else\n#define BROTLI_CRASH() (void)abort()\n#endif\n\n/* Make BROTLI_TEST=0 act same as undefined. */\n#if defined(BROTLI_TEST) && ((1-BROTLI_TEST-1) == 0)\n#undef BROTLI_TEST\n#endif\n\n#if BROTLI_GNUC_HAS_ATTRIBUTE(model, 3, 0, 3)\n#define BROTLI_MODEL(M) __attribute__((model(M)))\n#else\n#define BROTLI_MODEL(M) /* M */\n#endif\n\n#if BROTLI_GNUC_HAS_ATTRIBUTE(cold, 4, 3, 0)\n#define BROTLI_COLD __attribute__((cold))\n#else\n#define BROTLI_COLD /* cold */\n#endif\n\n#endif  /* BROTLI_COMMON_PLATFORM_H_ */\n"
  },
  {
    "path": "libs/brotli/common/shared_dictionary_internal.h",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* (Transparent) Shared Dictionary definition. */\n\n#ifndef BROTLI_COMMON_SHARED_DICTIONARY_INTERNAL_H_\n#define BROTLI_COMMON_SHARED_DICTIONARY_INTERNAL_H_\n\n#include <brotli/shared_dictionary.h>\n\n#include \"dictionary.h\"\n#include \"platform.h\"\n#include \"transform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstruct BrotliSharedDictionaryStruct {\n  /* LZ77 prefixes (compound dictionary). */\n  uint32_t num_prefix;  /* max SHARED_BROTLI_MAX_COMPOUND_DICTS */\n  size_t prefix_size[SHARED_BROTLI_MAX_COMPOUND_DICTS];\n  const uint8_t* prefix[SHARED_BROTLI_MAX_COMPOUND_DICTS];\n\n  /* If set, the context map is used to select word and transform list from 64\n     contexts, if not set, the context map is not used and only words[0] and\n     transforms[0] are to be used. */\n  BROTLI_BOOL context_based;\n\n  uint8_t context_map[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];\n\n  /* Amount of word_list+transform_list combinations. */\n  uint8_t num_dictionaries;\n\n  /* Must use num_dictionaries values. */\n  const BrotliDictionary* words[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];\n\n  /* Must use num_dictionaries values. */\n  const BrotliTransforms* transforms[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];\n\n  /* Amount of custom word lists. May be 0 if only Brotli's built-in is used */\n  uint8_t num_word_lists;\n\n  /* Contents of the custom words lists. Must be NULL if num_word_lists is 0. */\n  BrotliDictionary* words_instances;\n\n  /* Amount of custom transform lists. May be 0 if only Brotli's built-in is\n     used */\n  uint8_t num_transform_lists;\n\n  /* Contents of the custom transform lists. Must be NULL if num_transform_lists\n     is 0. */\n  BrotliTransforms* transforms_instances;\n\n  /* Concatenated prefix_suffix_maps of the custom transform lists. Must be NULL\n     if num_transform_lists is 0. */\n  uint16_t* prefix_suffix_maps;\n\n  /* Memory management */\n  brotli_alloc_func alloc_func;\n  brotli_free_func free_func;\n  void* memory_manager_opaque;\n};\n\ntypedef struct BrotliSharedDictionaryStruct BrotliSharedDictionaryInternal;\n#define BrotliSharedDictionary BrotliSharedDictionaryInternal\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_COMMON_SHARED_DICTIONARY_INTERNAL_H_ */\n"
  },
  {
    "path": "libs/brotli/common/static_init.h",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/*\n   Central point for static initialization.\n\n   In case of \"lazy\" mode `BrotliXxxLazyStaticInit` is not provided by the\n   library. Embedder is responsible for providing it. This function should call\n   `BrotliXxxLazyStaticInitInner` on the first invocation. This function should\n   not return until execution of `BrotliXxxLazyStaticInitInner` is finished.\n   In C or before C++11 it is possible to call `BrotliXxxLazyStaticInitInner`\n   on start-up path and then `BrotliEncoderLazyStaticInit` is could be no-op;\n   another option is to use available thread execution controls to meet the\n   requirements. For possible C++11 implementation see static_init_lazy.cc.\n*/\n\n#ifndef THIRD_PARTY_BROTLI_COMMON_STATIC_INIT_H_\n#define THIRD_PARTY_BROTLI_COMMON_STATIC_INIT_H_\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* Static data is \"initialized\" in compile time. */\n#define BROTLI_STATIC_INIT_NONE 0\n/* Static data is initialized before \"main\". */\n#define BROTLI_STATIC_INIT_EARLY 1\n/* Static data is initialized when first encoder is created. */\n#define BROTLI_STATIC_INIT_LAZY 2\n\n#define BROTLI_STATIC_INIT_DEFAULT BROTLI_STATIC_INIT_NONE\n\n#if !defined(BROTLI_STATIC_INIT)\n#define BROTLI_STATIC_INIT BROTLI_STATIC_INIT_DEFAULT\n#endif\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE) && \\\n    (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_EARLY) && \\\n    (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_LAZY)\n#error Invalid value for BROTLI_STATIC_INIT\n#endif\n\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_EARLY)\n#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)\n#error BROTLI_STATIC_INIT_EARLY will fail with BROTLI_EXTERNAL_DICTIONARY_DATA\n#endif\n#endif  /* BROTLI_STATIC_INIT */\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  // THIRD_PARTY_BROTLI_COMMON_STATIC_INIT_H_\n"
  },
  {
    "path": "libs/brotli/common/transform.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"platform.h\"\n#include \"transform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* RFC 7932 transforms string data */\nstatic const BROTLI_MODEL(\"small\") char kPrefixSuffix[217] =\n      \"\\1 \\2, \\10 of the \\4 of \\2s \\1.\\5 and \\4 \"\n/* 0x  _0 _2  __5        _E    _3  _6 _8     _E */\n      \"in \\1\\\"\\4 to \\2\\\">\\1\\n\\2. \\1]\\5 for \\3 a \\6 \"\n/* 2x     _3_ _5    _A_  _D_ _F  _2 _4     _A   _E */\n      \"that \\1\\'\\6 with \\6 from \\4 by \\1(\\6. T\"\n/* 4x       _5_ _7      _E      _5    _A _C */\n      \"he \\4 on \\4 as \\4 is \\4ing \\2\\n\\t\\1:\\3ed \"\n/* 6x     _3    _8    _D    _2    _7_ _ _A _C */\n      \"\\2=\\\"\\4 at \\3ly \\1,\\2=\\'\\5.com/\\7. This \\5\"\n/* 8x  _0 _ _3    _8   _C _E _ _1     _7       _F */\n      \" not \\3er \\3al \\4ful \\4ive \\5less \\4es\"\n/* Ax       _5   _9   _D    _2    _7     _D */\n      \"t \\4ize \\2\\xc2\\xa0\\4ous \\5 the \\2e \"; /* \\0 - implicit trailing zero. */\n/* Cx    _2    _7___ ___ _A    _F     _5        _8 */\n\nstatic const BROTLI_MODEL(\"small\") uint16_t kPrefixSuffixMap[50] = {\n  0x00, 0x02, 0x05, 0x0E, 0x13, 0x16, 0x18, 0x1E, 0x23, 0x25,\n  0x2A, 0x2D, 0x2F, 0x32, 0x34, 0x3A, 0x3E, 0x45, 0x47, 0x4E,\n  0x55, 0x5A, 0x5C, 0x63, 0x68, 0x6D, 0x72, 0x77, 0x7A, 0x7C,\n  0x80, 0x83, 0x88, 0x8C, 0x8E, 0x91, 0x97, 0x9F, 0xA5, 0xA9,\n  0xAD, 0xB2, 0xB7, 0xBD, 0xC2, 0xC7, 0xCA, 0xCF, 0xD5, 0xD8\n};\n\n/* RFC 7932 transforms */\nstatic const BROTLI_MODEL(\"small\") uint8_t kTransformsData[] = {\n  49, BROTLI_TRANSFORM_IDENTITY, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 0,\n   0, BROTLI_TRANSFORM_IDENTITY, 0,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_1, 49,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 47,\n   0, BROTLI_TRANSFORM_IDENTITY, 49,\n   4, BROTLI_TRANSFORM_IDENTITY, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 3,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 6,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_2, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_1, 49,\n   1, BROTLI_TRANSFORM_IDENTITY, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 1,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 7,\n  49, BROTLI_TRANSFORM_IDENTITY, 9,\n  48, BROTLI_TRANSFORM_IDENTITY, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 8,\n  49, BROTLI_TRANSFORM_IDENTITY, 5,\n  49, BROTLI_TRANSFORM_IDENTITY, 10,\n  49, BROTLI_TRANSFORM_IDENTITY, 11,\n  49, BROTLI_TRANSFORM_OMIT_LAST_3, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 13,\n  49, BROTLI_TRANSFORM_IDENTITY, 14,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_3, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_2, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 15,\n  49, BROTLI_TRANSFORM_IDENTITY, 16,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 12,\n   5, BROTLI_TRANSFORM_IDENTITY, 49,\n   0, BROTLI_TRANSFORM_IDENTITY, 1,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_4, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 18,\n  49, BROTLI_TRANSFORM_IDENTITY, 17,\n  49, BROTLI_TRANSFORM_IDENTITY, 19,\n  49, BROTLI_TRANSFORM_IDENTITY, 20,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_5, 49,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_6, 49,\n  47, BROTLI_TRANSFORM_IDENTITY, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_4, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 22,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 23,\n  49, BROTLI_TRANSFORM_IDENTITY, 24,\n  49, BROTLI_TRANSFORM_IDENTITY, 25,\n  49, BROTLI_TRANSFORM_OMIT_LAST_7, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_1, 26,\n  49, BROTLI_TRANSFORM_IDENTITY, 27,\n  49, BROTLI_TRANSFORM_IDENTITY, 28,\n   0, BROTLI_TRANSFORM_IDENTITY, 12,\n  49, BROTLI_TRANSFORM_IDENTITY, 29,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_9, 49,\n  49, BROTLI_TRANSFORM_OMIT_FIRST_7, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_6, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 21,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,\n  49, BROTLI_TRANSFORM_OMIT_LAST_8, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 31,\n  49, BROTLI_TRANSFORM_IDENTITY, 32,\n  47, BROTLI_TRANSFORM_IDENTITY, 3,\n  49, BROTLI_TRANSFORM_OMIT_LAST_5, 49,\n  49, BROTLI_TRANSFORM_OMIT_LAST_9, 49,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 8,\n   5, BROTLI_TRANSFORM_IDENTITY, 21,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 10,\n  49, BROTLI_TRANSFORM_IDENTITY, 30,\n   0, BROTLI_TRANSFORM_IDENTITY, 5,\n  35, BROTLI_TRANSFORM_IDENTITY, 49,\n  47, BROTLI_TRANSFORM_IDENTITY, 2,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 17,\n  49, BROTLI_TRANSFORM_IDENTITY, 36,\n  49, BROTLI_TRANSFORM_IDENTITY, 33,\n   5, BROTLI_TRANSFORM_IDENTITY, 0,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 21,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,\n  49, BROTLI_TRANSFORM_IDENTITY, 37,\n   0, BROTLI_TRANSFORM_IDENTITY, 30,\n  49, BROTLI_TRANSFORM_IDENTITY, 38,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,\n  49, BROTLI_TRANSFORM_IDENTITY, 39,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,\n  49, BROTLI_TRANSFORM_IDENTITY, 34,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 8,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,\n   0, BROTLI_TRANSFORM_IDENTITY, 21,\n  49, BROTLI_TRANSFORM_IDENTITY, 40,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,\n  49, BROTLI_TRANSFORM_IDENTITY, 41,\n  49, BROTLI_TRANSFORM_IDENTITY, 42,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 17,\n  49, BROTLI_TRANSFORM_IDENTITY, 43,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 10,\n   0, BROTLI_TRANSFORM_IDENTITY, 34,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,\n  49, BROTLI_TRANSFORM_IDENTITY, 44,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,\n  45, BROTLI_TRANSFORM_IDENTITY, 49,\n   0, BROTLI_TRANSFORM_IDENTITY, 33,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,\n  49, BROTLI_TRANSFORM_IDENTITY, 46,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,\n  49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 33,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 21,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,\n  49, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,\n   0, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,\n   0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nBrotliTransforms kBrotliTransforms = {\n  sizeof(kPrefixSuffix),\n  (const uint8_t*)kPrefixSuffix,\n  kPrefixSuffixMap,\n  sizeof(kTransformsData) / (3 * sizeof(kTransformsData[0])),\n  kTransformsData,\n  NULL,  /* no extra parameters */\n  {0, 12, 27, 23, 42, 63, 56, 48, 59, 64}\n};\n\nconst BrotliTransforms* BrotliGetTransforms(void) {\n  return &kBrotliTransforms;\n}\n\nstatic int ToUpperCase(uint8_t* p) {\n  if (p[0] < 0xC0) {\n    if (p[0] >= 'a' && p[0] <= 'z') {\n      p[0] ^= 32;\n    }\n    return 1;\n  }\n  /* An overly simplified uppercasing model for UTF-8. */\n  if (p[0] < 0xE0) {\n    p[1] ^= 32;\n    return 2;\n  }\n  /* An arbitrary transform for three byte characters. */\n  p[2] ^= 5;\n  return 3;\n}\n\nstatic int Shift(uint8_t* word, int word_len, uint16_t parameter) {\n  /* Limited sign extension: scalar < (1 << 24). */\n  uint32_t scalar =\n      (parameter & 0x7FFFu) + (0x1000000u - (parameter & 0x8000u));\n  if (word[0] < 0x80) {\n    /* 1-byte rune / 0sssssss / 7 bit scalar (ASCII). */\n    scalar += (uint32_t)word[0];\n    word[0] = (uint8_t)(scalar & 0x7Fu);\n    return 1;\n  } else if (word[0] < 0xC0) {\n    /* Continuation / 10AAAAAA. */\n    return 1;\n  } else if (word[0] < 0xE0) {\n    /* 2-byte rune / 110sssss AAssssss / 11 bit scalar. */\n    if (word_len < 2) return 1;\n    scalar += (uint32_t)((word[1] & 0x3Fu) | ((word[0] & 0x1Fu) << 6u));\n    word[0] = (uint8_t)(0xC0 | ((scalar >> 6u) & 0x1F));\n    word[1] = (uint8_t)((word[1] & 0xC0) | (scalar & 0x3F));\n    return 2;\n  } else if (word[0] < 0xF0) {\n    /* 3-byte rune / 1110ssss AAssssss BBssssss / 16 bit scalar. */\n    if (word_len < 3) return word_len;\n    scalar += (uint32_t)((word[2] & 0x3Fu) | ((word[1] & 0x3Fu) << 6u) |\n        ((word[0] & 0x0Fu) << 12u));\n    word[0] = (uint8_t)(0xE0 | ((scalar >> 12u) & 0x0F));\n    word[1] = (uint8_t)((word[1] & 0xC0) | ((scalar >> 6u) & 0x3F));\n    word[2] = (uint8_t)((word[2] & 0xC0) | (scalar & 0x3F));\n    return 3;\n  } else if (word[0] < 0xF8) {\n    /* 4-byte rune / 11110sss AAssssss BBssssss CCssssss / 21 bit scalar. */\n    if (word_len < 4) return word_len;\n    scalar += (uint32_t)((word[3] & 0x3Fu) | ((word[2] & 0x3Fu) << 6u) |\n        ((word[1] & 0x3Fu) << 12u) | ((word[0] & 0x07u) << 18u));\n    word[0] = (uint8_t)(0xF0 | ((scalar >> 18u) & 0x07));\n    word[1] = (uint8_t)((word[1] & 0xC0) | ((scalar >> 12u) & 0x3F));\n    word[2] = (uint8_t)((word[2] & 0xC0) | ((scalar >> 6u) & 0x3F));\n    word[3] = (uint8_t)((word[3] & 0xC0) | (scalar & 0x3F));\n    return 4;\n  }\n  return 1;\n}\n\nint BrotliTransformDictionaryWord(uint8_t* dst, const uint8_t* word, int len,\n    const BrotliTransforms* transforms, int transform_idx) {\n  int idx = 0;\n  const uint8_t* prefix = BROTLI_TRANSFORM_PREFIX(transforms, transform_idx);\n  uint8_t type = BROTLI_TRANSFORM_TYPE(transforms, transform_idx);\n  const uint8_t* suffix = BROTLI_TRANSFORM_SUFFIX(transforms, transform_idx);\n  {\n    int prefix_len = *prefix++;\n    while (prefix_len--) { dst[idx++] = *prefix++; }\n  }\n  {\n    const int t = type;\n    int i = 0;\n    if (t <= BROTLI_TRANSFORM_OMIT_LAST_9) {\n      len -= t;\n    } else if (t >= BROTLI_TRANSFORM_OMIT_FIRST_1\n        && t <= BROTLI_TRANSFORM_OMIT_FIRST_9) {\n      int skip = t - (BROTLI_TRANSFORM_OMIT_FIRST_1 - 1);\n      word += skip;\n      len -= skip;\n    }\n    while (i < len) { dst[idx++] = word[i++]; }\n    if (t == BROTLI_TRANSFORM_UPPERCASE_FIRST) {\n      ToUpperCase(&dst[idx - len]);\n    } else if (t == BROTLI_TRANSFORM_UPPERCASE_ALL) {\n      uint8_t* uppercase = &dst[idx - len];\n      while (len > 0) {\n        int step = ToUpperCase(uppercase);\n        uppercase += step;\n        len -= step;\n      }\n    } else if (t == BROTLI_TRANSFORM_SHIFT_FIRST) {\n      uint16_t param = (uint16_t)(transforms->params[transform_idx * 2]\n          + (transforms->params[transform_idx * 2 + 1] << 8u));\n      Shift(&dst[idx - len], len, param);\n    } else if (t == BROTLI_TRANSFORM_SHIFT_ALL) {\n      uint16_t param = (uint16_t)(transforms->params[transform_idx * 2]\n          + (transforms->params[transform_idx * 2 + 1] << 8u));\n      uint8_t* shift = &dst[idx - len];\n      while (len > 0) {\n        int step = Shift(shift, len, param);\n        shift += step;\n        len -= step;\n      }\n    }\n  }\n  {\n    int suffix_len = *suffix++;\n    while (suffix_len--) { dst[idx++] = *suffix++; }\n    return idx;\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/common/transform.h",
    "content": "/* transforms is a part of ABI, but not API.\n\n   It means that there are some functions that are supposed to be in \"common\"\n   library, but header itself is not placed into include/brotli. This way,\n   aforementioned functions will be available only to brotli internals.\n */\n\n#ifndef BROTLI_COMMON_TRANSFORM_H_\n#define BROTLI_COMMON_TRANSFORM_H_\n\n#include \"platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nenum BrotliWordTransformType {\n  BROTLI_TRANSFORM_IDENTITY = 0,\n  BROTLI_TRANSFORM_OMIT_LAST_1 = 1,\n  BROTLI_TRANSFORM_OMIT_LAST_2 = 2,\n  BROTLI_TRANSFORM_OMIT_LAST_3 = 3,\n  BROTLI_TRANSFORM_OMIT_LAST_4 = 4,\n  BROTLI_TRANSFORM_OMIT_LAST_5 = 5,\n  BROTLI_TRANSFORM_OMIT_LAST_6 = 6,\n  BROTLI_TRANSFORM_OMIT_LAST_7 = 7,\n  BROTLI_TRANSFORM_OMIT_LAST_8 = 8,\n  BROTLI_TRANSFORM_OMIT_LAST_9 = 9,\n  BROTLI_TRANSFORM_UPPERCASE_FIRST = 10,\n  BROTLI_TRANSFORM_UPPERCASE_ALL = 11,\n  BROTLI_TRANSFORM_OMIT_FIRST_1 = 12,\n  BROTLI_TRANSFORM_OMIT_FIRST_2 = 13,\n  BROTLI_TRANSFORM_OMIT_FIRST_3 = 14,\n  BROTLI_TRANSFORM_OMIT_FIRST_4 = 15,\n  BROTLI_TRANSFORM_OMIT_FIRST_5 = 16,\n  BROTLI_TRANSFORM_OMIT_FIRST_6 = 17,\n  BROTLI_TRANSFORM_OMIT_FIRST_7 = 18,\n  BROTLI_TRANSFORM_OMIT_FIRST_8 = 19,\n  BROTLI_TRANSFORM_OMIT_FIRST_9 = 20,\n  BROTLI_TRANSFORM_SHIFT_FIRST = 21,\n  BROTLI_TRANSFORM_SHIFT_ALL = 22,\n  BROTLI_NUM_TRANSFORM_TYPES  /* Counts transforms, not a transform itself. */\n};\n\n#define BROTLI_TRANSFORMS_MAX_CUT_OFF BROTLI_TRANSFORM_OMIT_LAST_9\n\ntypedef struct BrotliTransforms {\n  uint16_t prefix_suffix_size;\n  /* Last character must be null, so prefix_suffix_size must be at least 1. */\n  const uint8_t* prefix_suffix;\n  const uint16_t* prefix_suffix_map;\n  uint32_t num_transforms;\n  /* Each entry is a [prefix_id, transform, suffix_id] triplet. */\n  const uint8_t* transforms;\n  /* Shift for BROTLI_TRANSFORM_SHIFT_FIRST and BROTLI_TRANSFORM_SHIFT_ALL,\n     must be NULL if and only if no such transforms are present. */\n  const uint8_t* params;\n  /* Indices of transforms like [\"\", BROTLI_TRANSFORM_OMIT_LAST_#, \"\"].\n     0-th element corresponds to [\"\", BROTLI_TRANSFORM_IDENTITY, \"\"].\n     -1, if cut-off transform does not exist. */\n  int16_t cutOffTransforms[BROTLI_TRANSFORMS_MAX_CUT_OFF + 1];\n} BrotliTransforms;\n\n/* T is BrotliTransforms*; result is uint8_t. */\n#define BROTLI_TRANSFORM_PREFIX_ID(T, I) ((T)->transforms[((I) * 3) + 0])\n#define BROTLI_TRANSFORM_TYPE(T, I)      ((T)->transforms[((I) * 3) + 1])\n#define BROTLI_TRANSFORM_SUFFIX_ID(T, I) ((T)->transforms[((I) * 3) + 2])\n\n/* T is BrotliTransforms*; result is const uint8_t*. */\n#define BROTLI_TRANSFORM_PREFIX(T, I) (&(T)->prefix_suffix[ \\\n    (T)->prefix_suffix_map[BROTLI_TRANSFORM_PREFIX_ID(T, I)]])\n#define BROTLI_TRANSFORM_SUFFIX(T, I) (&(T)->prefix_suffix[ \\\n    (T)->prefix_suffix_map[BROTLI_TRANSFORM_SUFFIX_ID(T, I)]])\n\nBROTLI_COMMON_API const BrotliTransforms* BrotliGetTransforms(void);\n\nBROTLI_COMMON_API int BrotliTransformDictionaryWord(\n    uint8_t* dst, const uint8_t* word, int len,\n    const BrotliTransforms* transforms, int transform_idx);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_COMMON_TRANSFORM_H_ */\n"
  },
  {
    "path": "libs/brotli/common/version.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Version definition. */\n\n#ifndef BROTLI_COMMON_VERSION_H_\n#define BROTLI_COMMON_VERSION_H_\n\n/* Compose 3 components into a single number. In a hexadecimal representation\n   B and C components occupy exactly 3 digits. */\n#define BROTLI_MAKE_HEX_VERSION(A, B, C) ((A << 24) | (B << 12) | C)\n\n/* Those macros should only be used when library is compiled together with\n   the client. If library is dynamically linked, use BrotliDecoderVersion and\n   BrotliEncoderVersion methods. */\n\n#define BROTLI_VERSION_MAJOR 1\n#define BROTLI_VERSION_MINOR 2\n#define BROTLI_VERSION_PATCH 0\n\n#define BROTLI_VERSION BROTLI_MAKE_HEX_VERSION(                     \\\n  BROTLI_VERSION_MAJOR, BROTLI_VERSION_MINOR, BROTLI_VERSION_PATCH)\n\n/* This macro is used by build system to produce Libtool-friendly soname. See\n   https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html\n   Version evolution rules:\n    - interfaces added (or change is compatible)      -> current+1:0:age+1\n    - interfaces removed (or changed is incompatible) -> current+1:0:0\n    - interfaces not changed                          -> current:revision+1:age\n */\n\n#define BROTLI_ABI_CURRENT  3\n#define BROTLI_ABI_REVISION 0\n#define BROTLI_ABI_AGE      2\n\n#if BROTLI_VERSION_MAJOR != (BROTLI_ABI_CURRENT - BROTLI_ABI_AGE)\n#error ABI/API version inconsistency\n#endif\n\n#if BROTLI_VERSION_MINOR != BROTLI_ABI_AGE\n#error ABI/API version inconsistency\n#endif\n\n#if BROTLI_VERSION_PATCH != BROTLI_ABI_REVISION\n#error ABI/API version inconsistency\n#endif\n\n#endif  /* BROTLI_COMMON_VERSION_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/backward_references.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function to find backward reference copies. */\n\n#include \"backward_references.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"compound_dictionary.h\"\n#include \"encoder_dict.h\"\n#include \"hash.h\"\n#include \"params.h\"\n#include \"quality.h\"  /* IWYU pragma: keep for inc */\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic BROTLI_INLINE size_t ComputeDistanceCode(size_t distance,\n                                                size_t max_distance,\n                                                const int* dist_cache) {\n  if (distance <= max_distance) {\n    size_t distance_plus_3 = distance + 3;\n    size_t offset0 = distance_plus_3 - (size_t)dist_cache[0];\n    size_t offset1 = distance_plus_3 - (size_t)dist_cache[1];\n    if (distance == (size_t)dist_cache[0]) {\n      return 0;\n    } else if (distance == (size_t)dist_cache[1]) {\n      return 1;\n    } else if (offset0 < 7) {\n      return (0x9750468 >> (4 * offset0)) & 0xF;\n    } else if (offset1 < 7) {\n      return (0xFDB1ACE >> (4 * offset1)) & 0xF;\n    } else if (distance == (size_t)dist_cache[2]) {\n      return 2;\n    } else if (distance == (size_t)dist_cache[3]) {\n      return 3;\n    }\n  }\n  return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;\n}\n\n#define EXPAND_CAT(a, b) CAT(a, b)\n#define CAT(a, b) a ## b\n#define FN(X) EXPAND_CAT(X, HASHER())\n#define EXPORT_FN(X) EXPAND_CAT(X, EXPAND_CAT(PREFIX(), HASHER()))\n\n#define PREFIX() N\n#define ENABLE_COMPOUND_DICTIONARY 0\n\n#define HASHER() H2\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H3\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H4\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H5\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H6\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H40\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H41\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H42\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H54\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H35\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H55\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H65\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n#define HASHER() H58\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n\n#define HASHER() H68\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#endif\n\n#undef ENABLE_COMPOUND_DICTIONARY\n#undef PREFIX\n#define PREFIX() D\n#define ENABLE_COMPOUND_DICTIONARY 1\n\n#define HASHER() H5\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H6\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H40\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H41\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H42\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H55\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H65\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n#define HASHER() H58\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#define HASHER() H68\n/* NOLINTNEXTLINE(build/include) */\n#include \"backward_references_inc.h\"\n#undef HASHER\n#endif\n\n#undef ENABLE_COMPOUND_DICTIONARY\n#undef PREFIX\n\n#undef EXPORT_FN\n#undef FN\n#undef CAT\n#undef EXPAND_CAT\n\nvoid BrotliCreateBackwardReferences(size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals) {\n  if (params->dictionary.compound.num_chunks != 0) {\n    switch (params->hasher.type) {\n#define CASE_(N)                                                    \\\n      case N:                                                       \\\n        CreateBackwardReferencesDH ## N(num_bytes,                  \\\n            position, ringbuffer, ringbuffer_mask,                  \\\n            literal_context_lut, params, hasher, dist_cache,        \\\n            last_insert_len, commands, num_commands, num_literals); \\\n        return;\n      CASE_(5)\n      CASE_(6)\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n      CASE_(58)\n      CASE_(68)\n#endif\n      CASE_(40)\n      CASE_(41)\n      CASE_(42)\n      CASE_(55)\n      CASE_(65)\n#undef CASE_\n      default:\n        BROTLI_DCHECK(BROTLI_FALSE);\n        break;\n    }\n  }\n\n  switch (params->hasher.type) {\n#define CASE_(N)                                                  \\\n    case N:                                                       \\\n      CreateBackwardReferencesNH ## N(num_bytes,                  \\\n          position, ringbuffer, ringbuffer_mask,                  \\\n          literal_context_lut, params, hasher, dist_cache,        \\\n          last_insert_len, commands, num_commands, num_literals); \\\n      return;\n    FOR_GENERIC_HASHERS(CASE_)\n#undef CASE_\n    default:\n      BROTLI_DCHECK(BROTLI_FALSE);\n      break;\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/backward_references.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function to find backward reference copies. */\n\n#ifndef BROTLI_ENC_BACKWARD_REFERENCES_H_\n#define BROTLI_ENC_BACKWARD_REFERENCES_H_\n\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"hash.h\"\n#include \"params.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* \"commands\" points to the next output command to write to, \"*num_commands\" is\n   initially the total amount of commands output by previous\n   CreateBackwardReferences calls, and must be incremented by the amount written\n   by this call. */\nBROTLI_INTERNAL void BrotliCreateBackwardReferences(size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_BACKWARD_REFERENCES_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/backward_references_hq.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function to find backward reference copies. */\n\n#include \"backward_references_hq.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"compound_dictionary.h\"\n#include \"encoder_dict.h\"\n#include \"fast_log.h\"\n#include \"find_match_length.h\"\n#include \"hash.h\"\n#include \"literal_cost.h\"\n#include \"memory.h\"\n#include \"params.h\"\n#include \"prefix.h\"\n#include \"quality.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* BrotliCalculateDistanceCodeLimit(BROTLI_MAX_ALLOWED_DISTANCE, 3, 120). */\n#define BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE 544\n\nstatic const float kInfinity = 1.7e38f;  /* ~= 2 ^ 127 */\n\nstatic const BROTLI_MODEL(\"small\") uint32_t kDistanceCacheIndex[] = {\n  0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,\n};\nstatic const BROTLI_MODEL(\"small\") int kDistanceCacheOffset[] = {\n  0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3\n};\n\nvoid BrotliInitZopfliNodes(ZopfliNode* array, size_t length) {\n  ZopfliNode stub;\n  size_t i;\n  stub.length = 1;\n  stub.distance = 0;\n  stub.dcode_insert_length = 0;\n  stub.u.cost = kInfinity;\n  for (i = 0; i < length; ++i) array[i] = stub;\n}\n\nstatic BROTLI_INLINE uint32_t ZopfliNodeCopyLength(const ZopfliNode* self) {\n  return self->length & 0x1FFFFFF;\n}\n\nstatic BROTLI_INLINE uint32_t ZopfliNodeLengthCode(const ZopfliNode* self) {\n  const uint32_t modifier = self->length >> 25;\n  return ZopfliNodeCopyLength(self) + 9u - modifier;\n}\n\nstatic BROTLI_INLINE uint32_t ZopfliNodeCopyDistance(const ZopfliNode* self) {\n  return self->distance;\n}\n\nstatic BROTLI_INLINE uint32_t ZopfliNodeDistanceCode(const ZopfliNode* self) {\n  const uint32_t short_code = self->dcode_insert_length >> 27;\n  return short_code == 0 ?\n      ZopfliNodeCopyDistance(self) + BROTLI_NUM_DISTANCE_SHORT_CODES - 1 :\n      short_code - 1;\n}\n\nstatic BROTLI_INLINE uint32_t ZopfliNodeCommandLength(const ZopfliNode* self) {\n  return ZopfliNodeCopyLength(self) + (self->dcode_insert_length & 0x7FFFFFF);\n}\n\n/* Temporary data for ZopfliCostModelSetFromCommands. */\ntypedef struct ZopfliCostModelArena {\n  uint32_t histogram_literal[BROTLI_NUM_LITERAL_SYMBOLS];\n  uint32_t histogram_cmd[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint32_t histogram_dist[BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE];\n  float cost_literal[BROTLI_NUM_LITERAL_SYMBOLS];\n} ZopfliCostModelArena;\n\n/* Histogram based cost model for zopflification. */\ntypedef struct ZopfliCostModel {\n  /* The insert and copy length symbols. */\n  float cost_cmd_[BROTLI_NUM_COMMAND_SYMBOLS];\n  float* cost_dist_;\n  uint32_t distance_histogram_size;\n  /* Cumulative costs of literals per position in the stream. */\n  float* literal_costs_;\n  float min_cost_cmd_;\n  size_t num_bytes_;\n\n  /* Temporary data. */\n  union {\n    size_t literal_histograms[3 * 256];\n    ZopfliCostModelArena arena;\n  };\n} ZopfliCostModel;\n\nstatic void InitZopfliCostModel(\n    MemoryManager* m, ZopfliCostModel* self, const BrotliDistanceParams* dist,\n    size_t num_bytes) {\n  self->num_bytes_ = num_bytes;\n  self->literal_costs_ = BROTLI_ALLOC(m, float, num_bytes + 2);\n  self->cost_dist_ = BROTLI_ALLOC(m, float, dist->alphabet_size_limit);\n  self->distance_histogram_size = dist->alphabet_size_limit;\n  if (BROTLI_IS_OOM(m)) return;\n}\n\nstatic void CleanupZopfliCostModel(MemoryManager* m, ZopfliCostModel* self) {\n  BROTLI_FREE(m, self->literal_costs_);\n  BROTLI_FREE(m, self->cost_dist_);\n}\n\nstatic void SetCost(const uint32_t* histogram, size_t histogram_size,\n                    BROTLI_BOOL literal_histogram, float* cost) {\n  size_t sum = 0;\n  size_t missing_symbol_sum;\n  float log2sum;\n  float missing_symbol_cost;\n  size_t i;\n  for (i = 0; i < histogram_size; i++) {\n    sum += histogram[i];\n  }\n  log2sum = (float)FastLog2(sum);\n  missing_symbol_sum = sum;\n  if (!literal_histogram) {\n    for (i = 0; i < histogram_size; i++) {\n      if (histogram[i] == 0) missing_symbol_sum++;\n    }\n  }\n  missing_symbol_cost = (float)FastLog2(missing_symbol_sum) + 2;\n  for (i = 0; i < histogram_size; i++) {\n    if (histogram[i] == 0) {\n      cost[i] = missing_symbol_cost;\n      continue;\n    }\n\n    /* Shannon bits for this symbol. */\n    cost[i] = log2sum - (float)FastLog2(histogram[i]);\n\n    /* Cannot be coded with less than 1 bit */\n    if (cost[i] < 1) cost[i] = 1;\n  }\n}\n\nstatic void ZopfliCostModelSetFromCommands(ZopfliCostModel* self,\n                                           size_t position,\n                                           const uint8_t* ringbuffer,\n                                           size_t ringbuffer_mask,\n                                           const Command* commands,\n                                           size_t num_commands,\n                                           size_t last_insert_len) {\n  ZopfliCostModelArena* arena = &self->arena;\n  size_t pos = position - last_insert_len;\n  float min_cost_cmd = kInfinity;\n  size_t i;\n  float* cost_cmd = self->cost_cmd_;\n\n  memset(arena->histogram_literal, 0, sizeof(arena->histogram_literal));\n  memset(arena->histogram_cmd, 0, sizeof(arena->histogram_cmd));\n  memset(arena->histogram_dist, 0, sizeof(arena->histogram_dist));\n\n  for (i = 0; i < num_commands; i++) {\n    size_t inslength = commands[i].insert_len_;\n    size_t copylength = CommandCopyLen(&commands[i]);\n    size_t distcode = commands[i].dist_prefix_ & 0x3FF;\n    size_t cmdcode = commands[i].cmd_prefix_;\n    size_t j;\n\n    arena->histogram_cmd[cmdcode]++;\n    if (cmdcode >= 128) arena->histogram_dist[distcode]++;\n\n    for (j = 0; j < inslength; j++) {\n      arena->histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++;\n    }\n\n    pos += inslength + copylength;\n  }\n\n  SetCost(arena->histogram_literal, BROTLI_NUM_LITERAL_SYMBOLS, BROTLI_TRUE,\n          arena->cost_literal);\n  SetCost(arena->histogram_cmd, BROTLI_NUM_COMMAND_SYMBOLS, BROTLI_FALSE,\n          cost_cmd);\n  SetCost(arena->histogram_dist, self->distance_histogram_size, BROTLI_FALSE,\n          self->cost_dist_);\n\n  for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {\n    min_cost_cmd = BROTLI_MIN(float, min_cost_cmd, cost_cmd[i]);\n  }\n  self->min_cost_cmd_ = min_cost_cmd;\n\n  {\n    float* literal_costs = self->literal_costs_;\n    float literal_carry = 0.0;\n    size_t num_bytes = self->num_bytes_;\n    literal_costs[0] = 0.0;\n    for (i = 0; i < num_bytes; ++i) {\n      literal_carry +=\n          arena->cost_literal[ringbuffer[(position + i) & ringbuffer_mask]];\n      literal_costs[i + 1] = literal_costs[i] + literal_carry;\n      literal_carry -= literal_costs[i + 1] - literal_costs[i];\n    }\n  }\n}\n\nstatic void ZopfliCostModelSetFromLiteralCosts(ZopfliCostModel* self,\n                                               size_t position,\n                                               const uint8_t* ringbuffer,\n                                               size_t ringbuffer_mask) {\n  float* literal_costs = self->literal_costs_;\n  float literal_carry = 0.0;\n  float* cost_dist = self->cost_dist_;\n  float* cost_cmd = self->cost_cmd_;\n  size_t num_bytes = self->num_bytes_;\n  size_t i;\n  BrotliEstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask,\n                                    ringbuffer, self->literal_histograms,\n                                    &literal_costs[1]);\n  literal_costs[0] = 0.0;\n  for (i = 0; i < num_bytes; ++i) {\n    literal_carry += literal_costs[i + 1];\n    literal_costs[i + 1] = literal_costs[i] + literal_carry;\n    literal_carry -= literal_costs[i + 1] - literal_costs[i];\n  }\n  for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {\n    cost_cmd[i] = (float)FastLog2(11 + (uint32_t)i);\n  }\n  for (i = 0; i < self->distance_histogram_size; ++i) {\n    cost_dist[i] = (float)FastLog2(20 + (uint32_t)i);\n  }\n  self->min_cost_cmd_ = (float)FastLog2(11);\n}\n\nstatic BROTLI_INLINE float ZopfliCostModelGetCommandCost(\n    const ZopfliCostModel* self, uint16_t cmdcode) {\n  return self->cost_cmd_[cmdcode];\n}\n\nstatic BROTLI_INLINE float ZopfliCostModelGetDistanceCost(\n    const ZopfliCostModel* self, size_t distcode) {\n  return self->cost_dist_[distcode];\n}\n\nstatic BROTLI_INLINE float ZopfliCostModelGetLiteralCosts(\n    const ZopfliCostModel* self, size_t from, size_t to) {\n  return self->literal_costs_[to] - self->literal_costs_[from];\n}\n\nstatic BROTLI_INLINE float ZopfliCostModelGetMinCostCmd(\n    const ZopfliCostModel* self) {\n  return self->min_cost_cmd_;\n}\n\n/* REQUIRES: len >= 2, start_pos <= pos */\n/* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */\n/* Maintains the \"ZopfliNode array invariant\". */\nstatic BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos,\n    size_t start_pos, size_t len, size_t len_code, size_t dist,\n    size_t short_code, float cost) {\n  ZopfliNode* next = &nodes[pos + len];\n  next->length = (uint32_t)(len | ((len + 9u - len_code) << 25));\n  next->distance = (uint32_t)dist;\n  next->dcode_insert_length = (uint32_t)(\n      (short_code << 27) | (pos - start_pos));\n  next->u.cost = cost;\n}\n\ntypedef struct PosData {\n  size_t pos;\n  int distance_cache[4];\n  float costdiff;\n  float cost;\n} PosData;\n\n/* Maintains the smallest 8 cost difference together with their positions */\ntypedef struct StartPosQueue {\n  PosData q_[8];\n  size_t idx_;\n} StartPosQueue;\n\nstatic BROTLI_INLINE void InitStartPosQueue(StartPosQueue* self) {\n  self->idx_ = 0;\n}\n\nstatic size_t StartPosQueueSize(const StartPosQueue* self) {\n  return BROTLI_MIN(size_t, self->idx_, 8);\n}\n\nstatic void StartPosQueuePush(StartPosQueue* self, const PosData* posdata) {\n  size_t offset = ~(self->idx_++) & 7;\n  size_t len = StartPosQueueSize(self);\n  size_t i;\n  PosData* q = self->q_;\n  q[offset] = *posdata;\n  /* Restore the sorted order. In the list of |len| items at most |len - 1|\n     adjacent element comparisons / swaps are required. */\n  for (i = 1; i < len; ++i) {\n    if (q[offset & 7].costdiff > q[(offset + 1) & 7].costdiff) {\n      BROTLI_SWAP(PosData, q, offset & 7, (offset + 1) & 7);\n    }\n    ++offset;\n  }\n}\n\nstatic const PosData* StartPosQueueAt(const StartPosQueue* self, size_t k) {\n  return &self->q_[(k - self->idx_) & 7];\n}\n\n/* Returns the minimum possible copy length that can improve the cost of any */\n/* future position. */\nstatic size_t ComputeMinimumCopyLength(const float start_cost,\n                                       const ZopfliNode* nodes,\n                                       const size_t num_bytes,\n                                       const size_t pos) {\n  /* Compute the minimum possible cost of reaching any future position. */\n  float min_cost = start_cost;\n  size_t len = 2;\n  size_t next_len_bucket = 4;\n  size_t next_len_offset = 10;\n  while (pos + len <= num_bytes && nodes[pos + len].u.cost <= min_cost) {\n    /* We already reached (pos + len) with no more cost than the minimum\n       possible cost of reaching anything from this pos, so there is no point in\n       looking for lengths <= len. */\n    ++len;\n    if (len == next_len_offset) {\n      /* We reached the next copy length code bucket, so we add one more\n         extra bit to the minimum cost. */\n      min_cost += 1.0f;\n      next_len_offset += next_len_bucket;\n      next_len_bucket *= 2;\n    }\n  }\n  return len;\n}\n\n/* REQUIRES: nodes[pos].cost < kInfinity\n   REQUIRES: nodes[0..pos] satisfies that \"ZopfliNode array invariant\". */\nstatic uint32_t ComputeDistanceShortcut(const size_t block_start,\n                                        const size_t pos,\n                                        const size_t max_backward_limit,\n                                        const size_t gap,\n                                        const ZopfliNode* nodes) {\n  const size_t c_len = ZopfliNodeCopyLength(&nodes[pos]);\n  const size_t i_len = nodes[pos].dcode_insert_length & 0x7FFFFFF;\n  const size_t dist = ZopfliNodeCopyDistance(&nodes[pos]);\n  /* Since |block_start + pos| is the end position of the command, the copy part\n     starts from |block_start + pos - c_len|. Distances that are greater than\n     this or greater than |max_backward_limit| + |gap| are static dictionary\n     references, and do not update the last distances.\n     Also distance code 0 (last distance) does not update the last distances. */\n  if (pos == 0) {\n    return 0;\n  } else if (dist + c_len <= block_start + pos + gap &&\n             dist <= max_backward_limit + gap &&\n             ZopfliNodeDistanceCode(&nodes[pos]) > 0) {\n    return (uint32_t)pos;\n  } else {\n    return nodes[pos - c_len - i_len].u.shortcut;\n  }\n}\n\n/* Fills in dist_cache[0..3] with the last four distances (as defined by\n   Section 4. of the Spec) that would be used at (block_start + pos) if we\n   used the shortest path of commands from block_start, computed from\n   nodes[0..pos]. The last four distances at block_start are in\n   starting_dist_cache[0..3].\n   REQUIRES: nodes[pos].cost < kInfinity\n   REQUIRES: nodes[0..pos] satisfies that \"ZopfliNode array invariant\". */\nstatic void ComputeDistanceCache(const size_t pos,\n                                 const int* starting_dist_cache,\n                                 const ZopfliNode* nodes,\n                                 int* dist_cache) {\n  int idx = 0;\n  size_t p = nodes[pos].u.shortcut;\n  while (idx < 4 && p > 0) {\n    const size_t i_len = nodes[p].dcode_insert_length & 0x7FFFFFF;\n    const size_t c_len = ZopfliNodeCopyLength(&nodes[p]);\n    const size_t dist = ZopfliNodeCopyDistance(&nodes[p]);\n    dist_cache[idx++] = (int)dist;\n    /* Because of prerequisite, p >= c_len + i_len >= 2. */\n    p = nodes[p - c_len - i_len].u.shortcut;\n  }\n  for (; idx < 4; ++idx) {\n    dist_cache[idx] = *starting_dist_cache++;\n  }\n}\n\n/* Maintains \"ZopfliNode array invariant\" and pushes node to the queue, if it\n   is eligible. */\nstatic void EvaluateNode(\n    const size_t block_start, const size_t pos, const size_t max_backward_limit,\n    const size_t gap, const int* starting_dist_cache,\n    const ZopfliCostModel* model, StartPosQueue* queue, ZopfliNode* nodes) {\n  /* Save cost, because ComputeDistanceCache invalidates it. */\n  float node_cost = nodes[pos].u.cost;\n  nodes[pos].u.shortcut = ComputeDistanceShortcut(\n      block_start, pos, max_backward_limit, gap, nodes);\n  if (node_cost <= ZopfliCostModelGetLiteralCosts(model, 0, pos)) {\n    PosData posdata;\n    posdata.pos = pos;\n    posdata.cost = node_cost;\n    posdata.costdiff = node_cost -\n        ZopfliCostModelGetLiteralCosts(model, 0, pos);\n    ComputeDistanceCache(\n        pos, starting_dist_cache, nodes, posdata.distance_cache);\n    StartPosQueuePush(queue, &posdata);\n  }\n}\n\n/* Returns longest copy length. */\nstatic size_t UpdateNodes(\n    const size_t num_bytes, const size_t block_start, const size_t pos,\n    const uint8_t* ringbuffer, const size_t ringbuffer_mask,\n    const BrotliEncoderParams* params, const size_t max_backward_limit,\n    const int* starting_dist_cache, const size_t num_matches,\n    const BackwardMatch* matches, const ZopfliCostModel* model,\n    StartPosQueue* queue, ZopfliNode* nodes) {\n  const size_t stream_offset = params->stream_offset;\n  const size_t cur_ix = block_start + pos;\n  const size_t cur_ix_masked = cur_ix & ringbuffer_mask;\n  const size_t max_distance = BROTLI_MIN(size_t, cur_ix, max_backward_limit);\n  const size_t dictionary_start = BROTLI_MIN(size_t,\n      cur_ix + stream_offset, max_backward_limit);\n  const size_t max_len = num_bytes - pos;\n  const size_t max_zopfli_len = MaxZopfliLen(params);\n  const size_t max_iters = MaxZopfliCandidates(params);\n  size_t min_len;\n  size_t result = 0;\n  size_t k;\n  const CompoundDictionary* addon = &params->dictionary.compound;\n  size_t gap = addon->total_size;\n\n  BROTLI_DCHECK(cur_ix_masked + max_len <= ringbuffer_mask);\n\n  EvaluateNode(block_start + stream_offset, pos, max_backward_limit, gap,\n      starting_dist_cache, model, queue, nodes);\n\n  {\n    const PosData* posdata = StartPosQueueAt(queue, 0);\n    float min_cost = (posdata->cost + ZopfliCostModelGetMinCostCmd(model) +\n        ZopfliCostModelGetLiteralCosts(model, posdata->pos, pos));\n    min_len = ComputeMinimumCopyLength(min_cost, nodes, num_bytes, pos);\n  }\n\n  /* Go over the command starting positions in order of increasing cost\n     difference. */\n  for (k = 0; k < max_iters && k < StartPosQueueSize(queue); ++k) {\n    const PosData* posdata = StartPosQueueAt(queue, k);\n    const size_t start = posdata->pos;\n    const uint16_t inscode = GetInsertLengthCode(pos - start);\n    const float start_costdiff = posdata->costdiff;\n    const float base_cost = start_costdiff + (float)GetInsertExtra(inscode) +\n        ZopfliCostModelGetLiteralCosts(model, 0, pos);\n\n    /* Look for last distance matches using the distance cache from this\n       starting position. */\n    size_t best_len = min_len - 1;\n    size_t j = 0;\n    for (; j < BROTLI_NUM_DISTANCE_SHORT_CODES && best_len < max_len; ++j) {\n      const size_t idx = kDistanceCacheIndex[j];\n      const size_t backward =\n          (size_t)(posdata->distance_cache[idx] + kDistanceCacheOffset[j]);\n      size_t prev_ix = cur_ix - backward;\n      size_t len = 0;\n      uint8_t continuation = ringbuffer[cur_ix_masked + best_len];\n      if (cur_ix_masked + best_len > ringbuffer_mask) {\n        break;\n      }\n      if (BROTLI_PREDICT_FALSE(backward > dictionary_start + gap)) {\n        /* Word dictionary -> ignore. */\n        continue;\n      }\n      if (backward <= max_distance) {\n        /* Regular backward reference. */\n        if (prev_ix >= cur_ix) {\n          continue;\n        }\n\n        prev_ix &= ringbuffer_mask;\n        if (prev_ix + best_len > ringbuffer_mask ||\n            continuation != ringbuffer[prev_ix + best_len]) {\n          continue;\n        }\n        len = FindMatchLengthWithLimit(&ringbuffer[prev_ix],\n                                       &ringbuffer[cur_ix_masked],\n                                       max_len);\n      } else if (backward > dictionary_start) {\n        size_t d = 0;\n        size_t offset;\n        size_t limit;\n        const uint8_t* source;\n        offset = dictionary_start + 1 + addon->total_size - 1;\n        while (offset >= backward + addon->chunk_offsets[d + 1]) d++;\n        source = addon->chunk_source[d];\n        offset = offset - addon->chunk_offsets[d] - backward;\n        limit = addon->chunk_offsets[d + 1] - addon->chunk_offsets[d] - offset;\n        limit = limit > max_len ? max_len : limit;\n        if (best_len >= limit ||\n            continuation != source[offset + best_len]) {\n          continue;\n        }\n        len = FindMatchLengthWithLimit(&source[offset],\n                                       &ringbuffer[cur_ix_masked],\n                                       limit);\n      } else {\n        /* \"Gray\" area. It is addressable by decoder, but this encoder\n           instance does not have that data -> should not touch it. */\n        continue;\n      }\n      {\n        const float dist_cost = base_cost +\n            ZopfliCostModelGetDistanceCost(model, j);\n        size_t l;\n        for (l = best_len + 1; l <= len; ++l) {\n          const uint16_t copycode = GetCopyLengthCode(l);\n          const uint16_t cmdcode =\n              CombineLengthCodes(inscode, copycode, j == 0);\n          const float cost = (cmdcode < 128 ? base_cost : dist_cost) +\n              (float)GetCopyExtra(copycode) +\n              ZopfliCostModelGetCommandCost(model, cmdcode);\n          if (cost < nodes[pos + l].u.cost) {\n            UpdateZopfliNode(nodes, pos, start, l, l, backward, j + 1, cost);\n            result = BROTLI_MAX(size_t, result, l);\n          }\n          best_len = l;\n        }\n      }\n    }\n\n    /* At higher iterations look only for new last distance matches, since\n       looking only for new command start positions with the same distances\n       does not help much. */\n    if (k >= 2) continue;\n\n    {\n      /* Loop through all possible copy lengths at this position. */\n      size_t len = min_len;\n      for (j = 0; j < num_matches; ++j) {\n        BackwardMatch match = matches[j];\n        size_t dist = match.distance;\n        BROTLI_BOOL is_dictionary_match =\n            TO_BROTLI_BOOL(dist > dictionary_start + gap);\n        /* We already tried all possible last distance matches, so we can use\n           normal distance code here. */\n        size_t dist_code = dist + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;\n        uint16_t dist_symbol;\n        uint32_t distextra;\n        uint32_t distnumextra;\n        float dist_cost;\n        size_t max_match_len;\n        PrefixEncodeCopyDistance(\n            dist_code, params->dist.num_direct_distance_codes,\n            params->dist.distance_postfix_bits, &dist_symbol, &distextra);\n        distnumextra = dist_symbol >> 10;\n        dist_cost = base_cost + (float)distnumextra +\n            ZopfliCostModelGetDistanceCost(model, dist_symbol & 0x3FF);\n\n        /* Try all copy lengths up until the maximum copy length corresponding\n           to this distance. If the distance refers to the static dictionary, or\n           the maximum length is long enough, try only one maximum length. */\n        max_match_len = BackwardMatchLength(&match);\n        if (len < max_match_len &&\n            (is_dictionary_match || max_match_len > max_zopfli_len)) {\n          len = max_match_len;\n        }\n        for (; len <= max_match_len; ++len) {\n          const size_t len_code =\n              is_dictionary_match ? BackwardMatchLengthCode(&match) : len;\n          const uint16_t copycode = GetCopyLengthCode(len_code);\n          const uint16_t cmdcode = CombineLengthCodes(inscode, copycode, 0);\n          const float cost = dist_cost + (float)GetCopyExtra(copycode) +\n              ZopfliCostModelGetCommandCost(model, cmdcode);\n          if (cost < nodes[pos + len].u.cost) {\n            UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0, cost);\n            result = BROTLI_MAX(size_t, result, len);\n          }\n        }\n      }\n    }\n  }\n  return result;\n}\n\nstatic size_t ComputeShortestPathFromNodes(size_t num_bytes,\n    ZopfliNode* nodes) {\n  size_t index = num_bytes;\n  size_t num_commands = 0;\n  while ((nodes[index].dcode_insert_length & 0x7FFFFFF) == 0 &&\n      nodes[index].length == 1) --index;\n  nodes[index].u.next = BROTLI_UINT32_MAX;\n  while (index != 0) {\n    size_t len = ZopfliNodeCommandLength(&nodes[index]);\n    index -= len;\n    nodes[index].u.next = (uint32_t)len;\n    num_commands++;\n  }\n  return num_commands;\n}\n\n/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */\nvoid BrotliZopfliCreateCommands(const size_t num_bytes,\n    const size_t block_start, const ZopfliNode* nodes, int* dist_cache,\n    size_t* last_insert_len, const BrotliEncoderParams* params,\n    Command* commands, size_t* num_literals) {\n  const size_t stream_offset = params->stream_offset;\n  const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);\n  size_t pos = 0;\n  uint32_t offset = nodes[0].u.next;\n  size_t i;\n  size_t gap = params->dictionary.compound.total_size;\n  for (i = 0; offset != BROTLI_UINT32_MAX; i++) {\n    const ZopfliNode* next = &nodes[pos + offset];\n    size_t copy_length = ZopfliNodeCopyLength(next);\n    size_t insert_length = next->dcode_insert_length & 0x7FFFFFF;\n    pos += insert_length;\n    offset = next->u.next;\n    if (i == 0) {\n      insert_length += *last_insert_len;\n      *last_insert_len = 0;\n    }\n    {\n      size_t distance = ZopfliNodeCopyDistance(next);\n      size_t len_code = ZopfliNodeLengthCode(next);\n      size_t dictionary_start = BROTLI_MIN(size_t,\n          block_start + pos + stream_offset, max_backward_limit);\n      BROTLI_BOOL is_dictionary =\n          TO_BROTLI_BOOL(distance > dictionary_start + gap);\n      size_t dist_code = ZopfliNodeDistanceCode(next);\n      InitCommand(&commands[i], &params->dist, insert_length,\n          copy_length, (int)len_code - (int)copy_length, dist_code);\n\n      if (!is_dictionary && dist_code > 0) {\n        dist_cache[3] = dist_cache[2];\n        dist_cache[2] = dist_cache[1];\n        dist_cache[1] = dist_cache[0];\n        dist_cache[0] = (int)distance;\n      }\n    }\n\n    *num_literals += insert_length;\n    pos += copy_length;\n  }\n  *last_insert_len += num_bytes - pos;\n}\n\nstatic size_t ZopfliIterate(size_t num_bytes, size_t position,\n    const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    const BrotliEncoderParams* params, const size_t gap, const int* dist_cache,\n    const ZopfliCostModel* model, const uint32_t* num_matches,\n    const BackwardMatch* matches, ZopfliNode* nodes) {\n  const size_t stream_offset = params->stream_offset;\n  const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);\n  const size_t max_zopfli_len = MaxZopfliLen(params);\n  StartPosQueue queue;\n  size_t cur_match_pos = 0;\n  size_t i;\n  nodes[0].length = 0;\n  nodes[0].u.cost = 0;\n  InitStartPosQueue(&queue);\n  for (i = 0; i + 3 < num_bytes; i++) {\n    size_t skip = UpdateNodes(num_bytes, position, i, ringbuffer,\n        ringbuffer_mask, params, max_backward_limit, dist_cache,\n        num_matches[i], &matches[cur_match_pos], model, &queue, nodes);\n    if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;\n    cur_match_pos += num_matches[i];\n    if (num_matches[i] == 1 &&\n        BackwardMatchLength(&matches[cur_match_pos - 1]) > max_zopfli_len) {\n      skip = BROTLI_MAX(size_t,\n          BackwardMatchLength(&matches[cur_match_pos - 1]), skip);\n    }\n    if (skip > 1) {\n      skip--;\n      while (skip) {\n        i++;\n        if (i + 3 >= num_bytes) break;\n        EvaluateNode(position + stream_offset, i, max_backward_limit, gap,\n            dist_cache, model, &queue, nodes);\n        cur_match_pos += num_matches[i];\n        skip--;\n      }\n    }\n  }\n  return ComputeShortestPathFromNodes(num_bytes, nodes);\n}\n\nstatic void MergeMatches(BackwardMatch* dst,\n    BackwardMatch* src1, size_t len1, BackwardMatch* src2, size_t len2) {\n  while (len1 > 0 && len2 > 0) {\n    size_t l1 = BackwardMatchLength(src1);\n    size_t l2 = BackwardMatchLength(src2);\n    if (l1 < l2 || ((l1 == l2) && (src1->distance < src2->distance))) {\n      *dst++ = *src1++;\n      len1--;\n    } else {\n      *dst++ = *src2++;\n      len2--;\n    }\n  }\n  while (len1-- > 0) *dst++ = *src1++;\n  while (len2-- > 0) *dst++ = *src2++;\n}\n\n/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */\nsize_t BrotliZopfliComputeShortestPath(MemoryManager* m, size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    const int* dist_cache, Hasher* hasher, ZopfliNode* nodes) {\n  const size_t stream_offset = params->stream_offset;\n  const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);\n  const size_t max_zopfli_len = MaxZopfliLen(params);\n  StartPosQueue queue;\n  BackwardMatch* BROTLI_RESTRICT matches =\n      BROTLI_ALLOC(m, BackwardMatch, 2 * (MAX_NUM_MATCHES_H10 + 64));\n  const size_t store_end = num_bytes >= StoreLookaheadH10() ?\n      position + num_bytes - StoreLookaheadH10() + 1 : position;\n  size_t i;\n  const CompoundDictionary* addon = &params->dictionary.compound;\n  size_t gap = addon->total_size;\n  size_t lz_matches_offset =\n      (addon->num_chunks != 0) ? (MAX_NUM_MATCHES_H10 + 128) : 0;\n  ZopfliCostModel* model = BROTLI_ALLOC(m, ZopfliCostModel, 1);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(model) || BROTLI_IS_NULL(matches)) {\n    return 0;\n  }\n  nodes[0].length = 0;\n  nodes[0].u.cost = 0;\n  InitZopfliCostModel(m, model, &params->dist, num_bytes);\n  if (BROTLI_IS_OOM(m)) return 0;\n  ZopfliCostModelSetFromLiteralCosts(\n      model, position, ringbuffer, ringbuffer_mask);\n  InitStartPosQueue(&queue);\n  for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; i++) {\n    const size_t pos = position + i;\n    const size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);\n    const size_t dictionary_start = BROTLI_MIN(size_t,\n        pos + stream_offset, max_backward_limit);\n    size_t skip;\n    size_t num_matches;\n    int dict_id = 0;\n    if (params->dictionary.contextual.context_based) {\n      uint8_t p1 = pos >= 1 ?\n          ringbuffer[(size_t)(pos - 1) & ringbuffer_mask] : 0;\n      uint8_t p2 = pos >= 2 ?\n          ringbuffer[(size_t)(pos - 2) & ringbuffer_mask] : 0;\n      dict_id = params->dictionary.contextual.context_map[\n          BROTLI_CONTEXT(p1, p2, literal_context_lut)];\n    }\n    num_matches = FindAllMatchesH10(&hasher->privat._H10,\n        params->dictionary.contextual.dict[dict_id],\n        ringbuffer, ringbuffer_mask, pos, num_bytes - i, max_distance,\n        dictionary_start + gap, params, &matches[lz_matches_offset]);\n    if (addon->num_chunks != 0) {\n      size_t cd_matches = LookupAllCompoundDictionaryMatches(addon,\n          ringbuffer, ringbuffer_mask, pos, 3, num_bytes - i,\n          dictionary_start, params->dist.max_distance,\n          &matches[lz_matches_offset - 64], 64);\n      MergeMatches(matches, &matches[lz_matches_offset - 64], cd_matches,\n          &matches[lz_matches_offset], num_matches);\n      num_matches += cd_matches;\n    }\n    if (num_matches > 0 &&\n        BackwardMatchLength(&matches[num_matches - 1]) > max_zopfli_len) {\n      matches[0] = matches[num_matches - 1];\n      num_matches = 1;\n    }\n    skip = UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask,\n        params, max_backward_limit, dist_cache, num_matches, matches, model,\n        &queue, nodes);\n    if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;\n    if (num_matches == 1 && BackwardMatchLength(&matches[0]) > max_zopfli_len) {\n      skip = BROTLI_MAX(size_t, BackwardMatchLength(&matches[0]), skip);\n    }\n    if (skip > 1) {\n      /* Add the tail of the copy to the hasher. */\n      StoreRangeH10(&hasher->privat._H10,\n          ringbuffer, ringbuffer_mask, pos + 1, BROTLI_MIN(\n          size_t, pos + skip, store_end));\n      skip--;\n      while (skip) {\n        i++;\n        if (i + HashTypeLengthH10() - 1 >= num_bytes) break;\n        EvaluateNode(position + stream_offset, i, max_backward_limit, gap,\n            dist_cache, model, &queue, nodes);\n        skip--;\n      }\n    }\n  }\n  CleanupZopfliCostModel(m, model);\n  BROTLI_FREE(m, model);\n  BROTLI_FREE(m, matches);\n  return ComputeShortestPathFromNodes(num_bytes, nodes);\n}\n\nvoid BrotliCreateZopfliBackwardReferences(MemoryManager* m, size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals) {\n  ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(nodes)) return;\n  BrotliInitZopfliNodes(nodes, num_bytes + 1);\n  *num_commands += BrotliZopfliComputeShortestPath(m, num_bytes,\n      position, ringbuffer, ringbuffer_mask, literal_context_lut, params,\n      dist_cache, hasher, nodes);\n  if (BROTLI_IS_OOM(m)) return;\n  BrotliZopfliCreateCommands(num_bytes, position, nodes, dist_cache,\n      last_insert_len, params, commands, num_literals);\n  BROTLI_FREE(m, nodes);\n}\n\nvoid BrotliCreateHqZopfliBackwardReferences(MemoryManager* m, size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals) {\n  const size_t stream_offset = params->stream_offset;\n  const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);\n  uint32_t* num_matches = BROTLI_ALLOC(m, uint32_t, num_bytes);\n  size_t matches_size = 4 * num_bytes;\n  const size_t store_end = num_bytes >= StoreLookaheadH10() ?\n      position + num_bytes - StoreLookaheadH10() + 1 : position;\n  size_t cur_match_pos = 0;\n  size_t i;\n  size_t orig_num_literals;\n  size_t orig_last_insert_len;\n  int orig_dist_cache[4];\n  size_t orig_num_commands;\n  ZopfliCostModel* model = BROTLI_ALLOC(m, ZopfliCostModel, 1);\n  ZopfliNode* nodes;\n  BackwardMatch* matches = BROTLI_ALLOC(m, BackwardMatch, matches_size);\n  const CompoundDictionary* addon = &params->dictionary.compound;\n  size_t gap = addon->total_size;\n  size_t shadow_matches =\n      (addon->num_chunks != 0) ? (MAX_NUM_MATCHES_H10 + 128) : 0;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(model) ||\n      BROTLI_IS_NULL(num_matches) || BROTLI_IS_NULL(matches)) {\n    return;\n  }\n  for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; ++i) {\n    const size_t pos = position + i;\n    size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);\n    size_t dictionary_start = BROTLI_MIN(size_t,\n        pos + stream_offset, max_backward_limit);\n    size_t max_length = num_bytes - i;\n    size_t num_found_matches;\n    size_t cur_match_end;\n    size_t j;\n    int dict_id = 0;\n    if (params->dictionary.contextual.context_based) {\n      uint8_t p1 = pos >= 1 ?\n          ringbuffer[(size_t)(pos - 1) & ringbuffer_mask] : 0;\n      uint8_t p2 = pos >= 2 ?\n          ringbuffer[(size_t)(pos - 2) & ringbuffer_mask] : 0;\n      dict_id = params->dictionary.contextual.context_map[\n          BROTLI_CONTEXT(p1, p2, literal_context_lut)];\n    }\n    /* Ensure that we have enough free slots. */\n    BROTLI_ENSURE_CAPACITY(m, BackwardMatch, matches, matches_size,\n        cur_match_pos + MAX_NUM_MATCHES_H10 + shadow_matches);\n    if (BROTLI_IS_OOM(m)) return;\n    num_found_matches = FindAllMatchesH10(&hasher->privat._H10,\n        params->dictionary.contextual.dict[dict_id],\n        ringbuffer, ringbuffer_mask, pos, max_length,\n        max_distance, dictionary_start + gap, params,\n        &matches[cur_match_pos + shadow_matches]);\n    if (addon->num_chunks != 0) {\n      size_t cd_matches = LookupAllCompoundDictionaryMatches(addon,\n          ringbuffer, ringbuffer_mask, pos, 3, max_length,\n          dictionary_start, params->dist.max_distance,\n          &matches[cur_match_pos + shadow_matches - 64], 64);\n      MergeMatches(&matches[cur_match_pos],\n          &matches[cur_match_pos + shadow_matches - 64], cd_matches,\n          &matches[cur_match_pos + shadow_matches], num_found_matches);\n      num_found_matches += cd_matches;\n    }\n    cur_match_end = cur_match_pos + num_found_matches;\n    for (j = cur_match_pos; j + 1 < cur_match_end; ++j) {\n      BROTLI_DCHECK(BackwardMatchLength(&matches[j]) <=\n          BackwardMatchLength(&matches[j + 1]));\n    }\n    num_matches[i] = (uint32_t)num_found_matches;\n    if (num_found_matches > 0) {\n      const size_t match_len = BackwardMatchLength(&matches[cur_match_end - 1]);\n      if (match_len > MAX_ZOPFLI_LEN_QUALITY_11) {\n        const size_t skip = match_len - 1;\n        matches[cur_match_pos++] = matches[cur_match_end - 1];\n        num_matches[i] = 1;\n        /* Add the tail of the copy to the hasher. */\n        StoreRangeH10(&hasher->privat._H10,\n                      ringbuffer, ringbuffer_mask, pos + 1,\n                      BROTLI_MIN(size_t, pos + match_len, store_end));\n        memset(&num_matches[i + 1], 0, skip * sizeof(num_matches[0]));\n        i += skip;\n      } else {\n        cur_match_pos = cur_match_end;\n      }\n    }\n  }\n  orig_num_literals = *num_literals;\n  orig_last_insert_len = *last_insert_len;\n  memcpy(orig_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));\n  orig_num_commands = *num_commands;\n  nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(nodes)) return;\n  InitZopfliCostModel(m, model, &params->dist, num_bytes);\n  if (BROTLI_IS_OOM(m)) return;\n  for (i = 0; i < 2; i++) {\n    BrotliInitZopfliNodes(nodes, num_bytes + 1);\n    if (i == 0) {\n      ZopfliCostModelSetFromLiteralCosts(\n          model, position, ringbuffer, ringbuffer_mask);\n    } else {\n      ZopfliCostModelSetFromCommands(model, position, ringbuffer,\n          ringbuffer_mask, commands, *num_commands - orig_num_commands,\n          orig_last_insert_len);\n    }\n    *num_commands = orig_num_commands;\n    *num_literals = orig_num_literals;\n    *last_insert_len = orig_last_insert_len;\n    memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0]));\n    *num_commands += ZopfliIterate(num_bytes, position, ringbuffer,\n        ringbuffer_mask, params, gap, dist_cache, model, num_matches, matches,\n        nodes);\n    BrotliZopfliCreateCommands(num_bytes, position, nodes, dist_cache,\n        last_insert_len, params, commands, num_literals);\n  }\n  CleanupZopfliCostModel(m, model);\n  BROTLI_FREE(m, model);\n  BROTLI_FREE(m, nodes);\n  BROTLI_FREE(m, matches);\n  BROTLI_FREE(m, num_matches);\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/backward_references_hq.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function to find backward reference copies. */\n\n#ifndef BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_\n#define BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_\n\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"hash.h\"\n#include \"memory.h\"\n#include \"params.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nBROTLI_INTERNAL void BrotliCreateZopfliBackwardReferences(MemoryManager* m,\n    size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals);\n\nBROTLI_INTERNAL void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m,\n    size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals);\n\ntypedef struct ZopfliNode {\n  /* Best length to get up to this byte (not including this byte itself)\n     highest 7 bit is used to reconstruct the length code. */\n  uint32_t length;\n  /* Distance associated with the length. */\n  uint32_t distance;\n  /* Number of literal inserts before this copy; highest 5 bits contain\n     distance short code + 1 (or zero if no short code). */\n  uint32_t dcode_insert_length;\n\n  /* This union holds information used by dynamic-programming. During forward\n     pass |cost| it used to store the goal function. When node is processed its\n     |cost| is invalidated in favor of |shortcut|. On path back-tracing pass\n     |next| is assigned the offset to next node on the path. */\n  union {\n    /* Smallest cost to get to this byte from the beginning, as found so far. */\n    float cost;\n    /* Offset to the next node on the path. Equals to command_length() of the\n       next node on the path. For last node equals to BROTLI_UINT32_MAX */\n    uint32_t next;\n    /* Node position that provides next distance for distance cache. */\n    uint32_t shortcut;\n  } u;\n} ZopfliNode;\n\nBROTLI_INTERNAL void BrotliInitZopfliNodes(ZopfliNode* array, size_t length);\n\n/* Computes the shortest path of commands from position to at most\n   position + num_bytes.\n\n   On return, path->size() is the number of commands found and path[i] is the\n   length of the i-th command (copy length plus insert length).\n   Note that the sum of the lengths of all commands can be less than num_bytes.\n\n   On return, the nodes[0..num_bytes] array will have the following\n   \"ZopfliNode array invariant\":\n   For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then\n     (1) nodes[i].copy_length() >= 2\n     (2) nodes[i].command_length() <= i and\n     (3) nodes[i - nodes[i].command_length()].cost < kInfinity */\nBROTLI_INTERNAL size_t BrotliZopfliComputeShortestPath(\n    MemoryManager* m, size_t num_bytes,\n    size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    const int* dist_cache, Hasher* hasher, ZopfliNode* nodes);\n\nBROTLI_INTERNAL void BrotliZopfliCreateCommands(\n    const size_t num_bytes, const size_t block_start, const ZopfliNode* nodes,\n    int* dist_cache, size_t* last_insert_len, const BrotliEncoderParams* params,\n    Command* commands, size_t* num_literals);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/backward_references_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: EXPORT_FN, FN */\n\nstatic BROTLI_NOINLINE void EXPORT_FN(CreateBackwardReferences)(\n    size_t num_bytes, size_t position,\n    const uint8_t* ringbuffer, size_t ringbuffer_mask,\n    ContextLut literal_context_lut, const BrotliEncoderParams* params,\n    Hasher* hasher, int* dist_cache, size_t* last_insert_len,\n    Command* commands, size_t* num_commands, size_t* num_literals) {\n  HASHER()* privat = &hasher->privat.FN(_);\n  /* Set maximum distance, see section 9.1. of the spec. */\n  const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);\n  const size_t position_offset = params->stream_offset;\n\n  const Command* const orig_commands = commands;\n  size_t insert_length = *last_insert_len;\n  const size_t pos_end = position + num_bytes;\n  const size_t store_end = num_bytes >= FN(StoreLookahead)() ?\n      position + num_bytes - FN(StoreLookahead)() + 1 : position;\n\n  /* For speed up heuristics for random data. */\n  const size_t random_heuristics_window_size =\n      LiteralSpreeLengthForSparseSearch(params);\n  size_t apply_random_heuristics = position + random_heuristics_window_size;\n  const size_t gap = params->dictionary.compound.total_size;\n\n  /* Minimum score to accept a backward reference. */\n  const score_t kMinScore = BROTLI_SCORE_BASE + 100;\n\n  FN(PrepareDistanceCache)(privat, dist_cache);\n\n  while (position + FN(HashTypeLength)() < pos_end) {\n    size_t max_length = pos_end - position;\n    size_t max_distance = BROTLI_MIN(size_t, position, max_backward_limit);\n    size_t dictionary_start = BROTLI_MIN(size_t,\n        position + position_offset, max_backward_limit);\n    HasherSearchResult sr;\n    int dict_id = 0;\n    uint8_t p1 = 0;\n    uint8_t p2 = 0;\n    if (params->dictionary.contextual.context_based) {\n      p1 = position >= 1 ?\n          ringbuffer[(size_t)(position - 1) & ringbuffer_mask] : 0;\n      p2 = position >= 2 ?\n          ringbuffer[(size_t)(position - 2) & ringbuffer_mask] : 0;\n      dict_id = params->dictionary.contextual.context_map[\n          BROTLI_CONTEXT(p1, p2, literal_context_lut)];\n    }\n    sr.len = 0;\n    sr.len_code_delta = 0;\n    sr.distance = 0;\n    sr.score = kMinScore;\n    FN(FindLongestMatch)(privat, params->dictionary.contextual.dict[dict_id],\n        ringbuffer, ringbuffer_mask, dist_cache, position, max_length,\n        max_distance, dictionary_start + gap, params->dist.max_distance, &sr);\n    if (ENABLE_COMPOUND_DICTIONARY) {\n      LookupCompoundDictionaryMatch(&params->dictionary.compound, ringbuffer,\n          ringbuffer_mask, dist_cache, position, max_length,\n          dictionary_start, params->dist.max_distance, &sr);\n    }\n    if (sr.score > kMinScore) {\n      /* Found a match. Let's look for something even better ahead. */\n      int delayed_backward_references_in_row = 0;\n      --max_length;\n      for (;; --max_length) {\n        const score_t cost_diff_lazy = 175;\n        HasherSearchResult sr2;\n        sr2.len = params->quality < MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH ?\n            BROTLI_MIN(size_t, sr.len - 1, max_length) : 0;\n        sr2.len_code_delta = 0;\n        sr2.distance = 0;\n        sr2.score = kMinScore;\n        max_distance = BROTLI_MIN(size_t, position + 1, max_backward_limit);\n        dictionary_start = BROTLI_MIN(size_t,\n            position + 1 + position_offset, max_backward_limit);\n        if (params->dictionary.contextual.context_based) {\n          p2 = p1;\n          p1 = ringbuffer[position & ringbuffer_mask];\n          dict_id = params->dictionary.contextual.context_map[\n              BROTLI_CONTEXT(p1, p2, literal_context_lut)];\n        }\n        FN(FindLongestMatch)(privat,\n            params->dictionary.contextual.dict[dict_id],\n            ringbuffer, ringbuffer_mask, dist_cache, position + 1, max_length,\n            max_distance, dictionary_start + gap, params->dist.max_distance,\n            &sr2);\n        if (ENABLE_COMPOUND_DICTIONARY) {\n          LookupCompoundDictionaryMatch(\n              &params->dictionary.compound, ringbuffer,\n              ringbuffer_mask, dist_cache, position + 1, max_length,\n              dictionary_start, params->dist.max_distance, &sr2);\n        }\n        if (sr2.score >= sr.score + cost_diff_lazy) {\n          /* Ok, let's just write one byte for now and start a match from the\n             next byte. */\n          ++position;\n          ++insert_length;\n          sr = sr2;\n          if (++delayed_backward_references_in_row < 4 &&\n              position + FN(HashTypeLength)() < pos_end) {\n            continue;\n          }\n        }\n        break;\n      }\n      apply_random_heuristics =\n          position + 2 * sr.len + random_heuristics_window_size;\n      dictionary_start = BROTLI_MIN(size_t,\n          position + position_offset, max_backward_limit);\n      {\n        /* The first 16 codes are special short-codes,\n           and the minimum offset is 1. */\n        size_t distance_code = ComputeDistanceCode(\n            sr.distance, dictionary_start + gap, dist_cache);\n        if ((sr.distance <= (dictionary_start + gap)) && distance_code > 0) {\n          dist_cache[3] = dist_cache[2];\n          dist_cache[2] = dist_cache[1];\n          dist_cache[1] = dist_cache[0];\n          dist_cache[0] = (int)sr.distance;\n          FN(PrepareDistanceCache)(privat, dist_cache);\n        }\n        InitCommand(commands++, &params->dist, insert_length,\n            sr.len, sr.len_code_delta, distance_code);\n      }\n      *num_literals += insert_length;\n      insert_length = 0;\n      /* Put the hash keys into the table, if there are enough bytes left.\n         Depending on the hasher implementation, it can push all positions\n         in the given range or only a subset of them.\n         Avoid hash poisoning with RLE data. */\n      {\n        size_t range_start = position + 2;\n        size_t range_end = BROTLI_MIN(size_t, position + sr.len, store_end);\n        if (sr.distance < (sr.len >> 2)) {\n          range_start = BROTLI_MIN(size_t, range_end, BROTLI_MAX(size_t,\n              range_start, position + sr.len - (sr.distance << 2)));\n        }\n        FN(StoreRange)(privat, ringbuffer, ringbuffer_mask, range_start,\n                       range_end);\n      }\n      position += sr.len;\n    } else {\n      ++insert_length;\n      ++position;\n      /* If we have not seen matches for a long time, we can skip some\n         match lookups. Unsuccessful match lookups are very very expensive\n         and this kind of a heuristic speeds up compression quite\n         a lot. */\n      if (position > apply_random_heuristics) {\n        /* Going through uncompressible data, jump. */\n        if (position >\n            apply_random_heuristics + 4 * random_heuristics_window_size) {\n          /* It is quite a long time since we saw a copy, so we assume\n             that this data is not compressible, and store hashes less\n             often. Hashes of non compressible data are less likely to\n             turn out to be useful in the future, too, so we store less of\n             them to not to flood out the hash table of good compressible\n             data. */\n          const size_t kMargin =\n              BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 4);\n          size_t pos_jump =\n              BROTLI_MIN(size_t, position + 16, pos_end - kMargin);\n          for (; position < pos_jump; position += 4) {\n            FN(Store)(privat, ringbuffer, ringbuffer_mask, position);\n            insert_length += 4;\n          }\n        } else {\n          const size_t kMargin =\n              BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 2);\n          size_t pos_jump =\n              BROTLI_MIN(size_t, position + 8, pos_end - kMargin);\n          for (; position < pos_jump; position += 2) {\n            FN(Store)(privat, ringbuffer, ringbuffer_mask, position);\n            insert_length += 2;\n          }\n        }\n      }\n    }\n  }\n  insert_length += pos_end - position;\n  *last_insert_len = insert_length;\n  *num_commands += (size_t)(commands - orig_commands);\n}\n"
  },
  {
    "path": "libs/brotli/enc/bit_cost.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions to estimate the bit cost of Huffman trees. */\n\n#include \"bit_cost.h\"\n\n#include \"../common/platform.h\"\n#include \"fast_log.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ndouble BrotliBitsEntropy(const uint32_t* population, size_t size) {\n  size_t sum = 0;\n  double retval = 0;\n  const uint32_t* population_end = population + size;\n  size_t p;\n  if (size & 1) {\n    goto odd_number_of_elements_left;\n  }\n  while (population < population_end) {\n    p = *population++;\n    sum += p;\n    retval -= (double)p * FastLog2(p);\n odd_number_of_elements_left:\n    p = *population++;\n    sum += p;\n    retval -= (double)p * FastLog2(p);\n  }\n  if (sum) retval += (double)sum * FastLog2(sum);\n\n  if (retval < (double)sum) {\n    /* TODO(eustas): consider doing that per-symbol? */\n    /* At least one bit per literal is needed. */\n    retval = (double)sum;\n  }\n\n  return retval;\n}\n\n#define FN(X) X ## Literal\n#include \"bit_cost_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Command\n#include \"bit_cost_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Distance\n#include \"bit_cost_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/bit_cost.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions to estimate the bit cost of Huffman trees. */\n\n#ifndef BROTLI_ENC_BIT_COST_H_\n#define BROTLI_ENC_BIT_COST_H_\n\n#include \"../common/platform.h\"\n#include \"histogram.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nBROTLI_INTERNAL double BrotliBitsEntropy(\n    const uint32_t* population, size_t size);\nBROTLI_INTERNAL double BrotliPopulationCostLiteral(\n    const HistogramLiteral* histogram);\nBROTLI_INTERNAL double BrotliPopulationCostCommand(\n    const HistogramCommand* histogram);\nBROTLI_INTERNAL double BrotliPopulationCostDistance(\n    const HistogramDistance* histogram);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_BIT_COST_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/bit_cost_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n#define HistogramType FN(Histogram)\n\ndouble FN(BrotliPopulationCost)(const HistogramType* histogram) {\n  static const double kOneSymbolHistogramCost = 12;\n  static const double kTwoSymbolHistogramCost = 20;\n  static const double kThreeSymbolHistogramCost = 28;\n  static const double kFourSymbolHistogramCost = 37;\n  const size_t data_size = FN(HistogramDataSize)();\n  int count = 0;\n  size_t s[5];\n  double bits = 0.0;\n  size_t i;\n  if (histogram->total_count_ == 0) {\n    return kOneSymbolHistogramCost;\n  }\n  for (i = 0; i < data_size; ++i) {\n    if (histogram->data_[i] > 0) {\n      s[count] = i;\n      ++count;\n      if (count > 4) break;\n    }\n  }\n  if (count == 1) {\n    return kOneSymbolHistogramCost;\n  }\n  if (count == 2) {\n    return (kTwoSymbolHistogramCost + (double)histogram->total_count_);\n  }\n  if (count == 3) {\n    const uint32_t histo0 = histogram->data_[s[0]];\n    const uint32_t histo1 = histogram->data_[s[1]];\n    const uint32_t histo2 = histogram->data_[s[2]];\n    const uint32_t histomax =\n        BROTLI_MAX(uint32_t, histo0, BROTLI_MAX(uint32_t, histo1, histo2));\n    return (kThreeSymbolHistogramCost +\n            2 * (histo0 + histo1 + histo2) - histomax);\n  }\n  if (count == 4) {\n    uint32_t histo[4];\n    uint32_t h23;\n    uint32_t histomax;\n    for (i = 0; i < 4; ++i) {\n      histo[i] = histogram->data_[s[i]];\n    }\n    /* Sort */\n    for (i = 0; i < 4; ++i) {\n      size_t j;\n      for (j = i + 1; j < 4; ++j) {\n        if (histo[j] > histo[i]) {\n          BROTLI_SWAP(uint32_t, histo, j, i);\n        }\n      }\n    }\n    h23 = histo[2] + histo[3];\n    histomax = BROTLI_MAX(uint32_t, h23, histo[0]);\n    return (kFourSymbolHistogramCost +\n            3 * h23 + 2 * (histo[0] + histo[1]) - histomax);\n  }\n\n  {\n    /* In this loop we compute the entropy of the histogram and simultaneously\n       build a simplified histogram of the code length codes where we use the\n       zero repeat code 17, but we don't use the non-zero repeat code 16. */\n    size_t max_depth = 1;\n    uint32_t depth_histo[BROTLI_CODE_LENGTH_CODES] = { 0 };\n    const double log2total = FastLog2(histogram->total_count_);\n    for (i = 0; i < data_size;) {\n      if (histogram->data_[i] > 0) {\n        /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) =\n                                    = log2(total_count) - log2(count(symbol)) */\n        double log2p = log2total - FastLog2(histogram->data_[i]);\n        /* Approximate the bit depth by round(-log2(P(symbol))) */\n        size_t depth = (size_t)(log2p + 0.5);\n        bits += histogram->data_[i] * log2p;\n        if (depth > 15) {\n          depth = 15;\n        }\n        if (depth > max_depth) {\n          max_depth = depth;\n        }\n        ++depth_histo[depth];\n        ++i;\n      } else {\n        /* Compute the run length of zeros and add the appropriate number of 0\n           and 17 code length codes to the code length code histogram. */\n        uint32_t reps = 1;\n        size_t k;\n        for (k = i + 1; k < data_size && histogram->data_[k] == 0; ++k) {\n          ++reps;\n        }\n        i += reps;\n        if (i == data_size) {\n          /* Don't add any cost for the last zero run, since these are encoded\n             only implicitly. */\n          break;\n        }\n        if (reps < 3) {\n          depth_histo[0] += reps;\n        } else {\n          reps -= 2;\n          while (reps > 0) {\n            ++depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH];\n            /* Add the 3 extra bits for the 17 code length code. */\n            bits += 3;\n            reps >>= 3;\n          }\n        }\n      }\n    }\n    /* Add the estimated encoding cost of the code length code histogram. */\n    bits += (double)(18 + 2 * max_depth);\n    /* Add the entropy of the code length code histogram. */\n    bits += BrotliBitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES);\n  }\n  return bits;\n}\n\n#undef HistogramType\n"
  },
  {
    "path": "libs/brotli/enc/block_encoder_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n#define HistogramType FN(Histogram)\n\n/* Creates entropy codes for all block types and stores them to the bit\n   stream. */\nstatic void FN(BuildAndStoreEntropyCodes)(MemoryManager* m, BlockEncoder* self,\n    const HistogramType* histograms, const size_t histograms_size,\n    const size_t alphabet_size, HuffmanTree* tree,\n    size_t* storage_ix, uint8_t* storage) {\n  const size_t table_size = histograms_size * self->histogram_length_;\n  self->depths_ = BROTLI_ALLOC(m, uint8_t, table_size);\n  self->bits_ = BROTLI_ALLOC(m, uint16_t, table_size);\n  if (BROTLI_IS_OOM(m)) return;\n\n  {\n    size_t i;\n    for (i = 0; i < histograms_size; ++i) {\n      size_t ix = i * self->histogram_length_;\n      BuildAndStoreHuffmanTree(&histograms[i].data_[0], self->histogram_length_,\n          alphabet_size, tree, &self->depths_[ix], &self->bits_[ix],\n          storage_ix, storage);\n    }\n  }\n}\n\n#undef HistogramType\n"
  },
  {
    "path": "libs/brotli/enc/block_splitter.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Block split point selection utilities. */\n\n#include \"block_splitter.h\"\n\n#include \"../common/platform.h\"\n#include \"bit_cost.h\"\n#include \"cluster.h\"\n#include \"command.h\"\n#include \"fast_log.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n#include \"quality.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic const size_t kMaxLiteralHistograms = 100;\nstatic const size_t kMaxCommandHistograms = 50;\nstatic const double kLiteralBlockSwitchCost = 28.1;\nstatic const double kCommandBlockSwitchCost = 13.5;\nstatic const double kDistanceBlockSwitchCost = 14.6;\nstatic const size_t kLiteralStrideLength = 70;\nstatic const size_t kCommandStrideLength = 40;\nstatic const size_t kDistanceStrideLength = 40;\nstatic const size_t kSymbolsPerLiteralHistogram = 544;\nstatic const size_t kSymbolsPerCommandHistogram = 530;\nstatic const size_t kSymbolsPerDistanceHistogram = 544;\nstatic const size_t kMinLengthForBlockSplitting = 128;\nstatic const size_t kIterMulForRefining = 2;\nstatic const size_t kMinItersForRefining = 100;\n\nstatic size_t CountLiterals(const Command* cmds, const size_t num_commands) {\n  /* Count how many we have. */\n  size_t total_length = 0;\n  size_t i;\n  for (i = 0; i < num_commands; ++i) {\n    total_length += cmds[i].insert_len_;\n  }\n  return total_length;\n}\n\nstatic void CopyLiteralsToByteArray(const Command* cmds,\n                                    const size_t num_commands,\n                                    const uint8_t* data,\n                                    const size_t offset,\n                                    const size_t mask,\n                                    uint8_t* literals) {\n  size_t pos = 0;\n  size_t from_pos = offset & mask;\n  size_t i;\n  for (i = 0; i < num_commands; ++i) {\n    size_t insert_len = cmds[i].insert_len_;\n    if (from_pos + insert_len > mask) {\n      size_t head_size = mask + 1 - from_pos;\n      memcpy(literals + pos, data + from_pos, head_size);\n      from_pos = 0;\n      pos += head_size;\n      insert_len -= head_size;\n    }\n    if (insert_len > 0) {\n      memcpy(literals + pos, data + from_pos, insert_len);\n      pos += insert_len;\n    }\n    from_pos = (from_pos + insert_len + CommandCopyLen(&cmds[i])) & mask;\n  }\n}\n\nstatic BROTLI_INLINE uint32_t MyRand(uint32_t* seed) {\n  /* Initial seed should be 7. In this case, loop length is (1 << 29). */\n  *seed *= 16807U;\n  return *seed;\n}\n\nstatic BROTLI_INLINE double BitCost(size_t count) {\n  return count == 0 ? -2.0 : FastLog2(count);\n}\n\n#define HISTOGRAMS_PER_BATCH 64\n#define CLUSTERS_PER_BATCH 16\n\n#define FN(X) X ## Literal\n#define DataType uint8_t\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_splitter_inc.h\"\n#undef DataType\n#undef FN\n\n#define FN(X) X ## Command\n#define DataType uint16_t\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_splitter_inc.h\"\n#undef FN\n\n#define FN(X) X ## Distance\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_splitter_inc.h\"\n#undef DataType\n#undef FN\n\nvoid BrotliInitBlockSplit(BlockSplit* self) {\n  self->num_types = 0;\n  self->num_blocks = 0;\n  self->types = 0;\n  self->lengths = 0;\n  self->types_alloc_size = 0;\n  self->lengths_alloc_size = 0;\n}\n\nvoid BrotliDestroyBlockSplit(MemoryManager* m, BlockSplit* self) {\n  BROTLI_FREE(m, self->types);\n  BROTLI_FREE(m, self->lengths);\n}\n\n/* Extracts literals, command distance and prefix codes, then applies\n * SplitByteVector to create partitioning. */\nvoid BrotliSplitBlock(MemoryManager* m,\n                      const Command* cmds,\n                      const size_t num_commands,\n                      const uint8_t* data,\n                      const size_t pos,\n                      const size_t mask,\n                      const BrotliEncoderParams* params,\n                      BlockSplit* literal_split,\n                      BlockSplit* insert_and_copy_split,\n                      BlockSplit* dist_split) {\n  {\n    size_t literals_count = CountLiterals(cmds, num_commands);\n    uint8_t* literals = BROTLI_ALLOC(m, uint8_t, literals_count);\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(literals)) return;\n    /* Create a continuous array of literals. */\n    CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals);\n    /* Create the block split on the array of literals.\n     * Literal histograms can have alphabet size up to 256.\n     * Though, to accommodate context modeling, less than half of maximum size\n     * is allowed. */\n    SplitByteVectorLiteral(\n        m, literals, literals_count,\n        kSymbolsPerLiteralHistogram, kMaxLiteralHistograms,\n        kLiteralStrideLength, kLiteralBlockSwitchCost, params,\n        literal_split);\n    if (BROTLI_IS_OOM(m)) return;\n    BROTLI_FREE(m, literals);\n    /* NB: this might be a good place for injecting extra splitting without\n     *     increasing encoder complexity; however, output partition would be less\n     *     optimal than one produced with forced splitting inside\n     *     SplitByteVector (FindBlocks / ClusterBlocks). */\n  }\n\n  {\n    /* Compute prefix codes for commands. */\n    uint16_t* insert_and_copy_codes = BROTLI_ALLOC(m, uint16_t, num_commands);\n    size_t i;\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(insert_and_copy_codes)) return;\n    for (i = 0; i < num_commands; ++i) {\n      insert_and_copy_codes[i] = cmds[i].cmd_prefix_;\n    }\n    /* Create the block split on the array of command prefixes. */\n    SplitByteVectorCommand(\n        m, insert_and_copy_codes, num_commands,\n        kSymbolsPerCommandHistogram, kMaxCommandHistograms,\n        kCommandStrideLength, kCommandBlockSwitchCost, params,\n        insert_and_copy_split);\n    if (BROTLI_IS_OOM(m)) return;\n    /* TODO(eustas): reuse for distances? */\n    BROTLI_FREE(m, insert_and_copy_codes);\n  }\n\n  {\n    /* Create a continuous array of distance prefixes. */\n    uint16_t* distance_prefixes = BROTLI_ALLOC(m, uint16_t, num_commands);\n    size_t j = 0;\n    size_t i;\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(distance_prefixes)) return;\n    for (i = 0; i < num_commands; ++i) {\n      const Command* cmd = &cmds[i];\n      if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {\n        distance_prefixes[j++] = cmd->dist_prefix_ & 0x3FF;\n      }\n    }\n    /* Create the block split on the array of distance prefixes. */\n    SplitByteVectorDistance(\n        m, distance_prefixes, j,\n        kSymbolsPerDistanceHistogram, kMaxCommandHistograms,\n        kDistanceStrideLength, kDistanceBlockSwitchCost, params,\n        dist_split);\n    if (BROTLI_IS_OOM(m)) return;\n    BROTLI_FREE(m, distance_prefixes);\n  }\n}\n\n#if defined(BROTLI_TEST)\nsize_t BrotliCountLiteralsForTest(const Command*, size_t);\nsize_t BrotliCountLiteralsForTest(const Command* cmds, size_t num_commands) {\n  return CountLiterals(cmds, num_commands);\n}\nvoid BrotliCopyLiteralsToByteArrayForTest(\n    const Command*, size_t, const uint8_t*, size_t, size_t, uint8_t*);\nvoid BrotliCopyLiteralsToByteArrayForTest(const Command* cmds,\n    size_t num_commands, const uint8_t* data, size_t offset, size_t mask,\n    uint8_t* literals) {\n  CopyLiteralsToByteArray(cmds, num_commands, data, offset, mask, literals);\n}\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/block_splitter.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Block split point selection utilities. */\n\n#ifndef BROTLI_ENC_BLOCK_SPLITTER_H_\n#define BROTLI_ENC_BLOCK_SPLITTER_H_\n\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"memory.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct BlockSplit {\n  size_t num_types;  /* Amount of distinct types */\n  size_t num_blocks;  /* Amount of values in types and length */\n  uint8_t* types;\n  uint32_t* lengths;\n\n  size_t types_alloc_size;\n  size_t lengths_alloc_size;\n} BlockSplit;\n\nBROTLI_INTERNAL void BrotliInitBlockSplit(BlockSplit* self);\nBROTLI_INTERNAL void BrotliDestroyBlockSplit(MemoryManager* m,\n                                             BlockSplit* self);\n\nBROTLI_INTERNAL void BrotliSplitBlock(MemoryManager* m,\n                                      const Command* cmds,\n                                      const size_t num_commands,\n                                      const uint8_t* data,\n                                      const size_t offset,\n                                      const size_t mask,\n                                      const BrotliEncoderParams* params,\n                                      BlockSplit* literal_split,\n                                      BlockSplit* insert_and_copy_split,\n                                      BlockSplit* dist_split);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_BLOCK_SPLITTER_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/block_splitter_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, DataType */\n\n#define HistogramType FN(Histogram)\n\nstatic void FN(InitialEntropyCodes)(const DataType* data, size_t length,\n                                    size_t stride,\n                                    size_t num_histograms,\n                                    HistogramType* histograms) {\n  uint32_t seed = 7;\n  size_t block_length = length / num_histograms;\n  size_t i;\n  FN(ClearHistograms)(histograms, num_histograms);\n  for (i = 0; i < num_histograms; ++i) {\n    size_t pos = length * i / num_histograms;\n    if (i != 0) {\n      pos += MyRand(&seed) % block_length;\n    }\n    if (pos + stride >= length) {\n      pos = length - stride - 1;\n    }\n    FN(HistogramAddVector)(&histograms[i], data + pos, stride);\n  }\n}\n\nstatic void FN(RandomSample)(uint32_t* seed,\n                             const DataType* data,\n                             size_t length,\n                             size_t stride,\n                             HistogramType* sample) {\n  size_t pos = 0;\n  if (stride >= length) {\n    stride = length;\n  } else {\n    pos = MyRand(seed) % (length - stride + 1);\n  }\n  FN(HistogramAddVector)(sample, data + pos, stride);\n}\n\nstatic void FN(RefineEntropyCodes)(const DataType* data, size_t length,\n                                   size_t stride,\n                                   size_t num_histograms,\n                                   HistogramType* histograms,\n                                   HistogramType* tmp) {\n  size_t iters =\n      kIterMulForRefining * length / stride + kMinItersForRefining;\n  uint32_t seed = 7;\n  size_t iter;\n  iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms;\n  for (iter = 0; iter < iters; ++iter) {\n    FN(HistogramClear)(tmp);\n    FN(RandomSample)(&seed, data, length, stride, tmp);\n    FN(HistogramAddHistogram)(&histograms[iter % num_histograms], tmp);\n  }\n}\n\n/* Assigns a block id from the range [0, num_histograms) to each data element\n   in data[0..length) and fills in block_id[0..length) with the assigned values.\n   Returns the number of blocks, i.e. one plus the number of block switches. */\nstatic size_t FN(FindBlocks)(const DataType* data, const size_t length,\n                             const double block_switch_bitcost,\n                             const size_t num_histograms,\n                             const HistogramType* histograms,\n                             double* insert_cost,\n                             double* cost,\n                             uint8_t* switch_signal,\n                             uint8_t* block_id) {\n  const size_t alphabet_size = FN(HistogramDataSize)();\n  const size_t bitmap_len = (num_histograms + 7) >> 3;\n  size_t num_blocks = 1;\n  size_t byte_ix;\n  size_t i;\n  size_t j;\n  BROTLI_DCHECK(num_histograms <= 256);\n\n  /* Trivial case: single histogram -> single block type. */\n  if (num_histograms <= 1) {\n    for (i = 0; i < length; ++i) {\n      block_id[i] = 0;\n    }\n    return 1;\n  }\n\n  /* Fill bitcost for each symbol of all histograms.\n   * Non-existing symbol cost: 2 + log2(total_count).\n   * Regular symbol cost: -log2(symbol_count / total_count). */\n  memset(insert_cost, 0,\n         sizeof(insert_cost[0]) * alphabet_size * num_histograms);\n  for (i = 0; i < num_histograms; ++i) {\n    insert_cost[i] = FastLog2((uint32_t)histograms[i].total_count_);\n  }\n  for (i = alphabet_size; i != 0;) {\n    /* Reverse order to use the 0-th row as a temporary storage. */\n    --i;\n    for (j = 0; j < num_histograms; ++j) {\n      insert_cost[i * num_histograms + j] =\n          insert_cost[j] - BitCost(histograms[j].data_[i]);\n    }\n  }\n\n  /* After each iteration of this loop, cost[k] will contain the difference\n     between the minimum cost of arriving at the current byte position using\n     entropy code k, and the minimum cost of arriving at the current byte\n     position. This difference is capped at the block switch cost, and if it\n     reaches block switch cost, it means that when we trace back from the last\n     position, we need to switch here. */\n  memset(cost, 0, sizeof(cost[0]) * num_histograms);\n  memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmap_len);\n  for (byte_ix = 0; byte_ix < length; ++byte_ix) {\n    size_t ix = byte_ix * bitmap_len;\n    size_t symbol = data[byte_ix];\n    size_t insert_cost_ix = symbol * num_histograms;\n    double min_cost = 1e99;\n    double block_switch_cost = block_switch_bitcost;\n    static const size_t prologue_length = 2000;\n    static const double multiplier = 0.07 / 2000;\n    size_t k;\n    for (k = 0; k < num_histograms; ++k) {\n      /* We are coding the symbol with entropy code k. */\n      cost[k] += insert_cost[insert_cost_ix + k];\n      if (cost[k] < min_cost) {\n        min_cost = cost[k];\n        block_id[byte_ix] = (uint8_t)k;\n      }\n    }\n    /* More blocks for the beginning. */\n    if (byte_ix < prologue_length) {\n      block_switch_cost *= 0.77 + multiplier * (double)byte_ix;\n    }\n    for (k = 0; k < num_histograms; ++k) {\n      cost[k] -= min_cost;\n      if (cost[k] >= block_switch_cost) {\n        const uint8_t mask = (uint8_t)(1u << (k & 7));\n        cost[k] = block_switch_cost;\n        BROTLI_DCHECK((k >> 3) < bitmap_len);\n        switch_signal[ix + (k >> 3)] |= mask;\n      }\n    }\n  }\n\n  byte_ix = length - 1;\n  {  /* Trace back from the last position and switch at the marked places. */\n    size_t ix = byte_ix * bitmap_len;\n    uint8_t cur_id = block_id[byte_ix];\n    while (byte_ix > 0) {\n      const uint8_t mask = (uint8_t)(1u << (cur_id & 7));\n      BROTLI_DCHECK(((size_t)cur_id >> 3) < bitmap_len);\n      --byte_ix;\n      ix -= bitmap_len;\n      if (switch_signal[ix + (cur_id >> 3)] & mask) {\n        if (cur_id != block_id[byte_ix]) {\n          cur_id = block_id[byte_ix];\n          ++num_blocks;\n        }\n      }\n      block_id[byte_ix] = cur_id;\n    }\n  }\n  return num_blocks;\n}\n\nstatic size_t FN(RemapBlockIds)(uint8_t* block_ids, const size_t length,\n                                uint16_t* new_id, const size_t num_histograms) {\n  static const uint16_t kInvalidId = 256;\n  uint16_t next_id = 0;\n  size_t i;\n  for (i = 0; i < num_histograms; ++i) {\n    new_id[i] = kInvalidId;\n  }\n  for (i = 0; i < length; ++i) {\n    BROTLI_DCHECK(block_ids[i] < num_histograms);\n    if (new_id[block_ids[i]] == kInvalidId) {\n      new_id[block_ids[i]] = next_id++;\n    }\n  }\n  for (i = 0; i < length; ++i) {\n    block_ids[i] = (uint8_t)new_id[block_ids[i]];\n    BROTLI_DCHECK(block_ids[i] < num_histograms);\n  }\n  BROTLI_DCHECK(next_id <= num_histograms);\n  return next_id;\n}\n\nstatic void FN(BuildBlockHistograms)(const DataType* data, const size_t length,\n                                     const uint8_t* block_ids,\n                                     const size_t num_histograms,\n                                     HistogramType* histograms) {\n  size_t i;\n  FN(ClearHistograms)(histograms, num_histograms);\n  for (i = 0; i < length; ++i) {\n    FN(HistogramAdd)(&histograms[block_ids[i]], data[i]);\n  }\n}\n\n/* Given the initial partitioning build partitioning with limited number\n * of histograms (and block types). */\nstatic void FN(ClusterBlocks)(MemoryManager* m,\n                              const DataType* data, const size_t length,\n                              const size_t num_blocks,\n                              uint8_t* block_ids,\n                              BlockSplit* split) {\n  uint32_t* histogram_symbols = BROTLI_ALLOC(m, uint32_t, num_blocks);\n  uint32_t* u32 =\n      BROTLI_ALLOC(m, uint32_t, num_blocks + 4 * HISTOGRAMS_PER_BATCH);\n  const size_t expected_num_clusters = CLUSTERS_PER_BATCH *\n      (num_blocks + HISTOGRAMS_PER_BATCH - 1) / HISTOGRAMS_PER_BATCH;\n  size_t all_histograms_size = 0;\n  size_t all_histograms_capacity = expected_num_clusters;\n  HistogramType* all_histograms =\n      BROTLI_ALLOC(m, HistogramType, all_histograms_capacity);\n  size_t cluster_size_size = 0;\n  size_t cluster_size_capacity = expected_num_clusters;\n  uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, cluster_size_capacity);\n  size_t num_clusters = 0;\n  HistogramType* histograms = BROTLI_ALLOC(m, HistogramType,\n      BROTLI_MIN(size_t, num_blocks, HISTOGRAMS_PER_BATCH));\n  size_t max_num_pairs =\n      HISTOGRAMS_PER_BATCH * HISTOGRAMS_PER_BATCH / 2;\n  size_t pairs_capacity = max_num_pairs + 1;\n  HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity);\n  size_t pos = 0;\n  uint32_t* clusters;\n  size_t num_final_clusters;\n  static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;\n  uint32_t* new_index;\n  size_t i;\n  uint32_t* BROTLI_RESTRICT const sizes =\n      u32 ? (u32 + 0 * HISTOGRAMS_PER_BATCH) : NULL;\n  uint32_t* BROTLI_RESTRICT const new_clusters =\n      u32 ? (u32 + 1 * HISTOGRAMS_PER_BATCH) : NULL;\n  uint32_t* BROTLI_RESTRICT const symbols =\n      u32 ? (u32 + 2 * HISTOGRAMS_PER_BATCH) : NULL;\n  uint32_t* BROTLI_RESTRICT const remap =\n      u32 ? (u32 + 3 * HISTOGRAMS_PER_BATCH) : NULL;\n  uint32_t* BROTLI_RESTRICT const block_lengths =\n      u32 ? (u32 + 4 * HISTOGRAMS_PER_BATCH) : NULL;\n  /* TODO(eustas): move to arena? */\n  HistogramType* tmp = BROTLI_ALLOC(m, HistogramType, 2);\n\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(histogram_symbols) ||\n      BROTLI_IS_NULL(u32) || BROTLI_IS_NULL(all_histograms) ||\n      BROTLI_IS_NULL(cluster_size) || BROTLI_IS_NULL(histograms) ||\n      BROTLI_IS_NULL(pairs) || BROTLI_IS_NULL(tmp)) {\n    return;\n  }\n\n  memset(u32, 0, (num_blocks + 4 * HISTOGRAMS_PER_BATCH) * sizeof(uint32_t));\n\n  /* Calculate block lengths (convert repeating values -> series length). */\n  {\n    size_t block_idx = 0;\n    for (i = 0; i < length; ++i) {\n      BROTLI_DCHECK(block_idx < num_blocks);\n      ++block_lengths[block_idx];\n      if (i + 1 == length || block_ids[i] != block_ids[i + 1]) {\n        ++block_idx;\n      }\n    }\n    BROTLI_DCHECK(block_idx == num_blocks);\n  }\n\n  /* Pre-cluster blocks (cluster batches). */\n  for (i = 0; i < num_blocks; i += HISTOGRAMS_PER_BATCH) {\n    const size_t num_to_combine =\n        BROTLI_MIN(size_t, num_blocks - i, HISTOGRAMS_PER_BATCH);\n    size_t num_new_clusters;\n    size_t j;\n    for (j = 0; j < num_to_combine; ++j) {\n      size_t k;\n      size_t block_length = block_lengths[i + j];\n      FN(HistogramClear)(&histograms[j]);\n      for (k = 0; k < block_length; ++k) {\n        FN(HistogramAdd)(&histograms[j], data[pos++]);\n      }\n      histograms[j].bit_cost_ = FN(BrotliPopulationCost)(&histograms[j]);\n      new_clusters[j] = (uint32_t)j;\n      symbols[j] = (uint32_t)j;\n      sizes[j] = 1;\n    }\n    num_new_clusters = FN(BrotliHistogramCombine)(\n        histograms, tmp, sizes, symbols, new_clusters, pairs, num_to_combine,\n        num_to_combine, HISTOGRAMS_PER_BATCH, max_num_pairs);\n    BROTLI_ENSURE_CAPACITY(m, HistogramType, all_histograms,\n        all_histograms_capacity, all_histograms_size + num_new_clusters);\n    BROTLI_ENSURE_CAPACITY(m, uint32_t, cluster_size,\n        cluster_size_capacity, cluster_size_size + num_new_clusters);\n    if (BROTLI_IS_OOM(m)) return;\n    for (j = 0; j < num_new_clusters; ++j) {\n      all_histograms[all_histograms_size++] = histograms[new_clusters[j]];\n      cluster_size[cluster_size_size++] = sizes[new_clusters[j]];\n      remap[new_clusters[j]] = (uint32_t)j;\n    }\n    for (j = 0; j < num_to_combine; ++j) {\n      histogram_symbols[i + j] = (uint32_t)num_clusters + remap[symbols[j]];\n    }\n    num_clusters += num_new_clusters;\n    BROTLI_DCHECK(num_clusters == cluster_size_size);\n    BROTLI_DCHECK(num_clusters == all_histograms_size);\n  }\n  BROTLI_FREE(m, histograms);\n\n  /* Final clustering. */\n  max_num_pairs =\n      BROTLI_MIN(size_t, 64 * num_clusters, (num_clusters / 2) * num_clusters);\n  if (pairs_capacity < max_num_pairs + 1) {\n    BROTLI_FREE(m, pairs);\n    pairs = BROTLI_ALLOC(m, HistogramPair, max_num_pairs + 1);\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(pairs)) return;\n  }\n  clusters = BROTLI_ALLOC(m, uint32_t, num_clusters);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(clusters)) return;\n  for (i = 0; i < num_clusters; ++i) {\n    clusters[i] = (uint32_t)i;\n  }\n  num_final_clusters = FN(BrotliHistogramCombine)(\n      all_histograms, tmp, cluster_size, histogram_symbols, clusters, pairs,\n      num_clusters, num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES,\n      max_num_pairs);\n  BROTLI_FREE(m, pairs);\n  BROTLI_FREE(m, cluster_size);\n\n  /* Assign blocks to final histograms. */\n  new_index = BROTLI_ALLOC(m, uint32_t, num_clusters);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_index)) return;\n  for (i = 0; i < num_clusters; ++i) new_index[i] = kInvalidIndex;\n  pos = 0;\n  {\n    uint32_t next_index = 0;\n    for (i = 0; i < num_blocks; ++i) {\n      size_t j;\n      uint32_t best_out;\n      double best_bits;\n      FN(HistogramClear)(tmp);\n      for (j = 0; j < block_lengths[i]; ++j) {\n        FN(HistogramAdd)(tmp, data[pos++]);\n      }\n      /* Among equally good histograms prefer last used. */\n      /* TODO(eustas): should we give a block-switch discount here? */\n      best_out = (i == 0) ? histogram_symbols[0] : histogram_symbols[i - 1];\n      best_bits = FN(BrotliHistogramBitCostDistance)(\n          tmp, &all_histograms[best_out], tmp + 1);\n      for (j = 0; j < num_final_clusters; ++j) {\n        const double cur_bits = FN(BrotliHistogramBitCostDistance)(\n            tmp, &all_histograms[clusters[j]], tmp + 1);\n        if (cur_bits < best_bits) {\n          best_bits = cur_bits;\n          best_out = clusters[j];\n        }\n      }\n      histogram_symbols[i] = best_out;\n      if (new_index[best_out] == kInvalidIndex) {\n        new_index[best_out] = next_index++;\n      }\n    }\n  }\n  BROTLI_FREE(m, tmp);\n  BROTLI_FREE(m, clusters);\n  BROTLI_FREE(m, all_histograms);\n  BROTLI_ENSURE_CAPACITY(\n      m, uint8_t, split->types, split->types_alloc_size, num_blocks);\n  BROTLI_ENSURE_CAPACITY(\n      m, uint32_t, split->lengths, split->lengths_alloc_size, num_blocks);\n  if (BROTLI_IS_OOM(m)) return;\n\n  /* Rewrite final assignment to block-split. There might be less blocks\n   * than |num_blocks| due to clustering. */\n  {\n    uint32_t cur_length = 0;\n    size_t block_idx = 0;\n    uint8_t max_type = 0;\n    for (i = 0; i < num_blocks; ++i) {\n      cur_length += block_lengths[i];\n      if (i + 1 == num_blocks ||\n          histogram_symbols[i] != histogram_symbols[i + 1]) {\n        const uint8_t id = (uint8_t)new_index[histogram_symbols[i]];\n        split->types[block_idx] = id;\n        split->lengths[block_idx] = cur_length;\n        max_type = BROTLI_MAX(uint8_t, max_type, id);\n        cur_length = 0;\n        ++block_idx;\n      }\n    }\n    split->num_blocks = block_idx;\n    split->num_types = (size_t)max_type + 1;\n  }\n  BROTLI_FREE(m, new_index);\n  BROTLI_FREE(m, u32);\n  BROTLI_FREE(m, histogram_symbols);\n}\n\n/* Create BlockSplit (partitioning) given the limits, estimates and \"effort\"\n * parameters.\n *\n * NB: max_histograms is often less than number of histograms allowed by format;\n *     this is done intentionally, to save some \"space\" for context-aware\n *     clustering (here entropy is estimated for context-free symbols). */\nstatic void FN(SplitByteVector)(MemoryManager* m,\n                                const DataType* data, const size_t length,\n                                const size_t symbols_per_histogram,\n                                const size_t max_histograms,\n                                const size_t sampling_stride_length,\n                                const double block_switch_cost,\n                                const BrotliEncoderParams* params,\n                                BlockSplit* split) {\n  const size_t data_size = FN(HistogramDataSize)();\n  HistogramType* histograms;\n  HistogramType* tmp;\n  /* Calculate number of histograms; initial estimate is one histogram per\n   * specified amount of symbols; however, this value is capped. */\n  size_t num_histograms = length / symbols_per_histogram + 1;\n  if (num_histograms > max_histograms) {\n    num_histograms = max_histograms;\n  }\n\n  /* Corner case: no input. */\n  if (length == 0) {\n    split->num_types = 1;\n    return;\n  }\n\n  if (length < kMinLengthForBlockSplitting) {\n    BROTLI_ENSURE_CAPACITY(m, uint8_t,\n        split->types, split->types_alloc_size, split->num_blocks + 1);\n    BROTLI_ENSURE_CAPACITY(m, uint32_t,\n        split->lengths, split->lengths_alloc_size, split->num_blocks + 1);\n    if (BROTLI_IS_OOM(m)) return;\n    split->num_types = 1;\n    split->types[split->num_blocks] = 0;\n    split->lengths[split->num_blocks] = (uint32_t)length;\n    split->num_blocks++;\n    return;\n  }\n  histograms = BROTLI_ALLOC(m, HistogramType, num_histograms + 1);\n  tmp = histograms + num_histograms;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(histograms)) return;\n  /* Find good entropy codes. */\n  FN(InitialEntropyCodes)(data, length,\n                          sampling_stride_length,\n                          num_histograms, histograms);\n  FN(RefineEntropyCodes)(data, length,\n                         sampling_stride_length,\n                         num_histograms, histograms, tmp);\n  {\n    /* Find a good path through literals with the good entropy codes. */\n    uint8_t* block_ids = BROTLI_ALLOC(m, uint8_t, length);\n    size_t num_blocks = 0;\n    const size_t bitmaplen = (num_histograms + 7) >> 3;\n    double* insert_cost = BROTLI_ALLOC(m, double, data_size * num_histograms);\n    double* cost = BROTLI_ALLOC(m, double, num_histograms);\n    uint8_t* switch_signal = BROTLI_ALLOC(m, uint8_t, length * bitmaplen);\n    uint16_t* new_id = BROTLI_ALLOC(m, uint16_t, num_histograms);\n    const size_t iters = params->quality < HQ_ZOPFLIFICATION_QUALITY ? 3 : 10;\n    size_t i;\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(block_ids) ||\n        BROTLI_IS_NULL(insert_cost) || BROTLI_IS_NULL(cost) ||\n        BROTLI_IS_NULL(switch_signal) || BROTLI_IS_NULL(new_id)) {\n      return;\n    }\n    for (i = 0; i < iters; ++i) {\n      num_blocks = FN(FindBlocks)(data, length,\n                                  block_switch_cost,\n                                  num_histograms, histograms,\n                                  insert_cost, cost, switch_signal,\n                                  block_ids);\n      num_histograms = FN(RemapBlockIds)(block_ids, length,\n                                         new_id, num_histograms);\n      FN(BuildBlockHistograms)(data, length, block_ids,\n                               num_histograms, histograms);\n    }\n    BROTLI_FREE(m, insert_cost);\n    BROTLI_FREE(m, cost);\n    BROTLI_FREE(m, switch_signal);\n    BROTLI_FREE(m, new_id);\n    BROTLI_FREE(m, histograms);\n    FN(ClusterBlocks)(m, data, length, num_blocks, block_ids, split);\n    if (BROTLI_IS_OOM(m)) return;\n    BROTLI_FREE(m, block_ids);\n  }\n}\n\n#undef HistogramType\n"
  },
  {
    "path": "libs/brotli/enc/brotli_bit_stream.c",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Brotli bit stream functions to support the low level format. There are no\n   compression algorithms here, just the right ordering of bits to match the\n   specs. */\n\n#include \"brotli_bit_stream.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"entropy_encode.h\"\n#include \"entropy_encode_static.h\"\n#include \"fast_log.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n#include \"write_bits.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define MAX_HUFFMAN_TREE_SIZE (2 * BROTLI_NUM_COMMAND_SYMBOLS + 1)\n/* The maximum size of Huffman dictionary for distances assuming that\n   NPOSTFIX = 0 and NDIRECT = 0. */\n#define MAX_SIMPLE_DISTANCE_ALPHABET_SIZE \\\n  BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_LARGE_MAX_DISTANCE_BITS)\n/* MAX_SIMPLE_DISTANCE_ALPHABET_SIZE == 140 */\n\nstatic BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) {\n  uint32_t code = (len >= 177) ? (len >= 753 ? 20 : 14) : (len >= 41 ? 7 : 0);\n  while (code < (BROTLI_NUM_BLOCK_LEN_SYMBOLS - 1) &&\n      len >= _kBrotliPrefixCodeRanges[code + 1].offset) ++code;\n  return code;\n}\n\nstatic BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t* code,\n    uint32_t* n_extra, uint32_t* extra) {\n  *code = BlockLengthPrefixCode(len);\n  *n_extra = _kBrotliPrefixCodeRanges[*code].nbits;\n  *extra = len - _kBrotliPrefixCodeRanges[*code].offset;\n}\n\ntypedef struct BlockTypeCodeCalculator {\n  size_t last_type;\n  size_t second_last_type;\n} BlockTypeCodeCalculator;\n\nstatic void InitBlockTypeCodeCalculator(BlockTypeCodeCalculator* self) {\n  self->last_type = 1;\n  self->second_last_type = 0;\n}\n\nstatic BROTLI_INLINE size_t NextBlockTypeCode(\n    BlockTypeCodeCalculator* calculator, uint8_t type) {\n  size_t type_code = (type == calculator->last_type + 1) ? 1u :\n      (type == calculator->second_last_type) ? 0u : type + 2u;\n  calculator->second_last_type = calculator->last_type;\n  calculator->last_type = type;\n  return type_code;\n}\n\n/* |nibblesbits| represents the 2 bits to encode MNIBBLES (0-3)\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nstatic void BrotliEncodeMlen(size_t length, uint64_t* bits,\n                             size_t* numbits, uint64_t* nibblesbits) {\n  size_t lg = (length == 1) ? 1 : Log2FloorNonZero((uint32_t)(length - 1)) + 1;\n  size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4;\n  BROTLI_DCHECK(length > 0);\n  BROTLI_DCHECK(length <= (1 << 24));\n  BROTLI_DCHECK(lg <= 24);\n  *nibblesbits = mnibbles - 4;\n  *numbits = mnibbles * 4;\n  *bits = length - 1;\n}\n\nstatic BROTLI_INLINE void StoreCommandExtra(\n    const Command* cmd, size_t* storage_ix, uint8_t* storage) {\n  uint32_t copylen_code = CommandCopyLenCode(cmd);\n  uint16_t inscode = GetInsertLengthCode(cmd->insert_len_);\n  uint16_t copycode = GetCopyLengthCode(copylen_code);\n  uint32_t insnumextra = GetInsertExtra(inscode);\n  uint64_t insextraval = cmd->insert_len_ - GetInsertBase(inscode);\n  uint64_t copyextraval = copylen_code - GetCopyBase(copycode);\n  uint64_t bits = (copyextraval << insnumextra) | insextraval;\n  BrotliWriteBits(\n      insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage);\n}\n\n/* Data structure that stores almost everything that is needed to encode each\n   block switch command. */\ntypedef struct BlockSplitCode {\n  BlockTypeCodeCalculator type_code_calculator;\n  uint8_t type_depths[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];\n  uint16_t type_bits[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];\n  uint8_t length_depths[BROTLI_NUM_BLOCK_LEN_SYMBOLS];\n  uint16_t length_bits[BROTLI_NUM_BLOCK_LEN_SYMBOLS];\n} BlockSplitCode;\n\n/* Stores a number between 0 and 255. */\nstatic void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) {\n  if (n == 0) {\n    BrotliWriteBits(1, 0, storage_ix, storage);\n  } else {\n    size_t nbits = Log2FloorNonZero(n);\n    BrotliWriteBits(1, 1, storage_ix, storage);\n    BrotliWriteBits(3, nbits, storage_ix, storage);\n    BrotliWriteBits(nbits, n - ((size_t)1 << nbits), storage_ix, storage);\n  }\n}\n\n/* Stores the compressed meta-block header.\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nstatic void StoreCompressedMetaBlockHeader(BROTLI_BOOL is_final_block,\n                                           size_t length,\n                                           size_t* storage_ix,\n                                           uint8_t* storage) {\n  uint64_t lenbits;\n  size_t nlenbits;\n  uint64_t nibblesbits;\n\n  /* Write ISLAST bit. */\n  BrotliWriteBits(1, (uint64_t)is_final_block, storage_ix, storage);\n  /* Write ISEMPTY bit. */\n  if (is_final_block) {\n    BrotliWriteBits(1, 0, storage_ix, storage);\n  }\n\n  BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);\n  BrotliWriteBits(2, nibblesbits, storage_ix, storage);\n  BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);\n\n  if (!is_final_block) {\n    /* Write ISUNCOMPRESSED bit. */\n    BrotliWriteBits(1, 0, storage_ix, storage);\n  }\n}\n\n/* Stores the uncompressed meta-block header.\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nstatic void BrotliStoreUncompressedMetaBlockHeader(size_t length,\n                                                   size_t* storage_ix,\n                                                   uint8_t* storage) {\n  uint64_t lenbits;\n  size_t nlenbits;\n  uint64_t nibblesbits;\n\n  /* Write ISLAST bit.\n     Uncompressed block cannot be the last one, so set to 0. */\n  BrotliWriteBits(1, 0, storage_ix, storage);\n  BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);\n  BrotliWriteBits(2, nibblesbits, storage_ix, storage);\n  BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);\n  /* Write ISUNCOMPRESSED bit. */\n  BrotliWriteBits(1, 1, storage_ix, storage);\n}\n\nstatic void BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(\n    const int num_codes, const uint8_t* code_length_bitdepth,\n    size_t* storage_ix, uint8_t* storage) {\n  static const BROTLI_MODEL(\"small\")\n  uint8_t kStorageOrder[BROTLI_CODE_LENGTH_CODES] = {\n    1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15\n  };\n  /* The bit lengths of the Huffman code over the code length alphabet\n     are compressed with the following static Huffman code:\n       Symbol   Code\n       ------   ----\n       0          00\n       1        1110\n       2         110\n       3          01\n       4          10\n       5        1111 */\n  static const BROTLI_MODEL(\"small\")\n  uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] = {\n     0, 7, 3, 2, 1, 15\n  };\n  static const BROTLI_MODEL(\"small\")\n  uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] = {\n    2, 4, 3, 2, 2, 4\n  };\n\n  size_t skip_some = 0;  /* skips none. */\n\n  /* Throw away trailing zeros: */\n  size_t codes_to_store = BROTLI_CODE_LENGTH_CODES;\n  if (num_codes > 1) {\n    for (; codes_to_store > 0; --codes_to_store) {\n      if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) {\n        break;\n      }\n    }\n  }\n  if (code_length_bitdepth[kStorageOrder[0]] == 0 &&\n      code_length_bitdepth[kStorageOrder[1]] == 0) {\n    skip_some = 2;  /* skips two. */\n    if (code_length_bitdepth[kStorageOrder[2]] == 0) {\n      skip_some = 3;  /* skips three. */\n    }\n  }\n  BrotliWriteBits(2, skip_some, storage_ix, storage);\n  {\n    size_t i;\n    for (i = skip_some; i < codes_to_store; ++i) {\n      size_t l = code_length_bitdepth[kStorageOrder[i]];\n      BrotliWriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l],\n          kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage);\n    }\n  }\n}\n\nstatic void BrotliStoreHuffmanTreeToBitMask(\n    const size_t huffman_tree_size, const uint8_t* huffman_tree,\n    const uint8_t* huffman_tree_extra_bits, const uint8_t* code_length_bitdepth,\n    const uint16_t* code_length_bitdepth_symbols,\n    size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage) {\n  size_t i;\n  for (i = 0; i < huffman_tree_size; ++i) {\n    size_t ix = huffman_tree[i];\n    BrotliWriteBits(code_length_bitdepth[ix], code_length_bitdepth_symbols[ix],\n                    storage_ix, storage);\n    /* Extra bits */\n    switch (ix) {\n      case BROTLI_REPEAT_PREVIOUS_CODE_LENGTH:\n        BrotliWriteBits(2, huffman_tree_extra_bits[i], storage_ix, storage);\n        break;\n      case BROTLI_REPEAT_ZERO_CODE_LENGTH:\n        BrotliWriteBits(3, huffman_tree_extra_bits[i], storage_ix, storage);\n        break;\n    }\n  }\n}\n\nstatic void StoreSimpleHuffmanTree(const uint8_t* depths,\n                                   size_t symbols[4],\n                                   size_t num_symbols,\n                                   size_t max_bits,\n                                   size_t* storage_ix, uint8_t* storage) {\n  /* value of 1 indicates a simple Huffman code */\n  BrotliWriteBits(2, 1, storage_ix, storage);\n  BrotliWriteBits(2, num_symbols - 1, storage_ix, storage);  /* NSYM - 1 */\n\n  {\n    /* Sort */\n    size_t i;\n    for (i = 0; i < num_symbols; i++) {\n      size_t j;\n      for (j = i + 1; j < num_symbols; j++) {\n        if (depths[symbols[j]] < depths[symbols[i]]) {\n          BROTLI_SWAP(size_t, symbols, j, i);\n        }\n      }\n    }\n  }\n\n  if (num_symbols == 2) {\n    BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n  } else if (num_symbols == 3) {\n    BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);\n  } else {\n    BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);\n    /* tree-select */\n    BrotliWriteBits(1, depths[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);\n  }\n}\n\n/* num = alphabet size\n   depths = symbol depths */\nvoid BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,\n                            HuffmanTree* tree,\n                            size_t* storage_ix, uint8_t* storage) {\n  /* Write the Huffman tree into the brotli-representation.\n     The command alphabet is the largest, so this allocation will fit all\n     alphabets. */\n  /* TODO(eustas): fix me */\n  uint8_t huffman_tree[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint8_t huffman_tree_extra_bits[BROTLI_NUM_COMMAND_SYMBOLS];\n  size_t huffman_tree_size = 0;\n  uint8_t code_length_bitdepth[BROTLI_CODE_LENGTH_CODES] = { 0 };\n  uint16_t code_length_bitdepth_symbols[BROTLI_CODE_LENGTH_CODES];\n  uint32_t huffman_tree_histogram[BROTLI_CODE_LENGTH_CODES] = { 0 };\n  size_t i;\n  int num_codes = 0;\n  size_t code = 0;\n\n  BROTLI_DCHECK(num <= BROTLI_NUM_COMMAND_SYMBOLS);\n\n  BrotliWriteHuffmanTree(depths, num, &huffman_tree_size, huffman_tree,\n                         huffman_tree_extra_bits);\n\n  /* Calculate the statistics of the Huffman tree in brotli-representation. */\n  for (i = 0; i < huffman_tree_size; ++i) {\n    ++huffman_tree_histogram[huffman_tree[i]];\n  }\n\n  for (i = 0; i < BROTLI_CODE_LENGTH_CODES; ++i) {\n    if (huffman_tree_histogram[i]) {\n      if (num_codes == 0) {\n        code = i;\n        num_codes = 1;\n      } else if (num_codes == 1) {\n        num_codes = 2;\n        break;\n      }\n    }\n  }\n\n  /* Calculate another Huffman tree to use for compressing both the\n     earlier Huffman tree with. */\n  BrotliCreateHuffmanTree(huffman_tree_histogram, BROTLI_CODE_LENGTH_CODES,\n                          5, tree, code_length_bitdepth);\n  BrotliConvertBitDepthsToSymbols(code_length_bitdepth,\n                                  BROTLI_CODE_LENGTH_CODES,\n                                  code_length_bitdepth_symbols);\n\n  /* Now, we have all the data, let's start storing it */\n  BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bitdepth,\n                                               storage_ix, storage);\n\n  if (num_codes == 1) {\n    code_length_bitdepth[code] = 0;\n  }\n\n  /* Store the real Huffman tree now. */\n  BrotliStoreHuffmanTreeToBitMask(huffman_tree_size,\n                                  huffman_tree,\n                                  huffman_tree_extra_bits,\n                                  code_length_bitdepth,\n                                  code_length_bitdepth_symbols,\n                                  storage_ix, storage);\n}\n\n/* Builds a Huffman tree from histogram[0:length] into depth[0:length] and\n   bits[0:length] and stores the encoded tree to the bit stream. */\nstatic void BuildAndStoreHuffmanTree(const uint32_t* histogram,\n                                     const size_t histogram_length,\n                                     const size_t alphabet_size,\n                                     HuffmanTree* tree,\n                                     uint8_t* depth,\n                                     uint16_t* bits,\n                                     size_t* storage_ix,\n                                     uint8_t* storage) {\n  size_t count = 0;\n  size_t s4[4] = { 0 };\n  size_t i;\n  size_t max_bits = 0;\n  for (i = 0; i < histogram_length; i++) {\n    if (histogram[i]) {\n      if (count < 4) {\n        s4[count] = i;\n      } else if (count > 4) {\n        break;\n      }\n      count++;\n    }\n  }\n\n  {\n    size_t max_bits_counter = alphabet_size - 1;\n    while (max_bits_counter) {\n      max_bits_counter >>= 1;\n      ++max_bits;\n    }\n  }\n\n  if (count <= 1) {\n    BrotliWriteBits(4, 1, storage_ix, storage);\n    BrotliWriteBits(max_bits, s4[0], storage_ix, storage);\n    depth[s4[0]] = 0;\n    bits[s4[0]] = 0;\n    return;\n  }\n\n  memset(depth, 0, histogram_length * sizeof(depth[0]));\n  BrotliCreateHuffmanTree(histogram, histogram_length, 15, tree, depth);\n  BrotliConvertBitDepthsToSymbols(depth, histogram_length, bits);\n\n  if (count <= 4) {\n    StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storage);\n  } else {\n    BrotliStoreHuffmanTree(depth, histogram_length, tree, storage_ix, storage);\n  }\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(\n    const HuffmanTree* v0, const HuffmanTree* v1) {\n  return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);\n}\n\nvoid BrotliBuildAndStoreHuffmanTreeFast(HuffmanTree* tree,\n                                        const uint32_t* histogram,\n                                        const size_t histogram_total,\n                                        const size_t max_bits,\n                                        uint8_t* depth, uint16_t* bits,\n                                        size_t* storage_ix,\n                                        uint8_t* storage) {\n  size_t count = 0;\n  size_t symbols[4] = { 0 };\n  size_t length = 0;\n  size_t total = histogram_total;\n  while (total != 0) {\n    if (histogram[length]) {\n      if (count < 4) {\n        symbols[count] = length;\n      }\n      ++count;\n      total -= histogram[length];\n    }\n    ++length;\n  }\n\n  if (count <= 1) {\n    BrotliWriteBits(4, 1, storage_ix, storage);\n    BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n    depth[symbols[0]] = 0;\n    bits[symbols[0]] = 0;\n    return;\n  }\n\n  memset(depth, 0, length * sizeof(depth[0]));\n  {\n    uint32_t count_limit;\n    for (count_limit = 1; ; count_limit *= 2) {\n      HuffmanTree* node = tree;\n      size_t l;\n      for (l = length; l != 0;) {\n        --l;\n        if (histogram[l]) {\n          if (BROTLI_PREDICT_TRUE(histogram[l] >= count_limit)) {\n            InitHuffmanTree(node, histogram[l], -1, (int16_t)l);\n          } else {\n            InitHuffmanTree(node, count_limit, -1, (int16_t)l);\n          }\n          ++node;\n        }\n      }\n      {\n        const int n = (int)(node - tree);\n        HuffmanTree sentinel;\n        int i = 0;      /* Points to the next leaf node. */\n        int j = n + 1;  /* Points to the next non-leaf node. */\n        int k;\n\n        SortHuffmanTreeItems(tree, (size_t)n, SortHuffmanTree);\n        /* The nodes are:\n           [0, n): the sorted leaf nodes that we start with.\n           [n]: we add a sentinel here.\n           [n + 1, 2n): new parent nodes are added here, starting from\n                        (n+1). These are naturally in ascending order.\n           [2n]: we add a sentinel at the end as well.\n           There will be (2n+1) elements at the end. */\n        InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);\n        *node++ = sentinel;\n        *node++ = sentinel;\n\n        for (k = n - 1; k > 0; --k) {\n          int left, right;\n          if (tree[i].total_count_ <= tree[j].total_count_) {\n            left = i;\n            ++i;\n          } else {\n            left = j;\n            ++j;\n          }\n          if (tree[i].total_count_ <= tree[j].total_count_) {\n            right = i;\n            ++i;\n          } else {\n            right = j;\n            ++j;\n          }\n          /* The sentinel node becomes the parent node. */\n          node[-1].total_count_ =\n              tree[left].total_count_ + tree[right].total_count_;\n          node[-1].index_left_ = (int16_t)left;\n          node[-1].index_right_or_value_ = (int16_t)right;\n          /* Add back the last sentinel node. */\n          *node++ = sentinel;\n        }\n        if (BrotliSetDepth(2 * n - 1, tree, depth, 14)) {\n          /* We need to pack the Huffman tree in 14 bits. If this was not\n             successful, add fake entities to the lowest values and retry. */\n          break;\n        }\n      }\n    }\n  }\n  BrotliConvertBitDepthsToSymbols(depth, length, bits);\n  if (count <= 4) {\n    size_t i;\n    /* value of 1 indicates a simple Huffman code */\n    BrotliWriteBits(2, 1, storage_ix, storage);\n    BrotliWriteBits(2, count - 1, storage_ix, storage);  /* NSYM - 1 */\n\n    /* Sort */\n    for (i = 0; i < count; i++) {\n      size_t j;\n      for (j = i + 1; j < count; j++) {\n        if (depth[symbols[j]] < depth[symbols[i]]) {\n          BROTLI_SWAP(size_t, symbols, j, i);\n        }\n      }\n    }\n\n    if (count == 2) {\n      BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n    } else if (count == 3) {\n      BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);\n    } else {\n      BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);\n      BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);\n      /* tree-select */\n      BrotliWriteBits(1, depth[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);\n    }\n  } else {\n    uint8_t previous_value = 8;\n    size_t i;\n    /* Complex Huffman Tree */\n    StoreStaticCodeLengthCode(storage_ix, storage);\n\n    /* Actual RLE coding. */\n    for (i = 0; i < length;) {\n      const uint8_t value = depth[i];\n      size_t reps = 1;\n      size_t k;\n      for (k = i + 1; k < length && depth[k] == value; ++k) {\n        ++reps;\n      }\n      i += reps;\n      if (value == 0) {\n        BrotliWriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps],\n                        storage_ix, storage);\n      } else {\n        if (previous_value != value) {\n          BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],\n                          storage_ix, storage);\n          --reps;\n        }\n        if (reps < 3) {\n          while (reps != 0) {\n            reps--;\n            BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],\n                            storage_ix, storage);\n          }\n        } else {\n          reps -= 3;\n          BrotliWriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps],\n                          storage_ix, storage);\n        }\n        previous_value = value;\n      }\n    }\n  }\n}\n\nstatic size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) {\n  size_t i = 0;\n  for (; i < v_size; ++i) {\n    if (v[i] == value) return i;\n  }\n  return i;\n}\n\nstatic void MoveToFront(uint8_t* v, size_t index) {\n  uint8_t value = v[index];\n  size_t i;\n  for (i = index; i != 0; --i) {\n    v[i] = v[i - 1];\n  }\n  v[0] = value;\n}\n\nstatic void MoveToFrontTransform(const uint32_t* BROTLI_RESTRICT v_in,\n                                 const size_t v_size,\n                                 uint32_t* v_out) {\n  size_t i;\n  uint8_t mtf[256];\n  uint32_t max_value;\n  if (v_size == 0) {\n    return;\n  }\n  max_value = v_in[0];\n  for (i = 1; i < v_size; ++i) {\n    if (v_in[i] > max_value) max_value = v_in[i];\n  }\n  BROTLI_DCHECK(max_value < 256u);\n  for (i = 0; i <= max_value; ++i) {\n    mtf[i] = (uint8_t)i;\n  }\n  {\n    size_t mtf_size = max_value + 1;\n    for (i = 0; i < v_size; ++i) {\n      size_t index = IndexOf(mtf, mtf_size, (uint8_t)v_in[i]);\n      BROTLI_DCHECK(index < mtf_size);\n      v_out[i] = (uint32_t)index;\n      MoveToFront(mtf, index);\n    }\n  }\n}\n\n/* Finds runs of zeros in v[0..in_size) and replaces them with a prefix code of\n   the run length plus extra bits (lower 9 bits is the prefix code and the rest\n   are the extra bits). Non-zero values in v[] are shifted by\n   *max_length_prefix. Will not create prefix codes bigger than the initial\n   value of *max_run_length_prefix. The prefix code of run length L is simply\n   Log2Floor(L) and the number of extra bits is the same as the prefix code. */\nstatic void RunLengthCodeZeros(const size_t in_size,\n    uint32_t* BROTLI_RESTRICT v, size_t* BROTLI_RESTRICT out_size,\n    uint32_t* BROTLI_RESTRICT max_run_length_prefix) {\n  uint32_t max_reps = 0;\n  size_t i;\n  uint32_t max_prefix;\n  for (i = 0; i < in_size;) {\n    uint32_t reps = 0;\n    for (; i < in_size && v[i] != 0; ++i) ;\n    for (; i < in_size && v[i] == 0; ++i) {\n      ++reps;\n    }\n    max_reps = BROTLI_MAX(uint32_t, reps, max_reps);\n  }\n  max_prefix = max_reps > 0 ? Log2FloorNonZero(max_reps) : 0;\n  max_prefix = BROTLI_MIN(uint32_t, max_prefix, *max_run_length_prefix);\n  *max_run_length_prefix = max_prefix;\n  *out_size = 0;\n  for (i = 0; i < in_size;) {\n    BROTLI_DCHECK(*out_size <= i);\n    if (v[i] != 0) {\n      v[*out_size] = v[i] + *max_run_length_prefix;\n      ++i;\n      ++(*out_size);\n    } else {\n      uint32_t reps = 1;\n      size_t k;\n      for (k = i + 1; k < in_size && v[k] == 0; ++k) {\n        ++reps;\n      }\n      i += reps;\n      while (reps != 0) {\n        if (reps < (2u << max_prefix)) {\n          uint32_t run_length_prefix = Log2FloorNonZero(reps);\n          const uint32_t extra_bits = reps - (1u << run_length_prefix);\n          v[*out_size] = run_length_prefix + (extra_bits << 9);\n          ++(*out_size);\n          break;\n        } else {\n          const uint32_t extra_bits = (1u << max_prefix) - 1u;\n          v[*out_size] = max_prefix + (extra_bits << 9);\n          reps -= (2u << max_prefix) - 1u;\n          ++(*out_size);\n        }\n      }\n    }\n  }\n}\n\n#define SYMBOL_BITS 9\n\ntypedef struct EncodeContextMapArena {\n  uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];\n  uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];\n  uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];\n} EncodeContextMapArena;\n\nstatic void EncodeContextMap(MemoryManager* m,\n                             EncodeContextMapArena* arena,\n                             const uint32_t* context_map,\n                             size_t context_map_size,\n                             size_t num_clusters,\n                             HuffmanTree* tree,\n                             size_t* storage_ix, uint8_t* storage) {\n  size_t i;\n  uint32_t* rle_symbols;\n  uint32_t max_run_length_prefix = 6;\n  size_t num_rle_symbols = 0;\n  uint32_t* BROTLI_RESTRICT const histogram = arena->histogram;\n  static const uint32_t kSymbolMask = (1u << SYMBOL_BITS) - 1u;\n  uint8_t* BROTLI_RESTRICT const depths = arena->depths;\n  uint16_t* BROTLI_RESTRICT const bits = arena->bits;\n\n  StoreVarLenUint8(num_clusters - 1, storage_ix, storage);\n\n  if (num_clusters == 1) {\n    return;\n  }\n\n  rle_symbols = BROTLI_ALLOC(m, uint32_t, context_map_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(rle_symbols)) return;\n  MoveToFrontTransform(context_map, context_map_size, rle_symbols);\n  RunLengthCodeZeros(context_map_size, rle_symbols,\n                     &num_rle_symbols, &max_run_length_prefix);\n  memset(histogram, 0, sizeof(arena->histogram));\n  for (i = 0; i < num_rle_symbols; ++i) {\n    ++histogram[rle_symbols[i] & kSymbolMask];\n  }\n  {\n    BROTLI_BOOL use_rle = TO_BROTLI_BOOL(max_run_length_prefix > 0);\n    BrotliWriteBits(1, (uint64_t)use_rle, storage_ix, storage);\n    if (use_rle) {\n      BrotliWriteBits(4, max_run_length_prefix - 1, storage_ix, storage);\n    }\n  }\n  BuildAndStoreHuffmanTree(histogram, num_clusters + max_run_length_prefix,\n                           num_clusters + max_run_length_prefix,\n                           tree, depths, bits, storage_ix, storage);\n  for (i = 0; i < num_rle_symbols; ++i) {\n    const uint32_t rle_symbol = rle_symbols[i] & kSymbolMask;\n    const uint32_t extra_bits_val = rle_symbols[i] >> SYMBOL_BITS;\n    BrotliWriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, storage);\n    if (rle_symbol > 0 && rle_symbol <= max_run_length_prefix) {\n      BrotliWriteBits(rle_symbol, extra_bits_val, storage_ix, storage);\n    }\n  }\n  BrotliWriteBits(1, 1, storage_ix, storage);  /* use move-to-front */\n  BROTLI_FREE(m, rle_symbols);\n}\n\n/* Stores the block switch command with index block_ix to the bit stream. */\nstatic BROTLI_INLINE void StoreBlockSwitch(BlockSplitCode* code,\n                                           const uint32_t block_len,\n                                           const uint8_t block_type,\n                                           BROTLI_BOOL is_first_block,\n                                           size_t* storage_ix,\n                                           uint8_t* storage) {\n  size_t typecode = NextBlockTypeCode(&code->type_code_calculator, block_type);\n  size_t lencode;\n  uint32_t len_nextra;\n  uint32_t len_extra;\n  if (!is_first_block) {\n    BrotliWriteBits(code->type_depths[typecode], code->type_bits[typecode],\n                    storage_ix, storage);\n  }\n  GetBlockLengthPrefixCode(block_len, &lencode, &len_nextra, &len_extra);\n\n  BrotliWriteBits(code->length_depths[lencode], code->length_bits[lencode],\n                  storage_ix, storage);\n  BrotliWriteBits(len_nextra, len_extra, storage_ix, storage);\n}\n\n/* Builds a BlockSplitCode data structure from the block split given by the\n   vector of block types and block lengths and stores it to the bit stream. */\nstatic void BuildAndStoreBlockSplitCode(const uint8_t* types,\n                                        const uint32_t* lengths,\n                                        const size_t num_blocks,\n                                        const size_t num_types,\n                                        HuffmanTree* tree,\n                                        BlockSplitCode* code,\n                                        size_t* storage_ix,\n                                        uint8_t* storage) {\n  uint32_t type_histo[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];\n  uint32_t length_histo[BROTLI_NUM_BLOCK_LEN_SYMBOLS];\n  size_t i;\n  BlockTypeCodeCalculator type_code_calculator;\n  memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0]));\n  memset(length_histo, 0, sizeof(length_histo));\n  InitBlockTypeCodeCalculator(&type_code_calculator);\n  for (i = 0; i < num_blocks; ++i) {\n    size_t type_code = NextBlockTypeCode(&type_code_calculator, types[i]);\n    if (i != 0) ++type_histo[type_code];\n    ++length_histo[BlockLengthPrefixCode(lengths[i])];\n  }\n  StoreVarLenUint8(num_types - 1, storage_ix, storage);\n  if (num_types > 1) {  /* TODO(eustas): else? could StoreBlockSwitch occur? */\n    BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, num_types + 2, tree,\n                             &code->type_depths[0], &code->type_bits[0],\n                             storage_ix, storage);\n    BuildAndStoreHuffmanTree(&length_histo[0], BROTLI_NUM_BLOCK_LEN_SYMBOLS,\n                             BROTLI_NUM_BLOCK_LEN_SYMBOLS,\n                             tree, &code->length_depths[0],\n                             &code->length_bits[0], storage_ix, storage);\n    StoreBlockSwitch(code, lengths[0], types[0], 1, storage_ix, storage);\n  }\n}\n\n/* Stores a context map where the histogram type is always the block type. */\nstatic void StoreTrivialContextMap(EncodeContextMapArena* arena,\n                                   size_t num_types,\n                                   size_t context_bits,\n                                   HuffmanTree* tree,\n                                   size_t* storage_ix,\n                                   uint8_t* storage) {\n  StoreVarLenUint8(num_types - 1, storage_ix, storage);\n  if (num_types > 1) {\n    size_t repeat_code = context_bits - 1u;\n    size_t repeat_bits = (1u << repeat_code) - 1u;\n    size_t alphabet_size = num_types + repeat_code;\n    uint32_t* BROTLI_RESTRICT const histogram = arena->histogram;\n    uint8_t* BROTLI_RESTRICT const depths = arena->depths;\n    uint16_t* BROTLI_RESTRICT const bits = arena->bits;\n    size_t i;\n    memset(histogram, 0, alphabet_size * sizeof(histogram[0]));\n    /* Write RLEMAX. */\n    BrotliWriteBits(1, 1, storage_ix, storage);\n    BrotliWriteBits(4, repeat_code - 1, storage_ix, storage);\n    histogram[repeat_code] = (uint32_t)num_types;\n    histogram[0] = 1;\n    for (i = context_bits; i < alphabet_size; ++i) {\n      histogram[i] = 1;\n    }\n    BuildAndStoreHuffmanTree(histogram, alphabet_size, alphabet_size,\n                             tree, depths, bits, storage_ix, storage);\n    for (i = 0; i < num_types; ++i) {\n      size_t code = (i == 0 ? 0 : i + context_bits - 1);\n      BrotliWriteBits(depths[code], bits[code], storage_ix, storage);\n      BrotliWriteBits(\n          depths[repeat_code], bits[repeat_code], storage_ix, storage);\n      BrotliWriteBits(repeat_code, repeat_bits, storage_ix, storage);\n    }\n    /* Write IMTF (inverse-move-to-front) bit. */\n    BrotliWriteBits(1, 1, storage_ix, storage);\n  }\n}\n\n/* Manages the encoding of one block category (literal, command or distance). */\ntypedef struct BlockEncoder {\n  size_t histogram_length_;\n  size_t num_block_types_;\n  const uint8_t* block_types_;  /* Not owned. */\n  const uint32_t* block_lengths_;  /* Not owned. */\n  size_t num_blocks_;\n  BlockSplitCode block_split_code_;\n  size_t block_ix_;\n  size_t block_len_;\n  size_t entropy_ix_;\n  uint8_t* depths_;\n  uint16_t* bits_;\n} BlockEncoder;\n\nstatic void InitBlockEncoder(BlockEncoder* self, size_t histogram_length,\n    size_t num_block_types, const uint8_t* block_types,\n    const uint32_t* block_lengths, const size_t num_blocks) {\n  self->histogram_length_ = histogram_length;\n  self->num_block_types_ = num_block_types;\n  self->block_types_ = block_types;\n  self->block_lengths_ = block_lengths;\n  self->num_blocks_ = num_blocks;\n  InitBlockTypeCodeCalculator(&self->block_split_code_.type_code_calculator);\n  self->block_ix_ = 0;\n  self->block_len_ = num_blocks == 0 ? 0 : block_lengths[0];\n  self->entropy_ix_ = 0;\n  self->depths_ = 0;\n  self->bits_ = 0;\n}\n\nstatic void CleanupBlockEncoder(MemoryManager* m, BlockEncoder* self) {\n  BROTLI_FREE(m, self->depths_);\n  BROTLI_FREE(m, self->bits_);\n}\n\n/* Creates entropy codes of block lengths and block types and stores them\n   to the bit stream. */\nstatic void BuildAndStoreBlockSwitchEntropyCodes(BlockEncoder* self,\n    HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) {\n  BuildAndStoreBlockSplitCode(self->block_types_, self->block_lengths_,\n      self->num_blocks_, self->num_block_types_, tree, &self->block_split_code_,\n      storage_ix, storage);\n}\n\n/* Stores the next symbol with the entropy code of the current block type.\n   Updates the block type and block length at block boundaries. */\nstatic void StoreSymbol(BlockEncoder* self, size_t symbol, size_t* storage_ix,\n    uint8_t* storage) {\n  if (self->block_len_ == 0) {\n    size_t block_ix = ++self->block_ix_;\n    uint32_t block_len = self->block_lengths_[block_ix];\n    uint8_t block_type = self->block_types_[block_ix];\n    self->block_len_ = block_len;\n    self->entropy_ix_ = block_type * self->histogram_length_;\n    StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,\n        storage_ix, storage);\n  }\n  --self->block_len_;\n  {\n    size_t ix = self->entropy_ix_ + symbol;\n    BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);\n  }\n}\n\n/* Stores the next symbol with the entropy code of the current block type and\n   context value.\n   Updates the block type and block length at block boundaries. */\nstatic void StoreSymbolWithContext(BlockEncoder* self, size_t symbol,\n    size_t context, const uint32_t* context_map, size_t* storage_ix,\n    uint8_t* storage, const size_t context_bits) {\n  if (self->block_len_ == 0) {\n    size_t block_ix = ++self->block_ix_;\n    uint32_t block_len = self->block_lengths_[block_ix];\n    uint8_t block_type = self->block_types_[block_ix];\n    self->block_len_ = block_len;\n    self->entropy_ix_ = (size_t)block_type << context_bits;\n    StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,\n        storage_ix, storage);\n  }\n  --self->block_len_;\n  {\n    size_t histo_ix = context_map[self->entropy_ix_ + context];\n    size_t ix = histo_ix * self->histogram_length_ + symbol;\n    BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);\n  }\n}\n\n#define FN(X) X ## Literal\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_encoder_inc.h\"\n#undef FN\n\n#define FN(X) X ## Command\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_encoder_inc.h\"\n#undef FN\n\n#define FN(X) X ## Distance\n/* NOLINTNEXTLINE(build/include) */\n#include \"block_encoder_inc.h\"\n#undef FN\n\nstatic void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) {\n  *storage_ix = (*storage_ix + 7u) & ~7u;\n  storage[*storage_ix >> 3] = 0;\n}\n\ntypedef struct StoreMetablockArena {\n  BlockEncoder literal_enc;\n  BlockEncoder command_enc;\n  BlockEncoder distance_enc;\n  EncodeContextMapArena context_map_arena;\n} StoreMetablockArena;\n\nvoid BrotliStoreMetaBlock(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,\n    const BrotliEncoderParams* params, ContextType literal_context_mode,\n    const Command* commands, size_t n_commands, const MetaBlockSplit* mb,\n    size_t* storage_ix, uint8_t* storage) {\n\n  size_t pos = start_pos;\n  size_t i;\n  uint32_t num_distance_symbols = params->dist.alphabet_size_max;\n  uint32_t num_effective_distance_symbols = params->dist.alphabet_size_limit;\n  HuffmanTree* tree;\n  ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);\n  StoreMetablockArena* arena = NULL;\n  BlockEncoder* literal_enc = NULL;\n  BlockEncoder* command_enc = NULL;\n  BlockEncoder* distance_enc = NULL;\n  const BrotliDistanceParams* dist = &params->dist;\n  BROTLI_DCHECK(\n      num_effective_distance_symbols <= BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS);\n\n  StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);\n\n  tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);\n  arena = BROTLI_ALLOC(m, StoreMetablockArena, 1);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tree) || BROTLI_IS_NULL(arena)) return;\n  literal_enc = &arena->literal_enc;\n  command_enc = &arena->command_enc;\n  distance_enc = &arena->distance_enc;\n  InitBlockEncoder(literal_enc, BROTLI_NUM_LITERAL_SYMBOLS,\n      mb->literal_split.num_types, mb->literal_split.types,\n      mb->literal_split.lengths, mb->literal_split.num_blocks);\n  InitBlockEncoder(command_enc, BROTLI_NUM_COMMAND_SYMBOLS,\n      mb->command_split.num_types, mb->command_split.types,\n      mb->command_split.lengths, mb->command_split.num_blocks);\n  InitBlockEncoder(distance_enc, num_effective_distance_symbols,\n      mb->distance_split.num_types, mb->distance_split.types,\n      mb->distance_split.lengths, mb->distance_split.num_blocks);\n\n  BuildAndStoreBlockSwitchEntropyCodes(literal_enc, tree, storage_ix, storage);\n  BuildAndStoreBlockSwitchEntropyCodes(command_enc, tree, storage_ix, storage);\n  BuildAndStoreBlockSwitchEntropyCodes(distance_enc, tree, storage_ix, storage);\n\n  BrotliWriteBits(2, dist->distance_postfix_bits, storage_ix, storage);\n  BrotliWriteBits(\n      4, dist->num_direct_distance_codes >> dist->distance_postfix_bits,\n      storage_ix, storage);\n  for (i = 0; i < mb->literal_split.num_types; ++i) {\n    BrotliWriteBits(2, literal_context_mode, storage_ix, storage);\n  }\n\n  if (mb->literal_context_map_size == 0) {\n    StoreTrivialContextMap(\n        &arena->context_map_arena, mb->literal_histograms_size,\n        BROTLI_LITERAL_CONTEXT_BITS, tree, storage_ix, storage);\n  } else {\n    EncodeContextMap(m, &arena->context_map_arena,\n        mb->literal_context_map, mb->literal_context_map_size,\n        mb->literal_histograms_size, tree, storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return;\n  }\n\n  if (mb->distance_context_map_size == 0) {\n    StoreTrivialContextMap(\n        &arena->context_map_arena, mb->distance_histograms_size,\n        BROTLI_DISTANCE_CONTEXT_BITS, tree, storage_ix, storage);\n  } else {\n    EncodeContextMap(m, &arena->context_map_arena,\n        mb->distance_context_map, mb->distance_context_map_size,\n        mb->distance_histograms_size, tree, storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return;\n  }\n\n  BuildAndStoreEntropyCodesLiteral(m, literal_enc, mb->literal_histograms,\n      mb->literal_histograms_size, BROTLI_NUM_LITERAL_SYMBOLS, tree,\n      storage_ix, storage);\n  if (BROTLI_IS_OOM(m)) return;\n  BuildAndStoreEntropyCodesCommand(m, command_enc, mb->command_histograms,\n      mb->command_histograms_size, BROTLI_NUM_COMMAND_SYMBOLS, tree,\n      storage_ix, storage);\n  if (BROTLI_IS_OOM(m)) return;\n  BuildAndStoreEntropyCodesDistance(m, distance_enc, mb->distance_histograms,\n      mb->distance_histograms_size, num_distance_symbols, tree,\n      storage_ix, storage);\n  if (BROTLI_IS_OOM(m)) return;\n  BROTLI_FREE(m, tree);\n\n  for (i = 0; i < n_commands; ++i) {\n    const Command cmd = commands[i];\n    size_t cmd_code = cmd.cmd_prefix_;\n    StoreSymbol(command_enc, cmd_code, storage_ix, storage);\n    StoreCommandExtra(&cmd, storage_ix, storage);\n    if (mb->literal_context_map_size == 0) {\n      size_t j;\n      for (j = cmd.insert_len_; j != 0; --j) {\n        StoreSymbol(literal_enc, input[pos & mask], storage_ix, storage);\n        ++pos;\n      }\n    } else {\n      size_t j;\n      for (j = cmd.insert_len_; j != 0; --j) {\n        size_t context =\n            BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);\n        uint8_t literal = input[pos & mask];\n        StoreSymbolWithContext(literal_enc, literal, context,\n            mb->literal_context_map, storage_ix, storage,\n            BROTLI_LITERAL_CONTEXT_BITS);\n        prev_byte2 = prev_byte;\n        prev_byte = literal;\n        ++pos;\n      }\n    }\n    pos += CommandCopyLen(&cmd);\n    if (CommandCopyLen(&cmd)) {\n      prev_byte2 = input[(pos - 2) & mask];\n      prev_byte = input[(pos - 1) & mask];\n      if (cmd.cmd_prefix_ >= 128) {\n        size_t dist_code = cmd.dist_prefix_ & 0x3FF;\n        uint32_t distnumextra = cmd.dist_prefix_ >> 10;\n        uint64_t distextra = cmd.dist_extra_;\n        if (mb->distance_context_map_size == 0) {\n          StoreSymbol(distance_enc, dist_code, storage_ix, storage);\n        } else {\n          size_t context = CommandDistanceContext(&cmd);\n          StoreSymbolWithContext(distance_enc, dist_code, context,\n              mb->distance_context_map, storage_ix, storage,\n              BROTLI_DISTANCE_CONTEXT_BITS);\n        }\n        BrotliWriteBits(distnumextra, distextra, storage_ix, storage);\n      }\n    }\n  }\n  CleanupBlockEncoder(m, distance_enc);\n  CleanupBlockEncoder(m, command_enc);\n  CleanupBlockEncoder(m, literal_enc);\n  BROTLI_FREE(m, arena);\n  if (is_last) {\n    JumpToByteBoundary(storage_ix, storage);\n  }\n}\n\nstatic void BuildHistograms(const uint8_t* input,\n                            size_t start_pos,\n                            size_t mask,\n                            const Command* commands,\n                            size_t n_commands,\n                            HistogramLiteral* lit_histo,\n                            HistogramCommand* cmd_histo,\n                            HistogramDistance* dist_histo) {\n  size_t pos = start_pos;\n  size_t i;\n  for (i = 0; i < n_commands; ++i) {\n    const Command cmd = commands[i];\n    size_t j;\n    HistogramAddCommand(cmd_histo, cmd.cmd_prefix_);\n    for (j = cmd.insert_len_; j != 0; --j) {\n      HistogramAddLiteral(lit_histo, input[pos & mask]);\n      ++pos;\n    }\n    pos += CommandCopyLen(&cmd);\n    if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {\n      HistogramAddDistance(dist_histo, cmd.dist_prefix_ & 0x3FF);\n    }\n  }\n}\n\nstatic void StoreDataWithHuffmanCodes(const uint8_t* input,\n                                      size_t start_pos,\n                                      size_t mask,\n                                      const Command* commands,\n                                      size_t n_commands,\n                                      const uint8_t* lit_depth,\n                                      const uint16_t* lit_bits,\n                                      const uint8_t* cmd_depth,\n                                      const uint16_t* cmd_bits,\n                                      const uint8_t* dist_depth,\n                                      const uint16_t* dist_bits,\n                                      size_t* storage_ix,\n                                      uint8_t* storage) {\n  size_t pos = start_pos;\n  size_t i;\n  for (i = 0; i < n_commands; ++i) {\n    const Command cmd = commands[i];\n    const size_t cmd_code = cmd.cmd_prefix_;\n    size_t j;\n    BrotliWriteBits(\n        cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage);\n    StoreCommandExtra(&cmd, storage_ix, storage);\n    for (j = cmd.insert_len_; j != 0; --j) {\n      const uint8_t literal = input[pos & mask];\n      BrotliWriteBits(\n          lit_depth[literal], lit_bits[literal], storage_ix, storage);\n      ++pos;\n    }\n    pos += CommandCopyLen(&cmd);\n    if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {\n      const size_t dist_code = cmd.dist_prefix_ & 0x3FF;\n      const uint32_t distnumextra = cmd.dist_prefix_ >> 10;\n      const uint32_t distextra = cmd.dist_extra_;\n      BrotliWriteBits(dist_depth[dist_code], dist_bits[dist_code],\n                      storage_ix, storage);\n      BrotliWriteBits(distnumextra, distextra, storage_ix, storage);\n    }\n  }\n}\n\n/* TODO(eustas): pull alloc/dealloc to caller? */\ntypedef struct MetablockArena {\n  HistogramLiteral lit_histo;\n  HistogramCommand cmd_histo;\n  HistogramDistance dist_histo;\n  /* TODO(eustas): merge bits and depth? */\n  uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];\n  uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];\n  uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];\n  uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];\n  HuffmanTree tree[MAX_HUFFMAN_TREE_SIZE];\n} MetablockArena;\n\nvoid BrotliStoreMetaBlockTrivial(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    BROTLI_BOOL is_last, const BrotliEncoderParams* params,\n    const Command* commands, size_t n_commands,\n    size_t* storage_ix, uint8_t* storage) {\n  MetablockArena* arena = BROTLI_ALLOC(m, MetablockArena, 1);\n  uint32_t num_distance_symbols = params->dist.alphabet_size_max;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(arena)) return;\n\n  StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);\n\n  HistogramClearLiteral(&arena->lit_histo);\n  HistogramClearCommand(&arena->cmd_histo);\n  HistogramClearDistance(&arena->dist_histo);\n\n  BuildHistograms(input, start_pos, mask, commands, n_commands,\n                  &arena->lit_histo, &arena->cmd_histo, &arena->dist_histo);\n\n  BrotliWriteBits(13, 0, storage_ix, storage);\n\n  BuildAndStoreHuffmanTree(arena->lit_histo.data_, BROTLI_NUM_LITERAL_SYMBOLS,\n                           BROTLI_NUM_LITERAL_SYMBOLS, arena->tree,\n                           arena->lit_depth, arena->lit_bits,\n                           storage_ix, storage);\n  BuildAndStoreHuffmanTree(arena->cmd_histo.data_, BROTLI_NUM_COMMAND_SYMBOLS,\n                           BROTLI_NUM_COMMAND_SYMBOLS, arena->tree,\n                           arena->cmd_depth, arena->cmd_bits,\n                           storage_ix, storage);\n  BuildAndStoreHuffmanTree(arena->dist_histo.data_,\n                           MAX_SIMPLE_DISTANCE_ALPHABET_SIZE,\n                           num_distance_symbols, arena->tree,\n                           arena->dist_depth, arena->dist_bits,\n                           storage_ix, storage);\n  StoreDataWithHuffmanCodes(input, start_pos, mask, commands,\n                            n_commands, arena->lit_depth, arena->lit_bits,\n                            arena->cmd_depth, arena->cmd_bits,\n                            arena->dist_depth, arena->dist_bits,\n                            storage_ix, storage);\n  BROTLI_FREE(m, arena);\n  if (is_last) {\n    JumpToByteBoundary(storage_ix, storage);\n  }\n}\n\nvoid BrotliStoreMetaBlockFast(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    BROTLI_BOOL is_last, const BrotliEncoderParams* params,\n    const Command* commands, size_t n_commands,\n    size_t* storage_ix, uint8_t* storage) {\n  MetablockArena* arena = BROTLI_ALLOC(m, MetablockArena, 1);\n  uint32_t num_distance_symbols = params->dist.alphabet_size_max;\n  uint32_t distance_alphabet_bits =\n      Log2FloorNonZero(num_distance_symbols - 1) + 1;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(arena)) return;\n\n  StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);\n\n  BrotliWriteBits(13, 0, storage_ix, storage);\n\n  if (n_commands <= 128) {\n    uint32_t histogram[BROTLI_NUM_LITERAL_SYMBOLS] = { 0 };\n    size_t pos = start_pos;\n    size_t num_literals = 0;\n    size_t i;\n    for (i = 0; i < n_commands; ++i) {\n      const Command cmd = commands[i];\n      size_t j;\n      for (j = cmd.insert_len_; j != 0; --j) {\n        ++histogram[input[pos & mask]];\n        ++pos;\n      }\n      num_literals += cmd.insert_len_;\n      pos += CommandCopyLen(&cmd);\n    }\n    BrotliBuildAndStoreHuffmanTreeFast(arena->tree, histogram, num_literals,\n                                       /* max_bits = */ 8,\n                                       arena->lit_depth, arena->lit_bits,\n                                       storage_ix, storage);\n    StoreStaticCommandHuffmanTree(storage_ix, storage);\n    StoreStaticDistanceHuffmanTree(storage_ix, storage);\n    StoreDataWithHuffmanCodes(input, start_pos, mask, commands,\n                              n_commands, arena->lit_depth, arena->lit_bits,\n                              kStaticCommandCodeDepth,\n                              kStaticCommandCodeBits,\n                              kStaticDistanceCodeDepth,\n                              kStaticDistanceCodeBits,\n                              storage_ix, storage);\n  } else {\n    HistogramClearLiteral(&arena->lit_histo);\n    HistogramClearCommand(&arena->cmd_histo);\n    HistogramClearDistance(&arena->dist_histo);\n    BuildHistograms(input, start_pos, mask, commands, n_commands,\n                    &arena->lit_histo, &arena->cmd_histo, &arena->dist_histo);\n    BrotliBuildAndStoreHuffmanTreeFast(arena->tree, arena->lit_histo.data_,\n                                       arena->lit_histo.total_count_,\n                                       /* max_bits = */ 8,\n                                       arena->lit_depth, arena->lit_bits,\n                                       storage_ix, storage);\n    BrotliBuildAndStoreHuffmanTreeFast(arena->tree, arena->cmd_histo.data_,\n                                       arena->cmd_histo.total_count_,\n                                       /* max_bits = */ 10,\n                                       arena->cmd_depth, arena->cmd_bits,\n                                       storage_ix, storage);\n    BrotliBuildAndStoreHuffmanTreeFast(arena->tree, arena->dist_histo.data_,\n                                       arena->dist_histo.total_count_,\n                                       /* max_bits = */\n                                       distance_alphabet_bits,\n                                       arena->dist_depth, arena->dist_bits,\n                                       storage_ix, storage);\n    StoreDataWithHuffmanCodes(input, start_pos, mask, commands,\n                              n_commands, arena->lit_depth, arena->lit_bits,\n                              arena->cmd_depth, arena->cmd_bits,\n                              arena->dist_depth, arena->dist_bits,\n                              storage_ix, storage);\n  }\n\n  BROTLI_FREE(m, arena);\n\n  if (is_last) {\n    JumpToByteBoundary(storage_ix, storage);\n  }\n}\n\n/* This is for storing uncompressed blocks (simple raw storage of\n   bytes-as-bytes). */\nvoid BrotliStoreUncompressedMetaBlock(BROTLI_BOOL is_final_block,\n                                      const uint8_t* BROTLI_RESTRICT input,\n                                      size_t position, size_t mask,\n                                      size_t len,\n                                      size_t* BROTLI_RESTRICT storage_ix,\n                                      uint8_t* BROTLI_RESTRICT storage) {\n  size_t masked_pos = position & mask;\n  BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage);\n  JumpToByteBoundary(storage_ix, storage);\n\n  if (masked_pos + len > mask + 1) {\n    size_t len1 = mask + 1 - masked_pos;\n    memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1);\n    *storage_ix += len1 << 3;\n    len -= len1;\n    masked_pos = 0;\n  }\n  memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len);\n  *storage_ix += len << 3;\n\n  /* We need to clear the next 4 bytes to continue to be\n     compatible with BrotliWriteBits. */\n  BrotliWriteBitsPrepareStorage(*storage_ix, storage);\n\n  /* Since the uncompressed block itself may not be the final block, add an\n     empty one after this. */\n  if (is_final_block) {\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* islast */\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* isempty */\n    JumpToByteBoundary(storage_ix, storage);\n  }\n}\n\n#if defined(BROTLI_TEST)\nvoid BrotliGetBlockLengthPrefixCodeForTest(uint32_t len, size_t* code,\n                                           uint32_t* n_extra, uint32_t* extra);\nvoid BrotliGetBlockLengthPrefixCodeForTest(uint32_t len, size_t* code,\n                                           uint32_t* n_extra, uint32_t* extra) {\n  GetBlockLengthPrefixCode(len, code, n_extra, extra);\n}\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/brotli_bit_stream.h",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions to convert brotli-related data structures into the\n   brotli bit stream. The functions here operate under\n   assumption that there is enough space in the storage, i.e., there are\n   no out-of-range checks anywhere.\n\n   These functions do bit addressing into a byte array. The byte array\n   is called \"storage\" and the index to the bit is called storage_ix\n   in function arguments. */\n\n#ifndef BROTLI_ENC_BROTLI_BIT_STREAM_H_\n#define BROTLI_ENC_BROTLI_BIT_STREAM_H_\n\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"entropy_encode.h\"\n#include \"memory.h\"\n#include \"metablock.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* All Store functions here will use a storage_ix, which is always the bit\n   position for the current storage. */\n\nBROTLI_INTERNAL void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,\n    HuffmanTree* tree, size_t* storage_ix, uint8_t* storage);\n\nBROTLI_INTERNAL void BrotliBuildAndStoreHuffmanTreeFast(\n    HuffmanTree* tree, const uint32_t* histogram, const size_t histogram_total,\n    const size_t max_bits, uint8_t* depth, uint16_t* bits, size_t* storage_ix,\n    uint8_t* storage);\n\n/* REQUIRES: length > 0 */\n/* REQUIRES: length <= (1 << 24) */\nBROTLI_INTERNAL void BrotliStoreMetaBlock(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,\n    const BrotliEncoderParams* params, ContextType literal_context_mode,\n    const Command* commands, size_t n_commands, const MetaBlockSplit* mb,\n    size_t* storage_ix, uint8_t* storage);\n\n/* Stores the meta-block without doing any block splitting, just collects\n   one histogram per block category and uses that for entropy coding.\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nBROTLI_INTERNAL void BrotliStoreMetaBlockTrivial(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    BROTLI_BOOL is_last, const BrotliEncoderParams* params,\n    const Command* commands, size_t n_commands,\n    size_t* storage_ix, uint8_t* storage);\n\n/* Same as above, but uses static prefix codes for histograms with a only a few\n   symbols, and uses static code length prefix codes for all other histograms.\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nBROTLI_INTERNAL void BrotliStoreMetaBlockFast(MemoryManager* m,\n    const uint8_t* input, size_t start_pos, size_t length, size_t mask,\n    BROTLI_BOOL is_last, const BrotliEncoderParams* params,\n    const Command* commands, size_t n_commands,\n    size_t* storage_ix, uint8_t* storage);\n\n/* This is for storing uncompressed blocks (simple raw storage of\n   bytes-as-bytes).\n   REQUIRES: length > 0\n   REQUIRES: length <= (1 << 24) */\nBROTLI_INTERNAL void BrotliStoreUncompressedMetaBlock(\n    BROTLI_BOOL is_final_block, const uint8_t* BROTLI_RESTRICT input,\n    size_t position, size_t mask, size_t len,\n    size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_BROTLI_BIT_STREAM_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/cluster.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions for clustering similar histograms together. */\n\n#include \"cluster.h\"\n\n#include \"../common/platform.h\"\n#include \"bit_cost.h\"  /* BrotliPopulationCost */\n#include \"fast_log.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess(\n    const HistogramPair* p1, const HistogramPair* p2) {\n  if (p1->cost_diff != p2->cost_diff) {\n    return TO_BROTLI_BOOL(p1->cost_diff > p2->cost_diff);\n  }\n  return TO_BROTLI_BOOL((p1->idx2 - p1->idx1) > (p2->idx2 - p2->idx1));\n}\n\n/* Returns entropy reduction of the context map when we combine two clusters. */\nstatic BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b) {\n  size_t size_c = size_a + size_b;\n  return (double)size_a * FastLog2(size_a) +\n    (double)size_b * FastLog2(size_b) -\n    (double)size_c * FastLog2(size_c);\n}\n\n#define CODE(X) X\n\n#define FN(X) X ## Literal\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Command\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Distance\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#undef CODE\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/cluster.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions for clustering similar histograms together. */\n\n#ifndef BROTLI_ENC_CLUSTER_H_\n#define BROTLI_ENC_CLUSTER_H_\n\n#include \"../common/platform.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct HistogramPair {\n  uint32_t idx1;\n  uint32_t idx2;\n  double cost_combo;\n  double cost_diff;\n} HistogramPair;\n\n#define CODE(X) /* Declaration */;\n\n#define FN(X) X ## Literal\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Command\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Distance\n#include \"cluster_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#undef CODE\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_CLUSTER_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/cluster_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, CODE */\n\n#define HistogramType FN(Histogram)\n\n/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if\n   it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */\nBROTLI_INTERNAL void FN(BrotliCompareAndPushToQueue)(\n    const HistogramType* out, HistogramType* tmp, const uint32_t* cluster_size,\n    uint32_t idx1, uint32_t idx2, size_t max_num_pairs, HistogramPair* pairs,\n    size_t* num_pairs) CODE({\n  BROTLI_BOOL is_good_pair = BROTLI_FALSE;\n  HistogramPair p;\n  p.idx1 = p.idx2 = 0;\n  p.cost_diff = p.cost_combo = 0;\n  if (idx1 == idx2) {\n    return;\n  }\n  if (idx2 < idx1) {\n    uint32_t t = idx2;\n    idx2 = idx1;\n    idx1 = t;\n  }\n  p.idx1 = idx1;\n  p.idx2 = idx2;\n  p.cost_diff = 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[idx2]);\n  p.cost_diff -= out[idx1].bit_cost_;\n  p.cost_diff -= out[idx2].bit_cost_;\n\n  if (out[idx1].total_count_ == 0) {\n    p.cost_combo = out[idx2].bit_cost_;\n    is_good_pair = BROTLI_TRUE;\n  } else if (out[idx2].total_count_ == 0) {\n    p.cost_combo = out[idx1].bit_cost_;\n    is_good_pair = BROTLI_TRUE;\n  } else {\n    double threshold = *num_pairs == 0 ? 1e99 :\n        BROTLI_MAX(double, 0.0, pairs[0].cost_diff);\n    double cost_combo;\n    *tmp = out[idx1];\n    FN(HistogramAddHistogram)(tmp, &out[idx2]);\n    cost_combo = FN(BrotliPopulationCost)(tmp);\n    if (cost_combo < threshold - p.cost_diff) {\n      p.cost_combo = cost_combo;\n      is_good_pair = BROTLI_TRUE;\n    }\n  }\n  if (is_good_pair) {\n    p.cost_diff += p.cost_combo;\n    if (*num_pairs > 0 && HistogramPairIsLess(&pairs[0], &p)) {\n      /* Replace the top of the queue if needed. */\n      if (*num_pairs < max_num_pairs) {\n        pairs[*num_pairs] = pairs[0];\n        ++(*num_pairs);\n      }\n      pairs[0] = p;\n    } else if (*num_pairs < max_num_pairs) {\n      pairs[*num_pairs] = p;\n      ++(*num_pairs);\n    }\n  }\n})\n\nBROTLI_INTERNAL size_t FN(BrotliHistogramCombine)(HistogramType* out,\n                                                  HistogramType* tmp,\n                                                  uint32_t* cluster_size,\n                                                  uint32_t* symbols,\n                                                  uint32_t* clusters,\n                                                  HistogramPair* pairs,\n                                                  size_t num_clusters,\n                                                  size_t symbols_size,\n                                                  size_t max_clusters,\n                                                  size_t max_num_pairs) CODE({\n  double cost_diff_threshold = 0.0;\n  size_t min_cluster_size = 1;\n  size_t num_pairs = 0;\n\n  {\n    /* We maintain a vector of histogram pairs, with the property that the pair\n       with the maximum bit cost reduction is the first. */\n    size_t idx1;\n    for (idx1 = 0; idx1 < num_clusters; ++idx1) {\n      size_t idx2;\n      for (idx2 = idx1 + 1; idx2 < num_clusters; ++idx2) {\n        FN(BrotliCompareAndPushToQueue)(out, tmp, cluster_size, clusters[idx1],\n            clusters[idx2], max_num_pairs, &pairs[0], &num_pairs);\n      }\n    }\n  }\n\n  while (num_clusters > min_cluster_size) {\n    uint32_t best_idx1;\n    uint32_t best_idx2;\n    size_t i;\n    if (pairs[0].cost_diff >= cost_diff_threshold) {\n      cost_diff_threshold = 1e99;\n      min_cluster_size = max_clusters;\n      continue;\n    }\n    /* Take the best pair from the top of heap. */\n    best_idx1 = pairs[0].idx1;\n    best_idx2 = pairs[0].idx2;\n    FN(HistogramAddHistogram)(&out[best_idx1], &out[best_idx2]);\n    out[best_idx1].bit_cost_ = pairs[0].cost_combo;\n    cluster_size[best_idx1] += cluster_size[best_idx2];\n    for (i = 0; i < symbols_size; ++i) {\n      if (symbols[i] == best_idx2) {\n        symbols[i] = best_idx1;\n      }\n    }\n    for (i = 0; i < num_clusters; ++i) {\n      if (clusters[i] == best_idx2) {\n        memmove(&clusters[i], &clusters[i + 1],\n                (num_clusters - i - 1) * sizeof(clusters[0]));\n        break;\n      }\n    }\n    --num_clusters;\n    {\n      /* Remove pairs intersecting the just combined best pair. */\n      size_t copy_to_idx = 0;\n      for (i = 0; i < num_pairs; ++i) {\n        HistogramPair* p = &pairs[i];\n        if (p->idx1 == best_idx1 || p->idx2 == best_idx1 ||\n            p->idx1 == best_idx2 || p->idx2 == best_idx2) {\n          /* Remove invalid pair from the queue. */\n          continue;\n        }\n        if (HistogramPairIsLess(&pairs[0], p)) {\n          /* Replace the top of the queue if needed. */\n          HistogramPair front = pairs[0];\n          pairs[0] = *p;\n          pairs[copy_to_idx] = front;\n        } else {\n          pairs[copy_to_idx] = *p;\n        }\n        ++copy_to_idx;\n      }\n      num_pairs = copy_to_idx;\n    }\n\n    /* Push new pairs formed with the combined histogram to the heap. */\n    for (i = 0; i < num_clusters; ++i) {\n      FN(BrotliCompareAndPushToQueue)(out, tmp, cluster_size, best_idx1,\n          clusters[i], max_num_pairs, &pairs[0], &num_pairs);\n    }\n  }\n  return num_clusters;\n})\n\n/* What is the bit cost of moving histogram from cur_symbol to candidate. */\nBROTLI_INTERNAL double FN(BrotliHistogramBitCostDistance)(\n    const HistogramType* histogram, const HistogramType* candidate,\n    HistogramType* tmp) CODE({\n  if (histogram->total_count_ == 0) {\n    return 0.0;\n  } else {\n    *tmp = *histogram;\n    FN(HistogramAddHistogram)(tmp, candidate);\n    return FN(BrotliPopulationCost)(tmp) - candidate->bit_cost_;\n  }\n})\n\n/* Find the best 'out' histogram for each of the 'in' histograms.\n   When called, clusters[0..num_clusters) contains the unique values from\n   symbols[0..in_size), but this property is not preserved in this function.\n   Note: we assume that out[]->bit_cost_ is already up-to-date. */\nBROTLI_INTERNAL void FN(BrotliHistogramRemap)(const HistogramType* in,\n    size_t in_size, const uint32_t* clusters, size_t num_clusters,\n    HistogramType* out, HistogramType* tmp, uint32_t* symbols) CODE({\n  size_t i;\n  for (i = 0; i < in_size; ++i) {\n    uint32_t best_out = i == 0 ? symbols[0] : symbols[i - 1];\n    double best_bits =\n        FN(BrotliHistogramBitCostDistance)(&in[i], &out[best_out], tmp);\n    size_t j;\n    for (j = 0; j < num_clusters; ++j) {\n      const double cur_bits =\n          FN(BrotliHistogramBitCostDistance)(&in[i], &out[clusters[j]], tmp);\n      if (cur_bits < best_bits) {\n        best_bits = cur_bits;\n        best_out = clusters[j];\n      }\n    }\n    symbols[i] = best_out;\n  }\n\n  /* Recompute each out based on raw and symbols. */\n  for (i = 0; i < num_clusters; ++i) {\n    FN(HistogramClear)(&out[clusters[i]]);\n  }\n  for (i = 0; i < in_size; ++i) {\n    FN(HistogramAddHistogram)(&out[symbols[i]], &in[i]);\n  }\n})\n\n/* Reorders elements of the out[0..length) array and changes values in\n   symbols[0..length) array in the following way:\n     * when called, symbols[] contains indexes into out[], and has N unique\n       values (possibly N < length)\n     * on return, symbols'[i] = f(symbols[i]) and\n                  out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length,\n       where f is a bijection between the range of symbols[] and [0..N), and\n       the first occurrences of values in symbols'[i] come in consecutive\n       increasing order.\n   Returns N, the number of unique values in symbols[]. */\nBROTLI_INTERNAL size_t FN(BrotliHistogramReindex)(MemoryManager* m,\n    HistogramType* out, uint32_t* symbols, size_t length) CODE({\n  static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;\n  uint32_t* new_index = BROTLI_ALLOC(m, uint32_t, length);\n  uint32_t next_index;\n  HistogramType* tmp;\n  size_t i;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_index)) return 0;\n  for (i = 0; i < length; ++i) {\n      new_index[i] = kInvalidIndex;\n  }\n  next_index = 0;\n  for (i = 0; i < length; ++i) {\n    if (new_index[symbols[i]] == kInvalidIndex) {\n      new_index[symbols[i]] = next_index;\n      ++next_index;\n    }\n  }\n  /* TODO(eustas): by using idea of \"cycle-sort\" we can avoid allocation of\n     tmp and reduce the number of copying by the factor of 2. */\n  tmp = BROTLI_ALLOC(m, HistogramType, next_index);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tmp)) return 0;\n  next_index = 0;\n  for (i = 0; i < length; ++i) {\n    if (new_index[symbols[i]] == next_index) {\n      tmp[next_index] = out[symbols[i]];\n      ++next_index;\n    }\n    symbols[i] = new_index[symbols[i]];\n  }\n  BROTLI_FREE(m, new_index);\n  for (i = 0; i < next_index; ++i) {\n    out[i] = tmp[i];\n  }\n  BROTLI_FREE(m, tmp);\n  return next_index;\n})\n\nBROTLI_INTERNAL void FN(BrotliClusterHistograms)(\n    MemoryManager* m, const HistogramType* in, const size_t in_size,\n    size_t max_histograms, HistogramType* out, size_t* out_size,\n    uint32_t* histogram_symbols) CODE({\n  uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, in_size);\n  uint32_t* clusters = BROTLI_ALLOC(m, uint32_t, in_size);\n  size_t num_clusters = 0;\n  const size_t max_input_histograms = 64;\n  size_t pairs_capacity = max_input_histograms * max_input_histograms / 2;\n  /* For the first pass of clustering, we allow all pairs. */\n  HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity + 1);\n  /* TODO(eustas): move to \"persistent\" arena? */\n  HistogramType* tmp = BROTLI_ALLOC(m, HistogramType, 1);\n  size_t i;\n\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(cluster_size) ||\n      BROTLI_IS_NULL(clusters) || BROTLI_IS_NULL(pairs)|| BROTLI_IS_NULL(tmp)) {\n    return;\n  }\n\n  for (i = 0; i < in_size; ++i) {\n    cluster_size[i] = 1;\n  }\n\n  for (i = 0; i < in_size; ++i) {\n    out[i] = in[i];\n    out[i].bit_cost_ = FN(BrotliPopulationCost)(&in[i]);\n    histogram_symbols[i] = (uint32_t)i;\n  }\n\n  for (i = 0; i < in_size; i += max_input_histograms) {\n    size_t num_to_combine =\n        BROTLI_MIN(size_t, in_size - i, max_input_histograms);\n    size_t num_new_clusters;\n    size_t j;\n    for (j = 0; j < num_to_combine; ++j) {\n      clusters[num_clusters + j] = (uint32_t)(i + j);\n    }\n    num_new_clusters =\n        FN(BrotliHistogramCombine)(out, tmp, cluster_size,\n                                   &histogram_symbols[i],\n                                   &clusters[num_clusters], pairs,\n                                   num_to_combine, num_to_combine,\n                                   max_histograms, pairs_capacity);\n    num_clusters += num_new_clusters;\n  }\n\n  {\n    /* For the second pass, we limit the total number of histogram pairs.\n       After this limit is reached, we only keep searching for the best pair. */\n    size_t max_num_pairs = BROTLI_MIN(size_t,\n        64 * num_clusters, (num_clusters / 2) * num_clusters);\n    BROTLI_ENSURE_CAPACITY(\n        m, HistogramPair, pairs, pairs_capacity, max_num_pairs + 1);\n    if (BROTLI_IS_OOM(m)) return;\n\n    /* Collapse similar histograms. */\n    num_clusters = FN(BrotliHistogramCombine)(out, tmp, cluster_size,\n                                              histogram_symbols, clusters,\n                                              pairs, num_clusters, in_size,\n                                              max_histograms, max_num_pairs);\n  }\n  BROTLI_FREE(m, pairs);\n  BROTLI_FREE(m, cluster_size);\n  /* Find the optimal map from original histograms to the final ones. */\n  FN(BrotliHistogramRemap)(in, in_size, clusters, num_clusters,\n                           out, tmp, histogram_symbols);\n  BROTLI_FREE(m, tmp);\n  BROTLI_FREE(m, clusters);\n  /* Convert the context map to a canonical form. */\n  *out_size = FN(BrotliHistogramReindex)(m, out, histogram_symbols, in_size);\n  if (BROTLI_IS_OOM(m)) return;\n})\n\n#undef HistogramType\n"
  },
  {
    "path": "libs/brotli/enc/command.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"command.h\"\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nconst uint32_t kBrotliInsBase[BROTLI_NUM_INS_COPY_CODES] = {\n    0,  1,  2,  3,  4,   5,   6,   8,   10,   14,   18,   26,\n    34, 50, 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594};\nconst uint32_t kBrotliInsExtra[BROTLI_NUM_INS_COPY_CODES] = {\n    0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24};\nconst uint32_t kBrotliCopyBase[BROTLI_NUM_INS_COPY_CODES] = {\n    2,  3,  4,  5,  6,  7,   8,   9,   10,  12,  14,   18,\n    22, 30, 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118};\nconst uint32_t kBrotliCopyExtra[BROTLI_NUM_INS_COPY_CODES] = {\n    0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24};\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/command.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* This class models a sequence of literals and a backward reference copy. */\n\n#ifndef BROTLI_ENC_COMMAND_H_\n#define BROTLI_ENC_COMMAND_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"fast_log.h\"\n#include \"params.h\"\n#include \"prefix.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\")\nuint32_t kBrotliInsBase[BROTLI_NUM_INS_COPY_CODES];\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\")\nuint32_t kBrotliInsExtra[BROTLI_NUM_INS_COPY_CODES];\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\")\nuint32_t kBrotliCopyBase[BROTLI_NUM_INS_COPY_CODES];\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\")\nuint32_t kBrotliCopyExtra[BROTLI_NUM_INS_COPY_CODES];\n\nstatic BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) {\n  if (insertlen < 6) {\n    return (uint16_t)insertlen;\n  } else if (insertlen < 130) {\n    uint32_t nbits = Log2FloorNonZero(insertlen - 2) - 1u;\n    return (uint16_t)((nbits << 1) + ((insertlen - 2) >> nbits) + 2);\n  } else if (insertlen < 2114) {\n    return (uint16_t)(Log2FloorNonZero(insertlen - 66) + 10);\n  } else if (insertlen < 6210) {\n    return 21u;\n  } else if (insertlen < 22594) {\n    return 22u;\n  } else {\n    return 23u;\n  }\n}\n\nstatic BROTLI_INLINE uint16_t GetCopyLengthCode(size_t copylen) {\n  if (copylen < 10) {\n    return (uint16_t)(copylen - 2);\n  } else if (copylen < 134) {\n    uint32_t nbits = Log2FloorNonZero(copylen - 6) - 1u;\n    return (uint16_t)((nbits << 1) + ((copylen - 6) >> nbits) + 4);\n  } else if (copylen < 2118) {\n    return (uint16_t)(Log2FloorNonZero(copylen - 70) + 12);\n  } else {\n    return 23u;\n  }\n}\n\nstatic BROTLI_INLINE uint16_t CombineLengthCodes(\n    uint16_t inscode, uint16_t copycode, BROTLI_BOOL use_last_distance) {\n  uint16_t bits64 =\n      (uint16_t)((copycode & 0x7u) | ((inscode & 0x7u) << 3u));\n  if (use_last_distance && inscode < 8u && copycode < 16u) {\n    return (copycode < 8u) ? bits64 : (bits64 | 64u);\n  } else {\n    /* Specification: 5 Encoding of ... (last table) */\n    /* offset = 2 * index, where index is in range [0..8] */\n    uint32_t offset = 2u * ((copycode >> 3u) + 3u * (inscode >> 3u));\n    /* All values in specification are K * 64,\n       where   K = [2, 3, 6, 4, 5, 8, 7, 9, 10],\n           i + 1 = [1, 2, 3, 4, 5, 6, 7, 8,  9],\n       K - i - 1 = [1, 1, 3, 0, 0, 2, 0, 1,  2] = D.\n       All values in D require only 2 bits to encode.\n       Magic constant is shifted 6 bits left, to avoid final multiplication. */\n    offset = (offset << 5u) + 0x40u + ((0x520D40u >> offset) & 0xC0u);\n    return (uint16_t)(offset | bits64);\n  }\n}\n\nstatic BROTLI_INLINE void GetLengthCode(size_t insertlen, size_t copylen,\n                                        BROTLI_BOOL use_last_distance,\n                                        uint16_t* code) {\n  uint16_t inscode = GetInsertLengthCode(insertlen);\n  uint16_t copycode = GetCopyLengthCode(copylen);\n  *code = CombineLengthCodes(inscode, copycode, use_last_distance);\n}\n\nstatic BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) {\n  return kBrotliInsBase[inscode];\n}\n\nstatic BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) {\n  return kBrotliInsExtra[inscode];\n}\n\nstatic BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) {\n  return kBrotliCopyBase[copycode];\n}\n\nstatic BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) {\n  return kBrotliCopyExtra[copycode];\n}\n\ntypedef struct Command {\n  uint32_t insert_len_;\n  /* Stores copy_len in low 25 bits and copy_code - copy_len in high 7 bit. */\n  uint32_t copy_len_;\n  /* Stores distance extra bits. */\n  uint32_t dist_extra_;\n  uint16_t cmd_prefix_;\n  /* Stores distance code in low 10 bits\n     and number of extra bits in high 6 bits. */\n  uint16_t dist_prefix_;\n} Command;\n\n/* distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. */\nstatic BROTLI_INLINE void InitCommand(Command* self,\n    const BrotliDistanceParams* dist, size_t insertlen,\n    size_t copylen, int copylen_code_delta, size_t distance_code) {\n  /* Don't rely on signed int representation, use honest casts. */\n  uint32_t delta = (uint8_t)((int8_t)copylen_code_delta);\n  self->insert_len_ = (uint32_t)insertlen;\n  self->copy_len_ = (uint32_t)(copylen | (delta << 25));\n  /* The distance prefix and extra bits are stored in this Command as if\n     npostfix and ndirect were 0, they are only recomputed later after the\n     clustering if needed. */\n  PrefixEncodeCopyDistance(\n      distance_code, dist->num_direct_distance_codes,\n      dist->distance_postfix_bits, &self->dist_prefix_, &self->dist_extra_);\n  GetLengthCode(\n      insertlen, (size_t)((int)copylen + copylen_code_delta),\n      TO_BROTLI_BOOL((self->dist_prefix_ & 0x3FF) == 0), &self->cmd_prefix_);\n}\n\nstatic BROTLI_INLINE void InitInsertCommand(Command* self, size_t insertlen) {\n  self->insert_len_ = (uint32_t)insertlen;\n  self->copy_len_ = 4 << 25;\n  self->dist_extra_ = 0;\n  self->dist_prefix_ = BROTLI_NUM_DISTANCE_SHORT_CODES;\n  GetLengthCode(insertlen, 4, BROTLI_FALSE, &self->cmd_prefix_);\n}\n\nstatic BROTLI_INLINE uint32_t CommandRestoreDistanceCode(\n    const Command* self, const BrotliDistanceParams* dist) {\n  if ((self->dist_prefix_ & 0x3FFu) <\n      BROTLI_NUM_DISTANCE_SHORT_CODES + dist->num_direct_distance_codes) {\n    return self->dist_prefix_ & 0x3FFu;\n  } else {\n    uint32_t dcode = self->dist_prefix_ & 0x3FFu;\n    uint32_t nbits = self->dist_prefix_ >> 10;\n    uint32_t extra = self->dist_extra_;\n    uint32_t postfix_mask = (1U << dist->distance_postfix_bits) - 1U;\n    uint32_t hcode = (dcode - dist->num_direct_distance_codes -\n        BROTLI_NUM_DISTANCE_SHORT_CODES) >>\n        dist->distance_postfix_bits;\n    uint32_t lcode = (dcode - dist->num_direct_distance_codes -\n        BROTLI_NUM_DISTANCE_SHORT_CODES) & postfix_mask;\n    uint32_t offset = ((2U + (hcode & 1U)) << nbits) - 4U;\n    return ((offset + extra) << dist->distance_postfix_bits) + lcode +\n        dist->num_direct_distance_codes + BROTLI_NUM_DISTANCE_SHORT_CODES;\n  }\n}\n\nstatic BROTLI_INLINE uint32_t CommandDistanceContext(const Command* self) {\n  uint32_t r = self->cmd_prefix_ >> 6;\n  uint32_t c = self->cmd_prefix_ & 7;\n  if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) {\n    return c;\n  }\n  return 3;\n}\n\nstatic BROTLI_INLINE uint32_t CommandCopyLen(const Command* self) {\n  return self->copy_len_ & 0x1FFFFFF;\n}\n\nstatic BROTLI_INLINE uint32_t CommandCopyLenCode(const Command* self) {\n  uint32_t modifier = self->copy_len_ >> 25;\n  int32_t delta = (int8_t)((uint8_t)(modifier | ((modifier & 0x40) << 1)));\n  return (uint32_t)((int32_t)(self->copy_len_ & 0x1FFFFFF) + delta);\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_COMMAND_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/compound_dictionary.c",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"compound_dictionary.h\"\n\n#include \"../common/platform.h\"\n#include <brotli/shared_dictionary.h>\n#include \"memory.h\"\n\nstatic PreparedDictionary* CreatePreparedDictionaryWithParams(MemoryManager* m,\n    const uint8_t* source, size_t source_size, uint32_t bucket_bits,\n    uint32_t slot_bits, uint32_t hash_bits, uint16_t bucket_limit) {\n  /* Step 1: create \"bloated\" hasher. */\n  uint32_t num_slots = 1u << slot_bits;\n  uint32_t num_buckets = 1u << bucket_bits;\n  uint32_t hash_shift = 64u - bucket_bits;\n  uint64_t hash_mask = (~((uint64_t)0U)) >> (64 - hash_bits);\n  uint32_t slot_mask = num_slots - 1;\n  size_t alloc_size = (sizeof(uint32_t) << slot_bits) +\n      (sizeof(uint32_t) << slot_bits) +\n      (sizeof(uint16_t) << bucket_bits) +\n      (sizeof(uint32_t) << bucket_bits) +\n      (sizeof(uint32_t) * source_size);\n  uint8_t* flat = NULL;\n  PreparedDictionary* result = NULL;\n  uint16_t* num = NULL;\n  uint32_t* bucket_heads = NULL;\n  uint32_t* next_bucket = NULL;\n  uint32_t* slot_offsets = NULL;\n  uint16_t* heads = NULL;\n  uint32_t* items = NULL;\n  uint8_t** source_ref = NULL;\n  uint32_t i;\n  uint32_t* slot_size = NULL;\n  uint32_t* slot_limit = NULL;\n  uint32_t total_items = 0;\n  if (slot_bits > 16) return NULL;\n  if (slot_bits > bucket_bits) return NULL;\n  if (bucket_bits - slot_bits >= 16) return NULL;\n\n  flat = BROTLI_ALLOC(m, uint8_t, alloc_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(flat)) return NULL;\n\n  slot_size = (uint32_t*)flat;\n  slot_limit = (uint32_t*)(&slot_size[num_slots]);\n  num = (uint16_t*)(&slot_limit[num_slots]);\n  bucket_heads = (uint32_t*)(&num[num_buckets]);\n  next_bucket = (uint32_t*)(&bucket_heads[num_buckets]);\n  memset(num, 0, num_buckets * sizeof(num[0]));\n\n  /* TODO(eustas): apply custom \"store\" order. */\n  for (i = 0; i + 7 < source_size; ++i) {\n    const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(&source[i]) & hash_mask) *\n        kPreparedDictionaryHashMul64Long;\n    const uint32_t key = (uint32_t)(h >> hash_shift);\n    uint16_t count = num[key];\n    next_bucket[i] = (count == 0) ? ((uint32_t)(-1)) : bucket_heads[key];\n    bucket_heads[key] = i;\n    count++;\n    if (count > bucket_limit) count = bucket_limit;\n    num[key] = count;\n  }\n\n  /* Step 2: find slot limits. */\n  for (i = 0; i < num_slots; ++i) {\n    BROTLI_BOOL overflow = BROTLI_FALSE;\n    slot_limit[i] = bucket_limit;\n    while (BROTLI_TRUE) {\n      uint32_t limit = slot_limit[i];\n      size_t j;\n      uint32_t count = 0;\n      overflow = BROTLI_FALSE;\n      for (j = i; j < num_buckets; j += num_slots) {\n        uint32_t size = num[j];\n        /* Last chain may span behind 64K limit; overflow happens only if\n           we are about to use 0xFFFF+ as item offset. */\n        if (count >= 0xFFFF) {\n          overflow = BROTLI_TRUE;\n          break;\n        }\n        if (size > limit) size = limit;\n        count += size;\n      }\n      if (!overflow) {\n        slot_size[i] = count;\n        total_items += count;\n        break;\n      }\n      slot_limit[i]--;\n    }\n  }\n\n  /* Step 3: transfer data to \"slim\" hasher. */\n  alloc_size = sizeof(PreparedDictionary) + (sizeof(uint32_t) << slot_bits) +\n      (sizeof(uint16_t) << bucket_bits) + (sizeof(uint32_t) * total_items) +\n      sizeof(uint8_t*);\n\n  result = (PreparedDictionary*)BROTLI_ALLOC(m, uint8_t, alloc_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(result)) {\n    BROTLI_FREE(m, flat);\n    return NULL;\n  }\n  slot_offsets = (uint32_t*)(&result[1]);\n  heads = (uint16_t*)(&slot_offsets[num_slots]);\n  items = (uint32_t*)(&heads[num_buckets]);\n  source_ref = (uint8_t**)(&items[total_items]);\n\n  result->magic = kLeanPreparedDictionaryMagic;\n  result->num_items = total_items;\n  result->source_size = (uint32_t)source_size;\n  result->hash_bits = hash_bits;\n  result->bucket_bits = bucket_bits;\n  result->slot_bits = slot_bits;\n  BROTLI_UNALIGNED_STORE_PTR(source_ref, source);\n\n  total_items = 0;\n  for (i = 0; i < num_slots; ++i) {\n    slot_offsets[i] = total_items;\n    total_items += slot_size[i];\n    slot_size[i] = 0;\n  }\n  for (i = 0; i < num_buckets; ++i) {\n    uint32_t slot = i & slot_mask;\n    uint32_t count = num[i];\n    uint32_t pos;\n    size_t j;\n    size_t cursor = slot_size[slot];\n    if (count > slot_limit[slot]) count = slot_limit[slot];\n    if (count == 0) {\n      heads[i] = 0xFFFF;\n      continue;\n    }\n    heads[i] = (uint16_t)cursor;\n    cursor += slot_offsets[slot];\n    slot_size[slot] += count;\n    pos = bucket_heads[i];\n    for (j = 0; j < count; j++) {\n      items[cursor++] = pos;\n      pos = next_bucket[pos];\n    }\n    items[cursor - 1] |= 0x80000000;\n  }\n\n  BROTLI_FREE(m, flat);\n  return result;\n}\n\nPreparedDictionary* CreatePreparedDictionary(MemoryManager* m,\n    const uint8_t* source, size_t source_size) {\n  uint32_t bucket_bits = 17;\n  uint32_t slot_bits = 7;\n  uint32_t hash_bits = 40;\n  uint16_t bucket_limit = 32;\n  size_t volume = 16u << bucket_bits;\n  /* Tune parameters to fit dictionary size. */\n  while (volume < source_size && bucket_bits < 22) {\n    bucket_bits++;\n    slot_bits++;\n    volume <<= 1;\n  }\n  return CreatePreparedDictionaryWithParams(m,\n      source, source_size, bucket_bits, slot_bits, hash_bits, bucket_limit);\n}\n\nvoid DestroyPreparedDictionary(MemoryManager* m,\n    PreparedDictionary* dictionary) {\n  if (!dictionary) return;\n  BROTLI_FREE(m, dictionary);\n}\n\nBROTLI_BOOL AttachPreparedDictionary(\n    CompoundDictionary* compound, const PreparedDictionary* dictionary) {\n  size_t length = 0;\n  size_t index = 0;\n\n  if (compound->num_chunks == SHARED_BROTLI_MAX_COMPOUND_DICTS) {\n    return BROTLI_FALSE;\n  }\n\n  if (!dictionary) return BROTLI_FALSE;\n\n  length = dictionary->source_size;\n  index = compound->num_chunks;\n  compound->total_size += length;\n  compound->chunks[index] = dictionary;\n  compound->chunk_offsets[index + 1] = compound->total_size;\n  {\n    uint32_t* slot_offsets = (uint32_t*)(&dictionary[1]);\n    uint16_t* heads = (uint16_t*)(&slot_offsets[(size_t)1u << dictionary->slot_bits]);\n    uint32_t* items = (uint32_t*)(&heads[(size_t)1u << dictionary->bucket_bits]);\n    const void* tail = (void*)&items[dictionary->num_items];\n    if (dictionary->magic == kPreparedDictionaryMagic) {\n      compound->chunk_source[index] = (const uint8_t*)tail;\n    } else {\n      /* dictionary->magic == kLeanPreparedDictionaryMagic */\n      compound->chunk_source[index] =\n          (const uint8_t*)BROTLI_UNALIGNED_LOAD_PTR((const uint8_t**)tail);\n    }\n  }\n  compound->num_chunks++;\n  return BROTLI_TRUE;\n}\n"
  },
  {
    "path": "libs/brotli/enc/compound_dictionary.h",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#ifndef BROTLI_ENC_PREPARED_DICTIONARY_H_\n#define BROTLI_ENC_PREPARED_DICTIONARY_H_\n\n#include \"../common/platform.h\"\n#include <brotli/shared_dictionary.h>\n#include \"memory.h\"\n\n/* \"Fat\" prepared dictionary, could be cooked outside of C implementation,\n * e.g. on Java side. LZ77 data is copied inside PreparedDictionary struct. */\nstatic const uint32_t kPreparedDictionaryMagic = 0xDEBCEDE0;\n\nstatic const uint32_t kSharedDictionaryMagic = 0xDEBCEDE1;\n\nstatic const uint32_t kManagedDictionaryMagic = 0xDEBCEDE2;\n\n/* \"Lean\" prepared dictionary. LZ77 data is referenced. It is the responsibility\n * of caller of \"prepare dictionary\" to keep the LZ77 data while prepared\n * dictionary is in use. */\nstatic const uint32_t kLeanPreparedDictionaryMagic = 0xDEBCEDE3;\n\nstatic const uint64_t kPreparedDictionaryHashMul64Long =\n    BROTLI_MAKE_UINT64_T(0x1FE35A7Bu, 0xD3579BD3u);\n\ntypedef struct PreparedDictionary {\n  uint32_t magic;\n  uint32_t num_items;\n  uint32_t source_size;\n  uint32_t hash_bits;\n  uint32_t bucket_bits;\n  uint32_t slot_bits;\n\n  /* --- Dynamic size members --- */\n\n  /* uint32_t slot_offsets[1 << slot_bits]; */\n  /* uint16_t heads[1 << bucket_bits]; */\n  /* uint32_t items[variable]; */\n\n  /* [maybe] uint8_t* source_ref, depending on magic. */\n  /* [maybe] uint8_t source[source_size], depending on magic. */\n} PreparedDictionary;\n\nBROTLI_INTERNAL PreparedDictionary* CreatePreparedDictionary(MemoryManager* m,\n    const uint8_t* source, size_t source_size);\n\nBROTLI_INTERNAL void DestroyPreparedDictionary(MemoryManager* m,\n    PreparedDictionary* dictionary);\n\ntypedef struct CompoundDictionary {\n  /* LZ77 prefix, compound dictionary */\n  size_t num_chunks;\n  size_t total_size;\n  /* Client instances. */\n  const PreparedDictionary* chunks[SHARED_BROTLI_MAX_COMPOUND_DICTS + 1];\n  const uint8_t* chunk_source[SHARED_BROTLI_MAX_COMPOUND_DICTS + 1];\n  size_t chunk_offsets[SHARED_BROTLI_MAX_COMPOUND_DICTS + 1];\n\n  size_t num_prepared_instances_;\n  /* Owned instances. */\n  PreparedDictionary* prepared_instances_[SHARED_BROTLI_MAX_COMPOUND_DICTS + 1];\n} CompoundDictionary;\n\nBROTLI_INTERNAL BROTLI_BOOL AttachPreparedDictionary(\n    CompoundDictionary* compound, const PreparedDictionary* dictionary);\n\n#endif /* BROTLI_ENC_PREPARED_DICTIONARY */\n"
  },
  {
    "path": "libs/brotli/enc/compress_fragment.c",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function for fast encoding of an input fragment, independently from the input\n   history. This function uses one-pass processing: when we find a backward\n   match, we immediately emit the corresponding command and literal codes to\n   the bit stream.\n\n   Adapted from the CompressFragment() function in\n   https://github.com/google/snappy/blob/master/snappy.cc */\n\n#include \"compress_fragment.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"brotli_bit_stream.h\"\n#include \"entropy_encode.h\"\n#include \"fast_log.h\"\n#include \"find_match_length.h\"\n#include \"hash_base.h\"\n#include \"write_bits.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)\n\nstatic BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) {\n  const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(p) << 24) * kHashMul32;\n  return (uint32_t)(h >> shift);\n}\n\nstatic BROTLI_INLINE uint32_t HashBytesAtOffset(\n    uint64_t v, int offset, size_t shift) {\n  BROTLI_DCHECK(offset >= 0);\n  BROTLI_DCHECK(offset <= 3);\n  {\n    const uint64_t h = ((v >> (8 * offset)) << 24) * kHashMul32;\n    return (uint32_t)(h >> shift);\n  }\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2) {\n  return TO_BROTLI_BOOL(\n      BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2) &&\n      p1[4] == p2[4]);\n}\n\n/* Builds a literal prefix code into \"depths\" and \"bits\" based on the statistics\n   of the \"input\" string and stores it into the bit stream.\n   Note that the prefix code here is built from the pre-LZ77 input, therefore\n   we can only approximate the statistics of the actual literal stream.\n   Moreover, for long inputs we build a histogram from a sample of the input\n   and thus have to assign a non-zero depth for each literal.\n   Returns estimated compression ratio millibytes/char for encoding given input\n   with generated code. */\nstatic size_t BuildAndStoreLiteralPrefixCode(BrotliOnePassArena* s,\n                                             const uint8_t* input,\n                                             const size_t input_size,\n                                             uint8_t depths[256],\n                                             uint16_t bits[256],\n                                             size_t* storage_ix,\n                                             uint8_t* storage) {\n  uint32_t* BROTLI_RESTRICT const histogram = s->histogram;\n  size_t histogram_total;\n  size_t i;\n  memset(histogram, 0, sizeof(s->histogram));\n\n  if (input_size < (1 << 15)) {\n    for (i = 0; i < input_size; ++i) {\n      ++histogram[input[i]];\n    }\n    histogram_total = input_size;\n    for (i = 0; i < 256; ++i) {\n      /* We weigh the first 11 samples with weight 3 to account for the\n         balancing effect of the LZ77 phase on the histogram. */\n      const uint32_t adjust = 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);\n      histogram[i] += adjust;\n      histogram_total += adjust;\n    }\n  } else {\n    static const size_t kSampleRate = 29;\n    for (i = 0; i < input_size; i += kSampleRate) {\n      ++histogram[input[i]];\n    }\n    histogram_total = (input_size + kSampleRate - 1) / kSampleRate;\n    for (i = 0; i < 256; ++i) {\n      /* We add 1 to each population count to avoid 0 bit depths (since this is\n         only a sample and we don't know if the symbol appears or not), and we\n         weigh the first 11 samples with weight 3 to account for the balancing\n         effect of the LZ77 phase on the histogram (more frequent symbols are\n         more likely to be in backward references instead as literals). */\n      const uint32_t adjust = 1 + 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);\n      histogram[i] += adjust;\n      histogram_total += adjust;\n    }\n  }\n  BrotliBuildAndStoreHuffmanTreeFast(s->tree, histogram, histogram_total,\n                                     /* max_bits = */ 8,\n                                     depths, bits, storage_ix, storage);\n  {\n    size_t literal_ratio = 0;\n    for (i = 0; i < 256; ++i) {\n      if (histogram[i]) literal_ratio += histogram[i] * depths[i];\n    }\n    /* Estimated encoding ratio, millibytes per symbol. */\n    return (literal_ratio * 125) / histogram_total;\n  }\n}\n\n/* Builds a command and distance prefix code (each 64 symbols) into \"depth\" and\n   \"bits\" based on \"histogram\" and stores it into the bit stream. */\nstatic void BuildAndStoreCommandPrefixCode(BrotliOnePassArena* s,\n    size_t* storage_ix, uint8_t* storage) {\n  const uint32_t* const histogram = s->cmd_histo;\n  uint8_t* const depth = s->cmd_depth;\n  uint16_t* const bits = s->cmd_bits;\n  uint8_t* BROTLI_RESTRICT const tmp_depth = s->tmp_depth;\n  uint16_t* BROTLI_RESTRICT const tmp_bits = s->tmp_bits;\n  /* TODO(eustas): do only once on initialization. */\n  memset(tmp_depth, 0, BROTLI_NUM_COMMAND_SYMBOLS);\n\n  BrotliCreateHuffmanTree(histogram, 64, 15, s->tree, depth);\n  BrotliCreateHuffmanTree(&histogram[64], 64, 14, s->tree, &depth[64]);\n  /* We have to jump through a few hoops here in order to compute\n     the command bits because the symbols are in a different order than in\n     the full alphabet. This looks complicated, but having the symbols\n     in this order in the command bits saves a few branches in the Emit*\n     functions. */\n  memcpy(tmp_depth, depth, 24);\n  memcpy(tmp_depth + 24, depth + 40, 8);\n  memcpy(tmp_depth + 32, depth + 24, 8);\n  memcpy(tmp_depth + 40, depth + 48, 8);\n  memcpy(tmp_depth + 48, depth + 32, 8);\n  memcpy(tmp_depth + 56, depth + 56, 8);\n  BrotliConvertBitDepthsToSymbols(tmp_depth, 64, tmp_bits);\n  memcpy(bits, tmp_bits, 48);\n  memcpy(bits + 24, tmp_bits + 32, 16);\n  memcpy(bits + 32, tmp_bits + 48, 16);\n  memcpy(bits + 40, tmp_bits + 24, 16);\n  memcpy(bits + 48, tmp_bits + 40, 16);\n  memcpy(bits + 56, tmp_bits + 56, 16);\n  BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);\n  {\n    /* Create the bit length array for the full command alphabet. */\n    size_t i;\n    memset(tmp_depth, 0, 64);  /* only 64 first values were used */\n    memcpy(tmp_depth, depth, 8);\n    memcpy(tmp_depth + 64, depth + 8, 8);\n    memcpy(tmp_depth + 128, depth + 16, 8);\n    memcpy(tmp_depth + 192, depth + 24, 8);\n    memcpy(tmp_depth + 384, depth + 32, 8);\n    for (i = 0; i < 8; ++i) {\n      tmp_depth[128 + 8 * i] = depth[40 + i];\n      tmp_depth[256 + 8 * i] = depth[48 + i];\n      tmp_depth[448 + 8 * i] = depth[56 + i];\n    }\n    /* TODO(eustas): could/should full-length machinery be avoided? */\n    BrotliStoreHuffmanTree(\n        tmp_depth, BROTLI_NUM_COMMAND_SYMBOLS, s->tree, storage_ix, storage);\n  }\n  BrotliStoreHuffmanTree(&depth[64], 64, s->tree, storage_ix, storage);\n}\n\n/* REQUIRES: insertlen < 6210 */\nstatic BROTLI_INLINE void EmitInsertLen(size_t insertlen,\n                                        const uint8_t depth[128],\n                                        const uint16_t bits[128],\n                                        uint32_t histo[128],\n                                        size_t* storage_ix,\n                                        uint8_t* storage) {\n  if (insertlen < 6) {\n    const size_t code = insertlen + 40;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    ++histo[code];\n  } else if (insertlen < 130) {\n    const size_t tail = insertlen - 2;\n    const uint32_t nbits = Log2FloorNonZero(tail) - 1u;\n    const size_t prefix = tail >> nbits;\n    const size_t inscode = (nbits << 1) + prefix + 42;\n    BrotliWriteBits(depth[inscode], bits[inscode], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);\n    ++histo[inscode];\n  } else if (insertlen < 2114) {\n    const size_t tail = insertlen - 66;\n    const uint32_t nbits = Log2FloorNonZero(tail);\n    const size_t code = nbits + 50;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);\n    ++histo[code];\n  } else {\n    BrotliWriteBits(depth[61], bits[61], storage_ix, storage);\n    BrotliWriteBits(12, insertlen - 2114, storage_ix, storage);\n    ++histo[61];\n  }\n}\n\nstatic BROTLI_INLINE void EmitLongInsertLen(size_t insertlen,\n                                            const uint8_t depth[128],\n                                            const uint16_t bits[128],\n                                            uint32_t histo[128],\n                                            size_t* storage_ix,\n                                            uint8_t* storage) {\n  if (insertlen < 22594) {\n    BrotliWriteBits(depth[62], bits[62], storage_ix, storage);\n    BrotliWriteBits(14, insertlen - 6210, storage_ix, storage);\n    ++histo[62];\n  } else {\n    BrotliWriteBits(depth[63], bits[63], storage_ix, storage);\n    BrotliWriteBits(24, insertlen - 22594, storage_ix, storage);\n    ++histo[63];\n  }\n}\n\nstatic BROTLI_INLINE void EmitCopyLen(size_t copylen,\n                                      const uint8_t depth[128],\n                                      const uint16_t bits[128],\n                                      uint32_t histo[128],\n                                      size_t* storage_ix,\n                                      uint8_t* storage) {\n  if (copylen < 10) {\n    BrotliWriteBits(\n        depth[copylen + 14], bits[copylen + 14], storage_ix, storage);\n    ++histo[copylen + 14];\n  } else if (copylen < 134) {\n    const size_t tail = copylen - 6;\n    const uint32_t nbits = Log2FloorNonZero(tail) - 1u;\n    const size_t prefix = tail >> nbits;\n    const size_t code = (nbits << 1) + prefix + 20;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);\n    ++histo[code];\n  } else if (copylen < 2118) {\n    const size_t tail = copylen - 70;\n    const uint32_t nbits = Log2FloorNonZero(tail);\n    const size_t code = nbits + 28;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);\n    ++histo[code];\n  } else {\n    BrotliWriteBits(depth[39], bits[39], storage_ix, storage);\n    BrotliWriteBits(24, copylen - 2118, storage_ix, storage);\n    ++histo[39];\n  }\n}\n\nstatic BROTLI_INLINE void EmitCopyLenLastDistance(size_t copylen,\n                                                  const uint8_t depth[128],\n                                                  const uint16_t bits[128],\n                                                  uint32_t histo[128],\n                                                  size_t* storage_ix,\n                                                  uint8_t* storage) {\n  if (copylen < 12) {\n    BrotliWriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, storage);\n    ++histo[copylen - 4];\n  } else if (copylen < 72) {\n    const size_t tail = copylen - 8;\n    const uint32_t nbits = Log2FloorNonZero(tail) - 1;\n    const size_t prefix = tail >> nbits;\n    const size_t code = (nbits << 1) + prefix + 4;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);\n    ++histo[code];\n  } else if (copylen < 136) {\n    const size_t tail = copylen - 8;\n    const size_t code = (tail >> 5) + 30;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(5, tail & 31, storage_ix, storage);\n    BrotliWriteBits(depth[64], bits[64], storage_ix, storage);\n    ++histo[code];\n    ++histo[64];\n  } else if (copylen < 2120) {\n    const size_t tail = copylen - 72;\n    const uint32_t nbits = Log2FloorNonZero(tail);\n    const size_t code = nbits + 28;\n    BrotliWriteBits(depth[code], bits[code], storage_ix, storage);\n    BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);\n    BrotliWriteBits(depth[64], bits[64], storage_ix, storage);\n    ++histo[code];\n    ++histo[64];\n  } else {\n    BrotliWriteBits(depth[39], bits[39], storage_ix, storage);\n    BrotliWriteBits(24, copylen - 2120, storage_ix, storage);\n    BrotliWriteBits(depth[64], bits[64], storage_ix, storage);\n    ++histo[39];\n    ++histo[64];\n  }\n}\n\nstatic BROTLI_INLINE void EmitDistance(size_t distance,\n                                       const uint8_t depth[128],\n                                       const uint16_t bits[128],\n                                       uint32_t histo[128],\n                                       size_t* storage_ix, uint8_t* storage) {\n  const size_t d = distance + 3;\n  const uint32_t nbits = Log2FloorNonZero(d) - 1u;\n  const size_t prefix = (d >> nbits) & 1;\n  const size_t offset = (2 + prefix) << nbits;\n  const size_t distcode = 2 * (nbits - 1) + prefix + 80;\n  BrotliWriteBits(depth[distcode], bits[distcode], storage_ix, storage);\n  BrotliWriteBits(nbits, d - offset, storage_ix, storage);\n  ++histo[distcode];\n}\n\nstatic BROTLI_INLINE void EmitLiterals(const uint8_t* input, const size_t len,\n                                       const uint8_t depth[256],\n                                       const uint16_t bits[256],\n                                       size_t* storage_ix, uint8_t* storage) {\n  size_t j;\n  for (j = 0; j < len; j++) {\n    const uint8_t lit = input[j];\n    BrotliWriteBits(depth[lit], bits[lit], storage_ix, storage);\n  }\n}\n\n/* REQUIRES: len <= 1 << 24. */\nstatic void BrotliStoreMetaBlockHeader(\n    size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,\n    uint8_t* storage) {\n  size_t nibbles = 6;\n  /* ISLAST */\n  BrotliWriteBits(1, 0, storage_ix, storage);\n  if (len <= (1U << 16)) {\n    nibbles = 4;\n  } else if (len <= (1U << 20)) {\n    nibbles = 5;\n  }\n  BrotliWriteBits(2, nibbles - 4, storage_ix, storage);\n  BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);\n  /* ISUNCOMPRESSED */\n  BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);\n}\n\nstatic void UpdateBits(size_t n_bits, uint32_t bits, size_t pos,\n    uint8_t* array) {\n  while (n_bits > 0) {\n    size_t byte_pos = pos >> 3;\n    size_t n_unchanged_bits = pos & 7;\n    size_t n_changed_bits = BROTLI_MIN(size_t, n_bits, 8 - n_unchanged_bits);\n    size_t total_bits = n_unchanged_bits + n_changed_bits;\n    uint32_t mask =\n        (~((1u << total_bits) - 1u)) | ((1u << n_unchanged_bits) - 1u);\n    uint32_t unchanged_bits = array[byte_pos] & mask;\n    uint32_t changed_bits = bits & ((1u << n_changed_bits) - 1u);\n    array[byte_pos] =\n        (uint8_t)((changed_bits << n_unchanged_bits) | unchanged_bits);\n    n_bits -= n_changed_bits;\n    bits >>= n_changed_bits;\n    pos += n_changed_bits;\n  }\n}\n\nstatic void RewindBitPosition(const size_t new_storage_ix,\n                              size_t* storage_ix, uint8_t* storage) {\n  const size_t bitpos = new_storage_ix & 7;\n  const size_t mask = (1u << bitpos) - 1;\n  storage[new_storage_ix >> 3] &= (uint8_t)mask;\n  *storage_ix = new_storage_ix;\n}\n\nstatic BROTLI_BOOL ShouldMergeBlock(BrotliOnePassArena* s,\n    const uint8_t* data, size_t len, const uint8_t* depths) {\n  uint32_t* BROTLI_RESTRICT const histo = s->histogram;\n  static const size_t kSampleRate = 43;\n  size_t i;\n  memset(histo, 0, sizeof(s->histogram));\n  for (i = 0; i < len; i += kSampleRate) {\n    ++histo[data[i]];\n  }\n  {\n    const size_t total = (len + kSampleRate - 1) / kSampleRate;\n    double r = (FastLog2(total) + 0.5) * (double)total + 200;\n    for (i = 0; i < 256; ++i) {\n      r -= (double)histo[i] * (depths[i] + FastLog2(histo[i]));\n    }\n    return TO_BROTLI_BOOL(r >= 0.0);\n  }\n}\n\n/* Acceptable loss for uncompressible speedup is 2% */\n#define MIN_RATIO 980\n\nstatic BROTLI_INLINE BROTLI_BOOL ShouldUseUncompressedMode(\n    const uint8_t* metablock_start, const uint8_t* next_emit,\n    const size_t insertlen, const size_t literal_ratio) {\n  const size_t compressed = (size_t)(next_emit - metablock_start);\n  if (compressed * 50 > insertlen) {\n    return BROTLI_FALSE;\n  } else {\n    return TO_BROTLI_BOOL(literal_ratio > MIN_RATIO);\n  }\n}\n\nstatic void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_t* end,\n                                      const size_t storage_ix_start,\n                                      size_t* storage_ix, uint8_t* storage) {\n  const size_t len = (size_t)(end - begin);\n  RewindBitPosition(storage_ix_start, storage_ix, storage);\n  BrotliStoreMetaBlockHeader(len, 1, storage_ix, storage);\n  *storage_ix = (*storage_ix + 7u) & ~7u;\n  memcpy(&storage[*storage_ix >> 3], begin, len);\n  *storage_ix += len << 3;\n  storage[*storage_ix >> 3] = 0;\n}\n\nstatic BROTLI_MODEL(\"small\") uint32_t kCmdHistoSeed[128] = {\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,\n  0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n  1, 1, 1, 1, 0, 0, 0, 0,\n};\n\nstatic BROTLI_INLINE void BrotliCompressFragmentFastImpl(\n    BrotliOnePassArena* s, const uint8_t* input, size_t input_size,\n    BROTLI_BOOL is_last, int* table, size_t table_bits,\n    size_t* storage_ix, uint8_t* storage) {\n  uint8_t* BROTLI_RESTRICT const cmd_depth = s->cmd_depth;\n  uint16_t* BROTLI_RESTRICT const cmd_bits = s->cmd_bits;\n  uint32_t* BROTLI_RESTRICT const cmd_histo = s->cmd_histo;\n  uint8_t* BROTLI_RESTRICT const lit_depth = s->lit_depth;\n  uint16_t* BROTLI_RESTRICT const lit_bits = s->lit_bits;\n  const uint8_t* ip_end;\n\n  /* \"next_emit\" is a pointer to the first byte that is not covered by a\n     previous copy. Bytes between \"next_emit\" and the start of the next copy or\n     the end of the input will be emitted as literal bytes. */\n  const uint8_t* next_emit = input;\n  /* Save the start of the first block for position and distance computations.\n  */\n  const uint8_t* base_ip = input;\n\n  static const size_t kFirstBlockSize = 3 << 15;\n  static const size_t kMergeBlockSize = 1 << 16;\n\n  const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;\n  const size_t kMinMatchLen = 5;\n\n  const uint8_t* metablock_start = input;\n  size_t block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);\n  size_t total_block_size = block_size;\n  /* Save the bit position of the MLEN field of the meta-block header, so that\n     we can update it later if we decide to extend this meta-block. */\n  size_t mlen_storage_ix = *storage_ix + 3;\n\n  size_t literal_ratio;\n\n  const uint8_t* ip;\n  int last_distance;\n\n  const size_t shift = 64u - table_bits;\n\n  BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);\n  /* No block splits, no contexts. */\n  BrotliWriteBits(13, 0, storage_ix, storage);\n\n  literal_ratio = BuildAndStoreLiteralPrefixCode(\n      s, input, block_size, s->lit_depth, s->lit_bits, storage_ix, storage);\n\n  {\n    /* Store the pre-compressed command and distance prefix codes. */\n    size_t i;\n    for (i = 0; i + 7 < s->cmd_code_numbits; i += 8) {\n      BrotliWriteBits(8, s->cmd_code[i >> 3], storage_ix, storage);\n    }\n  }\n  BrotliWriteBits(s->cmd_code_numbits & 7,\n                  s->cmd_code[s->cmd_code_numbits >> 3], storage_ix, storage);\n\n emit_commands:\n  /* Initialize the command and distance histograms. We will gather\n     statistics of command and distance codes during the processing\n     of this block and use it to update the command and distance\n     prefix codes for the next block. */\n  memcpy(s->cmd_histo, kCmdHistoSeed, sizeof(kCmdHistoSeed));\n\n  /* \"ip\" is the input pointer. */\n  ip = input;\n  last_distance = -1;\n  ip_end = input + block_size;\n\n  if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {\n    /* For the last block, we need to keep a 16 bytes margin so that we can be\n       sure that all distances are at most window size - 16.\n       For all other blocks, we only need to keep a margin of 5 bytes so that\n       we don't go over the block size with a copy. */\n    const size_t len_limit = BROTLI_MIN(size_t, block_size - kMinMatchLen,\n                                        input_size - kInputMarginBytes);\n    const uint8_t* ip_limit = input + len_limit;\n\n    uint32_t next_hash;\n    for (next_hash = Hash(++ip, shift); ; ) {\n      /* Step 1: Scan forward in the input looking for a 5-byte-long match.\n         If we get close to exhausting the input then goto emit_remainder.\n\n         Heuristic match skipping: If 32 bytes are scanned with no matches\n         found, start looking only at every other byte. If 32 more bytes are\n         scanned, look at every third byte, etc.. When a match is found,\n         immediately go back to looking at every byte. This is a small loss\n         (~5% performance, ~0.1% density) for compressible data due to more\n         bookkeeping, but for non-compressible data (such as JPEG) it's a huge\n         win since the compressor quickly \"realizes\" the data is incompressible\n         and doesn't bother looking for matches everywhere.\n\n         The \"skip\" variable keeps track of how many bytes there are since the\n         last match; dividing it by 32 (i.e. right-shifting by five) gives the\n         number of bytes to move ahead for each iteration. */\n      uint32_t skip = 32;\n\n      const uint8_t* next_ip = ip;\n      const uint8_t* candidate;\n      BROTLI_DCHECK(next_emit < ip);\ntrawl:\n      do {\n        uint32_t hash = next_hash;\n        uint32_t bytes_between_hash_lookups = skip++ >> 5;\n        BROTLI_DCHECK(hash == Hash(next_ip, shift));\n        ip = next_ip;\n        next_ip = ip + bytes_between_hash_lookups;\n        if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {\n          goto emit_remainder;\n        }\n        next_hash = Hash(next_ip, shift);\n        candidate = ip - last_distance;\n        if (IsMatch(ip, candidate)) {\n          if (BROTLI_PREDICT_TRUE(candidate < ip)) {\n            table[hash] = (int)(ip - base_ip);\n            break;\n          }\n        }\n        candidate = base_ip + table[hash];\n        BROTLI_DCHECK(candidate >= base_ip);\n        BROTLI_DCHECK(candidate < ip);\n\n        table[hash] = (int)(ip - base_ip);\n      } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate)));\n\n      /* Check copy distance. If candidate is not feasible, continue search.\n         Checking is done outside of hot loop to reduce overhead. */\n      if (ip - candidate > MAX_DISTANCE) goto trawl;\n\n      /* Step 2: Emit the found match together with the literal bytes from\n         \"next_emit\" to the bit stream, and then see if we can find a next match\n         immediately afterwards. Repeat until we find no match for the input\n         without emitting some literal bytes. */\n\n      {\n        /* We have a 5-byte match at ip, and we need to emit bytes in\n           [next_emit, ip). */\n        const uint8_t* base = ip;\n        size_t matched = 5 + FindMatchLengthWithLimit(\n            candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);\n        int distance = (int)(base - candidate);  /* > 0 */\n        size_t insert = (size_t)(base - next_emit);\n        ip += matched;\n        BROTLI_LOG((\"[CompressFragment] pos = %d insert = %lu copy = %d\\n\",\n                    (int)(next_emit - base_ip), (unsigned long)insert, 2));\n        BROTLI_DCHECK(0 == memcmp(base, candidate, matched));\n        if (BROTLI_PREDICT_TRUE(insert < 6210)) {\n          EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,\n                        storage_ix, storage);\n        } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,\n                                             literal_ratio)) {\n          EmitUncompressedMetaBlock(metablock_start, base, mlen_storage_ix - 3,\n                                    storage_ix, storage);\n          input_size -= (size_t)(base - input);\n          input = base;\n          next_emit = input;\n          goto next_block;\n        } else {\n          EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,\n                            storage_ix, storage);\n        }\n        EmitLiterals(next_emit, insert, lit_depth, lit_bits,\n                     storage_ix, storage);\n        if (distance == last_distance) {\n          BrotliWriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storage);\n          ++cmd_histo[64];\n        } else {\n          EmitDistance((size_t)distance, cmd_depth, cmd_bits,\n                       cmd_histo, storage_ix, storage);\n          last_distance = distance;\n        }\n        EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo,\n                                storage_ix, storage);\n        BROTLI_LOG((\"[CompressFragment] pos = %d distance = %d\\n\"\n                    \"[CompressFragment] pos = %d insert = %d copy = %d\\n\"\n                    \"[CompressFragment] pos = %d distance = %d\\n\",\n                    (int)(base - base_ip), (int)distance,\n                    (int)(base - base_ip) + 2, 0, (int)matched - 2,\n                    (int)(base - base_ip) + 2, (int)distance));\n\n        next_emit = ip;\n        if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {\n          goto emit_remainder;\n        }\n        /* We could immediately start working at ip now, but to improve\n           compression we first update \"table\" with the hashes of some positions\n           within the last copy. */\n        {\n          uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);\n          uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);\n          uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);\n          table[prev_hash] = (int)(ip - base_ip - 3);\n          prev_hash = HashBytesAtOffset(input_bytes, 1, shift);\n          table[prev_hash] = (int)(ip - base_ip - 2);\n          prev_hash = HashBytesAtOffset(input_bytes, 2, shift);\n          table[prev_hash] = (int)(ip - base_ip - 1);\n\n          candidate = base_ip + table[cur_hash];\n          table[cur_hash] = (int)(ip - base_ip);\n        }\n      }\n\n      while (IsMatch(ip, candidate)) {\n        /* We have a 5-byte match at ip, and no need to emit any literal bytes\n           prior to ip. */\n        const uint8_t* base = ip;\n        size_t matched = 5 + FindMatchLengthWithLimit(\n            candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);\n        if (ip - candidate > MAX_DISTANCE) break;\n        ip += matched;\n        last_distance = (int)(base - candidate);  /* > 0 */\n        BROTLI_DCHECK(0 == memcmp(base, candidate, matched));\n        EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo,\n                    storage_ix, storage);\n        EmitDistance((size_t)last_distance, cmd_depth, cmd_bits,\n                     cmd_histo, storage_ix, storage);\n        BROTLI_LOG((\"[CompressFragment] pos = %d insert = %d copy = %d\\n\"\n                    \"[CompressFragment] pos = %d distance = %d\\n\",\n                    (int)(base - base_ip), 0, (int)matched,\n                    (int)(base - base_ip), (int)last_distance));\n\n        next_emit = ip;\n        if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {\n          goto emit_remainder;\n        }\n        /* We could immediately start working at ip now, but to improve\n           compression we first update \"table\" with the hashes of some positions\n           within the last copy. */\n        {\n          uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);\n          uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);\n          uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);\n          table[prev_hash] = (int)(ip - base_ip - 3);\n          prev_hash = HashBytesAtOffset(input_bytes, 1, shift);\n          table[prev_hash] = (int)(ip - base_ip - 2);\n          prev_hash = HashBytesAtOffset(input_bytes, 2, shift);\n          table[prev_hash] = (int)(ip - base_ip - 1);\n\n          candidate = base_ip + table[cur_hash];\n          table[cur_hash] = (int)(ip - base_ip);\n        }\n      }\n\n      next_hash = Hash(++ip, shift);\n    }\n  }\n\n emit_remainder:\n  BROTLI_DCHECK(next_emit <= ip_end);\n  input += block_size;\n  input_size -= block_size;\n  block_size = BROTLI_MIN(size_t, input_size, kMergeBlockSize);\n\n  /* Decide if we want to continue this meta-block instead of emitting the\n     last insert-only command. */\n  if (input_size > 0 &&\n      total_block_size + block_size <= (1 << 20) &&\n      ShouldMergeBlock(s, input, block_size, lit_depth)) {\n    BROTLI_DCHECK(total_block_size > (1 << 16));\n    /* Update the size of the current meta-block and continue emitting commands.\n       We can do this because the current size and the new size both have 5\n       nibbles. */\n    total_block_size += block_size;\n    UpdateBits(20, (uint32_t)(total_block_size - 1), mlen_storage_ix, storage);\n    goto emit_commands;\n  }\n\n  /* Emit the remaining bytes as literals. */\n  if (next_emit < ip_end) {\n    const size_t insert = (size_t)(ip_end - next_emit);\n    BROTLI_LOG((\"[CompressFragment] pos = %d insert = %lu copy = %d\\n\",\n                (int)(next_emit - base_ip), (unsigned long)insert, 2));\n    if (BROTLI_PREDICT_TRUE(insert < 6210)) {\n      EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,\n                    storage_ix, storage);\n      EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, storage);\n    } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,\n                                         literal_ratio)) {\n      EmitUncompressedMetaBlock(metablock_start, ip_end, mlen_storage_ix - 3,\n                                storage_ix, storage);\n    } else {\n      EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,\n                        storage_ix, storage);\n      EmitLiterals(next_emit, insert, lit_depth, lit_bits,\n                   storage_ix, storage);\n    }\n  }\n  next_emit = ip_end;\n\nnext_block:\n  /* If we have more data, write a new meta-block header and prefix codes and\n     then continue emitting commands. */\n  if (input_size > 0) {\n    metablock_start = input;\n    block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);\n    total_block_size = block_size;\n    /* Save the bit position of the MLEN field of the meta-block header, so that\n       we can update it later if we decide to extend this meta-block. */\n    mlen_storage_ix = *storage_ix + 3;\n    BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);\n    /* No block splits, no contexts. */\n    BrotliWriteBits(13, 0, storage_ix, storage);\n    literal_ratio = BuildAndStoreLiteralPrefixCode(\n        s, input, block_size, lit_depth, lit_bits, storage_ix, storage);\n    BuildAndStoreCommandPrefixCode(s, storage_ix, storage);\n    goto emit_commands;\n  }\n\n  if (!is_last) {\n    /* If this is not the last block, update the command and distance prefix\n       codes for the next block and store the compressed forms. */\n    s->cmd_code[0] = 0;\n    s->cmd_code_numbits = 0;\n    BuildAndStoreCommandPrefixCode(s, &s->cmd_code_numbits, s->cmd_code);\n  }\n}\n\n#define FOR_TABLE_BITS_(X) X(9) X(11) X(13) X(15)\n\n#define BAKE_METHOD_PARAM_(B) \\\nstatic BROTLI_NOINLINE void BrotliCompressFragmentFastImpl ## B(             \\\n    BrotliOnePassArena* s, const uint8_t* input, size_t input_size,          \\\n    BROTLI_BOOL is_last, int* table, size_t* storage_ix, uint8_t* storage) { \\\n  BrotliCompressFragmentFastImpl(s, input, input_size, is_last, table, B,    \\\n      storage_ix, storage);                                                  \\\n}\nFOR_TABLE_BITS_(BAKE_METHOD_PARAM_)\n#undef BAKE_METHOD_PARAM_\n\nvoid BrotliCompressFragmentFast(\n    BrotliOnePassArena* s, const uint8_t* input, size_t input_size,\n    BROTLI_BOOL is_last, int* table, size_t table_size,\n    size_t* storage_ix, uint8_t* storage) {\n  const size_t initial_storage_ix = *storage_ix;\n  const size_t table_bits = Log2FloorNonZero(table_size);\n\n  if (input_size == 0) {\n    BROTLI_DCHECK(is_last);\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* islast */\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* isempty */\n    *storage_ix = (*storage_ix + 7u) & ~7u;\n    return;\n  }\n\n  switch (table_bits) {\n#define CASE_(B)                                                     \\\n    case B:                                                          \\\n      BrotliCompressFragmentFastImpl ## B(                           \\\n          s, input, input_size, is_last, table, storage_ix, storage);\\\n      break;\n    FOR_TABLE_BITS_(CASE_)\n#undef CASE_\n    default: BROTLI_DCHECK(0); break;\n  }\n\n  /* If output is larger than single uncompressed block, rewrite it. */\n  if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {\n    EmitUncompressedMetaBlock(input, input + input_size, initial_storage_ix,\n                              storage_ix, storage);\n  }\n\n  if (is_last) {\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* islast */\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* isempty */\n    *storage_ix = (*storage_ix + 7u) & ~7u;\n  }\n}\n\n#undef FOR_TABLE_BITS_\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/compress_fragment.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function for fast encoding of an input fragment, independently from the input\n   history. This function uses one-pass processing: when we find a backward\n   match, we immediately emit the corresponding command and literal codes to\n   the bit stream. */\n\n#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_H_\n#define BROTLI_ENC_COMPRESS_FRAGMENT_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"entropy_encode.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct BrotliOnePassArena {\n  uint8_t lit_depth[256];\n  uint16_t lit_bits[256];\n\n  /* Command and distance prefix codes (each 64 symbols, stored back-to-back)\n     used for the next block. The command prefix code is over a smaller alphabet\n     with the following 64 symbols:\n        0 - 15: insert length code 0, copy length code 0 - 15, same distance\n       16 - 39: insert length code 0, copy length code 0 - 23\n       40 - 63: insert length code 0 - 23, copy length code 0\n     Note that symbols 16 and 40 represent the same code in the full alphabet,\n     but we do not use either of them. */\n  uint8_t cmd_depth[128];\n  uint16_t cmd_bits[128];\n  uint32_t cmd_histo[128];\n\n  /* The compressed form of the command and distance prefix codes for the next\n     block. */\n  uint8_t cmd_code[512];\n  size_t cmd_code_numbits;\n\n  HuffmanTree tree[2 * BROTLI_NUM_LITERAL_SYMBOLS + 1];\n  uint32_t histogram[256];\n  uint8_t tmp_depth[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint16_t tmp_bits[64];\n} BrotliOnePassArena;\n\n/* Compresses \"input\" string to the \"*storage\" buffer as one or more complete\n   meta-blocks, and updates the \"*storage_ix\" bit position.\n\n   If \"is_last\" is 1, emits an additional empty last meta-block.\n\n   \"cmd_depth\" and \"cmd_bits\" contain the command and distance prefix codes\n   (see comment in encode.h) used for the encoding of this input fragment.\n   If \"is_last\" is 0, they are updated to reflect the statistics\n   of this input fragment, to be used for the encoding of the next fragment.\n\n   \"*cmd_code_numbits\" is the number of bits of the compressed representation\n   of the command and distance prefix codes, and \"cmd_code\" is an array of\n   at least \"(*cmd_code_numbits + 7) >> 3\" size that contains the compressed\n   command and distance prefix codes. If \"is_last\" is 0, these are also\n   updated to represent the updated \"cmd_depth\" and \"cmd_bits\".\n\n   REQUIRES: \"input_size\" is greater than zero, or \"is_last\" is 1.\n   REQUIRES: \"input_size\" is less or equal to maximal metablock size (1 << 24).\n   REQUIRES: All elements in \"table[0..table_size-1]\" are initialized to zero.\n   REQUIRES: \"table_size\" is an odd (9, 11, 13, 15) power of two\n   OUTPUT: maximal copy distance <= |input_size|\n   OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */\nBROTLI_INTERNAL void BrotliCompressFragmentFast(BrotliOnePassArena* s,\n                                                const uint8_t* input,\n                                                size_t input_size,\n                                                BROTLI_BOOL is_last,\n                                                int* table, size_t table_size,\n                                                size_t* storage_ix,\n                                                uint8_t* storage);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_COMPRESS_FRAGMENT_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/compress_fragment_two_pass.c",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function for fast encoding of an input fragment, independently from the input\n   history. This function uses two-pass processing: in the first pass we save\n   the found backward matches and literal bytes into a buffer, and in the\n   second pass we emit them into the bit stream using prefix codes built based\n   on the actual command and literal byte histograms. */\n\n#include \"compress_fragment_two_pass.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"bit_cost.h\"\n#include \"brotli_bit_stream.h\"\n#include \"entropy_encode.h\"\n#include \"fast_log.h\"\n#include \"find_match_length.h\"\n#include \"hash_base.h\"\n#include \"write_bits.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)\n\nstatic BROTLI_INLINE uint32_t Hash(const uint8_t* p,\n    size_t shift, size_t length) {\n  const uint64_t h =\n      (BROTLI_UNALIGNED_LOAD64LE(p) << ((8 - length) * 8)) * kHashMul32;\n  return (uint32_t)(h >> shift);\n}\n\nstatic BROTLI_INLINE uint32_t HashBytesAtOffset(uint64_t v, size_t offset,\n    size_t shift, size_t length) {\n  BROTLI_DCHECK(offset <= 8 - length);\n  {\n    const uint64_t h = ((v >> (8 * offset)) << ((8 - length) * 8)) * kHashMul32;\n    return (uint32_t)(h >> shift);\n  }\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2,\n    size_t length) {\n  if (BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2)) {\n    if (length == 4) return BROTLI_TRUE;\n    return TO_BROTLI_BOOL(p1[4] == p2[4] && p1[5] == p2[5]);\n  }\n  return BROTLI_FALSE;\n}\n\n/* Builds a command and distance prefix code (each 64 symbols) into \"depth\" and\n   \"bits\" based on \"histogram\" and stores it into the bit stream. */\nstatic void BuildAndStoreCommandPrefixCode(BrotliTwoPassArena* s,\n                                           size_t* storage_ix,\n                                           uint8_t* storage) {\n  /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */\n  /* TODO(eustas): initialize once. */\n  memset(s->tmp_depth, 0, sizeof(s->tmp_depth));\n  BrotliCreateHuffmanTree(s->cmd_histo, 64, 15, s->tmp_tree, s->cmd_depth);\n  BrotliCreateHuffmanTree(&s->cmd_histo[64], 64, 14, s->tmp_tree,\n                          &s->cmd_depth[64]);\n  /* We have to jump through a few hoops here in order to compute\n     the command bits because the symbols are in a different order than in\n     the full alphabet. This looks complicated, but having the symbols\n     in this order in the command bits saves a few branches in the Emit*\n     functions. */\n  memcpy(s->tmp_depth, s->cmd_depth + 24, 24);\n  memcpy(s->tmp_depth + 24, s->cmd_depth, 8);\n  memcpy(s->tmp_depth + 32, s->cmd_depth + 48, 8);\n  memcpy(s->tmp_depth + 40, s->cmd_depth + 8, 8);\n  memcpy(s->tmp_depth + 48, s->cmd_depth + 56, 8);\n  memcpy(s->tmp_depth + 56, s->cmd_depth + 16, 8);\n  BrotliConvertBitDepthsToSymbols(s->tmp_depth, 64, s->tmp_bits);\n  memcpy(s->cmd_bits, s->tmp_bits + 24, 16);\n  memcpy(s->cmd_bits + 8, s->tmp_bits + 40, 16);\n  memcpy(s->cmd_bits + 16, s->tmp_bits + 56, 16);\n  memcpy(s->cmd_bits + 24, s->tmp_bits, 48);\n  memcpy(s->cmd_bits + 48, s->tmp_bits + 32, 16);\n  memcpy(s->cmd_bits + 56, s->tmp_bits + 48, 16);\n  BrotliConvertBitDepthsToSymbols(&s->cmd_depth[64], 64, &s->cmd_bits[64]);\n  {\n    /* Create the bit length array for the full command alphabet. */\n    size_t i;\n    memset(s->tmp_depth, 0, 64); /* only 64 first values were used */\n    memcpy(s->tmp_depth, s->cmd_depth + 24, 8);\n    memcpy(s->tmp_depth + 64, s->cmd_depth + 32, 8);\n    memcpy(s->tmp_depth + 128, s->cmd_depth + 40, 8);\n    memcpy(s->tmp_depth + 192, s->cmd_depth + 48, 8);\n    memcpy(s->tmp_depth + 384, s->cmd_depth + 56, 8);\n    for (i = 0; i < 8; ++i) {\n      s->tmp_depth[128 + 8 * i] = s->cmd_depth[i];\n      s->tmp_depth[256 + 8 * i] = s->cmd_depth[8 + i];\n      s->tmp_depth[448 + 8 * i] = s->cmd_depth[16 + i];\n    }\n    BrotliStoreHuffmanTree(s->tmp_depth, BROTLI_NUM_COMMAND_SYMBOLS,\n                           s->tmp_tree, storage_ix, storage);\n  }\n  BrotliStoreHuffmanTree(&s->cmd_depth[64], 64, s->tmp_tree, storage_ix,\n                         storage);\n}\n\nstatic BROTLI_INLINE void EmitInsertLen(\n    uint32_t insertlen, uint32_t** commands) {\n  if (insertlen < 6) {\n    **commands = insertlen;\n  } else if (insertlen < 130) {\n    const uint32_t tail = insertlen - 2;\n    const uint32_t nbits = Log2FloorNonZero(tail) - 1u;\n    const uint32_t prefix = tail >> nbits;\n    const uint32_t inscode = (nbits << 1) + prefix + 2;\n    const uint32_t extra = tail - (prefix << nbits);\n    **commands = inscode | (extra << 8);\n  } else if (insertlen < 2114) {\n    const uint32_t tail = insertlen - 66;\n    const uint32_t nbits = Log2FloorNonZero(tail);\n    const uint32_t code = nbits + 10;\n    const uint32_t extra = tail - (1u << nbits);\n    **commands = code | (extra << 8);\n  } else if (insertlen < 6210) {\n    const uint32_t extra = insertlen - 2114;\n    **commands = 21 | (extra << 8);\n  } else if (insertlen < 22594) {\n    const uint32_t extra = insertlen - 6210;\n    **commands = 22 | (extra << 8);\n  } else {\n    const uint32_t extra = insertlen - 22594;\n    **commands = 23 | (extra << 8);\n  }\n  ++(*commands);\n}\n\nstatic BROTLI_INLINE void EmitCopyLen(size_t copylen, uint32_t** commands) {\n  if (copylen < 10) {\n    **commands = (uint32_t)(copylen + 38);\n  } else if (copylen < 134) {\n    const size_t tail = copylen - 6;\n    const size_t nbits = Log2FloorNonZero(tail) - 1;\n    const size_t prefix = tail >> nbits;\n    const size_t code = (nbits << 1) + prefix + 44;\n    const size_t extra = tail - (prefix << nbits);\n    **commands = (uint32_t)(code | (extra << 8));\n  } else if (copylen < 2118) {\n    const size_t tail = copylen - 70;\n    const size_t nbits = Log2FloorNonZero(tail);\n    const size_t code = nbits + 52;\n    const size_t extra = tail - ((size_t)1 << nbits);\n    **commands = (uint32_t)(code | (extra << 8));\n  } else {\n    const size_t extra = copylen - 2118;\n    **commands = (uint32_t)(63 | (extra << 8));\n  }\n  ++(*commands);\n}\n\nstatic BROTLI_INLINE void EmitCopyLenLastDistance(\n    size_t copylen, uint32_t** commands) {\n  if (copylen < 12) {\n    **commands = (uint32_t)(copylen + 20);\n    ++(*commands);\n  } else if (copylen < 72) {\n    const size_t tail = copylen - 8;\n    const size_t nbits = Log2FloorNonZero(tail) - 1;\n    const size_t prefix = tail >> nbits;\n    const size_t code = (nbits << 1) + prefix + 28;\n    const size_t extra = tail - (prefix << nbits);\n    **commands = (uint32_t)(code | (extra << 8));\n    ++(*commands);\n  } else if (copylen < 136) {\n    const size_t tail = copylen - 8;\n    const size_t code = (tail >> 5) + 54;\n    const size_t extra = tail & 31;\n    **commands = (uint32_t)(code | (extra << 8));\n    ++(*commands);\n    **commands = 64;\n    ++(*commands);\n  } else if (copylen < 2120) {\n    const size_t tail = copylen - 72;\n    const size_t nbits = Log2FloorNonZero(tail);\n    const size_t code = nbits + 52;\n    const size_t extra = tail - ((size_t)1 << nbits);\n    **commands = (uint32_t)(code | (extra << 8));\n    ++(*commands);\n    **commands = 64;\n    ++(*commands);\n  } else {\n    const size_t extra = copylen - 2120;\n    **commands = (uint32_t)(63 | (extra << 8));\n    ++(*commands);\n    **commands = 64;\n    ++(*commands);\n  }\n}\n\nstatic BROTLI_INLINE void EmitDistance(uint32_t distance, uint32_t** commands) {\n  uint32_t d = distance + 3;\n  uint32_t nbits = Log2FloorNonZero(d) - 1;\n  const uint32_t prefix = (d >> nbits) & 1;\n  const uint32_t offset = (2 + prefix) << nbits;\n  const uint32_t distcode = 2 * (nbits - 1) + prefix + 80;\n  uint32_t extra = d - offset;\n  **commands = distcode | (extra << 8);\n  ++(*commands);\n}\n\n/* REQUIRES: len <= 1 << 24. */\nstatic void BrotliStoreMetaBlockHeader(\n    size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,\n    uint8_t* storage) {\n  size_t nibbles = 6;\n  /* ISLAST */\n  BrotliWriteBits(1, 0, storage_ix, storage);\n  if (len <= (1U << 16)) {\n    nibbles = 4;\n  } else if (len <= (1U << 20)) {\n    nibbles = 5;\n  }\n  BrotliWriteBits(2, nibbles - 4, storage_ix, storage);\n  BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);\n  /* ISUNCOMPRESSED */\n  BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);\n}\n\nstatic BROTLI_INLINE void CreateCommands(const uint8_t* input,\n    size_t block_size, size_t input_size, const uint8_t* base_ip, int* table,\n    size_t table_bits, size_t min_match,\n    uint8_t** literals, uint32_t** commands) {\n  /* \"ip\" is the input pointer. */\n  const uint8_t* ip = input;\n  const size_t shift = 64u - table_bits;\n  const uint8_t* ip_end = input + block_size;\n  /* \"next_emit\" is a pointer to the first byte that is not covered by a\n     previous copy. Bytes between \"next_emit\" and the start of the next copy or\n     the end of the input will be emitted as literal bytes. */\n  const uint8_t* next_emit = input;\n\n  int last_distance = -1;\n  const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;\n\n  if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {\n    /* For the last block, we need to keep a 16 bytes margin so that we can be\n       sure that all distances are at most window size - 16.\n       For all other blocks, we only need to keep a margin of 5 bytes so that\n       we don't go over the block size with a copy. */\n    const size_t len_limit = BROTLI_MIN(size_t, block_size - min_match,\n                                        input_size - kInputMarginBytes);\n    const uint8_t* ip_limit = input + len_limit;\n\n    uint32_t next_hash;\n    for (next_hash = Hash(++ip, shift, min_match); ; ) {\n      /* Step 1: Scan forward in the input looking for a 6-byte-long match.\n         If we get close to exhausting the input then goto emit_remainder.\n\n         Heuristic match skipping: If 32 bytes are scanned with no matches\n         found, start looking only at every other byte. If 32 more bytes are\n         scanned, look at every third byte, etc.. When a match is found,\n         immediately go back to looking at every byte. This is a small loss\n         (~5% performance, ~0.1% density) for compressible data due to more\n         bookkeeping, but for non-compressible data (such as JPEG) it's a huge\n         win since the compressor quickly \"realizes\" the data is incompressible\n         and doesn't bother looking for matches everywhere.\n\n         The \"skip\" variable keeps track of how many bytes there are since the\n         last match; dividing it by 32 (ie. right-shifting by five) gives the\n         number of bytes to move ahead for each iteration. */\n      uint32_t skip = 32;\n\n      const uint8_t* next_ip = ip;\n      const uint8_t* candidate;\n\n      BROTLI_DCHECK(next_emit < ip);\ntrawl:\n      do {\n        uint32_t hash = next_hash;\n        uint32_t bytes_between_hash_lookups = skip++ >> 5;\n        ip = next_ip;\n        BROTLI_DCHECK(hash == Hash(ip, shift, min_match));\n        next_ip = ip + bytes_between_hash_lookups;\n        if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {\n          goto emit_remainder;\n        }\n        next_hash = Hash(next_ip, shift, min_match);\n        candidate = ip - last_distance;\n        if (IsMatch(ip, candidate, min_match)) {\n          if (BROTLI_PREDICT_TRUE(candidate < ip)) {\n            table[hash] = (int)(ip - base_ip);\n            break;\n          }\n        }\n        candidate = base_ip + table[hash];\n        BROTLI_DCHECK(candidate >= base_ip);\n        BROTLI_DCHECK(candidate < ip);\n\n        table[hash] = (int)(ip - base_ip);\n      } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate, min_match)));\n\n      /* Check copy distance. If candidate is not feasible, continue search.\n         Checking is done outside of hot loop to reduce overhead. */\n      if (ip - candidate > MAX_DISTANCE) goto trawl;\n\n      /* Step 2: Emit the found match together with the literal bytes from\n         \"next_emit\", and then see if we can find a next match immediately\n         afterwards. Repeat until we find no match for the input\n         without emitting some literal bytes. */\n\n      {\n        /* We have a 6-byte match at ip, and we need to emit bytes in\n           [next_emit, ip). */\n        const uint8_t* base = ip;\n        size_t matched = min_match + FindMatchLengthWithLimit(\n            candidate + min_match, ip + min_match,\n            (size_t)(ip_end - ip) - min_match);\n        int distance = (int)(base - candidate);  /* > 0 */\n        int insert = (int)(base - next_emit);\n        ip += matched;\n        BROTLI_DCHECK(0 == memcmp(base, candidate, matched));\n        EmitInsertLen((uint32_t)insert, commands);\n        BROTLI_LOG((\"[CompressFragment] pos = %d insert = %d copy = %d\\n\",\n                    (int)(next_emit - base_ip), insert, 2));\n        memcpy(*literals, next_emit, (size_t)insert);\n        *literals += insert;\n        if (distance == last_distance) {\n          **commands = 64;\n          ++(*commands);\n        } else {\n          EmitDistance((uint32_t)distance, commands);\n          last_distance = distance;\n        }\n        EmitCopyLenLastDistance(matched, commands);\n        BROTLI_LOG((\"[CompressFragment] pos = %d distance = %d\\n\"\n                    \"[CompressFragment] pos = %d insert = %d copy = %d\\n\"\n                    \"[CompressFragment] pos = %d distance = %d\\n\",\n                    (int)(base - base_ip), (int)distance,\n                    (int)(base - base_ip) + 2, 0, (int)matched - 2,\n                    (int)(base - base_ip) + 2, (int)distance));\n\n        next_emit = ip;\n        if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {\n          goto emit_remainder;\n        }\n        {\n          /* We could immediately start working at ip now, but to improve\n             compression we first update \"table\" with the hashes of some\n             positions within the last copy. */\n          uint64_t input_bytes;\n          uint32_t cur_hash;\n          uint32_t prev_hash;\n          if (min_match == 4) {\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);\n            cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 3);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 2);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 1);\n          } else {\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 5);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 4);\n            prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 3);\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);\n            cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 2);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 1);\n          }\n\n          candidate = base_ip + table[cur_hash];\n          table[cur_hash] = (int)(ip - base_ip);\n        }\n      }\n\n      while (ip - candidate <= MAX_DISTANCE &&\n          IsMatch(ip, candidate, min_match)) {\n        /* We have a 6-byte match at ip, and no need to emit any\n           literal bytes prior to ip. */\n        const uint8_t* base = ip;\n        size_t matched = min_match + FindMatchLengthWithLimit(\n            candidate + min_match, ip + min_match,\n            (size_t)(ip_end - ip) - min_match);\n        ip += matched;\n        last_distance = (int)(base - candidate);  /* > 0 */\n        BROTLI_DCHECK(0 == memcmp(base, candidate, matched));\n        EmitCopyLen(matched, commands);\n        EmitDistance((uint32_t)last_distance, commands);\n        BROTLI_LOG((\"[CompressFragment] pos = %d insert = %d copy = %d\\n\"\n                    \"[CompressFragment] pos = %d distance = %d\\n\",\n                    (int)(base - base_ip), 0, (int)matched,\n                    (int)(base - base_ip), (int)last_distance));\n\n        next_emit = ip;\n        if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {\n          goto emit_remainder;\n        }\n        {\n          /* We could immediately start working at ip now, but to improve\n             compression we first update \"table\" with the hashes of some\n             positions within the last copy. */\n          uint64_t input_bytes;\n          uint32_t cur_hash;\n          uint32_t prev_hash;\n          if (min_match == 4) {\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);\n            cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 3);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 2);\n            prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 1);\n          } else {\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 5);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 4);\n            prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 3);\n            input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);\n            cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);\n            prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 2);\n            prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);\n            table[prev_hash] = (int)(ip - base_ip - 1);\n          }\n\n          candidate = base_ip + table[cur_hash];\n          table[cur_hash] = (int)(ip - base_ip);\n        }\n      }\n\n      next_hash = Hash(++ip, shift, min_match);\n    }\n  }\n\nemit_remainder:\n  BROTLI_DCHECK(next_emit <= ip_end);\n  /* Emit the remaining bytes as literals. */\n  if (next_emit < ip_end) {\n    const uint32_t insert = (uint32_t)(ip_end - next_emit);\n    EmitInsertLen(insert, commands);\n    BROTLI_LOG((\"[CompressFragment] pos = %d insert = %d copy = %d\\n\",\n                (int)(next_emit - base_ip), insert, 2));\n    memcpy(*literals, next_emit, insert);\n    *literals += insert;\n  }\n}\n\nstatic void StoreCommands(BrotliTwoPassArena* s,\n                          const uint8_t* literals, const size_t num_literals,\n                          const uint32_t* commands, const size_t num_commands,\n                          size_t* storage_ix, uint8_t* storage) {\n  static const BROTLI_MODEL(\"small\") uint32_t kNumExtraBits[128] = {\n      0,  0,  0,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,  4,  5,  5,\n      6,  7,  8,  9,  10, 12, 14, 24, 0,  0,  0,  0,  0,  0,  0,  0,\n      1,  1,  2,  2,  3,  3,  4,  4,  0,  0,  0,  0,  0,  0,  0,  0,\n      1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  7,  8,  9,  10, 24,\n      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,\n      1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,\n      9,  9,  10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16,\n      17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24,\n  };\n  static const BROTLI_MODEL(\"small\") uint32_t kInsertOffset[24] = {\n      0,  1,  2,  3,  4,   5,   6,   8,   10,   14,   18,   26,\n      34, 50, 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594,\n  };\n\n  size_t i;\n  memset(s->lit_histo, 0, sizeof(s->lit_histo));\n  /* TODO(eustas): is that necessary? */\n  memset(s->cmd_depth, 0, sizeof(s->cmd_depth));\n  /* TODO(eustas): is that necessary? */\n  memset(s->cmd_bits, 0, sizeof(s->cmd_bits));\n  memset(s->cmd_histo, 0, sizeof(s->cmd_histo));\n  for (i = 0; i < num_literals; ++i) {\n    ++s->lit_histo[literals[i]];\n  }\n  BrotliBuildAndStoreHuffmanTreeFast(s->tmp_tree, s->lit_histo, num_literals,\n                                     /* max_bits = */ 8, s->lit_depth,\n                                     s->lit_bits, storage_ix, storage);\n\n  for (i = 0; i < num_commands; ++i) {\n    const uint32_t code = commands[i] & 0xFF;\n    BROTLI_DCHECK(code < 128);\n    ++s->cmd_histo[code];\n  }\n  s->cmd_histo[1] += 1;\n  s->cmd_histo[2] += 1;\n  s->cmd_histo[64] += 1;\n  s->cmd_histo[84] += 1;\n  BuildAndStoreCommandPrefixCode(s, storage_ix, storage);\n\n  for (i = 0; i < num_commands; ++i) {\n    const uint32_t cmd = commands[i];\n    const uint32_t code = cmd & 0xFF;\n    const uint32_t extra = cmd >> 8;\n    BROTLI_DCHECK(code < 128);\n    BrotliWriteBits(s->cmd_depth[code], s->cmd_bits[code], storage_ix, storage);\n    BrotliWriteBits(kNumExtraBits[code], extra, storage_ix, storage);\n    if (code < 24) {\n      const uint32_t insert = kInsertOffset[code] + extra;\n      uint32_t j;\n      for (j = 0; j < insert; ++j) {\n        const uint8_t lit = *literals;\n        BrotliWriteBits(s->lit_depth[lit], s->lit_bits[lit], storage_ix,\n                        storage);\n        ++literals;\n      }\n    }\n  }\n}\n\n/* Acceptable loss for uncompressible speedup is 2% */\n#define MIN_RATIO 0.98\n#define SAMPLE_RATE 43\n\nstatic BROTLI_BOOL ShouldCompress(BrotliTwoPassArena* s,\n    const uint8_t* input, size_t input_size, size_t num_literals) {\n  double corpus_size = (double)input_size;\n  if ((double)num_literals < MIN_RATIO * corpus_size) {\n    return BROTLI_TRUE;\n  } else {\n    const double max_total_bit_cost = corpus_size * 8 * MIN_RATIO / SAMPLE_RATE;\n    size_t i;\n    memset(s->lit_histo, 0, sizeof(s->lit_histo));\n    for (i = 0; i < input_size; i += SAMPLE_RATE) {\n      ++s->lit_histo[input[i]];\n    }\n    return TO_BROTLI_BOOL(\n        BrotliBitsEntropy(s->lit_histo, 256) < max_total_bit_cost);\n  }\n}\n\nstatic void RewindBitPosition(const size_t new_storage_ix,\n                              size_t* storage_ix, uint8_t* storage) {\n  const size_t bitpos = new_storage_ix & 7;\n  const size_t mask = (1u << bitpos) - 1;\n  storage[new_storage_ix >> 3] &= (uint8_t)mask;\n  *storage_ix = new_storage_ix;\n}\n\nstatic void EmitUncompressedMetaBlock(const uint8_t* input, size_t input_size,\n                                      size_t* storage_ix, uint8_t* storage) {\n  BrotliStoreMetaBlockHeader(input_size, 1, storage_ix, storage);\n  *storage_ix = (*storage_ix + 7u) & ~7u;\n  memcpy(&storage[*storage_ix >> 3], input, input_size);\n  *storage_ix += input_size << 3;\n  storage[*storage_ix >> 3] = 0;\n}\n\nstatic BROTLI_INLINE void BrotliCompressFragmentTwoPassImpl(\n    BrotliTwoPassArena* s, const uint8_t* input, size_t input_size,\n    BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,\n    int* table, size_t table_bits, size_t min_match,\n    size_t* storage_ix, uint8_t* storage) {\n  /* Save the start of the first block for position and distance computations.\n  */\n  const uint8_t* base_ip = input;\n  BROTLI_UNUSED(is_last);\n\n  while (input_size > 0) {\n    size_t block_size =\n        BROTLI_MIN(size_t, input_size, kCompressFragmentTwoPassBlockSize);\n    uint32_t* commands = command_buf;\n    uint8_t* literals = literal_buf;\n    size_t num_literals;\n    CreateCommands(input, block_size, input_size, base_ip, table,\n                   table_bits, min_match, &literals, &commands);\n    num_literals = (size_t)(literals - literal_buf);\n    if (ShouldCompress(s, input, block_size, num_literals)) {\n      const size_t num_commands = (size_t)(commands - command_buf);\n      BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);\n      /* No block splits, no contexts. */\n      BrotliWriteBits(13, 0, storage_ix, storage);\n      StoreCommands(s, literal_buf, num_literals, command_buf, num_commands,\n                    storage_ix, storage);\n    } else {\n      /* Since we did not find many backward references and the entropy of\n         the data is close to 8 bits, we can simply emit an uncompressed block.\n         This makes compression speed of uncompressible data about 3x faster. */\n      EmitUncompressedMetaBlock(input, block_size, storage_ix, storage);\n    }\n    input += block_size;\n    input_size -= block_size;\n  }\n}\n\n#define FOR_TABLE_BITS_(X) \\\n  X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17)\n\n#define BAKE_METHOD_PARAM_(B)                                                  \\\nstatic BROTLI_NOINLINE void BrotliCompressFragmentTwoPassImpl ## B(            \\\n    BrotliTwoPassArena* s, const uint8_t* input, size_t input_size,            \\\n    BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,          \\\n    int* table, size_t* storage_ix, uint8_t* storage) {                        \\\n  size_t min_match = (B <= 15) ? 4 : 6;                                        \\\n  BrotliCompressFragmentTwoPassImpl(s, input, input_size, is_last, command_buf,\\\n      literal_buf, table, B, min_match, storage_ix, storage);                  \\\n}\nFOR_TABLE_BITS_(BAKE_METHOD_PARAM_)\n#undef BAKE_METHOD_PARAM_\n\nvoid BrotliCompressFragmentTwoPass(\n    BrotliTwoPassArena* s, const uint8_t* input, size_t input_size,\n    BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,\n    int* table, size_t table_size, size_t* storage_ix, uint8_t* storage) {\n  const size_t initial_storage_ix = *storage_ix;\n  const size_t table_bits = Log2FloorNonZero(table_size);\n  switch (table_bits) {\n#define CASE_(B)                                      \\\n    case B:                                           \\\n      BrotliCompressFragmentTwoPassImpl ## B(         \\\n          s, input, input_size, is_last, command_buf, \\\n          literal_buf, table, storage_ix, storage);   \\\n      break;\n    FOR_TABLE_BITS_(CASE_)\n#undef CASE_\n    default: BROTLI_DCHECK(0); break;\n  }\n\n  /* If output is larger than single uncompressed block, rewrite it. */\n  if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {\n    RewindBitPosition(initial_storage_ix, storage_ix, storage);\n    EmitUncompressedMetaBlock(input, input_size, storage_ix, storage);\n  }\n\n  if (is_last) {\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* islast */\n    BrotliWriteBits(1, 1, storage_ix, storage);  /* isempty */\n    *storage_ix = (*storage_ix + 7u) & ~7u;\n  }\n}\n\n#undef FOR_TABLE_BITS_\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/compress_fragment_two_pass.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function for fast encoding of an input fragment, independently from the input\n   history. This function uses two-pass processing: in the first pass we save\n   the found backward matches and literal bytes into a buffer, and in the\n   second pass we emit them into the bit stream using prefix codes built based\n   on the actual command and literal byte histograms. */\n\n#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_\n#define BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"entropy_encode.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* TODO(eustas): turn to macro. */\nstatic const size_t kCompressFragmentTwoPassBlockSize = 1 << 17;\n\ntypedef struct BrotliTwoPassArena {\n  uint32_t lit_histo[256];\n  uint8_t lit_depth[256];\n  uint16_t lit_bits[256];\n\n  uint32_t cmd_histo[128];\n  uint8_t cmd_depth[128];\n  uint16_t cmd_bits[128];\n\n  /* BuildAndStoreCommandPrefixCode */\n  HuffmanTree tmp_tree[2 * BROTLI_NUM_LITERAL_SYMBOLS + 1];\n  uint8_t tmp_depth[BROTLI_NUM_COMMAND_SYMBOLS];\n  uint16_t tmp_bits[64];\n} BrotliTwoPassArena;\n\n/* Compresses \"input\" string to the \"*storage\" buffer as one or more complete\n   meta-blocks, and updates the \"*storage_ix\" bit position.\n\n   If \"is_last\" is 1, emits an additional empty last meta-block.\n\n   REQUIRES: \"input_size\" is greater than zero, or \"is_last\" is 1.\n   REQUIRES: \"input_size\" is less or equal to maximal metablock size (1 << 24).\n   REQUIRES: \"command_buf\" and \"literal_buf\" point to at least\n              kCompressFragmentTwoPassBlockSize long arrays.\n   REQUIRES: All elements in \"table[0..table_size-1]\" are initialized to zero.\n   REQUIRES: \"table_size\" is a power of two\n   OUTPUT: maximal copy distance <= |input_size|\n   OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */\nBROTLI_INTERNAL void BrotliCompressFragmentTwoPass(BrotliTwoPassArena* s,\n                                                   const uint8_t* input,\n                                                   size_t input_size,\n                                                   BROTLI_BOOL is_last,\n                                                   uint32_t* command_buf,\n                                                   uint8_t* literal_buf,\n                                                   int* table,\n                                                   size_t table_size,\n                                                   size_t* storage_ix,\n                                                   uint8_t* storage);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/dictionary_hash.c",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Hash table on the 4-byte prefixes of static dictionary words. */\n\n#include \"dictionary_hash.h\"\n\n#include \"../common/platform.h\"  /* IWYU pragma: keep */\n#include \"../common/static_init.h\"\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n#include \"../common/dictionary.h\"\n#include \"hash_base.h\"\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\nBROTLI_BOOL BROTLI_COLD BrotliEncoderInitDictionaryHash(\n    const BrotliDictionary* dict, uint16_t* words, uint8_t* lengths) {\n  size_t global_idx = 0;\n  size_t len;\n  size_t i;\n  static const uint8_t frozen_idx[1688] = {0, 0, 8, 164, 32, 56, 31, 191, 36, 4,\n128, 81, 68, 132, 145, 129, 0, 0, 0, 28, 0, 8, 1, 1, 64, 3, 1, 0, 0, 0, 0, 0, 4,\n64, 1, 2, 128, 0, 132, 49, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 1, 0, 36, 152,\n0, 0, 0, 0, 128, 8, 0, 0, 128, 0, 0, 8, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,\n0, 0, 0, 1, 0, 64, 133, 0, 32, 0, 0, 128, 1, 0, 0, 0, 0, 4, 4, 4, 32, 16, 130,\n0, 128, 8, 0, 0, 0, 0, 0, 64, 0, 64, 0, 160, 0, 148, 53, 0, 0, 0, 0, 0, 128, 0,\n130, 0, 0, 0, 8, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 32, 1, 32, 129, 0, 12, 0,\n1, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8,\n0, 0, 2, 0, 0, 0, 0, 0, 32, 0, 0, 0, 2, 66, 128, 0, 0, 16, 0, 0, 0, 0, 64, 1, 6,\n128, 8, 0, 192, 24, 32, 0, 0, 8, 4, 128, 128, 2, 160, 0, 160, 0, 64, 0, 0, 2, 0,\n0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 0, 0, 64, 0, 0, 0, 0, 0, 0, 32, 0, 66, 0, 2, 0,\n4, 0, 8, 0, 2, 0, 0, 33, 8, 0, 0, 0, 8, 0, 128, 162, 4, 128, 0, 2, 33, 0, 160,\n0, 8, 0, 64, 0, 160, 0, 129, 4, 0, 0, 32, 0, 0, 32, 0, 2, 0, 0, 0, 0, 0, 0, 128,\n0, 0, 0, 0, 0, 64, 10, 0, 0, 0, 0, 32, 64, 0, 0, 0, 0, 0, 16, 0, 16, 16, 0, 0,\n80, 2, 0, 0, 0, 0, 8, 0, 0, 16, 0, 8, 0, 0, 0, 8, 64, 128, 0, 0, 0, 8, 208, 0,\n0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 32, 0, 8, 0, 128, 0, 0, 0, 1, 0, 0, 0,\n16, 8, 1, 136, 0, 0, 36, 0, 64, 9, 0, 1, 32, 8, 0, 64, 64, 131, 16, 224, 32, 4,\n0, 4, 5, 160, 0, 131, 0, 4, 96, 0, 0, 184, 192, 0, 177, 205, 96, 0, 0, 0, 0, 2,\n0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 128, 0, 0, 8, 0, 0, 0, 0, 1, 4, 0, 1,\n0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 64, 69, 0, 0, 8, 2, 66, 32, 64, 0, 0, 0,\n0, 0, 1, 0, 128, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 16, 0, 0, 4, 128, 64,\n0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 8, 0, 0, 130, 16, 64, 128, 2, 64, 0, 0, 0, 128,\n2, 192, 64, 0, 65, 0, 0, 0, 16, 0, 0, 0, 32, 4, 2, 2, 76, 0, 0, 0, 4, 72, 52,\n131, 44, 76, 0, 0, 0, 0, 64, 1, 16, 148, 4, 0, 16, 10, 64, 0, 2, 0, 1, 0, 128,\n64, 68, 0, 0, 0, 0, 0, 64, 144, 0, 8, 0, 2, 0, 0, 0, 0, 0, 0, 3, 64, 0, 0, 0, 0,\n1, 128, 0, 0, 32, 66, 0, 0, 0, 40, 0, 18, 0, 0, 0, 0, 0, 33, 0, 0, 32, 0, 0, 32,\n0, 128, 4, 64, 145, 140, 0, 0, 0, 128, 0, 2, 0, 0, 20, 0, 80, 38, 0, 0, 32, 0,\n32, 64, 4, 4, 0, 4, 0, 0, 0, 129, 4, 0, 0, 144, 17, 32, 130, 16, 132, 24, 134,\n0, 0, 64, 2, 5, 50, 8, 194, 33, 1, 68, 117, 1, 8, 32, 161, 54, 0, 130, 34, 0, 0,\n0, 64, 128, 0, 0, 2, 0, 0, 0, 0, 32, 1, 0, 0, 0, 3, 14, 0, 0, 0, 0, 0, 16, 4, 0,\n0, 0, 0, 0, 0, 0, 0, 96, 1, 24, 18, 0, 1, 128, 24, 0, 64, 0, 4, 0, 16, 128, 0,\n64, 0, 0, 0, 64, 0, 8, 0, 0, 0, 0, 0, 66, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n0, 0, 0, 0, 16, 0, 64, 2, 0, 0, 0, 0, 6, 0, 8, 8, 2, 0, 64, 0, 0, 0, 0, 128, 2,\n2, 12, 64, 0, 64, 0, 8, 0, 128, 32, 0, 0, 10, 0, 0, 32, 0, 128, 32, 33, 8, 136,\n0, 96, 64, 0, 0, 0, 0, 0, 64, 4, 16, 4, 8, 0, 0, 0, 16, 0, 2, 0, 0, 1, 128, 0,\n64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 2, 0, 16, 0, 4, 0, 8, 0, 0, 0, 0, 0,\n20, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 136, 0, 0, 0, 0, 0, 8, 0,\n0, 0, 0, 0, 2, 0, 0, 0, 64, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0,\n0, 0, 4, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,\n0, 0, 0, 0, 2, 128, 0, 0, 0, 8, 2, 0, 0, 128, 0, 16, 2, 0, 0, 4, 0, 32, 0, 0, 1,\n4, 64, 64, 0, 4, 0, 1, 0, 16, 0, 32, 68, 4, 4, 65, 10, 0, 20, 37, 18, 1, 148, 0,\n32, 128, 3, 8, 0, 64, 0, 0, 0, 0, 0, 0, 4, 0, 16, 1, 128, 0, 0, 0, 128, 16, 0,\n0, 0, 0, 1, 128, 0, 0, 128, 64, 128, 64, 0, 130, 0, 164, 8, 0, 0, 1, 64, 128, 0,\n18, 0, 2, 150, 0, 8, 0, 0, 64, 0, 81, 0, 0, 16, 128, 2, 8, 36, 32, 129, 4, 144,\n13, 0, 0, 3, 8, 1, 0, 2, 0, 0, 64, 0, 5, 0, 1, 34, 1, 32, 2, 16, 128, 128, 128,\n0, 0, 0, 2, 0, 4, 18, 8, 12, 34, 32, 192, 6, 64, 224, 33, 0, 0, 137, 72, 64, 0,\n24, 8, 128, 128, 0, 16, 0, 32, 128, 128, 132, 8, 0, 0, 16, 0, 64, 0, 0, 4, 0, 0,\n16, 0, 4, 128, 64, 0, 0, 1, 0, 4, 64, 32, 144, 130, 2, 128, 0, 192, 0, 64, 82,\n64, 1, 32, 128, 128, 2, 0, 84, 0, 32, 0, 44, 24, 72, 80, 32, 16, 0, 0, 44, 16,\n96, 64, 1, 72, 131, 0, 0, 0, 16, 0, 0, 165, 0, 129, 2, 49, 48, 64, 64, 12, 64,\n176, 64, 84, 8, 128, 20, 64, 213, 136, 104, 1, 41, 15, 83, 170, 0, 0, 41, 1, 64,\n64, 0, 193, 64, 64, 8, 0, 128, 0, 0, 64, 8, 64, 8, 1, 16, 0, 8, 0, 0, 2, 1, 128,\n28, 84, 141, 97, 0, 0, 68, 0, 0, 129, 8, 0, 16, 8, 32, 0, 64, 0, 0, 0, 24, 0, 0,\n0, 192, 0, 8, 128, 0, 0, 0, 0, 0, 64, 0, 1, 0, 0, 0, 0, 40, 1, 128, 64, 0, 4, 2,\n32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 32, 8, 0, 32, 0, 0, 0, 16, 17, 0,\n2, 4, 0, 0, 33, 128, 2, 0, 0, 0, 0, 129, 0, 2, 0, 0, 0, 36, 0, 32, 2, 0, 0, 0,\n0, 0, 0, 32, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 32, 64, 0, 0, 0, 0, 0, 0,\n32, 0, 0, 32, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 16, 0, 0, 0, 0, 0, 0, 0,\n1, 0, 136, 0, 0, 24, 192, 128, 3, 0, 17, 18, 2, 0, 66, 0, 4, 24, 0, 9, 208, 167,\n0, 144, 20, 64, 0, 130, 64, 0, 2, 16, 136, 8, 74, 32, 0, 168, 0, 65, 32, 8, 12,\n1, 3, 1, 64, 180, 3, 0, 64, 0, 8, 0, 0, 32, 65, 0, 4, 16, 4, 16, 68, 32, 64, 36,\n32, 24, 33, 1, 128, 0, 0, 8, 0, 32, 64, 81, 0, 1, 10, 19, 8, 0, 0, 4, 5, 144, 0,\n0, 8, 128, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 80, 1, 0, 0,\n33, 0, 32, 66, 4, 2, 0, 1, 43, 2, 0, 0, 4, 32, 16, 0, 64, 0, 3, 32, 0, 2, 64,\n64, 116, 0, 65, 52, 64, 0, 17, 64, 192, 96, 8, 10, 8, 2, 4, 0, 17, 64, 0, 4, 0,\n0, 4, 128, 0, 0, 9, 0, 0, 130, 2, 0, 192, 0, 48, 128, 64, 0, 96, 0, 64, 0, 1,\n16, 32, 0, 1, 32, 6, 128, 2, 32, 0, 12, 0, 0, 48, 32, 8, 0, 0, 128, 0, 18, 0,\n0, 28, 24, 41, 16, 5, 32, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n0, 0, 0, 0, 1, 0, 0, 0, 16, 0, 0, 0, 0, 64, 0, 0, 0, 0, 8, 0, 0, 0, 0, 16, 128,\n0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0,\n0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n0, 0, 0, 0, 0, 0, 0};\n\n  memset(lengths, 0, BROTLI_ENC_NUM_HASH_BUCKETS);\n\n  for (len = BROTLI_MAX_DICTIONARY_WORD_LENGTH;\n       len >= BROTLI_MIN_DICTIONARY_WORD_LENGTH; --len) {\n    size_t length_lt_8 = len < 8 ? 1 : 0;\n    size_t n = 1u << dict->size_bits_by_length[len];\n    const uint8_t* dict_words = dict->data + dict->offsets_by_length[len];\n    for (i = 0; i < n; ++i) {\n      size_t j = n - 1 - i;\n      const uint8_t* word = dict_words + len * j;\n      const uint32_t key = Hash14(word);\n      size_t idx = (key << 1) + length_lt_8;\n      if ((lengths[idx] & 0x80) == 0) {\n        BROTLI_BOOL is_final = TO_BROTLI_BOOL(frozen_idx[global_idx / 8] &\n                                              (1u << (global_idx % 8)));\n        words[idx] = (uint16_t)j;\n        lengths[idx] = (uint8_t)(len + (is_final ? 0x80 : 0));\n      }\n      global_idx++;\n    }\n  }\n  for (i = 0; i < BROTLI_ENC_NUM_HASH_BUCKETS; ++i) {\n    lengths[i] &= 0x7F;\n  }\n\n  return BROTLI_TRUE;\n}\n\nBROTLI_MODEL(\"small\")\nuint16_t kStaticDictionaryHashWords[BROTLI_ENC_NUM_HASH_BUCKETS];\nBROTLI_MODEL(\"small\")\nuint8_t kStaticDictionaryHashLengths[BROTLI_ENC_NUM_HASH_BUCKETS];\n\n#else  /* BROTLI_STATIC_INIT */\n\n/* Embed kStaticDictionaryHashWords and kStaticDictionaryHashLengths. */\n#include \"dictionary_hash_inc.h\"\n\n#endif  /* BROTLI_STATIC_INIT */\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/dictionary_hash.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Hash table on the 4-byte prefixes of static dictionary words. */\n\n#ifndef BROTLI_ENC_DICTIONARY_HASH_H_\n#define BROTLI_ENC_DICTIONARY_HASH_H_\n\n#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n#include \"../common/dictionary.h\"\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* Bucket is (Hash14 * 2 + length_lt_8); in other words we reserve 2 buckets\n   for each hash - one for shorter words and one for longer words. */\n#define BROTLI_ENC_NUM_HASH_BUCKETS 32768\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\nBROTLI_BOOL BROTLI_INTERNAL BrotliEncoderInitDictionaryHash(\n    const BrotliDictionary* dictionary, uint16_t* words, uint8_t* lengths);\nBROTLI_INTERNAL extern BROTLI_MODEL(\"small\") uint16_t\n    kStaticDictionaryHashWords[BROTLI_ENC_NUM_HASH_BUCKETS];\nBROTLI_INTERNAL extern BROTLI_MODEL(\"small\") uint8_t\n    kStaticDictionaryHashLengths[BROTLI_ENC_NUM_HASH_BUCKETS];\n#else\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\") uint16_t\n    kStaticDictionaryHashWords[BROTLI_ENC_NUM_HASH_BUCKETS];\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\") uint8_t\n    kStaticDictionaryHashLengths[BROTLI_ENC_NUM_HASH_BUCKETS];\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_DICTIONARY_HASH_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/dictionary_hash_inc.h",
    "content": "const BROTLI_MODEL(\"small\")\nuint16_t kStaticDictionaryHashWords[BROTLI_ENC_NUM_HASH_BUCKETS] = {\n1002,0,0,0,0,0,0,0,0,683,0,0,0,0,0,0,0,1265,0,0,0,0,0,1431,0,0,0,0,0,0,40,0,0,0,\n0,155,8,741,0,624,0,0,0,0,0,0,0,0,0,0,0,0,66,503,0,0,0,451,0,0,0,0,0,0,0,835,70,\n0,0,539,0,0,0,0,0,0,0,0,0,113,0,0,0,0,718,0,0,0,0,0,0,520,0,1070,0,0,0,0,0,1515,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,610,0,0,750,0,0,0,307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,964,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,0,0,0,\n645,75,0,649,52,282,0,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1621,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,211,225,0,0,687,718,0,0,110,0,58,0,0,0,0,0,0,345,0,0,301,0,0,\n0,203,0,0,1154,674,1949,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,1275,0,0,0,1231,254,\n0,0,0,0,0,0,0,277,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0,800,0,0,0,29,\n116,100,490,0,0,0,0,0,1641,0,543,0,0,0,0,41,181,0,657,0,0,202,25,0,0,0,0,0,0,0,\n0,0,0,423,0,0,0,113,0,0,0,927,963,0,976,0,206,0,0,0,0,0,0,0,0,0,2002,0,0,0,0,0,\n0,0,0,0,0,0,696,0,1170,0,0,0,0,226,13,0,769,678,551,0,0,0,0,0,0,57,0,0,0,10,188,\n0,0,0,624,0,0,0,0,0,0,0,0,0,1941,130,0,0,0,0,378,269,0,0,528,0,1146,0,0,0,1105,\n0,1616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,656,0,1940,0,0,0,0,0,173,0,0,0,0,0,0,0,0,0,\n0,0,457,342,810,0,0,0,0,620,0,0,0,0,0,0,0,967,95,447,406,0,0,0,477,0,1268,944,\n1941,0,0,0,629,0,0,0,0,0,375,0,0,0,1636,0,0,0,0,774,0,1,1034,0,0,0,0,0,824,0,0,\n0,0,0,118,0,0,560,296,0,0,0,0,0,0,0,0,1009,894,0,0,0,0,0,0,0,0,0,0,0,0,0,1474,\n366,0,0,0,0,0,0,0,0,0,79,1723,0,0,200,0,0,0,0,0,0,0,0,1759,372,0,16,0,943,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0,900,1839,707,30,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,2004,0,0,10,115,0,50,0,0,0,0,0,0,0,0,0,0,520,1,0,738,98,482,0,0,0,0,\n0,0,0,0,0,0,701,2,0,0,0,0,0,0,0,0,557,0,0,0,0,0,0,0,0,0,347,0,0,0,0,572,0,0,0,0,\n0,0,0,0,0,832,0,0,797,809,0,0,0,0,0,0,0,0,0,0,0,528,0,0,0,861,0,0,294,0,0,0,109,\n0,0,0,0,0,0,0,0,1187,290,266,0,0,0,0,49,50,748,0,0,466,399,0,0,0,0,0,0,0,378,0,\n519,0,0,0,0,0,0,0,0,0,0,0,0,667,351,902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,\n0,0,869,0,0,0,0,0,0,0,260,0,0,0,0,0,0,0,0,0,0,523,36,0,0,587,510,809,29,260,0,0,\n0,0,0,0,0,0,570,0,565,0,1464,0,0,0,0,0,0,10,0,0,787,399,380,200,0,0,0,0,516,0,\n844,887,0,0,0,0,0,0,0,44,0,0,0,305,1655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,786,10,0,0,\n0,0,0,0,0,0,0,2031,0,0,0,0,0,684,0,0,0,0,0,1480,0,0,0,27,0,0,0,395,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,813,511,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,206,\n496,0,0,0,0,0,909,0,891,0,0,0,0,0,0,0,0,0,687,0,0,0,1342,0,0,0,0,0,0,0,0,0,0,\n160,41,0,0,0,0,0,0,0,0,0,0,0,1718,778,0,0,0,0,0,0,0,0,0,0,1610,0,0,0,0,0,115,0,\n0,0,0,314,294,0,0,0,983,178,193,0,0,0,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,848,\n1796,0,0,0,0,0,0,221,0,687,1660,0,0,0,0,262,0,0,179,0,0,0,0,0,66,0,773,0,352,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,152,0,0,1197,0,0,0,0,0,0,0,0,0,0,0,0,560,0,0,\n564,0,0,0,797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,556,0,819,0,0,0,0,0,0,0,0,719,544,\n637,5,0,0,0,0,0,0,0,0,0,0,0,101,0,1441,0,0,0,893,0,0,0,0,0,0,0,0,0,238,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,1296,0,0,969,1729,314,60,0,0,0,0,0,1144,0,1147,0,0,0,0,0,\n0,0,0,0,0,437,1853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,828,0,176,0,0,0,0,0,0,434,39,0,\n0,0,0,0,159,0,0,0,902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,270,0,0,0,0,801,556,0,0,\n0,0,0,0,0,416,19,197,369,0,0,0,0,0,0,0,0,0,28,34,0,757,0,0,898,1553,0,721,0,0,0,\n0,1012,0,0,0,0,1102,0,898,183,0,0,0,0,0,0,0,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,277,0,0,0,435,0,0,0,0,0,1311,0,0,0,0,\n0,0,211,437,0,0,0,28,0,0,750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2012,0,702,\n0,808,0,0,0,0,739,166,0,0,0,0,0,0,719,170,500,0,0,0,0,0,0,0,0,1500,327,0,0,450,\n0,0,0,1318,0,0,0,1602,0,0,331,754,0,0,0,0,0,1368,0,0,557,0,0,0,799,850,0,0,0,0,\n0,0,0,0,908,0,0,0,0,0,19,62,459,0,0,0,0,0,0,0,0,0,0,0,0,1802,0,0,0,0,0,0,0,0,0,\n1397,0,0,0,0,120,238,0,0,0,0,0,0,0,0,0,0,0,1324,0,0,0,0,0,0,0,0,602,201,0,0,164,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,615,0,0,0,0,0,0,0,0,0,0,0,0,0,1243,0,0,0,0,968,0,0,\n0,0,0,0,882,0,0,0,907,329,100,0,0,0,0,0,0,0,0,0,0,0,176,26,9,0,0,265,256,0,0,0,\n0,0,0,0,0,0,643,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,610,0,0,0,0,973,2001,0,\n0,0,0,0,0,522,0,0,0,0,0,0,0,0,0,0,0,553,0,0,0,0,0,0,1582,0,1578,0,0,0,0,0,0,0,0,\n0,0,0,795,0,0,0,432,0,0,0,0,0,0,84,126,0,0,0,0,790,0,377,64,0,1529,0,0,0,0,530,\n1857,539,1104,0,0,0,0,0,0,0,0,0,0,0,0,977,0,0,0,34,0,0,0,0,0,0,0,0,0,0,0,24,26,\n0,0,918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,379,0,0,0,0,0,0,0,792,\n0,0,0,0,0,0,0,0,0,1920,0,0,0,0,0,0,0,0,0,771,0,0,0,1979,0,901,254,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,0,0,0,0,0,440,37,0,\n508,0,0,0,513,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,533,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,752,920,0,1048,0,153,0,\n0,391,0,0,1952,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,640,0,483,69,1616,0,0,0,0,0,734,\n0,0,0,0,0,0,480,0,495,0,472,0,0,0,0,0,0,0,0,874,229,0,0,0,0,948,0,0,0,0,0,0,0,0,\n1009,748,0,555,0,0,0,0,0,0,193,0,653,0,0,0,0,0,0,0,0,0,0,984,0,0,0,172,0,0,0,0,\n0,0,0,0,83,1568,0,0,384,0,0,0,0,0,0,0,164,880,0,0,0,0,0,0,0,0,0,0,0,367,121,0,0,\n828,0,0,0,0,0,0,0,1541,0,0,0,0,0,0,0,343,0,0,0,0,0,0,0,0,561,57,0,0,0,0,0,0,0,\n926,0,0,0,0,827,0,194,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,\n0,0,0,896,1249,0,0,0,0,0,1614,0,0,0,860,0,0,0,0,0,0,0,0,964,102,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,569,0,0,0,0,795,2045,0,0,0,\n0,0,0,104,52,0,0,0,0,0,604,0,0,0,0,779,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,\n494,0,677,0,0,0,0,0,0,0,508,0,0,0,0,0,0,0,0,0,1014,0,957,0,0,630,310,0,0,0,570,\n0,0,449,0,64,537,0,0,0,0,0,0,0,244,0,0,0,0,0,0,0,0,0,0,0,0,0,0,702,1650,49,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,1279,0,0,0,0,0,0,0,896,0,0,\n178,0,0,0,0,0,0,0,0,0,0,0,0,0,808,695,0,0,0,0,539,1117,0,0,0,0,0,0,0,0,257,0,\n1003,0,0,0,1,448,0,516,0,0,960,0,125,4,0,1268,30,748,0,0,852,0,0,0,6,0,0,848,\n236,1385,862,1811,0,0,0,0,698,803,0,0,0,0,0,0,0,610,992,0,0,878,0,1847,0,0,0,0,\n0,0,0,383,0,1404,0,0,0,0,986,0,347,0,0,0,0,0,0,0,0,0,0,0,592,572,0,1411,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,606,0,0,0,0,0,0,\n0,0,0,0,0,0,0,1829,0,0,0,0,0,0,0,0,0,0,0,0,700,748,0,0,0,0,0,0,365,0,0,127,0,0,\n83,198,0,0,0,0,0,0,864,55,0,0,0,0,726,1752,0,0,0,0,0,0,0,0,0,0,0,0,0,1066,0,764,\n0,0,0,0,683,0,550,309,0,0,874,1212,0,0,0,1364,0,986,381,723,0,0,0,1573,0,0,0,0,\n0,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1559,0,0,0,0,493,133,0,0,0,0,148,\n119,0,0,0,0,0,0,537,14,541,0,635,126,0,0,0,495,0,0,0,0,861,998,1009,0,0,0,0,0,0,\n0,359,368,0,0,0,0,304,1577,0,0,0,0,0,1107,0,0,0,0,0,929,0,0,0,1142,0,0,0,0,289,\n175,0,432,0,219,0,0,0,0,0,785,0,0,595,0,0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,0,0,0,\n931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1323,0,0,0,0,290,0,559,1751,127,0,0,0,\n934,1167,0,963,0,260,0,0,0,573,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n580,1689,0,0,0,0,0,0,0,0,0,1164,0,0,982,1922,0,63,0,0,0,0,0,793,0,0,0,0,0,0,0,0,\n0,0,0,0,0,67,790,0,0,0,0,0,0,0,0,0,0,391,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,271,0,0,0,0,0,0,0,0,0,0,0,1140,0,0,0,0,340,300,0,897,0,0,0,0,0,0,\n0,0,0,0,890,0,0,0,0,818,321,53,0,0,0,0,0,0,0,0,0,468,0,243,0,870,0,0,0,1765,121,\n0,0,0,180,518,0,822,419,634,0,0,0,0,0,0,0,0,0,898,0,0,0,0,454,36,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,806,0,0,0,0,0,0,0,0,0,0,0,0,1326,0,104,0,0,0,0,0,0,0,\n0,0,260,0,0,0,0,0,0,0,0,0,0,0,0,542,45,0,0,263,1516,42,0,0,0,0,0,468,0,1005,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,288,87,0,0,0,0,0,0,0,0,502,988,133,0,0,0,0,0,0,\n141,0,0,872,1842,0,0,0,0,0,0,0,0,261,619,0,0,0,0,189,246,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,678,0,0,0,0,0,0,0,0,0,0,0,0,285,35,0,517,0,0,0,0,0,0,0,0,0,0,\n540,214,667,0,74,0,0,125,0,0,0,0,0,761,131,0,0,0,0,0,0,0,0,0,0,0,0,0,333,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1338,94,0,0,0,0,0,0,0,0,0,0,0,0,449,0,646,103,\n86,641,2028,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,869,87,277,117,39,0,0,0,0,0,0,0,0,938,\n297,0,0,0,0,558,464,0,0,0,0,0,0,0,0,0,0,731,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1608,0,\n0,0,0,0,0,0,1429,0,0,733,1010,0,0,338,1656,0,0,0,1038,979,2010,0,0,0,0,0,0,0,\n1005,0,0,121,0,0,0,219,20,0,0,0,0,0,0,872,1440,0,0,0,683,0,1070,0,0,522,0,0,0,0,\n439,669,0,0,0,0,0,0,0,0,1245,0,0,0,0,0,1218,0,0,547,233,0,0,0,0,0,0,0,0,0,482,0,\n0,0,0,0,0,0,886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,795,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,371,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,625,0,0,0,339,29,0,0,338,0,0,0,\n0,130,0,0,0,0,0,0,0,0,0,307,0,0,0,0,0,0,0,0,0,0,2044,0,0,0,0,0,0,0,0,308,770,0,\n0,0,0,0,1266,0,0,0,0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,690,739,0,0,\n0,0,0,0,0,990,0,0,0,1831,0,0,0,0,0,0,0,0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0,\n0,763,0,878,0,0,0,977,0,100,0,0,0,0,0,0,0,0,0,463,0,0,0,0,623,318,0,0,296,463,\n137,0,0,454,0,0,0,1527,58,0,0,0,0,0,0,0,18,48,0,0,0,0,0,729,0,0,0,442,0,0,0,0,\n40,449,0,853,0,0,0,0,0,0,227,0,0,0,0,0,0,1491,0,0,0,0,0,0,0,0,0,0,161,55,0,450,\n0,1174,62,0,207,0,0,0,0,0,0,0,0,869,0,0,0,0,80,213,0,0,0,0,0,0,0,0,0,0,354,820,\n0,0,747,0,0,0,954,0,0,1073,0,556,0,0,0,692,0,191,0,804,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,831,162,0,0,35,0,0,0,0,0,0,0,0,1235,0,0,0,0,0,1234,0,0,\n0,0,0,0,0,0,0,0,96,0,0,0,0,0,0,0,149,0,0,0,902,204,0,0,833,0,287,366,0,0,0,0,0,\n0,992,2020,0,0,0,0,0,0,0,0,0,0,0,356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,784,0,0,567,\n630,0,0,0,539,0,0,27,0,0,0,0,0,0,0,0,0,0,755,0,0,0,0,0,0,0,0,0,0,0,0,814,0,0,0,\n0,0,0,0,0,0,0,0,0,0,987,0,0,255,761,194,0,1086,0,0,0,0,0,0,1016,0,0,1396,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,562,271,913,0,0,0,0,0,0,0,0,320,153,45,475,0,0,\n0,0,0,0,0,713,0,327,0,0,0,0,0,0,604,552,3,359,0,0,0,0,853,80,0,0,0,0,0,0,0,2016,\n6,887,0,0,0,0,975,0,961,0,0,0,0,0,916,1891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,100,101,390,708,0,0,0,587,983,512,0,0,0,0,0,0,0,0,0,0,0,645,0,0,0,851,0,0,0,\n0,0,498,140,217,0,0,0,1448,0,0,0,0,0,0,0,0,0,905,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n643,105,0,792,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,535,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1748,0,0,0,0,0,754,0,0,0,0,0,0,0,0,0,0,0,0,91,0,0,1565,0,91,792,\n939,3,370,0,0,0,0,95,0,0,0,0,551,7,619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1150,0,\n0,0,0,0,0,0,0,0,0,0,0,0,671,0,0,0,0,0,888,368,149,0,0,105,1134,0,983,0,0,458,31,\n0,643,0,0,0,312,0,740,0,0,0,1642,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,59,68,0,0,0,0,\n0,867,795,0,0,0,0,970,1977,0,0,0,0,0,0,0,1148,0,775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,970,0,0,0,0,0,0,0,0,0,665,71,0,0,0,0,827,0,0,0,0,0,0,0,0,0,\n0,479,0,0,0,0,0,0,0,0,99,607,0,0,0,0,0,0,0,1960,0,0,0,793,0,0,871,41,0,0,241,94,\n0,0,0,0,209,0,0,1497,0,0,0,0,0,0,0,0,0,98,0,0,0,463,0,0,0,0,291,0,0,0,0,0,0,0,0,\n0,0,984,0,0,0,0,0,205,0,0,0,0,0,0,205,42,0,801,0,0,0,0,0,635,0,0,533,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,371,0,1282,0,0,0,825,0,0,0,0,0,0,0,0,0,357,879,467,0,317,0,0,\n0,0,0,0,0,924,0,0,0,0,849,1795,0,0,0,0,895,1799,43,0,0,0,0,0,0,0,0,0,0,1820,0,0,\n0,0,0,0,0,525,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,0,493,0,174,417,0,0,\n0,0,0,583,733,0,0,0,0,0,0,481,215,0,0,0,0,477,0,0,0,0,0,0,0,0,308,0,0,0,0,0,0,0,\n0,297,126,0,0,361,1551,0,0,0,0,0,0,871,1807,0,0,0,0,0,1307,0,685,0,0,0,0,0,0,0,\n797,0,858,0,565,0,0,0,0,0,0,0,0,0,0,0,0,434,252,826,0,0,0,0,0,0,791,0,0,0,0,509,\n231,178,601,0,0,0,0,0,0,0,0,43,1591,0,0,0,0,0,1683,0,0,0,0,45,0,0,0,0,0,0,0,0,0,\n0,1120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,556,494,0,398,0,0,0,1030,0,0,0,0,0,0,\n168,0,0,0,0,0,0,0,0,0,0,973,0,642,0,0,0,0,0,0,0,0,0,1615,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,378,594,0,1093,0,679,112,0,0,0,0,1492,540,1374,714,\n1486,0,0,0,0,825,1511,0,0,0,0,0,0,0,0,0,0,0,0,0,952,0,0,736,143,0,700,0,1540,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1557,0,0,0,860,990,0,0,0,807,0,0,0,0,0,131,\n515,0,646,0,0,0,0,117,728,508,121,0,0,0,0,0,0,357,0,0,0,0,0,0,237,0,0,0,0,0,0,0,\n0,0,1784,0,0,0,0,0,0,0,0,0,0,0,713,348,1536,0,738,0,0,0,0,0,0,0,434,0,0,0,0,0,0,\n366,1877,39,0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,873,0,0,0,0,171,0,625,\n550,107,343,943,0,0,0,0,0,0,0,768,0,0,0,0,0,0,0,799,0,0,0,894,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1673,0,0,0,0,0,0,0,0,0,0,0,1052,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n272,0,441,0,0,3,9,0,0,0,1182,0,1346,0,0,0,0,0,0,0,0,682,0,0,1004,24,0,0,968,0,0,\n0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,0,0,0,578,\n474,0,0,0,0,0,0,0,0,0,0,0,0,0,0,113,530,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,556,0,0,0,0,0,0,16,1317,0,0,97,0,0,0,703,0,0,0,0,0,0,0,0,892,0,0,0,1571,0,0,\n426,186,0,1101,0,0,0,0,0,0,0,0,937,585,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,644,291,\n0,0,0,0,749,0,162,0,0,381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,762,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,628,21,0,0,0,0,0,0,0,0,919,0,0,0,0,0,0,0,0,0,\n633,0,0,0,0,332,0,0,0,0,0,0,0,0,0,1489,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,832,398,0,645,0,0,0,13,0,0,0,0,0,0,0,0,0,0,20,0,800,0,0,0,0,0,0,0,0,0,\n0,0,0,0,1993,0,0,0,0,769,0,0,0,665,0,0,0,0,0,0,0,0,0,0,1426,0,0,0,0,60,0,0,0,\n641,1874,0,644,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1757,0,0,0,0,0,937,0,1652,0,654,0,\n0,0,0,0,0,0,527,0,0,0,0,0,0,0,0,0,0,0,0,0,226,0,0,0,0,0,1486,0,0,0,0,0,0,0,0,0,\n0,0,325,0,0,0,0,0,0,0,1345,0,0,91,0,404,0,0,0,0,0,0,0,0,0,0,0,0,973,0,0,0,0,0,0,\n0,1176,0,549,0,0,0,0,0,0,0,0,0,0,976,0,0,0,0,0,21,0,0,0,0,0,51,0,0,0,0,314,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,198,6,0,1093,0,0,0,0,0,0,0,0,0,\n0,0,0,0,1776,0,0,0,0,0,1528,0,419,0,0,0,0,0,0,0,0,76,138,0,0,0,0,638,29,0,0,0,0,\n0,0,0,1418,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1710,0,0,0,0,0,\n0,0,0,0,0,0,0,532,23,0,0,0,0,0,0,0,862,0,0,946,592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,70,0,0,0,0,0,0,0,0,0,812,0,0,0,76,0,0,988,0,442,0,0,0,896,0,0,0,0,0,0,\n483,0,0,0,0,1709,0,0,0,0,0,0,119,0,0,0,117,0,309,0,0,0,0,0,596,976,0,0,0,0,0,0,\n0,0,0,0,0,768,0,0,0,0,0,0,0,0,0,518,0,0,0,0,0,0,0,0,0,0,0,0,0,0,863,0,0,0,24,\n145,1020,0,0,1984,0,0,0,0,0,0,0,658,0,0,0,0,0,0,0,0,0,0,106,1827,0,1010,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,582,87,0,0,0,0,0,0,0,267,0,0,0,703,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,496,0,0,0,0,1121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,561,0,0,0,0,0,\n0,0,760,0,0,154,0,0,0,255,0,419,323,0,0,0,0,0,368,0,0,0,0,0,0,0,0,0,0,522,0,0,0,\n0,0,0,0,551,562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,92,0,0,0,0,\n0,0,0,284,525,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,958,0,0,594,0,0,0,0,0,0,6,479,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,820,1641,0,1556,0,0,0,0,0,0,0,302,0,0,\n0,0,0,148,0,0,676,0,0,0,0,0,0,1674,0,0,0,0,0,0,178,0,0,0,0,0,0,0,94,389,0,0,0,0,\n91,8,0,0,0,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,0,0,0,747,0,0,0,0,0,0,0,1746,0,0,0,0,\n0,24,0,1352,158,1530,0,0,718,130,280,1401,0,0,0,0,0,1946,8,0,0,0,0,1607,0,0,0,0,\n0,0,882,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,417,0,0,0,1597,633,433,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,234,0,0,0,0,0,0,0,0,680,1950,0,0,0,0,249,5,0,0,0,\n0,0,0,0,0,0,1216,0,1773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,509,180,0,0,0,0,0,0,0,1002,\n0,0,0,0,0,0,0,0,0,0,0,0,0,931,0,0,0,0,0,0,0,0,747,943,0,1837,0,0,0,0,0,0,0,641,\n0,0,0,0,280,0,0,0,5,0,0,0,0,0,72,545,0,0,0,0,0,0,0,0,0,742,0,0,254,151,872,0,0,\n0,0,0,0,0,0,0,0,0,0,921,0,0,517,833,0,1680,0,0,436,251,584,0,0,0,0,0,0,0,0,0,0,\n0,24,500,0,0,0,0,0,0,0,0,195,1775,514,389,0,0,0,0,0,0,0,743,0,0,0,0,0,0,292,0,0,\n0,227,1283,774,1805,0,0,0,0,0,0,0,0,0,0,119,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,913,\n1910,0,0,0,1826,490,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1162,700,30,\n0,0,0,721,839,0,0,0,617,0,0,0,0,0,0,0,0,0,169,428,0,0,0,0,0,1648,637,1205,0,0,0,\n1596,0,0,4,266,0,0,0,0,0,0,0,0,0,0,0,862,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,\n0,279,157,391,604,0,0,713,945,877,973,0,0,0,0,0,0,0,0,0,0,0,0,0,0,859,567,628,\n1846,0,0,0,0,0,0,0,0,0,762,0,0,191,0,0,0,0,298,0,0,767,909,0,0,0,0,0,0,0,795,0,\n0,301,0,0,1970,0,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,0,644,369,15,0,160,71,0,0,0,0,0,\n1447,0,0,0,0,0,0,0,0,735,1255,76,0,0,0,0,0,0,0,0,0,0,474,0,0,0,0,0,0,0,0,0,0,\n841,0,0,0,0,0,0,0,0,0,0,836,0,0,0,0,0,1622,0,0,735,0,0,0,0,1601,804,1390,394,0,\n0,0,0,0,0,96,0,289,0,0,35,688,0,0,0,667,0,513,0,0,0,0,0,0,0,2034,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,704,0,1524,0,1078,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,306,\n0,0,0,0,0,0,0,431,0,1196,0,0,54,0,15,1448,0,1418,0,0,0,0,0,0,0,0,0,907,0,0,0,0,\n0,0,194,1767,0,0,0,0,0,840,0,900,0,0,0,0,0,0,0,0,0,0,0,1436,0,0,0,0,642,1560,0,\n0,0,0,0,0,94,386,0,0,0,0,0,0,0,0,0,0,830,416,0,0,20,731,0,0,0,0,0,0,0,0,697,0,0,\n662,0,0,0,0,0,0,0,0,0,861,0,0,0,0,0,0,0,871,671,864,0,928,7,0,332,0,0,0,0,1055,\n0,0,0,0,0,0,986,0,0,0,0,0,44,76,0,0,0,0,0,0,0,0,0,0,300,0,0,0,0,0,0,0,175,518,\n831,1108,0,0,0,836,0,1852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,843,1804,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,246,0,0,0,610,202,0,0,36,0,0,0,240,654,13,0,0,0,0,0,0,0,\n0,391,0,403,0,0,0,0,0,0,0,0,0,0,75,0,366,815,0,0,631,0,0,0,0,0,0,0,0,345,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,952,0,0,0,0,0,0,0,0,0,0,0,673,35,662,0,287,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,5,34,0,0,0,0,0,0,0,0,151,0,427,0,0,382,0,0,0,329,0,0,279,0,0,0,\n0,0,0,0,0,0,0,906,0,0,366,843,0,1443,0,1372,992,0,36,123,0,649,0,0,0,0,0,767,0,\n1018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,995,0,0,0,0,0,0,0,72,368,0,0,1345,0,0,0,\n589,0,0,0,0,0,0,0,0,0,1988,0,0,220,541,0,0,0,686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,32,196,0,0,0,0,0,0,0,0,0,0,0,0,0,381,0,0,0,0,0,0,0,0,0,1452,0,\n0,0,616,0,0,0,0,0,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0,667,120,0,0,0,0,0,0,0,1146,0,\n0,0,0,0,0,0,0,0,0,0,352,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,0,935,0,1050,0,\n147,88,0,0,923,0,0,0,0,0,934,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,341,222,0,0,0,0,0,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,\n637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1159,0,0,0,847,0,0,0,0,0,0,683,0,867,944,0,0,\n0,0,0,1809,0,0,0,0,0,0,0,0,0,0,395,170,0,0,0,0,0,0,0,0,0,0,618,535,0,1625,0,0,0,\n0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,778,0,0,0,0,0,46,0,2032,0,0,37,\n1458,0,938,363,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,314,0,0,0,0,0,0,889,0,0,0,0,0,0,0,\n0,0,0,0,462,0,0,0,0,525,0,0,23,0,0,0,0,0,0,0,0,0,0,0,676,0,0,0,0,0,0,0,0,0,0,0,\n0,498,725,0,0,0,0,7,0,0,0,0,773,0,0,0,164,0,0,0,0,0,0,0,0,936,583,659,1462,0,\n220,0,0,0,0,803,0,0,544,119,0,0,0,0,0,0,0,0,0,0,0,181,176,0,1192,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,1878,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0,0,0,0,\n944,0,0,0,0,0,0,0,273,0,0,0,0,0,855,0,0,0,0,5,127,0,0,0,0,0,0,0,0,752,230,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,162,0,654,48,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197,\n0,0,0,0,0,0,0,963,0,0,0,0,0,0,0,0,0,0,858,0,0,0,0,0,0,0,0,0,0,676,1978,0,0,102,\n972,0,0,0,0,0,0,0,361,0,461,0,0,0,472,0,0,0,0,0,0,0,0,0,0,0,0,0,0,747,905,0,0,0,\n155,0,0,0,0,0,0,0,0,0,0,319,163,0,0,0,0,0,0,0,0,0,848,0,0,36,631,0,0,0,0,0,1769,\n0,0,0,0,0,144,0,0,0,0,0,0,0,0,0,0,369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,555,247,0,0,\n996,0,0,189,0,0,0,0,0,0,0,0,0,0,280,0,0,0,0,0,0,0,0,0,0,0,526,746,0,0,345,0,0,0,\n1017,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,651,428,0,0,0,1162,230,327,546,792,0,0,0,\n1203,0,0,0,0,0,0,0,0,0,672,189,0,0,0,0,0,0,99,0,0,0,298,0,0,0,0,0,0,555,397,0,0,\n0,0,0,1157,0,0,0,0,0,0,0,0,0,0,398,1523,0,366,0,0,787,0,0,0,282,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,157,0,941,0,0,0,0,0,1336,0,0,116,0,0,0,0,0,0,787,0,0,0,0,0,0,0,0,0,\n0,170,160,0,1815,0,0,0,0,0,866,0,0,0,0,0,0,0,0,0,689,0,0,0,0,820,0,498,108,0,0,\n0,1119,0,0,0,244,609,1005,0,581,0,0,0,0,0,895,0,0,0,1898,0,0,0,0,0,926,0,0,0,0,\n0,0,0,0,0,0,0,0,0,538,496,294,301,0,0,0,18,0,0,757,0,0,0,0,0,1263,0,820,0,722,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2028,0,0,0,0,124,1875,0,0,0,881,0,0,0,1348,\n0,0,0,0,0,0,0,911,0,954,0,0,0,0,414,0,0,0,0,517,0,0,0,0,0,816,0,0,0,0,0,0,0,0,\n713,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,593,150,0,0,0,0,\n0,553,0,0,0,0,0,0,0,0,0,0,108,0,0,0,0,420,0,0,0,0,0,0,0,0,0,0,0,1777,0,0,55,493,\n0,0,81,0,321,980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,362,112,0,74,0,0,0,0,0,0,0,625,0,0,\n0,0,0,0,377,16,0,0,61,281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,1031,0,0,0,0,0,0,51,0,\n0,0,0,0,0,0,211,309,15,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,789,173,0,439,9,648,\n0,0,294,0,0,0,0,0,0,0,374,8,0,1099,0,0,0,0,0,0,0,575,0,0,0,518,0,0,0,702,0,0,0,\n0,0,0,87,0,0,0,438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,464,122,0,0,0,1802,0,0,0,0,\n0,0,499,0,0,0,87,476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,840,283,0,0,0,0,1620,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,609,1160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,600,\n323,372,0,0,0,0,471,722,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,\n477,1304,0,1774,0,0,88,0,438,12,0,0,0,0,0,0,0,0,671,997,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,639,22,0,0,782,681,0,0,0,0,0,0,0,0,0,0,1013,664,0,942,0,1349,0,0,0,0,0,0,0,\n0,0,0,0,0,356,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,215,289,0,1975,\n109,450,0,0,0,0,0,0,0,0,0,0,705,0,0,664,0,0,0,0,0,0,0,1238,0,0,318,0,0,0,0,0,0,\n0,0,0,0,0,0,0,960,1872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0,0,0,0,0,0,0,0,239,\n777,0,26,0,0,0,0,0,0,0,0,0,0,0,0,375,414,0,17,0,0,0,1350,0,955,0,0,0,0,0,0,0,0,\n887,960,0,0,0,0,0,0,0,0,0,0,708,710,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,919,0,0,0,\n0,502,280,7,45,0,0,0,0,777,0,0,0,0,410,0,1110,0,0,0,0,0,0,414,341,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,787,0,0,0,436,0,0,0,0,0,0,0,1707,613,377,96,0,0,0,0,451,\n0,0,0,0,0,0,0,0,0,0,0,0,0,680,0,483,916,0,0,0,0,0,0,937,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,739,0,0,0,0,0,0,0,0,82,0,0,663,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,128,0,0,0,0,0,0,0,0,1087,0,0,0,0,0,0,0,503,0,0,0,0,0,0,9,113,104,324,0,460,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,935,702,434,485,1014,949,423,0,900,\n0,0,0,0,0,0,0,2018,574,0,0,0,0,0,0,0,0,0,0,0,0,1206,0,0,0,0,0,0,0,0,38,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,1022,0,0,0,0,143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,2029,0,0,0,0,0,0,0,0,0,0,0,0,523,0,0,0,0,0,0,625,0,0,425,37,0,0,0,1943,0,0,0,\n0,0,765,0,0,0,0,0,0,0,0,0,0,551,0,0,0,0,0,0,0,0,0,0,0,0,168,0,0,1010,0,0,1994,0,\n0,0,91,0,0,0,0,532,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1884,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,240,15,0,0,0,1227,0,1534,0,0,0,0,0,0,0,0,0,0,0,0,0,0,392,0,\n0,0,0,0,0,0,0,0,0,0,0,655,562,395,0,0,0,501,1019,0,0,0,0,509,267,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1099,0,0,0,0,0,0,948,0,0,0,0,0,0,0,\n462,114,0,0,258,404,0,1717,0,0,0,0,82,1061,0,724,0,0,0,0,0,1133,0,0,0,0,0,0,\n1021,841,0,1021,0,0,0,0,0,0,0,0,0,0,488,373,37,0,0,0,0,564,0,0,0,0,0,513,0,0,0,\n825,0,0,899,0,0,778,0,0,12,1417,0,1116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,545,0,5,\n0,0,0,0,0,0,0,192,0,0,763,0,0,0,0,0,0,0,755,759,0,0,0,0,0,0,0,0,0,370,0,1237,0,\n0,0,0,0,0,298,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,\n0,0,0,0,814,991,0,757,57,0,0,0,0,0,0,0,0,0,540,0,0,0,0,608,0,0,0,0,0,0,0,0,1014,\n0,0,0,902,0,0,0,0,553,1668,0,0,0,0,0,0,0,0,0,559,60,0,0,0,0,0,511,0,0,675,0,0,\n156,0,0,0,0,0,0,709,0,698,0,0,0,1745,0,0,0,0,0,0,0,0,0,714,0,0,0,0,0,0,0,0,206,\n8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,776,0,0,0,0,0,0,0,0,0,1272,0,0,\n0,0,0,1059,0,0,0,0,0,0,406,0,0,0,0,0,0,0,0,0,0,947,0,0,0,0,0,0,168,0,0,0,0,0,0,\n870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,554,0,0,0,0,784,908,0,0,0,0,0,0,\n0,396,358,0,0,0,0,0,0,0,0,2,228,0,0,0,0,0,0,0,0,0,0,0,845,14,0,716,1820,594,0,\n81,1428,0,161,0,782,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,998,0,\n0,0,0,0,0,0,0,0,0,0,0,1043,0,1496,0,0,0,0,0,0,0,0,781,0,0,0,0,0,0,0,817,1114,0,\n1814,958,0,0,0,0,812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,236,643,0,0,0,0,0,0,0,0,0,1172,0,0,0,0,0,0,0,0,0,1338,0,0,0,\n0,0,0,0,0,0,0,0,54,0,0,0,256,0,0,351,0,955,1885,0,469,0,0,0,1270,0,744,0,313,0,\n0,0,0,0,0,0,0,402,969,0,0,0,0,0,0,50,0,0,0,0,572,0,0,0,0,847,0,0,0,0,0,0,0,248,\n43,0,369,0,0,0,0,0,0,0,0,0,0,0,0,0,766,0,363,0,0,0,0,0,0,0,0,0,0,0,678,0,0,409,\n258,82,249,0,0,0,0,0,0,0,0,0,0,0,0,32,393,0,788,0,0,0,1281,509,1968,0,0,0,0,39,\n291,0,0,0,589,0,0,54,1059,0,0,0,0,0,0,824,0,0,0,0,0,0,0,0,0,0,1005,0,1598,0,0,0,\n0,0,919,0,0,0,0,0,0,0,0,52,132,0,0,0,0,0,328,0,0,0,0,173,0,0,0,0,0,65,1411,0,0,\n0,0,0,0,0,0,0,0,442,0,842,0,0,0,0,0,0,0,0,0,534,0,0,0,0,0,0,0,0,0,0,0,0,0,845,\n210,0,0,0,0,0,0,0,0,892,0,0,223,0,0,0,0,529,0,0,0,807,0,137,218,0,1444,0,0,0,0,\n0,332,661,0,0,0,0,0,0,0,76,1517,0,0,0,0,0,0,0,0,0,0,0,418,0,0,0,0,0,0,0,0,481,\n379,0,0,0,0,0,149,18,0,0,0,0,0,0,0,0,742,304,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,799,925,195,51,0,0,0,0,688,0,0,0,0,697,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,1169,751,0,0,0,452,929,0,221,0,1437,0,0,0,0,955,1251,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,132,0,0,0,0,0,865,0,0,0,0,0,0,0,767,\n672,42,0,0,0,1050,0,0,0,0,0,0,0,0,368,44,0,0,0,0,0,0,0,570,29,0,0,0,0,0,0,227,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,522,0,0,0,0,0,0,0,1529,0,0,0,0,0,0,739,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1667,0,0,0,0,0,0,132,511,0,138,208,1020,0,0,23,565,0,344,0,0,0,\n0,0,922,0,0,0,0,0,0,0,240,0,0,415,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,402,0,0,754,31,716,0,982,731,0,0,0,0,0,0,0,888,0,0,0,803,847,0,0,823,\n0,0,0,0,0,0,785,0,0,2,0,0,0,0,0,0,0,532,0,0,681,0,0,314,0,384,684,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,649,447,0,1818,1007,0,321,0,66,360,0,0,0,385,0,0,0,0,0,0,\n0,900,73,254,0,0,0,0,683,1959,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,86,0,0,725,0,0,0,0,0,196,0,0,0,0,0,831,0,0,0,0,723,0,0,0,0,0,994,627,0,0,\n0,0,0,0,0,0,0,0,764,66,0,0,0,0,205,36,0,0,0,0,0,0,0,950,0,0,0,887,111,0,0,831,\n388,165,0,0,0,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,780,755,0,0,0,0,898,146,0,0,0,\n0,0,0,0,45,7,0,0,0,0,0,0,0,0,607,0,0,0,0,0,0,65,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,\n621,600,0,367,0,0,0,0,0,0,0,561,0,559,0,585,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,672,157,0,0,0,0,714,0,0,0,\n0,0,456,0,925,0,0,0,0,0,0,0,0,19,0,0,0,0,1473,0,0,0,0,0,0,0,0,0,0,113,0,0,0,0,0,\n0,0,0,0,0,0,0,0,69,463,0,0,82,193,2,471,0,0,0,0,633,0,0,0,0,0,0,1148,129,1392,\n542,803,0,0,0,0,0,0,0,0,0,0,0,0,438,0,0,0,0,0,0,875,0,0,0,0,0,237,0,0,0,0,0,0,0,\n65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,563,0,0,0,9,444,0,0,43,1260,0,0,0,0,0,0,\n971,0,0,699,0,0,0,0,0,1116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,829,242,0,\n0,593,0,0,0,0,0,0,0,0,201,36,224,0,0,0,0,0,0,1430,0,1806,0,523,0,0,212,1889,0,0,\n0,827,0,0,0,0,0,2043,136,242,0,0,0,0,0,0,284,148,10,0,0,0,0,0,0,1249,0,0,0,807,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,0,0,494,0,0,0,0,0,0,0,0,1510,0,0,0,0,0,\n0,0,0,0,0,505,1306,0,0,764,268,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1703,0,0,0,0,159,964,583,0,0,0,\n0,0,0,515,0,0,854,0,0,0,0,0,0,0,0,0,0,0,0,1123,0,0,0,0,0,0,0,136,0,0,0,0,0,1782,\n0,0,44,1287,0,0,0,0,0,732,0,0,0,0,313,679,0,0,316,0,0,0,0,595,0,0,0,0,0,0,753,\n147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0,0,0,414,0,1762,0,0,0,0,0,0,0,0,\n0,0,0,599,0,0,0,0,0,0,0,0,0,1749,0,0,0,1627,0,488,0,0,0,0,0,83,0,0,0,0,676,0,0,\n1639,0,0,0,0,0,0,0,0,0,278,0,0,0,0,0,0,97,0,14,1085,0,0,0,0,0,0,781,388,0,849,\n59,229,0,0,0,0,0,1115,0,0,0,0,108,0,0,0,0,700,0,0,0,0,0,0,0,0,0,1414,0,0,0,0,0,\n0,0,0,0,0,0,0,0,660,737,1035,0,0,0,0,0,0,521,690,0,0,0,0,0,0,0,0,0,0,0,0,272,0,\n0,0,0,0,0,0,0,0,0,1744,0,0,0,0,0,0,128,733,0,0,277,0,0,0,0,0,0,0,0,0,4,0,0,0,0,\n0,0,0,0,0,0,0,0,0,936,1981,40,0,0,0,0,0,0,0,0,775,0,0,0,0,0,0,0,0,0,306,0,0,0,0,\n0,0,0,979,0,0,0,0,0,611,0,0,0,0,0,178,0,0,0,1969,0,0,0,0,0,0,0,664,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,390,0,0,0,1510,0,0,0,0,0,0,0,0,0,0,0,493,0,0,37,0,0,0,0,724,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,1537,0,0,168,473,0,0,0,105,0,0,0,0,\n627,438,0,0,0,0,0,0,0,0,0,0,11,1256,0,0,0,1626,0,779,0,0,0,0,25,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,308,0,0,0,0,0,741,0,671,0,0,0,0,649,150,0,0,99,521,0,0,3,339,0,0,0,\n543,0,0,0,0,0,0,0,0,0,1358,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,155,\n0,0,0,0,0,0,0,1628,0,766,0,0,0,0,0,0,0,0,0,0,0,0,0,829,0,0,0,1445,0,0,0,486,0,0,\n0,0,2,1635,0,0,0,0,558,0,0,0,0,0,0,0,0,0,0,1461,0,0,0,0,0,599,0,0,0,0,0,0,0,0,0,\n1376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,447,0,0,66,1432,0,0,0,0,\n0,0,307,0,413,609,0,0,0,930,0,0,0,0,21,939,0,0,0,0,0,962,4,651,0,0,0,0,15,579,0,\n0,0,0,0,597,0,0,0,0,0,981,0,0,0,545,0,0,0,0,0,0,0,1558,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,800,17,0,0,17,0,907,0,0,0,110,0,0,0,53,458,0,1983,0,0,0,0,0,0,0,0,0,0,443,0,\n0,0,0,0,0,0,0,0,0,0,924,1844,0,1232,0,0,0,0,70,519,0,993,0,0,0,0,0,0,14,530,0,\n907,0,0,0,0,0,733,0,0,0,0,0,0,0,0,55,0,188,531,56,0,0,1693,0,0,0,0,0,0,0,0,441,\n0,192,928,0,0,0,0,0,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1525,0,259,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,185,0,464,1603,0,0,0,0,0,0,0,0,0,0,0,1113,\n284,720,0,0,722,0,0,0,0,0,13,0,0,0,0,0,0,0,4,289,43,0,0,0,0,0,0,1694,0,0,0,0,\n193,0,0,0,0,409,0,0,0,0,0,0,0,0,0,0,0,0,308,0,0,1863,0,0,0,0,0,0,0,0,0,790,0,0,\n745,1002,0,0,0,0,0,0,0,0,0,289,68,477,13,0,0,0,0,0,0,0,0,0,0,609,0,0,0,0,0,0,0,\n0,0,0,0,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,528,0,0,0,0,0,0,0,0,0,694,58,\n548,0,0,0,0,0,0,687,0,0,0,0,1749,0,0,0,0,0,0,0,0,1004,661,0,0,0,0,0,0,445,0,0,0,\n74,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0,0,0,834,0,0,189,1672,0,0,0,0,0,0,0,1548,\n192,0,0,0,0,0,0,0,0,0,0,0,0,0,32,751,0,78,0,0,0,0,0,0,544,1602,105,473,0,0,0,0,\n0,0,156,1949,0,1779,0,0,0,0,0,0,0,0,0,0,0,763,0,0,0,0,0,0,0,0,29,0,0,0,0,0,0,0,\n0,0,0,883,0,0,0,0,0,0,0,488,0,617,0,0,50,0,694,1518,785,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,546,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,1016,0,0,0,577,0,0,0,0,0,0,\n184,935,114,720,0,0,100,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,95,14,0,969,0,0,0,0,0,0,0,\n727,0,1021,0,0,0,0,0,1190,0,0,0,0,0,0,0,0,0,0,0,0,0,153,0,0,0,0,0,0,0,0,0,798,0,\n587,0,0,695,42,0,1929,141,957,0,465,7,908,0,0,450,148,0,0,0,1166,0,0,0,0,0,0,0,\n0,0,0,0,0,253,0,1003,0,0,0,0,0,0,0,0,0,0,0,46,0,0,879,0,806,0,1868,0,0,0,0,0,\n1846,0,0,0,730,0,0,0,0,0,0,0,965,0,0,0,0,506,0,0,0,10,0,0,0,22,0,0,0,0,0,0,0,0,\n0,0,0,0,0,960,296,0,0,0,0,0,0,0,0,0,0,0,587,0,0,0,0,20,0,0,0,32,982,0,0,0,0,0,0,\n0,0,0,0,941,0,0,0,0,435,0,0,0,0,0,0,71,419,0,0,0,0,0,0,688,740,94,345,0,0,679,\n582,0,0,0,0,0,0,0,945,0,0,0,0,0,0,0,0,0,0,0,0,539,0,684,1993,0,0,0,659,0,583,0,\n803,0,704,0,0,0,0,0,198,181,347,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,481,405,203,0,0,99,826,0,0,0,0,0,0,0,492,0,408,0,0,0,0,0,0,0,0,0,0,4,0,0,\n0,0,665,349,137,0,0,0,0,612,1270,0,0,0,0,0,371,0,0,0,826,0,0,0,0,21,1535,858,\n374,0,0,0,0,0,0,311,0,0,0,991,1968,0,0,0,0,494,1647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,769,0,0,0,0,0,642,0,0,157,123,0,0,0,1435,0,0,0,0,0,0,0,0,0,0,79,0,0,0,\n0,0,0,1425,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,393,486,1690,0,0,0,0,\n0,0,0,0,0,0,0,0,756,184,0,0,0,1382,0,0,0,175,0,1493,0,1007,0,0,0,0,0,0,0,0,0,0,\n0,219,0,0,0,0,515,99,0,851,0,0,0,0,0,1278,0,0,0,0,0,0,0,1000,982,0,762,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,910,1819,0,0,0,0,0,0,906,0,0,0,0,0,0,0,0,0,0,1730,0,0,\n0,0,0,0,0,0,0,0,0,1185,0,0,0,0,0,0,0,0,40,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,\n650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,30,0,553,0,0,20,597,0,1614,0,0,0,0,0,327,\n49,0,0,0,0,0,0,0,78,0,0,786,134,0,0,0,12,496,0,0,0,0,0,0,0,0,0,0,42,204,0,614,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,147,247,0,0,0,0,942,0,0,2023,0,0,0,0,\n0,0,67,285,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1309,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,532,0,0,0,0,0,0,0,\n1692,0,0,0,0,55,1704,0,0,0,0,988,0,0,0,223,0,0,0,0,0,0,0,57,1123,0,0,0,0,0,1764,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2015,0,0,0,1599,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,0,0,0,0,0,0,0,0,0,0,0,534,0,0,0,0,0,0,0,0,0,0,0,\n0,0,504,621,1248,321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1397,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,441,75,0,0,0,0,0,0,0,0,0,0,841,0,0,0,0,0,693,0,650,314,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,880,0,475,0,\n0,1016,179,602,111,329,0,0,0,1864,0,0,0,0,846,1888,0,0,780,0,0,0,82,0,0,0,0,821,\n0,0,0,0,0,0,0,0,0,0,0,956,112,0,0,0,261,455,0,0,0,0,0,0,337,385,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,184,1865,0,0,721,16,0,486,0,0,0,265,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,621,0,0,0,0,0,0,0,0,234,0,0,815,0,0,743,\n1987,205,197,0,0,0,0,0,0,0,0,0,314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,452,589,0,\n176,333,0,0,0,0,0,0,0,1110,47,0,0,0,0,0,0,0,0,0,0,0,864,0,0,300,0,1237,0,0,0,0,\n0,0,0,0,0,0,0,1685,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,135,395,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,631,0,0,0,0,0,0,835,0,0,0,606,459,0,979,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,612,0,0,0,0,0,0,0,0,158,372,0,854,0,0,0,0,0,\n0,0,1492,0,0,0,833,0,0,0,0,0,0,0,1739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n195,0,0,0,0,0,0,0,0,730,1997,0,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,266,751,0,0,0,0,0,\n0,0,821,0,0,0,715,0,0,0,868,0,959,0,0,0,0,0,0,0,0,0,0,0,1053,0,0,0,950,0,1081,0,\n1595,0,0,0,0,59,0,0,0,0,0,0,0,0,0,0,47,684,0,0,0,0,0,0,1606,0,777,0,1020,0,0,0,\n1094,0,0,0,0,0,0,0,350,0,0,0,0,0,0,242,1812,0,0,0,967,0,0,0,473,286,0,0,0,0,0,0,\n798,629,222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,513,337,306,0,0,0,0,0,0,0,0,0,\n146,0,0,1646,0,0,0,0,0,465,0,0,0,525,0,0,0,0,0,0,299,165,0,0,0,0,0,0,0,1064,0,0,\n0,0,0,596,0,0,0,0,0,0,0,0,0,0,0,0,0,0,238,1741,0,1233,451,1824,0,0,0,0,733,495,\n0,0,0,0,0,1204,0,0,0,559,341,0,224,21,0,0,0,0,0,0,0,0,97,1446,0,0,0,0,0,0,0,729,\n0,0,565,727,0,1948,0,0,0,519,0,0,0,0,0,0,0,0,0,1193,0,0,0,0,0,0,790,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,323,2,201,0,0,59,0,0,34,0,896,961,0,1285,0,0,46,0,479,0,0,\n0,0,549,0,663,0,0,0,0,0,783,65,682,0,0,0,0,0,11,0,0,0,0,0,522,0,0,0,52,0,0,0,0,\n0,383,0,0,0,0,0,0,0,0,127,0,0,0,0,0,397,194,0,0,635,0,0,0,0,0,0,0,0,0,0,975,0,0,\n0,0,0,0,0,0,0,0,116,0,51,0,0,858,0,1075,535,448,0,0,0,0,0,610,0,0,0,0,0,0,0,0,0,\n0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,267,673,319,94,92,0,551,0,0,218,\n1406,69,256,0,0,952,1980,0,833,0,0,0,0,0,0,0,0,0,0,0,0,39,0,0,0,0,0,0,0,81,0,0,\n0,352,634,0,0,0,0,0,618,0,0,0,0,0,0,73,339,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,759,\n0,0,0,0,0,0,0,0,0,0,0,0,0,1075,0,0,0,0,0,0,482,649,0,0,0,0,0,0,0,0,386,336,0,0,\n0,1035,0,0,0,0,0,0,0,0,0,0,0,924,0,73,0,0,0,0,0,1971,0,0,0,0,0,0,0,0,0,1344,0,\n501,0,0,0,0,0,0,0,0,46,799,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,770,0,0,0,0,0,0,0,0,\n0,0,0,0,0,158,0,0,0,0,0,1432,0,0,0,0,0,0,0,0,0,0,25,0,0,2001,0,0,0,0,0,0,0,0,0,\n0,0,0,0,478,0,0,0,0,0,0,91,1461,211,602,0,0,0,0,0,0,0,0,0,1068,0,0,124,567,0,0,\n0,1006,0,0,0,0,0,0,0,0,0,735,812,0,0,323,0,0,0,304,0,0,0,0,0,0,0,0,0,148,0,0,0,\n0,0,0,0,0,0,523,0,0,144,730,0,0,981,0,0,111,0,0,132,0,0,0,0,0,0,890,0,0,0,0,0,\n444,0,1787,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,2041,932,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,937,0,995,0,0,255,0,0,138,863,965,0,0,631,0,0,0,0,1394,16,652,0,0,0,0,0,0,\n0,0,0,0,0,0,0,897,0,321,0,0,0,0,0,922,0,619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,844,0,0,0,0,0,0,1659,0,1100,0,0,0,1173,0,1930,268,251,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,390,711,0,0,0,0,0,0,0,0,0,0,0,0,0,744,0,0,0,0,0,0,0,0,0,624,0,0,0,\n1998,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1125,0,0,0,594,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,268,0,0,0,0,0,0,0,563,0,0,0,0,0,0,0,0,2,39,0,0,0,1332,0,0,0,0,0,\n0,0,508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,796,0,0,0,0,527,0,0,0,0,98,0,0,576,0,\n0,0,0,0,122,0,276,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,645,0,0,0,0,\n0,0,0,0,0,0,0,290,0,0,762,1292,0,0,0,1315,0,1955,0,0,0,0,0,0,0,0,0,0,210,131,0,\n0,0,0,797,0,38,0,11,488,0,936,0,441,0,0,0,0,0,595,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n991,0,0,0,0,0,0,0,0,0,0,0,653,0,523,0,0,0,903,0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,\n0,0,0,0,0,0,432,0,0,314,0,0,0,0,232,1368,534,0,0,0,0,0,27,0,0,0,12,0,0,0,0,0,0,\n0,0,0,264,736,0,1657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1117,0,127,0,0,0,1208,0,1294,\n0,0,0,0,364,0,0,0,0,0,125,1334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,792,0,0,0,0,0,0,0,\n849,699,0,0,0,0,0,968,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1446,\n124,397,0,0,0,0,0,0,0,0,0,0,0,641,0,0,0,0,0,0,0,0,0,0,0,0,127,346,0,0,517,75,0,\n0,0,0,0,0,0,0,83,0,0,0,0,0,0,1031,0,0,0,0,0,0,0,1470,0,954,0,0,345,304,410,0,0,\n0,0,734,0,0,0,0,0,1822,0,0,0,1798,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,161,\n1865,69,0,0,0,0,0,0,922,0,0,0,0,0,0,0,0,0,0,0,541,0,627,0,0,0,0,0,0,0,0,0,166,0,\n0,0,0,0,0,0,0,0,849,0,0,0,0,0,0,0,717,0,0,0,0,0,0,0,0,0,0,0,0,0,0,600,0,0,0,0,0,\n0,654,0,0,188,273,0,0,0,543,0,410,87,0,0,941,0,0,186,250,0,1785,0,0,0,0,0,1339,\n462,961,0,780,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,529,0,0,0,0,0,0,474,1276,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,24,948,0,0,0,0,657,753,0,0,0,0,941,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,706,985,837,0,1861,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,933,0,0,0,0,0,\n0,0,0,0,767,0,0,0,0,0,0,0,641,0,0,0,1233,114,0,883,0,274,2008,0,1794,285,0,0,\n571,0,0,0,0,0,0,0,0,0,0,823,960,16,617,0,431,0,0,0,0,0,0,0,0,0,0,567,0,401,0,2,\n781,424,33,0,2006,0,0,274,0,0,1882,0,794,0,0,0,1848,0,0,0,0,0,0,448,47,0,0,0,\n1199,0,0,0,0,0,0,0,0,417,0,0,0,0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,1019,0,0,0,0,0,0,\n0,0,0,0,0,0,0,620,0,0,0,0,464,0,0,0,0,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,442,0,930,0,0,0,0,0,516,68,0,0,0,0,0,1128,104,0,0,0,0,0,0,0,0,787,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0,0,0,0,0,711,0,0,9,0,101,441,0,0,0,0,0,0,0,0,\n0,0,160,396,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,679,326,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,1128,0,0,0,0,0,737,0,1796,0,0,0,0,0,0,0,0,0,0,0,0,338,574,0,0,\n0,0,0,1096,491,405,0,0,0,0,0,1081,0,0,0,0,0,0,0,0,0,0,0,0,0,1676,0,1207,0,0,0,0,\n0,0,969,354,0,0,0,0,598,0,297,0,0,0,0,0,0,0,0,1772,751,0,37,0,0,1828,0,0,0,0,0,\n0,0,0,0,257,191,582,0,0,0,0,0,0,790,0,0,0,0,0,47,0,0,0,0,0,0,0,449,306,1011,0,0,\n0,0,0,299,0,0,0,0,0,0,837,0,0,0,0,0,0,10,329,0,0,0,0,0,1320,0,0,0,0,0,0,158,657,\n0,1191,0,0,0,0,0,0,7,0,974,1939,0,1665,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,288,\n66,0,0,0,0,494,175,0,1643,0,0,0,0,0,0,0,0,570,750,719,0,0,0,0,0,0,0,0,0,0,0,0,0,\n13,0,0,1247,0,0,221,356,0,0,0,0,0,0,0,0,0,0,694,1809,0,0,0,0,0,0,0,411,0,44,31,\n0,0,0,0,669,0,673,0,0,0,0,0,0,0,0,0,1303,704,299,0,0,0,275,0,0,216,1761,0,0,0,0,\n0,0,0,0,0,0,0,1319,0,0,428,0,0,0,0,0,0,0,0,0,0,514,0,0,0,0,0,0,49,55,102,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,364,0,0,0,0,379,0,921,971,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1258,0,0,0,1058,0,0,0,0,0,656,0,0,0,0,0,144,0,0,0,0,0,0,0,0,0,0,\n0,1373,10,605,0,0,0,0,0,0,0,838,0,1012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,365,0,0,\n0,0,0,0,0,0,0,340,0,0,0,0,0,810,0,0,0,0,0,0,495,0,0,0,0,0,0,0,0,0,261,0,535,248,\n0,358,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,697,0,0,0,1336,0,0,0,0,0,0,0,0,917,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,351,0,0,0,0,0,0,0,0,0,0,\n0,0,0,286,0,0,56,438,0,0,0,0,0,1950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,738,0,0,0,0,0,\n0,0,0,0,0,969,2047,0,0,0,0,0,0,0,818,0,0,0,0,0,0,0,866,0,0,0,0,0,0,0,1467,0,0,0,\n0,0,0,0,0,0,0,0,0,0,972,0,355,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,267,189,104,0,0,0,0,1613,0,0,0,0,0,0,0,116,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,886,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,0,0,863,0,0,0,0,0,\n0,0,1953,450,1773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,381,0,0,0,0,0,0,0,\n0,0,0,0,0,1142,0,1189,0,0,0,663,0,0,0,0,0,0,0,846,0,0,528,0,393,378,0,0,0,0,0,0,\n325,899,680,1880,0,1770,0,0,0,0,0,648,0,0,0,0,0,0,185,167,0,2046,0,0,0,0,0,0,\n249,1645,0,152,0,0,0,1733,0,0,0,0,0,1006,0,0,0,0,0,420,0,0,0,832,0,0,0,0,0,351,\n0,0,0,0,6,40,0,0,60,0,0,0,0,1354,745,724,0,0,0,0,0,0,0,0,772,1951,275,108,639,0,\n0,0,0,0,0,0,0,0,500,1758,0,0,0,0,0,0,0,0,0,0,0,1886,711,205,0,0,965,865,0,0,0,\n534,0,0,0,0,691,0,0,0,237,443,0,878,0,0,0,0,0,1410,0,0,0,0,0,0,0,0,0,0,0,0,0,\n995,0,0,0,0,0,0,0,0,0,0,0,0,0,578,0,0,0,0,881,0,0,0,0,0,0,0,0,822,0,923,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,924,0,0,0,665,0,0,0,0,0,1901,0,0,0,0,0,950,498,93,\n0,0,0,1451,0,0,0,0,0,747,828,788,400,184,0,198,0,0,0,0,0,0,0,0,0,0,0,994,0,0,0,\n0,0,0,0,0,615,320,0,0,0,978,843,905,0,0,0,0,0,0,0,0,850,974,0,0,0,0,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,509,0,0,0,0,0,273,0,0,0,0,0,0,0,0,0,0,0,0,0,\n201,0,0,0,1041,0,0,0,1040,0,0,0,0,0,0,0,0,0,693,234,774,0,336,0,1399,22,0,805,\n802,777,167,789,0,0,1705,0,0,0,0,0,0,0,0,0,0,0,10,13,11,0,0,204,264,0,0,56,0,0,\n1917,0,470,0,0,0,0,0,0,0,0,0,0,0,1198,0,0,0,0,0,0,0,0,0,0,1015,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,715,0,0,1002,0,0,0,298,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,867,0,0,724,0,0,0,0,0,0,0,0,0,0,0,0,768,0,0,0,0,0,1066,0,0,0,0,67,0,174,948,\n0,0,0,0,0,0,0,0,0,0,0,0,0,764,0,0,0,0,75,137,0,756,0,0,0,0,0,0,1008,842,643,0,0,\n0,67,0,0,0,0,0,0,0,0,0,0,0,135,821,0,0,0,0,0,0,0,0,736,0,389,355,0,0,786,0,0,0,\n0,0,0,2044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1030,0,0,0,1083,0,0,0,0,0,\n1226,0,0,0,0,356,319,8,389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,474,0,0,0,427,\n0,413,0,730,0,0,0,0,0,373,0,0,0,0,0,0,0,0,0,799,0,0,0,1793,0,0,0,322,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,290,2,0,0,0,0,0,0,0,0,0,0,672,\n699,1860,0,0,0,737,0,0,0,1612,0,0,0,0,0,0,0,0,0,0,0,145,124,884,0,0,0,0,0,387,0,\n0,0,0,0,0,0,0,0,0,0,679,0,550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1305,0,0,0,0,0,0,0,\n576,0,0,0,0,0,0,0,686,0,607,0,0,37,0,0,0,0,0,0,0,0,0,101,1726,0,0,0,0,0,958,0,0,\n0,903,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,367,0,0,0,0,690,0,705,273,0,0,887,0,0,0,\n0,0,0,0,0,0,0,0,90,0,0,0,0,0,0,0,908,0,0,0,0,0,0,0,1261,0,0,497,1235,0,429,0,0,\n0,0,904,0,12,125,0,0,0,841,0,0,0,0,0,860,946,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,768,0,770,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,271,0,0,0,0,0,0,0,719,0,699,581,0,0,0,0,0,0,0,0,0,0,862,304,0,631,0,0,0,0,880,\n1513,0,0,0,0,0,981,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,434,0,0,0,0,0,550,0,0,476,930,\n824,553,0,0,452,0,151,0,0,0,0,0,0,772,0,292,135,0,0,0,0,0,0,0,504,0,0,1089,0,0,\n0,0,0,0,0,0,0,0,0,783,0,0,0,0,0,0,206,393,0,0,0,0,0,0,0,0,232,912,0,0,0,0,0,977,\n0,0,716,98,0,0,0,0,0,733,0,0,0,0,0,0,0,0,19,0,0,0,0,668,0,360,0,0,0,0,0,0,656,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,726,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,1269,0,0,463,0,\n0,0,0,0,0,1454,0,1287,245,0,989,0,0,0,0,0,0,0,0,0,107,164,0,0,0,0,0,0,0,1061,0,\n0,0,0,2,484,0,0,0,0,0,0,0,1127,0,0,0,0,0,0,0,460,0,0,0,0,0,932,0,0,0,0,0,0,0,\n588,625,0,0,0,0,76,92,0,0,0,0,0,0,0,0,0,0,0,0,0,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n763,0,622,0,0,0,253,0,546,0,0,110,0,256,916,0,0,35,212,0,0,746,0,0,0,150,0,0,\n1466,0,0,0,1299,0,0,0,0,0,0,0,0,0,1518,0,0,0,0,0,0,0,0,0,0,0,0,0,1229,0,0,0,816,\n0,0,0,0,0,0,159,0,0,0,0,0,734,869,126,1716,0,0,0,0,0,0,202,232,0,0,0,0,212,0,0,\n0,0,0,111,1003,0,0,0,0,0,0,0,0,0,0,0,1712,0,0,216,0,0,0,0,516,0,0,0,0,0,650,0,0,\n0,0,57,99,0,0,0,0,300,574,0,0,0,0,1023,0,0,302,0,1871,0,728,252,0,0,461,0,0,0,\n323,0,0,0,0,0,0,775,461,0,0,0,0,0,0,172,0,0,464,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,73,727,0,1023,0,0,0,0,0,0,0,0,0,0,577,0,0,0,0,0,0,0,0,1037,0,0,0,0,0,0,\n0,0,280,677,0,0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,159,0,446,1730,0,0,0,0,0,0,0,0,0,\n395,0,0,0,0,145,0,0,0,0,0,0,0,20,0,0,426,608,0,0,0,0,0,977,0,250,0,0,0,0,0,100,\n0,0,0,0,1982,0,0,0,0,0,476,0,0,0,0,0,0,594,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,447,0,0,0,0,526,0,0,14,1124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,188,0,0,0,0,0,0,0,0,362,301,0,0,0,1743,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,872,0,831,0,0,208,202,0,0,0,0,0,0,0,1954,0,\n0,0,0,516,872,0,0,313,224,0,0,24,0,11,546,0,0,0,1937,242,241,46,0,0,0,830,1273,\n0,0,0,0,0,0,0,825,327,1006,0,0,0,0,0,1580,516,366,0,0,0,0,0,1736,0,0,0,0,0,0,0,\n0,0,0,0,1935,0,826,0,0,0,0,139,331,0,0,0,0,0,0,0,0,0,0,0,288,0,916,0,0,0,0,0,\n1888,0,0,0,0,0,0,0,1471,0,1570,0,394,0,0,0,0,0,0,0,1931,0,1719,0,658,228,0,0,0,\n0,0,374,0,0,0,0,735,0,0,0,0,0,0,323,498,0,1063,0,0,0,0,155,0,0,0,0,0,0,0,0,906,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,616,\n902,0,0,0,0,0,692,0,0,0,0,0,0,823,0,0,0,305,0,0,0,0,0,0,0,681,0,0,0,0,0,214,\n1004,0,0,0,0,0,0,0,23,0,0,1703,0,0,0,0,0,0,0,0,0,1443,0,0,19,714,0,0,0,0,64,737,\n0,0,345,1758,0,0,579,47,0,0,539,139,0,0,0,0,388,0,0,0,0,253,0,0,0,0,0,0,252,0,\n745,0,0,0,0,0,0,0,0,0,0,0,504,107,0,871,0,0,0,229,0,0,0,0,0,903,0,0,71,0,0,549,\n6,47,0,0,0,0,0,0,0,0,0,980,865,705,0,0,0,161,0,0,0,0,143,1331,0,0,0,1388,33,724,\n0,0,0,19,0,0,0,395,0,0,0,0,0,846,210,0,0,0,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,695,937,497,0,0,0,0,0,718,0,0,0,0,0,0,0,1581,0,\n0,0,0,0,0,161,49,0,0,0,0,0,0,0,0,0,597,0,0,0,1094,0,0,0,811,908,0,0,0,0,0,0,0,0,\n0,0,1471,0,0,0,0,0,0,0,0,0,0,42,1935,0,0,0,2014,66,2007,0,0,586,0,0,0,0,0,0,0,0,\n0,28,1077,0,0,0,1221,0,0,62,0,0,0,0,0,0,0,0,0,0,1766,0,0,0,0,0,0,0,0,0,0,0,0,25,\n0,499,1388,0,0,97,10,0,0,0,0,0,481,0,0,0,0,0,0,0,0,0,0,37,134,155,486,0,1442,0,\n0,0,0,0,591,0,0,0,0,0,0,310,1173,0,0,0,0,409,1156,0,0,0,482,0,0,263,926,0,0,0,0,\n0,0,0,0,0,0,0,0,0,804,0,0,0,0,0,0,0,0,0,0,0,0,0,1265,0,415,0,348,0,0,0,1012,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,165,1803,0,0,0,0,0,0,0,408,\n0,0,0,0,0,0,257,1321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1138,0,0,0,249,0,\n0,0,576,0,0,0,0,231,0,0,0,288,0,0,0,0,0,0,0,0,0,433,1487,569,1678,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,0,0,0,0,0,779,538,0,0,0,413,0,0,0,\n0,0,0,0,0,0,0,495,0,0,0,0,0,191,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,530,567,\n0,0,0,0,0,1484,0,0,0,0,0,0,815,609,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,900,0,0,0,\n0,1335,0,1724,0,0,0,0,0,0,0,0,0,0,0,640,0,0,0,0,0,0,0,0,0,0,0,1831,0,0,0,0,0,0,\n0,0,0,0,0,0,0,474,0,0,0,0,0,0,0,0,0,1103,0,1504,655,1034,0,0,0,0,0,305,0,0,0,0,\n0,0,0,0,0,1236,0,0,429,217,0,0,0,0,739,278,0,0,0,0,0,0,0,708,0,0,0,0,0,1840,233,\n0,0,0,0,0,0,0,0,2017,0,0,0,0,0,1488,0,0,0,1590,0,0,0,0,0,1800,28,0,0,0,0,0,0,0,\n0,0,45,0,36,0,22,1442,378,0,0,0,0,0,0,1507,0,0,0,0,0,0,0,0,0,0,39,0,0,1054,725,\n1955,0,2036,0,0,0,0,0,0,0,0,0,0,896,1871,0,0,0,0,0,0,0,0,0,0,805,0,0,0,0,2046,0,\n0,0,0,17,712,0,617,55,320,271,0,0,0,0,0,0,0,0,0,445,0,184,103,0,0,0,0,0,0,0,0,\n659,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,676,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n337,0,0,0,506,0,0,0,0,0,843,77,0,458,0,0,0,0,0,1420,382,109,142,330,0,0,0,0,0,0,\n0,0,0,0,0,0,87,0,0,0,492,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1239,0,0,0,0,0,0,\n211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1049,0,321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,1985,0,0,122,0,0,234,0,0,0,1098,0,0,0,0,0,0,549,253,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,522,131,0,0,149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,507,0,0,0,0,811,630,0,0,0,343,\n0,0,0,0,0,448,591,455,0,1381,0,0,0,0,0,0,0,575,0,0,0,0,0,1175,0,0,0,0,0,0,0,0,0,\n653,0,0,0,1761,0,1198,0,0,0,0,297,1127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,678,0,0,\n164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,45,0,0,0,0,0,121,0,0,0,0,0,0,\n0,0,125,0,0,0,1622,0,0,0,0,0,721,145,0,0,0,970,792,0,0,0,715,0,0,0,0,0,1999,0,0,\n74,531,0,0,65,0,0,0,105,220,0,0,0,0,0,0,0,960,0,0,0,0,0,0,428,19,0,0,401,96,0,0,\n0,0,0,1595,116,0,1021,0,0,0,0,0,750,1961,0,0,148,0,0,0,0,0,0,0,0,0,0,0,0,0,75,0,\n0,1383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,779,0,0,0,0,0,0,0,0,598,0,424,0,0,0,0,0,0,0,\n1222,0,0,0,876,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,187,0,8,0,0,0,0,0,\n0,0,429,0,685,0,0,0,0,0,0,0,0,0,0,0,132,472,0,0,0,0,0,0,0,0,0,938,0,0,874,0,0,0,\n0,0,774,0,0,0,0,0,92,0,0,0,0,0,0,830,701,0,0,0,0,0,426,350,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,603,59,0,0,0,0,0,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,0,0,441,163,4,0,\n0,0,0,0,0,0,0,0,806,0,0,0,0,0,0,233,0,0,0,0,1994,0,1739,0,0,393,0,47,1038,0,0,0,\n309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,363,0,0,0,175,0,0,0,0,0,0,0,666,\n0,0,1675,0,1600,0,0,0,808,0,0,0,0,0,0,0,0,0,0,0,280,54,0,0,0,0,0,0,0,0,421,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0,103,254,0,262,1,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,1630,0,0,0,0,0,0,0,0,0,0,0,0,0,671,972,989,0,0,\n0,0,0,0,0,889,0,0,0,1382,0,0,0,0,0,0,0,775,0,0,0,0,0,0,0,0,0,0,388,202,0,0,0,0,\n16,560,0,0,0,841,0,0,566,0,0,0,938,0,0,0,0,0,0,0,0,0,0,912,0,0,0,1361,0,0,0,0,0,\n0,618,236,0,1854,0,0,318,190,0,1376,0,0,0,0,0,0,0,349,0,0,0,0,951,1972,0,0,0,0,\n0,0,344,0,0,0,0,0,0,0,0,850,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,163,85,0,487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,145,0,83,0,0,1013,0,0,0,1922,0,0,169,557,66,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,1193,82,0,352,454,57,0,0,1333,396,107,0,370,0,0,0,0,0,0,0,0,0,204,0,0,0,\n0,0,1706,0,0,0,0,0,0,0,0,0,0,0,0,394,1204,0,0,0,0,0,1007,0,0,0,1696,0,1519,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,981,0,0,0,0,1072,0,0,0,712,0,1629,0,0,0,0,0,0,0,728,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1271,0,0,0,1608,16,0,0,0,0,485,0,0,0,0,0,0,\n153,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1991,0,0,0,0,0,0,0,0,52,0,21,0,\n0,0,0,0,0,0,0,0,819,0,0,0,0,0,917,0,0,0,0,784,0,0,0,0,135,0,0,0,0,0,454,0,0,0,0,\n0,0,0,0,0,852,1719,0,0,0,0,0,852,0,0,0,0,0,952,0,0,0,0,568,0,0,0,0,0,448,0,0,0,\n67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1826,657,0,729,666,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n669,0,0,0,0,0,0,0,402,0,0,152,0,0,0,0,912,0,0,0,0,0,0,51,320,0,445,0,0,0,0,308,\n0,0,0,0,0,386,0,0,239,0,0,130,83,0,143,0,348,0,0,0,0,0,0,0,958,0,0,0,0,0,210,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,430,0,0,0,0,0,0,0,0,0,0,0,0,7,213,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,801,0,0,0,0,0,0,0,0,0,936,0,108,0,0,\n0,0,0,0,0,0,0,885,587,219,398,364,0,1165,0,0,342,241,303,0,0,0,0,0,0,0,0,0,0,\n1454,0,0,0,0,0,0,0,0,0,0,254,562,0,786,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1294,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,493,216,0,0,0,0,219,341,0,0,0,0,0,\n0,0,0,0,0,130,1734,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,701,604,0,0,879,0,195,\n666,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1669,0,0,0,1791,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1228,0,0,0,0,0,623,0,0,0,0,0,0,0,798,0,0,0,0,0,0,0,0,0,0,0,0,84,\n122,0,0,0,837,0,0,0,0,0,0,1013,0,0,577,0,0,0,460,932,0,0,0,0,0,0,0,0,0,0,0,31,\n131,0,0,0,605,0,0,0,1246,0,0,0,0,68,278,165,307,781,0,0,0,0,0,0,33,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,1113,0,0,720,1953,203,0,0,0,0,0,0,0,425,326,0,0,0,0,0,\n0,0,0,0,0,241,1316,0,0,0,0,0,416,0,0,0,1300,0,847,0,0,662,358,0,0,0,0,839,1823,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,654,1522,0,0,0,0,0,0,163,0,0,0,0,0,314,978,0,0,0,\n601,0,0,0,0,0,946,434,0,0,0,402,411,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,1467,\n410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,483,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,0,70,0,0,0,0,1405,0,0,0,0,0,0,108,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,777,0,0,0,0,0,747,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,505,0,326,0,0,164,628,654,0,0,0,\n37,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,668,152,0,0,0,0,0,0,0,0,0,0,0,581,\n0,0,0,0,44,126,89,0,0,0,0,0,0,0,0,1531,0,0,0,0,0,0,0,0,203,1167,0,0,0,0,0,0,0,0,\n531,1232,0,0,0,0,0,943,0,670,231,880,0,1617,0,0,0,1957,0,0,0,0,0,0,0,975,0,0,0,\n0,0,0,0,0,0,0,0,242,0,0,0,0,0,0,0,0,0,421,0,0,14,834,0,0,0,0,0,0,0,0,0,0,0,0,\n465,0,0,0,0,0,834,688,413,855,0,0,0,590,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,\n0,45,169,0,0,0,0,0,0,0,0,0,0,0,198,0,0,565,585,0,0,0,0,0,0,0,0,0,0,0,0,0,691,0,\n0,0,593,0,0,0,0,0,0,0,0,0,913,116,0,0,0,0,1360,0,0,0,802,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,673,308,0,709,1006,1895,0,228,0,0,0,1840,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,608,0,0,0,0,0,0,0,0,0,1573,0,2039,136,540,0,0,0,0,0,0,0,\n897,0,0,938,1878,0,0,0,0,0,0,0,0,0,1469,0,999,0,299,0,0,0,0,0,0,0,578,0,0,0,0,0,\n456,0,0,0,1679,163,693,0,0,0,0,0,0,48,755,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,\n1091,0,0,0,0,695,0,0,1464,0,0,0,0,0,975,0,0,335,0,0,1979,0,0,0,0,269,1566,630,\n396,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1815,634,0,0,0,966,0,0,0,0,0,0,0,9,\n412,0,958,0,0,579,382,0,212,0,0,0,0,965,681,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,655,\n0,0,0,0,67,0,0,0,0,0,0,751,0,0,0,0,423,231,0,0,1016,300,0,0,0,0,100,237,0,0,0,\n1370,0,0,0,1208,0,0,0,0,0,1219,129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,199,0,0,427,0,0,\n0,0,949,665,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,712,0,0,0,0,0,1186,0,0,0,0,0,0,0,0,0,0,295,312,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n151,0,0,0,0,588,4,0,0,0,0,0,414,104,0,0,757,263,0,561,0,0,0,320,0,0,0,0,0,0,0,0,\n0,0,0,225,0,0,0,0,37,817,0,974,0,0,0,0,0,0,0,0,0,0,0,0,0,2026,131,235,16,0,590,\n1157,0,0,0,0,0,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,390,0,0,0,0,\n0,0,0,1144,0,0,0,464,0,0,0,0,0,0,0,0,0,0,0,0,204,407,303,1218,0,0,0,0,5,325,0,0,\n0,0,12,800,0,1783,0,0,0,0,0,0,0,0,0,0,504,621,0,0,0,0,0,0,0,0,0,920,0,376,0,0,0,\n0,0,218,580,0,768,454,0,0,0,0,0,0,0,0,0,0,0,0,676,0,0,0,0,0,0,164,0,0,0,0,0,0,0,\n0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,120,285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,226,343,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,0,0,1812,0,0,8,0,0,0,21,1125,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,1327,0,0,0,0,575,1598,0,0,0,0,0,0,0,0,0,895,0,0,0,959,0,0,\n0,0,0,1759,173,0,0,0,0,266,261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,1427,0,0,300,1033,0,0,0,0,0,0,0,0,0,0,0,584,0,0,0,0,52,734,\n0,0,217,239,0,1129,0,0,0,0,0,0,0,0,732,20,0,0,0,0,0,0,0,0,0,0,0,418,0,0,0,613,0,\n0,0,0,0,0,0,0,0,632,0,0,85,984,0,0,0,0,909,694,7,1109,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,167,0,0,0,0,280,62,0,0,33,0,0,359,186,980,0,0,0,0,0,0,0,0,0,0,0,585,0,0,0,\n211,0,0,336,145,0,1130,0,873,0,0,840,263,0,0,0,0,0,0,0,0,0,916,0,0,0,0,0,0,0,0,\n0,0,155,0,0,0,461,97,0,0,0,0,0,1356,0,0,0,0,0,0,0,593,0,0,0,0,0,1392,0,0,0,0,\n126,0,0,0,0,1179,0,0,0,0,0,162,0,0,0,0,0,765,0,187,0,1286,0,0,0,0,0,0,0,0,0,635,\n0,0,23,215,0,0,0,1306,0,0,97,716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,657,0,\n0,0,0,0,0,0,0,299,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0,0,0,0,658,1082,0,0,0,0,0,2002,\n0,0,0,0,0,0,833,248,0,0,0,0,0,1654,0,0,531,0,0,0,0,0,0,634,0,0,0,0,0,0,0,0,0,\n853,573,249,0,0,0,0,0,0,0,0,527,0,0,0,0,1419,0,0,0,0,0,0,20,49,0,0,0,992,0,0,0,\n728,0,0,0,0,0,0,0,0,0,0,0,0,497,1579,0,0,0,0,62,268,0,0,0,0,0,0,0,1201,0,0,0,0,\n0,0,0,0,0,0,0,0,495,193,0,0,0,0,106,0,0,859,0,0,23,0,0,0,0,0,0,0,813,925,0,0,\n223,613,953,0,0,0,0,0,0,0,0,666,0,0,0,0,0,0,0,0,0,670,0,0,40,216,0,0,0,0,0,0,\n259,0,0,0,440,1114,0,0,0,0,0,0,0,0,74,475,0,0,188,139,0,797,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,1572,0,0,0,0,39,0,0,0,0,0,0,0,0,0,0,0,0,1594,0,0,0,0,0,0,0,290,0,232,\n0,0,887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,14,0,0,0,0,0,741,0,0,0,992,0,\n0,0,0,0,0,0,0,111,0,0,425,0,0,0,0,0,789,0,0,0,1593,0,1768,0,0,233,0,0,0,0,943,0,\n0,0,0,0,0,0,955,225,245,0,0,0,0,0,0,241,0,0,0,0,1943,0,0,0,1284,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,709,0,0,0,0,0,0,554,0,0,0,0,0,0,0,0,1564,0,0,0,\n443,0,0,0,0,0,0,280,0,0,0,0,0,0,0,0,729,0,0,0,348,0,0,0,0,0,0,0,758,848,298,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,829,1422,189,121,0,0,632,812,0,0,556,0,0,0,0,0,436,172,\n530,844,232,984,0,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,537,0,0,0,0,0,859,0,0,\n842,0,0,0,0,0,0,0,0,0,0,1291,0,0,0,0,0,0,0,0,0,0,0,1482,612,392,0,0,0,262,31,0,\n0,0,0,0,0,0,0,0,0,753,549,0,0,0,0,0,0,696,0,0,0,0,0,0,0,834,0,0,0,0,0,771,0,0,0,\n0,0,0,0,0,0,0,0,0,0,921,0,0,0,674,0,0,0,0,0,0,0,0,0,0,308,444,0,0,0,0,0,0,805,\n180,0,0,278,271,0,0,214,505,0,1215,0,0,0,0,0,0,387,271,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,1645,42,92,0,459,0,0,330,1557,0,0,0,0,0,0,0,0,113,18,0,0,0,\n1742,0,0,0,965,0,0,0,0,0,0,0,0,0,0,0,0,0,182,0,0,65,0,0,0,0,0,0,0,0,0,0,0,0,973,\n0,0,0,0,0,328,0,0,588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1786,\n0,0,962,1985,0,0,0,308,508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,588,0,0,0,0,0,0,614,793,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,290,0,0,0,0,0,0,0,0,0,0,1136,0,0,0,0,0,0,0,0,0,0,796,719,0,0,\n326,210,0,0,0,701,758,472,0,0,0,1947,278,1079,0,0,0,0,0,0,497,41,0,0,634,46,961,\n0,810,524,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,532,0,997,0,0,0,0,0,0,0,0,0,0,0,1301,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1298,0,671,0,0,0,306,0,0,0,0,0,0,0,0,0,0,\n693,1823,0,0,0,759,0,0,0,0,0,1932,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,182,0,0,0,1964,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,0,0,0,0,0,0,424,857,0,0,0,0,671,328,0,\n529,0,0,0,0,0,716,0,1509,80,67,0,0,0,0,59,141,0,0,0,0,0,0,783,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1498,0,0,0,0,343,430,803,1183,677,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1357,53,0,0,0,0,590,0,0,0,0,0,0,0,0,0,0,\n0,0,0,329,0,0,0,0,0,0,0,469,0,0,0,0,0,0,0,0,0,0,460,0,0,1743,0,0,963,340,0,0,0,\n0,0,1603,0,0,250,0,0,0,0,0,646,218,0,1794,0,0,0,571,0,455,0,0,0,1012,0,0,0,0,0,\n0,0,0,0,0,0,0,597,161,0,349,0,524,0,0,0,0,0,0,0,0,0,0,0,0,322,432,0,0,0,0,0,0,\n325,223,0,0,0,0,0,566,0,0,0,1394,481,436,0,48,457,610,756,618,0,0,0,755,0,1217,\n0,0,0,0,0,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,544,492,107,414,0,0,0,0,0,0,0,0,0,0,0,\n1007,0,0,0,0,5,0,0,1580,0,0,0,0,0,0,0,0,0,0,0,0,0,673,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,1843,0,0,0,0,0,0,0,0,0,165,0,0,0,0,0,0,809,885,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,498,0,0,0,306,9,0,0,0,0,0,0,0,437,721,146,0,0,0,0,0,0,0,0,0,0,0,177,0,0,0,0,\n0,0,0,1377,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,959,0,0,0,1928,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1435,0,481,0,0,0,0,0,0,142,84,0,0,0,0,0,\n1015,0,0,0,315,0,0,0,0,0,0,759,0,0,0,0,0,0,0,0,712,0,0,0,1722,0,0,0,0,0,0,0,0,0,\n0,0,0,222,0,985,1414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1273,\n538,706,0,0,0,0,0,0,0,0,115,0,0,0,0,0,0,0,0,0,0,1781,0,0,0,0,0,431,97,665,42,\n237,0,0,0,264,0,0,213,0,0,0,0,0,0,0,455,0,0,0,906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n624,0,574,0,0,0,0,0,0,0,0,0,0,0,0,354,0,0,0,1558,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,\n235,723,1813,0,0,0,957,0,830,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,496,0,0,0,0,0,0,0,\n547,239,88,0,0,0,0,0,0,0,0,0,1310,0,0,0,0,0,0,0,0,80,1076,0,0,118,0,0,0,479,274,\n0,0,0,0,0,0,0,0,0,0,0,497,0,0,669,261,0,0,0,0,13,0,0,0,0,0,0,791,250,642,0,0,0,\n1429,939,949,0,0,0,0,0,0,0,0,0,0,0,0,0,818,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,982,330,0,0,0,0,545,0,0,0,0,0,0,947,0,1188,0,0,0,0,0,904,0,0,0,0,0,1372,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,693,377,0,0,0,0,0,0,0,0,0,0,0,0,0,0,695,0,0,\n713,386,0,0,0,0,128,1575,0,0,0,0,0,0,424,893,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,904,0,0,0,0,0,552,322,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,1808,49,0,0,0,0,\n1832,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,421,0,0,442,415,0,0,289,\n0,0,0,0,0,206,110,0,0,0,0,0,205,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n19,1539,0,0,0,0,0,1340,0,1194,0,0,0,0,0,0,0,0,549,0,0,0,0,0,0,0,0,1720,0,0,0,0,\n0,0,0,0,0,319,0,0,0,0,112,1180,0,0,0,0,0,0,0,0,0,0,0,967,0,0,0,0,0,0,0,0,0,1940,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,735,0,0,0,0,0,0,0,0,0,897,132,0,0,0,0,0,0,0,\n0,0,0,38,838,0,0,0,379,218,8,660,1017,0,0,0,0,0,0,111,387,647,877,0,0,53,790,0,\n0,0,0,0,0,0,0,458,0,0,0,0,0,0,954,0,0,0,394,0,1367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,882,0,0,0,0,0,0,0,1409,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,124,342,199,0,0,0,0,\n0,0,0,0,0,0,724,628,0,0,0,0,804,266,0,0,0,0,0,208,0,79,0,0,0,0,0,0,0,0,741,0,0,\n0,0,0,0,0,0,0,0,606,0,1494,821,1553,0,0,135,405,0,0,178,100,0,0,0,0,0,0,0,0,0,0,\n0,0,0,481,0,0,0,1378,0,0,0,0,0,0,0,0,0,0,0,0,0,791,33,1227,857,0,467,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,447,0,0,0,0,0,0,86,128,0,0,0,0,0,0,587,0,0,0,692,1018,0,\n195,0,0,0,0,0,0,0,1546,0,0,0,0,0,0,0,0,0,0,0,684,0,0,345,0,0,0,0,0,0,365,0,1683,\n0,0,472,0,433,0,0,0,0,0,0,0,28,0,0,0,997,0,705,3,0,0,0,0,0,0,0,0,0,229,0,0,0,0,\n102,0,0,0,0,866,1022,0,0,0,0,0,0,0,0,0,55,0,115,0,0,0,0,933,0,0,0,0,0,0,0,702,0,\n0,0,0,0,0,0,1728,26,484,0,0,0,185,618,417,0,803,0,0,0,0,0,0,0,0,0,0,0,1262,0,0,\n0,0,0,0,0,0,0,0,0,0,0,633,0,0,0,0,0,0,0,0,0,0,0,0,0,479,262,0,0,0,0,0,0,830,0,0,\n0,0,26,70,0,0,0,0,0,0,0,0,217,0,640,51,0,0,360,1586,0,0,0,0,0,652,0,0,0,0,0,766,\n0,0,0,0,298,737,0,0,0,0,0,0,0,0,0,0,655,222,906,0,0,1013,991,2009,0,0,0,0,503,0,\n0,0,216,154,0,0,0,716,0,844,0,0,0,0,621,252,0,0,0,0,748,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,103,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,576,0,0,0,648,0,0,0,331,0,0,0,\n0,0,0,0,0,0,0,0,0,632,0,0,0,518,107,0,0,0,0,0,0,0,0,851,0,0,0,0,504,0,0,0,0,0,0,\n0,0,0,0,0,0,7,883,0,0,0,0,0,0,0,922,0,0,0,0,0,0,0,0,91,993,0,0,0,0,0,0,200,131,\n10,0,0,0,0,0,0,0,0,0,0,0,0,0,365,1433,0,0,0,0,28,103,0,0,798,1013,0,0,0,0,0,0,0,\n0,39,1925,0,853,0,0,271,519,0,0,0,0,338,0,0,300,470,419,0,0,0,0,0,0,836,0,0,0,0,\n0,0,1937,0,0,0,0,0,393,0,0,357,0,0,0,0,0,703,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,387,0,0,0,0,0,0,75,708,453,1351,0,303,0,0,772,0,0,0,0,0,0,0,0,749,0,0,\n0,0,0,0,0,0,0,0,0,0,0,1065,0,0,717,226,0,0,0,0,0,890,431,626,0,0,0,0,706,0,0,0,\n51,698,0,0,0,0,0,0,0,0,0,0,0,828,0,0,17,0,0,0,0,1929,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,871,498,0,101,1793,0,0,0,0,0,0,435,0,\n0,0,0,0,966,0,129,1644,0,0,0,0,0,0,0,0,0,0,0,0,0,997,502,0,0,0,0,0,0,0,0,0,0,0,\n0,823,0,1927,0,0,0,0,98,1756,0,0,0,0,0,0,0,0,0,0,0,0,8,0,160,1046,0,492,0,0,0,0,\n0,0,129,45,0,0,0,0,0,0,353,558,0,0,0,0,0,785,0,0,0,1145,189,0,0,0,26,353,0,0,0,\n0,0,2024,0,0,0,606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,855,0,0,0,0,0,0,0,0,0,0,0,\n0,0,2011,0,0,5,4,0,0,461,764,0,0,0,1449,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1445,0,0,\n0,1168,0,0,0,233,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,216,0,0,0,286,0,0,0,\n3,0,0,0,723,536,0,0,0,0,0,285,0,0,0,560,0,0,0,0,0,690,0,0,0,0,0,1246,0,0,63,0,\n33,0,0,0,0,0,520,1862,0,0,0,0,0,0,0,0,0,0,0,0,630,0,0,0,0,554,0,0,0,0,0,1001,0,\n0,0,0,0,446,0,0,0,0,0,0,0,1313,0,0,837,636,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278,\n0,0,0,0,0,0,0,0,868,0,0,0,0,1010,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n1231,0,304,0,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,93,1408,794,\n843,704,0,285,114,485,898,145,0,19,2035,0,0,0,1933,0,0,0,0,0,0,0,1728,0,0,0,0,0,\n0,0,0,746,0,0,0,0,0,0,0,995,1964,0,0,0,0,0,0,0,0,0,0,0,1550,0,874,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,1018,0,0,0,814,126,0,0,1264,0,0,814,955,0,0,0,0,0,0,\n0,981,0,0,0,0,0,0,0,0,915,56,0,0,100,0,0,0,0,0,0,0,0,0,638,0,0,0,0,738,0,0,0,0,\n0,0,0,0,0,758,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1112,0,0,214,0,0,0,133,0,196,\n168,0,0,0,0,0,1152,0,1245,0,0,538,169,871,1816,0,0,413,133,0,0,0,978,0,0,43,93,\n371,0,0,0,0,0,0,526,25,0,754,335,0,0,0,0,182,0,0,0,0,0,0,0,0,0,0,0,39,601,0,0,0,\n0,0,0,0,181,370,0,0,1652,358,0,0,0,0,0,0,0,0,0,176,286,0,788,0,0,0,0,0,1223,780,\n254,1003,896,0,0,0,1447,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,744,0,0,0,0,0,126,0,\n41,788,0,0,0,629,0,0,0,0,0,0,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,420,37,1900,0,0,0,0,542,1570,957,0,0,0,0,0,0,\n0,373,31,0,0,0,0,125,325,0,0,0,0,0,0,323,0,0,1547,0,0,0,0,0,0,0,0,0,0,0,0,0,\n1216,0,0,0,0,0,0,198,1905,629,15,0,0,0,0,0,0,20,75,543,1353,0,0,0,533,0,0,6,0,0,\n0,0,0,0,538,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,11,0,0,0,284,659,0,989,0,0,0,0,0,\n0,0,0,0,848,0,0,507,0,0,0,0,0,0,0,0,188,991,884,0,0,0,0,60,959,0,0,0,0,0,1653,0,\n0,922,337,0,638,0,0,500,0,0,0,0,0,0,0,0,0,0,0,166,0,0,0,0,0,0,0,0,0,0,0,0,418,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,760,0,0,0,0,0,0,1277,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,770,0,0,0,0,0,0,0,243,89,0,0,0,0,0,0,0,0,0,1396,0,\n560,0,0,3,1658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,586,0,0,1271,0,0,0,505,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1947,\n41,445,0,0,0,0,0,0,0,0,57,189,0,0,371,0,0,0,0,552,0,883,0,923,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,875,0,0,0,1788,49,0,0,0,0,0,\n0,0,0,0,0,0,661,0,0,1945,0,0,0,0,0,794,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,1135,0,0,0,745,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,410,0,976,0,0,0,0,0,703,0,0,\n0,0,0,0,187,322,0,0,0,227,0,0,0,0,560,0,31,1395,0,0,0,0,0,466,0,0,0,0,643,167,0,\n0,0,1428,0,412,0,0,0,0,0,0,0,0,0,1118,562,0,0,0,0,0,256,0,0,0,0,0,0,1771,0,0,0,\n0,0,1190,132,0,66,0,0,0,0,0,0,0,0,0,0,317,0,0,0,63,0,0,0,0,0,0,0,1475,0,0,0,0,0,\n0,0,288,0,0,0,0,608,0,0,0,0,0,0,0,0,1225,0,1189,0,0,0,0,0,0,0,1468,0,0,0,0,0,\n689,120,0,0,0,0,0,0,0,1,0,329,0,0,0,0,226,0,0,0,0,0,1855,0,0,461,0,0,0,0,1346,0,\n0,0,0,0,85,0,0,299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1171,0,0,\n0,980,0,0,0,0,0,0,0,0,637,279,0,0,0,0,0,293,0,0,0,0,528,17,0,0,0,0,5,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,601,0,0,0,0,0,0,779,0,\n196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1322,737,752,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,412,192,80,0,0,8,1470,0,0,0,0,0,0,0,0,0,873,0,0,0,0,0,835,0,0,0,0,256,\n38,986,0,0,0,0,0,0,0,0,0,91,257,278,911,0,0,0,0,0,0,0,0,749,151,0,0,0,0,0,0,0,0,\n0,0,0,0,989,0,0,990,0,0,90,194,0,0,0,0,0,425,0,0,0,0,0,774,0,0,0,0,0,0,0,0,0,0,\n646,827,752,0,0,0,662,0,22,21,0,0,0,0,0,0,95,239,0,0,0,431,0,0,0,0,0,874,0,0,\n265,65,0,0,0,1350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1887,0,0,0,0,0,0,0,809,\n0,696,0,1074,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,630,0,0,802,0,0,0,56,776,0,\n970,0,0,797,0,0,0,0,0,400,0,0,1951,0,0,41,0,11,118,0,0,0,0,0,0,0,0,251,615,0,0,\n0,1044,0,0,0,0,0,0,0,0,0,0,0,225,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,370,0,0,0,0,\n104,48,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,930,0,0,0,0,\n0,0,0,0,0,0,0,1286,0,759,0,120,385,0,0,0,429,0,0,0,0,0,0,0,0,820,0,0,0,0,0,0,\n199,0,10,151,0,0,0,761,365,0,0,0,0,0,0,0,0,0,46,1086,0,0,0,0,11,1624,58,344,0,0,\n1008,1868,0,0,0,888,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,914,1913,0,958,0,885,0,0,0,0,0,0,0,0,0,0,0,\n0,0,847,276,0,302,65,0,0,0,510,0,1514,0,0,0,0,0,0,152,291,0,0,0,0,0,0,0,0,0,0,0,\n0,282,589,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0,463,42,0,0,0,0,0,372,0,0,0,0,0,0,0,\n0,0,680,0,0,0,0,0,0,0,0,977,1997,0,0,0,810,0,0,0,0,0,0,0,0,0,1390,0,0,0,644,0,0,\n867,982,0,0,0,0,0,0,0,540,0,123,0,0,0,1978,0,0,0,0,789,623,0,1723,0,1220,0,0,0,\n0,0,0,0,480,0,0,0,0,0,0,0,0,0,0,0,888,0,0,0,0,0,0,0,0,0,0,0,0,299,1995,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,788,179,0,0,0,0,0,0,431,156,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1373,39,80,196,0,0,507,0,0,0,646,0,0,0,0,\n0,1214,0,0,0,0,926,0,0,0,1,114,0,0,0,0,0,446,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,490,0,0,0,491,0,1584,0,0,507,250,0,0,0,158,\n10,362,1,0,0,0,0,0,0,0,0,0,408,228,860,480,0,779,0,0,0,557,0,0,142,197,0,0,0,0,\n0,0,0,0,0,0,0,1490,11,378,316,1057,0,0,18,579,299,1546,0,177,0,0,0,0,0,0,0,0,0,\n411,0,0,0,0,727,439,0,0,0,0,0,1528,0,0,0,0,0,0,58,0,482,0,0,0,505,1952,0,0,0,0,\n0,0,0,0,0,0,0,242,0,0,0,0,0,0,0,953,0,0,0,0,802,0,0,0,0,0,0,0,0,0,0,290,0,0,791,\n52,0,0,0,0,0,0,0,0,0,0,0,112,0,0,0,0,0,1028,0,0,138,0,0,0,0,1811,0,0,0,0,0,0,\n934,1821,0,0,0,0,371,38,0,0,0,1296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,723,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1330,0,0,0,0,0,0,0,1255,296,109,0,0,0,0,0,660,0,0,0,0,270,591,0,\n0,0,0,0,0,0,1090,81,0,0,0,0,391,0,0,0,0,249,322,0,0,0,0,0,0,0,1412,0,0,0,0,0,0,\n0,0,0,0,526,632,0,0,0,0,0,0,235,144,0,0,0,0,0,940,0,0,0,52,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,309,196,0,0,0,0,0,1912,0,1290,0,686,0,0,625,0,0,0,0,0,0,0,0,0,0,0,412,0,\n0,0,0,43,0,0,0,0,11,967,758,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,0,0,0,0,0,0,0,0,\n873,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,890,0,0,2,0,0,0,0,0,0,0,0,1774,\n393,263,0,0,0,0,0,0,818,456,0,0,251,178,393,97,0,0,0,0,0,674,168,0,0,0,0,0,0,0,\n159,1639,0,0,0,0,0,0,0,0,59,934,0,191,0,0,0,0,346,165,0,877,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,128,0,0,0,0,0,0,1297,0,0,0,0,0,0,164,0,0,0,15,132,241,1073,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,228,324,53,0,0,910,0,0,0,0,0,0,0,0,734,705,\n217,73,0,0,0,0,0,0,0,0,636,389,0,1409,0,0,0,0,0,893,0,0,0,0,21,0,0,0,0,0,0,0,0,\n0,0,0,0,0,721,0,0,0,959,0,0,0,0,1433,0,0,0,0,0,0,0,0,0,0,0,0,174,189,0,0,0,0,0,\n0,0,0,0,0,22,2,0,0,815,354,0,0,0,0,425,0,411,60,13,1611,0,0,0,0,0,0,0,0,0,0,0,0,\n0,1478,596,0,0,398,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,1159,0,0,0,0,0,\n592,223,0,0,0,0,0,0,0,245,64,0,0,0,0,278,0,604,0,0,1502,265,0,0,0,0,0,0,0,310,\n1763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,0,0,0,0,0,0,0,0,0,1356,0,0,0,0,0,0,0,\n0,505,0,0,0,0,0,0,0,1000,0,0,966,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,839,0,0,0,0,0,0,\n0,0,0,0,0,0,0,637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,590,0,0,0,0,280,0,0,0,1386,0,0,0,\n281,0,1064,0,0,0,0,0,917,0,0,15,555,0,0,1014,1883,0,0,0,965,0,0,117,33,0,0,0,\n801,0,0,0,0,0,877,0,824,0,0,0,0,0,0,0,0,0,0,0,365,0,0,0,0,0,0,774,7,0,430,0,0,\n231,360,0,0,0,0,0,0,0,0,822,740,0,0,929,1485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,852,0,0,0,0,17,0,0,0,0,0,0,1001,0,0,0,0,35,831,0,0,384,457,0,0,0,1351,0,27,\n0,0,984,0,264,552,0,401,0,0,0,710,0,1211,0,0,11,205,0,0,0,0,0,0,0,0,0,0,0,0,5,\n579,0,717,0,0,1011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,0,0,489,0,\n0,0,1024,0,0,0,0,0,0,0,0,0,892,0,0,0,0,0,0,0,0,0,0,0,0,473,0,0,0,659,864,0,0,0,\n0,0,0,152,819,0,51,0,0,0,0,0,0,0,0,0,0,130,0,0,0,0,0,229,0,0,0,0,674,0,0,0,0,0,\n0,0,0,0,770,52,79,0,0,0,1666,0,409,0,0,0,0,0,0,0,195,0,688,0,0,0,0,0,0,0,0,0,0,\n0,889,174,160,0,0,0,0,0,0,0,0,0,0,0,0,0,872,0,918,569,268,0,0,0,1224,0,1361,0,0,\n0,0,0,0,0,0,0,374,0,0,0,0,0,731,0,0,0,0,190,0,0,0,0,0,0,0,202,506,444,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,835,0,17,1526,0,0,0,0,0,477,0,0,\n994,1374,76,0,0,0,0,0,0,0,355,287,0,1389,0,0,0,0,0,0,455,384,0,0,0,264,0,0,0,0,\n0,0,0,0,0,0,0,0,1001,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,851,175,359,0,0,0,0,0,0,0,\n0,287,740,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,857,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n819,1402,0,0,0,0,0,0,174,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1649,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,655,573,0,0,0,0,0,0,0,0,128,351,0,0,0,0,0,0,\n0,0,0,0,0,918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,687,0,0,0,0,0,0,0,0,0,1525,\n0,0,0,1009,0,0,0,0,0,0,0,340,0,0,0,0,0,0,0,0,0,0,861,0,176,0,0,0,0,0,0,0,0,0,96,\n985,0,615,0,0,0,0,0,0,0,1919,0,0,0,0,0,1131,0,0,0,0,0,0,0,247,0,0,0,0,27,23,0,0,\n0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1015,0,0,0,0,0,1088,0,0,\n0,0,0,1585,0,0,0,0,227,0,0,0,478,360,0,0,0,95,0,0,0,0,0,0,699,0,0,0,26,0,0,0,0,\n1119,0,0,0,739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,741,67,0,0,0,0,0,0,464,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,0,96,0,0,0,26,342,0,0,0,0,0,0,203,0,0,449,0,\n0,0,0,0,0,0,0,0,0,256,311,0,0,0,0,0,0,758,0,0,0,0,0,0,0,0,827,0,0,0,0,581,64,0,\n1047,0,0,0,0,0,288,0,0,0,0,0,1375,0,0,0,0,0,0,0,0,0,0,0,1309,0,0,0,0,0,0,0,0,\n376,12,0,0,0,0,0,154,0,1520,0,1753,95,502,0,0,0,0,0,0,0,269,291,1197,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,1341,0,1017,0,0,0,0,0,0,0,\n0,857,1810,533,0,0,1453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,836,211,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,19,0,156,0,0,0,0,1009,0,0,0,0,0,0,0,0,0,0,0,0,0,820,0,0,\n0,0,0,0,0,0,0,228,0,0,0,1131,0,1276,0,0,0,0,0,0,0,0,0,0,0,0,849,1792,0,0,389,\n291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,525,0,0,\n0,453,0,0,0,0,666,0,0,0,422,0,355,0,0,0,0,165,0,260,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,865,0,0,0,0,0,0,0,1625,0,0,0,234,0,1383,0,0,0,0,0,0,0,0,306,0,0,0,802,1921,\n0,0,0,0,0,0,180,0,0,0,0,1312,814,0,0,0,0,0,0,0,0,0,0,707,0,0,0,1493,11,61,733,0,\n0,0,341,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,1014,0,0,0,0,0,0,0,142,102,0,0,30,0,0,\n823,0,1045,0,0,0,1930,0,1512,0,0,0,0,0,0,0,87,0,1243,245,0,0,0,0,0,0,0,48,68,0,\n0,0,0,0,0,0,0,126,77,625,938,0,0,351,0,0,0,174,1668,0,707,0,0,0,0,0,0,0,0,0,0,0,\n403,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,282,0,0,0,0,0,0,8,44,0,0,363,115,0,0,0,0,0,0,\n0,0,0,0,0,0,545,761,0,0,835,1254,0,0,0,0,930,1936,0,0,0,0,0,0,0,0,653,0,0,0,0,0,\n344,0,0,1483,673,185,0,0,460,93,753,478,0,0,0,0,0,1020,0,0,0,0,0,0,0,103,0,0,0,\n499,0,0,0,0,0,0,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,0,968,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,3,0,0,0,0,399,0,0,0,0,224,563,0,0,0,0,0,704,0,0,0,0,0,0,0,0,0,0,0,\n1559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,861,0,0,0,0,946,333,746,0,0,0,0,0,\n0,0,910,0,0,0,0,0,0,0,0,0,0,0,0,0,652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n1393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1514,0,0,0,0,201,0,510,717,0,0,528,0,0,0,0,\n20,0,0,0,1251,0,0,0,1163,0,0,0,307,0,0,0,0,0,1091,0,0,0,0,0,0,0,0,0,0,0,429,0,0,\n0,881,0,0,0,0,0,621,0,0,0,0,0,0,0,736,0,348,0,868,0,0,0,0,433,0,0,0,771,1495,0,\n0,0,0,215,0,0,0,0,0,124,0,0,0,0,0,0,0,0,0,0,0,55,0,0,0,0,0,0,0,112,62,0,856,270,\n0,572,0,0,0,0,939,0,0,0,0,0,0,0,352,0,0,0,0,0,0,0,0,0,647,0,0,0,0,10,0,0,0,0,0,\n0,0,220,0,0,0,0,0,0,0,0,0,0,0,0,0,464,0,0,109,0,0,0,1746,0,0,0,515,0,0,0,566,0,\n0,0,0,0,0,67,40,0,0,722,992,0,0,923,0,0,0,0,0,0,1145,0,0,0,0,0,0,0,0,0,0,0,568,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,0,0,0,0,645,0,0,328,0,0,0,0,0,0,0,0,0,0,0,0,\n1363,0,0,0,0,0,1280,0,0,0,0,0,0,0,0,0,0,7,28,360,162,0,0,0,0,0,0,0,0,0,0,0,764,\n0,0,833,862,0,856,0,0,0,0,0,0,736,92,0,0,948,1944,0,1479,63,590,0,0,0,1521,0,0,\n0,709,0,0,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,483,0,0,0,0,1213,\n0,0,0,0,29,1022,0,1712,0,466,0,0,0,0,0,0,0,0,0,0,0,0,0,731,0,0,0,0,0,0,171,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,241,0,0,0,0,0,0,0,0,0,0,0,964,2005,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,1100,0,0,0,954,0,0,0,0,0,0,0,0,0,1958,0,0,34,549,994,0,0,449,\n137,850,0,0,670,146,0,0,0,0,518,159,0,0,0,0,0,0,0,0,151,0,0,1027,0,0,0,0,0,0,0,\n0,0,0,983,0,0,0,0,993,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,501,0,0,0,\n0,0,0,0,0,0,452,0,0,0,0,0,0,0,0,0,0,233,149,0,0,0,0,0,0,0,0,582,0,0,0,801,0,0,0,\n0,0,0,70,0,0,369,0,36,0,0,0,0,0,0,0,204,721,430,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1817,16,1078,1021,0,0,\n406,0,0,0,0,0,69,0,0,0,0,0,1830,0,0,0,824,0,0,0,0,0,0,0,0,0,826,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,816,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,717,1845,0,423,0,0,\n0,0,0,0,0,0,510,0,0,1048,0,0,0,618,0,0,0,520,0,0,0,0,990,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,321,0,0,0,0,0,0,0,1135,0,0,921,0,0,0,24,397,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,856,0,0,0,139,282,981,0,288,0,0,0,1890,651,56,0,0,0,0,0,0,0,\n0,261,0,0,0,0,0,0,0,0,0,0,0,617,1403,0,1205,0,0,563,0,0,0,0,0,0,0,0,333,0,0,0,0,\n0,369,0,0,0,0,0,0,0,0,0,622,0,0,0,1407,0,0,0,0,0,0,0,0,0,0,0,0,624,160,0,363,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,619,0,174,292,0,0,656,616,0,0,0,685,0,0,0,0,0,0,0,0,0,0,0,0,0,647,0,0,0,631,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1267,0,0,0,1797,0,0,0,1684,0,0,469,0,531,\n1230,73,0,0,0,0,0,0,0,0,0,268,0,0,0,0,0,102,558,109,65,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,595,0,0,0,0,0,374,1832,0,0,0,0,0,0,16,0,405,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,881,0,1495,0,0,0,0,0,0,0,0,0,142,0,0,0,0,0,0,0,0,0,0,21,466,23,\n257,0,0,0,0,0,0,77,404,0,0,0,0,0,0,712,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,860,\n1848,0,0,652,629,0,0,0,0,13,377,0,1842,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1501,0,\n0,0,1906,0,0,0,0,0,0,0,0,0,0,0,0,0,491,234,171,0,0,0,0,631,1186,0,0,0,0,0,0,0,0,\n0,0,0,0,931,0,170,0,0,0,0,0,0,0,0,0,0,1587,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n765,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,424,0,0,714,0,0,0,0,685,0,0,0,0,0,\n0,285,0,0,0,0,0,0,429,0,0,0,0,0,0,0,0,0,0,71,18,0,0,0,0,0,0,0,0,0,0,116,828,0,0,\n0,0,0,0,289,0,0,0,0,0,0,0,0,675,0,0,0,1424,0,0,0,0,0,647,0,0,0,1334,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,36,209,0,0,0,0,0,0,0,342,0,0,0,928,0,0,0,0,0,1838,118,856,654,\n318,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,915,895,454,0,0,513,1425,0,0,\n0,0,0,0,791,0,153,0,0,0,0,0,0,796,909,445,345,0,0,0,0,0,0,0,0,578,0,0,0,1387,0,\n0,0,555,0,0,0,0,0,0,766,0,0,0,0,0,0,0,0,0,0,541,0,0,0,0,0,0,0,0,0,0,0,0,0,880,0,\n0,0,0,0,1506,0,0,983,0,768,0,0,0,0,584,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,737,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,226,30,426,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,462,0,0,0,385,0,398,0,0,0,0,0,0,\n0,0,0,347,0,0,0,0,125,1259,644,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,469,0,0,0,0,0,\n1367,0,0,0,0,0,0,0,0,0,0,0,719,0,0,0,0,0,0,0,0,0,0,0,0,0,1423,0,0,0,0,0,0,0,0,0,\n749,0,0,0,0,546,645,0,0,0,0,0,0,277,0,0,1275,0,0,0,0,0,0,0,453,536,555,0,0,987,\n1107,0,0,90,0,0,0,0,0,0,0,0,860,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n257,0,1768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1071,0,0,0,0,0,0,0,0,0,0,0,0,0,83,\n0,835,0,0,0,0,0,0,0,2006,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,696,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,95,1718,0,0,0,0,0,0,0,26,0,550,0,0,0,0,0,901,0,0,0,0,0,\n0,822,0,0,122,0,0,0,807,0,0,0,0,0,262,0,620,601,34,0,0,170,0,0,0,0,537,0,0,0,0,\n0,0,0,0,0,332,0,0,208,1909,182,261,0,0,0,1721,0,0,0,0,0,933,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,1609,0,895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,812,0,0,942,1916,0,0,0,0,\n0,0,0,778,0,0,0,137,0,1314,0,0,0,0,0,0,0,1661,0,0,0,0,0,0,0,1591,0,0,0,0,0,0,\n820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,89,0,1160,230,6,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,63,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1740,0,0,177,\n170,0,1961,0,0,0,0,0,0,0,0,0,0,0,0,91,0,17,44,0,0,0,0,0,0,0,0,0,270,0,296,0,0,0,\n0,0,0,0,1523,0,0,0,0,0,0,0,0,0,0,757,7,0,0,0,0,0,0,0,0,0,0,530,588,0,0,0,0,0,0,\n0,0,0,786,0,0,0,0,0,580,627,88,447,57,0,0,0,0,0,0,0,0,845,735,0,0,0,0,0,31,15,0,\n460,521,12,424,0,0,0,1302,0,0,0,0,0,0,0,595,0,0,0,13,548,97,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,1472,452,1767,0,0,0,0,0,0,0,0,0,0,115,0,0,0,0,0,0,1543,0,1111,0,0,0,0,\n1,0,359,488,0,267,0,0,0,1983,0,0,0,0,0,0,0,1155,0,1575,0,1438,31,0,0,377,101,0,\n0,0,0,0,0,0,0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,2023,0,0,0,0,0,1836,0,0,0,0,35,843,\n0,0,0,0,0,0,0,554,0,0,0,536,625,207,0,1371,0,0,0,424,785,336,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,896,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,750,0,0,0,0,238,0,0,\n0,0,0,383,0,0,0,0,0,0,0,0,603,725,11,0,0,0,0,0,0,0,0,0,476,0,0,0,0,0,1552,0,0,0,\n0,0,0,0,680,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,435,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n1431,0,0,13,112,0,0,356,0,0,0,0,0,0,0,0,0,0,1963,0,0,0,1244,18,0,0,0,0,0,0,867,\n0,0,0,0,0,0,50,708,73,592,0,502,0,0,0,0,0,0,161,347,0,0,0,0,470,33,0,246,571,10,\n0,465,614,0,237,0,0,0,0,0,24,18,0,506,0,0,0,0,0,0,33,309,0,0,0,0,0,0,0,0,0,0,\n140,0,0,0,0,1056,0,0,0,1704,0,0,0,0,0,0,0,1036,0,0,0,0,0,0,0,0,0,1315,432,86,\n264,524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,107,0,0,0,0,0,123,927,0,0,957,1149,0,0,\n0,0,0,778,0,502,196,0,0,0,0,1312,0,0,0,0,0,0,0,855,0,0,0,0,0,0,0,0,0,0,45,1400,\n0,0,0,1003,0,0,0,0,0,1097,0,0,0,0,0,0,0,0,545,612,0,0,0,0,0,0,0,0,0,0,0,0,54,0,\n0,0,0,172,0,0,0,1029,0,0,0,0,0,0,0,0,0,568,0,0,0,732,617,0,0,974,94,989,733,0,0,\n0,0,0,0,1789,0,0,665,2015,0,0,0,0,0,0,806,287,0,0,0,0,0,1539,0,0,0,0,0,0,0,0,0,\n0,182,1563,0,0,0,0,0,0,0,0,0,484,0,0,0,0,0,1623,0,0,0,0,0,0,0,0,878,1833,0,1569,\n0,0,0,0,0,0,0,0,93,0,715,994,0,0,0,0,0,63,0,591,0,0,0,0,0,0,0,749,0,0,0,0,547,\n366,0,0,0,1747,0,0,0,0,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1463,0,772,\n893,0,0,0,48,0,0,941,0,0,690,1785,106,440,0,0,0,0,0,0,0,0,0,0,32,0,332,216,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,852,0,\n0,416,564,0,918,0,1764,0,0,3,0,0,274,0,0,0,0,501,0,0,0,0,0,0,0,851,743,0,49,0,\n879,0,0,47,0,0,0,0,0,0,865,0,1202,0,0,0,0,0,0,47,272,0,0,0,0,0,0,0,0,0,0,0,1455,\n0,0,0,0,891,1911,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,761,0,0,0,0,0,0,0,0,0,407,0,\n183,0,0,490,0,0,0,0,0,0,0,35,731,0,0,0,0,0,0,0,819,0,0,0,0,0,0,0,0,0,0,0,0,0,\n575,0,0,0,0,45,818,0,0,77,222,0,0,0,0,849,1880,0,0,0,633,0,1308,0,0,0,0,0,0,0,0,\n0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,817,0,0,0,0,0,0,0,0,0,882,0,0,0,914,0,0,0,0,\n0,0,0,0,0,0,865,0,0,426,399,58,0,0,0,0,0,0,538,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,876,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,566,0,63,12,0,0,0,\n0,0,0,0,0,0,0,0,0,0,3,114,0,0,0,0,0,0,0,0,576,0,0,0,0,0,0,0,0,933,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,692,0,0,0,0,0,0,0,0,0,0,0,0,752,0,0,0,0,\n0,0,0,0,375,0,1011,0,0,96,0,0,0,0,0,0,0,0,0,148,0,0,0,0,0,0,0,0,0,0,0,337,56,\n666,0,246,394,0,0,0,0,0,0,0,0,437,0,0,0,506,0,0,0,0,1003,0,1163,0,328,0,0,0,0,0,\n0,0,0,1000,0,0,0,0,0,744,101,0,0,0,0,0,726,0,0,176,0,146,9,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,839,0,0,0,0,0,0,223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,246,1931,29,0,0,1771,0,0,0,0,0,846,6,157,0,0,0,0,0,0,0,0,0,875,0,0,477,\n773,177,639,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1747,0,0,0,0,158,873,0,659,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,391,0,0,0,0,0,0,0,0,0,0,0,0,668,883,0,78,628,0,0,0,\n0,0,0,0,0,0,0,0,0,1460,0,962,0,0,0,0,0,460,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,199,0,\n0,0,388,474,0,271,0,333,608,0,0,0,0,0,0,49,0,988,0,707,617,0,0,0,0,0,0,0,756,0,\n0,0,0,0,1583,0,0,0,0,0,0,0,0,0,0,285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,344,0,0,0,0,0,\n0,0,0,515,1709,0,0,0,0,0,0,0,0,404,0,0,0,0,500,0,0,0,0,0,0,0,0,0,68,216,0,0,0,0,\n0,0,0,488,353,0,0,177,236,0,0,458,490,0,0,0,0,0,0,756,1504,0,757,0,1735,0,0,108,\n598,0,0,0,0};\nconst BROTLI_MODEL(\"small\")\nuint8_t kStaticDictionaryHashLengths[BROTLI_ENC_NUM_HASH_BUCKETS] = {\n8,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,12,0,0,0,0,4,22,5,0,\n4,0,0,0,0,0,0,0,0,0,0,0,0,14,6,0,0,0,5,0,0,0,0,0,0,0,7,13,0,0,4,0,0,0,0,0,0,0,0,\n0,6,0,0,0,0,8,0,0,0,0,0,0,7,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,4,0,0,0,4,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,10,4,0,5,13,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,8,7,0,0,9,0,8,0,0,0,0,0,0,6,0,\n0,9,0,0,0,11,0,0,6,8,7,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,6,8,0,0,0,0,0,\n0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,9,0,0,0,8,4,13,7,0,0,0,0,0,\n7,0,5,0,0,0,0,8,5,0,5,0,0,8,7,0,0,0,0,0,0,0,0,0,0,9,0,0,0,8,0,0,0,10,4,0,5,0,4,\n0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,8,7,0,4,9,4,0,0,0,0,0,0,\n9,0,0,0,8,5,0,0,0,6,0,0,0,0,0,0,0,0,0,7,18,0,0,0,0,4,9,0,0,4,0,6,0,0,0,6,0,6,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,5,8,7,0,0,0,\n0,9,0,0,0,0,0,0,0,8,6,10,6,0,0,0,4,0,6,8,6,0,0,0,4,0,0,0,0,0,5,0,0,0,6,0,0,0,0,\n10,0,12,7,0,0,0,0,0,4,0,0,0,0,0,5,0,0,8,7,0,0,0,0,0,0,0,0,9,5,0,0,0,0,0,0,0,0,0,\n0,0,0,0,6,11,0,0,0,0,0,0,0,0,0,8,7,0,0,10,0,0,0,0,0,0,0,0,6,10,0,17,0,8,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,8,6,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n7,0,0,11,4,0,5,0,0,0,0,0,0,0,0,0,0,10,5,0,6,8,5,0,0,0,0,0,0,0,0,0,0,11,5,0,0,0,\n0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,9,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,8,7,0,0,0,0,0,\n0,0,0,0,0,0,5,0,0,0,6,0,0,10,0,0,0,20,0,0,0,0,0,0,0,0,6,9,5,0,0,0,0,10,4,8,0,0,\n4,13,0,0,0,0,0,0,0,9,0,9,0,0,0,0,0,0,0,0,0,0,0,0,4,8,6,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,12,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,12,5,0,0,10,4,10,7,13,\n0,0,0,0,0,0,0,0,6,0,6,0,6,0,0,0,0,0,0,19,0,0,4,12,6,9,0,0,0,0,4,0,4,11,0,0,0,0,\n0,0,0,12,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,4,0,0,0,0,0,0,0,0,0,6,0,0,0,0,\n0,5,0,0,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,9,6,0,0,0,0,0,4,0,4,0,0,0,0,0,0,0,0,0,4,0,0,0,\n6,0,0,0,0,0,0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,6,0,0,\n0,0,0,5,0,0,0,0,14,4,0,0,0,4,12,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,6,0,\n0,0,0,0,0,12,0,9,6,0,0,0,0,13,0,0,5,0,0,0,0,0,4,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,13,0,9,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,8,7,8,4,0,0,0,0,0,0,0,0,0,0,0,7,0,7,0,0,0,4,0,\n0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,6,8,4,0,0,0,0,0,6,0,7,0,\n0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,7,0,0,0,0,0,0,9,5,0,0,\n0,0,0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,9,4,0,0,0,0,0,0,0,4,\n12,5,11,0,0,0,0,0,0,0,0,0,8,7,0,5,0,0,8,7,0,5,0,0,0,0,8,0,0,0,0,7,0,4,10,0,0,0,\n0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n13,5,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,0,14,5,0,0,0,7,0,0,10,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,6,0,4,0,5,0,0,0,0,8,5,0,0,0,0,0,0,9,5,9,0,0,0,0,0,0,0,0,6,9,0,\n0,4,0,0,0,7,0,0,0,6,0,0,10,4,0,0,0,0,0,6,0,0,10,0,0,0,8,5,0,0,0,0,0,0,0,0,10,0,\n0,0,0,0,18,4,12,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,8,7,0,0,0,\n0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,4,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,\n0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,8,0,0,0,0,0,0,6,0,0,0,4,10,5,0,0,0,0,0,0,0,0,0,0,\n0,4,8,7,0,0,8,6,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,\n0,0,0,8,6,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0,\n0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,8,7,0,0,0,0,8,0,12,6,0,6,0,0,0,0,9,7,11,7,0,0,0,\n0,0,0,0,0,0,0,0,0,11,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,10,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,\n0,0,0,6,0,0,0,7,0,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,14,0,0,0,0,0,8,4,0,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,20,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,12,5,0,7,0,5,0,0,10,0,0,7,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,6,0,4,9,7,0,0,0,\n0,0,7,0,0,0,0,0,0,10,0,9,0,9,0,0,0,0,0,0,0,0,4,9,0,0,0,0,6,0,0,0,0,0,0,0,0,11,4,\n0,6,0,0,0,0,0,0,8,0,8,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,0,0,0,0,0,13,6,0,0,11,\n0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,6,18,0,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,\n0,5,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,6,0,0,0,0,9,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,11,\n4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0,0,0,8,\n6,0,0,0,0,0,0,9,6,0,0,0,0,0,4,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,\n0,6,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,6,0,6,0,0,10,6,0,0,0,7,0,0,8,0,8,7,0,\n0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,0,0,0,0,5,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,\n0,0,0,8,7,0,0,0,0,0,0,0,0,12,0,12,0,0,0,11,6,0,5,0,0,12,0,12,5,0,7,11,6,0,0,11,\n0,0,0,12,0,0,4,12,7,8,6,0,0,0,0,8,5,0,0,0,0,0,0,0,4,11,0,0,6,0,7,0,0,0,0,0,0,0,\n5,0,6,0,0,0,0,8,0,10,0,0,0,0,0,0,0,0,0,0,0,9,7,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,\n0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,0,0,10,0,0,5,0,0,12,6,0,0,0,0,0,0,10,6,0,0,0,0,8,\n6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,5,0,0,0,0,11,0,10,6,0,0,8,6,0,0,0,6,0,7,10,6,0,\n0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,10,7,0,0,0,0,\n10,6,0,0,0,0,0,0,8,5,11,0,8,4,0,0,0,4,0,0,0,0,9,4,8,0,0,0,0,0,0,0,11,6,0,0,0,0,\n10,7,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,7,0,0,0,0,9,6,0,5,0,7,0,0,0,0,0,7,0,0,11,0,0,\n0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,\n0,0,0,0,13,0,8,6,13,0,0,0,11,7,0,7,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,6,0,0,9,6,0,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0,\n0,0,0,0,0,5,9,0,0,0,0,0,0,0,0,0,0,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,9,7,0,7,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,\n5,11,5,0,0,0,0,0,0,0,0,0,4,0,7,0,6,0,0,0,6,20,0,0,0,10,7,0,5,14,4,0,0,0,0,0,0,0,\n0,0,6,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,\n0,0,6,0,4,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,11,6,15,0,0,0,0,0,\n10,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,7,0,0,0,0,0,0,0,0,9,7,13,0,0,0,0,0,\n0,7,0,0,8,6,0,0,0,0,0,0,0,0,9,4,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,5,0,0,0,0,0,0,0,0,0,0,0,0,8,5,0,4,0,0,0,0,0,0,0,0,0,0,12,6,8,0,12,0,0,7,0,0,0,\n0,0,5,10,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,\n14,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,8,7,10,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,18,6,\n14,7,0,0,0,0,0,0,0,0,11,6,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,11,7,0,0,10,7,0,0,0,6,8,6,0,0,0,0,0,0,0,6,0,0,\n19,0,0,0,9,5,0,0,0,0,0,0,11,7,0,0,0,7,0,6,0,0,11,0,0,0,0,4,8,0,0,0,0,0,0,0,0,6,\n0,0,0,0,0,6,0,0,8,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,\n0,7,0,0,0,7,15,0,0,5,0,0,0,0,10,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,7,0,0,\n0,0,0,0,0,0,9,6,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n11,7,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,\n0,0,5,0,4,0,0,0,4,0,4,0,0,0,0,0,0,0,0,0,6,0,0,0,0,11,6,0,0,8,5,14,0,0,4,0,0,0,7,\n17,0,0,0,0,0,0,0,13,5,0,0,0,0,0,5,0,0,0,5,0,0,0,0,16,6,0,4,0,0,0,0,0,0,12,0,0,0,\n0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,5,0,5,0,6,10,0,12,0,0,0,0,0,0,0,0,7,0,0,0,0,8,4,\n0,0,0,0,0,0,0,0,0,0,8,7,0,0,8,0,0,0,8,0,0,6,0,7,0,0,0,5,0,6,0,4,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,22,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,\n0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,18,0,0,0,9,4,0,0,8,0,9,7,0,0,0,0,0,0,8,6,0,0,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,9,7,0,0,0,6,0,0,14,0,0,0,0,\n0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,7,10,4,\n0,6,0,0,0,0,0,0,8,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,9,6,0,0,0,0,0,0,\n0,0,11,6,12,7,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,0,9,6,11,6,0,0,0,0,9,5,0,0,0,0,0,0,\n0,6,8,5,0,0,0,0,8,0,10,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,\n5,10,7,0,0,0,5,8,7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,4,8,7,0,0,0,6,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,22,\n0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,5,0,0,0,0,0,0,0,\n0,0,0,0,0,17,0,0,6,0,6,12,4,19,6,0,0,0,0,16,0,0,0,0,7,15,7,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,4,10,4,0,0,8,7,0,7,0,0,9,\n4,0,6,0,0,0,4,0,5,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,7,10,0,0,0,0,0,11,7,0,0,\n0,0,12,6,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,\n0,0,0,0,0,0,0,0,0,10,4,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,8,7,0,0,\n0,0,0,0,0,6,0,0,0,4,0,0,11,4,0,0,12,7,0,0,0,0,9,0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,\n4,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,9,4,0,6,0,0,0,0,0,4,\n0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0,0,0,5,0,0,0,0,0,0,0,0,0,7,9,6,0,7,0,\n0,0,0,0,0,0,6,0,0,0,0,8,6,0,0,0,0,10,6,11,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,5,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,5,0,4,8,0,0,0,0,0,9,7,0,0,0,0,0,0,\n13,5,0,0,0,0,8,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,5,0,0,11,7,0,0,0,0,0,0,8,6,0,\n0,0,0,0,7,0,4,0,0,0,0,0,0,0,5,0,6,0,5,0,0,0,0,0,0,0,0,0,0,0,0,10,4,9,0,0,0,0,0,\n0,4,0,0,0,0,10,5,10,7,0,0,0,0,0,0,0,0,16,7,0,0,0,0,0,7,0,0,0,0,11,0,0,0,0,0,0,0,\n0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,5,0,4,0,0,0,7,0,0,0,0,0,0,13,0,0,\n0,0,0,0,0,0,0,0,7,0,4,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,13,7,0,7,0,4,16,0,0,0,0,6,8,7,9,7,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,\n0,6,0,0,8,5,0,4,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,11,7,0,0,11,\n0,0,0,0,0,9,5,0,4,0,0,0,0,9,7,8,6,0,0,0,0,0,0,10,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,\n0,7,0,0,0,0,0,0,0,0,0,0,0,4,10,6,0,7,0,0,0,0,0,0,0,5,0,0,0,0,0,0,10,7,10,0,0,0,\n0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,7,0,6,8,7,12,4,0,0,0,0,0,0,0,5,14,\n0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,0,20,4,0,0,0,7,0,6,0,0,0,0,0,0,0,0,8,0,\n0,6,15,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,12,0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,5,0,0,0,0,0,0,8,6,0,0,18,0,0,0,10,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,9,6,0,\n6,0,0,0,0,0,0,0,0,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,9,0,9,0,0,4,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,9,5,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,10,0,0,0,0,7,0,0,0,0,0,0,0,0,0,7,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,0,8,0,0,0,16,0,0,0,0,0,0,0,\n0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,8,0,0,0,11,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,0,11,0,0,0,9,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,7,0,7,0,6,\n0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,\n0,0,0,0,0,0,0,6,0,0,18,0,8,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,7,0,4,0,0,0,\n0,0,0,0,0,0,0,8,0,0,0,0,0,16,0,0,0,0,0,16,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,18,0,0,0,0,0,0,0,0,0,9,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,4,0,\n0,0,0,0,0,0,0,9,4,0,0,0,0,12,5,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,12,5,0,0,0,0,0,0,0,5,0,0,10,6,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,9,0,0,0,11,0,0,6,0,6,0,0,\n0,7,0,0,0,0,0,0,8,0,0,0,0,6,0,0,0,0,0,0,19,0,0,0,12,0,9,0,0,0,0,0,10,7,0,0,0,0,\n0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,16,7,12,\n0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,6,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,10,5,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,0,4,0,0,9,0,0,0,8,0,12,4,0,0,0,0,\n0,4,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,5,0,\n0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,8,6,0,6,0,0,0,0,0,0,\n0,4,0,0,0,0,0,6,0,0,9,0,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,10,6,0,0,0,0,8,\n6,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,7,0,6,\n10,7,0,0,10,5,11,6,0,0,0,0,0,7,16,0,0,0,0,6,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,5,0,0,0,7,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,\n0,0,0,0,0,8,7,0,0,0,0,11,6,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n8,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,12,7,0,7,0,0,0,\n0,0,0,0,6,0,0,0,0,9,0,0,0,23,0,0,0,0,0,10,5,0,0,0,0,0,0,0,0,0,4,0,0,11,7,10,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,0,8,7,0,7,0,0,8,7,8,0,0,0,0,0,0,0,0,0,0,0,14,5,0,0,0,0,\n0,0,0,0,18,6,8,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,11,0,0,0,9,7,12,6,0,0,0,0,0,0,0,0,\n0,0,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,7,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,8,7,0,0,0,6,10,0,0,0,9,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,6,\n10,7,0,0,0,7,0,0,8,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,\n0,0,0,8,7,8,6,0,0,11,7,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,4,8,7,0,0,0,0,0,0,0,0,\n0,5,0,0,13,0,0,0,0,5,0,0,9,7,0,0,0,0,0,0,0,4,0,0,11,0,0,7,0,0,0,0,0,0,0,0,0,6,0,\n0,0,0,0,0,12,7,19,0,8,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,10,6,8,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,7,0,0,12,0,0,0,0,6,9,6,\n14,0,0,0,0,0,0,6,0,5,0,0,8,7,0,0,0,6,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,4,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,0,\n7,0,0,10,0,9,7,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,12,6,0,0,0,0,0,5,0,6,0,0,0,0,\n0,0,0,0,0,0,0,6,0,0,0,0,9,7,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,0,0,0,11,7,0,0,13,7,\n0,0,0,0,0,0,0,0,12,0,0,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,6,11,5,0,5,13,0,8,0,\n0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,11,5,\n9,6,0,0,0,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,10,0,0,0,8,5,0,0,9,0,0,0,8,7,9,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,0,\n0,11,0,13,6,0,0,9,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,\n0,0,0,0,0,5,21,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,5,0,0,0,0,0,0,0,0,10,0,8,0,\n0,6,0,0,0,4,0,0,9,0,0,0,0,0,0,0,0,0,0,4,0,0,8,6,0,6,0,7,10,0,8,4,0,4,0,0,0,0,0,\n5,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,6,12,0,0,7,0,0,0,5,0,0,\n0,0,0,0,0,0,0,6,0,0,8,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n15,7,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,24,7,0,0,0,0,0,0,0,0,0,\n7,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0,\n0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,4,12,0,0,7,0,0,0,0,0,5,0,0,0,0,0,0,0,0,15,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,8,0,0,0,\n0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,9,0,9,6,\n0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,8,4,0,7,0,0,0,0,0,0,0,0,\n22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,0,7,0,0,21,7,0,7,9,6,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,8,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,23,0,0,0,0,7,0,0,0,\n4,0,0,0,0,0,0,0,0,9,4,11,7,0,5,0,0,0,0,11,0,0,4,20,0,0,0,0,0,0,0,0,0,0,0,11,5,0,\n7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n21,0,0,0,0,0,0,7,0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,11,6,0,0,0,0,0,0,0,0,9,6,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,5,0,4,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,\n0,0,0,10,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,7,0,0,11,7,0,0,0,0,0,0,0,4,\n0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,8,7,0,\n0,0,0,0,0,0,0,0,6,0,0,21,6,0,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,14,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,8,0,0,7,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,\n0,0,0,8,7,0,0,11,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0,7,13,7,10,4,0,\n0,0,6,0,0,0,0,0,0,0,0,0,5,10,0,0,0,0,0,0,5,0,0,0,7,0,0,0,0,0,0,8,4,0,0,0,0,0,6,\n0,0,0,0,0,0,0,0,0,0,12,7,0,6,0,0,10,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0,\n0,0,0,0,7,0,0,8,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,10,5,0,6,0,0,0,0,0,4,0,0,0,0,\n0,0,0,0,0,4,0,0,0,0,9,0,11,4,0,0,0,6,0,0,0,5,12,7,0,5,0,0,0,0,0,4,0,0,0,7,0,0,0,\n0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,13,6,10,0,0,0,17,0,0,4,0,0,0,0,0,6,0,4,0,5,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,11,7,0,0,0,7,0,0,0,6,0,0,0,0,0,0,\n0,6,0,4,0,0,0,0,8,0,0,0,0,5,0,0,0,0,0,4,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,9,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,0,0,\n0,0,7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,16,4,0,0,11,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n8,7,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,8,6,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,\n7,0,0,0,0,0,0,9,0,0,0,0,0,0,0,12,5,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,\n5,18,7,0,0,14,0,0,0,0,0,0,0,9,4,0,7,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,0,0,0,\n8,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0,7,0,0,0,0,0,0,11,0,0,0,\n10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,14,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n11,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,14,6,0,0,0,0,11,4,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,10,7,0,6,0,0,9,0,9,5,0,0,0,0,0,\n0,0,0,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,8,5,0,0,0,0,0,0,0,0,0,0,11,4,0,6,\n0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,12,4,0,6,8,6,0,0,0,0,0,0,0,0,0,0,8,0,0,5,0,0,0,0,0,0,0,7,0,0,13,0,0,0,0,0,0,0,\n0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,12,7,0,6,0,0,0,\n0,0,0,0,0,0,0,0,0,13,4,0,7,0,0,0,7,0,7,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,0,0,0,0,\n9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,10,6,21,5,0,0,0,0,8,0,0,0,0,4,0,\n7,0,0,0,0,0,0,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,4,0,0,0,0,0,0,\n0,7,9,6,11,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,7,10,0,0,0,0,0,0,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,19,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,9,4,10,4,0,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,9,7,9,7,10,4,0,7,0,0,0,0,0,0,0,6,12,0,\n0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,\n0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,8,0,\n0,0,0,0,0,5,0,0,8,7,0,0,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,\n0,0,0,0,4,0,0,8,0,0,6,0,0,0,7,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,7,9,7,0,0,0,4,8,0,0,0,0,6,11,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,10,0,0,0,0,0,0,0,13,4,0,0,\n12,6,0,6,0,0,0,0,8,7,0,7,0,0,0,0,0,6,0,0,0,0,0,0,12,6,0,4,0,0,0,0,0,0,0,0,0,0,9,\n7,22,0,0,0,0,4,0,0,0,0,0,6,0,0,0,4,0,0,9,0,0,6,0,0,24,7,0,7,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,10,6,0,5,0,0,0,0,0,0,0,7,0,0,8,0,0,0,0,0,0,0,10,5,0,0,0,0,0,0,0,0,0,7,0,\n7,0,0,0,0,0,0,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,\n0,0,0,0,0,7,12,0,9,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,8,0,0,0,0,0,0,0,0,4,0,0,0,7,0,\n0,0,0,8,7,0,0,0,0,0,0,0,0,0,4,18,0,0,0,0,0,10,0,0,5,0,0,11,0,0,0,0,0,0,5,0,6,0,\n0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,\n4,0,0,0,0,0,0,10,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,\n0,0,0,5,8,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,20,7,0,0,0,0,0,0,0,0,0,0,0,4,9,0,12,\n6,8,0,14,7,0,5,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,10,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,9,6,0,7,12,0,0,0,0,4,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,\n0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0,0,9,0,\n12,6,0,5,0,0,0,6,0,4,0,6,0,0,0,0,0,0,0,0,10,7,0,0,0,0,0,0,8,0,0,0,0,4,0,0,0,0,\n10,0,0,0,0,0,0,0,8,6,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0,\n6,0,0,12,6,20,5,0,0,0,0,0,0,0,0,0,0,0,0,9,5,0,5,0,0,0,6,13,7,0,0,0,0,15,6,0,0,0,\n6,0,0,13,7,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,5,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,\n10,6,0,0,0,0,0,6,0,0,0,0,9,0,0,0,0,0,19,6,0,0,0,0,0,0,0,0,0,0,13,0,11,0,0,0,0,0,\n0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,0,10,0,0,6,0,0,0,0,8,0,0,\n0,9,0,15,4,0,6,0,0,0,0,0,6,12,0,0,0,0,0,0,0,14,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,\n0,0,0,0,0,8,7,0,0,0,0,0,6,10,0,0,0,0,0,0,0,0,7,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,10,5,0,0,0,0,8,0,0,0,0,4,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,6,12,0,0,0,10,7,0,5,0,6,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,6,0,4,0,0,0,0,0,7,0,0,0,0,0,0,0,4,9,6,0,0,0,7,0,0,0,0,0,0,0,0,8,6,0,0,\n0,0,0,0,0,4,12,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,7,0,\n0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,12,6,0,6,9,4,0,0,8,4,0,6,\n0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,8,0,0,6,13,4,0,5,8,0,0,0,0,0,0,0,8,0,0,0,10,5,0,0,9,0,0,0,0,0,0,6,0,0,\n24,0,0,0,0,0,0,0,8,0,0,7,0,0,12,0,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,\n6,8,0,10,0,9,7,0,0,0,5,0,0,0,0,0,0,0,4,8,5,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,4,0,0,0,0,0,6,0,0,0,0,0,5,0,0,0,0,8,0,0,\n0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,10,4,0,0,0,0,0,0,0,6,0,0,0,4,20,0,0,7,\n10,6,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,9,6,0,0,0,0,0,0,0,4,\n12,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,9,4,0,5,0,0,\n0,0,0,0,0,6,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,6,9,0,0,0,0,7,0,0,0,0,0,6,0,5,0,0,0,0,0,0,0,0,9,0,0,0,\n0,6,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,17,7,0,0,13,6,14,6,0,0,0,0,\n8,0,0,0,0,0,0,7,12,7,8,7,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,4,0,0,0,0,0,4,0,\n0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,12,4,0,0,10,7,0,0,0,\n0,0,0,10,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,12,0,0,6,\n0,0,0,0,0,0,0,0,8,7,12,0,0,0,0,0,0,6,0,6,0,4,0,0,18,6,0,0,0,6,0,0,0,0,0,6,10,6,\n0,0,0,0,0,0,8,7,14,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,\n0,0,0,8,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,7,0,0,10,5,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,\n0,0,9,4,8,0,0,0,0,0,0,4,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,4,0,0,0,0,\n0,6,0,0,9,7,0,0,0,0,0,5,0,0,0,0,8,7,0,0,14,0,0,0,0,6,0,0,0,0,0,0,9,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,5,0,7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,\n0,0,0,6,0,0,0,6,0,4,0,0,0,0,0,4,0,0,0,0,12,0,0,7,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,\n0,12,0,16,6,0,0,0,0,0,0,11,7,0,4,8,7,0,0,0,0,0,6,0,0,0,0,16,0,0,0,0,6,0,0,0,0,0,\n0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,10,7,0,0,0,0,0,0,12,7,0,0,0,0,0,0,0,0,0,0,\n0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,13,4,0,0,10,0,0,0,0,0,0,0,0,0,19,0,0,0,\n0,0,0,0,0,0,0,0,0,0,8,6,22,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,\n5,0,0,0,0,0,5,0,0,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n4,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,18,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,14,7,0,0,11,5,0,0,0,5,0,0,0,0,12,5,0,0,0,0,0,0,0,0,0,0,24,6,0,0,\n0,7,0,4,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,7,0,4,0,0,0,0,8,7,0,0,\n9,6,0,0,14,5,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,12,6,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,5,0,0,\n0,0,12,7,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,6,0,0,13,7,0,0,0,0,0,0,14,0,11,4,0,\n0,0,4,0,0,0,0,14,5,0,0,0,0,0,5,11,5,0,0,0,0,22,5,0,0,0,0,0,7,0,0,0,0,0,4,0,0,0,\n4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,17,0,10,0,0,0,8,0,0,0,19,\n5,18,7,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,10,6,0,6,0,0,0,0,10,4,0,4,0,\n0,0,0,0,0,14,7,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,0,9,6,12,0,0,6,0,0,0,0,0,0,0,0,\n12,0,10,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,4,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,5,13,0,9,7,0,0,0,0,0,0,0,0,0,0,0,7,9,7,0,0,8,0,0,0,0,0,\n22,0,0,0,0,0,0,0,23,6,14,0,0,0,0,0,0,7,0,0,0,0,11,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,\n0,0,10,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,8,5,0,0,0,0,0,0,0,0,0,7,11,6,21,0,0,0,0,0,\n0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,\n0,0,0,0,0,0,0,4,9,7,0,0,0,0,0,0,12,0,0,0,0,7,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,9,\n0,0,0,20,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,11,7,0,0,0,0,0,0,0,6,15,0,0,\n0,0,0,0,0,0,0,0,0,0,0,12,4,0,5,0,0,0,0,0,0,11,7,17,6,0,0,0,0,0,0,15,6,0,7,0,0,0,\n0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,6,0,5,\n0,0,11,0,11,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,\n17,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0,8,7,9,6,0,0,14,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,\n8,7,0,4,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,\n0,0,0,5,0,4,0,0,8,7,0,6,12,5,0,7,18,7,0,0,8,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,\n10,0,11,0,0,0,0,0,0,0,0,0,0,0,9,0,0,4,0,6,0,7,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,\n7,0,0,0,0,8,0,0,0,15,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,0,0,\n0,0,6,0,0,0,0,23,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,5,0,0,0,0,0,0,8,6,0,0,\n0,0,0,0,12,7,9,7,0,0,10,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,9,0,8,7,0,0,0,\n6,0,6,0,4,0,5,0,0,0,0,0,5,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,7,10,5,0,0,11,6,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,4,9,7,0,\n0,0,0,11,7,0,0,0,0,0,5,0,0,0,7,0,0,0,0,23,6,11,4,0,0,0,0,0,0,9,0,0,0,10,6,0,0,0,\n0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,10,6,0,0,0,7,0,0,\n0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,\n6,11,7,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0,6,0,0,0,5,0,6,0,6,0,0,0,0,0,0,0,0,0,0,\n0,6,0,0,0,0,8,7,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,4,10,0,8,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,10,6,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,\n0,0,0,0,0,0,10,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,11,6,0,4,0,0,14,5,0,7,0,0,0,0,0,6,16,0,0,0,0,0,0,0,10,0,0,7,15,0,0,0,11,7,0,0,\n0,0,0,0,0,0,0,0,8,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,5,0,0,0,\n0,8,0,0,6,0,0,0,0,0,0,9,5,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,6,0,\n0,0,0,0,0,0,7,0,0,0,0,15,7,0,0,0,0,8,0,0,0,14,0,0,0,0,0,0,0,16,7,0,0,0,0,0,7,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,12,6,11,7,\n9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,\n7,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,12,0,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,8,0,0,5,8,7,10,6,0,0,0,7,0,0,0,0,12,6,\n0,0,9,0,0,0,12,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,10,0,0,0,10,5,0,0,0,0,0,0,9,6,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,6,0,0,9,5,0,4,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,9,0,0,5,0,0,8,7,8,\n6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,10,0,9,4,0,0,0,0,0,0,0,6,\n11,0,0,0,0,0,0,0,0,0,0,0,8,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,8,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,\n0,0,0,10,0,0,0,8,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,\n0,0,8,4,0,5,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,8,5,0,0,0,\n0,0,0,0,7,0,0,0,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,0,6,0,7,0,0,0,0,\n20,0,0,0,0,0,0,0,0,0,0,7,9,0,0,0,0,0,0,6,0,6,0,7,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,\n0,0,0,14,7,0,0,0,5,0,0,22,4,10,0,0,0,0,0,0,4,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,11,5,13,0,0,0,0,0,0,0,0,0,8,0,0,7,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,10,7,0,\n0,0,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,7,0,7,14,6,0,0,0,0,9,5,\n0,0,0,0,0,6,0,0,0,5,10,0,8,6,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,6,0,0,8,4,0,6,0,\n0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,\n14,0,0,5,0,0,18,0,8,4,0,6,0,0,20,0,13,0,0,0,0,7,0,4,0,0,0,0,0,4,8,4,0,0,0,0,0,6,\n0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,14,0,0,0,0,0,9,7,0,0,9,0,0,0,0,\n0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,20,0,14,0,0,4,0,6,8,5,0,0,0,0,0,7,0,0,0,0,0,0,\n0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,10,4,12,7,0,6,0,0,9,7,10,5,\n0,0,8,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,18,0,0,0,14,7,0,0,0,0,0,4,\n0,0,0,0,0,0,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,\n0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,8,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,5,0,7,0,0,0,0,0,\n7,0,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,8,5,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,5,0,\n0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,23,0,0,7,0,0,0,0,0,0,\n0,0,0,0,0,0,0,4,0,0,0,0,0,0,12,7,8,4,0,0,0,0,0,0,0,0,0,6,0,0,9,5,0,0,0,7,0,0,0,\n0,0,0,0,0,0,4,10,0,0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,5,0,0,18,7,\n0,0,8,0,0,5,0,0,10,0,0,0,0,0,0,6,0,0,0,0,0,5,0,7,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,\n6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,0,10,0,0,5,10,4,0,0,12,0,0,0,0,\n6,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,7,0,5,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,6,0,7,0,0,0,6,0,6,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,\n0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,16,6,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,12,7,0,0,0,0,9,0,0,0,0,6,0,0,11,0,0,0,0,0,13,0,9,6,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,0,0,10,7,0,0,0,7,0,6,0,\n0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,11,0,15,0,22,7,0,4,0,6,0,0,0,0,0,7,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,\n18,0,0,0,0,0,0,0,0,0,14,0,0,4,0,0,0,0,8,7,9,0,0,0,0,0,9,0,0,0,14,0,0,0,0,0,0,0,\n0,0,11,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,7,0,0,0,6,0,6,0,0,0,0,8,0,0,0,0,\n0,11,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,9,4,0,0,0,0,0,4,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,8,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,\n0,0,0,0,0,0,8,6,0,0,9,5,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,5,0,\n0,10,6,9,0,0,0,0,6,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,\n11,7,12,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,4,0,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,\n0,0,0,0,6,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,5,0,0,10,6,\n0,0,0,4,0,7,13,0,0,4,0,0,11,4,0,6,0,0,0,0,0,6,8,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,5,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,5,0,0,0,0,12,6,0,0,0,0,\n11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,11,5,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,\n7,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,6,17,0,9,0,10,6,0,6,12,0,0,4,0,0,0,\n0,0,0,0,0,0,0,8,5,12,7,0,4,0,0,0,0,0,0,0,0,0,0,11,0,9,0,10,6,11,5,0,7,0,0,8,0,0,\n7,0,4,0,0,0,7,0,0,0,0,0,0,8,6,0,0,0,6,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,6,0,\n0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,11,0,0,0,0,6,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,10,0,0,0,0,0,8,6,0,0,0,0,0,6,12,0,0,0,0,0,\n0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,6,0,0,16,0,11,5,0,0,0,0,0,\n0,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,9,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,6,10,\n7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,0,9,5,0,0,0,0,8,0,9,0,0,\n0,0,0,0,0,0,7,10,0,13,0,0,6,0,0,0,0,0,0,0,0,0,6,9,4,0,0,0,0,0,0,10,0,0,0,0,0,10,\n0,0,0,0,0,0,0,10,6,11,0,0,0,0,0,9,0,0,0,0,0,0,4,0,0,0,0,0,0,10,5,0,0,0,0,0,6,0,\n0,0,0,0,0,18,4,0,7,0,0,0,0,0,0,24,0,8,6,0,7,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8,5,0,0,0,0,10,7,0,6,0,0,0,0,0,0,0,0,8,5,10,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,\n6,0,0,8,7,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,4,0,5,15,0,0,0,0,7,0,7,0,0,0,0,\n0,0,0,0,0,6,10,5,0,0,0,6,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,12,0,0,0,0,0,0,0,0,\n0,0,5,0,0,0,0,0,0,14,4,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,11,0,10,4,9,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,7,0,0,0,\n0,0,0,0,0,0,0,0,7,13,7,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,8,0,10,6,0,4,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,\n0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,9,7,0,0,0,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,6,0,0,0,\n0,0,0,0,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0,0,0,5,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,11,0,0,0,0,6,0,0,0,0,0,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0,\n6,0,0,0,0,0,0,0,6,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,\n0,0,0,0,0,0,0,6,0,6,0,0,0,5,0,0,0,0,0,0,0,5,0,0,10,0,11,5,0,0,0,0,0,0,14,7,9,7,\n0,6,0,0,0,0,0,4,0,0,0,0,0,0,11,7,0,6,0,0,0,0,0,0,9,7,0,4,0,0,0,7,0,0,0,0,0,5,0,\n0,0,0,0,5,0,0,0,7,0,0,0,0,0,5,0,0,0,0,17,5,0,0,8,0,0,0,0,6,9,4,0,0,0,0,0,0,0,0,\n8,7,11,7,9,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,6,9,5,0,0,8,6,0,0,0,5,0,\n0,0,0,9,0,0,0,9,6,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,\n0,0,0,0,4,0,0,0,0,10,0,0,0,0,0,0,0,0,4,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,4,0,0,0,5,0,0,0,0,0,7,0,0,0,0,0,7,13,5,0,0,0,7,0,0,0,0,0,7,9,6,11,7,0,7,0,0,0,\n0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,8,5,0,0,0,5,9,4,0,0,0,0,0,0,0,0,8,4,0,0,0,0,\n24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,\n0,0,0,0,6,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0,5,11,6,0,4,0,7,20,0,8,5,9,5,9,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,7,23,5,0,0,8,4,0,0,10,0,0,6,0,5,0,0,0,0,0,0,0,0,0,0,0,7,0,\n0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,9,0,0,0,\n10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,\n6,0,0,0,0,14,0,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,9,6,0,4,0,0,0,0,0,0,8,4,\n11,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,0,0,0,12,0,10,7,0,0,10,0,0,0,0,\n0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,6,0,0,0,0,8,\n6,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0,6,0,4,0,0,0,0,0,5,0,0,\n0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,17,7,11,0,0,0,0,0,0,0,0,0,0,4,12,6,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,\n0,5,12,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,6,0,0,20,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,4,\n0,0,0,5,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,6,0,4,13,0,0,7,0,0,0,0,0,0,\n0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,12,6,0,7,0,0,0,0,10,0,23,6,0,0,\n0,4,0,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n10,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,11,0,9,7,0,0,\n0,0,0,0,0,0,0,0,9,7,0,4,0,0,0,0,8,7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,\n0,0,0,0,0,6,0,0,10,7,10,5,0,0,8,0,8,0,0,0,0,0,0,4,0,5,10,0,0,0,0,0,0,0,9,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,11,7,0,0,0,0,0,0,0,0,9,4,0,0,0,0,0,6,0,0,8,\n7,0,0,0,0,0,5,0,0,0,0,0,0,0,0,10,0,0,0,0,5,0,4,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,24,7,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,6,0,0,9,0,0,0,0,0,0,7,0,6,13,0,8,\n0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,6,0,0,0,0,8,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,\n4,0,0,0,0,0,4,0,0,0,0,0,0,0,6,8,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0,0,5,0,7,0,0,10,0,10,7,0,0,12,5,0,0,9,0,0,0,10,0,\n0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0,\n12,0,0,0,0,0,8,5,13,6,0,0,0,0,0,0,9,4,0,0,0,0,8,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,\n0,0,6,0,0,14,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,17,6,0,0,0,0,12,6,0,0,0,0,8,0,0,7,0,\n7,0,4,9,0,0,6,0,0,0,6,0,0,0,0,0,0,8,7,0,0,0,0,0,0,11,0,0,4,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,18,7,0,4,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,6,0,0,0,0,0,\n0,0,0,12,5,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,8,0,11,7,0,0,0,0,0,0,0,0,0,4,0,0,0,0,\n11,0,0,0,0,0,0,0,21,0,0,6,10,0,0,0,0,0,9,0,10,0,0,0,0,0,11,0,0,0,0,6,0,0,0,0,0,\n5,0,0,0,0,0,0,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,4,0,0,23,7,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,9,7,0,0,0,7,\n0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0,0,\n11,6,0,0,0,0,0,0,0,6,0,0,0,0,10,7,0,0,9,4,0,0,11,0,8,5,0,0,0,7,8,5,22,0,0,0,9,6,\n0,0,0,0,0,0,0,6,10,4,0,0,0,0,0,7,9,4,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,\n0,0,0,11,6,0,0,0,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,7,0,0,0,0,0,0,0,6,0,6,0,4,0,0,\n0,0,0,0,0,7,0,7,0,4,13,0,0,0,0,0,8,0,0,0,0,7,0,0,0,0,0,0,11,6,0,7,0,0,0,0,9,0,0,\n0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,8,0,0,0,0,0,8,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,6,0,0,0,0,13,5,8,0,0,\n0,0,0,0,0,14,0,0,6,0,0,0,0,0,0,0,0,0,7,0,0,17,6,0,0,0,0,13,4,0,0,9,6,0,0,10,5,0,\n0,10,5,0,0,0,0,13,0,0,0,0,6,0,0,0,0,0,0,10,0,12,0,0,0,0,0,0,0,0,0,0,0,8,4,0,4,0,\n0,0,4,0,0,0,0,0,4,0,0,12,0,0,5,9,4,0,0,0,0,0,0,0,0,0,5,8,5,0,0,0,7,0,0,0,0,8,7,\n0,0,0,6,12,5,0,0,0,5,0,0,0,5,0,0,0,0,0,4,12,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,7,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,\n0,9,6,0,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,4,11,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,\n0,0,0,0,12,7,0,0,0,7,10,7,0,0,11,0,0,0,0,0,0,0,0,0,11,7,0,0,0,6,0,0,11,0,0,0,0,\n0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,22,0,10,7,0,0,8,5,0,0,0,0,0,5,0,0,0,0,0,0,\n0,0,0,0,9,6,8,7,0,6,0,0,0,0,0,5,0,0,0,0,0,0,8,7,0,0,0,0,9,7,0,0,0,6,0,0,8,7,0,0,\n0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,4,0,5,0,0,0,4,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,6,0,0,0,0,0,0,0,4,0,0,0,0,0,0,9,\n6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,5,0,0,0,0,14,0,0,0,\n9,0,0,0,0,0,0,0,0,0,9,7,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,12,0,0,0,0,0,12,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,10,7,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,6,0,0,0,0,0,0,9,6,0,0,0,0,0,6,0,0,0,0,0,\n0,0,0,0,0,9,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,\n0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,6,0,7,12,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0,\n0,7,0,0,8,6,0,0,0,0,10,7,0,0,0,0,0,0,0,6,0,0,0,0,0,6,12,0,0,0,0,0,0,0,0,6,0,0,0,\n0,0,6,0,0,0,6,0,0,0,0,0,6,16,0,0,0,0,0,0,0,0,0,9,0,17,0,14,7,8,0,0,0,0,0,0,6,0,\n0,0,0,0,0,0,0,0,0,11,0,0,6,8,7,0,6,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,0,0,\n9,0,0,0,0,7,0,0,0,0,11,5,0,4,9,6,8,0,0,0,0,0,0,0,0,0,10,0,11,7,0,0,0,0,0,0,0,0,\n9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,\n0,0,0,12,0,0,0,0,0,10,5,0,4,0,0,0,0,0,7,10,6,11,6,0,0,0,0,0,0,0,0,0,0,0,0,17,0,\n0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,8,0,0,4,0,0,0,6,0,0,0,\n0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,4,0,0,0,0,9,6,0,0,0,4,0,0,0,0,0,4,10,7,0,7,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,\n0,0,0,0,0,0,6,0,0,0,6,0,6,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,18,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,13,0,0,0,0,0,10,0,0,0,0,0,0,0,0,4,\n0,0,0,6,0,0,0,0,0,4,8,0,0,0,11,7,0,0,0,4,0,0,0,0,0,7,0,0,8,5,0,0,16,0,0,0,13,6,\n0,0,0,0,0,0,0,6,0,0,0,0,20,0,11,6,0,0,8,7,0,0,0,0,0,6,17,0,8,0,0,0,0,0,8,7,0,0,\n9,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,\n0,0,4,0,7,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,8,\n0,8,0,0,0,0,0,0,0,11,0,8,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,6,0,0,9,0,\n0,0,0,0,8,0,0,0,0,0,18,0,0,0,0,0,0,4,9,0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,9,6,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,7,0,0,0,0,0,0,0,0,\n0,4,0,0,0,0,0,0,14,0,0,0,0,7,0,6,0,0,8,0,20,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,8,0,0,0,14,0,0,0,0,0,0,0,8,0,0,7,0,6,0,0,0,7,0,0,0,0,0,0,0,0,\n0,0,0,4,12,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,10,6,0,\n5,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,\n0,0,0,5,8,4,0,0,0,0,0,0,0,4,0,0,0,7,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,12,7,0,\n0,0,0,13,6,0,0,0,7,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0,0,0,0,11,5,\n0,6,0,0,8,5,0,7,0,0,0,0,0,0,0,7,0,0,0,0,8,6,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,4,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n14,0,10,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,19,0,0,4,0,0,0,7,\n0,0,11,5,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,16,0,10,5,18,0,0,7,9,6,0,5,0,0,0,0,0,\n0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,5,0,0,0,7,0,6,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,4,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,23,0,0,0,0,5,0,0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,14,0,20,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,\n11,0,0,0,0,7,0,0,0,0,15,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,7,0,0,0,0,\n0,4,0,0,0,0,10,0,0,0,0,0,9,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,10,0,11,6,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,5,0,0,11,0,0,0,0,7,0,0,0,0,0,0,8,7,0,\n4,0,0,0,0,11,0,0,0,0,0,11,0,0,5,0,0,8,7,0,4,0,7,0,0,0,0,0,0,0,6,0,0,0,0,0,4,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,0,0,\n0,0,4,11,5,10,7,0,7,0,0,9,6,9,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,9,4,0,4,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8,6,0,0,0,0,11,7,0,0,0,0,0,0,0,0,0,0,11,7,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,8,5,0,0,8,0,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,\n10,7,0,0,0,6,0,0,0,0,0,0,8,0,0,6,0,0,0,6,10,0,0,0,0,0,0,0,0,0,0,0,8,5,0,0,0,6,0,\n0,0,6,0,0,0,0,9,5,8,5,8,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,\n0,8,7,10,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,0,5,0,0,0,6,0,7,0,0,\n10,5,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,11,0,0,0,0,0,13,4,\n0,0,0,4,0,0,0,0,0,5,8,0,0,0,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,7,14,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,7,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,5,0,0,15,6,10,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,14,6,10,0,0,0,0,0,0,0,0,6,0,\n0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,6,0,5,11,4,0,6,0,0,0,7,0,0,0,0,\n0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,5,0,0,8,5,0,0,0,0,0,0,0,0,0,0,\n0,0,10,0,0,0,0,0,9,6,9,4,0,0,0,4,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,8,5,0,\n0,0,0,0,0,0,0,0,0,0,4,0,0,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0,\n0,0,0,7,12,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,\n4,9,6,0,4,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,6,0,\n7,8,6,0,0,0,0,0,0,0,4,0,0,9,6,0,0,0,0,0,0,0,0,0,6,0,5,0,4,0,0,0,0,0,0,0,5,0,0,0,\n0,0,5,0,0,0,7,12,7,0,0,0,0,0,0,18,4,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,6,0,0,0,\n0,12,0,0,7,0,0,0,0,0,7,0,0,13,0,0,6,0,0,0,0,8,7,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,7,10,5,0,0,8,0,0,0,0,0,0,0,8,6,0,7,0,0,8,4,0,4,0,0,0,0,10,4,0,0,14,0,\n0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,17,0,0,0,0,0,0,6,0,0,0,0,8,6,0,0,10,5,0,0,0,0,8,\n6,0,0,0,6,0,0,0,7,0,0,0,0,0,6,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,12,0,0,0,0,6,\n8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,\n0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,4,24,0,0,\n0,0,0,12,6,0,0,10,6,0,5,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,17,7,0,5,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,11,5,9,0,8,7,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,10,7,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,5,8,7,0,0,0,\n0,8,5,0,0,0,0,10,7,0,7,0,0,0,0,0,0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,6,0,4,0,0,0,0,\n0,6,12,0,8,7,0,0,0,0,0,0,0,0,0,0,16,0,10,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,22,0,0,0,\n0,0,0,0,0,0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,22,0,0,6,0,0,21,0,0,0,22,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,7,8,0,0,0,0,6,14,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,6,0,0,0,0,0,0,\n0,0,0,0,0,6,0,0,0,0,8,5,0,0,11,7,0,6,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,5,0,0,0,0,0,0,0,0,0,4,0,0,8,7,0,0,0,0,8,5,11,7,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,8,5,0,0,10,0,0,4,13,7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,0,0,13,6,\n0,6,0,7,0,0,8,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,15,0,0,0,10,7,0,0,0,0,0,\n7,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,19,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,6,0,5,\n0,7,0,0,0,0,0,0,0,0,0,6,0,0,11,4,0,0,0,6,0,0,13,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,8,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,\n0,7,0,0,0,0,0,0,11,7,0,0,0,0,0,6,0,0,10,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,5,11,6,\n0,0,0,0,0,0,0,0,10,0,0,0,0,6,0,0,0,0,0,0,8,7,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0,\n0,0,0,8,7,0,0,0,0,9,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,10,0,\n0,6,0,0,13,0,0,0,0,0,0,0,9,6,0,0,8,6,8,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,0,\n0,9,7,0,0,0,0,0,0,11,0,0,0,10,7,0,0,0,0,0,0,0,0,9,6,0,0,12,4,0,4,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,6,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,5,0,0,\n9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,\n16,0,0,4,0,0,0,0,0,7,0,0,0,6,0,6,0,0,11,0,0,0,0,5,0,0,0,0,0,0,0,4,8,5,0,0,0,0,0,\n0,14,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,\n0,0,8,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,\n0,0,0,0,6,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,14,7,0,0,9,7,0,0,11,0,0,0,0,0,10,\n4,11,5,13,6,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,5,0,0,0,0,0,4,0,0,9,0,0,0,0,\n0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,6,12,5,0,0,0,6,14,0,0,0,0,0,0,0,0,0,0,4,9,4,\n0,0,0,0,0,5,0,0,0,0,0,0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,\n0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,11,6,0,0,13,7,0,0,13,6,0,7,0,0,0,0,0,0,8,6,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,10,6,0,4,0,0,12,6,0,0,0,0,0,0,0,0,10,6,\n0,0,0,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,6,0,\n0,0,0,0,7,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,6,0,\n0,0,7,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,\n0,0,0,5,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,\n0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,8,7,0,0,8,5,0,0,0,4,9,5,0,0,0,7,10,6,0,0,\n0,0,0,0,9,7,0,0,8,5,8,0,8,4,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,\n0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,\n0,11,7,0,0,0,7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,5,0,0,0,7,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,9,7,0,0,0,0,8,5,0,4,0,0,0,0,0,6,0,6,14,\n6,0,0,0,0,9,6,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,6,0,0,0,0,14,7,9,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,16,\n0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,14,0,\n0,6,0,0,8,6,0,0,0,0,0,6,0,0,12,0,0,0,0,0,8,5,0,7,11,0,0,5,0,4,0,0,0,6,0,0,0,0,0,\n0,0,0,0,0,0,0,9,6,0,4,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,10,5,0,0,0,0,\n0,4,0,0,0,7,11,6,0,4,8,5,9,5,0,0,0,5,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8,5,14,7,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,16,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,9,6,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,9,0,0,0,12,5,0,0,0,0,0,0,0,4,10,5,0,0,0,0,0,0,0,0,0,0,0,6,0,\n0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,4,0,0,0,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,10,4,0,0,0,0,0,5,0,0,0,4,\n0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,8,0,10,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,10,7,0,0,0,0,0,0,0,0,15,0,0,0,\n0,0,0,0,0,0,0,7,0,0,0,0,0,7,10,7,9,7,0,0,0,7,0,0,8,0,0,0,0,0,0,0,9,0,0,0,8,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,8,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,7,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,15,7,12,6,0,0,0,7,0,5,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,5,0,0,0,0,\n0,0,0,6,9,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,9,7,0,0,14,0,0,0,11,7,0,0,0,0,0,\n0,0,0,0,0,0,4,0,0,11,7,0,0,0,0,8,0,0,0,0,0,0,6,8,7,0,0,0,7,10,4,0,0,0,0,0,0,0,0,\n0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,10,0,0,0,0,0,0,\n6,0,6,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,11,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,7,0,0,10,7,0,0,0,0,9,7,0,0,0,0,0,0,13,7,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,12,0,\n0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,9,6,0,0,11,0,0,\n0,0,0,14,4,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,7,0,0,\n0,0,0,6,0,7,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,0,20,\n7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8,0,0,0,0,0,0,0,0,0,11,5,0,0,0,0,0,0,0,0,0,0,10,4,0,0,0,5,8,5,10,4,0,0,0,0,0,\n0,13,6,9,7,0,0,10,7,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,6,0,0,0,7,0,6,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,10,7,0,0,\n0,0,0,0,0,0,0,0,12,4,0,0,0,0,8,7,0,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,\n0,0,0,0,6,0,6,9,6,0,0,12,5,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,0,\n0,0,0,0,0,0,0,0,0,5,8,7,9,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,11,\n4,0,0,0,0,0,0,8,0,0,0,10,7,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,0,\n0,0,0,0,0,5,0,6,0,0,10,0,14,0,0,0,0,0,0,0,23,0,0,0,12,0,10,5,0,0,0,0,0,0,0,0,0,\n5,0,0,0,0,8,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,22,0,8,0,0,0,0,6,0,0,0,0,0,0,0,5,0,0,\n0,0,0,0,0,6,18,4,0,0,0,7,10,6,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,\n0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,7,10,0,0,0,0,0,0,6,0,0,0,0,11,5,0,0,0,0,0,0,0,0,\n15,0,8,6,0,0,13,7,0,0,0,0,0,7,0,0,0,0,0,7,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,9,5,9,\n0,0,6,8,6,0,0,0,0,10,0,0,0,18,5,0,0,0,5,0,7,0,0,0,0,8,6,0,0,0,0,9,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,14,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0,5,0,\n0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,8,5,0,0,0,0,0,0,0,0,9,0,0,0,0,4,0,0,0,0,0,0,0,0,\n0,0,0,0,20,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,9,5,0,0,0,0,0,0,8,4,24,0,0,0,0,0,0,\n0,0,0,0,0,0,0,9,7,0,0,0,0,10,5,0,0,8,5,0,0,0,0,0,0,0,0,12,7,0,6,0,0,10,6,0,0,0,\n0,14,0,0,4,9,5,0,0,0,0,0,0,9,0,0,0,0,0,0,6,0,0,0,0,0,4,0,0,8,0,0,0,0,0,11,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,8,5,11,7,0,4,0,0,10,0,0,0,0,\n0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,11,6,0,0,0,0,0,5,14,6,0,0,0,0,10,0,0,\n0,13,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,10,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,7,12,0,10,6,0,0,0,0,0,0,10,0,0,0,0,0,10,0,9,\n7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,0,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,0,9,7,0,0,0,\n0,0,0,0,0,0,0,0,0,24,0,11,7,0,7,0,0,0,0,0,0,8,6,0,0,0,0,0,0,8,7,0,0,0,0,0,5,0,0,\n0,6,9,0,0,0,23,5,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,7,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,0,18,4,0,0,11,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,\n0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,9,0,0,0,11,0,0,0,23,0,0,\n0,10,4,0,0,0,0,0,7,0,0,0,7,0,0,0,0,0,4,0,0,0,0,0,7,0,0,19,0,11,0,0,0,0,0,12,7,0,\n0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,5,0,0,0,0,0,5,0,0,0,0,0,5,0,0,0,0,0,0,0,6,0,0,\n9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,4,0,0,0,0,10,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,22,0,8,7,10,4,11,0,13,5,8,7,9,0,8,7,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,\n0,8,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,4,0,0,0,4,11,0,0,6,0,0,8,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,5,0,0,\n20,0,0,0,0,0,0,0,0,0,11,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,7,0,0,14,0,0,0,9,0,13,7,0,0,0,0,0,6,0,7,0,0,8,6,10,6,0,0,8,6,0,0,0,6,0,\n0,12,6,9,0,0,0,0,0,0,5,9,0,12,4,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,8,5,0,0,0,0,0,\n0,0,4,8,0,0,6,8,0,0,0,0,0,0,0,0,0,13,6,0,7,0,0,0,0,0,6,8,7,8,6,0,0,0,7,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,18,0,11,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0,\n0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,14,\n6,0,0,0,0,12,7,8,0,0,0,0,0,0,0,8,7,0,0,0,0,10,4,0,0,0,0,0,0,10,0,0,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,15,6,9,7,0,0,0,0,0,0,15,6,11,7,0,0,0,7,0,0,21,0,0,\n0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,17,6,0,0,10,5,0,5,0,0,0,0,0,0,0,0,0,7,\n0,0,10,0,0,0,0,0,0,0,0,4,11,5,0,0,0,0,16,7,0,0,0,0,0,6,0,0,8,7,0,4,0,0,10,0,0,0,\n0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,\n0,0,0,10,4,0,0,0,0,0,0,0,0,0,6,0,5,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,\n0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,6,10,7,0,0,0,0,0,0,0,0,8,4,0,0,10,0,0,0,0,4,0,6,0,6,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,17,0,0,0,0,0,\n0,0,0,0,0,0,10,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n6,0,0,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,0,4,0,0,0,0,0,6,0,0,0,0,0,0,10,5,0,0,\n0,5,0,0,0,0,9,0,19,7,0,0,0,0,0,7,0,0,0,0,10,6,0,0,0,6,0,5,0,0,0,0,0,0,0,0,0,6,8,\n0,0,0,0,0,11,0,0,0,0,0,0,6,0,0,0,0,0,7,9,0,15,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,0,\n0,0,0,0,0,6,0,0,0,0,0,0,0,4,0,0,0,0,9,0,0,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,6,0,0,\n0,0,0,6,10,0,0,0,0,0,0,0,23,0,14,0,0,0,0,7,0,0,0,0,0,7,0,0,9,0,0,0,0,7,0,0,0,0,\n0,6,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,\n0,0,0,0,0,9,5,0,0,0,0,0,4,0,0,0,0,9,5,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,10,0,0,0,0,0,0,5,0,4,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,14,7,0,0,12,7,0,0,0,\n0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,8,6,10,0,0,0,0,0,0,0,0,0,10,7,8,5,0,0,0,0,0,0,\n0,0,8,4,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,5,0,0,9,5,0,0,0,0,0,5,0,0,0,0,0,4,0,0,0,\n0,0,0,0,0,0,0,12,4,11,0,0,0,9,0,11,7,0,0,0,0,0,0,10,6,0,0,0,6,0,0,0,0,15,5,0,0,\n11,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,4,0,4,0,6,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,8,0,0,0,19,7,0,4,0,0,9,0,0,0,0,0,10,0,\n0,6,0,0,13,0,12,6,0,0,0,0,0,0,0,0,10,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,13,7,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,4,9,0,0,0,10,0,0,0,0,0,0,0,\n0,5,0,0,0,0,0,0,10,0,23,6,0,0,0,6,8,0,0,0,0,0,0,0,0,0,17,7,0,0,0,0,11,6,22,5,0,\n0,9,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,5,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,4,11,0,9,4,0,0,\n0,7,0,7,0,0,0,0,0,0,12,4,0,0,0,0,0,0,0,0,0,0,0,0,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n4,0,0,11,5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,6,0,0,0,4,0,0,0,0,\n0,0,0,0,0,7,0,0,0,4,0,0,10,4,0,0,0,0,0,0,0,7,0,7,0,0,0,6,0,0,0,0,8,6,0,6,0,6,0,\n0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,6,22,6,12,0,0,6,0,0,0,6,0,0,0,0,0,7,0,0,0,0,11,0,0,0,\n9,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,6,0,0,0,6,0,6,0,0,8,7,0,0,0,4,9,7,19,0,0,0,0,0,0,0,0,0,9,6,10,6,0,6,0,0,0,\n4,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,6,16,7,10,6,0,0,23,6,11,7,0,4,0,0,0,0,0,0,0,0,0,\n5,0,0,0,0,10,7,0,0,0,0,0,7,0,0,0,0,0,0,15,0,10,0,0,0,14,6,0,0,0,0,0,0,0,0,0,0,0,\n5,0,0,0,0,0,0,0,5,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,5,0,0,11,5,0,0,0,0,0,0,0,0,0,0,\n0,4,0,0,0,0,0,6,0,0,10,0,0,0,0,7,0,0,0,0,0,0,10,6,0,0,0,0,8,4,0,0,0,7,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,12,5,0,0,0,0,\n0,6,0,0,0,0,9,6,0,0,0,0,0,0,0,6,9,0,0,0,0,6,0,0,0,0,8,7,0,0,0,0,0,0,0,6,0,0,0,0,\n0,0,0,0,0,0,10,5,0,0,0,0,0,0,8,6,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,8,5,0,0,0,0,0,7,0,7,0,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,5,0,0,0,0,13,\n7,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,7,0,0,13,0,0,0,0,0,0,0,0,7,10,5,0,0,0,0,0,0,9,7,0,0,8,6,9,\n5,0,0,0,0,0,6,12,0,0,0,0,0,0,0,18,6,0,0,0,0,0,0,0,0,19,7,0,4,0,0,0,0,9,5,0,5,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,7,0,0,0,0,0,0,14,0,0,0,23,7,8,7,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,22,0,0,7,0,0,0,0,0,0,0,0,9,7,8,4,0,\n0,0,0,0,0,0,0,8,5,0,6,0,0,0,0,0,6,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,\n8,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,12,5,0,0,0,0,0,0,0,0,0,0,8,6,0,0,11,7,0,0,0,\n0,12,0,8,6,19,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,11,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,11,7,0,0,0,0,0,4,10,0,0,0,0,0,0,0,8,7,0,0,0,0,14,0,8,0,0,6,10,0,0,\n0,0,0,0,0,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,0,0,\n0,0,0,0,13,0,0,0,0,0,0,0,11,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,\n0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,5,0,0,0,6,0,0,0,5,0,7,0,0,0,\n0,0,6,0,0,21,7,0,0,9,6,0,0,0,6,0,0,13,7,0,0,0,5,0,0,0,0,0,4,0,6,0,0,0,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,0,11,5,0,6,0,0,10,5,0,0,0,0,0,0,0,0,9,6,0,0,8,7,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,9,0,0,0,0,0,0,6,0,0,0,0,15,4,0,0,12,7,0,0,0,6,\n0,7,0,0,8,0,9,5,0,4,0,0,0,6,0,6,0,0,23,4,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,4,0,0,8,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,0,0,0,0,0,0,\n7,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,12,6,0,0,0,0,0,0,10,7,0,7,0,0,0,0,0,0,0,0,0,0,\n9,0,0,0,0,0,8,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,11,5,0,0,0,6,0,6,0,0,0,0,0,0,0,6,0,\n4,0,0,0,0,0,0,0,0,0,0,0,5,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,8,7,0,0,0,6,0,6,0,\n0,0,0,0,0,0,0,0,5,0,0,0,0,0,5,0,0,0,0,11,0,0,0,0,0,0,0,10,5,9,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,23,7,0,0,0,0,0,7,0,0,10,6,18,0,0,0,\n0,0,0,0,8,7,0,6,0,0,0,0,0,0,8,5,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,\n0,0,0,0,0,6,0,0,0,4,12,7,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,13,5,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,0,0,0,\n11,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,\n0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,10,0,11,0,0,0,0,0,0,0,0,0,\n17,5,0,4,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,4,0,0,0,0,8,7,0,0,0,0,0,0,0,\n0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,\n10,0,0,0,8,6,0,0,0,7,0,0,0,0,0,0,8,0,0,0,14,0,0,0,0,7,0,0,0,4,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,9,4,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,\n10,0,0,0,16,5,0,0,0,0,0,0,8,0,0,4,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,10,0,0,0,\n0,0,0,0,0,5,0,0,0,0,12,5,0,7,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0,\n0,0,0,0,0,0,0,12,6,0,0,0,0,0,7,0,6,0,6,12,6,0,0,0,0,0,0,0,4,8,7,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,10,6,8,0,0,\n6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n16,0,8,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,23,5,0,0,0,7,0,6,0,\n0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,14,0,0,0,0,7,0,0,0,4,17,5,0,0,0,0,11,0,9,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,6,0,0,0,5,0,7,0,0,0,0,0,0,0,0,8,0,0,0,\n12,6,0,0,0,0,0,0,13,0,0,0,0,7,9,0,0,0,0,0,0,0,0,0,0,5,0,0,0,7,10,7,12,0,0,0,9,0,\n0,0,14,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,15,6,0,0,23,0,0,7,0,6,0,0,0,7,0,6,\n0,0,0,0,0,0,0,6,0,6,9,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,8,7,9,4,0,0,10,0,0,0,10,\n6,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,6,0,0,0,0,0,0,9,4,\n0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,9,6,0,0,0,0,8,6,0,0,0,0,0,0,0,0,12,0,0,\n0,0,0,8,0,0,6,11,6,0,0,8,7,8,5,0,0,0,0,0,5,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,\n10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,\n7,0,0,0,0,9,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,8,0,0,0,0,6,12,5,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,10,0,10,\n7,0,0,8,0,0,0,0,4,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0,\n0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,6,0,5,0,0,0,0,8,0,0,0,10,7,0,0,0,0,10,0,0,0,\n0,0,13,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,19,7,0,4,12,0,8,0,0,0,0,6,0,0,0,0,\n0,0,0,6,0,0,0,0,0,0,0,0,0,4,0,0,0,0,18,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,\n0,14,0,0,4,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,0,0,0,10,4,0,0,9,7,0,0,11,0,0,0,0,0,0,\n7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,4,0,0,12,0,0,0,\n0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,22,5,9,7,0,0,0,0,0,0,0,0,0,\n0,0,6,0,0,9,6,0,5,0,0,0,0,0,0,10,5,0,0,8,6,0,6,10,5,0,0,0,6,0,0,0,6,0,0,20,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,0,17,4,0,7,0,6,\n0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,\n0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,\n0,0,7,0,0,8,6,12,0,0,7,18,7,0,0,8,4,0,0,0,0,9,6,0,0,0,0,0,0,0,0,13,0,0,6,0,0,0,\n0,0,0,0,0,0,0,10,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,0,\n0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,12,0,0,0,8,0,0,0,0,0,0,\n4,0,0,10,0,16,0,0,0,0,0,0,0,12,7,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,16,6,10,0,0,5,0,0,0,0,0,6,0,0,0,0,\n0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,5,8,7,0,7,0,0,0,0,0,0,0,0,8,0,0,6,0,0,0,6,0,0,0,4,0,0,0,0,\n8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,7,0,0,8,0,0,0,\n9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,13,5,0,5,0,0,0,7,8,4,0,0,0,0,0,0,0,\n0,12,0,0,0,0,0,0,0,0,0,0,0,8,6,0,6,0,0,11,0,0,0,0,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0,\n0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,11,6,0,0,10,6,0,0,\n0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,\n0,0,0,6,0,0,0,7,0,0,9,0,8,7,11,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,9,6,10,5,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,10,7,0,0,0,0,0,0,11,0,9,6,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,15,5,12,5,\n0,0,0,0,0,0,12,7,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,12,6,0,\n0,0,0,24,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0,\n0,0,0,4,10,4,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,9,0,11,0,0,0,0,0,0,0,0,0,0,6,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,\n0,0,8,0,0,0,0,7,0,0,0,0,0,0,10,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,0,\n0,0,0,0,0,14,7,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,0,0,6,0,0,0,6,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,7,20,7,11,4,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,7,9,6,0,0,12,7,0,0,0,0,0,0,10,0,12,0,\n0,0,0,0,0,4,9,6,13,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,5,0,0,0,0,0,0,8,0,0,0,0,0,0,\n0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,11,0,9,0,0,0,0,4,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,5,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,\n0,4,0,5,0,0,0,0,0,0,0,0,0,4,0,0,0,0,9,7,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,\n0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,\n0,0,0,0,8,7,0,0,0,0,0,0,12,0,0,6,0,0,0,0,0,0,0,6,8,4,0,0,10,7,0,0,10,0,0,0,0,0,\n0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,5,\n0,4,0,0,0,0,0,6,0,0,0,0,0,0,8,0,0,6,0,0,0,6,0,0,0,0,0,7,0,5,8,4,0,0,9,0,0,0,0,4,\n0,0,0,0,0,0,0,0,0,5,0,0,15,6,8,6,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,9,6,0,0,0,0,0,0,0,7,0,0,0,4,0,\n6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,9,5,0,6,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,0,12,7,0,0,0,0,\n0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,11,4,0,0,0,0,0,0,0,0,0,0,10,\n7,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,7,8,7,9,6,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,5,12,0,\n10,5,12,6,0,0,0,7,0,0,0,0,0,0,0,5,0,0,0,5,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,\n11,7,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,6,0,7,0,0,0,0,8,0,8,5,0,6,0,0,0,6,0,0,0,\n0,0,0,0,6,0,6,0,6,9,0,0,5,17,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,7,0,0,\n0,0,0,7,0,0,0,0,16,5,0,0,0,0,0,0,0,4,0,0,0,5,11,5,0,7,0,0,0,4,8,7,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,12,0,0,0,\n0,0,12,0,0,0,0,0,0,0,0,4,10,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,0,0,4,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,20,5,0,0,\n10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,12,0,0,0,0,0,0,6,0,0,0,0,0,0,9,4,10,7,0,4,0,0,\n0,0,0,0,10,6,0,0,0,0,8,4,0,7,8,6,0,6,8,0,10,0,0,0,0,0,13,5,0,6,0,0,0,0,0,0,22,4,\n0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,10,\n5,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,10,4,0,0,10,7,0,0,0,0,0,5,0,\n5,8,0,0,0,0,6,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,4,0,0,0,0,0,6,0,0,\n0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0,\n4,0,0,0,4,10,0,0,6,13,7,8,0,0,0,0,0,0,7,0,0,12,7,0,0,0,0,0,0,10,5,0,0,0,0,0,6,0,\n0,0,0,0,0,0,0,0,0,13,7,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,6,0,6,\n0,0,0,0,0,0,0,0,12,0,8,4,0,0,0,0,0,4,0,4,0,0,0,0,0,0,0,5,0,0,0,0,12,5,0,0,0,7,0,\n0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,10,0,0,0,20,0,0,5,0,0,10,\n7,11,7,0,0,0,0,0,0,0,0,0,0,17,0,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,10,7,0,4,0,6,0,0,24,0,0,5,0,0,0,0,8,0,0,\n0,0,0,0,0,10,5,0,4,0,6,0,0,8,0,0,0,0,0,0,4,0,6,0,0,0,0,0,0,9,5,0,0,0,0,0,0,0,0,\n0,0,0,6,0,0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,0,7,\n0,0,13,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,\n17,7,0,0,11,6,0,0,0,0,12,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,10,0,0,4,8,6,0,0,0,\n0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,9,5,0,7,18,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,8,0,0,0,\n0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,\n0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,4,0,6,0,0,9,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,\n0,0,0,8,7,10,0,8,5,0,0,0,0,0,0,0,0,9,0,0,0,10,0,0,0,0,6,0,7,0,4,0,0,0,0,0,0,0,0,\n8,0,0,0,0,0,8,4,0,0,0,0,0,5,0,0,10,0,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n4,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,6,11,0,0,\n7,0,0,0,0,0,6,10,5,0,0,0,0,0,0,0,0,0,5,0,0,9,5,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,6,0,0,0,0,13,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,\n0,0,0,8,4,0,6,12,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,11,4,0,0,0,6,14,0,11,0,9,6,0,0,0,0,0,0,22,0,12,0,8,6,0,0,0,0,0,0,0,6,0,\n0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,\n10,7,0,0,0,0,0,0,0,0,9,0,0,0,0,4,0,0,0,0,0,0,0,0,0,5,11,0,0,0,0,0,0,0,8,6,0,0,9,\n7,0,0,12,4,0,0,0,0,0,0,12,6,0,6,0,7,0,0,8,5,0,0,0,0};\n"
  },
  {
    "path": "libs/brotli/enc/encode.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Implementation of Brotli compressor. */\n\n#include <brotli/encode.h>\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include <brotli/shared_dictionary.h>\n#include \"../common/version.h\"\n#include \"backward_references_hq.h\"\n#include \"backward_references.h\"\n#include \"bit_cost.h\"\n#include \"brotli_bit_stream.h\"\n#include \"command.h\"\n#include \"compound_dictionary.h\"\n#include \"compress_fragment_two_pass.h\"\n#include \"compress_fragment.h\"\n#include \"dictionary_hash.h\"\n#include \"encoder_dict.h\"\n#include \"fast_log.h\"\n#include \"hash.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n#include \"metablock.h\"\n#include \"params.h\"\n#include \"quality.h\"\n#include \"ringbuffer.h\"\n#include \"state.h\"\n#include \"static_init.h\"\n#include \"utf8_util.h\"\n#include \"write_bits.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src));\n\nstatic size_t InputBlockSize(BrotliEncoderState* s) {\n  return (size_t)1 << s->params.lgblock;\n}\n\nstatic uint64_t UnprocessedInputSize(BrotliEncoderState* s) {\n  return s->input_pos_ - s->last_processed_pos_;\n}\n\nstatic size_t RemainingInputBlockSize(BrotliEncoderState* s) {\n  const uint64_t delta = UnprocessedInputSize(s);\n  size_t block_size = InputBlockSize(s);\n  if (delta >= block_size) return 0;\n  return block_size - (size_t)delta;\n}\n\nBROTLI_BOOL BrotliEncoderSetParameter(\n    BrotliEncoderState* state, BrotliEncoderParameter p, uint32_t value) {\n  /* Changing parameters on the fly is not implemented yet. */\n  if (state->is_initialized_) return BROTLI_FALSE;\n  /* TODO(eustas): Validate/clamp parameters here. */\n  switch (p) {\n    case BROTLI_PARAM_MODE:\n      state->params.mode = (BrotliEncoderMode)value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_QUALITY:\n      state->params.quality = (int)value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_LGWIN:\n      state->params.lgwin = (int)value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_LGBLOCK:\n      state->params.lgblock = (int)value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:\n      if ((value != 0) && (value != 1)) return BROTLI_FALSE;\n      state->params.disable_literal_context_modeling = TO_BROTLI_BOOL(!!value);\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_SIZE_HINT:\n      state->params.size_hint = value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_LARGE_WINDOW:\n      state->params.large_window = TO_BROTLI_BOOL(!!value);\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_NPOSTFIX:\n      state->params.dist.distance_postfix_bits = value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_NDIRECT:\n      state->params.dist.num_direct_distance_codes = value;\n      return BROTLI_TRUE;\n\n    case BROTLI_PARAM_STREAM_OFFSET:\n      if (value > (1u << 30)) return BROTLI_FALSE;\n      state->params.stream_offset = value;\n      return BROTLI_TRUE;\n\n    default: return BROTLI_FALSE;\n  }\n}\n\n/* Wraps 64-bit input position to 32-bit ring-buffer position preserving\n   \"not-a-first-lap\" feature. */\nstatic uint32_t WrapPosition(uint64_t position) {\n  uint32_t result = (uint32_t)position;\n  uint64_t gb = position >> 30;\n  if (gb > 2) {\n    /* Wrap every 2GiB; The first 3GB are continuous. */\n    result = (result & ((1u << 30) - 1)) | ((uint32_t)((gb - 1) & 1) + 1) << 30;\n  }\n  return result;\n}\n\nstatic uint8_t* GetBrotliStorage(BrotliEncoderState* s, size_t size) {\n  MemoryManager* m = &s->memory_manager_;\n  if (s->storage_size_ < size) {\n    BROTLI_FREE(m, s->storage_);\n    s->storage_ = BROTLI_ALLOC(m, uint8_t, size);\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->storage_)) return NULL;\n    s->storage_size_ = size;\n  }\n  return s->storage_;\n}\n\nstatic size_t HashTableSize(size_t max_table_size, size_t input_size) {\n  size_t htsize = 256;\n  while (htsize < max_table_size && htsize < input_size) {\n    htsize <<= 1;\n  }\n  return htsize;\n}\n\nstatic int* GetHashTable(BrotliEncoderState* s, int quality,\n                         size_t input_size, size_t* table_size) {\n  /* Use smaller hash table when input.size() is smaller, since we\n     fill the table, incurring O(hash table size) overhead for\n     compression, and if the input is short, we won't need that\n     many hash table entries anyway. */\n  MemoryManager* m = &s->memory_manager_;\n  const size_t max_table_size = MaxHashTableSize(quality);\n  size_t htsize = HashTableSize(max_table_size, input_size);\n  int* table;\n  BROTLI_DCHECK(max_table_size >= 256);\n  if (quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {\n    /* Only odd shifts are supported by fast-one-pass. */\n    if ((htsize & 0xAAAAA) == 0) {\n      htsize <<= 1;\n    }\n  }\n\n  if (htsize <= sizeof(s->small_table_) / sizeof(s->small_table_[0])) {\n    table = s->small_table_;\n  } else {\n    if (htsize > s->large_table_size_) {\n      s->large_table_size_ = htsize;\n      BROTLI_FREE(m, s->large_table_);\n      s->large_table_ = BROTLI_ALLOC(m, int, htsize);\n      if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->large_table_)) return 0;\n    }\n    table = s->large_table_;\n  }\n\n  *table_size = htsize;\n  memset(table, 0, htsize * sizeof(*table));\n  return table;\n}\n\nstatic void EncodeWindowBits(int lgwin, BROTLI_BOOL large_window,\n    uint16_t* last_bytes, uint8_t* last_bytes_bits) {\n  if (large_window) {\n    *last_bytes = (uint16_t)(((lgwin & 0x3F) << 8) | 0x11);\n    *last_bytes_bits = 14;\n  } else {\n    if (lgwin == 16) {\n      *last_bytes = 0;\n      *last_bytes_bits = 1;\n    } else if (lgwin == 17) {\n      *last_bytes = 1;\n      *last_bytes_bits = 7;\n    } else if (lgwin > 17) {\n      *last_bytes = (uint16_t)(((lgwin - 17) << 1) | 0x01);\n      *last_bytes_bits = 4;\n    } else {\n      *last_bytes = (uint16_t)(((lgwin - 8) << 4) | 0x01);\n      *last_bytes_bits = 7;\n    }\n  }\n}\n\n/* TODO(eustas): move to compress_fragment.c? */\n/* Initializes the command and distance prefix codes for the first block. */\nstatic void InitCommandPrefixCodes(BrotliOnePassArena* s) {\n  static const BROTLI_MODEL(\"small\") uint8_t kDefaultCommandDepths[128] = {\n    0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,\n    0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7,\n    7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6,\n    7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,\n    5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4,\n    4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10,\n    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,\n  };\n  static const BROTLI_MODEL(\"small\") uint16_t kDefaultCommandBits[128] = {\n    0,   0,   8,   9,   3,  35,   7,   71,\n    39, 103,  23,  47, 175, 111, 239,   31,\n    0,   0,   0,   4,  12,   2,  10,    6,\n    13,  29,  11,  43,  27,  59,  87,   55,\n    15,  79, 319, 831, 191, 703, 447,  959,\n    0,  14,   1,  25,   5,  21,  19,   51,\n    119, 159,  95, 223, 479, 991,  63,  575,\n    127, 639, 383, 895, 255, 767, 511, 1023,\n    14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12,\n    2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255,\n    767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095,\n  };\n  static const BROTLI_MODEL(\"small\") uint8_t kDefaultCommandCode[] = {\n    0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6,\n    0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c,\n    0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa,\n    0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94,\n    0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00,\n  };\n  static const size_t kDefaultCommandCodeNumBits = 448;\n  COPY_ARRAY(s->cmd_depth, kDefaultCommandDepths);\n  COPY_ARRAY(s->cmd_bits, kDefaultCommandBits);\n\n  /* Initialize the pre-compressed form of the command and distance prefix\n     codes. */\n  COPY_ARRAY(s->cmd_code, kDefaultCommandCode);\n  s->cmd_code_numbits = kDefaultCommandCodeNumBits;\n}\n\n/* TODO(eustas): avoid FP calculations. */\nstatic double EstimateEntropy(const uint32_t* population, size_t size) {\n  size_t total = 0;\n  double result = 0;\n  for (size_t i = 0; i < size; ++i) {\n    uint32_t p = population[i];\n    total += p;\n    result += (double)p * FastLog2(p);\n  }\n  result = (double)total * FastLog2(total) - result;\n  return result;\n}\n\n/* Decide about the context map based on the ability of the prediction\n   ability of the previous byte UTF8-prefix on the next byte. The\n   prediction ability is calculated as Shannon entropy. Here we need\n   Shannon entropy instead of 'BrotliBitsEntropy' since the prefix will be\n   encoded with the remaining 6 bits of the following byte, and\n   BrotliBitsEntropy will assume that symbol to be stored alone using Huffman\n   coding. */\nstatic void ChooseContextMap(int quality,\n                             uint32_t* bigram_histo,\n                             size_t* num_literal_contexts,\n                             const uint32_t** literal_context_map) {\n  static const BROTLI_MODEL(\"small\")\n  uint32_t kStaticContextMapContinuation[64] = {\n    1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  };\n  static const BROTLI_MODEL(\"small\")\n  uint32_t kStaticContextMapSimpleUTF8[64] = {\n    0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n  };\n\n  uint32_t monogram_histo[3] = { 0 };\n  uint32_t two_prefix_histo[6] = { 0 };\n  size_t total;\n  size_t i;\n  double entropy[4];\n  for (i = 0; i < 9; ++i) {\n    monogram_histo[i % 3] += bigram_histo[i];\n    two_prefix_histo[i % 6] += bigram_histo[i];\n  }\n  entropy[1] = EstimateEntropy(monogram_histo, 3);\n  entropy[2] = (EstimateEntropy(two_prefix_histo, 3) +\n                EstimateEntropy(two_prefix_histo + 3, 3));\n  entropy[3] = 0;\n  for (i = 0; i < 3; ++i) {\n    entropy[3] += EstimateEntropy(bigram_histo + 3 * i, 3);\n  }\n\n  total = monogram_histo[0] + monogram_histo[1] + monogram_histo[2];\n  BROTLI_DCHECK(total != 0);\n  entropy[0] = 1.0 / (double)total;\n  entropy[1] *= entropy[0];\n  entropy[2] *= entropy[0];\n  entropy[3] *= entropy[0];\n\n  if (quality < MIN_QUALITY_FOR_HQ_CONTEXT_MODELING) {\n    /* 3 context models is a bit slower, don't use it at lower qualities. */\n    entropy[3] = entropy[1] * 10;\n  }\n  /* If expected savings by symbol are less than 0.2 bits, skip the\n     context modeling -- in exchange for faster decoding speed. */\n  if (entropy[1] - entropy[2] < 0.2 &&\n      entropy[1] - entropy[3] < 0.2) {\n    *num_literal_contexts = 1;\n  } else if (entropy[2] - entropy[3] < 0.02) {\n    *num_literal_contexts = 2;\n    *literal_context_map = kStaticContextMapSimpleUTF8;\n  } else {\n    *num_literal_contexts = 3;\n    *literal_context_map = kStaticContextMapContinuation;\n  }\n}\n\n/* Decide if we want to use a more complex static context map containing 13\n   context values, based on the entropy reduction of histograms over the\n   first 5 bits of literals. */\nstatic BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input,\n    size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,\n    size_t* num_literal_contexts, const uint32_t** literal_context_map,\n    uint32_t* arena) {\n  static const BROTLI_MODEL(\"small\")\n  uint32_t kStaticContextMapComplexUTF8[64] = {\n    11, 11, 12, 12, /* 0 special */\n    0, 0, 0, 0, /* 4 lf */\n    1, 1, 9, 9, /* 8 space */\n    2, 2, 2, 2, /* !, first after space/lf and after something else. */\n    1, 1, 1, 1, /* \" */\n    8, 3, 3, 3, /* % */\n    1, 1, 1, 1, /* ({[ */\n    2, 2, 2, 2, /* }]) */\n    8, 4, 4, 4, /* :; */\n    8, 7, 4, 4, /* . */\n    8, 0, 0, 0, /* > */\n    3, 3, 3, 3, /* [0..9] */\n    5, 5, 10, 5, /* [A-Z] */\n    5, 5, 10, 5,\n    6, 6, 6, 6, /* [a-z] */\n    6, 6, 6, 6,\n  };\n  BROTLI_UNUSED(quality);\n  /* Try the more complex static context map only for long data. */\n  if (size_hint < (1 << 20)) {\n    return BROTLI_FALSE;\n  } else {\n    const size_t end_pos = start_pos + length;\n    /* To make entropy calculations faster, we collect histograms\n       over the 5 most significant bits of literals. One histogram\n       without context and 13 additional histograms for each context value. */\n    uint32_t* BROTLI_RESTRICT const combined_histo = arena;\n    uint32_t* BROTLI_RESTRICT const context_histo = arena + 32;\n    uint32_t total = 0;\n    double entropy[3];\n    size_t i;\n    ContextLut utf8_lut = BROTLI_CONTEXT_LUT(CONTEXT_UTF8);\n    memset(arena, 0, sizeof(arena[0]) * 32 * (BROTLI_MAX_STATIC_CONTEXTS + 1));\n    for (; start_pos + 64 <= end_pos; start_pos += 4096) {\n      const size_t stride_end_pos = start_pos + 64;\n      uint8_t prev2 = input[start_pos & mask];\n      uint8_t prev1 = input[(start_pos + 1) & mask];\n      size_t pos;\n      /* To make the analysis of the data faster we only examine 64 byte long\n         strides at every 4kB intervals. */\n      for (pos = start_pos + 2; pos < stride_end_pos; ++pos) {\n        const uint8_t literal = input[pos & mask];\n        const uint8_t context = (uint8_t)kStaticContextMapComplexUTF8[\n            BROTLI_CONTEXT(prev1, prev2, utf8_lut)];\n        ++total;\n        ++combined_histo[literal >> 3];\n        ++context_histo[(context << 5) + (literal >> 3)];\n        prev2 = prev1;\n        prev1 = literal;\n      }\n    }\n    entropy[1] = EstimateEntropy(combined_histo, 32);\n    entropy[2] = 0;\n    for (i = 0; i < BROTLI_MAX_STATIC_CONTEXTS; ++i) {\n      entropy[2] += EstimateEntropy(context_histo + (i << 5), 32);\n    }\n    entropy[0] = 1.0 / (double)total;\n    entropy[1] *= entropy[0];\n    entropy[2] *= entropy[0];\n    /* The triggering heuristics below were tuned by compressing the individual\n       files of the silesia corpus. If we skip this kind of context modeling\n       for not very well compressible input (i.e. entropy using context modeling\n       is 60% of maximal entropy) or if expected savings by symbol are less\n       than 0.2 bits, then in every case when it triggers, the final compression\n       ratio is improved. Note however that this heuristics might be too strict\n       for some cases and could be tuned further. */\n    if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) {\n      return BROTLI_FALSE;\n    } else {\n      *num_literal_contexts = BROTLI_MAX_STATIC_CONTEXTS;\n      *literal_context_map = kStaticContextMapComplexUTF8;\n      return BROTLI_TRUE;\n    }\n  }\n}\n\nstatic void DecideOverLiteralContextModeling(const uint8_t* input,\n    size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,\n    size_t* num_literal_contexts, const uint32_t** literal_context_map,\n    uint32_t* arena) {\n  if (quality < MIN_QUALITY_FOR_CONTEXT_MODELING || length < 64) {\n    return;\n  } else if (ShouldUseComplexStaticContextMap(\n      input, start_pos, length, mask, quality, size_hint,\n      num_literal_contexts, literal_context_map, arena)) {\n    /* Context map was already set, nothing else to do. */\n  } else {\n    /* Gather bi-gram data of the UTF8 byte prefixes. To make the analysis of\n       UTF8 data faster we only examine 64 byte long strides at every 4kB\n       intervals. */\n    const size_t end_pos = start_pos + length;\n    uint32_t* BROTLI_RESTRICT const bigram_prefix_histo = arena;\n    memset(bigram_prefix_histo, 0, sizeof(arena[0]) * 9);\n    for (; start_pos + 64 <= end_pos; start_pos += 4096) {\n      static const int lut[4] = { 0, 0, 1, 2 };\n      const size_t stride_end_pos = start_pos + 64;\n      int prev = lut[input[start_pos & mask] >> 6] * 3;\n      size_t pos;\n      for (pos = start_pos + 1; pos < stride_end_pos; ++pos) {\n        const uint8_t literal = input[pos & mask];\n        ++bigram_prefix_histo[prev + lut[literal >> 6]];\n        prev = lut[literal >> 6] * 3;\n      }\n    }\n    ChooseContextMap(quality, &bigram_prefix_histo[0], num_literal_contexts,\n                     literal_context_map);\n  }\n}\n\nstatic BROTLI_BOOL ShouldCompress(\n    const uint8_t* data, const size_t mask, const uint64_t last_flush_pos,\n    const size_t bytes, const size_t num_literals, const size_t num_commands) {\n  /* TODO(eustas): find more precise minimal block overhead. */\n  if (bytes <= 2) return BROTLI_FALSE;\n  if (num_commands < (bytes >> 8) + 2) {\n    if ((double)num_literals > 0.99 * (double)bytes) {\n      uint32_t literal_histo[256] = { 0 };\n      static const uint32_t kSampleRate = 13;\n      static const double kInvSampleRate = 1.0 / 13.0;\n      static const double kMinEntropy = 7.92;\n      const double bit_cost_threshold =\n          (double)bytes * kMinEntropy * kInvSampleRate;\n      size_t t = (bytes + kSampleRate - 1) / kSampleRate;\n      uint32_t pos = (uint32_t)last_flush_pos;\n      size_t i;\n      for (i = 0; i < t; i++) {\n        ++literal_histo[data[pos & mask]];\n        pos += kSampleRate;\n      }\n      if (BrotliBitsEntropy(literal_histo, 256) > bit_cost_threshold) {\n        return BROTLI_FALSE;\n      }\n    }\n  }\n  return BROTLI_TRUE;\n}\n\n/* Chooses the literal context mode for a metablock */\nstatic ContextType ChooseContextMode(const BrotliEncoderParams* params,\n    const uint8_t* data, const size_t pos, const size_t mask,\n    const size_t length) {\n  /* We only do the computation for the option of something else than\n     CONTEXT_UTF8 for the highest qualities */\n  if (params->quality >= MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING &&\n      !BrotliIsMostlyUTF8(data, pos, mask, length, kMinUTF8Ratio)) {\n    return CONTEXT_SIGNED;\n  }\n  return CONTEXT_UTF8;\n}\n\nstatic void WriteMetaBlockInternal(MemoryManager* m,\n                                   const uint8_t* data,\n                                   const size_t mask,\n                                   const uint64_t last_flush_pos,\n                                   const size_t bytes,\n                                   const BROTLI_BOOL is_last,\n                                   ContextType literal_context_mode,\n                                   const BrotliEncoderParams* params,\n                                   const uint8_t prev_byte,\n                                   const uint8_t prev_byte2,\n                                   const size_t num_literals,\n                                   const size_t num_commands,\n                                   Command* commands,\n                                   const int* saved_dist_cache,\n                                   int* dist_cache,\n                                   size_t* storage_ix,\n                                   uint8_t* storage) {\n  const uint32_t wrapped_last_flush_pos = WrapPosition(last_flush_pos);\n  uint16_t last_bytes;\n  uint8_t last_bytes_bits;\n  ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);\n  BrotliEncoderParams block_params = *params;\n\n  if (bytes == 0) {\n    /* Write the ISLAST and ISEMPTY bits. */\n    BrotliWriteBits(2, 3, storage_ix, storage);\n    *storage_ix = (*storage_ix + 7u) & ~7u;\n    return;\n  }\n\n  if (!ShouldCompress(data, mask, last_flush_pos, bytes,\n                      num_literals, num_commands)) {\n    /* Restore the distance cache, as its last update by\n       CreateBackwardReferences is now unused. */\n    memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));\n    BrotliStoreUncompressedMetaBlock(is_last, data,\n                                     wrapped_last_flush_pos, mask, bytes,\n                                     storage_ix, storage);\n    return;\n  }\n\n  BROTLI_DCHECK(*storage_ix <= 14);\n  last_bytes = (uint16_t)((storage[1] << 8) | storage[0]);\n  last_bytes_bits = (uint8_t)(*storage_ix);\n  if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {\n    BrotliStoreMetaBlockFast(m, data, wrapped_last_flush_pos,\n                             bytes, mask, is_last, params,\n                             commands, num_commands,\n                             storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return;\n  } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {\n    BrotliStoreMetaBlockTrivial(m, data, wrapped_last_flush_pos,\n                                bytes, mask, is_last, params,\n                                commands, num_commands,\n                                storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return;\n  } else {\n    MetaBlockSplit mb;\n    InitMetaBlockSplit(&mb);\n    if (params->quality < MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) {\n      size_t num_literal_contexts = 1;\n      const uint32_t* literal_context_map = NULL;\n      if (!params->disable_literal_context_modeling) {\n        /* TODO(eustas): pull to higher level and reuse. */\n        uint32_t* arena =\n            BROTLI_ALLOC(m, uint32_t, 32 * (BROTLI_MAX_STATIC_CONTEXTS + 1));\n        if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(arena)) return;\n        DecideOverLiteralContextModeling(\n            data, wrapped_last_flush_pos, bytes, mask, params->quality,\n            params->size_hint, &num_literal_contexts,\n            &literal_context_map, arena);\n        BROTLI_FREE(m, arena);\n      }\n      BrotliBuildMetaBlockGreedy(m, data, wrapped_last_flush_pos, mask,\n          prev_byte, prev_byte2, literal_context_lut, num_literal_contexts,\n          literal_context_map, commands, num_commands, &mb);\n      if (BROTLI_IS_OOM(m)) return;\n    } else {\n      BrotliBuildMetaBlock(m, data, wrapped_last_flush_pos, mask, &block_params,\n                           prev_byte, prev_byte2,\n                           commands, num_commands,\n                           literal_context_mode,\n                           &mb);\n      if (BROTLI_IS_OOM(m)) return;\n    }\n    if (params->quality >= MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS) {\n      /* The number of distance symbols effectively used for distance\n         histograms. It might be less than distance alphabet size\n         for \"Large Window Brotli\" (32-bit). */\n      BrotliOptimizeHistograms(block_params.dist.alphabet_size_limit, &mb);\n    }\n    BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask,\n                         prev_byte, prev_byte2,\n                         is_last,\n                         &block_params,\n                         literal_context_mode,\n                         commands, num_commands,\n                         &mb,\n                         storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return;\n    DestroyMetaBlockSplit(m, &mb);\n  }\n  if (bytes + 4 < (*storage_ix >> 3)) {\n    /* Restore the distance cache and last byte. */\n    memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));\n    storage[0] = (uint8_t)last_bytes;\n    storage[1] = (uint8_t)(last_bytes >> 8);\n    *storage_ix = last_bytes_bits;\n    BrotliStoreUncompressedMetaBlock(is_last, data,\n                                     wrapped_last_flush_pos, mask,\n                                     bytes, storage_ix, storage);\n  }\n}\n\nstatic void ChooseDistanceParams(BrotliEncoderParams* params) {\n  uint32_t distance_postfix_bits = 0;\n  uint32_t num_direct_distance_codes = 0;\n\n  if (params->quality >= MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS) {\n    uint32_t ndirect_msb;\n    if (params->mode == BROTLI_MODE_FONT) {\n      distance_postfix_bits = 1;\n      num_direct_distance_codes = 12;\n    } else {\n      distance_postfix_bits = params->dist.distance_postfix_bits;\n      num_direct_distance_codes = params->dist.num_direct_distance_codes;\n    }\n    ndirect_msb = (num_direct_distance_codes >> distance_postfix_bits) & 0x0F;\n    if (distance_postfix_bits > BROTLI_MAX_NPOSTFIX ||\n        num_direct_distance_codes > BROTLI_MAX_NDIRECT ||\n        (ndirect_msb << distance_postfix_bits) != num_direct_distance_codes) {\n      distance_postfix_bits = 0;\n      num_direct_distance_codes = 0;\n    }\n  }\n\n  BrotliInitDistanceParams(&params->dist, distance_postfix_bits,\n                           num_direct_distance_codes, params->large_window);\n}\n\nstatic BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s) {\n  MemoryManager* m = &s->memory_manager_;\n  if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  if (s->is_initialized_) return BROTLI_TRUE;\n\n  s->last_bytes_bits_ = 0;\n  s->last_bytes_ = 0;\n  s->flint_ = BROTLI_FLINT_DONE;\n  s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;\n\n  SanitizeParams(&s->params);\n  s->params.lgblock = ComputeLgBlock(&s->params);\n  ChooseDistanceParams(&s->params);\n\n  if (s->params.stream_offset != 0) {\n    s->flint_ = BROTLI_FLINT_NEEDS_2_BYTES;\n    /* Poison the distance cache. -16 +- 3 is still less than zero (invalid). */\n    s->dist_cache_[0] = -16;\n    s->dist_cache_[1] = -16;\n    s->dist_cache_[2] = -16;\n    s->dist_cache_[3] = -16;\n    memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));\n  }\n\n  RingBufferSetup(&s->params, &s->ringbuffer_);\n\n  /* Initialize last byte with stream header. */\n  {\n    int lgwin = s->params.lgwin;\n    if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||\n        s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n      lgwin = BROTLI_MAX(int, lgwin, 18);\n    }\n    if (s->params.stream_offset == 0) {\n      EncodeWindowBits(lgwin, s->params.large_window,\n                       &s->last_bytes_, &s->last_bytes_bits_);\n    } else {\n      /* Bigger values have the same effect, but could cause overflows. */\n      s->params.stream_offset = BROTLI_MIN(size_t,\n          s->params.stream_offset, BROTLI_MAX_BACKWARD_LIMIT(lgwin));\n    }\n  }\n\n  if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {\n    s->one_pass_arena_ = BROTLI_ALLOC(m, BrotliOnePassArena, 1);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    InitCommandPrefixCodes(s->one_pass_arena_);\n  } else if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    s->two_pass_arena_ = BROTLI_ALLOC(m, BrotliTwoPassArena, 1);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  }\n\n  s->is_initialized_ = BROTLI_TRUE;\n  return BROTLI_TRUE;\n}\n\nstatic void BrotliEncoderInitParams(BrotliEncoderParams* params) {\n  params->mode = BROTLI_DEFAULT_MODE;\n  params->large_window = BROTLI_FALSE;\n  params->quality = BROTLI_DEFAULT_QUALITY;\n  params->lgwin = BROTLI_DEFAULT_WINDOW;\n  params->lgblock = 0;\n  params->stream_offset = 0;\n  params->size_hint = 0;\n  params->disable_literal_context_modeling = BROTLI_FALSE;\n  BrotliInitSharedEncoderDictionary(&params->dictionary);\n  params->dist.distance_postfix_bits = 0;\n  params->dist.num_direct_distance_codes = 0;\n  params->dist.alphabet_size_max =\n      BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_MAX_DISTANCE_BITS);\n  params->dist.alphabet_size_limit = params->dist.alphabet_size_max;\n  params->dist.max_distance = BROTLI_MAX_DISTANCE;\n}\n\nstatic void BrotliEncoderCleanupParams(MemoryManager* m,\n    BrotliEncoderParams* params) {\n  BrotliCleanupSharedEncoderDictionary(m, &params->dictionary);\n}\n\n#ifdef BROTLI_REPORTING\n/* When BROTLI_REPORTING is defined extra reporting module have to be linked. */\nvoid BrotliEncoderOnStart(const BrotliEncoderState* s);\nvoid BrotliEncoderOnFinish(const BrotliEncoderState* s);\n#define BROTLI_ENCODER_ON_START(s) BrotliEncoderOnStart(s);\n#define BROTLI_ENCODER_ON_FINISH(s) BrotliEncoderOnFinish(s);\n#else\n#if !defined(BROTLI_ENCODER_ON_START)\n#define BROTLI_ENCODER_ON_START(s) (void)(s);\n#endif\n#if !defined(BROTLI_ENCODER_ON_FINISH)\n#define BROTLI_ENCODER_ON_FINISH(s) (void)(s);\n#endif\n#endif\n\nstatic void BrotliEncoderInitState(BrotliEncoderState* s) {\n  BROTLI_ENCODER_ON_START(s);\n  BrotliEncoderInitParams(&s->params);\n  s->input_pos_ = 0;\n  s->num_commands_ = 0;\n  s->num_literals_ = 0;\n  s->last_insert_len_ = 0;\n  s->last_flush_pos_ = 0;\n  s->last_processed_pos_ = 0;\n  s->prev_byte_ = 0;\n  s->prev_byte2_ = 0;\n  s->storage_size_ = 0;\n  s->storage_ = 0;\n  HasherInit(&s->hasher_);\n  s->large_table_ = NULL;\n  s->large_table_size_ = 0;\n  s->one_pass_arena_ = NULL;\n  s->two_pass_arena_ = NULL;\n  s->command_buf_ = NULL;\n  s->literal_buf_ = NULL;\n  s->total_in_ = 0;\n  s->next_out_ = NULL;\n  s->available_out_ = 0;\n  s->total_out_ = 0;\n  s->stream_state_ = BROTLI_STREAM_PROCESSING;\n  s->is_last_block_emitted_ = BROTLI_FALSE;\n  s->is_initialized_ = BROTLI_FALSE;\n\n  RingBufferInit(&s->ringbuffer_);\n\n  s->commands_ = 0;\n  s->cmd_alloc_size_ = 0;\n\n  /* Initialize distance cache. */\n  s->dist_cache_[0] = 4;\n  s->dist_cache_[1] = 11;\n  s->dist_cache_[2] = 15;\n  s->dist_cache_[3] = 16;\n  /* Save the state of the distance cache in case we need to restore it for\n     emitting an uncompressed block. */\n  memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));\n}\n\nBrotliEncoderState* BrotliEncoderCreateInstance(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {\n  BROTLI_BOOL healthy = BrotliEncoderEnsureStaticInit();\n  if (!healthy) {\n    return 0;\n  }\n  BrotliEncoderState* state = (BrotliEncoderState*)BrotliBootstrapAlloc(\n      sizeof(BrotliEncoderState), alloc_func, free_func, opaque);\n  if (state == NULL) {\n    /* BROTLI_DUMP(); */\n    return 0;\n  }\n  BrotliInitMemoryManager(\n      &state->memory_manager_, alloc_func, free_func, opaque);\n  BrotliEncoderInitState(state);\n  return state;\n}\n\nstatic void BrotliEncoderCleanupState(BrotliEncoderState* s) {\n  MemoryManager* m = &s->memory_manager_;\n\n  BROTLI_ENCODER_ON_FINISH(s);\n\n  if (BROTLI_IS_OOM(m)) {\n    BrotliWipeOutMemoryManager(m);\n    return;\n  }\n\n  BROTLI_FREE(m, s->storage_);\n  BROTLI_FREE(m, s->commands_);\n  RingBufferFree(m, &s->ringbuffer_);\n  DestroyHasher(m, &s->hasher_);\n  BROTLI_FREE(m, s->large_table_);\n  BROTLI_FREE(m, s->one_pass_arena_);\n  BROTLI_FREE(m, s->two_pass_arena_);\n  BROTLI_FREE(m, s->command_buf_);\n  BROTLI_FREE(m, s->literal_buf_);\n  BrotliEncoderCleanupParams(m, &s->params);\n}\n\n/* Deinitializes and frees BrotliEncoderState instance. */\nvoid BrotliEncoderDestroyInstance(BrotliEncoderState* state) {\n  if (!state) {\n    return;\n  } else {\n    BrotliEncoderCleanupState(state);\n    BrotliBootstrapFree(state, &state->memory_manager_);\n  }\n}\n\n/*\n   Copies the given input data to the internal ring buffer of the compressor.\n   No processing of the data occurs at this time and this function can be\n   called multiple times before calling WriteBrotliData() to process the\n   accumulated input. At most input_block_size() bytes of input data can be\n   copied to the ring buffer, otherwise the next WriteBrotliData() will fail.\n */\nstatic void CopyInputToRingBuffer(BrotliEncoderState* s,\n                                  const size_t input_size,\n                                  const uint8_t* input_buffer) {\n  RingBuffer* ringbuffer_ = &s->ringbuffer_;\n  MemoryManager* m = &s->memory_manager_;\n  RingBufferWrite(m, input_buffer, input_size, ringbuffer_);\n  if (BROTLI_IS_OOM(m)) return;\n  s->input_pos_ += input_size;\n\n  /* TL;DR: If needed, initialize 7 more bytes in the ring buffer to make the\n     hashing not depend on uninitialized data. This makes compression\n     deterministic and it prevents uninitialized memory warnings in Valgrind.\n     Even without erasing, the output would be valid (but nondeterministic).\n\n     Background information: The compressor stores short (at most 8 bytes)\n     substrings of the input already read in a hash table, and detects\n     repetitions by looking up such substrings in the hash table. If it\n     can find a substring, it checks whether the substring is really there\n     in the ring buffer (or it's just a hash collision). Should the hash\n     table become corrupt, this check makes sure that the output is\n     still valid, albeit the compression ratio would be bad.\n\n     The compressor populates the hash table from the ring buffer as it's\n     reading new bytes from the input. However, at the last few indexes of\n     the ring buffer, there are not enough bytes to build full-length\n     substrings from. Since the hash table always contains full-length\n     substrings, we overwrite with zeros here to make sure that those\n     substrings will contain zeros at the end instead of uninitialized\n     data.\n\n     Please note that erasing is not necessary (because the\n     memory region is already initialized since he ring buffer\n     has a `tail' that holds a copy of the beginning,) so we\n     skip erasing if we have already gone around at least once in\n     the ring buffer.\n\n     Only clear during the first round of ring-buffer writes. On\n     subsequent rounds data in the ring-buffer would be affected. */\n  if (ringbuffer_->pos_ <= ringbuffer_->mask_) {\n    /* This is the first time when the ring buffer is being written.\n       We clear 7 bytes just after the bytes that have been copied from\n       the input buffer.\n\n       The ring-buffer has a \"tail\" that holds a copy of the beginning,\n       but only once the ring buffer has been fully written once, i.e.,\n       pos <= mask. For the first time, we need to write values\n       in this tail (where index may be larger than mask), so that\n       we have exactly defined behavior and don't read uninitialized\n       memory. Due to performance reasons, hashing reads data using a\n       LOAD64, which can go 7 bytes beyond the bytes written in the\n       ring-buffer. */\n    memset(ringbuffer_->buffer_ + ringbuffer_->pos_, 0, 7);\n  }\n}\n\n/* Marks all input as processed.\n   Returns true if position wrapping occurs. */\nstatic BROTLI_BOOL UpdateLastProcessedPos(BrotliEncoderState* s) {\n  uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);\n  uint32_t wrapped_input_pos = WrapPosition(s->input_pos_);\n  s->last_processed_pos_ = s->input_pos_;\n  return TO_BROTLI_BOOL(wrapped_input_pos < wrapped_last_processed_pos);\n}\n\nstatic void ExtendLastCommand(BrotliEncoderState* s, uint32_t* bytes,\n                              uint32_t* wrapped_last_processed_pos) {\n  Command* last_command = &s->commands_[s->num_commands_ - 1];\n  const uint8_t* data = s->ringbuffer_.buffer_;\n  const uint32_t mask = s->ringbuffer_.mask_;\n  uint64_t max_backward_distance =\n      (((uint64_t)1) << s->params.lgwin) - BROTLI_WINDOW_GAP;\n  uint64_t last_copy_len = last_command->copy_len_ & 0x1FFFFFF;\n  uint64_t last_processed_pos = s->last_processed_pos_ - last_copy_len;\n  uint64_t max_distance = last_processed_pos < max_backward_distance ?\n      last_processed_pos : max_backward_distance;\n  uint64_t cmd_dist = (uint64_t)s->dist_cache_[0];\n  uint32_t distance_code = CommandRestoreDistanceCode(last_command,\n                                                      &s->params.dist);\n  const CompoundDictionary* dict = &s->params.dictionary.compound;\n  size_t compound_dictionary_size = dict->total_size;\n  if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES ||\n      distance_code - (BROTLI_NUM_DISTANCE_SHORT_CODES - 1) == cmd_dist) {\n    if (cmd_dist <= max_distance) {\n      while (*bytes != 0 && data[*wrapped_last_processed_pos & mask] ==\n             data[(*wrapped_last_processed_pos - cmd_dist) & mask]) {\n        last_command->copy_len_++;\n        (*bytes)--;\n        (*wrapped_last_processed_pos)++;\n      }\n    } else {\n      if ((cmd_dist - max_distance - 1) < compound_dictionary_size &&\n          last_copy_len < cmd_dist - max_distance) {\n        size_t address =\n            compound_dictionary_size - (size_t)(cmd_dist - max_distance) +\n            (size_t)last_copy_len;\n        size_t br_index = 0;\n        size_t br_offset;\n        const uint8_t* chunk;\n        size_t chunk_length;\n        while (address >= dict->chunk_offsets[br_index + 1]) br_index++;\n        br_offset = address - dict->chunk_offsets[br_index];\n        chunk = dict->chunk_source[br_index];\n        chunk_length =\n            dict->chunk_offsets[br_index + 1] - dict->chunk_offsets[br_index];\n        while (*bytes != 0 && data[*wrapped_last_processed_pos & mask] ==\n               chunk[br_offset]) {\n          last_command->copy_len_++;\n          (*bytes)--;\n          (*wrapped_last_processed_pos)++;\n          if (++br_offset == chunk_length) {\n            br_index++;\n            br_offset = 0;\n            if (br_index != dict->num_chunks) {\n              chunk = dict->chunk_source[br_index];\n              chunk_length = dict->chunk_offsets[br_index + 1] -\n                  dict->chunk_offsets[br_index];\n            } else {\n              break;\n            }\n          }\n        }\n      }\n    }\n    /* The copy length is at most the metablock size, and thus expressible. */\n    GetLengthCode(last_command->insert_len_,\n                  (size_t)((int)(last_command->copy_len_ & 0x1FFFFFF) +\n                           (int)(last_command->copy_len_ >> 25)),\n                  TO_BROTLI_BOOL((last_command->dist_prefix_ & 0x3FF) == 0),\n                  &last_command->cmd_prefix_);\n  }\n}\n\n/*\n   Processes the accumulated input data and sets |*out_size| to the length of\n   the new output meta-block, or to zero if no new output meta-block has been\n   created (in this case the processed input data is buffered internally).\n   If |*out_size| is positive, |*output| points to the start of the output\n   data. If |is_last| or |force_flush| is BROTLI_TRUE, an output meta-block is\n   always created. However, until |is_last| is BROTLI_TRUE encoder may retain up\n   to 7 bits of the last byte of output. Byte-alignment could be enforced by\n   emitting an empty meta-data block.\n   Returns BROTLI_FALSE if the size of the input data is larger than\n   input_block_size().\n */\nstatic BROTLI_BOOL EncodeData(\n    BrotliEncoderState* s, const BROTLI_BOOL is_last,\n    const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output) {\n  const uint64_t delta = UnprocessedInputSize(s);\n  uint32_t bytes = (uint32_t)delta;\n  uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);\n  uint8_t* data;\n  uint32_t mask;\n  MemoryManager* m = &s->memory_manager_;\n  ContextType literal_context_mode;\n  ContextLut literal_context_lut;\n  BROTLI_BOOL fast_compress =\n      s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||\n      s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY;\n\n  data = s->ringbuffer_.buffer_;\n  mask = s->ringbuffer_.mask_;\n\n  if (delta == 0) {  /* No new input; still might want to flush or finish. */\n    if (!data) {  /* No input has been processed so far. */\n      if (is_last) {  /* Emit complete finalized stream. */\n        BROTLI_DCHECK(s->last_bytes_bits_ <= 14);\n        s->last_bytes_ |= (uint16_t)(3u << s->last_bytes_bits_);\n        s->last_bytes_bits_ = (uint8_t)(s->last_bytes_bits_ + 2u);\n        s->tiny_buf_.u8[0] = (uint8_t)s->last_bytes_;\n        s->tiny_buf_.u8[1] = (uint8_t)(s->last_bytes_ >> 8);\n        *output = s->tiny_buf_.u8;\n        *out_size = (s->last_bytes_bits_ + 7u) >> 3u;\n        return BROTLI_TRUE;\n      } else {  /* No data, not last -> no-op. */\n        *out_size = 0;\n        return BROTLI_TRUE;\n      }\n    } else {\n      /* Fast compress performs flush every block -> flush is no-op. */\n      if (!is_last && (!force_flush || fast_compress)) {  /* Another no-op. */\n        *out_size = 0;\n        return BROTLI_TRUE;\n      }\n    }\n  }\n  BROTLI_DCHECK(data);\n\n  if (s->params.quality > s->params.dictionary.max_quality) return BROTLI_FALSE;\n  /* Adding more blocks after \"last\" block is forbidden. */\n  if (s->is_last_block_emitted_) return BROTLI_FALSE;\n  if (is_last) s->is_last_block_emitted_ = BROTLI_TRUE;\n\n  if (delta > InputBlockSize(s)) {\n    return BROTLI_FALSE;\n  }\n  if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY &&\n      !s->command_buf_) {\n    s->command_buf_ =\n        BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);\n    s->literal_buf_ =\n        BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->command_buf_) ||\n        BROTLI_IS_NULL(s->literal_buf_)) {\n      return BROTLI_FALSE;\n    }\n  }\n\n  if (fast_compress) {\n    uint8_t* storage;\n    size_t storage_ix = s->last_bytes_bits_;\n    size_t table_size;\n    int* table;\n\n    storage = GetBrotliStorage(s, 2 * bytes + 503);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    storage[0] = (uint8_t)s->last_bytes_;\n    storage[1] = (uint8_t)(s->last_bytes_ >> 8);\n    table = GetHashTable(s, s->params.quality, bytes, &table_size);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {\n      BrotliCompressFragmentFast(\n          s->one_pass_arena_, &data[wrapped_last_processed_pos & mask],\n          bytes, is_last,\n          table, table_size,\n          &storage_ix, storage);\n      if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    } else {\n      BrotliCompressFragmentTwoPass(\n          s->two_pass_arena_, &data[wrapped_last_processed_pos & mask],\n          bytes, is_last,\n          s->command_buf_, s->literal_buf_,\n          table, table_size,\n          &storage_ix, storage);\n      if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    }\n    s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);\n    s->last_bytes_bits_ = storage_ix & 7u;\n    UpdateLastProcessedPos(s);\n    *output = &storage[0];\n    *out_size = storage_ix >> 3;\n    return BROTLI_TRUE;\n  }\n\n  {\n    /* Theoretical max number of commands is 1 per 2 bytes. */\n    size_t newsize = s->num_commands_ + bytes / 2 + 1;\n    if (newsize > s->cmd_alloc_size_) {\n      Command* new_commands;\n      /* Reserve a bit more memory to allow merging with a next block\n         without reallocation: that would impact speed. */\n      newsize += (bytes / 4) + 16;\n      s->cmd_alloc_size_ = newsize;\n      new_commands = BROTLI_ALLOC(m, Command, newsize);\n      if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_commands)) return BROTLI_FALSE;\n      if (s->commands_) {\n        memcpy(new_commands, s->commands_, sizeof(Command) * s->num_commands_);\n        BROTLI_FREE(m, s->commands_);\n      }\n      s->commands_ = new_commands;\n    }\n  }\n\n  InitOrStitchToPreviousBlock(m, &s->hasher_, data, mask, &s->params,\n      wrapped_last_processed_pos, bytes, is_last);\n\n  literal_context_mode = ChooseContextMode(\n      &s->params, data, WrapPosition(s->last_flush_pos_),\n      mask, (size_t)(s->input_pos_ - s->last_flush_pos_));\n  literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);\n\n  if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n\n  if (s->num_commands_ && s->last_insert_len_ == 0) {\n    ExtendLastCommand(s, &bytes, &wrapped_last_processed_pos);\n  }\n\n  if (s->params.quality == ZOPFLIFICATION_QUALITY) {\n    BROTLI_DCHECK(s->params.hasher.type == 10);\n    BrotliCreateZopfliBackwardReferences(m, bytes, wrapped_last_processed_pos,\n        data, mask, literal_context_lut, &s->params,\n        &s->hasher_, s->dist_cache_,\n        &s->last_insert_len_, &s->commands_[s->num_commands_],\n        &s->num_commands_, &s->num_literals_);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  } else if (s->params.quality == HQ_ZOPFLIFICATION_QUALITY) {\n    BROTLI_DCHECK(s->params.hasher.type == 10);\n    BrotliCreateHqZopfliBackwardReferences(m, bytes, wrapped_last_processed_pos,\n        data, mask, literal_context_lut, &s->params,\n        &s->hasher_, s->dist_cache_,\n        &s->last_insert_len_, &s->commands_[s->num_commands_],\n        &s->num_commands_, &s->num_literals_);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  } else {\n    BrotliCreateBackwardReferences(bytes, wrapped_last_processed_pos,\n        data, mask, literal_context_lut, &s->params,\n        &s->hasher_, s->dist_cache_,\n        &s->last_insert_len_, &s->commands_[s->num_commands_],\n        &s->num_commands_, &s->num_literals_);\n  }\n\n  {\n    const size_t max_length = MaxMetablockSize(&s->params);\n    const size_t max_literals = max_length / 8;\n    const size_t max_commands = max_length / 8;\n    const size_t processed_bytes = (size_t)(s->input_pos_ - s->last_flush_pos_);\n    /* If maximal possible additional block doesn't fit metablock, flush now. */\n    /* TODO(eustas): Postpone decision until next block arrives? */\n    const BROTLI_BOOL next_input_fits_metablock = TO_BROTLI_BOOL(\n        processed_bytes + InputBlockSize(s) <= max_length);\n    /* If block splitting is not used, then flush as soon as there is some\n       amount of commands / literals produced. */\n    const BROTLI_BOOL should_flush = TO_BROTLI_BOOL(\n        s->params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT &&\n        s->num_literals_ + s->num_commands_ >= MAX_NUM_DELAYED_SYMBOLS);\n    if (!is_last && !force_flush && !should_flush &&\n        next_input_fits_metablock &&\n        s->num_literals_ < max_literals &&\n        s->num_commands_ < max_commands) {\n      /* Merge with next input block. Everything will happen later. */\n      if (UpdateLastProcessedPos(s)) {\n        HasherReset(&s->hasher_);\n      }\n      *out_size = 0;\n      return BROTLI_TRUE;\n    }\n  }\n\n  /* Create the last insert-only command. */\n  if (s->last_insert_len_ > 0) {\n    InitInsertCommand(&s->commands_[s->num_commands_++], s->last_insert_len_);\n    s->num_literals_ += s->last_insert_len_;\n    s->last_insert_len_ = 0;\n  }\n\n  if (!is_last && s->input_pos_ == s->last_flush_pos_) {\n    /* We have no new input data and we don't have to finish the stream, so\n       nothing to do. */\n    *out_size = 0;\n    return BROTLI_TRUE;\n  }\n  BROTLI_DCHECK(s->input_pos_ >= s->last_flush_pos_);\n  BROTLI_DCHECK(s->input_pos_ > s->last_flush_pos_ || is_last);\n  BROTLI_DCHECK(s->input_pos_ - s->last_flush_pos_ <= 1u << 24);\n  {\n    const uint32_t metablock_size =\n        (uint32_t)(s->input_pos_ - s->last_flush_pos_);\n    uint8_t* storage = GetBrotliStorage(s, 2 * metablock_size + 503);\n    size_t storage_ix = s->last_bytes_bits_;\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    storage[0] = (uint8_t)s->last_bytes_;\n    storage[1] = (uint8_t)(s->last_bytes_ >> 8);\n    WriteMetaBlockInternal(\n        m, data, mask, s->last_flush_pos_, metablock_size, is_last,\n        literal_context_mode, &s->params, s->prev_byte_, s->prev_byte2_,\n        s->num_literals_, s->num_commands_, s->commands_, s->saved_dist_cache_,\n        s->dist_cache_, &storage_ix, storage);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);\n    s->last_bytes_bits_ = storage_ix & 7u;\n    s->last_flush_pos_ = s->input_pos_;\n    if (UpdateLastProcessedPos(s)) {\n      HasherReset(&s->hasher_);\n    }\n    if (s->last_flush_pos_ > 0) {\n      s->prev_byte_ = data[((uint32_t)s->last_flush_pos_ - 1) & mask];\n    }\n    if (s->last_flush_pos_ > 1) {\n      s->prev_byte2_ = data[(uint32_t)(s->last_flush_pos_ - 2) & mask];\n    }\n    s->num_commands_ = 0;\n    s->num_literals_ = 0;\n    /* Save the state of the distance cache in case we need to restore it for\n       emitting an uncompressed block. */\n    memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));\n    *output = &storage[0];\n    *out_size = storage_ix >> 3;\n    return BROTLI_TRUE;\n  }\n}\n\n/* Dumps remaining output bits and metadata header to |header|.\n   Returns number of produced bytes.\n   REQUIRED: |header| should be 8-byte aligned and at least 16 bytes long.\n   REQUIRED: |block_size| <= (1 << 24). */\nstatic size_t WriteMetadataHeader(\n    BrotliEncoderState* s, const size_t block_size, uint8_t* header) {\n  size_t storage_ix;\n  storage_ix = s->last_bytes_bits_;\n  header[0] = (uint8_t)s->last_bytes_;\n  header[1] = (uint8_t)(s->last_bytes_ >> 8);\n  s->last_bytes_ = 0;\n  s->last_bytes_bits_ = 0;\n\n  BrotliWriteBits(1, 0, &storage_ix, header);\n  BrotliWriteBits(2, 3, &storage_ix, header);\n  BrotliWriteBits(1, 0, &storage_ix, header);\n  if (block_size == 0) {\n    BrotliWriteBits(2, 0, &storage_ix, header);\n  } else {\n    uint32_t nbits = (block_size == 1) ? 1 :\n        (Log2FloorNonZero((uint32_t)block_size - 1) + 1);\n    uint32_t nbytes = (nbits + 7) / 8;\n    BrotliWriteBits(2, nbytes, &storage_ix, header);\n    BrotliWriteBits(8 * nbytes, block_size - 1, &storage_ix, header);\n  }\n  return (storage_ix + 7u) >> 3;\n}\n\nsize_t BrotliEncoderMaxCompressedSize(size_t input_size) {\n  /* [window bits / empty metadata] + N * [uncompressed] + [last empty] */\n  size_t num_large_blocks = input_size >> 14;\n  size_t overhead = 2 + (4 * num_large_blocks) + 3 + 1;\n  size_t result = input_size + overhead;\n  if (input_size == 0) return 2;\n  return (result < input_size) ? 0 : result;\n}\n\n/* Wraps data to uncompressed brotli stream with minimal window size.\n   |output| should point at region with at least BrotliEncoderMaxCompressedSize\n   addressable bytes.\n   Returns the length of stream. */\nstatic size_t MakeUncompressedStream(\n    const uint8_t* input, size_t input_size, uint8_t* output) {\n  size_t size = input_size;\n  size_t result = 0;\n  size_t offset = 0;\n  if (input_size == 0) {\n    output[0] = 6;\n    return 1;\n  }\n  output[result++] = 0x21;  /* window bits = 10, is_last = false */\n  output[result++] = 0x03;  /* empty metadata, padding */\n  while (size > 0) {\n    uint32_t nibbles = 0;\n    uint32_t chunk_size;\n    uint32_t bits;\n    chunk_size = (size > (1u << 24)) ? (1u << 24) : (uint32_t)size;\n    if (chunk_size > (1u << 16)) nibbles = (chunk_size > (1u << 20)) ? 2 : 1;\n    bits =\n        (nibbles << 1) | ((chunk_size - 1) << 3) | (1u << (19 + 4 * nibbles));\n    output[result++] = (uint8_t)bits;\n    output[result++] = (uint8_t)(bits >> 8);\n    output[result++] = (uint8_t)(bits >> 16);\n    if (nibbles == 2) output[result++] = (uint8_t)(bits >> 24);\n    memcpy(&output[result], &input[offset], chunk_size);\n    result += chunk_size;\n    offset += chunk_size;\n    size -= chunk_size;\n  }\n  output[result++] = 3;\n  return result;\n}\n\nBROTLI_BOOL BrotliEncoderCompress(\n    int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,\n    const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)],\n    size_t* encoded_size,\n    uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]) {\n  BrotliEncoderState* s;\n  size_t out_size = *encoded_size;\n  const uint8_t* input_start = input_buffer;\n  uint8_t* output_start = encoded_buffer;\n  size_t max_out_size = BrotliEncoderMaxCompressedSize(input_size);\n  if (out_size == 0) {\n    /* Output buffer needs at least one byte. */\n    return BROTLI_FALSE;\n  }\n  if (input_size == 0) {\n    /* Handle the special case of empty input. */\n    *encoded_size = 1;\n    *encoded_buffer = 6;\n    return BROTLI_TRUE;\n  }\n\n  s = BrotliEncoderCreateInstance(0, 0, 0);\n  if (!s) {\n    return BROTLI_FALSE;\n  } else {\n    size_t available_in = input_size;\n    const uint8_t* next_in = input_buffer;\n    size_t available_out = *encoded_size;\n    uint8_t* next_out = encoded_buffer;\n    size_t total_out = 0;\n    BROTLI_BOOL result = BROTLI_FALSE;\n    /* TODO(eustas): check that parameters are sane. */\n    BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY, (uint32_t)quality);\n    BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, (uint32_t)lgwin);\n    BrotliEncoderSetParameter(s, BROTLI_PARAM_MODE, (uint32_t)mode);\n    BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, (uint32_t)input_size);\n    if (lgwin > BROTLI_MAX_WINDOW_BITS) {\n      BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, BROTLI_TRUE);\n    }\n    result = BrotliEncoderCompressStream(s, BROTLI_OPERATION_FINISH,\n        &available_in, &next_in, &available_out, &next_out, &total_out);\n    if (!BrotliEncoderIsFinished(s)) result = 0;\n    *encoded_size = total_out;\n    BrotliEncoderDestroyInstance(s);\n    if (!result || (max_out_size && *encoded_size > max_out_size)) {\n      goto fallback;\n    }\n    return BROTLI_TRUE;\n  }\nfallback:\n  *encoded_size = 0;\n  if (!max_out_size) return BROTLI_FALSE;\n  if (out_size >= max_out_size) {\n    *encoded_size =\n        MakeUncompressedStream(input_start, input_size, output_start);\n    return BROTLI_TRUE;\n  }\n  return BROTLI_FALSE;\n}\n\nstatic void InjectBytePaddingBlock(BrotliEncoderState* s) {\n  uint32_t seal = s->last_bytes_;\n  size_t seal_bits = s->last_bytes_bits_;\n  uint8_t* destination;\n  s->last_bytes_ = 0;\n  s->last_bytes_bits_ = 0;\n  /* is_last = 0, data_nibbles = 11, reserved = 0, meta_nibbles = 00 */\n  seal |= 0x6u << seal_bits;\n  seal_bits += 6;\n  /* If we have already created storage, then append to it.\n     Storage is valid until next block is being compressed. */\n  if (s->next_out_) {\n    destination = s->next_out_ + s->available_out_;\n  } else {\n    destination = s->tiny_buf_.u8;\n    s->next_out_ = destination;\n  }\n  destination[0] = (uint8_t)seal;\n  if (seal_bits > 8) destination[1] = (uint8_t)(seal >> 8);\n  if (seal_bits > 16) destination[2] = (uint8_t)(seal >> 16);\n  s->available_out_ += (seal_bits + 7) >> 3;\n}\n\n/* Fills the |total_out|, if it is not NULL. */\nstatic void SetTotalOut(BrotliEncoderState* s, size_t* total_out) {\n  if (total_out) {\n    /* Saturating conversion uint64_t -> size_t */\n    size_t result = (size_t)-1;\n    if (s->total_out_ < result) {\n      result = (size_t)s->total_out_;\n    }\n    *total_out = result;\n  }\n}\n\n/* Injects padding bits or pushes compressed data to output.\n   Returns false if nothing is done. */\nstatic BROTLI_BOOL InjectFlushOrPushOutput(BrotliEncoderState* s,\n    size_t* available_out, uint8_t** next_out, size_t* total_out) {\n  if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&\n      s->last_bytes_bits_ != 0) {\n    InjectBytePaddingBlock(s);\n    return BROTLI_TRUE;\n  }\n\n  if (s->available_out_ != 0 && *available_out != 0) {\n    size_t copy_output_size =\n        BROTLI_MIN(size_t, s->available_out_, *available_out);\n    memcpy(*next_out, s->next_out_, copy_output_size);\n    *next_out += copy_output_size;\n    *available_out -= copy_output_size;\n    s->next_out_ += copy_output_size;\n    s->available_out_ -= copy_output_size;\n    s->total_out_ += copy_output_size;\n    SetTotalOut(s, total_out);\n    return BROTLI_TRUE;\n  }\n\n  return BROTLI_FALSE;\n}\n\nstatic void CheckFlushComplete(BrotliEncoderState* s) {\n  if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&\n      s->available_out_ == 0) {\n    s->stream_state_ = BROTLI_STREAM_PROCESSING;\n    s->next_out_ = 0;\n  }\n}\n\nstatic BROTLI_BOOL BrotliEncoderCompressStreamFast(\n    BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,\n    const uint8_t** next_in, size_t* available_out, uint8_t** next_out,\n    size_t* total_out) {\n  const size_t block_size_limit = (size_t)1 << s->params.lgwin;\n  const size_t buf_size = BROTLI_MIN(size_t, kCompressFragmentTwoPassBlockSize,\n      BROTLI_MIN(size_t, *available_in, block_size_limit));\n  uint32_t* tmp_command_buf = NULL;\n  uint32_t* command_buf = NULL;\n  uint8_t* tmp_literal_buf = NULL;\n  uint8_t* literal_buf = NULL;\n  MemoryManager* m = &s->memory_manager_;\n  if (s->params.quality != FAST_ONE_PASS_COMPRESSION_QUALITY &&\n      s->params.quality != FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    return BROTLI_FALSE;\n  }\n  if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    if (!s->command_buf_ && buf_size == kCompressFragmentTwoPassBlockSize) {\n      s->command_buf_ =\n          BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);\n      s->literal_buf_ =\n          BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);\n      if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->command_buf_) ||\n          BROTLI_IS_NULL(s->literal_buf_)) {\n        return BROTLI_FALSE;\n      }\n    }\n    if (s->command_buf_) {\n      command_buf = s->command_buf_;\n      literal_buf = s->literal_buf_;\n    } else {\n      tmp_command_buf = BROTLI_ALLOC(m, uint32_t, buf_size);\n      tmp_literal_buf = BROTLI_ALLOC(m, uint8_t, buf_size);\n      if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tmp_command_buf) ||\n          BROTLI_IS_NULL(tmp_literal_buf)) {\n        return BROTLI_FALSE;\n      }\n      command_buf = tmp_command_buf;\n      literal_buf = tmp_literal_buf;\n    }\n  }\n\n  while (BROTLI_TRUE) {\n    if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {\n      continue;\n    }\n\n    /* Compress block only when internal output buffer is empty, stream is not\n       finished, there is no pending flush request, and there is either\n       additional input or pending operation. */\n    if (s->available_out_ == 0 &&\n        s->stream_state_ == BROTLI_STREAM_PROCESSING &&\n        (*available_in != 0 || op != BROTLI_OPERATION_PROCESS)) {\n      size_t block_size = BROTLI_MIN(size_t, block_size_limit, *available_in);\n      BROTLI_BOOL is_last =\n          (*available_in == block_size) && (op == BROTLI_OPERATION_FINISH);\n      BROTLI_BOOL force_flush =\n          (*available_in == block_size) && (op == BROTLI_OPERATION_FLUSH);\n      size_t max_out_size = 2 * block_size + 503;\n      BROTLI_BOOL inplace = BROTLI_TRUE;\n      uint8_t* storage = NULL;\n      size_t storage_ix = s->last_bytes_bits_;\n      size_t table_size;\n      int* table;\n\n      if (force_flush && block_size == 0) {\n        s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;\n        continue;\n      }\n      if (max_out_size <= *available_out) {\n        storage = *next_out;\n      } else {\n        inplace = BROTLI_FALSE;\n        storage = GetBrotliStorage(s, max_out_size);\n        if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n      }\n      storage[0] = (uint8_t)s->last_bytes_;\n      storage[1] = (uint8_t)(s->last_bytes_ >> 8);\n      table = GetHashTable(s, s->params.quality, block_size, &table_size);\n      if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n\n      if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {\n        BrotliCompressFragmentFast(s->one_pass_arena_, *next_in, block_size,\n            is_last, table, table_size, &storage_ix, storage);\n        if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n      } else {\n        BrotliCompressFragmentTwoPass(s->two_pass_arena_, *next_in, block_size,\n            is_last, command_buf, literal_buf, table, table_size,\n            &storage_ix, storage);\n        if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n      }\n      if (block_size != 0) {\n        *next_in += block_size;\n        *available_in -= block_size;\n        s->total_in_ += block_size;\n      }\n      if (inplace) {\n        size_t out_bytes = storage_ix >> 3;\n        BROTLI_DCHECK(out_bytes <= *available_out);\n        BROTLI_DCHECK((storage_ix & 7) == 0 || out_bytes < *available_out);\n        *next_out += out_bytes;\n        *available_out -= out_bytes;\n        s->total_out_ += out_bytes;\n        SetTotalOut(s, total_out);\n      } else {\n        size_t out_bytes = storage_ix >> 3;\n        s->next_out_ = storage;\n        s->available_out_ = out_bytes;\n      }\n      s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);\n      s->last_bytes_bits_ = storage_ix & 7u;\n\n      if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;\n      if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;\n      continue;\n    }\n    break;\n  }\n  BROTLI_FREE(m, tmp_command_buf);\n  BROTLI_FREE(m, tmp_literal_buf);\n  CheckFlushComplete(s);\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_BOOL ProcessMetadata(\n    BrotliEncoderState* s, size_t* available_in, const uint8_t** next_in,\n    size_t* available_out, uint8_t** next_out, size_t* total_out) {\n  if (*available_in > (1u << 24)) return BROTLI_FALSE;\n  /* Switch to metadata block workflow, if required. */\n  if (s->stream_state_ == BROTLI_STREAM_PROCESSING) {\n    s->remaining_metadata_bytes_ = (uint32_t)*available_in;\n    s->stream_state_ = BROTLI_STREAM_METADATA_HEAD;\n  }\n  if (s->stream_state_ != BROTLI_STREAM_METADATA_HEAD &&\n      s->stream_state_ != BROTLI_STREAM_METADATA_BODY) {\n    return BROTLI_FALSE;\n  }\n\n  while (BROTLI_TRUE) {\n    if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {\n      continue;\n    }\n    if (s->available_out_ != 0) break;\n\n    if (s->input_pos_ != s->last_flush_pos_) {\n      BROTLI_BOOL result = EncodeData(s, BROTLI_FALSE, BROTLI_TRUE,\n          &s->available_out_, &s->next_out_);\n      if (!result) return BROTLI_FALSE;\n      continue;\n    }\n\n    if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD) {\n      s->next_out_ = s->tiny_buf_.u8;\n      s->available_out_ =\n          WriteMetadataHeader(s, s->remaining_metadata_bytes_, s->next_out_);\n      s->stream_state_ = BROTLI_STREAM_METADATA_BODY;\n      continue;\n    } else {\n      /* Exit workflow only when there is no more input and no more output.\n         Otherwise client may continue producing empty metadata blocks. */\n      if (s->remaining_metadata_bytes_ == 0) {\n        s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;\n        s->stream_state_ = BROTLI_STREAM_PROCESSING;\n        break;\n      }\n      if (*available_out) {\n        /* Directly copy input to output. */\n        uint32_t copy = (uint32_t)BROTLI_MIN(\n            size_t, s->remaining_metadata_bytes_, *available_out);\n        memcpy(*next_out, *next_in, copy);\n        *next_in += copy;\n        *available_in -= copy;\n        s->total_in_ += copy;  /* not actually data input, though */\n        s->remaining_metadata_bytes_ -= copy;\n        *next_out += copy;\n        *available_out -= copy;\n      } else {\n        /* This guarantees progress in \"TakeOutput\" workflow. */\n        uint32_t copy = BROTLI_MIN(uint32_t, s->remaining_metadata_bytes_, 16);\n        s->next_out_ = s->tiny_buf_.u8;\n        memcpy(s->next_out_, *next_in, copy);\n        *next_in += copy;\n        *available_in -= copy;\n        s->total_in_ += copy;  /* not actually data input, though */\n        s->remaining_metadata_bytes_ -= copy;\n        s->available_out_ = copy;\n      }\n      continue;\n    }\n  }\n\n  return BROTLI_TRUE;\n}\n\nstatic void UpdateSizeHint(BrotliEncoderState* s, size_t available_in) {\n  if (s->params.size_hint == 0) {\n    uint64_t delta = UnprocessedInputSize(s);\n    uint64_t tail = available_in;\n    uint32_t limit = 1u << 30;\n    uint32_t total;\n    if ((delta >= limit) || (tail >= limit) || ((delta + tail) >= limit)) {\n      total = limit;\n    } else {\n      total = (uint32_t)(delta + tail);\n    }\n    s->params.size_hint = total;\n  }\n}\n\nBROTLI_BOOL BrotliEncoderCompressStream(\n    BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,\n    const uint8_t** next_in, size_t* available_out, uint8_t** next_out,\n    size_t* total_out) {\n  if (!EnsureInitialized(s)) return BROTLI_FALSE;\n\n  /* Unfinished metadata block; check requirements. */\n  if (s->remaining_metadata_bytes_ != BROTLI_UINT32_MAX) {\n    if (*available_in != s->remaining_metadata_bytes_) return BROTLI_FALSE;\n    if (op != BROTLI_OPERATION_EMIT_METADATA) return BROTLI_FALSE;\n  }\n\n  if (op == BROTLI_OPERATION_EMIT_METADATA) {\n    UpdateSizeHint(s, 0);  /* First data metablock might be emitted here. */\n    return ProcessMetadata(\n        s, available_in, next_in, available_out, next_out, total_out);\n  }\n\n  if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD ||\n      s->stream_state_ == BROTLI_STREAM_METADATA_BODY) {\n    return BROTLI_FALSE;\n  }\n\n  if (s->stream_state_ != BROTLI_STREAM_PROCESSING && *available_in != 0) {\n    return BROTLI_FALSE;\n  }\n  if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||\n      s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    return BrotliEncoderCompressStreamFast(s, op, available_in, next_in,\n        available_out, next_out, total_out);\n  }\n  while (BROTLI_TRUE) {\n    size_t remaining_block_size = RemainingInputBlockSize(s);\n    /* Shorten input to flint size. */\n    if (s->flint_ >= 0 && remaining_block_size > (size_t)s->flint_) {\n      remaining_block_size = (size_t)s->flint_;\n    }\n\n    if (remaining_block_size != 0 && *available_in != 0) {\n      size_t copy_input_size =\n          BROTLI_MIN(size_t, remaining_block_size, *available_in);\n      CopyInputToRingBuffer(s, copy_input_size, *next_in);\n      *next_in += copy_input_size;\n      *available_in -= copy_input_size;\n      s->total_in_ += copy_input_size;\n      if (s->flint_ > 0) s->flint_ = (int8_t)(s->flint_ - (int)copy_input_size);\n      continue;\n    }\n\n    if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {\n      /* Exit the \"emit flint\" workflow. */\n      if (s->flint_ == BROTLI_FLINT_WAITING_FOR_FLUSHING) {\n        CheckFlushComplete(s);\n        if (s->stream_state_ == BROTLI_STREAM_PROCESSING) {\n          s->flint_ = BROTLI_FLINT_DONE;\n        }\n      }\n      continue;\n    }\n\n    /* Compress data only when internal output buffer is empty, stream is not\n       finished and there is no pending flush request. */\n    if (s->available_out_ == 0 &&\n        s->stream_state_ == BROTLI_STREAM_PROCESSING) {\n      if (remaining_block_size == 0 || op != BROTLI_OPERATION_PROCESS) {\n        BROTLI_BOOL is_last = TO_BROTLI_BOOL(\n            (*available_in == 0) && op == BROTLI_OPERATION_FINISH);\n        BROTLI_BOOL force_flush = TO_BROTLI_BOOL(\n            (*available_in == 0) && op == BROTLI_OPERATION_FLUSH);\n        BROTLI_BOOL result;\n        /* Force emitting (uncompressed) piece containing flint. */\n        if (!is_last && s->flint_ == 0) {\n          s->flint_ = BROTLI_FLINT_WAITING_FOR_FLUSHING;\n          force_flush = BROTLI_TRUE;\n        }\n        UpdateSizeHint(s, *available_in);\n        result = EncodeData(s, is_last, force_flush,\n            &s->available_out_, &s->next_out_);\n        if (!result) return BROTLI_FALSE;\n        if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;\n        if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;\n        continue;\n      }\n    }\n    break;\n  }\n  CheckFlushComplete(s);\n  return BROTLI_TRUE;\n}\n\nBROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* s) {\n  return TO_BROTLI_BOOL(s->stream_state_ == BROTLI_STREAM_FINISHED &&\n      !BrotliEncoderHasMoreOutput(s));\n}\n\nBROTLI_BOOL BrotliEncoderHasMoreOutput(BrotliEncoderState* s) {\n  return TO_BROTLI_BOOL(s->available_out_ != 0);\n}\n\nconst uint8_t* BrotliEncoderTakeOutput(BrotliEncoderState* s, size_t* size) {\n  size_t consumed_size = s->available_out_;\n  uint8_t* result = s->next_out_;\n  if (*size) {\n    consumed_size = BROTLI_MIN(size_t, *size, s->available_out_);\n  }\n  if (consumed_size) {\n    s->next_out_ += consumed_size;\n    s->available_out_ -= consumed_size;\n    s->total_out_ += consumed_size;\n    CheckFlushComplete(s);\n    *size = consumed_size;\n  } else {\n    *size = 0;\n    result = 0;\n  }\n  return result;\n}\n\nuint32_t BrotliEncoderVersion(void) {\n  return BROTLI_VERSION;\n}\n\nBrotliEncoderPreparedDictionary* BrotliEncoderPrepareDictionary(\n    BrotliSharedDictionaryType type, size_t size,\n    const uint8_t data[BROTLI_ARRAY_PARAM(size)], int quality,\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {\n  ManagedDictionary* managed_dictionary = NULL;\n  BROTLI_BOOL type_is_known = BROTLI_FALSE;\n  type_is_known |= (type == BROTLI_SHARED_DICTIONARY_RAW);\n#if defined(BROTLI_EXPERIMENTAL)\n  type_is_known |= (type == BROTLI_SHARED_DICTIONARY_SERIALIZED);\n#endif  /* BROTLI_EXPERIMENTAL */\n  if (!type_is_known) {\n    return NULL;\n  }\n  managed_dictionary =\n      BrotliCreateManagedDictionary(alloc_func, free_func, opaque);\n  if (managed_dictionary == NULL) {\n    return NULL;\n  }\n  if (type == BROTLI_SHARED_DICTIONARY_RAW) {\n    managed_dictionary->dictionary = (uint32_t*)CreatePreparedDictionary(\n        &managed_dictionary->memory_manager_, data, size);\n  }\n#if defined(BROTLI_EXPERIMENTAL)\n  if (type == BROTLI_SHARED_DICTIONARY_SERIALIZED) {\n    SharedEncoderDictionary* dict = (SharedEncoderDictionary*)BrotliAllocate(\n        &managed_dictionary->memory_manager_, sizeof(SharedEncoderDictionary));\n    managed_dictionary->dictionary = (uint32_t*)dict;\n    if (dict != NULL) {\n      BROTLI_BOOL ok = BrotliInitCustomSharedEncoderDictionary(\n          &managed_dictionary->memory_manager_, data, size, quality, dict);\n      if (!ok) {\n        BrotliFree(&managed_dictionary->memory_manager_, dict);\n        managed_dictionary->dictionary = NULL;\n      }\n    }\n  }\n#else  /* BROTLI_EXPERIMENTAL */\n  (void)quality;\n#endif  /* BROTLI_EXPERIMENTAL */\n  if (managed_dictionary->dictionary == NULL) {\n    BrotliDestroyManagedDictionary(managed_dictionary);\n    return NULL;\n  }\n  return (BrotliEncoderPreparedDictionary*)managed_dictionary;\n}\n\nvoid BROTLI_COLD BrotliEncoderDestroyPreparedDictionary(\n    BrotliEncoderPreparedDictionary* dictionary) {\n  ManagedDictionary* dict = (ManagedDictionary*)dictionary;\n  if (!dictionary) return;\n  /* First field of dictionary structs. */\n  /* Only managed dictionaries are eligible for destruction by this method. */\n  if (dict->magic != kManagedDictionaryMagic) {\n    return;\n  }\n  if (dict->dictionary == NULL) {\n    /* This should never ever happen. */\n  } else if (*dict->dictionary == kLeanPreparedDictionaryMagic) {\n    DestroyPreparedDictionary(\n        &dict->memory_manager_, (PreparedDictionary*)dict->dictionary);\n  } else if (*dict->dictionary == kSharedDictionaryMagic) {\n    BrotliCleanupSharedEncoderDictionary(&dict->memory_manager_,\n        (SharedEncoderDictionary*)dict->dictionary);\n    BrotliFree(&dict->memory_manager_, dict->dictionary);\n  } else {\n    /* There is also kPreparedDictionaryMagic, but such instances should be\n     * constructed and destroyed by different means. */\n  }\n  dict->dictionary = NULL;\n  BrotliDestroyManagedDictionary(dict);\n}\n\nBROTLI_BOOL BROTLI_COLD BrotliEncoderAttachPreparedDictionary(\n    BrotliEncoderState* state,\n    const BrotliEncoderPreparedDictionary* dictionary) {\n  /* First field of dictionary structs */\n  const BrotliEncoderPreparedDictionary* dict = dictionary;\n  uint32_t magic = *((const uint32_t*)dict);\n  SharedEncoderDictionary* current = NULL;\n  if (magic == kManagedDictionaryMagic) {\n    /* Unwrap managed dictionary. */\n    ManagedDictionary* managed_dictionary = (ManagedDictionary*)dict;\n    magic = *managed_dictionary->dictionary;\n    dict = (BrotliEncoderPreparedDictionary*)managed_dictionary->dictionary;\n  }\n  current = &state->params.dictionary;\n  if (magic == kPreparedDictionaryMagic ||\n      magic == kLeanPreparedDictionaryMagic) {\n    const PreparedDictionary* prepared = (const PreparedDictionary*)dict;\n    if (!AttachPreparedDictionary(&current->compound, prepared)) {\n      return BROTLI_FALSE;\n    }\n  } else if (magic == kSharedDictionaryMagic) {\n    const SharedEncoderDictionary* attached =\n        (const SharedEncoderDictionary*)dict;\n    BROTLI_BOOL was_default = !current->contextual.context_based &&\n        current->contextual.num_dictionaries == 1 &&\n        current->contextual.dict[0]->hash_table_words ==\n        kStaticDictionaryHashWords &&\n        current->contextual.dict[0]->hash_table_lengths ==\n        kStaticDictionaryHashLengths;\n    BROTLI_BOOL new_default = !attached->contextual.context_based &&\n        attached->contextual.num_dictionaries == 1 &&\n        attached->contextual.dict[0]->hash_table_words ==\n        kStaticDictionaryHashWords &&\n        attached->contextual.dict[0]->hash_table_lengths ==\n        kStaticDictionaryHashLengths;\n    size_t i;\n    if (state->is_initialized_) return BROTLI_FALSE;\n    current->max_quality =\n        BROTLI_MIN(int, current->max_quality, attached->max_quality);\n    for (i = 0; i < attached->compound.num_chunks; i++) {\n      if (!AttachPreparedDictionary(&current->compound,\n          attached->compound.chunks[i])) {\n        return BROTLI_FALSE;\n      }\n    }\n    if (!new_default) {\n      if (!was_default) return BROTLI_FALSE;\n      /* Copy by value, but then set num_instances_ to 0 because their memory\n      is managed by attached, not by current */\n      current->contextual = attached->contextual;\n      current->contextual.num_instances_ = 0;\n    }\n  } else {\n    return BROTLI_FALSE;\n  }\n  return BROTLI_TRUE;\n}\n\nsize_t BROTLI_COLD BrotliEncoderEstimatePeakMemoryUsage(int quality, int lgwin,\n                                                        size_t input_size) {\n  BrotliEncoderParams params;\n  size_t memory_manager_slots = BROTLI_ENCODER_MEMORY_MANAGER_SLOTS;\n  size_t memory_manager_size = memory_manager_slots * sizeof(void*);\n  BrotliEncoderInitParams(&params);\n  params.quality = quality;\n  params.lgwin = lgwin;\n  params.size_hint = input_size;\n  params.large_window = lgwin > BROTLI_MAX_WINDOW_BITS;\n  SanitizeParams(&params);\n  params.lgblock = ComputeLgBlock(&params);\n  ChooseHasher(&params, &params.hasher);\n  if (params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||\n      params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    size_t state_size = sizeof(BrotliEncoderState);\n    size_t block_size = BROTLI_MIN(size_t, input_size, ((size_t)1ul << params.lgwin));\n    size_t hash_table_size =\n        HashTableSize(MaxHashTableSize(params.quality), block_size);\n    size_t hash_size =\n        (hash_table_size < (1u << 10)) ? 0 : sizeof(int) * hash_table_size;\n    size_t cmdbuf_size = params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY ?\n        5 * BROTLI_MIN(size_t, block_size, 1ul << 17) : 0;\n    if (params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {\n      state_size += sizeof(BrotliOnePassArena);\n    } else {\n      state_size += sizeof(BrotliTwoPassArena);\n    }\n    return hash_size + cmdbuf_size + state_size;\n  } else {\n    size_t short_ringbuffer_size = (size_t)1 << params.lgblock;\n    int ringbuffer_bits = ComputeRbBits(&params);\n    size_t ringbuffer_size = input_size < short_ringbuffer_size ?\n        input_size : ((size_t)1u << ringbuffer_bits) + short_ringbuffer_size;\n    size_t hash_size[4] = {0};\n    size_t metablock_size =\n        BROTLI_MIN(size_t, input_size, MaxMetablockSize(&params));\n    size_t inputblock_size =\n        BROTLI_MIN(size_t, input_size, (size_t)1 << params.lgblock);\n    size_t cmdbuf_size = metablock_size * 2 + inputblock_size * 6;\n    size_t outbuf_size = metablock_size * 2 + 503;\n    size_t histogram_size = 0;\n    HasherSize(&params, BROTLI_TRUE, input_size, hash_size);\n    if (params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {\n      cmdbuf_size = BROTLI_MIN(size_t, cmdbuf_size,\n          MAX_NUM_DELAYED_SYMBOLS * sizeof(Command) + inputblock_size * 12);\n    }\n    if (params.quality >= MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) {\n      /* Only a very rough estimation, based on enwik8. */\n      histogram_size = 200 << 20;\n    } else if (params.quality >= MIN_QUALITY_FOR_BLOCK_SPLIT) {\n      size_t literal_histograms =\n          BROTLI_MIN(size_t, metablock_size / 6144, 256);\n      size_t command_histograms =\n          BROTLI_MIN(size_t, metablock_size / 6144, 256);\n      size_t distance_histograms =\n          BROTLI_MIN(size_t, metablock_size / 6144, 256);\n      histogram_size = literal_histograms * sizeof(HistogramLiteral) +\n                       command_histograms * sizeof(HistogramCommand) +\n                       distance_histograms * sizeof(HistogramDistance);\n    }\n    return (memory_manager_size + ringbuffer_size +\n            hash_size[0] + hash_size[1] + hash_size[2] + hash_size[3] +\n            cmdbuf_size +\n            outbuf_size +\n            histogram_size);\n  }\n}\nsize_t BROTLI_COLD BrotliEncoderGetPreparedDictionarySize(\n    const BrotliEncoderPreparedDictionary* prepared_dictionary) {\n  /* First field of dictionary structs */\n  const BrotliEncoderPreparedDictionary* prepared = prepared_dictionary;\n  uint32_t magic = *((const uint32_t*)prepared);\n  size_t overhead = 0;\n  if (magic == kManagedDictionaryMagic) {\n    const ManagedDictionary* managed = (const ManagedDictionary*)prepared;\n    overhead = sizeof(ManagedDictionary);\n    magic = *managed->dictionary;\n    prepared = (const BrotliEncoderPreparedDictionary*)managed->dictionary;\n  }\n\n  if (magic == kPreparedDictionaryMagic) {\n    const PreparedDictionary* dictionary =\n        (const PreparedDictionary*)prepared;\n    /* Keep in sync with step 3 of CreatePreparedDictionary */\n    return sizeof(PreparedDictionary) + dictionary->source_size +\n        (sizeof(uint32_t) << dictionary->slot_bits) +\n        (sizeof(uint16_t) << dictionary->bucket_bits) +\n        (sizeof(uint32_t) * dictionary->num_items) + overhead;\n  } else if (magic == kLeanPreparedDictionaryMagic) {\n    const PreparedDictionary* dictionary =\n        (const PreparedDictionary*)prepared;\n    /* Keep in sync with step 3 of CreatePreparedDictionary */\n    return sizeof(PreparedDictionary) + sizeof(uint8_t*) +\n        (sizeof(uint32_t) << dictionary->slot_bits) +\n        (sizeof(uint16_t) << dictionary->bucket_bits) +\n        (sizeof(uint32_t) * dictionary->num_items) + overhead;\n  } else if (magic == kSharedDictionaryMagic) {\n    const SharedEncoderDictionary* dictionary =\n        (const SharedEncoderDictionary*)prepared;\n    const CompoundDictionary* compound = &dictionary->compound;\n    const ContextualEncoderDictionary* contextual = &dictionary->contextual;\n    size_t result = sizeof(*dictionary);\n    size_t i;\n    size_t num_instances;\n    const BrotliEncoderDictionary* instances;\n    for (i = 0; i < compound->num_prepared_instances_; i++) {\n      size_t size = BrotliEncoderGetPreparedDictionarySize(\n          (const BrotliEncoderPreparedDictionary*)\n          compound->prepared_instances_[i]);\n      if (!size) return 0;  /* error */\n      result += size;\n    }\n    if (contextual->context_based) {\n      num_instances = contextual->num_instances_;\n      instances = contextual->instances_;\n      result += sizeof(*instances) * num_instances;\n    } else {\n      num_instances = 1;\n      instances = &contextual->instance_;\n    }\n    for (i = 0; i < num_instances; i++) {\n      const BrotliEncoderDictionary* dict = &instances[i];\n      result += dict->trie.pool_capacity * sizeof(BrotliTrieNode);\n      if (dict->hash_table_data_words_) {\n        result += sizeof(kStaticDictionaryHashWords);\n      }\n      if (dict->hash_table_data_lengths_) {\n        result += sizeof(kStaticDictionaryHashLengths);\n      }\n      if (dict->buckets_data_) {\n        result += sizeof(*dict->buckets_data_) * dict->buckets_alloc_size_;\n      }\n      if (dict->dict_words_data_) {\n        result += sizeof(*dict->dict_words) * dict->dict_words_alloc_size_;\n      }\n      if (dict->words_instance_) {\n        result += sizeof(*dict->words_instance_);\n        /* data_size not added here: it is never allocated by the\n           SharedEncoderDictionary, instead it always points to the file\n           already loaded in memory. So if the caller wants to include\n           this memory as well, add the size of the loaded dictionary\n           file to this. */\n      }\n    }\n    return result + overhead;\n  }\n  return 0;  /* error */\n}\n\n#if defined(BROTLI_TEST)\nsize_t BrotliMakeUncompressedStreamForTest(const uint8_t*, size_t, uint8_t*);\nsize_t BrotliMakeUncompressedStreamForTest(\n    const uint8_t* input, size_t input_size, uint8_t* output) {\n  return MakeUncompressedStream(input, input_size, output);\n}\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/encoder_dict.c",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"encoder_dict.h\"\n\n#include \"../common/dictionary.h\"\n#include \"../common/platform.h\"\n#include <brotli/shared_dictionary.h>\n#include \"../common/shared_dictionary_internal.h\"\n#include \"../common/transform.h\"\n#include <brotli/encode.h>\n#include \"compound_dictionary.h\"\n#include \"dictionary_hash.h\"\n#include \"hash_base.h\"\n#include \"hash.h\"\n#include \"memory.h\"\n#include \"quality.h\"\n#include \"static_dict_lut.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define NUM_HASH_BITS 15u\n#define NUM_HASH_BUCKETS (1u << NUM_HASH_BITS)\n\nstatic void BrotliTrieInit(BrotliTrie* trie) {\n  trie->pool_capacity = 0;\n  trie->pool_size = 0;\n  trie->pool = 0;\n\n  /* Set up the root node */\n  trie->root.single = 0;\n  trie->root.len_ = 0;\n  trie->root.idx_ = 0;\n  trie->root.sub = 0;\n}\n\nstatic void BrotliTrieFree(MemoryManager* m, BrotliTrie* trie) {\n  BrotliFree(m, trie->pool);\n}\n\n/* Initializes to RFC 7932 static dictionary / transforms. */\nstatic void InitEncoderDictionary(BrotliEncoderDictionary* dict) {\n  dict->words = BrotliGetDictionary();\n  dict->num_transforms = (uint32_t)BrotliGetTransforms()->num_transforms;\n\n  dict->hash_table_words = kStaticDictionaryHashWords;\n  dict->hash_table_lengths = kStaticDictionaryHashLengths;\n  dict->buckets = kStaticDictionaryBuckets;\n  dict->dict_words = kStaticDictionaryWords;\n\n  dict->cutoffTransformsCount = kCutoffTransformsCount;\n  dict->cutoffTransforms = kCutoffTransforms;\n\n  dict->parent = 0;\n\n  dict->hash_table_data_words_ = 0;\n  dict->hash_table_data_lengths_ = 0;\n  dict->buckets_alloc_size_ = 0;\n  dict->buckets_data_ = 0;\n  dict->dict_words_alloc_size_ = 0;\n  dict->dict_words_data_ = 0;\n  dict->words_instance_ = 0;\n  dict->has_words_heavy = BROTLI_FALSE;\n  BrotliTrieInit(&dict->trie);\n}\n\nstatic void BrotliDestroyEncoderDictionary(MemoryManager* m,\n    BrotliEncoderDictionary* dict) {\n  BrotliFree(m, dict->hash_table_data_words_);\n  BrotliFree(m, dict->hash_table_data_lengths_);\n  BrotliFree(m, dict->buckets_data_);\n  BrotliFree(m, dict->dict_words_data_);\n  BrotliFree(m, dict->words_instance_);\n  BrotliTrieFree(m, &dict->trie);\n}\n\n#if defined(BROTLI_EXPERIMENTAL)\n/* Word length must be at least 4 bytes */\nstatic uint32_t Hash(const uint8_t* data, int bits) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return h >> (32 - bits);\n}\n\n/* Theoretical max possible word size after transform */\n#define kTransformedBufferSize \\\n    (256 + 256 + SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH)\n\n/* To be safe buffer must have at least kTransformedBufferSize */\nstatic void TransformedDictionaryWord(uint32_t word_idx, int len, int transform,\n    const BrotliTransforms* transforms,\n    const BrotliEncoderDictionary* dict,\n    uint8_t* buffer, size_t* size) {\n  const uint8_t* dict_word = &dict->words->data[\n      dict->words->offsets_by_length[len] + (uint32_t)len * word_idx];\n  *size = (size_t)BrotliTransformDictionaryWord(buffer, dict_word, len,\n      transforms, transform);\n}\n\nstatic DictWord MakeDictWord(uint8_t len, uint8_t transform, uint16_t idx) {\n  DictWord result;\n  result.len = len;\n  result.transform = transform;\n  result.idx = idx;\n  return result;\n}\n\nstatic uint32_t BrotliTrieAlloc(MemoryManager* m, size_t num, BrotliTrie* trie,\n                                BrotliTrieNode** keep) {\n  uint32_t result;\n  uint32_t keep_index = 0;\n  if (keep && *keep != &trie->root) {\n    /* Optional node to keep, since address may change after re-allocating */\n    keep_index = (uint32_t)(*keep - trie->pool);\n  }\n  if (trie->pool_size == 0) {\n    /* Have a placeholder node in the front. We do not want the result to be 0,\n       it must be at least 1, 0 represents \"null pointer\" */\n    trie->pool_size = 1;\n  }\n  BROTLI_ENSURE_CAPACITY(m, BrotliTrieNode, trie->pool, trie->pool_capacity,\n                         trie->pool_size + num);\n  if (BROTLI_IS_OOM(m)) return 0;\n  /* Init the new nodes to empty */\n  memset(trie->pool + trie->pool_size, 0, sizeof(*trie->pool) * num);\n  result = (uint32_t)trie->pool_size;\n  trie->pool_size += num;\n  if (keep && *keep != &trie->root) {\n    *keep = trie->pool + keep_index;\n  }\n  return result;\n}\n\n/**\n * len and idx: payload for last node\n * word, size: the string\n * index: position in the string\n */\nstatic BROTLI_BOOL BrotliTrieNodeAdd(MemoryManager* m, uint8_t len,\n    uint32_t idx, const uint8_t* word, size_t size, int index,\n    BrotliTrieNode* node, BrotliTrie* trie) {\n  BrotliTrieNode* child = 0;\n  uint8_t c;\n  if ((size_t)index == size) {\n    if (!node->len_ || idx < node->idx_) {\n      node->len_ = len;\n      node->idx_ = idx;\n    }\n    return BROTLI_TRUE;\n  }\n  c = word[index];\n  if (node->single && c != node->c) {\n    BrotliTrieNode old = trie->pool[node->sub];\n    uint32_t new_nodes = BrotliTrieAlloc(m, 32, trie, &node);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    node->single = 0;\n    node->sub = new_nodes;\n    trie->pool[node->sub + (node->c >> 4)].sub = new_nodes + 16;\n    trie->pool[trie->pool[node->sub + (node->c >> 4)].sub + (node->c & 15)] =\n        old;\n  }\n  if (!node->sub) {\n    uint32_t new_node = BrotliTrieAlloc(m, 1, trie, &node);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    node->single = 1;\n    node->c = c;\n    node->sub = new_node;\n  }\n  if (node->single) {\n    child = &trie->pool[node->sub];\n  } else {\n    if (!trie->pool[node->sub + (c >> 4)].sub) {\n      uint32_t new_nodes = BrotliTrieAlloc(m, 16, trie, &node);\n      if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n      trie->pool[node->sub + (c >> 4)].sub = new_nodes;\n    }\n    child = &trie->pool[trie->pool[node->sub + (c >> 4)].sub + (c & 15)];\n  }\n  return BrotliTrieNodeAdd(m, len, idx, word, size, index + 1, child, trie);\n}\n\nstatic BROTLI_BOOL BrotliTrieAdd(MemoryManager* m, uint8_t len, uint32_t idx,\n                          const uint8_t* word, size_t size, BrotliTrie* trie) {\n  return BrotliTrieNodeAdd(m, len, idx, word, size, 0, &trie->root, trie);\n}\n\nconst BrotliTrieNode* BrotliTrieSub(const BrotliTrie* trie,\n                                    const BrotliTrieNode* node, uint8_t c) {\n  BrotliTrieNode* temp_node;\n  if (node->single) {\n    if (node->c == c) return &trie->pool[node->sub];\n    return 0;\n  }\n  if (!node->sub) return 0;\n  temp_node = &trie->pool[node->sub + (c >> 4)];\n  if (!temp_node->sub) return 0;\n  return &trie->pool[temp_node->sub + (c & 15)];\n}\n\nstatic const BrotliTrieNode* BrotliTrieFind(const BrotliTrie* trie,\n                                            const uint8_t* word, size_t size) {\n  const BrotliTrieNode* node = &trie->root;\n  size_t i;\n  for (i = 0; i < size; i++) {\n    node = BrotliTrieSub(trie, node, word[i]);\n    if (!node) return 0;\n  }\n  return node;\n}\n\nstatic BROTLI_BOOL BuildDictionaryLut(MemoryManager* m,\n    const BrotliTransforms* transforms,\n    BrotliEncoderDictionary* dict) {\n  uint32_t i;\n  DictWord* dict_words;\n  uint16_t* buckets;\n  DictWord** words_by_hash;\n  size_t* words_by_hash_size;\n  size_t* words_by_hash_capacity;\n  BrotliTrie dedup;\n  uint8_t word[kTransformedBufferSize];\n  size_t word_size;\n  size_t total = 0;\n  uint8_t l;\n  uint16_t idx;\n\n  BrotliTrieInit(&dedup);\n\n  words_by_hash = (DictWord**)BrotliAllocate(m,\n      sizeof(*words_by_hash) * NUM_HASH_BUCKETS);\n  words_by_hash_size = (size_t*)BrotliAllocate(m,\n      sizeof(*words_by_hash_size) * NUM_HASH_BUCKETS);\n  words_by_hash_capacity = (size_t*)BrotliAllocate(m,\n      sizeof(*words_by_hash_capacity) * NUM_HASH_BUCKETS);\n  if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  memset(words_by_hash, 0, sizeof(*words_by_hash) * NUM_HASH_BUCKETS);\n  memset(words_by_hash_size, 0, sizeof(*words_by_hash_size) * NUM_HASH_BUCKETS);\n  memset(words_by_hash_capacity, 0,\n         sizeof(*words_by_hash_capacity) * NUM_HASH_BUCKETS);\n\n  if (transforms->num_transforms > 0) {\n    for (l = SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH;\n        l <= SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH; ++l) {\n      uint16_t n = dict->words->size_bits_by_length[l] ?\n          (uint16_t)(1 << dict->words->size_bits_by_length[l]) : 0u;\n      for (idx = 0; idx < n; ++idx) {\n        uint32_t key;\n        /* First transform (usually identity) */\n        TransformedDictionaryWord(idx, l, 0, transforms, dict, word,\n                                  &word_size);\n        /* Cannot hash words smaller than 4 bytes */\n        if (word_size < 4) {\n          /* Break instead of continue, all next words of this length will have\n             same length after transform */\n          break;\n        }\n        if (!BrotliTrieAdd(m, 0, idx, word, word_size, &dedup)) {\n          return BROTLI_FALSE;\n        }\n        key = Hash(word, NUM_HASH_BITS);\n        BROTLI_ENSURE_CAPACITY_APPEND(m, DictWord, words_by_hash[key],\n            words_by_hash_capacity[key], words_by_hash_size[key],\n            MakeDictWord(l, 0, idx));\n        ++total;\n      }\n    }\n  }\n\n  /* These LUT transforms only supported if no custom transforms. This is\n     ok, we will use the heavy trie instead. */\n  if (transforms == BrotliGetTransforms()) {\n    for (l = SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH;\n        l <= SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH; ++l) {\n      uint16_t n = dict->words->size_bits_by_length[l] ?\n          (uint16_t)(1 << dict->words->size_bits_by_length[l]) : 0u;\n      for (idx = 0; idx < n; ++idx) {\n        int k;\n        BROTLI_BOOL is_ascii = BROTLI_TRUE;\n        size_t offset = dict->words->offsets_by_length[l] + (size_t)l * idx;\n        const uint8_t* data = &dict->words->data[offset];\n        for (k = 0; k < l; ++k) {\n          if (data[k] >= 128) is_ascii = BROTLI_FALSE;\n        }\n        if (data[0] < 128) {\n          int transform = 9;  /* {empty, uppercase first, empty} */\n          uint32_t ix = idx + (uint32_t)transform * n;\n          const BrotliTrieNode* it;\n          TransformedDictionaryWord(idx, l, transform, transforms,\n                                   dict, word, &word_size);\n          it = BrotliTrieFind(&dedup, word, word_size);\n          if (!it || it->idx_ > ix) {\n            uint32_t key = Hash(word, NUM_HASH_BITS);\n            if (!BrotliTrieAdd(m, 0, ix, word, word_size, &dedup)) {\n              return BROTLI_FALSE;\n            }\n            BROTLI_ENSURE_CAPACITY_APPEND(m, DictWord, words_by_hash[key],\n                words_by_hash_capacity[key], words_by_hash_size[key],\n                MakeDictWord(l, BROTLI_TRANSFORM_UPPERCASE_FIRST, idx));\n            ++total;\n          }\n        }\n        if (is_ascii) {\n          int transform = 44;  /* {empty, uppercase all, empty} */\n          uint32_t ix = idx + (uint32_t)transform * n;\n          const BrotliTrieNode* it;\n          TransformedDictionaryWord(idx, l, transform, transforms,\n                                    dict, word, &word_size);\n          it = BrotliTrieFind(&dedup, word, word_size);\n          if (!it || it->idx_ > ix) {\n            uint32_t key = Hash(word, NUM_HASH_BITS);\n            if (!BrotliTrieAdd(m, 0, ix, word, word_size, &dedup)) {\n              return BROTLI_FALSE;\n            }\n            BROTLI_ENSURE_CAPACITY_APPEND(m, DictWord, words_by_hash[key],\n                words_by_hash_capacity[key], words_by_hash_size[key],\n                MakeDictWord(l, BROTLI_TRANSFORM_UPPERCASE_ALL, idx));\n            ++total;\n          }\n        }\n      }\n    }\n  }\n\n  dict_words = (DictWord*)BrotliAllocate(m,\n      sizeof(*dict->dict_words) * (total + 1));\n  buckets = (uint16_t*)BrotliAllocate(m,\n      sizeof(*dict->buckets) * NUM_HASH_BUCKETS);\n  if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  dict->dict_words_alloc_size_ = total + 1;\n  dict->dict_words = dict->dict_words_data_ = dict_words;\n  dict->buckets_alloc_size_ = NUM_HASH_BUCKETS;\n  dict->buckets = dict->buckets_data_ = buckets;\n\n  /* Unused; makes offsets start from 1. */\n  dict_words[0] = MakeDictWord(0, 0, 0);\n  total = 1;\n  for (i = 0; i < NUM_HASH_BUCKETS; ++i) {\n    size_t num_words = words_by_hash_size[i];\n    if (num_words > 0) {\n      buckets[i] = (uint16_t)(total);\n      memcpy(&dict_words[total], &words_by_hash[i][0],\n          sizeof(dict_words[0]) * num_words);\n      total += num_words;\n      dict_words[total - 1].len |= 0x80;\n    } else {\n      buckets[i] = 0;\n    }\n  }\n\n  for (i = 0; i < NUM_HASH_BUCKETS; ++i) {\n    BrotliFree(m, words_by_hash[i]);\n  }\n  BrotliFree(m, words_by_hash);\n  BrotliFree(m, words_by_hash_size);\n  BrotliFree(m, words_by_hash_capacity);\n  BrotliTrieFree(m, &dedup);\n\n  return BROTLI_TRUE;\n}\n\nstatic void BuildDictionaryHashTable(uint16_t* hash_table_words,\n    uint8_t* hash_table_lengths, const BrotliDictionary* dict) {\n  int j, len;\n  /* The order of the loops is such that in case of collision, words with\n     shorter length are preferred, and in case of same length, words with\n     smaller index. There is only a single word per bucket. */\n  /* TODO(lode): consider adding optional user-supplied frequency_map to use\n     for preferred words instead, this can make the encoder better for\n     quality 9 and below without affecting the decoder */\n  memset(hash_table_words, 0, sizeof(kStaticDictionaryHashWords));\n  memset(hash_table_lengths, 0, sizeof(kStaticDictionaryHashLengths));\n  for (len = SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH;\n      len >= SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH; --len) {\n    const size_t num_words = dict->size_bits_by_length[len] ?\n        (1u << dict->size_bits_by_length[len]) : 0;\n    for (j = (int)num_words - 1; j >= 0; --j) {\n      size_t offset = dict->offsets_by_length[len] +\n          (size_t)len * (size_t)j;\n      const uint8_t* word = &dict->data[offset];\n      const uint32_t key = Hash(word, 14);\n      int idx = (int)(key << 1) + (len < 8 ? 1 : 0);\n      BROTLI_DCHECK(idx < (int)NUM_HASH_BUCKETS);\n      hash_table_words[idx] = (uint16_t)j;\n      hash_table_lengths[idx] = (uint8_t)len;\n    }\n  }\n}\n\nstatic BROTLI_BOOL GenerateWordsHeavy(MemoryManager* m,\n    const BrotliTransforms* transforms,\n    BrotliEncoderDictionary* dict) {\n  int i, j, l;\n  for (j = (int)transforms->num_transforms - 1; j >= 0 ; --j) {\n    for (l = 0; l < 32; l++) {\n      int num = (int)((1u << dict->words->size_bits_by_length[l]) & ~1u);\n      for (i = 0; i < num; i++) {\n        uint8_t transformed[kTransformedBufferSize];\n        size_t size;\n        TransformedDictionaryWord(\n            (uint32_t)i, l, j, transforms, dict, transformed, &size);\n        if (size < 4) continue;\n        if (!BrotliTrieAdd(m, (uint8_t)l, (uint32_t)(i + num * j),\n            transformed, size, &dict->trie)) {\n          return BROTLI_FALSE;\n        }\n      }\n    }\n  }\n  return BROTLI_TRUE;\n}\n\n/* Computes cutoffTransformsCount (in count) and cutoffTransforms (in data) for\n   the custom transforms, where possible within the limits of the\n   cutoffTransforms encoding. The fast encoder uses this to do fast lookup for\n   transforms that remove the N last characters (OmitLast). */\nstatic void ComputeCutoffTransforms(\n    const BrotliTransforms* transforms,\n    uint32_t* count, uint64_t* data) {\n  int i;\n  /* The encoding in a 64-bit integer of transform N in the data is: (N << 2) +\n     ((cutoffTransforms >> (N * 6)) & 0x3F), so for example the identity\n     transform code must be 0-63, for N=1 the transform code must be 4-67, ...,\n     for N=9 it must be 36-99.\n     TODO(lode): consider a simple flexible uint8_t[10] instead of the uint64_t\n     for the cutoff transforms, so that shared dictionaries can have the\n     OmitLast transforms anywhere without loss. */\n  *count = 0;\n  *data = 0;\n  for (i = 0; i < BROTLI_TRANSFORMS_MAX_CUT_OFF + 1; i++) {\n    int idx = transforms->cutOffTransforms[i];\n    if (idx == -1) break;  /* Not found */\n    if (idx < (i << 2)) break;  /* Too small for the encoding */\n    if (idx >= (i << 2) + 64) break;  /* Too large for the encoding */\n    (*count)++;\n    *data |= (uint64_t)(((uint64_t)idx -\n        ((uint64_t)i << 2u)) << ((uint64_t)i * 6u));\n  }\n}\n\nstatic BROTLI_BOOL ComputeDictionary(MemoryManager* m, int quality,\n    const BrotliTransforms* transforms,\n    BrotliEncoderDictionary* current) {\n  int default_words = current->words == BrotliGetDictionary();\n  int default_transforms = transforms == BrotliGetTransforms();\n\n  if (default_words && default_transforms) {\n    /* hashes are already set to Brotli defaults */\n    return BROTLI_TRUE;\n  }\n\n  current->hash_table_data_words_ = (uint16_t*)BrotliAllocate(\n      m, sizeof(kStaticDictionaryHashWords));\n  current->hash_table_data_lengths_ = (uint8_t*)BrotliAllocate(\n      m, sizeof(kStaticDictionaryHashLengths));\n  if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n  current->hash_table_words = current->hash_table_data_words_;\n  current->hash_table_lengths = current->hash_table_data_lengths_;\n\n  BuildDictionaryHashTable(current->hash_table_data_words_,\n      current->hash_table_data_lengths_, current->words);\n\n  ComputeCutoffTransforms(transforms,\n      &current->cutoffTransformsCount, &current->cutoffTransforms);\n\n  /* Only compute the data for slow encoder if the requested quality is high\n     enough to need it */\n  if (quality >= ZOPFLIFICATION_QUALITY) {\n    if (!BuildDictionaryLut(m, transforms, current)) return BROTLI_FALSE;\n\n    /* For the built-in Brotli transforms, there is a hard-coded function to\n       handle all transforms, but for custom transforms, we use the following\n       large hammer instead */\n    current->has_words_heavy = !default_transforms;\n    if (current->has_words_heavy) {\n      if (!GenerateWordsHeavy(m, transforms, current)) return BROTLI_FALSE;\n    }\n  }\n\n  return BROTLI_TRUE;\n}\n#endif  /* BROTLI_EXPERIMENTAL */\n\nvoid BrotliInitSharedEncoderDictionary(SharedEncoderDictionary* dict) {\n  dict->magic = kSharedDictionaryMagic;\n\n  dict->compound.num_chunks = 0;\n  dict->compound.total_size = 0;\n  dict->compound.chunk_offsets[0] = 0;\n  dict->compound.num_prepared_instances_ = 0;\n\n  dict->contextual.context_based = 0;\n  dict->contextual.num_dictionaries = 1;\n  dict->contextual.instances_ = 0;\n  dict->contextual.num_instances_ = 1;  /* The instance_ field */\n  dict->contextual.dict[0] = &dict->contextual.instance_;\n  InitEncoderDictionary(&dict->contextual.instance_);\n  dict->contextual.instance_.parent = &dict->contextual;\n\n  dict->max_quality = BROTLI_MAX_QUALITY;\n}\n\n#if defined(BROTLI_EXPERIMENTAL)\n/* TODO(eustas): make sure that tooling will warn user if not all the cutoff\n   transforms are available (for low-quality encoder). */\nstatic BROTLI_BOOL InitCustomSharedEncoderDictionary(\n    MemoryManager* m, const BrotliSharedDictionary* decoded_dict,\n    int quality, SharedEncoderDictionary* dict) {\n  ContextualEncoderDictionary* contextual;\n  CompoundDictionary* compound;\n  BrotliEncoderDictionary* instances;\n  int i;\n  BrotliInitSharedEncoderDictionary(dict);\n\n  contextual = &dict->contextual;\n  compound = &dict->compound;\n\n  for (i = 0; i < (int)decoded_dict->num_prefix; i++) {\n    PreparedDictionary* prepared = CreatePreparedDictionary(m,\n        decoded_dict->prefix[i], decoded_dict->prefix_size[i]);\n    AttachPreparedDictionary(compound, prepared);\n    /* remember for cleanup */\n    compound->prepared_instances_[\n        compound->num_prepared_instances_++] = prepared;\n  }\n\n  dict->max_quality = quality;\n  contextual->context_based = decoded_dict->context_based;\n  if (decoded_dict->context_based) {\n    memcpy(contextual->context_map, decoded_dict->context_map,\n        SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS);\n  }\n\n  contextual->num_dictionaries = decoded_dict->num_dictionaries;\n  contextual->num_instances_ = decoded_dict->num_dictionaries;\n  if (contextual->num_instances_ == 1) {\n    instances = &contextual->instance_;\n  } else {\n    contextual->instances_ = (BrotliEncoderDictionary*)\n        BrotliAllocate(m, sizeof(*contextual->instances_) *\n        contextual->num_instances_);\n    if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n    instances = contextual->instances_;\n  }\n  for (i = 0; i < (int)contextual->num_instances_; i++) {\n    BrotliEncoderDictionary* current = &instances[i];\n    InitEncoderDictionary(current);\n    current->parent = &dict->contextual;\n    if (decoded_dict->words[i] == BrotliGetDictionary()) {\n      current->words = BrotliGetDictionary();\n    } else {\n      current->words_instance_ = (BrotliDictionary*)BrotliAllocate(\n          m, sizeof(BrotliDictionary));\n      if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;\n      *current->words_instance_ = *decoded_dict->words[i];\n      current->words = current->words_instance_;\n    }\n    current->num_transforms =\n        (uint32_t)decoded_dict->transforms[i]->num_transforms;\n    if (!ComputeDictionary(\n        m, quality, decoded_dict->transforms[i], current)) {\n      return BROTLI_FALSE;\n    }\n\n    contextual->dict[i] = current;\n  }\n\n  return BROTLI_TRUE;  /* success */\n}\n\nBROTLI_BOOL BrotliInitCustomSharedEncoderDictionary(\n    MemoryManager* m, const uint8_t* encoded_dict, size_t size,\n    int quality, SharedEncoderDictionary* dict) {\n  BROTLI_BOOL success = BROTLI_FALSE;\n  BrotliSharedDictionary* decoded_dict = BrotliSharedDictionaryCreateInstance(\n      m->alloc_func, m->free_func, m->opaque);\n  if (!decoded_dict) {  /* OOM */\n    return BROTLI_FALSE;\n  }\n  success = BrotliSharedDictionaryAttach(\n      decoded_dict, BROTLI_SHARED_DICTIONARY_SERIALIZED, size, encoded_dict);\n  if (success) {\n    success = InitCustomSharedEncoderDictionary(m,\n        decoded_dict, quality, dict);\n  }\n  BrotliSharedDictionaryDestroyInstance(decoded_dict);\n  return success;\n}\n#endif  /* BROTLI_EXPERIMENTAL */\n\nvoid BrotliCleanupSharedEncoderDictionary(MemoryManager* m,\n                                          SharedEncoderDictionary* dict) {\n  size_t i;\n  for (i = 0; i < dict->compound.num_prepared_instances_; i++) {\n    DestroyPreparedDictionary(m,\n        (PreparedDictionary*)dict->compound.prepared_instances_[i]);\n  }\n  if (dict->contextual.num_instances_ == 1) {\n    BrotliDestroyEncoderDictionary(m, &dict->contextual.instance_);\n  } else if (dict->contextual.num_instances_ > 1) {\n    for (i = 0; i < dict->contextual.num_instances_; i++) {\n      BrotliDestroyEncoderDictionary(m, &dict->contextual.instances_[i]);\n    }\n    BrotliFree(m, dict->contextual.instances_);\n  }\n}\n\nManagedDictionary* BrotliCreateManagedDictionary(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {\n  ManagedDictionary* result = (ManagedDictionary*)BrotliBootstrapAlloc(\n      sizeof(ManagedDictionary), alloc_func, free_func, opaque);\n  if (result == NULL) return NULL;\n\n  result->magic = kManagedDictionaryMagic;\n  BrotliInitMemoryManager(\n      &result->memory_manager_, alloc_func, free_func, opaque);\n  result->dictionary = NULL;\n\n  return result;\n}\n\nvoid BrotliDestroyManagedDictionary(ManagedDictionary* dictionary) {\n  if (!dictionary) return;\n  BrotliBootstrapFree(dictionary, &dictionary->memory_manager_);\n}\n\n/* Escalate internal functions visibility; for testing purposes only. */\n#if defined(BROTLI_TEST)\nvoid BrotliInitEncoderDictionaryForTest(BrotliEncoderDictionary*);\nvoid BrotliInitEncoderDictionaryForTest(BrotliEncoderDictionary* d) {\n  InitEncoderDictionary(d);\n}\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/encoder_dict.h",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#ifndef BROTLI_ENC_ENCODER_DICT_H_\n#define BROTLI_ENC_ENCODER_DICT_H_\n\n#include \"../common/dictionary.h\"\n#include <brotli/shared_dictionary.h>\n#include \"../common/platform.h\"\n#include \"compound_dictionary.h\"\n#include \"memory.h\"\n#include \"static_dict_lut.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/*\nDictionary hierarchy for Encoder:\n-SharedEncoderDictionary\n--CompoundDictionary\n---PreparedDictionary [up to 15x]\n   = prefix dictionary with precomputed hashes\n--ContextualEncoderDictionary\n---BrotliEncoderDictionary [up to 64x]\n   = for each context, precomputed static dictionary with words + transforms\n\nDictionary hierarchy from common: similar, but without precomputed hashes\n-BrotliSharedDictionary\n--BrotliDictionary [up to 64x]\n--BrotliTransforms [up to 64x]\n--const uint8_t* prefix [up to 15x]: compound dictionaries\n*/\n\ntypedef struct BrotliTrieNode {\n  uint8_t single;  /* if 1, sub is a single node for c instead of 256 */\n  uint8_t c;\n  uint8_t len_;  /* untransformed length */\n  uint32_t idx_;  /* word index + num words * transform index */\n  uint32_t sub;  /* index of sub node(s) in the pool */\n} BrotliTrieNode;\n\ntypedef struct BrotliTrie {\n  BrotliTrieNode* pool;\n  size_t pool_capacity;\n  size_t pool_size;\n  BrotliTrieNode root;\n} BrotliTrie;\n\n#if defined(BROTLI_EXPERIMENTAL)\nBROTLI_INTERNAL const BrotliTrieNode* BrotliTrieSub(const BrotliTrie* trie,\n    const BrotliTrieNode* node, uint8_t c);\n#endif  /* BROTLI_EXPERIMENTAL */\n\n/* Dictionary data (words and transforms) for 1 possible context */\ntypedef struct BrotliEncoderDictionary {\n  const BrotliDictionary* words;\n  uint32_t num_transforms;\n\n  /* cut off for fast encoder */\n  uint32_t cutoffTransformsCount;\n  uint64_t cutoffTransforms;\n\n  /* from dictionary_hash.h, for fast encoder */\n  const uint16_t* hash_table_words;\n  const uint8_t* hash_table_lengths;\n\n  /* from static_dict_lut.h, for slow encoder */\n  const uint16_t* buckets;\n  const DictWord* dict_words;\n  /* Heavy version, for use by slow encoder when there are custom transforms.\n     Contains every possible transformed dictionary word in a trie. It encodes\n     about as fast as the non-heavy encoder but consumes a lot of memory and\n     takes time to build. */\n  BrotliTrie trie;\n  BROTLI_BOOL has_words_heavy;\n\n  /* Reference to other dictionaries. */\n  const struct ContextualEncoderDictionary* parent;\n\n  /* Allocated memory, used only when not using the Brotli defaults */\n  uint16_t* hash_table_data_words_;\n  uint8_t* hash_table_data_lengths_;\n  size_t buckets_alloc_size_;\n  uint16_t* buckets_data_;\n  size_t dict_words_alloc_size_;\n  DictWord* dict_words_data_;\n  BrotliDictionary* words_instance_;\n} BrotliEncoderDictionary;\n\n/* Dictionary data for all 64 contexts */\ntypedef struct ContextualEncoderDictionary {\n  BROTLI_BOOL context_based;\n  uint8_t num_dictionaries;\n  uint8_t context_map[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];\n  const BrotliEncoderDictionary* dict[SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS];\n\n  /* If num_instances_ is 1, instance_ is used, else dynamic allocation with\n     instances_ is used. */\n  size_t num_instances_;\n  BrotliEncoderDictionary instance_;\n  BrotliEncoderDictionary* instances_;\n} ContextualEncoderDictionary;\n\ntypedef struct SharedEncoderDictionary {\n  /* Magic value to distinguish this struct from PreparedDictionary for\n     certain external usages. */\n  uint32_t magic;\n\n  /* LZ77 prefix, compound dictionary */\n  CompoundDictionary compound;\n\n  /* Custom static dictionary (optionally context-based) */\n  ContextualEncoderDictionary contextual;\n\n  /* The maximum quality the dictionary was computed for */\n  int max_quality;\n} SharedEncoderDictionary;\n\ntypedef struct ManagedDictionary {\n  uint32_t magic;\n  MemoryManager memory_manager_;\n  uint32_t* dictionary;\n} ManagedDictionary;\n\n/* Initializes to the brotli built-in dictionary */\nBROTLI_INTERNAL void BrotliInitSharedEncoderDictionary(\n    SharedEncoderDictionary* dict);\n\n#if defined(BROTLI_EXPERIMENTAL)\n/* Initializes to shared dictionary that will be parsed from\n   encoded_dict. Requires that you keep the encoded_dict buffer\n   around, parts of data will point to it. */\nBROTLI_INTERNAL BROTLI_BOOL BrotliInitCustomSharedEncoderDictionary(\n    MemoryManager* m, const uint8_t* encoded_dict, size_t size,\n    int quality, SharedEncoderDictionary* dict);\n#endif  /* BROTLI_EXPERIMENTAL */\n\nBROTLI_INTERNAL void BrotliCleanupSharedEncoderDictionary(\n    MemoryManager* m, SharedEncoderDictionary* dict);\n\nBROTLI_INTERNAL ManagedDictionary* BrotliCreateManagedDictionary(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\n\nBROTLI_INTERNAL void BrotliDestroyManagedDictionary(\n    ManagedDictionary* dictionary);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_ENCODER_DICT_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/entropy_encode.c",
    "content": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Entropy encoding (Huffman) utilities. */\n\n#include \"entropy_encode.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nconst BROTLI_MODEL(\"small\") size_t kBrotliShellGaps[] = {132, 57, 23, 10, 4, 1};\n\nBROTLI_BOOL BrotliSetDepth(\n    int p0, HuffmanTree* pool, uint8_t* depth, int max_depth) {\n  int stack[16];\n  int level = 0;\n  int p = p0;\n  BROTLI_DCHECK(max_depth <= 15);\n  stack[0] = -1;\n  while (BROTLI_TRUE) {\n    if (pool[p].index_left_ >= 0) {\n      level++;\n      if (level > max_depth) return BROTLI_FALSE;\n      stack[level] = pool[p].index_right_or_value_;\n      p = pool[p].index_left_;\n      continue;\n    } else {\n      depth[pool[p].index_right_or_value_] = (uint8_t)level;\n    }\n    while (level >= 0 && stack[level] == -1) level--;\n    if (level < 0) return BROTLI_TRUE;\n    p = stack[level];\n    stack[level] = -1;\n  }\n}\n\n/* Sort the root nodes, least popular first. */\nstatic BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(\n    const HuffmanTree* v0, const HuffmanTree* v1) {\n  if (v0->total_count_ != v1->total_count_) {\n    return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);\n  }\n  return TO_BROTLI_BOOL(v0->index_right_or_value_ > v1->index_right_or_value_);\n}\n\n/* This function will create a Huffman tree.\n\n   The catch here is that the tree cannot be arbitrarily deep.\n   Brotli specifies a maximum depth of 15 bits for \"code trees\"\n   and 7 bits for \"code length code trees.\"\n\n   count_limit is the value that is to be faked as the minimum value\n   and this minimum value is raised until the tree matches the\n   maximum length requirement.\n\n   This algorithm is not of excellent performance for very long data blocks,\n   especially when population counts are longer than 2**tree_limit, but\n   we are not planning to use this with extremely long blocks.\n\n   See http://en.wikipedia.org/wiki/Huffman_coding */\nvoid BrotliCreateHuffmanTree(const uint32_t* data,\n                             const size_t length,\n                             const int tree_limit,\n                             HuffmanTree* tree,\n                             uint8_t* depth) {\n  uint32_t count_limit;\n  HuffmanTree sentinel;\n  InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);\n  /* For block sizes below 64 kB, we never need to do a second iteration\n     of this loop. Probably all of our block sizes will be smaller than\n     that, so this loop is mostly of academic interest. If we actually\n     would need this, we would be better off with the Katajainen algorithm. */\n  for (count_limit = 1; ; count_limit *= 2) {\n    size_t n = 0;\n    size_t i;\n    size_t j;\n    size_t k;\n    for (i = length; i != 0;) {\n      --i;\n      if (data[i]) {\n        const uint32_t count = BROTLI_MAX(uint32_t, data[i], count_limit);\n        InitHuffmanTree(&tree[n++], count, -1, (int16_t)i);\n      }\n    }\n\n    if (n == 1) {\n      depth[tree[0].index_right_or_value_] = 1;  /* Only one element. */\n      break;\n    }\n\n    SortHuffmanTreeItems(tree, n, SortHuffmanTree);\n\n    /* The nodes are:\n       [0, n): the sorted leaf nodes that we start with.\n       [n]: we add a sentinel here.\n       [n + 1, 2n): new parent nodes are added here, starting from\n                    (n+1). These are naturally in ascending order.\n       [2n]: we add a sentinel at the end as well.\n       There will be (2n+1) elements at the end. */\n    tree[n] = sentinel;\n    tree[n + 1] = sentinel;\n\n    i = 0;      /* Points to the next leaf node. */\n    j = n + 1;  /* Points to the next non-leaf node. */\n    for (k = n - 1; k != 0; --k) {\n      size_t left, right;\n      if (tree[i].total_count_ <= tree[j].total_count_) {\n        left = i;\n        ++i;\n      } else {\n        left = j;\n        ++j;\n      }\n      if (tree[i].total_count_ <= tree[j].total_count_) {\n        right = i;\n        ++i;\n      } else {\n        right = j;\n        ++j;\n      }\n\n      {\n        /* The sentinel node becomes the parent node. */\n        size_t j_end = 2 * n - k;\n        tree[j_end].total_count_ =\n            tree[left].total_count_ + tree[right].total_count_;\n        tree[j_end].index_left_ = (int16_t)left;\n        tree[j_end].index_right_or_value_ = (int16_t)right;\n\n        /* Add back the last sentinel node. */\n        tree[j_end + 1] = sentinel;\n      }\n    }\n    if (BrotliSetDepth((int)(2 * n - 1), &tree[0], depth, tree_limit)) {\n      /* We need to pack the Huffman tree in tree_limit bits. If this was not\n         successful, add fake entities to the lowest values and retry. */\n      break;\n    }\n  }\n}\n\nstatic void Reverse(uint8_t* v, size_t start, size_t end) {\n  --end;\n  while (start < end) {\n    uint8_t tmp = v[start];\n    v[start] = v[end];\n    v[end] = tmp;\n    ++start;\n    --end;\n  }\n}\n\nstatic void BrotliWriteHuffmanTreeRepetitions(\n    const uint8_t previous_value,\n    const uint8_t value,\n    size_t repetitions,\n    size_t* tree_size,\n    uint8_t* tree,\n    uint8_t* extra_bits_data) {\n  BROTLI_DCHECK(repetitions > 0);\n  if (previous_value != value) {\n    tree[*tree_size] = value;\n    extra_bits_data[*tree_size] = 0;\n    ++(*tree_size);\n    --repetitions;\n  }\n  if (repetitions == 7) {\n    tree[*tree_size] = value;\n    extra_bits_data[*tree_size] = 0;\n    ++(*tree_size);\n    --repetitions;\n  }\n  if (repetitions < 3) {\n    size_t i;\n    for (i = 0; i < repetitions; ++i) {\n      tree[*tree_size] = value;\n      extra_bits_data[*tree_size] = 0;\n      ++(*tree_size);\n    }\n  } else {\n    size_t start = *tree_size;\n    repetitions -= 3;\n    while (BROTLI_TRUE) {\n      tree[*tree_size] = BROTLI_REPEAT_PREVIOUS_CODE_LENGTH;\n      extra_bits_data[*tree_size] = repetitions & 0x3;\n      ++(*tree_size);\n      repetitions >>= 2;\n      if (repetitions == 0) {\n        break;\n      }\n      --repetitions;\n    }\n    Reverse(tree, start, *tree_size);\n    Reverse(extra_bits_data, start, *tree_size);\n  }\n}\n\nstatic void BrotliWriteHuffmanTreeRepetitionsZeros(\n    size_t repetitions,\n    size_t* tree_size,\n    uint8_t* tree,\n    uint8_t* extra_bits_data) {\n  if (repetitions == 11) {\n    tree[*tree_size] = 0;\n    extra_bits_data[*tree_size] = 0;\n    ++(*tree_size);\n    --repetitions;\n  }\n  if (repetitions < 3) {\n    size_t i;\n    for (i = 0; i < repetitions; ++i) {\n      tree[*tree_size] = 0;\n      extra_bits_data[*tree_size] = 0;\n      ++(*tree_size);\n    }\n  } else {\n    size_t start = *tree_size;\n    repetitions -= 3;\n    while (BROTLI_TRUE) {\n      tree[*tree_size] = BROTLI_REPEAT_ZERO_CODE_LENGTH;\n      extra_bits_data[*tree_size] = repetitions & 0x7;\n      ++(*tree_size);\n      repetitions >>= 3;\n      if (repetitions == 0) {\n        break;\n      }\n      --repetitions;\n    }\n    Reverse(tree, start, *tree_size);\n    Reverse(extra_bits_data, start, *tree_size);\n  }\n}\n\nvoid BrotliOptimizeHuffmanCountsForRle(size_t length, uint32_t* counts,\n                                       uint8_t* good_for_rle) {\n  size_t nonzero_count = 0;\n  size_t stride;\n  size_t limit;\n  size_t sum;\n  const size_t streak_limit = 1240;\n  /* Let's make the Huffman code more compatible with RLE encoding. */\n  size_t i;\n  for (i = 0; i < length; i++) {\n    if (counts[i]) {\n      ++nonzero_count;\n    }\n  }\n  if (nonzero_count < 16) {\n    return;\n  }\n  while (length != 0 && counts[length - 1] == 0) {\n    --length;\n  }\n  if (length == 0) {\n    return;  /* All zeros. */\n  }\n  /* Now counts[0..length - 1] does not have trailing zeros. */\n  {\n    size_t nonzeros = 0;\n    uint32_t smallest_nonzero = 1 << 30;\n    for (i = 0; i < length; ++i) {\n      if (counts[i] != 0) {\n        ++nonzeros;\n        if (smallest_nonzero > counts[i]) {\n          smallest_nonzero = counts[i];\n        }\n      }\n    }\n    if (nonzeros < 5) {\n      /* Small histogram will model it well. */\n      return;\n    }\n    if (smallest_nonzero < 4) {\n      size_t zeros = length - nonzeros;\n      if (zeros < 6) {\n        for (i = 1; i < length - 1; ++i) {\n          if (counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0) {\n            counts[i] = 1;\n          }\n        }\n      }\n    }\n    if (nonzeros < 28) {\n      return;\n    }\n  }\n  /* 2) Let's mark all population counts that already can be encoded\n     with an RLE code. */\n  memset(good_for_rle, 0, length);\n  {\n    /* Let's not spoil any of the existing good RLE codes.\n       Mark any seq of 0's that is longer as 5 as a good_for_rle.\n       Mark any seq of non-0's that is longer as 7 as a good_for_rle. */\n    uint32_t symbol = counts[0];\n    size_t step = 0;\n    for (i = 0; i <= length; ++i) {\n      if (i == length || counts[i] != symbol) {\n        if ((symbol == 0 && step >= 5) ||\n            (symbol != 0 && step >= 7)) {\n          size_t k;\n          for (k = 0; k < step; ++k) {\n            good_for_rle[i - k - 1] = 1;\n          }\n        }\n        step = 1;\n        if (i != length) {\n          symbol = counts[i];\n        }\n      } else {\n        ++step;\n      }\n    }\n  }\n  /* 3) Let's replace those population counts that lead to more RLE codes.\n     Math here is in 24.8 fixed point representation. */\n  stride = 0;\n  limit = 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420;\n  sum = 0;\n  for (i = 0; i <= length; ++i) {\n    if (i == length || good_for_rle[i] ||\n        (i != 0 && good_for_rle[i - 1]) ||\n        (256 * counts[i] - limit + streak_limit) >= 2 * streak_limit) {\n      if (stride >= 4 || (stride >= 3 && sum == 0)) {\n        size_t k;\n        /* The stride must end, collapse what we have, if we have enough (4). */\n        size_t count = (sum + stride / 2) / stride;\n        if (count == 0) {\n          count = 1;\n        }\n        if (sum == 0) {\n          /* Don't make an all zeros stride to be upgraded to ones. */\n          count = 0;\n        }\n        for (k = 0; k < stride; ++k) {\n          /* We don't want to change value at counts[i],\n             that is already belonging to the next stride. Thus - 1. */\n          counts[i - k - 1] = (uint32_t)count;\n        }\n      }\n      stride = 0;\n      sum = 0;\n      if (i < length - 2) {\n        /* All interesting strides have a count of at least 4, */\n        /* at least when non-zeros. */\n        limit = 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 + 420;\n      } else if (i < length) {\n        limit = 256 * counts[i];\n      } else {\n        limit = 0;\n      }\n    }\n    ++stride;\n    if (i != length) {\n      sum += counts[i];\n      if (stride >= 4) {\n        limit = (256 * sum + stride / 2) / stride;\n      }\n      if (stride == 4) {\n        limit += 120;\n      }\n    }\n  }\n}\n\nstatic void DecideOverRleUse(const uint8_t* depth, const size_t length,\n                             BROTLI_BOOL* use_rle_for_non_zero,\n                             BROTLI_BOOL* use_rle_for_zero) {\n  size_t total_reps_zero = 0;\n  size_t total_reps_non_zero = 0;\n  size_t count_reps_zero = 1;\n  size_t count_reps_non_zero = 1;\n  size_t i;\n  for (i = 0; i < length;) {\n    const uint8_t value = depth[i];\n    size_t reps = 1;\n    size_t k;\n    for (k = i + 1; k < length && depth[k] == value; ++k) {\n      ++reps;\n    }\n    if (reps >= 3 && value == 0) {\n      total_reps_zero += reps;\n      ++count_reps_zero;\n    }\n    if (reps >= 4 && value != 0) {\n      total_reps_non_zero += reps;\n      ++count_reps_non_zero;\n    }\n    i += reps;\n  }\n  *use_rle_for_non_zero =\n      TO_BROTLI_BOOL(total_reps_non_zero > count_reps_non_zero * 2);\n  *use_rle_for_zero = TO_BROTLI_BOOL(total_reps_zero > count_reps_zero * 2);\n}\n\nvoid BrotliWriteHuffmanTree(const uint8_t* depth,\n                            size_t length,\n                            size_t* tree_size,\n                            uint8_t* tree,\n                            uint8_t* extra_bits_data) {\n  uint8_t previous_value = BROTLI_INITIAL_REPEATED_CODE_LENGTH;\n  size_t i;\n  BROTLI_BOOL use_rle_for_non_zero = BROTLI_FALSE;\n  BROTLI_BOOL use_rle_for_zero = BROTLI_FALSE;\n\n  /* Throw away trailing zeros. */\n  size_t new_length = length;\n  for (i = 0; i < length; ++i) {\n    if (depth[length - i - 1] == 0) {\n      --new_length;\n    } else {\n      break;\n    }\n  }\n\n  /* First gather statistics on if it is a good idea to do RLE. */\n  if (length > 50) {\n    /* Find RLE coding for longer codes.\n       Shorter codes seem not to benefit from RLE. */\n    DecideOverRleUse(depth, new_length,\n                     &use_rle_for_non_zero, &use_rle_for_zero);\n  }\n\n  /* Actual RLE coding. */\n  for (i = 0; i < new_length;) {\n    const uint8_t value = depth[i];\n    size_t reps = 1;\n    if ((value != 0 && use_rle_for_non_zero) ||\n        (value == 0 && use_rle_for_zero)) {\n      size_t k;\n      for (k = i + 1; k < new_length && depth[k] == value; ++k) {\n        ++reps;\n      }\n    }\n    if (value == 0) {\n      BrotliWriteHuffmanTreeRepetitionsZeros(\n          reps, tree_size, tree, extra_bits_data);\n    } else {\n      BrotliWriteHuffmanTreeRepetitions(previous_value,\n                                        value, reps, tree_size,\n                                        tree, extra_bits_data);\n      previous_value = value;\n    }\n    i += reps;\n  }\n}\n\nstatic uint16_t BrotliReverseBits(size_t num_bits, uint16_t bits) {\n  static const size_t BROTLI_MODEL(\"small\") kLut[16] =\n  {  /* Pre-reversed 4-bit values. */\n    0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E,\n    0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F\n  };\n  size_t retval = kLut[bits & 0x0F];\n  size_t i;\n  for (i = 4; i < num_bits; i += 4) {\n    retval <<= 4;\n    bits = (uint16_t)(bits >> 4);\n    retval |= kLut[bits & 0x0F];\n  }\n  retval >>= ((0 - num_bits) & 0x03);\n  return (uint16_t)retval;\n}\n\n/* 0..15 are values for bits */\n#define MAX_HUFFMAN_BITS 16\n\nvoid BrotliConvertBitDepthsToSymbols(const uint8_t* depth,\n                                     size_t len,\n                                     uint16_t* bits) {\n  /* In Brotli, all bit depths are [1..15]\n     0 bit depth means that the symbol does not exist. */\n  uint16_t bl_count[MAX_HUFFMAN_BITS] = { 0 };\n  uint16_t next_code[MAX_HUFFMAN_BITS];\n  size_t i;\n  int code = 0;\n  for (i = 0; i < len; ++i) {\n    ++bl_count[depth[i]];\n  }\n  bl_count[0] = 0;\n  next_code[0] = 0;\n  for (i = 1; i < MAX_HUFFMAN_BITS; ++i) {\n    code = (code + bl_count[i - 1]) << 1;\n    next_code[i] = (uint16_t)code;\n  }\n  for (i = 0; i < len; ++i) {\n    if (depth[i]) {\n      bits[i] = BrotliReverseBits(depth[i], next_code[depth[i]]++);\n    }\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/entropy_encode.h",
    "content": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Entropy encoding (Huffman) utilities. */\n\n#ifndef BROTLI_ENC_ENTROPY_ENCODE_H_\n#define BROTLI_ENC_ENTROPY_ENCODE_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* A node of a Huffman tree. */\ntypedef struct HuffmanTree {\n  uint32_t total_count_;\n  int16_t index_left_;\n  int16_t index_right_or_value_;\n} HuffmanTree;\n\nstatic BROTLI_INLINE void InitHuffmanTree(HuffmanTree* self, uint32_t count,\n    int16_t left, int16_t right) {\n  self->total_count_ = count;\n  self->index_left_ = left;\n  self->index_right_or_value_ = right;\n}\n\n/* Returns 1 is assignment of depths succeeded, otherwise 0. */\nBROTLI_INTERNAL BROTLI_BOOL BrotliSetDepth(\n    int p, HuffmanTree* pool, uint8_t* depth, int max_depth);\n\n/* This function will create a Huffman tree.\n\n   The (data,length) contains the population counts.\n   The tree_limit is the maximum bit depth of the Huffman codes.\n\n   The depth contains the tree, i.e., how many bits are used for\n   the symbol.\n\n   The actual Huffman tree is constructed in the tree[] array, which has to\n   be at least 2 * length + 1 long.\n\n   See http://en.wikipedia.org/wiki/Huffman_coding */\nBROTLI_INTERNAL void BrotliCreateHuffmanTree(const uint32_t* data,\n                                             const size_t length,\n                                             const int tree_limit,\n                                             HuffmanTree* tree,\n                                             uint8_t* depth);\n\n/* Change the population counts in a way that the consequent\n   Huffman tree compression, especially its RLE-part will be more\n   likely to compress this data more efficiently.\n\n   length contains the size of the histogram.\n   counts contains the population counts.\n   good_for_rle is a buffer of at least length size */\nBROTLI_INTERNAL void BrotliOptimizeHuffmanCountsForRle(\n    size_t length, uint32_t* counts, uint8_t* good_for_rle);\n\n/* Write a Huffman tree from bit depths into the bit-stream representation\n   of a Huffman tree. The generated Huffman tree is to be compressed once\n   more using a Huffman tree */\nBROTLI_INTERNAL void BrotliWriteHuffmanTree(const uint8_t* depth,\n                                            size_t length,\n                                            size_t* tree_size,\n                                            uint8_t* tree,\n                                            uint8_t* extra_bits_data);\n\n/* Get the actual bit values for a tree of bit depths. */\nBROTLI_INTERNAL void BrotliConvertBitDepthsToSymbols(const uint8_t* depth,\n                                                     size_t len,\n                                                     uint16_t* bits);\n\nBROTLI_INTERNAL extern BROTLI_MODEL(\"small\") const size_t kBrotliShellGaps[6];\n/* Input size optimized Shell sort. */\ntypedef BROTLI_BOOL (*HuffmanTreeComparator)(\n    const HuffmanTree*, const HuffmanTree*);\nstatic BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items,\n    const size_t n, HuffmanTreeComparator comparator) {\n  if (n < 13) {\n    /* Insertion sort. */\n    size_t i;\n    for (i = 1; i < n; ++i) {\n      HuffmanTree tmp = items[i];\n      size_t k = i;\n      size_t j = i - 1;\n      while (comparator(&tmp, &items[j])) {\n        items[k] = items[j];\n        k = j;\n        if (!j--) break;\n      }\n      items[k] = tmp;\n    }\n    return;\n  } else {\n    /* Shell sort. */\n    int g = n < 57 ? 2 : 0;\n    for (; g < 6; ++g) {\n      size_t gap = kBrotliShellGaps[g];\n      size_t i;\n      for (i = gap; i < n; ++i) {\n        size_t j = i;\n        HuffmanTree tmp = items[i];\n        for (; j >= gap && comparator(&tmp, &items[j - gap]); j -= gap) {\n          items[j] = items[j - gap];\n        }\n        items[j] = tmp;\n      }\n    }\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_ENTROPY_ENCODE_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/entropy_encode_static.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Static entropy codes used for faster meta-block encoding. */\n\n#ifndef BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_\n#define BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"write_bits.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic const BROTLI_MODEL(\"small\") uint8_t kCodeLengthDepth[18] = {\n  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint8_t kStaticCommandCodeDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n   9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n  11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint8_t kStaticDistanceCodeDepth[64] = {\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n};\n\n/* GENERATED CODE START */\nstatic const BROTLI_MODEL(\"small\")\nuint32_t kCodeLengthBits[18] = {\n  0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7,\n};\n\nstatic BROTLI_INLINE void StoreStaticCodeLengthCode(\n    size_t* storage_ix, uint8_t* storage) {\n  BrotliWriteBits(\n      40, BROTLI_MAKE_UINT64_T(0x0000FFu, 0x55555554u), storage_ix, storage);\n}\n\nstatic const BROTLI_MODEL(\"small\")\nuint64_t kZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {\n  0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000017, 0x00000027,\n  0x00000037, 0x00000047, 0x00000057, 0x00000067, 0x00000077, 0x00000770,\n  0x00000b87, 0x00001387, 0x00001b87, 0x00002387, 0x00002b87, 0x00003387,\n  0x00003b87, 0x00000397, 0x00000b97, 0x00001397, 0x00001b97, 0x00002397,\n  0x00002b97, 0x00003397, 0x00003b97, 0x000003a7, 0x00000ba7, 0x000013a7,\n  0x00001ba7, 0x000023a7, 0x00002ba7, 0x000033a7, 0x00003ba7, 0x000003b7,\n  0x00000bb7, 0x000013b7, 0x00001bb7, 0x000023b7, 0x00002bb7, 0x000033b7,\n  0x00003bb7, 0x000003c7, 0x00000bc7, 0x000013c7, 0x00001bc7, 0x000023c7,\n  0x00002bc7, 0x000033c7, 0x00003bc7, 0x000003d7, 0x00000bd7, 0x000013d7,\n  0x00001bd7, 0x000023d7, 0x00002bd7, 0x000033d7, 0x00003bd7, 0x000003e7,\n  0x00000be7, 0x000013e7, 0x00001be7, 0x000023e7, 0x00002be7, 0x000033e7,\n  0x00003be7, 0x000003f7, 0x00000bf7, 0x000013f7, 0x00001bf7, 0x000023f7,\n  0x00002bf7, 0x000033f7, 0x00003bf7, 0x0001c387, 0x0005c387, 0x0009c387,\n  0x000dc387, 0x0011c387, 0x0015c387, 0x0019c387, 0x001dc387, 0x0001cb87,\n  0x0005cb87, 0x0009cb87, 0x000dcb87, 0x0011cb87, 0x0015cb87, 0x0019cb87,\n  0x001dcb87, 0x0001d387, 0x0005d387, 0x0009d387, 0x000dd387, 0x0011d387,\n  0x0015d387, 0x0019d387, 0x001dd387, 0x0001db87, 0x0005db87, 0x0009db87,\n  0x000ddb87, 0x0011db87, 0x0015db87, 0x0019db87, 0x001ddb87, 0x0001e387,\n  0x0005e387, 0x0009e387, 0x000de387, 0x0011e387, 0x0015e387, 0x0019e387,\n  0x001de387, 0x0001eb87, 0x0005eb87, 0x0009eb87, 0x000deb87, 0x0011eb87,\n  0x0015eb87, 0x0019eb87, 0x001deb87, 0x0001f387, 0x0005f387, 0x0009f387,\n  0x000df387, 0x0011f387, 0x0015f387, 0x0019f387, 0x001df387, 0x0001fb87,\n  0x0005fb87, 0x0009fb87, 0x000dfb87, 0x0011fb87, 0x0015fb87, 0x0019fb87,\n  0x001dfb87, 0x0001c397, 0x0005c397, 0x0009c397, 0x000dc397, 0x0011c397,\n  0x0015c397, 0x0019c397, 0x001dc397, 0x0001cb97, 0x0005cb97, 0x0009cb97,\n  0x000dcb97, 0x0011cb97, 0x0015cb97, 0x0019cb97, 0x001dcb97, 0x0001d397,\n  0x0005d397, 0x0009d397, 0x000dd397, 0x0011d397, 0x0015d397, 0x0019d397,\n  0x001dd397, 0x0001db97, 0x0005db97, 0x0009db97, 0x000ddb97, 0x0011db97,\n  0x0015db97, 0x0019db97, 0x001ddb97, 0x0001e397, 0x0005e397, 0x0009e397,\n  0x000de397, 0x0011e397, 0x0015e397, 0x0019e397, 0x001de397, 0x0001eb97,\n  0x0005eb97, 0x0009eb97, 0x000deb97, 0x0011eb97, 0x0015eb97, 0x0019eb97,\n  0x001deb97, 0x0001f397, 0x0005f397, 0x0009f397, 0x000df397, 0x0011f397,\n  0x0015f397, 0x0019f397, 0x001df397, 0x0001fb97, 0x0005fb97, 0x0009fb97,\n  0x000dfb97, 0x0011fb97, 0x0015fb97, 0x0019fb97, 0x001dfb97, 0x0001c3a7,\n  0x0005c3a7, 0x0009c3a7, 0x000dc3a7, 0x0011c3a7, 0x0015c3a7, 0x0019c3a7,\n  0x001dc3a7, 0x0001cba7, 0x0005cba7, 0x0009cba7, 0x000dcba7, 0x0011cba7,\n  0x0015cba7, 0x0019cba7, 0x001dcba7, 0x0001d3a7, 0x0005d3a7, 0x0009d3a7,\n  0x000dd3a7, 0x0011d3a7, 0x0015d3a7, 0x0019d3a7, 0x001dd3a7, 0x0001dba7,\n  0x0005dba7, 0x0009dba7, 0x000ddba7, 0x0011dba7, 0x0015dba7, 0x0019dba7,\n  0x001ddba7, 0x0001e3a7, 0x0005e3a7, 0x0009e3a7, 0x000de3a7, 0x0011e3a7,\n  0x0015e3a7, 0x0019e3a7, 0x001de3a7, 0x0001eba7, 0x0005eba7, 0x0009eba7,\n  0x000deba7, 0x0011eba7, 0x0015eba7, 0x0019eba7, 0x001deba7, 0x0001f3a7,\n  0x0005f3a7, 0x0009f3a7, 0x000df3a7, 0x0011f3a7, 0x0015f3a7, 0x0019f3a7,\n  0x001df3a7, 0x0001fba7, 0x0005fba7, 0x0009fba7, 0x000dfba7, 0x0011fba7,\n  0x0015fba7, 0x0019fba7, 0x001dfba7, 0x0001c3b7, 0x0005c3b7, 0x0009c3b7,\n  0x000dc3b7, 0x0011c3b7, 0x0015c3b7, 0x0019c3b7, 0x001dc3b7, 0x0001cbb7,\n  0x0005cbb7, 0x0009cbb7, 0x000dcbb7, 0x0011cbb7, 0x0015cbb7, 0x0019cbb7,\n  0x001dcbb7, 0x0001d3b7, 0x0005d3b7, 0x0009d3b7, 0x000dd3b7, 0x0011d3b7,\n  0x0015d3b7, 0x0019d3b7, 0x001dd3b7, 0x0001dbb7, 0x0005dbb7, 0x0009dbb7,\n  0x000ddbb7, 0x0011dbb7, 0x0015dbb7, 0x0019dbb7, 0x001ddbb7, 0x0001e3b7,\n  0x0005e3b7, 0x0009e3b7, 0x000de3b7, 0x0011e3b7, 0x0015e3b7, 0x0019e3b7,\n  0x001de3b7, 0x0001ebb7, 0x0005ebb7, 0x0009ebb7, 0x000debb7, 0x0011ebb7,\n  0x0015ebb7, 0x0019ebb7, 0x001debb7, 0x0001f3b7, 0x0005f3b7, 0x0009f3b7,\n  0x000df3b7, 0x0011f3b7, 0x0015f3b7, 0x0019f3b7, 0x001df3b7, 0x0001fbb7,\n  0x0005fbb7, 0x0009fbb7, 0x000dfbb7, 0x0011fbb7, 0x0015fbb7, 0x0019fbb7,\n  0x001dfbb7, 0x0001c3c7, 0x0005c3c7, 0x0009c3c7, 0x000dc3c7, 0x0011c3c7,\n  0x0015c3c7, 0x0019c3c7, 0x001dc3c7, 0x0001cbc7, 0x0005cbc7, 0x0009cbc7,\n  0x000dcbc7, 0x0011cbc7, 0x0015cbc7, 0x0019cbc7, 0x001dcbc7, 0x0001d3c7,\n  0x0005d3c7, 0x0009d3c7, 0x000dd3c7, 0x0011d3c7, 0x0015d3c7, 0x0019d3c7,\n  0x001dd3c7, 0x0001dbc7, 0x0005dbc7, 0x0009dbc7, 0x000ddbc7, 0x0011dbc7,\n  0x0015dbc7, 0x0019dbc7, 0x001ddbc7, 0x0001e3c7, 0x0005e3c7, 0x0009e3c7,\n  0x000de3c7, 0x0011e3c7, 0x0015e3c7, 0x0019e3c7, 0x001de3c7, 0x0001ebc7,\n  0x0005ebc7, 0x0009ebc7, 0x000debc7, 0x0011ebc7, 0x0015ebc7, 0x0019ebc7,\n  0x001debc7, 0x0001f3c7, 0x0005f3c7, 0x0009f3c7, 0x000df3c7, 0x0011f3c7,\n  0x0015f3c7, 0x0019f3c7, 0x001df3c7, 0x0001fbc7, 0x0005fbc7, 0x0009fbc7,\n  0x000dfbc7, 0x0011fbc7, 0x0015fbc7, 0x0019fbc7, 0x001dfbc7, 0x0001c3d7,\n  0x0005c3d7, 0x0009c3d7, 0x000dc3d7, 0x0011c3d7, 0x0015c3d7, 0x0019c3d7,\n  0x001dc3d7, 0x0001cbd7, 0x0005cbd7, 0x0009cbd7, 0x000dcbd7, 0x0011cbd7,\n  0x0015cbd7, 0x0019cbd7, 0x001dcbd7, 0x0001d3d7, 0x0005d3d7, 0x0009d3d7,\n  0x000dd3d7, 0x0011d3d7, 0x0015d3d7, 0x0019d3d7, 0x001dd3d7, 0x0001dbd7,\n  0x0005dbd7, 0x0009dbd7, 0x000ddbd7, 0x0011dbd7, 0x0015dbd7, 0x0019dbd7,\n  0x001ddbd7, 0x0001e3d7, 0x0005e3d7, 0x0009e3d7, 0x000de3d7, 0x0011e3d7,\n  0x0015e3d7, 0x0019e3d7, 0x001de3d7, 0x0001ebd7, 0x0005ebd7, 0x0009ebd7,\n  0x000debd7, 0x0011ebd7, 0x0015ebd7, 0x0019ebd7, 0x001debd7, 0x0001f3d7,\n  0x0005f3d7, 0x0009f3d7, 0x000df3d7, 0x0011f3d7, 0x0015f3d7, 0x0019f3d7,\n  0x001df3d7, 0x0001fbd7, 0x0005fbd7, 0x0009fbd7, 0x000dfbd7, 0x0011fbd7,\n  0x0015fbd7, 0x0019fbd7, 0x001dfbd7, 0x0001c3e7, 0x0005c3e7, 0x0009c3e7,\n  0x000dc3e7, 0x0011c3e7, 0x0015c3e7, 0x0019c3e7, 0x001dc3e7, 0x0001cbe7,\n  0x0005cbe7, 0x0009cbe7, 0x000dcbe7, 0x0011cbe7, 0x0015cbe7, 0x0019cbe7,\n  0x001dcbe7, 0x0001d3e7, 0x0005d3e7, 0x0009d3e7, 0x000dd3e7, 0x0011d3e7,\n  0x0015d3e7, 0x0019d3e7, 0x001dd3e7, 0x0001dbe7, 0x0005dbe7, 0x0009dbe7,\n  0x000ddbe7, 0x0011dbe7, 0x0015dbe7, 0x0019dbe7, 0x001ddbe7, 0x0001e3e7,\n  0x0005e3e7, 0x0009e3e7, 0x000de3e7, 0x0011e3e7, 0x0015e3e7, 0x0019e3e7,\n  0x001de3e7, 0x0001ebe7, 0x0005ebe7, 0x0009ebe7, 0x000debe7, 0x0011ebe7,\n  0x0015ebe7, 0x0019ebe7, 0x001debe7, 0x0001f3e7, 0x0005f3e7, 0x0009f3e7,\n  0x000df3e7, 0x0011f3e7, 0x0015f3e7, 0x0019f3e7, 0x001df3e7, 0x0001fbe7,\n  0x0005fbe7, 0x0009fbe7, 0x000dfbe7, 0x0011fbe7, 0x0015fbe7, 0x0019fbe7,\n  0x001dfbe7, 0x0001c3f7, 0x0005c3f7, 0x0009c3f7, 0x000dc3f7, 0x0011c3f7,\n  0x0015c3f7, 0x0019c3f7, 0x001dc3f7, 0x0001cbf7, 0x0005cbf7, 0x0009cbf7,\n  0x000dcbf7, 0x0011cbf7, 0x0015cbf7, 0x0019cbf7, 0x001dcbf7, 0x0001d3f7,\n  0x0005d3f7, 0x0009d3f7, 0x000dd3f7, 0x0011d3f7, 0x0015d3f7, 0x0019d3f7,\n  0x001dd3f7, 0x0001dbf7, 0x0005dbf7, 0x0009dbf7, 0x000ddbf7, 0x0011dbf7,\n  0x0015dbf7, 0x0019dbf7, 0x001ddbf7, 0x0001e3f7, 0x0005e3f7, 0x0009e3f7,\n  0x000de3f7, 0x0011e3f7, 0x0015e3f7, 0x0019e3f7, 0x001de3f7, 0x0001ebf7,\n  0x0005ebf7, 0x0009ebf7, 0x000debf7, 0x0011ebf7, 0x0015ebf7, 0x0019ebf7,\n  0x001debf7, 0x0001f3f7, 0x0005f3f7, 0x0009f3f7, 0x000df3f7, 0x0011f3f7,\n  0x0015f3f7, 0x0019f3f7, 0x001df3f7, 0x0001fbf7, 0x0005fbf7, 0x0009fbf7,\n  0x000dfbf7, 0x0011fbf7, 0x0015fbf7, 0x0019fbf7, 0x001dfbf7, 0x00e1c387,\n  0x02e1c387, 0x04e1c387, 0x06e1c387, 0x08e1c387, 0x0ae1c387, 0x0ce1c387,\n  0x0ee1c387, 0x00e5c387, 0x02e5c387, 0x04e5c387, 0x06e5c387, 0x08e5c387,\n  0x0ae5c387, 0x0ce5c387, 0x0ee5c387, 0x00e9c387, 0x02e9c387, 0x04e9c387,\n  0x06e9c387, 0x08e9c387, 0x0ae9c387, 0x0ce9c387, 0x0ee9c387, 0x00edc387,\n  0x02edc387, 0x04edc387, 0x06edc387, 0x08edc387, 0x0aedc387, 0x0cedc387,\n  0x0eedc387, 0x00f1c387, 0x02f1c387, 0x04f1c387, 0x06f1c387, 0x08f1c387,\n  0x0af1c387, 0x0cf1c387, 0x0ef1c387, 0x00f5c387, 0x02f5c387, 0x04f5c387,\n  0x06f5c387, 0x08f5c387, 0x0af5c387, 0x0cf5c387, 0x0ef5c387, 0x00f9c387,\n  0x02f9c387, 0x04f9c387, 0x06f9c387, 0x08f9c387, 0x0af9c387, 0x0cf9c387,\n  0x0ef9c387, 0x00fdc387, 0x02fdc387, 0x04fdc387, 0x06fdc387, 0x08fdc387,\n  0x0afdc387, 0x0cfdc387, 0x0efdc387, 0x00e1cb87, 0x02e1cb87, 0x04e1cb87,\n  0x06e1cb87, 0x08e1cb87, 0x0ae1cb87, 0x0ce1cb87, 0x0ee1cb87, 0x00e5cb87,\n  0x02e5cb87, 0x04e5cb87, 0x06e5cb87, 0x08e5cb87, 0x0ae5cb87, 0x0ce5cb87,\n  0x0ee5cb87, 0x00e9cb87, 0x02e9cb87, 0x04e9cb87, 0x06e9cb87, 0x08e9cb87,\n  0x0ae9cb87, 0x0ce9cb87, 0x0ee9cb87, 0x00edcb87, 0x02edcb87, 0x04edcb87,\n  0x06edcb87, 0x08edcb87, 0x0aedcb87, 0x0cedcb87, 0x0eedcb87, 0x00f1cb87,\n  0x02f1cb87, 0x04f1cb87, 0x06f1cb87, 0x08f1cb87, 0x0af1cb87, 0x0cf1cb87,\n  0x0ef1cb87, 0x00f5cb87, 0x02f5cb87, 0x04f5cb87, 0x06f5cb87, 0x08f5cb87,\n  0x0af5cb87, 0x0cf5cb87, 0x0ef5cb87, 0x00f9cb87, 0x02f9cb87, 0x04f9cb87,\n  0x06f9cb87, 0x08f9cb87,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint32_t kZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {\n   0,  4,  8,  7,  7,  7,  7,  7,  7,  7,  7, 11, 14, 14, 14, 14,\n  14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n  14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n  14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,\n  14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n  21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n  28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint64_t kNonZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {\n  0x0000000b, 0x0000001b, 0x0000002b, 0x0000003b, 0x000002cb, 0x000006cb,\n  0x00000acb, 0x00000ecb, 0x000002db, 0x000006db, 0x00000adb, 0x00000edb,\n  0x000002eb, 0x000006eb, 0x00000aeb, 0x00000eeb, 0x000002fb, 0x000006fb,\n  0x00000afb, 0x00000efb, 0x0000b2cb, 0x0001b2cb, 0x0002b2cb, 0x0003b2cb,\n  0x0000b6cb, 0x0001b6cb, 0x0002b6cb, 0x0003b6cb, 0x0000bacb, 0x0001bacb,\n  0x0002bacb, 0x0003bacb, 0x0000becb, 0x0001becb, 0x0002becb, 0x0003becb,\n  0x0000b2db, 0x0001b2db, 0x0002b2db, 0x0003b2db, 0x0000b6db, 0x0001b6db,\n  0x0002b6db, 0x0003b6db, 0x0000badb, 0x0001badb, 0x0002badb, 0x0003badb,\n  0x0000bedb, 0x0001bedb, 0x0002bedb, 0x0003bedb, 0x0000b2eb, 0x0001b2eb,\n  0x0002b2eb, 0x0003b2eb, 0x0000b6eb, 0x0001b6eb, 0x0002b6eb, 0x0003b6eb,\n  0x0000baeb, 0x0001baeb, 0x0002baeb, 0x0003baeb, 0x0000beeb, 0x0001beeb,\n  0x0002beeb, 0x0003beeb, 0x0000b2fb, 0x0001b2fb, 0x0002b2fb, 0x0003b2fb,\n  0x0000b6fb, 0x0001b6fb, 0x0002b6fb, 0x0003b6fb, 0x0000bafb, 0x0001bafb,\n  0x0002bafb, 0x0003bafb, 0x0000befb, 0x0001befb, 0x0002befb, 0x0003befb,\n  0x002cb2cb, 0x006cb2cb, 0x00acb2cb, 0x00ecb2cb, 0x002db2cb, 0x006db2cb,\n  0x00adb2cb, 0x00edb2cb, 0x002eb2cb, 0x006eb2cb, 0x00aeb2cb, 0x00eeb2cb,\n  0x002fb2cb, 0x006fb2cb, 0x00afb2cb, 0x00efb2cb, 0x002cb6cb, 0x006cb6cb,\n  0x00acb6cb, 0x00ecb6cb, 0x002db6cb, 0x006db6cb, 0x00adb6cb, 0x00edb6cb,\n  0x002eb6cb, 0x006eb6cb, 0x00aeb6cb, 0x00eeb6cb, 0x002fb6cb, 0x006fb6cb,\n  0x00afb6cb, 0x00efb6cb, 0x002cbacb, 0x006cbacb, 0x00acbacb, 0x00ecbacb,\n  0x002dbacb, 0x006dbacb, 0x00adbacb, 0x00edbacb, 0x002ebacb, 0x006ebacb,\n  0x00aebacb, 0x00eebacb, 0x002fbacb, 0x006fbacb, 0x00afbacb, 0x00efbacb,\n  0x002cbecb, 0x006cbecb, 0x00acbecb, 0x00ecbecb, 0x002dbecb, 0x006dbecb,\n  0x00adbecb, 0x00edbecb, 0x002ebecb, 0x006ebecb, 0x00aebecb, 0x00eebecb,\n  0x002fbecb, 0x006fbecb, 0x00afbecb, 0x00efbecb, 0x002cb2db, 0x006cb2db,\n  0x00acb2db, 0x00ecb2db, 0x002db2db, 0x006db2db, 0x00adb2db, 0x00edb2db,\n  0x002eb2db, 0x006eb2db, 0x00aeb2db, 0x00eeb2db, 0x002fb2db, 0x006fb2db,\n  0x00afb2db, 0x00efb2db, 0x002cb6db, 0x006cb6db, 0x00acb6db, 0x00ecb6db,\n  0x002db6db, 0x006db6db, 0x00adb6db, 0x00edb6db, 0x002eb6db, 0x006eb6db,\n  0x00aeb6db, 0x00eeb6db, 0x002fb6db, 0x006fb6db, 0x00afb6db, 0x00efb6db,\n  0x002cbadb, 0x006cbadb, 0x00acbadb, 0x00ecbadb, 0x002dbadb, 0x006dbadb,\n  0x00adbadb, 0x00edbadb, 0x002ebadb, 0x006ebadb, 0x00aebadb, 0x00eebadb,\n  0x002fbadb, 0x006fbadb, 0x00afbadb, 0x00efbadb, 0x002cbedb, 0x006cbedb,\n  0x00acbedb, 0x00ecbedb, 0x002dbedb, 0x006dbedb, 0x00adbedb, 0x00edbedb,\n  0x002ebedb, 0x006ebedb, 0x00aebedb, 0x00eebedb, 0x002fbedb, 0x006fbedb,\n  0x00afbedb, 0x00efbedb, 0x002cb2eb, 0x006cb2eb, 0x00acb2eb, 0x00ecb2eb,\n  0x002db2eb, 0x006db2eb, 0x00adb2eb, 0x00edb2eb, 0x002eb2eb, 0x006eb2eb,\n  0x00aeb2eb, 0x00eeb2eb, 0x002fb2eb, 0x006fb2eb, 0x00afb2eb, 0x00efb2eb,\n  0x002cb6eb, 0x006cb6eb, 0x00acb6eb, 0x00ecb6eb, 0x002db6eb, 0x006db6eb,\n  0x00adb6eb, 0x00edb6eb, 0x002eb6eb, 0x006eb6eb, 0x00aeb6eb, 0x00eeb6eb,\n  0x002fb6eb, 0x006fb6eb, 0x00afb6eb, 0x00efb6eb, 0x002cbaeb, 0x006cbaeb,\n  0x00acbaeb, 0x00ecbaeb, 0x002dbaeb, 0x006dbaeb, 0x00adbaeb, 0x00edbaeb,\n  0x002ebaeb, 0x006ebaeb, 0x00aebaeb, 0x00eebaeb, 0x002fbaeb, 0x006fbaeb,\n  0x00afbaeb, 0x00efbaeb, 0x002cbeeb, 0x006cbeeb, 0x00acbeeb, 0x00ecbeeb,\n  0x002dbeeb, 0x006dbeeb, 0x00adbeeb, 0x00edbeeb, 0x002ebeeb, 0x006ebeeb,\n  0x00aebeeb, 0x00eebeeb, 0x002fbeeb, 0x006fbeeb, 0x00afbeeb, 0x00efbeeb,\n  0x002cb2fb, 0x006cb2fb, 0x00acb2fb, 0x00ecb2fb, 0x002db2fb, 0x006db2fb,\n  0x00adb2fb, 0x00edb2fb, 0x002eb2fb, 0x006eb2fb, 0x00aeb2fb, 0x00eeb2fb,\n  0x002fb2fb, 0x006fb2fb, 0x00afb2fb, 0x00efb2fb, 0x002cb6fb, 0x006cb6fb,\n  0x00acb6fb, 0x00ecb6fb, 0x002db6fb, 0x006db6fb, 0x00adb6fb, 0x00edb6fb,\n  0x002eb6fb, 0x006eb6fb, 0x00aeb6fb, 0x00eeb6fb, 0x002fb6fb, 0x006fb6fb,\n  0x00afb6fb, 0x00efb6fb, 0x002cbafb, 0x006cbafb, 0x00acbafb, 0x00ecbafb,\n  0x002dbafb, 0x006dbafb, 0x00adbafb, 0x00edbafb, 0x002ebafb, 0x006ebafb,\n  0x00aebafb, 0x00eebafb, 0x002fbafb, 0x006fbafb, 0x00afbafb, 0x00efbafb,\n  0x002cbefb, 0x006cbefb, 0x00acbefb, 0x00ecbefb, 0x002dbefb, 0x006dbefb,\n  0x00adbefb, 0x00edbefb, 0x002ebefb, 0x006ebefb, 0x00aebefb, 0x00eebefb,\n  0x002fbefb, 0x006fbefb, 0x00afbefb, 0x00efbefb, 0x0b2cb2cb, 0x1b2cb2cb,\n  0x2b2cb2cb, 0x3b2cb2cb, 0x0b6cb2cb, 0x1b6cb2cb, 0x2b6cb2cb, 0x3b6cb2cb,\n  0x0bacb2cb, 0x1bacb2cb, 0x2bacb2cb, 0x3bacb2cb, 0x0becb2cb, 0x1becb2cb,\n  0x2becb2cb, 0x3becb2cb, 0x0b2db2cb, 0x1b2db2cb, 0x2b2db2cb, 0x3b2db2cb,\n  0x0b6db2cb, 0x1b6db2cb, 0x2b6db2cb, 0x3b6db2cb, 0x0badb2cb, 0x1badb2cb,\n  0x2badb2cb, 0x3badb2cb, 0x0bedb2cb, 0x1bedb2cb, 0x2bedb2cb, 0x3bedb2cb,\n  0x0b2eb2cb, 0x1b2eb2cb, 0x2b2eb2cb, 0x3b2eb2cb, 0x0b6eb2cb, 0x1b6eb2cb,\n  0x2b6eb2cb, 0x3b6eb2cb, 0x0baeb2cb, 0x1baeb2cb, 0x2baeb2cb, 0x3baeb2cb,\n  0x0beeb2cb, 0x1beeb2cb, 0x2beeb2cb, 0x3beeb2cb, 0x0b2fb2cb, 0x1b2fb2cb,\n  0x2b2fb2cb, 0x3b2fb2cb, 0x0b6fb2cb, 0x1b6fb2cb, 0x2b6fb2cb, 0x3b6fb2cb,\n  0x0bafb2cb, 0x1bafb2cb, 0x2bafb2cb, 0x3bafb2cb, 0x0befb2cb, 0x1befb2cb,\n  0x2befb2cb, 0x3befb2cb, 0x0b2cb6cb, 0x1b2cb6cb, 0x2b2cb6cb, 0x3b2cb6cb,\n  0x0b6cb6cb, 0x1b6cb6cb, 0x2b6cb6cb, 0x3b6cb6cb, 0x0bacb6cb, 0x1bacb6cb,\n  0x2bacb6cb, 0x3bacb6cb, 0x0becb6cb, 0x1becb6cb, 0x2becb6cb, 0x3becb6cb,\n  0x0b2db6cb, 0x1b2db6cb, 0x2b2db6cb, 0x3b2db6cb, 0x0b6db6cb, 0x1b6db6cb,\n  0x2b6db6cb, 0x3b6db6cb, 0x0badb6cb, 0x1badb6cb, 0x2badb6cb, 0x3badb6cb,\n  0x0bedb6cb, 0x1bedb6cb, 0x2bedb6cb, 0x3bedb6cb, 0x0b2eb6cb, 0x1b2eb6cb,\n  0x2b2eb6cb, 0x3b2eb6cb, 0x0b6eb6cb, 0x1b6eb6cb, 0x2b6eb6cb, 0x3b6eb6cb,\n  0x0baeb6cb, 0x1baeb6cb, 0x2baeb6cb, 0x3baeb6cb, 0x0beeb6cb, 0x1beeb6cb,\n  0x2beeb6cb, 0x3beeb6cb, 0x0b2fb6cb, 0x1b2fb6cb, 0x2b2fb6cb, 0x3b2fb6cb,\n  0x0b6fb6cb, 0x1b6fb6cb, 0x2b6fb6cb, 0x3b6fb6cb, 0x0bafb6cb, 0x1bafb6cb,\n  0x2bafb6cb, 0x3bafb6cb, 0x0befb6cb, 0x1befb6cb, 0x2befb6cb, 0x3befb6cb,\n  0x0b2cbacb, 0x1b2cbacb, 0x2b2cbacb, 0x3b2cbacb, 0x0b6cbacb, 0x1b6cbacb,\n  0x2b6cbacb, 0x3b6cbacb, 0x0bacbacb, 0x1bacbacb, 0x2bacbacb, 0x3bacbacb,\n  0x0becbacb, 0x1becbacb, 0x2becbacb, 0x3becbacb, 0x0b2dbacb, 0x1b2dbacb,\n  0x2b2dbacb, 0x3b2dbacb, 0x0b6dbacb, 0x1b6dbacb, 0x2b6dbacb, 0x3b6dbacb,\n  0x0badbacb, 0x1badbacb, 0x2badbacb, 0x3badbacb, 0x0bedbacb, 0x1bedbacb,\n  0x2bedbacb, 0x3bedbacb, 0x0b2ebacb, 0x1b2ebacb, 0x2b2ebacb, 0x3b2ebacb,\n  0x0b6ebacb, 0x1b6ebacb, 0x2b6ebacb, 0x3b6ebacb, 0x0baebacb, 0x1baebacb,\n  0x2baebacb, 0x3baebacb, 0x0beebacb, 0x1beebacb, 0x2beebacb, 0x3beebacb,\n  0x0b2fbacb, 0x1b2fbacb, 0x2b2fbacb, 0x3b2fbacb, 0x0b6fbacb, 0x1b6fbacb,\n  0x2b6fbacb, 0x3b6fbacb, 0x0bafbacb, 0x1bafbacb, 0x2bafbacb, 0x3bafbacb,\n  0x0befbacb, 0x1befbacb, 0x2befbacb, 0x3befbacb, 0x0b2cbecb, 0x1b2cbecb,\n  0x2b2cbecb, 0x3b2cbecb, 0x0b6cbecb, 0x1b6cbecb, 0x2b6cbecb, 0x3b6cbecb,\n  0x0bacbecb, 0x1bacbecb, 0x2bacbecb, 0x3bacbecb, 0x0becbecb, 0x1becbecb,\n  0x2becbecb, 0x3becbecb, 0x0b2dbecb, 0x1b2dbecb, 0x2b2dbecb, 0x3b2dbecb,\n  0x0b6dbecb, 0x1b6dbecb, 0x2b6dbecb, 0x3b6dbecb, 0x0badbecb, 0x1badbecb,\n  0x2badbecb, 0x3badbecb, 0x0bedbecb, 0x1bedbecb, 0x2bedbecb, 0x3bedbecb,\n  0x0b2ebecb, 0x1b2ebecb, 0x2b2ebecb, 0x3b2ebecb, 0x0b6ebecb, 0x1b6ebecb,\n  0x2b6ebecb, 0x3b6ebecb, 0x0baebecb, 0x1baebecb, 0x2baebecb, 0x3baebecb,\n  0x0beebecb, 0x1beebecb, 0x2beebecb, 0x3beebecb, 0x0b2fbecb, 0x1b2fbecb,\n  0x2b2fbecb, 0x3b2fbecb, 0x0b6fbecb, 0x1b6fbecb, 0x2b6fbecb, 0x3b6fbecb,\n  0x0bafbecb, 0x1bafbecb, 0x2bafbecb, 0x3bafbecb, 0x0befbecb, 0x1befbecb,\n  0x2befbecb, 0x3befbecb, 0x0b2cb2db, 0x1b2cb2db, 0x2b2cb2db, 0x3b2cb2db,\n  0x0b6cb2db, 0x1b6cb2db, 0x2b6cb2db, 0x3b6cb2db, 0x0bacb2db, 0x1bacb2db,\n  0x2bacb2db, 0x3bacb2db, 0x0becb2db, 0x1becb2db, 0x2becb2db, 0x3becb2db,\n  0x0b2db2db, 0x1b2db2db, 0x2b2db2db, 0x3b2db2db, 0x0b6db2db, 0x1b6db2db,\n  0x2b6db2db, 0x3b6db2db, 0x0badb2db, 0x1badb2db, 0x2badb2db, 0x3badb2db,\n  0x0bedb2db, 0x1bedb2db, 0x2bedb2db, 0x3bedb2db, 0x0b2eb2db, 0x1b2eb2db,\n  0x2b2eb2db, 0x3b2eb2db, 0x0b6eb2db, 0x1b6eb2db, 0x2b6eb2db, 0x3b6eb2db,\n  0x0baeb2db, 0x1baeb2db, 0x2baeb2db, 0x3baeb2db, 0x0beeb2db, 0x1beeb2db,\n  0x2beeb2db, 0x3beeb2db, 0x0b2fb2db, 0x1b2fb2db, 0x2b2fb2db, 0x3b2fb2db,\n  0x0b6fb2db, 0x1b6fb2db, 0x2b6fb2db, 0x3b6fb2db, 0x0bafb2db, 0x1bafb2db,\n  0x2bafb2db, 0x3bafb2db, 0x0befb2db, 0x1befb2db, 0x2befb2db, 0x3befb2db,\n  0x0b2cb6db, 0x1b2cb6db, 0x2b2cb6db, 0x3b2cb6db, 0x0b6cb6db, 0x1b6cb6db,\n  0x2b6cb6db, 0x3b6cb6db, 0x0bacb6db, 0x1bacb6db, 0x2bacb6db, 0x3bacb6db,\n  0x0becb6db, 0x1becb6db, 0x2becb6db, 0x3becb6db, 0x0b2db6db, 0x1b2db6db,\n  0x2b2db6db, 0x3b2db6db, 0x0b6db6db, 0x1b6db6db, 0x2b6db6db, 0x3b6db6db,\n  0x0badb6db, 0x1badb6db, 0x2badb6db, 0x3badb6db, 0x0bedb6db, 0x1bedb6db,\n  0x2bedb6db, 0x3bedb6db, 0x0b2eb6db, 0x1b2eb6db, 0x2b2eb6db, 0x3b2eb6db,\n  0x0b6eb6db, 0x1b6eb6db, 0x2b6eb6db, 0x3b6eb6db, 0x0baeb6db, 0x1baeb6db,\n  0x2baeb6db, 0x3baeb6db,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint32_t kNonZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {\n   6,  6,  6,  6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,\n  12, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,\n  18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,\n  18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,\n  18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,\n  18, 18, 18, 18, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n  24, 24, 24, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n  30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,\n};\n\nstatic const BROTLI_MODEL(\"small\")\nuint16_t kStaticCommandCodeBits[BROTLI_NUM_COMMAND_SYMBOLS] = {\n    0,  256,  128,  384,   64,  320,  192,  448,\n   32,  288,  160,  416,   96,  352,  224,  480,\n   16,  272,  144,  400,   80,  336,  208,  464,\n   48,  304,  176,  432,  112,  368,  240,  496,\n    8,  264,  136,  392,   72,  328,  200,  456,\n   40,  296,  168,  424,  104,  360,  232,  488,\n   24,  280,  152,  408,   88,  344,  216,  472,\n   56,  312,  184,  440,  120,  376,  248,  504,\n    4,  260,  132,  388,   68,  324,  196,  452,\n   36,  292,  164,  420,  100,  356,  228,  484,\n   20,  276,  148,  404,   84,  340,  212,  468,\n   52,  308,  180,  436,  116,  372,  244,  500,\n   12,  268,  140,  396,   76,  332,  204,  460,\n   44,  300,  172,  428,  108,  364,  236,  492,\n   28,  284,  156,  412,   92,  348,  220,  476,\n   60,  316,  188,  444,  124,  380,  252,  508,\n    2,  258,  130,  386,   66,  322,  194,  450,\n   34,  290,  162,  418,   98,  354,  226,  482,\n   18,  274,  146,  402,   82,  338,  210,  466,\n   50,  306,  178,  434,  114,  370,  242,  498,\n   10,  266,  138,  394,   74,  330,  202,  458,\n   42,  298,  170,  426,  106,  362,  234,  490,\n   26,  282,  154,  410,   90,  346,  218,  474,\n   58,  314,  186,  442,  122,  378,  250,  506,\n    6,  262,  134,  390,   70,  326,  198,  454,\n   38,  294,  166,  422,  102,  358,  230,  486,\n   22,  278,  150,  406,   86,  342,  214,  470,\n   54,  310,  182,  438,  118,  374,  246,  502,\n   14,  270,  142,  398,   78,  334,  206,  462,\n   46,  302,  174,  430,  110,  366,  238,  494,\n   30,  286,  158,  414,   94,  350,  222,  478,\n   62,  318,  190,  446,  126,  382,  254,  510,\n    1,  257,  129,  385,   65,  321,  193,  449,\n   33,  289,  161,  417,   97,  353,  225,  481,\n   17,  273,  145,  401,   81,  337,  209,  465,\n   49,  305,  177,  433,  113,  369,  241,  497,\n    9,  265,  137,  393,   73,  329,  201,  457,\n   41,  297,  169,  425,  105,  361,  233,  489,\n   25,  281,  153,  409,   89,  345,  217,  473,\n   57,  313,  185,  441,  121,  377,  249,  505,\n    5,  261,  133,  389,   69,  325,  197,  453,\n   37,  293,  165,  421,  101,  357,  229,  485,\n   21,  277,  149,  405,   85,  341,  213,  469,\n   53,  309,  181,  437,  117,  373,  245,  501,\n   13,  269,  141,  397,   77,  333,  205,  461,\n   45,  301,  173,  429,  109,  365,  237,  493,\n   29,  285,  157,  413,   93,  349,  221,  477,\n   61,  317,  189,  445,  125,  381,  253,  509,\n    3,  259,  131,  387,   67,  323,  195,  451,\n   35,  291,  163,  419,   99,  355,  227,  483,\n   19,  275,  147,  403,   83,  339,  211,  467,\n   51,  307,  179,  435,  115,  371,  243,  499,\n   11,  267,  139,  395,   75,  331,  203,  459,\n   43,  299,  171,  427,  107,  363,  235,  491,\n   27,  283,  155,  411,   91,  347,  219,  475,\n   59,  315,  187,  443,  123,  379,  251,  507,\n    7, 1031,  519, 1543,  263, 1287,  775, 1799,\n  135, 1159,  647, 1671,  391, 1415,  903, 1927,\n   71, 1095,  583, 1607,  327, 1351,  839, 1863,\n  199, 1223,  711, 1735,  455, 1479,  967, 1991,\n   39, 1063,  551, 1575,  295, 1319,  807, 1831,\n  167, 1191,  679, 1703,  423, 1447,  935, 1959,\n  103, 1127,  615, 1639,  359, 1383,  871, 1895,\n  231, 1255,  743, 1767,  487, 1511,  999, 2023,\n   23, 1047,  535, 1559,  279, 1303,  791, 1815,\n  151, 1175,  663, 1687,  407, 1431,  919, 1943,\n   87, 1111,  599, 1623,  343, 1367,  855, 1879,\n  215, 1239,  727, 1751,  471, 1495,  983, 2007,\n   55, 1079,  567, 1591,  311, 1335,  823, 1847,\n  183, 1207,  695, 1719,  439, 1463,  951, 1975,\n  119, 1143,  631, 1655,  375, 1399,  887, 1911,\n  247, 1271,  759, 1783,  503, 1527, 1015, 2039,\n   15, 1039,  527, 1551,  271, 1295,  783, 1807,\n  143, 1167,  655, 1679,  399, 1423,  911, 1935,\n   79, 1103,  591, 1615,  335, 1359,  847, 1871,\n  207, 1231,  719, 1743,  463, 1487,  975, 1999,\n   47, 1071,  559, 1583,  303, 1327,  815, 1839,\n  175, 1199,  687, 1711,  431, 1455,  943, 1967,\n  111, 1135,  623, 1647,  367, 1391,  879, 1903,\n  239, 1263,  751, 1775,  495, 1519, 1007, 2031,\n   31, 1055,  543, 1567,  287, 1311,  799, 1823,\n  159, 1183,  671, 1695,  415, 1439,  927, 1951,\n   95, 1119,  607, 1631,  351, 1375,  863, 1887,\n  223, 1247,  735, 1759,  479, 1503,  991, 2015,\n   63, 1087,  575, 1599,  319, 1343,  831, 1855,\n  191, 1215,  703, 1727,  447, 1471,  959, 1983,\n  127, 1151,  639, 1663,  383, 1407,  895, 1919,\n  255, 1279,  767, 1791,  511, 1535, 1023, 2047,\n};\n\nstatic BROTLI_INLINE void StoreStaticCommandHuffmanTree(\n    size_t* storage_ix, uint8_t* storage) {\n  BrotliWriteBits(\n      56, BROTLI_MAKE_UINT64_T(0x926244U, 0x16307003U), storage_ix, storage);\n  BrotliWriteBits(3, 0x00000000U, storage_ix, storage);\n}\n\nstatic const BROTLI_MODEL(\"small\") uint16_t kStaticDistanceCodeBits[64] = {\n   0, 32, 16, 48,  8, 40, 24, 56,  4, 36, 20, 52, 12, 44, 28, 60,\n   2, 34, 18, 50, 10, 42, 26, 58,  6, 38, 22, 54, 14, 46, 30, 62,\n   1, 33, 17, 49,  9, 41, 25, 57,  5, 37, 21, 53, 13, 45, 29, 61,\n   3, 35, 19, 51, 11, 43, 27, 59,  7, 39, 23, 55, 15, 47, 31, 63,\n};\n\nstatic BROTLI_INLINE void StoreStaticDistanceHuffmanTree(\n    size_t* storage_ix, uint8_t* storage) {\n  BrotliWriteBits(28, 0x0369DC03u, storage_ix, storage);\n}\n/* GENERATED CODE END */\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/fast_log.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"fast_log.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* \", \".join([\"%.16ff\" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */\nconst BROTLI_MODEL(\"small\") double kBrotliLog2Table[BROTLI_LOG2_TABLE_SIZE] = {\n  0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f,\n  1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f,\n  2.5849625007211561f, 2.8073549220576042f, 3.0000000000000000f,\n  3.1699250014423126f, 3.3219280948873626f, 3.4594316186372978f,\n  3.5849625007211565f, 3.7004397181410922f, 3.8073549220576037f,\n  3.9068905956085187f, 4.0000000000000000f, 4.0874628412503400f,\n  4.1699250014423122f, 4.2479275134435852f, 4.3219280948873626f,\n  4.3923174227787607f, 4.4594316186372973f, 4.5235619560570131f,\n  4.5849625007211570f, 4.6438561897747244f, 4.7004397181410926f,\n  4.7548875021634691f, 4.8073549220576037f, 4.8579809951275728f,\n  4.9068905956085187f, 4.9541963103868758f, 5.0000000000000000f,\n  5.0443941193584534f, 5.0874628412503400f, 5.1292830169449664f,\n  5.1699250014423122f, 5.2094533656289501f, 5.2479275134435852f,\n  5.2854022188622487f, 5.3219280948873626f, 5.3575520046180838f,\n  5.3923174227787607f, 5.4262647547020979f, 5.4594316186372973f,\n  5.4918530963296748f, 5.5235619560570131f, 5.5545888516776376f,\n  5.5849625007211570f, 5.6147098441152083f, 5.6438561897747244f,\n  5.6724253419714961f, 5.7004397181410926f, 5.7279204545631996f,\n  5.7548875021634691f, 5.7813597135246599f, 5.8073549220576046f,\n  5.8328900141647422f, 5.8579809951275719f, 5.8826430493618416f,\n  5.9068905956085187f, 5.9307373375628867f, 5.9541963103868758f,\n  5.9772799234999168f, 6.0000000000000000f, 6.0223678130284544f,\n  6.0443941193584534f, 6.0660891904577721f, 6.0874628412503400f,\n  6.1085244567781700f, 6.1292830169449672f, 6.1497471195046822f,\n  6.1699250014423122f, 6.1898245588800176f, 6.2094533656289510f,\n  6.2288186904958804f, 6.2479275134435861f, 6.2667865406949019f,\n  6.2854022188622487f, 6.3037807481771031f, 6.3219280948873617f,\n  6.3398500028846252f, 6.3575520046180847f, 6.3750394313469254f,\n  6.3923174227787598f, 6.4093909361377026f, 6.4262647547020979f,\n  6.4429434958487288f, 6.4594316186372982f, 6.4757334309663976f,\n  6.4918530963296748f, 6.5077946401986964f, 6.5235619560570131f,\n  6.5391588111080319f, 6.5545888516776376f, 6.5698556083309478f,\n  6.5849625007211561f, 6.5999128421871278f, 6.6147098441152092f,\n  6.6293566200796095f, 6.6438561897747253f, 6.6582114827517955f,\n  6.6724253419714952f, 6.6865005271832185f, 6.7004397181410917f,\n  6.7142455176661224f, 6.7279204545631988f, 6.7414669864011465f,\n  6.7548875021634691f, 6.7681843247769260f, 6.7813597135246599f,\n  6.7944158663501062f, 6.8073549220576037f, 6.8201789624151887f,\n  6.8328900141647422f, 6.8454900509443757f, 6.8579809951275719f,\n  6.8703647195834048f, 6.8826430493618416f, 6.8948177633079437f,\n  6.9068905956085187f, 6.9188632372745955f, 6.9307373375628867f,\n  6.9425145053392399f, 6.9541963103868758f, 6.9657842846620879f,\n  6.9772799234999168f, 6.9886846867721664f, 7.0000000000000000f,\n  7.0112272554232540f, 7.0223678130284544f, 7.0334230015374501f,\n  7.0443941193584534f, 7.0552824355011898f, 7.0660891904577721f,\n  7.0768155970508317f, 7.0874628412503400f, 7.0980320829605272f,\n  7.1085244567781700f, 7.1189410727235076f, 7.1292830169449664f,\n  7.1395513523987937f, 7.1497471195046822f, 7.1598713367783891f,\n  7.1699250014423130f, 7.1799090900149345f, 7.1898245588800176f,\n  7.1996723448363644f, 7.2094533656289492f, 7.2191685204621621f,\n  7.2288186904958804f, 7.2384047393250794f, 7.2479275134435861f,\n  7.2573878426926521f, 7.2667865406949019f, 7.2761244052742384f,\n  7.2854022188622487f, 7.2946207488916270f, 7.3037807481771031f,\n  7.3128829552843557f, 7.3219280948873617f, 7.3309168781146177f,\n  7.3398500028846243f, 7.3487281542310781f, 7.3575520046180847f,\n  7.3663222142458151f, 7.3750394313469254f, 7.3837042924740528f,\n  7.3923174227787607f, 7.4008794362821844f, 7.4093909361377026f,\n  7.4178525148858991f, 7.4262647547020979f, 7.4346282276367255f,\n  7.4429434958487288f, 7.4512111118323299f, 7.4594316186372973f,\n  7.4676055500829976f, 7.4757334309663976f, 7.4838157772642564f,\n  7.4918530963296748f, 7.4998458870832057f, 7.5077946401986964f,\n  7.5156998382840436f, 7.5235619560570131f, 7.5313814605163119f,\n  7.5391588111080319f, 7.5468944598876373f, 7.5545888516776376f,\n  7.5622424242210728f, 7.5698556083309478f, 7.5774288280357487f,\n  7.5849625007211561f, 7.5924570372680806f, 7.5999128421871278f,\n  7.6073303137496113f, 7.6147098441152075f, 7.6220518194563764f,\n  7.6293566200796095f, 7.6366246205436488f, 7.6438561897747244f,\n  7.6510516911789290f, 7.6582114827517955f, 7.6653359171851765f,\n  7.6724253419714952f, 7.6794800995054464f, 7.6865005271832185f,\n  7.6934869574993252f, 7.7004397181410926f, 7.7073591320808825f,\n  7.7142455176661224f, 7.7210991887071856f, 7.7279204545631996f,\n  7.7347096202258392f, 7.7414669864011465f, 7.7481928495894596f,\n  7.7548875021634691f, 7.7615512324444795f, 7.7681843247769260f,\n  7.7747870596011737f, 7.7813597135246608f, 7.7879025593914317f,\n  7.7944158663501062f, 7.8008998999203047f, 7.8073549220576037f,\n  7.8137811912170374f, 7.8201789624151887f, 7.8265484872909159f,\n  7.8328900141647422f, 7.8392037880969445f, 7.8454900509443757f,\n  7.8517490414160571f, 7.8579809951275719f, 7.8641861446542798f,\n  7.8703647195834048f, 7.8765169465650002f, 7.8826430493618425f,\n  7.8887432488982601f, 7.8948177633079446f, 7.9008668079807496f,\n  7.9068905956085187f, 7.9128893362299619f, 7.9188632372745955f,\n  7.9248125036057813f, 7.9307373375628867f, 7.9366379390025719f,\n  7.9425145053392399f, 7.9483672315846778f, 7.9541963103868758f,\n  7.9600019320680806f, 7.9657842846620870f, 7.9715435539507720f,\n  7.9772799234999168f, 7.9829935746943104f, 7.9886846867721664f,\n  7.9943534368588578f\n};\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/fast_log.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Utilities for fast computation of logarithms. */\n\n#ifndef BROTLI_ENC_FAST_LOG_H_\n#define BROTLI_ENC_FAST_LOG_H_\n\n#include <math.h>\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) {\n#if defined(BROTLI_BSR32)\n  return BROTLI_BSR32((uint32_t)n);\n#else\n  uint32_t result = 0;\n  while (n >>= 1) result++;\n  return result;\n#endif\n}\n\n#define BROTLI_LOG2_TABLE_SIZE 256\n\n/* A lookup table for small values of log2(int) to be used in entropy\n   computation. */\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\")\ndouble kBrotliLog2Table[BROTLI_LOG2_TABLE_SIZE];\n\n/* Visual Studio 2012 and Android API levels < 18 do not have the log2()\n * function defined, so we use log() and a multiplication instead. */\n#if !defined(BROTLI_HAVE_LOG2)\n#if ((defined(_MSC_VER) && _MSC_VER <= 1700) || \\\n     (defined(__ANDROID_API__) && __ANDROID_API__ < 18))\n#define BROTLI_HAVE_LOG2 0\n#else\n#define BROTLI_HAVE_LOG2 1\n#endif\n#endif\n\n#define LOG_2_INV 1.4426950408889634\n\n/* Faster logarithm for small integers, with the property of log2(0) == 0. */\nstatic BROTLI_INLINE double FastLog2(size_t v) {\n  if (v < BROTLI_LOG2_TABLE_SIZE) {\n    return kBrotliLog2Table[v];\n  }\n#if !(BROTLI_HAVE_LOG2)\n  return log((double)v) * LOG_2_INV;\n#else\n  return log2((double)v);\n#endif\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_FAST_LOG_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/find_match_length.h",
    "content": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Function to find maximal matching prefixes of strings. */\n\n#ifndef BROTLI_ENC_FIND_MATCH_LENGTH_H_\n#define BROTLI_ENC_FIND_MATCH_LENGTH_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* Separate implementation for little-endian 64-bit targets, for speed. */\n#if defined(BROTLI_TZCNT64) && BROTLI_64_BITS && BROTLI_LITTLE_ENDIAN\nstatic BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,\n                                                     const uint8_t* s2,\n                                                     size_t limit) {\n  const uint8_t *s1_orig = s1;\n  for (; limit >= 8; limit -= 8) {\n    uint64_t x = BROTLI_UNALIGNED_LOAD64LE(s2) ^\n                 BROTLI_UNALIGNED_LOAD64LE(s1);\n    s2 += 8;\n    if (x != 0) {\n      size_t matching_bits = (size_t)BROTLI_TZCNT64(x);\n      return (size_t)(s1 - s1_orig) + (matching_bits >> 3);\n    }\n    s1 += 8;\n  }\n  while (limit && *s1 == *s2) {\n    limit--;\n    ++s2;\n    ++s1;\n  }\n  return (size_t)(s1 - s1_orig);\n}\n#else\nstatic BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,\n                                                     const uint8_t* s2,\n                                                     size_t limit) {\n  size_t matched = 0;\n  const uint8_t* s2_limit = s2 + limit;\n  const uint8_t* s2_ptr = s2;\n  /* Find out how long the match is. We loop over the data 32 bits at a\n     time until we find a 32-bit block that doesn't match; then we find\n     the first non-matching bit and use that to calculate the total\n     length of the match. */\n  while (s2_ptr <= s2_limit - 4 &&\n         BrotliUnalignedRead32(s2_ptr) ==\n         BrotliUnalignedRead32(s1 + matched)) {\n    s2_ptr += 4;\n    matched += 4;\n  }\n  while ((s2_ptr < s2_limit) && (s1[matched] == *s2_ptr)) {\n    ++s2_ptr;\n    ++matched;\n  }\n  return matched;\n}\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_FIND_MATCH_LENGTH_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/hash.h",
    "content": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data. */\n\n#ifndef BROTLI_ENC_HASH_H_\n#define BROTLI_ENC_HASH_H_\n\n#include \"../common/constants.h\"\n#include \"../common/dictionary.h\"\n#include \"../common/platform.h\"\n#include \"compound_dictionary.h\"\n#include \"encoder_dict.h\"\n#include \"fast_log.h\"\n#include \"find_match_length.h\"\n#include \"hash_base.h\"\n#include \"matching_tag_mask.h\"\n#include \"memory.h\"\n#include \"params.h\"\n#include \"quality.h\"\n#include \"static_dict.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct {\n  /**\n   * Dynamically allocated areas; regular hasher uses one or two allocations;\n   * \"composite\" hasher uses up to 4 allocations.\n   */\n  void* extra[4];\n\n  /**\n   * False before the first invocation of HasherSetup (where \"extra\" memory)\n   * is allocated.\n   */\n  BROTLI_BOOL is_setup_;\n\n  size_t dict_num_lookups;\n  size_t dict_num_matches;\n\n  BrotliHasherParams params;\n\n  /**\n   * False if hasher needs to be \"prepared\" before use (before the first\n   * invocation of HasherSetup or after HasherReset). \"preparation\" is hasher\n   * data initialization (using input ringbuffer).\n   */\n  BROTLI_BOOL is_prepared_;\n} HasherCommon;\n\n#define score_t size_t\n\nstatic const uint32_t kCutoffTransformsCount = 10;\n/*   0,  12,   27,    23,    42,    63,    56,    48,    59,    64 */\n/* 0+0, 4+8, 8+19, 12+11, 16+26, 20+43, 24+32, 28+20, 32+27, 36+28 */\nstatic const uint64_t kCutoffTransforms =\n    BROTLI_MAKE_UINT64_T(0x071B520A, 0xDA2D3200);\n\ntypedef struct HasherSearchResult {\n  size_t len;\n  size_t distance;\n  score_t score;\n  int len_code_delta; /* == len_code - len */\n} HasherSearchResult;\n\nstatic BROTLI_INLINE void PrepareDistanceCache(\n    int* BROTLI_RESTRICT distance_cache, const int num_distances) {\n  if (num_distances > 4) {\n    int last_distance = distance_cache[0];\n    distance_cache[4] = last_distance - 1;\n    distance_cache[5] = last_distance + 1;\n    distance_cache[6] = last_distance - 2;\n    distance_cache[7] = last_distance + 2;\n    distance_cache[8] = last_distance - 3;\n    distance_cache[9] = last_distance + 3;\n    if (num_distances > 10) {\n      int next_last_distance = distance_cache[1];\n      distance_cache[10] = next_last_distance - 1;\n      distance_cache[11] = next_last_distance + 1;\n      distance_cache[12] = next_last_distance - 2;\n      distance_cache[13] = next_last_distance + 2;\n      distance_cache[14] = next_last_distance - 3;\n      distance_cache[15] = next_last_distance + 3;\n    }\n  }\n}\n\n#define BROTLI_LITERAL_BYTE_SCORE 135\n#define BROTLI_DISTANCE_BIT_PENALTY 30\n/* Score must be positive after applying maximal penalty. */\n#define BROTLI_SCORE_BASE (BROTLI_DISTANCE_BIT_PENALTY * 8 * sizeof(size_t))\n\n/* Usually, we always choose the longest backward reference. This function\n   allows for the exception of that rule.\n\n   If we choose a backward reference that is further away, it will\n   usually be coded with more bits. We approximate this by assuming\n   log2(distance). If the distance can be expressed in terms of the\n   last four distances, we use some heuristic constants to estimate\n   the bits cost. For the first up to four literals we use the bit\n   cost of the literals from the literal cost model, after that we\n   use the average bit cost of the cost model.\n\n   This function is used to sometimes discard a longer backward reference\n   when it is not much longer and the bit cost for encoding it is more\n   than the saved literals.\n\n   backward_reference_offset MUST be positive. */\nstatic BROTLI_INLINE score_t BackwardReferenceScore(\n    size_t copy_length, size_t backward_reference_offset) {\n  return BROTLI_SCORE_BASE + BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length -\n      BROTLI_DISTANCE_BIT_PENALTY * Log2FloorNonZero(backward_reference_offset);\n}\n\nstatic BROTLI_INLINE score_t BackwardReferenceScoreUsingLastDistance(\n    size_t copy_length) {\n  return BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length +\n      BROTLI_SCORE_BASE + 15;\n}\n\nstatic BROTLI_INLINE score_t BackwardReferencePenaltyUsingLastDistance(\n    size_t distance_short_code) {\n  return (score_t)39 + ((0x1CA10 >> (distance_short_code & 0xE)) & 0xE);\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem(\n    const BrotliEncoderDictionary* dictionary, size_t len, size_t word_idx,\n    const uint8_t* data, size_t max_length, size_t max_backward,\n    size_t max_distance, HasherSearchResult* out) {\n  size_t offset;\n  size_t matchlen;\n  size_t backward;\n  score_t score;\n  offset = dictionary->words->offsets_by_length[len] + len * word_idx;\n  if (len > max_length) {\n    return BROTLI_FALSE;\n  }\n\n  matchlen =\n      FindMatchLengthWithLimit(data, &dictionary->words->data[offset], len);\n  if (matchlen + dictionary->cutoffTransformsCount <= len || matchlen == 0) {\n    return BROTLI_FALSE;\n  }\n  {\n    size_t cut = len - matchlen;\n    size_t transform_id = (cut << 2) +\n        (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);\n    backward = max_backward + 1 + word_idx +\n        (transform_id << dictionary->words->size_bits_by_length[len]);\n  }\n  if (backward > max_distance) {\n    return BROTLI_FALSE;\n  }\n  score = BackwardReferenceScore(matchlen, backward);\n  if (score < out->score) {\n    return BROTLI_FALSE;\n  }\n  out->len = matchlen;\n  out->len_code_delta = (int)len - (int)matchlen;\n  out->distance = backward;\n  out->score = score;\n  return BROTLI_TRUE;\n}\n\nstatic BROTLI_INLINE void SearchInStaticDictionary(\n    const BrotliEncoderDictionary* dictionary,\n    HasherCommon* common, const uint8_t* data, size_t max_length,\n    size_t max_backward, size_t max_distance,\n    HasherSearchResult* out, BROTLI_BOOL shallow) {\n  size_t key;\n  size_t i;\n  if (common->dict_num_matches < (common->dict_num_lookups >> 7)) {\n    return;\n  }\n  key = Hash14(data) << 1;\n  for (i = 0; i < (shallow ? 1u : 2u); ++i, ++key) {\n    common->dict_num_lookups++;\n    if (dictionary->hash_table_lengths[key] != 0) {\n      BROTLI_BOOL item_matches = TestStaticDictionaryItem(\n          dictionary, dictionary->hash_table_lengths[key],\n          dictionary->hash_table_words[key], data,\n          max_length, max_backward, max_distance, out);\n      if (item_matches) {\n        common->dict_num_matches++;\n      }\n    }\n  }\n}\n\ntypedef struct BackwardMatch {\n  uint32_t distance;\n  uint32_t length_and_code;\n} BackwardMatch;\n\nstatic BROTLI_INLINE void InitBackwardMatch(BackwardMatch* self,\n    size_t dist, size_t len) {\n  self->distance = (uint32_t)dist;\n  self->length_and_code = (uint32_t)(len << 5);\n}\n\nstatic BROTLI_INLINE void InitDictionaryBackwardMatch(BackwardMatch* self,\n    size_t dist, size_t len, size_t len_code) {\n  self->distance = (uint32_t)dist;\n  self->length_and_code =\n      (uint32_t)((len << 5) | (len == len_code ? 0 : len_code));\n}\n\nstatic BROTLI_INLINE size_t BackwardMatchLength(const BackwardMatch* self) {\n  return self->length_and_code >> 5;\n}\n\nstatic BROTLI_INLINE size_t BackwardMatchLengthCode(const BackwardMatch* self) {\n  size_t code = self->length_and_code & 31;\n  return code ? code : BackwardMatchLength(self);\n}\n\n#define EXPAND_CAT(a, b) CAT(a, b)\n#define CAT(a, b) a ## b\n#define FN(X) EXPAND_CAT(X, HASHER())\n\n#define HASHER() H10\n#define BUCKET_BITS 17\n#define MAX_TREE_SEARCH_DEPTH 64\n#define MAX_TREE_COMP_LENGTH 128\n#include \"hash_to_binary_tree_inc.h\"  /* NOLINT(build/include) */\n#undef MAX_TREE_SEARCH_DEPTH\n#undef MAX_TREE_COMP_LENGTH\n#undef BUCKET_BITS\n#undef HASHER\n/* MAX_NUM_MATCHES == 64 + MAX_TREE_SEARCH_DEPTH */\n#define MAX_NUM_MATCHES_H10 128\n\n/* For BUCKET_SWEEP_BITS == 0, enabling the dictionary lookup makes compression\n   a little faster (0.5% - 1%) and it compresses 0.15% better on small text\n   and HTML inputs. */\n\n#define HASHER() H2\n#define BUCKET_BITS 16\n#define BUCKET_SWEEP_BITS 0\n#define HASH_LEN 5\n#define USE_DICTIONARY 1\n#include \"hash_longest_match_quickly_inc.h\"  /* NOLINT(build/include) */\n#undef BUCKET_SWEEP_BITS\n#undef USE_DICTIONARY\n#undef HASHER\n\n#define HASHER() H3\n#define BUCKET_SWEEP_BITS 1\n#define USE_DICTIONARY 0\n#include \"hash_longest_match_quickly_inc.h\"  /* NOLINT(build/include) */\n#undef USE_DICTIONARY\n#undef BUCKET_SWEEP_BITS\n#undef BUCKET_BITS\n#undef HASHER\n\n#define HASHER() H4\n#define BUCKET_BITS 17\n#define BUCKET_SWEEP_BITS 2\n#define USE_DICTIONARY 1\n#include \"hash_longest_match_quickly_inc.h\"  /* NOLINT(build/include) */\n#undef USE_DICTIONARY\n#undef HASH_LEN\n#undef BUCKET_SWEEP_BITS\n#undef BUCKET_BITS\n#undef HASHER\n\n#define HASHER() H5\n#include \"hash_longest_match_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER\n\n#define HASHER() H6\n#include \"hash_longest_match64_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER\n\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n#define HASHER() H58\n#include \"hash_longest_match_simd_inc.h\" /* NOLINT(build/include) */\n#undef HASHER\n\n#define HASHER() H68\n#include \"hash_longest_match64_simd_inc.h\" /* NOLINT(build/include) */\n#undef HASHER\n#endif\n\n#define BUCKET_BITS 15\n\n#define NUM_LAST_DISTANCES_TO_CHECK 4\n#define NUM_BANKS 1\n#define BANK_BITS 16\n#define HASHER() H40\n#include \"hash_forgetful_chain_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER\n#undef NUM_LAST_DISTANCES_TO_CHECK\n\n#define NUM_LAST_DISTANCES_TO_CHECK 10\n#define HASHER() H41\n#include \"hash_forgetful_chain_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER\n#undef NUM_LAST_DISTANCES_TO_CHECK\n#undef NUM_BANKS\n#undef BANK_BITS\n\n#define NUM_LAST_DISTANCES_TO_CHECK 16\n#define NUM_BANKS 512\n#define BANK_BITS 9\n#define HASHER() H42\n#include \"hash_forgetful_chain_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER\n#undef NUM_LAST_DISTANCES_TO_CHECK\n#undef NUM_BANKS\n#undef BANK_BITS\n\n#undef BUCKET_BITS\n\n#define HASHER() H54\n#define BUCKET_BITS 20\n#define BUCKET_SWEEP_BITS 2\n#define HASH_LEN 7\n#define USE_DICTIONARY 0\n#include \"hash_longest_match_quickly_inc.h\"  /* NOLINT(build/include) */\n#undef USE_DICTIONARY\n#undef HASH_LEN\n#undef BUCKET_SWEEP_BITS\n#undef BUCKET_BITS\n#undef HASHER\n\n/* fast large window hashers */\n\n#define HASHER() HROLLING_FAST\n#define CHUNKLEN 32\n#define JUMP 4\n#define NUMBUCKETS 16777216\n#define MASK ((NUMBUCKETS * 64) - 1)\n#include \"hash_rolling_inc.h\"  /* NOLINT(build/include) */\n#undef JUMP\n#undef HASHER\n\n\n#define HASHER() HROLLING\n#define JUMP 1\n#include \"hash_rolling_inc.h\"  /* NOLINT(build/include) */\n#undef MASK\n#undef NUMBUCKETS\n#undef JUMP\n#undef CHUNKLEN\n#undef HASHER\n\n#define HASHER() H35\n#define HASHER_A H3\n#define HASHER_B HROLLING_FAST\n#include \"hash_composite_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER_A\n#undef HASHER_B\n#undef HASHER\n\n#define HASHER() H55\n#define HASHER_A H54\n#define HASHER_B HROLLING_FAST\n#include \"hash_composite_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER_A\n#undef HASHER_B\n#undef HASHER\n\n#define HASHER() H65\n#define HASHER_A H6\n#define HASHER_B HROLLING\n#include \"hash_composite_inc.h\"  /* NOLINT(build/include) */\n#undef HASHER_A\n#undef HASHER_B\n#undef HASHER\n\n#undef FN\n#undef CAT\n#undef EXPAND_CAT\n\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n#define FOR_SIMPLE_HASHERS(H) \\\n  H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42) H(54) H(58) H(68)\n#else\n#define FOR_SIMPLE_HASHERS(H) \\\n  H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42) H(54)\n#endif\n#define FOR_COMPOSITE_HASHERS(H) H(35) H(55) H(65)\n#define FOR_GENERIC_HASHERS(H) FOR_SIMPLE_HASHERS(H) FOR_COMPOSITE_HASHERS(H)\n#define FOR_ALL_HASHERS(H) FOR_GENERIC_HASHERS(H) H(10)\n\ntypedef struct {\n  HasherCommon common;\n\n  union {\n#define MEMBER_(N) \\\n    H ## N _H ## N;\n    FOR_ALL_HASHERS(MEMBER_)\n#undef MEMBER_\n  } privat;\n} Hasher;\n\n/* MUST be invoked before any other method. */\nstatic BROTLI_INLINE void HasherInit(Hasher* hasher) {\n  hasher->common.is_setup_ = BROTLI_FALSE;\n  hasher->common.extra[0] = NULL;\n  hasher->common.extra[1] = NULL;\n  hasher->common.extra[2] = NULL;\n  hasher->common.extra[3] = NULL;\n}\n\nstatic BROTLI_INLINE void DestroyHasher(MemoryManager* m, Hasher* hasher) {\n  if (hasher->common.extra[0] != NULL) BROTLI_FREE(m, hasher->common.extra[0]);\n  if (hasher->common.extra[1] != NULL) BROTLI_FREE(m, hasher->common.extra[1]);\n  if (hasher->common.extra[2] != NULL) BROTLI_FREE(m, hasher->common.extra[2]);\n  if (hasher->common.extra[3] != NULL) BROTLI_FREE(m, hasher->common.extra[3]);\n}\n\nstatic BROTLI_INLINE void HasherReset(Hasher* hasher) {\n  hasher->common.is_prepared_ = BROTLI_FALSE;\n}\n\nstatic BROTLI_INLINE void HasherSize(const BrotliEncoderParams* params,\n    BROTLI_BOOL one_shot, const size_t input_size, size_t* alloc_size) {\n  switch (params->hasher.type) {\n#define SIZE_(N)                                                           \\\n    case N:                                                                \\\n      HashMemAllocInBytesH ## N(params, one_shot, input_size, alloc_size); \\\n      break;\n    FOR_ALL_HASHERS(SIZE_)\n#undef SIZE_\n    default:\n      break;\n  }\n}\n\nstatic BROTLI_INLINE void HasherSetup(MemoryManager* m, Hasher* hasher,\n    BrotliEncoderParams* params, const uint8_t* data, size_t position,\n    size_t input_size, BROTLI_BOOL is_last) {\n  BROTLI_BOOL one_shot = (position == 0 && is_last);\n  if (!hasher->common.is_setup_) {\n    size_t alloc_size[4] = {0};\n    size_t i;\n    ChooseHasher(params, &params->hasher);\n    hasher->common.params = params->hasher;\n    hasher->common.dict_num_lookups = 0;\n    hasher->common.dict_num_matches = 0;\n    HasherSize(params, one_shot, input_size, alloc_size);\n    for (i = 0; i < 4; ++i) {\n      if (alloc_size[i] == 0) continue;\n      hasher->common.extra[i] = BROTLI_ALLOC(m, uint8_t, alloc_size[i]);\n      if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(hasher->common.extra[i])) return;\n    }\n    switch (hasher->common.params.type) {\n#define INITIALIZE_(N)                        \\\n      case N:                                 \\\n        InitializeH ## N(&hasher->common,     \\\n            &hasher->privat._H ## N, params); \\\n        break;\n      FOR_ALL_HASHERS(INITIALIZE_);\n#undef INITIALIZE_\n      default:\n        break;\n    }\n    HasherReset(hasher);\n    hasher->common.is_setup_ = BROTLI_TRUE;\n  }\n\n  if (!hasher->common.is_prepared_) {\n    switch (hasher->common.params.type) {\n#define PREPARE_(N)                      \\\n      case N:                            \\\n        PrepareH ## N(                   \\\n            &hasher->privat._H ## N,     \\\n            one_shot, input_size, data); \\\n        break;\n      FOR_ALL_HASHERS(PREPARE_)\n#undef PREPARE_\n      default: break;\n    }\n    hasher->common.is_prepared_ = BROTLI_TRUE;\n  }\n}\n\nstatic BROTLI_INLINE void InitOrStitchToPreviousBlock(\n    MemoryManager* m, Hasher* hasher, const uint8_t* data, size_t mask,\n    BrotliEncoderParams* params, size_t position, size_t input_size,\n    BROTLI_BOOL is_last) {\n  HasherSetup(m, hasher, params, data, position, input_size, is_last);\n  if (BROTLI_IS_OOM(m)) return;\n  switch (hasher->common.params.type) {\n#define INIT_(N)                             \\\n    case N:                                  \\\n      StitchToPreviousBlockH ## N(           \\\n          &hasher->privat._H ## N,           \\\n          input_size, position, data, mask); \\\n    break;\n    FOR_ALL_HASHERS(INIT_)\n#undef INIT_\n    default: break;\n  }\n}\n\n/* NB: when seamless dictionary-ring-buffer copies are implemented, don't forget\n       to add proper guards for non-zero-BROTLI_PARAM_STREAM_OFFSET. */\nstatic BROTLI_INLINE void FindCompoundDictionaryMatch(\n    const PreparedDictionary* self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache,\n    const size_t cur_ix, const size_t max_length, const size_t distance_offset,\n    const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {\n  const uint32_t source_size = self->source_size;\n  const size_t boundary = distance_offset - source_size;\n  const uint32_t hash_bits = self->hash_bits;\n  const uint32_t bucket_bits = self->bucket_bits;\n  const uint32_t slot_bits = self->slot_bits;\n\n  const uint32_t hash_shift = 64u - bucket_bits;\n  const uint32_t slot_mask = (~((uint32_t)0U)) >> (32 - slot_bits);\n  const uint64_t hash_mask = (~((uint64_t)0U)) >> (64 - hash_bits);\n\n  const uint32_t* slot_offsets = (uint32_t*)(&self[1]);\n  const uint16_t* heads = (uint16_t*)(&slot_offsets[(size_t)1u << slot_bits]);\n  const uint32_t* items = (uint32_t*)(&heads[(size_t)1u << bucket_bits]);\n  const uint8_t* source = NULL;\n\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  const uint64_t h =\n      (BROTLI_UNALIGNED_LOAD64LE(&data[cur_ix_masked]) & hash_mask) *\n      kPreparedDictionaryHashMul64Long;\n  const uint32_t key = (uint32_t)(h >> hash_shift);\n  const uint32_t slot = key & slot_mask;\n  const uint32_t head = heads[key];\n  const uint32_t* BROTLI_RESTRICT chain = &items[slot_offsets[slot] + head];\n  uint32_t item = (head == 0xFFFF) ? 1 : 0;\n\n  const void* tail = (void*)&items[self->num_items];\n  if (self->magic == kPreparedDictionaryMagic) {\n    source = (const uint8_t*)tail;\n  } else {\n    /* kLeanPreparedDictionaryMagic */\n    source = (const uint8_t*)BROTLI_UNALIGNED_LOAD_PTR((const uint8_t**)tail);\n  }\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask);\n\n  for (i = 0; i < 4; ++i) {\n    const size_t distance = (size_t)distance_cache[i];\n    size_t offset;\n    size_t limit;\n    size_t len;\n    if (distance <= boundary || distance > distance_offset) continue;\n    offset = distance_offset - distance;\n    limit = source_size - offset;\n    limit = limit > max_length ? max_length : limit;\n    len = FindMatchLengthWithLimit(&source[offset], &data[cur_ix_masked],\n                                   limit);\n    if (len >= 2) {\n      score_t score = BackwardReferenceScoreUsingLastDistance(len);\n      if (best_score < score) {\n        if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n        if (best_score < score) {\n          best_score = score;\n          if (len > best_len) best_len = len;\n          out->len = len;\n          out->len_code_delta = 0;\n          out->distance = distance;\n          out->score = best_score;\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  while (item == 0) {\n    size_t offset;\n    size_t distance;\n    size_t limit;\n    item = *chain;\n    chain++;\n    offset = item & 0x7FFFFFFF;\n    item &= 0x80000000;\n    distance = distance_offset - offset;\n    limit = source_size - offset;\n    limit = (limit > max_length) ? max_length : limit;\n    if (distance > max_distance) continue;\n    if (cur_ix_masked + best_len > ring_buffer_mask || best_len >= limit ||\n        /* compare 4 bytes ending at best_len + 1 */\n        BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n            BrotliUnalignedRead32(&source[offset + best_len - 3])) {\n      continue;\n    }\n    {\n      const size_t len = FindMatchLengthWithLimit(&source[offset],\n                                                  &data[cur_ix_masked],\n                                                  limit);\n      if (len >= 4) {\n        score_t score = BackwardReferenceScore(len, distance);\n        if (best_score < score) {\n          best_score = score;\n          best_len = len;\n          out->len = best_len;\n          out->len_code_delta = 0;\n          out->distance = distance;\n          out->score = best_score;\n        }\n      }\n    }\n  }\n}\n\n/* NB: when seamless dictionary-ring-buffer copies are implemented, don't forget\n       to add proper guards for non-zero-BROTLI_PARAM_STREAM_OFFSET. */\nstatic BROTLI_INLINE size_t FindAllCompoundDictionaryMatches(\n    const PreparedDictionary* self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const size_t cur_ix, const size_t min_length,\n    const size_t max_length, const size_t distance_offset,\n    const size_t max_distance, BackwardMatch* matches, size_t match_limit) {\n  const uint32_t source_size = self->source_size;\n  const uint32_t hash_bits = self->hash_bits;\n  const uint32_t bucket_bits = self->bucket_bits;\n  const uint32_t slot_bits = self->slot_bits;\n\n  const uint32_t hash_shift = 64u - bucket_bits;\n  const uint32_t slot_mask = (~((uint32_t)0U)) >> (32 - slot_bits);\n  const uint64_t hash_mask = (~((uint64_t)0U)) >> (64 - hash_bits);\n\n  const uint32_t* slot_offsets = (uint32_t*)(&self[1]);\n  const uint16_t* heads = (uint16_t*)(&slot_offsets[(size_t)1u << slot_bits]);\n  const uint32_t* items = (uint32_t*)(&heads[(size_t)1u << bucket_bits]);\n  const uint8_t* source = NULL;\n\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  size_t best_len = min_length;\n  const uint64_t h =\n      (BROTLI_UNALIGNED_LOAD64LE(&data[cur_ix_masked]) & hash_mask) *\n      kPreparedDictionaryHashMul64Long;\n  const uint32_t key = (uint32_t)(h >> hash_shift);\n  const uint32_t slot = key & slot_mask;\n  const uint32_t head = heads[key];\n  const uint32_t* BROTLI_RESTRICT chain = &items[slot_offsets[slot] + head];\n  uint32_t item = (head == 0xFFFF) ? 1 : 0;\n  size_t found = 0;\n\n  const void* tail = (void*)&items[self->num_items];\n  if (self->magic == kPreparedDictionaryMagic) {\n    source = (const uint8_t*)tail;\n  } else {\n    /* kLeanPreparedDictionaryMagic */\n    source = (const uint8_t*)BROTLI_UNALIGNED_LOAD_PTR((const uint8_t**)tail);\n  }\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask);\n\n  while (item == 0) {\n    size_t offset;\n    size_t distance;\n    size_t limit;\n    size_t len;\n    item = *chain;\n    chain++;\n    offset = item & 0x7FFFFFFF;\n    item &= 0x80000000;\n    distance = distance_offset - offset;\n    limit = source_size - offset;\n    limit = (limit > max_length) ? max_length : limit;\n    if (distance > max_distance) continue;\n    if (cur_ix_masked + best_len > ring_buffer_mask ||\n        best_len >= limit ||\n        data[cur_ix_masked + best_len] != source[offset + best_len]) {\n      continue;\n    }\n    len = FindMatchLengthWithLimit(\n        &source[offset], &data[cur_ix_masked], limit);\n    if (len > best_len) {\n      best_len = len;\n      InitBackwardMatch(matches++, distance, len);\n      found++;\n      if (found == match_limit) break;\n    }\n  }\n  return found;\n}\n\nstatic BROTLI_INLINE void LookupCompoundDictionaryMatch(\n    const CompoundDictionary* addon, const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache,\n    const size_t cur_ix, const size_t max_length,\n    const size_t max_ring_buffer_distance, const size_t max_distance,\n    HasherSearchResult* sr) {\n  size_t base_offset = max_ring_buffer_distance + 1 + addon->total_size - 1;\n  size_t d;\n  for (d = 0; d < addon->num_chunks; ++d) {\n    /* Only one prepared dictionary type is currently supported. */\n    FindCompoundDictionaryMatch(\n        (const PreparedDictionary*)addon->chunks[d], data, ring_buffer_mask,\n        distance_cache, cur_ix, max_length,\n        base_offset - addon->chunk_offsets[d], max_distance, sr);\n  }\n}\n\nstatic BROTLI_INLINE size_t LookupAllCompoundDictionaryMatches(\n    const CompoundDictionary* addon, const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const size_t cur_ix, size_t min_length,\n    const size_t max_length, const size_t max_ring_buffer_distance,\n    const size_t max_distance, BackwardMatch* matches,\n    size_t match_limit) {\n  size_t base_offset = max_ring_buffer_distance + 1 + addon->total_size - 1;\n  size_t d;\n  size_t total_found = 0;\n  for (d = 0; d < addon->num_chunks; ++d) {\n    /* Only one prepared dictionary type is currently supported. */\n    total_found += FindAllCompoundDictionaryMatches(\n        (const PreparedDictionary*)addon->chunks[d], data, ring_buffer_mask,\n        cur_ix, min_length, max_length, base_offset - addon->chunk_offsets[d],\n        max_distance, matches + total_found, match_limit - total_found);\n    if (total_found == match_limit) break;\n    if (total_found > 0) {\n      min_length = BackwardMatchLength(&matches[total_found - 1]);\n    }\n  }\n  return total_found;\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_HASH_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/hash_base.h",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Basic common hash functions / constants. */\n\n#ifndef THIRD_PARTY_BROTLI_ENC_HASH_BASE_H_\n#define THIRD_PARTY_BROTLI_ENC_HASH_BASE_H_\n\n#include \"../common/platform.h\"\n\n/* kHashMul32 multiplier has these properties:\n   * The multiplier must be odd. Otherwise we may lose the highest bit.\n   * No long streaks of ones or zeros.\n   * There is no effort to ensure that it is a prime, the oddity is enough\n     for this use.\n   * The number has been tuned heuristically against compression benchmarks. */\nstatic const uint32_t kHashMul32 = 0x1E35A7BD;\nstatic const uint64_t kHashMul64 =\n    BROTLI_MAKE_UINT64_T(0x1FE35A7Bu, 0xD3579BD3u);\n\nstatic BROTLI_INLINE uint32_t Hash14(const uint8_t* data) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return h >> (32 - 14);\n}\n\nstatic BROTLI_INLINE uint32_t Hash15(const uint8_t* data) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return h >> (32 - 15);\n}\n\n#endif  // THIRD_PARTY_BROTLI_ENC_HASH_BASE_H_\n"
  },
  {
    "path": "libs/brotli/enc/hash_composite_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2018 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, HASHER_A, HASHER_B */\n\n/* Composite hasher: This hasher allows to combine two other hashers, HASHER_A\n   and HASHER_B. */\n\n#define HashComposite HASHER()\n\n#define FN_A(X) EXPAND_CAT(X, HASHER_A)\n#define FN_B(X) EXPAND_CAT(X, HASHER_B)\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) {\n  size_t a =  FN_A(HashTypeLength)();\n  size_t b =  FN_B(HashTypeLength)();\n  return a > b ? a : b;\n}\n\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) {\n  size_t a =  FN_A(StoreLookahead)();\n  size_t b =  FN_B(StoreLookahead)();\n  return a > b ? a : b;\n}\n\ntypedef struct HashComposite {\n  HASHER_A ha;\n  HASHER_B hb;\n  HasherCommon ha_common;\n  HasherCommon hb_common;\n\n  /* Shortcuts. */\n  HasherCommon* common;\n\n  BROTLI_BOOL fresh;\n  const BrotliEncoderParams* params;\n} HashComposite;\n\nstatic void FN(Initialize)(HasherCommon* common,\n    HashComposite* BROTLI_RESTRICT self, const BrotliEncoderParams* params) {\n  self->common = common;\n\n  self->ha_common = *self->common;\n  self->hb_common = *self->common;\n  self->fresh = BROTLI_TRUE;\n  self->params = params;\n  /* TODO(lode): Initialize of the hashers is deferred to Prepare (and params\n     remembered here) because we don't get the one_shot and input_size params\n     here that are needed to know the memory size of them. Instead provide\n     those params to all hashers FN(Initialize) */\n}\n\nstatic void FN(Prepare)(\n    HashComposite* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  if (self->fresh) {\n    self->fresh = BROTLI_FALSE;\n    self->ha_common.extra[0] = self->common->extra[0];\n    self->ha_common.extra[1] = self->common->extra[1];\n    self->ha_common.extra[2] = NULL;\n    self->ha_common.extra[3] = NULL;\n    self->hb_common.extra[0] = self->common->extra[2];\n    self->hb_common.extra[1] = self->common->extra[3];\n    self->hb_common.extra[2] = NULL;\n    self->hb_common.extra[3] = NULL;\n\n    FN_A(Initialize)(&self->ha_common, &self->ha, self->params);\n    FN_B(Initialize)(&self->hb_common, &self->hb, self->params);\n  }\n  FN_A(Prepare)(&self->ha, one_shot, input_size, data);\n  FN_B(Prepare)(&self->hb, one_shot, input_size, data);\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t alloc_size_a[4] = {0};\n  size_t alloc_size_b[4] = {0};\n  FN_A(HashMemAllocInBytes)(params, one_shot, input_size, alloc_size_a);\n  FN_B(HashMemAllocInBytes)(params, one_shot, input_size, alloc_size_b);\n  /* Should never happen. */\n  if (alloc_size_a[2] != 0 || alloc_size_a[3] != 0) exit(EXIT_FAILURE);\n  if (alloc_size_b[2] != 0 || alloc_size_b[3] != 0) exit(EXIT_FAILURE);\n  alloc_size[0] = alloc_size_a[0];\n  alloc_size[1] = alloc_size_a[1];\n  alloc_size[2] = alloc_size_b[0];\n  alloc_size[3] = alloc_size_b[1];\n}\n\nstatic BROTLI_INLINE void FN(Store)(HashComposite* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {\n  FN_A(Store)(&self->ha, data, mask, ix);\n  FN_B(Store)(&self->hb, data, mask, ix);\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(\n    HashComposite* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix_start,\n    const size_t ix_end) {\n  FN_A(StoreRange)(&self->ha, data, mask, ix_start, ix_end);\n  FN_B(StoreRange)(&self->hb, data, mask, ix_start, ix_end);\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashComposite* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ring_buffer_mask) {\n  FN_A(StitchToPreviousBlock)(&self->ha, num_bytes, position,\n      ringbuffer, ring_buffer_mask);\n  FN_B(StitchToPreviousBlock)(&self->hb, num_bytes, position,\n      ringbuffer, ring_buffer_mask);\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashComposite* BROTLI_RESTRICT self, int* BROTLI_RESTRICT distance_cache) {\n  FN_A(PrepareDistanceCache)(&self->ha, distance_cache);\n  FN_B(PrepareDistanceCache)(&self->hb, distance_cache);\n}\n\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashComposite* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  FN_A(FindLongestMatch)(&self->ha, dictionary, data, ring_buffer_mask,\n      distance_cache, cur_ix, max_length, max_backward, dictionary_distance,\n      max_distance, out);\n  FN_B(FindLongestMatch)(&self->hb, dictionary, data, ring_buffer_mask,\n      distance_cache, cur_ix, max_length, max_backward, dictionary_distance,\n      max_distance, out);\n}\n\n#undef HashComposite\n"
  },
  {
    "path": "libs/brotli/enc/hash_forgetful_chain_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, BUCKET_BITS, NUM_BANKS, BANK_BITS,\n                        NUM_LAST_DISTANCES_TO_CHECK */\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n\n   Hashes are stored in chains which are bucketed to groups. Group of chains\n   share a storage \"bank\". When more than \"bank size\" chain nodes are added,\n   oldest nodes are replaced; this way several chains may share a tail. */\n\n#define HashForgetfulChain HASHER()\n\n#define BANK_SIZE (1 << BANK_BITS)\n\n/* Number of hash buckets. */\n#define BUCKET_SIZE (1 << BUCKET_BITS)\n\n#define CAPPED_CHAINS 0\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }\n\n/* HashBytes is the function that chooses the bucket to place the address in.*/\nstatic BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT data) {\n  const uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return h >> (32 - BUCKET_BITS);\n}\n\ntypedef struct FN(Slot) {\n  uint16_t delta;\n  uint16_t next;\n} FN(Slot);\n\ntypedef struct FN(Bank) {\n  FN(Slot) slots[BANK_SIZE];\n} FN(Bank);\n\ntypedef struct HashForgetfulChain {\n  uint16_t free_slot_idx[NUM_BANKS];  /* Up to 1KiB. Move to dynamic? */\n  size_t max_hops;\n\n  /* Shortcuts. */\n  void* extra[2];\n  HasherCommon* common;\n\n  /* --- Dynamic size members --- */\n\n  /* uint32_t addr[BUCKET_SIZE]; */\n\n  /* uint16_t head[BUCKET_SIZE]; */\n\n  /* Truncated hash used for quick rejection of \"distance cache\" candidates. */\n  /* uint8_t tiny_hash[65536];*/\n\n  /* FN(Bank) banks[NUM_BANKS]; */\n} HashForgetfulChain;\n\nstatic uint32_t* FN(Addr)(void* extra) {\n  return (uint32_t*)extra;\n}\n\nstatic uint16_t* FN(Head)(void* extra) {\n  return (uint16_t*)(&FN(Addr)(extra)[BUCKET_SIZE]);\n}\n\nstatic uint8_t* FN(TinyHash)(void* extra) {\n  return (uint8_t*)(&FN(Head)(extra)[BUCKET_SIZE]);\n}\n\nstatic FN(Bank)* FN(Banks)(void* extra) {\n  return (FN(Bank)*)(extra);\n}\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashForgetfulChain* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common = common;\n  self->extra[0] = common->extra[0];\n  self->extra[1] = common->extra[1];\n\n  self->max_hops = (params->quality > 6 ? 7u : 8u) << (params->quality - 4);\n}\n\nstatic void FN(Prepare)(\n    HashForgetfulChain* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra[0]);\n  uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra[0]);\n  uint8_t* BROTLI_RESTRICT tiny_hash = FN(TinyHash)(self->extra[0]);\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = BUCKET_SIZE >> 6;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      size_t bucket = FN(HashBytes)(&data[i]);\n      /* See InitEmpty comment. */\n      addr[bucket] = 0xCCCCCCCC;\n      head[bucket] = 0xCCCC;\n    }\n  } else {\n    /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, position\n       processed by hasher never reaches 3GB + 64M; this makes all new chains\n       to be terminated after the first node. */\n    memset(addr, 0xCC, sizeof(uint32_t) * BUCKET_SIZE);\n    memset(head, 0, sizeof(uint16_t) * BUCKET_SIZE);\n  }\n  memset(tiny_hash, 0, sizeof(uint8_t) * 65536);\n  memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx));\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  BROTLI_UNUSED(params);\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint32_t) * BUCKET_SIZE +\n                  sizeof(uint16_t) * BUCKET_SIZE + sizeof(uint8_t) * 65536;\n  alloc_size[1] = sizeof(FN(Bank)) * NUM_BANKS;\n}\n\n/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and prepend\n   node to corresponding chain; also update tiny_hash for current position. */\nstatic BROTLI_INLINE void FN(Store)(HashForgetfulChain* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {\n  uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra[0]);\n  uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra[0]);\n  uint8_t* BROTLI_RESTRICT tiny_hash = FN(TinyHash)(self->extra[0]);\n  FN(Bank)* BROTLI_RESTRICT banks = FN(Banks)(self->extra[1]);\n  const size_t key = FN(HashBytes)(&data[ix & mask]);\n  const size_t bank = key & (NUM_BANKS - 1);\n  const size_t idx = self->free_slot_idx[bank]++ & (BANK_SIZE - 1);\n  size_t delta = ix - addr[key];\n  tiny_hash[(uint16_t)ix] = (uint8_t)key;\n  if (delta > 0xFFFF) delta = CAPPED_CHAINS ? 0 : 0xFFFF;\n  banks[bank].slots[idx].delta = (uint16_t)delta;\n  banks[bank].slots[idx].next = head[key];\n  addr[key] = (uint32_t)ix;\n  head[key] = (uint16_t)idx;\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(\n    HashForgetfulChain* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashForgetfulChain* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ring_buffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ring_buffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ring_buffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ring_buffer_mask, position - 1);\n  }\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashForgetfulChain* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  BROTLI_UNUSED(self);\n  PrepareDistanceCache(distance_cache, NUM_LAST_DISTANCES_TO_CHECK);\n}\n\n/* Find a longest backward match of &data[cur_ix] up to the length of\n   max_length and stores the position cur_ix in the hash table.\n\n   REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache\n             values; if this method is invoked repeatedly with the same distance\n             cache values, it is enough to invoke FN(PrepareDistanceCache) once.\n\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashForgetfulChain* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache,\n    const size_t cur_ix, const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra[0]);\n  uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra[0]);\n  uint8_t* BROTLI_RESTRICT tiny_hashes = FN(TinyHash)(self->extra[0]);\n  FN(Bank)* BROTLI_RESTRICT banks = FN(Banks)(self->extra[1]);\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* Don't accept a short copy from far away. */\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  const size_t key = FN(HashBytes)(&data[cur_ix_masked]);\n  const uint8_t tiny_hash = (uint8_t)(key);\n  out->len = 0;\n  out->len_code_delta = 0;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask);\n\n  /* Try last distance first. */\n  for (i = 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) {\n    const size_t backward = (size_t)distance_cache[i];\n    size_t prev_ix = (cur_ix - backward);\n    /* For distance code 0 we want to consider 2-byte matches. */\n    if (i > 0 && tiny_hashes[(uint16_t)prev_ix] != tiny_hash) continue;\n    if (prev_ix >= cur_ix || backward > max_backward) {\n      continue;\n    }\n    prev_ix &= ring_buffer_mask;\n    {\n      const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                  &data[cur_ix_masked],\n                                                  max_length);\n      if (len >= 2) {\n        score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  {\n    const size_t bank = key & (NUM_BANKS - 1);\n    size_t backward = 0;\n    size_t hops = self->max_hops;\n    size_t delta = cur_ix - addr[key];\n    size_t slot = head[key];\n    while (hops--) {\n      size_t prev_ix;\n      size_t last = slot;\n      backward += delta;\n      if (backward > max_backward || (CAPPED_CHAINS && !delta)) break;\n      prev_ix = (cur_ix - backward) & ring_buffer_mask;\n      slot = banks[bank].slots[last].next;\n      delta = banks[bank].slots[last].delta;\n      if (cur_ix_masked + best_len > ring_buffer_mask ||\n          prev_ix + best_len > ring_buffer_mask ||\n          /* compare 4 bytes ending at best_len + 1 */\n          BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n              BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) {\n        continue;\n      }\n      {\n        const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                    &data[cur_ix_masked],\n                                                    max_length);\n        if (len >= 4) {\n          /* Comparing for >= 3 does not change the semantics, but just saves\n             for a few unnecessary binary logarithms in backward reference\n             score, since we are not interested in such short matches. */\n          score_t score = BackwardReferenceScore(len, backward);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n    FN(Store)(self, data, ring_buffer_mask, cur_ix);\n  }\n  if (out->score == min_score) {\n    SearchInStaticDictionary(dictionary,\n        self->common, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_FALSE);\n  }\n}\n\n#undef BANK_SIZE\n#undef BUCKET_SIZE\n#undef CAPPED_CHAINS\n\n#undef HashForgetfulChain\n"
  },
  {
    "path": "libs/brotli/enc/hash_longest_match64_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n\n   This is a hash map of fixed size (bucket_size_) to a ring buffer of\n   fixed size (block_size_). The ring buffer contains the last block_size_\n   index positions of the given hash key in the compressed data. */\n\n#define HashLongestMatch HASHER()\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }\n\n/* HashBytes is the function that chooses the bucket to place the address in. */\nstatic BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT data,\n                                          uint64_t hash_mul) {\n  const uint64_t h = BROTLI_UNALIGNED_LOAD64LE(data) * hash_mul;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return (size_t)(h >> (64 - 15));\n}\n\ntypedef struct HashLongestMatch {\n  /* Number of hash buckets. */\n  size_t bucket_size_;\n  /* Only block_size_ newest backward references are kept,\n     and the older are forgotten. */\n  size_t block_size_;\n  /* Hash multiplier tuned to match length. */\n  uint64_t hash_mul_;\n  /* Mask for accessing entries in a block (in a ring-buffer manner). */\n  uint32_t block_mask_;\n\n  int block_bits_;\n  int num_last_distances_to_check_;\n\n  /* Shortcuts. */\n  HasherCommon* common_;\n\n  /* --- Dynamic size members --- */\n\n  /* Number of entries in a particular bucket. */\n  uint16_t* num_;  /* uint16_t[bucket_size]; */\n\n  /* Buckets containing block_size_ of backward references. */\n  uint32_t* buckets_;  /* uint32_t[bucket_size * block_size]; */\n} HashLongestMatch;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common_ = common;\n\n  BROTLI_UNUSED(params);\n  self->hash_mul_ = kHashMul64 << (64 - 5 * 8);\n  BROTLI_DCHECK(common->params.bucket_bits == 15);\n  self->bucket_size_ = (size_t)1 << common->params.bucket_bits;\n  self->block_bits_ = common->params.block_bits;\n  self->block_size_ = (size_t)1 << common->params.block_bits;\n  self->block_mask_ = (uint32_t)(self->block_size_ - 1);\n  self->num_last_distances_to_check_ =\n      common->params.num_last_distances_to_check;\n  self->num_ = (uint16_t*)common->extra[0];\n  self->buckets_ = (uint32_t*)common->extra[1];\n}\n\nstatic void FN(Prepare)(\n    HashLongestMatch* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = self->bucket_size_ >> 6;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      const size_t key = FN(HashBytes)(&data[i], self->hash_mul_);\n      num[key] = 0;\n    }\n  } else {\n    memset(num, 0, self->bucket_size_ * sizeof(num[0]));\n  }\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;\n  size_t block_size = (size_t)1 << params->hasher.block_bits;\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint16_t) * bucket_size;\n  alloc_size[1] = sizeof(uint32_t) * bucket_size * block_size;\n}\n\n/* Look at 4 bytes at &data[ix & mask].\n   Compute a hash from these, and store the value of ix at that position. */\nstatic BROTLI_INLINE void FN(Store)(\n    HashLongestMatch* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t key = FN(HashBytes)(&data[ix & mask], self->hash_mul_);\n  const size_t minor_ix = num[key] & self->block_mask_;\n  const size_t offset = minor_ix + (key << self->block_bits_);\n  ++num[key];\n  buckets[offset] = (uint32_t)ix;\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1);\n  }\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  PrepareDistanceCache(distance_cache, self->num_last_distances_to_check_);\n}\n\n/* Find a longest backward match of &data[cur_ix] up to the length of\n   max_length and stores the position cur_ix in the hash table.\n\n   REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache\n             values; if this method is invoked repeatedly with the same distance\n             cache values, it is enough to invoke FN(PrepareDistanceCache) once.\n\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* Don't accept a short copy from far away. */\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  /* Precalculate the hash key and prefetch the bucket. */\n  const size_t key = FN(HashBytes)(&data[cur_ix_masked], self->hash_mul_);\n  uint32_t* BROTLI_RESTRICT bucket = &buckets[key << self->block_bits_];\n  PREFETCH_L1(bucket);\n  if (self->block_bits_ > 4) PREFETCH_L1(bucket + 16);\n  out->len = 0;\n  out->len_code_delta = 0;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask);\n\n  /* Try last distance first. */\n  for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) {\n    const size_t backward = (size_t)distance_cache[i];\n    size_t prev_ix = (size_t)(cur_ix - backward);\n    if (prev_ix >= cur_ix) {\n      continue;\n    }\n    if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n      continue;\n    }\n    prev_ix &= ring_buffer_mask;\n\n    if (cur_ix_masked + best_len > ring_buffer_mask) {\n      break;\n    }\n    if (prev_ix + best_len > ring_buffer_mask ||\n        data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {\n      continue;\n    }\n    {\n      const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                  &data[cur_ix_masked],\n                                                  max_length);\n      if (len >= 3 || (len == 2 && i < 2)) {\n        /* Comparing for >= 2 does not change the semantics, but just saves for\n           a few unnecessary binary logarithms in backward reference score,\n           since we are not interested in such short matches. */\n        score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  {\n    const size_t down =\n        (num[key] > self->block_size_) ?\n        (num[key] - self->block_size_) : 0u;\n    const uint32_t first4 = BrotliUnalignedRead32(data + cur_ix_masked);\n    const size_t max_length_m4 = max_length - 4;\n    i = num[key];\n    for (; i > down;) {\n      size_t prev_ix = bucket[--i & self->block_mask_];\n      uint32_t current4;\n      const size_t backward = cur_ix - prev_ix;\n      if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n        break;\n      }\n      prev_ix &= ring_buffer_mask;\n      if (cur_ix_masked + best_len > ring_buffer_mask) {\n        break;\n      }\n      if (prev_ix + best_len > ring_buffer_mask ||\n          /* compare 4 bytes ending at best_len + 1 */\n          BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n              BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) {\n        continue;\n      }\n      current4 = BrotliUnalignedRead32(data + prev_ix);\n      if (first4 != current4) continue;\n      {\n        const size_t len = FindMatchLengthWithLimit(&data[prev_ix + 4],\n                                                    &data[cur_ix_masked + 4],\n                                                    max_length_m4) + 4;\n        const score_t score = BackwardReferenceScore(len, backward);\n        if (best_score < score) {\n          best_score = score;\n          best_len = len;\n          out->len = best_len;\n          out->distance = backward;\n          out->score = best_score;\n        }\n      }\n    }\n    bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;\n    ++num[key];\n  }\n  if (min_score == out->score) {\n    SearchInStaticDictionary(dictionary,\n        self->common_, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_FALSE);\n  }\n}\n\n#undef HashLongestMatch\n"
  },
  {
    "path": "libs/brotli/enc/hash_longest_match64_simd_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n\n   This is a hash map of fixed size (bucket_size_) to a ring buffer of\n   fixed size (block_size_). The ring buffer contains the last block_size_\n   index positions of the given hash key in the compressed data. */\n\n#define HashLongestMatch HASHER()\n\n#define TAG_HASH_BITS 8\n#define TAG_HASH_MASK ((1 << TAG_HASH_BITS) - 1)\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }\n\n/* HashBytes is the function that chooses the bucket to place the address in. */\nstatic BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT data,\n                                          uint64_t hash_mul) {\n  const uint64_t h = BROTLI_UNALIGNED_LOAD64LE(data) * hash_mul;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return (size_t)(h >> (64 - 15 - TAG_HASH_BITS));\n}\n\ntypedef struct HashLongestMatch {\n  /* Number of hash buckets. */\n  size_t bucket_size_;\n  /* Only block_size_ newest backward references are kept,\n     and the older are forgotten. */\n  size_t block_size_;\n  /* Hash multiplier tuned to match length. */\n  uint64_t hash_mul_;\n  /* Mask for accessing entries in a block (in a ring-buffer manner). */\n  uint32_t block_mask_;\n\n  int block_bits_;\n  int num_last_distances_to_check_;\n\n  /* Shortcuts. */\n  HasherCommon* common_;\n\n  /* --- Dynamic size members --- */\n\n  /* Number of entries in a particular bucket. */\n  uint16_t* num_;  /* uint16_t[bucket_size]; */\n\n  uint8_t* tags_;\n\n  /* Buckets containing block_size_ of backward references. */\n  uint32_t* buckets_;  /* uint32_t[bucket_size * block_size]; */\n} HashLongestMatch;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common_ = common;\n\n  BROTLI_UNUSED(params);\n  self->hash_mul_ = kHashMul64 << (64 - 5 * 8);\n  BROTLI_DCHECK(common->params.bucket_bits == 15);\n  self->bucket_size_ = (size_t)1 << common->params.bucket_bits;\n  self->block_bits_ = common->params.block_bits;\n  self->block_size_ = (size_t)1 << common->params.block_bits;\n  self->block_mask_ = (uint32_t)(self->block_size_ - 1);\n  self->num_last_distances_to_check_ =\n      common->params.num_last_distances_to_check;\n  self->num_ = (uint16_t*)common->extra[0];\n  self->tags_ = (uint8_t*)common->extra[1];\n  self->buckets_ = (uint32_t*)common->extra[2];\n}\n\nstatic void FN(Prepare)(\n    HashLongestMatch* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = self->bucket_size_ >> 6;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      const size_t hash = FN(HashBytes)(&data[i], self->hash_mul_);\n      const size_t key = hash >> TAG_HASH_BITS;\n      num[key] = 65535;\n    }\n  } else {\n    /* Set all the bytes of num to 255, which makes each uint16_t 65535. */\n    memset(num, 255, self->bucket_size_ * sizeof(num[0]));\n  }\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;\n  size_t block_size = (size_t)1 << params->hasher.block_bits;\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint16_t) * bucket_size;\n  alloc_size[1] = sizeof(uint8_t) * bucket_size * block_size;\n  alloc_size[2] = sizeof(uint32_t) * bucket_size * block_size;\n}\n\n/* Look at 4 bytes at &data[ix & mask].\n   Compute a hash from these, and store the value of ix at that position. */\nstatic BROTLI_INLINE void FN(Store)(\n    HashLongestMatch* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint8_t* BROTLI_RESTRICT tags = self->tags_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t hash = FN(HashBytes)(&data[ix & mask], self->hash_mul_);\n  const size_t key = hash >> TAG_HASH_BITS;\n  const uint8_t tag = hash & TAG_HASH_MASK;\n  const size_t minor_ix = num[key] & self->block_mask_;\n  const size_t offset = minor_ix + (key << self->block_bits_);\n  --num[key];\n  buckets[offset] = (uint32_t)ix;\n  tags[offset] = tag;\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1);\n  }\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  PrepareDistanceCache(distance_cache, self->num_last_distances_to_check_);\n}\n\n/* Find a longest backward match of &data[cur_ix] up to the length of\n   max_length and stores the position cur_ix in the hash table.\n\n   REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache\n             values; if this method is invoked repeatedly with the same distance\n             cache values, it is enough to invoke FN(PrepareDistanceCache) once.\n\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  uint8_t* BROTLI_RESTRICT tags = self->tags_;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* Don't accept a short copy from far away. */\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  /* Precalculate the hash key and prefetch the bucket. */\n  const size_t hash = FN(HashBytes)(&data[cur_ix_masked], self->hash_mul_);\n  const size_t key = hash >> TAG_HASH_BITS;\n  uint32_t* BROTLI_RESTRICT bucket = &buckets[key << self->block_bits_];\n  uint8_t* BROTLI_RESTRICT tag_bucket = &tags[key << self->block_bits_];\n  PREFETCH_L1(bucket);\n  PREFETCH_L1(tag_bucket);\n  if (self->block_bits_ > 4) PREFETCH_L1(bucket + 16);\n  out->len = 0;\n  out->len_code_delta = 0;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask);\n\n  /* Try last distance first. */\n  for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) {\n    const size_t backward = (size_t)distance_cache[i];\n    size_t prev_ix = (size_t)(cur_ix - backward);\n    if (prev_ix >= cur_ix) {\n      continue;\n    }\n    if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n      continue;\n    }\n    prev_ix &= ring_buffer_mask;\n\n    if (cur_ix_masked + best_len > ring_buffer_mask) {\n      break;\n    }\n    if (prev_ix + best_len > ring_buffer_mask ||\n        data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {\n      continue;\n    }\n    {\n      const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                  &data[cur_ix_masked],\n                                                  max_length);\n      if (len >= 3 || (len == 2 && i < 2)) {\n        /* Comparing for >= 2 does not change the semantics, but just saves for\n           a few unnecessary binary logarithms in backward reference score,\n           since we are not interested in such short matches. */\n        score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  {\n    const uint8_t tag = hash & TAG_HASH_MASK;\n    const uint32_t first4 = BrotliUnalignedRead32(data + cur_ix_masked);\n    const size_t max_length_m4 = max_length - 4;\n    const size_t head = (num[key] + 1) & self->block_mask_;\n    uint64_t matches =\n        GetMatchingTagMask(self->block_size_ / 16, tag, tag_bucket, head);\n    /* Mask off any matches from uninitialized tags. */\n    uint16_t n = 65535 - num[key];\n    uint64_t block_has_unused_slots = self->block_size_ > n;\n    uint64_t mask = (block_has_unused_slots << (n & (64 - 1))) - 1;\n    matches &= mask;\n    for (; matches > 0; matches &= (matches - 1)) {\n      const size_t rb_index =\n          (head + (size_t)BROTLI_TZCNT64(matches)) & self->block_mask_;\n      size_t prev_ix = bucket[rb_index];\n      uint32_t current4;\n      const size_t backward = cur_ix - prev_ix;\n      if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n        break;\n      }\n      prev_ix &= ring_buffer_mask;\n      if (cur_ix_masked + best_len > ring_buffer_mask) {\n        break;\n      }\n      if (prev_ix + best_len > ring_buffer_mask ||\n          /* compare 4 bytes ending at best_len + 1 */\n          BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n              BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) {\n        continue;\n      }\n      current4 = BrotliUnalignedRead32(data + prev_ix);\n      if (first4 != current4) continue;\n      {\n        const size_t len = FindMatchLengthWithLimit(&data[prev_ix + 4],\n                                                    &data[cur_ix_masked + 4],\n                                                    max_length_m4) + 4;\n        const score_t score = BackwardReferenceScore(len, backward);\n        if (best_score < score) {\n          best_score = score;\n          best_len = len;\n          out->len = best_len;\n          out->distance = backward;\n          out->score = best_score;\n        }\n      }\n    }\n    bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;\n    tag_bucket[num[key] & self->block_mask_] = tag;\n    --num[key];\n  }\n  if (min_score == out->score) {\n    SearchInStaticDictionary(dictionary,\n        self->common_, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_FALSE);\n  }\n}\n\n#undef HashLongestMatch\n"
  },
  {
    "path": "libs/brotli/enc/hash_longest_match_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n\n   This is a hash map of fixed size (bucket_size_) to a ring buffer of\n   fixed size (block_size_). The ring buffer contains the last block_size_\n   index positions of the given hash key in the compressed data. */\n\n#define HashLongestMatch HASHER()\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }\n\n/* HashBytes is the function that chooses the bucket to place the address in. */\nstatic uint32_t FN(HashBytes)(\n    const uint8_t* BROTLI_RESTRICT data, const int shift) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return (uint32_t)(h >> shift);\n}\n\ntypedef struct HashLongestMatch {\n  /* Number of hash buckets. */\n  size_t bucket_size_;\n  /* Only block_size_ newest backward references are kept,\n     and the older are forgotten. */\n  size_t block_size_;\n  /* Left-shift for computing hash bucket index from hash value. */\n  int hash_shift_;\n  /* Mask for accessing entries in a block (in a ring-buffer manner). */\n  uint32_t block_mask_;\n\n  int block_bits_;\n  int num_last_distances_to_check_;\n\n  /* Shortcuts. */\n  HasherCommon* common_;\n\n  /* --- Dynamic size members --- */\n\n  /* Number of entries in a particular bucket. */\n  uint16_t* num_;  /* uint16_t[bucket_size]; */\n\n  /* Buckets containing block_size_ of backward references. */\n  uint32_t* buckets_;  /* uint32_t[bucket_size * block_size]; */\n} HashLongestMatch;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common_ = common;\n\n  BROTLI_UNUSED(params);\n  self->hash_shift_ = 32 - common->params.bucket_bits;\n  self->bucket_size_ = (size_t)1 << common->params.bucket_bits;\n  self->block_size_ = (size_t)1 << common->params.block_bits;\n  self->block_mask_ = (uint32_t)(self->block_size_ - 1);\n  self->num_ = (uint16_t*)common->extra[0];\n  self->buckets_ = (uint32_t*)common->extra[1];\n  self->block_bits_ = common->params.block_bits;\n  self->num_last_distances_to_check_ =\n      common->params.num_last_distances_to_check;\n}\n\nstatic void FN(Prepare)(\n    HashLongestMatch* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = self->bucket_size_ >> 6;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      const uint32_t key = FN(HashBytes)(&data[i], self->hash_shift_);\n      num[key] = 0;\n    }\n  } else {\n    memset(num, 0, self->bucket_size_ * sizeof(num[0]));\n  }\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;\n  size_t block_size = (size_t)1 << params->hasher.block_bits;\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint16_t) * bucket_size;\n  alloc_size[1] = sizeof(uint32_t) * bucket_size * block_size;\n}\n\n/* Look at 4 bytes at &data[ix & mask].\n   Compute a hash from these, and store the value of ix at that position. */\nstatic BROTLI_INLINE void FN(Store)(\n    HashLongestMatch* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_shift_);\n  const size_t minor_ix = num[key] & self->block_mask_;\n  const size_t offset = minor_ix + (key << self->block_bits_);\n  ++num[key];\n  buckets[offset] = (uint32_t)ix;\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1);\n  }\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  PrepareDistanceCache(distance_cache, self->num_last_distances_to_check_);\n}\n\n/* Find a longest backward match of &data[cur_ix] up to the length of\n   max_length and stores the position cur_ix in the hash table.\n\n   REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache\n             values; if this method is invoked repeatedly with the same distance\n             cache values, it is enough to invoke FN(PrepareDistanceCache) once.\n\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* Don't accept a short copy from far away. */\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  /* Precalculate the hash key and prefetch the bucket. */\n  const uint32_t key =\n      FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_);\n  uint32_t* BROTLI_RESTRICT bucket = &buckets[key << self->block_bits_];\n  PREFETCH_L1(bucket);\n  if (self->block_bits_ > 4) PREFETCH_L1(bucket + 16);\n  out->len = 0;\n  out->len_code_delta = 0;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask);\n\n  /* Try last distance first. */\n  for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) {\n    const size_t backward = (size_t)distance_cache[i];\n    size_t prev_ix = (size_t)(cur_ix - backward);\n    if (prev_ix >= cur_ix) {\n      continue;\n    }\n    if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n      continue;\n    }\n    prev_ix &= ring_buffer_mask;\n\n    if (cur_ix_masked + best_len > ring_buffer_mask) {\n      break;\n    }\n    if (prev_ix + best_len > ring_buffer_mask ||\n        data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {\n      continue;\n    }\n    {\n      const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                  &data[cur_ix_masked],\n                                                  max_length);\n      if (len >= 3 || (len == 2 && i < 2)) {\n        /* Comparing for >= 2 does not change the semantics, but just saves for\n           a few unnecessary binary logarithms in backward reference score,\n           since we are not interested in such short matches. */\n        score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  {\n    const size_t down =\n        (num[key] > self->block_size_) ? (num[key] - self->block_size_) : 0u;\n    for (i = num[key]; i > down;) {\n      size_t prev_ix = bucket[--i & self->block_mask_];\n      const size_t backward = cur_ix - prev_ix;\n      if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n        break;\n      }\n      prev_ix &= ring_buffer_mask;\n      if (cur_ix_masked + best_len > ring_buffer_mask) {\n        break;\n      }\n      if (prev_ix + best_len > ring_buffer_mask ||\n          /* compare 4 bytes ending at best_len + 1 */\n          BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n              BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) {\n        continue;\n      }\n      {\n        const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                    &data[cur_ix_masked],\n                                                    max_length);\n        if (len >= 4) {\n          /* Comparing for >= 3 does not change the semantics, but just saves\n             for a few unnecessary binary logarithms in backward reference\n             score, since we are not interested in such short matches. */\n          score_t score = BackwardReferenceScore(len, backward);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n    bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;\n    ++num[key];\n  }\n  if (min_score == out->score) {\n    SearchInStaticDictionary(dictionary,\n        self->common_, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_FALSE);\n  }\n}\n\n#undef HashLongestMatch\n"
  },
  {
    "path": "libs/brotli/enc/hash_longest_match_quickly_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP_BITS, HASH_LEN,\n                        USE_DICTIONARY\n */\n\n#define HashLongestMatchQuickly HASHER()\n\n#define BUCKET_SIZE (1 << BUCKET_BITS)\n#define BUCKET_MASK (BUCKET_SIZE - 1)\n#define BUCKET_SWEEP (1 << BUCKET_SWEEP_BITS)\n#define BUCKET_SWEEP_MASK ((BUCKET_SWEEP - 1) << 3)\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }\n\n/* HashBytes is the function that chooses the bucket to place\n   the address in. The HashLongestMatch and HashLongestMatchQuickly\n   classes have separate, different implementations of hashing. */\nstatic uint32_t FN(HashBytes)(const uint8_t* data) {\n  const uint64_t h = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8 * HASH_LEN)) *\n                      kHashMul64);\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return (uint32_t)(h >> (64 - BUCKET_BITS));\n}\n\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n\n   This is a hash map of fixed size (BUCKET_SIZE). */\ntypedef struct HashLongestMatchQuickly {\n  /* Shortcuts. */\n  HasherCommon* common;\n\n  /* --- Dynamic size members --- */\n\n  uint32_t* buckets_;  /* uint32_t[BUCKET_SIZE]; */\n} HashLongestMatchQuickly;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common = common;\n\n  BROTLI_UNUSED(params);\n  self->buckets_ = (uint32_t*)common->extra[0];\n}\n\nstatic void FN(Prepare)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = BUCKET_SIZE >> 5;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      const uint32_t key = FN(HashBytes)(&data[i]);\n      if (BUCKET_SWEEP == 1) {\n        buckets[key] = 0;\n      } else {\n        uint32_t j;\n        for (j = 0; j < BUCKET_SWEEP; ++j) {\n          buckets[(key + (j << 3)) & BUCKET_MASK] = 0;\n        }\n      }\n    }\n  } else {\n    /* It is not strictly necessary to fill this buffer here, but\n       not filling will make the results of the compression stochastic\n       (but correct). This is because random data would cause the\n       system to find accidentally good backward references here and there. */\n    memset(buckets, 0, sizeof(uint32_t) * BUCKET_SIZE);\n  }\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  BROTLI_UNUSED(params);\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint32_t) * BUCKET_SIZE;\n}\n\n/* Look at 5 bytes at &data[ix & mask].\n   Compute a hash from these, and store the value somewhere within\n   [ix .. ix+3]. */\nstatic BROTLI_INLINE void FN(Store)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {\n  const uint32_t key = FN(HashBytes)(&data[ix & mask]);\n  if (BUCKET_SWEEP == 1) {\n    self->buckets_[key] = (uint32_t)ix;\n  } else {\n    /* Wiggle the value with the bucket sweep range. */\n    const uint32_t off = ix & BUCKET_SWEEP_MASK;\n    self->buckets_[(key + off) & BUCKET_MASK] = (uint32_t)ix;\n  }\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position,\n    const uint8_t* ringbuffer, size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1);\n  }\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  BROTLI_UNUSED(self);\n  BROTLI_UNUSED(distance_cache);\n}\n\n/* Find a longest backward match of &data[cur_ix & ring_buffer_mask]\n   up to the length of max_length and stores the position cur_ix in the\n   hash table.\n\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashLongestMatchQuickly* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache,\n    const size_t cur_ix, const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t best_len_in = out->len;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* TODO: compare 4 bytes at once (and set the minimum best len to 4) */\n  int compare_char = data[cur_ix_masked + best_len_in];\n  size_t key = FN(HashBytes)(&data[cur_ix_masked]);\n  size_t key_out;\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = best_len_in;\n  size_t cached_backward = (size_t)distance_cache[0];\n  size_t prev_ix = cur_ix - cached_backward;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask);\n\n  out->len_code_delta = 0;\n  if (prev_ix < cur_ix) {\n    prev_ix &= (uint32_t)ring_buffer_mask;\n    if (compare_char == data[prev_ix + best_len]) {\n      const size_t len = FindMatchLengthWithLimit(\n          &data[prev_ix], &data[cur_ix_masked], max_length);\n      if (len >= 4) {\n        const score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          out->len = len;\n          out->distance = cached_backward;\n          out->score = score;\n          if (BUCKET_SWEEP == 1) {\n            buckets[key] = (uint32_t)cur_ix;\n            return;\n          } else {\n            best_len = len;\n            best_score = score;\n            compare_char = data[cur_ix_masked + len];\n          }\n        }\n      }\n    }\n  }\n  if (BUCKET_SWEEP == 1) {\n    size_t backward;\n    size_t len;\n    /* Only one to look for, don't bother to prepare for a loop. */\n    prev_ix = buckets[key];\n    buckets[key] = (uint32_t)cur_ix;\n    backward = cur_ix - prev_ix;\n    prev_ix &= (uint32_t)ring_buffer_mask;\n    if (compare_char != data[prev_ix + best_len_in]) {\n      return;\n    }\n    if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {\n      return;\n    }\n    len = FindMatchLengthWithLimit(&data[prev_ix],\n                                   &data[cur_ix_masked],\n                                   max_length);\n    if (len >= 4) {\n      const score_t score = BackwardReferenceScore(len, backward);\n      if (best_score < score) {\n        out->len = len;\n        out->distance = backward;\n        out->score = score;\n        return;\n      }\n    }\n  } else {\n    size_t keys[BUCKET_SWEEP];\n    size_t i;\n    for (i = 0; i < BUCKET_SWEEP; ++i) {\n      keys[i] = (key + (i << 3)) & BUCKET_MASK;\n    }\n    key_out = keys[(cur_ix & BUCKET_SWEEP_MASK) >> 3];\n    for (i = 0; i < BUCKET_SWEEP; ++i) {\n      size_t len;\n      size_t backward;\n      prev_ix = buckets[keys[i]];\n      backward = cur_ix - prev_ix;\n      prev_ix &= (uint32_t)ring_buffer_mask;\n      if (compare_char != data[prev_ix + best_len]) {\n        continue;\n      }\n      if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {\n        continue;\n      }\n      len = FindMatchLengthWithLimit(&data[prev_ix],\n                                     &data[cur_ix_masked],\n                                     max_length);\n      if (len >= 4) {\n        const score_t score = BackwardReferenceScore(len, backward);\n        if (best_score < score) {\n          best_len = len;\n          out->len = len;\n          compare_char = data[cur_ix_masked + len];\n          best_score = score;\n          out->score = score;\n          out->distance = backward;\n        }\n      }\n    }\n  }\n  if (USE_DICTIONARY && min_score == out->score) {\n    SearchInStaticDictionary(dictionary,\n        self->common, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_TRUE);\n  }\n  if (BUCKET_SWEEP != 1) {\n    buckets[key_out] = (uint32_t)cur_ix;\n  }\n}\n\n#undef BUCKET_SWEEP_MASK\n#undef BUCKET_SWEEP\n#undef BUCKET_MASK\n#undef BUCKET_SIZE\n\n#undef HashLongestMatchQuickly\n"
  },
  {
    "path": "libs/brotli/enc/hash_longest_match_simd_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2010 Google Inc. All Rights Reserved.\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n/* template parameters: FN */\n/* A (forgetful) hash table to the data seen by the compressor, to\n   help create backward references to previous data.\n   This is a hash map of fixed size (bucket_size_) to a ring buffer of\n   fixed size (block_size_). The ring buffer contains the last block_size_\n   index positions of the given hash key in the compressed data. */\n#define HashLongestMatch HASHER()\n#define TAG_HASH_BITS 8\n#define TAG_HASH_MASK ((1 << TAG_HASH_BITS) - 1)\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }\n/* HashBytes is the function that chooses the bucket to place the address in. */\nstatic uint32_t FN(HashBytes)(\n    const uint8_t* BROTLI_RESTRICT data, const int shift) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return (uint32_t)(h >> shift);\n}\ntypedef struct HashLongestMatch {\n  /* Number of hash buckets. */\n  size_t bucket_size_;\n  /* Only block_size_ newest backward references are kept,\n     and the older are forgotten. */\n  size_t block_size_;\n  /* Left-shift for computing hash bucket index from hash value. */\n  int hash_shift_;\n  /* Mask for accessing entries in a block (in a ring-buffer manner). */\n  uint32_t block_mask_;\n  int block_bits_;\n  int num_last_distances_to_check_;\n  /* Shortcuts. */\n  HasherCommon* common_;\n  /* --- Dynamic size members --- */\n  /* Number of entries in a particular bucket. */\n  uint16_t* num_;  /* uint16_t[bucket_size]; */\n  uint8_t* tags_;\n  /* Buckets containing block_size_ of backward references. */\n  uint32_t* buckets_;  /* uint32_t[bucket_size * block_size]; */\n} HashLongestMatch;\nstatic void FN(Initialize)(\n    HasherCommon* common, HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->common_ = common;\n  BROTLI_UNUSED(params);\n  self->hash_shift_ = 32 - common->params.bucket_bits - TAG_HASH_BITS;\n  self->bucket_size_ = (size_t)1 << common->params.bucket_bits;\n  self->block_size_ = (size_t)1 << common->params.block_bits;\n  self->block_mask_ = (uint32_t)(self->block_size_ - 1);\n  self->num_ = (uint16_t*)common->extra[0];\n  self->tags_ = (uint8_t*)common->extra[1];\n  self->buckets_ = (uint32_t*)common->extra[2];\n  self->block_bits_ = common->params.block_bits;\n  self->num_last_distances_to_check_ =\n      common->params.num_last_distances_to_check;\n}\nstatic void FN(Prepare)(\n    HashLongestMatch* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  /* Partial preparation is 100 times slower (per socket). */\n  size_t partial_prepare_threshold = self->bucket_size_ >> 6;\n  if (one_shot && input_size <= partial_prepare_threshold) {\n    size_t i;\n    for (i = 0; i < input_size; ++i) {\n      const uint32_t hash = FN(HashBytes)(&data[i], self->hash_shift_);\n      const uint32_t key = hash >> TAG_HASH_BITS;\n      num[key] = 65535;\n    }\n  } else {\n    /* Set all the bytes of num to 255, which makes each uint16_t 65535. */\n    memset(num, 255, self->bucket_size_ * sizeof(num[0]));\n  }\n}\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;\n  size_t block_size = (size_t)1 << params->hasher.block_bits;\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = sizeof(uint16_t) * bucket_size;\n  alloc_size[1] = sizeof(uint8_t) * bucket_size * block_size;\n  alloc_size[2] = sizeof(uint32_t) * bucket_size * block_size;\n}\n/* Look at 4 bytes at &data[ix & mask].\n   Compute a hash from these, and store the value of ix at that position. */\nstatic BROTLI_INLINE void FN(Store)(\n    HashLongestMatch* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint8_t* BROTLI_RESTRICT tags = self->tags_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  const size_t hash = FN(HashBytes)(&data[ix & mask], self->hash_shift_);\n  const size_t key = hash >> TAG_HASH_BITS;\n  const uint8_t tag = hash & TAG_HASH_MASK;\n  const size_t minor_ix = num[key] & self->block_mask_;\n  const size_t offset = minor_ix + (key << self->block_bits_);\n  --num[key];\n  buckets[offset] = (uint32_t)ix;\n  tags[offset] = tag;\n}\nstatic BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i;\n  for (i = ix_start; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {\n    /* Prepare the hashes for three last bytes of the last write.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2);\n    FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1);\n  }\n}\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  PrepareDistanceCache(distance_cache, self->num_last_distances_to_check_);\n}\n\n/* Find a longest backward match of &data[cur_ix] up to the length of\n   max_length and stores the position cur_ix in the hash table.\n   REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache\n             values; if this method is invoked repeatedly with the same distance\n             cache values, it is enough to invoke FN(PrepareDistanceCache) once.\n   Does not look for matches longer than max_length.\n   Does not look for matches further away than max_backward.\n   Writes the best match into |out|.\n   |out|->score is updated only if a better match is found. */\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashLongestMatch* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  uint16_t* BROTLI_RESTRICT num = self->num_;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  uint8_t* BROTLI_RESTRICT tags = self->tags_;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  /* Don't accept a short copy from far away. */\n  score_t min_score = out->score;\n  score_t best_score = out->score;\n  size_t best_len = out->len;\n  size_t i;\n  /* Precalculate the hash key and prefetch the bucket. */\n  const uint32_t hash =\n      FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_);\n  const uint32_t key = hash >> TAG_HASH_BITS;\n  uint32_t* BROTLI_RESTRICT bucket = &buckets[key << self->block_bits_];\n  uint8_t* BROTLI_RESTRICT tag_bucket = &tags[key << self->block_bits_];\n  PREFETCH_L1(bucket);\n  PREFETCH_L1(tag_bucket);\n  if (self->block_bits_ > 4) PREFETCH_L1(bucket + 16);\n  out->len = 0;\n  out->len_code_delta = 0;\n\n  BROTLI_DCHECK(cur_ix_masked + max_length <= ring_buffer_mask);\n\n  /* Try last distance first. */\n  for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) {\n    const size_t backward = (size_t)distance_cache[i];\n    size_t prev_ix = (size_t)(cur_ix - backward);\n    if (prev_ix >= cur_ix) {\n      continue;\n    }\n    if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n      continue;\n    }\n    prev_ix &= ring_buffer_mask;\n\n    if (cur_ix_masked + best_len > ring_buffer_mask) {\n      break;\n    }\n    if (prev_ix + best_len > ring_buffer_mask ||\n        data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {\n      continue;\n    }\n    {\n      const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                  &data[cur_ix_masked],\n                                                  max_length);\n      if (len >= 3 || (len == 2 && i < 2)) {\n        /* Comparing for >= 2 does not change the semantics, but just saves for\n           a few unnecessary binary logarithms in backward reference score,\n           since we are not interested in such short matches. */\n        score_t score = BackwardReferenceScoreUsingLastDistance(len);\n        if (best_score < score) {\n          if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n  }\n  /* we require matches of len >4, so increase best_len to 3, so we can compare\n   * 4 bytes all the time. */\n  if (best_len < 3) {\n    best_len = 3;\n  }\n  {\n    const uint8_t tag = hash & TAG_HASH_MASK;\n    const size_t head = (num[key] + 1) & self->block_mask_;\n    uint64_t matches =\n        GetMatchingTagMask(self->block_size_ / 16, tag, tag_bucket, head);\n    /* Mask off any matches from uninitialized tags. */\n    uint16_t n = 65535 - num[key];\n    uint64_t block_has_unused_slots = self->block_size_ > n;\n    uint64_t mask = (block_has_unused_slots << (n & (64 - 1))) - 1;\n    matches &= mask;\n    for (; matches > 0; matches &= (matches - 1)) {\n      const size_t rb_index =\n          (head + (size_t)BROTLI_TZCNT64(matches)) & self->block_mask_;\n      size_t prev_ix = bucket[rb_index];\n      const size_t backward = cur_ix - prev_ix;\n      if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n        break;\n      }\n      prev_ix &= ring_buffer_mask;\n      if (cur_ix_masked + best_len > ring_buffer_mask) {\n        break;\n      }\n      if (prev_ix + best_len > ring_buffer_mask ||\n          /* compare 4 bytes ending at best_len + 1 */\n          BrotliUnalignedRead32(&data[cur_ix_masked + best_len - 3]) !=\n              BrotliUnalignedRead32(&data[prev_ix + best_len - 3])) {\n        continue;\n      }\n      {\n        const size_t len = FindMatchLengthWithLimit(&data[prev_ix],\n                                                    &data[cur_ix_masked],\n                                                    max_length);\n        if (len >= 4) {\n          /* Comparing for >= 3 does not change the semantics, but just saves\n             for a few unnecessary binary logarithms in backward reference\n             score, since we are not interested in such short matches. */\n          score_t score = BackwardReferenceScore(len, backward);\n          if (best_score < score) {\n            best_score = score;\n            best_len = len;\n            out->len = best_len;\n            out->distance = backward;\n            out->score = best_score;\n          }\n        }\n      }\n    }\n    bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;\n    tag_bucket[num[key] & self->block_mask_] = tag;\n    --num[key];\n  }\n  if (min_score == out->score) {\n    SearchInStaticDictionary(dictionary,\n        self->common_, &data[cur_ix_masked], max_length, dictionary_distance,\n        max_distance, out, BROTLI_FALSE);\n  }\n}\n#undef HashLongestMatch\n"
  },
  {
    "path": "libs/brotli/enc/hash_rolling_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2018 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, JUMP, NUMBUCKETS, MASK, CHUNKLEN */\n/* NUMBUCKETS / (MASK + 1) = probability of storing and using hash code. */\n/* JUMP = skip bytes for speedup */\n\n/* Rolling hash for long distance long string matches. Stores one position\n   per bucket, bucket key is computed over a long region. */\n\n#define HashRolling HASHER()\n\nstatic const uint32_t FN(kRollingHashMul32) = 69069;\nstatic const uint32_t FN(kInvalidPos) = 0xffffffff;\n\n/* This hasher uses a longer forward length, but returning a higher value here\n   will hurt compression by the main hasher when combined with a composite\n   hasher. The hasher tests for forward itself instead. */\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }\n\n/* Computes a code from a single byte. A lookup table of 256 values could be\n   used, but simply adding 1 works about as good. */\nstatic uint32_t FN(HashByte)(uint8_t byte) {\n  return (uint32_t)byte + 1u;\n}\n\nstatic uint32_t FN(HashRollingFunctionInitial)(uint32_t state, uint8_t add,\n                                               uint32_t factor) {\n  return (uint32_t)(factor * state + FN(HashByte)(add));\n}\n\nstatic uint32_t FN(HashRollingFunction)(uint32_t state, uint8_t add,\n                                        uint8_t rem, uint32_t factor,\n                                        uint32_t factor_remove) {\n  return (uint32_t)(factor * state +\n      FN(HashByte)(add) - factor_remove * FN(HashByte)(rem));\n}\n\ntypedef struct HashRolling {\n  uint32_t state;\n  uint32_t* table;\n  size_t next_ix;\n\n  uint32_t chunk_len;\n  uint32_t factor;\n  uint32_t factor_remove;\n} HashRolling;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashRolling* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  size_t i;\n  self->state = 0;\n  self->next_ix = 0;\n\n  self->factor = FN(kRollingHashMul32);\n\n  /* Compute the factor of the oldest byte to remove: factor**steps modulo\n     0xffffffff (the multiplications rely on 32-bit overflow) */\n  self->factor_remove = 1;\n  for (i = 0; i < CHUNKLEN; i += JUMP) {\n    self->factor_remove *= self->factor;\n  }\n\n  self->table = (uint32_t*)common->extra[0];\n  for (i = 0; i < NUMBUCKETS; i++) {\n    self->table[i] = FN(kInvalidPos);\n  }\n\n  BROTLI_UNUSED(params);\n}\n\nstatic void FN(Prepare)(HashRolling* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  size_t i;\n  /* Too small size, cannot use this hasher. */\n  if (input_size < CHUNKLEN) return;\n  self->state = 0;\n  for (i = 0; i < CHUNKLEN; i += JUMP) {\n    self->state = FN(HashRollingFunctionInitial)(\n        self->state, data[i], self->factor);\n  }\n  BROTLI_UNUSED(one_shot);\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  BROTLI_UNUSED(params);\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  alloc_size[0] = NUMBUCKETS * sizeof(uint32_t);\n}\n\nstatic BROTLI_INLINE void FN(Store)(HashRolling* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {\n  BROTLI_UNUSED(self);\n  BROTLI_UNUSED(data);\n  BROTLI_UNUSED(mask);\n  BROTLI_UNUSED(ix);\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(HashRolling* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  BROTLI_UNUSED(self);\n  BROTLI_UNUSED(data);\n  BROTLI_UNUSED(mask);\n  BROTLI_UNUSED(ix_start);\n  BROTLI_UNUSED(ix_end);\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashRolling* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ring_buffer_mask) {\n  /* In this case we must re-initialize the hasher from scratch from the\n     current position. */\n  size_t position_masked;\n  size_t available = num_bytes;\n  if ((position & (JUMP - 1)) != 0) {\n    size_t diff = JUMP - (position & (JUMP - 1));\n    available = (diff > available) ? 0 : (available - diff);\n    position += diff;\n  }\n  position_masked = position & ring_buffer_mask;\n  /* wrapping around ringbuffer not handled. */\n  if (available > ring_buffer_mask - position_masked) {\n    available = ring_buffer_mask - position_masked;\n  }\n\n  FN(Prepare)(self, BROTLI_FALSE, available,\n      ringbuffer + (position & ring_buffer_mask));\n  self->next_ix = position;\n  BROTLI_UNUSED(num_bytes);\n}\n\nstatic BROTLI_INLINE void FN(PrepareDistanceCache)(\n    HashRolling* BROTLI_RESTRICT self,\n    int* BROTLI_RESTRICT distance_cache) {\n  BROTLI_UNUSED(self);\n  BROTLI_UNUSED(distance_cache);\n}\n\nstatic BROTLI_INLINE void FN(FindLongestMatch)(\n    HashRolling* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,\n    const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const size_t max_distance,\n    HasherSearchResult* BROTLI_RESTRICT out) {\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  size_t pos;\n\n  if ((cur_ix & (JUMP - 1)) != 0) return;\n\n  /* Not enough lookahead */\n  if (max_length < CHUNKLEN) return;\n\n  for (pos = self->next_ix; pos <= cur_ix; pos += JUMP) {\n    uint32_t code = self->state & MASK;\n\n    uint8_t rem = data[pos & ring_buffer_mask];\n    uint8_t add = data[(pos + CHUNKLEN) & ring_buffer_mask];\n    size_t found_ix = FN(kInvalidPos);\n\n    self->state = FN(HashRollingFunction)(\n        self->state, add, rem, self->factor, self->factor_remove);\n\n    if (code < NUMBUCKETS) {\n      found_ix = self->table[code];\n      self->table[code] = (uint32_t)pos;\n      if (pos == cur_ix && found_ix != FN(kInvalidPos)) {\n        /* The cast to 32-bit makes backward distances up to 4GB work even\n           if cur_ix is above 4GB, despite using 32-bit values in the table. */\n        size_t backward = (uint32_t)(cur_ix - found_ix);\n        if (backward <= max_backward) {\n          const size_t found_ix_masked = found_ix & ring_buffer_mask;\n          const size_t len = FindMatchLengthWithLimit(&data[found_ix_masked],\n                                                      &data[cur_ix_masked],\n                                                      max_length);\n          if (len >= 4 && len > out->len) {\n            score_t score = BackwardReferenceScore(len, backward);\n            if (score > out->score) {\n              out->len = len;\n              out->distance = backward;\n              out->score = score;\n              out->len_code_delta = 0;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  self->next_ix = cur_ix + JUMP;\n\n  /* NOTE: this hasher does not search in the dictionary. It is used as\n     backup-hasher, the main hasher already searches in it. */\n  BROTLI_UNUSED(dictionary);\n  BROTLI_UNUSED(distance_cache);\n  BROTLI_UNUSED(dictionary_distance);\n  BROTLI_UNUSED(max_distance);\n}\n\n#undef HashRolling\n"
  },
  {
    "path": "libs/brotli/enc/hash_to_binary_tree_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN, BUCKET_BITS, MAX_TREE_COMP_LENGTH,\n                        MAX_TREE_SEARCH_DEPTH */\n\n/* A (forgetful) hash table where each hash bucket contains a binary tree of\n   sequences whose first 4 bytes share the same hash code.\n   Each sequence is MAX_TREE_COMP_LENGTH long and is identified by its starting\n   position in the input data. The binary tree is sorted by the lexicographic\n   order of the sequences, and it is also a max-heap with respect to the\n   starting positions. */\n\n#define HashToBinaryTree HASHER()\n\n#define BUCKET_SIZE (1 << BUCKET_BITS)\n\nstatic BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }\nstatic BROTLI_INLINE size_t FN(StoreLookahead)(void) {\n  return MAX_TREE_COMP_LENGTH;\n}\n\nstatic uint32_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT data) {\n  uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;\n  /* The higher bits contain more mixture from the multiplication,\n     so we take our results from there. */\n  return h >> (32 - BUCKET_BITS);\n}\n\ntypedef struct HashToBinaryTree {\n  /* The window size minus 1 */\n  size_t window_mask_;\n\n  /* Hash table that maps the 4-byte hashes of the sequence to the last\n     position where this hash was found, which is the root of the binary\n     tree of sequences that share this hash bucket. */\n  uint32_t* buckets_;  /* uint32_t[BUCKET_SIZE]; */\n\n  /* A position used to mark a non-existent sequence, i.e. a tree is empty if\n     its root is at invalid_pos_ and a node is a leaf if both its children\n     are at invalid_pos_. */\n  uint32_t invalid_pos_;\n\n  /* --- Dynamic size members --- */\n\n  /* The union of the binary trees of each hash bucket. The root of the tree\n     corresponding to a hash is a sequence starting at buckets_[hash] and\n     the left and right children of a sequence starting at pos are\n     forest_[2 * pos] and forest_[2 * pos + 1]. */\n  uint32_t* forest_;  /* uint32_t[2 * num_nodes] */\n} HashToBinaryTree;\n\nstatic void FN(Initialize)(\n    HasherCommon* common, HashToBinaryTree* BROTLI_RESTRICT self,\n    const BrotliEncoderParams* params) {\n  self->buckets_ = (uint32_t*)common->extra[0];\n  self->forest_ = (uint32_t*)common->extra[1];\n\n  self->window_mask_ = (1u << params->lgwin) - 1u;\n  self->invalid_pos_ = (uint32_t)(0 - self->window_mask_);\n}\n\nstatic void FN(Prepare)\n    (HashToBinaryTree* BROTLI_RESTRICT self, BROTLI_BOOL one_shot,\n    size_t input_size, const uint8_t* BROTLI_RESTRICT data) {\n  uint32_t invalid_pos = self->invalid_pos_;\n  uint32_t i;\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  BROTLI_UNUSED(data);\n  BROTLI_UNUSED(one_shot);\n  BROTLI_UNUSED(input_size);\n  for (i = 0; i < BUCKET_SIZE; i++) {\n    buckets[i] = invalid_pos;\n  }\n}\n\nstatic BROTLI_INLINE void FN(HashMemAllocInBytes)(\n    const BrotliEncoderParams* params, BROTLI_BOOL one_shot,\n    size_t input_size, size_t* alloc_size) {\n  size_t num_nodes = (size_t)1 << params->lgwin;\n  if (one_shot && input_size < num_nodes) {\n    num_nodes = input_size;\n  }\n  alloc_size[0] = sizeof(uint32_t) * BUCKET_SIZE;\n  alloc_size[1] = 2 * sizeof(uint32_t) * num_nodes;\n}\n\nstatic BROTLI_INLINE size_t FN(LeftChildIndex)(\n    HashToBinaryTree* BROTLI_RESTRICT self,\n    const size_t pos) {\n  return 2 * (pos & self->window_mask_);\n}\n\nstatic BROTLI_INLINE size_t FN(RightChildIndex)(\n    HashToBinaryTree* BROTLI_RESTRICT self,\n    const size_t pos) {\n  return 2 * (pos & self->window_mask_) + 1;\n}\n\n/* Stores the hash of the next 4 bytes and in a single tree-traversal, the\n   hash bucket's binary tree is searched for matches and is re-rooted at the\n   current position.\n\n   If less than MAX_TREE_COMP_LENGTH data is available, the hash bucket of the\n   current position is searched for matches, but the state of the hash table\n   is not changed, since we can not know the final sorting order of the\n   current (incomplete) sequence.\n\n   This function must be called with increasing cur_ix positions. */\nstatic BROTLI_INLINE BackwardMatch* FN(StoreAndFindMatches)(\n    HashToBinaryTree* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data,\n    const size_t cur_ix, const size_t ring_buffer_mask, const size_t max_length,\n    const size_t max_backward, size_t* const BROTLI_RESTRICT best_len,\n    BackwardMatch* BROTLI_RESTRICT matches) {\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  const size_t max_comp_len =\n      BROTLI_MIN(size_t, max_length, MAX_TREE_COMP_LENGTH);\n  const BROTLI_BOOL should_reroot_tree =\n      TO_BROTLI_BOOL(max_length >= MAX_TREE_COMP_LENGTH);\n  const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);\n  uint32_t* BROTLI_RESTRICT buckets = self->buckets_;\n  uint32_t* BROTLI_RESTRICT forest = self->forest_;\n  size_t prev_ix = buckets[key];\n  /* The forest index of the rightmost node of the left subtree of the new\n     root, updated as we traverse and re-root the tree of the hash bucket. */\n  size_t node_left = FN(LeftChildIndex)(self, cur_ix);\n  /* The forest index of the leftmost node of the right subtree of the new\n     root, updated as we traverse and re-root the tree of the hash bucket. */\n  size_t node_right = FN(RightChildIndex)(self, cur_ix);\n  /* The match length of the rightmost node of the left subtree of the new\n     root, updated as we traverse and re-root the tree of the hash bucket. */\n  size_t best_len_left = 0;\n  /* The match length of the leftmost node of the right subtree of the new\n     root, updated as we traverse and re-root the tree of the hash bucket. */\n  size_t best_len_right = 0;\n  size_t depth_remaining;\n  if (should_reroot_tree) {\n    buckets[key] = (uint32_t)cur_ix;\n  }\n  for (depth_remaining = MAX_TREE_SEARCH_DEPTH; ; --depth_remaining) {\n    const size_t backward = cur_ix - prev_ix;\n    const size_t prev_ix_masked = prev_ix & ring_buffer_mask;\n    if (backward == 0 || backward > max_backward || depth_remaining == 0) {\n      if (should_reroot_tree) {\n        forest[node_left] = self->invalid_pos_;\n        forest[node_right] = self->invalid_pos_;\n      }\n      break;\n    }\n    {\n      const size_t cur_len = BROTLI_MIN(size_t, best_len_left, best_len_right);\n      size_t len;\n      BROTLI_DCHECK(cur_len <= MAX_TREE_COMP_LENGTH);\n      len = cur_len +\n          FindMatchLengthWithLimit(&data[cur_ix_masked + cur_len],\n                                   &data[prev_ix_masked + cur_len],\n                                   max_length - cur_len);\n      BROTLI_DCHECK(\n          0 == memcmp(&data[cur_ix_masked], &data[prev_ix_masked], len));\n      if (matches && len > *best_len) {\n        *best_len = len;\n        InitBackwardMatch(matches++, backward, len);\n      }\n      if (len >= max_comp_len) {\n        if (should_reroot_tree) {\n          forest[node_left] = forest[FN(LeftChildIndex)(self, prev_ix)];\n          forest[node_right] = forest[FN(RightChildIndex)(self, prev_ix)];\n        }\n        break;\n      }\n      if (data[cur_ix_masked + len] > data[prev_ix_masked + len]) {\n        best_len_left = len;\n        if (should_reroot_tree) {\n          forest[node_left] = (uint32_t)prev_ix;\n        }\n        node_left = FN(RightChildIndex)(self, prev_ix);\n        prev_ix = forest[node_left];\n      } else {\n        best_len_right = len;\n        if (should_reroot_tree) {\n          forest[node_right] = (uint32_t)prev_ix;\n        }\n        node_right = FN(LeftChildIndex)(self, prev_ix);\n        prev_ix = forest[node_right];\n      }\n    }\n  }\n  return matches;\n}\n\n/* Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the\n   length of max_length and stores the position cur_ix in the hash table.\n\n   Sets *num_matches to the number of matches found, and stores the found\n   matches in matches[0] to matches[*num_matches - 1]. The matches will be\n   sorted by strictly increasing length and (non-strictly) increasing\n   distance. */\nstatic BROTLI_INLINE size_t FN(FindAllMatches)(\n    HashToBinaryTree* BROTLI_RESTRICT self,\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* BROTLI_RESTRICT data,\n    const size_t ring_buffer_mask, const size_t cur_ix,\n    const size_t max_length, const size_t max_backward,\n    const size_t dictionary_distance, const BrotliEncoderParams* params,\n    BackwardMatch* matches) {\n  BackwardMatch* const orig_matches = matches;\n  const size_t cur_ix_masked = cur_ix & ring_buffer_mask;\n  size_t best_len = 1;\n  const size_t short_match_max_backward =\n      params->quality != HQ_ZOPFLIFICATION_QUALITY ? 16 : 64;\n  size_t stop = cur_ix - short_match_max_backward;\n  uint32_t dict_matches[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1];\n  size_t i;\n  if (cur_ix < short_match_max_backward) { stop = 0; }\n  for (i = cur_ix - 1; i > stop && best_len <= 2; --i) {\n    size_t prev_ix = i;\n    const size_t backward = cur_ix - prev_ix;\n    if (BROTLI_PREDICT_FALSE(backward > max_backward)) {\n      break;\n    }\n    prev_ix &= ring_buffer_mask;\n    if (data[cur_ix_masked] != data[prev_ix] ||\n        data[cur_ix_masked + 1] != data[prev_ix + 1]) {\n      continue;\n    }\n    {\n      const size_t len =\n          FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked],\n                                   max_length);\n      if (len > best_len) {\n        best_len = len;\n        InitBackwardMatch(matches++, backward, len);\n      }\n    }\n  }\n  if (best_len < max_length) {\n    matches = FN(StoreAndFindMatches)(self, data, cur_ix,\n        ring_buffer_mask, max_length, max_backward, &best_len, matches);\n  }\n  for (i = 0; i <= BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN; ++i) {\n    dict_matches[i] = kInvalidMatch;\n  }\n  {\n    size_t minlen = BROTLI_MAX(size_t, 4, best_len + 1);\n    if (BrotliFindAllStaticDictionaryMatches(dictionary,\n        &data[cur_ix_masked], minlen, max_length, &dict_matches[0])) {\n      size_t maxlen = BROTLI_MIN(\n          size_t, BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN, max_length);\n      size_t l;\n      for (l = minlen; l <= maxlen; ++l) {\n        uint32_t dict_id = dict_matches[l];\n        if (dict_id < kInvalidMatch) {\n          size_t distance = dictionary_distance + (dict_id >> 5) + 1;\n          if (distance <= params->dist.max_distance) {\n            InitDictionaryBackwardMatch(matches++, distance, l, dict_id & 31);\n          }\n        }\n      }\n    }\n  }\n  return (size_t)(matches - orig_matches);\n}\n\n/* Stores the hash of the next 4 bytes and re-roots the binary tree at the\n   current sequence, without returning any matches.\n   REQUIRES: ix + MAX_TREE_COMP_LENGTH <= end-of-current-block */\nstatic BROTLI_INLINE void FN(Store)(HashToBinaryTree* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data,\n    const size_t mask, const size_t ix) {\n  /* Maximum distance is window size - 16, see section 9.1. of the spec. */\n  const size_t max_backward = self->window_mask_ - BROTLI_WINDOW_GAP + 1;\n  FN(StoreAndFindMatches)(self, data, ix, mask, MAX_TREE_COMP_LENGTH,\n      max_backward, NULL, NULL);\n}\n\nstatic BROTLI_INLINE void FN(StoreRange)(HashToBinaryTree* BROTLI_RESTRICT self,\n    const uint8_t* BROTLI_RESTRICT data, const size_t mask,\n    const size_t ix_start, const size_t ix_end) {\n  size_t i = ix_start;\n  size_t j = ix_start;\n  if (ix_start + 63 <= ix_end) {\n    i = ix_end - 63;\n  }\n  if (ix_start + 512 <= i) {\n    for (; j < i; j += 8) {\n      FN(Store)(self, data, mask, j);\n    }\n  }\n  for (; i < ix_end; ++i) {\n    FN(Store)(self, data, mask, i);\n  }\n}\n\nstatic BROTLI_INLINE void FN(StitchToPreviousBlock)(\n    HashToBinaryTree* BROTLI_RESTRICT self,\n    size_t num_bytes, size_t position, const uint8_t* ringbuffer,\n    size_t ringbuffer_mask) {\n  if (num_bytes >= FN(HashTypeLength)() - 1 &&\n      position >= MAX_TREE_COMP_LENGTH) {\n    /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher.\n       These could not be calculated before, since they require knowledge\n       of both the previous and the current block. */\n    const size_t i_start = position - MAX_TREE_COMP_LENGTH + 1;\n    const size_t i_end = BROTLI_MIN(size_t, position, i_start + num_bytes);\n    size_t i;\n    for (i = i_start; i < i_end; ++i) {\n      /* Maximum distance is window size - 16, see section 9.1. of the spec.\n         Furthermore, we have to make sure that we don't look further back\n         from the start of the next block than the window size, otherwise we\n         could access already overwritten areas of the ring-buffer. */\n      const size_t max_backward =\n          self->window_mask_ - BROTLI_MAX(size_t,\n                                          BROTLI_WINDOW_GAP - 1,\n                                          position - i);\n      /* We know that i + MAX_TREE_COMP_LENGTH <= position + num_bytes, i.e. the\n         end of the current block and that we have at least\n         MAX_TREE_COMP_LENGTH tail in the ring-buffer. */\n      FN(StoreAndFindMatches)(self, ringbuffer, i, ringbuffer_mask,\n          MAX_TREE_COMP_LENGTH, max_backward, NULL, NULL);\n    }\n  }\n}\n\n#undef BUCKET_SIZE\n\n#undef HashToBinaryTree\n"
  },
  {
    "path": "libs/brotli/enc/histogram.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Build per-context histograms of literals, commands and distance codes. */\n\n#include \"histogram.h\"\n\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"block_splitter.h\"\n#include \"command.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct BlockSplitIterator {\n  const BlockSplit* split_;  /* Not owned. */\n  size_t idx_;\n  size_t type_;\n  size_t length_;\n} BlockSplitIterator;\n\nstatic void InitBlockSplitIterator(BlockSplitIterator* self,\n    const BlockSplit* split) {\n  self->split_ = split;\n  self->idx_ = 0;\n  self->type_ = 0;\n  self->length_ = split->lengths ? split->lengths[0] : 0;\n}\n\nstatic void BlockSplitIteratorNext(BlockSplitIterator* self) {\n  if (self->length_ == 0) {\n    ++self->idx_;\n    self->type_ = self->split_->types[self->idx_];\n    self->length_ = self->split_->lengths[self->idx_];\n  }\n  --self->length_;\n}\n\nvoid BrotliBuildHistogramsWithContext(\n    const Command* cmds, const size_t num_commands,\n    const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,\n    const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t start_pos,\n    size_t mask, uint8_t prev_byte, uint8_t prev_byte2,\n    const ContextType* context_modes, HistogramLiteral* literal_histograms,\n    HistogramCommand* insert_and_copy_histograms,\n    HistogramDistance* copy_dist_histograms) {\n  size_t pos = start_pos;\n  BlockSplitIterator literal_it;\n  BlockSplitIterator insert_and_copy_it;\n  BlockSplitIterator dist_it;\n  size_t i;\n\n  InitBlockSplitIterator(&literal_it, literal_split);\n  InitBlockSplitIterator(&insert_and_copy_it, insert_and_copy_split);\n  InitBlockSplitIterator(&dist_it, dist_split);\n  for (i = 0; i < num_commands; ++i) {\n    const Command* cmd = &cmds[i];\n    size_t j;\n    BlockSplitIteratorNext(&insert_and_copy_it);\n    HistogramAddCommand(&insert_and_copy_histograms[insert_and_copy_it.type_],\n        cmd->cmd_prefix_);\n    /* TODO(eustas): unwrap iterator blocks. */\n    for (j = cmd->insert_len_; j != 0; --j) {\n      size_t context;\n      BlockSplitIteratorNext(&literal_it);\n      context = literal_it.type_;\n      if (context_modes) {\n        ContextLut lut = BROTLI_CONTEXT_LUT(context_modes[context]);\n        context = (context << BROTLI_LITERAL_CONTEXT_BITS) +\n            BROTLI_CONTEXT(prev_byte, prev_byte2, lut);\n      }\n      HistogramAddLiteral(&literal_histograms[context],\n          ringbuffer[pos & mask]);\n      prev_byte2 = prev_byte;\n      prev_byte = ringbuffer[pos & mask];\n      ++pos;\n    }\n    pos += CommandCopyLen(cmd);\n    if (CommandCopyLen(cmd)) {\n      prev_byte2 = ringbuffer[(pos - 2) & mask];\n      prev_byte = ringbuffer[(pos - 1) & mask];\n      if (cmd->cmd_prefix_ >= 128) {\n        size_t context;\n        BlockSplitIteratorNext(&dist_it);\n        context = (dist_it.type_ << BROTLI_DISTANCE_CONTEXT_BITS) +\n            CommandDistanceContext(cmd);\n        HistogramAddDistance(&copy_dist_histograms[context],\n            cmd->dist_prefix_ & 0x3FF);\n      }\n    }\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/histogram.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Models the histograms of literals, commands and distance codes. */\n\n#ifndef BROTLI_ENC_HISTOGRAM_H_\n#define BROTLI_ENC_HISTOGRAM_H_\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"block_splitter.h\"\n#include \"command.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* The distance symbols effectively used by \"Large Window Brotli\" (32-bit). */\n#define BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS 544\n\n#define FN(X) X ## Literal\n#define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS\n#define DataType uint8_t\n#include \"histogram_inc.h\"  /* NOLINT(build/include) */\n#undef DataType\n#undef DATA_SIZE\n#undef FN\n\n#define FN(X) X ## Command\n#define DataType uint16_t\n#define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS\n#include \"histogram_inc.h\"  /* NOLINT(build/include) */\n#undef DATA_SIZE\n#undef FN\n\n#define FN(X) X ## Distance\n#define DATA_SIZE BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS\n#include \"histogram_inc.h\"  /* NOLINT(build/include) */\n#undef DataType\n#undef DATA_SIZE\n#undef FN\n\nBROTLI_INTERNAL void BrotliBuildHistogramsWithContext(\n    const Command* cmds, const size_t num_commands,\n    const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,\n    const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos,\n    size_t mask, uint8_t prev_byte, uint8_t prev_byte2,\n    const ContextType* context_modes, HistogramLiteral* literal_histograms,\n    HistogramCommand* insert_and_copy_histograms,\n    HistogramDistance* copy_dist_histograms);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_HISTOGRAM_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/histogram_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: Histogram, DATA_SIZE, DataType */\n\n/* A simple container for histograms of data in blocks. */\n\ntypedef struct FN(Histogram) {\n  uint32_t data_[DATA_SIZE];\n  size_t total_count_;\n  double bit_cost_;\n} FN(Histogram);\n\nstatic BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) {\n  memset(self->data_, 0, sizeof(self->data_));\n  self->total_count_ = 0;\n  self->bit_cost_ = HUGE_VAL;\n}\n\nstatic BROTLI_INLINE void FN(ClearHistograms)(\n    FN(Histogram)* array, size_t length) {\n  size_t i;\n  for (i = 0; i < length; ++i) FN(HistogramClear)(array + i);\n}\n\nstatic BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t val) {\n  ++self->data_[val];\n  ++self->total_count_;\n}\n\nstatic BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self,\n    const DataType* p, size_t n) {\n  self->total_count_ += n;\n  n += 1;\n  while (--n) ++self->data_[*p++];\n}\n\nstatic BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self,\n    const FN(Histogram)* v) {\n  size_t i;\n  self->total_count_ += v->total_count_;\n  for (i = 0; i < DATA_SIZE; ++i) {\n    self->data_[i] += v->data_[i];\n  }\n}\n\nstatic BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SIZE; }\n"
  },
  {
    "path": "libs/brotli/enc/literal_cost.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Literal cost model to allow backward reference replacement to be efficient.\n*/\n\n#include \"literal_cost.h\"\n\n#include \"../common/platform.h\"\n#include \"fast_log.h\"\n#include \"utf8_util.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic size_t UTF8Position(size_t last, size_t c, size_t clamp) {\n  if (c < 128) {\n    return 0;  /* Next one is the 'Byte 1' again. */\n  } else if (c >= 192) {  /* Next one is the 'Byte 2' of utf-8 encoding. */\n    return BROTLI_MIN(size_t, 1, clamp);\n  } else {\n    /* Let's decide over the last byte if this ends the sequence. */\n    if (last < 0xE0) {\n      return 0;  /* Completed two or three byte coding. */\n    } else {  /* Next one is the 'Byte 3' of utf-8 encoding. */\n      return BROTLI_MIN(size_t, 2, clamp);\n    }\n  }\n}\n\nstatic size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t mask,\n                                        const uint8_t* data) {\n  size_t counts[3] = { 0 };\n  size_t max_utf8 = 1;  /* should be 2, but 1 compresses better. */\n  size_t last_c = 0;\n  size_t i;\n  for (i = 0; i < len; ++i) {\n    size_t c = data[(pos + i) & mask];\n    ++counts[UTF8Position(last_c, c, 2)];\n    last_c = c;\n  }\n  if (counts[2] < 500) {\n    max_utf8 = 1;\n  }\n  if (counts[1] + counts[2] < 25) {\n    max_utf8 = 0;\n  }\n  return max_utf8;\n}\n\nstatic void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_t mask,\n                                            const uint8_t* data,\n                                            size_t* histogram, float* cost) {\n  /* max_utf8 is 0 (normal ASCII single byte modeling),\n     1 (for 2-byte UTF-8 modeling), or 2 (for 3-byte UTF-8 modeling). */\n  const size_t max_utf8 = DecideMultiByteStatsLevel(pos, len, mask, data);\n  size_t window_half = 495;\n  size_t in_window = BROTLI_MIN(size_t, window_half, len);\n  size_t in_window_utf8[3] = { 0 };\n  size_t i;\n  memset(histogram, 0, 3 * 256 * sizeof(histogram[0]));\n\n  {  /* Bootstrap histograms. */\n    size_t last_c = 0;\n    size_t utf8_pos = 0;\n    for (i = 0; i < in_window; ++i) {\n      size_t c = data[(pos + i) & mask];\n      ++histogram[256 * utf8_pos + c];\n      ++in_window_utf8[utf8_pos];\n      utf8_pos = UTF8Position(last_c, c, max_utf8);\n      last_c = c;\n    }\n  }\n\n  /* Compute bit costs with sliding window. */\n  for (i = 0; i < len; ++i) {\n    if (i >= window_half) {\n      /* Remove a byte in the past. */\n      size_t c =\n          i < window_half + 1 ? 0 : data[(pos + i - window_half - 1) & mask];\n      size_t last_c =\n          i < window_half + 2 ? 0 : data[(pos + i - window_half - 2) & mask];\n      size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);\n      --histogram[256 * utf8_pos2 + data[(pos + i - window_half) & mask]];\n      --in_window_utf8[utf8_pos2];\n    }\n    if (i + window_half < len) {\n      /* Add a byte in the future. */\n      size_t c = data[(pos + i + window_half - 1) & mask];\n      size_t last_c = data[(pos + i + window_half - 2) & mask];\n      size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);\n      ++histogram[256 * utf8_pos2 + data[(pos + i + window_half) & mask]];\n      ++in_window_utf8[utf8_pos2];\n    }\n    {\n      size_t c = i < 1 ? 0 : data[(pos + i - 1) & mask];\n      size_t last_c = i < 2 ? 0 : data[(pos + i - 2) & mask];\n      size_t utf8_pos = UTF8Position(last_c, c, max_utf8);\n      size_t masked_pos = (pos + i) & mask;\n      size_t histo = histogram[256 * utf8_pos + data[masked_pos]];\n      static const size_t prologue_length = 2000;\n      static const double multiplier = 0.35 / 2000;\n      double lit_cost;\n      if (histo == 0) {\n        histo = 1;\n      }\n      lit_cost = FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo);\n      lit_cost += 0.02905;\n      if (lit_cost < 1.0) {\n        lit_cost *= 0.5;\n        lit_cost += 0.5;\n      }\n      /* Make the first bytes more expensive -- seems to help, not sure why.\n         Perhaps because the entropy source is changing its properties\n         rapidly in the beginning of the file, perhaps because the beginning\n         of the data is a statistical \"anomaly\". */\n      if (i < prologue_length) {\n        lit_cost += 0.35 + multiplier * (double)i;\n      }\n      cost[i] = (float)lit_cost;\n    }\n  }\n}\n\nvoid BrotliEstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask,\n                                       const uint8_t* data,\n                                       size_t* histogram, float* cost) {\n  if (BrotliIsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) {\n    EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, histogram, cost);\n    return;\n  } else {\n    size_t window_half = 2000;\n    size_t in_window = BROTLI_MIN(size_t, window_half, len);\n    size_t i;\n    memset(histogram, 0, 256 * sizeof(histogram[0]));\n\n    /* Bootstrap histogram. */\n    for (i = 0; i < in_window; ++i) {\n      ++histogram[data[(pos + i) & mask]];\n    }\n\n    /* Compute bit costs with sliding window. */\n    for (i = 0; i < len; ++i) {\n      size_t histo;\n      if (i >= window_half) {\n        /* Remove a byte in the past. */\n        --histogram[data[(pos + i - window_half) & mask]];\n        --in_window;\n      }\n      if (i + window_half < len) {\n        /* Add a byte in the future. */\n        ++histogram[data[(pos + i + window_half) & mask]];\n        ++in_window;\n      }\n      histo = histogram[data[(pos + i) & mask]];\n      if (histo == 0) {\n        histo = 1;\n      }\n      {\n        double lit_cost = FastLog2(in_window) - FastLog2(histo);\n        lit_cost += 0.029;\n        if (lit_cost < 1.0) {\n          lit_cost *= 0.5;\n          lit_cost += 0.5;\n        }\n        cost[i] = (float)lit_cost;\n      }\n    }\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/literal_cost.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Literal cost model to allow backward reference replacement to be efficient.\n*/\n\n#ifndef BROTLI_ENC_LITERAL_COST_H_\n#define BROTLI_ENC_LITERAL_COST_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* Estimates how many bits the literals in the interval [pos, pos + len) in the\n   ring-buffer (data, mask) will take entropy coded and writes these estimates\n   to the cost[0..len) array. */\nBROTLI_INTERNAL void BrotliEstimateBitCostsForLiterals(\n    size_t pos, size_t len, size_t mask, const uint8_t* data, size_t* histogram,\n    float* cost);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_LITERAL_COST_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/matching_tag_mask.h",
    "content": "#ifndef THIRD_PARTY_BROTLI_ENC_MATCHING_TAG_MASK_H_\n#define THIRD_PARTY_BROTLI_ENC_MATCHING_TAG_MASK_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__SSE2__) || defined(_M_AMD64) || \\\n    (defined(_M_IX86) && defined(_M_IX86_FP) && (_M_IX86_FP >= 2))\n#define SUPPORTS_SSE_2\n#endif\n\n#if defined(SUPPORTS_SSE_2)\n#include <immintrin.h>\n#endif\n\n\nstatic BROTLI_INLINE uint64_t GetMatchingTagMask(\n    size_t chunk_count, const uint8_t tag,\n    const uint8_t* BROTLI_RESTRICT tag_bucket, const size_t head) {\n  uint64_t matches = 0;\n#if defined(SUPPORTS_SSE_2)\n  const __m128i comparison_mask = _mm_set1_epi8((char)tag);\n  size_t i;\n  for (i = 0; i < chunk_count && i < 4; i++) {\n    const __m128i chunk =\n        _mm_loadu_si128((const __m128i*)(const void*)(tag_bucket + 16 * i));\n    const __m128i equal_mask = _mm_cmpeq_epi8(chunk, comparison_mask);\n    matches |= (uint64_t)_mm_movemask_epi8(equal_mask) << 16 * i;\n  }\n#else\n  const int chunk_size = sizeof(size_t);\n  const size_t shift_amount = ((chunk_size * 8) - chunk_size);\n  const size_t xFF = ~((size_t)0);\n  const size_t x01 = xFF / 0xFF;\n  const size_t x80 = x01 << 7;\n  const size_t splat_char = tag * x01;\n  int i = ((int)chunk_count * 16) - chunk_size;\n  BROTLI_DCHECK((sizeof(size_t) == 4) || (sizeof(size_t) == 8));\n#if BROTLI_LITTLE_ENDIAN\n  const size_t extractMagic = (xFF / 0x7F) >> chunk_size;\n  do {\n      size_t chunk = BrotliUnalignedReadSizeT(&tag_bucket[i]);\n      chunk ^= splat_char;\n      chunk = (((chunk | x80) - x01) | chunk) & x80;\n      matches <<= chunk_size;\n      matches |= (chunk * extractMagic) >> shift_amount;\n      i -= chunk_size;\n  } while (i >= 0);\n#else\n  const size_t msb = xFF ^ (xFF >> 1);\n  const size_t extractMagic = (msb / 0x1FF) | msb;\n  do {\n      size_t chunk = BrotliUnalignedReadSizeT(&tag_bucket[i]);\n      chunk ^= splat_char;\n      chunk = (((chunk | x80) - x01) | chunk) & x80;\n      matches <<= chunk_size;\n      matches |= ((chunk >> 7) * extractMagic) >> shift_amount;\n      i -= chunk_size;\n  } while (i >= 0);\n#endif\n  matches = ~matches;\n#endif\n  if (chunk_count == 1) return BrotliRotateRight16((uint16_t)matches, head);\n  if (chunk_count == 2) return BrotliRotateRight32((uint32_t)matches, head);\n  return BrotliRotateRight64(matches, head);\n}\n\n#undef SUPPORTS_SSE_2\n\n#endif  // THIRD_PARTY_BROTLI_ENC_MATCHING_TAG_MASK_H_\n"
  },
  {
    "path": "libs/brotli/enc/memory.c",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Algorithms for distributing the literals and commands of a metablock between\n   block types and contexts. */\n\n#include \"memory.h\"\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define MAX_NEW_ALLOCATED (BROTLI_ENCODER_MEMORY_MANAGER_SLOTS >> 2)\n#define MAX_NEW_FREED (BROTLI_ENCODER_MEMORY_MANAGER_SLOTS >> 2)\n#define MAX_PERM_ALLOCATED (BROTLI_ENCODER_MEMORY_MANAGER_SLOTS >> 1)\n\n#define PERM_ALLOCATED_OFFSET 0\n#define NEW_ALLOCATED_OFFSET MAX_PERM_ALLOCATED\n#define NEW_FREED_OFFSET (MAX_PERM_ALLOCATED + MAX_NEW_ALLOCATED)\n\nvoid BrotliInitMemoryManager(\n    MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,\n    void* opaque) {\n  if (!alloc_func) {\n    m->alloc_func = BrotliDefaultAllocFunc;\n    m->free_func = BrotliDefaultFreeFunc;\n    m->opaque = 0;\n  } else {\n    m->alloc_func = alloc_func;\n    m->free_func = free_func;\n    m->opaque = opaque;\n  }\n#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)\n  m->is_oom = BROTLI_FALSE;\n  m->perm_allocated = 0;\n  m->new_allocated = 0;\n  m->new_freed = 0;\n#endif  /* BROTLI_ENCODER_EXIT_ON_OOM */\n}\n\n#if defined(BROTLI_ENCODER_EXIT_ON_OOM)\n\nvoid* BrotliAllocate(MemoryManager* m, size_t n) {\n  void* result = m->alloc_func(m->opaque, n);\n  if (!result) exit(EXIT_FAILURE);\n  return result;\n}\n\nvoid BrotliFree(MemoryManager* m, void* p) {\n  m->free_func(m->opaque, p);\n}\n\nvoid BrotliWipeOutMemoryManager(MemoryManager* m) {\n  BROTLI_UNUSED(m);\n}\n\n#else  /* BROTLI_ENCODER_EXIT_ON_OOM */\n\nstatic void SortPointers(void** items, const size_t n) {\n  /* Shell sort. */\n  /* TODO(eustas): fine-tune for \"many slots\" case */\n  static const size_t gaps[] = {23, 10, 4, 1};\n  int g = 0;\n  for (; g < 4; ++g) {\n    size_t gap = gaps[g];\n    size_t i;\n    for (i = gap; i < n; ++i) {\n      size_t j = i;\n      void* tmp = items[i];\n      for (; j >= gap && tmp < items[j - gap]; j -= gap) {\n        items[j] = items[j - gap];\n      }\n      items[j] = tmp;\n    }\n  }\n}\n\nstatic size_t Annihilate(void** a, size_t a_len, void** b, size_t b_len) {\n  size_t a_read_index = 0;\n  size_t b_read_index = 0;\n  size_t a_write_index = 0;\n  size_t b_write_index = 0;\n  size_t annihilated = 0;\n  while (a_read_index < a_len && b_read_index < b_len) {\n    if (a[a_read_index] == b[b_read_index]) {\n      a_read_index++;\n      b_read_index++;\n      annihilated++;\n    } else if (a[a_read_index] < b[b_read_index]) {\n      a[a_write_index++] = a[a_read_index++];\n    } else {\n      b[b_write_index++] = b[b_read_index++];\n    }\n  }\n  while (a_read_index < a_len) a[a_write_index++] = a[a_read_index++];\n  while (b_read_index < b_len) b[b_write_index++] = b[b_read_index++];\n  return annihilated;\n}\n\nstatic void CollectGarbagePointers(MemoryManager* m) {\n  size_t annihilated;\n  SortPointers(m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated);\n  SortPointers(m->pointers + NEW_FREED_OFFSET, m->new_freed);\n  annihilated = Annihilate(\n      m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated,\n      m->pointers + NEW_FREED_OFFSET, m->new_freed);\n  m->new_allocated -= annihilated;\n  m->new_freed -= annihilated;\n\n  if (m->new_freed != 0) {\n    annihilated = Annihilate(\n        m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated,\n        m->pointers + NEW_FREED_OFFSET, m->new_freed);\n    m->perm_allocated -= annihilated;\n    m->new_freed -= annihilated;\n    BROTLI_DCHECK(m->new_freed == 0);\n  }\n\n  if (m->new_allocated != 0) {\n    BROTLI_DCHECK(m->perm_allocated + m->new_allocated <= MAX_PERM_ALLOCATED);\n    memcpy(m->pointers + PERM_ALLOCATED_OFFSET + m->perm_allocated,\n           m->pointers + NEW_ALLOCATED_OFFSET,\n           sizeof(void*) * m->new_allocated);\n    m->perm_allocated += m->new_allocated;\n    m->new_allocated = 0;\n    SortPointers(m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated);\n  }\n}\n\nvoid* BrotliAllocate(MemoryManager* m, size_t n) {\n  void* result = m->alloc_func(m->opaque, n);\n  if (!result) {\n    m->is_oom = BROTLI_TRUE;\n    return NULL;\n  }\n  if (m->new_allocated == MAX_NEW_ALLOCATED) CollectGarbagePointers(m);\n  m->pointers[NEW_ALLOCATED_OFFSET + (m->new_allocated++)] = result;\n  return result;\n}\n\nvoid BrotliFree(MemoryManager* m, void* p) {\n  if (!p) return;\n  m->free_func(m->opaque, p);\n  if (m->new_freed == MAX_NEW_FREED) CollectGarbagePointers(m);\n  m->pointers[NEW_FREED_OFFSET + (m->new_freed++)] = p;\n}\n\nvoid BrotliWipeOutMemoryManager(MemoryManager* m) {\n  size_t i;\n  CollectGarbagePointers(m);\n  /* Now all unfreed pointers are in perm-allocated list. */\n  for (i = 0; i < m->perm_allocated; ++i) {\n    m->free_func(m->opaque, m->pointers[PERM_ALLOCATED_OFFSET + i]);\n  }\n  m->perm_allocated = 0;\n}\n\n#endif  /* BROTLI_ENCODER_EXIT_ON_OOM */\n\nvoid* BrotliBootstrapAlloc(size_t size,\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {\n  if (!alloc_func && !free_func) {\n    return malloc(size);\n  } else if (alloc_func && free_func) {\n    return alloc_func(opaque, size);\n  }\n  return NULL;\n}\n\nvoid BrotliBootstrapFree(void* address, MemoryManager* m) {\n  if (!address) {\n    /* Should not happen! */\n    return;\n  } else {\n    /* Copy values, as those would be freed. */\n    brotli_free_func free_func = m->free_func;\n    void* opaque = m->opaque;\n    free_func(opaque, address);\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/memory.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Macros for memory management. */\n\n#ifndef BROTLI_ENC_MEMORY_H_\n#define BROTLI_ENC_MEMORY_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if !defined(BROTLI_ENCODER_CLEANUP_ON_OOM) && \\\n    !defined(BROTLI_ENCODER_EXIT_ON_OOM)\n#define BROTLI_ENCODER_EXIT_ON_OOM\n#endif\n\n#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)\n#if defined(BROTLI_EXPERIMENTAL)\n#define BROTLI_ENCODER_MEMORY_MANAGER_SLOTS (48*1024)\n#else  /* BROTLI_EXPERIMENTAL */\n#define BROTLI_ENCODER_MEMORY_MANAGER_SLOTS 256\n#endif  /* BROTLI_EXPERIMENTAL */\n#else /* BROTLI_ENCODER_EXIT_ON_OOM */\n#define BROTLI_ENCODER_MEMORY_MANAGER_SLOTS 0\n#endif  /* BROTLI_ENCODER_EXIT_ON_OOM */\n\ntypedef struct MemoryManager {\n  brotli_alloc_func alloc_func;\n  brotli_free_func free_func;\n  void* opaque;\n#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)\n  BROTLI_BOOL is_oom;\n  size_t perm_allocated;\n  size_t new_allocated;\n  size_t new_freed;\n  void* pointers[BROTLI_ENCODER_MEMORY_MANAGER_SLOTS];\n#endif  /* BROTLI_ENCODER_EXIT_ON_OOM */\n} MemoryManager;\n\nBROTLI_INTERNAL void BrotliInitMemoryManager(\n    MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,\n    void* opaque);\n\nBROTLI_INTERNAL void* BrotliAllocate(MemoryManager* m, size_t n);\n#define BROTLI_ALLOC(M, T, N)                               \\\n  ((N) > 0 ? ((T*)BrotliAllocate((M), (N) * sizeof(T))) : NULL)\n\nBROTLI_INTERNAL void BrotliFree(MemoryManager* m, void* p);\n#define BROTLI_FREE(M, P) { \\\n  BrotliFree((M), (P));     \\\n  P = NULL;                 \\\n}\n\n#if defined(BROTLI_ENCODER_EXIT_ON_OOM)\n#define BROTLI_IS_OOM(M) (!!0)\n#else  /* BROTLI_ENCODER_EXIT_ON_OOM */\n#define BROTLI_IS_OOM(M) (!!(M)->is_oom)\n#endif  /* BROTLI_ENCODER_EXIT_ON_OOM */\n\n/*\nBROTLI_IS_NULL is a fake check, BROTLI_IS_OOM does the heavy lifting.\nThe only purpose of it is to explain static analyzers the state of things.\nNB: use ONLY together with BROTLI_IS_OOM\n    AND ONLY for allocations in the current scope.\n */\n#if defined(__clang_analyzer__) && !defined(BROTLI_ENCODER_EXIT_ON_OOM)\n#define BROTLI_IS_NULL(A) ((A) == nullptr)\n#else  /* defined(__clang_analyzer__) */\n#define BROTLI_IS_NULL(A) (!!0)\n#endif  /* defined(__clang_analyzer__) */\n\nBROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager* m);\n\n/*\nDynamically grows array capacity to at least the requested size\nM: MemoryManager\nT: data type\nA: array\nC: capacity\nR: requested size\n*/\n#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) {                    \\\n  if (C < (R)) {                                                   \\\n    size_t _new_size = (C == 0) ? (R) : C;                         \\\n    T* new_array;                                                  \\\n    while (_new_size < (R)) _new_size *= 2;                        \\\n    new_array = BROTLI_ALLOC((M), T, _new_size);                   \\\n    if (!BROTLI_IS_OOM(M) && !BROTLI_IS_NULL(new_array) && C != 0) \\\n      memcpy(new_array, A, C * sizeof(T));                         \\\n    BROTLI_FREE((M), A);                                           \\\n    A = new_array;                                                 \\\n    C = _new_size;                                                 \\\n  }                                                                \\\n}\n\n/*\nAppends value and dynamically grows array capacity when needed\nM: MemoryManager\nT: data type\nA: array\nC: array capacity\nS: array size\nV: value to append\n*/\n#define BROTLI_ENSURE_CAPACITY_APPEND(M, T, A, C, S, V) { \\\n  (S)++;                                                  \\\n  BROTLI_ENSURE_CAPACITY(M, T, A, C, S);                  \\\n  A[(S) - 1] = (V);                                       \\\n}\n\n/* \"Bootstrap\" allocations are not tracked by memory manager; should be used\n   only to allocate MemoryManager itself (or structure containing it). */\nBROTLI_INTERNAL void* BrotliBootstrapAlloc(size_t size,\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\nBROTLI_INTERNAL void BrotliBootstrapFree(void* address, MemoryManager* m);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_MEMORY_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/metablock.c",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Algorithms for distributing the literals and commands of a metablock between\n   block types and contexts. */\n\n#include \"metablock.h\"\n\n#include \"../common/constants.h\"\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"bit_cost.h\"\n#include \"block_splitter.h\"\n#include \"cluster.h\"\n#include \"command.h\"\n#include \"entropy_encode.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n#include \"params.h\"\n#include \"prefix.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nvoid BrotliInitDistanceParams(BrotliDistanceParams* dist_params,\n    uint32_t npostfix, uint32_t ndirect, BROTLI_BOOL large_window) {\n  uint32_t alphabet_size_max;\n  uint32_t alphabet_size_limit;\n  uint32_t max_distance;\n\n  dist_params->distance_postfix_bits = npostfix;\n  dist_params->num_direct_distance_codes = ndirect;\n\n  alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE(\n      npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS);\n  alphabet_size_limit = alphabet_size_max;\n  max_distance = ndirect + (1U << (BROTLI_MAX_DISTANCE_BITS + npostfix + 2)) -\n      (1U << (npostfix + 2));\n\n  if (large_window) {\n    BrotliDistanceCodeLimit limit = BrotliCalculateDistanceCodeLimit(\n        BROTLI_MAX_ALLOWED_DISTANCE, npostfix, ndirect);\n    alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE(\n        npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS);\n    alphabet_size_limit = limit.max_alphabet_size;\n    max_distance = limit.max_distance;\n  }\n\n  dist_params->alphabet_size_max = alphabet_size_max;\n  dist_params->alphabet_size_limit = alphabet_size_limit;\n  dist_params->max_distance = max_distance;\n}\n\nstatic void RecomputeDistancePrefixes(Command* cmds,\n                                      size_t num_commands,\n                                      const BrotliDistanceParams* orig_params,\n                                      const BrotliDistanceParams* new_params) {\n  size_t i;\n\n  if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&\n      orig_params->num_direct_distance_codes ==\n      new_params->num_direct_distance_codes) {\n    return;\n  }\n\n  for (i = 0; i < num_commands; ++i) {\n    Command* cmd = &cmds[i];\n    if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {\n      PrefixEncodeCopyDistance(CommandRestoreDistanceCode(cmd, orig_params),\n                               new_params->num_direct_distance_codes,\n                               new_params->distance_postfix_bits,\n                               &cmd->dist_prefix_,\n                               &cmd->dist_extra_);\n    }\n  }\n}\n\nstatic BROTLI_BOOL ComputeDistanceCost(const Command* cmds,\n                                       size_t num_commands,\n                                       const BrotliDistanceParams* orig_params,\n                                       const BrotliDistanceParams* new_params,\n                                       double* cost,\n                                       HistogramDistance* tmp) {\n  size_t i;\n  BROTLI_BOOL equal_params = BROTLI_FALSE;\n  uint16_t dist_prefix;\n  uint32_t dist_extra;\n  double extra_bits = 0.0;\n  HistogramClearDistance(tmp);\n\n  if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&\n      orig_params->num_direct_distance_codes ==\n      new_params->num_direct_distance_codes) {\n    equal_params = BROTLI_TRUE;\n  }\n\n  for (i = 0; i < num_commands; i++) {\n    const Command* cmd = &cmds[i];\n    if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {\n      if (equal_params) {\n        dist_prefix = cmd->dist_prefix_;\n      } else {\n        uint32_t distance = CommandRestoreDistanceCode(cmd, orig_params);\n        if (distance > new_params->max_distance) {\n          return BROTLI_FALSE;\n        }\n        PrefixEncodeCopyDistance(distance,\n                                 new_params->num_direct_distance_codes,\n                                 new_params->distance_postfix_bits,\n                                 &dist_prefix,\n                                 &dist_extra);\n      }\n      HistogramAddDistance(tmp, dist_prefix & 0x3FF);\n      extra_bits += dist_prefix >> 10;\n    }\n  }\n\n  *cost = BrotliPopulationCostDistance(tmp) + extra_bits;\n  return BROTLI_TRUE;\n}\n\nvoid BrotliBuildMetaBlock(MemoryManager* m,\n                          const uint8_t* ringbuffer,\n                          const size_t pos,\n                          const size_t mask,\n                          BrotliEncoderParams* params,\n                          uint8_t prev_byte,\n                          uint8_t prev_byte2,\n                          Command* cmds,\n                          size_t num_commands,\n                          ContextType literal_context_mode,\n                          MetaBlockSplit* mb) {\n  /* Histogram ids need to fit in one byte. */\n  static const size_t kMaxNumberOfHistograms = 256;\n  HistogramDistance* distance_histograms;\n  HistogramLiteral* literal_histograms;\n  ContextType* literal_context_modes = NULL;\n  size_t literal_histograms_size;\n  size_t distance_histograms_size;\n  size_t i;\n  size_t literal_context_multiplier = 1;\n  uint32_t npostfix;\n  uint32_t ndirect_msb = 0;\n  BROTLI_BOOL check_orig = BROTLI_TRUE;\n  double best_dist_cost = 1e99;\n  BrotliDistanceParams orig_params = params->dist;\n  BrotliDistanceParams new_params = params->dist;\n  HistogramDistance* tmp = BROTLI_ALLOC(m, HistogramDistance, 1);\n\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tmp)) return;\n\n  for (npostfix = 0; npostfix <= BROTLI_MAX_NPOSTFIX; npostfix++) {\n    for (; ndirect_msb < 16; ndirect_msb++) {\n      uint32_t ndirect = ndirect_msb << npostfix;\n      BROTLI_BOOL skip;\n      double dist_cost;\n      BrotliInitDistanceParams(&new_params, npostfix, ndirect,\n                               params->large_window);\n      if (npostfix == orig_params.distance_postfix_bits &&\n          ndirect == orig_params.num_direct_distance_codes) {\n        check_orig = BROTLI_FALSE;\n      }\n      skip = !ComputeDistanceCost(\n          cmds, num_commands, &orig_params, &new_params, &dist_cost, tmp);\n      if (skip || (dist_cost > best_dist_cost)) {\n        break;\n      }\n      best_dist_cost = dist_cost;\n      params->dist = new_params;\n    }\n    if (ndirect_msb > 0) ndirect_msb--;\n    ndirect_msb /= 2;\n  }\n  if (check_orig) {\n    double dist_cost;\n    ComputeDistanceCost(cmds, num_commands, &orig_params, &orig_params,\n                        &dist_cost, tmp);\n    if (dist_cost < best_dist_cost) {\n      /* NB: currently unused; uncomment when more param tuning is added. */\n      /* best_dist_cost = dist_cost; */\n      params->dist = orig_params;\n    }\n  }\n  BROTLI_FREE(m, tmp);\n  RecomputeDistancePrefixes(cmds, num_commands, &orig_params, &params->dist);\n\n  BrotliSplitBlock(m, cmds, num_commands,\n                   ringbuffer, pos, mask, params,\n                   &mb->literal_split,\n                   &mb->command_split,\n                   &mb->distance_split);\n  if (BROTLI_IS_OOM(m)) return;\n\n  if (!params->disable_literal_context_modeling) {\n    literal_context_multiplier = 1 << BROTLI_LITERAL_CONTEXT_BITS;\n    literal_context_modes =\n        BROTLI_ALLOC(m, ContextType, mb->literal_split.num_types);\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(literal_context_modes)) return;\n    for (i = 0; i < mb->literal_split.num_types; ++i) {\n      literal_context_modes[i] = literal_context_mode;\n    }\n  }\n\n  literal_histograms_size =\n      mb->literal_split.num_types * literal_context_multiplier;\n  literal_histograms =\n      BROTLI_ALLOC(m, HistogramLiteral, literal_histograms_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(literal_histograms)) return;\n  ClearHistogramsLiteral(literal_histograms, literal_histograms_size);\n\n  distance_histograms_size =\n      mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;\n  distance_histograms =\n      BROTLI_ALLOC(m, HistogramDistance, distance_histograms_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(distance_histograms)) return;\n  ClearHistogramsDistance(distance_histograms, distance_histograms_size);\n\n  BROTLI_DCHECK(mb->command_histograms == 0);\n  mb->command_histograms_size = mb->command_split.num_types;\n  mb->command_histograms =\n      BROTLI_ALLOC(m, HistogramCommand, mb->command_histograms_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->command_histograms)) return;\n  ClearHistogramsCommand(mb->command_histograms, mb->command_histograms_size);\n\n  BrotliBuildHistogramsWithContext(cmds, num_commands,\n      &mb->literal_split, &mb->command_split, &mb->distance_split,\n      ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes,\n      literal_histograms, mb->command_histograms, distance_histograms);\n  BROTLI_FREE(m, literal_context_modes);\n\n  BROTLI_DCHECK(mb->literal_context_map == 0);\n  mb->literal_context_map_size =\n      mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;\n  mb->literal_context_map =\n      BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->literal_context_map)) return;\n\n  BROTLI_DCHECK(mb->literal_histograms == 0);\n  mb->literal_histograms_size = mb->literal_context_map_size;\n  mb->literal_histograms =\n      BROTLI_ALLOC(m, HistogramLiteral, mb->literal_histograms_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->literal_histograms)) return;\n\n  BrotliClusterHistogramsLiteral(m, literal_histograms, literal_histograms_size,\n      kMaxNumberOfHistograms, mb->literal_histograms,\n      &mb->literal_histograms_size, mb->literal_context_map);\n  if (BROTLI_IS_OOM(m)) return;\n  BROTLI_FREE(m, literal_histograms);\n\n  if (params->disable_literal_context_modeling) {\n    /* Distribute assignment to all contexts. */\n    for (i = mb->literal_split.num_types; i != 0;) {\n      size_t j = 0;\n      i--;\n      for (; j < (1 << BROTLI_LITERAL_CONTEXT_BITS); j++) {\n        mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =\n            mb->literal_context_map[i];\n      }\n    }\n  }\n\n  BROTLI_DCHECK(mb->distance_context_map == 0);\n  mb->distance_context_map_size =\n      mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;\n  mb->distance_context_map =\n      BROTLI_ALLOC(m, uint32_t, mb->distance_context_map_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->distance_context_map)) return;\n\n  BROTLI_DCHECK(mb->distance_histograms == 0);\n  mb->distance_histograms_size = mb->distance_context_map_size;\n  mb->distance_histograms =\n      BROTLI_ALLOC(m, HistogramDistance, mb->distance_histograms_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->distance_histograms)) return;\n\n  BrotliClusterHistogramsDistance(m, distance_histograms,\n                                  mb->distance_context_map_size,\n                                  kMaxNumberOfHistograms,\n                                  mb->distance_histograms,\n                                  &mb->distance_histograms_size,\n                                  mb->distance_context_map);\n  if (BROTLI_IS_OOM(m)) return;\n  BROTLI_FREE(m, distance_histograms);\n}\n\n#define FN(X) X ## Literal\n#include \"metablock_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Command\n#include \"metablock_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n#define FN(X) X ## Distance\n#include \"metablock_inc.h\"  /* NOLINT(build/include) */\n#undef FN\n\n/* Greedy block splitter for one block category (literal, command or distance).\n   Gathers histograms for all context buckets. */\ntypedef struct ContextBlockSplitter {\n  /* Alphabet size of particular block category. */\n  size_t alphabet_size_;\n  size_t num_contexts_;\n  size_t max_block_types_;\n  /* We collect at least this many symbols for each block. */\n  size_t min_block_size_;\n  /* We merge histograms A and B if\n       entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,\n     where A is the current histogram and B is the histogram of the last or the\n     second last block type. */\n  double split_threshold_;\n\n  size_t num_blocks_;\n  BlockSplit* split_;  /* not owned */\n  HistogramLiteral* histograms_;  /* not owned */\n  size_t* histograms_size_;  /* not owned */\n\n  /* The number of symbols that we want to collect before deciding on whether\n     or not to merge the block with a previous one or emit a new block. */\n  size_t target_block_size_;\n  /* The number of symbols in the current histogram. */\n  size_t block_size_;\n  /* Offset of the current histogram. */\n  size_t curr_histogram_ix_;\n  /* Offset of the histograms of the previous two block types. */\n  size_t last_histogram_ix_[2];\n  /* Entropy of the previous two block types. */\n  double last_entropy_[2 * BROTLI_MAX_STATIC_CONTEXTS];\n  /* The number of times we merged the current block with the last one. */\n  size_t merge_last_count_;\n} ContextBlockSplitter;\n\nstatic void InitContextBlockSplitter(\n    MemoryManager* m, ContextBlockSplitter* self, size_t alphabet_size,\n    size_t num_contexts, size_t min_block_size, double split_threshold,\n    size_t num_symbols, BlockSplit* split, HistogramLiteral** histograms,\n    size_t* histograms_size) {\n  size_t max_num_blocks = num_symbols / min_block_size + 1;\n  size_t max_num_types;\n  BROTLI_DCHECK(num_contexts <= BROTLI_MAX_STATIC_CONTEXTS);\n\n  self->alphabet_size_ = alphabet_size;\n  self->num_contexts_ = num_contexts;\n  self->max_block_types_ = BROTLI_MAX_NUMBER_OF_BLOCK_TYPES / num_contexts;\n  self->min_block_size_ = min_block_size;\n  self->split_threshold_ = split_threshold;\n  self->num_blocks_ = 0;\n  self->split_ = split;\n  self->histograms_size_ = histograms_size;\n  self->target_block_size_ = min_block_size;\n  self->block_size_ = 0;\n  self->curr_histogram_ix_ = 0;\n  self->merge_last_count_ = 0;\n\n  /* We have to allocate one more histogram than the maximum number of block\n     types for the current histogram when the meta-block is too big. */\n  max_num_types =\n      BROTLI_MIN(size_t, max_num_blocks, self->max_block_types_ + 1);\n  BROTLI_ENSURE_CAPACITY(m, uint8_t,\n      split->types, split->types_alloc_size, max_num_blocks);\n  BROTLI_ENSURE_CAPACITY(m, uint32_t,\n      split->lengths, split->lengths_alloc_size, max_num_blocks);\n  if (BROTLI_IS_OOM(m)) return;\n  split->num_blocks = max_num_blocks;\n  if (BROTLI_IS_OOM(m)) return;\n  BROTLI_DCHECK(*histograms == 0);\n  *histograms_size = max_num_types * num_contexts;\n  *histograms = BROTLI_ALLOC(m, HistogramLiteral, *histograms_size);\n  self->histograms_ = *histograms;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(*histograms)) return;\n  /* Clear only current histogram. */\n  ClearHistogramsLiteral(&self->histograms_[0], num_contexts);\n  self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;\n}\n\n/* Does either of three things:\n     (1) emits the current block with a new block type;\n     (2) emits the current block with the type of the second last block;\n     (3) merges the current block with the last block. */\nstatic void ContextBlockSplitterFinishBlock(\n    ContextBlockSplitter* self, MemoryManager* m, BROTLI_BOOL is_final) {\n  BlockSplit* split = self->split_;\n  const size_t num_contexts = self->num_contexts_;\n  double* last_entropy = self->last_entropy_;\n  HistogramLiteral* histograms = self->histograms_;\n\n  if (self->block_size_ < self->min_block_size_) {\n    self->block_size_ = self->min_block_size_;\n  }\n  if (self->num_blocks_ == 0) {\n    size_t i;\n    /* Create first block. */\n    split->lengths[0] = (uint32_t)self->block_size_;\n    split->types[0] = 0;\n\n    for (i = 0; i < num_contexts; ++i) {\n      last_entropy[i] =\n          BrotliBitsEntropy(histograms[i].data_, self->alphabet_size_);\n      last_entropy[num_contexts + i] = last_entropy[i];\n    }\n    ++self->num_blocks_;\n    ++split->num_types;\n    self->curr_histogram_ix_ += num_contexts;\n    if (self->curr_histogram_ix_ < *self->histograms_size_) {\n      ClearHistogramsLiteral(\n          &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);\n    }\n    self->block_size_ = 0;\n  } else if (self->block_size_ > 0) {\n    /* Try merging the set of histograms for the current block type with the\n       respective set of histograms for the last and second last block types.\n       Decide over the split based on the total reduction of entropy across\n       all contexts. */\n    double entropy[BROTLI_MAX_STATIC_CONTEXTS];\n    HistogramLiteral* combined_histo =\n        BROTLI_ALLOC(m, HistogramLiteral, 2 * num_contexts);\n    double combined_entropy[2 * BROTLI_MAX_STATIC_CONTEXTS];\n    double diff[2] = { 0.0 };\n    size_t i;\n    if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(combined_histo)) return;\n    for (i = 0; i < num_contexts; ++i) {\n      size_t curr_histo_ix = self->curr_histogram_ix_ + i;\n      size_t j;\n      entropy[i] = BrotliBitsEntropy(histograms[curr_histo_ix].data_,\n                                     self->alphabet_size_);\n      for (j = 0; j < 2; ++j) {\n        size_t jx = j * num_contexts + i;\n        size_t last_histogram_ix = self->last_histogram_ix_[j] + i;\n        combined_histo[jx] = histograms[curr_histo_ix];\n        HistogramAddHistogramLiteral(&combined_histo[jx],\n            &histograms[last_histogram_ix]);\n        combined_entropy[jx] = BrotliBitsEntropy(\n            &combined_histo[jx].data_[0], self->alphabet_size_);\n        diff[j] += combined_entropy[jx] - entropy[i] - last_entropy[jx];\n      }\n    }\n\n    if (split->num_types < self->max_block_types_ &&\n        diff[0] > self->split_threshold_ &&\n        diff[1] > self->split_threshold_) {\n      /* Create new block. */\n      split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;\n      split->types[self->num_blocks_] = (uint8_t)split->num_types;\n      self->last_histogram_ix_[1] = self->last_histogram_ix_[0];\n      self->last_histogram_ix_[0] = split->num_types * num_contexts;\n      for (i = 0; i < num_contexts; ++i) {\n        last_entropy[num_contexts + i] = last_entropy[i];\n        last_entropy[i] = entropy[i];\n      }\n      ++self->num_blocks_;\n      ++split->num_types;\n      self->curr_histogram_ix_ += num_contexts;\n      if (self->curr_histogram_ix_ < *self->histograms_size_) {\n        ClearHistogramsLiteral(\n            &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);\n      }\n      self->block_size_ = 0;\n      self->merge_last_count_ = 0;\n      self->target_block_size_ = self->min_block_size_;\n    } else if (diff[1] < diff[0] - 20.0) {\n      /* Combine this block with second last block. */\n      split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;\n      split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];\n      BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);\n      for (i = 0; i < num_contexts; ++i) {\n        histograms[self->last_histogram_ix_[0] + i] =\n            combined_histo[num_contexts + i];\n        last_entropy[num_contexts + i] = last_entropy[i];\n        last_entropy[i] = combined_entropy[num_contexts + i];\n        HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);\n      }\n      ++self->num_blocks_;\n      self->block_size_ = 0;\n      self->merge_last_count_ = 0;\n      self->target_block_size_ = self->min_block_size_;\n    } else {\n      /* Combine this block with last block. */\n      split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;\n      for (i = 0; i < num_contexts; ++i) {\n        histograms[self->last_histogram_ix_[0] + i] = combined_histo[i];\n        last_entropy[i] = combined_entropy[i];\n        if (split->num_types == 1) {\n          last_entropy[num_contexts + i] = last_entropy[i];\n        }\n        HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);\n      }\n      self->block_size_ = 0;\n      if (++self->merge_last_count_ > 1) {\n        self->target_block_size_ += self->min_block_size_;\n      }\n    }\n    BROTLI_FREE(m, combined_histo);\n  }\n  if (is_final) {\n    *self->histograms_size_ = split->num_types * num_contexts;\n    split->num_blocks = self->num_blocks_;\n  }\n}\n\n/* Adds the next symbol to the current block type and context. When the\n   current block reaches the target size, decides on merging the block. */\nstatic void ContextBlockSplitterAddSymbol(\n    ContextBlockSplitter* self, MemoryManager* m,\n    size_t symbol, size_t context) {\n  HistogramAddLiteral(&self->histograms_[self->curr_histogram_ix_ + context],\n      symbol);\n  ++self->block_size_;\n  if (self->block_size_ == self->target_block_size_) {\n    ContextBlockSplitterFinishBlock(self, m, /* is_final = */ BROTLI_FALSE);\n    if (BROTLI_IS_OOM(m)) return;\n  }\n}\n\nstatic void MapStaticContexts(MemoryManager* m,\n                              size_t num_contexts,\n                              const uint32_t* static_context_map,\n                              MetaBlockSplit* mb) {\n  size_t i;\n  BROTLI_DCHECK(mb->literal_context_map == 0);\n  mb->literal_context_map_size =\n      mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;\n  mb->literal_context_map =\n      BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->literal_context_map)) return;\n\n  for (i = 0; i < mb->literal_split.num_types; ++i) {\n    uint32_t offset = (uint32_t)(i * num_contexts);\n    size_t j;\n    for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS); ++j) {\n      mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =\n          offset + static_context_map[j];\n    }\n  }\n}\n\ntypedef struct GreedyMetablockArena {\n  union {\n    BlockSplitterLiteral plain;\n    ContextBlockSplitter ctx;\n  } lit_blocks;\n  BlockSplitterCommand cmd_blocks;\n  BlockSplitterDistance dist_blocks;\n} GreedyMetablockArena;\n\nstatic BROTLI_INLINE void BrotliBuildMetaBlockGreedyInternal(\n    MemoryManager* m, GreedyMetablockArena* arena, const uint8_t* ringbuffer,\n    size_t pos, size_t mask, uint8_t prev_byte, uint8_t prev_byte2,\n    ContextLut literal_context_lut, const size_t num_contexts,\n    const uint32_t* static_context_map, const Command* commands,\n    size_t n_commands, MetaBlockSplit* mb) {\n  size_t num_literals = 0;\n  size_t i;\n  for (i = 0; i < n_commands; ++i) {\n    num_literals += commands[i].insert_len_;\n  }\n\n  if (num_contexts == 1) {\n    InitBlockSplitterLiteral(m, &arena->lit_blocks.plain, 256, 512, 400.0,\n        num_literals, &mb->literal_split, &mb->literal_histograms,\n        &mb->literal_histograms_size);\n  } else {\n    InitContextBlockSplitter(m, &arena->lit_blocks.ctx, 256, num_contexts, 512,\n        400.0, num_literals, &mb->literal_split, &mb->literal_histograms,\n        &mb->literal_histograms_size);\n  }\n  if (BROTLI_IS_OOM(m)) return;\n  InitBlockSplitterCommand(m, &arena->cmd_blocks, BROTLI_NUM_COMMAND_SYMBOLS,\n      1024, 500.0, n_commands, &mb->command_split, &mb->command_histograms,\n      &mb->command_histograms_size);\n  if (BROTLI_IS_OOM(m)) return;\n  InitBlockSplitterDistance(m, &arena->dist_blocks, 64, 512, 100.0, n_commands,\n      &mb->distance_split, &mb->distance_histograms,\n      &mb->distance_histograms_size);\n  if (BROTLI_IS_OOM(m)) return;\n\n  for (i = 0; i < n_commands; ++i) {\n    const Command cmd = commands[i];\n    size_t j;\n    BlockSplitterAddSymbolCommand(&arena->cmd_blocks, cmd.cmd_prefix_);\n    for (j = cmd.insert_len_; j != 0; --j) {\n      uint8_t literal = ringbuffer[pos & mask];\n      if (num_contexts == 1) {\n        BlockSplitterAddSymbolLiteral(&arena->lit_blocks.plain, literal);\n      } else {\n        size_t context =\n            BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);\n        ContextBlockSplitterAddSymbol(&arena->lit_blocks.ctx, m, literal,\n                                      static_context_map[context]);\n        if (BROTLI_IS_OOM(m)) return;\n      }\n      prev_byte2 = prev_byte;\n      prev_byte = literal;\n      ++pos;\n    }\n    pos += CommandCopyLen(&cmd);\n    if (CommandCopyLen(&cmd)) {\n      prev_byte2 = ringbuffer[(pos - 2) & mask];\n      prev_byte = ringbuffer[(pos - 1) & mask];\n      if (cmd.cmd_prefix_ >= 128) {\n        BlockSplitterAddSymbolDistance(\n            &arena->dist_blocks, cmd.dist_prefix_ & 0x3FF);\n      }\n    }\n  }\n\n  if (num_contexts == 1) {\n    BlockSplitterFinishBlockLiteral(\n        &arena->lit_blocks.plain, /* is_final = */ BROTLI_TRUE);\n  } else {\n    ContextBlockSplitterFinishBlock(\n        &arena->lit_blocks.ctx, m, /* is_final = */ BROTLI_TRUE);\n    if (BROTLI_IS_OOM(m)) return;\n  }\n  BlockSplitterFinishBlockCommand(\n      &arena->cmd_blocks, /* is_final = */ BROTLI_TRUE);\n  BlockSplitterFinishBlockDistance(\n      &arena->dist_blocks, /* is_final = */ BROTLI_TRUE);\n\n  if (num_contexts > 1) {\n    MapStaticContexts(m, num_contexts, static_context_map, mb);\n  }\n}\n\nvoid BrotliBuildMetaBlockGreedy(MemoryManager* m,\n                                const uint8_t* ringbuffer,\n                                size_t pos,\n                                size_t mask,\n                                uint8_t prev_byte,\n                                uint8_t prev_byte2,\n                                ContextLut literal_context_lut,\n                                size_t num_contexts,\n                                const uint32_t* static_context_map,\n                                const Command* commands,\n                                size_t n_commands,\n                                MetaBlockSplit* mb) {\n  GreedyMetablockArena* arena = BROTLI_ALLOC(m, GreedyMetablockArena, 1);\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(arena)) return;\n  if (num_contexts == 1) {\n    BrotliBuildMetaBlockGreedyInternal(m, arena, ringbuffer, pos, mask,\n        prev_byte, prev_byte2, literal_context_lut, 1, NULL, commands,\n        n_commands, mb);\n  } else {\n    BrotliBuildMetaBlockGreedyInternal(m, arena, ringbuffer, pos, mask,\n        prev_byte, prev_byte2, literal_context_lut, num_contexts,\n        static_context_map, commands, n_commands, mb);\n  }\n  BROTLI_FREE(m, arena);\n}\n\nvoid BrotliOptimizeHistograms(uint32_t num_distance_codes,\n                              MetaBlockSplit* mb) {\n  uint8_t good_for_rle[BROTLI_NUM_COMMAND_SYMBOLS];\n  size_t i;\n  for (i = 0; i < mb->literal_histograms_size; ++i) {\n    BrotliOptimizeHuffmanCountsForRle(256, mb->literal_histograms[i].data_,\n                                      good_for_rle);\n  }\n  for (i = 0; i < mb->command_histograms_size; ++i) {\n    BrotliOptimizeHuffmanCountsForRle(BROTLI_NUM_COMMAND_SYMBOLS,\n                                      mb->command_histograms[i].data_,\n                                      good_for_rle);\n  }\n  for (i = 0; i < mb->distance_histograms_size; ++i) {\n    BrotliOptimizeHuffmanCountsForRle(num_distance_codes,\n                                      mb->distance_histograms[i].data_,\n                                      good_for_rle);\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/metablock.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Algorithms for distributing the literals and commands of a metablock between\n   block types and contexts. */\n\n#ifndef BROTLI_ENC_METABLOCK_H_\n#define BROTLI_ENC_METABLOCK_H_\n\n#include \"../common/context.h\"\n#include \"../common/platform.h\"\n#include \"block_splitter.h\"\n#include \"command.h\"\n#include \"histogram.h\"\n#include \"memory.h\"\n#include \"params.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define BROTLI_MAX_STATIC_CONTEXTS 13\n\ntypedef struct MetaBlockSplit {\n  BlockSplit literal_split;\n  BlockSplit command_split;\n  BlockSplit distance_split;\n  uint32_t* literal_context_map;\n  size_t literal_context_map_size;\n  uint32_t* distance_context_map;\n  size_t distance_context_map_size;\n  HistogramLiteral* literal_histograms;\n  size_t literal_histograms_size;\n  HistogramCommand* command_histograms;\n  size_t command_histograms_size;\n  HistogramDistance* distance_histograms;\n  size_t distance_histograms_size;\n} MetaBlockSplit;\n\nstatic BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) {\n  BrotliInitBlockSplit(&mb->literal_split);\n  BrotliInitBlockSplit(&mb->command_split);\n  BrotliInitBlockSplit(&mb->distance_split);\n  mb->literal_context_map = 0;\n  mb->literal_context_map_size = 0;\n  mb->distance_context_map = 0;\n  mb->distance_context_map_size = 0;\n  mb->literal_histograms = 0;\n  mb->literal_histograms_size = 0;\n  mb->command_histograms = 0;\n  mb->command_histograms_size = 0;\n  mb->distance_histograms = 0;\n  mb->distance_histograms_size = 0;\n}\n\nstatic BROTLI_INLINE void DestroyMetaBlockSplit(\n    MemoryManager* m, MetaBlockSplit* mb) {\n  BrotliDestroyBlockSplit(m, &mb->literal_split);\n  BrotliDestroyBlockSplit(m, &mb->command_split);\n  BrotliDestroyBlockSplit(m, &mb->distance_split);\n  BROTLI_FREE(m, mb->literal_context_map);\n  BROTLI_FREE(m, mb->distance_context_map);\n  BROTLI_FREE(m, mb->literal_histograms);\n  BROTLI_FREE(m, mb->command_histograms);\n  BROTLI_FREE(m, mb->distance_histograms);\n}\n\n/* Uses the slow shortest-path block splitter and does context clustering.\n   The distance parameters are dynamically selected based on the commands\n   which get recomputed under the new distance parameters. The new distance\n   parameters are stored into *params. */\nBROTLI_INTERNAL void BrotliBuildMetaBlock(MemoryManager* m,\n                                          const uint8_t* ringbuffer,\n                                          const size_t pos,\n                                          const size_t mask,\n                                          BrotliEncoderParams* params,\n                                          uint8_t prev_byte,\n                                          uint8_t prev_byte2,\n                                          Command* cmds,\n                                          size_t num_commands,\n                                          ContextType literal_context_mode,\n                                          MetaBlockSplit* mb);\n\n/* Uses a fast greedy block splitter that tries to merge current block with the\n   last or the second last block and uses a static context clustering which\n   is the same for all block types. */\nBROTLI_INTERNAL void BrotliBuildMetaBlockGreedy(\n    MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,\n    uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,\n    size_t num_contexts, const uint32_t* static_context_map,\n    const Command* commands, size_t n_commands, MetaBlockSplit* mb);\n\nBROTLI_INTERNAL void BrotliOptimizeHistograms(uint32_t num_distance_codes,\n                                              MetaBlockSplit* mb);\n\nBROTLI_INTERNAL void BrotliInitDistanceParams(BrotliDistanceParams* params,\n    uint32_t npostfix, uint32_t ndirect, BROTLI_BOOL large_window);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_METABLOCK_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/metablock_inc.h",
    "content": "/* NOLINT(build/header_guard) */\n/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* template parameters: FN */\n\n#define HistogramType FN(Histogram)\n\n/* Greedy block splitter for one block category (literal, command or distance).\n*/\ntypedef struct FN(BlockSplitter) {\n  /* Alphabet size of particular block category. */\n  size_t alphabet_size_;\n  /* We collect at least this many symbols for each block. */\n  size_t min_block_size_;\n  /* We merge histograms A and B if\n       entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,\n     where A is the current histogram and B is the histogram of the last or the\n     second last block type. */\n  double split_threshold_;\n\n  size_t num_blocks_;\n  BlockSplit* split_;  /* not owned */\n  HistogramType* histograms_;  /* not owned */\n  size_t* histograms_size_;  /* not owned */\n\n  /* Temporary storage for BlockSplitterFinishBlock. */\n  HistogramType combined_histo[2];\n\n  /* The number of symbols that we want to collect before deciding on whether\n     or not to merge the block with a previous one or emit a new block. */\n  size_t target_block_size_;\n  /* The number of symbols in the current histogram. */\n  size_t block_size_;\n  /* Offset of the current histogram. */\n  size_t curr_histogram_ix_;\n  /* Offset of the histograms of the previous two block types. */\n  size_t last_histogram_ix_[2];\n  /* Entropy of the previous two block types. */\n  double last_entropy_[2];\n  /* The number of times we merged the current block with the last one. */\n  size_t merge_last_count_;\n} FN(BlockSplitter);\n\nstatic void FN(InitBlockSplitter)(\n    MemoryManager* m, FN(BlockSplitter)* self, size_t alphabet_size,\n    size_t min_block_size, double split_threshold, size_t num_symbols,\n    BlockSplit* split, HistogramType** histograms, size_t* histograms_size) {\n  size_t max_num_blocks = num_symbols / min_block_size + 1;\n  /* We have to allocate one more histogram than the maximum number of block\n     types for the current histogram when the meta-block is too big. */\n  size_t max_num_types =\n      BROTLI_MIN(size_t, max_num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 1);\n  self->alphabet_size_ = alphabet_size;\n  self->min_block_size_ = min_block_size;\n  self->split_threshold_ = split_threshold;\n  self->num_blocks_ = 0;\n  self->split_ = split;\n  self->histograms_size_ = histograms_size;\n  self->target_block_size_ = min_block_size;\n  self->block_size_ = 0;\n  self->curr_histogram_ix_ = 0;\n  self->merge_last_count_ = 0;\n  BROTLI_ENSURE_CAPACITY(m, uint8_t,\n      split->types, split->types_alloc_size, max_num_blocks);\n  BROTLI_ENSURE_CAPACITY(m, uint32_t,\n      split->lengths, split->lengths_alloc_size, max_num_blocks);\n  if (BROTLI_IS_OOM(m)) return;\n  self->split_->num_blocks = max_num_blocks;\n  BROTLI_DCHECK(*histograms == 0);\n  *histograms_size = max_num_types;\n  *histograms = BROTLI_ALLOC(m, HistogramType, *histograms_size);\n  self->histograms_ = *histograms;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(*histograms)) return;\n  /* Clear only current histogram. */\n  FN(HistogramClear)(&self->histograms_[0]);\n  self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;\n}\n\n/* Does either of three things:\n     (1) emits the current block with a new block type;\n     (2) emits the current block with the type of the second last block;\n     (3) merges the current block with the last block. */\nstatic void FN(BlockSplitterFinishBlock)(\n    FN(BlockSplitter)* self, BROTLI_BOOL is_final) {\n  BlockSplit* split = self->split_;\n  double* last_entropy = self->last_entropy_;\n  HistogramType* histograms = self->histograms_;\n  self->block_size_ =\n      BROTLI_MAX(size_t, self->block_size_, self->min_block_size_);\n  if (self->num_blocks_ == 0) {\n    /* Create first block. */\n    split->lengths[0] = (uint32_t)self->block_size_;\n    split->types[0] = 0;\n    last_entropy[0] =\n        BrotliBitsEntropy(histograms[0].data_, self->alphabet_size_);\n    last_entropy[1] = last_entropy[0];\n    ++self->num_blocks_;\n    ++split->num_types;\n    ++self->curr_histogram_ix_;\n    if (self->curr_histogram_ix_ < *self->histograms_size_)\n      FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);\n    self->block_size_ = 0;\n  } else if (self->block_size_ > 0) {\n    double entropy = BrotliBitsEntropy(\n        histograms[self->curr_histogram_ix_].data_, self->alphabet_size_);\n    double combined_entropy[2];\n    double diff[2];\n    size_t j;\n    for (j = 0; j < 2; ++j) {\n      size_t last_histogram_ix = self->last_histogram_ix_[j];\n      self->combined_histo[j] = histograms[self->curr_histogram_ix_];\n      FN(HistogramAddHistogram)(&self->combined_histo[j],\n          &histograms[last_histogram_ix]);\n      combined_entropy[j] = BrotliBitsEntropy(\n          &self->combined_histo[j].data_[0], self->alphabet_size_);\n      diff[j] = combined_entropy[j] - entropy - last_entropy[j];\n    }\n\n    if (split->num_types < BROTLI_MAX_NUMBER_OF_BLOCK_TYPES &&\n        diff[0] > self->split_threshold_ &&\n        diff[1] > self->split_threshold_) {\n      /* Create new block. */\n      split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;\n      split->types[self->num_blocks_] = (uint8_t)split->num_types;\n      self->last_histogram_ix_[1] = self->last_histogram_ix_[0];\n      self->last_histogram_ix_[0] = (uint8_t)split->num_types;\n      last_entropy[1] = last_entropy[0];\n      last_entropy[0] = entropy;\n      ++self->num_blocks_;\n      ++split->num_types;\n      ++self->curr_histogram_ix_;\n      if (self->curr_histogram_ix_ < *self->histograms_size_)\n        FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);\n      self->block_size_ = 0;\n      self->merge_last_count_ = 0;\n      self->target_block_size_ = self->min_block_size_;\n    } else if (diff[1] < diff[0] - 20.0) {\n      /* Combine this block with second last block. */\n      split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;\n      split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];\n      BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);\n      histograms[self->last_histogram_ix_[0]] = self->combined_histo[1];\n      last_entropy[1] = last_entropy[0];\n      last_entropy[0] = combined_entropy[1];\n      ++self->num_blocks_;\n      self->block_size_ = 0;\n      FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);\n      self->merge_last_count_ = 0;\n      self->target_block_size_ = self->min_block_size_;\n    } else {\n      /* Combine this block with last block. */\n      split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;\n      histograms[self->last_histogram_ix_[0]] = self->combined_histo[0];\n      last_entropy[0] = combined_entropy[0];\n      if (split->num_types == 1) {\n        last_entropy[1] = last_entropy[0];\n      }\n      self->block_size_ = 0;\n      FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);\n      if (++self->merge_last_count_ > 1) {\n        self->target_block_size_ += self->min_block_size_;\n      }\n    }\n  }\n  if (is_final) {\n    *self->histograms_size_ = split->num_types;\n    split->num_blocks = self->num_blocks_;\n  }\n}\n\n/* Adds the next symbol to the current histogram. When the current histogram\n   reaches the target size, decides on merging the block. */\nstatic void FN(BlockSplitterAddSymbol)(FN(BlockSplitter)* self, size_t symbol) {\n  FN(HistogramAdd)(&self->histograms_[self->curr_histogram_ix_], symbol);\n  ++self->block_size_;\n  if (self->block_size_ == self->target_block_size_) {\n    FN(BlockSplitterFinishBlock)(self, /* is_final = */ BROTLI_FALSE);\n  }\n}\n\n#undef HistogramType\n"
  },
  {
    "path": "libs/brotli/enc/params.h",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Parameters for the Brotli encoder with chosen quality levels. */\n\n#ifndef BROTLI_ENC_PARAMS_H_\n#define BROTLI_ENC_PARAMS_H_\n\n#include <brotli/encode.h>\n#include \"encoder_dict.h\"\n\ntypedef struct BrotliHasherParams {\n  int type;\n  int bucket_bits;\n  int block_bits;\n  int num_last_distances_to_check;\n} BrotliHasherParams;\n\ntypedef struct BrotliDistanceParams {\n  uint32_t distance_postfix_bits;\n  uint32_t num_direct_distance_codes;\n  uint32_t alphabet_size_max;\n  uint32_t alphabet_size_limit;\n  size_t max_distance;\n} BrotliDistanceParams;\n\n/* Encoding parameters */\ntypedef struct BrotliEncoderParams {\n  BrotliEncoderMode mode;\n  int quality;\n  int lgwin;\n  int lgblock;\n  size_t stream_offset;\n  size_t size_hint;\n  BROTLI_BOOL disable_literal_context_modeling;\n  BROTLI_BOOL large_window;\n  BrotliHasherParams hasher;\n  BrotliDistanceParams dist;\n  /* TODO(eustas): rename to BrotliShared... */\n  SharedEncoderDictionary dictionary;\n} BrotliEncoderParams;\n\n#endif  /* BROTLI_ENC_PARAMS_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/prefix.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions for encoding of integers into prefix codes the amount of extra\n   bits, and the actual values of the extra bits. */\n\n#ifndef BROTLI_ENC_PREFIX_H_\n#define BROTLI_ENC_PREFIX_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"fast_log.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* Here distance_code is an intermediate code, i.e. one of the special codes or\n   the actual distance increased by BROTLI_NUM_DISTANCE_SHORT_CODES - 1. */\nstatic BROTLI_INLINE void PrefixEncodeCopyDistance(size_t distance_code,\n                                                   size_t num_direct_codes,\n                                                   size_t postfix_bits,\n                                                   uint16_t* code,\n                                                   uint32_t* extra_bits) {\n  if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes) {\n    *code = (uint16_t)distance_code;\n    *extra_bits = 0;\n    return;\n  } else {\n    size_t dist = ((size_t)1 << (postfix_bits + 2u)) +\n        (distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES - num_direct_codes);\n    size_t bucket = Log2FloorNonZero(dist) - 1;\n    size_t postfix_mask = (1u << postfix_bits) - 1;\n    size_t postfix = dist & postfix_mask;\n    size_t prefix = (dist >> bucket) & 1;\n    size_t offset = (2 + prefix) << bucket;\n    size_t nbits = bucket - postfix_bits;\n    *code = (uint16_t)((nbits << 10) |\n        (BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes +\n         ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix));\n    *extra_bits = (uint32_t)((dist - offset) >> postfix_bits);\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_PREFIX_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/quality.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Constants and formulas that affect speed-ratio trade-offs and thus define\n   quality levels. */\n\n#ifndef BROTLI_ENC_QUALITY_H_\n#define BROTLI_ENC_QUALITY_H_\n\n#include \"../common/platform.h\"\n#include <brotli/encode.h>\n#include \"params.h\"\n\n#define FAST_ONE_PASS_COMPRESSION_QUALITY 0\n#define FAST_TWO_PASS_COMPRESSION_QUALITY 1\n#define ZOPFLIFICATION_QUALITY 10\n#define HQ_ZOPFLIFICATION_QUALITY 11\n\n#define MAX_QUALITY_FOR_STATIC_ENTROPY_CODES 2\n#define MIN_QUALITY_FOR_BLOCK_SPLIT 4\n#define MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS 4\n#define MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS 4\n#define MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH 5\n#define MIN_QUALITY_FOR_CONTEXT_MODELING 5\n#define MIN_QUALITY_FOR_HQ_CONTEXT_MODELING 7\n#define MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING 10\n\n/* For quality below MIN_QUALITY_FOR_BLOCK_SPLIT there is no block splitting,\n   so we buffer at most this much literals and commands. */\n#define MAX_NUM_DELAYED_SYMBOLS 0x2FFF\n\n/* Returns hash-table size for quality levels 0 and 1. */\nstatic BROTLI_INLINE size_t MaxHashTableSize(int quality) {\n  return quality == FAST_ONE_PASS_COMPRESSION_QUALITY ? 1 << 15 : 1 << 17;\n}\n\n/* The maximum length for which the zopflification uses distinct distances. */\n#define MAX_ZOPFLI_LEN_QUALITY_10 150\n#define MAX_ZOPFLI_LEN_QUALITY_11 325\n\n/* Do not thoroughly search when a long copy is found. */\n#define BROTLI_LONG_COPY_QUICK_STEP 16384\n\nstatic BROTLI_INLINE size_t MaxZopfliLen(const BrotliEncoderParams* params) {\n  return params->quality <= 10 ?\n      MAX_ZOPFLI_LEN_QUALITY_10 :\n      MAX_ZOPFLI_LEN_QUALITY_11;\n}\n\n/* Number of best candidates to evaluate to expand Zopfli chain. */\nstatic BROTLI_INLINE size_t MaxZopfliCandidates(\n  const BrotliEncoderParams* params) {\n  return params->quality <= 10 ? 1 : 5;\n}\n\nstatic BROTLI_INLINE void SanitizeParams(BrotliEncoderParams* params) {\n  params->quality = BROTLI_MIN(int, BROTLI_MAX_QUALITY,\n      BROTLI_MAX(int, BROTLI_MIN_QUALITY, params->quality));\n  if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {\n    params->large_window = BROTLI_FALSE;\n  }\n  if (params->lgwin < BROTLI_MIN_WINDOW_BITS) {\n    params->lgwin = BROTLI_MIN_WINDOW_BITS;\n  } else {\n    int max_lgwin = params->large_window ? BROTLI_LARGE_MAX_WINDOW_BITS :\n                                           BROTLI_MAX_WINDOW_BITS;\n    if (params->lgwin > max_lgwin) params->lgwin = max_lgwin;\n  }\n}\n\n/* Returns optimized lg_block value. */\nstatic BROTLI_INLINE int ComputeLgBlock(const BrotliEncoderParams* params) {\n  int lgblock = params->lgblock;\n  if (params->quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||\n      params->quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {\n    lgblock = params->lgwin;\n  } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {\n    lgblock = 14;\n  } else if (lgblock == 0) {\n    lgblock = 16;\n    if (params->quality >= 9 && params->lgwin > lgblock) {\n      lgblock = BROTLI_MIN(int, 18, params->lgwin);\n    }\n  } else {\n    lgblock = BROTLI_MIN(int, BROTLI_MAX_INPUT_BLOCK_BITS,\n        BROTLI_MAX(int, BROTLI_MIN_INPUT_BLOCK_BITS, lgblock));\n  }\n  return lgblock;\n}\n\n/* Returns log2 of the size of main ring buffer area.\n   Allocate at least lgwin + 1 bits for the ring buffer so that the newly\n   added block fits there completely and we still get lgwin bits and at least\n   read_block_size_bits + 1 bits because the copy tail length needs to be\n   smaller than ring-buffer size. */\nstatic BROTLI_INLINE int ComputeRbBits(const BrotliEncoderParams* params) {\n  return 1 + BROTLI_MAX(int, params->lgwin, params->lgblock);\n}\n\nstatic BROTLI_INLINE size_t MaxMetablockSize(\n    const BrotliEncoderParams* params) {\n  int bits =\n      BROTLI_MIN(int, ComputeRbBits(params), BROTLI_MAX_INPUT_BLOCK_BITS);\n  return (size_t)1 << bits;\n}\n\n/* When searching for backward references and have not seen matches for a long\n   time, we can skip some match lookups. Unsuccessful match lookups are very\n   expensive and this kind of a heuristic speeds up compression quite a lot.\n   At first 8 byte strides are taken and every second byte is put to hasher.\n   After 4x more literals stride by 16 bytes, every put 4-th byte to hasher.\n   Applied only to qualities 2 to 9. */\nstatic BROTLI_INLINE size_t LiteralSpreeLengthForSparseSearch(\n    const BrotliEncoderParams* params) {\n  return params->quality < 9 ? 64 : 512;\n}\n\n/* Quality to hasher mapping:\n\n   - q02: h02 (longest_match_quickly), b16, l5\n\n   - q03: h03 (longest_match_quickly), b17, l5\n\n   - q04: h04 (longest_match_quickly), b17, l5\n   - q04: h54 (longest_match_quickly), b20, l7 | for large files\n\n   - q05: h58 (longest_match_simd   ), b14, l4\n   - q05: h68 (longest_match64_simd ), b15, l5 | for large files\n   - q05: h40 (forgetful_chain      ), b15, l4 | for small window\n\n   - q06: h58 (longest_match_simd   ), b14, l4\n   - q06: h68 (longest_match64_simd ), b15, l5 | for large files\n   - q06: h40 (forgetful_chain      ), b15, l4 | for small window\n\n   - q07: h58 (longest_match_simd   ), b15, l4\n   - q07: h68 (longest_match64_simd ), b15, l5 | for large files\n   - q07: h41 (forgetful_chain      ), b15, l4 | for small window\n\n   - q08: h05 (longest_match        ), b15, l4\n   - q08: h06 (longest_match64      ), b15, l5 | for large files\n   - q08: h41 (forgetful_chain      ), b15, l4 | for small window\n\n   - q09: h05 (longest_match        ), b15, l4\n   - q09: h06 (longest_match64      ), b15, l5 | for large files\n   - q09: h42 (forgetful_chain      ), b15, l4 | for small window\n\n   - q10: t10 (to_binary_tree       ), b17, l128\n\n   - q11: t10 (to_binary_tree       ), b17, l128\n\n  Where \"q\" is quality, \"h\" is hasher type, \"b\" is bucket bits,\n  \"l\" is source len. */\nstatic BROTLI_INLINE void ChooseHasher(const BrotliEncoderParams* params,\n                                       BrotliHasherParams* hparams) {\n  if (params->quality > 9) {\n    hparams->type = 10;\n  } else if (params->quality == 4 && params->size_hint >= (1 << 20)) {\n    hparams->type = 54;\n  } else if (params->quality < 5) {\n    hparams->type = params->quality;\n  } else if (params->lgwin <= 16) {\n    hparams->type = params->quality < 7 ? 40 : params->quality < 9 ? 41 : 42;\n  } else if (params->size_hint >= (1 << 20) && params->lgwin >= 19) {\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n    hparams->type = params->quality <= BROTLI_MAX_SIMD_QUALITY ? 68 : 6;\n#else\n    hparams->type = 6;\n#endif\n    hparams->block_bits = params->quality - 1;\n    hparams->bucket_bits = 15;\n    hparams->num_last_distances_to_check =\n        params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;\n  } else {\n    /* TODO(eustas): often previous setting (H6) is faster and denser; consider\n                     adding an option to use it. */\n#if defined(BROTLI_MAX_SIMD_QUALITY)\n    hparams->type = params->quality <= BROTLI_MAX_SIMD_QUALITY ? 58 : 5;\n#else\n    hparams->type = 5;\n#endif\n    hparams->block_bits = params->quality - 1;\n    hparams->bucket_bits = params->quality < 7 ? 14 : 15;\n    hparams->num_last_distances_to_check =\n        params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;\n  }\n\n  if (params->lgwin > 24) {\n    /* Different hashers for large window brotli: not for qualities <= 2,\n       these are too fast for large window. Not for qualities >= 10: their\n       hasher already works well with large window. So the changes are:\n       H3 --> H35: for quality 3.\n       H54 --> H55: for quality 4 with size hint > 1MB\n       H6/H68 --> H65: for qualities 5, 6, 7, 8, 9. */\n    if (hparams->type == 3) {\n      hparams->type = 35;\n    }\n    if (hparams->type == 54) {\n      hparams->type = 55;\n    }\n    if (hparams->type == 6 || hparams->type == 68) {\n      hparams->type = 65;\n    }\n  }\n}\n\n#endif  /* BROTLI_ENC_QUALITY_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/ringbuffer.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Sliding window over the input data. */\n\n#ifndef BROTLI_ENC_RINGBUFFER_H_\n#define BROTLI_ENC_RINGBUFFER_H_\n\n#include \"../common/platform.h\"\n#include \"memory.h\"\n#include \"params.h\"\n#include \"quality.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of\n   data in a circular manner: writing a byte writes it to:\n     `position() % (1 << window_bits)'.\n   For convenience, the RingBuffer array contains another copy of the\n   first `1 << tail_bits' bytes:\n     buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits),\n   and another copy of the last two bytes:\n     buffer_[-1] == buffer_[(1 << window_bits) - 1] and\n     buffer_[-2] == buffer_[(1 << window_bits) - 2]. */\ntypedef struct RingBuffer {\n  /* Size of the ring-buffer is (1 << window_bits) + tail_size_. */\n  const uint32_t size_;\n  const uint32_t mask_;\n  const uint32_t tail_size_;\n  const uint32_t total_size_;\n\n  uint32_t cur_size_;\n  /* Position to write in the ring buffer. */\n  uint32_t pos_;\n  /* The actual ring buffer containing the copy of the last two bytes, the data,\n     and the copy of the beginning as a tail. */\n  uint8_t* data_;\n  /* The start of the ring-buffer. */\n  uint8_t* buffer_;\n} RingBuffer;\n\nstatic BROTLI_INLINE void RingBufferInit(RingBuffer* rb) {\n  rb->cur_size_ = 0;\n  rb->pos_ = 0;\n  rb->data_ = 0;\n  rb->buffer_ = 0;\n}\n\nstatic BROTLI_INLINE void RingBufferSetup(\n    const BrotliEncoderParams* params, RingBuffer* rb) {\n  int window_bits = ComputeRbBits(params);\n  int tail_bits = params->lgblock;\n  *(uint32_t*)&rb->size_ = 1u << window_bits;\n  *(uint32_t*)&rb->mask_ = (1u << window_bits) - 1;\n  *(uint32_t*)&rb->tail_size_ = 1u << tail_bits;\n  *(uint32_t*)&rb->total_size_ = rb->size_ + rb->tail_size_;\n}\n\nstatic BROTLI_INLINE void RingBufferFree(MemoryManager* m, RingBuffer* rb) {\n  BROTLI_FREE(m, rb->data_);\n}\n\n/* Allocates or re-allocates data_ to the given length + plus some slack\n   region before and after. Fills the slack regions with zeros. */\nstatic BROTLI_INLINE void RingBufferInitBuffer(\n    MemoryManager* m, const uint32_t buflen, RingBuffer* rb) {\n  static const size_t kSlackForEightByteHashingEverywhere = 7;\n  uint8_t* new_data = BROTLI_ALLOC(\n      m, uint8_t, 2 + buflen + kSlackForEightByteHashingEverywhere);\n  size_t i;\n  if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_data)) return;\n  if (rb->data_) {\n    memcpy(new_data, rb->data_,\n        2 + rb->cur_size_ + kSlackForEightByteHashingEverywhere);\n    BROTLI_FREE(m, rb->data_);\n  }\n  rb->data_ = new_data;\n  rb->cur_size_ = buflen;\n  rb->buffer_ = rb->data_ + 2;\n  rb->buffer_[-2] = rb->buffer_[-1] = 0;\n  for (i = 0; i < kSlackForEightByteHashingEverywhere; ++i) {\n    rb->buffer_[rb->cur_size_ + i] = 0;\n  }\n}\n\nstatic BROTLI_INLINE void RingBufferWriteTail(\n    const uint8_t* bytes, size_t n, RingBuffer* rb) {\n  const size_t masked_pos = rb->pos_ & rb->mask_;\n  if (BROTLI_PREDICT_FALSE(masked_pos < rb->tail_size_)) {\n    /* Just fill the tail buffer with the beginning data. */\n    const size_t p = rb->size_ + masked_pos;\n    memcpy(&rb->buffer_[p], bytes,\n        BROTLI_MIN(size_t, n, rb->tail_size_ - masked_pos));\n  }\n}\n\n/* Push bytes into the ring buffer. */\nstatic BROTLI_INLINE void RingBufferWrite(\n    MemoryManager* m, const uint8_t* bytes, size_t n, RingBuffer* rb) {\n  if (rb->pos_ == 0 && n < rb->tail_size_) {\n    /* Special case for the first write: to process the first block, we don't\n       need to allocate the whole ring-buffer and we don't need the tail\n       either. However, we do this memory usage optimization only if the\n       first write is less than the tail size, which is also the input block\n       size, otherwise it is likely that other blocks will follow and we\n       will need to reallocate to the full size anyway. */\n    rb->pos_ = (uint32_t)n;\n    RingBufferInitBuffer(m, rb->pos_, rb);\n    if (BROTLI_IS_OOM(m)) return;\n    memcpy(rb->buffer_, bytes, n);\n    return;\n  }\n  if (rb->cur_size_ < rb->total_size_) {\n    /* Lazily allocate the full buffer. */\n    RingBufferInitBuffer(m, rb->total_size_, rb);\n    if (BROTLI_IS_OOM(m)) return;\n    /* Initialize the last two bytes to zero, so that we don't have to worry\n       later when we copy the last two bytes to the first two positions. */\n    rb->buffer_[rb->size_ - 2] = 0;\n    rb->buffer_[rb->size_ - 1] = 0;\n    /* Initialize tail; might be touched by \"best_len++\" optimization when\n       ring buffer is \"full\". */\n    rb->buffer_[rb->size_] = 241;\n  }\n  {\n    const size_t masked_pos = rb->pos_ & rb->mask_;\n    /* The length of the writes is limited so that we do not need to worry\n       about a write */\n    RingBufferWriteTail(bytes, n, rb);\n    if (BROTLI_PREDICT_TRUE(masked_pos + n <= rb->size_)) {\n      /* A single write fits. */\n      memcpy(&rb->buffer_[masked_pos], bytes, n);\n    } else {\n      /* Split into two writes.\n         Copy into the end of the buffer, including the tail buffer. */\n      memcpy(&rb->buffer_[masked_pos], bytes,\n             BROTLI_MIN(size_t, n, rb->total_size_ - masked_pos));\n      /* Copy into the beginning of the buffer */\n      memcpy(&rb->buffer_[0], bytes + (rb->size_ - masked_pos),\n             n - (rb->size_ - masked_pos));\n    }\n  }\n  {\n    BROTLI_BOOL not_first_lap = (rb->pos_ & (1u << 31)) != 0;\n    uint32_t rb_pos_mask = (1u << 31) - 1;\n    rb->buffer_[-2] = rb->buffer_[rb->size_ - 2];\n    rb->buffer_[-1] = rb->buffer_[rb->size_ - 1];\n    rb->pos_ = (rb->pos_ & rb_pos_mask) + (uint32_t)(n & rb_pos_mask);\n    if (not_first_lap) {\n      /* Wrap, but preserve not-a-first-lap feature. */\n      rb->pos_ |= 1u << 31;\n    }\n  }\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_RINGBUFFER_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/state.h",
    "content": "/* Copyright 2022 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Encoder state. */\n\n#ifndef BROTLI_ENC_STATE_H_\n#define BROTLI_ENC_STATE_H_\n\n#include \"../common/constants.h\"\n#include \"../common/platform.h\"\n#include \"command.h\"\n#include \"compress_fragment.h\"\n#include \"compress_fragment_two_pass.h\"\n#include \"hash.h\"\n#include \"memory.h\"\n#include \"params.h\"\n#include \"ringbuffer.h\"\n\ntypedef enum BrotliEncoderStreamState {\n  /* Default state. */\n  BROTLI_STREAM_PROCESSING = 0,\n  /* Intermediate state; after next block is emitted, byte-padding should be\n     performed before getting back to default state. */\n  BROTLI_STREAM_FLUSH_REQUESTED = 1,\n  /* Last metablock was produced; no more input is acceptable. */\n  BROTLI_STREAM_FINISHED = 2,\n  /* Flushing compressed block and writing meta-data block header. */\n  BROTLI_STREAM_METADATA_HEAD = 3,\n  /* Writing metadata block body. */\n  BROTLI_STREAM_METADATA_BODY = 4\n} BrotliEncoderStreamState;\n\ntypedef enum BrotliEncoderFlintState {\n  BROTLI_FLINT_NEEDS_2_BYTES = 2,\n  BROTLI_FLINT_NEEDS_1_BYTE = 1,\n  BROTLI_FLINT_WAITING_FOR_PROCESSING = 0,\n  BROTLI_FLINT_WAITING_FOR_FLUSHING = -1,\n  BROTLI_FLINT_DONE = -2\n} BrotliEncoderFlintState;\n\ntypedef struct BrotliEncoderStateStruct {\n  BrotliEncoderParams params;\n\n  MemoryManager memory_manager_;\n\n  uint64_t input_pos_;\n  RingBuffer ringbuffer_;\n  size_t cmd_alloc_size_;\n  Command* commands_;\n  size_t num_commands_;\n  size_t num_literals_;\n  size_t last_insert_len_;\n  uint64_t last_flush_pos_;\n  uint64_t last_processed_pos_;\n  int dist_cache_[BROTLI_NUM_DISTANCE_SHORT_CODES];\n  int saved_dist_cache_[4];\n  uint16_t last_bytes_;\n  uint8_t last_bytes_bits_;\n  /* \"Flint\" is a tiny uncompressed block emitted before the continuation\n     block to unwire literal context from previous data. Despite being int8_t,\n     field is actually BrotliEncoderFlintState enum. */\n  int8_t flint_;\n  uint8_t prev_byte_;\n  uint8_t prev_byte2_;\n  size_t storage_size_;\n  uint8_t* storage_;\n\n  Hasher hasher_;\n\n  /* Hash table for FAST_ONE_PASS_COMPRESSION_QUALITY mode. */\n  int small_table_[1 << 10];  /* 4KiB */\n  int* large_table_;          /* Allocated only when needed */\n  size_t large_table_size_;\n\n  BrotliOnePassArena* one_pass_arena_;\n  BrotliTwoPassArena* two_pass_arena_;\n\n  /* Command and literal buffers for FAST_TWO_PASS_COMPRESSION_QUALITY. */\n  uint32_t* command_buf_;\n  uint8_t* literal_buf_;\n\n  uint64_t total_in_;\n  uint8_t* next_out_;\n  size_t available_out_;\n  uint64_t total_out_;\n  /* Temporary buffer for padding flush bits or metadata block header / body. */\n  union {\n    uint64_t u64[2];\n    uint8_t u8[16];\n  } tiny_buf_;\n  uint32_t remaining_metadata_bytes_;\n  BrotliEncoderStreamState stream_state_;\n\n  BROTLI_BOOL is_last_block_emitted_;\n  BROTLI_BOOL is_initialized_;\n} BrotliEncoderStateStruct;\n\ntypedef struct BrotliEncoderStateStruct BrotliEncoderStateInternal;\n#define BrotliEncoderState BrotliEncoderStateInternal\n\n#endif  // BROTLI_ENC_STATE_H_\n"
  },
  {
    "path": "libs/brotli/enc/static_dict.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"static_dict.h\"\n\n#include \"../common/dictionary.h\"\n#include \"../common/platform.h\"\n#include \"../common/transform.h\"\n#include \"encoder_dict.h\"\n#include \"find_match_length.h\"\n#include \"hash_base.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic BROTLI_INLINE void AddMatch(size_t distance, size_t len, size_t len_code,\n                                   uint32_t* matches) {\n  uint32_t match = (uint32_t)((distance << 5) + len_code);\n  matches[len] = BROTLI_MIN(uint32_t, matches[len], match);\n}\n\nstatic BROTLI_INLINE size_t DictMatchLength(const BrotliDictionary* dictionary,\n                                            const uint8_t* data,\n                                            size_t id,\n                                            size_t len,\n                                            size_t maxlen) {\n  const size_t offset = dictionary->offsets_by_length[len] + len * id;\n  return FindMatchLengthWithLimit(&dictionary->data[offset], data,\n                                  BROTLI_MIN(size_t, len, maxlen));\n}\n\nstatic BROTLI_INLINE BROTLI_BOOL IsMatch(const BrotliDictionary* dictionary,\n    DictWord w, const uint8_t* data, size_t max_length) {\n  if (w.len > max_length) {\n    return BROTLI_FALSE;\n  } else {\n    const size_t offset = dictionary->offsets_by_length[w.len] +\n        (size_t)w.len * (size_t)w.idx;\n    const uint8_t* dict = &dictionary->data[offset];\n    if (w.transform == 0) {\n      /* Match against base dictionary word. */\n      return\n          TO_BROTLI_BOOL(FindMatchLengthWithLimit(dict, data, w.len) == w.len);\n    } else if (w.transform == 10) {\n      /* Match against uppercase first transform.\n         Note that there are only ASCII uppercase words in the lookup table. */\n      return TO_BROTLI_BOOL(dict[0] >= 'a' && dict[0] <= 'z' &&\n              (dict[0] ^ 32) == data[0] &&\n              FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) ==\n              w.len - 1u);\n    } else {\n      /* Match against uppercase all transform.\n         Note that there are only ASCII uppercase words in the lookup table. */\n      size_t i;\n      for (i = 0; i < w.len; ++i) {\n        if (dict[i] >= 'a' && dict[i] <= 'z') {\n          if ((dict[i] ^ 32) != data[i]) return BROTLI_FALSE;\n        } else {\n          if (dict[i] != data[i]) return BROTLI_FALSE;\n        }\n      }\n      return BROTLI_TRUE;\n    }\n  }\n}\n\n/* Finds matches for a single static dictionary */\nstatic BROTLI_BOOL BrotliFindAllStaticDictionaryMatchesFor(\n    const BrotliEncoderDictionary* dictionary, const uint8_t* data,\n    size_t min_length, size_t max_length, uint32_t* matches) {\n  BROTLI_BOOL has_found_match = BROTLI_FALSE;\n#if defined(BROTLI_EXPERIMENTAL)\n  if (dictionary->has_words_heavy) {\n    const BrotliTrieNode* node = &dictionary->trie.root;\n    size_t l = 0;\n    while (node && l < max_length) {\n      uint8_t c;\n      if (l >= min_length && node->len_) {\n        AddMatch(node->idx_, l, node->len_, matches);\n        has_found_match = BROTLI_TRUE;\n      }\n      c = data[l++];\n      node = BrotliTrieSub(&dictionary->trie, node, c);\n    }\n    return has_found_match;\n  }\n#endif  /* BROTLI_EXPERIMENTAL */\n  {\n    size_t offset = dictionary->buckets[Hash15(data)];\n    BROTLI_BOOL end = !offset;\n    while (!end) {\n      DictWord w = dictionary->dict_words[offset++];\n      const size_t l = w.len & 0x1F;\n      const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];\n      const size_t id = w.idx;\n      end = !!(w.len & 0x80);\n      w.len = (uint8_t)l;\n      if (w.transform == 0) {\n        const size_t matchlen =\n            DictMatchLength(dictionary->words, data, id, l, max_length);\n        const uint8_t* s;\n        size_t minlen;\n        size_t maxlen;\n        size_t len;\n        /* Transform \"\" + BROTLI_TRANSFORM_IDENTITY + \"\" */\n        if (matchlen == l) {\n          AddMatch(id, l, l, matches);\n          has_found_match = BROTLI_TRUE;\n        }\n        /* Transforms \"\" + BROTLI_TRANSFORM_OMIT_LAST_1 + \"\" and\n                      \"\" + BROTLI_TRANSFORM_OMIT_LAST_1 + \"ing \" */\n        if (matchlen >= l - 1) {\n          AddMatch(id + 12 * n, l - 1, l, matches);\n          if (l + 2 < max_length &&\n              data[l - 1] == 'i' && data[l] == 'n' && data[l + 1] == 'g' &&\n              data[l + 2] == ' ') {\n            AddMatch(id + 49 * n, l + 3, l, matches);\n          }\n          has_found_match = BROTLI_TRUE;\n        }\n        /* Transform \"\" + BROTLI_TRANSFORM_OMIT_LAST_# + \"\" (# = 2 .. 9) */\n        minlen = min_length;\n        if (l > 9) minlen = BROTLI_MAX(size_t, minlen, l - 9);\n        maxlen = BROTLI_MIN(size_t, matchlen, l - 2);\n        for (len = minlen; len <= maxlen; ++len) {\n          size_t cut = l - len;\n          size_t transform_id = (cut << 2) +\n              (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);\n          AddMatch(id + transform_id * n, len, l, matches);\n          has_found_match = BROTLI_TRUE;\n        }\n        if (matchlen < l || l + 6 >= max_length) {\n          continue;\n        }\n        s = &data[l];\n        /* Transforms \"\" + BROTLI_TRANSFORM_IDENTITY + <suffix> */\n        if (s[0] == ' ') {\n          AddMatch(id + n, l + 1, l, matches);\n          if (s[1] == 'a') {\n            if (s[2] == ' ') {\n              AddMatch(id + 28 * n, l + 3, l, matches);\n            } else if (s[2] == 's') {\n              if (s[3] == ' ') AddMatch(id + 46 * n, l + 4, l, matches);\n            } else if (s[2] == 't') {\n              if (s[3] == ' ') AddMatch(id + 60 * n, l + 4, l, matches);\n            } else if (s[2] == 'n') {\n              if (s[3] == 'd' && s[4] == ' ') {\n                AddMatch(id + 10 * n, l + 5, l, matches);\n              }\n            }\n          } else if (s[1] == 'b') {\n            if (s[2] == 'y' && s[3] == ' ') {\n              AddMatch(id + 38 * n, l + 4, l, matches);\n            }\n          } else if (s[1] == 'i') {\n            if (s[2] == 'n') {\n              if (s[3] == ' ') AddMatch(id + 16 * n, l + 4, l, matches);\n            } else if (s[2] == 's') {\n              if (s[3] == ' ') AddMatch(id + 47 * n, l + 4, l, matches);\n            }\n          } else if (s[1] == 'f') {\n            if (s[2] == 'o') {\n              if (s[3] == 'r' && s[4] == ' ') {\n                AddMatch(id + 25 * n, l + 5, l, matches);\n              }\n            } else if (s[2] == 'r') {\n              if (s[3] == 'o' && s[4] == 'm' && s[5] == ' ') {\n                AddMatch(id + 37 * n, l + 6, l, matches);\n              }\n            }\n          } else if (s[1] == 'o') {\n            if (s[2] == 'f') {\n              if (s[3] == ' ') AddMatch(id + 8 * n, l + 4, l, matches);\n            } else if (s[2] == 'n') {\n              if (s[3] == ' ') AddMatch(id + 45 * n, l + 4, l, matches);\n            }\n          } else if (s[1] == 'n') {\n            if (s[2] == 'o' && s[3] == 't' && s[4] == ' ') {\n              AddMatch(id + 80 * n, l + 5, l, matches);\n            }\n          } else if (s[1] == 't') {\n            if (s[2] == 'h') {\n              if (s[3] == 'e') {\n                if (s[4] == ' ') AddMatch(id + 5 * n, l + 5, l, matches);\n              } else if (s[3] == 'a') {\n                if (s[4] == 't' && s[5] == ' ') {\n                  AddMatch(id + 29 * n, l + 6, l, matches);\n                }\n              }\n            } else if (s[2] == 'o') {\n              if (s[3] == ' ') AddMatch(id + 17 * n, l + 4, l, matches);\n            }\n          } else if (s[1] == 'w') {\n            if (s[2] == 'i' && s[3] == 't' && s[4] == 'h' && s[5] == ' ') {\n              AddMatch(id + 35 * n, l + 6, l, matches);\n            }\n          }\n        } else if (s[0] == '\"') {\n          AddMatch(id + 19 * n, l + 1, l, matches);\n          if (s[1] == '>') {\n            AddMatch(id + 21 * n, l + 2, l, matches);\n          }\n        } else if (s[0] == '.') {\n          AddMatch(id + 20 * n, l + 1, l, matches);\n          if (s[1] == ' ') {\n            AddMatch(id + 31 * n, l + 2, l, matches);\n            if (s[2] == 'T' && s[3] == 'h') {\n              if (s[4] == 'e') {\n                if (s[5] == ' ') AddMatch(id + 43 * n, l + 6, l, matches);\n              } else if (s[4] == 'i') {\n                if (s[5] == 's' && s[6] == ' ') {\n                  AddMatch(id + 75 * n, l + 7, l, matches);\n                }\n              }\n            }\n          }\n        } else if (s[0] == ',') {\n          AddMatch(id + 76 * n, l + 1, l, matches);\n          if (s[1] == ' ') {\n            AddMatch(id + 14 * n, l + 2, l, matches);\n          }\n        } else if (s[0] == '\\n') {\n          AddMatch(id + 22 * n, l + 1, l, matches);\n          if (s[1] == '\\t') {\n            AddMatch(id + 50 * n, l + 2, l, matches);\n          }\n        } else if (s[0] == ']') {\n          AddMatch(id + 24 * n, l + 1, l, matches);\n        } else if (s[0] == '\\'') {\n          AddMatch(id + 36 * n, l + 1, l, matches);\n        } else if (s[0] == ':') {\n          AddMatch(id + 51 * n, l + 1, l, matches);\n        } else if (s[0] == '(') {\n          AddMatch(id + 57 * n, l + 1, l, matches);\n        } else if (s[0] == '=') {\n          if (s[1] == '\"') {\n            AddMatch(id + 70 * n, l + 2, l, matches);\n          } else if (s[1] == '\\'') {\n            AddMatch(id + 86 * n, l + 2, l, matches);\n          }\n        } else if (s[0] == 'a') {\n          if (s[1] == 'l' && s[2] == ' ') {\n            AddMatch(id + 84 * n, l + 3, l, matches);\n          }\n        } else if (s[0] == 'e') {\n          if (s[1] == 'd') {\n            if (s[2] == ' ') AddMatch(id + 53 * n, l + 3, l, matches);\n          } else if (s[1] == 'r') {\n            if (s[2] == ' ') AddMatch(id + 82 * n, l + 3, l, matches);\n          } else if (s[1] == 's') {\n            if (s[2] == 't' && s[3] == ' ') {\n              AddMatch(id + 95 * n, l + 4, l, matches);\n            }\n          }\n        } else if (s[0] == 'f') {\n          if (s[1] == 'u' && s[2] == 'l' && s[3] == ' ') {\n            AddMatch(id + 90 * n, l + 4, l, matches);\n          }\n        } else if (s[0] == 'i') {\n          if (s[1] == 'v') {\n            if (s[2] == 'e' && s[3] == ' ') {\n              AddMatch(id + 92 * n, l + 4, l, matches);\n            }\n          } else if (s[1] == 'z') {\n            if (s[2] == 'e' && s[3] == ' ') {\n              AddMatch(id + 100 * n, l + 4, l, matches);\n            }\n          }\n        } else if (s[0] == 'l') {\n          if (s[1] == 'e') {\n            if (s[2] == 's' && s[3] == 's' && s[4] == ' ') {\n              AddMatch(id + 93 * n, l + 5, l, matches);\n            }\n          } else if (s[1] == 'y') {\n            if (s[2] == ' ') AddMatch(id + 61 * n, l + 3, l, matches);\n          }\n        } else if (s[0] == 'o') {\n          if (s[1] == 'u' && s[2] == 's' && s[3] == ' ') {\n            AddMatch(id + 106 * n, l + 4, l, matches);\n          }\n        }\n      } else {\n        /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and\n               is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)\n           transform. */\n        const BROTLI_BOOL is_all_caps =\n            TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);\n        const uint8_t* s;\n        if (!IsMatch(dictionary->words, w, data, max_length)) {\n          continue;\n        }\n        /* Transform \"\" + kUppercase{First,All} + \"\" */\n        AddMatch(id + (is_all_caps ? 44 : 9) * n, l, l, matches);\n        has_found_match = BROTLI_TRUE;\n        if (l + 1 >= max_length) {\n          continue;\n        }\n        /* Transforms \"\" + kUppercase{First,All} + <suffix> */\n        s = &data[l];\n        if (s[0] == ' ') {\n          AddMatch(id + (is_all_caps ? 68 : 4) * n, l + 1, l, matches);\n        } else if (s[0] == '\"') {\n          AddMatch(id + (is_all_caps ? 87 : 66) * n, l + 1, l, matches);\n          if (s[1] == '>') {\n            AddMatch(id + (is_all_caps ? 97 : 69) * n, l + 2, l, matches);\n          }\n        } else if (s[0] == '.') {\n          AddMatch(id + (is_all_caps ? 101 : 79) * n, l + 1, l, matches);\n          if (s[1] == ' ') {\n            AddMatch(id + (is_all_caps ? 114 : 88) * n, l + 2, l, matches);\n          }\n        } else if (s[0] == ',') {\n          AddMatch(id + (is_all_caps ? 112 : 99) * n, l + 1, l, matches);\n          if (s[1] == ' ') {\n            AddMatch(id + (is_all_caps ? 107 : 58) * n, l + 2, l, matches);\n          }\n        } else if (s[0] == '\\'') {\n          AddMatch(id + (is_all_caps ? 94 : 74) * n, l + 1, l, matches);\n        } else if (s[0] == '(') {\n          AddMatch(id + (is_all_caps ? 113 : 78) * n, l + 1, l, matches);\n        } else if (s[0] == '=') {\n          if (s[1] == '\"') {\n            AddMatch(id + (is_all_caps ? 105 : 104) * n, l + 2, l, matches);\n          } else if (s[1] == '\\'') {\n            AddMatch(id + (is_all_caps ? 116 : 108) * n, l + 2, l, matches);\n          }\n        }\n      }\n    }\n  }\n  /* Transforms with prefixes \" \" and \".\" */\n  if (max_length >= 5 && (data[0] == ' ' || data[0] == '.')) {\n    BROTLI_BOOL is_space = TO_BROTLI_BOOL(data[0] == ' ');\n    size_t offset = dictionary->buckets[Hash15(&data[1])];\n    BROTLI_BOOL end = !offset;\n    while (!end) {\n      DictWord w = dictionary->dict_words[offset++];\n      const size_t l = w.len & 0x1F;\n      const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];\n      const size_t id = w.idx;\n      end = !!(w.len & 0x80);\n      w.len = (uint8_t)l;\n      if (w.transform == 0) {\n        const uint8_t* s;\n        if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {\n          continue;\n        }\n        /* Transforms \" \" + BROTLI_TRANSFORM_IDENTITY + \"\" and\n                      \".\" + BROTLI_TRANSFORM_IDENTITY + \"\" */\n        AddMatch(id + (is_space ? 6 : 32) * n, l + 1, l, matches);\n        has_found_match = BROTLI_TRUE;\n        if (l + 2 >= max_length) {\n          continue;\n        }\n        /* Transforms \" \" + BROTLI_TRANSFORM_IDENTITY + <suffix> and\n                      \".\" + BROTLI_TRANSFORM_IDENTITY + <suffix>\n        */\n        s = &data[l + 1];\n        if (s[0] == ' ') {\n          AddMatch(id + (is_space ? 2 : 77) * n, l + 2, l, matches);\n        } else if (s[0] == '(') {\n          AddMatch(id + (is_space ? 89 : 67) * n, l + 2, l, matches);\n        } else if (is_space) {\n          if (s[0] == ',') {\n            AddMatch(id + 103 * n, l + 2, l, matches);\n            if (s[1] == ' ') {\n              AddMatch(id + 33 * n, l + 3, l, matches);\n            }\n          } else if (s[0] == '.') {\n            AddMatch(id + 71 * n, l + 2, l, matches);\n            if (s[1] == ' ') {\n              AddMatch(id + 52 * n, l + 3, l, matches);\n            }\n          } else if (s[0] == '=') {\n            if (s[1] == '\"') {\n              AddMatch(id + 81 * n, l + 3, l, matches);\n            } else if (s[1] == '\\'') {\n              AddMatch(id + 98 * n, l + 3, l, matches);\n            }\n          }\n        }\n      } else if (is_space) {\n        /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and\n               is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)\n           transform. */\n        const BROTLI_BOOL is_all_caps =\n            TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);\n        const uint8_t* s;\n        if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {\n          continue;\n        }\n        /* Transforms \" \" + kUppercase{First,All} + \"\" */\n        AddMatch(id + (is_all_caps ? 85 : 30) * n, l + 1, l, matches);\n        has_found_match = BROTLI_TRUE;\n        if (l + 2 >= max_length) {\n          continue;\n        }\n        /* Transforms \" \" + kUppercase{First,All} + <suffix> */\n        s = &data[l + 1];\n        if (s[0] == ' ') {\n          AddMatch(id + (is_all_caps ? 83 : 15) * n, l + 2, l, matches);\n        } else if (s[0] == ',') {\n          if (!is_all_caps) {\n            AddMatch(id + 109 * n, l + 2, l, matches);\n          }\n          if (s[1] == ' ') {\n            AddMatch(id + (is_all_caps ? 111 : 65) * n, l + 3, l, matches);\n          }\n        } else if (s[0] == '.') {\n          AddMatch(id + (is_all_caps ? 115 : 96) * n, l + 2, l, matches);\n          if (s[1] == ' ') {\n            AddMatch(id + (is_all_caps ? 117 : 91) * n, l + 3, l, matches);\n          }\n        } else if (s[0] == '=') {\n          if (s[1] == '\"') {\n            AddMatch(id + (is_all_caps ? 110 : 118) * n, l + 3, l, matches);\n          } else if (s[1] == '\\'') {\n            AddMatch(id + (is_all_caps ? 119 : 120) * n, l + 3, l, matches);\n          }\n        }\n      }\n    }\n  }\n  if (max_length >= 6) {\n    /* Transforms with prefixes \"e \", \"s \", \", \" and \"\\xC2\\xA0\" */\n    if ((data[1] == ' ' &&\n         (data[0] == 'e' || data[0] == 's' || data[0] == ',')) ||\n        (data[0] == 0xC2 && data[1] == 0xA0)) {\n      size_t offset = dictionary->buckets[Hash15(&data[2])];\n      BROTLI_BOOL end = !offset;\n      while (!end) {\n        DictWord w = dictionary->dict_words[offset++];\n        const size_t l = w.len & 0x1F;\n        const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];\n        const size_t id = w.idx;\n        end = !!(w.len & 0x80);\n        w.len = (uint8_t)l;\n        if (w.transform == 0 &&\n            IsMatch(dictionary->words, w, &data[2], max_length - 2)) {\n          if (data[0] == 0xC2) {\n            AddMatch(id + 102 * n, l + 2, l, matches);\n            has_found_match = BROTLI_TRUE;\n          } else if (l + 2 < max_length && data[l + 2] == ' ') {\n            size_t t = data[0] == 'e' ? 18 : (data[0] == 's' ? 7 : 13);\n            AddMatch(id + t * n, l + 3, l, matches);\n            has_found_match = BROTLI_TRUE;\n          }\n        }\n      }\n    }\n  }\n  if (max_length >= 9) {\n    /* Transforms with prefixes \" the \" and \".com/\" */\n    if ((data[0] == ' ' && data[1] == 't' && data[2] == 'h' &&\n         data[3] == 'e' && data[4] == ' ') ||\n        (data[0] == '.' && data[1] == 'c' && data[2] == 'o' &&\n         data[3] == 'm' && data[4] == '/')) {\n      size_t offset = dictionary->buckets[Hash15(&data[5])];\n      BROTLI_BOOL end = !offset;\n      while (!end) {\n        DictWord w = dictionary->dict_words[offset++];\n        const size_t l = w.len & 0x1F;\n        const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];\n        const size_t id = w.idx;\n        end = !!(w.len & 0x80);\n        w.len = (uint8_t)l;\n        if (w.transform == 0 &&\n            IsMatch(dictionary->words, w, &data[5], max_length - 5)) {\n          AddMatch(id + (data[0] == ' ' ? 41 : 72) * n, l + 5, l, matches);\n          has_found_match = BROTLI_TRUE;\n          if (l + 5 < max_length) {\n            const uint8_t* s = &data[l + 5];\n            if (data[0] == ' ') {\n              if (l + 8 < max_length &&\n                  s[0] == ' ' && s[1] == 'o' && s[2] == 'f' && s[3] == ' ') {\n                AddMatch(id + 62 * n, l + 9, l, matches);\n                if (l + 12 < max_length &&\n                    s[4] == 't' && s[5] == 'h' && s[6] == 'e' && s[7] == ' ') {\n                  AddMatch(id + 73 * n, l + 13, l, matches);\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n  return has_found_match;\n}\n\n/* Finds matches for one or more dictionaries, if multiple are present\n   in the contextual dictionary */\nBROTLI_BOOL BrotliFindAllStaticDictionaryMatches(\n    const BrotliEncoderDictionary* dictionary, const uint8_t* data,\n    size_t min_length, size_t max_length, uint32_t* matches) {\n  BROTLI_BOOL has_found_match =\n      BrotliFindAllStaticDictionaryMatchesFor(\n          dictionary, data, min_length, max_length, matches);\n\n  if (!!dictionary->parent && dictionary->parent->num_dictionaries > 1) {\n    uint32_t matches2[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1];\n    int l;\n    const BrotliEncoderDictionary* dictionary2 = dictionary->parent->dict[0];\n    if (dictionary2 == dictionary) {\n      dictionary2 = dictionary->parent->dict[1];\n    }\n\n    for (l = 0; l < BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1; l++) {\n      matches2[l] = kInvalidMatch;\n    }\n\n    has_found_match |= BrotliFindAllStaticDictionaryMatchesFor(\n        dictionary2, data, min_length, max_length, matches2);\n\n    for (l = 0; l < BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1; l++) {\n      if (matches2[l] != kInvalidMatch) {\n        uint32_t dist = (uint32_t)(matches2[l] >> 5);\n        uint32_t len_code = matches2[l] & 31;\n        uint32_t skipdist = (uint32_t)((uint32_t)(1 << dictionary->words->\n            size_bits_by_length[len_code]) & ~1u) *\n            (uint32_t)dictionary->num_transforms;\n        /* TODO(lode): check for dist overflow */\n        dist += skipdist;\n        AddMatch(dist, (size_t)l, len_code, matches);\n      }\n    }\n  }\n  return has_found_match;\n}\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/static_dict.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Class to model the static dictionary. */\n\n#ifndef BROTLI_ENC_STATIC_DICT_H_\n#define BROTLI_ENC_STATIC_DICT_H_\n\n#include \"../common/platform.h\"\n\n#include \"encoder_dict.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN 37\nstatic const uint32_t kInvalidMatch = 0xFFFFFFF;\n\n/* Matches data against static dictionary words, and for each length l,\n   for which a match is found, updates matches[l] to be the minimum possible\n     (distance << 5) + len_code.\n   Returns 1 if matches have been found, otherwise 0.\n   Prerequisites:\n     matches array is at least BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1 long\n     all elements are initialized to kInvalidMatch */\nBROTLI_INTERNAL BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(\n    const BrotliEncoderDictionary* dictionary,\n    const uint8_t* data, size_t min_length, size_t max_length,\n    uint32_t* matches);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_STATIC_DICT_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/static_dict_lut.c",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Lookup table for static dictionary and transforms. */\n\n#include \"static_dict_lut.h\"\n\n#include \"../common/platform.h\"  /* IWYU pragma: keep */\n#include \"../common/static_init.h\"\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n#include \"../common/dictionary.h\"\n#include \"../common/transform.h\"\n#include \"hash_base.h\"\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n\n/* TODO(eustas): deal with largest bucket(s). Not it contains 163 items. */\nstatic BROTLI_BOOL BROTLI_COLD DoBrotliEncoderInitStaticDictionaryLut(\n    const BrotliDictionary* dict, uint16_t* buckets, DictWord* words,\n    void* arena) {\n  DictWord* slots = (DictWord*)arena;\n  uint16_t* heads = (uint16_t*)(slots + BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS);\n  uint16_t* counts = heads + BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS;\n  uint16_t* prev = counts + BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS;\n  size_t next_slot = 0;\n  uint8_t transformed_word[24];\n  uint8_t transformed_other_word[24];\n  size_t l;\n  size_t pos;\n  size_t i;\n\n  memset(counts, 0, BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS * sizeof(uint16_t));\n  memset(heads, 0, BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS * sizeof(uint16_t));\n  memset(prev, 0, BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS * sizeof(uint16_t));\n\n  for (l = 4; l <= 24; ++l) {\n    size_t n = 1u << dict->size_bits_by_length[l];\n    const uint8_t* dict_words = dict->data + dict->offsets_by_length[l];\n    for (i = 0; i < n; ++i) {\n      const uint8_t* dict_word = dict_words + l * i;\n      uint32_t key = Hash15(dict_word);\n      slots[next_slot].len = (uint8_t)l;\n      slots[next_slot].transform = BROTLI_TRANSFORM_IDENTITY;\n      slots[next_slot].idx = (uint16_t)i;\n      prev[next_slot] = heads[key];\n      heads[key] = (uint16_t)next_slot;\n      counts[key]++;\n      ++next_slot;\n    }\n    for (i = 0; i < n; ++i) {\n      uint32_t key;\n      uint32_t prefix;\n      BROTLI_BOOL found;\n      size_t curr;\n      const uint8_t* dict_word = dict_words + l * i;\n      if (dict_word[0] < 'a' || dict_word[0] > 'z') continue;\n      memcpy(transformed_word, dict_word, l);\n      transformed_word[0] = transformed_word[0] - 32;\n      key = Hash15(transformed_word);\n      prefix = BROTLI_UNALIGNED_LOAD32LE(transformed_word) & ~0x20202020u;\n      found = BROTLI_FALSE;\n      curr = heads[key];\n      while (curr != 0) {\n        const uint8_t* other_word;\n        uint32_t other_prefix;\n        if (slots[curr].len != l) break;\n        other_word = dict_words + l * slots[curr].idx;\n        other_prefix = BROTLI_UNALIGNED_LOAD32LE(other_word) & ~0x20202020u;\n        if (prefix == other_prefix) {\n          if (memcmp(transformed_word, other_word, l) == 0) {\n            found = BROTLI_TRUE;\n            break;\n          }\n        }\n        curr = prev[curr];\n      }\n      if (found) continue;\n      slots[next_slot].len = (uint8_t)l;\n      slots[next_slot].transform = BROTLI_TRANSFORM_UPPERCASE_FIRST;\n      slots[next_slot].idx = (uint16_t)i;\n      prev[next_slot] = heads[key];\n      heads[key] = (uint16_t)next_slot;\n      counts[key]++;\n      ++next_slot;\n    }\n    for (i = 0; i < n; ++i) {\n      const uint8_t* dict_word = dict_words + l * i;\n      BROTLI_BOOL is_ascii = BROTLI_TRUE;\n      BROTLI_BOOL has_lower = BROTLI_FALSE;\n      size_t k;\n      uint32_t prefix;\n      uint32_t key;\n      size_t curr;\n      BROTLI_BOOL found;\n      for (k = 0; k < l; ++k) {\n        if (dict_word[k] >= 128) is_ascii = BROTLI_FALSE;\n        if (k > 0 && dict_word[k] >= 'a' && dict_word[k] <= 'z')\n          has_lower = BROTLI_TRUE;\n      }\n      if (!is_ascii || !has_lower) continue;\n      memcpy(transformed_word, dict_word, l);\n      prefix = BROTLI_UNALIGNED_LOAD32LE(transformed_word) & ~0x20202020u;\n      for (k = 0; k < l; ++k) {\n        if (transformed_word[k] >= 'a' && transformed_word[k] <= 'z') {\n          transformed_word[k] = transformed_word[k] - 32;\n        }\n      }\n      key = Hash15(transformed_word);\n      found = BROTLI_FALSE;\n      curr = heads[key];\n      while (curr != 0) {\n        const uint8_t* other_word;\n        uint32_t other_prefix;\n        if (slots[curr].len != l) break;\n        other_word = dict_words + l * slots[curr].idx;\n        other_prefix = BROTLI_UNALIGNED_LOAD32LE(other_word) & ~0x20202020u;\n        if (prefix == other_prefix) {\n          if (slots[curr].transform == BROTLI_TRANSFORM_IDENTITY) {\n            if (memcmp(transformed_word, other_word, l) == 0) {\n              found = BROTLI_TRUE;\n              break;\n            }\n          } else if (slots[curr].transform ==\n                     BROTLI_TRANSFORM_UPPERCASE_FIRST) {\n            if ((transformed_word[0] == (other_word[0] - 32)) &&\n                memcmp(transformed_word + 1, other_word + 1, l - 1) == 0) {\n              found = BROTLI_TRUE;\n              break;\n            }\n          } else {\n            for (k = 0; k < l; ++k) {\n              if (other_word[k] >= 'a' && other_word[k] <= 'z') {\n                transformed_other_word[k] = other_word[k] - 32;\n              } else {\n                transformed_other_word[k] = other_word[k];\n              }\n            }\n            if (memcmp(transformed_word, transformed_other_word, l) == 0) {\n              found = BROTLI_TRUE;\n              break;\n            }\n          }\n        }\n        curr = prev[curr];\n      }\n      if (found) {\n        continue;\n      }\n      slots[next_slot].len = (uint8_t)l;\n      slots[next_slot].transform = BROTLI_TRANSFORM_UPPERCASE_ALL;\n      slots[next_slot].idx = (uint16_t)i;\n      prev[next_slot] = heads[key];\n      heads[key] = (uint16_t)next_slot;\n      counts[key]++;\n      ++next_slot;\n    }\n  }\n\n  if (next_slot != 31704) return BROTLI_FALSE;\n  pos = 0;\n  /* Unused; makes offsets start from 1. */\n  words[pos].len = 0;\n  words[pos].transform = 0;\n  words[pos].idx = 0;\n  pos++;\n  for (i = 0; i < BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS; ++i) {\n    size_t num_words = counts[i];\n    size_t curr;\n    if (num_words == 0) {\n      buckets[i] = 0;\n      continue;\n    }\n    buckets[i] = (uint16_t)pos;\n    curr = heads[i];\n    pos += num_words;\n    for (size_t k = 0; k < num_words; ++k) {\n      words[pos - 1 - k] = slots[curr];\n      curr = prev[curr];\n    }\n    words[pos - 1].len |= 0x80;\n  }\n  return BROTLI_TRUE;\n}\n\nBROTLI_BOOL BrotliEncoderInitStaticDictionaryLut(\n    const BrotliDictionary* dict, uint16_t* buckets, DictWord* words) {\n  size_t arena_size =\n      BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS *\n          (sizeof(uint16_t) + sizeof(DictWord)) +\n      BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS * 2 * sizeof(uint16_t);\n  void* arena = malloc(arena_size);\n  BROTLI_BOOL ok;\n  if (arena == NULL) {\n    return BROTLI_FALSE;\n  }\n  ok = DoBrotliEncoderInitStaticDictionaryLut(dict, buckets, words, arena);\n  free(arena);\n  return ok;\n}\n\nBROTLI_MODEL(\"small\")\nuint16_t kStaticDictionaryBuckets[BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS];\nBROTLI_MODEL(\"small\")\nDictWord kStaticDictionaryWords[BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS];\n\n#else  /* BROTLI_STATIC_INIT */\n\n/* Embed kStaticDictionaryBuckets and kStaticDictionaryWords. */\n#include \"static_dict_lut_inc.h\"\n\n#endif  /* BROTLI_STATIC_INIT */\n\n#if defined(__cplusplus) || defined(c_plusplus)\n} /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/static_dict_lut.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Lookup table for static dictionary and transforms. */\n\n#ifndef BROTLI_ENC_STATIC_DICT_LUT_H_\n#define BROTLI_ENC_STATIC_DICT_LUT_H_\n\n#include \"../common/dictionary.h\"\n#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\ntypedef struct DictWord {\n  /* Highest bit is used to indicate end of bucket. */\n  uint8_t len;\n  uint8_t transform;\n  uint16_t idx;\n} DictWord;\n\n/* Buckets are Hash15 results. */\n#define BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS 32768\n#define BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS 31705\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\nBROTLI_INTERNAL BROTLI_BOOL BrotliEncoderInitStaticDictionaryLut(\n    const BrotliDictionary* dictionary, uint16_t* buckets, DictWord* words);\nBROTLI_INTERNAL extern BROTLI_MODEL(\"small\") uint16_t\n    kStaticDictionaryBuckets[BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS];\nBROTLI_INTERNAL extern BROTLI_MODEL(\"small\") DictWord\n    kStaticDictionaryWords[BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS];\n#else\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\") uint16_t\n    kStaticDictionaryBuckets[BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS];\nBROTLI_INTERNAL extern const BROTLI_MODEL(\"small\") DictWord\n    kStaticDictionaryWords[BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS];\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_STATIC_DICT_LUT_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/static_dict_lut_inc.h",
    "content": "const BROTLI_MODEL(\"small\")\nuint16_t kStaticDictionaryBuckets[BROTLI_ENC_STATIC_DICT_LUT_NUM_BUCKETS] = {\n1,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,20,0,0,0,21,0,22,0,0,0,0,0,0,0,0,23,0,0,25,0,29,\n0,53,0,0,0,0,0,0,55,0,0,0,0,0,0,61,76,0,0,0,94,0,0,0,0,0,0,96,0,97,0,98,0,0,0,0,\n0,0,0,99,101,106,108,0,0,0,0,0,110,0,111,112,0,113,118,124,0,0,0,0,0,125,128,0,0\n,0,0,129,0,0,131,0,0,0,0,0,0,132,0,0,135,0,0,0,137,0,0,0,0,0,138,139,0,0,0,0,0,0\n,0,142,143,144,0,0,0,0,0,145,0,0,0,146,149,151,152,0,0,153,0,0,0,0,0,0,0,0,0,0,0\n,0,0,0,0,154,0,0,0,0,0,0,155,0,0,0,0,160,182,0,0,0,0,0,0,183,0,0,0,188,189,0,0,\n192,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,197,202,209,0,0,210,0,224,0,0,0,225,0,0,0,0,\n0,0,0,0,0,0,231,0,0,0,232,0,240,0,0,242,0,0,0,0,0,0,0,0,0,0,0,244,0,0,0,246,0,0,\n249,251,253,0,0,0,0,0,258,0,0,261,263,0,0,0,267,0,0,268,0,269,0,0,0,0,0,0,0,0,0,\n271,0,0,0,0,0,0,272,0,273,0,277,0,278,286,0,0,0,0,287,0,289,290,291,0,0,0,295,0,\n0,296,297,0,0,0,0,0,0,0,0,0,0,298,0,0,0,299,0,0,305,0,324,0,0,0,0,0,327,0,328,\n329,0,0,0,0,336,0,0,340,0,341,342,343,0,0,346,0,348,0,0,0,0,0,0,349,351,0,0,355,\n0,363,0,364,0,368,369,0,370,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,373,0,375,0,\n0,0,0,376,377,0,0,394,395,396,0,0,398,0,0,0,0,400,0,0,408,0,0,0,0,420,0,0,0,0,0,\n0,421,0,0,422,423,0,0,429,435,436,442,0,0,443,0,444,445,453,456,0,457,0,0,0,0,0,\n458,0,0,0,459,0,0,0,460,0,462,463,465,0,0,0,0,0,0,466,469,0,0,0,0,0,0,470,0,0,0,\n474,0,476,0,0,0,0,483,0,485,0,0,0,486,0,0,488,491,492,0,0,497,499,500,0,501,0,0,\n0,505,0,0,506,0,0,0,507,0,0,0,509,0,0,0,0,511,512,519,0,0,0,0,0,0,529,530,0,0,0,\n534,0,0,0,0,543,0,0,0,0,0,0,0,0,0,553,0,0,0,0,557,560,0,0,0,0,0,0,561,0,564,0,0,\n0,0,0,0,565,566,0,575,0,619,0,620,0,0,623,624,0,0,0,625,0,0,626,627,0,0,628,0,0,\n0,0,630,0,631,0,0,0,0,0,0,0,0,0,641,0,0,0,0,643,656,668,0,0,0,673,0,0,0,674,0,0,\n0,0,0,0,0,0,682,0,687,0,690,0,693,699,700,0,0,0,0,0,0,704,705,0,0,0,0,707,710,0,\n711,0,0,0,0,726,0,0,729,0,0,0,730,731,0,0,0,0,0,752,0,0,0,762,0,763,0,0,767,0,0,\n0,770,774,0,0,775,0,0,0,0,0,0,0,0,0,0,776,0,0,0,777,783,0,0,0,785,788,0,0,0,0,\n790,0,0,0,793,0,0,0,0,794,0,0,804,819,821,0,827,0,0,0,834,0,0,835,0,0,0,841,0,\n844,0,850,851,859,0,860,0,0,0,0,0,0,0,874,0,876,0,877,890,0,0,0,0,0,0,0,0,893,\n894,898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,0,0,900,904,906,0,0,0,907,0,908,909,\n0,910,0,0,0,0,911,0,0,0,0,0,916,0,0,0,922,925,0,930,0,934,0,0,0,0,0,943,0,0,944,\n0,953,954,0,0,0,0,0,0,955,0,962,963,0,0,976,0,0,977,978,979,980,0,981,0,0,0,0,\n984,0,0,985,0,0,987,989,991,0,0,0,0,0,0,0,0,0,992,0,0,0,993,0,0,0,0,0,0,996,0,0,\n0,1000,0,0,0,0,0,1002,0,0,0,0,1005,1007,0,0,0,1009,0,0,0,1010,0,0,0,0,0,0,1011,0\n,1012,0,0,0,0,1014,1016,0,0,0,1020,0,1021,0,0,0,0,1022,0,0,0,1024,0,0,0,0,0,0,\n1025,0,0,1026,1027,0,0,0,0,0,1031,0,1033,0,0,0,0,1034,0,0,0,1037,1040,0,0,0,1042\n,1043,0,0,1053,0,1054,0,0,1057,0,0,0,1058,0,0,1060,0,0,0,0,0,0,0,1061,0,0,1062,0\n,0,0,0,1063,0,0,0,0,1064,0,0,0,0,0,1065,0,0,0,0,1066,1067,0,0,0,1069,1070,1072,0\n,0,0,0,0,0,1073,0,1075,0,0,0,0,0,0,1080,1084,0,0,0,0,1088,0,0,0,0,0,0,1094,0,\n1095,0,1107,0,0,0,1112,1114,0,1119,0,1122,0,0,1126,0,1129,0,1130,0,0,0,0,0,1132,\n0,0,0,0,0,0,1144,0,0,1145,1146,0,1148,1149,0,0,1150,1151,0,0,0,0,1152,0,1153,0,0\n,0,0,0,1154,0,1163,0,0,0,1164,0,0,0,0,0,1165,0,1167,0,1170,0,0,0,0,0,1171,1172,0\n,0,0,0,0,0,0,0,1173,1175,1177,0,1186,0,0,0,0,0,0,0,0,0,0,1195,0,0,1221,0,0,1224,\n0,0,1227,0,0,0,0,0,1228,1229,0,0,1230,0,0,0,0,0,0,0,0,0,1231,0,0,0,1233,0,0,1243\n,1244,1246,1248,0,0,0,0,1254,1255,1258,1259,0,0,0,1260,0,0,1261,0,0,0,1262,1264,\n0,0,1265,0,0,0,0,0,0,0,0,0,0,0,0,1266,0,1267,0,0,0,0,1273,1274,1276,1289,0,0,\n1291,1292,1293,0,0,1294,1295,1296,0,0,0,0,1302,0,1304,0,0,0,0,0,0,0,0,0,1311,\n1312,0,1314,0,1316,1320,1321,0,0,0,0,0,0,0,1322,1323,1324,0,1335,0,1336,0,0,0,0,\n1341,1342,0,1346,0,1357,0,0,0,1358,1360,0,0,0,0,0,0,1361,0,0,0,1362,1365,0,1366,\n0,0,0,0,0,0,0,1379,0,0,0,0,0,0,0,0,0,0,0,0,1386,0,1388,0,0,0,0,0,0,0,0,0,0,0,0,0\n,0,1395,0,0,0,0,1403,0,1405,0,0,1407,0,0,0,0,0,1408,1409,0,1410,0,0,0,1412,1413,\n1416,0,0,1429,1451,0,0,1454,0,0,0,0,0,0,0,1455,0,0,0,0,0,0,0,1456,0,0,0,0,1459,\n1460,1461,1475,0,0,0,0,0,0,1477,0,1480,0,1481,0,0,1486,0,0,1495,0,0,0,1496,0,0,\n1498,1499,1501,1520,1521,0,0,0,1526,0,0,0,0,1528,1529,0,1533,1536,0,0,0,1537,\n1538,1549,0,1550,1558,1559,1572,0,1573,0,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1579,0,\n1599,0,1603,0,1604,0,1605,0,0,0,0,0,1608,1610,0,0,0,0,1611,0,1615,0,1616,1618,0,\n1619,0,0,1622,0,0,0,0,1634,0,0,0,1635,0,0,0,1641,0,0,0,0,0,0,0,0,0,1643,0,0,0,\n1650,0,0,1652,0,0,0,0,0,1653,0,0,0,1654,0,0,0,0,1655,0,1662,0,0,1663,1664,0,0,\n1668,0,0,1669,1670,0,1672,1673,0,0,0,0,0,1674,0,0,0,1675,1676,1680,0,1682,0,0,\n1687,0,0,0,0,0,1704,0,0,1705,0,0,1721,0,0,0,0,1734,1735,0,0,0,0,1737,0,0,0,0,\n1739,0,0,1740,0,0,0,0,0,0,0,0,0,0,1741,1743,0,0,0,0,1745,0,0,0,1749,0,0,0,1751,0\n,0,0,0,0,0,1760,0,0,0,0,1765,0,0,0,0,0,1784,0,1785,1787,0,0,0,0,1788,1789,0,0,0,\n0,1790,1791,1793,0,1798,1799,0,0,0,0,1801,0,1803,1805,0,0,0,1806,1811,0,1812,\n1814,0,1821,0,0,0,0,0,1822,1833,0,0,0,0,0,0,1848,0,0,0,0,0,0,1857,0,0,0,1859,0,0\n,0,0,1861,0,0,0,0,0,0,0,1866,0,1921,1925,0,0,0,1929,1930,0,0,0,0,0,0,0,0,0,1931,\n0,0,0,0,1932,0,0,0,1934,0,0,0,0,0,0,0,0,1946,0,0,1948,0,0,0,0,1950,0,1957,0,1958\n,0,0,0,0,0,1965,1967,0,0,0,0,1968,0,1969,0,1971,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n,0,1973,0,0,0,0,1975,0,0,0,0,1976,1979,0,1982,0,0,0,0,1984,1988,0,0,0,0,1990,\n2004,2008,0,0,0,2012,2013,0,0,0,0,0,0,0,0,0,0,2015,0,2016,2017,0,0,0,0,2021,0,0,\n2025,0,0,0,0,0,2029,2036,2040,0,2042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2043,0,0,0,0,0,\n2045,0,0,0,0,0,0,0,2046,2047,0,2048,2049,0,2059,0,0,2063,0,2064,2065,0,0,2066,0,\n0,0,0,0,0,2069,0,0,0,0,2070,0,2071,0,2072,0,0,0,0,2080,2082,2083,0,0,0,0,0,2085,\n0,2086,2088,2089,2105,0,0,0,0,2107,0,0,2116,2117,0,2120,0,0,2122,0,0,0,0,0,2123,\n0,0,2125,2127,2128,0,0,0,2130,0,0,0,2137,2139,2140,2141,0,0,0,0,0,0,0,0,0,2144,\n2145,0,0,2146,2149,0,0,0,0,2150,0,0,2151,2158,0,2159,0,2160,0,0,0,0,0,0,2161,\n2162,0,0,2194,2202,0,0,0,0,0,0,2205,2217,0,2220,0,2221,0,2222,2224,0,0,0,0,2237,\n0,0,0,0,0,2238,0,2239,2241,0,0,2242,0,0,0,0,0,2243,0,0,0,0,0,0,2252,0,0,2253,0,0\n,0,2257,2258,0,0,0,2260,0,0,0,0,0,0,0,2262,0,2264,0,0,0,0,0,2269,2270,0,0,0,0,0,\n0,0,0,0,2271,0,2273,0,0,0,0,2277,0,0,0,0,2278,0,0,0,0,2279,0,2280,0,2283,0,0,0,0\n,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,0,0,0,0,0,0,2289,2290,0,0,0,0,2291,0,2292,0,\n0,0,2293,2295,2296,0,0,0,0,0,0,0,2298,0,0,0,0,0,2303,0,2305,0,0,2306,0,2307,0,0,\n0,0,0,0,0,0,0,0,0,0,2313,2314,2315,2316,0,0,2318,0,2319,0,2322,0,0,2323,0,2324,0\n,2326,0,0,0,0,0,0,0,2335,0,2336,2338,2339,0,2340,0,0,0,2355,0,2375,0,2382,2386,0\n,2387,0,0,2394,0,0,0,0,2395,0,2397,0,0,0,0,0,2398,0,0,0,0,0,0,0,2399,2402,2404,\n2408,2411,0,0,0,2413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2415,0,0,2416,2417,2419,0,2420,\n0,0,0,0,0,2425,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,2427,2428,0,2429,0,0,2430,2434\n,0,2436,0,0,0,0,0,0,2441,2442,0,2445,0,0,2446,2457,0,2459,0,0,2462,0,2464,0,2477\n,0,2478,2486,0,0,0,2491,0,0,2493,0,0,2494,0,2495,0,2513,2523,0,0,0,0,2524,0,0,0,\n0,0,0,2528,2529,2530,0,0,2531,0,2533,0,0,2534,2535,0,2536,2537,0,2538,0,2539,\n2540,0,0,0,2545,2546,0,0,0,0,0,0,0,2548,0,0,2549,0,2550,2555,0,0,0,0,0,2557,0,\n2560,0,0,0,0,0,0,0,0,0,0,0,2561,0,2576,0,0,0,0,0,0,0,0,0,2577,2578,0,0,0,2579,0,\n0,0,0,0,0,0,2580,0,0,0,0,2581,0,0,0,0,2583,0,2584,0,2588,2590,0,0,0,2591,0,0,0,0\n,2593,2594,0,2595,0,2601,2602,0,0,2603,0,2605,0,0,0,2606,2607,2611,0,2615,0,0,0,\n2617,0,0,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,2620,0,0,0,2621,0,2623,0,2625,0,0,2628,\n2629,0,0,2635,2636,2637,0,0,2639,0,0,0,2642,0,0,0,0,2643,0,2644,0,2649,0,0,0,0,0\n,0,2655,2656,0,0,2657,0,0,0,0,0,2658,0,0,0,0,0,2659,0,0,0,0,2664,2685,0,2687,0,\n2688,0,0,2689,0,0,2694,0,2695,0,0,2698,0,2701,2706,0,0,0,2707,0,2709,2710,2711,0\n,0,0,2720,2730,2735,0,0,0,0,2738,2740,0,0,0,0,2747,0,0,0,0,0,0,2748,0,0,2749,0,0\n,0,0,0,2750,0,0,2752,2754,0,0,0,0,0,2758,0,0,0,0,2762,0,0,0,0,2763,0,0,0,0,0,0,0\n,2764,2767,0,0,0,0,2768,0,0,2770,0,0,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,2772,0,0,0\n,0,0,2773,2776,0,0,2783,0,0,2784,0,2789,0,2790,0,0,0,2792,0,0,0,0,0,0,0,0,0,0,\n2793,2795,0,0,0,0,0,0,2796,0,0,0,0,0,0,2797,2799,0,0,0,0,2803,0,0,0,0,2806,0,\n2807,2808,2817,2819,0,0,0,0,0,2821,0,0,0,0,2822,2823,0,0,0,0,0,0,0,2824,0,0,2828\n,0,2834,0,0,0,0,0,0,2836,0,2838,0,0,2839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2841,\n0,0,0,2842,0,0,0,0,0,2843,2844,0,0,0,0,2846,0,0,2847,0,2849,0,2853,0,0,0,0,0,\n2857,0,0,0,0,2858,0,2859,0,0,2860,0,2862,2868,0,0,0,0,2875,0,2876,0,0,2877,2878,\n2884,2889,2890,0,0,2891,0,0,2892,0,0,0,2906,2912,0,2913,0,0,0,0,0,0,0,0,2916,0,\n2934,0,0,0,0,0,2935,0,0,0,0,2939,0,2940,0,0,0,0,0,0,0,2941,0,0,0,2946,0,2949,0,0\n,2950,2954,2955,0,0,0,2959,2961,0,0,2962,0,2963,0,0,0,0,0,0,2964,2965,2966,2967,\n0,0,0,0,0,0,0,2969,0,0,0,0,0,2970,2975,0,2982,2983,2984,0,0,0,0,0,2989,0,0,2990,\n0,0,0,0,0,0,0,2991,0,0,0,0,0,0,0,0,2998,0,3000,3001,0,0,3002,0,0,0,3003,0,0,3012\n,0,0,3022,0,0,3024,0,0,3025,3027,0,0,0,3030,0,0,0,0,3034,3035,0,0,3036,0,3039,0,\n3049,0,0,3050,0,0,0,0,0,0,3051,0,3053,0,0,0,0,3057,0,3058,0,0,0,0,0,0,0,0,3063,0\n,0,3073,3074,3078,3079,0,3080,3086,0,0,0,0,0,0,0,0,3087,0,3092,0,3095,0,3099,0,0\n,0,3100,0,3101,3102,0,3122,0,0,0,3124,0,3125,0,0,0,0,0,0,3132,3134,0,0,3136,0,0,\n0,0,0,0,0,3147,0,0,3149,0,0,0,0,0,3150,3151,3152,0,0,0,0,3158,0,0,3160,0,0,3161,\n0,0,3162,0,3163,3166,3168,0,0,3169,3170,0,0,3171,0,0,0,0,0,0,0,3182,0,3184,0,0,\n3188,0,0,3194,0,0,0,0,0,0,3204,0,0,0,0,3209,0,0,0,0,0,0,0,0,0,0,0,3216,3217,0,0,\n0,0,0,0,0,3219,0,0,3220,3222,0,3223,0,0,0,0,3224,0,3225,3226,0,3228,3233,0,3239,\n3241,3242,0,0,3251,3252,3253,3255,0,0,0,0,0,0,0,0,3260,0,0,3261,0,0,0,3267,0,0,0\n,0,0,0,0,0,3271,0,0,0,3278,0,3282,0,0,0,3284,0,0,0,3285,3286,0,0,0,0,0,0,0,3287,\n3292,0,0,0,0,3294,3296,0,0,3299,3300,3301,0,3302,0,0,0,0,0,3304,3306,0,0,0,0,0,0\n,3308,0,0,0,0,0,0,0,0,0,3311,0,0,0,0,0,0,0,0,3312,3314,3315,0,3318,0,0,0,0,0,0,0\n,0,3319,0,0,0,0,0,3321,0,0,0,0,0,0,0,0,0,3322,0,0,3324,3325,0,0,3326,0,0,3328,\n3329,3331,0,0,3335,0,0,3337,0,3338,0,0,0,0,3343,3347,0,0,0,3348,0,0,3351,0,0,0,0\n,0,0,3354,0,0,0,0,0,0,0,0,0,0,3355,0,0,3365,3366,3367,0,0,0,0,0,0,3368,3369,0,\n3370,0,0,3373,0,0,3376,0,0,3377,0,3379,3387,0,0,0,0,0,3390,0,0,0,0,0,0,0,3402,0,\n3403,3436,3437,3439,0,0,3441,0,0,0,3442,0,0,3449,0,0,0,3450,0,0,0,0,0,0,0,3451,0\n,0,3452,0,3453,3456,0,3457,0,0,3458,0,3459,0,0,0,0,0,0,0,0,0,3460,0,0,3469,3470,\n0,0,3475,0,0,0,3480,3487,3489,0,3490,0,0,3491,3499,0,3500,0,0,3501,0,0,0,3502,0,\n3514,0,0,0,3516,3517,0,0,0,3518,0,0,0,0,3520,3521,3522,0,0,3526,3530,0,0,0,0,\n3531,0,0,0,0,3536,0,0,0,0,0,0,0,3539,3541,0,0,3542,3544,0,3547,3548,0,0,3550,0,\n3553,0,0,0,0,0,0,0,3554,0,3555,0,3558,0,3559,0,0,0,0,0,0,0,0,3563,0,3581,0,0,0,\n3599,0,0,0,3600,0,3601,0,3602,3603,0,0,3606,3608,0,3610,3611,0,0,0,0,0,0,0,0,0,\n3612,3616,3619,0,0,0,0,0,0,0,0,0,0,0,0,0,3624,3628,0,3629,3634,3635,0,0,0,0,0,0,\n3636,0,3637,0,0,3638,3651,0,0,0,0,0,0,3652,3653,0,0,0,0,3656,3657,0,0,0,0,0,3658\n,0,0,0,0,3659,0,3661,3663,3664,0,3665,0,3692,0,0,0,3694,3696,0,0,0,0,0,0,0,0,0,0\n,0,0,3698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3700,0,0,3701,0,0,0,3708,3709,0,0,0,3711\n,3712,0,0,0,0,0,3723,0,3724,3725,0,0,3726,0,0,0,0,0,0,3728,3729,0,3734,3735,3737\n,0,0,0,3743,0,3745,0,0,3746,0,0,3747,3748,0,3757,0,3759,3766,3767,0,3768,0,0,0,0\n,3769,0,0,3771,0,3774,0,0,0,0,0,0,3775,0,0,0,0,0,0,3776,0,3777,3786,0,3788,3789,\n0,0,0,0,0,0,0,0,0,3791,0,3811,0,0,0,0,0,3814,3815,3816,3820,0,0,0,0,0,0,0,3821,0\n,0,3825,0,0,0,0,3835,0,0,3848,3849,0,0,0,0,3850,3851,3853,0,0,0,0,3859,0,3860,\n3862,0,0,0,0,0,3863,0,0,0,0,0,0,0,0,3873,0,3874,0,3875,3886,0,3887,0,0,0,0,3892,\n3913,0,3914,0,0,0,3925,3931,0,0,0,0,3934,3941,3942,0,0,0,0,3943,0,0,0,3944,0,0,0\n,0,0,3945,0,3947,0,0,0,3956,3957,0,0,0,0,0,0,0,0,0,3958,0,3959,3965,0,0,0,0,3966\n,0,0,0,3967,0,0,0,3968,3974,0,0,0,0,0,3975,3977,3978,0,0,0,0,3980,0,3985,0,0,0,0\n,0,0,0,0,3986,4011,0,0,4017,0,0,0,0,0,0,0,0,0,0,0,4018,0,0,0,0,4019,0,4023,0,0,0\n,4027,4028,0,0,0,0,0,0,0,0,4031,4034,0,0,4035,4037,4039,4040,0,0,0,0,0,4059,0,\n4060,4061,0,4062,4063,4066,0,0,4072,0,0,0,0,0,0,0,0,0,0,0,0,0,4088,0,0,0,0,0,\n4091,0,0,0,0,4094,4095,0,0,4096,0,0,0,0,0,4098,4099,0,0,0,4101,0,4104,0,0,0,4105\n,4108,0,4113,0,0,4115,4116,0,4126,0,0,4127,0,0,0,0,0,0,0,4128,4132,4133,0,4134,0\n,0,0,4137,0,0,4141,0,0,0,0,4144,4146,4147,0,0,0,0,4148,0,0,4311,0,0,0,4314,4329,\n0,4331,4332,0,4333,0,4334,0,0,0,4335,0,4336,0,0,0,4337,0,0,0,4342,4345,4346,4350\n,0,4351,4352,0,4354,4355,0,0,4364,0,0,0,0,4369,0,0,0,4373,0,4374,0,0,0,0,4377,0,\n0,0,0,4378,0,0,0,4380,0,0,0,4381,4382,0,0,0,0,0,0,0,4384,0,0,0,0,4385,0,0,0,4386\n,0,0,0,4391,4398,0,0,0,0,4407,4409,0,0,0,0,4410,0,0,4411,0,4414,4415,4418,0,4427\n,4428,4430,0,4431,0,4448,0,0,0,0,0,4449,0,0,0,4451,4452,0,4453,4454,0,4456,0,0,0\n,0,0,0,0,4459,0,4463,0,0,0,0,0,4466,0,4467,0,4469,0,0,0,0,0,0,0,0,0,0,0,0,0,4470\n,4471,0,4473,0,0,4475,0,0,0,0,4477,4478,0,0,0,4479,4481,0,4482,0,4484,0,0,0,0,0,\n0,0,4486,0,0,4488,0,0,4497,0,4508,0,0,4510,4511,0,4520,4523,0,4524,0,4525,0,4527\n,0,0,4528,0,0,0,0,4530,0,4531,0,0,4532,0,0,0,4533,0,0,0,0,0,4535,0,0,0,4536,0,0,\n0,0,0,4541,4543,4544,4545,4547,0,4548,0,0,0,0,4550,4551,0,4553,0,0,0,0,4562,0,0,\n4571,0,0,0,4574,0,0,0,4575,0,4576,0,4577,0,0,0,4581,0,0,0,0,0,4582,0,0,4586,0,0,\n0,4588,0,0,4597,0,4598,0,0,0,0,4616,4617,0,4618,0,0,0,0,4619,0,4620,0,0,4621,0,\n4624,0,0,0,0,0,4625,0,0,0,0,4657,0,4659,0,4667,0,0,0,4668,4670,0,4672,0,0,0,0,0,\n4673,4676,0,0,0,0,4687,0,0,0,0,4697,0,0,0,0,4699,0,4701,0,0,0,0,4702,0,0,4706,0,\n0,4713,0,0,0,4714,4715,4716,0,0,0,0,0,0,0,0,0,0,0,0,4717,0,0,4720,0,4721,4729,\n4735,0,0,0,4737,0,0,0,4739,0,0,0,4740,0,0,0,4741,0,0,0,0,0,4742,0,4745,4746,4747\n,0,0,0,0,0,0,0,0,4748,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4751,\n4786,0,4787,0,4788,4796,0,0,4797,4798,0,4799,4806,4807,0,0,0,0,4809,4810,0,0,0,0\n,0,0,4811,0,0,0,0,0,4812,0,4813,0,0,4815,0,4821,4822,0,0,0,0,4823,0,0,0,0,0,0,0,\n0,0,0,4824,0,0,0,0,4826,0,0,0,4828,0,4829,0,0,0,4843,0,0,4847,0,4853,4855,4858,0\n,0,0,0,0,4859,0,4864,0,0,4879,0,0,0,0,4880,0,0,0,0,4881,0,4882,0,0,0,0,0,0,0,0,0\n,4883,0,0,0,0,4884,0,0,0,0,0,4886,4887,4888,4894,4896,0,4902,0,0,4905,0,0,4915,0\n,0,0,0,0,0,0,4916,4917,4919,4921,0,0,0,0,0,4926,0,0,0,0,4927,0,0,0,0,0,0,0,0,\n4929,0,4930,4931,0,4938,0,4952,0,4953,4957,4960,4964,0,0,0,0,0,0,0,5019,5020,\n5022,0,0,0,0,0,5023,0,0,0,5024,0,0,0,5025,0,0,0,0,5028,0,0,0,0,5029,5030,5031,0,\n5033,0,0,0,0,0,0,0,0,0,5034,5035,0,5036,0,0,5037,0,0,0,0,5038,0,0,5039,0,0,0,\n5041,5042,0,0,0,0,5044,5049,5054,0,5055,0,5057,0,0,0,5060,0,0,0,0,0,5063,0,5064,\n5065,0,5067,0,0,0,5068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5076,0,0,0,0,0,0,\n0,5077,0,0,5078,5080,0,0,5083,0,0,0,0,0,0,0,0,5085,0,0,0,0,0,0,5098,5099,5101,\n5105,5107,0,5108,0,5109,0,0,0,0,0,0,0,5110,0,0,0,0,0,5117,5118,0,5121,0,5122,0,0\n,5130,0,0,0,5137,0,0,0,5148,0,0,0,0,0,0,0,5151,5154,0,0,0,5155,0,0,5156,5159,\n5161,0,0,0,0,5162,0,0,0,0,5163,5164,0,5166,0,0,0,0,0,0,0,0,0,0,5167,0,0,0,5172,0\n,0,0,0,0,0,5178,5179,0,0,5190,0,0,5191,5192,5194,0,0,5198,5201,0,0,0,0,0,5203,0,\n5206,5209,0,0,0,0,0,0,5213,0,5214,5216,0,0,0,0,0,5217,0,0,0,0,0,0,0,0,5218,5219,\n0,5231,0,0,5244,5249,0,5254,0,5255,0,0,5257,0,0,0,0,0,5258,0,5260,5270,0,5277,0,\n0,0,0,0,0,5280,5281,5282,5283,0,0,0,0,0,5284,0,5285,0,0,0,0,0,5287,5288,0,0,0,0,\n0,0,0,0,0,0,5289,5291,0,0,5294,0,0,5295,0,0,0,0,0,0,0,5304,0,0,5306,5307,5308,0,\n5309,0,0,5310,0,0,0,0,5311,5312,0,5313,0,0,0,0,0,5316,0,0,0,5317,0,0,0,0,0,0,0,0\n,0,5325,0,0,0,0,0,0,5326,0,5327,5329,0,5332,0,0,0,0,5338,0,0,0,0,0,0,0,0,5340,0,\n0,5341,0,0,0,5342,0,5343,5344,0,0,5345,0,0,0,0,0,0,5347,5348,0,0,0,0,0,0,0,0,0,\n5349,0,5350,0,5354,0,0,0,0,5358,0,0,5359,0,0,5361,0,0,5365,0,5367,0,5373,0,0,0,\n5379,0,0,0,5380,0,0,0,5382,0,5384,0,0,0,0,0,0,5385,0,0,0,0,5387,0,0,0,0,0,0,5388\n,5390,5393,0,0,0,0,0,0,0,0,0,0,0,5396,0,0,0,0,5397,5402,0,0,0,0,0,5403,0,0,0,\n5404,5405,0,0,0,0,0,0,0,0,0,0,0,0,5406,0,0,0,0,5410,0,0,5411,0,5415,0,0,0,0,5416\n,5434,0,0,0,0,0,0,0,0,0,0,0,5438,0,5440,0,0,0,0,0,0,5441,5442,0,0,0,5443,5444,\n5447,0,0,5448,5449,5451,0,0,0,5456,5457,0,0,0,5459,0,0,0,5461,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,5464,0,5466,0,0,5467,0,5470,0,0,5473,0,0,5474,0,0,5476,0,0,0,0,0,0,0,0\n,0,0,0,5477,0,0,0,0,0,0,0,5484,0,0,5485,5486,0,0,0,0,0,5488,0,0,0,0,0,0,0,5489,0\n,0,0,0,0,5507,0,0,0,5510,0,5511,0,0,5512,0,0,0,5513,0,5515,0,0,5516,5517,0,5518,\n0,0,5522,0,0,0,0,0,5534,5535,0,0,5536,0,5538,0,0,5543,0,5544,0,0,5545,0,5547,0,\n5557,0,0,5558,0,5560,5567,0,0,0,0,5568,0,0,0,5571,5573,0,5574,0,5575,0,0,0,0,\n5577,0,0,5598,0,0,0,0,0,0,0,0,0,5600,5609,0,0,0,0,5610,0,0,5612,0,5624,0,5625,0,\n0,0,5629,0,5641,0,5642,5643,0,0,0,0,0,0,5651,0,0,0,5652,5653,0,5661,5662,5678,0,\n5679,0,0,0,0,5685,5686,0,0,0,0,0,5690,5692,0,5703,0,0,0,0,0,5706,0,0,0,0,5707,0,\n0,0,0,0,0,5708,0,0,5709,0,5710,0,0,0,5712,0,5733,0,5734,5735,0,0,5744,5751,0,0,0\n,0,0,0,0,0,0,0,0,0,5752,0,5754,0,0,0,0,0,0,5757,5758,0,5760,5761,0,0,0,0,5763,\n5764,5765,0,5766,0,5767,5768,0,5770,0,0,0,0,5776,5780,0,0,0,0,5782,0,0,0,0,5784,\n0,0,5788,0,0,0,0,0,0,0,0,0,0,0,5797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5799,0,0,5801,\n0,0,0,5811,0,0,0,0,0,0,5816,0,0,5827,0,0,0,0,0,0,0,0,5830,5831,0,0,5832,0,0,5833\n,0,5835,5844,5845,0,5846,0,0,0,0,0,5850,0,0,0,0,0,5852,0,5855,5857,0,0,5859,0,\n5861,0,0,5863,0,5865,0,0,0,5873,5875,0,0,0,5877,0,5879,0,0,0,5888,0,0,5889,5891,\n0,5894,0,0,0,0,0,0,5895,0,5897,0,0,0,0,0,0,5907,0,5911,0,0,5912,0,5913,5922,5924\n,0,5927,5928,0,0,0,0,5929,5930,0,5933,0,0,0,0,5949,0,0,5951,0,0,0,0,0,0,0,0,5953\n,0,0,5954,0,5959,5960,5961,0,5964,0,0,0,5976,5978,5987,5990,0,0,0,0,0,5991,0,\n5992,0,0,0,5994,5995,0,0,5996,0,0,6001,6003,0,0,0,0,6007,0,0,0,0,0,6008,0,0,6009\n,0,6010,0,0,0,6011,6015,0,6017,0,6019,0,6023,0,0,0,0,0,0,0,6025,0,0,0,0,0,0,0,0,\n0,0,6026,0,6030,0,0,6032,0,0,0,6033,6038,6040,0,0,0,6041,6045,0,0,6046,0,0,6053,\n0,0,6054,0,6055,0,0,0,0,0,0,6057,0,6063,0,0,0,6064,0,6066,6071,6072,0,0,0,0,0,0,\n6075,6076,0,0,6077,0,0,0,0,0,0,0,0,0,6078,6079,0,0,0,0,0,0,0,0,6080,0,6083,0,0,0\n,0,0,6084,0,0,6088,0,6089,0,0,6093,6105,0,0,6107,0,6110,0,0,0,6111,6125,6126,0,0\n,0,6129,0,0,0,0,6130,0,0,0,6131,6134,0,0,0,0,0,0,6142,0,0,0,0,0,6144,0,0,6146,\n6151,6153,0,6156,0,6163,0,6180,6181,0,0,0,0,0,6182,0,0,0,0,6184,6195,0,0,6206,0,\n6208,0,0,6212,6213,6214,0,6215,0,0,0,6228,0,0,0,6234,0,0,0,0,0,0,6235,6240,0,\n6242,6243,6244,0,6250,6255,0,0,0,0,0,6257,0,0,0,6258,6278,0,6284,0,0,0,6285,0,0,\n0,0,0,0,0,0,6286,0,0,0,6320,0,0,6322,6332,0,0,0,0,0,0,0,0,6334,0,0,0,0,0,0,0,\n6335,0,0,6337,0,6338,0,6339,6340,0,0,6356,6357,6369,0,0,0,6370,6371,6372,0,6373,\n0,0,0,0,0,6376,0,0,0,0,0,6382,6383,6384,0,0,0,0,6386,0,6389,6397,6400,6411,0,\n6414,0,0,0,0,0,0,0,6415,6416,0,0,0,0,0,0,6417,0,0,0,0,6418,0,0,0,0,0,0,0,6420,0,\n6421,6423,6425,0,6429,6430,0,6433,6438,0,0,0,0,0,0,0,0,0,0,6439,6440,0,0,6441,0,\n0,6444,0,0,0,0,6446,0,0,0,0,6447,6448,0,0,6450,0,0,0,6454,0,0,6455,0,6461,0,0,0,\n0,0,0,6462,0,0,6463,0,6464,0,6465,6467,0,0,0,6468,0,6479,6480,0,0,0,0,0,0,0,6481\n,0,0,6485,6487,0,0,0,0,0,0,6493,0,0,0,0,0,0,0,0,6494,6495,6496,0,0,0,0,0,6498,0,\n0,0,6507,6508,0,0,0,0,0,0,0,0,0,0,6511,6512,0,0,0,0,6513,0,0,0,6514,0,0,0,0,0,\n6516,0,0,6517,6518,0,0,0,6519,6520,6521,0,6523,0,0,0,0,6524,6528,0,6530,0,0,6532\n,0,6578,0,0,0,6583,0,6584,0,0,0,6587,0,0,0,6590,0,6591,0,0,0,0,0,6592,0,0,0,0,\n6593,6594,0,0,0,0,0,6599,6600,0,0,6601,6602,6604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n6608,0,0,0,0,0,0,0,0,6610,6611,0,6615,0,6616,6618,6620,0,6637,0,0,0,0,6639,0,0,0\n,0,6641,0,6642,0,0,0,6647,0,6660,6663,0,6664,0,6666,6669,0,6675,6676,6677,0,0,0,\n0,0,0,0,0,0,6678,0,0,0,6679,0,6680,0,0,0,0,0,0,0,6693,0,0,0,0,0,0,0,0,0,6704,\n6705,6706,0,0,6711,6713,0,0,0,0,0,6716,0,0,0,6717,0,6719,6724,0,0,0,0,0,0,0,0,\n6725,6726,0,0,0,0,0,6728,6729,6735,0,6737,6742,0,0,6743,6750,0,6751,0,0,6752,\n6753,0,0,0,0,0,0,6754,0,0,0,0,0,6756,0,0,0,0,0,0,6763,0,0,6764,6765,0,0,0,6770,0\n,0,0,6776,6780,0,6781,0,0,0,6783,0,6784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n6785,0,0,0,6792,0,0,0,6793,0,0,6802,0,0,0,0,0,6803,0,0,0,6804,0,0,0,6812,0,0,\n6823,0,6824,6839,0,0,0,0,6852,0,0,6854,0,6856,6857,0,0,0,0,0,0,0,0,0,6867,0,6868\n,6870,6872,0,0,0,6873,6874,0,0,0,0,0,6875,0,0,6877,0,0,0,0,0,0,0,6878,0,0,0,6879\n,0,6880,0,0,0,0,0,0,0,0,0,0,6887,0,6888,6891,6893,0,6895,0,0,0,0,0,0,0,0,6899,0,\n0,0,0,6901,0,0,0,0,6910,0,6911,0,0,6912,0,0,6913,6914,0,0,0,6915,0,0,0,6916,6919\n,0,0,0,0,0,0,6924,0,6925,0,0,0,6926,6927,6928,0,6929,0,6930,0,0,6931,6935,0,6936\n,0,0,0,0,6939,6940,6941,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6942,6948,6949,0,0,0,0,0,0\n,0,6952,6954,6963,6965,6966,0,0,6967,6968,0,0,0,0,0,0,0,0,0,6969,0,0,6970,6979,0\n,0,6980,0,0,6983,0,0,0,0,0,6984,0,0,0,0,0,0,0,6988,6990,6992,0,0,0,0,0,0,0,6995,\n0,0,0,7012,0,0,0,0,0,0,0,0,0,7019,0,0,0,0,0,0,0,0,7021,0,0,7022,7023,7028,0,7030\n,7033,0,0,0,0,0,0,7038,0,0,0,0,0,0,0,0,0,0,7039,0,0,0,0,0,7046,0,7047,0,0,0,0,0,\n0,0,0,0,0,0,7048,7052,0,0,0,0,0,7054,0,7060,0,0,0,0,7061,0,7065,0,0,0,0,7067,\n7069,0,7070,7071,7072,0,0,7078,0,7080,7081,0,7083,0,0,0,7084,7087,7088,0,0,7090,\n0,7093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7107,0,0,7108,0,0,0,0,0,0,0,0,7110,0,7114,0\n,0,0,0,0,0,0,7115,0,7116,0,0,0,0,0,7117,0,0,7118,0,0,7124,0,7125,0,0,7126,0,0,0,\n0,7128,0,0,0,0,0,7129,0,7130,0,7132,7133,0,0,7134,0,0,7139,0,7148,7150,0,0,0,0,\n7152,0,0,0,7153,7156,7157,0,0,0,0,0,7158,0,0,0,0,0,0,0,0,0,0,7163,7165,7169,0,\n7171,0,0,0,0,0,0,0,0,0,7172,0,7173,7181,0,0,0,0,0,7182,7185,0,0,0,0,7187,0,7201,\n7204,0,0,0,0,0,7206,7207,0,0,0,0,7211,7216,0,7218,0,0,0,0,7226,7228,7230,7232,\n7233,7235,7237,0,0,0,0,7238,7241,0,7242,0,0,7247,0,0,0,7266,0,0,0,0,0,0,0,7289,0\n,0,7290,7291,0,0,7292,0,7297,0,0,0,0,0,0,0,0,0,0,7300,0,7301,0,0,0,0,0,0,0,0,0,0\n,0,0,7302,0,0,0,0,7305,0,0,0,0,7307,0,7308,0,7310,0,7335,0,0,0,0,0,0,0,7337,0,\n7343,7347,0,0,0,0,0,7348,0,7349,7350,7352,7354,0,0,0,0,7357,0,7358,7366,0,7367,\n7368,0,0,7373,0,0,0,7374,0,0,0,0,0,0,0,7376,0,0,0,7377,0,0,0,0,0,7378,0,7379,\n7380,0,0,0,0,0,7383,0,0,7386,0,0,0,0,7398,0,0,0,7399,7400,0,7401,0,0,0,0,0,0,0,\n7402,0,0,0,0,0,7405,0,0,0,0,0,7406,0,0,0,0,0,0,0,0,7421,7427,7429,0,0,0,7435,0,0\n,7436,0,0,0,7437,0,0,0,0,0,0,7438,7443,0,7446,0,7448,0,0,0,0,0,0,0,0,0,0,7456,0,\n0,0,0,0,7457,0,0,7461,0,0,0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7463,7466,7472,\n0,7476,0,0,7490,0,7491,0,0,7493,0,0,0,7498,7499,0,0,7508,0,0,0,0,0,7512,0,0,0,\n7513,7514,7516,0,0,0,0,7518,0,0,7519,7521,7522,0,0,0,7526,0,0,7529,0,0,7531,0,\n7536,0,7538,0,7539,0,0,7541,7542,7546,0,0,0,0,0,7547,0,7548,0,0,0,0,0,7550,0,0,\n7552,7553,0,0,0,0,0,0,0,0,0,0,7554,7563,0,7573,0,0,0,0,0,0,7574,7576,0,7578,7581\n,7583,0,0,0,7584,0,7587,0,0,0,0,0,7589,0,0,0,7594,0,0,7595,0,0,7600,7602,7610,0,\n0,0,0,0,7612,0,7613,7614,0,0,7615,0,0,7616,0,7620,0,7621,7622,0,7623,0,0,0,0,\n7626,0,0,0,0,7627,7629,7631,0,0,7633,0,0,0,0,0,7639,0,7640,7642,0,0,7643,0,0,0,0\n,7644,0,0,0,0,0,0,0,7645,0,0,0,0,0,7661,7662,7663,7665,0,7666,0,7667,0,7684,7688\n,7690,0,7691,0,0,0,0,0,0,7692,0,0,7700,0,7707,0,7708,0,7709,0,7721,0,0,0,7722,0,\n7724,0,0,0,0,0,0,7729,7731,0,7732,0,7733,7735,0,0,0,0,0,0,0,7739,0,0,7741,7745,0\n,7748,0,0,0,7751,0,0,0,7752,0,0,0,0,0,0,0,7753,0,0,7756,0,7757,0,7759,0,7760,0,0\n,0,0,7761,7768,0,0,7769,0,0,7770,0,0,7771,0,0,7772,0,0,7773,0,0,0,0,0,7778,7783,\n0,0,0,0,0,7784,7785,0,7790,0,0,0,0,7792,0,7798,0,0,0,0,0,7799,0,7810,0,0,7813,0,\n7814,0,7816,0,7818,7824,7825,7826,0,7828,7830,0,0,0,7840,0,7842,0,7843,0,0,0,0,\n7844,0,0,0,0,0,0,0,7846,0,0,0,0,0,7856,7857,7858,7862,0,7865,0,0,7866,0,0,7913,0\n,0,0,0,7914,0,0,7915,7917,7918,7919,0,7920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7921,\n7922,0,7924,0,0,7925,0,0,7927,0,7930,7935,0,0,7937,0,0,0,0,0,0,7939,0,7940,0,0,0\n,0,0,7941,0,0,0,0,7945,0,0,0,0,7949,0,0,0,0,0,0,0,0,7950,0,7953,0,0,0,0,0,0,0,\n7968,0,0,0,0,7969,7972,7992,0,7993,0,0,0,0,0,0,0,0,0,0,0,7994,0,0,0,0,8007,8008,\n0,0,0,0,0,0,0,0,0,0,0,0,8010,0,0,0,8012,0,0,0,0,0,0,0,0,8018,0,8028,8029,0,0,\n8030,0,0,8032,8033,0,0,8034,8036,0,0,0,0,0,0,0,0,0,0,8037,0,0,0,8043,8052,8059,\n8060,0,0,8061,0,0,0,8062,0,8063,0,8064,0,8066,8068,0,0,0,8080,8081,0,8089,0,0,0,\n0,0,8092,0,0,0,0,0,0,8093,8110,0,0,0,0,0,0,0,8111,0,0,0,0,0,8112,8115,0,8117,0,0\n,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8120,8121,8122,8128,8129,8130,8131,0,0,8139,0,0,\n8144,0,0,0,0,8145,8146,8153,0,0,0,0,0,0,0,0,8154,0,8157,8160,8162,0,8164,8165,0,\n0,0,0,8166,8167,0,0,8179,0,0,0,8185,0,0,0,8186,0,0,8187,0,0,0,8188,0,0,0,0,0,\n8204,0,0,0,0,8210,0,0,0,0,0,8213,0,8214,0,0,8215,0,0,0,0,0,0,8218,0,0,0,0,0,0,0,\n0,0,8219,0,8221,0,0,8222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8225,0,0,0,8233,0,0,\n8242,0,0,0,0,0,0,0,0,0,0,0,8247,0,8248,8252,0,8256,8257,0,0,8261,0,8264,8265,0,0\n,0,0,8267,0,0,0,8269,0,0,0,0,0,0,0,0,0,8270,0,0,0,8278,0,8279,8283,0,0,8285,8286\n,8289,8292,0,0,0,0,8293,8295,8299,8300,8301,0,0,0,0,0,0,8304,8307,0,0,0,0,0,0,0,\n8321,0,0,0,8322,8323,8325,8326,8327,0,0,8332,8338,0,0,8340,0,0,0,0,0,8350,0,0,\n8351,0,8354,8355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8360,8372,0,0,0,0,0,0,0,0,8377,0,0,\n0,0,8380,0,0,0,8383,0,8384,0,0,0,0,8386,8392,0,0,8394,0,0,0,0,0,0,0,8396,8397,0,\n8398,0,8399,0,0,0,0,0,8400,0,8401,8410,8411,0,8412,8413,8422,0,0,0,0,8423,0,0,0,\n0,8424,0,0,8425,0,0,0,0,0,0,0,8441,8442,0,0,0,0,0,0,8443,0,0,8444,0,8447,0,0,0,0\n,8451,0,8458,0,8462,0,0,8468,0,8469,0,0,0,8470,0,8473,8479,8480,0,0,0,0,8481,\n8483,0,0,0,0,0,0,0,0,0,8484,0,0,8490,0,0,0,0,0,0,8491,8493,8494,0,8528,0,0,0,0,0\n,0,0,8530,0,0,0,0,0,0,0,0,8534,8538,8540,0,0,8541,0,0,8545,0,8557,0,0,8569,8570,\n0,0,8571,8574,8575,8579,0,8583,0,0,0,0,8591,0,0,0,0,0,0,0,0,8606,0,8607,0,0,0,0,\n0,0,0,0,0,8608,0,0,8609,0,0,0,8610,0,0,0,8611,0,0,8613,8617,8621,0,0,8622,0,8623\n,0,8624,8625,0,0,0,0,0,0,0,0,0,8637,8638,8639,8650,0,0,0,0,8652,8654,8655,0,0,0,\n0,0,0,0,0,0,0,8656,0,0,0,0,0,8657,0,0,0,0,0,0,0,0,0,8658,0,0,8659,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,8660,0,0,0,0,0,0,8661,8663,8664,0,0,0,0,8665,0,8669,0,\n0,0,0,0,0,0,8671,8674,0,8684,0,8686,0,0,0,8689,0,0,0,8690,0,8706,0,0,0,0,0,0,0,0\n,0,0,0,8710,0,8711,8713,8714,8724,8727,8728,8733,8736,0,8737,8739,0,0,0,0,8742,\n8743,8745,8754,0,0,0,0,8756,0,0,0,0,0,0,8757,8760,0,0,0,0,0,8762,8763,8764,0,\n8766,8769,8770,8773,0,8774,0,8779,0,0,0,0,8780,0,0,8781,0,0,8783,0,0,0,0,0,0,0,0\n,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8784,0,0,0,0,0,0,0,0,8785,0,0,0,0,8786,0,0,0,0,8788\n,8790,0,0,0,8803,0,8813,8814,0,0,0,0,0,8815,8816,0,0,0,0,8818,0,0,0,0,8822,8828,\n8829,0,8831,0,0,0,0,8833,0,0,0,8834,0,0,0,8835,0,8836,0,0,0,8837,0,0,0,0,0,0,\n8838,8839,0,0,0,0,0,0,0,0,0,0,0,8840,0,0,0,8841,0,8842,0,0,0,8846,0,0,0,0,0,0,0,\n8847,0,8848,0,0,8864,0,0,8866,0,0,8870,8872,0,0,8873,8874,0,0,0,0,0,0,8875,0,\n8876,0,0,0,0,8896,8900,0,0,0,0,8901,0,0,0,0,0,8904,0,8907,0,0,0,0,8911,8912,8913\n,0,0,0,8914,0,8915,0,0,0,0,0,0,0,0,0,0,0,0,8916,0,0,0,8929,0,0,0,0,0,0,0,0,0,0,\n8930,0,8932,0,8943,0,0,0,8945,8947,0,0,0,0,8949,0,8950,0,8954,8957,0,0,8970,0,0,\n0,0,8971,0,8996,0,0,0,0,8997,9000,0,0,0,0,9001,9002,0,9004,9009,9024,0,0,0,0,0,0\n,0,0,0,0,0,0,9027,9082,0,0,9083,9089,0,0,0,0,0,0,9090,0,0,0,9092,0,0,9093,0,9095\n,0,0,9096,9097,9101,9102,0,0,0,0,0,0,0,0,9112,0,0,0,0,0,0,9114,0,0,9120,0,9121,\n9122,0,0,0,9123,9124,0,0,9125,0,0,9126,0,9127,0,0,9129,9131,0,0,0,9132,0,0,9136,\n0,9144,0,0,9148,0,0,0,0,0,0,9149,0,9152,9163,0,0,9165,0,0,0,0,0,0,0,0,0,0,0,0,0,\n9166,0,9169,0,0,0,0,0,0,0,9170,0,0,0,0,9172,0,9174,9175,9176,0,9177,0,0,0,0,0,0,\n0,0,9186,0,9187,0,0,0,9188,9189,0,0,9190,0,0,0,0,9191,0,0,0,9193,0,0,0,0,9197,\n9198,0,0,0,9208,9211,0,0,0,0,9216,9217,0,9220,0,0,0,0,9221,9222,9223,0,9224,9225\n,0,0,9227,0,9228,9229,0,0,9230,0,9232,0,9233,0,0,0,0,0,9234,9235,0,0,9237,0,0,0,\n0,0,0,0,0,9238,9240,0,0,9241,0,0,0,0,9244,0,0,0,0,9247,0,0,0,0,0,0,0,0,0,0,9248,\n0,0,0,9249,0,0,0,0,0,9250,0,0,0,0,9251,0,0,9252,9255,0,0,0,9256,0,0,0,0,0,0,0,\n9257,0,0,9258,0,0,0,0,0,0,9259,0,0,0,0,0,9262,9263,0,0,9265,9266,0,0,0,0,0,0,0,0\n,9268,9271,0,0,0,0,0,0,0,0,0,9273,0,0,0,9276,9277,9279,0,0,0,0,0,0,0,9280,0,0,\n9293,0,0,0,0,0,9297,9301,0,0,0,0,0,0,0,0,0,0,0,9308,9309,9313,9321,9322,0,9326,\n9327,0,0,9477,0,9479,0,0,0,0,9482,0,0,0,9483,0,9484,0,0,0,0,0,0,0,0,0,9485,0,0,\n9486,0,0,0,9489,0,0,0,0,9490,9491,0,0,0,0,9493,0,9495,9496,0,0,0,0,0,0,0,0,9500,\n0,9502,0,0,0,0,0,9504,9507,0,9509,0,9511,0,0,9513,0,0,0,0,0,0,0,0,9515,0,0,0,0,0\n,0,9516,9517,0,0,0,0,9532,0,0,9533,0,0,9538,0,9539,9540,0,0,0,0,9541,0,0,0,9542,\n0,0,0,0,0,0,0,0,9544,9545,0,9546,0,0,0,0,0,0,9547,9548,0,0,0,9550,0,9557,0,9558,\n0,9561,0,9563,9570,0,9572,9574,9575,0,0,0,9577,9592,0,0,9596,0,0,0,9598,0,9600,0\n,9601,0,0,0,0,0,0,9608,0,9638,9639,0,0,0,0,0,0,0,9641,0,0,9643,9644,9645,9646,0,\n0,0,9648,0,0,0,0,0,0,0,9650,9654,0,0,0,0,0,0,0,0,9655,0,0,0,0,0,9656,0,9657,0,0,\n0,0,9658,0,0,9659,0,0,9664,0,0,9665,0,9667,9669,0,0,0,0,0,0,0,0,0,0,0,0,9671,0,\n9673,9681,0,0,0,0,9682,9683,9684,0,0,0,0,9686,9698,0,0,9700,9701,9702,0,9703,\n9717,0,0,0,0,9718,0,9726,0,0,0,0,9727,0,0,0,9728,0,9742,0,9744,0,0,0,9750,0,9754\n,9755,0,0,0,0,0,9756,0,9757,9768,0,9769,0,0,0,9770,9771,0,9773,0,9774,0,9775,0,0\n,0,9776,9777,9784,0,0,0,9786,0,9789,0,0,0,0,9793,9794,0,0,0,9808,0,0,0,0,0,9811,\n0,0,0,0,0,0,0,0,0,0,0,0,9812,0,9820,0,9823,0,9828,0,0,0,0,9830,0,0,9833,9836,0,0\n,0,9840,0,0,0,9841,0,0,9842,0,9845,0,0,0,9847,9848,0,0,9855,0,0,0,0,0,0,9856,\n9863,9865,0,0,0,0,0,0,0,0,9866,9867,9868,9873,9875,0,0,0,0,0,0,9880,0,9886,0,0,0\n,9887,0,0,9891,0,0,0,0,0,0,0,9906,9907,9908,0,0,0,9909,0,0,0,0,0,0,9910,0,0,0,0,\n9913,0,0,0,0,9914,0,0,0,0,0,9922,0,0,0,0,9923,9925,0,0,0,0,0,0,9930,0,0,0,9931,0\n,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9932,0,9939,0,0,9940,9962,9966,0,9969,9970,0,0,9974\n,0,9979,9981,9982,0,0,0,9985,0,0,0,0,0,0,9987,0,0,0,0,0,0,0,9988,9993,0,0,9994,0\n,0,0,9997,0,10004,0,0,0,0,0,10007,10019,10020,10022,0,0,0,10031,0,0,0,0,0,10032,\n0,0,10034,0,10036,0,0,0,0,10038,0,10039,10040,10041,10042,0,0,0,0,0,10043,0,0,0,\n0,0,10045,10054,0,0,0,0,10055,0,0,10057,10058,0,0,0,0,0,0,10059,0,0,0,0,0,0,0,\n10060,0,0,0,0,0,0,0,10063,0,10066,0,0,0,10070,0,10072,0,0,10076,10077,0,0,10084,\n0,10087,10090,10091,0,0,0,10094,10097,0,0,0,0,0,0,10098,0,0,0,0,0,0,10103,0,\n10104,0,10108,0,0,0,0,0,0,0,0,10120,0,0,0,10122,0,0,10125,0,0,0,0,10127,10128,0,\n0,10134,0,10135,10136,0,10137,0,0,10147,0,10149,10150,0,0,10156,0,10158,10159,\n10160,10168,0,0,10171,0,10173,0,0,0,10176,0,0,0,0,10177,0,0,0,0,10178,0,0,0,0,\n10194,0,10202,0,0,10203,10204,0,10205,10206,0,10207,0,0,0,0,10209,0,0,0,0,0,0,0,\n10213,0,0,0,0,0,0,10217,0,10229,0,10230,10231,0,0,10232,0,0,10237,10238,10244,0,\n0,0,0,0,10250,0,10252,0,0,0,0,0,0,10255,0,0,10257,0,0,0,0,0,0,10258,0,10259,0,0,\n0,0,0,0,0,0,10260,0,0,0,0,0,0,0,10284,10288,10289,0,0,0,10290,0,10296,0,0,0,0,0,\n10297,0,0,0,0,0,0,10298,0,0,0,0,10299,10303,0,0,0,0,0,10306,0,0,0,10307,0,10308,\n0,0,0,0,10311,0,0,0,0,0,0,0,10315,10317,0,0,0,10318,10319,0,10321,0,10326,0,\n10328,0,0,0,0,10329,0,0,10331,0,10332,0,0,0,0,0,0,10334,0,0,10335,10338,0,0,0,0,\n0,10339,10349,0,0,0,0,0,0,10351,0,10353,0,0,0,0,0,0,10362,0,10368,0,10369,0,0,0,\n10372,10373,0,0,0,0,0,10374,0,0,0,10375,0,10376,0,0,10386,10388,10390,0,0,0,0,0,\n0,0,10391,0,0,10392,10394,0,0,10396,0,10397,0,10403,0,0,0,0,0,0,0,0,10404,0,\n10405,10410,0,0,10411,0,10412,0,0,0,0,0,0,0,10421,10422,10423,0,0,0,0,0,0,0,0,0,\n10425,0,0,10427,0,0,10430,0,0,0,0,0,10432,0,10433,10434,0,0,0,0,10436,10437,0,\n10438,0,10439,0,10444,10446,0,0,0,0,0,10448,0,0,0,0,0,10449,0,0,0,0,0,0,0,10451,\n0,10453,0,0,0,10454,10457,0,0,10459,0,10469,0,0,0,0,0,10472,10481,0,0,0,0,0,\n10482,10483,0,10492,0,0,0,0,0,0,0,0,0,0,10499,0,0,0,10502,0,0,10510,0,10521,\n10524,0,0,10525,10526,10528,0,0,0,0,0,0,0,0,10530,0,0,0,0,10533,0,10534,0,0,0,0,\n0,0,0,0,0,0,10535,10536,0,0,10544,0,10553,10556,0,10557,10559,0,0,0,0,0,10562,\n10563,10564,0,10565,0,0,0,10566,0,10567,0,0,0,0,10575,0,0,10576,0,10578,0,0,0,0,\n0,0,0,0,0,0,10585,10586,10587,10589,0,10590,0,0,10594,0,0,0,0,0,10598,0,0,10601,\n0,0,0,10602,0,10603,0,10604,0,10605,0,0,10607,0,10626,0,10627,0,0,0,0,0,10629,\n10630,10631,0,0,0,10646,0,0,0,10647,0,10650,0,10651,0,0,0,10652,10653,10655,0,\n10658,0,0,10659,0,10667,0,0,0,0,10669,0,0,0,0,0,0,0,0,0,10670,0,0,0,10671,0,0,0,\n0,10672,10673,0,10674,0,0,0,10676,0,0,0,0,0,0,10678,0,10682,0,0,10692,0,10697,0,\n0,0,0,10698,0,0,0,10700,0,0,0,0,0,10703,0,10704,0,0,0,0,0,0,0,10705,0,10715,\n10718,10720,0,0,10722,0,0,0,0,0,0,0,0,10723,0,0,0,0,10726,0,0,0,0,0,10727,10730,\n10743,0,0,0,0,0,0,10744,0,0,10745,0,0,0,0,0,0,10748,0,0,0,0,10750,0,0,10752,\n10753,0,0,0,10756,0,0,0,0,0,0,10758,0,0,0,10759,0,10769,0,0,10772,0,0,0,0,0,0,\n10773,0,0,0,10777,0,0,10779,0,0,0,0,0,0,0,0,10780,10784,0,0,0,10789,0,0,0,10791,\n0,0,0,0,0,0,0,0,0,10795,0,0,10796,0,10808,0,10809,0,0,0,10810,0,0,0,10812,0,0,\n10814,0,0,0,0,0,0,0,0,0,10815,0,0,0,0,10816,10817,0,0,0,0,10819,0,10820,0,0,0,0,\n10821,10822,10823,0,10826,10849,0,0,0,0,10850,0,0,10852,0,10853,0,0,10856,0,0,\n10857,10858,10859,10860,0,0,0,0,0,0,10863,0,10866,10867,10872,10890,0,0,10891,\n10892,0,0,0,0,0,10893,0,0,0,10896,10899,0,0,10900,10902,0,0,0,0,0,10903,0,0,0,0,\n0,0,0,0,0,0,0,0,10905,0,10906,0,0,0,0,10908,10911,0,10912,0,0,10916,0,0,0,0,0,\n10917,0,10918,0,0,0,10923,0,0,0,0,0,10924,0,0,10928,10929,0,0,10930,0,0,0,10932,\n0,0,0,0,10939,0,0,10945,0,0,0,10947,0,0,10948,0,0,0,0,0,0,0,0,0,0,0,0,10958,0,\n10960,10962,0,0,10964,0,0,0,10966,0,0,0,0,0,0,0,0,0,0,10967,0,0,0,10968,0,0,0,\n10973,0,0,0,0,0,10975,0,0,0,10976,10978,0,0,10982,10984,10987,0,0,10988,0,10989,\n0,0,10991,0,0,0,0,10992,0,0,0,10993,0,10995,0,0,0,10996,10997,0,0,0,10998,0,\n10999,0,11001,0,0,0,0,0,0,11010,11012,0,11013,11016,11017,0,0,11019,11020,11021,\n0,0,0,0,0,0,0,0,0,0,0,0,11022,0,0,11023,11029,0,0,0,0,11031,0,0,0,11034,0,0,0,0,\n11055,0,0,0,0,0,11056,11060,0,0,0,0,0,0,11061,0,0,11064,11065,0,11066,0,11069,0,\n11085,0,0,0,0,0,11086,0,0,0,11088,0,0,0,11094,0,0,0,11095,11096,0,0,0,0,0,0,\n11097,11098,0,0,0,0,0,0,11099,0,0,11102,11108,0,0,0,11109,0,11114,11119,0,11131,\n0,0,0,11142,0,0,11143,0,11146,0,11147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11148,0,\n11149,11152,11153,11154,0,11156,0,11157,0,0,0,11158,0,0,11159,11160,0,0,0,0,0,0,\n0,0,0,0,0,0,11163,0,0,11164,11166,0,0,0,11172,11174,0,0,0,11176,0,0,0,0,0,11182,\n11183,0,0,0,11184,11187,0,0,11188,11189,0,0,0,0,0,0,11194,0,0,0,0,0,0,0,11200,\n11202,0,0,0,0,0,0,11203,0,11204,0,0,0,0,0,11205,0,0,0,11206,0,11207,0,0,11209,0,\n11211,0,11214,0,0,11231,0,0,0,11293,11295,0,0,11296,11297,11302,0,0,0,11307,0,0,\n0,0,11309,11310,0,11311,0,0,0,11313,0,11314,0,0,0,0,11334,0,11338,0,0,0,11339,0,\n0,0,0,0,11340,0,11341,11342,0,11344,0,11345,0,0,0,11348,11349,0,0,11350,0,0,0,\n11355,0,0,0,0,0,0,11356,0,11357,11370,0,0,11371,0,11374,11376,0,0,0,11377,0,0,\n11378,11383,0,11386,11399,0,11400,11406,0,0,0,11408,0,0,11409,11412,0,0,0,0,\n11417,0,0,0,11418,0,11421,0,11426,11429,0,0,0,0,0,11430,0,11437,0,11438,0,0,0,0,\n0,11440,11453,0,0,0,0,0,0,11454,0,0,0,0,11455,0,0,11456,11460,11461,11463,0,\n11469,0,11473,0,0,0,0,11474,0,0,0,11475,0,11476,11477,11480,0,0,0,0,11481,0,0,\n11484,0,0,11487,0,0,0,0,0,0,0,0,0,0,11497,0,0,11502,0,11509,0,0,11510,11511,\n11513,0,0,0,0,0,0,0,0,0,0,11515,0,0,0,0,11516,0,11520,11521,0,0,0,0,0,0,0,0,0,0,\n0,11529,11530,11531,11534,0,0,11543,0,0,0,0,0,11547,0,11548,0,0,0,0,0,11552,\n11556,0,11557,0,0,11559,0,11560,0,0,0,0,0,0,11561,0,0,11563,11564,0,11565,0,0,0,\n0,11567,0,0,0,11569,0,11574,0,11575,0,0,0,11577,0,11578,0,0,0,11580,11581,0,0,0,\n11582,11584,0,0,0,0,0,0,0,11587,0,11588,11591,0,11595,0,0,0,0,0,0,0,0,11596,0,\n11597,0,0,0,0,11598,11601,0,0,0,11602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11603,\n11604,0,11606,0,0,11608,0,0,0,0,11610,0,0,11611,0,0,0,0,11613,0,11622,0,0,0,\n11623,0,0,0,0,11625,0,0,11626,11627,11628,11630,0,0,0,0,0,0,11639,0,0,11646,0,\n11648,11649,0,11650,0,0,0,0,0,0,0,0,0,11651,0,0,11652,11653,11656,0,0,11677,\n11679,0,0,0,0,11680,0,0,11681,0,11685,0,0,0,0,0,0,0,0,11688,0,0,0,11716,0,11719,\n0,0,0,0,0,11721,0,0,11724,11743,0,0,0,0,0,0,0,0,11745,11748,11750,0,0,0,0,0,\n11751,0,0,0,11752,11754,0,11755,0,0,0,0,0,0,0,11759,0,0,0,0,0,0,11760,0,0,0,\n11761,0,0,0,0,0,0,11766,11767,0,11772,11773,0,11774,0,0,11775,0,11777,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,11778,11780,0,0,0,0,0,0,0,11783,0,11784,0,0,0,11785,\n0,0,0,11786,0,0,0,0,11788,0,0,11789,11791,11792,0,0,0,0,11795,11834,11835,11836,\n0,0,11837,0,0,0,11838,0,0,11846,11851,0,11852,0,11869,0,0,0,11871,0,0,0,11872,\n11874,0,0,0,0,0,0,11875,0,11876,11877,0,0,0,0,0,0,0,0,0,0,11883,0,0,0,0,0,0,0,\n11884,0,11885,0,11886,0,0,11887,0,11894,11895,11897,11909,11910,0,11912,11918,0,\n0,11920,0,11922,11924,11927,11928,0,0,0,0,11929,0,11934,0,0,0,0,0,11941,11943,\n11944,0,11945,0,0,0,0,11948,11949,0,0,0,0,11953,0,11954,0,11955,0,11956,0,0,0,0,\n0,11957,0,0,11959,0,0,0,0,0,0,0,0,11961,0,0,0,0,0,11978,0,0,0,11979,11980,11986,\n11987,0,11992,0,0,0,0,0,11993,0,0,0,11994,0,11999,12004,12005,12006,0,0,0,0,0,\n12011,0,0,12012,12014,0,0,12015,0,0,12019,12028,0,0,12029,0,0,12032,12033,0,0,0,\n0,12034,0,12041,12043,0,0,12044,0,0,0,0,0,0,0,12046,0,0,0,0,0,0,0,12054,12055,0,\n12056,0,0,0,12060,12064,0,0,0,0,0,12065,12067,12068,0,0,0,0,0,0,0,0,12074,0,0,0,\n12075,12076,0,0,0,12079,0,12081,12086,12087,0,0,12088,0,0,0,0,12089,0,12092,0,0,\n0,0,12097,0,0,0,0,0,0,0,0,12098,0,0,0,0,0,0,0,0,0,0,0,0,0,12102,12103,12104,\n12111,0,0,12114,12116,0,0,0,12118,0,0,0,12119,12120,12128,0,0,0,0,12130,0,0,0,0,\n0,0,12131,0,0,0,12132,12134,0,0,0,0,12137,0,12139,0,12141,0,0,12142,0,0,0,12144,\n0,0,0,0,0,12145,0,12148,0,12153,0,0,0,0,12154,12171,12173,0,0,0,12175,0,0,0,0,\n12178,0,0,0,0,0,0,0,12183,0,0,0,0,0,0,0,0,12184,0,0,0,12186,0,0,0,0,0,12187,\n12188,0,0,12189,0,12196,0,12197,0,0,12198,0,12201,0,0,0,0,12203,0,12209,0,0,0,0,\n12210,12211,12212,12213,0,12217,12218,0,0,0,0,0,0,0,0,0,12222,0,0,0,0,0,0,0,\n12223,0,0,12229,0,0,0,0,12233,0,0,0,0,12234,0,0,12236,12242,0,0,0,12243,0,0,0,\n12244,12253,0,12254,12256,0,12257,0,0,12275,0,0,0,0,0,12277,0,0,0,0,0,12278,0,\n12289,0,0,12290,0,12292,12293,0,0,12294,0,12295,0,0,12296,0,12297,0,12298,0,0,0,\n0,12301,0,0,0,0,0,0,0,0,0,0,0,0,0,12309,0,12338,12340,0,0,0,0,12341,0,0,0,0,0,0,\n0,0,12342,12343,0,12344,0,0,0,0,0,0,0,0,0,12345,0,0,0,0,0,0,0,0,12346,0,0,0,0,\n12348,0,0,0,0,0,0,0,0,0,0,0,0,12350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12351,0,12355,\n12356,12357,0,0,12367,12370,12371,0,0,0,0,0,12372,12376,0,0,0,0,0,0,0,0,12379,0,\n12382,0,12383,0,0,12384,0,0,0,0,12393,0,0,12394,0,0,0,0,12398,12403,0,0,12404,0,\n0,0,0,0,0,0,0,0,0,0,0,0,12410,0,0,0,12411,0,0,0,12412,0,0,0,0,12420,0,12421,0,0,\n0,0,0,12423,0,12425,12429,0,0,0,12431,12432,0,0,0,0,0,0,0,0,0,0,0,0,12434,0,0,0,\n0,0,12435,12436,0,0,0,0,0,0,0,0,12437,0,0,0,0,0,12438,0,0,0,0,0,0,0,0,12445,0,0,\n0,12450,12451,0,0,0,0,0,0,0,0,12452,12475,0,0,12493,12494,0,0,0,12495,0,0,0,0,\n12496,12502,12509,0,0,0,0,12510,0,12512,12513,0,0,0,0,12514,0,0,0,12515,0,12520,\n0,0,0,12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12527,0,0,0,12528,0,0,0,12529,0,0,0,\n0,0,12530,0,12535,0,0,12536,0,12538,0,0,0,0,0,0,0,0,0,0,0,0,12540,0,12548,0,0,0,\n0,0,12550,0,0,0,12551,12552,0,0,0,12554,0,0,0,0,0,0,0,0,12555,0,0,12562,0,12565,\n0,12566,0,0,0,0,0,0,0,0,0,0,0,0,12569,0,0,0,12571,12574,0,0,0,0,0,0,0,12577,0,0,\n0,0,0,0,0,12578,12579,12603,0,12608,0,0,12611,0,12612,0,12615,0,12625,0,0,0,0,\n12627,12646,0,12648,0,0,12657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12670,0,0,12671,0,\n12673,12677,0,0,0,0,0,0,0,0,0,0,0,12679,0,12681,0,12682,12693,0,12694,0,12697,0,\n12701,0,0,0,12703,12704,0,0,0,0,12707,12737,0,0,12739,0,0,12740,0,0,12742,12743,\n0,0,0,0,0,0,0,0,0,12745,0,12746,12747,0,12748,0,0,12759,12767,0,0,0,0,12773,0,\n12774,12778,0,0,0,0,0,0,0,12779,0,0,0,0,0,12780,12793,0,12824,0,12825,0,12836,0,\n0,0,0,12839,0,12842,0,0,0,0,0,0,0,0,0,0,0,0,12843,12845,0,12846,0,0,0,0,12847,0,\n0,12850,12852,12853,0,0,0,12854,0,0,0,12855,0,12856,0,12858,0,0,12859,0,12862,0,\n12863,0,0,12866,0,12869,12872,12873,0,0,0,0,0,0,0,0,0,12875,0,12877,0,0,12878,0,\n0,0,0,0,0,0,0,0,12884,12885,12888,0,12889,0,0,0,0,12893,0,0,0,12895,12896,12898,\n0,0,0,0,0,0,0,12902,0,12909,12910,0,12926,0,12928,0,0,0,12929,0,12930,0,0,0,0,\n12931,0,12932,12933,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12934,0,12942,0,0,0,0,12944,\n0,0,0,0,0,0,0,0,12946,0,0,12948,0,0,12949,0,0,0,0,12950,0,0,0,0,12951,0,12952,0,\n12953,0,0,0,12954,12958,12959,0,0,0,0,0,12960,12964,0,0,0,0,0,12966,0,0,0,0,0,0,\n0,0,12970,0,12971,0,0,0,0,0,0,12972,0,0,12982,0,0,0,12984,12985,0,12986,12996,\n12997,13001,13002,0,0,0,0,13004,0,0,13005,0,0,13007,13009,0,13017,0,0,0,13020,0,\n13021,0,0,0,0,0,0,0,0,0,0,13022,0,0,0,0,0,0,0,0,13024,13027,0,0,0,0,0,13028,0,0,\n13029,0,0,0,0,0,0,0,13032,0,13037,0,0,0,0,0,0,13040,0,0,13041,0,0,0,13043,13044,\n13046,0,0,0,0,13047,0,0,0,0,0,0,0,13049,13054,0,13056,0,0,13060,13061,0,0,0,0,0,\n13067,0,0,13068,0,13071,0,0,0,0,0,13077,13078,0,0,0,0,0,13079,13080,13081,0,\n13082,0,0,0,13085,0,0,0,0,0,0,0,13086,0,13087,13088,0,0,0,0,0,13094,0,13099,0,\n13100,0,0,0,13101,0,13125,13126,13128,13129,0,0,13130,0,13131,0,0,0,0,0,0,13134,\n0,0,0,0,0,0,0,0,0,0,0,13150,0,13168,0,0,0,0,0,0,0,0,0,13169,0,0,13170,0,0,0,0,\n13174,0,0,0,13176,0,0,0,0,0,13177,0,13178,13183,13187,0,0,0,13189,0,0,13190,0,0,\n13191,0,0,13206,0,0,0,13207,0,0,0,0,0,0,0,0,0,0,13212,0,0,13219,13232,0,0,0,\n13241,0,13249,13253,0,0,0,0,0,13255,13259,0,13260,13261,0,13262,0,13272,0,0,0,0,\n13276,0,0,0,0,13277,13299,0,0,13301,13302,0,0,13303,0,0,13305,0,13310,0,0,0,\n13311,0,0,0,0,13325,0,13328,0,0,0,13329,0,0,0,0,0,0,13330,0,0,13331,0,13335,0,0,\n13342,0,0,0,0,0,13343,0,13354,0,13362,0,13366,13367,13369,0,0,13371,13372,0,\n13373,13374,0,13376,0,13380,13381,13386,0,13387,13388,0,13389,13391,13395,0,0,0,\n0,0,13401,13409,0,13410,0,0,0,0,13420,0,0,0,0,0,13422,0,0,0,0,13423,0,0,0,0,\n13425,0,0,0,0,0,13427,0,0,0,13428,0,0,13430,13438,0,13439,0,13445,0,13448,13449,\n0,0,0,0,0,0,13451,0,13457,0,0,0,0,13458,13459,0,13460,0,0,0,0,13464,13465,13466,\n13470,0,13471,13472,13474,13475,0,13476,0,0,13478,13479,0,13481,0,0,0,0,13487,0,\n13490,0,13493,0,0,13494,0,0,13495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13496,13497,0,\n13500,0,0,13516,13522,0,0,13525,13528,0,0,0,13530,13535,0,13537,13539,0,13540,0,\n13543,0,13544,0,0,0,0,0,0,13545,0,0,0,0,0,0,13547,0,0,0,13549,13555,0,0,0,13556,\n13557,0,0,0,0,0,0,0,13558,0,13563,0,0,0,0,13564,0,0,0,0,0,0,0,0,13566,0,0,0,0,0,\n0,13569,0,0,13571,0,0,0,0,13573,0,0,0,0,0,0,13578,0,0,0,0,0,0,0,0,0,0,13581,0,\n13586,0,13595,0,13600,0,0,0,0,0,0,0,0,13601,13603,0,13604,13605,13606,13607,0,0,\n13617,13618,0,0,0,0,0,0,0,13623,0,13625,13627,0,0,0,0,0,0,0,0,13629,0,0,0,13634,\n0,0,0,13638,0,0,0,0,0,0,0,0,13654,0,0,0,0,0,0,0,0,0,0,13656,0,13659,0,0,13660,0,\n0,13662,0,0,0,13663,0,13664,0,0,0,0,0,13668,0,13669,13671,0,0,13672,0,0,0,0,0,0,\n13675,13685,0,13686,0,0,0,13687,0,0,0,13692,13694,13697,0,0,0,13702,0,0,0,0,0,\n13705,0,0,0,0,13707,0,0,0,13714,0,0,0,0,0,0,0,0,0,13715,0,13716,13717,0,0,13719,\n13724,13730,13731,0,0,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,13734,0,13736,0,0,13737,\n13738,13747,0,13751,0,0,13752,0,0,0,13753,0,13757,0,0,13762,13763,0,13764,13765,\n0,13766,0,0,13767,0,0,0,13768,0,0,0,0,0,0,0,13769,0,0,13772,0,13775,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,13776,13778,13787,0,0,0,13797,0,13798,0,13801,0,13804,\n13806,0,0,0,0,13816,13817,0,0,0,0,0,0,0,0,0,0,0,0,0,13834,0,13836,0,0,13838,0,0,\n13839,0,13840,0,0,0,0,13842,0,0,0,0,0,0,13843,0,0,0,0,0,0,0,0,0,13845,0,0,0,0,0,\n13858,0,0,13860,0,0,13861,0,0,13862,13863,0,13868,0,13869,13870,0,0,0,0,0,0,0,0,\n0,0,13872,0,0,0,0,13873,13878,0,0,0,0,0,0,0,0,0,0,13886,0,13888,13889,13890,0,0,\n13891,13894,0,13897,13899,13900,13904,0,0,13906,0,0,0,13909,0,0,0,13910,0,0,0,\n13911,0,0,0,0,0,13912,13917,0,0,0,0,13918,0,13919,0,0,13920,0,0,0,13921,0,0,\n13922,0,0,0,0,0,0,0,13924,0,13927,0,0,0,0,0,13932,0,13933,0,13934,0,0,13935,0,\n13944,0,0,0,13954,0,0,13955,0,0,0,0,13956,0,13957,0,13967,13969,0,0,0,0,0,0,0,0,\n0,0,0,0,13970,13990,0,13991,13994,0,13995,0,0,0,0,13996,0,0,13999,0,0,0,14018,0,\n14019,0,14021,0,0,0,0,0,0,14041,0,0,0,0,0,0,0,0,14043,0,0,0,0,14046,0,0,0,14048,\n14049,0,0,0,0,0,0,0,0,0,0,14051,0,0,14052,14056,0,14063,0,14064,14066,0,0,14067,\n0,0,0,0,0,0,0,0,0,14068,0,0,0,14072,0,14074,14075,0,14076,14079,14085,14086,\n14087,14093,0,0,0,0,14095,0,0,0,0,0,0,14096,14097,0,0,0,0,0,0,0,14098,0,14102,0,\n0,0,0,0,14103,0,0,0,14104,0,0,14105,0,0,0,14107,14108,0,0,14109,0,0,0,0,0,0,0,0,\n14117,0,0,0,0,14118,0,0,0,0,14119,0,0,14120,0,0,14121,0,14122,14127,0,14128,\n14136,0,0,14138,0,14140,0,0,0,14141,14142,0,0,0,0,14146,0,0,14149,0,14151,0,0,0,\n14152,0,0,14153,0,0,0,0,0,0,0,0,0,14154,0,14156,14157,0,0,14159,0,14161,0,0,0,0,\n14162,0,0,0,0,0,0,14163,0,0,14173,0,0,0,0,0,0,14174,0,0,14176,0,0,14178,0,0,\n14179,14181,0,0,14182,14185,14187,0,14190,0,0,14197,0,0,0,0,0,0,0,0,0,0,0,0,\n14198,0,0,0,0,0,0,14199,14200,0,0,0,14204,0,0,14208,0,0,0,0,0,0,0,0,0,0,0,14231,\n0,0,0,0,0,0,0,0,0,14234,0,0,14235,0,0,0,14240,14241,0,0,0,14246,0,0,0,14247,0,\n14250,0,0,14251,0,0,14254,0,0,14256,0,0,0,14260,0,14261,0,0,0,0,14262,14267,\n14269,0,0,14277,0,0,14278,0,14279,14282,0,0,0,14283,0,0,0,14284,14285,0,0,0,0,\n14286,0,0,0,14288,0,0,0,14289,0,14290,0,14293,14301,14302,14304,14305,0,14307,0,\n14308,14309,0,0,0,0,0,0,0,0,0,0,0,14311,14312,0,0,14317,0,0,0,0,0,0,0,14318,0,0,\n0,0,14320,0,0,0,0,14321,14322,0,0,0,0,0,14326,14329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n14330,14331,0,0,0,0,14332,0,0,0,14333,0,0,14337,14340,0,14341,0,0,14342,0,14345,\n14346,0,0,14347,0,14362,0,0,0,0,0,14364,14365,14371,0,14373,0,0,14374,0,14379,0,\n14400,0,0,0,0,0,14401,0,0,14405,0,14406,0,14408,14409,0,0,0,14417,0,0,14424,0,0,\n0,0,0,0,0,0,0,14430,0,0,0,14431,0,0,14435,0,14440,0,0,0,0,0,0,14442,0,0,14443,0,\n0,0,0,0,14446,0,0,0,0,0,0,0,14454,0,14457,0,14460,0,0,14466,0,0,0,0,0,14467,0,0,\n0,0,0,0,14469,0,14477,0,0,0,0,0,0,14478,14482,0,0,0,14483,0,0,0,14485,14486,0,0,\n0,14487,14488,14489,14492,14493,14494,14495,14496,14497,0,14499,0,14501,0,0,0,0,\n0,0,0,0,0,0,14502,0,14507,14512,14513,14514,0,0,0,0,0,0,0,0,0,0,0,14515,14526,\n14530,0,14537,0,14544,0,14547,0,0,14548,14550,14551,0,0,14552,0,0,0,14553,0,\n14554,0,0,0,0,14556,14564,0,0,14565,14566,0,0,0,0,0,0,14568,0,0,14569,0,0,0,\n14571,14576,0,0,14577,14578,14579,0,0,14580,0,0,0,0,14582,0,0,0,0,0,0,0,0,0,0,0,\n0,14583,0,0,0,0,0,14587,0,14588,0,0,14600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,14601,0,0,14604,14605,14611,0,14613,0,0,0,0,14615,0,0,0,0,0,0,14627,0,14628,0,\n0,0,0,14631,0,14633,14634,0,0,0,0,14635,0,0,0,0,0,0,0,0,14636,0,0,14639,14642,0,\n0,0,0,14644,0,0,0,0,14645,14646,0,14653,0,0,14654,0,14658,0,14661,0,0,0,14665,0,\n0,0,14668,0,0,0,0,0,0,0,0,0,14669,0,0,14670,0,0,0,14680,0,0,14681,0,0,0,0,0,\n14682,14683,0,0,0,0,14686,0,0,0,0,14687,14697,0,0,0,0,14699,14705,14711,0,0,0,0,\n0,0,0,0,0,0,14712,0,0,0,14713,0,0,0,0,14719,0,14720,14721,14726,0,0,0,14728,\n14729,0,0,0,0,14731,0,0,0,0,0,0,0,14733,14736,14737,0,0,14740,14742,0,0,0,14744,\n14753,0,0,0,0,14755,14758,14760,0,0,0,0,0,14761,14762,14765,14771,0,14772,0,\n14773,14774,0,0,14775,0,0,14776,0,0,0,0,14777,0,14779,0,0,14782,0,0,14785,14786,\n14788,0,0,0,0,0,14795,0,0,0,0,0,0,14798,0,14803,14804,14806,0,0,0,14809,0,0,0,0,\n0,0,14810,0,0,0,0,14811,0,14812,0,0,0,0,0,14815,0,0,0,0,0,0,0,0,14816,0,14818,0,\n0,0,0,0,0,14819,0,14820,0,14823,0,0,0,14824,0,0,14826,14827,0,0,0,0,0,0,0,0,0,0,\n0,0,14830,0,0,0,0,0,14833,0,14845,0,0,0,0,0,14846,0,0,14847,14871,0,14873,0,\n14876,0,14877,14878,14880,0,0,0,0,0,14881,0,14882,14894,0,0,0,0,14895,0,14907,0,\n14908,0,0,0,0,0,0,0,14911,0,0,0,0,14920,0,0,14931,0,14932,14934,14935,0,0,14936,\n0,14945,0,0,0,0,0,0,0,14947,0,0,14948,14949,14951,0,0,14952,0,0,0,14964,14973,0,\n0,14990,0,0,0,0,14995,0,0,14998,15001,0,0,15002,15020,0,0,0,0,0,0,15021,0,15022,\n0,0,0,0,15023,0,0,15025,15029,15033,0,0,0,15034,0,0,0,15035,0,0,0,0,0,15043,\n15044,0,0,0,15045,15046,15048,15050,0,15065,0,0,0,0,15066,0,0,15075,15082,15084,\n0,0,15085,15086,0,0,0,0,0,0,0,0,15088,0,0,0,15089,0,0,0,0,15094,0,15096,0,15097,\n0,15100,0,0,15102,0,0,0,0,0,0,0,0,15105,0,0,15106,0,15109,15113,0,0,0,15115,0,\n15118,0,0,0,0,0,0,15119,0,0,15120,0,0,0,0,0,15123,15129,0,0,0,15130,0,15131,0,0,\n15134,0,15135,0,0,0,15137,15138,0,0,0,0,0,0,15139,0,0,0,0,0,15140,0,0,15154,\n15162,0,15169,15170,0,15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15177,0,15178,15179,0,\n0,0,0,0,15183,0,0,0,0,0,0,0,0,0,0,0,0,15185,15187,0,15194,15195,15196,0,0,0,0,0,\n0,0,15204,0,0,0,0,15206,0,0,0,0,0,15207,0,0,0,0,0,0,0,0,0,15213,0,15214,0,0,0,0,\n0,0,0,15232,0,0,0,0,15234,0,15238,15240,0,15248,0,0,0,0,15250,15251,0,0,0,0,0,0,\n0,15252,0,0,0,15255,15262,15266,0,0,0,15267,0,0,0,15277,15279,0,0,0,15280,15281,\n15282,0,0,0,0,0,15285,0,0,0,0,15289,0,0,15291,0,0,0,0,0,0,0,15296,15297,0,0,\n15304,0,0,0,0,15306,0,0,0,0,0,0,15307,15308,0,15309,0,0,15311,0,0,15312,15313,0,\n0,0,0,0,0,0,0,0,0,0,0,15314,15317,0,0,0,15318,15319,0,0,0,0,15320,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,15321,0,0,0,0,0,15324,0,15325,15326,0,15330,0,0,0,0,15334,0,\n15335,0,15341,0,0,15342,0,0,15343,15344,0,0,0,0,15345,0,0,0,0,15347,0,0,15348,\n15349,15350,0,15356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15357,0,15358,0,0,0,0,0,0,0,\n15359,15360,15364,0,15380,0,0,0,0,0,15392,0,0,15393,0,15395,0,0,0,0,0,0,0,0,\n15396,0,0,15397,15398,0,0,0,0,0,0,0,0,0,15399,0,15400,0,0,0,15402,0,15405,15410,\n0,0,0,0,15411,0,0,0,15412,0,15416,0,0,0,0,0,0,0,15428,0,15435,0,0,15438,0,0,0,0,\n15439,0,0,0,15440,0,0,0,15441,15449,15451,0,0,0,0,0,0,0,15452,0,0,15455,0,0,0,\n15456,0,0,15458,0,15460,15461,0,0,0,0,0,15462,15464,0,15465,0,0,15466,0,0,15467,\n0,0,0,0,0,15468,0,0,0,0,15481,0,0,15484,0,15485,15486,0,0,0,15487,0,0,0,0,0,\n15488,0,15492,15498,0,0,0,15499,0,0,0,15500,0,15501,0,0,15512,0,15522,0,0,0,\n15524,0,15525,15526,0,0,15527,0,0,15545,15546,0,15548,15552,0,15553,0,0,0,15554,\n0,15555,0,15557,15565,15573,15577,15578,0,15582,0,15583,0,0,0,0,0,0,0,0,0,0,0,0,\n0,15586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15588,0,0,0,0,0,15589,0,0,0,0,0,0,0,15593,\n15594,0,0,0,0,15595,0,0,0,0,0,0,15596,0,0,0,15597,0,0,0,0,15600,0,0,15601,0,0,0,\n0,15602,15603,0,0,0,0,0,0,15604,0,15609,0,0,15612,0,0,15613,0,0,15615,15617,\n15618,0,0,15620,0,15636,15637,0,0,15649,0,0,0,0,0,0,0,15650,0,0,15651,0,0,0,\n15656,0,15658,0,0,0,15664,0,0,15665,0,0,15668,0,0,0,0,0,15669,0,0,15674,0,0,\n15675,0,0,0,0,15676,0,0,0,0,0,0,0,0,0,0,0,15677,0,0,0,0,15678,0,0,0,0,0,15679,0,\n0,15681,0,15686,0,0,0,0,15687,0,15688,0,0,15690,0,0,0,15697,0,15699,15700,0,0,0,\n0,0,0,0,0,0,15701,0,15702,15703,0,15704,0,15705,0,15707,0,15709,0,15712,15716,0,\n15717,0,15718,15720,0,0,0,0,0,15724,0,0,0,15725,0,15726,0,0,0,15740,0,15745,\n15746,0,0,15747,0,15748,0,0,0,0,0,15749,0,0,0,15752,0,15753,0,0,0,0,0,0,15759,0,\n0,0,15765,0,0,0,0,0,0,0,0,0,15767,0,0,0,15771,0,0,15784,0,0,0,0,15785,15790,\n15791,0,0,15792,0,0,0,15807,0,15811,0,0,0,0,0,0,0,0,0,0,0,0,15818,0,0,0,15819,0,\n0,0,0,15821,0,0,0,0,0,15822,15824,0,0,15827,0,0,15829,15831,0,15832,0,0,15833,0,\n15835,15838,15839,15843,0,0,0,0,0,0,0,0,0,0,0,15844,0,0,0,0,15845,15851,15856,0,\n0,0,0,0,0,0,15858,15860,0,15861,0,0,0,15864,0,0,0,0,15865,0,0,0,0,0,0,15866,0,\n15872,0,0,15876,0,0,0,0,15877,15878,15883,15885,0,0,15888,0,0,0,0,0,15889,15890,\n0,0,0,0,0,0,0,0,15892,0,0,0,0,0,0,0,15893,0,0,15894,0,0,0,15895,0,15896,15897,0,\n15898,15901,15902,0,15911,15915,0,15916,0,15924,15935,0,15937,0,0,0,0,0,15950,0,\n0,0,0,0,0,0,15958,0,0,0,15961,0,0,15966,0,15967,0,0,15977,0,0,15978,0,0,15981,\n15982,15983,0,0,0,0,0,0,0,15986,0,0,0,15990,0,15991,15995,15998,0,15999,0,16000,\n0,0,0,0,16008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16009,16011,0,16013,0,0,0,0,\n0,0,0,0,16014,0,0,16015,16023,16024,16025,0,0,16026,0,16030,0,16032,0,16033,0,0,\n0,0,0,0,16035,16036,16037,0,0,0,0,0,16039,0,0,0,0,16041,0,0,0,0,0,16043,16044,0,\n0,16047,0,0,0,16048,0,0,16049,16050,16052,0,0,0,0,0,16055,0,0,0,0,0,0,0,0,16056,\n0,0,0,0,0,0,0,16058,16060,16061,0,0,16063,0,0,16064,0,0,0,16067,16068,0,0,16069,\n16078,0,0,0,16079,0,0,0,16080,0,16081,0,0,0,16088,0,0,0,0,0,0,0,0,0,0,0,16089,\n16093,0,16097,0,16103,0,16104,16105,0,0,16256,0,0,16259,0,0,0,0,0,0,0,16260,\n16261,0,0,16262,0,0,16263,0,16268,0,0,0,0,0,0,0,16269,0,0,16270,16273,0,16274,0,\n0,0,0,16275,16276,16277,16280,0,0,0,16281,16284,0,0,0,16286,0,16289,0,0,0,0,0,0,\n0,0,0,16290,0,0,0,0,16291,0,0,0,0,0,0,0,16292,0,0,0,0,0,0,0,0,16293,16295,16297,\n0,16302,0,16304,0,16305,0,16306,0,0,0,0,0,0,0,0,0,0,0,0,16307,16308,16312,0,0,0,\n0,0,0,16313,16315,0,16318,0,0,0,16321,0,0,0,0,0,0,0,16326,16333,16336,0,0,0,0,\n16337,16340,0,0,0,0,0,16345,0,0,16346,0,0,0,0,0,0,0,0,0,16347,0,0,16348,0,0,0,0,\n16349,0,0,0,16350,0,16357,0,0,0,0,16359,16360,0,0,0,0,16362,16363,16364,16365,0,\n0,16366,0,0,0,0,16367,16368,0,16369,16374,0,0,0,0,0,0,0,16376,0,0,0,0,16378,\n16379,0,16380,0,0,0,16381,16383,0,0,0,0,0,16390,0,0,0,16399,0,16402,16404,16406,\n16407,0,0,0,16409,16411,0,0,0,0,16412,0,16413,16415,16423,0,0,0,0,0,16424,0,0,0,\n16428,16434,16435,16449,0,16450,16451,0,0,0,16453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n16454,0,0,16456,16458,0,0,16459,0,0,16460,0,0,0,0,16462,0,16463,0,0,16466,0,0,0,\n0,0,16479,0,0,16480,0,16481,16484,0,0,0,0,0,0,0,0,0,0,16485,0,0,0,0,0,0,16489,0,\n0,0,0,0,16491,0,0,16498,0,0,16503,0,16505,0,0,0,0,0,0,0,0,16506,0,0,0,16508,\n16509,0,0,0,0,0,0,0,0,16511,16513,0,0,0,16516,0,16517,0,16519,0,16529,0,0,16531,\n0,0,0,0,0,0,16534,0,0,16541,16542,0,0,0,0,0,0,0,0,0,16543,16547,16548,0,0,0,\n16551,0,16552,0,0,0,16553,0,0,16558,0,0,16562,16565,0,0,0,16570,0,0,0,16573,\n16585,0,0,0,16586,16587,16595,0,16596,0,16598,0,0,0,16600,0,0,0,0,0,0,0,0,0,0,0,\n0,0,16601,0,0,0,0,16603,0,0,0,0,0,0,0,16604,16612,0,0,0,0,16613,0,16618,0,0,0,\n16640,0,0,16641,0,0,0,0,0,0,16645,0,0,0,0,16646,0,0,0,0,0,0,16651,0,0,0,0,16653,\n16654,0,0,0,16655,0,0,16656,16667,0,0,0,0,16671,0,16672,0,0,0,16673,0,0,0,0,0,\n16676,0,16686,0,0,0,0,16689,0,16690,0,16692,0,16693,0,16694,0,16696,0,0,0,16705,\n0,0,0,0,0,0,16707,0,0,0,16709,0,0,0,0,16711,0,16712,16713,0,0,0,16715,0,0,0,0,\n16716,0,0,0,0,0,0,0,0,0,16718,16724,0,0,16726,16727,0,0,0,0,0,0,0,16728,0,16729,\n0,0,16730,0,0,0,0,0,16731,0,0,0,16732,0,0,0,0,16734,16738,0,0,0,0,0,0,0,0,16743,\n0,0,16745,0,0,0,0,0,16749,0,16752,0,0,0,0,16756,0,0,16758,0,16759,0,0,0,0,0,\n16760,0,0,0,0,0,0,0,16762,0,16769,0,16770,0,16772,0,0,0,16777,16780,0,0,0,0,0,0,\n16781,0,0,16782,0,16784,0,0,16785,16787,16792,0,0,16794,0,0,0,16798,0,0,16809,0,\n0,16814,16816,16817,0,16819,0,0,0,0,0,0,0,0,0,0,16820,0,0,16836,16839,0,0,16841,\n16851,16857,0,0,16858,16859,0,0,16860,0,0,0,0,0,0,0,0,16862,0,16863,0,0,0,0,0,0,\n0,16864,0,0,0,0,0,0,0,16876,0,16881,16882,0,16885,16886,0,16887,0,0,0,16889,\n16891,0,0,0,0,0,16894,16895,0,0,0,0,0,0,0,0,0,0,0,16897,0,16898,0,0,0,0,0,16913,\n0,0,16924,16925,16926,0,0,16927,0,0,0,16937,16938,0,0,0,16940,16941,0,0,0,16942,\n16945,0,16946,16949,16950,0,0,0,16952,16955,0,0,0,16965,0,16969,0,0,16975,0,0,\n16976,0,0,0,0,16978,0,0,16981,0,16983,16989,0,0,0,0,16990,0,0,16991,0,0,0,16993,\n0,16994,16996,17000,0,0,0,0,0,17002,17004,0,17006,0,0,17007,0,0,0,0,17008,17013,\n17014,0,0,0,0,0,0,0,0,0,17021,0,17031,0,0,0,0,0,17033,17036,0,17038,0,0,17039,0,\n17045,0,0,17046,17047,0,0,0,0,17048,0,17049,17050,0,17051,17053,0,17054,0,17055,\n0,0,0,0,0,17063,0,0,17064,0,0,0,0,0,0,0,17065,0,0,17068,0,0,0,0,0,17072,0,0,0,0,\n0,0,17073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17074,0,17080,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,17081,17083,17084,0,0,0,17085,0,0,0,0,17092,0,0,0,0,0,0,0,\n0,0,17093,0,17095,17102,0,0,0,0,0,0,17103,0,0,17105,0,17107,0,0,0,0,17114,0,0,0,\n0,0,17115,17125,17127,0,0,17128,0,0,0,17129,17130,0,17131,0,0,0,0,0,17132,17135,\n17145,0,0,0,0,0,0,0,0,17146,0,17147,0,17148,0,0,0,0,0,0,17149,17150,0,17151,\n17153,0,17155,0,0,0,0,17163,17171,0,17174,0,0,0,0,17179,0,0,17182,17185,0,0,0,0,\n0,17186,0,0,17188,0,0,0,0,0,0,0,17189,17191,0,17194,0,0,0,0,0,0,0,0,0,17195,\n17196,17203,17204,0,0,17205,17217,0,0,0,0,0,17218,0,0,0,0,17219,0,17220,0,17221,\n0,0,17230,0,0,0,0,0,17236,0,17238,17239,0,0,0,17241,17244,0,0,17245,0,17248,0,0,\n17251,0,17252,0,0,17264,0,17266,0,0,0,17268,0,0,0,0,17271,17272,0,17273,0,17295,\n0,17302,0,17305,0,0,0,17306,0,0,0,0,0,0,0,17308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n17309,0,17310,17313,0,0,0,0,17314,17315,0,17317,0,0,0,0,17318,0,0,0,0,0,0,0,\n17320,0,0,0,0,0,0,17334,0,17344,17348,0,0,0,17350,17351,0,0,17353,0,0,17354,0,0,\n0,0,0,0,0,0,0,17355,0,0,0,0,0,0,17356,17357,0,0,17359,0,0,0,17371,0,17372,0,0,0,\n17393,0,0,0,0,17394,0,0,0,0,0,17395,0,0,17399,0,0,0,17401,17417,0,17418,0,17419,\n0,0,0,0,0,17422,17423,0,0,0,0,0,17424,0,0,0,0,0,17428,17429,17433,0,0,0,17437,0,\n0,17441,0,0,17442,0,0,17453,0,0,0,0,0,0,0,0,17454,17456,17462,0,0,17466,0,0,\n17468,0,0,17469,0,0,0,0,17470,0,17475,0,0,0,0,0,17479,0,0,0,17483,17484,0,17485,\n0,17486,0,17491,17492,0,0,17493,0,17494,17495,0,0,0,17496,0,0,0,17497,0,0,0,\n17502,0,0,0,0,0,17503,0,17505,0,17507,0,0,0,17512,17513,17514,0,0,17515,0,0,0,\n17519,0,0,0,17522,0,0,17523,0,0,0,0,0,0,0,0,0,17527,0,0,0,17528,0,0,0,17534,0,0,\n0,0,17536,0,0,0,17539,0,17540,17543,17549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17556,\n0,0,17558,0,17559,0,0,17560,0,0,0,17563,0,0,0,0,0,0,17564,0,0,17565,17566,0,\n17567,0,0,0,0,0,0,17569,17570,0,17575,0,0,0,0,0,0,0,0,0,0,0,17581,0,0,0,17582,\n17583,0,17586,0,0,17587,0,0,0,0,0,0,0,17588,0,0,0,0,17596,17597,0,0,17598,17600,\n0,0,0,0,0,0,17601,0,0,0,17604,0,0,17605,0,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,17612,0,0,17618,0,17621,17622,0,0,0,0,17623,0,0,17624,0,0,17630,0,0,\n17631,17633,17634,0,0,0,0,0,0,0,17635,0,0,17636,0,0,17637,0,17638,0,17640,0,0,0,\n0,0,0,0,0,0,0,17641,0,0,0,0,0,0,0,0,0,0,17643,0,0,0,0,17645,0,0,0,0,0,0,0,0,\n17646,17662,0,0,0,0,0,0,0,0,0,17663,17664,0,17665,17666,0,0,0,17669,17671,17673,\n0,17679,0,0,0,0,0,0,0,17684,0,0,0,17686,0,17714,0,0,17720,17722,17726,0,0,17728,\n0,0,17729,0,0,0,17732,0,17733,0,17734,0,0,0,17735,0,0,0,0,17737,0,0,0,0,17739,0,\n0,0,17741,17742,0,0,0,0,17743,17744,17745,0,0,0,17749,0,17750,17751,17752,17754,\n17761,17762,0,17763,0,17766,0,17772,0,0,0,0,0,17775,0,0,0,0,0,0,0,17776,0,0,\n17777,0,0,17778,17779,0,17782,17783,0,0,0,0,0,0,0,0,0,0,17784,0,0,0,0,0,0,0,\n17821,0,0,0,17822,0,0,0,17823,17825,0,0,0,0,0,17826,17831,17832,17833,0,0,17845,\n0,0,0,17846,0,0,0,17848,17850,17854,0,17855,0,0,17859,0,0,0,0,0,0,17860,17861,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17870,17871,0,0,0,0,0,0,17872,0,0,0,17879,0,\n0,0,17881,17883,0,17884,0,17885,0,0,17886,0,0,17887,17891,17953,0,0,0,0,17954,0,\n0,17955,0,17968,0,0,17972,0,0,0,0,0,17974,0,0,0,0,17976,17978,0,0,17983,0,0,0,0,\n18003,0,0,0,0,0,18007,0,0,0,0,0,18009,0,0,0,0,0,0,0,18010,0,0,0,0,0,0,18012,0,0,\n18014,0,0,0,18015,0,0,0,18016,0,18017,0,0,0,18030,0,0,0,0,0,0,0,18031,0,0,18036,\n18037,18038,0,0,18049,18056,0,18057,18058,0,18059,0,0,0,0,0,0,0,0,18062,0,0,0,0,\n18064,0,0,0,0,0,0,0,0,18067,0,0,0,18068,0,0,18075,0,0,18078,18093,18094,0,0,0,0,\n0,0,0,0,18097,0,0,0,0,0,18098,18100,0,0,0,18108,0,18111,0,0,18112,0,18113,0,0,\n18115,18116,0,18118,0,0,0,0,18121,0,0,0,0,18123,0,0,0,0,0,0,0,0,0,18124,0,0,0,0,\n18125,18126,0,18127,0,0,18128,18135,0,0,0,0,0,0,0,0,0,18150,0,0,0,0,0,18151,\n18152,0,0,18156,18164,0,18166,18171,0,0,0,0,0,0,0,0,0,18172,18183,0,18184,0,0,0,\n0,18185,0,18187,0,0,0,0,0,18188,0,0,0,0,0,0,0,0,18189,0,0,18190,0,0,18191,18192,\n0,0,18194,18195,18196,0,0,0,18197,0,18203,0,18204,0,0,0,0,18205,0,0,0,18207,\n18208,0,0,18214,0,0,0,18215,18216,0,0,0,18220,0,0,18222,0,0,0,0,0,18223,0,18225,\n18231,0,18234,0,18235,0,0,0,0,18240,0,0,18241,18242,0,0,0,0,0,18243,18251,0,\n18253,0,18254,0,0,0,18266,0,0,0,0,0,0,18269,18270,18271,18273,18281,0,0,0,0,0,0,\n0,0,0,0,0,0,18282,0,18283,0,18284,0,0,0,0,0,0,18285,0,18287,18289,0,0,18290,0,0,\n0,0,18308,0,0,0,18310,0,0,0,0,0,0,0,0,0,0,0,0,18311,0,18312,18313,0,18315,0,0,\n18316,18320,0,18331,0,18332,0,18336,0,0,0,0,18337,0,18340,0,0,0,0,0,0,0,0,0,\n18341,0,18344,18345,0,18346,0,0,0,0,0,18348,0,18351,0,0,18356,0,0,0,0,0,0,18357,\n0,0,0,0,0,18367,0,0,0,18368,0,18369,0,18370,18371,0,0,0,18437,18444,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,18445,18450,0,0,0,0,18451,0,18452,0,0,0,18453,0,0,0,0,0,18455,0,\n0,0,18456,0,18457,0,18460,0,0,18461,0,0,0,0,0,0,0,0,18466,0,0,18467,0,0,0,0,\n18473,0,0,0,18476,0,18477,0,0,0,18478,18479,18480,0,0,0,18485,0,0,0,18486,0,0,0,\n0,0,0,18488,18490,0,0,0,0,0,0,18491,0,0,0,0,0,18495,0,0,18496,0,0,0,0,0,0,18505,\n0,18521,0,18522,18523,0,0,0,18525,18526,0,0,0,0,0,18527,0,0,0,0,18532,18533,0,\n18534,0,0,0,0,0,0,18535,18537,0,18538,0,0,0,0,0,0,18540,18541,18542,18543,0,\n18546,0,0,0,0,18553,18556,0,0,18558,0,0,18569,18571,0,0,0,18572,0,18574,0,0,0,0,\n18586,0,0,0,0,0,18588,0,0,18589,0,0,0,0,0,0,18590,0,18592,0,0,0,0,18594,0,0,0,\n18596,0,0,18597,18598,0,0,18601,0,0,0,0,18602,0,0,0,18603,18604,0,18605,0,0,0,0,\n18608,0,0,18611,0,0,0,0,0,0,0,0,0,18612,0,18616,0,0,18617,18619,0,0,0,18628,0,0,\n0,18629,0,0,18630,0,0,0,0,0,0,0,18631,0,18632,0,0,18635,18637,0,0,0,0,0,0,18641,\n18643,18648,0,18652,0,0,18653,0,18655,18656,0,0,0,18657,0,0,18666,18674,0,0,0,0,\n18677,18684,18685,0,0,18686,0,0,18690,0,0,0,0,0,0,0,18695,18696,0,0,0,0,0,0,0,0,\n0,0,18697,0,0,18700,0,0,0,0,0,0,18702,0,18708,0,0,18709,0,18710,0,0,18711,0,\n18714,0,0,18718,0,0,0,0,0,0,18719,0,0,18722,0,18726,0,0,0,0,0,0,0,0,0,0,0,0,0,\n18731,0,0,0,0,0,18739,18741,0,0,18742,0,18743,18744,18746,18748,0,18752,18753,0,\n0,18754,18763,0,18765,0,0,0,18766,0,0,0,18769,0,0,0,0,0,18773,18778,18779,18781,\n0,0,18784,18787,0,18788,0,18793,0,0,0,0,0,0,18795,0,0,18800,0,0,0,0,0,18801,\n18804,0,0,0,0,0,0,0,18806,0,0,0,18811,18815,18816,0,0,0,0,18825,0,0,18827,18829,\n0,0,18830,0,0,0,0,18831,0,0,18832,0,0,0,0,18833,0,18840,0,18841,0,18842,0,0,0,0,\n18843,0,18844,0,0,0,0,0,0,18845,18846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n18848,0,0,0,18853,18860,0,0,18862,18866,0,0,18867,18869,0,0,18874,18881,18891,0,\n0,0,0,0,0,0,0,0,0,18892,0,0,0,0,0,0,0,0,18895,0,18896,0,0,0,18900,0,0,0,18901,0,\n18902,18915,18916,0,0,0,0,0,0,0,0,18919,0,0,0,0,0,18920,0,0,0,18921,18929,0,0,0,\n0,18930,0,0,0,0,0,0,18932,0,0,0,0,18934,18942,0,0,0,18951,18957,0,0,0,0,18958,0,\n0,0,0,18959,18960,0,0,18961,0,0,18962,0,0,0,0,18963,18964,0,0,0,18965,0,18967,0,\n0,0,0,0,0,0,0,0,18968,0,18969,0,18970,18973,18976,0,0,0,0,0,0,18977,0,0,0,18981,\n0,0,0,18990,0,18998,0,0,0,0,0,18999,19003,0,0,19005,0,0,0,19006,0,0,0,0,0,0,\n19008,19011,0,0,19018,0,0,19019,0,19024,0,19031,19032,0,19039,0,19041,19050,0,0,\n0,19051,19055,19056,0,19059,19063,19064,0,0,19088,0,0,0,19093,19094,0,0,0,0,\n19095,0,19096,0,0,0,19097,0,0,19098,0,19099,19100,0,0,19103,0,0,0,0,0,0,0,19111,\n0,0,0,0,0,0,19112,0,0,0,19116,19117,0,19121,19122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,19123,19124,0,0,0,0,0,0,0,19125,19126,0,19128,0,0,0,0,0,0,0,0,0,0,\n19129,19130,19131,19132,0,0,19146,0,0,19147,19156,19158,0,0,0,0,0,0,0,0,19182,\n19185,0,0,19187,0,0,0,19193,0,0,0,0,0,19194,0,19197,0,0,0,0,19198,0,0,0,0,0,0,0,\n0,0,0,19202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19203,0,19205,19210,\n0,0,0,19213,0,19218,0,0,0,19223,19229,0,0,19230,0,0,19231,19232,19233,19239,0,0,\n0,0,0,19240,0,19248,19249,0,0,0,0,19254,0,19256,19258,19259,0,0,19261,0,19266,0,\n0,0,19272,0,19278,19281,19282,0,0,0,0,0,0,0,0,0,0,0,0,19283,0,0,19284,0,0,19285,\n19287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19288,19291,0,19292,0,0,0,0,19297,0,19298,0,0,\n0,0,19302,19303,0,0,0,0,19304,19305,0,0,0,0,19314,0,0,19315,0,0,19321,0,0,0,0,0,\n0,0,19322,0,19333,0,19334,19335,0,19336,19337,0,0,0,0,0,0,0,0,0,0,0,19346,0,0,\n19353,0,19354,19362,0,19366,19367,0,0,19369,0,19375,0,19377,19380,19388,0,0,0,0,\n0,19389,19390,0,0,0,0,19392,0,0,0,0,0,19402,0,0,0,0,0,0,0,0,19412,0,0,19413,\n19422,0,19424,0,0,0,19425,0,0,0,19428,0,0,0,0,19431,0,0,0,0,0,19432,0,0,0,0,0,\n19448,19459,0,0,19461,0,19462,19463,0,19467,19474,19482,0,0,0,0,19494,0,0,0,0,\n19501,0,0,0,0,0,0,0,0,0,0,19502,19504,0,0,0,0,0,0,0,19505,0,0,0,0,19506,19507,0,\n0,0,19508,0,0,19511,0,0,19514,0,19515,0,19516,0,19518,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,19530,0,19537,19538,0,19543,19546,0,19547,19551,0,0,0,0,0,0,19552,\n19553,0,0,0,0,0,0,0,0,0,0,0,0,19555,0,0,19556,0,0,0,0,0,0,0,0,0,0,0,0,19560,\n19561,0,0,19562,0,0,0,0,0,0,19565,19567,0,19568,0,0,0,19569,19570,0,19578,0,0,0,\n0,19580,0,0,0,0,19581,19584,0,0,0,0,0,0,0,19585,19586,0,0,0,19587,19588,0,19589,\n0,0,0,0,0,0,19592,19593,19599,0,19600,0,0,19604,0,0,19605,0,19606,19608,19610,0,\n19613,19614,0,0,0,0,0,0,19616,19617,0,0,19618,0,0,19619,0,0,0,19620,19621,19631,\n0,0,19632,19634,19636,0,19643,0,0,19644,19658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,19659,0,0,0,0,0,0,0,0,0,0,0,19675,19677,0,0,0,0,19679,0,19683,0,19684,0,0,\n0,0,0,0,19687,0,0,0,0,0,0,0,0,19688,19689,19692,0,0,0,0,0,0,0,19695,19697,0,0,0,\n0,0,19698,19699,0,0,19700,0,19702,0,0,19703,0,0,0,0,0,0,19704,19708,0,19710,0,\n19713,0,0,0,19715,0,0,0,0,19718,0,0,0,0,0,0,0,19720,0,19722,0,0,19725,0,0,0,0,0,\n0,0,0,0,0,0,0,0,19730,0,0,0,0,0,19731,0,19734,19735,19739,0,0,19740,0,19741,0,0,\n0,19746,0,0,19747,0,19771,0,0,0,0,0,0,0,0,19772,19775,0,0,0,0,0,0,19778,0,0,0,0,\n0,19779,0,0,19780,19790,0,19791,0,0,19792,0,0,0,19793,0,0,19796,19797,0,0,0,\n19799,0,0,0,19801,0,0,0,0,19803,0,19804,0,19805,0,0,19807,0,0,0,19808,0,0,0,0,0,\n0,19809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19816,0,19821,0,19822,19830,19831,0,0,\n0,19833,0,0,0,0,0,0,0,0,0,0,19838,0,0,0,0,19839,0,0,19843,0,0,0,0,19845,0,0,0,0,\n19847,0,0,19848,0,19849,0,0,0,0,0,0,0,19851,0,0,0,19854,0,0,0,0,0,0,0,0,0,19864,\n0,19865,0,19866,0,0,0,0,0,0,0,19868,0,0,19870,0,0,19871,0,0,19872,19873,19875,0,\n19880,19882,19884,0,0,19885,19886,19888,0,0,0,0,0,0,0,0,0,0,0,0,19890,19892,\n19893,0,0,19894,0,0,0,19895,0,19896,19902,0,0,19903,0,0,19905,0,0,0,19906,0,\n19908,0,19909,19911,0,0,0,19913,19920,0,19938,19939,19940,0,0,0,0,0,0,0,19942,0,\n19943,0,19945,0,0,0,19951,19952,19954,19960,0,19965,0,19971,0,0,0,0,0,19975,0,\n19976,0,19990,0,0,19991,0,19993,0,19995,0,0,0,19998,19999,20001,0,20003,20005,0,\n20011,20012,0,0,0,0,0,0,20014,0,20020,0,0,0,0,20021,0,0,0,0,0,20023,20024,0,0,0,\n0,0,20025,0,0,20027,0,0,20029,0,0,20032,0,0,0,0,20044,20045,0,20048,20049,0,0,\n20050,0,20052,0,0,20054,20057,0,0,0,0,0,0,0,0,0,20059,0,0,20061,0,20062,0,20064,\n0,0,20066,0,0,20067,0,0,0,0,20069,0,0,0,0,0,0,20070,20071,0,0,0,0,0,0,0,0,0,0,0,\n20072,0,0,20073,20074,0,0,0,0,0,20075,0,20078,0,0,0,0,20080,0,20081,0,0,0,0,0,0,\n20095,0,20098,0,0,0,0,0,0,0,20107,0,0,0,0,0,0,0,0,20112,0,0,0,20113,20114,0,0,0,\n20115,20123,20124,0,0,0,20131,20133,20134,0,0,0,0,20136,0,0,20137,20138,20150,0,\n20152,0,0,0,20153,0,0,20154,0,0,0,20158,0,20163,0,0,20164,0,0,0,0,0,0,0,20166,0,\n20168,0,20170,0,20175,0,0,20178,0,0,0,0,20223,0,0,0,0,20224,0,20226,0,0,20230,0,\n20231,0,0,0,0,20232,0,0,20233,20234,0,20244,0,20247,0,0,0,0,0,0,20249,0,0,0,\n20250,0,0,0,0,20251,0,20253,0,20254,0,0,0,0,20256,0,0,20264,0,0,0,0,20266,0,0,0,\n20278,0,0,20279,20282,0,0,0,0,0,20283,0,20284,0,20285,0,20287,20290,0,0,0,0,\n20292,0,0,0,0,20293,20297,0,0,0,0,0,0,20299,0,20300,20303,0,0,0,0,0,0,20307,0,0,\n20308,0,20309,0,20310,0,0,0,0,0,0,20312,0,0,0,20314,0,0,0,0,20315,20316,0,20322,\n0,0,0,0,0,0,20339,0,0,0,20342,0,0,0,0,20352,0,0,0,0,0,0,0,0,0,0,20362,0,0,20365,\n0,20375,20377,0,0,0,0,0,0,0,0,0,0,0,20378,20379,0,20380,0,0,20381,0,20382,0,\n20383,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20390,20392,20393,0,0,20395,0,0,0,0,0,\n20396,0,0,0,0,0,0,0,0,20398,20415,0,0,0,20417,0,0,20420,0,0,20426,20428,0,20431,\n0,0,20432,0,20433,20434,20435,0,0,0,0,20440,0,0,0,0,0,20442,0,20443,0,20446,0,0,\n0,0,20448,0,20451,0,0,0,0,0,0,0,0,0,20452,20453,0,0,20454,0,0,0,0,0,0,20457,0,\n20458,0,0,0,20465,0,0,0,0,0,20469,0,0,0,20473,0,20476,0,0,0,0,0,0,0,0,20477,0,0,\n20485,0,0,20486,0,0,20487,0,20496,0,20497,0,0,20498,0,0,0,0,0,0,0,0,0,0,20499,\n20500,0,20501,0,0,0,0,0,20520,20527,0,20529,0,0,0,0,20539,0,0,20540,0,0,0,20543,\n0,0,0,20546,0,0,0,0,0,20548,0,0,20563,0,0,20564,0,20566,0,0,0,0,0,20589,0,0,0,0,\n20590,0,0,20593,20594,0,0,0,0,20595,0,20597,20598,0,0,0,20618,20620,0,0,0,0,\n20621,0,0,0,0,20627,0,0,0,0,0,20628,0,0,0,20629,0,20630,0,0,20639,0,0,0,0,0,\n20707,0,0,20709,0,0,0,20713,20714,0,0,0,0,0,20724,20725,0,0,0,0,20726,20728,\n20729,0,20733,0,20734,0,20735,20736,0,20737,0,0,20744,0,20745,0,20748,0,0,20749,\n0,0,0,0,0,0,0,0,20750,0,0,0,0,20754,0,0,0,20761,0,0,20763,0,0,0,0,0,0,0,20766,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,20767,0,0,0,0,20768,0,20769,20777,0,0,0,0,0,0,20785,0,\n0,0,20786,20795,20801,0,20802,0,20807,0,0,20808,0,0,20810,0,0,20811,0,20812,0,0,\n0,0,0,20813,0,0,20818,20820,20821,0,0,0,20822,0,20823,0,0,0,20826,0,0,0,0,0,0,0,\n20829,20830,20831,0,20832,20836,0,0,20839,0,0,20840,20842,0,20843,0,20844,0,\n20854,0,0,0,20855,0,0,0,0,20856,0,0,0,20869,0,0,20871,0,0,0,0,0,0,0,20873,0,0,0,\n0,0,20876,0,0,0,0,0,20880,0,0,20882,0,0,0,0,20883,20884,0,0,20890,0,0,0,0,0,0,0,\n0,0,20891,0,0,0,0,0,20905,0,20906,20910,0,0,20912,20915,0,0,0,0,0,20916,0,20917,\n0,20919,20920,20922,0,20927,0,20928,20929,20930,0,0,20935,0,0,20939,0,0,20941,0,\n0,0,20943,0,0,0,20946,20947,0,0,0,0,0,20950,0,20954,0,0,20955,20964,0,0,20967,0,\n0,0,0,0,20973,20975,0,0,0,20984,0,20987,20988,0,0,0,0,0,20989,0,0,0,20995,0,\n20998,0,20999,0,0,0,0,21000,21001,0,0,0,0,21008,0,21010,0,21016,0,0,0,21017,\n21018,0,0,0,0,0,21021,21026,21027,21028,0,0,21029,0,0,0,0,0,21030,0,0,0,0,0,0,0,\n0,0,0,0,0,0,21031,21032,0,0,0,0,0,21037,0,0,21038,0,0,0,0,0,0,0,0,0,21039,0,\n21041,0,21046,21047,0,0,0,21049,21053,0,0,21057,21064,21065,0,0,21066,21067,0,0,\n0,21069,0,0,0,21071,21072,0,0,21073,0,21074,0,0,21078,0,0,0,0,21079,0,0,21080,\n21081,0,0,21086,21087,0,21089,0,0,0,0,0,0,0,21091,0,21093,0,21094,0,0,0,0,0,0,0,\n0,21095,0,0,0,0,0,21096,0,21098,0,0,0,0,0,0,0,21099,0,0,21100,21101,21102,0,0,0,\n0,0,21103,0,21104,0,0,0,0,0,21105,21108,21109,0,0,21112,21113,0,0,0,0,0,0,21115,\n21122,21123,0,0,0,0,0,21125,0,0,0,0,0,0,0,0,21129,21131,0,0,21134,0,0,0,21137,\n21142,0,21143,0,0,21144,0,21145,21146,0,21152,21154,21155,21156,0,0,0,21160,0,0,\n0,0,0,0,21161,0,21164,0,21166,0,0,0,0,21170,0,0,0,0,21171,0,0,21172,0,21174,0,\n21175,0,0,0,0,0,21176,21179,21188,0,0,0,21189,0,0,21190,0,0,0,21192,0,0,21193,0,\n0,0,21198,0,21212,0,0,21213,0,0,0,0,0,0,21215,21216,0,0,21223,21225,0,21226,0,0,\n0,0,21227,21228,0,0,21229,0,0,0,0,21230,21236,0,0,0,0,0,0,0,0,0,0,0,0,0,21237,0,\n0,21238,21239,0,0,0,0,21256,0,0,0,0,0,21257,0,0,0,0,0,0,0,21259,0,0,0,21263,0,\n21272,0,21274,0,21282,0,0,0,0,0,0,0,0,21283,0,0,0,0,0,0,0,0,21294,0,0,21297,0,0,\n0,0,21298,0,0,0,21299,0,21300,21302,0,21316,0,21318,21322,21323,0,21324,0,21326,\n0,0,0,21327,21328,0,0,0,21352,0,0,21354,21361,0,0,0,0,0,0,0,0,0,0,0,0,0,21362,0,\n0,0,21363,0,0,0,0,0,0,0,0,0,21366,0,0,21367,21372,21374,0,0,0,21375,21377,0,\n21378,0,0,0,21380,0,0,0,0,0,0,0,0,0,0,21381,0,0,0,0,0,0,21382,0,21383,0,0,21384,\n0,0,21385,0,0,0,0,21389,21390,0,0,0,0,0,0,0,0,0,0,0,0,0,21397,21398,0,0,0,0,0,0,\n0,0,0,0,21399,0,21400,0,0,0,0,21402,0,0,0,21403,21404,0,21405,21406,0,0,0,21407,\n0,0,0,0,0,0,0,0,0,0,0,0,21408,0,0,0,0,21409,0,21421,0,21422,0,0,0,21425,21428,0,\n0,0,0,21429,0,0,0,0,0,21433,0,0,0,0,0,0,0,0,0,0,21434,0,21443,0,21444,21449,0,\n21452,0,21453,21454,0,0,0,21457,0,0,21458,0,0,0,21460,21461,0,0,21464,0,0,0,\n21473,21478,0,0,21479,0,0,21481,21483,0,0,0,0,0,0,0,0,21484,0,0,21485,21486,0,0,\n21488,0,0,0,0,0,0,21523,0,0,21525,0,0,0,0,0,0,0,21526,0,0,0,0,0,0,21529,21530,0,\n0,21531,0,0,21533,0,0,21539,21564,0,21567,0,0,0,0,0,0,0,0,21575,0,0,0,0,21577,0,\n0,0,0,0,21591,0,0,21604,0,0,0,0,0,0,0,0,0,21605,0,21606,0,0,21617,21618,21619,\n21620,0,0,0,0,0,0,0,0,0,0,0,0,0,21623,0,0,0,0,21631,0,21635,0,0,0,0,21639,21646,\n21653,21662,0,0,21663,21664,0,21666,0,0,21667,0,21670,21672,21673,0,21674,21683,\n0,0,0,0,0,21684,0,21694,0,0,0,0,21695,21700,0,21703,0,21704,0,0,21709,0,0,0,\n21710,0,0,0,0,0,0,0,0,21711,0,0,0,21712,0,21717,0,21730,0,0,0,21731,21733,0,0,0,\n0,21737,21741,21742,0,21747,0,0,0,21749,0,0,0,0,0,0,0,0,0,0,0,0,0,21750,0,0,0,0,\n0,21752,0,0,0,0,21753,0,0,0,0,0,0,21755,21756,0,21757,0,0,0,0,0,0,21760,0,0,\n21763,0,0,0,0,0,0,0,0,0,21764,0,0,21766,0,0,21767,0,0,0,0,0,0,0,0,0,21773,0,\n21774,0,0,21775,0,0,0,0,21776,0,0,21777,0,0,0,0,0,0,0,0,0,21780,21787,21788,\n21791,0,0,0,21797,0,0,0,0,0,21805,0,0,0,0,21806,0,21807,21809,0,21810,21811,0,\n21817,21819,21820,0,21823,0,21824,0,0,21825,0,0,21826,21832,0,0,0,0,0,21833,\n21848,21849,0,0,21867,21870,21871,21873,0,0,0,21874,0,0,0,0,0,0,0,0,0,21875,0,\n21878,0,0,0,21879,0,21881,21886,0,0,0,0,21887,0,0,21888,21894,21895,21897,0,\n21901,0,21904,0,0,21906,0,0,0,21909,21910,21911,0,0,21912,0,0,21913,21914,21915,\n0,21919,0,0,0,0,0,0,0,21921,0,0,21922,21933,21939,0,0,0,0,0,0,0,0,0,0,0,21944,0,\n0,0,0,0,21945,0,21947,0,0,0,0,0,0,0,0,0,0,21949,0,0,0,21950,0,0,0,0,0,0,0,0,0,0,\n0,0,0,21951,0,21952,0,0,0,0,0,0,0,0,0,21954,21957,0,0,0,0,21958,0,21959,0,0,0,0,\n0,0,21962,21963,0,0,0,0,0,0,0,0,21964,21965,0,0,21969,21970,0,0,0,21974,0,0,\n21980,21981,0,21982,0,0,0,0,0,21985,0,21988,0,21992,0,21999,0,0,0,0,0,0,22001,0,\n22002,0,0,0,0,0,0,22003,0,0,0,0,0,22004,0,0,0,22008,0,22009,22015,0,0,22016,0,0,\n0,22017,22019,0,0,0,0,0,0,0,0,0,22020,0,0,0,0,0,0,0,0,0,0,22021,22037,0,22039,0,\n0,0,22040,0,0,0,22048,22049,0,0,22053,22055,22056,22059,0,0,22060,22061,0,0,\n22064,0,0,0,0,22066,0,0,0,0,0,0,0,22073,0,0,0,22074,22075,0,0,0,0,0,0,0,22076,0,\n0,0,0,22077,22084,22099,0,0,0,0,0,0,0,22104,0,0,22107,0,22108,0,22109,0,22110,0,\n0,0,0,0,0,0,22111,22119,0,22120,22122,0,0,0,0,22125,0,0,0,22128,22129,0,0,0,0,0,\n0,22141,0,0,0,22142,0,0,22144,22146,0,22148,22149,22151,22154,0,0,0,22162,0,0,0,\n0,22164,22177,0,0,0,0,22179,0,22182,22183,0,0,22184,22188,0,0,0,0,0,0,0,0,22190,\n0,22194,22201,0,0,22208,0,22209,0,22212,0,0,22215,0,22223,22231,0,0,22232,0,\n22234,0,0,22235,22236,0,22237,0,22240,0,0,0,0,0,22241,0,0,0,22242,22246,22247,0,\n0,0,22259,22268,0,22269,0,0,0,0,0,0,0,22270,0,0,0,0,22271,0,22272,0,22277,0,0,0,\n0,0,22278,22280,22283,22286,0,0,22287,22289,0,0,22290,0,22293,0,0,0,0,0,0,0,0,0,\n0,22295,0,22301,22302,0,0,0,22305,0,22308,0,0,0,0,0,0,0,0,0,0,22315,0,0,0,22317,\n0,22334,0,0,0,22335,0,0,0,0,0,22336,0,22338,22344,0,22347,22349,0,22350,0,0,0,0,\n0,0,0,22357,0,0,0,0,0,22358,0,0,0,0,0,0,0,0,0,0,22359,22360,0,0,0,0,0,0,0,0,\n22361,22366,0,0,22369,0,22370,22373,0,0,0,0,0,22375,0,22377,0,0,0,0,0,22378,0,0,\n0,0,22381,0,0,0,0,22382,0,22383,0,0,0,0,0,0,0,0,0,22391,0,0,22392,22395,22396,\n22402,0,0,0,0,0,0,0,0,0,0,0,0,0,22405,0,0,22406,0,0,22408,0,0,22409,22410,0,0,0,\n0,0,0,22424,0,0,0,0,22426,0,0,0,22427,0,22428,0,22432,0,22435,22442,22443,0,0,0,\n0,22444,0,0,0,0,0,22446,0,22454,0,22455,0,0,0,22465,0,22470,0,22471,0,0,0,0,\n22472,22473,0,22487,0,0,0,22488,0,0,0,0,22489,0,0,22499,0,0,0,0,0,0,22514,0,0,\n22515,0,0,0,0,0,0,0,22516,0,0,0,22517,22520,0,0,0,22534,0,0,22535,0,0,22536,0,\n22540,22553,0,22555,0,0,0,0,22561,0,0,22562,0,0,0,0,0,0,0,0,0,0,0,22566,0,0,0,0,\n22567,22568,0,0,22575,0,22579,0,22582,22583,22585,0,0,0,0,0,22586,0,0,22587,0,0,\n22590,0,0,0,0,0,22591,0,22592,0,0,0,0,0,22593,0,22602,0,0,22604,0,0,22609,0,0,\n22618,0,0,0,0,0,0,22619,0,22624,22625,0,0,22638,0,0,0,0,0,22639,0,0,22640,0,0,0,\n0,0,0,0,22644,0,22645,22647,0,0,0,0,22652,22653,0,0,0,22654,0,22655,0,0,0,22656,\n0,0,0,0,0,0,0,0,0,0,22673,22675,22676,0,0,22678,22679,0,22691,0,0,0,0,0,0,0,\n22693,0,0,22696,0,22699,22707,22708,0,0,0,0,0,0,0,0,22718,0,22719,0,0,0,0,22723,\n0,0,0,22724,22725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22726,22728,0,0,0,0,0,0,0,0,22729,\n0,0,22731,0,0,0,0,22732,22735,22736,0,0,0,0,22739,0,22749,0,0,22751,0,0,0,0,0,0,\n0,0,0,0,0,22758,0,0,0,0,0,22760,0,0,0,0,0,22764,22765,22766,0,22768,0,0,0,0,0,\n22769,22770,0,0,0,0,0,0,22771,0,0,22772,22775,0,22776,22777,22780,0,0,22782,\n22784,0,22787,0,22789,22796,0,0,0,0,0,22798,0,0,0,0,0,0,22802,0,22803,22804,0,0,\n0,0,0,0,0,0,0,0,22805,0,0,22810,22811,22814,22816,0,22825,22826,0,22831,22833,0,\n0,0,0,0,0,0,0,0,22834,0,22836,22838,0,22839,0,0,0,0,0,22840,0,22847,0,0,0,0,0,\n22856,22857,0,22858,22859,0,0,22862,0,0,22864,0,0,0,0,22865,0,0,0,0,0,0,0,0,0,0,\n0,22866,0,22867,22868,0,0,0,0,22869,0,22871,0,22872,0,22873,22881,22882,22884,\n22885,0,0,0,0,0,0,0,22886,22887,0,22894,0,22895,0,0,0,22900,0,22901,0,0,0,0,\n22904,0,0,0,0,22905,22907,0,0,0,22915,22917,0,0,22918,0,0,0,22920,0,0,0,22929,\n22930,0,0,0,22941,22942,0,0,0,22943,0,0,0,22944,0,0,0,0,0,0,0,22946,0,22947,0,0,\n22954,0,22956,0,0,22962,0,0,0,0,0,0,0,22963,0,0,22964,0,0,0,0,0,0,0,22965,0,\n22968,0,0,0,22969,0,0,0,0,0,22970,0,22971,0,0,0,0,0,22978,0,0,22979,0,22987,0,0,\n22989,0,0,0,0,0,0,22990,0,23005,0,0,0,0,0,0,0,23006,23007,23008,0,0,23023,23024,\n23029,0,0,0,0,23030,0,0,0,0,0,23032,0,0,0,0,0,23035,0,0,0,0,23038,0,0,0,23048,0,\n23049,23052,23053,23060,23061,0,23063,0,0,0,0,23067,23068,0,0,0,23069,23073,0,0,\n0,23127,0,23128,0,0,0,0,0,23129,0,23138,23141,0,23149,0,0,23150,0,0,0,23152,0,0,\n0,0,0,0,0,0,23154,0,0,0,0,23157,23159,23160,0,0,0,0,0,0,0,0,0,0,0,0,23180,0,0,0,\n0,23181,0,0,23188,0,23189,0,0,0,0,0,0,0,0,0,0,0,0,23195,0,0,23196,23199,0,0,0,0,\n0,0,0,0,0,23202,0,23204,0,23207,0,23209,23210,0,0,0,0,0,0,23227,23229,0,0,23230,\n23234,23238,0,0,0,23245,23246,23248,0,0,0,0,23249,23254,0,0,0,23265,0,0,0,0,0,0,\n0,23268,0,23276,0,0,0,0,23277,0,23297,0,23298,0,0,0,0,23299,0,23302,0,0,23303,\n23312,0,0,23314,0,23320,0,0,0,0,23324,0,23325,0,23328,0,23334,0,0,0,23337,0,0,0,\n0,23343,23344,23346,0,23348,0,0,0,0,0,0,0,0,23353,0,0,0,0,23355,0,23356,23358,0,\n0,0,23359,23360,0,23361,0,23367,0,23369,0,0,23373,0,23378,23379,0,23382,23383,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,23387,0,0,0,0,0,0,23388,23390,0,0,23393,23398,0,0,0,\n23399,0,0,0,23400,0,0,0,0,23401,0,0,0,23415,0,0,0,0,0,0,0,0,23416,0,23422,0,\n23443,23444,0,0,0,0,23448,0,23454,0,0,0,0,0,0,23456,0,0,23458,23464,0,0,0,0,0,0,\n23465,0,0,0,23470,23471,0,0,23472,0,0,0,23473,23496,0,0,0,0,0,0,0,0,23497,0,\n23499,0,0,23502,0,0,23503,0,0,23513,0,0,23515,0,0,0,23517,0,0,0,0,23518,23519,\n23521,23524,0,23525,23528,23539,0,0,0,0,0,23541,0,0,23544,0,0,23556,0,0,23557,0,\n0,0,0,0,0,0,0,0,0,0,0,0,23559,0,23560,0,0,23561,0,0,23566,0,0,0,0,0,23568,23569,\n23570,0,0,0,0,23571,0,23574,0,0,0,0,0,0,0,0,0,0,0,23575,0,23579,0,0,23581,0,0,0,\n0,0,0,23587,0,0,0,0,0,0,0,23596,23598,0,0,0,0,23602,23606,0,0,23607,0,23608,0,0,\n0,23614,23616,0,0,0,0,0,23618,0,0,23619,0,0,0,0,23621,23626,0,23627,0,0,0,0,0,0,\n0,23629,0,23630,0,0,0,0,23634,0,23636,0,0,0,0,0,0,23638,0,0,0,0,23640,23667,0,\n23669,0,0,0,23681,0,0,0,0,0,0,0,23682,0,23683,0,0,0,0,0,23684,0,0,0,23685,23689,\n0,23693,23694,23700,0,23702,0,23709,0,0,0,0,0,0,0,23712,0,0,0,0,0,23714,0,0,\n23715,0,0,0,0,23718,0,0,23720,0,0,0,0,23722,0,0,0,23726,23729,0,23741,23746,0,\n23748,0,0,0,0,23749,0,0,0,0,0,23750,0,0,0,0,23751,0,23753,0,0,0,0,23757,23765,0,\n0,0,23770,0,0,0,0,0,0,0,23771,0,23772,23781,0,0,23796,0,0,0,0,23798,0,23799,0,0,\n0,23802,0,0,23806,0,23807,0,0,23808,0,23809,0,23819,0,0,0,23821,0,23827,0,0,0,\n23829,0,0,0,0,0,0,0,23830,0,0,0,0,0,0,23832,23833,23834,23835,0,0,0,0,23837,\n23838,0,0,0,0,0,23846,0,0,0,0,0,0,23847,0,0,0,0,0,23879,23881,0,0,23882,23883,\n23895,0,23899,0,0,0,0,23901,0,0,0,0,0,0,23902,0,0,0,0,0,23903,23905,0,23906,0,\n23907,23918,23919,23920,0,23922,0,23924,0,23927,0,23934,0,23937,23941,0,23942,\n23946,0,0,0,0,0,23955,23956,23958,0,0,0,0,0,0,23959,0,23962,23965,0,23966,0,0,0,\n0,23967,23968,0,0,23973,0,0,23974,0,0,0,0,23975,0,23976,0,0,0,0,0,0,0,0,0,0,0,0,\n0,23977,0,0,0,0,0,0,0,0,23980,0,0,23984,0,23985,0,0,23987,0,0,23988,23990,23991,\n0,0,0,0,0,0,23992,0,0,0,0,0,0,0,0,23994,0,0,0,23998,0,0,0,0,0,0,0,0,0,23999,0,0,\n24003,0,24004,0,24006,0,0,0,24007,0,0,24008,0,0,0,0,0,0,0,24009,0,0,24010,0,0,\n24011,0,0,24013,24014,0,0,24015,24016,24027,0,24028,24029,0,24030,0,0,0,0,0,\n24033,24034,0,24035,0,0,24036,0,0,24044,0,24048,24049,24063,24067,0,24068,24070,\n0,0,24071,24078,24087,0,24090,0,0,0,24095,0,24098,24101,24104,24106,0,24107,0,0,\n0,24108,0,0,0,0,24110,24111,0,24113,0,0,24115,24120,0,0,0,0,0,0,24124,0,24125,0,\n24126,0,24127,0,0,0,0,0,24135,0,0,24136,0,24137,24142,0,0,0,24146,0,0,24147,\n24149,24154,0,24163,0,0,0,24165,24166,24167,0,0,0,0,0,0,0,0,0,0,24169,24170,\n24175,0,0,0,24178,0,0,24179,0,0,24181,0,24184,24197,0,24201,24204,0,0,0,0,0,0,\n24206,24212,24220,0,0,0,24224,0,0,0,0,0,0,0,0,24226,0,24234,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,24235,0,24236,0,0,0,0,0,24239,24240,24241,0,0,24248,0,0,24249,0,\n24251,0,0,0,0,0,0,24253,0,24268,0,0,0,24269,0,24271,24272,0,0,0,0,24273,0,0,\n24274,0,0,24279,0,0,0,0,0,0,0,24280,0,24293,24294,0,0,0,0,0,0,24296,0,0,24323,0,\n0,0,24329,24330,24331,24339,0,24351,0,0,24369,24370,0,0,0,24371,0,0,0,0,24372,\n24373,24374,0,0,0,0,0,24378,0,0,0,0,24379,0,24381,0,24383,24389,0,24390,0,0,\n24394,24395,24400,0,0,0,24401,24402,0,24406,0,0,0,24411,0,0,0,24415,0,24416,0,0,\n0,0,0,24417,0,24419,0,24422,0,24423,24428,0,24435,0,0,0,24439,0,0,0,24440,24442,\n24446,0,0,0,24447,24448,24449,24452,0,0,0,0,24453,24457,0,0,24458,24459,24460,0,\n24465,0,0,0,0,0,0,0,24470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24471,0,24473,\n24474,24475,24476,0,24478,0,0,0,0,24480,0,0,0,0,0,0,0,0,0,0,24481,0,0,0,0,0,0,0,\n0,0,0,24482,24485,0,0,0,0,24486,0,0,0,24488,0,0,0,24494,0,0,0,0,24497,0,0,24498,\n0,0,0,24499,24506,0,0,0,24507,0,0,24511,0,0,24513,24514,0,0,0,0,0,24517,0,24518,\n0,24520,0,24521,24524,24525,0,0,0,0,0,24527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24528,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24537,24539,0,24540,0,0,0,24548,0,0,0,0,0,24549,\n24550,0,0,0,24553,24554,0,24555,0,24556,0,24558,0,0,0,0,0,24560,0,0,0,24561,0,0,\n0,0,0,24562,0,0,0,0,0,0,0,0,0,0,0,0,0,24567,0,0,0,0,0,24569,0,0,0,24574,0,24575,\n0,0,0,0,0,0,0,0,0,0,0,24577,24581,0,24584,0,0,0,0,0,24585,0,0,0,0,0,24586,0,0,\n24587,0,24588,0,0,0,0,0,0,0,0,0,0,24590,24591,0,0,0,0,24592,0,0,0,0,0,0,0,24594,\n0,0,0,0,0,0,0,24596,24597,0,0,0,0,24602,24603,0,0,0,0,24604,0,0,24605,0,24610,0,\n0,24611,0,0,0,0,24612,24615,24616,24624,0,0,0,24627,0,24638,24639,0,0,0,0,24640,\n0,0,0,24655,24656,24657,0,0,0,0,0,0,0,0,24662,0,24663,24664,0,0,0,0,0,24665,0,0,\n0,0,24667,0,0,0,0,0,0,24668,24669,0,24670,24674,0,0,0,24675,0,24678,0,0,24679,0,\n0,0,24681,0,24683,0,0,0,0,24684,0,24685,0,0,24686,0,0,24688,24689,0,0,0,0,24690,\n24691,0,0,0,0,0,0,0,24697,0,24698,0,0,0,0,0,0,0,0,24709,0,0,0,0,0,24710,0,24712,\n0,0,0,0,0,0,24713,24714,0,24715,0,24716,24718,0,24719,0,0,0,0,24720,0,0,24725,0,\n0,24738,0,24749,24750,0,0,0,24752,0,0,0,24753,0,0,0,24758,0,0,0,0,0,24762,0,\n24763,0,0,0,0,0,0,0,24764,0,0,0,0,0,24765,24767,24768,0,24772,0,0,0,0,24773,0,0,\n0,0,24777,0,0,0,0,0,24785,0,24786,24788,0,0,0,24789,0,0,0,0,24794,24798,0,24799,\n24800,0,0,0,24803,0,24804,24806,0,24807,0,0,0,24810,0,0,0,0,0,0,24827,24828,0,\n24835,0,0,0,0,0,0,24836,0,0,0,0,0,24839,0,24843,24844,0,0,0,0,0,0,0,0,0,0,24847,\n0,0,24848,0,0,0,0,0,0,24849,0,24850,24851,0,0,0,24852,0,24853,0,0,0,0,0,0,0,0,0,\n24854,0,24855,0,0,24868,0,0,0,24883,0,0,0,24884,0,24895,24897,0,0,0,0,0,24899,0,\n0,0,0,0,24900,0,24913,0,0,0,0,0,0,24914,0,0,24917,24930,24931,0,0,0,24932,0,0,\n24939,0,0,24942,0,0,0,0,0,0,0,0,0,24945,24950,0,24951,0,0,24953,0,0,0,24954,0,\n24959,0,0,0,24961,0,0,24962,0,24964,24968,24970,24972,0,0,0,0,0,24976,0,0,0,\n24977,0,24982,0,0,24983,0,0,24984,0,0,0,24993,0,0,0,24994,0,0,25001,0,0,0,25003,\n0,0,25018,0,0,25023,0,0,0,25034,0,0,25035,25036,0,25037,0,0,0,0,0,0,0,25039,0,0,\n0,0,0,25040,0,0,0,0,0,0,0,25042,0,0,25043,25045,0,0,0,0,0,0,25049,0,0,25051,0,\n25052,25053,0,0,25054,0,0,0,25055,0,0,0,0,25057,25059,0,0,25060,25064,0,25065,\n25069,25070,0,0,0,0,25072,0,25073,0,25090,0,0,25092,25093,25101,0,0,0,0,0,0,\n25105,25108,0,0,25113,0,0,25115,25116,0,0,0,0,0,0,25117,0,0,0,25120,25121,0,0,0,\n0,0,0,0,25125,0,0,0,25126,0,25130,25134,0,25139,0,25143,0,0,0,25151,0,25161,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,0,0,0,0,0,0,0,25174,0,25175,0,25207,0,0,\n0,25209,0,0,0,0,25213,0,25219,0,25223,0,25225,0,0,0,25227,0,0,0,25228,0,0,0,\n25229,0,0,0,0,0,0,0,25231,25233,0,0,0,0,25237,25239,0,0,0,25243,0,0,0,25252,0,\n25257,25258,0,0,0,0,25260,25265,0,25268,0,0,25273,25324,0,25325,0,25326,0,0,0,0,\n0,0,0,0,25327,0,0,0,0,0,25328,0,0,0,0,0,0,25332,0,0,0,25333,0,0,0,25336,25337,\n25338,0,0,25343,0,25350,0,0,0,0,0,0,0,25352,0,25354,0,25375,0,25379,0,0,0,0,\n25384,0,0,0,0,0,0,0,0,0,25386,0,25388,0,25390,0,0,25399,0,0,25401,0,0,0,25402,0,\n0,0,25407,0,0,0,0,0,0,0,0,0,0,0,25413,25415,0,0,25417,0,0,0,0,0,0,0,25419,0,0,0,\n25421,0,0,0,25424,0,0,0,0,25433,0,0,0,0,0,0,0,0,0,25435,0,0,0,0,0,0,25436,0,0,0,\n25437,0,0,25440,0,0,0,0,0,0,25442,0,0,25443,0,25446,0,0,25449,0,0,0,25450,0,0,0,\n0,25452,0,25453,25454,25455,0,0,0,25456,0,25457,0,0,0,25459,0,25461,0,25468,0,0,\n0,0,0,0,0,0,25469,0,0,0,0,0,25471,0,0,0,0,0,25474,0,0,0,0,0,0,0,0,25475,0,0,0,0,\n25477,0,0,0,0,25483,0,0,0,0,0,25484,0,0,0,0,0,0,0,0,0,0,0,0,25485,0,25497,0,0,\n25498,0,25504,0,25510,0,25512,0,0,25513,25514,0,0,0,0,0,0,25517,25518,25519,0,\n25520,0,0,0,0,0,0,0,25521,0,25522,25527,25534,0,25536,0,25537,0,0,25548,25550,0,\n0,25551,0,25552,0,0,0,0,0,25554,0,25555,0,25556,25557,25568,0,0,0,25570,25571,0,\n0,0,0,0,0,25574,0,0,0,0,25579,0,0,0,25581,0,0,0,25582,0,0,0,0,0,0,0,0,0,25588,0,\n0,0,0,25589,0,0,0,0,25590,0,25591,25592,25593,0,25594,0,0,0,25596,0,25597,25615,\n0,0,0,0,0,25618,0,0,0,0,25619,25623,0,0,25629,0,0,25631,0,0,0,25635,25636,0,0,\n25649,0,0,0,0,25654,0,0,0,25661,25663,0,0,25671,0,0,25678,25698,0,25699,25702,\n25703,0,0,0,0,0,0,0,0,25704,0,0,0,0,0,25706,0,0,25710,0,25711,0,25712,0,25715,\n25716,25717,0,0,25718,25728,25732,0,0,0,25734,0,0,0,0,0,0,0,0,0,25737,0,0,25739,\n0,0,0,25740,0,25741,25745,0,25746,0,25748,25772,25778,0,0,0,0,0,25780,0,0,0,0,\n25781,0,25782,25784,25785,0,0,0,25789,0,0,0,0,0,0,25797,25801,0,0,0,25808,25809,\n0,0,25811,25814,25815,0,0,25817,0,0,0,0,0,0,0,0,25820,0,0,0,0,25832,25833,0,0,0,\n25846,0,0,0,25847,25848,0,0,0,0,0,0,0,0,0,25849,25850,0,0,25851,0,0,25852,0,\n25862,0,0,0,25863,25865,0,0,0,0,0,0,0,25867,25868,0,25869,25874,0,25875,0,25876,\n25877,0,0,0,0,25878,25902,0,0,0,0,0,0,0,25903,25904,25905,0,0,0,25908,25909,0,0,\n0,0,25910,0,0,0,0,0,0,0,25912,0,25913,0,0,0,0,0,0,0,0,25914,0,0,25916,0,0,0,0,0,\n25917,25927,0,0,0,0,25928,0,0,25930,0,0,0,25933,0,0,25938,25942,0,0,0,0,0,0,0,\n25945,0,25950,0,25956,0,0,25961,25962,0,0,25963,0,25964,25965,25966,0,0,0,0,0,\n25967,0,0,0,0,25968,0,0,0,25969,25971,0,0,0,0,0,25973,25975,0,0,0,0,0,0,0,25978,\n0,25981,0,0,0,25982,0,0,0,25984,0,0,0,0,0,0,0,25993,0,0,0,0,0,0,0,0,0,0,0,0,0,\n26002,0,0,0,26005,0,0,0,26006,26007,0,0,26014,26015,26016,0,0,0,0,0,0,26017,\n26018,26020,0,26022,26023,0,0,0,26024,26028,0,26029,26033,26034,26044,0,0,0,0,0,\n26046,0,0,26047,0,0,26049,0,26050,0,26051,0,0,0,0,0,26053,0,0,0,0,26054,26059,0,\n0,0,0,0,0,26060,0,26066,0,0,0,0,0,0,0,0,0,0,0,0,26067,0,26069,0,0,26071,0,0,0,\n26073,0,26074,26077,0,0,0,0,26078,0,0,0,26079,0,26090,0,0,26094,0,0,0,0,0,0,0,0,\n26095,0,0,0,0,0,0,0,0,0,0,0,26096,26101,0,26107,26122,0,26124,0,0,26125,0,0,0,0,\n0,0,26136,26141,26155,0,0,0,0,0,0,0,0,0,26164,26166,0,0,0,26167,0,26170,26171,0,\n0,26172,0,0,26174,0,0,0,0,0,0,0,0,0,0,0,0,0,26175,0,0,0,26176,26177,0,26321,\n26322,0,26323,0,0,26324,0,0,0,0,0,0,0,26325,0,26331,0,0,0,0,0,0,26335,0,0,0,\n26350,0,0,0,26379,0,0,26382,26383,26385,0,0,26392,26406,0,0,0,0,26411,0,0,0,0,0,\n26412,0,0,26420,0,0,26423,0,26424,26426,26432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n26435,0,26436,0,0,0,0,0,26441,0,26444,0,0,0,26446,0,0,0,0,26447,0,0,0,0,26449,0,\n26450,26452,0,26453,26454,0,0,0,26455,0,0,0,26456,0,0,26458,0,0,26460,0,26463,0,\n0,0,0,0,0,0,0,26464,26470,0,0,0,0,0,0,0,0,0,26473,0,0,26474,0,0,0,0,0,0,0,26475,\n0,0,0,0,0,0,0,26477,0,26485,0,0,26486,0,26487,0,0,26488,26493,26494,0,0,26495,0,\n26497,26504,26506,0,0,0,0,0,26507,0,0,0,0,0,26509,0,0,26510,0,0,0,0,0,0,0,0,0,0,\n0,0,0,26512,0,26513,26515,0,0,0,26518,0,0,0,26519,0,26524,26526,0,0,0,26527,0,\n26532,0,26533,26537,26558,0,0,0,26559,0,0,0,26571,0,0,26573,0,26588,0,26593,0,0,\n0,0,0,0,26603,0,26604,0,0,0,0,0,0,0,0,0,0,26606,0,0,0,0,0,0,0,26607,26609,26611,\n26614,0,0,0,26616,26620,0,26621,0,0,0,0,0,26627,0,26629,0,0,26630,0,0,26632,\n26643,0,0,0,26644,0,0,0,0,0,0,0,0,0,26646,26647,0,0,0,26650,0,0,26656,0,0,0,0,\n26663,26670,26671,0,0,0,26685,26686,26687,0,26689,0,0,0,0,26744,0,26745,0,26747,\n26748,0,26749,26750,26751,0,0,0,0,26752,26755,0,0,0,26756,26769,0,0,0,26774,0,0,\n0,0,0,26775,0,26777,26778,0,26786,0,0,0,26787,0,0,0,0,0,0,0,0,0,0,0,0,0,26788,0,\n0,26789,0,0,0,0,0,26791,0,26792,26793,0,0,0,26794,0,26797,26798,0,0,0,26800,0,0,\n26803,0,26804,0,0,0,0,0,0,0,0,0,26805,0,0,26808,0,0,26809,0,0,0,0,0,0,0,26812,0,\n26825,0,0,0,0,0,0,0,26826,0,0,26827,26829,26834,0,0,0,0,26835,0,0,26849,0,26851,\n0,0,0,0,0,0,0,0,0,26852,0,26853,26857,0,26858,0,26859,0,0,0,0,0,0,0,26876,0,\n26878,26882,26883,0,0,0,0,26890,26894,0,0,0,0,26895,26896,0,0,0,0,0,26900,0,0,0,\n0,0,0,0,26911,26913,26914,26915,26916,26919,0,0,0,26921,26922,0,0,26925,0,0,0,\n26928,0,0,26929,26930,0,0,0,26931,0,26932,0,0,0,0,0,26933,0,0,0,0,0,0,26937,0,0,\n26943,0,0,26944,0,0,0,26946,0,0,0,0,0,0,0,26956,0,26958,0,0,26963,0,0,0,0,0,0,0,\n26965,0,26969,26970,26972,0,0,0,0,0,26973,0,26974,0,26978,0,26980,0,0,0,0,0,0,\n26982,0,26986,26987,0,26990,0,0,0,0,27003,27006,0,0,27007,27010,27012,27013,0,0,\n0,0,0,0,0,0,27014,27015,27018,0,27019,0,0,0,0,0,27025,0,0,0,27026,0,0,0,0,27029,\n27030,27031,27034,0,0,27036,27037,0,0,0,27038,27042,0,0,0,27044,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,27045,0,0,0,0,0,0,0,27046,0,0,0,0,0,0,0,27047,27049,0,27050,0,0,0,\n27051,27052,0,27055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27056,27058,27059,0,\n27061,0,27064,0,0,0,0,0,27069,0,0,27070,0,0,0,0,0,0,0,27072,0,0,0,0,0,0,0,0,\n27076,0,0,0,0,0,27078,0,27079,0,0,0,27081,0,0,0,0,0,0,27082,0,27083,27086,0,0,0,\n0,27087,0,0,0,0,0,27088,27090,0,27094,0,0,27095,0,27099,27102,0,0,0,27103,0,0,0,\n0,27105,0,0,0,27106,0,0,0,0,0,0,27107,0,0,0,0,27108,27117,0,0,0,0,27118,0,0,\n27124,0,27126,0,0,27130,27131,0,0,0,0,0,0,27147,0,0,0,0,27148,27149,0,0,0,0,\n27150,27151,0,27152,0,27159,0,0,0,27164,0,0,0,0,0,0,0,27175,0,27189,0,0,27191,0,\n27193,0,27195,0,27198,0,0,0,0,0,27200,0,0,0,0,27202,0,0,0,0,27203,0,0,27204,0,0,\n27206,0,27207,0,0,0,0,27209,0,0,0,27213,0,0,27216,27219,27220,27222,27223,0,\n27224,0,27225,27226,0,0,27233,0,0,0,0,27235,0,27237,0,27238,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,27239,0,27242,27243,0,27250,0,0,0,27251,0,27253,0,0,0,0,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,27254,27255,27258,0,0,0,27259,0,0,0,0,0,0,27267,0,27276,27278,\n0,0,0,0,0,0,0,0,0,27296,27297,27301,0,0,0,0,0,0,27302,0,0,0,0,0,0,27312,27313,0,\n0,0,0,0,27318,0,27320,0,27329,0,27330,27331,0,27332,0,0,0,0,27340,0,0,0,27348,0,\n0,0,0,0,0,27350,0,27351,0,0,0,0,27355,0,0,27358,27359,27361,0,0,0,27365,0,27367,\n0,27376,27378,0,0,27379,0,0,0,0,0,0,27396,0,27397,27404,0,0,0,0,0,27408,0,0,0,0,\n27453,0,0,0,27456,0,0,0,27458,0,0,0,0,0,0,0,27459,0,0,0,27460,0,0,27461,0,27465,\n27467,0,0,27469,0,27470,0,27471,0,27477,27482,0,0,0,0,0,0,27484,0,0,0,0,0,0,\n27485,0,0,0,0,0,27493,0,27494,27502,0,0,0,0,0,0,0,0,0,0,0,0,27511,27532,0,0,0,\n27533,27545,0,0,0,27546,0,0,0,0,0,0,0,0,0,0,27547,0,0,27549,27550,0,27551,0,0,0,\n0,0,0,0,27555,0,0,27571,0,27573,27574,27575,27577,0,27578,0,0,27579,27585,0,0,0,\n0,0,27586,0,0,27588,27589,0,0,0,0,27596,0,0,27600,0,0,0,0,0,0,0,0,0,0,0,27608,0,\n0,0,0,0,0,0,0,0,0,0,27610,0,0,0,27618,0,0,27620,0,0,0,27631,0,0,27632,27634,0,\n27636,27638,0,0,0,27643,0,27644,27649,0,0,0,0,0,0,0,0,0,0,0,0,0,27651,27660,0,\n27661,0,0,0,0,0,0,0,27662,0,0,27664,0,27665,0,0,0,27669,0,27671,0,0,0,27673,\n27674,0,0,0,27682,0,0,0,27711,0,27712,27713,27719,27720,0,0,27728,0,27729,0,0,0,\n0,0,0,0,0,0,27731,0,0,27732,0,27733,0,27738,0,0,0,27742,0,0,0,27743,27744,0,0,0,\n0,0,0,27745,27746,0,0,0,27747,27748,27751,27752,0,0,0,27768,27770,0,0,0,27774,\n27775,0,27776,27777,0,0,27781,0,27784,0,27786,0,0,27791,0,27792,27793,27804,0,\n27812,27813,0,0,0,0,0,0,0,0,27814,0,27825,0,27827,0,0,0,0,27828,27861,27862,0,0,\n0,27864,0,0,0,27865,27884,0,27889,0,0,0,0,0,27890,0,27891,0,0,0,27892,0,0,0,0,0,\n27897,27898,0,0,27899,0,0,0,27901,27905,0,0,27920,0,0,27921,0,27922,0,0,0,27931,\n27934,0,0,0,0,0,0,0,0,0,0,27941,0,27942,0,27945,0,27947,27954,0,0,0,0,27960,\n27963,0,0,0,0,0,0,0,0,27964,27965,0,0,0,27967,0,27969,27975,0,27976,27977,0,\n27981,0,27983,28051,28052,0,0,0,0,0,28056,0,0,0,0,0,0,28058,28059,0,0,28061,0,0,\n0,0,0,0,0,28063,0,0,0,0,0,0,28066,0,0,0,0,0,0,28069,28070,28072,0,28073,0,0,\n28074,0,0,0,0,28075,0,0,0,0,0,0,0,28078,0,0,0,0,28085,0,0,0,0,28086,0,0,0,0,0,0,\n28088,0,0,0,0,0,0,0,0,28090,0,28097,28114,28115,0,0,0,0,0,0,0,28116,0,0,0,0,0,\n28118,0,28129,0,28131,0,0,28135,0,0,0,28140,28141,0,0,0,28146,0,0,0,0,28152,0,0,\n0,0,28155,28157,28161,0,0,0,0,28166,0,28167,0,0,0,0,0,0,0,0,0,0,0,28172,0,0,0,0,\n0,0,28173,0,0,28175,0,0,0,0,0,0,0,0,0,28178,28188,0,28190,0,0,0,0,0,28191,0,\n28193,28206,0,0,28207,28209,0,28211,0,28213,0,0,0,28215,28216,28217,0,28222,0,\n28223,28225,0,0,0,28226,0,28227,28229,28232,0,0,0,0,0,0,0,0,0,28235,0,28241,0,0,\n28242,0,0,0,0,28243,0,0,0,28245,0,0,0,28248,28250,0,28251,28252,0,0,0,0,0,0,\n28253,0,0,28254,28255,0,0,28256,0,0,28258,0,0,0,0,0,28259,0,0,28260,0,0,28261,0,\n0,0,0,28262,28263,0,0,28264,0,0,0,28266,0,28268,28269,0,28270,28272,28274,0,\n28277,28278,0,0,0,28279,0,28280,28281,28283,0,28292,0,28294,0,28297,0,0,0,0,\n28299,0,0,0,0,0,28300,0,0,0,0,0,0,0,28301,0,0,0,0,0,0,0,0,0,0,0,0,0,28302,28303,\n0,0,0,0,28304,0,0,28305,0,28312,0,28313,28314,0,0,0,0,0,0,28315,0,0,0,28320,\n28321,0,0,28328,0,0,0,28329,28338,0,28339,0,0,28344,0,0,0,0,0,0,0,0,28347,0,0,0,\n0,0,0,0,0,28348,0,0,0,0,0,28411,0,28412,28413,0,28416,0,0,0,28420,0,0,0,0,0,\n28421,0,0,0,0,28423,0,0,0,28424,0,0,28428,0,0,0,0,0,28429,0,0,0,28431,28434,0,\n28458,0,0,0,0,0,0,0,0,0,0,0,28464,0,0,0,0,28465,0,28467,0,0,0,0,0,0,28471,0,0,0,\n0,28474,0,28480,0,28481,0,0,28485,0,0,0,0,28486,28488,0,0,28489,0,0,0,0,28492,0,\n0,0,28495,0,28497,0,28499,0,0,0,0,28500,0,0,28502,28503,0,0,0,28508,0,0,0,28510,\n0,0,28512,28513,28514,28521,0,28526,0,28527,28528,0,0,0,0,28529,0,0,28532,0,0,\n28537,28538,0,0,0,28539,0,28548,0,28553,28554,0,0,0,0,0,0,0,0,0,0,0,0,28560,\n28563,0,0,28564,0,0,0,0,28565,0,0,0,0,0,0,0,28566,28568,0,0,0,0,0,0,28569,0,0,0,\n28570,0,28572,28573,0,0,0,0,28575,0,0,0,0,28576,28581,28588,0,0,28589,0,0,0,\n28590,28595,0,28598,0,0,28601,0,0,28605,0,0,0,0,28614,28615,28619,0,0,0,0,0,0,\n28620,0,28626,0,0,28628,0,28631,0,28632,0,0,0,0,0,0,28635,0,0,0,28637,28638,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28639,0,28643,0,0,28652,0,0,0,28662,0,\n28670,28671,0,0,0,0,0,0,0,0,0,28672,28673,28675,28676,0,0,0,0,0,0,0,28691,0,0,0,\n28695,0,0,0,28696,0,28697,28698,0,28705,0,28707,28708,28710,0,0,0,0,0,0,0,28711,\n28728,0,0,0,28736,0,0,0,28737,0,0,0,0,0,0,0,0,0,28738,0,28739,0,28741,0,0,28742,\n0,0,0,0,0,0,0,0,0,0,0,28745,0,0,0,0,0,0,28749,28750,28752,28754,28756,0,28757,0,\n0,0,0,28759,28760,0,0,0,0,0,0,28762,0,0,0,28764,0,0,0,0,0,0,28766,0,28767,28768,\n0,0,0,0,28769,28770,0,0,0,0,0,0,0,0,0,0,0,0,0,28771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\n0,28772,0,28773,0,28782,0,0,0,0,0,0,28784,0,28785,0,28786,0,0,0,28787,0,0,0,\n28797,0,0,0,0,0,0,28799,0,0,28801,0,0,0,0,28802,0,28805,0,0,28806,0,0,28807,0,0,\n0,0,0,0,0,28808,0,0,0,0,0,28810,28812,0,0,28816,28819,0,0,28821,0,28826,0,0,0,\n28842,28852,0,0,28853,0,28854,28855,0,0,0,28857,0,0,0,28858,0,28867,28868,28869,\n0,0,0,28874,28880,28882,28890,28892,0,0,0,0,0,0,0,28895,0,0,0,28898,28899,0,0,0,\n28900,0,0,28904,0,28906,0,0,0,0,28907,0,0,0,0,0,0,28908,0,0,0,28910,0,28914,0,0,\n0,0,0,0,0,28915,28916,28919,0,0,28920,0,28921,0,0,0,0,0,0,0,0,28924,0,0,0,0,\n28926,28929,0,0,0,28930,0,28936,0,28939,0,0,0,0,28942,0,0,0,0,0,0,28956,0,0,0,\n28966,0,0,0,0,28967,0,0,0,0,0,0,0,0,0,28968,0,28971,0,28975,28976,0,28982,28983,\n0,0,28984,28989,28996,28997,28998,0,0,0,0,0,0,28999,0,0,0,0,0,29000,0,29001,0,0,\n0,29009,0,0,29011,0,0,29021,0,0,0,0,29024,0,29025,0,0,0,0,0,29026,0,0,0,29036,0,\n0,0,29037,0,0,0,0,29038,0,29045,0,29047,0,0,0,0,0,0,0,0,0,29051,0,0,0,29054,\n29056,29062,0,29070,29082,0,0,0,29083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29084,0,0,\n0,0,29085,29088,0,0,0,0,0,0,0,29090,29097,0,0,0,29103,0,0,0,0,0,0,0,0,29105,0,0,\n0,0,0,29107,0,29109,0,0,0,29115,0,0,29120,0,0,29138,29140,0,0,0,0,0,0,0,0,0,\n29152,0,29160,29174,0,29176,0,0,29180,0,29181,0,0,0,0,0,0,0,0,29228,0,0,29229,0,\n0,29230,0,0,0,0,0,0,0,0,0,0,29234,0,0,0,29241,0,29245,0,29248,0,29250,29256,\n29280,0,29282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29285,0,0,29286,29291,29292,0,0,0,0,\n29294,0,29295,0,0,0,0,0,29296,29297,29298,29300,0,29302,0,0,29304,29307,0,29312,\n0,0,0,29322,0,0,29323,0,0,29324,29326,29328,0,29335,0,0,0,0,0,0,0,29338,29339,0,\n0,0,0,0,29341,29343,0,0,0,0,29344,0,0,0,0,0,29345,0,0,0,0,29346,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,29347,29348,29349,0,0,29354,0,0,29355,0,0,0,0,0,0,0,0,29357,0,0,\n0,0,29364,0,29365,0,0,0,0,0,0,0,29366,0,0,29368,0,0,0,0,0,0,0,0,29378,0,29381,0,\n0,0,0,0,0,0,0,29386,0,0,0,0,0,0,29389,0,0,0,29390,0,0,29391,29397,0,29398,29412,\n29414,29418,29419,0,0,0,0,0,0,0,29420,0,0,0,0,0,0,0,29423,0,0,0,29435,0,0,0,\n29437,0,0,29439,0,29441,0,0,0,0,29443,0,29446,29450,29452,0,0,0,0,0,29456,0,0,0,\n0,0,29461,0,0,0,29464,0,0,0,0,0,0,0,0,29468,0,29473,0,0,0,29486,0,0,0,29490,0,0,\n0,29491,29492,0,0,29497,0,0,0,29498,0,29499,0,29502,29505,0,29509,0,0,0,29510,0,\n0,0,29512,0,0,0,29516,0,0,0,0,0,0,0,0,29518,0,29519,0,0,0,0,0,29520,29521,29529,\n0,0,0,0,0,0,0,0,29530,0,0,29531,29538,0,29540,0,0,0,29542,0,29543,29544,29547,0,\n0,29548,0,0,0,29549,0,0,0,29550,0,0,29552,0,0,0,0,29558,29561,0,29562,29564,0,0,\n29565,0,0,29566,0,0,0,0,0,0,0,0,0,0,29578,29584,29586,29591,0,0,0,0,29593,29594,\n0,0,29597,0,0,29613,0,29614,0,29615,0,0,0,0,29616,29617,0,0,29625,0,0,0,29632,0,\n0,0,0,0,0,0,29633,0,0,0,0,0,29634,29635,29637,0,29638,0,29641,29643,0,0,0,0,0,0,\n29644,0,29645,0,29649,0,0,0,29650,0,29653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29656,\n29659,0,0,29660,0,0,0,29661,0,0,0,0,0,29664,0,0,0,29671,29673,0,0,0,0,0,0,0,\n29675,0,29677,29679,0,0,29684,0,0,0,0,0,29685,0,0,0,29687,0,0,0,29688,0,29689,\n29690,29700,0,29701,0,0,0,29702,0,29706,0,0,0,0,0,0,0,29720,0,29721,0,29727,0,\n29733,29734,0,29750,29761,0,29763,0,0,0,0,0,29764,0,0,29765,0,0,0,29771,0,0,0,0,\n0,0,0,0,0,0,0,0,29772,0,0,0,29773,29774,29775,0,0,0,0,0,0,0,0,0,0,0,29822,0,0,0,\n29824,0,29825,0,0,0,0,0,29827,0,0,0,0,0,0,0,0,29829,0,29832,29834,0,0,29835,0,0,\n29837,29838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29843,0,0,0,0,29844,29845,0,0,0,\n0,0,0,0,0,0,29849,0,0,29869,29872,29890,29905,0,0,0,0,0,29907,29921,0,29922,0,0,\n29923,29926,29944,29946,0,0,0,0,0,0,0,29947,29948,0,0,0,29951,0,0,0,0,0,29953,0,\n0,29956,0,29957,0,0,29962,0,0,0,0,29971,0,0,0,29972,0,0,0,0,0,29978,0,29979,\n29992,30007,30008,30010,0,0,0,30013,0,0,0,0,30014,30016,0,0,0,0,0,0,0,0,0,0,0,\n30017,0,0,0,0,0,30023,30031,0,0,30033,0,0,0,0,0,0,0,0,0,0,30034,0,30038,0,30039,\n0,30040,0,0,0,0,0,0,30067,30068,0,0,0,30069,0,30072,0,0,0,30073,0,0,0,0,30075,0,\n0,0,0,0,0,30079,0,0,30080,0,0,0,0,0,30082,0,0,0,0,0,0,0,0,0,0,0,30084,30090,0,0,\n30091,0,0,0,0,30098,30118,0,30119,0,30121,30130,0,0,0,0,0,0,0,0,0,0,0,0,0,30131,\n30132,30133,0,0,0,0,0,0,30135,0,0,0,0,0,0,0,0,0,0,0,30136,0,0,30137,30138,0,0,0,\n30139,30146,0,0,0,0,0,30147,0,0,30148,30151,0,0,0,30168,0,30172,30173,0,0,0,0,0,\n0,0,0,30180,30181,0,30192,0,0,0,0,0,0,0,30194,30196,0,0,30199,0,0,30202,0,0,0,0,\n30203,0,0,0,0,0,0,0,0,0,0,30213,0,0,0,30216,0,0,30217,0,0,0,30218,0,0,0,0,30219,\n0,30220,0,30222,30227,0,0,0,0,0,30231,0,0,30233,30235,0,0,0,0,30238,0,30240,\n30243,30245,0,30250,30252,0,0,0,30269,0,0,30271,30272,0,0,0,30278,30280,0,0,\n30282,0,30284,0,30294,0,0,0,0,30295,30296,0,0,0,0,0,30298,30299,30302,30304,\n30306,0,0,0,0,0,0,30316,30317,0,0,0,30318,0,0,0,30319,0,30320,30322,30326,0,0,0,\n0,0,30327,0,30332,30348,30349,0,0,30356,0,0,0,0,0,0,0,0,30357,0,30358,0,30359,\n30360,0,0,30365,30366,30378,0,0,0,0,30379,0,0,30381,0,30385,0,30388,30397,0,0,0,\n30401,0,0,0,0,30403,0,0,0,0,0,30404,0,0,30405,0,30406,30408,0,30409,0,30410,0,0,\n0,30417,0,0,30418,30419,0,30420,0,30424,0,0,0,30427,30430,30432,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,30433,0,0,0,0,0,0,0,30436,0,30437,30438,0,30441,30442,0,0,\n0,30445,0,0,0,0,30452,30456,30457,0,0,0,30458,0,30464,0,0,0,0,0,0,30467,0,30469,\n0,0,0,0,0,30477,0,0,30484,0,0,0,0,0,30485,0,0,0,0,0,30486,30487,30497,30498,0,0,\n0,0,0,0,0,0,0,0,30505,0,30508,0,0,0,30509,30510,0,30514,30516,0,0,0,0,0,0,0,0,0,\n0,0,30523,0,30524,0,30525,0,0,0,0,30537,0,0,30538,0,0,0,0,0,30553,0,0,30555,\n30556,30558,30559,30560,0,0,30561,0,30562,0,0,0,0,0,0,0,0,30563,30570,30571,0,\n30586,30587,0,0,30590,0,0,30594,0,0,0,0,30611,30612,30623,30634,0,0,30636,30640,\n30655,30656,0,30657,0,0,30658,30669,0,30670,0,30676,30678,0,0,0,0,0,0,0,30679,0,\n0,0,0,0,0,0,0,0,0,0,30695,0,0,30698,0,0,0,0,30700,0,0,0,0,30701,0,30702,30703,0,\n0,0,0,30707,0,0,0,30709,0,0,30710,30719,30729,0,0,0,0,0,0,0,0,0,30731,0,0,30733,\n0,0,0,30734,0,0,0,0,0,30736,30737,0,0,0,30740,0,0,0,30743,0,30746,0,30747,30748,\n0,0,30751,30752,30753,0,0,0,30754,0,0,30760,0,0,0,0,0,0,0,30763,0,30764,0,0,\n30766,0,30769,30770,30771,30774,30777,0,0,30779,30780,30781,0,0,0,0,30790,0,0,0,\n30792,0,0,0,0,30810,0,0,0,0,0,0,0,30812,30819,0,0,30823,30824,0,30825,0,30827,0,\n0,0,0,0,0,30828,0,0,30830,0,0,0,30834,0,30835,0,30837,30838,0,30845,0,0,0,0,0,\n30846,30847,0,0,30849,0,30851,0,0,0,0,0,30852,30858,0,0,30859,0,30865,0,0,30866,\n0,0,30868,0,0,30869,0,0,0,30881,30883,0,0,0,0,0,30889,0,30891,0,0,0,0,30894,0,\n30895,0,30897,0,30898,0,0,0,30904,30906,0,30909,0,0,0,0,0,0,30910,0,0,0,30915,\n30933,30942,0,0,0,0,30943,0,0,30945,0,0,0,0,0,0,30946,0,0,30947,0,0,30955,30956,\n0,0,30960,0,0,30961,30962,30966,0,0,30969,30974,0,0,0,30976,0,0,30977,0,30978,\n30982,0,0,0,0,0,0,0,30994,30995,30998,0,31000,0,0,31001,0,0,31003,31005,0,0,\n31006,31011,0,0,31014,0,31016,0,0,0,0,31018,0,0,31020,31023,31024,31025,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,31027,31028,31029,0,0,0,0,0,0,31032,0,0,0,0,0,0,0,0,0,0,0,\n31036,31037,31038,0,0,0,31041,31043,31045,0,31047,0,0,0,31048,0,31049,0,0,0,\n31053,31054,31055,0,0,31063,0,0,0,0,0,31066,0,31068,31071,0,0,0,31072,31073,0,0,\n0,0,31075,0,0,31076,0,0,0,31077,31079,0,31080,0,0,0,0,0,0,0,0,0,0,31087,0,31142,\n0,31144,0,0,31145,31146,31147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31149,0,31151,31152,0,\n0,0,0,0,0,0,31162,31171,31174,31175,0,0,0,31176,0,0,0,0,0,0,0,31179,0,0,0,31186,\n0,0,0,31192,31195,0,0,31196,0,0,0,0,0,0,0,0,31198,0,0,0,0,0,31199,0,0,0,31205,0,\n0,0,0,31211,31215,0,0,0,0,31231,0,31232,0,0,0,0,0,0,0,0,0,0,31233,31236,31253,0,\n31254,0,0,0,0,0,0,31255,0,0,31257,0,0,0,0,0,0,0,0,0,31258,31259,0,0,31260,0,\n31261,0,0,0,0,0,31262,31263,0,0,31264,0,31266,0,31267,0,0,0,0,0,31281,0,31282,0,\n31284,0,0,31285,31287,31288,0,0,31290,0,0,0,31292,31295,0,31299,0,31300,0,0,0,0,\n0,31302,0,0,0,0,31303,0,0,0,0,0,0,31304,0,0,0,0,0,31305,31308,31309,31315,0,\n31317,0,0,0,0,0,31323,0,31324,0,0,0,0,0,31325,31327,0,0,31331,0,0,0,0,0,31333,0,\n0,0,0,0,31336,0,0,31337,0,0,0,0,0,0,31338,0,0,0,0,0,0,0,0,0,0,0,0,31339,0,0,0,0,\n0,0,0,31342,0,0,0,0,31345,0,0,0,0,0,0,0,0,31347,0,0,0,0,0,0,31348,0,0,31350,\n31351,0,31352,0,0,31354,0,0,0,0,31355,0,0,31356,0,0,0,0,0,0,0,0,0,0,31363,0,\n31372,0,0,31373,0,0,0,0,0,0,0,0,0,31376,0,31388,0,31389,0,31392,0,31401,0,31405,\n31407,31408,0,31409,0,0,0,0,0,0,31413,31415,0,0,0,31416,31418,0,0,0,0,0,0,31422,\n31423,0,0,31424,0,31425,31432,0,0,0,0,0,0,0,0,0,31433,0,0,0,0,0,0,0,0,31434,0,0,\n0,0,0,0,31435,0,0,0,0,31438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31442,0,31444,0,\n31448,0,0,31451,0,0,0,0,31452,0,31461,31465,0,0,31466,0,0,31467,0,0,31468,0,0,0,\n31469,31473,0,31476,0,0,0,0,31489,31490,0,0,0,0,0,0,0,31492,31493,31494,0,0,0,0,\n31501,31504,31505,0,0,0,0,0,0,0,0,0,31509,0,0,0,0,31510,0,0,31511,0,0,31513,0,0,\n0,0,0,0,0,0,0,31514,0,31522,31536,31539,31540,0,31541,0,0,0,0,0,0,31546,31553,\n31559,0,0,0,31560,31561,31562,0,0,31564,31567,0,31569,0,0,0,31570,0,0,0,0,31571,\n0,0,0,0,0,0,31572,31574,31580,31581,0,0,31582,31584,31585,31586,31595,0,31596,0,\n0,0,0,31597,0,31599,0,31600,31601,0,0,31603,31604,0,0,31608,31610,0,0,0,31611,0,\n31615,0,0,0,0,31616,0,0,0,0,0,0,31617,0,0,0,0,0,31618,0,0,0,0,0,0,31621,0,0,0,0,\n0,0,0,0,0,31622,31625,0,0,0,0,31627,0,31641,0,0,31642,0,0,31643,0,0,0,0,0,0,0,0,\n0,31644,0,31646,0,0,0,0,31648,0,0,0,31652,0,0,0,31657,0,0,31676,0,0,0,0,0,0,0,\n31689,31691,31692,0,31694,0,0,0,31696,0,31702,0,31703,0};\n\nconst BROTLI_MODEL(\"small\")\nDictWord kStaticDictionaryWords[BROTLI_ENC_STATIC_DICT_LUT_NUM_ITEMS] = {\n{0,0,0},{8,0,1002},{136,0,1015},{4,0,683},{4,10,325},{138,10,125},{7,11,572},{9,\n11,592},{11,11,680},{11,11,842},{11,11,924},{12,11,356},{12,11,550},{13,11,317},\n{13,11,370},{13,11,469},{13,11,471},{14,11,397},{18,11,69},{146,11,145},{134,0,\n1265},{136,11,534},{134,0,1431},{11,0,138},{140,0,40},{4,0,155},{4,10,718},{7,0,\n1689},{135,10,1216},{4,0,245},{5,0,151},{5,0,741},{6,0,1147},{7,0,498},{7,0,870}\n,{7,0,1542},{12,0,213},{14,0,36},{14,0,391},{17,0,111},{18,0,6},{18,0,46},{18,0,\n151},{19,0,36},{20,0,32},{20,0,56},{20,0,69},{20,0,102},{21,0,4},{22,0,8},{22,0,\n10},{22,0,14},{150,0,31},{4,0,624},{135,0,1752},{5,10,124},{5,10,144},{6,10,548}\n,{7,10,15},{7,10,153},{137,10,629},{6,0,503},{7,10,1531},{8,10,416},{9,0,586},{9\n,10,275},{10,10,100},{11,10,658},{11,10,979},{12,10,86},{13,0,468},{14,0,66},{14\n,10,207},{15,10,20},{15,10,25},{144,0,58},{5,0,603},{5,10,915},{6,10,1783},{7,0,\n1212},{7,10,211},{7,10,1353},{9,0,565},{9,10,83},{10,10,376},{10,10,431},{11,10,\n543},{12,10,664},{13,10,280},{13,10,428},{14,0,301},{14,10,128},{17,10,52},{145,\n10,81},{4,0,492},{133,0,451},{135,0,835},{141,0,70},{132,0,539},{7,11,748},{139,\n11,700},{7,11,1517},{11,11,597},{14,11,76},{14,11,335},{148,11,33},{6,0,113},{\n135,0,436},{4,10,338},{133,10,400},{136,0,718},{133,11,127},{133,11,418},{6,0,\n1505},{6,11,198},{7,0,520},{11,10,892},{140,11,83},{4,10,221},{5,10,659},{5,10,\n989},{7,10,697},{7,10,1211},{138,10,284},{135,0,1070},{5,11,276},{6,11,55},{135,\n11,1369},{134,0,1515},{6,11,1752},{136,11,726},{138,10,507},{4,10,188},{7,10,805\n},{143,0,78},{5,10,884},{139,10,991},{133,11,764},{134,10,1653},{6,11,309},{7,11\n,331},{138,11,550},{135,11,1861},{132,11,348},{135,11,986},{135,11,1573},{12,0,\n610},{13,0,431},{144,0,59},{9,11,799},{140,10,166},{134,0,1530},{132,0,750},{132\n,0,307},{133,0,964},{6,11,194},{7,11,133},{10,11,493},{10,11,570},{139,11,664},{\n5,11,24},{5,11,569},{6,11,3},{6,11,119},{6,11,143},{6,11,440},{7,11,295},{7,11,\n599},{7,11,1686},{7,11,1854},{8,11,424},{9,11,43},{9,11,584},{9,11,760},{10,11,\n148},{10,11,328},{11,11,159},{11,11,253},{11,11,506},{12,11,487},{12,11,531},{\n144,11,33},{136,10,760},{5,11,14},{5,11,892},{6,11,283},{7,11,234},{136,11,537},\n{135,11,1251},{4,11,126},{8,11,635},{147,11,34},{4,11,316},{135,11,1561},{6,0,\n999},{6,0,1310},{137,11,861},{4,11,64},{5,11,352},{5,11,720},{6,11,368},{139,11,\n359},{4,0,75},{5,0,180},{6,0,500},{7,0,58},{7,0,710},{8,10,770},{138,0,645},{133\n,0,649},{6,0,276},{7,0,282},{7,0,879},{7,0,924},{8,0,459},{9,0,599},{9,0,754},{\n11,0,574},{12,0,128},{12,0,494},{13,0,52},{13,0,301},{15,0,30},{143,0,132},{132,\n0,200},{4,10,89},{5,10,489},{6,10,315},{7,10,553},{7,10,1745},{138,10,243},{135,\n11,1050},{6,10,1658},{7,0,1621},{9,10,3},{10,10,154},{11,10,641},{13,10,85},{13,\n10,201},{141,10,346},{6,11,175},{137,11,289},{5,11,432},{133,11,913},{6,0,225},{\n137,0,211},{7,0,718},{8,0,687},{139,0,374},{4,10,166},{133,10,505},{6,10,1670},{\n137,0,110},{8,0,58},{9,0,724},{11,0,809},{13,0,113},{145,0,72},{6,0,345},{7,0,\n1247},{144,11,82},{5,11,931},{134,11,1698},{8,0,767},{8,0,803},{9,0,301},{137,0,\n903},{139,0,203},{134,0,1154},{7,0,1949},{136,0,674},{134,0,259},{135,0,1275},{5\n,11,774},{6,11,1637},{6,11,1686},{134,11,1751},{134,0,1231},{7,10,445},{8,10,307\n},{8,10,704},{10,10,41},{10,10,439},{11,10,237},{11,10,622},{140,10,201},{136,0,\n254},{6,11,260},{135,11,1484},{139,0,277},{135,10,1977},{4,10,189},{5,10,713},{6\n,11,573},{136,10,57},{138,10,371},{132,10,552},{134,11,344},{133,0,248},{6,11,\n240},{9,0,800},{10,0,693},{11,0,482},{11,0,734},{139,0,789},{4,0,116},{4,11,292}\n,{4,11,736},{5,0,95},{5,0,445},{5,11,871},{6,11,171},{6,11,1689},{7,0,1688},{7,\n11,1324},{7,11,1944},{8,0,29},{9,0,272},{9,11,415},{9,11,580},{11,0,509},{11,0,\n915},{14,11,230},{146,11,68},{7,0,490},{13,0,100},{143,0,75},{135,0,1641},{133,0\n,543},{7,11,209},{8,11,661},{10,11,42},{11,11,58},{12,11,58},{12,11,118},{141,11\n,32},{5,0,181},{6,11,63},{7,11,920},{136,0,41},{133,0,657},{133,11,793},{138,0,\n709},{7,0,25},{8,0,202},{138,0,536},{5,11,665},{135,10,1788},{145,10,49},{9,0,\n423},{140,0,89},{5,11,67},{6,11,62},{6,11,374},{135,11,1391},{8,0,113},{9,0,877}\n,{9,11,790},{10,0,554},{11,0,83},{12,0,136},{12,11,47},{147,0,109},{138,10,661},\n{4,0,963},{7,10,1945},{10,0,927},{142,0,442},{133,0,976},{132,0,206},{4,11,391},\n{135,11,1169},{134,0,2002},{6,0,696},{134,0,1008},{134,0,1170},{132,11,271},{7,0\n,13},{8,0,226},{10,0,537},{11,0,570},{11,0,605},{11,0,799},{11,0,804},{12,0,85},\n{12,0,516},{12,0,623},{12,11,314},{13,0,112},{13,0,361},{14,0,77},{14,0,78},{17,\n0,28},{147,0,110},{132,0,769},{134,0,1544},{4,0,551},{137,0,678},{5,10,84},{134,\n10,163},{9,0,57},{9,0,459},{10,0,425},{11,0,119},{12,0,184},{12,0,371},{13,0,358\n},{145,0,51},{4,11,253},{5,0,188},{5,0,814},{5,10,410},{5,11,544},{7,11,300},{8,\n0,10},{9,0,421},{9,0,729},{9,11,340},{10,0,609},{139,0,689},{134,0,624},{138,11,\n321},{135,0,1941},{5,10,322},{8,10,186},{9,10,262},{10,10,187},{14,10,208},{146,\n0,130},{5,11,53},{5,11,541},{6,11,94},{6,11,499},{7,11,230},{139,11,321},{133,10\n,227},{4,0,378},{4,11,920},{5,11,25},{5,11,790},{6,11,457},{135,11,853},{137,0,\n269},{132,0,528},{134,0,1146},{7,10,1395},{8,10,486},{9,10,236},{9,10,878},{10,\n10,218},{11,10,95},{19,10,17},{147,10,31},{7,10,2043},{8,10,672},{141,10,448},{\n134,0,1105},{134,0,1616},{134,11,1765},{140,11,163},{5,10,412},{133,11,822},{132\n,11,634},{6,0,656},{134,11,1730},{134,0,1940},{5,0,104},{6,0,173},{135,0,1631},{\n136,10,562},{6,11,36},{7,11,658},{8,11,454},{147,11,86},{5,0,457},{134,10,1771},\n{7,0,810},{8,0,138},{8,0,342},{9,0,84},{10,0,193},{11,0,883},{140,0,359},{7,10,\n1190},{137,0,620},{137,10,132},{7,11,975},{137,11,789},{6,0,95},{6,0,1934},{136,\n0,967},{141,11,335},{6,0,406},{10,0,409},{10,0,447},{11,0,44},{140,0,100},{4,10,\n317},{135,10,1279},{132,0,477},{134,0,1268},{5,10,63},{5,10,509},{6,0,1941},{136\n,0,944},{132,0,629},{132,11,104},{4,0,246},{133,0,375},{4,10,288},{134,0,1636},{\n135,11,1614},{8,10,89},{8,10,620},{9,0,49},{10,0,774},{11,10,628},{12,10,322},{\n143,10,124},{4,0,282},{7,0,1034},{11,0,398},{11,0,634},{12,0,1},{12,0,79},{12,0,\n544},{14,0,237},{17,0,10},{146,0,20},{132,0,824},{7,11,45},{9,11,542},{9,11,566}\n,{138,11,728},{5,0,118},{5,0,499},{6,0,476},{6,0,665},{6,0,1176},{6,0,1196},{7,0\n,600},{7,0,888},{135,0,1096},{7,0,296},{7,0,596},{8,0,560},{8,0,586},{9,0,612},{\n11,0,304},{12,0,46},{13,0,89},{14,0,112},{145,0,122},{5,0,894},{6,0,1772},{9,0,\n1009},{138,10,120},{5,11,533},{7,11,755},{138,11,780},{151,10,1},{6,0,1474},{7,\n11,87},{142,11,288},{139,0,366},{137,10,461},{7,11,988},{7,11,1939},{9,11,64},{9\n,11,502},{12,11,7},{12,11,34},{13,11,12},{13,11,234},{147,11,77},{7,0,1599},{7,0\n,1723},{8,0,79},{8,0,106},{8,0,190},{8,0,302},{8,0,383},{8,0,713},{9,0,119},{9,0\n,233},{9,0,419},{9,0,471},{10,0,181},{10,0,406},{11,0,57},{11,0,85},{11,0,120},{\n11,0,177},{11,0,296},{11,0,382},{11,0,454},{11,0,758},{11,0,999},{12,0,27},{12,0\n,98},{12,0,131},{12,0,245},{12,0,312},{12,0,446},{12,0,454},{13,0,25},{13,0,98},\n{13,0,426},{13,0,508},{14,0,70},{14,0,163},{14,0,272},{14,0,277},{14,0,370},{15,\n0,95},{15,0,138},{15,0,167},{17,0,38},{148,0,96},{135,10,1346},{10,0,200},{19,0,\n2},{151,0,22},{135,11,141},{134,10,85},{134,0,1759},{138,0,372},{145,0,16},{4,11\n,619},{136,0,943},{139,11,88},{5,11,246},{8,11,189},{9,11,355},{9,11,512},{10,11\n,124},{10,11,453},{11,11,143},{11,11,416},{11,11,859},{141,11,341},{5,0,258},{\n134,0,719},{6,0,1798},{6,0,1839},{8,0,900},{10,0,874},{10,0,886},{12,0,698},{12,\n0,732},{12,0,770},{16,0,106},{18,0,163},{18,0,170},{18,0,171},{152,0,20},{9,0,\n707},{9,11,707},{11,0,326},{11,0,339},{11,11,326},{11,11,339},{12,0,423},{12,0,\n502},{12,11,423},{12,11,502},{20,0,62},{148,11,62},{5,0,30},{7,0,495},{8,0,134},\n{9,0,788},{140,0,438},{133,11,678},{5,10,279},{6,10,235},{7,10,468},{8,10,446},{\n9,10,637},{10,10,717},{11,10,738},{140,10,514},{5,11,35},{6,11,287},{7,11,862},{\n7,11,1886},{138,11,179},{4,11,517},{7,0,1948},{135,0,2004},{5,10,17},{6,10,371},\n{137,10,528},{4,0,115},{5,0,669},{6,0,407},{8,0,311},{11,0,10},{141,0,5},{137,0,\n381},{5,0,50},{6,0,439},{7,0,780},{135,0,1040},{136,11,667},{11,11,403},{146,11,\n83},{5,0,1},{6,0,81},{138,0,520},{134,0,738},{5,0,482},{8,0,98},{9,0,172},{10,0,\n360},{10,0,700},{10,0,822},{11,0,302},{11,0,778},{12,0,50},{12,0,127},{12,0,396}\n,{13,0,62},{13,0,328},{14,0,122},{147,0,72},{9,11,157},{10,11,131},{140,11,72},{\n135,11,714},{135,11,539},{5,0,2},{6,0,512},{7,0,797},{7,0,1494},{8,0,253},{8,0,\n589},{9,0,77},{10,0,1},{10,0,129},{10,0,225},{11,0,118},{11,0,226},{11,0,251},{\n11,0,430},{11,0,701},{11,0,974},{11,0,982},{12,0,64},{12,0,260},{12,0,488},{140,\n0,690},{5,11,394},{7,11,367},{7,11,487},{7,11,857},{7,11,1713},{8,11,246},{9,11,\n537},{10,11,165},{12,11,219},{140,11,561},{136,0,557},{5,10,779},{5,10,807},{6,\n10,1655},{134,10,1676},{4,10,196},{5,10,558},{133,10,949},{11,11,827},{12,11,56}\n,{14,11,34},{143,11,148},{137,0,347},{133,0,572},{134,0,832},{4,0,12},{7,0,504},\n{7,0,522},{7,0,809},{8,0,797},{141,0,88},{4,10,752},{133,11,449},{7,11,86},{8,11\n,103},{145,11,69},{7,11,2028},{138,11,641},{5,0,528},{6,11,1},{142,11,2},{134,0,\n861},{4,10,227},{5,10,159},{5,10,409},{7,10,80},{10,0,294},{10,10,479},{12,10,\n418},{14,10,50},{14,10,249},{142,10,295},{7,10,1470},{8,10,66},{8,10,137},{8,10,\n761},{9,10,638},{11,10,80},{11,10,212},{11,10,368},{11,10,418},{12,10,8},{13,10,\n15},{16,10,61},{17,10,59},{19,10,28},{148,10,84},{7,11,1148},{148,0,109},{6,11,\n277},{7,11,1274},{7,11,1386},{7,11,1392},{12,11,129},{146,11,87},{6,11,187},{7,\n11,39},{7,11,1203},{8,11,380},{8,11,542},{14,11,117},{149,11,28},{134,0,1187},{5\n,0,266},{9,0,290},{9,0,364},{10,0,293},{11,0,606},{142,0,45},{6,11,297},{7,11,\n793},{139,11,938},{4,0,50},{6,0,594},{9,0,121},{10,0,49},{10,0,412},{139,0,834},\n{136,0,748},{7,11,464},{8,11,438},{11,11,105},{11,11,363},{12,11,231},{14,11,386\n},{15,11,102},{148,11,75},{132,0,466},{6,10,38},{7,10,1220},{8,10,185},{8,10,256\n},{9,10,22},{9,10,331},{10,10,738},{11,10,205},{11,10,540},{11,10,746},{13,0,399\n},{13,10,465},{14,0,337},{142,10,194},{9,0,378},{141,0,162},{137,0,519},{4,10,\n159},{6,10,115},{7,10,252},{7,10,257},{7,10,1928},{8,10,69},{9,10,384},{10,10,91\n},{10,10,615},{12,10,375},{14,10,235},{18,10,117},{147,10,123},{5,10,911},{5,11,\n604},{136,10,278},{132,0,667},{4,10,151},{7,10,1567},{8,0,351},{137,0,322},{134,\n0,902},{133,10,990},{5,10,194},{7,10,1662},{9,10,90},{140,0,180},{4,0,869},{134,\n0,1996},{134,0,813},{133,10,425},{137,11,761},{132,0,260},{133,10,971},{5,11,20}\n,{6,11,298},{7,11,659},{7,11,1366},{137,11,219},{4,0,39},{5,0,36},{7,0,1843},{8,\n0,407},{11,0,144},{140,0,523},{4,0,510},{10,0,587},{139,10,752},{7,0,29},{7,0,66\n},{7,0,1980},{10,0,487},{138,0,809},{9,10,662},{13,0,260},{14,0,82},{146,0,63},{\n5,10,72},{6,10,264},{7,10,21},{7,10,46},{7,10,2013},{8,10,215},{8,10,513},{10,10\n,266},{139,10,22},{134,0,570},{4,11,439},{6,0,565},{7,0,1667},{10,10,95},{11,10,\n603},{12,11,242},{13,10,443},{14,10,160},{143,10,4},{134,0,1464},{134,10,431},{5\n,10,874},{6,10,1677},{9,0,372},{15,0,2},{15,10,0},{19,0,10},{147,0,18},{132,0,\n787},{6,0,380},{7,10,939},{7,10,1172},{7,10,1671},{9,10,540},{10,10,696},{11,10,\n265},{11,10,732},{11,10,928},{11,10,937},{12,0,399},{13,10,438},{149,0,19},{137,\n0,200},{132,11,233},{132,0,516},{134,11,577},{132,0,844},{11,0,887},{14,0,365},{\n142,0,375},{132,11,482},{8,0,821},{140,0,44},{7,0,1655},{136,0,305},{5,10,682},{\n135,10,1887},{135,11,346},{132,10,696},{4,0,10},{7,0,917},{139,0,786},{5,11,795}\n,{6,11,1741},{8,11,417},{137,11,782},{4,0,1016},{134,0,2031},{4,10,726},{5,0,684\n},{133,10,630},{6,0,1021},{134,0,1480},{8,10,802},{136,10,838},{134,0,27},{134,0\n,395},{135,11,622},{7,11,625},{135,11,1750},{4,11,203},{135,11,1936},{6,10,118},\n{7,10,215},{7,10,1521},{140,10,11},{132,0,813},{136,0,511},{7,10,615},{138,10,\n251},{135,10,1044},{145,0,56},{133,10,225},{6,0,342},{6,0,496},{8,0,275},{137,0,\n206},{4,0,909},{133,0,940},{132,0,891},{7,11,311},{9,11,308},{140,11,255},{4,10,\n370},{5,10,756},{135,10,1326},{4,0,687},{134,0,1596},{134,0,1342},{6,10,1662},{7\n,10,48},{8,10,771},{10,10,116},{13,10,104},{14,10,105},{14,10,184},{15,10,168},{\n19,10,92},{148,10,68},{138,10,209},{4,11,400},{5,11,267},{135,11,232},{151,11,12\n},{6,0,41},{141,0,160},{141,11,314},{134,0,1718},{136,0,778},{142,11,261},{134,0\n,1610},{133,0,115},{132,0,294},{4,10,120},{142,0,314},{132,0,983},{5,0,193},{140\n,0,178},{138,10,429},{5,10,820},{135,10,931},{5,11,732},{6,0,994},{6,0,1051},{6,\n0,1439},{135,0,174},{4,11,100},{7,11,679},{8,11,313},{138,10,199},{6,10,151},{6,\n10,1675},{7,10,383},{151,10,10},{6,0,1796},{8,0,848},{8,0,867},{8,0,907},{10,0,\n855},{140,0,703},{140,0,221},{4,0,122},{5,0,796},{5,0,952},{6,0,1660},{6,0,1671}\n,{8,0,567},{9,0,687},{9,0,742},{10,0,686},{11,0,682},{11,0,909},{140,0,281},{5,\n11,362},{5,11,443},{6,11,318},{7,11,1019},{139,11,623},{5,11,463},{136,11,296},{\n6,10,1624},{11,0,583},{12,10,422},{13,0,262},{142,10,360},{5,0,179},{7,0,1095},{\n135,0,1213},{4,10,43},{4,11,454},{5,10,344},{133,10,357},{4,0,66},{7,0,722},{135\n,0,904},{134,0,773},{5,10,888},{135,0,352},{5,11,48},{5,11,404},{6,11,557},{7,11\n,458},{8,11,597},{10,11,455},{10,11,606},{11,11,49},{11,11,548},{12,11,476},{13,\n11,18},{141,11,450},{134,11,418},{132,10,711},{5,11,442},{135,11,1984},{141,0,35\n},{137,0,152},{134,0,1197},{135,11,1093},{137,11,203},{137,10,440},{10,0,592},{\n10,0,753},{12,0,317},{12,0,355},{12,0,465},{12,0,469},{12,0,560},{12,0,578},{141\n,0,243},{133,0,564},{134,0,797},{5,10,958},{133,10,987},{5,11,55},{7,11,376},{\n140,11,161},{133,11,450},{134,0,556},{134,0,819},{11,10,276},{142,10,293},{7,0,\n544},{138,0,61},{4,10,65},{5,10,479},{5,10,1004},{7,10,1913},{8,0,719},{8,10,317\n},{9,10,302},{10,10,612},{141,10,22},{4,0,5},{4,10,261},{4,11,213},{5,0,498},{7,\n10,510},{7,11,223},{8,0,637},{8,11,80},{137,0,521},{4,10,291},{5,0,927},{7,0,101\n},{7,11,381},{7,11,806},{7,11,820},{8,11,354},{8,11,437},{8,11,787},{9,10,515},{\n9,11,657},{10,11,58},{10,11,339},{10,11,749},{11,11,914},{12,10,152},{12,10,443}\n,{12,11,162},{13,10,392},{13,11,75},{14,10,357},{14,11,106},{14,11,198},{14,11,\n320},{14,11,413},{146,11,43},{6,0,1153},{7,0,1441},{136,11,747},{4,0,893},{5,0,\n780},{133,0,893},{138,11,654},{133,11,692},{133,0,238},{134,11,191},{4,10,130},{\n135,10,843},{5,10,42},{5,10,879},{6,0,1296},{7,10,245},{7,10,324},{7,10,1532},{\n11,10,463},{11,10,472},{13,10,363},{144,10,52},{134,0,1729},{6,0,1999},{136,0,\n969},{4,10,134},{133,10,372},{4,0,60},{7,0,941},{7,0,1800},{8,0,314},{9,0,700},{\n139,0,487},{134,0,1144},{6,11,162},{7,11,1960},{136,11,831},{132,11,706},{135,0,\n1147},{138,11,426},{138,11,89},{7,0,1853},{138,0,437},{136,0,419},{135,10,1634},\n{133,0,828},{4,10,644},{5,0,806},{7,0,176},{7,0,178},{7,0,1240},{135,0,1976},{\n135,11,1877},{5,11,420},{135,11,1449},{4,0,51},{5,0,39},{6,0,4},{7,0,591},{7,0,\n849},{7,0,951},{7,0,1613},{7,0,1760},{7,0,1988},{9,0,434},{10,0,754},{11,0,25},{\n139,0,37},{10,11,57},{138,11,277},{135,10,540},{132,11,204},{135,0,159},{139,11,\n231},{133,0,902},{7,0,928},{7,11,366},{9,11,287},{12,11,199},{12,11,556},{140,11\n,577},{6,10,623},{136,10,789},{4,10,908},{5,10,359},{5,10,508},{6,10,1723},{7,10\n,343},{7,10,1996},{135,10,2026},{134,0,270},{4,10,341},{135,10,480},{5,11,356},{\n135,11,224},{11,11,588},{11,11,864},{11,11,968},{143,11,160},{132,0,556},{137,0,\n801},{132,0,416},{142,0,372},{5,0,152},{5,0,197},{7,0,340},{7,0,867},{10,0,548},\n{10,0,581},{11,0,6},{12,0,3},{12,0,19},{14,0,110},{142,0,289},{139,0,369},{7,11,\n630},{9,11,567},{11,11,150},{11,11,444},{141,11,119},{134,11,539},{7,10,1995},{8\n,10,299},{11,10,890},{140,10,674},{7,0,34},{7,0,190},{8,0,28},{8,0,141},{8,0,444\n},{8,0,811},{9,0,468},{11,0,334},{12,0,24},{12,0,386},{140,0,576},{133,0,757},{7\n,0,1553},{136,0,898},{133,0,721},{136,0,1012},{4,0,789},{5,0,647},{135,0,1102},{\n132,0,898},{4,10,238},{5,10,503},{6,10,179},{7,10,2003},{8,10,381},{8,10,473},{9\n,10,149},{10,0,183},{10,10,788},{15,10,45},{15,10,86},{20,10,110},{150,10,57},{4\n,10,121},{5,10,156},{5,10,349},{9,0,136},{10,10,605},{14,10,342},{147,0,107},{4,\n11,235},{135,11,255},{4,11,194},{5,11,584},{6,11,384},{7,11,583},{10,11,761},{11\n,11,760},{139,11,851},{6,10,80},{6,10,1694},{7,10,173},{7,10,1974},{9,10,547},{\n10,10,730},{14,10,18},{150,10,39},{4,10,923},{134,10,1711},{5,0,277},{141,0,247}\n,{132,0,435},{133,11,562},{134,0,1311},{5,11,191},{137,11,271},{132,10,595},{7,\n11,1537},{14,11,96},{143,11,73},{5,0,437},{6,10,459},{7,0,502},{7,0,519},{7,0,\n1122},{7,0,1751},{7,10,1753},{7,10,1805},{8,10,658},{9,10,1},{11,10,959},{13,10,\n446},{142,0,211},{4,11,470},{5,11,473},{6,0,814},{6,11,153},{7,11,1503},{7,11,\n1923},{10,11,701},{11,11,132},{11,11,168},{11,11,227},{11,11,320},{11,11,436},{\n11,11,525},{11,11,855},{12,11,41},{12,11,286},{13,11,103},{13,11,284},{14,11,255\n},{14,11,262},{15,11,117},{143,11,127},{5,0,265},{6,0,212},{135,0,28},{138,0,750\n},{133,11,327},{6,11,552},{7,11,1754},{137,11,604},{134,0,2012},{132,0,702},{5,\n11,80},{6,11,405},{7,11,403},{7,11,1502},{7,11,1626},{8,11,456},{9,11,487},{9,11\n,853},{9,11,889},{10,11,309},{11,11,721},{11,11,994},{12,11,430},{141,11,165},{5\n,0,808},{135,0,2045},{5,0,166},{8,0,739},{140,0,511},{134,10,490},{4,11,453},{5,\n11,887},{6,11,535},{8,11,6},{136,11,543},{4,0,119},{5,0,170},{5,0,447},{7,0,1708\n},{7,0,1889},{9,0,357},{9,0,719},{12,0,486},{140,0,596},{137,0,500},{7,10,250},{\n136,10,507},{132,10,158},{6,0,809},{134,0,1500},{4,10,140},{7,10,362},{8,10,209}\n,{9,0,327},{9,10,10},{9,10,503},{9,10,614},{10,10,689},{11,0,350},{11,0,831},{11\n,10,327},{11,10,725},{12,10,252},{12,10,583},{13,0,352},{13,10,192},{14,10,269},\n{14,10,356},{148,10,50},{135,11,741},{4,0,450},{7,0,1158},{19,10,1},{19,10,26},{\n150,10,9},{6,0,597},{135,0,1318},{134,0,1602},{6,10,228},{7,10,1341},{9,10,408},\n{138,10,343},{7,0,1375},{7,0,1466},{138,0,331},{132,0,754},{132,10,557},{5,11,\n101},{6,11,88},{6,11,543},{7,11,1677},{9,11,100},{10,11,677},{14,11,169},{14,11,\n302},{14,11,313},{15,11,48},{143,11,84},{134,0,1368},{4,11,310},{9,11,795},{10,\n11,733},{11,11,451},{12,11,249},{14,11,115},{14,11,286},{143,11,100},{132,10,548\n},{7,10,197},{8,10,142},{8,10,325},{9,10,150},{9,10,596},{10,0,557},{10,10,353},\n{11,10,74},{11,10,315},{12,10,662},{12,10,681},{14,10,423},{143,10,141},{133,11,\n587},{5,0,850},{136,0,799},{10,0,908},{12,0,701},{12,0,757},{142,0,466},{4,0,62}\n,{5,0,275},{6,10,399},{6,10,579},{7,10,692},{7,10,846},{7,10,1015},{7,10,1799},{\n8,10,403},{9,10,394},{10,10,133},{12,10,4},{12,10,297},{12,10,452},{16,10,81},{\n18,0,19},{18,10,25},{21,10,14},{22,10,12},{151,10,18},{7,10,1546},{11,10,299},{\n12,0,459},{142,10,407},{132,10,177},{132,11,498},{7,11,217},{8,11,140},{138,11,\n610},{5,10,411},{135,10,653},{134,0,1802},{7,10,439},{10,10,727},{11,10,260},{\n139,10,684},{133,11,905},{11,11,580},{142,11,201},{134,0,1397},{5,10,208},{7,10,\n753},{135,10,1528},{7,0,238},{7,0,2033},{8,0,120},{8,0,188},{8,0,659},{9,0,598},\n{10,0,466},{12,0,342},{12,0,588},{13,0,503},{14,0,246},{143,0,92},{135,11,1041},\n{4,11,456},{7,11,105},{7,11,358},{7,11,1637},{8,11,643},{139,11,483},{6,0,1318},\n{134,0,1324},{4,0,201},{5,10,242},{7,0,1744},{8,0,602},{11,0,247},{11,0,826},{\n145,0,65},{8,0,164},{146,0,62},{133,10,953},{139,10,802},{133,0,615},{7,11,1566}\n,{8,11,269},{9,11,212},{9,11,718},{14,11,15},{14,11,132},{142,11,227},{133,10,\n290},{132,10,380},{5,10,52},{7,10,277},{9,10,368},{139,10,791},{135,0,1243},{133\n,11,539},{11,11,919},{141,11,409},{136,0,968},{133,11,470},{134,0,882},{132,0,\n907},{5,0,100},{10,0,329},{12,0,416},{149,0,29},{10,10,138},{139,10,476},{5,10,\n725},{5,10,727},{6,11,91},{7,10,1811},{135,11,435},{4,11,16},{5,11,316},{5,11,\n842},{6,11,370},{6,11,1778},{8,11,166},{11,11,812},{12,11,206},{12,11,351},{14,\n11,418},{16,11,15},{16,11,34},{18,11,3},{19,11,3},{19,11,7},{20,11,4},{149,11,21\n},{132,0,176},{5,0,636},{5,0,998},{7,0,9},{7,0,1508},{8,0,26},{9,0,317},{9,0,358\n},{10,0,210},{10,0,292},{10,0,533},{11,0,555},{12,0,526},{12,0,607},{13,0,263},{\n13,0,459},{142,0,271},{4,10,38},{6,0,256},{7,10,307},{7,10,999},{7,10,1481},{7,\n10,1732},{7,10,1738},{8,0,265},{9,10,414},{11,10,316},{12,10,52},{13,10,420},{\n147,10,100},{135,10,1296},{4,11,611},{133,11,606},{4,0,643},{142,11,21},{133,11,\n715},{133,10,723},{6,0,610},{135,11,597},{10,0,127},{141,0,27},{6,0,1995},{6,0,\n2001},{8,0,119},{136,0,973},{4,11,149},{138,11,368},{4,11,154},{5,10,109},{6,10,\n1784},{7,10,1895},{7,11,1134},{8,11,105},{12,0,522},{12,10,296},{140,10,302},{4,\n11,31},{6,11,429},{7,11,962},{9,11,458},{139,11,691},{4,11,312},{5,10,216},{7,10\n,1879},{9,10,141},{9,10,270},{9,10,679},{10,0,553},{10,10,159},{11,0,876},{11,10\n,197},{12,10,538},{12,10,559},{13,0,193},{13,0,423},{14,0,166},{14,10,144},{14,\n10,167},{15,10,67},{147,0,84},{134,0,1582},{7,0,1578},{135,11,1578},{137,10,81},\n{132,11,236},{134,10,391},{134,0,795},{7,10,322},{136,10,249},{5,11,836},{5,11,\n857},{6,11,1680},{7,11,59},{147,11,53},{135,0,432},{10,11,68},{139,11,494},{4,11\n,81},{139,11,867},{7,0,126},{136,0,84},{142,11,280},{5,11,282},{8,11,650},{9,11,\n295},{9,11,907},{138,11,443},{136,0,790},{5,10,632},{138,10,526},{6,0,64},{12,0,\n377},{13,0,309},{14,0,141},{14,0,429},{14,11,141},{142,11,429},{134,0,1529},{6,0\n,321},{7,0,1857},{7,10,948},{7,10,1042},{8,10,235},{8,10,461},{9,0,530},{9,10,\n453},{10,10,354},{17,10,77},{147,0,99},{7,0,1104},{11,0,269},{11,0,539},{11,0,\n627},{11,0,706},{11,0,975},{12,0,248},{12,0,434},{12,0,600},{12,0,622},{13,0,297\n},{13,0,485},{14,0,69},{14,0,409},{143,0,108},{4,10,362},{7,10,52},{7,10,303},{\n10,11,70},{12,11,26},{14,11,17},{14,11,178},{15,11,34},{149,11,12},{11,0,977},{\n141,0,507},{9,0,34},{139,0,484},{5,10,196},{6,10,486},{7,10,212},{8,10,309},{136\n,10,346},{6,0,1700},{7,0,26},{7,0,293},{7,0,382},{7,0,1026},{7,0,1087},{7,0,2027\n},{7,10,1912},{8,0,24},{8,0,114},{8,0,252},{8,0,727},{8,0,729},{9,0,30},{9,0,199\n},{9,0,231},{9,0,251},{9,0,334},{9,0,361},{9,0,712},{10,0,55},{10,0,60},{10,0,\n232},{10,0,332},{10,0,384},{10,0,396},{10,0,504},{10,0,542},{10,0,652},{11,0,20}\n,{11,0,48},{11,0,207},{11,0,291},{11,0,298},{11,0,342},{11,0,365},{11,0,394},{11\n,0,620},{11,0,705},{11,0,1017},{12,0,123},{12,0,340},{12,0,406},{12,0,643},{13,0\n,61},{13,0,269},{13,0,311},{13,0,319},{13,0,486},{14,0,234},{15,0,62},{15,0,85},\n{16,0,71},{18,0,119},{148,0,105},{4,11,71},{5,11,376},{7,11,119},{138,11,665},{4\n,10,686},{8,11,55},{10,0,918},{138,0,926},{138,10,625},{136,10,706},{132,11,479}\n,{4,10,30},{133,10,43},{6,0,379},{7,0,270},{7,11,607},{8,0,176},{8,0,183},{8,11,\n99},{9,0,432},{9,0,661},{12,0,247},{12,0,617},{18,0,125},{152,11,4},{5,0,792},{\n133,0,900},{4,11,612},{133,11,561},{4,10,220},{4,11,41},{5,11,74},{7,10,1535},{7\n,11,1627},{11,11,871},{140,11,619},{135,0,1920},{7,11,94},{11,11,329},{11,11,965\n},{12,11,241},{14,11,354},{15,11,22},{148,11,63},{9,11,209},{137,11,300},{134,0,\n771},{135,0,1979},{4,0,901},{133,0,776},{142,0,254},{133,11,98},{9,11,16},{141,\n11,386},{133,11,984},{4,11,182},{6,11,205},{135,11,220},{7,10,1725},{7,10,1774},\n{138,10,393},{5,10,263},{134,10,414},{4,11,42},{9,11,205},{9,11,786},{138,11,659\n},{14,0,140},{148,0,41},{6,10,178},{6,10,1750},{6,11,289},{7,11,1670},{8,0,440},\n{9,10,690},{10,0,359},{10,10,155},{10,10,373},{11,10,698},{12,11,57},{13,10,155}\n,{20,10,93},{151,11,4},{4,0,37},{5,0,334},{7,0,1253},{151,11,25},{4,0,508},{4,11\n,635},{5,10,97},{137,10,393},{139,11,533},{4,0,640},{133,0,513},{134,10,1639},{\n132,11,371},{4,11,272},{7,11,836},{7,11,1651},{145,11,89},{5,11,825},{6,11,444},\n{6,11,1640},{136,11,308},{4,10,191},{7,10,934},{8,10,647},{145,10,97},{12,0,246}\n,{15,0,162},{19,0,64},{20,0,8},{20,0,95},{22,0,24},{152,0,17},{4,0,533},{5,10,\n165},{9,10,346},{138,10,655},{5,11,737},{139,10,885},{133,10,877},{8,10,128},{\n139,10,179},{137,11,307},{140,0,752},{133,0,920},{135,0,1048},{5,0,153},{6,0,580\n},{6,10,1663},{7,10,132},{7,10,1154},{7,10,1415},{7,10,1507},{12,10,493},{15,10,\n105},{151,10,15},{5,10,459},{7,10,1073},{8,10,241},{136,10,334},{138,0,391},{135\n,0,1952},{133,11,525},{8,11,641},{11,11,388},{140,11,580},{142,0,126},{134,0,640\n},{132,0,483},{6,10,324},{6,10,520},{7,0,1616},{7,10,338},{7,10,1729},{8,10,228}\n,{9,0,69},{139,10,750},{5,11,493},{134,11,528},{135,0,734},{4,11,174},{135,11,\n911},{138,0,480},{9,0,495},{146,0,104},{135,10,705},{4,10,73},{6,10,612},{7,10,\n927},{7,10,1330},{7,10,1822},{8,10,217},{9,0,472},{9,10,765},{9,10,766},{10,10,\n408},{11,10,51},{11,10,793},{12,10,266},{15,10,158},{20,10,89},{150,10,32},{7,11\n,548},{137,11,58},{4,11,32},{5,11,215},{6,11,269},{7,11,1782},{7,11,1892},{10,11\n,16},{11,11,822},{11,11,954},{141,11,481},{132,0,874},{5,10,389},{8,10,636},{137\n,0,229},{7,11,1749},{136,11,477},{134,0,948},{5,11,308},{135,11,1088},{4,0,748},\n{139,0,1009},{136,10,21},{6,0,555},{135,0,485},{5,11,126},{8,11,297},{9,11,366},\n{9,11,445},{12,11,53},{12,11,374},{141,11,492},{7,11,1551},{139,11,361},{136,0,\n193},{136,0,472},{8,0,653},{13,0,93},{147,0,14},{132,0,984},{132,11,175},{4,11,\n685},{5,0,172},{134,0,1971},{149,11,8},{133,11,797},{5,10,189},{7,10,442},{7,10,\n443},{8,10,281},{12,10,174},{13,0,83},{141,10,261},{134,0,1568},{133,11,565},{\n139,0,384},{133,0,260},{6,10,2},{7,0,758},{7,0,880},{7,0,1359},{7,10,1262},{7,10\n,1737},{8,10,22},{8,10,270},{8,10,612},{9,0,164},{9,0,167},{9,10,312},{9,10,436}\n,{10,0,156},{10,0,588},{10,10,311},{10,10,623},{11,10,72},{11,10,330},{11,10,455\n},{12,0,101},{12,10,321},{12,10,504},{12,10,530},{12,10,543},{13,10,17},{13,10,\n156},{13,10,334},{14,0,48},{15,0,70},{17,10,60},{148,10,64},{4,11,252},{7,11,\n1068},{10,11,434},{11,11,228},{11,11,426},{13,11,231},{18,11,106},{148,11,87},{7\n,10,354},{10,10,410},{139,10,815},{6,0,367},{7,10,670},{7,10,1327},{8,10,411},{8\n,10,435},{9,10,653},{9,10,740},{10,10,385},{11,10,222},{11,10,324},{11,10,829},{\n140,10,611},{6,10,166},{7,0,1174},{135,10,374},{146,0,121},{132,0,828},{5,11,231\n},{138,11,509},{7,11,601},{9,11,277},{9,11,674},{10,11,178},{10,11,257},{10,11,\n418},{11,11,531},{11,11,544},{11,11,585},{12,11,113},{12,11,475},{13,11,99},{142\n,11,428},{134,0,1541},{135,11,1779},{5,0,343},{134,10,398},{135,10,50},{135,11,\n1683},{4,0,440},{7,0,57},{8,0,167},{8,0,375},{9,0,82},{9,0,561},{9,0,744},{9,11,\n744},{138,0,620},{134,0,926},{6,10,517},{7,10,1159},{10,10,621},{139,10,192},{\n137,0,827},{8,0,194},{136,0,756},{10,10,223},{139,10,645},{7,10,64},{136,10,245}\n,{4,11,399},{5,11,119},{5,11,494},{7,11,751},{137,11,556},{132,0,808},{135,0,22}\n,{7,10,1763},{140,10,310},{5,0,639},{6,11,584},{7,0,1249},{139,0,896},{134,0,\n1614},{135,0,860},{135,11,1121},{5,10,129},{6,10,61},{135,10,947},{4,0,102},{7,0\n,815},{7,0,1699},{139,0,964},{13,10,505},{141,10,506},{139,10,1000},{132,11,679}\n,{132,0,899},{132,0,569},{5,11,694},{137,11,714},{136,0,795},{6,0,2045},{139,11,\n7},{6,0,52},{9,0,104},{9,0,559},{12,0,308},{147,0,87},{4,0,301},{132,0,604},{133\n,10,637},{136,0,779},{5,11,143},{5,11,769},{6,11,1760},{7,11,682},{7,11,1992},{\n136,11,736},{137,10,590},{147,0,32},{137,11,527},{5,10,280},{135,10,1226},{134,0\n,494},{6,0,677},{6,0,682},{134,0,1044},{133,10,281},{135,10,1064},{5,11,860},{\n135,0,508},{6,11,422},{7,11,0},{7,11,1544},{9,11,577},{11,11,990},{12,11,141},{\n12,11,453},{13,11,47},{141,11,266},{134,0,1014},{5,11,515},{137,11,131},{134,0,\n957},{132,11,646},{6,0,310},{7,0,1849},{8,0,72},{8,0,272},{8,0,431},{9,0,12},{9,\n0,376},{10,0,563},{10,0,630},{10,0,796},{10,0,810},{11,0,367},{11,0,599},{11,0,\n686},{140,0,672},{4,11,396},{7,0,570},{7,10,120},{7,11,728},{8,10,489},{9,10,319\n},{9,11,117},{10,10,820},{11,10,1004},{12,10,379},{12,10,679},{13,10,117},{13,10\n,412},{13,11,202},{14,10,25},{15,10,52},{15,10,161},{16,10,47},{20,11,51},{149,\n10,2},{6,11,121},{6,11,124},{6,11,357},{7,11,1138},{7,11,1295},{8,11,162},{139,\n11,655},{4,10,937},{5,10,801},{8,0,449},{136,11,449},{139,11,958},{6,0,181},{7,0\n,537},{8,0,64},{9,0,127},{10,0,496},{12,0,510},{141,0,384},{138,11,253},{4,0,244\n},{135,0,233},{133,11,237},{132,10,365},{6,0,1650},{10,0,702},{139,0,245},{5,10,\n7},{139,10,774},{13,0,463},{13,11,463},{20,0,49},{148,11,49},{4,10,734},{5,10,\n662},{134,10,430},{4,10,746},{135,10,1090},{5,10,360},{136,10,237},{137,0,338},{\n143,11,10},{7,11,571},{138,11,366},{134,0,1279},{9,11,513},{10,11,22},{10,11,39}\n,{12,11,122},{140,11,187},{133,0,896},{146,0,178},{134,0,695},{137,0,808},{134,\n11,587},{7,11,107},{7,11,838},{8,11,550},{138,11,401},{7,0,1117},{136,0,539},{4,\n10,277},{5,10,608},{6,10,493},{7,10,457},{140,10,384},{133,11,768},{7,10,27},{7,\n10,316},{140,0,257},{140,0,1003},{4,0,207},{5,0,586},{5,0,676},{5,10,552},{6,0,\n448},{8,0,244},{11,0,1},{13,0,3},{16,0,54},{17,0,4},{146,0,13},{4,10,401},{137,\n10,264},{5,0,516},{7,0,1883},{135,11,1883},{4,11,894},{140,0,960},{5,0,4},{5,0,\n810},{6,0,13},{6,0,538},{6,0,1690},{6,0,1726},{7,0,499},{7,0,1819},{8,0,148},{8,\n0,696},{8,0,791},{12,0,125},{143,0,9},{135,0,1268},{9,10,543},{10,10,524},{11,0,\n30},{12,10,524},{14,0,315},{16,10,18},{20,10,26},{148,10,65},{4,10,205},{5,10,\n623},{6,0,748},{7,10,104},{136,10,519},{11,0,542},{139,0,852},{140,0,6},{132,0,\n848},{7,0,1385},{7,10,579},{9,10,41},{9,10,244},{9,10,669},{10,10,5},{11,0,582},\n{11,0,650},{11,0,901},{11,0,949},{11,10,861},{11,10,951},{11,10,980},{12,0,232},\n{12,0,236},{13,0,413},{13,0,501},{146,0,116},{4,0,945},{6,0,1811},{6,0,1845},{6,\n0,1853},{6,0,1858},{8,0,862},{12,0,782},{12,0,788},{18,0,160},{148,0,117},{132,\n10,717},{4,0,925},{5,0,803},{8,0,698},{138,0,828},{134,0,1416},{132,0,610},{139,\n0,992},{6,0,878},{134,0,1477},{135,0,1847},{138,11,531},{137,11,539},{134,11,272\n},{133,0,383},{134,0,1404},{132,10,489},{4,11,9},{5,11,128},{7,11,368},{11,11,\n480},{148,11,3},{136,0,986},{9,0,660},{138,0,347},{135,10,892},{136,11,682},{7,0\n,572},{9,0,592},{11,0,680},{12,0,356},{140,0,550},{7,0,1411},{138,11,527},{4,11,\n2},{7,11,545},{135,11,894},{137,10,473},{7,10,819},{7,11,481},{9,10,26},{9,10,\n392},{9,11,792},{10,10,152},{10,10,226},{11,0,64},{12,10,276},{12,10,426},{12,10\n,589},{13,10,460},{15,10,97},{19,10,48},{148,10,104},{135,10,51},{136,11,445},{\n136,11,646},{135,0,606},{132,10,674},{6,0,1829},{134,0,1830},{132,10,770},{5,10,\n79},{7,10,1027},{7,10,1477},{139,10,52},{5,11,530},{142,11,113},{134,10,1666},{7\n,0,748},{139,0,700},{134,10,195},{133,10,789},{4,10,251},{4,10,688},{7,10,513},{\n7,10,1284},{9,0,87},{138,0,365},{136,11,111},{133,0,127},{6,0,198},{140,0,83},{\n133,11,556},{133,10,889},{4,10,160},{5,10,330},{7,10,1434},{136,10,174},{5,0,276\n},{6,0,55},{7,0,1369},{138,0,864},{8,11,16},{140,11,568},{6,0,1752},{136,0,726},\n{135,0,1066},{133,0,764},{6,11,186},{137,11,426},{11,0,683},{139,11,683},{6,0,\n309},{7,0,331},{138,0,550},{133,10,374},{6,0,1212},{6,0,1852},{7,0,1062},{8,0,\n874},{8,0,882},{138,0,936},{132,11,585},{134,0,1364},{5,10,731},{135,0,986},{6,0\n,723},{6,0,1408},{138,0,381},{135,0,1573},{134,0,1025},{4,10,626},{5,10,642},{6,\n10,425},{10,10,202},{139,10,141},{4,11,93},{5,11,252},{6,11,229},{7,11,291},{9,\n11,550},{139,11,644},{137,11,749},{137,11,162},{132,11,381},{135,0,1559},{6,0,\n194},{7,0,133},{10,0,493},{10,0,570},{139,0,664},{5,0,24},{5,0,569},{6,0,3},{6,0\n,119},{6,0,143},{6,0,440},{7,0,295},{7,0,599},{7,0,1686},{7,0,1854},{8,0,424},{9\n,0,43},{9,0,584},{9,0,760},{10,0,148},{10,0,328},{11,0,159},{11,0,253},{11,0,506\n},{12,0,487},{140,0,531},{6,0,661},{134,0,1517},{136,10,835},{151,10,17},{5,0,14\n},{5,0,892},{6,0,283},{7,0,234},{136,0,537},{139,0,541},{4,0,126},{8,0,635},{147\n,0,34},{4,0,316},{4,0,495},{135,0,1561},{4,11,187},{5,11,184},{5,11,690},{7,11,\n1869},{138,11,756},{139,11,783},{4,0,998},{137,0,861},{136,0,1009},{139,11,292},\n{5,11,21},{6,11,77},{6,11,157},{7,11,974},{7,11,1301},{7,11,1339},{7,11,1490},{7\n,11,1873},{137,11,628},{7,11,1283},{9,11,227},{9,11,499},{10,11,341},{11,11,325}\n,{11,11,408},{14,11,180},{15,11,144},{18,11,47},{147,11,49},{4,0,64},{5,0,352},{\n5,0,720},{6,0,368},{139,0,359},{5,10,384},{8,10,455},{140,10,48},{5,10,264},{134\n,10,184},{7,0,1577},{10,0,304},{10,0,549},{12,0,365},{13,0,220},{13,0,240},{142,\n0,33},{134,0,1107},{134,0,929},{135,0,1142},{6,0,175},{137,0,289},{5,0,432},{133\n,0,913},{5,10,633},{6,0,279},{7,0,219},{135,10,1323},{7,0,785},{7,10,359},{8,10,\n243},{140,10,175},{139,0,595},{132,10,105},{8,11,398},{9,11,681},{139,11,632},{\n140,0,80},{5,0,931},{134,0,1698},{142,11,241},{134,11,20},{134,0,1323},{11,0,526\n},{11,0,939},{141,0,290},{5,0,774},{6,0,780},{6,0,1637},{6,0,1686},{6,0,1751},{8\n,0,559},{141,0,109},{141,0,127},{7,0,1167},{7,11,709},{11,0,934},{13,0,391},{145\n,0,76},{135,0,963},{6,0,260},{135,0,1484},{134,0,573},{4,10,758},{139,11,941},{\n135,10,1649},{145,11,36},{4,0,292},{137,0,580},{4,0,736},{5,0,871},{6,0,1689},{\n135,0,1944},{7,11,945},{11,11,713},{139,11,744},{134,0,1164},{135,11,937},{6,0,\n1922},{7,11,1652},{9,0,982},{15,0,173},{15,0,178},{15,0,200},{18,0,189},{18,0,\n207},{149,0,47},{7,0,1695},{139,10,128},{6,0,63},{135,0,920},{133,0,793},{143,11\n,134},{133,10,918},{5,0,67},{6,0,62},{6,0,374},{135,0,1391},{4,11,579},{5,11,226\n},{5,11,323},{7,11,960},{9,0,790},{140,0,47},{10,11,784},{141,11,191},{4,0,391},\n{135,0,1169},{137,0,443},{13,11,232},{146,11,35},{132,10,340},{132,0,271},{137,\n11,313},{5,11,973},{137,11,659},{134,0,1140},{6,11,135},{135,11,1176},{4,0,253},\n{5,0,544},{7,0,300},{137,0,340},{5,10,985},{7,0,897},{7,10,509},{145,10,96},{138\n,11,735},{135,10,1919},{138,0,890},{5,0,818},{134,0,1122},{5,0,53},{5,0,541},{6,\n0,94},{6,0,499},{7,0,230},{139,0,321},{4,0,920},{5,0,25},{5,0,790},{6,0,457},{7,\n0,853},{8,0,788},{142,11,31},{132,10,247},{135,11,314},{132,0,468},{6,10,337},{7\n,0,243},{7,10,494},{8,10,27},{8,10,599},{138,10,153},{4,10,184},{5,10,390},{7,10\n,618},{7,10,1456},{139,10,710},{134,0,870},{134,0,1238},{134,0,1765},{10,0,853},\n{10,0,943},{14,0,437},{14,0,439},{14,0,443},{14,0,446},{14,0,452},{14,0,469},{14\n,0,471},{14,0,473},{16,0,93},{16,0,102},{16,0,110},{148,0,121},{4,0,605},{7,0,\n518},{7,0,1282},{7,0,1918},{10,0,180},{139,0,218},{133,0,822},{4,0,634},{11,0,\n916},{142,0,419},{6,11,281},{7,11,6},{8,11,282},{8,11,480},{8,11,499},{9,11,198}\n,{10,11,143},{10,11,169},{10,11,211},{10,11,417},{10,11,574},{11,11,147},{11,11,\n395},{12,11,75},{12,11,407},{12,11,608},{13,11,500},{142,11,251},{134,0,898},{6,\n0,36},{7,0,658},{8,0,454},{150,11,48},{133,11,674},{135,11,1776},{4,11,419},{10,\n10,227},{11,10,497},{11,10,709},{140,10,415},{6,10,360},{7,10,1664},{136,10,478}\n,{137,0,806},{12,11,508},{14,11,102},{14,11,226},{144,11,57},{135,11,1123},{4,11\n,138},{7,11,1012},{7,11,1280},{137,11,76},{5,11,29},{140,11,638},{136,10,699},{\n134,0,1326},{132,0,104},{135,11,735},{132,10,739},{134,0,1331},{7,0,260},{135,11\n,260},{135,11,1063},{7,0,45},{9,0,542},{9,0,566},{9,10,869},{138,0,728},{4,10,67\n},{5,10,422},{7,10,1037},{7,10,1289},{7,10,1555},{9,10,741},{145,10,108},{139,0,\n263},{134,0,1516},{14,0,146},{15,0,42},{16,0,23},{17,0,86},{146,0,17},{138,0,468\n},{136,0,1005},{4,11,17},{5,11,23},{7,11,995},{11,11,383},{11,11,437},{12,11,460\n},{140,11,532},{7,0,87},{142,0,288},{138,10,96},{135,11,626},{144,10,26},{7,0,\n988},{7,0,1939},{9,0,64},{9,0,502},{12,0,22},{12,0,34},{13,0,12},{13,0,234},{147\n,0,77},{8,10,203},{11,10,823},{11,10,846},{12,10,482},{13,0,133},{13,10,277},{13\n,10,302},{13,10,464},{14,10,205},{142,10,221},{4,10,449},{133,10,718},{135,0,141\n},{6,0,1842},{136,0,872},{8,11,70},{12,11,171},{141,11,272},{4,10,355},{6,10,311\n},{9,10,256},{138,10,404},{132,0,619},{137,0,261},{10,10,758},{10,11,233},{139,\n11,76},{5,0,246},{8,0,189},{9,0,355},{9,0,512},{10,0,124},{10,0,453},{11,0,143},\n{11,0,416},{11,0,859},{141,0,341},{134,11,442},{133,10,827},{5,10,64},{140,10,\n581},{4,10,442},{7,10,1047},{7,10,1352},{135,10,1643},{134,11,1709},{5,0,678},{5\n,10,977},{6,0,305},{7,0,775},{135,0,1065},{11,11,69},{12,11,105},{12,11,117},{13\n,11,213},{14,11,13},{14,11,62},{14,11,177},{14,11,421},{15,11,19},{146,11,141},{\n137,11,309},{5,0,35},{7,0,862},{7,0,1886},{138,0,179},{136,0,285},{132,0,517},{7\n,11,976},{9,11,146},{10,11,206},{10,11,596},{13,11,218},{142,11,153},{132,10,254\n},{4,10,275},{6,0,214},{7,10,1219},{12,0,540},{140,10,376},{8,0,667},{11,0,403},\n{146,0,83},{10,11,648},{11,11,671},{12,0,74},{143,11,46},{135,0,125},{134,10,\n1753},{133,0,761},{4,11,518},{6,0,912},{6,10,369},{6,10,502},{7,10,1036},{7,11,\n1136},{8,10,348},{9,10,452},{10,10,26},{11,10,224},{11,10,387},{11,10,772},{12,\n10,95},{12,10,629},{13,10,195},{13,10,207},{13,10,241},{14,10,260},{14,10,270},{\n143,10,140},{10,0,131},{140,0,72},{132,10,269},{5,10,480},{7,10,532},{7,10,1197}\n,{7,10,1358},{8,10,291},{11,10,349},{142,10,396},{8,11,689},{137,11,863},{8,0,\n333},{138,0,182},{4,11,18},{7,11,145},{7,11,444},{7,11,1278},{8,11,49},{8,11,400\n},{9,11,71},{9,11,250},{10,11,459},{12,11,160},{144,11,24},{14,11,35},{142,11,\n191},{135,11,1864},{135,0,1338},{148,10,15},{14,0,94},{15,0,65},{16,0,4},{16,0,\n77},{16,0,80},{145,0,5},{12,11,82},{143,11,36},{133,11,1010},{133,0,449},{133,0,\n646},{7,0,86},{7,10,657},{136,0,103},{7,0,2028},{138,0,641},{136,10,533},{134,0,\n1},{139,11,970},{5,11,87},{7,11,313},{7,11,1103},{10,11,112},{10,11,582},{11,11,\n389},{11,11,813},{12,11,385},{13,11,286},{14,11,124},{146,11,108},{4,11,267},{\n134,0,869},{6,0,277},{7,0,1274},{7,0,1386},{146,0,87},{6,0,187},{7,0,39},{7,0,\n1203},{8,0,380},{14,0,117},{149,0,28},{4,10,211},{4,10,332},{5,10,335},{6,10,238\n},{7,10,269},{7,10,811},{7,10,1797},{8,10,836},{9,10,507},{141,10,242},{4,0,785}\n,{5,0,368},{6,0,297},{7,0,793},{139,0,938},{7,0,464},{8,0,558},{11,0,105},{12,0,\n231},{14,0,386},{15,0,102},{148,0,75},{133,10,1009},{8,0,877},{140,0,731},{139,\n11,289},{10,11,249},{139,11,209},{132,11,561},{134,0,1608},{132,11,760},{134,0,\n1429},{9,11,154},{140,11,485},{5,10,228},{6,10,203},{7,10,156},{8,10,347},{137,\n10,265},{7,0,1010},{11,0,733},{11,0,759},{13,0,34},{14,0,427},{146,0,45},{7,10,\n1131},{135,10,1468},{136,11,255},{7,0,1656},{9,0,369},{10,0,338},{10,0,490},{11,\n0,154},{11,0,545},{11,0,775},{13,0,77},{141,0,274},{133,11,621},{134,0,1038},{4,\n11,368},{135,11,641},{6,0,2010},{8,0,979},{8,0,985},{10,0,951},{138,0,1011},{134\n,0,1005},{5,10,291},{5,10,318},{7,10,765},{9,10,389},{12,10,548},{147,0,121},{5,\n0,20},{6,0,298},{7,0,659},{137,0,219},{7,0,1440},{11,0,854},{11,0,872},{11,0,921\n},{12,0,551},{13,0,472},{142,0,367},{5,0,490},{6,0,615},{6,0,620},{135,0,683},{6\n,0,1070},{134,0,1597},{139,0,522},{132,0,439},{136,0,669},{6,0,766},{6,0,1143},{\n6,0,1245},{10,10,525},{139,10,82},{9,11,92},{147,11,91},{6,0,668},{134,0,1218},{\n6,11,525},{9,11,876},{140,11,284},{132,0,233},{136,0,547},{132,10,422},{5,10,355\n},{145,10,0},{6,11,300},{135,11,1515},{4,0,482},{137,10,905},{4,0,886},{5,11,594\n},{135,0,346},{133,10,865},{5,10,914},{134,10,1625},{135,0,334},{5,0,795},{5,10,\n234},{134,0,1741},{135,10,1383},{6,11,1641},{136,11,820},{135,0,371},{7,11,1313}\n,{138,11,660},{135,10,1312},{135,0,622},{7,0,625},{135,0,1750},{135,0,339},{4,0,\n203},{135,0,1936},{15,0,29},{15,11,29},{16,0,38},{144,11,38},{5,0,338},{135,0,\n1256},{135,10,1493},{6,10,421},{7,10,61},{7,10,1540},{10,0,130},{138,10,501},{6,\n11,389},{7,11,149},{9,11,142},{138,11,94},{137,10,341},{11,0,678},{12,0,307},{\n142,10,98},{6,11,8},{7,11,1881},{136,11,91},{135,0,2044},{6,0,770},{6,0,802},{6,\n0,812},{6,10,102},{7,0,311},{7,10,72},{9,0,308},{12,0,255},{15,10,142},{147,10,\n67},{151,10,30},{135,10,823},{135,0,1266},{135,11,1746},{135,10,1870},{4,0,400},\n{5,0,267},{135,0,232},{7,11,24},{11,11,542},{139,11,852},{135,11,1739},{4,11,503\n},{135,11,1661},{5,11,130},{7,11,1314},{9,11,610},{10,11,718},{11,11,601},{11,11\n,819},{11,11,946},{140,11,536},{10,11,149},{11,11,280},{142,11,336},{7,0,739},{7\n,11,1946},{8,10,48},{8,10,88},{8,10,582},{8,10,681},{9,10,373},{9,10,864},{11,0,\n690},{11,10,157},{11,10,843},{148,10,27},{134,0,990},{4,10,88},{5,10,137},{5,10,\n174},{5,10,777},{6,10,1664},{6,10,1725},{7,10,77},{7,10,426},{7,10,1317},{7,10,\n1355},{8,10,126},{8,10,563},{9,10,523},{9,10,750},{10,10,310},{10,10,836},{11,10\n,42},{11,10,318},{11,10,731},{12,10,68},{12,10,92},{12,10,507},{12,10,692},{13,\n10,81},{13,10,238},{13,10,374},{14,10,436},{18,10,138},{19,10,78},{19,10,111},{\n20,10,55},{20,10,77},{148,10,92},{141,10,418},{4,10,938},{135,0,1831},{6,0,776},\n{134,0,915},{138,10,351},{5,11,348},{6,10,1668},{6,11,522},{7,10,1499},{8,10,117\n},{9,10,314},{138,10,174},{135,10,707},{132,0,613},{133,10,403},{132,11,392},{5,\n11,433},{9,11,633},{139,11,629},{133,0,763},{132,0,878},{132,0,977},{132,0,100},\n{4,10,44},{5,10,311},{6,0,463},{7,10,639},{7,10,762},{7,10,1827},{9,10,8},{9,10,\n462},{148,10,83},{134,11,234},{4,10,346},{7,10,115},{9,10,180},{9,10,456},{138,\n10,363},{5,0,362},{5,0,443},{6,0,318},{7,0,1019},{139,0,623},{5,0,463},{7,11,140\n},{7,11,1950},{8,0,296},{8,11,680},{11,11,817},{147,11,88},{7,11,1222},{138,11,\n386},{142,0,137},{132,0,454},{6,11,5},{7,0,1914},{7,10,1051},{9,10,545},{11,11,\n249},{12,11,313},{16,11,66},{145,11,26},{135,0,1527},{145,0,58},{148,11,59},{5,0\n,48},{5,0,404},{6,0,557},{7,0,458},{8,0,597},{10,0,455},{10,0,606},{11,0,49},{11\n,0,548},{12,0,476},{13,0,18},{141,0,450},{5,11,963},{134,11,1773},{133,0,729},{\n138,11,586},{5,0,442},{135,0,1984},{134,0,449},{144,0,40},{4,0,853},{7,11,180},{\n8,11,509},{136,11,792},{6,10,185},{7,10,1899},{9,10,875},{139,10,673},{134,11,\n524},{4,10,327},{5,10,478},{7,10,1332},{8,10,753},{140,0,227},{5,10,1020},{5,10,\n1022},{134,0,1491},{4,10,103},{133,10,401},{132,11,931},{4,10,499},{135,10,1421}\n,{5,0,55},{7,0,376},{140,0,161},{133,0,450},{6,0,1174},{134,0,1562},{7,11,1837},\n{10,0,62},{141,0,400},{140,0,207},{135,0,869},{4,11,773},{5,11,618},{137,11,756}\n,{132,10,96},{4,0,213},{7,0,223},{7,10,968},{136,0,80},{4,11,90},{5,11,337},{5,\n11,545},{7,11,754},{9,11,186},{10,11,72},{10,11,782},{11,11,513},{11,11,577},{11\n,11,610},{11,11,889},{11,11,961},{12,11,354},{12,11,362},{12,11,461},{12,11,595}\n,{13,11,79},{143,11,121},{7,0,381},{7,0,806},{7,0,820},{8,0,354},{8,0,437},{8,0,\n787},{9,0,657},{10,0,58},{10,0,339},{10,0,749},{11,0,914},{12,0,162},{13,0,75},{\n14,0,106},{14,0,198},{14,0,320},{14,0,413},{146,0,43},{136,0,747},{136,0,954},{\n134,0,1073},{135,0,556},{7,11,151},{9,11,329},{139,11,254},{5,0,692},{134,0,1395\n},{6,10,563},{137,10,224},{134,0,191},{132,0,804},{9,11,187},{10,11,36},{17,11,\n44},{146,11,64},{7,11,165},{7,11,919},{136,11,517},{4,11,506},{5,11,295},{7,11,\n1680},{15,11,14},{144,11,5},{4,0,706},{6,0,162},{7,0,1960},{136,0,831},{135,11,\n1376},{7,11,987},{9,11,688},{10,11,522},{11,11,788},{140,11,566},{150,0,35},{138\n,0,426},{135,0,1235},{135,11,1741},{7,11,389},{7,11,700},{7,11,940},{8,11,514},{\n9,11,116},{9,11,535},{10,11,118},{11,11,107},{11,11,148},{11,11,922},{12,11,254}\n,{12,11,421},{142,11,238},{134,0,1234},{132,11,743},{4,10,910},{5,10,832},{135,\n11,1335},{141,0,96},{135,11,185},{146,0,149},{4,0,204},{137,0,902},{4,11,784},{\n133,11,745},{136,0,833},{136,0,949},{5,11,81},{7,0,366},{7,11,146},{7,11,1342},{\n7,11,1446},{8,11,53},{8,11,561},{8,11,694},{8,11,754},{9,0,287},{9,11,97},{9,11,\n115},{9,11,894},{10,11,462},{10,11,813},{11,11,230},{11,11,657},{11,11,699},{11,\n11,748},{12,0,199},{12,0,556},{12,0,577},{12,11,119},{12,11,200},{12,11,283},{14\n,11,273},{145,11,15},{5,11,408},{137,11,747},{9,11,498},{140,11,181},{6,0,2020},\n{136,0,992},{5,0,356},{135,0,224},{134,0,784},{7,0,630},{8,10,528},{9,0,567},{9,\n10,348},{11,0,150},{11,0,444},{141,0,119},{134,0,539},{4,10,20},{133,10,616},{\n142,0,27},{7,11,30},{8,11,86},{8,11,315},{8,11,700},{9,11,576},{9,11,858},{11,11\n,310},{11,11,888},{11,11,904},{12,11,361},{141,11,248},{138,11,839},{134,0,755},\n{134,0,1063},{7,10,1091},{135,10,1765},{134,11,428},{7,11,524},{8,11,169},{8,11,\n234},{9,11,480},{138,11,646},{139,0,814},{7,11,1462},{139,11,659},{4,10,26},{5,\n10,429},{6,10,245},{7,10,704},{7,10,1379},{135,10,1474},{7,11,1205},{138,11,637}\n,{139,11,803},{132,10,621},{136,0,987},{4,11,266},{8,11,4},{9,11,39},{10,11,166}\n,{11,11,918},{12,11,635},{20,11,10},{22,11,27},{150,11,43},{4,0,235},{135,0,255}\n,{4,0,194},{5,0,584},{6,0,384},{7,0,583},{10,0,761},{11,0,760},{139,0,851},{133,\n10,542},{134,0,1086},{133,10,868},{8,0,1016},{136,0,1018},{7,0,1396},{7,11,1396}\n,{136,10,433},{135,10,1495},{138,10,215},{141,10,124},{7,11,157},{8,11,279},{9,\n11,759},{16,11,31},{16,11,39},{16,11,75},{18,11,24},{20,11,42},{152,11,1},{5,0,\n562},{134,11,604},{134,0,913},{5,0,191},{137,0,271},{4,0,470},{6,0,153},{7,0,\n1503},{7,0,1923},{10,0,701},{11,0,132},{11,0,227},{11,0,320},{11,0,436},{11,0,\n525},{11,0,855},{11,0,873},{12,0,41},{12,0,286},{13,0,103},{13,0,284},{14,0,255}\n,{14,0,262},{15,0,117},{143,0,127},{7,0,475},{12,0,45},{147,10,112},{132,11,567}\n,{137,11,859},{6,0,713},{6,0,969},{6,0,1290},{134,0,1551},{133,0,327},{6,0,552},\n{6,0,1292},{7,0,1754},{137,0,604},{4,0,223},{5,11,762},{6,0,359},{7,11,1880},{9,\n11,680},{11,0,3},{11,11,798},{13,0,108},{14,0,89},{144,0,22},{5,0,80},{6,0,405},\n{7,0,403},{7,0,1502},{8,0,456},{9,0,487},{9,0,853},{9,0,889},{10,0,309},{11,0,\n721},{11,0,994},{12,0,430},{141,0,165},{133,11,298},{132,10,647},{134,0,2016},{\n18,10,10},{146,11,10},{4,0,453},{5,0,887},{6,0,535},{8,0,6},{8,0,543},{136,0,826\n},{136,0,975},{10,0,961},{138,0,962},{138,10,220},{6,0,1891},{6,0,1893},{9,0,916\n},{9,0,965},{9,0,972},{12,0,801},{12,0,859},{12,0,883},{15,0,226},{149,0,51},{\n132,10,109},{135,11,267},{7,11,92},{7,11,182},{8,11,453},{9,11,204},{11,11,950},\n{12,11,94},{12,11,644},{16,11,20},{16,11,70},{16,11,90},{147,11,55},{134,10,1746\n},{6,11,71},{7,11,845},{7,11,1308},{8,11,160},{137,11,318},{5,0,101},{6,0,88},{7\n,0,263},{7,0,628},{7,0,1677},{7,11,237},{8,0,349},{8,11,664},{9,0,100},{9,11,42}\n,{9,11,266},{9,11,380},{9,11,645},{10,0,677},{10,11,177},{10,11,276},{14,0,169},\n{14,0,302},{14,0,313},{15,0,48},{143,0,84},{138,11,69},{4,0,310},{7,0,708},{7,0,\n996},{9,0,795},{10,0,390},{10,0,733},{11,0,451},{12,0,249},{14,0,115},{14,0,286}\n,{143,0,100},{4,10,40},{5,0,587},{10,10,67},{11,10,117},{11,10,768},{139,10,935}\n,{6,0,1942},{7,0,512},{136,0,983},{7,10,992},{8,10,301},{9,10,722},{12,10,63},{\n13,10,29},{14,10,161},{143,10,18},{136,11,76},{139,10,923},{134,0,645},{134,0,\n851},{4,0,498},{132,11,293},{7,0,217},{8,0,140},{10,0,610},{14,11,352},{17,11,53\n},{18,11,146},{18,11,152},{19,11,11},{150,11,54},{134,0,1448},{138,11,841},{133,\n0,905},{4,11,605},{7,11,518},{7,11,1282},{7,11,1918},{10,11,180},{139,11,218},{\n139,11,917},{135,10,825},{140,10,328},{4,0,456},{7,0,105},{7,0,358},{7,0,1637},{\n8,0,643},{139,0,483},{134,0,792},{6,11,96},{135,11,1426},{137,11,691},{4,11,651}\n,{133,11,289},{7,11,688},{8,11,35},{9,11,511},{10,11,767},{147,11,118},{150,0,56\n},{5,0,243},{5,0,535},{6,10,204},{10,10,320},{10,10,583},{13,10,502},{14,10,72},\n{14,10,274},{14,10,312},{14,10,344},{15,10,159},{16,10,62},{16,10,69},{17,10,30}\n,{18,10,42},{18,10,53},{18,10,84},{18,10,140},{19,10,68},{19,10,85},{20,10,5},{\n20,10,45},{20,10,101},{22,10,7},{150,10,20},{4,10,558},{6,10,390},{7,10,162},{7,\n10,689},{9,10,360},{138,10,653},{146,11,23},{135,0,1748},{5,10,856},{6,10,1672},\n{6,10,1757},{134,10,1781},{4,11,704},{5,0,539},{5,0,754},{134,0,876},{135,11,\n1078},{5,10,92},{10,10,736},{140,10,102},{5,10,590},{9,10,213},{145,0,91},{134,0\n,1565},{6,0,91},{135,0,435},{4,0,939},{140,0,792},{134,0,1399},{4,0,16},{4,11,\n720},{5,0,316},{5,0,842},{5,11,306},{6,0,370},{6,0,1778},{8,0,166},{11,0,812},{\n12,0,206},{12,0,351},{14,0,418},{16,0,15},{16,0,34},{18,0,3},{19,0,3},{19,0,7},{\n20,0,4},{149,0,21},{144,0,95},{133,11,431},{132,11,234},{135,0,551},{4,0,999},{6\n,0,1966},{134,0,2042},{7,0,619},{10,0,547},{11,0,122},{12,0,601},{15,0,7},{148,0\n,20},{5,11,464},{6,11,236},{7,11,276},{7,11,696},{7,11,914},{7,11,1108},{7,11,\n1448},{9,11,15},{9,11,564},{10,11,14},{12,11,565},{13,11,449},{14,11,53},{15,11,\n13},{16,11,64},{145,11,41},{6,0,884},{6,0,1019},{134,0,1150},{6,11,1767},{12,11,\n194},{145,11,107},{136,10,503},{133,11,840},{6,10,466},{135,0,671},{132,0,888},{\n4,0,149},{138,0,368},{4,0,154},{7,0,1134},{136,0,105},{135,0,983},{9,11,642},{11\n,11,236},{142,11,193},{4,0,31},{6,0,429},{7,0,962},{9,0,458},{139,0,691},{6,0,\n643},{134,0,1102},{132,0,312},{4,11,68},{5,11,634},{6,11,386},{7,11,794},{8,11,\n273},{9,11,563},{10,11,105},{10,11,171},{11,11,94},{139,11,354},{133,0,740},{135\n,0,1642},{4,11,95},{7,11,416},{8,11,211},{139,11,830},{132,0,236},{138,10,241},{\n7,11,731},{13,11,20},{143,11,11},{5,0,836},{5,0,857},{6,0,1680},{135,0,59},{10,0\n,68},{11,0,494},{152,11,6},{4,0,81},{139,0,867},{135,0,795},{133,11,689},{4,0,\n1001},{5,0,282},{6,0,1932},{6,0,1977},{6,0,1987},{6,0,1992},{8,0,650},{8,0,919},\n{8,0,920},{8,0,923},{8,0,926},{8,0,927},{8,0,931},{8,0,939},{8,0,947},{8,0,956},\n{8,0,997},{9,0,907},{10,0,950},{10,0,953},{10,0,954},{10,0,956},{10,0,958},{10,0\n,959},{10,0,964},{10,0,970},{10,0,972},{10,0,973},{10,0,975},{10,0,976},{10,0,\n980},{10,0,981},{10,0,984},{10,0,988},{10,0,990},{10,0,995},{10,0,999},{10,0,\n1002},{10,0,1003},{10,0,1005},{10,0,1006},{10,0,1008},{10,0,1009},{10,0,1012},{\n10,0,1014},{10,0,1015},{10,0,1019},{10,0,1020},{10,0,1022},{12,0,959},{12,0,961}\n,{12,0,962},{12,0,963},{12,0,964},{12,0,965},{12,0,967},{12,0,968},{12,0,969},{\n12,0,970},{12,0,971},{12,0,972},{12,0,973},{12,0,974},{12,0,975},{12,0,976},{12,\n0,977},{12,0,979},{12,0,981},{12,0,982},{12,0,983},{12,0,984},{12,0,985},{12,0,\n986},{12,0,987},{12,0,989},{12,0,990},{12,0,992},{12,0,993},{12,0,995},{12,0,998\n},{12,0,999},{12,0,1000},{12,0,1001},{12,0,1002},{12,0,1004},{12,0,1005},{12,0,\n1006},{12,0,1007},{12,0,1008},{12,0,1009},{12,0,1010},{12,0,1011},{12,0,1012},{\n12,0,1014},{12,0,1015},{12,0,1016},{12,0,1017},{12,0,1018},{12,0,1019},{12,0,\n1022},{12,0,1023},{14,0,475},{14,0,477},{14,0,478},{14,0,479},{14,0,480},{14,0,\n482},{14,0,483},{14,0,484},{14,0,485},{14,0,486},{14,0,487},{14,0,488},{14,0,489\n},{14,0,490},{14,0,491},{14,0,492},{14,0,493},{14,0,494},{14,0,495},{14,0,496},{\n14,0,497},{14,0,498},{14,0,499},{14,0,500},{14,0,501},{14,0,502},{14,0,503},{14,\n0,504},{14,0,506},{14,0,507},{14,0,508},{14,0,509},{14,0,510},{14,0,511},{16,0,\n113},{16,0,114},{16,0,115},{16,0,117},{16,0,118},{16,0,119},{16,0,121},{16,0,122\n},{16,0,123},{16,0,124},{16,0,125},{16,0,126},{16,0,127},{18,0,242},{18,0,243},{\n18,0,244},{18,0,245},{18,0,248},{18,0,249},{18,0,250},{18,0,251},{18,0,252},{18,\n0,253},{18,0,254},{18,0,255},{20,0,125},{20,0,126},{148,0,127},{7,11,1717},{7,11\n,1769},{138,11,546},{7,11,1127},{7,11,1572},{10,11,297},{10,11,422},{11,11,764},\n{11,11,810},{12,11,264},{13,11,102},{13,11,300},{13,11,484},{14,11,147},{14,11,\n229},{17,11,71},{18,11,118},{147,11,120},{6,0,1148},{134,0,1586},{132,0,775},{\n135,10,954},{133,11,864},{133,11,928},{138,11,189},{135,10,1958},{6,10,549},{8,\n10,34},{8,10,283},{9,10,165},{138,10,475},{5,10,652},{5,10,701},{135,10,449},{\n135,11,695},{4,10,655},{7,10,850},{17,10,75},{146,10,137},{140,11,682},{133,11,\n523},{8,0,970},{136,10,670},{136,11,555},{7,11,76},{8,11,44},{9,11,884},{10,11,\n580},{11,11,399},{11,11,894},{15,11,122},{18,11,144},{147,11,61},{6,10,159},{6,\n10,364},{7,10,516},{7,10,1439},{137,10,518},{4,0,71},{5,0,376},{7,0,119},{138,0,\n665},{141,10,151},{11,0,827},{14,0,34},{143,0,148},{133,11,518},{4,0,479},{135,\n11,1787},{135,11,1852},{135,10,993},{7,0,607},{136,0,99},{134,0,1960},{132,0,793\n},{4,0,41},{5,0,74},{7,0,1627},{11,0,871},{140,0,619},{7,0,94},{11,0,329},{11,0,\n965},{12,0,241},{14,0,354},{15,0,22},{148,0,63},{7,10,501},{9,10,111},{10,10,141\n},{11,10,332},{13,10,43},{13,10,429},{14,10,130},{14,10,415},{145,10,102},{9,0,\n209},{137,0,300},{134,0,1497},{138,11,255},{4,11,934},{5,11,138},{136,11,610},{\n133,0,98},{6,0,1316},{10,11,804},{138,11,832},{8,11,96},{9,11,36},{10,11,607},{\n11,11,423},{11,11,442},{12,11,309},{14,11,199},{15,11,90},{145,11,110},{132,0,\n463},{5,10,149},{136,10,233},{133,10,935},{4,11,652},{8,11,320},{9,11,13},{9,11,\n398},{9,11,727},{10,11,75},{10,11,184},{10,11,230},{10,11,564},{10,11,569},{11,\n11,973},{12,11,70},{12,11,189},{13,11,57},{13,11,257},{22,11,6},{150,11,16},{142\n,0,291},{12,10,582},{146,10,131},{136,10,801},{133,0,984},{145,11,116},{4,11,692\n},{133,11,321},{4,0,182},{6,0,205},{135,0,220},{4,0,42},{9,0,205},{9,0,786},{138\n,0,659},{6,0,801},{11,11,130},{140,11,609},{132,0,635},{5,11,345},{135,11,1016},\n{139,0,533},{132,0,371},{4,0,272},{135,0,836},{6,0,1282},{135,11,1100},{5,0,825}\n,{134,0,1640},{135,11,1325},{133,11,673},{4,11,287},{133,11,1018},{135,0,357},{6\n,0,467},{137,0,879},{7,0,317},{135,0,569},{6,0,924},{134,0,1588},{5,10,406},{5,\n11,34},{10,11,724},{12,11,444},{13,11,354},{18,11,32},{23,11,24},{23,11,31},{152\n,11,5},{6,0,1795},{6,0,1835},{6,0,1836},{6,0,1856},{8,0,844},{8,0,849},{8,0,854}\n,{8,0,870},{8,0,887},{10,0,852},{138,0,942},{6,10,69},{135,10,117},{137,0,307},{\n4,0,944},{6,0,1799},{6,0,1825},{10,0,848},{10,0,875},{10,0,895},{10,0,899},{10,0\n,902},{140,0,773},{11,0,43},{13,0,72},{141,0,142},{135,10,1830},{134,11,382},{4,\n10,432},{135,10,824},{132,11,329},{7,0,1820},{139,11,124},{133,10,826},{133,0,\n525},{132,11,906},{7,11,1940},{136,11,366},{138,11,10},{4,11,123},{4,11,649},{5,\n11,605},{7,11,1509},{136,11,36},{6,0,110},{135,0,1681},{133,0,493},{133,11,767},\n{4,0,174},{135,0,911},{138,11,786},{8,0,417},{137,0,782},{133,10,1000},{7,0,733}\n,{137,0,583},{4,10,297},{6,10,529},{7,10,152},{7,10,713},{7,10,1845},{8,10,710},\n{8,10,717},{12,10,639},{140,10,685},{4,0,32},{5,0,215},{6,0,269},{7,0,1782},{7,0\n,1892},{10,0,16},{11,0,822},{11,0,954},{141,0,481},{4,11,273},{5,11,658},{133,11\n,995},{136,0,477},{134,11,72},{135,11,1345},{4,10,520},{5,0,308},{7,0,1088},{135\n,10,575},{133,11,589},{5,0,126},{8,0,297},{9,0,366},{140,0,374},{7,0,1551},{139,\n0,361},{5,11,117},{6,11,514},{6,11,541},{7,11,1164},{7,11,1436},{8,11,220},{8,11\n,648},{10,11,688},{139,11,560},{133,11,686},{4,0,946},{6,0,1807},{8,0,871},{10,0\n,854},{10,0,870},{10,0,888},{10,0,897},{10,0,920},{12,0,722},{12,0,761},{12,0,\n763},{12,0,764},{14,0,454},{14,0,465},{16,0,107},{18,0,167},{18,0,168},{146,0,\n172},{132,0,175},{135,0,1307},{132,0,685},{135,11,1834},{133,0,797},{6,0,745},{6\n,0,858},{134,0,963},{133,0,565},{5,10,397},{6,10,154},{7,10,676},{7,11,196},{8,\n10,443},{8,10,609},{9,10,24},{9,10,325},{10,10,35},{10,11,765},{11,10,535},{11,\n10,672},{11,10,1018},{11,11,347},{11,11,552},{11,11,576},{11,11,790},{12,10,637}\n,{12,11,263},{13,11,246},{13,11,270},{13,11,395},{14,11,74},{14,11,176},{14,11,\n190},{14,11,398},{14,11,412},{15,11,32},{15,11,63},{16,10,30},{16,11,88},{147,11\n,105},{13,11,84},{141,11,122},{4,0,252},{7,0,1068},{10,0,434},{11,0,228},{11,0,\n426},{13,0,231},{18,0,106},{148,0,87},{137,0,826},{4,11,589},{139,11,282},{5,11,\n381},{135,11,1792},{132,0,791},{5,0,231},{5,10,981},{138,0,509},{7,0,601},{9,0,\n277},{9,0,674},{10,0,178},{10,0,418},{10,0,571},{11,0,531},{12,0,113},{12,0,475}\n,{13,0,99},{142,0,428},{4,10,56},{7,10,1791},{7,11,616},{8,10,607},{8,10,651},{\n10,11,413},{11,10,465},{11,10,835},{12,10,337},{141,10,480},{7,0,1591},{144,0,43\n},{9,10,158},{138,10,411},{135,0,1683},{8,0,289},{11,0,45},{12,0,278},{140,0,537\n},{6,11,120},{7,11,1188},{7,11,1710},{8,11,286},{9,11,667},{11,11,592},{139,11,\n730},{136,10,617},{135,0,1120},{135,11,1146},{139,10,563},{4,10,369},{4,11,352},\n{135,11,687},{143,11,38},{4,0,399},{5,0,119},{5,0,494},{7,0,751},{9,0,556},{14,\n11,179},{15,11,151},{150,11,11},{4,11,192},{5,11,49},{6,11,200},{6,11,293},{6,11\n,1696},{135,11,488},{4,0,398},{133,0,660},{6,10,622},{135,0,1030},{135,11,595},{\n141,0,168},{132,11,147},{7,0,973},{10,10,624},{142,10,279},{132,10,363},{132,0,\n642},{133,11,934},{134,0,1615},{7,11,505},{135,11,523},{7,0,594},{7,0,851},{7,0,\n1858},{9,0,411},{9,0,574},{9,0,666},{9,0,737},{10,0,346},{10,0,712},{11,0,246},{\n11,0,432},{11,0,517},{11,0,647},{11,0,679},{11,0,727},{12,0,304},{12,0,305},{12,\n0,323},{12,0,483},{12,0,572},{12,0,593},{12,0,602},{13,0,95},{13,0,101},{13,0,\n171},{13,0,315},{13,0,378},{13,0,425},{13,0,475},{14,0,63},{14,0,380},{14,0,384}\n,{15,0,133},{18,0,112},{148,0,72},{135,0,1093},{132,0,679},{8,0,913},{10,0,903},\n{10,0,915},{10,11,438},{12,0,648},{12,0,649},{14,0,455},{144,0,112},{137,0,203},\n{134,10,292},{134,0,1492},{5,10,177},{6,10,616},{7,0,1374},{7,10,827},{8,0,540},\n{9,10,525},{138,10,656},{135,0,1486},{9,0,714},{138,10,31},{136,0,825},{134,0,\n1511},{132,11,637},{134,0,952},{4,10,161},{133,10,631},{5,0,143},{5,0,769},{6,0,\n1760},{7,0,682},{7,0,1992},{136,0,736},{132,0,700},{134,0,1540},{132,11,777},{9,\n11,867},{138,11,837},{7,0,1557},{135,10,1684},{133,0,860},{6,0,422},{7,0,0},{7,0\n,1544},{9,0,605},{9,10,469},{9,10,709},{11,0,990},{12,0,235},{12,0,453},{12,10,\n512},{13,0,47},{13,0,266},{14,10,65},{145,10,12},{10,10,229},{11,0,807},{11,10,\n73},{139,10,376},{6,11,170},{7,11,1080},{8,11,395},{8,11,487},{11,11,125},{141,\n11,147},{5,0,515},{137,0,131},{7,0,1605},{11,0,962},{146,0,139},{132,0,646},{4,0\n,396},{7,0,728},{9,0,117},{13,0,202},{148,0,51},{4,11,535},{6,0,121},{6,0,124},{\n6,0,357},{6,10,558},{7,0,1138},{7,0,1295},{7,10,651},{8,0,162},{8,0,508},{8,11,\n618},{9,10,0},{10,10,34},{11,0,655},{139,10,1008},{135,11,1245},{138,0,357},{150\n,11,23},{133,0,237},{135,0,1784},{7,10,1832},{138,10,374},{132,0,713},{132,11,46\n},{5,11,811},{6,0,1536},{6,11,1679},{6,11,1714},{7,11,2032},{138,0,348},{11,11,\n182},{142,11,195},{6,0,523},{7,0,738},{7,10,771},{7,10,1731},{9,10,405},{138,10,\n421},{7,11,1458},{9,11,407},{139,11,15},{6,11,34},{7,11,69},{7,11,640},{7,11,\n1089},{8,11,708},{8,11,721},{9,11,363},{9,11,643},{10,11,628},{148,11,98},{133,0\n,434},{135,0,1877},{7,0,571},{138,0,366},{5,10,881},{133,10,885},{9,0,513},{10,0\n,25},{10,0,39},{12,0,122},{140,0,187},{132,0,580},{5,10,142},{134,10,546},{132,\n11,462},{137,0,873},{5,10,466},{11,10,571},{12,10,198},{13,10,283},{14,10,186},{\n15,10,21},{143,10,103},{4,10,185},{5,10,257},{5,10,839},{5,10,936},{7,0,171},{9,\n10,399},{10,10,258},{10,10,395},{10,10,734},{11,10,1014},{12,10,23},{13,10,350},\n{14,10,150},{147,10,6},{134,0,625},{7,0,107},{7,0,838},{8,0,550},{138,0,401},{5,\n11,73},{6,11,23},{134,11,338},{4,0,943},{6,0,1850},{12,0,713},{142,0,434},{7,10,\n404},{7,10,1377},{7,10,1430},{7,10,2017},{8,10,149},{8,10,239},{8,10,512},{8,10,\n793},{8,10,818},{9,10,474},{9,10,595},{10,10,122},{10,10,565},{10,10,649},{10,10\n,783},{11,0,588},{11,0,864},{11,0,936},{11,0,968},{11,10,239},{11,10,295},{11,10\n,447},{11,10,528},{11,10,639},{11,10,800},{12,0,73},{12,0,343},{12,0,394},{12,10\n,25},{12,10,157},{12,10,316},{12,10,390},{12,10,391},{12,10,395},{12,10,478},{12\n,10,503},{12,10,592},{12,10,680},{13,0,275},{13,10,50},{13,10,53},{13,10,132},{\n13,10,198},{13,10,322},{13,10,415},{13,10,511},{14,0,257},{14,10,71},{14,10,395}\n,{15,0,160},{15,10,71},{15,10,136},{17,10,123},{18,10,93},{147,10,58},{133,0,768\n},{11,0,103},{142,0,0},{136,10,712},{132,0,799},{132,0,894},{7,11,725},{8,11,498\n},{139,11,268},{135,11,1798},{135,11,773},{141,11,360},{4,10,377},{152,10,13},{\n135,0,1673},{132,11,583},{134,0,1052},{133,11,220},{140,11,69},{132,11,544},{4,\n10,180},{135,10,1906},{134,0,272},{4,0,441},{134,0,1421},{4,0,9},{5,0,128},{7,0,\n368},{11,0,480},{148,0,3},{5,11,176},{6,11,437},{6,11,564},{11,11,181},{141,11,\n183},{132,10,491},{7,0,1182},{141,11,67},{4,10,171},{6,0,1346},{138,10,234},{4,\n10,586},{7,10,1186},{138,10,631},{136,0,682},{134,0,1004},{15,0,24},{143,11,24},\n{134,0,968},{4,0,2},{6,0,742},{6,0,793},{7,0,545},{7,0,894},{9,10,931},{10,10,\n334},{148,10,71},{136,11,600},{133,10,765},{9,0,769},{140,0,185},{4,11,790},{5,\n11,273},{134,11,394},{7,0,474},{137,0,578},{4,11,135},{6,11,127},{7,11,1185},{7,\n11,1511},{8,11,613},{11,11,5},{12,11,133},{12,11,495},{12,11,586},{14,11,385},{\n15,11,118},{17,11,20},{146,11,98},{133,10,424},{5,0,530},{142,0,113},{6,11,230},\n{7,11,961},{7,11,1085},{136,11,462},{7,11,1954},{137,11,636},{136,10,714},{149,\n11,6},{135,10,685},{9,10,420},{10,10,269},{10,10,285},{10,10,576},{11,10,397},{\n13,10,175},{145,10,90},{132,10,429},{5,0,556},{5,11,162},{136,11,68},{132,11,654\n},{4,11,156},{7,11,998},{7,11,1045},{7,11,1860},{9,11,48},{9,11,692},{11,11,419}\n,{139,11,602},{6,0,1317},{7,11,1276},{8,0,16},{8,11,474},{9,0,825},{9,11,652},{\n140,0,568},{7,10,18},{7,10,699},{7,10,1966},{8,10,752},{9,10,273},{9,10,412},{9,\n10,703},{10,10,71},{10,10,427},{10,10,508},{146,0,97},{7,11,1454},{10,0,703},{\n138,11,703},{4,10,53},{5,10,186},{135,10,752},{134,0,892},{134,0,1571},{8,10,575\n},{10,10,289},{139,10,319},{6,0,186},{137,0,426},{134,0,1101},{132,10,675},{132,\n0,585},{6,0,1870},{137,0,937},{152,11,10},{9,11,197},{10,11,300},{12,11,473},{13\n,11,90},{141,11,405},{4,0,93},{5,0,252},{6,0,229},{7,0,291},{9,0,550},{139,0,644\n},{137,0,749},{6,10,209},{8,10,468},{9,0,162},{9,10,210},{11,10,36},{12,10,28},{\n12,10,630},{13,10,21},{13,10,349},{14,10,7},{145,10,13},{132,0,381},{132,11,606}\n,{4,10,342},{135,10,1179},{7,11,1587},{7,11,1707},{10,11,528},{139,11,504},{12,\n11,39},{13,11,265},{141,11,439},{4,10,928},{133,10,910},{7,10,1838},{7,11,1978},\n{136,11,676},{6,0,762},{6,0,796},{134,0,956},{4,10,318},{4,10,496},{7,10,856},{\n139,10,654},{137,11,242},{4,11,361},{133,11,315},{132,11,461},{132,11,472},{132,\n0,857},{5,0,21},{6,0,77},{6,0,157},{7,0,974},{7,0,1301},{7,0,1339},{7,0,1490},{7\n,0,1873},{7,10,915},{8,10,247},{9,0,628},{147,10,0},{4,10,202},{5,10,382},{6,10,\n454},{7,10,936},{7,10,1803},{8,10,758},{9,10,375},{9,10,895},{10,10,743},{10,10,\n792},{11,10,978},{11,10,1012},{142,10,109},{7,11,617},{10,11,498},{11,11,501},{\n12,11,16},{140,11,150},{7,10,1150},{7,10,1425},{7,10,1453},{10,11,747},{140,10,\n513},{133,11,155},{11,0,919},{141,0,409},{138,10,791},{10,0,633},{139,11,729},{7\n,11,163},{8,11,319},{9,11,402},{10,11,24},{10,11,681},{11,11,200},{11,11,567},{\n12,11,253},{12,11,410},{142,11,219},{5,11,475},{7,11,1780},{9,11,230},{11,11,297\n},{11,11,558},{14,11,322},{147,11,76},{6,10,445},{7,0,332},{137,10,909},{135,11,\n1956},{136,11,274},{134,10,578},{135,0,1489},{135,11,1848},{5,11,944},{134,11,\n1769},{132,11,144},{136,10,766},{4,0,832},{135,10,541},{8,0,398},{9,0,681},{139,\n0,632},{136,0,645},{9,0,791},{10,0,93},{16,0,13},{17,0,23},{18,0,135},{19,0,12},\n{20,0,1},{20,0,12},{148,0,14},{6,11,247},{137,11,555},{134,0,20},{132,0,800},{\n135,0,1841},{139,10,983},{137,10,768},{132,10,584},{141,11,51},{4,11,620},{6,0,\n1993},{138,11,280},{136,0,769},{7,11,1810},{11,0,290},{11,0,665},{11,11,866},{12\n,11,103},{13,11,495},{17,11,67},{147,11,74},{134,0,1426},{139,0,60},{4,10,326},{\n135,10,1770},{4,10,226},{7,0,1874},{137,0,641},{5,10,426},{6,0,644},{8,10,30},{9\n,10,2},{11,10,549},{147,10,122},{5,11,428},{138,11,442},{135,11,1871},{135,0,\n1757},{147,10,117},{135,0,937},{135,0,1652},{6,0,654},{134,0,1476},{133,11,99},{\n135,0,527},{132,10,345},{4,10,385},{4,11,397},{7,10,265},{135,10,587},{4,0,579},\n{5,0,226},{5,0,323},{135,0,960},{134,0,1486},{8,11,502},{144,11,9},{4,10,347},{5\n,10,423},{5,10,996},{135,10,1329},{7,11,727},{146,11,73},{4,11,485},{7,10,1259},\n{7,11,353},{7,11,1523},{9,10,125},{139,10,65},{5,10,136},{6,0,325},{6,11,366},{7\n,11,1384},{7,11,1601},{136,10,644},{138,11,160},{6,0,1345},{137,11,282},{18,0,91\n},{147,0,70},{136,0,404},{4,11,157},{133,11,471},{133,0,973},{6,0,135},{135,0,\n1176},{8,11,116},{11,11,551},{142,11,159},{4,0,549},{4,10,433},{133,10,719},{136\n,0,976},{5,11,160},{7,11,363},{7,11,589},{10,11,170},{141,11,55},{144,0,21},{144\n,0,51},{135,0,314},{135,10,1363},{4,11,108},{7,11,405},{10,11,491},{139,11,498},\n{146,0,4},{4,10,555},{8,10,536},{10,10,288},{139,10,1005},{135,11,1005},{6,0,281\n},{7,0,6},{8,0,282},{8,0,480},{8,0,499},{9,0,198},{10,0,143},{10,0,169},{10,0,\n211},{10,0,417},{10,0,574},{11,0,147},{11,0,395},{12,0,75},{12,0,407},{12,0,608}\n,{13,0,500},{142,0,251},{6,0,1093},{6,0,1405},{9,10,370},{138,10,90},{4,11,926},\n{133,11,983},{135,0,1776},{134,0,1528},{132,0,419},{132,11,538},{6,11,294},{7,11\n,1267},{136,11,624},{135,11,1772},{138,11,301},{4,10,257},{135,10,2031},{4,0,138\n},{7,0,1012},{7,0,1280},{7,10,1768},{137,0,76},{132,11,757},{5,0,29},{140,0,638}\n,{7,11,655},{135,11,1844},{6,11,257},{7,0,1418},{135,11,1522},{8,11,469},{138,11\n,47},{142,11,278},{6,10,83},{6,10,1733},{135,10,1389},{11,11,204},{11,11,243},{\n140,11,293},{135,11,1875},{6,0,1710},{135,0,2038},{137,11,299},{4,0,17},{5,0,23}\n,{7,0,995},{11,0,383},{11,0,437},{12,0,460},{140,0,532},{133,0,862},{137,10,696}\n,{6,0,592},{138,0,946},{138,11,599},{7,10,1718},{9,10,95},{9,10,274},{10,10,279}\n,{10,10,317},{10,10,420},{11,10,303},{11,10,808},{12,10,134},{12,10,367},{13,10,\n149},{13,10,347},{14,10,349},{14,10,406},{18,10,22},{18,10,89},{18,10,122},{147,\n10,47},{8,0,70},{12,0,171},{141,0,272},{133,10,26},{132,10,550},{137,0,812},{10,\n0,233},{139,0,76},{134,0,988},{134,0,442},{136,10,822},{4,10,902},{5,10,809},{6,\n10,122},{135,0,896},{5,11,150},{7,11,106},{8,11,603},{9,11,593},{9,11,634},{10,\n11,44},{10,11,173},{11,11,462},{11,11,515},{13,11,216},{13,11,288},{142,11,400},\n{136,0,483},{135,10,262},{5,10,620},{134,0,1709},{4,10,34},{5,10,574},{7,10,279}\n,{7,10,1624},{136,10,601},{137,10,170},{147,0,119},{12,11,108},{141,11,291},{11,\n0,69},{12,0,105},{12,0,117},{13,0,213},{14,0,13},{14,0,62},{14,0,177},{14,0,421}\n,{15,0,19},{146,0,141},{137,0,309},{11,11,278},{142,11,73},{7,0,608},{7,0,976},{\n9,0,146},{10,0,206},{10,0,596},{13,0,218},{142,0,153},{133,10,332},{6,10,261},{8\n,10,182},{139,10,943},{4,11,493},{144,11,55},{134,10,1721},{132,0,768},{4,10,933\n},{133,10,880},{7,11,555},{7,11,1316},{7,11,1412},{7,11,1839},{9,11,192},{9,11,\n589},{11,11,241},{11,11,676},{11,11,811},{11,11,891},{12,11,140},{12,11,346},{12\n,11,479},{13,11,30},{13,11,49},{13,11,381},{14,11,188},{15,11,150},{16,11,76},{\n18,11,30},{148,11,52},{4,0,518},{135,0,1136},{6,11,568},{7,11,112},{7,11,1804},{\n8,11,362},{8,11,410},{8,11,830},{9,11,514},{11,11,649},{142,11,157},{135,11,673}\n,{8,0,689},{137,0,863},{4,0,18},{4,11,625},{7,0,145},{7,0,444},{7,0,1278},{8,0,\n49},{8,0,400},{9,0,71},{9,0,250},{10,0,459},{12,0,160},{144,0,24},{140,0,1020},{\n4,0,997},{6,0,1946},{6,0,1984},{134,0,1998},{6,11,16},{6,11,158},{7,11,43},{7,11\n,129},{7,11,181},{8,11,276},{8,11,377},{10,11,523},{11,11,816},{12,11,455},{13,\n11,303},{142,11,135},{133,10,812},{134,0,658},{4,11,1},{7,11,1143},{7,11,1463},{\n8,11,61},{9,11,207},{9,11,390},{9,11,467},{139,11,836},{150,11,26},{140,0,106},{\n4,10,137},{6,0,1827},{7,10,1178},{7,10,1520},{7,11,1319},{10,0,931},{18,0,166},{\n148,0,114},{133,0,1010},{4,11,723},{5,11,895},{7,11,1031},{8,11,199},{8,11,340},\n{9,11,153},{9,11,215},{10,11,21},{10,11,59},{10,11,80},{10,11,224},{11,11,229},{\n11,11,652},{12,11,192},{13,11,146},{142,11,91},{132,11,295},{6,11,619},{7,11,898\n},{7,11,1092},{8,11,485},{18,11,28},{147,11,116},{137,11,51},{6,10,1661},{7,10,\n1975},{7,10,2009},{135,10,2011},{5,11,309},{140,11,211},{5,0,87},{7,0,313},{7,0,\n1103},{10,0,208},{10,0,582},{11,0,389},{11,0,813},{12,0,385},{13,0,286},{14,0,\n124},{146,0,108},{5,11,125},{8,11,77},{138,11,15},{132,0,267},{133,0,703},{137,\n11,155},{133,11,439},{11,11,164},{140,11,76},{5,10,89},{7,10,1915},{9,0,496},{9,\n10,185},{9,10,235},{10,10,64},{10,10,270},{10,10,403},{10,10,469},{10,10,529},{\n10,10,590},{11,10,140},{11,10,860},{13,10,1},{13,10,422},{14,10,341},{14,10,364}\n,{17,10,93},{18,10,113},{19,10,97},{147,10,113},{133,10,695},{135,0,1121},{5,10,\n6},{6,10,183},{7,10,680},{7,10,978},{7,10,1013},{7,10,1055},{12,10,230},{13,10,\n172},{146,10,29},{4,11,8},{7,11,1152},{7,11,1153},{7,11,1715},{9,11,374},{10,11,\n478},{139,11,648},{135,11,1099},{6,10,29},{139,10,63},{4,0,561},{10,0,249},{139,\n0,209},{132,0,760},{7,11,799},{138,11,511},{136,11,87},{9,0,154},{140,0,485},{\n136,0,255},{132,0,323},{140,0,419},{132,10,311},{134,10,1740},{4,0,368},{135,0,\n641},{7,10,170},{8,10,90},{8,10,177},{8,10,415},{11,10,714},{142,10,281},{4,11,\n69},{5,11,122},{9,11,656},{138,11,464},{5,11,849},{134,11,1633},{8,0,522},{142,0\n,328},{11,10,91},{13,10,129},{15,10,101},{145,10,125},{4,10,494},{6,10,74},{7,0,\n562},{7,10,44},{8,0,551},{11,11,499},{12,10,17},{15,10,5},{148,10,11},{4,10,276}\n,{133,10,296},{9,0,92},{147,0,91},{4,10,7},{5,10,90},{5,10,158},{6,10,542},{7,10\n,221},{7,10,1574},{9,10,490},{10,10,540},{11,10,443},{139,10,757},{6,0,525},{6,0\n,1976},{8,0,806},{9,0,876},{140,0,284},{5,11,859},{7,10,588},{7,11,1160},{8,11,\n107},{9,10,175},{9,11,291},{9,11,439},{10,10,530},{10,11,663},{11,11,609},{140,\n11,197},{7,11,168},{13,11,196},{141,11,237},{139,0,958},{133,0,594},{135,10,580}\n,{7,10,88},{136,10,627},{5,10,872},{6,0,479},{6,0,562},{6,10,57},{7,0,1060},{7,\n10,471},{9,10,447},{9,10,454},{141,0,6},{136,11,413},{145,11,19},{4,11,117},{6,\n11,372},{7,11,1905},{142,11,323},{4,11,722},{139,11,471},{5,10,31},{6,10,614},{\n145,0,61},{8,10,330},{140,10,477},{7,10,1200},{138,10,460},{6,10,424},{135,10,\n1866},{6,0,1641},{136,0,820},{6,0,1556},{134,0,1618},{9,11,5},{12,11,216},{12,11\n,294},{12,11,298},{12,11,400},{12,11,518},{13,11,229},{143,11,139},{15,11,155},{\n144,11,79},{4,0,302},{135,0,1766},{5,10,13},{134,10,142},{6,0,148},{7,0,1313},{7\n,10,116},{8,10,322},{8,10,755},{9,10,548},{10,10,714},{11,10,884},{141,10,324},{\n137,0,676},{9,11,88},{139,11,270},{5,11,12},{7,11,375},{137,11,438},{134,0,1674}\n,{7,10,1472},{135,10,1554},{7,10,1071},{7,10,1541},{7,10,1767},{7,10,1806},{11,0\n,178},{11,10,162},{11,10,242},{12,10,605},{15,10,26},{144,10,44},{6,0,389},{7,0,\n149},{9,0,142},{138,0,94},{140,11,71},{145,10,115},{6,0,8},{7,0,1881},{8,0,91},{\n11,11,966},{12,11,287},{13,11,342},{13,11,402},{15,11,110},{143,11,163},{4,11,\n258},{136,11,639},{6,11,22},{7,11,903},{138,11,577},{133,11,681},{135,10,1111},{\n135,11,1286},{8,10,1},{9,0,112},{138,10,326},{5,10,488},{6,10,527},{7,10,489},{7\n,10,1636},{8,10,121},{8,10,144},{8,10,359},{9,10,193},{9,10,241},{9,10,336},{9,\n10,882},{11,10,266},{11,10,372},{11,10,944},{12,10,401},{140,10,641},{4,11,664},\n{133,11,804},{6,0,747},{134,0,1015},{135,0,1746},{9,10,31},{10,10,244},{10,10,\n699},{12,10,149},{141,10,497},{133,10,377},{135,0,24},{5,11,32},{6,0,1352},{145,\n10,101},{7,0,1530},{10,0,158},{13,0,13},{13,0,137},{13,0,258},{14,0,111},{14,0,\n225},{14,0,253},{14,0,304},{14,0,339},{14,0,417},{146,0,33},{4,0,503},{135,0,\n1661},{5,0,130},{6,0,845},{7,0,1314},{9,0,610},{10,0,718},{11,0,601},{11,0,819},\n{11,0,946},{140,0,536},{10,0,149},{11,0,280},{142,0,336},{134,0,1401},{135,0,\n1946},{8,0,663},{144,0,8},{134,0,1607},{135,10,2023},{4,11,289},{7,11,629},{7,11\n,1698},{7,11,1711},{140,11,215},{6,11,450},{136,11,109},{10,0,882},{10,0,883},{\n10,0,914},{138,0,928},{133,10,843},{136,11,705},{132,10,554},{133,10,536},{5,0,\n417},{9,10,79},{11,10,625},{145,10,7},{7,11,1238},{142,11,37},{4,0,392},{135,0,\n1597},{4,10,424},{5,0,433},{9,0,633},{139,0,629},{7,10,336},{136,10,785},{134,11\n,355},{6,0,234},{7,0,769},{9,0,18},{138,0,358},{4,10,896},{134,10,1777},{138,11,\n323},{7,0,140},{7,0,1950},{8,0,680},{11,0,817},{147,0,88},{7,0,1222},{138,0,386}\n,{139,11,908},{11,0,249},{12,0,313},{16,0,66},{145,0,26},{134,0,5},{7,10,750},{9\n,10,223},{11,10,27},{11,10,466},{12,10,624},{14,10,265},{146,10,61},{134,11,26},\n{134,0,1216},{5,0,963},{134,0,1773},{4,11,414},{5,11,467},{9,11,654},{10,11,451}\n,{12,11,59},{141,11,375},{135,11,17},{4,10,603},{133,10,661},{4,10,11},{6,10,128\n},{7,10,231},{7,10,1533},{138,10,725},{135,11,955},{7,0,180},{8,0,509},{136,0,\n792},{132,10,476},{132,0,1002},{133,11,538},{135,10,1807},{132,0,931},{7,0,943},\n{11,0,614},{140,0,747},{135,0,1837},{9,10,20},{10,10,324},{10,10,807},{139,10,\n488},{134,0,641},{6,11,280},{10,11,502},{11,11,344},{140,11,38},{5,11,45},{7,11,\n1161},{11,11,448},{11,11,880},{13,11,139},{13,11,407},{15,11,16},{17,11,95},{18,\n11,66},{18,11,88},{18,11,123},{149,11,7},{9,0,280},{138,0,134},{22,0,22},{23,0,5\n},{151,0,29},{136,11,777},{4,0,90},{4,11,410},{5,0,545},{7,0,754},{7,11,521},{9,\n0,186},{10,0,72},{10,0,782},{11,0,577},{11,0,610},{11,0,960},{12,0,354},{12,0,\n362},{140,0,595},{135,11,1778},{5,10,112},{6,10,103},{134,10,150},{138,10,356},{\n132,0,742},{7,0,151},{9,0,329},{139,0,254},{8,0,853},{8,0,881},{8,0,911},{8,0,\n912},{10,0,872},{12,0,741},{12,0,742},{152,0,18},{4,11,573},{136,11,655},{6,0,\n921},{134,0,934},{9,0,187},{10,0,36},{11,0,1016},{17,0,44},{146,0,64},{7,0,833},\n{136,0,517},{4,0,506},{5,0,295},{135,0,1680},{4,10,708},{8,10,15},{9,10,50},{9,\n10,386},{11,10,18},{11,10,529},{140,10,228},{4,10,563},{7,0,251},{7,0,1701},{7,\n10,592},{7,10,637},{7,10,770},{8,0,436},{8,10,463},{9,10,60},{9,10,335},{9,10,\n904},{10,10,73},{11,10,434},{12,10,585},{13,10,331},{18,10,110},{148,10,60},{132\n,10,502},{136,0,584},{6,10,347},{138,10,161},{7,0,987},{7,11,899},{9,0,688},{10,\n0,522},{11,0,788},{12,0,137},{12,0,566},{14,0,9},{14,0,24},{14,0,64},{142,11,325\n},{4,0,214},{5,0,500},{5,10,102},{6,10,284},{7,10,1079},{7,10,1423},{7,10,1702},\n{8,10,470},{9,10,554},{9,10,723},{139,10,333},{7,10,246},{135,10,840},{6,10,10},\n{8,10,571},{9,10,739},{143,10,91},{133,10,626},{146,0,195},{134,0,1775},{7,0,389\n},{7,0,700},{7,0,940},{8,0,514},{9,0,116},{9,0,535},{10,0,118},{11,0,107},{11,0,\n148},{11,0,922},{12,0,254},{12,0,421},{142,0,238},{5,10,18},{6,10,526},{13,10,24\n},{13,10,110},{19,10,5},{147,10,44},{132,0,743},{4,10,309},{5,10,462},{7,10,970}\n,{7,10,1097},{139,0,292},{22,10,30},{150,10,33},{139,11,338},{135,11,1598},{7,0,\n1283},{9,0,227},{11,0,325},{11,0,408},{14,0,180},{146,0,47},{4,0,953},{6,0,1805}\n,{6,0,1814},{6,0,1862},{140,0,774},{6,11,611},{135,11,1733},{135,11,1464},{5,0,\n81},{7,0,146},{7,0,1342},{8,0,53},{8,0,561},{8,0,694},{8,0,754},{9,0,115},{9,0,\n179},{9,0,894},{10,0,462},{10,0,813},{11,0,230},{11,0,657},{11,0,699},{11,0,748}\n,{12,0,119},{12,0,200},{12,0,283},{142,0,273},{5,0,408},{6,0,789},{6,0,877},{6,0\n,1253},{6,0,1413},{137,0,747},{134,10,1704},{135,11,663},{6,0,1910},{6,0,1915},{\n6,0,1923},{9,0,913},{9,0,928},{9,0,950},{9,0,954},{9,0,978},{9,0,993},{12,0,812}\n,{12,0,819},{12,0,831},{12,0,833},{12,0,838},{12,0,909},{12,0,928},{12,0,931},{\n12,0,950},{15,0,186},{15,0,187},{15,0,195},{15,0,196},{15,0,209},{15,0,215},{15,\n0,236},{15,0,241},{15,0,249},{15,0,253},{18,0,180},{18,0,221},{18,0,224},{18,0,\n227},{18,0,229},{149,0,60},{7,0,1826},{135,0,1938},{5,10,86},{7,10,743},{9,10,85\n},{10,10,281},{10,10,432},{11,0,490},{12,10,251},{13,10,118},{14,10,378},{146,0,\n143},{5,10,524},{133,10,744},{141,11,442},{10,10,107},{140,10,436},{135,11,503},\n{134,0,1162},{132,10,927},{7,0,30},{8,0,86},{8,0,315},{8,0,700},{9,0,576},{9,0,\n858},{10,0,414},{11,0,310},{11,0,888},{11,0,904},{12,0,361},{12,10,670},{13,0,\n248},{13,0,371},{14,0,142},{146,10,94},{134,0,721},{4,11,113},{5,11,163},{5,11,\n735},{7,10,1149},{7,11,1009},{9,10,156},{9,11,9},{9,11,771},{12,11,90},{13,11,\n138},{13,11,410},{143,11,128},{138,0,839},{133,10,778},{137,0,617},{133,10,502},\n{8,10,196},{10,10,283},{139,10,406},{6,0,428},{7,0,524},{8,0,169},{8,0,234},{9,0\n,480},{138,0,646},{133,10,855},{134,0,1648},{7,0,1205},{138,0,637},{4,11,935},{5\n,11,823},{135,0,1596},{5,11,269},{7,11,434},{7,11,891},{8,11,339},{9,11,702},{11\n,11,594},{11,11,718},{145,11,100},{7,11,878},{9,11,485},{141,11,264},{4,0,266},{\n6,11,1713},{8,0,4},{9,0,39},{10,0,166},{11,0,918},{12,0,635},{20,0,10},{22,0,27}\n,{22,0,43},{150,0,52},{7,10,1400},{9,10,446},{138,10,45},{135,11,900},{132,0,862\n},{134,0,1554},{135,11,1033},{19,0,16},{147,11,16},{135,11,1208},{7,0,157},{136,\n0,279},{6,0,604},{136,0,391},{13,10,455},{15,10,99},{15,10,129},{144,10,68},{135\n,10,172},{7,0,945},{11,0,713},{139,0,744},{4,0,973},{10,0,877},{10,0,937},{10,0,\n938},{140,0,711},{139,0,1022},{132,10,568},{142,11,143},{4,0,567},{4,10,732},{\n137,0,859},{7,0,1846},{136,0,628},{136,10,733},{133,0,762},{4,10,428},{135,10,\n1789},{7,10,2015},{10,0,784},{12,10,665},{141,0,191},{133,0,298},{7,0,633},{7,0,\n905},{7,0,909},{7,0,1538},{9,0,767},{140,0,636},{138,10,806},{132,0,795},{139,0,\n301},{135,0,1970},{5,11,625},{135,11,1617},{135,11,275},{7,11,37},{8,11,425},{8,\n11,693},{9,11,720},{10,11,380},{10,11,638},{11,11,273},{11,11,307},{11,11,473},{\n12,11,61},{143,11,43},{135,11,198},{134,0,1236},{7,0,369},{12,0,644},{12,0,645},\n{144,0,90},{19,0,15},{149,0,27},{6,0,71},{6,10,1623},{6,10,1681},{7,0,845},{8,0,\n160},{137,0,318},{134,0,1447},{134,0,1255},{138,0,735},{4,11,168},{136,0,76},{6,\n10,1748},{8,10,715},{9,10,802},{10,10,46},{10,10,819},{13,10,308},{14,10,351},{\n14,10,363},{146,10,67},{135,11,91},{4,10,63},{5,10,347},{134,0,474},{133,10,749}\n,{138,0,841},{133,10,366},{4,11,225},{134,0,836},{135,0,1622},{135,10,89},{140,0\n,735},{134,0,1601},{138,11,145},{6,0,1390},{137,0,804},{142,0,394},{6,11,15},{7,\n11,70},{10,11,240},{147,11,93},{6,0,96},{135,0,1426},{4,0,651},{133,0,289},{7,10\n,977},{7,11,956},{7,11,1157},{7,11,1506},{7,11,1606},{7,11,1615},{7,11,1619},{7,\n11,1736},{7,11,1775},{8,11,590},{9,11,324},{9,11,736},{9,11,774},{9,11,776},{9,\n11,784},{10,11,567},{10,11,708},{11,11,518},{11,11,613},{11,11,695},{11,11,716},\n{11,11,739},{11,11,770},{11,11,771},{11,11,848},{11,11,857},{11,11,931},{11,11,\n947},{12,11,326},{12,11,387},{12,11,484},{12,11,528},{12,11,552},{12,11,613},{13\n,11,189},{13,11,256},{13,11,340},{13,11,432},{13,11,436},{13,11,440},{13,11,454}\n,{14,11,174},{14,11,220},{14,11,284},{14,11,390},{145,11,121},{7,0,688},{8,0,35}\n,{9,0,511},{10,0,767},{147,0,118},{134,0,667},{4,0,513},{5,10,824},{133,10,941},\n{7,10,440},{8,10,230},{139,10,106},{134,0,2034},{135,11,1399},{143,11,66},{135,\n11,1529},{4,11,145},{6,11,176},{7,11,395},{9,11,562},{144,11,28},{132,11,501},{\n132,0,704},{134,0,1524},{6,11,464},{135,0,1078},{6,11,509},{10,11,82},{20,11,91}\n,{151,11,13},{4,0,720},{133,0,306},{133,0,431},{4,10,914},{5,10,800},{5,10,852},\n{135,0,1196},{135,11,1189},{10,0,54},{141,10,115},{7,10,564},{142,10,168},{4,10,\n918},{5,0,464},{5,10,876},{6,0,236},{7,0,696},{7,0,914},{7,0,1108},{7,0,1448},{9\n,0,15},{9,0,564},{10,0,14},{12,0,565},{13,0,449},{14,0,53},{15,0,13},{16,0,64},{\n145,0,41},{6,0,1418},{134,10,1764},{4,10,92},{133,10,274},{134,0,907},{4,11,114}\n,{8,10,501},{9,11,492},{13,11,462},{142,11,215},{4,11,77},{5,11,361},{6,11,139},\n{6,11,401},{6,11,404},{7,11,413},{7,11,715},{7,11,1716},{11,11,279},{12,11,179},\n{12,11,258},{13,11,244},{142,11,358},{6,0,1767},{12,0,194},{145,0,107},{134,11,\n1717},{5,10,743},{142,11,329},{4,10,49},{7,10,280},{135,10,1633},{5,0,840},{7,11\n,1061},{8,11,82},{11,11,250},{12,11,420},{141,11,184},{135,11,724},{134,0,900},{\n136,10,47},{134,0,1436},{144,11,0},{5,10,272},{5,10,908},{5,10,942},{6,0,675},{7\n,0,1008},{7,0,1560},{8,10,197},{9,0,642},{9,10,47},{11,0,236},{11,10,538},{11,10\n,742},{142,0,193},{4,0,68},{5,0,628},{5,0,634},{6,0,386},{7,0,794},{8,0,273},{9,\n0,563},{10,0,105},{10,0,171},{11,0,94},{139,0,354},{135,10,1911},{137,10,891},{4\n,0,95},{6,0,1297},{6,0,1604},{7,0,416},{139,0,830},{6,11,513},{135,11,1052},{7,0\n,731},{13,0,20},{143,0,11},{137,11,899},{10,0,850},{140,0,697},{4,0,662},{7,11,\n1417},{12,11,382},{17,11,48},{152,11,12},{133,0,736},{132,0,861},{4,10,407},{132\n,10,560},{141,10,490},{6,11,545},{7,11,565},{7,11,1669},{10,11,114},{11,11,642},\n{140,11,618},{6,0,871},{134,0,1000},{5,0,864},{5,11,5},{10,0,648},{11,0,671},{\n143,0,46},{133,0,928},{4,10,475},{11,0,90},{11,10,35},{13,0,7},{13,10,71},{13,10\n,177},{142,10,422},{136,0,332},{135,11,192},{134,0,1055},{136,11,763},{11,0,986}\n,{140,0,682},{7,0,76},{8,0,44},{9,0,884},{10,0,580},{11,0,399},{11,0,894},{143,0\n,122},{135,11,1237},{135,10,636},{6,10,222},{7,10,1620},{8,10,409},{9,10,693},{\n139,0,300},{4,11,87},{5,11,250},{10,11,601},{13,11,298},{13,11,353},{141,11,376}\n,{5,0,518},{10,0,340},{11,0,175},{149,0,16},{140,0,771},{6,0,1108},{137,0,831},{\n132,0,836},{135,0,1852},{4,0,957},{6,0,1804},{8,0,842},{8,0,843},{8,0,851},{8,0,\n855},{140,0,767},{135,11,814},{4,11,57},{7,11,1195},{7,11,1438},{7,11,1548},{7,\n11,1835},{7,11,1904},{9,11,757},{10,11,604},{139,11,519},{133,10,882},{138,0,246\n},{4,0,934},{5,0,202},{7,11,1897},{8,0,610},{12,11,290},{13,11,80},{13,11,437},{\n145,11,74},{8,0,96},{9,0,36},{10,0,607},{10,0,804},{10,0,832},{11,0,423},{11,0,\n442},{12,0,309},{14,0,199},{15,0,90},{145,0,110},{132,10,426},{6,10,58},{7,0,654\n},{7,10,745},{7,10,1969},{8,0,240},{8,10,675},{9,10,479},{9,10,731},{10,10,330},\n{10,10,593},{10,10,817},{11,10,32},{11,10,133},{11,10,221},{145,10,68},{9,0,13},\n{9,0,398},{9,0,727},{10,0,75},{10,0,184},{10,0,230},{10,0,564},{10,0,569},{11,0,\n973},{12,0,70},{12,0,189},{13,0,57},{141,0,257},{4,11,209},{135,11,902},{7,0,391\n},{137,10,538},{134,0,403},{6,11,303},{7,11,335},{7,11,1437},{7,11,1668},{8,11,\n553},{8,11,652},{8,11,656},{9,11,558},{11,11,743},{149,11,18},{132,11,559},{11,0\n,75},{142,0,267},{6,0,815},{141,11,2},{141,0,366},{137,0,631},{133,11,1017},{5,0\n,345},{135,0,1016},{133,11,709},{134,11,1745},{133,10,566},{6,10,48},{7,0,952},{\n9,10,139},{10,10,399},{11,10,469},{12,10,634},{141,10,223},{133,0,673},{7,11,8},\n{8,11,206},{137,0,850},{6,0,662},{149,0,35},{4,0,287},{133,0,1018},{6,10,114},{7\n,10,1224},{7,10,1556},{136,10,3},{8,10,576},{137,10,267},{4,0,884},{5,0,34},{10,\n0,724},{12,0,444},{13,0,354},{18,0,32},{23,0,24},{23,0,31},{152,0,5},{133,10,933\n},{132,11,776},{138,0,151},{136,0,427},{134,0,382},{132,0,329},{9,0,846},{10,0,\n827},{138,11,33},{7,11,1297},{9,0,279},{10,0,407},{14,0,84},{150,0,18},{136,11,\n406},{132,0,906},{136,0,366},{134,0,843},{134,0,1443},{135,0,1372},{138,0,992},{\n4,0,123},{5,0,605},{7,0,1509},{136,0,36},{132,0,649},{8,11,175},{10,11,168},{138\n,11,573},{133,0,767},{134,0,1018},{135,11,1305},{12,10,30},{13,10,148},{14,10,87\n},{14,10,182},{16,10,42},{148,10,70},{134,11,607},{4,0,273},{5,0,658},{133,0,995\n},{6,0,72},{139,11,174},{7,10,56},{7,10,1989},{8,10,337},{8,10,738},{9,10,600},{\n10,0,483},{12,0,368},{13,10,447},{142,10,92},{5,11,784},{138,10,666},{135,0,1345\n},{139,11,882},{134,0,1293},{133,0,589},{134,0,1988},{5,0,117},{6,0,514},{6,0,\n541},{7,0,1164},{7,0,1436},{8,0,220},{8,0,648},{10,0,688},{139,0,560},{136,0,379\n},{5,0,686},{7,10,866},{135,10,1163},{132,10,328},{9,11,14},{9,11,441},{10,11,\n306},{139,11,9},{4,10,101},{135,10,1171},{5,10,833},{136,10,744},{5,11,161},{7,\n11,839},{135,11,887},{7,0,196},{10,0,765},{11,0,347},{11,0,552},{11,0,790},{12,0\n,263},{13,0,246},{13,0,270},{13,0,395},{14,0,176},{14,0,190},{14,0,398},{14,0,\n412},{15,0,32},{15,0,63},{16,0,88},{147,0,105},{6,10,9},{6,10,397},{7,10,53},{7,\n10,1742},{10,10,632},{11,10,828},{140,10,146},{5,0,381},{135,0,1792},{134,0,1452\n},{135,11,429},{8,0,367},{10,0,760},{14,0,79},{20,0,17},{152,0,0},{7,0,616},{138\n,0,413},{11,10,417},{12,10,223},{140,10,265},{7,11,1611},{13,11,14},{15,11,44},{\n19,11,13},{148,11,76},{135,0,1229},{6,0,120},{7,0,1188},{7,0,1710},{8,0,286},{9,\n0,667},{11,0,592},{139,0,730},{135,11,1814},{135,0,1146},{4,10,186},{5,10,157},{\n8,10,168},{138,10,6},{4,0,352},{135,0,687},{4,0,192},{5,0,49},{6,0,200},{6,0,293\n},{6,0,1696},{135,0,1151},{133,10,875},{5,10,773},{5,10,991},{6,10,1635},{134,10\n,1788},{7,10,111},{136,10,581},{6,0,935},{134,0,1151},{134,0,1050},{132,0,650},{\n132,0,147},{11,0,194},{11,11,194},{12,0,62},{12,0,88},{12,11,62},{140,11,88},{6,\n0,339},{135,0,923},{134,10,1747},{7,11,643},{136,11,236},{133,0,934},{7,10,1364}\n,{7,10,1907},{141,10,158},{132,10,659},{4,10,404},{135,10,675},{7,11,581},{9,11,\n644},{137,11,699},{13,0,211},{14,0,133},{14,0,204},{15,0,64},{15,0,69},{15,0,114\n},{16,0,10},{19,0,23},{19,0,35},{19,0,39},{19,0,51},{19,0,71},{19,0,75},{152,0,\n15},{133,10,391},{5,11,54},{135,11,1513},{5,10,540},{6,10,1697},{7,0,222},{136,0\n,341},{134,10,78},{132,11,744},{136,0,293},{137,11,701},{7,11,930},{10,11,402},{\n10,11,476},{13,11,452},{18,11,55},{147,11,104},{132,0,637},{133,10,460},{8,11,50\n},{137,11,624},{132,11,572},{134,0,1159},{4,10,199},{139,10,34},{134,0,847},{134\n,10,388},{6,11,43},{7,11,38},{8,11,248},{9,11,504},{138,11,513},{4,10,511},{6,10\n,608},{9,0,683},{9,10,333},{10,10,602},{11,10,441},{11,10,723},{11,10,976},{140,\n10,357},{9,0,867},{138,0,837},{6,0,944},{135,11,326},{135,0,1809},{5,10,938},{7,\n11,783},{136,10,707},{133,11,766},{133,11,363},{6,0,170},{7,0,1080},{8,0,395},{8\n,0,487},{141,0,147},{6,11,258},{140,11,409},{4,0,535},{5,11,249},{8,0,618},{148,\n11,82},{6,0,1379},{149,11,15},{135,0,1625},{150,0,23},{5,11,393},{6,11,378},{7,\n11,1981},{9,11,32},{9,11,591},{10,11,685},{10,11,741},{142,11,382},{133,11,788},\n{7,11,1968},{10,11,19},{139,11,911},{7,11,1401},{135,11,1476},{4,11,61},{5,11,58\n},{5,11,171},{5,11,635},{5,11,683},{5,11,700},{6,11,291},{6,11,566},{7,11,1650},\n{11,11,523},{12,11,273},{12,11,303},{15,11,39},{143,11,111},{6,10,469},{7,10,\n1709},{138,10,515},{4,0,778},{134,11,589},{132,0,46},{5,0,811},{6,0,1679},{6,0,\n1714},{135,0,2032},{7,0,1458},{9,0,407},{11,0,15},{12,0,651},{149,0,37},{4,10,\n500},{135,0,938},{6,0,34},{7,0,69},{7,0,1089},{7,0,1281},{8,0,708},{8,0,721},{9,\n0,363},{148,0,98},{10,11,231},{147,11,124},{7,11,726},{152,11,9},{5,10,68},{134,\n10,383},{136,11,583},{4,11,917},{133,11,1005},{11,10,216},{139,10,340},{135,11,\n1675},{8,0,441},{10,0,314},{143,0,3},{132,11,919},{4,10,337},{6,10,353},{7,10,\n1934},{8,10,488},{137,10,429},{7,0,889},{7,10,1795},{8,10,259},{9,10,135},{9,10,\n177},{9,10,860},{10,10,825},{11,10,115},{11,10,370},{11,10,405},{11,10,604},{12,\n10,10},{12,10,667},{12,10,669},{13,10,76},{14,10,310},{15,10,76},{15,10,147},{\n148,10,23},{4,10,15},{4,11,255},{5,10,22},{5,11,302},{6,10,244},{6,11,132},{7,10\n,40},{7,10,200},{7,10,906},{7,10,1199},{7,11,128},{7,11,283},{7,11,1299},{9,10,\n616},{10,10,716},{10,11,52},{10,11,514},{11,10,635},{11,10,801},{11,11,925},{12,\n10,458},{13,11,92},{142,11,309},{132,0,462},{137,11,173},{135,10,1735},{5,10,598\n},{7,10,791},{8,0,525},{8,10,108},{137,10,123},{5,0,73},{6,0,23},{134,0,338},{\n132,0,676},{132,10,683},{7,0,725},{8,0,498},{139,0,268},{12,0,21},{151,0,7},{135\n,0,773},{4,10,155},{135,10,1689},{4,0,164},{5,0,730},{5,10,151},{5,10,741},{6,11\n,210},{7,10,498},{7,10,870},{7,10,1542},{12,10,213},{14,10,36},{14,10,391},{17,\n10,111},{18,10,6},{18,10,46},{18,10,151},{19,10,36},{20,10,32},{20,10,56},{20,10\n,69},{20,10,102},{21,10,4},{22,10,8},{22,10,10},{22,10,14},{150,10,31},{4,10,624\n},{135,10,1752},{4,0,583},{6,11,588},{9,0,936},{15,0,214},{18,0,199},{152,0,26},\n{4,11,284},{6,11,223},{7,0,1462},{139,0,659},{133,0,220},{139,0,803},{132,0,544}\n,{4,10,492},{133,10,451},{16,0,98},{148,0,119},{4,11,218},{7,11,526},{143,11,137\n},{135,10,835},{4,11,270},{5,11,192},{6,11,332},{7,11,1322},{13,10,70},{13,11,9}\n,{14,11,104},{142,11,311},{132,10,539},{140,11,661},{5,0,176},{6,0,437},{6,0,564\n},{11,0,181},{141,0,183},{135,0,1192},{6,10,113},{135,10,436},{136,10,718},{135,\n10,520},{135,0,1878},{140,11,196},{7,11,379},{8,11,481},{137,11,377},{5,11,1003}\n,{6,11,149},{137,11,746},{8,11,262},{9,11,627},{10,11,18},{11,11,214},{11,11,404\n},{11,11,457},{11,11,780},{11,11,849},{11,11,913},{13,11,330},{13,11,401},{142,\n11,200},{149,0,26},{136,11,304},{132,11,142},{135,0,944},{4,0,790},{5,0,273},{\n134,0,394},{134,0,855},{4,0,135},{6,0,127},{7,0,1185},{7,0,1511},{8,0,613},{11,0\n,5},{12,0,336},{12,0,495},{12,0,586},{12,0,660},{12,0,668},{14,0,385},{15,0,118}\n,{17,0,20},{146,0,98},{6,0,230},{9,0,752},{12,10,610},{13,10,431},{16,10,59},{\n146,0,109},{7,0,1954},{135,11,925},{4,11,471},{5,11,51},{6,11,602},{8,11,484},{\n10,11,195},{140,11,159},{132,10,307},{136,11,688},{132,11,697},{7,11,812},{7,11,\n1261},{7,11,1360},{9,11,632},{140,11,352},{5,0,162},{5,10,964},{136,0,68},{4,0,\n654},{136,11,212},{4,0,156},{7,0,998},{7,0,1045},{7,0,1860},{9,0,48},{9,0,692},{\n11,0,419},{139,0,602},{133,11,221},{4,11,373},{5,11,283},{6,11,480},{135,11,609}\n,{142,11,216},{132,0,240},{6,11,192},{9,11,793},{145,11,55},{4,10,75},{5,10,180}\n,{6,10,500},{7,10,58},{7,10,710},{138,10,645},{4,11,132},{5,10,649},{5,11,69},{\n135,11,1242},{6,10,276},{7,10,282},{7,10,879},{7,10,924},{8,10,459},{9,10,599},{\n9,10,754},{11,10,574},{12,10,128},{12,10,494},{13,10,52},{13,10,301},{15,10,30},\n{143,10,132},{132,10,200},{4,11,111},{135,11,302},{9,0,197},{10,0,300},{12,0,473\n},{13,0,90},{141,0,405},{132,11,767},{6,11,42},{7,11,1416},{7,11,1590},{7,11,\n2005},{8,11,131},{8,11,466},{9,11,672},{13,11,252},{148,11,103},{8,0,958},{8,0,\n999},{10,0,963},{138,0,1001},{135,10,1621},{135,0,858},{4,0,606},{137,11,444},{6\n,11,44},{136,11,368},{139,11,172},{4,11,570},{133,11,120},{139,11,624},{6,10,225\n},{7,0,1978},{8,0,676},{137,10,211},{7,0,972},{8,10,687},{139,0,102},{6,11,227},\n{135,11,1589},{8,10,58},{9,10,724},{11,10,809},{13,10,113},{145,10,72},{4,0,361}\n,{133,0,315},{132,0,461},{6,10,345},{135,10,1247},{132,0,472},{8,10,767},{8,10,\n803},{9,10,301},{137,10,903},{135,11,1333},{135,11,477},{7,10,1949},{136,10,674}\n,{6,0,905},{138,0,747},{133,0,155},{134,10,259},{7,0,163},{8,0,319},{9,0,402},{\n10,0,24},{10,0,681},{11,0,200},{12,0,253},{12,0,410},{142,0,219},{5,0,475},{6,11\n,1667},{7,0,1780},{7,11,2036},{9,0,230},{10,11,600},{11,0,297},{11,0,558},{14,0,\n322},{147,0,76},{136,10,254},{6,0,848},{135,0,1956},{6,11,511},{140,11,132},{5,\n11,568},{6,11,138},{135,11,1293},{6,0,631},{137,0,838},{149,0,36},{4,11,565},{8,\n11,23},{136,11,827},{5,0,944},{134,0,1769},{4,0,144},{4,11,922},{5,11,1023},{6,0\n,842},{134,0,1400},{133,10,248},{9,10,800},{10,10,693},{11,10,482},{11,10,734},{\n139,10,789},{7,11,1002},{139,11,145},{4,10,116},{5,10,95},{5,10,445},{7,10,1688}\n,{8,10,29},{9,10,272},{11,10,509},{139,10,915},{14,0,369},{146,0,72},{135,10,\n1641},{132,11,740},{133,10,543},{140,11,116},{5,10,181},{6,0,247},{8,10,41},{137\n,0,555},{133,10,657},{136,0,996},{138,10,709},{7,0,189},{8,10,202},{138,10,536},\n{136,11,402},{4,11,716},{141,11,31},{10,0,280},{138,0,797},{9,10,423},{140,10,89\n},{8,10,113},{9,10,877},{10,10,554},{11,10,83},{12,10,136},{147,10,109},{133,10,\n976},{4,10,206},{135,0,746},{136,0,526},{139,0,345},{136,0,1017},{8,11,152},{9,\n11,53},{9,11,268},{9,11,901},{10,11,518},{10,11,829},{11,11,188},{13,11,74},{14,\n11,46},{15,11,17},{15,11,33},{17,11,40},{18,11,36},{19,11,20},{22,11,1},{152,11,\n2},{133,11,736},{136,11,532},{5,0,428},{138,0,651},{135,11,681},{135,0,1162},{7,\n0,327},{8,10,226},{10,10,537},{11,10,570},{11,10,605},{11,10,799},{11,10,804},{\n12,10,85},{12,10,516},{12,10,623},{12,11,677},{13,0,230},{13,10,361},{14,10,77},\n{14,10,78},{17,0,113},{147,10,110},{4,0,792},{4,10,769},{7,0,1717},{138,0,546},{\n4,11,684},{136,11,384},{132,10,551},{134,0,1203},{9,10,57},{9,10,459},{10,10,425\n},{11,10,119},{12,10,184},{12,10,371},{13,10,358},{145,10,51},{5,0,672},{5,10,\n814},{8,10,10},{9,10,421},{9,10,729},{10,10,609},{139,10,689},{138,0,189},{134,\n10,624},{7,11,110},{7,11,188},{8,11,290},{8,11,591},{9,11,382},{9,11,649},{11,11\n,71},{11,11,155},{11,11,313},{12,11,5},{13,11,325},{142,11,287},{133,0,99},{6,0,\n1053},{135,0,298},{7,11,360},{7,11,425},{9,11,66},{9,11,278},{138,11,644},{4,0,\n397},{136,0,555},{137,10,269},{132,10,528},{4,11,900},{133,11,861},{5,11,254},{6\n,0,1157},{7,11,985},{136,11,73},{7,11,1959},{136,11,683},{12,0,398},{20,0,39},{\n21,0,11},{150,0,41},{4,0,485},{7,0,353},{135,0,1523},{6,0,366},{7,0,1384},{135,0\n,1601},{138,0,787},{137,0,282},{5,10,104},{6,10,173},{135,10,1631},{139,11,146},\n{4,0,157},{133,0,471},{134,0,941},{132,11,725},{7,0,1336},{8,10,138},{8,10,342},\n{9,10,84},{10,10,193},{11,10,883},{140,10,359},{134,11,196},{136,0,116},{133,11,\n831},{134,0,787},{134,10,95},{6,10,406},{10,10,409},{10,10,447},{11,10,44},{140,\n10,100},{5,0,160},{7,0,363},{7,0,589},{10,0,170},{141,0,55},{134,0,1815},{132,0,\n866},{4,11,321},{6,0,889},{6,0,1067},{6,0,1183},{134,11,569},{5,11,848},{134,11,\n66},{4,11,36},{6,10,1636},{7,11,1387},{10,11,205},{11,11,755},{141,11,271},{132,\n0,689},{4,10,282},{7,10,1034},{9,0,820},{11,10,398},{11,10,634},{12,10,1},{12,10\n,79},{12,10,544},{14,10,237},{17,10,10},{146,10,20},{4,0,108},{7,0,804},{139,0,\n498},{132,11,887},{6,0,1119},{135,11,620},{6,11,165},{138,11,388},{5,0,244},{5,\n10,499},{6,10,476},{7,10,600},{7,10,888},{135,10,1096},{140,0,609},{135,0,1005},\n{4,0,412},{133,0,581},{4,11,719},{135,11,155},{7,10,296},{7,10,596},{8,10,560},{\n8,10,586},{9,10,612},{11,10,304},{12,10,46},{13,10,89},{14,10,112},{145,10,122},\n{4,0,895},{133,0,772},{142,11,307},{135,0,1898},{4,0,926},{133,0,983},{4,11,353}\n,{6,11,146},{6,11,1789},{7,11,288},{7,11,990},{7,11,1348},{9,11,665},{9,11,898},\n{11,11,893},{142,11,212},{132,0,538},{133,11,532},{6,0,294},{7,0,1267},{8,0,624}\n,{141,0,496},{4,11,45},{7,0,1325},{135,11,1257},{138,0,301},{7,10,1599},{7,10,\n1723},{8,10,79},{8,10,106},{8,10,190},{8,10,302},{8,10,383},{8,10,713},{9,0,298}\n,{9,10,119},{9,10,233},{9,10,419},{9,10,471},{10,10,181},{10,10,406},{11,10,57},\n{11,10,85},{11,10,120},{11,10,177},{11,10,296},{11,10,382},{11,10,454},{11,10,\n758},{11,10,999},{12,0,291},{12,10,27},{12,10,131},{12,10,245},{12,10,312},{12,\n10,446},{12,10,454},{13,0,276},{13,10,98},{13,10,426},{13,10,508},{14,0,6},{14,\n10,163},{14,10,272},{14,10,277},{14,10,370},{15,10,95},{15,10,138},{15,10,167},{\n17,0,18},{17,10,38},{20,10,96},{149,0,32},{132,0,757},{134,0,1263},{4,0,820},{\n134,10,1759},{133,0,722},{136,11,816},{138,10,372},{145,10,16},{134,0,1039},{4,0\n,991},{134,0,2028},{133,10,258},{7,0,1875},{139,0,124},{6,11,559},{6,11,1691},{\n135,11,586},{5,0,324},{7,0,881},{8,10,134},{9,10,788},{140,10,438},{7,11,1823},{\n139,11,693},{6,0,1348},{134,0,1545},{134,0,911},{132,0,954},{7,10,1948},{7,10,\n2004},{8,0,329},{136,0,414},{5,0,517},{6,10,439},{7,10,780},{135,10,1040},{132,0\n,816},{5,10,1},{6,10,81},{138,10,520},{5,10,482},{8,10,98},{9,0,713},{10,0,222},\n{10,10,700},{10,10,822},{11,10,302},{11,10,778},{12,10,50},{12,10,127},{12,10,\n396},{13,10,62},{13,10,328},{14,10,122},{147,10,72},{137,0,33},{5,10,2},{7,10,\n1494},{136,10,589},{6,10,512},{7,10,797},{8,10,253},{9,10,77},{10,10,1},{10,10,\n129},{10,10,225},{10,11,108},{11,10,118},{11,10,226},{11,10,251},{11,10,430},{11\n,10,701},{11,10,974},{11,10,982},{11,11,116},{12,10,64},{12,10,260},{12,10,488},\n{140,10,690},{134,11,456},{133,11,925},{5,0,150},{7,0,106},{7,0,774},{8,0,603},{\n9,0,593},{9,0,634},{10,0,44},{10,0,173},{11,0,462},{11,0,515},{13,0,216},{13,0,\n288},{142,0,400},{137,10,347},{5,0,748},{134,0,553},{12,0,108},{141,0,291},{4,10\n,12},{7,0,420},{7,10,522},{7,10,809},{8,10,797},{141,10,88},{6,11,193},{7,11,240\n},{7,11,1682},{10,11,51},{10,11,640},{11,11,410},{13,11,82},{14,11,247},{14,11,\n331},{142,11,377},{133,10,528},{135,0,1777},{4,0,493},{144,0,55},{136,11,633},{\n139,0,81},{6,0,980},{136,0,321},{148,10,109},{5,10,266},{9,10,290},{9,10,364},{\n10,10,293},{11,10,606},{142,10,45},{6,0,568},{7,0,112},{7,0,1804},{8,0,362},{8,0\n,410},{8,0,830},{9,0,514},{11,0,649},{142,0,157},{4,0,74},{6,0,510},{6,10,594},{\n9,10,121},{10,10,49},{10,10,412},{139,10,834},{134,0,838},{136,10,748},{132,10,\n466},{132,0,625},{135,11,1443},{4,11,237},{135,11,514},{9,10,378},{141,10,162},{\n6,0,16},{6,0,158},{7,0,43},{7,0,129},{7,0,181},{8,0,276},{8,0,377},{10,0,523},{\n11,0,816},{12,0,455},{13,0,303},{142,0,135},{135,0,281},{4,0,1},{7,0,1143},{7,0,\n1463},{8,0,61},{9,0,207},{9,0,390},{9,0,467},{139,0,836},{6,11,392},{7,11,65},{\n135,11,2019},{132,10,667},{4,0,723},{5,0,895},{7,0,1031},{8,0,199},{8,0,340},{9,\n0,153},{9,0,215},{10,0,21},{10,0,59},{10,0,80},{10,0,224},{10,0,838},{11,0,229},\n{11,0,652},{12,0,192},{13,0,146},{142,0,91},{132,0,295},{137,0,51},{9,11,222},{\n10,11,43},{139,11,900},{5,0,309},{140,0,211},{5,0,125},{8,0,77},{138,0,15},{136,\n11,604},{138,0,789},{4,10,39},{5,0,173},{7,10,1843},{8,10,407},{11,10,144},{140,\n10,523},{138,11,265},{133,0,439},{132,10,510},{7,0,648},{7,0,874},{7,10,1980},{\n10,10,487},{10,10,809},{11,0,164},{12,0,76},{146,0,9},{12,0,111},{13,10,260},{14\n,0,294},{18,10,63},{147,0,45},{133,11,549},{134,10,570},{4,0,8},{7,0,1152},{7,0,\n1153},{7,0,1715},{9,0,374},{10,0,478},{139,0,648},{135,0,1099},{5,0,575},{6,0,\n354},{135,0,701},{7,11,36},{8,11,201},{136,11,605},{4,10,787},{136,11,156},{6,0,\n518},{149,11,13},{140,11,224},{134,0,702},{132,10,516},{5,11,724},{10,11,305},{\n11,11,151},{12,11,33},{12,11,121},{12,11,381},{17,11,3},{17,11,27},{17,11,78},{\n18,11,18},{19,11,54},{149,11,5},{4,11,523},{5,11,638},{8,0,87},{11,10,887},{14,\n10,365},{142,10,375},{138,0,438},{136,10,821},{135,11,1908},{6,11,242},{7,11,227\n},{7,11,1581},{8,11,104},{9,11,113},{9,11,220},{9,11,427},{10,11,74},{10,11,239}\n,{11,11,579},{11,11,1023},{13,11,4},{13,11,204},{13,11,316},{18,11,95},{148,11,\n86},{4,0,69},{5,0,122},{5,0,849},{6,0,1633},{9,0,656},{138,0,464},{4,10,10},{7,0\n,1802},{139,10,786},{135,11,861},{139,0,499},{7,0,476},{7,0,1592},{138,0,87},{\n133,10,684},{4,0,840},{134,10,27},{142,0,283},{6,0,1620},{7,11,1328},{136,11,494\n},{5,0,859},{7,0,1160},{8,0,107},{9,0,291},{9,0,439},{10,0,663},{11,0,609},{140,\n0,197},{7,11,1306},{8,11,505},{9,11,482},{10,11,126},{11,11,225},{12,11,347},{12\n,11,449},{13,11,19},{142,11,218},{5,11,268},{10,11,764},{12,11,120},{13,11,39},{\n145,11,127},{145,10,56},{7,11,1672},{10,11,472},{11,11,189},{143,11,51},{6,10,\n342},{6,10,496},{8,10,275},{137,10,206},{133,0,600},{4,0,117},{6,0,372},{7,0,\n1905},{142,0,323},{4,10,909},{5,10,940},{135,11,1471},{132,10,891},{4,0,722},{\n139,0,471},{4,11,384},{135,11,1022},{132,10,687},{9,0,5},{12,0,216},{12,0,294},{\n12,0,298},{12,0,400},{12,0,518},{13,0,229},{143,0,139},{135,11,1703},{7,11,1602}\n,{10,11,698},{12,11,212},{141,11,307},{6,10,41},{141,10,160},{135,11,1077},{9,11\n,159},{11,11,28},{140,11,603},{4,0,514},{7,0,1304},{138,0,477},{134,0,1774},{9,0\n,88},{139,0,270},{5,0,12},{6,10,1718},{7,0,375},{137,0,438},{132,11,515},{136,10\n,778},{8,11,632},{8,11,697},{137,11,854},{6,0,362},{6,0,997},{146,0,51},{7,0,816\n},{7,0,1241},{9,0,283},{9,0,520},{10,0,213},{10,0,307},{10,0,463},{10,0,671},{10\n,0,746},{11,0,401},{11,0,794},{12,0,517},{18,0,107},{147,0,115},{133,10,115},{\n150,11,28},{4,11,136},{133,11,551},{142,10,314},{132,0,258},{6,0,22},{7,0,903},{\n7,0,1963},{8,0,639},{138,0,577},{5,0,681},{5,10,193},{8,0,782},{12,10,178},{13,0\n,130},{145,0,84},{9,11,17},{138,11,291},{7,11,1287},{9,11,44},{10,11,552},{10,11\n,642},{11,11,839},{12,11,274},{12,11,275},{12,11,372},{13,11,91},{142,11,125},{\n135,10,174},{4,0,664},{5,0,804},{139,0,1013},{134,0,942},{6,0,1349},{6,0,1353},{\n6,0,1450},{7,11,1518},{139,11,694},{4,10,122},{5,10,796},{5,10,952},{6,10,1660},\n{6,10,1671},{8,10,567},{9,10,687},{9,10,742},{10,10,686},{11,0,356},{11,10,682},\n{140,10,281},{5,0,32},{6,11,147},{7,11,886},{9,11,753},{138,11,268},{5,10,179},{\n7,10,1095},{135,10,1213},{4,10,66},{7,10,722},{135,10,904},{135,10,352},{9,11,\n245},{138,11,137},{4,0,289},{5,11,414},{7,0,629},{7,0,1698},{7,0,1711},{140,0,\n215},{6,0,1975},{135,11,1762},{6,0,450},{136,0,109},{141,10,35},{134,11,599},{\n136,0,705},{133,0,664},{134,11,1749},{11,11,402},{12,11,109},{12,11,431},{13,11,\n179},{13,11,206},{14,11,175},{14,11,217},{16,11,3},{148,11,53},{135,0,1238},{134\n,11,1627},{132,11,488},{10,10,592},{10,10,753},{12,10,317},{12,10,355},{12,10,\n465},{12,10,469},{12,10,560},{12,10,578},{141,0,318},{133,10,564},{132,11,83},{\n140,11,676},{6,0,1872},{6,0,1906},{6,0,1907},{9,0,934},{9,0,956},{9,0,960},{9,0,\n996},{12,0,794},{12,0,876},{12,0,880},{12,0,918},{15,0,230},{18,0,234},{18,0,238\n},{21,0,38},{149,0,62},{134,10,556},{134,11,278},{137,0,103},{7,10,544},{8,10,\n719},{138,10,61},{4,10,5},{5,10,498},{8,10,637},{137,10,521},{7,0,777},{12,0,229\n},{12,0,239},{12,11,229},{12,11,239},{15,0,12},{143,11,12},{6,0,26},{7,11,388},{\n7,11,644},{139,11,781},{7,11,229},{8,11,59},{9,11,190},{9,11,257},{10,11,378},{\n140,11,191},{133,10,927},{135,10,1441},{4,10,893},{5,10,780},{133,10,893},{4,0,\n414},{5,0,467},{9,0,654},{10,0,451},{12,0,59},{141,0,375},{142,0,173},{135,0,17}\n,{5,10,238},{135,0,1350},{135,0,955},{4,0,960},{10,0,887},{12,0,753},{18,0,161},\n{18,0,162},{152,0,19},{136,11,344},{6,10,1729},{137,11,288},{132,11,660},{4,0,\n217},{4,10,60},{5,0,710},{7,0,760},{7,0,1926},{7,10,1800},{8,10,314},{9,0,428},{\n9,0,708},{9,10,700},{10,0,254},{10,0,296},{10,0,720},{11,0,109},{11,0,255},{11,\n10,487},{12,0,165},{12,0,315},{13,0,107},{13,0,203},{14,0,54},{14,0,99},{14,0,\n114},{14,0,388},{16,0,85},{17,0,9},{17,0,33},{20,0,25},{20,0,28},{20,0,29},{21,0\n,9},{21,0,10},{21,0,34},{150,0,17},{7,11,1035},{138,11,737},{7,11,690},{9,11,217\n},{9,11,587},{140,11,521},{6,0,919},{7,11,706},{7,11,1058},{138,11,538},{7,10,\n1853},{138,10,437},{136,10,419},{6,0,280},{10,0,502},{11,0,344},{140,0,38},{5,0,\n45},{7,0,1161},{11,0,448},{11,0,880},{13,0,139},{13,0,407},{15,0,16},{17,0,95},{\n18,0,66},{18,0,88},{18,0,123},{149,0,7},{11,11,92},{11,11,196},{11,11,409},{11,\n11,450},{11,11,666},{11,11,777},{12,11,262},{13,11,385},{13,11,393},{15,11,115},\n{16,11,45},{145,11,82},{136,0,777},{134,11,1744},{4,0,410},{5,10,828},{135,0,521\n},{134,0,673},{7,0,1110},{7,0,1778},{7,10,176},{135,10,178},{5,10,806},{7,10,\n1976},{7,11,268},{136,11,569},{4,11,733},{9,11,194},{10,11,92},{11,11,198},{12,\n11,84},{12,11,87},{13,11,128},{144,11,74},{4,10,51},{5,0,341},{6,10,4},{7,0,1129\n},{7,10,591},{7,10,849},{7,10,951},{7,10,1613},{7,10,1760},{7,10,1988},{9,10,434\n},{10,10,754},{11,0,414},{11,10,25},{139,10,37},{133,10,902},{135,10,928},{135,0\n,787},{132,0,436},{134,10,270},{7,0,1587},{135,0,1707},{6,0,377},{7,0,1025},{9,0\n,613},{145,0,104},{7,11,982},{7,11,1361},{10,11,32},{143,11,56},{139,0,96},{132,\n0,451},{132,10,416},{142,10,372},{5,10,152},{5,10,197},{7,10,340},{7,10,867},{7,\n11,306},{10,10,548},{10,10,581},{11,10,6},{12,10,3},{12,10,19},{14,10,110},{142,\n10,289},{134,0,680},{134,11,609},{7,0,483},{7,10,190},{8,10,28},{8,10,141},{8,10\n,444},{8,10,811},{9,10,468},{11,10,334},{12,10,24},{12,10,386},{140,10,576},{5,\n10,757},{138,0,916},{5,10,721},{135,10,1553},{133,11,178},{134,0,937},{132,10,\n898},{133,0,739},{147,0,82},{135,0,663},{146,0,128},{5,10,277},{141,10,247},{134\n,0,1087},{132,10,435},{6,11,381},{7,11,645},{7,11,694},{136,11,546},{7,0,503},{\n135,0,1885},{6,0,1965},{8,0,925},{138,0,955},{4,0,113},{5,0,163},{5,0,735},{7,0,\n1009},{9,0,9},{9,0,771},{12,0,90},{13,0,138},{13,0,410},{143,0,128},{4,0,324},{\n138,0,104},{5,10,265},{6,10,212},{135,0,460},{133,11,105},{7,11,261},{7,11,1107}\n,{7,11,1115},{7,11,1354},{7,11,1588},{7,11,1705},{7,11,1902},{9,11,465},{10,11,\n248},{10,11,349},{10,11,647},{11,11,527},{11,11,660},{11,11,669},{12,11,529},{\n141,11,305},{5,11,438},{9,11,694},{12,11,627},{141,11,210},{152,11,11},{4,0,935}\n,{133,0,823},{132,10,702},{5,0,269},{5,10,808},{7,0,434},{7,0,891},{7,10,2045},{\n8,0,339},{9,0,702},{11,0,594},{11,0,718},{145,0,100},{7,0,1014},{9,0,485},{141,0\n,264},{134,0,1713},{7,0,1810},{11,0,866},{12,0,103},{12,11,233},{141,0,495},{4,0\n,423},{10,0,949},{138,0,1013},{135,0,900},{8,11,25},{138,11,826},{5,10,166},{8,\n10,739},{140,10,511},{134,0,2018},{7,11,1270},{139,11,612},{4,10,119},{5,10,170}\n,{5,10,447},{7,10,1708},{7,10,1889},{9,10,357},{9,10,719},{12,10,486},{140,10,\n596},{12,0,574},{140,11,574},{132,11,308},{6,0,964},{6,0,1206},{134,0,1302},{4,\n10,450},{135,10,1158},{135,11,150},{136,11,649},{14,0,213},{148,0,38},{9,11,45},\n{9,11,311},{141,11,42},{134,11,521},{7,10,1375},{7,10,1466},{138,10,331},{132,10\n,754},{5,11,339},{7,11,1442},{14,11,3},{15,11,41},{147,11,66},{136,11,378},{134,\n0,1022},{5,10,850},{136,10,799},{142,0,143},{135,0,2029},{134,11,1628},{8,0,523}\n,{150,0,34},{5,0,625},{135,0,1617},{7,0,275},{7,10,238},{7,10,2033},{8,10,120},{\n8,10,188},{8,10,659},{9,10,598},{10,10,466},{12,10,342},{12,10,588},{13,10,503},\n{14,10,246},{143,10,92},{7,0,37},{8,0,425},{8,0,693},{9,0,720},{10,0,380},{10,0,\n638},{11,0,273},{11,0,473},{12,0,61},{143,0,43},{135,11,829},{135,0,1943},{132,0\n,765},{5,11,486},{135,11,1349},{7,11,1635},{8,11,17},{10,11,217},{138,11,295},{4\n,10,201},{7,10,1744},{8,10,602},{11,10,247},{11,10,826},{145,10,65},{138,11,558}\n,{11,0,551},{142,0,159},{8,10,164},{146,10,62},{139,11,176},{132,0,168},{136,0,\n1010},{134,0,1994},{135,0,91},{138,0,532},{135,10,1243},{135,0,1884},{132,10,907\n},{5,10,100},{10,10,329},{12,10,416},{149,10,29},{134,11,447},{132,10,176},{5,10\n,636},{5,10,998},{7,10,9},{7,10,1508},{8,10,26},{9,10,317},{9,10,358},{10,10,210\n},{10,10,292},{10,10,533},{11,10,555},{12,10,526},{12,10,607},{13,10,263},{13,10\n,459},{142,10,271},{4,11,609},{135,11,756},{6,0,15},{7,0,70},{10,0,240},{147,0,\n93},{4,11,930},{133,11,947},{134,0,1227},{134,0,1534},{133,11,939},{133,11,962},\n{5,11,651},{8,11,170},{9,11,61},{9,11,63},{10,11,23},{10,11,37},{10,11,834},{11,\n11,4},{11,11,187},{11,11,281},{11,11,503},{11,11,677},{12,11,96},{12,11,130},{12\n,11,244},{14,11,5},{14,11,40},{14,11,162},{14,11,202},{146,11,133},{4,11,406},{5\n,11,579},{12,11,492},{150,11,15},{139,0,392},{6,10,610},{10,10,127},{141,10,27},\n{7,0,655},{7,0,1844},{136,10,119},{4,0,145},{6,0,176},{7,0,395},{137,0,562},{132\n,0,501},{140,11,145},{136,0,1019},{134,0,509},{139,0,267},{6,11,17},{7,11,16},{7\n,11,1001},{7,11,1982},{9,11,886},{10,11,489},{10,11,800},{11,11,782},{12,11,320}\n,{13,11,467},{14,11,145},{14,11,387},{143,11,119},{145,11,17},{5,11,458},{134,0,\n1099},{7,11,1983},{8,11,0},{8,11,171},{9,11,120},{9,11,732},{10,11,473},{11,11,\n656},{11,11,998},{18,11,0},{18,11,2},{147,11,21},{12,11,427},{146,11,38},{10,0,\n948},{138,0,968},{7,10,126},{136,10,84},{136,10,790},{4,0,114},{9,0,492},{13,0,\n462},{142,0,215},{6,10,64},{12,10,377},{141,10,309},{4,0,77},{5,0,361},{6,0,139}\n,{6,0,401},{6,0,404},{7,0,413},{7,0,715},{7,0,1716},{11,0,279},{12,0,179},{12,0,\n258},{13,0,244},{142,0,358},{134,0,1717},{7,0,772},{7,0,1061},{7,0,1647},{7,10,\n1104},{8,0,82},{11,0,250},{11,0,607},{11,10,269},{11,10,539},{11,10,627},{11,10,\n706},{11,10,975},{12,0,311},{12,0,420},{12,10,248},{12,10,434},{12,10,600},{12,\n10,622},{13,0,184},{13,0,367},{13,10,297},{13,10,485},{14,10,69},{14,10,409},{\n143,10,108},{135,0,724},{4,11,512},{4,11,519},{133,11,342},{134,0,1133},{145,11,\n29},{11,10,977},{141,10,507},{6,0,841},{6,0,1042},{6,0,1194},{10,0,993},{140,0,\n1021},{6,11,31},{7,11,491},{7,11,530},{8,11,592},{9,10,34},{11,10,484},{11,11,53\n},{11,11,779},{12,11,167},{12,11,411},{14,11,14},{14,11,136},{15,11,72},{16,11,\n17},{144,11,72},{4,0,1021},{5,11,907},{134,0,2037},{6,10,1700},{7,0,373},{7,10,\n293},{7,10,382},{7,10,1026},{7,10,1087},{7,10,2027},{8,0,335},{8,0,596},{8,10,\n252},{8,10,727},{8,10,729},{9,0,488},{9,10,30},{9,10,199},{9,10,231},{9,10,251},\n{9,10,334},{9,10,361},{9,10,712},{10,10,55},{10,10,60},{10,10,232},{10,10,332},{\n10,10,384},{10,10,396},{10,10,504},{10,10,542},{10,10,652},{11,10,20},{11,10,48}\n,{11,10,207},{11,10,291},{11,10,298},{11,10,342},{11,10,365},{11,10,394},{11,10,\n620},{11,10,705},{11,10,1017},{12,10,123},{12,10,340},{12,10,406},{12,10,643},{\n13,10,61},{13,10,269},{13,10,311},{13,10,319},{13,10,486},{14,10,234},{15,10,62}\n,{15,10,85},{16,10,71},{18,10,119},{148,10,105},{150,0,37},{4,11,208},{5,11,106}\n,{6,11,531},{8,11,408},{9,11,188},{138,11,572},{132,0,564},{6,0,513},{135,0,1052\n},{132,0,825},{9,0,899},{140,11,441},{134,0,778},{133,11,379},{7,0,1417},{12,0,\n382},{17,0,48},{152,0,12},{132,11,241},{6,10,379},{7,0,1116},{7,10,270},{8,10,\n176},{8,10,183},{9,10,432},{9,10,661},{12,10,247},{12,10,617},{146,10,125},{5,10\n,792},{133,10,900},{6,0,545},{7,0,565},{7,0,1669},{10,0,114},{11,0,642},{140,0,\n618},{133,0,5},{138,11,7},{132,11,259},{135,0,192},{134,0,701},{136,0,763},{135,\n10,1979},{4,10,901},{133,10,776},{10,0,755},{147,0,29},{133,0,759},{4,11,173},{5\n,11,312},{5,11,512},{135,11,1285},{7,11,1603},{7,11,1691},{9,11,464},{11,11,195}\n,{12,11,279},{12,11,448},{14,11,11},{147,11,102},{7,0,370},{7,0,1007},{7,0,1177}\n,{135,0,1565},{135,0,1237},{4,0,87},{5,0,250},{141,0,298},{4,11,452},{5,11,583},\n{5,11,817},{6,11,433},{7,11,593},{7,11,720},{7,11,1378},{8,11,161},{9,11,284},{\n10,11,313},{139,11,886},{4,11,547},{135,11,1409},{136,11,722},{4,10,37},{5,10,\n334},{135,10,1253},{132,10,508},{12,0,107},{146,0,31},{8,11,420},{139,11,193},{\n135,0,814},{135,11,409},{140,0,991},{4,0,57},{7,0,1195},{7,0,1438},{7,0,1548},{7\n,0,1835},{7,0,1904},{9,0,757},{10,0,604},{139,0,519},{132,0,540},{138,11,308},{\n132,10,533},{136,0,608},{144,11,65},{4,0,1014},{134,0,2029},{4,0,209},{5,11,1002\n},{7,0,902},{136,11,745},{134,0,2030},{6,0,303},{7,0,335},{7,0,1437},{7,0,1668},\n{8,0,553},{8,0,652},{8,0,656},{9,0,558},{11,0,743},{149,0,18},{5,11,575},{6,11,\n354},{135,11,701},{4,11,239},{6,11,477},{7,11,1607},{11,11,68},{139,11,617},{132\n,0,559},{8,0,527},{18,0,60},{147,0,24},{133,10,920},{138,0,511},{133,0,1017},{\n133,0,675},{138,10,391},{7,10,1952},{139,0,156},{138,11,369},{132,11,367},{133,0\n,709},{6,0,698},{134,0,887},{142,10,126},{134,0,1745},{132,10,483},{13,11,299},{\n142,11,75},{133,0,714},{7,0,8},{136,0,206},{138,10,480},{4,11,694},{9,10,495},{\n146,10,104},{7,11,1248},{11,11,621},{139,11,702},{140,11,687},{132,0,776},{139,\n10,1009},{135,0,1272},{134,0,1059},{8,10,653},{13,10,93},{147,10,14},{135,11,213\n},{136,0,406},{133,10,172},{132,0,947},{8,0,175},{10,0,168},{138,0,573},{132,0,\n870},{6,0,1567},{151,11,28},{134,11,472},{5,10,260},{136,11,132},{4,11,751},{11,\n11,390},{140,11,32},{4,11,409},{133,11,78},{6,11,473},{12,0,554},{145,11,105},{\n133,0,784},{8,0,908},{136,11,306},{139,0,882},{6,0,358},{7,0,1393},{7,11,1759},{\n8,0,396},{8,11,396},{10,0,263},{10,11,263},{14,0,154},{14,11,154},{16,0,48},{16,\n11,48},{17,0,8},{145,11,8},{13,11,163},{13,11,180},{18,11,78},{148,11,35},{14,0,\n32},{18,0,85},{20,0,2},{152,0,16},{7,0,228},{8,10,167},{8,10,375},{9,10,82},{9,\n10,561},{10,0,770},{138,10,620},{132,0,845},{9,0,14},{9,0,441},{10,0,306},{139,0\n,9},{8,10,194},{8,10,756},{11,0,966},{12,0,287},{13,0,342},{13,0,402},{15,0,110}\n,{143,0,163},{134,0,1578},{4,0,967},{6,0,1820},{6,0,1847},{140,0,716},{136,0,594\n},{7,0,1428},{7,0,1640},{7,0,1867},{7,11,883},{9,0,169},{9,0,182},{9,0,367},{9,0\n,478},{9,0,506},{9,0,551},{9,0,557},{9,0,648},{9,0,697},{9,0,705},{9,0,725},{9,0\n,787},{9,0,794},{10,0,198},{10,0,214},{10,0,267},{10,0,275},{10,0,456},{10,0,551\n},{10,0,561},{10,0,613},{10,0,627},{10,0,668},{10,0,675},{10,0,691},{10,0,695},{\n10,0,707},{10,0,715},{11,0,183},{11,0,201},{11,0,244},{11,0,262},{11,0,352},{11,\n0,439},{11,0,493},{11,0,572},{11,0,591},{11,0,608},{11,0,611},{11,0,646},{11,0,\n674},{11,0,711},{11,0,751},{11,0,761},{11,0,776},{11,0,785},{11,0,850},{11,0,853\n},{11,0,862},{11,0,865},{11,0,868},{11,0,875},{11,0,898},{11,0,902},{11,0,903},{\n11,0,910},{11,0,932},{11,0,942},{11,0,957},{11,0,967},{11,0,972},{12,0,148},{12,\n0,195},{12,0,220},{12,0,237},{12,0,318},{12,0,339},{12,0,393},{12,0,445},{12,0,\n450},{12,0,474},{12,0,505},{12,0,509},{12,0,533},{12,0,591},{12,0,594},{12,0,597\n},{12,0,621},{12,0,633},{12,0,642},{13,0,59},{13,0,60},{13,0,145},{13,0,239},{13\n,0,250},{13,0,329},{13,0,344},{13,0,365},{13,0,372},{13,0,387},{13,0,403},{13,0,\n414},{13,0,456},{13,0,470},{13,0,478},{13,0,483},{13,0,489},{14,0,55},{14,0,57},\n{14,0,81},{14,0,90},{14,0,148},{14,0,239},{14,0,266},{14,0,321},{14,0,326},{14,0\n,327},{14,0,330},{14,0,347},{14,0,355},{14,0,401},{14,0,404},{14,0,411},{14,0,\n414},{14,0,416},{14,0,420},{15,0,61},{15,0,74},{15,0,87},{15,0,88},{15,0,94},{15\n,0,96},{15,0,116},{15,0,149},{15,0,154},{16,0,50},{16,0,63},{16,0,73},{17,0,2},{\n17,0,66},{17,0,92},{17,0,103},{17,0,112},{17,0,120},{18,0,50},{18,0,54},{18,0,82\n},{18,0,86},{18,0,90},{18,0,111},{18,0,115},{18,0,156},{19,0,40},{19,0,79},{20,0\n,78},{149,0,22},{5,0,161},{135,0,839},{4,0,782},{13,11,293},{142,11,56},{133,11,\n617},{139,11,50},{135,10,22},{145,0,64},{5,10,639},{7,10,1249},{139,10,896},{138\n,0,998},{135,11,2042},{4,11,546},{142,11,233},{6,0,1043},{134,0,1574},{134,0,\n1496},{4,10,102},{7,10,815},{7,10,1699},{139,10,964},{12,0,781},{142,0,461},{4,\n11,313},{133,11,577},{6,0,639},{6,0,1114},{137,0,817},{8,11,184},{141,11,433},{7\n,0,1814},{135,11,935},{10,0,997},{140,0,958},{4,0,812},{137,11,625},{132,10,899}\n,{136,10,795},{5,11,886},{6,11,46},{6,11,1790},{7,11,14},{7,11,732},{7,11,1654},\n{8,11,95},{8,11,327},{8,11,616},{10,11,598},{10,11,769},{11,11,134},{11,11,747},\n{12,11,378},{142,11,97},{136,0,139},{6,10,52},{9,10,104},{9,10,559},{12,10,308},\n{147,10,87},{133,11,1021},{132,10,604},{132,10,301},{136,10,779},{7,0,643},{136,\n0,236},{132,11,153},{134,0,1172},{147,10,32},{133,11,798},{4,11,587},{134,0,1338\n},{6,11,598},{7,11,42},{8,11,695},{10,11,212},{11,11,158},{14,11,196},{145,11,85\n},{135,10,508},{5,11,957},{5,11,1008},{135,11,249},{4,11,129},{135,11,465},{5,0,\n54},{7,11,470},{7,11,1057},{7,11,1201},{9,11,755},{11,11,906},{140,11,527},{7,11\n,908},{146,11,7},{5,11,148},{136,11,450},{144,11,1},{4,0,256},{135,0,1488},{6,10\n,310},{7,10,1849},{8,10,72},{8,10,272},{8,10,431},{9,0,351},{9,10,12},{10,10,563\n},{10,10,630},{10,10,796},{10,10,810},{11,10,367},{11,10,599},{11,10,686},{140,\n10,672},{6,0,1885},{6,0,1898},{6,0,1899},{140,0,955},{4,0,714},{133,0,469},{6,0,\n1270},{134,0,1456},{132,0,744},{6,0,313},{7,10,537},{8,10,64},{9,10,127},{10,10,\n496},{12,10,510},{141,10,384},{4,10,244},{4,11,217},{5,11,710},{7,10,233},{7,11,\n1926},{9,11,428},{9,11,708},{10,11,254},{10,11,296},{10,11,720},{11,11,109},{11,\n11,255},{12,11,165},{12,11,315},{13,11,107},{13,11,203},{14,11,54},{14,11,99},{\n14,11,114},{14,11,388},{16,11,85},{17,11,9},{17,11,33},{20,11,25},{20,11,28},{20\n,11,29},{21,11,9},{21,11,10},{21,11,34},{150,11,17},{138,0,402},{7,0,969},{146,0\n,55},{8,0,50},{137,0,624},{134,0,1355},{132,0,572},{134,10,1650},{10,10,702},{\n139,10,245},{10,0,847},{142,0,445},{6,0,43},{7,0,38},{8,0,248},{138,0,513},{133,\n0,369},{137,10,338},{133,0,766},{133,0,363},{133,10,896},{8,11,392},{11,11,54},{\n13,11,173},{13,11,294},{148,11,7},{134,0,678},{7,11,1230},{136,11,531},{6,0,258}\n,{140,0,409},{5,0,249},{148,0,82},{7,10,1117},{136,10,539},{5,0,393},{6,0,378},{\n7,0,1981},{9,0,32},{9,0,591},{10,0,685},{10,0,741},{142,0,382},{133,0,788},{134,\n0,1281},{134,0,1295},{7,0,1968},{141,0,509},{4,0,61},{5,0,58},{5,0,171},{5,0,683\n},{6,0,291},{6,0,566},{7,0,1650},{11,0,523},{12,0,273},{12,0,303},{15,0,39},{143\n,0,111},{6,0,706},{134,0,1283},{134,0,589},{135,11,1433},{133,11,435},{5,10,4},{\n5,10,810},{6,10,13},{6,10,538},{6,10,1690},{6,10,1726},{7,0,1059},{7,10,1819},{8\n,10,148},{8,10,696},{8,10,791},{12,10,125},{13,0,54},{143,10,9},{135,10,1268},{5\n,11,85},{6,11,419},{7,11,134},{7,11,305},{7,11,361},{7,11,1337},{8,11,71},{140,\n11,519},{137,0,824},{140,11,688},{5,11,691},{7,10,1385},{7,11,345},{9,11,94},{11\n,10,582},{11,10,650},{11,10,901},{11,10,949},{12,10,232},{12,10,236},{12,11,169}\n,{13,10,413},{13,10,501},{146,10,116},{4,0,917},{133,0,1005},{5,11,183},{6,11,\n582},{7,0,1598},{9,11,344},{10,11,679},{140,11,435},{4,10,925},{5,10,803},{8,10,\n698},{138,10,828},{132,0,919},{135,11,511},{139,10,992},{4,0,255},{5,0,302},{6,0\n,132},{7,0,128},{7,0,283},{7,0,1299},{10,0,52},{10,0,514},{11,0,925},{13,0,92},{\n142,0,309},{134,0,1369},{135,10,1847},{134,0,328},{7,11,1993},{136,11,684},{133,\n10,383},{137,0,173},{134,11,583},{134,0,1411},{5,11,704},{8,11,357},{10,11,745},\n{14,11,426},{17,11,94},{19,0,65},{147,11,57},{9,10,660},{138,10,347},{4,11,179},\n{5,11,198},{133,11,697},{7,11,347},{7,11,971},{8,11,181},{138,11,711},{141,0,442\n},{7,10,572},{9,10,592},{11,0,842},{11,0,924},{11,10,680},{12,10,356},{12,10,550\n},{13,0,317},{13,0,370},{13,0,469},{13,0,471},{14,0,397},{18,0,69},{146,0,145},{\n14,11,19},{14,11,28},{144,11,29},{136,0,534},{4,11,243},{5,11,203},{7,11,19},{7,\n11,71},{7,11,113},{10,11,405},{11,11,357},{142,11,240},{6,0,210},{10,0,845},{138\n,0,862},{7,11,1351},{9,11,581},{10,11,639},{11,11,453},{140,11,584},{7,11,1450},\n{139,11,99},{10,0,892},{12,0,719},{144,0,105},{4,0,284},{6,0,223},{134,11,492},{\n5,11,134},{6,11,408},{6,11,495},{135,11,1593},{136,0,529},{137,0,807},{4,0,218},\n{7,0,526},{143,0,137},{6,0,1444},{142,11,4},{132,11,665},{4,0,270},{4,11,248},{5\n,0,192},{6,0,332},{7,0,1322},{7,11,137},{137,11,349},{140,0,661},{7,0,1517},{7,\n10,748},{11,0,597},{11,10,700},{14,0,76},{14,0,335},{148,0,33},{5,11,371},{135,\n11,563},{146,11,57},{133,10,127},{133,0,418},{4,11,374},{7,11,547},{7,11,1700},{\n7,11,1833},{139,11,858},{6,10,198},{140,10,83},{7,11,1812},{13,11,259},{13,11,\n356},{14,11,242},{147,11,114},{5,10,276},{6,10,55},{7,0,379},{7,10,1369},{8,0,\n481},{137,0,377},{138,11,286},{5,0,1003},{6,0,149},{6,10,1752},{136,10,726},{6,\n11,1647},{7,11,1552},{7,11,2010},{8,0,262},{9,0,627},{9,11,494},{9,11,509},{10,0\n,18},{11,0,214},{11,0,404},{11,0,457},{11,0,780},{11,0,913},{13,0,401},{142,0,\n200},{135,0,742},{136,0,304},{132,0,142},{133,10,764},{6,10,309},{7,10,331},{138\n,10,550},{135,10,1062},{6,11,123},{7,10,986},{7,11,214},{9,11,728},{10,11,157},{\n11,11,346},{11,11,662},{143,11,106},{135,10,1573},{7,0,925},{137,0,799},{4,0,471\n},{5,0,51},{6,0,602},{8,0,484},{138,0,195},{136,0,688},{132,0,697},{6,0,1169},{6\n,0,1241},{6,10,194},{7,10,133},{10,10,493},{10,10,570},{139,10,664},{140,0,751},\n{5,10,24},{5,10,569},{6,10,3},{6,10,119},{6,10,143},{6,10,440},{7,0,929},{7,10,\n599},{7,10,1686},{7,10,1854},{8,10,424},{9,10,43},{9,10,584},{9,10,760},{10,0,\n452},{10,10,328},{11,0,878},{11,10,159},{11,10,253},{12,10,487},{12,10,531},{144\n,0,33},{4,11,707},{13,11,106},{18,11,49},{147,11,41},{5,0,221},{5,11,588},{134,\n11,393},{134,0,1437},{6,11,211},{7,11,1690},{11,11,486},{140,11,369},{5,10,14},{\n5,10,892},{6,10,283},{7,10,234},{136,10,537},{4,0,988},{136,0,955},{135,0,1251},\n{4,10,126},{8,10,635},{147,10,34},{4,10,316},{135,10,1561},{137,10,861},{4,10,64\n},{5,10,352},{5,10,720},{6,10,368},{139,10,359},{134,0,192},{4,0,132},{5,0,69},{\n135,0,1242},{7,10,1577},{10,10,304},{10,10,549},{12,10,365},{13,10,220},{13,10,\n240},{142,10,33},{4,0,111},{6,11,219},{135,0,865},{5,11,582},{6,11,1646},{7,11,\n99},{7,11,1962},{7,11,1986},{8,11,515},{8,11,773},{9,11,23},{9,11,491},{12,11,\n620},{14,11,52},{145,11,50},{132,0,767},{7,11,568},{148,11,21},{5,11,851},{6,0,\n42},{7,0,1416},{7,0,2005},{8,0,131},{8,0,466},{9,0,672},{13,0,252},{148,0,103},{\n135,0,1050},{6,10,175},{137,10,289},{5,10,432},{133,10,913},{6,0,44},{136,0,368}\n,{135,11,784},{132,0,570},{133,0,120},{139,10,595},{140,0,29},{6,0,227},{135,0,\n1589},{4,11,98},{7,11,1365},{9,11,422},{9,11,670},{10,11,775},{11,11,210},{13,11\n,26},{13,11,457},{141,11,476},{140,10,80},{5,10,931},{134,10,1698},{133,0,522},{\n134,0,1120},{135,0,1529},{12,0,739},{14,0,448},{142,0,467},{11,10,526},{11,10,\n939},{141,10,290},{5,10,774},{6,10,1637},{6,10,1686},{134,10,1751},{6,0,1667},{\n135,0,2036},{7,10,1167},{11,10,934},{13,10,391},{145,10,76},{137,11,147},{6,10,\n260},{7,10,1484},{11,11,821},{12,11,110},{12,11,153},{18,11,41},{150,11,19},{6,0\n,511},{6,10,573},{140,0,132},{5,0,568},{6,0,138},{135,0,1293},{132,0,1020},{8,0,\n258},{9,0,208},{137,0,359},{4,0,565},{8,0,23},{136,0,827},{134,0,344},{4,0,922},\n{5,0,1023},{13,11,477},{14,11,120},{148,11,61},{134,0,240},{5,11,209},{6,11,30},\n{11,11,56},{139,11,305},{4,10,292},{4,10,736},{5,10,871},{6,0,171},{6,10,1689},{\n7,0,1002},{7,0,1324},{7,10,1944},{9,0,415},{9,10,580},{14,0,230},{146,0,68},{9,\n11,635},{139,11,559},{4,11,150},{5,11,303},{134,11,327},{6,10,63},{135,10,920},{\n133,10,793},{8,11,192},{10,11,78},{10,11,555},{11,11,308},{13,11,359},{147,11,95\n},{135,11,786},{135,11,1712},{136,0,402},{6,0,754},{6,11,1638},{7,11,79},{7,11,\n496},{9,11,138},{10,11,336},{11,11,12},{12,11,412},{12,11,440},{142,11,305},{4,0\n,716},{141,0,31},{133,0,982},{5,10,67},{6,10,62},{6,10,374},{7,10,1391},{8,0,691\n},{136,0,731},{9,10,790},{140,10,47},{139,11,556},{151,11,1},{7,11,204},{7,11,\n415},{8,11,42},{10,11,85},{11,11,33},{11,11,564},{12,11,571},{149,11,1},{7,11,\n610},{7,11,1501},{136,0,888},{4,10,391},{135,10,1169},{5,0,847},{9,0,840},{138,0\n,803},{137,0,823},{134,0,785},{8,0,152},{9,0,53},{9,0,268},{9,0,901},{10,0,518},\n{10,0,829},{11,0,188},{13,0,74},{14,0,46},{15,0,17},{15,0,33},{17,0,40},{18,0,36\n},{19,0,20},{22,0,1},{152,0,2},{4,11,3},{5,11,247},{5,11,644},{7,11,744},{7,11,\n1207},{7,11,1225},{7,11,1909},{146,11,147},{136,0,532},{135,0,681},{132,10,271},\n{140,0,314},{140,0,677},{4,0,684},{136,0,384},{5,11,285},{9,11,67},{13,11,473},{\n143,11,82},{4,10,253},{5,10,544},{7,10,300},{137,10,340},{7,0,110},{7,0,447},{8,\n0,290},{8,0,591},{9,0,382},{9,0,649},{11,0,71},{11,0,155},{11,0,313},{12,0,5},{\n13,0,325},{142,0,287},{134,0,1818},{136,0,1007},{138,0,321},{7,0,360},{7,0,425},\n{9,0,66},{9,0,278},{138,0,644},{133,10,818},{5,0,385},{5,10,541},{6,10,94},{6,10\n,499},{7,10,230},{139,10,321},{4,10,920},{5,10,25},{5,10,790},{6,10,457},{7,10,\n853},{136,10,788},{4,0,900},{133,0,861},{5,0,254},{7,0,985},{136,0,73},{7,0,1959\n},{136,0,683},{134,10,1765},{133,10,822},{132,10,634},{4,11,29},{6,11,532},{7,11\n,1628},{7,11,1648},{9,11,303},{9,11,350},{10,11,433},{11,11,97},{11,11,557},{11,\n11,745},{12,11,289},{12,11,335},{12,11,348},{12,11,606},{13,11,116},{13,11,233},\n{13,11,466},{14,11,181},{14,11,209},{14,11,232},{14,11,236},{14,11,300},{16,11,\n41},{148,11,97},{6,10,36},{7,10,658},{8,10,454},{147,0,86},{135,11,1692},{132,0,\n725},{5,11,501},{7,11,1704},{9,11,553},{11,11,520},{12,11,557},{141,11,249},{134\n,0,196},{133,0,831},{136,0,723},{7,0,1897},{13,0,80},{13,0,437},{145,0,74},{4,0,\n992},{6,0,627},{136,0,994},{135,11,1294},{132,10,104},{5,0,848},{6,0,66},{136,0,\n764},{4,0,36},{7,0,1387},{10,0,205},{139,0,755},{6,0,1046},{134,0,1485},{134,0,\n950},{132,0,887},{14,0,450},{148,0,111},{7,0,620},{7,0,831},{9,10,542},{9,10,566\n},{138,10,728},{6,0,165},{138,0,388},{139,10,263},{4,0,719},{135,0,155},{138,10,\n468},{6,11,453},{144,11,36},{134,11,129},{5,0,533},{7,0,755},{138,0,780},{134,0,\n1465},{4,0,353},{6,0,146},{6,0,1789},{7,0,427},{7,0,990},{7,0,1348},{9,0,665},{9\n,0,898},{11,0,893},{142,0,212},{7,10,87},{142,10,288},{4,0,45},{135,0,1257},{7,\n10,988},{7,10,1939},{9,10,64},{9,10,502},{12,0,7},{12,10,34},{13,10,12},{13,10,\n234},{147,10,77},{4,0,607},{5,11,60},{6,11,504},{7,11,614},{7,11,1155},{140,11,0\n},{135,10,141},{8,11,198},{11,11,29},{140,11,534},{140,0,65},{136,0,816},{132,10\n,619},{139,0,88},{5,10,246},{8,10,189},{9,10,355},{9,10,512},{10,10,124},{10,10,\n453},{11,10,143},{11,10,416},{11,10,859},{141,10,341},{4,11,379},{135,11,1397},{\n4,0,600},{137,0,621},{133,0,367},{134,0,561},{6,0,559},{134,0,1691},{6,0,585},{\n134,11,585},{135,11,1228},{4,11,118},{5,10,678},{6,11,274},{6,11,361},{7,11,75},\n{141,11,441},{135,11,1818},{137,11,841},{5,0,573},{6,0,287},{7,10,862},{7,10,\n1886},{138,10,179},{132,10,517},{140,11,693},{5,11,314},{6,11,221},{7,11,419},{\n10,11,650},{11,11,396},{12,11,156},{13,11,369},{14,11,333},{145,11,47},{140,10,\n540},{136,10,667},{11,10,403},{146,10,83},{5,10,761},{134,0,672},{9,0,157},{10,\n10,131},{140,10,72},{6,11,460},{135,0,714},{134,0,456},{133,0,925},{5,11,682},{\n135,11,1887},{136,11,510},{136,11,475},{133,11,1016},{7,11,602},{8,11,179},{9,0,\n19},{10,11,781},{140,11,126},{6,11,329},{138,11,111},{6,0,822},{134,0,1473},{144\n,11,86},{11,0,113},{139,11,113},{5,11,821},{134,11,1687},{133,10,449},{7,0,463},\n{8,10,103},{145,0,69},{7,10,2028},{138,10,641},{6,0,193},{7,0,240},{7,0,1682},{\n10,0,51},{10,0,640},{11,0,410},{13,0,82},{14,0,247},{14,0,331},{142,0,377},{6,0,\n471},{11,0,411},{142,0,2},{5,11,71},{7,11,1407},{9,11,388},{9,11,704},{10,11,261\n},{10,11,619},{11,11,547},{11,11,619},{143,11,157},{136,0,633},{135,0,1148},{6,0\n,554},{7,0,1392},{7,10,1274},{7,10,1386},{7,11,2008},{9,11,337},{10,11,517},{12,\n0,129},{146,10,87},{6,10,187},{7,0,803},{7,10,1203},{8,0,542},{8,10,380},{14,10,\n117},{149,10,28},{6,10,297},{7,10,793},{139,10,938},{7,10,464},{8,0,438},{11,0,\n363},{11,10,105},{12,10,231},{14,10,386},{15,10,102},{148,10,75},{5,11,16},{6,11\n,86},{6,11,603},{7,11,292},{7,11,561},{8,11,257},{8,11,382},{9,11,721},{9,11,778\n},{11,11,581},{140,11,466},{4,11,486},{5,11,491},{134,0,717},{132,0,875},{132,11\n,72},{6,11,265},{135,11,847},{4,0,237},{135,0,514},{6,0,392},{7,0,65},{135,0,\n2019},{140,11,261},{135,11,922},{137,11,404},{7,10,1010},{11,10,733},{11,10,759}\n,{12,0,563},{13,10,34},{14,0,101},{18,0,129},{146,10,45},{7,10,1656},{9,10,369},\n{10,10,338},{10,10,490},{11,10,154},{11,10,545},{11,10,775},{13,10,77},{141,10,\n274},{4,0,444},{10,0,146},{140,0,9},{139,11,163},{7,0,1260},{135,0,1790},{9,0,\n222},{10,0,43},{139,0,900},{137,11,234},{138,0,971},{137,0,761},{134,0,699},{136\n,11,434},{5,10,20},{6,0,1116},{6,10,298},{6,11,197},{7,0,1366},{7,10,659},{8,11,\n205},{137,10,219},{132,11,490},{11,11,820},{150,11,51},{7,10,1440},{11,10,854},{\n11,10,872},{11,10,921},{12,10,551},{13,10,472},{142,10,367},{140,11,13},{132,0,\n829},{4,10,439},{140,0,242},{136,10,669},{6,0,593},{6,11,452},{7,11,312},{138,11\n,219},{4,11,333},{9,11,176},{12,11,353},{141,11,187},{7,0,36},{8,0,201},{136,0,\n605},{140,0,224},{132,10,233},{134,0,1430},{134,0,1806},{4,0,523},{133,0,638},{6\n,0,1889},{9,0,958},{9,0,971},{9,0,976},{12,0,796},{12,0,799},{12,0,808},{12,0,\n835},{12,0,836},{12,0,914},{12,0,946},{15,0,216},{15,0,232},{18,0,183},{18,0,187\n},{18,0,194},{18,0,212},{18,0,232},{149,0,49},{132,10,482},{6,0,827},{134,0,1434\n},{135,10,346},{134,0,2043},{6,0,242},{7,0,227},{7,0,1581},{8,0,104},{9,0,113},{\n9,0,220},{9,0,427},{10,0,136},{10,0,239},{11,0,579},{11,0,1023},{13,0,4},{13,0,\n204},{13,0,316},{148,0,86},{134,11,1685},{7,0,148},{8,0,284},{141,0,63},{142,0,\n10},{135,11,584},{134,0,1249},{7,0,861},{135,10,334},{5,10,795},{6,10,1741},{137\n,11,70},{132,0,807},{7,11,135},{8,11,7},{8,11,62},{9,11,243},{10,11,658},{10,11,\n697},{11,11,456},{139,11,756},{9,11,395},{138,11,79},{137,11,108},{147,0,94},{\n136,0,494},{135,11,631},{135,10,622},{7,0,1510},{135,10,1750},{4,10,203},{135,10\n,1936},{7,11,406},{7,11,459},{8,11,606},{139,11,726},{7,0,1306},{8,0,505},{9,0,\n482},{10,0,126},{11,0,225},{12,0,347},{12,0,449},{13,0,19},{14,0,218},{142,0,435\n},{5,0,268},{10,0,764},{12,0,120},{13,0,39},{145,0,127},{142,11,68},{11,10,678},\n{140,10,307},{12,11,268},{12,11,640},{142,11,119},{135,10,2044},{133,11,612},{4,\n11,372},{7,11,482},{8,11,158},{9,11,602},{9,11,615},{10,11,245},{10,11,678},{10,\n11,744},{11,11,248},{139,11,806},{7,10,311},{9,10,308},{140,10,255},{4,0,384},{\n135,0,1022},{5,11,854},{135,11,1991},{135,10,1266},{4,10,400},{5,10,267},{135,10\n,232},{135,0,1703},{9,0,159},{11,0,661},{140,0,603},{4,0,964},{9,11,106},{9,11,\n163},{9,11,296},{10,11,167},{10,11,172},{10,11,777},{11,11,16},{14,0,438},{14,0,\n444},{14,0,456},{22,0,60},{150,0,63},{136,0,583},{132,0,515},{8,0,632},{8,0,697}\n,{137,0,854},{5,11,195},{135,11,1685},{6,0,1123},{134,0,1365},{134,11,328},{7,11\n,1997},{8,11,730},{139,11,1006},{4,0,136},{133,0,551},{134,0,1782},{7,0,1287},{9\n,0,44},{10,0,552},{10,0,642},{11,0,839},{12,0,274},{12,0,275},{12,0,372},{13,0,\n91},{142,0,125},{5,11,751},{11,11,797},{140,11,203},{133,0,732},{4,10,100},{7,0,\n679},{7,11,821},{136,0,313},{10,0,361},{142,0,316},{134,0,595},{6,0,147},{7,0,\n886},{9,0,753},{138,0,268},{5,10,362},{5,10,443},{6,10,318},{7,10,1019},{139,10,\n623},{5,10,463},{136,10,296},{4,10,454},{5,11,950},{5,11,994},{134,11,351},{138,\n0,137},{5,10,48},{5,10,404},{6,10,557},{7,10,458},{8,10,597},{10,10,455},{10,10,\n606},{11,10,49},{11,10,548},{12,10,476},{13,10,18},{141,10,450},{133,0,414},{135\n,0,1762},{5,11,421},{135,11,47},{5,10,442},{135,10,1984},{134,0,599},{134,0,1749\n},{134,0,1627},{4,0,488},{132,11,350},{137,11,751},{132,0,83},{140,0,676},{133,\n11,967},{5,10,55},{7,0,1639},{140,10,161},{4,11,473},{7,11,623},{8,11,808},{9,11\n,871},{9,11,893},{11,11,38},{11,11,431},{12,11,112},{12,11,217},{12,11,243},{12,\n11,562},{12,11,683},{13,11,141},{13,11,197},{13,11,227},{13,11,406},{13,11,487},\n{14,11,156},{14,11,203},{14,11,224},{14,11,256},{18,11,58},{150,11,0},{133,10,\n450},{7,11,736},{139,11,264},{134,0,278},{4,11,222},{7,11,286},{136,11,629},{135\n,10,869},{140,0,97},{144,0,14},{134,0,1085},{4,10,213},{7,10,223},{136,10,80},{7\n,0,388},{7,0,644},{139,0,781},{132,0,849},{7,0,229},{8,0,59},{9,0,190},{10,0,378\n},{140,0,191},{7,10,381},{7,10,806},{7,10,820},{8,10,354},{8,10,437},{8,10,787},\n{9,10,657},{10,10,58},{10,10,339},{10,10,749},{11,10,914},{12,10,162},{13,10,75}\n,{14,10,106},{14,10,198},{14,10,320},{14,10,413},{146,10,43},{141,11,306},{136,\n10,747},{134,0,1115},{8,11,146},{16,0,94},{144,0,108},{6,0,700},{6,0,817},{134,0\n,1002},{133,10,692},{4,11,465},{135,11,1663},{134,10,191},{6,0,1414},{135,11,913\n},{132,0,660},{7,0,1035},{138,0,737},{6,10,162},{7,10,1960},{136,10,831},{132,10\n,706},{7,0,690},{9,0,217},{9,0,587},{140,0,521},{138,10,426},{135,10,1235},{6,11\n,82},{7,11,138},{7,11,517},{9,11,673},{139,11,238},{138,0,272},{5,11,495},{7,11,\n834},{9,11,733},{139,11,378},{134,0,1744},{132,0,1011},{7,11,828},{142,11,116},{\n4,0,733},{5,11,559},{9,0,194},{10,0,92},{11,0,198},{12,0,84},{141,0,128},{6,11,\n21},{6,11,1737},{7,11,1444},{8,11,224},{10,0,57},{138,0,277},{4,10,204},{137,10,\n902},{136,10,833},{7,10,366},{9,10,287},{11,0,348},{12,0,99},{12,10,199},{12,10,\n556},{12,10,577},{18,0,1},{18,0,11},{147,0,4},{6,0,1981},{136,0,936},{21,0,33},{\n150,0,40},{5,11,519},{138,11,204},{5,10,356},{135,10,224},{134,0,775},{135,0,306\n},{7,10,630},{9,10,567},{11,10,150},{11,10,444},{141,10,119},{5,0,979},{134,10,\n539},{133,0,611},{4,11,402},{135,11,1679},{5,0,178},{7,11,2},{8,11,323},{136,11,\n479},{5,11,59},{135,11,672},{4,0,1010},{6,0,1969},{138,11,237},{133,11,412},{146\n,11,34},{7,11,1740},{146,11,48},{134,0,664},{139,10,814},{4,11,85},{135,11,549},\n{133,11,94},{133,11,457},{132,0,390},{134,0,1510},{4,10,235},{135,10,255},{4,10,\n194},{5,10,584},{6,10,384},{6,11,11},{7,10,583},{7,11,187},{10,10,761},{11,10,\n760},{139,10,851},{4,11,522},{139,11,802},{135,0,493},{10,11,776},{13,11,345},{\n142,11,425},{146,0,37},{4,11,52},{135,11,661},{134,0,724},{134,0,829},{133,11,\n520},{133,10,562},{4,11,281},{5,11,38},{7,11,194},{7,11,668},{7,11,1893},{137,11\n,397},{5,10,191},{137,10,271},{7,0,1537},{14,0,96},{143,0,73},{4,10,470},{5,0,\n473},{6,10,153},{7,10,1503},{7,10,1923},{10,10,701},{11,0,168},{11,10,132},{11,\n10,227},{11,10,320},{11,10,436},{11,10,525},{11,10,855},{12,10,41},{12,10,286},{\n13,10,103},{13,10,284},{14,10,255},{14,10,262},{15,10,117},{143,10,127},{133,0,\n105},{5,0,438},{9,0,694},{12,0,627},{141,0,210},{133,10,327},{6,10,552},{7,10,\n1754},{137,10,604},{134,0,1256},{152,0,11},{5,11,448},{11,11,98},{139,11,524},{5\n,10,80},{6,10,405},{7,0,1626},{7,10,403},{7,10,1502},{8,10,456},{9,10,487},{9,10\n,853},{9,10,889},{10,10,309},{11,10,721},{11,10,994},{12,10,430},{13,10,165},{14\n,11,16},{146,11,44},{132,0,779},{8,0,25},{138,0,826},{4,10,453},{5,10,887},{6,10\n,535},{8,10,6},{8,10,543},{136,10,826},{137,11,461},{140,11,632},{132,0,308},{\n135,0,741},{132,0,671},{7,0,150},{8,0,649},{136,0,1020},{6,11,336},{8,11,552},{9\n,0,99},{9,11,285},{10,11,99},{139,11,568},{134,0,521},{5,0,339},{14,0,3},{15,0,\n41},{15,0,166},{147,0,66},{6,11,423},{7,11,665},{7,11,1210},{9,11,218},{141,11,\n222},{5,10,101},{5,11,256},{6,0,543},{6,10,88},{7,10,1677},{9,10,100},{10,10,677\n},{14,10,169},{14,10,302},{14,10,313},{15,10,48},{143,10,84},{4,10,310},{7,10,\n708},{7,10,996},{9,10,795},{10,10,390},{10,10,733},{11,10,451},{12,10,249},{14,\n10,115},{14,10,286},{143,10,100},{133,10,587},{13,11,417},{14,11,129},{143,11,15\n},{134,0,1358},{136,11,554},{132,10,498},{7,10,217},{8,10,140},{138,10,610},{135\n,11,989},{135,11,634},{6,0,155},{140,0,234},{135,11,462},{132,11,618},{134,0,\n1628},{132,0,766},{4,11,339},{5,10,905},{135,11,259},{135,0,829},{4,11,759},{141\n,11,169},{4,10,456},{7,0,1445},{7,10,358},{7,10,1637},{8,10,643},{139,10,483},{5\n,0,486},{135,0,1349},{5,11,688},{135,11,712},{7,0,1635},{8,0,17},{10,0,217},{10,\n0,295},{12,0,2},{140,11,2},{138,0,558},{150,10,56},{4,11,278},{5,11,465},{135,11\n,1367},{136,11,482},{133,10,535},{6,0,1362},{6,0,1461},{10,11,274},{10,11,625},{\n139,11,530},{5,0,599},{5,11,336},{6,11,341},{6,11,478},{6,11,1763},{136,11,386},\n{7,10,1748},{137,11,151},{134,0,1376},{133,10,539},{135,11,73},{135,11,1971},{\n139,11,283},{9,0,93},{139,0,474},{6,10,91},{135,10,435},{5,11,396},{6,0,447},{\n134,11,501},{4,10,16},{5,10,316},{5,10,842},{6,10,370},{6,10,1778},{8,10,166},{\n11,10,812},{12,10,206},{12,10,351},{14,10,418},{16,10,15},{16,10,34},{18,10,3},{\n19,10,3},{19,10,7},{20,10,4},{149,10,21},{7,0,577},{7,0,1432},{9,0,475},{9,0,505\n},{9,0,526},{9,0,609},{9,0,689},{9,0,726},{9,0,735},{9,0,738},{10,0,556},{10,0,\n674},{10,0,684},{11,0,89},{11,0,202},{11,0,272},{11,0,380},{11,0,415},{11,0,505}\n,{11,0,537},{11,0,550},{11,0,562},{11,0,640},{11,0,667},{11,0,688},{11,0,847},{\n11,0,927},{11,0,930},{11,0,940},{12,0,144},{12,0,325},{12,0,329},{12,0,389},{12,\n0,403},{12,0,451},{12,0,515},{12,0,604},{12,0,616},{12,0,626},{13,0,66},{13,0,\n131},{13,0,167},{13,0,236},{13,0,368},{13,0,411},{13,0,434},{13,0,453},{13,0,461\n},{13,0,474},{14,0,59},{14,0,60},{14,0,139},{14,0,152},{14,0,276},{14,0,353},{14\n,0,402},{15,0,28},{15,0,81},{15,0,123},{15,0,152},{18,0,136},{148,0,88},{4,11,\n929},{133,11,799},{136,11,46},{142,0,307},{4,0,609},{7,0,756},{9,0,544},{11,0,\n413},{144,0,25},{7,10,619},{10,0,687},{10,10,547},{11,10,122},{140,10,601},{4,0,\n930},{133,0,947},{133,0,939},{142,0,21},{4,11,892},{133,11,770},{133,0,962},{5,0\n,651},{8,0,170},{9,0,61},{9,0,63},{10,0,23},{10,0,37},{10,0,834},{11,0,4},{11,0,\n187},{11,0,281},{11,0,503},{11,0,677},{12,0,96},{12,0,130},{12,0,244},{14,0,5},{\n14,0,40},{14,0,162},{14,0,202},{146,0,133},{4,0,406},{5,0,579},{12,0,492},{150,0\n,15},{135,11,158},{135,0,597},{132,0,981},{132,10,888},{4,10,149},{138,10,368},{\n132,0,545},{4,10,154},{7,10,1134},{136,10,105},{135,11,2001},{134,0,1558},{4,10,\n31},{6,10,429},{7,10,962},{9,10,458},{139,10,691},{132,10,312},{135,10,1642},{6,\n0,17},{6,0,1304},{7,0,16},{7,0,1001},{9,0,886},{10,0,489},{10,0,800},{11,0,782},\n{12,0,320},{13,0,467},{14,0,145},{14,0,387},{143,0,119},{135,0,1982},{7,11,1461}\n,{12,11,91},{145,0,17},{4,10,236},{132,11,602},{138,0,907},{136,0,110},{5,10,836\n},{5,10,857},{6,10,1680},{7,0,272},{147,0,53},{5,0,458},{7,11,1218},{136,11,303}\n,{7,0,1983},{8,0,0},{8,0,171},{9,0,120},{9,0,732},{10,0,473},{10,10,68},{11,0,\n656},{11,0,998},{11,10,494},{18,0,0},{18,0,2},{147,0,21},{137,11,662},{4,11,13},\n{5,11,567},{7,11,1498},{9,11,124},{11,11,521},{140,11,405},{4,10,81},{139,10,867\n},{135,11,1006},{7,11,800},{7,11,1783},{138,11,12},{5,10,282},{8,10,650},{9,0,\n295},{9,10,907},{138,0,443},{132,11,735},{4,10,775},{4,11,170},{135,11,323},{6,0\n,1844},{10,0,924},{11,11,844},{12,11,104},{140,11,625},{5,11,304},{7,11,1403},{\n140,11,498},{134,0,1232},{4,0,519},{10,0,70},{12,0,26},{14,0,17},{14,0,178},{15,\n0,34},{149,0,12},{132,0,993},{4,11,148},{133,11,742},{6,0,31},{7,0,491},{7,0,530\n},{8,0,592},{11,0,53},{11,0,779},{12,0,167},{12,0,411},{14,0,14},{14,0,136},{15,\n0,72},{16,0,17},{144,0,72},{133,0,907},{134,0,733},{133,11,111},{4,10,71},{5,10,\n376},{7,10,119},{138,10,665},{136,0,55},{8,0,430},{136,11,430},{4,0,208},{5,0,\n106},{6,0,531},{8,0,408},{9,0,188},{138,0,572},{11,10,827},{12,0,56},{14,10,34},\n{143,10,148},{134,0,1693},{133,11,444},{132,10,479},{140,0,441},{9,0,449},{10,0,\n192},{138,0,740},{134,0,928},{4,0,241},{7,10,607},{136,10,99},{8,11,123},{15,11,\n6},{144,11,7},{6,11,285},{8,11,654},{11,11,749},{12,11,190},{12,11,327},{13,11,\n120},{13,11,121},{13,11,327},{15,11,47},{146,11,40},{4,10,41},{5,10,74},{7,10,\n1627},{11,10,871},{140,10,619},{7,0,1525},{11,10,329},{11,10,965},{12,10,241},{\n14,10,354},{15,10,22},{148,10,63},{132,0,259},{135,11,183},{9,10,209},{137,10,\n300},{5,11,937},{135,11,100},{133,10,98},{4,0,173},{5,0,312},{5,0,512},{135,0,\n1285},{141,0,185},{7,0,1603},{7,0,1691},{9,0,464},{11,0,195},{12,0,279},{12,0,\n448},{14,0,11},{147,0,102},{135,0,1113},{133,10,984},{4,0,452},{5,0,583},{135,0,\n720},{4,0,547},{5,0,817},{6,0,433},{7,0,593},{7,0,1378},{8,0,161},{9,0,284},{10,\n0,313},{139,0,886},{4,10,182},{6,10,205},{7,10,220},{136,0,722},{150,0,13},{4,10\n,42},{9,10,205},{9,10,786},{138,10,659},{6,0,289},{7,0,1670},{12,0,57},{151,0,4}\n,{132,10,635},{14,0,43},{146,0,21},{139,10,533},{135,0,1694},{8,0,420},{139,0,\n193},{135,0,409},{132,10,371},{4,10,272},{135,10,836},{5,10,825},{134,10,1640},{\n5,11,251},{5,11,956},{8,11,268},{9,11,214},{146,11,142},{138,0,308},{6,0,1863},{\n141,11,37},{137,10,879},{7,10,317},{135,10,569},{132,11,294},{134,0,790},{5,0,\n1002},{136,0,745},{5,11,346},{5,11,711},{136,11,390},{135,0,289},{5,0,504},{9,10\n,307},{139,0,68},{4,0,239},{6,0,477},{7,0,1607},{139,0,617},{149,0,13},{133,0,\n609},{133,11,624},{5,11,783},{7,11,1998},{135,11,2047},{133,10,525},{132,0,367},\n{132,11,594},{5,10,493},{134,0,528},{4,10,174},{135,10,911},{8,10,417},{137,10,\n782},{132,0,694},{7,0,548},{137,0,58},{4,10,32},{5,10,215},{6,10,269},{7,10,1782\n},{7,10,1892},{10,10,16},{11,10,822},{11,10,954},{141,10,481},{140,0,687},{7,0,\n1749},{136,10,477},{132,11,569},{133,10,308},{135,10,1088},{4,0,661},{138,0,1004\n},{5,11,37},{6,11,39},{6,11,451},{7,11,218},{7,11,667},{7,11,1166},{7,11,1687},{\n8,11,662},{144,11,2},{5,10,126},{8,10,297},{9,0,445},{9,10,366},{12,0,53},{12,10\n,374},{141,0,492},{7,10,1551},{139,10,361},{148,0,74},{134,11,508},{135,0,213},{\n132,10,175},{132,10,685},{6,0,760},{6,0,834},{134,0,1248},{7,11,453},{7,11,635},\n{7,11,796},{8,11,331},{9,11,328},{9,11,330},{9,11,865},{10,11,119},{10,11,235},{\n11,11,111},{11,11,129},{11,11,240},{12,11,31},{12,11,66},{12,11,222},{12,11,269}\n,{12,11,599},{12,11,689},{13,11,186},{13,11,364},{142,11,345},{7,0,1672},{139,0,\n189},{133,10,797},{133,10,565},{6,0,1548},{6,11,98},{7,11,585},{135,11,702},{9,0\n,968},{15,0,192},{149,0,56},{4,10,252},{6,11,37},{7,10,1068},{7,11,299},{7,11,\n1666},{8,11,195},{8,11,316},{9,11,178},{9,11,276},{9,11,339},{9,11,536},{10,10,\n434},{10,11,102},{10,11,362},{10,11,785},{11,10,228},{11,10,426},{11,11,55},{11,\n11,149},{11,11,773},{13,10,231},{13,11,416},{13,11,419},{14,11,38},{14,11,41},{\n14,11,210},{18,10,106},{148,10,87},{4,0,751},{11,0,390},{140,0,32},{4,0,409},{\n133,0,78},{11,11,458},{12,11,15},{140,11,432},{5,10,231},{7,0,1602},{7,10,601},{\n9,10,277},{9,10,674},{10,0,257},{10,0,698},{10,10,178},{10,10,418},{10,10,509},{\n11,0,544},{11,0,585},{11,10,531},{12,0,212},{12,10,113},{12,10,475},{13,0,307},{\n13,10,99},{142,10,428},{6,0,473},{145,0,105},{5,11,645},{6,0,1949},{143,0,156},{\n7,10,1591},{144,10,43},{135,0,1779},{135,10,1683},{4,11,290},{135,11,1356},{134,\n0,763},{6,11,70},{7,11,1292},{10,11,762},{139,11,288},{142,0,29},{140,11,428},{7\n,0,883},{7,11,131},{7,11,422},{8,11,210},{140,11,573},{134,0,488},{4,10,399},{5,\n10,119},{5,10,494},{7,10,751},{137,10,556},{133,0,617},{132,11,936},{139,0,50},{\n7,0,1518},{139,0,694},{137,0,785},{4,0,546},{135,0,2042},{7,11,716},{13,11,97},{\n141,11,251},{132,11,653},{145,0,22},{134,0,1016},{4,0,313},{133,0,577},{136,11,\n657},{8,0,184},{141,0,433},{135,0,935},{6,0,720},{9,0,114},{146,11,80},{7,10,594\n},{7,10,851},{7,10,1858},{9,10,411},{9,10,574},{9,10,666},{9,10,737},{10,10,346}\n,{10,10,712},{11,10,246},{11,10,432},{11,10,517},{11,10,647},{11,10,679},{11,10,\n727},{12,0,186},{12,0,292},{12,10,304},{12,10,305},{12,10,323},{12,10,483},{12,\n10,572},{12,10,593},{12,10,602},{13,10,95},{13,10,101},{13,10,171},{13,10,315},{\n13,10,378},{13,10,425},{13,10,475},{14,0,100},{14,10,63},{14,10,380},{14,10,384}\n,{15,10,133},{18,0,70},{18,10,112},{148,10,72},{135,10,1093},{135,11,1836},{132,\n10,679},{137,10,203},{11,0,402},{12,0,109},{12,0,431},{13,0,179},{13,0,206},{14,\n0,217},{16,0,3},{148,0,53},{7,11,1368},{8,11,232},{8,11,361},{10,11,682},{138,11\n,742},{137,10,714},{5,0,886},{6,0,46},{6,0,1790},{7,0,14},{7,0,732},{7,0,1654},{\n8,0,95},{8,0,327},{8,0,616},{9,0,892},{9,11,534},{10,0,598},{10,0,769},{11,0,134\n},{11,0,747},{12,0,378},{142,0,97},{4,0,969},{136,10,825},{137,11,27},{6,0,727},\n{142,11,12},{133,0,1021},{134,0,1190},{134,11,1657},{5,10,143},{5,10,769},{6,10,\n1760},{7,10,682},{7,10,1992},{136,10,736},{132,0,153},{135,11,127},{133,0,798},{\n132,0,587},{6,0,598},{7,0,42},{8,0,695},{10,0,212},{11,0,158},{14,0,196},{145,0,\n85},{133,10,860},{6,0,1929},{134,0,1933},{5,0,957},{5,0,1008},{6,10,422},{7,10,0\n},{7,10,1544},{8,11,364},{9,0,577},{11,10,990},{12,0,141},{12,10,453},{13,10,47}\n,{141,10,266},{134,0,1319},{4,0,129},{135,0,465},{7,0,470},{7,0,1057},{7,0,1201}\n,{9,0,755},{11,0,906},{140,0,527},{7,0,908},{146,0,7},{5,0,148},{136,0,450},{5,\n10,515},{137,10,131},{7,10,1605},{11,10,962},{146,10,139},{132,10,646},{134,0,\n1166},{4,10,396},{7,10,728},{9,10,117},{13,10,202},{148,10,51},{6,10,121},{6,10,\n124},{6,10,357},{7,10,1138},{7,10,1295},{8,10,162},{139,10,655},{14,0,374},{142,\n11,374},{138,0,253},{139,0,1003},{5,11,909},{9,11,849},{138,11,805},{133,10,237}\n,{7,11,525},{7,11,1579},{8,11,497},{136,11,573},{137,0,46},{132,0,879},{134,0,\n806},{135,0,1868},{6,0,1837},{134,0,1846},{6,0,730},{134,0,881},{7,0,965},{7,0,\n1460},{7,0,1604},{7,11,193},{7,11,397},{7,11,1105},{8,11,124},{8,11,619},{9,11,\n305},{10,11,264},{11,11,40},{12,11,349},{13,11,134},{13,11,295},{14,11,155},{15,\n11,120},{146,11,105},{136,0,506},{143,0,10},{4,11,262},{7,10,571},{7,10,1877},{7\n,11,342},{10,10,366},{141,11,23},{133,11,641},{9,10,513},{10,0,22},{10,10,39},{\n12,10,122},{140,10,187},{135,11,1431},{150,11,49},{4,11,99},{6,11,250},{6,11,346\n},{8,11,127},{138,11,81},{6,0,2014},{8,0,928},{10,0,960},{10,0,979},{140,0,996},\n{134,0,296},{132,11,915},{5,11,75},{9,11,517},{10,11,470},{12,11,155},{141,11,\n224},{137,10,873},{4,0,854},{140,11,18},{134,0,587},{7,10,107},{7,10,838},{8,10,\n550},{138,10,401},{11,0,636},{11,10,588},{11,10,864},{11,10,968},{15,0,145},{15,\n10,160},{17,0,34},{19,0,50},{151,0,20},{135,11,216},{7,0,982},{10,0,32},{143,0,\n56},{133,10,768},{133,11,954},{6,11,304},{7,11,1114},{8,11,418},{10,11,345},{11,\n11,341},{11,11,675},{141,11,40},{9,11,410},{139,11,425},{136,0,941},{4,10,894},{\n133,0,435},{5,0,85},{6,0,419},{7,0,134},{7,0,305},{7,0,361},{7,0,1337},{8,0,71},\n{140,0,519},{140,0,688},{135,0,740},{5,0,691},{7,0,345},{9,0,94},{140,0,169},{5,\n0,183},{6,0,582},{10,0,679},{140,0,435},{134,11,14},{6,0,945},{135,0,511},{134,\n11,1708},{5,11,113},{6,11,243},{7,11,1865},{11,11,161},{16,11,37},{145,11,99},{\n132,11,274},{137,0,539},{6,10,272},{7,0,1993},{136,0,684},{6,0,659},{134,0,982},\n{4,10,9},{5,10,128},{7,10,368},{11,10,480},{148,10,3},{134,0,583},{132,0,803},{\n133,0,704},{4,0,179},{5,0,198},{133,0,697},{7,0,347},{7,0,971},{7,11,166},{8,0,\n181},{138,0,711},{136,10,682},{4,10,2},{7,10,545},{7,10,894},{136,11,521},{135,0\n,481},{132,0,243},{5,0,203},{7,0,19},{7,0,71},{7,0,113},{10,0,405},{11,0,357},{\n142,0,240},{5,11,725},{5,11,727},{135,11,1811},{6,0,826},{137,11,304},{7,0,1450}\n,{139,0,99},{133,11,654},{134,0,492},{5,0,134},{6,0,408},{6,0,495},{6,11,273},{7\n,0,1593},{10,11,188},{13,11,377},{146,11,77},{9,10,769},{140,10,185},{135,11,410\n},{142,0,4},{4,0,665},{134,11,1785},{4,0,248},{7,0,137},{137,0,349},{5,10,530},{\n142,10,113},{7,0,1270},{139,0,612},{132,11,780},{5,0,371},{135,0,563},{135,0,826\n},{6,0,1535},{23,0,21},{151,0,23},{4,0,374},{7,0,547},{7,0,1700},{7,0,1833},{139\n,0,858},{133,10,556},{7,11,612},{8,11,545},{8,11,568},{8,11,642},{9,11,717},{10,\n11,541},{10,11,763},{11,11,449},{12,11,489},{13,11,153},{13,11,296},{14,11,138},\n{14,11,392},{15,11,50},{16,11,6},{16,11,12},{148,11,9},{9,0,311},{141,0,42},{8,\n10,16},{140,10,568},{6,0,1968},{6,0,2027},{138,0,991},{6,0,1647},{7,0,1552},{7,0\n,2010},{9,0,494},{137,0,509},{133,11,948},{6,10,186},{137,10,426},{134,0,769},{\n134,0,642},{132,10,585},{6,0,123},{7,0,214},{9,0,728},{10,0,157},{11,0,346},{11,\n0,662},{143,0,106},{142,11,381},{135,0,1435},{4,11,532},{5,11,706},{135,11,662},\n{5,11,837},{134,11,1651},{4,10,93},{5,10,252},{6,10,229},{7,10,291},{9,10,550},{\n139,10,644},{148,0,79},{137,10,749},{134,0,1425},{137,10,162},{4,11,362},{7,11,\n52},{7,11,303},{140,11,166},{132,10,381},{4,11,330},{7,11,933},{7,11,2012},{136,\n11,292},{135,11,767},{4,0,707},{5,0,588},{6,0,393},{13,0,106},{18,0,49},{147,0,\n41},{6,0,211},{7,0,1690},{11,0,486},{140,0,369},{137,11,883},{4,11,703},{135,11,\n207},{4,0,187},{5,0,184},{5,0,690},{7,0,1869},{10,0,756},{139,0,783},{132,11,571\n},{134,0,1382},{5,0,175},{6,10,77},{6,10,157},{7,10,974},{7,10,1301},{7,10,1339}\n,{7,10,1490},{7,10,1873},{137,10,628},{134,0,1493},{5,11,873},{133,11,960},{134,\n0,1007},{12,11,93},{12,11,501},{13,11,362},{14,11,151},{15,11,40},{15,11,59},{16\n,11,46},{17,11,25},{18,11,14},{18,11,134},{19,11,25},{19,11,69},{20,11,16},{20,\n11,19},{20,11,66},{21,11,23},{21,11,25},{150,11,42},{11,10,919},{141,10,409},{\n134,0,219},{5,0,582},{6,0,1646},{7,0,99},{7,0,1962},{7,0,1986},{8,0,515},{8,0,\n773},{9,0,23},{9,0,491},{12,0,620},{142,0,93},{133,0,851},{5,11,33},{134,11,470}\n,{135,11,1291},{134,0,1278},{135,11,1882},{135,10,1489},{132,0,1000},{138,0,982}\n,{8,0,762},{8,0,812},{137,0,910},{6,11,47},{7,11,90},{7,11,664},{7,11,830},{7,11\n,1380},{7,11,2025},{8,11,448},{136,11,828},{4,0,98},{4,0,940},{6,0,1819},{6,0,\n1834},{6,0,1841},{7,0,1365},{8,0,859},{8,0,897},{8,0,918},{8,10,398},{9,0,422},{\n9,0,670},{9,10,681},{10,0,775},{10,0,894},{10,0,909},{10,0,910},{10,0,935},{11,0\n,210},{11,10,632},{12,0,750},{12,0,755},{13,0,26},{13,0,457},{13,0,476},{16,0,\n100},{16,0,109},{18,0,173},{146,0,175},{9,11,417},{137,11,493},{136,10,645},{138\n,0,906},{134,0,1730},{134,10,20},{133,11,1019},{134,0,1185},{8,10,769},{138,0,40\n},{6,11,208},{137,0,147},{140,0,650},{5,0,209},{6,0,30},{11,0,56},{139,0,305},{\n132,0,553},{138,11,344},{6,11,68},{7,11,398},{7,11,448},{7,11,1629},{7,11,1813},\n{8,11,387},{8,11,442},{9,11,710},{10,11,282},{138,11,722},{5,0,597},{14,0,20},{\n142,11,20},{135,0,1614},{135,10,1757},{4,0,150},{5,0,303},{6,0,327},{135,10,937}\n,{7,10,1652},{16,0,49},{144,11,49},{8,0,192},{10,0,78},{141,0,359},{135,0,786},{\n143,0,134},{6,0,1638},{7,0,79},{7,0,496},{9,0,138},{10,0,336},{11,0,12},{12,0,\n412},{12,0,440},{142,0,305},{136,11,491},{4,10,579},{5,10,226},{5,10,323},{135,\n10,960},{7,0,204},{7,0,415},{8,0,42},{10,0,85},{139,0,564},{132,0,614},{4,11,403\n},{5,11,441},{7,11,450},{11,11,101},{12,11,193},{141,11,430},{135,11,1927},{135,\n11,1330},{4,0,3},{5,0,247},{5,0,644},{7,0,744},{7,0,1207},{7,0,1225},{7,0,1909},\n{146,0,147},{136,0,942},{4,0,1019},{134,0,2023},{5,10,973},{133,11,679},{5,0,285\n},{9,0,67},{13,0,473},{143,0,82},{7,11,328},{137,11,326},{151,0,8},{6,10,135},{\n135,10,1176},{135,11,1128},{134,0,1309},{135,11,1796},{135,10,314},{4,11,574},{7\n,11,350},{7,11,1024},{8,11,338},{9,11,677},{10,11,808},{139,11,508},{7,11,818},{\n17,11,14},{17,11,45},{18,11,75},{148,11,18},{146,10,4},{135,11,1081},{4,0,29},{6\n,0,532},{7,0,1628},{7,0,1648},{9,0,350},{10,0,433},{11,0,97},{11,0,557},{11,0,\n745},{12,0,289},{12,0,335},{12,0,348},{12,0,606},{13,0,116},{13,0,233},{13,0,466\n},{14,0,181},{14,0,209},{14,0,232},{14,0,236},{14,0,300},{16,0,41},{148,0,97},{6\n,10,281},{7,0,318},{8,10,282},{8,10,480},{8,10,499},{9,10,198},{10,10,143},{10,\n10,169},{10,10,211},{10,10,417},{10,10,574},{11,10,147},{11,10,395},{12,10,75},{\n12,10,407},{12,10,608},{13,10,500},{142,10,251},{135,11,1676},{135,11,2037},{135\n,0,1692},{5,0,501},{7,0,1704},{9,0,553},{11,0,520},{12,0,557},{141,0,249},{6,0,\n1527},{14,0,324},{14,11,324},{15,0,55},{15,0,80},{15,11,55},{143,11,80},{135,10,\n1776},{8,0,988},{137,11,297},{132,10,419},{142,0,223},{139,11,234},{7,0,1123},{\n12,0,508},{14,0,102},{14,0,226},{144,0,57},{4,10,138},{7,10,1012},{7,10,1280},{\n137,10,76},{5,10,29},{7,0,1764},{140,10,638},{134,0,2015},{134,0,1599},{138,11,\n56},{6,11,306},{7,11,1140},{7,11,1340},{8,11,133},{138,11,449},{139,11,1011},{6,\n10,1710},{135,10,2038},{7,11,1763},{140,11,310},{4,10,17},{5,10,23},{6,0,129},{7\n,10,995},{11,10,383},{11,10,437},{12,10,460},{140,10,532},{5,11,329},{136,11,260\n},{133,10,862},{132,0,534},{6,0,811},{135,0,626},{132,11,657},{4,0,25},{5,0,60},\n{6,0,504},{7,0,614},{7,0,1155},{12,0,0},{152,11,7},{7,0,1248},{11,0,621},{139,0,\n702},{137,0,321},{8,10,70},{12,10,171},{141,10,272},{10,10,233},{139,10,76},{4,0\n,379},{6,10,442},{135,0,1397},{5,11,66},{7,11,1896},{136,11,288},{134,11,1643},{\n134,10,1709},{4,11,21},{5,11,91},{5,11,570},{5,11,648},{5,11,750},{5,11,781},{6,\n11,54},{6,11,112},{6,11,402},{6,11,1732},{7,11,315},{7,11,749},{7,11,1347},{7,11\n,1900},{9,11,78},{9,11,508},{10,11,611},{11,11,510},{11,11,728},{13,11,36},{14,\n11,39},{16,11,83},{17,11,124},{148,11,30},{4,0,118},{6,0,274},{6,0,361},{7,0,75}\n,{141,0,441},{10,11,322},{10,11,719},{139,11,407},{147,10,119},{12,11,549},{14,\n11,67},{147,11,60},{11,10,69},{12,10,105},{12,10,117},{13,10,213},{14,10,13},{14\n,10,62},{14,10,177},{14,10,421},{15,10,19},{146,10,141},{9,0,841},{137,10,309},{\n7,10,608},{7,10,976},{8,11,125},{8,11,369},{8,11,524},{9,10,146},{10,10,206},{10\n,10,596},{10,11,486},{11,11,13},{11,11,381},{11,11,736},{11,11,766},{11,11,845},\n{13,10,218},{13,11,114},{13,11,292},{14,10,153},{142,11,47},{7,11,759},{140,0,\n693},{5,0,314},{6,0,221},{7,0,419},{10,0,650},{11,0,396},{12,0,156},{13,0,369},{\n14,0,333},{145,0,47},{6,11,1684},{6,11,1731},{7,11,356},{7,11,1932},{8,11,54},{8\n,11,221},{9,11,225},{9,11,356},{10,11,77},{10,11,446},{10,11,731},{12,11,404},{\n141,11,491},{132,11,375},{4,10,518},{135,10,1136},{4,0,913},{4,11,411},{11,11,\n643},{140,11,115},{4,11,80},{133,11,44},{8,10,689},{137,10,863},{138,0,880},{4,\n10,18},{7,10,145},{7,10,444},{7,10,1278},{8,10,49},{8,10,400},{9,10,71},{9,10,\n250},{10,10,459},{12,10,160},{144,10,24},{136,0,475},{5,0,1016},{5,11,299},{135,\n11,1083},{7,0,602},{8,0,179},{10,0,781},{140,0,126},{6,0,329},{138,0,111},{135,0\n,1864},{4,11,219},{7,11,1761},{137,11,86},{6,0,1888},{6,0,1892},{6,0,1901},{6,0,\n1904},{9,0,953},{9,0,985},{9,0,991},{9,0,1001},{12,0,818},{12,0,846},{12,0,847},\n{12,0,861},{12,0,862},{12,0,873},{12,0,875},{12,0,877},{12,0,879},{12,0,881},{12\n,0,884},{12,0,903},{12,0,915},{12,0,926},{12,0,939},{15,0,182},{15,0,219},{15,0,\n255},{18,0,191},{18,0,209},{18,0,211},{149,0,41},{5,11,328},{135,11,918},{137,0,\n780},{12,0,82},{143,0,36},{133,10,1010},{5,0,821},{134,0,1687},{133,11,514},{132\n,0,956},{134,0,1180},{5,10,87},{7,10,313},{7,10,1103},{10,0,112},{10,10,582},{11\n,10,389},{11,10,813},{12,10,385},{13,10,286},{14,10,124},{146,10,108},{5,0,71},{\n7,0,1407},{9,0,704},{10,0,261},{10,0,619},{11,0,547},{11,0,619},{143,0,157},{4,0\n,531},{5,0,455},{5,11,301},{6,11,571},{14,11,49},{146,11,102},{132,10,267},{6,0,\n385},{7,0,2008},{9,0,337},{138,0,517},{133,11,726},{133,11,364},{4,11,76},{7,11,\n1550},{9,11,306},{9,11,430},{9,11,663},{10,11,683},{11,11,427},{11,11,753},{12,\n11,334},{12,11,442},{14,11,258},{14,11,366},{143,11,131},{6,0,1865},{6,0,1879},{\n6,0,1881},{6,0,1894},{6,0,1908},{9,0,915},{9,0,926},{9,0,940},{9,0,943},{9,0,966\n},{9,0,980},{9,0,989},{9,0,1005},{9,0,1010},{12,0,813},{12,0,817},{12,0,840},{12\n,0,843},{12,0,855},{12,0,864},{12,0,871},{12,0,872},{12,0,899},{12,0,905},{12,0,\n924},{15,0,171},{15,0,181},{15,0,224},{15,0,235},{15,0,251},{146,0,184},{137,11,\n52},{5,0,16},{6,0,86},{6,0,603},{7,0,292},{7,0,561},{8,0,257},{8,0,382},{9,0,721\n},{9,0,778},{11,0,581},{140,0,466},{4,0,486},{5,0,491},{135,10,1121},{4,0,72},{6\n,0,265},{135,0,1300},{135,11,1183},{10,10,249},{139,10,209},{132,10,561},{137,11\n,519},{4,10,760},{4,11,656},{135,11,779},{9,10,154},{140,10,485},{135,11,1793},{\n135,11,144},{136,10,255},{133,0,621},{4,10,368},{135,10,641},{135,11,1373},{7,11\n,554},{7,11,605},{141,11,10},{137,0,234},{5,0,815},{6,0,1688},{134,0,1755},{5,11\n,838},{5,11,841},{134,11,1649},{7,0,1987},{7,0,2040},{136,0,743},{133,11,1012},{\n6,0,197},{136,0,205},{6,0,314},{134,11,314},{144,11,53},{6,11,251},{7,11,365},{7\n,11,1357},{7,11,1497},{8,11,154},{141,11,281},{133,11,340},{6,0,452},{7,0,312},{\n138,0,219},{138,0,589},{4,0,333},{9,0,176},{12,0,353},{141,0,187},{9,10,92},{147\n,10,91},{134,0,1110},{11,0,47},{139,11,495},{6,10,525},{8,10,806},{9,10,876},{\n140,10,284},{8,11,261},{9,11,144},{9,11,466},{10,11,370},{12,11,470},{13,11,144}\n,{142,11,348},{137,11,897},{6,11,248},{8,0,863},{8,0,864},{8,0,868},{8,0,884},{9\n,11,546},{10,0,866},{10,0,868},{10,0,873},{10,0,911},{10,0,912},{10,0,944},{10,\n11,535},{11,11,681},{12,0,727},{141,11,135},{6,0,300},{135,0,1515},{134,0,1237},\n{139,10,958},{133,10,594},{140,11,250},{134,0,1685},{134,11,567},{7,0,135},{8,0,\n7},{8,0,62},{9,0,243},{10,0,658},{10,0,697},{11,0,456},{139,0,756},{9,0,395},{\n138,0,79},{6,10,1641},{136,10,820},{4,10,302},{135,10,1766},{134,11,174},{135,10\n,1313},{135,0,631},{134,10,1674},{134,11,395},{138,0,835},{7,0,406},{7,0,459},{8\n,0,606},{139,0,726},{134,11,617},{134,0,979},{6,10,389},{7,10,149},{9,10,142},{\n138,10,94},{5,11,878},{133,11,972},{6,10,8},{7,10,1881},{8,10,91},{136,11,511},{\n133,0,612},{132,11,351},{4,0,372},{7,0,482},{8,0,158},{9,0,602},{9,0,615},{10,0,\n245},{10,0,678},{10,0,744},{11,0,248},{139,0,806},{5,0,854},{135,0,1991},{132,11\n,286},{135,11,344},{7,11,438},{7,11,627},{7,11,1516},{8,11,40},{9,11,56},{9,11,\n294},{10,11,30},{10,11,259},{11,11,969},{146,11,148},{135,0,1492},{5,11,259},{7,\n11,414},{7,11,854},{142,11,107},{135,10,1746},{6,0,833},{134,0,998},{135,10,24},\n{6,0,750},{135,0,1739},{4,10,503},{135,10,1661},{5,10,130},{7,10,1314},{9,10,610\n},{10,10,718},{11,10,601},{11,10,819},{11,10,946},{140,10,536},{10,10,149},{11,\n10,280},{142,10,336},{132,11,738},{135,10,1946},{5,0,195},{135,0,1685},{7,0,1997\n},{8,0,730},{139,0,1006},{151,11,17},{133,11,866},{14,0,463},{14,0,470},{150,0,\n61},{4,10,392},{5,0,751},{7,10,1597},{8,0,266},{139,0,578},{5,10,433},{9,10,633}\n,{139,10,629},{135,0,821},{6,0,715},{134,0,1325},{133,11,116},{4,11,457},{134,0,\n868},{134,0,959},{6,10,234},{138,11,199},{7,0,1053},{7,10,1950},{8,10,680},{11,\n10,817},{147,10,88},{7,10,1222},{138,10,386},{5,0,950},{5,0,994},{6,0,351},{134,\n0,1124},{134,0,1081},{6,10,5},{7,0,1595},{11,10,249},{12,10,313},{16,10,66},{145\n,10,26},{148,0,59},{5,11,527},{6,11,189},{135,11,859},{5,10,963},{6,10,1773},{11\n,11,104},{11,11,554},{15,11,60},{143,11,125},{135,0,47},{137,0,684},{134,11,116}\n,{134,0,1606},{134,0,777},{7,0,1020},{8,10,509},{136,10,792},{135,0,1094},{132,0\n,350},{133,11,487},{4,11,86},{5,11,667},{5,11,753},{6,11,316},{6,11,455},{135,11\n,946},{7,0,1812},{13,0,259},{13,0,356},{14,0,242},{147,0,114},{132,10,931},{133,\n0,967},{4,0,473},{7,0,623},{8,0,808},{9,0,871},{9,0,893},{11,0,38},{11,0,431},{\n12,0,112},{12,0,217},{12,0,243},{12,0,562},{12,0,663},{12,0,683},{13,0,141},{13,\n0,197},{13,0,227},{13,0,406},{13,0,487},{14,0,156},{14,0,203},{14,0,224},{14,0,\n256},{18,0,58},{150,0,0},{138,0,286},{7,10,943},{139,10,614},{135,10,1837},{150,\n11,45},{132,0,798},{4,0,222},{7,0,286},{136,0,629},{4,11,79},{7,11,1773},{10,11,\n450},{11,11,589},{13,11,332},{13,11,493},{14,11,183},{14,11,334},{14,11,362},{14\n,11,368},{14,11,376},{14,11,379},{19,11,90},{19,11,103},{19,11,127},{148,11,90},\n{4,10,90},{5,0,337},{5,10,545},{7,10,754},{9,10,186},{10,10,72},{10,10,782},{11,\n0,513},{11,0,889},{11,0,961},{11,10,577},{11,10,610},{12,0,461},{12,10,354},{12,\n10,362},{12,10,595},{13,0,79},{143,0,121},{141,0,306},{136,0,146},{7,0,1646},{9,\n10,329},{11,10,254},{141,11,124},{4,0,465},{135,0,1663},{132,0,525},{133,11,663}\n,{9,10,187},{10,0,299},{11,10,1016},{17,10,44},{146,0,74},{4,10,506},{7,0,165},{\n7,0,919},{136,10,517},{5,10,295},{135,10,1680},{133,11,846},{134,0,1064},{5,11,\n378},{7,11,1402},{7,11,1414},{8,11,465},{9,11,286},{10,11,185},{10,11,562},{10,\n11,635},{11,11,31},{11,11,393},{12,11,456},{13,11,312},{18,11,65},{18,11,96},{\n147,11,89},{132,0,596},{7,10,987},{9,10,688},{10,10,522},{11,10,788},{140,10,566\n},{4,11,648},{6,0,82},{6,10,1775},{7,0,138},{7,0,517},{7,0,1741},{139,0,238},{7,\n0,1233},{7,10,700},{7,10,940},{8,10,514},{9,10,116},{9,10,535},{10,10,118},{11,\n10,107},{11,10,148},{11,10,922},{12,10,254},{12,10,421},{142,10,238},{4,0,962},{\n6,0,1824},{8,0,894},{12,0,708},{12,0,725},{14,0,451},{20,0,94},{22,0,59},{150,0,\n62},{5,11,945},{6,11,1656},{6,11,1787},{7,11,167},{8,11,824},{9,11,391},{10,11,\n375},{139,11,185},{5,0,495},{7,0,834},{9,0,733},{139,0,378},{4,10,743},{135,11,\n1273},{6,0,1204},{7,11,1645},{8,11,352},{137,11,249},{139,10,292},{133,0,559},{\n132,11,152},{7,10,1283},{9,0,499},{9,10,227},{10,0,341},{11,10,325},{11,10,408},\n{14,10,180},{15,0,144},{18,10,47},{147,0,49},{6,0,21},{6,0,1737},{7,0,1444},{136\n,0,224},{133,11,1006},{5,10,81},{7,0,1446},{7,10,146},{7,10,1342},{8,10,53},{8,\n10,561},{8,10,694},{8,10,754},{9,0,97},{9,10,115},{9,10,894},{10,10,462},{10,10,\n813},{11,10,230},{11,10,657},{11,10,699},{11,10,748},{12,10,119},{12,10,200},{12\n,10,283},{14,10,273},{145,0,15},{5,10,408},{137,10,747},{135,11,431},{135,11,832\n},{6,0,729},{134,0,953},{4,0,727},{5,11,351},{7,11,264},{8,0,565},{136,11,565},{\n134,0,1948},{5,0,519},{5,11,40},{7,11,598},{7,11,1638},{8,11,78},{9,11,166},{9,\n11,640},{9,11,685},{9,11,773},{11,11,215},{13,11,65},{14,11,172},{14,11,317},{\n145,11,6},{8,11,60},{9,11,343},{139,11,769},{137,11,455},{134,0,1193},{140,0,790\n},{7,11,1951},{8,11,765},{8,11,772},{140,11,671},{7,11,108},{8,11,219},{8,11,388\n},{9,11,639},{9,11,775},{11,11,275},{140,11,464},{132,11,468},{7,10,30},{8,10,86\n},{8,10,315},{8,10,700},{9,10,576},{9,10,858},{11,10,310},{11,10,888},{11,10,904\n},{12,10,361},{141,10,248},{5,11,15},{6,11,56},{7,11,1758},{8,11,500},{9,11,730}\n,{11,11,331},{13,11,150},{142,11,282},{4,0,402},{7,0,2},{8,0,323},{136,0,479},{\n138,10,839},{11,0,580},{142,0,201},{5,0,59},{135,0,672},{137,10,617},{146,0,34},\n{134,11,1886},{4,0,961},{136,0,896},{5,11,205},{6,0,1285},{6,11,438},{137,11,711\n},{134,10,428},{7,10,524},{8,10,169},{8,10,234},{9,10,480},{138,10,646},{148,0,\n46},{141,0,479},{133,11,534},{6,0,2019},{134,10,1648},{4,0,85},{7,0,549},{7,10,\n1205},{138,10,637},{4,0,663},{5,0,94},{7,11,235},{7,11,1475},{15,11,68},{146,11,\n120},{6,11,443},{9,11,237},{9,11,571},{9,11,695},{10,11,139},{11,11,715},{12,11,\n417},{141,11,421},{132,0,783},{4,0,682},{8,0,65},{9,10,39},{10,10,166},{11,10,\n918},{12,10,635},{20,10,10},{22,10,27},{22,10,43},{150,10,52},{6,0,11},{135,0,\n187},{132,0,522},{4,0,52},{135,0,661},{4,0,383},{133,0,520},{135,11,546},{11,0,\n343},{142,0,127},{4,11,578},{7,10,157},{7,11,624},{7,11,916},{8,10,279},{10,11,\n256},{11,11,87},{139,11,703},{134,10,604},{4,0,281},{5,0,38},{7,0,194},{7,0,668}\n,{7,0,1893},{137,0,397},{7,10,945},{11,10,713},{139,10,744},{139,10,1022},{9,0,\n635},{139,0,559},{5,11,923},{7,11,490},{12,11,553},{13,11,100},{14,11,118},{143,\n11,75},{132,0,975},{132,10,567},{137,10,859},{7,10,1846},{7,11,1846},{8,10,628},\n{136,11,628},{148,0,116},{138,11,750},{14,0,51},{14,11,51},{15,11,7},{148,11,20}\n,{132,0,858},{134,0,1075},{4,11,924},{133,10,762},{136,0,535},{133,0,448},{10,10\n,784},{141,10,191},{133,10,298},{7,0,610},{135,0,1501},{7,10,633},{7,10,905},{7,\n10,909},{7,10,1538},{9,10,767},{140,10,636},{4,11,265},{7,11,807},{135,11,950},{\n5,11,93},{12,11,267},{144,11,26},{136,0,191},{139,10,301},{135,10,1970},{135,0,\n267},{4,0,319},{5,0,699},{138,0,673},{6,0,336},{7,0,92},{7,0,182},{8,0,453},{8,0\n,552},{9,0,204},{9,0,285},{10,0,99},{11,0,568},{11,0,950},{12,0,94},{12,10,644},\n{16,0,20},{16,0,70},{16,10,90},{147,0,55},{6,0,551},{7,0,1308},{7,10,845},{7,11,\n994},{8,10,160},{137,10,318},{19,11,1},{19,11,26},{150,11,9},{7,0,1406},{9,0,218\n},{141,0,222},{5,0,256},{138,0,69},{5,11,233},{5,11,320},{6,11,140},{7,11,330},{\n136,11,295},{6,0,1980},{136,0,952},{4,0,833},{137,11,678},{133,11,978},{4,11,905\n},{6,11,1701},{137,11,843},{138,10,735},{136,10,76},{17,0,39},{148,0,36},{18,0,\n81},{146,11,81},{14,0,352},{17,0,53},{18,0,146},{18,0,152},{19,0,11},{150,0,54},\n{135,0,634},{138,10,841},{132,0,618},{4,0,339},{4,11,275},{7,0,259},{12,11,376},\n{145,0,73},{132,11,509},{7,11,273},{139,11,377},{4,0,759},{9,10,804},{141,0,169}\n,{6,10,96},{135,10,1426},{4,10,651},{133,10,289},{7,0,1075},{8,10,35},{9,10,511}\n,{10,10,767},{147,10,118},{6,0,649},{6,0,670},{136,0,482},{5,0,336},{6,0,341},{6\n,0,478},{6,0,1763},{136,0,386},{5,11,802},{7,11,2021},{8,11,805},{14,11,94},{15,\n11,65},{16,11,4},{16,11,77},{16,11,80},{145,11,5},{5,11,167},{5,11,899},{6,0,\n1035},{6,11,410},{137,11,777},{134,11,1705},{5,0,924},{133,0,969},{132,10,704},{\n135,0,73},{135,11,10},{135,10,1078},{5,11,11},{6,11,117},{6,11,485},{7,11,1133},\n{9,11,582},{9,11,594},{11,11,21},{11,11,818},{12,11,535},{141,11,86},{135,0,1971\n},{4,11,264},{7,11,1067},{8,11,204},{8,11,385},{139,11,953},{6,0,1458},{135,0,\n1344},{5,0,396},{134,0,501},{4,10,720},{133,10,306},{4,0,929},{5,0,799},{5,10,\n431},{8,0,46},{136,0,740},{7,11,646},{7,11,1730},{11,11,446},{141,11,178},{5,10,\n464},{6,10,236},{7,0,276},{7,10,696},{7,10,914},{7,10,1108},{7,10,1448},{9,10,15\n},{9,10,564},{10,10,14},{12,10,565},{13,10,449},{14,10,53},{15,10,13},{16,10,64}\n,{145,10,41},{4,0,892},{133,0,770},{6,10,1767},{12,10,194},{145,10,107},{135,0,\n158},{5,10,840},{138,11,608},{134,0,1432},{138,11,250},{8,11,794},{9,11,400},{10\n,11,298},{142,11,228},{151,0,25},{7,11,1131},{135,11,1468},{135,0,2001},{9,10,\n642},{11,10,236},{142,10,193},{4,10,68},{5,10,634},{6,10,386},{7,10,794},{8,10,\n273},{9,10,563},{10,10,105},{10,10,171},{11,10,94},{139,10,354},{136,11,724},{\n132,0,478},{11,11,512},{13,11,205},{19,11,30},{22,11,36},{151,11,19},{7,0,1461},\n{140,0,91},{6,11,190},{7,11,768},{135,11,1170},{4,0,602},{4,10,95},{7,10,416},{8\n,0,211},{139,10,830},{7,10,731},{13,10,20},{143,10,11},{6,0,1068},{135,0,1872},{\n4,0,13},{5,0,567},{7,0,1498},{7,11,1023},{9,0,124},{11,0,521},{140,0,405},{135,0\n,1006},{132,0,735},{138,0,812},{4,0,170},{135,0,323},{6,11,137},{9,11,75},{9,11,\n253},{10,11,194},{138,11,444},{5,0,304},{5,10,864},{7,0,1403},{10,10,648},{11,10\n,671},{143,10,46},{135,11,1180},{133,10,928},{4,0,148},{133,0,742},{11,10,986},{\n140,10,682},{133,0,523},{135,11,1743},{7,0,730},{8,10,44},{9,10,884},{10,10,580}\n,{11,10,399},{11,10,894},{15,10,122},{18,0,144},{147,0,61},{5,11,760},{7,11,542}\n,{8,11,135},{136,11,496},{136,0,981},{133,0,111},{10,0,132},{11,0,191},{11,0,358\n},{139,0,460},{7,11,319},{7,11,355},{7,11,763},{10,11,389},{145,11,43},{134,0,\n890},{134,0,1420},{136,11,557},{133,10,518},{133,0,444},{135,0,1787},{135,10,\n1852},{8,0,123},{15,0,6},{144,0,7},{6,0,2041},{10,11,38},{139,11,784},{136,0,932\n},{5,0,937},{135,0,100},{4,11,58},{5,11,286},{6,0,995},{6,11,319},{7,11,402},{7,\n11,1254},{7,11,1903},{8,11,356},{140,11,408},{4,11,389},{9,11,181},{9,11,255},{\n10,11,8},{10,11,29},{10,11,816},{11,11,311},{11,11,561},{12,11,67},{141,11,181},\n{138,0,255},{4,10,934},{5,0,138},{136,10,610},{4,0,965},{10,0,863},{138,0,898},{\n10,10,804},{138,10,832},{8,10,96},{9,10,36},{10,10,607},{11,10,423},{11,10,442},\n{12,0,631},{12,10,309},{14,10,199},{15,10,90},{145,10,110},{134,0,1394},{4,0,652\n},{8,0,320},{9,10,13},{9,10,398},{9,10,727},{10,10,75},{10,10,184},{10,10,230},{\n10,10,564},{10,10,569},{11,10,973},{12,10,70},{12,10,189},{13,10,57},{13,10,257}\n,{22,0,6},{150,0,16},{6,0,897},{134,0,1333},{4,0,692},{133,0,321},{133,11,373},{\n135,0,922},{5,0,619},{133,0,698},{137,10,631},{5,10,345},{135,10,1016},{9,0,957}\n,{9,0,1018},{12,0,828},{12,0,844},{12,0,897},{12,0,901},{12,0,943},{15,0,180},{\n18,0,197},{18,0,200},{18,0,213},{18,0,214},{146,0,226},{5,0,917},{134,0,1659},{\n135,0,1100},{134,0,1173},{134,0,1930},{5,0,251},{5,0,956},{8,0,268},{9,0,214},{\n146,0,142},{133,10,673},{137,10,850},{4,10,287},{133,10,1018},{132,11,672},{5,0,\n346},{5,0,711},{8,0,390},{11,11,752},{139,11,885},{5,10,34},{10,10,724},{12,10,\n444},{13,10,354},{18,10,32},{23,10,24},{23,10,31},{152,10,5},{4,11,710},{134,11,\n606},{134,0,744},{134,10,382},{133,11,145},{4,10,329},{7,11,884},{140,11,124},{4\n,11,467},{5,11,405},{134,11,544},{9,10,846},{138,10,827},{133,0,624},{9,11,372},\n{15,11,2},{19,11,10},{147,11,18},{4,11,387},{135,11,1288},{5,0,783},{7,0,1998},{\n135,0,2047},{132,10,906},{136,10,366},{135,11,550},{4,10,123},{4,10,649},{5,10,\n605},{7,10,1509},{136,10,36},{134,0,1125},{132,0,594},{133,10,767},{135,11,1227}\n,{136,11,467},{4,11,576},{135,11,1263},{4,0,268},{7,0,1534},{135,11,1534},{4,10,\n273},{5,10,658},{5,10,995},{5,11,919},{134,11,1673},{133,0,563},{134,10,72},{135\n,10,1345},{4,11,82},{5,11,333},{5,11,904},{6,11,207},{7,11,325},{7,11,1726},{8,\n11,101},{10,11,778},{139,11,220},{5,0,37},{5,10,589},{6,0,39},{6,0,451},{7,0,218\n},{7,0,667},{7,0,1166},{7,0,1687},{8,0,662},{144,0,2},{134,0,1332},{133,11,903},\n{134,0,508},{5,10,117},{6,10,514},{6,10,541},{7,10,1164},{7,10,1436},{8,10,220},\n{8,10,648},{10,10,688},{11,10,560},{140,11,147},{6,11,555},{135,11,485},{133,10,\n686},{7,0,453},{7,0,635},{7,0,796},{8,0,331},{9,0,330},{9,0,865},{10,0,119},{10,\n0,235},{11,0,111},{11,0,129},{11,0,240},{12,0,31},{12,0,66},{12,0,222},{12,0,269\n},{12,0,599},{12,0,684},{12,0,689},{12,0,691},{142,0,345},{135,0,1834},{4,11,705\n},{7,11,615},{138,11,251},{136,11,345},{137,0,527},{6,0,98},{7,0,702},{135,0,991\n},{7,10,196},{10,10,765},{11,0,576},{11,10,347},{11,10,552},{11,10,790},{12,10,\n263},{13,10,246},{13,10,270},{13,10,395},{14,0,74},{14,10,176},{14,10,190},{14,\n10,398},{14,10,412},{15,10,32},{15,10,63},{16,10,88},{147,10,105},{134,11,90},{\n13,0,84},{141,0,122},{6,0,37},{7,0,299},{7,0,1666},{8,0,195},{8,0,316},{9,0,178}\n,{9,0,276},{9,0,339},{9,0,536},{10,0,102},{10,0,362},{10,0,785},{11,0,55},{11,0,\n149},{11,0,773},{13,0,416},{13,0,419},{14,0,38},{14,0,41},{142,0,210},{5,10,381}\n,{135,10,1792},{7,11,813},{12,11,497},{141,11,56},{7,10,616},{138,10,413},{133,0\n,645},{6,11,125},{135,11,1277},{132,0,290},{6,0,70},{7,0,1292},{10,0,762},{139,0\n,288},{6,10,120},{7,10,1188},{7,10,1710},{8,10,286},{9,10,667},{11,10,592},{139,\n10,730},{135,11,1784},{7,0,1315},{135,11,1315},{134,0,1955},{135,10,1146},{7,0,\n131},{7,0,422},{8,0,210},{140,0,573},{4,10,352},{135,10,687},{139,0,797},{143,0,\n38},{14,0,179},{15,0,151},{150,0,11},{4,10,192},{5,10,49},{6,10,200},{6,10,293},\n{6,10,1696},{135,0,488},{132,0,936},{135,11,703},{6,11,160},{7,11,1106},{9,11,\n770},{10,11,618},{11,11,112},{140,11,413},{5,0,453},{134,0,441},{135,0,595},{132\n,10,650},{132,10,147},{6,0,991},{6,0,1182},{12,11,271},{145,11,109},{133,10,934}\n,{140,11,221},{132,0,653},{7,0,505},{135,0,523},{134,0,903},{135,11,479},{7,11,\n304},{9,11,646},{9,11,862},{10,11,262},{11,11,696},{12,11,208},{15,11,79},{147,\n11,108},{146,0,80},{135,11,981},{142,0,432},{132,0,314},{137,11,152},{7,0,1368},\n{8,0,232},{8,0,361},{10,0,682},{138,0,742},{135,11,1586},{4,11,434},{9,0,534},{\n11,11,663},{12,11,210},{13,11,166},{13,11,310},{14,11,373},{147,11,43},{7,11,\n1091},{135,11,1765},{6,11,550},{135,11,652},{137,0,27},{142,0,12},{4,10,637},{5,\n11,553},{7,11,766},{138,11,824},{7,11,737},{8,11,298},{136,11,452},{7,0,736},{\n139,0,264},{134,0,1657},{133,11,292},{138,11,135},{6,0,844},{134,0,1117},{135,0,\n127},{9,10,867},{138,10,837},{6,0,1184},{134,0,1208},{134,0,1294},{136,0,364},{6\n,0,1415},{6,10,170},{7,0,1334},{7,11,393},{8,10,395},{8,10,487},{10,11,603},{11,\n0,125},{11,11,206},{141,10,147},{137,11,748},{4,11,912},{137,11,232},{4,10,535},\n{136,10,618},{137,0,792},{7,11,1973},{136,11,716},{135,11,98},{5,0,909},{9,0,849\n},{138,0,805},{4,0,630},{132,0,699},{5,11,733},{14,11,103},{150,10,23},{12,11,\n158},{18,11,8},{19,11,62},{20,11,6},{22,11,4},{23,11,2},{151,11,9},{132,0,968},{\n132,10,778},{132,10,46},{5,10,811},{6,10,1679},{6,10,1714},{135,10,2032},{6,0,\n1446},{7,10,1458},{9,10,407},{139,10,15},{6,10,34},{7,0,206},{7,0,397},{7,0,621}\n,{7,0,640},{7,10,1089},{8,0,124},{8,0,619},{8,10,708},{8,10,721},{9,0,305},{9,0,\n643},{9,10,363},{10,0,264},{10,0,628},{11,0,40},{12,0,349},{13,0,134},{13,0,295}\n,{14,0,155},{15,0,120},{18,0,105},{148,10,98},{4,0,262},{5,0,641},{135,0,342},{\n137,11,72},{4,0,99},{6,0,250},{6,0,346},{8,0,127},{138,0,81},{132,0,915},{5,0,75\n},{9,0,517},{10,0,470},{12,0,155},{141,0,224},{132,10,462},{11,11,600},{11,11,\n670},{141,11,245},{142,0,83},{5,10,73},{6,10,23},{134,10,338},{6,0,1031},{139,11\n,923},{7,11,164},{7,11,1571},{9,11,107},{140,11,225},{134,0,1470},{133,0,954},{6\n,0,304},{8,0,418},{10,0,345},{11,0,341},{139,0,675},{9,0,410},{139,0,425},{4,11,\n27},{5,11,484},{5,11,510},{6,11,434},{7,11,1000},{7,11,1098},{8,11,2},{136,11,\n200},{134,0,734},{140,11,257},{7,10,725},{8,10,498},{139,10,268},{134,0,1822},{\n135,0,1798},{135,10,773},{132,11,460},{4,11,932},{133,11,891},{134,0,14},{132,10\n,583},{7,10,1462},{8,11,625},{139,10,659},{5,0,113},{5,10,220},{6,0,243},{6,0,\n1708},{7,0,1865},{11,0,161},{16,0,37},{145,0,99},{134,11,76},{5,11,461},{135,11,\n1925},{140,0,69},{8,11,92},{137,11,221},{139,10,803},{132,10,544},{4,0,274},{134\n,0,922},{132,0,541},{5,0,627},{6,10,437},{6,10,564},{11,10,181},{141,10,183},{\n135,10,1192},{4,11,763},{135,0,166},{133,11,253},{134,0,849},{9,11,73},{10,11,\n110},{14,11,185},{145,11,119},{5,11,212},{12,11,35},{141,11,382},{133,0,717},{\n137,0,304},{136,0,600},{133,0,654},{6,0,273},{10,0,188},{13,0,377},{146,0,77},{4\n,10,790},{5,10,273},{134,10,394},{132,0,543},{135,0,410},{11,0,98},{11,0,524},{\n141,0,87},{132,0,941},{135,11,1175},{4,0,250},{6,10,127},{7,0,1612},{7,10,1511},\n{8,10,613},{11,0,186},{12,0,133},{12,10,495},{12,10,586},{12,10,660},{12,10,668}\n,{14,10,385},{15,10,118},{17,10,20},{146,10,98},{5,11,816},{134,0,1785},{134,0,\n1339},{6,10,230},{7,0,961},{7,0,1085},{7,0,1727},{7,11,1727},{136,0,462},{7,10,\n1954},{137,0,636},{132,0,780},{5,11,869},{5,11,968},{6,11,1626},{8,11,734},{136,\n11,784},{4,11,542},{6,11,1716},{6,11,1727},{7,11,1082},{7,11,1545},{8,11,56},{8,\n11,118},{8,11,412},{8,11,564},{9,11,888},{9,11,908},{10,11,50},{10,11,423},{11,\n11,685},{11,11,697},{11,11,933},{12,11,299},{13,11,126},{13,11,136},{13,11,170},\n{141,11,190},{134,11,226},{4,11,232},{9,11,202},{10,11,474},{140,11,433},{137,11\n,500},{5,0,529},{136,10,68},{132,10,654},{4,10,156},{7,10,998},{7,10,1045},{7,10\n,1860},{9,10,48},{9,10,692},{11,10,419},{139,10,602},{6,11,108},{7,0,1276},{7,11\n,1003},{7,11,1181},{8,0,474},{8,11,343},{137,0,652},{7,11,1264},{7,11,1678},{11,\n11,945},{12,11,341},{12,11,471},{140,11,569},{134,11,1712},{5,0,948},{12,0,468},\n{19,0,96},{148,0,24},{4,11,133},{7,11,711},{7,11,1298},{7,11,1585},{135,11,1929}\n,{6,0,753},{140,0,657},{139,0,941},{6,11,99},{7,11,1808},{145,11,57},{6,11,574},\n{7,11,428},{7,11,1250},{10,11,669},{11,11,485},{11,11,840},{12,11,300},{142,11,\n250},{4,0,532},{5,0,706},{135,0,662},{5,0,837},{6,0,1651},{139,0,985},{7,0,1861}\n,{9,10,197},{10,10,300},{12,10,473},{13,10,90},{141,10,405},{137,11,252},{6,11,\n323},{135,11,1564},{4,0,330},{4,0,863},{7,0,933},{7,0,2012},{7,11,461},{8,0,292}\n,{8,11,775},{138,11,435},{132,10,606},{4,11,655},{7,11,850},{17,11,75},{146,11,\n137},{135,0,767},{7,10,1978},{136,10,676},{132,0,641},{135,11,1559},{134,0,1233}\n,{137,0,242},{4,10,361},{5,10,315},{145,0,114},{137,0,883},{132,10,461},{138,0,\n274},{134,0,2008},{134,0,1794},{4,0,703},{135,0,207},{4,10,472},{140,0,285},{132\n,0,571},{5,0,873},{5,0,960},{8,0,823},{8,11,577},{137,0,881},{7,0,617},{10,0,498\n},{11,0,501},{12,0,16},{140,0,150},{138,10,747},{132,0,431},{133,10,155},{7,10,\n163},{8,10,319},{9,10,402},{10,10,24},{10,10,681},{11,0,283},{11,0,567},{11,10,\n200},{12,10,253},{12,10,410},{142,10,219},{4,11,413},{5,11,677},{8,11,432},{140,\n11,280},{5,10,475},{7,10,1780},{9,0,401},{11,10,297},{11,10,558},{14,10,322},{\n147,10,76},{6,0,781},{9,0,134},{10,0,2},{10,0,27},{10,0,333},{11,0,722},{143,0,1\n},{5,0,33},{6,0,470},{139,0,424},{135,0,2006},{7,10,1956},{140,0,783},{136,0,274\n},{135,0,1882},{132,0,794},{135,0,1848},{5,10,944},{134,10,1769},{6,0,47},{7,0,\n90},{7,0,664},{7,0,830},{7,0,1380},{7,0,2025},{8,0,448},{136,0,828},{132,10,144}\n,{134,0,1199},{4,11,395},{139,11,762},{135,11,1504},{9,0,417},{137,0,493},{9,11,\n174},{10,11,164},{11,11,440},{11,11,841},{143,11,98},{134,11,426},{139,11,1002},\n{134,0,295},{134,0,816},{6,10,247},{137,10,555},{133,0,1019},{4,0,620},{5,11,476\n},{10,10,280},{138,10,797},{139,0,464},{5,11,76},{6,11,458},{6,11,497},{7,11,764\n},{7,11,868},{9,11,658},{10,11,594},{11,11,173},{11,11,566},{12,11,20},{12,11,\n338},{141,11,200},{134,0,208},{4,11,526},{7,11,1029},{135,11,1054},{132,11,636},\n{6,11,233},{7,11,660},{7,11,1124},{17,11,31},{19,11,22},{151,11,14},{5,10,428},{\n138,0,442},{10,0,930},{140,0,778},{6,0,68},{7,0,448},{7,0,1629},{7,0,1769},{7,0,\n1813},{7,10,1717},{8,0,442},{8,0,516},{9,0,710},{10,0,282},{10,0,722},{138,10,\n546},{134,0,1128},{11,0,844},{12,0,104},{140,0,625},{4,11,432},{135,11,824},{138\n,10,189},{133,0,787},{133,10,99},{4,11,279},{7,11,301},{137,11,362},{4,10,397},{\n8,0,491},{136,10,555},{4,11,178},{133,11,399},{134,0,711},{144,0,9},{4,0,403},{5\n,0,441},{7,0,450},{10,0,840},{11,0,101},{12,0,193},{141,0,430},{135,11,1246},{12\n,10,398},{20,10,39},{21,10,11},{150,10,41},{4,10,485},{7,10,353},{135,10,1523},{\n6,10,366},{7,10,1384},{7,10,1601},{135,11,1912},{7,0,396},{7,11,396},{138,0,160}\n,{137,10,282},{134,11,1692},{4,10,157},{5,10,471},{6,11,202},{10,11,448},{11,11,\n208},{12,11,360},{17,11,117},{17,11,118},{18,11,27},{148,11,67},{133,0,679},{137\n,0,326},{136,10,116},{7,11,872},{10,11,516},{139,11,167},{132,11,224},{5,11,546}\n,{7,11,35},{8,11,11},{8,11,12},{9,11,315},{9,11,533},{10,11,802},{11,11,166},{12\n,11,525},{142,11,243},{7,0,1128},{135,11,1920},{5,11,241},{8,11,242},{9,11,451},\n{10,11,667},{11,11,598},{140,11,429},{5,10,160},{6,0,737},{7,10,363},{7,10,589},\n{10,10,170},{141,10,55},{135,0,1796},{142,11,254},{4,0,574},{7,0,350},{7,0,1024}\n,{8,0,338},{9,0,677},{138,0,808},{134,0,1096},{137,11,516},{4,10,108},{4,11,366}\n,{7,0,405},{10,0,491},{139,10,498},{11,11,337},{142,11,303},{134,11,1736},{7,0,\n1081},{140,11,364},{7,10,1005},{140,10,609},{4,10,895},{5,10,772},{135,0,1676},{\n135,0,2037},{6,0,1207},{11,11,916},{142,11,419},{14,11,140},{148,11,41},{6,11,\n331},{136,11,623},{4,10,926},{5,10,983},{9,0,944},{9,0,969},{9,0,1022},{12,0,913\n},{12,0,936},{15,0,177},{143,0,193},{5,0,354},{135,11,506},{8,0,598},{9,0,664},{\n138,0,441},{4,11,640},{133,11,513},{137,0,297},{132,10,538},{6,10,294},{7,10,\n1267},{136,10,624},{7,0,1772},{7,11,1888},{8,11,289},{11,11,45},{12,11,278},{140\n,11,537},{135,10,1325},{138,0,751},{141,0,37},{134,0,1828},{132,10,757},{132,11,\n394},{6,0,257},{135,0,1522},{4,0,582},{7,11,1931},{137,0,191},{7,11,574},{7,11,\n1719},{137,11,145},{132,11,658},{4,11,369},{138,0,790},{9,11,781},{10,11,144},{\n11,11,385},{13,11,161},{13,11,228},{13,11,268},{148,11,107},{8,0,469},{8,11,374}\n,{138,0,47},{6,0,306},{7,0,1140},{7,0,1340},{8,0,133},{138,0,449},{139,0,1011},{\n7,10,1875},{139,10,124},{4,11,344},{6,11,498},{139,11,323},{137,0,299},{132,0,\n837},{133,11,906},{5,0,329},{8,0,260},{138,0,10},{134,0,1320},{4,0,657},{146,0,\n158},{135,0,1191},{152,0,7},{6,0,1939},{8,0,974},{138,0,996},{135,0,1665},{11,11\n,126},{139,11,287},{143,0,8},{14,11,149},{14,11,399},{143,11,57},{5,0,66},{7,0,\n1896},{136,0,288},{5,10,150},{7,0,175},{8,10,603},{9,10,593},{9,10,634},{10,0,\n494},{10,10,173},{11,10,462},{11,10,515},{13,10,216},{13,10,288},{142,10,400},{\n134,0,1643},{136,11,21},{4,0,21},{5,0,91},{5,0,648},{5,0,750},{5,0,781},{6,0,54}\n,{6,0,112},{6,0,402},{6,0,1732},{7,0,315},{7,0,749},{7,0,1427},{7,0,1900},{9,0,\n78},{9,0,508},{10,0,611},{10,0,811},{11,0,510},{11,0,728},{13,0,36},{14,0,39},{\n16,0,83},{17,0,124},{148,0,30},{4,0,668},{136,0,570},{10,0,322},{10,0,719},{139,\n0,407},{135,11,1381},{136,11,193},{12,10,108},{141,10,291},{132,11,616},{136,11,\n692},{8,0,125},{8,0,369},{8,0,524},{10,0,486},{11,0,13},{11,0,381},{11,0,736},{\n11,0,766},{11,0,845},{13,0,114},{13,0,292},{142,0,47},{134,0,1247},{6,0,1684},{6\n,0,1731},{7,0,356},{8,0,54},{8,0,221},{9,0,225},{9,0,356},{10,0,77},{10,0,446},{\n10,0,731},{12,0,404},{141,0,491},{135,10,1777},{4,10,493},{4,11,305},{144,10,55}\n,{4,0,951},{6,0,1809},{6,0,1849},{8,0,846},{8,0,866},{8,0,899},{10,0,896},{12,0,\n694},{142,0,468},{5,11,214},{7,11,603},{8,11,611},{9,11,686},{10,11,88},{11,11,\n459},{11,11,496},{12,11,463},{12,11,590},{13,11,0},{142,11,214},{132,0,411},{4,0\n,80},{133,0,44},{140,11,74},{143,0,31},{6,10,568},{7,0,669},{7,10,1804},{8,10,\n362},{8,10,410},{8,10,830},{9,10,514},{11,10,649},{142,10,157},{6,11,1703},{135,\n0,673},{132,10,625},{134,0,1303},{5,0,299},{135,0,1083},{138,0,704},{6,0,275},{6\n,10,158},{7,0,408},{7,10,129},{7,10,181},{8,10,276},{8,10,377},{10,10,523},{11,\n10,816},{12,10,455},{13,10,303},{142,10,135},{4,0,219},{7,0,367},{7,0,1713},{7,0\n,1761},{9,0,86},{9,0,537},{10,0,165},{12,0,219},{140,0,561},{4,10,1},{4,11,737},\n{6,11,317},{7,10,1143},{7,10,1463},{8,0,216},{9,10,207},{9,10,390},{9,10,467},{\n10,11,98},{11,10,836},{11,11,294},{12,11,60},{12,11,437},{13,11,64},{13,11,380},\n{142,11,430},{6,11,1758},{8,11,520},{9,11,345},{9,11,403},{142,11,350},{5,11,47}\n,{10,11,242},{138,11,579},{5,11,139},{7,11,1168},{138,11,539},{135,0,1319},{4,10\n,295},{4,10,723},{5,10,895},{7,10,1031},{8,10,199},{8,10,340},{9,10,153},{9,10,\n215},{10,10,21},{10,10,59},{10,10,80},{10,10,224},{10,10,838},{11,10,229},{11,10\n,652},{12,10,192},{13,10,146},{142,10,91},{140,0,428},{137,10,51},{133,0,514},{5\n,10,309},{140,10,211},{5,10,125},{6,0,1010},{8,10,77},{138,10,15},{4,0,55},{5,0,\n301},{6,0,571},{142,0,49},{146,0,102},{136,11,370},{4,11,107},{7,11,613},{8,11,\n358},{8,11,439},{8,11,504},{9,11,501},{10,11,383},{139,11,477},{132,11,229},{133\n,0,364},{133,10,439},{4,11,903},{135,11,1816},{11,0,379},{140,10,76},{4,0,76},{4\n,0,971},{7,0,1550},{9,0,306},{9,0,430},{9,0,663},{10,0,683},{10,0,921},{11,0,427\n},{11,0,753},{12,0,334},{12,0,442},{14,0,258},{14,0,366},{143,0,131},{137,0,52},\n{4,11,47},{6,11,373},{7,11,452},{7,11,543},{7,11,1714},{7,11,1856},{9,11,6},{11,\n11,257},{139,11,391},{4,10,8},{7,10,1152},{7,10,1153},{7,10,1715},{9,10,374},{10\n,10,478},{139,10,648},{4,11,785},{133,11,368},{135,10,1099},{135,11,860},{5,11,\n980},{134,11,1754},{134,0,1258},{6,0,1058},{6,0,1359},{7,11,536},{7,11,1331},{\n136,11,143},{4,0,656},{135,0,779},{136,10,87},{5,11,19},{6,11,533},{146,11,126},\n{7,0,144},{138,10,438},{5,11,395},{5,11,951},{134,11,1776},{135,0,1373},{7,0,554\n},{7,0,605},{141,0,10},{4,10,69},{5,10,122},{9,10,656},{138,10,464},{5,10,849},{\n134,10,1633},{5,0,838},{5,0,841},{134,0,1649},{133,0,1012},{139,10,499},{7,10,\n476},{7,10,1592},{138,10,87},{6,0,251},{7,0,365},{7,0,1357},{7,0,1497},{8,0,154}\n,{141,0,281},{132,11,441},{132,11,695},{7,11,497},{9,11,387},{147,11,81},{133,0,\n340},{14,10,283},{142,11,283},{134,0,810},{135,11,1894},{139,0,495},{5,11,284},{\n6,11,49},{6,11,350},{7,11,1},{7,11,377},{7,11,1693},{8,11,18},{8,11,678},{9,11,\n161},{9,11,585},{9,11,671},{9,11,839},{11,11,912},{141,11,427},{5,10,859},{7,10,\n1160},{8,10,107},{9,10,291},{9,10,439},{10,10,663},{11,10,609},{140,10,197},{8,0\n,261},{9,0,144},{9,0,466},{10,0,370},{12,0,470},{13,0,144},{142,0,348},{137,0,\n897},{6,0,248},{9,0,546},{10,0,535},{11,0,681},{141,0,135},{4,0,358},{135,0,1496\n},{134,0,567},{136,0,445},{4,10,117},{6,10,372},{7,10,1905},{142,10,323},{4,10,\n722},{139,10,471},{6,0,697},{134,0,996},{7,11,2007},{9,11,101},{9,11,450},{10,11\n,66},{10,11,842},{11,11,536},{140,11,587},{132,0,577},{134,0,1336},{9,10,5},{12,\n10,216},{12,10,294},{12,10,298},{12,10,400},{12,10,518},{13,10,229},{143,10,139}\n,{6,0,174},{138,0,917},{134,10,1774},{5,10,12},{7,10,375},{9,10,88},{9,10,438},{\n11,10,270},{139,11,62},{134,11,1766},{6,11,0},{7,10,816},{7,10,1241},{7,11,84},{\n9,10,283},{9,10,520},{10,10,213},{10,10,307},{10,10,463},{10,10,671},{10,10,746}\n,{11,10,401},{11,10,794},{11,11,895},{12,10,517},{17,11,11},{18,10,107},{147,10,\n115},{5,0,878},{133,0,972},{6,11,1665},{7,11,256},{7,11,1388},{138,11,499},{4,10\n,258},{136,10,639},{4,11,22},{5,11,10},{6,10,22},{7,10,903},{7,10,1963},{7,11,\n848},{8,11,97},{138,10,577},{5,10,681},{136,10,782},{133,11,481},{132,0,351},{4,\n10,664},{5,10,804},{139,10,1013},{6,11,134},{7,11,437},{7,11,959},{9,11,37},{14,\n11,285},{14,11,371},{144,11,60},{7,11,486},{8,11,155},{11,11,93},{140,11,164},{\n132,0,286},{7,0,438},{7,0,627},{7,0,1516},{8,0,40},{9,0,56},{9,0,294},{10,0,30},\n{11,0,969},{11,0,995},{146,0,148},{5,11,591},{135,11,337},{134,0,1950},{133,10,\n32},{138,11,500},{5,11,380},{5,11,650},{136,11,310},{4,11,364},{7,11,1156},{7,11\n,1187},{137,11,409},{4,0,738},{134,11,482},{4,11,781},{6,11,487},{7,11,926},{8,\n11,263},{139,11,500},{135,11,418},{4,10,289},{6,0,2047},{7,10,629},{7,10,1698},{\n7,10,1711},{10,0,969},{140,10,215},{6,10,450},{136,10,109},{134,0,818},{136,10,\n705},{133,0,866},{4,11,94},{135,11,1265},{132,11,417},{134,0,1467},{135,10,1238}\n,{4,0,972},{6,0,1851},{134,0,1857},{134,0,355},{133,0,116},{132,0,457},{135,11,\n1411},{4,11,408},{4,11,741},{135,11,500},{134,10,26},{142,11,137},{5,0,527},{6,0\n,189},{7,0,859},{136,0,267},{11,0,104},{11,0,554},{15,0,60},{143,0,125},{134,0,\n1613},{4,10,414},{5,10,467},{9,10,654},{10,10,451},{12,10,59},{141,10,375},{135,\n10,17},{134,0,116},{135,11,541},{135,10,955},{6,11,73},{135,11,177},{133,11,576}\n,{134,0,886},{133,0,487},{4,0,86},{5,0,667},{5,0,753},{6,0,316},{6,0,455},{135,0\n,946},{142,11,231},{150,0,45},{134,0,863},{134,0,1953},{6,10,280},{10,10,502},{\n11,10,344},{140,10,38},{4,0,79},{7,0,1773},{10,0,450},{11,0,589},{13,0,332},{13,\n0,493},{14,0,183},{14,0,334},{14,0,362},{14,0,368},{14,0,376},{14,0,379},{19,0,\n90},{19,0,103},{19,0,127},{148,0,90},{5,10,45},{7,10,1161},{11,10,448},{11,10,\n880},{13,10,139},{13,10,407},{15,10,16},{17,10,95},{18,10,66},{18,10,88},{18,10,\n123},{149,10,7},{136,10,777},{4,10,410},{135,10,521},{135,10,1778},{135,11,538},\n{142,0,381},{133,11,413},{134,0,1142},{6,0,1189},{136,11,495},{5,0,663},{6,0,\n1962},{134,0,2003},{7,11,54},{8,11,312},{10,11,191},{10,11,614},{140,11,567},{\n132,10,436},{133,0,846},{7,10,1587},{7,10,1707},{10,0,528},{139,0,504},{5,0,378}\n,{8,0,465},{9,0,286},{10,0,185},{10,0,562},{10,0,635},{11,0,31},{11,0,393},{13,0\n,312},{18,0,65},{18,0,96},{147,0,89},{6,11,468},{7,0,899},{7,11,567},{7,11,1478}\n,{8,11,530},{14,0,325},{142,11,290},{7,0,1880},{9,0,680},{139,0,798},{134,0,1770\n},{132,0,648},{150,11,35},{5,0,945},{6,0,1656},{6,0,1787},{7,0,167},{8,0,824},{9\n,0,391},{10,0,375},{139,0,185},{6,11,484},{135,11,822},{134,0,2046},{7,0,1645},{\n8,0,352},{137,0,249},{132,0,152},{6,0,611},{135,0,1733},{6,11,1724},{135,11,2022\n},{133,0,1006},{141,11,96},{5,0,420},{135,0,1449},{146,11,149},{135,0,832},{135,\n10,663},{133,0,351},{5,0,40},{7,0,598},{7,0,1638},{8,0,78},{9,0,166},{9,0,640},{\n9,0,685},{9,0,773},{11,0,215},{13,0,65},{14,0,172},{14,0,317},{145,0,6},{8,0,60}\n,{9,0,343},{139,0,769},{134,0,1354},{132,0,724},{137,0,745},{132,11,474},{7,0,\n1951},{8,0,765},{8,0,772},{140,0,671},{7,0,108},{8,0,219},{8,0,388},{9,0,775},{\n11,0,275},{140,0,464},{137,0,639},{135,10,503},{133,11,366},{5,0,15},{5,11,305},\n{6,0,56},{7,0,1758},{8,0,500},{9,0,730},{9,11,560},{11,0,331},{13,0,150},{13,11,\n208},{142,0,282},{4,10,113},{5,10,163},{5,10,735},{7,10,1009},{9,10,9},{9,10,771\n},{12,10,90},{13,10,138},{13,10,410},{143,10,128},{4,10,324},{138,10,104},{135,\n11,466},{142,11,27},{134,0,1886},{4,11,480},{5,0,205},{6,0,438},{6,11,167},{6,11\n,302},{6,11,1642},{7,11,130},{7,11,656},{7,11,837},{7,11,1547},{7,11,1657},{8,11\n,429},{9,0,711},{9,11,228},{10,11,643},{13,11,289},{13,11,343},{147,11,101},{134\n,0,865},{6,0,2025},{136,0,965},{7,11,278},{10,11,739},{11,11,708},{141,11,348},{\n133,0,534},{135,11,1922},{137,0,691},{4,10,935},{133,10,823},{6,0,443},{9,0,237}\n,{9,0,571},{9,0,695},{10,0,139},{11,0,715},{12,0,417},{141,0,421},{5,10,269},{7,\n10,434},{7,10,891},{8,10,339},{9,10,702},{11,10,594},{11,10,718},{145,10,100},{6\n,0,1555},{7,0,878},{9,10,485},{141,10,264},{134,10,1713},{7,10,1810},{11,10,866}\n,{12,10,103},{141,10,495},{135,10,900},{6,0,1410},{9,11,316},{139,11,256},{4,0,\n995},{135,0,1033},{132,0,578},{10,0,881},{12,0,740},{12,0,743},{140,0,759},{132,\n0,822},{133,0,923},{142,10,143},{135,11,1696},{6,11,363},{7,11,1955},{136,11,725\n},{132,0,924},{133,0,665},{135,10,2029},{135,0,1901},{4,0,265},{6,0,1092},{6,0,\n1417},{7,0,807},{135,0,950},{5,0,93},{12,0,267},{141,0,498},{135,0,1451},{5,11,\n813},{135,11,2046},{5,10,625},{135,10,1617},{135,0,747},{6,0,788},{137,0,828},{5\n,11,712},{7,0,184},{7,11,1855},{8,10,425},{8,10,693},{9,10,720},{10,10,380},{10,\n10,638},{11,0,307},{11,0,400},{11,10,473},{11,11,17},{12,10,61},{13,11,321},{15,\n0,130},{144,11,67},{135,0,198},{6,11,320},{7,11,781},{7,11,1921},{9,11,55},{10,\n11,186},{10,11,273},{10,11,664},{10,11,801},{11,11,996},{11,11,997},{13,11,157},\n{142,11,170},{136,11,271},{135,0,994},{7,11,103},{7,11,863},{11,11,184},{14,11,\n299},{145,11,62},{11,10,551},{142,10,159},{5,0,233},{5,0,320},{6,0,140},{8,0,295\n},{8,0,615},{136,11,615},{133,0,978},{4,0,905},{6,0,1701},{137,0,843},{132,10,\n168},{4,0,974},{8,0,850},{12,0,709},{12,0,768},{140,0,786},{135,10,91},{152,0,6}\n,{138,10,532},{135,10,1884},{132,0,509},{6,0,1307},{135,0,273},{5,11,77},{7,11,\n1455},{10,11,843},{19,11,73},{150,11,5},{132,11,458},{135,11,1420},{6,11,109},{\n138,11,382},{6,0,201},{6,11,330},{7,10,70},{7,11,1084},{10,10,240},{11,11,142},{\n147,10,93},{7,0,1041},{140,11,328},{133,11,354},{134,0,1040},{133,0,693},{134,0,\n774},{139,0,234},{132,0,336},{7,0,1399},{139,10,392},{20,0,22},{148,11,22},{5,0,\n802},{7,0,2021},{136,0,805},{5,0,167},{5,0,899},{6,0,410},{137,0,777},{137,0,789\n},{134,0,1705},{7,10,655},{135,10,1844},{4,10,145},{6,10,176},{7,10,395},{137,10\n,562},{132,10,501},{135,0,10},{5,0,11},{6,0,117},{6,0,485},{6,10,509},{7,0,1133}\n,{9,0,582},{9,0,594},{10,0,82},{11,0,21},{11,0,818},{12,0,535},{13,0,86},{20,0,\n91},{151,0,13},{4,0,264},{7,0,1067},{8,0,204},{8,0,385},{139,0,953},{139,11,737}\n,{138,0,56},{134,0,1917},{133,0,470},{10,11,657},{14,11,297},{142,11,361},{135,\n11,412},{7,0,1198},{7,11,1198},{8,11,556},{14,11,123},{14,11,192},{143,11,27},{7\n,11,1985},{14,11,146},{15,11,42},{16,11,23},{17,11,86},{146,11,17},{8,11,122},{\n139,0,1015},{4,10,114},{9,10,492},{13,10,462},{142,10,215},{4,10,77},{5,10,361},\n{6,10,139},{6,10,401},{6,10,404},{7,10,413},{7,10,715},{7,10,1716},{11,10,279},{\n12,10,179},{12,10,258},{13,10,244},{142,10,358},{134,10,1717},{7,10,1061},{8,10,\n82},{11,10,250},{12,10,420},{141,10,184},{133,0,715},{135,10,724},{9,0,919},{9,0\n,922},{9,0,927},{9,0,933},{9,0,962},{9,0,1000},{9,0,1002},{9,0,1021},{12,0,890},\n{12,0,907},{12,0,930},{15,0,207},{15,0,228},{15,0,238},{149,0,61},{8,0,794},{9,0\n,400},{10,0,298},{142,0,228},{5,11,430},{5,11,932},{6,11,131},{7,11,417},{9,11,\n522},{11,11,314},{141,11,390},{132,0,867},{4,11,507},{136,0,724},{137,11,261},{4\n,11,343},{133,11,511},{6,0,190},{7,0,768},{135,0,1170},{6,10,513},{135,10,1052},\n{7,11,455},{138,11,591},{134,0,1066},{137,10,899},{14,0,67},{147,0,60},{4,0,948}\n,{18,0,174},{146,0,176},{135,0,1023},{7,10,1417},{12,10,382},{17,10,48},{152,10,\n12},{134,11,575},{132,0,764},{6,10,545},{7,10,565},{7,10,1669},{10,10,114},{11,\n10,642},{140,10,618},{6,0,137},{9,0,75},{9,0,253},{10,0,194},{138,0,444},{4,0,\n756},{133,10,5},{7,10,192},{136,0,1008},{132,0,842},{8,10,763},{11,0,643},{140,0\n,115},{139,0,67},{133,10,759},{4,0,821},{5,0,760},{7,0,542},{7,11,580},{8,0,135}\n,{136,0,496},{7,10,370},{7,10,1007},{7,10,1177},{135,10,1565},{135,10,1237},{140\n,0,736},{7,0,319},{7,0,355},{7,0,763},{10,0,389},{145,0,43},{8,11,333},{138,11,\n182},{4,10,87},{5,10,250},{141,10,298},{138,0,786},{134,0,2044},{8,11,330},{140,\n11,477},{135,11,1338},{132,11,125},{134,0,1030},{134,0,1083},{132,11,721},{135,\n10,814},{7,11,776},{8,11,145},{147,11,56},{134,0,1226},{4,10,57},{7,10,1195},{7,\n10,1438},{7,10,1548},{7,10,1835},{7,10,1904},{9,10,757},{10,10,604},{139,10,519}\n,{7,11,792},{8,11,147},{10,11,821},{139,11,1021},{137,11,797},{4,0,58},{5,0,286}\n,{6,0,319},{7,0,402},{7,0,1254},{7,0,1903},{8,0,356},{140,0,408},{4,0,389},{4,0,\n815},{9,0,181},{9,0,255},{10,0,8},{10,0,29},{10,0,816},{11,0,311},{11,0,561},{12\n,0,67},{141,0,181},{7,11,1472},{135,11,1554},{7,11,1071},{7,11,1541},{7,11,1767}\n,{7,11,1806},{7,11,1999},{9,11,248},{10,11,400},{11,11,162},{11,11,178},{11,11,\n242},{12,11,605},{15,11,26},{144,11,44},{5,11,168},{5,11,930},{8,11,74},{9,11,\n623},{12,11,500},{12,11,579},{13,11,41},{143,11,93},{6,11,220},{7,11,1101},{141,\n11,105},{4,10,209},{5,0,474},{7,0,507},{7,10,902},{135,11,507},{132,0,427},{6,0,\n413},{7,10,335},{7,10,1437},{7,10,1668},{8,10,553},{8,10,652},{8,10,656},{9,10,\n558},{11,10,743},{149,10,18},{132,0,730},{6,11,19},{7,11,1413},{139,11,428},{133\n,0,373},{132,10,559},{7,11,96},{8,11,401},{137,11,896},{5,10,1017},{7,0,799},{7,\n0,1972},{138,10,511},{135,0,1793},{7,11,1961},{7,11,1965},{8,11,702},{136,11,750\n},{8,11,150},{8,11,737},{140,11,366},{132,0,322},{133,10,709},{8,11,800},{9,11,\n148},{9,11,872},{9,11,890},{11,11,309},{11,11,1001},{13,11,267},{141,11,323},{\n134,10,1745},{7,0,290},{136,10,206},{7,0,1651},{145,0,89},{139,0,2},{132,0,672},\n{6,0,1860},{8,0,905},{10,0,844},{10,0,846},{10,0,858},{12,0,699},{12,0,746},{140\n,0,772},{135,11,424},{133,11,547},{133,0,737},{5,11,490},{6,11,615},{6,11,620},{\n135,11,683},{6,0,746},{134,0,1612},{132,10,776},{9,11,385},{149,11,17},{133,0,\n145},{135,10,1272},{7,0,884},{140,0,124},{4,0,387},{135,0,1288},{5,11,133},{136,\n10,406},{136,11,187},{6,0,679},{8,11,8},{138,11,0},{135,0,550},{135,11,798},{136\n,11,685},{7,11,1086},{145,11,46},{8,10,175},{10,10,168},{138,10,573},{135,0,1305\n},{4,0,576},{135,0,1263},{6,0,686},{134,0,1563},{134,0,607},{5,0,919},{134,0,\n1673},{148,0,37},{8,11,774},{10,11,670},{140,11,51},{133,10,784},{139,10,882},{4\n,0,82},{5,0,333},{5,0,904},{6,0,207},{7,0,325},{7,0,1726},{8,0,101},{10,0,778},{\n139,0,220},{135,11,371},{132,0,958},{133,0,903},{4,11,127},{5,11,350},{6,11,356}\n,{8,11,426},{9,11,572},{10,11,247},{139,11,312},{140,0,147},{6,11,59},{7,11,885}\n,{9,11,603},{141,11,397},{9,10,14},{9,10,441},{10,0,367},{139,10,9},{11,10,966},\n{12,10,287},{13,10,342},{13,10,402},{15,10,110},{143,10,163},{134,0,690},{132,0,\n705},{7,10,1428},{7,10,1640},{7,10,1867},{9,0,651},{9,10,169},{9,10,182},{9,10,\n367},{9,10,478},{9,10,506},{9,10,551},{9,10,557},{9,10,648},{9,10,697},{9,10,705\n},{9,10,725},{9,10,787},{9,10,794},{10,10,198},{10,10,214},{10,10,267},{10,10,\n275},{10,10,456},{10,10,551},{10,10,561},{10,10,613},{10,10,627},{10,10,668},{10\n,10,675},{10,10,691},{10,10,695},{10,10,707},{10,10,715},{11,0,971},{11,10,183},\n{11,10,201},{11,10,262},{11,10,352},{11,10,439},{11,10,493},{11,10,572},{11,10,\n591},{11,10,608},{11,10,611},{11,10,646},{11,10,674},{11,10,711},{11,10,751},{11\n,10,761},{11,10,776},{11,10,785},{11,10,850},{11,10,853},{11,10,862},{11,10,865}\n,{11,10,868},{11,10,875},{11,10,898},{11,10,902},{11,10,903},{11,10,910},{11,10,\n932},{11,10,942},{11,10,957},{11,10,967},{11,10,972},{12,10,148},{12,10,195},{12\n,10,220},{12,10,237},{12,10,318},{12,10,339},{12,10,393},{12,10,445},{12,10,450}\n,{12,10,474},{12,10,505},{12,10,509},{12,10,533},{12,10,591},{12,10,594},{12,10,\n597},{12,10,621},{12,10,633},{12,10,642},{13,0,273},{13,10,59},{13,10,60},{13,10\n,145},{13,10,239},{13,10,250},{13,10,329},{13,10,344},{13,10,365},{13,10,372},{\n13,10,387},{13,10,403},{13,10,414},{13,10,456},{13,10,470},{13,10,478},{13,10,\n483},{13,10,489},{14,10,55},{14,10,57},{14,10,81},{14,10,90},{14,10,148},{14,10,\n239},{14,10,266},{14,10,321},{14,10,326},{14,10,327},{14,10,330},{14,10,347},{14\n,10,355},{14,10,401},{14,10,404},{14,10,411},{14,10,414},{14,10,416},{14,10,420}\n,{15,10,61},{15,10,74},{15,10,87},{15,10,88},{15,10,94},{15,10,96},{15,10,116},{\n15,10,149},{15,10,154},{16,10,50},{16,10,63},{16,10,73},{17,10,2},{17,10,66},{17\n,10,92},{17,10,103},{17,10,112},{17,10,120},{18,10,50},{18,10,54},{18,10,82},{18\n,10,86},{18,10,90},{18,10,111},{18,10,115},{18,10,156},{19,10,40},{19,10,79},{20\n,10,78},{149,10,22},{5,10,161},{7,0,887},{135,10,839},{142,11,98},{134,0,90},{\n138,11,356},{135,11,441},{6,11,111},{7,11,4},{8,11,163},{8,11,776},{138,11,566},\n{134,0,908},{134,0,1261},{7,0,813},{12,0,497},{141,0,56},{134,0,1235},{135,0,429\n},{135,11,1994},{138,0,904},{6,0,125},{7,0,1277},{137,0,772},{151,0,12},{4,0,841\n},{5,0,386},{133,11,386},{5,11,297},{135,11,1038},{6,0,860},{6,0,1069},{135,11,\n309},{136,0,946},{135,10,1814},{141,11,418},{136,11,363},{10,0,768},{139,0,787},\n{22,11,30},{150,11,33},{6,0,160},{7,0,1106},{9,0,770},{11,0,112},{140,0,413},{11\n,11,216},{139,11,340},{136,10,139},{135,11,1390},{135,11,808},{132,11,280},{7,10\n,643},{8,10,236},{12,0,271},{145,0,109},{140,11,54},{4,11,421},{133,11,548},{11,\n0,719},{12,0,36},{141,0,337},{7,0,581},{9,0,644},{137,0,699},{11,11,511},{13,11,\n394},{14,11,298},{14,11,318},{146,11,103},{7,0,304},{9,0,646},{9,0,862},{11,0,\n696},{12,0,208},{15,0,79},{147,0,108},{4,0,631},{7,0,1126},{135,0,1536},{135,11,\n1527},{8,0,880},{10,0,869},{138,0,913},{5,10,54},{6,11,254},{7,0,1513},{9,11,109\n},{138,11,103},{135,0,981},{133,11,729},{132,10,744},{132,0,434},{134,0,550},{6,\n11,1630},{7,0,930},{10,0,476},{10,10,402},{13,0,452},{18,10,55},{147,0,104},{5,0\n,553},{138,0,824},{136,0,452},{8,0,151},{137,10,624},{132,10,572},{132,0,772},{\n133,11,671},{133,0,292},{138,0,135},{132,11,889},{140,11,207},{6,10,43},{7,10,38\n},{8,10,248},{9,0,504},{138,10,513},{6,0,1089},{135,11,1910},{4,11,627},{133,11,\n775},{135,0,783},{133,10,766},{133,10,363},{7,0,387},{135,11,387},{7,0,393},{7,\n11,202},{10,0,603},{11,0,206},{11,11,362},{11,11,948},{140,11,388},{6,11,507},{7\n,11,451},{8,11,389},{12,11,490},{13,11,16},{13,11,215},{13,11,351},{18,11,132},{\n147,11,125},{4,0,912},{7,11,841},{137,0,232},{6,10,258},{140,10,409},{5,10,249},\n{148,10,82},{136,11,566},{6,0,977},{135,11,1214},{7,0,1973},{136,0,716},{135,0,\n98},{133,0,733},{5,11,912},{134,11,1695},{5,10,393},{6,10,378},{7,10,1981},{9,10\n,32},{9,10,591},{10,10,685},{10,10,741},{142,10,382},{133,10,788},{7,10,1968},{\n10,0,19},{11,0,911},{141,10,509},{5,0,668},{5,11,236},{6,11,572},{8,11,492},{11,\n11,618},{144,11,56},{135,11,1789},{4,0,360},{5,0,635},{5,0,700},{5,10,58},{5,10,\n171},{5,10,683},{6,10,291},{6,10,566},{7,10,1650},{11,10,523},{12,10,273},{12,10\n,303},{15,10,39},{143,10,111},{133,0,901},{134,10,589},{5,11,190},{136,11,318},{\n140,0,656},{7,0,726},{152,0,9},{4,10,917},{133,10,1005},{135,10,1598},{134,11,\n491},{4,10,919},{133,11,434},{137,0,72},{6,0,1269},{6,0,1566},{134,0,1621},{4,10\n,255},{5,10,302},{6,10,132},{7,10,128},{7,10,283},{7,10,1299},{9,0,463},{10,0,\n595},{10,10,52},{10,10,514},{11,10,925},{13,10,92},{142,10,309},{135,0,1454},{\n134,0,1287},{9,10,173},{11,0,600},{141,0,245},{136,0,989},{7,0,164},{7,0,1571},{\n9,0,107},{140,0,225},{6,0,1061},{141,10,442},{4,0,27},{5,0,484},{5,0,510},{6,0,\n434},{7,0,1000},{7,0,1098},{136,0,2},{7,11,85},{7,11,247},{8,11,585},{10,11,163}\n,{138,11,316},{11,11,103},{142,11,0},{134,0,1127},{4,0,460},{134,0,852},{134,10,\n210},{4,0,932},{133,0,891},{6,0,588},{147,11,83},{4,10,284},{6,10,223},{136,0,\n625},{134,0,76},{8,0,92},{137,0,221},{4,11,124},{10,11,457},{11,11,121},{11,11,\n169},{11,11,422},{11,11,870},{12,11,214},{13,11,389},{14,11,187},{143,11,77},{9,\n11,618},{138,11,482},{4,10,218},{7,10,526},{143,10,137},{4,10,270},{5,10,192},{6\n,10,332},{7,10,1322},{13,0,9},{14,0,104},{142,0,311},{140,10,661},{135,11,1193},\n{6,11,107},{7,11,638},{7,11,1632},{137,11,396},{132,0,763},{4,0,622},{5,11,370},\n{134,11,1756},{133,0,253},{135,0,546},{5,11,204},{9,0,73},{10,0,110},{14,0,185},\n{145,0,119},{7,0,624},{7,0,916},{10,0,256},{139,0,87},{7,10,379},{8,10,481},{137\n,10,377},{5,0,212},{5,11,970},{6,11,1706},{12,0,35},{141,0,382},{5,10,1003},{6,\n10,149},{137,0,746},{8,10,262},{9,10,627},{10,0,150},{11,0,849},{11,10,214},{11,\n10,404},{11,10,457},{11,10,780},{11,10,913},{13,0,330},{13,10,401},{142,10,200},\n{134,0,1466},{135,11,3},{4,11,35},{5,11,121},{5,11,483},{5,11,685},{6,0,1299},{6\n,11,489},{7,11,1204},{136,11,394},{135,10,742},{4,10,142},{136,10,304},{4,11,921\n},{133,11,1007},{134,0,1518},{6,0,1229},{135,0,1175},{133,0,816},{4,10,471},{4,\n11,712},{5,10,51},{6,10,602},{7,10,925},{8,10,484},{10,10,195},{140,0,159},{134,\n11,1629},{5,0,869},{5,0,968},{6,0,1626},{8,0,734},{136,0,784},{4,0,542},{6,0,\n1716},{6,0,1727},{7,0,1082},{7,0,1545},{8,0,56},{8,0,118},{8,0,412},{8,0,564},{8\n,10,688},{9,0,888},{9,0,908},{10,0,50},{10,0,423},{11,0,685},{11,0,697},{11,0,\n933},{12,0,299},{13,0,126},{13,0,136},{13,0,170},{141,0,190},{132,10,697},{4,0,\n232},{9,0,202},{10,0,474},{140,0,433},{136,0,212},{6,0,108},{7,0,1003},{7,0,1181\n},{8,0,111},{136,0,343},{5,10,221},{135,11,1255},{133,11,485},{134,0,1712},{142,\n0,216},{4,11,285},{5,0,643},{5,11,317},{6,0,516},{6,11,301},{7,11,7},{8,11,153},\n{10,11,766},{11,11,468},{12,11,467},{141,11,143},{4,0,133},{7,0,711},{7,0,1298},\n{135,0,1585},{134,0,650},{135,11,512},{6,0,99},{7,0,1808},{145,0,57},{6,0,246},{\n6,0,574},{7,0,428},{9,0,793},{10,0,669},{11,0,485},{11,0,840},{12,0,300},{14,0,\n250},{145,0,55},{4,10,132},{5,10,69},{135,10,1242},{136,0,1023},{4,10,111},{135,\n0,302},{135,0,1871},{132,0,728},{4,10,767},{137,0,252},{6,0,461},{7,0,1590},{7,\n10,1416},{7,10,2005},{8,10,131},{8,10,466},{9,10,672},{13,10,252},{148,10,103},{\n6,0,323},{135,0,1564},{7,0,461},{136,0,775},{6,10,44},{136,10,368},{139,0,172},{\n132,0,464},{4,10,570},{133,10,120},{137,11,269},{6,10,227},{135,10,1589},{6,11,\n1719},{6,11,1735},{7,11,2016},{7,11,2020},{8,11,837},{137,11,852},{7,0,727},{146\n,0,73},{132,0,1023},{135,11,852},{135,10,1529},{136,0,577},{138,11,568},{134,0,\n1037},{8,11,67},{138,11,419},{4,0,413},{5,0,677},{8,0,432},{140,0,280},{6,10,\n1667},{7,10,2036},{7,11,967},{10,0,600},{141,11,11},{6,10,511},{140,10,132},{5,\n10,568},{6,0,799},{6,10,138},{135,10,1293},{4,10,565},{8,0,159},{136,10,827},{7,\n0,646},{7,0,1730},{11,0,446},{141,0,178},{4,10,922},{133,10,1023},{135,11,11},{\n132,0,395},{7,10,1002},{139,0,145},{9,0,174},{10,0,164},{11,0,440},{11,0,514},{\n11,0,841},{15,0,98},{149,0,20},{134,0,426},{10,0,608},{139,0,1002},{7,11,320},{8\n,11,51},{12,11,481},{12,11,570},{148,11,106},{4,11,445},{9,0,977},{137,0,983},{\n138,0,250},{139,0,100},{6,0,1982},{136,10,402},{133,11,239},{4,10,716},{141,10,\n31},{5,0,476},{7,11,83},{7,11,1990},{8,11,130},{139,11,720},{8,10,691},{136,10,\n731},{5,11,123},{6,11,530},{7,11,348},{135,11,1419},{5,0,76},{6,0,458},{6,0,497}\n,{7,0,868},{9,0,658},{10,0,594},{11,0,173},{11,0,566},{12,0,20},{12,0,338},{141,\n0,200},{9,11,139},{10,11,399},{11,11,469},{12,11,634},{141,11,223},{9,10,840},{\n138,10,803},{133,10,847},{11,11,223},{140,11,168},{132,11,210},{8,0,447},{9,10,\n53},{9,10,268},{9,10,901},{10,10,518},{10,10,829},{11,10,188},{13,10,74},{14,10,\n46},{15,10,17},{15,10,33},{17,10,40},{18,10,36},{19,10,20},{22,10,1},{152,10,2},\n{4,0,526},{7,0,1029},{135,0,1054},{19,11,59},{150,11,2},{4,0,636},{6,0,1875},{6,\n0,1920},{8,10,532},{9,0,999},{12,0,807},{12,0,825},{15,0,179},{15,0,190},{146,0,\n182},{6,0,1699},{7,0,660},{7,0,1124},{17,0,31},{19,0,22},{151,0,14},{135,10,681}\n,{132,11,430},{140,10,677},{4,10,684},{136,10,384},{132,11,756},{133,11,213},{7,\n0,188},{7,10,110},{8,10,290},{8,10,591},{9,10,382},{9,10,649},{11,10,71},{11,10,\n155},{11,10,313},{12,10,5},{13,10,325},{142,10,287},{7,10,360},{7,10,425},{9,10,\n66},{9,10,278},{138,10,644},{142,11,164},{4,0,279},{7,0,301},{137,0,362},{134,11\n,586},{135,0,1743},{4,0,178},{133,0,399},{4,10,900},{133,10,861},{5,10,254},{7,\n10,985},{136,10,73},{133,11,108},{7,10,1959},{136,10,683},{133,11,219},{4,11,193\n},{5,11,916},{7,11,364},{10,11,398},{10,11,726},{11,11,317},{11,11,626},{12,11,\n142},{12,11,288},{12,11,678},{13,11,313},{15,11,113},{18,11,114},{21,11,30},{150\n,11,53},{6,11,241},{7,11,907},{8,11,832},{9,11,342},{10,11,729},{11,11,284},{11,\n11,445},{11,11,651},{11,11,863},{13,11,398},{146,11,99},{132,0,872},{134,0,831},\n{134,0,1692},{6,0,202},{6,0,1006},{9,0,832},{9,11,734},{10,0,636},{11,0,208},{12\n,0,360},{17,0,118},{18,0,27},{148,0,67},{132,10,725},{7,11,993},{138,11,666},{\n134,0,1954},{134,10,196},{7,0,872},{10,0,516},{139,0,167},{133,10,831},{4,11,562\n},{9,11,254},{139,11,879},{137,0,313},{4,0,224},{132,11,786},{8,10,723},{11,0,24\n},{140,0,170},{5,0,546},{7,0,35},{8,0,11},{8,0,12},{9,0,315},{9,0,533},{10,0,802\n},{11,0,166},{12,0,525},{142,0,243},{7,0,1937},{13,10,80},{13,10,437},{145,10,74\n},{5,0,241},{8,0,242},{9,0,451},{10,0,667},{11,0,598},{140,0,429},{150,0,46},{6,\n0,1273},{137,0,830},{5,10,848},{6,10,66},{136,10,764},{6,0,825},{134,0,993},{4,0\n,1006},{4,10,36},{7,10,1387},{10,0,327},{11,10,755},{141,0,271},{134,0,1023},{\n135,0,1580},{4,0,366},{137,0,516},{132,10,887},{6,0,1736},{135,0,1891},{6,11,216\n},{7,11,901},{7,11,1343},{136,11,493},{6,10,165},{138,10,388},{7,11,341},{139,11\n,219},{4,10,719},{135,10,155},{134,0,1935},{132,0,826},{6,0,331},{6,0,1605},{8,0\n,623},{11,0,139},{139,0,171},{135,11,1734},{10,11,115},{11,11,420},{12,11,154},{\n13,11,404},{14,11,346},{15,11,54},{143,11,112},{4,10,353},{6,10,146},{6,10,1789}\n,{7,0,288},{7,10,990},{7,10,1348},{9,10,665},{9,10,898},{11,10,893},{142,10,212}\n,{6,0,916},{134,0,1592},{4,10,45},{7,0,1888},{135,10,1257},{5,11,1011},{136,11,\n701},{139,11,596},{4,11,54},{5,11,666},{7,11,1039},{7,11,1130},{9,11,195},{138,\n11,302},{134,0,1471},{134,0,1570},{132,0,394},{140,10,65},{136,10,816},{135,0,\n1931},{7,0,574},{135,0,1719},{134,11,467},{132,0,658},{6,11,1669},{9,0,781},{10,\n0,144},{11,0,385},{13,0,161},{13,0,228},{13,0,268},{148,0,107},{136,0,374},{135,\n0,735},{4,0,344},{6,0,498},{139,0,323},{6,10,559},{6,10,1691},{7,0,586},{135,0,\n1063},{137,0,155},{133,0,906},{7,11,122},{9,11,259},{10,11,84},{11,11,470},{12,\n11,541},{141,11,379},{134,0,1139},{10,0,108},{139,0,116},{134,10,456},{133,10,\n925},{5,11,82},{5,11,131},{7,11,1755},{8,11,31},{9,11,168},{9,11,764},{139,11,\n869},{134,11,605},{5,11,278},{137,11,68},{4,11,163},{5,11,201},{5,11,307},{5,11,\n310},{6,11,335},{7,11,284},{136,11,165},{135,11,1660},{6,11,33},{135,11,1244},{4\n,0,616},{136,11,483},{4,11,199},{8,0,857},{8,0,902},{8,0,910},{10,0,879},{11,11,\n34},{140,0,726},{136,0,692},{6,10,193},{7,10,240},{7,10,1682},{10,10,51},{10,10,\n640},{11,10,410},{13,10,82},{14,10,247},{14,10,331},{142,10,377},{6,0,823},{134,\n0,983},{139,10,411},{132,0,305},{136,10,633},{138,11,203},{134,0,681},{6,11,326}\n,{7,11,677},{137,11,425},{5,0,214},{7,0,603},{8,0,611},{9,0,686},{10,0,88},{11,0\n,459},{11,0,496},{12,0,463},{12,0,590},{141,0,0},{136,0,1004},{142,0,23},{134,0,\n1703},{147,11,8},{145,11,56},{135,0,1443},{4,10,237},{135,10,514},{6,0,714},{145\n,0,19},{5,11,358},{7,11,473},{7,11,1184},{10,11,662},{13,11,212},{13,11,304},{13\n,11,333},{145,11,98},{4,0,737},{10,0,98},{11,0,294},{12,0,60},{12,0,437},{13,0,\n64},{13,0,380},{142,0,430},{6,10,392},{7,10,65},{135,10,2019},{6,0,1758},{8,0,\n520},{9,0,345},{9,0,403},{142,0,350},{5,0,47},{10,0,242},{138,0,579},{5,0,139},{\n7,0,1168},{138,0,539},{134,0,1459},{13,0,388},{141,11,388},{134,0,253},{7,10,\n1260},{135,10,1790},{9,10,222},{10,0,252},{139,10,900},{140,0,745},{133,11,946},\n{4,0,107},{7,0,613},{8,0,439},{8,0,504},{9,0,501},{10,0,383},{139,0,477},{135,11\n,1485},{132,0,871},{7,11,411},{7,11,590},{8,11,631},{9,11,323},{10,11,355},{11,\n11,491},{12,11,143},{12,11,402},{13,11,73},{14,11,408},{15,11,107},{146,11,71},{\n132,0,229},{132,0,903},{140,0,71},{133,0,549},{4,0,47},{6,0,373},{7,0,452},{7,0,\n543},{7,0,1828},{7,0,1856},{9,0,6},{11,0,257},{139,0,391},{7,11,1467},{8,11,328}\n,{10,11,544},{11,11,955},{13,11,320},{145,11,83},{5,0,980},{134,0,1754},{136,0,\n865},{5,0,705},{137,0,606},{7,0,161},{8,10,201},{136,10,605},{143,11,35},{5,11,\n835},{6,11,483},{140,10,224},{7,0,536},{7,0,1331},{136,0,143},{134,0,1388},{5,0,\n724},{10,0,305},{11,0,151},{12,0,33},{12,0,121},{12,0,381},{17,0,3},{17,0,27},{\n17,0,78},{18,0,18},{19,0,54},{149,0,5},{4,10,523},{133,10,638},{5,0,19},{134,0,\n533},{5,0,395},{5,0,951},{134,0,1776},{135,0,1908},{132,0,846},{6,10,242},{7,10,\n227},{7,10,1581},{8,10,104},{9,10,113},{9,10,220},{9,10,427},{10,0,74},{10,10,\n239},{11,0,663},{11,10,579},{11,10,1023},{12,0,210},{13,0,166},{13,0,310},{13,10\n,4},{13,10,204},{13,10,316},{14,0,373},{18,0,95},{19,0,43},{148,10,86},{9,11,716\n},{11,11,108},{13,11,123},{14,11,252},{19,11,38},{21,11,3},{151,11,11},{8,0,372}\n,{9,0,122},{138,0,175},{132,11,677},{7,11,1374},{136,11,540},{135,10,861},{132,0\n,695},{7,0,497},{9,0,387},{147,0,81},{136,0,937},{134,0,718},{7,0,1328},{136,10,\n494},{132,11,331},{5,11,747},{134,0,1581},{5,0,284},{6,0,49},{6,0,350},{7,0,1},{\n7,0,377},{7,0,1693},{8,0,18},{8,0,678},{9,0,161},{9,0,585},{9,0,671},{9,0,839},{\n11,0,912},{141,0,427},{7,10,1306},{8,10,505},{9,10,482},{10,10,126},{11,10,225},\n{12,10,347},{12,10,449},{13,10,19},{14,10,218},{142,10,435},{10,10,764},{12,10,\n120},{13,10,39},{145,10,127},{4,0,597},{133,10,268},{134,0,1094},{4,0,1008},{134\n,0,1973},{132,0,811},{139,0,908},{135,0,1471},{133,11,326},{4,10,384},{135,10,\n1022},{4,11,691},{7,0,1935},{7,11,1935},{8,0,324},{8,11,324},{9,11,35},{10,11,\n680},{11,11,364},{12,0,42},{12,11,42},{13,11,357},{146,11,16},{135,0,2014},{6,11\n,32},{7,0,2007},{7,11,385},{7,11,757},{7,11,1916},{8,11,37},{8,11,94},{8,11,711}\n,{9,0,101},{9,0,450},{9,11,541},{10,0,66},{10,0,842},{10,11,162},{10,11,795},{11\n,0,536},{11,11,989},{11,11,1010},{12,0,587},{12,11,14},{142,11,308},{139,0,586},\n{135,10,1703},{7,0,1077},{9,10,159},{11,0,28},{140,10,603},{6,0,1221},{136,10,\n583},{6,11,152},{6,11,349},{6,11,1682},{7,11,1252},{8,11,112},{9,11,435},{9,11,\n668},{10,11,290},{10,11,319},{10,11,815},{11,11,180},{11,11,837},{12,11,240},{13\n,11,152},{13,11,219},{142,11,158},{139,0,62},{132,10,515},{8,10,632},{8,10,697},\n{137,10,854},{134,0,1766},{132,11,581},{6,11,126},{7,11,573},{8,11,397},{142,11,\n44},{150,0,28},{4,10,136},{5,10,551},{11,0,670},{150,0,25},{6,0,1665},{7,0,256},\n{7,0,1388},{138,0,499},{4,0,22},{5,0,10},{7,0,1576},{136,0,97},{134,10,1782},{5,\n0,481},{7,10,1287},{9,10,44},{10,10,552},{10,10,642},{11,10,839},{12,10,274},{12\n,10,275},{12,10,372},{13,10,91},{142,10,125},{133,11,926},{7,11,1232},{137,11,\n531},{6,0,134},{7,0,437},{7,0,1824},{9,0,37},{14,0,285},{142,0,371},{7,0,486},{8\n,0,155},{11,0,93},{140,0,164},{6,0,1391},{134,0,1442},{133,11,670},{133,0,591},{\n6,10,147},{7,10,886},{7,11,1957},{9,10,753},{138,10,268},{5,0,380},{5,0,650},{7,\n0,1173},{136,0,310},{4,0,364},{7,0,1156},{7,0,1187},{137,0,409},{135,11,1621},{\n134,0,482},{133,11,506},{4,0,781},{6,0,487},{7,0,926},{8,0,263},{139,0,500},{138\n,10,137},{135,11,242},{139,11,96},{133,10,414},{135,10,1762},{134,0,804},{5,11,\n834},{7,11,1202},{8,11,14},{9,11,481},{137,11,880},{134,10,599},{4,0,94},{135,0,\n1265},{4,0,415},{132,0,417},{5,0,348},{6,0,522},{6,10,1749},{7,11,1526},{138,11,\n465},{134,10,1627},{132,0,1012},{132,10,488},{4,11,357},{6,11,172},{7,11,143},{\n137,11,413},{4,10,83},{4,11,590},{146,11,76},{140,10,676},{7,11,287},{8,11,355},\n{9,11,293},{137,11,743},{134,10,278},{5,11,169},{6,0,1803},{7,11,333},{8,11,45},\n{18,0,165},{152,0,21},{12,10,97},{140,11,97},{4,0,408},{4,0,741},{135,0,500},{\n132,11,198},{7,10,388},{7,10,644},{139,10,781},{4,11,24},{5,11,140},{5,11,185},{\n7,11,1500},{11,11,565},{139,11,838},{6,0,1321},{7,10,229},{8,10,59},{9,0,257},{9\n,10,190},{10,10,378},{140,10,191},{4,11,334},{133,11,593},{135,11,1885},{134,0,\n1138},{4,0,249},{6,0,73},{135,0,177},{133,0,576},{142,0,231},{137,0,288},{132,10\n,660},{7,10,1035},{138,10,737},{135,0,1487},{6,0,989},{7,10,690},{9,0,433},{9,10\n,587},{140,10,521},{7,0,1264},{7,0,1678},{11,0,945},{12,0,341},{12,0,471},{140,0\n,569},{132,11,709},{133,11,897},{5,11,224},{13,11,174},{146,11,52},{135,11,1840}\n,{134,10,1744},{4,10,733},{9,10,194},{10,10,92},{11,10,198},{12,0,87},{12,10,84}\n,{13,10,128},{144,0,74},{140,0,779},{135,0,538},{4,11,608},{133,11,497},{133,0,\n413},{7,11,1375},{7,11,1466},{138,11,331},{136,0,495},{6,11,540},{136,11,136},{7\n,0,54},{8,0,312},{10,0,191},{10,0,614},{140,0,567},{5,11,999},{6,0,468},{7,0,567\n},{7,0,1478},{8,0,530},{142,0,290},{4,11,299},{7,10,306},{135,11,1004},{142,11,\n296},{134,0,1484},{133,10,979},{6,0,609},{9,0,815},{12,11,137},{14,11,9},{14,11,\n24},{142,11,64},{133,11,456},{6,0,484},{135,0,822},{133,10,178},{136,11,180},{\n132,11,755},{137,0,900},{135,0,1335},{6,0,1724},{135,0,2022},{135,11,1139},{4,10\n,390},{133,0,640},{6,0,1831},{138,11,633},{135,11,566},{4,11,890},{5,11,805},{5,\n11,819},{5,11,961},{6,11,396},{6,11,1631},{6,11,1678},{7,11,1967},{7,11,2041},{9\n,11,630},{11,11,8},{11,11,1019},{12,11,176},{13,11,225},{14,11,292},{149,11,24},\n{132,0,474},{134,0,1103},{135,0,1504},{134,0,1576},{6,0,961},{6,0,1034},{140,0,\n655},{11,11,514},{149,11,20},{5,0,305},{135,11,1815},{7,11,1505},{10,11,190},{10\n,11,634},{11,11,792},{12,11,358},{140,11,447},{5,11,0},{6,11,536},{7,11,604},{13\n,11,445},{145,11,126},{5,10,105},{135,0,1236},{4,0,480},{6,0,217},{6,0,302},{6,0\n,1642},{6,11,232},{6,11,412},{7,0,130},{7,0,837},{7,0,1321},{7,0,1547},{7,0,1657\n},{7,11,1074},{8,0,429},{8,11,9},{8,11,157},{8,11,786},{9,0,228},{9,11,196},{9,\n11,352},{9,11,457},{10,11,337},{11,11,232},{11,11,877},{12,11,480},{12,11,546},{\n13,0,289},{13,0,343},{147,0,101},{5,10,438},{7,11,958},{9,10,694},{12,10,627},{\n13,10,210},{141,11,38},{4,11,382},{136,11,579},{7,0,278},{10,0,739},{11,0,708},{\n141,0,348},{4,11,212},{135,11,1206},{135,11,1898},{6,0,708},{6,0,1344},{152,10,\n11},{137,11,768},{134,0,1840},{140,0,233},{8,10,25},{138,10,826},{5,11,655},{134\n,0,2017},{6,0,1488},{139,11,290},{132,10,308},{134,0,1590},{134,0,1800},{134,0,\n1259},{6,11,231},{7,11,95},{8,11,423},{144,0,28},{133,11,300},{135,10,150},{136,\n10,649},{7,11,1874},{137,11,641},{6,11,237},{7,11,611},{8,11,100},{9,11,416},{11\n,11,335},{12,11,173},{146,11,101},{137,0,45},{134,10,521},{14,11,26},{17,0,36},{\n146,11,150},{5,10,339},{7,0,1442},{14,0,22},{15,10,41},{15,10,166},{147,10,66},{\n6,11,581},{7,11,1119},{136,0,378},{134,0,1507},{147,11,117},{139,0,39},{134,0,\n1054},{6,0,363},{7,0,1955},{136,0,725},{134,0,2036},{133,11,199},{6,0,1871},{9,0\n,935},{9,0,961},{9,0,1004},{9,0,1016},{12,0,805},{12,0,852},{12,0,853},{12,0,869\n},{12,0,882},{12,0,896},{12,0,906},{12,0,917},{12,0,940},{15,0,170},{15,0,176},{\n15,0,188},{15,0,201},{15,0,205},{15,0,212},{15,0,234},{15,0,244},{18,0,181},{18,\n0,193},{18,0,196},{18,0,201},{18,0,202},{18,0,210},{18,0,217},{18,0,235},{18,0,\n236},{18,0,237},{21,0,54},{21,0,55},{21,0,58},{21,0,59},{152,0,22},{134,10,1628}\n,{137,0,805},{5,0,813},{135,0,2046},{142,11,42},{5,0,712},{6,0,1240},{11,0,17},{\n13,0,321},{144,0,67},{132,0,617},{135,10,829},{6,0,320},{7,0,781},{7,0,1921},{9,\n0,55},{10,0,186},{10,0,273},{10,0,664},{10,0,801},{11,0,996},{11,0,997},{13,0,\n157},{142,0,170},{136,0,271},{5,10,486},{135,10,1349},{18,11,91},{147,11,70},{7,\n10,1635},{8,10,17},{10,0,445},{138,10,295},{136,11,404},{7,0,103},{7,0,863},{11,\n0,184},{145,0,62},{138,10,558},{137,0,659},{6,11,312},{6,11,1715},{10,11,584},{\n11,11,546},{11,11,692},{12,11,259},{12,11,295},{13,11,46},{141,11,154},{134,0,\n676},{132,11,588},{4,11,231},{5,11,61},{6,11,104},{7,11,729},{7,11,964},{7,11,\n1658},{140,11,414},{6,11,263},{138,11,757},{11,0,337},{142,0,303},{135,11,1363},\n{132,11,320},{140,0,506},{134,10,447},{5,0,77},{7,0,1455},{10,0,843},{147,0,73},\n{7,10,577},{7,10,1432},{9,10,475},{9,10,505},{9,10,526},{9,10,609},{9,10,689},{9\n,10,726},{9,10,735},{9,10,738},{10,10,556},{10,10,674},{10,10,684},{11,10,89},{\n11,10,202},{11,10,272},{11,10,380},{11,10,415},{11,10,505},{11,10,537},{11,10,\n550},{11,10,562},{11,10,640},{11,10,667},{11,10,688},{11,10,847},{11,10,927},{11\n,10,930},{11,10,940},{12,10,144},{12,10,325},{12,10,329},{12,10,389},{12,10,403}\n,{12,10,451},{12,10,515},{12,10,604},{12,10,616},{12,10,626},{13,10,66},{13,10,\n131},{13,10,167},{13,10,236},{13,10,368},{13,10,411},{13,10,434},{13,10,453},{13\n,10,461},{13,10,474},{14,10,59},{14,10,60},{14,10,139},{14,10,152},{14,10,276},{\n14,10,353},{14,10,402},{15,10,28},{15,10,81},{15,10,123},{15,10,152},{18,10,136}\n,{148,10,88},{132,0,458},{135,0,1420},{4,10,609},{4,11,405},{6,0,109},{7,10,756}\n,{7,11,817},{9,10,544},{10,0,382},{11,10,413},{14,10,307},{14,11,58},{16,10,25},\n{17,11,37},{146,11,124},{5,11,974},{6,0,330},{7,0,1084},{139,0,142},{4,10,930},{\n133,10,947},{5,10,939},{142,11,394},{16,0,91},{145,0,87},{5,10,962},{5,11,235},{\n7,11,1239},{11,11,131},{140,11,370},{5,10,651},{8,10,170},{9,10,61},{9,10,63},{\n10,10,23},{10,10,37},{10,10,834},{11,0,492},{11,10,4},{11,10,281},{11,10,503},{\n11,10,677},{12,10,96},{12,10,130},{12,10,244},{14,10,5},{14,10,40},{14,10,162},{\n14,10,202},{146,10,133},{4,10,406},{5,10,579},{12,10,492},{150,10,15},{9,11,137}\n,{138,11,221},{134,0,1239},{11,0,211},{140,0,145},{7,11,390},{138,11,140},{135,\n11,1418},{135,11,1144},{134,0,1049},{6,10,17},{7,0,321},{7,10,1001},{7,10,1982},\n{9,10,886},{10,10,489},{10,10,800},{11,10,782},{12,10,320},{13,10,467},{14,10,\n145},{14,10,387},{143,10,119},{145,10,17},{5,11,407},{11,11,489},{19,11,37},{20,\n11,73},{150,11,38},{133,10,458},{135,0,1985},{7,10,1983},{8,10,0},{8,10,171},{9,\n10,120},{9,10,732},{10,10,473},{11,10,656},{11,10,998},{18,10,0},{18,10,2},{147,\n10,21},{5,11,325},{7,11,1483},{8,11,5},{8,11,227},{9,11,105},{10,11,585},{140,11\n,614},{136,0,122},{132,0,234},{135,11,1196},{6,0,976},{6,0,1098},{134,0,1441},{7\n,0,253},{136,0,549},{6,11,621},{13,11,504},{144,11,19},{132,10,519},{5,0,430},{5\n,0,932},{6,0,131},{7,0,417},{9,0,522},{11,0,314},{141,0,390},{14,0,149},{14,0,\n399},{143,0,57},{5,10,907},{6,10,31},{6,11,218},{7,10,491},{7,10,530},{8,10,592}\n,{11,10,53},{11,10,779},{12,10,167},{12,10,411},{14,10,14},{14,10,136},{15,10,72\n},{16,10,17},{144,10,72},{140,11,330},{7,11,454},{7,11,782},{136,11,768},{132,0,\n507},{10,11,676},{140,11,462},{4,10,208},{5,10,106},{6,0,630},{6,10,531},{8,10,\n408},{9,0,811},{9,10,188},{138,10,572},{4,0,343},{5,0,511},{134,10,1693},{134,11\n,164},{132,0,448},{7,0,455},{138,0,591},{135,0,1381},{12,10,441},{150,11,50},{9,\n10,449},{10,10,192},{138,10,740},{4,10,241},{134,0,575},{134,0,1175},{134,0,653}\n,{134,0,1761},{134,0,1198},{132,10,259},{6,11,343},{7,11,195},{9,11,226},{10,11,\n197},{10,11,575},{11,11,502},{139,11,899},{7,0,1127},{7,0,1572},{10,0,297},{10,0\n,422},{11,0,764},{11,0,810},{12,0,264},{13,0,102},{13,0,300},{13,0,484},{14,0,\n147},{14,0,229},{17,0,71},{18,0,118},{147,0,120},{135,11,666},{132,0,678},{4,10,\n173},{5,10,312},{5,10,512},{135,10,1285},{7,10,1603},{7,10,1691},{9,10,464},{11,\n10,195},{12,10,279},{12,10,448},{14,10,11},{147,10,102},{16,0,99},{146,0,164},{7\n,11,1125},{9,11,143},{11,11,61},{14,11,405},{150,11,21},{137,11,260},{4,10,452},\n{5,10,583},{5,10,817},{6,10,433},{7,10,593},{7,10,720},{7,10,1378},{8,10,161},{9\n,10,284},{10,10,313},{139,10,886},{132,10,547},{136,10,722},{14,0,35},{142,0,191\n},{141,0,45},{138,0,121},{132,0,125},{134,0,1622},{133,11,959},{8,10,420},{139,\n10,193},{132,0,721},{135,10,409},{136,0,145},{7,0,792},{8,0,147},{8,11,173},{10,\n0,821},{11,0,970},{139,0,1021},{134,11,266},{132,0,715},{7,0,1999},{138,10,308},\n{133,0,531},{5,0,168},{5,0,930},{8,0,74},{9,0,623},{12,0,500},{140,0,579},{144,0\n,65},{138,11,246},{6,0,220},{7,0,1101},{13,0,105},{142,11,314},{5,10,1002},{136,\n10,745},{134,0,960},{20,0,0},{148,11,0},{4,0,1005},{4,10,239},{6,10,477},{7,10,\n1607},{11,10,68},{139,10,617},{6,0,19},{7,0,1413},{139,0,428},{149,10,13},{7,0,\n96},{8,0,401},{8,0,703},{8,11,300},{137,0,896},{134,0,1595},{145,0,116},{136,0,\n1021},{7,0,1961},{7,0,1965},{7,0,2030},{8,0,150},{8,0,702},{8,0,737},{8,0,750},{\n140,0,366},{11,11,75},{142,11,267},{132,10,367},{5,11,427},{5,11,734},{7,11,478}\n,{8,0,800},{8,11,52},{9,0,148},{9,0,872},{9,0,890},{11,0,309},{11,0,1001},{13,0,\n267},{141,0,323},{7,11,239},{11,11,217},{142,11,165},{132,11,323},{140,11,419},{\n13,0,299},{142,0,75},{6,11,87},{6,11,1734},{7,11,20},{7,11,1056},{8,11,732},{9,\n11,406},{9,11,911},{138,11,694},{134,0,1383},{132,10,694},{133,11,613},{137,0,\n779},{4,0,598},{140,10,687},{6,0,970},{135,0,424},{133,0,547},{7,11,32},{7,11,\n984},{8,11,85},{8,11,709},{9,11,579},{9,11,847},{9,11,856},{10,11,799},{11,11,\n258},{11,11,1007},{12,11,331},{12,11,615},{13,11,188},{13,11,435},{14,11,8},{15,\n11,165},{16,11,27},{148,11,40},{6,0,1222},{134,0,1385},{132,0,876},{138,11,151},\n{135,10,213},{4,11,167},{135,11,82},{133,0,133},{6,11,24},{7,11,74},{7,11,678},{\n137,11,258},{5,11,62},{6,11,534},{7,11,684},{7,11,1043},{7,11,1072},{8,11,280},{\n8,11,541},{8,11,686},{10,11,519},{11,11,252},{140,11,282},{136,0,187},{8,0,8},{\n10,0,0},{10,0,818},{139,0,988},{132,11,359},{7,10,1672},{11,0,429},{143,0,51},{\n136,0,685},{5,11,211},{7,11,88},{136,11,627},{134,0,472},{136,0,132},{6,11,145},\n{141,11,336},{4,10,751},{11,10,390},{140,10,32},{4,10,409},{4,11,263},{5,10,78},\n{6,0,938},{134,0,1060},{137,0,874},{4,11,916},{6,10,473},{7,10,1602},{8,0,774},{\n10,0,670},{10,10,698},{12,0,51},{12,10,212},{13,10,307},{145,10,105},{146,0,92},\n{143,10,156},{132,0,830},{137,0,701},{4,11,599},{6,11,1634},{7,11,5},{7,11,55},{\n7,11,67},{7,11,97},{7,11,691},{7,11,979},{7,11,1697},{8,11,207},{8,11,214},{8,11\n,231},{8,11,294},{8,11,336},{8,11,428},{8,11,451},{8,11,460},{8,11,471},{8,11,\n622},{8,11,626},{8,11,679},{8,11,759},{8,11,829},{9,11,11},{9,11,246},{9,11,484}\n,{9,11,573},{9,11,706},{9,11,762},{9,11,798},{9,11,855},{9,11,870},{9,11,912},{\n10,11,303},{10,11,335},{10,11,424},{10,11,461},{10,11,543},{10,11,759},{10,11,\n814},{11,11,59},{11,11,199},{11,11,235},{11,11,475},{11,11,590},{11,11,929},{11,\n11,963},{12,11,114},{12,11,182},{12,11,226},{12,11,332},{12,11,439},{12,11,575},\n{12,11,598},{13,11,8},{13,11,125},{13,11,194},{13,11,287},{14,11,197},{14,11,383\n},{15,11,53},{17,11,63},{19,11,46},{19,11,98},{19,11,106},{148,11,85},{4,0,127},\n{5,0,350},{6,0,356},{8,0,426},{9,0,572},{10,0,247},{139,0,312},{134,0,1215},{6,0\n,59},{7,11,1853},{9,0,603},{10,11,437},{141,0,397},{134,0,1762},{147,11,126},{\n135,10,883},{13,0,293},{142,0,56},{133,10,617},{139,10,50},{5,11,187},{7,10,1518\n},{139,10,694},{135,0,441},{6,0,111},{7,0,4},{8,0,163},{8,0,776},{138,0,566},{\n132,0,806},{4,11,215},{9,11,38},{10,11,3},{11,11,23},{11,11,127},{139,11,796},{4\n,10,546},{7,10,2042},{142,0,233},{135,0,1994},{134,0,1739},{135,11,1530},{136,0,\n393},{5,0,297},{7,0,1038},{14,0,359},{19,0,52},{148,0,47},{135,0,309},{4,10,313}\n,{133,10,577},{8,10,184},{141,10,433},{135,10,935},{12,10,186},{12,10,292},{14,\n10,100},{146,10,70},{136,0,363},{11,10,402},{12,10,109},{12,10,431},{13,10,179},\n{13,10,206},{14,0,175},{14,10,217},{16,10,3},{148,10,53},{5,10,886},{6,10,46},{6\n,10,1790},{7,10,14},{7,10,732},{7,10,1654},{8,10,95},{8,10,327},{8,10,616},{9,10\n,892},{10,10,598},{10,10,769},{11,10,134},{11,10,747},{12,10,378},{142,10,97},{\n136,0,666},{135,0,1675},{6,0,655},{134,0,1600},{135,0,808},{133,10,1021},{4,11,\n28},{5,11,440},{7,11,248},{11,11,833},{140,11,344},{134,11,1654},{132,0,280},{\n140,0,54},{4,0,421},{133,0,548},{132,10,153},{6,11,339},{135,11,923},{133,11,853\n},{133,10,798},{132,10,587},{6,11,249},{7,11,1234},{139,11,573},{6,10,598},{7,10\n,42},{8,10,695},{10,10,212},{11,10,158},{14,10,196},{145,10,85},{5,10,957},{5,10\n,1008},{135,0,249},{4,10,129},{135,10,465},{6,0,254},{7,0,842},{7,0,1659},{7,10,\n908},{7,10,1201},{9,0,109},{9,10,755},{10,0,103},{11,10,906},{12,10,527},{146,10\n,7},{5,0,262},{136,10,450},{144,0,1},{10,11,201},{142,11,319},{7,11,49},{7,11,\n392},{8,11,20},{8,11,172},{8,11,690},{9,11,383},{9,11,845},{10,11,48},{11,11,293\n},{11,11,832},{11,11,920},{141,11,221},{5,11,858},{133,11,992},{134,0,805},{139,\n10,1003},{6,0,1630},{134,11,307},{7,11,1512},{135,11,1794},{6,11,268},{137,11,62\n},{135,10,1868},{133,0,671},{4,0,989},{8,0,972},{136,0,998},{132,11,423},{132,0,\n889},{135,0,1382},{135,0,1910},{7,10,965},{7,10,1460},{135,10,1604},{4,0,627},{5\n,0,775},{138,11,106},{134,11,348},{7,0,202},{11,0,362},{11,0,948},{140,0,388},{\n138,11,771},{6,11,613},{136,11,223},{6,0,560},{7,0,451},{8,0,389},{12,0,490},{13\n,0,16},{13,0,215},{13,0,351},{18,0,132},{147,0,125},{135,0,841},{136,0,566},{136\n,0,938},{132,11,670},{5,0,912},{6,0,1695},{140,11,55},{9,11,40},{139,11,136},{7,\n0,1361},{7,10,982},{10,10,32},{143,10,56},{11,11,259},{140,11,270},{5,0,236},{6,\n0,572},{8,0,492},{11,0,618},{144,0,56},{8,11,572},{9,11,310},{9,11,682},{137,11,\n698},{134,0,1854},{5,0,190},{136,0,318},{133,10,435},{135,0,1376},{4,11,296},{6,\n11,352},{7,11,401},{7,11,1410},{7,11,1594},{7,11,1674},{8,11,63},{8,11,660},{137\n,11,74},{5,10,85},{6,10,419},{7,0,349},{7,10,305},{7,10,361},{7,10,1337},{8,10,\n71},{140,10,519},{4,11,139},{4,11,388},{140,11,188},{6,0,1972},{6,0,2013},{8,0,\n951},{10,0,947},{10,0,974},{10,0,1018},{142,0,476},{140,10,688},{135,10,740},{5,\n10,691},{7,10,345},{9,10,94},{140,10,169},{5,10,183},{6,10,582},{9,0,344},{10,10\n,679},{140,10,435},{135,10,511},{132,0,850},{8,11,441},{10,11,314},{143,11,3},{7\n,10,1993},{136,10,684},{4,11,747},{6,10,583},{6,11,290},{7,11,649},{7,11,1479},{\n135,11,1583},{133,11,232},{133,10,704},{134,0,910},{4,10,179},{5,10,198},{133,10\n,697},{7,10,347},{7,10,971},{8,10,181},{138,10,711},{136,11,525},{14,0,19},{14,0\n,28},{144,0,29},{7,0,85},{7,0,247},{8,0,585},{138,0,163},{4,0,487},{7,11,472},{7\n,11,1801},{10,11,748},{141,11,458},{4,10,243},{5,10,203},{7,10,19},{7,10,71},{7,\n10,113},{10,10,405},{11,10,357},{142,10,240},{7,10,1450},{139,10,99},{132,11,425\n},{138,0,145},{147,0,83},{6,10,492},{137,11,247},{4,0,1013},{134,0,2033},{5,10,\n134},{6,10,408},{6,10,495},{135,10,1593},{135,0,1922},{134,11,1768},{4,0,124},{\n10,0,457},{11,0,121},{11,0,169},{11,0,870},{11,0,874},{12,0,214},{14,0,187},{143\n,0,77},{5,0,557},{135,0,1457},{139,0,66},{5,11,943},{6,11,1779},{142,10,4},{4,10\n,248},{4,10,665},{7,10,137},{137,10,349},{5,11,245},{6,11,576},{7,0,1193},{7,11,\n582},{136,11,225},{144,0,82},{7,10,1270},{139,10,612},{5,0,454},{10,0,352},{138,\n11,352},{5,10,371},{7,10,563},{146,0,57},{135,0,1333},{6,0,107},{6,11,610},{7,0,\n638},{7,0,1632},{137,0,396},{5,0,370},{134,0,1756},{4,10,374},{7,10,547},{7,10,\n1700},{7,10,1833},{139,10,858},{133,0,204},{6,0,1305},{9,10,311},{141,10,42},{5,\n0,970},{134,0,1706},{6,10,1647},{7,10,1552},{7,10,2010},{9,10,494},{137,10,509},\n{13,11,455},{15,11,99},{15,11,129},{144,11,68},{135,0,3},{4,0,35},{5,0,121},{5,0\n,483},{5,0,685},{6,0,489},{6,0,782},{6,0,1032},{7,0,1204},{136,0,394},{4,0,921},\n{133,0,1007},{8,11,360},{138,11,63},{135,0,1696},{134,0,1519},{132,11,443},{135,\n11,944},{6,10,123},{7,10,214},{9,10,728},{10,10,157},{11,10,346},{11,10,662},{\n143,10,106},{137,0,981},{135,10,1435},{134,0,1072},{132,0,712},{134,0,1629},{134\n,0,728},{4,11,298},{137,11,483},{5,11,164},{6,0,1177},{6,0,1271},{7,11,121},{142\n,11,189},{4,10,707},{5,10,588},{6,10,393},{7,0,1608},{13,10,106},{18,10,49},{147\n,10,41},{23,0,16},{151,11,16},{6,10,211},{7,10,1690},{11,10,486},{140,10,369},{\n133,0,485},{19,11,15},{149,11,27},{4,11,172},{9,11,611},{10,11,436},{12,11,673},\n{141,11,255},{5,11,844},{10,11,484},{11,11,754},{12,11,457},{14,11,171},{14,11,\n389},{146,11,153},{4,0,285},{5,0,27},{5,0,317},{6,0,301},{7,0,7},{8,0,153},{10,0\n,766},{11,0,468},{12,0,467},{141,0,143},{134,0,1462},{9,11,263},{10,11,147},{138\n,11,492},{133,11,537},{6,0,1945},{6,0,1986},{6,0,1991},{134,0,2038},{134,10,219}\n,{137,11,842},{5,10,582},{6,10,1646},{7,10,99},{7,10,1962},{7,10,1986},{8,10,515\n},{8,10,773},{9,10,23},{9,10,491},{12,10,620},{14,0,52},{14,10,93},{145,0,50},{\n138,11,97},{5,10,851},{20,0,21},{148,0,44},{136,0,819},{139,0,917},{5,11,230},{5\n,11,392},{6,11,420},{8,10,762},{8,10,812},{9,10,910},{9,11,568},{140,11,612},{\n135,0,784},{15,0,135},{143,11,135},{10,0,454},{140,0,324},{4,11,0},{5,11,41},{7,\n11,1459},{7,11,1469},{7,11,1618},{7,11,1859},{9,11,549},{139,11,905},{4,10,98},{\n7,10,1365},{9,10,422},{9,10,670},{10,10,775},{11,10,210},{13,10,26},{13,10,457},\n{141,10,476},{6,0,1719},{6,0,1735},{7,0,2016},{7,0,2020},{8,0,837},{137,0,852},{\n133,11,696},{135,0,852},{132,0,952},{134,10,1730},{132,11,771},{138,0,568},{137,\n0,448},{139,0,146},{8,0,67},{138,0,419},{133,11,921},{137,10,147},{134,0,1826},{\n10,0,657},{14,0,297},{142,0,361},{6,0,666},{6,0,767},{134,0,1542},{139,0,729},{6\n,11,180},{7,11,1137},{8,11,751},{139,11,805},{4,11,183},{7,11,271},{11,11,824},{\n11,11,952},{13,11,278},{13,11,339},{13,11,482},{14,11,424},{148,11,99},{4,0,669}\n,{5,11,477},{5,11,596},{6,11,505},{7,11,1221},{11,11,907},{12,11,209},{141,11,\n214},{135,11,1215},{5,0,402},{6,10,30},{11,10,56},{139,10,305},{7,11,564},{142,\n11,168},{139,0,152},{7,0,912},{135,10,1614},{4,10,150},{5,10,303},{134,10,327},{\n7,0,320},{8,0,51},{9,0,868},{10,0,833},{12,0,481},{12,0,570},{148,0,106},{132,0,\n445},{7,11,274},{11,11,263},{11,11,479},{11,11,507},{140,11,277},{6,11,1645},{8,\n10,192},{10,0,555},{10,10,78},{11,0,308},{13,10,359},{147,0,95},{135,10,786},{6,\n11,92},{6,11,188},{7,11,1269},{7,11,1524},{7,11,1876},{10,11,228},{139,11,1020},\n{4,11,459},{133,11,966},{6,10,1638},{7,10,79},{7,10,496},{9,10,138},{10,10,336},\n{11,0,386},{12,10,412},{12,10,440},{142,10,305},{133,0,239},{7,0,83},{7,0,1990},\n{8,0,130},{139,0,720},{138,11,709},{4,0,143},{5,0,550},{133,0,752},{5,0,123},{6,\n0,530},{7,0,348},{135,0,1419},{135,0,2024},{6,11,18},{7,11,179},{7,11,721},{7,11\n,932},{8,11,548},{8,11,757},{9,11,54},{9,11,65},{9,11,532},{9,11,844},{10,11,113\n},{10,11,117},{10,11,236},{10,11,315},{10,11,430},{10,11,798},{11,11,153},{11,11\n,351},{11,11,375},{12,11,78},{12,11,151},{12,11,392},{14,11,248},{143,11,23},{7,\n10,204},{7,10,415},{8,10,42},{10,10,85},{139,10,564},{134,0,958},{133,11,965},{\n132,0,210},{135,11,1429},{138,11,480},{134,11,182},{139,11,345},{10,11,65},{10,\n11,488},{138,11,497},{4,10,3},{5,10,247},{5,10,644},{7,10,744},{7,10,1207},{7,10\n,1225},{7,10,1909},{146,10,147},{132,0,430},{5,10,285},{9,10,67},{13,10,473},{\n143,10,82},{144,11,16},{7,11,1162},{9,11,588},{10,11,260},{151,10,8},{133,0,213}\n,{138,0,7},{135,0,801},{134,11,1786},{135,11,308},{6,0,936},{134,0,1289},{133,0,\n108},{132,0,885},{133,0,219},{139,0,587},{4,0,193},{5,0,916},{6,0,1041},{7,0,364\n},{10,0,398},{10,0,726},{11,0,317},{11,0,626},{12,0,142},{12,0,288},{12,0,678},{\n13,0,313},{15,0,113},{146,0,114},{135,0,1165},{6,0,241},{9,0,342},{10,0,729},{11\n,0,284},{11,0,445},{11,0,651},{11,0,863},{13,0,398},{146,0,99},{7,0,907},{136,0,\n832},{4,10,29},{6,10,532},{7,10,1628},{7,10,1648},{9,0,303},{9,10,350},{10,10,\n433},{11,10,97},{11,10,557},{11,10,745},{12,10,289},{12,10,335},{12,10,348},{12,\n10,606},{13,10,116},{13,10,233},{13,10,466},{14,10,181},{14,10,209},{14,10,232},\n{14,10,236},{14,10,300},{16,10,41},{148,10,97},{7,10,1692},{7,11,423},{136,11,\n588},{6,0,931},{134,0,1454},{5,10,501},{7,10,1704},{9,10,553},{11,10,520},{12,10\n,557},{141,10,249},{136,11,287},{4,0,562},{9,0,254},{139,0,879},{132,0,786},{14,\n11,32},{18,11,85},{20,11,2},{152,11,16},{135,0,1294},{7,11,723},{135,11,1135},{6\n,0,216},{6,11,403},{7,0,901},{7,0,1343},{136,0,493},{7,11,719},{8,11,809},{136,\n11,834},{5,11,210},{6,11,213},{7,11,60},{10,11,364},{139,11,135},{5,11,607},{7,0\n,341},{8,11,326},{8,11,490},{139,0,219},{4,11,701},{5,11,472},{5,11,639},{7,11,\n1249},{9,11,758},{139,11,896},{135,11,380},{135,11,1947},{139,0,130},{135,0,1734\n},{10,0,115},{11,0,420},{12,0,154},{13,0,404},{14,0,346},{143,0,54},{134,10,129}\n,{4,11,386},{7,11,41},{8,11,405},{9,11,497},{11,11,110},{11,11,360},{15,11,37},{\n144,11,84},{141,11,282},{5,11,46},{7,11,1452},{7,11,1480},{8,11,634},{140,11,472\n},{4,11,524},{136,11,810},{10,11,238},{141,11,33},{133,0,604},{5,0,1011},{136,0,\n701},{8,0,856},{8,0,858},{8,0,879},{12,0,702},{142,0,447},{4,0,54},{5,0,666},{7,\n0,1039},{7,0,1130},{9,0,195},{138,0,302},{4,10,25},{5,10,60},{6,10,504},{7,10,\n614},{7,10,1155},{140,10,0},{7,10,1248},{11,10,621},{139,10,702},{133,11,997},{\n137,10,321},{134,0,1669},{134,0,1791},{4,10,379},{135,10,1397},{138,11,372},{5,\n11,782},{5,11,829},{134,11,1738},{135,0,1228},{4,10,118},{6,10,274},{6,10,361},{\n7,10,75},{141,10,441},{132,0,623},{9,11,279},{10,11,407},{14,11,84},{150,11,18},\n{137,10,841},{135,0,798},{140,10,693},{5,10,314},{6,10,221},{7,10,419},{10,10,\n650},{11,10,396},{12,10,156},{13,10,369},{14,10,333},{145,10,47},{135,11,1372},{\n7,0,122},{9,0,259},{10,0,84},{11,0,470},{12,0,541},{141,0,379},{134,0,837},{4,11\n,78},{5,11,96},{5,11,182},{7,11,1724},{7,11,1825},{8,0,1013},{10,11,394},{10,11,\n471},{11,11,532},{14,11,340},{145,11,88},{134,0,577},{135,11,1964},{132,10,913},\n{134,0,460},{8,0,891},{10,0,901},{10,0,919},{10,0,932},{12,0,715},{12,0,728},{12\n,0,777},{14,0,457},{144,0,103},{5,0,82},{5,0,131},{7,0,1755},{8,0,31},{9,0,168},\n{9,0,764},{139,0,869},{136,10,475},{5,10,1016},{6,0,605},{9,11,601},{9,11,619},{\n10,11,505},{10,11,732},{11,11,355},{140,11,139},{7,10,602},{8,10,179},{10,10,781\n},{140,10,126},{134,0,1246},{6,10,329},{138,10,111},{6,11,215},{7,11,1028},{7,11\n,1473},{7,11,1721},{9,11,424},{138,11,779},{5,0,278},{137,0,68},{6,0,932},{6,0,\n1084},{144,0,86},{4,0,163},{5,0,201},{5,0,307},{5,0,310},{6,0,335},{7,0,284},{7,\n0,1660},{136,0,165},{136,0,781},{134,0,707},{6,0,33},{135,0,1244},{5,10,821},{6,\n10,1687},{6,11,67},{7,11,258},{7,11,1630},{9,11,354},{9,11,675},{10,11,830},{14,\n11,80},{145,11,80},{6,11,141},{7,11,225},{9,11,59},{9,11,607},{10,11,312},{11,11\n,687},{12,11,555},{13,11,373},{13,11,494},{148,11,58},{134,0,1113},{5,10,71},{7,\n10,1407},{9,0,388},{9,10,704},{10,10,261},{10,10,619},{11,10,547},{11,10,619},{\n143,10,157},{7,0,1953},{136,0,720},{138,0,203},{7,10,2008},{9,10,337},{138,10,\n517},{6,0,326},{7,0,677},{137,0,425},{139,11,81},{7,0,1316},{7,0,1412},{7,0,1839\n},{9,0,589},{11,0,241},{11,0,676},{11,0,811},{11,0,891},{12,0,140},{12,0,346},{\n12,0,479},{13,0,140},{13,0,381},{14,0,188},{18,0,30},{148,0,108},{5,0,416},{6,10\n,86},{6,10,603},{7,10,292},{7,10,561},{8,10,257},{8,10,382},{9,10,721},{9,10,778\n},{11,10,581},{140,10,466},{4,10,486},{133,10,491},{134,0,1300},{132,10,72},{6,\n10,265},{7,0,847},{7,11,430},{139,11,46},{5,11,602},{6,11,106},{7,11,1786},{7,11\n,1821},{7,11,2018},{9,11,418},{137,11,763},{5,0,358},{7,0,535},{7,0,1184},{10,0,\n662},{13,0,212},{13,0,304},{13,0,333},{145,0,98},{5,11,65},{6,11,416},{7,11,1720\n},{7,11,1924},{8,11,677},{10,11,109},{11,11,14},{11,11,70},{11,11,569},{11,11,\n735},{15,11,153},{148,11,80},{6,0,1823},{8,0,839},{8,0,852},{8,0,903},{10,0,940}\n,{12,0,707},{140,0,775},{135,11,1229},{6,0,1522},{140,0,654},{136,11,595},{139,0\n,163},{141,0,314},{132,0,978},{4,0,601},{6,0,2035},{137,10,234},{5,10,815},{6,10\n,1688},{134,10,1755},{133,0,946},{136,0,434},{6,10,197},{136,10,205},{7,0,411},{\n7,0,590},{8,0,631},{9,0,323},{10,0,355},{11,0,491},{12,0,143},{12,0,402},{13,0,\n73},{14,0,408},{15,0,107},{146,0,71},{7,0,1467},{8,0,328},{10,0,544},{11,0,955},\n{12,0,13},{13,0,320},{145,0,83},{142,0,410},{11,0,511},{13,0,394},{14,0,298},{14\n,0,318},{146,0,103},{6,10,452},{7,10,312},{138,10,219},{138,10,589},{4,10,333},{\n9,10,176},{12,10,353},{141,10,187},{135,11,329},{132,11,469},{5,0,835},{134,0,\n483},{134,11,1743},{5,11,929},{6,11,340},{8,11,376},{136,11,807},{134,10,1685},{\n132,0,677},{5,11,218},{7,11,1610},{138,11,83},{5,11,571},{135,11,1842},{132,11,\n455},{137,0,70},{135,0,1405},{7,10,135},{8,10,7},{8,10,62},{9,10,243},{10,10,658\n},{10,10,697},{11,10,456},{139,10,756},{9,10,395},{138,10,79},{137,0,108},{6,11,\n161},{7,11,372},{137,11,597},{132,11,349},{132,0,777},{132,0,331},{135,10,631},{\n133,0,747},{6,11,432},{6,11,608},{139,11,322},{138,10,835},{5,11,468},{7,11,1809\n},{10,11,325},{11,11,856},{12,11,345},{143,11,104},{133,11,223},{7,10,406},{7,10\n,459},{8,10,606},{139,10,726},{132,11,566},{142,0,68},{4,11,59},{135,11,1394},{6\n,11,436},{139,11,481},{4,11,48},{5,11,271},{135,11,953},{139,11,170},{5,11,610},\n{136,11,457},{133,11,755},{135,11,1217},{133,10,612},{132,11,197},{132,0,505},{4\n,10,372},{7,10,482},{8,10,158},{9,10,602},{9,10,615},{10,10,245},{10,10,678},{10\n,10,744},{11,10,248},{139,10,806},{133,0,326},{5,10,854},{135,10,1991},{4,0,691}\n,{146,0,16},{6,0,628},{9,0,35},{10,0,680},{10,0,793},{11,0,364},{13,0,357},{143,\n0,164},{138,0,654},{6,0,32},{7,0,385},{7,0,757},{7,0,1916},{8,0,37},{8,0,94},{8,\n0,711},{9,0,541},{10,0,162},{10,0,795},{11,0,989},{11,0,1010},{12,0,14},{142,0,\n308},{133,11,217},{6,0,152},{6,0,349},{6,0,1682},{7,0,1252},{8,0,112},{9,0,435},\n{9,0,668},{10,0,290},{10,0,319},{10,0,815},{11,0,180},{11,0,837},{12,0,240},{13,\n0,152},{13,0,219},{142,0,158},{4,0,581},{134,0,726},{5,10,195},{135,10,1685},{6,\n0,126},{7,0,573},{8,0,397},{142,0,44},{138,0,89},{7,10,1997},{8,10,730},{139,10,\n1006},{134,0,1531},{134,0,1167},{5,0,926},{5,10,751},{140,0,203},{4,11,165},{7,\n11,1398},{135,11,1829},{7,0,1232},{137,0,531},{135,10,821},{134,0,943},{133,0,\n670},{4,0,880},{139,0,231},{134,0,1617},{135,0,1957},{5,11,9},{7,11,297},{7,11,\n966},{140,11,306},{6,0,975},{134,0,985},{5,10,950},{5,10,994},{134,10,351},{12,\n11,21},{151,11,7},{5,11,146},{6,11,411},{138,11,721},{7,0,242},{135,0,1942},{6,\n11,177},{135,11,467},{5,0,421},{7,10,47},{137,10,684},{5,0,834},{7,0,1202},{8,0,\n14},{9,0,481},{137,0,880},{138,0,465},{4,10,350},{6,0,688},{137,0,834},{132,0,\n855},{4,0,357},{6,0,172},{7,0,143},{137,0,413},{133,11,200},{132,0,590},{7,10,\n1812},{13,10,259},{13,10,356},{14,10,242},{147,10,114},{133,10,967},{4,10,473},{\n7,10,623},{8,10,808},{9,10,871},{9,10,893},{11,0,114},{11,10,431},{12,10,112},{\n12,10,217},{12,10,243},{12,10,562},{12,10,663},{12,10,683},{13,10,141},{13,10,\n197},{13,10,227},{13,10,406},{13,10,487},{14,10,156},{14,10,203},{14,10,224},{14\n,10,256},{18,10,58},{150,10,0},{138,10,286},{4,10,222},{7,10,286},{136,10,629},{\n5,0,169},{7,0,333},{136,0,45},{134,11,481},{132,0,198},{4,0,24},{4,11,84},{5,0,\n140},{5,0,185},{7,0,1500},{7,11,1482},{10,11,76},{10,11,142},{11,0,565},{139,0,\n838},{133,0,585},{141,10,306},{133,11,1015},{4,11,315},{5,11,507},{135,11,1370},\n{136,10,146},{6,0,691},{134,0,1503},{4,0,334},{133,0,593},{4,10,465},{135,10,\n1663},{142,11,173},{135,0,913},{6,11,1722},{140,0,116},{134,0,1360},{132,0,802},\n{8,11,222},{8,11,476},{9,11,238},{11,11,516},{11,11,575},{15,11,109},{146,11,100\n},{6,0,308},{7,10,138},{7,10,517},{9,0,673},{139,10,238},{132,0,709},{6,0,1876},\n{6,0,1895},{9,0,994},{9,0,1006},{12,0,829},{12,0,888},{12,0,891},{146,0,185},{\n148,10,94},{4,0,228},{133,0,897},{5,10,495},{7,0,1840},{7,10,834},{9,10,733},{\n139,10,378},{133,10,559},{6,10,21},{6,10,1737},{7,10,1444},{136,10,224},{4,0,608\n},{133,0,497},{6,11,40},{135,11,1781},{134,0,1573},{135,0,2039},{6,0,540},{136,0\n,136},{4,0,897},{5,0,786},{133,10,519},{6,0,1878},{6,0,1884},{9,0,938},{9,0,948}\n,{9,0,955},{9,0,973},{9,0,1012},{12,0,895},{12,0,927},{143,0,254},{134,0,1469},{\n133,0,999},{4,0,299},{135,0,1004},{4,0,745},{133,0,578},{136,11,574},{133,0,456}\n,{134,0,1457},{4,10,402},{135,0,1679},{7,0,693},{8,0,180},{8,10,323},{8,10,479},\n{140,0,163},{11,10,580},{142,10,201},{5,10,59},{135,10,672},{132,11,354},{146,10\n,34},{4,0,755},{135,11,1558},{7,0,1740},{146,0,48},{4,10,85},{135,10,549},{139,0\n,338},{133,10,94},{134,0,1091},{135,11,469},{5,11,830},{12,0,695},{12,0,704},{14\n,11,338},{20,0,113},{148,11,81},{135,0,1464},{6,10,11},{135,10,187},{135,0,975},\n{4,10,522},{141,0,335},{134,0,1979},{5,11,496},{135,11,203},{4,10,52},{135,10,\n661},{7,0,1566},{8,0,269},{9,0,212},{9,0,718},{14,0,15},{14,0,132},{142,0,227},{\n4,0,890},{4,10,383},{5,0,805},{5,0,819},{5,0,961},{5,10,520},{6,0,396},{6,0,1631\n},{6,0,1678},{7,0,1967},{7,0,2041},{9,0,630},{11,0,8},{11,0,1019},{12,0,176},{13\n,0,225},{14,0,292},{149,0,24},{134,11,547},{135,11,1748},{5,11,88},{137,11,239},\n{146,11,128},{7,11,650},{135,11,1310},{4,10,281},{5,10,38},{7,10,194},{7,10,668}\n,{7,10,1893},{137,10,397},{135,0,1815},{9,10,635},{139,10,559},{7,0,1505},{10,0,\n190},{10,0,634},{11,0,792},{12,0,358},{140,0,447},{5,0,0},{6,0,536},{7,0,604},{\n13,0,445},{145,0,126},{7,11,1076},{9,11,80},{11,11,78},{11,11,421},{11,11,534},{\n140,11,545},{8,0,966},{10,0,1023},{14,11,369},{146,11,72},{135,11,1641},{6,0,232\n},{6,0,412},{7,0,1074},{8,0,9},{8,0,157},{8,0,786},{9,0,196},{9,0,352},{9,0,457}\n,{10,0,337},{11,0,232},{11,0,877},{12,0,480},{140,0,546},{135,0,958},{4,0,382},{\n136,0,579},{4,0,212},{135,0,1206},{4,11,497},{5,11,657},{135,11,1584},{132,0,681\n},{8,0,971},{138,0,965},{5,10,448},{136,10,535},{14,0,16},{146,0,44},{11,0,584},\n{11,0,616},{11,11,584},{11,11,616},{14,0,275},{142,11,275},{136,11,13},{7,10,610\n},{135,10,1501},{7,11,642},{8,11,250},{11,11,123},{11,11,137},{13,11,48},{142,11\n,95},{133,0,655},{17,0,67},{147,0,74},{134,0,751},{134,0,1967},{6,0,231},{136,0,\n423},{5,0,300},{138,0,1016},{4,10,319},{5,10,699},{138,10,673},{6,0,237},{6,10,\n336},{7,0,611},{8,0,100},{8,10,552},{9,0,416},{9,10,285},{10,10,99},{11,0,335},{\n11,10,568},{12,0,173},{146,0,101},{134,0,1370},{7,10,1406},{9,10,218},{141,10,\n222},{133,10,256},{135,0,1208},{14,11,213},{148,11,38},{6,0,1219},{135,11,1642},\n{13,0,417},{14,0,129},{143,0,15},{10,11,545},{140,11,301},{17,10,39},{148,10,36}\n,{133,0,199},{4,11,904},{133,11,794},{12,0,427},{146,0,38},{134,0,949},{7,10,634\n},{136,0,665},{132,10,618},{135,10,259},{132,10,339},{133,11,761},{141,10,169},{\n132,10,759},{5,0,688},{7,0,539},{135,0,712},{7,11,386},{138,11,713},{134,0,1186}\n,{6,11,7},{6,11,35},{7,11,147},{7,11,1069},{7,11,1568},{7,11,1575},{7,11,1917},{\n8,11,43},{8,11,208},{9,11,128},{9,11,866},{10,11,20},{11,11,981},{147,11,33},{7,\n11,893},{8,10,482},{141,11,424},{6,0,312},{6,0,1715},{10,0,584},{11,0,546},{11,0\n,692},{12,0,259},{12,0,295},{13,0,46},{141,0,154},{5,10,336},{6,10,341},{6,10,\n478},{6,10,1763},{136,10,386},{137,0,151},{132,0,588},{152,0,4},{6,11,322},{9,11\n,552},{11,11,274},{13,11,209},{13,11,499},{14,11,85},{15,11,126},{145,11,70},{\n135,10,73},{4,0,231},{5,0,61},{6,0,104},{7,0,729},{7,0,964},{7,0,1658},{140,0,\n414},{6,0,263},{138,0,757},{135,10,1971},{4,0,612},{133,0,561},{132,0,320},{135,\n10,1344},{8,11,83},{8,11,817},{9,11,28},{9,11,29},{9,11,885},{10,11,387},{11,11,\n633},{11,11,740},{13,11,235},{13,11,254},{15,11,143},{143,11,146},{5,10,396},{\n134,10,501},{140,11,49},{132,0,225},{4,10,929},{5,10,799},{8,10,46},{136,10,740}\n,{4,0,405},{7,0,817},{14,0,58},{17,0,37},{146,0,124},{133,0,974},{4,11,412},{133\n,11,581},{4,10,892},{133,10,770},{4,0,996},{134,0,2026},{4,0,527},{5,0,235},{7,0\n,1239},{11,0,131},{140,0,370},{7,11,421},{9,0,16},{141,0,386},{7,0,956},{7,0,\n1157},{7,0,1506},{7,0,1606},{7,0,1615},{7,0,1619},{7,0,1736},{7,0,1775},{8,0,590\n},{9,0,324},{9,0,736},{9,0,774},{9,0,776},{9,0,784},{10,0,567},{10,0,708},{11,0,\n518},{11,0,613},{11,0,695},{11,0,716},{11,0,739},{11,0,770},{11,0,771},{11,0,848\n},{11,0,857},{11,0,931},{11,0,947},{12,0,326},{12,0,387},{12,0,484},{12,0,528},{\n12,0,552},{12,0,613},{13,0,189},{13,0,256},{13,0,340},{13,0,432},{13,0,436},{13,\n0,440},{13,0,454},{14,0,174},{14,0,220},{14,0,284},{14,0,390},{145,0,121},{135,\n10,158},{9,0,137},{138,0,221},{4,11,110},{10,11,415},{10,11,597},{142,11,206},{\n141,11,496},{135,11,205},{151,10,25},{135,11,778},{7,10,2001},{7,11,1656},{9,11,\n369},{10,11,338},{10,11,490},{11,11,154},{11,11,545},{11,11,775},{13,11,77},{141\n,11,274},{4,11,444},{10,11,146},{140,11,9},{7,0,390},{138,0,140},{135,0,1144},{\n134,0,464},{7,10,1461},{140,10,91},{132,10,602},{4,11,283},{135,11,1194},{5,0,\n407},{11,0,204},{11,0,243},{11,0,489},{12,0,293},{19,0,37},{20,0,73},{150,0,38},\n{7,0,1218},{136,0,303},{4,10,13},{5,0,325},{5,10,567},{7,10,1498},{8,0,5},{8,0,\n227},{9,0,105},{9,10,124},{10,0,585},{11,10,521},{12,0,614},{140,10,405},{135,10\n,1006},{6,11,1720},{7,0,800},{138,0,12},{135,0,1783},{132,10,735},{138,10,812},{\n4,10,170},{135,10,323},{6,0,621},{13,0,504},{144,0,89},{5,10,304},{135,10,1403},\n{137,11,216},{6,0,920},{6,0,1104},{9,11,183},{139,11,286},{4,0,376},{133,10,742}\n,{134,0,218},{8,0,641},{11,0,388},{140,0,580},{7,0,454},{7,0,782},{8,0,768},{140\n,0,686},{137,11,33},{133,10,111},{144,0,0},{10,0,676},{140,0,462},{6,0,164},{136\n,11,735},{133,10,444},{150,0,50},{7,11,1862},{12,11,491},{12,11,520},{13,11,383}\n,{14,11,244},{146,11,12},{5,11,132},{9,11,486},{9,11,715},{10,11,458},{11,11,373\n},{11,11,668},{11,11,795},{11,11,897},{12,11,272},{12,11,424},{12,11,539},{12,11\n,558},{14,11,245},{14,11,263},{14,11,264},{14,11,393},{142,11,403},{8,10,123},{\n15,10,6},{144,10,7},{6,0,285},{8,0,654},{11,0,749},{12,0,190},{12,0,327},{13,0,\n120},{13,0,121},{13,0,327},{15,0,47},{146,0,40},{5,11,8},{6,11,89},{6,11,400},{7\n,11,1569},{7,11,1623},{7,11,1850},{8,11,218},{8,11,422},{9,11,570},{138,11,626},\n{6,11,387},{7,11,882},{141,11,111},{6,0,343},{6,11,224},{7,0,195},{7,11,877},{9,\n0,226},{9,11,647},{10,0,197},{10,0,575},{11,0,502},{139,0,899},{5,10,937},{135,\n10,100},{135,11,790},{150,0,29},{147,0,8},{134,0,1812},{149,0,8},{135,11,394},{7\n,0,1125},{9,0,143},{11,0,61},{14,0,405},{150,0,21},{10,11,755},{147,11,29},{9,11\n,378},{141,11,162},{135,10,922},{5,10,619},{133,10,698},{134,0,1327},{6,0,1598},\n{137,0,575},{9,11,569},{12,11,12},{12,11,81},{12,11,319},{13,11,69},{14,11,259},\n{16,11,87},{17,11,1},{17,11,21},{17,11,24},{18,11,15},{18,11,56},{18,11,59},{18,\n11,127},{18,11,154},{19,11,19},{148,11,31},{6,0,895},{135,11,1231},{5,0,959},{7,\n11,124},{136,11,38},{5,11,261},{7,11,78},{7,11,199},{8,11,815},{9,11,126},{138,\n11,342},{5,10,917},{134,10,1659},{5,11,595},{7,0,1759},{135,11,1863},{136,0,173}\n,{134,0,266},{142,0,261},{132,11,628},{5,10,251},{5,10,956},{8,10,268},{9,10,214\n},{146,10,142},{7,11,266},{136,11,804},{135,11,208},{6,11,79},{7,11,1021},{135,\n11,1519},{11,11,704},{141,11,396},{5,10,346},{5,10,711},{136,10,390},{136,11,741\n},{134,11,376},{134,0,1427},{6,0,1033},{6,0,1217},{136,0,300},{133,10,624},{6,11\n,100},{7,11,244},{7,11,632},{7,11,1609},{8,11,178},{8,11,638},{141,11,58},{5,10,\n783},{6,0,584},{7,10,1998},{135,10,2047},{5,0,427},{5,0,734},{7,0,478},{136,0,52\n},{7,0,239},{11,0,217},{142,0,165},{134,0,1129},{6,0,168},{6,0,1734},{7,0,20},{7\n,0,1056},{8,0,732},{9,0,406},{9,0,911},{138,0,694},{132,10,594},{133,11,791},{7,\n11,686},{8,11,33},{8,11,238},{10,11,616},{11,11,467},{11,11,881},{13,11,217},{13\n,11,253},{142,11,268},{137,11,476},{134,0,418},{133,0,613},{132,0,632},{132,11,\n447},{7,0,32},{7,0,984},{8,0,85},{8,0,709},{9,0,579},{9,0,847},{9,0,856},{10,0,\n799},{11,0,258},{11,0,1007},{12,0,331},{12,0,615},{13,0,188},{13,0,435},{14,0,8}\n,{15,0,165},{16,0,27},{16,11,35},{148,0,40},{4,11,128},{5,11,415},{6,11,462},{7,\n11,294},{7,11,578},{10,11,710},{139,11,86},{5,0,694},{136,0,909},{5,10,37},{6,10\n,39},{6,10,451},{7,0,1109},{7,10,218},{7,10,1166},{7,10,1687},{8,10,662},{11,0,7\n},{144,10,2},{136,11,587},{6,11,427},{7,11,1018},{138,11,692},{4,11,195},{6,10,\n508},{135,11,802},{4,0,167},{135,0,82},{5,0,62},{6,0,24},{6,0,534},{7,0,74},{7,0\n,678},{7,0,684},{7,0,1043},{7,0,1072},{8,0,280},{8,0,541},{8,0,686},{9,0,258},{\n10,0,519},{11,0,252},{140,0,282},{138,0,33},{4,0,359},{133,11,738},{7,0,980},{7,\n10,635},{7,10,796},{8,10,331},{9,0,328},{9,10,330},{9,10,865},{10,10,119},{10,10\n,235},{11,10,111},{11,10,129},{11,10,240},{12,10,31},{12,10,66},{12,10,222},{12,\n10,269},{12,10,599},{12,10,684},{12,10,689},{12,10,691},{13,0,186},{13,0,364},{\n142,10,345},{137,10,527},{6,0,596},{7,0,585},{135,10,702},{134,11,1683},{133,0,\n211},{6,0,145},{141,0,336},{134,0,1130},{6,10,37},{7,0,873},{7,10,1666},{8,10,\n195},{8,10,316},{9,10,178},{9,10,276},{9,10,339},{9,10,536},{10,10,102},{10,10,\n362},{10,10,785},{11,10,55},{11,10,149},{11,10,773},{13,10,416},{13,10,419},{14,\n10,38},{14,10,41},{142,10,210},{8,0,840},{136,0,841},{132,0,263},{5,11,3},{8,11,\n578},{9,11,118},{10,11,705},{12,11,383},{141,11,279},{132,0,916},{133,11,229},{\n133,10,645},{8,11,102},{10,11,578},{10,11,672},{12,11,496},{13,11,408},{14,11,\n121},{15,0,155},{16,0,79},{145,11,106},{4,0,599},{5,0,592},{6,0,1634},{7,0,5},{7\n,0,55},{7,0,67},{7,0,97},{7,0,691},{7,0,979},{7,0,1600},{7,0,1697},{8,0,207},{8,\n0,214},{8,0,231},{8,0,294},{8,0,336},{8,0,428},{8,0,471},{8,0,622},{8,0,626},{8,\n0,679},{8,0,759},{8,0,829},{9,0,11},{9,0,246},{9,0,484},{9,0,573},{9,0,706},{9,0\n,762},{9,0,798},{9,0,855},{9,0,870},{9,0,912},{10,0,303},{10,0,335},{10,0,424},{\n10,0,461},{10,0,543},{10,0,759},{10,0,814},{11,0,59},{11,0,199},{11,0,235},{11,0\n,590},{11,0,631},{11,0,929},{11,0,963},{11,0,987},{12,0,114},{12,0,182},{12,0,\n226},{12,0,332},{12,0,439},{12,0,575},{12,0,598},{12,0,675},{13,0,8},{13,0,125},\n{13,0,194},{13,0,287},{14,0,197},{14,0,383},{15,0,53},{17,0,63},{19,0,46},{19,0,\n98},{19,0,106},{148,0,85},{4,10,290},{135,0,1356},{6,10,70},{7,10,1292},{10,10,\n762},{139,10,288},{150,11,55},{4,0,593},{8,11,115},{8,11,350},{9,11,489},{10,11,\n128},{11,11,306},{12,11,373},{14,11,30},{17,11,79},{147,11,80},{135,11,1235},{\n134,0,1392},{4,11,230},{133,11,702},{147,0,126},{7,10,131},{7,10,422},{8,10,210}\n,{140,10,573},{134,0,1179},{139,11,435},{139,10,797},{134,11,1728},{4,0,162},{18\n,11,26},{19,11,42},{20,11,43},{21,11,0},{23,11,27},{152,11,14},{132,10,936},{5,\n10,453},{6,0,765},{134,10,441},{133,0,187},{135,0,1286},{6,0,635},{6,0,904},{6,0\n,1210},{134,0,1489},{4,0,215},{8,0,890},{9,0,38},{10,0,923},{11,0,23},{11,0,127}\n,{139,0,796},{6,0,1165},{134,0,1306},{7,0,716},{13,0,97},{141,0,251},{132,10,653\n},{136,0,657},{146,10,80},{5,11,622},{7,11,1032},{11,11,26},{11,11,213},{11,11,\n707},{12,11,380},{13,11,226},{141,11,355},{5,11,70},{6,0,299},{6,11,334},{9,11,\n171},{11,11,637},{12,11,202},{14,11,222},{145,11,42},{142,0,134},{4,11,23},{5,11\n,313},{5,11,1014},{6,11,50},{6,11,51},{7,11,142},{7,11,384},{9,11,783},{139,11,\n741},{4,11,141},{7,11,559},{8,11,640},{9,11,460},{12,11,183},{141,11,488},{136,\n11,614},{7,10,1368},{8,10,232},{8,10,361},{10,10,682},{138,10,742},{137,10,534},\n{6,0,1082},{140,0,658},{137,10,27},{135,0,2002},{142,10,12},{4,0,28},{5,0,440},{\n7,0,248},{11,0,833},{140,0,344},{7,10,736},{139,10,264},{134,10,1657},{134,0,\n1654},{138,0,531},{5,11,222},{9,11,140},{138,11,534},{6,0,634},{6,0,798},{134,0,\n840},{138,11,503},{135,10,127},{133,0,853},{5,11,154},{7,11,1491},{10,11,379},{\n138,11,485},{6,0,249},{7,0,1234},{139,0,573},{133,11,716},{7,11,1570},{140,11,\n542},{136,10,364},{138,0,527},{4,11,91},{5,11,388},{5,11,845},{6,11,206},{6,11,\n252},{6,11,365},{7,11,136},{7,11,531},{8,11,264},{136,11,621},{134,0,1419},{135,\n11,1441},{7,0,49},{7,0,392},{8,0,20},{8,0,172},{8,0,690},{9,0,383},{9,0,845},{10\n,0,48},{11,0,293},{11,0,832},{11,0,920},{11,0,984},{141,0,221},{5,0,858},{133,0,\n992},{5,0,728},{137,10,792},{5,10,909},{9,10,849},{138,10,805},{7,0,525},{7,0,\n1579},{8,0,497},{136,0,573},{6,0,268},{137,0,62},{135,11,576},{134,0,1201},{5,11\n,771},{5,11,863},{5,11,898},{6,11,1632},{6,11,1644},{134,11,1780},{133,11,331},{\n7,0,193},{7,0,1105},{7,10,397},{8,10,124},{8,10,619},{9,10,305},{10,0,495},{11,\n10,40},{12,10,349},{13,10,134},{13,10,295},{14,10,155},{15,10,120},{146,10,105},\n{138,0,106},{5,11,107},{6,0,859},{7,11,201},{136,11,518},{6,11,446},{135,11,1817\n},{4,10,262},{7,10,342},{141,0,23},{133,10,641},{137,11,851},{6,0,925},{137,0,\n813},{132,11,504},{6,0,613},{136,0,223},{4,10,99},{6,10,250},{6,10,346},{8,10,\n127},{138,10,81},{136,0,953},{132,10,915},{139,11,892},{5,10,75},{9,10,517},{10,\n10,470},{12,10,155},{141,10,224},{4,0,666},{7,0,1017},{7,11,996},{138,11,390},{5\n,11,883},{133,11,975},{14,10,83},{142,11,83},{4,0,670},{5,11,922},{134,11,1707},\n{135,0,216},{7,11,787},{9,0,40},{139,0,136},{5,10,954},{5,11,993},{7,11,515},{\n137,11,91},{139,0,259},{6,10,304},{7,0,1114},{8,10,418},{9,0,310},{9,0,682},{10,\n0,440},{11,10,341},{11,10,675},{141,0,40},{9,10,410},{11,10,425},{142,0,296},{10\n,11,377},{12,11,363},{13,11,68},{13,11,94},{14,11,108},{142,11,306},{7,0,1401},{\n135,0,1476},{4,0,296},{6,0,475},{7,0,401},{7,0,1410},{7,0,1594},{7,0,1674},{8,0,\n63},{8,0,660},{137,0,74},{4,0,139},{4,0,388},{140,0,188},{132,0,797},{132,11,766\n},{5,11,103},{7,11,921},{8,11,580},{8,11,593},{8,11,630},{138,11,28},{4,11,911},\n{5,11,867},{133,11,1013},{134,10,14},{134,0,1572},{134,10,1708},{5,10,113},{6,10\n,243},{7,10,1865},{11,10,161},{16,10,37},{17,10,99},{149,0,39},{7,11,1563},{141,\n11,182},{5,11,135},{6,11,519},{7,11,1722},{10,11,271},{11,11,261},{145,11,54},{\n132,10,274},{134,0,1594},{4,11,300},{5,11,436},{135,11,484},{4,0,747},{6,0,290},\n{7,0,649},{7,0,1479},{135,0,1583},{133,11,535},{147,11,82},{133,0,232},{137,0,\n887},{135,10,166},{136,0,521},{4,0,14},{7,0,472},{7,0,1801},{10,0,748},{141,0,\n458},{134,0,741},{134,0,992},{9,10,304},{144,0,111},{4,0,425},{5,11,387},{7,11,\n557},{12,11,547},{142,11,86},{135,11,1747},{5,10,654},{135,11,1489},{4,11,6},{5,\n11,708},{7,0,789},{136,11,75},{6,10,273},{10,10,188},{13,10,377},{146,10,77},{4,\n11,303},{6,0,1593},{7,11,619},{10,11,547},{10,11,687},{11,11,122},{140,11,601},{\n134,0,1768},{135,10,410},{138,11,772},{11,0,233},{139,10,524},{5,0,943},{134,0,\n1779},{134,10,1785},{136,11,529},{132,0,955},{5,0,245},{6,0,576},{7,0,582},{136,\n0,225},{132,10,780},{142,0,241},{134,0,1943},{4,11,106},{7,11,310},{7,11,1785},{\n10,11,690},{139,11,717},{134,0,1284},{5,11,890},{133,11,988},{6,11,626},{142,11,\n431},{10,11,706},{145,11,32},{137,11,332},{132,11,698},{135,0,709},{5,10,948},{\n138,11,17},{136,0,554},{134,0,1564},{139,10,941},{132,0,443},{134,0,909},{134,11\n,84},{142,0,280},{4,10,532},{5,10,706},{135,10,662},{132,0,729},{5,10,837},{6,10\n,1651},{139,10,985},{135,10,1861},{4,0,348},{152,11,3},{5,11,986},{6,11,130},{7,\n11,1582},{8,11,458},{10,11,101},{10,11,318},{138,11,823},{134,0,758},{4,0,298},{\n137,0,848},{4,10,330},{7,10,933},{7,10,2012},{136,10,292},{7,11,1644},{137,11,\n129},{6,0,1422},{7,10,767},{137,0,829},{5,0,164},{7,0,121},{142,0,189},{7,0,812}\n,{7,0,1261},{7,0,1360},{9,0,632},{140,0,352},{135,11,1788},{139,0,556},{135,11,\n997},{145,10,114},{4,0,172},{9,0,611},{9,10,883},{10,0,436},{12,0,673},{141,0,\n255},{10,10,274},{139,0,530},{133,0,844},{134,0,984},{4,10,703},{7,10,207},{13,0\n,232},{146,0,35},{132,10,571},{9,0,263},{10,0,147},{138,0,492},{7,11,1756},{137,\n11,98},{5,10,873},{5,10,960},{8,10,823},{137,10,881},{133,0,537},{132,0,859},{7,\n11,1046},{139,11,160},{137,0,842},{139,10,283},{5,10,33},{6,10,470},{139,10,424}\n,{6,11,45},{7,11,433},{8,11,129},{9,11,21},{10,11,392},{11,11,79},{12,11,499},{\n13,11,199},{141,11,451},{135,0,1291},{135,10,1882},{7,11,558},{136,11,353},{134,\n0,1482},{5,0,230},{5,0,392},{6,0,420},{9,0,568},{140,0,612},{6,0,262},{7,10,90},\n{7,10,664},{7,10,830},{7,10,1380},{7,10,2025},{8,10,448},{8,10,828},{8,11,81},{9\n,11,189},{9,11,201},{11,11,478},{11,11,712},{141,11,338},{142,0,31},{5,11,353},{\n151,11,26},{132,0,753},{4,0,0},{5,0,41},{7,0,1459},{7,0,1469},{7,0,1859},{9,0,\n549},{139,0,905},{9,10,417},{137,10,493},{135,11,1113},{133,0,696},{141,11,448},\n{134,10,295},{132,0,834},{4,0,771},{5,10,1019},{6,11,25},{7,11,855},{7,11,1258},\n{144,11,32},{134,0,1076},{133,0,921},{133,0,674},{4,11,4},{7,11,1118},{7,11,1320\n},{7,11,1706},{8,11,277},{9,11,622},{10,11,9},{11,11,724},{12,11,350},{12,11,397\n},{13,11,28},{13,11,159},{15,11,89},{18,11,5},{19,11,9},{20,11,34},{150,11,47},{\n134,10,208},{6,0,444},{136,0,308},{6,0,180},{7,0,1137},{8,0,751},{139,0,805},{4,\n0,183},{7,0,271},{11,0,824},{11,0,952},{13,0,278},{13,0,339},{13,0,482},{14,0,\n424},{148,0,99},{7,11,317},{135,11,569},{4,0,19},{5,0,477},{5,0,596},{6,0,505},{\n7,0,1221},{11,0,907},{12,0,209},{141,0,214},{135,0,1215},{6,0,271},{7,0,398},{7,\n10,448},{7,10,1629},{7,10,1813},{8,0,387},{8,10,442},{9,10,710},{10,0,344},{10,\n10,282},{138,10,722},{11,10,844},{12,10,104},{140,10,625},{134,11,255},{133,10,\n787},{134,0,1645},{11,11,956},{151,11,3},{6,0,92},{6,0,188},{7,0,209},{7,0,1269}\n,{7,0,1524},{7,0,1876},{8,0,661},{10,0,42},{10,0,228},{11,0,58},{11,0,1020},{12,\n0,58},{12,0,118},{141,0,32},{4,0,459},{133,0,966},{4,11,536},{7,11,1141},{10,11,\n723},{139,11,371},{140,0,330},{134,0,1557},{7,11,285},{135,11,876},{136,10,491},\n{135,11,560},{6,0,18},{7,0,179},{7,0,932},{8,0,548},{8,0,757},{9,0,54},{9,0,65},\n{9,0,532},{9,0,844},{10,0,113},{10,0,117},{10,0,315},{10,0,560},{10,0,622},{10,0\n,798},{11,0,153},{11,0,351},{11,0,375},{12,0,78},{12,0,151},{12,0,392},{12,0,666\n},{14,0,248},{143,0,23},{4,11,690},{134,0,1742},{4,10,403},{5,10,441},{7,10,450}\n,{10,10,840},{11,10,101},{12,10,193},{141,10,430},{133,0,965},{134,0,182},{10,0,\n65},{10,0,488},{138,0,497},{135,11,1346},{6,0,973},{6,0,1158},{10,11,200},{19,11\n,2},{151,11,22},{4,11,190},{133,11,554},{133,10,679},{7,0,328},{137,10,326},{133\n,11,1001},{9,0,588},{138,0,260},{133,11,446},{135,10,1128},{135,10,1796},{147,11\n,119},{134,0,1786},{6,0,1328},{6,0,1985},{8,0,962},{138,0,1017},{135,0,308},{4,\n10,574},{7,10,350},{7,10,1024},{8,10,338},{9,10,677},{10,10,808},{139,0,508},{\n138,11,752},{135,10,1081},{137,11,96},{7,10,1676},{135,10,2037},{136,0,588},{132\n,11,304},{133,0,614},{140,0,793},{136,0,287},{137,10,297},{141,10,37},{6,11,53},\n{6,11,199},{7,11,1408},{8,11,32},{8,11,93},{9,11,437},{10,11,397},{10,11,629},{\n11,11,593},{11,11,763},{13,11,326},{145,11,35},{134,11,105},{9,11,320},{10,11,\n506},{138,11,794},{5,11,114},{5,11,255},{141,11,285},{140,0,290},{7,11,2035},{8,\n11,19},{9,11,89},{138,11,831},{134,0,1136},{6,10,306},{7,0,719},{7,10,1140},{7,\n10,1340},{8,0,796},{8,0,809},{8,0,834},{8,10,133},{138,10,449},{139,10,1011},{5,\n0,210},{6,0,213},{7,0,60},{10,0,364},{139,0,135},{5,0,607},{8,0,326},{136,0,490}\n,{138,11,176},{132,0,701},{5,0,472},{7,0,380},{137,0,758},{135,0,1947},{6,0,1079\n},{138,0,278},{138,11,391},{5,10,329},{8,10,260},{139,11,156},{4,0,386},{7,0,41}\n,{8,0,405},{8,0,728},{9,0,497},{11,0,110},{11,0,360},{15,0,37},{144,0,84},{5,0,\n46},{7,0,1452},{7,0,1480},{8,0,634},{140,0,472},{136,0,961},{4,0,524},{136,0,810\n},{10,0,238},{141,0,33},{132,10,657},{152,10,7},{133,0,532},{5,0,997},{135,10,\n1665},{7,11,594},{7,11,851},{7,11,1858},{9,11,411},{9,11,574},{9,11,666},{9,11,\n737},{10,11,346},{10,11,712},{11,11,246},{11,11,432},{11,11,517},{11,11,647},{11\n,11,679},{11,11,727},{12,11,304},{12,11,305},{12,11,323},{12,11,483},{12,11,572}\n,{12,11,593},{12,11,602},{13,11,95},{13,11,101},{13,11,171},{13,11,315},{13,11,\n378},{13,11,425},{13,11,475},{14,11,63},{14,11,380},{14,11,384},{15,11,133},{18,\n11,112},{148,11,72},{5,11,955},{136,11,814},{134,0,1301},{5,10,66},{7,10,1896},{\n136,10,288},{133,11,56},{134,10,1643},{6,0,1298},{148,11,100},{5,0,782},{5,0,829\n},{6,0,671},{6,0,1156},{6,0,1738},{137,11,621},{4,0,306},{5,0,570},{5,10,91},{5,\n10,648},{5,10,750},{5,10,781},{6,10,54},{6,10,112},{6,10,402},{6,10,1732},{7,0,\n1347},{7,10,315},{7,10,749},{7,10,1900},{9,10,78},{9,10,508},{10,10,611},{10,10,\n811},{11,10,510},{11,10,728},{13,10,36},{14,10,39},{16,10,83},{17,10,124},{148,\n10,30},{8,10,570},{9,11,477},{141,11,78},{4,11,639},{10,10,322},{10,10,719},{10,\n11,4},{11,10,407},{11,11,638},{12,11,177},{148,11,57},{7,0,1823},{139,0,693},{5,\n11,758},{7,0,759},{8,10,125},{8,10,369},{8,10,524},{10,10,486},{11,10,13},{11,10\n,381},{11,10,736},{11,10,766},{11,10,845},{13,10,114},{13,10,292},{142,10,47},{6\n,10,1684},{6,10,1731},{7,0,1932},{7,10,356},{8,10,54},{8,10,221},{9,10,225},{9,\n10,356},{10,10,77},{10,10,446},{10,10,731},{12,10,404},{141,10,491},{135,11,552}\n,{135,11,1112},{4,0,78},{5,0,96},{5,0,182},{6,0,1257},{7,0,1724},{7,0,1825},{10,\n0,394},{10,0,471},{11,0,532},{14,0,340},{145,0,88},{139,11,328},{135,0,1964},{\n132,10,411},{4,10,80},{5,10,44},{137,11,133},{5,11,110},{6,11,169},{6,11,1702},{\n7,11,400},{8,11,538},{9,11,184},{9,11,524},{140,11,218},{4,0,521},{5,10,299},{7,\n10,1083},{140,11,554},{6,11,133},{9,11,353},{12,11,628},{146,11,79},{6,0,215},{7\n,0,584},{7,0,1028},{7,0,1473},{7,0,1721},{9,0,424},{138,0,779},{7,0,857},{7,0,\n1209},{7,10,1713},{9,10,537},{10,10,165},{12,10,219},{140,10,561},{4,10,219},{6,\n11,93},{7,10,1761},{7,11,1422},{7,11,1851},{8,11,673},{9,10,86},{9,11,529},{140,\n11,43},{137,11,371},{136,0,671},{5,0,328},{135,0,918},{132,0,529},{9,11,25},{10,\n11,467},{138,11,559},{4,11,335},{135,11,942},{134,0,716},{134,0,1509},{6,0,67},{\n7,0,258},{7,0,1630},{9,0,354},{9,0,675},{10,0,830},{12,10,428},{14,0,80},{145,0,\n80},{134,0,1112},{6,0,141},{7,0,225},{9,0,59},{9,0,607},{10,0,312},{11,0,687},{\n12,0,555},{13,0,373},{13,0,494},{148,0,58},{133,10,514},{8,11,39},{10,11,773},{\n11,11,84},{12,11,205},{142,11,1},{5,11,601},{5,11,870},{136,0,783},{136,11,594},\n{4,10,55},{5,10,301},{6,10,571},{14,10,49},{146,10,102},{132,11,181},{134,11,\n1652},{133,10,364},{4,11,97},{5,11,147},{6,11,286},{7,11,1362},{141,11,176},{4,\n10,76},{7,10,1550},{9,10,306},{9,10,430},{9,10,663},{10,10,683},{11,10,427},{11,\n10,753},{12,10,334},{12,10,442},{14,10,258},{14,10,366},{143,10,131},{137,10,52}\n,{6,0,955},{134,0,1498},{6,11,375},{7,11,169},{7,11,254},{136,11,780},{7,0,430},\n{11,0,46},{14,0,343},{142,11,343},{135,0,1183},{5,0,602},{7,0,2018},{7,11,1447},\n{9,0,418},{137,0,803},{7,11,1044},{136,0,677},{139,11,285},{4,10,656},{135,10,\n779},{135,10,144},{5,11,629},{135,11,1549},{135,10,1373},{138,11,209},{7,10,554}\n,{7,10,605},{141,10,10},{5,10,838},{5,10,841},{134,10,1649},{133,10,1012},{6,0,\n1357},{134,0,1380},{144,0,53},{6,0,590},{7,10,365},{7,10,1357},{7,10,1497},{8,10\n,154},{141,10,281},{133,10,340},{132,11,420},{135,0,329},{147,11,32},{4,0,469},{\n10,11,429},{139,10,495},{8,10,261},{9,10,144},{9,10,466},{10,10,370},{12,10,470}\n,{13,10,144},{142,10,348},{142,0,460},{4,11,325},{9,10,897},{138,11,125},{6,0,\n1743},{6,10,248},{9,10,546},{10,10,535},{11,10,681},{141,10,135},{4,0,990},{5,0,\n929},{6,0,340},{8,0,376},{8,0,807},{8,0,963},{8,0,980},{138,0,1007},{134,0,1603}\n,{140,0,250},{4,11,714},{133,11,469},{134,10,567},{136,10,445},{5,0,218},{7,0,\n1610},{8,0,646},{10,0,83},{11,11,138},{140,11,40},{7,0,1512},{135,0,1794},{135,\n11,1216},{4,11,718},{11,0,0},{144,0,78},{133,0,571},{132,0,455},{134,0,1012},{5,\n11,124},{5,11,144},{6,11,548},{7,11,15},{7,11,153},{137,11,629},{142,11,10},{6,\n11,75},{7,11,1531},{8,11,416},{9,11,240},{9,11,275},{10,11,100},{11,11,658},{11,\n11,979},{12,11,86},{13,11,468},{14,11,66},{14,11,207},{15,11,20},{15,11,25},{144\n,11,58},{132,10,577},{5,11,141},{5,11,915},{6,11,1783},{7,11,211},{7,11,698},{7,\n11,1353},{9,11,83},{9,11,281},{10,11,376},{10,11,431},{11,11,543},{12,11,664},{\n13,11,280},{13,11,428},{14,11,61},{14,11,128},{17,11,52},{145,11,81},{6,0,161},{\n7,0,372},{137,0,597},{132,0,349},{10,11,702},{139,11,245},{134,0,524},{134,10,\n174},{6,0,432},{9,0,751},{139,0,322},{147,11,94},{4,11,338},{133,11,400},{5,0,\n468},{10,0,325},{11,0,856},{12,0,345},{143,0,104},{133,0,223},{132,0,566},{4,11,\n221},{5,11,659},{5,11,989},{7,11,697},{7,11,1211},{138,11,284},{135,11,1070},{4,\n0,59},{135,0,1394},{5,10,878},{5,10,972},{6,0,436},{139,0,481},{4,0,48},{5,0,271\n},{135,0,953},{5,0,610},{136,0,457},{4,0,773},{5,0,618},{137,0,756},{133,0,755},\n{135,0,1217},{138,11,507},{132,10,351},{132,0,197},{143,11,78},{4,11,188},{7,11,\n805},{11,11,276},{142,11,293},{5,11,884},{139,11,991},{132,10,286},{7,10,438},{7\n,10,627},{7,10,1516},{8,10,40},{9,10,56},{9,10,294},{10,0,259},{10,0,428},{11,10\n,969},{11,10,995},{146,10,148},{4,0,356},{5,0,217},{5,0,492},{5,0,656},{8,0,544}\n,{136,11,544},{5,0,259},{6,0,1230},{7,0,414},{7,0,854},{142,0,107},{132,0,1007},\n{15,0,14},{144,0,5},{4,10,738},{134,0,1580},{132,11,596},{132,0,673},{133,10,866\n},{6,0,1843},{135,11,1847},{4,0,165},{7,0,1398},{135,0,1829},{135,11,1634},{147,\n11,65},{6,0,885},{6,0,1009},{137,0,809},{133,10,116},{132,10,457},{136,11,770},{\n9,0,498},{10,11,361},{12,0,181},{142,11,316},{134,11,595},{5,0,9},{7,0,297},{7,0\n,966},{140,0,306},{4,11,89},{5,11,489},{6,11,315},{7,11,553},{7,11,1745},{138,11\n,243},{134,0,1487},{132,0,437},{5,0,146},{6,0,411},{138,0,721},{5,10,527},{6,10,\n189},{135,10,859},{11,10,104},{11,10,554},{15,10,60},{143,10,125},{6,11,1658},{9\n,11,3},{10,11,154},{11,11,641},{13,11,85},{13,11,201},{141,11,346},{6,0,177},{\n135,0,467},{134,0,1377},{134,10,116},{136,11,645},{4,11,166},{5,11,505},{6,11,\n1670},{137,11,110},{133,10,487},{4,10,86},{5,10,667},{5,10,753},{6,10,316},{6,10\n,455},{135,10,946},{133,0,200},{132,0,959},{6,0,1928},{134,0,1957},{139,11,203},\n{150,10,45},{4,10,79},{7,10,1773},{10,10,450},{11,10,589},{13,10,332},{13,10,493\n},{14,10,183},{14,10,334},{14,10,362},{14,10,368},{14,10,376},{14,10,379},{19,10\n,90},{19,10,103},{19,10,127},{148,10,90},{6,0,1435},{135,11,1275},{134,0,481},{7\n,11,445},{8,11,307},{8,11,704},{10,11,41},{10,11,439},{11,11,237},{11,11,622},{\n140,11,201},{135,11,869},{4,0,84},{7,0,1482},{10,0,76},{138,0,142},{11,11,277},{\n144,11,14},{135,11,1977},{4,11,189},{5,11,713},{136,11,57},{133,0,1015},{138,11,\n371},{4,0,315},{5,0,507},{135,0,1370},{4,11,552},{142,10,381},{9,0,759},{16,0,31\n},{16,0,39},{16,0,75},{18,0,24},{20,0,42},{152,0,1},{134,0,712},{134,0,1722},{\n133,10,663},{133,10,846},{8,0,222},{8,0,476},{9,0,238},{11,0,516},{11,0,575},{15\n,0,109},{146,0,100},{5,10,378},{7,0,1402},{7,0,1414},{8,10,465},{9,10,286},{10,\n10,185},{10,10,562},{10,10,635},{11,10,31},{11,10,393},{12,0,456},{13,10,312},{\n18,10,65},{18,10,96},{147,10,89},{4,0,986},{6,0,1958},{6,0,2032},{8,0,934},{138,\n0,985},{7,10,1880},{9,10,680},{139,10,798},{134,10,1770},{145,11,49},{132,11,614\n},{132,10,648},{5,10,945},{6,10,1656},{6,10,1787},{7,10,167},{8,10,824},{9,10,\n391},{10,10,375},{139,10,185},{138,11,661},{7,0,1273},{135,11,1945},{7,0,706},{7\n,0,1058},{138,0,538},{7,10,1645},{8,10,352},{137,10,249},{132,10,152},{11,0,92},\n{11,0,196},{11,0,409},{11,0,450},{11,0,666},{11,0,777},{12,0,262},{13,0,385},{13\n,0,393},{15,0,115},{16,0,45},{145,0,82},{133,10,1006},{6,0,40},{135,0,1781},{9,\n11,614},{139,11,327},{5,10,420},{135,10,1449},{135,0,431},{7,10,832},{138,0,97},\n{6,0,423},{7,0,665},{135,0,1210},{7,0,237},{8,0,664},{9,0,42},{9,0,266},{9,0,380\n},{9,0,645},{10,0,177},{138,0,276},{5,10,351},{135,0,264},{5,10,40},{7,10,598},{\n7,10,1638},{8,0,213},{9,10,166},{9,10,640},{9,10,685},{9,10,773},{11,10,215},{13\n,10,65},{14,10,172},{14,10,317},{145,10,6},{5,11,84},{134,11,163},{8,10,60},{9,\n10,343},{139,10,769},{137,0,455},{133,11,410},{8,0,906},{12,0,700},{12,0,706},{\n140,0,729},{21,11,33},{150,11,40},{7,10,1951},{8,10,765},{8,10,772},{140,10,671}\n,{7,10,108},{8,10,219},{8,10,388},{9,10,639},{9,10,775},{11,10,275},{140,10,464}\n,{5,11,322},{7,11,1941},{8,11,186},{9,11,262},{10,11,187},{14,11,208},{146,11,\n130},{139,0,624},{5,11,227},{8,0,574},{140,11,29},{7,11,1546},{11,11,299},{142,\n11,407},{5,10,15},{6,10,56},{7,10,1758},{8,10,500},{9,10,730},{11,10,331},{13,10\n,150},{142,10,282},{7,11,1395},{8,11,486},{9,11,236},{9,11,878},{10,11,218},{11,\n11,95},{19,11,17},{147,11,31},{135,11,2043},{4,0,354},{146,11,4},{140,11,80},{\n135,0,1558},{134,10,1886},{5,10,205},{6,10,438},{137,10,711},{133,11,522},{133,\n10,534},{7,0,235},{7,0,1475},{15,0,68},{146,0,120},{137,10,691},{4,0,942},{6,0,\n1813},{8,0,917},{10,0,884},{12,0,696},{12,0,717},{12,0,723},{12,0,738},{12,0,749\n},{12,0,780},{16,0,97},{146,0,169},{6,10,443},{8,11,562},{9,10,237},{9,10,571},{\n9,10,695},{10,10,139},{11,10,715},{12,10,417},{141,10,421},{135,0,957},{133,0,\n830},{134,11,1771},{146,0,23},{5,0,496},{6,0,694},{7,0,203},{7,11,1190},{137,11,\n620},{137,11,132},{6,0,547},{134,0,1549},{8,11,258},{9,11,208},{137,11,359},{4,0\n,864},{5,0,88},{137,0,239},{135,11,493},{4,11,317},{135,11,1279},{132,11,477},{4\n,10,578},{5,11,63},{133,11,509},{7,0,650},{135,0,1310},{7,0,1076},{9,0,80},{11,0\n,78},{11,0,421},{11,0,534},{140,0,545},{132,11,288},{5,10,923},{12,0,553},{142,0\n,118},{7,0,274},{11,0,479},{139,0,507},{8,11,89},{8,11,620},{9,11,49},{10,11,774\n},{11,11,628},{12,11,322},{143,11,124},{4,0,497},{135,0,1584},{4,10,924},{7,0,\n261},{7,0,1115},{7,0,1354},{7,0,1404},{7,0,1588},{7,0,1705},{7,0,1902},{9,0,465}\n,{10,0,248},{10,0,349},{10,0,647},{11,0,527},{11,0,660},{11,0,669},{12,0,529},{\n141,0,305},{133,10,665},{136,0,13},{6,0,791},{138,11,120},{7,0,642},{8,0,250},{\n11,0,123},{11,0,137},{13,0,48},{142,0,95},{4,10,265},{7,10,807},{135,10,950},{5,\n10,93},{140,10,267},{135,0,1429},{4,0,949},{10,0,885},{10,0,891},{10,0,900},{10,\n0,939},{12,0,760},{142,0,449},{139,11,366},{132,0,818},{134,11,85},{135,10,994},\n{5,10,233},{5,10,320},{6,10,140},{7,0,330},{136,10,295},{4,0,1004},{8,0,982},{\n136,0,993},{133,10,978},{4,10,905},{6,10,1701},{137,10,843},{10,0,545},{140,0,\n301},{6,0,947},{134,0,1062},{134,0,1188},{4,0,904},{5,0,794},{152,10,6},{134,0,\n1372},{135,11,608},{5,11,279},{6,11,235},{7,11,468},{8,11,446},{9,11,637},{10,11\n,717},{11,11,738},{140,11,514},{132,10,509},{5,11,17},{6,11,371},{137,11,528},{\n132,0,693},{4,11,115},{5,11,669},{6,11,407},{8,11,311},{11,11,10},{141,11,5},{7,\n10,273},{9,11,381},{139,0,377},{135,0,695},{7,0,386},{138,0,713},{135,10,1041},{\n134,0,1291},{6,0,7},{6,0,35},{7,0,147},{7,0,1069},{7,0,1568},{7,0,1575},{7,0,\n1917},{8,0,43},{8,0,208},{9,0,128},{9,0,866},{10,0,20},{11,0,981},{147,0,33},{7,\n0,893},{141,0,424},{139,10,234},{150,11,56},{5,11,779},{5,11,807},{6,11,1655},{\n134,11,1676},{5,10,802},{7,10,2021},{136,10,805},{4,11,196},{5,10,167},{5,10,899\n},{5,11,558},{5,11,949},{6,10,410},{137,10,777},{137,10,789},{134,10,1705},{8,0,\n904},{140,0,787},{6,0,322},{9,0,552},{11,0,274},{13,0,209},{13,0,499},{14,0,85},\n{15,0,126},{145,0,70},{135,10,10},{5,10,11},{6,10,117},{6,10,485},{7,10,1133},{9\n,10,582},{9,10,594},{11,10,21},{11,10,818},{12,10,535},{141,10,86},{4,10,264},{7\n,10,1067},{8,10,204},{8,10,385},{139,10,953},{132,11,752},{138,10,56},{133,10,\n470},{6,0,1808},{8,0,83},{8,0,742},{8,0,817},{9,0,28},{9,0,29},{9,0,885},{10,0,\n387},{11,0,633},{11,0,740},{13,0,235},{13,0,254},{15,0,143},{143,0,146},{140,0,\n49},{134,0,1832},{4,11,227},{5,11,159},{5,11,409},{7,11,80},{10,11,294},{10,11,\n479},{12,11,418},{14,11,50},{14,11,249},{142,11,295},{7,11,1470},{8,11,66},{8,11\n,137},{8,11,761},{9,11,638},{11,11,80},{11,11,212},{11,11,368},{11,11,418},{12,\n11,8},{13,11,15},{16,11,61},{17,11,59},{19,11,28},{148,11,84},{139,10,1015},{138\n,11,468},{135,0,421},{6,0,415},{7,0,1049},{137,0,442},{6,11,38},{7,11,1220},{8,\n11,185},{8,11,256},{9,11,22},{9,11,331},{10,11,738},{11,11,205},{11,11,540},{11,\n11,746},{13,11,399},{13,11,465},{14,11,88},{142,11,194},{139,0,289},{133,10,715}\n,{4,0,110},{10,0,415},{10,0,597},{142,0,206},{4,11,159},{6,11,115},{7,11,252},{7\n,11,257},{7,11,1928},{8,11,69},{9,11,384},{10,11,91},{10,11,615},{12,11,375},{14\n,11,235},{18,11,117},{147,11,123},{5,11,911},{136,11,278},{7,0,205},{7,0,2000},{\n8,10,794},{9,10,400},{10,10,298},{142,10,228},{135,11,1774},{4,11,151},{7,11,\n1567},{8,11,351},{137,11,322},{136,10,724},{133,11,990},{7,0,1539},{7,11,1539},{\n11,0,512},{13,0,205},{19,0,30},{22,0,36},{151,0,19},{5,11,194},{7,11,1662},{9,11\n,90},{140,11,180},{6,10,190},{7,10,768},{135,10,1170},{134,0,1340},{4,0,283},{\n135,0,1194},{133,11,425},{133,11,971},{12,0,549},{14,10,67},{147,10,60},{135,10,\n1023},{134,0,1720},{138,11,587},{5,11,72},{6,11,264},{7,11,21},{7,11,46},{7,11,\n2013},{8,11,215},{8,11,513},{10,11,266},{139,11,22},{5,0,319},{135,0,534},{6,10,\n137},{9,10,75},{9,10,253},{10,10,194},{138,10,444},{6,11,239},{7,0,1180},{7,11,\n118},{10,11,95},{11,11,603},{13,11,443},{14,11,160},{15,11,4},{148,0,112},{134,\n11,431},{5,11,874},{6,11,1677},{11,10,643},{12,10,115},{143,11,0},{134,0,967},{6\n,11,65},{7,11,939},{7,11,1172},{7,11,1671},{9,11,540},{10,11,696},{11,11,265},{\n11,11,732},{11,11,928},{11,11,937},{12,11,399},{13,11,438},{149,11,19},{137,11,\n200},{135,0,1940},{5,10,760},{7,10,542},{8,10,135},{136,10,496},{140,11,44},{7,\n11,1655},{136,11,305},{7,10,319},{7,10,355},{7,10,763},{10,10,389},{145,10,43},{\n136,0,735},{138,10,786},{137,11,19},{132,11,696},{5,0,132},{9,0,486},{9,0,715},{\n10,0,458},{11,0,373},{11,0,668},{11,0,795},{11,0,897},{12,0,272},{12,0,424},{12,\n0,539},{12,0,558},{14,0,245},{14,0,263},{14,0,264},{14,0,393},{142,0,403},{10,0,\n38},{139,0,784},{132,0,838},{4,11,302},{135,11,1766},{133,0,379},{4,11,726},{5,0\n,8},{5,11,630},{6,0,89},{6,0,400},{7,0,1569},{7,0,1623},{7,0,1850},{8,0,218},{8,\n0,422},{9,0,570},{138,0,626},{4,0,1017},{138,0,660},{6,0,387},{7,0,882},{141,0,\n111},{6,0,224},{7,0,877},{137,0,647},{4,10,58},{5,10,286},{6,10,319},{7,10,402},\n{7,10,1254},{7,10,1903},{8,10,356},{140,10,408},{135,0,790},{4,10,389},{9,0,510}\n,{9,10,181},{10,0,53},{10,10,29},{10,10,816},{11,10,311},{11,10,561},{12,10,67},\n{141,10,181},{142,0,458},{6,11,118},{7,11,215},{7,11,1521},{140,11,11},{134,0,\n954},{135,0,394},{134,0,1367},{5,10,373},{133,11,225},{132,0,882},{7,0,1409},{\n135,10,1972},{135,10,1793},{4,11,370},{5,11,756},{135,11,1326},{150,11,13},{7,11\n,354},{10,11,410},{139,11,815},{6,11,1662},{7,11,48},{8,11,771},{10,11,116},{13,\n11,104},{14,11,105},{14,11,184},{15,11,168},{19,11,92},{148,11,68},{7,0,124},{\n136,0,38},{5,0,261},{7,0,78},{7,0,199},{8,0,815},{9,0,126},{10,0,342},{140,0,647\n},{4,0,628},{140,0,724},{7,0,266},{7,10,1651},{8,0,804},{145,10,89},{135,0,208},\n{134,0,1178},{6,0,79},{135,0,1519},{132,10,672},{133,10,737},{136,0,741},{132,11\n,120},{4,0,710},{6,0,376},{134,0,606},{134,0,1347},{134,0,1494},{6,0,850},{6,0,\n1553},{137,0,821},{5,10,145},{134,11,593},{7,0,1311},{140,0,135},{4,0,467},{5,0,\n405},{134,0,544},{5,11,820},{135,11,931},{6,0,100},{7,0,244},{7,0,632},{7,0,1609\n},{8,0,178},{8,0,638},{141,0,58},{4,10,387},{135,10,1288},{6,11,151},{6,11,1675}\n,{7,11,383},{151,11,10},{132,0,481},{135,10,550},{134,0,1378},{6,11,1624},{11,11\n,11},{12,11,422},{13,11,262},{142,11,360},{133,0,791},{4,11,43},{5,11,344},{133,\n11,357},{7,0,1227},{140,0,978},{7,0,686},{8,0,33},{8,0,238},{10,0,616},{11,0,467\n},{11,0,881},{13,0,217},{13,0,253},{142,0,268},{137,0,857},{7,11,148},{8,0,467},\n{8,0,1006},{8,11,284},{141,11,63},{4,10,576},{135,10,1263},{133,11,888},{5,10,\n919},{134,10,1673},{20,10,37},{148,11,37},{132,0,447},{132,11,711},{4,0,128},{5,\n0,415},{6,0,462},{7,0,294},{7,0,578},{10,0,710},{139,0,86},{4,10,82},{5,10,333},\n{5,10,904},{6,10,207},{7,10,325},{7,10,1726},{8,10,101},{10,10,778},{139,10,220}\n,{136,0,587},{137,11,440},{133,10,903},{6,0,427},{7,0,1018},{138,0,692},{4,0,195\n},{135,0,802},{140,10,147},{134,0,1546},{134,0,684},{132,10,705},{136,0,345},{11\n,11,678},{140,11,307},{133,0,365},{134,0,1683},{4,11,65},{5,11,479},{5,11,1004},\n{7,11,1913},{8,11,317},{9,11,302},{10,11,612},{141,11,22},{138,0,472},{4,11,261}\n,{135,11,510},{134,10,90},{142,0,433},{151,0,28},{4,11,291},{7,11,101},{9,11,515\n},{12,11,152},{12,11,443},{13,11,392},{142,11,357},{140,0,997},{5,0,3},{8,0,578}\n,{9,0,118},{10,0,705},{141,0,279},{135,11,1266},{7,10,813},{12,10,497},{141,10,\n56},{133,0,229},{6,10,125},{135,10,1277},{8,0,102},{10,0,578},{10,0,672},{12,0,\n496},{13,0,408},{14,0,121},{17,0,106},{151,10,12},{6,0,866},{134,0,1080},{136,0,\n1022},{4,11,130},{135,11,843},{5,11,42},{5,11,879},{7,11,245},{7,11,324},{7,11,\n1532},{11,11,463},{11,11,472},{13,11,363},{144,11,52},{150,0,55},{4,11,134},{5,\n11,372},{8,0,115},{8,0,350},{9,0,489},{10,0,128},{11,0,306},{12,0,373},{14,0,30}\n,{17,0,79},{147,0,80},{134,0,657},{134,0,933},{135,11,1147},{4,0,230},{133,0,702\n},{134,0,1728},{4,0,484},{18,0,26},{19,0,42},{20,0,43},{21,0,0},{23,0,27},{152,0\n,14},{7,0,185},{135,0,703},{6,0,417},{7,10,1106},{9,10,770},{10,0,618},{11,10,\n112},{140,10,413},{134,0,803},{132,11,644},{134,0,1262},{7,11,540},{12,10,271},{\n145,10,109},{135,11,123},{132,0,633},{134,11,623},{4,11,908},{5,11,359},{5,11,\n508},{6,11,1723},{7,11,343},{7,11,1996},{135,11,2026},{135,0,479},{7,10,304},{9,\n10,646},{9,10,862},{10,0,262},{11,10,696},{12,10,208},{15,10,79},{147,10,108},{4\n,11,341},{135,11,480},{134,0,830},{5,0,70},{5,0,622},{6,0,334},{7,0,1032},{9,0,\n171},{11,0,26},{11,0,213},{11,0,637},{11,0,707},{12,0,202},{12,0,380},{13,0,226}\n,{13,0,355},{14,0,222},{145,0,42},{135,10,981},{143,0,217},{137,11,114},{4,0,23}\n,{4,0,141},{5,0,313},{5,0,1014},{6,0,50},{6,0,51},{7,0,142},{7,0,384},{7,0,559},\n{8,0,640},{9,0,460},{9,0,783},{11,0,741},{12,0,183},{141,0,488},{141,0,360},{7,0\n,1586},{7,11,1995},{8,11,299},{11,11,890},{140,11,674},{132,10,434},{6,10,550},{\n135,0,652},{5,10,553},{7,0,766},{138,10,824},{7,0,737},{8,0,298},{136,10,452},{4\n,11,238},{5,11,503},{6,11,179},{7,11,2003},{8,11,381},{8,11,473},{9,11,149},{10,\n11,183},{15,11,45},{143,11,86},{133,10,292},{5,0,222},{9,0,655},{138,0,534},{138\n,10,135},{4,11,121},{5,11,156},{5,11,349},{9,11,136},{10,11,605},{14,11,342},{\n147,11,107},{137,0,906},{6,0,1013},{134,0,1250},{6,0,1956},{6,0,2009},{8,0,991},\n{144,0,120},{135,11,1192},{138,0,503},{5,0,154},{7,0,1491},{10,0,379},{138,0,485\n},{6,0,1867},{6,0,1914},{6,0,1925},{9,0,917},{9,0,925},{9,0,932},{9,0,951},{9,0,\n1007},{9,0,1013},{12,0,806},{12,0,810},{12,0,814},{12,0,816},{12,0,824},{12,0,\n832},{12,0,837},{12,0,863},{12,0,868},{12,0,870},{12,0,889},{12,0,892},{12,0,900\n},{12,0,902},{12,0,908},{12,0,933},{12,0,942},{12,0,949},{12,0,954},{15,0,175},{\n15,0,203},{15,0,213},{15,0,218},{15,0,225},{15,0,231},{15,0,239},{15,0,248},{15,\n0,252},{18,0,190},{18,0,204},{18,0,215},{18,0,216},{18,0,222},{18,0,225},{18,0,\n230},{18,0,239},{18,0,241},{21,0,42},{21,0,43},{21,0,44},{21,0,45},{21,0,46},{21\n,0,53},{24,0,27},{152,0,31},{133,0,716},{135,0,844},{4,0,91},{5,0,388},{5,0,845}\n,{6,0,206},{6,0,252},{6,0,365},{7,0,136},{7,0,531},{136,0,621},{7,10,393},{10,10\n,603},{139,10,206},{6,11,80},{6,11,1694},{7,11,173},{7,11,1974},{9,11,547},{10,\n11,730},{14,11,18},{150,11,39},{137,0,748},{4,11,923},{134,11,1711},{4,10,912},{\n137,10,232},{7,10,98},{7,10,1973},{136,10,716},{5,10,733},{142,0,103},{132,11,\n595},{5,11,240},{6,11,459},{7,11,12},{7,11,114},{7,11,502},{7,11,1751},{7,11,\n1753},{7,11,1805},{8,11,658},{9,11,1},{11,11,959},{12,0,158},{13,11,446},{14,11,\n211},{18,0,8},{19,0,62},{20,0,6},{22,0,4},{23,0,2},{151,0,9},{135,0,576},{5,0,\n771},{5,0,863},{5,0,898},{6,0,648},{6,0,1632},{6,0,1644},{134,0,1780},{133,0,331\n},{7,11,633},{7,11,905},{7,11,909},{7,11,1538},{9,11,767},{140,11,636},{140,0,\n632},{5,0,107},{7,0,201},{136,0,518},{6,0,446},{6,11,490},{135,0,1817},{9,0,851}\n,{141,0,510},{7,11,250},{8,11,506},{136,11,507},{4,0,504},{137,10,72},{132,11,\n158},{4,11,140},{7,11,362},{8,11,209},{9,11,10},{9,11,160},{9,11,503},{10,11,689\n},{11,11,350},{11,11,553},{11,11,725},{12,11,252},{12,11,583},{13,11,192},{13,11\n,352},{14,11,269},{14,11,356},{148,11,50},{6,11,597},{135,11,1318},{135,10,1454}\n,{5,0,883},{5,0,975},{8,0,392},{148,0,7},{6,11,228},{7,11,1341},{9,11,408},{138,\n11,343},{11,10,600},{11,11,348},{12,11,99},{13,10,245},{18,11,1},{18,11,11},{147\n,11,4},{134,11,296},{5,0,922},{134,0,1707},{132,11,557},{4,11,548},{7,10,164},{7\n,10,1571},{9,10,107},{140,10,225},{7,11,197},{8,11,142},{8,11,325},{9,11,150},{9\n,11,596},{10,11,350},{10,11,353},{11,11,74},{11,11,315},{14,11,423},{143,11,141}\n,{5,0,993},{7,0,515},{137,0,91},{4,0,131},{5,10,484},{5,10,510},{6,10,434},{7,10\n,1000},{7,10,1098},{8,0,200},{136,10,2},{152,0,10},{4,11,62},{5,11,83},{6,11,399\n},{6,11,579},{7,11,692},{7,11,846},{7,11,1015},{7,11,1799},{8,11,403},{9,11,394}\n,{10,11,133},{12,11,4},{12,11,297},{12,11,452},{16,11,81},{18,11,19},{18,11,25},\n{21,11,14},{22,11,12},{151,11,18},{140,11,459},{132,11,177},{7,0,1433},{9,0,365}\n,{137,11,365},{132,10,460},{5,0,103},{5,11,411},{6,0,2004},{7,0,921},{7,11,653},\n{8,0,580},{8,0,593},{8,0,630},{138,0,28},{4,10,932},{133,10,891},{4,0,911},{5,0,\n867},{5,0,1013},{7,0,2034},{8,0,798},{136,0,813},{7,11,439},{10,11,727},{11,11,\n260},{139,11,684},{136,10,625},{5,11,208},{7,11,753},{135,11,1528},{5,0,461},{6,\n10,76},{7,0,1925},{12,0,39},{13,0,265},{141,0,439},{6,0,853},{8,10,92},{137,10,\n221},{5,0,135},{6,0,519},{7,0,1722},{10,0,271},{11,0,261},{145,0,54},{139,11,814\n},{14,0,338},{148,0,81},{4,0,300},{133,0,436},{5,0,419},{5,0,687},{7,0,864},{7,\n11,864},{137,0,470},{5,11,242},{137,0,836},{134,0,1937},{4,10,763},{133,11,953},\n{132,10,622},{132,0,393},{133,10,253},{7,10,546},{8,0,357},{10,0,745},{14,0,426}\n,{17,0,94},{147,0,57},{5,11,615},{146,11,37},{9,10,73},{10,10,110},{14,10,185},{\n145,10,119},{7,10,624},{7,10,916},{10,10,256},{11,0,703},{139,10,87},{133,11,290\n},{5,10,212},{12,10,35},{141,10,382},{132,11,380},{5,11,52},{7,11,277},{9,11,368\n},{139,11,791},{133,0,387},{10,11,138},{139,11,476},{4,0,6},{5,0,708},{136,0,75}\n,{7,0,1351},{9,0,581},{10,0,639},{11,0,453},{140,0,584},{132,0,303},{138,0,772},\n{135,10,1175},{4,0,749},{5,10,816},{6,11,256},{7,11,307},{7,11,999},{7,11,1481},\n{7,11,1732},{7,11,1738},{8,11,265},{9,11,414},{11,11,316},{12,11,52},{13,11,420}\n,{147,11,100},{135,11,1296},{5,10,869},{5,10,968},{6,0,1065},{6,10,1626},{8,10,\n734},{136,10,784},{4,10,542},{6,10,1716},{6,10,1727},{7,10,1082},{7,10,1545},{8,\n10,56},{8,10,118},{8,10,412},{8,10,564},{9,10,888},{9,10,908},{10,10,50},{10,10,\n423},{11,10,685},{11,10,697},{11,10,933},{12,10,299},{13,10,126},{13,10,136},{13\n,10,170},{141,10,190},{134,0,226},{4,0,106},{5,11,723},{7,0,310},{139,0,717},{4,\n10,232},{5,0,890},{5,0,988},{9,10,202},{10,10,474},{140,10,433},{6,0,626},{142,0\n,431},{10,0,706},{150,0,44},{6,10,108},{7,10,1003},{7,10,1181},{8,10,111},{8,10,\n343},{141,0,51},{132,0,698},{5,11,109},{6,11,1784},{7,11,1895},{12,11,296},{140,\n11,302},{134,0,828},{134,10,1712},{138,0,17},{4,10,133},{5,11,216},{7,0,1929},{7\n,10,711},{7,10,1298},{7,10,1585},{7,11,1879},{9,11,141},{9,11,270},{9,11,679},{\n10,11,159},{10,11,553},{11,11,197},{11,11,438},{12,11,538},{12,11,559},{13,11,\n193},{13,11,423},{14,11,144},{14,11,166},{14,11,167},{15,11,67},{147,11,84},{141\n,11,127},{7,11,1872},{137,11,81},{6,10,99},{7,10,1808},{145,10,57},{134,11,391},\n{5,0,689},{6,0,84},{6,10,574},{7,0,1250},{7,10,428},{10,10,669},{11,10,485},{11,\n10,840},{12,10,300},{142,10,250},{7,11,322},{136,11,249},{7,11,432},{135,11,1649\n},{135,10,1871},{137,10,252},{6,11,155},{140,11,234},{7,0,871},{19,0,27},{147,11\n,27},{140,0,498},{5,0,986},{6,0,130},{138,0,823},{6,0,1793},{6,10,323},{7,0,1582\n},{7,10,1564},{8,0,458},{10,0,101},{10,0,318},{10,0,945},{12,0,734},{16,0,104},{\n146,0,177},{5,11,632},{138,11,526},{7,10,461},{8,10,775},{138,0,435},{6,11,144},\n{7,11,948},{7,11,1042},{7,11,1857},{8,11,235},{8,11,461},{9,11,453},{9,11,530},{\n10,11,354},{17,11,77},{19,11,99},{148,11,79},{138,0,966},{7,0,1644},{137,0,129},\n{135,0,997},{136,0,502},{5,11,196},{6,11,486},{7,11,212},{8,11,309},{136,11,346}\n,{7,10,727},{146,10,73},{132,0,823},{132,11,686},{135,0,1927},{4,0,762},{7,0,\n1756},{137,0,98},{136,10,577},{4,11,30},{5,11,43},{24,0,8},{152,11,8},{7,0,1046}\n,{139,0,160},{4,10,413},{5,10,677},{7,0,492},{7,11,492},{8,10,432},{140,10,280},\n{6,0,45},{7,0,433},{8,0,129},{9,0,21},{10,0,392},{11,0,79},{12,0,499},{13,0,199}\n,{141,0,451},{7,0,558},{136,0,353},{4,11,220},{7,11,1535},{9,11,93},{139,11,474}\n,{7,10,646},{7,10,1730},{11,10,446},{141,10,178},{133,0,785},{134,0,1145},{8,0,\n81},{9,0,189},{9,0,201},{11,0,478},{11,0,712},{141,0,338},{5,0,353},{151,0,26},{\n4,10,395},{139,0,762},{134,0,2024},{4,0,611},{133,0,606},{9,10,174},{10,10,164},\n{11,10,440},{11,10,841},{143,10,98},{134,10,426},{10,10,608},{139,10,1002},{138,\n10,250},{6,0,25},{7,0,855},{7,0,1258},{144,0,32},{7,11,1725},{138,11,393},{5,11,\n263},{134,11,414},{5,10,476},{134,0,2011},{4,0,4},{6,11,178},{6,11,1750},{7,0,\n1118},{7,0,1320},{7,0,1706},{8,0,277},{8,11,251},{9,0,622},{9,11,690},{10,0,9},{\n10,11,155},{10,11,196},{10,11,373},{11,0,724},{11,11,698},{12,0,350},{12,0,397},\n{13,0,28},{13,0,159},{13,11,155},{15,0,89},{18,0,5},{19,0,9},{20,0,34},{20,11,93\n},{150,0,47},{5,11,97},{137,11,393},{5,10,76},{6,10,458},{6,10,497},{7,0,764},{7\n,10,868},{9,10,658},{10,10,594},{11,0,461},{11,10,566},{12,0,172},{12,10,338},{\n141,10,200},{134,0,1449},{138,11,40},{134,11,1639},{134,0,1445},{4,10,526},{6,0,\n1168},{7,10,1029},{135,10,1054},{4,11,191},{7,11,934},{8,11,647},{145,11,97},{\n132,10,636},{6,0,233},{7,10,660},{7,10,1124},{17,10,31},{19,10,22},{151,10,14},{\n6,10,1699},{136,11,110},{12,11,246},{15,11,162},{19,11,64},{20,11,8},{20,11,95},\n{22,11,24},{152,11,17},{5,11,165},{9,11,346},{138,11,655},{5,11,319},{135,11,534\n},{134,0,255},{8,11,128},{9,0,216},{139,11,179},{9,0,183},{139,0,286},{11,0,956}\n,{151,0,3},{4,0,536},{7,0,1141},{10,0,723},{139,0,371},{4,10,279},{7,10,301},{\n137,10,362},{5,11,57},{6,11,101},{6,11,1663},{7,0,285},{7,11,132},{7,11,1048},{7\n,11,1154},{7,11,1415},{7,11,1507},{12,11,493},{15,11,105},{151,11,15},{5,11,459}\n,{7,10,1743},{7,11,1073},{8,11,241},{136,11,334},{4,10,178},{133,10,399},{135,0,\n560},{132,0,690},{135,0,1246},{18,0,157},{147,0,63},{10,0,599},{11,0,33},{12,0,\n571},{149,0,1},{6,11,324},{6,11,520},{7,11,338},{7,11,1616},{7,11,1729},{8,11,\n228},{9,11,69},{139,11,750},{7,0,1862},{12,0,491},{12,0,520},{13,0,383},{142,0,\n244},{135,11,734},{134,10,1692},{6,10,202},{7,11,705},{10,0,448},{11,0,630},{12,\n10,360},{17,0,117},{17,10,118},{18,10,27},{148,10,67},{4,11,73},{6,11,612},{7,11\n,927},{7,11,1822},{8,11,217},{9,11,472},{9,11,765},{9,11,766},{10,11,408},{11,11\n,51},{11,11,793},{12,11,266},{15,11,158},{20,11,89},{150,11,32},{4,0,190},{133,0\n,554},{133,0,1001},{5,11,389},{8,11,636},{137,11,229},{5,0,446},{7,10,872},{10,\n10,516},{139,10,167},{137,10,313},{132,10,224},{134,0,1313},{5,10,546},{7,10,35}\n,{8,10,11},{8,10,12},{9,10,315},{9,10,533},{10,10,802},{11,10,166},{12,10,525},{\n142,10,243},{6,0,636},{137,0,837},{5,10,241},{8,10,242},{9,10,451},{10,10,667},{\n11,10,598},{140,10,429},{22,10,46},{150,11,46},{136,11,472},{11,0,278},{142,0,73\n},{141,11,185},{132,0,868},{134,0,972},{4,10,366},{137,10,516},{138,0,1010},{5,\n11,189},{6,10,1736},{7,11,442},{7,11,443},{8,11,281},{12,11,174},{13,11,83},{141\n,11,261},{139,11,384},{6,11,2},{7,11,191},{7,11,446},{7,11,758},{7,11,1262},{7,\n11,1737},{8,11,22},{8,11,270},{8,11,612},{9,11,4},{9,11,167},{9,11,312},{9,11,\n436},{10,11,156},{10,11,216},{10,11,311},{10,11,623},{11,11,72},{11,11,330},{11,\n11,455},{12,11,101},{12,11,321},{12,11,504},{12,11,530},{12,11,543},{13,11,17},{\n13,11,156},{13,11,334},{14,11,48},{15,11,70},{17,11,60},{148,11,64},{6,10,331},{\n136,10,623},{135,0,1231},{132,0,304},{6,11,60},{7,11,670},{7,11,1327},{8,11,411}\n,{8,11,435},{9,11,653},{9,11,740},{10,11,385},{11,11,222},{11,11,324},{11,11,829\n},{140,11,611},{6,11,166},{7,0,506},{7,11,374},{135,11,1174},{14,11,43},{146,11,\n21},{135,11,1694},{135,10,1888},{5,11,206},{134,11,398},{135,11,50},{150,0,26},{\n6,0,53},{6,0,199},{7,0,1408},{8,0,32},{8,0,93},{10,0,397},{10,0,629},{11,0,593},\n{11,0,763},{13,0,326},{145,0,35},{134,0,105},{132,10,394},{4,0,843},{138,0,794},\n{11,0,704},{141,0,396},{5,0,114},{5,0,255},{141,0,285},{6,0,619},{7,0,898},{7,0,\n1092},{7,10,1931},{8,0,485},{18,0,28},{147,0,116},{7,10,574},{7,10,1719},{137,0,\n145},{7,0,2035},{8,0,19},{9,0,89},{138,0,831},{132,10,658},{6,11,517},{7,11,1159\n},{10,11,621},{139,11,192},{7,0,1933},{7,11,1933},{9,10,781},{10,10,144},{11,10,\n385},{13,10,161},{13,10,228},{13,10,268},{148,10,107},{136,10,374},{10,11,223},{\n139,11,645},{135,0,1728},{7,11,64},{7,11,289},{136,11,245},{4,10,344},{6,10,498}\n,{139,10,323},{136,0,746},{135,10,1063},{137,10,155},{4,0,987},{6,0,1964},{6,0,\n1974},{6,0,1990},{136,0,995},{133,11,609},{133,10,906},{134,0,1550},{134,0,874},\n{5,11,129},{6,11,61},{135,11,947},{4,0,1018},{6,0,1938},{6,0,2021},{134,0,2039},\n{132,0,814},{11,0,126},{139,0,287},{134,0,1264},{5,0,955},{136,0,814},{141,11,\n506},{132,11,314},{6,0,981},{139,11,1000},{5,0,56},{8,0,892},{8,0,915},{140,0,\n776},{148,0,100},{10,0,4},{10,0,13},{11,0,638},{148,0,57},{148,11,74},{4,10,616}\n,{133,0,738},{133,11,637},{136,10,692},{133,0,758},{132,10,305},{137,11,590},{5,\n11,280},{135,11,1226},{134,11,494},{135,0,1112},{133,11,281},{5,10,214},{7,10,\n603},{8,10,611},{9,10,686},{10,10,88},{11,10,459},{11,10,496},{12,10,463},{12,10\n,590},{13,0,44},{142,0,214},{139,0,328},{135,11,1064},{137,0,133},{7,0,168},{13,\n0,196},{141,0,237},{134,10,1703},{134,0,1152},{135,0,1245},{5,0,110},{6,0,169},{\n6,0,1702},{7,0,400},{8,0,538},{9,0,184},{9,0,524},{140,0,218},{6,0,1816},{10,0,\n871},{12,0,769},{140,0,785},{132,11,630},{7,11,33},{7,11,120},{8,11,489},{9,11,\n319},{10,11,820},{11,11,1004},{12,11,379},{13,11,117},{13,11,412},{14,11,25},{15\n,11,52},{15,11,161},{16,11,47},{149,11,2},{6,0,133},{8,0,413},{9,0,353},{139,0,\n993},{145,10,19},{4,11,937},{133,11,801},{134,0,978},{6,0,93},{6,0,1508},{7,0,\n1422},{7,0,1851},{8,0,673},{9,0,529},{140,0,43},{4,10,737},{6,0,317},{10,0,512},\n{11,10,294},{12,10,60},{12,10,437},{13,10,64},{13,10,380},{142,10,430},{7,11,\n1591},{9,0,371},{144,11,43},{6,10,1758},{8,10,520},{9,10,345},{9,10,403},{142,10\n,350},{5,0,526},{10,10,242},{138,10,579},{9,0,25},{10,0,467},{138,0,559},{5,10,\n139},{7,10,1168},{138,10,539},{4,0,335},{135,0,942},{140,0,754},{132,11,365},{11\n,0,182},{142,0,195},{142,11,29},{5,11,7},{139,11,774},{4,11,746},{135,11,1090},{\n8,0,39},{10,0,773},{11,0,84},{12,0,205},{142,0,1},{5,0,601},{5,0,870},{5,11,360}\n,{136,11,237},{132,0,181},{136,0,370},{134,0,1652},{4,10,107},{7,10,613},{8,0,\n358},{8,10,439},{8,10,504},{9,10,501},{10,10,383},{139,10,477},{132,10,229},{137\n,11,785},{4,0,97},{5,0,147},{6,0,286},{7,0,1362},{141,0,176},{4,10,903},{6,0,537\n},{7,0,788},{135,0,1816},{140,10,71},{6,0,743},{134,0,1223},{6,0,375},{7,0,169},\n{7,0,254},{7,11,1493},{136,0,780},{4,10,47},{6,10,373},{7,0,1714},{7,10,452},{7,\n10,543},{7,10,1856},{9,10,6},{11,10,257},{139,10,391},{6,0,896},{136,0,1003},{\n135,0,1447},{137,11,341},{5,10,980},{134,10,1754},{145,11,22},{4,11,277},{5,11,\n608},{6,11,493},{7,11,457},{140,11,384},{7,10,536},{7,10,1331},{136,10,143},{140\n,0,744},{7,11,27},{135,11,316},{5,10,19},{6,10,533},{146,0,126},{4,0,788},{5,11,\n552},{5,11,586},{5,11,676},{6,11,448},{8,11,244},{11,0,41},{11,11,1},{11,11,41},\n{13,11,3},{16,11,54},{17,11,4},{146,11,13},{4,0,985},{4,11,401},{6,0,1801},{137,\n11,264},{5,10,395},{5,10,951},{134,10,1776},{5,0,629},{135,0,1549},{11,10,663},{\n12,10,210},{13,10,166},{13,10,310},{14,10,373},{147,10,43},{9,11,543},{10,11,524\n},{11,11,30},{12,11,524},{14,11,315},{16,11,18},{20,11,26},{148,11,65},{4,11,205\n},{5,11,623},{7,11,104},{136,11,519},{5,0,293},{134,0,601},{7,11,579},{9,11,41},\n{9,11,244},{9,11,669},{10,11,5},{11,11,861},{11,11,951},{139,11,980},{132,11,717\n},{132,10,695},{7,10,497},{9,10,387},{147,10,81},{132,0,420},{142,0,37},{6,0,\n1134},{6,0,1900},{12,0,830},{12,0,878},{12,0,894},{15,0,221},{143,0,245},{132,11\n,489},{7,0,1570},{140,0,542},{8,0,933},{136,0,957},{5,10,284},{6,0,1371},{6,10,\n49},{6,10,350},{7,0,31},{7,10,377},{7,10,1693},{8,0,373},{8,10,678},{9,10,161},{\n9,10,585},{9,10,671},{9,10,839},{11,10,912},{141,10,427},{135,11,892},{4,0,325},\n{138,0,125},{139,11,47},{132,10,597},{138,0,323},{6,0,1547},{7,11,1605},{9,11,\n473},{11,11,962},{146,11,139},{139,10,908},{7,11,819},{9,11,26},{9,11,392},{10,\n11,152},{10,11,226},{11,11,19},{12,11,276},{12,11,426},{12,11,589},{13,11,460},{\n15,11,97},{19,11,48},{148,11,104},{135,11,51},{4,0,718},{135,0,1216},{6,0,1896},\n{6,0,1905},{6,0,1912},{7,11,761},{7,11,1051},{9,0,947},{9,0,974},{9,11,545},{12,\n0,809},{12,0,850},{12,0,858},{12,0,874},{12,0,887},{12,0,904},{12,0,929},{12,0,\n948},{12,0,952},{15,0,198},{15,0,206},{15,0,220},{15,0,227},{15,0,247},{18,0,188\n},{21,0,48},{21,0,50},{24,0,25},{152,0,29},{5,0,124},{5,0,144},{6,0,548},{7,0,15\n},{7,0,153},{137,0,629},{135,11,606},{135,10,2014},{7,10,2007},{9,10,101},{9,10,\n450},{9,11,46},{10,10,66},{10,10,842},{11,10,536},{140,10,587},{6,0,75},{7,0,\n1531},{8,0,416},{9,0,240},{9,0,275},{10,0,100},{11,0,658},{11,0,979},{12,0,86},{\n14,0,207},{15,0,20},{143,0,25},{5,0,141},{5,0,915},{6,0,1783},{7,0,211},{7,0,698\n},{7,0,1353},{9,0,83},{9,0,281},{10,0,376},{10,0,431},{11,0,543},{12,0,664},{13,\n0,280},{13,0,428},{14,0,61},{14,0,128},{17,0,52},{145,0,81},{132,11,674},{135,0,\n533},{149,0,6},{132,11,770},{133,0,538},{5,11,79},{7,11,1027},{7,11,1477},{139,\n11,52},{139,10,62},{4,0,338},{133,0,400},{5,11,789},{134,11,195},{4,11,251},{4,\n11,688},{7,11,513},{7,11,1284},{9,11,87},{138,11,365},{134,10,1766},{6,0,0},{7,0\n,84},{11,0,895},{145,0,11},{139,0,892},{4,0,221},{5,0,659},{7,0,697},{7,0,1211},\n{138,0,284},{133,0,989},{133,11,889},{4,11,160},{5,11,330},{7,11,1434},{136,11,\n174},{6,10,1665},{7,10,256},{7,10,1388},{10,10,499},{139,10,670},{4,10,22},{5,10\n,10},{7,0,848},{136,10,97},{138,0,507},{133,10,481},{4,0,188},{135,0,805},{5,0,\n884},{6,0,732},{139,0,991},{135,11,968},{11,11,636},{15,11,145},{17,11,34},{19,\n11,50},{151,11,20},{6,10,134},{7,0,959},{7,10,437},{9,10,37},{14,10,285},{14,10,\n371},{144,0,60},{7,10,486},{8,10,155},{11,10,93},{140,10,164},{134,0,1653},{5,10\n,591},{135,0,337},{5,11,374},{6,0,1989},{8,0,922},{136,0,978},{132,0,638},{138,0\n,500},{133,11,731},{5,10,380},{5,10,650},{136,10,310},{138,11,381},{4,10,364},{7\n,10,1156},{7,10,1187},{137,10,409},{137,11,224},{140,0,166},{134,10,482},{4,11,\n626},{5,11,642},{6,11,425},{10,11,202},{139,11,141},{4,10,781},{6,10,487},{7,10,\n926},{8,10,263},{139,10,500},{135,0,418},{4,10,94},{135,10,1265},{136,0,760},{\n132,10,417},{136,11,835},{5,10,348},{134,10,522},{6,0,1277},{134,0,1538},{139,11\n,541},{135,11,1597},{5,11,384},{8,11,455},{140,11,48},{136,0,770},{5,11,264},{\n134,11,184},{4,0,89},{5,0,489},{6,0,315},{7,0,553},{7,0,1745},{138,0,243},{4,10,\n408},{4,10,741},{135,10,500},{134,0,1396},{133,0,560},{6,0,1658},{9,0,3},{10,0,\n154},{11,0,641},{13,0,85},{13,0,201},{141,0,346},{135,11,1595},{5,11,633},{6,11,\n28},{7,11,219},{135,11,1323},{9,11,769},{140,11,185},{135,11,785},{7,11,359},{8,\n11,243},{140,11,175},{138,0,586},{6,10,73},{135,0,1271},{132,11,105},{4,0,166},{\n5,0,505},{134,0,1670},{133,10,576},{4,11,324},{138,11,104},{142,10,231},{6,0,637\n},{7,10,1264},{7,10,1678},{11,10,945},{12,10,341},{12,10,471},{12,10,569},{23,11\n,21},{151,11,23},{8,11,559},{141,11,109},{134,0,1947},{7,0,445},{8,0,307},{8,0,\n704},{10,0,41},{10,0,439},{11,0,237},{11,0,622},{140,0,201},{135,11,963},{135,0,\n1977},{4,0,189},{5,0,713},{136,0,57},{138,0,371},{135,10,538},{132,0,552},{5,10,\n413},{134,0,883},{4,11,758},{134,0,923},{138,11,215},{136,10,495},{7,10,54},{8,\n10,312},{10,10,191},{10,10,614},{140,10,567},{7,11,351},{139,11,128},{6,10,468},\n{7,0,875},{7,10,1478},{8,10,530},{142,10,290},{135,0,1788},{5,11,918},{145,0,49}\n,{12,11,398},{20,11,39},{21,11,11},{150,11,41},{6,10,484},{7,10,822},{138,0,661}\n,{135,0,1945},{134,0,794},{137,10,900},{135,10,1335},{6,10,1724},{135,10,2022},{\n132,11,340},{134,0,1135},{4,0,784},{133,0,745},{5,0,84},{134,0,163},{133,0,410},\n{4,0,976},{5,11,985},{7,11,509},{7,11,529},{145,11,96},{132,10,474},{134,0,703},\n{135,11,1919},{5,0,322},{8,0,186},{9,0,262},{10,0,187},{142,0,208},{135,10,1504}\n,{133,0,227},{5,10,305},{9,0,560},{141,0,208},{132,11,247},{7,0,1395},{8,0,486},\n{9,0,236},{9,0,878},{10,0,218},{11,0,95},{19,0,17},{147,0,31},{7,0,2043},{8,0,\n672},{141,0,448},{4,11,184},{5,11,390},{6,11,337},{7,11,23},{7,11,494},{7,11,618\n},{7,11,1456},{8,11,27},{8,11,599},{10,11,153},{139,11,710},{135,0,466},{135,10,\n1236},{4,10,480},{6,0,167},{6,10,302},{6,10,1642},{7,0,186},{7,0,656},{7,10,837}\n,{7,10,1547},{7,10,1657},{8,10,429},{9,10,228},{10,0,643},{13,10,289},{13,10,343\n},{147,10,101},{134,0,1428},{134,0,1440},{5,0,412},{7,10,278},{10,10,739},{11,10\n,708},{141,10,348},{134,0,1118},{136,0,562},{148,11,46},{9,0,316},{139,0,256},{\n134,0,1771},{135,0,1190},{137,0,132},{10,11,227},{11,11,497},{11,11,709},{140,11\n,415},{143,0,66},{6,11,360},{7,11,1664},{136,11,478},{144,10,28},{4,0,317},{135,\n0,1279},{5,0,63},{133,0,509},{136,11,699},{145,10,36},{134,0,1475},{11,11,343},{\n142,11,127},{132,11,739},{132,0,288},{135,11,1757},{8,0,89},{8,0,620},{9,0,608},\n{11,0,628},{12,0,322},{143,0,124},{134,0,1225},{4,11,67},{5,11,422},{6,10,363},{\n7,0,1189},{7,10,1955},{7,11,1037},{7,11,1289},{7,11,1555},{8,10,725},{9,11,741},\n{145,11,108},{134,0,1468},{6,0,689},{134,0,1451},{138,0,120},{151,0,1},{137,10,\n805},{142,0,329},{5,10,813},{135,10,2046},{135,0,226},{138,11,96},{5,10,712},{7,\n0,1855},{11,10,17},{13,10,321},{144,10,67},{6,10,320},{7,10,781},{7,10,1921},{9,\n0,461},{9,10,55},{10,10,186},{10,10,273},{10,10,664},{10,10,801},{11,10,996},{11\n,10,997},{13,10,157},{142,10,170},{8,10,271},{8,11,203},{11,11,823},{11,11,846},\n{12,11,482},{13,11,133},{13,11,277},{13,11,302},{13,11,464},{14,11,205},{142,11,\n221},{135,0,1346},{4,11,449},{133,11,718},{134,0,85},{7,10,103},{7,10,863},{11,\n10,184},{14,0,299},{145,10,62},{4,11,355},{6,11,311},{9,11,256},{138,11,404},{\n137,10,659},{138,11,758},{133,11,827},{5,11,64},{140,11,581},{134,0,1171},{4,11,\n442},{7,11,1047},{7,11,1352},{135,11,1643},{132,0,980},{5,11,977},{6,11,288},{7,\n11,528},{135,11,1065},{5,0,279},{6,0,235},{7,0,468},{8,0,446},{9,0,637},{10,0,\n717},{11,0,738},{140,0,514},{132,0,293},{11,10,337},{142,10,303},{136,11,285},{4\n,11,254},{5,0,17},{6,0,371},{9,0,528},{140,0,364},{5,10,77},{7,10,1455},{10,10,\n843},{147,10,73},{150,0,5},{132,10,458},{6,11,12},{7,11,1219},{145,11,73},{135,\n10,1420},{6,10,109},{138,10,382},{135,11,125},{6,10,330},{7,10,1084},{139,10,142\n},{6,11,369},{6,11,502},{7,11,1036},{8,11,348},{9,11,452},{10,11,26},{11,11,224}\n,{11,11,387},{11,11,772},{12,11,95},{12,11,629},{13,11,195},{13,11,207},{13,11,\n241},{14,11,260},{14,11,270},{143,11,140},{132,11,269},{5,11,480},{7,11,532},{7,\n11,1197},{7,11,1358},{8,11,291},{11,11,349},{142,11,396},{150,0,48},{10,0,601},{\n13,0,353},{141,0,376},{5,0,779},{5,0,807},{6,0,1655},{134,0,1676},{142,11,223},{\n4,0,196},{5,0,558},{133,0,949},{148,11,15},{135,11,1764},{134,0,1322},{132,0,752\n},{139,0,737},{135,11,657},{136,11,533},{135,0,412},{4,0,227},{5,0,159},{5,0,409\n},{7,0,80},{8,0,556},{10,0,479},{12,0,418},{14,0,50},{14,0,123},{14,0,192},{14,0\n,249},{14,0,295},{143,0,27},{7,0,1470},{8,0,66},{8,0,137},{8,0,761},{9,0,638},{\n11,0,80},{11,0,212},{11,0,368},{11,0,418},{12,0,8},{13,0,15},{16,0,61},{17,0,59}\n,{19,0,28},{148,0,84},{135,10,1985},{4,11,211},{4,11,332},{5,11,335},{6,11,238},\n{7,11,269},{7,11,811},{7,11,1797},{8,10,122},{8,11,836},{9,11,507},{141,11,242},\n{6,0,683},{134,0,1252},{4,0,873},{132,10,234},{134,0,835},{6,0,38},{7,0,1220},{8\n,0,185},{8,0,256},{9,0,22},{9,0,331},{10,0,738},{11,0,205},{11,0,540},{11,0,746}\n,{13,0,465},{14,0,88},{142,0,194},{138,0,986},{5,11,1009},{12,11,582},{146,11,\n131},{4,0,159},{6,0,115},{7,0,252},{7,0,257},{7,0,1928},{8,0,69},{9,0,384},{10,0\n,91},{10,0,615},{12,0,375},{14,0,235},{18,0,117},{147,0,123},{133,0,911},{136,0,\n278},{5,10,430},{5,10,932},{6,10,131},{7,10,417},{9,10,522},{11,10,314},{141,10,\n390},{14,10,149},{14,10,399},{143,10,57},{4,0,151},{7,0,1567},{136,0,749},{5,11,\n228},{6,11,203},{7,11,156},{8,11,347},{137,11,265},{132,10,507},{10,0,989},{140,\n0,956},{133,0,990},{5,0,194},{6,0,927},{7,0,1662},{9,0,90},{140,0,564},{4,10,343\n},{133,10,511},{133,0,425},{7,10,455},{138,10,591},{4,0,774},{7,11,476},{7,11,\n1592},{138,11,87},{5,0,971},{135,10,1381},{5,11,318},{147,11,121},{5,11,291},{7,\n11,765},{9,11,389},{140,11,548},{134,10,575},{4,0,827},{12,0,646},{12,0,705},{12\n,0,712},{140,0,714},{139,0,752},{137,0,662},{5,0,72},{6,0,264},{7,0,21},{7,0,46}\n,{7,0,2013},{8,0,215},{8,0,513},{10,0,266},{139,0,22},{139,11,522},{6,0,239},{7,\n0,118},{10,0,95},{11,0,603},{13,0,443},{14,0,160},{143,0,4},{6,0,431},{134,0,669\n},{7,10,1127},{7,10,1572},{10,10,297},{10,10,422},{11,10,764},{11,10,810},{12,10\n,264},{13,10,102},{13,10,300},{13,10,484},{14,10,147},{14,10,229},{17,10,71},{18\n,10,118},{147,10,120},{5,0,874},{6,0,1677},{10,11,525},{11,11,82},{143,0,0},{6,0\n,65},{7,0,939},{7,0,1172},{7,0,1671},{9,0,540},{10,0,696},{11,0,265},{11,0,732},\n{11,0,928},{11,0,937},{141,0,438},{134,0,1350},{136,11,547},{132,11,422},{5,11,\n355},{145,11,0},{137,11,905},{5,0,682},{135,0,1887},{132,0,809},{4,0,696},{133,\n11,865},{6,0,1074},{6,0,1472},{14,10,35},{142,10,191},{5,11,914},{134,11,1625},{\n133,11,234},{135,11,1383},{137,11,780},{132,10,125},{4,0,726},{133,0,630},{8,0,\n802},{136,0,838},{132,10,721},{6,0,1337},{7,0,776},{8,10,145},{147,0,56},{132,0,\n970},{7,10,792},{8,10,147},{10,10,821},{139,10,1021},{139,10,970},{8,0,940},{137\n,0,797},{135,11,1312},{7,10,1999},{7,11,816},{7,11,1241},{9,0,248},{9,11,283},{9\n,11,520},{10,0,400},{10,11,213},{10,11,307},{10,11,463},{10,11,671},{10,11,746},\n{11,11,401},{11,11,794},{12,11,517},{18,11,107},{147,11,115},{6,0,1951},{134,0,\n2040},{135,11,339},{5,10,168},{5,10,930},{8,10,74},{9,10,623},{12,10,500},{12,10\n,579},{13,0,41},{143,0,93},{6,0,118},{7,0,215},{7,0,1521},{140,0,11},{6,10,220},\n{7,10,1101},{141,10,105},{6,11,421},{7,11,61},{7,11,1540},{10,11,11},{138,11,501\n},{7,0,615},{138,0,251},{140,11,631},{135,0,1044},{6,10,19},{7,10,1413},{139,10,\n428},{133,0,225},{7,10,96},{8,10,401},{8,10,703},{137,10,896},{145,10,116},{6,11\n,102},{7,11,72},{15,11,142},{147,11,67},{7,10,1961},{7,10,1965},{8,10,702},{136,\n10,750},{7,10,2030},{8,10,150},{8,10,737},{12,10,366},{151,11,30},{4,0,370},{5,0\n,756},{7,0,1326},{135,11,823},{8,10,800},{9,10,148},{9,10,872},{9,10,890},{11,10\n,309},{11,10,1001},{13,10,267},{141,10,323},{6,0,1662},{7,0,48},{8,0,771},{10,0,\n116},{13,0,104},{14,0,105},{14,0,184},{15,0,168},{19,0,92},{148,0,68},{7,11,1870\n},{138,0,209},{7,11,68},{8,11,48},{8,11,88},{8,11,582},{8,11,681},{9,11,373},{9,\n11,864},{11,11,157},{11,11,336},{11,11,843},{148,11,27},{134,0,930},{4,11,88},{5\n,11,137},{5,11,174},{5,11,777},{6,11,1664},{6,11,1725},{7,11,77},{7,11,426},{7,\n11,1317},{7,11,1355},{8,11,126},{8,11,563},{9,11,523},{9,11,750},{10,11,310},{10\n,11,836},{11,11,42},{11,11,318},{11,11,731},{12,11,68},{12,11,92},{12,11,507},{\n12,11,692},{13,11,81},{13,11,238},{13,11,374},{18,11,138},{19,11,78},{19,11,111}\n,{20,11,55},{20,11,77},{148,11,92},{4,11,938},{135,11,1831},{5,10,547},{7,10,424\n},{8,11,617},{138,11,351},{6,0,1286},{6,11,1668},{7,11,1499},{8,11,117},{9,11,\n314},{138,11,174},{6,0,759},{6,0,894},{7,11,707},{139,11,563},{4,0,120},{135,0,\n1894},{9,0,385},{149,0,17},{138,0,429},{133,11,403},{5,0,820},{135,0,931},{5,10,\n133},{138,0,199},{6,0,151},{6,0,1675},{7,0,383},{151,0,10},{6,0,761},{136,10,187\n},{8,0,365},{10,10,0},{10,10,818},{139,10,988},{4,11,44},{5,11,311},{6,11,156},{\n7,11,639},{7,11,762},{7,11,1827},{9,11,8},{9,11,462},{148,11,83},{4,11,346},{7,\n11,115},{9,11,180},{9,11,456},{138,11,363},{136,10,685},{7,0,1086},{145,0,46},{6\n,0,1624},{11,0,11},{12,0,422},{13,0,444},{142,0,360},{6,0,1020},{6,0,1260},{134,\n0,1589},{4,0,43},{5,0,344},{5,0,357},{14,0,472},{150,0,58},{6,0,1864},{6,0,1866}\n,{6,0,1868},{6,0,1869},{6,0,1874},{6,0,1877},{6,0,1903},{6,0,1911},{9,0,920},{9,\n0,921},{9,0,924},{9,0,946},{9,0,959},{9,0,963},{9,0,970},{9,0,997},{9,0,1008},{9\n,0,1017},{12,0,795},{12,0,797},{12,0,798},{12,0,800},{12,0,803},{12,0,811},{12,0\n,820},{12,0,821},{12,0,839},{12,0,841},{12,0,848},{12,0,911},{12,0,921},{12,0,\n922},{12,0,925},{12,0,937},{12,0,944},{12,0,945},{12,0,953},{15,0,184},{15,0,191\n},{15,0,199},{15,0,237},{15,0,240},{15,0,243},{15,0,246},{18,0,203},{21,0,40},{\n21,0,52},{21,0,57},{24,0,23},{24,0,28},{152,0,30},{134,0,725},{145,11,58},{133,0\n,888},{137,10,874},{4,0,711},{8,10,774},{10,10,670},{140,10,51},{144,11,40},{6,\n11,185},{7,11,1899},{139,11,673},{137,10,701},{137,0,440},{4,11,327},{5,11,478},\n{7,11,1332},{8,11,753},{140,11,227},{4,10,127},{5,10,350},{6,10,356},{8,10,426},\n{9,10,572},{10,10,247},{139,10,312},{5,11,1020},{133,11,1022},{4,11,103},{133,11\n,401},{6,0,1913},{6,0,1926},{6,0,1959},{9,0,914},{9,0,939},{9,0,952},{9,0,979},{\n9,0,990},{9,0,998},{9,0,1003},{9,0,1023},{12,0,827},{12,0,834},{12,0,845},{12,0,\n912},{12,0,935},{12,0,951},{15,0,172},{15,0,174},{18,0,198},{149,0,63},{4,11,499\n},{5,0,958},{5,0,987},{135,11,1421},{6,10,59},{6,10,1762},{7,0,885},{9,10,603},{\n141,10,397},{10,11,62},{141,11,164},{4,0,847},{135,0,326},{11,0,276},{142,0,293}\n,{4,0,65},{4,11,96},{5,0,479},{5,0,1004},{7,0,1913},{8,0,317},{9,0,302},{10,0,\n612},{141,0,22},{4,0,261},{135,0,510},{135,0,1514},{6,10,111},{7,10,4},{8,10,163\n},{8,10,776},{138,10,566},{4,0,291},{9,0,515},{12,0,152},{12,0,443},{13,0,392},{\n142,0,357},{7,11,399},{135,11,1492},{4,0,589},{139,0,282},{6,11,563},{135,10,\n1994},{5,10,297},{135,10,1038},{4,0,130},{7,0,843},{135,0,1562},{5,0,42},{5,0,\n879},{7,0,245},{7,0,324},{7,0,1532},{11,0,463},{11,0,472},{13,0,363},{144,0,52},\n{4,0,134},{133,0,372},{133,0,680},{136,10,363},{6,0,1997},{8,0,935},{136,0,977},\n{4,0,810},{135,0,1634},{135,10,1675},{4,11,910},{5,11,832},{135,0,1390},{7,10,\n808},{8,11,266},{139,11,578},{132,0,644},{4,0,982},{138,0,867},{132,10,280},{135\n,0,540},{140,10,54},{135,0,123},{134,0,1978},{4,10,421},{133,10,548},{6,0,623},{\n136,0,789},{4,0,908},{5,0,359},{5,0,508},{6,0,1723},{7,0,343},{7,0,1996},{135,0,\n2026},{134,0,1220},{4,0,341},{135,0,480},{6,10,254},{9,10,109},{138,10,103},{134\n,0,888},{8,11,528},{137,11,348},{4,11,20},{5,11,616},{7,0,1995},{8,0,299},{11,0,\n890},{140,0,674},{135,11,1094},{134,10,1630},{4,0,238},{5,0,503},{6,0,179},{7,0,\n2003},{8,0,381},{8,0,473},{9,0,149},{10,0,788},{15,0,45},{15,0,86},{20,0,110},{\n150,0,57},{133,10,671},{4,11,26},{5,11,429},{6,11,245},{7,11,704},{7,11,1379},{\n135,11,1474},{4,0,121},{5,0,156},{5,0,349},{9,0,431},{10,0,605},{142,0,342},{7,\n11,943},{139,11,614},{132,10,889},{132,11,621},{7,10,1382},{7,10,1910},{135,11,\n1382},{132,10,627},{133,10,775},{133,11,542},{133,11,868},{136,11,433},{6,0,1373\n},{7,0,1011},{11,10,362},{11,10,948},{140,10,388},{6,0,80},{7,0,173},{7,11,1495}\n,{9,0,547},{10,0,730},{14,0,18},{150,0,39},{6,0,1694},{135,0,1974},{140,0,196},{\n4,0,923},{6,0,507},{6,0,1711},{7,10,451},{8,10,389},{12,10,490},{13,10,16},{13,\n10,215},{13,10,351},{18,10,132},{147,10,125},{6,0,646},{134,0,1047},{135,10,841}\n,{136,10,566},{6,0,1611},{135,0,1214},{139,0,926},{132,11,525},{132,0,595},{5,0,\n240},{6,0,459},{7,0,12},{7,0,114},{7,0,949},{7,0,1753},{7,0,1805},{8,0,658},{9,0\n,1},{11,0,959},{141,0,446},{5,10,912},{134,10,1695},{132,0,446},{7,11,62},{12,11\n,45},{147,11,112},{5,10,236},{6,10,572},{8,10,492},{11,10,618},{144,10,56},{5,10\n,190},{136,10,318},{135,10,1376},{4,11,223},{6,11,359},{11,11,3},{13,11,108},{14\n,11,89},{144,11,22},{132,11,647},{134,0,490},{134,0,491},{134,0,1584},{135,11,\n685},{138,11,220},{7,0,250},{136,0,507},{132,0,158},{4,0,140},{7,0,362},{8,0,209\n},{9,0,10},{9,0,160},{9,0,503},{9,0,614},{10,0,689},{11,0,327},{11,0,553},{11,0,\n725},{11,0,767},{12,0,252},{12,0,583},{13,0,192},{14,0,269},{14,0,356},{148,0,50\n},{19,0,1},{19,0,26},{150,0,9},{132,11,109},{6,0,228},{7,0,1341},{9,0,408},{138,\n0,343},{4,0,373},{5,0,283},{6,0,480},{7,0,609},{10,0,860},{138,0,878},{6,0,779},\n{134,0,1209},{4,0,557},{7,11,263},{7,11,628},{136,11,349},{132,0,548},{7,0,197},\n{8,0,142},{8,0,325},{9,0,150},{9,0,596},{10,0,350},{10,0,353},{11,0,74},{11,0,\n315},{12,0,662},{12,0,681},{14,0,423},{143,0,141},{4,11,40},{10,11,67},{11,11,\n117},{11,11,768},{139,11,935},{7,11,992},{8,11,301},{9,11,722},{12,11,63},{13,11\n,29},{14,11,161},{143,11,18},{6,0,1490},{138,11,532},{5,0,580},{7,0,378},{7,0,\n674},{7,0,1424},{15,0,83},{15,11,83},{16,0,11},{144,11,11},{6,0,1057},{6,0,1335}\n,{7,10,85},{7,10,247},{8,10,585},{10,0,316},{138,10,163},{4,0,169},{5,0,83},{6,0\n,399},{6,0,579},{6,0,1513},{7,0,692},{7,0,846},{7,0,1015},{7,0,1799},{8,0,403},{\n9,0,394},{10,0,133},{12,0,4},{12,0,297},{12,0,452},{16,0,81},{18,0,25},{21,0,14}\n,{22,0,12},{151,0,18},{134,0,1106},{7,0,1546},{11,0,299},{142,0,407},{134,0,1192\n},{132,0,177},{5,0,411},{135,0,653},{7,0,439},{10,0,727},{11,0,260},{139,0,684},\n{138,10,145},{147,10,83},{5,0,208},{7,0,753},{135,0,1528},{137,11,617},{135,10,\n1922},{135,11,825},{4,10,124},{10,10,457},{11,0,422},{11,10,121},{11,10,169},{11\n,10,870},{12,10,214},{13,0,389},{14,10,187},{143,10,77},{11,0,615},{11,11,615},{\n15,0,58},{143,11,58},{9,0,618},{138,0,482},{6,0,1952},{6,0,1970},{142,0,505},{7,\n10,1193},{135,11,1838},{133,0,242},{135,10,1333},{6,10,107},{7,10,638},{7,10,\n1632},{137,10,396},{133,0,953},{5,10,370},{134,10,1756},{5,11,28},{6,11,204},{10\n,11,320},{10,11,583},{13,11,502},{14,11,72},{14,11,274},{14,11,312},{14,11,344},\n{15,11,159},{16,11,62},{16,11,69},{17,11,30},{18,11,42},{18,11,53},{18,11,84},{\n18,11,140},{19,11,68},{19,11,85},{20,11,5},{20,11,45},{20,11,101},{22,11,7},{150\n,11,20},{4,11,558},{6,11,390},{7,11,162},{7,11,689},{9,11,360},{138,11,653},{11,\n0,802},{141,0,67},{133,10,204},{133,0,290},{5,10,970},{134,10,1706},{132,0,380},\n{5,0,52},{7,0,277},{9,0,368},{139,0,791},{5,11,856},{6,11,1672},{6,11,1757},{6,\n11,1781},{7,11,1150},{7,11,1425},{7,11,1453},{140,11,513},{5,11,92},{7,10,3},{10\n,11,736},{140,11,102},{4,0,112},{5,0,653},{5,10,483},{5,10,685},{6,10,489},{7,10\n,1204},{136,10,394},{132,10,921},{5,10,1007},{134,0,1028},{5,11,590},{9,11,213},\n{145,11,91},{135,10,1696},{10,0,138},{139,0,476},{5,0,725},{5,0,727},{135,0,1811\n},{4,0,979},{6,0,1821},{6,0,1838},{8,0,876},{8,0,883},{8,0,889},{8,0,893},{8,0,\n895},{10,0,934},{12,0,720},{14,0,459},{148,0,123},{135,11,551},{4,0,38},{6,0,435\n},{7,0,307},{7,0,999},{7,0,1481},{7,0,1732},{7,0,1738},{8,0,371},{9,0,414},{11,0\n,316},{12,0,52},{13,0,420},{147,0,100},{135,0,1296},{132,10,712},{134,10,1629},{\n133,0,723},{134,0,651},{136,11,191},{9,11,791},{10,11,93},{11,11,301},{16,11,13}\n,{17,11,23},{18,11,135},{19,11,12},{20,11,1},{20,11,12},{148,11,14},{136,11,503}\n,{6,11,466},{135,11,671},{6,0,1200},{134,0,1330},{135,0,1255},{134,0,986},{5,0,\n109},{6,0,1784},{7,0,1895},{12,0,296},{140,0,302},{135,11,983},{133,10,485},{134\n,0,660},{134,0,800},{4,10,285},{5,0,216},{5,0,294},{5,10,317},{6,0,591},{6,10,\n301},{7,0,1879},{7,10,7},{8,10,153},{9,0,141},{9,0,270},{9,0,679},{10,0,159},{10\n,10,766},{11,0,197},{11,0,438},{11,10,468},{12,0,538},{12,0,559},{12,10,467},{13\n,10,143},{14,0,144},{14,0,167},{143,0,67},{136,0,945},{134,0,1090},{137,0,81},{\n12,11,468},{19,11,96},{148,11,24},{134,0,391},{138,11,241},{7,0,322},{136,0,249}\n,{134,0,1412},{135,11,795},{5,0,632},{138,0,526},{136,10,819},{6,0,144},{7,0,948\n},{7,0,1042},{7,11,954},{8,0,235},{8,0,461},{9,0,453},{9,0,796},{10,0,354},{145,\n0,77},{139,10,917},{6,0,940},{134,0,1228},{4,0,362},{7,0,52},{135,0,303},{6,11,\n549},{8,11,34},{8,11,283},{9,11,165},{138,11,475},{7,11,370},{7,11,1007},{7,11,\n1177},{135,11,1565},{5,11,652},{5,11,701},{135,11,449},{5,0,196},{6,0,486},{7,0,\n212},{8,0,309},{136,0,346},{6,10,1719},{6,10,1735},{7,10,2016},{7,10,2020},{8,10\n,837},{137,10,852},{6,11,159},{6,11,364},{7,11,516},{7,11,1439},{137,11,518},{\n135,0,1912},{135,0,1290},{132,0,686},{141,11,151},{138,0,625},{136,0,706},{138,\n10,568},{139,0,412},{4,0,30},{133,0,43},{8,10,67},{138,10,419},{7,0,967},{141,0,\n11},{12,0,758},{14,0,441},{142,0,462},{10,10,657},{14,10,297},{142,10,361},{139,\n10,729},{4,0,220},{135,0,1535},{7,11,501},{9,11,111},{10,11,141},{11,11,332},{13\n,11,43},{13,11,429},{14,11,130},{14,11,415},{145,11,102},{4,0,950},{6,0,1859},{7\n,0,11},{8,0,873},{12,0,710},{12,0,718},{12,0,748},{12,0,765},{148,0,124},{5,11,\n149},{5,11,935},{136,11,233},{142,11,291},{134,0,1579},{7,0,890},{8,10,51},{9,10\n,868},{10,10,833},{12,10,481},{12,10,570},{148,10,106},{141,0,2},{132,10,445},{\n136,11,801},{135,0,1774},{7,0,1725},{138,0,393},{5,0,263},{134,0,414},{132,11,\n322},{133,10,239},{7,0,456},{7,10,1990},{8,10,130},{139,10,720},{137,0,818},{5,\n10,123},{6,10,530},{7,10,348},{135,10,1419},{135,10,2024},{6,0,178},{6,0,1750},{\n8,0,251},{9,0,690},{10,0,155},{10,0,196},{10,0,373},{11,0,698},{13,0,155},{148,0\n,93},{5,0,97},{137,0,393},{134,0,674},{11,0,223},{140,0,168},{132,10,210},{139,\n11,464},{6,0,1639},{146,0,159},{139,11,2},{7,0,934},{8,0,647},{17,0,97},{19,0,59\n},{150,0,2},{132,0,191},{4,10,430},{5,0,165},{7,11,357},{9,0,346},{10,0,655},{\n139,0,885},{133,0,877},{5,10,213},{133,11,406},{8,0,128},{139,0,179},{6,11,69},{\n135,11,117},{135,0,1297},{11,11,43},{13,11,72},{141,11,142},{135,11,1830},{142,0\n,164},{5,0,57},{6,0,101},{6,0,586},{6,0,1663},{7,0,132},{7,0,1154},{7,0,1415},{7\n,0,1507},{12,0,493},{15,0,105},{151,0,15},{5,0,459},{7,0,1073},{8,0,241},{136,0,\n334},{133,11,826},{133,10,108},{5,10,219},{10,11,132},{11,11,191},{11,11,358},{\n139,11,460},{6,0,324},{6,0,520},{7,0,338},{7,0,1729},{8,0,228},{139,0,750},{4,10\n,193},{5,10,916},{7,10,364},{10,10,398},{10,10,726},{11,10,317},{11,10,626},{12,\n10,142},{12,10,288},{12,10,678},{13,10,313},{15,10,113},{18,10,114},{21,0,30},{\n150,0,53},{6,11,110},{135,11,1681},{135,0,910},{6,10,241},{7,10,907},{8,10,832},\n{9,10,342},{10,10,729},{11,10,284},{11,10,445},{11,10,651},{11,10,863},{13,10,\n398},{146,10,99},{5,11,1000},{7,0,705},{7,11,733},{9,0,734},{137,11,583},{4,0,73\n},{6,0,612},{7,0,927},{7,0,1822},{8,0,217},{9,0,765},{9,0,766},{10,0,408},{11,0,\n51},{11,0,793},{12,0,266},{15,0,158},{20,0,89},{150,0,32},{4,11,297},{6,11,529},\n{7,0,1330},{7,11,152},{7,11,713},{7,11,1845},{8,11,710},{8,11,717},{140,11,639},\n{5,0,389},{136,0,636},{134,0,1409},{4,10,562},{9,10,254},{139,10,879},{134,0,893\n},{132,10,786},{4,11,520},{135,11,575},{136,0,21},{140,0,721},{136,0,959},{7,11,\n1428},{7,11,1640},{9,11,169},{9,11,182},{9,11,367},{9,11,478},{9,11,506},{9,11,\n551},{9,11,648},{9,11,651},{9,11,697},{9,11,705},{9,11,725},{9,11,787},{9,11,794\n},{10,11,198},{10,11,214},{10,11,267},{10,11,275},{10,11,456},{10,11,551},{10,11\n,561},{10,11,613},{10,11,627},{10,11,668},{10,11,675},{10,11,691},{10,11,695},{\n10,11,707},{10,11,715},{11,11,183},{11,11,201},{11,11,244},{11,11,262},{11,11,\n352},{11,11,439},{11,11,493},{11,11,572},{11,11,591},{11,11,608},{11,11,611},{11\n,11,646},{11,11,674},{11,11,711},{11,11,751},{11,11,761},{11,11,776},{11,11,785}\n,{11,11,850},{11,11,853},{11,11,862},{11,11,865},{11,11,868},{11,11,898},{11,11,\n902},{11,11,903},{11,11,910},{11,11,932},{11,11,942},{11,11,957},{11,11,967},{11\n,11,972},{12,11,148},{12,11,195},{12,11,220},{12,11,237},{12,11,318},{12,11,339}\n,{12,11,393},{12,11,445},{12,11,450},{12,11,474},{12,11,509},{12,11,533},{12,11,\n591},{12,11,594},{12,11,597},{12,11,621},{12,11,633},{12,11,642},{13,11,59},{13,\n11,60},{13,11,145},{13,11,239},{13,11,250},{13,11,273},{13,11,329},{13,11,344},{\n13,11,365},{13,11,372},{13,11,387},{13,11,403},{13,11,414},{13,11,456},{13,11,\n478},{13,11,483},{13,11,489},{14,11,55},{14,11,57},{14,11,81},{14,11,90},{14,11,\n148},{14,11,239},{14,11,266},{14,11,321},{14,11,326},{14,11,327},{14,11,330},{14\n,11,347},{14,11,355},{14,11,401},{14,11,411},{14,11,414},{14,11,416},{14,11,420}\n,{15,11,61},{15,11,74},{15,11,87},{15,11,88},{15,11,94},{15,11,96},{15,11,116},{\n15,11,149},{15,11,154},{16,11,50},{16,11,63},{16,11,73},{17,11,2},{17,11,66},{17\n,11,92},{17,11,103},{17,11,112},{18,11,50},{18,11,54},{18,11,82},{18,11,86},{18,\n11,90},{18,11,111},{18,11,115},{18,11,156},{19,11,40},{19,11,79},{20,11,78},{149\n,11,22},{137,11,170},{134,0,1433},{135,11,1307},{139,11,411},{5,0,189},{7,0,442}\n,{7,0,443},{8,0,281},{12,0,174},{141,0,261},{6,10,216},{7,10,901},{7,10,1343},{\n136,10,493},{5,11,397},{6,11,154},{7,10,341},{7,11,676},{8,11,443},{8,11,609},{9\n,11,24},{9,11,325},{10,11,35},{11,10,219},{11,11,535},{11,11,672},{11,11,1018},{\n12,11,637},{144,11,30},{6,0,2},{7,0,191},{7,0,446},{7,0,1262},{7,0,1737},{8,0,22\n},{8,0,270},{8,0,612},{9,0,4},{9,0,312},{9,0,436},{9,0,626},{10,0,216},{10,0,311\n},{10,0,521},{10,0,623},{11,0,72},{11,0,330},{11,0,455},{12,0,321},{12,0,504},{\n12,0,530},{12,0,543},{13,0,17},{13,0,156},{13,0,334},{14,0,131},{17,0,60},{148,0\n,64},{7,0,354},{10,0,410},{139,0,815},{139,10,130},{7,10,1734},{137,11,631},{10,\n10,115},{11,10,420},{12,0,425},{13,10,404},{14,10,346},{15,0,112},{143,10,54},{6\n,0,60},{6,0,166},{7,0,374},{7,0,670},{7,0,1327},{8,0,411},{8,0,435},{9,0,653},{9\n,0,740},{10,0,385},{11,0,222},{11,0,324},{11,0,829},{140,0,611},{7,0,1611},{13,0\n,14},{15,0,44},{19,0,13},{148,0,76},{133,11,981},{4,11,56},{7,11,1791},{8,11,607\n},{8,11,651},{11,11,465},{11,11,835},{12,11,337},{141,11,480},{5,10,1011},{6,0,\n1478},{136,10,701},{139,0,596},{5,0,206},{134,0,398},{4,10,54},{5,10,666},{7,10,\n1039},{7,10,1130},{9,10,195},{138,10,302},{7,0,50},{9,11,158},{138,11,411},{135,\n11,1120},{6,0,517},{6,10,1669},{7,0,1159},{10,0,621},{139,0,192},{4,0,592},{6,0,\n600},{135,0,1653},{10,0,223},{139,0,645},{136,11,139},{7,0,64},{136,0,245},{142,\n0,278},{6,11,622},{135,11,1030},{136,0,604},{134,0,1502},{138,0,265},{141,11,168\n},{7,0,1763},{140,0,310},{7,10,798},{139,11,719},{7,11,160},{10,11,624},{142,11,\n279},{132,11,363},{7,10,122},{9,10,259},{10,10,84},{11,10,470},{12,10,541},{141,\n10,379},{5,0,129},{6,0,61},{135,0,947},{134,0,1356},{135,11,1191},{13,0,505},{\n141,0,506},{5,10,82},{5,10,131},{7,10,1755},{8,10,31},{9,10,168},{9,10,764},{11,\n0,1000},{139,10,869},{134,0,966},{134,10,605},{134,11,292},{5,11,177},{6,11,616}\n,{7,11,827},{9,11,525},{138,11,656},{135,11,1486},{138,11,31},{5,10,278},{137,10\n,68},{4,10,163},{5,10,201},{5,10,307},{5,10,310},{6,10,335},{7,10,284},{136,10,\n165},{6,0,839},{135,10,1660},{136,10,781},{6,10,33},{135,10,1244},{133,0,637},{4\n,11,161},{133,11,631},{137,0,590},{7,10,1953},{136,10,720},{5,0,280},{7,0,1226},\n{138,10,203},{134,0,1386},{5,0,281},{6,0,1026},{6,10,326},{7,10,677},{137,10,425\n},{7,11,1557},{135,11,1684},{135,0,1064},{9,11,469},{9,11,709},{12,11,512},{14,\n11,65},{145,11,12},{134,0,917},{10,11,229},{11,11,73},{11,11,376},{139,11,433},{\n7,0,555},{7,10,1316},{7,10,1412},{7,10,1839},{9,0,192},{9,10,589},{11,10,241},{\n11,10,676},{11,10,811},{11,10,891},{12,10,140},{12,10,346},{12,10,479},{13,0,30}\n,{13,0,49},{13,10,381},{14,10,188},{15,0,150},{16,0,76},{18,10,30},{148,0,52},{\n149,0,15},{6,0,1882},{6,0,1883},{6,0,1897},{9,0,945},{9,0,1014},{9,0,1020},{12,0\n,823},{12,0,842},{12,0,866},{12,0,934},{15,0,242},{146,0,208},{6,0,965},{134,0,\n1499},{7,0,33},{7,0,120},{8,0,489},{9,0,319},{10,0,820},{11,0,1004},{12,0,379},{\n12,0,679},{13,0,117},{13,0,412},{14,0,25},{15,0,52},{15,0,161},{16,0,47},{149,0,\n2},{6,11,558},{7,11,651},{8,11,421},{9,11,0},{138,11,34},{4,0,937},{5,0,801},{5,\n10,358},{7,0,473},{7,10,1184},{10,10,662},{13,10,212},{13,10,304},{13,10,333},{\n145,10,98},{132,0,877},{6,0,693},{134,0,824},{132,0,365},{7,11,1832},{138,11,374\n},{5,0,7},{139,0,774},{4,0,734},{5,0,662},{134,0,430},{4,0,746},{135,0,1090},{5,\n0,360},{8,0,237},{10,0,231},{147,0,124},{138,11,348},{6,11,6},{7,11,81},{7,11,\n771},{7,11,1731},{9,11,405},{138,11,421},{6,0,740},{137,0,822},{133,10,946},{7,0\n,1485},{136,0,929},{7,10,411},{8,10,631},{9,10,323},{10,10,355},{11,10,491},{12,\n10,143},{12,10,402},{13,10,73},{14,10,408},{15,10,107},{146,10,71},{135,10,590},\n{5,11,881},{133,11,885},{150,11,25},{4,0,852},{5,11,142},{134,11,546},{7,10,1467\n},{8,10,328},{10,10,544},{11,10,955},{13,10,320},{145,10,83},{9,0,17},{10,0,291}\n,{11,10,511},{13,10,394},{14,10,298},{14,10,318},{146,10,103},{5,11,466},{11,11,\n571},{12,11,198},{13,11,283},{14,11,186},{15,11,21},{143,11,103},{134,0,1001},{4\n,11,185},{5,11,257},{5,11,839},{5,11,936},{7,11,171},{9,11,399},{10,11,258},{10,\n11,395},{10,11,734},{11,11,1014},{12,11,23},{13,11,350},{14,11,150},{147,11,6},{\n143,0,35},{132,0,831},{5,10,835},{134,10,483},{4,0,277},{5,0,608},{6,0,493},{7,0\n,457},{7,11,404},{7,11,1377},{7,11,1430},{7,11,2017},{8,11,149},{8,11,239},{8,11\n,512},{8,11,793},{8,11,818},{9,11,474},{9,11,595},{10,11,122},{10,11,565},{10,11\n,649},{10,11,783},{11,11,239},{11,11,295},{11,11,447},{11,11,528},{11,11,639},{\n11,11,800},{11,11,936},{12,0,384},{12,11,25},{12,11,73},{12,11,77},{12,11,157},{\n12,11,316},{12,11,390},{12,11,391},{12,11,394},{12,11,395},{12,11,478},{12,11,\n503},{12,11,592},{12,11,680},{13,11,50},{13,11,53},{13,11,132},{13,11,198},{13,\n11,275},{13,11,322},{13,11,415},{14,11,71},{14,11,257},{14,11,395},{15,11,71},{\n15,11,136},{17,11,123},{18,11,93},{147,11,58},{134,0,1351},{7,0,27},{135,0,316},\n{136,11,712},{136,0,984},{133,0,552},{137,0,264},{132,0,401},{6,0,710},{6,0,1111\n},{134,0,1343},{134,0,1211},{9,0,543},{10,0,524},{11,0,108},{11,0,653},{12,0,524\n},{13,0,123},{14,0,252},{16,0,18},{19,0,38},{20,0,26},{20,0,65},{21,0,3},{151,0,\n11},{4,0,205},{5,0,623},{7,0,104},{8,0,519},{137,0,716},{132,10,677},{4,11,377},\n{152,11,13},{135,11,1673},{7,0,579},{9,0,41},{9,0,244},{9,0,669},{10,0,5},{11,0,\n861},{11,0,951},{139,0,980},{132,0,717},{136,0,1011},{132,0,805},{4,11,180},{135\n,11,1906},{132,10,777},{132,10,331},{132,0,489},{4,11,491},{5,10,747},{134,0,\n1024},{135,11,1182},{4,11,171},{138,11,234},{4,11,586},{7,11,1186},{138,11,631},\n{135,0,892},{135,11,336},{9,11,931},{10,11,334},{148,11,71},{137,0,473},{6,0,864\n},{11,11,926},{140,0,659},{7,0,819},{9,0,26},{9,0,392},{10,0,152},{10,0,226},{11\n,0,19},{12,0,276},{12,0,426},{12,0,589},{13,0,460},{15,0,97},{19,0,48},{148,0,\n104},{135,0,51},{133,10,326},{4,10,691},{146,10,16},{9,0,130},{10,10,680},{10,10\n,793},{11,0,765},{141,10,357},{133,11,765},{6,10,32},{7,10,385},{7,10,757},{7,10\n,1916},{8,0,229},{8,10,94},{8,10,711},{9,10,541},{10,10,162},{10,10,795},{11,10,\n989},{11,10,1010},{12,10,14},{142,10,308},{7,11,474},{137,11,578},{132,0,674},{\n132,0,770},{5,0,79},{7,0,1027},{7,0,1477},{139,0,52},{133,11,424},{134,0,1666},{\n6,0,409},{6,10,349},{6,10,1682},{7,10,1252},{8,10,112},{8,11,714},{9,10,435},{9,\n10,668},{10,10,290},{10,10,319},{10,10,815},{11,10,180},{11,10,837},{12,10,240},\n{13,10,152},{13,10,219},{142,10,158},{5,0,789},{134,0,195},{4,0,251},{4,0,688},{\n7,0,513},{135,0,1284},{132,10,581},{9,11,420},{10,11,269},{10,11,285},{10,11,576\n},{11,11,397},{13,11,175},{145,11,90},{6,10,126},{7,10,573},{8,10,397},{142,10,\n44},{132,11,429},{133,0,889},{4,0,160},{5,0,330},{7,0,1434},{136,0,174},{7,11,18\n},{7,11,699},{7,11,1966},{8,11,752},{9,11,273},{9,11,412},{9,11,703},{10,11,71},\n{10,11,427},{10,11,508},{146,11,97},{6,0,872},{134,0,899},{133,10,926},{134,0,\n1126},{134,0,918},{4,11,53},{5,11,186},{135,11,752},{7,0,268},{136,0,569},{134,0\n,1224},{6,0,1361},{7,10,1232},{137,10,531},{8,11,575},{10,11,289},{139,11,319},{\n133,10,670},{132,11,675},{133,0,374},{135,10,1957},{133,0,731},{11,0,190},{11,11\n,190},{15,0,49},{143,11,49},{4,0,626},{5,0,506},{5,0,642},{6,0,425},{10,0,202},{\n139,0,141},{137,0,444},{7,10,242},{135,10,1942},{6,11,209},{8,11,468},{9,11,210}\n,{11,11,36},{12,11,28},{12,11,630},{13,11,21},{13,11,349},{14,11,7},{145,11,13},\n{4,11,342},{135,11,1179},{5,10,834},{7,10,1202},{8,10,14},{9,10,481},{137,10,880\n},{4,11,928},{133,11,910},{4,11,318},{4,11,496},{7,11,856},{139,11,654},{136,0,\n835},{7,0,1526},{138,10,465},{151,0,17},{135,0,477},{4,10,357},{6,10,172},{7,10,\n143},{137,10,413},{6,0,1374},{138,0,994},{4,10,590},{146,0,76},{7,0,287},{8,0,\n355},{9,0,293},{137,0,743},{134,0,1389},{7,11,915},{8,11,247},{147,11,0},{4,11,\n202},{5,11,382},{6,11,454},{7,11,936},{7,11,1803},{8,11,758},{9,11,375},{9,11,\n895},{10,11,743},{10,11,792},{11,11,978},{11,11,1012},{142,11,109},{5,0,384},{8,\n0,455},{140,0,48},{132,11,390},{5,10,169},{7,10,333},{136,10,45},{5,0,264},{134,\n0,184},{138,11,791},{133,11,717},{132,10,198},{6,11,445},{7,11,332},{137,11,909}\n,{136,0,1001},{4,10,24},{5,10,140},{5,10,185},{7,10,1500},{11,10,565},{139,10,\n838},{134,11,578},{5,0,633},{6,0,28},{135,0,1323},{132,0,851},{136,11,267},{7,0,\n359},{8,0,243},{140,0,175},{4,10,334},{133,10,593},{141,11,87},{136,11,766},{10,\n0,287},{10,11,287},{12,0,138},{140,11,138},{4,0,105},{132,0,740},{140,10,116},{\n134,0,857},{135,11,1841},{6,0,1402},{137,0,819},{132,11,584},{132,10,709},{133,\n10,897},{5,0,224},{13,0,174},{146,0,52},{135,10,1840},{4,10,608},{133,10,497},{\n139,11,60},{4,0,758},{135,0,1649},{4,11,226},{4,11,326},{135,11,1770},{5,11,426}\n,{8,11,30},{9,11,2},{11,11,549},{147,11,122},{135,10,2039},{6,10,540},{136,10,\n136},{4,0,573},{4,10,897},{5,10,786},{136,0,655},{7,0,351},{139,0,128},{133,10,\n999},{4,10,299},{135,10,1004},{133,0,918},{132,11,345},{4,11,385},{7,11,265},{\n135,11,587},{133,10,456},{136,10,180},{6,0,687},{134,0,1537},{4,11,347},{5,11,\n423},{5,11,996},{135,11,1329},{132,10,755},{7,11,1259},{9,11,125},{11,11,65},{\n140,11,285},{5,11,136},{6,11,136},{136,11,644},{134,0,1525},{4,0,1009},{135,0,\n1139},{139,10,338},{132,0,340},{135,10,1464},{8,0,847},{10,0,861},{10,0,876},{10\n,0,889},{10,0,922},{10,0,929},{10,0,933},{12,0,784},{140,0,791},{139,0,176},{9,\n11,134},{10,11,2},{10,11,27},{10,11,333},{11,11,722},{143,11,1},{4,11,433},{133,\n11,719},{5,0,985},{7,0,509},{7,0,529},{145,0,96},{132,0,615},{4,10,890},{5,10,\n805},{5,10,819},{5,10,961},{6,10,396},{6,10,1631},{6,10,1678},{7,10,1967},{7,10,\n2041},{9,10,630},{11,10,8},{11,10,1019},{12,10,176},{13,10,225},{14,10,292},{149\n,10,24},{135,0,1919},{134,0,1131},{144,11,21},{144,11,51},{135,10,1815},{4,0,247\n},{7,10,1505},{10,10,190},{10,10,634},{11,10,792},{12,10,358},{140,10,447},{5,10\n,0},{6,10,536},{7,10,604},{13,10,445},{145,10,126},{4,0,184},{5,0,390},{6,0,337}\n,{7,0,23},{7,0,494},{7,0,618},{7,0,1456},{8,0,27},{8,0,599},{10,0,153},{139,0,\n710},{6,10,232},{6,10,412},{7,10,1074},{8,10,9},{8,10,157},{8,10,786},{9,10,196}\n,{9,10,352},{9,10,457},{10,10,337},{11,10,232},{11,10,877},{12,10,480},{140,10,\n546},{7,10,958},{141,0,38},{4,10,382},{136,10,579},{4,10,212},{135,10,1206},{4,\n11,555},{8,11,536},{138,11,288},{11,11,139},{139,11,171},{9,11,370},{138,11,90},\n{132,0,1015},{134,0,1088},{5,10,655},{135,11,977},{134,0,1585},{17,10,67},{147,\n10,74},{10,0,227},{11,0,497},{11,0,709},{140,0,415},{6,0,360},{7,0,1664},{136,0,\n478},{6,10,231},{7,0,95},{136,10,423},{140,11,65},{4,11,257},{135,11,2031},{135,\n11,1768},{133,10,300},{139,11,211},{136,0,699},{6,10,237},{7,10,611},{8,10,100},\n{9,10,416},{11,10,335},{12,10,173},{146,10,101},{14,0,26},{146,0,150},{6,0,581},\n{135,0,1119},{135,10,1208},{132,0,739},{6,11,83},{6,11,1733},{135,11,1389},{137,\n0,869},{4,0,67},{5,0,422},{7,0,1037},{7,0,1289},{7,0,1555},{9,0,741},{145,0,108}\n,{133,10,199},{12,10,427},{146,10,38},{136,0,464},{142,0,42},{8,11,501},{9,11,\n696},{138,0,96},{134,11,592},{4,0,512},{4,0,966},{5,0,342},{6,0,1855},{8,0,869},\n{8,0,875},{8,0,901},{144,0,26},{8,0,203},{11,0,823},{11,0,846},{12,0,482},{13,0,\n277},{13,0,302},{13,0,464},{14,0,205},{142,0,221},{4,0,449},{133,0,718},{7,11,\n1718},{9,11,95},{9,11,274},{10,11,279},{10,11,317},{10,11,420},{11,11,303},{11,\n11,808},{12,11,134},{12,11,367},{13,11,149},{13,11,347},{14,11,349},{14,11,406},\n{18,11,22},{18,11,89},{18,11,122},{147,11,47},{133,11,26},{4,0,355},{6,0,311},{9\n,0,256},{138,0,404},{132,11,550},{6,10,312},{6,10,1715},{10,0,758},{10,10,584},{\n11,10,546},{11,10,692},{12,10,259},{12,10,295},{13,10,46},{141,10,154},{136,11,\n822},{4,11,902},{5,0,827},{5,11,809},{6,11,122},{135,11,896},{5,0,64},{140,0,581\n},{4,0,442},{6,0,739},{7,0,1047},{7,0,1352},{7,0,1643},{7,11,1911},{9,11,449},{\n10,11,192},{138,11,740},{135,11,262},{132,10,588},{133,11,620},{4,11,34},{5,0,\n977},{5,11,574},{6,0,288},{7,0,528},{7,11,279},{7,11,1624},{136,11,601},{4,10,\n231},{5,10,61},{6,0,1375},{6,10,104},{7,10,729},{7,10,964},{7,10,1658},{140,10,\n414},{6,10,263},{138,10,757},{132,10,320},{4,0,254},{5,11,332},{7,0,1309},{135,\n11,1309},{6,11,261},{8,11,182},{139,11,943},{132,10,225},{6,0,12},{135,0,1219},{\n4,0,275},{6,11,1721},{12,0,376},{141,11,490},{4,11,933},{133,11,880},{4,10,405},\n{6,0,951},{6,0,1109},{6,0,1181},{7,0,154},{7,10,817},{14,10,58},{17,10,37},{146,\n10,124},{5,10,974},{134,0,1520},{134,0,1753},{6,0,369},{6,0,502},{7,0,1036},{8,0\n,348},{9,0,452},{10,0,26},{11,0,224},{11,0,387},{11,0,772},{12,0,95},{12,0,629},\n{13,0,195},{13,0,207},{13,0,241},{14,0,260},{14,0,270},{143,0,140},{132,0,269},{\n5,0,480},{7,0,532},{7,0,1197},{7,0,1358},{8,0,291},{11,0,349},{142,0,396},{5,10,\n235},{7,10,1239},{11,10,131},{140,10,370},{7,10,956},{7,10,1157},{7,10,1506},{7,\n10,1606},{7,10,1615},{7,10,1619},{7,10,1736},{7,10,1775},{8,10,590},{9,10,324},{\n9,10,736},{9,10,774},{9,10,776},{9,10,784},{10,10,567},{10,10,708},{11,10,518},{\n11,10,613},{11,10,695},{11,10,716},{11,10,739},{11,10,770},{11,10,771},{11,10,\n848},{11,10,857},{11,10,931},{11,10,947},{12,10,326},{12,10,387},{12,10,484},{12\n,10,528},{12,10,552},{12,10,613},{13,10,189},{13,10,256},{13,10,340},{13,10,432}\n,{13,10,436},{13,10,440},{13,10,454},{14,10,174},{14,10,220},{14,10,284},{14,10,\n390},{145,10,121},{8,11,598},{9,11,664},{138,11,441},{9,10,137},{138,10,221},{\n133,11,812},{148,0,15},{134,0,1341},{4,11,137},{6,0,1017},{7,11,1178},{135,11,\n1520},{7,10,390},{138,10,140},{7,11,1260},{135,11,1790},{137,11,191},{135,10,\n1144},{6,0,1810},{7,0,657},{8,0,886},{10,0,857},{14,0,440},{144,0,96},{6,11,1661\n},{7,11,1975},{7,11,2009},{7,11,2011},{136,0,533},{6,0,1453},{134,10,464},{132,\n11,715},{5,10,407},{11,10,204},{11,10,243},{11,10,489},{12,10,293},{19,10,37},{\n20,10,73},{150,10,38},{133,11,703},{4,0,211},{5,10,325},{7,0,1483},{8,10,5},{8,\n10,227},{9,10,105},{10,10,585},{140,10,614},{4,0,332},{5,0,335},{6,0,238},{7,0,\n269},{7,0,811},{7,0,1797},{8,0,836},{9,0,507},{141,0,242},{5,11,89},{7,11,1915},\n{9,11,185},{9,11,235},{9,11,496},{10,11,64},{10,11,270},{10,11,403},{10,11,469},\n{10,11,529},{10,11,590},{11,11,140},{11,11,860},{13,11,1},{13,11,422},{14,11,341\n},{14,11,364},{17,11,93},{18,11,113},{19,11,97},{147,11,113},{133,11,695},{5,11,\n6},{6,10,621},{6,11,183},{7,11,680},{7,11,978},{7,11,1013},{7,11,1055},{12,11,\n230},{13,10,504},{13,11,172},{16,0,19},{146,11,29},{136,0,156},{133,0,1009},{6,\n11,29},{139,11,63},{134,0,820},{134,10,218},{7,10,454},{7,10,782},{8,10,768},{\n140,10,686},{5,0,228},{6,0,203},{7,0,156},{8,0,347},{9,0,265},{15,11,8},{18,0,39\n},{18,11,39},{20,0,54},{20,11,54},{21,0,31},{21,11,31},{22,0,3},{22,11,3},{23,0,\n0},{151,11,0},{7,0,1131},{135,0,1468},{144,10,0},{134,0,1276},{10,10,676},{140,\n10,462},{132,11,311},{134,11,1740},{7,11,170},{8,11,90},{8,11,177},{8,11,415},{\n11,11,714},{142,11,281},{134,10,164},{6,0,1792},{138,0,849},{150,10,50},{5,0,291\n},{5,0,318},{7,0,765},{8,11,522},{9,0,389},{12,0,548},{142,11,328},{11,11,91},{\n13,11,129},{15,11,101},{145,11,125},{4,11,494},{6,11,74},{7,11,44},{7,11,407},{8\n,11,551},{12,11,17},{15,11,5},{148,11,11},{4,11,276},{133,11,296},{6,10,343},{7,\n10,195},{7,11,1777},{9,10,226},{10,10,197},{10,10,575},{11,10,502},{139,10,899},\n{10,0,525},{139,0,82},{4,11,7},{5,11,90},{5,11,158},{6,11,542},{7,11,221},{7,11,\n1574},{9,11,490},{10,11,540},{11,11,443},{11,11,757},{142,0,453},{135,0,666},{22\n,10,29},{150,11,29},{4,0,422},{147,10,8},{5,0,355},{145,0,0},{6,0,1873},{7,11,\n588},{9,0,918},{9,11,175},{138,11,530},{143,11,31},{7,10,1125},{9,10,143},{11,0,\n165},{14,10,405},{150,10,21},{9,0,260},{137,0,905},{5,11,872},{6,11,57},{6,11,\n479},{6,11,562},{7,11,471},{7,11,1060},{9,11,447},{9,11,454},{141,11,6},{138,11,\n704},{133,0,865},{5,0,914},{134,0,1625},{133,0,234},{5,11,31},{6,11,614},{7,0,\n1383},{145,11,61},{7,11,1200},{138,11,460},{6,11,424},{135,11,1866},{136,0,306},\n{5,10,959},{12,11,30},{13,11,148},{14,11,87},{14,11,182},{16,11,42},{18,11,92},{\n148,11,70},{6,0,1919},{6,0,1921},{9,0,923},{9,0,930},{9,0,941},{9,0,949},{9,0,\n987},{9,0,988},{9,0,992},{12,0,802},{12,0,815},{12,0,856},{12,0,885},{12,0,893},\n{12,0,898},{12,0,919},{12,0,920},{12,0,941},{12,0,947},{15,0,183},{15,0,185},{15\n,0,189},{15,0,197},{15,0,202},{15,0,233},{15,11,156},{18,0,218},{18,0,219},{146,\n0,233},{135,10,1759},{136,10,173},{5,11,13},{6,11,142},{13,0,163},{13,0,180},{18\n,0,78},{148,0,35},{134,10,266},{6,11,97},{7,11,116},{8,11,322},{8,11,755},{9,11,\n548},{10,11,714},{11,11,884},{141,11,324},{135,0,1312},{9,0,814},{137,11,676},{\n133,0,707},{135,0,1493},{6,0,421},{7,0,61},{7,0,1540},{10,0,11},{138,0,501},{7,\n11,866},{7,11,1163},{12,0,733},{140,0,766},{137,0,341},{142,0,98},{145,11,115},{\n135,11,1111},{136,10,300},{136,0,1014},{8,11,1},{9,11,112},{138,11,326},{132,11,\n730},{5,11,488},{6,11,527},{7,11,489},{7,11,1636},{8,11,121},{8,11,144},{8,11,\n359},{9,11,193},{9,11,241},{9,11,336},{9,11,882},{11,11,266},{11,11,372},{11,11,\n944},{12,11,401},{140,11,641},{6,0,971},{134,0,1121},{6,0,102},{7,0,72},{15,0,\n142},{147,0,67},{151,0,30},{135,0,823},{134,0,1045},{5,10,427},{5,10,734},{7,10,\n478},{136,10,52},{7,0,1930},{11,10,217},{142,10,165},{6,0,1512},{135,0,1870},{9,\n11,31},{10,11,244},{10,11,699},{12,11,149},{141,11,497},{133,11,377},{145,11,101\n},{10,11,158},{13,11,13},{13,11,137},{13,11,258},{14,11,111},{14,11,225},{14,11,\n253},{14,11,304},{14,11,339},{14,11,417},{146,11,33},{6,0,87},{6,10,1734},{7,10,\n20},{7,10,1056},{8,10,732},{9,10,406},{9,10,911},{138,10,694},{134,0,1243},{137,\n0,245},{7,0,68},{8,0,48},{8,0,88},{8,0,582},{8,0,681},{9,0,373},{9,0,864},{11,0,\n157},{11,0,336},{11,0,843},{148,0,27},{8,11,663},{144,11,8},{133,10,613},{4,0,88\n},{5,0,137},{5,0,174},{5,0,777},{6,0,1664},{6,0,1725},{7,0,77},{7,0,426},{7,0,\n1317},{7,0,1355},{8,0,126},{8,0,563},{9,0,523},{9,0,750},{10,0,310},{10,0,836},{\n11,0,42},{11,0,318},{11,0,731},{12,0,68},{12,0,92},{12,0,507},{12,0,692},{13,0,\n81},{13,0,238},{13,0,374},{14,0,436},{18,0,138},{19,0,78},{19,0,111},{20,0,55},{\n20,0,77},{148,0,92},{141,0,418},{4,0,938},{137,0,625},{138,0,351},{5,11,843},{7,\n10,32},{7,10,984},{8,10,85},{8,10,709},{9,10,579},{9,10,847},{9,10,856},{10,10,\n799},{11,10,258},{11,10,1007},{12,10,331},{12,10,615},{13,10,188},{13,10,435},{\n14,10,8},{15,10,165},{16,10,27},{148,10,40},{6,0,1668},{7,0,1499},{8,0,117},{9,0\n,314},{138,0,174},{135,0,707},{132,11,554},{133,11,536},{5,0,403},{5,11,207},{9,\n11,79},{11,11,625},{145,11,7},{132,11,424},{136,11,785},{4,10,167},{135,10,82},{\n9,0,7},{9,11,7},{23,0,6},{151,11,6},{5,10,62},{6,0,282},{6,10,534},{7,10,74},{7,\n10,678},{7,10,684},{7,10,1043},{7,10,1072},{8,10,280},{8,10,541},{8,10,686},{9,\n10,258},{10,10,519},{11,10,252},{140,10,282},{138,10,33},{132,10,359},{4,0,44},{\n5,0,311},{6,0,156},{7,0,639},{7,0,762},{7,0,1827},{9,0,8},{9,0,462},{148,0,83},{\n7,11,769},{9,11,18},{138,11,358},{4,0,346},{4,11,896},{6,11,1777},{7,0,115},{9,0\n,180},{9,0,456},{138,0,363},{133,10,211},{7,0,761},{7,0,1051},{137,0,545},{6,10,\n145},{141,10,336},{7,11,750},{9,11,223},{11,11,27},{11,11,466},{12,11,624},{14,\n11,265},{146,11,61},{6,0,752},{6,0,768},{6,0,1195},{6,0,1254},{6,0,1619},{137,0,\n835},{6,0,1936},{8,0,930},{136,0,960},{132,10,263},{132,11,249},{4,10,916},{140,\n0,653},{4,11,603},{133,11,661},{4,11,11},{6,11,128},{7,11,231},{7,11,1533},{8,0,\n344},{138,11,725},{134,0,1483},{134,0,875},{6,0,185},{7,0,1899},{9,0,875},{139,0\n,673},{15,10,155},{144,10,79},{4,10,599},{6,10,1634},{7,0,93},{7,0,210},{7,0,\n1223},{7,10,67},{7,10,691},{7,10,979},{7,10,1697},{8,0,451},{8,0,460},{8,10,207}\n,{8,10,214},{8,10,231},{8,10,294},{8,10,336},{8,10,428},{8,10,471},{8,10,622},{8\n,10,626},{8,10,679},{8,10,759},{8,10,829},{9,10,11},{9,10,246},{9,10,484},{9,10,\n573},{9,10,706},{9,10,762},{9,10,798},{9,10,855},{9,10,870},{9,10,912},{10,10,\n303},{10,10,335},{10,10,424},{10,10,461},{10,10,543},{10,10,759},{10,10,814},{11\n,0,353},{11,0,475},{11,10,59},{11,10,235},{11,10,590},{11,10,929},{11,10,963},{\n11,10,987},{12,10,114},{12,10,182},{12,10,226},{12,10,332},{12,10,439},{12,10,\n575},{12,10,598},{12,10,675},{13,10,8},{13,10,125},{13,10,194},{13,10,287},{14,\n10,197},{14,10,383},{15,10,53},{17,10,63},{19,10,46},{19,10,98},{19,10,106},{148\n,10,85},{132,11,476},{4,0,327},{5,0,478},{7,0,1332},{136,0,753},{5,0,1020},{133,\n0,1022},{135,11,1807},{4,0,103},{133,0,401},{4,0,499},{135,0,1421},{10,0,207},{\n13,0,164},{147,10,126},{9,11,20},{10,11,324},{139,11,488},{132,0,96},{9,11,280},\n{138,11,134},{135,0,968},{133,10,187},{135,10,1286},{5,11,112},{6,11,103},{134,\n11,150},{4,10,215},{8,0,914},{9,10,38},{10,0,3},{11,10,23},{11,10,127},{139,10,\n796},{135,0,399},{6,0,563},{137,0,224},{6,0,704},{134,0,1214},{4,11,708},{8,11,\n15},{9,11,50},{9,11,386},{11,11,18},{11,11,529},{140,11,228},{4,11,563},{7,11,\n109},{7,11,592},{7,11,637},{7,11,770},{7,11,1701},{8,11,436},{8,11,463},{9,11,60\n},{9,11,335},{9,11,904},{10,11,73},{11,11,434},{12,11,585},{13,11,331},{18,11,\n110},{148,11,60},{134,0,1559},{132,11,502},{6,11,347},{138,11,161},{4,11,33},{5,\n11,102},{5,11,500},{6,11,284},{7,11,1079},{7,11,1423},{7,11,1702},{8,11,470},{9,\n11,554},{9,11,723},{139,11,333},{7,11,246},{135,11,840},{6,11,10},{8,11,571},{9,\n11,739},{143,11,91},{5,11,626},{8,0,861},{10,0,905},{12,0,730},{140,0,789},{134,\n0,946},{5,0,746},{12,0,333},{12,11,333},{14,0,332},{142,11,332},{5,11,18},{6,11,\n526},{13,11,24},{13,11,110},{19,11,5},{147,11,44},{4,0,910},{5,0,832},{135,10,\n2002},{10,11,768},{139,11,787},{4,11,309},{5,11,462},{7,11,970},{135,11,1097},{4\n,10,28},{5,10,440},{7,10,248},{11,10,833},{140,10,344},{134,10,1654},{6,0,632},{\n6,0,652},{6,0,1272},{6,0,1384},{134,0,1560},{134,11,1704},{5,10,853},{134,0,1393\n},{6,10,249},{7,10,1234},{139,10,573},{5,11,86},{7,11,743},{9,11,85},{10,11,281}\n,{10,11,432},{11,11,490},{12,11,251},{13,11,118},{14,11,378},{146,11,143},{5,11,\n524},{133,11,744},{134,0,1514},{10,0,201},{142,0,319},{7,0,717},{7,10,392},{8,10\n,20},{8,10,172},{8,10,690},{9,10,383},{9,10,845},{10,0,510},{11,10,293},{11,10,\n832},{11,10,920},{11,10,984},{141,10,221},{134,0,1381},{5,10,858},{133,10,992},{\n8,0,528},{137,0,348},{10,11,107},{140,11,436},{4,0,20},{133,0,616},{134,0,1251},\n{132,11,927},{10,11,123},{12,11,670},{13,11,371},{14,11,142},{146,11,94},{134,0,\n1163},{7,11,1149},{137,11,156},{134,0,307},{133,11,778},{7,0,1091},{135,0,1765},\n{5,11,502},{6,10,268},{137,10,62},{8,11,196},{10,11,283},{139,11,406},{4,0,26},{\n5,0,429},{6,0,245},{7,0,704},{7,0,1379},{135,0,1474},{133,11,855},{132,0,881},{4\n,0,621},{135,11,1596},{7,11,1400},{9,11,446},{138,11,45},{6,0,736},{138,10,106},\n{133,0,542},{134,0,348},{133,0,868},{136,0,433},{135,0,1495},{138,0,771},{6,10,\n613},{136,10,223},{138,0,215},{141,0,124},{136,11,391},{135,11,172},{132,10,670}\n,{140,0,55},{9,10,40},{139,10,136},{7,0,62},{147,0,112},{132,0,856},{132,11,568}\n,{11,10,259},{140,0,270},{8,0,572},{137,0,698},{4,11,732},{9,10,310},{137,10,682\n},{142,10,296},{134,0,939},{136,11,733},{135,11,1435},{7,10,1401},{135,10,1476},\n{4,10,296},{6,0,352},{7,10,401},{7,10,1410},{7,10,1594},{7,10,1674},{8,10,63},{8\n,10,660},{137,10,74},{4,11,428},{133,11,668},{4,10,139},{4,10,388},{140,10,188},\n{7,11,2015},{140,11,665},{132,0,647},{146,0,10},{138,0,220},{142,0,464},{132,0,\n109},{134,0,1746},{4,10,747},{6,0,515},{6,11,1623},{6,11,1681},{7,10,649},{7,10,\n1479},{135,10,1583},{133,10,232},{135,0,566},{137,10,887},{4,0,40},{10,0,67},{11\n,0,117},{11,0,768},{139,0,935},{132,0,801},{7,0,992},{8,0,301},{9,0,722},{12,0,\n63},{13,0,29},{14,0,161},{143,0,18},{139,0,923},{6,11,1748},{8,11,715},{9,11,802\n},{10,11,46},{10,11,819},{13,11,308},{14,11,351},{14,11,363},{146,11,67},{137,11\n,745},{4,10,14},{7,0,1145},{7,10,1801},{10,10,748},{141,10,458},{4,11,63},{5,11,\n347},{134,11,474},{135,0,568},{4,10,425},{7,11,577},{7,11,1432},{9,11,475},{9,11\n,505},{9,11,526},{9,11,609},{9,11,689},{9,11,726},{9,11,735},{9,11,738},{10,11,\n556},{10,11,674},{10,11,684},{11,11,89},{11,11,202},{11,11,272},{11,11,380},{11,\n11,415},{11,11,505},{11,11,537},{11,11,550},{11,11,562},{11,11,640},{11,11,667},\n{11,11,688},{11,11,847},{11,11,927},{11,11,930},{11,11,940},{12,11,144},{12,11,\n325},{12,11,329},{12,11,389},{12,11,403},{12,11,451},{12,11,515},{12,11,604},{12\n,11,616},{12,11,626},{13,11,66},{13,11,131},{13,11,167},{13,11,236},{13,11,368},\n{13,11,411},{13,11,434},{13,11,453},{13,11,461},{13,11,474},{14,11,59},{14,11,60\n},{14,11,139},{14,11,152},{14,11,276},{14,11,353},{14,11,402},{15,11,28},{15,11,\n81},{15,11,123},{15,11,152},{18,11,136},{148,11,88},{137,0,247},{135,11,1622},{9\n,11,544},{11,11,413},{144,11,25},{4,0,645},{6,10,1768},{7,0,825},{135,11,89},{\n140,0,328},{5,10,943},{134,10,1779},{134,0,1363},{5,10,245},{6,10,576},{7,10,582\n},{136,10,225},{134,0,1280},{5,11,824},{133,11,941},{7,11,440},{8,11,230},{139,\n11,106},{5,0,28},{6,0,204},{10,0,320},{10,0,583},{13,0,502},{14,0,72},{14,0,274}\n,{14,0,312},{14,0,344},{15,0,159},{16,0,62},{16,0,69},{17,0,30},{18,0,42},{18,0,\n53},{18,0,84},{18,0,140},{19,0,68},{19,0,85},{20,0,5},{20,0,45},{20,0,101},{22,0\n,7},{150,0,20},{4,0,558},{6,0,390},{7,0,162},{7,0,689},{9,0,360},{138,0,653},{\n134,0,764},{6,0,862},{137,0,833},{5,0,856},{6,0,1672},{6,0,1757},{134,0,1781},{5\n,0,92},{10,0,736},{140,0,102},{6,0,1927},{6,0,1944},{8,0,924},{8,0,948},{10,0,\n967},{138,0,978},{134,0,1479},{5,0,590},{8,0,360},{9,0,213},{138,0,63},{134,0,\n1521},{6,0,709},{134,0,891},{132,10,443},{13,0,477},{14,0,120},{148,0,61},{4,11,\n914},{5,11,800},{133,11,852},{10,11,54},{141,11,115},{4,11,918},{133,11,876},{\n139,11,152},{4,11,92},{133,11,274},{135,11,1901},{9,11,800},{10,11,693},{11,11,\n482},{11,11,734},{139,11,789},{4,10,298},{137,0,483},{6,0,1213},{141,11,498},{\n135,11,1451},{133,11,743},{4,0,1022},{10,0,1000},{12,0,957},{12,0,980},{12,0,\n1013},{14,0,481},{144,0,116},{4,11,49},{7,11,280},{7,11,1633},{8,0,503},{145,0,\n29},{135,0,1712},{134,0,466},{136,11,47},{5,10,164},{7,10,121},{142,10,189},{7,\n10,812},{7,10,1261},{7,10,1360},{9,10,632},{140,10,352},{139,10,556},{132,0,731}\n,{5,11,272},{5,11,908},{5,11,942},{7,11,1008},{7,11,1560},{8,11,197},{9,11,47},{\n11,11,538},{139,11,742},{4,10,172},{9,10,611},{10,10,436},{12,10,673},{141,10,\n255},{133,10,844},{10,0,484},{11,0,754},{12,0,457},{14,0,171},{14,0,389},{146,0,\n153},{9,10,263},{10,10,147},{138,10,492},{137,11,891},{138,0,241},{133,10,537},{\n6,0,2005},{136,0,964},{137,10,842},{151,11,8},{4,11,407},{132,11,560},{135,11,\n1884},{6,0,1100},{134,0,1242},{135,0,954},{5,10,230},{5,10,392},{6,10,420},{9,10\n,568},{140,10,612},{4,11,475},{11,11,35},{11,11,90},{13,11,7},{13,11,71},{13,11,\n177},{142,11,422},{136,11,332},{135,0,1958},{6,0,549},{8,0,34},{8,0,283},{9,0,\n165},{138,0,475},{10,0,952},{12,0,966},{140,0,994},{5,0,652},{5,0,701},{135,0,\n449},{4,0,655},{7,0,850},{17,0,75},{146,0,137},{4,0,146},{5,10,41},{7,0,1618},{7\n,10,1459},{7,10,1469},{7,10,1859},{8,0,670},{9,10,549},{139,10,905},{133,10,696}\n,{6,0,159},{6,0,364},{7,0,516},{137,0,518},{135,0,1439},{6,11,222},{7,11,636},{7\n,11,1620},{8,11,409},{9,11,693},{139,11,77},{13,0,151},{141,11,45},{4,10,771},{4\n,11,336},{134,0,1027},{139,11,392},{10,11,121},{11,11,175},{149,11,16},{8,0,950}\n,{138,0,983},{133,10,921},{135,0,993},{6,10,180},{7,10,1137},{8,10,751},{139,10,\n805},{7,0,501},{9,0,111},{10,0,141},{11,0,332},{13,0,43},{13,0,429},{14,0,130},{\n14,0,415},{145,0,102},{4,10,183},{5,11,882},{7,10,271},{11,10,824},{11,10,952},{\n13,10,278},{13,10,339},{13,10,482},{14,10,424},{148,10,99},{4,10,19},{5,10,477},\n{5,10,596},{6,10,505},{7,10,1221},{11,10,907},{12,10,209},{141,10,214},{135,10,\n1215},{133,0,452},{132,11,426},{5,0,149},{136,0,233},{133,0,935},{6,11,58},{7,11\n,654},{7,11,745},{7,11,1969},{8,11,240},{8,11,675},{9,11,479},{9,11,731},{10,11,\n330},{10,11,593},{10,11,817},{11,11,32},{11,11,133},{11,11,221},{145,11,68},{7,\n11,102},{9,11,538},{12,0,582},{146,0,131},{136,0,801},{134,10,1645},{132,0,70},{\n6,10,92},{6,10,188},{7,10,1269},{7,10,1524},{7,10,1876},{10,10,228},{139,10,1020\n},{4,10,459},{133,10,966},{138,0,369},{12,10,330},{144,0,36},{141,11,366},{6,10,\n18},{7,0,721},{7,10,932},{8,10,757},{9,10,54},{9,10,65},{9,10,844},{10,0,236},{\n10,10,113},{10,10,315},{10,10,798},{11,10,153},{12,0,204},{12,10,151},{12,10,392\n},{12,10,666},{142,10,248},{7,0,241},{8,10,548},{9,10,532},{10,0,430},{10,10,117\n},{11,10,351},{11,10,375},{143,10,23},{134,10,1742},{133,10,965},{133,11,566},{6\n,11,48},{135,11,63},{134,10,182},{10,10,65},{10,10,488},{138,10,497},{6,11,114},\n{7,11,1224},{7,11,1556},{136,11,3},{134,0,1817},{8,11,576},{137,11,267},{6,0,\n1078},{144,0,16},{9,10,588},{138,10,260},{138,0,1021},{5,0,406},{134,0,2022},{\n133,11,933},{6,0,69},{135,0,117},{7,0,1830},{136,11,427},{4,0,432},{135,0,824},{\n134,10,1786},{133,0,826},{139,11,67},{133,11,759},{135,10,308},{137,0,816},{133,\n0,1000},{4,0,297},{6,0,529},{7,0,152},{7,0,713},{7,0,1845},{8,0,710},{8,0,717},{\n12,0,639},{140,0,685},{7,0,423},{136,10,588},{136,10,287},{136,0,510},{134,0,\n1048},{6,0,618},{7,11,56},{7,11,1989},{8,11,337},{8,11,738},{9,11,600},{10,11,\n483},{12,11,37},{13,11,447},{142,11,92},{4,0,520},{135,0,575},{8,0,990},{138,0,\n977},{135,11,774},{9,11,347},{11,11,24},{140,11,170},{136,11,379},{140,10,290},{\n132,11,328},{4,0,321},{134,0,569},{4,11,101},{135,11,1171},{5,11,833},{7,0,723},\n{7,0,1135},{136,11,744},{7,10,719},{8,10,809},{136,10,834},{8,0,921},{136,10,796\n},{5,10,210},{6,10,213},{7,10,60},{10,10,364},{139,10,135},{5,0,397},{5,10,607},\n{6,0,154},{7,0,676},{8,0,443},{8,0,609},{8,10,326},{8,10,490},{9,0,24},{9,0,325}\n,{10,0,35},{11,0,535},{11,0,672},{11,0,1018},{12,0,637},{144,0,30},{4,10,701},{5\n,10,472},{6,11,9},{6,11,397},{7,11,53},{7,11,1742},{9,10,758},{10,11,632},{11,11\n,828},{140,11,146},{135,10,380},{135,10,1947},{148,11,109},{10,10,278},{138,11,\n278},{134,0,856},{4,10,386},{7,0,139},{8,10,405},{8,10,728},{9,10,497},{11,10,\n110},{11,10,360},{15,10,37},{144,10,84},{141,0,282},{133,0,981},{5,0,288},{7,10,\n1452},{7,10,1480},{8,10,634},{140,10,472},{7,0,1890},{8,11,367},{10,11,760},{14,\n11,79},{20,11,17},{152,11,0},{4,10,524},{136,10,810},{4,0,56},{7,0,1791},{8,0,\n607},{8,0,651},{11,0,465},{11,0,835},{12,0,337},{141,0,480},{10,10,238},{141,10,\n33},{11,11,417},{12,11,223},{140,11,265},{9,0,158},{10,0,411},{140,0,261},{133,\n10,532},{133,10,997},{12,11,186},{12,11,292},{14,11,100},{146,11,70},{6,0,1403},\n{136,0,617},{134,0,1205},{139,0,563},{4,0,242},{134,0,333},{4,11,186},{5,11,157}\n,{8,11,168},{138,11,6},{132,0,369},{133,11,875},{5,10,782},{5,10,829},{134,10,\n1738},{134,0,622},{135,11,1272},{6,0,1407},{7,11,111},{136,11,581},{7,10,1823},{\n139,10,693},{7,0,160},{10,0,624},{142,0,279},{132,0,363},{10,11,589},{12,11,111}\n,{13,11,260},{14,11,82},{18,11,63},{147,11,45},{7,11,1364},{7,11,1907},{141,11,\n158},{4,11,404},{4,11,659},{135,11,675},{13,11,211},{14,11,133},{14,11,204},{15,\n11,64},{15,11,69},{15,11,114},{16,11,10},{19,11,23},{19,11,35},{19,11,39},{19,11\n,51},{19,11,71},{19,11,75},{152,11,15},{4,10,78},{5,10,96},{5,10,182},{7,10,1724\n},{7,10,1825},{10,10,394},{10,10,471},{11,10,532},{14,10,340},{145,10,88},{135,\n10,1964},{133,11,391},{11,11,887},{14,11,365},{142,11,375},{5,11,540},{6,11,1697\n},{7,11,222},{136,11,341},{134,11,78},{9,0,601},{9,0,619},{10,0,505},{10,0,732},\n{11,0,355},{140,0,139},{134,0,292},{139,0,174},{5,0,177},{6,0,616},{7,0,827},{9,\n0,525},{138,0,656},{6,10,215},{7,10,1028},{7,10,1473},{7,10,1721},{9,10,424},{10\n,0,31},{138,10,779},{135,10,584},{136,11,293},{134,0,685},{135,11,1868},{133,11,\n460},{6,10,67},{7,0,647},{7,10,1630},{9,10,354},{9,10,675},{10,10,830},{14,10,80\n},{145,10,80},{4,0,161},{133,0,631},{6,10,141},{7,10,225},{9,10,59},{9,10,607},{\n10,10,312},{11,10,687},{12,10,555},{13,10,373},{13,10,494},{148,10,58},{7,11,965\n},{7,11,1460},{135,11,1604},{136,10,783},{134,11,388},{4,11,511},{6,0,722},{6,0,\n1267},{9,11,333},{9,11,379},{10,11,602},{11,11,441},{11,11,723},{11,11,976},{140\n,11,357},{134,0,1797},{135,0,1684},{5,11,938},{8,11,707},{9,0,469},{9,0,709},{12\n,0,512},{14,0,65},{145,0,12},{7,0,1230},{136,0,531},{10,0,229},{11,0,73},{11,0,\n376},{139,0,433},{12,0,268},{12,0,640},{142,0,119},{7,10,430},{139,10,46},{6,0,\n558},{7,0,651},{8,0,421},{9,0,0},{10,0,34},{139,0,1008},{5,10,602},{6,0,106},{7,\n0,1786},{7,0,1821},{7,10,2018},{9,0,102},{9,0,763},{137,10,418},{5,0,65},{6,0,\n416},{7,0,1720},{7,0,1924},{8,10,677},{10,0,109},{11,0,14},{11,0,70},{11,0,569},\n{11,0,735},{15,0,153},{148,0,80},{135,11,1625},{137,11,772},{136,0,595},{6,11,\n469},{7,11,1709},{138,11,515},{7,0,1832},{138,0,374},{9,0,106},{9,0,163},{9,0,\n296},{10,0,167},{10,0,172},{10,0,777},{139,0,16},{6,0,6},{7,0,81},{7,0,771},{7,0\n,1731},{9,0,405},{138,0,421},{4,11,500},{135,11,938},{5,11,68},{134,11,383},{5,0\n,881},{133,0,885},{6,0,854},{6,0,1132},{6,0,1495},{6,0,1526},{6,0,1533},{134,0,\n1577},{4,11,337},{6,11,353},{7,11,1934},{8,11,488},{137,11,429},{7,11,236},{7,11\n,1795},{8,11,259},{9,11,135},{9,11,177},{10,11,825},{11,11,115},{11,11,370},{11,\n11,405},{11,11,604},{12,11,10},{12,11,667},{12,11,669},{13,11,76},{14,11,310},{\n15,11,76},{15,11,147},{148,11,23},{5,0,142},{134,0,546},{4,11,15},{5,11,22},{6,\n11,244},{7,11,40},{7,11,200},{7,11,906},{7,11,1199},{9,11,616},{10,11,716},{11,\n11,635},{11,11,801},{140,11,458},{5,0,466},{7,10,329},{11,0,571},{12,0,198},{13,\n0,283},{14,0,186},{15,0,21},{143,0,103},{4,0,185},{5,0,257},{5,0,839},{5,0,936},\n{7,11,1735},{9,0,399},{10,0,258},{10,0,395},{10,0,734},{11,0,1014},{12,0,23},{13\n,0,350},{14,0,150},{147,0,6},{12,11,36},{141,11,337},{5,11,598},{7,11,791},{8,11\n,108},{137,11,123},{132,10,469},{7,0,404},{7,0,1377},{7,0,1430},{7,0,2017},{8,0,\n149},{8,0,239},{8,0,512},{8,0,793},{8,0,818},{9,0,474},{9,0,595},{10,0,122},{10,\n0,565},{10,0,649},{10,0,783},{11,0,239},{11,0,295},{11,0,447},{11,0,528},{11,0,\n639},{11,0,800},{12,0,25},{12,0,77},{12,0,157},{12,0,256},{12,0,316},{12,0,390},\n{12,0,391},{12,0,395},{12,0,478},{12,0,503},{12,0,592},{12,0,680},{13,0,50},{13,\n0,53},{13,0,132},{13,0,198},{13,0,322},{13,0,415},{13,0,511},{14,0,71},{14,0,395\n},{15,0,71},{15,0,136},{17,0,123},{18,0,93},{147,0,58},{136,0,712},{134,10,1743}\n,{5,10,929},{6,10,340},{8,10,376},{136,10,807},{6,0,1848},{8,0,860},{10,0,856},{\n10,0,859},{10,0,925},{10,0,941},{140,0,762},{6,0,629},{6,0,906},{9,0,810},{140,0\n,652},{5,10,218},{7,10,1610},{138,10,83},{7,10,1512},{135,10,1794},{4,0,377},{4,\n11,155},{7,11,1689},{11,10,0},{16,10,78},{152,0,13},{4,11,164},{5,11,151},{5,11,\n730},{5,11,741},{7,11,498},{7,11,870},{7,11,1542},{12,11,213},{14,11,36},{14,11,\n391},{17,11,111},{18,11,6},{18,11,46},{18,11,151},{19,11,36},{20,11,32},{20,11,\n56},{20,11,69},{20,11,102},{21,11,4},{22,11,8},{22,11,10},{22,11,14},{150,11,31}\n,{5,10,571},{135,0,1842},{4,10,455},{4,11,624},{135,11,1752},{134,0,1501},{4,11,\n492},{5,11,451},{6,10,161},{7,10,372},{137,10,597},{132,10,349},{4,0,180},{135,0\n,1906},{135,11,835},{141,11,70},{132,0,491},{137,10,751},{6,10,432},{139,10,322}\n,{4,0,171},{138,0,234},{6,11,113},{135,11,436},{4,0,586},{7,0,1186},{138,0,631},\n{5,10,468},{10,10,325},{11,10,856},{12,10,345},{143,10,104},{5,10,223},{10,11,\n592},{10,11,753},{12,11,317},{12,11,355},{12,11,465},{12,11,469},{12,11,560},{12\n,11,578},{141,11,243},{132,10,566},{135,11,520},{4,10,59},{135,10,1394},{6,10,\n436},{139,10,481},{4,10,48},{5,10,271},{7,10,953},{7,11,1878},{9,0,931},{10,0,\n334},{148,0,71},{5,10,610},{8,10,457},{139,0,170},{133,10,755},{6,0,1587},{135,\n10,1217},{4,10,197},{149,11,26},{133,11,585},{137,11,521},{133,0,765},{133,10,\n217},{139,11,586},{133,0,424},{9,11,752},{12,11,610},{13,11,431},{16,11,59},{146\n,11,109},{136,0,714},{4,11,307},{135,0,685},{9,0,420},{10,0,269},{10,0,285},{10,\n0,576},{11,0,397},{13,0,175},{145,0,90},{132,0,429},{133,11,964},{9,11,463},{138\n,11,595},{7,0,18},{7,0,699},{7,0,1966},{8,0,752},{9,0,273},{9,0,412},{9,0,703},{\n10,0,71},{10,0,427},{138,0,508},{4,10,165},{7,10,1398},{135,10,1829},{4,0,53},{5\n,0,186},{7,0,752},{7,0,828},{142,0,116},{8,0,575},{10,0,289},{139,0,319},{132,0,\n675},{134,0,1424},{4,11,75},{5,11,180},{6,11,500},{7,11,58},{7,11,710},{138,11,\n645},{133,11,649},{6,11,276},{7,11,282},{7,11,879},{7,11,924},{8,11,459},{9,11,\n599},{9,11,754},{11,11,574},{12,11,128},{12,11,494},{13,11,52},{13,11,301},{15,\n11,30},{143,11,132},{6,0,647},{134,0,1095},{5,10,9},{7,10,297},{7,10,966},{140,\n10,306},{132,11,200},{134,0,1334},{5,10,146},{6,10,411},{138,10,721},{6,0,209},{\n6,0,1141},{6,0,1288},{8,0,468},{9,0,210},{11,0,36},{12,0,28},{12,0,630},{13,0,21\n},{13,0,349},{14,0,7},{145,0,13},{6,10,177},{135,10,467},{4,0,342},{135,0,1179},\n{10,11,454},{140,11,324},{4,0,928},{133,0,910},{6,11,225},{7,0,1838},{137,11,211\n},{16,0,101},{20,0,115},{20,0,118},{148,0,122},{4,0,496},{135,0,856},{4,0,318},{\n7,11,718},{11,0,654},{139,11,102},{8,11,58},{9,11,724},{11,11,809},{13,11,113},{\n145,11,72},{5,10,200},{6,11,345},{135,11,1247},{8,11,767},{8,11,803},{9,11,301},\n{137,11,903},{7,0,915},{7,11,1949},{8,0,247},{8,11,674},{147,0,0},{4,0,202},{5,0\n,382},{6,0,454},{7,0,936},{7,0,1803},{8,0,758},{9,0,375},{9,0,895},{10,0,743},{\n10,0,792},{11,0,978},{11,0,1012},{142,0,109},{7,0,1150},{7,0,1425},{7,0,1453},{\n140,0,513},{134,11,259},{138,0,791},{11,0,821},{12,0,110},{12,0,153},{18,0,41},{\n150,0,19},{134,10,481},{132,0,796},{6,0,445},{8,11,254},{137,0,909},{10,0,776},{\n13,0,345},{142,0,425},{4,10,84},{7,10,1482},{10,10,76},{138,10,142},{135,11,742}\n,{5,10,1015},{134,0,578},{4,10,315},{5,10,507},{6,0,1387},{135,10,1370},{4,0,438\n},{133,0,555},{136,0,766},{133,11,248},{134,10,1722},{4,11,116},{5,11,95},{5,11,\n445},{7,11,1688},{8,11,29},{9,11,272},{11,11,509},{139,11,915},{135,0,541},{133,\n11,543},{8,10,222},{8,10,476},{9,10,238},{11,10,516},{11,10,575},{15,10,109},{\n146,10,100},{6,0,880},{134,0,1191},{5,11,181},{136,11,41},{134,0,1506},{132,11,\n681},{7,11,25},{8,11,202},{138,11,536},{139,0,983},{137,0,768},{132,0,584},{9,11\n,423},{140,11,89},{8,11,113},{9,11,877},{10,11,554},{11,11,83},{12,11,136},{147,\n11,109},{7,10,706},{7,10,1058},{138,10,538},{133,11,976},{4,11,206},{135,11,746}\n,{136,11,526},{140,0,737},{11,10,92},{11,10,196},{11,10,409},{11,10,450},{11,10,\n666},{11,10,777},{12,10,262},{13,10,385},{13,10,393},{15,10,115},{16,10,45},{145\n,10,82},{4,0,226},{4,0,326},{4,11,319},{5,11,699},{7,0,1770},{138,11,673},{6,10,\n40},{135,10,1781},{5,0,426},{8,0,30},{9,0,2},{11,0,549},{147,0,122},{6,0,1161},{\n134,0,1329},{138,10,97},{6,10,423},{7,10,665},{135,10,1210},{7,11,13},{8,11,226}\n,{10,11,537},{11,11,570},{11,11,605},{11,11,799},{11,11,804},{12,11,85},{12,11,\n516},{12,11,623},{13,11,112},{13,11,361},{14,11,77},{14,11,78},{17,11,28},{147,\n11,110},{132,11,769},{132,11,551},{132,11,728},{147,0,117},{9,11,57},{9,11,459},\n{10,11,425},{11,11,119},{12,11,184},{12,11,371},{13,11,358},{145,11,51},{5,11,\n188},{5,11,814},{8,11,10},{9,11,421},{9,11,729},{10,11,609},{139,11,689},{134,11\n,624},{135,11,298},{135,0,462},{4,0,345},{139,10,624},{136,10,574},{4,0,385},{7,\n0,265},{135,0,587},{4,11,528},{134,0,808},{133,0,398},{132,10,354},{4,0,347},{5,\n0,423},{5,0,996},{135,0,1329},{135,10,1558},{7,0,1259},{9,0,125},{139,0,65},{5,0\n,136},{6,0,136},{136,0,644},{5,11,104},{6,11,173},{135,11,1631},{135,0,469},{133\n,10,830},{4,0,278},{5,0,465},{135,0,1367},{7,11,810},{8,11,138},{8,11,342},{9,11\n,84},{10,11,193},{11,11,883},{140,11,359},{5,10,496},{135,10,203},{4,0,433},{133\n,0,719},{6,10,547},{134,11,95},{5,10,88},{137,10,239},{6,11,406},{10,11,409},{10\n,11,447},{11,11,44},{140,11,100},{134,0,1423},{7,10,650},{135,10,1310},{134,0,\n749},{135,11,1243},{135,0,1363},{6,0,381},{7,0,645},{7,0,694},{7,10,1076},{8,0,\n546},{9,10,80},{11,10,78},{11,10,421},{11,10,534},{140,10,545},{134,11,1636},{\n135,11,1344},{7,10,274},{11,10,479},{11,10,507},{140,0,277},{4,11,282},{6,0,705}\n,{6,0,783},{6,0,1275},{6,0,1481},{7,11,1034},{11,11,398},{11,11,634},{12,11,1},{\n12,11,79},{12,11,544},{14,11,237},{17,11,10},{146,11,20},{134,0,453},{4,0,555},{\n4,10,497},{7,10,1584},{8,0,536},{10,0,288},{139,0,1005},{5,11,118},{5,11,499},{6\n,11,476},{7,11,600},{7,11,888},{135,11,1096},{138,0,987},{7,0,1107},{7,10,261},{\n7,10,1115},{7,10,1354},{7,10,1588},{7,10,1705},{7,10,1902},{9,10,465},{10,10,248\n},{10,10,349},{10,10,647},{11,10,527},{11,10,660},{11,10,669},{12,10,529},{141,\n10,305},{7,11,296},{7,11,596},{8,11,560},{8,11,586},{9,11,612},{11,11,100},{11,\n11,304},{12,11,46},{13,11,89},{14,11,112},{145,11,122},{9,0,370},{138,0,90},{136\n,10,13},{132,0,860},{7,10,642},{8,10,250},{11,10,123},{11,10,137},{13,10,48},{\n142,10,95},{135,10,1429},{137,11,321},{132,0,257},{135,0,2031},{7,0,1768},{7,11,\n1599},{7,11,1723},{8,11,79},{8,11,106},{8,11,190},{8,11,302},{8,11,383},{9,11,\n119},{9,11,233},{9,11,298},{9,11,419},{9,11,471},{10,11,181},{10,11,406},{11,11,\n57},{11,11,85},{11,11,120},{11,11,177},{11,11,296},{11,11,382},{11,11,454},{11,\n11,758},{11,11,999},{12,11,27},{12,11,98},{12,11,131},{12,11,245},{12,11,312},{\n12,11,446},{12,11,454},{13,11,25},{13,11,98},{13,11,426},{13,11,508},{14,11,6},{\n14,11,163},{14,11,272},{14,11,277},{14,11,370},{15,11,95},{15,11,138},{15,11,167\n},{17,11,18},{17,11,38},{20,11,96},{149,11,32},{5,11,722},{134,11,1759},{145,11,\n16},{6,0,1071},{134,0,1561},{10,10,545},{140,10,301},{6,0,83},{6,0,1733},{135,0,\n1389},{4,0,835},{135,0,1818},{133,11,258},{4,10,904},{133,10,794},{134,0,2006},{\n5,11,30},{7,11,495},{8,11,134},{9,11,788},{140,11,438},{135,11,2004},{137,0,696}\n,{5,11,50},{6,11,439},{7,11,780},{135,11,1040},{7,11,772},{7,11,1104},{7,11,1647\n},{11,11,269},{11,11,539},{11,11,607},{11,11,627},{11,11,706},{11,11,975},{12,11\n,248},{12,11,311},{12,11,434},{12,11,600},{12,11,622},{13,11,297},{13,11,367},{\n13,11,485},{14,11,69},{14,11,409},{143,11,108},{5,11,1},{6,11,81},{138,11,520},{\n7,0,1718},{9,0,95},{9,0,274},{10,0,279},{10,0,317},{10,0,420},{11,0,303},{11,0,\n808},{12,0,134},{12,0,367},{13,0,149},{13,0,347},{14,0,349},{14,0,406},{18,0,22}\n,{18,0,89},{18,0,122},{147,0,47},{5,11,482},{8,11,98},{9,11,172},{10,11,222},{10\n,11,700},{10,11,822},{11,11,302},{11,11,778},{12,11,50},{12,11,127},{12,11,396},\n{13,11,62},{13,11,328},{14,11,122},{147,11,72},{7,10,386},{138,10,713},{6,10,7},\n{6,10,35},{7,10,147},{7,10,1069},{7,10,1568},{7,10,1575},{7,10,1917},{8,10,43},{\n8,10,208},{9,10,128},{9,10,866},{10,10,20},{11,10,981},{147,10,33},{133,0,26},{\n132,0,550},{5,11,2},{7,11,1494},{136,11,589},{6,11,512},{7,11,797},{8,11,253},{9\n,11,77},{10,11,1},{10,11,129},{10,11,225},{11,11,118},{11,11,226},{11,11,251},{\n11,11,430},{11,11,701},{11,11,974},{11,11,982},{12,11,64},{12,11,260},{12,11,488\n},{140,11,690},{7,10,893},{141,10,424},{134,0,901},{136,0,822},{4,0,902},{5,0,\n809},{134,0,122},{6,0,807},{134,0,1366},{5,11,748},{6,11,553},{135,0,262},{133,0\n,620},{4,0,34},{5,0,574},{7,0,279},{7,0,1624},{136,0,601},{6,10,322},{9,0,170},{\n9,10,552},{11,10,274},{13,10,209},{13,10,499},{14,10,85},{15,10,126},{145,10,70}\n,{132,0,537},{4,11,12},{7,11,420},{7,11,522},{7,11,809},{8,11,797},{141,11,88},{\n133,0,332},{8,10,83},{8,10,742},{8,10,817},{9,10,28},{9,10,29},{9,10,885},{10,10\n,387},{11,10,633},{11,10,740},{13,10,235},{13,10,254},{15,10,143},{143,10,146},{\n6,0,1909},{9,0,964},{12,0,822},{12,0,854},{12,0,865},{12,0,910},{12,0,938},{15,0\n,169},{15,0,208},{15,0,211},{18,0,205},{18,0,206},{18,0,220},{18,0,223},{152,0,\n24},{140,10,49},{5,11,528},{135,11,1580},{6,0,261},{8,0,182},{139,0,943},{134,0,\n1721},{4,0,933},{133,0,880},{136,11,321},{5,11,266},{9,11,290},{9,11,364},{10,11\n,293},{11,11,606},{142,11,45},{4,11,50},{6,0,1609},{6,11,510},{6,11,594},{9,11,\n121},{10,11,49},{10,11,412},{139,11,834},{7,0,895},{136,11,748},{132,11,466},{4,\n10,110},{10,10,415},{10,10,597},{142,10,206},{133,0,812},{135,11,281},{6,0,1890}\n,{6,0,1902},{6,0,1916},{7,10,205},{7,10,2000},{9,0,929},{9,0,942},{9,0,975},{9,0\n,984},{9,0,986},{9,0,1011},{9,0,1019},{12,0,804},{12,0,851},{12,0,867},{12,0,916\n},{12,0,923},{15,0,194},{15,0,204},{15,0,210},{15,0,222},{15,0,223},{15,0,229},{\n15,0,250},{18,0,179},{18,0,186},{146,0,192},{132,11,667},{135,0,778},{4,0,137},{\n7,0,1178},{135,0,1520},{134,0,1314},{4,11,242},{134,11,333},{6,0,1661},{7,0,1975\n},{7,0,2009},{135,0,2011},{134,0,1591},{4,10,283},{135,10,1194},{11,0,820},{150,\n0,51},{4,11,39},{5,11,36},{7,11,1843},{8,11,407},{11,11,144},{140,11,523},{134,\n10,1720},{4,11,510},{7,11,29},{7,11,66},{7,11,1980},{10,11,487},{10,11,809},{146\n,11,9},{5,0,89},{7,0,1915},{9,0,185},{9,0,235},{10,0,64},{10,0,270},{10,0,403},{\n10,0,469},{10,0,529},{10,0,590},{11,0,140},{11,0,860},{13,0,1},{13,0,422},{14,0,\n341},{14,0,364},{17,0,93},{18,0,113},{19,0,97},{147,0,113},{133,0,695},{6,0,987}\n,{134,0,1160},{5,0,6},{6,0,183},{7,0,680},{7,0,978},{7,0,1013},{7,0,1055},{12,0,\n230},{13,0,172},{146,0,29},{134,11,570},{132,11,787},{134,11,518},{6,0,29},{139,\n0,63},{132,11,516},{136,11,821},{132,0,311},{134,0,1740},{7,0,170},{8,0,90},{8,0\n,177},{8,0,415},{8,10,735},{11,0,714},{142,0,281},{134,0,1961},{135,11,1405},{4,\n11,10},{7,11,917},{139,11,786},{5,10,132},{9,10,486},{9,10,715},{10,10,458},{11,\n10,373},{11,10,668},{11,10,795},{11,10,897},{12,10,272},{12,10,424},{12,10,539},\n{12,10,558},{14,10,245},{14,10,263},{14,10,264},{14,10,393},{142,10,403},{11,0,\n91},{13,0,129},{15,0,101},{145,0,125},{135,0,1132},{4,0,494},{6,0,74},{7,0,44},{\n7,0,407},{12,0,17},{15,0,5},{148,0,11},{133,10,379},{5,0,270},{5,11,684},{6,10,\n89},{6,10,400},{7,10,1569},{7,10,1623},{7,10,1850},{8,10,218},{8,10,422},{9,10,\n570},{138,10,626},{4,0,276},{133,0,296},{6,0,1523},{134,11,27},{6,10,387},{7,10,\n882},{141,10,111},{6,10,224},{7,10,877},{137,10,647},{135,10,790},{4,0,7},{5,0,\n90},{5,0,158},{6,0,542},{7,0,221},{7,0,1574},{9,0,490},{10,0,540},{11,0,443},{\n139,0,757},{7,0,588},{9,0,175},{138,0,530},{135,10,394},{142,11,23},{134,0,786},\n{135,0,580},{7,0,88},{136,0,627},{5,0,872},{6,0,57},{7,0,471},{9,0,447},{137,0,\n454},{6,11,342},{6,11,496},{8,11,275},{137,11,206},{4,11,909},{133,11,940},{4,11\n,891},{134,0,735},{7,10,1409},{8,0,845},{136,0,916},{5,0,31},{134,0,614},{11,0,\n458},{12,0,15},{140,0,432},{8,0,330},{140,0,477},{4,0,530},{4,11,687},{5,0,521},\n{7,0,1200},{138,0,460},{6,0,424},{135,0,1866},{9,0,569},{12,0,12},{12,0,81},{12,\n0,319},{13,0,69},{14,0,259},{16,0,87},{17,0,1},{17,0,21},{17,0,24},{18,0,15},{18\n,0,56},{18,0,59},{18,0,127},{18,0,154},{19,0,19},{148,0,31},{7,0,1302},{136,10,\n38},{134,11,253},{5,10,261},{7,10,78},{7,10,199},{8,10,815},{9,10,126},{138,10,\n342},{5,0,595},{135,0,1863},{6,11,41},{141,11,160},{5,0,13},{134,0,142},{6,0,97}\n,{7,0,116},{7,11,1304},{8,0,322},{8,0,755},{9,0,548},{10,0,714},{10,11,477},{11,\n0,884},{141,0,324},{132,10,628},{134,11,1718},{7,10,266},{136,10,804},{135,10,\n208},{6,10,79},{7,0,1021},{135,10,1519},{7,0,1472},{135,0,1554},{6,11,362},{146,\n11,51},{7,0,1071},{7,0,1541},{7,0,1767},{7,0,1806},{11,0,162},{11,0,242},{11,0,\n452},{12,0,605},{15,0,26},{144,0,44},{136,10,741},{133,11,115},{145,0,115},{134,\n10,376},{6,0,1406},{134,0,1543},{5,11,193},{12,11,178},{13,11,130},{145,11,84},{\n135,0,1111},{5,11,705},{8,0,1},{9,0,650},{9,11,606},{138,0,326},{5,0,488},{6,0,\n527},{7,0,489},{7,0,1636},{8,0,121},{8,0,144},{8,0,359},{9,0,193},{9,0,241},{9,0\n,336},{9,0,882},{11,0,266},{11,0,372},{11,0,944},{12,0,401},{140,0,641},{135,11,\n174},{6,0,267},{7,10,244},{7,10,632},{7,10,1609},{8,10,178},{8,10,638},{141,10,\n58},{134,0,1983},{134,0,1155},{134,0,1575},{134,0,1438},{9,0,31},{10,0,244},{10,\n0,699},{12,0,149},{141,0,497},{133,0,377},{4,11,122},{5,11,796},{5,11,952},{6,11\n,1660},{6,11,1671},{8,11,567},{9,11,687},{9,11,742},{10,11,686},{11,11,356},{11,\n11,682},{140,11,281},{145,0,101},{11,11,0},{144,11,78},{5,10,791},{5,11,179},{7,\n11,1095},{135,11,1213},{8,11,372},{9,11,122},{138,11,175},{7,10,686},{8,10,33},{\n8,10,238},{10,10,616},{11,10,467},{11,10,881},{13,10,217},{13,10,253},{142,10,\n268},{4,11,66},{7,11,722},{7,11,904},{137,0,476},{7,11,352},{137,11,684},{135,0,\n2023},{135,0,1836},{132,10,447},{5,0,843},{144,0,35},{137,11,779},{141,11,35},{4\n,10,128},{5,10,415},{6,10,462},{7,10,294},{7,10,578},{10,10,710},{139,10,86},{\n132,0,554},{133,0,536},{136,10,587},{5,0,207},{9,0,79},{11,0,625},{145,0,7},{6,\n10,427},{7,0,1371},{138,10,692},{4,0,424},{4,10,195},{135,10,802},{5,11,564},{\n136,0,785},{135,0,336},{4,0,896},{6,0,1777},{134,11,556},{137,11,103},{134,10,\n1683},{7,11,544},{8,11,719},{138,11,61},{138,10,472},{4,11,5},{5,11,498},{136,11\n,637},{7,0,750},{9,0,223},{11,0,27},{11,0,466},{12,0,624},{14,0,265},{146,0,61},\n{12,0,238},{12,11,238},{18,0,155},{146,11,155},{151,10,28},{133,11,927},{5,10,3}\n,{8,10,578},{9,10,118},{10,10,705},{12,0,383},{141,10,279},{4,11,893},{5,11,780}\n,{133,11,893},{4,0,603},{133,0,661},{4,0,11},{5,10,229},{5,11,238},{6,0,128},{7,\n0,231},{7,0,1533},{7,11,1350},{138,0,725},{8,10,102},{10,10,578},{10,10,672},{12\n,10,496},{13,10,408},{14,10,121},{145,10,106},{132,0,476},{134,0,1552},{134,11,\n1729},{8,10,115},{8,10,350},{9,10,489},{10,10,128},{11,10,306},{12,10,373},{14,\n10,30},{17,10,79},{19,10,80},{150,10,55},{135,0,1807},{4,0,680},{4,11,60},{7,11,\n760},{7,11,1800},{8,11,314},{9,11,700},{139,11,487},{4,10,230},{5,10,702},{148,\n11,94},{132,11,228},{139,0,435},{9,0,20},{10,0,324},{10,0,807},{139,0,488},{6,10\n,1728},{136,11,419},{4,10,484},{18,10,26},{19,10,42},{20,10,43},{21,10,0},{23,10\n,27},{152,10,14},{135,0,1431},{133,11,828},{5,0,112},{6,0,103},{6,0,150},{7,0,\n1303},{7,11,176},{7,11,178},{7,11,1110},{9,0,292},{10,0,481},{10,11,481},{20,0,\n13},{148,11,13},{138,0,356},{4,11,51},{5,11,39},{6,11,4},{7,11,591},{7,11,849},{\n7,11,951},{7,11,1129},{7,11,1613},{7,11,1760},{7,11,1988},{9,11,434},{10,11,754}\n,{11,11,25},{11,11,37},{139,11,414},{6,0,1963},{134,0,2000},{132,10,633},{5,11,\n902},{134,0,1244},{135,11,928},{140,0,18},{138,0,204},{135,11,1173},{134,0,867},\n{4,0,708},{8,0,15},{9,0,50},{9,0,386},{11,0,18},{11,0,529},{140,0,228},{134,11,\n270},{4,0,563},{7,0,109},{7,0,592},{7,0,637},{7,0,770},{8,0,463},{9,0,60},{9,0,\n335},{9,0,904},{10,0,73},{11,0,434},{12,0,585},{13,0,331},{18,0,110},{148,0,60},\n{132,0,502},{14,11,359},{19,11,52},{148,11,47},{6,11,377},{7,11,1025},{9,11,613}\n,{145,11,104},{5,10,70},{5,10,622},{6,0,347},{6,10,334},{7,10,1032},{9,10,171},{\n10,0,161},{11,10,26},{11,10,213},{11,10,637},{11,10,707},{12,10,202},{12,10,380}\n,{13,10,226},{13,10,355},{14,10,222},{145,10,42},{132,11,416},{4,0,33},{5,0,102}\n,{6,0,284},{7,0,1079},{7,0,1423},{7,0,1702},{8,0,470},{9,0,554},{9,0,723},{11,0,\n333},{142,11,372},{5,11,152},{5,11,197},{7,11,340},{7,11,867},{10,11,548},{10,11\n,581},{11,11,6},{12,11,3},{12,11,19},{14,11,110},{142,11,289},{7,0,246},{135,0,\n840},{6,0,10},{8,0,571},{9,0,739},{143,0,91},{4,10,23},{4,10,141},{5,10,313},{5,\n10,1014},{6,0,465},{6,10,50},{7,0,1465},{7,10,142},{7,10,559},{8,10,640},{9,10,\n460},{9,10,783},{11,10,741},{12,10,183},{141,10,488},{133,0,626},{136,0,614},{\n138,0,237},{7,11,34},{7,11,190},{8,11,28},{8,11,141},{8,11,444},{8,11,811},{9,11\n,468},{11,11,334},{12,11,24},{12,11,386},{140,11,576},{133,11,757},{5,0,18},{6,0\n,526},{13,0,24},{13,0,110},{19,0,5},{147,0,44},{6,0,506},{134,11,506},{135,11,\n1553},{4,0,309},{5,0,462},{7,0,970},{7,0,1097},{7,11,1385},{11,11,582},{11,11,\n650},{11,11,901},{11,11,949},{12,11,232},{12,11,236},{13,11,413},{13,11,501},{18\n,11,116},{22,0,30},{150,0,33},{5,10,222},{9,0,140},{138,10,534},{6,0,1056},{137,\n10,906},{134,0,1704},{138,10,503},{134,0,1036},{5,10,154},{7,10,1491},{10,10,379\n},{138,10,485},{4,11,383},{133,10,716},{134,0,1315},{5,0,86},{7,0,743},{9,0,85},\n{10,0,281},{10,0,432},{11,0,825},{12,0,251},{13,0,118},{142,0,378},{4,10,91},{5,\n10,388},{5,10,845},{6,10,206},{6,10,252},{6,10,365},{7,10,136},{7,10,531},{8,0,\n264},{136,10,621},{5,0,524},{133,0,744},{5,11,277},{141,11,247},{132,11,435},{10\n,0,107},{140,0,436},{132,0,927},{10,0,123},{12,0,670},{146,0,94},{7,0,1149},{9,0\n,156},{138,0,957},{5,11,265},{6,11,212},{135,11,28},{133,0,778},{133,0,502},{8,0\n,196},{10,0,283},{139,0,406},{135,10,576},{136,11,535},{134,0,1312},{5,10,771},{\n5,10,863},{5,10,898},{6,10,1632},{6,10,1644},{134,10,1780},{5,0,855},{5,10,331},\n{135,11,1487},{132,11,702},{5,11,808},{135,11,2045},{7,0,1400},{9,0,446},{138,0,\n45},{140,10,632},{132,0,1003},{5,11,166},{8,11,739},{140,11,511},{5,10,107},{7,\n10,201},{136,10,518},{6,10,446},{135,10,1817},{134,0,1532},{134,0,1097},{4,11,\n119},{5,11,170},{5,11,447},{7,11,1708},{7,11,1889},{9,11,357},{9,11,719},{12,11,\n486},{140,11,596},{9,10,851},{141,10,510},{4,10,504},{7,0,612},{8,0,545},{8,0,\n568},{8,0,642},{9,0,717},{10,0,541},{10,0,763},{11,0,449},{12,0,489},{13,0,153},\n{13,0,296},{14,0,138},{14,0,392},{15,0,50},{16,0,6},{16,0,12},{148,0,9},{4,11,\n450},{135,11,1158},{5,10,883},{5,10,975},{8,10,392},{11,0,54},{13,0,173},{13,0,\n294},{148,10,7},{13,0,455},{15,0,99},{15,0,129},{144,0,68},{135,0,172},{132,11,\n754},{5,10,922},{134,10,1707},{134,0,1029},{17,11,39},{148,11,36},{4,0,568},{5,\n10,993},{7,10,515},{137,10,91},{132,0,732},{10,0,617},{138,11,617},{134,0,974},{\n7,0,989},{10,0,377},{12,0,363},{13,0,68},{13,0,94},{14,0,108},{142,0,306},{136,0\n,733},{132,0,428},{7,0,1789},{135,11,1062},{7,0,2015},{140,0,665},{135,10,1433},\n{5,0,287},{7,10,921},{8,10,580},{8,10,593},{8,10,630},{138,10,28},{138,0,806},{4\n,10,911},{5,10,867},{5,10,1013},{7,10,2034},{8,10,798},{136,10,813},{134,0,1539}\n,{8,11,523},{150,11,34},{135,11,740},{7,11,238},{7,11,2033},{8,11,120},{8,11,188\n},{8,11,659},{9,11,598},{10,11,466},{12,11,342},{12,11,588},{13,11,503},{14,11,\n246},{143,11,92},{7,0,1563},{141,0,182},{5,10,135},{6,10,519},{7,10,1722},{10,10\n,271},{11,10,261},{145,10,54},{14,10,338},{148,10,81},{4,10,300},{5,10,436},{135\n,0,484},{145,11,114},{6,0,1623},{134,0,1681},{133,11,640},{4,11,201},{7,11,1744}\n,{8,11,602},{11,11,247},{11,11,826},{145,11,65},{8,11,164},{146,11,62},{6,0,1833\n},{6,0,1861},{136,0,878},{134,0,1569},{8,10,357},{10,10,745},{14,10,426},{17,10,\n94},{147,10,57},{12,0,93},{12,0,501},{13,0,362},{14,0,151},{15,0,40},{15,0,59},{\n16,0,46},{17,0,25},{18,0,14},{18,0,134},{19,0,25},{19,0,69},{20,0,16},{20,0,19},\n{20,0,66},{21,0,23},{21,0,25},{150,0,42},{6,0,1748},{8,0,715},{9,0,802},{10,0,46\n},{10,0,819},{13,0,308},{14,0,351},{14,0,363},{146,0,67},{132,0,994},{4,0,63},{\n133,0,347},{132,0,591},{133,0,749},{7,11,1577},{10,11,304},{10,11,549},{11,11,\n424},{12,11,365},{13,11,220},{13,11,240},{142,11,33},{133,0,366},{5,10,387},{7,0\n,557},{12,0,547},{142,0,86},{135,0,1747},{132,11,907},{5,11,100},{10,11,329},{12\n,11,416},{149,11,29},{4,10,6},{5,10,708},{136,10,75},{7,10,1351},{9,10,581},{10,\n10,639},{11,10,453},{140,10,584},{4,10,303},{135,0,89},{138,10,772},{132,11,176}\n,{5,11,636},{5,11,998},{8,11,26},{137,11,358},{7,11,9},{7,11,1508},{9,11,317},{\n10,11,210},{10,11,292},{10,11,533},{11,11,555},{12,11,526},{12,11,607},{13,11,\n263},{13,11,459},{142,11,271},{134,0,1463},{6,0,772},{6,0,1137},{139,11,595},{7,\n0,977},{139,11,66},{138,0,893},{20,0,48},{148,11,48},{5,0,824},{133,0,941},{134,\n11,295},{4,10,106},{7,0,1543},{7,0,1785},{10,0,690},{139,10,717},{7,0,440},{8,0,\n230},{139,0,106},{5,10,890},{133,10,988},{6,10,626},{142,10,431},{10,11,127},{\n141,11,27},{10,10,706},{17,0,32},{150,10,44},{132,0,216},{137,0,332},{4,10,698},\n{136,11,119},{139,11,267},{138,10,17},{11,11,526},{11,11,939},{141,11,290},{7,11\n,1167},{11,11,934},{13,11,391},{145,11,76},{139,11,39},{134,10,84},{4,0,914},{5,\n0,800},{133,0,852},{10,0,416},{141,0,115},{7,0,564},{142,0,168},{4,0,918},{133,0\n,876},{134,0,1764},{152,0,3},{4,0,92},{5,0,274},{7,11,126},{136,11,84},{140,10,\n498},{136,11,790},{5,10,986},{6,10,130},{7,10,1582},{8,0,501},{8,10,458},{10,10,\n101},{10,10,318},{138,10,823},{6,11,64},{12,11,377},{141,11,309},{5,0,743},{138,\n0,851},{4,0,49},{7,0,280},{135,0,1633},{134,0,879},{136,0,47},{7,10,1644},{137,\n10,129},{132,0,865},{134,0,1202},{9,11,34},{139,11,484},{135,10,997},{5,0,272},{\n5,0,908},{5,0,942},{8,0,197},{9,0,47},{11,0,538},{139,0,742},{6,11,1700},{7,11,\n26},{7,11,293},{7,11,382},{7,11,1026},{7,11,1087},{7,11,2027},{8,11,24},{8,11,\n114},{8,11,252},{8,11,727},{8,11,729},{9,11,30},{9,11,199},{9,11,231},{9,11,251}\n,{9,11,334},{9,11,361},{9,11,488},{9,11,712},{10,11,55},{10,11,60},{10,11,232},{\n10,11,332},{10,11,384},{10,11,396},{10,11,504},{10,11,542},{10,11,652},{11,11,20\n},{11,11,48},{11,11,207},{11,11,291},{11,11,298},{11,11,342},{11,11,365},{11,11,\n394},{11,11,620},{11,11,705},{11,11,1017},{12,11,123},{12,11,340},{12,11,406},{\n12,11,643},{13,11,61},{13,11,269},{13,11,311},{13,11,319},{13,11,486},{14,11,234\n},{15,11,62},{15,11,85},{16,11,71},{18,11,119},{148,11,105},{6,0,1455},{150,11,\n37},{135,10,1927},{135,0,1911},{137,0,891},{7,10,1756},{137,10,98},{7,10,1046},{\n139,10,160},{132,0,761},{6,11,379},{7,11,270},{7,11,1116},{8,11,176},{8,11,183},\n{9,11,432},{9,11,661},{12,11,247},{12,11,617},{146,11,125},{6,10,45},{7,10,433},\n{8,10,129},{9,10,21},{10,10,392},{11,10,79},{12,10,499},{13,10,199},{141,10,451}\n,{4,0,407},{5,11,792},{133,11,900},{132,0,560},{135,0,183},{7,10,558},{8,10,353}\n,{141,0,490},{4,0,475},{5,10,785},{6,0,731},{11,0,35},{13,0,71},{13,0,177},{142,\n0,422},{8,10,81},{9,10,189},{9,10,201},{11,10,478},{11,10,712},{141,10,338},{4,0\n,418},{4,0,819},{133,10,353},{151,10,26},{4,11,901},{133,11,776},{132,0,575},{7,\n0,818},{16,0,92},{17,0,14},{17,0,45},{18,0,75},{148,0,18},{6,0,222},{7,0,636},{7\n,0,1620},{8,0,409},{9,0,693},{139,0,77},{6,10,25},{7,10,855},{7,10,1258},{144,10\n,32},{6,0,1880},{6,0,1887},{6,0,1918},{6,0,1924},{9,0,967},{9,0,995},{9,0,1015},\n{12,0,826},{12,0,849},{12,0,857},{12,0,860},{12,0,886},{12,0,932},{18,0,228},{18\n,0,231},{146,0,240},{134,0,633},{134,0,1308},{4,11,37},{5,11,334},{135,11,1253},\n{4,10,4},{7,10,1118},{7,10,1320},{7,10,1706},{8,10,277},{9,10,622},{10,0,86},{11\n,10,724},{12,10,350},{12,10,397},{13,10,28},{13,10,159},{15,10,89},{18,10,5},{19\n,10,9},{20,10,34},{150,10,47},{132,11,508},{137,11,448},{12,11,107},{146,11,31},\n{132,0,817},{134,0,663},{133,0,882},{134,0,914},{132,11,540},{132,11,533},{136,\n11,608},{8,0,885},{138,0,865},{132,0,426},{6,0,58},{7,0,745},{7,0,1969},{8,0,399\n},{8,0,675},{9,0,479},{9,0,731},{10,0,330},{10,0,593},{10,0,817},{11,0,32},{11,0\n,133},{11,0,221},{145,0,68},{134,10,255},{7,0,102},{137,0,538},{137,10,216},{7,\n11,253},{136,11,549},{135,11,912},{9,10,183},{139,10,286},{11,10,956},{151,10,3}\n,{8,11,527},{18,11,60},{147,11,24},{4,10,536},{7,10,1141},{10,10,723},{139,10,\n371},{133,11,920},{7,0,876},{135,10,285},{135,10,560},{132,10,690},{142,11,126},\n{11,10,33},{12,10,571},{149,10,1},{133,0,566},{4,11,483},{9,0,139},{10,0,399},{\n11,0,469},{12,0,634},{141,0,223},{6,0,48},{135,0,63},{7,10,1862},{12,10,491},{12\n,10,520},{13,10,383},{14,10,244},{146,0,12},{135,11,1665},{132,11,448},{9,11,495\n},{146,11,104},{6,0,114},{7,0,1224},{7,0,1556},{136,0,3},{4,10,190},{133,10,554}\n,{5,10,1001},{8,0,576},{137,0,267},{133,10,446},{133,0,933},{139,11,1009},{8,11,\n653},{13,11,93},{147,11,14},{6,0,692},{6,0,821},{134,0,1077},{5,11,172},{135,11,\n801},{138,0,752},{4,0,375},{134,0,638},{134,0,1011},{140,11,540},{5,11,260},{137\n,0,96},{139,11,587},{135,10,1231},{4,10,304},{12,0,30},{13,0,148},{14,0,87},{14,\n0,182},{16,0,42},{148,0,70},{6,0,1398},{7,0,56},{7,0,1989},{8,0,337},{8,0,738},{\n9,0,600},{12,0,37},{13,0,447},{142,0,92},{138,0,666},{5,0,394},{7,0,487},{136,0,\n246},{6,10,53},{6,10,199},{7,10,1408},{8,10,32},{8,10,93},{9,0,437},{10,10,397},\n{10,10,629},{11,10,593},{11,10,763},{13,10,326},{145,10,35},{134,10,105},{9,0,\n320},{10,0,506},{138,10,794},{7,11,57},{8,11,167},{8,11,375},{9,11,82},{9,11,561\n},{10,11,620},{10,11,770},{11,10,704},{141,10,396},{5,10,114},{5,10,255},{6,0,\n1003},{141,10,285},{7,0,866},{135,0,1163},{133,11,531},{132,0,328},{7,10,2035},{\n8,10,19},{9,10,89},{138,10,831},{8,11,194},{136,11,756},{136,0,1000},{5,11,453},\n{134,11,441},{4,0,101},{5,0,833},{7,0,1171},{136,0,744},{133,0,726},{136,10,746}\n,{138,0,176},{6,0,9},{6,0,397},{7,0,53},{7,0,1742},{10,0,632},{11,0,828},{140,0,\n146},{135,11,22},{145,11,64},{132,0,839},{11,0,417},{12,0,223},{140,0,265},{4,11\n,102},{7,11,815},{7,11,1699},{139,11,964},{5,10,955},{136,10,814},{6,0,1931},{6,\n0,2007},{18,0,246},{146,0,247},{8,0,198},{11,0,29},{140,0,534},{135,0,1771},{6,0\n,846},{7,11,1010},{11,11,733},{11,11,759},{12,11,563},{13,11,34},{14,11,101},{18\n,11,45},{146,11,129},{4,0,186},{5,0,157},{8,0,168},{138,0,6},{132,11,899},{133,\n10,56},{148,10,100},{133,0,875},{5,0,773},{5,0,991},{6,0,1635},{134,0,1788},{6,0\n,1274},{9,0,477},{141,0,78},{4,0,639},{6,11,52},{7,0,111},{8,0,581},{9,11,104},{\n9,11,559},{10,10,4},{10,10,13},{11,10,638},{12,0,177},{12,11,308},{19,11,87},{\n148,10,57},{132,11,604},{4,11,301},{133,10,738},{133,10,758},{134,0,1747},{7,11,\n1440},{11,11,854},{11,11,872},{11,11,921},{12,11,551},{13,11,472},{142,11,367},{\n7,0,1364},{7,0,1907},{141,0,158},{134,0,873},{4,0,404},{4,0,659},{7,0,552},{135,\n0,675},{135,10,1112},{139,10,328},{7,11,508},{137,10,133},{133,0,391},{5,10,110}\n,{6,10,169},{6,10,1702},{7,10,400},{8,10,538},{9,10,184},{9,10,524},{140,10,218}\n,{6,11,310},{7,11,1849},{8,11,72},{8,11,272},{8,11,431},{9,11,12},{9,11,351},{10\n,11,563},{10,11,630},{10,11,810},{11,11,367},{11,11,599},{11,11,686},{140,11,672\n},{5,0,540},{6,0,1697},{136,0,668},{132,0,883},{134,0,78},{6,10,133},{9,10,353},\n{11,10,993},{12,0,628},{146,0,79},{6,11,181},{7,11,537},{8,11,64},{9,11,127},{10\n,11,496},{12,11,510},{141,11,384},{6,10,93},{7,10,1422},{7,10,1851},{8,10,673},{\n9,10,529},{140,10,43},{137,10,371},{134,0,1460},{134,0,962},{4,11,244},{135,11,\n233},{9,10,25},{10,10,467},{138,10,559},{4,10,335},{135,10,942},{133,0,460},{135\n,11,334},{134,11,1650},{4,0,199},{139,0,34},{5,10,601},{8,10,39},{10,10,773},{11\n,10,84},{12,10,205},{142,10,1},{133,10,870},{134,0,388},{14,0,474},{148,0,120},{\n133,11,369},{139,0,271},{4,0,511},{4,10,181},{9,0,333},{9,0,379},{10,0,602},{11,\n0,441},{11,0,723},{11,0,976},{140,0,357},{134,0,608},{134,10,1652},{9,11,338},{\n150,0,49},{140,0,988},{134,0,617},{5,0,938},{136,0,707},{132,10,97},{5,10,147},{\n6,10,286},{7,10,1362},{141,10,176},{6,0,756},{134,0,1149},{133,11,896},{6,10,375\n},{7,10,169},{7,10,254},{136,10,780},{134,0,1583},{135,10,1447},{139,0,285},{7,\n11,1117},{8,11,393},{136,11,539},{135,0,344},{6,0,469},{7,0,1709},{138,0,515},{5\n,10,629},{135,10,1549},{5,11,4},{5,11,810},{6,11,13},{6,11,538},{6,11,1690},{6,\n11,1726},{7,11,499},{7,11,1819},{8,11,148},{8,11,696},{8,11,791},{12,11,125},{13\n,11,54},{143,11,9},{135,11,1268},{137,0,404},{132,0,500},{5,0,68},{134,0,383},{\n11,0,216},{139,0,340},{4,11,925},{5,11,803},{8,11,698},{138,11,828},{4,0,337},{6\n,0,353},{7,0,1934},{8,0,488},{137,0,429},{7,0,236},{7,0,1795},{8,0,259},{9,0,135\n},{9,0,177},{9,0,860},{10,0,825},{11,0,115},{11,0,370},{11,0,405},{11,0,604},{12\n,0,10},{12,0,667},{12,0,669},{13,0,76},{14,0,310},{15,0,76},{15,0,147},{148,0,23\n},{4,0,15},{4,0,490},{5,0,22},{6,0,244},{7,0,40},{7,0,200},{7,0,906},{7,0,1199},\n{9,0,616},{10,0,716},{11,0,635},{11,0,801},{140,0,458},{4,10,420},{140,0,756},{\n134,0,1504},{5,11,383},{134,0,757},{6,0,1266},{135,0,1735},{5,0,598},{7,0,791},{\n7,10,1570},{8,0,108},{9,0,123},{140,10,542},{142,11,410},{9,11,660},{138,11,347}\n};\n"
  },
  {
    "path": "libs/brotli/enc/static_init.c",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n#include \"static_init.h\"\n\n#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\n#include \"../common/dictionary.h\"\n#include \"dictionary_hash.h\"\n#include \"static_dict_lut.h\"\n#endif\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if (BROTLI_STATIC_INIT != BROTLI_STATIC_INIT_NONE)\nstatic BROTLI_BOOL DoBrotliEncoderStaticInit(void) {\n  const BrotliDictionary* dict = BrotliGetDictionary();\n  BROTLI_BOOL ok = BrotliEncoderInitStaticDictionaryLut(\n      dict, kStaticDictionaryBuckets, kStaticDictionaryWords);\n  if (!ok) return BROTLI_FALSE;\n  ok = BrotliEncoderInitDictionaryHash(dict, kStaticDictionaryHashWords,\n                                       kStaticDictionaryHashLengths);\n  if (!ok) return BROTLI_FALSE;\n  return BROTLI_TRUE;\n}\n#endif  /* BROTLI_STATIC_INIT_NONE */\n\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_EARLY)\nstatic BROTLI_BOOL kEarlyInitOk;\nstatic __attribute__((constructor)) void BrotliEncoderStaticInitEarly(void) {\n  kEarlyInitOk = DoBrotliEncoderStaticInit();\n}\n#elif (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_LAZY)\nstatic BROTLI_BOOL kLazyInitOk;\nvoid BrotliEncoderLazyStaticInitInner(void) {\n  kLazyInitOk = DoBrotliEncoderStaticInit();\n}\n#endif  /* BROTLI_STATIC_INIT_EARLY */\n\nBROTLI_BOOL BrotliEncoderEnsureStaticInit(void) {\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_NONE)\n  return BROTLI_TRUE;\n#elif (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_EARLY)\n  return kEarlyInitOk;\n#else\n  return kLazyInitOk;\n#endif\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/static_init.h",
    "content": "/* Copyright 2025 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Central point for static initialization. */\n\n#ifndef THIRD_PARTY_BROTLI_ENC_STATIC_INIT_H_\n#define THIRD_PARTY_BROTLI_ENC_STATIC_INIT_H_\n\n#include \"../common/platform.h\"\n#include \"../common/static_init.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#if (BROTLI_STATIC_INIT == BROTLI_STATIC_INIT_LAZY)\nBROTLI_INTERNAL void BrotliEncoderLazyStaticInitInner(void);\nBROTLI_INTERNAL void BrotliEncoderLazyStaticInit(void);\n#endif  /* BROTLI_STATIC_INIT */\n\nBROTLI_INTERNAL BROTLI_BOOL BrotliEncoderEnsureStaticInit(void);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  // THIRD_PARTY_BROTLI_ENC_STATIC_INIT_H_\n"
  },
  {
    "path": "libs/brotli/enc/utf8_util.c",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Heuristics for deciding about the UTF8-ness of strings. */\n\n#include \"utf8_util.h\"\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic size_t BrotliParseAsUTF8(\n    int* symbol, const uint8_t* input, size_t size) {\n  /* ASCII */\n  if ((input[0] & 0x80) == 0) {\n    *symbol = input[0];\n    if (*symbol > 0) {\n      return 1;\n    }\n  }\n  /* 2-byte UTF8 */\n  if (size > 1u &&\n      (input[0] & 0xE0) == 0xC0 &&\n      (input[1] & 0xC0) == 0x80) {\n    *symbol = (((input[0] & 0x1F) << 6) |\n               (input[1] & 0x3F));\n    if (*symbol > 0x7F) {\n      return 2;\n    }\n  }\n  /* 3-byte UFT8 */\n  if (size > 2u &&\n      (input[0] & 0xF0) == 0xE0 &&\n      (input[1] & 0xC0) == 0x80 &&\n      (input[2] & 0xC0) == 0x80) {\n    *symbol = (((input[0] & 0x0F) << 12) |\n               ((input[1] & 0x3F) << 6) |\n               (input[2] & 0x3F));\n    if (*symbol > 0x7FF) {\n      return 3;\n    }\n  }\n  /* 4-byte UFT8 */\n  if (size > 3u &&\n      (input[0] & 0xF8) == 0xF0 &&\n      (input[1] & 0xC0) == 0x80 &&\n      (input[2] & 0xC0) == 0x80 &&\n      (input[3] & 0xC0) == 0x80) {\n    *symbol = (((input[0] & 0x07) << 18) |\n               ((input[1] & 0x3F) << 12) |\n               ((input[2] & 0x3F) << 6) |\n               (input[3] & 0x3F));\n    if (*symbol > 0xFFFF && *symbol <= 0x10FFFF) {\n      return 4;\n    }\n  }\n  /* Not UTF8, emit a special symbol above the UTF8-code space */\n  *symbol = 0x110000 | input[0];\n  return 1;\n}\n\n/* Returns 1 if at least min_fraction of the data is UTF8-encoded.*/\nBROTLI_BOOL BrotliIsMostlyUTF8(\n    const uint8_t* data, const size_t pos, const size_t mask,\n    const size_t length, const double min_fraction) {\n  size_t size_utf8 = 0;\n  size_t i = 0;\n  while (i < length) {\n    int symbol;\n    size_t bytes_read =\n        BrotliParseAsUTF8(&symbol, &data[(pos + i) & mask], length - i);\n    i += bytes_read;\n    if (symbol < 0x110000) size_utf8 += bytes_read;\n  }\n  return TO_BROTLI_BOOL((double)size_utf8 > min_fraction * (double)length);\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "libs/brotli/enc/utf8_util.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Heuristics for deciding about the UTF8-ness of strings. */\n\n#ifndef BROTLI_ENC_UTF8_UTIL_H_\n#define BROTLI_ENC_UTF8_UTIL_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\nstatic const double kMinUTF8Ratio = 0.75;\n\n/* Returns 1 if at least min_fraction of the bytes between pos and\n   pos + length in the (data, mask) ring-buffer is UTF8-encoded, otherwise\n   returns 0. */\nBROTLI_INTERNAL BROTLI_BOOL BrotliIsMostlyUTF8(\n    const uint8_t* data, const size_t pos, const size_t mask,\n    const size_t length, const double min_fraction);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_UTF8_UTIL_H_ */\n"
  },
  {
    "path": "libs/brotli/enc/write_bits.h",
    "content": "/* Copyright 2010 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Write bits into a byte array. */\n\n#ifndef BROTLI_ENC_WRITE_BITS_H_\n#define BROTLI_ENC_WRITE_BITS_H_\n\n#include \"../common/platform.h\"\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/* This function writes bits into bytes in increasing addresses, and within\n   a byte least-significant-bit first.\n\n   The function can write up to 56 bits in one go with WriteBits\n   Example: let's assume that 3 bits (Rs below) have been written already:\n\n   BYTE-0     BYTE+1       BYTE+2\n\n   0000 0RRR    0000 0000    0000 0000\n\n   Now, we could write 5 or less bits in MSB by just shifting by 3\n   and OR'ing to BYTE-0.\n\n   For n bits, we take the last 5 bits, OR that with high bits in BYTE-0,\n   and locate the rest in BYTE+1, BYTE+2, etc. */\nstatic BROTLI_INLINE void BrotliWriteBits(size_t n_bits,\n                                          uint64_t bits,\n                                          size_t* BROTLI_RESTRICT pos,\n                                          uint8_t* BROTLI_RESTRICT array) {\n  BROTLI_LOG((\"WriteBits  %2d  0x%08x%08x  %10d\\n\", (int)n_bits,\n      (uint32_t)(bits >> 32), (uint32_t)(bits & 0xFFFFFFFF),\n      (int)*pos));\n  BROTLI_DCHECK((bits >> n_bits) == 0);\n  BROTLI_DCHECK(n_bits <= 56);\n#if defined(BROTLI_LITTLE_ENDIAN)\n  /* This branch of the code can write up to 56 bits at a time,\n     7 bits are lost by being perhaps already in *p and at least\n     1 bit is needed to initialize the bit-stream ahead (i.e. if 7\n     bits are in *p and we write 57 bits, then the next write will\n     access a byte that was never initialized). */\n  {\n    uint8_t* p = &array[*pos >> 3];\n    uint64_t v = (uint64_t)(*p);  /* Zero-extend 8 to 64 bits. */\n    v |= bits << (*pos & 7);\n    BROTLI_UNALIGNED_STORE64LE(p, v);  /* Set some bits. */\n    *pos += n_bits;\n  }\n#else\n  /* implicit & 0xFF is assumed for uint8_t arithmetics */\n  {\n    uint8_t* array_pos = &array[*pos >> 3];\n    const size_t bits_reserved_in_first_byte = (*pos & 7);\n    size_t bits_left_to_write;\n    bits <<= bits_reserved_in_first_byte;\n    *array_pos++ |= (uint8_t)bits;\n    for (bits_left_to_write = n_bits + bits_reserved_in_first_byte;\n         bits_left_to_write >= 9;\n         bits_left_to_write -= 8) {\n      bits >>= 8;\n      *array_pos++ = (uint8_t)bits;\n    }\n    *array_pos = 0;\n    *pos += n_bits;\n  }\n#endif\n}\n\nstatic BROTLI_INLINE void BrotliWriteBitsPrepareStorage(\n    size_t pos, uint8_t* array) {\n  BROTLI_LOG((\"WriteBitsPrepareStorage            %10d\\n\", (int)pos));\n  BROTLI_DCHECK((pos & 7) == 0);\n  array[pos >> 3] = 0;\n}\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_WRITE_BITS_H_ */\n"
  },
  {
    "path": "libs/brotli/include/brotli/decode.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @file\n * API for Brotli decompression.\n */\n\n#ifndef BROTLI_DEC_DECODE_H_\n#define BROTLI_DEC_DECODE_H_\n\n#include <brotli/port.h>\n#include <brotli/shared_dictionary.h>\n#include <brotli/types.h>  /* IWYU pragma: export */\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/**\n * Opaque structure that holds decoder state.\n *\n * Allocated and initialized with ::BrotliDecoderCreateInstance.\n * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance.\n */\ntypedef struct BrotliDecoderStateStruct BrotliDecoderState;\n\n/**\n * Result type for ::BrotliDecoderDecompress and\n * ::BrotliDecoderDecompressStream functions.\n */\ntypedef enum {\n  /** Decoding error, e.g. corrupted input or memory allocation problem. */\n  BROTLI_DECODER_RESULT_ERROR = 0,\n  /** Decoding successfully completed. */\n  BROTLI_DECODER_RESULT_SUCCESS = 1,\n  /** Partially done; should be called again with more input. */\n  BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT = 2,\n  /** Partially done; should be called again with more output. */\n  BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT = 3\n} BrotliDecoderResult;\n\n/**\n * Template that evaluates items of ::BrotliDecoderErrorCode.\n *\n * Example: @code {.cpp}\n * // Log Brotli error code.\n * switch (brotliDecoderErrorCode) {\n * #define CASE_(PREFIX, NAME, CODE) \\\n *   case BROTLI_DECODER ## PREFIX ## NAME: \\\n *     LOG(INFO) << \"error code:\" << #NAME; \\\n *     break;\n * #define NEWLINE_\n * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_)\n * #undef CASE_\n * #undef NEWLINE_\n *   default: LOG(FATAL) << \"unknown brotli error code\";\n * }\n * @endcode\n */\n#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR)      \\\n  BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR                              \\\n  /* Same as BrotliDecoderResult values */                                 \\\n  BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR                               \\\n  BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR                      \\\n  BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR                     \\\n                                                                           \\\n  /* Errors caused by invalid input */                                     \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1) SEPARATOR        \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR                \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3) SEPARATOR   \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET, -4) SEPARATOR \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5) SEPARATOR     \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR                \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7) SEPARATOR           \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8) SEPARATOR      \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9) SEPARATOR          \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10) SEPARATOR         \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR              \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR             \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13) SEPARATOR            \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR              \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR              \\\n  BROTLI_ERROR_CODE(_ERROR_FORMAT_, DISTANCE, -16) SEPARATOR               \\\n                                                                           \\\n  /* -17 code is reserved */                                               \\\n                                                                           \\\n  BROTLI_ERROR_CODE(_ERROR_, COMPOUND_DICTIONARY, -18) SEPARATOR           \\\n  BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR            \\\n  BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR             \\\n                                                                           \\\n  /* Memory allocation problems */                                         \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21) SEPARATOR           \\\n  /* Literal, insert and distance trees together */                        \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR             \\\n  /* -23..-24 codes are reserved for distinct tree groups */               \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR             \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR           \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR           \\\n  /* -28..-29 codes are reserved for dynamic ring-buffer allocation */     \\\n  BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30) SEPARATOR        \\\n                                                                           \\\n  /* \"Impossible\" states */                                                \\\n  BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31)\n\n/**\n * Error code for detailed logging / production debugging.\n *\n * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE.\n */\ntypedef enum {\n#define BROTLI_COMMA_ ,\n#define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \\\n    BROTLI_DECODER ## PREFIX ## NAME = CODE\n  BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM_, BROTLI_COMMA_)\n} BrotliDecoderErrorCode;\n#undef BROTLI_ERROR_CODE_ENUM_ITEM_\n#undef BROTLI_COMMA_\n\n/**\n * The value of the last error code, negative integer.\n *\n * All other error code values are in the range from ::BROTLI_LAST_ERROR_CODE\n * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3 in\n * ::BrotliDecoderErrorCode enumeration.\n */\n#define BROTLI_LAST_ERROR_CODE BROTLI_DECODER_ERROR_UNREACHABLE\n\n/** Options to be used with ::BrotliDecoderSetParameter. */\ntypedef enum BrotliDecoderParameter {\n  /**\n   * Disable \"canny\" ring buffer allocation strategy.\n   *\n   * Ring buffer is allocated according to window size, despite the real size of\n   * the content.\n   */\n  BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION = 0,\n  /**\n   * Flag that determines if \"Large Window Brotli\" is used.\n   */\n  BROTLI_DECODER_PARAM_LARGE_WINDOW = 1\n} BrotliDecoderParameter;\n\n/**\n * Sets the specified parameter to the given decoder instance.\n *\n * @param state decoder instance\n * @param param parameter to set\n * @param value new parameter value\n * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid\n * @returns ::BROTLI_TRUE if value is accepted\n */\nBROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter(\n    BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t value);\n\n/**\n * Adds LZ77 prefix dictionary, adds or replaces built-in static dictionary and\n * transforms.\n *\n * Attached dictionary ownership is not transferred.\n * Data provided to this method should be kept accessible until\n * decoding is finished and decoder instance is destroyed.\n *\n * @note Dictionaries can NOT be attached after actual decoding is started.\n *\n * @param state decoder instance\n * @param type dictionary data format\n * @param data_size length of memory region pointed by @p data\n * @param data dictionary data in format corresponding to @p type\n * @returns ::BROTLI_FALSE if dictionary is corrupted,\n *          or dictionary count limit is reached\n * @returns ::BROTLI_TRUE if dictionary is accepted / attached\n */\nBROTLI_DEC_API BROTLI_BOOL BrotliDecoderAttachDictionary(\n    BrotliDecoderState* state, BrotliSharedDictionaryType type,\n    size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)]);\n\n/**\n * Creates an instance of ::BrotliDecoderState and initializes it.\n *\n * The instance can be used once for decoding and should then be destroyed with\n * ::BrotliDecoderDestroyInstance, it cannot be reused for a new decoding\n * session.\n *\n * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the\n * case they are both zero, default memory allocators are used. @p opaque is\n * passed to @p alloc_func and @p free_func when they are called. @p free_func\n * has to return without doing anything when asked to free a NULL pointer.\n *\n * @param alloc_func custom memory allocation function\n * @param free_func custom memory free function\n * @param opaque custom memory manager handle\n * @returns @c 0 if instance can not be allocated or initialized\n * @returns pointer to initialized ::BrotliDecoderState otherwise\n */\nBROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\n\n/**\n * Deinitializes and frees ::BrotliDecoderState instance.\n *\n * @param state decoder instance to be cleaned up and deallocated\n */\nBROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState* state);\n\n/**\n * Performs one-shot memory-to-memory decompression.\n *\n * Decompresses the data in @p encoded_buffer into @p decoded_buffer, and sets\n * @p *decoded_size to the decompressed length.\n *\n * @param encoded_size size of @p encoded_buffer\n * @param encoded_buffer compressed data buffer with at least @p encoded_size\n *        addressable bytes\n * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \\n\n *                 @b out: length of decompressed data written to\n *                 @p decoded_buffer\n * @param decoded_buffer decompressed data destination buffer\n * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory\n *          allocation failed, or @p decoded_buffer is not large enough;\n * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise\n */\nBROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress(\n    size_t encoded_size,\n    const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)],\n    size_t* decoded_size,\n    uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]);\n\n/**\n * Decompresses the input stream to the output stream.\n *\n * The values @p *available_in and @p *available_out must specify the number of\n * bytes addressable at @p *next_in and @p *next_out respectively.\n * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.\n *\n * After each call, @p *available_in will be decremented by the amount of input\n * bytes consumed, and the @p *next_in pointer will be incremented by that\n * amount. Similarly, @p *available_out will be decremented by the amount of\n * output bytes written, and the @p *next_out pointer will be incremented by\n * that amount.\n *\n * @p total_out, if it is not a null-pointer, will be set to the number\n * of bytes decompressed since the last @p state initialization.\n *\n * @note Input is never overconsumed, so @p next_in and @p available_in could be\n * passed to the next consumer after decoding is complete.\n *\n * @param state decoder instance\n * @param[in, out] available_in @b in: amount of available input; \\n\n *                 @b out: amount of unused input\n * @param[in, out] next_in pointer to the next compressed byte\n * @param[in, out] available_out @b in: length of output buffer; \\n\n *                 @b out: remaining size of output buffer\n * @param[in, out] next_out output buffer cursor;\n *                 can be @c NULL if @p available_out is @c 0\n * @param[out] total_out number of bytes decompressed so far; can be @c NULL\n * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory\n *          allocation failed, arguments were invalid, etc.;\n *          use ::BrotliDecoderGetErrorCode to get detailed error code\n * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is blocked until\n *          more input data is provided\n * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding is blocked until\n *          more output space is provided\n * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no more\n *          input might be consumed and no more output will be produced\n */\nBROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream(\n  BrotliDecoderState* state, size_t* available_in, const uint8_t** next_in,\n  size_t* available_out, uint8_t** next_out, size_t* total_out);\n\n/**\n * Checks if decoder has more output.\n *\n * @param state decoder instance\n * @returns ::BROTLI_TRUE, if decoder has some unconsumed output\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput(\n    const BrotliDecoderState* state);\n\n/**\n * Acquires pointer to internal output buffer.\n *\n * This method is used to make language bindings easier and more efficient:\n *  -# push data to ::BrotliDecoderDecompressStream,\n *     until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported\n *  -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-specific\n *     entity\n *\n * Also this could be useful if there is an output stream that is able to\n * consume all the provided data (e.g. when data is saved to file system).\n *\n * @attention After every call to ::BrotliDecoderTakeOutput @p *size bytes of\n *            output are considered consumed for all consecutive calls to the\n *            instance methods; returned pointer becomes invalidated as well.\n *\n * @note Decoder output is not guaranteed to be contiguous. This means that\n *       after the size-unrestricted call to ::BrotliDecoderTakeOutput,\n *       immediate next call to ::BrotliDecoderTakeOutput may return more data.\n *\n * @param state decoder instance\n * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if\n *                 any amount could be handled; \\n\n *                 @b out: amount of data pointed by returned pointer and\n *                 considered consumed; \\n\n *                 out value is never greater than in value, unless it is @c 0\n * @returns pointer to output data\n */\nBROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput(\n    BrotliDecoderState* state, size_t* size);\n\n/**\n * Checks if instance has already consumed input.\n *\n * Instance that returns ::BROTLI_FALSE is considered \"fresh\" and could be\n * reused.\n *\n * @param state decoder instance\n * @returns ::BROTLI_TRUE if decoder has already used some input bytes\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* state);\n\n/**\n * Checks if decoder instance reached the final state.\n *\n * @param state decoder instance\n * @returns ::BROTLI_TRUE if decoder is in a state where it reached the end of\n *          the input and produced all of the output\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsFinished(\n    const BrotliDecoderState* state);\n\n/**\n * Acquires a detailed error code.\n *\n * Should be used only after ::BrotliDecoderDecompressStream returns\n * ::BROTLI_DECODER_RESULT_ERROR.\n *\n * See also ::BrotliDecoderErrorString\n *\n * @param state decoder instance\n * @returns last saved error code\n */\nBROTLI_DEC_API BrotliDecoderErrorCode BrotliDecoderGetErrorCode(\n    const BrotliDecoderState* state);\n\n/**\n * Converts error code to a c-string.\n */\nBROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c);\n\n/**\n * Gets a decoder library version.\n *\n * Look at BROTLI_MAKE_HEX_VERSION for more information.\n */\nBROTLI_DEC_API uint32_t BrotliDecoderVersion(void);\n\n/**\n * Callback to fire on metadata block start.\n *\n * After this callback is fired, if @p size is not @c 0, it is followed by\n * ::brotli_decoder_metadata_chunk_func as more metadata block contents become\n * accessible.\n *\n * @param opaque callback handle\n * @param size size of metadata block\n */\ntypedef void (*brotli_decoder_metadata_start_func)(void* opaque, size_t size);\n\n/**\n * Callback to fire on metadata block chunk becomes available.\n *\n * This function can be invoked multiple times per metadata block; block should\n * be considered finished when sum of @p size matches the announced metadata\n * block size. Chunks contents pointed by @p data are transient and shouln not\n * be accessed after leaving the callback.\n *\n * @param opaque callback handle\n * @param data pointer to metadata contents\n * @param size size of metadata block chunk, at least @c 1\n */\ntypedef void (*brotli_decoder_metadata_chunk_func)(void* opaque,\n                                                   const uint8_t* data,\n                                                   size_t size);\n\n/**\n * Sets callback for receiving metadata blocks.\n *\n * @param state decoder instance\n * @param start_func callback on metadata block start\n * @param chunk_func callback on metadata block chunk\n * @param opaque callback handle\n */\nBROTLI_DEC_API void BrotliDecoderSetMetadataCallbacks(\n    BrotliDecoderState* state,\n    brotli_decoder_metadata_start_func start_func,\n    brotli_decoder_metadata_chunk_func chunk_func, void* opaque);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n} /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_DEC_DECODE_H_ */\n"
  },
  {
    "path": "libs/brotli/include/brotli/encode.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @file\n * API for Brotli compression.\n */\n\n#ifndef BROTLI_ENC_ENCODE_H_\n#define BROTLI_ENC_ENCODE_H_\n\n#include <brotli/port.h>\n#include <brotli/shared_dictionary.h>\n#include <brotli/types.h>  /* IWYU pragma: export */\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n/** Minimal value for ::BROTLI_PARAM_LGWIN parameter. */\n#define BROTLI_MIN_WINDOW_BITS 10\n/**\n * Maximal value for ::BROTLI_PARAM_LGWIN parameter.\n *\n * @note equal to @c BROTLI_MAX_DISTANCE_BITS constant.\n */\n#define BROTLI_MAX_WINDOW_BITS 24\n/**\n * Maximal value for ::BROTLI_PARAM_LGWIN parameter\n * in \"Large Window Brotli\" (32-bit).\n */\n#define BROTLI_LARGE_MAX_WINDOW_BITS 30\n/** Minimal value for ::BROTLI_PARAM_LGBLOCK parameter. */\n#define BROTLI_MIN_INPUT_BLOCK_BITS 16\n/** Maximal value for ::BROTLI_PARAM_LGBLOCK parameter. */\n#define BROTLI_MAX_INPUT_BLOCK_BITS 24\n/** Minimal value for ::BROTLI_PARAM_QUALITY parameter. */\n#define BROTLI_MIN_QUALITY 0\n/** Maximal value for ::BROTLI_PARAM_QUALITY parameter. */\n#define BROTLI_MAX_QUALITY 11\n\n/** Options for ::BROTLI_PARAM_MODE parameter. */\ntypedef enum BrotliEncoderMode {\n  /**\n   * Default compression mode.\n   *\n   * In this mode compressor does not know anything in advance about the\n   * properties of the input.\n   */\n  BROTLI_MODE_GENERIC = 0,\n  /** Compression mode for UTF-8 formatted text input. */\n  BROTLI_MODE_TEXT = 1,\n  /** Compression mode used in WOFF 2.0. */\n  BROTLI_MODE_FONT = 2\n} BrotliEncoderMode;\n\n/** Default value for ::BROTLI_PARAM_QUALITY parameter. */\n#define BROTLI_DEFAULT_QUALITY 11\n/** Default value for ::BROTLI_PARAM_LGWIN parameter. */\n#define BROTLI_DEFAULT_WINDOW 22\n/** Default value for ::BROTLI_PARAM_MODE parameter. */\n#define BROTLI_DEFAULT_MODE BROTLI_MODE_GENERIC\n\n/** Operations that can be performed by streaming encoder. */\ntypedef enum BrotliEncoderOperation {\n  /**\n   * Process input.\n   *\n   * Encoder may postpone producing output, until it has processed enough input.\n   */\n  BROTLI_OPERATION_PROCESS = 0,\n  /**\n   * Produce output for all processed input.\n   *\n   * Actual flush is performed when input stream is depleted and there is enough\n   * space in output stream. This means that client should repeat\n   * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes @c 0, and\n   * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired\n   * via ::BrotliEncoderTakeOutput, then operation should be repeated after\n   * output buffer is drained.\n   *\n   * @warning Until flush is complete, client @b SHOULD @b NOT swap,\n   *          reduce or extend input stream.\n   *\n   * When flush is complete, output data will be sufficient for decoder to\n   * reproduce all the given input.\n   */\n  BROTLI_OPERATION_FLUSH = 1,\n  /**\n   * Finalize the stream.\n   *\n   * Actual finalization is performed when input stream is depleted and there is\n   * enough space in output stream. This means that client should repeat\n   * ::BROTLI_OPERATION_FINISH operation until @p available_in becomes @c 0, and\n   * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired\n   * via ::BrotliEncoderTakeOutput, then operation should be repeated after\n   * output buffer is drained.\n   *\n   * @warning Until finalization is complete, client @b SHOULD @b NOT swap,\n   *          reduce or extend input stream.\n   *\n   * Helper function ::BrotliEncoderIsFinished checks if stream is finalized and\n   * output fully dumped.\n   *\n   * Adding more input data to finalized stream is impossible.\n   */\n  BROTLI_OPERATION_FINISH = 2,\n  /**\n   * Emit metadata block to stream.\n   *\n   * Metadata is opaque to Brotli: neither encoder, nor decoder processes this\n   * data or relies on it. It may be used to pass some extra information from\n   * encoder client to decoder client without interfering with main data stream.\n   *\n   * @note Encoder may emit empty metadata blocks internally, to pad encoded\n   *       stream to byte boundary.\n   *\n   * @warning Until emitting metadata is complete client @b SHOULD @b NOT swap,\n   *          reduce or extend input stream.\n   *\n   * @warning The whole content of input buffer is considered to be the content\n   *          of metadata block. Do @b NOT @e append metadata to input stream,\n   *          before it is depleted with other operations.\n   *\n   * Stream is soft-flushed before metadata block is emitted. Metadata block\n   * @b MUST be no longer than than 16MiB.\n   */\n  BROTLI_OPERATION_EMIT_METADATA = 3\n} BrotliEncoderOperation;\n\n/** Options to be used with ::BrotliEncoderSetParameter. */\ntypedef enum BrotliEncoderParameter {\n  /**\n   * Tune encoder for specific input.\n   *\n   * ::BrotliEncoderMode enumerates all available values.\n   */\n  BROTLI_PARAM_MODE = 0,\n  /**\n   * The main compression speed-density lever.\n   *\n   * The higher the quality, the slower the compression. Range is\n   * from ::BROTLI_MIN_QUALITY to ::BROTLI_MAX_QUALITY.\n   */\n  BROTLI_PARAM_QUALITY = 1,\n  /**\n   * Recommended sliding LZ77 window size.\n   *\n   * Encoder may reduce this value, e.g. if input is much smaller than\n   * window size.\n   *\n   * Window size is `(1 << value) - 16`.\n   *\n   * Range is from ::BROTLI_MIN_WINDOW_BITS to ::BROTLI_MAX_WINDOW_BITS.\n   */\n  BROTLI_PARAM_LGWIN = 2,\n  /**\n   * Recommended input block size.\n   *\n   * Encoder may reduce this value, e.g. if input is much smaller than input\n   * block size.\n   *\n   * Range is from ::BROTLI_MIN_INPUT_BLOCK_BITS to\n   * ::BROTLI_MAX_INPUT_BLOCK_BITS.\n   *\n   * @note Bigger input block size allows better compression, but consumes more\n   *       memory. \\n The rough formula of memory used for temporary input\n   *       storage is `3 << lgBlock`.\n   */\n  BROTLI_PARAM_LGBLOCK = 3,\n  /**\n   * Flag that affects usage of \"literal context modeling\" format feature.\n   *\n   * This flag is a \"decoding-speed vs compression ratio\" trade-off.\n   */\n  BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING = 4,\n  /**\n   * Estimated total input size for all ::BrotliEncoderCompressStream calls.\n   *\n   * The default value is 0, which means that the total input size is unknown.\n   */\n  BROTLI_PARAM_SIZE_HINT = 5,\n  /**\n   * Flag that determines if \"Large Window Brotli\" is used.\n   */\n  BROTLI_PARAM_LARGE_WINDOW = 6,\n  /**\n   * Recommended number of postfix bits (NPOSTFIX).\n   *\n   * Encoder may change this value.\n   *\n   * Range is from 0 to ::BROTLI_MAX_NPOSTFIX.\n   */\n  BROTLI_PARAM_NPOSTFIX = 7,\n  /**\n   * Recommended number of direct distance codes (NDIRECT).\n   *\n   * Encoder may change this value.\n   *\n   * Range is from 0 to (15 << NPOSTFIX) in steps of (1 << NPOSTFIX).\n   */\n  BROTLI_PARAM_NDIRECT = 8,\n  /**\n   * Number of bytes of input stream already processed by a different instance.\n   *\n   * @note It is important to configure all the encoder instances with same\n   *       parameters (except this one) in order to allow all the encoded parts\n   *       obey the same restrictions implied by header.\n   *\n   * If offset is not 0, then stream header is omitted.\n   * In any case output start is byte aligned, so for proper streams stitching\n   * \"predecessor\" stream must be flushed.\n   *\n   * Range is not artificially limited, but all the values greater or equal to\n   * maximal window size have the same effect. Values greater than 2**30 are not\n   * allowed.\n   */\n  BROTLI_PARAM_STREAM_OFFSET = 9\n} BrotliEncoderParameter;\n\n/**\n * Opaque structure that holds encoder state.\n *\n * Allocated and initialized with ::BrotliEncoderCreateInstance.\n * Cleaned up and deallocated with ::BrotliEncoderDestroyInstance.\n */\ntypedef struct BrotliEncoderStateStruct BrotliEncoderState;\n\n/**\n * Sets the specified parameter to the given encoder instance.\n *\n * @param state encoder instance\n * @param param parameter to set\n * @param value new parameter value\n * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid\n * @returns ::BROTLI_FALSE if value of parameter can not be changed at current\n *          encoder state (e.g. when encoding is started, window size might be\n *          already encoded and therefore it is impossible to change it)\n * @returns ::BROTLI_TRUE if value is accepted\n * @warning invalid values might be accepted in case they would not break\n *          encoding process.\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderSetParameter(\n    BrotliEncoderState* state, BrotliEncoderParameter param, uint32_t value);\n\n/**\n * Creates an instance of ::BrotliEncoderState and initializes it.\n *\n * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the\n * case they are both zero, default memory allocators are used. @p opaque is\n * passed to @p alloc_func and @p free_func when they are called. @p free_func\n * has to return without doing anything when asked to free a NULL pointer.\n *\n * @param alloc_func custom memory allocation function\n * @param free_func custom memory free function\n * @param opaque custom memory manager handle\n * @returns @c 0 if instance can not be allocated or initialized\n * @returns pointer to initialized ::BrotliEncoderState otherwise\n */\nBROTLI_ENC_API BrotliEncoderState* BrotliEncoderCreateInstance(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\n\n/**\n * Deinitializes and frees ::BrotliEncoderState instance.\n *\n * @param state decoder instance to be cleaned up and deallocated\n */\nBROTLI_ENC_API void BrotliEncoderDestroyInstance(BrotliEncoderState* state);\n\n/* Opaque type for pointer to different possible internal structures containing\n   dictionary prepared for the encoder */\ntypedef struct BrotliEncoderPreparedDictionaryStruct\n    BrotliEncoderPreparedDictionary;\n\n/**\n * Prepares a shared dictionary from the given file format for the encoder.\n *\n * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the\n * case they are both zero, default memory allocators are used. @p opaque is\n * passed to @p alloc_func and @p free_func when they are called. @p free_func\n * has to return without doing anything when asked to free a NULL pointer.\n *\n * @warning Created instance is \"lean\"; it does not contain copy of @p data,\n *          rather it contains only pointer to it; therefore,\n *          @p data @b MUST outlive the created instance.\n *\n * @param type type of dictionary stored in data\n * @param data_size size of @p data buffer\n * @param data pointer to the dictionary data\n * @param quality the maximum Brotli quality to prepare the dictionary for,\n *        use BROTLI_MAX_QUALITY by default\n * @param alloc_func custom memory allocation function\n * @param free_func custom memory free function\n * @param opaque custom memory manager handle\n */\nBROTLI_ENC_API BrotliEncoderPreparedDictionary*\nBrotliEncoderPrepareDictionary(BrotliSharedDictionaryType type,\n    size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)],\n    int quality,\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\n\nBROTLI_ENC_API void BrotliEncoderDestroyPreparedDictionary(\n    BrotliEncoderPreparedDictionary* dictionary);\n\n/**\n * Attaches a prepared dictionary of any type to the encoder. Can be used\n * multiple times to attach multiple dictionaries. The dictionary type was\n * determined by BrotliEncoderPrepareDictionary. Multiple raw prefix\n * dictionaries and/or max 1 serialized dictionary with custom words can be\n * attached.\n *\n * @returns ::BROTLI_FALSE in case of error\n * @returns ::BROTLI_TRUE otherwise\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderAttachPreparedDictionary(\n    BrotliEncoderState* state,\n    const BrotliEncoderPreparedDictionary* dictionary);\n\n/**\n * Calculates the output size bound for the given @p input_size.\n *\n * @warning Result is only valid if quality is at least @c 2 and, in\n *          case ::BrotliEncoderCompressStream was used, no flushes\n *          (::BROTLI_OPERATION_FLUSH) were performed.\n *\n * @param input_size size of projected input\n * @returns @c 0 if result does not fit @c size_t\n */\nBROTLI_ENC_API size_t BrotliEncoderMaxCompressedSize(size_t input_size);\n\n/**\n * Performs one-shot memory-to-memory compression.\n *\n * Compresses the data in @p input_buffer into @p encoded_buffer, and sets\n * @p *encoded_size to the compressed length.\n *\n * @note If ::BrotliEncoderMaxCompressedSize(@p input_size) returns non-zero\n *       value, then output is guaranteed to be no longer than that.\n *\n * @note If @p lgwin is greater than ::BROTLI_MAX_WINDOW_BITS then resulting\n *       stream might be incompatible with RFC 7932; to decode such streams,\n *       decoder should be configured with\n *       ::BROTLI_DECODER_PARAM_LARGE_WINDOW = @c 1\n *\n * @param quality quality parameter value, e.g. ::BROTLI_DEFAULT_QUALITY\n * @param lgwin lgwin parameter value, e.g. ::BROTLI_DEFAULT_WINDOW\n * @param mode mode parameter value, e.g. ::BROTLI_DEFAULT_MODE\n * @param input_size size of @p input_buffer\n * @param input_buffer input data buffer with at least @p input_size\n *        addressable bytes\n * @param[in, out] encoded_size @b in: size of @p encoded_buffer; \\n\n *                 @b out: length of compressed data written to\n *                 @p encoded_buffer, or @c 0 if compression fails\n * @param encoded_buffer compressed data destination buffer\n * @returns ::BROTLI_FALSE in case of compression error\n * @returns ::BROTLI_FALSE if output buffer is too small\n * @returns ::BROTLI_TRUE otherwise\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompress(\n    int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,\n    const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)],\n    size_t* encoded_size,\n    uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]);\n\n/**\n * Compresses input stream to output stream.\n *\n * The values @p *available_in and @p *available_out must specify the number of\n * bytes addressable at @p *next_in and @p *next_out respectively.\n * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.\n *\n * After each call, @p *available_in will be decremented by the amount of input\n * bytes consumed, and the @p *next_in pointer will be incremented by that\n * amount. Similarly, @p *available_out will be decremented by the amount of\n * output bytes written, and the @p *next_out pointer will be incremented by\n * that amount.\n *\n * @p total_out, if it is not a null-pointer, will be set to the number\n * of bytes compressed since the last @p state initialization.\n *\n *\n *\n * Internally workflow consists of 3 tasks:\n *  -# (optionally) copy input data to internal buffer\n *  -# actually compress data and (optionally) store it to internal buffer\n *  -# (optionally) copy compressed bytes from internal buffer to output stream\n *\n * Whenever all 3 tasks can't move forward anymore, or error occurs, this\n * method returns the control flow to caller.\n *\n * @p op is used to perform flush, finish the stream, or inject metadata block.\n * See ::BrotliEncoderOperation for more information.\n *\n * Flushing the stream means forcing encoding of all input passed to encoder and\n * completing the current output block, so it could be fully decoded by stream\n * decoder. To perform flush set @p op to ::BROTLI_OPERATION_FLUSH.\n * Under some circumstances (e.g. lack of output stream capacity) this operation\n * would require several calls to ::BrotliEncoderCompressStream. The method must\n * be called again until both input stream is depleted and encoder has no more\n * output (see ::BrotliEncoderHasMoreOutput) after the method is called.\n *\n * Finishing the stream means encoding of all input passed to encoder and\n * adding specific \"final\" marks, so stream decoder could determine that stream\n * is complete. To perform finish set @p op to ::BROTLI_OPERATION_FINISH.\n * Under some circumstances (e.g. lack of output stream capacity) this operation\n * would require several calls to ::BrotliEncoderCompressStream. The method must\n * be called again until both input stream is depleted and encoder has no more\n * output (see ::BrotliEncoderHasMoreOutput) after the method is called.\n *\n * @warning When flushing and finishing, @p op should not change until operation\n *          is complete; input stream should not be swapped, reduced or\n *          extended as well.\n *\n * @param state encoder instance\n * @param op requested operation\n * @param[in, out] available_in @b in: amount of available input; \\n\n *                 @b out: amount of unused input\n * @param[in, out] next_in pointer to the next input byte\n * @param[in, out] available_out @b in: length of output buffer; \\n\n *                 @b out: remaining size of output buffer\n * @param[in, out] next_out compressed output buffer cursor;\n *                 can be @c NULL if @p available_out is @c 0\n * @param[out] total_out number of bytes produced so far; can be @c NULL\n * @returns ::BROTLI_FALSE if there was an error\n * @returns ::BROTLI_TRUE otherwise\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompressStream(\n    BrotliEncoderState* state, BrotliEncoderOperation op, size_t* available_in,\n    const uint8_t** next_in, size_t* available_out, uint8_t** next_out,\n    size_t* total_out);\n\n/**\n * Checks if encoder instance reached the final state.\n *\n * @param state encoder instance\n * @returns ::BROTLI_TRUE if encoder is in a state where it reached the end of\n *          the input and produced all of the output\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* state);\n\n/**\n * Checks if encoder has more output.\n *\n * @param state encoder instance\n * @returns ::BROTLI_TRUE, if encoder has some unconsumed output\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput(\n    BrotliEncoderState* state);\n\n/**\n * Acquires pointer to internal output buffer.\n *\n * This method is used to make language bindings easier and more efficient:\n *  -# push data to ::BrotliEncoderCompressStream,\n *     until ::BrotliEncoderHasMoreOutput returns BROTLI_TRUE\n *  -# use ::BrotliEncoderTakeOutput to peek bytes and copy to language-specific\n *     entity\n *\n * Also this could be useful if there is an output stream that is able to\n * consume all the provided data (e.g. when data is saved to file system).\n *\n * @attention After every call to ::BrotliEncoderTakeOutput @p *size bytes of\n *            output are considered consumed for all consecutive calls to the\n *            instance methods; returned pointer becomes invalidated as well.\n *\n * @note Encoder output is not guaranteed to be contiguous. This means that\n *       after the size-unrestricted call to ::BrotliEncoderTakeOutput,\n *       immediate next call to ::BrotliEncoderTakeOutput may return more data.\n *\n * @param state encoder instance\n * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if\n *                 any amount could be handled; \\n\n *                 @b out: amount of data pointed by returned pointer and\n *                 considered consumed; \\n\n *                 out value is never greater than in value, unless it is @c 0\n * @returns pointer to output data\n */\nBROTLI_ENC_API const uint8_t* BrotliEncoderTakeOutput(\n    BrotliEncoderState* state, size_t* size);\n\n/* Returns the estimated peak memory usage (in bytes) of the BrotliCompress()\n   function, not counting the memory needed for the input and output. */\nBROTLI_ENC_EXTRA_API size_t BrotliEncoderEstimatePeakMemoryUsage(\n    int quality, int lgwin, size_t input_size);\n/* Returns 0 if dictionary is not valid; otherwise returns allocation size. */\nBROTLI_ENC_EXTRA_API size_t BrotliEncoderGetPreparedDictionarySize(\n    const BrotliEncoderPreparedDictionary* dictionary);\n\n/**\n * Gets an encoder library version.\n *\n * Look at BROTLI_MAKE_HEX_VERSION for more information.\n */\nBROTLI_ENC_API uint32_t BrotliEncoderVersion(void);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_ENC_ENCODE_H_ */\n"
  },
  {
    "path": "libs/brotli/include/brotli/port.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Macros for compiler / platform specific API declarations. */\n\n#ifndef BROTLI_COMMON_PORT_H_\n#define BROTLI_COMMON_PORT_H_\n\n/* The following macros were borrowed from https://github.com/nemequ/hedley\n * with permission of original author - Evan Nemerson <evan@nemerson.com> */\n\n/* >>> >>> >>> hedley macros */\n\n#define BROTLI_MAKE_VERSION(major, minor, revision) \\\n  (((major) * 1000000) + ((minor) * 1000) + (revision))\n\n#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)\n#define BROTLI_GNUC_VERSION \\\n  BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)\n#elif defined(__GNUC__)\n#define BROTLI_GNUC_VERSION BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, 0)\n#endif\n\n#if defined(BROTLI_GNUC_VERSION)\n#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_GNUC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000)\n#define BROTLI_MSVC_VERSION                                \\\n  BROTLI_MAKE_VERSION((_MSC_FULL_VER / 10000000),          \\\n                      (_MSC_FULL_VER % 10000000) / 100000, \\\n                      (_MSC_FULL_VER % 100000) / 100)\n#elif defined(_MSC_FULL_VER)\n#define BROTLI_MSVC_VERSION                              \\\n  BROTLI_MAKE_VERSION((_MSC_FULL_VER / 1000000),         \\\n                      (_MSC_FULL_VER % 1000000) / 10000, \\\n                      (_MSC_FULL_VER % 10000) / 10)\n#elif defined(_MSC_VER)\n#define BROTLI_MSVC_VERSION \\\n  BROTLI_MAKE_VERSION(_MSC_VER / 100, _MSC_VER % 100, 0)\n#endif\n\n#if !defined(_MSC_VER)\n#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) (0)\n#elif defined(_MSC_VER) && (_MSC_VER >= 1400)\n#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \\\n  (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))\n#elif defined(_MSC_VER) && (_MSC_VER >= 1200)\n#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \\\n  (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))\n#else\n#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \\\n  (_MSC_VER >= ((major * 100) + (minor)))\n#endif\n\n#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)\n#define BROTLI_INTEL_VERSION                   \\\n  BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100,  \\\n                      __INTEL_COMPILER % 100,  \\\n                      __INTEL_COMPILER_UPDATE)\n#elif defined(__INTEL_COMPILER)\n#define BROTLI_INTEL_VERSION \\\n  BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)\n#endif\n\n#if defined(BROTLI_INTEL_VERSION)\n#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_INTEL_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__PGI) && \\\n    defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)\n#define BROTLI_PGI_VERSION \\\n  BROTLI_MAKE_VERSION(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)\n#endif\n\n#if defined(BROTLI_PGI_VERSION)\n#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_PGI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)\n#define BROTLI_SUNPRO_VERSION                                       \\\n  BROTLI_MAKE_VERSION(                                              \\\n    (((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \\\n    (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf),   \\\n    (__SUNPRO_C & 0xf) * 10)\n#elif defined(__SUNPRO_C)\n#define BROTLI_SUNPRO_VERSION                  \\\n  BROTLI_MAKE_VERSION((__SUNPRO_C >> 8) & 0xf, \\\n                      (__SUNPRO_C >> 4) & 0xf, \\\n                      (__SUNPRO_C) & 0xf)\n#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)\n#define BROTLI_SUNPRO_VERSION                                         \\\n  BROTLI_MAKE_VERSION(                                                \\\n    (((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \\\n    (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf),   \\\n    (__SUNPRO_CC & 0xf) * 10)\n#elif defined(__SUNPRO_CC)\n#define BROTLI_SUNPRO_VERSION                   \\\n  BROTLI_MAKE_VERSION((__SUNPRO_CC >> 8) & 0xf, \\\n                      (__SUNPRO_CC >> 4) & 0xf, \\\n                      (__SUNPRO_CC) & 0xf)\n#endif\n\n#if defined(BROTLI_SUNPRO_VERSION)\n#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_SUNPRO_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)\n#define BROTLI_ARM_VERSION                                       \\\n  BROTLI_MAKE_VERSION((__ARMCOMPILER_VERSION / 1000000),         \\\n                      (__ARMCOMPILER_VERSION % 1000000) / 10000, \\\n                      (__ARMCOMPILER_VERSION % 10000) / 100)\n#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)\n#define BROTLI_ARM_VERSION                                 \\\n  BROTLI_MAKE_VERSION((__ARMCC_VERSION / 1000000),         \\\n                      (__ARMCC_VERSION % 1000000) / 10000, \\\n                      (__ARMCC_VERSION % 10000) / 100)\n#endif\n\n#if defined(BROTLI_ARM_VERSION)\n#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_ARM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__ibmxl__)\n#define BROTLI_IBM_VERSION                    \\\n  BROTLI_MAKE_VERSION(__ibmxl_version__,      \\\n                      __ibmxl_release__,      \\\n                      __ibmxl_modification__)\n#elif defined(__xlC__) && defined(__xlC_ver__)\n#define BROTLI_IBM_VERSION \\\n  BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)\n#elif defined(__xlC__)\n#define BROTLI_IBM_VERSION BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, 0)\n#endif\n\n#if defined(BROTLI_IBM_VERSION)\n#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_IBM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__TI_COMPILER_VERSION__)\n#define BROTLI_TI_VERSION                                         \\\n  BROTLI_MAKE_VERSION((__TI_COMPILER_VERSION__ / 1000000),        \\\n                      (__TI_COMPILER_VERSION__ % 1000000) / 1000, \\\n                      (__TI_COMPILER_VERSION__ % 1000))\n#endif\n\n#if defined(BROTLI_TI_VERSION)\n#define BROTLI_TI_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_TI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_TI_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__IAR_SYSTEMS_ICC__)\n#if __VER__ > 1000\n#define BROTLI_IAR_VERSION                     \\\n  BROTLI_MAKE_VERSION((__VER__ / 1000000),     \\\n                      (__VER__ / 1000) % 1000, \\\n                      (__VER__ % 1000))\n#else\n#define BROTLI_IAR_VERSION BROTLI_MAKE_VERSION(VER / 100, __VER__ % 100, 0)\n#endif\n#endif\n\n#if defined(BROTLI_IAR_VERSION)\n#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_IAR_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__TINYC__)\n#define BROTLI_TINYC_VERSION \\\n  BROTLI_MAKE_VERSION(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)\n#endif\n\n#if defined(BROTLI_TINYC_VERSION)\n#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) \\\n  (BROTLI_TINYC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))\n#else\n#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) (0)\n#endif\n\n#if defined(__has_attribute)\n#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \\\n  __has_attribute(attribute)\n#else\n#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \\\n  BROTLI_GNUC_VERSION_CHECK(major, minor, patch)\n#endif\n\n#if defined(__has_builtin)\n#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \\\n  __has_builtin(builtin)\n#else\n#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \\\n  BROTLI_GNUC_VERSION_CHECK(major, minor, patch)\n#endif\n\n#if defined(__has_feature)\n#define BROTLI_HAS_FEATURE(feature) __has_feature(feature)\n#else\n#define BROTLI_HAS_FEATURE(feature) (0)\n#endif\n\n#if defined(_WIN32) || defined(__CYGWIN__)\n#define BROTLI_PUBLIC\n#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) ||                         \\\n    BROTLI_TI_VERSION_CHECK(8, 0, 0) ||                             \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||                         \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                            \\\n    BROTLI_IBM_VERSION_CHECK(13, 1, 0) ||                           \\\n    BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) ||                        \\\n    (BROTLI_TI_VERSION_CHECK(7, 3, 0) &&                            \\\n     defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))\n#define BROTLI_PUBLIC __attribute__ ((visibility (\"default\")))\n#else\n#define BROTLI_PUBLIC\n#endif\n\n#if defined(_WIN32) || defined(__CYGWIN__)\n#define BROTLI_INTERNAL\n#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) ||                         \\\n    BROTLI_TI_VERSION_CHECK(8, 0, 0) ||                             \\\n    BROTLI_INTEL_VERSION_CHECK(16, 0, 0) ||                         \\\n    BROTLI_ARM_VERSION_CHECK(4, 1, 0) ||                            \\\n    BROTLI_IBM_VERSION_CHECK(13, 1, 0) ||                           \\\n    BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) ||                        \\\n    (BROTLI_TI_VERSION_CHECK(7, 3, 0) &&                            \\\n     defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))\n#define BROTLI_INTERNAL __attribute__ ((visibility (\"hidden\")))\n#else\n#define BROTLI_INTERNAL\n#endif\n\n#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) &&   \\\n    !defined(__STDC_NO_VLA__) && !defined(__cplusplus) &&           \\\n    !defined(__PGI) && !defined(__PGIC__) && !defined(__TINYC__) && \\\n    !defined(__clang__)\n#define BROTLI_ARRAY_PARAM(name) (name)\n#else\n#define BROTLI_ARRAY_PARAM(name)\n#endif\n\n/* <<< <<< <<< end of hedley macros. */\n\n#if defined(BROTLI_SHARED_COMPILATION)\n#if defined(_WIN32)\n#if defined(BROTLICOMMON_SHARED_COMPILATION)\n#define BROTLI_COMMON_API __declspec(dllexport)\n#else  /* !BROTLICOMMON_SHARED_COMPILATION */\n#define BROTLI_COMMON_API __declspec(dllimport)\n#endif  /* BROTLICOMMON_SHARED_COMPILATION */\n#if defined(BROTLIDEC_SHARED_COMPILATION)\n#define BROTLI_DEC_API __declspec(dllexport)\n#else   /* !BROTLIDEC_SHARED_COMPILATION */\n#define BROTLI_DEC_API __declspec(dllimport)\n#endif  /* BROTLIDEC_SHARED_COMPILATION */\n#if defined(BROTLIENC_SHARED_COMPILATION)\n#define BROTLI_ENC_API __declspec(dllexport)\n#else  /* !BROTLIENC_SHARED_COMPILATION */\n#define BROTLI_ENC_API __declspec(dllimport)\n#endif  /* BROTLIENC_SHARED_COMPILATION */\n#else  /* !_WIN32 */\n#define BROTLI_COMMON_API BROTLI_PUBLIC\n#define BROTLI_DEC_API BROTLI_PUBLIC\n#define BROTLI_ENC_API BROTLI_PUBLIC\n#endif  /* _WIN32 */\n#else  /* BROTLI_SHARED_COMPILATION */\n#define BROTLI_COMMON_API\n#define BROTLI_DEC_API\n#define BROTLI_ENC_API\n#endif\n\n#if defined(BROTLI_BUILD_ENC_EXTRA_API)\n#define BROTLI_ENC_EXTRA_API BROTLI_ENC_API\n#else\n#define BROTLI_ENC_EXTRA_API BROTLI_INTERNAL\n#endif\n\n#endif  /* BROTLI_COMMON_PORT_H_ */\n"
  },
  {
    "path": "libs/brotli/include/brotli/shared_dictionary.h",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* (Opaque) Shared Dictionary definition and utilities. */\n\n#ifndef BROTLI_COMMON_SHARED_DICTIONARY_H_\n#define BROTLI_COMMON_SHARED_DICTIONARY_H_\n\n#include <brotli/port.h>\n#include <brotli/types.h>\n\n#if defined(__cplusplus) || defined(c_plusplus)\nextern \"C\" {\n#endif\n\n#define SHARED_BROTLI_MIN_DICTIONARY_WORD_LENGTH 4\n#define SHARED_BROTLI_MAX_DICTIONARY_WORD_LENGTH 31\n#define SHARED_BROTLI_NUM_DICTIONARY_CONTEXTS 64\n#define SHARED_BROTLI_MAX_COMPOUND_DICTS 15\n\n/**\n * Opaque structure that holds shared dictionary data.\n *\n * Allocated and initialized with ::BrotliSharedDictionaryCreateInstance.\n * Cleaned up and deallocated with ::BrotliSharedDictionaryDestroyInstance.\n */\ntypedef struct BrotliSharedDictionaryStruct BrotliSharedDictionary;\n\n/**\n * Input data type for ::BrotliSharedDictionaryAttach.\n */\ntypedef enum BrotliSharedDictionaryType {\n  /** Raw LZ77 prefix dictionary. */\n  BROTLI_SHARED_DICTIONARY_RAW = 0,\n  /** Serialized shared dictionary.\n   *\n   * DO NOT USE: methods accepting this value will fail.\n   */\n  BROTLI_SHARED_DICTIONARY_SERIALIZED = 1\n} BrotliSharedDictionaryType;\n\n/**\n * Creates an instance of ::BrotliSharedDictionary.\n *\n * Fresh instance has default word dictionary and transforms\n * and no LZ77 prefix dictionary.\n *\n * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the\n * case they are both zero, default memory allocators are used. @p opaque is\n * passed to @p alloc_func and @p free_func when they are called. @p free_func\n * has to return without doing anything when asked to free a NULL pointer.\n *\n * @param alloc_func custom memory allocation function\n * @param free_func custom memory free function\n * @param opaque custom memory manager handle\n * @returns @c 0 if instance can not be allocated or initialized\n * @returns pointer to initialized ::BrotliSharedDictionary otherwise\n */\nBROTLI_COMMON_API BrotliSharedDictionary* BrotliSharedDictionaryCreateInstance(\n    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);\n\n/**\n * Deinitializes and frees ::BrotliSharedDictionary instance.\n *\n * @param dict shared dictionary instance to be cleaned up and deallocated\n */\nBROTLI_COMMON_API void BrotliSharedDictionaryDestroyInstance(\n    BrotliSharedDictionary* dict);\n\n/**\n * Attaches dictionary to a given instance of ::BrotliSharedDictionary.\n *\n * Dictionary to be attached is represented in a serialized format as a region\n * of memory.\n *\n * Provided data it partially referenced by a resulting (compound) dictionary,\n * and should be kept untouched, while at least one compound dictionary uses it.\n * This way memory overhead is kept minimal by the cost of additional resource\n * management.\n *\n * @param dict dictionary to extend\n * @param type type of dictionary to attach\n * @param data_size size of @p data\n * @param data serialized dictionary of type @p type, with at least @p data_size\n *        addressable bytes\n * @returns ::BROTLI_TRUE if provided dictionary is successfully attached\n * @returns ::BROTLI_FALSE otherwise\n */\nBROTLI_COMMON_API BROTLI_BOOL BrotliSharedDictionaryAttach(\n    BrotliSharedDictionary* dict, BrotliSharedDictionaryType type,\n    size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)]);\n\n#if defined(__cplusplus) || defined(c_plusplus)\n}  /* extern \"C\" */\n#endif\n\n#endif  /* BROTLI_COMMON_SHARED_DICTIONARY_H_ */\n"
  },
  {
    "path": "libs/brotli/include/brotli/types.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/**\n * @file\n * Common types used in decoder and encoder API.\n */\n\n#ifndef BROTLI_COMMON_TYPES_H_\n#define BROTLI_COMMON_TYPES_H_\n\n#include <stddef.h>  /* IWYU pragma: export */\n\n#if defined(_MSC_VER) && (_MSC_VER < 1600)\ntypedef __int8 int8_t;\ntypedef unsigned __int8 uint8_t;\ntypedef __int16 int16_t;\ntypedef unsigned __int16 uint16_t;\ntypedef __int32 int32_t;\ntypedef unsigned __int32 uint32_t;\ntypedef unsigned __int64 uint64_t;\ntypedef __int64 int64_t;\n#else\n#include <stdint.h>  /* IWYU pragma: export */\n#endif  /* defined(_MSC_VER) && (_MSC_VER < 1600) */\n\n/**\n * A portable @c bool replacement.\n *\n * ::BROTLI_BOOL is a \"documentation\" type: actually it is @c int, but in API it\n * denotes a type, whose only values are ::BROTLI_TRUE and ::BROTLI_FALSE.\n *\n * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE or\n * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros.\n *\n * ::BROTLI_BOOL values returned by Brotli should not be tested for equality\n * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather should be\n * evaluated, for example: @code{.cpp}\n * if (SomeBrotliFunction(encoder, BROTLI_TRUE) &&\n *     !OtherBrotliFunction(decoder, BROTLI_FALSE)) {\n *   bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 == 4));\n *   DoSomething(x);\n * }\n * @endcode\n */\n#define BROTLI_BOOL int\n/** Portable @c true replacement. */\n#define BROTLI_TRUE 1\n/** Portable @c false replacement. */\n#define BROTLI_FALSE 0\n/** @c bool to ::BROTLI_BOOL conversion macros. */\n#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE)\n\n#define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low)\n\n#define BROTLI_UINT32_MAX (~((uint32_t)0))\n#define BROTLI_SIZE_MAX (~((size_t)0))\n\n/**\n * Allocating function pointer type.\n *\n * @param opaque custom memory manager handle provided by client\n * @param size requested memory region size; can not be @c 0\n * @returns @c 0 in the case of failure\n * @returns a valid pointer to a memory region of at least @p size bytes\n *          long otherwise\n */\ntypedef void* (*brotli_alloc_func)(void* opaque, size_t size);\n\n/**\n * Deallocating function pointer type.\n *\n * This function @b SHOULD do nothing if @p address is @c 0.\n *\n * @param opaque custom memory manager handle provided by client\n * @param address memory region pointer returned by ::brotli_alloc_func, or @c 0\n */\ntypedef void (*brotli_free_func)(void* opaque, void* address);\n\n#endif  /* BROTLI_COMMON_TYPES_H_ */\n"
  },
  {
    "path": "libs/clipper/License.txt",
    "content": "Boost Software License - Version 1.0 - August 17th, 2003\nhttp://www.boost.org/LICENSE_1_0.txt\n\nPermission is hereby granted, free of charge, to any person or organization\nobtaining a copy of the software and accompanying documentation covered by\nthis license (the \"Software\") to use, reproduce, display, distribute,\nexecute, and transmit the Software, and to prepare derivative works of the\nSoftware, and to permit third-parties to whom the Software is furnished to\ndo so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including\nthe above license grant, this restriction and the following disclaimer,\nmust be included in all copies of the Software, in whole or in part, and\nall derivative works of the Software, unless such copies or derivative\nworks are solely in the form of machine-executable object code generated by\na source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\nSHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\nFOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE."
  },
  {
    "path": "libs/clipper/Makefile.am",
    "content": "noinst_LIBRARIES = libclipper.a\nlibclipper_a_SOURCES = clipper.cpp clipper.hpp\nEXTRA_DIST = License.txt\n\nAM_CXXFLAGS = -Wall\n\nclipper.cpp: clipper.hpp\n\nCLEANFILES = *.gcda *.gcno\n"
  },
  {
    "path": "libs/clipper/clipper.cpp",
    "content": "/*******************************************************************************\n*                                                                              *\n* Author    :  Angus Johnson                                                   *\n* Version   :  6.2.1                                                           *\n* Date      :  31 October 2014                                                 *\n* Website   :  http://www.angusj.com                                           *\n* Copyright :  Angus Johnson 2010-2014                                         *\n*                                                                              *\n* License:                                                                     *\n* Use, modification & distribution is subject to Boost Software License Ver 1. *\n* http://www.boost.org/LICENSE_1_0.txt                                         *\n*                                                                              *\n* Attributions:                                                                *\n* The code in this library is an extension of Bala Vatti's clipping algorithm: *\n* \"A generic solution to polygon clipping\"                                     *\n* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63.             *\n* http://portal.acm.org/citation.cfm?id=129906                                 *\n*                                                                              *\n* Computer graphics and geometric modeling: implementation and algorithms      *\n* By Max K. Agoston                                                            *\n* Springer; 1 edition (January 4, 2005)                                        *\n* http://books.google.com/books?q=vatti+clipping+agoston                       *\n*                                                                              *\n* See also:                                                                    *\n* \"Polygon Offsetting by Computing Winding Numbers\"                            *\n* Paper no. DETC2005-85513 pp. 565-575                                         *\n* ASME 2005 International Design Engineering Technical Conferences             *\n* and Computers and Information in Engineering Conference (IDETC/CIE2005)      *\n* September 24-28, 2005 , Long Beach, California, USA                          *\n* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf              *\n*                                                                              *\n*******************************************************************************/\n\n/*******************************************************************************\n*                                                                              *\n* This is a translation of the Delphi Clipper library and the naming style     *\n* used has retained a Delphi flavour.                                          *\n*                                                                              *\n*******************************************************************************/\n\n#include \"clipper.hpp\"\n#include <cmath>\n#include <vector>\n#include <algorithm>\n#include <stdexcept>\n#include <cstring>\n#include <cstdlib>\n#include <ostream>\n#include <functional>\n\nnamespace ClipperLib {\n\nstatic double const pi = 3.141592653589793238;\nstatic double const two_pi = pi *2;\nstatic double const def_arc_tolerance = 0.25;\n\nenum Direction { dRightToLeft, dLeftToRight };\n\nstatic int const Unassigned = -1;  //edge not currently 'owning' a solution\nstatic int const Skip = -2;        //edge that would otherwise close a path\n\n#define HORIZONTAL (-1.0E+40)\n#define TOLERANCE (1.0e-20)\n#define NEAR_ZERO(val) (((val) > -TOLERANCE) && ((val) < TOLERANCE))\n\nstruct TEdge {\n  IntPoint Bot;\n  IntPoint Curr;\n  IntPoint Top;\n  IntPoint Delta;\n  double Dx = 0.0;\n  PolyType PolyTyp = ptSubject;\n  EdgeSide Side = esLeft;\n  int WindDelta = 0; //1 or -1 depending on winding direction\n  int WindCnt = 0;\n  int WindCnt2 = 0; //winding count of the opposite polytype\n  int OutIdx = 0;\n  TEdge *Next = nullptr;\n  TEdge *Prev = nullptr;\n  TEdge *NextInLML = nullptr;\n  TEdge *NextInAEL = nullptr;\n  TEdge *PrevInAEL = nullptr;\n  TEdge *NextInSEL = nullptr;\n  TEdge *PrevInSEL = nullptr;\n};\n\nstruct IntersectNode {\n  TEdge          *Edge1;\n  TEdge          *Edge2;\n  IntPoint        Pt;\n};\n\nstruct LocalMinimum {\n  cInt          Y;\n  TEdge        *LeftBound;\n  TEdge        *RightBound;\n};\n\nstruct OutPt;\n\nstruct OutRec {\n  int       Idx;\n  bool      IsHole;\n  bool      IsOpen;\n  OutRec   *FirstLeft;  //see comments in clipper.pas\n  PolyNode *PolyNd;\n  OutPt    *Pts;\n  OutPt    *BottomPt;\n};\n\nstruct OutPt {\n  int       Idx;\n  IntPoint  Pt;\n  OutPt    *Next;\n  OutPt    *Prev;\n};\n\nstruct Join {\n  OutPt    *OutPt1;\n  OutPt    *OutPt2;\n  IntPoint  OffPt;\n};\n\nstruct LocMinSorter\n{\n  inline bool operator()(const LocalMinimum& locMin1, const LocalMinimum& locMin2)\n  {\n    return locMin2.Y < locMin1.Y;\n  }\n};\n\n//------------------------------------------------------------------------------\n//------------------------------------------------------------------------------\n\ninline cInt Round(double val)\n{\n  if ((val < 0)) return static_cast<cInt>(val - 0.5); \n  else return static_cast<cInt>(val + 0.5);\n}\n//------------------------------------------------------------------------------\n\ninline cInt Abs(cInt val)\n{\n  return val < 0 ? -val : val;\n}\n\n//------------------------------------------------------------------------------\n// PolyTree methods ...\n//------------------------------------------------------------------------------\n\nvoid PolyTree::Clear()\n{\n    for (PolyNodes::size_type i = 0; i < AllNodes.size(); ++i)\n      delete AllNodes[i];\n    AllNodes.resize(0); \n    Childs.resize(0);\n}\n//------------------------------------------------------------------------------\n\nPolyNode* PolyTree::GetFirst() const\n{\n  if (!Childs.empty())\n      return Childs[0];\n  else\n      return 0;\n}\n//------------------------------------------------------------------------------\n\nint PolyTree::Total() const\n{\n  int result = (int)AllNodes.size();\n  //with negative offsets, ignore the hidden outer polygon ...\n  if (result > 0 && Childs[0] != AllNodes[0]) result--;\n  return result;\n}\n\n//------------------------------------------------------------------------------\n// PolyNode methods ...\n//------------------------------------------------------------------------------\n\nPolyNode::PolyNode(): Childs(), Parent(0), Index(0), m_IsOpen(false)\n{\n}\n//------------------------------------------------------------------------------\n\nint PolyNode::ChildCount() const\n{\n  return (int)Childs.size();\n}\n//------------------------------------------------------------------------------\n\nvoid PolyNode::AddChild(PolyNode& child)\n{\n  unsigned cnt = (unsigned)Childs.size();\n  Childs.push_back(&child);\n  child.Parent = this;\n  child.Index = cnt;\n}\n//------------------------------------------------------------------------------\n\nPolyNode* PolyNode::GetNext() const\n{ \n  if (!Childs.empty()) \n      return Childs[0]; \n  else\n      return GetNextSiblingUp();    \n}  \n//------------------------------------------------------------------------------\n\nPolyNode* PolyNode::GetNextSiblingUp() const\n{ \n  if (!Parent) //protects against PolyTree.GetNextSiblingUp()\n      return 0;\n  else if (Index == Parent->Childs.size() - 1)\n      return Parent->GetNextSiblingUp();\n  else\n      return Parent->Childs[Index + 1];\n}  \n//------------------------------------------------------------------------------\n\nbool PolyNode::IsHole() const\n{ \n  bool result = true;\n  PolyNode* node = Parent;\n  while (node)\n  {\n      result = !result;\n      node = node->Parent;\n  }\n  return result;\n}  \n//------------------------------------------------------------------------------\n\nbool PolyNode::IsOpen() const\n{ \n  return m_IsOpen;\n}  \n//------------------------------------------------------------------------------\n\n#ifndef use_int32\n\n//------------------------------------------------------------------------------\n// Int128 class (enables safe math on signed 64bit integers)\n// eg Int128 val1((long64)9223372036854775807); //ie 2^63 -1\n//    Int128 val2((long64)9223372036854775807);\n//    Int128 val3 = val1 * val2;\n//    val3.AsString => \"85070591730234615847396907784232501249\" (8.5e+37)\n//------------------------------------------------------------------------------\n\nclass Int128\n{\n  public:\n    ulong64 lo;\n    long64 hi;\n\n    Int128(long64 _lo = 0)\n    {\n      lo = (ulong64)_lo;   \n      if (_lo < 0)  hi = -1; else hi = 0; \n    }\n\n\n    Int128(const Int128 &val): lo(val.lo), hi(val.hi){}\n\n    Int128(const long64& _hi, const ulong64& _lo): lo(_lo), hi(_hi){}\n    \n    Int128& operator = (const long64 &val)\n    {\n      lo = (ulong64)val;\n      if (val < 0) hi = -1; else hi = 0;\n      return *this;\n    }\n\n    bool operator == (const Int128 &val) const\n      {return (hi == val.hi && lo == val.lo);}\n\n    bool operator != (const Int128 &val) const\n      { return !(*this == val);}\n\n    bool operator > (const Int128 &val) const\n    {\n      if (hi != val.hi)\n        return hi > val.hi;\n      else\n        return lo > val.lo;\n    }\n\n    bool operator < (const Int128 &val) const\n    {\n      if (hi != val.hi)\n        return hi < val.hi;\n      else\n        return lo < val.lo;\n    }\n\n    bool operator >= (const Int128 &val) const\n      { return !(*this < val);}\n\n    bool operator <= (const Int128 &val) const\n      { return !(*this > val);}\n\n    Int128& operator += (const Int128 &rhs)\n    {\n      hi += rhs.hi;\n      lo += rhs.lo;\n      if (lo < rhs.lo) hi++;\n      return *this;\n    }\n\n    Int128 operator + (const Int128 &rhs) const\n    {\n      Int128 result(*this);\n      result+= rhs;\n      return result;\n    }\n\n    Int128& operator -= (const Int128 &rhs)\n    {\n      *this += -rhs;\n      return *this;\n    }\n\n    Int128 operator - (const Int128 &rhs) const\n    {\n      Int128 result(*this);\n      result -= rhs;\n      return result;\n    }\n\n    Int128 operator-() const //unary negation\n    {\n      if (lo == 0)\n        return Int128(-hi, 0);\n      else\n        return Int128(~hi, ~lo + 1);\n    }\n\n    operator double() const\n    {\n      const double shift64 = 18446744073709551616.0; //2^64\n      if (hi < 0)\n      {\n        if (lo == 0) return (double)hi * shift64;\n        else return -(double)(~lo + ~hi * shift64);\n      }\n      else\n        return (double)(lo + hi * shift64);\n    }\n\n};\n//------------------------------------------------------------------------------\n\nInt128 Int128Mul (long64 lhs, long64 rhs)\n{\n  bool negate = (lhs < 0) != (rhs < 0);\n\n  if (lhs < 0) lhs = -lhs;\n  ulong64 int1Hi = ulong64(lhs) >> 32;\n  ulong64 int1Lo = ulong64(lhs & 0xFFFFFFFF);\n\n  if (rhs < 0) rhs = -rhs;\n  ulong64 int2Hi = ulong64(rhs) >> 32;\n  ulong64 int2Lo = ulong64(rhs & 0xFFFFFFFF);\n\n  //nb: see comments in clipper.pas\n  ulong64 a = int1Hi * int2Hi;\n  ulong64 b = int1Lo * int2Lo;\n  ulong64 c = int1Hi * int2Lo + int1Lo * int2Hi;\n\n  Int128 tmp;\n  tmp.hi = long64(a + (c >> 32));\n  tmp.lo = long64(c << 32);\n  tmp.lo += long64(b);\n  if (tmp.lo < b) tmp.hi++;\n  if (negate) tmp = -tmp;\n  return tmp;\n};\n#endif\n\n//------------------------------------------------------------------------------\n// Miscellaneous global functions\n//------------------------------------------------------------------------------\n\nbool Orientation(const Path &poly)\n{\n    return Area(poly) >= 0;\n}\n//------------------------------------------------------------------------------\n\ndouble Area(const Path &poly)\n{\n  int size = (int)poly.size();\n  if (size < 3) return 0;\n\n  double a = 0;\n  for (int i = 0, j = size -1; i < size; ++i)\n  {\n    a += ((double)poly[j].X + poly[i].X) * ((double)poly[j].Y - poly[i].Y);\n    j = i;\n  }\n  return -a * 0.5;\n}\n//------------------------------------------------------------------------------\n\ndouble Area(const OutRec &outRec)\n{\n  OutPt *op = outRec.Pts;\n  if (!op) return 0;\n  double a = 0;\n  do {\n    a +=  (double)(op->Prev->Pt.X + op->Pt.X) * (double)(op->Prev->Pt.Y - op->Pt.Y);\n    op = op->Next;\n  } while (op != outRec.Pts);\n  return a * 0.5;\n}\n//------------------------------------------------------------------------------\n\nbool PointIsVertex(const IntPoint &Pt, OutPt *pp)\n{\n  OutPt *pp2 = pp;\n  do\n  {\n    if (pp2->Pt == Pt) return true;\n    pp2 = pp2->Next;\n  }\n  while (pp2 != pp);\n  return false;\n}\n//------------------------------------------------------------------------------\n\nint PointInPolygon (const IntPoint &pt, const Path &path)\n{\n  //returns 0 if false, +1 if true, -1 if pt ON polygon boundary\n  //See \"The Point in Polygon Problem for Arbitrary Polygons\" by Hormann & Agathos\n  //http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.5498&rep=rep1&type=pdf\n  int result = 0;\n  size_t cnt = path.size();\n  if (cnt < 3) return 0;\n  IntPoint ip = path[0];\n  for(size_t i = 1; i <= cnt; ++i)\n  {\n    IntPoint ipNext = (i == cnt ? path[0] : path[i]);\n    if (ipNext.Y == pt.Y)\n    {\n        if ((ipNext.X == pt.X) || (ip.Y == pt.Y && \n          ((ipNext.X > pt.X) == (ip.X < pt.X)))) return -1;\n    }\n    if ((ip.Y < pt.Y) != (ipNext.Y < pt.Y))\n    {\n      if (ip.X >= pt.X)\n      {\n        if (ipNext.X > pt.X) result = 1 - result;\n        else\n        {\n          double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - \n            (double)(ipNext.X - pt.X) * (ip.Y - pt.Y);\n          if (!d) return -1;\n          if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result;\n        }\n      } else\n      {\n        if (ipNext.X > pt.X)\n        {\n          double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - \n            (double)(ipNext.X - pt.X) * (ip.Y - pt.Y);\n          if (!d) return -1;\n          if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result;\n        }\n      }\n    }\n    ip = ipNext;\n  } \n  return result;\n}\n//------------------------------------------------------------------------------\n\nint PointInPolygon (const IntPoint &pt, OutPt *op)\n{\n  //returns 0 if false, +1 if true, -1 if pt ON polygon boundary\n  int result = 0;\n  OutPt* startOp = op;\n  for(;;)\n  {\n    if (op->Next->Pt.Y == pt.Y)\n    {\n        if ((op->Next->Pt.X == pt.X) || (op->Pt.Y == pt.Y && \n          ((op->Next->Pt.X > pt.X) == (op->Pt.X < pt.X)))) return -1;\n    }\n    if ((op->Pt.Y < pt.Y) != (op->Next->Pt.Y < pt.Y))\n    {\n      if (op->Pt.X >= pt.X)\n      {\n        if (op->Next->Pt.X > pt.X) result = 1 - result;\n        else\n        {\n          double d = (double)(op->Pt.X - pt.X) * (op->Next->Pt.Y - pt.Y) - \n            (double)(op->Next->Pt.X - pt.X) * (op->Pt.Y - pt.Y);\n          if (!d) return -1;\n          if ((d > 0) == (op->Next->Pt.Y > op->Pt.Y)) result = 1 - result;\n        }\n      } else\n      {\n        if (op->Next->Pt.X > pt.X)\n        {\n          double d = (double)(op->Pt.X - pt.X) * (op->Next->Pt.Y - pt.Y) - \n            (double)(op->Next->Pt.X - pt.X) * (op->Pt.Y - pt.Y);\n          if (!d) return -1;\n          if ((d > 0) == (op->Next->Pt.Y > op->Pt.Y)) result = 1 - result;\n        }\n      }\n    } \n    op = op->Next;\n    if (startOp == op) break;\n  } \n  return result;\n}\n//------------------------------------------------------------------------------\n\nbool Poly2ContainsPoly1(OutPt *OutPt1, OutPt *OutPt2)\n{\n  OutPt* op = OutPt1;\n  do\n  {\n    //nb: PointInPolygon returns 0 if false, +1 if true, -1 if pt on polygon\n    int res = PointInPolygon(op->Pt, OutPt2);\n    if (res >= 0) return res > 0;\n    op = op->Next; \n  }\n  while (op != OutPt1);\n  return true; \n}\n//----------------------------------------------------------------------\n\nbool SlopesEqual(const TEdge &e1, const TEdge &e2, bool UseFullInt64Range)\n{\n#ifndef use_int32\n  if (UseFullInt64Range)\n    return Int128Mul(e1.Delta.Y, e2.Delta.X) == Int128Mul(e1.Delta.X, e2.Delta.Y);\n  else \n#endif\n    return e1.Delta.Y * e2.Delta.X == e1.Delta.X * e2.Delta.Y;\n}\n//------------------------------------------------------------------------------\n\nbool SlopesEqual(const IntPoint pt1, const IntPoint pt2,\n  const IntPoint pt3, bool UseFullInt64Range)\n{\n#ifndef use_int32\n  if (UseFullInt64Range)\n    return Int128Mul(pt1.Y-pt2.Y, pt2.X-pt3.X) == Int128Mul(pt1.X-pt2.X, pt2.Y-pt3.Y);\n  else \n#endif\n    return (pt1.Y-pt2.Y)*(pt2.X-pt3.X) == (pt1.X-pt2.X)*(pt2.Y-pt3.Y);\n}\n//------------------------------------------------------------------------------\n\nbool SlopesEqual(const IntPoint pt1, const IntPoint pt2,\n  const IntPoint pt3, const IntPoint pt4, bool UseFullInt64Range)\n{\n#ifndef use_int32\n  if (UseFullInt64Range)\n    return Int128Mul(pt1.Y-pt2.Y, pt3.X-pt4.X) == Int128Mul(pt1.X-pt2.X, pt3.Y-pt4.Y);\n  else \n#endif\n    return (pt1.Y-pt2.Y)*(pt3.X-pt4.X) == (pt1.X-pt2.X)*(pt3.Y-pt4.Y);\n}\n//------------------------------------------------------------------------------\n\ninline bool IsHorizontal(TEdge &e)\n{\n  return e.Delta.Y == 0;\n}\n//------------------------------------------------------------------------------\n\ninline double GetDx(const IntPoint pt1, const IntPoint pt2)\n{\n  return (pt1.Y == pt2.Y) ?\n    HORIZONTAL : (double)(pt2.X - pt1.X) / (pt2.Y - pt1.Y);\n}\n//---------------------------------------------------------------------------\n\ninline void SetDx(TEdge &e)\n{\n  e.Delta.X = (e.Top.X - e.Bot.X);\n  e.Delta.Y = (e.Top.Y - e.Bot.Y);\n\n  if (e.Delta.Y == 0) e.Dx = HORIZONTAL;\n  else e.Dx = (double)(e.Delta.X) / e.Delta.Y;\n}\n//---------------------------------------------------------------------------\n\ninline void SwapSides(TEdge &Edge1, TEdge &Edge2)\n{\n  EdgeSide Side =  Edge1.Side;\n  Edge1.Side = Edge2.Side;\n  Edge2.Side = Side;\n}\n//------------------------------------------------------------------------------\n\ninline void SwapPolyIndexes(TEdge &Edge1, TEdge &Edge2)\n{\n  int OutIdx =  Edge1.OutIdx;\n  Edge1.OutIdx = Edge2.OutIdx;\n  Edge2.OutIdx = OutIdx;\n}\n//------------------------------------------------------------------------------\n\ninline cInt TopX(TEdge &edge, const cInt currentY)\n{\n  return ( currentY == edge.Top.Y ) ?\n    edge.Top.X : edge.Bot.X + Round(edge.Dx *(currentY - edge.Bot.Y));\n}\n//------------------------------------------------------------------------------\n\nvoid IntersectPoint(TEdge &Edge1, TEdge &Edge2, IntPoint &ip)\n{\n#ifdef use_xyz  \n  ip.Z = 0;\n#endif\n\n  double b1, b2;\n  if (Edge1.Dx == Edge2.Dx)\n  {\n    ip.Y = Edge1.Curr.Y;\n    ip.X = TopX(Edge1, ip.Y);\n    return;\n  }\n  else if (Edge1.Delta.X == 0)\n  {\n    ip.X = Edge1.Bot.X;\n    if (IsHorizontal(Edge2))\n      ip.Y = Edge2.Bot.Y;\n    else\n    {\n      b2 = Edge2.Bot.Y - (Edge2.Bot.X / Edge2.Dx);\n      ip.Y = Round(ip.X / Edge2.Dx + b2);\n    }\n  }\n  else if (Edge2.Delta.X == 0)\n  {\n    ip.X = Edge2.Bot.X;\n    if (IsHorizontal(Edge1))\n      ip.Y = Edge1.Bot.Y;\n    else\n    {\n      b1 = Edge1.Bot.Y - (Edge1.Bot.X / Edge1.Dx);\n      ip.Y = Round(ip.X / Edge1.Dx + b1);\n    }\n  } \n  else \n  {\n    b1 = Edge1.Bot.X - Edge1.Bot.Y * Edge1.Dx;\n    b2 = Edge2.Bot.X - Edge2.Bot.Y * Edge2.Dx;\n    double q = (b2-b1) / (Edge1.Dx - Edge2.Dx);\n    ip.Y = Round(q);\n    if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx))\n      ip.X = Round(Edge1.Dx * q + b1);\n    else \n      ip.X = Round(Edge2.Dx * q + b2);\n  }\n\n  if (ip.Y < Edge1.Top.Y || ip.Y < Edge2.Top.Y) \n  {\n    if (Edge1.Top.Y > Edge2.Top.Y)\n      ip.Y = Edge1.Top.Y;\n    else\n      ip.Y = Edge2.Top.Y;\n    if (std::fabs(Edge1.Dx) < std::fabs(Edge2.Dx))\n      ip.X = TopX(Edge1, ip.Y);\n    else\n      ip.X = TopX(Edge2, ip.Y);\n  } \n  //finally, don't allow 'ip' to be BELOW curr.Y (ie bottom of scanbeam) ...\n  if (ip.Y > Edge1.Curr.Y)\n  {\n    ip.Y = Edge1.Curr.Y;\n    //use the more vertical edge to derive X ...\n    if (std::fabs(Edge1.Dx) > std::fabs(Edge2.Dx))\n      ip.X = TopX(Edge2, ip.Y); else\n      ip.X = TopX(Edge1, ip.Y);\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid ReversePolyPtLinks(OutPt *pp)\n{\n  if (!pp) return;\n  OutPt *pp1, *pp2;\n  pp1 = pp;\n  do {\n  pp2 = pp1->Next;\n  pp1->Next = pp1->Prev;\n  pp1->Prev = pp2;\n  pp1 = pp2;\n  } while( pp1 != pp );\n}\n//------------------------------------------------------------------------------\n\nvoid DisposeOutPts(OutPt*& pp)\n{\n  if (pp == 0) return;\n    pp->Prev->Next = 0;\n  while( pp )\n  {\n    OutPt *tmpPp = pp;\n    pp = pp->Next;\n    delete tmpPp;\n  }\n}\n//------------------------------------------------------------------------------\n\ninline void InitEdge(TEdge* e, TEdge* eNext, TEdge* ePrev, const IntPoint& Pt)\n{\n  *e = TEdge();\n  e->Next = eNext;\n  e->Prev = ePrev;\n  e->Curr = Pt;\n  e->OutIdx = Unassigned;\n}\n//------------------------------------------------------------------------------\n\nvoid InitEdge2(TEdge& e, PolyType Pt)\n{\n  if (e.Curr.Y >= e.Next->Curr.Y)\n  {\n    e.Bot = e.Curr;\n    e.Top = e.Next->Curr;\n  } else\n  {\n    e.Top = e.Curr;\n    e.Bot = e.Next->Curr;\n  }\n  SetDx(e);\n  e.PolyTyp = Pt;\n}\n//------------------------------------------------------------------------------\n\nTEdge* RemoveEdge(TEdge* e)\n{\n  //removes e from double_linked_list (but without removing from memory)\n  e->Prev->Next = e->Next;\n  e->Next->Prev = e->Prev;\n  TEdge* result = e->Next;\n  e->Prev = 0; //flag as removed (see ClipperBase.Clear)\n  return result;\n}\n//------------------------------------------------------------------------------\n\ninline void ReverseHorizontal(TEdge &e)\n{\n  //swap horizontal edges' Top and Bottom x's so they follow the natural\n  //progression of the bounds - ie so their xbots will align with the\n  //adjoining lower edge. [Helpful in the ProcessHorizontal() method.]\n  std::swap(e.Top.X, e.Bot.X);\n#ifdef use_xyz\n  std::swap(e.Top.Z, e.Bot.Z);\n#endif\n}\n//------------------------------------------------------------------------------\n\nvoid SwapPoints(IntPoint &pt1, IntPoint &pt2)\n{\n  IntPoint tmp = pt1;\n  pt1 = pt2;\n  pt2 = tmp;\n}\n//------------------------------------------------------------------------------\n\nbool GetOverlapSegment(IntPoint pt1a, IntPoint pt1b, IntPoint pt2a,\n  IntPoint pt2b, IntPoint &pt1, IntPoint &pt2)\n{\n  //precondition: segments are Collinear.\n  if (Abs(pt1a.X - pt1b.X) > Abs(pt1a.Y - pt1b.Y))\n  {\n    if (pt1a.X > pt1b.X) SwapPoints(pt1a, pt1b);\n    if (pt2a.X > pt2b.X) SwapPoints(pt2a, pt2b);\n    if (pt1a.X > pt2a.X) pt1 = pt1a; else pt1 = pt2a;\n    if (pt1b.X < pt2b.X) pt2 = pt1b; else pt2 = pt2b;\n    return pt1.X < pt2.X;\n  } else\n  {\n    if (pt1a.Y < pt1b.Y) SwapPoints(pt1a, pt1b);\n    if (pt2a.Y < pt2b.Y) SwapPoints(pt2a, pt2b);\n    if (pt1a.Y < pt2a.Y) pt1 = pt1a; else pt1 = pt2a;\n    if (pt1b.Y > pt2b.Y) pt2 = pt1b; else pt2 = pt2b;\n    return pt1.Y > pt2.Y;\n  }\n}\n//------------------------------------------------------------------------------\n\nbool FirstIsBottomPt(const OutPt* btmPt1, const OutPt* btmPt2)\n{\n  OutPt *p = btmPt1->Prev;\n  while ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Prev;\n  double dx1p = std::fabs(GetDx(btmPt1->Pt, p->Pt));\n  p = btmPt1->Next;\n  while ((p->Pt == btmPt1->Pt) && (p != btmPt1)) p = p->Next;\n  double dx1n = std::fabs(GetDx(btmPt1->Pt, p->Pt));\n\n  p = btmPt2->Prev;\n  while ((p->Pt == btmPt2->Pt) && (p != btmPt2)) p = p->Prev;\n  double dx2p = std::fabs(GetDx(btmPt2->Pt, p->Pt));\n  p = btmPt2->Next;\n  while ((p->Pt == btmPt2->Pt) && (p != btmPt2)) p = p->Next;\n  double dx2n = std::fabs(GetDx(btmPt2->Pt, p->Pt));\n  return (dx1p >= dx2p && dx1p >= dx2n) || (dx1n >= dx2p && dx1n >= dx2n);\n}\n//------------------------------------------------------------------------------\n\nOutPt* GetBottomPt(OutPt *pp)\n{\n  OutPt* dups = 0;\n  OutPt* p = pp->Next;\n  while (p != pp)\n  {\n    if (p->Pt.Y > pp->Pt.Y)\n    {\n      pp = p;\n      dups = 0;\n    }\n    else if (p->Pt.Y == pp->Pt.Y && p->Pt.X <= pp->Pt.X)\n    {\n      if (p->Pt.X < pp->Pt.X)\n      {\n        dups = 0;\n        pp = p;\n      } else\n      {\n        if (p->Next != pp && p->Prev != pp) dups = p;\n      }\n    }\n    p = p->Next;\n  }\n  if (dups)\n  {\n    //there appears to be at least 2 vertices at BottomPt so ...\n    while (dups != p)\n    {\n      if (!FirstIsBottomPt(p, dups)) pp = dups;\n      dups = dups->Next;\n      while (dups->Pt != pp->Pt) dups = dups->Next;\n    }\n  }\n  return pp;\n}\n//------------------------------------------------------------------------------\n\nbool Pt2IsBetweenPt1AndPt3(const IntPoint pt1,\n  const IntPoint pt2, const IntPoint pt3)\n{\n  if ((pt1 == pt3) || (pt1 == pt2) || (pt3 == pt2))\n    return false;\n  else if (pt1.X != pt3.X)\n    return (pt2.X > pt1.X) == (pt2.X < pt3.X);\n  else\n    return (pt2.Y > pt1.Y) == (pt2.Y < pt3.Y);\n}\n//------------------------------------------------------------------------------\n\nbool HorzSegmentsOverlap(cInt seg1a, cInt seg1b, cInt seg2a, cInt seg2b)\n{\n  if (seg1a > seg1b) std::swap(seg1a, seg1b);\n  if (seg2a > seg2b) std::swap(seg2a, seg2b);\n  return (seg1a < seg2b) && (seg2a < seg1b);\n}\n\n//------------------------------------------------------------------------------\n// ClipperBase class methods ...\n//------------------------------------------------------------------------------\n\nClipperBase::ClipperBase() //constructor\n{\n  m_CurrentLM = m_MinimaList.begin(); //begin() == end() here\n  m_UseFullRange = false;\n}\n//------------------------------------------------------------------------------\n\nClipperBase::~ClipperBase() //destructor\n{\n  Clear();\n}\n//------------------------------------------------------------------------------\n\nvoid RangeTest(const IntPoint& Pt, bool& useFullRange)\n{\n  if (useFullRange)\n  {\n    if (Pt.X > hiRange || Pt.Y > hiRange || -Pt.X > hiRange || -Pt.Y > hiRange) \n      throw \"Coordinate outside allowed range\";\n  }\n  else if (Pt.X > loRange|| Pt.Y > loRange || -Pt.X > loRange || -Pt.Y > loRange) \n  {\n    useFullRange = true;\n    RangeTest(Pt, useFullRange);\n  }\n}\n//------------------------------------------------------------------------------\n\nTEdge* FindNextLocMin(TEdge* E)\n{\n  for (;;)\n  {\n    while (E->Bot != E->Prev->Bot || E->Curr == E->Top) E = E->Next;\n    if (!IsHorizontal(*E) && !IsHorizontal(*E->Prev)) break;\n    while (IsHorizontal(*E->Prev)) E = E->Prev;\n    TEdge* E2 = E;\n    while (IsHorizontal(*E)) E = E->Next;\n    if (E->Top.Y == E->Prev->Bot.Y) continue; //ie just an intermediate horz.\n    if (E2->Prev->Bot.X < E->Bot.X) E = E2;\n    break;\n  }\n  return E;\n}\n//------------------------------------------------------------------------------\n\nTEdge* ClipperBase::ProcessBound(TEdge* E, bool NextIsForward)\n{\n  TEdge *Result = E;\n  TEdge *Horz = 0;\n\n  if (E->OutIdx == Skip)\n  {\n    //if edges still remain in the current bound beyond the skip edge then\n    //create another LocMin and call ProcessBound once more\n    if (NextIsForward)\n    {\n      while (E->Top.Y == E->Next->Bot.Y) E = E->Next;\n      //don't include top horizontals when parsing a bound a second time,\n      //they will be contained in the opposite bound ...\n      while (E != Result && IsHorizontal(*E)) E = E->Prev;\n    }\n    else\n    {\n      while (E->Top.Y == E->Prev->Bot.Y) E = E->Prev;\n      while (E != Result && IsHorizontal(*E)) E = E->Next;\n    }\n\n    if (E == Result)\n    {\n      if (NextIsForward) Result = E->Next;\n      else Result = E->Prev;\n    }\n    else\n    {\n      //there are more edges in the bound beyond result starting with E\n      if (NextIsForward)\n        E = Result->Next;\n      else\n        E = Result->Prev;\n      MinimaList::value_type locMin;\n      locMin.Y = E->Bot.Y;\n      locMin.LeftBound = 0;\n      locMin.RightBound = E;\n      E->WindDelta = 0;\n      Result = ProcessBound(E, NextIsForward);\n      m_MinimaList.push_back(locMin);\n    }\n    return Result;\n  }\n\n  TEdge *EStart;\n\n  if (IsHorizontal(*E))\n  {\n    //We need to be careful with open paths because this may not be a\n    //true local minima (ie E may be following a skip edge).\n    //Also, consecutive horz. edges may start heading left before going right.\n    if (NextIsForward) \n      EStart = E->Prev;\n    else \n      EStart = E->Next;\n    if (EStart->OutIdx != Skip)\n    {\n      if (IsHorizontal(*EStart)) //ie an adjoining horizontal skip edge\n      {\n        if (EStart->Bot.X != E->Bot.X && EStart->Top.X != E->Bot.X)\n          ReverseHorizontal(*E);\n      }\n      else if (EStart->Bot.X != E->Bot.X)\n        ReverseHorizontal(*E);\n    }\n  }\n  \n  EStart = E;\n  if (NextIsForward)\n  {\n    while (Result->Top.Y == Result->Next->Bot.Y && Result->Next->OutIdx != Skip)\n      Result = Result->Next;\n    if (IsHorizontal(*Result) && Result->Next->OutIdx != Skip)\n    {\n      //nb: at the top of a bound, horizontals are added to the bound\n      //only when the preceding edge attaches to the horizontal's left vertex\n      //unless a Skip edge is encountered when that becomes the top divide\n      Horz = Result;\n      while (IsHorizontal(*Horz->Prev)) Horz = Horz->Prev;\n      if (Horz->Prev->Top.X == Result->Next->Top.X) \n      {\n        if (!NextIsForward) Result = Horz->Prev;\n      }\n      else if (Horz->Prev->Top.X > Result->Next->Top.X) Result = Horz->Prev;\n    }\n    while (E != Result) \n    {\n      E->NextInLML = E->Next;\n      if (IsHorizontal(*E) && E != EStart &&\n        E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E);\n      E = E->Next;\n    }\n    if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Prev->Top.X) \n      ReverseHorizontal(*E);\n    Result = Result->Next; //move to the edge just beyond current bound\n  } else\n  {\n    while (Result->Top.Y == Result->Prev->Bot.Y && Result->Prev->OutIdx != Skip) \n      Result = Result->Prev;\n    if (IsHorizontal(*Result) && Result->Prev->OutIdx != Skip)\n    {\n      Horz = Result;\n      while (IsHorizontal(*Horz->Next)) Horz = Horz->Next;\n      if (Horz->Next->Top.X == Result->Prev->Top.X) \n      {\n        if (!NextIsForward) Result = Horz->Next;\n      }\n      else if (Horz->Next->Top.X > Result->Prev->Top.X) Result = Horz->Next;\n    }\n\n    while (E != Result)\n    {\n      E->NextInLML = E->Prev;\n      if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X) \n        ReverseHorizontal(*E);\n      E = E->Prev;\n    }\n    if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X) \n      ReverseHorizontal(*E);\n    Result = Result->Prev; //move to the edge just beyond current bound\n  }\n\n  return Result;\n}\n//------------------------------------------------------------------------------\n\nbool ClipperBase::AddPath(const Path &pg, PolyType PolyTyp, bool Closed)\n{\n#ifdef use_lines\n  if (!Closed && PolyTyp == ptClip)\n    throw clipperException(\"AddPath: Open paths must be subject.\");\n#else\n  if (!Closed)\n    throw clipperException(\"AddPath: Open paths have been disabled.\");\n#endif\n\n  int highI = (int)pg.size() -1;\n  if (Closed) while (highI > 0 && (pg[highI] == pg[0])) --highI;\n  while (highI > 0 && (pg[highI] == pg[highI -1])) --highI;\n  if ((Closed && highI < 2) || (!Closed && highI < 1)) return false;\n\n  //create a new edge array ...\n  TEdge *edges = new TEdge [highI +1];\n\n  bool IsFlat = true;\n  //1. Basic (first) edge initialization ...\n  try\n  {\n    edges[1].Curr = pg[1];\n    RangeTest(pg[0], m_UseFullRange);\n    RangeTest(pg[highI], m_UseFullRange);\n    InitEdge(&edges[0], &edges[1], &edges[highI], pg[0]);\n    InitEdge(&edges[highI], &edges[0], &edges[highI-1], pg[highI]);\n    for (int i = highI - 1; i >= 1; --i)\n    {\n      RangeTest(pg[i], m_UseFullRange);\n      InitEdge(&edges[i], &edges[i+1], &edges[i-1], pg[i]);\n    }\n  }\n  catch(...)\n  {\n    delete [] edges;\n    throw; //range test fails\n  }\n  TEdge *eStart = &edges[0];\n\n  //2. Remove duplicate vertices, and (when closed) collinear edges ...\n  TEdge *E = eStart, *eLoopStop = eStart;\n  for (;;)\n  {\n    //nb: allows matching start and end points when not Closed ...\n    if (E->Curr == E->Next->Curr && (Closed || E->Next != eStart))\n    {\n      if (E == E->Next) break;\n      if (E == eStart) eStart = E->Next;\n      E = RemoveEdge(E);\n      eLoopStop = E;\n      continue;\n    }\n    if (E->Prev == E->Next) \n      break; //only two vertices\n    else if (Closed &&\n      SlopesEqual(E->Prev->Curr, E->Curr, E->Next->Curr, m_UseFullRange) && \n      (!m_PreserveCollinear ||\n      !Pt2IsBetweenPt1AndPt3(E->Prev->Curr, E->Curr, E->Next->Curr)))\n    {\n      //Collinear edges are allowed for open paths but in closed paths\n      //the default is to merge adjacent collinear edges into a single edge.\n      //However, if the PreserveCollinear property is enabled, only overlapping\n      //collinear edges (ie spikes) will be removed from closed paths.\n      if (E == eStart) eStart = E->Next;\n      E = RemoveEdge(E);\n      E = E->Prev;\n      eLoopStop = E;\n      continue;\n    }\n    E = E->Next;\n    if ((E == eLoopStop) || (!Closed && E->Next == eStart)) break;\n  }\n\n  if ((!Closed && (E == E->Next)) || (Closed && (E->Prev == E->Next)))\n  {\n    delete [] edges;\n    return false;\n  }\n\n  if (!Closed)\n  { \n    m_HasOpenPaths = true;\n    eStart->Prev->OutIdx = Skip;\n  }\n\n  //3. Do second stage of edge initialization ...\n  E = eStart;\n  do\n  {\n    InitEdge2(*E, PolyTyp);\n    E = E->Next;\n    if (IsFlat && E->Curr.Y != eStart->Curr.Y) IsFlat = false;\n  }\n  while (E != eStart);\n\n  //4. Finally, add edge bounds to LocalMinima list ...\n\n  //Totally flat paths must be handled differently when adding them\n  //to LocalMinima list to avoid endless loops etc ...\n  if (IsFlat) \n  {\n    if (Closed) \n    {\n      delete [] edges;\n      return false;\n    }\n    E->Prev->OutIdx = Skip;\n    if (E->Prev->Bot.X < E->Prev->Top.X) ReverseHorizontal(*E->Prev);\n    MinimaList::value_type locMin;\n    locMin.Y = E->Bot.Y;\n    locMin.LeftBound = 0;\n    locMin.RightBound = E;\n    locMin.RightBound->Side = esRight;\n    locMin.RightBound->WindDelta = 0;\n    while (E->Next->OutIdx != Skip)\n    {\n      E->NextInLML = E->Next;\n      if (E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E);\n      E = E->Next;\n    }\n    m_MinimaList.push_back(locMin);\n    m_edges.push_back(edges);\n\t  return true;\n  }\n\n  m_edges.push_back(edges);\n  bool leftBoundIsForward;\n  TEdge* EMin = 0;\n\n  //workaround to avoid an endless loop in the while loop below when\n  //open paths have matching start and end points ...\n  if (E->Prev->Bot == E->Prev->Top) E = E->Next;\n\n  for (;;)\n  {\n    E = FindNextLocMin(E);\n    if (E == EMin) break;\n    else if (!EMin) EMin = E;\n\n    //E and E.Prev now share a local minima (left aligned if horizontal).\n    //Compare their slopes to find which starts which bound ...\n    MinimaList::value_type locMin;\n    locMin.Y = E->Bot.Y;\n    if (E->Dx < E->Prev->Dx) \n    {\n      locMin.LeftBound = E->Prev;\n      locMin.RightBound = E;\n      leftBoundIsForward = false; //Q.nextInLML = Q.prev\n    } else\n    {\n      locMin.LeftBound = E;\n      locMin.RightBound = E->Prev;\n      leftBoundIsForward = true; //Q.nextInLML = Q.next\n    }\n    locMin.LeftBound->Side = esLeft;\n    locMin.RightBound->Side = esRight;\n\n    if (!Closed) locMin.LeftBound->WindDelta = 0;\n    else if (locMin.LeftBound->Next == locMin.RightBound)\n      locMin.LeftBound->WindDelta = -1;\n    else locMin.LeftBound->WindDelta = 1;\n    locMin.RightBound->WindDelta = -locMin.LeftBound->WindDelta;\n\n    E = ProcessBound(locMin.LeftBound, leftBoundIsForward);\n    if (E->OutIdx == Skip) E = ProcessBound(E, leftBoundIsForward);\n\n    TEdge* E2 = ProcessBound(locMin.RightBound, !leftBoundIsForward);\n    if (E2->OutIdx == Skip) E2 = ProcessBound(E2, !leftBoundIsForward);\n\n    if (locMin.LeftBound->OutIdx == Skip)\n      locMin.LeftBound = 0;\n    else if (locMin.RightBound->OutIdx == Skip)\n      locMin.RightBound = 0;\n    m_MinimaList.push_back(locMin);\n    if (!leftBoundIsForward) E = E2;\n  }\n  return true;\n}\n//------------------------------------------------------------------------------\n\nbool ClipperBase::AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed)\n{\n  bool result = false;\n  for (Paths::size_type i = 0; i < ppg.size(); ++i)\n    if (AddPath(ppg[i], PolyTyp, Closed)) result = true;\n  return result;\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperBase::Clear()\n{\n  DisposeLocalMinimaList();\n  for (EdgeList::size_type i = 0; i < m_edges.size(); ++i)\n  {\n    //for each edge array in turn, find the first used edge and \n    //check for and remove any hiddenPts in each edge in the array.\n    TEdge* edges = m_edges[i];\n    delete [] edges;\n  }\n  m_edges.clear();\n  m_UseFullRange = false;\n  m_HasOpenPaths = false;\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperBase::Reset()\n{\n  m_CurrentLM = m_MinimaList.begin();\n  if (m_CurrentLM == m_MinimaList.end()) return; //ie nothing to process\n  std::sort(m_MinimaList.begin(), m_MinimaList.end(), LocMinSorter());\n\n  //reset all edges ...\n  for (MinimaList::iterator lm = m_MinimaList.begin(); lm != m_MinimaList.end(); ++lm)\n  {\n    TEdge* e = lm->LeftBound;\n    if (e)\n    {\n      e->Curr = e->Bot;\n      e->Side = esLeft;\n      e->OutIdx = Unassigned;\n    }\n\n    e = lm->RightBound;\n    if (e)\n    {\n      e->Curr = e->Bot;\n      e->Side = esRight;\n      e->OutIdx = Unassigned;\n    }\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperBase::DisposeLocalMinimaList()\n{\n  m_MinimaList.clear();\n  m_CurrentLM = m_MinimaList.begin();\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperBase::PopLocalMinima()\n{\n  if (m_CurrentLM == m_MinimaList.end()) return;\n  ++m_CurrentLM;\n}\n//------------------------------------------------------------------------------\n\nIntRect ClipperBase::GetBounds()\n{\n  IntRect result;\n  MinimaList::iterator lm = m_MinimaList.begin();\n  if (lm == m_MinimaList.end())\n  {\n    result.left = result.top = result.right = result.bottom = 0;\n    return result;\n  }\n  result.left = lm->LeftBound->Bot.X;\n  result.top = lm->LeftBound->Bot.Y;\n  result.right = lm->LeftBound->Bot.X;\n  result.bottom = lm->LeftBound->Bot.Y;\n  while (lm != m_MinimaList.end())\n  {\n    result.bottom = std::max(result.bottom, lm->LeftBound->Bot.Y);\n    TEdge* e = lm->LeftBound;\n    for (;;) {\n      TEdge* bottomE = e;\n      while (e->NextInLML)\n      {\n        if (e->Bot.X < result.left) result.left = e->Bot.X;\n        if (e->Bot.X > result.right) result.right = e->Bot.X;\n        e = e->NextInLML;\n      }\n      result.left = std::min(result.left, e->Bot.X);\n      result.right = std::max(result.right, e->Bot.X);\n      result.left = std::min(result.left, e->Top.X);\n      result.right = std::max(result.right, e->Top.X);\n      result.top = std::min(result.top, e->Top.Y);\n      if (bottomE == lm->LeftBound) e = lm->RightBound;\n      else break;\n    }\n    ++lm;\n  }\n  return result;\n}\n\n//------------------------------------------------------------------------------\n// TClipper methods ...\n//------------------------------------------------------------------------------\n\nClipper::Clipper(int initOptions) : ClipperBase() //constructor\n{\n  m_ActiveEdges = 0;\n  m_SortedEdges = 0;\n  m_ExecuteLocked = false;\n  m_UseFullRange = false;\n  m_ReverseOutput = ((initOptions & ioReverseSolution) != 0);\n  m_StrictSimple = ((initOptions & ioStrictlySimple) != 0);\n  m_PreserveCollinear = ((initOptions & ioPreserveCollinear) != 0);\n  m_HasOpenPaths = false;\n#ifdef use_xyz  \n  m_ZFill = 0;\n#endif\n}\n//------------------------------------------------------------------------------\n\nClipper::~Clipper() //destructor\n{\n  Clear();\n}\n//------------------------------------------------------------------------------\n\n#ifdef use_xyz  \nvoid Clipper::ZFillFunction(ZFillCallback zFillFunc)\n{  \n  m_ZFill = zFillFunc;\n}\n//------------------------------------------------------------------------------\n#endif\n\nvoid Clipper::Reset()\n{\n  ClipperBase::Reset();\n  m_Scanbeam = ScanbeamList();\n  m_ActiveEdges = 0;\n  m_SortedEdges = 0;\n  for (MinimaList::iterator lm = m_MinimaList.begin(); lm != m_MinimaList.end(); ++lm)\n    InsertScanbeam(lm->Y);\n}\n//------------------------------------------------------------------------------\n\nbool Clipper::Execute(ClipType clipType, Paths &solution,\n    PolyFillType subjFillType, PolyFillType clipFillType)\n{\n  if( m_ExecuteLocked ) return false;\n  if (m_HasOpenPaths)\n    throw clipperException(\"Error: PolyTree struct is need for open path clipping.\");\n  m_ExecuteLocked = true;\n  solution.resize(0);\n  m_SubjFillType = subjFillType;\n  m_ClipFillType = clipFillType;\n  m_ClipType = clipType;\n  m_UsingPolyTree = false;\n  bool succeeded = ExecuteInternal();\n  if (succeeded) BuildResult(solution);\n  DisposeAllOutRecs();\n  m_ExecuteLocked = false;\n  return succeeded;\n}\n//------------------------------------------------------------------------------\n\nbool Clipper::Execute(ClipType clipType, PolyTree& polytree,\n    PolyFillType subjFillType, PolyFillType clipFillType)\n{\n  if( m_ExecuteLocked ) return false;\n  m_ExecuteLocked = true;\n  m_SubjFillType = subjFillType;\n  m_ClipFillType = clipFillType;\n  m_ClipType = clipType;\n  m_UsingPolyTree = true;\n  bool succeeded = ExecuteInternal();\n  if (succeeded) BuildResult2(polytree);\n  DisposeAllOutRecs();\n  m_ExecuteLocked = false;\n  return succeeded;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::FixHoleLinkage(OutRec &outrec)\n{\n  //skip OutRecs that (a) contain outermost polygons or\n  //(b) already have the correct owner/child linkage ...\n  if (!outrec.FirstLeft ||                \n      (outrec.IsHole != outrec.FirstLeft->IsHole &&\n      outrec.FirstLeft->Pts)) return;\n\n  OutRec* orfl = outrec.FirstLeft;\n  while (orfl && ((orfl->IsHole == outrec.IsHole) || !orfl->Pts))\n      orfl = orfl->FirstLeft;\n  outrec.FirstLeft = orfl;\n}\n//------------------------------------------------------------------------------\n\nbool Clipper::ExecuteInternal()\n{\n  bool succeeded = true;\n  try {\n    Reset();\n    if (m_CurrentLM == m_MinimaList.end()) return true;\n    cInt botY = PopScanbeam();\n    do {\n      InsertLocalMinimaIntoAEL(botY);\n      ClearGhostJoins();\n      ProcessHorizontals(false);\n      if (m_Scanbeam.empty()) break;\n      cInt topY = PopScanbeam();\n      succeeded = ProcessIntersections(topY);\n      if (!succeeded) break;\n      ProcessEdgesAtTopOfScanbeam(topY);\n      botY = topY;\n    } while (!m_Scanbeam.empty() || m_CurrentLM != m_MinimaList.end());\n  }\n  catch(...) \n  {\n    succeeded = false;\n  }\n\n  if (succeeded)\n  {\n    //fix orientations ...\n    for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)\n    {\n      OutRec *outRec = m_PolyOuts[i];\n      if (!outRec->Pts || outRec->IsOpen) continue;\n      if ((outRec->IsHole ^ m_ReverseOutput) == (Area(*outRec) > 0))\n        ReversePolyPtLinks(outRec->Pts);\n    }\n\n    if (!m_Joins.empty()) JoinCommonEdges();\n\n    //unfortunately FixupOutPolygon() must be done after JoinCommonEdges()\n    for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)\n    {\n      OutRec *outRec = m_PolyOuts[i];\n      if (outRec->Pts && !outRec->IsOpen)\n        FixupOutPolygon(*outRec);\n    }\n\n    if (m_StrictSimple) DoSimplePolygons();\n  }\n\n  ClearJoins();\n  ClearGhostJoins();\n  return succeeded;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::InsertScanbeam(const cInt Y)\n{\n  //if (!m_Scanbeam.empty() && Y == m_Scanbeam.top()) return;// avoid duplicates.\n  m_Scanbeam.push(Y);\n}\n//------------------------------------------------------------------------------\n\ncInt Clipper::PopScanbeam()\n{\n  const cInt Y = m_Scanbeam.top();\n  m_Scanbeam.pop();\n  while (!m_Scanbeam.empty() && Y == m_Scanbeam.top()) { m_Scanbeam.pop(); } // Pop duplicates.\n  return Y;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::DisposeAllOutRecs(){\n  for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)\n    DisposeOutRec(i);\n  m_PolyOuts.clear();\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::DisposeOutRec(PolyOutList::size_type index)\n{\n  OutRec *outRec = m_PolyOuts[index];\n  if (outRec->Pts) DisposeOutPts(outRec->Pts);\n  delete outRec;\n  m_PolyOuts[index] = 0;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::SetWindingCount(TEdge &edge)\n{\n  TEdge *e = edge.PrevInAEL;\n  //find the edge of the same polytype that immediately preceeds 'edge' in AEL\n  while (e  && ((e->PolyTyp != edge.PolyTyp) || (e->WindDelta == 0))) e = e->PrevInAEL;\n  if (!e)\n  {\n    edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta);\n    edge.WindCnt2 = 0;\n    e = m_ActiveEdges; //ie get ready to calc WindCnt2\n  }   \n  else if (edge.WindDelta == 0 && m_ClipType != ctUnion)\n  {\n    edge.WindCnt = 1;\n    edge.WindCnt2 = e->WindCnt2;\n    e = e->NextInAEL; //ie get ready to calc WindCnt2\n  }\n  else if (IsEvenOddFillType(edge))\n  {\n    //EvenOdd filling ...\n    if (edge.WindDelta == 0)\n    {\n      //are we inside a subj polygon ...\n      bool Inside = true;\n      TEdge *e2 = e->PrevInAEL;\n      while (e2)\n      {\n        if (e2->PolyTyp == e->PolyTyp && e2->WindDelta != 0) \n          Inside = !Inside;\n        e2 = e2->PrevInAEL;\n      }\n      edge.WindCnt = (Inside ? 0 : 1);\n    }\n    else\n    {\n      edge.WindCnt = edge.WindDelta;\n    }\n    edge.WindCnt2 = e->WindCnt2;\n    e = e->NextInAEL; //ie get ready to calc WindCnt2\n  } \n  else\n  {\n    //nonZero, Positive or Negative filling ...\n    if (e->WindCnt * e->WindDelta < 0)\n    {\n      //prev edge is 'decreasing' WindCount (WC) toward zero\n      //so we're outside the previous polygon ...\n      if (Abs(e->WindCnt) > 1)\n      {\n        //outside prev poly but still inside another.\n        //when reversing direction of prev poly use the same WC \n        if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt;\n        //otherwise continue to 'decrease' WC ...\n        else edge.WindCnt = e->WindCnt + edge.WindDelta;\n      } \n      else\n        //now outside all polys of same polytype so set own WC ...\n        edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta);\n    } else\n    {\n      //prev edge is 'increasing' WindCount (WC) away from zero\n      //so we're inside the previous polygon ...\n      if (edge.WindDelta == 0) \n        edge.WindCnt = (e->WindCnt < 0 ? e->WindCnt - 1 : e->WindCnt + 1);\n      //if wind direction is reversing prev then use same WC\n      else if (e->WindDelta * edge.WindDelta < 0) edge.WindCnt = e->WindCnt;\n      //otherwise add to WC ...\n      else edge.WindCnt = e->WindCnt + edge.WindDelta;\n    }\n    edge.WindCnt2 = e->WindCnt2;\n    e = e->NextInAEL; //ie get ready to calc WindCnt2\n  }\n\n  //update WindCnt2 ...\n  if (IsEvenOddAltFillType(edge))\n  {\n    //EvenOdd filling ...\n    while (e != &edge)\n    {\n      if (e->WindDelta != 0)\n        edge.WindCnt2 = (edge.WindCnt2 == 0 ? 1 : 0);\n      e = e->NextInAEL;\n    }\n  } else\n  {\n    //nonZero, Positive or Negative filling ...\n    while ( e != &edge )\n    {\n      edge.WindCnt2 += e->WindDelta;\n      e = e->NextInAEL;\n    }\n  }\n}\n//------------------------------------------------------------------------------\n\nbool Clipper::IsEvenOddFillType(const TEdge& edge) const\n{\n  if (edge.PolyTyp == ptSubject)\n    return m_SubjFillType == pftEvenOdd; else\n    return m_ClipFillType == pftEvenOdd;\n}\n//------------------------------------------------------------------------------\n\nbool Clipper::IsEvenOddAltFillType(const TEdge& edge) const\n{\n  if (edge.PolyTyp == ptSubject)\n    return m_ClipFillType == pftEvenOdd; else\n    return m_SubjFillType == pftEvenOdd;\n}\n//------------------------------------------------------------------------------\n\nbool Clipper::IsContributing(const TEdge& edge) const\n{\n  PolyFillType pft, pft2;\n  if (edge.PolyTyp == ptSubject)\n  {\n    pft = m_SubjFillType;\n    pft2 = m_ClipFillType;\n  } else\n  {\n    pft = m_ClipFillType;\n    pft2 = m_SubjFillType;\n  }\n\n  switch(pft)\n  {\n    case pftEvenOdd: \n      //return false if a subj line has been flagged as inside a subj polygon\n      if (edge.WindDelta == 0 && edge.WindCnt != 1) return false;\n      break;\n    case pftNonZero:\n      if (Abs(edge.WindCnt) != 1) return false;\n      break;\n    case pftPositive: \n      if (edge.WindCnt != 1) return false;\n      break;\n    default: //pftNegative\n      if (edge.WindCnt != -1) return false;\n  }\n\n  switch(m_ClipType)\n  {\n    case ctIntersection:\n      switch(pft2)\n      {\n        case pftEvenOdd: \n        case pftNonZero: \n          return (edge.WindCnt2 != 0);\n        case pftPositive: \n          return (edge.WindCnt2 > 0);\n        default: \n          return (edge.WindCnt2 < 0);\n      }\n      break;\n    case ctUnion:\n      switch(pft2)\n      {\n        case pftEvenOdd: \n        case pftNonZero: \n          return (edge.WindCnt2 == 0);\n        case pftPositive: \n          return (edge.WindCnt2 <= 0);\n        default: \n          return (edge.WindCnt2 >= 0);\n      }\n      break;\n    case ctDifference:\n      if (edge.PolyTyp == ptSubject)\n        switch(pft2)\n        {\n          case pftEvenOdd: \n          case pftNonZero: \n            return (edge.WindCnt2 == 0);\n          case pftPositive: \n            return (edge.WindCnt2 <= 0);\n          default: \n            return (edge.WindCnt2 >= 0);\n        }\n      else\n        switch(pft2)\n        {\n          case pftEvenOdd: \n          case pftNonZero: \n            return (edge.WindCnt2 != 0);\n          case pftPositive: \n            return (edge.WindCnt2 > 0);\n          default: \n            return (edge.WindCnt2 < 0);\n        }\n      break;\n    case ctXor:\n      if (edge.WindDelta == 0) //XOr always contributing unless open\n        switch(pft2)\n        {\n          case pftEvenOdd: \n          case pftNonZero: \n            return (edge.WindCnt2 == 0);\n          case pftPositive: \n            return (edge.WindCnt2 <= 0);\n          default: \n            return (edge.WindCnt2 >= 0);\n        }\n      else \n        return true;\n      break;\n    default:\n      return true;\n  }\n}\n//------------------------------------------------------------------------------\n\nOutPt* Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt)\n{\n  OutPt* result;\n  TEdge *e, *prevE;\n  if (IsHorizontal(*e2) || ( e1->Dx > e2->Dx ))\n  {\n    result = AddOutPt(e1, Pt);\n    e2->OutIdx = e1->OutIdx;\n    e1->Side = esLeft;\n    e2->Side = esRight;\n    e = e1;\n    if (e->PrevInAEL == e2)\n      prevE = e2->PrevInAEL; \n    else\n      prevE = e->PrevInAEL;\n  } else\n  {\n    result = AddOutPt(e2, Pt);\n    e1->OutIdx = e2->OutIdx;\n    e1->Side = esRight;\n    e2->Side = esLeft;\n    e = e2;\n    if (e->PrevInAEL == e1)\n        prevE = e1->PrevInAEL;\n    else\n        prevE = e->PrevInAEL;\n  }\n\n  if (prevE && prevE->OutIdx >= 0 &&\n      (TopX(*prevE, Pt.Y) == TopX(*e, Pt.Y)) &&\n      SlopesEqual(*e, *prevE, m_UseFullRange) &&\n      (e->WindDelta != 0) && (prevE->WindDelta != 0))\n  {\n    OutPt* outPt = AddOutPt(prevE, Pt);\n    AddJoin(result, outPt, e->Top);\n  }\n  return result;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &Pt)\n{\n  AddOutPt( e1, Pt );\n  if (e2->WindDelta == 0) AddOutPt(e2, Pt);\n  if( e1->OutIdx == e2->OutIdx )\n  {\n    e1->OutIdx = Unassigned;\n    e2->OutIdx = Unassigned;\n  }\n  else if (e1->OutIdx < e2->OutIdx) \n    AppendPolygon(e1, e2); \n  else \n    AppendPolygon(e2, e1);\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::AddEdgeToSEL(TEdge *edge)\n{\n  //SEL pointers in PEdge are reused to build a list of horizontal edges.\n  //However, we don't need to worry about order with horizontal edge processing.\n  if( !m_SortedEdges )\n  {\n    m_SortedEdges = edge;\n    edge->PrevInSEL = 0;\n    edge->NextInSEL = 0;\n  }\n  else\n  {\n    edge->NextInSEL = m_SortedEdges;\n    edge->PrevInSEL = 0;\n    m_SortedEdges->PrevInSEL = edge;\n    m_SortedEdges = edge;\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::CopyAELToSEL()\n{\n  TEdge* e = m_ActiveEdges;\n  m_SortedEdges = e;\n  while ( e )\n  {\n    e->PrevInSEL = e->PrevInAEL;\n    e->NextInSEL = e->NextInAEL;\n    e = e->NextInAEL;\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::AddJoin(OutPt *op1, OutPt *op2, const IntPoint OffPt)\n{\n  Join* j = new Join;\n  j->OutPt1 = op1;\n  j->OutPt2 = op2;\n  j->OffPt = OffPt;\n  m_Joins.push_back(j);\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::ClearJoins()\n{\n  for (JoinList::size_type i = 0; i < m_Joins.size(); i++)\n    delete m_Joins[i];\n  m_Joins.resize(0);\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::ClearGhostJoins()\n{\n  for (JoinList::size_type i = 0; i < m_GhostJoins.size(); i++)\n    delete m_GhostJoins[i];\n  m_GhostJoins.resize(0);\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::AddGhostJoin(OutPt *op, const IntPoint OffPt)\n{\n  Join* j = new Join;\n  j->OutPt1 = op;\n  j->OutPt2 = 0;\n  j->OffPt = OffPt;\n  m_GhostJoins.push_back(j);\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::InsertLocalMinimaIntoAEL(const cInt botY)\n{\n  while (m_CurrentLM != m_MinimaList.end() && (m_CurrentLM->Y == botY))\n  {\n    TEdge* lb = m_CurrentLM->LeftBound;\n    TEdge* rb = m_CurrentLM->RightBound;\n    PopLocalMinima();\n    OutPt *Op1 = 0;\n    if (!lb)\n    {\n      //nb: don't insert LB into either AEL or SEL\n      InsertEdgeIntoAEL(rb, 0);\n      SetWindingCount(*rb);\n      if (IsContributing(*rb))\n        Op1 = AddOutPt(rb, rb->Bot); \n    } \n    else if (!rb)\n    {\n      InsertEdgeIntoAEL(lb, 0);\n      SetWindingCount(*lb);\n      if (IsContributing(*lb))\n        Op1 = AddOutPt(lb, lb->Bot);\n      InsertScanbeam(lb->Top.Y);\n    }\n    else\n    {\n      InsertEdgeIntoAEL(lb, 0);\n      InsertEdgeIntoAEL(rb, lb);\n      SetWindingCount( *lb );\n      rb->WindCnt = lb->WindCnt;\n      rb->WindCnt2 = lb->WindCnt2;\n      if (IsContributing(*lb))\n        Op1 = AddLocalMinPoly(lb, rb, lb->Bot);      \n      InsertScanbeam(lb->Top.Y);\n    }\n\n     if (rb)\n     {\n       if(IsHorizontal(*rb)) AddEdgeToSEL(rb);\n       else InsertScanbeam( rb->Top.Y );\n     }\n\n    if (!lb || !rb) continue;\n\n    //if any output polygons share an edge, they'll need joining later ...\n    if (Op1 && IsHorizontal(*rb) && \n      m_GhostJoins.size() > 0 && (rb->WindDelta != 0))\n    {\n      for (JoinList::size_type i = 0; i < m_GhostJoins.size(); ++i)\n      {\n        Join* jr = m_GhostJoins[i];\n        //if the horizontal Rb and a 'ghost' horizontal overlap, then convert\n        //the 'ghost' join to a real join ready for later ...\n        if (HorzSegmentsOverlap(jr->OutPt1->Pt.X, jr->OffPt.X, rb->Bot.X, rb->Top.X))\n          AddJoin(jr->OutPt1, Op1, jr->OffPt);\n      }\n    }\n\n    if (lb->OutIdx >= 0 && lb->PrevInAEL && \n      lb->PrevInAEL->Curr.X == lb->Bot.X &&\n      lb->PrevInAEL->OutIdx >= 0 &&\n      SlopesEqual(*lb->PrevInAEL, *lb, m_UseFullRange) &&\n      (lb->WindDelta != 0) && (lb->PrevInAEL->WindDelta != 0))\n    {\n        OutPt *Op2 = AddOutPt(lb->PrevInAEL, lb->Bot);\n        AddJoin(Op1, Op2, lb->Top);\n    }\n\n    if(lb->NextInAEL != rb)\n    {\n\n      if (rb->OutIdx >= 0 && rb->PrevInAEL->OutIdx >= 0 &&\n        SlopesEqual(*rb->PrevInAEL, *rb, m_UseFullRange) &&\n        (rb->WindDelta != 0) && (rb->PrevInAEL->WindDelta != 0))\n      {\n          OutPt *Op2 = AddOutPt(rb->PrevInAEL, rb->Bot);\n          AddJoin(Op1, Op2, rb->Top);\n      }\n\n      TEdge* e = lb->NextInAEL;\n      if (e)\n      {\n        while( e != rb )\n        {\n          //nb: For calculating winding counts etc, IntersectEdges() assumes\n          //that param1 will be to the Right of param2 ABOVE the intersection ...\n          IntersectEdges(rb , e , lb->Curr); //order important here\n          e = e->NextInAEL;\n        }\n      }\n    }\n    \n  }\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::DeleteFromAEL(TEdge *e)\n{\n  TEdge* AelPrev = e->PrevInAEL;\n  TEdge* AelNext = e->NextInAEL;\n  if(  !AelPrev &&  !AelNext && (e != m_ActiveEdges) ) return; //already deleted\n  if( AelPrev ) AelPrev->NextInAEL = AelNext;\n  else m_ActiveEdges = AelNext;\n  if( AelNext ) AelNext->PrevInAEL = AelPrev;\n  e->NextInAEL = 0;\n  e->PrevInAEL = 0;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::DeleteFromSEL(TEdge *e)\n{\n  TEdge* SelPrev = e->PrevInSEL;\n  TEdge* SelNext = e->NextInSEL;\n  if( !SelPrev &&  !SelNext && (e != m_SortedEdges) ) return; //already deleted\n  if( SelPrev ) SelPrev->NextInSEL = SelNext;\n  else m_SortedEdges = SelNext;\n  if( SelNext ) SelNext->PrevInSEL = SelPrev;\n  e->NextInSEL = 0;\n  e->PrevInSEL = 0;\n}\n//------------------------------------------------------------------------------\n\n#ifdef use_xyz\nvoid Clipper::SetZ(IntPoint& pt, TEdge& e1, TEdge& e2)\n{\n  if (pt.Z != 0 || !m_ZFill) return;\n  else if (pt == e1.Bot) pt.Z = e1.Bot.Z;\n  else if (pt == e1.Top) pt.Z = e1.Top.Z;\n  else if (pt == e2.Bot) pt.Z = e2.Bot.Z;\n  else if (pt == e2.Top) pt.Z = e2.Top.Z;\n  else (*m_ZFill)(e1.Bot, e1.Top, e2.Bot, e2.Top, pt); \n}\n//------------------------------------------------------------------------------\n#endif\n\nvoid Clipper::IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &Pt)\n{\n  bool e1Contributing = ( e1->OutIdx >= 0 );\n  bool e2Contributing = ( e2->OutIdx >= 0 );\n\n#ifdef use_xyz\n        SetZ(Pt, *e1, *e2);\n#endif\n\n#ifdef use_lines\n  //if either edge is on an OPEN path ...\n  if (e1->WindDelta == 0 || e2->WindDelta == 0)\n  {\n    //ignore subject-subject open path intersections UNLESS they\n    //are both open paths, AND they are both 'contributing maximas' ...\n\tif (e1->WindDelta == 0 && e2->WindDelta == 0) return;\n\n    //if intersecting a subj line with a subj poly ...\n    else if (e1->PolyTyp == e2->PolyTyp && \n      e1->WindDelta != e2->WindDelta && m_ClipType == ctUnion)\n    {\n      if (e1->WindDelta == 0)\n      {\n        if (e2Contributing)\n        {\n          AddOutPt(e1, Pt);\n          if (e1Contributing) e1->OutIdx = Unassigned;\n        }\n      }\n      else\n      {\n        if (e1Contributing)\n        {\n          AddOutPt(e2, Pt);\n          if (e2Contributing) e2->OutIdx = Unassigned;\n        }\n      }\n    }\n    else if (e1->PolyTyp != e2->PolyTyp)\n    {\n      //toggle subj open path OutIdx on/off when Abs(clip.WndCnt) == 1 ...\n      if ((e1->WindDelta == 0) && abs(e2->WindCnt) == 1 && \n        (m_ClipType != ctUnion || e2->WindCnt2 == 0))\n      {\n        AddOutPt(e1, Pt);\n        if (e1Contributing) e1->OutIdx = Unassigned;\n      }\n      else if ((e2->WindDelta == 0) && (abs(e1->WindCnt) == 1) && \n        (m_ClipType != ctUnion || e1->WindCnt2 == 0))\n      {\n        AddOutPt(e2, Pt);\n        if (e2Contributing) e2->OutIdx = Unassigned;\n      }\n    }\n    return;\n  }\n#endif\n\n  //update winding counts...\n  //assumes that e1 will be to the Right of e2 ABOVE the intersection\n  if ( e1->PolyTyp == e2->PolyTyp )\n  {\n    if ( IsEvenOddFillType( *e1) )\n    {\n      int oldE1WindCnt = e1->WindCnt;\n      e1->WindCnt = e2->WindCnt;\n      e2->WindCnt = oldE1WindCnt;\n    } else\n    {\n      if (e1->WindCnt + e2->WindDelta == 0 ) e1->WindCnt = -e1->WindCnt;\n      else e1->WindCnt += e2->WindDelta;\n      if ( e2->WindCnt - e1->WindDelta == 0 ) e2->WindCnt = -e2->WindCnt;\n      else e2->WindCnt -= e1->WindDelta;\n    }\n  } else\n  {\n    if (!IsEvenOddFillType(*e2)) e1->WindCnt2 += e2->WindDelta;\n    else e1->WindCnt2 = ( e1->WindCnt2 == 0 ) ? 1 : 0;\n    if (!IsEvenOddFillType(*e1)) e2->WindCnt2 -= e1->WindDelta;\n    else e2->WindCnt2 = ( e2->WindCnt2 == 0 ) ? 1 : 0;\n  }\n\n  PolyFillType e1FillType, e2FillType, e1FillType2, e2FillType2;\n  if (e1->PolyTyp == ptSubject)\n  {\n    e1FillType = m_SubjFillType;\n    e1FillType2 = m_ClipFillType;\n  } else\n  {\n    e1FillType = m_ClipFillType;\n    e1FillType2 = m_SubjFillType;\n  }\n  if (e2->PolyTyp == ptSubject)\n  {\n    e2FillType = m_SubjFillType;\n    e2FillType2 = m_ClipFillType;\n  } else\n  {\n    e2FillType = m_ClipFillType;\n    e2FillType2 = m_SubjFillType;\n  }\n\n  cInt e1Wc, e2Wc;\n  switch (e1FillType)\n  {\n    case pftPositive: e1Wc = e1->WindCnt; break;\n    case pftNegative: e1Wc = -e1->WindCnt; break;\n    default: e1Wc = Abs(e1->WindCnt);\n  }\n  switch(e2FillType)\n  {\n    case pftPositive: e2Wc = e2->WindCnt; break;\n    case pftNegative: e2Wc = -e2->WindCnt; break;\n    default: e2Wc = Abs(e2->WindCnt);\n  }\n\n  if ( e1Contributing && e2Contributing )\n  {\n    if ((e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) ||\n      (e1->PolyTyp != e2->PolyTyp && m_ClipType != ctXor) )\n    {\n      AddLocalMaxPoly(e1, e2, Pt); \n    }\n    else\n    {\n      AddOutPt(e1, Pt);\n      AddOutPt(e2, Pt);\n      SwapSides( *e1 , *e2 );\n      SwapPolyIndexes( *e1 , *e2 );\n    }\n  }\n  else if ( e1Contributing )\n  {\n    if (e2Wc == 0 || e2Wc == 1) \n    {\n      AddOutPt(e1, Pt);\n      SwapSides(*e1, *e2);\n      SwapPolyIndexes(*e1, *e2);\n    }\n  }\n  else if ( e2Contributing )\n  {\n    if (e1Wc == 0 || e1Wc == 1) \n    {\n      AddOutPt(e2, Pt);\n      SwapSides(*e1, *e2);\n      SwapPolyIndexes(*e1, *e2);\n    }\n  } \n  else if ( (e1Wc == 0 || e1Wc == 1) && (e2Wc == 0 || e2Wc == 1))\n  {\n    //neither edge is currently contributing ...\n\n    cInt e1Wc2, e2Wc2;\n    switch (e1FillType2)\n    {\n      case pftPositive: e1Wc2 = e1->WindCnt2; break;\n      case pftNegative : e1Wc2 = -e1->WindCnt2; break;\n      default: e1Wc2 = Abs(e1->WindCnt2);\n    }\n    switch (e2FillType2)\n    {\n      case pftPositive: e2Wc2 = e2->WindCnt2; break;\n      case pftNegative: e2Wc2 = -e2->WindCnt2; break;\n      default: e2Wc2 = Abs(e2->WindCnt2);\n    }\n\n    if (e1->PolyTyp != e2->PolyTyp)\n    {\n      AddLocalMinPoly(e1, e2, Pt);\n    }\n    else if (e1Wc == 1 && e2Wc == 1)\n      switch( m_ClipType ) {\n        case ctIntersection:\n          if (e1Wc2 > 0 && e2Wc2 > 0)\n            AddLocalMinPoly(e1, e2, Pt);\n          break;\n        case ctUnion:\n          if ( e1Wc2 <= 0 && e2Wc2 <= 0 )\n            AddLocalMinPoly(e1, e2, Pt);\n          break;\n        case ctDifference:\n          if (((e1->PolyTyp == ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) ||\n              ((e1->PolyTyp == ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0)))\n                AddLocalMinPoly(e1, e2, Pt);\n          break;\n        case ctXor:\n          AddLocalMinPoly(e1, e2, Pt);\n      }\n    else\n      SwapSides( *e1, *e2 );\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::SetHoleState(TEdge *e, OutRec *outrec)\n{\n  bool IsHole = false;\n  TEdge *e2 = e->PrevInAEL;\n  while (e2)\n  {\n    if (e2->OutIdx >= 0 && e2->WindDelta != 0)\n    {\n      IsHole = !IsHole;\n      if (! outrec->FirstLeft)\n        outrec->FirstLeft = m_PolyOuts[e2->OutIdx];\n    }\n    e2 = e2->PrevInAEL;\n  }\n  if (IsHole) outrec->IsHole = true;\n}\n//------------------------------------------------------------------------------\n\nOutRec* GetLowermostRec(OutRec *outRec1, OutRec *outRec2)\n{\n  //work out which polygon fragment has the correct hole state ...\n  if (!outRec1->BottomPt) \n    outRec1->BottomPt = GetBottomPt(outRec1->Pts);\n  if (!outRec2->BottomPt) \n    outRec2->BottomPt = GetBottomPt(outRec2->Pts);\n  OutPt *OutPt1 = outRec1->BottomPt;\n  OutPt *OutPt2 = outRec2->BottomPt;\n  if (OutPt1->Pt.Y > OutPt2->Pt.Y) return outRec1;\n  else if (OutPt1->Pt.Y < OutPt2->Pt.Y) return outRec2;\n  else if (OutPt1->Pt.X < OutPt2->Pt.X) return outRec1;\n  else if (OutPt1->Pt.X > OutPt2->Pt.X) return outRec2;\n  else if (OutPt1->Next == OutPt1) return outRec2;\n  else if (OutPt2->Next == OutPt2) return outRec1;\n  else if (FirstIsBottomPt(OutPt1, OutPt2)) return outRec1;\n  else return outRec2;\n}\n//------------------------------------------------------------------------------\n\nbool Param1RightOfParam2(OutRec* outRec1, OutRec* outRec2)\n{\n  do\n  {\n    outRec1 = outRec1->FirstLeft;\n    if (outRec1 == outRec2) return true;\n  } while (outRec1);\n  return false;\n}\n//------------------------------------------------------------------------------\n\nOutRec* Clipper::GetOutRec(int Idx)\n{\n  OutRec* outrec = m_PolyOuts[Idx];\n  while (outrec != m_PolyOuts[outrec->Idx])\n    outrec = m_PolyOuts[outrec->Idx];\n  return outrec;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::AppendPolygon(TEdge *e1, TEdge *e2)\n{\n  //get the start and ends of both output polygons ...\n  OutRec *outRec1 = m_PolyOuts[e1->OutIdx];\n  OutRec *outRec2 = m_PolyOuts[e2->OutIdx];\n\n  OutRec *holeStateRec;\n  if (Param1RightOfParam2(outRec1, outRec2)) \n    holeStateRec = outRec2;\n  else if (Param1RightOfParam2(outRec2, outRec1)) \n    holeStateRec = outRec1;\n  else \n    holeStateRec = GetLowermostRec(outRec1, outRec2);\n\n  //get the start and ends of both output polygons and\n  //join e2 poly onto e1 poly and delete pointers to e2 ...\n\n  OutPt* p1_lft = outRec1->Pts;\n  OutPt* p1_rt = p1_lft->Prev;\n  OutPt* p2_lft = outRec2->Pts;\n  OutPt* p2_rt = p2_lft->Prev;\n\n  EdgeSide Side;\n  //join e2 poly onto e1 poly and delete pointers to e2 ...\n  if(  e1->Side == esLeft )\n  {\n    if(  e2->Side == esLeft )\n    {\n      //z y x a b c\n      ReversePolyPtLinks(p2_lft);\n      p2_lft->Next = p1_lft;\n      p1_lft->Prev = p2_lft;\n      p1_rt->Next = p2_rt;\n      p2_rt->Prev = p1_rt;\n      outRec1->Pts = p2_rt;\n    } else\n    {\n      //x y z a b c\n      p2_rt->Next = p1_lft;\n      p1_lft->Prev = p2_rt;\n      p2_lft->Prev = p1_rt;\n      p1_rt->Next = p2_lft;\n      outRec1->Pts = p2_lft;\n    }\n    Side = esLeft;\n  } else\n  {\n    if(  e2->Side == esRight )\n    {\n      //a b c z y x\n      ReversePolyPtLinks(p2_lft);\n      p1_rt->Next = p2_rt;\n      p2_rt->Prev = p1_rt;\n      p2_lft->Next = p1_lft;\n      p1_lft->Prev = p2_lft;\n    } else\n    {\n      //a b c x y z\n      p1_rt->Next = p2_lft;\n      p2_lft->Prev = p1_rt;\n      p1_lft->Prev = p2_rt;\n      p2_rt->Next = p1_lft;\n    }\n    Side = esRight;\n  }\n\n  outRec1->BottomPt = 0;\n  if (holeStateRec == outRec2)\n  {\n    if (outRec2->FirstLeft != outRec1)\n      outRec1->FirstLeft = outRec2->FirstLeft;\n    outRec1->IsHole = outRec2->IsHole;\n  }\n  outRec2->Pts = 0;\n  outRec2->BottomPt = 0;\n  outRec2->FirstLeft = outRec1;\n\n  int OKIdx = e1->OutIdx;\n  int ObsoleteIdx = e2->OutIdx;\n\n  e1->OutIdx = Unassigned; //nb: safe because we only get here via AddLocalMaxPoly\n  e2->OutIdx = Unassigned;\n\n  TEdge* e = m_ActiveEdges;\n  while( e )\n  {\n    if( e->OutIdx == ObsoleteIdx )\n    {\n      e->OutIdx = OKIdx;\n      e->Side = Side;\n      break;\n    }\n    e = e->NextInAEL;\n  }\n\n  outRec2->Idx = outRec1->Idx;\n}\n//------------------------------------------------------------------------------\n\nOutRec* Clipper::CreateOutRec()\n{\n  OutRec* result = new OutRec;\n  result->IsHole = false;\n  result->IsOpen = false;\n  result->FirstLeft = 0;\n  result->Pts = 0;\n  result->BottomPt = 0;\n  result->PolyNd = 0;\n  m_PolyOuts.push_back(result);\n  result->Idx = (int)m_PolyOuts.size()-1;\n  return result;\n}\n//------------------------------------------------------------------------------\n\nOutPt* Clipper::AddOutPt(TEdge *e, const IntPoint &pt)\n{\n  bool ToFront = (e->Side == esLeft);\n  if(  e->OutIdx < 0 )\n  {\n    OutRec *outRec = CreateOutRec();\n    outRec->IsOpen = (e->WindDelta == 0);\n    OutPt* newOp = new OutPt;\n    outRec->Pts = newOp;\n    newOp->Idx = outRec->Idx;\n    newOp->Pt = pt;\n    newOp->Next = newOp;\n    newOp->Prev = newOp;\n    if (!outRec->IsOpen)\n      SetHoleState(e, outRec);\n    e->OutIdx = outRec->Idx;\n    return newOp;\n  } else\n  {\n    OutRec *outRec = m_PolyOuts[e->OutIdx];\n    //OutRec.Pts is the 'Left-most' point & OutRec.Pts.Prev is the 'Right-most'\n    OutPt* op = outRec->Pts;\n\n    if (ToFront && (pt == op->Pt)) return op;\n    else if (!ToFront && (pt == op->Prev->Pt)) return op->Prev;\n\n    OutPt* newOp = new OutPt;\n    newOp->Idx = outRec->Idx;\n    newOp->Pt = pt;\n    newOp->Next = op;\n    newOp->Prev = op->Prev;\n    newOp->Prev->Next = newOp;\n    op->Prev = newOp;\n    if (ToFront) outRec->Pts = newOp;\n    return newOp;\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::ProcessHorizontals(bool IsTopOfScanbeam)\n{\n  TEdge* horzEdge = m_SortedEdges;\n  while(horzEdge)\n  {\n    DeleteFromSEL(horzEdge);\n    ProcessHorizontal(horzEdge, IsTopOfScanbeam);\n    horzEdge = m_SortedEdges;\n  }\n}\n//------------------------------------------------------------------------------\n\ninline bool IsMinima(TEdge *e)\n{\n  return e  && (e->Prev->NextInLML != e) && (e->Next->NextInLML != e);\n}\n//------------------------------------------------------------------------------\n\ninline bool IsMaxima(TEdge *e, const cInt Y)\n{\n  return e && e->Top.Y == Y && !e->NextInLML;\n}\n//------------------------------------------------------------------------------\n\ninline bool IsIntermediate(TEdge *e, const cInt Y)\n{\n  return e->Top.Y == Y && e->NextInLML;\n}\n//------------------------------------------------------------------------------\n\nTEdge *GetMaximaPair(TEdge *e)\n{\n  TEdge* result = 0;\n  if ((e->Next->Top == e->Top) && !e->Next->NextInLML)\n    result = e->Next;\n  else if ((e->Prev->Top == e->Top) && !e->Prev->NextInLML)\n    result = e->Prev;\n\n  if (result && (result->OutIdx == Skip ||\n    //result is false if both NextInAEL & PrevInAEL are nil & not horizontal ...\n    (result->NextInAEL == result->PrevInAEL && !IsHorizontal(*result))))\n      return 0;\n  return result;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::SwapPositionsInAEL(TEdge *Edge1, TEdge *Edge2)\n{\n  //check that one or other edge hasn't already been removed from AEL ...\n  if (Edge1->NextInAEL == Edge1->PrevInAEL || \n    Edge2->NextInAEL == Edge2->PrevInAEL) return;\n\n  if(  Edge1->NextInAEL == Edge2 )\n  {\n    TEdge* Next = Edge2->NextInAEL;\n    if( Next ) Next->PrevInAEL = Edge1;\n    TEdge* Prev = Edge1->PrevInAEL;\n    if( Prev ) Prev->NextInAEL = Edge2;\n    Edge2->PrevInAEL = Prev;\n    Edge2->NextInAEL = Edge1;\n    Edge1->PrevInAEL = Edge2;\n    Edge1->NextInAEL = Next;\n  }\n  else if(  Edge2->NextInAEL == Edge1 )\n  {\n    TEdge* Next = Edge1->NextInAEL;\n    if( Next ) Next->PrevInAEL = Edge2;\n    TEdge* Prev = Edge2->PrevInAEL;\n    if( Prev ) Prev->NextInAEL = Edge1;\n    Edge1->PrevInAEL = Prev;\n    Edge1->NextInAEL = Edge2;\n    Edge2->PrevInAEL = Edge1;\n    Edge2->NextInAEL = Next;\n  }\n  else\n  {\n    TEdge* Next = Edge1->NextInAEL;\n    TEdge* Prev = Edge1->PrevInAEL;\n    Edge1->NextInAEL = Edge2->NextInAEL;\n    if( Edge1->NextInAEL ) Edge1->NextInAEL->PrevInAEL = Edge1;\n    Edge1->PrevInAEL = Edge2->PrevInAEL;\n    if( Edge1->PrevInAEL ) Edge1->PrevInAEL->NextInAEL = Edge1;\n    Edge2->NextInAEL = Next;\n    if( Edge2->NextInAEL ) Edge2->NextInAEL->PrevInAEL = Edge2;\n    Edge2->PrevInAEL = Prev;\n    if( Edge2->PrevInAEL ) Edge2->PrevInAEL->NextInAEL = Edge2;\n  }\n\n  if( !Edge1->PrevInAEL ) m_ActiveEdges = Edge1;\n  else if( !Edge2->PrevInAEL ) m_ActiveEdges = Edge2;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::SwapPositionsInSEL(TEdge *Edge1, TEdge *Edge2)\n{\n  if(  !( Edge1->NextInSEL ) &&  !( Edge1->PrevInSEL ) ) return;\n  if(  !( Edge2->NextInSEL ) &&  !( Edge2->PrevInSEL ) ) return;\n\n  if(  Edge1->NextInSEL == Edge2 )\n  {\n    TEdge* Next = Edge2->NextInSEL;\n    if( Next ) Next->PrevInSEL = Edge1;\n    TEdge* Prev = Edge1->PrevInSEL;\n    if( Prev ) Prev->NextInSEL = Edge2;\n    Edge2->PrevInSEL = Prev;\n    Edge2->NextInSEL = Edge1;\n    Edge1->PrevInSEL = Edge2;\n    Edge1->NextInSEL = Next;\n  }\n  else if(  Edge2->NextInSEL == Edge1 )\n  {\n    TEdge* Next = Edge1->NextInSEL;\n    if( Next ) Next->PrevInSEL = Edge2;\n    TEdge* Prev = Edge2->PrevInSEL;\n    if( Prev ) Prev->NextInSEL = Edge1;\n    Edge1->PrevInSEL = Prev;\n    Edge1->NextInSEL = Edge2;\n    Edge2->PrevInSEL = Edge1;\n    Edge2->NextInSEL = Next;\n  }\n  else\n  {\n    TEdge* Next = Edge1->NextInSEL;\n    TEdge* Prev = Edge1->PrevInSEL;\n    Edge1->NextInSEL = Edge2->NextInSEL;\n    if( Edge1->NextInSEL ) Edge1->NextInSEL->PrevInSEL = Edge1;\n    Edge1->PrevInSEL = Edge2->PrevInSEL;\n    if( Edge1->PrevInSEL ) Edge1->PrevInSEL->NextInSEL = Edge1;\n    Edge2->NextInSEL = Next;\n    if( Edge2->NextInSEL ) Edge2->NextInSEL->PrevInSEL = Edge2;\n    Edge2->PrevInSEL = Prev;\n    if( Edge2->PrevInSEL ) Edge2->PrevInSEL->NextInSEL = Edge2;\n  }\n\n  if( !Edge1->PrevInSEL ) m_SortedEdges = Edge1;\n  else if( !Edge2->PrevInSEL ) m_SortedEdges = Edge2;\n}\n//------------------------------------------------------------------------------\n\nTEdge* GetNextInAEL(TEdge *e, Direction dir)\n{\n  return dir == dLeftToRight ? e->NextInAEL : e->PrevInAEL;\n}\n//------------------------------------------------------------------------------\n\nvoid GetHorzDirection(TEdge& HorzEdge, Direction& Dir, cInt& Left, cInt& Right)\n{\n  if (HorzEdge.Bot.X < HorzEdge.Top.X)\n  {\n    Left = HorzEdge.Bot.X;\n    Right = HorzEdge.Top.X;\n    Dir = dLeftToRight;\n  } else\n  {\n    Left = HorzEdge.Top.X;\n    Right = HorzEdge.Bot.X;\n    Dir = dRightToLeft;\n  }\n}\n//------------------------------------------------------------------------\n\n/*******************************************************************************\n* Notes: Horizontal edges (HEs) at scanline intersections (ie at the Top or    *\n* Bottom of a scanbeam) are processed as if layered. The order in which HEs    *\n* are processed doesn't matter. HEs intersect with other HE Bot.Xs only [#]    *\n* (or they could intersect with Top.Xs only, ie EITHER Bot.Xs OR Top.Xs),      *\n* and with other non-horizontal edges [*]. Once these intersections are        *\n* processed, intermediate HEs then 'promote' the Edge above (NextInLML) into   *\n* the AEL. These 'promoted' edges may in turn intersect [%] with other HEs.    *\n*******************************************************************************/\n\nvoid Clipper::ProcessHorizontal(TEdge *horzEdge, bool isTopOfScanbeam)\n{\n  Direction dir;\n  cInt horzLeft, horzRight;\n\n  GetHorzDirection(*horzEdge, dir, horzLeft, horzRight);\n\n  TEdge* eLastHorz = horzEdge, *eMaxPair = 0;\n  while (eLastHorz->NextInLML && IsHorizontal(*eLastHorz->NextInLML)) \n    eLastHorz = eLastHorz->NextInLML;\n  if (!eLastHorz->NextInLML)\n    eMaxPair = GetMaximaPair(eLastHorz);\n\n  for (;;)\n  {\n    bool IsLastHorz = (horzEdge == eLastHorz);\n    TEdge* e = GetNextInAEL(horzEdge, dir);\n    while(e)\n    {\n      //Break if we've got to the end of an intermediate horizontal edge ...\n      //nb: Smaller Dx's are to the right of larger Dx's ABOVE the horizontal.\n      if (e->Curr.X == horzEdge->Top.X && horzEdge->NextInLML && \n        e->Dx < horzEdge->NextInLML->Dx) break;\n\n      TEdge* eNext = GetNextInAEL(e, dir); //saves eNext for later\n\n      if ((dir == dLeftToRight && e->Curr.X <= horzRight) ||\n        (dir == dRightToLeft && e->Curr.X >= horzLeft))\n      {\n        //so far we're still in range of the horizontal Edge  but make sure\n        //we're at the last of consec. horizontals when matching with eMaxPair\n        if(e == eMaxPair && IsLastHorz)\n        {\n\n          if (horzEdge->OutIdx >= 0)\n          {\n            OutPt* op1 = AddOutPt(horzEdge, horzEdge->Top);\n            TEdge* eNextHorz = m_SortedEdges;\n            while (eNextHorz)\n            {\n              if (eNextHorz->OutIdx >= 0 &&\n                HorzSegmentsOverlap(horzEdge->Bot.X,\n                horzEdge->Top.X, eNextHorz->Bot.X, eNextHorz->Top.X))\n              {\n                OutPt* op2 = AddOutPt(eNextHorz, eNextHorz->Bot);\n                AddJoin(op2, op1, eNextHorz->Top);\n              }\n              eNextHorz = eNextHorz->NextInSEL;\n            }\n            AddGhostJoin(op1, horzEdge->Bot);\n            AddLocalMaxPoly(horzEdge, eMaxPair, horzEdge->Top);\n          }\n          DeleteFromAEL(horzEdge);\n          DeleteFromAEL(eMaxPair);\n          return;\n        }\n        else if(dir == dLeftToRight)\n        {\n          IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y);\n          IntersectEdges(horzEdge, e, Pt);\n        }\n        else\n        {\n          IntPoint Pt = IntPoint(e->Curr.X, horzEdge->Curr.Y);\n          IntersectEdges( e, horzEdge, Pt);\n        }\n        SwapPositionsInAEL( horzEdge, e );\n      }\n      else if( (dir == dLeftToRight && e->Curr.X >= horzRight) ||\n       (dir == dRightToLeft && e->Curr.X <= horzLeft) ) break;\n      e = eNext;\n    } //end while\n\n    if (horzEdge->NextInLML && IsHorizontal(*horzEdge->NextInLML))\n    {\n      UpdateEdgeIntoAEL(horzEdge);\n      if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Bot);\n      GetHorzDirection(*horzEdge, dir, horzLeft, horzRight);\n    } else\n      break;\n  } //end for (;;)\n\n  if(horzEdge->NextInLML)\n  {\n    if(horzEdge->OutIdx >= 0)\n    {\n      OutPt* op1 = AddOutPt( horzEdge, horzEdge->Top);\n      if (isTopOfScanbeam) AddGhostJoin(op1, horzEdge->Bot);\n      UpdateEdgeIntoAEL(horzEdge);\n      if (horzEdge->WindDelta == 0) return;\n      //nb: HorzEdge is no longer horizontal here\n      TEdge* ePrev = horzEdge->PrevInAEL;\n      TEdge* eNext = horzEdge->NextInAEL;\n      if (ePrev && ePrev->Curr.X == horzEdge->Bot.X &&\n        ePrev->Curr.Y == horzEdge->Bot.Y && ePrev->WindDelta != 0 &&\n        (ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y &&\n        SlopesEqual(*horzEdge, *ePrev, m_UseFullRange)))\n      {\n        OutPt* op2 = AddOutPt(ePrev, horzEdge->Bot);\n        AddJoin(op1, op2, horzEdge->Top);\n      }\n      else if (eNext && eNext->Curr.X == horzEdge->Bot.X &&\n        eNext->Curr.Y == horzEdge->Bot.Y && eNext->WindDelta != 0 &&\n        eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y &&\n        SlopesEqual(*horzEdge, *eNext, m_UseFullRange))\n      {\n        OutPt* op2 = AddOutPt(eNext, horzEdge->Bot);\n        AddJoin(op1, op2, horzEdge->Top);\n      }\n    }\n    else\n      UpdateEdgeIntoAEL(horzEdge); \n  }\n  else\n  {\n    if (horzEdge->OutIdx >= 0) AddOutPt(horzEdge, horzEdge->Top);\n    DeleteFromAEL(horzEdge);\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::UpdateEdgeIntoAEL(TEdge *&e)\n{\n  if( !e->NextInLML ) throw\n    clipperException(\"UpdateEdgeIntoAEL: invalid call\");\n\n  e->NextInLML->OutIdx = e->OutIdx;\n  TEdge* AelPrev = e->PrevInAEL;\n  TEdge* AelNext = e->NextInAEL;\n  if (AelPrev) AelPrev->NextInAEL = e->NextInLML;\n  else m_ActiveEdges = e->NextInLML;\n  if (AelNext) AelNext->PrevInAEL = e->NextInLML;\n  e->NextInLML->Side = e->Side;\n  e->NextInLML->WindDelta = e->WindDelta;\n  e->NextInLML->WindCnt = e->WindCnt;\n  e->NextInLML->WindCnt2 = e->WindCnt2;\n  e = e->NextInLML;\n  e->Curr = e->Bot;\n  e->PrevInAEL = AelPrev;\n  e->NextInAEL = AelNext;\n  if (!IsHorizontal(*e)) InsertScanbeam(e->Top.Y);\n}\n//------------------------------------------------------------------------------\n\nbool Clipper::ProcessIntersections(const cInt topY)\n{\n  if( !m_ActiveEdges ) return true;\n  try {\n    BuildIntersectList(topY);\n    size_t IlSize = m_IntersectList.size();\n    if (IlSize == 0) return true;\n    if (IlSize == 1 || FixupIntersectionOrder()) ProcessIntersectList();\n    else return false;\n  }\n  catch(...) \n  {\n    m_SortedEdges = 0;\n    DisposeIntersectNodes();\n    throw clipperException(\"ProcessIntersections error\");\n  }\n  m_SortedEdges = 0;\n  return true;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::DisposeIntersectNodes()\n{\n  for (size_t i = 0; i < m_IntersectList.size(); ++i )\n    delete m_IntersectList[i];\n  m_IntersectList.clear();\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::BuildIntersectList(const cInt topY)\n{\n  if ( !m_ActiveEdges ) return;\n\n  //prepare for sorting ...\n  TEdge* e = m_ActiveEdges;\n  m_SortedEdges = e;\n  while( e )\n  {\n    e->PrevInSEL = e->PrevInAEL;\n    e->NextInSEL = e->NextInAEL;\n    e->Curr.X = TopX( *e, topY );\n    e = e->NextInAEL;\n  }\n\n  //bubblesort ...\n  bool isModified;\n  do\n  {\n    isModified = false;\n    e = m_SortedEdges;\n    while( e->NextInSEL )\n    {\n      TEdge *eNext = e->NextInSEL;\n      IntPoint Pt;\n      if(e->Curr.X > eNext->Curr.X)\n      {\n        IntersectPoint(*e, *eNext, Pt);\n        IntersectNode * newNode = new IntersectNode;\n        newNode->Edge1 = e;\n        newNode->Edge2 = eNext;\n        newNode->Pt = Pt;\n        m_IntersectList.push_back(newNode);\n\n        SwapPositionsInSEL(e, eNext);\n        isModified = true;\n      }\n      else\n        e = eNext;\n    }\n    if( e->PrevInSEL ) e->PrevInSEL->NextInSEL = 0;\n    else break;\n  }\n  while ( isModified );\n  m_SortedEdges = 0; //important\n}\n//------------------------------------------------------------------------------\n\n\nvoid Clipper::ProcessIntersectList()\n{\n  for (size_t i = 0; i < m_IntersectList.size(); ++i)\n  {\n    IntersectNode* iNode = m_IntersectList[i];\n    {\n      IntersectEdges( iNode->Edge1, iNode->Edge2, iNode->Pt);\n      SwapPositionsInAEL( iNode->Edge1 , iNode->Edge2 );\n    }\n    delete iNode;\n  }\n  m_IntersectList.clear();\n}\n//------------------------------------------------------------------------------\n\nbool IntersectListSort(IntersectNode* node1, IntersectNode* node2)\n{\n  return node2->Pt.Y < node1->Pt.Y;\n}\n//------------------------------------------------------------------------------\n\ninline bool EdgesAdjacent(const IntersectNode &inode)\n{\n  return (inode.Edge1->NextInSEL == inode.Edge2) ||\n    (inode.Edge1->PrevInSEL == inode.Edge2);\n}\n//------------------------------------------------------------------------------\n\nbool Clipper::FixupIntersectionOrder()\n{\n  //pre-condition: intersections are sorted Bottom-most first.\n  //Now it's crucial that intersections are made only between adjacent edges,\n  //so to ensure this the order of intersections may need adjusting ...\n  CopyAELToSEL();\n  std::sort(m_IntersectList.begin(), m_IntersectList.end(), IntersectListSort);\n  size_t cnt = m_IntersectList.size();\n  for (size_t i = 0; i < cnt; ++i) \n  {\n    if (!EdgesAdjacent(*m_IntersectList[i]))\n    {\n      size_t j = i + 1;\n      while (j < cnt && !EdgesAdjacent(*m_IntersectList[j])) j++;\n      if (j == cnt)  return false;\n      std::swap(m_IntersectList[i], m_IntersectList[j]);\n    }\n    SwapPositionsInSEL(m_IntersectList[i]->Edge1, m_IntersectList[i]->Edge2);\n  }\n  return true;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::DoMaxima(TEdge *e)\n{\n  TEdge* eMaxPair = GetMaximaPair(e);\n  if (!eMaxPair)\n  {\n    if (e->OutIdx >= 0)\n      AddOutPt(e, e->Top);\n    DeleteFromAEL(e);\n    return;\n  }\n\n  TEdge* eNext = e->NextInAEL;\n  while(eNext && eNext != eMaxPair)\n  {\n    IntersectEdges(e, eNext, e->Top);\n    SwapPositionsInAEL(e, eNext);\n    eNext = e->NextInAEL;\n  }\n\n  if(e->OutIdx == Unassigned && eMaxPair->OutIdx == Unassigned)\n  {\n    DeleteFromAEL(e);\n    DeleteFromAEL(eMaxPair);\n  }\n  else if( e->OutIdx >= 0 && eMaxPair->OutIdx >= 0 )\n  {\n    if (e->OutIdx >= 0) AddLocalMaxPoly(e, eMaxPair, e->Top);\n    DeleteFromAEL(e);\n    DeleteFromAEL(eMaxPair);\n  }\n#ifdef use_lines\n  else if (e->WindDelta == 0)\n  {\n    if (e->OutIdx >= 0) \n    {\n      AddOutPt(e, e->Top);\n      e->OutIdx = Unassigned;\n    }\n    DeleteFromAEL(e);\n\n    if (eMaxPair->OutIdx >= 0)\n    {\n      AddOutPt(eMaxPair, e->Top);\n      eMaxPair->OutIdx = Unassigned;\n    }\n    DeleteFromAEL(eMaxPair);\n  } \n#endif\n  else throw clipperException(\"DoMaxima error\");\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::ProcessEdgesAtTopOfScanbeam(const cInt topY)\n{\n  TEdge* e = m_ActiveEdges;\n  while( e )\n  {\n    //1. process maxima, treating them as if they're 'bent' horizontal edges,\n    //   but exclude maxima with horizontal edges. nb: e can't be a horizontal.\n    bool IsMaximaEdge = IsMaxima(e, topY);\n\n    if(IsMaximaEdge)\n    {\n      TEdge* eMaxPair = GetMaximaPair(e);\n      IsMaximaEdge = (!eMaxPair || !IsHorizontal(*eMaxPair));\n    }\n\n    if(IsMaximaEdge)\n    {\n      TEdge* ePrev = e->PrevInAEL;\n      DoMaxima(e);\n      if( !ePrev ) e = m_ActiveEdges;\n      else e = ePrev->NextInAEL;\n    }\n    else\n    {\n      //2. promote horizontal edges, otherwise update Curr.X and Curr.Y ...\n      if (IsIntermediate(e, topY) && IsHorizontal(*e->NextInLML))\n      {\n        UpdateEdgeIntoAEL(e);\n        if (e->OutIdx >= 0)\n          AddOutPt(e, e->Bot);\n        AddEdgeToSEL(e);\n      } \n      else\n      {\n        e->Curr.X = TopX( *e, topY );\n        e->Curr.Y = topY;\n      }\n\n      if (m_StrictSimple)\n      {  \n        TEdge* ePrev = e->PrevInAEL;\n        if ((e->OutIdx >= 0) && (e->WindDelta != 0) && ePrev && (ePrev->OutIdx >= 0) &&\n          (ePrev->Curr.X == e->Curr.X) && (ePrev->WindDelta != 0))\n        {\n          IntPoint pt = e->Curr;\n#ifdef use_xyz\n          SetZ(pt, *ePrev, *e);\n#endif\n          OutPt* op = AddOutPt(ePrev, pt);\n          OutPt* op2 = AddOutPt(e, pt);\n          AddJoin(op, op2, pt); //StrictlySimple (type-3) join\n        }\n      }\n\n      e = e->NextInAEL;\n    }\n  }\n\n  //3. Process horizontals at the Top of the scanbeam ...\n  ProcessHorizontals(true);\n\n  //4. Promote intermediate vertices ...\n  e = m_ActiveEdges;\n  while(e)\n  {\n    if(IsIntermediate(e, topY))\n    {\n      OutPt* op = 0;\n      if( e->OutIdx >= 0 ) \n        op = AddOutPt(e, e->Top);\n      UpdateEdgeIntoAEL(e);\n\n      //if output polygons share an edge, they'll need joining later ...\n      TEdge* ePrev = e->PrevInAEL;\n      TEdge* eNext = e->NextInAEL;\n      if (ePrev && ePrev->Curr.X == e->Bot.X &&\n        ePrev->Curr.Y == e->Bot.Y && op &&\n        ePrev->OutIdx >= 0 && ePrev->Curr.Y > ePrev->Top.Y &&\n        SlopesEqual(*e, *ePrev, m_UseFullRange) &&\n        (e->WindDelta != 0) && (ePrev->WindDelta != 0))\n      {\n        OutPt* op2 = AddOutPt(ePrev, e->Bot);\n        AddJoin(op, op2, e->Top);\n      }\n      else if (eNext && eNext->Curr.X == e->Bot.X &&\n        eNext->Curr.Y == e->Bot.Y && op &&\n        eNext->OutIdx >= 0 && eNext->Curr.Y > eNext->Top.Y &&\n        SlopesEqual(*e, *eNext, m_UseFullRange) &&\n        (e->WindDelta != 0) && (eNext->WindDelta != 0))\n      {\n        OutPt* op2 = AddOutPt(eNext, e->Bot);\n        AddJoin(op, op2, e->Top);\n      }\n    }\n    e = e->NextInAEL;\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::FixupOutPolygon(OutRec &outrec)\n{\n  //FixupOutPolygon() - removes duplicate points and simplifies consecutive\n  //parallel edges by removing the middle vertex.\n  OutPt *lastOK = 0;\n  outrec.BottomPt = 0;\n  OutPt *pp = outrec.Pts;\n\n  for (;;)\n  {\n    if (pp->Prev == pp || pp->Prev == pp->Next )\n    {\n      DisposeOutPts(pp);\n      outrec.Pts = 0;\n      return;\n    }\n\n    //test for duplicate points and collinear edges ...\n    if ((pp->Pt == pp->Next->Pt) || (pp->Pt == pp->Prev->Pt) || \n      (SlopesEqual(pp->Prev->Pt, pp->Pt, pp->Next->Pt, m_UseFullRange) &&\n      (!m_PreserveCollinear || \n      !Pt2IsBetweenPt1AndPt3(pp->Prev->Pt, pp->Pt, pp->Next->Pt))))\n    {\n      lastOK = 0;\n      OutPt *tmp = pp;\n      pp->Prev->Next = pp->Next;\n      pp->Next->Prev = pp->Prev;\n      pp = pp->Prev;\n      delete tmp;\n    }\n    else if (pp == lastOK) break;\n    else\n    {\n      if (!lastOK) lastOK = pp;\n      pp = pp->Next;\n    }\n  }\n  outrec.Pts = pp;\n}\n//------------------------------------------------------------------------------\n\nint PointCount(OutPt *Pts)\n{\n    if (!Pts) return 0;\n    int result = 0;\n    OutPt* p = Pts;\n    do\n    {\n        result++;\n        p = p->Next;\n    }\n    while (p != Pts);\n    return result;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::BuildResult(Paths &polys)\n{\n  polys.reserve(m_PolyOuts.size());\n  for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)\n  {\n    if (!m_PolyOuts[i]->Pts) continue;\n    Path pg;\n    OutPt* p = m_PolyOuts[i]->Pts->Prev;\n    int cnt = PointCount(p);\n    if (cnt < 2) continue;\n    pg.reserve(cnt);\n    for (int i = 0; i < cnt; ++i)\n    {\n      pg.push_back(p->Pt);\n      p = p->Prev;\n    }\n    polys.push_back(pg);\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::BuildResult2(PolyTree& polytree)\n{\n    polytree.Clear();\n    polytree.AllNodes.reserve(m_PolyOuts.size());\n    //add each output polygon/contour to polytree ...\n    for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++)\n    {\n        OutRec* outRec = m_PolyOuts[i];\n        int cnt = PointCount(outRec->Pts);\n        if ((outRec->IsOpen && cnt < 2) || (!outRec->IsOpen && cnt < 3)) continue;\n        FixHoleLinkage(*outRec);\n        PolyNode* pn = new PolyNode();\n        //nb: polytree takes ownership of all the PolyNodes\n        polytree.AllNodes.push_back(pn);\n        outRec->PolyNd = pn;\n        pn->Parent = 0;\n        pn->Index = 0;\n        pn->Contour.reserve(cnt);\n        OutPt *op = outRec->Pts->Prev;\n        for (int j = 0; j < cnt; j++)\n        {\n            pn->Contour.push_back(op->Pt);\n            op = op->Prev;\n        }\n    }\n\n    //fixup PolyNode links etc ...\n    polytree.Childs.reserve(m_PolyOuts.size());\n    for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); i++)\n    {\n        OutRec* outRec = m_PolyOuts[i];\n        if (!outRec->PolyNd) continue;\n        if (outRec->IsOpen) \n        {\n          outRec->PolyNd->m_IsOpen = true;\n          polytree.AddChild(*outRec->PolyNd);\n        }\n        else if (outRec->FirstLeft && outRec->FirstLeft->PolyNd) \n          outRec->FirstLeft->PolyNd->AddChild(*outRec->PolyNd);\n        else\n          polytree.AddChild(*outRec->PolyNd);\n    }\n}\n//------------------------------------------------------------------------------\n\nvoid SwapIntersectNodes(IntersectNode &int1, IntersectNode &int2)\n{\n  //just swap the contents (because fIntersectNodes is a single-linked-list)\n  IntersectNode inode = int1; //gets a copy of Int1\n  int1.Edge1 = int2.Edge1;\n  int1.Edge2 = int2.Edge2;\n  int1.Pt = int2.Pt;\n  int2.Edge1 = inode.Edge1;\n  int2.Edge2 = inode.Edge2;\n  int2.Pt = inode.Pt;\n}\n//------------------------------------------------------------------------------\n\ninline bool E2InsertsBeforeE1(TEdge &e1, TEdge &e2)\n{\n  if (e2.Curr.X == e1.Curr.X) \n  {\n    if (e2.Top.Y > e1.Top.Y)\n      return e2.Top.X < TopX(e1, e2.Top.Y); \n      else return e1.Top.X > TopX(e2, e1.Top.Y);\n  } \n  else return e2.Curr.X < e1.Curr.X;\n}\n//------------------------------------------------------------------------------\n\nbool GetOverlap(const cInt a1, const cInt a2, const cInt b1, const cInt b2, \n    cInt& Left, cInt& Right)\n{\n  if (a1 < a2)\n  {\n    if (b1 < b2) {Left = std::max(a1,b1); Right = std::min(a2,b2);}\n    else {Left = std::max(a1,b2); Right = std::min(a2,b1);}\n  } \n  else\n  {\n    if (b1 < b2) {Left = std::max(a2,b1); Right = std::min(a1,b2);}\n    else {Left = std::max(a2,b2); Right = std::min(a1,b1);}\n  }\n  return Left < Right;\n}\n//------------------------------------------------------------------------------\n\ninline void UpdateOutPtIdxs(OutRec& outrec)\n{  \n  OutPt* op = outrec.Pts;\n  do\n  {\n    op->Idx = outrec.Idx;\n    op = op->Prev;\n  }\n  while(op != outrec.Pts);\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge)\n{\n  if(!m_ActiveEdges)\n  {\n    edge->PrevInAEL = 0;\n    edge->NextInAEL = 0;\n    m_ActiveEdges = edge;\n  }\n  else if(!startEdge && E2InsertsBeforeE1(*m_ActiveEdges, *edge))\n  {\n      edge->PrevInAEL = 0;\n      edge->NextInAEL = m_ActiveEdges;\n      m_ActiveEdges->PrevInAEL = edge;\n      m_ActiveEdges = edge;\n  } \n  else\n  {\n    if(!startEdge) startEdge = m_ActiveEdges;\n    while(startEdge->NextInAEL  && \n      !E2InsertsBeforeE1(*startEdge->NextInAEL , *edge))\n        startEdge = startEdge->NextInAEL;\n    edge->NextInAEL = startEdge->NextInAEL;\n    if(startEdge->NextInAEL) startEdge->NextInAEL->PrevInAEL = edge;\n    edge->PrevInAEL = startEdge;\n    startEdge->NextInAEL = edge;\n  }\n}\n//----------------------------------------------------------------------\n\nOutPt* DupOutPt(OutPt* outPt, bool InsertAfter)\n{\n  OutPt* result = new OutPt;\n  result->Pt = outPt->Pt;\n  result->Idx = outPt->Idx;\n  if (InsertAfter)\n  {\n    result->Next = outPt->Next;\n    result->Prev = outPt;\n    outPt->Next->Prev = result;\n    outPt->Next = result;\n  } \n  else\n  {\n    result->Prev = outPt->Prev;\n    result->Next = outPt;\n    outPt->Prev->Next = result;\n    outPt->Prev = result;\n  }\n  return result;\n}\n//------------------------------------------------------------------------------\n\nbool JoinHorz(OutPt* op1, OutPt* op1b, OutPt* op2, OutPt* op2b,\n  const IntPoint Pt, bool DiscardLeft)\n{\n  Direction Dir1 = (op1->Pt.X > op1b->Pt.X ? dRightToLeft : dLeftToRight);\n  Direction Dir2 = (op2->Pt.X > op2b->Pt.X ? dRightToLeft : dLeftToRight);\n  if (Dir1 == Dir2) return false;\n\n  //When DiscardLeft, we want Op1b to be on the Left of Op1, otherwise we\n  //want Op1b to be on the Right. (And likewise with Op2 and Op2b.)\n  //So, to facilitate this while inserting Op1b and Op2b ...\n  //when DiscardLeft, make sure we're AT or RIGHT of Pt before adding Op1b,\n  //otherwise make sure we're AT or LEFT of Pt. (Likewise with Op2b.)\n  if (Dir1 == dLeftToRight) \n  {\n    while (op1->Next->Pt.X <= Pt.X && \n      op1->Next->Pt.X >= op1->Pt.X && op1->Next->Pt.Y == Pt.Y)  \n        op1 = op1->Next;\n    if (DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next;\n    op1b = DupOutPt(op1, !DiscardLeft);\n    if (op1b->Pt != Pt) \n    {\n      op1 = op1b;\n      op1->Pt = Pt;\n      op1b = DupOutPt(op1, !DiscardLeft);\n    }\n  } \n  else\n  {\n    while (op1->Next->Pt.X >= Pt.X && \n      op1->Next->Pt.X <= op1->Pt.X && op1->Next->Pt.Y == Pt.Y) \n        op1 = op1->Next;\n    if (!DiscardLeft && (op1->Pt.X != Pt.X)) op1 = op1->Next;\n    op1b = DupOutPt(op1, DiscardLeft);\n    if (op1b->Pt != Pt)\n    {\n      op1 = op1b;\n      op1->Pt = Pt;\n      op1b = DupOutPt(op1, DiscardLeft);\n    }\n  }\n\n  if (Dir2 == dLeftToRight)\n  {\n    while (op2->Next->Pt.X <= Pt.X && \n      op2->Next->Pt.X >= op2->Pt.X && op2->Next->Pt.Y == Pt.Y)\n        op2 = op2->Next;\n    if (DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next;\n    op2b = DupOutPt(op2, !DiscardLeft);\n    if (op2b->Pt != Pt)\n    {\n      op2 = op2b;\n      op2->Pt = Pt;\n      op2b = DupOutPt(op2, !DiscardLeft);\n    };\n  } else\n  {\n    while (op2->Next->Pt.X >= Pt.X && \n      op2->Next->Pt.X <= op2->Pt.X && op2->Next->Pt.Y == Pt.Y) \n        op2 = op2->Next;\n    if (!DiscardLeft && (op2->Pt.X != Pt.X)) op2 = op2->Next;\n    op2b = DupOutPt(op2, DiscardLeft);\n    if (op2b->Pt != Pt)\n    {\n      op2 = op2b;\n      op2->Pt = Pt;\n      op2b = DupOutPt(op2, DiscardLeft);\n    };\n  };\n\n  if ((Dir1 == dLeftToRight) == DiscardLeft)\n  {\n    op1->Prev = op2;\n    op2->Next = op1;\n    op1b->Next = op2b;\n    op2b->Prev = op1b;\n  }\n  else\n  {\n    op1->Next = op2;\n    op2->Prev = op1;\n    op1b->Prev = op2b;\n    op2b->Next = op1b;\n  }\n  return true;\n}\n//------------------------------------------------------------------------------\n\nbool Clipper::JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2)\n{\n  OutPt *op1 = j->OutPt1, *op1b;\n  OutPt *op2 = j->OutPt2, *op2b;\n\n  //There are 3 kinds of joins for output polygons ...\n  //1. Horizontal joins where Join.OutPt1 & Join.OutPt2 are a vertices anywhere\n  //along (horizontal) collinear edges (& Join.OffPt is on the same horizontal).\n  //2. Non-horizontal joins where Join.OutPt1 & Join.OutPt2 are at the same\n  //location at the Bottom of the overlapping segment (& Join.OffPt is above).\n  //3. StrictSimple joins where edges touch but are not collinear and where\n  //Join.OutPt1, Join.OutPt2 & Join.OffPt all share the same point.\n  bool isHorizontal = (j->OutPt1->Pt.Y == j->OffPt.Y);\n\n  if (isHorizontal  && (j->OffPt == j->OutPt1->Pt) &&\n  (j->OffPt == j->OutPt2->Pt))\n  {\n    //Strictly Simple join ...\n    if (outRec1 != outRec2) return false;\n    op1b = j->OutPt1->Next;\n    while (op1b != op1 && (op1b->Pt == j->OffPt)) \n      op1b = op1b->Next;\n    bool reverse1 = (op1b->Pt.Y > j->OffPt.Y);\n    op2b = j->OutPt2->Next;\n    while (op2b != op2 && (op2b->Pt == j->OffPt)) \n      op2b = op2b->Next;\n    bool reverse2 = (op2b->Pt.Y > j->OffPt.Y);\n    if (reverse1 == reverse2) return false;\n    if (reverse1)\n    {\n      op1b = DupOutPt(op1, false);\n      op2b = DupOutPt(op2, true);\n      op1->Prev = op2;\n      op2->Next = op1;\n      op1b->Next = op2b;\n      op2b->Prev = op1b;\n      j->OutPt1 = op1;\n      j->OutPt2 = op1b;\n      return true;\n    } else\n    {\n      op1b = DupOutPt(op1, true);\n      op2b = DupOutPt(op2, false);\n      op1->Next = op2;\n      op2->Prev = op1;\n      op1b->Prev = op2b;\n      op2b->Next = op1b;\n      j->OutPt1 = op1;\n      j->OutPt2 = op1b;\n      return true;\n    }\n  } \n  else if (isHorizontal)\n  {\n    //treat horizontal joins differently to non-horizontal joins since with\n    //them we're not yet sure where the overlapping is. OutPt1.Pt & OutPt2.Pt\n    //may be anywhere along the horizontal edge.\n    op1b = op1;\n    while (op1->Prev->Pt.Y == op1->Pt.Y && op1->Prev != op1b && op1->Prev != op2)\n      op1 = op1->Prev;\n    while (op1b->Next->Pt.Y == op1b->Pt.Y && op1b->Next != op1 && op1b->Next != op2)\n      op1b = op1b->Next;\n    if (op1b->Next == op1 || op1b->Next == op2) return false; //a flat 'polygon'\n\n    op2b = op2;\n    while (op2->Prev->Pt.Y == op2->Pt.Y && op2->Prev != op2b && op2->Prev != op1b)\n      op2 = op2->Prev;\n    while (op2b->Next->Pt.Y == op2b->Pt.Y && op2b->Next != op2 && op2b->Next != op1)\n      op2b = op2b->Next;\n    if (op2b->Next == op2 || op2b->Next == op1) return false; //a flat 'polygon'\n\n    cInt Left, Right;\n    //Op1 --> Op1b & Op2 --> Op2b are the extremites of the horizontal edges\n    if (!GetOverlap(op1->Pt.X, op1b->Pt.X, op2->Pt.X, op2b->Pt.X, Left, Right))\n      return false;\n\n    //DiscardLeftSide: when overlapping edges are joined, a spike will created\n    //which needs to be cleaned up. However, we don't want Op1 or Op2 caught up\n    //on the discard Side as either may still be needed for other joins ...\n    IntPoint Pt;\n    bool DiscardLeftSide;\n    if (op1->Pt.X >= Left && op1->Pt.X <= Right) \n    {\n      Pt = op1->Pt; DiscardLeftSide = (op1->Pt.X > op1b->Pt.X);\n    } \n    else if (op2->Pt.X >= Left&& op2->Pt.X <= Right) \n    {\n      Pt = op2->Pt; DiscardLeftSide = (op2->Pt.X > op2b->Pt.X);\n    } \n    else if (op1b->Pt.X >= Left && op1b->Pt.X <= Right)\n    {\n      Pt = op1b->Pt; DiscardLeftSide = op1b->Pt.X > op1->Pt.X;\n    } \n    else\n    {\n      Pt = op2b->Pt; DiscardLeftSide = (op2b->Pt.X > op2->Pt.X);\n    }\n    j->OutPt1 = op1; j->OutPt2 = op2;\n    return JoinHorz(op1, op1b, op2, op2b, Pt, DiscardLeftSide);\n  } else\n  {\n    //nb: For non-horizontal joins ...\n    //    1. Jr.OutPt1.Pt.Y == Jr.OutPt2.Pt.Y\n    //    2. Jr.OutPt1.Pt > Jr.OffPt.Y\n\n    //make sure the polygons are correctly oriented ...\n    op1b = op1->Next;\n    while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Next;\n    bool Reverse1 = ((op1b->Pt.Y > op1->Pt.Y) ||\n      !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange));\n    if (Reverse1)\n    {\n      op1b = op1->Prev;\n      while ((op1b->Pt == op1->Pt) && (op1b != op1)) op1b = op1b->Prev;\n      if ((op1b->Pt.Y > op1->Pt.Y) ||\n        !SlopesEqual(op1->Pt, op1b->Pt, j->OffPt, m_UseFullRange)) return false;\n    };\n    op2b = op2->Next;\n    while ((op2b->Pt == op2->Pt) && (op2b != op2))op2b = op2b->Next;\n    bool Reverse2 = ((op2b->Pt.Y > op2->Pt.Y) ||\n      !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange));\n    if (Reverse2)\n    {\n      op2b = op2->Prev;\n      while ((op2b->Pt == op2->Pt) && (op2b != op2)) op2b = op2b->Prev;\n      if ((op2b->Pt.Y > op2->Pt.Y) ||\n        !SlopesEqual(op2->Pt, op2b->Pt, j->OffPt, m_UseFullRange)) return false;\n    }\n\n    if ((op1b == op1) || (op2b == op2) || (op1b == op2b) ||\n      ((outRec1 == outRec2) && (Reverse1 == Reverse2))) return false;\n\n    if (Reverse1)\n    {\n      op1b = DupOutPt(op1, false);\n      op2b = DupOutPt(op2, true);\n      op1->Prev = op2;\n      op2->Next = op1;\n      op1b->Next = op2b;\n      op2b->Prev = op1b;\n      j->OutPt1 = op1;\n      j->OutPt2 = op1b;\n      return true;\n    } else\n    {\n      op1b = DupOutPt(op1, true);\n      op2b = DupOutPt(op2, false);\n      op1->Next = op2;\n      op2->Prev = op1;\n      op1b->Prev = op2b;\n      op2b->Next = op1b;\n      j->OutPt1 = op1;\n      j->OutPt2 = op1b;\n      return true;\n    }\n  }\n}\n//----------------------------------------------------------------------\n\nstatic OutRec* ParseFirstLeft(OutRec* FirstLeft)\n{\n  while (FirstLeft && !FirstLeft->Pts)\n    FirstLeft = FirstLeft->FirstLeft;\n  return FirstLeft;\n}\n//------------------------------------------------------------------------------\n\nvoid Clipper::FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec)\n{ \n  //tests if NewOutRec contains the polygon before reassigning FirstLeft\n  for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)\n  {\n    OutRec* outRec = m_PolyOuts[i];\n    if (!outRec->Pts || !outRec->FirstLeft) continue;\n    OutRec* firstLeft = ParseFirstLeft(outRec->FirstLeft);\n    if (firstLeft == OldOutRec)\n    {\n      if (Poly2ContainsPoly1(outRec->Pts, NewOutRec->Pts))\n        outRec->FirstLeft = NewOutRec;\n    }\n  }\n}\n//----------------------------------------------------------------------\n\nvoid Clipper::FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec)\n{ \n  //reassigns FirstLeft WITHOUT testing if NewOutRec contains the polygon\n  for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)\n  {\n    OutRec* outRec = m_PolyOuts[i];\n    if (outRec->FirstLeft == OldOutRec) outRec->FirstLeft = NewOutRec;\n  }\n}\n//----------------------------------------------------------------------\n\nvoid Clipper::JoinCommonEdges()\n{\n  for (JoinList::size_type i = 0; i < m_Joins.size(); i++)\n  {\n    Join* join = m_Joins[i];\n\n    OutRec *outRec1 = GetOutRec(join->OutPt1->Idx);\n    OutRec *outRec2 = GetOutRec(join->OutPt2->Idx);\n\n    if (!outRec1->Pts || !outRec2->Pts) continue;\n\n    //get the polygon fragment with the correct hole state (FirstLeft)\n    //before calling JoinPoints() ...\n    OutRec *holeStateRec;\n    if (outRec1 == outRec2) holeStateRec = outRec1;\n    else if (Param1RightOfParam2(outRec1, outRec2)) holeStateRec = outRec2;\n    else if (Param1RightOfParam2(outRec2, outRec1)) holeStateRec = outRec1;\n    else holeStateRec = GetLowermostRec(outRec1, outRec2);\n\n    if (!JoinPoints(join, outRec1, outRec2)) continue;\n\n    if (outRec1 == outRec2)\n    {\n      //instead of joining two polygons, we've just created a new one by\n      //splitting one polygon into two.\n      outRec1->Pts = join->OutPt1;\n      outRec1->BottomPt = 0;\n      outRec2 = CreateOutRec();\n      outRec2->Pts = join->OutPt2;\n\n      //update all OutRec2.Pts Idx's ...\n      UpdateOutPtIdxs(*outRec2);\n\n      //We now need to check every OutRec.FirstLeft pointer. If it points\n      //to OutRec1 it may need to point to OutRec2 instead ...\n      if (m_UsingPolyTree)\n        for (PolyOutList::size_type j = 0; j < m_PolyOuts.size() - 1; j++)\n        {\n          OutRec* oRec = m_PolyOuts[j];\n          if (!oRec->Pts || ParseFirstLeft(oRec->FirstLeft) != outRec1 ||\n            oRec->IsHole == outRec1->IsHole) continue;\n          if (Poly2ContainsPoly1(oRec->Pts, join->OutPt2))\n            oRec->FirstLeft = outRec2;\n        }\n\n      if (Poly2ContainsPoly1(outRec2->Pts, outRec1->Pts))\n      {\n        //outRec2 is contained by outRec1 ...\n        outRec2->IsHole = !outRec1->IsHole;\n        outRec2->FirstLeft = outRec1;\n\n        //fixup FirstLeft pointers that may need reassigning to OutRec1\n        if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1);\n\n        if ((outRec2->IsHole ^ m_ReverseOutput) == (Area(*outRec2) > 0))\n          ReversePolyPtLinks(outRec2->Pts);\n            \n      } else if (Poly2ContainsPoly1(outRec1->Pts, outRec2->Pts))\n      {\n        //outRec1 is contained by outRec2 ...\n        outRec2->IsHole = outRec1->IsHole;\n        outRec1->IsHole = !outRec2->IsHole;\n        outRec2->FirstLeft = outRec1->FirstLeft;\n        outRec1->FirstLeft = outRec2;\n\n        //fixup FirstLeft pointers that may need reassigning to OutRec1\n        if (m_UsingPolyTree) FixupFirstLefts2(outRec1, outRec2);\n\n        if ((outRec1->IsHole ^ m_ReverseOutput) == (Area(*outRec1) > 0))\n          ReversePolyPtLinks(outRec1->Pts);\n      } \n      else\n      {\n        //the 2 polygons are completely separate ...\n        outRec2->IsHole = outRec1->IsHole;\n        outRec2->FirstLeft = outRec1->FirstLeft;\n\n        //fixup FirstLeft pointers that may need reassigning to OutRec2\n        if (m_UsingPolyTree) FixupFirstLefts1(outRec1, outRec2);\n      }\n     \n    } else\n    {\n      //joined 2 polygons together ...\n\n      outRec2->Pts = 0;\n      outRec2->BottomPt = 0;\n      outRec2->Idx = outRec1->Idx;\n\n      outRec1->IsHole = holeStateRec->IsHole;\n      if (holeStateRec == outRec2) \n        outRec1->FirstLeft = outRec2->FirstLeft;\n      outRec2->FirstLeft = outRec1;\n\n      //fixup FirstLeft pointers that may need reassigning to OutRec1\n      if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1);\n    }\n  }\n}\n\n//------------------------------------------------------------------------------\n// ClipperOffset support functions ...\n//------------------------------------------------------------------------------\n\nDoublePoint GetUnitNormal(const IntPoint &pt1, const IntPoint &pt2)\n{\n  if(pt2.X == pt1.X && pt2.Y == pt1.Y) \n    return DoublePoint(0, 0);\n\n  double Dx = (double)(pt2.X - pt1.X);\n  double dy = (double)(pt2.Y - pt1.Y);\n  double f = 1 *1.0/ std::sqrt( Dx*Dx + dy*dy );\n  Dx *= f;\n  dy *= f;\n  return DoublePoint(dy, -Dx);\n}\n\n//------------------------------------------------------------------------------\n// ClipperOffset class\n//------------------------------------------------------------------------------\n\nClipperOffset::ClipperOffset(double miterLimit, double arcTolerance)\n{\n  this->MiterLimit = miterLimit;\n  this->ArcTolerance = arcTolerance;\n  m_lowest.X = -1;\n}\n//------------------------------------------------------------------------------\n\nClipperOffset::~ClipperOffset()\n{\n  Clear();\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperOffset::Clear()\n{\n  for (int i = 0; i < m_polyNodes.ChildCount(); ++i)\n    delete m_polyNodes.Childs[i];\n  m_polyNodes.Childs.clear();\n  m_lowest.X = -1;\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperOffset::AddPath(const Path& path, JoinType joinType, EndType endType)\n{\n  int highI = (int)path.size() - 1;\n  if (highI < 0) return;\n  PolyNode* newNode = new PolyNode();\n  newNode->m_jointype = joinType;\n  newNode->m_endtype = endType;\n\n  //strip duplicate points from path and also get index to the lowest point ...\n  if (endType == etClosedLine || endType == etClosedPolygon)\n    while (highI > 0 && path[0] == path[highI]) highI--;\n  newNode->Contour.reserve(highI + 1);\n  newNode->Contour.push_back(path[0]);\n  int j = 0, k = 0;\n  for (int i = 1; i <= highI; i++)\n    if (newNode->Contour[j] != path[i])\n    {\n      j++;\n      newNode->Contour.push_back(path[i]);\n      if (path[i].Y > newNode->Contour[k].Y ||\n        (path[i].Y == newNode->Contour[k].Y &&\n        path[i].X < newNode->Contour[k].X)) k = j;\n    }\n  if (endType == etClosedPolygon && j < 2)\n  {\n    delete newNode;\n    return;\n  }\n  m_polyNodes.AddChild(*newNode);\n\n  //if this path's lowest pt is lower than all the others then update m_lowest\n  if (endType != etClosedPolygon) return;\n  if (m_lowest.X < 0)\n    m_lowest = IntPoint(m_polyNodes.ChildCount() - 1, k);\n  else\n  {\n    IntPoint ip = m_polyNodes.Childs[(int)m_lowest.X]->Contour[(int)m_lowest.Y];\n    if (newNode->Contour[k].Y > ip.Y ||\n      (newNode->Contour[k].Y == ip.Y &&\n      newNode->Contour[k].X < ip.X))\n      m_lowest = IntPoint(m_polyNodes.ChildCount() - 1, k);\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperOffset::AddPaths(const Paths& paths, JoinType joinType, EndType endType)\n{\n  for (Paths::size_type i = 0; i < paths.size(); ++i)\n    AddPath(paths[i], joinType, endType);\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperOffset::FixOrientations()\n{\n  //fixup orientations of all closed paths if the orientation of the\n  //closed path with the lowermost vertex is wrong ...\n  if (m_lowest.X >= 0 && \n    !Orientation(m_polyNodes.Childs[(int)m_lowest.X]->Contour))\n  {\n    for (int i = 0; i < m_polyNodes.ChildCount(); ++i)\n    {\n      PolyNode& node = *m_polyNodes.Childs[i];\n      if (node.m_endtype == etClosedPolygon ||\n        (node.m_endtype == etClosedLine && Orientation(node.Contour)))\n          ReversePath(node.Contour);\n    }\n  } else\n  {\n    for (int i = 0; i < m_polyNodes.ChildCount(); ++i)\n    {\n      PolyNode& node = *m_polyNodes.Childs[i];\n      if (node.m_endtype == etClosedLine && !Orientation(node.Contour))\n        ReversePath(node.Contour);\n    }\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperOffset::Execute(Paths& solution, double delta)\n{\n  solution.clear();\n  FixOrientations();\n  DoOffset(delta);\n  \n  //now clean up 'corners' ...\n  Clipper clpr;\n  clpr.AddPaths(m_destPolys, ptSubject, true);\n  if (delta > 0)\n  {\n    clpr.Execute(ctUnion, solution, pftPositive, pftPositive);\n  }\n  else\n  {\n    IntRect r = clpr.GetBounds();\n    Path outer(4);\n    outer[0] = IntPoint(r.left - 10, r.bottom + 10);\n    outer[1] = IntPoint(r.right + 10, r.bottom + 10);\n    outer[2] = IntPoint(r.right + 10, r.top - 10);\n    outer[3] = IntPoint(r.left - 10, r.top - 10);\n\n    clpr.AddPath(outer, ptSubject, true);\n    clpr.ReverseSolution(true);\n    clpr.Execute(ctUnion, solution, pftNegative, pftNegative);\n    if (solution.size() > 0) solution.erase(solution.begin());\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperOffset::Execute(PolyTree& solution, double delta)\n{\n  solution.Clear();\n  FixOrientations();\n  DoOffset(delta);\n\n  //now clean up 'corners' ...\n  Clipper clpr;\n  clpr.AddPaths(m_destPolys, ptSubject, true);\n  if (delta > 0)\n  {\n    clpr.Execute(ctUnion, solution, pftPositive, pftPositive);\n  }\n  else\n  {\n    IntRect r = clpr.GetBounds();\n    Path outer(4);\n    outer[0] = IntPoint(r.left - 10, r.bottom + 10);\n    outer[1] = IntPoint(r.right + 10, r.bottom + 10);\n    outer[2] = IntPoint(r.right + 10, r.top - 10);\n    outer[3] = IntPoint(r.left - 10, r.top - 10);\n\n    clpr.AddPath(outer, ptSubject, true);\n    clpr.ReverseSolution(true);\n    clpr.Execute(ctUnion, solution, pftNegative, pftNegative);\n    //remove the outer PolyNode rectangle ...\n    if (solution.ChildCount() == 1 && solution.Childs[0]->ChildCount() > 0)\n    {\n      PolyNode* outerNode = solution.Childs[0];\n      solution.Childs.reserve(outerNode->ChildCount());\n      solution.Childs[0] = outerNode->Childs[0];\n      solution.Childs[0]->Parent = outerNode->Parent;\n      for (int i = 1; i < outerNode->ChildCount(); ++i)\n        solution.AddChild(*outerNode->Childs[i]);\n    }\n    else\n      solution.Clear();\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperOffset::DoOffset(double delta)\n{\n  m_destPolys.clear();\n  m_delta = delta;\n\n  //if Zero offset, just copy any CLOSED polygons to m_p and return ...\n  if (NEAR_ZERO(delta)) \n  {\n    m_destPolys.reserve(m_polyNodes.ChildCount());\n    for (int i = 0; i < m_polyNodes.ChildCount(); i++)\n    {\n      PolyNode& node = *m_polyNodes.Childs[i];\n      if (node.m_endtype == etClosedPolygon)\n        m_destPolys.push_back(node.Contour);\n    }\n    return;\n  }\n\n  //see offset_triginometry3.svg in the documentation folder ...\n  if (MiterLimit > 2) m_miterLim = 2/(MiterLimit * MiterLimit);\n  else m_miterLim = 0.5;\n\n  double y;\n  if (ArcTolerance <= 0.0) y = def_arc_tolerance;\n  else if (ArcTolerance > std::fabs(delta) * def_arc_tolerance) \n    y = std::fabs(delta) * def_arc_tolerance;\n  else y = ArcTolerance;\n  //see offset_triginometry2.svg in the documentation folder ...\n  double steps = pi / std::acos(1 - y / std::fabs(delta));\n  if (steps > std::fabs(delta) * pi) \n    steps = std::fabs(delta) * pi;  //ie excessive precision check\n  m_sin = std::sin(two_pi / steps);\n  m_cos = std::cos(two_pi / steps);\n  m_StepsPerRad = steps / two_pi;\n  if (delta < 0.0) m_sin = -m_sin;\n\n  m_destPolys.reserve(m_polyNodes.ChildCount() * 2);\n  for (int i = 0; i < m_polyNodes.ChildCount(); i++)\n  {\n    PolyNode& node = *m_polyNodes.Childs[i];\n    m_srcPoly = node.Contour;\n\n    int len = (int)m_srcPoly.size();\n    if (len == 0 || (delta <= 0 && (len < 3 || node.m_endtype != etClosedPolygon)))\n        continue;\n\n    m_destPoly.clear();\n    if (len == 1)\n    {\n      if (node.m_jointype == jtRound)\n      {\n        double X = 1.0, Y = 0.0;\n        for (cInt j = 1; j <= steps; j++)\n        {\n          m_destPoly.push_back(IntPoint(\n            Round(m_srcPoly[0].X + X * delta),\n            Round(m_srcPoly[0].Y + Y * delta)));\n          double X2 = X;\n          X = X * m_cos - m_sin * Y;\n          Y = X2 * m_sin + Y * m_cos;\n        }\n      }\n      else\n      {\n        double X = -1.0, Y = -1.0;\n        for (int j = 0; j < 4; ++j)\n        {\n          m_destPoly.push_back(IntPoint(\n            Round(m_srcPoly[0].X + X * delta),\n            Round(m_srcPoly[0].Y + Y * delta)));\n          if (X < 0) X = 1;\n          else if (Y < 0) Y = 1;\n          else X = -1;\n        }\n      }\n      m_destPolys.push_back(m_destPoly);\n      continue;\n    }\n    //build m_normals ...\n    m_normals.clear();\n    m_normals.reserve(len);\n    for (int j = 0; j < len - 1; ++j)\n      m_normals.push_back(GetUnitNormal(m_srcPoly[j], m_srcPoly[j + 1]));\n    if (node.m_endtype == etClosedLine || node.m_endtype == etClosedPolygon)\n      m_normals.push_back(GetUnitNormal(m_srcPoly[len - 1], m_srcPoly[0]));\n    else\n      m_normals.push_back(DoublePoint(m_normals[len - 2]));\n\n    if (node.m_endtype == etClosedPolygon)\n    {\n      int k = len - 1;\n      for (int j = 0; j < len; ++j)\n        OffsetPoint(j, k, node.m_jointype);\n      m_destPolys.push_back(m_destPoly);\n    }\n    else if (node.m_endtype == etClosedLine)\n    {\n      int k = len - 1;\n      for (int j = 0; j < len; ++j)\n        OffsetPoint(j, k, node.m_jointype);\n      m_destPolys.push_back(m_destPoly);\n      m_destPoly.clear();\n      //re-build m_normals ...\n      DoublePoint n = m_normals[len -1];\n      for (int j = len - 1; j > 0; j--)\n        m_normals[j] = DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y);\n      m_normals[0] = DoublePoint(-n.X, -n.Y);\n      k = 0;\n      for (int j = len - 1; j >= 0; j--)\n        OffsetPoint(j, k, node.m_jointype);\n      m_destPolys.push_back(m_destPoly);\n    }\n    else\n    {\n      int k = 0;\n      for (int j = 1; j < len - 1; ++j)\n        OffsetPoint(j, k, node.m_jointype);\n\n      IntPoint pt1;\n      if (node.m_endtype == etOpenButt)\n      {\n        int j = len - 1;\n        pt1 = IntPoint((cInt)Round(m_srcPoly[j].X + m_normals[j].X *\n          delta), (cInt)Round(m_srcPoly[j].Y + m_normals[j].Y * delta));\n        m_destPoly.push_back(pt1);\n        pt1 = IntPoint((cInt)Round(m_srcPoly[j].X - m_normals[j].X *\n          delta), (cInt)Round(m_srcPoly[j].Y - m_normals[j].Y * delta));\n        m_destPoly.push_back(pt1);\n      }\n      else\n      {\n        int j = len - 1;\n        k = len - 2;\n        m_sinA = 0;\n        m_normals[j] = DoublePoint(-m_normals[j].X, -m_normals[j].Y);\n        if (node.m_endtype == etOpenSquare)\n          DoSquare(j, k);\n        else\n          DoRound(j, k);\n      }\n\n      //re-build m_normals ...\n      for (int j = len - 1; j > 0; j--)\n        m_normals[j] = DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y);\n      m_normals[0] = DoublePoint(-m_normals[1].X, -m_normals[1].Y);\n\n      k = len - 1;\n      for (int j = k - 1; j > 0; --j) OffsetPoint(j, k, node.m_jointype);\n\n      if (node.m_endtype == etOpenButt)\n      {\n        pt1 = IntPoint((cInt)Round(m_srcPoly[0].X - m_normals[0].X * delta),\n          (cInt)Round(m_srcPoly[0].Y - m_normals[0].Y * delta));\n        m_destPoly.push_back(pt1);\n        pt1 = IntPoint((cInt)Round(m_srcPoly[0].X + m_normals[0].X * delta),\n          (cInt)Round(m_srcPoly[0].Y + m_normals[0].Y * delta));\n        m_destPoly.push_back(pt1);\n      }\n      else\n      {\n        k = 1;\n        m_sinA = 0;\n        if (node.m_endtype == etOpenSquare)\n          DoSquare(0, 1);\n        else\n          DoRound(0, 1);\n      }\n      m_destPolys.push_back(m_destPoly);\n    }\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperOffset::OffsetPoint(int j, int& k, JoinType jointype)\n{\n  //cross product ...\n  m_sinA = (m_normals[k].X * m_normals[j].Y - m_normals[j].X * m_normals[k].Y);\n  if (std::fabs(m_sinA * m_delta) < 1.0) \n  {\n    //dot product ...\n    double cosA = (m_normals[k].X * m_normals[j].X + m_normals[j].Y * m_normals[k].Y ); \n    if (cosA > 0) // angle => 0 degrees\n    {\n      m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta),\n        Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta)));\n      return; \n    }\n    //else angle => 180 degrees   \n  }\n  else if (m_sinA > 1.0) m_sinA = 1.0;\n  else if (m_sinA < -1.0) m_sinA = -1.0;\n\n  if (m_sinA * m_delta < 0)\n  {\n    m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta),\n      Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta)));\n    m_destPoly.push_back(m_srcPoly[j]);\n    m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + m_normals[j].X * m_delta),\n      Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta)));\n  }\n  else\n    switch (jointype)\n    {\n      case jtMiter:\n        {\n          double r = 1 + (m_normals[j].X * m_normals[k].X +\n            m_normals[j].Y * m_normals[k].Y);\n          if (r >= m_miterLim) DoMiter(j, k, r); else DoSquare(j, k);\n          break;\n        }\n      case jtSquare: DoSquare(j, k); break;\n      case jtRound: DoRound(j, k); break;\n    }\n  k = j;\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperOffset::DoSquare(int j, int k)\n{\n  double dx = std::tan(std::atan2(m_sinA,\n      m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y) / 4);\n  m_destPoly.push_back(IntPoint(\n      Round(m_srcPoly[j].X + m_delta * (m_normals[k].X - m_normals[k].Y * dx)),\n      Round(m_srcPoly[j].Y + m_delta * (m_normals[k].Y + m_normals[k].X * dx))));\n  m_destPoly.push_back(IntPoint(\n      Round(m_srcPoly[j].X + m_delta * (m_normals[j].X + m_normals[j].Y * dx)),\n      Round(m_srcPoly[j].Y + m_delta * (m_normals[j].Y - m_normals[j].X * dx))));\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperOffset::DoMiter(int j, int k, double r)\n{\n  double q = m_delta / r;\n  m_destPoly.push_back(IntPoint(Round(m_srcPoly[j].X + (m_normals[k].X + m_normals[j].X) * q),\n      Round(m_srcPoly[j].Y + (m_normals[k].Y + m_normals[j].Y) * q)));\n}\n//------------------------------------------------------------------------------\n\nvoid ClipperOffset::DoRound(int j, int k)\n{\n  double a = std::atan2(m_sinA,\n  m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y);\n  int steps = std::max((int)Round(m_StepsPerRad * std::fabs(a)), 1);\n\n  double X = m_normals[k].X, Y = m_normals[k].Y, X2;\n  for (int i = 0; i < steps; ++i)\n  {\n    m_destPoly.push_back(IntPoint(\n        Round(m_srcPoly[j].X + X * m_delta),\n        Round(m_srcPoly[j].Y + Y * m_delta)));\n    X2 = X;\n    X = X * m_cos - m_sin * Y;\n    Y = X2 * m_sin + Y * m_cos;\n  }\n  m_destPoly.push_back(IntPoint(\n  Round(m_srcPoly[j].X + m_normals[j].X * m_delta),\n  Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta)));\n}\n\n//------------------------------------------------------------------------------\n// Miscellaneous public functions\n//------------------------------------------------------------------------------\n\nvoid Clipper::DoSimplePolygons()\n{\n  PolyOutList::size_type i = 0;\n  while (i < m_PolyOuts.size()) \n  {\n    OutRec* outrec = m_PolyOuts[i++];\n    OutPt* op = outrec->Pts;\n    if (!op || outrec->IsOpen) continue;\n    do //for each Pt in Polygon until duplicate found do ...\n    {\n      OutPt* op2 = op->Next;\n      while (op2 != outrec->Pts) \n      {\n        if ((op->Pt == op2->Pt) && op2->Next != op && op2->Prev != op) \n        {\n          //split the polygon into two ...\n          OutPt* op3 = op->Prev;\n          OutPt* op4 = op2->Prev;\n          op->Prev = op4;\n          op4->Next = op;\n          op2->Prev = op3;\n          op3->Next = op2;\n\n          outrec->Pts = op;\n          OutRec* outrec2 = CreateOutRec();\n          outrec2->Pts = op2;\n          UpdateOutPtIdxs(*outrec2);\n          if (Poly2ContainsPoly1(outrec2->Pts, outrec->Pts))\n          {\n            //OutRec2 is contained by OutRec1 ...\n            outrec2->IsHole = !outrec->IsHole;\n            outrec2->FirstLeft = outrec;\n            if (m_UsingPolyTree) FixupFirstLefts2(outrec2, outrec);\n          }\n          else\n            if (Poly2ContainsPoly1(outrec->Pts, outrec2->Pts))\n          {\n            //OutRec1 is contained by OutRec2 ...\n            outrec2->IsHole = outrec->IsHole;\n            outrec->IsHole = !outrec2->IsHole;\n            outrec2->FirstLeft = outrec->FirstLeft;\n            outrec->FirstLeft = outrec2;\n            if (m_UsingPolyTree) FixupFirstLefts2(outrec, outrec2);\n            }\n            else\n          {\n            //the 2 polygons are separate ...\n            outrec2->IsHole = outrec->IsHole;\n            outrec2->FirstLeft = outrec->FirstLeft;\n            if (m_UsingPolyTree) FixupFirstLefts1(outrec, outrec2);\n            }\n          op2 = op; //ie get ready for the Next iteration\n        }\n        op2 = op2->Next;\n      }\n      op = op->Next;\n    }\n    while (op != outrec->Pts);\n  }\n}\n//------------------------------------------------------------------------------\n\nvoid ReversePath(Path& p)\n{\n  std::reverse(p.begin(), p.end());\n}\n//------------------------------------------------------------------------------\n\nvoid ReversePaths(Paths& p)\n{\n  for (Paths::size_type i = 0; i < p.size(); ++i)\n    ReversePath(p[i]);\n}\n//------------------------------------------------------------------------------\n\nvoid SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType)\n{\n  Clipper c;\n  c.StrictlySimple(true);\n  c.AddPath(in_poly, ptSubject, true);\n  c.Execute(ctUnion, out_polys, fillType, fillType);\n}\n//------------------------------------------------------------------------------\n\nvoid SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType)\n{\n  Clipper c;\n  c.StrictlySimple(true);\n  c.AddPaths(in_polys, ptSubject, true);\n  c.Execute(ctUnion, out_polys, fillType, fillType);\n}\n//------------------------------------------------------------------------------\n\nvoid SimplifyPolygons(Paths &polys, PolyFillType fillType)\n{\n  SimplifyPolygons(polys, polys, fillType);\n}\n//------------------------------------------------------------------------------\n\ninline double DistanceSqrd(const IntPoint& pt1, const IntPoint& pt2)\n{\n  double Dx = ((double)pt1.X - pt2.X);\n  double dy = ((double)pt1.Y - pt2.Y);\n  return (Dx*Dx + dy*dy);\n}\n//------------------------------------------------------------------------------\n\ndouble DistanceFromLineSqrd(\n  const IntPoint& pt, const IntPoint& ln1, const IntPoint& ln2)\n{\n  //The equation of a line in general form (Ax + By + C = 0)\n  //given 2 points (x,y) & (x,y) is ...\n  //(y - y)x + (x - x)y + (y - y)x - (x - x)y = 0\n  //A = (y - y); B = (x - x); C = (y - y)x - (x - x)y\n  //perpendicular distance of point (x,y) = (Ax + By + C)/Sqrt(A + B)\n  //see http://en.wikipedia.org/wiki/Perpendicular_distance\n  double A = double(ln1.Y - ln2.Y);\n  double B = double(ln2.X - ln1.X);\n  double C = A * ln1.X  + B * ln1.Y;\n  C = A * pt.X + B * pt.Y - C;\n  return (C * C) / (A * A + B * B);\n}\n//---------------------------------------------------------------------------\n\nbool SlopesNearCollinear(const IntPoint& pt1, \n    const IntPoint& pt2, const IntPoint& pt3, double distSqrd)\n{\n  //this function is more accurate when the point that's geometrically\n  //between the other 2 points is the one that's tested for distance.\n  //ie makes it more likely to pick up 'spikes' ...\n\tif (Abs(pt1.X - pt2.X) > Abs(pt1.Y - pt2.Y))\n\t{\n    if ((pt1.X > pt2.X) == (pt1.X < pt3.X))\n      return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd;\n    else if ((pt2.X > pt1.X) == (pt2.X < pt3.X))\n      return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd;\n\t\telse\n\t    return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd;\n\t}\n\telse\n\t{\n    if ((pt1.Y > pt2.Y) == (pt1.Y < pt3.Y))\n      return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd;\n    else if ((pt2.Y > pt1.Y) == (pt2.Y < pt3.Y))\n      return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd;\n\t\telse\n      return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd;\n\t}\n}\n//------------------------------------------------------------------------------\n\nbool PointsAreClose(IntPoint pt1, IntPoint pt2, double distSqrd)\n{\n    double Dx = (double)pt1.X - pt2.X;\n    double dy = (double)pt1.Y - pt2.Y;\n    return ((Dx * Dx) + (dy * dy) <= distSqrd);\n}\n//------------------------------------------------------------------------------\n\nOutPt* ExcludeOp(OutPt* op)\n{\n  OutPt* result = op->Prev;\n  result->Next = op->Next;\n  op->Next->Prev = result;\n  result->Idx = 0;\n  return result;\n}\n//------------------------------------------------------------------------------\n\nvoid CleanPolygon(const Path& in_poly, Path& out_poly, double distance)\n{\n  //distance = proximity in units/pixels below which vertices\n  //will be stripped. Default ~= sqrt(2).\n  \n  size_t size = in_poly.size();\n  \n  if (size == 0) \n  {\n    out_poly.clear();\n    return;\n  }\n\n  OutPt* outPts = new OutPt[size];\n  for (size_t i = 0; i < size; ++i)\n  {\n    outPts[i].Pt = in_poly[i];\n    outPts[i].Next = &outPts[(i + 1) % size];\n    outPts[i].Next->Prev = &outPts[i];\n    outPts[i].Idx = 0;\n  }\n\n  double distSqrd = distance * distance;\n  OutPt* op = &outPts[0];\n  while (op->Idx == 0 && op->Next != op->Prev) \n  {\n    if (PointsAreClose(op->Pt, op->Prev->Pt, distSqrd))\n    {\n      op = ExcludeOp(op);\n      size--;\n    } \n    else if (PointsAreClose(op->Prev->Pt, op->Next->Pt, distSqrd))\n    {\n      ExcludeOp(op->Next);\n      op = ExcludeOp(op);\n      size -= 2;\n    }\n    else if (SlopesNearCollinear(op->Prev->Pt, op->Pt, op->Next->Pt, distSqrd))\n    {\n      op = ExcludeOp(op);\n      size--;\n    }\n    else\n    {\n      op->Idx = 1;\n      op = op->Next;\n    }\n  }\n\n  if (size < 3) size = 0;\n  out_poly.resize(size);\n  for (size_t i = 0; i < size; ++i)\n  {\n    out_poly[i] = op->Pt;\n    op = op->Next;\n  }\n  delete [] outPts;\n}\n//------------------------------------------------------------------------------\n\nvoid CleanPolygon(Path& poly, double distance)\n{\n  CleanPolygon(poly, poly, distance);\n}\n//------------------------------------------------------------------------------\n\nvoid CleanPolygons(const Paths& in_polys, Paths& out_polys, double distance)\n{\n  for (Paths::size_type i = 0; i < in_polys.size(); ++i)\n    CleanPolygon(in_polys[i], out_polys[i], distance);\n}\n//------------------------------------------------------------------------------\n\nvoid CleanPolygons(Paths& polys, double distance)\n{\n  CleanPolygons(polys, polys, distance);\n}\n//------------------------------------------------------------------------------\n\nvoid Minkowski(const Path& poly, const Path& path, \n  Paths& solution, bool isSum, bool isClosed)\n{\n  int delta = (isClosed ? 1 : 0);\n  size_t polyCnt = poly.size();\n  size_t pathCnt = path.size();\n  Paths pp;\n  pp.reserve(pathCnt);\n  if (isSum)\n    for (size_t i = 0; i < pathCnt; ++i)\n    {\n      Path p;\n      p.reserve(polyCnt);\n      for (size_t j = 0; j < poly.size(); ++j)\n        p.push_back(IntPoint(path[i].X + poly[j].X, path[i].Y + poly[j].Y));\n      pp.push_back(p);\n    }\n  else\n    for (size_t i = 0; i < pathCnt; ++i)\n    {\n      Path p;\n      p.reserve(polyCnt);\n      for (size_t j = 0; j < poly.size(); ++j)\n        p.push_back(IntPoint(path[i].X - poly[j].X, path[i].Y - poly[j].Y));\n      pp.push_back(p);\n    }\n\n  solution.clear();\n  solution.reserve((pathCnt + delta) * (polyCnt + 1));\n  for (size_t i = 0; i < pathCnt - 1 + delta; ++i)\n    for (size_t j = 0; j < polyCnt; ++j)\n    {\n      Path quad;\n      quad.reserve(4);\n      quad.push_back(pp[i % pathCnt][j % polyCnt]);\n      quad.push_back(pp[(i + 1) % pathCnt][j % polyCnt]);\n      quad.push_back(pp[(i + 1) % pathCnt][(j + 1) % polyCnt]);\n      quad.push_back(pp[i % pathCnt][(j + 1) % polyCnt]);\n      if (!Orientation(quad)) ReversePath(quad);\n      solution.push_back(quad);\n    }\n}\n//------------------------------------------------------------------------------\n\nvoid MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed)\n{\n  Minkowski(pattern, path, solution, true, pathIsClosed);\n  Clipper c;\n  c.AddPaths(solution, ptSubject, true);\n  c.Execute(ctUnion, solution, pftNonZero, pftNonZero);\n}\n//------------------------------------------------------------------------------\n\nvoid TranslatePath(const Path& input, Path& output, IntPoint delta) \n{\n  //precondition: input != output\n  output.resize(input.size());\n  for (size_t i = 0; i < input.size(); ++i)\n    output[i] = IntPoint(input[i].X + delta.X, input[i].Y + delta.Y);\n}\n//------------------------------------------------------------------------------\n\nvoid MinkowskiSum(const Path& pattern, const Paths& paths, Paths& solution, bool pathIsClosed)\n{\n  Clipper c;\n  for (size_t i = 0; i < paths.size(); ++i)\n  {\n    Paths tmp;\n    Minkowski(pattern, paths[i], tmp, true, pathIsClosed);\n    c.AddPaths(tmp, ptSubject, true);\n    if (pathIsClosed)\n    {\n      Path tmp2;\n      TranslatePath(paths[i], tmp2, pattern[0]);\n      c.AddPath(tmp2, ptClip, true);\n    }\n  }\n    c.Execute(ctUnion, solution, pftNonZero, pftNonZero);\n}\n//------------------------------------------------------------------------------\n\nvoid MinkowskiDiff(const Path& poly1, const Path& poly2, Paths& solution)\n{\n  Minkowski(poly1, poly2, solution, false, true);\n  Clipper c;\n  c.AddPaths(solution, ptSubject, true);\n  c.Execute(ctUnion, solution, pftNonZero, pftNonZero);\n}\n//------------------------------------------------------------------------------\n\nenum NodeType {ntAny, ntOpen, ntClosed};\n\nvoid AddPolyNodeToPaths(const PolyNode& polynode, NodeType nodetype, Paths& paths)\n{\n  bool match = true;\n  if (nodetype == ntClosed) match = !polynode.IsOpen();\n  else if (nodetype == ntOpen) return;\n\n  if (!polynode.Contour.empty() && match)\n    paths.push_back(polynode.Contour);\n  for (int i = 0; i < polynode.ChildCount(); ++i)\n    AddPolyNodeToPaths(*polynode.Childs[i], nodetype, paths);\n}\n//------------------------------------------------------------------------------\n\nvoid PolyTreeToPaths(const PolyTree& polytree, Paths& paths)\n{\n  paths.resize(0); \n  paths.reserve(polytree.Total());\n  AddPolyNodeToPaths(polytree, ntAny, paths);\n}\n//------------------------------------------------------------------------------\n\nvoid ClosedPathsFromPolyTree(const PolyTree& polytree, Paths& paths)\n{\n  paths.resize(0); \n  paths.reserve(polytree.Total());\n  AddPolyNodeToPaths(polytree, ntClosed, paths);\n}\n//------------------------------------------------------------------------------\n\nvoid OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths)\n{\n  paths.resize(0); \n  paths.reserve(polytree.Total());\n  //Open paths are top level only, so ...\n  for (int i = 0; i < polytree.ChildCount(); ++i)\n    if (polytree.Childs[i]->IsOpen())\n      paths.push_back(polytree.Childs[i]->Contour);\n}\n//------------------------------------------------------------------------------\n\nstd::ostream& operator <<(std::ostream &s, const IntPoint &p)\n{\n  s << \"(\" << p.X << \",\" << p.Y << \")\";\n  return s;\n}\n//------------------------------------------------------------------------------\n\nstd::ostream& operator <<(std::ostream &s, const Path &p)\n{\n  if (p.empty()) return s;\n  Path::size_type last = p.size() -1;\n  for (Path::size_type i = 0; i < last; i++)\n    s << \"(\" << p[i].X << \",\" << p[i].Y << \"), \";\n  s << \"(\" << p[last].X << \",\" << p[last].Y << \")\\n\";\n  return s;\n}\n//------------------------------------------------------------------------------\n\nstd::ostream& operator <<(std::ostream &s, const Paths &p)\n{\n  for (Paths::size_type i = 0; i < p.size(); i++)\n    s << p[i];\n  s << \"\\n\";\n  return s;\n}\n//------------------------------------------------------------------------------\n\n} //ClipperLib namespace\n"
  },
  {
    "path": "libs/clipper/clipper.hpp",
    "content": "/*******************************************************************************\n*                                                                              *\n* Author    :  Angus Johnson                                                   *\n* Version   :  6.2.1                                                           *\n* Date      :  31 October 2014                                                 *\n* Website   :  http://www.angusj.com                                           *\n* Copyright :  Angus Johnson 2010-2014                                         *\n*                                                                              *\n* License:                                                                     *\n* Use, modification & distribution is subject to Boost Software License Ver 1. *\n* http://www.boost.org/LICENSE_1_0.txt                                         *\n*                                                                              *\n* Attributions:                                                                *\n* The code in this library is an extension of Bala Vatti's clipping algorithm: *\n* \"A generic solution to polygon clipping\"                                     *\n* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63.             *\n* http://portal.acm.org/citation.cfm?id=129906                                 *\n*                                                                              *\n* Computer graphics and geometric modeling: implementation and algorithms      *\n* By Max K. Agoston                                                            *\n* Springer; 1 edition (January 4, 2005)                                        *\n* http://books.google.com/books?q=vatti+clipping+agoston                       *\n*                                                                              *\n* See also:                                                                    *\n* \"Polygon Offsetting by Computing Winding Numbers\"                            *\n* Paper no. DETC2005-85513 pp. 565-575                                         *\n* ASME 2005 International Design Engineering Technical Conferences             *\n* and Computers and Information in Engineering Conference (IDETC/CIE2005)      *\n* September 24-28, 2005 , Long Beach, California, USA                          *\n* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf              *\n*                                                                              *\n*******************************************************************************/\n\n#ifndef clipper_hpp\n#define clipper_hpp\n\n#define CLIPPER_VERSION \"6.2.1\"\n\n//use_int32: When enabled 32bit ints are used instead of 64bit ints. This\n//improve performance but coordinate values are limited to the range +/- 46340\n//#define use_int32\n\n//use_xyz: adds a Z member to IntPoint. Adds a minor cost to perfomance.\n#define use_xyz\n\n//use_lines: Enables line clipping. Adds a very minor cost to performance.\n#define use_lines\n\n//use_deprecated: Enables temporary support for the obsolete functions\n//#define use_deprecated\n\n#include <vector>\n#include <set>\n#include <stdexcept>\n#include <cstdint>\n#include <cstring>\n#include <cstdlib>\n#include <ostream>\n#include <functional>\n#include <queue>\n\nnamespace ClipperLib {\n\nenum ClipType { ctIntersection, ctUnion, ctDifference, ctXor };\nenum PolyType { ptSubject, ptClip };\n//By far the most widely used winding rules for polygon filling are\n//EvenOdd & NonZero (GDI, GDI+, XLib, OpenGL, Cairo, AGG, Quartz, SVG, Gr32)\n//Others rules include Positive, Negative and ABS_GTR_EQ_TWO (only in OpenGL)\n//see http://glprogramming.com/red/chapter11.html\nenum PolyFillType { pftEvenOdd, pftNonZero, pftPositive, pftNegative };\n\nstruct ZLabel {\n\tZLabel () : id(0), t(0) {}\n\tZLabel (int32_t ii) : id(ii), t(0) {}\n\tZLabel (int32_t ii, double tt) : id(ii), t(tt) {}\n\tbool operator == (const ZLabel &l) const {return id == l.id;}\n\tint32_t id;\n\tdouble t;\n};\n\ninline std::ostream& operator << (std::ostream &os, const ZLabel &l) {\n\treturn os << l.id << ':' << l.t;\n}\n\nstruct ZType {\n\tZType (uint64_t v) : label1(v >> 32), label2(v & 0xffffffff) {}\n\tZType (int32_t id1, int32_t id2) : label1(id1), label2(id2) {}\n\tZType (const ZLabel &l1, const ZLabel &l2) : label1(l1), label2(l2) {}\n\tconst ZLabel& minLabel () const {return (label1.id < label2.id) ? label1 : label2;}\n\tconst ZLabel& maxLabel () const {return (label1.id > label2.id) ? label1 : label2;}\n\n\tconst ZLabel& otherLabel (const ZLabel &l) const {\n\t\treturn (l.id == label1.id && l.t == label1.t) ? label2 : label1;\n\t}\n\n\tbool operator == (const ZType &p) const {return minLabel() == p.minLabel() && maxLabel() == p.maxLabel();}\n\toperator uint64_t () const {return (uint64_t(label1.id) << 32) & label2.id;}\n\tZLabel label1, label2;\n};\n\ninline std::ostream& operator << (std::ostream &os, const ZType &z) {\n\treturn os << '[' << z.label1 << '|' << z.label2 << ']';\n}\n\n#ifdef use_int32\n  typedef int cInt;\n  static cInt const loRange = 0x7FFF;\n  static cInt const hiRange = 0x7FFF;\n#else\n  typedef signed long long cInt;\n  static cInt const loRange = 0x3FFFFFFF;\n  static cInt const hiRange = 0x3FFFFFFFFFFFFFFFLL;\n  typedef signed long long long64;     //used by Int128 class\n  typedef unsigned long long ulong64;\n\n#endif\n\nstruct IntPoint {\n  cInt X;\n  cInt Y;\n#ifdef use_xyz\n  ZType Z;\n  IntPoint(cInt x = 0, cInt y = 0, ZType z = 0): X(x), Y(y), Z(z) {};\n#else\n  IntPoint(cInt x = 0, cInt y = 0): X(x), Y(y) {};\n#endif\n\n  friend inline bool operator== (const IntPoint& a, const IntPoint& b)\n  {\n    return a.X == b.X && a.Y == b.Y;\n  }\n  friend inline bool operator!= (const IntPoint& a, const IntPoint& b)\n  {\n    return a.X != b.X  || a.Y != b.Y;\n  }\n};\n//------------------------------------------------------------------------------\n\ntypedef std::vector< IntPoint > Path;\ntypedef std::vector< Path > Paths;\n\ninline Path& operator <<(Path& poly, const IntPoint& p) {poly.push_back(p); return poly;}\ninline Paths& operator <<(Paths& polys, const Path& p) {polys.push_back(p); return polys;}\n\nstd::ostream& operator <<(std::ostream &s, const IntPoint &p);\nstd::ostream& operator <<(std::ostream &s, const Path &p);\nstd::ostream& operator <<(std::ostream &s, const Paths &p);\n\nstruct DoublePoint\n{\n  double X;\n  double Y;\n  DoublePoint(double x = 0, double y = 0) : X(x), Y(y) {}\n  DoublePoint(IntPoint ip) : X((double)ip.X), Y((double)ip.Y) {}\n};\n//------------------------------------------------------------------------------\n\n#ifdef use_xyz\ntypedef void (*ZFillCallback)(IntPoint& e1bot, IntPoint& e1top, IntPoint& e2bot, IntPoint& e2top, IntPoint& pt);\n#endif\n\nenum InitOptions {ioReverseSolution = 1, ioStrictlySimple = 2, ioPreserveCollinear = 4};\nenum JoinType {jtSquare, jtRound, jtMiter};\nenum EndType {etClosedPolygon, etClosedLine, etOpenButt, etOpenSquare, etOpenRound};\n\nclass PolyNode;\ntypedef std::vector< PolyNode* > PolyNodes;\n\nclass PolyNode\n{\npublic:\n    PolyNode();\n    virtual ~PolyNode(){};\n    Path Contour;\n    PolyNodes Childs;\n    PolyNode* Parent;\n    PolyNode* GetNext() const;\n    bool IsHole() const;\n    bool IsOpen() const;\n    int ChildCount() const;\nprivate:\n    unsigned Index; //node index in Parent.Childs\n    bool m_IsOpen;\n    JoinType m_jointype;\n    EndType m_endtype;\n    PolyNode* GetNextSiblingUp() const;\n    void AddChild(PolyNode& child);\n    friend class Clipper; //to access Index\n    friend class ClipperOffset;\n};\n\nclass PolyTree: public PolyNode\n{\npublic:\n    ~PolyTree(){Clear();};\n    PolyNode* GetFirst() const;\n    void Clear();\n    int Total() const;\nprivate:\n    PolyNodes AllNodes;\n    friend class Clipper; //to access AllNodes\n};\n\nbool Orientation(const Path &poly);\ndouble Area(const Path &poly);\nint PointInPolygon(const IntPoint &pt, const Path &path);\n\nvoid SimplifyPolygon(const Path &in_poly, Paths &out_polys, PolyFillType fillType = pftEvenOdd);\nvoid SimplifyPolygons(const Paths &in_polys, Paths &out_polys, PolyFillType fillType = pftEvenOdd);\nvoid SimplifyPolygons(Paths &polys, PolyFillType fillType = pftEvenOdd);\n\nvoid CleanPolygon(const Path& in_poly, Path& out_poly, double distance = 1.415);\nvoid CleanPolygon(Path& poly, double distance = 1.415);\nvoid CleanPolygons(const Paths& in_polys, Paths& out_polys, double distance = 1.415);\nvoid CleanPolygons(Paths& polys, double distance = 1.415);\n\nvoid MinkowskiSum(const Path& pattern, const Path& path, Paths& solution, bool pathIsClosed);\nvoid MinkowskiSum(const Path& pattern, const Paths& paths, Paths& solution, bool pathIsClosed);\nvoid MinkowskiDiff(const Path& poly1, const Path& poly2, Paths& solution);\n\nvoid PolyTreeToPaths(const PolyTree& polytree, Paths& paths);\nvoid ClosedPathsFromPolyTree(const PolyTree& polytree, Paths& paths);\nvoid OpenPathsFromPolyTree(PolyTree& polytree, Paths& paths);\n\nvoid ReversePath(Path& p);\nvoid ReversePaths(Paths& p);\n\nstruct IntRect { cInt left; cInt top; cInt right; cInt bottom; };\n\n//enums that are used internally ...\nenum EdgeSide { esLeft = 1, esRight = 2};\n\n//forward declarations (for stuff used internally) ...\nstruct TEdge;\nstruct IntersectNode;\nstruct LocalMinimum;\nstruct Scanbeam;\nstruct OutPt;\nstruct OutRec;\nstruct Join;\n\ntypedef std::vector < OutRec* > PolyOutList;\ntypedef std::vector < TEdge* > EdgeList;\ntypedef std::vector < Join* > JoinList;\ntypedef std::vector < IntersectNode* > IntersectList;\n\n//------------------------------------------------------------------------------\n\n//ClipperBase is the ancestor to the Clipper class. It should not be\n//instantiated directly. This class simply abstracts the conversion of sets of\n//polygon coordinates into edge objects that are stored in a LocalMinima list.\nclass ClipperBase\n{\npublic:\n  ClipperBase();\n  virtual ~ClipperBase();\n  bool AddPath(const Path &pg, PolyType PolyTyp, bool Closed);\n  bool AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed);\n  virtual void Clear();\n  IntRect GetBounds();\n  bool PreserveCollinear() {return m_PreserveCollinear;};\n  void PreserveCollinear(bool value) {m_PreserveCollinear = value;};\nprotected:\n  void DisposeLocalMinimaList();\n  TEdge* AddBoundsToLML(TEdge *e, bool IsClosed);\n  void PopLocalMinima();\n  virtual void Reset();\n  TEdge* ProcessBound(TEdge* E, bool IsClockwise);\n  void DoMinimaLML(TEdge* E1, TEdge* E2, bool IsClosed);\n  TEdge* DescendToMin(TEdge *&E);\n  void AscendToMax(TEdge *&E, bool Appending, bool IsClosed);\n\n  typedef std::vector<LocalMinimum> MinimaList;\n  MinimaList::iterator m_CurrentLM;\n  MinimaList           m_MinimaList;\n\n  bool              m_UseFullRange;\n  EdgeList          m_edges;\n  bool             m_PreserveCollinear;\n  bool             m_HasOpenPaths;\n};\n//------------------------------------------------------------------------------\n\nclass Clipper : public virtual ClipperBase\n{\npublic:\n  Clipper(int initOptions = 0);\n  ~Clipper();\n  bool Execute(ClipType clipType,\n    Paths &solution,\n    PolyFillType subjFillType = pftEvenOdd,\n    PolyFillType clipFillType = pftEvenOdd);\n  bool Execute(ClipType clipType,\n    PolyTree &polytree,\n    PolyFillType subjFillType = pftEvenOdd,\n    PolyFillType clipFillType = pftEvenOdd);\n  bool ReverseSolution() {return m_ReverseOutput;};\n  void ReverseSolution(bool value) {m_ReverseOutput = value;};\n  bool StrictlySimple() {return m_StrictSimple;};\n  void StrictlySimple(bool value) {m_StrictSimple = value;};\n  //set the callback function for z value filling on intersections (otherwise Z is 0)\n#ifdef use_xyz\n  void ZFillFunction(ZFillCallback zFillFunc);\n#endif\nprotected:\n  void Reset() override;\n  virtual bool ExecuteInternal();\nprivate:\n  PolyOutList       m_PolyOuts;\n  JoinList          m_Joins;\n  JoinList          m_GhostJoins;\n  IntersectList     m_IntersectList;\n  ClipType          m_ClipType;\n  typedef std::priority_queue<cInt> ScanbeamList;\n  ScanbeamList      m_Scanbeam;\n  TEdge           *m_ActiveEdges;\n  TEdge           *m_SortedEdges;\n  bool             m_ExecuteLocked;\n  PolyFillType     m_ClipFillType;\n  PolyFillType     m_SubjFillType;\n  bool             m_ReverseOutput;\n  bool             m_UsingPolyTree;\n  bool             m_StrictSimple;\n#ifdef use_xyz\n  ZFillCallback   m_ZFill; //custom callback\n#endif\n  void SetWindingCount(TEdge& edge);\n  bool IsEvenOddFillType(const TEdge& edge) const;\n  bool IsEvenOddAltFillType(const TEdge& edge) const;\n  void InsertScanbeam(const cInt Y);\n  cInt PopScanbeam();\n  void InsertLocalMinimaIntoAEL(const cInt botY);\n  void InsertEdgeIntoAEL(TEdge *edge, TEdge* startEdge);\n  void AddEdgeToSEL(TEdge *edge);\n  void CopyAELToSEL();\n  void DeleteFromSEL(TEdge *e);\n  void DeleteFromAEL(TEdge *e);\n  void UpdateEdgeIntoAEL(TEdge *&e);\n  void SwapPositionsInSEL(TEdge *edge1, TEdge *edge2);\n  bool IsContributing(const TEdge& edge) const;\n  bool IsTopHorz(const cInt XPos);\n  void SwapPositionsInAEL(TEdge *edge1, TEdge *edge2);\n  void DoMaxima(TEdge *e);\n  void ProcessHorizontals(bool IsTopOfScanbeam);\n  void ProcessHorizontal(TEdge *horzEdge, bool isTopOfScanbeam);\n  void AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);\n  OutPt* AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt);\n  OutRec* GetOutRec(int idx);\n  void AppendPolygon(TEdge *e1, TEdge *e2);\n  void IntersectEdges(TEdge *e1, TEdge *e2, IntPoint &pt);\n  OutRec* CreateOutRec();\n  OutPt* AddOutPt(TEdge *e, const IntPoint &pt);\n  void DisposeAllOutRecs();\n  void DisposeOutRec(PolyOutList::size_type index);\n  bool ProcessIntersections(const cInt topY);\n  void BuildIntersectList(const cInt topY);\n  void ProcessIntersectList();\n  void ProcessEdgesAtTopOfScanbeam(const cInt topY);\n  void BuildResult(Paths& polys);\n  void BuildResult2(PolyTree& polytree);\n  void SetHoleState(TEdge *e, OutRec *outrec);\n  void DisposeIntersectNodes();\n  bool FixupIntersectionOrder();\n  void FixupOutPolygon(OutRec &outrec);\n  bool IsHole(TEdge *e);\n  bool FindOwnerFromSplitRecs(OutRec &outRec, OutRec *&currOrfl);\n  void FixHoleLinkage(OutRec &outrec);\n  void AddJoin(OutPt *op1, OutPt *op2, const IntPoint offPt);\n  void ClearJoins();\n  void ClearGhostJoins();\n  void AddGhostJoin(OutPt *op, const IntPoint offPt);\n  bool JoinPoints(Join *j, OutRec* outRec1, OutRec* outRec2);\n  void JoinCommonEdges();\n  void DoSimplePolygons();\n  void FixupFirstLefts1(OutRec* OldOutRec, OutRec* NewOutRec);\n  void FixupFirstLefts2(OutRec* OldOutRec, OutRec* NewOutRec);\n#ifdef use_xyz\n  void SetZ(IntPoint& pt, TEdge& e1, TEdge& e2);\n#endif\n};\n//------------------------------------------------------------------------------\n\nclass ClipperOffset\n{\npublic:\n  ClipperOffset(double miterLimit = 2.0, double roundPrecision = 0.25);\n  ~ClipperOffset();\n  void AddPath(const Path& path, JoinType joinType, EndType endType);\n  void AddPaths(const Paths& paths, JoinType joinType, EndType endType);\n  void Execute(Paths& solution, double delta);\n  void Execute(PolyTree& solution, double delta);\n  void Clear();\n  double MiterLimit;\n  double ArcTolerance;\nprivate:\n  Paths m_destPolys;\n  Path m_srcPoly;\n  Path m_destPoly;\n  std::vector<DoublePoint> m_normals;\n  double m_delta, m_sinA, m_sin, m_cos;\n  double m_miterLim, m_StepsPerRad;\n  IntPoint m_lowest;\n  PolyNode m_polyNodes;\n\n  void FixOrientations();\n  void DoOffset(double delta);\n  void OffsetPoint(int j, int& k, JoinType jointype);\n  void DoSquare(int j, int k);\n  void DoMiter(int j, int k, double r);\n  void DoRound(int j, int k);\n};\n//------------------------------------------------------------------------------\n\nclass clipperException : public std::exception\n{\n  public:\n    clipperException(const char* description): m_descr(description) {}\n    virtual ~clipperException() throw() {}\n    virtual const char* what() const throw() override {return m_descr.c_str();}\n  private:\n    std::string m_descr;\n};\n//------------------------------------------------------------------------------\n\n} //ClipperLib namespace\n\n#endif //clipper_hpp\n\n\n"
  },
  {
    "path": "libs/defs.am",
    "content": "## This file is part of dvisvgm\n## Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>\n\nif !HAVE_BROTLI\nBROTLI_CFLAGS += -I$(dvisvgm_srcdir)/libs/brotli/include\nBROTLI_LIBS += ../libs/brotli/libbrotli.a\nendif\n\nif TEXLIVE_BUILD\nPOTRACE_CFLAGS = $(POTRACE_INCLUDES)\nelse\nif !HAVE_POTRACE\nPOTRACE_CFLAGS = -I$(dvisvgm_srcdir)/libs/potrace\nPOTRACE_LIBS = ../libs/potrace/libpotrace.a\nendif !HAVE_POTRACE\nendif !TEXLIVE_BUILD\n\nif !HAVE_WOFF2\nWOFF2_CFLAGS += -I$(dvisvgm_srcdir)/libs/woff2/include\nWOFF2_LIBS += ../libs/woff2/libwoff2.a\nendif\n\nif !HAVE_XXHASH\nXXHASH_CFLAGS = -I$(dvisvgm_srcdir)/libs/xxHash\nXXHASH_LIBS = ../libs/xxHash/libxxhash.a\nendif\n"
  },
  {
    "path": "libs/md5/Makefile.am",
    "content": "noinst_LIBRARIES = libmd5.a\n\nlibmd5_a_SOURCES = md5.c md5.h\nAM_CXXFLAGS = -Wall\n\nmd5.c: md5.h\n\nCLEANFILES = *.gcda *.gcno\n\n"
  },
  {
    "path": "libs/md5/md5.c",
    "content": "/*\n * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.\n * MD5 Message-Digest Algorithm (RFC 1321).\n *\n * Homepage:\n * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5\n *\n * Author:\n * Alexander Peslyak, better known as Solar Designer <solar at openwall.com>\n *\n * This software was written by Alexander Peslyak in 2001.  No copyright is\n * claimed, and the software is hereby placed in the public domain.\n * In case this attempt to disclaim copyright and place the software in the\n * public domain is deemed null and void, then the software is\n * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the\n * general public under the following terms:\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted.\n *\n * There's ABSOLUTELY NO WARRANTY, express or implied.\n *\n * (This is a heavily cut-down \"BSD license\".)\n *\n * This differs from Colin Plumb's older public domain implementation in that\n * no exactly 32-bit integer data type is required (any 32-bit or wider\n * unsigned integer data type will do), there's no compile-time endianness\n * configuration, and the function prototypes match OpenSSL's.  No code from\n * Colin Plumb's implementation has been reused; this comment merely compares\n * the properties of the two independent implementations.\n *\n * The primary goals of this implementation are portability and ease of use.\n * It is meant to be fast, but not as fast as possible.  Some known\n * optimizations are not included to reduce source code size and avoid\n * compile-time configuration.\n */\n\n#ifndef HAVE_OPENSSL\n\n#include <string.h>\n\n#include \"md5.h\"\n\n/*\n * The basic MD5 functions.\n *\n * F and G are optimized compared to their RFC 1321 definitions for\n * architectures that lack an AND-NOT instruction, just like in Colin Plumb's\n * implementation.\n */\n#define F(x, y, z)\t\t\t((z) ^ ((x) & ((y) ^ (z))))\n#define G(x, y, z)\t\t\t((y) ^ ((z) & ((x) ^ (y))))\n#define H(x, y, z)\t\t\t(((x) ^ (y)) ^ (z))\n#define H2(x, y, z)\t\t\t((x) ^ ((y) ^ (z)))\n#define I(x, y, z)\t\t\t((y) ^ ((x) | ~(z)))\n\n/*\n * The MD5 transformation for all four rounds.\n */\n#define STEP(f, a, b, c, d, x, t, s) \\\n\t(a) += f((b), (c), (d)) + (x) + (t); \\\n\t(a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \\\n\t(a) += (b);\n\n/*\n * SET reads 4 input bytes in little-endian byte order and stores them in a\n * properly aligned word in host byte order.\n *\n * The check for little-endian architectures that tolerate unaligned memory\n * accesses is just an optimization.  Nothing will break if it fails to detect\n * a suitable architecture.\n *\n * Unfortunately, this optimization may be a C strict aliasing rules violation\n * if the caller's data buffer has effective type that cannot be aliased by\n * MD5_u32plus.  In practice, this problem may occur if these MD5 routines are\n * inlined into a calling function, or with future and dangerously advanced\n * link-time optimizations.  For the time being, keeping these MD5 routines in\n * their own translation unit avoids the problem.\n */\n#if defined(__i386__) || defined(__x86_64__) || defined(__vax__)\n#define SET(n) \\\n\t(*(MD5_u32plus *)&ptr[(n) * 4])\n#define GET(n) \\\n\tSET(n)\n#else\n#define SET(n) \\\n\t(ctx->block[(n)] = \\\n\t(MD5_u32plus)ptr[(n) * 4] | \\\n\t((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \\\n\t((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \\\n\t((MD5_u32plus)ptr[(n) * 4 + 3] << 24))\n#define GET(n) \\\n\t(ctx->block[(n)])\n#endif\n\n/*\n * This processes one or more 64-byte data blocks, but does NOT update the bit\n * counters.  There are no alignment requirements.\n */\nstatic const void *body(MD5_CTX *ctx, const void *data, unsigned long size)\n{\n\tconst unsigned char *ptr;\n\tMD5_u32plus a, b, c, d;\n\tMD5_u32plus saved_a, saved_b, saved_c, saved_d;\n\n\tptr = (const unsigned char *)data;\n\n\ta = ctx->a;\n\tb = ctx->b;\n\tc = ctx->c;\n\td = ctx->d;\n\n\tdo {\n\t\tsaved_a = a;\n\t\tsaved_b = b;\n\t\tsaved_c = c;\n\t\tsaved_d = d;\n\n/* Round 1 */\n\t\tSTEP(F, a, b, c, d, SET(0), 0xd76aa478, 7)\n\t\tSTEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12)\n\t\tSTEP(F, c, d, a, b, SET(2), 0x242070db, 17)\n\t\tSTEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22)\n\t\tSTEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7)\n\t\tSTEP(F, d, a, b, c, SET(5), 0x4787c62a, 12)\n\t\tSTEP(F, c, d, a, b, SET(6), 0xa8304613, 17)\n\t\tSTEP(F, b, c, d, a, SET(7), 0xfd469501, 22)\n\t\tSTEP(F, a, b, c, d, SET(8), 0x698098d8, 7)\n\t\tSTEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12)\n\t\tSTEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17)\n\t\tSTEP(F, b, c, d, a, SET(11), 0x895cd7be, 22)\n\t\tSTEP(F, a, b, c, d, SET(12), 0x6b901122, 7)\n\t\tSTEP(F, d, a, b, c, SET(13), 0xfd987193, 12)\n\t\tSTEP(F, c, d, a, b, SET(14), 0xa679438e, 17)\n\t\tSTEP(F, b, c, d, a, SET(15), 0x49b40821, 22)\n\n/* Round 2 */\n\t\tSTEP(G, a, b, c, d, GET(1), 0xf61e2562, 5)\n\t\tSTEP(G, d, a, b, c, GET(6), 0xc040b340, 9)\n\t\tSTEP(G, c, d, a, b, GET(11), 0x265e5a51, 14)\n\t\tSTEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20)\n\t\tSTEP(G, a, b, c, d, GET(5), 0xd62f105d, 5)\n\t\tSTEP(G, d, a, b, c, GET(10), 0x02441453, 9)\n\t\tSTEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14)\n\t\tSTEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20)\n\t\tSTEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5)\n\t\tSTEP(G, d, a, b, c, GET(14), 0xc33707d6, 9)\n\t\tSTEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14)\n\t\tSTEP(G, b, c, d, a, GET(8), 0x455a14ed, 20)\n\t\tSTEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5)\n\t\tSTEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9)\n\t\tSTEP(G, c, d, a, b, GET(7), 0x676f02d9, 14)\n\t\tSTEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20)\n\n/* Round 3 */\n\t\tSTEP(H, a, b, c, d, GET(5), 0xfffa3942, 4)\n\t\tSTEP(H2, d, a, b, c, GET(8), 0x8771f681, 11)\n\t\tSTEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16)\n\t\tSTEP(H2, b, c, d, a, GET(14), 0xfde5380c, 23)\n\t\tSTEP(H, a, b, c, d, GET(1), 0xa4beea44, 4)\n\t\tSTEP(H2, d, a, b, c, GET(4), 0x4bdecfa9, 11)\n\t\tSTEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16)\n\t\tSTEP(H2, b, c, d, a, GET(10), 0xbebfbc70, 23)\n\t\tSTEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4)\n\t\tSTEP(H2, d, a, b, c, GET(0), 0xeaa127fa, 11)\n\t\tSTEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16)\n\t\tSTEP(H2, b, c, d, a, GET(6), 0x04881d05, 23)\n\t\tSTEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4)\n\t\tSTEP(H2, d, a, b, c, GET(12), 0xe6db99e5, 11)\n\t\tSTEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16)\n\t\tSTEP(H2, b, c, d, a, GET(2), 0xc4ac5665, 23)\n\n/* Round 4 */\n\t\tSTEP(I, a, b, c, d, GET(0), 0xf4292244, 6)\n\t\tSTEP(I, d, a, b, c, GET(7), 0x432aff97, 10)\n\t\tSTEP(I, c, d, a, b, GET(14), 0xab9423a7, 15)\n\t\tSTEP(I, b, c, d, a, GET(5), 0xfc93a039, 21)\n\t\tSTEP(I, a, b, c, d, GET(12), 0x655b59c3, 6)\n\t\tSTEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10)\n\t\tSTEP(I, c, d, a, b, GET(10), 0xffeff47d, 15)\n\t\tSTEP(I, b, c, d, a, GET(1), 0x85845dd1, 21)\n\t\tSTEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6)\n\t\tSTEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10)\n\t\tSTEP(I, c, d, a, b, GET(6), 0xa3014314, 15)\n\t\tSTEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21)\n\t\tSTEP(I, a, b, c, d, GET(4), 0xf7537e82, 6)\n\t\tSTEP(I, d, a, b, c, GET(11), 0xbd3af235, 10)\n\t\tSTEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15)\n\t\tSTEP(I, b, c, d, a, GET(9), 0xeb86d391, 21)\n\n\t\ta += saved_a;\n\t\tb += saved_b;\n\t\tc += saved_c;\n\t\td += saved_d;\n\n\t\tptr += 64;\n\t} while (size -= 64);\n\n\tctx->a = a;\n\tctx->b = b;\n\tctx->c = c;\n\tctx->d = d;\n\n\treturn ptr;\n}\n\nvoid MD5_Init(MD5_CTX *ctx)\n{\n\tctx->a = 0x67452301;\n\tctx->b = 0xefcdab89;\n\tctx->c = 0x98badcfe;\n\tctx->d = 0x10325476;\n\n\tctx->lo = 0;\n\tctx->hi = 0;\n}\n\nvoid MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size)\n{\n\tMD5_u32plus saved_lo;\n\tunsigned long used, available;\n\n\tsaved_lo = ctx->lo;\n\tif ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)\n\t\tctx->hi++;\n\tctx->hi += size >> 29;\n\n\tused = saved_lo & 0x3f;\n\n\tif (used) {\n\t\tavailable = 64 - used;\n\n\t\tif (size < available) {\n\t\t\tmemcpy(&ctx->buffer[used], data, size);\n\t\t\treturn;\n\t\t}\n\n\t\tmemcpy(&ctx->buffer[used], data, available);\n\t\tdata = (const unsigned char *)data + available;\n\t\tsize -= available;\n\t\tbody(ctx, ctx->buffer, 64);\n\t}\n\n\tif (size >= 64) {\n\t\tdata = body(ctx, data, size & ~(unsigned long)0x3f);\n\t\tsize &= 0x3f;\n\t}\n\n\tmemcpy(ctx->buffer, data, size);\n}\n\n#define OUT(dst, src) \\\n\t(dst)[0] = (unsigned char)(src); \\\n\t(dst)[1] = (unsigned char)((src) >> 8); \\\n\t(dst)[2] = (unsigned char)((src) >> 16); \\\n\t(dst)[3] = (unsigned char)((src) >> 24);\n\nvoid MD5_Final(unsigned char *result, MD5_CTX *ctx)\n{\n\tunsigned long used, available;\n\n\tused = ctx->lo & 0x3f;\n\n\tctx->buffer[used++] = 0x80;\n\n\tavailable = 64 - used;\n\n\tif (available < 8) {\n\t\tmemset(&ctx->buffer[used], 0, available);\n\t\tbody(ctx, ctx->buffer, 64);\n\t\tused = 0;\n\t\tavailable = 64;\n\t}\n\n\tmemset(&ctx->buffer[used], 0, available - 8);\n\n\tctx->lo <<= 3;\n\tOUT(&ctx->buffer[56], ctx->lo)\n\tOUT(&ctx->buffer[60], ctx->hi)\n\n\tbody(ctx, ctx->buffer, 64);\n\n\tOUT(&result[0], ctx->a)\n\tOUT(&result[4], ctx->b)\n\tOUT(&result[8], ctx->c)\n\tOUT(&result[12], ctx->d)\n\n\tmemset(ctx, 0, sizeof(*ctx));\n}\n\n#endif\n"
  },
  {
    "path": "libs/md5/md5.h",
    "content": "/*\n * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.\n * MD5 Message-Digest Algorithm (RFC 1321).\n *\n * Homepage:\n * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5\n *\n * Author:\n * Alexander Peslyak, better known as Solar Designer <solar at openwall.com>\n *\n * This software was written by Alexander Peslyak in 2001.  No copyright is\n * claimed, and the software is hereby placed in the public domain.\n * In case this attempt to disclaim copyright and place the software in the\n * public domain is deemed null and void, then the software is\n * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the\n * general public under the following terms:\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted.\n *\n * There's ABSOLUTELY NO WARRANTY, express or implied.\n *\n * See md5.c for more information.\n */\n\n#ifndef _MD5_H\n#define _MD5_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Any 32-bit or wider unsigned integer data type will do */\ntypedef unsigned int MD5_u32plus;\n\ntypedef struct {\n\tMD5_u32plus lo, hi;\n\tMD5_u32plus a, b, c, d;\n\tunsigned char buffer[64];\n\tMD5_u32plus block[16];\n} MD5_CTX;\n\nextern void MD5_Init(MD5_CTX *ctx);\nextern void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size);\nextern void MD5_Final(unsigned char *result, MD5_CTX *ctx);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "libs/potrace/Makefile.am",
    "content": "if !HAVE_POTRACE\nnoinst_LIBRARIES = libpotrace.a\nlibpotrace_a_SOURCES = \\\n\tauxiliary.h \\\n\tbitmap.h \\\n\tconfig.h \\\n\tcurve.c \\\n\tcurve.h \\\n\tdecompose.c \\\n\tdecompose.h \\\n\tlists.h \\\n\tpotracelib.c \\\n\tpotracelib.h \\\n\tprogress.h \\\n\ttrace.c \\\n\ttrace.h\n\nAM_CFLAGS = -Wall -I$(srcdir)\n\nendif\n\nCLEANFILES = *.gcda *.gcno\n"
  },
  {
    "path": "libs/potrace/auxiliary.h",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n/* This header file collects some general-purpose macros (and static\n   inline functions) that are used in various places. */\n\n#ifndef AUXILIARY_H\n#define AUXILIARY_H\n\n#ifdef HAVE_CONFIG_H\n#include <config.h>\n#endif\n\n#include <stdlib.h>\n\n/* ---------------------------------------------------------------------- */\n/* point arithmetic */\n\n#include \"potracelib.h\"\n\nstruct point_s {\n  long x;\n  long y;\n};\ntypedef struct point_s point_t;\n\ntypedef potrace_dpoint_t dpoint_t;\n\n/* convert point_t to dpoint_t */\nstatic inline dpoint_t dpoint(point_t p) {\n  dpoint_t res;\n  res.x = p.x;\n  res.y = p.y;\n  return res;\n}\n\n/* range over the straight line segment [a,b] when lambda ranges over [0,1] */\nstatic inline dpoint_t interval(double lambda, dpoint_t a, dpoint_t b) {\n  dpoint_t res;\n\n  res.x = a.x + lambda * (b.x - a.x);\n  res.y = a.y + lambda * (b.y - a.y);\n  return res;\n}\n\n/* ---------------------------------------------------------------------- */\n/* some useful macros. Note: the \"mod\" macro works correctly for\n   negative a. Also note that the test for a>=n, while redundant,\n   speeds up the mod function by 70% in the average case (significant\n   since the program spends about 16% of its time here - or 40%\n   without the test). The \"floordiv\" macro returns the largest integer\n   <= a/n, and again this works correctly for negative a, as long as\n   a,n are integers and n>0. */\n\n/* integer arithmetic */\n\nstatic inline int mod(int a, int n) {\n  return a>=n ? a%n : a>=0 ? a : n-1-(-1-a)%n;\n}\n\nstatic inline int floordiv(int a, int n) {\n  return a>=0 ? a/n : -1-(-1-a)/n;\n}\n\n/* Note: the following work for integers and other numeric types. */\n#undef sign\n#undef abs\n#undef min\n#undef max\n#undef sq\n#undef cu\n#define sign(x) ((x)>0 ? 1 : (x)<0 ? -1 : 0)\n#define abs(a) ((a)>0 ? (a) : -(a))\n#define min(a,b) ((a)<(b) ? (a) : (b))\n#define max(a,b) ((a)>(b) ? (a) : (b))\n#define sq(a) ((a)*(a))\n#define cu(a) ((a)*(a)*(a))\n\n#endif /* AUXILIARY_H */\n"
  },
  {
    "path": "libs/potrace/bitmap.h",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n#ifndef BITMAP_H\n#define BITMAP_H\n\n#include <string.h>\n#include <stdlib.h>\n#include <errno.h>\n#include <stddef.h>\n\n/* The bitmap type is defined in potracelib.h */\n#include \"potracelib.h\"\n\n/* The present file defines some convenient macros and static inline\n   functions for accessing bitmaps. Since they only produce inline\n   code, they can be conveniently shared by the library and frontends,\n   if desired */\n\n/* ---------------------------------------------------------------------- */\n/* some measurements */\n\n#define BM_WORDSIZE ((int)sizeof(potrace_word))\n#define BM_WORDBITS (8*BM_WORDSIZE)\n#define BM_HIBIT (((potrace_word)1)<<(BM_WORDBITS-1))\n#define BM_ALLBITS (~(potrace_word)0)\n\n/* macros for accessing pixel at index (x,y). U* macros omit the\n   bounds check. */\n\n#define bm_scanline(bm, y) ((bm)->map + (ptrdiff_t)(y)*(ptrdiff_t)(bm)->dy)\n#define bm_index(bm, x, y) (&bm_scanline(bm, y)[(x)/BM_WORDBITS])\n#define bm_mask(x) (BM_HIBIT >> ((x) & (BM_WORDBITS-1)))\n#define bm_range(x, a) ((int)(x) >= 0 && (int)(x) < (a))\n#define bm_safe(bm, x, y) (bm_range(x, (bm)->w) && bm_range(y, (bm)->h))\n#define BM_UGET(bm, x, y) ((*bm_index(bm, x, y) & bm_mask(x)) != 0)\n#define BM_USET(bm, x, y) (*bm_index(bm, x, y) |= bm_mask(x))\n#define BM_UCLR(bm, x, y) (*bm_index(bm, x, y) &= ~bm_mask(x))\n#define BM_UINV(bm, x, y) (*bm_index(bm, x, y) ^= bm_mask(x))\n#define BM_UPUT(bm, x, y, b) ((b) ? BM_USET(bm, x, y) : BM_UCLR(bm, x, y))\n#define BM_GET(bm, x, y) (bm_safe(bm, x, y) ? BM_UGET(bm, x, y) : 0)\n#define BM_SET(bm, x, y) (bm_safe(bm, x, y) ? BM_USET(bm, x, y) : 0)\n#define BM_CLR(bm, x, y) (bm_safe(bm, x, y) ? BM_UCLR(bm, x, y) : 0)\n#define BM_INV(bm, x, y) (bm_safe(bm, x, y) ? BM_UINV(bm, x, y) : 0)\n#define BM_PUT(bm, x, y, b) (bm_safe(bm, x, y) ? BM_UPUT(bm, x, y, b) : 0)\n\n/* calculate the size, in bytes, required for the data area of a\n   bitmap of the given dy and h. Assume h >= 0. Return -1 if the size\n   does not fit into the ptrdiff_t type. */\nstatic inline ptrdiff_t getsize(int dy, int h) {\n  ptrdiff_t size;\n\n  if (dy < 0) {\n    dy = -dy;\n  }\n  \n  size = (ptrdiff_t)dy * (ptrdiff_t)h * (ptrdiff_t)BM_WORDSIZE;\n\n  /* check for overflow error */\n  if (size < 0 || (h != 0 && dy != 0 && size / h / dy != BM_WORDSIZE)) {\n    return -1;\n  }\n\n  return size;\n}\n\n/* return the size, in bytes, of the data area of the bitmap. Return\n   -1 if the size does not fit into the ptrdiff_t type; however, this\n   cannot happen if the bitmap is well-formed, i.e., if created with\n   bm_new or bm_dup. */\nstatic inline ptrdiff_t bm_size(const potrace_bitmap_t *bm) {\n  return getsize(bm->dy, bm->h);\n}\n\n/* calculate the base address of the bitmap data. Assume that the\n   bitmap is well-formed, i.e., its size fits into the ptrdiff_t type.\n   This is the case if created with bm_new or bm_dup. The base address\n   may differ from bm->map if dy is negative */\nstatic inline potrace_word *bm_base(const potrace_bitmap_t *bm) {\n  int dy = bm->dy;\n\n  if (dy >= 0 || bm->h == 0) {\n    return bm->map;\n  } else {\n    return bm_scanline(bm, bm->h - 1);\n  }  \n}\n\n/* free the given bitmap. Leaves errno untouched. */\nstatic inline void bm_free(potrace_bitmap_t *bm) {\n  if (bm && bm->map) {\n    free(bm_base(bm));\n  }\n  free(bm);\n}\n\n/* return new bitmap initialized to 0. NULL with errno on error.\n   Assumes w, h >= 0. */\nstatic inline potrace_bitmap_t *bm_new(int w, int h) {\n  potrace_bitmap_t *bm;\n  int dy = w == 0 ? 0 : (w - 1) / BM_WORDBITS + 1;\n  ptrdiff_t size;\n\n  size = getsize(dy, h);\n  if (size < 0) {\n    errno = ENOMEM;\n    return NULL;\n  }\n  if (size == 0) {\n    size = BM_WORDSIZE; /* make sure calloc() doesn't return NULL */\n  } \n\n  bm = (potrace_bitmap_t *) malloc(sizeof(potrace_bitmap_t));\n  if (!bm) {\n    return NULL;\n  }\n  bm->w = w;\n  bm->h = h;\n  bm->dy = dy;\n  bm->map = (potrace_word *) calloc(1, size);\n  if (!bm->map) {\n    free(bm);\n    return NULL;\n  }\n  return bm;\n}\n\n/* clear the given bitmap. Set all bits to c. Assumes a well-formed\n   bitmap. */\nstatic inline void bm_clear(potrace_bitmap_t *bm, int c) {\n  /* Note: if the bitmap was created with bm_new, then it is\n     guaranteed that size will fit into the ptrdiff_t type. */\n  ptrdiff_t size = bm_size(bm);\n  memset(bm_base(bm), c ? -1 : 0, size);\n}\n\n/* duplicate the given bitmap. Return NULL on error with errno\n   set. Assumes a well-formed bitmap. */\nstatic inline potrace_bitmap_t *bm_dup(const potrace_bitmap_t *bm) {\n  potrace_bitmap_t *bm1 = bm_new(bm->w, bm->h);\n  int y;\n  \n  if (!bm1) {\n    return NULL;\n  }\n  for (y=0; y < bm->h; y++) {\n    memcpy(bm_scanline(bm1, y), bm_scanline(bm, y), (size_t)bm1->dy * (size_t)BM_WORDSIZE);\n  }\n  return bm1;\n}\n\n/* invert the given bitmap. */\nstatic inline void bm_invert(potrace_bitmap_t *bm) {\n  int dy = bm->dy;\n  int y;\n  int i;\n  potrace_word *p;\n\n  if (dy < 0) {\n    dy = -dy;\n  }\n  \n  for (y=0; y < bm->h; y++) {\n    p = bm_scanline(bm, y);\n    for (i=0; i < dy; i++) {\n      p[i] ^= BM_ALLBITS;\n    }\n  }\n}\n\n/* turn the given bitmap upside down. This does not move the bitmap\n   data or change the bm_base() address. */\nstatic inline void bm_flip(potrace_bitmap_t *bm) {\n  int dy = bm->dy;\n\n  if (bm->h == 0 || bm->h == 1) {\n    return;\n  }\n  \n  bm->map = bm_scanline(bm, bm->h - 1);\n  bm->dy = -dy;\n}\n\n/* resize the bitmap to the given new height. The bitmap data remains\n   bottom-aligned (truncated at the top) when dy >= 0 and top-aligned\n   (truncated at the bottom) when dy < 0. Return 0 on success, or 1 on\n   error with errno set. If the new height is <= the old one, no error\n   should occur. If the new height is larger, the additional bitmap\n   data is *not* initialized. */\nstatic inline int bm_resize(potrace_bitmap_t *bm, int h) {\n  int dy = bm->dy;\n  ptrdiff_t newsize;\n  potrace_word *newmap;\n\n  if (dy < 0) {\n    bm_flip(bm);\n  }\n  \n  newsize = getsize(dy, h);\n  if (newsize < 0) {\n    errno = ENOMEM;\n    goto error;\n  }\n  if (newsize == 0) {\n    newsize = BM_WORDSIZE; /* make sure realloc() doesn't return NULL */\n  }\n  \n  newmap = (potrace_word *)realloc(bm->map, newsize);\n  if (newmap == NULL) {\n    goto error;\n  }\n  bm->map = newmap;\n  bm->h = h;\n\n  if (dy < 0) {\n    bm_flip(bm);\n  }\n  return 0;\n  \n error:\n  if (dy < 0) {\n    bm_flip(bm);\n  }\n  return 1;  \n}\n\n#endif /* BITMAP_H */\n"
  },
  {
    "path": "libs/potrace/config.h",
    "content": "#ifndef CONFIG_H\n#define CONFIG_H\n#define VERSION \"1.16\"\n#define HAVE_INTTYPES_H 1\n#endif\n"
  },
  {
    "path": "libs/potrace/curve.c",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n/* private part of the path and curve data structures */\n\n#ifdef HAVE_CONFIG_H\n#include <config.h>\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"potracelib.h\"\n#include \"lists.h\"\n#include \"curve.h\"\n\n#define SAFE_CALLOC(var, n, typ) \\\n  if ((var = (typ *)calloc(n, sizeof(typ))) == NULL) goto calloc_error \n\n/* ---------------------------------------------------------------------- */\n/* allocate and free path objects */\n\npath_t *path_new(void) {\n  path_t *p = NULL;\n  privpath_t *priv = NULL;\n\n  SAFE_CALLOC(p, 1, path_t);\n  memset(p, 0, sizeof(path_t));\n  SAFE_CALLOC(priv, 1, privpath_t);\n  memset(priv, 0, sizeof(privpath_t));\n  p->priv = priv;\n  return p;\n\n calloc_error:\n  free(p);\n  free(priv);\n  return NULL;\n}\n\n/* free the members of the given curve structure. Leave errno unchanged. */\nstatic void privcurve_free_members(privcurve_t *curve) {\n  free(curve->tag);\n  free(curve->c);\n  free(curve->vertex);\n  free(curve->alpha);\n  free(curve->alpha0);\n  free(curve->beta);\n}\n\n/* free a path. Leave errno untouched. */\nvoid path_free(path_t *p) {\n  if (p) {\n    if (p->priv) {\n      free(p->priv->pt);\n      free(p->priv->lon);\n      free(p->priv->sums);\n      free(p->priv->po);\n      privcurve_free_members(&p->priv->curve);\n      privcurve_free_members(&p->priv->ocurve);\n    }\n    free(p->priv);\n    /* do not free p->fcurve ! */\n  }\n  free(p);\n}  \n\n/* free a pathlist, leaving errno untouched. */\nvoid pathlist_free(path_t *plist) {\n  path_t *p;\n\n  list_forall_unlink(p, plist) {\n    path_free(p);\n  }\n}\n\n/* ---------------------------------------------------------------------- */\n/* initialize and finalize curve structures */\n\ntypedef dpoint_t dpoint3_t[3];\n\n/* initialize the members of the given curve structure to size m.\n   Return 0 on success, 1 on error with errno set. */\nint privcurve_init(privcurve_t *curve, int n) {\n  memset(curve, 0, sizeof(privcurve_t));\n  curve->n = n;\n  SAFE_CALLOC(curve->tag, n, int);\n  SAFE_CALLOC(curve->c, n, dpoint3_t);\n  SAFE_CALLOC(curve->vertex, n, dpoint_t);\n  SAFE_CALLOC(curve->alpha, n, double);\n  SAFE_CALLOC(curve->alpha0, n, double);\n  SAFE_CALLOC(curve->beta, n, double);\n  return 0;\n\n calloc_error:\n  free(curve->tag);\n  free(curve->c);\n  free(curve->vertex);\n  free(curve->alpha);\n  free(curve->alpha0);\n  free(curve->beta);\n  return 1;\n}\n\n/* copy private to public curve structure */\nvoid privcurve_to_curve(privcurve_t *pc, potrace_curve_t *c) {\n  c->n = pc->n;\n  c->tag = pc->tag;\n  c->c = pc->c;\n}\n    \n"
  },
  {
    "path": "libs/potrace/curve.h",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n#ifndef CURVE_H\n#define CURVE_H\n\n#include \"auxiliary.h\"\n\n/* vertex is c[1] for tag=POTRACE_CORNER, and the intersection of\n   .c[-1][2]..c[0] and c[1]..c[2] for tag=POTRACE_CURVETO. alpha is only\n   defined for tag=POTRACE_CURVETO and is the alpha parameter of the curve:\n   .c[-1][2]..c[0] = alpha*(.c[-1][2]..vertex), and\n   c[2]..c[1] = alpha*(c[2]..vertex).\n   Beta is so that (.beta[i])[.vertex[i],.vertex[i+1]] = .c[i][2].\n*/\n\nstruct privcurve_s {\n  int n;            /* number of segments */\n  int *tag;         /* tag[n]: POTRACE_CORNER or POTRACE_CURVETO */\n  dpoint_t (*c)[3]; /* c[n][i]: control points. \n\t\t       c[n][0] is unused for tag[n]=POTRACE_CORNER */\n  /* the remainder of this structure is special to privcurve, and is\n     used in EPS debug output and special EPS \"short coding\". These\n     fields are valid only if \"alphacurve\" is set. */\n  int alphacurve;   /* have the following fields been initialized? */\n  dpoint_t *vertex; /* for POTRACE_CORNER, this equals c[1] */\n  double *alpha;    /* only for POTRACE_CURVETO */\n  double *alpha0;   /* \"uncropped\" alpha parameter - for debug output only */\n  double *beta;\n};\ntypedef struct privcurve_s privcurve_t;\n\nstruct sums_s {\n  double x;\n  double y;\n  double x2;\n  double xy;\n  double y2;\n};\ntypedef struct sums_s sums_t;\n\n/* the path structure is filled in with information about a given path\n   as it is accumulated and passed through the different stages of the\n   Potrace algorithm. Backends only need to read the fcurve and fm\n   fields of this data structure, but debugging backends may read\n   other fields. */\nstruct potrace_privpath_s {\n  int len;\n  point_t *pt;     /* pt[len]: path as extracted from bitmap */\n  int *lon;        /* lon[len]: (i,lon[i]) = longest straight line from i */\n\n  int x0, y0;      /* origin for sums */\n  sums_t *sums;    /* sums[len+1]: cache for fast summing */\n\n  int m;           /* length of optimal polygon */\n  int *po;         /* po[m]: optimal polygon */\n\n  privcurve_t curve;   /* curve[m]: array of curve elements */\n  privcurve_t ocurve;  /* ocurve[om]: array of curve elements */\n  privcurve_t *fcurve;  /* final curve: this points to either curve or\n\t\t       ocurve. Do not free this separately. */\n};\ntypedef struct potrace_privpath_s potrace_privpath_t;\n\n/* shorter names */\ntypedef potrace_privpath_t privpath_t;\ntypedef potrace_path_t path_t;\n\npath_t *path_new(void);\nvoid path_free(path_t *p);\nvoid pathlist_free(path_t *plist);\nint privcurve_init(privcurve_t *curve, int n);\nvoid privcurve_to_curve(privcurve_t *pc, potrace_curve_t *c);\n\n#endif /* CURVE_H */\n\n"
  },
  {
    "path": "libs/potrace/decompose.c",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n#ifdef HAVE_CONFIG_H\n#include <config.h>\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <limits.h>\n#ifdef HAVE_INTTYPES_H\n#include <inttypes.h>\n#endif\n\n#include \"potracelib.h\"\n#include \"curve.h\"\n#include \"lists.h\"\n#include \"bitmap.h\"\n#include \"decompose.h\"\n#include \"progress.h\"\n\n/* ---------------------------------------------------------------------- */\n/* deterministically and efficiently hash (x,y) into a pseudo-random bit */\n\nstatic inline int detrand(int x, int y) {\n  unsigned int z;\n  static const unsigned char t[256] = { \n    /* non-linear sequence: constant term of inverse in GF(8), \n       mod x^8+x^4+x^3+x+1 */\n    0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, \n    0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, \n    0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, \n    1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, \n    0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, \n    0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, \n    0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, \n    0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, \n    1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, \n    0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, \n    1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, \n  };\n\n  /* 0x04b3e375 and 0x05a8ef93 are chosen to contain every possible\n     5-bit sequence */\n  z = ((0x04b3e375 * x) ^ y) * 0x05a8ef93;\n  z = t[z & 0xff] ^ t[(z>>8) & 0xff] ^ t[(z>>16) & 0xff] ^ t[(z>>24) & 0xff];\n  return z;\n}\n\n/* ---------------------------------------------------------------------- */\n/* auxiliary bitmap manipulations */\n\n/* set the excess padding to 0 */\nstatic void bm_clearexcess(potrace_bitmap_t *bm) {\n  potrace_word mask;\n  int y;\n\n  if (bm->w % BM_WORDBITS != 0) {\n    mask = BM_ALLBITS << (BM_WORDBITS - (bm->w % BM_WORDBITS));\n    for (y=0; y<bm->h; y++) {\n      *bm_index(bm, bm->w, y) &= mask;\n    }\n  }\n}\n\nstruct bbox_s {\n  int x0, x1, y0, y1;    /* bounding box */\n};\ntypedef struct bbox_s bbox_t;\n\n/* clear the bm, assuming the bounding box is set correctly (faster\n   than clearing the whole bitmap) */\nstatic void clear_bm_with_bbox(potrace_bitmap_t *bm, bbox_t *bbox) {\n  int imin = (bbox->x0 / BM_WORDBITS);\n  int imax = ((bbox->x1 + BM_WORDBITS-1) / BM_WORDBITS);\n  int i, y;\n\n  for (y=bbox->y0; y<bbox->y1; y++) {\n    for (i=imin; i<imax; i++) {\n      bm_scanline(bm, y)[i] = 0;\n    }\n  }\n}\n\n/* ---------------------------------------------------------------------- */\n/* auxiliary functions */\n\n/* return the \"majority\" value of bitmap bm at intersection (x,y). We\n   assume that the bitmap is balanced at \"radius\" 1.  */\nstatic int majority(potrace_bitmap_t *bm, int x, int y) {\n  int i, a, ct;\n\n  for (i=2; i<5; i++) { /* check at \"radius\" i */\n    ct = 0;\n    for (a=-i+1; a<=i-1; a++) {\n      ct += BM_GET(bm, x+a, y+i-1) ? 1 : -1;\n      ct += BM_GET(bm, x+i-1, y+a-1) ? 1 : -1;\n      ct += BM_GET(bm, x+a-1, y-i) ? 1 : -1;\n      ct += BM_GET(bm, x-i, y+a) ? 1 : -1;\n    }\n    if (ct>0) {\n      return 1;\n    } else if (ct<0) {\n      return 0;\n    }\n  }\n  return 0;\n}\n\n/* ---------------------------------------------------------------------- */\n/* decompose image into paths */\n\n/* efficiently invert bits [x,infty) and [xa,infty) in line y. Here xa\n   must be a multiple of BM_WORDBITS. */\nstatic void xor_to_ref(potrace_bitmap_t *bm, int x, int y, int xa) {\n  int xhi = x & -BM_WORDBITS;\n  int xlo = x & (BM_WORDBITS-1);  /* = x % BM_WORDBITS */\n  int i;\n  \n  if (xhi<xa) {\n    for (i = xhi; i < xa; i+=BM_WORDBITS) {\n      *bm_index(bm, i, y) ^= BM_ALLBITS;\n    }\n  } else {\n    for (i = xa; i < xhi; i+=BM_WORDBITS) {\n      *bm_index(bm, i, y) ^= BM_ALLBITS;\n    }\n  }\n  /* note: the following \"if\" is needed because x86 treats a<<b as\n     a<<(b&31). I spent hours looking for this bug. */\n  if (xlo) {\n    *bm_index(bm, xhi, y) ^= (BM_ALLBITS << (BM_WORDBITS - xlo));\n  }\n}\n\n/* a path is represented as an array of points, which are thought to\n   lie on the corners of pixels (not on their centers). The path point\n   (x,y) is the lower left corner of the pixel (x,y). Paths are\n   represented by the len/pt components of a path_t object (which\n   also stores other information about the path) */\n\n/* xor the given pixmap with the interior of the given path. Note: the\n   path must be within the dimensions of the pixmap. */\nstatic void xor_path(potrace_bitmap_t *bm, path_t *p) {\n  int xa, x, y, k, y1;\n\n  if (p->priv->len <= 0) {  /* a path of length 0 is silly, but legal */\n    return;\n  }\n\n  y1 = p->priv->pt[p->priv->len-1].y;\n\n  xa = p->priv->pt[0].x & -BM_WORDBITS;\n  for (k=0; k<p->priv->len; k++) {\n    x = p->priv->pt[k].x;\n    y = p->priv->pt[k].y;\n\n    if (y != y1) {\n      /* efficiently invert the rectangle [x,xa] x [y,y1] */\n      xor_to_ref(bm, x, min(y,y1), xa);\n      y1 = y;\n    }\n  }\n}\n\n/* Find the bounding box of a given path. Path is assumed to be of\n   non-zero length. */\nstatic void setbbox_path(bbox_t *bbox, path_t *p) {\n  int x, y;\n  int k;\n\n  bbox->y0 = INT_MAX;\n  bbox->y1 = 0;\n  bbox->x0 = INT_MAX;\n  bbox->x1 = 0;\n\n  for (k=0; k<p->priv->len; k++) {\n    x = p->priv->pt[k].x;\n    y = p->priv->pt[k].y;\n\n    if (x < bbox->x0) {\n      bbox->x0 = x;\n    }\n    if (x > bbox->x1) {\n      bbox->x1 = x;\n    }\n    if (y < bbox->y0) {\n      bbox->y0 = y;\n    }\n    if (y > bbox->y1) {\n      bbox->y1 = y;\n    }\n  }\n}\n\n/* compute a path in the given pixmap, separating black from white.\n   Start path at the point (x0,x1), which must be an upper left corner\n   of the path. Also compute the area enclosed by the path. Return a\n   new path_t object, or NULL on error (note that a legitimate path\n   cannot have length 0). Sign is required for correct interpretation\n   of turnpolicies. */\nstatic path_t *findpath(potrace_bitmap_t *bm, int x0, int y0, int sign, int turnpolicy) {\n  int x, y, dirx, diry, len, size;\n  uint64_t area;\n  int c, d, tmp;\n  point_t *pt, *pt1;\n  path_t *p = NULL;\n\n  x = x0;\n  y = y0;\n  dirx = 0;\n  diry = -1;\n\n  len = size = 0;\n  pt = NULL;\n  area = 0;\n  \n  while (1) {\n    /* add point to path */\n    if (len>=size) {\n      size += 100;\n      size = (int)(1.3 * size);\n      pt1 = (point_t *)realloc(pt, size * sizeof(point_t));\n      if (!pt1) {\n\tgoto error;\n      }\n      pt = pt1;\n    }\n    pt[len].x = x;\n    pt[len].y = y;\n    len++;\n    \n    /* move to next point */\n    x += dirx;\n    y += diry;\n    area += x*diry;\n    \n    /* path complete? */\n    if (x==x0 && y==y0) {\n      break;\n    }\n    \n    /* determine next direction */\n    c = BM_GET(bm, x + (dirx+diry-1)/2, y + (diry-dirx-1)/2);\n    d = BM_GET(bm, x + (dirx-diry-1)/2, y + (diry+dirx-1)/2);\n    \n    if (c && !d) {               /* ambiguous turn */\n      if (turnpolicy == POTRACE_TURNPOLICY_RIGHT\n\t  || (turnpolicy == POTRACE_TURNPOLICY_BLACK && sign == '+')\n\t  || (turnpolicy == POTRACE_TURNPOLICY_WHITE && sign == '-')\n\t  || (turnpolicy == POTRACE_TURNPOLICY_RANDOM && detrand(x,y))\n\t  || (turnpolicy == POTRACE_TURNPOLICY_MAJORITY && majority(bm, x, y))\n\t  || (turnpolicy == POTRACE_TURNPOLICY_MINORITY && !majority(bm, x, y))) {\n\ttmp = dirx;              /* right turn */\n\tdirx = diry;\n\tdiry = -tmp;\n      } else {\n\ttmp = dirx;              /* left turn */\n\tdirx = -diry;\n\tdiry = tmp;\n      }\n    } else if (c) {              /* right turn */\n      tmp = dirx;\n      dirx = diry;\n      diry = -tmp;\n    } else if (!d) {             /* left turn */\n      tmp = dirx;\n      dirx = -diry;\n      diry = tmp;\n    }\n  } /* while this path */\n\n  /* allocate new path object */\n  p = path_new();\n  if (!p) {\n    goto error;\n  }\n\n  p->priv->pt = pt;\n  p->priv->len = len;\n  p->area = area <= INT_MAX ? area : INT_MAX; /* avoid overflow */\n  p->sign = sign;\n\n  return p;\n \n error:\n   free(pt);\n   return NULL; \n}\n\n/* Give a tree structure to the given path list, based on \"insideness\"\n   testing. I.e., path A is considered \"below\" path B if it is inside\n   path B. The input pathlist is assumed to be ordered so that \"outer\"\n   paths occur before \"inner\" paths. The tree structure is stored in\n   the \"childlist\" and \"sibling\" components of the path_t\n   structure. The linked list structure is also changed so that\n   negative path components are listed immediately after their\n   positive parent.  Note: some backends may ignore the tree\n   structure, others may use it e.g. to group path components. We\n   assume that in the input, point 0 of each path is an \"upper left\"\n   corner of the path, as returned by bm_to_pathlist. This makes it\n   easy to find an \"interior\" point. The bm argument should be a\n   bitmap of the correct size (large enough to hold all the paths),\n   and will be used as scratch space. Return 0 on success or -1 on\n   error with errno set. */\n\nstatic void pathlist_to_tree(path_t *plist, potrace_bitmap_t *bm) {\n  path_t *p, *p1;\n  path_t *heap, *heap1;\n  path_t *cur;\n  path_t *head;\n  path_t **plist_hook;          /* for fast appending to linked list */\n  path_t **hook_in, **hook_out; /* for fast appending to linked list */\n  bbox_t bbox;\n  \n  bm_clear(bm, 0);\n\n  /* save original \"next\" pointers */\n  list_forall(p, plist) {\n    p->sibling = p->next;\n    p->childlist = NULL;\n  }\n  \n  heap = plist;\n\n  /* the heap holds a list of lists of paths. Use \"childlist\" field\n     for outer list, \"next\" field for inner list. Each of the sublists\n     is to be turned into a tree. This code is messy, but it is\n     actually fast. Each path is rendered exactly once. We use the\n     heap to get a tail recursive algorithm: the heap holds a list of\n     pathlists which still need to be transformed. */\n\n  while (heap) {\n    /* unlink first sublist */\n    cur = heap;\n    heap = heap->childlist;\n    cur->childlist = NULL;\n  \n    /* unlink first path */\n    head = cur;\n    cur = cur->next;\n    head->next = NULL;\n\n    /* render path */\n    xor_path(bm, head);\n    setbbox_path(&bbox, head);\n\n    /* now do insideness test for each element of cur; append it to\n       head->childlist if it's inside head, else append it to\n       head->next. */\n    hook_in=&head->childlist;\n    hook_out=&head->next;\n    list_forall_unlink(p, cur) {\n      if (p->priv->pt[0].y <= bbox.y0) {\n\tlist_insert_beforehook(p, hook_out);\n\t/* append the remainder of the list to hook_out */\n\t*hook_out = cur;\n\tbreak;\n      }\n      if (BM_GET(bm, p->priv->pt[0].x, p->priv->pt[0].y-1)) {\n\tlist_insert_beforehook(p, hook_in);\n      } else {\n\tlist_insert_beforehook(p, hook_out);\n      }\n    }\n\n    /* clear bm */\n    clear_bm_with_bbox(bm, &bbox);\n\n    /* now schedule head->childlist and head->next for further\n       processing */\n    if (head->next) {\n      head->next->childlist = heap;\n      heap = head->next;\n    }\n    if (head->childlist) {\n      head->childlist->childlist = heap;\n      heap = head->childlist;\n    }\n  }\n  \n  /* copy sibling structure from \"next\" to \"sibling\" component */\n  p = plist;\n  while (p) {\n    p1 = p->sibling;\n    p->sibling = p->next;\n    p = p1;\n  }\n\n  /* reconstruct a new linked list (\"next\") structure from tree\n     (\"childlist\", \"sibling\") structure. This code is slightly messy,\n     because we use a heap to make it tail recursive: the heap\n     contains a list of childlists which still need to be\n     processed. */\n  heap = plist;\n  if (heap) {\n    heap->next = NULL;  /* heap is a linked list of childlists */\n  }\n  plist = NULL;\n  plist_hook = &plist;\n  while (heap) {\n    heap1 = heap->next;\n    for (p=heap; p; p=p->sibling) {\n      /* p is a positive path */\n      /* append to linked list */\n      list_insert_beforehook(p, plist_hook);\n      \n      /* go through its children */\n      for (p1=p->childlist; p1; p1=p1->sibling) {\n\t/* append to linked list */\n\tlist_insert_beforehook(p1, plist_hook);\n\t/* append its childlist to heap, if non-empty */\n\tif (p1->childlist) {\n\t  list_append(path_t, heap1, p1->childlist);\n\t}\n      }\n    }\n    heap = heap1;\n  }\n\n  return;\n}\n\n/* find the next set pixel in a row <= y. Pixels are searched first\n   left-to-right, then top-down. In other words, (x,y)<(x',y') if y>y'\n   or y=y' and x<x'. If found, return 0 and store pixel in\n   (*xp,*yp). Else return 1. Note that this function assumes that\n   excess bytes have been cleared with bm_clearexcess. */\nstatic int findnext(potrace_bitmap_t *bm, int *xp, int *yp) {\n  int x;\n  int y;\n  int x0;\n\n  x0 = (*xp) & ~(BM_WORDBITS-1);\n\n  for (y=*yp; y>=0; y--) {\n    for (x=x0; x<bm->w && x>=0; x+=(unsigned)BM_WORDBITS) {\n      if (*bm_index(bm, x, y)) {\n\twhile (!BM_GET(bm, x, y)) {\n\t  x++;\n\t}\n\t/* found */\n\t*xp = x;\n\t*yp = y;\n\treturn 0;\n      }\n    }\n    x0 = 0;\n  }\n  /* not found */\n  return 1;\n}\n\n/* Decompose the given bitmap into paths. Returns a linked list of\n   path_t objects with the fields len, pt, area, sign filled\n   in. Returns 0 on success with plistp set, or -1 on error with errno\n   set. */\n\nint bm_to_pathlist(const potrace_bitmap_t *bm, path_t **plistp, const potrace_param_t *param, progress_t *progress) {\n  int x;\n  int y;\n  path_t *p;\n  path_t *plist = NULL;  /* linked list of path objects */\n  path_t **plist_hook = &plist;  /* used to speed up appending to linked list */\n  potrace_bitmap_t *bm1 = NULL;\n  int sign;\n\n  bm1 = bm_dup(bm);\n  if (!bm1) {\n    goto error;\n  }\n\n  /* be sure the byte padding on the right is set to 0, as the fast\n     pixel search below relies on it */\n  bm_clearexcess(bm1);\n\n  /* iterate through components */\n  x = 0;\n  y = bm1->h - 1;\n  while (findnext(bm1, &x, &y) == 0) { \n    /* calculate the sign by looking at the original */\n    sign = BM_GET(bm, x, y) ? '+' : '-';\n\n    /* calculate the path */\n    p = findpath(bm1, x, y+1, sign, param->turnpolicy);\n    if (p==NULL) {\n      goto error;\n    }\n\n    /* update buffered image */\n    xor_path(bm1, p);\n\n    /* if it's a turd, eliminate it, else append it to the list */\n    if (p->area <= param->turdsize) {\n      path_free(p);\n    } else {\n      list_insert_beforehook(p, plist_hook);\n    }\n\n    if (bm1->h > 0) { /* to be sure */\n      progress_update(1-y/(double)bm1->h, progress);\n    }\n  }\n\n  pathlist_to_tree(plist, bm1);\n  bm_free(bm1);\n  *plistp = plist;\n\n  progress_update(1.0, progress);\n\n  return 0;\n\n error:\n  bm_free(bm1);\n  list_forall_unlink(p, plist) {\n    path_free(p);\n  }\n  return -1;\n}\n"
  },
  {
    "path": "libs/potrace/decompose.h",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n\n#ifndef DECOMPOSE_H\n#define DECOMPOSE_H\n\n#include \"potracelib.h\"\n#include \"progress.h\"\n#include \"curve.h\"\n\nint bm_to_pathlist(const potrace_bitmap_t *bm, path_t **plistp, const potrace_param_t *param, progress_t *progress);\n\n#endif /* DECOMPOSE_H */\n\n"
  },
  {
    "path": "libs/potrace/lists.h",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n\n#ifndef _PS_LISTS_H\n#define _PS_LISTS_H\n\n/* here we define some general list macros. Because they are macros,\n   they should work on any datatype with a \"->next\" component. Some of\n   them use a \"hook\". If elt and list are of type t* then hook is of\n   type t**. A hook stands for an insertion point in the list, i.e.,\n   either before the first element, or between two elements, or after\n   the last element. If an operation \"sets the hook\" for an element,\n   then the hook is set to just before the element. One can insert\n   something at a hook. One can also unlink at a hook: this means,\n   unlink the element just after the hook. By \"to unlink\", we mean the\n   element is removed from the list, but not deleted. Thus, it and its\n   components still need to be freed. */\n\n/* Note: these macros are somewhat experimental. Only the ones that\n   are actually *used* have been tested. So be careful to test any\n   that you use. Looking at the output of the preprocessor, \"gcc -E\"\n   (possibly piped though \"indent\"), might help too. Also: these\n   macros define some internal (local) variables that start with\n   \"_\". */\n\n/* we enclose macro definitions whose body consists of more than one\n   statement in MACRO_BEGIN and MACRO_END, rather than '{' and '}'.  The\n   reason is that we want to be able to use the macro in a context\n   such as \"if (...) macro(...); else ...\". If we didn't use this obscure\n   trick, we'd have to omit the \";\" in such cases. */\n\n#define MACRO_BEGIN do {\n#define MACRO_END   } while (0)\n\n/* ---------------------------------------------------------------------- */\n/* macros for singly-linked lists */\n\n/* traverse list. At the end, elt is set to NULL. */\n#define list_forall(elt, list)   for (elt=list; elt!=NULL; elt=elt->next)\n\n/* set elt to the first element of list satisfying boolean condition\n   c, or NULL if not found */\n#define list_find(elt, list, c) \\\n  MACRO_BEGIN list_forall(elt, list) if (c) break; MACRO_END\n\n/* like forall, except also set hook for elt. */\n#define list_forall2(elt, list, hook) \\\n  for (elt=list, hook=&list; elt!=NULL; hook=&elt->next, elt=elt->next)\n\n/* same as list_find, except also set hook for elt. */\n#define list_find2(elt, list, c, hook) \\\n  MACRO_BEGIN list_forall2(elt, list, hook) if (c) break; MACRO_END\n\n/* same, except only use hook. */\n#define _list_forall_hook(list, hook) \\\n  for (hook=&list; *hook!=NULL; hook=&(*hook)->next)\n\n/* same, except only use hook. Note: c may only refer to *hook, not elt. */\n#define _list_find_hook(list, c, hook) \\\n  MACRO_BEGIN _list_forall_hook(list, hook) if (c) break; MACRO_END\n\n/* insert element after hook */\n#define list_insert_athook(elt, hook) \\\n  MACRO_BEGIN elt->next = *hook; *hook = elt; MACRO_END\n\n/* insert element before hook */\n#define list_insert_beforehook(elt, hook) \\\n  MACRO_BEGIN elt->next = *hook; *hook = elt; hook=&elt->next; MACRO_END\n\n/* unlink element after hook, let elt be unlinked element, or NULL.\n   hook remains. */\n#define list_unlink_athook(list, elt, hook) \\\n  MACRO_BEGIN \\\n  elt = hook ? *hook : NULL; if (elt) { *hook = elt->next; elt->next = NULL; }\\\n  MACRO_END\n\n/* unlink the specific element, if it is in the list. Otherwise, set\n   elt to NULL */\n#define list_unlink(listtype, list, elt)      \\\n  MACRO_BEGIN  \t       \t       \t       \t      \\\n  listtype **_hook;\t\t\t      \\\n  _list_find_hook(list, *_hook==elt, _hook);  \\\n  list_unlink_athook(list, elt, _hook);\t      \\\n  MACRO_END\n\n/* prepend elt to list */\n#define list_prepend(list, elt) \\\n  MACRO_BEGIN elt->next = list; list = elt; MACRO_END\n\n/* append elt to list. */\n#define list_append(listtype, list, elt)     \\\n  MACRO_BEGIN                                \\\n  listtype **_hook;                          \\\n  _list_forall_hook(list, _hook) {}          \\\n  list_insert_athook(elt, _hook);            \\\n  MACRO_END\n\n/* unlink the first element that satisfies the condition. */\n#define list_unlink_cond(listtype, list, elt, c)     \\\n  MACRO_BEGIN                                        \\\n  listtype **_hook;\t\t\t  \t     \\\n  list_find2(elt, list, c, _hook);                   \\\n  list_unlink_athook(list, elt, _hook);              \\\n  MACRO_END\n\n/* let elt be the nth element of the list, starting to count from 0.\n   Return NULL if out of bounds.   */\n#define list_nth(elt, list, n)                                \\\n  MACRO_BEGIN                                                 \\\n  int _x;  /* only evaluate n once */                         \\\n  for (_x=(n), elt=list; _x && elt; _x--, elt=elt->next) {}   \\\n  MACRO_END\n\n/* let elt be the nth element of the list, starting to count from 0.\n   Return NULL if out of bounds.   */\n#define list_nth_hook(elt, list, n, hook)                     \\\n  MACRO_BEGIN                                                 \\\n  int _x;  /* only evaluate n once */                         \\\n  for (_x=(n), elt=list, hook=&list; _x && elt; _x--, hook=&elt->next, elt=elt->next) {}   \\\n  MACRO_END\n\n/* set n to the length of the list */\n#define list_length(listtype, list, n)                   \\\n  MACRO_BEGIN          \t       \t       \t       \t       \t \\\n  listtype *_elt;   \t\t\t \t\t \\\n  n=0;\t\t\t\t\t \t\t \\\n  list_forall(_elt, list) \t\t \t\t \\\n    n++;\t\t\t\t \t\t \\\n  MACRO_END\n\n/* set n to the index of the first element satisfying cond, or -1 if\n   none found. Also set elt to the element, or NULL if none found. */\n#define list_index(list, n, elt, c)                      \\\n  MACRO_BEGIN\t\t\t\t \t\t \\\n  n=0;\t\t\t\t\t \t\t \\\n  list_forall(elt, list) {\t\t \t\t \\\n    if (c) break;\t\t\t \t\t \\\n    n++;\t\t\t\t \t\t \\\n  }\t\t\t\t\t \t\t \\\n  if (!elt)\t\t\t\t \t\t \\\n    n=-1;\t\t\t\t \t\t \\\n  MACRO_END\n\n/* set n to the number of elements in the list that satisfy condition c */\n#define list_count(list, n, elt, c)                      \\\n  MACRO_BEGIN\t\t\t\t \t\t \\\n  n=0;\t\t\t\t\t \t\t \\\n  list_forall(elt, list) {\t\t \t\t \\\n    if (c) n++;\t\t\t\t \t\t \\\n  }                                                      \\\n  MACRO_END\n\n/* let elt be each element of the list, unlinked. At the end, set list=NULL. */\n#define list_forall_unlink(elt, list) \\\n  for (elt=list; elt ? (list=elt->next, elt->next=NULL), 1 : 0; elt=list)\n\n/* reverse a list (efficient) */\n#define list_reverse(listtype, list)            \\\n  MACRO_BEGIN\t\t\t\t \t\\\n  listtype *_list1=NULL, *elt;\t\t\t\\\n  list_forall_unlink(elt, list) \t\t\\\n    list_prepend(_list1, elt);\t\t\t\\\n  list = _list1;\t\t\t\t\\\n  MACRO_END\n\n/* insert the element ELT just before the first element TMP of the\n   list for which COND holds. Here COND must be a condition of ELT and\n   TMP.  Typical usage is to insert an element into an ordered list:\n   for instance, list_insert_ordered(listtype, list, elt, tmp,\n   elt->size <= tmp->size).  Note: if we give a \"less than or equal\"\n   condition, the new element will be inserted just before a sequence\n   of equal elements. If we give a \"less than\" condition, the new\n   element will be inserted just after a list of equal elements.\n   Note: it is much more efficient to construct a list with\n   list_prepend and then order it with list_merge_sort, than to\n   construct it with list_insert_ordered. */\n#define list_insert_ordered(listtype, list, elt, tmp, cond) \\\n  MACRO_BEGIN                                               \\\n  listtype **_hook;                                         \\\n  _list_find_hook(list, (tmp=*_hook, (cond)), _hook);       \\\n  list_insert_athook(elt, _hook);                           \\\n  MACRO_END\n\n/* sort the given list, according to the comparison condition.\n   Typical usage is list_sort(listtype, list, a, b, a->size <\n   b->size).  Note: if we give \"less than or equal\" condition, each\n   segment of equal elements will be reversed in order. If we give a\n   \"less than\" condition, each segment of equal elements will retain\n   the original order. The latter is slower but sometimes\n   prettier. Average running time: n*n/2. */\n#define list_sort(listtype, list, a, b, cond)            \\\n  MACRO_BEGIN                                            \\\n  listtype *_newlist=NULL;                               \\\n  list_forall_unlink(a, list)                            \\\n    list_insert_ordered(listtype, _newlist, a, b, cond); \\\n  list = _newlist;                                       \\\n  MACRO_END\n\n/* a much faster sort algorithm (merge sort, n log n worst case). It\n   is required that the list type has an additional, unused next1\n   component. Note there is no curious reversal of order of equal\n   elements as for list_sort. */\n\n#define list_mergesort(listtype, list, a, b, cond)              \\\n  MACRO_BEGIN\t\t\t\t\t\t        \\\n  listtype *_elt, **_hook1;\t\t\t\t    \t\\\n\t\t\t\t\t\t\t    \t\\\n  for (_elt=list; _elt; _elt=_elt->next1) {\t\t\t\\\n    _elt->next1 = _elt->next;\t\t\t\t    \t\\\n    _elt->next = NULL;\t\t\t\t\t    \t\\\n  }\t\t\t\t\t\t\t    \t\\\n  do {\t\t\t                               \t    \t\\\n    _hook1 = &(list);\t\t\t\t    \t    \t\\\n    while ((a = *_hook1) != NULL && (b = a->next1) != NULL ) {  \\\n      _elt = b->next1;\t\t\t\t\t    \t\\\n      _list_merge_cond(listtype, a, b, cond, *_hook1);      \t\\\n      _hook1 = &((*_hook1)->next1);\t\t\t    \t\\\n      *_hook1 = _elt;\t\t\t\t            \t\\\n    }\t\t\t\t\t\t\t    \t\\\n  } while (_hook1 != &(list));                                 \t\\\n  MACRO_END\n\n/* merge two sorted lists. Store result at &result */\n#define _list_merge_cond(listtype, a, b, cond, result)   \\\n  MACRO_BEGIN                                            \\\n  listtype **_hook;\t\t\t\t\t \\\n  _hook = &(result);\t\t\t\t\t \\\n  while (1) {                                            \\\n     if (a==NULL) {\t\t\t\t\t \\\n       *_hook = b;\t\t\t\t\t \\\n       break;\t\t\t\t\t\t \\\n     } else if (b==NULL) {\t\t\t\t \\\n       *_hook = a;\t\t\t\t\t \\\n       break;\t\t\t\t\t\t \\\n     } else if (cond) {\t\t\t\t\t \\\n       *_hook = a;\t\t\t\t\t \\\n       _hook = &(a->next);\t\t\t\t \\\n       a = a->next;\t\t\t\t\t \\\n     } else {\t\t\t\t\t\t \\\n       *_hook = b;\t\t\t\t\t \\\n       _hook = &(b->next);\t\t\t\t \\\n       b = b->next;\t\t\t\t\t \\\n     }\t\t\t\t\t\t\t \\\n  }\t\t\t\t\t\t\t \\\n  MACRO_END\n\n/* ---------------------------------------------------------------------- */\n/* macros for doubly-linked lists */\n\n#define dlist_append(head, end, elt)                    \\\n  MACRO_BEGIN  \t       \t       \t       \t       \t       \t \\\n  elt->prev = end;\t\t\t\t\t \\\n  elt->next = NULL;\t\t\t\t\t \\\n  if (end) {\t\t\t\t\t\t \\\n    end->next = elt;\t\t\t\t\t \\\n  } else {  \t\t\t\t\t\t \\\n    head = elt;\t\t\t\t\t\t \\\n  }\t    \t\t\t\t\t\t \\\n  end = elt;\t\t\t\t\t\t \\\n  MACRO_END\n\n/* let elt be each element of the list, unlinked. At the end, set list=NULL. */\n#define dlist_forall_unlink(elt, head, end) \\\n  for (elt=head; elt ? (head=elt->next, elt->next=NULL, elt->prev=NULL), 1 : (end=NULL, 0); elt=head)\n\n/* unlink the first element of the list */\n#define dlist_unlink_first(head, end, elt)               \\\n  MACRO_BEGIN\t\t\t\t       \t       \t \\\n  elt = head;\t\t\t\t\t\t \\\n  if (head) {\t\t\t\t\t\t \\\n    head = head->next;\t\t\t\t\t \\\n    if (head) {\t\t\t\t\t\t \\\n      head->prev = NULL;\t\t\t\t \\\n    } else {\t\t\t\t\t\t \\\n      end = NULL;\t\t\t\t\t \\\n    }    \t\t\t\t\t\t \\\n    elt->prev = NULL;\t\t\t\t\t \\\n    elt->next = NULL;\t\t\t\t\t \\\n  }\t\t\t\t\t\t\t \\\n  MACRO_END\n\n#endif /* _PS_LISTS_H */\n\n"
  },
  {
    "path": "libs/potrace/potracelib.c",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n#ifdef HAVE_CONFIG_H\n#include <config.h>\n#endif\n\n#include <stdlib.h>\n#include <string.h>\n\n#include \"potracelib.h\"\n#include \"curve.h\"\n#include \"decompose.h\"\n#include \"trace.h\"\n#include \"progress.h\"\n\n/* default parameters */\nstatic const potrace_param_t param_default = {\n  2,                             /* turdsize */\n  POTRACE_TURNPOLICY_MINORITY,   /* turnpolicy */\n  1.0,                           /* alphamax */\n  1,                             /* opticurve */\n  0.2,                           /* opttolerance */\n  {\n    NULL,                        /* callback function */\n    NULL,                        /* callback data */\n    0.0, 1.0,                    /* progress range */\n    0.0,                         /* granularity */\n  },\n};\n\n/* Return a fresh copy of the set of default parameters, or NULL on\n   failure with errno set. */\npotrace_param_t *potrace_param_default(void) {\n  potrace_param_t *p;\n\n  p = (potrace_param_t *) malloc(sizeof(potrace_param_t));\n  if (!p) {\n    return NULL;\n  }\n  memcpy(p, &param_default, sizeof(potrace_param_t));\n  return p;\n}\n\n/* On success, returns a Potrace state st with st->status ==\n   POTRACE_STATUS_OK. On failure, returns NULL if no Potrace state\n   could be created (with errno set), or returns an incomplete Potrace\n   state (with st->status == POTRACE_STATUS_INCOMPLETE, and with errno\n   set). Complete or incomplete Potrace state can be freed with\n   potrace_state_free(). */\npotrace_state_t *potrace_trace(const potrace_param_t *param, const potrace_bitmap_t *bm) {\n  int r;\n  path_t *plist = NULL;\n  potrace_state_t *st;\n  progress_t prog;\n  progress_t subprog;\n  \n  /* prepare private progress bar state */\n  prog.callback = param->progress.callback;\n  prog.data = param->progress.data;\n  prog.min = param->progress.min;\n  prog.max = param->progress.max;\n  prog.epsilon = param->progress.epsilon;\n  prog.d_prev = param->progress.min;\n\n  /* allocate state object */\n  st = (potrace_state_t *)malloc(sizeof(potrace_state_t));\n  if (!st) {\n    return NULL;\n  }\n\n  progress_subrange_start(0.0, 0.1, &prog, &subprog);\n\n  /* process the image */\n  r = bm_to_pathlist(bm, &plist, param, &subprog);\n  if (r) {\n    free(st);\n    return NULL;\n  }\n\n  st->status = POTRACE_STATUS_OK;\n  st->plist = plist;\n  st->priv = NULL;  /* private state currently unused */\n\n  progress_subrange_end(&prog, &subprog);\n\n  progress_subrange_start(0.1, 1.0, &prog, &subprog);\n\n  /* partial success. */\n  r = process_path(plist, param, &subprog);\n  if (r) {\n    st->status = POTRACE_STATUS_INCOMPLETE;\n  }\n\n  progress_subrange_end(&prog, &subprog);\n\n  return st;\n}\n\n/* free a Potrace state, without disturbing errno. */\nvoid potrace_state_free(potrace_state_t *st) {\n  pathlist_free(st->plist);\n  free(st);\n}\n\n/* free a parameter list, without disturbing errno. */\nvoid potrace_param_free(potrace_param_t *p) {\n  free(p);\n}\n\nconst char *potrace_version(void) {\n  return \"potracelib \" VERSION \"\";\n}\n"
  },
  {
    "path": "libs/potrace/potracelib.h",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n#ifndef POTRACELIB_H\n#define POTRACELIB_H\n\n/* this file defines the API for the core Potrace library. For a more\n   detailed description of the API, see potracelib.pdf */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* ---------------------------------------------------------------------- */\n/* tracing parameters */\n\n/* turn policies */\n#define POTRACE_TURNPOLICY_BLACK 0\n#define POTRACE_TURNPOLICY_WHITE 1\n#define POTRACE_TURNPOLICY_LEFT 2\n#define POTRACE_TURNPOLICY_RIGHT 3\n#define POTRACE_TURNPOLICY_MINORITY 4\n#define POTRACE_TURNPOLICY_MAJORITY 5\n#define POTRACE_TURNPOLICY_RANDOM 6\n\n/* structure to hold progress bar callback data */\nstruct potrace_progress_s {\n  void (*callback)(double progress, void *privdata); /* callback fn */\n  void *data;          /* callback function's private data */\n  double min, max;     /* desired range of progress, e.g. 0.0 to 1.0 */\n  double epsilon;      /* granularity: can skip smaller increments */\n};\ntypedef struct potrace_progress_s potrace_progress_t;\n\n/* structure to hold tracing parameters */\nstruct potrace_param_s {\n  int turdsize;        /* area of largest path to be ignored */\n  int turnpolicy;      /* resolves ambiguous turns in path decomposition */\n  double alphamax;     /* corner threshold */\n  int opticurve;       /* use curve optimization? */\n  double opttolerance; /* curve optimization tolerance */\n  potrace_progress_t progress; /* progress callback function */\n};\ntypedef struct potrace_param_s potrace_param_t;\n\n/* ---------------------------------------------------------------------- */\n/* bitmaps */\n\n/* native word size */\ntypedef unsigned long potrace_word;\n\n/* Internal bitmap format. The n-th scanline starts at scanline(n) =\n   (map + n*dy). Raster data is stored as a sequence of potrace_words\n   (NOT bytes). The leftmost bit of scanline n is the most significant\n   bit of scanline(n)[0]. */\nstruct potrace_bitmap_s {\n  int w, h;              /* width and height, in pixels */\n  int dy;                /* words per scanline (not bytes) */\n  potrace_word *map;     /* raw data, dy*h words */\n};\ntypedef struct potrace_bitmap_s potrace_bitmap_t;\n\n/* ---------------------------------------------------------------------- */\n/* curves */\n\n/* point */\nstruct potrace_dpoint_s {\n  double x, y;\n};\ntypedef struct potrace_dpoint_s potrace_dpoint_t;\n\n/* segment tags */\n#define POTRACE_CURVETO 1\n#define POTRACE_CORNER 2\n\n/* closed curve segment */\nstruct potrace_curve_s {\n  int n;                    /* number of segments */\n  int *tag;                 /* tag[n]: POTRACE_CURVETO or POTRACE_CORNER */\n  potrace_dpoint_t (*c)[3]; /* c[n][3]: control points. \n\t\t\t       c[n][0] is unused for tag[n]=POTRACE_CORNER */\n};\ntypedef struct potrace_curve_s potrace_curve_t;\n\n/* Linked list of signed curve segments. Also carries a tree structure. */\nstruct potrace_path_s {\n  int area;                         /* area of the bitmap path */\n  int sign;                         /* '+' or '-', depending on orientation */\n  potrace_curve_t curve;            /* this path's vector data */\n\n  struct potrace_path_s *next;      /* linked list structure */\n\n  struct potrace_path_s *childlist; /* tree structure */\n  struct potrace_path_s *sibling;   /* tree structure */\n\n  struct potrace_privpath_s *priv;  /* private state */\n};\ntypedef struct potrace_path_s potrace_path_t;  \n\n/* ---------------------------------------------------------------------- */\n/* Potrace state */\n\n#define POTRACE_STATUS_OK         0\n#define POTRACE_STATUS_INCOMPLETE 1\n\nstruct potrace_state_s {\n  int status;                       \n  potrace_path_t *plist;            /* vector data */\n\n  struct potrace_privstate_s *priv; /* private state */\n};\ntypedef struct potrace_state_s potrace_state_t;\n\n/* ---------------------------------------------------------------------- */\n/* API functions */\n\n/* get default parameters */\npotrace_param_t *potrace_param_default(void);\n\n/* free parameter set */\nvoid potrace_param_free(potrace_param_t *p);\n\n/* trace a bitmap */\npotrace_state_t *potrace_trace(const potrace_param_t *param, \n\t\t\t       const potrace_bitmap_t *bm);\n\n/* free a Potrace state */\nvoid potrace_state_free(potrace_state_t *st);\n\n/* return a static plain text version string identifying this version\n   of potracelib */\nconst char *potrace_version(void);\n\n#ifdef  __cplusplus\n} /* end of extern \"C\" */\n#endif\n\n#endif /* POTRACELIB_H */\n"
  },
  {
    "path": "libs/potrace/progress.h",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n/* operations on potrace_progress_t objects, which are defined in\n   potracelib.h. Note: the code attempts to minimize runtime overhead\n   when no progress monitoring was requested. It also tries to\n   minimize excessive progress calculations beneath the \"epsilon\"\n   threshold. */\n\n#ifndef PROGRESS_H\n#define PROGRESS_H\n\n/* structure to hold progress bar callback data */\nstruct progress_s {\n  void (*callback)(double progress, void *privdata); /* callback fn */\n  void *data;          /* callback function's private data */\n  double min, max;     /* desired range of progress, e.g. 0.0 to 1.0 */\n  double epsilon;      /* granularity: can skip smaller increments */\n  double b;            /* upper limit of subrange in superrange units */\n  double d_prev;       /* previous value of d */\n};\ntypedef struct progress_s progress_t;\n\n/* notify given progress object of current progress. Note that d is\n   given in the 0.0-1.0 range, which will be scaled and translated to\n   the progress object's range. */\nstatic inline void progress_update(double d, progress_t *prog) {\n  double d_scaled;\n\n  if (prog != NULL && prog->callback != NULL) {\n    d_scaled = prog->min * (1-d) + prog->max * d;\n    if (d == 1.0 || d_scaled >= prog->d_prev + prog->epsilon) {\n      prog->callback(prog->min * (1-d) + prog->max * d, prog->data);\n      prog->d_prev = d_scaled;\n    }\n  }\n}\n\n/* start a subrange of the given progress object. The range is\n   narrowed to [a..b], relative to 0.0-1.0 coordinates. If new range\n   is below granularity threshold, disable further subdivisions. */\nstatic inline void progress_subrange_start(double a, double b, const progress_t *prog, progress_t *sub) {\n  double min, max;\n\n  if (prog == NULL || prog->callback == NULL) {\n    sub->callback = NULL;\n    return;\n  }\n\n  min = prog->min * (1-a) + prog->max * a;\n  max = prog->min * (1-b) + prog->max * b;\n\n  if (max - min < prog->epsilon) {\n    sub->callback = NULL;    /* no further progress info in subrange */\n    sub->b = b;\n    return;\n  }\n  sub->callback = prog->callback;\n  sub->data = prog->data;\n  sub->epsilon = prog->epsilon;\n  sub->min = min;\n  sub->max = max;\n  sub->d_prev = prog->d_prev;\n  return;\n}\n\nstatic inline void progress_subrange_end(progress_t *prog, progress_t *sub) {\n  if (prog != NULL && prog->callback != NULL) {\n    if (sub->callback == NULL) {\n      progress_update(sub->b, prog);\n    } else {\n      prog->d_prev = sub->d_prev;\n    }\n  }    \n}\n\n#endif /* PROGRESS_H */\n\n"
  },
  {
    "path": "libs/potrace/trace.c",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n/* transform jaggy paths into smooth curves */\n\n#ifdef HAVE_CONFIG_H\n#include <config.h>\n#endif\n\n#include <stdio.h>\n#include <math.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"potracelib.h\"\n#include \"curve.h\"\n#include \"lists.h\"\n#include \"auxiliary.h\"\n#include \"trace.h\"\n#include \"progress.h\"\n\n#define INFTY 10000000\t/* it suffices that this is longer than any\n\t\t\t   path; it need not be really infinite */\n#define COS179 -0.999847695156\t /* the cosine of 179 degrees */\n\n/* ---------------------------------------------------------------------- */\n#define SAFE_CALLOC(var, n, typ) \\\n  if ((var = (typ *)calloc(n, sizeof(typ))) == NULL) goto calloc_error \n\n/* ---------------------------------------------------------------------- */\n/* auxiliary functions */\n\n/* return a direction that is 90 degrees counterclockwise from p2-p0,\n   but then restricted to one of the major wind directions (n, nw, w, etc) */\nstatic inline point_t dorth_infty(dpoint_t p0, dpoint_t p2) {\n  point_t r;\n  \n  r.y = sign(p2.x-p0.x);\n  r.x = -sign(p2.y-p0.y);\n\n  return r;\n}\n\n/* return (p1-p0)x(p2-p0), the area of the parallelogram */\nstatic inline double dpara(dpoint_t p0, dpoint_t p1, dpoint_t p2) {\n  double x1, y1, x2, y2;\n\n  x1 = p1.x-p0.x;\n  y1 = p1.y-p0.y;\n  x2 = p2.x-p0.x;\n  y2 = p2.y-p0.y;\n\n  return x1*y2 - x2*y1;\n}\n\n/* ddenom/dpara have the property that the square of radius 1 centered\n   at p1 intersects the line p0p2 iff |dpara(p0,p1,p2)| <= ddenom(p0,p2) */\nstatic inline double ddenom(dpoint_t p0, dpoint_t p2) {\n  point_t r = dorth_infty(p0, p2);\n\n  return r.y*(p2.x-p0.x) - r.x*(p2.y-p0.y);\n}\n\n/* return 1 if a <= b < c < a, in a cyclic sense (mod n) */\nstatic inline int cyclic(int a, int b, int c) {\n  if (a<=c) {\n    return (a<=b && b<c);\n  } else {\n    return (a<=b || b<c);\n  }\n}\n\n/* determine the center and slope of the line i..j. Assume i<j. Needs\n   \"sum\" components of p to be set. */\nstatic void pointslope(privpath_t *pp, int i, int j, dpoint_t *ctr, dpoint_t *dir) {\n  /* assume i<j */\n\n  int n = pp->len;\n  sums_t *sums = pp->sums;\n\n  double x, y, x2, xy, y2;\n  double k;\n  double a, b, c, lambda2, l;\n  int r=0; /* rotations from i to j */\n\n  while (j>=n) {\n    j-=n;\n    r+=1;\n  }\n  while (i>=n) {\n    i-=n;\n    r-=1;\n  }\n  while (j<0) {\n    j+=n;\n    r-=1;\n  }\n  while (i<0) {\n    i+=n;\n    r+=1;\n  }\n  \n  x = sums[j+1].x-sums[i].x+r*sums[n].x;\n  y = sums[j+1].y-sums[i].y+r*sums[n].y;\n  x2 = sums[j+1].x2-sums[i].x2+r*sums[n].x2;\n  xy = sums[j+1].xy-sums[i].xy+r*sums[n].xy;\n  y2 = sums[j+1].y2-sums[i].y2+r*sums[n].y2;\n  k = j+1-i+r*n;\n  \n  ctr->x = x/k;\n  ctr->y = y/k;\n\n  a = (x2-(double)x*x/k)/k;\n  b = (xy-(double)x*y/k)/k;\n  c = (y2-(double)y*y/k)/k;\n  \n  lambda2 = (a+c+sqrt((a-c)*(a-c)+4*b*b))/2; /* larger e.value */\n\n  /* now find e.vector for lambda2 */\n  a -= lambda2;\n  c -= lambda2;\n\n  if (fabs(a) >= fabs(c)) {\n    l = sqrt(a*a+b*b);\n    if (l!=0) {\n      dir->x = -b/l;\n      dir->y = a/l;\n    }\n  } else {\n    l = sqrt(c*c+b*b);\n    if (l!=0) {\n      dir->x = -c/l;\n      dir->y = b/l;\n    }\n  }\n  if (l==0) {\n    dir->x = dir->y = 0;   /* sometimes this can happen when k=4:\n\t\t\t      the two eigenvalues coincide */\n  }\n}\n\n/* the type of (affine) quadratic forms, represented as symmetric 3x3\n   matrices.  The value of the quadratic form at a vector (x,y) is v^t\n   Q v, where v = (x,y,1)^t. */\ntypedef double quadform_t[3][3];\n\n/* Apply quadratic form Q to vector w = (w.x,w.y) */\nstatic inline double quadform(quadform_t Q, dpoint_t w) {\n  double v[3];\n  int i, j;\n  double sum;\n\n  v[0] = w.x;\n  v[1] = w.y;\n  v[2] = 1;\n  sum = 0.0;\n\n  for (i=0; i<3; i++) {\n    for (j=0; j<3; j++) {\n      sum += v[i] * Q[i][j] * v[j];\n    }\n  }\n  return sum;\n}\n\n/* calculate p1 x p2 */\nstatic inline int xprod(point_t p1, point_t p2) {\n  return p1.x*p2.y - p1.y*p2.x;\n}\n\n/* calculate (p1-p0)x(p3-p2) */\nstatic inline double cprod(dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3) {\n  double x1, y1, x2, y2;\n\n  x1 = p1.x - p0.x;\n  y1 = p1.y - p0.y;\n  x2 = p3.x - p2.x;\n  y2 = p3.y - p2.y;\n\n  return x1*y2 - x2*y1;\n}\n\n/* calculate (p1-p0)*(p2-p0) */\nstatic inline double iprod(dpoint_t p0, dpoint_t p1, dpoint_t p2) {\n  double x1, y1, x2, y2;\n\n  x1 = p1.x - p0.x;\n  y1 = p1.y - p0.y;\n  x2 = p2.x - p0.x;\n  y2 = p2.y - p0.y;\n\n  return x1*x2 + y1*y2;\n}\n\n/* calculate (p1-p0)*(p3-p2) */\nstatic inline double iprod1(dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3) {\n  double x1, y1, x2, y2;\n\n  x1 = p1.x - p0.x;\n  y1 = p1.y - p0.y;\n  x2 = p3.x - p2.x;\n  y2 = p3.y - p2.y;\n\n  return x1*x2 + y1*y2;\n}\n\n/* calculate distance between two points */\nstatic inline double ddist(dpoint_t p, dpoint_t q) {\n  return sqrt(sq(p.x-q.x)+sq(p.y-q.y));\n}\n\n/* calculate point of a bezier curve */\nstatic inline dpoint_t bezier(double t, dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3) {\n  double s = 1-t;\n  dpoint_t res;\n\n  /* Note: a good optimizing compiler (such as gcc-3) reduces the\n     following to 16 multiplications, using common subexpression\n     elimination. */\n\n  res.x = s*s*s*p0.x + 3*(s*s*t)*p1.x + 3*(t*t*s)*p2.x + t*t*t*p3.x;\n  res.y = s*s*s*p0.y + 3*(s*s*t)*p1.y + 3*(t*t*s)*p2.y + t*t*t*p3.y;\n\n  return res;\n}\n\n/* calculate the point t in [0..1] on the (convex) bezier curve\n   (p0,p1,p2,p3) which is tangent to q1-q0. Return -1.0 if there is no\n   solution in [0..1]. */\nstatic double tangent(dpoint_t p0, dpoint_t p1, dpoint_t p2, dpoint_t p3, dpoint_t q0, dpoint_t q1) {\n  double A, B, C;   /* (1-t)^2 A + 2(1-t)t B + t^2 C = 0 */\n  double a, b, c;   /* a t^2 + b t + c = 0 */\n  double d, s, r1, r2;\n\n  A = cprod(p0, p1, q0, q1);\n  B = cprod(p1, p2, q0, q1);\n  C = cprod(p2, p3, q0, q1);\n\n  a = A - 2*B + C;\n  b = -2*A + 2*B;\n  c = A;\n  \n  d = b*b - 4*a*c;\n\n  if (a==0 || d<0) {\n    return -1.0;\n  }\n\n  s = sqrt(d);\n\n  r1 = (-b + s) / (2 * a);\n  r2 = (-b - s) / (2 * a);\n\n  if (r1 >= 0 && r1 <= 1) {\n    return r1;\n  } else if (r2 >= 0 && r2 <= 1) {\n    return r2;\n  } else {\n    return -1.0;\n  }\n}\n\n/* ---------------------------------------------------------------------- */\n/* Preparation: fill in the sum* fields of a path (used for later\n   rapid summing). Return 0 on success, 1 with errno set on\n   failure. */\nstatic int calc_sums(privpath_t *pp) {\n  int i, x, y;\n  int n = pp->len;\n\n  SAFE_CALLOC(pp->sums, pp->len+1, sums_t);\n\n  /* origin */\n  pp->x0 = pp->pt[0].x;\n  pp->y0 = pp->pt[0].y;\n\n  /* preparatory computation for later fast summing */\n  pp->sums[0].x2 = pp->sums[0].xy = pp->sums[0].y2 = pp->sums[0].x = pp->sums[0].y = 0;\n  for (i=0; i<n; i++) {\n    x = pp->pt[i].x - pp->x0;\n    y = pp->pt[i].y - pp->y0;\n    pp->sums[i+1].x = pp->sums[i].x + x;\n    pp->sums[i+1].y = pp->sums[i].y + y;\n    pp->sums[i+1].x2 = pp->sums[i].x2 + (double)x*x;\n    pp->sums[i+1].xy = pp->sums[i].xy + (double)x*y;\n    pp->sums[i+1].y2 = pp->sums[i].y2 + (double)y*y;\n  }\n  return 0;  \n\n calloc_error:\n  return 1;\n}\n\n/* ---------------------------------------------------------------------- */\n/* Stage 1: determine the straight subpaths (Sec. 2.2.1). Fill in the\n   \"lon\" component of a path object (based on pt/len).\tFor each i,\n   lon[i] is the furthest index such that a straight line can be drawn\n   from i to lon[i]. Return 1 on error with errno set, else 0. */\n\n/* this algorithm depends on the fact that the existence of straight\n   subpaths is a triplewise property. I.e., there exists a straight\n   line through squares i0,...,in iff there exists a straight line\n   through i,j,k, for all i0<=i<j<k<=in. (Proof?) */\n\n/* this implementation of calc_lon is O(n^2). It replaces an older\n   O(n^3) version. A \"constraint\" means that future points must\n   satisfy xprod(constraint[0], cur) >= 0 and xprod(constraint[1],\n   cur) <= 0. */\n\n/* Remark for Potrace 1.1: the current implementation of calc_lon is\n   more complex than the implementation found in Potrace 1.0, but it\n   is considerably faster. The introduction of the \"nc\" data structure\n   means that we only have to test the constraints for \"corner\"\n   points. On a typical input file, this speeds up the calc_lon\n   function by a factor of 31.2, thereby decreasing its time share\n   within the overall Potrace algorithm from 72.6% to 7.82%, and\n   speeding up the overall algorithm by a factor of 3.36. On another\n   input file, calc_lon was sped up by a factor of 6.7, decreasing its\n   time share from 51.4% to 13.61%, and speeding up the overall\n   algorithm by a factor of 1.78. In any case, the savings are\n   substantial. */\n\n/* returns 0 on success, 1 on error with errno set */\nstatic int calc_lon(privpath_t *pp) {\n  point_t *pt = pp->pt;\n  int n = pp->len;\n  int i, j, k, k1;\n  int ct[4], dir;\n  point_t constraint[2];\n  point_t cur;\n  point_t off;\n  int *pivk = NULL;  /* pivk[n] */\n  int *nc = NULL;    /* nc[n]: next corner */\n  point_t dk;  /* direction of k-k1 */\n  int a, b, c, d;\n\n  SAFE_CALLOC(pivk, n, int);\n  SAFE_CALLOC(nc, n, int);\n\n  /* initialize the nc data structure. Point from each point to the\n     furthest future point to which it is connected by a vertical or\n     horizontal segment. We take advantage of the fact that there is\n     always a direction change at 0 (due to the path decomposition\n     algorithm). But even if this were not so, there is no harm, as\n     in practice, correctness does not depend on the word \"furthest\"\n     above.  */\n  k = 0;\n  for (i=n-1; i>=0; i--) {\n    if (pt[i].x != pt[k].x && pt[i].y != pt[k].y) {\n      k = i+1;  /* necessarily i<n-1 in this case */\n    }\n    nc[i] = k;\n  }\n\n  SAFE_CALLOC(pp->lon, n, int);\n\n  /* determine pivot points: for each i, let pivk[i] be the furthest k\n     such that all j with i<j<k lie on a line connecting i,k. */\n  \n  for (i=n-1; i>=0; i--) {\n    ct[0] = ct[1] = ct[2] = ct[3] = 0;\n\n    /* keep track of \"directions\" that have occurred */\n    dir = (3+3*(pt[mod(i+1,n)].x-pt[i].x)+(pt[mod(i+1,n)].y-pt[i].y))/2;\n    ct[dir]++;\n\n    constraint[0].x = 0;\n    constraint[0].y = 0;\n    constraint[1].x = 0;\n    constraint[1].y = 0;\n\n    /* find the next k such that no straight line from i to k */\n    k = nc[i];\n    k1 = i;\n    while (1) {\n      \n      dir = (3+3*sign(pt[k].x-pt[k1].x)+sign(pt[k].y-pt[k1].y))/2;\n      ct[dir]++;\n\n      /* if all four \"directions\" have occurred, cut this path */\n      if (ct[0] && ct[1] && ct[2] && ct[3]) {\n\tpivk[i] = k1;\n\tgoto foundk;\n      }\n\n      cur.x = pt[k].x - pt[i].x;\n      cur.y = pt[k].y - pt[i].y;\n\n      /* see if current constraint is violated */\n      if (xprod(constraint[0], cur) < 0 || xprod(constraint[1], cur) > 0) {\n\tgoto constraint_viol;\n      }\n\n      /* else, update constraint */\n      if (abs(cur.x) <= 1 && abs(cur.y) <= 1) {\n\t/* no constraint */\n      } else {\n\toff.x = cur.x + ((cur.y>=0 && (cur.y>0 || cur.x<0)) ? 1 : -1);\n\toff.y = cur.y + ((cur.x<=0 && (cur.x<0 || cur.y<0)) ? 1 : -1);\n\tif (xprod(constraint[0], off) >= 0) {\n\t  constraint[0] = off;\n\t}\n\toff.x = cur.x + ((cur.y<=0 && (cur.y<0 || cur.x<0)) ? 1 : -1);\n\toff.y = cur.y + ((cur.x>=0 && (cur.x>0 || cur.y<0)) ? 1 : -1);\n\tif (xprod(constraint[1], off) <= 0) {\n\t  constraint[1] = off;\n\t}\n      }\t\n      k1 = k;\n      k = nc[k1];\n      if (!cyclic(k,i,k1)) {\n\tbreak;\n      }\n    }\n  constraint_viol:\n    /* k1 was the last \"corner\" satisfying the current constraint, and\n       k is the first one violating it. We now need to find the last\n       point along k1..k which satisfied the constraint. */\n    dk.x = sign(pt[k].x-pt[k1].x);\n    dk.y = sign(pt[k].y-pt[k1].y);\n    cur.x = pt[k1].x - pt[i].x;\n    cur.y = pt[k1].y - pt[i].y;\n    /* find largest integer j such that xprod(constraint[0], cur+j*dk)\n       >= 0 and xprod(constraint[1], cur+j*dk) <= 0. Use bilinearity\n       of xprod. */\n    a = xprod(constraint[0], cur);\n    b = xprod(constraint[0], dk);\n    c = xprod(constraint[1], cur);\n    d = xprod(constraint[1], dk);\n    /* find largest integer j such that a+j*b>=0 and c+j*d<=0. This\n       can be solved with integer arithmetic. */\n    j = INFTY;\n    if (b<0) {\n      j = floordiv(a,-b);\n    }\n    if (d>0) {\n      j = min(j, floordiv(-c,d));\n    }\n    pivk[i] = mod(k1+j,n);\n  foundk:\n    ;\n  } /* for i */\n\n  /* clean up: for each i, let lon[i] be the largest k such that for\n     all i' with i<=i'<k, i'<k<=pivk[i']. */\n\n  j=pivk[n-1];\n  pp->lon[n-1]=j;\n  for (i=n-2; i>=0; i--) {\n    if (cyclic(i+1,pivk[i],j)) {\n      j=pivk[i];\n    }\n    pp->lon[i]=j;\n  }\n\n  for (i=n-1; cyclic(mod(i+1,n),j,pp->lon[i]); i--) {\n    pp->lon[i] = j;\n  }\n\n  free(pivk);\n  free(nc);\n  return 0;\n\n calloc_error:\n  free(pivk);\n  free(nc);\n  return 1;\n}\n\n\n/* ---------------------------------------------------------------------- */\n/* Stage 2: calculate the optimal polygon (Sec. 2.2.2-2.2.4). */ \n\n/* Auxiliary function: calculate the penalty of an edge from i to j in\n   the given path. This needs the \"lon\" and \"sum*\" data. */\n\nstatic double penalty3(privpath_t *pp, int i, int j) {\n  int n = pp->len;\n  point_t *pt = pp->pt;\n  sums_t *sums = pp->sums;\n\n  /* assume 0<=i<j<=n  */\n  double x, y, x2, xy, y2;\n  double k;\n  double a, b, c, s;\n  double px, py, ex, ey;\n\n  int r = 0; /* rotations from i to j */\n\n  if (j>=n) {\n    j -= n;\n    r = 1;\n  }\n  \n  /* critical inner loop: the \"if\" gives a 4.6 percent speedup */\n  if (r == 0) {\n    x = sums[j+1].x - sums[i].x;\n    y = sums[j+1].y - sums[i].y;\n    x2 = sums[j+1].x2 - sums[i].x2;\n    xy = sums[j+1].xy - sums[i].xy;\n    y2 = sums[j+1].y2 - sums[i].y2;\n    k = j+1 - i;\n  } else {\n    x = sums[j+1].x - sums[i].x + sums[n].x;\n    y = sums[j+1].y - sums[i].y + sums[n].y;\n    x2 = sums[j+1].x2 - sums[i].x2 + sums[n].x2;\n    xy = sums[j+1].xy - sums[i].xy + sums[n].xy;\n    y2 = sums[j+1].y2 - sums[i].y2 + sums[n].y2;\n    k = j+1 - i + n;\n  } \n\n  px = (pt[i].x + pt[j].x) / 2.0 - pt[0].x;\n  py = (pt[i].y + pt[j].y) / 2.0 - pt[0].y;\n  ey = (pt[j].x - pt[i].x);\n  ex = -(pt[j].y - pt[i].y);\n\n  a = ((x2 - 2*x*px) / k + px*px);\n  b = ((xy - x*py - y*px) / k + px*py);\n  c = ((y2 - 2*y*py) / k + py*py);\n  \n  s = ex*ex*a + 2*ex*ey*b + ey*ey*c;\n\n  return sqrt(s);\n}\n\n/* find the optimal polygon. Fill in the m and po components. Return 1\n   on failure with errno set, else 0. Non-cyclic version: assumes i=0\n   is in the polygon. Fixme: implement cyclic version. */\nstatic int bestpolygon(privpath_t *pp)\n{\n  int i, j, m, k;     \n  int n = pp->len;\n  double *pen = NULL; /* pen[n+1]: penalty vector */\n  int *prev = NULL;   /* prev[n+1]: best path pointer vector */\n  int *clip0 = NULL;  /* clip0[n]: longest segment pointer, non-cyclic */\n  int *clip1 = NULL;  /* clip1[n+1]: backwards segment pointer, non-cyclic */\n  int *seg0 = NULL;    /* seg0[m+1]: forward segment bounds, m<=n */\n  int *seg1 = NULL;   /* seg1[m+1]: backward segment bounds, m<=n */\n  double thispen;\n  double best;\n  int c;\n\n  SAFE_CALLOC(pen, n+1, double);\n  SAFE_CALLOC(prev, n+1, int);\n  SAFE_CALLOC(clip0, n, int);\n  SAFE_CALLOC(clip1, n+1, int);\n  SAFE_CALLOC(seg0, n+1, int);\n  SAFE_CALLOC(seg1, n+1, int);\n\n  /* calculate clipped paths */\n  for (i=0; i<n; i++) {\n    c = mod(pp->lon[mod(i-1,n)]-1,n);\n    if (c == i) {\n      c = mod(i+1,n);\n    }\n    if (c < i) {\n      clip0[i] = n;\n    } else {\n      clip0[i] = c;\n    }\n  }\n\n  /* calculate backwards path clipping, non-cyclic. j <= clip0[i] iff\n     clip1[j] <= i, for i,j=0..n. */\n  j = 1;\n  for (i=0; i<n; i++) {\n    while (j <= clip0[i]) {\n      clip1[j] = i;\n      j++;\n    }\n  }\n\n  /* calculate seg0[j] = longest path from 0 with j segments */\n  i = 0;\n  for (j=0; i<n; j++) {\n    seg0[j] = i;\n    i = clip0[i];\n  }\n  seg0[j] = n;\n  m = j;\n\n  /* calculate seg1[j] = longest path to n with m-j segments */\n  i = n;\n  for (j=m; j>0; j--) {\n    seg1[j] = i;\n    i = clip1[i];\n  }\n  seg1[0] = 0;\n\n  /* now find the shortest path with m segments, based on penalty3 */\n  /* note: the outer 2 loops jointly have at most n iterations, thus\n     the worst-case behavior here is quadratic. In practice, it is\n     close to linear since the inner loop tends to be short. */\n  pen[0]=0;\n  for (j=1; j<=m; j++) {\n    for (i=seg1[j]; i<=seg0[j]; i++) {\n      best = -1;\n      for (k=seg0[j-1]; k>=clip1[i]; k--) {\n\tthispen = penalty3(pp, k, i) + pen[k];\n\tif (best < 0 || thispen < best) {\n\t  prev[i] = k;\n\t  best = thispen;\n\t}\n      }\n      pen[i] = best;\n    }\n  }\n\n  pp->m = m;\n  SAFE_CALLOC(pp->po, m, int);\n\n  /* read off shortest path */\n  for (i=n, j=m-1; i>0; j--) {\n    i = prev[i];\n    pp->po[j] = i;\n  }\n\n  free(pen);\n  free(prev);\n  free(clip0);\n  free(clip1);\n  free(seg0);\n  free(seg1);\n  return 0;\n  \n calloc_error:\n  free(pen);\n  free(prev);\n  free(clip0);\n  free(clip1);\n  free(seg0);\n  free(seg1);\n  return 1;\n}\n\n/* ---------------------------------------------------------------------- */\n/* Stage 3: vertex adjustment (Sec. 2.3.1). */\n\n/* Adjust vertices of optimal polygon: calculate the intersection of\n   the two \"optimal\" line segments, then move it into the unit square\n   if it lies outside. Return 1 with errno set on error; 0 on\n   success. */\n\nstatic int adjust_vertices(privpath_t *pp) {\n  int m = pp->m;\n  int *po = pp->po;\n  int n = pp->len;\n  point_t *pt = pp->pt;\n  int x0 = pp->x0;\n  int y0 = pp->y0;\n\n  dpoint_t *ctr = NULL;      /* ctr[m] */\n  dpoint_t *dir = NULL;      /* dir[m] */\n  quadform_t *q = NULL;      /* q[m] */\n  double v[3];\n  double d;\n  int i, j, k, l;\n  dpoint_t s;\n  int r;\n\n  SAFE_CALLOC(ctr, m, dpoint_t);\n  SAFE_CALLOC(dir, m, dpoint_t);\n  SAFE_CALLOC(q, m, quadform_t);\n\n  r = privcurve_init(&pp->curve, m);\n  if (r) {\n    goto calloc_error;\n  }\n  \n  /* calculate \"optimal\" point-slope representation for each line\n     segment */\n  for (i=0; i<m; i++) {\n    j = po[mod(i+1,m)];\n    j = mod(j-po[i],n)+po[i];\n    pointslope(pp, po[i], j, &ctr[i], &dir[i]);\n  }\n\n  /* represent each line segment as a singular quadratic form; the\n     distance of a point (x,y) from the line segment will be\n     (x,y,1)Q(x,y,1)^t, where Q=q[i]. */\n  for (i=0; i<m; i++) {\n    d = sq(dir[i].x) + sq(dir[i].y);\n    if (d == 0.0) {\n      for (j=0; j<3; j++) {\n\tfor (k=0; k<3; k++) {\n\t  q[i][j][k] = 0;\n\t}\n      }\n    } else {\n      v[0] = dir[i].y;\n      v[1] = -dir[i].x;\n      v[2] = - v[1] * ctr[i].y - v[0] * ctr[i].x;\n      for (l=0; l<3; l++) {\n\tfor (k=0; k<3; k++) {\n\t  q[i][l][k] = v[l] * v[k] / d;\n\t}\n      }\n    }\n  }\n\n  /* now calculate the \"intersections\" of consecutive segments.\n     Instead of using the actual intersection, we find the point\n     within a given unit square which minimizes the square distance to\n     the two lines. */\n  for (i=0; i<m; i++) {\n    quadform_t Q;\n    dpoint_t w;\n    double dx, dy;\n    double det;\n    double min, cand; /* minimum and candidate for minimum of quad. form */\n    double xmin, ymin;\t/* coordinates of minimum */\n    int z;\n\n    /* let s be the vertex, in coordinates relative to x0/y0 */\n    s.x = pt[po[i]].x-x0;\n    s.y = pt[po[i]].y-y0;\n\n    /* intersect segments i-1 and i */\n\n    j = mod(i-1,m);\n\n    /* add quadratic forms */\n    for (l=0; l<3; l++) {\n      for (k=0; k<3; k++) {\n\tQ[l][k] = q[j][l][k] + q[i][l][k];\n      }\n    }\n    \n    while(1) {\n      /* minimize the quadratic form Q on the unit square */\n      /* find intersection */\n\n#ifdef HAVE_GCC_LOOP_BUG\n      /* work around gcc bug #12243 */\n      free(NULL);\n#endif\n      \n      det = Q[0][0]*Q[1][1] - Q[0][1]*Q[1][0];\n      if (det != 0.0) {\n\tw.x = (-Q[0][2]*Q[1][1] + Q[1][2]*Q[0][1]) / det;\n\tw.y = ( Q[0][2]*Q[1][0] - Q[1][2]*Q[0][0]) / det;\n\tbreak;\n      }\n\n      /* matrix is singular - lines are parallel. Add another,\n\t orthogonal axis, through the center of the unit square */\n      if (Q[0][0]>Q[1][1]) {\n\tv[0] = -Q[0][1];\n\tv[1] = Q[0][0];\n      } else if (Q[1][1]) {\n\tv[0] = -Q[1][1];\n\tv[1] = Q[1][0];\n      } else {\n\tv[0] = 1;\n\tv[1] = 0;\n      }\n      d = sq(v[0]) + sq(v[1]);\n      v[2] = - v[1] * s.y - v[0] * s.x;\n      for (l=0; l<3; l++) {\n\tfor (k=0; k<3; k++) {\n\t  Q[l][k] += v[l] * v[k] / d;\n\t}\n      }\n    }\n    dx = fabs(w.x-s.x);\n    dy = fabs(w.y-s.y);\n    if (dx <= .5 && dy <= .5) {\n      pp->curve.vertex[i].x = w.x+x0;\n      pp->curve.vertex[i].y = w.y+y0;\n      continue;\n    }\n\n    /* the minimum was not in the unit square; now minimize quadratic\n       on boundary of square */\n    min = quadform(Q, s);\n    xmin = s.x;\n    ymin = s.y;\n\n    if (Q[0][0] == 0.0) {\n      goto fixx;\n    }\n    for (z=0; z<2; z++) {   /* value of the y-coordinate */\n      w.y = s.y-0.5+z;\n      w.x = - (Q[0][1] * w.y + Q[0][2]) / Q[0][0];\n      dx = fabs(w.x-s.x);\n      cand = quadform(Q, w);\n      if (dx <= .5 && cand < min) {\n\tmin = cand;\n\txmin = w.x;\n\tymin = w.y;\n      }\n    }\n  fixx:\n    if (Q[1][1] == 0.0) {\n      goto corners;\n    }\n    for (z=0; z<2; z++) {   /* value of the x-coordinate */\n      w.x = s.x-0.5+z;\n      w.y = - (Q[1][0] * w.x + Q[1][2]) / Q[1][1];\n      dy = fabs(w.y-s.y);\n      cand = quadform(Q, w);\n      if (dy <= .5 && cand < min) {\n\tmin = cand;\n\txmin = w.x;\n\tymin = w.y;\n      }\n    }\n  corners:\n    /* check four corners */\n    for (l=0; l<2; l++) {\n      for (k=0; k<2; k++) {\n\tw.x = s.x-0.5+l;\n\tw.y = s.y-0.5+k;\n\tcand = quadform(Q, w);\n\tif (cand < min) {\n\t  min = cand;\n\t  xmin = w.x;\n\t  ymin = w.y;\n\t}\n      }\n    }\n\n    pp->curve.vertex[i].x = xmin + x0;\n    pp->curve.vertex[i].y = ymin + y0;\n    continue;\n  }\n\n  free(ctr);\n  free(dir);\n  free(q);\n  return 0;\n\n calloc_error:\n  free(ctr);\n  free(dir);\n  free(q);\n  return 1;\n}\n\n/* ---------------------------------------------------------------------- */\n/* Stage 4: smoothing and corner analysis (Sec. 2.3.3) */\n\n/* reverse orientation of a path */\nstatic void reverse(privcurve_t *curve) {\n  int m = curve->n;\n  int i, j;\n  dpoint_t tmp;\n\n  for (i=0, j=m-1; i<j; i++, j--) {\n    tmp = curve->vertex[i];\n    curve->vertex[i] = curve->vertex[j];\n    curve->vertex[j] = tmp;\n  }\n}\n\n/* Always succeeds */\nstatic void smooth(privcurve_t *curve, double alphamax) {\n  int m = curve->n;\n\n  int i, j, k;\n  double dd, denom, alpha;\n  dpoint_t p2, p3, p4;\n\n  /* examine each vertex and find its best fit */\n  for (i=0; i<m; i++) {\n    j = mod(i+1, m);\n    k = mod(i+2, m);\n    p4 = interval(1/2.0, curve->vertex[k], curve->vertex[j]);\n\n    denom = ddenom(curve->vertex[i], curve->vertex[k]);\n    if (denom != 0.0) {\n      dd = dpara(curve->vertex[i], curve->vertex[j], curve->vertex[k]) / denom;\n      dd = fabs(dd);\n      alpha = dd>1 ? (1 - 1.0/dd) : 0;\n      alpha = alpha / 0.75;\n    } else {\n      alpha = 4/3.0;\n    }\n    curve->alpha0[j] = alpha;\t /* remember \"original\" value of alpha */\n\n    if (alpha >= alphamax) {  /* pointed corner */\n      curve->tag[j] = POTRACE_CORNER;\n      curve->c[j][1] = curve->vertex[j];\n      curve->c[j][2] = p4;\n    } else {\n      if (alpha < 0.55) {\n\talpha = 0.55;\n      } else if (alpha > 1) {\n\talpha = 1;\n      }\n      p2 = interval(.5+.5*alpha, curve->vertex[i], curve->vertex[j]);\n      p3 = interval(.5+.5*alpha, curve->vertex[k], curve->vertex[j]);\n      curve->tag[j] = POTRACE_CURVETO;\n      curve->c[j][0] = p2;\n      curve->c[j][1] = p3;\n      curve->c[j][2] = p4;\n    }\n    curve->alpha[j] = alpha;\t/* store the \"cropped\" value of alpha */\n    curve->beta[j] = 0.5;\n  }\n  curve->alphacurve = 1;\n\n  return;\n}\n\n/* ---------------------------------------------------------------------- */\n/* Stage 5: Curve optimization (Sec. 2.4) */\n\n/* a private type for the result of opti_penalty */\nstruct opti_s {\n  double pen;\t   /* penalty */\n  dpoint_t c[2];   /* curve parameters */\n  double t, s;\t   /* curve parameters */\n  double alpha;\t   /* curve parameter */\n};\ntypedef struct opti_s opti_t;\n\n/* calculate best fit from i+.5 to j+.5.  Assume i<j (cyclically).\n   Return 0 and set badness and parameters (alpha, beta), if\n   possible. Return 1 if impossible. */\nstatic int opti_penalty(privpath_t *pp, int i, int j, opti_t *res, double opttolerance, int *convc, double *areac) {\n  int m = pp->curve.n;\n  int k, k1, k2, conv, i1;\n  double area, alpha, d, d1, d2;\n  dpoint_t p0, p1, p2, p3, pt;\n  double A, R, A1, A2, A3, A4;\n  double s, t;\n\n  /* check convexity, corner-freeness, and maximum bend < 179 degrees */\n\n  if (i==j) {  /* sanity - a full loop can never be an opticurve */\n    return 1;\n  }\n\n  k = i;\n  i1 = mod(i+1, m);\n  k1 = mod(k+1, m);\n  conv = convc[k1];\n  if (conv == 0) {\n    return 1;\n  }\n  d = ddist(pp->curve.vertex[i], pp->curve.vertex[i1]);\n  for (k=k1; k!=j; k=k1) {\n    k1 = mod(k+1, m);\n    k2 = mod(k+2, m);\n    if (convc[k1] != conv) {\n      return 1;\n    }\n    if (sign(cprod(pp->curve.vertex[i], pp->curve.vertex[i1], pp->curve.vertex[k1], pp->curve.vertex[k2])) != conv) {\n      return 1;\n    }\n    if (iprod1(pp->curve.vertex[i], pp->curve.vertex[i1], pp->curve.vertex[k1], pp->curve.vertex[k2]) < d * ddist(pp->curve.vertex[k1], pp->curve.vertex[k2]) * COS179) {\n      return 1;\n    }\n  }\n\n  /* the curve we're working in: */\n  p0 = pp->curve.c[mod(i,m)][2];\n  p1 = pp->curve.vertex[mod(i+1,m)];\n  p2 = pp->curve.vertex[mod(j,m)];\n  p3 = pp->curve.c[mod(j,m)][2];\n\n  /* determine its area */\n  area = areac[j] - areac[i];\n  area -= dpara(pp->curve.vertex[0], pp->curve.c[i][2], pp->curve.c[j][2])/2;\n  if (i>=j) {\n    area += areac[m];\n  }\n\n  /* find intersection o of p0p1 and p2p3. Let t,s such that o =\n     interval(t,p0,p1) = interval(s,p3,p2). Let A be the area of the\n     triangle (p0,o,p3). */\n\n  A1 = dpara(p0, p1, p2);\n  A2 = dpara(p0, p1, p3);\n  A3 = dpara(p0, p2, p3);\n  /* A4 = dpara(p1, p2, p3); */\n  A4 = A1+A3-A2;    \n  \n  if (A2 == A1) {  /* this should never happen */\n    return 1;\n  }\n\n  t = A3/(A3-A4);\n  s = A2/(A2-A1);\n  A = A2 * t / 2.0;\n  \n  if (A == 0.0) {  /* this should never happen */\n    return 1;\n  }\n\n  R = area / A;\t /* relative area */\n  alpha = 2 - sqrt(4 - R / 0.3);  /* overall alpha for p0-o-p3 curve */\n\n  res->c[0] = interval(t * alpha, p0, p1);\n  res->c[1] = interval(s * alpha, p3, p2);\n  res->alpha = alpha;\n  res->t = t;\n  res->s = s;\n\n  p1 = res->c[0];\n  p2 = res->c[1];  /* the proposed curve is now (p0,p1,p2,p3) */\n\n  res->pen = 0;\n\n  /* calculate penalty */\n  /* check tangency with edges */\n  for (k=mod(i+1,m); k!=j; k=k1) {\n    k1 = mod(k+1,m);\n    t = tangent(p0, p1, p2, p3, pp->curve.vertex[k], pp->curve.vertex[k1]);\n    if (t<-.5) {\n      return 1;\n    }\n    pt = bezier(t, p0, p1, p2, p3);\n    d = ddist(pp->curve.vertex[k], pp->curve.vertex[k1]);\n    if (d == 0.0) {  /* this should never happen */\n      return 1;\n    }\n    d1 = dpara(pp->curve.vertex[k], pp->curve.vertex[k1], pt) / d;\n    if (fabs(d1) > opttolerance) {\n      return 1;\n    }\n    if (iprod(pp->curve.vertex[k], pp->curve.vertex[k1], pt) < 0 || iprod(pp->curve.vertex[k1], pp->curve.vertex[k], pt) < 0) {\n      return 1;\n    }\n    res->pen += sq(d1);\n  }\n\n  /* check corners */\n  for (k=i; k!=j; k=k1) {\n    k1 = mod(k+1,m);\n    t = tangent(p0, p1, p2, p3, pp->curve.c[k][2], pp->curve.c[k1][2]);\n    if (t<-.5) {\n      return 1;\n    }\n    pt = bezier(t, p0, p1, p2, p3);\n    d = ddist(pp->curve.c[k][2], pp->curve.c[k1][2]);\n    if (d == 0.0) {  /* this should never happen */\n      return 1;\n    }\n    d1 = dpara(pp->curve.c[k][2], pp->curve.c[k1][2], pt) / d;\n    d2 = dpara(pp->curve.c[k][2], pp->curve.c[k1][2], pp->curve.vertex[k1]) / d;\n    d2 *= 0.75 * pp->curve.alpha[k1];\n    if (d2 < 0) {\n      d1 = -d1;\n      d2 = -d2;\n    }\n    if (d1 < d2 - opttolerance) {\n      return 1;\n    }\n    if (d1 < d2) {\n      res->pen += sq(d1 - d2);\n    }\n  }\n\n  return 0;\n}\n\n/* optimize the path p, replacing sequences of Bezier segments by a\n   single segment when possible. Return 0 on success, 1 with errno set\n   on failure. */\nstatic int opticurve(privpath_t *pp, double opttolerance) {\n  int m = pp->curve.n;\n  int *pt = NULL;     /* pt[m+1] */\n  double *pen = NULL; /* pen[m+1] */\n  int *len = NULL;    /* len[m+1] */\n  opti_t *opt = NULL; /* opt[m+1] */\n  int om;\n  int i,j,r;\n  opti_t o;\n  dpoint_t p0;\n  int i1;\n  double area;\n  double alpha;\n  double *s = NULL;\n  double *t = NULL;\n\n  int *convc = NULL; /* conv[m]: pre-computed convexities */\n  double *areac = NULL; /* cumarea[m+1]: cache for fast area computation */\n\n  SAFE_CALLOC(pt, m+1, int);\n  SAFE_CALLOC(pen, m+1, double);\n  SAFE_CALLOC(len, m+1, int);\n  SAFE_CALLOC(opt, m+1, opti_t);\n  SAFE_CALLOC(convc, m, int);\n  SAFE_CALLOC(areac, m+1, double);\n\n  /* pre-calculate convexity: +1 = right turn, -1 = left turn, 0 = corner */\n  for (i=0; i<m; i++) {\n    if (pp->curve.tag[i] == POTRACE_CURVETO) {\n      convc[i] = sign(dpara(pp->curve.vertex[mod(i-1,m)], pp->curve.vertex[i], pp->curve.vertex[mod(i+1,m)]));\n    } else {\n      convc[i] = 0;\n    }\n  }\n\n  /* pre-calculate areas */\n  area = 0.0;\n  areac[0] = 0.0;\n  p0 = pp->curve.vertex[0];\n  for (i=0; i<m; i++) {\n    i1 = mod(i+1, m);\n    if (pp->curve.tag[i1] == POTRACE_CURVETO) {\n      alpha = pp->curve.alpha[i1];\n      area += 0.3*alpha*(4-alpha)*dpara(pp->curve.c[i][2], pp->curve.vertex[i1], pp->curve.c[i1][2])/2;\n      area += dpara(p0, pp->curve.c[i][2], pp->curve.c[i1][2])/2;\n    }\n    areac[i+1] = area;\n  }\n\n  pt[0] = -1;\n  pen[0] = 0;\n  len[0] = 0;\n\n  /* Fixme: we always start from a fixed point -- should find the best\n     curve cyclically */\n\n  for (j=1; j<=m; j++) {\n    /* calculate best path from 0 to j */\n    pt[j] = j-1;\n    pen[j] = pen[j-1];\n    len[j] = len[j-1]+1;\n\n    for (i=j-2; i>=0; i--) {\n      r = opti_penalty(pp, i, mod(j,m), &o, opttolerance, convc, areac);\n      if (r) {\n\tbreak;\n      }\n      if (len[j] > len[i]+1 || (len[j] == len[i]+1 && pen[j] > pen[i] + o.pen)) {\n\tpt[j] = i;\n\tpen[j] = pen[i] + o.pen;\n\tlen[j] = len[i] + 1;\n\topt[j] = o;\n      }\n    }\n  }\n  om = len[m];\n  r = privcurve_init(&pp->ocurve, om);\n  if (r) {\n    goto calloc_error;\n  }\n  SAFE_CALLOC(s, om, double);\n  SAFE_CALLOC(t, om, double);\n\n  j = m;\n  for (i=om-1; i>=0; i--) {\n    if (pt[j]==j-1) {\n      pp->ocurve.tag[i]     = pp->curve.tag[mod(j,m)];\n      pp->ocurve.c[i][0]    = pp->curve.c[mod(j,m)][0];\n      pp->ocurve.c[i][1]    = pp->curve.c[mod(j,m)][1];\n      pp->ocurve.c[i][2]    = pp->curve.c[mod(j,m)][2];\n      pp->ocurve.vertex[i]  = pp->curve.vertex[mod(j,m)];\n      pp->ocurve.alpha[i]   = pp->curve.alpha[mod(j,m)];\n      pp->ocurve.alpha0[i]  = pp->curve.alpha0[mod(j,m)];\n      pp->ocurve.beta[i]    = pp->curve.beta[mod(j,m)];\n      s[i] = t[i] = 1.0;\n    } else {\n      pp->ocurve.tag[i] = POTRACE_CURVETO;\n      pp->ocurve.c[i][0] = opt[j].c[0];\n      pp->ocurve.c[i][1] = opt[j].c[1];\n      pp->ocurve.c[i][2] = pp->curve.c[mod(j,m)][2];\n      pp->ocurve.vertex[i] = interval(opt[j].s, pp->curve.c[mod(j,m)][2], pp->curve.vertex[mod(j,m)]);\n      pp->ocurve.alpha[i] = opt[j].alpha;\n      pp->ocurve.alpha0[i] = opt[j].alpha;\n      s[i] = opt[j].s;\n      t[i] = opt[j].t;\n    }\n    j = pt[j];\n  }\n\n  /* calculate beta parameters */\n  for (i=0; i<om; i++) {\n    i1 = mod(i+1,om);\n    pp->ocurve.beta[i] = s[i] / (s[i] + t[i1]);\n  }\n  pp->ocurve.alphacurve = 1;\n\n  free(pt);\n  free(pen);\n  free(len);\n  free(opt);\n  free(s);\n  free(t);\n  free(convc);\n  free(areac);\n  return 0;\n\n calloc_error:\n  free(pt);\n  free(pen);\n  free(len);\n  free(opt);\n  free(s);\n  free(t);\n  free(convc);\n  free(areac);\n  return 1;\n}\n\n/* ---------------------------------------------------------------------- */\n\n#define TRY(x) if (x) goto try_error\n\n/* return 0 on success, 1 on error with errno set. */\nint process_path(path_t *plist, const potrace_param_t *param, progress_t *progress) {\n  path_t *p;\n  double nn = 0, cn = 0;\n\n  if (progress->callback) {\n    /* precompute task size for progress estimates */\n    nn = 0;\n    list_forall (p, plist) {\n      nn += p->priv->len;\n    }\n    cn = 0;\n  }\n  \n  /* call downstream function with each path */\n  list_forall (p, plist) {\n    TRY(calc_sums(p->priv));\n    TRY(calc_lon(p->priv));\n    TRY(bestpolygon(p->priv));\n    TRY(adjust_vertices(p->priv));\n    if (p->sign == '-') {   /* reverse orientation of negative paths */\n      reverse(&p->priv->curve);\n    }\n    smooth(&p->priv->curve, param->alphamax);\n    if (param->opticurve) {\n      TRY(opticurve(p->priv, param->opttolerance));\n      p->priv->fcurve = &p->priv->ocurve;\n    } else {\n      p->priv->fcurve = &p->priv->curve;\n    }\n    privcurve_to_curve(p->priv->fcurve, &p->curve);\n\n    if (progress->callback) {\n      cn += p->priv->len;\n      progress_update(cn/nn, progress);\n    }\n  }\n\n  progress_update(1.0, progress);\n\n  return 0;\n\n try_error:\n  return 1;\n}\n"
  },
  {
    "path": "libs/potrace/trace.h",
    "content": "/* Copyright (C) 2001-2019 Peter Selinger.\n   This file is part of Potrace. It is free software and it is covered\n   by the GNU General Public License. See the file COPYING for details. */\n\n\n#ifndef TRACE_H\n#define TRACE_H\n\n#include \"potracelib.h\"\n#include \"progress.h\"\n#include \"curve.h\"\n\nint process_path(path_t *plist, const potrace_param_t *param, progress_t *progress);\n\n#endif /* TRACE_H */\n"
  },
  {
    "path": "libs/variant/LICENSE.md",
    "content": "Boost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or organization\nobtaining a copy of the software and accompanying documentation covered by\nthis license (the \"Software\") to use, reproduce, display, distribute,\nexecute, and transmit the Software, and to prepare derivative works of the\nSoftware, and to permit third-parties to whom the Software is furnished to\ndo so, all subject to the following:\n\nThe copyright notices in the Software and this entire statement, including\nthe above license grant, this restriction and the following disclaimer,\nmust be included in all copies of the Software, in whole or in part, and\nall derivative works of the Software, unless such copies or derivative\nworks are solely in the form of machine-executable object code generated by\na source language processor.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\nSHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\nFOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\nARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "libs/variant/Makefile.am",
    "content": "noinst_HEADERS = \\\n\tinclude/mpark/variant.hpp\n\nEXTRA_DIST = LICENSE.md\n"
  },
  {
    "path": "libs/variant/include/mpark/variant.hpp",
    "content": "// MPark.Variant\n//\n// Copyright Michael Park, 2015-2017\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)\n\n#ifndef MPARK_VARIANT_HPP\n#define MPARK_VARIANT_HPP\n\n/*\n   variant synopsis\n\nnamespace std {\n\n  // 20.7.2, class template variant\n  template <class... Types>\n  class variant {\n  public:\n\n    // 20.7.2.1, constructors\n    constexpr variant() noexcept(see below);\n    variant(const variant&);\n    variant(variant&&) noexcept(see below);\n\n    template <class T> constexpr variant(T&&) noexcept(see below);\n\n    template <class T, class... Args>\n    constexpr explicit variant(in_place_type_t<T>, Args&&...);\n\n    template <class T, class U, class... Args>\n    constexpr explicit variant(\n        in_place_type_t<T>, initializer_list<U>, Args&&...);\n\n    template <size_t I, class... Args>\n    constexpr explicit variant(in_place_index_t<I>, Args&&...);\n\n    template <size_t I, class U, class... Args>\n    constexpr explicit variant(\n        in_place_index_t<I>, initializer_list<U>, Args&&...);\n\n    // 20.7.2.2, destructor\n    ~variant();\n\n    // 20.7.2.3, assignment\n    variant& operator=(const variant&);\n    variant& operator=(variant&&) noexcept(see below);\n\n    template <class T> variant& operator=(T&&) noexcept(see below);\n\n    // 20.7.2.4, modifiers\n    template <class T, class... Args>\n    T& emplace(Args&&...);\n\n    template <class T, class U, class... Args>\n    T& emplace(initializer_list<U>, Args&&...);\n\n    template <size_t I, class... Args>\n    variant_alternative<I, variant>& emplace(Args&&...);\n\n    template <size_t I, class U, class...  Args>\n    variant_alternative<I, variant>& emplace(initializer_list<U>, Args&&...);\n\n    // 20.7.2.5, value status\n    constexpr bool valueless_by_exception() const noexcept;\n    constexpr size_t index() const noexcept;\n\n    // 20.7.2.6, swap\n    void swap(variant&) noexcept(see below);\n  };\n\n  // 20.7.3, variant helper classes\n  template <class T> struct variant_size; // undefined\n\n  template <class T>\n  constexpr size_t variant_size_v = variant_size<T>::value;\n\n  template <class T> struct variant_size<const T>;\n  template <class T> struct variant_size<volatile T>;\n  template <class T> struct variant_size<const volatile T>;\n\n  template <class... Types>\n  struct variant_size<variant<Types...>>;\n\n  template <size_t I, class T> struct variant_alternative; // undefined\n\n  template <size_t I, class T>\n  using variant_alternative_t = typename variant_alternative<I, T>::type;\n\n  template <size_t I, class T> struct variant_alternative<I, const T>;\n  template <size_t I, class T> struct variant_alternative<I, volatile T>;\n  template <size_t I, class T> struct variant_alternative<I, const volatile T>;\n\n  template <size_t I, class... Types>\n  struct variant_alternative<I, variant<Types...>>;\n\n  constexpr size_t variant_npos = -1;\n\n  // 20.7.4, value access\n  template <class T, class... Types>\n  constexpr bool holds_alternative(const variant<Types...>&) noexcept;\n\n  template <size_t I, class... Types>\n  constexpr variant_alternative_t<I, variant<Types...>>&\n  get(variant<Types...>&);\n\n  template <size_t I, class... Types>\n  constexpr variant_alternative_t<I, variant<Types...>>&&\n  get(variant<Types...>&&);\n\n  template <size_t I, class... Types>\n  constexpr variant_alternative_t<I, variant<Types...>> const&\n  get(const variant<Types...>&);\n\n  template <size_t I, class... Types>\n  constexpr variant_alternative_t<I, variant<Types...>> const&&\n  get(const variant<Types...>&&);\n\n  template <class T, class...  Types>\n  constexpr T& get(variant<Types...>&);\n\n  template <class T, class... Types>\n  constexpr T&& get(variant<Types...>&&);\n\n  template <class T, class... Types>\n  constexpr const T& get(const variant<Types...>&);\n\n  template <class T, class... Types>\n  constexpr const T&& get(const variant<Types...>&&);\n\n  template <size_t I, class... Types>\n  constexpr add_pointer_t<variant_alternative_t<I, variant<Types...>>>\n  get_if(variant<Types...>*) noexcept;\n\n  template <size_t I, class... Types>\n  constexpr add_pointer_t<const variant_alternative_t<I, variant<Types...>>>\n  get_if(const variant<Types...>*) noexcept;\n\n  template <class T, class... Types>\n  constexpr add_pointer_t<T>\n  get_if(variant<Types...>*) noexcept;\n\n  template <class T, class... Types>\n  constexpr add_pointer_t<const T>\n  get_if(const variant<Types...>*) noexcept;\n\n  // 20.7.5, relational operators\n  template <class... Types>\n  constexpr bool operator==(const variant<Types...>&, const variant<Types...>&);\n\n  template <class... Types>\n  constexpr bool operator!=(const variant<Types...>&, const variant<Types...>&);\n\n  template <class... Types>\n  constexpr bool operator<(const variant<Types...>&, const variant<Types...>&);\n\n  template <class... Types>\n  constexpr bool operator>(const variant<Types...>&, const variant<Types...>&);\n\n  template <class... Types>\n  constexpr bool operator<=(const variant<Types...>&, const variant<Types...>&);\n\n  template <class... Types>\n  constexpr bool operator>=(const variant<Types...>&, const variant<Types...>&);\n\n  // 20.7.6, visitation\n  template <class Visitor, class... Variants>\n  constexpr see below visit(Visitor&&, Variants&&...);\n\n  // 20.7.7, class monostate\n  struct monostate;\n\n  // 20.7.8, monostate relational operators\n  constexpr bool operator<(monostate, monostate) noexcept;\n  constexpr bool operator>(monostate, monostate) noexcept;\n  constexpr bool operator<=(monostate, monostate) noexcept;\n  constexpr bool operator>=(monostate, monostate) noexcept;\n  constexpr bool operator==(monostate, monostate) noexcept;\n  constexpr bool operator!=(monostate, monostate) noexcept;\n\n  // 20.7.9, specialized algorithms\n  template <class... Types>\n  void swap(variant<Types...>&, variant<Types...>&) noexcept(see below);\n\n  // 20.7.10, class bad_variant_access\n  class bad_variant_access;\n\n  // 20.7.11, hash support\n  template <class T> struct hash;\n  template <class... Types> struct hash<variant<Types...>>;\n  template <> struct hash<monostate>;\n\n} // namespace std\n\n*/\n\n#include <cstddef>\n#include <exception>\n#include <functional>\n#include <initializer_list>\n#include <new>\n#include <type_traits>\n#include <utility>\n\n// MPark.Variant\n//\n// Copyright Michael Park, 2015-2017\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)\n\n#ifndef MPARK_CONFIG_HPP\n#define MPARK_CONFIG_HPP\n\n// MSVC 2015 Update 3.\n#if __cplusplus < 201103L && (!defined(_MSC_VER) || _MSC_FULL_VER < 190024210)\n#error \"MPark.Variant requires C++11 support.\"\n#endif\n\n#ifndef __has_attribute\n#define __has_attribute(x) 0\n#endif\n\n#ifndef __has_builtin\n#define __has_builtin(x) 0\n#endif\n\n#ifndef __has_include\n#define __has_include(x) 0\n#endif\n\n#ifndef __has_feature\n#define __has_feature(x) 0\n#endif\n\n#if __has_attribute(always_inline) || defined(__GNUC__)\n#define MPARK_ALWAYS_INLINE __attribute__((__always_inline__)) inline\n#elif defined(_MSC_VER)\n#define MPARK_ALWAYS_INLINE __forceinline\n#else\n#define MPARK_ALWAYS_INLINE inline\n#endif\n\n#if __has_builtin(__builtin_addressof) || \\\n    (defined(__GNUC__) && __GNUC__ >= 7) || defined(_MSC_VER)\n#define MPARK_BUILTIN_ADDRESSOF\n#endif\n\n#if __has_builtin(__builtin_unreachable) || defined(__GNUC__)\n#define MPARK_BUILTIN_UNREACHABLE __builtin_unreachable()\n#elif defined(_MSC_VER)\n#define MPARK_BUILTIN_UNREACHABLE __assume(false)\n#else\n#define MPARK_BUILTIN_UNREACHABLE\n#endif\n\n#if __has_builtin(__type_pack_element)\n#define MPARK_TYPE_PACK_ELEMENT\n#endif\n\n#if defined(__cpp_constexpr) && __cpp_constexpr >= 200704 && \\\n    !(defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ == 9)\n#define MPARK_CPP11_CONSTEXPR\n#endif\n\n#if defined(__cpp_constexpr) && __cpp_constexpr >= 201304\n#define MPARK_CPP14_CONSTEXPR\n#endif\n\n#if __has_feature(cxx_exceptions) || defined(__cpp_exceptions) || \\\n    (defined(_MSC_VER) && defined(_CPPUNWIND))\n#define MPARK_EXCEPTIONS\n#endif\n\n#if defined(__cpp_generic_lambdas) || defined(_MSC_VER)\n#define MPARK_GENERIC_LAMBDAS\n#endif\n\n#if defined(__cpp_lib_integer_sequence)\n#define MPARK_INTEGER_SEQUENCE\n#endif\n\n#if defined(__cpp_return_type_deduction) || defined(_MSC_VER)\n#define MPARK_RETURN_TYPE_DEDUCTION\n#endif\n\n#if defined(__cpp_lib_transparent_operators) || defined(_MSC_VER)\n#define MPARK_TRANSPARENT_OPERATORS\n#endif\n\n#if defined(__cpp_variable_templates) || defined(_MSC_VER)\n#define MPARK_VARIABLE_TEMPLATES\n#endif\n\n#if !defined(__GLIBCXX__) || __has_include(<codecvt>)  // >= libstdc++-5\n#define MPARK_TRIVIALITY_TYPE_TRAITS\n#define MPARK_INCOMPLETE_TYPE_TRAITS\n#endif\n\n#endif  // MPARK_CONFIG_HPP\n\n// MPark.Variant\n//\n// Copyright Michael Park, 2015-2017\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)\n\n#ifndef MPARK_IN_PLACE_HPP\n#define MPARK_IN_PLACE_HPP\n\n#include <cstddef>\n\n\nnamespace mpark {\n\n  struct in_place_t { explicit in_place_t() = default; };\n\n  template <std::size_t I>\n  struct in_place_index_t { explicit in_place_index_t() = default; };\n\n  template <typename T>\n  struct in_place_type_t { explicit in_place_type_t() = default; };\n\n#ifdef MPARK_VARIABLE_TEMPLATES\n  constexpr in_place_t in_place{};\n\n  template <std::size_t I> constexpr in_place_index_t<I> in_place_index{};\n\n  template <typename T> constexpr in_place_type_t<T> in_place_type{};\n#endif\n\n}  // namespace mpark\n\n#endif  // MPARK_IN_PLACE_HPP\n\n// MPark.Variant\n//\n// Copyright Michael Park, 2015-2017\n//\n// Distributed under the Boost Software License, Version 1.0.\n// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)\n\n#ifndef MPARK_LIB_HPP\n#define MPARK_LIB_HPP\n\n#include <memory>\n#include <functional>\n#include <type_traits>\n#include <utility>\n\n\n#define MPARK_RETURN(...) \\\n  noexcept(noexcept(__VA_ARGS__)) -> decltype(__VA_ARGS__) { return __VA_ARGS__; }\n\nnamespace mpark {\n  namespace lib {\n    template <typename T>\n    struct identity { using type = T; };\n\n    inline namespace cpp14 {\n      template <typename T, std::size_t N>\n      struct array {\n        constexpr const T &operator[](std::size_t index) const {\n          return data[index];\n        }\n\n        T data[N == 0 ? 1 : N];\n      };\n\n      template <typename T>\n      using add_pointer_t = typename std::add_pointer<T>::type;\n\n      template <typename... Ts>\n      using common_type_t = typename std::common_type<Ts...>::type;\n\n      template <typename T>\n      using decay_t = typename std::decay<T>::type;\n\n      template <bool B, typename T = void>\n      using enable_if_t = typename std::enable_if<B, T>::type;\n\n      template <typename T>\n      using remove_const_t = typename std::remove_const<T>::type;\n\n      template <typename T>\n      using remove_reference_t = typename std::remove_reference<T>::type;\n\n      template <typename T>\n      inline constexpr T &&forward(remove_reference_t<T> &t) noexcept {\n        return static_cast<T &&>(t);\n      }\n\n      template <typename T>\n      inline constexpr T &&forward(remove_reference_t<T> &&t) noexcept {\n        static_assert(!std::is_lvalue_reference<T>::value,\n                      \"can not forward an rvalue as an lvalue\");\n        return static_cast<T &&>(t);\n      }\n\n      template <typename T>\n      inline constexpr remove_reference_t<T> &&move(T &&t) noexcept {\n        return static_cast<remove_reference_t<T> &&>(t);\n      }\n\n#ifdef MPARK_INTEGER_SEQUENCE\n      using std::integer_sequence;\n      using std::index_sequence;\n      using std::make_index_sequence;\n      using std::index_sequence_for;\n#else\n      template <typename T, T... Is>\n      struct integer_sequence {\n        using value_type = T;\n        static constexpr std::size_t size() noexcept { return sizeof...(Is); }\n      };\n\n      template <std::size_t... Is>\n      using index_sequence = integer_sequence<std::size_t, Is...>;\n\n      template <typename Lhs, typename Rhs>\n      struct make_index_sequence_concat;\n\n      template <std::size_t... Lhs, std::size_t... Rhs>\n      struct make_index_sequence_concat<index_sequence<Lhs...>,\n                                        index_sequence<Rhs...>>\n          : identity<index_sequence<Lhs..., (sizeof...(Lhs) + Rhs)...>> {};\n\n      template <std::size_t N>\n      struct make_index_sequence_impl;\n\n      template <std::size_t N>\n      using make_index_sequence = typename make_index_sequence_impl<N>::type;\n\n      template <std::size_t N>\n      struct make_index_sequence_impl\n          : make_index_sequence_concat<make_index_sequence<N / 2>,\n                                       make_index_sequence<N - (N / 2)>> {};\n\n      template <>\n      struct make_index_sequence_impl<0> : identity<index_sequence<>> {};\n\n      template <>\n      struct make_index_sequence_impl<1> : identity<index_sequence<0>> {};\n\n      template <typename... Ts>\n      using index_sequence_for = make_index_sequence<sizeof...(Ts)>;\n#endif\n\n      // <functional>\n#ifdef MPARK_TRANSPARENT_OPERATORS\n      using equal_to = std::equal_to<>;\n#else\n      struct equal_to {\n        template <typename Lhs, typename Rhs>\n        inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const\n          MPARK_RETURN(lib::forward<Lhs>(lhs) == lib::forward<Rhs>(rhs))\n      };\n#endif\n\n#ifdef MPARK_TRANSPARENT_OPERATORS\n      using not_equal_to = std::not_equal_to<>;\n#else\n      struct not_equal_to {\n        template <typename Lhs, typename Rhs>\n        inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const\n          MPARK_RETURN(lib::forward<Lhs>(lhs) != lib::forward<Rhs>(rhs))\n      };\n#endif\n\n#ifdef MPARK_TRANSPARENT_OPERATORS\n      using less = std::less<>;\n#else\n      struct less {\n        template <typename Lhs, typename Rhs>\n        inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const\n          MPARK_RETURN(lib::forward<Lhs>(lhs) < lib::forward<Rhs>(rhs))\n      };\n#endif\n\n#ifdef MPARK_TRANSPARENT_OPERATORS\n      using greater = std::greater<>;\n#else\n      struct greater {\n        template <typename Lhs, typename Rhs>\n        inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const\n          MPARK_RETURN(lib::forward<Lhs>(lhs) > lib::forward<Rhs>(rhs))\n      };\n#endif\n\n#ifdef MPARK_TRANSPARENT_OPERATORS\n      using less_equal = std::less_equal<>;\n#else\n      struct less_equal {\n        template <typename Lhs, typename Rhs>\n        inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const\n          MPARK_RETURN(lib::forward<Lhs>(lhs) <= lib::forward<Rhs>(rhs))\n      };\n#endif\n\n#ifdef MPARK_TRANSPARENT_OPERATORS\n      using greater_equal = std::greater_equal<>;\n#else\n      struct greater_equal {\n        template <typename Lhs, typename Rhs>\n        inline constexpr auto operator()(Lhs &&lhs, Rhs &&rhs) const\n          MPARK_RETURN(lib::forward<Lhs>(lhs) >= lib::forward<Rhs>(rhs))\n      };\n#endif\n    }  // namespace cpp14\n\n    inline namespace cpp17 {\n\n      // <type_traits>\n      template <bool B>\n      using bool_constant = std::integral_constant<bool, B>;\n\n      template <typename...>\n      struct voider : identity<void> {};\n\n      template <typename... Ts>\n      using void_t = typename voider<Ts...>::type;\n\n      namespace detail {\n        namespace swappable {\n\n          using std::swap;\n\n          template <typename T>\n          struct is_swappable {\n            private:\n            template <typename U,\n                      typename = decltype(swap(std::declval<U &>(),\n                                               std::declval<U &>()))>\n            inline static std::true_type test(int);\n\n            template <typename U>\n            inline static std::false_type test(...);\n\n            public:\n            static constexpr bool value = decltype(test<T>(0))::value;\n          };\n\n          template <bool IsSwappable, typename T>\n          struct is_nothrow_swappable {\n            static constexpr bool value =\n                noexcept(swap(std::declval<T &>(), std::declval<T &>()));\n          };\n\n          template <typename T>\n          struct is_nothrow_swappable<false, T> : std::false_type {};\n\n        }  // namespace swappable\n      }  // namespace detail\n\n      using detail::swappable::is_swappable;\n\n      template <typename T>\n      using is_nothrow_swappable =\n          detail::swappable::is_nothrow_swappable<is_swappable<T>::value, T>;\n\n      // <functional>\n      namespace detail {\n\n        template <typename T>\n        struct is_reference_wrapper : std::false_type {};\n\n        template <typename T>\n        struct is_reference_wrapper<std::reference_wrapper<T>>\n            : std::true_type {};\n\n        template <bool, int>\n        struct Invoke;\n\n        template <>\n        struct Invoke<true /* pmf */, 0 /* is_base_of */> {\n          template <typename R, typename T, typename Arg, typename... Args>\n          inline static constexpr auto invoke(R T::*pmf, Arg &&arg, Args &&... args)\n            MPARK_RETURN((lib::forward<Arg>(arg).*pmf)(lib::forward<Args>(args)...))\n        };\n\n        template <>\n        struct Invoke<true /* pmf */, 1 /* is_reference_wrapper */> {\n          template <typename R, typename T, typename Arg, typename... Args>\n          inline static constexpr auto invoke(R T::*pmf, Arg &&arg, Args &&... args)\n            MPARK_RETURN((lib::forward<Arg>(arg).get().*pmf)(lib::forward<Args>(args)...))\n        };\n\n        template <>\n        struct Invoke<true /* pmf */, 2 /* otherwise */> {\n          template <typename R, typename T, typename Arg, typename... Args>\n          inline static constexpr auto invoke(R T::*pmf, Arg &&arg, Args &&... args)\n            MPARK_RETURN(((*lib::forward<Arg>(arg)).*pmf)(lib::forward<Args>(args)...))\n        };\n\n        template <>\n        struct Invoke<false /* pmo */, 0 /* is_base_of */> {\n          template <typename R, typename T, typename Arg>\n          inline static constexpr auto invoke(R T::*pmo, Arg &&arg)\n            MPARK_RETURN(lib::forward<Arg>(arg).*pmo)\n        };\n\n        template <>\n        struct Invoke<false /* pmo */, 1 /* is_reference_wrapper */> {\n          template <typename R, typename T, typename Arg>\n          inline static constexpr auto invoke(R T::*pmo, Arg &&arg)\n            MPARK_RETURN(lib::forward<Arg>(arg).get().*pmo)\n        };\n\n        template <>\n        struct Invoke<false /* pmo */, 2 /* otherwise */> {\n          template <typename R, typename T, typename Arg>\n          inline static constexpr auto invoke(R T::*pmo, Arg &&arg)\n              MPARK_RETURN((*lib::forward<Arg>(arg)).*pmo)\n        };\n\n        template <typename R, typename T, typename Arg, typename... Args>\n        inline constexpr auto invoke(R T::*f, Arg &&arg, Args &&... args)\n          MPARK_RETURN(\n              Invoke<std::is_function<R>::value,\n                     (std::is_base_of<T, lib::decay_t<Arg>>::value\n                          ? 0\n                          : is_reference_wrapper<lib::decay_t<Arg>>::value\n                                ? 1\n                                : 2)>::invoke(f,\n                                              lib::forward<Arg>(arg),\n                                              lib::forward<Args>(args)...))\n\n#ifdef _MSC_VER\n#pragma warning(push)\n#pragma warning(disable : 4100)\n#endif\n        template <typename F, typename... Args>\n        inline constexpr auto invoke(F &&f, Args &&... args)\n          MPARK_RETURN(lib::forward<F>(f)(lib::forward<Args>(args)...))\n#ifdef _MSC_VER\n#pragma warning(pop)\n#endif\n      }  // namespace detail\n\n      template <typename F, typename... Args>\n      inline constexpr auto invoke(F &&f, Args &&... args)\n        MPARK_RETURN(detail::invoke(lib::forward<F>(f),\n                                    lib::forward<Args>(args)...))\n\n      namespace detail {\n\n        template <typename Void, typename, typename...>\n        struct invoke_result {};\n\n        template <typename F, typename... Args>\n        struct invoke_result<void_t<decltype(lib::invoke(\n                                 std::declval<F>(), std::declval<Args>()...))>,\n                             F,\n                             Args...>\n            : identity<decltype(\n                  lib::invoke(std::declval<F>(), std::declval<Args>()...))> {};\n\n      }  // namespace detail\n\n      template <typename F, typename... Args>\n      using invoke_result = detail::invoke_result<void, F, Args...>;\n\n      template <typename F, typename... Args>\n      using invoke_result_t = typename invoke_result<F, Args...>::type;\n\n      namespace detail {\n\n        template <typename Void, typename, typename...>\n        struct is_invocable : std::false_type {};\n\n        template <typename F, typename... Args>\n        struct is_invocable<void_t<invoke_result_t<F, Args...>>, F, Args...>\n            : std::true_type {};\n\n        template <typename Void, typename, typename, typename...>\n        struct is_invocable_r : std::false_type {};\n\n        template <typename R, typename F, typename... Args>\n        struct is_invocable_r<void_t<invoke_result_t<F, Args...>>,\n                              R,\n                              F,\n                              Args...>\n            : std::is_convertible<invoke_result_t<F, Args...>, R> {};\n\n      }  // namespace detail\n\n      template <typename F, typename... Args>\n      using is_invocable = detail::is_invocable<void, F, Args...>;\n\n      template <typename R, typename F, typename... Args>\n      using is_invocable_r = detail::is_invocable_r<void, R, F, Args...>;\n\n      namespace detail {\n\n        template <bool Invocable, typename F, typename... Args>\n        struct is_nothrow_invocable {\n          static constexpr bool value =\n              noexcept(lib::invoke(std::declval<F>(), std::declval<Args>()...));\n        };\n\n        template <typename F, typename... Args>\n        struct is_nothrow_invocable<false, F, Args...> : std::false_type {};\n\n        template <bool Invocable, typename R, typename F, typename... Args>\n        struct is_nothrow_invocable_r {\n          private:\n          inline static R impl() {\n            return lib::invoke(std::declval<F>(), std::declval<Args>()...);\n          }\n\n          public:\n          static constexpr bool value = noexcept(impl());\n        };\n\n        template <typename R, typename F, typename... Args>\n        struct is_nothrow_invocable_r<false, R, F, Args...> : std::false_type {};\n\n      }  // namespace detail\n\n      template <typename F, typename... Args>\n      using is_nothrow_invocable = detail::\n          is_nothrow_invocable<is_invocable<F, Args...>::value, F, Args...>;\n\n      template <typename R, typename F, typename... Args>\n      using is_nothrow_invocable_r =\n          detail::is_nothrow_invocable_r<is_invocable_r<R, F, Args...>::value,\n                                         R,\n                                         F,\n                                         Args...>;\n\n      // <memory>\n#ifdef MPARK_BUILTIN_ADDRESSOF\n      template <typename T>\n      inline constexpr T *addressof(T &arg) noexcept {\n        return __builtin_addressof(arg);\n      }\n#else\n      namespace detail {\n\n        namespace has_addressof_impl {\n\n          struct fail;\n\n          template <typename T>\n          inline fail operator&(T &&);\n\n          template <typename T>\n          inline static constexpr bool impl() {\n            return (std::is_class<T>::value || std::is_union<T>::value) &&\n                   !std::is_same<decltype(&std::declval<T &>()), fail>::value;\n          }\n\n        }  // namespace has_addressof_impl\n\n        template <typename T>\n        using has_addressof = bool_constant<has_addressof_impl::impl<T>()>;\n\n        template <typename T>\n        inline constexpr T *addressof(T &arg, std::true_type) noexcept {\n          return std::addressof(arg);\n        }\n\n        template <typename T>\n        inline constexpr T *addressof(T &arg, std::false_type) noexcept {\n          return &arg;\n        }\n\n      }  // namespace detail\n\n      template <typename T>\n      inline constexpr T *addressof(T &arg) noexcept {\n        return detail::addressof(arg, detail::has_addressof<T>{});\n      }\n#endif\n\n      template <typename T>\n      inline constexpr T *addressof(const T &&) = delete;\n\n    }  // namespace cpp17\n\n    template <typename T>\n    struct remove_all_extents : identity<T> {};\n\n    template <typename T, std::size_t N>\n    struct remove_all_extents<array<T, N>> : remove_all_extents<T> {};\n\n    template <typename T>\n    using remove_all_extents_t = typename remove_all_extents<T>::type;\n\n    template <std::size_t N>\n    using size_constant = std::integral_constant<std::size_t, N>;\n\n    template <std::size_t I, typename T>\n    struct indexed_type : size_constant<I> { using type = T; };\n\n    template <bool... Bs>\n    using all = std::is_same<integer_sequence<bool, true, Bs...>,\n                             integer_sequence<bool, Bs..., true>>;\n\n#ifdef MPARK_TYPE_PACK_ELEMENT\n    template <std::size_t I, typename... Ts>\n    using type_pack_element_t = __type_pack_element<I, Ts...>;\n#else\n    template <std::size_t I, typename... Ts>\n    struct type_pack_element_impl {\n      private:\n      template <typename>\n      struct set;\n\n      template <std::size_t... Is>\n      struct set<index_sequence<Is...>> : indexed_type<Is, Ts>... {};\n\n      template <typename T>\n      inline static std::enable_if<true, T> impl(indexed_type<I, T>);\n\n      inline static std::enable_if<false> impl(...);\n\n      public:\n      using type = decltype(impl(set<index_sequence_for<Ts...>>{}));\n    };\n\n    template <std::size_t I, typename... Ts>\n    using type_pack_element = typename type_pack_element_impl<I, Ts...>::type;\n\n    template <std::size_t I, typename... Ts>\n    using type_pack_element_t = typename type_pack_element<I, Ts...>::type;\n#endif\n\n#ifdef MPARK_TRIVIALITY_TYPE_TRAITS\n    using std::is_trivially_copy_constructible;\n    using std::is_trivially_move_constructible;\n    using std::is_trivially_copy_assignable;\n    using std::is_trivially_move_assignable;\n#else\n    template <typename T>\n    struct is_trivially_copy_constructible\n        : bool_constant<\n              std::is_copy_constructible<T>::value && __has_trivial_copy(T)> {};\n\n    template <typename T>\n    struct is_trivially_move_constructible : bool_constant<__is_trivial(T)> {};\n\n    template <typename T>\n    struct is_trivially_copy_assignable\n        : bool_constant<\n              std::is_copy_assignable<T>::value && __has_trivial_assign(T)> {};\n\n    template <typename T>\n    struct is_trivially_move_assignable : bool_constant<__is_trivial(T)> {};\n#endif\n\n    template <typename T, bool>\n    struct dependent_type : T {};\n\n    template <typename Is, std::size_t J>\n    struct push_back;\n\n    template <typename Is, std::size_t J>\n    using push_back_t = typename push_back<Is, J>::type;\n\n    template <std::size_t... Is, std::size_t J>\n    struct push_back<index_sequence<Is...>, J> {\n      using type = index_sequence<Is..., J>;\n    };\n\n  }  // namespace lib\n}  // namespace mpark\n\n#undef MPARK_RETURN\n\n#endif  // MPARK_LIB_HPP\n\n\nnamespace mpark {\n\n#ifdef MPARK_RETURN_TYPE_DEDUCTION\n\n#define AUTO auto\n#define AUTO_RETURN(...) { return __VA_ARGS__; }\n\n#define AUTO_REFREF auto &&\n#define AUTO_REFREF_RETURN(...) { return __VA_ARGS__; }\n\n#define DECLTYPE_AUTO decltype(auto)\n#define DECLTYPE_AUTO_RETURN(...) { return __VA_ARGS__; }\n\n#else\n\n#define AUTO auto\n#define AUTO_RETURN(...) \\\n  -> lib::decay_t<decltype(__VA_ARGS__)> { return __VA_ARGS__; }\n\n#define AUTO_REFREF auto\n#define AUTO_REFREF_RETURN(...)                                           \\\n  -> decltype((__VA_ARGS__)) {                                            \\\n    static_assert(std::is_reference<decltype((__VA_ARGS__))>::value, \"\"); \\\n    return __VA_ARGS__;                                                   \\\n  }\n\n#define DECLTYPE_AUTO auto\n#define DECLTYPE_AUTO_RETURN(...) \\\n  -> decltype(__VA_ARGS__) { return __VA_ARGS__; }\n\n#endif\n\n  class bad_variant_access : public std::exception {\n    public:\n    virtual const char *what() const noexcept override { return \"bad_variant_access\"; }\n  };\n\n  [[noreturn]] inline void throw_bad_variant_access() {\n#ifdef MPARK_EXCEPTIONS\n    throw bad_variant_access{};\n#else\n    std::terminate();\n    MPARK_BUILTIN_UNREACHABLE;\n#endif\n  }\n\n  template <typename... Ts>\n  class variant;\n\n  template <typename T>\n  struct variant_size;\n\n#ifdef MPARK_VARIABLE_TEMPLATES\n  template <typename T>\n  constexpr std::size_t variant_size_v = variant_size<T>::value;\n#endif\n\n  template <typename T>\n  struct variant_size<const T> : variant_size<T> {};\n\n  template <typename T>\n  struct variant_size<volatile T> : variant_size<T> {};\n\n  template <typename T>\n  struct variant_size<const volatile T> : variant_size<T> {};\n\n  template <typename... Ts>\n  struct variant_size<variant<Ts...>> : lib::size_constant<sizeof...(Ts)> {};\n\n  template <std::size_t I, typename T>\n  struct variant_alternative;\n\n  template <std::size_t I, typename T>\n  using variant_alternative_t = typename variant_alternative<I, T>::type;\n\n  template <std::size_t I, typename T>\n  struct variant_alternative<I, const T>\n      : std::add_const<variant_alternative_t<I, T>> {};\n\n  template <std::size_t I, typename T>\n  struct variant_alternative<I, volatile T>\n      : std::add_volatile<variant_alternative_t<I, T>> {};\n\n  template <std::size_t I, typename T>\n  struct variant_alternative<I, const volatile T>\n      : std::add_cv<variant_alternative_t<I, T>> {};\n\n  template <std::size_t I, typename... Ts>\n  struct variant_alternative<I, variant<Ts...>> {\n    static_assert(I < sizeof...(Ts),\n                  \"index out of bounds in `std::variant_alternative<>`\");\n    using type = lib::type_pack_element_t<I, Ts...>;\n  };\n\n  constexpr std::size_t variant_npos = static_cast<std::size_t>(-1);\n\n  namespace detail {\n\n    constexpr std::size_t not_found = static_cast<std::size_t>(-1);\n    constexpr std::size_t ambiguous = static_cast<std::size_t>(-2);\n\n#ifdef MPARK_CPP14_CONSTEXPR\n    template <typename T, typename... Ts>\n    inline constexpr std::size_t find_index() {\n      constexpr lib::array<bool, sizeof...(Ts)> matches = {\n          {std::is_same<T, Ts>::value...}\n      };\n      std::size_t result = not_found;\n      for (std::size_t i = 0; i < sizeof...(Ts); ++i) {\n        if (matches[i]) {\n          if (result != not_found) {\n            return ambiguous;\n          }\n          result = i;\n        }\n      }\n      return result;\n    }\n#else\n    inline constexpr std::size_t find_index_impl(std::size_t result,\n                                                 std::size_t) {\n      return result;\n    }\n\n    template <typename... Bs>\n    inline constexpr std::size_t find_index_impl(std::size_t result,\n                                                 std::size_t idx,\n                                                 bool b,\n                                                 Bs... bs) {\n      return b ? (result != not_found ? ambiguous\n                                      : find_index_impl(idx, idx + 1, bs...))\n               : find_index_impl(result, idx + 1, bs...);\n    }\n\n    template <typename T, typename... Ts>\n    inline constexpr std::size_t find_index() {\n      return find_index_impl(not_found, 0, std::is_same<T, Ts>::value...);\n    }\n#endif\n\n    template <std::size_t I>\n    using find_index_sfinae_impl =\n        lib::enable_if_t<I != not_found && I != ambiguous,\n                         lib::size_constant<I>>;\n\n    template <typename T, typename... Ts>\n    using find_index_sfinae = find_index_sfinae_impl<find_index<T, Ts...>()>;\n\n    template <std::size_t I>\n    struct find_index_checked_impl : lib::size_constant<I> {\n      static_assert(I != not_found, \"the specified type is not found.\");\n      static_assert(I != ambiguous, \"the specified type is ambiguous.\");\n    };\n\n    template <typename T, typename... Ts>\n    using find_index_checked = find_index_checked_impl<find_index<T, Ts...>()>;\n\n    struct valueless_t {};\n\n    enum class Trait { TriviallyAvailable, Available, Unavailable };\n\n    template <typename T,\n              template <typename> class IsTriviallyAvailable,\n              template <typename> class IsAvailable>\n    inline constexpr Trait trait() {\n      return IsTriviallyAvailable<T>::value\n                 ? Trait::TriviallyAvailable\n                 : IsAvailable<T>::value ? Trait::Available\n                                         : Trait::Unavailable;\n    }\n\n#ifdef MPARK_CPP14_CONSTEXPR\n    template <typename... Traits>\n    inline constexpr Trait common_trait(Traits... traits_) {\n      Trait result = Trait::TriviallyAvailable;\n      lib::array<Trait, sizeof...(Traits)> traits = {{traits_...}};\n      for (std::size_t i = 0; i < sizeof...(Traits); ++i) {\n        Trait t = traits[i];\n        if (static_cast<int>(t) > static_cast<int>(result)) {\n          result = t;\n        }\n      }\n      return result;\n    }\n#else\n    inline constexpr Trait common_trait_impl(Trait result) { return result; }\n\n    template <typename... Traits>\n    inline constexpr Trait common_trait_impl(Trait result,\n                                             Trait t,\n                                             Traits... ts) {\n      return static_cast<int>(t) > static_cast<int>(result)\n                 ? common_trait_impl(t, ts...)\n                 : common_trait_impl(result, ts...);\n    }\n\n    template <typename... Traits>\n    inline constexpr Trait common_trait(Traits... ts) {\n      return common_trait_impl(Trait::TriviallyAvailable, ts...);\n    }\n#endif\n\n    template <typename... Ts>\n    struct traits {\n      static constexpr Trait copy_constructible_trait =\n          common_trait(trait<Ts,\n                             lib::is_trivially_copy_constructible,\n                             std::is_copy_constructible>()...);\n\n      static constexpr Trait move_constructible_trait =\n          common_trait(trait<Ts,\n                             lib::is_trivially_move_constructible,\n                             std::is_move_constructible>()...);\n\n      static constexpr Trait copy_assignable_trait =\n          common_trait(copy_constructible_trait,\n                       trait<Ts,\n                             lib::is_trivially_copy_assignable,\n                             std::is_copy_assignable>()...);\n\n      static constexpr Trait move_assignable_trait =\n          common_trait(move_constructible_trait,\n                       trait<Ts,\n                             lib::is_trivially_move_assignable,\n                             std::is_move_assignable>()...);\n\n      static constexpr Trait destructible_trait =\n          common_trait(trait<Ts,\n                             std::is_trivially_destructible,\n                             std::is_destructible>()...);\n    };\n\n    namespace access {\n\n      struct recursive_union {\n#ifdef MPARK_RETURN_TYPE_DEDUCTION\n        template <typename V>\n        inline static constexpr auto &&get_alt(V &&v, in_place_index_t<0>) {\n          return lib::forward<V>(v).head_;\n        }\n\n        template <typename V, std::size_t I>\n        inline static constexpr auto &&get_alt(V &&v, in_place_index_t<I>) {\n          return get_alt(lib::forward<V>(v).tail_, in_place_index_t<I - 1>{});\n        }\n#else\n        template <std::size_t I, bool Dummy = true>\n        struct get_alt_impl {\n          template <typename V>\n          inline constexpr AUTO_REFREF operator()(V &&v) const\n            AUTO_REFREF_RETURN(get_alt_impl<I - 1>{}(lib::forward<V>(v).tail_))\n        };\n\n        template <bool Dummy>\n        struct get_alt_impl<0, Dummy> {\n          template <typename V>\n          inline constexpr AUTO_REFREF operator()(V &&v) const\n            AUTO_REFREF_RETURN(lib::forward<V>(v).head_)\n        };\n\n        template <typename V, std::size_t I>\n        inline static constexpr AUTO_REFREF get_alt(V &&v, in_place_index_t<I>)\n          AUTO_REFREF_RETURN(get_alt_impl<I>{}(lib::forward<V>(v)))\n#endif\n      };\n\n      struct base {\n        template <std::size_t I, typename V>\n        inline static constexpr AUTO_REFREF get_alt(V &&v)\n#ifdef _MSC_VER\n          AUTO_REFREF_RETURN(recursive_union::get_alt(\n              lib::forward<V>(v).data_, in_place_index_t<I>{}))\n#else\n          AUTO_REFREF_RETURN(recursive_union::get_alt(\n              data(lib::forward<V>(v)), in_place_index_t<I>{}))\n#endif\n      };\n\n      struct variant {\n        template <std::size_t I, typename V>\n        inline static constexpr AUTO_REFREF get_alt(V &&v)\n          AUTO_REFREF_RETURN(base::get_alt<I>(lib::forward<V>(v).impl_))\n      };\n\n    }  // namespace access\n\n    namespace visitation {\n\n#if defined(MPARK_CPP14_CONSTEXPR) && !defined(_MSC_VER)\n#define MPARK_VARIANT_SWITCH_VISIT\n#endif\n\n      struct base {\n        template <typename Visitor, typename... Vs>\n        using dispatch_result_t = decltype(\n            lib::invoke(std::declval<Visitor>(),\n                        access::base::get_alt<0>(std::declval<Vs>())...));\n\n        template <typename Expected>\n        struct expected {\n          template <typename Actual>\n          inline static constexpr bool but_got() {\n            return std::is_same<Expected, Actual>::value;\n          }\n        };\n\n        template <typename Expected, typename Actual>\n        struct visit_return_type_check {\n          static_assert(\n              expected<Expected>::template but_got<Actual>(),\n              \"`visit` requires the visitor to have a single return type\");\n\n          template <typename Visitor, typename... Alts>\n          inline static constexpr DECLTYPE_AUTO invoke(Visitor &&visitor,\n                                                       Alts &&... alts)\n            DECLTYPE_AUTO_RETURN(lib::invoke(lib::forward<Visitor>(visitor),\n                                             lib::forward<Alts>(alts)...))\n        };\n\n#ifdef MPARK_VARIANT_SWITCH_VISIT\n        template <bool B, typename R, typename... ITs>\n        struct dispatcher;\n\n        template <typename R, typename... ITs>\n        struct dispatcher<false, R, ITs...> {\n          template <std::size_t B, typename F, typename... Vs>\n          MPARK_ALWAYS_INLINE static constexpr R dispatch(\n              F &&, typename ITs::type &&..., Vs &&...) {\n            MPARK_BUILTIN_UNREACHABLE;\n          }\n\n          template <std::size_t I, typename F, typename... Vs>\n          MPARK_ALWAYS_INLINE static constexpr R dispatch_case(F &&, Vs &&...) {\n            MPARK_BUILTIN_UNREACHABLE;\n          }\n\n          template <std::size_t B, typename F, typename... Vs>\n          MPARK_ALWAYS_INLINE static constexpr R dispatch_at(std::size_t,\n                                                             F &&,\n                                                             Vs &&...) {\n            MPARK_BUILTIN_UNREACHABLE;\n          }\n        };\n\n        template <typename R, typename... ITs>\n        struct dispatcher<true, R, ITs...> {\n          template <std::size_t B, typename F>\n          MPARK_ALWAYS_INLINE static constexpr R dispatch(\n              F &&f, typename ITs::type &&... visited_vs) {\n            using Expected = R;\n            using Actual = decltype(lib::invoke(\n                lib::forward<F>(f),\n                access::base::get_alt<ITs::value>(\n                    lib::forward<typename ITs::type>(visited_vs))...));\n            return visit_return_type_check<Expected, Actual>::invoke(\n                lib::forward<F>(f),\n                access::base::get_alt<ITs::value>(\n                    lib::forward<typename ITs::type>(visited_vs))...);\n          }\n\n          template <std::size_t B, typename F, typename V, typename... Vs>\n          MPARK_ALWAYS_INLINE static constexpr R dispatch(\n              F &&f, typename ITs::type &&... visited_vs, V &&v, Vs &&... vs) {\n#define MPARK_DISPATCH(I)                                                   \\\n  dispatcher<(I < lib::decay_t<V>::size()),                                 \\\n             R,                                                             \\\n             ITs...,                                                        \\\n             lib::indexed_type<I, V>>::                                     \\\n      template dispatch<0>(lib::forward<F>(f),                              \\\n                           lib::forward<typename ITs::type>(visited_vs)..., \\\n                           lib::forward<V>(v),                              \\\n                           lib::forward<Vs>(vs)...)\n\n#define MPARK_DEFAULT(I)                                                      \\\n  dispatcher<(I < lib::decay_t<V>::size()), R, ITs...>::template dispatch<I>( \\\n      lib::forward<F>(f),                                                     \\\n      lib::forward<typename ITs::type>(visited_vs)...,                        \\\n      lib::forward<V>(v),                                                     \\\n      lib::forward<Vs>(vs)...)\n\n            switch (v.index()) {\n              case B + 0: return MPARK_DISPATCH(B + 0);\n              case B + 1: return MPARK_DISPATCH(B + 1);\n              case B + 2: return MPARK_DISPATCH(B + 2);\n              case B + 3: return MPARK_DISPATCH(B + 3);\n              case B + 4: return MPARK_DISPATCH(B + 4);\n              case B + 5: return MPARK_DISPATCH(B + 5);\n              case B + 6: return MPARK_DISPATCH(B + 6);\n              case B + 7: return MPARK_DISPATCH(B + 7);\n              case B + 8: return MPARK_DISPATCH(B + 8);\n              case B + 9: return MPARK_DISPATCH(B + 9);\n              case B + 10: return MPARK_DISPATCH(B + 10);\n              case B + 11: return MPARK_DISPATCH(B + 11);\n              case B + 12: return MPARK_DISPATCH(B + 12);\n              case B + 13: return MPARK_DISPATCH(B + 13);\n              case B + 14: return MPARK_DISPATCH(B + 14);\n              case B + 15: return MPARK_DISPATCH(B + 15);\n              case B + 16: return MPARK_DISPATCH(B + 16);\n              case B + 17: return MPARK_DISPATCH(B + 17);\n              case B + 18: return MPARK_DISPATCH(B + 18);\n              case B + 19: return MPARK_DISPATCH(B + 19);\n              case B + 20: return MPARK_DISPATCH(B + 20);\n              case B + 21: return MPARK_DISPATCH(B + 21);\n              case B + 22: return MPARK_DISPATCH(B + 22);\n              case B + 23: return MPARK_DISPATCH(B + 23);\n              case B + 24: return MPARK_DISPATCH(B + 24);\n              case B + 25: return MPARK_DISPATCH(B + 25);\n              case B + 26: return MPARK_DISPATCH(B + 26);\n              case B + 27: return MPARK_DISPATCH(B + 27);\n              case B + 28: return MPARK_DISPATCH(B + 28);\n              case B + 29: return MPARK_DISPATCH(B + 29);\n              case B + 30: return MPARK_DISPATCH(B + 30);\n              case B + 31: return MPARK_DISPATCH(B + 31);\n              default: return MPARK_DEFAULT(B + 32);\n            }\n\n#undef MPARK_DEFAULT\n#undef MPARK_DISPATCH\n          }\n\n          template <std::size_t I, typename F, typename... Vs>\n          MPARK_ALWAYS_INLINE static constexpr R dispatch_case(F &&f,\n                                                               Vs &&... vs) {\n            using Expected = R;\n            using Actual = decltype(\n                lib::invoke(lib::forward<F>(f),\n                            access::base::get_alt<I>(lib::forward<Vs>(vs))...));\n            return visit_return_type_check<Expected, Actual>::invoke(\n                lib::forward<F>(f),\n                access::base::get_alt<I>(lib::forward<Vs>(vs))...);\n          }\n\n          template <std::size_t B, typename F, typename V, typename... Vs>\n          MPARK_ALWAYS_INLINE static constexpr R dispatch_at(std::size_t index,\n                                                             F &&f,\n                                                             V &&v,\n                                                             Vs &&... vs) {\n            static_assert(lib::all<(lib::decay_t<V>::size() ==\n                                    lib::decay_t<Vs>::size())...>::value,\n                          \"all of the variants must be the same size.\");\n#define MPARK_DISPATCH_AT(I)                                               \\\n  dispatcher<(I < lib::decay_t<V>::size()), R>::template dispatch_case<I>( \\\n      lib::forward<F>(f), lib::forward<V>(v), lib::forward<Vs>(vs)...)\n\n#define MPARK_DEFAULT(I)                                                 \\\n  dispatcher<(I < lib::decay_t<V>::size()), R>::template dispatch_at<I>( \\\n      index, lib::forward<F>(f), lib::forward<V>(v), lib::forward<Vs>(vs)...)\n\n            switch (index) {\n              case B + 0: return MPARK_DISPATCH_AT(B + 0);\n              case B + 1: return MPARK_DISPATCH_AT(B + 1);\n              case B + 2: return MPARK_DISPATCH_AT(B + 2);\n              case B + 3: return MPARK_DISPATCH_AT(B + 3);\n              case B + 4: return MPARK_DISPATCH_AT(B + 4);\n              case B + 5: return MPARK_DISPATCH_AT(B + 5);\n              case B + 6: return MPARK_DISPATCH_AT(B + 6);\n              case B + 7: return MPARK_DISPATCH_AT(B + 7);\n              case B + 8: return MPARK_DISPATCH_AT(B + 8);\n              case B + 9: return MPARK_DISPATCH_AT(B + 9);\n              case B + 10: return MPARK_DISPATCH_AT(B + 10);\n              case B + 11: return MPARK_DISPATCH_AT(B + 11);\n              case B + 12: return MPARK_DISPATCH_AT(B + 12);\n              case B + 13: return MPARK_DISPATCH_AT(B + 13);\n              case B + 14: return MPARK_DISPATCH_AT(B + 14);\n              case B + 15: return MPARK_DISPATCH_AT(B + 15);\n              case B + 16: return MPARK_DISPATCH_AT(B + 16);\n              case B + 17: return MPARK_DISPATCH_AT(B + 17);\n              case B + 18: return MPARK_DISPATCH_AT(B + 18);\n              case B + 19: return MPARK_DISPATCH_AT(B + 19);\n              case B + 20: return MPARK_DISPATCH_AT(B + 20);\n              case B + 21: return MPARK_DISPATCH_AT(B + 21);\n              case B + 22: return MPARK_DISPATCH_AT(B + 22);\n              case B + 23: return MPARK_DISPATCH_AT(B + 23);\n              case B + 24: return MPARK_DISPATCH_AT(B + 24);\n              case B + 25: return MPARK_DISPATCH_AT(B + 25);\n              case B + 26: return MPARK_DISPATCH_AT(B + 26);\n              case B + 27: return MPARK_DISPATCH_AT(B + 27);\n              case B + 28: return MPARK_DISPATCH_AT(B + 28);\n              case B + 29: return MPARK_DISPATCH_AT(B + 29);\n              case B + 30: return MPARK_DISPATCH_AT(B + 30);\n              case B + 31: return MPARK_DISPATCH_AT(B + 31);\n              default: return MPARK_DEFAULT(B + 32);\n            }\n\n#undef MPARK_DEFAULT\n#undef MPARK_DISPATCH_AT\n          }\n        };\n#else\n        template <typename T>\n        inline static constexpr const T &at(const T &elem) noexcept {\n          return elem;\n        }\n\n        template <typename T, std::size_t N, typename... Is>\n        inline static constexpr const lib::remove_all_extents_t<T> &at(\n            const lib::array<T, N> &elems, std::size_t i, Is... is) noexcept {\n          return at(elems[i], is...);\n        }\n\n        template <typename F, typename... Fs>\n        inline static constexpr lib::array<lib::decay_t<F>, sizeof...(Fs) + 1>\n        make_farray(F &&f, Fs &&... fs) {\n          return {{lib::forward<F>(f), lib::forward<Fs>(fs)...}};\n        }\n\n        template <typename F, typename... Vs>\n        struct make_fmatrix_impl {\n\n          template <std::size_t... Is>\n          inline static constexpr dispatch_result_t<F, Vs...> dispatch(\n              F &&f, Vs &&... vs) {\n            using Expected = dispatch_result_t<F, Vs...>;\n            using Actual = decltype(lib::invoke(\n                lib::forward<F>(f),\n                access::base::get_alt<Is>(lib::forward<Vs>(vs))...));\n            return visit_return_type_check<Expected, Actual>::invoke(\n                lib::forward<F>(f),\n                access::base::get_alt<Is>(lib::forward<Vs>(vs))...);\n          }\n\n#ifdef MPARK_RETURN_TYPE_DEDUCTION\n          template <std::size_t... Is>\n          inline static constexpr auto impl(lib::index_sequence<Is...>) {\n            return &dispatch<Is...>;\n          }\n\n          template <typename Is, std::size_t... Js, typename... Ls>\n          inline static constexpr auto impl(Is,\n                                            lib::index_sequence<Js...>,\n                                            Ls... ls) {\n            return make_farray(impl(lib::push_back_t<Is, Js>{}, ls...)...);\n          }\n#else\n          template <typename...>\n          struct impl;\n\n          template <std::size_t... Is>\n          struct impl<lib::index_sequence<Is...>> {\n            inline constexpr AUTO operator()() const\n              AUTO_RETURN(&dispatch<Is...>)\n          };\n\n          template <typename Is, std::size_t... Js, typename... Ls>\n          struct impl<Is, lib::index_sequence<Js...>, Ls...> {\n            inline constexpr AUTO operator()() const\n              AUTO_RETURN(\n                  make_farray(impl<lib::push_back_t<Is, Js>, Ls...>{}()...))\n          };\n#endif\n        };\n\n#ifdef MPARK_RETURN_TYPE_DEDUCTION\n        template <typename F, typename... Vs>\n        inline static constexpr auto make_fmatrix() {\n          return make_fmatrix_impl<F, Vs...>::impl(\n              lib::index_sequence<>{},\n              lib::make_index_sequence<lib::decay_t<Vs>::size()>{}...);\n        }\n#else\n        template <typename F, typename... Vs>\n        inline static constexpr AUTO make_fmatrix()\n          AUTO_RETURN(\n              typename make_fmatrix_impl<F, Vs...>::template impl<\n                  lib::index_sequence<>,\n                  lib::make_index_sequence<lib::decay_t<Vs>::size()>...>{}())\n#endif\n\n        template <typename F, typename... Vs>\n        struct make_fdiagonal_impl {\n          template <std::size_t I>\n          inline static constexpr dispatch_result_t<F, Vs...> dispatch(\n              F &&f, Vs &&... vs) {\n            using Expected = dispatch_result_t<F, Vs...>;\n            using Actual = decltype(\n                lib::invoke(lib::forward<F>(f),\n                            access::base::get_alt<I>(lib::forward<Vs>(vs))...));\n            return visit_return_type_check<Expected, Actual>::invoke(\n                lib::forward<F>(f),\n                access::base::get_alt<I>(lib::forward<Vs>(vs))...);\n          }\n\n          template <std::size_t... Is>\n          inline static constexpr AUTO impl(lib::index_sequence<Is...>)\n            AUTO_RETURN(make_farray(&dispatch<Is>...))\n        };\n\n        template <typename F, typename V, typename... Vs>\n        inline static constexpr auto make_fdiagonal()\n            -> decltype(make_fdiagonal_impl<F, V, Vs...>::impl(\n                lib::make_index_sequence<lib::decay_t<V>::size()>{})) {\n          static_assert(lib::all<(lib::decay_t<V>::size() ==\n                                  lib::decay_t<Vs>::size())...>::value,\n                        \"all of the variants must be the same size.\");\n          return make_fdiagonal_impl<F, V, Vs...>::impl(\n              lib::make_index_sequence<lib::decay_t<V>::size()>{});\n        }\n#endif\n      };\n\n#if !defined(MPARK_VARIANT_SWITCH_VISIT) && \\\n    (!defined(_MSC_VER) || _MSC_VER >= 1910)\n      template <typename F, typename... Vs>\n      using fmatrix_t = decltype(base::make_fmatrix<F, Vs...>());\n\n      template <typename F, typename... Vs>\n      struct fmatrix {\n        static constexpr fmatrix_t<F, Vs...> value =\n            base::make_fmatrix<F, Vs...>();\n      };\n\n      template <typename F, typename... Vs>\n      constexpr fmatrix_t<F, Vs...> fmatrix<F, Vs...>::value;\n\n      template <typename F, typename... Vs>\n      using fdiagonal_t = decltype(base::make_fdiagonal<F, Vs...>());\n\n      template <typename F, typename... Vs>\n      struct fdiagonal {\n        static constexpr fdiagonal_t<F, Vs...> value =\n            base::make_fdiagonal<F, Vs...>();\n      };\n\n      template <typename F, typename... Vs>\n      constexpr fdiagonal_t<F, Vs...> fdiagonal<F, Vs...>::value;\n#endif\n\n      struct alt {\n        template <typename Visitor, typename... Vs>\n        inline static constexpr DECLTYPE_AUTO visit_alt(Visitor &&visitor,\n                                                        Vs &&... vs)\n#ifdef MPARK_VARIANT_SWITCH_VISIT\n          DECLTYPE_AUTO_RETURN(\n              base::dispatcher<\n                  true,\n                  base::dispatch_result_t<Visitor,\n                                          decltype(as_base(\n                                              lib::forward<Vs>(vs)))...>>::\n                  template dispatch<0>(lib::forward<Visitor>(visitor),\n                                       as_base(lib::forward<Vs>(vs))...))\n#elif !defined(_MSC_VER) || _MSC_VER >= 1910\n          DECLTYPE_AUTO_RETURN(base::at(\n              fmatrix<Visitor &&,\n                      decltype(as_base(lib::forward<Vs>(vs)))...>::value,\n              vs.index()...)(lib::forward<Visitor>(visitor),\n                             as_base(lib::forward<Vs>(vs))...))\n#else\n          DECLTYPE_AUTO_RETURN(base::at(\n              base::make_fmatrix<Visitor &&,\n                      decltype(as_base(lib::forward<Vs>(vs)))...>(),\n              vs.index()...)(lib::forward<Visitor>(visitor),\n                             as_base(lib::forward<Vs>(vs))...))\n#endif\n\n        template <typename Visitor, typename... Vs>\n        inline static constexpr DECLTYPE_AUTO visit_alt_at(std::size_t index,\n                                                           Visitor &&visitor,\n                                                           Vs &&... vs)\n#ifdef MPARK_VARIANT_SWITCH_VISIT\n          DECLTYPE_AUTO_RETURN(\n              base::dispatcher<\n                  true,\n                  base::dispatch_result_t<Visitor,\n                                          decltype(as_base(\n                                              lib::forward<Vs>(vs)))...>>::\n                  template dispatch_at<0>(index,\n                                          lib::forward<Visitor>(visitor),\n                                          as_base(lib::forward<Vs>(vs))...))\n#elif !defined(_MSC_VER) || _MSC_VER >= 1910\n          DECLTYPE_AUTO_RETURN(base::at(\n              fdiagonal<Visitor &&,\n                        decltype(as_base(lib::forward<Vs>(vs)))...>::value,\n              index)(lib::forward<Visitor>(visitor),\n                     as_base(lib::forward<Vs>(vs))...))\n#else\n          DECLTYPE_AUTO_RETURN(base::at(\n              base::make_fdiagonal<Visitor &&,\n                        decltype(as_base(lib::forward<Vs>(vs)))...>(),\n              index)(lib::forward<Visitor>(visitor),\n                     as_base(lib::forward<Vs>(vs))...))\n#endif\n      };\n\n      struct variant {\n        private:\n        template <typename Visitor>\n        struct visitor {\n          template <typename... Values>\n          inline static constexpr bool does_not_handle() {\n            return lib::is_invocable<Visitor, Values...>::value;\n          }\n        };\n\n        template <typename Visitor, typename... Values>\n        struct visit_exhaustiveness_check {\n          static_assert(visitor<Visitor>::template does_not_handle<Values...>(),\n                        \"`visit` requires the visitor to be exhaustive.\");\n\n          inline static constexpr DECLTYPE_AUTO invoke(Visitor &&visitor,\n                                                       Values &&... values)\n            DECLTYPE_AUTO_RETURN(lib::invoke(lib::forward<Visitor>(visitor),\n                                             lib::forward<Values>(values)...))\n        };\n\n        template <typename Visitor>\n        struct value_visitor {\n          Visitor &&visitor_;\n\n          template <typename... Alts>\n          inline constexpr DECLTYPE_AUTO operator()(Alts &&... alts) const\n            DECLTYPE_AUTO_RETURN(\n                visit_exhaustiveness_check<\n                    Visitor,\n                    decltype((lib::forward<Alts>(alts).value))...>::\n                    invoke(lib::forward<Visitor>(visitor_),\n                           lib::forward<Alts>(alts).value...))\n        };\n\n        template <typename Visitor>\n        inline static constexpr AUTO make_value_visitor(Visitor &&visitor)\n          AUTO_RETURN(value_visitor<Visitor>{lib::forward<Visitor>(visitor)})\n\n        public:\n        template <typename Visitor, typename... Vs>\n        inline static constexpr DECLTYPE_AUTO visit_alt(Visitor &&visitor,\n                                                        Vs &&... vs)\n          DECLTYPE_AUTO_RETURN(alt::visit_alt(lib::forward<Visitor>(visitor),\n                                              lib::forward<Vs>(vs).impl_...))\n\n        template <typename Visitor, typename... Vs>\n        inline static constexpr DECLTYPE_AUTO visit_alt_at(std::size_t index,\n                                                           Visitor &&visitor,\n                                                           Vs &&... vs)\n          DECLTYPE_AUTO_RETURN(\n              alt::visit_alt_at(index,\n                                lib::forward<Visitor>(visitor),\n                                lib::forward<Vs>(vs).impl_...))\n\n        template <typename Visitor, typename... Vs>\n        inline static constexpr DECLTYPE_AUTO visit_value(Visitor &&visitor,\n                                                          Vs &&... vs)\n          DECLTYPE_AUTO_RETURN(\n              visit_alt(make_value_visitor(lib::forward<Visitor>(visitor)),\n                        lib::forward<Vs>(vs)...))\n\n        template <typename Visitor, typename... Vs>\n        inline static constexpr DECLTYPE_AUTO visit_value_at(std::size_t index,\n                                                             Visitor &&visitor,\n                                                             Vs &&... vs)\n          DECLTYPE_AUTO_RETURN(\n              visit_alt_at(index,\n                           make_value_visitor(lib::forward<Visitor>(visitor)),\n                           lib::forward<Vs>(vs)...))\n      };\n\n    }  // namespace visitation\n\n    template <std::size_t Index, typename T>\n    struct alt {\n      using value_type = T;\n\n#ifdef _MSC_VER\n#pragma warning(push)\n#pragma warning(disable : 4244)\n#endif\n      template <typename... Args>\n      inline explicit constexpr alt(in_place_t, Args &&... args)\n          : value(lib::forward<Args>(args)...) {}\n#ifdef _MSC_VER\n#pragma warning(pop)\n#endif\n\n      T value;\n    };\n\n    template <Trait DestructibleTrait, std::size_t Index, typename... Ts>\n    union recursive_union;\n\n    template <Trait DestructibleTrait, std::size_t Index>\n    union recursive_union<DestructibleTrait, Index> {};\n\n#define MPARK_VARIANT_RECURSIVE_UNION(destructible_trait, destructor)      \\\n  template <std::size_t Index, typename T, typename... Ts>                 \\\n  union recursive_union<destructible_trait, Index, T, Ts...> {             \\\n    public:                                                                \\\n    inline explicit constexpr recursive_union(valueless_t) noexcept        \\\n        : dummy_{} {}                                                      \\\n                                                                           \\\n    template <typename... Args>                                            \\\n    inline explicit constexpr recursive_union(in_place_index_t<0>,         \\\n                                              Args &&... args)             \\\n        : head_(in_place_t{}, lib::forward<Args>(args)...) {}              \\\n                                                                           \\\n    template <std::size_t I, typename... Args>                             \\\n    inline explicit constexpr recursive_union(in_place_index_t<I>,         \\\n                                              Args &&... args)             \\\n        : tail_(in_place_index_t<I - 1>{}, lib::forward<Args>(args)...) {} \\\n                                                                           \\\n    recursive_union(const recursive_union &) = default;                    \\\n    recursive_union(recursive_union &&) = default;                         \\\n                                                                           \\\n    destructor                                                             \\\n                                                                           \\\n    recursive_union &operator=(const recursive_union &) = default;         \\\n    recursive_union &operator=(recursive_union &&) = default;              \\\n                                                                           \\\n    private:                                                               \\\n    char dummy_;                                                           \\\n    alt<Index, T> head_;                                                   \\\n    recursive_union<destructible_trait, Index + 1, Ts...> tail_;           \\\n                                                                           \\\n    friend struct access::recursive_union;                                 \\\n  }\n\n    MPARK_VARIANT_RECURSIVE_UNION(Trait::TriviallyAvailable,\n                                  ~recursive_union() = default;);\n    MPARK_VARIANT_RECURSIVE_UNION(Trait::Available,\n                                  ~recursive_union() {});\n    MPARK_VARIANT_RECURSIVE_UNION(Trait::Unavailable,\n                                  ~recursive_union() = delete;);\n\n#undef MPARK_VARIANT_RECURSIVE_UNION\n\n    using index_t = unsigned int;\n\n    template <Trait DestructibleTrait, typename... Ts>\n    class base {\n      public:\n      inline explicit constexpr base(valueless_t tag) noexcept\n          : data_(tag), index_(static_cast<index_t>(-1)) {}\n\n      template <std::size_t I, typename... Args>\n      inline explicit constexpr base(in_place_index_t<I>, Args &&... args)\n          : data_(in_place_index_t<I>{}, lib::forward<Args>(args)...),\n            index_(I) {}\n\n      inline constexpr bool valueless_by_exception() const noexcept {\n        return index_ == static_cast<index_t>(-1);\n      }\n\n      inline constexpr std::size_t index() const noexcept {\n        return valueless_by_exception() ? variant_npos : index_;\n      }\n\n      protected:\n      using data_t = recursive_union<DestructibleTrait, 0, Ts...>;\n\n      friend inline constexpr base &as_base(base &b) { return b; }\n      friend inline constexpr const base &as_base(const base &b) { return b; }\n      friend inline constexpr base &&as_base(base &&b) { return lib::move(b); }\n      friend inline constexpr const base &&as_base(const base &&b) { return lib::move(b); }\n\n      friend inline constexpr data_t &data(base &b) { return b.data_; }\n      friend inline constexpr const data_t &data(const base &b) { return b.data_; }\n      friend inline constexpr data_t &&data(base &&b) { return lib::move(b).data_; }\n      friend inline constexpr const data_t &&data(const base &&b) { return lib::move(b).data_; }\n\n      inline static constexpr std::size_t size() { return sizeof...(Ts); }\n\n      data_t data_;\n      index_t index_;\n\n      friend struct access::base;\n      friend struct visitation::base;\n    };\n\n    struct dtor {\n#ifdef _MSC_VER\n#pragma warning(push)\n#pragma warning(disable : 4100)\n#endif\n      template <typename Alt>\n      inline void operator()(Alt &alt) const noexcept { alt.~Alt(); }\n#ifdef _MSC_VER\n#pragma warning(pop)\n#endif\n    };\n\n#if !defined(_MSC_VER) || _MSC_VER >= 1910\n#define MPARK_INHERITING_CTOR(type, base) using base::base;\n#else\n#define MPARK_INHERITING_CTOR(type, base)         \\\n  template <typename... Args>                     \\\n  inline explicit constexpr type(Args &&... args) \\\n      : base(lib::forward<Args>(args)...) {}\n#endif\n\n    template <typename Traits, Trait = Traits::destructible_trait>\n    class destructor;\n\n#define MPARK_VARIANT_DESTRUCTOR(destructible_trait, definition, destroy) \\\n  template <typename... Ts>                                               \\\n  class destructor<traits<Ts...>, destructible_trait>                     \\\n      : public base<destructible_trait, Ts...> {                          \\\n    using super = base<destructible_trait, Ts...>;                        \\\n                                                                          \\\n    public:                                                               \\\n    MPARK_INHERITING_CTOR(destructor, super)                              \\\n    using super::operator=;                                               \\\n                                                                          \\\n    destructor(const destructor &) = default;                             \\\n    destructor(destructor &&) = default;                                  \\\n    definition                                                            \\\n    destructor &operator=(const destructor &) = default;                  \\\n    destructor &operator=(destructor &&) = default;                       \\\n                                                                          \\\n    protected:                                                            \\\n    destroy                                                               \\\n  }\n\n    MPARK_VARIANT_DESTRUCTOR(\n        Trait::TriviallyAvailable,\n        ~destructor() = default;,\n        inline void destroy() noexcept {\n          this->index_ = static_cast<index_t>(-1);\n        });\n\n    MPARK_VARIANT_DESTRUCTOR(\n        Trait::Available,\n        ~destructor() { destroy(); },\n        inline void destroy() noexcept {\n          if (!this->valueless_by_exception()) {\n            visitation::alt::visit_alt(dtor{}, *this);\n          }\n          this->index_ = static_cast<index_t>(-1);\n        });\n\n    MPARK_VARIANT_DESTRUCTOR(\n        Trait::Unavailable,\n        ~destructor() = delete;,\n        inline void destroy() noexcept = delete;);\n\n#undef MPARK_VARIANT_DESTRUCTOR\n\n    template <typename Traits>\n    class constructor : public destructor<Traits> {\n      using super = destructor<Traits>;\n\n      public:\n      MPARK_INHERITING_CTOR(constructor, super)\n      using super::operator=;\n\n      protected:\n#ifndef MPARK_GENERIC_LAMBDAS\n      struct ctor {\n        template <typename LhsAlt, typename RhsAlt>\n        inline void operator()(LhsAlt &lhs_alt, RhsAlt &&rhs_alt) const {\n          constructor::construct_alt(lhs_alt,\n                                     lib::forward<RhsAlt>(rhs_alt).value);\n        }\n      };\n#endif\n\n      template <std::size_t I, typename T, typename... Args>\n      inline static T &construct_alt(alt<I, T> &a, Args &&... args) {\n        auto *result = ::new (static_cast<void *>(lib::addressof(a)))\n            alt<I, T>(in_place_t{}, lib::forward<Args>(args)...);\n        return result->value;\n      }\n\n      template <typename Rhs>\n      inline static void generic_construct(constructor &lhs, Rhs &&rhs) {\n        lhs.destroy();\n        if (!rhs.valueless_by_exception()) {\n          visitation::alt::visit_alt_at(\n              rhs.index(),\n#ifdef MPARK_GENERIC_LAMBDAS\n              [](auto &lhs_alt, auto &&rhs_alt) {\n                constructor::construct_alt(\n                    lhs_alt, lib::forward<decltype(rhs_alt)>(rhs_alt).value);\n              }\n#else\n              ctor{}\n#endif\n              ,\n              lhs,\n              lib::forward<Rhs>(rhs));\n          lhs.index_ = rhs.index_;\n        }\n      }\n    };\n\n    template <typename Traits, Trait = Traits::move_constructible_trait>\n    class move_constructor;\n\n#define MPARK_VARIANT_MOVE_CONSTRUCTOR(move_constructible_trait, definition) \\\n  template <typename... Ts>                                                  \\\n  class move_constructor<traits<Ts...>, move_constructible_trait>            \\\n      : public constructor<traits<Ts...>> {                                  \\\n    using super = constructor<traits<Ts...>>;                                \\\n                                                                             \\\n    public:                                                                  \\\n    MPARK_INHERITING_CTOR(move_constructor, super)                           \\\n    using super::operator=;                                                  \\\n                                                                             \\\n    move_constructor(const move_constructor &) = default;                    \\\n    definition                                                               \\\n    ~move_constructor() = default;                                           \\\n    move_constructor &operator=(const move_constructor &) = default;         \\\n    move_constructor &operator=(move_constructor &&) = default;              \\\n  }\n\n    MPARK_VARIANT_MOVE_CONSTRUCTOR(\n        Trait::TriviallyAvailable,\n        move_constructor(move_constructor &&that) = default;);\n\n    MPARK_VARIANT_MOVE_CONSTRUCTOR(\n        Trait::Available,\n        move_constructor(move_constructor &&that) noexcept(\n            lib::all<std::is_nothrow_move_constructible<Ts>::value...>::value)\n            : move_constructor(valueless_t{}) {\n          this->generic_construct(*this, lib::move(that));\n        });\n\n    MPARK_VARIANT_MOVE_CONSTRUCTOR(\n        Trait::Unavailable,\n        move_constructor(move_constructor &&) = delete;);\n\n#undef MPARK_VARIANT_MOVE_CONSTRUCTOR\n\n    template <typename Traits, Trait = Traits::copy_constructible_trait>\n    class copy_constructor;\n\n#define MPARK_VARIANT_COPY_CONSTRUCTOR(copy_constructible_trait, definition) \\\n  template <typename... Ts>                                                  \\\n  class copy_constructor<traits<Ts...>, copy_constructible_trait>            \\\n      : public move_constructor<traits<Ts...>> {                             \\\n    using super = move_constructor<traits<Ts...>>;                           \\\n                                                                             \\\n    public:                                                                  \\\n    MPARK_INHERITING_CTOR(copy_constructor, super)                           \\\n    using super::operator=;                                                  \\\n                                                                             \\\n    definition                                                               \\\n    copy_constructor(copy_constructor &&) = default;                         \\\n    ~copy_constructor() = default;                                           \\\n    copy_constructor &operator=(const copy_constructor &) = default;         \\\n    copy_constructor &operator=(copy_constructor &&) = default;              \\\n  }\n\n    MPARK_VARIANT_COPY_CONSTRUCTOR(\n        Trait::TriviallyAvailable,\n        copy_constructor(const copy_constructor &that) = default;);\n\n    MPARK_VARIANT_COPY_CONSTRUCTOR(\n        Trait::Available,\n        copy_constructor(const copy_constructor &that)\n            : copy_constructor(valueless_t{}) {\n          this->generic_construct(*this, that);\n        });\n\n    MPARK_VARIANT_COPY_CONSTRUCTOR(\n        Trait::Unavailable,\n        copy_constructor(const copy_constructor &) = delete;);\n\n#undef MPARK_VARIANT_COPY_CONSTRUCTOR\n\n    template <typename Traits>\n    class assignment : public copy_constructor<Traits> {\n      using super = copy_constructor<Traits>;\n\n      public:\n      MPARK_INHERITING_CTOR(assignment, super)\n      using super::operator=;\n\n      template <std::size_t I, typename... Args>\n      inline /* auto & */ auto emplace(Args &&... args)\n          -> decltype(this->construct_alt(access::base::get_alt<I>(*this),\n                                          lib::forward<Args>(args)...)) {\n        this->destroy();\n        auto &result = this->construct_alt(access::base::get_alt<I>(*this),\n                                           lib::forward<Args>(args)...);\n        this->index_ = I;\n        return result;\n      }\n\n      protected:\n#ifndef MPARK_GENERIC_LAMBDAS\n      template <typename That>\n      struct assigner {\n        template <typename ThisAlt, typename ThatAlt>\n        inline void operator()(ThisAlt &this_alt, ThatAlt &&that_alt) const {\n          self->assign_alt(this_alt, lib::forward<ThatAlt>(that_alt).value);\n        }\n        assignment *self;\n      };\n#endif\n\n      template <std::size_t I, typename T, typename Arg>\n      inline void assign_alt(alt<I, T> &a, Arg &&arg) {\n        if (this->index() == I) {\n#ifdef _MSC_VER\n#pragma warning(push)\n#pragma warning(disable : 4244)\n#endif\n          a.value = lib::forward<Arg>(arg);\n#ifdef _MSC_VER\n#pragma warning(pop)\n#endif\n        } else {\n          struct {\n            void operator()(std::true_type) const {\n              this_->emplace<I>(lib::forward<Arg>(arg_));\n            }\n            void operator()(std::false_type) const {\n              this_->emplace<I>(T(lib::forward<Arg>(arg_)));\n            }\n            assignment *this_;\n            Arg &&arg_;\n          } impl{this, lib::forward<Arg>(arg)};\n          impl(lib::bool_constant<\n                   std::is_nothrow_constructible<T, Arg>::value ||\n                   !std::is_nothrow_move_constructible<T>::value>{});\n        }\n      }\n\n      template <typename That>\n      inline void generic_assign(That &&that) {\n        if (this->valueless_by_exception() && that.valueless_by_exception()) {\n          // do nothing.\n        } else if (that.valueless_by_exception()) {\n          this->destroy();\n        } else {\n          visitation::alt::visit_alt_at(\n              that.index(),\n#ifdef MPARK_GENERIC_LAMBDAS\n              [this](auto &this_alt, auto &&that_alt) {\n                this->assign_alt(\n                    this_alt, lib::forward<decltype(that_alt)>(that_alt).value);\n              }\n#else\n              assigner<That>{this}\n#endif\n              ,\n              *this,\n              lib::forward<That>(that));\n        }\n      }\n    };\n\n    template <typename Traits, Trait = Traits::move_assignable_trait>\n    class move_assignment;\n\n#define MPARK_VARIANT_MOVE_ASSIGNMENT(move_assignable_trait, definition) \\\n  template <typename... Ts>                                              \\\n  class move_assignment<traits<Ts...>, move_assignable_trait>            \\\n      : public assignment<traits<Ts...>> {                               \\\n    using super = assignment<traits<Ts...>>;                             \\\n                                                                         \\\n    public:                                                              \\\n    MPARK_INHERITING_CTOR(move_assignment, super)                        \\\n    using super::operator=;                                              \\\n                                                                         \\\n    move_assignment(const move_assignment &) = default;                  \\\n    move_assignment(move_assignment &&) = default;                       \\\n    ~move_assignment() = default;                                        \\\n    move_assignment &operator=(const move_assignment &) = default;       \\\n    definition                                                           \\\n  }\n\n    MPARK_VARIANT_MOVE_ASSIGNMENT(\n        Trait::TriviallyAvailable,\n        move_assignment &operator=(move_assignment &&that) = default;);\n\n    MPARK_VARIANT_MOVE_ASSIGNMENT(\n        Trait::Available,\n        move_assignment &\n        operator=(move_assignment &&that) noexcept(\n            lib::all<(std::is_nothrow_move_constructible<Ts>::value &&\n                      std::is_nothrow_move_assignable<Ts>::value)...>::value) {\n          this->generic_assign(lib::move(that));\n          return *this;\n        });\n\n    MPARK_VARIANT_MOVE_ASSIGNMENT(\n        Trait::Unavailable,\n        move_assignment &operator=(move_assignment &&) = delete;);\n\n#undef MPARK_VARIANT_MOVE_ASSIGNMENT\n\n    template <typename Traits, Trait = Traits::copy_assignable_trait>\n    class copy_assignment;\n\n#define MPARK_VARIANT_COPY_ASSIGNMENT(copy_assignable_trait, definition) \\\n  template <typename... Ts>                                              \\\n  class copy_assignment<traits<Ts...>, copy_assignable_trait>            \\\n      : public move_assignment<traits<Ts...>> {                          \\\n    using super = move_assignment<traits<Ts...>>;                        \\\n                                                                         \\\n    public:                                                              \\\n    MPARK_INHERITING_CTOR(copy_assignment, super)                        \\\n    using super::operator=;                                              \\\n                                                                         \\\n    copy_assignment(const copy_assignment &) = default;                  \\\n    copy_assignment(copy_assignment &&) = default;                       \\\n    ~copy_assignment() = default;                                        \\\n    definition                                                           \\\n    copy_assignment &operator=(copy_assignment &&) = default;            \\\n  }\n\n    MPARK_VARIANT_COPY_ASSIGNMENT(\n        Trait::TriviallyAvailable,\n        copy_assignment &operator=(const copy_assignment &that) = default;);\n\n    MPARK_VARIANT_COPY_ASSIGNMENT(\n        Trait::Available,\n        copy_assignment &operator=(const copy_assignment &that) {\n          this->generic_assign(that);\n          return *this;\n        });\n\n    MPARK_VARIANT_COPY_ASSIGNMENT(\n        Trait::Unavailable,\n        copy_assignment &operator=(const copy_assignment &) = delete;);\n\n#undef MPARK_VARIANT_COPY_ASSIGNMENT\n\n    template <typename... Ts>\n    class impl : public copy_assignment<traits<Ts...>> {\n      using super = copy_assignment<traits<Ts...>>;\n\n      public:\n      MPARK_INHERITING_CTOR(impl, super)\n      using super::operator=;\n\n      template <std::size_t I, typename Arg>\n      inline void assign(Arg &&arg) {\n        this->assign_alt(access::base::get_alt<I>(*this),\n                         lib::forward<Arg>(arg));\n      }\n\n      inline void swap(impl &that) {\n        if (this->valueless_by_exception() && that.valueless_by_exception()) {\n          // do nothing.\n        } else if (this->index() == that.index()) {\n          visitation::alt::visit_alt_at(this->index(),\n#ifdef MPARK_GENERIC_LAMBDAS\n                                        [](auto &this_alt, auto &that_alt) {\n                                          using std::swap;\n                                          swap(this_alt.value,\n                                               that_alt.value);\n                                        }\n#else\n                                        swapper{}\n#endif\n                                        ,\n                                        *this,\n                                        that);\n        } else {\n          impl *lhs = this;\n          impl *rhs = lib::addressof(that);\n          if (lhs->move_nothrow() && !rhs->move_nothrow()) {\n            std::swap(lhs, rhs);\n          }\n          impl tmp(lib::move(*rhs));\n#ifdef MPARK_EXCEPTIONS\n          // EXTENSION: When the move construction of `lhs` into `rhs` throws\n          // and `tmp` is nothrow move constructible then we move `tmp` back\n          // into `rhs` and provide the strong exception safety guarantee.\n          try {\n            this->generic_construct(*rhs, lib::move(*lhs));\n          } catch (...) {\n            if (tmp.move_nothrow()) {\n              this->generic_construct(*rhs, lib::move(tmp));\n            }\n            throw;\n          }\n#else\n          this->generic_construct(*rhs, lib::move(*lhs));\n#endif\n          this->generic_construct(*lhs, lib::move(tmp));\n        }\n      }\n\n      private:\n#ifndef MPARK_GENERIC_LAMBDAS\n      struct swapper {\n        template <typename ThisAlt, typename ThatAlt>\n        inline void operator()(ThisAlt &this_alt, ThatAlt &that_alt) const {\n          using std::swap;\n          swap(this_alt.value, that_alt.value);\n        }\n      };\n#endif\n\n      inline constexpr bool move_nothrow() const {\n        return this->valueless_by_exception() ||\n               lib::array<bool, sizeof...(Ts)>{\n                   {std::is_nothrow_move_constructible<Ts>::value...}\n               }[this->index()];\n      }\n    };\n\n#undef MPARK_INHERITING_CTOR\n\n    template <std::size_t I, typename T>\n    struct overload_leaf {\n      using F = lib::size_constant<I> (*)(T);\n      operator F() const { return nullptr; }\n    };\n\n    template <typename... Ts>\n    struct overload_impl {\n      private:\n      template <typename>\n      struct impl;\n\n      template <std::size_t... Is>\n      struct impl<lib::index_sequence<Is...>> : overload_leaf<Is, Ts>... {};\n\n      public:\n      using type = impl<lib::index_sequence_for<Ts...>>;\n    };\n\n    template <typename... Ts>\n    using overload = typename overload_impl<Ts...>::type;\n\n    template <typename T, typename... Ts>\n    using best_match = lib::invoke_result_t<overload<Ts...>, T &&>;\n\n    template <typename T>\n    struct is_in_place_index : std::false_type {};\n\n    template <std::size_t I>\n    struct is_in_place_index<in_place_index_t<I>> : std::true_type {};\n\n    template <typename T>\n    struct is_in_place_type : std::false_type {};\n\n    template <typename T>\n    struct is_in_place_type<in_place_type_t<T>> : std::true_type {};\n\n  }  // detail\n\n  template <typename... Ts>\n  class variant {\n    static_assert(0 < sizeof...(Ts),\n                  \"variant must consist of at least one alternative.\");\n\n    static_assert(lib::all<!std::is_array<Ts>::value...>::value,\n                  \"variant can not have an array type as an alternative.\");\n\n    static_assert(lib::all<!std::is_reference<Ts>::value...>::value,\n                  \"variant can not have a reference type as an alternative.\");\n\n    static_assert(lib::all<!std::is_void<Ts>::value...>::value,\n                  \"variant can not have a void type as an alternative.\");\n\n    public:\n    template <\n        typename Front = lib::type_pack_element_t<0, Ts...>,\n        lib::enable_if_t<std::is_default_constructible<Front>::value, int> = 0>\n    inline constexpr variant() noexcept(\n        std::is_nothrow_default_constructible<Front>::value)\n        : impl_(in_place_index_t<0>{}) {}\n\n    variant(const variant &) = default;\n    variant(variant &&) = default;\n\n    template <\n        typename Arg,\n        typename Decayed = lib::decay_t<Arg>,\n        lib::enable_if_t<!std::is_same<Decayed, variant>::value, int> = 0,\n        lib::enable_if_t<!detail::is_in_place_index<Decayed>::value, int> = 0,\n        lib::enable_if_t<!detail::is_in_place_type<Decayed>::value, int> = 0,\n        std::size_t I = detail::best_match<Arg, Ts...>::value,\n        typename T = lib::type_pack_element_t<I, Ts...>,\n        lib::enable_if_t<std::is_constructible<T, Arg>::value, int> = 0>\n    inline constexpr variant(Arg &&arg) noexcept(\n        std::is_nothrow_constructible<T, Arg>::value)\n        : impl_(in_place_index_t<I>{}, lib::forward<Arg>(arg)) {}\n\n    template <\n        std::size_t I,\n        typename... Args,\n        typename T = lib::type_pack_element_t<I, Ts...>,\n        lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>\n    inline explicit constexpr variant(\n        in_place_index_t<I>,\n        Args &&... args) noexcept(std::is_nothrow_constructible<T,\n                                                                Args...>::value)\n        : impl_(in_place_index_t<I>{}, lib::forward<Args>(args)...) {}\n\n    template <\n        std::size_t I,\n        typename Up,\n        typename... Args,\n        typename T = lib::type_pack_element_t<I, Ts...>,\n        lib::enable_if_t<std::is_constructible<T,\n                                               std::initializer_list<Up> &,\n                                               Args...>::value,\n                         int> = 0>\n    inline explicit constexpr variant(\n        in_place_index_t<I>,\n        std::initializer_list<Up> il,\n        Args &&... args) noexcept(std::\n                                      is_nothrow_constructible<\n                                          T,\n                                          std::initializer_list<Up> &,\n                                          Args...>::value)\n        : impl_(in_place_index_t<I>{}, il, lib::forward<Args>(args)...) {}\n\n    template <\n        typename T,\n        typename... Args,\n        std::size_t I = detail::find_index_sfinae<T, Ts...>::value,\n        lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>\n    inline explicit constexpr variant(\n        in_place_type_t<T>,\n        Args &&... args) noexcept(std::is_nothrow_constructible<T,\n                                                                Args...>::value)\n        : impl_(in_place_index_t<I>{}, lib::forward<Args>(args)...) {}\n\n    template <\n        typename T,\n        typename Up,\n        typename... Args,\n        std::size_t I = detail::find_index_sfinae<T, Ts...>::value,\n        lib::enable_if_t<std::is_constructible<T,\n                                               std::initializer_list<Up> &,\n                                               Args...>::value,\n                         int> = 0>\n    inline explicit constexpr variant(\n        in_place_type_t<T>,\n        std::initializer_list<Up> il,\n        Args &&... args) noexcept(std::\n                                      is_nothrow_constructible<\n                                          T,\n                                          std::initializer_list<Up> &,\n                                          Args...>::value)\n        : impl_(in_place_index_t<I>{}, il, lib::forward<Args>(args)...) {}\n\n    ~variant() = default;\n\n    variant &operator=(const variant &) = default;\n    variant &operator=(variant &&) = default;\n\n    template <typename Arg,\n              lib::enable_if_t<!std::is_same<lib::decay_t<Arg>, variant>::value,\n                               int> = 0,\n              std::size_t I = detail::best_match<Arg, Ts...>::value,\n              typename T = lib::type_pack_element_t<I, Ts...>,\n              lib::enable_if_t<(std::is_assignable<T &, Arg>::value &&\n                                std::is_constructible<T, Arg>::value),\n                               int> = 0>\n    inline variant &operator=(Arg &&arg) noexcept(\n        (std::is_nothrow_assignable<T &, Arg>::value &&\n         std::is_nothrow_constructible<T, Arg>::value)) {\n      impl_.template assign<I>(lib::forward<Arg>(arg));\n      return *this;\n    }\n\n    template <\n        std::size_t I,\n        typename... Args,\n        typename T = lib::type_pack_element_t<I, Ts...>,\n        lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>\n    inline T &emplace(Args &&... args) {\n      return impl_.template emplace<I>(lib::forward<Args>(args)...);\n    }\n\n    template <\n        std::size_t I,\n        typename Up,\n        typename... Args,\n        typename T = lib::type_pack_element_t<I, Ts...>,\n        lib::enable_if_t<std::is_constructible<T,\n                                               std::initializer_list<Up> &,\n                                               Args...>::value,\n                         int> = 0>\n    inline T &emplace(std::initializer_list<Up> il, Args &&... args) {\n      return impl_.template emplace<I>(il, lib::forward<Args>(args)...);\n    }\n\n    template <\n        typename T,\n        typename... Args,\n        std::size_t I = detail::find_index_sfinae<T, Ts...>::value,\n        lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>\n    inline T &emplace(Args &&... args) {\n      return impl_.template emplace<I>(lib::forward<Args>(args)...);\n    }\n\n    template <\n        typename T,\n        typename Up,\n        typename... Args,\n        std::size_t I = detail::find_index_sfinae<T, Ts...>::value,\n        lib::enable_if_t<std::is_constructible<T,\n                                               std::initializer_list<Up> &,\n                                               Args...>::value,\n                         int> = 0>\n    inline T &emplace(std::initializer_list<Up> il, Args &&... args) {\n      return impl_.template emplace<I>(il, lib::forward<Args>(args)...);\n    }\n\n    inline constexpr bool valueless_by_exception() const noexcept {\n      return impl_.valueless_by_exception();\n    }\n\n    inline constexpr std::size_t index() const noexcept {\n      return impl_.index();\n    }\n\n    template <bool Dummy = true,\n              lib::enable_if_t<\n                  lib::all<Dummy,\n                           (lib::dependent_type<std::is_move_constructible<Ts>,\n                                                Dummy>::value &&\n                            lib::dependent_type<lib::is_swappable<Ts>,\n                                                Dummy>::value)...>::value,\n                  int> = 0>\n    inline void swap(variant &that) noexcept(\n        lib::all<(std::is_nothrow_move_constructible<Ts>::value &&\n                  lib::is_nothrow_swappable<Ts>::value)...>::value) {\n      impl_.swap(that.impl_);\n    }\n\n    private:\n    detail::impl<Ts...> impl_;\n\n    friend struct detail::access::variant;\n    friend struct detail::visitation::variant;\n  };\n\n  template <std::size_t I, typename... Ts>\n  inline constexpr bool holds_alternative(const variant<Ts...> &v) noexcept {\n    return v.index() == I;\n  }\n\n  template <typename T, typename... Ts>\n  inline constexpr bool holds_alternative(const variant<Ts...> &v) noexcept {\n    return holds_alternative<detail::find_index_checked<T, Ts...>::value>(v);\n  }\n\n  namespace detail {\n    template <std::size_t I, typename V>\n    struct generic_get_impl {\n      constexpr generic_get_impl(int) noexcept {}\n\n      constexpr AUTO_REFREF operator()(V &&v) const\n        AUTO_REFREF_RETURN(\n            access::variant::get_alt<I>(lib::forward<V>(v)).value)\n    };\n\n    template <std::size_t I, typename V>\n    inline constexpr AUTO_REFREF generic_get(V &&v)\n      AUTO_REFREF_RETURN(generic_get_impl<I, V>(\n          holds_alternative<I>(v) ? 0 : (throw_bad_variant_access(), 0))(\n          lib::forward<V>(v)))\n  }  // namespace detail\n\n  template <std::size_t I, typename... Ts>\n  inline constexpr variant_alternative_t<I, variant<Ts...>> &get(\n      variant<Ts...> &v) {\n    return detail::generic_get<I>(v);\n  }\n\n  template <std::size_t I, typename... Ts>\n  inline constexpr variant_alternative_t<I, variant<Ts...>> &&get(\n      variant<Ts...> &&v) {\n    return detail::generic_get<I>(lib::move(v));\n  }\n\n  template <std::size_t I, typename... Ts>\n  inline constexpr const variant_alternative_t<I, variant<Ts...>> &get(\n      const variant<Ts...> &v) {\n    return detail::generic_get<I>(v);\n  }\n\n  template <std::size_t I, typename... Ts>\n  inline constexpr const variant_alternative_t<I, variant<Ts...>> &&get(\n      const variant<Ts...> &&v) {\n    return detail::generic_get<I>(lib::move(v));\n  }\n\n  template <typename T, typename... Ts>\n  inline constexpr T &get(variant<Ts...> &v) {\n    return get<detail::find_index_checked<T, Ts...>::value>(v);\n  }\n\n  template <typename T, typename... Ts>\n  inline constexpr T &&get(variant<Ts...> &&v) {\n    return get<detail::find_index_checked<T, Ts...>::value>(lib::move(v));\n  }\n\n  template <typename T, typename... Ts>\n  inline constexpr const T &get(const variant<Ts...> &v) {\n    return get<detail::find_index_checked<T, Ts...>::value>(v);\n  }\n\n  template <typename T, typename... Ts>\n  inline constexpr const T &&get(const variant<Ts...> &&v) {\n    return get<detail::find_index_checked<T, Ts...>::value>(lib::move(v));\n  }\n\n  namespace detail {\n\n    template <std::size_t I, typename V>\n    inline constexpr /* auto * */ AUTO generic_get_if(V *v) noexcept\n      AUTO_RETURN(v && holds_alternative<I>(*v)\n                      ? lib::addressof(access::variant::get_alt<I>(*v).value)\n                      : nullptr)\n\n  }  // namespace detail\n\n  template <std::size_t I, typename... Ts>\n  inline constexpr lib::add_pointer_t<variant_alternative_t<I, variant<Ts...>>>\n  get_if(variant<Ts...> *v) noexcept {\n    return detail::generic_get_if<I>(v);\n  }\n\n  template <std::size_t I, typename... Ts>\n  inline constexpr lib::add_pointer_t<\n      const variant_alternative_t<I, variant<Ts...>>>\n  get_if(const variant<Ts...> *v) noexcept {\n    return detail::generic_get_if<I>(v);\n  }\n\n  template <typename T, typename... Ts>\n  inline constexpr lib::add_pointer_t<T>\n  get_if(variant<Ts...> *v) noexcept {\n    return get_if<detail::find_index_checked<T, Ts...>::value>(v);\n  }\n\n  template <typename T, typename... Ts>\n  inline constexpr lib::add_pointer_t<const T>\n  get_if(const variant<Ts...> *v) noexcept {\n    return get_if<detail::find_index_checked<T, Ts...>::value>(v);\n  }\n\n  namespace detail {\n    template <typename RelOp>\n    struct convert_to_bool {\n      template <typename Lhs, typename Rhs>\n      inline constexpr bool operator()(Lhs &&lhs, Rhs &&rhs) const {\n        static_assert(std::is_convertible<lib::invoke_result_t<RelOp, Lhs, Rhs>,\n                                          bool>::value,\n                      \"relational operators must return a type\"\n                      \" implicitly convertible to bool\");\n        return lib::invoke(\n            RelOp{}, lib::forward<Lhs>(lhs), lib::forward<Rhs>(rhs));\n      }\n    };\n  }  // namespace detail\n\n  template <typename... Ts>\n  inline constexpr bool operator==(const variant<Ts...> &lhs,\n                                   const variant<Ts...> &rhs) {\n    using detail::visitation::variant;\n    using equal_to = detail::convert_to_bool<lib::equal_to>;\n#ifdef MPARK_CPP14_CONSTEXPR\n    if (lhs.index() != rhs.index()) return false;\n    if (lhs.valueless_by_exception()) return true;\n    return variant::visit_value_at(lhs.index(), equal_to{}, lhs, rhs);\n#else\n    return lhs.index() == rhs.index() &&\n           (lhs.valueless_by_exception() ||\n            variant::visit_value_at(lhs.index(), equal_to{}, lhs, rhs));\n#endif\n  }\n\n  template <typename... Ts>\n  inline constexpr bool operator!=(const variant<Ts...> &lhs,\n                                   const variant<Ts...> &rhs) {\n    using detail::visitation::variant;\n    using not_equal_to = detail::convert_to_bool<lib::not_equal_to>;\n#ifdef MPARK_CPP14_CONSTEXPR\n    if (lhs.index() != rhs.index()) return true;\n    if (lhs.valueless_by_exception()) return false;\n    return variant::visit_value_at(lhs.index(), not_equal_to{}, lhs, rhs);\n#else\n    return lhs.index() != rhs.index() ||\n           (!lhs.valueless_by_exception() &&\n            variant::visit_value_at(lhs.index(), not_equal_to{}, lhs, rhs));\n#endif\n  }\n\n  template <typename... Ts>\n  inline constexpr bool operator<(const variant<Ts...> &lhs,\n                                  const variant<Ts...> &rhs) {\n    using detail::visitation::variant;\n    using less = detail::convert_to_bool<lib::less>;\n#ifdef MPARK_CPP14_CONSTEXPR\n    if (rhs.valueless_by_exception()) return false;\n    if (lhs.valueless_by_exception()) return true;\n    if (lhs.index() < rhs.index()) return true;\n    if (lhs.index() > rhs.index()) return false;\n    return variant::visit_value_at(lhs.index(), less{}, lhs, rhs);\n#else\n    return !rhs.valueless_by_exception() &&\n           (lhs.valueless_by_exception() || lhs.index() < rhs.index() ||\n            (lhs.index() == rhs.index() &&\n             variant::visit_value_at(lhs.index(), less{}, lhs, rhs)));\n#endif\n  }\n\n  template <typename... Ts>\n  inline constexpr bool operator>(const variant<Ts...> &lhs,\n                                  const variant<Ts...> &rhs) {\n    using detail::visitation::variant;\n    using greater = detail::convert_to_bool<lib::greater>;\n#ifdef MPARK_CPP14_CONSTEXPR\n    if (lhs.valueless_by_exception()) return false;\n    if (rhs.valueless_by_exception()) return true;\n    if (lhs.index() > rhs.index()) return true;\n    if (lhs.index() < rhs.index()) return false;\n    return variant::visit_value_at(lhs.index(), greater{}, lhs, rhs);\n#else\n    return !lhs.valueless_by_exception() &&\n           (rhs.valueless_by_exception() || lhs.index() > rhs.index() ||\n            (lhs.index() == rhs.index() &&\n             variant::visit_value_at(lhs.index(), greater{}, lhs, rhs)));\n#endif\n  }\n\n  template <typename... Ts>\n  inline constexpr bool operator<=(const variant<Ts...> &lhs,\n                                   const variant<Ts...> &rhs) {\n    using detail::visitation::variant;\n    using less_equal = detail::convert_to_bool<lib::less_equal>;\n#ifdef MPARK_CPP14_CONSTEXPR\n    if (lhs.valueless_by_exception()) return true;\n    if (rhs.valueless_by_exception()) return false;\n    if (lhs.index() < rhs.index()) return true;\n    if (lhs.index() > rhs.index()) return false;\n    return variant::visit_value_at(lhs.index(), less_equal{}, lhs, rhs);\n#else\n    return lhs.valueless_by_exception() ||\n           (!rhs.valueless_by_exception() &&\n            (lhs.index() < rhs.index() ||\n             (lhs.index() == rhs.index() &&\n              variant::visit_value_at(lhs.index(), less_equal{}, lhs, rhs))));\n#endif\n  }\n\n  template <typename... Ts>\n  inline constexpr bool operator>=(const variant<Ts...> &lhs,\n                                   const variant<Ts...> &rhs) {\n    using detail::visitation::variant;\n    using greater_equal = detail::convert_to_bool<lib::greater_equal>;\n#ifdef MPARK_CPP14_CONSTEXPR\n    if (rhs.valueless_by_exception()) return true;\n    if (lhs.valueless_by_exception()) return false;\n    if (lhs.index() > rhs.index()) return true;\n    if (lhs.index() < rhs.index()) return false;\n    return variant::visit_value_at(lhs.index(), greater_equal{}, lhs, rhs);\n#else\n    return rhs.valueless_by_exception() ||\n           (!lhs.valueless_by_exception() &&\n            (lhs.index() > rhs.index() ||\n             (lhs.index() == rhs.index() &&\n              variant::visit_value_at(\n                  lhs.index(), greater_equal{}, lhs, rhs))));\n#endif\n  }\n\n  struct monostate {};\n\n  inline constexpr bool operator<(monostate, monostate) noexcept {\n    return false;\n  }\n\n  inline constexpr bool operator>(monostate, monostate) noexcept {\n    return false;\n  }\n\n  inline constexpr bool operator<=(monostate, monostate) noexcept {\n    return true;\n  }\n\n  inline constexpr bool operator>=(monostate, monostate) noexcept {\n    return true;\n  }\n\n  inline constexpr bool operator==(monostate, monostate) noexcept {\n    return true;\n  }\n\n  inline constexpr bool operator!=(monostate, monostate) noexcept {\n    return false;\n  }\n\n#ifdef MPARK_CPP14_CONSTEXPR\n  namespace detail {\n\n    inline constexpr bool all(std::initializer_list<bool> bs) {\n      for (bool b : bs) {\n        if (!b) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n  }  // namespace detail\n\n  template <typename Visitor, typename... Vs>\n  inline constexpr decltype(auto) visit(Visitor &&visitor, Vs &&... vs) {\n    return (detail::all({!vs.valueless_by_exception()...})\n                ? (void)0\n                : throw_bad_variant_access()),\n           detail::visitation::variant::visit_value(\n               lib::forward<Visitor>(visitor), lib::forward<Vs>(vs)...);\n  }\n#else\n  namespace detail {\n\n    template <std::size_t N>\n    inline constexpr bool all_impl(const lib::array<bool, N> &bs,\n                                   std::size_t idx) {\n      return idx >= N || (bs[idx] && all_impl(bs, idx + 1));\n    }\n\n    template <std::size_t N>\n    inline constexpr bool all(const lib::array<bool, N> &bs) {\n      return all_impl(bs, 0);\n    }\n\n  }  // namespace detail\n\n  template <typename Visitor, typename... Vs>\n  inline constexpr DECLTYPE_AUTO visit(Visitor &&visitor, Vs &&... vs)\n    DECLTYPE_AUTO_RETURN(\n        (detail::all(\n             lib::array<bool, sizeof...(Vs)>{{!vs.valueless_by_exception()...}})\n             ? (void)0\n             : throw_bad_variant_access()),\n        detail::visitation::variant::visit_value(lib::forward<Visitor>(visitor),\n                                                 lib::forward<Vs>(vs)...))\n#endif\n\n  template <typename... Ts>\n  inline auto swap(variant<Ts...> &lhs,\n                   variant<Ts...> &rhs) noexcept(noexcept(lhs.swap(rhs)))\n      -> decltype(lhs.swap(rhs)) {\n    lhs.swap(rhs);\n  }\n\n  namespace detail {\n\n    template <typename T, typename...>\n    using enabled_type = T;\n\n    namespace hash {\n\n      template <typename H, typename K>\n      constexpr bool meets_requirements() noexcept {\n        return std::is_copy_constructible<H>::value &&\n               std::is_move_constructible<H>::value &&\n               lib::is_invocable_r<std::size_t, H, const K &>::value;\n      }\n\n      template <typename K>\n      constexpr bool is_enabled() noexcept {\n        using H = std::hash<K>;\n        return meets_requirements<H, K>() &&\n               std::is_default_constructible<H>::value &&\n               std::is_copy_assignable<H>::value &&\n               std::is_move_assignable<H>::value;\n      }\n\n    }  // namespace hash\n\n  }  // namespace detail\n\n#undef AUTO\n#undef AUTO_RETURN\n\n#undef AUTO_REFREF\n#undef AUTO_REFREF_RETURN\n\n#undef DECLTYPE_AUTO\n#undef DECLTYPE_AUTO_RETURN\n\n}  // namespace mpark\n\nnamespace std {\n\n  template <typename... Ts>\n  struct hash<mpark::detail::enabled_type<\n      mpark::variant<Ts...>,\n      mpark::lib::enable_if_t<mpark::lib::all<mpark::detail::hash::is_enabled<\n          mpark::lib::remove_const_t<Ts>>()...>::value>>> {\n    using argument_type = mpark::variant<Ts...>;\n    using result_type = std::size_t;\n\n    inline result_type operator()(const argument_type &v) const {\n      using mpark::detail::visitation::variant;\n      std::size_t result =\n          v.valueless_by_exception()\n              ? 299792458  // Random value chosen by the universe upon creation\n              : variant::visit_alt(\n#ifdef MPARK_GENERIC_LAMBDAS\n                    [](const auto &alt) {\n                      using alt_type = mpark::lib::decay_t<decltype(alt)>;\n                      using value_type = mpark::lib::remove_const_t<\n                          typename alt_type::value_type>;\n                      return hash<value_type>{}(alt.value);\n                    }\n#else\n                    hasher{}\n#endif\n                    ,\n                    v);\n      return hash_combine(result, hash<std::size_t>{}(v.index()));\n    }\n\n    private:\n#ifndef MPARK_GENERIC_LAMBDAS\n    struct hasher {\n      template <typename Alt>\n      inline std::size_t operator()(const Alt &alt) const {\n        using alt_type = mpark::lib::decay_t<Alt>;\n        using value_type =\n            mpark::lib::remove_const_t<typename alt_type::value_type>;\n        return hash<value_type>{}(alt.value);\n      }\n    };\n#endif\n\n    static std::size_t hash_combine(std::size_t lhs, std::size_t rhs) {\n      return lhs ^= rhs + 0x9e3779b9 + (lhs << 6) + (lhs >> 2);\n    }\n  };\n\n  template <>\n  struct hash<mpark::monostate> {\n    using argument_type = mpark::monostate;\n    using result_type = std::size_t;\n\n    inline result_type operator()(const argument_type &) const noexcept {\n      return 66740831;  // return a fundamentally attractive random value.\n    }\n  };\n\n}  // namespace std\n\n#endif  // MPARK_VARIANT_HPP\n"
  },
  {
    "path": "libs/woff2/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "libs/woff2/Makefile.am",
    "content": "if !HAVE_WOFF2\nnoinst_LIBRARIES = libwoff2.a\nlibwoff2_a_SOURCES = \\\n\tinclude/woff2/decode.h \\\n\tinclude/woff2/encode.h \\\n\tinclude/woff2/output.h \\\n\tinclude/woff2/version.h \\\n\tsrc/buffer.h \\\n\tsrc/font.cc \\\n\tsrc/font.h \\\n\tsrc/glyph.cc \\\n\tsrc/glyph.h \\\n\tsrc/normalize.cc \\\n\tsrc/normalize.h \\\n\tsrc/port.h \\\n\tsrc/round.h \\\n\tsrc/store_bytes.h \\\n\tsrc/table_tags.cc \\\n\tsrc/table_tags.h \\\n\tsrc/transform.cc \\\n\tsrc/transform.h \\\n\tsrc/variable_length.cc \\\n\tsrc/variable_length.h \\\n\tsrc/woff2_common.cc \\\n\tsrc/woff2_common.h \\\n\tsrc/woff2_enc.cc \\\n\tsrc/woff2_out.cc\n\nAM_CXXFLAGS = -Wall -I$(srcdir)/include -I$(srcdir)/../brotli/include\n\nendif\n\nEXTRA_DIST = LICENSE\nCLEANFILES = *.gcda *.gcno\n"
  },
  {
    "path": "libs/woff2/include/woff2/decode.h",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Library for converting WOFF2 format font files to their TTF versions. */\n\n#ifndef WOFF2_WOFF2_DEC_H_\n#define WOFF2_WOFF2_DEC_H_\n\n#include <stddef.h>\n#include <inttypes.h>\n#include <woff2/output.h>\n\nnamespace woff2 {\n\n// Compute the size of the final uncompressed font, or 0 on error.\nsize_t ComputeWOFF2FinalSize(const uint8_t *data, size_t length);\n\n// Decompresses the font into the target buffer. The result_length should\n// be the same as determined by ComputeFinalSize(). Returns true on successful\n// decompression.\n// DEPRECATED; please prefer the version that takes a WOFF2Out*\nbool ConvertWOFF2ToTTF(uint8_t *result, size_t result_length,\n                       const uint8_t *data, size_t length);\n\n// Decompresses the font into out. Returns true on success.\n// Works even if WOFF2Header totalSfntSize is wrong.\n// Please prefer this API.\nbool ConvertWOFF2ToTTF(const uint8_t *data, size_t length,\n                       WOFF2Out* out);\n\n} // namespace woff2\n\n#endif  // WOFF2_WOFF2_DEC_H_\n"
  },
  {
    "path": "libs/woff2/include/woff2/encode.h",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Library for converting WOFF2 format font files to their TTF versions. */\n\n#ifndef WOFF2_WOFF2_ENC_H_\n#define WOFF2_WOFF2_ENC_H_\n\n#include <stddef.h>\n#include <inttypes.h>\n#include <string>\n\nnamespace woff2 {\n\nstruct WOFF2Params {\n  WOFF2Params() : extended_metadata(\"\"), brotli_quality(11),\n                  allow_transforms(true) {}\n\n  std::string extended_metadata;\n  int brotli_quality;\n  bool allow_transforms;\n};\n\n// Returns an upper bound on the size of the compressed file.\nsize_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length);\nsize_t MaxWOFF2CompressedSize(const uint8_t *data, size_t length,\n                              const std::string &extended_metadata);\n\n// Compresses the font into the target buffer. *result_length should be at least\n// the value returned by MaxWOFF2CompressedSize(), upon return, it is set to the\n// actual compressed size. Returns true on successful compression.\nbool ConvertTTFToWOFF2(const uint8_t *data, size_t length,\n                       uint8_t *result, size_t *result_length);\nbool ConvertTTFToWOFF2(const uint8_t *data, size_t length,\n                       uint8_t *result, size_t *result_length,\n                       const WOFF2Params& params);\n\n} // namespace woff2\n\n#endif  // WOFF2_WOFF2_ENC_H_\n"
  },
  {
    "path": "libs/woff2/include/woff2/output.h",
    "content": "/* Copyright 2016 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Output buffer for WOFF2 decompression. */\n\n#ifndef WOFF2_WOFF2_OUT_H_\n#define WOFF2_WOFF2_OUT_H_\n\n#include <algorithm>\n#include <cstdint>\n#include <cstring>\n#include <memory>\n#include <string>\n\nnamespace woff2 {\n\n// Suggested max size for output.\nconst size_t kDefaultMaxSize = 30 * 1024 * 1024;\n\n/**\n * Output interface for the woff2 decoding.\n *\n * Writes to arbitrary offsets are supported to facilitate updating offset\n * table and checksums after tables are ready. Reading the current size is\n * supported so a 'loca' table can be built up while writing glyphs.\n *\n * By default limits size to kDefaultMaxSize.\n */\nclass WOFF2Out {\n public:\n  virtual ~WOFF2Out(void) {}\n\n  // Append n bytes of data from buf.\n  // Return true if all written, false otherwise.\n  virtual bool Write(const void *buf, size_t n) = 0;\n\n  // Write n bytes of data from buf at offset.\n  // Return true if all written, false otherwise.\n  virtual bool Write(const void *buf, size_t offset, size_t n) = 0;\n\n  virtual size_t Size() = 0;\n};\n\n/**\n * Expanding memory block for woff2 out. By default limited to kDefaultMaxSize.\n */\nclass WOFF2StringOut : public WOFF2Out {\n public:\n  // Create a writer that writes its data to buf.\n  // buf->size() will grow to at most max_size\n  // buf may be sized (e.g. using EstimateWOFF2FinalSize) or empty.\n  explicit WOFF2StringOut(std::string *buf);\n\n  bool Write(const void *buf, size_t n) override;\n  bool Write(const void *buf, size_t offset, size_t n) override;\n  size_t Size() override { return offset_; }\n  size_t MaxSize() { return max_size_; }\n  void SetMaxSize(size_t max_size);\n private:\n  std::string *buf_;\n  size_t max_size_;\n  size_t offset_;\n};\n\n/**\n * Fixed memory block for woff2 out.\n */\nclass WOFF2MemoryOut : public WOFF2Out {\n public:\n  // Create a writer that writes its data to buf.\n  WOFF2MemoryOut(uint8_t* buf, size_t buf_size);\n\n  bool Write(const void *buf, size_t n) override;\n  bool Write(const void *buf, size_t offset, size_t n) override;\n  size_t Size() override { return offset_; }\n private:\n  uint8_t* buf_;\n  size_t buf_size_;\n  size_t offset_;\n};\n\n} // namespace woff2\n\n#endif  // WOFF2_WOFF2_OUT_H_\n"
  },
  {
    "path": "libs/woff2/include/woff2/version.h",
    "content": "#ifndef WOFF2_WOFF2_VERSION_H_\n#define WOFF2_WOFF2_VERSION_H_\n\nnamespace woff2 {\nconstexpr const int version = 0x010002;\n}\n\n#endif\n"
  },
  {
    "path": "libs/woff2/src/buffer.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* The parts of ots.h & opentype-sanitiser.h that we need, taken from the\n   https://code.google.com/p/ots/ project. */\n\n#ifndef WOFF2_BUFFER_H_\n#define WOFF2_BUFFER_H_\n\n#if defined(_WIN32)\n#include <stdlib.h>\ntypedef signed char int8_t;\ntypedef unsigned char uint8_t;\ntypedef short int16_t;\ntypedef unsigned short uint16_t;\ntypedef int int32_t;\ntypedef unsigned int uint32_t;\ntypedef __int64 int64_t;\ntypedef unsigned __int64 uint64_t;\n#define ntohl(x) _byteswap_ulong (x)\n#define ntohs(x) _byteswap_ushort (x)\n#define htonl(x) _byteswap_ulong (x)\n#define htons(x) _byteswap_ushort (x)\n#else\n#include <arpa/inet.h>\n#include <stdint.h>\n#endif\n\n#include <cstdio>\n#include <cstdlib>\n#include <cstring>\n#include <limits>\n\nnamespace woff2 {\n\n#if defined(_MSC_VER) || !defined(FONT_COMPRESSION_DEBUG)\n#define FONT_COMPRESSION_FAILURE() false\n#else\n#define FONT_COMPRESSION_FAILURE() \\\n  woff2::Failure(__FILE__, __LINE__, __PRETTY_FUNCTION__)\ninline bool Failure(const char *f, int l, const char *fn) {\n  fprintf(stderr, \"ERROR at %s:%d (%s)\\n\", f, l, fn);\n  fflush(stderr);\n  return false;\n}\n#endif\n\n// -----------------------------------------------------------------------------\n// Buffer helper class\n//\n// This class perform some trival buffer operations while checking for\n// out-of-bounds errors. As a family they return false if anything is amiss,\n// updating the current offset otherwise.\n// -----------------------------------------------------------------------------\nclass Buffer {\n public:\n  Buffer(const uint8_t *data, size_t len)\n      : buffer_(data),\n        length_(len),\n        offset_(0) { }\n\n  bool Skip(size_t n_bytes) {\n    return Read(NULL, n_bytes);\n  }\n\n  bool Read(uint8_t *data, size_t n_bytes) {\n    if (n_bytes > 1024 * 1024 * 1024) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    if ((offset_ + n_bytes > length_) ||\n        (offset_ > length_ - n_bytes)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    if (data) {\n      std::memcpy(data, buffer_ + offset_, n_bytes);\n    }\n    offset_ += n_bytes;\n    return true;\n  }\n\n  inline bool ReadU8(uint8_t *value) {\n    if (offset_ + 1 > length_) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    *value = buffer_[offset_];\n    ++offset_;\n    return true;\n  }\n\n  bool ReadU16(uint16_t *value) {\n    if (offset_ + 2 > length_) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    std::memcpy(value, buffer_ + offset_, sizeof(uint16_t));\n    *value = ntohs(*value);\n    offset_ += 2;\n    return true;\n  }\n\n  bool ReadS16(int16_t *value) {\n    return ReadU16(reinterpret_cast<uint16_t*>(value));\n  }\n\n  bool ReadU24(uint32_t *value) {\n    if (offset_ + 3 > length_) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    *value = static_cast<uint32_t>(buffer_[offset_]) << 16 |\n        static_cast<uint32_t>(buffer_[offset_ + 1]) << 8 |\n        static_cast<uint32_t>(buffer_[offset_ + 2]);\n    offset_ += 3;\n    return true;\n  }\n\n  bool ReadU32(uint32_t *value) {\n    if (offset_ + 4 > length_) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    std::memcpy(value, buffer_ + offset_, sizeof(uint32_t));\n    *value = ntohl(*value);\n    offset_ += 4;\n    return true;\n  }\n\n  bool ReadS32(int32_t *value) {\n    return ReadU32(reinterpret_cast<uint32_t*>(value));\n  }\n\n  bool ReadTag(uint32_t *value) {\n    if (offset_ + 4 > length_) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    std::memcpy(value, buffer_ + offset_, sizeof(uint32_t));\n    offset_ += 4;\n    return true;\n  }\n\n  bool ReadR64(uint64_t *value) {\n    if (offset_ + 8 > length_) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    std::memcpy(value, buffer_ + offset_, sizeof(uint64_t));\n    offset_ += 8;\n    return true;\n  }\n\n  const uint8_t *buffer() const { return buffer_; }\n  size_t offset() const { return offset_; }\n  size_t length() const { return length_; }\n\n  void set_offset(size_t newoffset) { offset_ = newoffset; }\n\n private:\n  const uint8_t * const buffer_;\n  const size_t length_;\n  size_t offset_;\n};\n\n} // namespace woff2\n\n#endif  // WOFF2_BUFFER_H_\n"
  },
  {
    "path": "libs/woff2/src/font.cc",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Font management utilities */\n\n#include \"./font.h\"\n\n#include <algorithm>\n\n#include \"./buffer.h\"\n#include \"./port.h\"\n#include \"./store_bytes.h\"\n#include \"./table_tags.h\"\n#include \"./woff2_common.h\"\n\nnamespace woff2 {\n\nFont::Table* Font::FindTable(uint32_t tag) {\n  std::map<uint32_t, Font::Table>::iterator it = tables.find(tag);\n  return it == tables.end() ? 0 : &it->second;\n}\n\nconst Font::Table* Font::FindTable(uint32_t tag) const {\n  std::map<uint32_t, Font::Table>::const_iterator it = tables.find(tag);\n  return it == tables.end() ? 0 : &it->second;\n}\n\nstd::vector<uint32_t> Font::OutputOrderedTags() const {\n  std::vector<uint32_t> output_order;\n\n  for (const auto& i : tables) {\n    const Font::Table& table = i.second;\n    // This is a transformed table, we will write it together with the\n    // original version.\n    if (table.tag & 0x80808080) {\n      continue;\n    }\n    output_order.push_back(table.tag);\n  }\n\n  // Alphabetize then put loca immediately after glyf\n  auto glyf_loc = std::find(output_order.begin(), output_order.end(),\n      kGlyfTableTag);\n  auto loca_loc = std::find(output_order.begin(), output_order.end(),\n      kLocaTableTag);\n  if (glyf_loc != output_order.end() && loca_loc != output_order.end()) {\n    output_order.erase(loca_loc);\n    output_order.insert(std::find(output_order.begin(), output_order.end(),\n      kGlyfTableTag) + 1, kLocaTableTag);\n  }\n\n  return output_order;\n}\n\nbool ReadTrueTypeFont(Buffer* file, const uint8_t* data, size_t len,\n                      Font* font) {\n  // We don't care about the search_range, entry_selector and range_shift\n  // fields, they will always be computed upon writing the font.\n  if (!file->ReadU16(&font->num_tables) ||\n      !file->Skip(6)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  std::map<uint32_t, uint32_t> intervals;\n  for (uint16_t i = 0; i < font->num_tables; ++i) {\n    Font::Table table;\n    table.flag_byte = 0;\n    table.reuse_of = NULL;\n    if (!file->ReadU32(&table.tag) ||\n        !file->ReadU32(&table.checksum) ||\n        !file->ReadU32(&table.offset) ||\n        !file->ReadU32(&table.length)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    if ((table.offset & 3) != 0 ||\n        table.length > len ||\n        len - table.length < table.offset) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    intervals[table.offset] = table.length;\n    table.data = data + table.offset;\n    if (font->tables.find(table.tag) != font->tables.end()) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    font->tables[table.tag] = table;\n  }\n\n  // Check that tables are non-overlapping.\n  uint32_t last_offset = 12UL + 16UL * font->num_tables;\n  for (const auto& i : intervals) {\n    if (i.first < last_offset || i.first + i.second < i.first) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    last_offset = i.first + i.second;\n  }\n\n  // Sanity check key tables\n  const Font::Table* head_table = font->FindTable(kHeadTableTag);\n  if (head_table != NULL && head_table->length < 52) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  return true;\n}\n\nbool ReadCollectionFont(Buffer* file, const uint8_t* data, size_t len,\n                        Font* font,\n                        std::map<uint32_t, Font::Table*>* all_tables) {\n  if (!file->ReadU32(&font->flavor)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  if (!ReadTrueTypeFont(file, data, len, font)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  for (auto& entry : font->tables) {\n    Font::Table& table = entry.second;\n\n    if (all_tables->find(table.offset) == all_tables->end()) {\n      (*all_tables)[table.offset] = font->FindTable(table.tag);\n    } else {\n      table.reuse_of = (*all_tables)[table.offset];\n      if (table.tag != table.reuse_of->tag) {\n        return FONT_COMPRESSION_FAILURE();\n      }\n    }\n\n  }\n  return true;\n}\n\nbool ReadTrueTypeCollection(Buffer* file, const uint8_t* data, size_t len,\n                            FontCollection* font_collection) {\n    uint32_t num_fonts;\n\n    if (!file->ReadU32(&font_collection->header_version) ||\n        !file->ReadU32(&num_fonts)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n\n    std::vector<uint32_t> offsets;\n    for (size_t i = 0; i < num_fonts; i++) {\n      uint32_t offset;\n      if (!file->ReadU32(&offset)) {\n        return FONT_COMPRESSION_FAILURE();\n      }\n      offsets.push_back(offset);\n    }\n\n    font_collection->fonts.resize(offsets.size());\n    std::vector<Font>::iterator font_it = font_collection->fonts.begin();\n\n    std::map<uint32_t, Font::Table*> all_tables;\n    for (const auto offset : offsets) {\n      file->set_offset(offset);\n      Font& font = *font_it++;\n      if (!ReadCollectionFont(file, data, len, &font, &all_tables)) {\n        return FONT_COMPRESSION_FAILURE();\n      }\n    }\n\n    return true;\n}\n\nbool ReadFont(const uint8_t* data, size_t len, Font* font) {\n  Buffer file(data, len);\n\n  if (!file.ReadU32(&font->flavor)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  if (font->flavor == kTtcFontFlavor) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  return ReadTrueTypeFont(&file, data, len, font);\n}\n\nbool ReadFontCollection(const uint8_t* data, size_t len,\n                        FontCollection* font_collection) {\n  Buffer file(data, len);\n\n  if (!file.ReadU32(&font_collection->flavor)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  if (font_collection->flavor != kTtcFontFlavor) {\n    font_collection->fonts.resize(1);\n    Font& font = font_collection->fonts[0];\n    font.flavor = font_collection->flavor;\n    return ReadTrueTypeFont(&file, data, len, &font);\n  }\n  return ReadTrueTypeCollection(&file, data, len, font_collection);\n}\n\nsize_t FontFileSize(const Font& font) {\n  size_t max_offset = 12ULL + 16ULL * font.num_tables;\n  for (const auto& i : font.tables) {\n    const Font::Table& table = i.second;\n    size_t padding_size = (4 - (table.length & 3)) & 3;\n    size_t end_offset = (padding_size + table.offset) + table.length;\n    max_offset = std::max(max_offset, end_offset);\n  }\n  return max_offset;\n}\n\nsize_t FontCollectionFileSize(const FontCollection& font_collection) {\n  size_t max_offset = 0;\n  for (auto& font : font_collection.fonts) {\n    // font file size actually just finds max offset\n    max_offset = std::max(max_offset, FontFileSize(font));\n  }\n  return max_offset;\n}\n\nbool WriteFont(const Font& font, uint8_t* dst, size_t dst_size) {\n  size_t offset = 0;\n  return WriteFont(font, &offset, dst, dst_size);\n}\n\nbool WriteTableRecord(const Font::Table* table, size_t* offset, uint8_t* dst,\n                      size_t dst_size) {\n  if (dst_size < *offset + kSfntEntrySize) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  if (table->IsReused()) {\n    table = table->reuse_of;\n  }\n  StoreU32(table->tag, offset, dst);\n  StoreU32(table->checksum, offset, dst);\n  StoreU32(table->offset, offset, dst);\n  StoreU32(table->length, offset, dst);\n  return true;\n}\n\nbool WriteTable(const Font::Table& table, size_t* offset, uint8_t* dst,\n                size_t dst_size) {\n  if (!WriteTableRecord(&table, offset, dst, dst_size)) {\n    return false;\n  }\n\n  // Write the actual table data if it's the first time we've seen it\n  if (!table.IsReused()) {\n    if (table.offset + table.length < table.offset ||\n        dst_size < table.offset + table.length) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    memcpy(dst + table.offset, table.data, table.length);\n    size_t padding_size = (4 - (table.length & 3)) & 3;\n    if (table.offset + table.length + padding_size < padding_size ||\n        dst_size < table.offset + table.length + padding_size) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    memset(dst + table.offset + table.length, 0, padding_size);\n  }\n  return true;\n}\n\nbool WriteFont(const Font& font, size_t* offset, uint8_t* dst,\n               size_t dst_size) {\n  if (dst_size < 12ULL + 16ULL * font.num_tables) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  StoreU32(font.flavor, offset, dst);\n  Store16(font.num_tables, offset, dst);\n  uint16_t max_pow2 = font.num_tables ? Log2Floor(font.num_tables) : 0;\n  uint16_t search_range = max_pow2 ? 1 << (max_pow2 + 4) : 0;\n  uint16_t range_shift = (font.num_tables << 4) - search_range;\n  Store16(search_range, offset, dst);\n  Store16(max_pow2, offset, dst);\n  Store16(range_shift, offset, dst);\n\n  for (const auto& i : font.tables) {\n    if (!WriteTable(i.second, offset, dst, dst_size)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nbool WriteFontCollection(const FontCollection& font_collection, uint8_t* dst,\n                         size_t dst_size) {\n  size_t offset = 0;\n\n  // It's simpler if this just a simple sfnt\n  if (font_collection.flavor != kTtcFontFlavor) {\n    return WriteFont(font_collection.fonts[0], &offset, dst, dst_size);\n  }\n\n  // Write TTC header\n  StoreU32(kTtcFontFlavor, &offset, dst);\n  StoreU32(font_collection.header_version, &offset, dst);\n  StoreU32(font_collection.fonts.size(), &offset, dst);\n\n  // Offset Table, zeroed for now\n  size_t offset_table = offset;  // where to write offsets later\n  for (size_t i = 0; i < font_collection.fonts.size(); i++) {\n    StoreU32(0, &offset, dst);\n  }\n\n  if (font_collection.header_version == 0x00020000) {\n    StoreU32(0, &offset, dst);  // ulDsigTag\n    StoreU32(0, &offset, dst);  // ulDsigLength\n    StoreU32(0, &offset, dst);  // ulDsigOffset\n  }\n\n  // Write fonts and their offsets.\n  for (size_t i = 0; i < font_collection.fonts.size(); i++) {\n    const auto& font = font_collection.fonts[i];\n    StoreU32(offset, &offset_table, dst);\n    if (!WriteFont(font, &offset, dst, dst_size)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nint NumGlyphs(const Font& font) {\n  const Font::Table* head_table = font.FindTable(kHeadTableTag);\n  const Font::Table* loca_table = font.FindTable(kLocaTableTag);\n  if (head_table == NULL || loca_table == NULL || head_table->length < 52) {\n    return 0;\n  }\n  int index_fmt = IndexFormat(font);\n  uint32_t loca_record_size = (index_fmt == 0 ? 2 : 4);\n  if (loca_table->length < loca_record_size) {\n    return 0;\n  }\n  return (loca_table->length / loca_record_size) - 1;\n}\n\nint IndexFormat(const Font& font) {\n  const Font::Table* head_table = font.FindTable(kHeadTableTag);\n  if (head_table == NULL) {\n    return 0;\n  }\n  return head_table->data[51];\n}\n\nbool Font::Table::IsReused() const {\n  return this->reuse_of != NULL;\n}\n\nbool GetGlyphData(const Font& font, int glyph_index,\n                  const uint8_t** glyph_data, size_t* glyph_size) {\n  if (glyph_index < 0) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  const Font::Table* head_table = font.FindTable(kHeadTableTag);\n  const Font::Table* loca_table = font.FindTable(kLocaTableTag);\n  const Font::Table* glyf_table = font.FindTable(kGlyfTableTag);\n  if (head_table == NULL || loca_table == NULL || glyf_table == NULL ||\n      head_table->length < 52) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  int index_fmt = IndexFormat(font);\n\n  Buffer loca_buf(loca_table->data, loca_table->length);\n  if (index_fmt == 0) {\n    uint16_t offset1, offset2;\n    if (!loca_buf.Skip(2 * glyph_index) ||\n        !loca_buf.ReadU16(&offset1) ||\n        !loca_buf.ReadU16(&offset2) ||\n        offset2 < offset1 ||\n        2 * offset2 > glyf_table->length) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    *glyph_data = glyf_table->data + 2 * offset1;\n    *glyph_size = 2 * (offset2 - offset1);\n  } else {\n    uint32_t offset1, offset2;\n    if (!loca_buf.Skip(4 * glyph_index) ||\n        !loca_buf.ReadU32(&offset1) ||\n        !loca_buf.ReadU32(&offset2) ||\n        offset2 < offset1 ||\n        offset2 > glyf_table->length) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    *glyph_data = glyf_table->data + offset1;\n    *glyph_size = offset2 - offset1;\n  }\n  return true;\n}\n\nbool RemoveDigitalSignature(Font* font) {\n  std::map<uint32_t, Font::Table>::iterator it =\n      font->tables.find(kDsigTableTag);\n  if (it != font->tables.end()) {\n    font->tables.erase(it);\n    font->num_tables = font->tables.size();\n  }\n  return true;\n}\n\n} // namespace woff2\n"
  },
  {
    "path": "libs/woff2/src/font.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Data model for a font file in sfnt format, reading and writing functions and\n   accessors for the glyph data. */\n\n#ifndef WOFF2_FONT_H_\n#define WOFF2_FONT_H_\n\n#include <stddef.h>\n#include <inttypes.h>\n#include <map>\n#include <vector>\n\nnamespace woff2 {\n\n// Represents an sfnt font file. Only the table directory is parsed, for the\n// table data we only store a raw pointer, therefore a font object is valid only\n// as long the data from which it was parsed is around.\nstruct Font {\n  uint32_t flavor;\n  uint16_t num_tables;\n\n  struct Table {\n    uint32_t tag;\n    uint32_t checksum;\n    uint32_t offset;\n    uint32_t length;\n    const uint8_t* data;\n\n    // Buffer used to mutate the data before writing out.\n    std::vector<uint8_t> buffer;\n\n    // If we've seen this tag/offset before, pointer to the first time we saw it\n    // If this is the first time we've seen this table, NULL\n    // Intended use is to bypass re-processing tables\n    Font::Table* reuse_of;\n\n    uint8_t flag_byte;\n\n    // Is this table reused by a TTC\n    bool IsReused() const;\n  };\n  std::map<uint32_t, Table> tables;\n  std::vector<uint32_t> OutputOrderedTags() const;\n\n  Table* FindTable(uint32_t tag);\n  const Table* FindTable(uint32_t tag) const;\n};\n\n// Accomodates both singular (OTF, TTF) and collection (TTC) fonts\nstruct FontCollection {\n  uint32_t flavor;\n  uint32_t header_version;\n  // (offset, first use of table*) pairs\n  std::map<uint32_t, Font::Table*> tables;\n  std::vector<Font> fonts;\n};\n\n// Parses the font from the given data. Returns false on parsing failure or\n// buffer overflow. The font is valid only so long the input data pointer is\n// valid. Does NOT support collections.\nbool ReadFont(const uint8_t* data, size_t len, Font* font);\n\n// Parses the font from the given data. Returns false on parsing failure or\n// buffer overflow. The font is valid only so long the input data pointer is\n// valid. Supports collections.\nbool ReadFontCollection(const uint8_t* data, size_t len, FontCollection* fonts);\n\n// Returns the file size of the font.\nsize_t FontFileSize(const Font& font);\nsize_t FontCollectionFileSize(const FontCollection& font);\n\n// Writes the font into the specified dst buffer. The dst_size should be the\n// same as returned by FontFileSize(). Returns false upon buffer overflow (which\n// should not happen if dst_size was computed by FontFileSize()).\nbool WriteFont(const Font& font, uint8_t* dst, size_t dst_size);\n// Write the font at a specific offset\nbool WriteFont(const Font& font, size_t* offset, uint8_t* dst, size_t dst_size);\n\nbool WriteFontCollection(const FontCollection& font_collection, uint8_t* dst,\n                         size_t dst_size);\n\n// Returns the number of glyphs in the font.\n// NOTE: Currently this works only for TrueType-flavored fonts, will return\n// zero for CFF-flavored fonts.\nint NumGlyphs(const Font& font);\n\n// Returns the index format of the font\nint IndexFormat(const Font& font);\n\n// Sets *glyph_data and *glyph_size to point to the location of the glyph data\n// with the given index. Returns false if the glyph is not found.\nbool GetGlyphData(const Font& font, int glyph_index,\n                  const uint8_t** glyph_data, size_t* glyph_size);\n\n// Removes the digital signature (DSIG) table\nbool RemoveDigitalSignature(Font* font);\n\n} // namespace woff2\n\n#endif  // WOFF2_FONT_H_\n"
  },
  {
    "path": "libs/woff2/src/glyph.cc",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Glyph manipulation */\n\n#include \"./glyph.h\"\n\n#include <stdlib.h>\n#include <limits>\n#include \"./buffer.h\"\n#include \"./store_bytes.h\"\n\nnamespace woff2 {\n\nstatic const int32_t kFLAG_ONCURVE = 1;\nstatic const int32_t kFLAG_XSHORT = 1 << 1;\nstatic const int32_t kFLAG_YSHORT = 1 << 2;\nstatic const int32_t kFLAG_REPEAT = 1 << 3;\nstatic const int32_t kFLAG_XREPEATSIGN = 1 << 4;\nstatic const int32_t kFLAG_YREPEATSIGN = 1 << 5;\nstatic const int32_t kFLAG_OVERLAP_SIMPLE = 1 << 6;\nstatic const int32_t kFLAG_ARG_1_AND_2_ARE_WORDS = 1 << 0;\nstatic const int32_t kFLAG_WE_HAVE_A_SCALE = 1 << 3;\nstatic const int32_t kFLAG_MORE_COMPONENTS = 1 << 5;\nstatic const int32_t kFLAG_WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\nstatic const int32_t kFLAG_WE_HAVE_A_TWO_BY_TWO = 1 << 7;\nstatic const int32_t kFLAG_WE_HAVE_INSTRUCTIONS = 1 << 8;\n\nbool ReadCompositeGlyphData(Buffer* buffer, Glyph* glyph) {\n  glyph->have_instructions = false;\n  glyph->composite_data = buffer->buffer() + buffer->offset();\n  size_t start_offset = buffer->offset();\n  uint16_t flags = kFLAG_MORE_COMPONENTS;\n  while (flags & kFLAG_MORE_COMPONENTS) {\n    if (!buffer->ReadU16(&flags)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    glyph->have_instructions |= (flags & kFLAG_WE_HAVE_INSTRUCTIONS) != 0;\n    size_t arg_size = 2;  // glyph index\n    if (flags & kFLAG_ARG_1_AND_2_ARE_WORDS) {\n      arg_size += 4;\n    } else {\n      arg_size += 2;\n    }\n    if (flags & kFLAG_WE_HAVE_A_SCALE) {\n      arg_size += 2;\n    } else if (flags & kFLAG_WE_HAVE_AN_X_AND_Y_SCALE) {\n      arg_size += 4;\n    } else if (flags & kFLAG_WE_HAVE_A_TWO_BY_TWO) {\n      arg_size += 8;\n    }\n    if (!buffer->Skip(arg_size)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n  }\n  if (buffer->offset() - start_offset > std::numeric_limits<uint32_t>::max()) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  glyph->composite_data_size = buffer->offset() - start_offset;\n  return true;\n}\n\nbool ReadGlyph(const uint8_t* data, size_t len, Glyph* glyph) {\n  Buffer buffer(data, len);\n\n  int16_t num_contours;\n  if (!buffer.ReadS16(&num_contours)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  // Read the bounding box.\n  if (!buffer.ReadS16(&glyph->x_min) ||\n      !buffer.ReadS16(&glyph->y_min) ||\n      !buffer.ReadS16(&glyph->x_max) ||\n      !buffer.ReadS16(&glyph->y_max)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  if (num_contours == 0) {\n    // Empty glyph.\n    return true;\n  }\n\n  if (num_contours > 0) {\n    // Simple glyph.\n    glyph->contours.resize(num_contours);\n\n    // Read the number of points per contour.\n    uint16_t last_point_index = 0;\n    for (int i = 0; i < num_contours; ++i) {\n      uint16_t point_index;\n      if (!buffer.ReadU16(&point_index)) {\n        return FONT_COMPRESSION_FAILURE();\n      }\n      uint16_t num_points = point_index - last_point_index + (i == 0 ? 1 : 0);\n      glyph->contours[i].resize(num_points);\n      last_point_index = point_index;\n    }\n\n    // Read the instructions.\n    if (!buffer.ReadU16(&glyph->instructions_size)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    glyph->instructions_data = data + buffer.offset();\n    if (!buffer.Skip(glyph->instructions_size)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n\n    // Read the run-length coded flags.\n    std::vector<std::vector<uint8_t> > flags(num_contours);\n    {\n      uint8_t flag = 0;\n      uint8_t flag_repeat = 0;\n      for (int i = 0; i < num_contours; ++i) {\n        flags[i].resize(glyph->contours[i].size());\n        for (size_t j = 0; j < glyph->contours[i].size(); ++j) {\n          if (flag_repeat == 0) {\n            if (!buffer.ReadU8(&flag)) {\n              return FONT_COMPRESSION_FAILURE();\n            }\n            if (flag & kFLAG_REPEAT) {\n              if (!buffer.ReadU8(&flag_repeat)) {\n                return FONT_COMPRESSION_FAILURE();\n              }\n            }\n          } else {\n            flag_repeat--;\n          }\n          flags[i][j] = flag;\n          glyph->contours[i][j].on_curve = flag & kFLAG_ONCURVE;\n        }\n      }\n    }\n\n    if (!flags.empty() && !flags[0].empty()) {\n      glyph->overlap_simple_flag_set = (flags[0][0] & kFLAG_OVERLAP_SIMPLE);\n    }\n\n    // Read the x coordinates.\n    int prev_x = 0;\n    for (int i = 0; i < num_contours; ++i) {\n      for (size_t j = 0; j < glyph->contours[i].size(); ++j) {\n        uint8_t flag = flags[i][j];\n        if (flag & kFLAG_XSHORT) {\n          // single byte x-delta coord value\n          uint8_t x_delta;\n          if (!buffer.ReadU8(&x_delta)) {\n            return FONT_COMPRESSION_FAILURE();\n          }\n          int sign = (flag & kFLAG_XREPEATSIGN) ? 1 : -1;\n          glyph->contours[i][j].x = prev_x + sign * x_delta;\n        } else {\n          // double byte x-delta coord value\n          int16_t x_delta = 0;\n          if (!(flag & kFLAG_XREPEATSIGN)) {\n            if (!buffer.ReadS16(&x_delta)) {\n              return FONT_COMPRESSION_FAILURE();\n            }\n          }\n          glyph->contours[i][j].x = prev_x + x_delta;\n        }\n        prev_x = glyph->contours[i][j].x;\n      }\n    }\n\n    // Read the y coordinates.\n    int prev_y = 0;\n    for (int i = 0; i < num_contours; ++i) {\n      for (size_t j = 0; j < glyph->contours[i].size(); ++j) {\n        uint8_t flag = flags[i][j];\n        if (flag & kFLAG_YSHORT) {\n          // single byte y-delta coord value\n          uint8_t y_delta;\n          if (!buffer.ReadU8(&y_delta)) {\n            return FONT_COMPRESSION_FAILURE();\n          }\n          int sign = (flag & kFLAG_YREPEATSIGN) ? 1 : -1;\n          glyph->contours[i][j].y = prev_y + sign * y_delta;\n        } else {\n          // double byte y-delta coord value\n          int16_t y_delta = 0;\n          if (!(flag & kFLAG_YREPEATSIGN)) {\n            if (!buffer.ReadS16(&y_delta)) {\n              return FONT_COMPRESSION_FAILURE();\n            }\n          }\n          glyph->contours[i][j].y = prev_y + y_delta;\n        }\n        prev_y = glyph->contours[i][j].y;\n      }\n    }\n  } else if (num_contours == -1) {\n    // Composite glyph.\n    if (!ReadCompositeGlyphData(&buffer, glyph)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    // Read the instructions.\n    if (glyph->have_instructions) {\n      if (!buffer.ReadU16(&glyph->instructions_size)) {\n        return FONT_COMPRESSION_FAILURE();\n      }\n      glyph->instructions_data = data + buffer.offset();\n      if (!buffer.Skip(glyph->instructions_size)) {\n        return FONT_COMPRESSION_FAILURE();\n      }\n    } else {\n      glyph->instructions_size = 0;\n    }\n  } else {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  return true;\n}\n\nnamespace {\n\nvoid StoreBbox(const Glyph& glyph, size_t* offset, uint8_t* dst) {\n  Store16(glyph.x_min, offset, dst);\n  Store16(glyph.y_min, offset, dst);\n  Store16(glyph.x_max, offset, dst);\n  Store16(glyph.y_max, offset, dst);\n}\n\nvoid StoreInstructions(const Glyph& glyph, size_t* offset, uint8_t* dst) {\n  Store16(glyph.instructions_size, offset, dst);\n  StoreBytes(glyph.instructions_data, glyph.instructions_size, offset, dst);\n}\n\nbool StoreEndPtsOfContours(const Glyph& glyph, size_t* offset, uint8_t* dst) {\n  int end_point = -1;\n  for (const auto& contour : glyph.contours) {\n    end_point += contour.size();\n    if (contour.size() > std::numeric_limits<uint16_t>::max() ||\n        end_point > std::numeric_limits<uint16_t>::max()) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    Store16(end_point, offset, dst);\n  }\n  return true;\n}\n\nbool StorePoints(const Glyph& glyph, size_t* offset,\n                 uint8_t* dst, size_t dst_size) {\n  int previous_flag = -1;\n  int repeat_count = 0;\n  int last_x = 0;\n  int last_y = 0;\n  size_t x_bytes = 0;\n  size_t y_bytes = 0;\n\n  // Store the flags and calculate the total size of the x and y coordinates.\n  for (const auto& contour : glyph.contours) {\n    for (const auto& point : contour) {\n      int flag = point.on_curve ? kFLAG_ONCURVE : 0;\n      if (previous_flag == -1 && glyph.overlap_simple_flag_set) {\n        // First flag needs to have overlap simple bit set.\n        flag = flag | kFLAG_OVERLAP_SIMPLE;\n      }\n      int dx = point.x - last_x;\n      int dy = point.y - last_y;\n      if (dx == 0) {\n        flag |= kFLAG_XREPEATSIGN;\n      } else if (dx > -256 && dx < 256) {\n        flag |= kFLAG_XSHORT | (dx > 0 ? kFLAG_XREPEATSIGN : 0);\n        x_bytes += 1;\n      } else {\n        x_bytes += 2;\n      }\n      if (dy == 0) {\n        flag |= kFLAG_YREPEATSIGN;\n      } else if (dy > -256 && dy < 256) {\n        flag |= kFLAG_YSHORT | (dy > 0 ? kFLAG_YREPEATSIGN : 0);\n        y_bytes += 1;\n      } else {\n        y_bytes += 2;\n      }\n      if (flag == previous_flag && repeat_count != 255) {\n        dst[*offset - 1] |= kFLAG_REPEAT;\n        repeat_count++;\n      } else {\n        if (repeat_count != 0) {\n          if (*offset >= dst_size) {\n            return FONT_COMPRESSION_FAILURE();\n          }\n          dst[(*offset)++] = repeat_count;\n        }\n        if (*offset >= dst_size) {\n          return FONT_COMPRESSION_FAILURE();\n        }\n        dst[(*offset)++] = flag;\n        repeat_count = 0;\n      }\n      last_x = point.x;\n      last_y = point.y;\n      previous_flag = flag;\n    }\n  }\n  if (repeat_count != 0) {\n    if (*offset >= dst_size) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    dst[(*offset)++] = repeat_count;\n  }\n\n  if (*offset + x_bytes + y_bytes > dst_size) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  // Store the x and y coordinates.\n  size_t x_offset = *offset;\n  size_t y_offset = *offset + x_bytes;\n  last_x = 0;\n  last_y = 0;\n  for (const auto& contour : glyph.contours) {\n    for (const auto& point : contour) {\n      int dx = point.x - last_x;\n      int dy = point.y - last_y;\n      if (dx == 0) {\n        // pass\n      } else if (dx > -256 && dx < 256) {\n        dst[x_offset++] = std::abs(dx);\n      } else {\n        Store16(dx, &x_offset, dst);\n      }\n      if (dy == 0) {\n        // pass\n      } else if (dy > -256 && dy < 256) {\n        dst[y_offset++] = std::abs(dy);\n      } else {\n        Store16(dy, &y_offset, dst);\n      }\n      last_x += dx;\n      last_y += dy;\n    }\n  }\n  *offset = y_offset;\n  return true;\n}\n\n}  // namespace\n\nbool StoreGlyph(const Glyph& glyph, uint8_t* dst, size_t* dst_size) {\n  size_t offset = 0;\n  if (glyph.composite_data_size > 0) {\n    // Composite glyph.\n    if (*dst_size < ((10ULL + glyph.composite_data_size) +\n                     ((glyph.have_instructions ? 2ULL : 0) +\n                      glyph.instructions_size))) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    Store16(-1, &offset, dst);\n    StoreBbox(glyph, &offset, dst);\n    StoreBytes(glyph.composite_data, glyph.composite_data_size, &offset, dst);\n    if (glyph.have_instructions) {\n      StoreInstructions(glyph, &offset, dst);\n    }\n  } else if (glyph.contours.size() > 0) {\n    // Simple glyph.\n    if (glyph.contours.size() > std::numeric_limits<int16_t>::max()) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    if (*dst_size < ((12ULL + 2 * glyph.contours.size()) +\n                     glyph.instructions_size)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    Store16(glyph.contours.size(), &offset, dst);\n    StoreBbox(glyph, &offset, dst);\n    if (!StoreEndPtsOfContours(glyph, &offset, dst)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    StoreInstructions(glyph, &offset, dst);\n    if (!StorePoints(glyph, &offset, dst, *dst_size)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n  }\n  *dst_size = offset;\n  return true;\n}\n\n} // namespace woff2\n"
  },
  {
    "path": "libs/woff2/src/glyph.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Data model and I/O for glyph data within sfnt format files for the purpose of\n   performing the preprocessing step of the WOFF 2.0 conversion. */\n\n#ifndef WOFF2_GLYPH_H_\n#define WOFF2_GLYPH_H_\n\n#include <inttypes.h>\n#include <stddef.h>\n\n#include <cstdint>\n#include <vector>\n\nnamespace woff2 {\n\n// Represents a parsed simple or composite glyph. The composite glyph data and\n// instructions are un-parsed and we keep only pointers to the raw data,\n// therefore the glyph is valid only so long the data from which it was parsed\n// is around.\nclass Glyph {\n public:\n  Glyph()\n      : instructions_size(0),\n        overlap_simple_flag_set(false),\n        composite_data_size(0) {}\n\n  // Bounding box.\n  int16_t x_min;\n  int16_t x_max;\n  int16_t y_min;\n  int16_t y_max;\n\n  // Instructions.\n  uint16_t instructions_size;\n  const uint8_t* instructions_data;\n\n  // Flags.\n  bool overlap_simple_flag_set;\n\n  // Data model for simple glyphs.\n  struct Point {\n    int x;\n    int y;\n    bool on_curve;\n  };\n  std::vector<std::vector<Point> > contours;\n\n  // Data for composite glyphs.\n  const uint8_t* composite_data;\n  uint32_t composite_data_size;\n  bool have_instructions;\n};\n\n// Parses the glyph from the given data. Returns false on parsing failure or\n// buffer overflow. The glyph is valid only so long the input data pointer is\n// valid.\nbool ReadGlyph(const uint8_t* data, size_t len, Glyph* glyph);\n\n// Stores the glyph into the specified dst buffer. The *dst_size is the buffer\n// size on entry and is set to the actual (unpadded) stored size on exit.\n// Returns false on buffer overflow.\nbool StoreGlyph(const Glyph& glyph, uint8_t* dst, size_t* dst_size);\n\n} // namespace woff2\n\n#endif  // WOFF2_GLYPH_H_\n"
  },
  {
    "path": "libs/woff2/src/normalize.cc",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Glyph normalization */\n\n#include \"./normalize.h\"\n\n#include <inttypes.h>\n#include <stddef.h>\n\n#include \"./buffer.h\"\n#include \"./port.h\"\n#include \"./font.h\"\n#include \"./glyph.h\"\n#include \"./round.h\"\n#include \"./store_bytes.h\"\n#include \"./table_tags.h\"\n#include \"./woff2_common.h\"\n\nnamespace woff2 {\n\nnamespace {\n\nvoid StoreLoca(int index_fmt, uint32_t value, size_t* offset, uint8_t* dst) {\n  if (index_fmt == 0) {\n    Store16(value >> 1, offset, dst);\n  } else {\n    StoreU32(value, offset, dst);\n  }\n}\n\n}  // namespace\n\nnamespace {\n\nbool WriteNormalizedLoca(int index_fmt, int num_glyphs, Font* font) {\n  Font::Table* glyf_table = font->FindTable(kGlyfTableTag);\n  Font::Table* loca_table = font->FindTable(kLocaTableTag);\n\n  int glyph_sz = index_fmt == 0 ? 2 : 4;\n  loca_table->buffer.resize(Round4(num_glyphs + 1) * glyph_sz);\n  loca_table->length = (num_glyphs + 1) * glyph_sz;\n\n  uint8_t* glyf_dst = num_glyphs ? &glyf_table->buffer[0] : NULL;\n  uint8_t* loca_dst = &loca_table->buffer[0];\n  uint32_t glyf_offset = 0;\n  size_t loca_offset = 0;\n\n  for (int i = 0; i < num_glyphs; ++i) {\n    StoreLoca(index_fmt, glyf_offset, &loca_offset, loca_dst);\n    Glyph glyph;\n    const uint8_t* glyph_data;\n    size_t glyph_size;\n    if (!GetGlyphData(*font, i, &glyph_data, &glyph_size) ||\n        (glyph_size > 0 && !ReadGlyph(glyph_data, glyph_size, &glyph))) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    size_t glyf_dst_size = glyf_table->buffer.size() - glyf_offset;\n    if (!StoreGlyph(glyph, glyf_dst + glyf_offset, &glyf_dst_size)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    glyf_dst_size = Round4(glyf_dst_size);\n    if (glyf_dst_size > std::numeric_limits<uint32_t>::max() ||\n        glyf_offset + static_cast<uint32_t>(glyf_dst_size) < glyf_offset ||\n        (index_fmt == 0 && glyf_offset + glyf_dst_size >= (1UL << 17))) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    glyf_offset += glyf_dst_size;\n  }\n\n  StoreLoca(index_fmt, glyf_offset, &loca_offset, loca_dst);\n\n  glyf_table->buffer.resize(glyf_offset);\n  glyf_table->data = glyf_offset ? &glyf_table->buffer[0] : NULL;\n  glyf_table->length = glyf_offset;\n  loca_table->data = loca_offset ? &loca_table->buffer[0] : NULL;\n\n  return true;\n}\n\n}  // namespace\n\nnamespace {\n\nbool MakeEditableBuffer(Font* font, int tableTag) {\n  Font::Table* table = font->FindTable(tableTag);\n  if (table == NULL) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  if (table->IsReused()) {\n    return true;\n  }\n  unsigned sz = Round4(table->length);\n  table->buffer.resize(sz);\n  uint8_t* buf = &table->buffer[0];\n  memcpy(buf, table->data, table->length);\n  if (PREDICT_FALSE(sz > table->length)) {\n    memset(buf + table->length, 0, sz - table->length);\n  }\n  table->data = buf;\n  return true;\n}\n\n}  // namespace\n\nbool NormalizeGlyphs(Font* font) {\n  Font::Table* head_table = font->FindTable(kHeadTableTag);\n  Font::Table* glyf_table = font->FindTable(kGlyfTableTag);\n  Font::Table* loca_table = font->FindTable(kLocaTableTag);\n  if (head_table == NULL) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  // If you don't have glyf/loca this transform isn't very interesting\n  if (loca_table == NULL && glyf_table == NULL) {\n    return true;\n  }\n  // It would be best if you didn't have just one of glyf/loca\n  if ((glyf_table == NULL) != (loca_table == NULL)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  // Must share neither or both loca & glyf\n  if (loca_table->IsReused() != glyf_table->IsReused()) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  if (loca_table->IsReused()) {\n    return true;\n  }\n\n  int index_fmt = head_table->data[51];\n  int num_glyphs = NumGlyphs(*font);\n\n  // We need to allocate a bit more than its original length for the normalized\n  // glyf table, since it can happen that the glyphs in the original table are\n  // 2-byte aligned, while in the normalized table they are 4-byte aligned.\n  // That gives a maximum of 2 bytes increase per glyph. However, there is no\n  // theoretical guarantee that the total size of the flags plus the coordinates\n  // is the smallest possible in the normalized version, so we have to allow\n  // some general overhead.\n  // TODO(user) Figure out some more precise upper bound on the size of\n  // the overhead.\n  size_t max_normalized_glyf_size = 1.1 * glyf_table->length + 2 * num_glyphs;\n\n  glyf_table->buffer.resize(max_normalized_glyf_size);\n\n  // if we can't write a loca using short's (index_fmt 0)\n  // try again using longs (index_fmt 1)\n  if (!WriteNormalizedLoca(index_fmt, num_glyphs, font)) {\n    if (index_fmt != 0) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n\n    // Rewrite loca with 4-byte entries & update head to match\n    index_fmt = 1;\n    if (!WriteNormalizedLoca(index_fmt, num_glyphs, font)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    head_table->buffer[51] = 1;\n  }\n\n  return true;\n}\n\nbool NormalizeOffsets(Font* font) {\n  uint32_t offset = 12 + 16 * font->num_tables;\n  for (auto tag : font->OutputOrderedTags()) {\n    auto& table = font->tables[tag];\n    table.offset = offset;\n    offset += Round4(table.length);\n  }\n  return true;\n}\n\nnamespace {\n\nuint32_t ComputeHeaderChecksum(const Font& font) {\n  uint32_t checksum = font.flavor;\n  uint16_t max_pow2 = font.num_tables ? Log2Floor(font.num_tables) : 0;\n  uint16_t search_range = max_pow2 ? 1 << (max_pow2 + 4) : 0;\n  uint16_t range_shift = (font.num_tables << 4) - search_range;\n  checksum += (font.num_tables << 16 | search_range);\n  checksum += (max_pow2 << 16 | range_shift);\n  for (const auto& i : font.tables) {\n    const Font::Table* table = &i.second;\n    if (table->IsReused()) {\n      table = table->reuse_of;\n    }\n    checksum += table->tag;\n    checksum += table->checksum;\n    checksum += table->offset;\n    checksum += table->length;\n  }\n  return checksum;\n}\n\n}  // namespace\n\nbool FixChecksums(Font* font) {\n  Font::Table* head_table = font->FindTable(kHeadTableTag);\n  if (head_table == NULL) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  if (head_table->reuse_of != NULL) {\n    head_table = head_table->reuse_of;\n  }\n  if (head_table->length < 12) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  uint8_t* head_buf = &head_table->buffer[0];\n  size_t offset = 8;\n  StoreU32(0, &offset, head_buf);\n  uint32_t file_checksum = 0;\n  for (auto& i : font->tables) {\n    Font::Table* table = &i.second;\n    if (table->IsReused()) {\n      table = table->reuse_of;\n    }\n    table->checksum = ComputeULongSum(table->data, table->length);\n    file_checksum += table->checksum;\n  }\n\n  file_checksum += ComputeHeaderChecksum(*font);\n  offset = 8;\n  StoreU32(0xb1b0afba - file_checksum, &offset, head_buf);\n\n  return true;\n}\n\nnamespace {\nbool MarkTransformed(Font* font) {\n  Font::Table* head_table = font->FindTable(kHeadTableTag);\n  if (head_table == NULL) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  if (head_table->reuse_of != NULL) {\n    head_table = head_table->reuse_of;\n  }\n  if (head_table->length < 17) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  // set bit 11 of head table 'flags' to indicate that font has undergone\n  // lossless modifying transform\n  int head_flags = head_table->data[16];\n  head_table->buffer[16] = head_flags | 0x08;\n  return true;\n}\n}  // namespace\n\n\nbool NormalizeWithoutFixingChecksums(Font* font) {\n  return (MakeEditableBuffer(font, kHeadTableTag) &&\n          RemoveDigitalSignature(font) &&\n          MarkTransformed(font) &&\n          NormalizeGlyphs(font) &&\n          NormalizeOffsets(font));\n}\n\nbool NormalizeFont(Font* font) {\n  return (NormalizeWithoutFixingChecksums(font) &&\n          FixChecksums(font));\n}\n\nbool NormalizeFontCollection(FontCollection* font_collection) {\n  if (font_collection->fonts.size() == 1) {\n    return NormalizeFont(&font_collection->fonts[0]);\n  }\n\n  uint32_t offset = CollectionHeaderSize(font_collection->header_version,\n    font_collection->fonts.size());\n  for (auto& font : font_collection->fonts) {\n    if (!NormalizeWithoutFixingChecksums(&font)) {\n#ifdef FONT_COMPRESSION_BIN\n      fprintf(stderr, \"Font normalization failed.\\n\");\n#endif\n      return FONT_COMPRESSION_FAILURE();\n    }\n    offset += kSfntHeaderSize + kSfntEntrySize * font.num_tables;\n  }\n\n  // Start table offsets after TTC Header and Sfnt Headers\n  for (auto& font : font_collection->fonts) {\n    for (auto tag : font.OutputOrderedTags()) {\n      Font::Table& table = font.tables[tag];\n      if (table.IsReused()) {\n        table.offset = table.reuse_of->offset;\n      } else {\n        table.offset = offset;\n        offset += Round4(table.length);\n      }\n    }\n  }\n\n  // Now we can fix the checksums\n  for (auto& font : font_collection->fonts) {\n    if (!FixChecksums(&font)) {\n#ifdef FONT_COMPRESSION_BIN\n      fprintf(stderr, \"Failed to fix checksums\\n\");\n#endif\n      return FONT_COMPRESSION_FAILURE();\n    }\n  }\n\n  return true;\n}\n\n} // namespace woff2\n"
  },
  {
    "path": "libs/woff2/src/normalize.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Functions for normalizing fonts. Since the WOFF 2.0 decoder creates font\n   files in normalized form, the WOFF 2.0 conversion is guaranteed to be\n   lossless (in a bitwise sense) only for normalized font files. */\n\n#ifndef WOFF2_NORMALIZE_H_\n#define WOFF2_NORMALIZE_H_\n\nnamespace woff2 {\n\nstruct Font;\nstruct FontCollection;\n\n// Changes the offset fields of the table headers so that the data for the\n// tables will be written in order of increasing tag values, without any gaps\n// other than the 4-byte padding.\nbool NormalizeOffsets(Font* font);\n\n// Changes the checksum fields of the table headers and the checksum field of\n// the head table so that it matches the current data.\nbool FixChecksums(Font* font);\n\n// Parses each of the glyphs in the font and writes them again to the glyf\n// table in normalized form, as defined by the StoreGlyph() function. Changes\n// the loca table accordigly.\nbool NormalizeGlyphs(Font* font);\n\n// Performs all of the normalization steps above.\nbool NormalizeFont(Font* font);\nbool NormalizeFontCollection(FontCollection* font_collection);\n\n} // namespace woff2\n\n#endif  // WOFF2_NORMALIZE_H_\n"
  },
  {
    "path": "libs/woff2/src/port.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Helper function for bit twiddling and macros for branch prediction. */\n\n#ifndef WOFF2_PORT_H_\n#define WOFF2_PORT_H_\n\n#include <assert.h>\n\nnamespace woff2 {\n\ntypedef unsigned int       uint32;\n\ninline int Log2Floor(uint32 n) {\n#if defined(__GNUC__)\n  return n == 0 ? -1 : 31 ^ __builtin_clz(n);\n#else\n  if (n == 0)\n    return -1;\n  int log = 0;\n  uint32 value = n;\n  for (int i = 4; i >= 0; --i) {\n    int shift = (1 << i);\n    uint32 x = value >> shift;\n    if (x != 0) {\n      value = x;\n      log += shift;\n    }\n  }\n  assert(value == 1);\n  return log;\n#endif\n}\n\n} // namespace woff2\n\n/* Compatibility with non-clang compilers. */\n#ifndef __has_builtin\n#define __has_builtin(x) 0\n#endif\n\n#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 95) || \\\n    (defined(__llvm__) && __has_builtin(__builtin_expect))\n#define PREDICT_FALSE(x) (__builtin_expect(x, 0))\n#define PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))\n#else\n#define PREDICT_FALSE(x) (x)\n#define PREDICT_TRUE(x) (x)\n#endif\n\n#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \\\n    (defined(M_ARM) && (M_ARM == 7)) || \\\n    defined(__aarch64__) || defined(__ARM64_ARCH_8__) || defined(__i386) || \\\n    defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)\n#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)\n#define WOFF_LITTLE_ENDIAN\n#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)\n#define WOFF_BIG_ENDIAN\n#endif  /* endianness */\n#endif  /* CPU whitelist */\n\n#endif  // WOFF2_PORT_H_\n"
  },
  {
    "path": "libs/woff2/src/round.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Helper for rounding */\n\n#ifndef WOFF2_ROUND_H_\n#define WOFF2_ROUND_H_\n\n#include <limits>\n\nnamespace woff2 {\n\n// Round a value up to the nearest multiple of 4. Don't round the value in the\n// case that rounding up overflows.\ntemplate<typename T> T Round4(T value) {\n  if (std::numeric_limits<T>::max() - value < 3) {\n    return value;\n  }\n  return (value + 3) & ~3;\n}\n\n} // namespace woff2\n\n#endif  // WOFF2_ROUND_H_\n"
  },
  {
    "path": "libs/woff2/src/store_bytes.h",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Helper functions for storing integer values into byte streams.\n   No bounds checking is performed, that is the responsibility of the caller. */\n\n#ifndef WOFF2_STORE_BYTES_H_\n#define WOFF2_STORE_BYTES_H_\n\n#include <inttypes.h>\n#include <stddef.h>\n#include <string.h>\n\n#include \"./port.h\"\n\nnamespace woff2 {\n\ninline size_t StoreU32(uint8_t* dst, size_t offset, uint32_t x) {\n  dst[offset] = x >> 24;\n  dst[offset + 1] = x >> 16;\n  dst[offset + 2] = x >> 8;\n  dst[offset + 3] = x;\n  return offset + 4;\n}\n\ninline size_t Store16(uint8_t* dst, size_t offset, int x) {\n  dst[offset] = x >> 8;\n  dst[offset + 1] = x;\n  return offset + 2;\n}\n\ninline void StoreU32(uint32_t val, size_t* offset, uint8_t* dst) {\n  dst[(*offset)++] = val >> 24;\n  dst[(*offset)++] = val >> 16;\n  dst[(*offset)++] = val >> 8;\n  dst[(*offset)++] = val;\n}\n\ninline void Store16(int val, size_t* offset, uint8_t* dst) {\n  dst[(*offset)++] = val >> 8;\n  dst[(*offset)++] = val;\n}\n\ninline void StoreBytes(const uint8_t* data, size_t len,\n                       size_t* offset, uint8_t* dst) {\n  memcpy(&dst[*offset], data, len);\n  *offset += len;\n}\n\n} // namespace woff2\n\n#endif  // WOFF2_STORE_BYTES_H_\n"
  },
  {
    "path": "libs/woff2/src/table_tags.cc",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Font table tags */\n\n#include \"./table_tags.h\"\n\nnamespace woff2 {\n\n// Note that the byte order is big-endian, not the same as ots.cc\n#define TAG(a, b, c, d) ((a << 24) | (b << 16) | (c << 8) | d)\n\nconst uint32_t kKnownTags[63] = {\n  TAG('c', 'm', 'a', 'p'),  // 0\n  TAG('h', 'e', 'a', 'd'),  // 1\n  TAG('h', 'h', 'e', 'a'),  // 2\n  TAG('h', 'm', 't', 'x'),  // 3\n  TAG('m', 'a', 'x', 'p'),  // 4\n  TAG('n', 'a', 'm', 'e'),  // 5\n  TAG('O', 'S', '/', '2'),  // 6\n  TAG('p', 'o', 's', 't'),  // 7\n  TAG('c', 'v', 't', ' '),  // 8\n  TAG('f', 'p', 'g', 'm'),  // 9\n  TAG('g', 'l', 'y', 'f'),  // 10\n  TAG('l', 'o', 'c', 'a'),  // 11\n  TAG('p', 'r', 'e', 'p'),  // 12\n  TAG('C', 'F', 'F', ' '),  // 13\n  TAG('V', 'O', 'R', 'G'),  // 14\n  TAG('E', 'B', 'D', 'T'),  // 15\n  TAG('E', 'B', 'L', 'C'),  // 16\n  TAG('g', 'a', 's', 'p'),  // 17\n  TAG('h', 'd', 'm', 'x'),  // 18\n  TAG('k', 'e', 'r', 'n'),  // 19\n  TAG('L', 'T', 'S', 'H'),  // 20\n  TAG('P', 'C', 'L', 'T'),  // 21\n  TAG('V', 'D', 'M', 'X'),  // 22\n  TAG('v', 'h', 'e', 'a'),  // 23\n  TAG('v', 'm', 't', 'x'),  // 24\n  TAG('B', 'A', 'S', 'E'),  // 25\n  TAG('G', 'D', 'E', 'F'),  // 26\n  TAG('G', 'P', 'O', 'S'),  // 27\n  TAG('G', 'S', 'U', 'B'),  // 28\n  TAG('E', 'B', 'S', 'C'),  // 29\n  TAG('J', 'S', 'T', 'F'),  // 30\n  TAG('M', 'A', 'T', 'H'),  // 31\n  TAG('C', 'B', 'D', 'T'),  // 32\n  TAG('C', 'B', 'L', 'C'),  // 33\n  TAG('C', 'O', 'L', 'R'),  // 34\n  TAG('C', 'P', 'A', 'L'),  // 35\n  TAG('S', 'V', 'G', ' '),  // 36\n  TAG('s', 'b', 'i', 'x'),  // 37\n  TAG('a', 'c', 'n', 't'),  // 38\n  TAG('a', 'v', 'a', 'r'),  // 39\n  TAG('b', 'd', 'a', 't'),  // 40\n  TAG('b', 'l', 'o', 'c'),  // 41\n  TAG('b', 's', 'l', 'n'),  // 42\n  TAG('c', 'v', 'a', 'r'),  // 43\n  TAG('f', 'd', 's', 'c'),  // 44\n  TAG('f', 'e', 'a', 't'),  // 45\n  TAG('f', 'm', 't', 'x'),  // 46\n  TAG('f', 'v', 'a', 'r'),  // 47\n  TAG('g', 'v', 'a', 'r'),  // 48\n  TAG('h', 's', 't', 'y'),  // 49\n  TAG('j', 'u', 's', 't'),  // 50\n  TAG('l', 'c', 'a', 'r'),  // 51\n  TAG('m', 'o', 'r', 't'),  // 52\n  TAG('m', 'o', 'r', 'x'),  // 53\n  TAG('o', 'p', 'b', 'd'),  // 54\n  TAG('p', 'r', 'o', 'p'),  // 55\n  TAG('t', 'r', 'a', 'k'),  // 56\n  TAG('Z', 'a', 'p', 'f'),  // 57\n  TAG('S', 'i', 'l', 'f'),  // 58\n  TAG('G', 'l', 'a', 't'),  // 59\n  TAG('G', 'l', 'o', 'c'),  // 60\n  TAG('F', 'e', 'a', 't'),  // 61\n  TAG('S', 'i', 'l', 'l'),  // 62\n};\n\n} // namespace woff2\n"
  },
  {
    "path": "libs/woff2/src/table_tags.h",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Font table tags */\n\n#ifndef WOFF2_TABLE_TAGS_H_\n#define WOFF2_TABLE_TAGS_H_\n\n#include <inttypes.h>\n\nnamespace woff2 {\n\n// Tags of popular tables.\nstatic const uint32_t kGlyfTableTag = 0x676c7966;\nstatic const uint32_t kHeadTableTag = 0x68656164;\nstatic const uint32_t kLocaTableTag = 0x6c6f6361;\nstatic const uint32_t kDsigTableTag = 0x44534947;\nstatic const uint32_t kCffTableTag = 0x43464620;\nstatic const uint32_t kHmtxTableTag = 0x686d7478;\nstatic const uint32_t kHheaTableTag = 0x68686561;\nstatic const uint32_t kMaxpTableTag = 0x6d617870;\n\nextern const uint32_t kKnownTags[];\n\n} // namespace woff2\n\n#endif  // WOFF2_TABLE_TAGS_H_\n"
  },
  {
    "path": "libs/woff2/src/transform.cc",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Library for preprocessing fonts as part of the WOFF 2.0 conversion. */\n\n#include \"./transform.h\"\n\n#include <complex>  // for std::abs\n\n#include \"./buffer.h\"\n#include \"./font.h\"\n#include \"./glyph.h\"\n#include \"./table_tags.h\"\n#include \"./variable_length.h\"\n\nnamespace woff2 {\n\nnamespace {\n\nconst int FLAG_ARG_1_AND_2_ARE_WORDS = 1 << 0;\nconst int FLAG_WE_HAVE_INSTRUCTIONS = 1 << 8;\nconst int FLAG_OVERLAP_SIMPLE_BITMAP = 1 << 0;\n\nvoid WriteBytes(std::vector<uint8_t>* out, const uint8_t* data, size_t len) {\n  if (len == 0) return;\n  size_t offset = out->size();\n  out->resize(offset + len);\n  memcpy(&(*out)[offset], data, len);\n}\n\nvoid WriteBytes(std::vector<uint8_t>* out, const std::vector<uint8_t>& in) {\n  for (size_t i = 0; i < in.size(); ++i) {\n    out->push_back(in[i]);\n  }\n}\n\nvoid WriteUShort(std::vector<uint8_t>* out, int value) {\n  out->push_back(value >> 8);\n  out->push_back(value & 255);\n}\n\nvoid WriteLong(std::vector<uint8_t>* out, int value) {\n  out->push_back((value >> 24) & 255);\n  out->push_back((value >> 16) & 255);\n  out->push_back((value >> 8) & 255);\n  out->push_back(value & 255);\n}\n\n// Glyf table preprocessing, based on\n// GlyfEncoder.java\nclass GlyfEncoder {\n public:\n  explicit GlyfEncoder(int num_glyphs)\n      : n_glyphs_(num_glyphs) {\n    bbox_bitmap_.resize(((num_glyphs + 31) >> 5) << 2);\n  }\n\n  bool Encode(int glyph_id, const Glyph& glyph) {\n    if (glyph.composite_data_size > 0) {\n      WriteCompositeGlyph(glyph_id, glyph);\n    } else if (glyph.contours.size() > 0) {\n      WriteSimpleGlyph(glyph_id, glyph);\n    } else {\n      WriteUShort(&n_contour_stream_, 0);\n    }\n    return true;\n  }\n\n  void GetTransformedGlyfBytes(std::vector<uint8_t>* result) {\n    WriteUShort(result, 0);  // Version\n    WriteUShort(result, overlap_bitmap_.empty()\n                            ? 0x00\n                            : FLAG_OVERLAP_SIMPLE_BITMAP);  // Flags\n    WriteUShort(result, n_glyphs_);\n    WriteUShort(result, 0);  // index_format, will be set later\n    WriteLong(result, n_contour_stream_.size());\n    WriteLong(result, n_points_stream_.size());\n    WriteLong(result, flag_byte_stream_.size());\n    WriteLong(result, glyph_stream_.size());\n    WriteLong(result, composite_stream_.size());\n    WriteLong(result, bbox_bitmap_.size() + bbox_stream_.size());\n    WriteLong(result, instruction_stream_.size());\n    WriteBytes(result, n_contour_stream_);\n    WriteBytes(result, n_points_stream_);\n    WriteBytes(result, flag_byte_stream_);\n    WriteBytes(result, glyph_stream_);\n    WriteBytes(result, composite_stream_);\n    WriteBytes(result, bbox_bitmap_);\n    WriteBytes(result, bbox_stream_);\n    WriteBytes(result, instruction_stream_);\n    if (!overlap_bitmap_.empty()) {\n      WriteBytes(result, overlap_bitmap_);\n    }\n  }\n\n private:\n  void WriteInstructions(const Glyph& glyph) {\n    Write255UShort(&glyph_stream_, glyph.instructions_size);\n    WriteBytes(&instruction_stream_,\n               glyph.instructions_data, glyph.instructions_size);\n  }\n\n  bool ShouldWriteSimpleGlyphBbox(const Glyph& glyph) {\n    if (glyph.contours.empty() || glyph.contours[0].empty()) {\n      return glyph.x_min || glyph.y_min || glyph.x_max || glyph.y_max;\n    }\n\n    int16_t x_min = glyph.contours[0][0].x;\n    int16_t y_min = glyph.contours[0][0].y;\n    int16_t x_max = x_min;\n    int16_t y_max = y_min;\n    for (const auto& contour : glyph.contours) {\n      for (const auto& point : contour) {\n        if (point.x < x_min) x_min = point.x;\n        if (point.x > x_max) x_max = point.x;\n        if (point.y < y_min) y_min = point.y;\n        if (point.y > y_max) y_max = point.y;\n      }\n    }\n\n    if (glyph.x_min != x_min)\n      return true;\n    if (glyph.y_min != y_min)\n      return true;\n    if (glyph.x_max != x_max)\n      return true;\n    if (glyph.y_max != y_max)\n      return true;\n\n    return false;\n  }\n\n  void WriteSimpleGlyph(int glyph_id, const Glyph& glyph) {\n    if (glyph.overlap_simple_flag_set) {\n      EnsureOverlapBitmap();\n      overlap_bitmap_[glyph_id >> 3] |= 0x80 >> (glyph_id & 7);\n    }\n    int num_contours = glyph.contours.size();\n    WriteUShort(&n_contour_stream_, num_contours);\n    if (ShouldWriteSimpleGlyphBbox(glyph)) {\n      WriteBbox(glyph_id, glyph);\n    }\n    for (int i = 0; i < num_contours; i++) {\n      Write255UShort(&n_points_stream_, glyph.contours[i].size());\n    }\n    int lastX = 0;\n    int lastY = 0;\n    for (int i = 0; i < num_contours; i++) {\n      int num_points = glyph.contours[i].size();\n      for (int j = 0; j < num_points; j++) {\n        int x = glyph.contours[i][j].x;\n        int y = glyph.contours[i][j].y;\n        int dx = x - lastX;\n        int dy = y - lastY;\n        WriteTriplet(glyph.contours[i][j].on_curve, dx, dy);\n        lastX = x;\n        lastY = y;\n      }\n    }\n    if (num_contours > 0) {\n      WriteInstructions(glyph);\n    }\n  }\n\n  void WriteCompositeGlyph(int glyph_id, const Glyph& glyph) {\n    WriteUShort(&n_contour_stream_, -1);\n    WriteBbox(glyph_id, glyph);\n    WriteBytes(&composite_stream_,\n               glyph.composite_data,\n               glyph.composite_data_size);\n    if (glyph.have_instructions) {\n      WriteInstructions(glyph);\n    }\n  }\n\n  void WriteBbox(int glyph_id, const Glyph& glyph) {\n    bbox_bitmap_[glyph_id >> 3] |= 0x80 >> (glyph_id & 7);\n    WriteUShort(&bbox_stream_, glyph.x_min);\n    WriteUShort(&bbox_stream_, glyph.y_min);\n    WriteUShort(&bbox_stream_, glyph.x_max);\n    WriteUShort(&bbox_stream_, glyph.y_max);\n  }\n\n  void WriteTriplet(bool on_curve, int x, int y) {\n    int abs_x = std::abs(x);\n    int abs_y = std::abs(y);\n    int on_curve_bit = on_curve ? 0 : 128;\n    int x_sign_bit = (x < 0) ? 0 : 1;\n    int y_sign_bit = (y < 0) ? 0 : 1;\n    int xy_sign_bits = x_sign_bit + 2 * y_sign_bit;\n    if (x == 0 && abs_y < 1280) {\n      flag_byte_stream_.push_back(on_curve_bit +\n                                  ((abs_y & 0xf00) >> 7) + y_sign_bit);\n      glyph_stream_.push_back(abs_y & 0xff);\n    } else if (y == 0 && abs_x < 1280) {\n      flag_byte_stream_.push_back(on_curve_bit + 10 +\n                                  ((abs_x & 0xf00) >> 7) + x_sign_bit);\n      glyph_stream_.push_back(abs_x & 0xff);\n    } else if (abs_x < 65 && abs_y < 65) {\n      flag_byte_stream_.push_back(on_curve_bit + 20 +\n                                  ((abs_x - 1) & 0x30) +\n                                  (((abs_y - 1) & 0x30) >> 2) +\n                                  xy_sign_bits);\n      glyph_stream_.push_back((((abs_x - 1) & 0xf) << 4) | ((abs_y - 1) & 0xf));\n    } else if (abs_x < 769 && abs_y < 769) {\n      flag_byte_stream_.push_back(on_curve_bit + 84 +\n                                  12 * (((abs_x - 1) & 0x300) >> 8) +\n                                  (((abs_y - 1) & 0x300) >> 6) + xy_sign_bits);\n      glyph_stream_.push_back((abs_x - 1) & 0xff);\n      glyph_stream_.push_back((abs_y - 1) & 0xff);\n    } else if (abs_x < 4096 && abs_y < 4096) {\n      flag_byte_stream_.push_back(on_curve_bit + 120 + xy_sign_bits);\n      glyph_stream_.push_back(abs_x >> 4);\n      glyph_stream_.push_back(((abs_x & 0xf) << 4) | (abs_y >> 8));\n      glyph_stream_.push_back(abs_y & 0xff);\n    } else {\n      flag_byte_stream_.push_back(on_curve_bit + 124 + xy_sign_bits);\n      glyph_stream_.push_back(abs_x >> 8);\n      glyph_stream_.push_back(abs_x & 0xff);\n      glyph_stream_.push_back(abs_y >> 8);\n      glyph_stream_.push_back(abs_y & 0xff);\n    }\n  }\n\n  void EnsureOverlapBitmap() {\n    if (overlap_bitmap_.empty()) {\n      overlap_bitmap_.resize((n_glyphs_ + 7) >> 3);\n    }\n  }\n\n  std::vector<uint8_t> n_contour_stream_;\n  std::vector<uint8_t> n_points_stream_;\n  std::vector<uint8_t> flag_byte_stream_;\n  std::vector<uint8_t> composite_stream_;\n  std::vector<uint8_t> bbox_bitmap_;\n  std::vector<uint8_t> bbox_stream_;\n  std::vector<uint8_t> glyph_stream_;\n  std::vector<uint8_t> instruction_stream_;\n  std::vector<uint8_t> overlap_bitmap_;\n  int n_glyphs_;\n};\n\n}  // namespace\n\nbool TransformGlyfAndLocaTables(Font* font) {\n  // no transform for CFF\n  const Font::Table* glyf_table = font->FindTable(kGlyfTableTag);\n  const Font::Table* loca_table = font->FindTable(kLocaTableTag);\n\n  // If you don't have glyf/loca this transform isn't very interesting\n  if (loca_table == NULL && glyf_table == NULL) {\n    return true;\n  }\n  // It would be best if you didn't have just one of glyf/loca\n  if ((glyf_table == NULL) != (loca_table == NULL)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  // Must share neither or both loca & glyf\n  if (loca_table->IsReused() != glyf_table->IsReused()) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  if (loca_table->IsReused()) {\n    return true;\n  }\n\n  Font::Table* transformed_glyf = &font->tables[kGlyfTableTag ^ 0x80808080];\n  Font::Table* transformed_loca = &font->tables[kLocaTableTag ^ 0x80808080];\n\n  int num_glyphs = NumGlyphs(*font);\n  GlyfEncoder encoder(num_glyphs);\n  for (int i = 0; i < num_glyphs; ++i) {\n    Glyph glyph;\n    const uint8_t* glyph_data;\n    size_t glyph_size;\n    if (!GetGlyphData(*font, i, &glyph_data, &glyph_size) ||\n        (glyph_size > 0 && !ReadGlyph(glyph_data, glyph_size, &glyph))) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    encoder.Encode(i, glyph);\n  }\n  encoder.GetTransformedGlyfBytes(&transformed_glyf->buffer);\n\n  const Font::Table* head_table = font->FindTable(kHeadTableTag);\n  if (head_table == NULL || head_table->length < 52) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  transformed_glyf->buffer[7] = head_table->data[51];  // index_format\n\n  transformed_glyf->tag = kGlyfTableTag ^ 0x80808080;\n  transformed_glyf->length = transformed_glyf->buffer.size();\n  transformed_glyf->data = transformed_glyf->buffer.data();\n\n  transformed_loca->tag = kLocaTableTag ^ 0x80808080;\n  transformed_loca->length = 0;\n  transformed_loca->data = NULL;\n\n  return true;\n}\n\n// See https://www.microsoft.com/typography/otspec/hmtx.htm\n// See WOFF2 spec, 5.4. Transformed hmtx table format\nbool TransformHmtxTable(Font* font) {\n  const Font::Table* glyf_table = font->FindTable(kGlyfTableTag);\n  const Font::Table* hmtx_table = font->FindTable(kHmtxTableTag);\n  const Font::Table* hhea_table = font->FindTable(kHheaTableTag);\n\n  // If you don't have hmtx or a glyf not much is going to happen here\n  if (hmtx_table == NULL || glyf_table == NULL) {\n    return true;\n  }\n\n  // hmtx without hhea doesn't make sense\n  if (hhea_table == NULL) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  // Skip 34 to reach 'hhea' numberOfHMetrics\n  Buffer hhea_buf(hhea_table->data, hhea_table->length);\n  uint16_t num_hmetrics;\n  if (!hhea_buf.Skip(34) || !hhea_buf.ReadU16(&num_hmetrics)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  // Must have at least one hMetric\n  if (num_hmetrics < 1) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  int num_glyphs = NumGlyphs(*font);\n\n  // Most fonts can be transformed; assume it's a go until proven otherwise\n  std::vector<uint16_t> advance_widths;\n  std::vector<int16_t> proportional_lsbs;\n  std::vector<int16_t> monospace_lsbs;\n\n  bool remove_proportional_lsb = true;\n  bool remove_monospace_lsb = (num_glyphs - num_hmetrics) > 0;\n\n  Buffer hmtx_buf(hmtx_table->data, hmtx_table->length);\n  for (int i = 0; i < num_glyphs; i++) {\n    Glyph glyph;\n    const uint8_t* glyph_data;\n    size_t glyph_size;\n    if (!GetGlyphData(*font, i, &glyph_data, &glyph_size) ||\n        (glyph_size > 0 && !ReadGlyph(glyph_data, glyph_size, &glyph))) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n\n    uint16_t advance_width = 0;\n    int16_t lsb = 0;\n\n    if (i < num_hmetrics) {\n      // [0, num_hmetrics) are proportional hMetrics\n      if (!hmtx_buf.ReadU16(&advance_width)) {\n        return FONT_COMPRESSION_FAILURE();\n      }\n\n      if (!hmtx_buf.ReadS16(&lsb)) {\n        return FONT_COMPRESSION_FAILURE();\n      }\n\n      if (glyph_size > 0 && glyph.x_min != lsb) {\n        remove_proportional_lsb = false;\n      }\n\n      advance_widths.push_back(advance_width);\n      proportional_lsbs.push_back(lsb);\n    } else {\n      // [num_hmetrics, num_glyphs) are monospace leftSideBearing's\n      if (!hmtx_buf.ReadS16(&lsb)) {\n        return FONT_COMPRESSION_FAILURE();\n      }\n      if (glyph_size > 0 && glyph.x_min != lsb) {\n        remove_monospace_lsb = false;\n      }\n      monospace_lsbs.push_back(lsb);\n    }\n\n    // If we know we can't optimize, bail out completely\n    if (!remove_proportional_lsb && !remove_monospace_lsb) {\n      return true;\n    }\n  }\n\n  Font::Table* transformed_hmtx = &font->tables[kHmtxTableTag ^ 0x80808080];\n\n  uint8_t flags = 0;\n  size_t transformed_size = 1 + 2 * advance_widths.size();\n  if (remove_proportional_lsb) {\n    flags |= 1;\n  } else {\n    transformed_size += 2 * proportional_lsbs.size();\n  }\n  if (remove_monospace_lsb) {\n    flags |= 1 << 1;\n  } else {\n    transformed_size += 2 * monospace_lsbs.size();\n  }\n\n  transformed_hmtx->buffer.reserve(transformed_size);\n  std::vector<uint8_t>* out = &transformed_hmtx->buffer;\n  WriteBytes(out, &flags, 1);\n  for (uint16_t advance_width : advance_widths) {\n    WriteUShort(out, advance_width);\n  }\n\n  if (!remove_proportional_lsb) {\n    for (int16_t lsb : proportional_lsbs) {\n      WriteUShort(out, lsb);\n    }\n  }\n  if (!remove_monospace_lsb) {\n    for (int16_t lsb : monospace_lsbs) {\n      WriteUShort(out, lsb);\n    }\n  }\n\n  transformed_hmtx->tag = kHmtxTableTag ^ 0x80808080;\n  transformed_hmtx->flag_byte = 1 << 6;\n  transformed_hmtx->length = transformed_hmtx->buffer.size();\n  transformed_hmtx->data = transformed_hmtx->buffer.data();\n\n\n  return true;\n}\n\n} // namespace woff2\n"
  },
  {
    "path": "libs/woff2/src/transform.h",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Library for preprocessing fonts as part of the WOFF 2.0 conversion. */\n\n#ifndef WOFF2_TRANSFORM_H_\n#define WOFF2_TRANSFORM_H_\n\n#include \"./font.h\"\n\nnamespace woff2 {\n\n// Adds the transformed versions of the glyf and loca tables to the font. The\n// transformed loca table has zero length. The tag of the transformed tables is\n// derived from the original tag by flipping the MSBs of every byte.\nbool TransformGlyfAndLocaTables(Font* font);\n\n// Apply transformation to hmtx table if applicable for this font.\nbool TransformHmtxTable(Font* font);\n\n} // namespace woff2\n\n#endif  // WOFF2_TRANSFORM_H_\n"
  },
  {
    "path": "libs/woff2/src/variable_length.cc",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Helper functions for woff2 variable length types: 255UInt16 and UIntBase128 */\n\n#include \"./variable_length.h\"\n\nnamespace woff2 {\n\nsize_t Size255UShort(uint16_t value) {\n  size_t result = 3;\n  if (value < 253) {\n    result = 1;\n  } else if (value < 762) {\n    result = 2;\n  } else {\n    result = 3;\n  }\n  return result;\n}\n\nvoid Write255UShort(std::vector<uint8_t>* out, int value) {\n  if (value < 253) {\n    out->push_back(value);\n  } else if (value < 506) {\n    out->push_back(255);\n    out->push_back(value - 253);\n  } else if (value < 762) {\n    out->push_back(254);\n    out->push_back(value - 506);\n  } else {\n    out->push_back(253);\n    out->push_back(value >> 8);\n    out->push_back(value & 0xff);\n  }\n}\n\nvoid Store255UShort(int val, size_t* offset, uint8_t* dst) {\n  std::vector<uint8_t> packed;\n  Write255UShort(&packed, val);\n  for (uint8_t packed_byte : packed) {\n    dst[(*offset)++] = packed_byte;\n  }\n}\n\n// Based on section 6.1.1 of MicroType Express draft spec\nbool Read255UShort(Buffer* buf, unsigned int* value) {\n  static const int kWordCode = 253;\n  static const int kOneMoreByteCode2 = 254;\n  static const int kOneMoreByteCode1 = 255;\n  static const int kLowestUCode = 253;\n  uint8_t code = 0;\n  if (!buf->ReadU8(&code)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n  if (code == kWordCode) {\n    uint16_t result = 0;\n    if (!buf->ReadU16(&result)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    *value = result;\n    return true;\n  } else if (code == kOneMoreByteCode1) {\n    uint8_t result = 0;\n    if (!buf->ReadU8(&result)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    *value = result + kLowestUCode;\n    return true;\n  } else if (code == kOneMoreByteCode2) {\n    uint8_t result = 0;\n    if (!buf->ReadU8(&result)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    *value = result + kLowestUCode * 2;\n    return true;\n  } else {\n    *value = code;\n    return true;\n  }\n}\n\nbool ReadBase128(Buffer* buf, uint32_t* value) {\n  uint32_t result = 0;\n  for (size_t i = 0; i < 5; ++i) {\n    uint8_t code = 0;\n    if (!buf->ReadU8(&code)) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    // Leading zeros are invalid.\n    if (i == 0 && code == 0x80) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    // If any of the top seven bits are set then we're about to overflow.\n    if (result & 0xfe000000) {\n      return FONT_COMPRESSION_FAILURE();\n    }\n    result = (result << 7) | (code & 0x7f);\n    if ((code & 0x80) == 0) {\n      *value = result;\n      return true;\n    }\n  }\n  // Make sure not to exceed the size bound\n  return FONT_COMPRESSION_FAILURE();\n}\n\nsize_t Base128Size(size_t n) {\n  size_t size = 1;\n  for (; n >= 128; n >>= 7) ++size;\n  return size;\n}\n\nvoid StoreBase128(size_t len, size_t* offset, uint8_t* dst) {\n  size_t size = Base128Size(len);\n  for (size_t i = 0; i < size; ++i) {\n    int b = static_cast<int>((len >> (7 * (size - i - 1))) & 0x7f);\n    if (i < size - 1) {\n      b |= 0x80;\n    }\n    dst[(*offset)++] = b;\n  }\n}\n\n} // namespace woff2\n\n"
  },
  {
    "path": "libs/woff2/src/variable_length.h",
    "content": "/* Copyright 2015 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Helper functions for woff2 variable length types: 255UInt16 and UIntBase128 */\n\n#ifndef WOFF2_VARIABLE_LENGTH_H_\n#define WOFF2_VARIABLE_LENGTH_H_\n\n#include <inttypes.h>\n#include <vector>\n#include \"./buffer.h\"\n\nnamespace woff2 {\n\nsize_t Size255UShort(uint16_t value);\nbool Read255UShort(Buffer* buf, unsigned int* value);\nvoid Write255UShort(std::vector<uint8_t>* out, int value);\nvoid Store255UShort(int val, size_t* offset, uint8_t* dst);\n\nsize_t Base128Size(size_t n);\nbool ReadBase128(Buffer* buf, uint32_t* value);\nvoid StoreBase128(size_t len, size_t* offset, uint8_t* dst);\n\n} // namespace woff2\n\n#endif  // WOFF2_VARIABLE_LENGTH_H_\n\n"
  },
  {
    "path": "libs/woff2/src/woff2_common.cc",
    "content": "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Helpers common across multiple parts of woff2 */\n\n#include <algorithm>\n\n#include \"./woff2_common.h\"\n\n#include \"./port.h\"\n\nnamespace woff2 {\n\n\nuint32_t ComputeULongSum(const uint8_t* buf, size_t size) {\n  uint32_t checksum = 0;\n  size_t aligned_size = size & ~3;\n  for (size_t i = 0; i < aligned_size; i += 4) {\n    checksum +=\n        (buf[i] << 24) | (buf[i + 1] << 16) | (buf[i + 2] << 8) | buf[i + 3];\n  }\n\n  // treat size not aligned on 4 as if it were padded to 4 with 0's\n  if (size != aligned_size) {\n    uint32_t v = 0;\n    for (size_t i = aligned_size; i < size; ++i) {\n      v |= buf[i] << (24 - 8 * (i & 3));\n    }\n    checksum += v;\n  }\n\n  return checksum;\n}\n\nsize_t CollectionHeaderSize(uint32_t header_version, uint32_t num_fonts) {\n  size_t size = 0;\n  if (header_version == 0x00020000) {\n    size += 12;  // ulDsig{Tag,Length,Offset}\n  }\n  if (header_version == 0x00010000 || header_version == 0x00020000) {\n    size += 12   // TTCTag, Version, numFonts\n      + 4 * num_fonts;  // OffsetTable[numFonts]\n  }\n  return size;\n}\n\n} // namespace woff2\n"
  },
  {
    "path": "libs/woff2/src/woff2_common.h",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Common definition for WOFF2 encoding/decoding */\n\n#ifndef WOFF2_WOFF2_COMMON_H_\n#define WOFF2_WOFF2_COMMON_H_\n\n#include <stddef.h>\n#include <inttypes.h>\n\n#include <string>\n\nnamespace woff2 {\n\nstatic const uint32_t kWoff2Signature = 0x774f4632;  // \"wOF2\"\n\n// Leave the first byte open to store flag_byte\nconst unsigned int kWoff2FlagsTransform = 1 << 8;\n\n// TrueType Collection ID string: 'ttcf'\nstatic const uint32_t kTtcFontFlavor = 0x74746366;\n\nstatic const size_t kSfntHeaderSize = 12;\nstatic const size_t kSfntEntrySize = 16;\n\nstruct Point {\n  int x;\n  int y;\n  bool on_curve;\n};\n\nstruct Table {\n  uint32_t tag;\n  uint32_t flags;\n  uint32_t src_offset;\n  uint32_t src_length;\n\n  uint32_t transform_length;\n\n  uint32_t dst_offset;\n  uint32_t dst_length;\n  const uint8_t* dst_data;\n\n  bool operator<(const Table& other) const {\n    return tag < other.tag;\n  }\n};\n\n\n// Size of the collection header. 0 if version indicates this isn't a\n// collection. Ref http://www.microsoft.com/typography/otspec/otff.htm,\n// True Type Collections\nsize_t CollectionHeaderSize(uint32_t header_version, uint32_t num_fonts);\n\n// Compute checksum over size bytes of buf\nuint32_t ComputeULongSum(const uint8_t* buf, size_t size);\n\n} // namespace woff2\n\n#endif  // WOFF2_WOFF2_COMMON_H_\n"
  },
  {
    "path": "libs/woff2/src/woff2_enc.cc",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Library for converting TTF format font files to their WOFF2 versions. */\n\n#include <woff2/encode.h>\n\n#include <stdlib.h>\n#include <complex>\n#include <cstring>\n#include <limits>\n#include <string>\n#include <vector>\n\n#include <brotli/encode.h>\n#include \"./buffer.h\"\n#include \"./font.h\"\n#include \"./normalize.h\"\n#include \"./round.h\"\n#include \"./store_bytes.h\"\n#include \"./table_tags.h\"\n#include \"./transform.h\"\n#include \"./variable_length.h\"\n#include \"./woff2_common.h\"\n\nnamespace woff2 {\n\n\nnamespace {\n\nconst size_t kWoff2HeaderSize = 48;\nconst size_t kWoff2EntrySize = 20;\n\nbool Compress(const uint8_t* data, const size_t len, uint8_t* result,\n              uint32_t* result_len, BrotliEncoderMode mode, int quality) {\n  size_t compressed_len = *result_len;\n  if (BrotliEncoderCompress(quality, BROTLI_DEFAULT_WINDOW, mode, len, data,\n                            &compressed_len, result) == 0) {\n    return false;\n  }\n  *result_len = compressed_len;\n  return true;\n}\n\nbool Woff2Compress(const uint8_t* data, const size_t len,\n                   uint8_t* result, uint32_t* result_len,\n                   int quality) {\n  return Compress(data, len, result, result_len,\n                  BROTLI_MODE_FONT, quality);\n}\n\nbool TextCompress(const uint8_t* data, const size_t len,\n                  uint8_t* result, uint32_t* result_len,\n                  int quality) {\n  return Compress(data, len, result, result_len,\n                  BROTLI_MODE_TEXT, quality);\n}\n\nint KnownTableIndex(uint32_t tag) {\n  for (int i = 0; i < 63; ++i) {\n    if (tag == kKnownTags[i]) return i;\n  }\n  return 63;\n}\n\nvoid StoreTableEntry(const Table& table, size_t* offset, uint8_t* dst) {\n  uint8_t flag_byte = (table.flags & 0xC0) | KnownTableIndex(table.tag);\n  dst[(*offset)++] = flag_byte;\n  // The index here is treated as a set of flag bytes because\n  // bits 6 and 7 of the byte are reserved for future use as flags.\n  // 0x3f or 63 means an arbitrary table tag.\n  if ((flag_byte & 0x3f) == 0x3f) {\n    StoreU32(table.tag, offset, dst);\n  }\n  StoreBase128(table.src_length, offset, dst);\n  if ((table.flags & kWoff2FlagsTransform) != 0) {\n    StoreBase128(table.transform_length, offset, dst);\n  }\n}\n\nsize_t TableEntrySize(const Table& table) {\n  uint8_t flag_byte = KnownTableIndex(table.tag);\n  size_t size = ((flag_byte & 0x3f) != 0x3f) ? 1 : 5;\n  size += Base128Size(table.src_length);\n  if ((table.flags & kWoff2FlagsTransform) != 0) {\n     size += Base128Size(table.transform_length);\n  }\n  return size;\n}\n\nsize_t ComputeWoff2Length(const FontCollection& font_collection,\n                          const std::vector<Table>& tables,\n                          std::map<std::pair<uint32_t, uint32_t>, uint16_t>\n                            index_by_tag_offset,\n                          size_t compressed_data_length,\n                          size_t extended_metadata_length) {\n  size_t size = kWoff2HeaderSize;\n\n  for (const auto& table : tables) {\n    size += TableEntrySize(table);\n  }\n\n  // for collections only, collection tables\n  if (font_collection.flavor == kTtcFontFlavor) {\n    size += 4;  // UInt32 Version of TTC Header\n    size += Size255UShort(font_collection.fonts.size());  // 255UInt16 numFonts\n\n    size += 4 * font_collection.fonts.size();  // UInt32 flavor for each\n\n    for (const auto& font : font_collection.fonts) {\n      size += Size255UShort(font.tables.size());  // 255UInt16 numTables\n      for (const auto& entry : font.tables) {\n        const Font::Table& table = entry.second;\n        // no collection entry for xform table\n        if (table.tag & 0x80808080) continue;\n\n        std::pair<uint32_t, uint32_t> tag_offset(table.tag, table.offset);\n        uint16_t table_index = index_by_tag_offset[tag_offset];\n        size += Size255UShort(table_index);  // 255UInt16 index entry\n      }\n    }\n  }\n\n  // compressed data\n  size += compressed_data_length;\n  size = Round4(size);\n\n  size += extended_metadata_length;\n  return size;\n}\n\nsize_t ComputeUncompressedLength(const Font& font) {\n  // sfnt header + offset table\n  size_t size = 12 + 16 * font.num_tables;\n  for (const auto& entry : font.tables) {\n    const Font::Table& table = entry.second;\n    if (table.tag & 0x80808080) continue;  // xform tables don't stay\n    if (table.IsReused()) continue;  // don't have to pay twice\n    size += Round4(table.length);\n  }\n  return size;\n}\n\nsize_t ComputeUncompressedLength(const FontCollection& font_collection) {\n  if (font_collection.flavor != kTtcFontFlavor) {\n    return ComputeUncompressedLength(font_collection.fonts[0]);\n  }\n  size_t size = CollectionHeaderSize(font_collection.header_version,\n    font_collection.fonts.size());\n  for (const auto& font : font_collection.fonts) {\n    size += ComputeUncompressedLength(font);\n  }\n  return size;\n}\n\nsize_t ComputeTotalTransformLength(const Font& font) {\n  size_t total = 0;\n  for (const auto& i : font.tables) {\n    const Font::Table& table = i.second;\n    if (table.IsReused()) {\n      continue;\n    }\n    if (table.tag & 0x80808080 || !font.FindTable(table.tag ^ 0x80808080)) {\n      // Count transformed tables and non-transformed tables that do not have\n      // transformed versions.\n      total += table.length;\n    }\n  }\n  return total;\n}\n\n}  // namespace\n\nsize_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length) {\n  return MaxWOFF2CompressedSize(data, length, \"\");\n}\n\nsize_t MaxWOFF2CompressedSize(const uint8_t* data, size_t length,\n                              const std::string& extended_metadata) {\n  // Except for the header size, which is 32 bytes larger in woff2 format,\n  // all other parts should be smaller (table header in short format,\n  // transformations and compression). Just to be sure, we will give some\n  // headroom anyway.\n  return length + 1024 + extended_metadata.length();\n}\n\nuint32_t CompressedBufferSize(uint32_t original_size) {\n  return 1.2 * original_size + 10240;\n}\n\nbool TransformFontCollection(FontCollection* font_collection) {\n  for (auto& font : font_collection->fonts) {\n    if (!TransformGlyfAndLocaTables(&font)) {\n#ifdef FONT_COMPRESSION_BIN\n      fprintf(stderr, \"glyf/loca transformation failed.\\n\");\n#endif\n      return FONT_COMPRESSION_FAILURE();\n    }\n  }\n\n  return true;\n}\n\nbool ConvertTTFToWOFF2(const uint8_t *data, size_t length,\n                       uint8_t *result, size_t *result_length) {\n  WOFF2Params params;\n  return ConvertTTFToWOFF2(data, length, result, result_length,\n                           params);\n}\n\nbool ConvertTTFToWOFF2(const uint8_t *data, size_t length,\n                       uint8_t *result, size_t *result_length,\n                       const WOFF2Params& params) {\n  FontCollection font_collection;\n  if (!ReadFontCollection(data, length, &font_collection)) {\n#ifdef FONT_COMPRESSION_BIN\n    fprintf(stderr, \"Parsing of the input font failed.\\n\");\n#endif\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  if (!NormalizeFontCollection(&font_collection)) {\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n  if (params.allow_transforms && !TransformFontCollection(&font_collection)) {\n    return FONT_COMPRESSION_FAILURE();\n  } else {\n    // glyf/loca use 11 to flag \"not transformed\"\n    for (auto& font : font_collection.fonts) {\n      Font::Table* glyf_table = font.FindTable(kGlyfTableTag);\n      Font::Table* loca_table = font.FindTable(kLocaTableTag);\n      if (glyf_table) {\n        glyf_table->flag_byte |= 0xc0;\n      }\n      if (loca_table) {\n        loca_table->flag_byte |= 0xc0;\n      }\n    }\n  }\n\n  // Although the compressed size of each table in the final woff2 file won't\n  // be larger than its transform_length, we have to allocate a large enough\n  // buffer for the compressor, since the compressor can potentially increase\n  // the size. If the compressor overflows this, it should return false and\n  // then this function will also return false.\n\n  size_t total_transform_length = 0;\n  for (const auto& font : font_collection.fonts) {\n    total_transform_length += ComputeTotalTransformLength(font);\n  }\n  size_t compression_buffer_size = CompressedBufferSize(total_transform_length);\n  std::vector<uint8_t> compression_buf(compression_buffer_size);\n  uint32_t total_compressed_length = compression_buffer_size;\n\n  // Collect all transformed data into one place in output order.\n  std::vector<uint8_t> transform_buf(total_transform_length);\n  size_t transform_offset = 0;\n  for (const auto& font : font_collection.fonts) {\n    for (const auto tag : font.OutputOrderedTags()) {\n      const Font::Table& original = font.tables.at(tag);\n      if (original.IsReused()) continue;\n      if (tag & 0x80808080) continue;\n      const Font::Table* table_to_store = font.FindTable(tag ^ 0x80808080);\n      if (table_to_store == NULL) table_to_store = &original;\n\n      StoreBytes(table_to_store->data, table_to_store->length,\n                 &transform_offset, &transform_buf[0]);\n    }\n  }\n\n  // Compress all transformed data in one stream.\n  if (!Woff2Compress(transform_buf.data(), total_transform_length,\n                     &compression_buf[0],\n                     &total_compressed_length,\n                     params.brotli_quality)) {\n#ifdef FONT_COMPRESSION_BIN\n    fprintf(stderr, \"Compression of combined table failed.\\n\");\n#endif\n    return FONT_COMPRESSION_FAILURE();\n  }\n\n#ifdef FONT_COMPRESSION_BIN\n  fprintf(stderr, \"Compressed %zu to %u.\\n\", total_transform_length,\n          total_compressed_length);\n#endif\n\n  // Compress the extended metadata\n  // TODO(user): how does this apply to collections\n  uint32_t compressed_metadata_buf_length =\n    CompressedBufferSize(params.extended_metadata.length());\n  std::vector<uint8_t> compressed_metadata_buf(compressed_metadata_buf_length);\n\n  if (params.extended_metadata.length() > 0) {\n    if (!TextCompress((const uint8_t*)params.extended_metadata.data(),\n                      params.extended_metadata.length(),\n                      compressed_metadata_buf.data(),\n                      &compressed_metadata_buf_length,\n                      params.brotli_quality)) {\n#ifdef FONT_COMPRESSION_BIN\n      fprintf(stderr, \"Compression of extended metadata failed.\\n\");\n#endif\n      return FONT_COMPRESSION_FAILURE();\n    }\n  } else {\n    compressed_metadata_buf_length = 0;\n  }\n\n  std::vector<Table> tables;\n  std::map<std::pair<uint32_t, uint32_t>, uint16_t> index_by_tag_offset;\n\n  for (const auto& font : font_collection.fonts) {\n\n    for (const auto tag : font.OutputOrderedTags()) {\n      const Font::Table& src_table = font.tables.at(tag);\n      if (src_table.IsReused()) {\n        continue;\n      }\n\n      std::pair<uint32_t, uint32_t> tag_offset(src_table.tag, src_table.offset);\n      if (index_by_tag_offset.find(tag_offset) == index_by_tag_offset.end()) {\n        index_by_tag_offset[tag_offset] = tables.size();\n      } else {\n        return false;\n      }\n\n      Table table;\n      table.tag = src_table.tag;\n      table.flags = src_table.flag_byte;\n      table.src_length = src_table.length;\n      table.transform_length = src_table.length;\n      const Font::Table* transformed_table =\n          font.FindTable(src_table.tag ^ 0x80808080);\n      if (transformed_table != NULL) {\n        table.flags = transformed_table->flag_byte;\n        table.flags |= kWoff2FlagsTransform;\n        table.transform_length = transformed_table->length;\n      }\n      tables.push_back(table);\n    }\n  }\n\n  size_t woff2_length = ComputeWoff2Length(font_collection, tables,\n      index_by_tag_offset, total_compressed_length,\n      compressed_metadata_buf_length);\n  if (woff2_length > *result_length) {\n#ifdef FONT_COMPRESSION_BIN\n    fprintf(stderr, \"Result allocation was too small (%zd vs %zd bytes).\\n\",\n           *result_length, woff2_length);\n#endif\n    return FONT_COMPRESSION_FAILURE();\n  }\n  *result_length = woff2_length;\n\n  size_t offset = 0;\n\n  // start of woff2 header (http://www.w3.org/TR/WOFF2/#woff20Header)\n  StoreU32(kWoff2Signature, &offset, result);\n  if (font_collection.flavor != kTtcFontFlavor) {\n    StoreU32(font_collection.fonts[0].flavor, &offset, result);\n  } else {\n    StoreU32(kTtcFontFlavor, &offset, result);\n  }\n  StoreU32(woff2_length, &offset, result);\n  Store16(tables.size(), &offset, result);\n  Store16(0, &offset, result);  // reserved\n  // totalSfntSize\n  StoreU32(ComputeUncompressedLength(font_collection), &offset, result);\n  StoreU32(total_compressed_length, &offset, result);  // totalCompressedSize\n\n  // Let's just all be v1.0\n  Store16(1, &offset, result);  // majorVersion\n  Store16(0, &offset, result);  // minorVersion\n  if (compressed_metadata_buf_length > 0) {\n    StoreU32(woff2_length - compressed_metadata_buf_length,\n             &offset, result);  // metaOffset\n    StoreU32(compressed_metadata_buf_length, &offset, result);  // metaLength\n    StoreU32(params.extended_metadata.length(),\n             &offset, result);  // metaOrigLength\n  } else {\n    StoreU32(0, &offset, result);  // metaOffset\n    StoreU32(0, &offset, result);  // metaLength\n    StoreU32(0, &offset, result);  // metaOrigLength\n  }\n  StoreU32(0, &offset, result);  // privOffset\n  StoreU32(0, &offset, result);  // privLength\n  // end of woff2 header\n\n  // table directory (http://www.w3.org/TR/WOFF2/#table_dir_format)\n  for (const auto& table : tables) {\n    StoreTableEntry(table, &offset, result);\n  }\n\n  // for collections only, collection table directory\n  if (font_collection.flavor == kTtcFontFlavor) {\n    StoreU32(font_collection.header_version, &offset, result);\n    Store255UShort(font_collection.fonts.size(), &offset, result);\n    for (const Font& font : font_collection.fonts) {\n\n      uint16_t num_tables = 0;\n      for (const auto& entry : font.tables) {\n        const Font::Table& table = entry.second;\n        if (table.tag & 0x80808080) continue;  // don't write xform tables\n        num_tables++;\n      }\n      Store255UShort(num_tables, &offset, result);\n\n      StoreU32(font.flavor, &offset, result);\n      for (const auto& entry : font.tables) {\n        const Font::Table& table = entry.second;\n        if (table.tag & 0x80808080) continue;  // don't write xform tables\n\n        // for reused tables, only the original has an updated offset\n        uint32_t table_offset =\n          table.IsReused() ? table.reuse_of->offset : table.offset;\n        std::pair<uint32_t, uint32_t> tag_offset(table.tag, table_offset);\n        if (index_by_tag_offset.find(tag_offset) == index_by_tag_offset.end()) {\n#ifdef FONT_COMPRESSION_BIN\nfprintf(stderr, \"Missing table index for offset 0x%08x\\n\",\n                  table_offset);\n#endif\n          return FONT_COMPRESSION_FAILURE();\n        }\n        uint16_t index = index_by_tag_offset[tag_offset];\n        Store255UShort(index, &offset, result);\n\n      }\n\n    }\n  }\n\n  // compressed data format (http://www.w3.org/TR/WOFF2/#table_format)\n\n  StoreBytes(&compression_buf[0], total_compressed_length, &offset, result);\n  offset = Round4(offset);\n\n  StoreBytes(compressed_metadata_buf.data(), compressed_metadata_buf_length,\n             &offset, result);\n\n  if (*result_length != offset) {\n#ifdef FONT_COMPRESSION_BIN\n    fprintf(stderr, \"Mismatch between computed and actual length \"\n            \"(%zd vs %zd)\\n\", *result_length, offset);\n#endif\n    return FONT_COMPRESSION_FAILURE();\n  }\n  return true;\n}\n\n} // namespace woff2\n"
  },
  {
    "path": "libs/woff2/src/woff2_out.cc",
    "content": "/* Copyright 2014 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/* Output buffer for WOFF2 decompression. */\n\n#include <woff2/output.h>\n\nnamespace woff2 {\n\nWOFF2StringOut::WOFF2StringOut(std::string *buf)\n    : buf_(buf), max_size_(kDefaultMaxSize), offset_(0) {}\n\nbool WOFF2StringOut::Write(const void *buf, size_t n) {\n  return Write(buf, offset_, n);\n}\n\nbool WOFF2StringOut::Write(const void *buf, size_t offset, size_t n) {\n  if (offset > max_size_ || n > max_size_ - offset) {\n    return false;\n  }\n  if (offset == buf_->size()) {\n    buf_->append(static_cast<const char*>(buf), n);\n  } else {\n    if (offset + n > buf_->size()) {\n      buf_->append(offset + n - buf_->size(), 0);\n    }\n    buf_->replace(offset, n, static_cast<const char*>(buf), n);\n  }\n  offset_ = std::max(offset_, offset + n);\n\n  return true;\n}\n\nvoid WOFF2StringOut::SetMaxSize(size_t max_size) {\n  max_size_ = max_size;\n  if (offset_ > max_size_) {\n    offset_ = max_size_;\n  }\n}\n\nWOFF2MemoryOut::WOFF2MemoryOut(uint8_t* buf, size_t buf_size)\n  : buf_(buf),\n    buf_size_(buf_size),\n    offset_(0) {}\n\nbool WOFF2MemoryOut::Write(const void *buf, size_t n) {\n  return Write(buf, offset_, n);\n}\n\nbool WOFF2MemoryOut::Write(const void *buf, size_t offset, size_t n) {\n  if (offset > buf_size_ || n > buf_size_ - offset) {\n    return false;\n  }\n  std::memcpy(buf_ + offset, buf, n);\n  offset_ = std::max(offset_, offset + n);\n\n  return true;\n}\n\n} // namespace woff2\n"
  },
  {
    "path": "libs/xxHash/LICENSE",
    "content": "xxHash Library\nCopyright (c) 2012-2014, Yann Collet\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice, this\n  list of conditions and the following disclaimer in the documentation and/or\n  other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "libs/xxHash/Makefile.am",
    "content": "if !HAVE_XXHASH\nnoinst_LIBRARIES = libxxhash.a\n\nlibxxhash_a_SOURCES = xxhash.c xxhash.h xxh3.h\nAM_CXXFLAGS = -Wall\n\nxxhash.c: xxhash.h xxh3.h\n\nendif\n\nCLEANFILES = *.gcda *.gcno\n\n"
  },
  {
    "path": "libs/xxHash/xxh3.h",
    "content": "/*\n * xxHash - Extremely Fast Hash algorithm\n * Development source file for `xxh3`\n * Copyright (C) 2019-2021 Yann Collet\n *\n * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php)\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *    * Redistributions of source code must retain the above copyright\n *      notice, this list of conditions and the following disclaimer.\n *    * Redistributions in binary form must reproduce the above\n *      copyright notice, this list of conditions and the following disclaimer\n *      in the documentation and/or other materials provided with the\n *      distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * You can contact the author at:\n *   - xxHash homepage: https://www.xxhash.com\n *   - xxHash source repository: https://github.com/Cyan4973/xxHash\n */\n\n/*\n * Note: This file used to host the source code of XXH3_* variants.\n * during the development period.\n * The source code is now properly integrated within xxhash.h.\n *\n * xxh3.h is no longer useful,\n * but it is still provided for compatibility with source code\n * which used to include it directly.\n *\n * Programs are now highly discouraged to include xxh3.h.\n * Include `xxhash.h` instead, which is the officially supported interface.\n *\n * In the future, xxh3.h will start to generate warnings, then errors,\n * then it will be removed from source package and from include directory.\n */\n\n/* Simulate the same impact as including the old xxh3.h source file */\n\n#define XXH_INLINE_ALL\n#include \"xxhash.h\"\n"
  },
  {
    "path": "libs/xxHash/xxhash.c",
    "content": "/*\n * xxHash - Extremely Fast Hash algorithm\n * Copyright (C) 2012-2023 Yann Collet\n *\n * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php)\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *    * Redistributions of source code must retain the above copyright\n *      notice, this list of conditions and the following disclaimer.\n *    * Redistributions in binary form must reproduce the above\n *      copyright notice, this list of conditions and the following disclaimer\n *      in the documentation and/or other materials provided with the\n *      distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * You can contact the author at:\n *   - xxHash homepage: https://www.xxhash.com\n *   - xxHash source repository: https://github.com/Cyan4973/xxHash\n */\n\n/*\n * xxhash.c instantiates functions defined in xxhash.h\n */\n\n#define XXH_STATIC_LINKING_ONLY /* access advanced declarations */\n#define XXH_IMPLEMENTATION      /* access definitions */\n\n#include \"xxhash.h\"\n"
  },
  {
    "path": "libs/xxHash/xxhash.h",
    "content": "/*\n * xxHash - Extremely Fast Hash algorithm\n * Header File\n * Copyright (C) 2012-2023 Yann Collet\n *\n * BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php)\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *    * Redistributions of source code must retain the above copyright\n *      notice, this list of conditions and the following disclaimer.\n *    * Redistributions in binary form must reproduce the above\n *      copyright notice, this list of conditions and the following disclaimer\n *      in the documentation and/or other materials provided with the\n *      distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * You can contact the author at:\n *   - xxHash homepage: https://www.xxhash.com\n *   - xxHash source repository: https://github.com/Cyan4973/xxHash\n */\n\n/*!\n * @mainpage xxHash\n *\n * xxHash is an extremely fast non-cryptographic hash algorithm, working at RAM speed\n * limits.\n *\n * It is proposed in four flavors, in three families:\n * 1. @ref XXH32_family\n *   - Classic 32-bit hash function. Simple, compact, and runs on almost all\n *     32-bit and 64-bit systems.\n * 2. @ref XXH64_family\n *   - Classic 64-bit adaptation of XXH32. Just as simple, and runs well on most\n *     64-bit systems (but _not_ 32-bit systems).\n * 3. @ref XXH3_family\n *   - Modern 64-bit and 128-bit hash function family which features improved\n *     strength and performance across the board, especially on smaller data.\n *     It benefits greatly from SIMD and 64-bit without requiring it.\n *\n * Benchmarks\n * ---\n * The reference system uses an Intel i7-9700K CPU, and runs Ubuntu x64 20.04.\n * The open source benchmark program is compiled with clang v10.0 using -O3 flag.\n *\n * | Hash Name            | ISA ext | Width | Large Data Speed | Small Data Velocity |\n * | -------------------- | ------- | ----: | ---------------: | ------------------: |\n * | XXH3_64bits()        | @b AVX2 |    64 |        59.4 GB/s |               133.1 |\n * | MeowHash             | AES-NI  |   128 |        58.2 GB/s |                52.5 |\n * | XXH3_128bits()       | @b AVX2 |   128 |        57.9 GB/s |               118.1 |\n * | CLHash               | PCLMUL  |    64 |        37.1 GB/s |                58.1 |\n * | XXH3_64bits()        | @b SSE2 |    64 |        31.5 GB/s |               133.1 |\n * | XXH3_128bits()       | @b SSE2 |   128 |        29.6 GB/s |               118.1 |\n * | RAM sequential read  |         |   N/A |        28.0 GB/s |                 N/A |\n * | ahash                | AES-NI  |    64 |        22.5 GB/s |               107.2 |\n * | City64               |         |    64 |        22.0 GB/s |                76.6 |\n * | T1ha2                |         |    64 |        22.0 GB/s |                99.0 |\n * | City128              |         |   128 |        21.7 GB/s |                57.7 |\n * | FarmHash             | AES-NI  |    64 |        21.3 GB/s |                71.9 |\n * | XXH64()              |         |    64 |        19.4 GB/s |                71.0 |\n * | SpookyHash           |         |    64 |        19.3 GB/s |                53.2 |\n * | Mum                  |         |    64 |        18.0 GB/s |                67.0 |\n * | CRC32C               | SSE4.2  |    32 |        13.0 GB/s |                57.9 |\n * | XXH32()              |         |    32 |         9.7 GB/s |                71.9 |\n * | City32               |         |    32 |         9.1 GB/s |                66.0 |\n * | Blake3*              | @b AVX2 |   256 |         4.4 GB/s |                 8.1 |\n * | Murmur3              |         |    32 |         3.9 GB/s |                56.1 |\n * | SipHash*             |         |    64 |         3.0 GB/s |                43.2 |\n * | Blake3*              | @b SSE2 |   256 |         2.4 GB/s |                 8.1 |\n * | HighwayHash          |         |    64 |         1.4 GB/s |                 6.0 |\n * | FNV64                |         |    64 |         1.2 GB/s |                62.7 |\n * | Blake2*              |         |   256 |         1.1 GB/s |                 5.1 |\n * | SHA1*                |         |   160 |         0.8 GB/s |                 5.6 |\n * | MD5*                 |         |   128 |         0.6 GB/s |                 7.8 |\n * @note\n *   - Hashes which require a specific ISA extension are noted. SSE2 is also noted,\n *     even though it is mandatory on x64.\n *   - Hashes with an asterisk are cryptographic. Note that MD5 is non-cryptographic\n *     by modern standards.\n *   - Small data velocity is a rough average of algorithm's efficiency for small\n *     data. For more accurate information, see the wiki.\n *   - More benchmarks and strength tests are found on the wiki:\n *         https://github.com/Cyan4973/xxHash/wiki\n *\n * Usage\n * ------\n * All xxHash variants use a similar API. Changing the algorithm is a trivial\n * substitution.\n *\n * @pre\n *    For functions which take an input and length parameter, the following\n *    requirements are assumed:\n *    - The range from [`input`, `input + length`) is valid, readable memory.\n *      - The only exception is if the `length` is `0`, `input` may be `NULL`.\n *    - For C++, the objects must have the *TriviallyCopyable* property, as the\n *      functions access bytes directly as if it was an array of `unsigned char`.\n *\n * @anchor single_shot_example\n * **Single Shot**\n *\n * These functions are stateless functions which hash a contiguous block of memory,\n * immediately returning the result. They are the easiest and usually the fastest\n * option.\n *\n * XXH32(), XXH64(), XXH3_64bits(), XXH3_128bits()\n *\n * @code{.c}\n *   #include <string.h>\n *   #include \"xxhash.h\"\n *\n *   // Example for a function which hashes a null terminated string with XXH32().\n *   XXH32_hash_t hash_string(const char* string, XXH32_hash_t seed)\n *   {\n *       // NULL pointers are only valid if the length is zero\n *       size_t length = (string == NULL) ? 0 : strlen(string);\n *       return XXH32(string, length, seed);\n *   }\n * @endcode\n *\n *\n * @anchor streaming_example\n * **Streaming**\n *\n * These groups of functions allow incremental hashing of unknown size, even\n * more than what would fit in a size_t.\n *\n * XXH32_reset(), XXH64_reset(), XXH3_64bits_reset(), XXH3_128bits_reset()\n *\n * @code{.c}\n *   #include <stdio.h>\n *   #include <assert.h>\n *   #include \"xxhash.h\"\n *   // Example for a function which hashes a FILE incrementally with XXH3_64bits().\n *   XXH64_hash_t hashFile(FILE* f)\n *   {\n *       // Allocate a state struct. Do not just use malloc() or new.\n *       XXH3_state_t* state = XXH3_createState();\n *       assert(state != NULL && \"Out of memory!\");\n *       // Reset the state to start a new hashing session.\n *       XXH3_64bits_reset(state);\n *       char buffer[4096];\n *       size_t count;\n *       // Read the file in chunks\n *       while ((count = fread(buffer, 1, sizeof(buffer), f)) != 0) {\n *           // Run update() as many times as necessary to process the data\n *           XXH3_64bits_update(state, buffer, count);\n *       }\n *       // Retrieve the finalized hash. This will not change the state.\n *       XXH64_hash_t result = XXH3_64bits_digest(state);\n *       // Free the state. Do not use free().\n *       XXH3_freeState(state);\n *       return result;\n *   }\n * @endcode\n *\n * Streaming functions generate the xxHash value from an incremental input.\n * This method is slower than single-call functions, due to state management.\n * For small inputs, prefer `XXH32()` and `XXH64()`, which are better optimized.\n *\n * An XXH state must first be allocated using `XXH*_createState()`.\n *\n * Start a new hash by initializing the state with a seed using `XXH*_reset()`.\n *\n * Then, feed the hash state by calling `XXH*_update()` as many times as necessary.\n *\n * The function returns an error code, with 0 meaning OK, and any other value\n * meaning there is an error.\n *\n * Finally, a hash value can be produced anytime, by using `XXH*_digest()`.\n * This function returns the nn-bits hash as an int or long long.\n *\n * It's still possible to continue inserting input into the hash state after a\n * digest, and generate new hash values later on by invoking `XXH*_digest()`.\n *\n * When done, release the state using `XXH*_freeState()`.\n *\n *\n * @anchor canonical_representation_example\n * **Canonical Representation**\n *\n * The default return values from XXH functions are unsigned 32, 64 and 128 bit\n * integers.\n * This the simplest and fastest format for further post-processing.\n *\n * However, this leaves open the question of what is the order on the byte level,\n * since little and big endian conventions will store the same number differently.\n *\n * The canonical representation settles this issue by mandating big-endian\n * convention, the same convention as human-readable numbers (large digits first).\n *\n * When writing hash values to storage, sending them over a network, or printing\n * them, it's highly recommended to use the canonical representation to ensure\n * portability across a wider range of systems, present and future.\n *\n * The following functions allow transformation of hash values to and from\n * canonical format.\n *\n * XXH32_canonicalFromHash(), XXH32_hashFromCanonical(),\n * XXH64_canonicalFromHash(), XXH64_hashFromCanonical(),\n * XXH128_canonicalFromHash(), XXH128_hashFromCanonical(),\n *\n * @code{.c}\n *   #include <stdio.h>\n *   #include \"xxhash.h\"\n *\n *   // Example for a function which prints XXH32_hash_t in human readable format\n *   void printXxh32(XXH32_hash_t hash)\n *   {\n *       XXH32_canonical_t cano;\n *       XXH32_canonicalFromHash(&cano, hash);\n *       size_t i;\n *       for(i = 0; i < sizeof(cano.digest); ++i) {\n *           printf(\"%02x\", cano.digest[i]);\n *       }\n *       printf(\"\\n\");\n *   }\n *\n *   // Example for a function which converts XXH32_canonical_t to XXH32_hash_t\n *   XXH32_hash_t convertCanonicalToXxh32(XXH32_canonical_t cano)\n *   {\n *       XXH32_hash_t hash = XXH32_hashFromCanonical(&cano);\n *       return hash;\n *   }\n * @endcode\n *\n *\n * @file xxhash.h\n * xxHash prototypes and implementation\n */\n\n#if defined (__cplusplus)\nextern \"C\" {\n#endif\n\n/* ****************************\n *  INLINE mode\n ******************************/\n/*!\n * @defgroup public Public API\n * Contains details on the public xxHash functions.\n * @{\n */\n#ifdef XXH_DOXYGEN\n/*!\n * @brief Gives access to internal state declaration, required for static allocation.\n *\n * Incompatible with dynamic linking, due to risks of ABI changes.\n *\n * Usage:\n * @code{.c}\n *     #define XXH_STATIC_LINKING_ONLY\n *     #include \"xxhash.h\"\n * @endcode\n */\n#  define XXH_STATIC_LINKING_ONLY\n/* Do not undef XXH_STATIC_LINKING_ONLY for Doxygen */\n\n/*!\n * @brief Gives access to internal definitions.\n *\n * Usage:\n * @code{.c}\n *     #define XXH_STATIC_LINKING_ONLY\n *     #define XXH_IMPLEMENTATION\n *     #include \"xxhash.h\"\n * @endcode\n */\n#  define XXH_IMPLEMENTATION\n/* Do not undef XXH_IMPLEMENTATION for Doxygen */\n\n/*!\n * @brief Exposes the implementation and marks all functions as `inline`.\n *\n * Use these build macros to inline xxhash into the target unit.\n * Inlining improves performance on small inputs, especially when the length is\n * expressed as a compile-time constant:\n *\n *  https://fastcompression.blogspot.com/2018/03/xxhash-for-small-keys-impressive-power.html\n *\n * It also keeps xxHash symbols private to the unit, so they are not exported.\n *\n * Usage:\n * @code{.c}\n *     #define XXH_INLINE_ALL\n *     #include \"xxhash.h\"\n * @endcode\n * Do not compile and link xxhash.o as a separate object, as it is not useful.\n */\n#  define XXH_INLINE_ALL\n#  undef XXH_INLINE_ALL\n/*!\n * @brief Exposes the implementation without marking functions as inline.\n */\n#  define XXH_PRIVATE_API\n#  undef XXH_PRIVATE_API\n/*!\n * @brief Emulate a namespace by transparently prefixing all symbols.\n *\n * If you want to include _and expose_ xxHash functions from within your own\n * library, but also want to avoid symbol collisions with other libraries which\n * may also include xxHash, you can use @ref XXH_NAMESPACE to automatically prefix\n * any public symbol from xxhash library with the value of @ref XXH_NAMESPACE\n * (therefore, avoid empty or numeric values).\n *\n * Note that no change is required within the calling program as long as it\n * includes `xxhash.h`: Regular symbol names will be automatically translated\n * by this header.\n */\n#  define XXH_NAMESPACE /* YOUR NAME HERE */\n#  undef XXH_NAMESPACE\n#endif\n\n#if (defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)) \\\n    && !defined(XXH_INLINE_ALL_31684351384)\n   /* this section should be traversed only once */\n#  define XXH_INLINE_ALL_31684351384\n   /* give access to the advanced API, required to compile implementations */\n#  undef XXH_STATIC_LINKING_ONLY   /* avoid macro redef */\n#  define XXH_STATIC_LINKING_ONLY\n   /* make all functions private */\n#  undef XXH_PUBLIC_API\n#  if defined(__GNUC__)\n#    define XXH_PUBLIC_API static __inline __attribute__((__unused__))\n#  elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)\n#    define XXH_PUBLIC_API static inline\n#  elif defined(_MSC_VER)\n#    define XXH_PUBLIC_API static __inline\n#  else\n     /* note: this version may generate warnings for unused static functions */\n#    define XXH_PUBLIC_API static\n#  endif\n\n   /*\n    * This part deals with the special case where a unit wants to inline xxHash,\n    * but \"xxhash.h\" has previously been included without XXH_INLINE_ALL,\n    * such as part of some previously included *.h header file.\n    * Without further action, the new include would just be ignored,\n    * and functions would effectively _not_ be inlined (silent failure).\n    * The following macros solve this situation by prefixing all inlined names,\n    * avoiding naming collision with previous inclusions.\n    */\n   /* Before that, we unconditionally #undef all symbols,\n    * in case they were already defined with XXH_NAMESPACE.\n    * They will then be redefined for XXH_INLINE_ALL\n    */\n#  undef XXH_versionNumber\n    /* XXH32 */\n#  undef XXH32\n#  undef XXH32_createState\n#  undef XXH32_freeState\n#  undef XXH32_reset\n#  undef XXH32_update\n#  undef XXH32_digest\n#  undef XXH32_copyState\n#  undef XXH32_canonicalFromHash\n#  undef XXH32_hashFromCanonical\n    /* XXH64 */\n#  undef XXH64\n#  undef XXH64_createState\n#  undef XXH64_freeState\n#  undef XXH64_reset\n#  undef XXH64_update\n#  undef XXH64_digest\n#  undef XXH64_copyState\n#  undef XXH64_canonicalFromHash\n#  undef XXH64_hashFromCanonical\n    /* XXH3_64bits */\n#  undef XXH3_64bits\n#  undef XXH3_64bits_withSecret\n#  undef XXH3_64bits_withSeed\n#  undef XXH3_64bits_withSecretandSeed\n#  undef XXH3_createState\n#  undef XXH3_freeState\n#  undef XXH3_copyState\n#  undef XXH3_64bits_reset\n#  undef XXH3_64bits_reset_withSeed\n#  undef XXH3_64bits_reset_withSecret\n#  undef XXH3_64bits_update\n#  undef XXH3_64bits_digest\n#  undef XXH3_generateSecret\n    /* XXH3_128bits */\n#  undef XXH128\n#  undef XXH3_128bits\n#  undef XXH3_128bits_withSeed\n#  undef XXH3_128bits_withSecret\n#  undef XXH3_128bits_reset\n#  undef XXH3_128bits_reset_withSeed\n#  undef XXH3_128bits_reset_withSecret\n#  undef XXH3_128bits_reset_withSecretandSeed\n#  undef XXH3_128bits_update\n#  undef XXH3_128bits_digest\n#  undef XXH128_isEqual\n#  undef XXH128_cmp\n#  undef XXH128_canonicalFromHash\n#  undef XXH128_hashFromCanonical\n    /* Finally, free the namespace itself */\n#  undef XXH_NAMESPACE\n\n    /* employ the namespace for XXH_INLINE_ALL */\n#  define XXH_NAMESPACE XXH_INLINE_\n   /*\n    * Some identifiers (enums, type names) are not symbols,\n    * but they must nonetheless be renamed to avoid redeclaration.\n    * Alternative solution: do not redeclare them.\n    * However, this requires some #ifdefs, and has a more dispersed impact.\n    * Meanwhile, renaming can be achieved in a single place.\n    */\n#  define XXH_IPREF(Id)   XXH_NAMESPACE ## Id\n#  define XXH_OK XXH_IPREF(XXH_OK)\n#  define XXH_ERROR XXH_IPREF(XXH_ERROR)\n#  define XXH_errorcode XXH_IPREF(XXH_errorcode)\n#  define XXH32_canonical_t  XXH_IPREF(XXH32_canonical_t)\n#  define XXH64_canonical_t  XXH_IPREF(XXH64_canonical_t)\n#  define XXH128_canonical_t XXH_IPREF(XXH128_canonical_t)\n#  define XXH32_state_s XXH_IPREF(XXH32_state_s)\n#  define XXH32_state_t XXH_IPREF(XXH32_state_t)\n#  define XXH64_state_s XXH_IPREF(XXH64_state_s)\n#  define XXH64_state_t XXH_IPREF(XXH64_state_t)\n#  define XXH3_state_s  XXH_IPREF(XXH3_state_s)\n#  define XXH3_state_t  XXH_IPREF(XXH3_state_t)\n#  define XXH128_hash_t XXH_IPREF(XXH128_hash_t)\n   /* Ensure the header is parsed again, even if it was previously included */\n#  undef XXHASH_H_5627135585666179\n#  undef XXHASH_H_STATIC_13879238742\n#endif /* XXH_INLINE_ALL || XXH_PRIVATE_API */\n\n/* ****************************************************************\n *  Stable API\n *****************************************************************/\n#ifndef XXHASH_H_5627135585666179\n#define XXHASH_H_5627135585666179 1\n\n/*! @brief Marks a global symbol. */\n#if !defined(XXH_INLINE_ALL) && !defined(XXH_PRIVATE_API)\n#  if defined(_WIN32) && defined(_MSC_VER) && (defined(XXH_IMPORT) || defined(XXH_EXPORT))\n#    ifdef XXH_EXPORT\n#      define XXH_PUBLIC_API __declspec(dllexport)\n#    elif XXH_IMPORT\n#      define XXH_PUBLIC_API __declspec(dllimport)\n#    endif\n#  else\n#    define XXH_PUBLIC_API   /* do nothing */\n#  endif\n#endif\n\n#ifdef XXH_NAMESPACE\n#  define XXH_CAT(A,B) A##B\n#  define XXH_NAME2(A,B) XXH_CAT(A,B)\n#  define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber)\n/* XXH32 */\n#  define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32)\n#  define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState)\n#  define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState)\n#  define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset)\n#  define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update)\n#  define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest)\n#  define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState)\n#  define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash)\n#  define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical)\n/* XXH64 */\n#  define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64)\n#  define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState)\n#  define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState)\n#  define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset)\n#  define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update)\n#  define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest)\n#  define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState)\n#  define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash)\n#  define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical)\n/* XXH3_64bits */\n#  define XXH3_64bits XXH_NAME2(XXH_NAMESPACE, XXH3_64bits)\n#  define XXH3_64bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecret)\n#  define XXH3_64bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSeed)\n#  define XXH3_64bits_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecretandSeed)\n#  define XXH3_createState XXH_NAME2(XXH_NAMESPACE, XXH3_createState)\n#  define XXH3_freeState XXH_NAME2(XXH_NAMESPACE, XXH3_freeState)\n#  define XXH3_copyState XXH_NAME2(XXH_NAMESPACE, XXH3_copyState)\n#  define XXH3_64bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset)\n#  define XXH3_64bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSeed)\n#  define XXH3_64bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecret)\n#  define XXH3_64bits_reset_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecretandSeed)\n#  define XXH3_64bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_update)\n#  define XXH3_64bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_digest)\n#  define XXH3_generateSecret XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret)\n#  define XXH3_generateSecret_fromSeed XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret_fromSeed)\n/* XXH3_128bits */\n#  define XXH128 XXH_NAME2(XXH_NAMESPACE, XXH128)\n#  define XXH3_128bits XXH_NAME2(XXH_NAMESPACE, XXH3_128bits)\n#  define XXH3_128bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSeed)\n#  define XXH3_128bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecret)\n#  define XXH3_128bits_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecretandSeed)\n#  define XXH3_128bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset)\n#  define XXH3_128bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSeed)\n#  define XXH3_128bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecret)\n#  define XXH3_128bits_reset_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecretandSeed)\n#  define XXH3_128bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_update)\n#  define XXH3_128bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_digest)\n#  define XXH128_isEqual XXH_NAME2(XXH_NAMESPACE, XXH128_isEqual)\n#  define XXH128_cmp     XXH_NAME2(XXH_NAMESPACE, XXH128_cmp)\n#  define XXH128_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH128_canonicalFromHash)\n#  define XXH128_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH128_hashFromCanonical)\n#endif\n\n\n/* *************************************\n*  Compiler specifics\n***************************************/\n\n/* specific declaration modes for Windows */\n#if !defined(XXH_INLINE_ALL) && !defined(XXH_PRIVATE_API)\n#  if defined(_WIN32) && defined(_MSC_VER) && (defined(XXH_IMPORT) || defined(XXH_EXPORT))\n#    ifdef XXH_EXPORT\n#      define XXH_PUBLIC_API __declspec(dllexport)\n#    elif XXH_IMPORT\n#      define XXH_PUBLIC_API __declspec(dllimport)\n#    endif\n#  else\n#    define XXH_PUBLIC_API   /* do nothing */\n#  endif\n#endif\n\n#if defined (__GNUC__)\n# define XXH_CONSTF  __attribute__((__const__))\n# define XXH_PUREF   __attribute__((__pure__))\n# define XXH_MALLOCF __attribute__((__malloc__))\n#else\n# define XXH_CONSTF  /* disable */\n# define XXH_PUREF\n# define XXH_MALLOCF\n#endif\n\n/* *************************************\n*  Version\n***************************************/\n#define XXH_VERSION_MAJOR    0\n#define XXH_VERSION_MINOR    8\n#define XXH_VERSION_RELEASE  3\n/*! @brief Version number, encoded as two digits each */\n#define XXH_VERSION_NUMBER  (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE)\n\n/*!\n * @brief Obtains the xxHash version.\n *\n * This is mostly useful when xxHash is compiled as a shared library,\n * since the returned value comes from the library, as opposed to header file.\n *\n * @return @ref XXH_VERSION_NUMBER of the invoked library.\n */\nXXH_PUBLIC_API XXH_CONSTF unsigned XXH_versionNumber (void);\n\n\n/* ****************************\n*  Common basic types\n******************************/\n#include <stddef.h>   /* size_t */\n/*!\n * @brief Exit code for the streaming API.\n */\ntypedef enum {\n    XXH_OK = 0, /*!< OK */\n    XXH_ERROR   /*!< Error */\n} XXH_errorcode;\n\n\n/*-**********************************************************************\n*  32-bit hash\n************************************************************************/\n#if defined(XXH_DOXYGEN) /* Don't show <stdint.h> include */\n/*!\n * @brief An unsigned 32-bit integer.\n *\n * Not necessarily defined to `uint32_t` but functionally equivalent.\n */\ntypedef uint32_t XXH32_hash_t;\n\n#elif !defined (__VMS) \\\n  && (defined (__cplusplus) \\\n  || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )\n#   ifdef _AIX\n#     include <inttypes.h>\n#   else\n#     include <stdint.h>\n#   endif\n    typedef uint32_t XXH32_hash_t;\n\n#else\n#   include <limits.h>\n#   if UINT_MAX == 0xFFFFFFFFUL\n      typedef unsigned int XXH32_hash_t;\n#   elif ULONG_MAX == 0xFFFFFFFFUL\n      typedef unsigned long XXH32_hash_t;\n#   else\n#     error \"unsupported platform: need a 32-bit type\"\n#   endif\n#endif\n\n/*!\n * @}\n *\n * @defgroup XXH32_family XXH32 family\n * @ingroup public\n * Contains functions used in the classic 32-bit xxHash algorithm.\n *\n * @note\n *   XXH32 is useful for older platforms, with no or poor 64-bit performance.\n *   Note that the @ref XXH3_family provides competitive speed for both 32-bit\n *   and 64-bit systems, and offers true 64/128 bit hash results.\n *\n * @see @ref XXH64_family, @ref XXH3_family : Other xxHash families\n * @see @ref XXH32_impl for implementation details\n * @{\n */\n\n/*!\n * @brief Calculates the 32-bit hash of @p input using xxHash32.\n *\n * @param input The block of data to be hashed, at least @p length bytes in size.\n * @param length The length of @p input, in bytes.\n * @param seed The 32-bit seed to alter the hash's output predictably.\n *\n * @pre\n *   The memory between @p input and @p input + @p length must be valid,\n *   readable, contiguous memory. However, if @p length is `0`, @p input may be\n *   `NULL`. In C++, this also must be *TriviallyCopyable*.\n *\n * @return The calculated 32-bit xxHash32 value.\n *\n * @see @ref single_shot_example \"Single Shot Example\" for an example.\n */\nXXH_PUBLIC_API XXH_PUREF XXH32_hash_t XXH32 (const void* input, size_t length, XXH32_hash_t seed);\n\n#ifndef XXH_NO_STREAM\n/*!\n * @typedef struct XXH32_state_s XXH32_state_t\n * @brief The opaque state struct for the XXH32 streaming API.\n *\n * @see XXH32_state_s for details.\n * @see @ref streaming_example \"Streaming Example\"\n */\ntypedef struct XXH32_state_s XXH32_state_t;\n\n/*!\n * @brief Allocates an @ref XXH32_state_t.\n *\n * @return An allocated pointer of @ref XXH32_state_t on success.\n * @return `NULL` on failure.\n *\n * @note Must be freed with XXH32_freeState().\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_MALLOCF XXH32_state_t* XXH32_createState(void);\n/*!\n * @brief Frees an @ref XXH32_state_t.\n *\n * @param statePtr A pointer to an @ref XXH32_state_t allocated with @ref XXH32_createState().\n *\n * @return @ref XXH_OK.\n *\n * @note @p statePtr must be allocated with XXH32_createState().\n *\n * @see @ref streaming_example \"Streaming Example\"\n *\n */\nXXH_PUBLIC_API XXH_errorcode  XXH32_freeState(XXH32_state_t* statePtr);\n/*!\n * @brief Copies one @ref XXH32_state_t to another.\n *\n * @param dst_state The state to copy to.\n * @param src_state The state to copy from.\n * @pre\n *   @p dst_state and @p src_state must not be `NULL` and must not overlap.\n */\nXXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state);\n\n/*!\n * @brief Resets an @ref XXH32_state_t to begin a new hash.\n *\n * @param statePtr The state struct to reset.\n * @param seed The 32-bit seed to alter the hash result predictably.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @note This function resets and seeds a state. Call it before @ref XXH32_update().\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_errorcode XXH32_reset  (XXH32_state_t* statePtr, XXH32_hash_t seed);\n\n/*!\n * @brief Consumes a block of @p input to an @ref XXH32_state_t.\n *\n * @param statePtr The state struct to update.\n * @param input The block of data to be hashed, at least @p length bytes in size.\n * @param length The length of @p input, in bytes.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n * @pre\n *   The memory between @p input and @p input + @p length must be valid,\n *   readable, contiguous memory. However, if @p length is `0`, @p input may be\n *   `NULL`. In C++, this also must be *TriviallyCopyable*.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @note Call this to incrementally consume blocks of data.\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length);\n\n/*!\n * @brief Returns the calculated hash value from an @ref XXH32_state_t.\n *\n * @param statePtr The state struct to calculate the hash from.\n *\n * @pre\n *  @p statePtr must not be `NULL`.\n *\n * @return The calculated 32-bit xxHash32 value from that state.\n *\n * @note\n *   Calling XXH32_digest() will not affect @p statePtr, so you can update,\n *   digest, and update again.\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_PUREF XXH32_hash_t XXH32_digest (const XXH32_state_t* statePtr);\n#endif /* !XXH_NO_STREAM */\n\n/*******   Canonical representation   *******/\n\n/*!\n * @brief Canonical (big endian) representation of @ref XXH32_hash_t.\n */\ntypedef struct {\n    unsigned char digest[4]; /*!< Hash bytes, big endian */\n} XXH32_canonical_t;\n\n/*!\n * @brief Converts an @ref XXH32_hash_t to a big endian @ref XXH32_canonical_t.\n *\n * @param dst  The @ref XXH32_canonical_t pointer to be stored to.\n * @param hash The @ref XXH32_hash_t to be converted.\n *\n * @pre\n *   @p dst must not be `NULL`.\n *\n * @see @ref canonical_representation_example \"Canonical Representation Example\"\n */\nXXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash);\n\n/*!\n * @brief Converts an @ref XXH32_canonical_t to a native @ref XXH32_hash_t.\n *\n * @param src The @ref XXH32_canonical_t to convert.\n *\n * @pre\n *   @p src must not be `NULL`.\n *\n * @return The converted hash.\n *\n * @see @ref canonical_representation_example \"Canonical Representation Example\"\n */\nXXH_PUBLIC_API XXH_PUREF XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src);\n\n\n/*! @cond Doxygen ignores this part */\n#ifdef __has_attribute\n# define XXH_HAS_ATTRIBUTE(x) __has_attribute(x)\n#else\n# define XXH_HAS_ATTRIBUTE(x) 0\n#endif\n/*! @endcond */\n\n/*! @cond Doxygen ignores this part */\n/*\n * C23 __STDC_VERSION__ number hasn't been specified yet. For now\n * leave as `201711L` (C17 + 1).\n * TODO: Update to correct value when its been specified.\n */\n#define XXH_C23_VN 201711L\n/*! @endcond */\n\n/*! @cond Doxygen ignores this part */\n/* C-language Attributes are added in C23. */\n#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= XXH_C23_VN) && defined(__has_c_attribute)\n# define XXH_HAS_C_ATTRIBUTE(x) __has_c_attribute(x)\n#else\n# define XXH_HAS_C_ATTRIBUTE(x) 0\n#endif\n/*! @endcond */\n\n/*! @cond Doxygen ignores this part */\n#if defined(__cplusplus) && defined(__has_cpp_attribute)\n# define XXH_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)\n#else\n# define XXH_HAS_CPP_ATTRIBUTE(x) 0\n#endif\n/*! @endcond */\n\n/*! @cond Doxygen ignores this part */\n/*\n * Define XXH_FALLTHROUGH macro for annotating switch case with the 'fallthrough' attribute\n * introduced in CPP17 and C23.\n * CPP17 : https://en.cppreference.com/w/cpp/language/attributes/fallthrough\n * C23   : https://en.cppreference.com/w/c/language/attributes/fallthrough\n */\n#if XXH_HAS_C_ATTRIBUTE(fallthrough) || XXH_HAS_CPP_ATTRIBUTE(fallthrough)\n# define XXH_FALLTHROUGH [[fallthrough]]\n#elif XXH_HAS_ATTRIBUTE(__fallthrough__)\n# define XXH_FALLTHROUGH __attribute__ ((__fallthrough__))\n#else\n# define XXH_FALLTHROUGH /* fallthrough */\n#endif\n/*! @endcond */\n\n/*! @cond Doxygen ignores this part */\n/*\n * Define XXH_NOESCAPE for annotated pointers in public API.\n * https://clang.llvm.org/docs/AttributeReference.html#noescape\n * As of writing this, only supported by clang.\n */\n#if XXH_HAS_ATTRIBUTE(noescape)\n# define XXH_NOESCAPE __attribute__((__noescape__))\n#else\n# define XXH_NOESCAPE\n#endif\n/*! @endcond */\n\n\n/*!\n * @}\n * @ingroup public\n * @{\n */\n\n#ifndef XXH_NO_LONG_LONG\n/*-**********************************************************************\n*  64-bit hash\n************************************************************************/\n#if defined(XXH_DOXYGEN) /* don't include <stdint.h> */\n/*!\n * @brief An unsigned 64-bit integer.\n *\n * Not necessarily defined to `uint64_t` but functionally equivalent.\n */\ntypedef uint64_t XXH64_hash_t;\n#elif !defined (__VMS) \\\n  && (defined (__cplusplus) \\\n  || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )\n#   ifdef _AIX\n#     include <inttypes.h>\n#   else\n#     include <stdint.h>\n#   endif\n   typedef uint64_t XXH64_hash_t;\n#else\n#  include <limits.h>\n#  if defined(__LP64__) && ULONG_MAX == 0xFFFFFFFFFFFFFFFFULL\n     /* LP64 ABI says uint64_t is unsigned long */\n     typedef unsigned long XXH64_hash_t;\n#  else\n     /* the following type must have a width of 64-bit */\n     typedef unsigned long long XXH64_hash_t;\n#  endif\n#endif\n\n/*!\n * @}\n *\n * @defgroup XXH64_family XXH64 family\n * @ingroup public\n * @{\n * Contains functions used in the classic 64-bit xxHash algorithm.\n *\n * @note\n *   XXH3 provides competitive speed for both 32-bit and 64-bit systems,\n *   and offers true 64/128 bit hash results.\n *   It provides better speed for systems with vector processing capabilities.\n */\n\n/*!\n * @brief Calculates the 64-bit hash of @p input using xxHash64.\n *\n * @param input The block of data to be hashed, at least @p length bytes in size.\n * @param length The length of @p input, in bytes.\n * @param seed The 64-bit seed to alter the hash's output predictably.\n *\n * @pre\n *   The memory between @p input and @p input + @p length must be valid,\n *   readable, contiguous memory. However, if @p length is `0`, @p input may be\n *   `NULL`. In C++, this also must be *TriviallyCopyable*.\n *\n * @return The calculated 64-bit xxHash64 value.\n *\n * @see @ref single_shot_example \"Single Shot Example\" for an example.\n */\nXXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH64(XXH_NOESCAPE const void* input, size_t length, XXH64_hash_t seed);\n\n/*******   Streaming   *******/\n#ifndef XXH_NO_STREAM\n/*!\n * @brief The opaque state struct for the XXH64 streaming API.\n *\n * @see XXH64_state_s for details.\n * @see @ref streaming_example \"Streaming Example\"\n */\ntypedef struct XXH64_state_s XXH64_state_t;   /* incomplete type */\n\n/*!\n * @brief Allocates an @ref XXH64_state_t.\n *\n * @return An allocated pointer of @ref XXH64_state_t on success.\n * @return `NULL` on failure.\n *\n * @note Must be freed with XXH64_freeState().\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_MALLOCF XXH64_state_t* XXH64_createState(void);\n\n/*!\n * @brief Frees an @ref XXH64_state_t.\n *\n * @param statePtr A pointer to an @ref XXH64_state_t allocated with @ref XXH64_createState().\n *\n * @return @ref XXH_OK.\n *\n * @note @p statePtr must be allocated with XXH64_createState().\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_errorcode  XXH64_freeState(XXH64_state_t* statePtr);\n\n/*!\n * @brief Copies one @ref XXH64_state_t to another.\n *\n * @param dst_state The state to copy to.\n * @param src_state The state to copy from.\n * @pre\n *   @p dst_state and @p src_state must not be `NULL` and must not overlap.\n */\nXXH_PUBLIC_API void XXH64_copyState(XXH_NOESCAPE XXH64_state_t* dst_state, const XXH64_state_t* src_state);\n\n/*!\n * @brief Resets an @ref XXH64_state_t to begin a new hash.\n *\n * @param statePtr The state struct to reset.\n * @param seed The 64-bit seed to alter the hash result predictably.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @note This function resets and seeds a state. Call it before @ref XXH64_update().\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_errorcode XXH64_reset  (XXH_NOESCAPE XXH64_state_t* statePtr, XXH64_hash_t seed);\n\n/*!\n * @brief Consumes a block of @p input to an @ref XXH64_state_t.\n *\n * @param statePtr The state struct to update.\n * @param input The block of data to be hashed, at least @p length bytes in size.\n * @param length The length of @p input, in bytes.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n * @pre\n *   The memory between @p input and @p input + @p length must be valid,\n *   readable, contiguous memory. However, if @p length is `0`, @p input may be\n *   `NULL`. In C++, this also must be *TriviallyCopyable*.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @note Call this to incrementally consume blocks of data.\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_errorcode XXH64_update (XXH_NOESCAPE XXH64_state_t* statePtr, XXH_NOESCAPE const void* input, size_t length);\n\n/*!\n * @brief Returns the calculated hash value from an @ref XXH64_state_t.\n *\n * @param statePtr The state struct to calculate the hash from.\n *\n * @pre\n *  @p statePtr must not be `NULL`.\n *\n * @return The calculated 64-bit xxHash64 value from that state.\n *\n * @note\n *   Calling XXH64_digest() will not affect @p statePtr, so you can update,\n *   digest, and update again.\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH64_digest (XXH_NOESCAPE const XXH64_state_t* statePtr);\n#endif /* !XXH_NO_STREAM */\n/*******   Canonical representation   *******/\n\n/*!\n * @brief Canonical (big endian) representation of @ref XXH64_hash_t.\n */\ntypedef struct { unsigned char digest[sizeof(XXH64_hash_t)]; } XXH64_canonical_t;\n\n/*!\n * @brief Converts an @ref XXH64_hash_t to a big endian @ref XXH64_canonical_t.\n *\n * @param dst The @ref XXH64_canonical_t pointer to be stored to.\n * @param hash The @ref XXH64_hash_t to be converted.\n *\n * @pre\n *   @p dst must not be `NULL`.\n *\n * @see @ref canonical_representation_example \"Canonical Representation Example\"\n */\nXXH_PUBLIC_API void XXH64_canonicalFromHash(XXH_NOESCAPE XXH64_canonical_t* dst, XXH64_hash_t hash);\n\n/*!\n * @brief Converts an @ref XXH64_canonical_t to a native @ref XXH64_hash_t.\n *\n * @param src The @ref XXH64_canonical_t to convert.\n *\n * @pre\n *   @p src must not be `NULL`.\n *\n * @return The converted hash.\n *\n * @see @ref canonical_representation_example \"Canonical Representation Example\"\n */\nXXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH64_hashFromCanonical(XXH_NOESCAPE const XXH64_canonical_t* src);\n\n#ifndef XXH_NO_XXH3\n\n/*!\n * @}\n * ************************************************************************\n * @defgroup XXH3_family XXH3 family\n * @ingroup public\n * @{\n *\n * XXH3 is a more recent hash algorithm featuring:\n *  - Improved speed for both small and large inputs\n *  - True 64-bit and 128-bit outputs\n *  - SIMD acceleration\n *  - Improved 32-bit viability\n *\n * Speed analysis methodology is explained here:\n *\n *    https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html\n *\n * Compared to XXH64, expect XXH3 to run approximately\n * ~2x faster on large inputs and >3x faster on small ones,\n * exact differences vary depending on platform.\n *\n * XXH3's speed benefits greatly from SIMD and 64-bit arithmetic,\n * but does not require it.\n * Most 32-bit and 64-bit targets that can run XXH32 smoothly can run XXH3\n * at competitive speeds, even without vector support. Further details are\n * explained in the implementation.\n *\n * XXH3 has a fast scalar implementation, but it also includes accelerated SIMD\n * implementations for many common platforms:\n *   - AVX512\n *   - AVX2\n *   - SSE2\n *   - ARM NEON\n *   - WebAssembly SIMD128\n *   - POWER8 VSX\n *   - s390x ZVector\n * This can be controlled via the @ref XXH_VECTOR macro, but it automatically\n * selects the best version according to predefined macros. For the x86 family, an\n * automatic runtime dispatcher is included separately in @ref xxh_x86dispatch.c.\n *\n * XXH3 implementation is portable:\n * it has a generic C90 formulation that can be compiled on any platform,\n * all implementations generate exactly the same hash value on all platforms.\n * Starting from v0.8.0, it's also labelled \"stable\", meaning that\n * any future version will also generate the same hash value.\n *\n * XXH3 offers 2 variants, _64bits and _128bits.\n *\n * When only 64 bits are needed, prefer invoking the _64bits variant, as it\n * reduces the amount of mixing, resulting in faster speed on small inputs.\n * It's also generally simpler to manipulate a scalar return type than a struct.\n *\n * The API supports one-shot hashing, streaming mode, and custom secrets.\n */\n\n/*!\n * @ingroup tuning\n * @brief Possible values for @ref XXH_VECTOR.\n *\n * Unless set explicitly, determined automatically.\n */\n#  define XXH_SCALAR 0 /*!< Portable scalar version */\n#  define XXH_SSE2   1 /*!< SSE2 for Pentium 4, Opteron, all x86_64. */\n#  define XXH_AVX2   2 /*!< AVX2 for Haswell and Bulldozer */\n#  define XXH_AVX512 3 /*!< AVX512 for Skylake and Icelake */\n#  define XXH_NEON   4 /*!< NEON for most ARMv7-A, all AArch64, and WASM SIMD128 */\n#  define XXH_VSX    5 /*!< VSX and ZVector for POWER8/z13 (64-bit) */\n#  define XXH_SVE    6 /*!< SVE for some ARMv8-A and ARMv9-A */\n#  define XXH_LSX    7 /*!< LSX (128-bit SIMD) for LoongArch64 */\n\n\n/*-**********************************************************************\n*  XXH3 64-bit variant\n************************************************************************/\n\n/*!\n * @brief Calculates 64-bit unseeded variant of XXH3 hash of @p input.\n *\n * @param input  The block of data to be hashed, at least @p length bytes in size.\n * @param length The length of @p input, in bytes.\n *\n * @pre\n *   The memory between @p input and @p input + @p length must be valid,\n *   readable, contiguous memory. However, if @p length is `0`, @p input may be\n *   `NULL`. In C++, this also must be *TriviallyCopyable*.\n *\n * @return The calculated 64-bit XXH3 hash value.\n *\n * @note\n *   This is equivalent to @ref XXH3_64bits_withSeed() with a seed of `0`, however\n *   it may have slightly better performance due to constant propagation of the\n *   defaults.\n *\n * @see\n *    XXH3_64bits_withSeed(), XXH3_64bits_withSecret(): other seeding variants\n * @see @ref single_shot_example \"Single Shot Example\" for an example.\n */\nXXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH3_64bits(XXH_NOESCAPE const void* input, size_t length);\n\n/*!\n * @brief Calculates 64-bit seeded variant of XXH3 hash of @p input.\n *\n * @param input  The block of data to be hashed, at least @p length bytes in size.\n * @param length The length of @p input, in bytes.\n * @param seed   The 64-bit seed to alter the hash result predictably.\n *\n * @pre\n *   The memory between @p input and @p input + @p length must be valid,\n *   readable, contiguous memory. However, if @p length is `0`, @p input may be\n *   `NULL`. In C++, this also must be *TriviallyCopyable*.\n *\n * @return The calculated 64-bit XXH3 hash value.\n *\n * @note\n *    seed == 0 produces the same results as @ref XXH3_64bits().\n *\n * This variant generates a custom secret on the fly based on default secret\n * altered using the @p seed value.\n *\n * While this operation is decently fast, note that it's not completely free.\n *\n * @see @ref single_shot_example \"Single Shot Example\" for an example.\n */\nXXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH3_64bits_withSeed(XXH_NOESCAPE const void* input, size_t length, XXH64_hash_t seed);\n\n/*!\n * The bare minimum size for a custom secret.\n *\n * @see\n *  XXH3_64bits_withSecret(), XXH3_64bits_reset_withSecret(),\n *  XXH3_128bits_withSecret(), XXH3_128bits_reset_withSecret().\n */\n#define XXH3_SECRET_SIZE_MIN 136\n\n/*!\n * @brief Calculates 64-bit variant of XXH3 with a custom \"secret\".\n *\n * @param data       The block of data to be hashed, at least @p len bytes in size.\n * @param len        The length of @p data, in bytes.\n * @param secret     The secret data.\n * @param secretSize The length of @p secret, in bytes.\n *\n * @return The calculated 64-bit XXH3 hash value.\n *\n * @pre\n *   The memory between @p data and @p data + @p len must be valid,\n *   readable, contiguous memory. However, if @p length is `0`, @p data may be\n *   `NULL`. In C++, this also must be *TriviallyCopyable*.\n *\n * It's possible to provide any blob of bytes as a \"secret\" to generate the hash.\n * This makes it more difficult for an external actor to prepare an intentional collision.\n * The main condition is that @p secretSize *must* be large enough (>= @ref XXH3_SECRET_SIZE_MIN).\n * However, the quality of the secret impacts the dispersion of the hash algorithm.\n * Therefore, the secret _must_ look like a bunch of random bytes.\n * Avoid \"trivial\" or structured data such as repeated sequences or a text document.\n * Whenever in doubt about the \"randomness\" of the blob of bytes,\n * consider employing @ref XXH3_generateSecret() instead (see below).\n * It will generate a proper high entropy secret derived from the blob of bytes.\n * Another advantage of using XXH3_generateSecret() is that\n * it guarantees that all bits within the initial blob of bytes\n * will impact every bit of the output.\n * This is not necessarily the case when using the blob of bytes directly\n * because, when hashing _small_ inputs, only a portion of the secret is employed.\n *\n * @see @ref single_shot_example \"Single Shot Example\" for an example.\n */\nXXH_PUBLIC_API XXH_PUREF XXH64_hash_t XXH3_64bits_withSecret(XXH_NOESCAPE const void* data, size_t len, XXH_NOESCAPE const void* secret, size_t secretSize);\n\n\n/*******   Streaming   *******/\n#ifndef XXH_NO_STREAM\n/*\n * Streaming requires state maintenance.\n * This operation costs memory and CPU.\n * As a consequence, streaming is slower than one-shot hashing.\n * For better performance, prefer one-shot functions whenever applicable.\n */\n\n/*!\n * @brief The opaque state struct for the XXH3 streaming API.\n *\n * @see XXH3_state_s for details.\n * @see @ref streaming_example \"Streaming Example\"\n */\ntypedef struct XXH3_state_s XXH3_state_t;\nXXH_PUBLIC_API XXH_MALLOCF XXH3_state_t* XXH3_createState(void);\nXXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr);\n\n/*!\n * @brief Copies one @ref XXH3_state_t to another.\n *\n * @param dst_state The state to copy to.\n * @param src_state The state to copy from.\n * @pre\n *   @p dst_state and @p src_state must not be `NULL` and must not overlap.\n */\nXXH_PUBLIC_API void XXH3_copyState(XXH_NOESCAPE XXH3_state_t* dst_state, XXH_NOESCAPE const XXH3_state_t* src_state);\n\n/*!\n * @brief Resets an @ref XXH3_state_t to begin a new hash.\n *\n * @param statePtr The state struct to reset.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @note\n *   - This function resets `statePtr` and generate a secret with default parameters.\n *   - Call this function before @ref XXH3_64bits_update().\n *   - Digest will be equivalent to `XXH3_64bits()`.\n *\n * @see @ref streaming_example \"Streaming Example\"\n *\n */\nXXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH_NOESCAPE XXH3_state_t* statePtr);\n\n/*!\n * @brief Resets an @ref XXH3_state_t with 64-bit seed to begin a new hash.\n *\n * @param statePtr The state struct to reset.\n * @param seed     The 64-bit seed to alter the hash result predictably.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @note\n *   - This function resets `statePtr` and generate a secret from `seed`.\n *   - Call this function before @ref XXH3_64bits_update().\n *   - Digest will be equivalent to `XXH3_64bits_withSeed()`.\n *\n * @see @ref streaming_example \"Streaming Example\"\n *\n */\nXXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH64_hash_t seed);\n\n/*!\n * @brief Resets an @ref XXH3_state_t with secret data to begin a new hash.\n *\n * @param statePtr The state struct to reset.\n * @param secret     The secret data.\n * @param secretSize The length of @p secret, in bytes.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @note\n *   `secret` is referenced, it _must outlive_ the hash streaming session.\n *\n * Similar to one-shot API, `secretSize` must be >= @ref XXH3_SECRET_SIZE_MIN,\n * and the quality of produced hash values depends on secret's entropy\n * (secret's content should look like a bunch of random bytes).\n * When in doubt about the randomness of a candidate `secret`,\n * consider employing `XXH3_generateSecret()` instead (see below).\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize);\n\n/*!\n * @brief Consumes a block of @p input to an @ref XXH3_state_t.\n *\n * @param statePtr The state struct to update.\n * @param input The block of data to be hashed, at least @p length bytes in size.\n * @param length The length of @p input, in bytes.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n * @pre\n *   The memory between @p input and @p input + @p length must be valid,\n *   readable, contiguous memory. However, if @p length is `0`, @p input may be\n *   `NULL`. In C++, this also must be *TriviallyCopyable*.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @note Call this to incrementally consume blocks of data.\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_errorcode XXH3_64bits_update (XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* input, size_t length);\n\n/*!\n * @brief Returns the calculated XXH3 64-bit hash value from an @ref XXH3_state_t.\n *\n * @param statePtr The state struct to calculate the hash from.\n *\n * @pre\n *  @p statePtr must not be `NULL`.\n *\n * @return The calculated XXH3 64-bit hash value from that state.\n *\n * @note\n *   Calling XXH3_64bits_digest() will not affect @p statePtr, so you can update,\n *   digest, and update again.\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_PUREF XXH64_hash_t  XXH3_64bits_digest (XXH_NOESCAPE const XXH3_state_t* statePtr);\n#endif /* !XXH_NO_STREAM */\n\n/* note : canonical representation of XXH3 is the same as XXH64\n * since they both produce XXH64_hash_t values */\n\n\n/*-**********************************************************************\n*  XXH3 128-bit variant\n************************************************************************/\n\n/*!\n * @brief The return value from 128-bit hashes.\n *\n * Stored in little endian order, although the fields themselves are in native\n * endianness.\n */\ntypedef struct {\n    XXH64_hash_t low64;   /*!< `value & 0xFFFFFFFFFFFFFFFF` */\n    XXH64_hash_t high64;  /*!< `value >> 64` */\n} XXH128_hash_t;\n\n/*!\n * @brief Calculates 128-bit unseeded variant of XXH3 of @p data.\n *\n * @param data The block of data to be hashed, at least @p length bytes in size.\n * @param len  The length of @p data, in bytes.\n *\n * @return The calculated 128-bit variant of XXH3 value.\n *\n * The 128-bit variant of XXH3 has more strength, but it has a bit of overhead\n * for shorter inputs.\n *\n * This is equivalent to @ref XXH3_128bits_withSeed() with a seed of `0`, however\n * it may have slightly better performance due to constant propagation of the\n * defaults.\n *\n * @see XXH3_128bits_withSeed(), XXH3_128bits_withSecret(): other seeding variants\n * @see @ref single_shot_example \"Single Shot Example\" for an example.\n */\nXXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH3_128bits(XXH_NOESCAPE const void* data, size_t len);\n/*! @brief Calculates 128-bit seeded variant of XXH3 hash of @p data.\n *\n * @param data The block of data to be hashed, at least @p length bytes in size.\n * @param len  The length of @p data, in bytes.\n * @param seed The 64-bit seed to alter the hash result predictably.\n *\n * @return The calculated 128-bit variant of XXH3 value.\n *\n * @note\n *    seed == 0 produces the same results as @ref XXH3_64bits().\n *\n * This variant generates a custom secret on the fly based on default secret\n * altered using the @p seed value.\n *\n * While this operation is decently fast, note that it's not completely free.\n *\n * @see XXH3_128bits(), XXH3_128bits_withSecret(): other seeding variants\n * @see @ref single_shot_example \"Single Shot Example\" for an example.\n */\nXXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH3_128bits_withSeed(XXH_NOESCAPE const void* data, size_t len, XXH64_hash_t seed);\n/*!\n * @brief Calculates 128-bit variant of XXH3 with a custom \"secret\".\n *\n * @param data       The block of data to be hashed, at least @p len bytes in size.\n * @param len        The length of @p data, in bytes.\n * @param secret     The secret data.\n * @param secretSize The length of @p secret, in bytes.\n *\n * @return The calculated 128-bit variant of XXH3 value.\n *\n * It's possible to provide any blob of bytes as a \"secret\" to generate the hash.\n * This makes it more difficult for an external actor to prepare an intentional collision.\n * The main condition is that @p secretSize *must* be large enough (>= @ref XXH3_SECRET_SIZE_MIN).\n * However, the quality of the secret impacts the dispersion of the hash algorithm.\n * Therefore, the secret _must_ look like a bunch of random bytes.\n * Avoid \"trivial\" or structured data such as repeated sequences or a text document.\n * Whenever in doubt about the \"randomness\" of the blob of bytes,\n * consider employing @ref XXH3_generateSecret() instead (see below).\n * It will generate a proper high entropy secret derived from the blob of bytes.\n * Another advantage of using XXH3_generateSecret() is that\n * it guarantees that all bits within the initial blob of bytes\n * will impact every bit of the output.\n * This is not necessarily the case when using the blob of bytes directly\n * because, when hashing _small_ inputs, only a portion of the secret is employed.\n *\n * @see @ref single_shot_example \"Single Shot Example\" for an example.\n */\nXXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH3_128bits_withSecret(XXH_NOESCAPE const void* data, size_t len, XXH_NOESCAPE const void* secret, size_t secretSize);\n\n/*******   Streaming   *******/\n#ifndef XXH_NO_STREAM\n/*\n * Streaming requires state maintenance.\n * This operation costs memory and CPU.\n * As a consequence, streaming is slower than one-shot hashing.\n * For better performance, prefer one-shot functions whenever applicable.\n *\n * XXH3_128bits uses the same XXH3_state_t as XXH3_64bits().\n * Use already declared XXH3_createState() and XXH3_freeState().\n *\n * All reset and streaming functions have same meaning as their 64-bit counterpart.\n */\n\n/*!\n * @brief Resets an @ref XXH3_state_t to begin a new hash.\n *\n * @param statePtr The state struct to reset.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @note\n *   - This function resets `statePtr` and generate a secret with default parameters.\n *   - Call it before @ref XXH3_128bits_update().\n *   - Digest will be equivalent to `XXH3_128bits()`.\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset(XXH_NOESCAPE XXH3_state_t* statePtr);\n\n/*!\n * @brief Resets an @ref XXH3_state_t with 64-bit seed to begin a new hash.\n *\n * @param statePtr The state struct to reset.\n * @param seed     The 64-bit seed to alter the hash result predictably.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @note\n *   - This function resets `statePtr` and generate a secret from `seed`.\n *   - Call it before @ref XXH3_128bits_update().\n *   - Digest will be equivalent to `XXH3_128bits_withSeed()`.\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH64_hash_t seed);\n/*!\n * @brief Resets an @ref XXH3_state_t with secret data to begin a new hash.\n *\n * @param statePtr   The state struct to reset.\n * @param secret     The secret data.\n * @param secretSize The length of @p secret, in bytes.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * `secret` is referenced, it _must outlive_ the hash streaming session.\n * Similar to one-shot API, `secretSize` must be >= @ref XXH3_SECRET_SIZE_MIN,\n * and the quality of produced hash values depends on secret's entropy\n * (secret's content should look like a bunch of random bytes).\n * When in doubt about the randomness of a candidate `secret`,\n * consider employing `XXH3_generateSecret()` instead (see below).\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize);\n\n/*!\n * @brief Consumes a block of @p input to an @ref XXH3_state_t.\n *\n * Call this to incrementally consume blocks of data.\n *\n * @param statePtr The state struct to update.\n * @param input The block of data to be hashed, at least @p length bytes in size.\n * @param length The length of @p input, in bytes.\n *\n * @pre\n *   @p statePtr must not be `NULL`.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @note\n *   The memory between @p input and @p input + @p length must be valid,\n *   readable, contiguous memory. However, if @p length is `0`, @p input may be\n *   `NULL`. In C++, this also must be *TriviallyCopyable*.\n *\n */\nXXH_PUBLIC_API XXH_errorcode XXH3_128bits_update (XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* input, size_t length);\n\n/*!\n * @brief Returns the calculated XXH3 128-bit hash value from an @ref XXH3_state_t.\n *\n * @param statePtr The state struct to calculate the hash from.\n *\n * @pre\n *  @p statePtr must not be `NULL`.\n *\n * @return The calculated XXH3 128-bit hash value from that state.\n *\n * @note\n *   Calling XXH3_128bits_digest() will not affect @p statePtr, so you can update,\n *   digest, and update again.\n *\n */\nXXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH3_128bits_digest (XXH_NOESCAPE const XXH3_state_t* statePtr);\n#endif /* !XXH_NO_STREAM */\n\n/* Following helper functions make it possible to compare XXH128_hast_t values.\n * Since XXH128_hash_t is a structure, this capability is not offered by the language.\n * Note: For better performance, these functions can be inlined using XXH_INLINE_ALL */\n\n/*!\n * @brief Check equality of two XXH128_hash_t values\n *\n * @param h1 The 128-bit hash value.\n * @param h2 Another 128-bit hash value.\n *\n * @return `1` if `h1` and `h2` are equal.\n * @return `0` if they are not.\n */\nXXH_PUBLIC_API XXH_PUREF int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2);\n\n/*!\n * @brief Compares two @ref XXH128_hash_t\n *\n * This comparator is compatible with stdlib's `qsort()`/`bsearch()`.\n *\n * @param h128_1 Left-hand side value\n * @param h128_2 Right-hand side value\n *\n * @return >0 if @p h128_1  > @p h128_2\n * @return =0 if @p h128_1 == @p h128_2\n * @return <0 if @p h128_1  < @p h128_2\n */\nXXH_PUBLIC_API XXH_PUREF int XXH128_cmp(XXH_NOESCAPE const void* h128_1, XXH_NOESCAPE const void* h128_2);\n\n\n/*******   Canonical representation   *******/\ntypedef struct { unsigned char digest[sizeof(XXH128_hash_t)]; } XXH128_canonical_t;\n\n\n/*!\n * @brief Converts an @ref XXH128_hash_t to a big endian @ref XXH128_canonical_t.\n *\n * @param dst  The @ref XXH128_canonical_t pointer to be stored to.\n * @param hash The @ref XXH128_hash_t to be converted.\n *\n * @pre\n *   @p dst must not be `NULL`.\n * @see @ref canonical_representation_example \"Canonical Representation Example\"\n */\nXXH_PUBLIC_API void XXH128_canonicalFromHash(XXH_NOESCAPE XXH128_canonical_t* dst, XXH128_hash_t hash);\n\n/*!\n * @brief Converts an @ref XXH128_canonical_t to a native @ref XXH128_hash_t.\n *\n * @param src The @ref XXH128_canonical_t to convert.\n *\n * @pre\n *   @p src must not be `NULL`.\n *\n * @return The converted hash.\n * @see @ref canonical_representation_example \"Canonical Representation Example\"\n */\nXXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH128_hashFromCanonical(XXH_NOESCAPE const XXH128_canonical_t* src);\n\n\n#endif  /* !XXH_NO_XXH3 */\n#endif  /* XXH_NO_LONG_LONG */\n\n/*!\n * @}\n */\n#endif /* XXHASH_H_5627135585666179 */\n\n\n\n#if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742)\n#define XXHASH_H_STATIC_13879238742\n/* ****************************************************************************\n * This section contains declarations which are not guaranteed to remain stable.\n * They may change in future versions, becoming incompatible with a different\n * version of the library.\n * These declarations should only be used with static linking.\n * Never use them in association with dynamic linking!\n ***************************************************************************** */\n\n/*\n * These definitions are only present to allow static allocation\n * of XXH states, on stack or in a struct, for example.\n * Never **ever** access their members directly.\n */\n\n/*!\n * @internal\n * @brief Structure for XXH32 streaming API.\n *\n * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY,\n * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. Otherwise it is\n * an opaque type. This allows fields to safely be changed.\n *\n * Typedef'd to @ref XXH32_state_t.\n * Do not access the members of this struct directly.\n * @see XXH64_state_s, XXH3_state_s\n */\nstruct XXH32_state_s {\n   XXH32_hash_t total_len_32; /*!< Total length hashed, modulo 2^32 */\n   XXH32_hash_t large_len;    /*!< Whether the hash is >= 16 (handles @ref total_len_32 overflow) */\n   XXH32_hash_t acc[4];       /*!< Accumulator lanes */\n   unsigned char buffer[16];  /*!< Internal buffer for partial reads. */\n   XXH32_hash_t bufferedSize; /*!< Amount of data in @ref buffer */\n   XXH32_hash_t reserved;     /*!< Reserved field. Do not read nor write to it. */\n};   /* typedef'd to XXH32_state_t */\n\n\n#ifndef XXH_NO_LONG_LONG  /* defined when there is no 64-bit support */\n\n/*!\n * @internal\n * @brief Structure for XXH64 streaming API.\n *\n * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY,\n * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. Otherwise it is\n * an opaque type. This allows fields to safely be changed.\n *\n * Typedef'd to @ref XXH64_state_t.\n * Do not access the members of this struct directly.\n * @see XXH32_state_s, XXH3_state_s\n */\nstruct XXH64_state_s {\n   XXH64_hash_t total_len;    /*!< Total length hashed. This is always 64-bit. */\n   XXH64_hash_t acc[4];       /*!< Accumulator lanes */\n   unsigned char buffer[32];  /*!< Internal buffer for partial reads.. */\n   XXH32_hash_t bufferedSize; /*!< Amount of data in @ref buffer */\n   XXH32_hash_t reserved32;   /*!< Reserved field, needed for padding anyways*/\n   XXH64_hash_t reserved64;   /*!< Reserved field. Do not read or write to it. */\n};   /* typedef'd to XXH64_state_t */\n\n#ifndef XXH_NO_XXH3\n\n#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* >= C11 */\n#  define XXH_ALIGN(n)      _Alignas(n)\n#elif defined(__cplusplus) && (__cplusplus >= 201103L) /* >= C++11 */\n/* In C++ alignas() is a keyword */\n#  define XXH_ALIGN(n)      alignas(n)\n#elif defined(__GNUC__)\n#  define XXH_ALIGN(n)      __attribute__ ((aligned(n)))\n#elif defined(_MSC_VER)\n#  define XXH_ALIGN(n)      __declspec(align(n))\n#else\n#  define XXH_ALIGN(n)   /* disabled */\n#endif\n\n/* Old GCC versions only accept the attribute after the type in structures. */\n#if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L))   /* C11+ */ \\\n    && ! (defined(__cplusplus) && (__cplusplus >= 201103L)) /* >= C++11 */ \\\n    && defined(__GNUC__)\n#   define XXH_ALIGN_MEMBER(align, type) type XXH_ALIGN(align)\n#else\n#   define XXH_ALIGN_MEMBER(align, type) XXH_ALIGN(align) type\n#endif\n\n/*!\n * @brief The size of the internal XXH3 buffer.\n *\n * This is the optimal update size for incremental hashing.\n *\n * @see XXH3_64b_update(), XXH3_128b_update().\n */\n#define XXH3_INTERNALBUFFER_SIZE 256\n\n/*!\n * @internal\n * @brief Default size of the secret buffer (and @ref XXH3_kSecret).\n *\n * This is the size used in @ref XXH3_kSecret and the seeded functions.\n *\n * Not to be confused with @ref XXH3_SECRET_SIZE_MIN.\n */\n#define XXH3_SECRET_DEFAULT_SIZE 192\n\n/*!\n * @internal\n * @brief Structure for XXH3 streaming API.\n *\n * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY,\n * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined.\n * Otherwise it is an opaque type.\n * Never use this definition in combination with dynamic library.\n * This allows fields to safely be changed in the future.\n *\n * @note ** This structure has a strict alignment requirement of 64 bytes!! **\n * Do not allocate this with `malloc()` or `new`,\n * it will not be sufficiently aligned.\n * Use @ref XXH3_createState() and @ref XXH3_freeState(), or stack allocation.\n *\n * Typedef'd to @ref XXH3_state_t.\n * Do never access the members of this struct directly.\n *\n * @see XXH3_INITSTATE() for stack initialization.\n * @see XXH3_createState(), XXH3_freeState().\n * @see XXH32_state_s, XXH64_state_s\n */\nstruct XXH3_state_s {\n   XXH_ALIGN_MEMBER(64, XXH64_hash_t acc[8]);\n       /*!< The 8 accumulators. See @ref XXH32_state_s::v and @ref XXH64_state_s::v */\n   XXH_ALIGN_MEMBER(64, unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE]);\n       /*!< Used to store a custom secret generated from a seed. */\n   XXH_ALIGN_MEMBER(64, unsigned char buffer[XXH3_INTERNALBUFFER_SIZE]);\n       /*!< The internal buffer. @see XXH32_state_s::mem32 */\n   XXH32_hash_t bufferedSize;\n       /*!< The amount of memory in @ref buffer, @see XXH32_state_s::memsize */\n   XXH32_hash_t useSeed;\n       /*!< Reserved field. Needed for padding on 64-bit. */\n   size_t nbStripesSoFar;\n       /*!< Number or stripes processed. */\n   XXH64_hash_t totalLen;\n       /*!< Total length hashed. 64-bit even on 32-bit targets. */\n   size_t nbStripesPerBlock;\n       /*!< Number of stripes per block. */\n   size_t secretLimit;\n       /*!< Size of @ref customSecret or @ref extSecret */\n   XXH64_hash_t seed;\n       /*!< Seed for _withSeed variants. Must be zero otherwise, @see XXH3_INITSTATE() */\n   XXH64_hash_t reserved64;\n       /*!< Reserved field. */\n   const unsigned char* extSecret;\n       /*!< Reference to an external secret for the _withSecret variants, NULL\n        *   for other variants. */\n   /* note: there may be some padding at the end due to alignment on 64 bytes */\n}; /* typedef'd to XXH3_state_t */\n\n#undef XXH_ALIGN_MEMBER\n\n/*!\n * @brief Initializes a stack-allocated `XXH3_state_s`.\n *\n * When the @ref XXH3_state_t structure is merely emplaced on stack,\n * it should be initialized with XXH3_INITSTATE() or a memset()\n * in case its first reset uses XXH3_NNbits_reset_withSeed().\n * This init can be omitted if the first reset uses default or _withSecret mode.\n * This operation isn't necessary when the state is created with XXH3_createState().\n * Note that this doesn't prepare the state for a streaming operation,\n * it's still necessary to use XXH3_NNbits_reset*() afterwards.\n */\n#define XXH3_INITSTATE(XXH3_state_ptr)                       \\\n    do {                                                     \\\n        XXH3_state_t* tmp_xxh3_state_ptr = (XXH3_state_ptr); \\\n        tmp_xxh3_state_ptr->seed = 0;                        \\\n        tmp_xxh3_state_ptr->extSecret = NULL;                \\\n    } while(0)\n\n\n/*!\n * @brief Calculates the 128-bit hash of @p data using XXH3.\n *\n * @param data The block of data to be hashed, at least @p len bytes in size.\n * @param len  The length of @p data, in bytes.\n * @param seed The 64-bit seed to alter the hash's output predictably.\n *\n * @pre\n *   The memory between @p data and @p data + @p len must be valid,\n *   readable, contiguous memory. However, if @p len is `0`, @p data may be\n *   `NULL`. In C++, this also must be *TriviallyCopyable*.\n *\n * @return The calculated 128-bit XXH3 value.\n *\n * @see @ref single_shot_example \"Single Shot Example\" for an example.\n */\nXXH_PUBLIC_API XXH_PUREF XXH128_hash_t XXH128(XXH_NOESCAPE const void* data, size_t len, XXH64_hash_t seed);\n\n\n/* ===   Experimental API   === */\n/* Symbols defined below must be considered tied to a specific library version. */\n\n/*!\n * @brief Derive a high-entropy secret from any user-defined content, named customSeed.\n *\n * @param secretBuffer    A writable buffer for derived high-entropy secret data.\n * @param secretSize      Size of secretBuffer, in bytes.  Must be >= XXH3_SECRET_SIZE_MIN.\n * @param customSeed      A user-defined content.\n * @param customSeedSize  Size of customSeed, in bytes.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * The generated secret can be used in combination with `*_withSecret()` functions.\n * The `_withSecret()` variants are useful to provide a higher level of protection\n * than 64-bit seed, as it becomes much more difficult for an external actor to\n * guess how to impact the calculation logic.\n *\n * The function accepts as input a custom seed of any length and any content,\n * and derives from it a high-entropy secret of length @p secretSize into an\n * already allocated buffer @p secretBuffer.\n *\n * The generated secret can then be used with any `*_withSecret()` variant.\n * The functions @ref XXH3_128bits_withSecret(), @ref XXH3_64bits_withSecret(),\n * @ref XXH3_128bits_reset_withSecret() and @ref XXH3_64bits_reset_withSecret()\n * are part of this list. They all accept a `secret` parameter\n * which must be large enough for implementation reasons (>= @ref XXH3_SECRET_SIZE_MIN)\n * _and_ feature very high entropy (consist of random-looking bytes).\n * These conditions can be a high bar to meet, so @ref XXH3_generateSecret() can\n * be employed to ensure proper quality.\n *\n * @p customSeed can be anything. It can have any size, even small ones,\n * and its content can be anything, even \"poor entropy\" sources such as a bunch\n * of zeroes. The resulting `secret` will nonetheless provide all required qualities.\n *\n * @pre\n *   - @p secretSize must be >= @ref XXH3_SECRET_SIZE_MIN\n *   - When @p customSeedSize > 0, supplying NULL as customSeed is undefined behavior.\n *\n * Example code:\n * @code{.c}\n *    #include <stdio.h>\n *    #include <stdlib.h>\n *    #include <string.h>\n *    #define XXH_STATIC_LINKING_ONLY // expose unstable API\n *    #include \"xxhash.h\"\n *    // Hashes argv[2] using the entropy from argv[1].\n *    int main(int argc, char* argv[])\n *    {\n *        char secret[XXH3_SECRET_SIZE_MIN];\n *        if (argv != 3) { return 1; }\n *        XXH3_generateSecret(secret, sizeof(secret), argv[1], strlen(argv[1]));\n *        XXH64_hash_t h = XXH3_64bits_withSecret(\n *             argv[2], strlen(argv[2]),\n *             secret, sizeof(secret)\n *        );\n *        printf(\"%016llx\\n\", (unsigned long long) h);\n *    }\n * @endcode\n */\nXXH_PUBLIC_API XXH_errorcode XXH3_generateSecret(XXH_NOESCAPE void* secretBuffer, size_t secretSize, XXH_NOESCAPE const void* customSeed, size_t customSeedSize);\n\n/*!\n * @brief Generate the same secret as the _withSeed() variants.\n *\n * @param secretBuffer A writable buffer of @ref XXH3_SECRET_DEFAULT_SIZE bytes\n * @param seed         The 64-bit seed to alter the hash result predictably.\n *\n * The generated secret can be used in combination with\n *`*_withSecret()` and `_withSecretandSeed()` variants.\n *\n * Example C++ `std::string` hash class:\n * @code{.cpp}\n *    #include <string>\n *    #define XXH_STATIC_LINKING_ONLY // expose unstable API\n *    #include \"xxhash.h\"\n *    // Slow, seeds each time\n *    class HashSlow {\n *        XXH64_hash_t seed;\n *    public:\n *        HashSlow(XXH64_hash_t s) : seed{s} {}\n *        size_t operator()(const std::string& x) const {\n *            return size_t{XXH3_64bits_withSeed(x.c_str(), x.length(), seed)};\n *        }\n *    };\n *    // Fast, caches the seeded secret for future uses.\n *    class HashFast {\n *        unsigned char secret[XXH3_SECRET_DEFAULT_SIZE];\n *    public:\n *        HashFast(XXH64_hash_t s) {\n *            XXH3_generateSecret_fromSeed(secret, seed);\n *        }\n *        size_t operator()(const std::string& x) const {\n *            return size_t{\n *                XXH3_64bits_withSecret(x.c_str(), x.length(), secret, sizeof(secret))\n *            };\n *        }\n *    };\n * @endcode\n */\nXXH_PUBLIC_API void XXH3_generateSecret_fromSeed(XXH_NOESCAPE void* secretBuffer, XXH64_hash_t seed);\n\n/*!\n * @brief Maximum size of \"short\" key in bytes.\n */\n#define XXH3_MIDSIZE_MAX 240\n\n/*!\n * @brief Calculates 64/128-bit seeded variant of XXH3 hash of @p data.\n *\n * @param data       The block of data to be hashed, at least @p len bytes in size.\n * @param len        The length of @p data, in bytes.\n * @param secret     The secret data.\n * @param secretSize The length of @p secret, in bytes.\n * @param seed       The 64-bit seed to alter the hash result predictably.\n *\n * These variants generate hash values using either:\n * - @p seed for \"short\" keys (< @ref XXH3_MIDSIZE_MAX = 240 bytes)\n * - @p secret for \"large\" keys (>= @ref XXH3_MIDSIZE_MAX).\n *\n * This generally benefits speed, compared to `_withSeed()` or `_withSecret()`.\n * `_withSeed()` has to generate the secret on the fly for \"large\" keys.\n * It's fast, but can be perceptible for \"not so large\" keys (< 1 KB).\n * `_withSecret()` has to generate the masks on the fly for \"small\" keys,\n * which requires more instructions than _withSeed() variants.\n * Therefore, _withSecretandSeed variant combines the best of both worlds.\n *\n * When @p secret has been generated by XXH3_generateSecret_fromSeed(),\n * this variant produces *exactly* the same results as `_withSeed()` variant,\n * hence offering only a pure speed benefit on \"large\" input,\n * by skipping the need to regenerate the secret for every large input.\n *\n * Another usage scenario is to hash the secret to a 64-bit hash value,\n * for example with XXH3_64bits(), which then becomes the seed,\n * and then employ both the seed and the secret in _withSecretandSeed().\n * On top of speed, an added benefit is that each bit in the secret\n * has a 50% chance to swap each bit in the output, via its impact to the seed.\n *\n * This is not guaranteed when using the secret directly in \"small data\" scenarios,\n * because only portions of the secret are employed for small data.\n */\nXXH_PUBLIC_API XXH_PUREF XXH64_hash_t\nXXH3_64bits_withSecretandSeed(XXH_NOESCAPE const void* data, size_t len,\n                              XXH_NOESCAPE const void* secret, size_t secretSize,\n                              XXH64_hash_t seed);\n\n/*!\n * @brief Calculates 128-bit seeded variant of XXH3 hash of @p data.\n *\n * @param data       The memory segment to be hashed, at least @p len bytes in size.\n * @param length     The length of @p data, in bytes.\n * @param secret     The secret used to alter hash result predictably.\n * @param secretSize The length of @p secret, in bytes (must be >= XXH3_SECRET_SIZE_MIN)\n * @param seed64     The 64-bit seed to alter the hash result predictably.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @see XXH3_64bits_withSecretandSeed(): contract is the same.\n */\nXXH_PUBLIC_API XXH_PUREF XXH128_hash_t\nXXH3_128bits_withSecretandSeed(XXH_NOESCAPE const void* input, size_t length,\n                               XXH_NOESCAPE const void* secret, size_t secretSize,\n                               XXH64_hash_t seed64);\n\n#ifndef XXH_NO_STREAM\n/*!\n * @brief Resets an @ref XXH3_state_t with secret data to begin a new hash.\n *\n * @param statePtr   A pointer to an @ref XXH3_state_t allocated with @ref XXH3_createState().\n * @param secret     The secret data.\n * @param secretSize The length of @p secret, in bytes.\n * @param seed64     The 64-bit seed to alter the hash result predictably.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @see XXH3_64bits_withSecretandSeed(). Contract is identical.\n */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_64bits_reset_withSecretandSeed(XXH_NOESCAPE XXH3_state_t* statePtr,\n                                    XXH_NOESCAPE const void* secret, size_t secretSize,\n                                    XXH64_hash_t seed64);\n\n/*!\n * @brief Resets an @ref XXH3_state_t with secret data to begin a new hash.\n *\n * @param statePtr   A pointer to an @ref XXH3_state_t allocated with @ref XXH3_createState().\n * @param secret     The secret data.\n * @param secretSize The length of @p secret, in bytes.\n * @param seed64     The 64-bit seed to alter the hash result predictably.\n *\n * @return @ref XXH_OK on success.\n * @return @ref XXH_ERROR on failure.\n *\n * @see XXH3_64bits_withSecretandSeed(). Contract is identical.\n *\n * Note: there was a bug in an earlier version of this function (<= v0.8.2)\n * that would make it generate an incorrect hash value\n * when @p seed == 0 and @p length < XXH3_MIDSIZE_MAX\n * and @p secret is different from XXH3_generateSecret_fromSeed().\n * As stated in the contract, the correct hash result must be\n * the same as XXH3_128bits_withSeed() when @p length <= XXH3_MIDSIZE_MAX.\n * Results generated by this older version are wrong, hence not comparable.\n */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_128bits_reset_withSecretandSeed(XXH_NOESCAPE XXH3_state_t* statePtr,\n                                     XXH_NOESCAPE const void* secret, size_t secretSize,\n                                     XXH64_hash_t seed64);\n\n#endif /* !XXH_NO_STREAM */\n\n#endif  /* !XXH_NO_XXH3 */\n#endif  /* XXH_NO_LONG_LONG */\n#if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)\n#  define XXH_IMPLEMENTATION\n#endif\n\n#endif  /* defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) */\n\n\n/* ======================================================================== */\n/* ======================================================================== */\n/* ======================================================================== */\n\n\n/*-**********************************************************************\n * xxHash implementation\n *-**********************************************************************\n * xxHash's implementation used to be hosted inside xxhash.c.\n *\n * However, inlining requires implementation to be visible to the compiler,\n * hence be included alongside the header.\n * Previously, implementation was hosted inside xxhash.c,\n * which was then #included when inlining was activated.\n * This construction created issues with a few build and install systems,\n * as it required xxhash.c to be stored in /include directory.\n *\n * xxHash implementation is now directly integrated within xxhash.h.\n * As a consequence, xxhash.c is no longer needed in /include.\n *\n * xxhash.c is still available and is still useful.\n * In a \"normal\" setup, when xxhash is not inlined,\n * xxhash.h only exposes the prototypes and public symbols,\n * while xxhash.c can be built into an object file xxhash.o\n * which can then be linked into the final binary.\n ************************************************************************/\n\n#if ( defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) \\\n   || defined(XXH_IMPLEMENTATION) ) && !defined(XXH_IMPLEM_13a8737387)\n#  define XXH_IMPLEM_13a8737387\n\n/* *************************************\n*  Tuning parameters\n***************************************/\n\n/*!\n * @defgroup tuning Tuning parameters\n * @{\n *\n * Various macros to control xxHash's behavior.\n */\n#ifdef XXH_DOXYGEN\n/*!\n * @brief Define this to disable 64-bit code.\n *\n * Useful if only using the @ref XXH32_family and you have a strict C90 compiler.\n */\n#  define XXH_NO_LONG_LONG\n#  undef XXH_NO_LONG_LONG /* don't actually */\n/*!\n * @brief Controls how unaligned memory is accessed.\n *\n * By default, access to unaligned memory is controlled by `memcpy()`, which is\n * safe and portable.\n *\n * Unfortunately, on some target/compiler combinations, the generated assembly\n * is sub-optimal.\n *\n * The below switch allow selection of a different access method\n * in the search for improved performance.\n *\n * @par Possible options:\n *\n *  - `XXH_FORCE_MEMORY_ACCESS=0` (default): `memcpy`\n *   @par\n *     Use `memcpy()`. Safe and portable. Note that most modern compilers will\n *     eliminate the function call and treat it as an unaligned access.\n *\n *  - `XXH_FORCE_MEMORY_ACCESS=1`: `__attribute__((aligned(1)))`\n *   @par\n *     Depends on compiler extensions and is therefore not portable.\n *     This method is safe _if_ your compiler supports it,\n *     and *generally* as fast or faster than `memcpy`.\n *\n *  - `XXH_FORCE_MEMORY_ACCESS=2`: Direct cast\n *  @par\n *     Casts directly and dereferences. This method doesn't depend on the\n *     compiler, but it violates the C standard as it directly dereferences an\n *     unaligned pointer. It can generate buggy code on targets which do not\n *     support unaligned memory accesses, but in some circumstances, it's the\n *     only known way to get the most performance.\n *\n *  - `XXH_FORCE_MEMORY_ACCESS=3`: Byteshift\n *  @par\n *     Also portable. This can generate the best code on old compilers which don't\n *     inline small `memcpy()` calls, and it might also be faster on big-endian\n *     systems which lack a native byteswap instruction. However, some compilers\n *     will emit literal byteshifts even if the target supports unaligned access.\n *\n *\n * @warning\n *   Methods 1 and 2 rely on implementation-defined behavior. Use these with\n *   care, as what works on one compiler/platform/optimization level may cause\n *   another to read garbage data or even crash.\n *\n * See https://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html for details.\n *\n * Prefer these methods in priority order (0 > 3 > 1 > 2)\n */\n#  define XXH_FORCE_MEMORY_ACCESS 0\n\n/*!\n * @def XXH_SIZE_OPT\n * @brief Controls how much xxHash optimizes for size.\n *\n * xxHash, when compiled, tends to result in a rather large binary size. This\n * is mostly due to heavy usage to forced inlining and constant folding of the\n * @ref XXH3_family to increase performance.\n *\n * However, some developers prefer size over speed. This option can\n * significantly reduce the size of the generated code. When using the `-Os`\n * or `-Oz` options on GCC or Clang, this is defined to 1 by default,\n * otherwise it is defined to 0.\n *\n * Most of these size optimizations can be controlled manually.\n *\n * This is a number from 0-2.\n *  - `XXH_SIZE_OPT` == 0: Default. xxHash makes no size optimizations. Speed\n *    comes first.\n *  - `XXH_SIZE_OPT` == 1: Default for `-Os` and `-Oz`. xxHash is more\n *    conservative and disables hacks that increase code size. It implies the\n *    options @ref XXH_NO_INLINE_HINTS == 1, @ref XXH_FORCE_ALIGN_CHECK == 0,\n *    and @ref XXH3_NEON_LANES == 8 if they are not already defined.\n *  - `XXH_SIZE_OPT` == 2: xxHash tries to make itself as small as possible.\n *    Performance may cry. For example, the single shot functions just use the\n *    streaming API.\n */\n#  define XXH_SIZE_OPT 0\n\n/*!\n * @def XXH_FORCE_ALIGN_CHECK\n * @brief If defined to non-zero, adds a special path for aligned inputs (XXH32()\n * and XXH64() only).\n *\n * This is an important performance trick for architectures without decent\n * unaligned memory access performance.\n *\n * It checks for input alignment, and when conditions are met, uses a \"fast\n * path\" employing direct 32-bit/64-bit reads, resulting in _dramatically\n * faster_ read speed.\n *\n * The check costs one initial branch per hash, which is generally negligible,\n * but not zero.\n *\n * Moreover, it's not useful to generate an additional code path if memory\n * access uses the same instruction for both aligned and unaligned\n * addresses (e.g. x86 and aarch64).\n *\n * In these cases, the alignment check can be removed by setting this macro to 0.\n * Then the code will always use unaligned memory access.\n * Align check is automatically disabled on x86, x64, ARM64, and some ARM chips\n * which are platforms known to offer good unaligned memory accesses performance.\n *\n * It is also disabled by default when @ref XXH_SIZE_OPT >= 1.\n *\n * This option does not affect XXH3 (only XXH32 and XXH64).\n */\n#  define XXH_FORCE_ALIGN_CHECK 0\n\n/*!\n * @def XXH_NO_INLINE_HINTS\n * @brief When non-zero, sets all functions to `static`.\n *\n * By default, xxHash tries to force the compiler to inline almost all internal\n * functions.\n *\n * This can usually improve performance due to reduced jumping and improved\n * constant folding, but significantly increases the size of the binary which\n * might not be favorable.\n *\n * Additionally, sometimes the forced inlining can be detrimental to performance,\n * depending on the architecture.\n *\n * XXH_NO_INLINE_HINTS marks all internal functions as static, giving the\n * compiler full control on whether to inline or not.\n *\n * When not optimizing (-O0), using `-fno-inline` with GCC or Clang, or if\n * @ref XXH_SIZE_OPT >= 1, this will automatically be defined.\n */\n#  define XXH_NO_INLINE_HINTS 0\n\n/*!\n * @def XXH3_INLINE_SECRET\n * @brief Determines whether to inline the XXH3 withSecret code.\n *\n * When the secret size is known, the compiler can improve the performance\n * of XXH3_64bits_withSecret() and XXH3_128bits_withSecret().\n *\n * However, if the secret size is not known, it doesn't have any benefit. This\n * happens when xxHash is compiled into a global symbol. Therefore, if\n * @ref XXH_INLINE_ALL is *not* defined, this will be defined to 0.\n *\n * Additionally, this defaults to 0 on GCC 12+, which has an issue with function pointers\n * that are *sometimes* force inline on -Og, and it is impossible to automatically\n * detect this optimization level.\n */\n#  define XXH3_INLINE_SECRET 0\n\n/*!\n * @def XXH32_ENDJMP\n * @brief Whether to use a jump for `XXH32_finalize`.\n *\n * For performance, `XXH32_finalize` uses multiple branches in the finalizer.\n * This is generally preferable for performance,\n * but depending on exact architecture, a jmp may be preferable.\n *\n * This setting is only possibly making a difference for very small inputs.\n */\n#  define XXH32_ENDJMP 0\n\n/*!\n * @internal\n * @brief Redefines old internal names.\n *\n * For compatibility with code that uses xxHash's internals before the names\n * were changed to improve namespacing. There is no other reason to use this.\n */\n#  define XXH_OLD_NAMES\n#  undef XXH_OLD_NAMES /* don't actually use, it is ugly. */\n\n/*!\n * @def XXH_NO_STREAM\n * @brief Disables the streaming API.\n *\n * When xxHash is not inlined and the streaming functions are not used, disabling\n * the streaming functions can improve code size significantly, especially with\n * the @ref XXH3_family which tends to make constant folded copies of itself.\n */\n#  define XXH_NO_STREAM\n#  undef XXH_NO_STREAM /* don't actually */\n#endif /* XXH_DOXYGEN */\n/*!\n * @}\n */\n\n#ifndef XXH_FORCE_MEMORY_ACCESS   /* can be defined externally, on command line for example */\n   /* prefer __packed__ structures (method 1) for GCC\n    * < ARMv7 with unaligned access (e.g. Raspbian armhf) still uses byte shifting, so we use memcpy\n    * which for some reason does unaligned loads. */\n#  if defined(__GNUC__) && !(defined(__ARM_ARCH) && __ARM_ARCH < 7 && defined(__ARM_FEATURE_UNALIGNED))\n#    define XXH_FORCE_MEMORY_ACCESS 1\n#  endif\n#endif\n\n#ifndef XXH_SIZE_OPT\n   /* default to 1 for -Os or -Oz */\n#  if (defined(__GNUC__) || defined(__clang__)) && defined(__OPTIMIZE_SIZE__)\n#    define XXH_SIZE_OPT 1\n#  else\n#    define XXH_SIZE_OPT 0\n#  endif\n#endif\n\n#ifndef XXH_FORCE_ALIGN_CHECK  /* can be defined externally */\n   /* don't check on sizeopt, x86, aarch64, or arm when unaligned access is available */\n#  if XXH_SIZE_OPT >= 1 || \\\n      defined(__i386)  || defined(__x86_64__) || defined(__aarch64__) || defined(__ARM_FEATURE_UNALIGNED) \\\n   || defined(_M_IX86) || defined(_M_X64)     || defined(_M_ARM64)    || defined(_M_ARM) /* visual */\n#    define XXH_FORCE_ALIGN_CHECK 0\n#  else\n#    define XXH_FORCE_ALIGN_CHECK 1\n#  endif\n#endif\n\n#ifndef XXH_NO_INLINE_HINTS\n#  if XXH_SIZE_OPT >= 1 || defined(__NO_INLINE__)  /* -O0, -fno-inline */\n#    define XXH_NO_INLINE_HINTS 1\n#  else\n#    define XXH_NO_INLINE_HINTS 0\n#  endif\n#endif\n\n#ifndef XXH3_INLINE_SECRET\n#  if (defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 12) \\\n     || !defined(XXH_INLINE_ALL)\n#    define XXH3_INLINE_SECRET 0\n#  else\n#    define XXH3_INLINE_SECRET 1\n#  endif\n#endif\n\n#ifndef XXH32_ENDJMP\n/* generally preferable for performance */\n#  define XXH32_ENDJMP 0\n#endif\n\n/*!\n * @defgroup impl Implementation\n * @{\n */\n\n\n/* *************************************\n*  Includes & Memory related functions\n***************************************/\n#if defined(XXH_NO_STREAM)\n/* nothing */\n#elif defined(XXH_NO_STDLIB)\n\n/* When requesting to disable any mention of stdlib,\n * the library loses the ability to invoked malloc / free.\n * In practice, it means that functions like `XXH*_createState()`\n * will always fail, and return NULL.\n * This flag is useful in situations where\n * xxhash.h is integrated into some kernel, embedded or limited environment\n * without access to dynamic allocation.\n */\n\nstatic XXH_CONSTF void* XXH_malloc(size_t s) { (void)s; return NULL; }\nstatic void XXH_free(void* p) { (void)p; }\n\n#else\n\n/*\n * Modify the local functions below should you wish to use\n * different memory routines for malloc() and free()\n */\n#include <stdlib.h>\n\n/*!\n * @internal\n * @brief Modify this function to use a different routine than malloc().\n */\nstatic XXH_MALLOCF void* XXH_malloc(size_t s) { return malloc(s); }\n\n/*!\n * @internal\n * @brief Modify this function to use a different routine than free().\n */\nstatic void XXH_free(void* p) { free(p); }\n\n#endif  /* XXH_NO_STDLIB */\n\n#include <string.h>\n\n/*!\n * @internal\n * @brief Modify this function to use a different routine than memcpy().\n */\nstatic void* XXH_memcpy(void* dest, const void* src, size_t size)\n{\n    return memcpy(dest,src,size);\n}\n\n#include <limits.h>   /* ULLONG_MAX */\n\n\n/* *************************************\n*  Compiler Specific Options\n***************************************/\n#ifdef _MSC_VER /* Visual Studio warning fix */\n#  pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */\n#endif\n\n#if XXH_NO_INLINE_HINTS  /* disable inlining hints */\n#  if defined(__GNUC__) || defined(__clang__)\n#    define XXH_FORCE_INLINE static __attribute__((__unused__))\n#  else\n#    define XXH_FORCE_INLINE static\n#  endif\n#  define XXH_NO_INLINE static\n/* enable inlining hints */\n#elif defined(__GNUC__) || defined(__clang__)\n#  define XXH_FORCE_INLINE static __inline__ __attribute__((__always_inline__, __unused__))\n#  define XXH_NO_INLINE static __attribute__((__noinline__))\n#elif defined(_MSC_VER)  /* Visual Studio */\n#  define XXH_FORCE_INLINE static __forceinline\n#  define XXH_NO_INLINE static __declspec(noinline)\n#elif defined (__cplusplus) \\\n  || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))   /* C99 */\n#  define XXH_FORCE_INLINE static inline\n#  define XXH_NO_INLINE static\n#else\n#  define XXH_FORCE_INLINE static\n#  define XXH_NO_INLINE static\n#endif\n\n#if defined(XXH_INLINE_ALL)\n#  define XXH_STATIC XXH_FORCE_INLINE\n#else\n#  define XXH_STATIC static\n#endif\n\n#if XXH3_INLINE_SECRET\n#  define XXH3_WITH_SECRET_INLINE XXH_FORCE_INLINE\n#else\n#  define XXH3_WITH_SECRET_INLINE XXH_NO_INLINE\n#endif\n\n#if ((defined(sun) || defined(__sun)) && __cplusplus) /* Solaris includes __STDC_VERSION__ with C++. Tested with GCC 5.5 */\n#  define XXH_RESTRICT   /* disable */\n#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L   /* >= C99 */\n#  define XXH_RESTRICT   restrict\n#elif (defined (__GNUC__) && ((__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))) \\\n   || (defined (__clang__)) \\\n   || (defined (_MSC_VER) && (_MSC_VER >= 1400)) \\\n   || (defined (__INTEL_COMPILER) && (__INTEL_COMPILER >= 1300))\n/*\n * There are a LOT more compilers that recognize __restrict but this\n * covers the major ones.\n */\n#  define XXH_RESTRICT   __restrict\n#else\n#  define XXH_RESTRICT   /* disable */\n#endif\n\n/* *************************************\n*  Debug\n***************************************/\n/*!\n * @ingroup tuning\n * @def XXH_DEBUGLEVEL\n * @brief Sets the debugging level.\n *\n * XXH_DEBUGLEVEL is expected to be defined externally, typically via the\n * compiler's command line options. The value must be a number.\n */\n#ifndef XXH_DEBUGLEVEL\n#  ifdef DEBUGLEVEL /* backwards compat */\n#    define XXH_DEBUGLEVEL DEBUGLEVEL\n#  else\n#    define XXH_DEBUGLEVEL 0\n#  endif\n#endif\n\n#if (XXH_DEBUGLEVEL>=1)\n#  include <assert.h>   /* note: can still be disabled with NDEBUG */\n#  define XXH_ASSERT(c)   assert(c)\n#else\n#  if defined(__INTEL_COMPILER)\n#    define XXH_ASSERT(c)   XXH_ASSUME((unsigned char) (c))\n#  else\n#    define XXH_ASSERT(c)   XXH_ASSUME(c)\n#  endif\n#endif\n\n/* note: use after variable declarations */\n#ifndef XXH_STATIC_ASSERT\n#  if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)    /* C11 */\n#    define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { _Static_assert((c),m); } while(0)\n#  elif defined(__cplusplus) && (__cplusplus >= 201103L)            /* C++11 */\n#    define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { static_assert((c),m); } while(0)\n#  else\n#    define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { struct xxh_sa { char x[(c) ? 1 : -1]; }; } while(0)\n#  endif\n#  define XXH_STATIC_ASSERT(c) XXH_STATIC_ASSERT_WITH_MESSAGE((c),#c)\n#endif\n\n/*!\n * @internal\n * @def XXH_COMPILER_GUARD(var)\n * @brief Used to prevent unwanted optimizations for @p var.\n *\n * It uses an empty GCC inline assembly statement with a register constraint\n * which forces @p var into a general purpose register (eg eax, ebx, ecx\n * on x86) and marks it as modified.\n *\n * This is used in a few places to avoid unwanted autovectorization (e.g.\n * XXH32_round()). All vectorization we want is explicit via intrinsics,\n * and _usually_ isn't wanted elsewhere.\n *\n * We also use it to prevent unwanted constant folding for AArch64 in\n * XXH3_initCustomSecret_scalar().\n */\n#if defined(__GNUC__) || defined(__clang__)\n#  define XXH_COMPILER_GUARD(var) __asm__(\"\" : \"+r\" (var))\n#else\n#  define XXH_COMPILER_GUARD(var) ((void)0)\n#endif\n\n/* Specifically for NEON vectors which use the \"w\" constraint, on\n * Clang. */\n#if defined(__clang__) && defined(__ARM_ARCH) && !defined(__wasm__)\n#  define XXH_COMPILER_GUARD_CLANG_NEON(var) __asm__(\"\" : \"+w\" (var))\n#else\n#  define XXH_COMPILER_GUARD_CLANG_NEON(var) ((void)0)\n#endif\n\n/* *************************************\n*  Basic Types\n***************************************/\n#if !defined (__VMS) \\\n && (defined (__cplusplus) \\\n || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )\n#   ifdef _AIX\n#     include <inttypes.h>\n#   else\n#     include <stdint.h>\n#   endif\n    typedef uint8_t xxh_u8;\n#else\n    typedef unsigned char xxh_u8;\n#endif\ntypedef XXH32_hash_t xxh_u32;\n\n#ifdef XXH_OLD_NAMES\n#  warning \"XXH_OLD_NAMES is planned to be removed starting v0.9. If the program depends on it, consider moving away from it by employing newer type names directly\"\n#  define BYTE xxh_u8\n#  define U8   xxh_u8\n#  define U32  xxh_u32\n#endif\n\n/* ***   Memory access   *** */\n\n/*!\n * @internal\n * @fn xxh_u32 XXH_read32(const void* ptr)\n * @brief Reads an unaligned 32-bit integer from @p ptr in native endianness.\n *\n * Affected by @ref XXH_FORCE_MEMORY_ACCESS.\n *\n * @param ptr The pointer to read from.\n * @return The 32-bit native endian integer from the bytes at @p ptr.\n */\n\n/*!\n * @internal\n * @fn xxh_u32 XXH_readLE32(const void* ptr)\n * @brief Reads an unaligned 32-bit little endian integer from @p ptr.\n *\n * Affected by @ref XXH_FORCE_MEMORY_ACCESS.\n *\n * @param ptr The pointer to read from.\n * @return The 32-bit little endian integer from the bytes at @p ptr.\n */\n\n/*!\n * @internal\n * @fn xxh_u32 XXH_readBE32(const void* ptr)\n * @brief Reads an unaligned 32-bit big endian integer from @p ptr.\n *\n * Affected by @ref XXH_FORCE_MEMORY_ACCESS.\n *\n * @param ptr The pointer to read from.\n * @return The 32-bit big endian integer from the bytes at @p ptr.\n */\n\n/*!\n * @internal\n * @fn xxh_u32 XXH_readLE32_align(const void* ptr, XXH_alignment align)\n * @brief Like @ref XXH_readLE32(), but has an option for aligned reads.\n *\n * Affected by @ref XXH_FORCE_MEMORY_ACCESS.\n * Note that when @ref XXH_FORCE_ALIGN_CHECK == 0, the @p align parameter is\n * always @ref XXH_alignment::XXH_unaligned.\n *\n * @param ptr The pointer to read from.\n * @param align Whether @p ptr is aligned.\n * @pre\n *   If @p align == @ref XXH_alignment::XXH_aligned, @p ptr must be 4 byte\n *   aligned.\n * @return The 32-bit little endian integer from the bytes at @p ptr.\n */\n\n#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))\n/*\n * Manual byteshift. Best for old compilers which don't inline memcpy.\n * We actually directly use XXH_readLE32 and XXH_readBE32.\n */\n#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))\n\n/*\n * Force direct memory access. Only works on CPU which support unaligned memory\n * access in hardware.\n */\nstatic xxh_u32 XXH_read32(const void* memPtr) { return *(const xxh_u32*) memPtr; }\n\n#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))\n\n/*\n * __attribute__((aligned(1))) is supported by gcc and clang. Originally the\n * documentation claimed that it only increased the alignment, but actually it\n * can decrease it on gcc, clang, and icc:\n * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69502,\n * https://gcc.godbolt.org/z/xYez1j67Y.\n */\n#ifdef XXH_OLD_NAMES\ntypedef union { xxh_u32 u32; } __attribute__((__packed__)) unalign;\n#endif\nstatic xxh_u32 XXH_read32(const void* ptr)\n{\n    typedef __attribute__((__aligned__(1))) xxh_u32 xxh_unalign32;\n    return *((const xxh_unalign32*)ptr);\n}\n\n#else\n\n/*\n * Portable and safe solution. Generally efficient.\n * see: https://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html\n */\nstatic xxh_u32 XXH_read32(const void* memPtr)\n{\n    xxh_u32 val;\n    XXH_memcpy(&val, memPtr, sizeof(val));\n    return val;\n}\n\n#endif   /* XXH_FORCE_DIRECT_MEMORY_ACCESS */\n\n\n/* ***   Endianness   *** */\n\n/*!\n * @ingroup tuning\n * @def XXH_CPU_LITTLE_ENDIAN\n * @brief Whether the target is little endian.\n *\n * Defined to 1 if the target is little endian, or 0 if it is big endian.\n * It can be defined externally, for example on the compiler command line.\n *\n * If it is not defined,\n * a runtime check (which is usually constant folded) is used instead.\n *\n * @note\n *   This is not necessarily defined to an integer constant.\n *\n * @see XXH_isLittleEndian() for the runtime check.\n */\n#ifndef XXH_CPU_LITTLE_ENDIAN\n/*\n * Try to detect endianness automatically, to avoid the nonstandard behavior\n * in `XXH_isLittleEndian()`\n */\n#  if defined(_WIN32) /* Windows is always little endian */ \\\n     || defined(__LITTLE_ENDIAN__) \\\n     || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)\n#    define XXH_CPU_LITTLE_ENDIAN 1\n#  elif defined(__BIG_ENDIAN__) \\\n     || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)\n#    define XXH_CPU_LITTLE_ENDIAN 0\n#  else\n/*!\n * @internal\n * @brief Runtime check for @ref XXH_CPU_LITTLE_ENDIAN.\n *\n * Most compilers will constant fold this.\n */\nstatic int XXH_isLittleEndian(void)\n{\n    /*\n     * Portable and well-defined behavior.\n     * Don't use static: it is detrimental to performance.\n     */\n    const union { xxh_u32 u; xxh_u8 c[4]; } one = { 1 };\n    return one.c[0];\n}\n#   define XXH_CPU_LITTLE_ENDIAN   XXH_isLittleEndian()\n#  endif\n#endif\n\n\n\n\n/* ****************************************\n*  Compiler-specific Functions and Macros\n******************************************/\n#define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)\n\n#ifdef __has_builtin\n#  define XXH_HAS_BUILTIN(x) __has_builtin(x)\n#else\n#  define XXH_HAS_BUILTIN(x) 0\n#endif\n\n\n\n/*\n * C23 and future versions have standard \"unreachable()\".\n * Once it has been implemented reliably we can add it as an\n * additional case:\n *\n * ```\n * #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= XXH_C23_VN)\n * #  include <stddef.h>\n * #  ifdef unreachable\n * #    define XXH_UNREACHABLE() unreachable()\n * #  endif\n * #endif\n * ```\n *\n * Note C++23 also has std::unreachable() which can be detected\n * as follows:\n * ```\n * #if defined(__cpp_lib_unreachable) && (__cpp_lib_unreachable >= 202202L)\n * #  include <utility>\n * #  define XXH_UNREACHABLE() std::unreachable()\n * #endif\n * ```\n * NB: `__cpp_lib_unreachable` is defined in the `<version>` header.\n * We don't use that as including `<utility>` in `extern \"C\"` blocks\n * doesn't work on GCC12\n */\n\n#if XXH_HAS_BUILTIN(__builtin_unreachable)\n#  define XXH_UNREACHABLE() __builtin_unreachable()\n\n#elif defined(_MSC_VER)\n#  define XXH_UNREACHABLE() __assume(0)\n\n#else\n#  define XXH_UNREACHABLE()\n#endif\n\n#if XXH_HAS_BUILTIN(__builtin_assume)\n#  define XXH_ASSUME(c) __builtin_assume(c)\n#else\n#  define XXH_ASSUME(c) if (!(c)) { XXH_UNREACHABLE(); }\n#endif\n\n/*!\n * @internal\n * @def XXH_rotl32(x,r)\n * @brief 32-bit rotate left.\n *\n * @param x The 32-bit integer to be rotated.\n * @param r The number of bits to rotate.\n * @pre\n *   @p r > 0 && @p r < 32\n * @note\n *   @p x and @p r may be evaluated multiple times.\n * @return The rotated result.\n */\n#if !defined(NO_CLANG_BUILTIN) && XXH_HAS_BUILTIN(__builtin_rotateleft32) \\\n                               && XXH_HAS_BUILTIN(__builtin_rotateleft64)\n#  define XXH_rotl32 __builtin_rotateleft32\n#  define XXH_rotl64 __builtin_rotateleft64\n#elif XXH_HAS_BUILTIN(__builtin_stdc_rotate_left)\n#  define XXH_rotl32 __builtin_stdc_rotate_left\n#  define XXH_rotl64 __builtin_stdc_rotate_left\n/* Note: although _rotl exists for minGW (GCC under windows), performance seems poor */\n#elif defined(_MSC_VER)\n#  define XXH_rotl32(x,r) _rotl(x,r)\n#  define XXH_rotl64(x,r) _rotl64(x,r)\n#else\n#  define XXH_rotl32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))\n#  define XXH_rotl64(x,r) (((x) << (r)) | ((x) >> (64 - (r))))\n#endif\n\n/*!\n * @internal\n * @fn xxh_u32 XXH_swap32(xxh_u32 x)\n * @brief A 32-bit byteswap.\n *\n * @param x The 32-bit integer to byteswap.\n * @return @p x, byteswapped.\n */\n#if defined(_MSC_VER)     /* Visual Studio */\n#  define XXH_swap32 _byteswap_ulong\n#elif XXH_GCC_VERSION >= 403\n#  define XXH_swap32 __builtin_bswap32\n#else\nstatic xxh_u32 XXH_swap32 (xxh_u32 x)\n{\n    return  ((x << 24) & 0xff000000 ) |\n            ((x <<  8) & 0x00ff0000 ) |\n            ((x >>  8) & 0x0000ff00 ) |\n            ((x >> 24) & 0x000000ff );\n}\n#endif\n\n\n/* ***************************\n*  Memory reads\n*****************************/\n\n/*!\n * @internal\n * @brief Enum to indicate whether a pointer is aligned.\n */\ntypedef enum {\n    XXH_aligned,  /*!< Aligned */\n    XXH_unaligned /*!< Possibly unaligned */\n} XXH_alignment;\n\n/*\n * XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load.\n *\n * This is ideal for older compilers which don't inline memcpy.\n */\n#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))\n\nXXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* memPtr)\n{\n    const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;\n    return bytePtr[0]\n         | ((xxh_u32)bytePtr[1] << 8)\n         | ((xxh_u32)bytePtr[2] << 16)\n         | ((xxh_u32)bytePtr[3] << 24);\n}\n\nXXH_FORCE_INLINE xxh_u32 XXH_readBE32(const void* memPtr)\n{\n    const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;\n    return bytePtr[3]\n         | ((xxh_u32)bytePtr[2] << 8)\n         | ((xxh_u32)bytePtr[1] << 16)\n         | ((xxh_u32)bytePtr[0] << 24);\n}\n\n#else\nXXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* ptr)\n{\n    return XXH_CPU_LITTLE_ENDIAN ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr));\n}\n\nstatic xxh_u32 XXH_readBE32(const void* ptr)\n{\n    return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr);\n}\n#endif\n\nXXH_FORCE_INLINE xxh_u32\nXXH_readLE32_align(const void* ptr, XXH_alignment align)\n{\n    if (align==XXH_unaligned) {\n        return XXH_readLE32(ptr);\n    } else {\n        return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u32*)ptr : XXH_swap32(*(const xxh_u32*)ptr);\n    }\n}\n\n\n/* *************************************\n*  Misc\n***************************************/\n/*! @ingroup public */\nXXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; }\n\n\n/* *******************************************************************\n*  32-bit hash functions\n*********************************************************************/\n/*!\n * @}\n * @defgroup XXH32_impl XXH32 implementation\n * @ingroup impl\n *\n * Details on the XXH32 implementation.\n * @{\n */\n /* #define instead of static const, to be used as initializers */\n#define XXH_PRIME32_1  0x9E3779B1U  /*!< 0b10011110001101110111100110110001 */\n#define XXH_PRIME32_2  0x85EBCA77U  /*!< 0b10000101111010111100101001110111 */\n#define XXH_PRIME32_3  0xC2B2AE3DU  /*!< 0b11000010101100101010111000111101 */\n#define XXH_PRIME32_4  0x27D4EB2FU  /*!< 0b00100111110101001110101100101111 */\n#define XXH_PRIME32_5  0x165667B1U  /*!< 0b00010110010101100110011110110001 */\n\n#ifdef XXH_OLD_NAMES\n#  define PRIME32_1 XXH_PRIME32_1\n#  define PRIME32_2 XXH_PRIME32_2\n#  define PRIME32_3 XXH_PRIME32_3\n#  define PRIME32_4 XXH_PRIME32_4\n#  define PRIME32_5 XXH_PRIME32_5\n#endif\n\n/*!\n * @internal\n * @brief Normal stripe processing routine.\n *\n * This shuffles the bits so that any bit from @p input impacts several bits in\n * @p acc.\n *\n * @param acc The accumulator lane.\n * @param input The stripe of input to mix.\n * @return The mixed accumulator lane.\n */\nstatic xxh_u32 XXH32_round(xxh_u32 acc, xxh_u32 input)\n{\n    acc += input * XXH_PRIME32_2;\n    acc  = XXH_rotl32(acc, 13);\n    acc *= XXH_PRIME32_1;\n#if (defined(__SSE4_1__) || defined(__aarch64__) || defined(__wasm_simd128__)) && !defined(XXH_ENABLE_AUTOVECTORIZE)\n    /*\n     * UGLY HACK:\n     * A compiler fence is used to prevent GCC and Clang from\n     * autovectorizing the XXH32 loop (pragmas and attributes don't work for some\n     * reason) without globally disabling SSE4.1.\n     *\n     * The reason we want to avoid vectorization is because despite working on\n     * 4 integers at a time, there are multiple factors slowing XXH32 down on\n     * SSE4:\n     * - There's a ridiculous amount of lag from pmulld (10 cycles of latency on\n     *   newer chips!) making it slightly slower to multiply four integers at\n     *   once compared to four integers independently. Even when pmulld was\n     *   fastest, Sandy/Ivy Bridge, it is still not worth it to go into SSE\n     *   just to multiply unless doing a long operation.\n     *\n     * - Four instructions are required to rotate,\n     *      movqda tmp,  v // not required with VEX encoding\n     *      pslld  tmp, 13 // tmp <<= 13\n     *      psrld  v,   19 // x >>= 19\n     *      por    v,  tmp // x |= tmp\n     *   compared to one for scalar:\n     *      roll   v, 13    // reliably fast across the board\n     *      shldl  v, v, 13 // Sandy Bridge and later prefer this for some reason\n     *\n     * - Instruction level parallelism is actually more beneficial here because\n     *   the SIMD actually serializes this operation: While v1 is rotating, v2\n     *   can load data, while v3 can multiply. SSE forces them to operate\n     *   together.\n     *\n     * This is also enabled on AArch64, as Clang is *very aggressive* in vectorizing\n     * the loop. NEON is only faster on the A53, and with the newer cores, it is less\n     * than half the speed.\n     *\n     * Additionally, this is used on WASM SIMD128 because it JITs to the same\n     * SIMD instructions and has the same issue.\n     */\n    XXH_COMPILER_GUARD(acc);\n#endif\n    return acc;\n}\n\n/*!\n * @internal\n * @brief Mixes all bits to finalize the hash.\n *\n * The final mix ensures that all input bits have a chance to impact any bit in\n * the output digest, resulting in an unbiased distribution.\n *\n * @param hash The hash to avalanche.\n * @return The avalanched hash.\n */\nstatic xxh_u32 XXH32_avalanche(xxh_u32 hash)\n{\n    hash ^= hash >> 15;\n    hash *= XXH_PRIME32_2;\n    hash ^= hash >> 13;\n    hash *= XXH_PRIME32_3;\n    hash ^= hash >> 16;\n    return hash;\n}\n\n#define XXH_get32bits(p) XXH_readLE32_align(p, align)\n\n/*!\n * @internal\n * @brief Sets up the initial accumulator state for XXH32().\n */\nXXH_FORCE_INLINE void\nXXH32_initAccs(xxh_u32 *acc, xxh_u32 seed)\n{\n    XXH_ASSERT(acc != NULL);\n    acc[0] = seed + XXH_PRIME32_1 + XXH_PRIME32_2;\n    acc[1] = seed + XXH_PRIME32_2;\n    acc[2] = seed + 0;\n    acc[3] = seed - XXH_PRIME32_1;\n}\n\n/*!\n * @internal\n * @brief Consumes a block of data for XXH32().\n *\n * @return the end input pointer.\n */\nXXH_FORCE_INLINE const xxh_u8 *\nXXH32_consumeLong(\n    xxh_u32 *XXH_RESTRICT acc,\n    xxh_u8 const *XXH_RESTRICT input,\n    size_t len,\n    XXH_alignment align\n)\n{\n    const xxh_u8* const bEnd = input + len;\n    const xxh_u8* const limit = bEnd - 15;\n    XXH_ASSERT(acc != NULL);\n    XXH_ASSERT(input != NULL);\n    XXH_ASSERT(len >= 16);\n    do {\n        acc[0] = XXH32_round(acc[0], XXH_get32bits(input)); input += 4;\n        acc[1] = XXH32_round(acc[1], XXH_get32bits(input)); input += 4;\n        acc[2] = XXH32_round(acc[2], XXH_get32bits(input)); input += 4;\n        acc[3] = XXH32_round(acc[3], XXH_get32bits(input)); input += 4;\n    } while (input < limit);\n\n    return input;\n}\n\n/*!\n * @internal\n * @brief Merges the accumulator lanes together for XXH32()\n */\nXXH_FORCE_INLINE XXH_PUREF xxh_u32\nXXH32_mergeAccs(const xxh_u32 *acc)\n{\n    XXH_ASSERT(acc != NULL);\n    return XXH_rotl32(acc[0], 1)  + XXH_rotl32(acc[1], 7)\n         + XXH_rotl32(acc[2], 12) + XXH_rotl32(acc[3], 18);\n}\n\n/*!\n * @internal\n * @brief Processes the last 0-15 bytes of @p ptr.\n *\n * There may be up to 15 bytes remaining to consume from the input.\n * This final stage will digest them to ensure that all input bytes are present\n * in the final mix.\n *\n * @param hash The hash to finalize.\n * @param ptr The pointer to the remaining input.\n * @param len The remaining length, modulo 16.\n * @param align Whether @p ptr is aligned.\n * @return The finalized hash.\n * @see XXH64_finalize().\n */\nstatic XXH_PUREF xxh_u32\nXXH32_finalize(xxh_u32 hash, const xxh_u8* ptr, size_t len, XXH_alignment align)\n{\n#define XXH_PROCESS1 do {                             \\\n    hash += (*ptr++) * XXH_PRIME32_5;                 \\\n    hash = XXH_rotl32(hash, 11) * XXH_PRIME32_1;      \\\n} while (0)\n\n#define XXH_PROCESS4 do {                             \\\n    hash += XXH_get32bits(ptr) * XXH_PRIME32_3;       \\\n    ptr += 4;                                         \\\n    hash  = XXH_rotl32(hash, 17) * XXH_PRIME32_4;     \\\n} while (0)\n\n    if (ptr==NULL) XXH_ASSERT(len == 0);\n\n    /* Compact rerolled version; generally faster */\n    if (!XXH32_ENDJMP) {\n        len &= 15;\n        while (len >= 4) {\n            XXH_PROCESS4;\n            len -= 4;\n        }\n        while (len > 0) {\n            XXH_PROCESS1;\n            --len;\n        }\n        return XXH32_avalanche(hash);\n    } else {\n         switch(len&15) /* or switch(bEnd - p) */ {\n           case 12:      XXH_PROCESS4;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 8:       XXH_PROCESS4;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 4:       XXH_PROCESS4;\n                         return XXH32_avalanche(hash);\n\n           case 13:      XXH_PROCESS4;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 9:       XXH_PROCESS4;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 5:       XXH_PROCESS4;\n                         XXH_PROCESS1;\n                         return XXH32_avalanche(hash);\n\n           case 14:      XXH_PROCESS4;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 10:      XXH_PROCESS4;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 6:       XXH_PROCESS4;\n                         XXH_PROCESS1;\n                         XXH_PROCESS1;\n                         return XXH32_avalanche(hash);\n\n           case 15:      XXH_PROCESS4;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 11:      XXH_PROCESS4;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 7:       XXH_PROCESS4;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 3:       XXH_PROCESS1;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 2:       XXH_PROCESS1;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 1:       XXH_PROCESS1;\n                         XXH_FALLTHROUGH;  /* fallthrough */\n           case 0:       return XXH32_avalanche(hash);\n        }\n        XXH_ASSERT(0);\n        return hash;   /* reaching this point is deemed impossible */\n    }\n}\n\n#ifdef XXH_OLD_NAMES\n#  define PROCESS1 XXH_PROCESS1\n#  define PROCESS4 XXH_PROCESS4\n#else\n#  undef XXH_PROCESS1\n#  undef XXH_PROCESS4\n#endif\n\n/*!\n * @internal\n * @brief The implementation for @ref XXH32().\n *\n * @param input , len , seed Directly passed from @ref XXH32().\n * @param align Whether @p input is aligned.\n * @return The calculated hash.\n */\nXXH_FORCE_INLINE XXH_PUREF xxh_u32\nXXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment align)\n{\n    xxh_u32 h32;\n\n    if (input==NULL) XXH_ASSERT(len == 0);\n\n    if (len>=16) {\n        xxh_u32 acc[4];\n        XXH32_initAccs(acc, seed);\n\n        input = XXH32_consumeLong(acc, input, len, align);\n\n        h32 = XXH32_mergeAccs(acc);\n    } else {\n        h32  = seed + XXH_PRIME32_5;\n    }\n\n    h32 += (xxh_u32)len;\n\n    return XXH32_finalize(h32, input, len&15, align);\n}\n\n/*! @ingroup XXH32_family */\nXXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t len, XXH32_hash_t seed)\n{\n#if !defined(XXH_NO_STREAM) && XXH_SIZE_OPT >= 2\n    /* Simple version, good for code maintenance, but unfortunately slow for small inputs */\n    XXH32_state_t state;\n    XXH32_reset(&state, seed);\n    XXH32_update(&state, (const xxh_u8*)input, len);\n    return XXH32_digest(&state);\n#else\n    if (XXH_FORCE_ALIGN_CHECK) {\n        if ((((size_t)input) & 3) == 0) {   /* Input is 4-bytes aligned, leverage the speed benefit */\n            return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_aligned);\n    }   }\n\n    return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned);\n#endif\n}\n\n\n\n/*******   Hash streaming   *******/\n#ifndef XXH_NO_STREAM\n/*! @ingroup XXH32_family */\nXXH_PUBLIC_API XXH32_state_t* XXH32_createState(void)\n{\n    return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t));\n}\n/*! @ingroup XXH32_family */\nXXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr)\n{\n    XXH_free(statePtr);\n    return XXH_OK;\n}\n\n/*! @ingroup XXH32_family */\nXXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32_state_t* srcState)\n{\n    XXH_memcpy(dstState, srcState, sizeof(*dstState));\n}\n\n/*! @ingroup XXH32_family */\nXXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, XXH32_hash_t seed)\n{\n    XXH_ASSERT(statePtr != NULL);\n    memset(statePtr, 0, sizeof(*statePtr));\n    XXH32_initAccs(statePtr->acc, seed);\n    return XXH_OK;\n}\n\n\n/*! @ingroup XXH32_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH32_update(XXH32_state_t* state, const void* input, size_t len)\n{\n    if (input==NULL) {\n        XXH_ASSERT(len == 0);\n        return XXH_OK;\n    }\n\n    state->total_len_32 += (XXH32_hash_t)len;\n    state->large_len |= (XXH32_hash_t)((len>=16) | (state->total_len_32>=16));\n\n    XXH_ASSERT(state->bufferedSize < sizeof(state->buffer));\n    if (len < sizeof(state->buffer) - state->bufferedSize)  {   /* fill in tmp buffer */\n        XXH_memcpy(state->buffer + state->bufferedSize, input, len);\n        state->bufferedSize += (XXH32_hash_t)len;\n        return XXH_OK;\n    }\n\n    {   const xxh_u8* xinput = (const xxh_u8*)input;\n        const xxh_u8* const bEnd = xinput + len;\n\n        if (state->bufferedSize) {   /* non-empty buffer: complete first */\n            XXH_memcpy(state->buffer + state->bufferedSize, xinput, sizeof(state->buffer) - state->bufferedSize);\n            xinput += sizeof(state->buffer) - state->bufferedSize;\n            /* then process one round */\n            (void)XXH32_consumeLong(state->acc, state->buffer, sizeof(state->buffer), XXH_aligned);\n            state->bufferedSize = 0;\n        }\n\n        XXH_ASSERT(xinput <= bEnd);\n        if ((size_t)(bEnd - xinput) >= sizeof(state->buffer)) {\n            /* Process the remaining data */\n            xinput = XXH32_consumeLong(state->acc, xinput, (size_t)(bEnd - xinput), XXH_unaligned);\n        }\n\n        if (xinput < bEnd) {\n            /* Copy the leftover to the tmp buffer */\n            XXH_memcpy(state->buffer, xinput, (size_t)(bEnd-xinput));\n            state->bufferedSize = (unsigned)(bEnd-xinput);\n        }\n    }\n\n    return XXH_OK;\n}\n\n\n/*! @ingroup XXH32_family */\nXXH_PUBLIC_API XXH32_hash_t XXH32_digest(const XXH32_state_t* state)\n{\n    xxh_u32 h32;\n\n    if (state->large_len) {\n        h32 = XXH32_mergeAccs(state->acc);\n    } else {\n        h32 = state->acc[2] /* == seed */ + XXH_PRIME32_5;\n    }\n\n    h32 += state->total_len_32;\n\n    return XXH32_finalize(h32, state->buffer, state->bufferedSize, XXH_aligned);\n}\n#endif /* !XXH_NO_STREAM */\n\n/*******   Canonical representation   *******/\n\n/*! @ingroup XXH32_family */\nXXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash)\n{\n    XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t));\n    if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash);\n    XXH_memcpy(dst, &hash, sizeof(*dst));\n}\n/*! @ingroup XXH32_family */\nXXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src)\n{\n    return XXH_readBE32(src);\n}\n\n\n#ifndef XXH_NO_LONG_LONG\n\n/* *******************************************************************\n*  64-bit hash functions\n*********************************************************************/\n/*!\n * @}\n * @ingroup impl\n * @{\n */\n/*******   Memory access   *******/\n\ntypedef XXH64_hash_t xxh_u64;\n\n#ifdef XXH_OLD_NAMES\n#  define U64 xxh_u64\n#endif\n\n#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))\n/*\n * Manual byteshift. Best for old compilers which don't inline memcpy.\n * We actually directly use XXH_readLE64 and XXH_readBE64.\n */\n#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))\n\n/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */\nstatic xxh_u64 XXH_read64(const void* memPtr)\n{\n    return *(const xxh_u64*) memPtr;\n}\n\n#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))\n\n/*\n * __attribute__((aligned(1))) is supported by gcc and clang. Originally the\n * documentation claimed that it only increased the alignment, but actually it\n * can decrease it on gcc, clang, and icc:\n * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69502,\n * https://gcc.godbolt.org/z/xYez1j67Y.\n */\n#ifdef XXH_OLD_NAMES\ntypedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((__packed__)) unalign64;\n#endif\nstatic xxh_u64 XXH_read64(const void* ptr)\n{\n    typedef __attribute__((__aligned__(1))) xxh_u64 xxh_unalign64;\n    return *((const xxh_unalign64*)ptr);\n}\n\n#else\n\n/*\n * Portable and safe solution. Generally efficient.\n * see: https://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html\n */\nstatic xxh_u64 XXH_read64(const void* memPtr)\n{\n    xxh_u64 val;\n    XXH_memcpy(&val, memPtr, sizeof(val));\n    return val;\n}\n\n#endif   /* XXH_FORCE_DIRECT_MEMORY_ACCESS */\n\n#if defined(_MSC_VER)     /* Visual Studio */\n#  define XXH_swap64 _byteswap_uint64\n#elif XXH_GCC_VERSION >= 403\n#  define XXH_swap64 __builtin_bswap64\n#else\nstatic xxh_u64 XXH_swap64(xxh_u64 x)\n{\n    return  ((x << 56) & 0xff00000000000000ULL) |\n            ((x << 40) & 0x00ff000000000000ULL) |\n            ((x << 24) & 0x0000ff0000000000ULL) |\n            ((x << 8)  & 0x000000ff00000000ULL) |\n            ((x >> 8)  & 0x00000000ff000000ULL) |\n            ((x >> 24) & 0x0000000000ff0000ULL) |\n            ((x >> 40) & 0x000000000000ff00ULL) |\n            ((x >> 56) & 0x00000000000000ffULL);\n}\n#endif\n\n\n/* XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load. */\n#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))\n\nXXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* memPtr)\n{\n    const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;\n    return bytePtr[0]\n         | ((xxh_u64)bytePtr[1] << 8)\n         | ((xxh_u64)bytePtr[2] << 16)\n         | ((xxh_u64)bytePtr[3] << 24)\n         | ((xxh_u64)bytePtr[4] << 32)\n         | ((xxh_u64)bytePtr[5] << 40)\n         | ((xxh_u64)bytePtr[6] << 48)\n         | ((xxh_u64)bytePtr[7] << 56);\n}\n\nXXH_FORCE_INLINE xxh_u64 XXH_readBE64(const void* memPtr)\n{\n    const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;\n    return bytePtr[7]\n         | ((xxh_u64)bytePtr[6] << 8)\n         | ((xxh_u64)bytePtr[5] << 16)\n         | ((xxh_u64)bytePtr[4] << 24)\n         | ((xxh_u64)bytePtr[3] << 32)\n         | ((xxh_u64)bytePtr[2] << 40)\n         | ((xxh_u64)bytePtr[1] << 48)\n         | ((xxh_u64)bytePtr[0] << 56);\n}\n\n#else\nXXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* ptr)\n{\n    return XXH_CPU_LITTLE_ENDIAN ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr));\n}\n\nstatic xxh_u64 XXH_readBE64(const void* ptr)\n{\n    return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr);\n}\n#endif\n\nXXH_FORCE_INLINE xxh_u64\nXXH_readLE64_align(const void* ptr, XXH_alignment align)\n{\n    if (align==XXH_unaligned)\n        return XXH_readLE64(ptr);\n    else\n        return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u64*)ptr : XXH_swap64(*(const xxh_u64*)ptr);\n}\n\n\n/*******   xxh64   *******/\n/*!\n * @}\n * @defgroup XXH64_impl XXH64 implementation\n * @ingroup impl\n *\n * Details on the XXH64 implementation.\n * @{\n */\n/* #define rather that static const, to be used as initializers */\n#define XXH_PRIME64_1  0x9E3779B185EBCA87ULL  /*!< 0b1001111000110111011110011011000110000101111010111100101010000111 */\n#define XXH_PRIME64_2  0xC2B2AE3D27D4EB4FULL  /*!< 0b1100001010110010101011100011110100100111110101001110101101001111 */\n#define XXH_PRIME64_3  0x165667B19E3779F9ULL  /*!< 0b0001011001010110011001111011000110011110001101110111100111111001 */\n#define XXH_PRIME64_4  0x85EBCA77C2B2AE63ULL  /*!< 0b1000010111101011110010100111011111000010101100101010111001100011 */\n#define XXH_PRIME64_5  0x27D4EB2F165667C5ULL  /*!< 0b0010011111010100111010110010111100010110010101100110011111000101 */\n\n#ifdef XXH_OLD_NAMES\n#  define PRIME64_1 XXH_PRIME64_1\n#  define PRIME64_2 XXH_PRIME64_2\n#  define PRIME64_3 XXH_PRIME64_3\n#  define PRIME64_4 XXH_PRIME64_4\n#  define PRIME64_5 XXH_PRIME64_5\n#endif\n\n/*! @copydoc XXH32_round */\nstatic xxh_u64 XXH64_round(xxh_u64 acc, xxh_u64 input)\n{\n    acc += input * XXH_PRIME64_2;\n    acc  = XXH_rotl64(acc, 31);\n    acc *= XXH_PRIME64_1;\n#if (defined(__AVX512F__)) && !defined(XXH_ENABLE_AUTOVECTORIZE)\n    /*\n     * DISABLE AUTOVECTORIZATION:\n     * A compiler fence is used to prevent GCC and Clang from\n     * autovectorizing the XXH64 loop (pragmas and attributes don't work for some\n     * reason) without globally disabling AVX512.\n     *\n     * Autovectorization of XXH64 tends to be detrimental,\n     * though the exact outcome may change depending on exact cpu and compiler version.\n     * For information, it has been reported as detrimental for Skylake-X,\n     * but possibly beneficial for Zen4.\n     *\n     * The default is to disable auto-vectorization,\n     * but you can select to enable it instead using `XXH_ENABLE_AUTOVECTORIZE` build variable.\n     */\n    XXH_COMPILER_GUARD(acc);\n#endif\n    return acc;\n}\n\nstatic xxh_u64 XXH64_mergeRound(xxh_u64 acc, xxh_u64 val)\n{\n    val  = XXH64_round(0, val);\n    acc ^= val;\n    acc  = acc * XXH_PRIME64_1 + XXH_PRIME64_4;\n    return acc;\n}\n\n/*! @copydoc XXH32_avalanche */\nstatic xxh_u64 XXH64_avalanche(xxh_u64 hash)\n{\n    hash ^= hash >> 33;\n    hash *= XXH_PRIME64_2;\n    hash ^= hash >> 29;\n    hash *= XXH_PRIME64_3;\n    hash ^= hash >> 32;\n    return hash;\n}\n\n\n#define XXH_get64bits(p) XXH_readLE64_align(p, align)\n\n/*!\n * @internal\n * @brief Sets up the initial accumulator state for XXH64().\n */\nXXH_FORCE_INLINE void\nXXH64_initAccs(xxh_u64 *acc, xxh_u64 seed)\n{\n    XXH_ASSERT(acc != NULL);\n    acc[0] = seed + XXH_PRIME64_1 + XXH_PRIME64_2;\n    acc[1] = seed + XXH_PRIME64_2;\n    acc[2] = seed + 0;\n    acc[3] = seed - XXH_PRIME64_1;\n}\n\n/*!\n * @internal\n * @brief Consumes a block of data for XXH64().\n *\n * @return the end input pointer.\n */\nXXH_FORCE_INLINE const xxh_u8 *\nXXH64_consumeLong(\n    xxh_u64 *XXH_RESTRICT acc,\n    xxh_u8 const *XXH_RESTRICT input,\n    size_t len,\n    XXH_alignment align\n)\n{\n    const xxh_u8* const bEnd = input + len;\n    const xxh_u8* const limit = bEnd - 31;\n    XXH_ASSERT(acc != NULL);\n    XXH_ASSERT(input != NULL);\n    XXH_ASSERT(len >= 32);\n    do {\n        /* reroll on 32-bit */\n        if (sizeof(void *) < sizeof(xxh_u64)) {\n            size_t i;\n            for (i = 0; i < 4; i++) {\n                acc[i] = XXH64_round(acc[i], XXH_get64bits(input));\n                input += 8;\n            }\n        } else {\n            acc[0] = XXH64_round(acc[0], XXH_get64bits(input)); input += 8;\n            acc[1] = XXH64_round(acc[1], XXH_get64bits(input)); input += 8;\n            acc[2] = XXH64_round(acc[2], XXH_get64bits(input)); input += 8;\n            acc[3] = XXH64_round(acc[3], XXH_get64bits(input)); input += 8;\n        }\n    } while (input < limit);\n\n    return input;\n}\n\n/*!\n * @internal\n * @brief Merges the accumulator lanes together for XXH64()\n */\nXXH_FORCE_INLINE XXH_PUREF xxh_u64\nXXH64_mergeAccs(const xxh_u64 *acc)\n{\n    XXH_ASSERT(acc != NULL);\n    {\n        xxh_u64 h64 = XXH_rotl64(acc[0], 1) + XXH_rotl64(acc[1], 7)\n                    + XXH_rotl64(acc[2], 12) + XXH_rotl64(acc[3], 18);\n        /* reroll on 32-bit */\n        if (sizeof(void *) < sizeof(xxh_u64)) {\n            size_t i;\n            for (i = 0; i < 4; i++) {\n                h64 = XXH64_mergeRound(h64, acc[i]);\n            }\n        } else {\n            h64 = XXH64_mergeRound(h64, acc[0]);\n            h64 = XXH64_mergeRound(h64, acc[1]);\n            h64 = XXH64_mergeRound(h64, acc[2]);\n            h64 = XXH64_mergeRound(h64, acc[3]);\n        }\n        return h64;\n    }\n}\n\n/*!\n * @internal\n * @brief Processes the last 0-31 bytes of @p ptr.\n *\n * There may be up to 31 bytes remaining to consume from the input.\n * This final stage will digest them to ensure that all input bytes are present\n * in the final mix.\n *\n * @param hash The hash to finalize.\n * @param ptr The pointer to the remaining input.\n * @param len The remaining length, modulo 32.\n * @param align Whether @p ptr is aligned.\n * @return The finalized hash\n * @see XXH32_finalize().\n */\nXXH_STATIC XXH_PUREF xxh_u64\nXXH64_finalize(xxh_u64 hash, const xxh_u8* ptr, size_t len, XXH_alignment align)\n{\n    if (ptr==NULL) XXH_ASSERT(len == 0);\n    len &= 31;\n    while (len >= 8) {\n        xxh_u64 const k1 = XXH64_round(0, XXH_get64bits(ptr));\n        ptr += 8;\n        hash ^= k1;\n        hash  = XXH_rotl64(hash,27) * XXH_PRIME64_1 + XXH_PRIME64_4;\n        len -= 8;\n    }\n    if (len >= 4) {\n        hash ^= (xxh_u64)(XXH_get32bits(ptr)) * XXH_PRIME64_1;\n        ptr += 4;\n        hash = XXH_rotl64(hash, 23) * XXH_PRIME64_2 + XXH_PRIME64_3;\n        len -= 4;\n    }\n    while (len > 0) {\n        hash ^= (*ptr++) * XXH_PRIME64_5;\n        hash = XXH_rotl64(hash, 11) * XXH_PRIME64_1;\n        --len;\n    }\n    return  XXH64_avalanche(hash);\n}\n\n#ifdef XXH_OLD_NAMES\n#  define PROCESS1_64 XXH_PROCESS1_64\n#  define PROCESS4_64 XXH_PROCESS4_64\n#  define PROCESS8_64 XXH_PROCESS8_64\n#else\n#  undef XXH_PROCESS1_64\n#  undef XXH_PROCESS4_64\n#  undef XXH_PROCESS8_64\n#endif\n\n/*!\n * @internal\n * @brief The implementation for @ref XXH64().\n *\n * @param input , len , seed Directly passed from @ref XXH64().\n * @param align Whether @p input is aligned.\n * @return The calculated hash.\n */\nXXH_FORCE_INLINE XXH_PUREF xxh_u64\nXXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment align)\n{\n    xxh_u64 h64;\n    if (input==NULL) XXH_ASSERT(len == 0);\n\n    if (len>=32) {  /* Process a large block of data */\n        xxh_u64 acc[4];\n        XXH64_initAccs(acc, seed);\n\n        input = XXH64_consumeLong(acc, input, len, align);\n\n        h64 = XXH64_mergeAccs(acc);\n    } else {\n        h64  = seed + XXH_PRIME64_5;\n    }\n\n    h64 += (xxh_u64) len;\n\n    return XXH64_finalize(h64, input, len, align);\n}\n\n\n/*! @ingroup XXH64_family */\nXXH_PUBLIC_API XXH64_hash_t XXH64 (XXH_NOESCAPE const void* input, size_t len, XXH64_hash_t seed)\n{\n#if !defined(XXH_NO_STREAM) && XXH_SIZE_OPT >= 2\n    /* Simple version, good for code maintenance, but unfortunately slow for small inputs */\n    XXH64_state_t state;\n    XXH64_reset(&state, seed);\n    XXH64_update(&state, (const xxh_u8*)input, len);\n    return XXH64_digest(&state);\n#else\n    if (XXH_FORCE_ALIGN_CHECK) {\n        if ((((size_t)input) & 7)==0) {  /* Input is aligned, let's leverage the speed advantage */\n            return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_aligned);\n    }   }\n\n    return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned);\n\n#endif\n}\n\n/*******   Hash Streaming   *******/\n#ifndef XXH_NO_STREAM\n/*! @ingroup XXH64_family*/\nXXH_PUBLIC_API XXH64_state_t* XXH64_createState(void)\n{\n    return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t));\n}\n/*! @ingroup XXH64_family */\nXXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr)\n{\n    XXH_free(statePtr);\n    return XXH_OK;\n}\n\n/*! @ingroup XXH64_family */\nXXH_PUBLIC_API void XXH64_copyState(XXH_NOESCAPE XXH64_state_t* dstState, const XXH64_state_t* srcState)\n{\n    XXH_memcpy(dstState, srcState, sizeof(*dstState));\n}\n\n/*! @ingroup XXH64_family */\nXXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH_NOESCAPE XXH64_state_t* statePtr, XXH64_hash_t seed)\n{\n    XXH_ASSERT(statePtr != NULL);\n    memset(statePtr, 0, sizeof(*statePtr));\n    XXH64_initAccs(statePtr->acc, seed);\n    return XXH_OK;\n}\n\n/*! @ingroup XXH64_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH64_update (XXH_NOESCAPE XXH64_state_t* state, XXH_NOESCAPE const void* input, size_t len)\n{\n    if (input==NULL) {\n        XXH_ASSERT(len == 0);\n        return XXH_OK;\n    }\n\n    state->total_len += len;\n\n    XXH_ASSERT(state->bufferedSize <= sizeof(state->buffer));\n    if (len < sizeof(state->buffer) - state->bufferedSize)  {   /* fill in tmp buffer */\n        XXH_memcpy(state->buffer + state->bufferedSize, input, len);\n        state->bufferedSize += (XXH32_hash_t)len;\n        return XXH_OK;\n    }\n\n    {   const xxh_u8* xinput = (const xxh_u8*)input;\n        const xxh_u8* const bEnd = xinput + len;\n\n        if (state->bufferedSize) {   /* non-empty buffer => complete first */\n            XXH_memcpy(state->buffer + state->bufferedSize, xinput, sizeof(state->buffer) - state->bufferedSize);\n            xinput += sizeof(state->buffer) - state->bufferedSize;\n            /* and process one round */\n            (void)XXH64_consumeLong(state->acc, state->buffer, sizeof(state->buffer), XXH_aligned);\n            state->bufferedSize = 0;\n        }\n\n        XXH_ASSERT(xinput <= bEnd);\n        if ((size_t)(bEnd - xinput) >= sizeof(state->buffer)) {\n            /* Process the remaining data */\n            xinput = XXH64_consumeLong(state->acc, xinput, (size_t)(bEnd - xinput), XXH_unaligned);\n        }\n\n        if (xinput < bEnd) {\n            /* Copy the leftover to the tmp buffer */\n            XXH_memcpy(state->buffer, xinput, (size_t)(bEnd-xinput));\n            state->bufferedSize = (unsigned)(bEnd-xinput);\n        }\n    }\n\n    return XXH_OK;\n}\n\n\n/*! @ingroup XXH64_family */\nXXH_PUBLIC_API XXH64_hash_t XXH64_digest(XXH_NOESCAPE const XXH64_state_t* state)\n{\n    xxh_u64 h64;\n\n    if (state->total_len >= 32) {\n        h64 = XXH64_mergeAccs(state->acc);\n    } else {\n        h64  = state->acc[2] /*seed*/ + XXH_PRIME64_5;\n    }\n\n    h64 += (xxh_u64) state->total_len;\n\n    return XXH64_finalize(h64, state->buffer, (size_t)state->total_len, XXH_aligned);\n}\n#endif /* !XXH_NO_STREAM */\n\n/******* Canonical representation   *******/\n\n/*! @ingroup XXH64_family */\nXXH_PUBLIC_API void XXH64_canonicalFromHash(XXH_NOESCAPE XXH64_canonical_t* dst, XXH64_hash_t hash)\n{\n    XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t));\n    if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash);\n    XXH_memcpy(dst, &hash, sizeof(*dst));\n}\n\n/*! @ingroup XXH64_family */\nXXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(XXH_NOESCAPE const XXH64_canonical_t* src)\n{\n    return XXH_readBE64(src);\n}\n\n#ifndef XXH_NO_XXH3\n\n/* *********************************************************************\n*  XXH3\n*  New generation hash designed for speed on small keys and vectorization\n************************************************************************ */\n/*!\n * @}\n * @defgroup XXH3_impl XXH3 implementation\n * @ingroup impl\n * @{\n */\n\n/* ===   Compiler specifics   === */\n\n\n#if (defined(__GNUC__) && (__GNUC__ >= 3))  \\\n  || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) \\\n  || defined(__clang__)\n#    define XXH_likely(x) __builtin_expect(x, 1)\n#    define XXH_unlikely(x) __builtin_expect(x, 0)\n#else\n#    define XXH_likely(x) (x)\n#    define XXH_unlikely(x) (x)\n#endif\n\n#ifndef XXH_HAS_INCLUDE\n#  ifdef __has_include\n/*\n * Not defined as XXH_HAS_INCLUDE(x) (function-like) because\n * this causes segfaults in Apple Clang 4.2 (on Mac OS X 10.7 Lion)\n */\n#    define XXH_HAS_INCLUDE __has_include\n#  else\n#    define XXH_HAS_INCLUDE(x) 0\n#  endif\n#endif\n\n#if defined(__GNUC__) || defined(__clang__)\n#  if defined(__ARM_FEATURE_SVE)\n#    include <arm_sve.h>\n#  endif\n#  if defined(__ARM_NEON__) || defined(__ARM_NEON) \\\n   || (defined(_M_ARM) && _M_ARM >= 7) \\\n   || defined(_M_ARM64) || defined(_M_ARM64EC) \\\n   || (defined(__wasm_simd128__) && XXH_HAS_INCLUDE(<arm_neon.h>)) /* WASM SIMD128 via SIMDe */\n#    define inline __inline__  /* circumvent a clang bug */\n#    include <arm_neon.h>\n#    undef inline\n#  elif defined(__AVX2__)\n#    include <immintrin.h>\n#  elif defined(__SSE2__)\n#    include <emmintrin.h>\n#  elif defined(__loongarch_sx)\n#    include <lsxintrin.h>\n#  endif\n#endif\n\n#if defined(_MSC_VER)\n#  include <intrin.h>\n#endif\n\n/*\n * One goal of XXH3 is to make it fast on both 32-bit and 64-bit, while\n * remaining a true 64-bit/128-bit hash function.\n *\n * This is done by prioritizing a subset of 64-bit operations that can be\n * emulated without too many steps on the average 32-bit machine.\n *\n * For example, these two lines seem similar, and run equally fast on 64-bit:\n *\n *   xxh_u64 x;\n *   x ^= (x >> 47); // good\n *   x ^= (x >> 13); // bad\n *\n * However, to a 32-bit machine, there is a major difference.\n *\n * x ^= (x >> 47) looks like this:\n *\n *   x.lo ^= (x.hi >> (47 - 32));\n *\n * while x ^= (x >> 13) looks like this:\n *\n *   // note: funnel shifts are not usually cheap.\n *   x.lo ^= (x.lo >> 13) | (x.hi << (32 - 13));\n *   x.hi ^= (x.hi >> 13);\n *\n * The first one is significantly faster than the second, simply because the\n * shift is larger than 32. This means:\n *  - All the bits we need are in the upper 32 bits, so we can ignore the lower\n *    32 bits in the shift.\n *  - The shift result will always fit in the lower 32 bits, and therefore,\n *    we can ignore the upper 32 bits in the xor.\n *\n * Thanks to this optimization, XXH3 only requires these features to be efficient:\n *\n *  - Usable unaligned access\n *  - A 32-bit or 64-bit ALU\n *      - If 32-bit, a decent ADC instruction\n *  - A 32 or 64-bit multiply with a 64-bit result\n *  - For the 128-bit variant, a decent byteswap helps short inputs.\n *\n * The first two are already required by XXH32, and almost all 32-bit and 64-bit\n * platforms which can run XXH32 can run XXH3 efficiently.\n *\n * Thumb-1, the classic 16-bit only subset of ARM's instruction set, is one\n * notable exception.\n *\n * First of all, Thumb-1 lacks support for the UMULL instruction which\n * performs the important long multiply. This means numerous __aeabi_lmul\n * calls.\n *\n * Second of all, the 8 functional registers are just not enough.\n * Setup for __aeabi_lmul, byteshift loads, pointers, and all arithmetic need\n * Lo registers, and this shuffling results in thousands more MOVs than A32.\n *\n * A32 and T32 don't have this limitation. They can access all 14 registers,\n * do a 32->64 multiply with UMULL, and the flexible operand allowing free\n * shifts is helpful, too.\n *\n * Therefore, we do a quick sanity check.\n *\n * If compiling Thumb-1 for a target which supports ARM instructions, we will\n * emit a warning, as it is not a \"sane\" platform to compile for.\n *\n * Usually, if this happens, it is because of an accident and you probably need\n * to specify -march, as you likely meant to compile for a newer architecture.\n *\n * Credit: large sections of the vectorial and asm source code paths\n *         have been contributed by @easyaspi314\n */\n#if defined(__thumb__) && !defined(__thumb2__) && defined(__ARM_ARCH_ISA_ARM)\n#   warning \"XXH3 is highly inefficient without ARM or Thumb-2.\"\n#endif\n\n/* ==========================================\n * Vectorization detection\n * ========================================== */\n\n#ifdef XXH_DOXYGEN\n/*!\n * @ingroup tuning\n * @brief Overrides the vectorization implementation chosen for XXH3.\n *\n * Can be defined to 0 to disable SIMD or any of the values mentioned in\n * @ref XXH_VECTOR_TYPE.\n *\n * If this is not defined, it uses predefined macros to determine the best\n * implementation.\n */\n#  define XXH_VECTOR XXH_SCALAR\n/*!\n * @ingroup tuning\n * @brief Selects the minimum alignment for XXH3's accumulators.\n *\n * When using SIMD, this should match the alignment required for said vector\n * type, so, for example, 32 for AVX2.\n *\n * Default: Auto detected.\n */\n#  define XXH_ACC_ALIGN 8\n#endif\n\n/* Actual definition */\n#ifndef XXH_DOXYGEN\n#endif\n\n#ifndef XXH_VECTOR    /* can be defined on command line */\n#  if defined(__ARM_FEATURE_SVE)\n#    define XXH_VECTOR XXH_SVE\n#  elif ( \\\n        defined(__ARM_NEON__) || defined(__ARM_NEON) /* gcc */ \\\n     || defined(_M_ARM) || defined(_M_ARM64) || defined(_M_ARM64EC) /* msvc */ \\\n     || (defined(__wasm_simd128__) && XXH_HAS_INCLUDE(<arm_neon.h>)) /* wasm simd128 via SIMDe */ \\\n   ) && ( \\\n        defined(_WIN32) || defined(__LITTLE_ENDIAN__) /* little endian only */ \\\n    || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) \\\n   )\n#    define XXH_VECTOR XXH_NEON\n#  elif defined(__AVX512F__)\n#    define XXH_VECTOR XXH_AVX512\n#  elif defined(__AVX2__)\n#    define XXH_VECTOR XXH_AVX2\n#  elif defined(__SSE2__) || defined(_M_AMD64) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP == 2))\n#    define XXH_VECTOR XXH_SSE2\n#  elif (defined(__PPC64__) && defined(__POWER8_VECTOR__)) \\\n     || (defined(__s390x__) && defined(__VEC__)) \\\n     && defined(__GNUC__) /* TODO: IBM XL */\n#    define XXH_VECTOR XXH_VSX\n#  elif defined(__loongarch_sx)\n#    define XXH_VECTOR XXH_LSX\n#  else\n#    define XXH_VECTOR XXH_SCALAR\n#  endif\n#endif\n\n/* __ARM_FEATURE_SVE is only supported by GCC & Clang. */\n#if (XXH_VECTOR == XXH_SVE) && !defined(__ARM_FEATURE_SVE)\n#  ifdef _MSC_VER\n#    pragma warning(once : 4606)\n#  else\n#    warning \"__ARM_FEATURE_SVE isn't supported. Use SCALAR instead.\"\n#  endif\n#  undef XXH_VECTOR\n#  define XXH_VECTOR XXH_SCALAR\n#endif\n\n/*\n * Controls the alignment of the accumulator,\n * for compatibility with aligned vector loads, which are usually faster.\n */\n#ifndef XXH_ACC_ALIGN\n#  if defined(XXH_X86DISPATCH)\n#     define XXH_ACC_ALIGN 64  /* for compatibility with avx512 */\n#  elif XXH_VECTOR == XXH_SCALAR  /* scalar */\n#     define XXH_ACC_ALIGN 8\n#  elif XXH_VECTOR == XXH_SSE2  /* sse2 */\n#     define XXH_ACC_ALIGN 16\n#  elif XXH_VECTOR == XXH_AVX2  /* avx2 */\n#     define XXH_ACC_ALIGN 32\n#  elif XXH_VECTOR == XXH_NEON  /* neon */\n#     define XXH_ACC_ALIGN 16\n#  elif XXH_VECTOR == XXH_VSX   /* vsx */\n#     define XXH_ACC_ALIGN 16\n#  elif XXH_VECTOR == XXH_AVX512  /* avx512 */\n#     define XXH_ACC_ALIGN 64\n#  elif XXH_VECTOR == XXH_SVE   /* sve */\n#     define XXH_ACC_ALIGN 64\n#  elif XXH_VECTOR == XXH_LSX   /* lsx */\n#     define XXH_ACC_ALIGN 64\n#  endif\n#endif\n\n#if defined(XXH_X86DISPATCH) || XXH_VECTOR == XXH_SSE2 \\\n    || XXH_VECTOR == XXH_AVX2 || XXH_VECTOR == XXH_AVX512\n#  define XXH_SEC_ALIGN XXH_ACC_ALIGN\n#elif XXH_VECTOR == XXH_SVE\n#  define XXH_SEC_ALIGN XXH_ACC_ALIGN\n#else\n#  define XXH_SEC_ALIGN 8\n#endif\n\n#if defined(__GNUC__) || defined(__clang__)\n#  define XXH_ALIASING __attribute__((__may_alias__))\n#else\n#  define XXH_ALIASING /* nothing */\n#endif\n\n/*\n * UGLY HACK:\n * GCC usually generates the best code with -O3 for xxHash.\n *\n * However, when targeting AVX2, it is overzealous in its unrolling resulting\n * in code roughly 3/4 the speed of Clang.\n *\n * There are other issues, such as GCC splitting _mm256_loadu_si256 into\n * _mm_loadu_si128 + _mm256_inserti128_si256. This is an optimization which\n * only applies to Sandy and Ivy Bridge... which don't even support AVX2.\n *\n * That is why when compiling the AVX2 version, it is recommended to use either\n *   -O2 -mavx2 -march=haswell\n * or\n *   -O2 -mavx2 -mno-avx256-split-unaligned-load\n * for decent performance, or to use Clang instead.\n *\n * Fortunately, we can control the first one with a pragma that forces GCC into\n * -O2, but the other one we can't control without \"failed to inline always\n * inline function due to target mismatch\" warnings.\n */\n#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \\\n  && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \\\n  && defined(__OPTIMIZE__) && XXH_SIZE_OPT <= 0 /* respect -O0 and -Os */\n#  pragma GCC push_options\n#  pragma GCC optimize(\"-O2\")\n#endif\n\n#if XXH_VECTOR == XXH_NEON\n\n/*\n * UGLY HACK: While AArch64 GCC on Linux does not seem to care, on macOS, GCC -O3\n * optimizes out the entire hashLong loop because of the aliasing violation.\n *\n * However, GCC is also inefficient at load-store optimization with vld1q/vst1q,\n * so the only option is to mark it as aliasing.\n */\ntypedef uint64x2_t xxh_aliasing_uint64x2_t XXH_ALIASING;\n\n/*!\n * @internal\n * @brief `vld1q_u64` but faster and alignment-safe.\n *\n * On AArch64, unaligned access is always safe, but on ARMv7-a, it is only\n * *conditionally* safe (`vld1` has an alignment bit like `movdq[ua]` in x86).\n *\n * GCC for AArch64 sees `vld1q_u8` as an intrinsic instead of a load, so it\n * prohibits load-store optimizations. Therefore, a direct dereference is used.\n *\n * Otherwise, `vld1q_u8` is used with `vreinterpretq_u8_u64` to do a safe\n * unaligned load.\n */\n#if defined(__aarch64__) && defined(__GNUC__) && !defined(__clang__)\nXXH_FORCE_INLINE uint64x2_t XXH_vld1q_u64(void const* ptr) /* silence -Wcast-align */\n{\n    return *(xxh_aliasing_uint64x2_t const *)ptr;\n}\n#else\nXXH_FORCE_INLINE uint64x2_t XXH_vld1q_u64(void const* ptr)\n{\n    return vreinterpretq_u64_u8(vld1q_u8((uint8_t const*)ptr));\n}\n#endif\n\n/*!\n * @internal\n * @brief `vmlal_u32` on low and high halves of a vector.\n *\n * This is a workaround for AArch64 GCC < 11 which implemented arm_neon.h with\n * inline assembly and were therefore incapable of merging the `vget_{low, high}_u32`\n * with `vmlal_u32`.\n */\n#if defined(__aarch64__) && defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 11\nXXH_FORCE_INLINE uint64x2_t\nXXH_vmlal_low_u32(uint64x2_t acc, uint32x4_t lhs, uint32x4_t rhs)\n{\n    /* Inline assembly is the only way */\n    __asm__(\"umlal   %0.2d, %1.2s, %2.2s\" : \"+w\" (acc) : \"w\" (lhs), \"w\" (rhs));\n    return acc;\n}\nXXH_FORCE_INLINE uint64x2_t\nXXH_vmlal_high_u32(uint64x2_t acc, uint32x4_t lhs, uint32x4_t rhs)\n{\n    /* This intrinsic works as expected */\n    return vmlal_high_u32(acc, lhs, rhs);\n}\n#else\n/* Portable intrinsic versions */\nXXH_FORCE_INLINE uint64x2_t\nXXH_vmlal_low_u32(uint64x2_t acc, uint32x4_t lhs, uint32x4_t rhs)\n{\n    return vmlal_u32(acc, vget_low_u32(lhs), vget_low_u32(rhs));\n}\n/*! @copydoc XXH_vmlal_low_u32\n * Assume the compiler converts this to vmlal_high_u32 on aarch64 */\nXXH_FORCE_INLINE uint64x2_t\nXXH_vmlal_high_u32(uint64x2_t acc, uint32x4_t lhs, uint32x4_t rhs)\n{\n    return vmlal_u32(acc, vget_high_u32(lhs), vget_high_u32(rhs));\n}\n#endif\n\n/*!\n * @ingroup tuning\n * @brief Controls the NEON to scalar ratio for XXH3\n *\n * This can be set to 2, 4, 6, or 8.\n *\n * ARM Cortex CPUs are _very_ sensitive to how their pipelines are used.\n *\n * For example, the Cortex-A73 can dispatch 3 micro-ops per cycle, but only 2 of those\n * can be NEON. If you are only using NEON instructions, you are only using 2/3 of the CPU\n * bandwidth.\n *\n * This is even more noticeable on the more advanced cores like the Cortex-A76 which\n * can dispatch 8 micro-ops per cycle, but still only 2 NEON micro-ops at once.\n *\n * Therefore, to make the most out of the pipeline, it is beneficial to run 6 NEON lanes\n * and 2 scalar lanes, which is chosen by default.\n *\n * This does not apply to Apple processors or 32-bit processors, which run better with\n * full NEON. These will default to 8. Additionally, size-optimized builds run 8 lanes.\n *\n * This change benefits CPUs with large micro-op buffers without negatively affecting\n * most other CPUs:\n *\n *  | Chipset               | Dispatch type       | NEON only | 6:2 hybrid | Diff. |\n *  |:----------------------|:--------------------|----------:|-----------:|------:|\n *  | Snapdragon 730 (A76)  | 2 NEON/8 micro-ops  |  8.8 GB/s |  10.1 GB/s |  ~16% |\n *  | Snapdragon 835 (A73)  | 2 NEON/3 micro-ops  |  5.1 GB/s |   5.3 GB/s |   ~5% |\n *  | Marvell PXA1928 (A53) | In-order dual-issue |  1.9 GB/s |   1.9 GB/s |    0% |\n *  | Apple M1              | 4 NEON/8 micro-ops  | 37.3 GB/s |  36.1 GB/s |  ~-3% |\n *\n * It also seems to fix some bad codegen on GCC, making it almost as fast as clang.\n *\n * When using WASM SIMD128, if this is 2 or 6, SIMDe will scalarize 2 of the lanes meaning\n * it effectively becomes worse 4.\n *\n * @see XXH3_accumulate_512_neon()\n */\n# ifndef XXH3_NEON_LANES\n#  if (defined(__aarch64__) || defined(__arm64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) \\\n   && !defined(__APPLE__) && XXH_SIZE_OPT <= 0\n#   define XXH3_NEON_LANES 6\n#  else\n#   define XXH3_NEON_LANES XXH_ACC_NB\n#  endif\n# endif\n#endif  /* XXH_VECTOR == XXH_NEON */\n\n/*\n * VSX and Z Vector helpers.\n *\n * This is very messy, and any pull requests to clean this up are welcome.\n *\n * There are a lot of problems with supporting VSX and s390x, due to\n * inconsistent intrinsics, spotty coverage, and multiple endiannesses.\n */\n#if XXH_VECTOR == XXH_VSX\n/* Annoyingly, these headers _may_ define three macros: `bool`, `vector`,\n * and `pixel`. This is a problem for obvious reasons.\n *\n * These keywords are unnecessary; the spec literally says they are\n * equivalent to `__bool`, `__vector`, and `__pixel` and may be undef'd\n * after including the header.\n *\n * We use pragma push_macro/pop_macro to keep the namespace clean. */\n#  pragma push_macro(\"bool\")\n#  pragma push_macro(\"vector\")\n#  pragma push_macro(\"pixel\")\n/* silence potential macro redefined warnings */\n#  undef bool\n#  undef vector\n#  undef pixel\n\n#  if defined(__s390x__)\n#    include <s390intrin.h>\n#  else\n#    include <altivec.h>\n#  endif\n\n/* Restore the original macro values, if applicable. */\n#  pragma pop_macro(\"pixel\")\n#  pragma pop_macro(\"vector\")\n#  pragma pop_macro(\"bool\")\n\ntypedef __vector unsigned long long xxh_u64x2;\ntypedef __vector unsigned char xxh_u8x16;\ntypedef __vector unsigned xxh_u32x4;\n\n/*\n * UGLY HACK: Similar to aarch64 macOS GCC, s390x GCC has the same aliasing issue.\n */\ntypedef xxh_u64x2 xxh_aliasing_u64x2 XXH_ALIASING;\n\n# ifndef XXH_VSX_BE\n#  if defined(__BIG_ENDIAN__) \\\n  || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)\n#    define XXH_VSX_BE 1\n#  elif defined(__VEC_ELEMENT_REG_ORDER__) && __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__\n#    warning \"-maltivec=be is not recommended. Please use native endianness.\"\n#    define XXH_VSX_BE 1\n#  else\n#    define XXH_VSX_BE 0\n#  endif\n# endif /* !defined(XXH_VSX_BE) */\n\n# if XXH_VSX_BE\n#  if defined(__POWER9_VECTOR__) || (defined(__clang__) && defined(__s390x__))\n#    define XXH_vec_revb vec_revb\n#  else\n/*!\n * A polyfill for POWER9's vec_revb().\n */\nXXH_FORCE_INLINE xxh_u64x2 XXH_vec_revb(xxh_u64x2 val)\n{\n    xxh_u8x16 const vByteSwap = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,\n                                  0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08 };\n    return vec_perm(val, val, vByteSwap);\n}\n#  endif\n# endif /* XXH_VSX_BE */\n\n/*!\n * Performs an unaligned vector load and byte swaps it on big endian.\n */\nXXH_FORCE_INLINE xxh_u64x2 XXH_vec_loadu(const void *ptr)\n{\n    xxh_u64x2 ret;\n    XXH_memcpy(&ret, ptr, sizeof(xxh_u64x2));\n# if XXH_VSX_BE\n    ret = XXH_vec_revb(ret);\n# endif\n    return ret;\n}\n\n/*\n * vec_mulo and vec_mule are very problematic intrinsics on PowerPC\n *\n * These intrinsics weren't added until GCC 8, despite existing for a while,\n * and they are endian dependent. Also, their meaning swap depending on version.\n * */\n# if defined(__s390x__)\n /* s390x is always big endian, no issue on this platform */\n#  define XXH_vec_mulo vec_mulo\n#  define XXH_vec_mule vec_mule\n# elif defined(__clang__) && XXH_HAS_BUILTIN(__builtin_altivec_vmuleuw) && !defined(__ibmxl__)\n/* Clang has a better way to control this, we can just use the builtin which doesn't swap. */\n /* The IBM XL Compiler (which defined __clang__) only implements the vec_* operations */\n#  define XXH_vec_mulo __builtin_altivec_vmulouw\n#  define XXH_vec_mule __builtin_altivec_vmuleuw\n# else\n/* gcc needs inline assembly */\n/* Adapted from https://github.com/google/highwayhash/blob/master/highwayhash/hh_vsx.h. */\nXXH_FORCE_INLINE xxh_u64x2 XXH_vec_mulo(xxh_u32x4 a, xxh_u32x4 b)\n{\n    xxh_u64x2 result;\n    __asm__(\"vmulouw %0, %1, %2\" : \"=v\" (result) : \"v\" (a), \"v\" (b));\n    return result;\n}\nXXH_FORCE_INLINE xxh_u64x2 XXH_vec_mule(xxh_u32x4 a, xxh_u32x4 b)\n{\n    xxh_u64x2 result;\n    __asm__(\"vmuleuw %0, %1, %2\" : \"=v\" (result) : \"v\" (a), \"v\" (b));\n    return result;\n}\n# endif /* XXH_vec_mulo, XXH_vec_mule */\n#endif /* XXH_VECTOR == XXH_VSX */\n\n#if XXH_VECTOR == XXH_SVE\n#define ACCRND(acc, offset) \\\ndo { \\\n    svuint64_t input_vec = svld1_u64(mask, xinput + offset);         \\\n    svuint64_t secret_vec = svld1_u64(mask, xsecret + offset);       \\\n    svuint64_t mixed = sveor_u64_x(mask, secret_vec, input_vec);     \\\n    svuint64_t swapped = svtbl_u64(input_vec, kSwap);                \\\n    svuint64_t mixed_lo = svextw_u64_x(mask, mixed);                 \\\n    svuint64_t mixed_hi = svlsr_n_u64_x(mask, mixed, 32);            \\\n    svuint64_t mul = svmad_u64_x(mask, mixed_lo, mixed_hi, swapped); \\\n    acc = svadd_u64_x(mask, acc, mul);                               \\\n} while (0)\n#endif /* XXH_VECTOR == XXH_SVE */\n\n/* prefetch\n * can be disabled, by declaring XXH_NO_PREFETCH build macro */\n#if defined(XXH_NO_PREFETCH)\n#  define XXH_PREFETCH(ptr)  (void)(ptr)  /* disabled */\n#else\n#  if XXH_SIZE_OPT >= 1\n#    define XXH_PREFETCH(ptr) (void)(ptr)\n#  elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86))  /* _mm_prefetch() not defined outside of x86/x64 */\n#    include <mmintrin.h>   /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */\n#    define XXH_PREFETCH(ptr)  _mm_prefetch((const char*)(ptr), _MM_HINT_T0)\n#  elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) )\n#    define XXH_PREFETCH(ptr)  __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */)\n#  else\n#    define XXH_PREFETCH(ptr) (void)(ptr)  /* disabled */\n#  endif\n#endif  /* XXH_NO_PREFETCH */\n\n\n/* ==========================================\n * XXH3 default settings\n * ========================================== */\n\n#define XXH_SECRET_DEFAULT_SIZE 192   /* minimum XXH3_SECRET_SIZE_MIN */\n\n#if (XXH_SECRET_DEFAULT_SIZE < XXH3_SECRET_SIZE_MIN)\n#  error \"default keyset is not large enough\"\n#endif\n\n/*! Pseudorandom secret taken directly from FARSH. */\nXXH_ALIGN(64) static const xxh_u8 XXH3_kSecret[XXH_SECRET_DEFAULT_SIZE] = {\n    0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, 0xf7, 0x21, 0xad, 0x1c,\n    0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f,\n    0xcb, 0x79, 0xe6, 0x4e, 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21,\n    0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, 0x81, 0x3a, 0x26, 0x4c,\n    0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3,\n    0x71, 0x64, 0x48, 0x97, 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8,\n    0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, 0xc7, 0x0b, 0x4f, 0x1d,\n    0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64,\n    0xea, 0xc5, 0xac, 0x83, 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb,\n    0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, 0x29, 0xd4, 0x68, 0x9e,\n    0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce,\n    0x45, 0xcb, 0x3a, 0x8f, 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e,\n};\n\nstatic const xxh_u64 PRIME_MX1 = 0x165667919E3779F9ULL;  /*!< 0b0001011001010110011001111001000110011110001101110111100111111001 */\nstatic const xxh_u64 PRIME_MX2 = 0x9FB21C651E98DF25ULL;  /*!< 0b1001111110110010000111000110010100011110100110001101111100100101 */\n\n#ifdef XXH_OLD_NAMES\n#  define kSecret XXH3_kSecret\n#endif\n\n#ifdef XXH_DOXYGEN\n/*!\n * @brief Calculates a 32-bit to 64-bit long multiply.\n *\n * Implemented as a macro.\n *\n * Wraps `__emulu` on MSVC x86 because it tends to call `__allmul` when it doesn't\n * need to (but it shouldn't need to anyways, it is about 7 instructions to do\n * a 64x64 multiply...). Since we know that this will _always_ emit `MULL`, we\n * use that instead of the normal method.\n *\n * If you are compiling for platforms like Thumb-1 and don't have a better option,\n * you may also want to write your own long multiply routine here.\n *\n * @param x, y Numbers to be multiplied\n * @return 64-bit product of the low 32 bits of @p x and @p y.\n */\nXXH_FORCE_INLINE xxh_u64\nXXH_mult32to64(xxh_u64 x, xxh_u64 y)\n{\n   return (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF);\n}\n#elif defined(_MSC_VER) && defined(_M_IX86)\n#    define XXH_mult32to64(x, y) __emulu((unsigned)(x), (unsigned)(y))\n#else\n/*\n * Downcast + upcast is usually better than masking on older compilers like\n * GCC 4.2 (especially 32-bit ones), all without affecting newer compilers.\n *\n * The other method, (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF), will AND both operands\n * and perform a full 64x64 multiply -- entirely redundant on 32-bit.\n */\n#    define XXH_mult32to64(x, y) ((xxh_u64)(xxh_u32)(x) * (xxh_u64)(xxh_u32)(y))\n#endif\n\n/*!\n * @brief Calculates a 64->128-bit long multiply.\n *\n * Uses `__uint128_t` and `_umul128` if available, otherwise uses a scalar\n * version.\n *\n * @param lhs , rhs The 64-bit integers to be multiplied\n * @return The 128-bit result represented in an @ref XXH128_hash_t.\n */\nstatic XXH128_hash_t\nXXH_mult64to128(xxh_u64 lhs, xxh_u64 rhs)\n{\n    /*\n     * GCC/Clang __uint128_t method.\n     *\n     * On most 64-bit targets, GCC and Clang define a __uint128_t type.\n     * This is usually the best way as it usually uses a native long 64-bit\n     * multiply, such as MULQ on x86_64 or MUL + UMULH on aarch64.\n     *\n     * Usually.\n     *\n     * Despite being a 32-bit platform, Clang (and emscripten) define this type\n     * despite not having the arithmetic for it. This results in a laggy\n     * compiler builtin call which calculates a full 128-bit multiply.\n     * In that case it is best to use the portable one.\n     * https://github.com/Cyan4973/xxHash/issues/211#issuecomment-515575677\n     */\n#if (defined(__GNUC__) || defined(__clang__)) && !defined(__wasm__) \\\n    && defined(__SIZEOF_INT128__) \\\n    || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 128)\n\n    __uint128_t const product = (__uint128_t)lhs * (__uint128_t)rhs;\n    XXH128_hash_t r128;\n    r128.low64  = (xxh_u64)(product);\n    r128.high64 = (xxh_u64)(product >> 64);\n    return r128;\n\n    /*\n     * MSVC for x64's _umul128 method.\n     *\n     * xxh_u64 _umul128(xxh_u64 Multiplier, xxh_u64 Multiplicand, xxh_u64 *HighProduct);\n     *\n     * This compiles to single operand MUL on x64.\n     */\n#elif (defined(_M_X64) || defined(_M_IA64)) && !defined(_M_ARM64EC)\n\n#ifndef _MSC_VER\n#   pragma intrinsic(_umul128)\n#endif\n    xxh_u64 product_high;\n    xxh_u64 const product_low = _umul128(lhs, rhs, &product_high);\n    XXH128_hash_t r128;\n    r128.low64  = product_low;\n    r128.high64 = product_high;\n    return r128;\n\n    /*\n     * MSVC for ARM64's __umulh method.\n     *\n     * This compiles to the same MUL + UMULH as GCC/Clang's __uint128_t method.\n     */\n#elif defined(_M_ARM64) || defined(_M_ARM64EC)\n\n#ifndef _MSC_VER\n#   pragma intrinsic(__umulh)\n#endif\n    XXH128_hash_t r128;\n    r128.low64  = lhs * rhs;\n    r128.high64 = __umulh(lhs, rhs);\n    return r128;\n\n#else\n    /*\n     * Portable scalar method. Optimized for 32-bit and 64-bit ALUs.\n     *\n     * This is a fast and simple grade school multiply, which is shown below\n     * with base 10 arithmetic instead of base 0x100000000.\n     *\n     *           9 3 // D2 lhs = 93\n     *         x 7 5 // D2 rhs = 75\n     *     ----------\n     *           1 5 // D2 lo_lo = (93 % 10) * (75 % 10) = 15\n     *         4 5 | // D2 hi_lo = (93 / 10) * (75 % 10) = 45\n     *         2 1 | // D2 lo_hi = (93 % 10) * (75 / 10) = 21\n     *     + 6 3 | | // D2 hi_hi = (93 / 10) * (75 / 10) = 63\n     *     ---------\n     *         2 7 | // D2 cross = (15 / 10) + (45 % 10) + 21 = 27\n     *     + 6 7 | | // D2 upper = (27 / 10) + (45 / 10) + 63 = 67\n     *     ---------\n     *       6 9 7 5 // D4 res = (27 * 10) + (15 % 10) + (67 * 100) = 6975\n     *\n     * The reasons for adding the products like this are:\n     *  1. It avoids manual carry tracking. Just like how\n     *     (9 * 9) + 9 + 9 = 99, the same applies with this for UINT64_MAX.\n     *     This avoids a lot of complexity.\n     *\n     *  2. It hints for, and on Clang, compiles to, the powerful UMAAL\n     *     instruction available in ARM's Digital Signal Processing extension\n     *     in 32-bit ARMv6 and later, which is shown below:\n     *\n     *         void UMAAL(xxh_u32 *RdLo, xxh_u32 *RdHi, xxh_u32 Rn, xxh_u32 Rm)\n     *         {\n     *             xxh_u64 product = (xxh_u64)*RdLo * (xxh_u64)*RdHi + Rn + Rm;\n     *             *RdLo = (xxh_u32)(product & 0xFFFFFFFF);\n     *             *RdHi = (xxh_u32)(product >> 32);\n     *         }\n     *\n     *     This instruction was designed for efficient long multiplication, and\n     *     allows this to be calculated in only 4 instructions at speeds\n     *     comparable to some 64-bit ALUs.\n     *\n     *  3. It isn't terrible on other platforms. Usually this will be a couple\n     *     of 32-bit ADD/ADCs.\n     */\n\n    /* First calculate all of the cross products. */\n    xxh_u64 const lo_lo = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs & 0xFFFFFFFF);\n    xxh_u64 const hi_lo = XXH_mult32to64(lhs >> 32,        rhs & 0xFFFFFFFF);\n    xxh_u64 const lo_hi = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs >> 32);\n    xxh_u64 const hi_hi = XXH_mult32to64(lhs >> 32,        rhs >> 32);\n\n    /* Now add the products together. These will never overflow. */\n    xxh_u64 const cross = (lo_lo >> 32) + (hi_lo & 0xFFFFFFFF) + lo_hi;\n    xxh_u64 const upper = (hi_lo >> 32) + (cross >> 32)        + hi_hi;\n    xxh_u64 const lower = (cross << 32) | (lo_lo & 0xFFFFFFFF);\n\n    XXH128_hash_t r128;\n    r128.low64  = lower;\n    r128.high64 = upper;\n    return r128;\n#endif\n}\n\n/*!\n * @brief Calculates a 64-bit to 128-bit multiply, then XOR folds it.\n *\n * The reason for the separate function is to prevent passing too many structs\n * around by value. This will hopefully inline the multiply, but we don't force it.\n *\n * @param lhs , rhs The 64-bit integers to multiply\n * @return The low 64 bits of the product XOR'd by the high 64 bits.\n * @see XXH_mult64to128()\n */\nstatic xxh_u64\nXXH3_mul128_fold64(xxh_u64 lhs, xxh_u64 rhs)\n{\n    XXH128_hash_t product = XXH_mult64to128(lhs, rhs);\n    return product.low64 ^ product.high64;\n}\n\n/*! Seems to produce slightly better code on GCC for some reason. */\nXXH_FORCE_INLINE XXH_CONSTF xxh_u64 XXH_xorshift64(xxh_u64 v64, int shift)\n{\n    XXH_ASSERT(0 <= shift && shift < 64);\n    return v64 ^ (v64 >> shift);\n}\n\n/*\n * This is a fast avalanche stage,\n * suitable when input bits are already partially mixed\n */\nstatic XXH64_hash_t XXH3_avalanche(xxh_u64 h64)\n{\n    h64 = XXH_xorshift64(h64, 37);\n    h64 *= PRIME_MX1;\n    h64 = XXH_xorshift64(h64, 32);\n    return h64;\n}\n\n/*\n * This is a stronger avalanche,\n * inspired by Pelle Evensen's rrmxmx\n * preferable when input has not been previously mixed\n */\nstatic XXH64_hash_t XXH3_rrmxmx(xxh_u64 h64, xxh_u64 len)\n{\n    /* this mix is inspired by Pelle Evensen's rrmxmx */\n    h64 ^= XXH_rotl64(h64, 49) ^ XXH_rotl64(h64, 24);\n    h64 *= PRIME_MX2;\n    h64 ^= (h64 >> 35) + len ;\n    h64 *= PRIME_MX2;\n    return XXH_xorshift64(h64, 28);\n}\n\n\n/* ==========================================\n * Short keys\n * ==========================================\n * One of the shortcomings of XXH32 and XXH64 was that their performance was\n * sub-optimal on short lengths. It used an iterative algorithm which strongly\n * favored lengths that were a multiple of 4 or 8.\n *\n * Instead of iterating over individual inputs, we use a set of single shot\n * functions which piece together a range of lengths and operate in constant time.\n *\n * Additionally, the number of multiplies has been significantly reduced. This\n * reduces latency, especially when emulating 64-bit multiplies on 32-bit.\n *\n * Depending on the platform, this may or may not be faster than XXH32, but it\n * is almost guaranteed to be faster than XXH64.\n */\n\n/*\n * At very short lengths, there isn't enough input to fully hide secrets, or use\n * the entire secret.\n *\n * There is also only a limited amount of mixing we can do before significantly\n * impacting performance.\n *\n * Therefore, we use different sections of the secret and always mix two secret\n * samples with an XOR. This should have no effect on performance on the\n * seedless or withSeed variants because everything _should_ be constant folded\n * by modern compilers.\n *\n * The XOR mixing hides individual parts of the secret and increases entropy.\n *\n * This adds an extra layer of strength for custom secrets.\n */\nXXH_FORCE_INLINE XXH_PUREF XXH64_hash_t\nXXH3_len_1to3_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)\n{\n    XXH_ASSERT(input != NULL);\n    XXH_ASSERT(1 <= len && len <= 3);\n    XXH_ASSERT(secret != NULL);\n    /*\n     * len = 1: combined = { input[0], 0x01, input[0], input[0] }\n     * len = 2: combined = { input[1], 0x02, input[0], input[1] }\n     * len = 3: combined = { input[2], 0x03, input[0], input[1] }\n     */\n    {   xxh_u8  const c1 = input[0];\n        xxh_u8  const c2 = input[len >> 1];\n        xxh_u8  const c3 = input[len - 1];\n        xxh_u32 const combined = ((xxh_u32)c1 << 16) | ((xxh_u32)c2  << 24)\n                               | ((xxh_u32)c3 <<  0) | ((xxh_u32)len << 8);\n        xxh_u64 const bitflip = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed;\n        xxh_u64 const keyed = (xxh_u64)combined ^ bitflip;\n        return XXH64_avalanche(keyed);\n    }\n}\n\nXXH_FORCE_INLINE XXH_PUREF XXH64_hash_t\nXXH3_len_4to8_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)\n{\n    XXH_ASSERT(input != NULL);\n    XXH_ASSERT(secret != NULL);\n    XXH_ASSERT(4 <= len && len <= 8);\n    seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32;\n    {   xxh_u32 const input1 = XXH_readLE32(input);\n        xxh_u32 const input2 = XXH_readLE32(input + len - 4);\n        xxh_u64 const bitflip = (XXH_readLE64(secret+8) ^ XXH_readLE64(secret+16)) - seed;\n        xxh_u64 const input64 = input2 + (((xxh_u64)input1) << 32);\n        xxh_u64 const keyed = input64 ^ bitflip;\n        return XXH3_rrmxmx(keyed, len);\n    }\n}\n\nXXH_FORCE_INLINE XXH_PUREF XXH64_hash_t\nXXH3_len_9to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)\n{\n    XXH_ASSERT(input != NULL);\n    XXH_ASSERT(secret != NULL);\n    XXH_ASSERT(9 <= len && len <= 16);\n    {   xxh_u64 const bitflip1 = (XXH_readLE64(secret+24) ^ XXH_readLE64(secret+32)) + seed;\n        xxh_u64 const bitflip2 = (XXH_readLE64(secret+40) ^ XXH_readLE64(secret+48)) - seed;\n        xxh_u64 const input_lo = XXH_readLE64(input)           ^ bitflip1;\n        xxh_u64 const input_hi = XXH_readLE64(input + len - 8) ^ bitflip2;\n        xxh_u64 const acc = len\n                          + XXH_swap64(input_lo) + input_hi\n                          + XXH3_mul128_fold64(input_lo, input_hi);\n        return XXH3_avalanche(acc);\n    }\n}\n\nXXH_FORCE_INLINE XXH_PUREF XXH64_hash_t\nXXH3_len_0to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)\n{\n    XXH_ASSERT(len <= 16);\n    {   if (XXH_likely(len >  8)) return XXH3_len_9to16_64b(input, len, secret, seed);\n        if (XXH_likely(len >= 4)) return XXH3_len_4to8_64b(input, len, secret, seed);\n        if (len) return XXH3_len_1to3_64b(input, len, secret, seed);\n        return XXH64_avalanche(seed ^ (XXH_readLE64(secret+56) ^ XXH_readLE64(secret+64)));\n    }\n}\n\n/*\n * DISCLAIMER: There are known *seed-dependent* multicollisions here due to\n * multiplication by zero, affecting hashes of lengths 17 to 240.\n *\n * However, they are very unlikely.\n *\n * Keep this in mind when using the unseeded XXH3_64bits() variant: As with all\n * unseeded non-cryptographic hashes, it does not attempt to defend itself\n * against specially crafted inputs, only random inputs.\n *\n * Compared to classic UMAC where a 1 in 2^31 chance of 4 consecutive bytes\n * cancelling out the secret is taken an arbitrary number of times (addressed\n * in XXH3_accumulate_512), this collision is very unlikely with random inputs\n * and/or proper seeding:\n *\n * This only has a 1 in 2^63 chance of 8 consecutive bytes cancelling out, in a\n * function that is only called up to 16 times per hash with up to 240 bytes of\n * input.\n *\n * This is not too bad for a non-cryptographic hash function, especially with\n * only 64 bit outputs.\n *\n * The 128-bit variant (which trades some speed for strength) is NOT affected\n * by this, although it is always a good idea to use a proper seed if you care\n * about strength.\n */\nXXH_FORCE_INLINE xxh_u64 XXH3_mix16B(const xxh_u8* XXH_RESTRICT input,\n                                     const xxh_u8* XXH_RESTRICT secret, xxh_u64 seed64)\n{\n#if defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \\\n  && defined(__i386__) && defined(__SSE2__)  /* x86 + SSE2 */ \\\n  && !defined(XXH_ENABLE_AUTOVECTORIZE)      /* Define to disable like XXH32 hack */\n    /*\n     * UGLY HACK:\n     * GCC for x86 tends to autovectorize the 128-bit multiply, resulting in\n     * slower code.\n     *\n     * By forcing seed64 into a register, we disrupt the cost model and\n     * cause it to scalarize. See `XXH32_round()`\n     *\n     * FIXME: Clang's output is still _much_ faster -- On an AMD Ryzen 3600,\n     * XXH3_64bits @ len=240 runs at 4.6 GB/s with Clang 9, but 3.3 GB/s on\n     * GCC 9.2, despite both emitting scalar code.\n     *\n     * GCC generates much better scalar code than Clang for the rest of XXH3,\n     * which is why finding a more optimal codepath is an interest.\n     */\n    XXH_COMPILER_GUARD(seed64);\n#endif\n    {   xxh_u64 const input_lo = XXH_readLE64(input);\n        xxh_u64 const input_hi = XXH_readLE64(input+8);\n        return XXH3_mul128_fold64(\n            input_lo ^ (XXH_readLE64(secret)   + seed64),\n            input_hi ^ (XXH_readLE64(secret+8) - seed64)\n        );\n    }\n}\n\n/* For mid range keys, XXH3 uses a Mum-hash variant. */\nXXH_FORCE_INLINE XXH_PUREF XXH64_hash_t\nXXH3_len_17to128_64b(const xxh_u8* XXH_RESTRICT input, size_t len,\n                     const xxh_u8* XXH_RESTRICT secret, size_t secretSize,\n                     XXH64_hash_t seed)\n{\n    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;\n    XXH_ASSERT(16 < len && len <= 128);\n\n    {   xxh_u64 acc = len * XXH_PRIME64_1;\n#if XXH_SIZE_OPT >= 1\n        /* Smaller and cleaner, but slightly slower. */\n        unsigned int i = (unsigned int)(len - 1) / 32;\n        do {\n            acc += XXH3_mix16B(input+16 * i, secret+32*i, seed);\n            acc += XXH3_mix16B(input+len-16*(i+1), secret+32*i+16, seed);\n        } while (i-- != 0);\n#else\n        if (len > 32) {\n            if (len > 64) {\n                if (len > 96) {\n                    acc += XXH3_mix16B(input+48, secret+96, seed);\n                    acc += XXH3_mix16B(input+len-64, secret+112, seed);\n                }\n                acc += XXH3_mix16B(input+32, secret+64, seed);\n                acc += XXH3_mix16B(input+len-48, secret+80, seed);\n            }\n            acc += XXH3_mix16B(input+16, secret+32, seed);\n            acc += XXH3_mix16B(input+len-32, secret+48, seed);\n        }\n        acc += XXH3_mix16B(input+0, secret+0, seed);\n        acc += XXH3_mix16B(input+len-16, secret+16, seed);\n#endif\n        return XXH3_avalanche(acc);\n    }\n}\n\nXXH_NO_INLINE XXH_PUREF XXH64_hash_t\nXXH3_len_129to240_64b(const xxh_u8* XXH_RESTRICT input, size_t len,\n                      const xxh_u8* XXH_RESTRICT secret, size_t secretSize,\n                      XXH64_hash_t seed)\n{\n    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;\n    XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX);\n\n    #define XXH3_MIDSIZE_STARTOFFSET 3\n    #define XXH3_MIDSIZE_LASTOFFSET  17\n\n    {   xxh_u64 acc = len * XXH_PRIME64_1;\n        xxh_u64 acc_end;\n        unsigned int const nbRounds = (unsigned int)len / 16;\n        unsigned int i;\n        XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX);\n        for (i=0; i<8; i++) {\n            acc += XXH3_mix16B(input+(16*i), secret+(16*i), seed);\n        }\n        /* last bytes */\n        acc_end = XXH3_mix16B(input + len - 16, secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET, seed);\n        XXH_ASSERT(nbRounds >= 8);\n        acc = XXH3_avalanche(acc);\n#if defined(__clang__)                                /* Clang */ \\\n    && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \\\n    && !defined(XXH_ENABLE_AUTOVECTORIZE)             /* Define to disable */\n        /*\n         * UGLY HACK:\n         * Clang for ARMv7-A tries to vectorize this loop, similar to GCC x86.\n         * In everywhere else, it uses scalar code.\n         *\n         * For 64->128-bit multiplies, even if the NEON was 100% optimal, it\n         * would still be slower than UMAAL (see XXH_mult64to128).\n         *\n         * Unfortunately, Clang doesn't handle the long multiplies properly and\n         * converts them to the nonexistent \"vmulq_u64\" intrinsic, which is then\n         * scalarized into an ugly mess of VMOV.32 instructions.\n         *\n         * This mess is difficult to avoid without turning autovectorization\n         * off completely, but they are usually relatively minor and/or not\n         * worth it to fix.\n         *\n         * This loop is the easiest to fix, as unlike XXH32, this pragma\n         * _actually works_ because it is a loop vectorization instead of an\n         * SLP vectorization.\n         */\n        #pragma clang loop vectorize(disable)\n#endif\n        for (i=8 ; i < nbRounds; i++) {\n            /*\n             * Prevents clang for unrolling the acc loop and interleaving with this one.\n             */\n            XXH_COMPILER_GUARD(acc);\n            acc_end += XXH3_mix16B(input+(16*i), secret+(16*(i-8)) + XXH3_MIDSIZE_STARTOFFSET, seed);\n        }\n        return XXH3_avalanche(acc + acc_end);\n    }\n}\n\n\n/* =======     Long Keys     ======= */\n\n#define XXH_STRIPE_LEN 64\n#define XXH_SECRET_CONSUME_RATE 8   /* nb of secret bytes consumed at each accumulation */\n#define XXH_ACC_NB (XXH_STRIPE_LEN / sizeof(xxh_u64))\n\n#ifdef XXH_OLD_NAMES\n#  define STRIPE_LEN XXH_STRIPE_LEN\n#  define ACC_NB XXH_ACC_NB\n#endif\n\n#ifndef XXH_PREFETCH_DIST\n#  ifdef __clang__\n#    define XXH_PREFETCH_DIST 320\n#  else\n#    if (XXH_VECTOR == XXH_AVX512)\n#      define XXH_PREFETCH_DIST 512\n#    else\n#      define XXH_PREFETCH_DIST 384\n#    endif\n#  endif  /* __clang__ */\n#endif  /* XXH_PREFETCH_DIST */\n\n/*\n * These macros are to generate an XXH3_accumulate() function.\n * The two arguments select the name suffix and target attribute.\n *\n * The name of this symbol is XXH3_accumulate_<name>() and it calls\n * XXH3_accumulate_512_<name>().\n *\n * It may be useful to hand implement this function if the compiler fails to\n * optimize the inline function.\n */\n#define XXH3_ACCUMULATE_TEMPLATE(name)                      \\\nvoid                                                        \\\nXXH3_accumulate_##name(xxh_u64* XXH_RESTRICT acc,           \\\n                       const xxh_u8* XXH_RESTRICT input,    \\\n                       const xxh_u8* XXH_RESTRICT secret,   \\\n                       size_t nbStripes)                    \\\n{                                                           \\\n    size_t n;                                               \\\n    for (n = 0; n < nbStripes; n++ ) {                      \\\n        const xxh_u8* const in = input + n*XXH_STRIPE_LEN;  \\\n        XXH_PREFETCH(in + XXH_PREFETCH_DIST);               \\\n        XXH3_accumulate_512_##name(                         \\\n                 acc,                                       \\\n                 in,                                        \\\n                 secret + n*XXH_SECRET_CONSUME_RATE);       \\\n    }                                                       \\\n}\n\n\nXXH_FORCE_INLINE void XXH_writeLE64(void* dst, xxh_u64 v64)\n{\n    if (!XXH_CPU_LITTLE_ENDIAN) v64 = XXH_swap64(v64);\n    XXH_memcpy(dst, &v64, sizeof(v64));\n}\n\n/* Several intrinsic functions below are supposed to accept __int64 as argument,\n * as documented in https://software.intel.com/sites/landingpage/IntrinsicsGuide/ .\n * However, several environments do not define __int64 type,\n * requiring a workaround.\n */\n#if !defined (__VMS) \\\n  && (defined (__cplusplus) \\\n  || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )\n    typedef int64_t xxh_i64;\n#else\n    /* the following type must have a width of 64-bit */\n    typedef long long xxh_i64;\n#endif\n\n\n/*\n * XXH3_accumulate_512 is the tightest loop for long inputs, and it is the most optimized.\n *\n * It is a hardened version of UMAC, based off of FARSH's implementation.\n *\n * This was chosen because it adapts quite well to 32-bit, 64-bit, and SIMD\n * implementations, and it is ridiculously fast.\n *\n * We harden it by mixing the original input to the accumulators as well as the product.\n *\n * This means that in the (relatively likely) case of a multiply by zero, the\n * original input is preserved.\n *\n * On 128-bit inputs, we swap 64-bit pairs when we add the input to improve\n * cross-pollination, as otherwise the upper and lower halves would be\n * essentially independent.\n *\n * This doesn't matter on 64-bit hashes since they all get merged together in\n * the end, so we skip the extra step.\n *\n * Both XXH3_64bits and XXH3_128bits use this subroutine.\n */\n\n#if (XXH_VECTOR == XXH_AVX512) \\\n     || (defined(XXH_DISPATCH_AVX512) && XXH_DISPATCH_AVX512 != 0)\n\n#ifndef XXH_TARGET_AVX512\n# define XXH_TARGET_AVX512  /* disable attribute target */\n#endif\n\nXXH_FORCE_INLINE XXH_TARGET_AVX512 void\nXXH3_accumulate_512_avx512(void* XXH_RESTRICT acc,\n                     const void* XXH_RESTRICT input,\n                     const void* XXH_RESTRICT secret)\n{\n    __m512i* const xacc = (__m512i *) acc;\n    XXH_ASSERT((((size_t)acc) & 63) == 0);\n    XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i));\n\n    {\n        /* data_vec    = input[0]; */\n        __m512i const data_vec    = _mm512_loadu_si512   (input);\n        /* key_vec     = secret[0]; */\n        __m512i const key_vec     = _mm512_loadu_si512   (secret);\n        /* data_key    = data_vec ^ key_vec; */\n        __m512i const data_key    = _mm512_xor_si512     (data_vec, key_vec);\n        /* data_key_lo = data_key >> 32; */\n        __m512i const data_key_lo = _mm512_srli_epi64 (data_key, 32);\n        /* product     = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */\n        __m512i const product     = _mm512_mul_epu32     (data_key, data_key_lo);\n        /* xacc[0] += swap(data_vec); */\n        __m512i const data_swap = _mm512_shuffle_epi32(data_vec, (_MM_PERM_ENUM)_MM_SHUFFLE(1, 0, 3, 2));\n        __m512i const sum       = _mm512_add_epi64(*xacc, data_swap);\n        /* xacc[0] += product; */\n        *xacc = _mm512_add_epi64(product, sum);\n    }\n}\nXXH_FORCE_INLINE XXH_TARGET_AVX512 XXH3_ACCUMULATE_TEMPLATE(avx512)\n\n/*\n * XXH3_scrambleAcc: Scrambles the accumulators to improve mixing.\n *\n * Multiplication isn't perfect, as explained by Google in HighwayHash:\n *\n *  // Multiplication mixes/scrambles bytes 0-7 of the 64-bit result to\n *  // varying degrees. In descending order of goodness, bytes\n *  // 3 4 2 5 1 6 0 7 have quality 228 224 164 160 100 96 36 32.\n *  // As expected, the upper and lower bytes are much worse.\n *\n * Source: https://github.com/google/highwayhash/blob/0aaf66b/highwayhash/hh_avx2.h#L291\n *\n * Since our algorithm uses a pseudorandom secret to add some variance into the\n * mix, we don't need to (or want to) mix as often or as much as HighwayHash does.\n *\n * This isn't as tight as XXH3_accumulate, but still written in SIMD to avoid\n * extraction.\n *\n * Both XXH3_64bits and XXH3_128bits use this subroutine.\n */\n\nXXH_FORCE_INLINE XXH_TARGET_AVX512 void\nXXH3_scrambleAcc_avx512(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)\n{\n    XXH_ASSERT((((size_t)acc) & 63) == 0);\n    XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i));\n    {   __m512i* const xacc = (__m512i*) acc;\n        const __m512i prime32 = _mm512_set1_epi32((int)XXH_PRIME32_1);\n\n        /* xacc[0] ^= (xacc[0] >> 47) */\n        __m512i const acc_vec     = *xacc;\n        __m512i const shifted     = _mm512_srli_epi64    (acc_vec, 47);\n        /* xacc[0] ^= secret; */\n        __m512i const key_vec     = _mm512_loadu_si512   (secret);\n        __m512i const data_key    = _mm512_ternarylogic_epi32(key_vec, acc_vec, shifted, 0x96 /* key_vec ^ acc_vec ^ shifted */);\n\n        /* xacc[0] *= XXH_PRIME32_1; */\n        __m512i const data_key_hi = _mm512_srli_epi64 (data_key, 32);\n        __m512i const prod_lo     = _mm512_mul_epu32     (data_key, prime32);\n        __m512i const prod_hi     = _mm512_mul_epu32     (data_key_hi, prime32);\n        *xacc = _mm512_add_epi64(prod_lo, _mm512_slli_epi64(prod_hi, 32));\n    }\n}\n\nXXH_FORCE_INLINE XXH_TARGET_AVX512 void\nXXH3_initCustomSecret_avx512(void* XXH_RESTRICT customSecret, xxh_u64 seed64)\n{\n    XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 63) == 0);\n    XXH_STATIC_ASSERT(XXH_SEC_ALIGN == 64);\n    XXH_ASSERT(((size_t)customSecret & 63) == 0);\n    (void)(&XXH_writeLE64);\n    {   int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m512i);\n        __m512i const seed_pos = _mm512_set1_epi64((xxh_i64)seed64);\n        __m512i const seed     = _mm512_mask_sub_epi64(seed_pos, 0xAA, _mm512_set1_epi8(0), seed_pos);\n\n        const __m512i* const src  = (const __m512i*) ((const void*) XXH3_kSecret);\n              __m512i* const dest = (      __m512i*) customSecret;\n        int i;\n        XXH_ASSERT(((size_t)src & 63) == 0); /* control alignment */\n        XXH_ASSERT(((size_t)dest & 63) == 0);\n        for (i=0; i < nbRounds; ++i) {\n            dest[i] = _mm512_add_epi64(_mm512_load_si512(src + i), seed);\n    }   }\n}\n\n#endif\n\n#if (XXH_VECTOR == XXH_AVX2) \\\n    || (defined(XXH_DISPATCH_AVX2) && XXH_DISPATCH_AVX2 != 0)\n\n#ifndef XXH_TARGET_AVX2\n# define XXH_TARGET_AVX2  /* disable attribute target */\n#endif\n\nXXH_FORCE_INLINE XXH_TARGET_AVX2 void\nXXH3_accumulate_512_avx2( void* XXH_RESTRICT acc,\n                    const void* XXH_RESTRICT input,\n                    const void* XXH_RESTRICT secret)\n{\n    XXH_ASSERT((((size_t)acc) & 31) == 0);\n    {   __m256i* const xacc    =       (__m256i *) acc;\n        /* Unaligned. This is mainly for pointer arithmetic, and because\n         * _mm256_loadu_si256 requires  a const __m256i * pointer for some reason. */\n        const         __m256i* const xinput  = (const __m256i *) input;\n        /* Unaligned. This is mainly for pointer arithmetic, and because\n         * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */\n        const         __m256i* const xsecret = (const __m256i *) secret;\n\n        size_t i;\n        for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) {\n            /* data_vec    = xinput[i]; */\n            __m256i const data_vec    = _mm256_loadu_si256    (xinput+i);\n            /* key_vec     = xsecret[i]; */\n            __m256i const key_vec     = _mm256_loadu_si256   (xsecret+i);\n            /* data_key    = data_vec ^ key_vec; */\n            __m256i const data_key    = _mm256_xor_si256     (data_vec, key_vec);\n            /* data_key_lo = data_key >> 32; */\n            __m256i const data_key_lo = _mm256_srli_epi64 (data_key, 32);\n            /* product     = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */\n            __m256i const product     = _mm256_mul_epu32     (data_key, data_key_lo);\n            /* xacc[i] += swap(data_vec); */\n            __m256i const data_swap = _mm256_shuffle_epi32(data_vec, _MM_SHUFFLE(1, 0, 3, 2));\n            __m256i const sum       = _mm256_add_epi64(xacc[i], data_swap);\n            /* xacc[i] += product; */\n            xacc[i] = _mm256_add_epi64(product, sum);\n    }   }\n}\nXXH_FORCE_INLINE XXH_TARGET_AVX2 XXH3_ACCUMULATE_TEMPLATE(avx2)\n\nXXH_FORCE_INLINE XXH_TARGET_AVX2 void\nXXH3_scrambleAcc_avx2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)\n{\n    XXH_ASSERT((((size_t)acc) & 31) == 0);\n    {   __m256i* const xacc = (__m256i*) acc;\n        /* Unaligned. This is mainly for pointer arithmetic, and because\n         * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */\n        const         __m256i* const xsecret = (const __m256i *) secret;\n        const __m256i prime32 = _mm256_set1_epi32((int)XXH_PRIME32_1);\n\n        size_t i;\n        for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) {\n            /* xacc[i] ^= (xacc[i] >> 47) */\n            __m256i const acc_vec     = xacc[i];\n            __m256i const shifted     = _mm256_srli_epi64    (acc_vec, 47);\n            __m256i const data_vec    = _mm256_xor_si256     (acc_vec, shifted);\n            /* xacc[i] ^= xsecret; */\n            __m256i const key_vec     = _mm256_loadu_si256   (xsecret+i);\n            __m256i const data_key    = _mm256_xor_si256     (data_vec, key_vec);\n\n            /* xacc[i] *= XXH_PRIME32_1; */\n            __m256i const data_key_hi = _mm256_srli_epi64 (data_key, 32);\n            __m256i const prod_lo     = _mm256_mul_epu32     (data_key, prime32);\n            __m256i const prod_hi     = _mm256_mul_epu32     (data_key_hi, prime32);\n            xacc[i] = _mm256_add_epi64(prod_lo, _mm256_slli_epi64(prod_hi, 32));\n        }\n    }\n}\n\nXXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_initCustomSecret_avx2(void* XXH_RESTRICT customSecret, xxh_u64 seed64)\n{\n    XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 31) == 0);\n    XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE / sizeof(__m256i)) == 6);\n    XXH_STATIC_ASSERT(XXH_SEC_ALIGN <= 64);\n    (void)(&XXH_writeLE64);\n    XXH_PREFETCH(customSecret);\n    {   __m256i const seed = _mm256_set_epi64x((xxh_i64)(0U - seed64), (xxh_i64)seed64, (xxh_i64)(0U - seed64), (xxh_i64)seed64);\n\n        const __m256i* const src  = (const __m256i*) ((const void*) XXH3_kSecret);\n              __m256i*       dest = (      __m256i*) customSecret;\n\n#       if defined(__GNUC__) || defined(__clang__)\n        /*\n         * On GCC & Clang, marking 'dest' as modified will cause the compiler:\n         *   - do not extract the secret from sse registers in the internal loop\n         *   - use less common registers, and avoid pushing these reg into stack\n         */\n        XXH_COMPILER_GUARD(dest);\n#       endif\n        XXH_ASSERT(((size_t)src & 31) == 0); /* control alignment */\n        XXH_ASSERT(((size_t)dest & 31) == 0);\n\n        /* GCC -O2 need unroll loop manually */\n        dest[0] = _mm256_add_epi64(_mm256_load_si256(src+0), seed);\n        dest[1] = _mm256_add_epi64(_mm256_load_si256(src+1), seed);\n        dest[2] = _mm256_add_epi64(_mm256_load_si256(src+2), seed);\n        dest[3] = _mm256_add_epi64(_mm256_load_si256(src+3), seed);\n        dest[4] = _mm256_add_epi64(_mm256_load_si256(src+4), seed);\n        dest[5] = _mm256_add_epi64(_mm256_load_si256(src+5), seed);\n    }\n}\n\n#endif\n\n/* x86dispatch always generates SSE2 */\n#if (XXH_VECTOR == XXH_SSE2) || defined(XXH_X86DISPATCH)\n\n#ifndef XXH_TARGET_SSE2\n# define XXH_TARGET_SSE2  /* disable attribute target */\n#endif\n\nXXH_FORCE_INLINE XXH_TARGET_SSE2 void\nXXH3_accumulate_512_sse2( void* XXH_RESTRICT acc,\n                    const void* XXH_RESTRICT input,\n                    const void* XXH_RESTRICT secret)\n{\n    /* SSE2 is just a half-scale version of the AVX2 version. */\n    XXH_ASSERT((((size_t)acc) & 15) == 0);\n    {   __m128i* const xacc    =       (__m128i *) acc;\n        /* Unaligned. This is mainly for pointer arithmetic, and because\n         * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */\n        const         __m128i* const xinput  = (const __m128i *) input;\n        /* Unaligned. This is mainly for pointer arithmetic, and because\n         * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */\n        const         __m128i* const xsecret = (const __m128i *) secret;\n\n        size_t i;\n        for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) {\n            /* data_vec    = xinput[i]; */\n            __m128i const data_vec    = _mm_loadu_si128   (xinput+i);\n            /* key_vec     = xsecret[i]; */\n            __m128i const key_vec     = _mm_loadu_si128   (xsecret+i);\n            /* data_key    = data_vec ^ key_vec; */\n            __m128i const data_key    = _mm_xor_si128     (data_vec, key_vec);\n            /* data_key_lo = data_key >> 32; */\n            __m128i const data_key_lo = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));\n            /* product     = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */\n            __m128i const product     = _mm_mul_epu32     (data_key, data_key_lo);\n            /* xacc[i] += swap(data_vec); */\n            __m128i const data_swap = _mm_shuffle_epi32(data_vec, _MM_SHUFFLE(1,0,3,2));\n            __m128i const sum       = _mm_add_epi64(xacc[i], data_swap);\n            /* xacc[i] += product; */\n            xacc[i] = _mm_add_epi64(product, sum);\n    }   }\n}\nXXH_FORCE_INLINE XXH_TARGET_SSE2 XXH3_ACCUMULATE_TEMPLATE(sse2)\n\nXXH_FORCE_INLINE XXH_TARGET_SSE2 void\nXXH3_scrambleAcc_sse2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)\n{\n    XXH_ASSERT((((size_t)acc) & 15) == 0);\n    {   __m128i* const xacc = (__m128i*) acc;\n        /* Unaligned. This is mainly for pointer arithmetic, and because\n         * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */\n        const         __m128i* const xsecret = (const __m128i *) secret;\n        const __m128i prime32 = _mm_set1_epi32((int)XXH_PRIME32_1);\n\n        size_t i;\n        for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) {\n            /* xacc[i] ^= (xacc[i] >> 47) */\n            __m128i const acc_vec     = xacc[i];\n            __m128i const shifted     = _mm_srli_epi64    (acc_vec, 47);\n            __m128i const data_vec    = _mm_xor_si128     (acc_vec, shifted);\n            /* xacc[i] ^= xsecret[i]; */\n            __m128i const key_vec     = _mm_loadu_si128   (xsecret+i);\n            __m128i const data_key    = _mm_xor_si128     (data_vec, key_vec);\n\n            /* xacc[i] *= XXH_PRIME32_1; */\n            __m128i const data_key_hi = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));\n            __m128i const prod_lo     = _mm_mul_epu32     (data_key, prime32);\n            __m128i const prod_hi     = _mm_mul_epu32     (data_key_hi, prime32);\n            xacc[i] = _mm_add_epi64(prod_lo, _mm_slli_epi64(prod_hi, 32));\n        }\n    }\n}\n\nXXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_initCustomSecret_sse2(void* XXH_RESTRICT customSecret, xxh_u64 seed64)\n{\n    XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0);\n    (void)(&XXH_writeLE64);\n    {   int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m128i);\n\n#       if defined(_MSC_VER) && defined(_M_IX86) && _MSC_VER < 1900\n        /* MSVC 32bit mode does not support _mm_set_epi64x before 2015 */\n        XXH_ALIGN(16) const xxh_i64 seed64x2[2] = { (xxh_i64)seed64, (xxh_i64)(0U - seed64) };\n        __m128i const seed = _mm_load_si128((__m128i const*)seed64x2);\n#       else\n        __m128i const seed = _mm_set_epi64x((xxh_i64)(0U - seed64), (xxh_i64)seed64);\n#       endif\n        int i;\n\n        const void* const src16 = XXH3_kSecret;\n        __m128i* dst16 = (__m128i*) customSecret;\n#       if defined(__GNUC__) || defined(__clang__)\n        /*\n         * On GCC & Clang, marking 'dest' as modified will cause the compiler:\n         *   - do not extract the secret from sse registers in the internal loop\n         *   - use less common registers, and avoid pushing these reg into stack\n         */\n        XXH_COMPILER_GUARD(dst16);\n#       endif\n        XXH_ASSERT(((size_t)src16 & 15) == 0); /* control alignment */\n        XXH_ASSERT(((size_t)dst16 & 15) == 0);\n\n        for (i=0; i < nbRounds; ++i) {\n            dst16[i] = _mm_add_epi64(_mm_load_si128((const __m128i *)src16+i), seed);\n    }   }\n}\n\n#endif\n\n#if (XXH_VECTOR == XXH_NEON)\n\n/* forward declarations for the scalar routines */\nXXH_FORCE_INLINE void\nXXH3_scalarRound(void* XXH_RESTRICT acc, void const* XXH_RESTRICT input,\n                 void const* XXH_RESTRICT secret, size_t lane);\n\nXXH_FORCE_INLINE void\nXXH3_scalarScrambleRound(void* XXH_RESTRICT acc,\n                         void const* XXH_RESTRICT secret, size_t lane);\n\n/*!\n * @internal\n * @brief The bulk processing loop for NEON and WASM SIMD128.\n *\n * The NEON code path is actually partially scalar when running on AArch64. This\n * is to optimize the pipelining and can have up to 15% speedup depending on the\n * CPU, and it also mitigates some GCC codegen issues.\n *\n * @see XXH3_NEON_LANES for configuring this and details about this optimization.\n *\n * NEON's 32-bit to 64-bit long multiply takes a half vector of 32-bit\n * integers instead of the other platforms which mask full 64-bit vectors,\n * so the setup is more complicated than just shifting right.\n *\n * Additionally, there is an optimization for 4 lanes at once noted below.\n *\n * Since, as stated, the most optimal amount of lanes for Cortexes is 6,\n * there needs to be *three* versions of the accumulate operation used\n * for the remaining 2 lanes.\n *\n * WASM's SIMD128 uses SIMDe's arm_neon.h polyfill because the intrinsics overlap\n * nearly perfectly.\n */\n\nXXH_FORCE_INLINE void\nXXH3_accumulate_512_neon( void* XXH_RESTRICT acc,\n                    const void* XXH_RESTRICT input,\n                    const void* XXH_RESTRICT secret)\n{\n    XXH_ASSERT((((size_t)acc) & 15) == 0);\n    XXH_STATIC_ASSERT(XXH3_NEON_LANES > 0 && XXH3_NEON_LANES <= XXH_ACC_NB && XXH3_NEON_LANES % 2 == 0);\n    {   /* GCC for darwin arm64 does not like aliasing here */\n        xxh_aliasing_uint64x2_t* const xacc = (xxh_aliasing_uint64x2_t*) acc;\n        /* We don't use a uint32x4_t pointer because it causes bus errors on ARMv7. */\n        uint8_t const* xinput = (const uint8_t *) input;\n        uint8_t const* xsecret  = (const uint8_t *) secret;\n\n        size_t i;\n#ifdef __wasm_simd128__\n        /*\n         * On WASM SIMD128, Clang emits direct address loads when XXH3_kSecret\n         * is constant propagated, which results in it converting it to this\n         * inside the loop:\n         *\n         *    a = v128.load(XXH3_kSecret +  0 + $secret_offset, offset = 0)\n         *    b = v128.load(XXH3_kSecret + 16 + $secret_offset, offset = 0)\n         *    ...\n         *\n         * This requires a full 32-bit address immediate (and therefore a 6 byte\n         * instruction) as well as an add for each offset.\n         *\n         * Putting an asm guard prevents it from folding (at the cost of losing\n         * the alignment hint), and uses the free offset in `v128.load` instead\n         * of adding secret_offset each time which overall reduces code size by\n         * about a kilobyte and improves performance.\n         */\n        XXH_COMPILER_GUARD(xsecret);\n#endif\n        /* Scalar lanes use the normal scalarRound routine */\n        for (i = XXH3_NEON_LANES; i < XXH_ACC_NB; i++) {\n            XXH3_scalarRound(acc, input, secret, i);\n        }\n        i = 0;\n        /* 4 NEON lanes at a time. */\n        for (; i+1 < XXH3_NEON_LANES / 2; i+=2) {\n            /* data_vec = xinput[i]; */\n            uint64x2_t data_vec_1 = XXH_vld1q_u64(xinput  + (i * 16));\n            uint64x2_t data_vec_2 = XXH_vld1q_u64(xinput  + ((i+1) * 16));\n            /* key_vec  = xsecret[i];  */\n            uint64x2_t key_vec_1  = XXH_vld1q_u64(xsecret + (i * 16));\n            uint64x2_t key_vec_2  = XXH_vld1q_u64(xsecret + ((i+1) * 16));\n            /* data_swap = swap(data_vec) */\n            uint64x2_t data_swap_1 = vextq_u64(data_vec_1, data_vec_1, 1);\n            uint64x2_t data_swap_2 = vextq_u64(data_vec_2, data_vec_2, 1);\n            /* data_key = data_vec ^ key_vec; */\n            uint64x2_t data_key_1 = veorq_u64(data_vec_1, key_vec_1);\n            uint64x2_t data_key_2 = veorq_u64(data_vec_2, key_vec_2);\n\n            /*\n             * If we reinterpret the 64x2 vectors as 32x4 vectors, we can use a\n             * de-interleave operation for 4 lanes in 1 step with `vuzpq_u32` to\n             * get one vector with the low 32 bits of each lane, and one vector\n             * with the high 32 bits of each lane.\n             *\n             * The intrinsic returns a double vector because the original ARMv7-a\n             * instruction modified both arguments in place. AArch64 and SIMD128 emit\n             * two instructions from this intrinsic.\n             *\n             *  [ dk11L | dk11H | dk12L | dk12H ] -> [ dk11L | dk12L | dk21L | dk22L ]\n             *  [ dk21L | dk21H | dk22L | dk22H ] -> [ dk11H | dk12H | dk21H | dk22H ]\n             */\n            uint32x4x2_t unzipped = vuzpq_u32(\n                vreinterpretq_u32_u64(data_key_1),\n                vreinterpretq_u32_u64(data_key_2)\n            );\n            /* data_key_lo = data_key & 0xFFFFFFFF */\n            uint32x4_t data_key_lo = unzipped.val[0];\n            /* data_key_hi = data_key >> 32 */\n            uint32x4_t data_key_hi = unzipped.val[1];\n            /*\n             * Then, we can split the vectors horizontally and multiply which, as for most\n             * widening intrinsics, have a variant that works on both high half vectors\n             * for free on AArch64. A similar instruction is available on SIMD128.\n             *\n             * sum = data_swap + (u64x2) data_key_lo * (u64x2) data_key_hi\n             */\n            uint64x2_t sum_1 = XXH_vmlal_low_u32(data_swap_1, data_key_lo, data_key_hi);\n            uint64x2_t sum_2 = XXH_vmlal_high_u32(data_swap_2, data_key_lo, data_key_hi);\n            /*\n             * Clang reorders\n             *    a += b * c;     // umlal   swap.2d, dkl.2s, dkh.2s\n             *    c += a;         // add     acc.2d, acc.2d, swap.2d\n             * to\n             *    c += a;         // add     acc.2d, acc.2d, swap.2d\n             *    c += b * c;     // umlal   acc.2d, dkl.2s, dkh.2s\n             *\n             * While it would make sense in theory since the addition is faster,\n             * for reasons likely related to umlal being limited to certain NEON\n             * pipelines, this is worse. A compiler guard fixes this.\n             */\n            XXH_COMPILER_GUARD_CLANG_NEON(sum_1);\n            XXH_COMPILER_GUARD_CLANG_NEON(sum_2);\n            /* xacc[i] = acc_vec + sum; */\n            xacc[i]   = vaddq_u64(xacc[i], sum_1);\n            xacc[i+1] = vaddq_u64(xacc[i+1], sum_2);\n        }\n        /* Operate on the remaining NEON lanes 2 at a time. */\n        for (; i < XXH3_NEON_LANES / 2; i++) {\n            /* data_vec = xinput[i]; */\n            uint64x2_t data_vec = XXH_vld1q_u64(xinput  + (i * 16));\n            /* key_vec  = xsecret[i];  */\n            uint64x2_t key_vec  = XXH_vld1q_u64(xsecret + (i * 16));\n            /* acc_vec_2 = swap(data_vec) */\n            uint64x2_t data_swap = vextq_u64(data_vec, data_vec, 1);\n            /* data_key = data_vec ^ key_vec; */\n            uint64x2_t data_key = veorq_u64(data_vec, key_vec);\n            /* For two lanes, just use VMOVN and VSHRN. */\n            /* data_key_lo = data_key & 0xFFFFFFFF; */\n            uint32x2_t data_key_lo = vmovn_u64(data_key);\n            /* data_key_hi = data_key >> 32; */\n            uint32x2_t data_key_hi = vshrn_n_u64(data_key, 32);\n            /* sum = data_swap + (u64x2) data_key_lo * (u64x2) data_key_hi; */\n            uint64x2_t sum = vmlal_u32(data_swap, data_key_lo, data_key_hi);\n            /* Same Clang workaround as before */\n            XXH_COMPILER_GUARD_CLANG_NEON(sum);\n            /* xacc[i] = acc_vec + sum; */\n            xacc[i] = vaddq_u64 (xacc[i], sum);\n        }\n    }\n}\nXXH_FORCE_INLINE XXH3_ACCUMULATE_TEMPLATE(neon)\n\nXXH_FORCE_INLINE void\nXXH3_scrambleAcc_neon(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)\n{\n    XXH_ASSERT((((size_t)acc) & 15) == 0);\n\n    {   xxh_aliasing_uint64x2_t* xacc       = (xxh_aliasing_uint64x2_t*) acc;\n        uint8_t const* xsecret = (uint8_t const*) secret;\n\n        size_t i;\n        /* WASM uses operator overloads and doesn't need these. */\n#ifndef __wasm_simd128__\n        /* { prime32_1, prime32_1 } */\n        uint32x2_t const kPrimeLo = vdup_n_u32(XXH_PRIME32_1);\n        /* { 0, prime32_1, 0, prime32_1 } */\n        uint32x4_t const kPrimeHi = vreinterpretq_u32_u64(vdupq_n_u64((xxh_u64)XXH_PRIME32_1 << 32));\n#endif\n\n        /* AArch64 uses both scalar and neon at the same time */\n        for (i = XXH3_NEON_LANES; i < XXH_ACC_NB; i++) {\n            XXH3_scalarScrambleRound(acc, secret, i);\n        }\n        for (i=0; i < XXH3_NEON_LANES / 2; i++) {\n            /* xacc[i] ^= (xacc[i] >> 47); */\n            uint64x2_t acc_vec  = xacc[i];\n            uint64x2_t shifted  = vshrq_n_u64(acc_vec, 47);\n            uint64x2_t data_vec = veorq_u64(acc_vec, shifted);\n\n            /* xacc[i] ^= xsecret[i]; */\n            uint64x2_t key_vec  = XXH_vld1q_u64(xsecret + (i * 16));\n            uint64x2_t data_key = veorq_u64(data_vec, key_vec);\n            /* xacc[i] *= XXH_PRIME32_1 */\n#ifdef __wasm_simd128__\n            /* SIMD128 has multiply by u64x2, use it instead of expanding and scalarizing */\n            xacc[i] = data_key * XXH_PRIME32_1;\n#else\n            /*\n             * Expanded version with portable NEON intrinsics\n             *\n             *    lo(x) * lo(y) + (hi(x) * lo(y) << 32)\n             *\n             * prod_hi = hi(data_key) * lo(prime) << 32\n             *\n             * Since we only need 32 bits of this multiply a trick can be used, reinterpreting the vector\n             * as a uint32x4_t and multiplying by { 0, prime, 0, prime } to cancel out the unwanted bits\n             * and avoid the shift.\n             */\n            uint32x4_t prod_hi = vmulq_u32 (vreinterpretq_u32_u64(data_key), kPrimeHi);\n            /* Extract low bits for vmlal_u32  */\n            uint32x2_t data_key_lo = vmovn_u64(data_key);\n            /* xacc[i] = prod_hi + lo(data_key) * XXH_PRIME32_1; */\n            xacc[i] = vmlal_u32(vreinterpretq_u64_u32(prod_hi), data_key_lo, kPrimeLo);\n#endif\n        }\n    }\n}\n#endif\n\n#if (XXH_VECTOR == XXH_VSX)\n\nXXH_FORCE_INLINE void\nXXH3_accumulate_512_vsx(  void* XXH_RESTRICT acc,\n                    const void* XXH_RESTRICT input,\n                    const void* XXH_RESTRICT secret)\n{\n    /* presumed aligned */\n    xxh_aliasing_u64x2* const xacc = (xxh_aliasing_u64x2*) acc;\n    xxh_u8 const* const xinput   = (xxh_u8 const*) input;   /* no alignment restriction */\n    xxh_u8 const* const xsecret  = (xxh_u8 const*) secret;    /* no alignment restriction */\n    xxh_u64x2 const v32 = { 32, 32 };\n    size_t i;\n    for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) {\n        /* data_vec = xinput[i]; */\n        xxh_u64x2 const data_vec = XXH_vec_loadu(xinput + 16*i);\n        /* key_vec = xsecret[i]; */\n        xxh_u64x2 const key_vec  = XXH_vec_loadu(xsecret + 16*i);\n        xxh_u64x2 const data_key = data_vec ^ key_vec;\n        /* shuffled = (data_key << 32) | (data_key >> 32); */\n        xxh_u32x4 const shuffled = (xxh_u32x4)vec_rl(data_key, v32);\n        /* product = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)shuffled & 0xFFFFFFFF); */\n        xxh_u64x2 const product  = XXH_vec_mulo((xxh_u32x4)data_key, shuffled);\n        /* acc_vec = xacc[i]; */\n        xxh_u64x2 acc_vec        = xacc[i];\n        acc_vec += product;\n\n        /* swap high and low halves */\n#ifdef __s390x__\n        acc_vec += vec_permi(data_vec, data_vec, 2);\n#else\n        acc_vec += vec_xxpermdi(data_vec, data_vec, 2);\n#endif\n        xacc[i] = acc_vec;\n    }\n}\nXXH_FORCE_INLINE XXH3_ACCUMULATE_TEMPLATE(vsx)\n\nXXH_FORCE_INLINE void\nXXH3_scrambleAcc_vsx(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)\n{\n    XXH_ASSERT((((size_t)acc) & 15) == 0);\n\n    {   xxh_aliasing_u64x2* const xacc = (xxh_aliasing_u64x2*) acc;\n        const xxh_u8* const xsecret = (const xxh_u8*) secret;\n        /* constants */\n        xxh_u64x2 const v32  = { 32, 32 };\n        xxh_u64x2 const v47 = { 47, 47 };\n        xxh_u32x4 const prime = { XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1 };\n        size_t i;\n        for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) {\n            /* xacc[i] ^= (xacc[i] >> 47); */\n            xxh_u64x2 const acc_vec  = xacc[i];\n            xxh_u64x2 const data_vec = acc_vec ^ (acc_vec >> v47);\n\n            /* xacc[i] ^= xsecret[i]; */\n            xxh_u64x2 const key_vec  = XXH_vec_loadu(xsecret + 16*i);\n            xxh_u64x2 const data_key = data_vec ^ key_vec;\n\n            /* xacc[i] *= XXH_PRIME32_1 */\n            /* prod_lo = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)prime & 0xFFFFFFFF);  */\n            xxh_u64x2 const prod_even  = XXH_vec_mule((xxh_u32x4)data_key, prime);\n            /* prod_hi = ((xxh_u64x2)data_key >> 32) * ((xxh_u64x2)prime >> 32);  */\n            xxh_u64x2 const prod_odd  = XXH_vec_mulo((xxh_u32x4)data_key, prime);\n            xacc[i] = prod_odd + (prod_even << v32);\n    }   }\n}\n\n#endif\n\n#if (XXH_VECTOR == XXH_SVE)\n\nXXH_FORCE_INLINE void\nXXH3_accumulate_512_sve( void* XXH_RESTRICT acc,\n                   const void* XXH_RESTRICT input,\n                   const void* XXH_RESTRICT secret)\n{\n    uint64_t *xacc = (uint64_t *)acc;\n    const uint64_t *xinput = (const uint64_t *)(const void *)input;\n    const uint64_t *xsecret = (const uint64_t *)(const void *)secret;\n    svuint64_t kSwap = sveor_n_u64_z(svptrue_b64(), svindex_u64(0, 1), 1);\n    uint64_t element_count = svcntd();\n    if (element_count >= 8) {\n        svbool_t mask = svptrue_pat_b64(SV_VL8);\n        svuint64_t vacc = svld1_u64(mask, xacc);\n        ACCRND(vacc, 0);\n        svst1_u64(mask, xacc, vacc);\n    } else if (element_count == 2) {   /* sve128 */\n        svbool_t mask = svptrue_pat_b64(SV_VL2);\n        svuint64_t acc0 = svld1_u64(mask, xacc + 0);\n        svuint64_t acc1 = svld1_u64(mask, xacc + 2);\n        svuint64_t acc2 = svld1_u64(mask, xacc + 4);\n        svuint64_t acc3 = svld1_u64(mask, xacc + 6);\n        ACCRND(acc0, 0);\n        ACCRND(acc1, 2);\n        ACCRND(acc2, 4);\n        ACCRND(acc3, 6);\n        svst1_u64(mask, xacc + 0, acc0);\n        svst1_u64(mask, xacc + 2, acc1);\n        svst1_u64(mask, xacc + 4, acc2);\n        svst1_u64(mask, xacc + 6, acc3);\n    } else {\n        svbool_t mask = svptrue_pat_b64(SV_VL4);\n        svuint64_t acc0 = svld1_u64(mask, xacc + 0);\n        svuint64_t acc1 = svld1_u64(mask, xacc + 4);\n        ACCRND(acc0, 0);\n        ACCRND(acc1, 4);\n        svst1_u64(mask, xacc + 0, acc0);\n        svst1_u64(mask, xacc + 4, acc1);\n    }\n}\n\nXXH_FORCE_INLINE void\nXXH3_accumulate_sve(xxh_u64* XXH_RESTRICT acc,\n               const xxh_u8* XXH_RESTRICT input,\n               const xxh_u8* XXH_RESTRICT secret,\n               size_t nbStripes)\n{\n    if (nbStripes != 0) {\n        uint64_t *xacc = (uint64_t *)acc;\n        const uint64_t *xinput = (const uint64_t *)(const void *)input;\n        const uint64_t *xsecret = (const uint64_t *)(const void *)secret;\n        svuint64_t kSwap = sveor_n_u64_z(svptrue_b64(), svindex_u64(0, 1), 1);\n        uint64_t element_count = svcntd();\n        if (element_count >= 8) {\n            svbool_t mask = svptrue_pat_b64(SV_VL8);\n            svuint64_t vacc = svld1_u64(mask, xacc + 0);\n            do {\n                /* svprfd(svbool_t, void *, enum svfprop); */\n                svprfd(mask, xinput + 128, SV_PLDL1STRM);\n                ACCRND(vacc, 0);\n                xinput += 8;\n                xsecret += 1;\n                nbStripes--;\n           } while (nbStripes != 0);\n\n           svst1_u64(mask, xacc + 0, vacc);\n        } else if (element_count == 2) { /* sve128 */\n            svbool_t mask = svptrue_pat_b64(SV_VL2);\n            svuint64_t acc0 = svld1_u64(mask, xacc + 0);\n            svuint64_t acc1 = svld1_u64(mask, xacc + 2);\n            svuint64_t acc2 = svld1_u64(mask, xacc + 4);\n            svuint64_t acc3 = svld1_u64(mask, xacc + 6);\n            do {\n                svprfd(mask, xinput + 128, SV_PLDL1STRM);\n                ACCRND(acc0, 0);\n                ACCRND(acc1, 2);\n                ACCRND(acc2, 4);\n                ACCRND(acc3, 6);\n                xinput += 8;\n                xsecret += 1;\n                nbStripes--;\n           } while (nbStripes != 0);\n\n           svst1_u64(mask, xacc + 0, acc0);\n           svst1_u64(mask, xacc + 2, acc1);\n           svst1_u64(mask, xacc + 4, acc2);\n           svst1_u64(mask, xacc + 6, acc3);\n        } else {\n            svbool_t mask = svptrue_pat_b64(SV_VL4);\n            svuint64_t acc0 = svld1_u64(mask, xacc + 0);\n            svuint64_t acc1 = svld1_u64(mask, xacc + 4);\n            do {\n                svprfd(mask, xinput + 128, SV_PLDL1STRM);\n                ACCRND(acc0, 0);\n                ACCRND(acc1, 4);\n                xinput += 8;\n                xsecret += 1;\n                nbStripes--;\n           } while (nbStripes != 0);\n\n           svst1_u64(mask, xacc + 0, acc0);\n           svst1_u64(mask, xacc + 4, acc1);\n       }\n    }\n}\n\n#endif\n\n#if (XXH_VECTOR == XXH_LSX)\n#define _LSX_SHUFFLE(z, y, x, w) (((z) << 6) | ((y) << 4) | ((x) << 2) | (w))\n\nXXH_FORCE_INLINE void\nXXH3_accumulate_512_lsx( void* XXH_RESTRICT acc,\n                    const void* XXH_RESTRICT input,\n                    const void* XXH_RESTRICT secret)\n{\n    XXH_ASSERT((((size_t)acc) & 15) == 0);\n    {\n        __m128i* const xacc    =       (__m128i *) acc;\n        const __m128i* const xinput  = (const __m128i *) input;\n        const __m128i* const xsecret = (const __m128i *) secret;\n\n        for (size_t i = 0; i < XXH_STRIPE_LEN / sizeof(__m128i); i++) {\n            /* data_vec = xinput[i]; */\n            __m128i const data_vec = __lsx_vld(xinput + i, 0);\n            /* key_vec = xsecret[i]; */\n            __m128i const key_vec = __lsx_vld(xsecret + i, 0);\n            /* data_key = data_vec ^ key_vec; */\n            __m128i const data_key = __lsx_vxor_v(data_vec, key_vec);\n            /* data_key_lo = data_key >> 32; */\n            __m128i const data_key_lo = __lsx_vsrli_d(data_key, 32);\n            // __m128i const data_key_lo = __lsx_vsrli_d(data_key, 32);\n            /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */\n            __m128i const product = __lsx_vmulwev_d_wu(data_key, data_key_lo);\n            /* xacc[i] += swap(data_vec); */\n            __m128i const data_swap = __lsx_vshuf4i_w(data_vec, _LSX_SHUFFLE(1, 0, 3, 2));\n            __m128i const sum = __lsx_vadd_d(xacc[i], data_swap);\n            /* xacc[i] += product; */\n            xacc[i] = __lsx_vadd_d(product, sum);\n        }\n    }\n}\nXXH_FORCE_INLINE XXH3_ACCUMULATE_TEMPLATE(lsx)\n\nXXH_FORCE_INLINE void\nXXH3_scrambleAcc_lsx(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)\n{\n    XXH_ASSERT((((size_t)acc) & 15) == 0);\n    {\n        __m128i* const xacc = (__m128i*) acc;\n        const __m128i* const xsecret = (const __m128i *) secret;\n        const __m128i prime32 = __lsx_vreplgr2vr_w((int)XXH_PRIME32_1);\n\n        for (size_t i = 0; i < XXH_STRIPE_LEN / sizeof(__m128i); i++) {\n            /* xacc[i] ^= (xacc[i] >> 47) */\n            __m128i const acc_vec = xacc[i];\n            __m128i const shifted = __lsx_vsrli_d(acc_vec, 47);\n            __m128i const data_vec = __lsx_vxor_v(acc_vec, shifted);\n            /* xacc[i] ^= xsecret[i]; */\n            __m128i const key_vec = __lsx_vld(xsecret + i, 0);\n            __m128i const data_key = __lsx_vxor_v(data_vec, key_vec);\n\n            /* xacc[i] *= XXH_PRIME32_1; */\n            __m128i const data_key_hi = __lsx_vsrli_d(data_key, 32);\n            __m128i const prod_lo = __lsx_vmulwev_d_wu(data_key, prime32);\n            __m128i const prod_hi = __lsx_vmulwev_d_wu(data_key_hi, prime32);\n            xacc[i] = __lsx_vadd_d(prod_lo, __lsx_vslli_d(prod_hi, 32));\n        }\n    }\n}\n\n#endif\n\n/* scalar variants - universal */\n\n#if defined(__aarch64__) && (defined(__GNUC__) || defined(__clang__))\n/*\n * In XXH3_scalarRound(), GCC and Clang have a similar codegen issue, where they\n * emit an excess mask and a full 64-bit multiply-add (MADD X-form).\n *\n * While this might not seem like much, as AArch64 is a 64-bit architecture, only\n * big Cortex designs have a full 64-bit multiplier.\n *\n * On the little cores, the smaller 32-bit multiplier is used, and full 64-bit\n * multiplies expand to 2-3 multiplies in microcode. This has a major penalty\n * of up to 4 latency cycles and 2 stall cycles in the multiply pipeline.\n *\n * Thankfully, AArch64 still provides the 32-bit long multiply-add (UMADDL) which does\n * not have this penalty and does the mask automatically.\n */\nXXH_FORCE_INLINE xxh_u64\nXXH_mult32to64_add64(xxh_u64 lhs, xxh_u64 rhs, xxh_u64 acc)\n{\n    xxh_u64 ret;\n    /* note: %x = 64-bit register, %w = 32-bit register */\n    __asm__(\"umaddl %x0, %w1, %w2, %x3\" : \"=r\" (ret) : \"r\" (lhs), \"r\" (rhs), \"r\" (acc));\n    return ret;\n}\n#else\nXXH_FORCE_INLINE xxh_u64\nXXH_mult32to64_add64(xxh_u64 lhs, xxh_u64 rhs, xxh_u64 acc)\n{\n    return XXH_mult32to64((xxh_u32)lhs, (xxh_u32)rhs) + acc;\n}\n#endif\n\n/*!\n * @internal\n * @brief Scalar round for @ref XXH3_accumulate_512_scalar().\n *\n * This is extracted to its own function because the NEON path uses a combination\n * of NEON and scalar.\n */\nXXH_FORCE_INLINE void\nXXH3_scalarRound(void* XXH_RESTRICT acc,\n                 void const* XXH_RESTRICT input,\n                 void const* XXH_RESTRICT secret,\n                 size_t lane)\n{\n    xxh_u64* xacc = (xxh_u64*) acc;\n    xxh_u8 const* xinput  = (xxh_u8 const*) input;\n    xxh_u8 const* xsecret = (xxh_u8 const*) secret;\n    XXH_ASSERT(lane < XXH_ACC_NB);\n    XXH_ASSERT(((size_t)acc & (XXH_ACC_ALIGN-1)) == 0);\n    {\n        xxh_u64 const data_val = XXH_readLE64(xinput + lane * 8);\n        xxh_u64 const data_key = data_val ^ XXH_readLE64(xsecret + lane * 8);\n        xacc[lane ^ 1] += data_val; /* swap adjacent lanes */\n        xacc[lane] = XXH_mult32to64_add64(data_key /* & 0xFFFFFFFF */, data_key >> 32, xacc[lane]);\n    }\n}\n\n/*!\n * @internal\n * @brief Processes a 64 byte block of data using the scalar path.\n */\nXXH_FORCE_INLINE void\nXXH3_accumulate_512_scalar(void* XXH_RESTRICT acc,\n                     const void* XXH_RESTRICT input,\n                     const void* XXH_RESTRICT secret)\n{\n    size_t i;\n    /* ARM GCC refuses to unroll this loop, resulting in a 24% slowdown on ARMv6. */\n#if defined(__GNUC__) && !defined(__clang__) \\\n  && (defined(__arm__) || defined(__thumb2__)) \\\n  && defined(__ARM_FEATURE_UNALIGNED) /* no unaligned access just wastes bytes */ \\\n  && XXH_SIZE_OPT <= 0\n#  pragma GCC unroll 8\n#endif\n    for (i=0; i < XXH_ACC_NB; i++) {\n        XXH3_scalarRound(acc, input, secret, i);\n    }\n}\nXXH_FORCE_INLINE XXH3_ACCUMULATE_TEMPLATE(scalar)\n\n/*!\n * @internal\n * @brief Scalar scramble step for @ref XXH3_scrambleAcc_scalar().\n *\n * This is extracted to its own function because the NEON path uses a combination\n * of NEON and scalar.\n */\nXXH_FORCE_INLINE void\nXXH3_scalarScrambleRound(void* XXH_RESTRICT acc,\n                         void const* XXH_RESTRICT secret,\n                         size_t lane)\n{\n    xxh_u64* const xacc = (xxh_u64*) acc;   /* presumed aligned */\n    const xxh_u8* const xsecret = (const xxh_u8*) secret;   /* no alignment restriction */\n    XXH_ASSERT((((size_t)acc) & (XXH_ACC_ALIGN-1)) == 0);\n    XXH_ASSERT(lane < XXH_ACC_NB);\n    {\n        xxh_u64 const key64 = XXH_readLE64(xsecret + lane * 8);\n        xxh_u64 acc64 = xacc[lane];\n        acc64 = XXH_xorshift64(acc64, 47);\n        acc64 ^= key64;\n        acc64 *= XXH_PRIME32_1;\n        xacc[lane] = acc64;\n    }\n}\n\n/*!\n * @internal\n * @brief Scrambles the accumulators after a large chunk has been read\n */\nXXH_FORCE_INLINE void\nXXH3_scrambleAcc_scalar(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)\n{\n    size_t i;\n    for (i=0; i < XXH_ACC_NB; i++) {\n        XXH3_scalarScrambleRound(acc, secret, i);\n    }\n}\n\nXXH_FORCE_INLINE void\nXXH3_initCustomSecret_scalar(void* XXH_RESTRICT customSecret, xxh_u64 seed64)\n{\n    /*\n     * We need a separate pointer for the hack below,\n     * which requires a non-const pointer.\n     * Any decent compiler will optimize this out otherwise.\n     */\n    const xxh_u8* kSecretPtr = XXH3_kSecret;\n    XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0);\n\n#if defined(__GNUC__) && defined(__aarch64__)\n    /*\n     * UGLY HACK:\n     * GCC and Clang generate a bunch of MOV/MOVK pairs for aarch64, and they are\n     * placed sequentially, in order, at the top of the unrolled loop.\n     *\n     * While MOVK is great for generating constants (2 cycles for a 64-bit\n     * constant compared to 4 cycles for LDR), it fights for bandwidth with\n     * the arithmetic instructions.\n     *\n     *   I   L   S\n     * MOVK\n     * MOVK\n     * MOVK\n     * MOVK\n     * ADD\n     * SUB      STR\n     *          STR\n     * By forcing loads from memory (as the asm line causes the compiler to assume\n     * that XXH3_kSecretPtr has been changed), the pipelines are used more\n     * efficiently:\n     *   I   L   S\n     *      LDR\n     *  ADD LDR\n     *  SUB     STR\n     *          STR\n     *\n     * See XXH3_NEON_LANES for details on the pipsline.\n     *\n     * XXH3_64bits_withSeed, len == 256, Snapdragon 835\n     *   without hack: 2654.4 MB/s\n     *   with hack:    3202.9 MB/s\n     */\n    XXH_COMPILER_GUARD(kSecretPtr);\n#endif\n    {   int const nbRounds = XXH_SECRET_DEFAULT_SIZE / 16;\n        int i;\n        for (i=0; i < nbRounds; i++) {\n            /*\n             * The asm hack causes the compiler to assume that kSecretPtr aliases with\n             * customSecret, and on aarch64, this prevented LDP from merging two\n             * loads together for free. Putting the loads together before the stores\n             * properly generates LDP.\n             */\n            xxh_u64 lo = XXH_readLE64(kSecretPtr + 16*i)     + seed64;\n            xxh_u64 hi = XXH_readLE64(kSecretPtr + 16*i + 8) - seed64;\n            XXH_writeLE64((xxh_u8*)customSecret + 16*i,     lo);\n            XXH_writeLE64((xxh_u8*)customSecret + 16*i + 8, hi);\n    }   }\n}\n\n\ntypedef void (*XXH3_f_accumulate)(xxh_u64* XXH_RESTRICT, const xxh_u8* XXH_RESTRICT, const xxh_u8* XXH_RESTRICT, size_t);\ntypedef void (*XXH3_f_scrambleAcc)(void* XXH_RESTRICT, const void*);\ntypedef void (*XXH3_f_initCustomSecret)(void* XXH_RESTRICT, xxh_u64);\n\n\n#if (XXH_VECTOR == XXH_AVX512)\n\n#define XXH3_accumulate_512 XXH3_accumulate_512_avx512\n#define XXH3_accumulate     XXH3_accumulate_avx512\n#define XXH3_scrambleAcc    XXH3_scrambleAcc_avx512\n#define XXH3_initCustomSecret XXH3_initCustomSecret_avx512\n\n#elif (XXH_VECTOR == XXH_AVX2)\n\n#define XXH3_accumulate_512 XXH3_accumulate_512_avx2\n#define XXH3_accumulate     XXH3_accumulate_avx2\n#define XXH3_scrambleAcc    XXH3_scrambleAcc_avx2\n#define XXH3_initCustomSecret XXH3_initCustomSecret_avx2\n\n#elif (XXH_VECTOR == XXH_SSE2)\n\n#define XXH3_accumulate_512 XXH3_accumulate_512_sse2\n#define XXH3_accumulate     XXH3_accumulate_sse2\n#define XXH3_scrambleAcc    XXH3_scrambleAcc_sse2\n#define XXH3_initCustomSecret XXH3_initCustomSecret_sse2\n\n#elif (XXH_VECTOR == XXH_NEON)\n\n#define XXH3_accumulate_512 XXH3_accumulate_512_neon\n#define XXH3_accumulate     XXH3_accumulate_neon\n#define XXH3_scrambleAcc    XXH3_scrambleAcc_neon\n#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar\n\n#elif (XXH_VECTOR == XXH_VSX)\n\n#define XXH3_accumulate_512 XXH3_accumulate_512_vsx\n#define XXH3_accumulate     XXH3_accumulate_vsx\n#define XXH3_scrambleAcc    XXH3_scrambleAcc_vsx\n#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar\n\n#elif (XXH_VECTOR == XXH_SVE)\n#define XXH3_accumulate_512 XXH3_accumulate_512_sve\n#define XXH3_accumulate     XXH3_accumulate_sve\n#define XXH3_scrambleAcc    XXH3_scrambleAcc_scalar\n#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar\n\n#elif (XXH_VECTOR == XXH_LSX)\n#define XXH3_accumulate_512 XXH3_accumulate_512_lsx\n#define XXH3_accumulate     XXH3_accumulate_lsx\n#define XXH3_scrambleAcc    XXH3_scrambleAcc_lsx\n#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar\n\n#else /* scalar */\n\n#define XXH3_accumulate_512 XXH3_accumulate_512_scalar\n#define XXH3_accumulate     XXH3_accumulate_scalar\n#define XXH3_scrambleAcc    XXH3_scrambleAcc_scalar\n#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar\n\n#endif\n\n#if XXH_SIZE_OPT >= 1 /* don't do SIMD for initialization */\n#  undef XXH3_initCustomSecret\n#  define XXH3_initCustomSecret XXH3_initCustomSecret_scalar\n#endif\n\nXXH_FORCE_INLINE void\nXXH3_hashLong_internal_loop(xxh_u64* XXH_RESTRICT acc,\n                      const xxh_u8* XXH_RESTRICT input, size_t len,\n                      const xxh_u8* XXH_RESTRICT secret, size_t secretSize,\n                            XXH3_f_accumulate f_acc,\n                            XXH3_f_scrambleAcc f_scramble)\n{\n    size_t const nbStripesPerBlock = (secretSize - XXH_STRIPE_LEN) / XXH_SECRET_CONSUME_RATE;\n    size_t const block_len = XXH_STRIPE_LEN * nbStripesPerBlock;\n    size_t const nb_blocks = (len - 1) / block_len;\n\n    size_t n;\n\n    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);\n\n    for (n = 0; n < nb_blocks; n++) {\n        f_acc(acc, input + n*block_len, secret, nbStripesPerBlock);\n        f_scramble(acc, secret + secretSize - XXH_STRIPE_LEN);\n    }\n\n    /* last partial block */\n    XXH_ASSERT(len > XXH_STRIPE_LEN);\n    {   size_t const nbStripes = ((len - 1) - (block_len * nb_blocks)) / XXH_STRIPE_LEN;\n        XXH_ASSERT(nbStripes <= (secretSize / XXH_SECRET_CONSUME_RATE));\n        f_acc(acc, input + nb_blocks*block_len, secret, nbStripes);\n\n        /* last stripe */\n        {   const xxh_u8* const p = input + len - XXH_STRIPE_LEN;\n#define XXH_SECRET_LASTACC_START 7  /* not aligned on 8, last secret is different from acc & scrambler */\n            XXH3_accumulate_512(acc, p, secret + secretSize - XXH_STRIPE_LEN - XXH_SECRET_LASTACC_START);\n    }   }\n}\n\nXXH_FORCE_INLINE xxh_u64\nXXH3_mix2Accs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret)\n{\n    return XXH3_mul128_fold64(\n               acc[0] ^ XXH_readLE64(secret),\n               acc[1] ^ XXH_readLE64(secret+8) );\n}\n\nstatic XXH_PUREF XXH64_hash_t\nXXH3_mergeAccs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, xxh_u64 start)\n{\n    xxh_u64 result64 = start;\n    size_t i = 0;\n\n    for (i = 0; i < 4; i++) {\n        result64 += XXH3_mix2Accs(acc+2*i, secret + 16*i);\n#if defined(__clang__)                                /* Clang */ \\\n    && (defined(__arm__) || defined(__thumb__))       /* ARMv7 */ \\\n    && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */  \\\n    && !defined(XXH_ENABLE_AUTOVECTORIZE)             /* Define to disable */\n        /*\n         * UGLY HACK:\n         * Prevent autovectorization on Clang ARMv7-a. Exact same problem as\n         * the one in XXH3_len_129to240_64b. Speeds up shorter keys > 240b.\n         * XXH3_64bits, len == 256, Snapdragon 835:\n         *   without hack: 2063.7 MB/s\n         *   with hack:    2560.7 MB/s\n         */\n        XXH_COMPILER_GUARD(result64);\n#endif\n    }\n\n    return XXH3_avalanche(result64);\n}\n\n/* do not align on 8, so that the secret is different from the accumulator */\n#define XXH_SECRET_MERGEACCS_START 11\n\nstatic XXH_PUREF XXH64_hash_t\nXXH3_finalizeLong_64b(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, xxh_u64 len)\n{\n    return XXH3_mergeAccs(acc, secret + XXH_SECRET_MERGEACCS_START, len * XXH_PRIME64_1);\n}\n\n#define XXH3_INIT_ACC { XXH_PRIME32_3, XXH_PRIME64_1, XXH_PRIME64_2, XXH_PRIME64_3, \\\n                        XXH_PRIME64_4, XXH_PRIME32_2, XXH_PRIME64_5, XXH_PRIME32_1 }\n\nXXH_FORCE_INLINE XXH64_hash_t\nXXH3_hashLong_64b_internal(const void* XXH_RESTRICT input, size_t len,\n                           const void* XXH_RESTRICT secret, size_t secretSize,\n                           XXH3_f_accumulate f_acc,\n                           XXH3_f_scrambleAcc f_scramble)\n{\n    XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC;\n\n    XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, f_acc, f_scramble);\n\n    /* converge into final hash */\n    XXH_STATIC_ASSERT(sizeof(acc) == 64);\n    XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);\n    return XXH3_finalizeLong_64b(acc, (const xxh_u8*)secret, (xxh_u64)len);\n}\n\n/*\n * It's important for performance to transmit secret's size (when it's static)\n * so that the compiler can properly optimize the vectorized loop.\n * This makes a big performance difference for \"medium\" keys (<1 KB) when using AVX instruction set.\n * When the secret size is unknown, or on GCC 12 where the mix of NO_INLINE and FORCE_INLINE\n * breaks -Og, this is XXH_NO_INLINE.\n */\nXXH3_WITH_SECRET_INLINE XXH64_hash_t\nXXH3_hashLong_64b_withSecret(const void* XXH_RESTRICT input, size_t len,\n                             XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)\n{\n    (void)seed64;\n    return XXH3_hashLong_64b_internal(input, len, secret, secretLen, XXH3_accumulate, XXH3_scrambleAcc);\n}\n\n/*\n * It's preferable for performance that XXH3_hashLong is not inlined,\n * as it results in a smaller function for small data, easier to the instruction cache.\n * Note that inside this no_inline function, we do inline the internal loop,\n * and provide a statically defined secret size to allow optimization of vector loop.\n */\nXXH_NO_INLINE XXH_PUREF XXH64_hash_t\nXXH3_hashLong_64b_default(const void* XXH_RESTRICT input, size_t len,\n                          XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)\n{\n    (void)seed64; (void)secret; (void)secretLen;\n    return XXH3_hashLong_64b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate, XXH3_scrambleAcc);\n}\n\n/*\n * XXH3_hashLong_64b_withSeed():\n * Generate a custom key based on alteration of default XXH3_kSecret with the seed,\n * and then use this key for long mode hashing.\n *\n * This operation is decently fast but nonetheless costs a little bit of time.\n * Try to avoid it whenever possible (typically when seed==0).\n *\n * It's important for performance that XXH3_hashLong is not inlined. Not sure\n * why (uop cache maybe?), but the difference is large and easily measurable.\n */\nXXH_FORCE_INLINE XXH64_hash_t\nXXH3_hashLong_64b_withSeed_internal(const void* input, size_t len,\n                                    XXH64_hash_t seed,\n                                    XXH3_f_accumulate f_acc,\n                                    XXH3_f_scrambleAcc f_scramble,\n                                    XXH3_f_initCustomSecret f_initSec)\n{\n#if XXH_SIZE_OPT <= 0\n    if (seed == 0)\n        return XXH3_hashLong_64b_internal(input, len,\n                                          XXH3_kSecret, sizeof(XXH3_kSecret),\n                                          f_acc, f_scramble);\n#endif\n    {   XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];\n        f_initSec(secret, seed);\n        return XXH3_hashLong_64b_internal(input, len, secret, sizeof(secret),\n                                          f_acc, f_scramble);\n    }\n}\n\n/*\n * It's important for performance that XXH3_hashLong is not inlined.\n */\nXXH_NO_INLINE XXH64_hash_t\nXXH3_hashLong_64b_withSeed(const void* XXH_RESTRICT input, size_t len,\n                           XXH64_hash_t seed, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)\n{\n    (void)secret; (void)secretLen;\n    return XXH3_hashLong_64b_withSeed_internal(input, len, seed,\n                XXH3_accumulate, XXH3_scrambleAcc, XXH3_initCustomSecret);\n}\n\n\ntypedef XXH64_hash_t (*XXH3_hashLong64_f)(const void* XXH_RESTRICT, size_t,\n                                          XXH64_hash_t, const xxh_u8* XXH_RESTRICT, size_t);\n\nXXH_FORCE_INLINE XXH64_hash_t\nXXH3_64bits_internal(const void* XXH_RESTRICT input, size_t len,\n                     XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen,\n                     XXH3_hashLong64_f f_hashLong)\n{\n    XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN);\n    /*\n     * If an action is to be taken if `secretLen` condition is not respected,\n     * it should be done here.\n     * For now, it's a contract pre-condition.\n     * Adding a check and a branch here would cost performance at every hash.\n     * Also, note that function signature doesn't offer room to return an error.\n     */\n    if (len <= 16)\n        return XXH3_len_0to16_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64);\n    if (len <= 128)\n        return XXH3_len_17to128_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);\n    if (len <= XXH3_MIDSIZE_MAX)\n        return XXH3_len_129to240_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);\n    return f_hashLong(input, len, seed64, (const xxh_u8*)secret, secretLen);\n}\n\n\n/* ===   Public entry point   === */\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH64_hash_t XXH3_64bits(XXH_NOESCAPE const void* input, size_t length)\n{\n    return XXH3_64bits_internal(input, length, 0, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_default);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH64_hash_t\nXXH3_64bits_withSecret(XXH_NOESCAPE const void* input, size_t length, XXH_NOESCAPE const void* secret, size_t secretSize)\n{\n    return XXH3_64bits_internal(input, length, 0, secret, secretSize, XXH3_hashLong_64b_withSecret);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH64_hash_t\nXXH3_64bits_withSeed(XXH_NOESCAPE const void* input, size_t length, XXH64_hash_t seed)\n{\n    return XXH3_64bits_internal(input, length, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_withSeed);\n}\n\nXXH_PUBLIC_API XXH64_hash_t\nXXH3_64bits_withSecretandSeed(XXH_NOESCAPE const void* input, size_t length, XXH_NOESCAPE const void* secret, size_t secretSize, XXH64_hash_t seed)\n{\n    if (length <= XXH3_MIDSIZE_MAX)\n        return XXH3_64bits_internal(input, length, seed, XXH3_kSecret, sizeof(XXH3_kSecret), NULL);\n    return XXH3_hashLong_64b_withSecret(input, length, seed, (const xxh_u8*)secret, secretSize);\n}\n\n\n/* ===   XXH3 streaming   === */\n#ifndef XXH_NO_STREAM\n/*\n * Malloc's a pointer that is always aligned to @align.\n *\n * This must be freed with `XXH_alignedFree()`.\n *\n * malloc typically guarantees 16 byte alignment on 64-bit systems and 8 byte\n * alignment on 32-bit. This isn't enough for the 32 byte aligned loads in AVX2\n * or on 32-bit, the 16 byte aligned loads in SSE2 and NEON.\n *\n * This underalignment previously caused a rather obvious crash which went\n * completely unnoticed due to XXH3_createState() not actually being tested.\n * Credit to RedSpah for noticing this bug.\n *\n * The alignment is done manually: Functions like posix_memalign or _mm_malloc\n * are avoided: To maintain portability, we would have to write a fallback\n * like this anyways, and besides, testing for the existence of library\n * functions without relying on external build tools is impossible.\n *\n * The method is simple: Overallocate, manually align, and store the offset\n * to the original behind the returned pointer.\n *\n * Align must be a power of 2 and 8 <= align <= 128.\n */\nstatic XXH_MALLOCF void* XXH_alignedMalloc(size_t s, size_t align)\n{\n    XXH_ASSERT(align <= 128 && align >= 8); /* range check */\n    XXH_ASSERT((align & (align-1)) == 0);   /* power of 2 */\n    XXH_ASSERT(s != 0 && s < (s + align));  /* empty/overflow */\n    {   /* Overallocate to make room for manual realignment and an offset byte */\n        xxh_u8* base = (xxh_u8*)XXH_malloc(s + align);\n        if (base != NULL) {\n            /*\n             * Get the offset needed to align this pointer.\n             *\n             * Even if the returned pointer is aligned, there will always be\n             * at least one byte to store the offset to the original pointer.\n             */\n            size_t offset = align - ((size_t)base & (align - 1)); /* base % align */\n            /* Add the offset for the now-aligned pointer */\n            xxh_u8* ptr = base + offset;\n\n            XXH_ASSERT((size_t)ptr % align == 0);\n\n            /* Store the offset immediately before the returned pointer. */\n            ptr[-1] = (xxh_u8)offset;\n            return ptr;\n        }\n        return NULL;\n    }\n}\n/*\n * Frees an aligned pointer allocated by XXH_alignedMalloc(). Don't pass\n * normal malloc'd pointers, XXH_alignedMalloc has a specific data layout.\n */\nstatic void XXH_alignedFree(void* p)\n{\n    if (p != NULL) {\n        xxh_u8* ptr = (xxh_u8*)p;\n        /* Get the offset byte we added in XXH_malloc. */\n        xxh_u8 offset = ptr[-1];\n        /* Free the original malloc'd pointer */\n        xxh_u8* base = ptr - offset;\n        XXH_free(base);\n    }\n}\n/*! @ingroup XXH3_family */\n/*!\n * @brief Allocate an @ref XXH3_state_t.\n *\n * @return An allocated pointer of @ref XXH3_state_t on success.\n * @return `NULL` on failure.\n *\n * @note Must be freed with XXH3_freeState().\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH3_state_t* XXH3_createState(void)\n{\n    XXH3_state_t* const state = (XXH3_state_t*)XXH_alignedMalloc(sizeof(XXH3_state_t), 64);\n    if (state==NULL) return NULL;\n    XXH3_INITSTATE(state);\n    return state;\n}\n\n/*! @ingroup XXH3_family */\n/*!\n * @brief Frees an @ref XXH3_state_t.\n *\n * @param statePtr A pointer to an @ref XXH3_state_t allocated with @ref XXH3_createState().\n *\n * @return @ref XXH_OK.\n *\n * @note Must be allocated with XXH3_createState().\n *\n * @see @ref streaming_example \"Streaming Example\"\n */\nXXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr)\n{\n    XXH_alignedFree(statePtr);\n    return XXH_OK;\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API void\nXXH3_copyState(XXH_NOESCAPE XXH3_state_t* dst_state, XXH_NOESCAPE const XXH3_state_t* src_state)\n{\n    XXH_memcpy(dst_state, src_state, sizeof(*dst_state));\n}\n\nstatic void\nXXH3_reset_internal(XXH3_state_t* statePtr,\n                    XXH64_hash_t seed,\n                    const void* secret, size_t secretSize)\n{\n    size_t const initStart = offsetof(XXH3_state_t, bufferedSize);\n    size_t const initLength = offsetof(XXH3_state_t, nbStripesPerBlock) - initStart;\n    XXH_ASSERT(offsetof(XXH3_state_t, nbStripesPerBlock) > initStart);\n    XXH_ASSERT(statePtr != NULL);\n    /* set members from bufferedSize to nbStripesPerBlock (excluded) to 0 */\n    memset((char*)statePtr + initStart, 0, initLength);\n    statePtr->acc[0] = XXH_PRIME32_3;\n    statePtr->acc[1] = XXH_PRIME64_1;\n    statePtr->acc[2] = XXH_PRIME64_2;\n    statePtr->acc[3] = XXH_PRIME64_3;\n    statePtr->acc[4] = XXH_PRIME64_4;\n    statePtr->acc[5] = XXH_PRIME32_2;\n    statePtr->acc[6] = XXH_PRIME64_5;\n    statePtr->acc[7] = XXH_PRIME32_1;\n    statePtr->seed = seed;\n    statePtr->useSeed = (seed != 0);\n    statePtr->extSecret = (const unsigned char*)secret;\n    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);\n    statePtr->secretLimit = secretSize - XXH_STRIPE_LEN;\n    statePtr->nbStripesPerBlock = statePtr->secretLimit / XXH_SECRET_CONSUME_RATE;\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_64bits_reset(XXH_NOESCAPE XXH3_state_t* statePtr)\n{\n    if (statePtr == NULL) return XXH_ERROR;\n    XXH3_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE);\n    return XXH_OK;\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_64bits_reset_withSecret(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize)\n{\n    if (statePtr == NULL) return XXH_ERROR;\n    XXH3_reset_internal(statePtr, 0, secret, secretSize);\n    if (secret == NULL) return XXH_ERROR;\n    if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;\n    return XXH_OK;\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_64bits_reset_withSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH64_hash_t seed)\n{\n    if (statePtr == NULL) return XXH_ERROR;\n    if (seed==0) return XXH3_64bits_reset(statePtr);\n    if ((seed != statePtr->seed) || (statePtr->extSecret != NULL))\n        XXH3_initCustomSecret(statePtr->customSecret, seed);\n    XXH3_reset_internal(statePtr, seed, NULL, XXH_SECRET_DEFAULT_SIZE);\n    return XXH_OK;\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_64bits_reset_withSecretandSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize, XXH64_hash_t seed64)\n{\n    if (statePtr == NULL) return XXH_ERROR;\n    if (secret == NULL) return XXH_ERROR;\n    if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;\n    XXH3_reset_internal(statePtr, seed64, secret, secretSize);\n    statePtr->useSeed = 1; /* always, even if seed64==0 */\n    return XXH_OK;\n}\n\n/*!\n * @internal\n * @brief Processes a large input for XXH3_update() and XXH3_digest_long().\n *\n * Unlike XXH3_hashLong_internal_loop(), this can process data that overlaps a block.\n *\n * @param acc                Pointer to the 8 accumulator lanes\n * @param nbStripesSoFarPtr  In/out pointer to the number of leftover stripes in the block*\n * @param nbStripesPerBlock  Number of stripes in a block\n * @param input              Input pointer\n * @param nbStripes          Number of stripes to process\n * @param secret             Secret pointer\n * @param secretLimit        Offset of the last block in @p secret\n * @param f_acc              Pointer to an XXH3_accumulate implementation\n * @param f_scramble         Pointer to an XXH3_scrambleAcc implementation\n * @return                   Pointer past the end of @p input after processing\n */\nXXH_FORCE_INLINE const xxh_u8 *\nXXH3_consumeStripes(xxh_u64* XXH_RESTRICT acc,\n                    size_t* XXH_RESTRICT nbStripesSoFarPtr, size_t nbStripesPerBlock,\n                    const xxh_u8* XXH_RESTRICT input, size_t nbStripes,\n                    const xxh_u8* XXH_RESTRICT secret, size_t secretLimit,\n                    XXH3_f_accumulate f_acc,\n                    XXH3_f_scrambleAcc f_scramble)\n{\n    const xxh_u8* initialSecret = secret + *nbStripesSoFarPtr * XXH_SECRET_CONSUME_RATE;\n    /* Process full blocks */\n    if (nbStripes >= (nbStripesPerBlock - *nbStripesSoFarPtr)) {\n        /* Process the initial partial block... */\n        size_t nbStripesThisIter = nbStripesPerBlock - *nbStripesSoFarPtr;\n\n        do {\n            /* Accumulate and scramble */\n            f_acc(acc, input, initialSecret, nbStripesThisIter);\n            f_scramble(acc, secret + secretLimit);\n            input += nbStripesThisIter * XXH_STRIPE_LEN;\n            nbStripes -= nbStripesThisIter;\n            /* Then continue the loop with the full block size */\n            nbStripesThisIter = nbStripesPerBlock;\n            initialSecret = secret;\n        } while (nbStripes >= nbStripesPerBlock);\n        *nbStripesSoFarPtr = 0;\n    }\n    /* Process a partial block */\n    if (nbStripes > 0) {\n        f_acc(acc, input, initialSecret, nbStripes);\n        input += nbStripes * XXH_STRIPE_LEN;\n        *nbStripesSoFarPtr += nbStripes;\n    }\n    /* Return end pointer */\n    return input;\n}\n\n#ifndef XXH3_STREAM_USE_STACK\n# if XXH_SIZE_OPT <= 0 && !defined(__clang__) /* clang doesn't need additional stack space */\n#   define XXH3_STREAM_USE_STACK 1\n# endif\n#endif\n/*\n * Both XXH3_64bits_update and XXH3_128bits_update use this routine.\n */\nXXH_FORCE_INLINE XXH_errorcode\nXXH3_update(XXH3_state_t* XXH_RESTRICT const state,\n            const xxh_u8* XXH_RESTRICT input, size_t len,\n            XXH3_f_accumulate f_acc,\n            XXH3_f_scrambleAcc f_scramble)\n{\n    if (input==NULL) {\n        XXH_ASSERT(len == 0);\n        return XXH_OK;\n    }\n\n    XXH_ASSERT(state != NULL);\n    {   const xxh_u8* const bEnd = input + len;\n        const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;\n#if defined(XXH3_STREAM_USE_STACK) && XXH3_STREAM_USE_STACK >= 1\n        /* For some reason, gcc and MSVC seem to suffer greatly\n         * when operating accumulators directly into state.\n         * Operating into stack space seems to enable proper optimization.\n         * clang, on the other hand, doesn't seem to need this trick */\n        XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[8];\n        XXH_memcpy(acc, state->acc, sizeof(acc));\n#else\n        xxh_u64* XXH_RESTRICT const acc = state->acc;\n#endif\n        state->totalLen += len;\n        XXH_ASSERT(state->bufferedSize <= XXH3_INTERNALBUFFER_SIZE);\n\n        /* small input : just fill in tmp buffer */\n        if (len <= XXH3_INTERNALBUFFER_SIZE - state->bufferedSize) {\n            XXH_memcpy(state->buffer + state->bufferedSize, input, len);\n            state->bufferedSize += (XXH32_hash_t)len;\n            return XXH_OK;\n        }\n\n        /* total input is now > XXH3_INTERNALBUFFER_SIZE */\n        #define XXH3_INTERNALBUFFER_STRIPES (XXH3_INTERNALBUFFER_SIZE / XXH_STRIPE_LEN)\n        XXH_STATIC_ASSERT(XXH3_INTERNALBUFFER_SIZE % XXH_STRIPE_LEN == 0);   /* clean multiple */\n\n        /*\n         * Internal buffer is partially filled (always, except at beginning)\n         * Complete it, then consume it.\n         */\n        if (state->bufferedSize) {\n            size_t const loadSize = XXH3_INTERNALBUFFER_SIZE - state->bufferedSize;\n            XXH_memcpy(state->buffer + state->bufferedSize, input, loadSize);\n            input += loadSize;\n            XXH3_consumeStripes(acc,\n                               &state->nbStripesSoFar, state->nbStripesPerBlock,\n                                state->buffer, XXH3_INTERNALBUFFER_STRIPES,\n                                secret, state->secretLimit,\n                                f_acc, f_scramble);\n            state->bufferedSize = 0;\n        }\n        XXH_ASSERT(input < bEnd);\n        if (bEnd - input > XXH3_INTERNALBUFFER_SIZE) {\n            size_t nbStripes = (size_t)(bEnd - 1 - input) / XXH_STRIPE_LEN;\n            input = XXH3_consumeStripes(acc,\n                                       &state->nbStripesSoFar, state->nbStripesPerBlock,\n                                       input, nbStripes,\n                                       secret, state->secretLimit,\n                                       f_acc, f_scramble);\n            XXH_memcpy(state->buffer + sizeof(state->buffer) - XXH_STRIPE_LEN, input - XXH_STRIPE_LEN, XXH_STRIPE_LEN);\n\n        }\n        /* Some remaining input (always) : buffer it */\n        XXH_ASSERT(input < bEnd);\n        XXH_ASSERT(bEnd - input <= XXH3_INTERNALBUFFER_SIZE);\n        XXH_ASSERT(state->bufferedSize == 0);\n        XXH_memcpy(state->buffer, input, (size_t)(bEnd-input));\n        state->bufferedSize = (XXH32_hash_t)(bEnd-input);\n#if defined(XXH3_STREAM_USE_STACK) && XXH3_STREAM_USE_STACK >= 1\n        /* save stack accumulators into state */\n        XXH_memcpy(state->acc, acc, sizeof(acc));\n#endif\n    }\n\n    return XXH_OK;\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_64bits_update(XXH_NOESCAPE XXH3_state_t* state, XXH_NOESCAPE const void* input, size_t len)\n{\n    return XXH3_update(state, (const xxh_u8*)input, len,\n                       XXH3_accumulate, XXH3_scrambleAcc);\n}\n\n\nXXH_FORCE_INLINE void\nXXH3_digest_long (XXH64_hash_t* acc,\n                  const XXH3_state_t* state,\n                  const unsigned char* secret)\n{\n    xxh_u8 lastStripe[XXH_STRIPE_LEN];\n    const xxh_u8* lastStripePtr;\n\n    /*\n     * Digest on a local copy. This way, the state remains unaltered, and it can\n     * continue ingesting more input afterwards.\n     */\n    XXH_memcpy(acc, state->acc, sizeof(state->acc));\n    if (state->bufferedSize >= XXH_STRIPE_LEN) {\n        /* Consume remaining stripes then point to remaining data in buffer */\n        size_t const nbStripes = (state->bufferedSize - 1) / XXH_STRIPE_LEN;\n        size_t nbStripesSoFar = state->nbStripesSoFar;\n        XXH3_consumeStripes(acc,\n                           &nbStripesSoFar, state->nbStripesPerBlock,\n                            state->buffer, nbStripes,\n                            secret, state->secretLimit,\n                            XXH3_accumulate, XXH3_scrambleAcc);\n        lastStripePtr = state->buffer + state->bufferedSize - XXH_STRIPE_LEN;\n    } else {  /* bufferedSize < XXH_STRIPE_LEN */\n        /* Copy to temp buffer */\n        size_t const catchupSize = XXH_STRIPE_LEN - state->bufferedSize;\n        XXH_ASSERT(state->bufferedSize > 0);  /* there is always some input buffered */\n        XXH_memcpy(lastStripe, state->buffer + sizeof(state->buffer) - catchupSize, catchupSize);\n        XXH_memcpy(lastStripe + catchupSize, state->buffer, state->bufferedSize);\n        lastStripePtr = lastStripe;\n    }\n    /* Last stripe */\n    XXH3_accumulate_512(acc,\n                        lastStripePtr,\n                        secret + state->secretLimit - XXH_SECRET_LASTACC_START);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (XXH_NOESCAPE const XXH3_state_t* state)\n{\n    const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;\n    if (state->totalLen > XXH3_MIDSIZE_MAX) {\n        XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB];\n        XXH3_digest_long(acc, state, secret);\n        return XXH3_finalizeLong_64b(acc, secret, (xxh_u64)state->totalLen);\n    }\n    /* totalLen <= XXH3_MIDSIZE_MAX: digesting a short input */\n    if (state->useSeed)\n        return XXH3_64bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed);\n    return XXH3_64bits_withSecret(state->buffer, (size_t)(state->totalLen),\n                                  secret, state->secretLimit + XXH_STRIPE_LEN);\n}\n#endif /* !XXH_NO_STREAM */\n\n\n/* ==========================================\n * XXH3 128 bits (a.k.a XXH128)\n * ==========================================\n * XXH3's 128-bit variant has better mixing and strength than the 64-bit variant,\n * even without counting the significantly larger output size.\n *\n * For example, extra steps are taken to avoid the seed-dependent collisions\n * in 17-240 byte inputs (See XXH3_mix16B and XXH128_mix32B).\n *\n * This strength naturally comes at the cost of some speed, especially on short\n * lengths. Note that longer hashes are about as fast as the 64-bit version\n * due to it using only a slight modification of the 64-bit loop.\n *\n * XXH128 is also more oriented towards 64-bit machines. It is still extremely\n * fast for a _128-bit_ hash on 32-bit (it usually clears XXH64).\n */\n\nXXH_FORCE_INLINE XXH_PUREF XXH128_hash_t\nXXH3_len_1to3_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)\n{\n    /* A doubled version of 1to3_64b with different constants. */\n    XXH_ASSERT(input != NULL);\n    XXH_ASSERT(1 <= len && len <= 3);\n    XXH_ASSERT(secret != NULL);\n    /*\n     * len = 1: combinedl = { input[0], 0x01, input[0], input[0] }\n     * len = 2: combinedl = { input[1], 0x02, input[0], input[1] }\n     * len = 3: combinedl = { input[2], 0x03, input[0], input[1] }\n     */\n    {   xxh_u8 const c1 = input[0];\n        xxh_u8 const c2 = input[len >> 1];\n        xxh_u8 const c3 = input[len - 1];\n        xxh_u32 const combinedl = ((xxh_u32)c1 <<16) | ((xxh_u32)c2 << 24)\n                                | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8);\n        xxh_u32 const combinedh = XXH_rotl32(XXH_swap32(combinedl), 13);\n        xxh_u64 const bitflipl = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed;\n        xxh_u64 const bitfliph = (XXH_readLE32(secret+8) ^ XXH_readLE32(secret+12)) - seed;\n        xxh_u64 const keyed_lo = (xxh_u64)combinedl ^ bitflipl;\n        xxh_u64 const keyed_hi = (xxh_u64)combinedh ^ bitfliph;\n        XXH128_hash_t h128;\n        h128.low64  = XXH64_avalanche(keyed_lo);\n        h128.high64 = XXH64_avalanche(keyed_hi);\n        return h128;\n    }\n}\n\nXXH_FORCE_INLINE XXH_PUREF XXH128_hash_t\nXXH3_len_4to8_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)\n{\n    XXH_ASSERT(input != NULL);\n    XXH_ASSERT(secret != NULL);\n    XXH_ASSERT(4 <= len && len <= 8);\n    seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32;\n    {   xxh_u32 const input_lo = XXH_readLE32(input);\n        xxh_u32 const input_hi = XXH_readLE32(input + len - 4);\n        xxh_u64 const input_64 = input_lo + ((xxh_u64)input_hi << 32);\n        xxh_u64 const bitflip = (XXH_readLE64(secret+16) ^ XXH_readLE64(secret+24)) + seed;\n        xxh_u64 const keyed = input_64 ^ bitflip;\n\n        /* Shift len to the left to ensure it is even, this avoids even multiplies. */\n        XXH128_hash_t m128 = XXH_mult64to128(keyed, XXH_PRIME64_1 + (len << 2));\n\n        m128.high64 += (m128.low64 << 1);\n        m128.low64  ^= (m128.high64 >> 3);\n\n        m128.low64   = XXH_xorshift64(m128.low64, 35);\n        m128.low64  *= PRIME_MX2;\n        m128.low64   = XXH_xorshift64(m128.low64, 28);\n        m128.high64  = XXH3_avalanche(m128.high64);\n        return m128;\n    }\n}\n\nXXH_FORCE_INLINE XXH_PUREF XXH128_hash_t\nXXH3_len_9to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)\n{\n    XXH_ASSERT(input != NULL);\n    XXH_ASSERT(secret != NULL);\n    XXH_ASSERT(9 <= len && len <= 16);\n    {   xxh_u64 const bitflipl = (XXH_readLE64(secret+32) ^ XXH_readLE64(secret+40)) - seed;\n        xxh_u64 const bitfliph = (XXH_readLE64(secret+48) ^ XXH_readLE64(secret+56)) + seed;\n        xxh_u64 const input_lo = XXH_readLE64(input);\n        xxh_u64       input_hi = XXH_readLE64(input + len - 8);\n        XXH128_hash_t m128 = XXH_mult64to128(input_lo ^ input_hi ^ bitflipl, XXH_PRIME64_1);\n        /*\n         * Put len in the middle of m128 to ensure that the length gets mixed to\n         * both the low and high bits in the 128x64 multiply below.\n         */\n        m128.low64 += (xxh_u64)(len - 1) << 54;\n        input_hi   ^= bitfliph;\n        /*\n         * Add the high 32 bits of input_hi to the high 32 bits of m128, then\n         * add the long product of the low 32 bits of input_hi and XXH_PRIME32_2 to\n         * the high 64 bits of m128.\n         *\n         * The best approach to this operation is different on 32-bit and 64-bit.\n         */\n        if (sizeof(void *) < sizeof(xxh_u64)) { /* 32-bit */\n            /*\n             * 32-bit optimized version, which is more readable.\n             *\n             * On 32-bit, it removes an ADC and delays a dependency between the two\n             * halves of m128.high64, but it generates an extra mask on 64-bit.\n             */\n            m128.high64 += (input_hi & 0xFFFFFFFF00000000ULL) + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2);\n        } else {\n            /*\n             * 64-bit optimized (albeit more confusing) version.\n             *\n             * Uses some properties of addition and multiplication to remove the mask:\n             *\n             * Let:\n             *    a = input_hi.lo = (input_hi & 0x00000000FFFFFFFF)\n             *    b = input_hi.hi = (input_hi & 0xFFFFFFFF00000000)\n             *    c = XXH_PRIME32_2\n             *\n             *    a + (b * c)\n             * Inverse Property: x + y - x == y\n             *    a + (b * (1 + c - 1))\n             * Distributive Property: x * (y + z) == (x * y) + (x * z)\n             *    a + (b * 1) + (b * (c - 1))\n             * Identity Property: x * 1 == x\n             *    a + b + (b * (c - 1))\n             *\n             * Substitute a, b, and c:\n             *    input_hi.hi + input_hi.lo + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1))\n             *\n             * Since input_hi.hi + input_hi.lo == input_hi, we get this:\n             *    input_hi + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1))\n             */\n            m128.high64 += input_hi + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2 - 1);\n        }\n        /* m128 ^= XXH_swap64(m128 >> 64); */\n        m128.low64  ^= XXH_swap64(m128.high64);\n\n        {   /* 128x64 multiply: h128 = m128 * XXH_PRIME64_2; */\n            XXH128_hash_t h128 = XXH_mult64to128(m128.low64, XXH_PRIME64_2);\n            h128.high64 += m128.high64 * XXH_PRIME64_2;\n\n            h128.low64   = XXH3_avalanche(h128.low64);\n            h128.high64  = XXH3_avalanche(h128.high64);\n            return h128;\n    }   }\n}\n\n/*\n * Assumption: `secret` size is >= XXH3_SECRET_SIZE_MIN\n */\nXXH_FORCE_INLINE XXH_PUREF XXH128_hash_t\nXXH3_len_0to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)\n{\n    XXH_ASSERT(len <= 16);\n    {   if (len > 8) return XXH3_len_9to16_128b(input, len, secret, seed);\n        if (len >= 4) return XXH3_len_4to8_128b(input, len, secret, seed);\n        if (len) return XXH3_len_1to3_128b(input, len, secret, seed);\n        {   XXH128_hash_t h128;\n            xxh_u64 const bitflipl = XXH_readLE64(secret+64) ^ XXH_readLE64(secret+72);\n            xxh_u64 const bitfliph = XXH_readLE64(secret+80) ^ XXH_readLE64(secret+88);\n            h128.low64 = XXH64_avalanche(seed ^ bitflipl);\n            h128.high64 = XXH64_avalanche( seed ^ bitfliph);\n            return h128;\n    }   }\n}\n\n/*\n * A bit slower than XXH3_mix16B, but handles multiply by zero better.\n */\nXXH_FORCE_INLINE XXH128_hash_t\nXXH128_mix32B(XXH128_hash_t acc, const xxh_u8* input_1, const xxh_u8* input_2,\n              const xxh_u8* secret, XXH64_hash_t seed)\n{\n    acc.low64  += XXH3_mix16B (input_1, secret+0, seed);\n    acc.low64  ^= XXH_readLE64(input_2) + XXH_readLE64(input_2 + 8);\n    acc.high64 += XXH3_mix16B (input_2, secret+16, seed);\n    acc.high64 ^= XXH_readLE64(input_1) + XXH_readLE64(input_1 + 8);\n    return acc;\n}\n\n\nXXH_FORCE_INLINE XXH_PUREF XXH128_hash_t\nXXH3_len_17to128_128b(const xxh_u8* XXH_RESTRICT input, size_t len,\n                      const xxh_u8* XXH_RESTRICT secret, size_t secretSize,\n                      XXH64_hash_t seed)\n{\n    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;\n    XXH_ASSERT(16 < len && len <= 128);\n\n    {   XXH128_hash_t acc;\n        acc.low64 = len * XXH_PRIME64_1;\n        acc.high64 = 0;\n\n#if XXH_SIZE_OPT >= 1\n        {\n            /* Smaller, but slightly slower. */\n            unsigned int i = (unsigned int)(len - 1) / 32;\n            do {\n                acc = XXH128_mix32B(acc, input+16*i, input+len-16*(i+1), secret+32*i, seed);\n            } while (i-- != 0);\n        }\n#else\n        if (len > 32) {\n            if (len > 64) {\n                if (len > 96) {\n                    acc = XXH128_mix32B(acc, input+48, input+len-64, secret+96, seed);\n                }\n                acc = XXH128_mix32B(acc, input+32, input+len-48, secret+64, seed);\n            }\n            acc = XXH128_mix32B(acc, input+16, input+len-32, secret+32, seed);\n        }\n        acc = XXH128_mix32B(acc, input, input+len-16, secret, seed);\n#endif\n        {   XXH128_hash_t h128;\n            h128.low64  = acc.low64 + acc.high64;\n            h128.high64 = (acc.low64    * XXH_PRIME64_1)\n                        + (acc.high64   * XXH_PRIME64_4)\n                        + ((len - seed) * XXH_PRIME64_2);\n            h128.low64  = XXH3_avalanche(h128.low64);\n            h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64);\n            return h128;\n        }\n    }\n}\n\nXXH_NO_INLINE XXH_PUREF XXH128_hash_t\nXXH3_len_129to240_128b(const xxh_u8* XXH_RESTRICT input, size_t len,\n                       const xxh_u8* XXH_RESTRICT secret, size_t secretSize,\n                       XXH64_hash_t seed)\n{\n    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;\n    XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX);\n\n    {   XXH128_hash_t acc;\n        unsigned i;\n        acc.low64 = len * XXH_PRIME64_1;\n        acc.high64 = 0;\n        /*\n         *  We set as `i` as offset + 32. We do this so that unchanged\n         * `len` can be used as upper bound. This reaches a sweet spot\n         * where both x86 and aarch64 get simple agen and good codegen\n         * for the loop.\n         */\n        for (i = 32; i < 160; i += 32) {\n            acc = XXH128_mix32B(acc,\n                                input  + i - 32,\n                                input  + i - 16,\n                                secret + i - 32,\n                                seed);\n        }\n        acc.low64 = XXH3_avalanche(acc.low64);\n        acc.high64 = XXH3_avalanche(acc.high64);\n        /*\n         * NB: `i <= len` will duplicate the last 32-bytes if\n         * len % 32 was zero. This is an unfortunate necessity to keep\n         * the hash result stable.\n         */\n        for (i=160; i <= len; i += 32) {\n            acc = XXH128_mix32B(acc,\n                                input + i - 32,\n                                input + i - 16,\n                                secret + XXH3_MIDSIZE_STARTOFFSET + i - 160,\n                                seed);\n        }\n        /* last bytes */\n        acc = XXH128_mix32B(acc,\n                            input + len - 16,\n                            input + len - 32,\n                            secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET - 16,\n                            (XXH64_hash_t)0 - seed);\n\n        {   XXH128_hash_t h128;\n            h128.low64  = acc.low64 + acc.high64;\n            h128.high64 = (acc.low64    * XXH_PRIME64_1)\n                        + (acc.high64   * XXH_PRIME64_4)\n                        + ((len - seed) * XXH_PRIME64_2);\n            h128.low64  = XXH3_avalanche(h128.low64);\n            h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64);\n            return h128;\n        }\n    }\n}\n\nstatic XXH_PUREF XXH128_hash_t\nXXH3_finalizeLong_128b(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, size_t secretSize, xxh_u64 len)\n{\n    XXH128_hash_t h128;\n    h128.low64 = XXH3_finalizeLong_64b(acc, secret, len);\n    h128.high64 = XXH3_mergeAccs(acc, secret + secretSize\n                                             - XXH_STRIPE_LEN - XXH_SECRET_MERGEACCS_START,\n                                             ~(len * XXH_PRIME64_2));\n    return h128;\n}\n\nXXH_FORCE_INLINE XXH128_hash_t\nXXH3_hashLong_128b_internal(const void* XXH_RESTRICT input, size_t len,\n                            const xxh_u8* XXH_RESTRICT secret, size_t secretSize,\n                            XXH3_f_accumulate f_acc,\n                            XXH3_f_scrambleAcc f_scramble)\n{\n    XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC;\n\n    XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, secret, secretSize, f_acc, f_scramble);\n\n    /* converge into final hash */\n    XXH_STATIC_ASSERT(sizeof(acc) == 64);\n    XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);\n    return XXH3_finalizeLong_128b(acc, secret, secretSize, (xxh_u64)len);\n}\n\n/*\n * It's important for performance that XXH3_hashLong() is not inlined.\n */\nXXH_NO_INLINE XXH_PUREF XXH128_hash_t\nXXH3_hashLong_128b_default(const void* XXH_RESTRICT input, size_t len,\n                           XXH64_hash_t seed64,\n                           const void* XXH_RESTRICT secret, size_t secretLen)\n{\n    (void)seed64; (void)secret; (void)secretLen;\n    return XXH3_hashLong_128b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret),\n                                       XXH3_accumulate, XXH3_scrambleAcc);\n}\n\n/*\n * It's important for performance to pass @p secretLen (when it's static)\n * to the compiler, so that it can properly optimize the vectorized loop.\n *\n * When the secret size is unknown, or on GCC 12 where the mix of NO_INLINE and FORCE_INLINE\n * breaks -Og, this is XXH_NO_INLINE.\n */\nXXH3_WITH_SECRET_INLINE XXH128_hash_t\nXXH3_hashLong_128b_withSecret(const void* XXH_RESTRICT input, size_t len,\n                              XXH64_hash_t seed64,\n                              const void* XXH_RESTRICT secret, size_t secretLen)\n{\n    (void)seed64;\n    return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen,\n                                       XXH3_accumulate, XXH3_scrambleAcc);\n}\n\nXXH_FORCE_INLINE XXH128_hash_t\nXXH3_hashLong_128b_withSeed_internal(const void* XXH_RESTRICT input, size_t len,\n                                XXH64_hash_t seed64,\n                                XXH3_f_accumulate f_acc,\n                                XXH3_f_scrambleAcc f_scramble,\n                                XXH3_f_initCustomSecret f_initSec)\n{\n    if (seed64 == 0)\n        return XXH3_hashLong_128b_internal(input, len,\n                                           XXH3_kSecret, sizeof(XXH3_kSecret),\n                                           f_acc, f_scramble);\n    {   XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];\n        f_initSec(secret, seed64);\n        return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, sizeof(secret),\n                                           f_acc, f_scramble);\n    }\n}\n\n/*\n * It's important for performance that XXH3_hashLong is not inlined.\n */\nXXH_NO_INLINE XXH128_hash_t\nXXH3_hashLong_128b_withSeed(const void* input, size_t len,\n                            XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen)\n{\n    (void)secret; (void)secretLen;\n    return XXH3_hashLong_128b_withSeed_internal(input, len, seed64,\n                XXH3_accumulate, XXH3_scrambleAcc, XXH3_initCustomSecret);\n}\n\ntypedef XXH128_hash_t (*XXH3_hashLong128_f)(const void* XXH_RESTRICT, size_t,\n                                            XXH64_hash_t, const void* XXH_RESTRICT, size_t);\n\nXXH_FORCE_INLINE XXH128_hash_t\nXXH3_128bits_internal(const void* input, size_t len,\n                      XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen,\n                      XXH3_hashLong128_f f_hl128)\n{\n    XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN);\n    /*\n     * If an action is to be taken if `secret` conditions are not respected,\n     * it should be done here.\n     * For now, it's a contract pre-condition.\n     * Adding a check and a branch here would cost performance at every hash.\n     */\n    if (len <= 16)\n        return XXH3_len_0to16_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64);\n    if (len <= 128)\n        return XXH3_len_17to128_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);\n    if (len <= XXH3_MIDSIZE_MAX)\n        return XXH3_len_129to240_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);\n    return f_hl128(input, len, seed64, secret, secretLen);\n}\n\n\n/* ===   Public XXH128 API   === */\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH128_hash_t XXH3_128bits(XXH_NOESCAPE const void* input, size_t len)\n{\n    return XXH3_128bits_internal(input, len, 0,\n                                 XXH3_kSecret, sizeof(XXH3_kSecret),\n                                 XXH3_hashLong_128b_default);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH128_hash_t\nXXH3_128bits_withSecret(XXH_NOESCAPE const void* input, size_t len, XXH_NOESCAPE const void* secret, size_t secretSize)\n{\n    return XXH3_128bits_internal(input, len, 0,\n                                 (const xxh_u8*)secret, secretSize,\n                                 XXH3_hashLong_128b_withSecret);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH128_hash_t\nXXH3_128bits_withSeed(XXH_NOESCAPE const void* input, size_t len, XXH64_hash_t seed)\n{\n    return XXH3_128bits_internal(input, len, seed,\n                                 XXH3_kSecret, sizeof(XXH3_kSecret),\n                                 XXH3_hashLong_128b_withSeed);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH128_hash_t\nXXH3_128bits_withSecretandSeed(XXH_NOESCAPE const void* input, size_t len, XXH_NOESCAPE const void* secret, size_t secretSize, XXH64_hash_t seed)\n{\n    if (len <= XXH3_MIDSIZE_MAX)\n        return XXH3_128bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), NULL);\n    return XXH3_hashLong_128b_withSecret(input, len, seed, secret, secretSize);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH128_hash_t\nXXH128(XXH_NOESCAPE const void* input, size_t len, XXH64_hash_t seed)\n{\n    return XXH3_128bits_withSeed(input, len, seed);\n}\n\n\n/* ===   XXH3 128-bit streaming   === */\n#ifndef XXH_NO_STREAM\n/*\n * All initialization and update functions are identical to 64-bit streaming variant.\n * The only difference is the finalization routine.\n */\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_128bits_reset(XXH_NOESCAPE XXH3_state_t* statePtr)\n{\n    return XXH3_64bits_reset(statePtr);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_128bits_reset_withSecret(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize)\n{\n    return XXH3_64bits_reset_withSecret(statePtr, secret, secretSize);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_128bits_reset_withSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH64_hash_t seed)\n{\n    return XXH3_64bits_reset_withSeed(statePtr, seed);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_128bits_reset_withSecretandSeed(XXH_NOESCAPE XXH3_state_t* statePtr, XXH_NOESCAPE const void* secret, size_t secretSize, XXH64_hash_t seed)\n{\n    return XXH3_64bits_reset_withSecretandSeed(statePtr, secret, secretSize, seed);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_128bits_update(XXH_NOESCAPE XXH3_state_t* state, XXH_NOESCAPE const void* input, size_t len)\n{\n    return XXH3_64bits_update(state, input, len);\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (XXH_NOESCAPE const XXH3_state_t* state)\n{\n    const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;\n    if (state->totalLen > XXH3_MIDSIZE_MAX) {\n        XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB];\n        XXH3_digest_long(acc, state, secret);\n        XXH_ASSERT(state->secretLimit + XXH_STRIPE_LEN >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);\n        return XXH3_finalizeLong_128b(acc, secret, state->secretLimit + XXH_STRIPE_LEN,  (xxh_u64)state->totalLen);\n    }\n    /* len <= XXH3_MIDSIZE_MAX : short code */\n    if (state->useSeed)\n        return XXH3_128bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed);\n    return XXH3_128bits_withSecret(state->buffer, (size_t)(state->totalLen),\n                                   secret, state->secretLimit + XXH_STRIPE_LEN);\n}\n#endif /* !XXH_NO_STREAM */\n/* 128-bit utility functions */\n\n#include <string.h>   /* memcmp, memcpy */\n\n/* return : 1 is equal, 0 if different */\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2)\n{\n    /* note : XXH128_hash_t is compact, it has no padding byte */\n    return !(memcmp(&h1, &h2, sizeof(h1)));\n}\n\n/* This prototype is compatible with stdlib's qsort().\n * @return : >0 if *h128_1  > *h128_2\n *           <0 if *h128_1  < *h128_2\n *           =0 if *h128_1 == *h128_2  */\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API int XXH128_cmp(XXH_NOESCAPE const void* h128_1, XXH_NOESCAPE const void* h128_2)\n{\n    XXH128_hash_t const h1 = *(const XXH128_hash_t*)h128_1;\n    XXH128_hash_t const h2 = *(const XXH128_hash_t*)h128_2;\n    int const hcmp = (h1.high64 > h2.high64) - (h2.high64 > h1.high64);\n    /* note : bets that, in most cases, hash values are different */\n    if (hcmp) return hcmp;\n    return (h1.low64 > h2.low64) - (h2.low64 > h1.low64);\n}\n\n\n/*======   Canonical representation   ======*/\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API void\nXXH128_canonicalFromHash(XXH_NOESCAPE XXH128_canonical_t* dst, XXH128_hash_t hash)\n{\n    XXH_STATIC_ASSERT(sizeof(XXH128_canonical_t) == sizeof(XXH128_hash_t));\n    if (XXH_CPU_LITTLE_ENDIAN) {\n        hash.high64 = XXH_swap64(hash.high64);\n        hash.low64  = XXH_swap64(hash.low64);\n    }\n    XXH_memcpy(dst, &hash.high64, sizeof(hash.high64));\n    XXH_memcpy((char*)dst + sizeof(hash.high64), &hash.low64, sizeof(hash.low64));\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH128_hash_t\nXXH128_hashFromCanonical(XXH_NOESCAPE const XXH128_canonical_t* src)\n{\n    XXH128_hash_t h;\n    h.high64 = XXH_readBE64(src);\n    h.low64  = XXH_readBE64(src->digest + 8);\n    return h;\n}\n\n\n\n/* ==========================================\n * Secret generators\n * ==========================================\n */\n#define XXH_MIN(x, y) (((x) > (y)) ? (y) : (x))\n\nXXH_FORCE_INLINE void XXH3_combine16(void* dst, XXH128_hash_t h128)\n{\n    XXH_writeLE64( dst, XXH_readLE64(dst) ^ h128.low64 );\n    XXH_writeLE64( (char*)dst+8, XXH_readLE64((char*)dst+8) ^ h128.high64 );\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API XXH_errorcode\nXXH3_generateSecret(XXH_NOESCAPE void* secretBuffer, size_t secretSize, XXH_NOESCAPE const void* customSeed, size_t customSeedSize)\n{\n#if (XXH_DEBUGLEVEL >= 1)\n    XXH_ASSERT(secretBuffer != NULL);\n    XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);\n#else\n    /* production mode, assert() are disabled */\n    if (secretBuffer == NULL) return XXH_ERROR;\n    if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;\n#endif\n\n    if (customSeedSize == 0) {\n        customSeed = XXH3_kSecret;\n        customSeedSize = XXH_SECRET_DEFAULT_SIZE;\n    }\n#if (XXH_DEBUGLEVEL >= 1)\n    XXH_ASSERT(customSeed != NULL);\n#else\n    if (customSeed == NULL) return XXH_ERROR;\n#endif\n\n    /* Fill secretBuffer with a copy of customSeed - repeat as needed */\n    {   size_t pos = 0;\n        while (pos < secretSize) {\n            size_t const toCopy = XXH_MIN((secretSize - pos), customSeedSize);\n            memcpy((char*)secretBuffer + pos, customSeed, toCopy);\n            pos += toCopy;\n    }   }\n\n    {   size_t const nbSeg16 = secretSize / 16;\n        size_t n;\n        XXH128_canonical_t scrambler;\n        XXH128_canonicalFromHash(&scrambler, XXH128(customSeed, customSeedSize, 0));\n        for (n=0; n<nbSeg16; n++) {\n            XXH128_hash_t const h128 = XXH128(&scrambler, sizeof(scrambler), n);\n            XXH3_combine16((char*)secretBuffer + n*16, h128);\n        }\n        /* last segment */\n        XXH3_combine16((char*)secretBuffer + secretSize - 16, XXH128_hashFromCanonical(&scrambler));\n    }\n    return XXH_OK;\n}\n\n/*! @ingroup XXH3_family */\nXXH_PUBLIC_API void\nXXH3_generateSecret_fromSeed(XXH_NOESCAPE void* secretBuffer, XXH64_hash_t seed)\n{\n    XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];\n    XXH3_initCustomSecret(secret, seed);\n    XXH_ASSERT(secretBuffer != NULL);\n    memcpy(secretBuffer, secret, XXH_SECRET_DEFAULT_SIZE);\n}\n\n\n\n/* Pop our optimization override from above */\n#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \\\n  && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \\\n  && defined(__OPTIMIZE__) && XXH_SIZE_OPT <= 0 /* respect -O0 and -Os */\n#  pragma GCC pop_options\n#endif\n\n#endif  /* XXH_NO_LONG_LONG */\n\n#endif  /* XXH_NO_XXH3 */\n\n/*!\n * @}\n */\n#endif  /* XXH_IMPLEMENTATION */\n\n\n#if defined (__cplusplus)\n} /* extern \"C\" */\n#endif\n"
  },
  {
    "path": "m4/ax_ac_append_to_file.m4",
    "content": "# ===========================================================================\n#   https://www.gnu.org/software/autoconf-archive/ax_ac_append_to_file.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_AC_APPEND_TO_FILE([FILE],[DATA])\n#\n# DESCRIPTION\n#\n#   Appends the specified data to the specified Autoconf is run. If you want\n#   to append to a file when configure is run use AX_APPEND_TO_FILE instead.\n#\n# LICENSE\n#\n#   Copyright (c) 2009 Allan Caffee <allan.caffee@gmail.com>\n#\n#   Copying and distribution of this file, with or without modification, are\n#   permitted in any medium without royalty provided the copyright notice\n#   and this notice are preserved. This file is offered as-is, without any\n#   warranty.\n\n#serial 10\n\nAC_DEFUN([AX_AC_APPEND_TO_FILE],[\nAC_REQUIRE([AX_FILE_ESCAPES])\nm4_esyscmd(\nAX_FILE_ESCAPES\n[\nprintf \"%s\" \"$2\" >> \"$1\"\n])\n])\n"
  },
  {
    "path": "m4/ax_ac_print_to_file.m4",
    "content": "# ===========================================================================\n#   https://www.gnu.org/software/autoconf-archive/ax_ac_print_to_file.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_AC_PRINT_TO_FILE([FILE],[DATA])\n#\n# DESCRIPTION\n#\n#   Writes the specified data to the specified file when Autoconf is run. If\n#   you want to print to a file when configure is run use AX_PRINT_TO_FILE\n#   instead.\n#\n# LICENSE\n#\n#   Copyright (c) 2009 Allan Caffee <allan.caffee@gmail.com>\n#\n#   Copying and distribution of this file, with or without modification, are\n#   permitted in any medium without royalty provided the copyright notice\n#   and this notice are preserved. This file is offered as-is, without any\n#   warranty.\n\n#serial 10\n\nAC_DEFUN([AX_AC_PRINT_TO_FILE],[\nm4_esyscmd(\nAC_REQUIRE([AX_FILE_ESCAPES])\n[\nprintf \"%s\" \"$2\" > \"$1\"\n])\n])\n"
  },
  {
    "path": "m4/ax_add_am_macro_static.m4",
    "content": "# ===========================================================================\n#  https://www.gnu.org/software/autoconf-archive/ax_add_am_macro_static.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_ADD_AM_MACRO_STATIC([RULE])\n#\n# DESCRIPTION\n#\n#   Adds the specified rule to $AMINCLUDE.\n#\n# LICENSE\n#\n#   Copyright (c) 2009 Tom Howard <tomhoward@users.sf.net>\n#   Copyright (c) 2009 Allan Caffee <allan.caffee@gmail.com>\n#\n#   Copying and distribution of this file, with or without modification, are\n#   permitted in any medium without royalty provided the copyright notice\n#   and this notice are preserved. This file is offered as-is, without any\n#   warranty.\n\n#serial 8\n\nAC_DEFUN([AX_ADD_AM_MACRO_STATIC],[\n  AC_REQUIRE([AX_AM_MACROS_STATIC])\n  AX_AC_APPEND_TO_FILE(AMINCLUDE_STATIC,[$1])\n])\n"
  },
  {
    "path": "m4/ax_am_macros_static.m4",
    "content": "# ===========================================================================\n#   https://www.gnu.org/software/autoconf-archive/ax_am_macros_static.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_AM_MACROS_STATIC\n#\n# DESCRIPTION\n#\n#   Adds support for macros that create Automake rules. You must manually\n#   add the following line\n#\n#     include $(top_srcdir)/aminclude_static.am\n#\n#   to your Makefile.am files.\n#\n# LICENSE\n#\n#   Copyright (c) 2009 Tom Howard <tomhoward@users.sf.net>\n#   Copyright (c) 2009 Allan Caffee <allan.caffee@gmail.com>\n#\n#   Copying and distribution of this file, with or without modification, are\n#   permitted in any medium without royalty provided the copyright notice\n#   and this notice are preserved. This file is offered as-is, without any\n#   warranty.\n\n#serial 11\n\nAC_DEFUN([AMINCLUDE_STATIC],[aminclude_static.am])\n\nAC_DEFUN([AX_AM_MACROS_STATIC],\n[\nAX_AC_PRINT_TO_FILE(AMINCLUDE_STATIC,[\n# ]AMINCLUDE_STATIC[ generated automatically by Autoconf\n# from AX_AM_MACROS_STATIC on ]m4_esyscmd([LC_ALL=C date])[\n])\n])\n"
  },
  {
    "path": "m4/ax_check_compile_flag.m4",
    "content": "# ===========================================================================\n#  https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])\n#\n# DESCRIPTION\n#\n#   Check whether the given FLAG works with the current language's compiler\n#   or gives an error.  (Warnings, however, are ignored)\n#\n#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on\n#   success/failure.\n#\n#   If EXTRA-FLAGS is defined, it is added to the current language's default\n#   flags (e.g. CFLAGS) when the check is done.  The check is thus made with\n#   the flags: \"CFLAGS EXTRA-FLAGS FLAG\".  This can for example be used to\n#   force the compiler to issue an error when a bad flag is given.\n#\n#   INPUT gives an alternative input source to AC_COMPILE_IFELSE.\n#\n#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this\n#   macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.\n#\n# LICENSE\n#\n#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>\n#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>\n#\n#   Copying and distribution of this file, with or without modification, are\n#   permitted in any medium without royalty provided the copyright notice\n#   and this notice are preserved.  This file is offered as-is, without any\n#   warranty.\n\n#serial 6\n\nAC_DEFUN([AX_CHECK_COMPILE_FLAG],\n[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF\nAS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl\nAC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [\n  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS\n  _AC_LANG_PREFIX[]FLAGS=\"$[]_AC_LANG_PREFIX[]FLAGS $4 $1\"\n  AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],\n    [AS_VAR_SET(CACHEVAR,[yes])],\n    [AS_VAR_SET(CACHEVAR,[no])])\n  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])\nAS_VAR_IF(CACHEVAR,yes,\n  [m4_default([$2], :)],\n  [m4_default([$3], :)])\nAS_VAR_POPDEF([CACHEVAR])dnl\n])dnl AX_CHECK_COMPILE_FLAGS\n"
  },
  {
    "path": "m4/ax_code_coverage.m4",
    "content": "# ===========================================================================\n#     https://www.gnu.org/software/autoconf-archive/ax_code_coverage.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_CODE_COVERAGE()\n#\n# DESCRIPTION\n#\n#   Defines CODE_COVERAGE_CPPFLAGS, CODE_COVERAGE_CFLAGS,\n#   CODE_COVERAGE_CXXFLAGS and CODE_COVERAGE_LIBS which should be included\n#   in the CPPFLAGS, CFLAGS CXXFLAGS and LIBS/LIBADD variables of every\n#   build target (program or library) which should be built with code\n#   coverage support. Also add rules using AX_ADD_AM_MACRO_STATIC; and\n#   $enable_code_coverage which can be used in subsequent configure output.\n#   CODE_COVERAGE_ENABLED is defined and substituted, and corresponds to the\n#   value of the --enable-code-coverage option, which defaults to being\n#   disabled.\n#\n#   Test also for gcov program and create GCOV variable that could be\n#   substituted.\n#\n#   Note that all optimization flags in CFLAGS must be disabled when code\n#   coverage is enabled.\n#\n#   Usage example:\n#\n#   configure.ac:\n#\n#     AX_CODE_COVERAGE\n#\n#   Makefile.am:\n#\n#     include $(top_srcdir)/aminclude_static.am\n#\n#     my_program_LIBS = ... $(CODE_COVERAGE_LIBS) ...\n#     my_program_CPPFLAGS = ... $(CODE_COVERAGE_CPPFLAGS) ...\n#     my_program_CFLAGS = ... $(CODE_COVERAGE_CFLAGS) ...\n#     my_program_CXXFLAGS = ... $(CODE_COVERAGE_CXXFLAGS) ...\n#\n#     clean-local: code-coverage-clean\n#     distclean-local: code-coverage-dist-clean\n#\n#   This results in a \"check-code-coverage\" rule being added to any\n#   Makefile.am which do \"include $(top_srcdir)/aminclude_static.am\"\n#   (assuming the module has been configured with --enable-code-coverage).\n#   Running `make check-code-coverage` in that directory will run the\n#   module's test suite (`make check`) and build a code coverage report\n#   detailing the code which was touched, then print the URI for the report.\n#\n#   This code was derived from Makefile.decl in GLib, originally licensed\n#   under LGPLv2.1+.\n#\n# LICENSE\n#\n#   Copyright (c) 2012, 2016 Philip Withnall\n#   Copyright (c) 2012 Xan Lopez\n#   Copyright (c) 2012 Christian Persch\n#   Copyright (c) 2012 Paolo Borelli\n#   Copyright (c) 2012 Dan Winship\n#   Copyright (c) 2015,2018 Bastien ROUCARIES\n#\n#   This library is free software; you can redistribute it and/or modify it\n#   under the terms of the GNU Lesser General Public License as published by\n#   the Free Software Foundation; either version 2.1 of the License, or (at\n#   your option) any later version.\n#\n#   This library is distributed in the hope that it will be useful, but\n#   WITHOUT ANY WARRANTY; without even the implied warranty of\n#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser\n#   General Public License for more details.\n#\n#   You should have received a copy of the GNU Lesser General Public License\n#   along with this program. If not, see <https://www.gnu.org/licenses/>.\n\n#serial 34\n\nm4_define(_AX_CODE_COVERAGE_RULES,[\nAX_ADD_AM_MACRO_STATIC([\n# Code coverage\n#\n# Optional:\n#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.\n#    Multiple directories may be specified, separated by whitespace.\n#    (Default: \\$(top_builddir))\n#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated\n#    by lcov for code coverage. (Default:\n#    \\$(PACKAGE_NAME)-\\$(PACKAGE_VERSION)-coverage.info)\n#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage\n#    reports to be created. (Default:\n#    \\$(PACKAGE_NAME)-\\$(PACKAGE_VERSION)-coverage)\n#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,\n#    set to 0 to disable it and leave empty to stay with the default.\n#    (Default: empty)\n#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov\n#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)\n#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov\n#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)\n#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov\n#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the\n#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)\n#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov\n#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)\n#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering\n#    lcov instance. (Default: empty)\n#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov\n#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)\n#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the\n#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)\n#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml\n#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)\n#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore\n#\n# The generated report will be titled using the \\$(PACKAGE_NAME) and\n# \\$(PACKAGE_VERSION). In order to add the current git hash to the title,\n# use the git-version-gen script, available online.\n# Optional variables\n# run only on top dir\nif CODE_COVERAGE_ENABLED\n ifeq (\\$(abs_builddir), \\$(abs_top_builddir))\nCODE_COVERAGE_DIRECTORY ?= \\$(top_builddir)\nCODE_COVERAGE_OUTPUT_FILE ?= \\$(PACKAGE_NAME)-\\$(PACKAGE_VERSION)-coverage.info\nCODE_COVERAGE_OUTPUT_DIRECTORY ?= \\$(PACKAGE_NAME)-\\$(PACKAGE_VERSION)-coverage\n\nCODE_COVERAGE_BRANCH_COVERAGE ?=\nCODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= \\$(if \\$(CODE_COVERAGE_BRANCH_COVERAGE),\\\n--rc lcov_branch_coverage=\\$(CODE_COVERAGE_BRANCH_COVERAGE))\nCODE_COVERAGE_LCOV_SHOPTS ?= \\$(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)\nCODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool \\\"\\$(GCOV)\\\"\nCODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= \\$(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)\nCODE_COVERAGE_LCOV_OPTIONS ?= \\$(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)\nCODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=\nCODE_COVERAGE_LCOV_RMOPTS ?= \\$(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)\nCODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\\\n\\$(if \\$(CODE_COVERAGE_BRANCH_COVERAGE),\\\n--rc genhtml_branch_coverage=\\$(CODE_COVERAGE_BRANCH_COVERAGE))\nCODE_COVERAGE_GENHTML_OPTIONS ?= \\$(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)\nCODE_COVERAGE_IGNORE_PATTERN ?=\n\nGITIGNOREFILES := \\$(GITIGNOREFILES) \\$(CODE_COVERAGE_OUTPUT_FILE) \\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\ncode_coverage_v_lcov_cap = \\$(code_coverage_v_lcov_cap_\\$(V))\ncode_coverage_v_lcov_cap_ = \\$(code_coverage_v_lcov_cap_\\$(AM_DEFAULT_VERBOSITY))\ncode_coverage_v_lcov_cap_0 = @echo \\\"  LCOV   --capture\\\" \\$(CODE_COVERAGE_OUTPUT_FILE);\ncode_coverage_v_lcov_ign = \\$(code_coverage_v_lcov_ign_\\$(V))\ncode_coverage_v_lcov_ign_ = \\$(code_coverage_v_lcov_ign_\\$(AM_DEFAULT_VERBOSITY))\ncode_coverage_v_lcov_ign_0 = @echo \\\"  LCOV   --remove /tmp/*\\\" \\$(CODE_COVERAGE_IGNORE_PATTERN);\ncode_coverage_v_genhtml = \\$(code_coverage_v_genhtml_\\$(V))\ncode_coverage_v_genhtml_ = \\$(code_coverage_v_genhtml_\\$(AM_DEFAULT_VERBOSITY))\ncode_coverage_v_genhtml_0 = @echo \\\"  GEN   \\\" \\\"\\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\\\";\ncode_coverage_quiet = \\$(code_coverage_quiet_\\$(V))\ncode_coverage_quiet_ = \\$(code_coverage_quiet_\\$(AM_DEFAULT_VERBOSITY))\ncode_coverage_quiet_0 = --quiet\n\n# sanitizes the test-name: replaces with underscores: dashes and dots\ncode_coverage_sanitize = \\$(subst -,_,\\$(subst .,_,\\$(1)))\n\n# Use recursive makes in order to ignore errors during check\ncheck-code-coverage:\n\t-\\$(AM_V_at)\\$(MAKE) \\$(AM_MAKEFLAGS) -k check\n\t\\$(AM_V_at)\\$(MAKE) \\$(AM_MAKEFLAGS) code-coverage-capture\n\n# Capture code coverage data\ncode-coverage-capture: code-coverage-capture-hook\n\t\\$(code_coverage_v_lcov_cap)\\$(LCOV) \\$(code_coverage_quiet) \\$(addprefix --directory ,\\$(CODE_COVERAGE_DIRECTORY)) --capture --output-file \\\"\\$(CODE_COVERAGE_OUTPUT_FILE).tmp\\\" --test-name \\\"\\$(call code_coverage_sanitize,\\$(PACKAGE_NAME)-\\$(PACKAGE_VERSION))\\\" --no-checksum --compat-libtool \\$(CODE_COVERAGE_LCOV_SHOPTS) \\$(CODE_COVERAGE_LCOV_OPTIONS)\n\t\\$(code_coverage_v_lcov_ign)\\$(LCOV) \\$(code_coverage_quiet) \\$(addprefix --directory ,\\$(CODE_COVERAGE_DIRECTORY)) --remove \\\"\\$(CODE_COVERAGE_OUTPUT_FILE).tmp\\\" \\\"/tmp/*\\\" \\$(CODE_COVERAGE_IGNORE_PATTERN) --output-file \\\"\\$(CODE_COVERAGE_OUTPUT_FILE)\\\" \\$(CODE_COVERAGE_LCOV_SHOPTS) \\$(CODE_COVERAGE_LCOV_RMOPTS)\n\t-@rm -f \\\"\\$(CODE_COVERAGE_OUTPUT_FILE).tmp\\\"\n\t\\$(code_coverage_v_genhtml)LANG=C \\$(GENHTML) \\$(code_coverage_quiet) \\$(addprefix --prefix ,\\$(CODE_COVERAGE_DIRECTORY)) --output-directory \\\"\\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\\\" --title \\\"\\$(PACKAGE_NAME)-\\$(PACKAGE_VERSION) Code Coverage\\\" --legend --show-details \\\"\\$(CODE_COVERAGE_OUTPUT_FILE)\\\" \\$(CODE_COVERAGE_GENHTML_OPTIONS)\n\t@echo \\\"file://\\$(abs_builddir)/\\$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html\\\"\n\ncode-coverage-clean:\n\t-\\$(LCOV) --directory \\$(top_builddir) -z\n\t-rm -rf \\\"\\$(CODE_COVERAGE_OUTPUT_FILE)\\\" \\\"\\$(CODE_COVERAGE_OUTPUT_FILE).tmp\\\" \\\"\\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\\\"\n\t-find . \\\\( -name \\\"*.gcda\\\" -o -name \\\"*.gcno\\\" -o -name \\\"*.gcov\\\" \\\\) -delete\n\ncode-coverage-dist-clean:\n\nA][M_DISTCHECK_CONFIGURE_FLAGS := \\$(A][M_DISTCHECK_CONFIGURE_FLAGS) --disable-code-coverage\n else # ifneq (\\$(abs_builddir), \\$(abs_top_builddir))\ncheck-code-coverage:\n\ncode-coverage-capture: code-coverage-capture-hook\n\ncode-coverage-clean:\n\ncode-coverage-dist-clean:\n endif # ifeq (\\$(abs_builddir), \\$(abs_top_builddir))\nelse #! CODE_COVERAGE_ENABLED\n# Use recursive makes in order to ignore errors during check\ncheck-code-coverage:\n\t@echo \\\"Need to reconfigure with --enable-code-coverage\\\"\n# Capture code coverage data\ncode-coverage-capture: code-coverage-capture-hook\n\t@echo \\\"Need to reconfigure with --enable-code-coverage\\\"\n\ncode-coverage-clean:\n\ncode-coverage-dist-clean:\n\nendif #CODE_COVERAGE_ENABLED\n# Hook rule executed before code-coverage-capture, overridable by the user\ncode-coverage-capture-hook:\n\n.PHONY: check-code-coverage code-coverage-capture code-coverage-dist-clean code-coverage-clean code-coverage-capture-hook\n])\n])\n\nAC_DEFUN([_AX_CODE_COVERAGE_ENABLED],[\n\tAX_CHECK_GNU_MAKE([],[AC_MSG_ERROR([not using GNU make that is needed for coverage])])\n\tAC_REQUIRE([AX_ADD_AM_MACRO_STATIC])\n\t# check for gcov\n\tAC_CHECK_TOOL([GCOV],\n\t\t  [$_AX_CODE_COVERAGE_GCOV_PROG_WITH],\n\t\t  [:])\n\tAS_IF([test \"X$GCOV\" = \"X:\"],\n\t      [AC_MSG_ERROR([gcov is needed to do coverage])])\n\tAC_SUBST([GCOV])\n\n\tdnl Check if gcc is being used\n\tAS_IF([ test \"$GCC\" = \"no\" ], [\n\t\tAC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage])\n\t      ])\n\n\tAC_CHECK_PROG([LCOV], [lcov], [lcov])\n\tAC_CHECK_PROG([GENHTML], [genhtml], [genhtml])\n\n\tAS_IF([ test x\"$LCOV\" = x ], [\n\t\tAC_MSG_ERROR([To enable code coverage reporting you must have lcov installed])\n\t      ])\n\n\tAS_IF([ test x\"$GENHTML\" = x ], [\n\t\tAC_MSG_ERROR([Could not find genhtml from the lcov package])\n\t])\n\n\tdnl Build the code coverage flags\n\tdnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility\n\tCODE_COVERAGE_CPPFLAGS=\"-DNDEBUG\"\n\tCODE_COVERAGE_CFLAGS=\"-O0 -g -fprofile-arcs -ftest-coverage\"\n\tCODE_COVERAGE_CXXFLAGS=\"-O0 -g -fprofile-arcs -ftest-coverage\"\n\tCODE_COVERAGE_LIBS=\"-lgcov\"\n\n\tAC_SUBST([CODE_COVERAGE_CPPFLAGS])\n\tAC_SUBST([CODE_COVERAGE_CFLAGS])\n\tAC_SUBST([CODE_COVERAGE_CXXFLAGS])\n\tAC_SUBST([CODE_COVERAGE_LIBS])\n])\n\nAC_DEFUN([AX_CODE_COVERAGE],[\n\tdnl Check for --enable-code-coverage\n\n\t# allow to override gcov location\n\tAC_ARG_WITH([gcov],\n\t  [AS_HELP_STRING([--with-gcov[=GCOV]], [use given GCOV for coverage (GCOV=gcov).])],\n\t  [_AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov],\n\t  [_AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov])\n\n\tAC_MSG_CHECKING([whether to build with code coverage support])\n\tAC_ARG_ENABLE([code-coverage],\n\t  AS_HELP_STRING([--enable-code-coverage],\n\t  [Whether to enable code coverage support]),,\n\t  enable_code_coverage=no)\n\n\tAM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test \"x$enable_code_coverage\" = xyes])\n\tAC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage])\n\tAC_MSG_RESULT($enable_code_coverage)\n\n\tAS_IF([ test \"x$enable_code_coverage\" = xyes ], [\n\t\t_AX_CODE_COVERAGE_ENABLED\n\t      ])\n\n\t_AX_CODE_COVERAGE_RULES\n])\n"
  },
  {
    "path": "m4/ax_cxx_compile_stdcxx.m4",
    "content": "# ===========================================================================\n#  https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional])\n#\n# DESCRIPTION\n#\n#   Check for baseline language coverage in the compiler for the specified\n#   version of the C++ standard.  If necessary, add switches to CXX and\n#   CXXCPP to enable support.  VERSION may be '11', '14', '17', or '20' for\n#   the respective C++ standard version.\n#\n#   The second argument, if specified, indicates whether you insist on an\n#   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.\n#   -std=c++11).  If neither is specified, you get whatever works, with\n#   preference for no added switch, and then for an extended mode.\n#\n#   The third argument, if specified 'mandatory' or if left unspecified,\n#   indicates that baseline support for the specified C++ standard is\n#   required and that the macro should error out if no mode with that\n#   support is found.  If specified 'optional', then configuration proceeds\n#   regardless, after defining HAVE_CXX${VERSION} if and only if a\n#   supporting mode is found.\n#\n# LICENSE\n#\n#   Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>\n#   Copyright (c) 2012 Zack Weinberg <zackw@panix.com>\n#   Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>\n#   Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>\n#   Copyright (c) 2015 Paul Norman <penorman@mac.com>\n#   Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>\n#   Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>\n#   Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>\n#   Copyright (c) 2020 Jason Merrill <jason@redhat.com>\n#   Copyright (c) 2021 Jörn Heusipp <osmanx@problemloesungsmaschine.de>\n#\n#   Copying and distribution of this file, with or without modification, are\n#   permitted in any medium without royalty provided the copyright notice\n#   and this notice are preserved.  This file is offered as-is, without any\n#   warranty.\n\n#serial 15\n\ndnl  This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro\ndnl  (serial version number 13).\n\nAC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl\n  m4_if([$1], [11], [ax_cxx_compile_alternatives=\"11 0x\"],\n        [$1], [14], [ax_cxx_compile_alternatives=\"14 1y\"],\n        [$1], [17], [ax_cxx_compile_alternatives=\"17 1z\"],\n        [$1], [20], [ax_cxx_compile_alternatives=\"20\"],\n        [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl\n  m4_if([$2], [], [],\n        [$2], [ext], [],\n        [$2], [noext], [],\n        [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl\n  m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true],\n        [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],\n        [$3], [optional], [ax_cxx_compile_cxx$1_required=false],\n        [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])\n  AC_LANG_PUSH([C++])dnl\n  ac_success=no\n\n  m4_if([$2], [], [dnl\n    AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,\n\t\t   ax_cv_cxx_compile_cxx$1,\n      [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],\n        [ax_cv_cxx_compile_cxx$1=yes],\n        [ax_cv_cxx_compile_cxx$1=no])])\n    if test x$ax_cv_cxx_compile_cxx$1 = xyes; then\n      ac_success=yes\n    fi])\n\n  m4_if([$2], [noext], [], [dnl\n  if test x$ac_success = xno; then\n    for alternative in ${ax_cxx_compile_alternatives}; do\n      switch=\"-std=gnu++${alternative}\"\n      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])\n      AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,\n                     $cachevar,\n        [ac_save_CXX=\"$CXX\"\n         CXX=\"$CXX $switch\"\n         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],\n          [eval $cachevar=yes],\n          [eval $cachevar=no])\n         CXX=\"$ac_save_CXX\"])\n      if eval test x\\$$cachevar = xyes; then\n        CXX=\"$CXX $switch\"\n        if test -n \"$CXXCPP\" ; then\n          CXXCPP=\"$CXXCPP $switch\"\n        fi\n        ac_success=yes\n        break\n      fi\n    done\n  fi])\n\n  m4_if([$2], [ext], [], [dnl\n  if test x$ac_success = xno; then\n    dnl HP's aCC needs +std=c++11 according to:\n    dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf\n    dnl Cray's crayCC needs \"-h std=c++11\"\n    for alternative in ${ax_cxx_compile_alternatives}; do\n      for switch in -std=c++${alternative} +std=c++${alternative} \"-h std=c++${alternative}\"; do\n        cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])\n        AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,\n                       $cachevar,\n          [ac_save_CXX=\"$CXX\"\n           CXX=\"$CXX $switch\"\n           AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],\n            [eval $cachevar=yes],\n            [eval $cachevar=no])\n           CXX=\"$ac_save_CXX\"])\n        if eval test x\\$$cachevar = xyes; then\n          CXX=\"$CXX $switch\"\n          if test -n \"$CXXCPP\" ; then\n            CXXCPP=\"$CXXCPP $switch\"\n          fi\n          ac_success=yes\n          break\n        fi\n      done\n      if test x$ac_success = xyes; then\n        break\n      fi\n    done\n  fi])\n  AC_LANG_POP([C++])\n  if test x$ax_cxx_compile_cxx$1_required = xtrue; then\n    if test x$ac_success = xno; then\n      AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])\n    fi\n  fi\n  if test x$ac_success = xno; then\n    HAVE_CXX$1=0\n    AC_MSG_NOTICE([No compiler with C++$1 support was found])\n  else\n    HAVE_CXX$1=1\n    AC_DEFINE(HAVE_CXX$1,1,\n              [define if the compiler supports basic C++$1 syntax])\n  fi\n  AC_SUBST(HAVE_CXX$1)\n])\n\n\ndnl  Test body for checking C++11 support\n\nm4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],\n  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11\n)\n\ndnl  Test body for checking C++14 support\n\nm4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],\n  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11\n  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14\n)\n\ndnl  Test body for checking C++17 support\n\nm4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],\n  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11\n  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14\n  _AX_CXX_COMPILE_STDCXX_testbody_new_in_17\n)\n\ndnl  Test body for checking C++20 support\n\nm4_define([_AX_CXX_COMPILE_STDCXX_testbody_20],\n  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11\n  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14\n  _AX_CXX_COMPILE_STDCXX_testbody_new_in_17\n  _AX_CXX_COMPILE_STDCXX_testbody_new_in_20\n)\n\n\ndnl  Tests for new features in C++11\n\nm4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[\n\n// If the compiler admits that it is not ready for C++11, why torture it?\n// Hopefully, this will speed up the test.\n\n#ifndef __cplusplus\n\n#error \"This is not a C++ compiler\"\n\n// MSVC always sets __cplusplus to 199711L in older versions; newer versions\n// only set it correctly if /Zc:__cplusplus is specified as well as a\n// /std:c++NN switch:\n// https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/\n#elif __cplusplus < 201103L && !defined _MSC_VER\n\n#error \"This is not a C++11 compiler\"\n\n#else\n\nnamespace cxx11\n{\n\n  namespace test_static_assert\n  {\n\n    template <typename T>\n    struct check\n    {\n      static_assert(sizeof(int) <= sizeof(T), \"not big enough\");\n    };\n\n  }\n\n  namespace test_final_override\n  {\n\n    struct Base\n    {\n      virtual ~Base() {}\n      virtual void f() {}\n    };\n\n    struct Derived : public Base\n    {\n      virtual ~Derived() override {}\n      virtual void f() override {}\n    };\n\n  }\n\n  namespace test_double_right_angle_brackets\n  {\n\n    template < typename T >\n    struct check {};\n\n    typedef check<void> single_type;\n    typedef check<check<void>> double_type;\n    typedef check<check<check<void>>> triple_type;\n    typedef check<check<check<check<void>>>> quadruple_type;\n\n  }\n\n  namespace test_decltype\n  {\n\n    int\n    f()\n    {\n      int a = 1;\n      decltype(a) b = 2;\n      return a + b;\n    }\n\n  }\n\n  namespace test_type_deduction\n  {\n\n    template < typename T1, typename T2 >\n    struct is_same\n    {\n      static const bool value = false;\n    };\n\n    template < typename T >\n    struct is_same<T, T>\n    {\n      static const bool value = true;\n    };\n\n    template < typename T1, typename T2 >\n    auto\n    add(T1 a1, T2 a2) -> decltype(a1 + a2)\n    {\n      return a1 + a2;\n    }\n\n    int\n    test(const int c, volatile int v)\n    {\n      static_assert(is_same<int, decltype(0)>::value == true, \"\");\n      static_assert(is_same<int, decltype(c)>::value == false, \"\");\n      static_assert(is_same<int, decltype(v)>::value == false, \"\");\n      auto ac = c;\n      auto av = v;\n      auto sumi = ac + av + 'x';\n      auto sumf = ac + av + 1.0;\n      static_assert(is_same<int, decltype(ac)>::value == true, \"\");\n      static_assert(is_same<int, decltype(av)>::value == true, \"\");\n      static_assert(is_same<int, decltype(sumi)>::value == true, \"\");\n      static_assert(is_same<int, decltype(sumf)>::value == false, \"\");\n      static_assert(is_same<int, decltype(add(c, v))>::value == true, \"\");\n      return (sumf > 0.0) ? sumi : add(c, v);\n    }\n\n  }\n\n  namespace test_noexcept\n  {\n\n    int f() { return 0; }\n    int g() noexcept { return 0; }\n\n    static_assert(noexcept(f()) == false, \"\");\n    static_assert(noexcept(g()) == true, \"\");\n\n  }\n\n  namespace test_constexpr\n  {\n\n    template < typename CharT >\n    unsigned long constexpr\n    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept\n    {\n      return *s ? strlen_c_r(s + 1, acc + 1) : acc;\n    }\n\n    template < typename CharT >\n    unsigned long constexpr\n    strlen_c(const CharT *const s) noexcept\n    {\n      return strlen_c_r(s, 0UL);\n    }\n\n    static_assert(strlen_c(\"\") == 0UL, \"\");\n    static_assert(strlen_c(\"1\") == 1UL, \"\");\n    static_assert(strlen_c(\"example\") == 7UL, \"\");\n    static_assert(strlen_c(\"another\\0example\") == 7UL, \"\");\n\n  }\n\n  namespace test_rvalue_references\n  {\n\n    template < int N >\n    struct answer\n    {\n      static constexpr int value = N;\n    };\n\n    answer<1> f(int&)       { return answer<1>(); }\n    answer<2> f(const int&) { return answer<2>(); }\n    answer<3> f(int&&)      { return answer<3>(); }\n\n    void\n    test()\n    {\n      int i = 0;\n      const int c = 0;\n      static_assert(decltype(f(i))::value == 1, \"\");\n      static_assert(decltype(f(c))::value == 2, \"\");\n      static_assert(decltype(f(0))::value == 3, \"\");\n    }\n\n  }\n\n  namespace test_uniform_initialization\n  {\n\n    struct test\n    {\n      static const int zero {};\n      static const int one {1};\n    };\n\n    static_assert(test::zero == 0, \"\");\n    static_assert(test::one == 1, \"\");\n\n  }\n\n  namespace test_lambdas\n  {\n\n    void\n    test1()\n    {\n      auto lambda1 = [](){};\n      auto lambda2 = lambda1;\n      lambda1();\n      lambda2();\n    }\n\n    int\n    test2()\n    {\n      auto a = [](int i, int j){ return i + j; }(1, 2);\n      auto b = []() -> int { return '0'; }();\n      auto c = [=](){ return a + b; }();\n      auto d = [&](){ return c; }();\n      auto e = [a, &b](int x) mutable {\n        const auto identity = [](int y){ return y; };\n        for (auto i = 0; i < a; ++i)\n          a += b--;\n        return x + identity(a + b);\n      }(0);\n      return a + b + c + d + e;\n    }\n\n    int\n    test3()\n    {\n      const auto nullary = [](){ return 0; };\n      const auto unary = [](int x){ return x; };\n      using nullary_t = decltype(nullary);\n      using unary_t = decltype(unary);\n      const auto higher1st = [](nullary_t f){ return f(); };\n      const auto higher2nd = [unary](nullary_t f1){\n        return [unary, f1](unary_t f2){ return f2(unary(f1())); };\n      };\n      return higher1st(nullary) + higher2nd(nullary)(unary);\n    }\n\n  }\n\n  namespace test_variadic_templates\n  {\n\n    template <int...>\n    struct sum;\n\n    template <int N0, int... N1toN>\n    struct sum<N0, N1toN...>\n    {\n      static constexpr auto value = N0 + sum<N1toN...>::value;\n    };\n\n    template <>\n    struct sum<>\n    {\n      static constexpr auto value = 0;\n    };\n\n    static_assert(sum<>::value == 0, \"\");\n    static_assert(sum<1>::value == 1, \"\");\n    static_assert(sum<23>::value == 23, \"\");\n    static_assert(sum<1, 2>::value == 3, \"\");\n    static_assert(sum<5, 5, 11>::value == 21, \"\");\n    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, \"\");\n\n  }\n\n  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae\n  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function\n  // because of this.\n  namespace test_template_alias_sfinae\n  {\n\n    struct foo {};\n\n    template<typename T>\n    using member = typename T::member_type;\n\n    template<typename T>\n    void func(...) {}\n\n    template<typename T>\n    void func(member<T>*) {}\n\n    void test();\n\n    void test() { func<foo>(0); }\n\n  }\n\n}  // namespace cxx11\n\n#endif  // __cplusplus >= 201103L\n\n]])\n\n\ndnl  Tests for new features in C++14\n\nm4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[\n\n// If the compiler admits that it is not ready for C++14, why torture it?\n// Hopefully, this will speed up the test.\n\n#ifndef __cplusplus\n\n#error \"This is not a C++ compiler\"\n\n#elif __cplusplus < 201402L && !defined _MSC_VER\n\n#error \"This is not a C++14 compiler\"\n\n#else\n\nnamespace cxx14\n{\n\n  namespace test_polymorphic_lambdas\n  {\n\n    int\n    test()\n    {\n      const auto lambda = [](auto&&... args){\n        const auto istiny = [](auto x){\n          return (sizeof(x) == 1UL) ? 1 : 0;\n        };\n        const int aretiny[] = { istiny(args)... };\n        return aretiny[0];\n      };\n      return lambda(1, 1L, 1.0f, '1');\n    }\n\n  }\n\n  namespace test_binary_literals\n  {\n\n    constexpr auto ivii = 0b0000000000101010;\n    static_assert(ivii == 42, \"wrong value\");\n\n  }\n\n  namespace test_generalized_constexpr\n  {\n\n    template < typename CharT >\n    constexpr unsigned long\n    strlen_c(const CharT *const s) noexcept\n    {\n      auto length = 0UL;\n      for (auto p = s; *p; ++p)\n        ++length;\n      return length;\n    }\n\n    static_assert(strlen_c(\"\") == 0UL, \"\");\n    static_assert(strlen_c(\"x\") == 1UL, \"\");\n    static_assert(strlen_c(\"test\") == 4UL, \"\");\n    static_assert(strlen_c(\"another\\0test\") == 7UL, \"\");\n\n  }\n\n  namespace test_lambda_init_capture\n  {\n\n    int\n    test()\n    {\n      auto x = 0;\n      const auto lambda1 = [a = x](int b){ return a + b; };\n      const auto lambda2 = [a = lambda1(x)](){ return a; };\n      return lambda2();\n    }\n\n  }\n\n  namespace test_digit_separators\n  {\n\n    constexpr auto ten_million = 100'000'000;\n    static_assert(ten_million == 100000000, \"\");\n\n  }\n\n  namespace test_return_type_deduction\n  {\n\n    auto f(int& x) { return x; }\n    decltype(auto) g(int& x) { return x; }\n\n    template < typename T1, typename T2 >\n    struct is_same\n    {\n      static constexpr auto value = false;\n    };\n\n    template < typename T >\n    struct is_same<T, T>\n    {\n      static constexpr auto value = true;\n    };\n\n    int\n    test()\n    {\n      auto x = 0;\n      static_assert(is_same<int, decltype(f(x))>::value, \"\");\n      static_assert(is_same<int&, decltype(g(x))>::value, \"\");\n      return x;\n    }\n\n  }\n\n}  // namespace cxx14\n\n#endif  // __cplusplus >= 201402L\n\n]])\n\n\ndnl  Tests for new features in C++17\n\nm4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[\n\n// If the compiler admits that it is not ready for C++17, why torture it?\n// Hopefully, this will speed up the test.\n\n#ifndef __cplusplus\n\n#error \"This is not a C++ compiler\"\n\n#elif __cplusplus < 201703L && !defined _MSC_VER\n\n#error \"This is not a C++17 compiler\"\n\n#else\n\n#include <initializer_list>\n#include <utility>\n#include <type_traits>\n\nnamespace cxx17\n{\n\n  namespace test_constexpr_lambdas\n  {\n\n    constexpr int foo = [](){return 42;}();\n\n  }\n\n  namespace test::nested_namespace::definitions\n  {\n\n  }\n\n  namespace test_fold_expression\n  {\n\n    template<typename... Args>\n    int multiply(Args... args)\n    {\n      return (args * ... * 1);\n    }\n\n    template<typename... Args>\n    bool all(Args... args)\n    {\n      return (args && ...);\n    }\n\n  }\n\n  namespace test_extended_static_assert\n  {\n\n    static_assert (true);\n\n  }\n\n  namespace test_auto_brace_init_list\n  {\n\n    auto foo = {5};\n    auto bar {5};\n\n    static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value);\n    static_assert(std::is_same<int, decltype(bar)>::value);\n  }\n\n  namespace test_typename_in_template_template_parameter\n  {\n\n    template<template<typename> typename X> struct D;\n\n  }\n\n  namespace test_fallthrough_nodiscard_maybe_unused_attributes\n  {\n\n    int f1()\n    {\n      return 42;\n    }\n\n    [[nodiscard]] int f2()\n    {\n      [[maybe_unused]] auto unused = f1();\n\n      switch (f1())\n      {\n      case 17:\n        f1();\n        [[fallthrough]];\n      case 42:\n        f1();\n      }\n      return f1();\n    }\n\n  }\n\n  namespace test_extended_aggregate_initialization\n  {\n\n    struct base1\n    {\n      int b1, b2 = 42;\n    };\n\n    struct base2\n    {\n      base2() {\n        b3 = 42;\n      }\n      int b3;\n    };\n\n    struct derived : base1, base2\n    {\n        int d;\n    };\n\n    derived d1 {{1, 2}, {}, 4};  // full initialization\n    derived d2 {{}, {}, 4};      // value-initialized bases\n\n  }\n\n  namespace test_general_range_based_for_loop\n  {\n\n    struct iter\n    {\n      int i;\n\n      int& operator* ()\n      {\n        return i;\n      }\n\n      const int& operator* () const\n      {\n        return i;\n      }\n\n      iter& operator++()\n      {\n        ++i;\n        return *this;\n      }\n    };\n\n    struct sentinel\n    {\n      int i;\n    };\n\n    bool operator== (const iter& i, const sentinel& s)\n    {\n      return i.i == s.i;\n    }\n\n    bool operator!= (const iter& i, const sentinel& s)\n    {\n      return !(i == s);\n    }\n\n    struct range\n    {\n      iter begin() const\n      {\n        return {0};\n      }\n\n      sentinel end() const\n      {\n        return {5};\n      }\n    };\n\n    void f()\n    {\n      range r {};\n\n      for (auto i : r)\n      {\n        [[maybe_unused]] auto v = i;\n      }\n    }\n\n  }\n\n  namespace test_lambda_capture_asterisk_this_by_value\n  {\n\n    struct t\n    {\n      int i;\n      int foo()\n      {\n        return [*this]()\n        {\n          return i;\n        }();\n      }\n    };\n\n  }\n\n  namespace test_enum_class_construction\n  {\n\n    enum class byte : unsigned char\n    {};\n\n    byte foo {42};\n\n  }\n\n  namespace test_constexpr_if\n  {\n\n    template <bool cond>\n    int f ()\n    {\n      if constexpr(cond)\n      {\n        return 13;\n      }\n      else\n      {\n        return 42;\n      }\n    }\n\n  }\n\n  namespace test_selection_statement_with_initializer\n  {\n\n    int f()\n    {\n      return 13;\n    }\n\n    int f2()\n    {\n      if (auto i = f(); i > 0)\n      {\n        return 3;\n      }\n\n      switch (auto i = f(); i + 4)\n      {\n      case 17:\n        return 2;\n\n      default:\n        return 1;\n      }\n    }\n\n  }\n\n  namespace test_template_argument_deduction_for_class_templates\n  {\n\n    template <typename T1, typename T2>\n    struct pair\n    {\n      pair (T1 p1, T2 p2)\n        : m1 {p1},\n          m2 {p2}\n      {}\n\n      T1 m1;\n      T2 m2;\n    };\n\n    void f()\n    {\n      [[maybe_unused]] auto p = pair{13, 42u};\n    }\n\n  }\n\n  namespace test_non_type_auto_template_parameters\n  {\n\n    template <auto n>\n    struct B\n    {};\n\n    B<5> b1;\n    B<'a'> b2;\n\n  }\n\n  namespace test_structured_bindings\n  {\n\n    int arr[2] = { 1, 2 };\n    std::pair<int, int> pr = { 1, 2 };\n\n    auto f1() -> int(&)[2]\n    {\n      return arr;\n    }\n\n    auto f2() -> std::pair<int, int>&\n    {\n      return pr;\n    }\n\n    struct S\n    {\n      int x1 : 2;\n      volatile double y1;\n    };\n\n    S f3()\n    {\n      return {};\n    }\n\n    auto [ x1, y1 ] = f1();\n    auto& [ xr1, yr1 ] = f1();\n    auto [ x2, y2 ] = f2();\n    auto& [ xr2, yr2 ] = f2();\n    const auto [ x3, y3 ] = f3();\n\n  }\n\n  namespace test_exception_spec_type_system\n  {\n\n    struct Good {};\n    struct Bad {};\n\n    void g1() noexcept;\n    void g2();\n\n    template<typename T>\n    Bad\n    f(T*, T*);\n\n    template<typename T1, typename T2>\n    Good\n    f(T1*, T2*);\n\n    static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);\n\n  }\n\n  namespace test_inline_variables\n  {\n\n    template<class T> void f(T)\n    {}\n\n    template<class T> inline T g(T)\n    {\n      return T{};\n    }\n\n    template<> inline void f<>(int)\n    {}\n\n    template<> int g<>(int)\n    {\n      return 5;\n    }\n\n  }\n\n}  // namespace cxx17\n\n#endif  // __cplusplus < 201703L && !defined _MSC_VER\n\n]])\n\n\ndnl  Tests for new features in C++20\n\nm4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_20], [[\n\n#ifndef __cplusplus\n\n#error \"This is not a C++ compiler\"\n\n#elif __cplusplus < 202002L && !defined _MSC_VER\n\n#error \"This is not a C++20 compiler\"\n\n#else\n\n#include <version>\n\nnamespace cxx20\n{\n\n// As C++20 supports feature test macros in the standard, there is no\n// immediate need to actually test for feature availability on the\n// Autoconf side.\n\n}  // namespace cxx20\n\n#endif  // __cplusplus < 202002L && !defined _MSC_VER\n\n]])\n"
  },
  {
    "path": "m4/ax_file_escapes.m4",
    "content": "# ===========================================================================\n#     https://www.gnu.org/software/autoconf-archive/ax_file_escapes.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_FILE_ESCAPES\n#\n# DESCRIPTION\n#\n#   Writes the specified data to the specified file.\n#\n# LICENSE\n#\n#   Copyright (c) 2008 Tom Howard <tomhoward@users.sf.net>\n#\n#   Copying and distribution of this file, with or without modification, are\n#   permitted in any medium without royalty provided the copyright notice\n#   and this notice are preserved. This file is offered as-is, without any\n#   warranty.\n\n#serial 8\n\nAC_DEFUN([AX_FILE_ESCAPES],[\nAX_DOLLAR=\"\\$\"\nAX_SRB=\"\\\\135\"\nAX_SLB=\"\\\\133\"\nAX_BS=\"\\\\\\\\\"\nAX_DQ=\"\\\"\"\n])\n"
  },
  {
    "path": "m4/ax_gcc_builtin.m4",
    "content": "# ===========================================================================\n#      https://www.gnu.org/software/autoconf-archive/ax_gcc_builtin.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_GCC_BUILTIN(BUILTIN)\n#\n# DESCRIPTION\n#\n#   This macro checks if the compiler supports one of GCC's built-in\n#   functions; many other compilers also provide those same built-ins.\n#\n#   The BUILTIN parameter is the name of the built-in function.\n#\n#   If BUILTIN is supported define HAVE_<BUILTIN>. Keep in mind that since\n#   builtins usually start with two underscores they will be copied over\n#   into the HAVE_<BUILTIN> definition (e.g. HAVE___BUILTIN_EXPECT for\n#   __builtin_expect()).\n#\n#   The macro caches its result in the ax_cv_have_<BUILTIN> variable (e.g.\n#   ax_cv_have___builtin_expect).\n#\n#   The macro currently supports the following built-in functions:\n#\n#    __builtin_assume_aligned\n#    __builtin_bswap16\n#    __builtin_bswap32\n#    __builtin_bswap64\n#    __builtin_choose_expr\n#    __builtin___clear_cache\n#    __builtin_clrsb\n#    __builtin_clrsbl\n#    __builtin_clrsbll\n#    __builtin_clz\n#    __builtin_clzl\n#    __builtin_clzll\n#    __builtin_complex\n#    __builtin_constant_p\n#    __builtin_ctz\n#    __builtin_ctzl\n#    __builtin_ctzll\n#    __builtin_expect\n#    __builtin_ffs\n#    __builtin_ffsl\n#    __builtin_ffsll\n#    __builtin_fpclassify\n#    __builtin_huge_val\n#    __builtin_huge_valf\n#    __builtin_huge_vall\n#    __builtin_inf\n#    __builtin_infd128\n#    __builtin_infd32\n#    __builtin_infd64\n#    __builtin_inff\n#    __builtin_infl\n#    __builtin_isinf_sign\n#    __builtin_nan\n#    __builtin_nand128\n#    __builtin_nand32\n#    __builtin_nand64\n#    __builtin_nanf\n#    __builtin_nanl\n#    __builtin_nans\n#    __builtin_nansf\n#    __builtin_nansl\n#    __builtin_object_size\n#    __builtin_parity\n#    __builtin_parityl\n#    __builtin_parityll\n#    __builtin_popcount\n#    __builtin_popcountl\n#    __builtin_popcountll\n#    __builtin_powi\n#    __builtin_powif\n#    __builtin_powil\n#    __builtin_prefetch\n#    __builtin_trap\n#    __builtin_types_compatible_p\n#    __builtin_unreachable\n#\n#   Unsupported built-ins will be tested with an empty parameter set and the\n#   result of the check might be wrong or meaningless so use with care.\n#\n# LICENSE\n#\n#   Copyright (c) 2013 Gabriele Svelto <gabriele.svelto@gmail.com>\n#\n#   Copying and distribution of this file, with or without modification, are\n#   permitted in any medium without royalty provided the copyright notice\n#   and this notice are preserved.  This file is offered as-is, without any\n#   warranty.\n\n#serial 6\n\nAC_DEFUN([AX_GCC_BUILTIN], [\n    AS_VAR_PUSHDEF([ac_var], [ax_cv_have_$1])\n\n    AC_CACHE_CHECK([for $1], [ac_var], [\n        AC_LINK_IFELSE([AC_LANG_PROGRAM([], [\n            m4_case([$1],\n                [__builtin_assume_aligned], [$1(\"\", 0)],\n                [__builtin_bswap16], [$1(0)],\n                [__builtin_bswap32], [$1(0)],\n                [__builtin_bswap64], [$1(0)],\n                [__builtin_choose_expr], [$1(0, 0, 0)],\n                [__builtin___clear_cache], [$1(\"\", \"\")],\n                [__builtin_clrsb], [$1(0)],\n                [__builtin_clrsbl], [$1(0)],\n                [__builtin_clrsbll], [$1(0)],\n                [__builtin_clz], [$1(0)],\n                [__builtin_clzl], [$1(0)],\n                [__builtin_clzll], [$1(0)],\n                [__builtin_complex], [$1(0.0, 0.0)],\n                [__builtin_constant_p], [$1(0)],\n                [__builtin_ctz], [$1(0)],\n                [__builtin_ctzl], [$1(0)],\n                [__builtin_ctzll], [$1(0)],\n                [__builtin_expect], [$1(0, 0)],\n                [__builtin_ffs], [$1(0)],\n                [__builtin_ffsl], [$1(0)],\n                [__builtin_ffsll], [$1(0)],\n                [__builtin_fpclassify], [$1(0, 1, 2, 3, 4, 0.0)],\n                [__builtin_huge_val], [$1()],\n                [__builtin_huge_valf], [$1()],\n                [__builtin_huge_vall], [$1()],\n                [__builtin_inf], [$1()],\n                [__builtin_infd128], [$1()],\n                [__builtin_infd32], [$1()],\n                [__builtin_infd64], [$1()],\n                [__builtin_inff], [$1()],\n                [__builtin_infl], [$1()],\n                [__builtin_isinf_sign], [$1(0.0)],\n                [__builtin_nan], [$1(\"\")],\n                [__builtin_nand128], [$1(\"\")],\n                [__builtin_nand32], [$1(\"\")],\n                [__builtin_nand64], [$1(\"\")],\n                [__builtin_nanf], [$1(\"\")],\n                [__builtin_nanl], [$1(\"\")],\n                [__builtin_nans], [$1(\"\")],\n                [__builtin_nansf], [$1(\"\")],\n                [__builtin_nansl], [$1(\"\")],\n                [__builtin_object_size], [$1(\"\", 0)],\n                [__builtin_parity], [$1(0)],\n                [__builtin_parityl], [$1(0)],\n                [__builtin_parityll], [$1(0)],\n                [__builtin_popcount], [$1(0)],\n                [__builtin_popcountl], [$1(0)],\n                [__builtin_popcountll], [$1(0)],\n                [__builtin_powi], [$1(0, 0)],\n                [__builtin_powif], [$1(0, 0)],\n                [__builtin_powil], [$1(0, 0)],\n                [__builtin_prefetch], [$1(\"\")],\n                [__builtin_trap], [$1()],\n                [__builtin_types_compatible_p], [$1(int, int)],\n                [__builtin_unreachable], [$1()],\n                [m4_warn([syntax], [Unsupported built-in $1, the test may fail])\n                 $1()]\n            )\n            ])],\n            [AS_VAR_SET([ac_var], [yes])],\n            [AS_VAR_SET([ac_var], [no])])\n    ])\n\n    AS_IF([test yes = AS_VAR_GET([ac_var])],\n        [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1), 1,\n            [Define to 1 if the system has the `$1' built-in function])], [])\n\n    AS_VAR_POPDEF([ac_var])\n])\n"
  },
  {
    "path": "src/AGLTable.hpp",
    "content": "/*************************************************************************\n** AGLTable.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n/* The following table provides a compact mapping from PostScript character names\n * to Unicode points. Instead of using the character names directly it maps the\n * hash values (xxhash32) of the names to the corresponding code points.\n * The character mapping is derived from the Adobe Glyph List (AGL):\n * https://github.com/adobe-type-tools/agl-aglfn\n * http://tug.ctan.org/macros/latex/contrib/pdfx/glyphtounicode-cmr.tex */\n\n#include <array>\n\nstruct HashCodepointPair {\n\tuint32_t hash;\n\tuint32_t codepoint;\n};\n\nstd::array<HashCodepointPair, 4057> hash2unicode {{\n\t{0x001cf4a9, 0x0118}, // Eogonek\n\t{0x003b11fb, 0x055f}, // abbreviationmarkarmenian\n\t{0x0050a316, 0x0444}, // afii10086\n\t{0x0066ddfe, 0x03a5}, // Upsilon\n\t{0x0067a87d, 0x0026}, // ampersand\n\t{0x007399ea, 0x2118}, // weierstrass\n\t{0x009a8cbc, 0x30c8}, // tokatakana\n\t{0x00a8ecc1, 0xfb93}, // gaffinalarabic\n\t{0x00b0f8d6, 0x05b2}, // hatafpatahwidehebrew\n\t{0x00b1b890, 0x2486}, // nineteenparen\n\t{0x00b92975, 0x05a7}, // dargalefthebrew\n\t{0x00c458a3, 0x2154}, // twothirds\n\t{0x00e73988, 0x09b8}, // sabengali\n\t{0x00f475c4, 0x03ee}, // Deicoptic\n\t{0x00fa9974, 0x0303}, // tildecmb\n\t{0x01012c9a, 0x05b4}, // hiriq\n\t{0x0107d6e3, 0x0933}, // lladeva\n\t{0x01127238, 0x3237}, // ideographiccongratulationparen\n\t{0x011abc50, 0x0547}, // Shaarmenian\n\t{0x01297545, 0x25aa}, // H18543\n\t{0x012d44bc, 0x05d6}, // afii57670\n\t{0x013044fb, 0x2205}, // emptyset\n\t{0x01422ce1, 0x0486}, // psilipneumatacyrilliccmb\n\t{0x01571757, 0xfe6b}, // atsmall\n\t{0x01678eeb, 0x066b}, // decimalseparatorpersian\n\t{0x018643fe, 0x091a}, // cadeva\n\t{0x019e6772, 0x3148}, // cieuckorean\n\t{0x019fa822, 0x05de}, // mem\n\t{0x01cfa7b3, 0x0a3e}, // aamatragurmukhi\n\t{0x01d7c979, 0x3007}, // ideographiczero\n\t{0x020d70ad, 0x278b}, // twocircleinversesansserif\n\t{0x0239eab1, 0x3131}, // kiyeokkorean\n\t{0x023b0c79, 0xff87}, // nukatakanahalfwidth\n\t{0x023deac8, 0x3183}, // yesieungpansioskorean\n\t{0x02409db2, 0x1ed1}, // ocircumflexacute\n\t{0x02574652, 0x0e1b}, // poplathai\n\t{0x025b8acc, 0x0a47}, // eematragurmukhi\n\t{0x02610d57, 0x2668}, // hotsprings\n\t{0x0292f83b, 0x0e11}, // thonangmonthothai\n\t{0x0293c9db, 0xff49}, // imonospace\n\t{0x029e63cc, 0x21e7}, // arrowupwhite\n\t{0x02a32a9d, 0x0275}, // obarred\n\t{0x02a97908, 0x09f7}, // fournumeratorbengali\n\t{0x02abe0be, 0x2556}, // SF210000\n\t{0x02acd87a, 0x2461}, // twocircle\n\t{0x02bb8927, 0x0154}, // Racute\n\t{0x02bd043f, 0x3392}, // mhzsquare\n\t{0x02bdc138, 0x304a}, // ohiragana\n\t{0x02c40de7, 0xffe6}, // wonmonospace\n\t{0x02dab625, 0x310c}, // lbopomofo\n\t{0x02df8edf, 0x30e7}, // yosmallkatakana\n\t{0x02e3dfc8, 0x3062}, // dihiragana\n\t{0x0306380d, 0xff35}, // Umonospace\n\t{0x03170204, 0x0495}, // ghemiddlehookcyrillic\n\t{0x03182c9f, 0x25b4}, // blackuppointingsmalltriangle\n\t{0x0319d343, 0x329e}, // ideographicprintcircle\n\t{0x031ad266, 0x331e}, // kooposquare\n\t{0x03274b72, 0x0018}, // controlCAN\n\t{0x0334c4d5, 0x0aa7}, // dhagujarati\n\t{0x03396436, 0x1ed0}, // Ocircumflexacute\n\t{0x033b64c4, 0x047f}, // otcyrillic\n\t{0x033e74dc, 0x1e44}, // Ndotaccent\n\t{0x034ec8b1, 0x30b0}, // gukatakana\n\t{0x037b5e30, 0x00b9}, // onesuperior\n\t{0x03993e60, 0xff57}, // wmonospace\n\t{0x03a136c3, 0x0e0b}, // sosothai\n\t{0x03b0103c, 0x2270}, // notlessnorequal\n\t{0x03c2a8d8, 0x1eb3}, // abrevehookabove\n\t{0x03d234c7, 0xfea7}, // khahinitialarabic\n\t{0x03f4da1a, 0x05b8}, // qamatsnarrowhebrew\n\t{0x0410b525, 0x0138}, // kgreenlandic\n\t{0x0433eb22, 0x014e}, // Obreve\n\t{0x043f3fc5, 0x040a}, // afii10059\n\t{0x044589fe, 0x0646}, // afii57446\n\t{0x044ba421, 0x0585}, // oharmenian\n\t{0x0454dddc, 0x0432}, // afii10067\n\t{0x048b164e, 0x01c3}, // clickretroflex\n\t{0x048e8b97, 0x0161}, // scaron\n\t{0x0491732e, 0x3186}, // yeorinhieuhkorean\n\t{0x049c65ac, 0x2121}, // telephone\n\t{0x04a45907, 0x041a}, // afii10028\n\t{0x04c4d94b, 0x05b5}, // tsere1e\n\t{0x04c8ee7d, 0x042d}, // Ereversedcyrillic\n\t{0x04de1db0, 0x0950}, // omdeva\n\t{0x04f4d676, 0x0027}, // quotesingle\n\t{0x0500f909, 0x0407}, // Yicyrillic\n\t{0x0503fcb5, 0x00b1}, // plusminus\n\t{0x05116c6a, 0x30fc}, // prolongedkana\n\t{0x05302abd, 0x2025}, // twodotleader\n\t{0x053ece0c, 0x3050}, // guhiragana\n\t{0x05574c05, 0x09a3}, // nnabengali\n\t{0x056bac6c, 0x30a3}, // ismallkatakana\n\t{0x058218bb, 0x0386}, // Alphatonos\n\t{0x058691a9, 0x33d2}, // squarelog\n\t{0x059c61cd, 0x0436}, // zhecyrillic\n\t{0x059eb4a3, 0x2085}, // fiveinferior\n\t{0x05a47299, 0x320d}, // hieuhparenkorean\n\t{0x05a53e96, 0x0282}, // shook\n\t{0x05b0f8c3, 0x02b5}, // rhookturnedsuperior\n\t{0x05cee53c, 0x201d}, // quotedblright\n\t{0x05de47fd, 0x1e7f}, // vdotbelow\n\t{0x05e340f3, 0x1e70}, // Tcircumflexbelow\n\t{0x05e8321d, 0x0325}, // ringbelowcmb\n\t{0x05ec5d36, 0x2471}, // eighteencircle\n\t{0x05f03fff, 0x0ae0}, // rrvocalicgujarati\n\t{0x060beb03, 0x0175}, // wcircumflex\n\t{0x061ad8fc, 0x24ca}, // Ucircle\n\t{0x0642035b, 0x0010}, // controlDLE\n\t{0x0646584a, 0x003d}, // equal\n\t{0x064874b1, 0x05d3}, // afii57667\n\t{0x066433cf, 0x20a4}, // lira\n\t{0x06823c6b, 0xfb4d}, // kafrafehebrew\n\t{0x06894954, 0xff5e}, // asciitildemonospace\n\t{0x069a405d, 0x00e6}, // ae\n\t{0x06b00ffc, 0x0101}, // amacron\n\t{0x06b72f51, 0x27e8}, // angbracketleftbig\n\t{0x06be8647, 0x0442}, // afii10084\n\t{0x06ec3366, 0xfe42}, // cornerbracketrightvertical\n\t{0x0700a693, 0x0475}, // izhitsacyrillic\n\t{0x07019244, 0xfb02}, // fl\n\t{0x07072da3, 0x2299}, // circleot\n\t{0x07099ef9, 0xfeae}, // rehfinalarabic\n\t{0x0710dd39, 0x02de}, // rhotichookmod\n\t{0x074aba74, 0x09af}, // yabengali\n\t{0x07562010, 0x09bc}, // nuktabengali\n\t{0x075a830a, 0x21e6}, // arrowleftwhite\n\t{0x076312db, 0x2497}, // sixteenperiod\n\t{0x0767cf10, 0x1ea8}, // Acircumflexhookabove\n\t{0x076c3b34, 0x1ec3}, // ecircumflexhookabove\n\t{0x076dbf41, 0x05b7}, // patah11\n\t{0x07726745, 0x0e25}, // lolingthai\n\t{0x078184fa, 0x00f7}, // divide\n\t{0x0790751c, 0x2466}, // sevencircle\n\t{0x0793d50d, 0x30bb}, // sekatakana\n\t{0x07a1ce35, 0x0906}, // aadeva\n\t{0x07ab20a8, 0x0ab3}, // llagujarati\n\t{0x07e20c30, 0x017b}, // Zdot\n\t{0x07e38c67, 0x33bb}, // nwsquare\n\t{0x081dd122, 0x0a38}, // sagurmukhi\n\t{0x082543e5, 0x33a0}, // cmsquaredsquare\n\t{0x083d0b54, 0x3227}, // eightideographicparen\n\t{0x08429fa7, 0x2591}, // ltshade\n\t{0x084b888b, 0x311a}, // abopomofo\n\t{0x085499c4, 0x0925}, // thadeva\n\t{0x086a99d9, 0x01af}, // Uhorn\n\t{0x087038eb, 0xfb20}, // ayinaltonehebrew\n\t{0x089d739a, 0x005a}, // Z\n\t{0x08a131c8, 0x096d}, // sevendeva\n\t{0x08a6b099, 0x02a6}, // ts\n\t{0x08b5de5a, 0x038a}, // Iotatonos\n\t{0x08b78f6b, 0xff86}, // nikatakanahalfwidth\n\t{0x08d57b6a, 0x0019}, // controlEM\n\t{0x08ddb521, 0x3226}, // sevenideographicparen\n\t{0x092aa224, 0x0a90}, // aigujarati\n\t{0x092cd86d, 0x03d6}, // omega1\n\t{0x09310ab8, 0x027f}, // rfishhookreversed\n\t{0x094ceadc, 0x0047}, // G\n\t{0x09751504, 0x038c}, // Omicrontonos\n\t{0x09790f28, 0x33be}, // kwsquare\n\t{0x09853aa3, 0x01c1}, // clicklateral\n\t{0x09a03740, 0xfe5b}, // braceleftsmall\n\t{0x09a4b050, 0x0ae8}, // twogujarati\n\t{0x09d4b5eb, 0x3388}, // calsquare\n\t{0x09f2217d, 0x00a9}, // copyright\n\t{0x09f9df24, 0x1e0c}, // Ddotbelow\n\t{0x0a040d76, 0x098a}, // uubengali\n\t{0x0a1d800c, 0x0291}, // zcurl\n\t{0x0a3b8eb5, 0x044b}, // yericyrillic\n\t{0x0a46f2f1, 0x0284}, // dotlessjstrokehook\n\t{0x0a5cb3b1, 0x30d6}, // bukatakana\n\t{0x0a5ff1a8, 0xff6b}, // osmallkatakanahalfwidth\n\t{0x0a67f8fb, 0x24b2}, // wparen\n\t{0x0a704676, 0xfccc}, // lammeeminitialarabic\n\t{0x0a8ba8e8, 0x0112}, // Emacron\n\t{0x0a9b47dd, 0x306f}, // hahiragana\n\t{0x0aa2156d, 0xfc0c}, // tehhahisolatedarabic\n\t{0x0abb4ec1, 0x0441}, // afii10083\n\t{0x0adbba15, 0x21c0}, // harpoonrightbarbup\n\t{0x0ae79191, 0x01e1}, // adotmacron\n\t{0x0af77d49, 0x09ea}, // fourbengali\n\t{0x0b367d7a, 0x0421}, // Escyrillic\n\t{0x0b4b7082, 0xff62}, // cornerbracketlefthalfwidth\n\t{0x0b6abf22, 0x20aa}, // sheqel\n\t{0x0b7f2b2d, 0x0a5a}, // ghhagurmukhi\n\t{0x0b92d660, 0x32a6}, // ideographiclowcircle\n\t{0x0b9e2621, 0x2665}, // heartsuitblack\n\t{0x0ba5f00c, 0x03cc}, // omicrontonos\n\t{0x0bae12ff, 0xff2a}, // Jmonospace\n\t{0x0bd4abb3, 0x0254}, // oopen\n\t{0x0bd8d304, 0x3215}, // ieungaparenkorean\n\t{0x0bdad647, 0x0970}, // abbreviationsigndeva\n\t{0x0bdb550e, 0x0669}, // ninehackarabic\n\t{0x0be3cda3, 0x1e0b}, // ddotaccent\n\t{0x0bf8ed4a, 0x09f2}, // rupeemarkbengali\n\t{0x0bfa9d4e, 0x05b6}, // afii57795\n\t{0x0c138c8e, 0x308f}, // wahiragana\n\t{0x0c17017e, 0x02a5}, // dzcurl\n\t{0x0c19fd92, 0x037a}, // ypogegrammeni\n\t{0x0c255ae5, 0x0553}, // Piwrarmenian\n\t{0x0c356707, 0x0625}, // afii57413\n\t{0x0c678de3, 0x032a}, // bridgebelowcmb\n\t{0x0c810887, 0x0a88}, // iigujarati\n\t{0x0c83c594, 0x1e63}, // sdotbelow\n\t{0x0c8f5261, 0x0164}, // Tcaron\n\t{0x0cacee48, 0xfba8}, // hehinitialaltonearabic\n\t{0x0cbb507c, 0x3036}, // circlepostalmark\n\t{0x0cd99820, 0x05c0}, // paseqhebrew\n\t{0x0cdb81c4, 0x24a2}, // gparen\n\t{0x0ce8bb7e, 0x30d5}, // hukatakana\n\t{0x0cf04968, 0x02be}, // ringhalfright\n\t{0x0d0eb2f0, 0x315d}, // weokorean\n\t{0x0d21bb72, 0x2550}, // SF430000\n\t{0x0d47308f, 0x05d4}, // he\n\t{0x0d747cfe, 0x04c3}, // Kahookcyrillic\n\t{0x0d932b5b, 0x30d2}, // hikatakana\n\t{0x0da4d862, 0x05b6}, // segol13\n\t{0x0db7d6e4, 0x05d4}, // hehebrew\n\t{0x0dc03ecb, 0x0a9c}, // jagujarati\n\t{0x0dd6f75d, 0x09f6}, // threenumeratorbengali\n\t{0x0de664af, 0x01fa}, // Aringacute\n\t{0x0deddd7b, 0x017a}, // zacute\n\t{0x0df6966e, 0x1e4f}, // otildedieresis\n\t{0x0e0870a7, 0x2713}, // checkmark\n\t{0x0e0aefc5, 0x05af}, // masoracirclehebrew\n\t{0x0e15512a, 0xff43}, // cmonospace\n\t{0x0e157c7d, 0x0166}, // Tbar\n\t{0x0e34eac4, 0x06ba}, // afii57514\n\t{0x0e359de3, 0x332b}, // paasentosquare\n\t{0x0e35e57d, 0x01f4}, // Gacute\n\t{0x0e6ec8aa, 0x0a40}, // iimatragurmukhi\n\t{0x0e8140cb, 0x2318}, // propellor\n\t{0x0e8e8ac7, 0x25aa}, // blacksmallsquare\n\t{0x0e8ed92c, 0x05b3}, // hatafqamatsquarterhebrew\n\t{0x0e9c1a93, 0x0149}, // quoterightn\n\t{0x0eb0ce00, 0xff30}, // Pmonospace\n\t{0x0ec7e019, 0xfc4b}, // noonjeemisolatedarabic\n\t{0x0ed8b040, 0x33b5}, // nvsquare\n\t{0x0edd0c59, 0x0e35}, // saraiithai\n\t{0x0ee06289, 0x05b0}, // shevaquarterhebrew\n\t{0x0efc1459, 0x09b6}, // shabengali\n\t{0x0f02712c, 0x00ea}, // ecircumflex\n\t{0x0f066e82, 0x33b3}, // mssquare\n\t{0x0f1a6991, 0x24c4}, // Ocircle\n\t{0x0f2768b1, 0x05b1}, // hatafsegolwidehebrew\n\t{0x0f332d5e, 0x002e}, // period\n\t{0x0f35dd15, 0x04b0}, // Ustraightstrokecyrillic\n\t{0x0f432338, 0x0020}, // space\n\t{0x0f433f21, 0xff7d}, // sukatakanahalfwidth\n\t{0x0f610d68, 0x1e53}, // omacronacute\n\t{0x0f61debf, 0x33b9}, // mvmegasquare\n\t{0x0f8de5e5, 0xff4b}, // kmonospace\n\t{0x0f984d6e, 0xfec0}, // dadmedialarabic\n\t{0x0fcfb12d, 0x016c}, // Ubreve\n\t{0x0fdfc487, 0x02a8}, // tccurl\n\t{0x0ff64b0b, 0x0665}, // fivehackarabic\n\t{0x1001b5d7, 0xfc48}, // meemmeemisolatedarabic\n\t{0x100f790a, 0x20ac}, // Euro\n\t{0x101477b7, 0x216a}, // Elevenroman\n\t{0x1030f103, 0x0918}, // ghadeva\n\t{0x103612b8, 0x2287}, // supersetorequal\n\t{0x10459048, 0x2217}, // asteriskmath\n\t{0x10529f46, 0x0e59}, // ninethai\n\t{0x10656b29, 0x042a}, // afii10044\n\t{0x10659a4d, 0x0041}, // A\n\t{0x106ab99c, 0x0943}, // rvocalicvowelsigndeva\n\t{0x10827219, 0x01e4}, // Gstroke\n\t{0x1087cbb6, 0x318d}, // araeakorean\n\t{0x10c49213, 0x094d}, // viramadeva\n\t{0x10c6b04c, 0xfee8}, // noonmedialarabic\n\t{0x10e1204e, 0x224c}, // allequal\n\t{0x1112335e, 0x0e24}, // ruthai\n\t{0x1113e9a7, 0x0a87}, // igujarati\n\t{0x11140e23, 0xff50}, // pmonospace\n\t{0x112533be, 0x0446}, // tsecyrillic\n\t{0x1128968b, 0x03dc}, // Digammagreek\n\t{0x113f9725, 0x1ea1}, // adotbelow\n\t{0x11572f90, 0x3240}, // ideographicfestivalparen\n\t{0x1159e298, 0x2484}, // seventeenparen\n\t{0x115b5935, 0xff78}, // kukatakanahalfwidth\n\t{0x115c3cb2, 0x3179}, // kapyeounssangpieupkorean\n\t{0x11672a1e, 0x3051}, // kehiragana\n\t{0x1179ac42, 0x00a0}, // nbspace\n\t{0x1198b8ba, 0x05f1}, // vavyodhebrew\n\t{0x11adf5a7, 0x24a9}, // nparen\n\t{0x11aeb63a, 0x2272}, // lessorequivalent\n\t{0x11ba40f5, 0x05ea}, // tavhebrew\n\t{0x11c11092, 0x1e2c}, // Itildebelow\n\t{0x11c8e4b3, 0x2660}, // spadesuitblack\n\t{0x11d3eac3, 0x3060}, // dahiragana\n\t{0x11d67798, 0xfb33}, // daletdagesh\n\t{0x11e401c1, 0x05d6}, // zayin\n\t{0x1216fef8, 0x328e}, // ideographmetalcircle\n\t{0x1219f723, 0xff6e}, // yosmallkatakanahalfwidth\n\t{0x1224d569, 0xfee4}, // meemmedialarabic\n\t{0x1228548c, 0x05d0}, // alefhebrew\n\t{0x1233afe9, 0x30df}, // mikatakana\n\t{0x123a07fe, 0x05e6}, // tsadihebrew\n\t{0x1242de49, 0x042b}, // Yericyrillic\n\t{0x1246d709, 0x315f}, // wikorean\n\t{0x126c42a3, 0x21d0}, // arrowleftdbl\n\t{0x1278a8d5, 0x3087}, // yosmallhiragana\n\t{0x129b0140, 0x0445}, // afii10087\n\t{0x12a29be8, 0x03c5}, // upsilon\n\t{0x12bdd9c7, 0x21a6}, // mapsto\n\t{0x12d3e8f7, 0x30c0}, // dakatakana\n\t{0x12def4bb, 0xfeba}, // sadfinalarabic\n\t{0x12e22bb8, 0x33c2}, // amsquare\n\t{0x1329e467, 0x0311}, // breveinvertedcmb\n\t{0x132b7bd0, 0x2a04}, // unionmultitext\n\t{0x132e0697, 0x01b3}, // Yhook\n\t{0x134d9c31, 0x304c}, // gahiragana\n\t{0x13597fb3, 0x04d9}, // afii10846\n\t{0x135d6341, 0x33c8}, // dbsquare\n\t{0x13635045, 0x0300}, // gravecmb\n\t{0x1369554a, 0x207f}, // nsuperior\n\t{0x1376f153, 0x0403}, // afii10052\n\t{0x1384d3da, 0x05b4}, // hiriqnarrowhebrew\n\t{0x13868087, 0x0636}, // afii57430\n\t{0x138fca68, 0x0a30}, // ragurmukhi\n\t{0x13a69297, 0x0917}, // gadeva\n\t{0x13bcc567, 0x25d1}, // circlewithrighthalfblack\n\t{0x13ccaf5f, 0x3061}, // tihiragana\n\t{0x13dc1f9e, 0x05b1}, // hatafsegol\n\t{0x13e2dbb5, 0x1e3a}, // Llinebelow\n\t{0x140e7a7e, 0x0551}, // Coarmenian\n\t{0x14117f5a, 0x1e77}, // ucircumflexbelow\n\t{0x141d63ad, 0x1eda}, // Ohornacute\n\t{0x142c024d, 0x013a}, // lacute\n\t{0x143d707c, 0x05a6}, // merkhakefulalefthebrew\n\t{0x146c75cf, 0x3275}, // ieungacirclekorean\n\t{0x146f18bb, 0xfb36}, // zayindagesh\n\t{0x147a2240, 0x1e81}, // wgrave\n\t{0x1486cc9b, 0x054b}, // Jheharmenian\n\t{0x14ac715c, 0x2473}, // twentycircle\n\t{0x14b421a5, 0x0638}, // zaharabic\n\t{0x14c795cf, 0x0051}, // Q\n\t{0x14d1cd4b, 0x2284}, // notsubset\n\t{0x14d2cd8a, 0x012f}, // iogonek\n\t{0x14f2bc91, 0x1eab}, // acircumflextilde\n\t{0x15045632, 0x05d1}, // bet\n\t{0x1505dc02, 0x3083}, // yasmallhiragana\n\t{0x152785c0, 0x30a1}, // asmallkatakana\n\t{0x15642935, 0x23a9}, // braceleftbt\n\t{0x1564e3f1, 0x05b9}, // holam26\n\t{0x15771621, 0x042c}, // Softsigncyrillic\n\t{0x159ac6ab, 0x0591}, // etnahtafoukhlefthebrew\n\t{0x159b9dc9, 0x24c6}, // Qcircle\n\t{0x15d1c25e, 0x04bf}, // chedescenderabkhasiancyrillic\n\t{0x15dd6b0c, 0x25d9}, // whitecircleinverse\n\t{0x15f64606, 0x33c5}, // cdsquare\n\t{0x15f8ec13, 0x037e}, // questiongreek\n\t{0x1602acd3, 0xff38}, // Xmonospace\n\t{0x1610c2ad, 0x3181}, // yesieungkorean\n\t{0x16393f6d, 0xfef6}, // lamalefmaddaabovefinalarabic\n\t{0x164a5cd1, 0x0058}, // X\n\t{0x165341dd, 0x02e0}, // gammasuperior\n\t{0x167b1fac, 0xfebc}, // sadmedialarabic\n\t{0x168b9d05, 0x04d5}, // aiecyrillic\n\t{0x169cceb3, 0x005b}, // bracketleft\n\t{0x16ad260d, 0x0253}, // bhook\n\t{0x16b23c67, 0x3135}, // nieuncieuckorean\n\t{0x16ba0a7a, 0x30a9}, // osmallkatakana\n\t{0x16d5ac91, 0x3018}, // whitetortoiseshellbracketleft\n\t{0x16f9045d, 0x0a16}, // khagurmukhi\n\t{0x17093caa, 0x01e3}, // aemacron\n\t{0x170fc75c, 0x306c}, // nuhiragana\n\t{0x171b516a, 0x0a39}, // hagurmukhi\n\t{0x17301afd, 0x3023}, // threehangzhou\n\t{0x173c8456, 0x338b}, // nfsquare\n\t{0x178d45ae, 0x337e}, // meizierasquare\n\t{0x17a9e49b, 0x322a}, // ideographicmoonparen\n\t{0x17ad5313, 0x09ab}, // phabengali\n\t{0x17da2afa, 0x0335}, // strokeshortoverlaycmb\n\t{0x17deda0e, 0x00ed}, // iacute\n\t{0x17e36acb, 0x05b8}, // qamats\n\t{0x17ef9c62, 0x0a05}, // agurmukhi\n\t{0x180419cd, 0xfc62}, // shaddakasraarabic\n\t{0x18120be8, 0x200b}, // zerowidthspace\n\t{0x18175789, 0x05b3}, // hatafqamatswidehebrew\n\t{0x181f5c91, 0x091f}, // ttadeva\n\t{0x182bd096, 0x0148}, // ncaron\n\t{0x183028bb, 0x04da}, // Schwadieresiscyrillic\n\t{0x1840ed9a, 0xfea0}, // jeemmedialarabic\n\t{0x18492236, 0x0e5a}, // angkhankhuthai\n\t{0x1855a5e3, 0xfe5f}, // numbersignsmall\n\t{0x185b816d, 0x0146}, // ncommaaccent\n\t{0x187ab455, 0x0e42}, // saraothai\n\t{0x1885706c, 0x3157}, // okorean\n\t{0x18923bff, 0x2135}, // aleph\n\t{0x18a5c10a, 0x2584}, // dnblock\n\t{0x18a72a69, 0xfb3a}, // finalkafdageshhebrew\n\t{0x18b82c53, 0x045c}, // afii10109\n\t{0x18c46fec, 0x033c}, // seagullbelowcmb\n\t{0x18d47bfd, 0x3298}, // ideographiclaborcircle\n\t{0x18dbddd2, 0x0993}, // obengali\n\t{0x18df8652, 0x2286}, // subsetorequal\n\t{0x18ea53c7, 0x0663}, // afii57395\n\t{0x18ec3f78, 0x05e8}, // afii57688\n\t{0x18f0d507, 0xfe9f}, // jeeminitialarabic\n\t{0x190a56aa, 0xfe5a}, // parenrightsmall\n\t{0x1920c2c2, 0xff65}, // middledotkatakanahalfwidth\n\t{0x192c8826, 0x2283}, // superset\n\t{0x1940b4fd, 0x2251}, // geometricallyequal\n\t{0x19427103, 0x2a01}, // circleplustext\n\t{0x1946a31f, 0x05ae}, // zinorhebrew\n\t{0x194ec3dd, 0xfb38}, // tetdageshhebrew\n\t{0x195fdeed, 0x3013}, // getamark\n\t{0x197f461f, 0x1e03}, // bdotaccent\n\t{0x1994a487, 0x0481}, // koppacyrillic\n\t{0x19985117, 0x339a}, // nmsquare\n\t{0x19a1a98b, 0x00ad}, // sfthyphen\n\t{0x19ad4aac, 0xfef2}, // yehfinalarabic\n\t{0x19b22272, 0x3269}, // chieuchcirclekorean\n\t{0x19b344e4, 0x0123}, // gcedilla\n\t{0x19b3f208, 0x05b8}, // qamats27\n\t{0x19d833fe, 0x02ba}, // dblprimemod\n\t{0x19dea593, 0x0428}, // afii10042\n\t{0x19f7c320, 0x04d1}, // abrevecyrillic\n\t{0x19fa29b1, 0x327f}, // koreanstandardsymbol\n\t{0x1a00d3da, 0x032b}, // dblarchinvertedbelowcmb\n\t{0x1a260946, 0x0447}, // checyrillic\n\t{0x1a287ed9, 0x0922}, // ddhadeva\n\t{0x1a3b33cb, 0xfed7}, // qafinitialarabic\n\t{0x1a3bf649, 0x05b2}, // hatafpatahhebrew\n\t{0x1a4f3484, 0x0913}, // odeva\n\t{0x1a533d39, 0x0306}, // brevecmb\n\t{0x1ac76244, 0x0425}, // Khacyrillic\n\t{0x1ac90440, 0x010f}, // dcaron\n\t{0x1b240a74, 0x00d8}, // Oslash\n\t{0x1b2b4015, 0xfe65}, // greatersmall\n\t{0x1b33167a, 0xfe3e}, // dblanglebracketrightvertical\n\t{0x1b342691, 0x017c}, // zdot\n\t{0x1b39339b, 0x253c}, // SF050000\n\t{0x1b3f9c21, 0x1e72}, // Udieresisbelow\n\t{0x1b4399b2, 0x04c7}, // Enhookcyrillic\n\t{0x1b5874ea, 0x091b}, // chadeva\n\t{0x1b8c8992, 0x2122}, // trademark\n\t{0x1ba72293, 0xff03}, // numbersignmonospace\n\t{0x1bbb8fb3, 0x0477}, // izhitsadblgravecyrillic\n\t{0x1bcb2bfd, 0x337d}, // taisyouerasquare\n\t{0x1be98812, 0x24d4}, // ecircle\n\t{0x1c079308, 0x09cc}, // auvowelsignbengali\n\t{0x1c16ebae, 0x0126}, // Hbar\n\t{0x1c2631dd, 0x3385}, // KBsquare\n\t{0x1c56e166, 0xfd3f}, // parenrightaltonearabic\n\t{0x1c94529b, 0x21b5}, // carriagereturn\n\t{0x1cb10674, 0x0a27}, // dhagurmukhi\n\t{0x1cb5367a, 0x0532}, // Benarmenian\n\t{0x1cdb3e05, 0x2514}, // SF020000\n\t{0x1ce17c08, 0xfea6}, // khahfinalarabic\n\t{0x1ce29209, 0x02cc}, // verticallinelowmod\n\t{0x1ce40996, 0xff3b}, // bracketleftmonospace\n\t{0x1cf31612, 0x0598}, // zarqahebrew\n\t{0x1d2559c8, 0x03b9}, // iota\n\t{0x1d25e3ef, 0x043c}, // emcyrillic\n\t{0x1d420ccb, 0x0430}, // afii10065\n\t{0x1d954d85, 0x09a4}, // tabengali\n\t{0x1da7ae8c, 0x00d7}, // multiply\n\t{0x1db92094, 0x053d}, // Xeharmenian\n\t{0x1dbbea92, 0x02e6}, // tonebarhighmod\n\t{0x1dbc2a14, 0x2245}, // congruent\n\t{0x1dbe86c5, 0x246d}, // fourteencircle\n\t{0x1dc0644e, 0x2012}, // figuredash\n\t{0x1ded853e, 0x01cc}, // nj\n\t{0x1df7638a, 0x00e4}, // adieresis\n\t{0x1dfc2837, 0x217a}, // elevenroman\n\t{0x1e0312fa, 0x0290}, // zretroflexhook\n\t{0x1e1332fd, 0x0287}, // tturned\n\t{0x1e25355a, 0x0461}, // omegacyrillic\n\t{0x1e38c8d8, 0x012a}, // Imacron\n\t{0x1e56afb4, 0xfc61}, // shaddadammaarabic\n\t{0x1e645fd0, 0x00b2}, // twosuperior\n\t{0x1e6cddcb, 0x0563}, // gimarmenian\n\t{0x1e7c9862, 0x338f}, // squarekg\n\t{0x1e82a7c3, 0x2302}, // house\n\t{0x1e860782, 0x0983}, // visargabengali\n\t{0x1e917582, 0x09a2}, // ddhabengali\n\t{0x1ea7d113, 0x031c}, // ringhalfleftbelowcmb\n\t{0x1eae034a, 0x3122}, // anbopomofo\n\t{0x1eae1716, 0x0434}, // afii10069\n\t{0x1edf9913, 0x1e16}, // Emacronacute\n\t{0x1ef123d5, 0x0413}, // Gecyrillic\n\t{0x1f06ae25, 0xfb31}, // betdageshhebrew\n\t{0x1f1df6d1, 0x3381}, // nasquare\n\t{0x1f2383d4, 0x0004}, // controlEOT\n\t{0x1f2a4214, 0xfdfa}, // sallallahoualayhewasallamarabic\n\t{0x1f60dad4, 0x05e8}, // reshhebrew\n\t{0x1f686fbe, 0xff2c}, // Lmonospace\n\t{0x1f90aeb4, 0xff7b}, // sakatakanahalfwidth\n\t{0x1f93ce2b, 0xff33}, // Smonospace\n\t{0x1f9b52d4, 0x0323}, // dotbelowcmb\n\t{0x1faa2fdf, 0x203e}, // overline\n\t{0x1faf20cc, 0x02b9}, // primemod\n\t{0x1fba9d24, 0x1e4a}, // Ncircumflexbelow\n\t{0x1fc00e7e, 0x0050}, // P\n\t{0x1fc99492, 0x3126}, // erbopomofo\n\t{0x1feea4ab, 0x0623}, // afii57411\n\t{0x20061138, 0x1e02}, // Bdotaccent\n\t{0x200e9513, 0x030f}, // dblgravecmb\n\t{0x201a6676, 0x2310}, // logicalnotreversed\n\t{0x201e3ee9, 0x0310}, // candrabinducmb\n\t{0x2024cfd1, 0x0475}, // afii10196\n\t{0x2038e6d5, 0x307a}, // pehiragana\n\t{0x205d0ec7, 0x03a0}, // Pi\n\t{0x207bf81e, 0xff84}, // tokatakanahalfwidth\n\t{0x2086c569, 0x00d2}, // Ograve\n\t{0x208b3b40, 0xfed0}, // ghainmedialarabic\n\t{0x209bfca6, 0x24d5}, // fcircle\n\t{0x20a31ebd, 0x2489}, // twoperiod\n\t{0x20abefc1, 0x0385}, // dialytikatonos\n\t{0x20b8cfa5, 0x0443}, // afii10085\n\t{0x20bc528f, 0x2042}, // asterism\n\t{0x20ca67b9, 0x09a1}, // ddabengali\n\t{0x20ce09b9, 0xfb7b}, // tchehfinalarabic\n\t{0x20dd36ea, 0x207e}, // parenrightsuperior\n\t{0x20e840a0, 0x30d4}, // pikatakana\n\t{0x2111e869, 0x092a}, // padeva\n\t{0x21185c0e, 0x028e}, // yturned\n\t{0x2130f98f, 0x0aa0}, // tthagujarati\n\t{0x215fc096, 0x000d}, // controlCR\n\t{0x21622652, 0x249e}, // cparen\n\t{0x21669982, 0x0181}, // Bhook\n\t{0x217143de, 0x05b3}, // hatafqamats34\n\t{0x2173a28b, 0x0295}, // glottalstopreversed\n\t{0x218d5b62, 0x3232}, // ideographichaveparen\n\t{0x21b37808, 0x2477}, // fourparen\n\t{0x21bef9d7, 0x0e06}, // khorakhangthai\n\t{0x21c0f31f, 0x013b}, // Lcommaaccent\n\t{0x21ce0071, 0x2179}, // tenroman\n\t{0x21d28f9e, 0x05e9}, // shin\n\t{0x21f74f30, 0x043e}, // afii10080\n\t{0x2203033d, 0x019d}, // Nhookleft\n\t{0x22037801, 0x044b}, // afii10093\n\t{0x220f1331, 0x05db}, // kafhebrew\n\t{0x2221c36b, 0x06f6}, // sixpersian\n\t{0x22351581, 0x059f}, // qarneyparahebrew\n\t{0x223cb30f, 0xfc9f}, // behmeeminitialarabic\n\t{0x225099c3, 0x3149}, // ssangcieuckorean\n\t{0x22542ce4, 0x2207}, // nabla\n\t{0x22702420, 0x3153}, // eokorean\n\t{0x2274db8f, 0xff08}, // parenleftmonospace\n\t{0x2282e86d, 0x00fa}, // uacute\n\t{0x22a883d2, 0x25c7}, // whitediamond\n\t{0x22c93a2b, 0x338d}, // mugsquare\n\t{0x22e3ac9e, 0xff4c}, // lmonospace\n\t{0x2320c842, 0x0277}, // omegalatinclosed\n\t{0x2324e69c, 0x2665}, // heart\n\t{0x2351e945, 0x0a8a}, // uugujarati\n\t{0x2356706f, 0x0541}, // Jaarmenian\n\t{0x23679572, 0x1ef1}, // uhorndotbelow\n\t{0x236d79e4, 0x301e}, // quotedblprime\n\t{0x237979f3, 0xff73}, // ukatakanahalfwidth\n\t{0x23947e9f, 0x0266}, // hhook\n\t{0x23b6327c, 0x304f}, // kuhiragana\n\t{0x23b9408d, 0x2208}, // element\n\t{0x23d291f5, 0x0639}, // ainarabic\n\t{0x23d42e51, 0xff0b}, // plusmonospace\n\t{0x23e15f1c, 0xff90}, // mikatakanahalfwidth\n\t{0x23e70b3f, 0x0664}, // afii57396\n\t{0x23e9f46b, 0xff80}, // takatakanahalfwidth\n\t{0x23ea33c4, 0x30f1}, // wekatakana\n\t{0x23f0f542, 0xff2f}, // Omonospace\n\t{0x2415f58f, 0x3069}, // dohiragana\n\t{0x2419b09a, 0x038f}, // Omegatonos\n\t{0x241b0583, 0x0a9e}, // nyagujarati\n\t{0x241f6494, 0x3105}, // bbopomofo\n\t{0x2459d6f7, 0x0aea}, // fourgujarati\n\t{0x24688db0, 0x02c1}, // glottalstopreversedmod\n\t{0x24776c38, 0x0343}, // koroniscmb\n\t{0x2479e0d2, 0x3021}, // onehangzhou\n\t{0x249dd6ee, 0x0665}, // afii57397\n\t{0x24c0efcc, 0x316d}, // rieulyeorinhieuhkorean\n\t{0x24ccbd1b, 0x09e6}, // zerobengali\n\t{0x24d11d48, 0x02c2}, // arrowheadleftmod\n\t{0x24d6b19b, 0xfee7}, // nooninitialarabic\n\t{0x24deab24, 0x25a4}, // squarehorizontalfill\n\t{0x24e9b4e5, 0x21e4}, // arrowtableft\n\t{0x24f5be18, 0x0308}, // dieresiscmb\n\t{0x2527d2da, 0x300c}, // cornerbracketleft\n\t{0x252ef6ac, 0x01de}, // Adieresismacron\n\t{0x253f33be, 0x006e}, // n\n\t{0x2543ce81, 0x05c1}, // shindothebrew\n\t{0x254b8857, 0x0929}, // nnnadeva\n\t{0x25725d01, 0x0496}, // Zhedescendercyrillic\n\t{0x2592eb8c, 0x1e39}, // ldotbelowmacron\n\t{0x25a29a9e, 0x000a}, // controlLF\n\t{0x25bfabf1, 0x056c}, // liwnarmenian\n\t{0x25c22a8d, 0x0927}, // dhadeva\n\t{0x25c3f8ae, 0xff3e}, // asciicircummonospace\n\t{0x25ca4638, 0x0576}, // nowarmenian\n\t{0x25d83051, 0x0e19}, // nonuthai\n\t{0x25e64388, 0x1ee5}, // udotbelow\n\t{0x25eb8755, 0xff34}, // Tmonospace\n\t{0x25ef68be, 0x0103}, // abreve\n\t{0x25f0117e, 0x095f}, // yyadeva\n\t{0x2614c40e, 0x0aaf}, // yagujarati\n\t{0x262be20f, 0x0471}, // psicyrillic\n\t{0x2637caf5, 0x0932}, // ladeva\n\t{0x263e0b92, 0x09ac}, // babengali\n\t{0x2652690c, 0x3137}, // tikeutkorean\n\t{0x265be8ad, 0x01cf}, // Icaron\n\t{0x265fdad4, 0x05b8}, // qamatshebrew\n\t{0x26621b4d, 0x0072}, // r\n\t{0x2669a6cb, 0x211c}, // Rfraktur\n\t{0x26837556, 0x0048}, // H\n\t{0x26a72a71, 0x3188}, // yoyaekorean\n\t{0x26ab6d3a, 0x1ed9}, // ocircumflexdotbelow\n\t{0x26af8089, 0x304e}, // gihiragana\n\t{0x26b9c1d9, 0x0e30}, // saraathai\n\t{0x26c43ea8, 0x0911}, // ocandradeva\n\t{0x26caa803, 0x21d4}, // arrowdblboth\n\t{0x26cb382e, 0x23ab}, // bracerighttp\n\t{0x26f6f992, 0x04e4}, // Idieresiscyrillic\n\t{0x26fb496b, 0x3351}, // rittorusquare\n\t{0x27075678, 0x012e}, // Iogonek\n\t{0x2731451f, 0x0408}, // afii10057\n\t{0x273977ae, 0x0435}, // afii10070\n\t{0x27487450, 0x007e}, // asciitilde\n\t{0x275654ea, 0x099b}, // chabengali\n\t{0x275a3e46, 0x09a0}, // tthabengali\n\t{0x275a5b3b, 0x1ee1}, // ohorntilde\n\t{0x27607db6, 0x05b4}, // hiriq2d\n\t{0x27a2d18f, 0x05b9}, // holam32\n\t{0x27b7bf17, 0x031f}, // plusbelowcmb\n\t{0x27b7cc70, 0xfb2d}, // shindageshsindothebrew\n\t{0x27d62d65, 0x200d}, // afii301\n\t{0x27d8dd28, 0x00e8}, // egrave\n\t{0x27e6d9df, 0x0271}, // mhook\n\t{0x27f31ec3, 0x3271}, // rieulacirclekorean\n\t{0x283f3216, 0x2075}, // fivesuperior\n\t{0x28898020, 0x0281}, // Rsmallinverted\n\t{0x288edd59, 0x24cc}, // Wcircle\n\t{0x28d9fe2f, 0x0e41}, // saraaethai\n\t{0x28dd4931, 0x3234}, // ideographicnameparen\n\t{0x28e31924, 0x0a6c}, // sixgurmukhi\n\t{0x28e4057d, 0xfc58}, // yehmeemisolatedarabic\n\t{0x28f71acd, 0x0633}, // afii57427\n\t{0x290ed42e, 0x1e18}, // Ecircumflexbelow\n\t{0x29287ce1, 0x03d2}, // Upsilon1\n\t{0x29346ac3, 0x2021}, // daggerdbl\n\t{0x29371ded, 0x1e8f}, // ydotaccent\n\t{0x29734fd7, 0x092d}, // bhadeva\n\t{0x298e1b46, 0x01ea}, // Oogonek\n\t{0x29958ce9, 0x0005}, // controlENQ\n\t{0x29a8f130, 0x04d4}, // Aiecyrillic\n\t{0x29ab0eda, 0x0146}, // ncedilla\n\t{0x29c07bd0, 0x305e}, // zohiragana\n\t{0x29d0597d, 0x262f}, // yinyang\n\t{0x29d51dd2, 0x06d1}, // yehthreedotsbelowarabic\n\t{0x29d5f944, 0x03e4}, // Feicoptic\n\t{0x29e31b8f, 0x05b1}, // hatafsegolhebrew\n\t{0x29e6e487, 0x30cc}, // nukatakana\n\t{0x29e7f6bb, 0x0035}, // five\n\t{0x2a0fca4c, 0x3085}, // yusmallhiragana\n\t{0x2a239937, 0x0375}, // numeralsignlowergreek\n\t{0x2a28d54e, 0x30aa}, // okatakana\n\t{0x2a619f09, 0x2660}, // spade\n\t{0x2a645de3, 0x3091}, // wehiragana\n\t{0x2a64e363, 0x226e}, // notless\n\t{0x2a6a5dc5, 0x3088}, // yohiragana\n\t{0x2a72414c, 0x0e44}, // saraaimaimalaithai\n\t{0x2a8e7779, 0x0ad0}, // omgujarati\n\t{0x2ac0e180, 0x33a6}, // kmcubedsquare\n\t{0x2ac17d0f, 0x00f3}, // oacute\n\t{0x2ae749c7, 0x00e1}, // aacute\n\t{0x2ae8215f, 0x001d}, // controlGS\n\t{0x2ae8c5a6, 0x21c4}, // arrowrightoverleft\n\t{0x2aedcd2c, 0x09fa}, // issharbengali\n\t{0x2afb134c, 0xfb03}, // ffi\n\t{0x2b27655e, 0x261c}, // pointingindexleftwhite\n\t{0x2b3ff353, 0x2557}, // SF250000\n\t{0x2b42ad49, 0xfe55}, // colonsmall\n\t{0x2b5ac1a6, 0x0045}, // E\n\t{0x2b84f841, 0x30a6}, // ukatakana\n\t{0x2b91651d, 0x0319}, // righttackbelowcmb\n\t{0x2b93dd53, 0x0661}, // afii57393\n\t{0x2b9750e3, 0x2200}, // universal\n\t{0x2b9c968a, 0x0315}, // commaaboverightcmb\n\t{0x2bb5189c, 0x25e3}, // blacklowerlefttriangle\n\t{0x2bd253b1, 0x09bf}, // ivowelsignbengali\n\t{0x2be6415c, 0x05b3}, // hatafqamatshebrew\n\t{0x2beb7c62, 0x013c}, // lcommaaccent\n\t{0x2c0f9c0b, 0x0912}, // oshortdeva\n\t{0x2c15e9f4, 0x091c}, // jadeva\n\t{0x2c1b74f9, 0x2262}, // notidentical\n\t{0x2c4944e4, 0x0393}, // Gamma\n\t{0x2c91b61a, 0x0640}, // kashidaautonosidebearingarabic\n\t{0x2c964b66, 0x334a}, // miribaarusquare\n\t{0x2cb17e35, 0xfec6}, // zahfinalarabic\n\t{0x2cd9d9ec, 0xfc6d}, // behnoonfinalarabic\n\t{0x2cdfcd2a, 0x30cb}, // nikatakana\n\t{0x2cf9daf5, 0x3228}, // nineideographicparen\n\t{0x2d2e3883, 0x2190}, // arrowleft\n\t{0x2d329c65, 0xfb3c}, // lameddageshhebrew\n\t{0x2d39ea69, 0x019e}, // nlegrightlong\n\t{0x2d3b565d, 0x05ea}, // afii57690\n\t{0x2d456f79, 0x25e2}, // blacklowerrighttriangle\n\t{0x2d52bd2b, 0x3326}, // dorusquare\n\t{0x2d84140a, 0x0293}, // ezhcurl\n\t{0x2d8d5b1d, 0x33d0}, // lmsquare\n\t{0x2d95d169, 0x3155}, // yeokorean\n\t{0x2d975eca, 0xfb04}, // ffl\n\t{0x2d9ae85a, 0x0661}, // onehackarabic\n\t{0x2d9b14ff, 0xfb6d}, // vehmedialarabic\n\t{0x2da2ea79, 0x313d}, // rieulsioskorean\n\t{0x2daa1b6f, 0x090a}, // uudeva\n\t{0x2e04353d, 0x1ea9}, // acircumflexhookabove\n\t{0x2e043b05, 0xff0a}, // asteriskmonospace\n\t{0x2e10a2b1, 0x0374}, // numeralsigngreek\n\t{0x2e1eaa7d, 0xfb49}, // shindagesh\n\t{0x2e2c25c0, 0x0392}, // Beta\n\t{0x2e356485, 0x09c2}, // uuvowelsignbengali\n\t{0x2e4224af, 0x05e4}, // afii57684\n\t{0x2e5e0023, 0x0a20}, // tthagurmukhi\n\t{0x2e647759, 0x33d6}, // molsquare\n\t{0x2e7c6436, 0x3048}, // ehiragana\n\t{0x2e915a9d, 0xfe3b}, // blacklenticularbracketleftvertical\n\t{0x2e9e14a6, 0x0454}, // ecyrillic\n\t{0x2e9ef541, 0x0192}, // florin\n\t{0x2ea8b970, 0x327a}, // phieuphacirclekorean\n\t{0x2eb22aa1, 0x01dc}, // udieresisgrave\n\t{0x2eb3bdc7, 0x027e}, // rfishhook\n\t{0x2eb455b0, 0x25b6}, // blackrightpointingtriangle\n\t{0x2ec430ea, 0x0078}, // x\n\t{0x2ec8352a, 0x0143}, // Nacute\n\t{0x2eea1838, 0x0170}, // Uhungarumlaut\n\t{0x2efaa14d, 0x3015}, // tortoiseshellbracketright\n\t{0x2f06c380, 0x0a91}, // ocandragujarati\n\t{0x2f0e722f, 0x0021}, // exclam\n\t{0x2f14e4ad, 0x0183}, // btopbar\n\t{0x2f22b335, 0x305f}, // tahiragana\n\t{0x2f247a45, 0x00b5}, // mu\n\t{0x2f42e9c9, 0x0405}, // afii10054\n\t{0x2f4b01e9, 0x03e0}, // Sampigreek\n\t{0x2f51a2a5, 0x0591}, // etnahtahebrew\n\t{0x2f5af1cc, 0xfec4}, // tahmedialarabic\n\t{0x2f5c74c9, 0x30a4}, // ikatakana\n\t{0x2f5e2692, 0x033f}, // dbloverlinecmb\n\t{0x2f7e3ce0, 0xfb35}, // vavdagesh65\n\t{0x2f7fe7da, 0x04ea}, // Obarreddieresiscyrillic\n\t{0x2f8f84ed, 0x3019}, // whitetortoiseshellbracketright\n\t{0x2f9c7ff4, 0x221f}, // orthogonal\n\t{0x2fa13b0c, 0x0309}, // hookcmb\n\t{0x2fa6d960, 0x0e05}, // khokhonthai\n\t{0x2fb88e89, 0x0492}, // Ghestrokecyrillic\n\t{0x2fe066dc, 0x24c8}, // Scircle\n\t{0x2ff9eee3, 0x3231}, // ideographicstockparen\n\t{0x30132e73, 0x2474}, // oneparen\n\t{0x302d72c2, 0xfb2b}, // shinsindothebrew\n\t{0x3033e257, 0x0416}, // Zhecyrillic\n\t{0x3034a6d0, 0x0213}, // rinvertedbreve\n\t{0x3043436d, 0x0208}, // Idblgrave\n\t{0x3046485b, 0x0a41}, // umatragurmukhi\n\t{0x30585e10, 0x0631}, // reharabic\n\t{0x305b2089, 0x006d}, // m\n\t{0x305dc9d7, 0x2480}, // thirteenparen\n\t{0x3097f64c, 0x010c}, // Ccaron\n\t{0x30b4b18c, 0x0e28}, // sosalathai\n\t{0x30c0161e, 0x01d3}, // Ucaron\n\t{0x30c9bc6e, 0x0a1e}, // nyagurmukhi\n\t{0x30cd38cb, 0x33d8}, // pmsquare\n\t{0x30d25d42, 0x2089}, // nineinferior\n\t{0x30eada85, 0x2219}, // bulletoperator\n\t{0x30f64fef, 0x20aa}, // sheqelhebrew\n\t{0x310a4774, 0x337f}, // corporationsquare\n\t{0x31158bc3, 0x339f}, // mmsquaredsquare\n\t{0x3116a838, 0x0647}, // heharabic\n\t{0x312db4ff, 0x2040}, // tie\n\t{0x313237dd, 0xff32}, // Rmonospace\n\t{0x313f3c20, 0x09df}, // yyabengali\n\t{0x3154a912, 0x04ab}, // esdescendercyrillic\n\t{0x31f1489a, 0x0643}, // afii57443\n\t{0x31f928de, 0x05df}, // finalnun\n\t{0x31fab77d, 0x1eea}, // Uhorngrave\n\t{0x3207407e, 0x046b}, // yusbigcyrillic\n\t{0x3238fa28, 0x3004}, // jis\n\t{0x323ea229, 0x33ac}, // gpasquare\n\t{0x324496b3, 0x33bf}, // mwmegasquare\n\t{0x3248fa12, 0xfe5e}, // tortoiseshellbracketrightsmall\n\t{0x324bc39e, 0x22da}, // lessequalorgreater\n\t{0x3266451e, 0x30f2}, // wokatakana\n\t{0x326ca1fd, 0x013f}, // Ldot\n\t{0x32930f95, 0x046f}, // ksicyrillic\n\t{0x329a975f, 0x0a0a}, // uugurmukhi\n\t{0x329ed55c, 0x04e1}, // dzeabkhasiancyrillic\n\t{0x32d855b8, 0x0ae9}, // threegujarati\n\t{0x32e77f07, 0x22c2}, // intersectiontext\n\t{0x32fd46a7, 0x041e}, // afii10032\n\t{0x32fe41c6, 0x0667}, // afii57399\n\t{0x330263f2, 0x3136}, // nieunhieuhkorean\n\t{0x3303dbcb, 0x04b2}, // Hadescendercyrillic\n\t{0x33042de7, 0x1e90}, // Zcircumflex\n\t{0x335e3259, 0x3022}, // twohangzhou\n\t{0x336106b8, 0x05d7}, // afii57671\n\t{0x33821f87, 0x05e2}, // ayinhebrew\n\t{0x33849fcd, 0x304d}, // kihiragana\n\t{0x339cb29c, 0x03cb}, // upsilondieresis\n\t{0x339dfd30, 0x2200}, // forall\n\t{0x33a4598f, 0x0e10}, // thothanthai\n\t{0x33dd39ff, 0x0437}, // zecyrillic\n\t{0x33ea63c8, 0x24df}, // pcircle\n\t{0x33f59002, 0x0285}, // eshsquatreversed\n\t{0x340746a2, 0xff4a}, // jmonospace\n\t{0x3425ba3a, 0x056d}, // xeharmenian\n\t{0x342d52b5, 0x25cb}, // whitecircle\n\t{0x34399add, 0x0034}, // four\n\t{0x343b0ff5, 0x1e8b}, // xdotaccent\n\t{0x343f59f3, 0x0437}, // afii10073\n\t{0x344b950b, 0x031d}, // uptackbelowcmb\n\t{0x34515ec0, 0x01ca}, // NJ\n\t{0x345791f2, 0x027c}, // rlongleg\n\t{0x346086da, 0x2286}, // reflexsubset\n\t{0x3463147c, 0x1e69}, // sdotbelowdotaccent\n\t{0x3490ad97, 0x047a}, // Omegaroundcyrillic\n\t{0x34a7b989, 0x006f}, // o\n\t{0x34a88183, 0x2640}, // female\n\t{0x34b5f401, 0x016a}, // Umacron\n\t{0x34bab99c, 0x24e0}, // qcircle\n\t{0x34c88fb4, 0x2312}, // arc\n\t{0x34c908a5, 0x1eb4}, // Abrevetilde\n\t{0x34df3d1c, 0x00a1}, // exclamdown\n\t{0x34e969fb, 0x05a0}, // telishagedolahebrew\n\t{0x34f9cd37, 0x010b}, // cdot\n\t{0x35188ac4, 0xfeac}, // thalfinalarabic\n\t{0x351bf85e, 0x0257}, // dhook\n\t{0x351e7136, 0x0482}, // thousandcyrillic\n\t{0x352bce90, 0x00a3}, // sterling\n\t{0x35378756, 0x2591}, // shadelight\n\t{0x35440d94, 0x040c}, // Kjecyrillic\n\t{0x354dad21, 0x0129}, // itilde\n\t{0x35514624, 0x00d6}, // Odieresis\n\t{0x3596098d, 0xfb9f}, // noonghunnafinalarabic\n\t{0x359e9c03, 0x0418}, // Iicyrillic\n\t{0x359f6846, 0x1ebc}, // Etilde\n\t{0x35a9ba78, 0x0a95}, // kagujarati\n\t{0x35b65af3, 0x33af}, // radoverssquaredsquare\n\t{0x35ce2a2d, 0x066a}, // afii57381\n\t{0x35ddec6f, 0x00eb}, // edieresis\n\t{0x35e5fe3b, 0x3118}, // cbopomofo\n\t{0x3613bad2, 0x011b}, // ecaron\n\t{0x361cb4c9, 0xfb6b}, // vehfinalarabic\n\t{0x361e70b8, 0x0043}, // C\n\t{0x362459fb, 0xfe97}, // tehinitialarabic\n\t{0x362c9d3a, 0x02b0}, // hsuperior\n\t{0x36678fdf, 0x2326}, // deleteright\n\t{0x3676afc0, 0x0ac9}, // ocandravowelsigngujarati\n\t{0x368bf72e, 0x0038}, // eight\n\t{0x36aaad0e, 0x307b}, // hohiragana\n\t{0x36d3bc14, 0x0491}, // afii10098\n\t{0x36d54fb7, 0x015a}, // Sacute\n\t{0x37117bac, 0x059b}, // tevirlefthebrew\n\t{0x372986de, 0x05f3}, // gereshhebrew\n\t{0x373e5e3f, 0xff27}, // Gmonospace\n\t{0x37866f5c, 0x00df}, // germandbls\n\t{0x37a73b5a, 0xfee0}, // lammedialarabic\n\t{0x37a77cc1, 0x030b}, // hungarumlautcmb\n\t{0x37b36429, 0xff68}, // ismallkatakanahalfwidth\n\t{0x37b7557e, 0x001c}, // controlFS\n\t{0x37c2175b, 0xfcca}, // lamhahinitialarabic\n\t{0x37c23820, 0x24c5}, // Pcircle\n\t{0x37d669b4, 0x090e}, // eshortdeva\n\t{0x37e460db, 0x308d}, // rohiragana\n\t{0x37e5061e, 0x04a3}, // endescendercyrillic\n\t{0x37f67ca7, 0x029a}, // eopenclosed\n\t{0x381040c4, 0x310d}, // gbopomofo\n\t{0x381640e0, 0xffe3}, // macronmonospace\n\t{0x381c7e4d, 0x1ece}, // Ohookabove\n\t{0x38201bde, 0x0961}, // llvocalicdeva\n\t{0x38291591, 0x0e2e}, // honokhukthai\n\t{0x3839681b, 0x3055}, // sahiragana\n\t{0x3863c9a6, 0x208e}, // parenrightinferior\n\t{0x386cda71, 0x01f0}, // jcaron\n\t{0x38746563, 0x01b0}, // uhorn\n\t{0x38880d1d, 0x0198}, // Khook\n\t{0x38885f68, 0x091d}, // jhadeva\n\t{0x388ccfdd, 0x30e3}, // yasmallkatakana\n\t{0x3896be1c, 0x0025}, // percent\n\t{0x38a80af1, 0x306d}, // nehiragana\n\t{0x38bcbef5, 0x05b7}, // afii57798\n\t{0x38bebcf5, 0x2552}, // SF510000\n\t{0x38ce8c39, 0x059a}, // yetivhebrew\n\t{0x38cea50a, 0x24d6}, // gcircle\n\t{0x38d9b559, 0x3003}, // dittomark\n\t{0x38de4662, 0x1e7c}, // Vtilde\n\t{0x38e73ed2, 0x01c0}, // clickdental\n\t{0x38efc9e4, 0x04a6}, // Pemiddlehookcyrillic\n\t{0x391e728b, 0x099a}, // cabengali\n\t{0x392c00af, 0x3305}, // intisquare\n\t{0x3934b5de, 0x0e43}, // saraaimaimuanthai\n\t{0x3946429a, 0x3010}, // blacklenticularbracketleft\n\t{0x396642a3, 0x322d}, // ideographicwoodparen\n\t{0x396b44dd, 0x0a3c}, // nuktagurmukhi\n\t{0x396d8b52, 0x0930}, // radeva\n\t{0x3989511a, 0xfc5e}, // shaddadammatanarabic\n\t{0x39918d40, 0x30b6}, // zakatakana\n\t{0x399ac15a, 0x0283}, // esh\n\t{0x39aa6d90, 0x0a83}, // visargagujarati\n\t{0x39b06752, 0x004a}, // J\n\t{0x39d0b19b, 0x00ae}, // registered\n\t{0x39d5a1b1, 0x019c}, // Mturned\n\t{0x39e226d5, 0x05e3}, // afii57683\n\t{0x39f864d5, 0x2462}, // threecircle\n\t{0x39fd88e8, 0x05a8}, // qadmahebrew\n\t{0x3a029acd, 0x338e}, // squaremg\n\t{0x3a0e66b8, 0x1ee6}, // Uhookabove\n\t{0x3a1089b2, 0x0073}, // s\n\t{0x3a3b69ae, 0x317c}, // siostikeutkorean\n\t{0x3a3c0e00, 0xff9d}, // nkatakanahalfwidth\n\t{0x3a40856d, 0x25a0}, // blacksquare\n\t{0x3a7498f3, 0x05e2}, // ayin\n\t{0x3a777405, 0x0945}, // ecandravowelsigndeva\n\t{0x3a846086, 0xff9c}, // wakatakanahalfwidth\n\t{0x3aa3cfcb, 0x0960}, // rrvocalicdeva\n\t{0x3ab26d21, 0x062f}, // dalarabic\n\t{0x3ade6670, 0x0440}, // afii10082\n\t{0x3afe4407, 0x25a9}, // squarediagonalcrosshatchfill\n\t{0x3b0367b4, 0x0a6b}, // fivegurmukhi\n\t{0x3b43910b, 0x0e36}, // sarauethai\n\t{0x3b4774fb, 0xfb35}, // vavdageshhebrew\n\t{0x3b6394a8, 0x30e0}, // mukatakana\n\t{0x3b722aff, 0x02bf}, // ringhalfleft\n\t{0x3b86faf7, 0x1e31}, // kacute\n\t{0x3b8c9510, 0x0926}, // dadeva\n\t{0x3b8f536a, 0x0564}, // daarmenian\n\t{0x3b919910, 0x02b4}, // rturnedsuperior\n\t{0x3b92b9ea, 0x1e4b}, // ncircumflexbelow\n\t{0x3b9a0136, 0x2468}, // ninecircle\n\t{0x3b9a26e8, 0x0637}, // taharabic\n\t{0x3bf4dcc7, 0xfea3}, // hahinitialarabic\n\t{0x3bf5a3f3, 0x301d}, // quotedblprimereversed\n\t{0x3c2679f3, 0x25c3}, // whiteleftpointingsmalltriangle\n\t{0x3c4101c7, 0x0a2b}, // phagurmukhi\n\t{0x3c47c401, 0x0196}, // Iotaafrican\n\t{0x3c5c7654, 0x0910}, // aideva\n\t{0x3c6261b4, 0x322e}, // ideographicmetalparen\n\t{0x3c6e58f4, 0x05d5}, // vavhebrew\n\t{0x3c89c6b7, 0x2192}, // arrowright\n\t{0x3c9425ca, 0x0666}, // sixhackarabic\n\t{0x3c9b6897, 0xff0e}, // periodmonospace\n\t{0x3ca31461, 0x01d1}, // Ocaron\n\t{0x3ca4227b, 0x0120}, // Gdot\n\t{0x3ca9c5ab, 0x0345}, // ypogegrammenigreekcmb\n\t{0x3cb5e1bf, 0x3146}, // ssangsioskorean\n\t{0x3cb6098f, 0x25b9}, // whiterightpointingsmalltriangle\n\t{0x3ccd3832, 0xfc60}, // shaddafathaarabic\n\t{0x3cfd6c60, 0x305a}, // zuhiragana\n\t{0x3cfe2d05, 0x018f}, // Schwa\n\t{0x3d0581a8, 0x313c}, // rieulpieupkorean\n\t{0x3d200141, 0x30c9}, // dokatakana\n\t{0x3d25bc32, 0x2116}, // numero\n\t{0x3d292466, 0x05b1}, // hatafsegol17\n\t{0x3d30abad, 0x0279}, // rturned\n\t{0x3d3a35a3, 0x0252}, // ascriptturned\n\t{0x3d3c2f4b, 0x309d}, // iterationhiragana\n\t{0x3d44ad12, 0x3210}, // tikeutaparenkorean\n\t{0x3d4a2f11, 0x0187}, // Chook\n\t{0x3d50ceda, 0x21a8}, // arrowupdnbse\n\t{0x3d59a63c, 0x30e2}, // mokatakana\n\t{0x3d6d45f8, 0x0688}, // ddalarabic\n\t{0x3d794ead, 0x04c8}, // enhookcyrillic\n\t{0x3d888246, 0x300d}, // cornerbracketright\n\t{0x3d93ad95, 0x0171}, // uhungarumlaut\n\t{0x3d987773, 0x03c6}, // phi\n\t{0x3da1e076, 0xfb2a}, // shinshindot\n\t{0x3da24bf2, 0x004d}, // M\n\t{0x3da45134, 0xff3d}, // bracketrightmonospace\n\t{0x3dac6cb7, 0x212e}, // estimated\n\t{0x3db24f7f, 0x04eb}, // obarreddieresiscyrillic\n\t{0x3ddbfa17, 0xfe64}, // lesssmall\n\t{0x3de84dee, 0x3387}, // GBsquare\n\t{0x3de8cd4d, 0x02c9}, // firsttonechinese\n\t{0x3deb36dc, 0x0570}, // hoarmenian\n\t{0x3e08b864, 0x1e1c}, // Ecedillabreve\n\t{0x3e2966c3, 0x25a7}, // squareupperlefttolowerrightfill\n\t{0x3e2ad069, 0x0125}, // hcircumflex\n\t{0x3e2b18e7, 0x05d2}, // gimelhebrew\n\t{0x3e2ddf1a, 0x00fb}, // ucircumflex\n\t{0x3e4b0d7f, 0x2478}, // fiveparen\n\t{0x3e5c6b2e, 0x2086}, // sixinferior\n\t{0x3e78c213, 0x03f3}, // yotgreek\n\t{0x3e7bef16, 0x063a}, // ghainarabic\n\t{0x3e9c0cab, 0x0e0d}, // yoyingthai\n\t{0x3ea9e6c5, 0x044e}, // afii10096\n\t{0x3ec30c4d, 0x0168}, // Utilde\n\t{0x3ed6d505, 0x3108}, // fbopomofo\n\t{0x3edc9801, 0x031e}, // downtackbelowcmb\n\t{0x3edf2653, 0x04ba}, // Shhacyrillic\n\t{0x3edfbd48, 0x0959}, // khhadeva\n\t{0x3ee5a28f, 0x0342}, // perispomenigreekcmb\n\t{0x3ef2c5ca, 0x05df}, // finalnunhebrew\n\t{0x3efcef55, 0x09a7}, // dhabengali\n\t{0x3f19d4d4, 0x30e5}, // yusmallkatakana\n\t{0x3f35ecb4, 0x0a0f}, // eegurmukhi\n\t{0x3f36dce9, 0x061b}, // afii57403\n\t{0x3f5ead94, 0x0456}, // icyrillic\n\t{0x3f61f37a, 0x1ea3}, // ahookabove\n\t{0x3f76f3d1, 0x0214}, // Udblgrave\n\t{0x3f817391, 0x314b}, // khieukhkorean\n\t{0x3f8b0c34, 0x30c7}, // dekatakana\n\t{0x3fa4349b, 0x0e1d}, // fofathai\n\t{0x3fa5f151, 0x03de}, // Koppagreek\n\t{0x3fbf7ccb, 0x01ae}, // Tretroflexhook\n\t{0x3fddfa91, 0x22ce}, // curlyor\n\t{0x3fe060fb, 0x0147}, // Ncaron\n\t{0x3fe534eb, 0x0e12}, // thophuthaothai\n\t{0x4016947c, 0x246b}, // twelvecircle\n\t{0x401a74d3, 0x06f3}, // threepersian\n\t{0x40663d0c, 0xfeb2}, // seenfinalarabic\n\t{0x4069b3b1, 0x24ab}, // pparen\n\t{0x407a7b83, 0x0531}, // Aybarmenian\n\t{0x407de2ef, 0x06d5}, // afii57534\n\t{0x40882350, 0x0305}, // overlinecmb\n\t{0x4096d7d2, 0x006a}, // j\n\t{0x409d1b5a, 0xff97}, // rakatakanahalfwidth\n\t{0x40b0365e, 0x092f}, // yadeva\n\t{0x40e21552, 0x30de}, // makatakana\n\t{0x40eb54f4, 0x046d}, // yusbigiotifiedcyrillic\n\t{0x413f6e7c, 0x05b4}, // hiriq21\n\t{0x4144d56c, 0x016d}, // ubreve\n\t{0x414507c4, 0x05b9}, // holamnarrowhebrew\n\t{0x414a0074, 0x3336}, // hekutaarusquare\n\t{0x4156a20e, 0xfb06}, // s_t\n\t{0x4156eb7c, 0x3123}, // enbopomofo\n\t{0x415d9061, 0xff42}, // bmonospace\n\t{0x415fae27, 0x0398}, // Theta\n\t{0x4161c806, 0x09e1}, // llvocalicbengali\n\t{0x416a2ede, 0x0e04}, // khokhwaithai\n\t{0x4178dd24, 0x2243}, // asymptoticallyequal\n\t{0x41a22b2c, 0x007c}, // bar\n\t{0x41a40813, 0xff2d}, // Mmonospace\n\t{0x41a4780c, 0x0472}, // afii10147\n\t{0x41c544c2, 0x1ee7}, // uhookabove\n\t{0x41c76cd5, 0x05d7}, // het\n\t{0x41cb5b30, 0x02db}, // ogonek\n\t{0x41da6e39, 0x098c}, // lvocalicbengali\n\t{0x41e154b7, 0x1edd}, // ohorngrave\n\t{0x41e44ef7, 0x0aaa}, // pagujarati\n\t{0x41efdfc2, 0x33c1}, // mohmsquare\n\t{0x42320627, 0x2495}, // fourteenperiod\n\t{0x4235d221, 0xfecf}, // ghaininitialarabic\n\t{0x423f9221, 0x05a7}, // dargahebrew\n\t{0x4247685c, 0x01ff}, // oslashacute\n\t{0x4252dd77, 0x02c7}, // caron\n\t{0x42716524, 0x0069}, // i\n\t{0x42737aaf, 0x3081}, // mehiragana\n\t{0x427d3f50, 0x04a9}, // haabkhasiancyrillic\n\t{0x42803db2, 0x0030}, // zero\n\t{0x42813ae4, 0x1e24}, // Hdotbelow\n\t{0x428fedda, 0xfb44}, // pedagesh\n\t{0x42bba9f5, 0x30f0}, // wikatakana\n\t{0x42bc1b07, 0x25c4}, // triaglf\n\t{0x42bed72c, 0x33c0}, // kohmsquare\n\t{0x42bf360e, 0x1e6e}, // Tlinebelow\n\t{0x42d74152, 0x0578}, // voarmenian\n\t{0x42e554b2, 0x013b}, // Lcedilla\n\t{0x42ed7ca6, 0x0698}, // jeharabic\n\t{0x42f02b62, 0xfb95}, // gafmedialarabic\n\t{0x42f35290, 0x0064}, // d\n\t{0x42fb2842, 0x3120}, // aubopomofo\n\t{0x42fc57be, 0x3110}, // jbopomofo\n\t{0x42fd43ba, 0x044c}, // afii10094\n\t{0x42fdb31a, 0x0070}, // p\n\t{0x4305bc9e, 0x0920}, // tthadeva\n\t{0x4306eed3, 0x015d}, // scircumflex\n\t{0x430c20fb, 0x215e}, // seveneighths\n\t{0x430ddad4, 0xff20}, // atmonospace\n\t{0x431e0706, 0x00dc}, // Udieresis\n\t{0x43221a39, 0x1e91}, // zcircumflex\n\t{0x4328cb01, 0x339d}, // squarecm\n\t{0x432e75ab, 0x055d}, // commaarmenian\n\t{0x43399322, 0x026c}, // lbelt\n\t{0x434b10a7, 0x0a86}, // aagujarati\n\t{0x435f906e, 0xfb3e}, // memdageshhebrew\n\t{0x436008b6, 0x3064}, // tuhiragana\n\t{0x436f4b68, 0xfeaa}, // dalfinalarabic\n\t{0x439bf74d, 0xff8b}, // hikatakanahalfwidth\n\t{0x43a7e4d1, 0x0635}, // afii57429\n\t{0x43d0d1da, 0x0627}, // afii57415\n\t{0x43d651b4, 0x2663}, // clubsuitblack\n\t{0x43d755d6, 0x2212}, // minus\n\t{0x43dfb761, 0x0592}, // segoltahebrew\n\t{0x4405f04b, 0x05be}, // afii57645\n\t{0x4425746a, 0x0a18}, // ghagurmukhi\n\t{0x44317cf4, 0x2662}, // diamondsuitwhite\n\t{0x443620cd, 0x00fe}, // thorn\n\t{0x444b0abf, 0x0467}, // yuslittlecyrillic\n\t{0x444f60e7, 0x007f}, // controlDEL\n\t{0x445a3b6e, 0x0447}, // afii10089\n\t{0x4461957b, 0x041c}, // Emcyrillic\n\t{0x4464a19f, 0x0acb}, // ovowelsigngujarati\n\t{0x4483f355, 0x300f}, // whitecornerbracketright\n\t{0x4487c491, 0x3342}, // hoonsquare\n\t{0x4492e703, 0x0624}, // afii57412\n\t{0x44979567, 0x0a25}, // thagurmukhi\n\t{0x449b4678, 0xfec3}, // tahinitialarabic\n\t{0x44a78c72, 0x1eef}, // uhorntilde\n\t{0x44b414b4, 0xff0c}, // commamonospace\n\t{0x44d687fa, 0x1e06}, // Blinebelow\n\t{0x45116064, 0x2592}, // shade\n\t{0x453aa0af, 0x09f0}, // ramiddlediagonalbengali\n\t{0x4546a724, 0x05d0}, // afii57664\n\t{0x454cef44, 0x2642}, // mars\n\t{0x455bcfc1, 0x041d}, // afii10031\n\t{0x457de97e, 0x3184}, // kapyeounphieuphkorean\n\t{0x457e9e97, 0x1ee8}, // Uhornacute\n\t{0x459f0c78, 0x23a7}, // bracelefttp\n\t{0x45b3d9fd, 0x0a22}, // ddhagurmukhi\n\t{0x45b6c88f, 0x029b}, // Gsmallhook\n\t{0x45b98e95, 0x2163}, // Fourroman\n\t{0x45c29649, 0x1ef4}, // Ydotbelow\n\t{0x45c5ae6b, 0x0165}, // tcaron\n\t{0x45d73e08, 0x0a09}, // ugurmukhi\n\t{0x45e50e5b, 0x0384}, // tonos\n\t{0x45f6e82c, 0x057f}, // tiwnarmenian\n\t{0x45f7d5e0, 0x2084}, // fourinferior\n\t{0x46038ece, 0x00b6}, // paragraph\n\t{0x460c35ae, 0x05b8}, // qamats10\n\t{0x460ca9f0, 0x30e8}, // yokatakana\n\t{0x4611c6d0, 0x000b}, // controlVT\n\t{0x461bc854, 0x0194}, // Gammaafrican\n\t{0x46271982, 0x23ac}, // bracerightmid\n\t{0x4652be4f, 0x1e6d}, // tdotbelow\n\t{0x46541398, 0x0111}, // dmacron\n\t{0x465ea2f8, 0x3202}, // tikeutparenkorean\n\t{0x46611d40, 0x05bb}, // qubuts31\n\t{0x466452b7, 0x321b}, // hieuhaparenkorean\n\t{0x467a9a55, 0x055b}, // emphasismarkarmenian\n\t{0x46ab407a, 0x322b}, // ideographicfireparen\n\t{0x46ab921d, 0x3076}, // buhiragana\n\t{0x46ba3911, 0x1e45}, // ndotaccent\n\t{0x46bce40e, 0xfb4f}, // aleflamedhebrew\n\t{0x46c4dd5b, 0x0433}, // afii10068\n\t{0x46ca3a49, 0x2791}, // eightcircleinversesansserif\n\t{0x46e3006c, 0x055c}, // exclamarmenian\n\t{0x46f10ed2, 0x222a}, // union\n\t{0x46f3948a, 0x05d1}, // bethebrew\n\t{0x46f5f918, 0x05c3}, // afii57658\n\t{0x46f9c8ca, 0x2195}, // arrowupdn\n\t{0x470d662e, 0x042e}, // IUcyrillic\n\t{0x470da4b8, 0x0453}, // gjecyrillic\n\t{0x471d219d, 0x00f4}, // ocircumflex\n\t{0x472c971d, 0x1e4d}, // otildeacute\n\t{0x47542f2d, 0x0107}, // cacute\n\t{0x47849b51, 0x05e5}, // finaltsadi\n\t{0x478eb915, 0x014f}, // obreve\n\t{0x47b12f1d, 0x3009}, // anglebracketright\n\t{0x47b78334, 0x09a5}, // thabengali\n\t{0x47ee62a0, 0x04f1}, // udieresiscyrillic\n\t{0x480265ce, 0x06f2}, // twopersian\n\t{0x48175191, 0x0130}, // Idotaccent\n\t{0x481e50de, 0xfb32}, // gimeldagesh\n\t{0x4825c60d, 0x02c3}, // arrowheadrightmod\n\t{0x482626d7, 0x09ee}, // eightbengali\n\t{0x4826d3e4, 0x3391}, // khzsquare\n\t{0x48270352, 0x1e42}, // Mdotbelow\n\t{0x4848966d, 0x05b2}, // hatafpatah\n\t{0x485d5052, 0x057d}, // seharmenian\n\t{0x48908e05, 0xff28}, // Hmonospace\n\t{0x48a3aad1, 0x1ec8}, // Ihookabove\n\t{0x48adcc47, 0x0160}, // Scaron\n\t{0x48b11825, 0x1e3f}, // macute\n\t{0x48b31eb3, 0x02a3}, // dzaltone\n\t{0x48bbab6b, 0x1e68}, // Sdotbelowdotaccent\n\t{0x48d0cd97, 0x0460}, // Omegacyrillic\n\t{0x48ed1289, 0x3180}, // ssangieungkorean\n\t{0x48f1ea86, 0x007c}, // verticalbar\n\t{0x49188fb6, 0x261d}, // pointingindexupwhite\n\t{0x491e8c30, 0x2562}, // SF200000\n\t{0x4928f75b, 0x1e3d}, // lcircumflexbelow\n\t{0x49299271, 0x1eee}, // Uhorntilde\n\t{0x49314f7c, 0x1e96}, // hlinebelow\n\t{0x493c6957, 0x01ec}, // Oogonekmacron\n\t{0x497b2a29, 0x03c8}, // psi\n\t{0x49877605, 0x1ecf}, // ohookabove\n\t{0x49a6c904, 0x00d5}, // Otilde\n\t{0x49a8fbe4, 0x227a}, // precedes\n\t{0x49b28bf6, 0x011f}, // gbreve\n\t{0x49c941c8, 0x0630}, // thalarabic\n\t{0x49cf949f, 0x0011}, // controlDC1\n\t{0x49d53679, 0x053e}, // Caarmenian\n\t{0x49e41b40, 0x0117}, // edotaccent\n\t{0x4a059748, 0x2329}, // angleleft\n\t{0x4a0a939e, 0x02dc}, // ilde\n\t{0x4a0dc7cd, 0x0273}, // nhookretroflex\n\t{0x4a1b8688, 0x0a8f}, // egujarati\n\t{0x4a67a4cd, 0x33c6}, // coverkgsquare\n\t{0x4a6dc3e0, 0x017c}, // zdotaccent\n\t{0x4a8f25d9, 0x0134}, // Jcircumflex\n\t{0x4a911686, 0x042a}, // Hardsigncyrillic\n\t{0x4aa9a643, 0x220c}, // notcontains\n\t{0x4ab871b2, 0x05a9}, // telishaqetanahebrew\n\t{0x4ad4b644, 0x066c}, // thousandsseparatorpersian\n\t{0x4adaae02, 0x30bc}, // zekatakana\n\t{0x4b13bfc7, 0x261f}, // pointingindexdownwhite\n\t{0x4b146e46, 0x0076}, // v\n\t{0x4b1cfc1b, 0x0052}, // R\n\t{0x4b69c8eb, 0x3200}, // kiyeokparenkorean\n\t{0x4b7a4380, 0x326b}, // thieuthcirclekorean\n\t{0x4b8cb1d3, 0x315a}, // oekorean\n\t{0x4b904ad7, 0x09ec}, // sixbengali\n\t{0x4bc3db0d, 0xfe8e}, // aleffinalarabic\n\t{0x4bcb1484, 0x0997}, // gabengali\n\t{0x4bf3941c, 0x04e7}, // odieresiscyrillic\n\t{0x4c1231bd, 0xfebe}, // dadfinalarabic\n\t{0x4c224e3d, 0x0216}, // Uinvertedbreve\n\t{0x4c31d446, 0x05b6}, // segolwidehebrew\n\t{0x4c330dc7, 0x2303}, // control\n\t{0x4c539c26, 0xff45}, // emonospace\n\t{0x4c550d84, 0x0286}, // eshcurl\n\t{0x4c63022b, 0x00ac}, // logicalnot\n\t{0x4c636f96, 0xfe4c}, // overlinedblwavy\n\t{0x4ca2293a, 0x0549}, // Chaarmenian\n\t{0x4ca721bb, 0x24d9}, // jcircle\n\t{0x4cbb6976, 0x054c}, // Raarmenian\n\t{0x4cc2766b, 0x0474}, // Izhitsacyrillic\n\t{0x4ccaa98f, 0x0292}, // ezh\n\t{0x4cda32dd, 0x2592}, // shademedium\n\t{0x4cf1d7c1, 0xfb2c}, // shindageshshindot\n\t{0x4d08f8de, 0x278c}, // threecircleinversesansserif\n\t{0x4d18f1c3, 0x01e5}, // gstroke\n\t{0x4d3fee14, 0x2207}, // gradient\n\t{0x4d5e2eea, 0x09c7}, // evowelsignbengali\n\t{0x4d66ad61, 0x0259}, // schwa\n\t{0x4d6f0f44, 0x03b6}, // zeta\n\t{0x4d76cbca, 0x0939}, // hadeva\n\t{0x4da2ea17, 0x30f7}, // vakatakana\n\t{0x4dad3b1f, 0xff47}, // gmonospace\n\t{0x4db4092d, 0x05b2}, // hatafpatahquarterhebrew\n\t{0x4dc635ef, 0x03c2}, // sigmafinal\n\t{0x4dd49001, 0x04ae}, // Ustraightcyrillic\n\t{0x4dd4e51e, 0x05e3}, // finalpe\n\t{0x4ddb0ff8, 0x3014}, // tortoiseshellbracketleft\n\t{0x4ddbe970, 0x0054}, // T\n\t{0x4ddd9ef4, 0x3296}, // ideographicfinancialcircle\n\t{0x4dedf33d, 0xff8d}, // hekatakanahalfwidth\n\t{0x4def9c7c, 0x2327}, // clear\n\t{0x4dfb4b2a, 0x247b}, // eightparen\n\t{0x4e03617a, 0x0ac1}, // uvowelsigngujarati\n\t{0x4e0fdced, 0x0a2d}, // bhagurmukhi\n\t{0x4e1cdd9c, 0x247d}, // tenparen\n\t{0x4e63a83b, 0x0642}, // qafarabic\n\t{0x4e7d8096, 0xff53}, // smonospace\n\t{0x4e8356bc, 0x0108}, // Ccircumflex\n\t{0x4eb853e7, 0x3384}, // kasquare\n\t{0x4ec3d2dc, 0xfccb}, // lamkhahinitialarabic\n\t{0x4ec752cf, 0x2022}, // bullet\n\t{0x4ef94777, 0x323b}, // ideographicstudyparen\n\t{0x4efcaf3c, 0x01ff}, // ostrokeacute\n\t{0x4f1d81af, 0x05bb}, // qubuts\n\t{0x4f1d9a74, 0x1e15}, // emacrongrave\n\t{0x4f1fbad2, 0x33b2}, // mussquare\n\t{0x4f238367, 0x0270}, // mlonglegturned\n\t{0x4f23d8fd, 0xfeda}, // kaffinalarabic\n\t{0x4f2d09de, 0x0662}, // twohackarabic\n\t{0x4f2efda5, 0xff07}, // quotesinglemonospace\n\t{0x4f30c414, 0x01c6}, // dzcaron\n\t{0x4f4be9c8, 0x3129}, // iubopomofo\n\t{0x4f6c2078, 0x00e5}, // aring\n\t{0x4f9b207b, 0x06c1}, // hehaltonearabic\n\t{0x4f9deafc, 0x03c4}, // tau\n\t{0x4fb92256, 0x216b}, // Twelveroman\n\t{0x4fdd1a2b, 0x300a}, // dblanglebracketleft\n\t{0x4feaecfe, 0x22c3}, // uniontext\n\t{0x5004c9ab, 0x09ed}, // sevenbengali\n\t{0x50166be8, 0x049a}, // Kadescendercyrillic\n\t{0x501dd48e, 0x2229}, // intersection\n\t{0x5024fa7b, 0x260f}, // whitetelephone\n\t{0x502bdceb, 0x3290}, // ideographsuncircle\n\t{0x503133b5, 0x0009}, // controlHT\n\t{0x507713d7, 0x2a02}, // circlemultiplytext\n\t{0x50794cf3, 0x255d}, // SF260000\n\t{0x508090a0, 0xff82}, // tukatakanahalfwidth\n\t{0x50993bc3, 0x05dd}, // finalmemhebrew\n\t{0x509ec6af, 0x0490}, // Gheupturncyrillic\n\t{0x50a87245, 0x05b9}, // holamwidehebrew\n\t{0x50be3a5b, 0x3189}, // yoikorean\n\t{0x50cc5524, 0x00be}, // threequarters\n\t{0x50cc8cef, 0x24a3}, // hparen\n\t{0x50fb6106, 0x30c1}, // tikatakana\n\t{0x510f444c, 0x0662}, // afii57394\n\t{0x511118c0, 0x05b8}, // qamatsqatanquarterhebrew\n\t{0x51250a43, 0x0ab9}, // hagujarati\n\t{0x5125d1fa, 0x25a1}, // whitesquare\n\t{0x513a52c9, 0x2510}, // SF030000\n\t{0x51439af3, 0x064e}, // afii57454\n\t{0x5147986a, 0xff5b}, // braceleftmonospace\n\t{0x514d7298, 0x3238}, // ideographiclaborparen\n\t{0x515692ea, 0x0414}, // Decyrillic\n\t{0x51616742, 0x328c}, // ideographwatercircle\n\t{0x51817d65, 0xfca1}, // tehjeeminitialarabic\n\t{0x51969939, 0x03ba}, // kappa\n\t{0x51ca7ab6, 0x00f6}, // odieresis\n\t{0x51cbc424, 0x014d}, // omacron\n\t{0x51d34569, 0x00e9}, // eacute\n\t{0x51e6847c, 0x05b2}, // hatafpatah16\n\t{0x51ed3cb2, 0x00af}, // macron\n\t{0x51f006ea, 0x24af}, // tparen\n\t{0x51f3c5bb, 0x2082}, // twoinferior\n\t{0x51fee10e, 0x2210}, // coproducttext\n\t{0x52099e7d, 0x3267}, // ieungcirclekorean\n\t{0x5241ded3, 0x0428}, // Shacyrillic\n\t{0x5247cafc, 0x0691}, // afii57513\n\t{0x524c924c, 0x02d6}, // plusmod\n\t{0x525a3324, 0x2606}, // whitestar\n\t{0x5282fafa, 0x0e09}, // chochingthai\n\t{0x528afecc, 0xfb89}, // ddalfinalarabic\n\t{0x52beac4f, 0x25bf}, // whitedownpointingsmalltriangle\n\t{0x52e15cc8, 0x24b6}, // Acircle\n\t{0x52f72574, 0x3322}, // sentisquare\n\t{0x530e1856, 0x05dd}, // finalmem\n\t{0x531472bf, 0x05bb}, // qubutswidehebrew\n\t{0x531963a3, 0x0a73}, // uragurmukhi\n\t{0x531c6e1f, 0x315b}, // yokorean\n\t{0x532f469f, 0x093d}, // avagrahadeva\n\t{0x533e9388, 0x02bc}, // afii57929\n\t{0x537b0d36, 0x0466}, // Yuslittlecyrillic\n\t{0x53b3b784, 0xfb4a}, // tavdagesh\n\t{0x53ca8524, 0x099d}, // jhabengali\n\t{0x53d8dfb9, 0x3115}, // shbopomofo\n\t{0x53e66e1a, 0x0476}, // Izhitsadblgravecyrillic\n\t{0x53f49c2a, 0x066c}, // thousandsseparatorarabic\n\t{0x53f951b5, 0x056f}, // kenarmenian\n\t{0x540493c8, 0x03b1}, // alpha\n\t{0x540c5f40, 0x0552}, // Yiwnarmenian\n\t{0x542576f9, 0x0a07}, // igurmukhi\n\t{0x542f1e7a, 0x0151}, // ohungarumlaut\n\t{0x54761f15, 0x0631}, // afii57425\n\t{0x54820079, 0x04df}, // zedieresiscyrillic\n\t{0x548a6dde, 0x0451}, // iocyrillic\n\t{0x5494ff15, 0x053c}, // Liwnarmenian\n\t{0x54cc0e6b, 0x0212}, // Rinvertedbreve\n\t{0x54dfda54, 0xfe44}, // whitecornerbracketrightvertical\n\t{0x54f8c0f2, 0x1e78}, // Utildeacute\n\t{0x55003750, 0x05b0}, // shevanarrowhebrew\n\t{0x55021a5a, 0x0644}, // lamarabic\n\t{0x550a9f23, 0x0452}, // djecyrillic\n\t{0x550d7456, 0x0061}, // a\n\t{0x5512ec97, 0x0067}, // g\n\t{0x552e72ea, 0x1e8d}, // xdieresis\n\t{0x5532b75e, 0x3044}, // ihiragana\n\t{0x554f67fa, 0x1e4e}, // Otildedieresis\n\t{0x556bcf7c, 0xff1f}, // questionmonospace\n\t{0x5575c7a8, 0x09a8}, // nabengali\n\t{0x557f8e27, 0x1ee0}, // Ohorntilde\n\t{0x558d2385, 0x0318}, // lefttackbelowcmb\n\t{0x55aa99d5, 0xfe3f}, // anglebracketleftvertical\n\t{0x55b44317, 0x1ef2}, // Ygrave\n\t{0x55c6e8cd, 0x0aac}, // bagujarati\n\t{0x55e74cbe, 0x23a6}, // bracketrightbt\n\t{0x55e81ebb, 0x3124}, // angbopomofo\n\t{0x56000715, 0x33b0}, // pssquare\n\t{0x560f90ad, 0x25e4}, // blackupperlefttriangle\n\t{0x56200891, 0x092b}, // phadeva\n\t{0x56217879, 0x0596}, // tipehalefthebrew\n\t{0x56362764, 0x24d0}, // acircle\n\t{0x565aa859, 0x30a8}, // ekatakana\n\t{0x565d95fc, 0x3109}, // dbopomofo\n\t{0x56a0101f, 0x04ac}, // Tedescendercyrillic\n\t{0x56d036b9, 0x000f}, // controlSI\n\t{0x56deae12, 0x0102}, // Abreve\n\t{0x57050efe, 0x0145}, // Ncommaaccent\n\t{0x5708e98e, 0x3154}, // ekorean\n\t{0x5713d355, 0x2790}, // sevencircleinversesansserif\n\t{0x575226bc, 0x239f}, // parenrightex\n\t{0x57687403, 0x0e08}, // chochanthai\n\t{0x576959da, 0x04b7}, // chedescendercyrillic\n\t{0x577fdcc5, 0x033a}, // bridgeinvertedbelowcmb\n\t{0x578594f4, 0x0e47}, // maitaikhuthai\n\t{0x579e8de2, 0x2074}, // foursuperior\n\t{0x57a10bfe, 0x0435}, // iecyrillic\n\t{0x57c4d153, 0xfb1f}, // yodyodpatahhebrew\n\t{0x57c8c90f, 0x313b}, // rieulmieumkorean\n\t{0x57cea503, 0xff17}, // sevenmonospace\n\t{0x57fc3d5e, 0x255b}, // SF280000\n\t{0x58064efc, 0x0448}, // shacyrillic\n\t{0x580bc6b8, 0x2320}, // integraltop\n\t{0x580e0aa6, 0x005e}, // asciicircum\n\t{0x5817c838, 0x3141}, // mieumkorean\n\t{0x581d6ffc, 0x1ef8}, // Ytilde\n\t{0x58246165, 0x0152}, // OE\n\t{0x582e4f2f, 0x02a1}, // glottalstopstroke\n\t{0x58408a1e, 0x2321}, // integralbottom\n\t{0x584e8397, 0x263a}, // whitesmilingface\n\t{0x5855c496, 0x0465}, // eiotifiedcyrillic\n\t{0x587d22eb, 0x208d}, // parenleftinferior\n\t{0x58a61c85, 0x1e9a}, // arighthalfring\n\t{0x58ab0a67, 0x0544}, // Menarmenian\n\t{0x58ba15a9, 0x24c9}, // Tcircle\n\t{0x58c52193, 0x221a}, // radical\n\t{0x58df0572, 0x0301}, // acutecmb\n\t{0x58dfd388, 0x3187}, // yoyakorean\n\t{0x58e61a1f, 0x05e8}, // resh\n\t{0x58ea1dd9, 0x0650}, // afii57456\n\t{0x593b3f38, 0x0aa1}, // ddagujarati\n\t{0x5951351c, 0x0109}, // ccircumflex\n\t{0x59664498, 0xff21}, // Amonospace\n\t{0x597231b2, 0x1e00}, // Aringbelow\n\t{0x598309ec, 0x1edc}, // Ohorngrave\n\t{0x598631c5, 0x24c1}, // Lcircle\n\t{0x59b5003e, 0x3274}, // siosacirclekorean\n\t{0x59b9b187, 0x0075}, // u\n\t{0x59be0f3a, 0xff7f}, // sokatakanahalfwidth\n\t{0x59c46f70, 0x3299}, // ideographicsecretcircle\n\t{0x59c80d40, 0x2482}, // fifteenparen\n\t{0x59d6d87b, 0xff74}, // ekatakanahalfwidth\n\t{0x59d7f689, 0x3393}, // ghzsquare\n\t{0x59eccfd0, 0x05a3}, // munahlefthebrew\n\t{0x5a1aca3c, 0xfe34}, // wavyunderscorevertical\n\t{0x5a24f67c, 0x03b4}, // delta\n\t{0x5a3b6461, 0xfeb8}, // sheenmedialarabic\n\t{0x5a532aa6, 0x0586}, // feharmenian\n\t{0x5a575dc4, 0x0582}, // yiwnarmenian\n\t{0x5a62c8e8, 0x005c}, // backslash\n\t{0x5a8d2a4a, 0x09c3}, // rvocalicvowelsignbengali\n\t{0x5a963c7c, 0x0e02}, // khokhaithai\n\t{0x5acd345c, 0x339c}, // squaremm\n\t{0x5af634c5, 0x059e}, // gershayimaccenthebrew\n\t{0x5b041347, 0x0581}, // coarmenian\n\t{0x5b0fd985, 0x0360}, // tildedoublecmb\n\t{0x5b1907c0, 0x30a5}, // usmallkatakana\n\t{0x5b1da33a, 0x2206}, // increment\n\t{0x5b1dbca0, 0x0aa6}, // dagujarati\n\t{0x5b426364, 0x30cf}, // hakatakana\n\t{0x5b426591, 0xfeb7}, // sheeninitialarabic\n\t{0x5b46f9e7, 0x2080}, // zeroinferior\n\t{0x5b54a5c3, 0x05e1}, // afii57681\n\t{0x5b5f52e7, 0x0421}, // afii10035\n\t{0x5b6ab184, 0x25ef}, // largecircle\n\t{0x5b6f6c30, 0x0003}, // controlETX\n\t{0x5b720455, 0x014c}, // Omacron\n\t{0x5b72ad21, 0x03d5}, // phi1\n\t{0x5b785975, 0x02a7}, // tesh\n\t{0x5b7a64f2, 0x0597}, // reviahebrew\n\t{0x5bbfa15f, 0x25c4}, // blackleftpointingpointer\n\t{0x5bc1fa37, 0xfb47}, // qofdageshhebrew\n\t{0x5be94211, 0xff24}, // Dmonospace\n\t{0x5beb1e0f, 0x24cf}, // Zcircle\n\t{0x5bf0ba5d, 0xfb04}, // f_f_l\n\t{0x5c0e8b47, 0x0426}, // afii10040\n\t{0x5c185e06, 0x0250}, // aturned\n\t{0x5c299659, 0x250c}, // SF010000\n\t{0x5c337c81, 0xff8a}, // hakatakanahalfwidth\n\t{0x5c3478b9, 0xff3a}, // Zmonospace\n\t{0x5c349e9d, 0x30c5}, // dukatakana\n\t{0x5c352033, 0x092c}, // badeva\n\t{0x5c3b9279, 0x307e}, // mahiragana\n\t{0x5c3eecc5, 0x2561}, // SF190000\n\t{0x5c4a060e, 0x0e29}, // sorusithai\n\t{0x5c6b0ced, 0x05b8}, // qamats33\n\t{0x5c71c76c, 0x24b8}, // Ccircle\n\t{0x5c7f4966, 0x01b8}, // Ezhreversed\n\t{0x5c97be88, 0x0a2a}, // pagurmukhi\n\t{0x5c9a7487, 0x30ec}, // rekatakana\n\t{0x5ca0edc2, 0x01e7}, // gcaron\n\t{0x5cad2e17, 0x0679}, // tteharabic\n\t{0x5cb64e9e, 0x0150}, // Ohungarumlaut\n\t{0x5cb98a11, 0x05e9}, // afii57689\n\t{0x5cc203b0, 0x09eb}, // fivebengali\n\t{0x5cde4fa9, 0xff39}, // Ymonospace\n\t{0x5ce216d6, 0x02bb}, // commaturnedmod\n\t{0x5ce89c18, 0x028c}, // vturned\n\t{0x5cee9de2, 0x333b}, // peezisquare\n\t{0x5d053ab9, 0x334d}, // meetorusquare\n\t{0x5d06b34a, 0x01f5}, // gacute\n\t{0x5d185c29, 0x0aec}, // sixgujarati\n\t{0x5d23e967, 0x019a}, // lbar\n\t{0x5d24fed7, 0x047d}, // omegatitlocyrillic\n\t{0x5d26ca2e, 0x0996}, // khabengali\n\t{0x5d32256c, 0x25c6}, // blackdiamond\n\t{0x5d333915, 0x2234}, // therefore\n\t{0x5d42ce05, 0x30c2}, // dikatakana\n\t{0x5d590cb1, 0x05bb}, // qubutsnarrowhebrew\n\t{0x5d71a05b, 0x0017}, // controlETB\n\t{0x5d85b369, 0x05b8}, // qamats29\n\t{0x5d8c507f, 0xfb47}, // qofdagesh\n\t{0x5da58253, 0x30d0}, // bakatakana\n\t{0x5dba07ed, 0x22a5}, // perpendicular\n\t{0x5dbeec87, 0x01cd}, // Acaron\n\t{0x5de3b63c, 0x09cb}, // ovowelsignbengali\n\t{0x5e0aac56, 0x0200}, // Adblgrave\n\t{0x5e1c8dfa, 0x05b0}, // sheva2e\n\t{0x5e27fa57, 0xff6d}, // yusmallkatakanahalfwidth\n\t{0x5e36a670, 0xfe33}, // underscorevertical\n\t{0x5e483ddc, 0x3277}, // chieuchacirclekorean\n\t{0x5e4f2fbb, 0x1e65}, // sacutedotaccent\n\t{0x5ea7176f, 0x02d9}, // dotaccent\n\t{0x5edd1e19, 0xff25}, // Emonospace\n\t{0x5edd9086, 0x003a}, // colon\n\t{0x5eddf92b, 0x0044}, // D\n\t{0x5ee2af9c, 0x0e58}, // eightthai\n\t{0x5f03252d, 0x0136}, // Kcedilla\n\t{0x5f0ec9e9, 0x039a}, // Kappa\n\t{0x5f1bf33a, 0x1e17}, // emacronacute\n\t{0x5f4a5f07, 0x0abe}, // aavowelsigngujarati\n\t{0x5f5c5d5f, 0x041b}, // Elcyrillic\n\t{0x5f63748c, 0x03e6}, // Kheicoptic\n\t{0x5f7dc76d, 0x033b}, // squarebelowcmb\n\t{0x5f881d5c, 0x3160}, // yukorean\n\t{0x5f8f63e2, 0x24a0}, // eparen\n\t{0x5f99c0ac, 0x01ad}, // thook\n\t{0x5fa5f5cc, 0xfefa}, // lamalefhamzabelowfinalarabic\n\t{0x5fb56903, 0x095d}, // rhadeva\n\t{0x5fbeac33, 0x028b}, // vhook\n\t{0x5fe9065e, 0x042e}, // afii10048\n\t{0x6037ae88, 0x1ef3}, // ygrave\n\t{0x603b5882, 0x2287}, // reflexsuperset\n\t{0x603b9d93, 0x00d3}, // Oacute\n\t{0x603ff393, 0x1e6c}, // Tdotbelow\n\t{0x60753fe5, 0x066d}, // afii63167\n\t{0x607c93ed, 0x01b2}, // Vhook\n\t{0x60a46930, 0x0197}, // Istroke\n\t{0x60a4c80a, 0x30ee}, // wasmallkatakana\n\t{0x60ac2314, 0x25cc}, // dottedcircle\n\t{0x60ba7236, 0x000e}, // controlSO\n\t{0x60d57bed, 0x0aa4}, // tagujarati\n\t{0x60e1bf57, 0x1e0d}, // ddotbelow\n\t{0x60ebe651, 0x1ed8}, // Ocircumflexdotbelow\n\t{0x60f5a9fa, 0x03b7}, // eta\n\t{0x6106119c, 0xff37}, // Wmonospace\n\t{0x610b31e6, 0x01f1}, // DZ\n\t{0x6114c811, 0x1ef0}, // Uhorndotbelow\n\t{0x6121a3f6, 0x0e4d}, // nikhahitthai\n\t{0x61239a5a, 0x01c2}, // clickalveolar\n\t{0x6143b142, 0x1e67}, // scarondotaccent\n\t{0x61503571, 0x027b}, // rhookturned\n\t{0x6154bc05, 0x043b}, // afii10077\n\t{0x617c687c, 0x01a2}, // Oi\n\t{0x6198a771, 0xfef3}, // alefmaksurainitialarabic\n\t{0x61a21109, 0x01c9}, // lj\n\t{0x61a2d0df, 0x258c}, // lfblock\n\t{0x61a6f1a4, 0x0264}, // ramshorn\n\t{0x61b4ed39, 0x25ba}, // triagrt\n\t{0x61b7afbf, 0x05b5}, // tserenarrowhebrew\n\t{0x61b9f022, 0x04c4}, // kahookcyrillic\n\t{0x61ce131a, 0x0647}, // afii57470\n\t{0x61d46fc2, 0x1ed6}, // Ocircumflextilde\n\t{0x61d7bcdb, 0x1e57}, // pdotaccent\n\t{0x61e75298, 0x0417}, // afii10025\n\t{0x61f36361, 0x06f8}, // eightpersian\n\t{0x61fe712f, 0x20a4}, // afii08941\n\t{0x621057dd, 0x1ef5}, // ydotbelow\n\t{0x62127977, 0x266a}, // musicalnote\n\t{0x62161c15, 0x05da}, // finalkafhebrew\n\t{0x6229838d, 0x05d0}, // alef\n\t{0x62447ae3, 0x0314}, // commareversedabovecmb\n\t{0x6248b5e6, 0x33dd}, // wbsquare\n\t{0x625320aa, 0x30b2}, // gekatakana\n\t{0x6260c6fc, 0x0589}, // periodarmenian\n\t{0x6265e881, 0x2266}, // lessoverequal\n\t{0x626cbaa4, 0x01bf}, // wynn\n\t{0x62724d89, 0x09ad}, // bhabengali\n\t{0x62896f4a, 0x05f2}, // yodyodhebrew\n\t{0x628a5951, 0xff56}, // vmonospace\n\t{0x62a11b25, 0x1e87}, // wdotaccent\n\t{0x62accaf5, 0x239d}, // parenleftbt\n\t{0x62b2cd2d, 0x00c2}, // Acircumflex\n\t{0x62b6e7ac, 0x01a5}, // phook\n\t{0x62c361d5, 0x05e2}, // afii57682\n\t{0x62c52689, 0x05d5}, // afii57669\n\t{0x62ca59ed, 0x03aa}, // Iotadieresis\n\t{0x62cfccee, 0x017d}, // Zcaron\n\t{0x62d27ffc, 0x0567}, // eharmenian\n\t{0x62f7161d, 0x3020}, // postalmarkface\n\t{0x630680b1, 0x1e20}, // Gmacron\n\t{0x63070542, 0x0401}, // afii10023\n\t{0x630758ff, 0x317e}, // sioscieuckorean\n\t{0x632ae410, 0x0acc}, // auvowelsigngujarati\n\t{0x634ac34b, 0x2297}, // timescircle\n\t{0x634e42e5, 0xff2b}, // Kmonospace\n\t{0x635a9554, 0x04e5}, // idieresiscyrillic\n\t{0x636fabd5, 0x093c}, // nuktadeva\n\t{0x637ae7ca, 0x0344}, // dialytikatonoscmb\n\t{0x637d3539, 0x00bc}, // onequarter\n\t{0x6389d9bb, 0x0641}, // afii57441\n\t{0x63a82931, 0x0297}, // cstretched\n\t{0x63d84bb6, 0x2281}, // notsucceeds\n\t{0x63dfed74, 0x311f}, // eibopomofo\n\t{0x63e274d2, 0xfc0b}, // tehjeemisolatedarabic\n\t{0x63e60b13, 0x0149}, // napostrophe\n\t{0x63f6cd8f, 0x049d}, // kaverticalstrokecyrillic\n\t{0x642b78c5, 0x1ed5}, // ocircumflexhookabove\n\t{0x642e193e, 0x0469}, // yuslittleiotifiedcyrillic\n\t{0x6434f04a, 0xfd88}, // lammeemhahinitialarabic\n\t{0x64468e36, 0x0e18}, // thothongthai\n\t{0x64517fe8, 0x004b}, // K\n\t{0x6453c78e, 0x064e}, // fathalowarabic\n\t{0x6460d798, 0x3025}, // fivehangzhou\n\t{0x646b157e, 0x3242}, // ideographicselfparen\n\t{0x646c5c19, 0x0ab5}, // vagujarati\n\t{0x647eca4f, 0x09ae}, // mabengali\n\t{0x64a1b76b, 0x30fa}, // vokatakana\n\t{0x64d00b32, 0x0114}, // Ebreve\n\t{0x64d7a402, 0x0e40}, // saraethai\n\t{0x64d94f4a, 0x0e01}, // kokaithai\n\t{0x64e7dff2, 0x09c4}, // rrvocalicvowelsignbengali\n\t{0x64eb016b, 0x2245}, // approximatelyequal\n\t{0x64fd7a48, 0x2078}, // eightsuperior\n\t{0x650678be, 0x02cb}, // fourthtonechinese\n\t{0x65070663, 0x0459}, // ljecyrillic\n\t{0x6510d99a, 0x0938}, // sadeva\n\t{0x651d5722, 0x04c2}, // zhebrevecyrillic\n\t{0x6525cdb1, 0x00ad}, // softhyphen\n\t{0x6543f12c, 0x01d5}, // Udieresismacron\n\t{0x654d08a0, 0x0e3a}, // phinthuthai\n\t{0x657ffabd, 0x22ee}, // ellipsisvertical\n\t{0x6598fbfe, 0x3112}, // xbopomofo\n\t{0x65a5bd1b, 0x24e1}, // rcircle\n\t{0x65be15d1, 0x0a08}, // iigurmukhi\n\t{0x65c095c5, 0x200e}, // afii299\n\t{0x65cc1f56, 0x0545}, // Yiarmenian\n\t{0x662a6586, 0x23a0}, // parenrightbt\n\t{0x662a831c, 0x1eeb}, // uhorngrave\n\t{0x663a2c1a, 0x3300}, // apaatosquare\n\t{0x6642f834, 0x0361}, // breveinverteddoublecmb\n\t{0x665bba62, 0x2017}, // dbllowline\n\t{0x665e930f, 0x3264}, // mieumcirclekorean\n\t{0x666ae75e, 0x0159}, // rcaron\n\t{0x666e8927, 0xfc4e}, // noonmeemisolatedarabic\n\t{0x666faf51, 0xfba5}, // hehhamzaabovefinalarabic\n\t{0x6689dbc7, 0x33cb}, // HPsquare\n\t{0x668e9764, 0x30a2}, // akatakana\n\t{0x66bb979c, 0x246c}, // thirteencircle\n\t{0x66c590a5, 0x2236}, // ratio\n\t{0x66e9c5c7, 0x3084}, // yahiragana\n\t{0x66ef8fdf, 0x040f}, // afii10145\n\t{0x66fb9b49, 0x33c9}, // gysquare\n\t{0x67188e74, 0x0066}, // f\n\t{0x6740a4ac, 0x25cf}, // H18533\n\t{0x67427e4a, 0x2079}, // ninesuperior\n\t{0x674a0210, 0x02b6}, // Rsmallinvertedsuperior\n\t{0x674c80b7, 0x03da}, // Stigmagreek\n\t{0x67569fa6, 0x05b5}, // tsere\n\t{0x6758c83c, 0x2588}, // block\n\t{0x6776a85a, 0x0ac7}, // evowelsigngujarati\n\t{0x6779be95, 0x3113}, // zhbopomofo\n\t{0x6785194b, 0x221f}, // rightangle\n\t{0x679d9205, 0x02c5}, // arrowheaddownmod\n\t{0x679dcadd, 0x0e54}, // fourthai\n\t{0x679ffc49, 0x2024}, // onedotenleader\n\t{0x67ea250f, 0x1e2d}, // itildebelow\n\t{0x67ebcea4, 0x3209}, // chieuchparenkorean\n\t{0x67f3db47, 0x3073}, // bihiragana\n\t{0x67f3ecac, 0xfb4b}, // afii57700\n\t{0x67f7f220, 0x309c}, // semivoicedmarkkana\n\t{0x67fa1db6, 0x203a}, // guilsinglright\n\t{0x68070609, 0x0916}, // khadeva\n\t{0x6808ec86, 0x02d8}, // breve\n\t{0x6811e3e1, 0x0404}, // Ecyrillic\n\t{0x6814026d, 0x02c8}, // verticallinemod\n\t{0x682b08dd, 0x01ac}, // Thook\n\t{0x6853e235, 0x0652}, // sukunarabic\n\t{0x685932be, 0xfe36}, // parenrightvertical\n\t{0x68a76955, 0x00c7}, // Ccedilla\n\t{0x68b3215e, 0x0339}, // ringhalfrightbelowcmb\n\t{0x68b98a65, 0x0679}, // afii57511\n\t{0x68ccd1d8, 0x3212}, // mieumaparenkorean\n\t{0x68eb418e, 0x3011}, // blacklenticularbracketright\n\t{0x690f8118, 0x320b}, // thieuthparenkorean\n\t{0x692bc1f7, 0x0a42}, // uumatragurmukhi\n\t{0x693ccd9c, 0x0432}, // vecyrillic\n\t{0x6962e430, 0x0322}, // hookretroflexbelowcmb\n\t{0x6977f4b7, 0xff05}, // percentmonospace\n\t{0x697925af, 0x05d2}, // gimel\n\t{0x697feb80, 0x030d}, // verticallineabovecmb\n\t{0x6991a62a, 0x0935}, // vadeva\n\t{0x699d525a, 0x0111}, // dcroat\n\t{0x69aabc4d, 0x06af}, // gafarabic\n\t{0x69d31152, 0x0e51}, // onethai\n\t{0x69faaae4, 0x33a7}, // moverssquare\n\t{0x6a104703, 0x2569}, // SF400000\n\t{0x6a16e743, 0xfef0}, // alefmaksurafinalarabic\n\t{0x6a3d8bdc, 0x0a99}, // ngagujarati\n\t{0x6a511868, 0x03a7}, // Chi\n\t{0x6a5f0a3f, 0x334e}, // yaadosquare\n\t{0x6a721907, 0xfecc}, // ainmedialarabic\n\t{0x6a8d644d, 0x1ead}, // acircumflexdotbelow\n\t{0x6a972227, 0x0401}, // Iocyrillic\n\t{0x6a988d53, 0x2035}, // primereversed\n\t{0x6a9b2b92, 0x0414}, // afii10021\n\t{0x6aa62850, 0x0662}, // twoarabic\n\t{0x6aa82ca6, 0x3218}, // khieukhaparenkorean\n\t{0x6abb1490, 0x005d}, // bracketright\n\t{0x6ad19d29, 0xfb1f}, // doubleyodpatahhebrew\n\t{0x6b214948, 0xff6f}, // tusmallkatakanahalfwidth\n\t{0x6b2d374c, 0xfcdd}, // yehmeeminitialarabic\n\t{0x6b3f02ab, 0x211e}, // prescription\n\t{0x6b58bab9, 0x0963}, // llvocalicvowelsigndeva\n\t{0x6b83db74, 0x2295}, // circleplus\n\t{0x6b85cd6e, 0x00a4}, // currency\n\t{0x6b8b924f, 0x30d8}, // hekatakana\n\t{0x6b908b1b, 0x09e7}, // onebengali\n\t{0x6b98f18c, 0x212b}, // angstrom\n\t{0x6b9adcc4, 0x25cf}, // blackcircle\n\t{0x6b9f4fbe, 0x0940}, // iivowelsigndeva\n\t{0x6baa5ba4, 0x03ce}, // omegatonos\n\t{0x6bbd76c8, 0x0936}, // shadeva\n\t{0x6bca6ff5, 0xfe4a}, // overlinecenterline\n\t{0x6bd59d12, 0x0915}, // kadeva\n\t{0x6bd609d3, 0x00f0}, // eth\n\t{0x6be13af7, 0x2199}, // arrowdownleft\n\t{0x6bf10a81, 0x2015}, // horizontalbar\n\t{0x6c0e37b1, 0x30ce}, // nokatakana\n\t{0x6c11086e, 0x0a1c}, // jagurmukhi\n\t{0x6c180b9f, 0x0462}, // Yatcyrillic\n\t{0x6c429460, 0xfb40}, // nundageshhebrew\n\t{0x6c5c9da6, 0x0457}, // yicyrillic\n\t{0x6c781e8a, 0x25bd}, // whitedownpointingtriangle\n\t{0x6c8584d5, 0x3065}, // duhiragana\n\t{0x6c95b865, 0x0941}, // uvowelsigndeva\n\t{0x6c98a67f, 0x0479}, // ukcyrillic\n\t{0x6cbb9b7a, 0xfe5d}, // tortoiseshellbracketleftsmall\n\t{0x6cce2d3d, 0x0aa5}, // thagujarati\n\t{0x6cce7f58, 0x043b}, // elcyrillic\n\t{0x6d02864a, 0x049c}, // Kaverticalstrokecyrillic\n\t{0x6d1b554b, 0x0982}, // anusvarabengali\n\t{0x6d3fc0d7, 0x040f}, // Dzhecyrillic\n\t{0x6d519305, 0x2169}, // Tenroman\n\t{0x6d63a915, 0x02bc}, // apostrophemod\n\t{0x6d6c6ece, 0x307f}, // mihiragana\n\t{0x6d794da3, 0x0057}, // W\n\t{0x6d7a8d87, 0x00fd}, // yacute\n\t{0x6d88930b, 0x044a}, // afii10092\n\t{0x6d89653d, 0x24e8}, // ycircle\n\t{0x6d8f5cd4, 0xff95}, // yukatakanahalfwidth\n\t{0x6d931b7f, 0x255c}, // SF270000\n\t{0x6d9b9c3e, 0x05dc}, // afii57676\n\t{0x6dd186b9, 0x0575}, // yiarmenian\n\t{0x6ddcf118, 0x22a4}, // tackdown\n\t{0x6ddd69da, 0x05b1}, // hatafsegolquarterhebrew\n\t{0x6df68266, 0x0388}, // Epsilontonos\n\t{0x6df8e451, 0x2203}, // existential\n\t{0x6dfa6cea, 0x0a66}, // zerogurmukhi\n\t{0x6dff449c, 0xff79}, // kekatakanahalfwidth\n\t{0x6e002bb5, 0xfb05}, // longs_t\n\t{0x6e298b2c, 0x3380}, // paampssquare\n\t{0x6e2b4011, 0x2213}, // minusplus\n\t{0x6e2e0a97, 0xfe66}, // equalsmall\n\t{0x6e53b9b3, 0xfb00}, // ff\n\t{0x6e5f0868, 0x30ed}, // rokatakana\n\t{0x6e7cf223, 0x3071}, // pahiragana\n\t{0x6e81816d, 0x1e5d}, // rdotbelowmacron\n\t{0x6e897228, 0x0324}, // dieresisbelowcmb\n\t{0x6e8ccbbb, 0xfb48}, // reshdageshhebrew\n\t{0x6eb16a59, 0x2166}, // Sevenroman\n\t{0x6eb40b0d, 0x04db}, // schwadieresiscyrillic\n\t{0x6eba69ba, 0xfe9e}, // jeemfinalarabic\n\t{0x6ebb53ea, 0x2261}, // equivalence\n\t{0x6ecb4ba4, 0x0449}, // afii10091\n\t{0x6ecc1f68, 0x25bc}, // triagdn\n\t{0x6ed918ed, 0xfcd1}, // meemmeeminitialarabic\n\t{0x6ee27b35, 0x0321}, // hookpalatalizedbelowcmb\n\t{0x6f028e08, 0x0571}, // jaarmenian\n\t{0x6f1f2583, 0x25ce}, // bullseye\n\t{0x6f2573bb, 0x30eb}, // rukatakana\n\t{0x6f4833d3, 0x0a5c}, // rragurmukhi\n\t{0x6f57587a, 0x227b}, // succeeds\n\t{0x6f64edc9, 0x054f}, // Tiwnarmenian\n\t{0x6f6b6e30, 0x0e0e}, // dochadathai\n\t{0x6f75692f, 0x0ac8}, // aivowelsigngujarati\n\t{0x6f7744aa, 0x2196}, // arrowupleft\n\t{0x6fae2151, 0x0aef}, // ninegujarati\n\t{0x6fbeef2a, 0x044d}, // ereversedcyrillic\n\t{0x6fc01d9f, 0x00f8}, // oslash\n\t{0x702ecc19, 0x3054}, // gohiragana\n\t{0x70534c83, 0x05a4}, // mahapakhlefthebrew\n\t{0x7061d5ad, 0x255a}, // SF380000\n\t{0x707057b4, 0xfb2e}, // alefpatahhebrew\n\t{0x7070c1c4, 0x0333}, // dbllowlinecmb\n\t{0x7077f8df, 0x0163}, // tcommaaccent\n\t{0x708cf64a, 0x0944}, // rrvocalicvowelsigndeva\n\t{0x709b2bbe, 0x0056}, // V\n\t{0x70a0d365, 0xfeee}, // wawfinalarabic\n\t{0x70a7b34b, 0x05b5}, // tsere12\n\t{0x70c1bcae, 0x1ede}, // Ohornhookabove\n\t{0x70d74f05, 0x04b1}, // ustraightstrokecyrillic\n\t{0x70d8442c, 0xff3c}, // backslashmonospace\n\t{0x70e9d43c, 0x2202}, // partialdiff\n\t{0x70f78dac, 0x24b5}, // zparen\n\t{0x70f8a40d, 0x05b8}, // afii57797\n\t{0x71062567, 0xfeea}, // hehfinalalttwoarabic\n\t{0x710fbfc8, 0x0179}, // Zacute\n\t{0x712afb91, 0x310b}, // nbopomofo\n\t{0x7138408a, 0x04cc}, // chekhakassiancyrillic\n\t{0x71411a8f, 0x3156}, // yekorean\n\t{0x7154079a, 0x1e50}, // Omacrongrave\n\t{0x715a0e07, 0xfef4}, // alefmaksuramedialarabic\n\t{0x715aaa7e, 0x0122}, // Gcommaaccent\n\t{0x71693ad6, 0x0919}, // ngadeva\n\t{0x718d2f07, 0xff16}, // sixmonospace\n\t{0x71a4a95d, 0x1eaa}, // Acircumflextilde\n\t{0x71b12b2f, 0x01e0}, // Adotmacron\n\t{0x71b2c74d, 0x00b7}, // periodcentered\n\t{0x71b2e09c, 0x0e32}, // saraaathai\n\t{0x71e104c6, 0x3041}, // asmallhiragana\n\t{0x71ebf117, 0x0640}, // afii57440\n\t{0x7222af0c, 0x25cb}, // circle\n\t{0x722d9aa3, 0x2153}, // onethird\n\t{0x72446324, 0x3164}, // hangulfiller\n\t{0x7256dcb9, 0x0ac2}, // uuvowelsigngujarati\n\t{0x725da2a5, 0x0548}, // Voarmenian\n\t{0x7274464b, 0x0e31}, // maihanakatthai\n\t{0x7276cdf0, 0x02d7}, // minusmod\n\t{0x7278753d, 0x04d7}, // iebrevecyrillic\n\t{0x728cf068, 0x020f}, // oinvertedbreve\n\t{0x728f761b, 0x3111}, // qbopomofo\n\t{0x72b3c6a8, 0x00b4}, // acute\n\t{0x72ba7ff6, 0x3093}, // nhiragana\n\t{0x72c6f1c4, 0xff5c}, // barmonospace\n\t{0x72c8f209, 0x0136}, // Kcommaaccent\n\t{0x72e33f41, 0x0419}, // afii10027\n\t{0x72f1f5cf, 0x0438}, // iicyrillic\n\t{0x72fc7974, 0x2111}, // Ifraktur\n\t{0x72fd959a, 0x002a}, // asterisk\n\t{0x73032cb1, 0x3268}, // cieuccirclekorean\n\t{0x731be3b3, 0x3140}, // rieulhieuhkorean\n\t{0x73200dbd, 0x0e20}, // phosamphaothai\n\t{0x7322d42e, 0x24b9}, // Dcircle\n\t{0x73282fcd, 0x1ee3}, // ohorndotbelow\n\t{0x732cf2ca, 0x2485}, // eighteenparen\n\t{0x7338db3a, 0x066b}, // decimalseparatorarabic\n\t{0x73392eb6, 0x1ed4}, // Ocircumflexhookabove\n\t{0x733b0480, 0xfe94}, // tehmarbutafinalarabic\n\t{0x734f6c6b, 0x3090}, // wihiragana\n\t{0x7375cb46, 0x0686}, // tcheharabic\n\t{0x73843708, 0x0434}, // decyrillic\n\t{0x7387f092, 0x2088}, // eightinferior\n\t{0x73b2bbd4, 0xfe63}, // hyphensmall\n\t{0x73b70a88, 0x05d8}, // afii57672\n\t{0x73b7c451, 0x095a}, // ghhadeva\n\t{0x73c5e60b, 0x004e}, // N\n\t{0x73ee6902, 0x0965}, // dbldanda\n\t{0x73f5578c, 0x093f}, // ivowelsigndeva\n\t{0x74030714, 0x311c}, // ebopomofo\n\t{0x7411ab47, 0x00ba}, // ordmasculine\n\t{0x74144417, 0x311e}, // aibopomofo\n\t{0x74157df0, 0x0667}, // sevenhackarabic\n\t{0x741e8130, 0x00cf}, // Idieresis\n\t{0x7435abfe, 0x057c}, // raarmenian\n\t{0x743d1e25, 0x0456}, // afii10103\n\t{0x745c44bf, 0x02e3}, // xsuperior\n\t{0x746e784f, 0xff48}, // hmonospace\n\t{0x7476bb3d, 0x21d2}, // dblarrowright\n\t{0x74814589, 0x05b9}, // holam19\n\t{0x748db30c, 0x33b1}, // nssquare\n\t{0x7495de6c, 0x0008}, // controlBS\n\t{0x74a2fb64, 0x2280}, // notprecedes\n\t{0x74abeab2, 0x05ac}, // iluyhebrew\n\t{0x74b1cbfb, 0x22c5}, // dotmath\n\t{0x74caf1a5, 0x01b4}, // yhook\n\t{0x74d74b92, 0x2209}, // notelement\n\t{0x74f1fca9, 0x01db}, // Udieresisgrave\n\t{0x7506e8c8, 0x24d1}, // bcircle\n\t{0x751253a5, 0x2168}, // Nineroman\n\t{0x7544678b, 0x307d}, // pohiragana\n\t{0x754982de, 0x06a4}, // veharabic\n\t{0x755a250b, 0x09dd}, // rhabengali\n\t{0x755f707c, 0x1ebf}, // ecircumflexacute\n\t{0x75841530, 0x2002}, // enspace\n\t{0x75907eb0, 0x322c}, // ideographicwaterparen\n\t{0x759ddc3d, 0x3068}, // tohiragana\n\t{0x759f9daf, 0x00c4}, // Adieresis\n\t{0x75aa325f, 0x3047}, // esmallhiragana\n\t{0x75b73269, 0x27e9}, // angbracketrightbig\n\t{0x75b9e64d, 0xff46}, // fmonospace\n\t{0x75bf74c1, 0x0a59}, // khhagurmukhi\n\t{0x75f4d85d, 0x0a2c}, // bagurmukhi\n\t{0x7603459c, 0x094c}, // auvowelsigndeva\n\t{0x760d83de, 0x222b}, // integral\n\t{0x7612320f, 0x3273}, // pieupacirclekorean\n\t{0x76186d8e, 0x01f3}, // dz\n\t{0x7619aedc, 0xfb4c}, // betrafehebrew\n\t{0x762dd6ce, 0x2260}, // notequal\n\t{0x763e1836, 0x30c4}, // tukatakana\n\t{0x7656c681, 0x01c4}, // DZcaron\n\t{0x767695a3, 0xfed4}, // fehmedialarabic\n\t{0x76811ae6, 0x0169}, // utilde\n\t{0x7681e1d4, 0xfe9b}, // thehinitialarabic\n\t{0x76a40aac, 0x001e}, // controlRS\n\t{0x76a57fc1, 0x0117}, // edot\n\t{0x76aa35a2, 0x1e27}, // hdieresis\n\t{0x76abdb93, 0xfb41}, // samekhdageshhebrew\n\t{0x76af2566, 0x05c1}, // afii57804\n\t{0x76b279b9, 0x1e76}, // Ucircumflexbelow\n\t{0x76be5e67, 0x0389}, // Etatonos\n\t{0x76ec167e, 0x3128}, // ubopomofo\n\t{0x76ee8ef9, 0x326a}, // khieukhcirclekorean\n\t{0x76fa92ba, 0x2225}, // parallel\n\t{0x7722080a, 0x21e2}, // arrowdashright\n\t{0x772d6b37, 0x3294}, // ideographnamecircle\n\t{0x774eb078, 0x0328}, // ogonekcmb\n\t{0x774fe771, 0x064d}, // kasratanarabic\n\t{0x7752bcc4, 0x239e}, // parenrighttp\n\t{0x775a46a9, 0xffe0}, // centmonospace\n\t{0x77651620, 0x007b}, // braceleft\n\t{0x776629fd, 0x044a}, // hardsigncyrillic\n\t{0x7766a0eb, 0x041e}, // Ocyrillic\n\t{0x776cd4d6, 0x1e89}, // wdotbelow\n\t{0x77741a8d, 0x0473}, // fitacyrillic\n\t{0x7782c966, 0x1e46}, // Ndotbelow\n\t{0x7786e0a6, 0x246f}, // sixteencircle\n\t{0x779ce17f, 0x0390}, // iotadieresistonos\n\t{0x77a6f721, 0x2165}, // Sixroman\n\t{0x77aefb3f, 0x3027}, // sevenhangzhou\n\t{0x77b3e914, 0x3106}, // pbopomofo\n\t{0x77d27346, 0x0110}, // Dcroat\n\t{0x77e1d263, 0x0442}, // tecyrillic\n\t{0x77ee824a, 0xfba7}, // hehfinalaltonearabic\n\t{0x77f415ae, 0x03eb}, // gangiacoptic\n\t{0x77f608a5, 0x00ec}, // igrave\n\t{0x78151b28, 0x04f8}, // Yerudieresiscyrillic\n\t{0x781b1710, 0x3175}, // pieupsiostikeutkorean\n\t{0x782f5323, 0x2297}, // circlemultiply\n\t{0x783bb2b4, 0xfeea}, // hehfinalarabic\n\t{0x7849decd, 0x05f0}, // vavvavhebrew\n\t{0x7865471d, 0x30f8}, // vikatakana\n\t{0x7868522a, 0x0172}, // Uogonek\n\t{0x78728968, 0x0e3f}, // bahtthai\n\t{0x7877a9ea, 0x05d9}, // yodhebrew\n\t{0x7878b2f0, 0x323c}, // ideographicsuperviseparen\n\t{0x788e7d3e, 0x05b3}, // hatafqamats\n\t{0x78965447, 0x0593}, // shalshelethebrew\n\t{0x78d4db12, 0x032e}, // brevebelowcmb\n\t{0x78da6d23, 0x046e}, // Ksicyrillic\n\t{0x78f4df25, 0x04d9}, // schwacyrillic\n\t{0x79042ee6, 0x30e9}, // rakatakana\n\t{0x79116479, 0x0039}, // nine\n\t{0x7919f419, 0x0416}, // afii10024\n\t{0x792d6db9, 0x0272}, // nhookleft\n\t{0x793801c3, 0x3158}, // wakorean\n\t{0x79577113, 0x2565}, // SF480000\n\t{0x795917d1, 0x0583}, // piwrarmenian\n\t{0x79638654, 0x1ecd}, // odotbelow\n\t{0x796eb2f8, 0x3389}, // kcalsquare\n\t{0x796edb96, 0x0387}, // anoteleia\n\t{0x797aa124, 0x0445}, // khacyrillic\n\t{0x7980bc25, 0x00c5}, // Aring\n\t{0x7987b173, 0x03e8}, // Horicoptic\n\t{0x79961e28, 0x20a7}, // peseta\n\t{0x79c6a044, 0xfe3a}, // tortoiseshellbracketrightvertical\n\t{0x79d35b17, 0x3229}, // tenideographicparen\n\t{0x79dfa961, 0xfb2d}, // shindageshsindot\n\t{0x79e5e3c1, 0x0e2f}, // paiyannoithai\n\t{0x79fc5691, 0x24ce}, // Ycircle\n\t{0x7a196523, 0x0451}, // afii10071\n\t{0x7a29214e, 0x006c}, // l\n\t{0x7a32a546, 0x202d}, // afii61574\n\t{0x7a3f45e9, 0x0ab8}, // sagujarati\n\t{0x7a49bde9, 0xfca4}, // tehmeeminitialarabic\n\t{0x7a49dc21, 0xfee2}, // meemfinalarabic\n\t{0x7a56cace, 0x33a1}, // squaremsquared\n\t{0x7a6cfa6a, 0x0a3f}, // imatragurmukhi\n\t{0x7a75be4d, 0x2559}, // SF490000\n\t{0x7a8736f8, 0x320c}, // phieuphparenkorean\n\t{0x7aa071da, 0x0217}, // uinvertedbreve\n\t{0x7aa95d24, 0xfb34}, // hedageshhebrew\n\t{0x7aac463a, 0x0669}, // afii57401\n\t{0x7ab8ba14, 0x1ebe}, // Ecircumflexacute\n\t{0x7ad78099, 0x05b5}, // afii57794\n\t{0x7b074f4f, 0x062c}, // jeemarabic\n\t{0x7b0aca00, 0x3315}, // kiroguramusquare\n\t{0x7b443626, 0x3331}, // birusquare\n\t{0x7b5e0418, 0xff10}, // zeromonospace\n\t{0x7b7b9d4d, 0x0424}, // afii10038\n\t{0x7b80aee5, 0x05bb}, // qubutsquarterhebrew\n\t{0x7b8c3862, 0x02b8}, // ysuperior\n\t{0x7bac8f33, 0x0016}, // controlSYN\n\t{0x7bc269dd, 0x0040}, // at\n\t{0x7bd5ca88, 0x33ca}, // hasquare\n\t{0x7bd8b82b, 0x3005}, // ideographiciterationmark\n\t{0x7c301325, 0x0472}, // Fitacyrillic\n\t{0x7c3f4566, 0x00e7}, // ccedilla\n\t{0x7c4777ca, 0xfcc9}, // lamjeeminitialarabic\n\t{0x7c4f7ece, 0x0ab2}, // lagujarati\n\t{0x7c53c130, 0x0a13}, // oogurmukhi\n\t{0x7c613499, 0x2566}, // SF410000\n\t{0x7c8ffdc8, 0x24e7}, // xcircle\n\t{0x7c903e9b, 0x1ec7}, // ecircumflexdotbelow\n\t{0x7cb539e8, 0x096e}, // eightdeva\n\t{0x7cc006ef, 0x222c}, // dblintegral\n\t{0x7cdf3e4a, 0x0a2f}, // yagurmukhi\n\t{0x7cf2e5f4, 0x0029}, // parenright\n\t{0x7cf2ebbd, 0xff96}, // yokatakanahalfwidth\n\t{0x7cf8ce2e, 0x3394}, // thzsquare\n\t{0x7d32ca29, 0x0127}, // hbar\n\t{0x7d44a576, 0x24b1}, // vparen\n\t{0x7d4ddd33, 0x2554}, // SF390000\n\t{0x7d86a046, 0xff93}, // mokatakanahalfwidth\n\t{0x7d8bc7c0, 0x255f}, // SF370000\n\t{0x7d981506, 0x0a9f}, // ttagujarati\n\t{0x7dc79678, 0x062a}, // afii57418\n\t{0x7dc79708, 0x223c}, // tildeoperator\n\t{0x7dc7cd45, 0x33b6}, // muvsquare\n\t{0x7dcf75fb, 0x223c}, // similar\n\t{0x7dd21a95, 0x30b5}, // sakatakana\n\t{0x7dd63b6c, 0x1ec1}, // ecircumflexgrave\n\t{0x7de5edf4, 0x05b9}, // afii57806\n\t{0x7df90cb9, 0x249c}, // aparen\n\t{0x7e46df3d, 0x30d7}, // pukatakana\n\t{0x7e4f805e, 0x3067}, // dehiragana\n\t{0x7e5c9fda, 0x042f}, // IAcyrillic\n\t{0x7e701b6d, 0xff0d}, // hyphenmonospace\n\t{0x7e739224, 0x3046}, // uhiragana\n\t{0x7ebf5260, 0x0031}, // one\n\t{0x7eddac19, 0x09f4}, // onenumeratorbengali\n\t{0x7f43cdd7, 0x0ab0}, // ragujarati\n\t{0x7f56c599, 0x0141}, // Lslash\n\t{0x7f5b3579, 0x1e74}, // Utildebelow\n\t{0x7f630a55, 0x1ef9}, // ytilde\n\t{0x7f7aa31e, 0x0648}, // afii57448\n\t{0x7f82e2ff, 0x098f}, // ebengali\n\t{0x7f851974, 0x0568}, // etarmenian\n\t{0x7f92fe37, 0x066d}, // asteriskarabic\n\t{0x7f97f320, 0x301c}, // wavedash\n\t{0x7f99701f, 0xfb2a}, // shinshindothebrew\n\t{0x7fbd4335, 0x2309}, // ceilingrightbig\n\t{0x7ff2087d, 0x01df}, // adieresismacron\n\t{0x7ffdad4c, 0x326e}, // kiyeokacirclekorean\n\t{0x801f311e, 0x1ebb}, // ehookabove\n\t{0x8020003f, 0x05e9}, // shinhebrew\n\t{0x8027a085, 0x03d2}, // Upsilonhooksymbol\n\t{0x8029e67d, 0x049b}, // kadescendercyrillic\n\t{0x803a882f, 0x0a8b}, // rvocalicgujarati\n\t{0x80417827, 0x33a9}, // pasquare\n\t{0x8048e51c, 0x24e6}, // wcircle\n\t{0x80690312, 0x0155}, // racute\n\t{0x8076b638, 0xfedf}, // laminitialarabic\n\t{0x80792dfa, 0x0478}, // Ukcyrillic\n\t{0x8082c40e, 0x251c}, // SF080000\n\t{0x8086d5c5, 0x0490}, // afii10050\n\t{0x80890e42, 0x0316}, // gravebelowcmb\n\t{0x808de596, 0x2492}, // elevenperiod\n\t{0x808eef1b, 0x0068}, // h\n\t{0x80b21ab0, 0x00f5}, // otilde\n\t{0x80b54bce, 0x3170}, // mieumpansioskorean\n\t{0x80c36a57, 0x0480}, // Koppacyrillic\n\t{0x80f8e4b8, 0x017f}, // slong\n\t{0x80fb86d5, 0x00ff}, // ydieresis\n\t{0x810ea19f, 0x02bd}, // afii64937\n\t{0x810f1d5a, 0x30c6}, // tekatakana\n\t{0x812767fa, 0x0555}, // Oharmenian\n\t{0x8140027d, 0x24d3}, // dcircle\n\t{0x815134d6, 0x00cd}, // Iacute\n\t{0x81589a47, 0x2220}, // angle\n\t{0x81658581, 0x0207}, // einvertedbreve\n\t{0x816871c9, 0x1ec2}, // Ecircumflexhookabove\n\t{0x8169da43, 0x0483}, // titlocyrilliccmb\n\t{0x8170d563, 0x256b}, // SF530000\n\t{0x817f112a, 0x1e37}, // ldotbelow\n\t{0x817f9471, 0x1e92}, // Zdotbelow\n\t{0x81806da2, 0x328d}, // ideographwoodcircle\n\t{0x8184073f, 0x053b}, // Iniarmenian\n\t{0x818aac3d, 0x3165}, // ssangnieunkorean\n\t{0x81b94a51, 0x3233}, // ideographicsocietyparen\n\t{0x81e18c26, 0x30c3}, // tusmallkatakana\n\t{0x81eec5b0, 0x320e}, // kiyeokaparenkorean\n\t{0x8215ea5e, 0x02b2}, // jsuperior\n\t{0x82173176, 0x05d9}, // afii57673\n\t{0x8218cc3e, 0x039c}, // Mu\n\t{0x822cf82c, 0x3070}, // bahiragana\n\t{0x8230e7a0, 0x32a7}, // ideographicleftcircle\n\t{0x823da9d2, 0x0413}, // afii10020\n\t{0x825a2038, 0x3045}, // usmallhiragana\n\t{0x8260fa87, 0x1ea5}, // acircumflexacute\n\t{0x8272e0b5, 0x249b}, // twentyperiod\n\t{0x827d6960, 0xff40}, // gravemonospace\n\t{0x828072a0, 0x2666}, // diamond\n\t{0x8281c05a, 0x00b5}, // mu1\n\t{0x8291bd7d, 0x248e}, // sevenperiod\n\t{0x82ab3b91, 0x03a3}, // Sigma\n\t{0x82b182a5, 0x057e}, // vewarmenian\n\t{0x82b58e6a, 0x1e94}, // Zlinebelow\n\t{0x82b5e1a0, 0x266b}, // eighthnotebeamed\n\t{0x82b5fc2f, 0x05bc}, // afii57807\n\t{0x82c39f59, 0x1e62}, // Sdotbelow\n\t{0x82c3da09, 0x0a1a}, // cagurmukhi\n\t{0x82d03f46, 0x056e}, // caarmenian\n\t{0x82d4758a, 0x25e6}, // whitebullet\n\t{0x82db51c1, 0x05b6}, // segolnarrowhebrew\n\t{0x82dffbf3, 0xfe9c}, // thehmedialarabic\n\t{0x8322270c, 0x1e49}, // nlinebelow\n\t{0x832d9a03, 0x263b}, // invsmileface\n\t{0x83393d74, 0xfef7}, // lamalefhamzaaboveisolatedarabic\n\t{0x83589346, 0x1eb0}, // Abrevegrave\n\t{0x837601e2, 0x0ae7}, // onegujarati\n\t{0x8377c3f2, 0x026b}, // lmiddletilde\n\t{0x837a2830, 0x2113}, // lsquare\n\t{0x837c1552, 0x2172}, // threeroman\n\t{0x8388f2be, 0x00c9}, // Eacute\n\t{0x83a89a03, 0x045f}, // dzhecyrillic\n\t{0x83aeaef2, 0x1e23}, // hdotaccent\n\t{0x83c5c486, 0x05e7}, // afii57687\n\t{0x83cd4320, 0x0565}, // echarmenian\n\t{0x83e3c3a4, 0x3075}, // huhiragana\n\t{0x83f86a79, 0x339e}, // squarekm\n\t{0x83fc4077, 0x0037}, // seven\n\t{0x83fe9093, 0x0441}, // escyrillic\n\t{0x840c8507, 0x0313}, // commaabovecmb\n\t{0x8411d0c3, 0x1e3e}, // Macute\n\t{0x84132896, 0x0140}, // ldot\n\t{0x841d72ff, 0x02e4}, // glottalstopreversedsuperior\n\t{0x841d9ceb, 0x0572}, // ghadarmenian\n\t{0x8424a64d, 0x05b5}, // tserewidehebrew\n\t{0x843c7aca, 0x323f}, // ideographicallianceparen\n\t{0x8445bb28, 0x0905}, // adeva\n\t{0x8459e5f4, 0x2248}, // approxequal\n\t{0x84776c26, 0x329d}, // ideographicexcellentcircle\n\t{0x847d9b8a, 0x1ec5}, // ecircumflextilde\n\t{0x847ed2d4, 0x0540}, // Hoarmenian\n\t{0x8487ed37, 0x0621}, // hamzaarabic\n\t{0x848baa07, 0xfc5f}, // shaddakasratanarabic\n\t{0x8494dfda, 0x05b1}, // hatafsegol24\n\t{0x8498dbae, 0xfe86}, // wawhamzaabovefinalarabic\n\t{0x849b0297, 0x1e2e}, // Idieresisacute\n\t{0x84a67fee, 0x323a}, // ideographiccallparen\n\t{0x84b1d089, 0x0430}, // acyrillic\n\t{0x84de35f4, 0x0210}, // Rdblgrave\n\t{0x84e0b580, 0x04ef}, // umacroncyrillic\n\t{0x8501599a, 0x30f6}, // kesmallkatakana\n\t{0x85103d59, 0xfb39}, // yoddagesh\n\t{0x853a4f53, 0x217b}, // twelveroman\n\t{0x855c805d, 0xff1a}, // colonmonospace\n\t{0x856013c8, 0x248a}, // threeperiod\n\t{0x8567c154, 0x01bc}, // Tonefive\n\t{0x85a6c8bc, 0x310a}, // tbopomofo\n\t{0x85b41716, 0x201a}, // quotesinglbase\n\t{0x85b6b018, 0x2228}, // logicalor\n\t{0x85c83eb6, 0xff77}, // kikatakanahalfwidth\n\t{0x85ce16f4, 0x05da}, // afii57674\n\t{0x85e92466, 0x2282}, // propersubset\n\t{0x85ee23d7, 0x311b}, // obopomofo\n\t{0x85f325ac, 0x064c}, // dammatanaltonearabic\n\t{0x85f47ad1, 0x0660}, // zerohackarabic\n\t{0x85f89b18, 0x3049}, // osmallhiragana\n\t{0x86129c18, 0x2209}, // notelementof\n\t{0x861e8048, 0xff54}, // tmonospace\n\t{0x861ef200, 0x1e75}, // utildebelow\n\t{0x8654695b, 0x0020}, // spacehackarabic\n\t{0x865c7659, 0x0312}, // commaturnedabovecmb\n\t{0x8665f7ab, 0x201b}, // quotereversed\n\t{0x8686768e, 0x093e}, // aavowelsigndeva\n\t{0x8694e2ae, 0x3132}, // ssangkiyeokkorean\n\t{0x8699e716, 0x09ef}, // ninebengali\n\t{0x869fef4c, 0x064b}, // afii57451\n\t{0x86a662d1, 0x05e7}, // qofhebrew\n\t{0x86a80595, 0x0535}, // Echarmenian\n\t{0x86c2d4a4, 0x01ef}, // ezhcaron\n\t{0x86d0b880, 0x01c7}, // LJ\n\t{0x86d66230, 0x04ad}, // tedescendercyrillic\n\t{0x86e222a0, 0x05d9}, // yod\n\t{0x86eea6f9, 0x03a4}, // Tau\n\t{0x870315b6, 0x30e1}, // mekatakana\n\t{0x8713ac2f, 0xfb4b}, // vavholam\n\t{0x87634c8c, 0x05bd}, // siluqhebrew\n\t{0x877afbbb, 0xfb35}, // afii57723\n\t{0x877f7c7a, 0xfeb4}, // seenmedialarabic\n\t{0x8787b92b, 0x02c0}, // glottalstopmod\n\t{0x87a041c7, 0x0446}, // afii10088\n\t{0x87a4b30d, 0x263c}, // compass\n\t{0x87b6c8ba, 0x00c3}, // Atilde\n\t{0x87bb7ac5, 0x020b}, // iinvertedbreve\n\t{0x87e03b4f, 0x0642}, // afii57442\n\t{0x87e97d46, 0x04dd}, // zhedieresiscyrillic\n\t{0x87ef58ab, 0xfe30}, // twodotleadervertical\n\t{0x87fc47e5, 0x24d2}, // ccircle\n\t{0x88044bf5, 0x2167}, // Eightroman\n\t{0x880a9911, 0x1e34}, // Klinebelow\n\t{0x881905a5, 0x0e22}, // yoyakthai\n\t{0x881a4ba0, 0x0931}, // rradeva\n\t{0x88264250, 0x1e71}, // tcircumflexbelow\n\t{0x8826a561, 0x03cd}, // upsilontonos\n\t{0x883bae04, 0x248c}, // fiveperiod\n\t{0x8841d986, 0x30b8}, // zikatakana\n\t{0x8853f322, 0x339b}, // mumsquare\n\t{0x885dcb80, 0x00a7}, // section\n\t{0x886c5d13, 0x0636}, // dadarabic\n\t{0x8876a700, 0x1e98}, // wring\n\t{0x888833ba, 0x02e7}, // tonebarmidmod\n\t{0x888e1142, 0x026d}, // lhookretroflex\n\t{0x88a12621, 0x05d4}, // afii57668\n\t{0x88b6884b, 0x06f7}, // sevenpersian\n\t{0x88c2fc70, 0x0a6a}, // fourgurmukhi\n\t{0x88c96d26, 0xfb4a}, // tavdages\n\t{0x88cc32a3, 0x1ef6}, // Yhookabove\n\t{0x88da326f, 0x0546}, // Nowarmenian\n\t{0x88e4df33, 0x1e1b}, // etildebelow\n\t{0x88e6eee8, 0x3119}, // sbopomofo\n\t{0x88ea0124, 0x0949}, // ocandravowelsigndeva\n\t{0x88f38eed, 0x21d0}, // arrowdblleft\n\t{0x88f62270, 0x314f}, // akorean\n\t{0x88fdc1bb, 0x308e}, // wasmallhiragana\n\t{0x88fdcf2e, 0x039e}, // Xi\n\t{0x893a8f13, 0x09b9}, // habengali\n\t{0x89468742, 0x0e1f}, // fofanthai\n\t{0x897340ea, 0x3207}, // ieungparenkorean\n\t{0x897854cd, 0x060c}, // afii57388\n\t{0x897adc4f, 0x0128}, // Itilde\n\t{0x89aa67b7, 0x2161}, // Tworoman\n\t{0x89ace505, 0xff06}, // ampersandmonospace\n\t{0x89d8daae, 0x25c9}, // fisheye\n\t{0x89e05206, 0x0022}, // quotedbl\n\t{0x89e2c74b, 0x062d}, // afii57421\n\t{0x89ed1e17, 0x3171}, // kapyeounmieumkorean\n\t{0x89f4c981, 0x02dc}, // tilde\n\t{0x89f7042b, 0xfe38}, // bracerightvertical\n\t{0x89fc7dc4, 0x05bf}, // rafehebrew\n\t{0x8a1958e1, 0x03d1}, // theta1\n\t{0x8a27f623, 0x030e}, // dblverticallineabovecmb\n\t{0x8a36e0e0, 0x0a89}, // ugujarati\n\t{0x8a64ee32, 0x23a2}, // bracketleftex\n\t{0x8a743e71, 0x3279}, // thieuthacirclekorean\n\t{0x8a7ff438, 0x0632}, // zainarabic\n\t{0x8ab11ede, 0x0907}, // ideva\n\t{0x8ab50af4, 0xfedb}, // kafinitialarabic\n\t{0x8ac9c3df, 0x00cb}, // Edieresis\n\t{0x8ae82e18, 0x05c2}, // sindothebrew\n\t{0x8aebef01, 0x064f}, // afii57455\n\t{0x8af00e69, 0x3396}, // mlsquare\n\t{0x8af0299d, 0x2465}, // sixcircle\n\t{0x8af3a8ba, 0x1e55}, // pacute\n\t{0x8afdb385, 0x05b2}, // hatafpatahnarrowhebrew\n\t{0x8b04e879, 0x0573}, // cheharmenian\n\t{0x8b2ea84b, 0x045f}, // afii10193\n\t{0x8b336b03, 0x33c3}, // bqsquare\n\t{0x8b3d9ff3, 0x313a}, // rieulkiyeokkorean\n\t{0x8b46ba2c, 0x1e10}, // Dcedilla\n\t{0x8b5fbe71, 0x0209}, // idblgrave\n\t{0x8b6e36e5, 0x0001}, // controlSTX\n\t{0x8b91eefb, 0x0135}, // jcircumflex\n\t{0x8ba07e30, 0x3236}, // ideographicfinancialparen\n\t{0x8ba61ca6, 0x0170}, // Udblacute\n\t{0x8bb0c7c5, 0x04a4}, // Enghecyrillic\n\t{0x8bb9fe95, 0x1e35}, // klinebelow\n\t{0x8bc6e552, 0x027a}, // rlonglegturned\n\t{0x8bd60707, 0x33ce}, // squarekmcapital\n\t{0x8bdd4dfa, 0x05a1}, // pazerhebrew\n\t{0x8be0aeeb, 0x1e28}, // Hcedilla\n\t{0x8bf3f9ec, 0x0aed}, // sevengujarati\n\t{0x8bfc7ed2, 0x02e9}, // tonebarextralowmod\n\t{0x8c09cf1f, 0x0251}, // ascript\n\t{0x8c169f16, 0x0a4c}, // aumatragurmukhi\n\t{0x8c1a91ec, 0x1ed2}, // Ocircumflexgrave\n\t{0x8c21575a, 0x2175}, // sixroman\n\t{0x8c3dc32f, 0x0632}, // afii57426\n\t{0x8c5fd3c7, 0x05dd}, // afii57677\n\t{0x8c7614fd, 0x0046}, // F\n\t{0x8c789c98, 0x0255}, // ccurl\n\t{0x8c7eba77, 0x3114}, // chbopomofo\n\t{0x8c941f03, 0x0639}, // afii57433\n\t{0x8c9c3f66, 0x0e37}, // saraueethai\n\t{0x8cb6cb59, 0xfb6c}, // vehinitialarabic\n\t{0x8cbe2a76, 0x0951}, // udattadeva\n\t{0x8cc838c1, 0x099f}, // ttabengali\n\t{0x8ccab94e, 0x311d}, // ehbopomofo\n\t{0x8cd2ceac, 0x322f}, // ideographicearthparen\n\t{0x8cdd7a5e, 0xfefb}, // lamalefisolatedarabic\n\t{0x8cfeaaad, 0x04b4}, // Tetsecyrillic\n\t{0x8d0e3bcc, 0x0162}, // Tcommaaccent\n\t{0x8d15f0f9, 0x01d8}, // udieresisacute\n\t{0x8d17055f, 0xff23}, // Cmonospace\n\t{0x8d2183aa, 0x00ee}, // icircumflex\n\t{0x8d24b8c2, 0x0457}, // afii10104\n\t{0x8d262f6a, 0x33ad}, // radsquare\n\t{0x8d3bc051, 0x1eb1}, // abrevegrave\n\t{0x8d430411, 0x0288}, // tretroflexhook\n\t{0x8d4c7b99, 0x0473}, // afii10195\n\t{0x8d557bba, 0xfe98}, // tehmedialarabic\n\t{0x8d5ae6d4, 0x0440}, // ercyrillic\n\t{0x8d62c566, 0x21e0}, // arrowdashleft\n\t{0x8d7f2614, 0x2164}, // Fiveroman\n\t{0x8db3e76c, 0x1e97}, // tdieresis\n\t{0x8dbd6f57, 0xffe1}, // sterlingmonospace\n\t{0x8dc41abc, 0x1e33}, // kdotbelow\n\t{0x8de51633, 0x1ed7}, // ocircumflextilde\n\t{0x8df7afeb, 0x0968}, // twodeva\n\t{0x8e0d9fbd, 0x0337}, // solidusshortoverlaycmb\n\t{0x8e2538f6, 0x0420}, // Ercyrillic\n\t{0x8e325301, 0x0133}, // ij\n\t{0x8e3386c6, 0x0439}, // iishortcyrillic\n\t{0x8e360b54, 0x027d}, // rhook\n\t{0x8e40b292, 0x01fb}, // aringacute\n\t{0x8e467ab5, 0x1ecc}, // Odotbelow\n\t{0x8e474342, 0x1e2a}, // Hbrevebelow\n\t{0x8e5ae93f, 0x0909}, // udeva\n\t{0x8e5f575a, 0x0458}, // jecyrillic\n\t{0x8e5f7ac5, 0x01d2}, // ocaron\n\t{0x8e6f5aa1, 0x3074}, // pihiragana\n\t{0x8e757f60, 0x308a}, // rihiragana\n\t{0x8e7aa1b5, 0x207c}, // equalsuperior\n\t{0x8e8e0711, 0x042f}, // afii10049\n\t{0x8e91af6c, 0x3000}, // ideographicspace\n\t{0x8ec9ea4f, 0xfb40}, // nundagesh\n\t{0x8eca9ee8, 0x045c}, // kjecyrillic\n\t{0x8ed1765d, 0xff36}, // Vmonospace\n\t{0x8ed539a2, 0x278a}, // onecircleinversesansserif\n\t{0x8f084bdd, 0x3204}, // mieumparenkorean\n\t{0x8f19bc84, 0x0e4a}, // maitrithai\n\t{0x8f289d06, 0x0444}, // efcyrillic\n\t{0x8f28eae1, 0x013f}, // Ldotaccent\n\t{0x8f4b9c51, 0x0404}, // afii10053\n\t{0x8f505863, 0x04f2}, // Uhungarumlautcyrillic\n\t{0x8f52df2f, 0x0256}, // dtail\n\t{0x8f5e284f, 0xfed6}, // qaffinalarabic\n\t{0x8f760fbe, 0x25e5}, // blackupperrighttriangle\n\t{0x8f7f3f67, 0x0645}, // afii57445\n\t{0x8f89b56f, 0x05b8}, // qamatsqatanhebrew\n\t{0x8fa69b6c, 0x0331}, // macronbelowcmb\n\t{0x8fbba331, 0x0205}, // edblgrave\n\t{0x8fc968d8, 0x01b9}, // ezhreversed\n\t{0x8fce94ba, 0x0395}, // Epsilon\n\t{0x8fd18473, 0x2593}, // shadedark\n\t{0x8fe2c390, 0x0e53}, // threethai\n\t{0x8fe329b9, 0x266c}, // beamedsixteenthnotes\n\t{0x8fe85541, 0x0637}, // afii57431\n\t{0x8ff897b6, 0x0042}, // B\n\t{0x900e8281, 0x1e3b}, // llinebelow\n\t{0x900fb5c0, 0x0144}, // nacute\n\t{0x902443c2, 0xfe52}, // periodsmall\n\t{0x9024a760, 0x029d}, // jcrossedtail\n\t{0x90307534, 0x3059}, // suhiragana\n\t{0x9059f738, 0x00b7}, // middot\n\t{0x906746a4, 0xff75}, // okatakanahalfwidth\n\t{0x907d968c, 0x0a9b}, // chagujarati\n\t{0x90872973, 0x0538}, // Etarmenian\n\t{0x9098fbd4, 0x0002}, // controlSOT\n\t{0x90995fc1, 0x1e09}, // ccedillaacute\n\t{0x90a162b6, 0x05b4}, // hiriqwidehebrew\n\t{0x90b86ad8, 0x30dd}, // pokatakana\n\t{0x90b9c076, 0xff0f}, // slashmonospace\n\t{0x90c2be85, 0x0268}, // istroke\n\t{0x910a1b16, 0x03f1}, // rhosymbolgreek\n\t{0x9132f814, 0xff22}, // Bmonospace\n\t{0x9134ebbc, 0x01cb}, // Nj\n\t{0x913ff5ff, 0x3125}, // engbopomofo\n\t{0x9141d43c, 0x2126}, // Ohm\n\t{0x914ce494, 0x05e6}, // afii57686\n\t{0x9166eec8, 0x33ba}, // pwsquare\n\t{0x916cdeb8, 0xfed2}, // fehfinalarabic\n\t{0x917f2f3f, 0x0438}, // afii10074\n\t{0x9181b388, 0x01eb}, // oogonek\n\t{0x9184e24f, 0x30ab}, // kakatakana\n\t{0x919f5679, 0x00ca}, // Ecircumflex\n\t{0x91acc220, 0xff91}, // mukatakanahalfwidth\n\t{0x91accd4b, 0x0937}, // ssadeva\n\t{0x91c3e17e, 0x05f2}, // afii57718\n\t{0x91d99037, 0x1eb9}, // edotbelow\n\t{0x91de3939, 0x064f}, // dammalowarabic\n\t{0x91e65480, 0x0abf}, // ivowelsigngujarati\n\t{0x91eaac20, 0x3214}, // siosaparenkorean\n\t{0x920dae79, 0x039f}, // Omicron\n\t{0x9215b042, 0x3147}, // ieungkorean\n\t{0x9220d7f0, 0xff69}, // usmallkatakanahalfwidth\n\t{0x923767e3, 0x3133}, // kiyeoksioskorean\n\t{0x9239e7fb, 0x062b}, // theharabic\n\t{0x923bf3d0, 0x0330}, // tildebelowcmb\n\t{0x926b691e, 0x0100}, // Amacron\n\t{0x92aa52d3, 0x30fb}, // dotkatakana\n\t{0x92e2ffd9, 0x21e8}, // arrowrightwhite\n\t{0x92f283dc, 0x25d8}, // bulletinverse\n\t{0x92f96dbe, 0x1e56}, // Pdotaccent\n\t{0x930724f6, 0x06ba}, // noonghunnaarabic\n\t{0x930c1a0b, 0x001b}, // controlESC\n\t{0x932512ee, 0x03ea}, // Gangiacoptic\n\t{0x9330a2fc, 0x0336}, // strokelongoverlaycmb\n\t{0x934b1595, 0x062d}, // haharabic\n\t{0x93959445, 0x263a}, // smileface\n\t{0x939a56c4, 0x03ad}, // epsilontonos\n\t{0x939b5eb8, 0xfe92}, // behmedialarabic\n\t{0x93bca3b6, 0x099e}, // nyabengali\n\t{0x93e00dc4, 0x2193}, // arrowdown\n\t{0x93eef318, 0x0263}, // gammalatinsmall\n\t{0x9404d5fc, 0x33d5}, // squaremil\n\t{0x941a6b5f, 0x0a23}, // nnagurmukhi\n\t{0x941b20fa, 0xfe4b}, // overlinewavy\n\t{0x942ad1c7, 0x09be}, // aavowelsignbengali\n\t{0x9453959c, 0x24bd}, // Hcircle\n\t{0x9464bc2e, 0x1e66}, // Scarondotaccent\n\t{0x94724b66, 0x21bc}, // harpoonleftbarbup\n\t{0x94803386, 0x09d7}, // aulengthmarkbengali\n\t{0x948a9ce4, 0x05de}, // afii57678\n\t{0x949bc805, 0x01da}, // udieresiscaron\n\t{0x94ae0441, 0x0410}, // Acyrillic\n\t{0x94b7f6ea, 0x0463}, // yatcyrillic\n\t{0x94c36e74, 0x3261}, // nieuncirclekorean\n\t{0x94c9571f, 0x25ac}, // blackrectangle\n\t{0x94d13d1c, 0xfe39}, // tortoiseshellbracketleftvertical\n\t{0x94d74b96, 0x1e64}, // Sacutedotaccent\n\t{0x94e6f584, 0x3058}, // zihiragana\n\t{0x94ee5ae7, 0x2792}, // ninecircleinversesansserif\n\t{0x94f9a508, 0x3265}, // pieupcirclekorean\n\t{0x9518a20d, 0x30d9}, // bekatakana\n\t{0x951a0238, 0xfdf2}, // lamlamhehisolatedarabic\n\t{0x951ae869, 0x09dc}, // rrabengali\n\t{0x952cce64, 0x04ee}, // Umacroncyrillic\n\t{0x952ec009, 0x0988}, // iibengali\n\t{0x953a0a51, 0x2211}, // summation\n\t{0x954a8776, 0x03d1}, // thetasymbolgreek\n\t{0x95526ac8, 0x2500}, // SF100000\n\t{0x9559e176, 0x05b7}, // patah2a\n\t{0x955dbbe7, 0x23aa}, // braceex\n\t{0x957765bc, 0xfe8a}, // yehhamzaabovefinalarabic\n\t{0x958830cb, 0x2669}, // quarternote\n\t{0x9588e4f1, 0xff99}, // rukatakanahalfwidth\n\t{0x959cf6c1, 0x203b}, // referencemark\n\t{0x95af6475, 0x05e3}, // finalpehebrew\n\t{0x95aff05f, 0x03ca}, // iotadieresis\n\t{0x95b3bc07, 0xfb46}, // tsadidagesh\n\t{0x95bed968, 0x0e15}, // totaothai\n\t{0x95cabf3f, 0x21cf}, // arrowrightdblstroke\n\t{0x95d7e2f4, 0x0032}, // two\n\t{0x95ed768c, 0x05e0}, // nun\n\t{0x960140f0, 0x2496}, // fifteenperiod\n\t{0x961b2e15, 0x1e6f}, // tlinebelow\n\t{0x96220dd7, 0x318a}, // yuyeokorean\n\t{0x962b0c72, 0x3323}, // sentosquare\n\t{0x9638605a, 0x0669}, // ninearabic\n\t{0x967b01ac, 0x05b9}, // holamhebrew\n\t{0x967d0326, 0x3134}, // nieunkorean\n\t{0x96a5e022, 0x25d9}, // invcircle\n\t{0x96b677d5, 0x0153}, // oe\n\t{0x96c05d98, 0x01f2}, // Dz\n\t{0x96c1ab16, 0x247f}, // twelveparen\n\t{0x96d9cc68, 0x0427}, // Checyrillic\n\t{0x96fd8ec6, 0x1e7a}, // Umacrondieresis\n\t{0x9711eb31, 0x21aa}, // arrowhookleft\n\t{0x9741ad45, 0x05bf}, // rafe\n\t{0x975dc1dc, 0x32a5}, // ideographiccentrecircle\n\t{0x9776a4ba, 0x0007}, // controlBEL\n\t{0x977737b3, 0x0265}, // hturned\n\t{0x9778a35b, 0x0562}, // benarmenian\n\t{0x977e0dfa, 0x25d0}, // circlewithlefthalfblack\n\t{0x97843a2e, 0x09f8}, // denominatorminusonenumeratorbengali\n\t{0x978c8c89, 0x03ac}, // alphatonos\n\t{0x97ae16ea, 0x23a1}, // bracketlefttp\n\t{0x97b3e7db, 0x24c3}, // Ncircle\n\t{0x97e45478, 0x05b6}, // segol2c\n\t{0x97ea0cb5, 0x04d8}, // Schwacyrillic\n\t{0x97ebb44e, 0x015f}, // scedilla\n\t{0x97f03f9c, 0x0419}, // Iishortcyrillic\n\t{0x97f6721e, 0x05bf}, // afii57841\n\t{0x980e76a2, 0x1e32}, // Kdotbelow\n\t{0x98148d7b, 0xff14}, // fourmonospace\n\t{0x981fc90b, 0x0a1b}, // chagurmukhi\n\t{0x982585a7, 0x260e}, // telephoneblack\n\t{0x982718e0, 0x003c}, // less\n\t{0x982eb09a, 0x0e5b}, // khomutthai\n\t{0x9853033e, 0x04b5}, // tetsecyrillic\n\t{0x987e6d13, 0x0411}, // Becyrillic\n\t{0x9896e370, 0x0402}, // afii10051\n\t{0x98b02dc0, 0x0a48}, // aimatragurmukhi\n\t{0x98d74b1c, 0x01c8}, // Lj\n\t{0x98d9aba5, 0x03ae}, // etatonos\n\t{0x98eba766, 0x018b}, // Dtopbar\n\t{0x98f4783f, 0x24ac}, // qparen\n\t{0x98f4b751, 0x0651}, // afii57457\n\t{0x99104281, 0x02e5}, // tonebarextrahighmod\n\t{0x99235205, 0x05dc}, // lamedhebrew\n\t{0x994ebac3, 0x05c0}, // afii57842\n\t{0x99725844, 0x0320}, // minusbelowcmb\n\t{0x9982855c, 0x0686}, // afii57507\n\t{0x99830dc7, 0x062c}, // afii57420\n\t{0x99863852, 0x03ed}, // shimacoptic\n\t{0x99997c4f, 0x3314}, // kirosquare\n\t{0x999c619c, 0x3078}, // hehiragana\n\t{0x999f4db4, 0x05b4}, // afii57793\n\t{0x99cca883, 0xff04}, // dollarmonospace\n\t{0x99e63f81, 0x0962}, // lvocalicvowelsigndeva\n\t{0x9a069ea3, 0x2267}, // greateroverequal\n\t{0x9a098276, 0xfea2}, // hahfinalarabic\n\t{0x9a157ece, 0x246a}, // elevencircle\n\t{0x9a1c929d, 0x043c}, // afii10078\n\t{0x9a310f17, 0xff51}, // qmonospace\n\t{0x9a3391f5, 0x0190}, // Eopen\n\t{0x9a464a33, 0x0174}, // Wcircumflex\n\t{0x9a50ec2e, 0x05b6}, // segolquarterhebrew\n\t{0x9a7aab21, 0x05c3}, // sofpasuqhebrew\n\t{0x9ac6c137, 0x0e0f}, // topatakthai\n\t{0x9aea680b, 0x3029}, // ninehangzhou\n\t{0x9af6d63b, 0x054a}, // Peharmenian\n\t{0x9b09b61d, 0x0a10}, // aigurmukhi\n\t{0x9b0db21d, 0x0402}, // Djecyrillic\n\t{0x9b100042, 0x0e21}, // momathai\n\t{0x9b29e68e, 0x0278}, // philatin\n\t{0x9b3ff954, 0x0e56}, // sixthai\n\t{0x9b5a3eb3, 0x0626}, // afii57414\n\t{0x9b712e01, 0x1eba}, // Ehookabove\n\t{0x9b73811a, 0x2227}, // logicaland\n\t{0x9b76648b, 0x041f}, // afii10033\n\t{0x9b7712b3, 0x1e5a}, // Rdotbelow\n\t{0x9b8591a5, 0x30ca}, // nakatakana\n\t{0x9b950b60, 0x095e}, // fadeva\n\t{0x9ba02025, 0x01e9}, // kcaron\n\t{0x9bca0720, 0x1e93}, // zdotbelow\n\t{0x9bcccde6, 0x0e4e}, // yamakkanthai\n\t{0x9bd59a36, 0x300e}, // whitecornerbracketleft\n\t{0x9bdb98a4, 0x1e5e}, // Rlinebelow\n\t{0x9be54046, 0x0e0a}, // chochangthai\n\t{0x9bfe067d, 0x0405}, // Dzecyrillic\n\t{0x9c14c866, 0x0484}, // palatalizationcyrilliccmb\n\t{0x9c1ff986, 0x05f1}, // afii57717\n\t{0x9c30e64e, 0x0121}, // gdot\n\t{0x9c3d076c, 0x002d}, // hyphen\n\t{0x9c5df589, 0x03b2}, // beta\n\t{0x9c5e488c, 0x05d3}, // dalethebrew\n\t{0x9c743ddb, 0x3239}, // ideographicrepresentparen\n\t{0x9cc9b890, 0x2a00}, // circledottext\n\t{0x9cd2074a, 0x0a36}, // shagurmukhi\n\t{0x9ce0dacf, 0xfebb}, // sadinitialarabic\n\t{0x9ce3d2fe, 0x06d2}, // afii57519\n\t{0x9ce9cdfc, 0x0408}, // Jecyrillic\n\t{0x9ce9f027, 0x0426}, // Tsecyrillic\n\t{0x9cf54095, 0x20aa}, // newsheqelsign\n\t{0x9d1b1141, 0x25d8}, // invbullet\n\t{0x9d1ed2c0, 0x0120}, // Gdotaccent\n\t{0x9d25f804, 0x0294}, // glottalstop\n\t{0x9d3a5187, 0x03bb}, // lambda\n\t{0x9d4507ca, 0x00a0}, // nonbreakingspace\n\t{0x9d4ea24d, 0x045a}, // njecyrillic\n\t{0x9d5ba323, 0x3145}, // sioskorean\n\t{0x9d5eb9a4, 0x001f}, // controlUS\n\t{0x9d662219, 0x332a}, // haitusquare\n\t{0x9d760ad7, 0x3318}, // guramusquare\n\t{0x9d770652, 0x1e2b}, // hbrevebelow\n\t{0x9db9ebc8, 0x30ba}, // zukatakana\n\t{0x9dee7277, 0x2015}, // afii00208\n\t{0x9df531bb, 0x059b}, // tevirhebrew\n\t{0x9e021469, 0x22cf}, // curlyand\n\t{0x9e062707, 0x02a2}, // glottalstopstrokereversed\n\t{0x9e0bf218, 0x02b1}, // hhooksuperior\n\t{0x9e0d1458, 0x02c4}, // arrowheadupmod\n\t{0x9e1247f8, 0x0033}, // three\n\t{0x9e248728, 0x3053}, // kohiragana\n\t{0x9e2d5a68, 0x053f}, // Kenarmenian\n\t{0x9e5de325, 0x222e}, // contourintegral\n\t{0x9e65e800, 0x248b}, // fourperiod\n\t{0x9e98d52c, 0x2483}, // sixteenparen\n\t{0x9ea14168, 0x05b7}, // patahquarterhebrew\n\t{0x9ea23fe1, 0x00f1}, // ntilde\n\t{0x9eac193b, 0x00ef}, // idieresis\n\t{0x9eb5aea3, 0x3142}, // pieupkorean\n\t{0x9ebea1a0, 0x3150}, // aekorean\n\t{0x9ee7bbd1, 0x094b}, // ovowelsigndeva\n\t{0x9eedaba9, 0x0113}, // emacron\n\t{0x9f023815, 0x20ac}, // euro\n\t{0x9f30fc87, 0xfec2}, // tahfinalarabic\n\t{0x9f37894c, 0x040e}, // afii10062\n\t{0x9f53036c, 0x0a19}, // ngagurmukhi\n\t{0x9f65cf71, 0x1e25}, // hdotbelow\n\t{0x9f69147e, 0x1e61}, // sdotaccent\n\t{0x9f6f9105, 0x0433}, // gecyrillic\n\t{0x9f739695, 0x04f9}, // yerudieresiscyrillic\n\t{0x9f79f6eb, 0xfb33}, // daletdageshhebrew\n\t{0x9f8cff14, 0x003e}, // greater\n\t{0x9f94b2e4, 0x04a1}, // kabashkircyrillic\n\t{0x9fa5f7ad, 0x0e49}, // maithothai\n\t{0x9fc7ffac, 0x05b4}, // hiriqhebrew\n\t{0x9fd406b1, 0xfed8}, // qafmedialarabic\n\t{0x9fd7c50e, 0x05bb}, // afii57796\n\t{0x9fdfc7a1, 0x00b0}, // degree\n\t{0x9ffeaad9, 0x01ed}, // oogonekmacron\n\t{0xa0144bc6, 0xfc8d}, // noonnoonfinalarabic\n\t{0xa0166e3d, 0x3159}, // waekorean\n\t{0xa016fb2d, 0x016b}, // umacron\n\t{0xa0286aa8, 0x1e04}, // Bdotbelow\n\t{0xa03db58b, 0x02d2}, // ringhalfrightcentered\n\t{0xa05ccf71, 0x05e1}, // samekhhebrew\n\t{0xa069fd2d, 0x012b}, // imacron\n\t{0xa08ca5a7, 0x2491}, // tenperiod\n\t{0xa0a317f9, 0x0574}, // menarmenian\n\t{0xa0c2ffe3, 0x247a}, // sevenparen\n\t{0xa0e40fac, 0x337b}, // heiseierasquare\n\t{0xa0e487b8, 0x33cd}, // KKsquare\n\t{0xa0ee672b, 0x3143}, // ssangpieupkorean\n\t{0xa100bc11, 0x043e}, // ocyrillic\n\t{0xa10462a8, 0x0394}, // Deltagreek\n\t{0xa11f6f39, 0x0071}, // q\n\t{0xa12507ea, 0x2177}, // eightroman\n\t{0xa12d2230, 0x05b5}, // tsere2b\n\t{0xa134a191, 0xff11}, // onemonospace\n\t{0xa14f5367, 0x05b0}, // sheva15\n\t{0xa157c7c6, 0x0643}, // kafarabic\n\t{0xa15811a3, 0x061f}, // questionarabic\n\t{0xa1697005, 0x0015}, // controlNAK\n\t{0xa16fa8a4, 0x22a3}, // tackleft\n\t{0xa1703e0a, 0x3219}, // thieuthaparenkorean\n\t{0xa1850262, 0x05c2}, // afii57803\n\t{0xa1a14a63, 0x1eb8}, // Edotbelow\n\t{0xa1ed89db, 0x0202}, // Ainvertedbreve\n\t{0xa20cadbf, 0x0062}, // b\n\t{0xa20ea9da, 0x24aa}, // oparen\n\t{0xa212ed2d, 0x0e38}, // sarauthai\n\t{0xa2448aa1, 0x01e6}, // Gcaron\n\t{0xa2543878, 0x326f}, // nieunacirclekorean\n\t{0xa254ebdd, 0xfb3e}, // memdagesh\n\t{0xa259bfe7, 0xff19}, // ninemonospace\n\t{0xa262edc1, 0xfe49}, // overlinedashed\n\t{0xa26bc10f, 0x061b}, // semicolonarabic\n\t{0xa27876ee, 0xfe35}, // parenleftvertical\n\t{0xa28a5f58, 0xfec8}, // zahmedialarabic\n\t{0xa28ba8ac, 0x317d}, // siospieupkorean\n\t{0xa2972ad9, 0x2305}, // projective\n\t{0xa2be0dd9, 0x062b}, // afii57419\n\t{0xa2c2120e, 0x0e52}, // twothai\n\t{0xa2d967e3, 0x2083}, // threeinferior\n\t{0xa2e1fb7a, 0x221e}, // infinity\n\t{0xa2f62d95, 0x306e}, // nohiragana\n\t{0xa3004c6f, 0x092e}, // madeva\n\t{0xa316ccc6, 0x2044}, // fraction\n\t{0xa32a4538, 0xfb1f}, // afii57705\n\t{0xa334b2d1, 0x043d}, // afii10079\n\t{0xa34b5d2f, 0x0e57}, // seventhai\n\t{0xa36dbdee, 0x30db}, // hokatakana\n\t{0xa386d6fe, 0x3327}, // tonsquare\n\t{0xa3903917, 0x3270}, // tikeutacirclekorean\n\t{0xa39b2570, 0xfefc}, // lamaleffinalarabic\n\t{0xa3b51a89, 0x0597}, // reviamugrashhebrew\n\t{0xa3cc74fa, 0x3056}, // zahiragana\n\t{0xa3d9a90d, 0x0499}, // zedescendercyrillic\n\t{0xa3e95215, 0xfef9}, // lamalefhamzabelowisolatedarabic\n\t{0xa3ec709c, 0x0569}, // toarmenian\n\t{0xa3fbf1d9, 0x0497}, // zhedescendercyrillic\n\t{0xa3fe88d1, 0x0104}, // Aogonek\n\t{0xa40369ed, 0x32a9}, // ideographicmedicinecircle\n\t{0xa4259ac9, 0xff76}, // kakatakanahalfwidth\n\t{0xa43cdc2e, 0xfb44}, // pedageshhebrew\n\t{0xa446d45f, 0x3224}, // fiveideographicparen\n\t{0xa450f946, 0x0454}, // afii10101\n\t{0xa456f11e, 0x09e8}, // twobengali\n\t{0xa457c062, 0x30ad}, // kikatakana\n\t{0xa45b3183, 0x0aeb}, // fivegujarati\n\t{0xa45b7f21, 0x010e}, // Dcaron\n\t{0xa4627c0f, 0x0204}, // Edblgrave\n\t{0xa478f921, 0x09e0}, // rrvocalicbengali\n\t{0xa4863185, 0x30f4}, // vukatakana\n\t{0xa4922e7c, 0x0341}, // acutetonecmb\n\t{0xa4aa1092, 0x05b1}, // hatafsegol30\n\t{0xa4aa8935, 0xff58}, // xmonospace\n\t{0xa4af8f73, 0x2282}, // subset\n\t{0xa4decb10, 0x0a72}, // irigurmukhi\n\t{0xa50a3a99, 0x0630}, // afii57424\n\t{0xa50cf621, 0xff7e}, // sekatakanahalfwidth\n\t{0xa512e58d, 0xff83}, // tekatakanahalfwidth\n\t{0xa517b724, 0xfee6}, // noonfinalarabic\n\t{0xa52168e0, 0x2325}, // option\n\t{0xa54253fb, 0x05e7}, // qof\n\t{0xa545c2a6, 0xfb2a}, // afii57694\n\t{0xa553cf3e, 0x003b}, // semicolon\n\t{0xa56dfce7, 0x0e03}, // khokhuatthai\n\t{0xa58382dd, 0x0137}, // kcedilla\n\t{0xa5b93826, 0x2555}, // SF220000\n\t{0xa5ecbdaa, 0x03b5}, // epsilon\n\t{0xa6056425, 0x05b8}, // qamatswidehebrew\n\t{0xa60745ee, 0x2250}, // approaches\n\t{0xa6281f81, 0x0142}, // lslash\n\t{0xa62afc92, 0x0534}, // Daarmenian\n\t{0xa6454b66, 0x2498}, // seventeenperiod\n\t{0xa64723d6, 0x30af}, // kukatakana\n\t{0xa6522894, 0x24da}, // kcircle\n\t{0xa652cff2, 0x24a8}, // mparen\n\t{0xa65ca284, 0x314d}, // phieuphkorean\n\t{0xa65ea7b9, 0x00ab}, // guillemotleft\n\t{0xa6644796, 0xfc94}, // yehnoonfinalarabic\n\t{0xa66b3ab3, 0x00b8}, // cedilla\n\t{0xa675e0d6, 0x0156}, // Rcommaaccent\n\t{0xa683217b, 0x0ab7}, // ssagujarati\n\t{0xa6a017fd, 0x0415}, // Iecyrillic\n\t{0xa6ae34a8, 0x3028}, // eighthangzhou\n\t{0xa6b19efc, 0x0591}, // etnahtafoukhhebrew\n\t{0xa6b46028, 0xff72}, // ikatakanahalfwidth\n\t{0xa6bd2b95, 0x1e6b}, // tdotaccent\n\t{0xa6c10839, 0x0431}, // becyrillic\n\t{0xa6e68e9f, 0x0966}, // zerodeva\n\t{0xa6f16c03, 0x03c2}, // sigma1\n\t{0xa6f2df0d, 0x0a32}, // lagurmukhi\n\t{0xa716a470, 0x2464}, // fivecircle\n\t{0xa71dfe13, 0x1ea2}, // Ahookabove\n\t{0xa73026ce, 0x007a}, // z\n\t{0xa73199c0, 0x05bb}, // qubutshebrew\n\t{0xa731e944, 0x0411}, // afii10018\n\t{0xa7320cb3, 0x3139}, // rieulkorean\n\t{0xa74014fc, 0x003f}, // question\n\t{0xa745be27, 0x2308}, // ceilingleftbig\n\t{0xa74cd67a, 0x025f}, // jdotlessstroke\n\t{0xa756caf5, 0x04d2}, // Adieresiscyrillic\n\t{0xa7769b7a, 0x22c1}, // logicalortext\n\t{0xa7895d88, 0x252c}, // SF060000\n\t{0xa796d5bb, 0x0267}, // henghook\n\t{0xa7bff3d5, 0x032c}, // caronbelowcmb\n\t{0xa7dcd836, 0xfb68}, // ttehinitialarabic\n\t{0xa7e01c26, 0x01a7}, // Tonetwo\n\t{0xa7e7d702, 0x05b8}, // qamats1a\n\t{0xa7edca33, 0x25b7}, // whiterightpointingtriangle\n\t{0xa7fb6ee6, 0x226f}, // notgreater\n\t{0xa7fe97d8, 0x3166}, // nieuntikeutkorean\n\t{0xa815fa8a, 0x309e}, // voicediterationhiragana\n\t{0xa819fe3e, 0x315e}, // wekorean\n\t{0xa81ee743, 0x0542}, // Ghadarmenian\n\t{0xa826b713, 0xfeb6}, // sheenfinalarabic\n\t{0xa842618b, 0x025b}, // eopen\n\t{0xa84fdde5, 0x0340}, // gravetonecmb\n\t{0xa851c76f, 0x05a5}, // merkhahebrew\n\t{0xa8547bdd, 0x0455}, // afii10102\n\t{0xa8665e8d, 0x05b1}, // afii57801\n\t{0xa877e561, 0x2642}, // male\n\t{0xa8982f3b, 0x09b2}, // labengali\n\t{0xa8a24959, 0x00d0}, // Eth\n\t{0xa8b6c7f5, 0x0a2e}, // magurmukhi\n\t{0xa8b7f35e, 0x06c1}, // haaltonearabic\n\t{0xa8bb13d5, 0x0a70}, // tippigurmukhi\n\t{0xa8ccc65c, 0x3316}, // kiromeetorusquare\n\t{0xa8db2b93, 0x017e}, // zcaron\n\t{0xa93204a5, 0x03a6}, // Phi\n\t{0xa9350b3f, 0x20a1}, // colonmonetary\n\t{0xa93a2a4f, 0x1e47}, // ndotbelow\n\t{0xa94e0303, 0x33ab}, // mpasquare\n\t{0xa94eeaee, 0x01aa}, // eshreversedloop\n\t{0xa95e2711, 0x1e21}, // gmacron\n\t{0xa96cef91, 0x3169}, // rieulkiyeoksioskorean\n\t{0xa981562d, 0x0668}, // eightarabic\n\t{0xa98e771c, 0x0634}, // sheenarabic\n\t{0xa9985803, 0x30dc}, // bokatakana\n\t{0xa99c94c2, 0x01be}, // glottalinvertedstroke\n\t{0xa9a0932f, 0x2077}, // sevensuperior\n\t{0xa9af18f2, 0x30b4}, // gokatakana\n\t{0xa9c0b182, 0x2264}, // lessequal\n\t{0xaa13efde, 0x007d}, // braceright\n\t{0xaa4e278b, 0x0967}, // onedeva\n\t{0xaa51d75f, 0x2476}, // threeparen\n\t{0xaa69d0f1, 0x256c}, // SF440000\n\t{0xaa863ce3, 0x0629}, // tehmarbutaarabic\n\t{0xaa8c5eeb, 0x03e5}, // feicoptic\n\t{0xaa96b9dc, 0x0665}, // fivearabic\n\t{0xaaabcf5c, 0x04b9}, // cheverticalstrokecyrillic\n\t{0xaab6b9a5, 0x0211}, // rdblgrave\n\t{0xaabfed05, 0xff85}, // nakatakanahalfwidth\n\t{0xaac3a76a, 0x0559}, // ringhalfleftarmenian\n\t{0xaac3adf0, 0x3121}, // oubopomofo\n\t{0xaacaffc4, 0x2162}, // Threeroman\n\t{0xaad54f7c, 0x3002}, // ideographicperiod\n\t{0xaaf6eb21, 0x01ce}, // acaron\n\t{0xab0b499a, 0x099c}, // jabengali\n\t{0xab126f69, 0x5344}, // twentyhangzhou\n\t{0xab1f1bb7, 0x05df}, // afii57679\n\t{0xab24577f, 0x0667}, // sevenarabic\n\t{0xab2b4200, 0x2105}, // careof\n\t{0xab3b4b27, 0x24e2}, // scircle\n\t{0xab808d1e, 0x2087}, // seveninferior\n\t{0xab8a6656, 0x01d0}, // icaron\n\t{0xaba55a59, 0xfb32}, // gimeldageshhebrew\n\t{0xabb7eb8f, 0x2081}, // oneinferior\n\t{0xabd373e8, 0x055e}, // questionarmenian\n\t{0xac05d874, 0x1e84}, // Wdieresis\n\t{0xac259f58, 0x0448}, // afii10090\n\t{0xac2c323e, 0x0191}, // Fhook\n\t{0xac32a034, 0x316f}, // mieumsioskorean\n\t{0xac483cb3, 0x338c}, // mufsquare\n\t{0xac4f1094, 0x059c}, // gereshaccenthebrew\n\t{0xac50a082, 0x33a3}, // mmcubedsquare\n\t{0xac5faca7, 0x230b}, // floorrightbig\n\t{0xac67aca2, 0x045b}, // tshecyrillic\n\t{0xacb92bab, 0x0691}, // rreharabic\n\t{0xacd00f05, 0x21c6}, // arrowleftoverright\n\t{0xacd11e18, 0x2010}, // hyphentwo\n\t{0xace7d07a, 0x0921}, // ddadeva\n\t{0xacfcbdb9, 0x3042}, // ahiragana\n\t{0xad01f787, 0xff1d}, // equalmonospace\n\t{0xad1b58f9, 0x0595}, // zaqefgadolhebrew\n\t{0xad29738f, 0x05f4}, // gershayimhebrew\n\t{0xad33f4b3, 0x04c1}, // Zhebrevecyrillic\n\t{0xad37f8e0, 0x0a24}, // tagurmukhi\n\t{0xad38bc31, 0x2194}, // arrowboth\n\t{0xad5fe438, 0x0924}, // tadeva\n\t{0xad781e89, 0x200c}, // afii61664\n\t{0xad8ff38a, 0x0a21}, // ddagurmukhi\n\t{0xadb1b19e, 0x0206}, // Einvertedbreve\n\t{0xadb53f6b, 0xfbaf}, // yehbarreefinalarabic\n\t{0xadbea3e4, 0x20aa}, // afii57636\n\t{0xadc3ff5e, 0x0649}, // afii57449\n\t{0xadf402a9, 0x0989}, // ubengali\n\t{0xadf4d422, 0x0625}, // alefhamzabelowarabic\n\t{0xae04e5ad, 0x0a15}, // kagurmukhi\n\t{0xae1f7b0a, 0x2076}, // sixsuperior\n\t{0xae23dd7b, 0x1eaf}, // abreveacute\n\t{0xae30147f, 0x0908}, // iideva\n\t{0xae56317c, 0x24ae}, // sparen\n\t{0xae6f7e74, 0x031b}, // horncmb\n\t{0xae7c975f, 0x249a}, // nineteenperiod\n\t{0xae8f4e4c, 0x0406}, // afii10055\n\t{0xaeb06274, 0x0423}, // Ucyrillic\n\t{0xaec173e8, 0x03b8}, // theta\n\t{0xaee16fb6, 0xfe4f}, // underscorewavy\n\t{0xaef4b475, 0x1edf}, // ohornhookabove\n\t{0xaef8393d, 0x0664}, // fourarabic\n\t{0xaf01f370, 0x278e}, // fivecircleinversesansserif\n\t{0xaf2073fd, 0x2103}, // centigrade\n\t{0xaf3552ce, 0x3072}, // hihiragana\n\t{0xaf36c6b1, 0x30cd}, // nekatakana\n\t{0xaf4df0df, 0xfc0e}, // tehmeemisolatedarabic\n\t{0xaf5710c9, 0x00c0}, // Agrave\n\t{0xaf5b123d, 0x032d}, // circumflexbelowcmb\n\t{0xaf5ce08f, 0x00e0}, // agrave\n\t{0xaf788850, 0x00fc}, // udieresis\n\t{0xaf7abcb1, 0x05b9}, // holam\n\t{0xaf8a8524, 0x0455}, // dzecyrillic\n\t{0xafa14924, 0x33d3}, // lxsquare\n\t{0xafaa365c, 0x30be}, // zokatakana\n\t{0xafb28009, 0x03e2}, // Sheicoptic\n\t{0xafb8e89a, 0x0a68}, // twogurmukhi\n\t{0xafbbfcac, 0xff71}, // akatakanahalfwidth\n\t{0xafbd0738, 0x305d}, // sohiragana\n\t{0xafc9b657, 0x0e17}, // thothahanthai\n\t{0xb000150a, 0xfe96}, // tehfinalarabic\n\t{0xb01f8020, 0x0666}, // sixarabic\n\t{0xb026a3ef, 0x30b3}, // kokatakana\n\t{0xb0309f24, 0xfee3}, // meeminitialarabic\n\t{0xb032be97, 0x047b}, // omegaroundcyrillic\n\t{0xb033a837, 0x0079}, // y\n\t{0xb03640f2, 0x2252}, // approxequalorimage\n\t{0xb0522c01, 0x278f}, // sixcircleinversesansserif\n\t{0xb0791aaf, 0x09f3}, // rupeesignbengali\n\t{0xb0a20aff, 0x22db}, // greaterequalorless\n\t{0xb0c33454, 0x028a}, // upsilonlatin\n\t{0xb0efaba6, 0x0a97}, // gagujarati\n\t{0xb107bdf6, 0x304b}, // kahiragana\n\t{0xb1240d86, 0x0474}, // afii10148\n\t{0xb145d406, 0x327b}, // hieuhacirclekorean\n\t{0xb169c9ac, 0x1eed}, // uhornhookabove\n\t{0xb1722e49, 0x3006}, // ideographicclose\n\t{0xb199f9f3, 0x314a}, // chieuchkorean\n\t{0xb1a83745, 0x246e}, // fifteencircle\n\t{0xb1a9eaa4, 0x1eb7}, // abrevedotbelow\n\t{0xb1b08c26, 0x2020}, // dagger\n\t{0xb1b2e578, 0xff13}, // threemonospace\n\t{0xb1c3eac2, 0x1e8c}, // Xdieresis\n\t{0xb1e18633, 0x0e2d}, // oangthai\n\t{0xb1eda93c, 0x09e2}, // lvocalicvowelsignbengali\n\t{0xb1fa6226, 0x0a9a}, // cagujarati\n\t{0xb225a8bc, 0x0947}, // evowelsigndeva\n\t{0xb243894e, 0x21d1}, // arrowdblup\n\t{0xb25639c1, 0x2534}, // SF070000\n\t{0xb2566e08, 0x064d}, // afii57453\n\t{0xb256786e, 0x03f2}, // sigmalunatesymbolgreek\n\t{0xb25b34dc, 0x0e1a}, // bobaimaithai\n\t{0xb26943db, 0x0420}, // afii10034\n\t{0xb27e91f4, 0x01bb}, // twostroke\n\t{0xb27fe618, 0xfb03}, // f_f_i\n\t{0xb290d64a, 0xfe88}, // alefhamzabelowfinalarabic\n\t{0xb2bbd0d4, 0xfeb0}, // zainfinalarabic\n\t{0xb2cc02c2, 0x1e38}, // Ldotbelowmacron\n\t{0xb2d79f3e, 0x00f9}, // ugrave\n\t{0xb2d7f27b, 0x0652}, // afii57458\n\t{0xb2d95c63, 0x2518}, // SF040000\n\t{0xb2f3aff0, 0x0946}, // eshortvowelsigndeva\n\t{0xb3178333, 0x00da}, // Uacute\n\t{0xb321fe9c, 0x21e3}, // arrowdashdown\n\t{0xb3329e90, 0x313e}, // rieulthieuthkorean\n\t{0xb33c41bc, 0x018c}, // dtopbar\n\t{0xb340e2fe, 0x04a5}, // enghecyrillic\n\t{0xb341da2f, 0x1e36}, // Ldotbelow\n\t{0xb345c512, 0xfea4}, // hahmedialarabic\n\t{0xb369c9bd, 0x2423}, // blank\n\t{0xb36f3f4e, 0x054d}, // Seharmenian\n\t{0xb3880287, 0x05d6}, // zayinhebrew\n\t{0xb38b59bc, 0x0ac0}, // iivowelsigngujarati\n\t{0xb3a3592e, 0x21e5}, // arrowtabright\n\t{0xb3dbcf55, 0x323d}, // ideographicenterpriseparen\n\t{0xb3e6b497, 0x03c9}, // omega\n\t{0xb3ed41be, 0x328f}, // ideographearthcircle\n\t{0xb3f4ae6c, 0x1e9e}, // germandblS\n\t{0xb40169ac, 0x05b0}, // sheva22\n\t{0xb405e3e3, 0x0439}, // afii10075\n\t{0xb41baecc, 0x2487}, // twentyparen\n\t{0xb427632e, 0x05b3}, // hatafqamats1b\n\t{0xb4344c30, 0x090f}, // edeva\n\t{0xb43bb55a, 0x3263}, // rieulcirclekorean\n\t{0xb448d464, 0x0391}, // Alpha\n\t{0xb457e11d, 0xfb00}, // f_f\n\t{0xb45a5763, 0x201b}, // quoteleftreversed\n\t{0xb45ef9b7, 0x03c0}, // pi\n\t{0xb497903a, 0x01dd}, // eturned\n\t{0xb4a55071, 0x1e7d}, // vtilde\n\t{0xb4a6b289, 0x2235}, // because\n\t{0xb4a7f99d, 0x0954}, // acutedeva\n\t{0xb4a9d27d, 0x05d2}, // afii57666\n\t{0xb4c0dc86, 0x0e48}, // maiekthai\n\t{0xb4c2484c, 0x05dc}, // lamed\n\t{0xb4c667bc, 0xff61}, // periodhalfwidth\n\t{0xb4c72b2a, 0x0215}, // udblgrave\n\t{0xb4e21f31, 0x2198}, // arrowdownright\n\t{0xb500deca, 0x1e41}, // mdotaccent\n\t{0xb510d684, 0x1e80}, // Wgrave\n\t{0xb526b685, 0x22bf}, // righttriangle\n\t{0xb52e7c1d, 0x091e}, // nyadeva\n\t{0xb53ca7e2, 0x326c}, // phieuphcirclekorean\n\t{0xb58e59d7, 0x24ad}, // rparen\n\t{0xb5af274f, 0x064a}, // afii57450\n\t{0xb5b94593, 0x010d}, // ccaron\n\t{0xb5c458a3, 0x05b8}, // qamatsqatanwidehebrew\n\t{0xb5f24e31, 0xff5a}, // zmonospace\n\t{0xb600bed1, 0x3024}, // fourhangzhou\n\t{0xb6052cdb, 0x010b}, // cdotaccent\n\t{0xb61c54b4, 0x24e4}, // ucircle\n\t{0xb64312f2, 0x00a2}, // cent\n\t{0xb6443d26, 0x0622}, // afii57410\n\t{0xb647ed9e, 0x01d7}, // Udieresisacute\n\t{0xb652184e, 0x0e4b}, // maichattawathai\n\t{0xb6588f1c, 0x247c}, // nineparen\n\t{0xb66bf9b9, 0x33dc}, // svsquare\n\t{0xb673fbb5, 0x038e}, // Upsilontonos\n\t{0xb67e35c8, 0x0121}, // gdotaccent\n\t{0xb6bb2a6b, 0x0116}, // Edot\n\t{0xb6d45c54, 0xff7a}, // kokatakanahalfwidth\n\t{0xb6f322b3, 0x05e5}, // afii57685\n\t{0xb6f9554e, 0x3205}, // pieupparenkorean\n\t{0xb6f9c67c, 0x0464}, // Eiotifiedcyrillic\n\t{0xb6fea9e7, 0xff3f}, // underscoremonospace\n\t{0xb70f3f60, 0xff4e}, // nmonospace\n\t{0xb711b601, 0x039d}, // Nu\n\t{0xb719922a, 0x067e}, // afii57506\n\t{0xb71d84e2, 0x3167}, // nieunsioskorean\n\t{0xb726c42e, 0xfb49}, // shindageshhebrew\n\t{0xb72e5846, 0x1edb}, // ohornacute\n\t{0xb73606f5, 0x0463}, // afii10194\n\t{0xb7400632, 0x33aa}, // kpasquare\n\t{0xb747ebc8, 0x2310}, // revlogicalnot\n\t{0xb755a24e, 0x310e}, // kbopomofo\n\t{0xb7934eea, 0x01c5}, // Dzcaron\n\t{0xb7affc1f, 0x0418}, // afii10026\n\t{0xb7b78fdd, 0x2463}, // fourcircle\n\t{0xb7bd89d3, 0x0491}, // gheupturncyrillic\n\t{0xb7d20c6c, 0x215c}, // threeeighths\n\t{0xb7e9bb2b, 0x30fe}, // voicediterationkatakana\n\t{0xb80991a9, 0x04d6}, // Iebrevecyrillic\n\t{0xb81d8e8c, 0xfb31}, // betdagesh\n\t{0xb855cda8, 0x3397}, // dlsquare\n\t{0xb85a6427, 0x0650}, // kasraarabic\n\t{0xb8632720, 0x0e07}, // ngonguthai\n\t{0xb879d78f, 0xfe32}, // endashvertical\n\t{0xb894f4d6, 0x01a0}, // Ohorn\n\t{0xb8972176, 0x04bb}, // shhacyrillic\n\t{0xb89948ac, 0x0a93}, // ogujarati\n\t{0xb8be7e03, 0x2039}, // guilsinglleft\n\t{0xb8fa96e6, 0x0110}, // Dslash\n\t{0xb8ff412c, 0xfef8}, // lamalefhamzaabovefinalarabic\n\t{0xb902d285, 0x053a}, // Zhearmenian\n\t{0xb90dcf8c, 0xff6a}, // esmallkatakanahalfwidth\n\t{0xb910864a, 0x2032}, // minute\n\t{0xb921c241, 0xfeca}, // ainfinalarabic\n\t{0xb92ccc5d, 0x2469}, // tencircle\n\t{0xb9305b2b, 0x3174}, // pieupsioskiyeokkorean\n\t{0xb96268cb, 0x00de}, // Thorn\n\t{0xb9808b18, 0x09c1}, // uvowelsignbengali\n\t{0xb9927e88, 0x3382}, // muasquare\n\t{0xb99f8f9e, 0xfeeb}, // hehinitialarabic\n\t{0xb9b2e314, 0x0498}, // Zedescendercyrillic\n\t{0xb9b4563d, 0x24b3}, // xparen\n\t{0xb9c5eece, 0x05bc}, // dageshhebrew\n\t{0xb9d8b5d9, 0xfba4}, // hehhamzaaboveisolatedarabic\n\t{0xb9dbedd2, 0x317b}, // siosnieunkorean\n\t{0xb9e5ea71, 0x314c}, // thieuthkorean\n\t{0xb9e8b13e, 0x25a0}, // filledbox\n\t{0xb9f42560, 0x0964}, // danda\n\t{0xb9f5b462, 0x0990}, // aibengali\n\t{0xba1bcecd, 0x0176}, // Ycircumflex\n\t{0xba1f80d6, 0x21e1}, // arrowdashup\n\t{0xba21ad27, 0xfb3a}, // finalkafdagesh\n\t{0xba4eb5f9, 0x0055}, // U\n\t{0xba544632, 0x05db}, // afii57675\n\t{0xba5871eb, 0x033e}, // tildeverticalcmb\n\t{0xba60a3b8, 0x0902}, // anusvaradeva\n\t{0xba7e1049, 0x01d9}, // Udieresiscaron\n\t{0xba8d69d2, 0x232a}, // angleright\n\t{0xbaa24d97, 0x05e0}, // afii57680\n\t{0xbaa7aa4c, 0xfedc}, // kafmedialarabic\n\t{0xbac7de75, 0x1ed3}, // ocircumflexgrave\n\t{0xbad44ddc, 0x004f}, // O\n\t{0xbad7d685, 0x04b8}, // Cheverticalstrokecyrillic\n\t{0xbad97612, 0x03af}, // iotatonos\n\t{0xbadf80e2, 0x06f5}, // fivepersian\n\t{0xbafeb301, 0x0422}, // Tecyrillic\n\t{0xbb28e2ea, 0x1eb2}, // Abrevehookabove\n\t{0xbb30f37e, 0x0218}, // Scommaaccent\n\t{0xbb6353b2, 0x0332}, // lowlinecmb\n\t{0xbb72d76e, 0x0139}, // Lacute\n\t{0xbb906e01, 0x3266}, // sioscirclekorean\n\t{0xbb970588, 0x266f}, // musicsharpsign\n\t{0xbba252f7, 0x0106}, // Cacute\n\t{0xbbae7b40, 0x3172}, // pieupkiyeokkorean\n\t{0xbbb9d0f4, 0x0934}, // llladeva\n\t{0xbbd8677b, 0x330d}, // karoriisquare\n\t{0xbbdbcb55, 0x0a6f}, // ninegurmukhi\n\t{0xbbdc86be, 0xfb2b}, // shinsindot\n\t{0xbc0d2781, 0x0a1f}, // ttagurmukhi\n\t{0xbc1b1166, 0x2558}, // SF500000\n\t{0xbc280da2, 0x1e79}, // utildeacute\n\t{0xbc3510eb, 0x317f}, // pansioskorean\n\t{0xbc45cf9a, 0x02a4}, // dezh\n\t{0xbc75336c, 0x21a9}, // arrowhookright\n\t{0xbc78e14f, 0x24b0}, // uparen\n\t{0xbcd2c61b, 0x064c}, // dammatanarabic\n\t{0xbd0f6f71, 0x004c}, // L\n\t{0xbd1a9441, 0x3235}, // ideographicspecialparen\n\t{0xbd1abdb6, 0x0184}, // Tonesix\n\t{0xbd2d2e5f, 0x054e}, // Vewarmenian\n\t{0xbd30ce0c, 0x2641}, // earth\n\t{0xbd4d0860, 0x320a}, // khieukhparenkorean\n\t{0xbd54bd2d, 0x3208}, // cieucparenkorean\n\t{0xbd569183, 0x0182}, // Btopbar\n\t{0xbd5dbcc1, 0x0151}, // odblacute\n\t{0xbd5ee257, 0x01b7}, // Ezh\n\t{0xbd85b57b, 0x21a8}, // arrowupdownbase\n\t{0xbd8f8d24, 0x064b}, // fathatanarabic\n\t{0xbd906fab, 0x041f}, // Pecyrillic\n\t{0xbd98b80f, 0x25c8}, // whitediamondcontainingblacksmalldiamond\n\t{0xbdc1280a, 0x24be}, // Icircle\n\t{0xbdd372da, 0x318b}, // yuyekorean\n\t{0xbde8281d, 0x3276}, // cieucacirclekorean\n\t{0xbe3e45cf, 0xfb58}, // pehinitialarabic\n\t{0xbe663ca6, 0x2470}, // seventeencircle\n\t{0xbe7a58ae, 0x3203}, // rieulparenkorean\n\t{0xbea937fd, 0x25bc}, // blackdownpointingtriangle\n\t{0xbec6916e, 0x011c}, // Gcircumflex\n\t{0xbedd6640, 0x00d9}, // Ugrave\n\t{0xbf12496a, 0x0985}, // abengali\n\t{0xbf156070, 0x04e2}, // Imacroncyrillic\n\t{0xbf26dc61, 0x041d}, // Encyrillic\n\t{0xbf2dca30, 0x3082}, // mohiragana\n\t{0xbf3cff90, 0x0425}, // afii10039\n\t{0xbf5cef43, 0x01ee}, // Ezhcaron\n\t{0xbf673175, 0x01fd}, // aeacute\n\t{0xbf87a284, 0x00bf}, // questiondown\n\t{0xbf897387, 0x2273}, // greaterorequivalent\n\t{0xbf8f3598, 0x25a6}, // squareorthogonalcrosshatchfill\n\t{0xbf934ed3, 0x04e0}, // Dzeabkhasiancyrillic\n\t{0xbf97194e, 0x010a}, // Cdot\n\t{0xbf9bc7bd, 0xfb59}, // pehmedialarabic\n\t{0xbf9c1926, 0x0627}, // alefarabic\n\t{0xbfc69ab7, 0xff18}, // eightmonospace\n\t{0xbfd3ede4, 0x0396}, // Zeta\n\t{0xbffa52a3, 0x33c7}, // cosquare\n\t{0xc006a810, 0x062a}, // teharabic\n\t{0xc008508a, 0xff1c}, // lessmonospace\n\t{0xc00a3b07, 0x24bc}, // Gcircle\n\t{0xc0126352, 0x0661}, // onearabic\n\t{0xc03e102c, 0x3012}, // postalmark\n\t{0xc059a094, 0x0626}, // yehhamzaabovearabic\n\t{0xc0668ba8, 0x202e}, // afii61575\n\t{0xc07e7e42, 0x24a6}, // kparen\n\t{0xc084bd84, 0x1e29}, // hcedilla\n\t{0xc092fb91, 0x1e95}, // zlinebelow\n\t{0xc09823db, 0x016f}, // uring\n\t{0xc09889a1, 0x1e11}, // dcedilla\n\t{0xc0a2bc69, 0x2564}, // SF470000\n\t{0xc0a93f4f, 0x0e2c}, // lochulathai\n\t{0xc0bd9f90, 0x094a}, // oshortvowelsigndeva\n\t{0xc0c043bd, 0x3008}, // anglebracketleft\n\t{0xc0c1496c, 0x029e}, // kturned\n\t{0xc0cbe66a, 0x33b7}, // mvsquare\n\t{0xc0d444a4, 0x3220}, // oneideographicparen\n\t{0xc0dcb90f, 0x062e}, // khaharabic\n\t{0xc0efe98c, 0x2191}, // arrowup\n\t{0xc0fb3832, 0x25ab}, // H18551\n\t{0xc131664b, 0x30e4}, // yakatakana\n\t{0xc1425417, 0x317a}, // sioskiyeokkorean\n\t{0xc1641f79, 0xfe4d}, // lowlinedashed\n\t{0xc1835ca2, 0x02d3}, // ringhalfleftcentered\n\t{0xc191ae65, 0x0470}, // Psicyrillic\n\t{0xc1aa3399, 0x2a06}, // unionsqtext\n\t{0xc1c1cd87, 0xff2e}, // Nmonospace\n\t{0xc1d325d6, 0x05d8}, // tet\n\t{0xc1e02cdd, 0x0594}, // zaqefqatanhebrew\n\t{0xc1e3fd2d, 0x05d5}, // vav\n\t{0xc1e4c743, 0x3057}, // sihiragana\n\t{0xc1ec1451, 0x03c3}, // sigma\n\t{0xc1f9ede7, 0x05a3}, // munahhebrew\n\t{0xc2089a04, 0x05b7}, // patah1d\n\t{0xc21675c5, 0x0317}, // acutebelowcmb\n\t{0xc21e92b6, 0x2265}, // greaterequal\n\t{0xc2352e98, 0x0554}, // Keharmenian\n\t{0xc25217c2, 0xfeff}, // zerowidthjoiner\n\t{0xc25a58a0, 0x0a28}, // nagurmukhi\n\t{0xc25a7d39, 0x2663}, // club\n\t{0xc2658d7c, 0x3395}, // mulsquare\n\t{0xc26d6fce, 0x20a9}, // won\n\t{0xc283f2c3, 0x03bc}, // mugreek\n\t{0xc29c269a, 0x326d}, // hieuhcirclekorean\n\t{0xc2c391b3, 0x25b2}, // triagup\n\t{0xc2d0d165, 0x0137}, // kcommaaccent\n\t{0xc2db7e0f, 0x04a0}, // Kabashkircyrillic\n\t{0xc327f9ff, 0x239b}, // parenlefttp\n\t{0xc32ea721, 0x061f}, // afii57407\n\t{0xc36634d0, 0x09f9}, // sixteencurrencydenominatorbengali\n\t{0xc3722d19, 0x23ad}, // bracerightbt\n\t{0xc3751bae, 0x25ab}, // whitesmallsquare\n\t{0xc375a046, 0x05b0}, // shevahebrew\n\t{0xc391e9a8, 0xfe50}, // commasmall\n\t{0xc3c94bba, 0x306a}, // nahiragana\n\t{0xc3d9dd70, 0xfe43}, // whitecornerbracketleftvertical\n\t{0xc3df4586, 0x0903}, // visargadeva\n\t{0xc3eb9abd, 0x02c6}, // circumflex\n\t{0xc3edb597, 0x24bb}, // Fcircle\n\t{0xc3f1c1ff, 0x00e3}, // atilde\n\t{0xc3f76044, 0xff7c}, // sikatakanahalfwidth\n\t{0xc3f8f5bb, 0x04e3}, // imacroncyrillic\n\t{0xc3fbb2ce, 0x025e}, // eopenreversedclosed\n\t{0xc4004762, 0x328a}, // ideographmooncircle\n\t{0xc4289b41, 0x25a5}, // squareverticalfill\n\t{0xc43e9d0c, 0x1e26}, // Hdieresis\n\t{0xc4494fb1, 0x098b}, // rvocalicbengali\n\t{0xc459127a, 0x2174}, // fiveroman\n\t{0xc460226d, 0xfb34}, // hedagesh\n\t{0xc4607843, 0x25ca}, // lozenge\n\t{0xc4991f6f, 0x03d0}, // betasymbolgreek\n\t{0xc49bedba, 0x1e22}, // Hdotaccent\n\t{0xc4bd396f, 0xff98}, // rikatakanahalfwidth\n\t{0xc4cf0400, 0x0ac3}, // rvocalicvowelsigngujarati\n\t{0xc4d48fb7, 0x0a06}, // aagurmukhi\n\t{0xc510ccfb, 0x0327}, // cedillacmb\n\t{0xc51e03d1, 0x0e2a}, // sosuathai\n\t{0xc5233a99, 0xff41}, // amonospace\n\t{0xc52d9608, 0x0409}, // afii10058\n\t{0xc541abe3, 0x0409}, // Ljecyrillic\n\t{0xc560e83e, 0x1e4c}, // Otildeacute\n\t{0xc575fbd8, 0x3303}, // aarusquare\n\t{0xc577ce75, 0xff5d}, // bracerightmonospace\n\t{0xc579feb1, 0x03bf}, // omicron\n\t{0xc5904240, 0x1ee9}, // uhornacute\n\t{0xc594a84a, 0x0a85}, // agujarati\n\t{0xc5a57fbd, 0x0178}, // Ydieresis\n\t{0xc5b52809, 0x25ac}, // filledrect\n\t{0xc5c558c0, 0x2593}, // dkshade\n\t{0xc5df0b88, 0x0aae}, // magujarati\n\t{0xc5e2935b, 0x30bf}, // takatakana\n\t{0xc616ce34, 0x1e83}, // wacute\n\t{0xc618c356, 0x005f}, // underscore\n\t{0xc6231f67, 0x3117}, // zbopomofo\n\t{0xc62d494f, 0x042b}, // afii10045\n\t{0xc65b9029, 0x0012}, // controlDC2\n\t{0xc65e4473, 0x0300}, // gravecomb\n\t{0xc6649ea6, 0x263b}, // blacksmilingface\n\t{0xc6730a47, 0x3230}, // ideographicsunparen\n\t{0xc6a18663, 0x2173}, // fourroman\n\t{0xc6a33bcf, 0x23a4}, // bracketrighttp\n\t{0xc6bb9cde, 0x03c1}, // rho\n\t{0xc6c2ca67, 0x0537}, // Eharmenian\n\t{0xc6db1db1, 0x0a94}, // augujarati\n\t{0xc6ddc5a6, 0x0334}, // tildeoverlaycmb\n\t{0xc6e9fa39, 0x064a}, // yeharabic\n\t{0xc6fbfdac, 0x025a}, // schwahook\n\t{0xc703d8e7, 0x33b8}, // kvsquare\n\t{0xc71e49b3, 0x23a5}, // bracketrightex\n\t{0xc74688aa, 0x24dc}, // mcircle\n\t{0xc74a8cc7, 0x05b5}, // tserequarterhebrew\n\t{0xc74f4c99, 0x0298}, // bilabialclick\n\t{0xc7515b37, 0x0132}, // IJ\n\t{0xc755c80f, 0xff67}, // asmallkatakanahalfwidth\n\t{0xc75bc6a7, 0x01e8}, // Kcaron\n\t{0xc7618f62, 0x05b3}, // hatafqamats28\n\t{0xc76816e4, 0x0566}, // zaarmenian\n\t{0xc76c439e, 0x0115}, // ebreve\n\t{0xc76ec8b2, 0x0e1c}, // phophungthai\n\t{0xc77c2828, 0x2206}, // Delta\n\t{0xc786ef31, 0x095b}, // zadeva\n\t{0xc78887c7, 0x1e08}, // Ccedillaacute\n\t{0xc78fe323, 0x0698}, // afii57508\n\t{0xc798936b, 0xfc73}, // tehnoonfinalarabic\n\t{0xc7b3573a, 0x1e2f}, // idieresisacute\n\t{0xc7daee30, 0x09b7}, // ssabengali\n\t{0xc7e20869, 0x0aee}, // eightgujarati\n\t{0xc7ed01af, 0x33a5}, // mcubedsquare\n\t{0xc7f07bcf, 0x248f}, // eightperiod\n\t{0xc7f0b4c8, 0x0406}, // Icyrillic\n\t{0xc7fb5fe5, 0x05b2}, // afii57800\n\t{0xc812d1b7, 0x041b}, // afii10029\n\t{0xc82c0a32, 0x026f}, // mturned\n\t{0xc834804d, 0x2475}, // twoparen\n\t{0xc8488aa4, 0x05b0}, // shevawidehebrew\n\t{0xc84db89c, 0x2013}, // endash\n\t{0xc85fce80, 0x0901}, // candrabindudeva\n\t{0xc86d3a57, 0xff31}, // Qmonospace\n\t{0xc875e6fd, 0x040c}, // afii10061\n\t{0xc88f7d57, 0x05b3}, // hatafqamatsnarrowhebrew\n\t{0xc89d4f1f, 0x0006}, // controlACK\n\t{0xc8ae6fb2, 0x0e26}, // luthai\n\t{0xc8b50d48, 0x21d4}, // dblarrowleft\n\t{0xc8c2c42c, 0x0162}, // Tcedilla\n\t{0xc8c687a4, 0xfb4b}, // vavholamhebrew\n\t{0xc8cf912e, 0xfe59}, // parenleftsmall\n\t{0xc8fcce82, 0x0424}, // Efcyrillic\n\t{0xc8fdfe4b, 0x0914}, // audeva\n\t{0xc9315b90, 0x0338}, // soliduslongoverlaycmb\n\t{0xc93304ec, 0x2176}, // sevenroman\n\t{0xc9366418, 0x1e7e}, // Vdotbelow\n\t{0xc948d9f2, 0x01fe}, // Oslashacute\n\t{0xc948dd49, 0x0417}, // Zecyrillic\n\t{0xc94ac55a, 0xfb4e}, // perafehebrew\n\t{0xc94ceb7c, 0x1eca}, // Idotbelow\n\t{0xc956ff7e, 0x1e7b}, // umacrondieresis\n\t{0xc997284d, 0x03d3}, // Upsilonacutehooksymbolgreek\n\t{0xc997d626, 0xfe3d}, // dblanglebracketleftvertical\n\t{0xc9d02325, 0x2283}, // propersuperset\n\t{0xc9d7e9b6, 0x064c}, // afii57452\n\t{0xc9d96803, 0x3278}, // khieukhacirclekorean\n\t{0xc9e8cf5f, 0xfebf}, // dadinitialarabic\n\t{0xc9ea8b89, 0x305b}, // sehiragana\n\t{0xc9eb1227, 0x321c}, // cieucuparenkorean\n\t{0xca07e9ca, 0x02dd}, // hungarumlaut\n\t{0xca0b3331, 0x1e5f}, // rlinebelow\n\t{0xca2dd9fa, 0x2590}, // rtblock\n\t{0xca5ed753, 0x0269}, // iotalatin\n\t{0xca65e972, 0x0646}, // noonarabic\n\t{0xca9389a5, 0xa75b}, // roundr\n\t{0xcab40374, 0x1e1f}, // fdotaccent\n\t{0xcabe62a6, 0x0e16}, // thothungthai\n\t{0xcac3bcb6, 0x33a8}, // moverssquaredsquare\n\t{0xcac4b1a9, 0x32a8}, // ideographicrightcircle\n\t{0xcad1f345, 0x01bd}, // tonefive\n\t{0xcae44cee, 0x0013}, // controlDC3\n\t{0xcaf66d1c, 0x33b4}, // pvsquare\n\t{0xcb1a38a0, 0x226b}, // muchgreater\n\t{0xcb1b6c03, 0x0a5e}, // fagurmukhi\n\t{0xcb1e3324, 0x042d}, // afii10047\n\t{0xcb267db3, 0x3221}, // twoideographicparen\n\t{0xcb281438, 0x33ae}, // radoverssquare\n\t{0xcb2edf2d, 0x220f}, // product\n\t{0xcb4fc444, 0x03f0}, // kappasymbolgreek\n\t{0xcb56efb7, 0x015c}, // Scircumflex\n\t{0xcb5b537a, 0x0412}, // afii10019\n\t{0xcb669b9c, 0x1ee2}, // Ohorndotbelow\n\t{0xcb72660a, 0xff1e}, // greatermonospace\n\t{0xcb75245d, 0x1e48}, // Nlinebelow\n\t{0xcb88e590, 0x013c}, // lcedilla\n\t{0xcb8bc7f1, 0x002b}, // plus\n\t{0xcbada403, 0x0429}, // Shchacyrillic\n\t{0xcc11d7b0, 0x000c}, // controlFF\n\t{0xcc261604, 0x04a2}, // Endescendercyrillic\n\t{0xcc3139de, 0x33d1}, // squareln\n\t{0xcc3accb9, 0x05d8}, // tethebrew\n\t{0xcc3b7b5c, 0x0649}, // alefmaksuraarabic\n\t{0xcc447b1d, 0x0296}, // glottalstopinverted\n\t{0xcc8c13e9, 0x25c0}, // blackleftpointingtriangle\n\t{0xcc993e5c, 0x025c}, // eopenreversed\n\t{0xcca8fd16, 0x09e3}, // llvocalicvowelsignbengali\n\t{0xccaa74e1, 0xfb7d}, // tchehmedialarabic\n\t{0xccac0ec6, 0x300b}, // dblanglebracketright\n\t{0xccc389ea, 0xfb30}, // alefdageshhebrew\n\t{0xccc85a27, 0x0a81}, // candrabindugujarati\n\t{0xcd07b41d, 0x05bc}, // dagesh\n\t{0xcd30953c, 0x203c}, // exclamdbl\n\t{0xcd37d58c, 0x24e3}, // tcircle\n\t{0xcd415c99, 0x0e55}, // fivethai\n\t{0xcd499038, 0x33a2}, // kmsquaredsquare\n\t{0xcd54eec2, 0x06f4}, // fourpersian\n\t{0xcd5fb77d, 0x0185}, // tonesix\n\t{0xcd64e087, 0x266b}, // musicalnotedbl\n\t{0xcd75d5eb, 0x2551}, // SF240000\n\t{0xcd7ce3d0, 0x24a7}, // lparen\n\t{0xcd85d846, 0x1eec}, // Uhornhookabove\n\t{0xcd9d27ad, 0x24c7}, // Rcircle\n\t{0xcd9f5a2c, 0x0028}, // parenleft\n\t{0xcda0c667, 0x2018}, // quoteleft\n\t{0xcdae6ea2, 0xff59}, // ymonospace\n\t{0xcdbb64f4, 0x2105}, // afii61248\n\t{0xcdd2cfab, 0x24b4}, // yparen\n\t{0xcdd44c7f, 0x33a4}, // cmcubedsquare\n\t{0xcde56fe0, 0x05b6}, // segol\n\t{0xcdea4ff0, 0x03d4}, // Upsilondieresishooksymbolgreek\n\t{0xcdf0bcd8, 0x0e1e}, // phophanthai\n\t{0xcdfd40ec, 0x0180}, // bstroke\n\t{0xce074882, 0x0668}, // afii57400\n\t{0xce4d2d1e, 0x2563}, // SF230000\n\t{0xce6d06c6, 0x0aab}, // phagujarati\n\t{0xce6f0d59, 0x3272}, // mieumacirclekorean\n\t{0xce79a056, 0x3339}, // herutusquare\n\t{0xce8dac39, 0x25a8}, // squareupperrighttolowerleftfill\n\t{0xce942ad9, 0x09a6}, // dabengali\n\t{0xcea39f20, 0x02d5}, // downtackmod\n\t{0xcedf2a68, 0x0157}, // rcedilla\n\t{0xcee9759d, 0x043a}, // afii10076\n\t{0xcef01870, 0x0171}, // udblacute\n\t{0xcef10e83, 0x046a}, // Yusbigcyrillic\n\t{0xcef67881, 0x200c}, // zerowidthnonjoiner\n\t{0xcf235874, 0x030c}, // caroncmb\n\t{0xcf4c6b71, 0x02d4}, // uptackmod\n\t{0xcf6550b0, 0xfb4a}, // tavdageshhebrew\n\t{0xcf6a5e7c, 0x323e}, // ideographicresourceparen\n\t{0xcf738908, 0x011d}, // gcircumflex\n\t{0xcf848334, 0x0453}, // afii10100\n\t{0xcf8cbf6b, 0x0195}, // hv\n\t{0xcf9b96b5, 0x03bd}, // nu\n\t{0xcfb1da5d, 0xff89}, // nokatakanahalfwidth\n\t{0xcfc386a6, 0x00db}, // Ucircumflex\n\t{0xcfc400d6, 0x06d2}, // yehbarreearabic\n\t{0xcfd8a703, 0xfe61}, // asterisksmall\n\t{0xcfe519cb, 0x309b}, // voicedmarkkana\n\t{0xcfe64e44, 0x0668}, // eighthackarabic\n\t{0xcff88b7d, 0x05b8}, // qamatsqatannarrowhebrew\n\t{0xd0096386, 0x25b3}, // whiteuppointingtriangle\n\t{0xd0227bd1, 0x0199}, // khook\n\t{0xd02a9cfe, 0x0105}, // aogonek\n\t{0xd031b297, 0x24e9}, // zcircle\n\t{0xd03ef2b0, 0x316b}, // rieulpieupsioskorean\n\t{0xd0417b9a, 0x0494}, // Ghemiddlehookcyrillic\n\t{0xd044dddd, 0x0a9d}, // jhagujarati\n\t{0xd04ad0f0, 0x263c}, // sun\n\t{0xd04cc01e, 0x0561}, // aybarmenian\n\t{0xd0511b87, 0x0e4c}, // thanthakhatthai\n\t{0xd056aca3, 0xff9a}, // rekatakanahalfwidth\n\t{0xd06b6bb7, 0x096a}, // fourdeva\n\t{0xd07a803b, 0x09aa}, // pabengali\n\t{0xd0847e20, 0x05c4}, // upperdothebrew\n\t{0xd087e60f, 0x0158}, // Rcaron\n\t{0xd0897bb6, 0x0579}, // chaarmenian\n\t{0xd0c5df61, 0x05b4}, // hiriq14\n\t{0xd0ce4edc, 0x09e9}, // threebengali\n\t{0xd0d6e6c0, 0xff6c}, // yasmallkatakanahalfwidth\n\t{0xd0e3648a, 0xfd3e}, // parenleftaltonearabic\n\t{0xd133ff70, 0x01a1}, // ohorn\n\t{0xd1373ca2, 0x0648}, // wawarabic\n\t{0xd13d9bf5, 0xfe37}, // braceleftvertical\n\t{0xd13faec5, 0x05e1}, // samekh\n\t{0xd14fc185, 0x045b}, // afii10108\n\t{0xd17987dd, 0x0543}, // Cheharmenian\n\t{0xd18447d8, 0x0663}, // threearabic\n\t{0xd18966b1, 0x0a82}, // anusvaragujarati\n\t{0xd18d83de, 0x0aa3}, // nnagujarati\n\t{0xd190d310, 0x0a35}, // vagurmukhi\n\t{0xd191827c, 0x0e39}, // sarauuthai\n\t{0xd1acdf44, 0xfb94}, // gafinitialarabic\n\t{0xd1d7231f, 0x04bc}, // Cheabkhasiancyrillic\n\t{0xd1d9da71, 0x30ea}, // rikatakana\n\t{0xd2337241, 0x05b6}, // segol1f\n\t{0xd247ef8b, 0x3243}, // ideographicreachparen\n\t{0xd254c368, 0x0443}, // ucyrillic\n\t{0xd2658bcb, 0x05b9}, // holamquarterhebrew\n\t{0xd26b0e16, 0x2321}, // integralbt\n\t{0xd26ef570, 0x310f}, // hbopomofo\n\t{0xd293868c, 0x019b}, // lambdastroke\n\t{0xd297cb79, 0x30b7}, // sikatakana\n\t{0xd2b4c516, 0x30da}, // pekatakana\n\t{0xd2c0e1bc, 0x0150}, // Odblacute\n\t{0xd2cbfc99, 0x05b7}, // patahhebrew\n\t{0xd2e2a716, 0x03ec}, // Shimacoptic\n\t{0xd2eaddf5, 0x0633}, // seenarabic\n\t{0xd2f253f5, 0xfe40}, // anglebracketrightvertical\n\t{0xd2f3cdf3, 0x1e0e}, // Dlinebelow\n\t{0xd304784a, 0x05d3}, // dalet\n\t{0xd308b167, 0x1e5b}, // rdotbelow\n\t{0xd310fcc1, 0x04e9}, // obarredcyrillic\n\t{0xd3145153, 0xfeec}, // hehmedialarabic\n\t{0xd326ec6d, 0x2237}, // proportion\n\t{0xd3342503, 0x30bd}, // sokatakana\n\t{0xd33cb244, 0x02cd}, // macronlowmod\n\t{0xd35ba6fb, 0x04be}, // Chedescenderabkhasiancyrillic\n\t{0xd3730282, 0xff64}, // ideographiccommaleft\n\t{0xd3797e0f, 0x24db}, // lcircle\n\t{0xd37b4bcb, 0x041c}, // afii10030\n\t{0xd3a5ba29, 0x062e}, // afii57422\n\t{0xd3c22da1, 0x01b5}, // Zstroke\n\t{0xd3c6a66e, 0x05e4}, // pe\n\t{0xd3cfef4c, 0x0427}, // afii10041\n\t{0xd3e84c23, 0x201c}, // quotedblleft\n\t{0xd421361f, 0x067e}, // peharabic\n\t{0xd4273f62, 0x30fd}, // iterationkatakana\n\t{0xd44f2d4c, 0xff9b}, // rokatakanahalfwidth\n\t{0xd45c6c89, 0x3079}, // behiragana\n\t{0xd467b0a3, 0x0131}, // dotlessi\n\t{0xd48c064b, 0x0599}, // pashtahebrew\n\t{0xd48dad4d, 0x01e2}, // AEmacron\n\t{0xd4b2bb68, 0x0145}, // Ncedilla\n\t{0xd4d3eb56, 0x255e}, // SF360000\n\t{0xd4e86e58, 0x1ef7}, // yhookabove\n\t{0xd4e92fa8, 0x0623}, // alefhamzaabovearabic\n\t{0xd514a0e0, 0x318c}, // yuikorean\n\t{0xd5189135, 0x1e73}, // udieresisbelow\n\t{0xd52f1d8f, 0x24cb}, // Vcircle\n\t{0xd54b71bd, 0x0a6e}, // eightgurmukhi\n\t{0xd574af4c, 0x318e}, // araeaekorean\n\t{0xd57a206a, 0x00f2}, // ograve\n\t{0xd58ee561, 0x04f3}, // uhungarumlautcyrillic\n\t{0xd5b6f4bf, 0x3163}, // ikorean\n\t{0xd5b7a706, 0x1e13}, // dcircumflexbelow\n\t{0xd5da03ab, 0x0123}, // gcommaaccent\n\t{0xd5dc1f0e, 0x24a5}, // jparen\n\t{0xd5e6a2b4, 0x200f}, // afii300\n\t{0xd6067104, 0x05bd}, // siluqlefthebrew\n\t{0xd6180af1, 0x0023}, // numbersign\n\t{0xd6191adc, 0x02ce}, // gravelowmod\n\t{0xd6480a61, 0x0e46}, // maiyamokthai\n\t{0xd65815d1, 0x04f5}, // chedieresiscyrillic\n\t{0xd6674587, 0xfea8}, // khahmedialarabic\n\t{0xd66f3b98, 0x1ebd}, // etilde\n\t{0xd67d357f, 0x0e23}, // roruathai\n\t{0xd67dc19d, 0x1e05}, // bdotbelow\n\t{0xd682be7e, 0xfe54}, // semicolonsmall\n\t{0xd689f58d, 0x0024}, // dollar\n\t{0xd68be98a, 0xff8f}, // makatakanahalfwidth\n\t{0xd6a99b0e, 0x05aa}, // yerahbenyomolefthebrew\n\t{0xd6c4c66e, 0x3262}, // tikeutcirclekorean\n\t{0xd6c7e5a6, 0x03b0}, // upsilondieresistonos\n\t{0xd6df6252, 0xfef4}, // yehmedialarabic\n\t{0xd6e234de, 0x044d}, // afii10095\n\t{0xd7151c8a, 0x040b}, // afii10060\n\t{0xd71af0cf, 0x00af}, // overscore\n\t{0xd72c6112, 0x0036}, // six\n\t{0xd73b3901, 0x02da}, // ring\n\t{0xd7425de1, 0x0a1d}, // jhagurmukhi\n\t{0xd771b953, 0x3107}, // mbopomofo\n\t{0xd7a40cc3, 0x315c}, // ukorean\n\t{0xd7b7f8a3, 0x3094}, // vuhiragana\n\t{0xd7b8c7af, 0x05b8}, // qamatsquarterhebrew\n\t{0xd7bf0d2a, 0x308b}, // ruhiragana\n\t{0xd7cebade, 0x01b1}, // Upsilonafrican\n\t{0xd7d268b5, 0x314e}, // hieuhkorean\n\t{0xd7ece605, 0x2553}, // SF520000\n\t{0xd813ab1a, 0x3176}, // pieupcieuckorean\n\t{0xd816387d, 0x2178}, // nineroman\n\t{0xd8171429, 0x013e}, // lcaron\n\t{0xd817c39d, 0x0664}, // fourhackarabic\n\t{0xd824acfb, 0x05de}, // memhebrew\n\t{0xd849e14d, 0x3052}, // gehiragana\n\t{0xd84afb0a, 0x00d1}, // Ntilde\n\t{0xd85534fc, 0x02ca}, // secondtonechinese\n\t{0xd8708805, 0x01ba}, // ezhtail\n\t{0xd890928b, 0x0053}, // S\n\t{0xd893adf8, 0x0580}, // reharmenian\n\t{0xd8964f73, 0x043d}, // encyrillic\n\t{0xd89879e8, 0x2116}, // afii61352\n\t{0xd8a1ab6d, 0x03ab}, // Upsilondieresis\n\t{0xd8b1d2bf, 0x0177}, // ycircumflex\n\t{0xd8faed0d, 0x30ef}, // wakatakana\n\t{0xd9038cdb, 0x32a4}, // ideographichighcircle\n\t{0xd90a7039, 0x06af}, // afii57509\n\t{0xd91584cd, 0xfe31}, // emdashvertical\n\t{0xd92072b9, 0x0493}, // ghestrokecyrillic\n\t{0xd92d9608, 0x0acd}, // viramagujarati\n\t{0xd9321a82, 0xfb01}, // f_i\n\t{0xd932c15c, 0x30ac}, // gakatakana\n\t{0xd93c2940, 0x33cf}, // ktsquare\n\t{0xd94d846e, 0x321a}, // phieuphaparenkorean\n\t{0xd94faf13, 0x0188}, // chook\n\t{0xd95c2f59, 0x04bd}, // cheabkhasiancyrillic\n\t{0xd9697a13, 0x328b}, // ideographfirecircle\n\t{0xd98cc91f, 0x0307}, // dotaccentcmb\n\t{0xd991004f, 0x0e4f}, // fongmanthai\n\t{0xd99e3976, 0x249f}, // dparen\n\t{0xd9ba695c, 0xff70}, // katahiraprolongmarkhalfwidth\n\t{0xd9d63664, 0x0189}, // Dafrican\n\t{0xd9e83df4, 0x096b}, // fivedeva\n\t{0xd9eba56d, 0x03b3}, // gamma\n\t{0xda15411c, 0x0304}, // macroncmb\n\t{0xda2037e1, 0x1e01}, // aringbelow\n\t{0xda3670ae, 0x3347}, // mansyonsquare\n\t{0xda39b9df, 0x013d}, // Lcaron\n\t{0xda48ff7e, 0x00bb}, // guillemotright\n\t{0xda4e1891, 0x228b}, // supersetnotequal\n\t{0xda55d0f3, 0x0a69}, // threegurmukhi\n\t{0xda620e6e, 0xfca2}, // tehhahinitialarabic\n\t{0xda734cc8, 0x232b}, // deleteleft\n\t{0xda85eaa3, 0x2070}, // zerosuperior\n\t{0xda94576a, 0x0999}, // ngabengali\n\t{0xda94a677, 0x0634}, // afii57428\n\t{0xda99b3d7, 0x30d1}, // pakatakana\n\t{0xdab46527, 0x21e9}, // arrowdownwhite\n\t{0xdac4a95a, 0x002f}, // slash\n\t{0xdac8670b, 0x011e}, // Gbreve\n\t{0xdad5813e, 0x24bf}, // Jcircle\n\t{0xdaf9ae21, 0x03e7}, // kheicoptic\n\t{0xdb00acb2, 0x04dc}, // Zhedieresiscyrillic\n\t{0xdb07430c, 0x1eac}, // Acircumflexdotbelow\n\t{0xdb15243d, 0xfb38}, // tetdagesh\n\t{0xdb180684, 0x059d}, // gereshmuqdamhebrew\n\t{0xdb19f222, 0x1e30}, // Kacute\n\t{0xdb36c0cb, 0x00c1}, // Aacute\n\t{0xdb46a061, 0x044f}, // afii10097\n\t{0xdb4843d8, 0x0140}, // ldotaccent\n\t{0xdb491e12, 0x3201}, // nieunparenkorean\n\t{0xdb4ecb82, 0x06a4}, // afii57505\n\t{0xdb5fdfb2, 0x09cd}, // viramabengali\n\t{0xdb9c2f74, 0x3063}, // tusmallhiragana\n\t{0xdb9dda85, 0xfb3b}, // kafdageshhebrew\n\t{0xdba170e8, 0x0998}, // ghabengali\n\t{0xdbae2c8c, 0x2277}, // greaterorless\n\t{0xdbc3c473, 0x001a}, // controlSUB\n\t{0xdbc6ef9a, 0x05b2}, // hatafpatah23\n\t{0xdbc71338, 0xff01}, // exclammonospace\n\t{0xdbcb0069, 0x338a}, // pfsquare\n\t{0xdbf12380, 0x2460}, // onecircle\n\t{0xdc0071a3, 0xfb46}, // tsadidageshhebrew\n\t{0xdc05ec50, 0x30f5}, // kasmallkatakana\n\t{0xdc0ad3ae, 0x012d}, // ibreve\n\t{0xdc0c240d, 0xff9e}, // voicedmarkkanahalfwidth\n\t{0xdc0c9e85, 0xff9f}, // semivoicedmarkkanahalfwidth\n\t{0xdc3d7ac8, 0x04a7}, // pemiddlehookcyrillic\n\t{0xdc41d3b3, 0x05ab}, // olehebrew\n\t{0xdc54447c, 0x307c}, // bohiragana\n\t{0xdc6ca9b3, 0x0584}, // keharmenian\n\t{0xdc7756d1, 0x0077}, // w\n\t{0xdc7d1de8, 0xfba9}, // hehmedialaltonearabic\n\t{0xdc7f6ca5, 0x0624}, // wawhamzaabovearabic\n\t{0xdcc5c006, 0x055a}, // apostrophearmenian\n\t{0xdce03f6b, 0x261e}, // pointingindexrightwhite\n\t{0xdcefaeeb, 0x228a}, // subsetnotequal\n\t{0xdd07775c, 0x3223}, // fourideographicparen\n\t{0xdd07a474, 0x00b3}, // threesuperior\n\t{0xdd21d4c1, 0x039b}, // Lambda\n\t{0xdd2fee63, 0x0aad}, // bhagujarati\n\t{0xdd4e62a4, 0x0a96}, // khagujarati\n\t{0xdd55f861, 0x2560}, // SF420000\n\t{0xdd64bab7, 0x3080}, // muhiragana\n\t{0xdd68d3ef, 0x00a5}, // yen\n\t{0xdd8a8538, 0x0a26}, // dagurmukhi\n\t{0xdd9a009b, 0x2016}, // dblverticalbar\n\t{0xdda2fef7, 0x33db}, // srsquare\n\t{0xdda8f1e0, 0x33d4}, // mbsquare\n\t{0xddd89deb, 0xff4d}, // mmonospace\n\t{0xdde406ed, 0x23a8}, // braceleftmid\n\t{0xddfdd08a, 0x30a7}, // esmallkatakana\n\t{0xddfea657, 0x0049}, // I\n\t{0xddffcb32, 0x1e60}, // Sdotaccent\n\t{0xde111430, 0x2271}, // notgreaternorequal\n\t{0xde159412, 0x2605}, // blackstar\n\t{0xde3de1bb, 0xfede}, // lamfinalarabic\n\t{0xde4643cf, 0x0ac5}, // ecandravowelsigngujarati\n\t{0xde5450d1, 0xff88}, // nekatakanahalfwidth\n\t{0xde6c8dd1, 0x2223}, // divides\n\t{0xde91c7ac, 0xfb35}, // vavdagesh\n\t{0xdea63325, 0x0e0c}, // chochoethai\n\t{0xdea93241, 0x0385}, // dieresistonos\n\t{0xdeab4b8b, 0x05ad}, // dehihebrew\n\t{0xdebc4010, 0xfcd5}, // noonmeeminitialarabic\n\t{0xdebf0df4, 0x05f0}, // afii57716\n\t{0xdecde878, 0x1e52}, // Omacronacute\n\t{0xdee80462, 0xffe5}, // yenmonospace\n\t{0xdee969b3, 0x3001}, // ideographiccomma\n\t{0xdef14eee, 0x020e}, // Oinvertedbreve\n\t{0xdef351c2, 0x020c}, // Odblgrave\n\t{0xdef92b6a, 0x3349}, // mirisquare\n\t{0xdf08e8b4, 0xff15}, // fivemonospace\n\t{0xdf09c757, 0x0186}, // Oopen\n\t{0xdf1ee74b, 0xff81}, // tikatakanahalfwidth\n\t{0xdf243dad, 0x044c}, // softsigncyrillic\n\t{0xdf46fba9, 0x01a4}, // Phook\n\t{0xdf80589a, 0x3217}, // chieuchaparenkorean\n\t{0xdf8c6402, 0x0e45}, // lakkhangyaothai\n\t{0xdf9eaf7a, 0x33bc}, // muwsquare\n\t{0xdfad5d93, 0x22c0}, // logicalandtext\n\t{0xdfaf476d, 0x0167}, // tbar\n\t{0xdfb9632c, 0x3144}, // pieupsioskorean\n\t{0xdff819d0, 0xfe8c}, // yehhamzaabovemedialarabic\n\t{0xdffe3761, 0x1e14}, // Emacrongrave\n\t{0xe0130535, 0x316c}, // rieulpansioskorean\n\t{0xe019189f, 0x0994}, // aubengali\n\t{0xe0197d92, 0x0a4b}, // oomatragurmukhi\n\t{0xe0343a59, 0x0323}, // dotbelowcomb\n\t{0xe03a2368, 0x019f}, // Ocenteredtilde\n\t{0xe0489c79, 0x017f}, // longs\n\t{0xe0560cdf, 0x1e19}, // ecircumflexbelow\n\t{0xe065671a, 0x1e0a}, // Ddotaccent\n\t{0xe07dfee5, 0x04f4}, // Chedieresiscyrillic\n\t{0xe0800244, 0xfb69}, // ttehmedialarabic\n\t{0xe0987417, 0x24dd}, // ncircle\n\t{0xe0ac4869, 0x3225}, // sixideographicparen\n\t{0xe0c42e1f, 0x3357}, // wattosquare\n\t{0xe0cf3aca, 0x1e1d}, // ecedillabreve\n\t{0xe0d114bf, 0x04b6}, // Chedescendercyrillic\n\t{0xe0dbd3b5, 0x2494}, // thirteenperiod\n\t{0xe0ec0106, 0x05a6}, // merkhakefulahebrew\n\t{0xe0ec7a9f, 0x01a6}, // yr\n\t{0xe0f957bb, 0x0644}, // afii57444\n\t{0xe10a53c6, 0x0aa8}, // nagujarati\n\t{0xe13f2d93, 0x3026}, // sixhangzhou\n\t{0xe173c1f2, 0x1e12}, // Dcircumflexbelow\n\t{0xe180ca73, 0x1e43}, // mdotbelow\n\t{0xe1b37094, 0x0629}, // afii57417\n\t{0xe1bbda55, 0x040e}, // Ushortcyrillic\n\t{0xe1bf1035, 0x0536}, // Zaarmenian\n\t{0xe20234a2, 0x012c}, // Ibreve\n\t{0xe20c937f, 0x041a}, // Kacyrillic\n\t{0xe20deadd, 0x047c}, // Omegatitlocyrillic\n\t{0xe2234dec, 0xff52}, // rmonospace\n\t{0xe22682ea, 0x3260}, // kiyeokcirclekorean\n\t{0xe22a6510, 0x1e8e}, // Ydotaccent\n\t{0xe23968a4, 0x04b3}, // hadescendercyrillic\n\t{0xe25773d9, 0x04d3}, // adieresiscyrillic\n\t{0xe259edda, 0x0628}, // afii57416\n\t{0xe25f57e9, 0xfe9a}, // thehfinalarabic\n\t{0xe26168f6, 0x1e82}, // Wacute\n\t{0xe28a564c, 0x044f}, // iacyrillic\n\t{0xe28eea2e, 0x1e51}, // omacrongrave\n\t{0xe2924f7e, 0x0a67}, // onegurmukhi\n\t{0xe2a7b092, 0x3213}, // pieupaparenkorean\n\t{0xe2b99909, 0x0e14}, // dodekthai\n\t{0xe2cfeeb5, 0x0301}, // acutecomb\n\t{0xe2eccaa5, 0x0059}, // Y\n\t{0xe2ef1bbf, 0x2197}, // arrowupright\n\t{0xe2fc74df, 0x0533}, // Gimarmenian\n\t{0xe2ff3ec5, 0xfb8d}, // rrehfinalarabic\n\t{0xe2ffc4d4, 0x2661}, // heartsuitwhite\n\t{0xe3356dd7, 0x1e54}, // Pacute\n\t{0xe35f1369, 0xfe5c}, // bracerightsmall\n\t{0xe3708e14, 0xfed3}, // fehinitialarabic\n\t{0xe37c75f9, 0x03c7}, // chi\n\t{0xe38423f1, 0x01ab}, // tpalatalhook\n\t{0xe387ebf8, 0xff94}, // yakatakanahalfwidth\n\t{0xe39adf52, 0x05b7}, // patahnarrowhebrew\n\t{0xe39bb5ba, 0x0258}, // ereversed\n\t{0xe3a00fb0, 0x0aa2}, // ddhagujarati\n\t{0xe3a0394c, 0x05b3}, // afii57802\n\t{0xe3bf40b5, 0x21c5}, // arrowupleftofdown\n\t{0xe3cbb73f, 0x0459}, // afii10106\n\t{0xe3cddac1, 0x0621}, // hamzalowarabic\n\t{0xe3d5ad06, 0x1ec0}, // Ecircumflexgrave\n\t{0xe3dd99f7, 0x0596}, // tipehahebrew\n\t{0xe3fae787, 0x0587}, // echyiwnarmenian\n\t{0xe3fe00d6, 0x2170}, // oneroman\n\t{0xe401701f, 0x3016}, // whitelenticularbracketleft\n\t{0xe41d9109, 0x3089}, // rahiragana\n\t{0xe424f4cb, 0x0969}, // threedeva\n\t{0xe42a588e, 0x0e27}, // wowaenthai\n\t{0xe42a6647, 0x0a71}, // addakgurmukhi\n\t{0xe433c6bf, 0x042c}, // afii10046\n\t{0xe44aea0b, 0x0219}, // scommaaccent\n\t{0xe44ed7aa, 0x2481}, // fourteenparen\n\t{0xe468e60e, 0x33bd}, // mwsquare\n\t{0xe47b4b2e, 0xfecb}, // aininitialarabic\n\t{0xe4896ee4, 0x09c0}, // iivowelsignbengali\n\t{0xe4924345, 0xff63}, // cornerbracketrighthalfwidth\n\t{0xe49ba568, 0x090c}, // lvocalicdeva\n\t{0xe4a8920f, 0x0014}, // controlDC4\n\t{0xe4c6b94a, 0x0550}, // Reharmenian\n\t{0xe4c91eec, 0x1ea7}, // acircumflexgrave\n\t{0xe4d0a5c5, 0x2171}, // tworoman\n\t{0xe4de0824, 0x090b}, // rvocalicdeva\n\t{0xe4e78bbf, 0x0e33}, // saraamthai\n\t{0xe4e90251, 0xfb41}, // samekhdagesh\n\t{0xe4f1acea, 0x24d7}, // hcircle\n\t{0xe5034999, 0xff55}, // umonospace\n\t{0xe504c22f, 0x01a9}, // Esh\n\t{0xe506e1eb, 0x2493}, // twelveperiod\n\t{0xe5107e85, 0xff92}, // mekatakanahalfwidth\n\t{0xe5116fc8, 0x2472}, // nineteencircle\n\t{0xe514f37f, 0x03be}, // xi\n\t{0xe51bd3a3, 0x0163}, // tcedilla\n\t{0xe5287de7, 0x3173}, // pieuptikeutkorean\n\t{0xe5322bbf, 0x25b2}, // blackuppointingtriangle\n\t{0xe5431590, 0x2296}, // minuscircle\n\t{0xe54a2cdd, 0x201e}, // quotedblbase\n\t{0xe5694805, 0x3161}, // eukorean\n\t{0xe56f3e08, 0x1e9b}, // slongdotaccent\n\t{0xe5779de7, 0x0666}, // afii57398\n\t{0xe578bf9d, 0x066d}, // asteriskaltonearabic\n\t{0xe5850206, 0x2226}, // notparallel\n\t{0xe59889e5, 0x014b}, // eng\n\t{0xe59f1c1d, 0x2664}, // spadesuitwhite\n\t{0xe59f1f71, 0x2203}, // thereexists\n\t{0xe5dca65a, 0x04aa}, // Esdescendercyrillic\n\t{0xe5e0ac19, 0x0a74}, // ekonkargurmukhi\n\t{0xe5eb1828, 0x25e6}, // openbullet\n\t{0xe5f403ac, 0x0981}, // candrabindubengali\n\t{0xe5f51e2d, 0x0156}, // Rcedilla\n\t{0xe61a323e, 0x21d2}, // arrowdblright\n\t{0xe61dad29, 0x017b}, // Zdotaccent\n\t{0xe62fb889, 0x2524}, // SF090000\n\t{0xe6699f03, 0x025d}, // eopenreversedhook\n\t{0xe6743f55, 0x011a}, // Ecaron\n\t{0xe6861695, 0x018a}, // Dhook\n\t{0xe68d35b4, 0x0436}, // afii10072\n\t{0xe68e2cfd, 0x306b}, // nihiragana\n\t{0xe6910141, 0x06f1}, // onepersian\n\t{0xe6936418, 0xfb2f}, // alefqamatshebrew\n\t{0xe6a0587d, 0x3222}, // threeideographicparen\n\t{0xe6a445c8, 0xfcd2}, // noonjeeminitialarabic\n\t{0xe6b00dbd, 0x060c}, // commaarabic\n\t{0xe6bd7d55, 0x04f0}, // Udieresiscyrillic\n\t{0xe6beeaab, 0x2667}, // clubsuitwhite\n\t{0xe6d26878, 0x0663}, // threehackarabic\n\t{0xe6eee43a, 0x031a}, // leftangleabovecmb\n\t{0xe70bdf5d, 0x1e85}, // wdieresis\n\t{0xe72762a6, 0x3127}, // ibopomofo\n\t{0xe74e8d5b, 0x02d0}, // colontriangularmod\n\t{0xe75de72d, 0x0a4d}, // halantgurmukhi\n\t{0xe796e6c1, 0x032f}, // breveinvertedbelowcmb\n\t{0xe7a9201c, 0x24e5}, // vcircle\n\t{0xe7abb869, 0x05b0}, // sheva115\n\t{0xe7f3b395, 0x24d8}, // icircle\n\t{0xe80a2426, 0x3116}, // rbopomofo\n\t{0xe80eec90, 0x0942}, // uuvowelsigndeva\n\t{0xe832e25c, 0x03ef}, // deicoptic\n\t{0xe836846a, 0x20a1}, // colonsign\n\t{0xe8445eb9, 0x05e5}, // finaltsadihebrew\n\t{0xe84e29b1, 0xfef5}, // lamalefmaddaaboveisolatedarabic\n\t{0xe853fc35, 0x3177}, // pieupthieuthkorean\n\t{0xe871a9d4, 0x03e3}, // sheicoptic\n\t{0xe872f83d, 0x02a0}, // qhook\n\t{0xe87409fd, 0xfe8b}, // yehhamzaaboveinitialarabic\n\t{0xe885d69b, 0x1e58}, // Rdotaccent\n\t{0xe893423b, 0x202c}, // afii61573\n\t{0xe894f25c, 0x03a1}, // Rho\n\t{0xe89d944f, 0x043a}, // kacyrillic\n\t{0xe8aff9ae, 0x24b7}, // Bcircle\n\t{0xe8d4db79, 0x2320}, // integraltp\n\t{0xe8d6bd29, 0x0621}, // afii57409\n\t{0xe8ec3154, 0x2490}, // nineperiod\n\t{0xe8ef5782, 0x3092}, // wohiragana\n\t{0xe8f0c584, 0x05d1}, // afii57665\n\t{0xe8f5ca9b, 0x05b1}, // hatafsegolnarrowhebrew\n\t{0xe8f7e9bf, 0x320f}, // nieunaparenkorean\n\t{0xe903bc23, 0xfb36}, // zayindageshhebrew\n\t{0xe90424fe, 0x2479}, // sixparen\n\t{0xe927829f, 0x0953}, // gravedeva\n\t{0xe92a9522, 0x0060}, // grave\n\t{0xe93b2c93, 0x09c8}, // aivowelsignbengali\n\t{0xe9598c36, 0x018e}, // Ereversed\n\t{0xe96c43a5, 0x00d4}, // Ocircumflex\n\t{0xe977a63b, 0x0591}, // etnahtalefthebrew\n\t{0xe9860674, 0x2467}, // eightcircle\n\t{0xe994ec07, 0x1e88}, // Wdotbelow\n\t{0xe9955c1b, 0x2109}, // fahrenheit\n\t{0xe997ce80, 0x03d6}, // pisymbolgreek\n\t{0xe9b8fb39, 0x256a}, // SF540000\n\t{0xe9c5c9e3, 0x0928}, // nadeva\n\t{0xe9dc1b2b, 0x3162}, // yikorean\n\t{0xe9f5bb0b, 0x1e40}, // Mdotaccent\n\t{0xe9fd5bd7, 0x02d1}, // colontriangularhalfmod\n\t{0xe9fe0986, 0xfe91}, // behinitialarabic\n\t{0xea0e9b0d, 0x3077}, // puhiragana\n\t{0xea11b5f2, 0x05d7}, // hethebrew\n\t{0xea281c50, 0xfb3b}, // kafdagesh\n\t{0xea281f0f, 0xfb43}, // pefinaldageshhebrew\n\t{0xea4521ba, 0x1e99}, // yring\n\t{0xea469ad4, 0x0641}, // feharabic\n\t{0xea4bf6ca, 0x25b5}, // whiteuppointingsmalltriangle\n\t{0xea505c24, 0x006b}, // k\n\t{0xea723c32, 0x05b7}, // patahwidehebrew\n\t{0xea828d24, 0x0ac4}, // rrvocalicvowelsigngujarati\n\t{0xea8df8fe, 0xff09}, // parenrightmonospace\n\t{0xeaaa8586, 0x05b6}, // segolhebrew\n\t{0xeabb8dad, 0xfeb3}, // seeninitialarabic\n\t{0xeabdd2cd, 0xff02}, // quotedblmonospace\n\t{0xeacd0b4a, 0xfb1f}, // doubleyodpatah\n\t{0xeade9ba5, 0x2113}, // afii61289\n\t{0xeb0445d5, 0x043f}, // afii10081\n\t{0xeb095515, 0x0452}, // afii10099\n\t{0xeb4a0523, 0x056a}, // zhearmenian\n\t{0xeb4fdea3, 0xfc08}, // behmeemisolatedarabic\n\t{0xeb576d94, 0x21de}, // pageup\n\t{0xeb701704, 0x2014}, // emdash\n\t{0xeb71d801, 0x30f3}, // nkatakana\n\t{0xebeccb02, 0x00dd}, // Yacute\n\t{0xec20a331, 0x096c}, // sixdeva\n\t{0xec450aad, 0x3211}, // rieulaparenkorean\n\t{0xec4fc0c5, 0x0173}, // uogonek\n\t{0xec78ec45, 0x05a4}, // mahapakhhebrew\n\t{0xec820a21, 0x05b4}, // hiriqquarterhebrew\n\t{0xec8ae366, 0x0987}, // ibengali\n\t{0xec967081, 0x040a}, // Njecyrillic\n\t{0xecad584f, 0x01a8}, // tonetwo\n\t{0xecc21039, 0x0a98}, // ghagujarati\n\t{0xecce5cae, 0x056b}, // iniarmenian\n\t{0xecd385c5, 0x03a8}, // Psi\n\t{0xecda4c6b, 0x0622}, // alefmaddaabovearabic\n\t{0xecddb27b, 0x23d0}, // vextendsingle\n\t{0xecddb519, 0x05db}, // kaf\n\t{0xecef01e0, 0x1e59}, // rdotaccent\n\t{0xed102125, 0x24c0}, // Kcircle\n\t{0xed1afc7c, 0x05b2}, // hatafpatah2f\n\t{0xed2b4a43, 0x00aa}, // ordfeminine\n\t{0xed4bb321, 0x313f}, // rieulphieuphkorean\n\t{0xed65e3bb, 0x057a}, // peharmenian\n\t{0xed729d82, 0x049e}, // Kastrokecyrillic\n\t{0xed796a9e, 0x0407}, // afii10056\n\t{0xed8b66db, 0x040b}, // Tshecyrillic\n\t{0xed9bf511, 0x063a}, // afii57434\n\t{0xedfaec74, 0xfe69}, // dollarsmall\n\t{0xee22e47f, 0x00bd}, // onehalf\n\t{0xee3352d3, 0x05b0}, // afii57799\n\t{0xee339d2e, 0x2025}, // twodotenleader\n\t{0xee421e32, 0x0660}, // zeroarabic\n\t{0xee6c8858, 0x3168}, // nieunpansioskorean\n\t{0xee7a31f8, 0x220b}, // suchthat\n\t{0xee8d09d6, 0xff12}, // twomonospace\n\t{0xee900f0f, 0x0462}, // afii10146\n\t{0xee9f1e99, 0x02b7}, // wsuperior\n\t{0xeeb00f1b, 0x0063}, // c\n\t{0xeeb5ef47, 0x24c2}, // Mcircle\n\t{0xeeda5b48, 0x00a6}, // brokenbar\n\t{0xeeeef128, 0x062f}, // afii57423\n\t{0xeeef7f7c, 0x01b6}, // zstroke\n\t{0xef03e03f, 0x32a3}, // ideographiccorrectcircle\n\t{0xef22f61a, 0x06f0}, // zeropersian\n\t{0xef24cf3c, 0x00a8}, // dieresis\n\t{0xef2800a0, 0x00cc}, // Igrave\n\t{0xef33d78e, 0x25a1}, // H22073\n\t{0xef3a179c, 0x020a}, // Iinvertedbreve\n\t{0xef636ee0, 0x05da}, // finalkaf\n\t{0xefa03eab, 0x00c6}, // AE\n\t{0xefc57067, 0x0260}, // ghook\n\t{0xefd65ddd, 0x2033}, // second\n\t{0xefd69119, 0x044e}, // iucyrillic\n\t{0xefd88572, 0x1ecb}, // idotbelow\n\t{0xefe0e3fd, 0xfb01}, // fi\n\t{0xeff59b38, 0x0397}, // Eta\n\t{0xeff843d0, 0x25a3}, // squarewhitewithsmallblack\n\t{0xf00181f3, 0x305c}, // zehiragana\n\t{0xf00455e8, 0x1e86}, // Wdotaccent\n\t{0xf0045976, 0x3178}, // kapyeounpieupkorean\n\t{0xf0213847, 0x3383}, // masquare\n\t{0xf0248bca, 0x0640}, // tatweelarabic\n\t{0xf029041c, 0x3017}, // whitelenticularbracketright\n\t{0xf0412bb8, 0x04d0}, // Abrevecyrillic\n\t{0xf04a093b, 0xff66}, // wokatakanahalfwidth\n\t{0xf04c3677, 0xfe62}, // plussmall\n\t{0xf04d9cf4, 0x308c}, // rehiragana\n\t{0xf064a013, 0x047e}, // Otcyrillic\n\t{0xf0673e49, 0x096f}, // ninedeva\n\t{0xf0757f39, 0x030a}, // ringcmb\n\t{0xf08a28a9, 0xfe4e}, // lowlinecenterline\n\t{0xf09092b0, 0x3185}, // ssanghieuhkorean\n\t{0xf091911a, 0x223d}, // reversedtilde\n\t{0xf098620b, 0x066a}, // percentarabic\n\t{0xf0a5507a, 0x03d5}, // phisymbolgreek\n\t{0xf0ac995b, 0x337c}, // syouwaerasquare\n\t{0xf0b806fd, 0xfb7c}, // tchehinitialarabic\n\t{0xf0c10455, 0x0645}, // meemarabic\n\t{0xf0d79471, 0x0201}, // adblgrave\n\t{0xf0e2f076, 0x04cb}, // Chekhakassiancyrillic\n\t{0xf0ec6a42, 0x0302}, // circumflexcmb\n\t{0xf0f2a82b, 0x1e8a}, // Xdotaccent\n\t{0xf0fcc511, 0x3398}, // klsquare\n\t{0xf1116d2e, 0xfe41}, // cornerbracketleftvertical\n\t{0xf1200f87, 0x05e6}, // tsadi\n\t{0xf13a2d0d, 0x0119}, // eogonek\n\t{0xf1410096, 0x1e1a}, // Etildebelow\n\t{0xf144c7a3, 0x249d}, // bparen\n\t{0xf15ab600, 0x05bb}, // qubuts18\n\t{0xf16238a6, 0x04de}, // Zedieresiscyrillic\n\t{0xf1aad12e, 0x0638}, // afii57432\n\t{0xf1b08e52, 0x20ab}, // dong\n\t{0xf1b0be56, 0x20a2}, // cruzeiro\n\t{0xf1b5f5d1, 0x05b5}, // tserehebrew\n\t{0xf1dd7830, 0x033d}, // xabovecmb\n\t{0xf1ddaa7d, 0x0995}, // kabengali\n\t{0xf1e94d64, 0x064e}, // fathaarabic\n\t{0xf1eb4f66, 0x0116}, // Edotaccent\n\t{0xf1f78ce7, 0x226a}, // muchless\n\t{0xf2118c6c, 0x0635}, // sadarabic\n\t{0xf232181a, 0x2640}, // venus\n\t{0xf237f0f1, 0xff29}, // Imonospace\n\t{0xf23a5b68, 0x0130}, // Idot\n\t{0xf24a3a6b, 0x05b8}, // qamats1c\n\t{0xf2558e7a, 0x230a}, // floorleftbig\n\t{0xf2620ee8, 0x1e07}, // blinebelow\n\t{0xf26e5910, 0x045e}, // ushortcyrillic\n\t{0xf2b4963c, 0x09b0}, // rabengali\n\t{0xf2b826ec, 0x0449}, // shchacyrillic\n\t{0xf2c1d44e, 0x05be}, // maqafhebrew\n\t{0xf2c69081, 0x016e}, // Uring\n\t{0xf2dd8deb, 0x248d}, // sixperiod\n\t{0xf2e23a0c, 0xfb57}, // pehfinalarabic\n\t{0xf2e7f536, 0x0329}, // verticallinebelowcmb\n\t{0xf2f52e6c, 0x00ce}, // Icircumflex\n\t{0xf2f6e905, 0x24cd}, // Xcircle\n\t{0xf3086f4b, 0x2030}, // perthousand\n\t{0xf311fe21, 0xfece}, // ghainfinalarabic\n\t{0xf315dbae, 0xfe3c}, // blacklenticularbracketrightvertical\n\t{0xf336d994, 0xfef3}, // yehinitialarabic\n\t{0xf3527249, 0xfb67}, // ttehfinalarabic\n\t{0xf3935843, 0xff26}, // Fmonospace\n\t{0xf399cd14, 0x0074}, // t\n\t{0xf3c08521, 0x0431}, // afii10066\n\t{0xf3ce4ef0, 0x014a}, // Eng\n\t{0xf3cfe996, 0x05b8}, // qamatsde\n\t{0xf3ef0654, 0x2160}, // Oneroman\n\t{0xf41c3e87, 0x3182}, // yesieungsioskorean\n\t{0xf4266df0, 0x2253}, // imageorapproximatelyequal\n\t{0xf4584280, 0x05ea}, // tav\n\t{0xf4637345, 0x207a}, // plussuperior\n\t{0xf467a09a, 0x3066}, // tehiragana\n\t{0xf4728f62, 0x06f9}, // ninepersian\n\t{0xf47778a3, 0x0958}, // qadeva\n\t{0xf47c7f06, 0x05a5}, // merkhalefthebrew\n\t{0xf498c20b, 0xfb2c}, // shindageshshindothebrew\n\t{0xf4a2e6c9, 0xff8e}, // hokatakanahalfwidth\n\t{0xf4bd2095, 0xfb02}, // f_l\n\t{0xf4c721dd, 0x0415}, // afii10022\n\t{0xf4d1afd1, 0x015b}, // sacute\n\t{0xf4d731e8, 0x0e2b}, // hohipthai\n\t{0xf4d7dcfe, 0x05b0}, // sheva\n\t{0xf4ea5918, 0x0423}, // afii10037\n\t{0xf4f5b85f, 0x05bd}, // afii57839\n\t{0xf4fec4c5, 0x2026}, // ellipsis\n\t{0xf4fecbee, 0x3152}, // yaekorean\n\t{0xf526b2bc, 0x09f5}, // twonumeratorbengali\n\t{0xf53d898f, 0x0122}, // Gcedilla\n\t{0xf54df907, 0x02e8}, // tonebarlowmod\n\t{0xf573def2, 0x25ba}, // blackrightpointingpointer\n\t{0xf573f1ec, 0x24a4}, // iparen\n\t{0xf59704d9, 0xff4f}, // omonospace\n\t{0xf59943f5, 0x01d4}, // ucaron\n\t{0xf59f95da, 0x0399}, // Iota\n\t{0xf5a6729d, 0x247e}, // elevenparen\n\t{0xf5ab4f6d, 0x0458}, // afii10105\n\t{0xf5c2a87b, 0x0a14}, // augurmukhi\n\t{0xf5c40812, 0x2019}, // quoteright\n\t{0xf5cad972, 0x1ea6}, // Acircumflexgrave\n\t{0xf5e83826, 0x0986}, // aabengali\n\t{0xf5f606a8, 0x316e}, // mieumpieupkorean\n\t{0xf5f79af6, 0x23a3}, // bracketleftbt\n\t{0xf5fe99ee, 0x2017}, // underscoredbl\n\t{0xf61328eb, 0x2580}, // upblock\n\t{0xf61a2336, 0x0157}, // rcommaaccent\n\t{0xf6228c58, 0x20a3}, // franc\n\t{0xf6271ec7, 0x0429}, // afii10043\n\t{0xf630815e, 0x0577}, // shaarmenian\n\t{0xf64f0a5d, 0x30f9}, // vekatakana\n\t{0xf64f6666, 0xff44}, // dmonospace\n\t{0xf6545660, 0x3333}, // huiitosquare\n\t{0xf655e1cb, 0x316a}, // rieultikeutkorean\n\t{0xf66aa028, 0x215d}, // fiveeighths\n\t{0xf67e1ed1, 0x01a3}, // oi\n\t{0xf6886180, 0x3216}, // cieucaparenkorean\n\t{0xf68c8679, 0x3043}, // ismallhiragana\n\t{0xf68fb68d, 0x215b}, // oneeighth\n\t{0xf6909b76, 0x24a1}, // fparen\n\t{0xf6b386e5, 0x1e3c}, // Lcircumflexbelow\n\t{0xf6c0ec85, 0x1e5c}, // Rdotbelowmacron\n\t{0xf6f2a8b6, 0x0289}, // ubar\n\t{0xf7114d7b, 0x2502}, // SF110000\n\t{0xf7440454, 0x045e}, // afii10110\n\t{0xf757213f, 0x01d6}, // udieresismacron\n\t{0xf779fd74, 0x1ea0}, // Adotbelow\n\t{0xf7887f64, 0x24ba}, // Ecircle\n\t{0xf7994ed0, 0x0a6d}, // sevengurmukhi\n\t{0xf7c65164, 0x266d}, // musicflatsign\n\t{0xf7d4f2e3, 0x1e1e}, // Fdotaccent\n\t{0xf7ddf3cd, 0x0a17}, // gagurmukhi\n\t{0xf7de3a36, 0x3086}, // yuhiragana\n\t{0xf7edf1a3, 0x0403}, // Gjecyrillic\n\t{0xf7fe7207, 0x279e}, // arrowrightheavy\n\t{0xf7fec616, 0x1ec4}, // Ecircumflextilde\n\t{0xf81e4626, 0x0a02}, // bindigurmukhi\n\t{0xf8245f14, 0x30e6}, // yukatakana\n\t{0xf82ad190, 0x05e4}, // pehebrew\n\t{0xf8376f18, 0x0410}, // afii10017\n\t{0xf885c738, 0x30d3}, // bikatakana\n\t{0xf8868f94, 0xff8c}, // hukatakanahalfwidth\n\t{0xf8892150, 0x04a8}, // Haabkhasiancyrillic\n\t{0xf89be814, 0x0abc}, // nuktagujarati\n\t{0xf8e483f7, 0x1eb5}, // abrevetilde\n\t{0xf8ef289b, 0x21df}, // pagedown\n\t{0xf90377b2, 0x3151}, // yakorean\n\t{0xf90f516b, 0x0a5b}, // zagurmukhi\n\t{0xf9190810, 0x0203}, // ainvertedbreve\n\t{0xf929be43, 0x0ab6}, // shagujarati\n\t{0xf93a01ea, 0xfe6a}, // percentsmall\n\t{0xf952cde5, 0x1eae}, // Abreveacute\n\t{0xf95ad1c7, 0x0065}, // e\n\t{0xf95b34b0, 0x0660}, // afii57392\n\t{0xf976011b, 0x3399}, // fmsquare\n\t{0xf99ebcf4, 0x25c1}, // whiteleftpointingtriangle\n\t{0xf9bdabb3, 0x00e2}, // acircumflex\n\t{0xf9d67642, 0x00c8}, // Egrave\n\t{0xf9e5170b, 0x1eb6}, // Abrevedotbelow\n\t{0xf9e8161d, 0x3206}, // siosparenkorean\n\t{0xf9eeaebc, 0x002c}, // comma\n\t{0xf9f4a348, 0x2279}, // notgreaternorless\n\t{0xf9f6f2fe, 0xfe84}, // alefhamzaabovefinalarabic\n\t{0xf9f909db, 0x09f1}, // ralowerdiagonalbengali\n\t{0xfa1f37f7, 0x207d}, // parenleftsuperior\n\t{0xfa3ebdeb, 0xfb8b}, // jehfinalarabic\n\t{0xfa46e08a, 0x010a}, // Cdotaccent\n\t{0xfa6e953f, 0x0e13}, // nonenthai\n\t{0xfa7aad8b, 0x0e34}, // saraithai\n\t{0xfa85b29d, 0x0ae6}, // zerogujarati\n\t{0xfa8f771c, 0xfe82}, // alefmaddaabovefinalarabic\n\t{0xfa932832, 0x1ec9}, // ihookabove\n\t{0xfa9cd43f, 0x2488}, // oneperiod\n\t{0xfa9f7510, 0x1e6a}, // Tdotaccent\n\t{0xfaa7f693, 0xff1b}, // semicolonmonospace\n\t{0xfab3dba6, 0x3138}, // ssangtikeutkorean\n\t{0xfac03db8, 0x015e}, // Scedilla\n\t{0xfac092ef, 0x24de}, // ocircle\n\t{0xfad44b21, 0x278d}, // fourcircleinversesansserif\n\t{0xfadde282, 0x0539}, // Toarmenian\n\t{0xfaf8abd4, 0x05bb}, // qubuts25\n\t{0xfb0a35fb, 0xfb2b}, // afii57695\n\t{0xfb0e1bad, 0x2567}, // SF450000\n\t{0xfb1373b2, 0x30b9}, // sukatakana\n\t{0xfb161300, 0x049f}, // kastrokecyrillic\n\t{0xfb206015, 0x30b1}, // kekatakana\n\t{0xfb2465d5, 0x0468}, // Yuslittleiotifiedcyrillic\n\t{0xfb3e0b48, 0x01fc}, // AEacute\n\t{0xfb4678bc, 0xfe90}, // behfinalarabic\n\t{0xfb5bf4b4, 0x02cf}, // acutelowmod\n\t{0xfb5cfdc8, 0x095c}, // dddhadeva\n\t{0xfb764dd2, 0x21d3}, // arrowdbldown\n\t{0xfb7c1fd7, 0x0485}, // dasiapneumatacyrilliccmb\n\t{0xfbcf44c4, 0x018d}, // deltaturned\n\t{0xfbd1b93f, 0x33c4}, // squarecc\n\t{0xfbd50511, 0x04e8}, // Obarredcyrillic\n\t{0xfbf1fcde, 0x03e9}, // horicoptic\n\t{0xfc161b2f, 0x2499}, // eighteenperiod\n\t{0xfc18556b, 0x02bd}, // commareversedmod\n\t{0xfc1a2c97, 0x046c}, // Yusbigiotifiedcyrillic\n\t{0xfc2caf5c, 0x2285}, // notsuperset\n\t{0xfc3393bc, 0x0124}, // Hcircumflex\n\t{0xfc3a32c2, 0x0a8d}, // ecandragujarati\n\t{0xfc75d31c, 0x1ec6}, // Ecircumflexdotbelow\n\t{0xfc7e1ef8, 0x0952}, // anudattadeva\n\t{0xfc7ea01a, 0x04e6}, // Odieresiscyrillic\n\t{0xfc8020b6, 0xfb39}, // yoddageshhebrew\n\t{0xfc828b2d, 0x1ee4}, // Udotbelow\n\t{0xfc9cf271, 0x020d}, // odblgrave\n\t{0xfce47bc6, 0x05b7}, // patah\n\t{0xfce8ddc1, 0x1e0f}, // dlinebelow\n\t{0xfce9ddb5, 0x05aa}, // yerahbenyomohebrew\n\t{0xfcf6e2a9, 0x21ea}, // capslock\n\t{0xfd00e31a, 0x0303}, // tildecomb\n\t{0xfd0eac29, 0x0261}, // gscript\n\t{0xfd1397ce, 0x0412}, // Vecyrillic\n\t{0xfd166ead, 0x05e0}, // nunhebrew\n\t{0xfd2c8feb, 0x1ea4}, // Acircumflexacute\n\t{0xfd5ace9a, 0x057b}, // jheharmenian\n\t{0xfd6ac237, 0x221d}, // proportional\n\t{0xfd77296d, 0x04af}, // ustraightcyrillic\n\t{0xfd891a4c, 0x0948}, // aivowelsigndeva\n\t{0xfd8944f5, 0x0309}, // hookabovecomb\n\t{0xfd89977d, 0x0e50}, // zerothai\n\t{0xfd93a170, 0x239c}, // parenleftex\n\t{0xfd99bb06, 0xfb3c}, // lameddagesh\n\t{0xfdb6c57c, 0x2215}, // divisionslash\n\t{0xfdbbbec8, 0x090d}, // ecandradeva\n\t{0xfdc83f1f, 0x028d}, // wturned\n\t{0xfdd37935, 0x0422}, // afii10036\n\t{0xfdec640d, 0x0640}, // kashidaautoarabic\n\t{0xfdf32442, 0x3390}, // Hzsquare\n\t{0xfdf4c83e, 0x026e}, // lezh\n\t{0xfe3d55df, 0x064f}, // dammaarabic\n\t{0xfe407199, 0x2276}, // lessorgreater\n\t{0xfe7515f3, 0x03a9}, // Omegagreek\n\t{0xfe779a6a, 0x045a}, // afii10107\n\t{0xfea7088a, 0x0628}, // beharabic\n\t{0xfeb66fd9, 0xfec7}, // zahinitialarabic\n\t{0xfeb7f263, 0x0556}, // Feharmenian\n\t{0xfec7bc3b, 0x0651}, // shaddaarabic\n\t{0xfee2004d, 0x01fe}, // Ostrokeacute\n\t{0xfee5f25e, 0x2126}, // Omega\n\t{0xfee9d86c, 0x2295}, // pluscircle\n\t{0xfef651f8, 0x0688}, // afii57512\n\t{0xff5dadf4, 0x0193}, // Ghook\n\t{0xff81c116, 0x21cd}, // arrowleftdblstroke\n\t{0xff8c00d8, 0x3386}, // MBsquare\n\t{0xff8f2931, 0x30ae}, // gikatakana\n\t{0xff90fc92, 0x0923}, // nnadeva\n\t{0xff94689d, 0x04c0}, // palochkacyrillic\n\t{0xffe38169, 0x043f}, // pecyrillic\n\t{0xfffadc30, 0x2568}, // SF460000\n}};\n"
  },
  {
    "path": "src/BasicDVIReader.cpp",
    "content": "/*************************************************************************\n** BasicDVIReader.cpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <algorithm>\n#include \"BasicDVIReader.hpp\"\n\nusing namespace std;\n\n\nBasicDVIReader::BasicDVIReader (std::istream &is) : StreamReader(is), _dviVersion(DVI_NONE)\n{\n}\n\n\nvoid BasicDVIReader::throwDVIException(const string &msg) const {\n\tthrow DVIException(msg + \" at position \" + to_string(tellg()));\n}\n\n\n/** Evaluates the next DVI command, and computes the corresponding handler.\n *  @param[out] handler handler for current DVI command\n *  @param[out] param the handler must be called with this parameter\n *  @return opcode of current DVI command */\nint BasicDVIReader::evalCommand (CommandHandler &handler, int &param) {\n\tstruct DVICommand {\n\t\tCommandHandler handler;\n\t\tint length;  // number of parameter bytes\n\t};\n\n\t/* Each cmdFOO command reads the necessary number of bytes from the stream, so executeCommand\n\tdoesn't need to know the exact DVI command format. Some cmdFOO methods are used for multiple\n\tDVI commands because they only differ in length of their parameters. */\n\tstatic const DVICommand commands[] = {\n\t\t{&BasicDVIReader::cmdSetChar, 1},  {&BasicDVIReader::cmdSetChar, 2},  // 128-129\n\t\t{&BasicDVIReader::cmdSetChar, 3},  {&BasicDVIReader::cmdSetChar, 4},  // 130-131\n\t\t{&BasicDVIReader::cmdSetRule, 8},                                     // 132\n\t\t{&BasicDVIReader::cmdPutChar, 1},  {&BasicDVIReader::cmdPutChar, 2},  // 133-134\n\t\t{&BasicDVIReader::cmdPutChar, 3},  {&BasicDVIReader::cmdPutChar, 4},  // 135-136\n\t\t{&BasicDVIReader::cmdPutRule, 8},                                     // 137\n\t\t{&BasicDVIReader::cmdNop, 0},                                         // 138\n\t\t{&BasicDVIReader::cmdBop, 44},     {&BasicDVIReader::cmdEop, 0},      // 139-140\n\t\t{&BasicDVIReader::cmdPush, 0},     {&BasicDVIReader::cmdPop, 0},      // 141-142\n\t\t{&BasicDVIReader::cmdRight, 1},    {&BasicDVIReader::cmdRight, 2},    // 143-144\n\t\t{&BasicDVIReader::cmdRight, 3},    {&BasicDVIReader::cmdRight, 4},    // 145-146\n\t\t{&BasicDVIReader::cmdW0, 0},                                          // 147\n\t\t{&BasicDVIReader::cmdW, 1},        {&BasicDVIReader::cmdW, 2},        // 148-149\n\t\t{&BasicDVIReader::cmdW, 3},        {&BasicDVIReader::cmdW, 4},        // 150-151\n\t\t{&BasicDVIReader::cmdX0, 0},                                          // 152\n\t\t{&BasicDVIReader::cmdX, 1},        {&BasicDVIReader::cmdX, 2},        // 153-154\n\t\t{&BasicDVIReader::cmdX, 3},        {&BasicDVIReader::cmdX, 4},        // 155-156\n\t\t{&BasicDVIReader::cmdDown, 1},     {&BasicDVIReader::cmdDown, 2},     // 157-158\n\t\t{&BasicDVIReader::cmdDown, 3},     {&BasicDVIReader::cmdDown, 4},     // 159-160\n\t\t{&BasicDVIReader::cmdY0, 0},                                          // 161\n\t\t{&BasicDVIReader::cmdY, 1},        {&BasicDVIReader::cmdY, 2},        // 162-163\n\t\t{&BasicDVIReader::cmdY, 3},        {&BasicDVIReader::cmdY, 4},        // 164-165\n\t\t{&BasicDVIReader::cmdZ0, 0},                                          // 166\n\t\t{&BasicDVIReader::cmdZ, 1},        {&BasicDVIReader::cmdZ, 2},        // 167-168\n\t\t{&BasicDVIReader::cmdZ, 3},        {&BasicDVIReader::cmdZ, 4},        // 169-170\n\n\t\t{&BasicDVIReader::cmdFontNum, 1},  {&BasicDVIReader::cmdFontNum, 2},  // 235-236\n\t\t{&BasicDVIReader::cmdFontNum, 3},  {&BasicDVIReader::cmdFontNum, 4},  // 237-238\n\t\t{&BasicDVIReader::cmdXXX, 1},      {&BasicDVIReader::cmdXXX, 2},      // 239-240\n\t\t{&BasicDVIReader::cmdXXX, 3},      {&BasicDVIReader::cmdXXX, 4},      // 241-242\n\t\t{&BasicDVIReader::cmdFontDef, 1},  {&BasicDVIReader::cmdFontDef, 2},  // 243-244\n\t\t{&BasicDVIReader::cmdFontDef, 3},  {&BasicDVIReader::cmdFontDef, 4},  // 245-246\n\t\t{&BasicDVIReader::cmdPre, 0},      {&BasicDVIReader::cmdPost, 0},     // 247-248\n\t\t{&BasicDVIReader::cmdPostPost, 0},                                    // 249\n\t};\n\n\tconst int opcode = readByte();\n\tif (!isStreamValid() || opcode < 0)  // at end of file\n\t\tthrow DVIPrematureEOFException();\n\n\tint num_param_bytes = 0;\n\tparam = -1;\n\tif (opcode >= OP_SETCHAR0 && opcode <= OP_SETCHAR127) {\n\t\thandler = &BasicDVIReader::cmdSetChar0;\n\t\tparam = opcode;\n\t}\n\telse if (opcode >= OP_FNTNUM0 && opcode <= OP_FNTNUM63) {\n\t\thandler = &BasicDVIReader::cmdFontNum0;\n\t\tparam = opcode-OP_FNTNUM0;\n\t}\n\telse if (evalXDVOpcode(opcode, handler))\n\t\tnum_param_bytes = 0;\n\telse if (_dviVersion == DVI_PTEX && opcode == OP_DIR) {  // direction command set by pTeX?\n\t\thandler = &BasicDVIReader::cmdDir;\n\t\tnum_param_bytes = 1;\n\t}\n\telse if (opcode > OP_POSTPOST)\n\t\tthrowDVIException(\"undefined DVI command (opcode \" + to_string(opcode) + \")\");\n\telse {\n\t\tconst int offset = opcode < OP_FNTNUM0 ? OP_SET1 : (OP_FNTNUM63+1)-(OP_FNTNUM0-OP_SET1);\n\t\thandler = commands[opcode-offset].handler;\n\t\tnum_param_bytes = commands[opcode-offset].length;\n\t}\n\tif (param < 0)\n\t\tparam = num_param_bytes;\n\treturn opcode;\n}\n\n\n/** Checks if a given opcode belongs to an XDV extension.\n *  @param[in] op the opcode to check\n *  @param[out] handler corresponding command handler if opcode is valid */\nbool BasicDVIReader::evalXDVOpcode (int op, CommandHandler &handler) const {\n\tstatic const struct {\n\t\tint min, max;  // minimal and maximal opcode in XDV section\n\t} xdvranges[] = {\n\t\t{251, 254},  // XDV5\n\t\t{252, 253},  // XDV6\n\t\t{252, 254},  // XDV7\n\t};\n\tint index = _dviVersion-DVI_XDV5;\n\tif (_dviVersion < DVI_XDV5 || _dviVersion > DVI_XDV7 || op < xdvranges[index].min || op > xdvranges[index].max)\n\t\treturn false;\n\n\tstatic const CommandHandler handlers[] = {\n\t\t&BasicDVIReader::cmdXPic,             // 251 (XDV5 only)\n\t\t&BasicDVIReader::cmdXFontDef,         // 252\n\t\t&BasicDVIReader::cmdXGlyphArray,      // 253\n\t\t&BasicDVIReader::cmdXTextAndGlyphs,   // 254 (XDV7 only)\n\t\t&BasicDVIReader::cmdXGlyphString      // 254 (XDV5 only)\n\t};\n\tindex = op-251;\n\tif (_dviVersion == DVI_XDV5 && op == 254)\n\t\tindex++;\n\thandler = handlers[index];\n\treturn true;\n}\n\n\n/** Reads a single DVI command from the current position of the input stream and calls the\n *  corresponding cmdFOO method.\n *  @return opcode of the executed command */\nint BasicDVIReader::executeCommand () {\n\tCommandHandler handler;\n\tint param; // parameter of handler\n\tint opcode = evalCommand(handler, param);\n\t(this->*handler)(param);\n\treturn opcode;\n}\n\n\nvoid BasicDVIReader::executePreamble () {\n\tclearStream();\n\tif (isStreamValid()) {\n\t\tseek(0);\n\t\tif (readByte() == OP_PRE) {\n\t\t\tcmdPre(0);\n\t\t\treturn;\n\t\t}\n\t}\n\tthrowDVIException(\"invalid DVI file (missing preamble)\");\n}\n\n\n/** Moves stream pointer to begin of postamble */\nvoid BasicDVIReader::goToPostamble () {\n\tclearStream();\n\tif (!isStreamValid())\n\t\tthrowDVIException(\"invalid DVI file (missing postamble)\");\n\n\tseek(-1, ios::end);  // stream pointer to last byte\n\tint count=0;\n\twhile (peek() == DVI_FILL) {   // skip fill bytes\n\t\tseek(-1, ios::cur);\n\t\tcount++;\n\t}\n\tif (count < 4)  // the standard requires at least 4 trailing fill bytes\n\t\tthrowDVIException(\"missing fill bytes at end of file\");\n\n\tseek(-4, ios::cur);            // now at first byte of q (pointer to begin of postamble)\n\tuint32_t q = readUnsigned(4);  // pointer to begin of postamble\n\tseek(q);                       // now at begin of postamble\n}\n\n\n/** Reads and executes the commands of the postamble. */\nvoid BasicDVIReader::executePostamble () {\n\tgoToPostamble();\n\twhile (executeCommand() != OP_POSTPOST);  // executes all commands until post_post (= 249) is reached\n}\n\n\nvoid BasicDVIReader::executePostPost () {\n\tclearStream();  // reset all status bits\n\tif (!isStreamValid())\n\t\tthrowDVIException(\"invalid DVI file (missing postpost)\");\n\n\tseek(-1, ios::end);       // stream pointer to last byte\n\tint count=0;\n\twhile (peek() == DVI_FILL) {   // count trailing fill bytes\n\t\tseek(-1, ios::cur);\n\t\tcount++;\n\t}\n\tif (count < 4)  // the standard requires at least 4 trailing fill bytes\n\t\tthrowDVIException(\"missing fill bytes at end of file\");\n\n\tsetDVIVersion((DVIVersion)readUnsigned(1));\n}\n\n\nvoid BasicDVIReader::executeFontDefs () {\n\tgoToPostamble();\n\tseek(1+28, ios::cur); // now on first fontdef or postpost\n\tif (peek() != OP_POSTPOST)\n\t\twhile (executeCommand() != OP_POSTPOST);\n}\n\n\n/** Collects and records the file offsets of all bop commands. */\nvector<uint32_t> BasicDVIReader::collectBopOffsets () {\n\tstd::vector<uint32_t> bopOffsets;\n\tgoToPostamble();\n\tbopOffsets.push_back(tell());      // also add offset of postamble\n\treadByte();                         // skip post command\n\tuint32_t offset = readUnsigned(4);  // offset of final bop\n\twhile (int32_t(offset) != -1) {     // not yet on first bop?\n\t\tbopOffsets.push_back(offset);   // record offset\n\t\tseek(offset);                    // now on previous bop\n\t\tif (readByte() != OP_BOP)\n\t\t\tthrowDVIException(\"bop offset at \"+to_string(offset)+\" doesn't point to bop command\" );\n\t\tseek(40, ios::cur);              // skip the 10 \\count values => now on offset of previous bop\n\t\tuint32_t prevOffset = readUnsigned(4);\n\t\tif ((prevOffset >= offset && int32_t(prevOffset) != -1))\n\t\t\tthrowDVIException(\"invalid bop offset at \"+to_string(tell()-static_cast<streamoff>(4)));\n\t\toffset = prevOffset;\n\t}\n\tstd::reverse(bopOffsets.begin(), bopOffsets.end());\n\treturn bopOffsets;\n}\n\n\nvoid BasicDVIReader::executeAllPages () {\n\tif (_dviVersion == DVI_NONE)\n\t\texecutePostPost();   // get version ID from post_post\n\tseek(0);                // go to preamble\n\twhile (executeCommand() != OP_POST);  // execute all commands until postamble is reached\n}\n\n\nvoid BasicDVIReader::setDVIVersion (DVIVersion version) {\n\t_dviVersion = max(_dviVersion, version);\n\tswitch (_dviVersion) {\n\t\tcase DVI_STANDARD:\n\t\tcase DVI_PTEX:\n\t\tcase DVI_XDV5:\n\t\tcase DVI_XDV6:\n\t\tcase DVI_XDV7:\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrowDVIException(\"DVI version \" + to_string(_dviVersion) + \" not supported\");\n\t}\n}\n\n/////////////////////////////////////\n\n/** Executes preamble command.\n *  Format: pre i[1] num[4] den[4] mag[4] k[1] x[k] */\nvoid BasicDVIReader::cmdPre (int) {\n\tsetDVIVersion((DVIVersion)readUnsigned(1)); // identification number\n\tseek(12, ios::cur);           // skip numerator, denominator, and mag factor\n\tuint32_t k = readUnsigned(1); // length of following comment\n\tseek(k, ios::cur);            // skip comment\n}\n\n\n/** Executes postamble command.\n *  Format: post p[4] num[4] den[4] mag[4] l[4] u[4] s[2] t[2] */\nvoid BasicDVIReader::cmdPost (int) {\n\tseek(28, ios::cur);\n}\n\n\n/** Executes postpost command.\n *  Format: postpost q[4] i[1] 223's[>= 4] */\nvoid BasicDVIReader::cmdPostPost (int) {\n\tseek(4, ios::cur);\n\tsetDVIVersion((DVIVersion)readUnsigned(1));  // identification byte\n\twhile (readUnsigned(1) == DVI_FILL);  // skip fill bytes (223), eof bit should be set now\n}\n\n\n/** Executes bop (begin of page) command.\n *  Format: bop c0[+4] ... c9[+4] p[+4] */\nvoid BasicDVIReader::cmdBop (int)         {seek(44, ios::cur);}\nvoid BasicDVIReader::cmdEop (int)         {}\nvoid BasicDVIReader::cmdPush (int)        {}\nvoid BasicDVIReader::cmdPop (int)         {}\nvoid BasicDVIReader::cmdSetChar0 (int)    {}\nvoid BasicDVIReader::cmdSetChar (int len) {seek(len, ios::cur);}\nvoid BasicDVIReader::cmdPutChar (int len) {seek(len, ios::cur);}\nvoid BasicDVIReader::cmdSetRule (int)     {seek(8, ios::cur);}\nvoid BasicDVIReader::cmdPutRule (int)     {seek(8, ios::cur);}\nvoid BasicDVIReader::cmdRight (int len)   {seek(len, ios::cur);}\nvoid BasicDVIReader::cmdDown (int len)    {seek(len, ios::cur);}\nvoid BasicDVIReader::cmdX0 (int)          {}\nvoid BasicDVIReader::cmdY0 (int)          {}\nvoid BasicDVIReader::cmdW0 (int)          {}\nvoid BasicDVIReader::cmdZ0 (int)          {}\nvoid BasicDVIReader::cmdX (int len)       {seek(len, ios::cur);}\nvoid BasicDVIReader::cmdY (int len)       {seek(len, ios::cur);}\nvoid BasicDVIReader::cmdW (int len)       {seek(len, ios::cur);}\nvoid BasicDVIReader::cmdZ (int len)       {seek(len, ios::cur);}\nvoid BasicDVIReader::cmdNop (int)         {}\nvoid BasicDVIReader::cmdDir (int)         {seek(1, ios::cur);}\nvoid BasicDVIReader::cmdFontNum0 (int)    {}\nvoid BasicDVIReader::cmdFontNum (int len) {seek(len, ios::cur);}\nvoid BasicDVIReader::cmdXXX (int len)     {seek(readUnsigned(len), ios::cur);}\n\n\n/** Executes fontdef command.\n *  Format: fontdef k[len] c[4] s[4] d[4] a[1] l[1] n[a+l]\n * @param[in] len size of font number variable (in bytes) */\nvoid BasicDVIReader::cmdFontDef (int len) {\n\tseek(len+12, ios::cur);               // skip font number\n\tuint32_t pathlen  = readUnsigned(1);  // length of font path\n\tuint32_t namelen  = readUnsigned(1);  // length of font name\n\tseek(pathlen+namelen, ios::cur);\n}\n\n\n/** XDV extension: include image or pdf file.\n *  parameters: box[1] matrix[4][6] p[2] len[2] path[l] */\nvoid BasicDVIReader::cmdXPic (int) {\n\tseek(1+24+2, ios::cur);\n\tuint16_t len = readUnsigned(2);\n\tseek(len, ios::cur);\n}\n\n\nvoid BasicDVIReader::cmdXFontDef (int) {\n\tseek(4+4, ios::cur);\n\tuint16_t flags = readUnsigned(2);\n\tuint8_t len = readUnsigned(1);\n\tif (_dviVersion == DVI_XDV5)\n\t\tlen += readUnsigned(1)+readUnsigned(1);\n\tseek(len, ios::cur);\n\tif (_dviVersion >= DVI_XDV6)\n\t\tseek(4, ios::cur); // skip subfont index\n\tif (flags & 0x0200)   // colored?\n\t\tseek(4, ios::cur);\n\tif (flags & 0x1000)   // extend?\n\t\tseek(4, ios::cur);\n\tif (flags & 0x2000)   // slant?\n\t\tseek(4, ios::cur);\n\tif (flags & 0x4000)   // embolden?\n\t\tseek(4, ios::cur);\n\tif ((flags & 0x0800) && (_dviVersion == DVI_XDV5)) { // variations?\n\t\tuint16_t num_variations = readSigned(2);\n\t\tseek(4*num_variations, ios::cur);\n\t}\n}\n\n\n/** XDV extension: prints an array of characters where each character\n *  can take independent x and y coordinates.\n *  parameters: w[4] n[2] xy[(4+4)n] g[2n] */\nvoid BasicDVIReader::cmdXGlyphArray (int) {\n\tseek(4, ios::cur);\n\tuint16_t num_glyphs = readUnsigned(2);\n\tseek(10*num_glyphs, ios::cur);\n}\n\n\n/** XDV extension: prints an array/string of characters where each character\n *  can take independent x coordinates whereas all share a single y coordinate.\n *  parameters: w[4] n[2] x[4n] y[4] g[2n] */\nvoid BasicDVIReader::cmdXGlyphString (int) {\n\tseek(4, ios::cur);\n\tuint16_t num_glyphs = readUnsigned(2);\n\tseek(6*num_glyphs, ios::cur);\n}\n\n\n/** XDV extension: Same as cmdXGlyphArray plus a leading array of UTF-16 characters\n *  that specify the \"actual text\" represented by the glyphs to be printed. It usually\n *  contains the text with special characters (like ligatures) expanded so that it\n *  can be used for text search, plain text copy & paste etc. This XDV command was\n *  introduced with XeTeX 0.99995 and can be triggered by <tt>\\\\XeTeXgenerateactualtext1</tt>.\n *  parameters: l[2] t[2l] w[4] n[2] xy[8n] g[2n] */\nvoid BasicDVIReader::cmdXTextAndGlyphs (int) {\n\tuint16_t l = readUnsigned(2);\n\tseek(2*l, ios::cur);\n\tcmdXGlyphArray(0);\n}\n"
  },
  {
    "path": "src/BasicDVIReader.hpp",
    "content": "/*************************************************************************\n** BasicDVIReader.hpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef BASICDVIREADER_HPP\n#define BASICDVIREADER_HPP\n\n#include <cstdint>\n\n#include \"Matrix.hpp\"\n#include \"MessageException.hpp\"\n#include \"StreamReader.hpp\"\n\nstruct DVIException : MessageException {\n\texplicit DVIException (const std::string &msg) : MessageException(msg) {}\n};\n\n\nstruct DVIPrematureEOFException : DVIException {\n\texplicit DVIPrematureEOFException () : DVIException(\"premature end of DVI stream\") {}\n};\n\n\n/** This class provides the basic functionality to read a DVI file.\n *  It just skips all DVI commands and apply any semantic to it. The latter must\n *  be realized by deriving a separate class that implements the cmdXXX template\n *  methods. These are low-level functions that represent the DVI commands and\n *  require to read and evaluate the correct portion of data from the DVI stream.\n *  Since the DVI commands are almost skipped by advancing the file pointer,\n *  running through a DVI file is pretty fast. */\nclass BasicDVIReader : public StreamReader {\n\tprotected:\n\t\tusing CommandHandler = void (BasicDVIReader::*)(int);\n\t\tenum DVIVersion {DVI_NONE=0, DVI_STANDARD=2, DVI_PTEX=3, DVI_XDV5=5, DVI_XDV6=6, DVI_XDV7=7};\n\t\tconst uint8_t OP_SETCHAR0=0, OP_SETCHAR127=127, OP_SET1=128, OP_BOP=139, OP_EOP=140, OP_FNTNUM0=171,\n\t\t\tOP_FNTNUM63=234, OP_PRE=247, OP_POST=248, OP_POSTPOST=249, OP_DIR=255, DVI_FILL=223;\n\n\tpublic:\n\t\texplicit BasicDVIReader (std::istream &is);\n\t\tvirtual void executeAllPages ();\n\t\tvirtual void executeFontDefs ();\n\t\tvirtual double getXPos () const      {return 0;}\n\t\tvirtual double getYPos () const      {return 0;}\n\t\tvirtual void finishLine ()           {}\n\t\tvirtual void translateToX (double x) {}\n\t\tvirtual void translateToY (double y) {}\n\t\tvirtual int stackDepth () const   {return 0;}\n\t\tvirtual Matrix getPageTransformation () const {return Matrix(1);}\n\t\tvirtual unsigned currentPageNumber () const {return 0;}\n\n\tprotected:\n\t\tvoid throwDVIException (const std::string &msg) const;\n\t\tvoid setDVIVersion (DVIVersion version);\n\t\tDVIVersion getDVIVersion () const {return _dviVersion;}\n\t\tvirtual int evalCommand (CommandHandler &handler, int &param);\n\t\tvirtual int executeCommand ();\n\t\tvoid executePreamble ();\n\t\tvoid executePostamble ();\n\t\tvoid executePostPost ();\n\t\tvoid goToPostamble ();\n\t\tstd::vector<uint32_t> collectBopOffsets ();\n\t\tbool evalXDVOpcode (int op, CommandHandler &handler) const;\n\n\t\t// The following template methods represent the single DVI commands. They\n\t\t// must read the correct chunk of data from the input stream in order to\n\t\t// process the DVI file correctly.\n\t\tvirtual void cmdSetChar0 (int c);\n\t\tvirtual void cmdSetChar (int len);\n\t\tvirtual void cmdPutChar (int len);\n\t\tvirtual void cmdSetRule (int len);\n\t\tvirtual void cmdPutRule (int len);\n\t\tvirtual void cmdNop (int len);\n\t\tvirtual void cmdBop (int len);\n\t\tvirtual void cmdEop (int len);\n\t\tvirtual void cmdPush (int len);\n\t\tvirtual void cmdPop (int len);\n\t\tvirtual void cmdDir (int len);\n\t\tvirtual void cmdRight (int len);\n\t\tvirtual void cmdDown (int len);\n\t\tvirtual void cmdX0 (int len);\n\t\tvirtual void cmdY0 (int len);\n\t\tvirtual void cmdW0 (int len);\n\t\tvirtual void cmdZ0 (int len);\n\t\tvirtual void cmdX (int len);\n\t\tvirtual void cmdY (int len);\n\t\tvirtual void cmdW (int len);\n\t\tvirtual void cmdZ (int len);\n\t\tvirtual void cmdFontDef (int len);\n\t\tvirtual void cmdFontNum0 (int n);\n\t\tvirtual void cmdFontNum (int len);\n\t\tvirtual void cmdXXX (int len);\n\t\tvirtual void cmdPre (int len);\n\t\tvirtual void cmdPost (int len);\n\t\tvirtual void cmdPostPost (int len);\n\t\tvirtual void cmdXFontDef (int len);       // XDV only\n\t\tvirtual void cmdXGlyphArray (int len);    // XDV only\n\t\tvirtual void cmdXGlyphString (int len);   // XDV version 5 only\n\t\tvirtual void cmdXPic (int len);           // XDV version 5 only\n\t\tvirtual void cmdXTextAndGlyphs (int len); // XDV version 7 only\n\n\tprivate:\n\t\tDVIVersion _dviVersion;  ///< DVI version of file being processed\n};\n\n#endif\n"
  },
  {
    "path": "src/Bezier.cpp",
    "content": "/*************************************************************************\n** Bezier.cpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <utility>\n#include \"algorithm.hpp\"\n#include \"Bezier.hpp\"\n#include \"Matrix.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\nQuadBezier::QuadBezier () {\n\t_points[0] = _points[1] = _points[2]  = DPair(0, 0);\n}\n\n\nQuadBezier::QuadBezier (const DPair &p0, const DPair &p1, const DPair &p2) {\n\tsetPoints(p0, p1, p2);\n}\n\n\nvoid QuadBezier::setPoints(const DPair &p0, const DPair &p1, const DPair &p2) {\n\t_points[0] = p0;\n\t_points[1] = p1;\n\t_points[2] = p2;\n}\n\n\n/** Returns the value (curve point) at t. */\nDPair QuadBezier::valueAt (double t) const {\n\tconst double s = 1-t;\n\treturn _points[0]*s*s + _points[1]*2.0*s*t + _points[2]*t*t;\n}\n\n\n/** Returns the value of the first derivative of the curve at t. */\nDPair QuadBezier::derivativeAt (double t) const {\n\treturn _points[0]*(2*t-2) + _points[1]*(2-4*t) + _points[2]*(2*t);\n}\n\n\n/** Returns the arc length of the curve from 0 to t. */\ndouble QuadBezier::arclen (double t) const {\n\treturn math::integral(0, t, 20, [this](double t) -> double {\n\t\tDPair deriv = derivativeAt(t);\n\t\treturn sqrt(deriv.x()*deriv.x() + deriv.y()*deriv.y());\n\t});\n}\n\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nCubicBezier::CubicBezier () {\n\t_points[0] = _points[1] = _points[2] = _points[3] = DPair(0, 0);\n}\n\n\nCubicBezier::CubicBezier (const DPair &p0, const DPair &p1, const DPair &p2, const DPair &p3) {\n\tsetPoints(p0, p1, p2, p3);\n}\n\n\n/** Creates a subcurve of a given Bézier curve.\n *  @param[in] source original curve to be clipped\n *  @param[in] t0 'time' parameter \\f$\\in[0,1]\\f$ of source curve where the subcurve starts\n *  @param[in] t1 'time' parameter \\f$\\in[0,1]\\f$ of source curve where the subcurve ends */\nCubicBezier::CubicBezier (const CubicBezier &source, double t0, double t1) {\n\tif (t0 == t1)\n\t\t_points[0] = _points[1] = _points[2] = _points[3] = source.valueAt(t0);\n\telse {\n\t\tif (t0 > t1)\n\t\t\tswap(t0, t1);\n\t\tif (t0 == 0)\n\t\t\tsource.subdivide(t1, this, nullptr);\n\t\telse if (t1 == 1)\n\t\t\tsource.subdivide(t0, nullptr, this);\n\t\telse {\n\t\t\tCubicBezier subcurve;\n\t\t\tsource.subdivide(t0, nullptr, &subcurve);\n\t\t\tsubcurve.subdivide((t1-t0)/(1-t0), this, nullptr);\n\t\t}\n\t}\n}\n\n\n/** Creates a cubic Bézier from a quadratic one. */\nCubicBezier::CubicBezier (const QuadBezier &qbezier) {\n\tconst DPair &p0 = qbezier.point(0);\n\tconst DPair &p1 = qbezier.point(1);\n\tconst DPair &p2 = qbezier.point(2);\n\tsetPoints(p0, p0+(p1-p0)*2.0/3.0, p2+(p1-p2)*2.0/3.0, p2);\n}\n\n\nvoid CubicBezier::setPoints(const DPair &p0, const DPair &p1, const DPair &p2, const DPair &p3) {\n\t_points[0] = p0;\n\t_points[1] = p1;\n\t_points[2] = p2;\n\t_points[3] = p3;\n}\n\n\nvoid CubicBezier::reverse() {\n\tswap(_points[0], _points[3]);\n\tswap(_points[1], _points[2]);\n}\n\n\nDPair CubicBezier::valueAt (double t) const {\n\tconst double s = 1-t;\n\treturn _points[0]*s*s*s + _points[1]*3.0*s*s*t + _points[2]*3.0*s*t*t + _points[3]*t*t*t;\n}\n\n\n/** Returns a value of the Bézier curve's blossom representation. */\nDPair CubicBezier::blossomValue (double u, double v, double w) const {\n\tconst double uv = u*v;\n\tconst double uw = u*w;\n\tconst double vw = v*w;\n\tconst double uvw = u*v*w;\n\treturn _points[0]*(1.0-u-v-w+uv+uw+vw-uvw)\n\t\t+_points[1]*(u+v+w-2.0*(uv+uw+vw)+3.0*uvw)\n\t\t+_points[2]*(uv+uw+vw-3.0*uvw)\n\t\t+_points[3]*uvw;\n}\n\n\n/** Splits the curve at t into two sub-curves. */\nvoid CubicBezier::subdivide (double t, CubicBezier *bezier1, CubicBezier *bezier2) const {\n\tconst double s = 1-t;\n\tDPair p01   = _points[0]*s + _points[1]*t;\n\tDPair p12   = _points[1]*s + _points[2]*t;\n\tDPair p23   = _points[2]*s + _points[3]*t;\n\tDPair p012  = p01*s + p12*t;\n\tDPair p123  = p12*s + p23*t;\n\tDPair p0123 = p012*s + p123*t;\n\tif (bezier1)\n\t\tbezier1->setPoints(_points[0], p01, p012, p0123);\n\tif (bezier2)\n\t\tbezier2->setPoints(p0123, p123, p23, _points[3]);\n}\n\n\n/** Approximates the current Bézier curve by a sequence of line segments.\n *  This is done by subdividing the curve several times using De Casteljau's algorithm.\n *  If a sub-curve is almost flat, i.e. \\f$\\sum\\limits_{k=0}^2 |p_{k+1}-p_k| - |p_3-p_0| < \\delta\\f$,\n *  the curve is not further subdivided.\n *  @param[in] delta threshold where to stop further subdivisions (see description above)\n *  @param[out] p the resulting sequence of points defining the start/end points of the line segments\n *  @param[out] t corresponding curve parameters of the approximated points p: \\f$ b(t_i)=p_i \\f$\n *  @return number of points in vector p */\nint CubicBezier::approximate (double delta, std::vector<DPair> &p, vector<double> *t) const {\n\tp.push_back(_points[0]);\n\tif (t)\n\t\tt->push_back(0);\n\treturn approximate(delta, 0, 1, p, t);\n}\n\n\nint CubicBezier::approximate (double delta, double t0, double t1, vector<DPair> &p, vector<double> *t) const {\n\t// compute distance of adjacent control points\n\tconst double l01 = (_points[1]-_points[0]).length();\n\tconst double l12 = (_points[2]-_points[1]).length();\n\tconst double l23 = (_points[3]-_points[2]).length();\n\tconst double l03 = (_points[3]-_points[0]).length();\n\tif (l01+l12+l23-l03 < delta) { // is curve flat enough?\n\t\tp.push_back(_points[3]);    // => store endpoint\n\t\tif (t)\n\t\t\tt->push_back(t1);\n\t}\n\telse {\n\t\t// subdivide curve at b(0.5) and approximate the resulting parts separately\n\t\tCubicBezier b1, b2;\n\t\tsubdivide(0.5, &b1, &b2);\n\t\tdouble tmid = (t0+t1)/2;\n\t\tb1.approximate(delta, t0, tmid, p, t);\n\t\tb2.approximate(delta, tmid, t1, p, t);\n\t}\n\treturn static_cast<int>(p.size());\n}\n\n\n/** Returns the signed area of the triangle (p1, p2, p3). */\nstatic inline double signed_area (const DPair &p1, const DPair &p2, const DPair &p3) {\n\treturn ((p2.x()-p1.x())*(p3.y()-p1.y()) - (p3.x()-p1.x())*(p2.y()-p1.y()))/2.0;\n}\n\n\nstatic inline double dot_prod (const DPair &p1, const DPair &p2) {\n\treturn p1.x()*p2.x() + p1.y()*p2.y();\n}\n\n\n/** Returns true if p3 is located between p1 and p2, i.e. p3 lays almost on the line\n *  between p1 and p2. */\nstatic bool between (const DPair &p1, const DPair &p2, const DPair &p3, double delta) {\n\tdouble sqr_dist = dot_prod(p2-p1, p2-p1);\n\tdouble factor = sqr_dist == 0.0 ? 1.0 : sqr_dist;\n\tdouble area2 = abs(signed_area(p1, p2, p3));\n\treturn area2*area2/factor < delta    // does p3 lay almost on the line through p1 and p2...\n\t\t&& min(p1.x(), p2.x()) <= p3.x()  // ...and on or inside the rectangle spanned by p1 and p2?\n\t\t&& max(p1.x(), p2.x()) >= p3.x()\n\t\t&& min(p1.y(), p2.y()) <= p3.y()\n\t\t&& max(p1.y(), p2.y()) >= p3.y();\n}\n\n\nstatic inline bool near (const DPair &p1, const DPair &p2, double delta) {\n\tDPair diff = p2-p1;\n\treturn abs(diff.x()) < delta && abs(diff.y()) < delta;\n}\n\n\n/** Tries to reduce the degree of the Bézier curve. This only works if the number of\n *  control points can be reduces without changing the shape of the curve significantly.\n *  @param[in] delta deviation tolerance\n *  @param[in] p control points of the reduced curve\n *  @return degree of the reduced curve */\nint CubicBezier::reduceDegree (double delta, vector<DPair> &p) const {\n\tp.clear();\n\tif (near(_points[0], _points[1], delta) && near(_points[0], _points[2], delta) && near(_points[0], _points[3], delta))\n\t\tp.push_back(_points[0]);\n\telse if (between(_points[0], _points[3], _points[1], delta) && between(_points[0], _points[3], _points[2], delta)) {\n\t\tp.push_back(_points[0]);\n\t\tp.push_back(_points[3]);\n\t}\n\telse if (near((_points[1]-_points[0])*1.5+_points[0], (_points[2]-_points[3])*1.5+_points[3], delta)) {\n\t\tp.push_back(_points[0]);\n\t\tp.push_back((_points[1]-_points[0])*1.5 + _points[0]);\n\t\tp.push_back(_points[3]);\n\t}\n\telse {\n\t\tp.resize(4);\n\t\tfor (int i=0; i < 4; i++)\n\t\t\tp[i] = _points[i];\n\t}\n\treturn static_cast<int>(p.size()-1);\n}\n\n\n/** Approximates the cubic Bézier curve by a sequence of quadratic ones.\n *  @param[in] precision specifies the precision of the approximation\n *  @param[out] splitParams parameters t where the curve was split\n *  @return map containing the split parameters t_n together with the qudratic curves */\nvector<QuadBezier> CubicBezier::toQuadBeziers (double precision, vector<double> *splitParams) const {\n\tvector<QuadBezier> qbeziers;\n\ttoQuadBeziers(0, 1, precision, qbeziers, splitParams);\n\treturn qbeziers;\n}\n\n\n/** Returns the \"mid-point approximation\" of this cubic Bézier. */\nQuadBezier CubicBezier::midpointApproximation () const {\n\t DPair p0 = (_points[1]*3.0 - _points[0])/2.0;\n\t DPair p1 = (_points[2]*3.0 - _points[3])/2.0;\n\t return {_points[0], (p0+p1)/2.0, _points[3]};\n}\n\n\n/** Approximates a segment of a cubic Bézier curve by a sequence of quadratic curves.\n *  The quadratic segments are computed by adaptive subdivision of the cubic curve\n *  as described at http://www.caffeineowl.com/graphics/2d/vectorial/cubic2quad01.html\n *  @param[in] t0 curve parameter of the segment's start point\n *  @param[in] t1 curve parameter of the segment's end point\n *  @param[in] precision maximum allowed distance between the curve points b(t) and the\n *  \tcorresponding approximated point c(t) on the quadratic curve\n *  @param[out] qbeziers the resulting quadratic curves sorted in ascending order by their split points\n *  @param[out] startParams the start parameters t[k] of the curves qbeziers[k] relative to *this. */\nvoid CubicBezier::toQuadBeziers (double t0, double t1, double precision, vector<QuadBezier> &qbeziers, vector<double> *startParams) const {\n\t// If -p0+3p1-3p2+p3 = 0, the degree of the curve is <= 2 and it's not necessary do any approximation.\n\t// In this case, the control point of the quadratic Bézier curve is (-p0+3p1)/2 = (3p2-p3)/2.\n\t// Otherwise, the distance d between q1:=(-p0+3p1)/2 and q2:=(3p2-p3)/2 is != 0.\n\t// Now we compute the quadratic Bézier with start point p0, end point p3, and control point (q1+q2)/2,\n\t// the \"mid-point approximation\" (MPA) of b.\n\t// The maximal distance between the points of the original curve b and the corresponding ones\n\t// on the MPA is d*sqrt(3)/18. The same computations can be done for the cubic curves we get\n\t// when subdividing b at a parameter t. The maximal distance of these curves to their MPA\n\t// is t^3*d*sqrt(3)/18.\n\t// Based on the formula for this distance we compute the split point tmax for a given precision\n\t// and check 3 cases:\n\t// * tmax >= 1:   curve is quadratic, return MPA of b\n\t// * tmax >= 0.5: split b at t=0.5, return the MPAs of both segments\n\t// * tmax < 0.5:  split b at tmax and 1-tmax, return the MPAs of the first and third segment,\n\t//                recurse the algorithm for the middle segment\n\tDPair q1 = (_points[1]*3.0 - _points[0])/2.0;\n\tDPair q2 = (_points[2]*3.0 - _points[3])/2.0;\n\tdouble dist = (q2-q1).length();\n\tdouble tmax3 = 18.0/sqrt(3.0)*precision/dist;  // the cube of tmax\n\tif (tmax3 >= 1.0) {\n\t\t// curve is already quadratic, no subdivision necessary, return MPA\n\t\tqbeziers.emplace_back(_points[0], (q1+q2)/2.0, _points[3]);\n\t\tif (startParams)\n\t\t\tstartParams->push_back(t0);\n\t}\n\telse if (tmax3 >= 0.125) { // tmax >= 0.5\n\t\t// split the curve at t=0.5 and compute the MPA for both segments\n\t\tCubicBezier cbezier1, cbezier2;\n\t\tsubdivide(0.5, &cbezier1, &cbezier2);\n\t\tqbeziers.emplace_back(cbezier1.midpointApproximation());\n\t\tqbeziers.emplace_back(cbezier2.midpointApproximation());\n\t\tif (startParams) {\n\t\t\tstartParams->push_back(t0);\n\t\t\tstartParams->push_back((t0+t1)/2);\n\t\t}\n\t}\n\telse { // tmax < 0.5\n\t\tdouble tmax = cbrt(tmax3);\n\t\tdouble smax = 1.0-tmax;\n\t\tdouble dt = t1-t0;\n\t\t// first segment can be approximated by its MPA\n\t\tqbeziers.emplace_back(CubicBezier(*this, 0, tmax).midpointApproximation());\n\t\tif (startParams)\n\t\t\tstartParams->push_back(t0);\n\t\t// recurse for middle segment\n\t\tCubicBezier(*this, tmax, smax).toQuadBeziers(t0+tmax*dt, t0+smax*dt, precision, qbeziers, startParams);\n\t\t// third segment can be approximated by its MPA\n\t\tqbeziers.emplace_back(CubicBezier(*this, smax, 1).midpointApproximation());\n\t\tif (startParams)\n\t\t\tstartParams->push_back(smax);\n\t}\n}\n\n\n/** Try to solve the quadratic equation ax^2 + bx + c = 0. */\nstatic bool solve_quadratic_equation (double a, double b, double c, double &x1, double &x2) {\n\tif (a == 0) {\n\t\tif (b == 0)\n\t\t\treturn false;\n\t\tx1 = x2 = -c/b;\n\t}\n\telse {\n\t\tdouble discr = b*b - 4*a*c;\n\t\tif (discr < 0)\n\t\t\treturn false;\n\t\tdouble p = -b/a/2;\n\t\tdouble r = sqrt(discr)/a/2;\n\t\tx1 = p+r;\n\t\tx2 = p-r;\n\t}\n\treturn true;\n}\n\n\n/** Returns a tight bounding box parallel to the x- and y-axis. */\nBoundingBox CubicBezier::getBBox () const {\n\tBoundingBox bbox;\n\t// coefficients of the derivative\n\tDPair pa = _points[3] - _points[2]*3.0 + _points[1]*3.0 - _points[0];\n\tDPair pb = (_points[2]-_points[1]*2.0+_points[0])*2.0;\n\tDPair pc = _points[1]-_points[0];\n\n\t// compute extrema for t > 0 and t < 1\n\tdouble t1, t2;\n\tif (solve_quadratic_equation(pa.x(), pb.x(), pc.x(), t1, t2)) {\n\t\tif (t1 > 0.001 && t1 < 0.999)\n\t\t\tbbox.embed(valueAt(t1));\n\t\tif (t1 != t2 && t2 > 0.001 && t2 < 0.999)\n\t\t\tbbox.embed(valueAt(t2));\n\t}\n\tif (solve_quadratic_equation(pa.y(), pb.y(), pc.y(), t1, t2)) {\n\t\tif (t1 > 0.001 && t1 < 0.999)\n\t\t\tbbox.embed(valueAt(t1));\n\t\tif (t1 != t2 && t2 > 0.001 && t2 < 0.999)\n\t\t\tbbox.embed(valueAt(t2));\n\t}\n\tbbox.embed(_points[0]);\n\tbbox.embed(_points[3]);\n\treturn bbox;\n}\n\n\nCubicBezier& CubicBezier::transform (const Matrix &matrix) {\n\talgo::transform(_points, begin(_points), [&matrix](const DPair &p) {\n\t\treturn matrix * p;\n\t});\n\treturn *this;\n}\n\n"
  },
  {
    "path": "src/Bezier.hpp",
    "content": "/*************************************************************************\n** Bezier.hpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef BEZIER_HPP\n#define BEZIER_HPP\n\n#include <vector>\n#include \"BoundingBox.hpp\"\n#include \"Pair.hpp\"\n\nclass Matrix;\n\nclass QuadBezier {\n\tpublic:\n\t\tQuadBezier ();\n\t\tQuadBezier (const DPair &p0, const DPair &p1, const DPair &p2);\n\t\tvoid setPoints (const DPair &p0, const DPair &p1, const DPair &p2);\n\t\tconst DPair& point (int i) const {return _points[i];}\n\t\tDPair valueAt (double t) const;\n\t\tDPair derivativeAt (double t) const;\n\t\tdouble arclen (double t=1.0) const;\n\n\tprivate:\n\t\tDPair _points[3];\n};\n\n\nclass CubicBezier {\n\tpublic:\n\t\tCubicBezier ();\n\t\t//CubicBezier (const DPair &p0, const DPair &p1, const DPair &p2);\n\t\tCubicBezier (const DPair &p0, const DPair &p1, const DPair &p2, const DPair &p3);\n\t\tCubicBezier (double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3);\n\t\tCubicBezier (const CubicBezier &source, double t0, double t1);\n\t\texplicit CubicBezier (const QuadBezier &qbezier);\n\t\tvoid setPoints (const DPair &p0, const DPair &p1, const DPair &p2, const DPair &p3);\n\t\tvoid reverse ();\n\t\tDPair valueAt (double t) const;\n\t\tDPair blossomValue (double u, double v, double w) const;\n\t\tvoid subdivide (double t, CubicBezier *bezier1, CubicBezier *bezier2) const;\n\t\tCubicBezier& transform (const Matrix &matrix);\n\t\tint approximate (double delta, std::vector<DPair> &p, std::vector<double> *t=nullptr) const;\n\t\tconst DPair& point (int i) const {return _points[i];}\n\t\tint reduceDegree (double delta, std::vector<DPair> &p) const;\n\t\tstd::vector<QuadBezier> toQuadBeziers (double delta, std::vector<double> *startParams=nullptr) const;\n\t\tBoundingBox getBBox () const;\n\n\tprotected:\n\t\tint approximate (double delta, double t0, double t1, std::vector<DPair> &p, std::vector<double> *t) const;\n\t\tvoid toQuadBeziers (double t0, double t1, double precision, std::vector<QuadBezier> &qbeziers, std::vector<double> *startParams) const;\n\t\tQuadBezier midpointApproximation () const;\n\n\tprivate:\n\t\tDPair _points[4];\n};\n\n#endif\n"
  },
  {
    "path": "src/BgColorSpecialHandler.cpp",
    "content": "/*************************************************************************\n** BgColorSpecialHandler.cpp                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"algorithm.hpp\"\n#include \"BgColorSpecialHandler.hpp\"\n#include \"ColorSpecialHandler.hpp\"\n#include \"SpecialActions.hpp\"\n\nusing namespace std;\n\n\n/** Collect all background color changes while preprocessing the DVI file.\n *  We need them in order to apply the correct background colors even if\n *  not all but only selected DVI pages are converted. */\nvoid BgColorSpecialHandler::preprocess (const string&, std::istream &is, SpecialActions &actions) {\n\tColor color = ColorSpecialHandler::readColor(is);\n\tif (_pageColors.empty() || _pageColors.back().second != color) {\n\t\tunsigned pageno = actions.getCurrentPageNumber();\n\t\tif (!_pageColors.empty() && _pageColors.back().first == pageno)\n\t\t\t_pageColors.back().second = color;\n\t\telse\n\t\t\t_pageColors.emplace_back(pageno, color);\n\t}\n}\n\n\nbool BgColorSpecialHandler::process (const string&, istream&, SpecialActions&) {\n\treturn true;\n}\n\n\nvoid BgColorSpecialHandler::dviBeginPage (unsigned pageno, SpecialActions &actions) {\n\t// Ensure that the background color of the preceding page is set as the\n\t// default background color of the current page because this special affects\n\t// the current and all subsequent pages until the next change.\n\t// See the documentation of the color package, section 3.5.\n\tif (_pageColors.empty())\n\t\treturn;\n\t// find number of page with bg color change not lower than the current one\n\tauto it = algo::lower_bound(_pageColors, PageColor(pageno, Color::BLACK));\n\tif (it != _pageColors.end() && it->first == pageno)\n\t\tactions.setBgColor(it->second);\n\telse if (it != _pageColors.begin())\n\t\tactions.setBgColor((--it)->second);\n}\n\n\nvector<const char*> BgColorSpecialHandler::prefixes () const {\n\tvector<const char*> pfx {\"background\"};\n\treturn pfx;\n}\n"
  },
  {
    "path": "src/BgColorSpecialHandler.hpp",
    "content": "/*************************************************************************\n** BgColorSpecialHandler.hpp                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef BGCOLORSPECIALHANDLER_HPP\n#define BGCOLORSPECIALHANDLER_HPP\n\n#include <vector>\n#include \"Color.hpp\"\n#include \"SpecialHandler.hpp\"\n\n\nclass BgColorSpecialHandler : public SpecialHandler {\n\tpublic:\n\t\tvoid preprocess (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tbool process (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tconst char* info () const override {return \"background color special\";}\n\t\tconst char* name () const override {return handlerName();}\n\t\tstatic const char* handlerName ()  {return \"bgcolor\";}\n\t\tstd::vector<const char*> prefixes () const override;\n\n\tprotected:\n\t\tvoid dviBeginPage (unsigned pageno, SpecialActions &actions) override;\n\n\tprivate:\n\t\tusing PageColor = std::pair<unsigned,Color>;  // page number and color\n\t\tstd::vector<PageColor> _pageColors;\n};\n\n#endif\n"
  },
  {
    "path": "src/Bitmap.cpp",
    "content": "/*************************************************************************\n** Bitmap.cpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <algorithm>\n#include <cstdlib>\n#include <limits>\n#include \"Bitmap.hpp\"\n\nusing namespace std;\n\n\n/** Constructs a Bitmap */\nBitmap::Bitmap (int minx, int maxx, int miny , int maxy) {\n\tresize(minx, maxx, miny, maxy);\n}\n\n\n/** Resizes the bitmap and clears all pixels.\n *  @param[in] minx index of leftmost pixel column\n *  @param[in] maxx index of rightmost pixel column\n *  @param[in] miny index of bottom row\n *  @param[in] maxy index of top row */\nvoid Bitmap::resize (int minx, int maxx, int miny , int maxy) {\n\t_rows = abs(maxy-miny)+1;\n\t_cols = abs(maxx-minx)+1;\n\t_xshift = minx;\n\t_yshift = miny;\n\t_bpr  = _cols/8 + (_cols % 8 ? 1 : 0);  // bytes per row\n\t_bytes.resize(_rows*_bpr);\n\tstd::fill(_bytes.begin(), _bytes.end(), 0);\n}\n\n\n/** Sets n pixels of row r to 1 starting at pixel c.\n *  @param[in] row number of row\n *  @param[in] col number of column (pixel)\n *  @param[in] n number of bits to be set */\nvoid Bitmap::setBits (int row, int col, int n) {\n\trow -= _yshift;\n\tcol -= _xshift;\n\tuint8_t *byte = &_bytes[row*_bpr + col/8];\n\tif (byte < &_bytes[0])\n\t\treturn;\n\tconst uint8_t *maxptr = &_bytes[0]+_bytes.size()-1;\n\twhile (n > 0 && byte <= maxptr) {\n\t\tint b = 7 - col%8;          // number of leftmost bit in current byte to be set\n\t\tint m = min(n, b+1);        // number of bits to be set in current byte\n\t\tint bitseq = (1 << m)-1;    // sequence of n set bits (bits 0..n-1 are set)\n\t\tbitseq <<= b-m+1;           // move bit sequence so that bit b is the leftmost set bit\n\t\t*byte |= uint8_t(bitseq);   // apply bit sequence to current byte\n\t\tbyte++;\n\t\tn -= m;\n\t\tcol += m;\n\t}\n}\n\n\nvoid Bitmap::forAllPixels (Callback &data) const {\n\tfor (int row=0; row < _rows ; row++) {\n\t\tfor (int col=0; col < _bpr; col++) {\n\t\t\tuint8_t byte = _bytes[row*_bpr+col];\n\t\t\tint x;\n\t\t\tfor (int b=7; (b >= 0) && ((x = 8*col+(7-b)) < _cols); b--)\n\t\t\t\tdata.pixel(x, row, bool(byte & (1 << b)), *this);\n\t\t}\n\t}\n\tdata.finish();\n}\n\n\nclass BBoxCallback : public Bitmap::Callback {\n\tpublic:\n\t\tint minx () const   {return _minx;}\n\t\tint miny () const   {return _miny;}\n\t\tint maxx () const   {return _maxx;}\n\t\tint maxy () const   {return _maxy;}\n\t\tbool empty () const {return !_changed;}\n\n\t\tvoid pixel (int x, int y, bool set, const Bitmap&) override {\n\t\t\tif (set) {\n\t\t\t\t_minx = min(_minx, x);\n\t\t\t\t_miny = min(_miny, y);\n\t\t\t\t_maxx = max(_maxx, x);\n\t\t\t\t_maxy = max(_maxy, y);\n\t\t\t\t_changed = true;\n\t\t\t}\n\t\t}\n\n\t\tvoid finish () override {\n\t\t\tif (empty())\n\t\t\t\t_minx = _miny = 0;\n\t\t}\n\n\tprivate:\n\t\tbool _changed = false;\n\t\tint _minx = numeric_limits<int>::max(), _miny=_minx;\n\t\tint _maxx = 0, _maxy = 0;\n};\n\n\n/** Computes the bounding box that spans all set pixels. */\nbool Bitmap::getBBox (int &minx, int &miny, int &maxx, int &maxy) const {\n\tBBoxCallback bboxCallback;\n\tforAllPixels(bboxCallback);\n\tminx = bboxCallback.minx();\n\tminy = bboxCallback.miny();\n\tmaxx = bboxCallback.maxx();\n\tmaxy = bboxCallback.maxy();\n\treturn !bboxCallback.empty();\n}\n\n\n/** Computes width and height of the bounding box that spans all set pixels. */\nvoid Bitmap::getExtent (int &w, int &h) const {\n\tint minx, miny, maxx, maxy;\n\tif (getBBox(minx, miny, maxx, maxy)) {\n\t\tw = maxx-minx+1;\n\t\th = maxy-miny+1;\n\t}\n\telse\n\t\tw = h = 0;\n}\n\n\n#if 0\nostream& Bitmap::write (ostream &os) const {\n\tfor (int r=_rows-1; r >= 0 ; r--) {\n\t\tfor (int c=0; c < _bpr; c++) {\n\t\t\tuint8_t byte = _bytes[r*_bpr+c];\n\t\t\tfor (int b=128; b; b>>=1)\n\t\t\t\tos << (byte & b ? '*' : '-');\n\t\t\tos << ' ';\n\t\t}\n\t\tos << endl;\n\t}\n\treturn os;\n}\n#endif\n"
  },
  {
    "path": "src/Bitmap.hpp",
    "content": "/*************************************************************************\n** Bitmap.hpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef BITMAP_HPP\n#define BITMAP_HPP\n\n#include <cstdint>\n#include <ostream>\n#include <vector>\n\n\nclass Bitmap {\n\tpublic:\n\t\tstruct Callback {\n\t\t\tvirtual ~Callback() =default;\n\t\t\tvirtual void pixel (int x, int y, bool set, Bitmap &bm) {}\n\t\t\tvirtual void pixel (int x, int y, bool set, const Bitmap &bm) {}\n\t\t\tvirtual void finish () {}\n\t\t};\n\n\tpublic:\n\t\tBitmap () =default;\n\t\tBitmap (int minx, int maxx, int miny , int maxy);\n\t\tvoid resize (int minx, int maxx, int miny , int maxy);\n\t\tvoid setBits(int row, int col, int n);\n\t\tconst uint8_t* rowPtr (int row) const {return &_bytes[row*_bpr];}\n\t\tint height () const                   {return _rows;}\n\t\tint width () const                    {return _cols;}\n\t\tint xshift () const                   {return _xshift;}\n\t\tint yshift () const                   {return _yshift;}\n\t\tint bytesPerRow () const              {return _bpr;}\n\t\tbool empty () const                   {return (!_rows && !_cols) || _bytes.empty();}\n\t\tbool getBBox (int &minx, int &miny, int &maxx, int &maxy) const;\n\t\tvoid getExtent (int &w, int &h) const;\n\t\tvoid forAllPixels (Callback &callback) const;\n\n\t\ttemplate <typename T>\n\t\tint copy (std::vector<T> &target, bool vflip=false) const;\n\n//\t\ttemplate <typename T>\n//\t\tvoid write (std::ostream &os, const std::vector<T> &v) const;\n\n//\t\tstd::ostream& write (std::ostream &os) const;\n\n\tprivate:\n\t\tint _rows=0, _cols=0;     ///< number of rows, columns\n\t\tint _xshift=0, _yshift=0; ///< horizontal/vertical shift\n\t\tint _bpr=0;               ///< number of bytes per row\n\t\tstd::vector<uint8_t> _bytes;\n};\n\n\n/** Copies the bitmap to a new target area and reorganizes the bits.\n *  @tparam T component type of target vector\n *  @param[out] target points to first T of new bitmap (must be deleted after usage)\n *  @param[in] vflip true if the new bitmap should be flipped vertically\n *  @return number of Ts per row */\ntemplate <typename T>\nint Bitmap::copy (std::vector<T> &target, bool vflip) const {\n\tconst int s = sizeof(T);\n\tconst int tpr = _bpr/s + (_bpr%s ? 1 : 0); // number of Ts per row\n\ttarget.resize(_rows*tpr);\n\tfor (int r=0; r < _rows; r++) {\n\t\tint targetrow = vflip ? _rows-r-1 : r;\n\t\tfor (int b=0; b < _bpr; b++) {\n\t\t\tT &t = target[targetrow*tpr + b/s];\n\t\t\tT chunk = static_cast<T>(_bytes[r*_bpr+b]) << (8*(s-1-b%s));\n\t\t\tif (b % s == 0)\n\t\t\t\tt = chunk;\n\t\t\telse\n\t\t\t\tt |= chunk;\n\t\t}\n\t}\n\treturn tpr;\n}\n\n\n/*\ntemplate <typename T>\nvoid Bitmap::write (std::ostream &os, const std::vector<T> &v) const {\n\tconst int s = sizeof(T);\n\tconst int tpr = _bpr/s + (_bpr%s ? 1 : 0); // number of Ts per row\n\tfor (int r=_rows-1; r >= 0; r--) {\n\t\tfor (int t=0; t < tpr; t++) {\n\t\t\tfor (T b=(T)1<<(8*s-1); b; b>>=1)\n\t\t\t\tos << ((v[r*tpr+t] & b) ? '*' : '-');\n\t\t\tos << ' ';\n\t\t}\n\t\tos << std::endl;\n\t}\n}*/\n\n#endif\n"
  },
  {
    "path": "src/BoundingBox.cpp",
    "content": "/*************************************************************************\n** BoundingBox.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <iterator>\n#include <sstream>\n#include \"algorithm.hpp\"\n#include \"BoundingBox.hpp\"\n#include \"Matrix.hpp\"\n#include \"utility.hpp\"\n#include \"SVGTree.hpp\"\n#include \"XMLNode.hpp\"\n#include \"XMLString.hpp\"\n\nusing namespace std;\n\n\nBoundingBox::BoundingBox ()\n\t: _ulx(0), _uly(0), _lrx(0), _lry(0), _valid(false), _locked(false)\n{\n}\n\n\nBoundingBox::BoundingBox (double ulxx, double ulyy, double lrxx, double lryy)\n\t: _ulx(min(ulxx,lrxx)), _uly(min(ulyy,lryy)),\n\t  _lrx(max(ulxx,lrxx)), _lry(max(ulyy,lryy)),\n\t  _valid(true), _locked(false)\n{\n}\n\n\nBoundingBox::BoundingBox (const DPair &p1, const DPair &p2)\n\t: _ulx(min(p1.x(), p2.x())), _uly(min(p1.y(), p2.y())),\n\t  _lrx(max(p1.x(), p2.x())), _lry(max(p1.y(), p2.y())),\n\t  _valid(true), _locked(false)\n{\n}\n\n\nBoundingBox::BoundingBox (const Length &ulxx, const Length &ulyy, const Length &lrxx, const Length &lryy)\n\t: _ulx(min(ulxx.bp(),lrxx.bp())), _uly(min(ulyy.bp(),lryy.bp())),\n\t  _lrx(max(ulxx.bp(),lrxx.bp())), _lry(max(ulyy.bp(),lryy.bp())),\n\t  _valid(true), _locked(false)\n{\n}\n\n\nBoundingBox::BoundingBox (const string &boxstr)\n\t: _ulx(0), _uly(0), _lrx(0), _lry(0), _valid(false), _locked(false)\n{\n\tset(boxstr);\n}\n\n\n/** Extracts a sequence of length values from a string like \"5cm, 2.4in, 0pt\".\n *  @param[in] boxstr whitespace and/or comma separated string of lengths.\n *  @return the extracted lengths */\nvector<Length> BoundingBox::extractLengths (string boxstr) {\n\tvector<Length> lengths;\n\tboxstr = util::replace(boxstr, \",\", \" \");\n\tboxstr = util::normalize_space(boxstr);\n\tvector<string> lengthStrings = util::split(boxstr, \" \");\n\talgo::copy_if(lengthStrings, back_inserter(lengths), std::not1(util::IsEmptyString()));\n\treturn lengths;\n}\n\n\n/** Sets or modifies the bounding box. If 'boxstr' consists of 4 length values,\n *  they denote the absolute position of two diagonal corners of the box. In case\n *  of a single length value l the current box is enlarged by adding (-l,-l) the upper\n *  left and (l,l) to the lower right corner.\n *  @param[in] boxstr whitespace and/or comma separated string of lengths. */\nvoid BoundingBox::set (const string &boxstr) {\n\tvector<Length> coord = extractLengths(boxstr);\n\tset(coord);\n}\n\n\nvoid BoundingBox::set (const std::vector<Length> &coord) {\n\tswitch (coord.size()) {\n\t\tcase 1:\n\t\t\t_ulx -= coord[0].bp();\n\t\t\t_uly -= coord[0].bp();\n\t\t\t_lrx += coord[0].bp();\n\t\t\t_lry += coord[0].bp();\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t_ulx -= coord[0].bp();\n\t\t\t_uly -= coord[1].bp();\n\t\t\t_lrx += coord[0].bp();\n\t\t\t_lry += coord[1].bp();\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\t_ulx = min(coord[0].bp(), coord[2].bp());\n\t\t\t_uly = min(coord[1].bp(), coord[3].bp());\n\t\t\t_lrx = max(coord[0].bp(), coord[2].bp());\n\t\t\t_lry = max(coord[1].bp(), coord[3].bp());\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow BoundingBoxException(\"1, 2 or 4 length parameters expected\");\n\t}\n\t_valid = true;\n}\n\n\n/** Enlarges the box so that point (x,y) is enclosed. */\nvoid BoundingBox::embed (double x, double y) {\n\tif (!_locked) {\n\t\tif (_valid) {\n\t\t\tif (x < _ulx)\n\t\t\t\t_ulx = x;\n\t\t\telse if (x > _lrx)\n\t\t\t\t_lrx = x;\n\t\t\tif (y < _uly)\n\t\t\t\t_uly = y;\n\t\t\telse if (y > _lry)\n\t\t\t\t_lry = y;\n\t\t}\n\t\telse {\n\t\t\t_ulx = _lrx = x;\n\t\t\t_uly = _lry = y;\n\t\t\t_valid = true;\n\t\t}\n\t}\n}\n\n\n/** Enlarges the box so that the given bounding box is enclosed. */\nvoid BoundingBox::embed (const BoundingBox &bbox) {\n\tif (!_locked && bbox._valid) {\n\t\tif (_valid) {\n\t\t\tembed(bbox._ulx, bbox._uly);\n\t\t\tembed(bbox._lrx, bbox._lry);\n\t\t}\n\t\telse {\n\t\t\t_ulx = bbox._ulx;\n\t\t\t_uly = bbox._uly;\n\t\t\t_lrx = bbox._lrx;\n\t\t\t_lry = bbox._lry;\n\t\t\t_valid = true;\n\t\t}\n\t}\n}\n\n\n/** Embeds a virtual circle into the box and enlarges it accordingly.\n * @param[in] c center of the circle\n * @param[in] r radius of the circle */\nvoid BoundingBox::embed (const DPair &c, double r) {\n\tembed(BoundingBox(c.x()-r, c.y()-r, c.x()+r, c.y()+r));\n}\n\n\n/** Expands the box in all four directions by a given value. */\nvoid BoundingBox::expand (double m) {\n\tif (!_locked) {\n\t\t_ulx -= m;\n\t\t_uly -= m;\n\t\t_lrx += m;\n\t\t_lry += m;\n\t}\n}\n\n\n/** Intersects the current box with bbox and applies the result to *this.\n *  If both boxes are disjoint, *this is not altered.\n *  @param[in] bbox box to intersect with\n *  @return false if *this is locked or both boxes are disjoint */\nbool BoundingBox::intersect (const BoundingBox &bbox) {\n\t// check if the two boxes are disjoint\n\tif (_locked || _lrx < bbox._ulx || _lry < bbox._uly || _ulx > bbox._lrx || _uly > bbox._lry)\n\t\treturn false;\n\t// not disjoint: compute the intersection\n\t_ulx = max(_ulx, bbox._ulx);\n\t_uly = max(_uly, bbox._uly);\n\t_lrx = min(_lrx, bbox._lrx);\n\t_lry = min(_lry, bbox._lry);\n\treturn true;\n}\n\n\nvoid BoundingBox::operator += (const BoundingBox &bbox) {\n\tif (!_locked) {\n\t\t_ulx += bbox._ulx;\n\t\t_uly += bbox._uly;\n\t\t_lrx += bbox._lrx;\n\t\t_lry += bbox._lry;\n\t}\n}\n\n\nstatic inline bool almost_equal (double v1, double v2) {\n\treturn abs(v1-v2) < 1e-10;\n}\n\n\nbool BoundingBox::operator == (const BoundingBox &bbox) const {\n\treturn _valid && bbox._valid\n\t\t&& almost_equal(_ulx, bbox._ulx)\n\t\t&& almost_equal(_uly, bbox._uly)\n\t\t&& almost_equal(_lrx, bbox._lrx)\n\t\t&& almost_equal(_lry, bbox._lry);\n}\n\n\nvoid BoundingBox::scale (double sx, double sy) {\n\tif (!_locked) {\n\t\t_ulx *= sx;\n\t\t_lrx *= sx;\n\t\tif (sx < 0)\tswap(_ulx, _lrx);\n\t\t_uly *= sy;\n\t\t_lry *= sy;\n\t\tif (sy < 0)\tswap(_uly, _lry);\n\t}\n}\n\n\nvoid BoundingBox::transform (const Matrix &tm) {\n\tif (!_locked) {\n\t\tDPair ul = tm * DPair(_ulx, _uly);\n\t\tDPair lr = tm * DPair(_lrx, _lry);\n\t\tDPair ll = tm * DPair(_ulx, _lry);\n\t\tDPair ur = tm * DPair(_lrx, _uly);\n\t\t_ulx = min(min(ul.x(), lr.x()), min(ur.x(), ll.x()));\n\t\t_uly = min(min(ul.y(), lr.y()), min(ur.y(), ll.y()));\n\t\t_lrx = max(max(ul.x(), lr.x()), max(ur.x(), ll.x()));\n\t\t_lry = max(max(ul.y(), lr.y()), max(ur.y(), ll.y()));\n\t}\n}\n\n\nstring BoundingBox::svgViewBoxString () const {\n\tostringstream oss;\n\toss << XMLString(_ulx) << ' ' << XMLString(_uly) << ' ' << XMLString(width()) << ' ' << XMLString(height());\n\treturn oss.str();\n}\n\n\nostream& BoundingBox::write (ostream &os) const {\n\tos << '('  << _ulx << \", \" << _uly << \", \" << _lrx << \", \" << _lry << ')';\n\tif (!_valid)\n\t\tos << \" (invalid)\";\n\telse if (_locked)\n\t\tos << \" (locked)\";\n\treturn os;\n}\n\n\nunique_ptr<XMLElement> BoundingBox::createSVGRect () const {\n\tauto rect = util::make_unique<XMLElement>(\"rect\");\n\trect->addAttribute(\"x\", minX());\n\trect->addAttribute(\"y\", minY());\n\trect->addAttribute(\"width\", width());\n\trect->addAttribute(\"height\", height());\n\trect->addAttribute(\"fill\", \"none\");\n\treturn rect;\n}\n\n\nunique_ptr<XMLElement> BoundingBox::createSVGPath () const {\n\tGraphicsPath<double> path;\n\tpath.rect(minX(), minY(), maxX(), maxY());\n\tostringstream oss;\n\tpath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);\n\tauto pathElem = util::make_unique<XMLElement>(\"path\");\n\tpathElem->addAttribute(\"d\", oss.str());\n\treturn pathElem;\n}\n"
  },
  {
    "path": "src/BoundingBox.hpp",
    "content": "/*************************************************************************\n** BoundingBox.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef BOUNDINGBOX_HPP\n#define BOUNDINGBOX_HPP\n\n#include <memory>\n#include <ostream>\n#include <string>\n#include <vector>\n#include \"Length.hpp\"\n#include \"MessageException.hpp\"\n#include \"Pair.hpp\"\n\n\nclass Matrix;\nclass XMLElement;\n\n\nstruct BoundingBoxException : MessageException {\n\texplicit BoundingBoxException (const std::string &msg) : MessageException(msg) {}\n};\n\n\nclass BoundingBox {\n\tpublic:\n\t\tBoundingBox ();\n\t\tBoundingBox (double ulxx, double ulyy, double lrxx, double lryy);\n\t\tBoundingBox (const DPair &p1, const DPair &p2);\n\t\tBoundingBox (const Length &ulxx, const Length &ulyy, const Length &lrxx, const Length &lryy);\n\t\texplicit BoundingBox (const std::string &boxstr);\n\t\tvoid set (const std::string &boxstr);\n\t\tvoid set (const std::vector<Length> &lengths);\n\t\tvoid embed (double x, double y);\n\t\tvoid embed (const BoundingBox &bb);\n\t\tvoid embed (const DPair &p) {embed(p.x(), p.y());}\n\t\tvoid embed (const DPair &c, double r);\n\n\t\tstatic std::vector<Length> extractLengths (std::string boxstr);\n\n\t\ttemplate <typename T>\n\t\tvoid embed (const Pair<T> &p) {embed(p.x(), p.y());}\n\n\t\tvoid expand (double m);\n\t\tbool  intersect (const BoundingBox &bbox);\n\t\tdouble minX () const        {return _ulx;}\n\t\tdouble minY () const        {return _uly;}\n\t\tdouble maxX () const        {return _lrx;}\n\t\tdouble maxY () const        {return _lry;}\n\t\tdouble width () const       {return _lrx-_ulx;}\n\t\tdouble height () const      {return _lry-_uly;}\n\t\tbool valid() const          {return _valid;}\n\t\tbool locked() const         {return _locked;}\n\t\tvoid lock ()                {_locked = true;}\n\t\tvoid unlock ()              {_locked = false;}\n\t\tvoid invalidate ()          {_valid = false;}\n\t\tvoid operator += (const BoundingBox &bbox);\n\t\tbool operator == (const BoundingBox &bbox) const;\n\t\tbool operator != (const BoundingBox &bbox) const {return !(*this == bbox);}\n\t\tvoid scale (double sx, double sy);\n\t\tvoid transform (const Matrix &tm);\n\t\tstd::string svgViewBoxString () const;\n\t\tstd::ostream& write (std::ostream &os) const;\n\t\tstd::unique_ptr<XMLElement> createSVGRect () const;\n\t\tstd::unique_ptr<XMLElement> createSVGPath () const;\n\n\tprivate:\n\t\tdouble _ulx, _uly; ///< coordinates of upper left vertex (in PS point units)\n\t\tdouble _lrx, _lry; ///< coordinates of lower right vertex (in PS point units)\n\t\tbool _valid : 1;   ///< true if the box coordinates are properly set\n\t\tbool _locked : 1;  ///< if true, the box data is read-only\n};\n\n\ninline std::ostream& operator << (std::ostream &os, const BoundingBox &bbox) {\n\treturn bbox.write(os);\n}\n\n#endif\n"
  },
  {
    "path": "src/CLCommandLine.cpp",
    "content": "/*************************************************************************\n** CLCommandLine.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstring>\n#include <unordered_map>\n#include \"algorithm.hpp\"\n#include \"CLCommandLine.hpp\"\n#include \"version.hpp\"\n\nusing namespace CL;\nusing namespace std;\n\n\nCommandLine::CommandLine (const char *summary, const char *usage, const char *copyright)\n\t: _summary(summary), _usage(usage), _copyright(copyright)\n{\n}\n\n\nvoid CommandLine::parse (int argc, char **argv) {\n\tbool filesOnly = false;\n\tfor (int i=1; i < argc; i++) {\n\t\tistringstream iss(argv[i]);\n\t\tif (filesOnly || iss.peek() != '-')\n\t\t\t_files.emplace_back(argv[i]);\n\t\telse {\n\t\t\tiss.get();  // skip dash\n\t\t\tif (iss.peek() < 0)\n\t\t\t\t_singleDashParsed = true;\n\t\t\telse if (iss.peek() != '-')\n\t\t\t\tparseShortOption(iss, argc, argv, i);\n\t\t\telse {\n\t\t\t\tiss.get();             // skip dash\n\t\t\t\tif (iss.peek() == EOF) // \"--\" only, no following option name?\n\t\t\t\t\tfilesOnly = true;   // treat all following options as filenames\n\t\t\t\telse\n\t\t\t\t\tparseLongOption(iss);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nstatic void error (const Option &option, bool shortname, const string &msg) {\n\tostringstream oss;\n\toss << \"option \";\n\tif (shortname)\n\t\toss << '-' << option.shortName();\n\telse\n\t\toss << \"--\" << option.longName();\n\toss << \": \" << msg;\n\tthrow CommandLineException(oss.str());\n}\n\n\nstatic void type_error (const Option &option, bool shortname) {\n\tostringstream oss;\n\tswitch (option.argMode()) {\n\t\tcase Option::ArgMode::NONE:\n\t\t\terror(option, shortname, \"no argument expected\");\n\t\t\tbreak;\n\t\tcase Option::ArgMode::OPTIONAL:\n\t\t\toss << \"optional argument \";\n\t\t\tif (!option.argName().empty())\n\t\t\t\toss << \"'\" << option.argName() << \"' \";\n\t\t\toss << \"must be of \"+option.typeString()+\" type\";\n\t\t\terror(option, shortname, oss.str());\n\t\t\tbreak;\n\t\tdefault:\n\t\t\toss << option.typeString()+\" argument \";\n\t\t\tif (!option.argName().empty())\n\t\t\t\toss << \"'\" << option.argName() << \"' \";\n\t\t\toss << \"expected\";\n\t\t\terror(option, shortname, oss.str());\n\t}\n}\n\n\nvoid CommandLine::parseShortOption (istringstream &iss, int argc, char **argv, int &argn) const {\n\tbool combined = false;\n\tdo {\n\t\tchar shortname = static_cast<char>(iss.get());\n\t\tif (!isalnum(shortname))\n\t\t\tthrow CommandLineException(string(\"syntax error: -\")+shortname);\n\t\tif (Option *option = lookupOption(shortname)) {\n\t\t\tif (!combined || option->argMode() == Option::ArgMode::NONE) {\n\t\t\t\tif (option->argMode() == Option::ArgMode::REQUIRED && strlen(argv[argn]) == 2) { // required argument separated by whitespace?\n\t\t\t\t\tif (argn+1 < argc && argv[argn+1][0] != '-') {\n\t\t\t\t\t\tiss.clear();            // reset error flags\n\t\t\t\t\t\tiss.str(argv[++argn]);  // continue parsing with next command-line field\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!option->parse(iss, false))\n\t\t\t\t\ttype_error(*option, true);\n\t\t\t\tif (option->argMode() == Option::ArgMode::NONE)\n\t\t\t\t\tcombined = true;\n\t\t\t}\n\t\t\telse\n\t\t\t\tthrow CommandLineException(string(\"option -\")+ shortname + \" must be given separately\");\n\t\t}\n\t\telse\n\t\t\tthrow CommandLineException(string(\"unknown option -\")+shortname);\n\t}\n\twhile (combined && !iss.eof());\n}\n\n\nvoid CommandLine::parseLongOption (istream &is) const {\n\tstring optname;\n\twhile (isalnum(is.peek()) || (!optname.empty() && is.peek() == '-'))\n\t\toptname += char(is.get());\n\tif (optname.empty())\n\t\tthrow CommandLineException(\"unexpected character '\" + string(1, is.peek()) + \"' after '--'\");\n\tvector<Option*> options = lookupOption(optname);\n\tif (options.empty())\n\t\tthrow CommandLineException(\"unknown option --\"+optname);\n\tif (options.size() == 1) {\n\t\tif (!options[0]->parse(is, true))\n\t\t\ttype_error(*options[0], false);\n\t}\n\telse {  // is partially given option ambiguous?\n\t\talgo::sort(options, [](const Option *opt1, const Option *opt2) {\n\t\t\treturn opt1->longName() < opt2->longName();\n\t\t});\n\t\tstring msg = \"option --\" + optname + \" is ambiguous (\";\n\t\tmsg = algo::accumulate(options, msg, [](const string &str, const Option *opt) {\n\t\t\treturn str + opt->longName() + \", \";\n\t\t});\n\t\tmsg.pop_back();\n\t\tmsg.back() = ')';\n\t\tthrow CommandLineException(msg);\n\t}\n}\n\n\n/** Returns all options that match the given long name. */\nvector<Option*> CommandLine::lookupOption (const string &optname) const {\n\tvector<Option*> matches;\n\tauto len = optname.length();\n\tfor (OptSectPair optsect : options()) {\n\t\tif (optsect.first->longName() == optname) {  // exact match?\n\t\t\tmatches.clear();\n\t\t\tmatches.push_back(optsect.first);\n\t\t\tbreak;\n\t\t}\n\t\tif (optsect.first->longName().substr(0, len) == optname)  // partial match?\n\t\t\tmatches.push_back(optsect.first);\n\t}\n\treturn matches;\n}\n\n\n/** Returns the option that match the given short name. */\nOption* CommandLine::lookupOption (char optchar) const {\n\tauto it = algo::find_if(options(), [&](const OptSectPair &optsect) {\n\t\treturn optsect.first->shortName() == optchar;\n\t});\n\treturn (it != options().end()) ? it->first : nullptr;\n}\n\n\n/** Prints help text including summary of options.\n *  @param[in] os output stream the help text is printed to\n *  @param[in] mode output mode (0=section, 1=sorted by short options, 2=sorted by long options) */\nvoid CommandLine::help (ostream &os, int mode) const {\n\tos << PROGRAM_NAME << ' '<< PROGRAM_VERSION << \"\\n\\n\";\n\tos << _summary << \"\\n\\n\";\n\t// print usage info\n\tstring usage = _usage;\n\tint count=0;\n\twhile (!usage.empty()) {\n\t\tauto pos = usage.find('\\n');\n\t\tos << (count++ == 0 ? \"Usage: \" : \"       \") << PROGRAM_NAME << ' ' << usage.substr(0, pos) << '\\n';\n\t\tif (pos != string::npos)\n\t\t\tusage = usage.substr(pos+1);\n\t\telse\n\t\t\tusage.clear();\n\t}\n\tif (mode > 0)\n\t\tos << '\\n';\n\n\t// compute width of first column of help output\n\tunordered_map<Option*, pair<string,string>> linecols;\n\tsize_t col1width=0;\n\tfor (const OptSectPair &ospair : options()) {\n\t\tstring::size_type pos;\n\t\tstring line = ospair.first->helpline();\n\t\tif ((pos = line.find('\\t')) != string::npos) {\n\t\t\tlinecols.emplace(ospair.first, pair<string,string>(line.substr(0, pos), line.substr(pos+1)));\n\t\t\tcol1width = max(col1width, pos);\n\t\t}\n\t}\n\tif (mode > 0) {\n\t\tauto isless = +[](const OptSectPair &p1, const OptSectPair &p2) {\n\t\t\treturn p1.first->longName() < p2.first->longName();\n\t\t};\n\t\tif (mode == 1) {\n\t\t\tisless = [](const OptSectPair &p1, const OptSectPair &p2) {\n\t\t\t\tchar c1 = p1.first->shortName(), c2 = p2.first->shortName();\n\t\t\t\tif (c1 == c2)\n\t\t\t\t\treturn p1.first->longName() < p2.first->longName();\n\t\t\t\tif (tolower(c1) == tolower(c2))\n\t\t\t\t\treturn c1 > c2;  // lower case before upper case letters\n\t\t\t\treturn tolower(c1) < tolower(c2);\n\t\t\t};\n\t\t}\n\t\talgo::sort(options(), isless);\n\t}\n\n\t// print summary of options\n\tcol1width += 2;\n\tint sectno=-1;\n\tfor (const OptSectPair &ospair : options()) {\n\t\tif (mode == 0 && ospair.second != sectno) {  // first option in current section?\n\t\t\tsectno = ospair.second;\n\t\t\tif (section(sectno))\n\t\t\t\tos << '\\n' << section(sectno) << \":\\n\";\n\t\t}\n\t\tOption *opt = ospair.first;\n\t\tos << \"  \" << setw(col1width) << left << linecols[opt].first;\n\t\tos << setw(0) << linecols[opt].second << '\\n';\n\t}\n\tos << '\\n' << _copyright << '\\n';\n}\n"
  },
  {
    "path": "src/CLCommandLine.hpp",
    "content": "/*************************************************************************\n** CLCommandLine.hpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef CL_COMMANDLINE_HPP\n#define CL_COMMANDLINE_HPP\n\n#include <array>\n#include <ostream>\n#include <string>\n#include <sstream>\n#include <vector>\n#include \"CLOption.hpp\"\n#include \"MessageException.hpp\"\n\nnamespace CL {\n\nclass CommandLine {\n\tpublic:\n\t\tCommandLine (const char *summary, const char *usage, const char *copyright);\n\t\tvirtual ~CommandLine () =default;\n\t\tvoid parse (int argc, char **argv);\n\t\tvoid help (std::ostream &os, int mode=0) const;\n\t\tvoid addFilename (const std::string &fname) {_files.emplace_back(fname);}\n\t\tbool singleDashGiven () const {return _singleDashParsed;}\n\t\tconst std::vector<std::string>& filenames () const {return _files;}\n\n\tprotected:\n\t\tusing OptSectPair = std::pair<Option*,int>;\n\t\tvoid parseShortOption (std::istringstream &is, int argc, char **argv, int &argn) const;\n\t\tvoid parseLongOption (std::istream &is) const;\n\t\tvirtual std::vector<OptSectPair>& options () const =0;\n\t\tvirtual const char* section (size_t n) const {return nullptr;}\n\t\tOption* lookupOption (char optchar) const;\n\t\tstd::vector<Option*> lookupOption (const std::string &optname) const;\n\n\tprivate:\n\t\tconst char *_summary;\n\t\tconst char *_usage;\n\t\tconst char *_copyright;\n\t\tbool _singleDashParsed=false; ///< true if a single '-' w/o a following char was parsed\n\t\tstd::vector<std::string> _files;\n};\n\n\nstruct CommandLineException : MessageException {\n\texplicit CommandLineException (const std::string &msg) : MessageException(msg) {}\n};\n\n} // namespace CL\n\n#endif\n\n"
  },
  {
    "path": "src/CLOption.hpp",
    "content": "/*************************************************************************\n** CLOption.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef CL_OPTION_HPP\n#define CL_OPTION_HPP\n\n#include <iomanip>\n#include <sstream>\n#include <string>\n\nnamespace CL {\n\nclass Option {\n\tfriend class CommandLine;\n\tpublic:\n\t\tenum class ArgMode {NONE, OPTIONAL, REQUIRED};\n\n\tpublic:\n\t\tOption (const char *longname, char shortname, const char *summary)\n\t\t\t: _shortName(shortname), _longName(longname), _summary(summary), _given(false) {}\n\n\t\tvirtual ~Option () = default;\n\t\tvirtual std::string typeString () const  {return \"\";}\n\t\tvirtual ArgMode argMode () const         {return ArgMode::NONE;}\n\t\tvirtual bool given () const              {return _given;}\n\t\tvirtual char shortName () const          {return _shortName;}\n\t\tvirtual std::string longName () const    {return _longName;}\n\t\tvirtual std::string summary () const     {return _summary;}\n\t\tvirtual std::string argName () const     {return \"\";}\n\t\tvirtual std::string valueString () const {return \"\";}\n\n\t\tvirtual std::string helpline () const {\n\t\t\tstd::string line;\n\t\t\tif (_shortName != '\\0')\n\t\t\t\tline = std::string(\"-\") + _shortName + \", \";\n\t\t\telse\n\t\t\t\tline = \"    \";\n\t\t\tline += \"--\" + std::string(_longName);\n\t\t\tif (!argName().empty()) {\n\t\t\t\tif (argMode() == ArgMode::OPTIONAL)\n\t\t\t\t\tline += '[';\n\t\t\t\tline += '=';\n\t\t\t\tline += argName();\n\t\t\t\tif (argMode() == ArgMode::OPTIONAL)\n\t\t\t\t\tline += ']';\n\t\t\t}\n\t\t\tif (_summary) {\n\t\t\t\tline += '\\t';\n\t\t\t\tline += _summary;\n\t\t\t}\n\t\t\tif (argMode() != ArgMode::NONE && !valueString().empty())\n\t\t\t\tline += std::string(\" [\") + valueString() + \"]\";\n\t\t\treturn line;\n\t\t}\n\n\tprotected:\n\t\tvirtual bool parse (std::istream &is, bool longopt) {\n\t\t\tif (is.eof())\n\t\t\t\treturn given(argMode() != ArgMode::REQUIRED);\n\t\t\tif (argMode() == ArgMode::OPTIONAL && is.peek() == ' ')\n\t\t\t\treturn given(false);\n\t\t\tif (longopt && is.get() != '=')\n\t\t\t\treturn given(false);\n\t\t\treturn given(parseValue(is));\n\t\t}\n\n\t\tvirtual bool parseValue (std::istream &is) {\n\t\t\treturn is.peek() == EOF || argMode() == ArgMode::NONE;\n\t\t}\n\n\t\tbool given (bool val) {return _given = val;}\n\n\tprivate:\n\t\tchar _shortName;\n\t\tconst char *_longName;\n\t\tconst char*_summary;\n\t\tbool _given;\n};\n\n\ntemplate <typename T>\nconstexpr const char* typeString () {return \"unknown\";}\n\ntemplate<> constexpr const char* typeString<bool> ()        {return \"boolean\";}\ntemplate<> constexpr const char* typeString<int> ()         {return \"integer\";}\ntemplate<> constexpr const char* typeString<unsigned> ()    {return \"non-negative integer\";}\ntemplate<> constexpr const char* typeString<double> ()      {return \"floating point\";}\ntemplate<> constexpr const char* typeString<std::string> () {return \"string\";}\n\ntemplate <typename T>\nT parseValue (std::istream &is) {\n\tT value;\n\tis >> value;\n\treturn value;\n}\n\ntemplate<>\ninline std::string parseValue (std::istream &is) {\n\tis >> std::ws;\n\tstd::string str;\n\tstd::getline(is, str);\n\treturn str;\n}\n\n\ntemplate <typename T, Option::ArgMode mode>\nclass TypedOption : public Option {\n\tpublic:\n\t\tTypedOption (const char *longName, char shortName, const char *argName, T val, const char *summary)\n\t\t\t: Option(longName, shortName, summary), _argName(argName), _value(std::move(val)) {}\n\n\t\tTypedOption (const char *longName, char shortName, const char *argName, const char *summary)\n\t\t\t: Option(longName, shortName, summary), _argName(argName), _value() {}\n\n\t\tT value () const {return _value;}\n\t\tstd::string typeString () const override {return CL::typeString<T>();}\n\t\tstd::string argName() const override     {return _argName ? _argName : \"\";}\n\n\t\tstd::string valueString () const override {\n\t\t\tstd::ostringstream oss;\n\t\t\toss << _value;\n\t\t\treturn oss.str();\n\t\t}\n\n\t\tArgMode argMode () const override  {return mode;}\n\n\tprotected:\n\t\tbool parseValue (std::istream &is) override {\n\t\t\tT value = CL::parseValue<T>(is);\n\t\t\tif (!is.fail())\n\t\t\t\t_value = std::move(value);\n\t\t\treturn !is.fail() || (argMode() == ArgMode::OPTIONAL && is.eof());\n\t\t}\n\n\tprivate:\n\t\tconst char *_argName;\n\t\tT _value;\n};\n\n\ntemplate <Option::ArgMode mode>\nclass TypedOption<bool, mode> : public Option {\n\tpublic:\n\t\tTypedOption (const char *longName, char shortName, const char *argName, bool val, const char *summary)\n\t\t\t: Option(longName, shortName, summary), _argName(argName), _value(val) {}\n\n\t\tTypedOption (const char *longName, char shortName, const char *argName, const char *summary)\n\t\t\t: Option(longName, shortName, summary), _argName(argName), _value(false) {}\n\n\t\tbool value () const {return _value;}\n\t\tstd::string valueString () const override {return _value ? \"yes\" : \"no\";}\n\t\tArgMode argMode () const override  {return mode;}\n\t\tstd::string typeString () const override {return CL::typeString<bool>();}\n\t\tstd::string argName() const override     {return _argName ? _argName : \"\";}\n\n\tprotected:\n\t\tbool parseValue (std::istream &is) override {\n\t\t\tstd::string str;\n\t\t\tis >> str;\n\t\t\tif (is.fail())\n\t\t\t\treturn argMode() != ArgMode::REQUIRED;\n\t\t\tif (str == \"yes\" || str == \"y\" || str == \"true\" || str == \"1\")\n\t\t\t\t_value = true;\n\t\t\telse if (str == \"no\" || str == \"n\" || str == \"false\" || str == \"0\")\n\t\t\t\t_value = false;\n\t\t\telse\n\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\n\tprivate:\n\t\tconst char *_argName;\n\t\tbool _value;\n};\n\n} // namespace CL\n\n#endif\n"
  },
  {
    "path": "src/CMap.cpp",
    "content": "/*************************************************************************\n** CMap.cpp                                                             **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <sstream>\n#include \"algorithm.hpp\"\n#include \"CMap.hpp\"\n#include \"CMapManager.hpp\"\n#include \"FileFinder.hpp\"\n#include \"Unicode.hpp\"\n\nusing namespace std;\n\n\nconst char* CMap::path () const {\n\treturn FileFinder::instance().lookup(name(), \"cmap\", false);\n}\n\n\nconst FontEncoding* CMap::findCompatibleBaseFontMap (const PhysicalFont *font, CharMapID &charmapID) const {\n\treturn CMapManager::instance().findCompatibleBaseFontMap(font, this, charmapID);\n}\n\n//////////////////////////////////////////////////////////////////////\n\nvoid SegmentedCMap::addCIDRange (uint32_t first, uint32_t last, uint32_t cid) {\n\tif (uint32_t cp = Unicode::fromSurrogate(first))  // is 'first' a surrogate?\n\t\tfirst = cp;\n\tif (uint32_t cp = Unicode::fromSurrogate(last))   // is 'last' a surrogate?\n\t\tlast = cp;\n\t_cidranges.addRange(first, last, cid);\n}\n\n\nvoid SegmentedCMap::addBFRange (uint32_t first, uint32_t last, uint32_t chrcode) {\n\tif (uint32_t cp = Unicode::fromSurrogate(chrcode))  // is 'chrcode' a surrogate?\n\t\tchrcode = cp;\n\t_bfranges.addRange(first, last, chrcode);\n}\n\n\n/** Returns the RO (Registry-Ordering) string of the CMap. */\nstring SegmentedCMap::getROString() const {\n\tif (_registry.empty() || _ordering.empty())\n\t\treturn \"\";\n\treturn _registry + \"-\" + _ordering;\n}\n\n\nbool SegmentedCMap::mapsToUnicode () const {\n\tvector<string> encstrings = {\"UTF8\", \"UTF16\", \"UCS2\", \"UCS4\", \"UCS32\"};\n\treturn algo::any_of(encstrings, [&](const string& s) {\n\t\tauto pos = _filename.find(s);\n\t\treturn (pos != string::npos && (pos == 0 || _filename[pos-1] == '-'));\n\t});\n}\n\n\n/** Returns the CID for a given character code. */\nuint32_t SegmentedCMap::cid (uint32_t c) const {\n\tif (_cidranges.valueExists(c))\n\t\treturn _cidranges.valueAt(c);\n\tif (_basemap)\n\t\treturn _basemap->cid(c);\n\treturn 0;\n}\n\n\n/** Returns the character code of a base font for a given CID. */\nuint32_t SegmentedCMap::bfcode (uint32_t cid) const {\n\tif (_bfranges.valueExists(cid))\n\t\treturn _bfranges.valueAt(cid);\n\tif (_basemap)\n\t\treturn _basemap->bfcode(cid);\n\treturn 0;\n}\n\n\nvoid SegmentedCMap::write (ostream &os) const {\n\t_cidranges.write(os);\n}\n"
  },
  {
    "path": "src/CMap.hpp",
    "content": "/*************************************************************************\n** CMap.hpp                                                             **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef CMAP_HPP\n#define CMAP_HPP\n\n#include <cstdint>\n#include <ostream>\n#include <vector>\n#include \"FontEncoding.hpp\"\n#include \"RangeMap.hpp\"\n\n\nstruct CMap : NamedFontEncoding {\n\tvirtual bool vertical () const =0;\n\tvirtual bool mapsToCID () const =0;\n\tvirtual uint32_t cid (uint32_t c) const =0;\n\tvirtual uint32_t bfcode (uint32_t cid) const =0;\n\tvirtual std::string getROString () const =0;\n\tconst char* path () const override;\n\tconst FontEncoding* findCompatibleBaseFontMap (const PhysicalFont *font, CharMapID &charmapID) const override;\n\tbool mapsToCharIndex () const override {return mapsToCID();}\n\n\tCharacter decode (uint32_t c) const override {\n\t\tif (mapsToCID())\n\t\t\treturn Character(Character::INDEX, cid(c));\n\t\treturn Character(Character::CHRCODE, bfcode(c));\n\t}\n};\n\n\nstruct IdentityCMap : CMap {\n\tuint32_t cid (uint32_t c) const override      {return c;}\n\tuint32_t bfcode (uint32_t cid) const override {return 0;}\n\tstd::string getROString () const override     {return \"Adobe-Identity\";}\n\tbool mapsToCID() const override               {return true;}\n};\n\n\nstruct IdentityHCMap : IdentityCMap {\n\tbool vertical () const override    {return false;}\n\tconst char* name () const override {return \"Identity-H\";}\n};\n\n\nstruct IdentityVCMap : IdentityCMap {\n\tbool vertical () const override    {return true;}\n\tconst char* name () const override {return \"Identity-V\";}\n};\n\n\nstruct UnicodeCMap : CMap {\n\tbool vertical () const override               {return false;}\n\tconst char* name () const override            {return \"unicode\";}\n\tbool mapsToCID () const override              {return false;}\n\tconst char* path () const override            {return nullptr;}\n\tuint32_t cid (uint32_t c) const override      {return c;}\n\tuint32_t bfcode (uint32_t cid) const override {return cid;}\n\tstd::string getROString () const override     {return \"\";}\n\tbool mapsToUnicode () const override          {return true;}\n};\n\n\nclass SegmentedCMap : public CMap {\n\tfriend class CMapReader;\n\n\tpublic:\n\t\texplicit SegmentedCMap (std::string fname) : _filename(std::move(fname)) {}\n\t\tconst char* name () const override {return _filename.c_str();}\n\t\tuint32_t cid (uint32_t c) const override;\n\t\tuint32_t bfcode (uint32_t cid) const override;\n\t\tvoid addCIDRange (uint32_t first, uint32_t last, uint32_t cid);\n\t\tvoid addBFRange (uint32_t first, uint32_t last, uint32_t chrcode);\n\t\tvoid write (std::ostream &os) const;\n\t\tbool vertical () const override  {return _vertical;}\n\t\tbool mapsToCID () const override {return _mapsToCID;}\n\t\tsize_t numCIDRanges () const     {return _cidranges.numRanges();}\n\t\tsize_t numBFRanges () const      {return _bfranges.numRanges();}\n\t\tstd::string getROString () const override;\n\t\tbool mapsToUnicode () const override;\n\n\tprivate:\n\t\tstd::string _filename;\n\t\tstd::string _registry;\n\t\tstd::string _ordering;\n\t\tstd::string _cmaptype;\n\t\tCMap *_basemap = nullptr;\n\t\tbool _vertical = false;\n\t\tbool _mapsToCID = true;   // true: chrcode->CID, false: CID->charcode\n\t\tRangeMap _cidranges;\n\t\tRangeMap _bfranges;\n};\n\n#endif\n"
  },
  {
    "path": "src/CMapManager.cpp",
    "content": "/*************************************************************************\n** CMapManager.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include <sstream>\n#include \"CMap.hpp\"\n#include \"CMapManager.hpp\"\n#include \"CMapReader.hpp\"\n#include \"FileFinder.hpp\"\n#include \"Font.hpp\"\n#include \"Message.hpp\"\n\nusing namespace std;\n\n\nCMapManager& CMapManager::instance () {\n\tstatic CMapManager cmm;\n\treturn cmm;\n}\n\n\n/** Loads a cmap and returns the corresponding object. */\nCMap* CMapManager::lookup (const string &name) {\n\tauto it = _cmaps.find(name);\n\tif (it != _cmaps.end())\n\t\treturn it->second.get();\n\n\tif (_includedCMaps.find(name) != _includedCMaps.end()) {\n\t\t_level = 0;\n\t\tthrow CMapReaderException(\"circular reference of CMap \" + name);\n\t}\n\n\tunique_ptr<CMap> cmap_ptr;\n\tif (name == \"Identity-H\")\n\t\tcmap_ptr = util::make_unique<IdentityHCMap>();\n\telse if (name == \"Identity-V\")\n\t\tcmap_ptr = util::make_unique<IdentityVCMap>();\n\telse if (name == \"unicode\")\n\t\tcmap_ptr = util::make_unique<UnicodeCMap>();\n\tif (cmap_ptr) {\n\t\tCMap *ret = cmap_ptr.get();\n\t\t_cmaps[name] = std::move(cmap_ptr);\n\t\treturn ret;\n\t}\n\t// Load cmap data of file <name> and also process all cmaps referenced by operator \"usecmap\".\n\t// This can lead to a sequence of further calls of lookup(). In order to prevent infinite loops\n\t// due to (disallowed) circular cmap inclusions, we keep track of all cmaps processed during\n\t// a sequence of inclusions.\n\t_includedCMaps.insert(name);  // save name of current cmap being processed\n\t_level++;                     // increase nesting level\n\tCMap *ret=nullptr;\n\ttry {\n\t\tCMapReader reader;\n\t\tif (!(cmap_ptr = reader.read(name))) {\n\t\t\t_level = 1;\n\t\t\tMessage::wstream(true) << \"CMap file '\" << name << \"' not found\\n\";\n\t\t}\n\t\tret = cmap_ptr.get();\n\t\t_cmaps[name] = std::move(cmap_ptr);\n\t}\n\tcatch (const CMapReaderException &e) {\n\t\tMessage::estream(true) << \"CMap file \" << name << \": \" << e.what() << \"\\n\";\n\t}\n\tif (--_level == 0)            // back again at initial nesting level?\n\t\t_includedCMaps.clear();    // => names of included cmaps are no longer needed\n\treturn ret;\n}\n\n\n/** Looks for a base font CMap and a compatible encoding table in a given font. The CMap describe\n *  the mapping from CIDs to character codes where the latter are relative to the encoding table\n *  identified by charmapID.\n *  cmap:X->CID, bfmap:CID->Y, enctable:Y->CharCode\n *  @param[in] font look for available encoding tables in this font\n *  @param[in] cmap take the source registry-ordering pair from this CMap\n *  @param[out] charmapID ID of the compatible character map found in the given font\n *  @return base font CMap that maps from CIDs to character codes */\nconst CMap* CMapManager::findCompatibleBaseFontMap (const PhysicalFont *font, const CMap *cmap, CharMapID &charmapID) {\n\tif (!font || !cmap)\n\t\treturn nullptr;\n\n\tstruct CharMapIDToEncName {\n\t\tCharMapID id;\n\t\tconst char *encname;\n\t};\n\tconst array<CharMapIDToEncName, 10> encodings {{\n\t\t{CharMapID::WIN_UCS4,         \"UCS4\"},\n\t\t{CharMapID::WIN_UCS2,         \"UCS2\"},\n\t\t{CharMapID::WIN_SHIFTJIS,     \"90ms-RKSJ\"},\n\t\t{CharMapID::WIN_PRC,          \"GBK-EUC\"},\n\t\t{CharMapID::WIN_BIG5,         \"ETen-B5\"},\n\t\t{CharMapID::WIN_WANSUNG,      \"KSCms-UHC\"},\n\t\t{CharMapID::MAC_JAPANESE,     \"90pv-RKSJ\"},\n\t\t{CharMapID::MAC_TRADCHINESE,  \"B5pc\"},\n\t\t{CharMapID::MAC_SIMPLCHINESE, \"GBpc-EUC\"},\n\t\t{CharMapID::MAC_KOREAN,       \"KSCpc-EUC\"}\n\t}};\n\n\t// get IDs of all available charmaps in font\n\tvector<CharMapID> charmapIDs;\n\tfont->collectCharMapIDs(charmapIDs);\n\n\n\t// try to find a compatible encoding CMap\n\tconst bool is_unicode_map = cmap->mapsToUnicode();\n\tconst string ro = cmap->getROString();\n\tfor (const CharMapIDToEncName &enc : encodings) {\n\t\tfor (const CharMapID &id : charmapIDs) {\n\t\t\tif (enc.id == id) {\n\t\t\t\tstring cmapname = ro+\"-\"+enc.encname;\n\t\t\t\tif (is_unicode_map || FileFinder::instance().lookup(cmapname, \"cmap\", false)) {\n\t\t\t\t\tcharmapID = enc.id;\n\t\t\t\t\treturn is_unicode_map ? cmap : lookup(cmapname);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nullptr;\n}\n\n"
  },
  {
    "path": "src/CMapManager.hpp",
    "content": "/*************************************************************************\n** CMapManager.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef CMAPMANAGER_HPP\n#define CMAPMANAGER_HPP\n\n#include <memory>\n#include <string>\n#include <unordered_map>\n#include <unordered_set>\n#include \"CharMapID.hpp\"\n\nstruct CMap;\nstruct FontEncoding;\nclass FontEncodingPair;\nclass PhysicalFont;\n\nclass CMapManager\n{\n\tpublic:\n\t\tCMap* lookup (const std::string &name);\n\t\tconst CMap* findCompatibleBaseFontMap (const PhysicalFont *font, const CMap *cmap, CharMapID &charmapID);\n\t\tstatic CMapManager& instance ();\n\n\tprotected:\n\t\tCMapManager () : _level(0) {}\n\n\tprivate:\n\t\tstd::unordered_map<std::string, std::unique_ptr<CMap>> _cmaps;  ///< loaded cmaps\n\t\tstd::unordered_set<std::string> _includedCMaps;  ///< names of cmaps loaded by \"usecmap\"\n\t\tint _level;    ///< current inclusion depth; >0 if a cmap loaded by \"usecmap\" is being processed\n};\n\n#endif\n"
  },
  {
    "path": "src/CMapReader.cpp",
    "content": "/*************************************************************************\n** CMapReader.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include <fstream>\n#include <sstream>\n#include \"algorithm.hpp\"\n#include \"CMap.hpp\"\n#include \"CMapManager.hpp\"\n#include \"CMapReader.hpp\"\n#include \"FileFinder.hpp\"\n#include \"InputReader.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\n/** Reads a cmap file and returns the corresponding CMap object.\n *  @param fname[in] name/path of cmap file\n *  @return CMap object representing the read data, or 0 if file could not be read */\nunique_ptr<CMap> CMapReader::read (const string &fname) {\n\tif (const char *path = FileFinder::instance().lookup(fname, \"cmap\", false)) {\n\t\tifstream ifs(path);\n\t\tif (ifs)\n\t\t\treturn read(ifs, fname);\n\t}\n\t_tokens.clear();\n\treturn {};\n}\n\n\n/** Reads cmap data from a given stream and returns the corresponding CMap object.\n *  @param[in] is cmap data input stream\n *  @param[in] name name of CMap to be read\n *  @return CMap object representing the read data, or 0 if file could not be read */\nunique_ptr<CMap> CMapReader::read (std::istream& is, const string &name) {\n\t_tokens.clear();\n\t_cmap = util::make_unique<SegmentedCMap>(name);\n\tStreamInputReader ir(is);\n\ttry {\n\t\twhile (ir) {\n\t\t\tToken token(ir);\n\t\t\tif (token.type() == Token::Type::END)\n\t\t\t\tbreak;\n\t\t\tif (_inCMap) {\n\t\t\t\tif (token.type() == Token::Type::OPERATOR)\n\t\t\t\t\texecuteOperator(token.strvalue(), ir);\n\t\t\t\telse\n\t\t\t\t\t_tokens.push_back(token);\n\t\t\t}\n\t\t\telse if (token.type() == Token::Type::OPERATOR && token.strvalue() == \"begincmap\")\n\t\t\t\t_inCMap = true;\n\t\t}\n\t}\n\tcatch (CMapReaderException &) {\n\t\t_cmap.reset();\n\t\tthrow;\n\t}\n\treturn std::move(_cmap);\n}\n\n\n/** Executes a PS operator from the CMap file.\n *  @param[in] opname name of operator to execute\n *  @param[in] ir reader object used to read the CMap stream */\nvoid CMapReader::executeOperator (const string &opname, InputReader &ir) {\n\tstruct Operator {\n\t\tconst char *name;\n\t\tvoid (CMapReader::*handler)(InputReader&);\n\t};\n\tconstexpr array<Operator, 7> operators {{\n\t\t{\"beginbfchar\",   &CMapReader::op_beginbfchar},\n\t\t{\"beginbfrange\",  &CMapReader::op_beginbfrange},\n\t\t{\"begincidchar\",  &CMapReader::op_begincidchar},\n\t\t{\"begincidrange\", &CMapReader::op_begincidrange},\n\t\t{\"def\",           &CMapReader::op_def},\n\t\t{\"endcmap\",       &CMapReader::op_endcmap},\n\t\t{\"usecmap\",       &CMapReader::op_usecmap},\n\t}};\n\tauto it = algo::find_if(operators, [&](const Operator &op) {\n\t\treturn op.name == opname;\n\t});\n\tif (it != operators.end())\n\t\t(this->*it->handler)(ir);\n\t_tokens.clear();\n}\n\n\nvoid CMapReader::op_def (InputReader&) {\n\tsize_t size = _tokens.size();\n\tif (size >= 2) {\n\t\tconst string val = popToken().strvalue();\n\t\tconst string name = popToken().strvalue();\n\t\tif (name == \"WMode\") {\n\t\t\tif (val == \"0\" || val == \"1\")\n\t\t\t\t_cmap->_vertical = (val == \"1\");\n\t\t\telse\n\t\t\t\tthrow CMapReaderException(\"invalid WMode (0 or 1 expected)\");\n\t\t}\n\t\telse if (name == \"CMapType\")\n\t\t\t_cmap->_cmaptype = val;\n\t\telse if (name == \"Registry\")\n\t\t\t_cmap->_registry = val;\n\t\telse if (name == \"Ordering\")\n\t\t\t_cmap->_ordering = val;\n\t}\n}\n\n\nvoid CMapReader::op_endcmap (InputReader &) {\n\t_inCMap = false;\n}\n\n\nvoid CMapReader::op_usecmap (InputReader &) {\n\tif (_tokens.empty())\n\t\tthrow CMapReaderException(\"stack underflow while processing usecmap\");\n\telse {\n\t\tconst string name = popToken().strvalue();\n\t\tif ((_cmap->_basemap = CMapManager::instance().lookup(name)) == nullptr)\n\t\t\tthrow CMapReaderException(\"CMap file '\"+name+\"' not found\");\n\t}\n}\n\n\nstatic uint32_t parse_hexentry (InputReader &ir) {\n\tir.skipSpace();\n\tif (ir.get() != '<')\n\t\tthrow CMapReaderException(\"invalid range entry ('<' expected)\");\n\tunsigned val;\n\tif (!ir.parseUInt(16, val))\n\t\tthrow CMapReaderException(\"invalid range entry (hexadecimal value expected)\");\n\tif (ir.get() != '>')\n\t\tthrow CMapReaderException(\"invalid range entry ('>' expected)\");\n\treturn uint32_t(val);\n}\n\n\nvoid CMapReader::parseCIDChars (InputReader &ir, bool isRange) {\n\tif (!_tokens.empty() && _tokens.back().type() == Token::Type::NUMBER) {\n\t\tir.skipSpace();\n\t\tint num_entries = static_cast<int>(popToken().numvalue());\n\t\twhile (num_entries > 0 && ir.peek() == '<') {\n\t\t\tuint32_t first = parse_hexentry(ir);\n\t\t\tuint32_t last = first;\n\t\t\tif (isRange)\n\t\t\t\tlast = parse_hexentry(ir);\n\t\t\tir.skipSpace();\n\t\t\tuint32_t cid;\n\t\t\tif (!ir.parseUInt(cid))\n\t\t\t\tthrow CMapReaderException(\"invalid char entry (decimal value expected)\");\n\t\t\t_cmap->addCIDRange(first, last, cid);\n\t\t\tir.skipSpace();\n\t\t}\n\t}\n}\n\n\nvoid CMapReader::op_begincidchar (InputReader &ir) {\n\tparseCIDChars(ir, false);\n}\n\n\nvoid CMapReader::op_begincidrange (InputReader &ir) {\n\tparseCIDChars(ir, true);\n}\n\n\nvoid CMapReader::op_beginbfrange (InputReader &ir) {\n\tif (!_tokens.empty() && _tokens.back().type() == Token::Type::NUMBER) {\n\t\tir.skipSpace();\n\t\tint num_entries = static_cast<int>(popToken().numvalue());\n\t\twhile (num_entries > 0 && ir.peek() == '<') {\n\t\t\tuint32_t first = parse_hexentry(ir);\n\t\t\tuint32_t last = parse_hexentry(ir);\n\t\t\tuint32_t chrcode = parse_hexentry(ir);\n\t\t\t_cmap->addBFRange(first, last, chrcode);\n\t\t\tir.skipSpace();\n\t\t}\n\t\t_cmap->_mapsToCID = false;\n\t}\n}\n\n\nvoid CMapReader::op_beginbfchar (InputReader &ir) {\n\tif (!_tokens.empty() && _tokens.back().type() == Token::Type::NUMBER) {\n\t\tir.skipSpace();\n\t\tint num_entries = static_cast<int>(popToken().numvalue());\n\t\twhile (num_entries > 0 && ir.peek() == '<') {\n\t\t\tuint32_t cid = parse_hexentry(ir);\n\t\t\tir.skipSpace();\n\t\t\tif (ir.peek() == '/')\n\t\t\t\tthrow CMapReaderException(\"mapping of named characters is not supported\");\n\t\t\tuint32_t chrcode = parse_hexentry(ir);\n\t\t\t_cmap->addBFRange(cid, cid, chrcode);\n\t\t\tir.skipSpace();\n\t\t}\n\t\t_cmap->_mapsToCID = false;\n\t}\n}\n\n////////////////////////////////////////////////////////////////////////////////////\n\nCMapReader::Token::Token (InputReader &ir) {\n\tscan(ir);\n}\n\n\n/** Reads the next characters from the input stream to create a token. */\nvoid CMapReader::Token::scan (InputReader &ir) {\n\tir.skipSpace();\n\twhile (ir.peek() == '%') {   // comment?\n\t\twhile (ir.peek() != '\\n') // => skip until end of line\n\t\t\tir.get();\n\t\tir.skipSpace();\n\t}\n\tir.skipSpace();\n\tif (ir.eof())\n\t\t_type = Type::END;\n\telse if (ir.peek() == '/') { // PS name?\n\t\tir.get();\n\t\twhile (!strchr(\"[]{}<>\", ir.peek()) && !isspace(ir.peek()))\n\t\t\t_value += ir.get();\n\t\t_type = Type::NAME;\n\t}\n\telse if (ir.peek() == '(') { // string?\n\t\tir.get();\n\t\tint level=0;\n\t\twhile (ir.peek() != ')' || level > 0) {\n\t\t\tif (ir.peek() == '(')\n\t\t\t\tlevel++;\n\t\t\telse if (ir.peek() == ')' && level > 0)\n\t\t\t\tlevel--;\n\t\t\t_value += ir.get();\n\t\t}\n\t\tir.get();  // skip ')'\n\t\t_type = Type::STRING;\n\t}\n\telse if (strchr(\"[]{}<>\", ir.peek())) {  // PS delimiter\n\t\t_value = ir.get();\n\t\t_type = Type::DELIM;\n\t}\n\telse if (isdigit(ir.peek())) {  // number?\n\t\tdouble val;\n\t\tif (ir.parseDouble(val)) {\n\t\t\t_value = util::to_string(val);\n\t\t\t_type = Type::NUMBER;\n\t\t}\n\t}\n\telse {\n\t\twhile (!strchr(\"[]{}<>\", ir.peek()) && !isspace(ir.peek()))\n\t\t\t_value += ir.get();\n\t\t_type = Type::OPERATOR;\n\t}\n}\n"
  },
  {
    "path": "src/CMapReader.hpp",
    "content": "/*************************************************************************\n** CMapReader.hpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef CMAPREADER_HPP\n#define CMAPREADER_HPP\n\n#include <cstdlib>\n#include <istream>\n#include <memory>\n#include <string>\n#include <vector>\n#include \"MessageException.hpp\"\n\n\nstruct CMap;\nclass InputReader;\n\nclass CMapReader {\n\tclass Token\t{\n\t\tpublic:\n\t\t\tenum class Type {UNKNOWN, END, DELIM, NUMBER, STRING, NAME, OPERATOR};\n\n\t\tpublic:\n\t\t\texplicit Token (InputReader &ir);\n\t\t\tvoid scan (InputReader &ir);\n\t\t\tType type () const                   {return _type;}\n\t\t\tconst std::string& strvalue () const {return _value;}\n\t\t\tdouble numvalue () const             {return std::atof(_value.c_str());}\n\n\t\tprivate:\n\t\t\tType _type;\n\t\t\tstd::string _value;\n\t};\n\n\tpublic:\n\t\tstd::unique_ptr<CMap> read (const std::string &fname);\n\t\tstd::unique_ptr<CMap> read (std::istream &is, const std::string &name);\n\n\tprotected:\n\t\tToken popToken () {Token t=_tokens.back(); _tokens.pop_back(); return t;}\n\t\tvoid executeOperator (const std::string &op, InputReader &ir);\n\t\tvoid parseCIDChars (InputReader &ir, bool isRange);\n\t\tvoid op_beginbfchar (InputReader &ir);\n\t\tvoid op_beginbfrange (InputReader &ir);\n\t\tvoid op_begincidchar (InputReader &ir);\n\t\tvoid op_begincidrange (InputReader &ir);\n\t\tvoid op_def (InputReader &ir);\n\t\tvoid op_endcmap (InputReader &ir);\n\t\tvoid op_usecmap (InputReader &ir);\n\n\tprivate:\n\t\tstd::unique_ptr<SegmentedCMap> _cmap; ///< pointer to CMap being read\n\t\tstd::vector<Token> _tokens; ///< stack of tokens to be processed\n\t\tbool _inCMap=false;         ///< true if operator begincmap has been executed\n};\n\n\nstruct CMapReaderException : MessageException {\n\texplicit CMapReaderException (const std::string &msg) : MessageException(msg) {}\n};\n\n#endif\n"
  },
  {
    "path": "src/Calculator.cpp",
    "content": "/*************************************************************************\n** Calculator.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include <sstream>\n#include <stdexcept>\n#include \"Calculator.hpp\"\n\nusing namespace std;\n\n/** Evaluates a given arithmetic expression and returns its value.\n *  The evaluator is implemented as a recursive descent parser.\n *  @param[in] is reads expression from this stream\n *  @return expression value */\ndouble Calculator::eval (istream &is) const {\n\tdouble ret = expr(is, false);\n\ttry {\n\t\t// check if expression has been fully evaluated (next token is of type bool)\n\t\tmpark::get<bool>(lookAhead(is));\n\t}\n\tcatch (mpark::bad_variant_access &) {\n\t\tthrow CalculatorException(\"expression syntax error\");\n\t}\n\treturn ret;\n}\n\n\n/** Evaluates a given arithmetic expression and returns its value.\n *  @param[in] expr expression to evaluate\n *  @return expression value */\ndouble Calculator::eval (const string &expr) const {\n\tistringstream iss;\n\tiss.str(expr);\n\treturn eval(iss);\n}\n\n\n/** Evaluates the root rule of the expression grammar. */\ndouble Calculator::expr (istream &is, bool skip) const {    // expr:\n\tdouble left = term(is, skip);\n\tbool ready=false;\n\twhile (!ready) {\n\t\tToken token = lookAhead(is);\n\t\tchar *op = mpark::get_if<char>(&token);\n\t\tif (!op)\n\t\t\tready = true;\n\t\telse {\n\t\t\tswitch (*op) {\n\t\t\t\tcase '+': left += term(is, true); break;  // term '+' term => $1 + $3\n\t\t\t\tcase '-': left -= term(is, true); break;  // term '-' term => $1 - $3\n\t\t\t\tdefault : ready = true;\n\t\t\t}\n\t\t}\n\t}\n\treturn left;  // term => $1\n}\n\n\ndouble Calculator::term (istream &is, bool skip) const {    // term:\n\tdouble left = prim(is, skip);\n\tbool ready=false;\n\twhile (!ready) {\n\t\tToken token = lookAhead(is);\n\t\tchar *op = mpark::get_if<char>(&token);\n\t\tif (!op)\n\t\t\tready = true;\n\t\telse {\n\t\t\tswitch (*op) {\n\t\t\t\tcase '*': left *= prim(is, true); break;  // prim '*' prim => $1 * $3\n\t\t\t\tcase '(': left *= prim(is, false); break; // prim '(' prim => $1 * $3\n\t\t\t\tcase '/': {                               // prim '/' prim => $1 / $3\n\t\t\t\t\tdouble denom = prim(is, true);\n\t\t\t\t\tif (denom == 0)\n\t\t\t\t\t\tthrow CalculatorException(\"division by zero\");\n\t\t\t\t\tleft /= denom;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase '%': {                               // prim '%' prim => $1 mod $3\n\t\t\t\t\tdouble denom = prim(is, true);\n\t\t\t\t\tif (denom == 0)\n\t\t\t\t\t\tthrow CalculatorException(\"division by zero\");\n\t\t\t\t\tleft -= denom * floor(left / denom);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tready = true;\n\t\t\t}\n\t\t}\n\t}\n\treturn left;\n}\n\n\n/** Evaluates a primary expression of the grammar which doesn't contain any binary operators. */\ndouble Calculator::prim (istream &is, bool skip) const { // prim:\n\tif (skip)\n\t\tlex(is);\n\tToken token = lookAhead(is);\n\tif (mpark::get_if<double>(&token)) {               //  NUMBER => $1\n\t\tdouble ret = mpark::get<double>(lex(is));\n\t\ttoken = lookAhead(is);\n\t\tif (mpark::get_if<string>(&token))              // NUMBER STRING => $1 * $2\n\t\t\tret *= getVariable(mpark::get<string>(lex(is)));\n\t\treturn ret;\n\t}\n\tif (mpark::get_if<string>(&token))                 // STRING => getVariable($1)\n\t\treturn getVariable(mpark::get<string>(lex(is)));\n\tif (char *op = mpark::get_if<char>(&token)) {\n\t\tswitch (*op) {\n\t\t\tcase '-':                                    // '-' prim => -$2\n\t\t\t\treturn -prim(is, true);\n\t\t\tcase '(': {                                  // '(' expr ')' => $2\n\t\t\t\tdouble e = expr(is, true);\n\t\t\t\ttry {\n\t\t\t\t\tif (mpark::get<char>(lookAhead(is)) != ')')\n\t\t\t\t\t\tthrow CalculatorException(\"')' expected\");\n\t\t\t\t}\n\t\t\t\tcatch (mpark::bad_variant_access &) {\n\t\t\t\t\tthrow CalculatorException(\"')' expected\");\n\t\t\t\t}\n\t\t\t\tis.get();   // skip processed char\n\t\t\t\treturn e;\n\t\t\t}\n\t\t}\n\t}\n\tthrow CalculatorException(\"primary expression expected\");\n}\n\n\n/** Returns the value of a previously defined variable. If there\n *  is no variable of the given name, a CalculatorException is thrown.\n *  @param[in] name name of variable\n *  @return assigned value */\ndouble Calculator::getVariable (const string &name) const {\n\tauto it = _variables.find(name);\n\tif (it == _variables.end())\n\t\tthrow CalculatorException(\"undefined variable '\" + name + \"'\");\n\treturn it->second;\n}\n\n\n/** Determines the type of the next token without swallowing it. That means\n *  the same token will be read again next time. The value of the returned token\n *  object is only set for character tokens and should be considered undefined\n *  for the other types. */\nCalculator::Token Calculator::lookAhead (istream &is) {\n\tis >> ws;\n\tint c = is.peek();\n\tif (is.eof())\n\t\treturn false;\n\tif (isdigit(c) || c == '.')\n\t\treturn double(0);\n\tif (isalpha(c))\n\t\treturn string();\n\treturn char(c);\n}\n\n\n/** Reads and swallows the next token. The returned Token object is represented by\n *  a variant and thus contains both its type and value.\n *  @param[in] is next token is read from this stream\n *  @return the read token */\nCalculator::Token Calculator::lex (istream &is) {\n\tToken token = lookAhead(is);\n\tif (mpark::get_if<char>(&token))\n\t\tis.get();  // token already contains the value from look ahead\n\telse if (mpark::get_if<double>(&token)) {\n\t\tstring str;\n\t\twhile (isdigit(is.peek()) || is.peek() == '.')\n\t\t\tstr += char(is.get());\n\t\ttry {\n\t\t\ttoken.emplace<double>(stod(str));\n\t\t}\n\t\tcatch (const exception&) {\n\t\t\tthrow CalculatorException(\"invalid number: \"+str);\n\t\t}\n\t}\n\telse if (mpark::get_if<string>(&token)) {\n\t\tstring name;\n\t\twhile (isalpha(is.peek()))\n\t\t\tname += char(is.get());\n\t\ttoken.emplace<string>(name);\n\t}\n\treturn token;\n}\n"
  },
  {
    "path": "src/Calculator.hpp",
    "content": "/*************************************************************************\n** Calculator.hpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef CALCULATOR_HPP\n#define CALCULATOR_HPP\n\n#include <istream>\n#include <map>\n#include <string>\n#include <mpark/variant.hpp>\n#include \"MessageException.hpp\"\n\nstruct CalculatorException : MessageException {\n\texplicit CalculatorException (const std::string &msg) : MessageException(msg) {}\n};\n\nclass Calculator {\n\tpublic:\n\t\tdouble eval (std::istream &is) const;\n\t\tdouble eval (const std::string &expr) const;\n\t\tvoid setVariable (const std::string &name, double value) {_variables[name] = value;}\n\t\tdouble getVariable (const std::string &name) const;\n\n\tprotected:\n\t\tdouble expr (std::istream &is, bool skip) const;\n\t\tdouble term (std::istream &is, bool skip) const;\n\t\tdouble prim (std::istream &is, bool skip) const;\n\n\t\tusing Token = mpark::variant<bool, char, double, std::string>;\n\t\tstatic Token lex (std::istream &is);\n\t\tstatic Token lookAhead (std::istream &is);\n\n\tprivate:\n\t\tstd::map<std::string,double> _variables;\n};\n\n#endif\n"
  },
  {
    "path": "src/CharMapID.cpp",
    "content": "/*************************************************************************\n** CharMapID.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"CharMapID.hpp\"\n\nconst CharMapID CharMapID::NONE(0, 0);\nconst CharMapID CharMapID::WIN_SYMBOL(3, 0);\nconst CharMapID CharMapID::WIN_UCS2(3, 1);\nconst CharMapID CharMapID::WIN_SHIFTJIS(3, 2);\nconst CharMapID CharMapID::WIN_PRC(3, 3);\nconst CharMapID CharMapID::WIN_BIG5(3, 4);\nconst CharMapID CharMapID::WIN_WANSUNG(3, 5);\nconst CharMapID CharMapID::WIN_JOHAB(3, 6);\nconst CharMapID CharMapID::WIN_UCS4(3, 10);\n\nconst CharMapID CharMapID::MAC_JAPANESE(1, 1);\nconst CharMapID CharMapID::MAC_TRADCHINESE(1, 2);\nconst CharMapID CharMapID::MAC_KOREAN(1, 3);\nconst CharMapID CharMapID::MAC_SIMPLCHINESE(1, 25);\n"
  },
  {
    "path": "src/CharMapID.hpp",
    "content": "/*************************************************************************\n** CharMapID.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef CHARMAPID_HPP\n#define CHARMAPID_HPP\n\n#include <cstdint>\n\n/** Represents a character map of a font. */\nstruct CharMapID {\n\tCharMapID () noexcept =default;\n\tCharMapID (uint8_t plf_id, uint8_t enc_id) noexcept : platform_id(plf_id), encoding_id(enc_id) {}\n\n\tbool operator == (const CharMapID &ids) const {\n\t\treturn platform_id == ids.platform_id && encoding_id == ids.encoding_id;\n\t}\n\n\tbool operator != (const CharMapID &ids) const {\n\t\treturn platform_id != ids.platform_id || encoding_id != ids.encoding_id;\n\t}\n\n\tbool valid () const {return platform_id != 0 && encoding_id != 0;}\n\n\tstatic const CharMapID NONE;\n\tstatic const CharMapID WIN_SYMBOL;\n\tstatic const CharMapID WIN_UCS2;\n\tstatic const CharMapID WIN_SHIFTJIS;\n\tstatic const CharMapID WIN_PRC;\n\tstatic const CharMapID WIN_BIG5;\n\tstatic const CharMapID WIN_WANSUNG;\n\tstatic const CharMapID WIN_JOHAB;\n\tstatic const CharMapID WIN_UCS4;\n\tstatic const CharMapID MAC_JAPANESE;\n\tstatic const CharMapID MAC_TRADCHINESE;\n\tstatic const CharMapID MAC_SIMPLCHINESE;\n\tstatic const CharMapID MAC_KOREAN;\n\n\tuint8_t platform_id=0;\n\tuint8_t encoding_id=0;\n};\n\n#endif\n"
  },
  {
    "path": "src/Character.hpp",
    "content": "/*************************************************************************\n** Character.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef CHARACTER_HPP\n#define CHARACTER_HPP\n\n#include <cstdint>\n\nclass Character {\n\tpublic:\n\t\tenum Type {CHRCODE, INDEX, NAME};\n\t\texplicit Character (const char *name) : _type(NAME), _name(name) {}\n\t\tCharacter (Type type, uint32_t val) : _type(type), _number(val) {}\n\t\tCharacter (Type type, const Character &c) : _type(type), _number(c.type() != NAME ? c._number : 0) {}\n\t\tType type () const {return _type;}\n\t\tconst char* name () const {return _name;}\n\t\tuint32_t number () const  {return _number;}\n\n\tprivate:\n\t\tType _type;\n\t\tunion {\n\t\t\tuint32_t _number;\n\t\t\tconst char *_name;\n\t\t};\n};\n\n#endif\n\n"
  },
  {
    "path": "src/Color.cpp",
    "content": "/*************************************************************************\n** Color.cpp                                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include <cctype>\n#include <cmath>\n#include <cstdlib>\n#include <cstring>\n#include <iomanip>\n#include <sstream>\n#include \"algorithm.hpp\"\n#include \"Color.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\nbool Color::SUPPRESS_COLOR_NAMES = true;\n\nconst Color Color::BLACK(uint32_t(0));\nconst Color Color::WHITE(uint8_t(255), uint8_t(255), uint8_t(255));\n\n\ninline uint8_t double_to_byte (double v) {\n\tv = max(0.0, min(1.0, v));\n\treturn uint8_t(round(255.0*v));\n}\n\n\n/** Reads n double values from input stream is. The values may be\n *  separated by whitespace and/or commas. */\nstatic valarray<double> read_doubles (istream &is, int n) {\n\tvalarray<double> values(n);\n\tfor (double &val : values) {\n\t\tis >> ws;\n\t\tif (!util::read_double(is, val))\n\t\t\tval = 0;\n\t\tis >> ws;\n\t\tif (is.peek() == ',') {\n\t\t\tis.get();\n\t\t\tis >> ws;\n\t\t}\n\t}\n\treturn values;\n}\n\n\n/** Creates a color object from a string specifying the color. It can\n *  either be a PS color name or one of the color functions rgb(r,g,b),\n *  cmyk(c,m,y,k) where the parameters are numbers in the interval\n *  from 0 to 1. */\nColor::Color (const string &colorstr) {\n\tif (colorstr.substr(0, 4) == \"rgb(\") {\n\t\tistringstream iss(colorstr.substr(4));\n\t\tsetRGB(read_doubles(iss, 3));\n\t}\n\telse if (colorstr.substr(0, 5) == \"cmyk(\") {\n\t\tistringstream iss(colorstr.substr(5));\n\t\tsetCMYK(read_doubles(iss, 4));\n\t}\n\telse if (!setPSName(colorstr, false))\n\t\tsetGray(uint8_t(0));\n}\n\n\nColor::Color (const valarray<double> &values, ColorSpace cs) noexcept : _cspace(cs) {\n\tint n = numComponents(cs);\n\tint i=0;\n\t_value = 0;\n\tfor (int shift=(n-1)*8; shift >= 0; shift-=8)\n\t\t_value |= double_to_byte(values[i++]) << shift;\n}\n\n\nvoid Color::setRGB (uint8_t r, uint8_t g, uint8_t b)  {\n\t_value = (r << 16) | (g << 8) | b;\n\t_cspace = ColorSpace::RGB;\n}\n\n\nvoid Color::setRGB (double r, double g, double b) {\n\tsetRGB(double_to_byte(r), double_to_byte(g), double_to_byte(b));\n}\n\n\n/** Sets the color value according to a given hex RGB string of the\n *  form \"#123456\" or \"#123\" where the latter is expanded to \"#112233\".\n *  The leading '#' character is optional.\n *  @param[in] hexString the RGB hex string\n *  @return true if the color value was assigned successfully */\nbool Color::setRGBHexString (string hexString) {\n\tif (!hexString.empty()) {\n\t\tif (hexString[0] == '#')\n\t\t\thexString = hexString.substr(1);\n\t\tif (hexString.length() == 3) {\n\t\t\t// expand short form \"123\" to \"112233\"\n\t\t\thexString.resize(6);\n\t\t\thexString[5] = hexString[4] = hexString[2];\n\t\t\thexString[3] = hexString[2] = hexString[1];\n\t\t\thexString[1] = hexString[0];\n\t\t}\n\t\tif (hexString.length() == 6) {\n\t\t\ttry {\n\t\t\t\t_value = stoi(hexString, nullptr, 16);\n\t\t\t\t_cspace = ColorSpace::RGB;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcatch (...) {\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n\n/** Expects a PostScript color name and sets the color accordingly.\n *  @param[in] name PS color name\n *  @param[in] case_sensitive if true, upper/lower case spelling is significant\n *  @return true if color name could be applied properly */\nbool Color::setPSName (string name, bool case_sensitive) {\n\t_cspace = ColorSpace::RGB;\n\tif (name[0] == '#') {\n\t\tchar *p=nullptr;\n\t\t_value = uint32_t(strtol(name.c_str()+1, &p, 16));\n\t\twhile (isspace(*p))\n\t\t\tp++;\n\t\treturn (*p == 0 && _value <= 0xFFFFFF);\n\t}\n\n\tstruct ColorConstant {\n\t\tconst char *name;\n\t\tconst uint32_t rgb;\n\t};\n\t// converted color constants from color.pro\n\tstatic constexpr array<ColorConstant, 68> constants {{\n\t\t{\"Apricot\",        0xFFAD7A},\n\t\t{\"Aquamarine\",     0x2DFFB2},\n\t\t{\"Bittersweet\",    0xC10200},\n\t\t{\"Black\",          0x000000},\n\t\t{\"Blue\",           0x0000FF},\n\t\t{\"BlueGreen\",      0x26FFAA},\n\t\t{\"BlueViolet\",     0x190CF4},\n\t\t{\"BrickRed\",       0xB70000},\n\t\t{\"Brown\",          0x660000},\n\t\t{\"BurntOrange\",    0xFF7C00},\n\t\t{\"CadetBlue\",      0x606DC4},\n\t\t{\"CarnationPink\",  0xFF5EFF},\n\t\t{\"Cerulean\",       0x0FE2FF},\n\t\t{\"CornflowerBlue\", 0x59DDFF},\n\t\t{\"Cyan\",           0x00FFFF},\n\t\t{\"Dandelion\",      0xFFB528},\n\t\t{\"DarkOrchid\",     0x9932CC},\n\t\t{\"Emerald\",        0x00FF7F},\n\t\t{\"ForestGreen\",    0x00E000},\n\t\t{\"Fuchsia\",        0x7202EA},\n\t\t{\"Goldenrod\",      0xFFE528},\n\t\t{\"Gray\",           0x7F7F7F},\n\t\t{\"Green\",          0x00FF00},\n\t\t{\"GreenYellow\",    0xD8FF4F},\n\t\t{\"JungleGreen\",    0x02FF7A},\n\t\t{\"Lavender\",       0xFF84FF},\n\t\t{\"LimeGreen\",      0x7FFF00},\n\t\t{\"Magenta\",        0xFF00FF},\n\t\t{\"Mahogany\",       0xA50000},\n\t\t{\"Maroon\",         0xAD0000},\n\t\t{\"Melon\",          0xFF897F},\n\t\t{\"MidnightBlue\",   0x007091},\n\t\t{\"Mulberry\",       0xA314F9},\n\t\t{\"NavyBlue\",       0x0F75FF},\n\t\t{\"OliveGreen\",     0x009900},\n\t\t{\"Orange\",         0xFF6321},\n\t\t{\"OrangeRed\",      0xFF007F},\n\t\t{\"Orchid\",         0xAD5BFF},\n\t\t{\"Peach\",          0xFF7F4C},\n\t\t{\"Periwinkle\",     0x6D72FF},\n\t\t{\"PineGreen\",      0x00BF28},\n\t\t{\"Plum\",           0x7F00FF},\n\t\t{\"ProcessBlue\",    0x0AFFFF},\n\t\t{\"Purple\",         0x8C23FF},\n\t\t{\"RawSienna\",      0x8C0000},\n\t\t{\"Red\",            0xFF0000},\n\t\t{\"RedOrange\",      0xFF3A21},\n\t\t{\"RedViolet\",      0x9600A8},\n\t\t{\"Rhodamine\",      0xFF2DFF},\n\t\t{\"RoyalBlue\",      0x007FFF},\n\t\t{\"RoyalPurple\",    0x3F19FF},\n\t\t{\"RubineRed\",      0xFF00DD},\n\t\t{\"Salmon\",         0xFF779E},\n\t\t{\"SeaGreen\",       0x4FFF7F},\n\t\t{\"Sepia\",          0x4C0000},\n\t\t{\"SkyBlue\",        0x60FFE0},\n\t\t{\"SpringGreen\",    0xBCFF3D},\n\t\t{\"Tan\",            0xDB9370},\n\t\t{\"TealBlue\",       0x1EF9A3},\n\t\t{\"Thistle\",        0xE068FF},\n\t\t{\"Turquoise\",      0x26FFCC},\n\t\t{\"Violet\",         0x351EFF},\n\t\t{\"VioletRed\",      0xFF30FF},\n\t\t{\"White\",          0xFFFFFF},\n\t\t{\"WildStrawberry\", 0xFF0A9B},\n\t\t{\"Yellow\",         0xFFFF00},\n\t\t{\"YellowGreen\",    0x8EFF42},\n\t\t{\"YellowOrange\",   0xFF9300},\n\t}};\n\tif (case_sensitive) {\n\t\tconst ColorConstant cmppair = {name.c_str(), 0};\n\t\tauto it = algo::lower_bound(constants, cmppair, [](const ColorConstant &c1, const ColorConstant &c2) {\n\t\t\treturn strcmp(c1.name, c2.name) < 0;\n\t\t});\n\t\tif (it != constants.end() && it->name == name) {\n\t\t\t_value = it->rgb;\n\t\t\treturn true;\n\t\t}\n\t}\n\telse {\n\t\tname = util::tolower(name);\n\t\tauto it = algo::find_if(constants, [&](const ColorConstant &cc) {\n\t\t\treturn name == util::tolower(cc.name);\n\t\t});\n\t\tif (it != constants.end()) {\n\t\t\t_value = it->rgb;\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n\nvoid Color::setHSB (double h, double s, double b) {\n\tvalarray<double> hsb(3), rgb(3);\n\thsb[0] = h;\n\thsb[1] = s;\n\thsb[2] = b;\n\tHSB2RGB(hsb, rgb);\n\tsetRGB(rgb);\n}\n\n\nvoid Color::setCMYK (uint8_t c, uint8_t m, uint8_t y, uint8_t k) {\n\t_value = (c << 24) | (m << 16) | (y << 8) | k;\n\t_cspace = ColorSpace::CMYK;\n}\n\n\nvoid Color::setCMYK (double c, double m, double y, double k) {\n\tsetCMYK(double_to_byte(c), double_to_byte(m), double_to_byte(y), double_to_byte(k));\n}\n\n\nvoid Color::setCMYK (const std::valarray<double> &cmyk) {\n\tsetCMYK(cmyk[0], cmyk[1], cmyk[2], cmyk[3]);\n}\n\n\nvoid Color::set (ColorSpace colorSpace, VectorIterator<double> &it) {\n\tswitch (colorSpace) {\n\t\tcase ColorSpace::GRAY: setGray(*it++); break;\n\t\tcase ColorSpace::RGB : setRGB(*it, *(it+1), *(it+2)); it+=3; break;\n\t\tcase ColorSpace::LAB : setLab(*it, *(it+1), *(it+2)); it+=3; break;\n\t\tcase ColorSpace::CMYK: setCMYK(*it, *(it+1), *(it+2), *(it+3)); it+=4; break;\n\t\tdefault: ;\n\t}\n}\n\n\nColor Color::operator *= (double c) {\n\tif (abs(c) < 0.001)\n\t\t_value &= 0xff000000;\n\telse if (abs(c-trunc(c)) < 0.999) {\n\t\tuint32_t value=0;\n\t\tfor (int i=0; i < 4; i++) {\n\t\t\tvalue |= lround((_value & 0xff)*c) << (8*i);\n\t\t\t_value >>= 8;\n\t\t}\n\t\t_value = value;\n\t}\n\treturn *this;\n}\n\n\n/** Returns an RGB string representing the color. Depending on the\n *  color value, the string either consists of 3 or 6 hex digits\n *  plus a leading '#' character. */\nstring Color::rgbString () const {\n\tuint32_t rgb = getRGBUInt32();\n\tostringstream oss;\n\toss << '#';\n\tfor (int i=2; i >= 0; i--) {\n\t\toss << setbase(16) << setfill('0') << setw(2)\n\t\t\t << (((rgb >> (8*i)) & 0xff));\n\t}\n\t// check if RGB string can be reduced to a three digit hex value\n\t// #RRGGBB => #RGB, e.g. #112233 => #123\n\tstring hexstr = oss.str();\n\tif (hexstr[1] == hexstr[2] && hexstr[3] == hexstr[4] && hexstr[5] == hexstr[6]) {\n\t\thexstr[2] = hexstr[3];\n\t\thexstr[3] = hexstr[5];\n\t\thexstr.resize(4);\n\t}\n\treturn hexstr;\n}\n\n\n/** Returns an SVG color string representing the current color. The result can\n *  either be an SVG color name or an RGB string of the form #RRGGBB. The latter\n *  will be returned if parameter rgbonly is true or if the SVG standard doesn't\n *  define a name for the current color. */\nstring Color::svgColorString (bool rgbonly) const {\n\tif (!rgbonly) {\n\t\tstruct ColorName {\n\t\t\tuint32_t rgb;\n\t\t\tconst char *name;\n\t\t};\n\t\tstatic constexpr array<ColorName, 138> colornames {{\n\t\t\t{0x000000, \"black\"},\n\t\t\t{0x000080, \"navy\"},\n\t\t\t{0x00008b, \"darkblue\"},\n\t\t\t{0x0000cd, \"mediumblue\"},\n\t\t\t{0x0000ff, \"blue\"},\n\t\t\t{0x006400, \"darkgreen\"},\n\t\t\t{0x008000, \"green\"},\n\t\t\t{0x008080, \"teal\"},\n\t\t\t{0x008b8b, \"darkcyan\"},\n\t\t\t{0x00bfff, \"deepskyblue\"},\n\t\t\t{0x00ced1, \"darkturquoise\"},\n\t\t\t{0x00fa9a, \"mediumspringgreen\"},\n\t\t\t{0x00ff00, \"lime\"},\n\t\t\t{0x00ff7f, \"springgreen\"},\n\t\t\t{0x00ffff, \"cyan\"},\n\t\t\t{0x191970, \"midnightblue\"},\n\t\t\t{0x1e90ff, \"dodgerblue\"},\n\t\t\t{0x20b2aa, \"lightseagreen\"},\n\t\t\t{0x228b22, \"forestgreen\"},\n\t\t\t{0x2e8b57, \"seagreen\"},\n\t\t\t{0x2f4f4f, \"darkslategray\"},\n\t\t\t{0x32cd32, \"limegreen\"},\n\t\t\t{0x3cb371, \"mediumseagreen\"},\n\t\t\t{0x40e0d0, \"turquoise\"},\n\t\t\t{0x4169e1, \"royalblue\"},\n\t\t\t{0x4682b4, \"steelblue\"},\n\t\t\t{0x483d8b, \"darkslateblue\"},\n\t\t\t{0x48d1cc, \"mediumturquoise\"},\n\t\t\t{0x4b0082, \"indigo\"},\n\t\t\t{0x556b2f, \"darkolivegreen\"},\n\t\t\t{0x5f9ea0, \"cadetblue\"},\n\t\t\t{0x6495ed, \"cornflowerblue\"},\n\t\t\t{0x66cdaa, \"mediumaquamarine\"},\n\t\t\t{0x696969, \"dimgray\"},\n\t\t\t{0x6a5acd, \"slateblue\"},\n\t\t\t{0x6b8e23, \"olivedrab\"},\n\t\t\t{0x708090, \"slategray\"},\n\t\t\t{0x778899, \"lightslategray\"},\n\t\t\t{0x7b68ee, \"mediumslateblue\"},\n\t\t\t{0x7cfc00, \"lawngreen\"},\n\t\t\t{0x7fff00, \"chartreuse\"},\n\t\t\t{0x7fffd4, \"aquamarine\"},\n\t\t\t{0x800000, \"maroon\"},\n\t\t\t{0x800080, \"purple\"},\n\t\t\t{0x808000, \"olive\"},\n\t\t\t{0x808080, \"gray\"},\n\t\t\t{0x87ceeb, \"skyblue\"},\n\t\t\t{0x87cefa, \"lightskyblue\"},\n\t\t\t{0x8a2be2, \"blueviolet\"},\n\t\t\t{0x8b0000, \"darkred\"},\n\t\t\t{0x8b008b, \"darkmagenta\"},\n\t\t\t{0x8b4513, \"saddlebrown\"},\n\t\t\t{0x8fbc8f, \"darkseagreen\"},\n\t\t\t{0x90ee90, \"lightgreen\"},\n\t\t\t{0x9370db, \"mediumpurple\"},\n\t\t\t{0x9400d3, \"darkviolet\"},\n\t\t\t{0x98fb98, \"palegreen\"},\n\t\t\t{0x9932cc, \"darkorchid\"},\n\t\t\t{0x9acd32, \"yellowgreen\"},\n\t\t\t{0xa0522d, \"sienna\"},\n\t\t\t{0xa52a2a, \"brown\"},\n\t\t\t{0xa9a9a9, \"darkgray\"},\n\t\t\t{0xadd8e6, \"lightblue\"},\n\t\t\t{0xadff2f, \"greenyellow\"},\n\t\t\t{0xafeeee, \"paleturquoise\"},\n\t\t\t{0xb0c4de, \"lightsteelblue\"},\n\t\t\t{0xb0e0e6, \"powderblue\"},\n\t\t\t{0xb22222, \"firebrick\"},\n\t\t\t{0xb8860b, \"darkgoldenrod\"},\n\t\t\t{0xba55d3, \"mediumorchid\"},\n\t\t\t{0xbc8f8f, \"rosybrown\"},\n\t\t\t{0xbdb76b, \"darkkhaki\"},\n\t\t\t{0xc0c0c0, \"silver\"},\n\t\t\t{0xc71585, \"mediumvioletred\"},\n\t\t\t{0xcd5c5c, \"indianred\"},\n\t\t\t{0xcd853f, \"peru\"},\n\t\t\t{0xd2691e, \"chocolate\"},\n\t\t\t{0xd2b48c, \"tan\"},\n\t\t\t{0xd3d3d3, \"lightgray\"},\n\t\t\t{0xd8bfd8, \"thistle\"},\n\t\t\t{0xda70d6, \"orchid\"},\n\t\t\t{0xdaa520, \"goldenrod\"},\n\t\t\t{0xdb7093, \"palevioletred\"},\n\t\t\t{0xdc143c, \"crimson\"},\n\t\t\t{0xdcdcdc, \"gainsboro\"},\n\t\t\t{0xdda0dd, \"plum\"},\n\t\t\t{0xdeb887, \"burlywood\"},\n\t\t\t{0xe0ffff, \"lightcyan\"},\n\t\t\t{0xe6e6fa, \"lavender\"},\n\t\t\t{0xe9967a, \"darksalmon\"},\n\t\t\t{0xee82ee, \"violet\"},\n\t\t\t{0xeee8aa, \"palegoldenrod\"},\n\t\t\t{0xf08080, \"lightcoral\"},\n\t\t\t{0xf0e68c, \"khaki\"},\n\t\t\t{0xf0f8ff, \"aliceblue\"},\n\t\t\t{0xf0fff0, \"honeydew\"},\n\t\t\t{0xf0ffff, \"azure\"},\n\t\t\t{0xf4a460, \"sandybrown\"},\n\t\t\t{0xf5deb3, \"wheat\"},\n\t\t\t{0xf5f5dc, \"beige\"},\n\t\t\t{0xf5f5f5, \"whitesmoke\"},\n\t\t\t{0xf5fffa, \"mintcream\"},\n\t\t\t{0xf8f8ff, \"ghostwhite\"},\n\t\t\t{0xfa8072, \"salmon\"},\n\t\t\t{0xfaebd7, \"antiquewhite\"},\n\t\t\t{0xfaf0e6, \"linen\"},\n\t\t\t{0xfafad2, \"lightgoldenrodyellow\"},\n\t\t\t{0xfdf5e6, \"oldlace\"},\n\t\t\t{0xff0000, \"red\"},\n\t\t\t{0xff00ff, \"magenta\"},\n\t\t\t{0xff1493, \"deeppink\"},\n\t\t\t{0xff4500, \"orangered\"},\n\t\t\t{0xff6347, \"tomato\"},\n\t\t\t{0xff69b4, \"hotpink\"},\n\t\t\t{0xff7f50, \"coral\"},\n\t\t\t{0xff8c00, \"darkorange\"},\n\t\t\t{0xffa07a, \"lightsalmon\"},\n\t\t\t{0xffa500, \"orange\"},\n\t\t\t{0xffb6c1, \"lightpink\"},\n\t\t\t{0xffc0cb, \"pink\"},\n\t\t\t{0xffd700, \"gold\"},\n\t\t\t{0xffdab9, \"peachpuff\"},\n\t\t\t{0xffdead, \"navajowhite\"},\n\t\t\t{0xffe4b5, \"moccasin\"},\n\t\t\t{0xffe4c4, \"bisque\"},\n\t\t\t{0xffe4e1, \"mistyrose\"},\n\t\t\t{0xffebcd, \"blanchedalmond\"},\n\t\t\t{0xffefd5, \"papayawhip\"},\n\t\t\t{0xfff0f5, \"lavenderblush\"},\n\t\t\t{0xfff5ee, \"seashell\"},\n\t\t\t{0xfff8dc, \"cornsilk\"},\n\t\t\t{0xfffacd, \"lemonchiffon\"},\n\t\t\t{0xfffaf0, \"floralwhite\"},\n\t\t\t{0xfffafa, \"snow\"},\n\t\t\t{0xffff00, \"yellow\"},\n\t\t\t{0xffffe0, \"lightyellow\"},\n\t\t\t{0xfffff0, \"ivory\"},\n\t\t\t{0xffffff, \"white\"}\n\t\t}};\n\t\tColorName cmppair = {_value, nullptr};\n\t\tauto it = algo::lower_bound(colornames, cmppair, [](const ColorName &c1, const ColorName &c2) {\n\t\t\treturn c1.rgb < c2.rgb;\n\t\t});\n\t\tif (it != colornames.end() && it->rgb == _value)\n\t\t\treturn it->name;\n\t}\n\treturn rgbString();\n}\n\n\nvalarray<double> Color::getDoubleValues () const {\n\tint n = numComponents(_cspace);\n\tvalarray<double> values(n);\n\tint i=0;\n\tfor (int shift= (n-1)*8; shift >= 0; shift-=8)\n\t\tvalues[i++] = ((_value >> shift) & 0xff)/255.0;\n\treturn values;\n}\n\n\nstatic uint32_t interpolate_cmyk2rgb (const valarray<double> &cmyk);\n\n/** Approximates a CMYK color by an RGB triple. The component values\n *  are expected to be normalized, i.e. 0 <= cmyk[i],rgb[j] <= 1.\n *  @param[in]  cmyk color in CMYK space\n *  @param[out] rgb  RGB approximation */\nvoid Color::CMYK2RGB (const valarray<double> &cmyk, valarray<double> &rgb) {\n#if 0\n\tdouble cc = 1-cmyk[0];\n\tdouble mc = 1-cmyk[1];\n\tdouble yc = 1-cmyk[2];\n\tdouble kc = 1-cmyk[3];\n\t// https://graphicdesign.stackexchange.com/a/137902\n\trgb[0] = 0.3137+0.5882*cc-0.3529*mc-0.1373*yc+0.47175*cc*mc+0.1173*yc*cc;\n\trgb[1] = 0.2588-0.1961*cc+0.2745*mc-0.0627*yc+0.54825*cc*mc+0.0204*yc*cc+0.1581*yc*mc;\n\trgb[2] = 0.3373-0.3255*cc-0.1569*mc+0.1647*yc+0.1173*cc*mc+0.31365*yc*cc+0.54825*yc*mc;\n\tfor (int i=0; i < 3; i++)\n\t\trgb[i] = min(1.0, max(0.0, rgb[i]*kc));\n#else\n\tuint32_t rgb32 = interpolate_cmyk2rgb(cmyk);\n\trgb[0] = (rgb32 >> 16) / 255.0;\n\trgb[1] = ((rgb32 >> 8) & 0xff) / 255.0;\n\trgb[2] = (rgb32 & 0xff) / 255.0;\n#endif\n}\n\n\n/** Converts a color given in HSB coordinates to RGB.\n *  @param[in]  hsb color in HSB space\n *  @param[out] rgb color in RGB space */\nvoid Color::HSB2RGB (const valarray<double> &hsb, valarray<double> &rgb) {\n\tif (hsb[1] == 0)\n\t\trgb[0] = rgb[1] = rgb[2] = hsb[2];\n\telse {\n\t\tdouble h = hsb[0]-floor(hsb[0]);\n\t\tint i = int(6*h);\n\t\tdouble f = 6*h-i;\n\t\tdouble p = hsb[2]*(1-hsb[1]);\n\t\tdouble q = hsb[2]*(1-hsb[1]*f);\n\t\tdouble t = hsb[2]*(1-hsb[1]*(1-f));\n\t\tswitch (i) {\n\t\t\tcase 0 : rgb[0]=hsb[2]; rgb[1]=t; rgb[2]=p; break;\n\t\t\tcase 1 : rgb[0]=q; rgb[1]=hsb[2]; rgb[2]=p; break;\n\t\t\tcase 2 : rgb[0]=p; rgb[1]=hsb[2]; rgb[2]=t; break;\n\t\t\tcase 3 : rgb[0]=p; rgb[1]=q; rgb[2]=hsb[2]; break;\n\t\t\tcase 4 : rgb[0]=t; rgb[1]=p; rgb[2]=hsb[2]; break;\n\t\t\tcase 5 : rgb[0]=hsb[2]; rgb[1]=p; rgb[2]=q; break;\n\t\t\tdefault: ;  // prevent compiler warning\n\t\t}\n\t}\n}\n\n\ndouble Color::getGray () const {\n\tdouble r, g, b;\n\tgetRGB(r, g, b);\n\treturn r*0.3 + g*0.59 + b*0.11; // gray value according to NTSC video standard\n}\n\n\nvoid Color::getGray (valarray<double> &gray) const {\n\tgray.resize(1);\n\tgray[0] = getGray();\n}\n\n\nvalarray<double> Color::getRGBDouble () const {\n\tvalarray<double> values = getDoubleValues();\n\tvalarray<double> rgbValues;\n\tswitch (_cspace) {\n\t\tcase ColorSpace::RGB:\n\t\t\trgbValues = std::move(values);\n\t\t\tbreak;\n\t\tcase ColorSpace::CMYK:\n\t\t\trgbValues.resize(3);\n\t\t\tCMYK2RGB(values, rgbValues);\n\t\t\tbreak;\n\t\tcase ColorSpace::GRAY:\n\t\t\trgbValues.resize(3);\n\t\t\trgbValues[0] = rgbValues[1] = rgbValues[2] = values[0];\n\t\t\tbreak;\n\t\tcase ColorSpace::LAB:\n\t\t\trgbValues.resize(3);\n\t\t\tLab2XYZ(values, rgbValues);\n\t\t\tXYZ2RGB(rgbValues, values);\n\t\t\trgbValues = std::move(values);\n\t\t\tbreak;\n\t\tdefault: ;\n\t}\n\treturn rgbValues;\n}\n\n\nuint32_t Color::getRGBUInt32 () const {\n\tswitch (_cspace) {\n\t\tcase ColorSpace::GRAY: {\n\t\t\tuint32_t gray = _value & 0xff;\n\t\t\treturn (gray << 16) | (gray << 8) | gray;\n\t\t}\n\t\tcase ColorSpace::RGB:\n\t\t\treturn _value;\n\t\tdefault:\n\t\t\tvalarray<double> rgb = getRGBDouble();\n\t\t\treturn (double_to_byte(rgb[0]) << 16) | (double_to_byte(rgb[1]) << 8) | (double_to_byte(rgb[2]));\n\t}\n}\n\n\nvoid Color::getRGB (double &r, double &g, double &b) const {\n\tvalarray<double> rgb = getRGBDouble();\n\tr = rgb[0];\n\tg = rgb[1];\n\tb = rgb[2];\n}\n\n\nvoid Color::getRGB (valarray<double> &rgb) const {\n\trgb = getRGBDouble();\n}\n\n\nvoid Color::getXYZ (double &x, double &y, double &z) const {\n\tvalarray<double> rgb(3), xyz(3);\n\tgetRGB(rgb);\n\tRGB2XYZ(std::move(rgb), xyz);\n\tx = xyz[0];\n\ty = xyz[1];\n\tz = xyz[2];\n}\n\n\nvoid Color::setXYZ (double x, double y, double z) {\n\tvalarray<double> xyz(3), rgb(3);\n\txyz[0] = x;\n\txyz[1] = y;\n\txyz[2] = z;\n\tXYZ2RGB(xyz, rgb);\n\tsetRGB(rgb);\n\t_cspace = ColorSpace::RGB;\n}\n\n\nvoid Color::setXYZ (const valarray<double> &xyz) {\n\tvalarray<double> rgb(3);\n\tXYZ2RGB(xyz, rgb);\n\tsetRGB(rgb);\n\t_cspace = ColorSpace::RGB;\n}\n\n\nvoid Color::setLab (double l, double a, double b) {\n\tvalarray<double> lab(3), xyz(3);\n\tlab[0] = l;\n\tlab[1] = a;\n\tlab[2] = b;\n\tLab2XYZ(lab, xyz);\n\tsetXYZ(xyz);\n}\n\n\nvoid Color::setLab (const valarray<double> &lab) {\n\tvalarray<double> xyz(3);\n\tLab2XYZ(lab, xyz);\n\tsetXYZ(xyz);\n}\n\n\n/** Get the color in CIELAB color space using the sRGB working space and reference white D65. */\nvoid Color::getLab (double &l, double &a, double &b) const {\n\tvalarray<double> rgb(3), lab(3);\n\tgetRGB(rgb);\n\tRGB2Lab(rgb, lab);\n\tl = lab[0];\n\ta = lab[1];\n\tb = lab[2];\n}\n\n\nvoid Color::getLab (std::valarray<double> &lab) const {\n\tlab.resize(3);\n\tvalarray<double> rgb(3);\n\tgetRGB(rgb);\n\tRGB2Lab(rgb, lab);\n}\n\n\ninline double cube (double x) {return x*x*x;}\n\nvoid Color::Lab2XYZ (const valarray<double> &lab, valarray<double> &xyz) {\n\txyz.resize(3);\n\tdouble wx=0.95047, wy=1.00, wz=1.08883;  // reference white D65\n\tdouble eps = 0.008856;\n\tdouble kappa = 903.3;\n\tdouble fy = (lab[0]+16)/116;\n\tdouble fx = lab[1]/500 + fy;\n\tdouble fz = fy - lab[2]/200;\n\tdouble xr = (cube(fx) > eps ? cube(fx) : (116*fx-16)/kappa);\n\tdouble yr = (lab[0] > kappa*eps ? cube((lab[0]+16)/116) : lab[0]/kappa);\n\tdouble zr = (cube(fz) > eps ? cube(fz) : (116*fz-16)/kappa);\n\txyz[0] = xr*wx;\n\txyz[1] = yr*wy;\n\txyz[2] = zr*wz;\n}\n\n\nvoid Color::XYZ2RGB (const valarray<double> &xyz, valarray<double> &rgb) {\n\trgb.resize(3);\n\trgb[0] =  3.2404542*xyz[0] - 1.5371385*xyz[1] - 0.4985314*xyz[2];\n\trgb[1] = -0.9692660*xyz[0] + 1.8760108*xyz[1] + 0.0415560*xyz[2];\n\trgb[2] =  0.0556434*xyz[0] - 0.2040259*xyz[1] + 1.0572252*xyz[2];\n\tfor (int i=0; i < 3; i++)\n\t\trgb[i] = (rgb[i] <= 0.0031308 ? 12.92*rgb[i] : 1.055*pow(rgb[i], 1/2.4)-0.055);\n}\n\n\nvoid Color::RGB2XYZ (valarray<double> rgb, valarray<double> &xyz) {\n\txyz.resize(3);\n\tfor (int i=0; i < 3; i++)\n\t\trgb[i] = (rgb[i] <= 0.04045 ? rgb[i]/12.92 : pow((rgb[i]+0.055)/1.055, 2.4));\n\txyz[0] = 0.4124564*rgb[0] + 0.3575761*rgb[1] + 0.1804375*rgb[2];\n\txyz[1] = 0.2126729*rgb[0] + 0.7151522*rgb[1] + 0.0721750*rgb[2];\n\txyz[2] = 0.0193339*rgb[0] + 0.1191920*rgb[1] + 0.9503041*rgb[2];\n}\n\n\nvoid Color::RGB2Lab (const valarray<double> &rgb, valarray<double> &lab) {\n\tdouble wx=0.95047, wy=1.00, wz=1.08883;  // reference white D65\n\tdouble eps = 0.008856;\n\tdouble kappa = 903.3;\n\tvalarray<double> xyz(3);\n\tRGB2XYZ(rgb, xyz);\n\txyz[0] /= wx;\n\txyz[1] /= wy;\n\txyz[2] /= wz;\n\tdouble fx = (xyz[0] > eps ? pow(xyz[0], 1.0/3) : (kappa*xyz[0]+16)/116);\n\tdouble fy = (xyz[1] > eps ? pow(xyz[1], 1.0/3) : (kappa*xyz[1]+16)/116);\n\tdouble fz = (xyz[2] > eps ? pow(xyz[2], 1.0/3) : (kappa*xyz[2]+16)/116);\n\tlab[0] = 116*fy-16;\n\tlab[1] = 500*(fx-fy);\n\tlab[2] = 200*(fy-fz);\n}\n\n\n#if 0\n/** Returns the Delta E difference (CIE 2000) between this and another color. */\ndouble Color::deltaE (const Color &c) const {\n\tdouble l1, a1, b1;\n\tdouble l2, a2, b2;\n\tgetLab(l1, a1, b1);\n\tc.getLab(l2, a2, b2);\n\tconst double deltaL = l2-l1;\n\tconst double lBar = (l1+l2)/2;\n\tconst double c1 = hypot(a1, b1);\n\tconst double c2 = hypot(a2, b2);\n\tconst double cBar = (c1+c2)/2.0;\n\tconst double g = (1.0-sqrt(pow(cBar, 7.0)/(pow(cBar, 7.0)+6103515625.0)))/2.0;\n\tconst double aa1 = a1*(1.0+g);\n\tconst double aa2 = a2*(1.0+g);\n\tconst double cc1 = hypot(aa1, b1);\n\tconst double cc2 = hypot(aa2, b2);\n\tconst double ccBar = (cc1+cc2)/2.0;\n\tconst double deltaCC = cc2-cc1;\n\tdouble hh1 = atan2(b1, aa1);\n\tif (hh1 < 0) hh1 += deg2rad(360);\n\tdouble hh2 = atan2(b2, aa2);\n\tif (hh2 < 0) hh2 += deg2rad(360);\n\tconst double hhBar = (std::abs(hh1-hh2) > deg2rad(180) ? (hh1+hh2+deg2rad(360)) : (hh1+hh2))/2.0;\n\tconst double t = 1.0\n\t\t- 0.17*cos(hhBar-deg2rad(30.0))\n\t\t+ 0.24*cos(2.0*hhBar)\n\t\t+ 0.32*cos(3.0*hhBar+deg2rad(6.0))\n\t\t- 0.20*cos(4.0*hhBar-deg2rad(63.0));\n\tdouble deltaHH = hh2-hh1;\n\tif (deltaHH < deg2rad(-180))\n\t\tdeltaHH += deg2rad(360);\n\telse if (deltaHH > deg2rad(180))\n\t\tdeltaHH -= deg2rad(360);\n\tconst double deltaHHH = 2.0*sqrt(cc1*cc2)*sin(deltaHH/2.0);\n\tconst double sl = 1.0 + 0.015*sqr(lBar-50.0)/sqrt(20.0+sqr(lBar-50.0));\n\tconst double sc = 1.0 + 0.045*ccBar;\n\tconst double sh = 1.0 + 0.015*ccBar*t;\n\tconst double deltaTheta = deg2rad(30)*exp(-sqr((hhBar-deg2rad(275))/deg2rad(25)));\n\tconst double rc = 2.0*sqrt(pow(ccBar, 7)/(pow(ccBar, 7)+6103515625.0));\n\tconst double rt = -rc*sin(2.0*deltaTheta);\n\tconst double deltaE = sqrt(sqr(deltaL/sl) + sqr(deltaCC/sc) + sqr(deltaHHH/sh) + rt*deltaCC/sc*deltaHHH/sh);\n\treturn deltaE;\n}\n#endif\n\n\nint Color::numComponents (ColorSpace colorSpace) {\n\tswitch (colorSpace) {\n\t\tcase ColorSpace::GRAY: return 1;\n\t\tcase ColorSpace::LAB:\n\t\tcase ColorSpace::RGB:  return 3;\n\t\tcase ColorSpace::CMYK: return 4;\n\t\tdefault: ;\n\t}\n\treturn 0;\n}\n\n\nstruct Cmyk2RgbTable {\n\tusing IntVec = vector<int>;\n\tusing DoubleVec = vector<double>;\n\n\tstatic constexpr const int GRIDSIZE = 5;  // number of grid points per CMYK component\n\tstatic array<uint32_t, GRIDSIZE*GRIDSIZE*GRIDSIZE*GRIDSIZE> rgbvalues;\n\tstatic const array<int, 4> dimfactors;\n\n\tstatic double interpolate (const IntVec &gi0, const IntVec &gi1, const DoubleVec &t, int icmyk, int irgb, int idx);\n};\n\n// For grid indices ci, mi, yi, ki, the corresponding table entry is located\n// at index ci + mi*GRIDSIZE + yi*GRIDSIZE^2 + ki*GRIDSIZE^3.\nconst array<int, 4> Cmyk2RgbTable::dimfactors {{\n\t1, GRIDSIZE, GRIDSIZE*GRIDSIZE, GRIDSIZE*GRIDSIZE*GRIDSIZE\n}};\n\n\n/** Compute RGB from CMYK by multivariate linear interpolation of sampled color values.\n *  @param[in] cmyk CMYK color components (all values between 0 and 1)\n *  @return 24-bit RGB color value (0x00RRGGBB) */\nstatic uint32_t interpolate_cmyk2rgb (const valarray<double> &cmyk) {\n\tvector<int> gi0(4), gi1(4);  // upper and lower grid indices enclosing the CMYK components\n\tvector<double> t(4);   // fractional parts of the grid indices where the CMYK components are located\n\tfor (int i=0; i < 4; i++) {\n\t\tdouble gridpos = math::clip(cmyk[i], 0, 1)*(Cmyk2RgbTable::GRIDSIZE-1);\n\t\tdouble gi;\n\t\tt[i] = modf(gridpos, &gi); // distance of i-th CMYK component to nearest lower grid index (in [0,1))\n\t\tgi0[i] = int(gi);          // index of nearest grid value <= i-th CMYK component\n\t\tgi1[i] = ceil(gridpos);    // index of nearest grid value >= i-th CMYK component\n\t}\n\tuint32_t rgb=0;\n\tfor (int i=0; i < 3; i++) {\n\t\tdouble rgb_component = Cmyk2RgbTable::interpolate(gi0, gi1, t, 3, i, 0);\n\t\trgb_component = round(math::clip(rgb_component, 0, 255));\n\t\trgb = (rgb << 8) | int(rgb_component);\n\t}\n\treturn rgb;\n}\n\n\ninline uint32_t get_byte (uint32_t value, int n) {\n\treturn (value >> n*8) & 0xff;\n}\n\n\n/** Computes an RGB color component for a CMYK color by multi-linear interpolation\n *  using a 4-dimensional grid of pre-computed color values.\n *  @param[in] gi0 indices of nearest grid values <= corresponding CMYK components\n *  @param[in] gi1 indices of nearest grid values >= corresponding CMYK components\n *  @param[in] t fractional parts of the grid indices where the components of the CMYK color are located\n *  @param[in] icmyk index of CMYK component to process (0=C, 1=M, 2=Y, 3=K)\n *  @param[in] irgb index of RGB component to interpolate (0=R, 1=G, 2=B)\n *  @param[in] idx index of RGB value in lookup table (computed during recursion, final value reached when icmyk==0)\n *  @return The interpolated RGB color component in the range from 0 to 255. */\ndouble Cmyk2RgbTable::interpolate (const IntVec &gi0, const IntVec &gi1, const DoubleVec &t, int icmyk, int irgb, int idx) {\n\tint idx0 = gi0[icmyk]*dimfactors[icmyk]+idx;\n\tint idx1 = gi1[icmyk]*dimfactors[icmyk]+idx;\n\tdouble a, b;\n\tif (icmyk == 0) {\n\t\ta = get_byte(rgbvalues[idx0], 2-irgb);\n\t\tb = get_byte(rgbvalues[idx1], 2-irgb);\n\t}\n\telse {\n\t\ta = interpolate(gi0, gi1, t, icmyk-1, irgb, idx0);\n\t\tb = interpolate(gi0, gi1, t, icmyk-1, irgb, idx1);\n\t}\n\treturn a + (b-a)*t[icmyk];\n}\n\n\n/** RGB values for a 5x5x5x5 grid of CMYK values in [0,1]^4, i.e. the grid values of each dimension\n *  are 0, 0.25, 0.5, 0.75, and 1. For grid coordinates (c,m,y,k), the corresponding RGB values are\n *  located at index ci + 5*mi + 5*5*yi + 5*5*5*ki where ci=4*c, mi=4*m, yi=4*y, ki=4*k.\n *  The RGB values were computed with Little CMS utility 'transicc' using options -t1 and -b\n *  applied to Ghostscript's ICC profiles default_cmyk.icc and default_rgb.icc. */\narray<uint32_t, 625> Cmyk2RgbTable::rgbvalues {{\n\t0xffffff,0xb9e5fa,0x6dcff6,0x00bdf2,0x00aeef,0xf9cbdf,0xbbb8dc,0x7da7d9,0x1c9ad6,0x008fd5,0xf49ac1,0xbc8cbf,0x8781bd,0x4978bc,0x0072bc,0xf067a6,\n\t0xbd60a5,0x8e5ba5,0x5b57a6,0x0054a6,0xec008c,0xbd1a8d,0x92278f,0x662c91,0x2e3092,0xfffbcc,0xc0e2ca,0x7accc8,0x00bac6,0x00abc5,0xfbc8b4,0xc1b6b3,\n\t0x86a6b2,0x3799b1,0x008eb0,0xf5989d,0xc08c9c,0x8d819c,0x51789c,0x00719c,0xf16687,0xc06188,0x915c89,0x5f588a,0x03558b,0xed0972,0xbf1e74,0x942977,\n\t0x682f79,0x32327b,0xfff799,0xc4df9b,0x82ca9c,0x07b89d,0x00a99d,0xfdc689,0xc3b48b,0x8aa48c,0x43978d,0x008c8d,0xf69679,0xc28b7b,0x8f807d,0x56777e,\n\t0x00707e,0xf1666a,0xc1616c,0x925c6e,0x625870,0x145571,0xed145a,0xbf235e,0x942c61,0x693163,0x343465,0xfff45f,0xc8dd69,0x88c86f,0x2bb673,0x00a775,\n\t0xfec35a,0xc6b261,0x8ea366,0x4b9669,0x008b6b,0xf79552,0xc48a57,0x927f5c,0x5b775f,0x006f61,0xf26649,0xc2614e,0x945c53,0x645855,0x1c5557,0xed1941,\n\t0xc02646,0x952e4a,0x6a324d,0x35354e,0xfff200,0xcbdb2a,0x8dc63f,0x39b54a,0x00a650,0xffc20d,0xc8b12f,0x91a23d,0x519546,0x008a4b,0xf7941d,0xc5892f,\n\t0x947f3a,0x5e7641,0x006f45,0xf26522,0xc3602e,0x955c37,0x66583c,0x22543f,0xed1c24,0xc1272d,0x962e34,0x6b3337,0x363639,0xc7c8ca,0x92b6c7,0x57a5c4,\n\t0x0097c1,0x008bbf,0xc3a0b2,0x9593b0,0x6486ae,0x177bac,0x0072aa,0xc0799a,0x967099,0x6c6798,0x3a6097,0x005a96,0xbd4f84,0x964b84,0x714784,0x484385,\n\t0x004185,0xba006f,0x960470,0x741372,0x511b74,0x232176,0xcac6a3,0x97b3a2,0x60a3a0,0x00959f,0x008a9e,0xc59f90,0x98918f,0x6a858e,0x2a7a8e,0x00728d,\n\t0xc1787d,0x986f7d,0x70677d,0x40607d,0x00597d,0xbd506c,0x984b6c,0x73486d,0x4b446e,0x00416f,0xbb005a,0x970e5c,0x75185e,0x531e60,0x262261,0xcbc37b,\n\t0x9ab07c,0x65a07d,0x00937d,0x00887e,0xc69c6d,0x9a8f6f,0x6d836f,0x337970,0x007071,0xc17760,0x996e61,0x716663,0x435f63,0x005964,0xbe4f53,0x984b55,\n\t0x744857,0x4c4458,0x0a4159,0xba0546,0x971549,0x751c4b,0x52214d,0x27244f,0xccc04d,0x9cae53,0x6a9f58,0x1c915c,0x00875e,0xc69a47,0x9b8e4c,0x6f824f,\n\t0x397853,0x006f55,0xc1753f,0x9a6d43,0x736547,0x465e4a,0x00584c,0xbe4f38,0x994b3b,0x74483f,0x4e4442,0x124144,0xba0e31,0x971934,0x761f37,0x53233a,\n\t0x28253c,0xccbe00,0x9dad20,0x6d9d30,0x28903a,0x008641,0xc7990b,0x9c8c21,0x71812d,0x3d7735,0x006f3b,0xc27514,0x9b6c21,0x74652a,0x485e30,0x005834,\n\t0xbe4f17,0x994b20,0x754827,0x4f442c,0x17412f,0xba1319,0x981b1e,0x762123,0x542427,0x2a2529,0x939598,0x6c8896,0x3e7c94,0x007192,0x006991,0x917786,\n\t0x6f6d84,0x496483,0x055b82,0x005581,0x8f5973,0x705273,0x504b72,0x274572,0x004071,0x8e3762,0x713363,0x543063,0x332d63,0x002b64,0x8c0052,0x710053,\n\t0x570054,0x3b0256,0x140858,0x95937a,0x6f8679,0x447a78,0x007078,0x006877,0x92766b,0x716c6b,0x4c636a,0x175b6a,0x00546a,0x90585d,0x71515d,0x524b5d,\n\t0x2b455d,0x00405d,0x8e384f,0x713450,0x553151,0x352e51,0x002c52,0x8c0041,0x710043,0x570144,0x3b0846,0x160d47,0x96915b,0x70845c,0x48785d,0x006e5e,\n\t0x00665e,0x937450,0x716a51,0x4e6252,0x1e5a53,0x005454,0x905745,0x715047,0x524b48,0x2d4549,0x00404a,0x8d383a,0x71353c,0x55323e,0x362f40,0x002c41,\n\t0x8b0030,0x700032,0x560835,0x3b0d37,0x161038,0x968f37,0x72823c,0x4a7740,0x006d43,0x006545,0x937231,0x726935,0x506039,0x23593b,0x00533e,0x90562a,\n\t0x71502e,0x534a31,0x2f4534,0x004036,0x8d3823,0x713527,0x55322a,0x362f2d,0x002d2f,0x8b001d,0x700520,0x560c23,0x3b1026,0x161228,0x968d00,0x728012,\n\t0x4c7520,0x0d6c28,0x00652e,0x937100,0x726812,0x51601c,0x265823,0x005228,0x905500,0x714f0f,0x534919,0x31441e,0x004022,0x8d3802,0x71350d,0x553215,\n\t0x37301a,0x012d1d,0x8b0204,0x70090a,0x560f10,0x3b1215,0x171417,0x636466,0x465a65,0x225264,0x004b63,0x004563,0x624e59,0x494758,0x2c4058,0x003a57,\n\t0x003557,0x61374c,0x4a324c,0x322d4c,0x0f284c,0x00244c,0x601b3f,0x4b1740,0x361441,0x1c1041,0x000d42,0x600032,0x4c0034,0x380035,0x220037,0x000038,\n\t0x636250,0x475950,0x265150,0x004a50,0x004550,0x624d45,0x494646,0x2e4046,0x003a46,0x003546,0x61363a,0x4a323b,0x332d3c,0x12293c,0x00253c,0x601c30,\n\t0x4b1931,0x361632,0x1c1333,0x001134,0x5f0024,0x4b0027,0x380029,0x22002a,0x00002b,0x64603a,0x48573b,0x28503c,0x00493d,0x00443d,0x624b31,0x4a4532,\n\t0x2f3f33,0x003a34,0x003535,0x603628,0x4a312a,0x332d2b,0x14292c,0x00252d,0x5f1d1f,0x4b1a21,0x351823,0x1c1525,0x001226,0x5e0015,0x4b0018,0x37001b,\n\t0x21001d,0x00001e,0x645f1e,0x495623,0x2a4f26,0x004928,0x00442a,0x624a18,0x4a441c,0x303e1f,0x043922,0x003524,0x603510,0x4a3115,0x332d18,0x15291b,\n\t0x00261d,0x5f1d07,0x4a1b0d,0x351911,0x1c1714,0x001416,0x5e0000,0x4a0004,0x370008,0x21000c,0x00000e,0x635e00,0x495500,0x2b4e08,0x004811,0x004416,\n\t0x624a00,0x4a4300,0x303e03,0x07390b,0x003510,0x603500,0x4a3100,0x332d00,0x162904,0x002608,0x5f1e00,0x4a1b00,0x351900,0x1c1700,0x001502,0x5e0000,\n\t0x4a0000,0x360000,0x210000,0x000000,0x231f20,0x0c1a21,0x001522,0x001123,0x000e23,0x230d15,0x100617,0x000019,0x00001a,0x00001b,0x230008,0x13000d,\n\t0x00000f,0x000011,0x000012,0x230000,0x150001,0x030005,0x000008,0x00000a,0x230000,0x160000,0x060000,0x000000,0x000001,0x201d12,0x081914,0x001515,\n\t0x001216,0x001017,0x210c04,0x0e0608,0x00020a,0x00000c,0x00000d,0x220000,0x120000,0x000000,0x000002,0x000003,0x230000,0x140000,0x010000,0x000000,\n\t0x000000,0x230000,0x150000,0x040000,0x000000,0x000000,0x1e1c00,0x061802,0x001504,0x001306,0x001107,0x200c00,0x0d0700,0x000300,0x000100,0x000000,\n\t0x210000,0x110000,0x000000,0x000000,0x000000,0x220000,0x130000,0x000000,0x000000,0x000000,0x230000,0x150000,0x030000,0x000000,0x000000,0x1c1b00,\n\t0x041800,0x001500,0x001300,0x001200,0x1f0b00,0x0b0700,0x000400,0x000200,0x000100,0x210000,0x100000,0x000000,0x000000,0x000000,0x220000,0x120000,\n\t0x000000,0x000000,0x000000,0x230000,0x140000,0x020000,0x000000,0x000000,0x1b1a00,0x021700,0x001500,0x001400,0x001200,0x1e0b00,0x0a0700,0x000500,\n\t0x000300,0x000200,0x200000,0x0f0000,0x000000,0x000000,0x000000,0x210000,0x120000,0x000000,0x000000,0x000000,0x220000,0x140000,0x010000,0x000000,\n\t0x000000\n}};\n"
  },
  {
    "path": "src/Color.hpp",
    "content": "/*************************************************************************\n** Color.hpp                                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef COLOR_HPP\n#define COLOR_HPP\n\n#include <cstdint>\n#include <string>\n#include <valarray>\n#include <vector>\n#include \"VectorIterator.hpp\"\n\n#ifdef TRANSPARENT\n#undef TRANSPARENT\n#endif\n\nclass Color {\n\tpublic:\n\t\tstatic bool SUPPRESS_COLOR_NAMES;\n\t\tstatic const Color BLACK;\n\t\tstatic const Color WHITE;\n\n\t\tenum class ColorSpace {GRAY, RGB, CMYK, LAB, TRANSPARENT};\n\n\tpublic:\n\t\tColor () noexcept =default;\n\t\texplicit Color (uint32_t rgb) noexcept : _value(rgb) {}\n\t\tColor (uint32_t value, ColorSpace cs) : _value(value), _cspace(cs) {}\n\t\tColor (uint8_t r, uint8_t g, uint8_t b) noexcept  {setRGB(r,g,b);}\n\t\tColor (double r, double g, double b) noexcept     {setRGB(r,g,b);}\n\t\texplicit Color (const std::valarray<double> &rgb) noexcept {setRGB(rgb);}\n\t\texplicit Color (const std::valarray<double> &rgb, ColorSpace cs) noexcept;\n\t\texplicit Color (const std::string &colorstr);\n\t\texplicit operator uint32_t () const            {return _value;}\n\t\tbool operator == (const Color &c) const        {return _value == c._value;}\n\t\tbool operator != (const Color &c) const        {return _value != c._value;}\n\t\tbool operator < (const Color &c) const         {return _value < c._value;}\n\t\tColor operator *= (double c);\n\t\tColor operator * (double c) const              {return Color(*this) *= c;}\n\t\tbool isTransparent () const                    {return _cspace == ColorSpace::TRANSPARENT;}\n\t\tvoid setRGB (uint8_t r, uint8_t g, uint8_t b);\n\t\tvoid setRGB (double r, double g, double b);\n\t\tvoid setRGB (const std::valarray<double> &rgb) {setRGB(rgb[0], rgb[1], rgb[2]);}\n\t\tbool setRGBHexString (std::string hexString);\n\t\tbool setPSName (std::string name, bool case_sensitive=true);\n\t\tvoid setGray (uint8_t g)  {setRGB(g,g,g);}\n\t\tvoid setGray (double g) {setRGB(g,g,g);}\n\t\tvoid setGray (const std::valarray<double> &gray) {setRGB(gray[0], gray[0], gray[0]);}\n\t\tvoid setHSB (double h, double s, double b);\n\t\tvoid setCMYK (uint8_t c, uint8_t m, uint8_t y, uint8_t k);\n\t\tvoid setCMYK (double c, double m, double y, double k);\n\t\tvoid setCMYK (const std::valarray<double> &cmyk);\n\t\tvoid setXYZ (double x, double y, double z);\n\t\tvoid setXYZ (const std::valarray<double> &xyz);\n\t\tvoid setLab (double l, double a, double b);\n\t\tvoid setLab (const std::valarray<double> &lab);\n\t\tvoid set (ColorSpace colorSpace, VectorIterator<double> &it);\n\t\tstd::valarray<double> getDoubleValues () const;\n\t\tdouble getGray () const;\n\t\tvoid getGray (std::valarray<double> &gray) const;\n\t\tvoid getRGB (double &r, double &g, double &b) const;\n\t\tvoid getRGB (std::valarray<double> &rgb) const;\n\t\tvoid getXYZ (double &x, double &y, double &z) const;\n\t\tvoid getLab (double &l, double &a, double &b) const;\n\t\tvoid getLab (std::valarray<double> &lab) const;\n\t\tdouble deltaE (const Color &c) const;\n\t\tstd::string rgbString () const;\n\t\tstd::string svgColorString (bool rgbonly) const;\n\t\tstd::string svgColorString () const {return svgColorString(SUPPRESS_COLOR_NAMES);}\n\t\tstatic void CMYK2RGB (const std::valarray<double> &cmyk, std::valarray<double> &rgb);\n\t\tstatic void HSB2RGB (const std::valarray<double> &hsb, std::valarray<double> &rgb);\n\t\tstatic void RGB2XYZ (std::valarray<double> rgb, std::valarray<double> &xyz);\n\t\tstatic void XYZ2RGB (const std::valarray<double> &xyz, std::valarray<double> &rgb);\n\t\tstatic void RGB2Lab (const std::valarray<double> &rgb, std::valarray<double> &lab);\n\t\tstatic void Lab2XYZ (const std::valarray<double> &lab, std::valarray<double> &xyz);\n\t\tstatic int numComponents (ColorSpace colorSpace);\n\n\tprotected:\n\t\tuint32_t getRGBUInt32 () const;\n\t\tstd::valarray<double> getRGBDouble () const;\n\n\tprivate:\n\t\tuint32_t _value=0;\n\t\tColorSpace _cspace=ColorSpace::RGB;\n};\n\n#endif\n"
  },
  {
    "path": "src/ColorSpecialHandler.cpp",
    "content": "/*************************************************************************\n** ColorSpecialHandler.cpp                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstring>\n#include <sstream>\n#include <vector>\n#include \"algorithm.hpp\"\n#include \"ColorSpecialHandler.hpp\"\n#include \"SpecialActions.hpp\"\n\nusing namespace std;\n\n\nstatic double read_double (istream &is) {\n\tis.clear();\n\tdouble v;\n\tis >> v;\n\tif (is.fail())\n\t\tthrow SpecialException(\"number expected\");\n\treturn v;\n}\n\n\n/** Reads multiple double values from a given stream. The number of\n *  values read is determined by the size of the result vector.\n *  @param[in]  is stream to be read from\n *  @param[out] vec the resulting values */\nstatic void read_doubles (istream &is, vector<double> &vec) {\n\talgo::generate(vec, [&is]() {\n\t\treturn read_double(is);\n\t});\n}\n\n\n/** Reads a color statement from an input stream and converts it to a color object.\n *  A color statement has the following syntax:\n *  _color model_ _component values_\n *  Currently, the following color models are supported: rgb, cmyk, hsb and gray.\n *  Examples: rgb 1 0.5 0, gray 0.5\n *  @param[in] model the color model\n *  @param[in] is stream to be read from\n *  @return resulting Color object */\nColor ColorSpecialHandler::readColor (const string &model, istream &is) {\n\tColor color;\n\tif (model == \"rgb\") {\n\t\tvector<double> rgb(3);\n\t\tread_doubles(is, rgb);\n\t\tcolor.setRGB(rgb[0], rgb[1], rgb[2]);\n\t}\n\telse if (model == \"cmyk\") {\n\t\tvector<double> cmyk(4);\n\t\tread_doubles(is, cmyk);\n\t\tcolor.setCMYK(cmyk[0], cmyk[1], cmyk[2], cmyk[3]);\n\t}\n\telse if (model == \"hsb\") {\n\t\tvector<double> hsb(3);\n\t\tread_doubles(is, hsb);\n\t\tcolor.setHSB(hsb[0], hsb[1], hsb[2]);\n\t}\n\telse if (model == \"gray\")\n\t\tcolor.setGray(read_double(is));\n\telse if (!color.setPSName(model, true))\n\t\tthrow SpecialException(\"unknown color statement\");\n\treturn color;\n}\n\n\n/** Reads the color model (rgb, cmyk, hsb, or gray) and the corresponding color components\n *  from a given input stream.\n *  @param[in] is stream to be read from\n *  @return resulting Color object */\nColor ColorSpecialHandler::readColor (istream &is) {\n\tstring model;\n\tis >> model;\n\treturn readColor(model, is);\n}\n\n\nbool ColorSpecialHandler::process (const string&, istream &is, SpecialActions &actions) {\n\tchar colortype=0;\n\tauto pos = is.tellg();\n\tstring cmd;\n\tis >> cmd;\n\tif (cmd == \"push\")               // color push [fill|stroke] <model> <params>\n\t\tcolortype = processPush(is);\n\telse if (cmd == \"pop\") {\n\t\tif (!_colorStack.empty())     // color pop\n\t\t\t_colorStack.pop_back();\n\t}\n\telse if (cmd == \"set\")           // color set [fill|stroke] <model> <params>\n\t\tcolortype = processSet(is);\n\telse {                           // color [fill|stroke] <model> <params>\n\t\twhile (!_colorStack.empty())\n\t\t\t_colorStack.pop_back();\n\t\tis.seekg(pos);\n\t\tcolortype = processPush(is);\n\t}\n\tif (_colorStack.empty()) {\n\t\tif (colortype == 0 || colortype == 'f')\n\t\t\tactions.setFillColor(_defaultFillColor);\n\t\tif (colortype == 0 || colortype == 's')\n\t\t\tactions.setStrokeColor(_defaultStrokeColor);\n\t}\n\telse {\n\t\tif (colortype == 0 || colortype == 'f')\n\t\t\tactions.setFillColor(_colorStack.back().fillColor);\n\t\tif (colortype == 0 || colortype == 's')\n\t\t\tactions.setStrokeColor(_colorStack.back().strokeColor);\n\t}\n\treturn true;\n}\n\n\n/** Parses [fill|stroke] <model> <params>.\n *  @param[in] is stream to read from\n *  @param[out] type specified type color type ('f'=fill, 's'=stroke, 0=none specified)\n *  @return color object representing the specified color */\nstatic Color read_color_and_type (istream &is, char &type) {\n\tstring token;\n\tstring model;\n\tis >> token;\n\tif (token == \"fill\" || token == \"stroke\") {\n\t\tis >> model;\n\t\ttype = token[0];\n\t}\n\telse {\n\t\tmodel = std::move(token);\n\t\ttype = '\\0';\n\t}\n\treturn ColorSpecialHandler::readColor(model, is);\n}\n\n\n/** Handles push [fill|stroke] <model> <params> which pushes a new color pair\n *  onto the stack. If 'fill' or 'stroke' is specified, only that color value is set.\n *  The other one is copied from the current corresponding value.\n *  @return color type specified in the special command ('f'=fill, 's'=stroke, 0=none specified) */\nchar ColorSpecialHandler::processPush (istream &is) {\n\t_colorStack.emplace_back(ColorPair{});\n\treturn processSet(is);\n}\n\n\n/** Handles set [fill|stroke] <model> <params> which changes the current\n *  color pair without pushing new ones. If the stack is empty, the default\n *  color values (usually black) are changed.\n *  @return color type specified in the special command ('f'=fill, 's'=stroke, 0=none specified) */\nchar ColorSpecialHandler::processSet (istream &is) {\n\tchar type;\n\tColor color = read_color_and_type(is, type);\n\tColor &fillColor = _colorStack.empty() ? _defaultFillColor : _colorStack.back().fillColor;\n\tColor &strokeColor = _colorStack.empty() ? _defaultStrokeColor : _colorStack.back().strokeColor;\n\tif (type == 0 || type == 'f')\n\t\tfillColor = color;\n\tif (type == 0 || type == 's')\n\t\tstrokeColor = color;\n\treturn type;\n}\n\n\nvector<const char*> ColorSpecialHandler::prefixes () const {\n\tvector<const char*> pfx {\"color\"};\n\treturn pfx;\n}\n\n"
  },
  {
    "path": "src/ColorSpecialHandler.hpp",
    "content": "/*************************************************************************\n** ColorSpecialHandler.hpp                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef COLORSPECIALHANDLER_HPP\n#define COLORSPECIALHANDLER_HPP\n\n#include <stack>\n#include <string>\n#include <vector>\n#include \"Color.hpp\"\n#include \"SpecialHandler.hpp\"\n\n\nclass ColorSpecialHandler : public SpecialHandler {\n\tprivate:\n\t\tstruct ColorPair {\n\t\t\tColor fillColor;\n\t\t\tColor strokeColor;\n\t\t};\n\n\tpublic:\n\t\tbool process (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tstatic Color readColor (std::istream &is);\n\t\tstatic Color readColor (const std::string &model, std::istream &is);\n\t\tconst char* name () const override {return handlerName();}\n\t\tstatic const char* handlerName ()  {return \"color\";}\n\t\tconst char* info () const override {return \"complete support of color specials\";}\n\t\tstd::vector<const char*> prefixes () const override;\n\t\tsize_t stackSize () const {return _colorStack.size();}\n\n\tprotected:\n\t\tchar processPush (std::istream &is);\n\t\tchar processSet (std::istream &is);\n\n\tprivate:\n\t\tColor _defaultFillColor = Color::BLACK;\n\t\tColor _defaultStrokeColor = Color::BLACK;\n\t\tstd::vector<ColorPair> _colorStack;\n};\n\n#endif\n"
  },
  {
    "path": "src/DLLoader.cpp",
    "content": "/*************************************************************************\n** DLLoader.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"DLLoader.hpp\"\n\nusing namespace std;\n\n\n/** Creates a new DLLoader object and tries to load the given dynamic/shared library.\n *  @param[in] dlname name of library to load */\nDLLoader::DLLoader (const string &dlname) : _handle(nullptr) {\n\tloadLibrary(dlname);\n}\n\n\n/** Releases the currently assigned dynamic/shared library and loads another one.\n *  @param[in] dlname name of library to load */\nbool DLLoader::loadLibrary (const string &dlname) {\n\tcloseLibrary();\n\tif (!dlname.empty()) {\n#ifdef _WIN32\n\t\t_handle = LoadLibrary(dlname.c_str());\n#else\n\t\t_handle = dlopen(dlname.c_str(), RTLD_LAZY);\n#endif\n\t}\n\treturn _handle != nullptr;\n}\n\n\n/** Releases the library currently assigned to the DLLoader object. */\nvoid DLLoader::closeLibrary () {\n\tif (_handle) {\n#ifdef _WIN32\n\t\tFreeLibrary(_handle);\n#else\n\t\tdlclose(_handle);\n#endif\n\t\t_handle = nullptr;\n\t}\n}\n\n"
  },
  {
    "path": "src/DLLoader.hpp",
    "content": "/*************************************************************************\n** DLLoader.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef DLLOADER_HPP\n#define DLLOADER_HPP\n\n#include <string>\n\n#ifdef _WIN32\n\t#include \"windows.hpp\"\n#else\n\t#include <dlfcn.h>\n#endif\n\n\nclass DLLoader {\n\tpublic:\n\t\tDLLoader () =delete;\n\t\texplicit DLLoader (const std::string &dlname);\n\t\tDLLoader (DLLoader &&loader) =default;\n\t\tvirtual ~DLLoader () {closeLibrary();}\n\t\tbool loaded () const {return _handle != nullptr;}\n\t\tbool loadLibrary (const std::string &dlname);\n\n\tprotected:\n\t\ttemplate <typename T> T loadSymbol (const char *name) const;\n\t\tvoid closeLibrary ();\n\n\tprivate:\n#ifdef _WIN32\n\t\tHINSTANCE _handle;\n#else\n\t\tvoid *_handle;\n#endif\n};\n\n\n/** Loads a function or variable from the dynamic/shared library.\n *  @param[in] name name of function/variable to load\n *  @return pointer to loaded symbol, or 0 if the symbol could not be loaded */\ntemplate <typename T>\nT DLLoader::loadSymbol (const char *name) const {\n\tif (_handle) {\n#ifdef _WIN32\n\t\treturn reinterpret_cast<T>(GetProcAddress(_handle, name));\n#else\n\t\treturn reinterpret_cast<T>(dlsym(_handle, name));\n#endif\n\t}\n\treturn nullptr;\n}\n\n#define LOAD_SYMBOL(sym) loadSymbol<decltype(&sym)>(#sym)\n\n#endif\n"
  },
  {
    "path": "src/DVIActions.hpp",
    "content": "/*************************************************************************\n** DVIActions.hpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef DVIACTIONS_HPP\n#define DVIACTIONS_HPP\n\n#include <cstdint>\n#include <string>\n#include <vector>\n\nclass BoundingBox;\nclass Font;\n\nstruct DVIActions {\n\tvirtual ~DVIActions () =default;\n\tvirtual void reset () {}\n\tvirtual void setChar (double x, double y, unsigned c, bool vertical, const Font &f) {}\n\tvirtual void setRule (double x, double y, double height, double width) {}\n\tvirtual void setTextOrientation (bool vertical) {}\n\tvirtual void moveToX (double x, bool forceSVGMove) {}\n\tvirtual void moveToY (double y, bool forceSVGMove) {}\n\tvirtual void setFont (int num, const Font &font) {}\n\tvirtual void special (const std::string &s, double dvi2bp, bool preprocessing=false) {}\n\tvirtual void beginPage (unsigned pageno, const std::vector<int32_t> &c) {}\n\tvirtual void endPage (unsigned pageno) {}\n\tvirtual BoundingBox& bbox () =0;\n\tvirtual void progress (size_t current, size_t total, const char *id=nullptr) {}\n};\n\n#endif\n"
  },
  {
    "path": "src/DVIReader.cpp",
    "content": "/*************************************************************************\n** DVIReader.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <numeric>\n#include <sstream>\n#include <vectorstream.hpp>\n#include \"algorithm.hpp\"\n#include \"Color.hpp\"\n#include \"DVIActions.hpp\"\n#include \"DVIReader.hpp\"\n#include \"Font.hpp\"\n#include \"FontManager.hpp\"\n#include \"HashFunction.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\nDVIReader::DVIReader (istream &is) : BasicDVIReader(is)\n{\n\texecutePreamble();\n\t_bopOffsets = collectBopOffsets();\n\t// read data from postamble but don't process font definitions\n\tgoToPostamble();\n\texecuteCommand();\n\texecutePostPost();\n}\n\n\n/** Executes all DVI commands read from the input stream. */\nvoid DVIReader::executeAll () {\n\tint opcode = 0;\n\twhile (!eof() && opcode >= 0) {\n\t\ttry {\n\t\t\topcode = executeCommand();\n\t\t}\n\t\tcatch (const DVIPrematureEOFException &) {\n\t\t\t// end of stream reached\n\t\t\topcode = -1;\n\t\t}\n\t}\n}\n\n\n/** Reads and executes the commands of a single page.\n *  This methods stops reading after the page's eop command has been executed.\n *  @param[in] n number of page to be executed (1-based)\n *  @returns true if page was read successfully */\nbool DVIReader::executePage (unsigned n) {\n\tclearStream();    // reset all status bits\n\tif (!isStreamValid())\n\t\tthrowDVIException(\"invalid DVI file (page \"+to_string(n)+\" not found\");\n\tif (n < 1 || n > numberOfPages())\n\t\treturn false;\n\n\tseek(_bopOffsets[n-1]); // goto bop of n-th page\n\t_currPageNum = n;\n\twhile (executeCommand() != OP_EOP);\n\treturn true;\n}\n\n\n/** Computes a hash value for a given page. The hash algorithm is selected by\n *  a HashFunction object which will also contain the resulting hash value if\n *  this function returns true.\n *  @param[in] pageno number of page to process (1-based)\n *  @param[in,out] hashFunc hash function to use\n *  @return true on success, hashFunc contains the resulting hash value */\nbool DVIReader::computePageHash (size_t pageno, HashFunction &hashFunc) const {\n\tif (pageno == 0 || pageno > numberOfPages())\n\t\treturn false;\n\n\thashFunc.reset();\n\tclearStream();\n\tseek(_bopOffsets[pageno-1]+45);  // now on first command after bop of selected page\n\tsize_t numBytes = numberOfPageBytes(pageno-1)-46;  // number of bytes excluding bop and eop\n\twhile (numBytes > 0) {\n\t\tconstexpr size_t BUFSIZE = 4096;\n\t\tchar buf[BUFSIZE];\n\t\tgetInputStream().read(buf, min(numBytes, BUFSIZE));\n\t\thashFunc.update(buf, getInputStream().gcount());\n\t\tnumBytes -= getInputStream().gcount();\n\t}\n\treturn true;\n}\n\n\n/////////////////////////////////////\n\n/** Reads and executes DVI preamble command.\n *  Format: pre ver[1] num[4] den[4] mag[4] cmtlen[1] cmt[cmtlen] */\nvoid DVIReader::cmdPre (int) {\n\tuint8_t id = readUnsigned(1);\n\tsetDVIVersion(DVIVersion(id));     // identification number\n\tuint32_t numer = readUnsigned(4);  // numerator units of measurement\n\tuint32_t denom = readUnsigned(4);  // denominator units of measurement\n\tif (denom == 0)\n\t\tthrowDVIException(\"denominator of measurement unit is zero\");\n\t_mag = readUnsigned(4);        // magnification\n\tuint32_t k = readUnsigned(1);  // length of following comment\n\tstring comment = readString(k);\n\t// 1 dviunit * num/den == multiples of 0.0000001m\n\t// 1 dviunit * _dvibp: length of 1 dviunit in PS points * _mag/1000\n\t_dvi2bp = numer/254000.0*72.0/denom*_mag/1000.0;\n\tdviPre(id, numer, denom, _mag, comment);\n}\n\n\n/** Reads and executes DVI postamble command.\n *  Format: post p[4] num[4] den[4] mag[4] ph[4] pw[4] sd[2] np[2] */\nvoid DVIReader::cmdPost (int) {\n\tuint32_t prevBopOffset = readUnsigned(4);\n\tuint32_t numer = readUnsigned(4);\n\tuint32_t denom = readUnsigned(4);\n\tif (denom == 0)\n\t\tthrowDVIException(\"denominator of measurement unit is zero\");\n\t_mag = readUnsigned(4);\n\tuint32_t pageHeight = readUnsigned(4); // height of tallest page in dvi units\n\tuint32_t pageWidth  = readUnsigned(4); // width of widest page in dvi units\n\tuint16_t stackDepth = readUnsigned(2); // max. stack depth required\n\tuint16_t numPages = readUnsigned(2);\n\tif (numPages != (numberOfPages() & 0xffff))\n\t\tthrowDVIException(\"page count in postamble doesn't match actual number of pages\");\n\n\t// 1 dviunit * num/den == multiples of 0.0000001m\n\t// 1 dviunit * _dvi2bp: length of 1 dviunit in PS points * _mag/1000\n\t_dvi2bp = numer/254000.0*72.0/denom*_mag/1000.0;\n\tdviPost(stackDepth, numPages, pageWidth*_dvi2bp, pageHeight*_dvi2bp, _mag, numer, denom, prevBopOffset);\n}\n\n\n/** Reads and executes DVI post_post command.\n *  Format: post_post q[4] i[1] 223[>=4] */\nvoid DVIReader::cmdPostPost (int) {\n\tuint32_t postOffset = readUnsigned(4);   // pointer to begin of postamble\n\tuint8_t id = readUnsigned(1);\n\tsetDVIVersion(DVIVersion(id));   // identification byte\n\twhile (readUnsigned(1) == DVI_FILL);  // skip fill bytes (223), eof bit should be set now\n\tdviPostPost(DVIVersion(id), postOffset);\n}\n\n\n/** Reads and executes Begin-Of-Page command.\n *  Format: bop c0[+4] ... c9[+4] p[+4] */\nvoid DVIReader::cmdBop (int) {\n\tvector<int32_t> c(10);\n\tfor (int i=0; i < 10; i++)\n\t\tc[i] = readSigned(4);\n\tint32_t prevBopOffset = readSigned(4);  // pointer to peceeding bop (-1 in case of first page)\n\t_dviState.reset();    // set all DVI registers to 0\n\twhile (!_stateStack.empty())\n\t\t_stateStack.pop();\n\t_currFontNum = 0;\n\t_inPage = true;\n\tdviBop(c, prevBopOffset);\n}\n\n\n/** Reads and executes End-Of-Page command. */\nvoid DVIReader::cmdEop (int) {\n\tif (!_stateStack.empty())\n\t\tthrowDVIException(\"stack not empty at end of page\");\n\t_inPage = false;\n\tdviEop();\n}\n\n\n/** Reads and executes push command. */\nvoid DVIReader::cmdPush (int) {\n\t_stateStack.push(_dviState);\n\tdviPush();\n}\n\n\n/** Reads and executes pop command (restores pushed position information). */\nvoid DVIReader::cmdPop (int) {\n\tif (_stateStack.empty())\n\t\tthrowDVIException(\"stack empty at pop command\");\n\t_dviState = _stateStack.top();\n\t_stateStack.pop();\n\tdviPop();\n}\n\n\n/** Helper function that handles characters from virtual fonts (VF).\n *  It is called by the cmdSetChar and cmdPutChar methods.\n *  @param[in] font current font (corresponding to _currFontNum)\n *  @param[in] c character to typeset */\nvoid DVIReader::putVFChar (Font *font, uint32_t c) {\n\tif (auto vf = font_cast<VirtualFont*>(font)) { // is current font a virtual font?\n\t\tFontManager &fm = FontManager::instance();\n\t\tconst auto *dvi = vf->getDVI(c);    // try to get DVI sequence that represents character c\n\t\tFont *firstFont = fm.vfFirstFont(vf);\n\t\tif (!dvi) {\n\t\t\tconst FontMetrics *ffm = firstFont ? firstFont->getMetrics() : nullptr;\n\t\t\tif (!ffm || (!ffm->isJFM() && !ffm->isOFM()))\n\t\t\t\treturn;\n\t\t}\n\t\tfm.enterVF(vf);                              // enter VF font number context\n\t\tint savedFontNum = _currFontNum;             // save current font number\n\t\tsetFont(fm.vfFirstFontNum(vf), SetFontMode::VF_ENTER);\n\t\tif (!dvi)                                    // no definition present for current (Japanese) char?\n\t\t\tdviPutChar(c, firstFont);                 // fallback for JFM-based virtual fonts\n\t\telse {\n\t\t\t// DVI units in virtual fonts are multiples of 1^(-20) times the scaled size of the VF\n\t\t\tdouble savedScale = _dvi2bp;\n\t\t\t_dvi2bp = vf->scaledSize()/(1 << 20);\n\t\t\tDVIState savedState = _dviState;  // save current cursor position\n\t\t\t_dviState.x = _dviState.y = _dviState.w = _dviState.z = 0;\n\t\t\tivectorstream<vector<char>> vis(*dvi);\n\t\t\tauto &is = replaceStream(vis);\n\t\t\ttry {\n\t\t\t\texecuteAll();  // execute DVI fragment\n\t\t\t}\n\t\t\tcatch (const DVIException &) {\n\t\t\t\t// Message::estream(true) << \"invalid dvi in vf: \" << e.getMessage() << endl; // @@\n\t\t\t}\n\t\t\treplaceStream(is);       // restore previous input stream\n\t\t\t_dviState = savedState;  // restore previous cursor position\n\t\t\t_dvi2bp = savedScale;    // restore previous scale factor\n\t\t}\n\t\tfm.leaveVF();          // restore previous font number context\n\t\tsetFont(savedFontNum, SetFontMode::VF_LEAVE);  // restore previous font number\n\t}\n}\n\n\n/** Reads and executes set_char_x command. Puts a character at the current\n *  position and advances the cursor.\n *  @param[in] c character to set\n *  @throw DVIException if method is called outside a bop/eop pair */\nvoid DVIReader::cmdSetChar0 (int c) {\n\tif (!_inPage)\n\t\tthrowDVIException(\"setchar outside of page\");\n\tif (Font *font = FontManager::instance().getFont(_currFontNum)) {\n\t\tdviSetChar0(c, font); // template method that may trigger further actions\n\t\tputVFChar(font, c);   // further character processing if current font is a virtual font\n\t\tmoveRight(font->charWidth(c)*font->scaleFactor()*_mag/1000.0, MoveMode::SETCHAR);\n\t}\n\telse throwDVIException(\"no font selected prior to setchar\");\n}\n\n\n/** Reads and executes setx command. Puts a character at the current\n *  position and advances the cursor.\n *  @param[in] len number of parameter bytes (possible values: 1-4)\n *  @throw DVIException if method is called outside a bop/eop pair */\nvoid DVIReader::cmdSetChar (int len) {\n\tif (!_inPage)\n\t\tthrowDVIException(\"setchar outside of page\");\n\t// According to the dvi specification all character codes are unsigned\n\t// except len == 4. At the moment all char codes are treated as unsigned...\n\tuint32_t c = readUnsigned(len); // if len == 4 c may be signed\n\tif (Font *font = FontManager::instance().getFont(_currFontNum)) {\n\t\tdviSetChar(c, font); // template method that may trigger further actions\n\t\tputVFChar(font, c);  // further character processing if current font is a virtual font\n\t\tmoveRight(font->charWidth(c)*font->scaleFactor()*_mag/1000.0, MoveMode::SETCHAR);\n\t}\n\telse throwDVIException(\"no font selected prior to setchar\");\n}\n\n\n/** Reads and executes putx command. Puts a character at the current\n *  position but doesn't change the cursor position.\n *  @param[in] len number of parameter bytes (possible values: 1-4)\n *  @throw DVIException if method is called outside a bop/eop pair */\nvoid DVIReader::cmdPutChar (int len) {\n\tif (!_inPage)\n\t\tthrowDVIException(\"putchar outside of page\");\n\t// According to the dvi specification all character codes are unsigned\n\t// except len == 4. At the moment all char codes are treated as unsigned...\n\tint32_t c = readUnsigned(len);\n\tif (Font *font = FontManager::instance().getFont(_currFontNum)) {\n\t\tdviPutChar(c, font);\n\t\tputVFChar(font, c);\n\t}\n\telse throwDVIException(\"no font selected prior to putchar\");\n}\n\n\n/** Reads and executes set_rule command. Puts a solid rectangle at the current\n *  position and updates the cursor position.\n *  Format: set_rule h[+4] w[+4]\n *  @throw DVIException if method is called outside a bop/eop pair */\nvoid DVIReader::cmdSetRule (int) {\n\tif (!_inPage)\n\t\tthrowDVIException(\"set_rule outside of page\");\n\tdouble height = _dvi2bp*readSigned(4);\n\tdouble width  = _dvi2bp*readSigned(4);\n\tdviSetRule(height, width);\n\tmoveRight(width, MoveMode::CHANGEPOS);\n}\n\n\n/** Reads and executes set_rule command. Puts a solid rectangle at the current\n *  position but leaves the cursor position unchanged.\n *  Format: put_rule h[+4] w[+4]\n *  @throw DVIException if method is called outside a bop/eop pair */\nvoid DVIReader::cmdPutRule (int) {\n\tif (!_inPage)\n\t\tthrowDVIException(\"put_rule outside of page\");\n\tdouble height = _dvi2bp*readSigned(4);\n\tdouble width  = _dvi2bp*readSigned(4);\n\tdviPutRule(height, width);\n}\n\n\nvoid DVIReader::moveRight (double dx, MoveMode) {\n\tswitch (_dviState.d) {\n\t\tcase WritingMode::LR: _dviState.h += dx; break;\n\t\tcase WritingMode::TB: _dviState.v += dx; break;\n\t\tcase WritingMode::BT: _dviState.v -= dx; break;\n\t}\n}\n\n\nvoid DVIReader::moveDown (double dy, MoveMode) {\n\tswitch (_dviState.d) {\n\t\tcase WritingMode::LR: _dviState.v += dy; break;\n\t\tcase WritingMode::TB: _dviState.h -= dy; break;\n\t\tcase WritingMode::BT: _dviState.h += dy; break;\n\t}\n}\n\n\nvoid DVIReader::cmdRight (int len) {\n\tdouble dx = _dvi2bp*readSigned(len);\n\tmoveRight(dx, MoveMode::CHANGEPOS);\n\tdviRight(dx);\n}\n\n\nvoid DVIReader::cmdDown (int len) {\n\tdouble dy = _dvi2bp*readSigned(len);\n\tmoveDown(dy, MoveMode::CHANGEPOS);\n\tdviDown(dy);\n}\n\n\nvoid DVIReader::cmdNop (int) {dviNop();}\nvoid DVIReader::cmdX0 (int)  {moveRight(_dviState.x, MoveMode::CHANGEPOS); dviX0();}\nvoid DVIReader::cmdY0 (int)  {moveDown(_dviState.y, MoveMode::CHANGEPOS); dviY0();}\nvoid DVIReader::cmdW0 (int)  {moveRight(_dviState.w, MoveMode::CHANGEPOS); dviW0();}\nvoid DVIReader::cmdZ0 (int)  {moveDown(_dviState.z, MoveMode::CHANGEPOS); dviZ0();}\n\n\nvoid DVIReader::cmdX (int len) {\n\tdouble dx = _dvi2bp*readSigned(len);\n\t_dviState.x = dx;\n\tmoveRight(dx, MoveMode::CHANGEPOS);\n\tdviX(dx);\n}\n\n\nvoid DVIReader::cmdY (int len) {\n\tdouble dy = _dvi2bp*readSigned(len);\n\t_dviState.y = dy;\n\tmoveDown(dy, MoveMode::CHANGEPOS);\n\tdviY(dy);\n}\n\n\nvoid DVIReader::cmdW (int len) {\n\tdouble dx = _dvi2bp*readSigned(len);\n\t_dviState.w = dx;\n\tmoveRight(dx, MoveMode::CHANGEPOS);\n\tdviW(dx);\n}\n\n\nvoid DVIReader::cmdZ (int len) {\n\tdouble dy = _dvi2bp*readSigned(len);\n\t_dviState.z = dy;\n\tmoveDown(dy, MoveMode::CHANGEPOS);\n\tdviZ(dy);\n}\n\n\n/** Sets the text orientation (horizontal, vertical).\n *  This command is only available in DVI version 3 (created by pTeX) */\nvoid DVIReader::cmdDir (int) {\n\tuint8_t wmode = readUnsigned(1);\n\tif (wmode == 4)  // yoko mode (4) equals default LR mode (0)\n\t\twmode = 0;\n\tif (wmode == 2 || wmode > 3)\n\t\tthrowDVIException(\"invalid writing mode value \" + std::to_string(wmode) + \" (0, 1, 3, or 4 expected)\");\n\t_dviState.d = (WritingMode)wmode;\n\tdviDir(_dviState.d);\n}\n\n\nvoid DVIReader::cmdXXX (int len) {\n\tif (!_inPage)\n\t\tthrowDVIException(\"special outside of page\");\n\tuint32_t numBytes = readUnsigned(len);\n\tstring str = readString(numBytes);\n\tdviXXX(str);\n}\n\n\n/** Change the current font.\n *  @param[in] fontnum local number of font to select\n *  @param[in] mode info on command that triggered the font change\n *  @throw DVIException if font number is undefined */\nvoid DVIReader::setFont (int fontnum, SetFontMode mode) {\n\tif (const Font *font = FontManager::instance().getFont(fontnum)) {\n\t\t_currFontNum = fontnum;\n\t\tdviFontNum(uint32_t(fontnum), mode, font);\n\t}\n\telse\n\t\tthrowDVIException(\"undefined font number \" + std::to_string(fontnum));\n}\n\n\n/** Selects a previously defined font by its number.\n *  @param[in] fontnum font number\n *  @throw DVIException if font number is undefined */\nvoid DVIReader::cmdFontNum0 (int fontnum) {\n\tsetFont(fontnum, SetFontMode::SF_SHORT);\n}\n\n\n/** Selects a previously defined font.\n *  @param[in] len size of font number variable (in bytes)\n *  @throw DVIException if font number is undefined */\nvoid DVIReader::cmdFontNum (int len) {\n\tuint32_t fontnum = readUnsigned(len);\n\tsetFont(fontnum, SetFontMode::SF_LONG);\n}\n\n\n/** Parses a sequence of font attributes given as key1=val1;key2=val2;...;keyn=valn */\nstatic map<string,string> parse_font_attribs (const string &str) {\n\tmap<string,string> attribs;\n\tif (!str.empty()) {\n\t\tfor (const string &attr : util::split(str, \";\")) {\n\t\t\tvector<string> keyval = util::split(attr, \"=\");\n\t\t\tif (keyval.size() == 2)\n\t\t\t\tattribs[keyval[0]] = keyval[1];\n\t\t}\n\t}\n\treturn attribs;\n}\n\n\n/** Helper function to handle a font definition.\n *  @param[in] fontnum local font number\n *  @param[in] name font name (or file path if enclosed in square brackets)\n *  @param[in] cs checksum to be compared with TFM checksum\n *  @param[in] dsize design size of font in PS point units\n *  @param[in] ssize scaled size of font in PS point units */\nconst Font* DVIReader::defineFont (uint32_t fontnum, const string &name, uint32_t cs, double dsize, double ssize) {\n\tFontManager &fm = FontManager::instance();\n\tFont *font = fm.getFont(fontnum);\n\tif (!font && !name.empty()) {  // font not registered yet?\n\t\tif (name[0] == '[') {       // LuaTeX native font reference?\n\t\t\tauto last = name.rfind(']');\n\t\t\tif (last != string::npos) {\n\t\t\t\tstring path = name.substr(1, last-1);\n\t\t\t\tFontStyle style;\n\t\t\t\tint fontIndex=0;\n\t\t\t\tif (name.size() > last && name[last+1] == ':') {  // look for font attributes?\n\t\t\t\t\tauto attribs = parse_font_attribs(name.substr(last+2));\n\t\t\t\t\tauto it = attribs.begin();\n\t\t\t\t\tif ((it = attribs.find(\"index\")) != attribs.end())\n\t\t\t\t\t\tfontIndex = stoi(it->second);\n\t\t\t\t\tif ((it = attribs.find(\"embolden\")) != attribs.end())\n\t\t\t\t\t\tstyle.bold = stoi(it->second)/65536.0;\n\t\t\t\t\tif ((it = attribs.find(\"extend\")) != attribs.end())\n\t\t\t\t\t\tstyle.extend = stoi(it->second)/65536.0;\n\t\t\t\t\tif ((it = attribs.find(\"slant\")) != attribs.end())\n\t\t\t\t\t\tstyle.slant = stoi(it->second)/65536.0;\n\t\t\t\t}\n\t\t\t\tint id = fm.registerFont(fontnum, path, fontIndex, ssize, style, Color::BLACK);\n\t\t\t\tfont = fm.getFontById(id);\n\t\t\t}\n\t\t}\n\t\telse {  // TFM-based font specified by name\n\t\t\tint id = fm.registerFont(fontnum, name, cs, dsize, ssize);\n\t\t\tfont = fm.getFontById(id);\n\t\t\tif (auto vf = font_cast<VirtualFont*>(font)) {\n\t\t\t\t// read vf file, register its font and character definitions\n\t\t\t\tfm.enterVF(vf);\n\t\t\t\tifstream ifs(vf->path(), ios::binary);\n\t\t\t\tVFReader vfReader(ifs);\n\t\t\t\tvfReader.replaceActions(this);\n\t\t\t\tvfReader.executeAll();\n\t\t\t\tfm.leaveVF();\n\t\t\t}\n\t\t}\n\t}\n\treturn font;\n}\n\n\n/** Defines a new font.\n *  @param[in] len size of font number variable (in bytes) */\nvoid DVIReader::cmdFontDef (int len) {\n\tuint32_t fontnum  = readUnsigned(len);    // font number\n\tuint32_t checksum = readUnsigned(4);      // font checksum (to be compared with corresponding TFM checksum)\n\tuint32_t ssize    = readUnsigned(4);      // scaled size of font in DVI units\n\tuint32_t dsize    = readUnsigned(4);      // design size of font in DVI units\n\tuint32_t pathlen  = readUnsigned(1);      // length of font path\n\tuint32_t namelen  = readUnsigned(1);      // length of font name\n\tstring path       = readString(pathlen);  // path to font file\n\tstring fontname   = readString(namelen);\n\tconst Font *font  = defineFont(fontnum, fontname, checksum, dsize*_dvi2bp, ssize*_dvi2bp);\n\tdviFontDef(fontnum, checksum, font);\n}\n\n\n/** This template method is called by the VFReader after reading a font definition from a VF file.\n *  @param[in] fontnum local font number\n *  @param[in] path path to font file\n *  @param[in] name font name\n *  @param[in] checksum checksum to be compared with TFM checksum\n *  @param[in] dsize design size in PS point units\n *  @param[in] ssize scaled size in PS point units */\nvoid DVIReader::defineVFFont (uint32_t fontnum, const string &path, const string &name, uint32_t checksum, double dsize, double ssize) {\n\tif (const VirtualFont *vf = FontManager::instance().getVF())\n\t\tdefineFont(fontnum, name, checksum, dsize, ssize * vf->scaleFactor());\n}\n\n\n/** This template method is called by the VFReader after reading a character definition from a VF file.\n *  @param[in] c character number\n *  @param[in] dvi DVI fragment describing the character */\nvoid DVIReader::defineVFChar (uint32_t c, vector<char> dvi) {\n\tFontManager::instance().assignVFChar(c, std::move(dvi));\n}\n\n\n/** XDV extension: includes image or pdf file.\n *  parameters: box[1] matrix[4][6] p[2] len[2] path[l] */\nvoid DVIReader::cmdXPic (int) {\n\tuint8_t box = readUnsigned(1);    // box\n\tvector<int32_t> matrix(6);\n\tfor (int i=0; i < 6; i++)       // matrix\n\t\tmatrix[i] = readSigned(4);\n\tint16_t page = readSigned(2);     // page number\n\tuint16_t len = readUnsigned(2);\n\tstring path = readString(len);  // path to image/pdf file\n\tdviXPic(box, matrix, page, path);\n}\n\n\n/** XDV extension: defines a native font */\nvoid DVIReader::cmdXFontDef (int) {\n\tint32_t fontnum = readSigned(4);\n\tdouble ptsize = _dvi2bp*readUnsigned(4);\n\tuint16_t flags = readUnsigned(2);\n\tuint8_t psname_len = readUnsigned(1);\n\tuint8_t fmname_len = getDVIVersion() == DVI_XDV5 ? readUnsigned(1) : 0;  // length of family name\n\tuint8_t stname_len = getDVIVersion() == DVI_XDV5 ? readUnsigned(1) : 0;  // length of style name\n\tstring fontname = readString(psname_len);\n\tuint32_t fontIndex=0;\n\tif (getDVIVersion() == DVI_XDV5)\n\t\tseek(fmname_len+stname_len, ios::cur);\n\telse\n\t\tfontIndex = readUnsigned(4);\n\tFontStyle style;\n\tColor color;\n\tif (flags & 0x0100) { // vertical?\n\t}\n\tif (flags & 0x0200) { // colored?\n\t\t// The font color must not interfere with color specials. If the font color is not black,\n\t\t// all color specials should be ignored, i.e. glyphs of a non-black fonts have a fixed color\n\t\t// that can't be changed by color specials.\n\t\tuint32_t rgba = readUnsigned(4);\n\t\tcolor.setRGB(uint8_t(rgba >> 24), uint8_t((rgba >> 16) & 0xff), uint8_t((rgba >> 8) & 0xff));\n\t}\n\tif (flags & 0x1000)   // extend?\n\t\tstyle.extend = _dvi2bp*readSigned(4);\n\tif (flags & 0x2000)   // slant?\n\t\tstyle.slant = _dvi2bp*readSigned(4);\n\tif (flags & 0x4000)   // embolden?\n\t\tstyle.bold = _dvi2bp*readSigned(4);\n\tif ((flags & 0x0800) && (getDVIVersion() == DVI_XDV5)) { // variations?\n\t\tuint16_t num_variations = readSigned(2);\n\t\tfor (int i=0; i < num_variations; i++)\n\t\t\treadUnsigned(4);\n\t}\n\tconst Font *font = FontManager::instance().getFont(fontnum);\n\tif (!font) {\n\t\tFontManager::instance().registerFont(fontnum, fontname, fontIndex, ptsize, style, color);\n\t\tfont = FontManager::instance().getFont(fontnum);\n\t}\n\tdviXFontDef(fontnum, font_cast<const NativeFont*>(font));\n}\n\n\n/** Returns the width of a string typed with a given font.\n *  @param[in] glyphs glyphs of the string\n *  @param[in] font assigned font\n *  @return width in bp units */\nstatic double string_width (const vector<uint16_t> &glyphs, const Font *font) {\n\tif (auto nfont = font_cast<const NativeFont*>(font)) {\n\t\treturn algo::accumulate(glyphs, 0.0, [&nfont](double w, uint16_t gid) {\n\t\t\treturn w + nfont->hAdvance(Character(Character::INDEX, gid));\n\t\t});\n\t}\n\treturn 0;\n}\n\n\n/** XDV extension: prints an array of characters where each character\n *  can take independent x and y coordinates.\n *  parameters: w[4] n[2] (dx,dy)[(4+4)n] glyphs[2n] */\nvoid DVIReader::cmdXGlyphArray (int) {\n\tvector<double> dx, dy;\n\tvector<uint16_t> glyphs;\n\tdouble width = putGlyphArray(false, dx, dy, glyphs);\n\tFont *font = FontManager::instance().getFont(_currFontNum);\n\tif (!font)\n\t\tthrowDVIException(\"missing setfont prior to xglypharray\");\n\tdviXGlyphArray(dx, dy, glyphs, *font);\n\tdouble diff = abs(string_width(glyphs, font) - width);\n\t// if the given width differs from the actual width of the string,\n\t// we must force a position change to prevent misalignments\n\tmoveRight(width, diff < 0.2 ? MoveMode::SETCHAR : MoveMode::CHANGEPOS);\n}\n\n\n/** XDV extension: prints an array/string of characters where each character\n *  can take independent x coordinates whereas all share a single y coordinate.\n *  parameters: w[4] n[2] dx[4n] dy[4] glyphs[2n] */\nvoid DVIReader::cmdXGlyphString (int) {\n\tvector<double> dx, dy;\n\tvector<uint16_t> glyphs;\n\tdouble width = putGlyphArray(true, dx, dy, glyphs);\n\tFont *font = FontManager::instance().getFont(_currFontNum);\n\tif (!font)\n\t\tthrowDVIException(\"missing setfont prior to xglyphstring\");\n\tdviXGlyphString(dx, glyphs, *font);\n\tdouble diff = abs(string_width(glyphs, font) - width);\n\t// if the given width differs from the actual width of the string,\n\t// we must force a position change to prevent misalignments\n\tmoveRight(width, diff < 0.2 ? MoveMode::SETCHAR : MoveMode::CHANGEPOS);\n}\n\n\n/** XDV extension: Same as cmdXGlyphArray plus a leading array of UTF-16 characters\n *  that specify the \"actual text\" represented by the glyphs to be printed. It usually\n *  contains the text with special characters (like ligatures) expanded so that it\n *  can be used for text search, plain text copy & paste etc. This XDV command was\n *  introduced with XeTeX 0.99995 and can be triggered by <tt>\\\\XeTeXgenerateactualtext1</tt>.\n *  parameters: l[2] chars[2l] w[4] n[2] (dx,dy)[8n] glyphs[2n] */\nvoid DVIReader::cmdXTextAndGlyphs (int) {\n\tuint16_t l = readUnsigned(2);  // number of chars\n\tvector<uint16_t> chars(l);\n\tfor (int i=0; i < l; i++)\n\t\tchars[i] = readUnsigned(2);\n\tvector<double> x, y;\n\tvector<uint16_t> glyphs;\n\tdouble width = putGlyphArray(false, x, y, glyphs);\n\tFont *font = FontManager::instance().getFont(_currFontNum);\n\tif (!font)\n\t\tthrowDVIException(\"missing setfont prior to xtextandglyphs\");\n\tdviXTextAndGlyphs(x, y, chars, glyphs, *font);\n\tdouble diff = abs(string_width(glyphs, font) - width);\n\t// if the given width differs from the actual width of the string,\n\t// we must force a position change to prevent misalignments\n\tmoveRight(width, diff < 0.2 ? MoveMode::SETCHAR : MoveMode::CHANGEPOS);\n}\n\n\n/** Implements the common functionality of cmdXGlyphArray, cmdXGlyphString, and cmdXTextAndGlyphs.\n *  @param[in] xonly indicates if the characters share a single y coordinate (xonly==true)\n *  @param[out] dx relative horizontal positions of each glyph\n *  @param[out] dy relative vertical positions of each glyph\n *  @param[out] glyphs FreeType indices of the glyphs to typeset\n *  @return total width of the glyph array */\ndouble DVIReader::putGlyphArray (bool xonly, vector<double> &dx, vector<double> &dy, vector<uint16_t> &glyphs) const {\n\tdouble strwidth = _dvi2bp*readSigned(4);\n\tuint16_t num_glyphs = readUnsigned(2);\n\tdx.resize(num_glyphs);\n\tdy.resize(num_glyphs);\n\tglyphs.resize(num_glyphs);\n\tfor (int i=0; i < num_glyphs; i++) {\n\t\tdx[i] = readSigned(4)*_dvi2bp;\n\t\tdy[i] = xonly ? 0 : readSigned(4)*_dvi2bp;\n\t}\n\tfor (int i=0; i < num_glyphs; i++)\n\t\tglyphs[i] = readUnsigned(2);\n\treturn strwidth;\n}\n"
  },
  {
    "path": "src/DVIReader.hpp",
    "content": "/*************************************************************************\n** DVIReader.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef DVIREADER_HPP\n#define DVIREADER_HPP\n\n#include <cstdint>\n#include <limits>\n#include <map>\n#include <stack>\n#include <string>\n#include \"BasicDVIReader.hpp\"\n#include \"Color.hpp\"\n#include \"VFActions.hpp\"\n\nclass Font;\nclass FontStyle;\nclass HashFunction;\nclass NativeFont;\nclass VirtualFont;\n\nclass DVIReader : public BasicDVIReader, public VFActions {\n\tprotected:\n\t\tenum class WritingMode {LR=0, TB=1, BT=3};\n\t\tenum class SetFontMode {SF_SHORT, SF_LONG, VF_ENTER, VF_LEAVE};\n\t\tenum class MoveMode {SETCHAR, CHANGEPOS};\n\n\t\tstruct DVIState {\n\t\t\tdouble h=0, v=0;               ///< horizontal and vertical cursor position\n\t\t\tdouble x=0, w=0, y=0, z=0;     ///< additional registers to store horizontal (x, w) and vertical (y, z) positions\n\t\t\tWritingMode d=WritingMode::LR; ///< direction: 0: horizontal, 1: vertical(top->bottom), 3: vertical (bottom->top)\n\t\t\tvoid reset () {h = v = x = w = y = z = 0.0; d=WritingMode::LR;}\n\t\t};\n\n\tpublic:\n\t\texplicit DVIReader (std::istream &is);\n\t\tvoid executeAll ();\n\t\tbool executePage (unsigned n);\n\t\tdouble getXPos () const override             {return _dviState.h;}\n\t\tdouble getYPos () const override             {return _dviState.v;}\n\t\tint stackDepth () const override             {return _stateStack.size();}\n\t\tunsigned currentPageNumber () const override {return _currPageNum;}\n\t\tunsigned numberOfPages () const              {return _bopOffsets.empty() ? 0 : _bopOffsets.size()-1;}\n\n\tprotected:\n\t\tsize_t numberOfPageBytes (int n) const {return _bopOffsets.size() > 1 ? _bopOffsets[n+1]-_bopOffsets[n] : 0;}\n\t\tbool computePageHash (size_t pageno, HashFunction &hashFunc) const;\n\t\tvirtual void moveRight (double dx, MoveMode mode);\n\t\tvirtual void moveDown (double dy, MoveMode mode);\n\t\tvoid putVFChar (Font *font, uint32_t c);\n\t\tdouble putGlyphArray (bool xonly, std::vector<double> &dx, std::vector<double> &dy, std::vector<uint16_t> &glyphs) const;\n\t\tconst Font* defineFont (uint32_t fontnum, const std::string &name, uint32_t cs, double dsize, double ssize);\n\t\tvoid setFont (int num, SetFontMode mode);\n\t\tconst DVIState& dviState() const {return _dviState;}\n\t\tdouble dvi2bp () const {return _dvi2bp;}\n\t\tbool inPage () const   {return _inPage;}\n\n\t\t// VFAction methods\n\t\tvoid defineVFFont (uint32_t fontnum, const std::string &path, const std::string &name, uint32_t checksum, double dsize, double ssize) override;\n\t\tvoid defineVFChar (uint32_t c, std::vector<char> dvi) override;\n\n\t\t// The following template methods provide higher-level access to the DVI commands.\n\t\t// In contrast to their cmdXXX pendants, they don't require any handling of the input stream.\n\t\t// All command arguments are delivered as function parameters. These methods are called after\n\t\t// the DVI registers have been updated, i.e. currState() represents the state after executing\n\t\t// the command. If the previous register state is required, prevState() can be used.\n\t\tvirtual void dviPre (uint8_t id, uint32_t numer, uint32_t denom, uint32_t mag, const std::string &comment) {}\n\t\tvirtual void dviPost (uint16_t stdepth, uint16_t pages, uint32_t pw, uint32_t ph, uint32_t mag, uint32_t num, uint32_t den, uint32_t lbopofs) {}\n\t\tvirtual void dviPostPost (uint8_t id, uint32_t postOffset) {}\n\t\tvirtual void dviBop (const std::vector<int32_t> &c, int32_t prevBopOffset) {}\n\t\tvirtual void dviEop () {}\n\t\tvirtual void dviSetChar0 (uint32_t c, const Font *font) {}\n\t\tvirtual void dviSetChar (uint32_t c, const Font *font) {}\n\t\tvirtual void dviPutChar (uint32_t c, const Font *font) {}\n\t\tvirtual void dviSetRule (double h, double w) {}\n\t\tvirtual void dviPutRule (double h, double w) {}\n\t\tvirtual void dviNop () {}\n\t\tvirtual void dviPush () {}\n\t\tvirtual void dviPop () {}\n\t\tvirtual void dviRight (double dx) {}\n\t\tvirtual void dviDown (double dy) {}\n\t\tvirtual void dviX0 () {}\n\t\tvirtual void dviY0 () {}\n\t\tvirtual void dviW0 () {}\n\t\tvirtual void dviZ0 () {}\n\t\tvirtual void dviX (double x) {}\n\t\tvirtual void dviY (double y) {}\n\t\tvirtual void dviW (double w) {}\n\t\tvirtual void dviZ (double z) {}\n\t\tvirtual void dviFontDef (uint32_t fontnum, uint32_t checksum, const Font *font) {}\n\t\tvirtual void dviFontNum (uint32_t fontnum, SetFontMode mode, const Font *font) {}\n\t\tvirtual void dviDir (WritingMode dir) {}\n\t\tvirtual void dviXXX (const std::string &str) {}\n\t\tvirtual void dviXPic (uint8_t box, const std::vector<int32_t> &matrix, int16_t page, const std::string &path) {}\n\t\tvirtual void dviXFontDef (uint32_t fontnum, const NativeFont *font) {}\n\t\tvirtual void dviXGlyphArray (std::vector<double> &dx, std::vector<double> &dy, std::vector<uint16_t> &glyphs, const Font &font) {}\n\t\tvirtual void dviXGlyphString (std::vector<double> &dx, std::vector<uint16_t> &glyphs, const Font &font) {}\n\t\tvirtual void dviXTextAndGlyphs (std::vector<double> &dx, std::vector<double> &dy, std::vector<uint16_t> &chars, std::vector<uint16_t> &glyphs, const Font &font) {}\n\n\tprivate:\n\t\t// The following low-level methods evaluate the DVI commands read from\n\t\t// the input stream and call the corresponding dviXXX methods.\n\t\tvoid cmdSetChar0 (int c) override;\n\t\tvoid cmdSetChar (int len) override;\n\t\tvoid cmdPutChar (int len) override;\n\t\tvoid cmdSetRule (int len) override;\n\t\tvoid cmdPutRule (int len) override;\n\t\tvoid cmdNop (int len) override;\n\t\tvoid cmdBop (int len) override;\n\t\tvoid cmdEop (int len) override;\n\t\tvoid cmdPush (int len) override;\n\t\tvoid cmdPop (int len) override;\n\t\tvoid cmdDir (int len) override;\n\t\tvoid cmdRight (int len) override;\n\t\tvoid cmdDown (int len) override;\n\t\tvoid cmdX0 (int len) override;\n\t\tvoid cmdY0 (int len) override;\n\t\tvoid cmdW0 (int len) override;\n\t\tvoid cmdZ0 (int len) override;\n\t\tvoid cmdX (int len) override;\n\t\tvoid cmdY (int len) override;\n\t\tvoid cmdW (int len) override;\n\t\tvoid cmdZ (int len) override;\n\t\tvoid cmdFontDef (int len) override;\n\t\tvoid cmdFontNum0 (int n) override;\n\t\tvoid cmdFontNum (int len) override;\n\t\tvoid cmdXXX (int len) override;\n\t\tvoid cmdPre (int len) override;\n\t\tvoid cmdPost (int len) override;\n\t\tvoid cmdPostPost (int len) override;\n\t\tvoid cmdXPic (int len) override;\n\t\tvoid cmdXFontDef (int len) override;\n\t\tvoid cmdXGlyphArray (int len) override;\n\t\tvoid cmdXGlyphString (int len) override;\n\t\tvoid cmdXTextAndGlyphs (int len) override;\n\n\tprivate:\n\t\tbool _inPage=false;          ///< true if stream pointer is between bop and eop\n\t\tunsigned _currPageNum=0;     ///< current page number (1 is first page)\n\t\tint _currFontNum=0;          ///< current font number\n\t\tdouble _dvi2bp=0.0;          ///< factor to convert dvi units to PS points\n\t\tuint32_t _mag=1;             ///< magnification factor * 1000\n\t\tDVIState _dviState;          ///< current state of the DVI registers\n\t\tstd::stack<DVIState> _stateStack;\n\t\tstd::vector<uint32_t> _bopOffsets;\n};\n\n#endif\n"
  },
  {
    "path": "src/DVIToSVG.cpp",
    "content": "/*************************************************************************\n** DVIToSVG.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <config.h>\n#include <cstdlib>\n#include <ctime>\n#include <fstream>\n#include <iomanip>\n#include <set>\n#include <sstream>\n#include \"Calculator.hpp\"\n#include \"DVIToSVG.hpp\"\n#include \"DVIToSVGActions.hpp\"\n#include \"FileSystem.hpp\"\n#include \"Font.hpp\"\n#include \"FontManager.hpp\"\n#include \"GlyphTracerMessages.hpp\"\n#include \"InputBuffer.hpp\"\n#include \"InputReader.hpp\"\n#include \"PageRanges.hpp\"\n#include \"PageSize.hpp\"\n#include \"PreScanDVIReader.hpp\"\n#include \"SignalHandler.hpp\"\n#include \"optimizer/SVGOptimizer.hpp\"\n#include \"SVGOutput.hpp\"\n#include \"utility.hpp\"\n#include \"version.hpp\"\n#include \"XXHashFunction.hpp\"\n\n///////////////////////////////////\n// special handlers\n\n#include \"BgColorSpecialHandler.hpp\"\n#include \"ColorSpecialHandler.hpp\"\n#include \"DvisvgmSpecialHandler.hpp\"\n#include \"EmSpecialHandler.hpp\"\n#include \"HtmlSpecialHandler.hpp\"\n#include \"PapersizeSpecialHandler.hpp\"\n#include \"PdfSpecialHandler.hpp\"\n#include \"PsSpecialHandlerProxy.hpp\"\n#include \"TpicSpecialHandler.hpp\"\n\n///////////////////////////////////\n\nusing namespace std;\n\n/** 'a': trace all glyphs even if some of them are already cached\n *  'm': trace missing glyphs, i.e. glyphs not yet cached\n *   0 : only trace actually required glyphs */\nchar DVIToSVG::TRACE_MODE = 0;\nbool DVIToSVG::COMPUTE_PROGRESS = false;\nDVIToSVG::HashSettings DVIToSVG::PAGE_HASH_SETTINGS;\n\n\nDVIToSVG::DVIToSVG (istream &is, SVGOutputBase &out)\n\t: DVIReader(is), _out(out), _prevWritingMode(WritingMode::LR)\n{\n\t_prevXPos = _prevYPos = numeric_limits<double>::min();\n\t_actions = util::make_unique<DVIToSVGActions>(*this, _svg);\n}\n\n\n/** Starts the conversion process.\n *  @param[in] first number of first page to convert\n *  @param[in] last number of last page to convert\n *  @param[in] hashFunc pointer to function to be used to compute page hashes */\nvoid DVIToSVG::convert (unsigned first, unsigned last, HashFunction *hashFunc) {\n\tif (first > last)\n\t\tswap(first, last);\n\tif (first > numberOfPages()) {\n\t\tostringstream oss;\n\t\toss << \"file contains only \" << numberOfPages() << \" page\";\n\t\tif (numberOfPages() > 1)\n\t\t\toss << 's';\n\t\tthrow DVIException(oss.str());\n\t}\n\tlast = min(last, numberOfPages());\n\tbool computeHashes = (hashFunc && !_out.ignoresHashes());\n\tstring shortenedOptHash = XXH32HashFunction(PAGE_HASH_SETTINGS.optionsHash()).digestString();\n\tfor (unsigned i=first; i <= last; ++i) {\n\t\tstring dviHash, combinedHash;\n\t\tif (computeHashes) {\n\t\t\tcomputePageHash(i, *hashFunc);\n\t\t\tdviHash = hashFunc->digestString();\n\t\t\thashFunc->update(PAGE_HASH_SETTINGS.optionsHash());\n\t\t\tcombinedHash = hashFunc->digestString();\n\t\t}\n\t\tconst SVGOutput::HashTriple hashTriple(dviHash, shortenedOptHash, std::move(combinedHash));\n\t\tFilePath path = _out.filepath(i, numberOfPages(), hashTriple);\n\t\tif (!dviHash.empty() && !PAGE_HASH_SETTINGS.isSet(HashSettings::P_REPLACE) && path.exists()) {\n\t\t\tMessage::mstream(false, Message::MC_PAGE_NUMBER) << \"skipping page \" << i;\n\t\t\tMessage::mstream().indent(1);\n\t\t\tMessage::mstream(false, Message::MC_PAGE_WRITTEN) << \"\\nfile \" << path.shorterAbsoluteOrRelative() << \" exists\\n\";\n\t\t\tMessage::mstream().indent(0);\n\t\t}\n\t\telse {\n\t\t\texecutePage(i);\n\t\t\tSVGOptimizer(_svg).execute();\n\t\t\tembedFonts();\n\t\t\tbool success = _svg.write(_out.getPageStream(currentPageNumber(), numberOfPages(), hashTriple));\n\t\t\t_out.finish();\n\t\t\tstring fname = path.shorterAbsoluteOrRelative();\n\t\t\tif (fname.empty())\n\t\t\t\tfname = \"<stdout>\";\n\t\t\tif (!success)\n\t\t\t\tMessage::wstream(true) << \"failed to write output to \" << fname << '\\n';\n\t\t\telse {\n\t\t\t\tMessage::mstream(false, Message::MC_PAGE_WRITTEN) << \"\\noutput written to \" << fname << '\\n';\n\t\t\t\tif (!_userMessage.empty()) {\n\t\t\t\t\tif (auto specialActions = dynamic_cast<SpecialActions*>(_actions.get())) {\n\t\t\t\t\t\tstring msg = specialActions->expandText(_userMessage);\n\t\t\t\t\t\tMessage::ustream(true) << msg << \"\\n\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t_svg.reset();\n\t\t\t_actions->reset();\n\t\t}\n\t}\n}\n\n\n/** Creates a HashFunction object for a given algorithm name.\n *  @param[in] algo name of hash algorithm\n *  @return pointer to hash function\n *  @throw MessageException if algorithm name is invalid or not supported */\nstatic unique_ptr<HashFunction> create_hash_function (const string &algo) {\n\tif (auto hashFunc = HashFunction::create(algo))\n\t\treturn hashFunc;\n\n\tstring msg = \"unknown hash algorithm '\"+algo+\"' (supported algorithms: \";\n\tfor (const string &name : HashFunction::supportedAlgorithms())\n\t\tmsg += name + \", \";\n\tmsg.pop_back();\n\tmsg.back() = ')';\n\tthrow MessageException(std::move(msg));\n}\n\n\n/** Convert DVI pages specified by a page range string.\n *  @param[in] rangestr string describing the pages to convert\n *  @param[out] pageinfo (number of converted pages, number of total pages) */\nvoid DVIToSVG::convert (const string &rangestr, pair<int,int> *pageinfo) {\n\tPageRanges ranges;\n\tif (!ranges.parse(rangestr, numberOfPages()))\n\t\tthrow MessageException(\"invalid page range format\");\n\tif (ranges.empty())\n\t\tthrow MessageException(\"selected page is not available\");\n\n\tMessage::mstream(false, Message::MC_PAGE_NUMBER) << \"pre-processing DVI file (format version \"  << getDVIVersion() << \")\\n\";\n\tif (auto actions = dynamic_cast<DVIToSVGActions*>(_actions.get())) {\n\t\tPreScanDVIReader prescan(getInputStream(), actions);\n\t\tactions->setDVIReader(prescan);\n\t\tprescan.executeAllPages();\n\t\tactions->setDVIReader(*this);\n\t\tSpecialManager::instance().notifyPreprocessingFinished();\n\t\texecuteFontDefs();\n\t}\n\n\tunique_ptr<HashFunction> hashFunc;\n\tif (!PAGE_HASH_SETTINGS.algorithm().empty())  // name of hash algorithm present?\n\t\thashFunc = create_hash_function(PAGE_HASH_SETTINGS.algorithm());\n\n\tfor (const auto &range : ranges)\n\t\tconvert(range.first, range.second, hashFunc.get());\n\tif (pageinfo) {\n\t\tpageinfo->first = ranges.numberOfPages();\n\t\tpageinfo->second = numberOfPages();\n\t}\n}\n\n\n/** Writes the hash values of a selected set of pages to an output stream.\n *  @param[in] rangestr string describing the pages to convert\n *  @param[in,out] os stream the output is written to */\nvoid DVIToSVG::listHashes (const string &rangestr, std::ostream &os) const {\n\tPageRanges ranges;\n\tif (!ranges.parse(rangestr, numberOfPages()))\n\t\tthrow MessageException(\"invalid page range format\");\n\n\tXXH32HashFunction xxh32;\n\tauto hashFunc = create_hash_function(PAGE_HASH_SETTINGS.algorithm());\n\tint width1 = util::ilog10(numberOfPages())+1;\n\tint width2 = hashFunc->digestSize()*2;\n\tint spaces1 = width1+2+(width2-3)/2;\n\tint spaces2 = width1+2+width2+2-spaces1-3+(width2-7)/2;\n\tstring shortenedOptHash = XXH32HashFunction(PAGE_HASH_SETTINGS.optionsHash()).digestString();\n\tos << string(spaces1, ' ') << \"DVI\"\n\t\t<< string(spaces2, ' ') << \"DVI+opt\\n\";\n\tfor (const auto &range : ranges) {\n\t\tfor (int i=range.first; i <= range.second; i++) {\n\t\t\tcomputePageHash(i, *hashFunc);\n\t\t\tos << setw(width1) << i;\n\t\t\tos << \": \" << hashFunc->digestString();\n\t\t\thashFunc->update(PAGE_HASH_SETTINGS.optionsHash());\n\t\t\tos << \", \" << hashFunc->digestString() << '\\n';\n\t\t}\n\t}\n\tos << \"hash algorithm: \" << PAGE_HASH_SETTINGS.algorithm()\n\t\t<< \", options hash: \" << shortenedOptHash << '\\n';\n}\n\n\nint DVIToSVG::executeCommand () {\n\tSignalHandler::instance().check();\n\tconst streampos cmdpos = tell();\n\tint opcode = DVIReader::executeCommand();\n\tif (dviState().v+_ty != _prevYPos) {\n\t\t_tx = _ty = 0;\n\t\t_prevYPos = dviState().v;\n\t}\n\t_prevXPos = dviState().h+_tx;\n\t_prevWritingMode = dviState().d;\n\tif (COMPUTE_PROGRESS && inPage() && _actions) {\n\t\tsize_t pagelen = numberOfPageBytes(currentPageNumber()-1);\n\t\t_pageByte += tell()-cmdpos;\n\t\t_actions->progress(_pageByte, pagelen);\n\t}\n\treturn opcode;\n}\n\n\n/** This template method is called by parent class DVIReader before\n *  executing the BOP actions.\n *  @param[in] pageno physical page number (1 = first page)\n *  @param[in] c contains information about the page (page number etc.) */\nvoid DVIToSVG::enterBeginPage (unsigned pageno, const vector<int32_t> &c) {\n\tif (dynamic_cast<DVIToSVGActions*>(_actions.get())) {\n\t\tMessage::mstream().indent(0);\n\t\tMessage::mstream(false, Message::MC_PAGE_NUMBER) << \"processing page \" << pageno;\n\t\tif (pageno != (unsigned)c[0])  // Does page number shown on page differ from physical page number?\n\t\t\tMessage::mstream(false) << \" [\" << c[0] << ']';\n\t\tMessage::mstream().indent(1);\n\t\t_svg.appendToDoc(util::make_unique<XMLComment>(\" This file was generated by dvisvgm \" + string(PROGRAM_VERSION) + \" \"));\n\t}\n}\n\n\n/** This template method is called by DVIReader::cmdEop() after\n *  executing the EOP actions. */\nvoid DVIToSVG::leaveEndPage (unsigned) const {\n\tif (!dynamic_cast<DVIToSVGActions*>(_actions.get()))\n\t\treturn;\n\n\t// set bounding box and apply page transformations\n\tBoundingBox bbox = _actions->bbox();  // bounding box derived from the DVI commands executed\n\tif (_bboxFormatString == \"min\" || _bboxFormatString == \"preview\" || _bboxFormatString == \"papersize\") {\n\t\tbbox.unlock();\n\t\tbbox.transform(getPageTransformation());\n\t}\n\telse if (_bboxFormatString == \"dvi\") {\n\t\t// center page content\n\t\tdouble dx = (_pageWidth-bbox.width())/2;\n\t\tdouble dy = (_pageHeight-bbox.height())/2;\n\t\tbbox += BoundingBox(-dx, -dy, dx, dy);\n\t}\n\telse if (_bboxFormatString != \"none\") {\n\t\tistringstream iss(_bboxFormatString);\n\t\tStreamInputReader ir(iss);\n\t\tir.skipSpace();\n\t\tif (isalpha(ir.peek())) {\n\t\t\t// set explicitly given page format\n\t\t\tPageSize size(_bboxFormatString);\n\t\t\tif (size.valid()) {\n\t\t\t\t// convention: DVI position (0,0) equals (1in, 1in) relative\n\t\t\t\t// to the upper left vertex of the page (see DVI specification)\n\t\t\t\tconst double border = -72;\n\t\t\t\tbbox = BoundingBox(border, border, size.width().bp()+border, size.height().bp()+border);\n\t\t\t}\n\t\t}\n\t\telse { // set/modify bounding box by explicitly given values\n\t\t\ttry {\n\t\t\t\tvector<Length> lengths = BoundingBox::extractLengths(_bboxFormatString);\n\t\t\t\tif (lengths.size() == 1 || lengths.size() == 2) {  // relative box size?\n\t\t\t\t\t// apply the page transformation and adjust the bbox afterwards\n\t\t\t\t\tbbox.transform(getPageTransformation());\n\t\t\t\t}\n\t\t\t\tbbox.set(lengths);\n\t\t\t}\n\t\t\tcatch (const MessageException &) {\n\t\t\t}\n\t\t}\n\t}\n\tif (bbox.width() == 0)\n\t\tMessage::wstream(false) << \"\\npage is empty\\n\";\n\tif (_bboxFormatString != \"none\") {\n\t\t_svg.setBBox(bbox);\n\t\tconst double bp2pt = (1_bp).pt();\n\t\tMessage::mstream(false) << '\\n';\n\t\tMessage::mstream(false, Message::MC_PAGE_SIZE) << \"graphic size: \" << XMLString(bbox.width()*bp2pt) << \"pt\"\n\t\t\t\" x \" << XMLString(bbox.height()*bp2pt) << \"pt\"\n\t\t\t\" (\" << XMLString(bbox.width()) << \"bp\"\n\t\t\t\" x \" << XMLString(bbox.height()) << \"bp)\";\n\t\tMessage::mstream(false) << '\\n';\n\t}\n}\n\n\nMatrix DVIToSVG::getPageTransformation () const {\n\tMatrix matrix(1); // unity matrix\n\tif (!_transCmds.empty()) {\n\t\tCalculator calc;\n\t\tif (_actions) {\n\t\t\tconst double bp2pt = (1_bp).pt();\n\t\t\tBoundingBox &bbox = _actions->bbox();\n\t\t\tcalc.setVariable(\"ux\", bbox.minX()*bp2pt);\n\t\t\tcalc.setVariable(\"uy\", bbox.minY()*bp2pt);\n\t\t\tcalc.setVariable(\"w\",  bbox.width()*bp2pt);\n\t\t\tcalc.setVariable(\"h\",  bbox.height()*bp2pt);\n\t\t}\n\t\t// add constants for length units to calculator\n\t\tfor (const auto &unit : Length::getUnits())\n\t\t\tcalc.setVariable(unit.first, Length(1, unit.second).pt());\n\t\tmatrix.set(_transCmds, calc);\n\t}\n\treturn matrix;\n}\n\n\nstatic void collect_chars (unordered_map<const Font*, set<int>> &fontmap) {\n\tunordered_map<const Font*, set<int>> insertedChars;\n\tfor (const auto &entry : fontmap) {\n\t\tconst Font *unique_font = entry.first->uniqueFont();\n\t\tif (unique_font != entry.first) {\n\t\t\tfor (int c : entry.second)\n\t\t\t\tinsertedChars[unique_font].insert(c);\n\t\t}\n\t}\n\tfor (const auto &entry : insertedChars)\n\t\tfontmap[entry.first].insert(entry.second.begin(), entry.second.end());\n}\n\n\n/** Adds the font information to the SVG tree. */\nvoid DVIToSVG::embedFonts () {\n\tif (!_actions) // no dvi actions => no chars written => no fonts to embed\n\t\treturn;\n\n\tauto usedFonts = FontManager::instance().getUniqueFonts();\n\tauto &usedCharsMap = FontManager::instance().getUsedChars();\n\tcollect_chars(usedCharsMap);\n\n\tGlyphTracerMessages messages;\n\tunordered_set<const Font*> tracedFonts;  // collect unique fonts already traced\n\tfor (auto font : usedFonts) {\n\t\tif (auto ph_font = font_cast<const PhysicalFont*>(font)) {\n\t\t\t// Check if glyphs should be traced. Only trace the glyphs of unique fonts, i.e.\n\t\t\t// avoid retracing the same glyphs again if they are referenced in various sizes.\n\t\t\tif (TRACE_MODE != 0 && tracedFonts.find(ph_font->uniqueFont()) == tracedFonts.end()) {\n\t\t\t\tph_font->traceAllGlyphs(TRACE_MODE == 'a', &messages);\n\t\t\t\ttracedFonts.insert(ph_font->uniqueFont());\n\t\t\t}\n\t\t\tif (font->path()) { // does font file exist?\n\t\t\t\tauto it = usedCharsMap.find(font);\n\t\t\t\tif (it != usedCharsMap.end())\n\t\t\t\t\t_svg.append(*ph_font, it->second, &messages);\n\t\t\t}\n\t\t\telse\n\t\t\t\tMessage::wstream(true) << \"can't embed font '\" << font->name() << \"'\\n\";\n\t\t}\n\t\telse\n\t\t\tMessage::wstream(true) << \"can't embed font '\" << font->name() << \"'\\n\";\n\t}\n\t_svg.appendFontStyles(FontManager::instance().getUsedFonts());\n}\n\n\nstatic vector<string> extract_prefixes (const string &ignorelist) {\n\tvector<string> prefixes;\n\tif (!ignorelist.empty()) {\n\t\tauto left = ignorelist.begin();\n\t\twhile (left != ignorelist.end()) {\n\t\t\tleft = std::find_if(left, ignorelist.end(), [](char c) {\n\t\t\t\treturn isalnum(c);\n\t\t\t});\n\t\t\tauto right = std::find_if(left, ignorelist.end(), [](char c) {\n\t\t\t\treturn !isalnum(c);\n\t\t\t});\n\t\t\tif (left != ignorelist.end())\n\t\t\t\tprefixes.emplace_back(left-ignorelist.begin(), right-left);\n\t\t\tleft = right;\n\t\t}\n\t}\n\treturn prefixes;\n}\n\n\n/** Enables or disables processing of specials. If ignorelist == 0, all\n *  supported special handlers are loaded. To disable selected sets of specials,\n *  the corresponding prefixes can be given separated by non alpha-numeric characters,\n *  e.g. \"color, ps, em\" or \"color: ps em\" etc.\n *  A single \"*\" in the ignore list disables all specials.\n *  @param[in] ignorelist list of handler names to ignore\n *  @param[in] pswarning if true, shows warning about disabled PS support */\nvoid DVIToSVG::setProcessSpecials (const string &ignorelist, bool pswarning) {\n\tif (ignorelist == \"*\")  // ignore all specials?\n\t\tSpecialManager::instance().unregisterHandlers();\n\telse {\n\t\tauto ignoredHandlerName = extract_prefixes(ignorelist);\n\t\t// add special handlers\n\t\tSpecialManager::registerHandler<BgColorSpecialHandler>(ignoredHandlerName);    // handles background color special\n\t\tSpecialManager::registerHandler<ColorSpecialHandler>(ignoredHandlerName);      // handles color specials\n\t\tSpecialManager::registerHandler<DvisvgmSpecialHandler>(ignoredHandlerName);    // handles raw SVG embeddings\n\t\tSpecialManager::registerHandler<EmSpecialHandler>(ignoredHandlerName);         // handles emTeX specials\n\t\tSpecialManager::registerHandler<HtmlSpecialHandler>(ignoredHandlerName);       // handles hyperref specials\n\t\tSpecialManager::registerHandler<PapersizeSpecialHandler>(ignoredHandlerName);  // handles papersize special\n\t\tSpecialManager::registerHandler<PdfSpecialHandler>(ignoredHandlerName);\n\t\tSpecialManager::registerHandler<TpicSpecialHandler>(ignoredHandlerName);       // handles tpic specials\n\t\tSpecialManager::registerHandler(util::make_unique<PsSpecialHandlerProxy>(pswarning), ignoredHandlerName);\n\t}\n}\n\n\nFilePath DVIToSVG::getSVGFilePath (unsigned pageno) const {\n\treturn _out.filepath(pageno, numberOfPages());\n}\n\n\nvoid DVIToSVG::moveRight (double dx, MoveMode mode) {\n\tDVIReader::moveRight(dx, mode);\n\tif (_actions) {\n\t\tif (dviState().d == WritingMode::LR)\n\t\t\t_actions->moveToX(dviState().h+_tx, mode == MoveMode::CHANGEPOS);\n\t\telse\n\t\t\t_actions->moveToY(dviState().v+_ty, mode == MoveMode::CHANGEPOS);\n\t}\n}\n\n\nvoid DVIToSVG::moveDown (double dy, MoveMode mode) {\n\tDVIReader::moveDown(dy, mode);\n\tif (_actions) {\n\t\tif (dviState().d == WritingMode::LR)\n\t\t\t_actions->moveToY(dviState().v+_ty, mode == MoveMode::CHANGEPOS);\n\t\telse\n\t\t\t_actions->moveToX(dviState().h+_tx, mode == MoveMode::CHANGEPOS);\n\t}\n}\n\n\nvoid DVIToSVG::dviPost (uint16_t, uint16_t pages, uint32_t pw, uint32_t ph, uint32_t, uint32_t, uint32_t, uint32_t) {\n\t_pageHeight = ph; // height of tallest page in dvi units\n\t_pageWidth  = pw; // width of widest page in dvi units\n}\n\n\nvoid DVIToSVG::dviBop (const std::vector<int32_t> &c, int32_t) {\n\t_pageByte = 0;\n\tenterBeginPage(currentPageNumber(), c);\n\tif (_actions) {\n\t\t_actions->progress(0, 1);  // ensure that progress is called at 0%\n\t\t_actions->beginPage(currentPageNumber(), c);\n\t}\n}\n\n\nvoid DVIToSVG::dviEop () {\n\tif (_actions) {\n\t\t_actions->endPage(currentPageNumber());\n\t\t_pageByte = numberOfPageBytes(currentPageNumber()-1);\n\t\t_actions->progress(_pageByte, _pageByte); // ensure that progress is called at 100%\n\t}\n\tleaveEndPage(currentPageNumber());\n}\n\n\nvoid DVIToSVG::dviSetChar0 (uint32_t c, const Font *font) {\n\tif (_actions && !font_cast<const VirtualFont*>(font))\n\t\t_actions->setChar(dviState().h+_tx, dviState().v+_ty, c, dviState().d != WritingMode::LR, *font);\n}\n\n\nvoid DVIToSVG::dviSetChar (uint32_t c, const Font *font) {\n\tdviSetChar0(c, font);\n}\n\n\nvoid DVIToSVG::dviPutChar (uint32_t c, const Font *font) {\n\tdviSetChar0(c, font);\n}\n\n\nvoid DVIToSVG::dviSetRule (double height, double width) {\n\tif (_actions && height > 0 && width > 0)\n\t\t_actions->setRule(dviState().h+_tx, dviState().v+_ty, height, width);\n}\n\n\nvoid DVIToSVG::dviPutRule (double height, double width) {\n\tdviSetRule(height, width);\n}\n\n\nvoid DVIToSVG::dviPop () {\n\tif (_actions) {\n\t\tif (_prevXPos != dviState().h+_tx)\n\t\t\t_actions->moveToX(dviState().h + _tx, true);  // force setting the SVG position\n\t\tif (_prevYPos != dviState().v+_ty)\n\t\t\t_actions->moveToY(dviState().v + _ty, true);  // force setting the SVG position\n\t\tif (_prevWritingMode != dviState().d)\n\t\t\t_actions->setTextOrientation(dviState().d != WritingMode::LR);\n\t}\n}\n\n\nvoid DVIToSVG::dviFontNum (uint32_t fontnum, SetFontMode, const Font *font) {\n\tif (_actions && font && !font_cast<const VirtualFont*>(font))\n\t\t_actions->setFont(FontManager::instance().fontID(fontnum), *font);  // all fonts get a recomputed ID\n}\n\n\nvoid DVIToSVG::dviDir (WritingMode dir) {\n\tif (_actions)\n\t\t_actions->setTextOrientation(dir != WritingMode::LR);\n}\n\n\nvoid DVIToSVG::dviXXX (const std::string &str) {\n\tif (_actions)\n\t\t_actions->special(str, dvi2bp());\n}\n\n\nvoid DVIToSVG::dviXGlyphArray (std::vector<double> &dx, vector<double> &dy, vector<uint16_t> &glyphs, const Font &font) {\n\tif (_actions) {\n\t\tfor (size_t i=0; i < glyphs.size(); i++)\n\t\t\t_actions->setChar(dviState().h+dx[i]+_tx, dviState().v+dy[i]+_ty, glyphs[i], false, font);\n\t}\n}\n\n\nvoid DVIToSVG::dviXGlyphString (vector<double> &dx, vector<uint16_t> &glyphs, const Font &font) {\n\tif (_actions) {\n\t\tfor (size_t i=0; i < glyphs.size(); i++)\n\t\t\t_actions->setChar(dviState().h+dx[i]+_tx, dviState().v+_ty, glyphs[i], false, font);\n\t}\n}\n\n\nvoid DVIToSVG::dviXTextAndGlyphs (vector<double> &dx, vector<double> &dy, vector<uint16_t>&, vector<uint16_t> &glyphs, const Font &font) {\n\tdviXGlyphArray(dx, dy, glyphs, font);\n}\n\n///////////////////////////////////////////////////////////////\n\n/** Parses a string consisting of comma-separated words, and assigns\n *  the values to the hash settings. */\nvoid DVIToSVG::HashSettings::setParameters (const string &paramstr) {\n\tauto paramnames = util::split(paramstr, \",\");\n\tmap<string, Parameter> paramMap = {\n\t\t{\"list\", P_LIST},\n\t\t{\"replace\", P_REPLACE}\n\t};\n\tfor (string &name : paramnames) {\n\t\tname = util::trim(name);\n\t\tauto it = paramMap.find(name);\n\t\tif (it != paramMap.end())\n\t\t\t_params.insert(it->second);\n\t\telse if (_algo.empty()) {\n\t\t\tif (HashFunction::isSupportedAlgorithm(name))\n\t\t\t\t_algo = name;\n\t\t\telse if (!name.empty()) {\n\t\t\t\tstring msg = \"invalid hash parameter '\" + name + \"' (supported algorithms: \";\n\t\t\t\tfor (const string &str: HashFunction::supportedAlgorithms())\n\t\t\t\t\tmsg += str + \", \";\n\t\t\t\tmsg.pop_back();\n\t\t\t\tmsg.back() = ')';\n\t\t\t\tthrow MessageException(std::move(msg));\n\t\t\t}\n\t\t}\n\t}\n\t// set default hash algorithm if none is given\n\tif (_algo.empty())\n\t\t_algo = \"xxh64\";\n}\n"
  },
  {
    "path": "src/DVIToSVG.hpp",
    "content": "/*************************************************************************\n** DVIToSVG.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef DVITOSVG_HPP\n#define DVITOSVG_HPP\n\n#include <set>\n#include <string>\n#include <utility>\n#include \"DVIReader.hpp\"\n#include \"FilePath.hpp\"\n#include \"SVGTree.hpp\"\n\nstruct DVIActions;\nstruct SVGOutputBase;\nclass HashFunction;\n\nclass DVIToSVG : public DVIReader {\n\tpublic:\n\t\tclass HashSettings {\n\t\t\tpublic:\n\t\t\t\tenum Parameter {P_LIST, P_REPLACE};\n\t\t\t\tvoid setParameters (const std::string &paramstr);\n\t\t\t\tvoid setOptionHash (const std::string &optHash) {_optHash = optHash;}\n\t\t\t\tconst std::string& algorithm () const {return _algo;}\n\t\t\t\tconst std::string& optionsHash () const {return _optHash;}\n\t\t\t\tbool isSet (Parameter param) {return _params.find(param) != _params.end();}\n\n\t\t\tprivate:\n\t\t\t\tstd::string _algo;\n\t\t\t\tstd::string _optHash;\n\t\t\t\tstd::set<Parameter> _params;\n\t\t};\n\n\tpublic:\n\t\texplicit DVIToSVG (std::istream &is, SVGOutputBase &out);\n\t\tDVIToSVG (const DVIToSVG&) =delete;\n\t\tvoid convert (const std::string &range, std::pair<int,int> *pageinfo=nullptr);\n\t\tvoid setPageSize (const std::string &format)         {_bboxFormatString = format;}\n\t\tvoid setPageTransformation (const std::string &cmds) {_transCmds = cmds;}\n\t\tvoid setUserMessage (const std::string &msg)         {_userMessage = msg;}\n\t\tMatrix getPageTransformation () const override;\n\t\tvoid translateToX (double x) override {_tx = x-dviState().h-_tx;}\n\t\tvoid translateToY (double y) override {_ty = y-dviState().v-_ty;}\n\t\tdouble getXPos() const override       {return dviState().h+_tx;}\n\t\tdouble getYPos() const override       {return dviState().v+_ty;}\n\t\tvoid finishLine () override           {_prevYPos = std::numeric_limits<double>::min();}\n\t\tvoid listHashes (const std::string &rangestr, std::ostream &os) const;\n\n\t\tFilePath getSVGFilePath (unsigned pageno) const;\n\t\tconst std::string& getUserBBoxString () const  {return _bboxFormatString;}\n\t\tstatic void setProcessSpecials (const std::string &ignorelist=\"\", bool pswarning=false);\n\n\tpublic:\n\t\tstatic bool COMPUTE_PROGRESS;  ///< if true, an action to handle the progress ratio of a page is triggered\n\t\tstatic char TRACE_MODE;\n\t\tstatic HashSettings PAGE_HASH_SETTINGS;\n\n\tprotected:\n\t\tvoid convert (unsigned firstPage, unsigned lastPage, HashFunction *hashFunc);\n\t\tint executeCommand () override;\n\t\tvoid enterBeginPage (unsigned pageno, const std::vector<int32_t> &c);\n\t\tvoid leaveEndPage (unsigned pageno) const;\n\t\tvoid embedFonts ();\n\t\tvoid moveRight (double dx, MoveMode mode) override;\n\t\tvoid moveDown (double dy, MoveMode mode) override;\n\n\t\tvoid dviPost (uint16_t stdepth, uint16_t pages, uint32_t pw, uint32_t ph, uint32_t mag, uint32_t num, uint32_t den, uint32_t lbopofs) override;\n\t\tvoid dviBop (const std::vector<int32_t> &c, int32_t prevBopOffset) override;\n\t\tvoid dviEop () override;\n\t\tvoid dviSetChar0 (uint32_t c, const Font *font) override;\n\t\tvoid dviSetChar (uint32_t c, const Font *font) override;\n\t\tvoid dviPutChar (uint32_t c, const Font *font) override;\n\t\tvoid dviSetRule (double h, double w) override;\n\t\tvoid dviPutRule (double h, double w) override;\n\t\tvoid dviPop () override;\n\t\tvoid dviFontNum (uint32_t fontnum, SetFontMode mode, const Font *font) override;\n\t\tvoid dviDir (WritingMode dir) override;\n\t\tvoid dviXXX (const std::string &str) override;\n\t\tvoid dviXGlyphArray (std::vector<double> &dx, std::vector<double> &dy, std::vector<uint16_t> &glyphs, const Font &font) override;\n\t\tvoid dviXGlyphString (std::vector<double> &dx, std::vector<uint16_t> &glyphs, const Font &font) override;\n\t\tvoid dviXTextAndGlyphs (std::vector<double> &dx, std::vector<double> &dy, std::vector<uint16_t> &chars, std::vector<uint16_t> &glyphs, const Font &font) override;\n\n\tprivate:\n\t\tSVGTree _svg;\n\t\tSVGOutputBase &_out;\n\t\tstd::unique_ptr<DVIActions> _actions;\n\t\tstd::string _bboxFormatString;      ///< bounding box size/format set by the user\n\t\tstd::string _transCmds;             ///< page transformation commands set by the user\n\t\tstd::string _userMessage;           ///< message printed after conversion of a page\n\t\tdouble _pageHeight=0, _pageWidth=0; ///< global page height and width stored in the postamble\n\t\tdouble _tx=0, _ty=0;                ///< translation of cursor position\n\t\tdouble _prevXPos, _prevYPos;        ///< previous cursor position\n\t\tWritingMode _prevWritingMode;       ///< previous writing mode\n\t\tstd::streampos _pageByte=0;         ///< position of the stream pointer relative to the preceding bop (in bytes)\n};\n\n#endif\n"
  },
  {
    "path": "src/DVIToSVGActions.cpp",
    "content": "/*************************************************************************\n** DVIToSVGActions.cpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstring>\n#include <ctime>\n#include \"BoundingBox.hpp\"\n#include \"DVIToSVG.hpp\"\n#include \"DVIToSVGActions.hpp\"\n#include \"Font.hpp\"\n#include \"FontManager.hpp\"\n#include \"GlyphTracerMessages.hpp\"\n#include \"System.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\nvoid DVIToSVGActions::reset () {\n\tFontManager::instance().resetUsedChars();\n\t_bbox.invalidate();\n\t_bgcolor = Color(0, Color::ColorSpace::TRANSPARENT);\n}\n\n\n/** Change current horizontal position.\n *  @param[in] x new horizontal position\n *  @param[in] forceSVGMove if true, creates an explicit position change in the SVG tree */\nvoid DVIToSVGActions::moveToX (double x, bool forceSVGMove) {\n\tSpecialManager::instance().notifyPositionChange(getX(), getY(), *this);\n\tif (forceSVGMove)\n\t\t_svg.setX(x);\n}\n\n\n/** Change current vertical position.\n *  @param[in] y new vertical position\n *  @param[in] forceSVGMove if true, creates an explicit position change in the SVG tree */\nvoid DVIToSVGActions::moveToY (double y, bool forceSVGMove) {\n\tSpecialManager::instance().notifyPositionChange(getX(), getY(), *this);\n\tif (forceSVGMove)\n\t\t_svg.setY(y);\n}\n\n\nFilePath DVIToSVGActions::getSVGFilePath (unsigned pageno) const {\n\tFilePath path;\n\tif (auto dvi2svg = dynamic_cast<DVIToSVG*>(_dvireader))\n\t\tpath = dvi2svg->getSVGFilePath(pageno);\n\treturn path;\n}\n\n\nstring DVIToSVGActions::getBBoxFormatString () const {\n\tstring boxstr;\n\tif (auto dvi2svg = dynamic_cast<DVIToSVG*>(_dvireader))\n\t\tboxstr = dvi2svg->getUserBBoxString();\n\treturn boxstr;\n}\n\n\n/** This method is called when a \"set char\" command was found in the DVI file.\n *  It draws a character of the current font.\n *  @param[in] x horizontal position of left bounding box edge\n *  @param[in] y vertical position of the character's baseline\n *  @param[in] c character code relative to the current font\n *  @param[in] vertical true if we're in vertical mode\n *  @param[in] font font to be used */\nvoid DVIToSVGActions::setChar (double x, double y, unsigned c, bool vertical, const Font &font) {\n\tif (_outputLocked)\n\t\treturn;\n\n\t// If we use SVG fonts there is no need to record all font name/char/size combinations\n\t// because the SVG font mechanism handles this automatically. It's sufficient to\n\t// record font names and chars. The various font sizes can be ignored here.\n\t// For a given font object, Font::uniqueFont() returns the same unique font object for\n\t// all fonts with the same name.\n\tFontManager::instance().addUsedChar(font, c);\n\t_svg.appendChar(c, x, y);\n\n\tstatic string fontname;\n\tGlyphTracerMessages callback(fontname != font.name(), false);\n\tfontname = font.name();\n\n\tGlyphMetrics metrics;\n\tfont.getGlyphMetrics(c, vertical, metrics);\n\tauto pf = font_cast<const PhysicalFont*>(&font);\n\tif (PhysicalFont::EXACT_BBOX && pf) {\n\t\tGlyphMetrics exact_metrics;\n\t\tpf->getExactGlyphBox(c, exact_metrics, vertical, &callback);\n\t\tif (vertical) {\n\t\t\t// move top of bbox to upper margin of glyph (just an approximation yet)\n\t\t\ty += (metrics.d-exact_metrics.h-exact_metrics.d)/2;\n\t\t}\n\t\tmetrics = exact_metrics;\n\t}\n\tBoundingBox bbox(x-metrics.wl, y-metrics.h, x+metrics.wr, y+metrics.d);\n\n\t// update bounding box\n\tif (!getMatrix().isIdentity())\n\t\tbbox.transform(getMatrix());\n\tembed(bbox);\n#if 0\n\tauto rect = util::make_unique<XMLElement>(\"rect\");\n\trect->addAttribute(\"x\", x-metrics.wl);\n\trect->addAttribute(\"y\", y-metrics.h);\n\trect->addAttribute(\"width\", metrics.wl+metrics.wr);\n\trect->addAttribute(\"height\", metrics.h+metrics.d);\n\trect->addAttribute(\"fill\", \"none\");\n\trect->addAttribute(\"stroke\", \"red\");\n\trect->addAttribute(\"stroke-width\", \"0.5\");\n\t_svg.appendToPage(std::move(rect));\n\tif (metrics.d > 0) {\n\t\tauto line = util::make_unique<XMLElement>(\"line\");\n\t\tline->addAttribute(\"x1\", x-metrics.wl);\n\t\tline->addAttribute(\"y1\", y);\n\t\tline->addAttribute(\"x2\", x+metrics.wr);\n\t\tline->addAttribute(\"y2\", y);\n\t\tline->addAttribute(\"stroke\", \"blue\");\n\t\tline->addAttribute(\"stroke-width\", \"0.5\");\n\t\t_svg.appendToPage(std::move(line));\n\t}\n\tif (metrics.wl > 0) {\n\t\tauto line = util::make_unique<XMLElement>(\"line\");\n\t\tline->addAttribute(\"x1\", x);\n\t\tline->addAttribute(\"y1\", y-metrics.h);\n\t\tline->addAttribute(\"x2\", x);\n\t\tline->addAttribute(\"y2\", y+metrics.d);\n\t\tline->addAttribute(\"stroke\", \"blue\");\n\t\tline->addAttribute(\"stroke-width\", \"0.5\");\n\t\t_svg.appendToPage(std::move(line));\n\t}\n#endif\n}\n\n\n/** This method is called when a \"set rule\" or \"put rule\" command was found in the\n *  DVI file. It draws a solid unrotated rectangle.\n *  @param[in] x horizontal position of left edge\n *  @param[in] y vertical position of bottom(!) edge\n *  @param[in] height length of the vertical edges\n *  @param[in] width length of the horizontal edges */\nvoid DVIToSVGActions::setRule (double x, double y, double height, double width) {\n\tif (_outputLocked)\n\t\treturn;\n\n\t// (x,y) is the lower left corner of the rectangle\n\tauto rect = util::make_unique<SVGElement>(\"rect\");\n\trect->addAttribute(\"x\", x);\n\trect->addAttribute(\"y\", y-height);\n\trect->addAttribute(\"height\", height);\n\trect->addAttribute(\"width\", width);\n\trect->setTransform(getMatrix());\n\trect->setFillColor(_svg.getFillColor());\n\t_svg.appendToPage(std::move(rect));\n\n\t// update bounding box\n\tBoundingBox bb(x, y-height, x+width, y);\n\tif (!getMatrix().isIdentity())\n\t\tbb.transform(getMatrix());\n\tembed(bb);\n}\n\n\n/** This method is called when a \"set font\" command was found in the DVI file. The\n *  font must be previously defined.\n *  @param[in] num unique number of the font in the DVI file (not necessarily equal to the DVI font number)\n *  @param[in] font pointer to the font object (always represents a physical font and never a virtual font) */\nvoid DVIToSVGActions::setFont (int num, const Font &font) {\n\t_svg.setFont(num, font);\n}\n\n\n/** This method is called when a \"special\" command was found in the DVI file.\n *  @param[in] spc the special expression\n *  @param[in] dvi2bp factor to scale DVI units to PS points\n *  @param[in] preprocessing if true, the DVI file is being pre-processed */\nvoid DVIToSVGActions::special (const string &spc, double dvi2bp, bool preprocessing) {\n\ttry {\n\t\tif (preprocessing)\n\t\t\tSpecialManager::instance().preprocess(spc, *this);\n\t\telse\n\t\t\tSpecialManager::instance().process(spc, dvi2bp, *this);\n\t\t// @@ output message in case of unsupported specials?\n\t}\n\tcatch (const SpecialException &e) {\n\t\tMessage::estream(true) << \"error in special: \" << e.what() << '\\n';\n\t}\n}\n\n\n/** This method is called when a \"begin of page (bop)\" command was found in the DVI file.\n *  @param[in] pageno physical page number */\nvoid DVIToSVGActions::beginPage (unsigned pageno, const vector<int32_t>&) {\n\t_svg.newPage(++_pageCount);\n\t_bbox = BoundingBox();  // clear bounding box\n\t_boxes.clear();\n\tsetMatrix(Matrix(1));\n\tSpecialManager::instance().notifyBeginPage(pageno, *this);\n}\n\n\n/** This method is called when an \"end of page (eop)\" command was found in the DVI file. */\nvoid DVIToSVGActions::endPage (unsigned pageno) {\n\ttry {\n\t\tSpecialManager::instance().notifyEndPage(pageno, *this);\n\t}\n\tcatch (const SpecialException &e) {\n\t\tMessage::estream(true) << \"error in special: \" << e.what() << '\\n';\n\t}\n\tMatrix matrix = _dvireader->getPageTransformation();\n\t_svg.transformPage(matrix);\n\tif (!_bgcolor.isTransparent()) {\n\t\t// create a rectangle filled with the background color\n\t\tauto rect = util::make_unique<SVGElement>(\"rect\");\n\t\trect->addAttribute(\"x\", _bbox.minX());\n\t\trect->addAttribute(\"y\", _bbox.minY());\n\t\trect->addAttribute(\"width\", _bbox.width());\n\t\trect->addAttribute(\"height\", _bbox.height());\n\t\trect->setFillColor(_bgcolor);\n\t\t_svg.prependToPage(std::move(rect));\n\t}\n}\n\n\nvoid DVIToSVGActions::setBgColor (const Color &color) {\n\t_bgcolor = color;\n}\n\n\nvoid DVIToSVGActions::embed (const BoundingBox &bbox) {\n\t_bbox.embed(bbox);\n\tfor (auto &strboxpair : _boxes)\n\t\tstrboxpair.second.embed(bbox);\n}\n\n\nvoid DVIToSVGActions::embed (const DPair& p, double r) {\n\tif (r == 0)\n\t\t_bbox.embed(p);\n\telse\n\t\t_bbox.embed(p, r);\n\tfor (auto &strboxpair : _boxes)\n\t\tstrboxpair.second.embed(p, r);\n}\n\n\nBoundingBox& DVIToSVGActions::bbox (const string& name, bool reset) {\n\tBoundingBox &box = _boxes[name];\n\tif (reset)\n\t\tbox = BoundingBox();\n\treturn box;\n}\n\n\n/** This method is called by subprocesses like the PS handler when\n *  a computation step has finished. Since the total number of steps\n *  can't be determined in advance, we don't show a percent value but\n *  a rotating dash. */\nvoid DVIToSVGActions::progress (const char *id) {\n\tif (PROGRESSBAR_DELAY < 1000) {\n\t\tstatic double time=System::time();\n\t\t// slow down updating the progress indicator to prevent flickering\n\t\tif (System::time() - time > 0.1) {\n\t\t\tprogress(0, 0, id);\n\t\t\ttime = System::time();\n\t\t}\n\t}\n}\n\n\n/** Returns the number of digits of a given integer. */\nstatic int digits (int n) {\n\tif (n == 0)\n\t\treturn 1;\n\tif (n > 0)\n\t\treturn util::ilog10(n)+1;\n\treturn util::ilog10(-n)+2;\n}\n\n\n/** Draws a simple progress indicator.\n *  @param[in] current current iteration step (of 'total' steps)\n *  @param[in] total total number of iteration steps\n *  @param[in] id ID of the subprocess providing the information */\nvoid DVIToSVGActions::progress (size_t current, size_t total, const char *id) {\n\tstatic double time=0;\n\tstatic bool draw=false; // show progress indicator?\n\tstatic const char *prev_id=nullptr;\n\tif (current == 0 && total > 0) {\n\t\ttime = System::time();\n\t\tdraw = false;\n\t\tMessage::mstream() << '\\n';\n\t}\n\t// don't show the progress indicator before the given time has elapsed\n\tif (!draw && System::time()-time > PROGRESSBAR_DELAY) {\n\t\tdraw = true;\n\t\tTerminal::cursor(false);\n\t}\n\tif (draw && (System::time() - time > 0.1 || (total > 0 && current == total) || prev_id != id)) {\n\t\tstatic int step = -1;   // >=0: rotating dash\n\t\tstatic size_t prev_current=0, prev_total=1;\n\t\tconst char *tips = \"-\\\\|/\";\n\t\tif (total == 0) {\n\t\t\tcurrent = prev_current;\n\t\t\ttotal = prev_total;\n\t\t\tstep = (step+1) % 4;\n\t\t}\n\t\telse {\n\t\t\tprev_current = current;\n\t\t\tprev_total = total;\n\t\t\tstep = -1;\n\t\t}\n\t\t// adapt length of progress indicator to terminal width\n\t\tint cols = Terminal::columns();\n\t\tint width = (cols == 0 || cols > 60) ? 50 : 49-60+cols;\n\t\tdouble factor = double(current)/double(total);\n\t\tint length = int(width*factor);\n\t\tMessage::mstream(false, Message::MC_PROGRESS)\n\t\t\t<< '[' << string(length, '=')\n\t\t\t<< (factor < 1.0 ? (step < 0 ? ' ' : tips[step]) : '=')\n\t\t\t<< string(width-length, ' ')\n\t\t\t<< \"] \" << string(3-digits(int(100*factor)), ' ') << int(100*factor)\n\t\t\t<< \"%\\r\";\n\t\t// overprint indicator when finished\n\t\tif (factor == 1.0) {\n\t\t\tMessage::estream().clearline();\n\t\t\tTerminal::cursor(true);\n\t\t}\n\t\ttime = System::time();\n\t\tprev_id = id;\n\t}\n}\n"
  },
  {
    "path": "src/DVIToSVGActions.hpp",
    "content": "/*************************************************************************\n** DVIToSVGActions.hpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef DVITOSVGACTIONS_HPP\n#define DVITOSVGACTIONS_HPP\n\n#include <unordered_map>\n#include <unordered_set>\n#include \"BoundingBox.hpp\"\n#include \"DVIActions.hpp\"\n#include \"Matrix.hpp\"\n#include \"SpecialActions.hpp\"\n#include \"SpecialManager.hpp\"\n#include \"SVGTree.hpp\"\n\n\nclass DVIToSVG;\nclass FileFinder;\nclass Font;\nclass XMLNode;\n\nclass DVIToSVGActions : public DVIActions, public SpecialActions {\n\tusing BoxMap = std::unordered_map<std::string,BoundingBox>;\n\n\tpublic:\n\t\tDVIToSVGActions (DVIToSVG &dvisvg, SVGTree &svg) : _svg(svg), _dvireader(&dvisvg) {}\n\t\tvoid reset () override;\n\t\tvoid setChar (double x, double y, unsigned c, bool vertical, const Font &f) override;\n\t\tvoid setRule (double x, double y, double height, double width) override;\n\t\tvoid setBgColor (const Color &color) override;\n\t\tvoid setFillColor (const Color &color) override         {_svg.setFillColor(color);}\n\t\tvoid setStrokeColor (const Color &color) override       {_svg.setStrokeColor(color);}\n\t\tvoid setMatrix (const Matrix &m) override               {_svg.setMatrix(m);}\n\t\tvoid setOpacity (const Opacity &opacity) override       {_svg.setOpacity(opacity);}\n\t\tconst Opacity& getOpacity () const override             {return _svg.getOpacity();}\n\t\tconst Matrix& getMatrix () const override               {return _svg.getMatrix();}\n\t\tMatrix getPageTransformation () const override          {return _dvireader->getPageTransformation();}\n\t\tColor getFillColor () const override                    {return _svg.getFillColor();}\n\t\tColor getStrokeColor () const override                  {return _svg.getStrokeColor();}\n\t\tint getDVIStackDepth () const override                  {return _dvireader->stackDepth();}\n\t\tunsigned getCurrentPageNumber () const override         {return _dvireader->currentPageNumber();}\n\t\tvoid setTextOrientation (bool vertical) override        {_svg.setVertical(vertical);}\n\t\tvoid moveToX (double x, bool forceSVGMove) override;\n\t\tvoid moveToY (double y, bool forceSVGMove) override;\n\t\tvoid setFont (int num, const Font &font) override;\n\t\tvoid special (const std::string &spc, double dvi2bp, bool preprocessing=false) override;\n\t\tvoid beginPage (unsigned pageno, const std::vector<int32_t> &c) override;\n\t\tvoid endPage (unsigned pageno) override;\n\t\tvoid progress (size_t current, size_t total, const char *id=nullptr) override;\n\t\tvoid progress (const char *id) override;\n\t\tdouble getX() const override  {return _dvireader->getXPos();}\n\t\tdouble getY() const override  {return _dvireader->getYPos();}\n\t\tvoid setX (double x) override {_dvireader->translateToX(x); _svg.setX(x);}\n\t\tvoid setY (double y) override {_dvireader->translateToY(y); _svg.setY(y);}\n\t\tvoid finishLine () override   {_dvireader->finishLine();}\n\t\tvoid lockOutput () override   {_outputLocked = true;}\n\t\tvoid unlockOutput () override {_outputLocked = false;}\n\t\tbool outputLocked () const override       {return _outputLocked;}\n\t\tconst SVGTree& svgTree () const override  {return _svg;}\n\t\tBoundingBox& bbox () override {return _bbox;}\n\t\tBoundingBox& bbox (const std::string &name, bool reset=false) override;\n\t\tvoid embed (const BoundingBox &bbox) override;\n\t\tvoid embed (const DPair &p, double r=0) override;\n\t\tFilePath getSVGFilePath (unsigned pageno) const override;\n\t\tstd::string getBBoxFormatString () const override;\n\t\tvoid setDVIReader (BasicDVIReader &r) {_dvireader = &r;}\n\n\tprivate:\n\t\tSVGTree &_svg;\n\t\tBasicDVIReader *_dvireader;\n\t\tBoundingBox _bbox;\n\t\tint _pageCount=0;\n\t\tColor _bgcolor=Color(0, Color::ColorSpace::TRANSPARENT);\n\t\tBoxMap _boxes;\n\t\tbool _outputLocked=false;\n};\n\n\n#endif\n"
  },
  {
    "path": "src/Directory.cpp",
    "content": "/*************************************************************************\n** Directory.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"Directory.hpp\"\n\nusing namespace std;\n\n#ifndef _WIN32\n\t#include <cerrno>\n\t#include <sys/stat.h>\n#endif\n\n\nDirectory::Directory () {\n#ifdef _WIN32\n\tmemset(&_fileData, 0, sizeof(WIN32_FIND_DATA));\n#endif\n}\n\n\nDirectory::Directory (const string &dirname) : Directory() {\n\topen(dirname);\n}\n\n\nDirectory::~Directory () {\n\tclose();\n}\n\n\nbool Directory::open (string dirname) {\n\t_dirname = dirname;\n#ifdef _WIN32\n\tif (dirname.empty())\n\t\treturn false;\n\t_firstread = true;\n\tif (dirname.back() == '/' || dirname.back() == '\\\\')\n\t\tdirname.pop_back();\n\tdirname += \"\\\\*\";\n\t_handle = FindFirstFile(dirname.c_str(), &_fileData);\n\treturn _handle != INVALID_HANDLE_VALUE;\n#else\n\t_dir = opendir(_dirname.c_str());\n\treturn bool(_dir);\n#endif\n}\n\n\nvoid Directory::close () {\n#ifdef _WIN32\n\tFindClose(_handle);\n#else\n\tif (_dir) {\n\t\tclosedir(_dir);\n\t\t_dir = nullptr;\n\t}\n#endif\n}\n\n\n/** Reads first/next directory entry.\n *  @param[in] type type of entry to return (a: file or dir, f: file, d: dir)\n *  @return name of entry */\nconst char* Directory::read (EntryType type) {\n#ifdef _WIN32\n\tif (_handle == INVALID_HANDLE_VALUE)\n\t\treturn nullptr;\n\twhile (_firstread || FindNextFile(_handle, &_fileData)) {\n\t\t_firstread = false;\n\t\tif (_fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {\n\t\t\tif (type == ET_FILE_OR_DIR || type == ET_DIR)\n\t\t\t\treturn _fileData.cFileName;\n\t\t}\n\t\telse if (type == ET_FILE_OR_DIR || type == ET_FILE)\n\t\t\treturn _fileData.cFileName;\n\t}\n\tFindClose(_handle);\n\t_handle = INVALID_HANDLE_VALUE;\n\treturn nullptr;\n#else\n\tif (_dir) {\n\t\twhile ((_dirent = readdir(_dir))) {\n\t\t\tstring path = _dirname + \"/\" + _dirent->d_name;\n\t\t\tstruct stat stats;\n\t\t\tif (stat(path.c_str(), &stats) == 0) {\n\t\t\t\tif (S_ISDIR(stats.st_mode)) {\n\t\t\t\t\tif (type == ET_FILE_OR_DIR || type == ET_DIR)\n\t\t\t\t\t\treturn _dirent->d_name;\n\t\t\t\t}\n\t\t\t\telse if (type == ET_FILE_OR_DIR || type == ET_FILE)\n\t\t\t\t\treturn _dirent->d_name;\n\t\t\t}\n\t\t}\n\t\tclosedir(_dir);\n\t\t_dir = nullptr;\n\t}\n\treturn nullptr;\n#endif\n}\n\n\n"
  },
  {
    "path": "src/Directory.hpp",
    "content": "/*************************************************************************\n** Directory.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef DIRECTORY_HPP\n#define DIRECTORY_HPP\n\n#include <string>\n#ifdef _WIN32\n\t#include \"windows.hpp\"\n#else\n\t#include <dirent.h>\n#endif\n\nclass Directory {\n\tpublic:\n\t\tenum EntryType {ET_FILE, ET_DIR, ET_FILE_OR_DIR};\n\n\tpublic:\n\t\tDirectory ();\n\t\texplicit Directory (const std::string &path);\n\t\t~Directory ();\n\t\tbool open (std::string path);\n\t\tvoid close ();\n\t\tconst char* read (EntryType type=ET_FILE_OR_DIR);\n\n\tprivate:\n\t\tstd::string _dirname;\n#ifdef _WIN32\n\t\tbool _firstread=true;\n\t\tHANDLE _handle=INVALID_HANDLE_VALUE;\n\t\tWIN32_FIND_DATA _fileData;\n#else\n\t\tDIR *_dir=nullptr;\n\t\tstruct dirent *_dirent=nullptr;\n#endif\n};\n\n#endif\n"
  },
  {
    "path": "src/Doxyfile",
    "content": "# Doxyfile 1.8.6\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) for a project.\n#\n# All text after a double hash (##) is considered a comment and is placed in\n# front of the TAG it is preceding.\n#\n# All text after a single hash (#) is considered a comment and will be ignored.\n# The format is:\n# TAG = value [value, ...]\n# For lists, items can also be appended using:\n# TAG += value [value, ...]\n# Values that contain spaces should be placed between quotes (\\\" \\\").\n\n#---------------------------------------------------------------------------\n# Project related configuration options\n#---------------------------------------------------------------------------\n\n# This tag specifies the encoding used for all characters in the config file\n# that follow. The default is UTF-8 which is also the encoding used for all text\n# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv\n# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv\n# for the list of possible encodings.\n# The default value is: UTF-8.\n\nDOXYFILE_ENCODING      = UTF-8\n\n# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by\n# double-quotes, unless you are using Doxywizard) that should identify the\n# project for which the documentation is generated. This name is used in the\n# title of most generated pages and in a few other places.\n# The default value is: My Project.\n\nPROJECT_NAME           = dvisvgm\n\n# The PROJECT_NUMBER tag can be used to enter a project or revision number. This\n# could be handy for archiving the generated documentation or if some version\n# control system is used.\n\nPROJECT_NUMBER = 3.6\n\n# Using the PROJECT_BRIEF tag one can provide an optional one line description\n# for a project that appears at the top of each page and should give viewer a\n# quick idea about the purpose of the project. Keep the description short.\n\nPROJECT_BRIEF          = \n\n# With the PROJECT_LOGO tag one can specify an logo or icon that is included in\n# the documentation. The maximum height of the logo should not exceed 55 pixels\n# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo\n# to the output directory.\n\nPROJECT_LOGO           = \n\n# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path\n# into which the generated documentation will be written. If a relative path is\n# entered, it will be relative to the location where doxygen was started. If\n# left blank the current directory will be used.\n\nOUTPUT_DIRECTORY       = doxy\n\n# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-\n# directories (in 2 levels) under the output directory of each output format and\n# will distribute the generated files over these directories. Enabling this\n# option can be useful when feeding doxygen a huge amount of source files, where\n# putting all generated files in the same directory would otherwise causes\n# performance problems for the file system.\n# The default value is: NO.\n\nCREATE_SUBDIRS         = NO\n\n# The OUTPUT_LANGUAGE tag is used to specify the language in which all\n# documentation generated by doxygen is written. Doxygen will use this\n# information to generate all constant output in the proper language.\n# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,\n# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),\n# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,\n# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),\n# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,\n# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,\n# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,\n# Ukrainian and Vietnamese.\n# The default value is: English.\n\nOUTPUT_LANGUAGE        = English\n\n# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member\n# descriptions after the members that are listed in the file and class\n# documentation (similar to Javadoc). Set to NO to disable this.\n# The default value is: YES.\n\nBRIEF_MEMBER_DESC      = YES\n\n# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief\n# description of a member or function before the detailed description\n#\n# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\n# brief descriptions will be completely suppressed.\n# The default value is: YES.\n\nREPEAT_BRIEF           = YES\n\n# This tag implements a quasi-intelligent brief description abbreviator that is\n# used to form the text in various listings. Each string in this list, if found\n# as the leading text of the brief description, will be stripped from the text\n# and the result, after processing the whole list, is used as the annotated\n# text. Otherwise, the brief description is used as-is. If left blank, the\n# following values are used ($name is automatically replaced with the name of\n# the entity):The $name class, The $name widget, The $name file, is, provides,\n# specifies, contains, represents, a, an and the.\n\nABBREVIATE_BRIEF       = \"The $name class\" \\\n                         \"The $name widget\" \\\n                         \"The $name file\" \\\n                         is \\\n                         provides \\\n                         specifies \\\n                         contains \\\n                         represents \\\n                         a \\\n                         an \\\n                         the\n\n# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n# doxygen will generate a detailed section even if there is only a brief\n# description.\n# The default value is: NO.\n\nALWAYS_DETAILED_SEC    = NO\n\n# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\n# inherited members of a class in the documentation of that class as if those\n# members were ordinary class members. Constructors, destructors and assignment\n# operators of the base classes will not be shown.\n# The default value is: NO.\n\nINLINE_INHERITED_MEMB  = NO\n\n# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path\n# before files name in the file list and in the header files. If set to NO the\n# shortest path that makes the file name unique will be used\n# The default value is: YES.\n\nFULL_PATH_NAMES        = YES\n\n# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.\n# Stripping is only done if one of the specified strings matches the left-hand\n# part of the path. The tag can be used to show relative paths in the file list.\n# If left blank the directory from which doxygen is run is used as the path to\n# strip.\n#\n# Note that you can specify absolute paths here, but also relative paths, which\n# will be relative from the directory where doxygen is started.\n# This tag requires that the tag FULL_PATH_NAMES is set to YES.\n\nSTRIP_FROM_PATH        = /home/mgieseki/develop/cpp/dvisvgm-hg/src/\n\n# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the\n# path mentioned in the documentation of a class, which tells the reader which\n# header file to include in order to use a class. If left blank only the name of\n# the header file containing the class definition is used. Otherwise one should\n# specify the list of include paths that are normally passed to the compiler\n# using the -I flag.\n\nSTRIP_FROM_INC_PATH    = \n\n# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but\n# less readable) file names. This can be useful is your file systems doesn't\n# support long names like on DOS, Mac, or CD-ROM.\n# The default value is: NO.\n\nSHORT_NAMES            = NO\n\n# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the\n# first line (until the first dot) of a Javadoc-style comment as the brief\n# description. If set to NO, the Javadoc-style will behave just like regular Qt-\n# style comments (thus requiring an explicit @brief command for a brief\n# description.)\n# The default value is: NO.\n\nJAVADOC_AUTOBRIEF      = NO\n\n# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first\n# line (until the first dot) of a Qt-style comment as the brief description. If\n# set to NO, the Qt-style will behave just like regular Qt-style comments (thus\n# requiring an explicit \\brief command for a brief description.)\n# The default value is: NO.\n\nQT_AUTOBRIEF           = NO\n\n# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a\n# multi-line C++ special comment block (i.e. a block of //! or /// comments) as\n# a brief description. This used to be the default behavior. The new default is\n# to treat a multi-line C++ comment block as a detailed description. Set this\n# tag to YES if you prefer the old behavior instead.\n#\n# Note that setting this tag to YES also means that rational rose comments are\n# not recognized any more.\n# The default value is: NO.\n\nMULTILINE_CPP_IS_BRIEF = NO\n\n# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the\n# documentation from any documented member that it re-implements.\n# The default value is: YES.\n\nINHERIT_DOCS           = YES\n\n# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a\n# new page for each member. If set to NO, the documentation of a member will be\n# part of the file/class/namespace that contains it.\n# The default value is: NO.\n\nSEPARATE_MEMBER_PAGES  = NO\n\n# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen\n# uses this value to replace tabs by spaces in code fragments.\n# Minimum value: 1, maximum value: 16, default value: 4.\n\nTAB_SIZE               = 4\n\n# This tag can be used to specify a number of aliases that act as commands in\n# the documentation. An alias has the form:\n# name=value\n# For example adding\n# \"sideeffect=@par Side Effects:\\n\"\n# will allow you to put the command \\sideeffect (or @sideeffect) in the\n# documentation, which will result in a user-defined paragraph with heading\n# \"Side Effects:\". You can put \\n's in the value part of an alias to insert\n# newlines.\n\nALIASES                = \n\n# This tag can be used to specify a number of word-keyword mappings (TCL only).\n# A mapping has the form \"name=value\". For example adding \"class=itcl::class\"\n# will allow you to use the command class in the itcl::class meaning.\n\nTCL_SUBST              = \n\n# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources\n# only. Doxygen will then generate output that is more tailored for C. For\n# instance, some of the names that are used will be different. The list of all\n# members will be omitted, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_FOR_C  = NO\n\n# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or\n# Python sources only. Doxygen will then generate output that is more tailored\n# for that language. For instance, namespaces will be presented as packages,\n# qualified scopes will look different, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_JAVA   = NO\n\n# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\n# sources. Doxygen will then generate output that is tailored for Fortran.\n# The default value is: NO.\n\nOPTIMIZE_FOR_FORTRAN   = NO\n\n# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\n# sources. Doxygen will then generate output that is tailored for VHDL.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_VHDL   = NO\n\n# Doxygen selects the parser to use depending on the extension of the files it\n# parses. With this tag you can assign which parser to use for a given\n# extension. Doxygen has a built-in mapping, but you can override or extend it\n# using this tag. The format is ext=language, where ext is a file extension, and\n# language is one of the parsers supported by doxygen: IDL, Java, Javascript,\n# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make\n# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C\n# (default is Fortran), use: inc=Fortran f=C.\n#\n# Note For files without extension you can use no_extension as a placeholder.\n#\n# Note that for custom extensions you also need to set FILE_PATTERNS otherwise\n# the files are not read by doxygen.\n\nEXTENSION_MAPPING      = \n\n# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments\n# according to the Markdown format, which allows for more readable\n# documentation. See http://daringfireball.net/projects/markdown/ for details.\n# The output of markdown processing is further processed by doxygen, so you can\n# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in\n# case of backward compatibilities issues.\n# The default value is: YES.\n\nMARKDOWN_SUPPORT       = YES\n\n# When enabled doxygen tries to link words that correspond to documented\n# classes, or namespaces to their corresponding documentation. Such a link can\n# be prevented in individual cases by by putting a % sign in front of the word\n# or globally by setting AUTOLINK_SUPPORT to NO.\n# The default value is: YES.\n\nAUTOLINK_SUPPORT       = YES\n\n# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n# to include (a tag file for) the STL sources as input, then you should set this\n# tag to YES in order to let doxygen match functions declarations and\n# definitions whose arguments contain STL classes (e.g. func(std::string);\n# versus func(std::string) {}). This also make the inheritance and collaboration\n# diagrams that involve STL classes more complete and accurate.\n# The default value is: NO.\n\nBUILTIN_STL_SUPPORT    = NO\n\n# If you use Microsoft's C++/CLI language, you should set this option to YES to\n# enable parsing support.\n# The default value is: NO.\n\nCPP_CLI_SUPPORT        = NO\n\n# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:\n# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen\n# will parse them like normal C++ but will assume all classes use public instead\n# of private inheritance when no explicit protection keyword is present.\n# The default value is: NO.\n\nSIP_SUPPORT            = NO\n\n# For Microsoft's IDL there are propget and propput attributes to indicate\n# getter and setter methods for a property. Setting this option to YES will make\n# doxygen to replace the get and set methods by a property in the documentation.\n# This will only work if the methods are indeed getting or setting a simple\n# type. If this is not the case, or you want to show the methods anyway, you\n# should set this option to NO.\n# The default value is: YES.\n\nIDL_PROPERTY_SUPPORT   = YES\n\n# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\n# tag is set to YES, then doxygen will reuse the documentation of the first\n# member in the group (if any) for the other members of the group. By default\n# all members of a group must be documented explicitly.\n# The default value is: NO.\n\nDISTRIBUTE_GROUP_DOC   = NO\n\n# Set the SUBGROUPING tag to YES to allow class member groups of the same type\n# (for instance a group of public functions) to be put as a subgroup of that\n# type (e.g. under the Public Functions section). Set it to NO to prevent\n# subgrouping. Alternatively, this can be done per class using the\n# \\nosubgrouping command.\n# The default value is: YES.\n\nSUBGROUPING            = YES\n\n# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions\n# are shown inside the group in which they are included (e.g. using \\ingroup)\n# instead of on a separate page (for HTML and Man pages) or section (for LaTeX\n# and RTF).\n#\n# Note that this feature does not work in combination with\n# SEPARATE_MEMBER_PAGES.\n# The default value is: NO.\n\nINLINE_GROUPED_CLASSES = NO\n\n# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions\n# with only public data fields or simple typedef fields will be shown inline in\n# the documentation of the scope in which they are defined (i.e. file,\n# namespace, or group documentation), provided this scope is documented. If set\n# to NO, structs, classes, and unions are shown on a separate page (for HTML and\n# Man pages) or section (for LaTeX and RTF).\n# The default value is: NO.\n\nINLINE_SIMPLE_STRUCTS  = NO\n\n# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or\n# enum is documented as struct, union, or enum with the name of the typedef. So\n# typedef struct TypeS {} TypeT, will appear in the documentation as a struct\n# with name TypeT. When disabled the typedef will appear as a member of a file,\n# namespace, or class. And the struct will be named TypeS. This can typically be\n# useful for C code in case the coding convention dictates that all compound\n# types are typedef'ed and only the typedef is referenced, never the tag name.\n# The default value is: NO.\n\nTYPEDEF_HIDES_STRUCT   = NO\n\n# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n# cache is used to resolve symbols given their name and scope. Since this can be\n# an expensive process and often the same symbol appears multiple times in the\n# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small\n# doxygen will become slower. If the cache is too large, memory is wasted. The\n# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range\n# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536\n# symbols. At the end of a run doxygen will report the cache usage and suggest\n# the optimal cache size from a speed point of view.\n# Minimum value: 0, maximum value: 9, default value: 0.\n\nLOOKUP_CACHE_SIZE      = 0\n\n#---------------------------------------------------------------------------\n# Build related configuration options\n#---------------------------------------------------------------------------\n\n# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in\n# documentation are documented, even if no documentation was available. Private\n# class members and static file members will be hidden unless the\n# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.\n# Note: This will also disable the warnings about undocumented members that are\n# normally produced when WARNINGS is set to YES.\n# The default value is: NO.\n\nEXTRACT_ALL            = YES\n\n# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will\n# be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIVATE        = YES\n\n# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal\n# scope will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PACKAGE        = NO\n\n# If the EXTRACT_STATIC tag is set to YES all static members of a file will be\n# included in the documentation.\n# The default value is: NO.\n\nEXTRACT_STATIC         = YES\n\n# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined\n# locally in source files will be included in the documentation. If set to NO\n# only classes defined in header files are included. Does not have any effect\n# for Java sources.\n# The default value is: YES.\n\nEXTRACT_LOCAL_CLASSES  = YES\n\n# This flag is only useful for Objective-C code. When set to YES local methods,\n# which are defined in the implementation section but not in the interface are\n# included in the documentation. If set to NO only methods in the interface are\n# included.\n# The default value is: NO.\n\nEXTRACT_LOCAL_METHODS  = YES\n\n# If this flag is set to YES, the members of anonymous namespaces will be\n# extracted and appear in the documentation as a namespace called\n# 'anonymous_namespace{file}', where file will be replaced with the base name of\n# the file that contains the anonymous namespace. By default anonymous namespace\n# are hidden.\n# The default value is: NO.\n\nEXTRACT_ANON_NSPACES   = NO\n\n# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all\n# undocumented members inside documented classes or files. If set to NO these\n# members will be included in the various overviews, but no documentation\n# section is generated. This option has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_MEMBERS     = NO\n\n# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all\n# undocumented classes that are normally visible in the class hierarchy. If set\n# to NO these classes will be included in the various overviews. This option has\n# no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_CLASSES     = NO\n\n# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend\n# (class|struct|union) declarations. If set to NO these declarations will be\n# included in the documentation.\n# The default value is: NO.\n\nHIDE_FRIEND_COMPOUNDS  = NO\n\n# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any\n# documentation blocks found inside the body of a function. If set to NO these\n# blocks will be appended to the function's detailed documentation block.\n# The default value is: NO.\n\nHIDE_IN_BODY_DOCS      = NO\n\n# The INTERNAL_DOCS tag determines if documentation that is typed after a\n# \\internal command is included. If the tag is set to NO then the documentation\n# will be excluded. Set it to YES to include the internal documentation.\n# The default value is: NO.\n\nINTERNAL_DOCS          = YES\n\n# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file\n# names in lower-case letters. If set to YES upper-case letters are also\n# allowed. This is useful if you have classes or files whose names only differ\n# in case and if your file system supports case sensitive file names. Windows\n# and Mac users are advised to set this option to NO.\n# The default value is: system dependent.\n\nCASE_SENSE_NAMES       = YES\n\n# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with\n# their full class and namespace scopes in the documentation. If set to YES the\n# scope will be hidden.\n# The default value is: NO.\n\nHIDE_SCOPE_NAMES       = NO\n\n# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of\n# the files that are included by a file in the documentation of that file.\n# The default value is: YES.\n\nSHOW_INCLUDE_FILES     = YES\n\n# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each\n# grouped member an include statement to the documentation, telling the reader\n# which file to include in order to use the member.\n# The default value is: NO.\n\nSHOW_GROUPED_MEMB_INC  = NO\n\n# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include\n# files with double quotes in the documentation rather than with sharp brackets.\n# The default value is: NO.\n\nFORCE_LOCAL_INCLUDES   = NO\n\n# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the\n# documentation for inline members.\n# The default value is: YES.\n\nINLINE_INFO            = YES\n\n# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the\n# (detailed) documentation of file and class members alphabetically by member\n# name. If set to NO the members will appear in declaration order.\n# The default value is: YES.\n\nSORT_MEMBER_DOCS       = YES\n\n# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief\n# descriptions of file, namespace and class members alphabetically by member\n# name. If set to NO the members will appear in declaration order. Note that\n# this will also influence the order of the classes in the class list.\n# The default value is: NO.\n\nSORT_BRIEF_DOCS        = NO\n\n# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the\n# (brief and detailed) documentation of class members so that constructors and\n# destructors are listed first. If set to NO the constructors will appear in the\n# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.\n# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief\n# member documentation.\n# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting\n# detailed member documentation.\n# The default value is: NO.\n\nSORT_MEMBERS_CTORS_1ST = NO\n\n# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy\n# of group names into alphabetical order. If set to NO the group names will\n# appear in their defined order.\n# The default value is: NO.\n\nSORT_GROUP_NAMES       = NO\n\n# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by\n# fully-qualified names, including namespaces. If set to NO, the class list will\n# be sorted only by class name, not including the namespace part.\n# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\n# Note: This option applies only to the class list, not to the alphabetical\n# list.\n# The default value is: NO.\n\nSORT_BY_SCOPE_NAME     = NO\n\n# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper\n# type resolution of all parameters of a function it will reject a match between\n# the prototype and the implementation of a member function even if there is\n# only one candidate or it is obvious which candidate to choose by doing a\n# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still\n# accept a match between prototype and implementation in such cases.\n# The default value is: NO.\n\nSTRICT_PROTO_MATCHING  = NO\n\n# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the\n# todo list. This list is created by putting \\todo commands in the\n# documentation.\n# The default value is: YES.\n\nGENERATE_TODOLIST      = YES\n\n# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the\n# test list. This list is created by putting \\test commands in the\n# documentation.\n# The default value is: YES.\n\nGENERATE_TESTLIST      = YES\n\n# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug\n# list. This list is created by putting \\bug commands in the documentation.\n# The default value is: YES.\n\nGENERATE_BUGLIST       = YES\n\n# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)\n# the deprecated list. This list is created by putting \\deprecated commands in\n# the documentation.\n# The default value is: YES.\n\nGENERATE_DEPRECATEDLIST= YES\n\n# The ENABLED_SECTIONS tag can be used to enable conditional documentation\n# sections, marked by \\if <section_label> ... \\endif and \\cond <section_label>\n# ... \\endcond blocks.\n\nENABLED_SECTIONS       = \n\n# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the\n# initial value of a variable or macro / define can have for it to appear in the\n# documentation. If the initializer consists of more lines than specified here\n# it will be hidden. Use a value of 0 to hide initializers completely. The\n# appearance of the value of individual variables and macros / defines can be\n# controlled using \\showinitializer or \\hideinitializer command in the\n# documentation regardless of this setting.\n# Minimum value: 0, maximum value: 10000, default value: 30.\n\nMAX_INITIALIZER_LINES  = 30\n\n# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at\n# the bottom of the documentation of classes and structs. If set to YES the list\n# will mention the files that were used to generate the documentation.\n# The default value is: YES.\n\nSHOW_USED_FILES        = YES\n\n# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This\n# will remove the Files entry from the Quick Index and from the Folder Tree View\n# (if specified).\n# The default value is: YES.\n\nSHOW_FILES             = YES\n\n# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces\n# page. This will remove the Namespaces entry from the Quick Index and from the\n# Folder Tree View (if specified).\n# The default value is: YES.\n\nSHOW_NAMESPACES        = YES\n\n# The FILE_VERSION_FILTER tag can be used to specify a program or script that\n# doxygen should invoke to get the current version for each file (typically from\n# the version control system). Doxygen will invoke the program by executing (via\n# popen()) the command command input-file, where command is the value of the\n# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided\n# by doxygen. Whatever the program writes to standard output is used as the file\n# version. For an example see the documentation.\n\nFILE_VERSION_FILTER    = \n\n# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n# by doxygen. The layout file controls the global structure of the generated\n# output files in an output format independent way. To create the layout file\n# that represents doxygen's defaults, run doxygen with the -l option. You can\n# optionally specify a file name after the option, if omitted DoxygenLayout.xml\n# will be used as the name of the layout file.\n#\n# Note that if you run doxygen from a directory containing a file called\n# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE\n# tag is left empty.\n\nLAYOUT_FILE            = \n\n# The CITE_BIB_FILES tag can be used to specify one or more bib files containing\n# the reference definitions. This must be a list of .bib files. The .bib\n# extension is automatically appended if omitted. This requires the bibtex tool\n# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.\n# For LaTeX the style of the bibliography can be controlled using\n# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the\n# search path. Do not use file names with spaces, bibtex cannot handle them. See\n# also \\cite for info how to create references.\n\nCITE_BIB_FILES         = \n\n#---------------------------------------------------------------------------\n# Configuration options related to warning and progress messages\n#---------------------------------------------------------------------------\n\n# The QUIET tag can be used to turn on/off the messages that are generated to\n# standard output by doxygen. If QUIET is set to YES this implies that the\n# messages are off.\n# The default value is: NO.\n\nQUIET                  = NO\n\n# The WARNINGS tag can be used to turn on/off the warning messages that are\n# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES\n# this implies that the warnings are on.\n#\n# Tip: Turn warnings on while writing the documentation.\n# The default value is: YES.\n\nWARNINGS               = YES\n\n# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate\n# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag\n# will automatically be disabled.\n# The default value is: YES.\n\nWARN_IF_UNDOCUMENTED   = NO\n\n# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for\n# potential errors in the documentation, such as not documenting some parameters\n# in a documented function, or documenting parameters that don't exist or using\n# markup commands wrongly.\n# The default value is: YES.\n\nWARN_IF_DOC_ERROR      = YES\n\n# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that\n# are documented, but have no documentation for their parameters or return\n# value. If set to NO doxygen will only warn about wrong or incomplete parameter\n# documentation, but not about the absence of documentation.\n# The default value is: NO.\n\nWARN_NO_PARAMDOC       = YES\n\n# The WARN_FORMAT tag determines the format of the warning messages that doxygen\n# can produce. The string should contain the $file, $line, and $text tags, which\n# will be replaced by the file and line number from which the warning originated\n# and the warning text. Optionally the format may contain $version, which will\n# be replaced by the version of the file (if it could be obtained via\n# FILE_VERSION_FILTER)\n# The default value is: $file:$line: $text.\n\nWARN_FORMAT            = \"$file:$line: $text\"\n\n# The WARN_LOGFILE tag can be used to specify a file to which warning and error\n# messages should be written. If left blank the output is written to standard\n# error (stderr).\n\nWARN_LOGFILE           = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the input files\n#---------------------------------------------------------------------------\n\n# The INPUT tag is used to specify the files and/or directories that contain\n# documented source files. You may enter file names like myfile.cpp or\n# directories like /usr/src/myproject. Separate the files or directories with\n# spaces.\n# Note: If this tag is empty the current directory is searched.\n\nINPUT                  = .\n\n# This tag can be used to specify the character encoding of the source files\n# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses\n# libiconv (or the iconv built into libc) for the transcoding. See the libiconv\n# documentation (see: http://www.gnu.org/software/libiconv) for the list of\n# possible encodings.\n# The default value is: UTF-8.\n\nINPUT_ENCODING         = UTF-8\n\n# If the value of the INPUT tag contains directories, you can use the\n# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and\n# *.h) to filter out the source-files in the directories. If left blank the\n# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,\n# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,\n# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,\n# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,\n# *.qsf, *.as and *.js.\n\nFILE_PATTERNS          = *.c \\\n                         *.cc \\\n                         *.cxx \\\n                         *.cpp \\\n                         *.c++ \\\n                         *.d \\\n                         *.java \\\n                         *.ii \\\n                         *.ixx \\\n                         *.ipp \\\n                         *.i++ \\\n                         *.inl \\\n                         *.h \\\n                         *.hh \\\n                         *.hxx \\\n                         *.hpp \\\n                         *.h++ \\\n                         *.idl \\\n                         *.odl \\\n                         *.cs \\\n                         *.php \\\n                         *.php3 \\\n                         *.inc \\\n                         *.m \\\n                         *.mm \\\n                         *.dox \\\n                         *.py \\\n                         *.f90 \\\n                         *.f \\\n                         *.vhd \\\n                         *.vhdl \\\n                         *.C \\\n                         *.CC \\\n                         *.C++ \\\n                         *.II \\\n                         *.I++ \\\n                         *.H \\\n                         *.HH \\\n                         *.H++ \\\n                         *.CS \\\n                         *.PHP \\\n                         *.PHP3 \\\n                         *.M \\\n                         *.MM \\\n                         *.PY \\\n                         *.F90 \\\n                         *.F \\\n                         *.VHD \\\n                         *.VHDL\n\n# The RECURSIVE tag can be used to specify whether or not subdirectories should\n# be searched for input files as well.\n# The default value is: NO.\n\nRECURSIVE              = YES\n\n# The EXCLUDE tag can be used to specify files and/or directories that should be\n# excluded from the INPUT source files. This way you can easily exclude a\n# subdirectory from a directory tree whose root is specified with the INPUT tag.\n#\n# Note that relative paths are relative to the directory from which doxygen is\n# run.\n\nEXCLUDE                = \n\n# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n# directories that are symbolic links (a Unix file system feature) are excluded\n# from the input.\n# The default value is: NO.\n\nEXCLUDE_SYMLINKS       = NO\n\n# If the value of the INPUT tag contains directories, you can use the\n# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n# certain files from those directories.\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories for example use the pattern */test/*\n\nEXCLUDE_PATTERNS       = \n\n# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n# (namespaces, classes, functions, etc.) that should be excluded from the\n# output. The symbol name can be a fully qualified name, a word, or if the\n# wildcard * is used, a substring. Examples: ANamespace, AClass,\n# AClass::ANamespace, ANamespace::*Test\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories use the pattern */test/*\n\nEXCLUDE_SYMBOLS        = \n\n# The EXAMPLE_PATH tag can be used to specify one or more files or directories\n# that contain example code fragments that are included (see the \\include\n# command).\n\nEXAMPLE_PATH           = \n\n# If the value of the EXAMPLE_PATH tag contains directories, you can use the\n# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and\n# *.h) to filter out the source-files in the directories. If left blank all\n# files are included.\n\nEXAMPLE_PATTERNS       = *\n\n# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\n# searched for input files to be used with the \\include or \\dontinclude commands\n# irrespective of the value of the RECURSIVE tag.\n# The default value is: NO.\n\nEXAMPLE_RECURSIVE      = NO\n\n# The IMAGE_PATH tag can be used to specify one or more files or directories\n# that contain images that are to be included in the documentation (see the\n# \\image command).\n\nIMAGE_PATH             = \n\n# The INPUT_FILTER tag can be used to specify a program that doxygen should\n# invoke to filter for each input file. Doxygen will invoke the filter program\n# by executing (via popen()) the command:\n#\n# <filter> <input-file>\n#\n# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the\n# name of an input file. Doxygen will then use the output that the filter\n# program writes to standard output. If FILTER_PATTERNS is specified, this tag\n# will be ignored.\n#\n# Note that the filter must not add or remove lines; it is applied before the\n# code is scanned, but not when the output code is generated. If lines are added\n# or removed, the anchors will not be placed correctly.\n\nINPUT_FILTER           = \n\n# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\n# basis. Doxygen will compare the file name with each pattern and apply the\n# filter if there is a match. The filters are a list of the form: pattern=filter\n# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how\n# filters are used. If the FILTER_PATTERNS tag is empty or if none of the\n# patterns match the file name, INPUT_FILTER is applied.\n\nFILTER_PATTERNS        = \n\n# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\n# INPUT_FILTER ) will also be used to filter the input files that are used for\n# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).\n# The default value is: NO.\n\nFILTER_SOURCE_FILES    = NO\n\n# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\n# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and\n# it is also possible to disable source filtering for a specific pattern using\n# *.ext= (so without naming a filter).\n# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.\n\nFILTER_SOURCE_PATTERNS = \n\n# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that\n# is part of the input, its contents will be placed on the main page\n# (index.html). This can be useful if you have a project on for instance GitHub\n# and want to reuse the introduction page also for the doxygen output.\n\nUSE_MDFILE_AS_MAINPAGE = \n\n#---------------------------------------------------------------------------\n# Configuration options related to source browsing\n#---------------------------------------------------------------------------\n\n# If the SOURCE_BROWSER tag is set to YES then a list of source files will be\n# generated. Documented entities will be cross-referenced with these sources.\n#\n# Note: To get rid of all source code in the generated output, make sure that\n# also VERBATIM_HEADERS is set to NO.\n# The default value is: NO.\n\nSOURCE_BROWSER         = YES\n\n# Setting the INLINE_SOURCES tag to YES will include the body of functions,\n# classes and enums directly into the documentation.\n# The default value is: NO.\n\nINLINE_SOURCES         = NO\n\n# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any\n# special comment blocks from generated source code fragments. Normal C, C++ and\n# Fortran comments will always remain visible.\n# The default value is: YES.\n\nSTRIP_CODE_COMMENTS    = YES\n\n# If the REFERENCED_BY_RELATION tag is set to YES then for each documented\n# function all documented functions referencing it will be listed.\n# The default value is: NO.\n\nREFERENCED_BY_RELATION = NO\n\n# If the REFERENCES_RELATION tag is set to YES then for each documented function\n# all documented entities called/used by that function will be listed.\n# The default value is: NO.\n\nREFERENCES_RELATION    = NO\n\n# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set\n# to YES, then the hyperlinks from functions in REFERENCES_RELATION and\n# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will\n# link to the documentation.\n# The default value is: YES.\n\nREFERENCES_LINK_SOURCE = YES\n\n# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the\n# source code will show a tooltip with additional information such as prototype,\n# brief description and links to the definition and documentation. Since this\n# will make the HTML file larger and loading of large files a bit slower, you\n# can opt to disable this feature.\n# The default value is: YES.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nSOURCE_TOOLTIPS        = YES\n\n# If the USE_HTAGS tag is set to YES then the references to source code will\n# point to the HTML generated by the htags(1) tool instead of doxygen built-in\n# source browser. The htags tool is part of GNU's global source tagging system\n# (see http://www.gnu.org/software/global/global.html). You will need version\n# 4.8.6 or higher.\n#\n# To use it do the following:\n# - Install the latest version of global\n# - Enable SOURCE_BROWSER and USE_HTAGS in the config file\n# - Make sure the INPUT points to the root of the source tree\n# - Run doxygen as normal\n#\n# Doxygen will invoke htags (and that will in turn invoke gtags), so these\n# tools must be available from the command line (i.e. in the search path).\n#\n# The result: instead of the source browser generated by doxygen, the links to\n# source code will now point to the output of htags.\n# The default value is: NO.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nUSE_HTAGS              = NO\n\n# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a\n# verbatim copy of the header file for each class for which an include is\n# specified. Set to NO to disable this.\n# See also: Section \\class.\n# The default value is: YES.\n\nVERBATIM_HEADERS       = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the alphabetical class index\n#---------------------------------------------------------------------------\n\n# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all\n# compounds will be generated. Enable this if the project contains a lot of\n# classes, structs, unions or interfaces.\n# The default value is: YES.\n\nALPHABETICAL_INDEX     = YES\n\n# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in\n# which the alphabetical index list will be split.\n# Minimum value: 1, maximum value: 20, default value: 5.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nCOLS_IN_ALPHA_INDEX    = 5\n\n# In case all classes in a project start with a common prefix, all classes will\n# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag\n# can be used to specify a prefix (or a list of prefixes) that should be ignored\n# while generating the index headers.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nIGNORE_PREFIX          = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the HTML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output\n# The default value is: YES.\n\nGENERATE_HTML          = YES\n\n# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_OUTPUT            = html\n\n# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each\n# generated HTML page (for example: .htm, .php, .asp).\n# The default value is: .html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FILE_EXTENSION    = .html\n\n# The HTML_HEADER tag can be used to specify a user-defined HTML header file for\n# each generated HTML page. If the tag is left blank doxygen will generate a\n# standard header.\n#\n# To get valid HTML the header file that includes any scripts and style sheets\n# that doxygen needs, which is dependent on the configuration options used (e.g.\n# the setting GENERATE_TREEVIEW). It is highly recommended to start with a\n# default header using\n# doxygen -w html new_header.html new_footer.html new_stylesheet.css\n# YourConfigFile\n# and then modify the file new_header.html. See also section \"Doxygen usage\"\n# for information on how to generate the default header that doxygen normally\n# uses.\n# Note: The header is subject to change so you typically have to regenerate the\n# default header when upgrading to a newer version of doxygen. For a description\n# of the possible markers and block names see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_HEADER            = \n\n# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each\n# generated HTML page. If the tag is left blank doxygen will generate a standard\n# footer. See HTML_HEADER for more information on how to generate a default\n# footer and what special commands can be used inside the footer. See also\n# section \"Doxygen usage\" for information on how to generate the default footer\n# that doxygen normally uses.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FOOTER            = \n\n# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style\n# sheet that is used by each HTML page. It can be used to fine-tune the look of\n# the HTML output. If left blank doxygen will generate a default style sheet.\n# See also section \"Doxygen usage\" for information on how to generate the style\n# sheet that doxygen normally uses.\n# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as\n# it is more robust and this tag (HTML_STYLESHEET) will in the future become\n# obsolete.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_STYLESHEET        = \n\n# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-\n# defined cascading style sheet that is included after the standard style sheets\n# created by doxygen. Using this option one can overrule certain style aspects.\n# This is preferred over using HTML_STYLESHEET since it does not replace the\n# standard style sheet and is therefore more robust against future updates.\n# Doxygen will copy the style sheet file to the output directory. For an example\n# see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_STYLESHEET  = \n\n# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the HTML output directory. Note\n# that these files will be copied to the base HTML output directory. Use the\n# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n# files. In the HTML_STYLESHEET file, use the file name only. Also note that the\n# files will be copied as-is; there are no commands or markers available.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_FILES       = \n\n# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen\n# will adjust the colors in the stylesheet and background images according to\n# this color. Hue is specified as an angle on a colorwheel, see\n# http://en.wikipedia.org/wiki/Hue for more information. For instance the value\n# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300\n# purple, and 360 is red again.\n# Minimum value: 0, maximum value: 359, default value: 220.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_HUE    = 220\n\n# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors\n# in the HTML output. For a value of 0 the output will use grayscales only. A\n# value of 255 will produce the most vivid colors.\n# Minimum value: 0, maximum value: 255, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_SAT    = 100\n\n# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the\n# luminance component of the colors in the HTML output. Values below 100\n# gradually make the output lighter, whereas values above 100 make the output\n# darker. The value divided by 100 is the actual gamma applied, so 80 represents\n# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not\n# change the gamma.\n# Minimum value: 40, maximum value: 240, default value: 80.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_GAMMA  = 80\n\n# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\n# page will contain the date and time when the page was generated. Setting this\n# to NO can help when comparing the output of multiple runs.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_TIMESTAMP         = YES\n\n# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\n# documentation will contain sections that can be hidden and shown after the\n# page has loaded.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_SECTIONS  = NO\n\n# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries\n# shown in the various tree structured indices initially; the user can expand\n# and collapse entries dynamically later on. Doxygen will expand the tree to\n# such a level that at most the specified number of entries are visible (unless\n# a fully collapsed tree already exceeds this amount). So setting the number of\n# entries 1 will produce a full collapsed tree by default. 0 is a special value\n# representing an infinite number of entries and will result in a full expanded\n# tree by default.\n# Minimum value: 0, maximum value: 9999, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_INDEX_NUM_ENTRIES = 100\n\n# If the GENERATE_DOCSET tag is set to YES, additional index files will be\n# generated that can be used as input for Apple's Xcode 3 integrated development\n# environment (see: http://developer.apple.com/tools/xcode/), introduced with\n# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a\n# Makefile in the HTML output directory. Running make will produce the docset in\n# that directory and running make install will install the docset in\n# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at\n# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html\n# for more information.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_DOCSET        = NO\n\n# This tag determines the name of the docset feed. A documentation feed provides\n# an umbrella under which multiple documentation sets from a single provider\n# (such as a company or product suite) can be grouped.\n# The default value is: Doxygen generated docs.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_FEEDNAME        = \"Doxygen generated docs\"\n\n# This tag specifies a string that should uniquely identify the documentation\n# set bundle. This should be a reverse domain-name style string, e.g.\n# com.mycompany.MyDocSet. Doxygen will append .docset to the name.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_BUNDLE_ID       = org.doxygen.Project\n\n# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify\n# the documentation publisher. This should be a reverse domain-name style\n# string, e.g. com.mycompany.MyDocSet.documentation.\n# The default value is: org.doxygen.Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_ID    = org.doxygen.Publisher\n\n# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.\n# The default value is: Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_NAME  = Publisher\n\n# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three\n# additional HTML index files: index.hhp, index.hhc, and index.hhk. The\n# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop\n# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on\n# Windows.\n#\n# The HTML Help Workshop contains a compiler that can convert all HTML output\n# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML\n# files are now used as the Windows 98 help format, and will replace the old\n# Windows help format (.hlp) on all Windows platforms in the future. Compressed\n# HTML files also contain an index, a table of contents, and you can search for\n# words in the documentation. The HTML workshop also contains a viewer for\n# compressed HTML files.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_HTMLHELP      = NO\n\n# The CHM_FILE tag can be used to specify the file name of the resulting .chm\n# file. You can add a path in front of the file if the result should not be\n# written to the html output directory.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_FILE               = \n\n# The HHC_LOCATION tag can be used to specify the location (absolute path\n# including file name) of the HTML help compiler ( hhc.exe). If non-empty\n# doxygen will try to run the HTML help compiler on the generated index.hhp.\n# The file has to be specified with full path.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nHHC_LOCATION           = \n\n# The GENERATE_CHI flag controls if a separate .chi index file is generated (\n# YES) or that it should be included in the master .chm file ( NO).\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nGENERATE_CHI           = NO\n\n# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)\n# and project file content.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_INDEX_ENCODING     = \n\n# The BINARY_TOC flag controls whether a binary table of contents is generated (\n# YES) or a normal table of contents ( NO) in the .chm file.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nBINARY_TOC             = NO\n\n# The TOC_EXPAND flag can be set to YES to add extra items for group members to\n# the table of contents of the HTML help documentation and to the tree view.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nTOC_EXPAND             = NO\n\n# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that\n# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help\n# (.qch) of the generated HTML documentation.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_QHP           = NO\n\n# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify\n# the file name of the resulting .qch file. The path specified is relative to\n# the HTML output folder.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQCH_FILE               = \n\n# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help\n# Project output. For more information please see Qt Help Project / Namespace\n# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_NAMESPACE          = org.doxygen.Project\n\n# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt\n# Help Project output. For more information please see Qt Help Project / Virtual\n# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-\n# folders).\n# The default value is: doc.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_VIRTUAL_FOLDER     = doc\n\n# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom\n# filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_NAME   = \n\n# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the\n# custom filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_ATTRS  = \n\n# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n# project's filter section matches. Qt Help Project / Filter Attributes (see:\n# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_SECT_FILTER_ATTRS  = \n\n# The QHG_LOCATION tag can be used to specify the location of Qt's\n# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the\n# generated .qhp file.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHG_LOCATION           = \n\n# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be\n# generated, together with the HTML files, they form an Eclipse help plugin. To\n# install this plugin and make it available under the help contents menu in\n# Eclipse, the contents of the directory containing the HTML and XML files needs\n# to be copied into the plugins directory of eclipse. The name of the directory\n# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.\n# After copying Eclipse needs to be restarted before the help appears.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_ECLIPSEHELP   = NO\n\n# A unique identifier for the Eclipse help plugin. When installing the plugin\n# the directory name containing the HTML and XML files should also have this\n# name. Each documentation set should have its own identifier.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.\n\nECLIPSE_DOC_ID         = org.doxygen.Project\n\n# If you want full control over the layout of the generated HTML pages it might\n# be necessary to disable the index and replace it with your own. The\n# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top\n# of each HTML page. A value of NO enables the index and the value YES disables\n# it. Since the tabs in the index contain the same information as the navigation\n# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nDISABLE_INDEX          = NO\n\n# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n# structure should be generated to display hierarchical information. If the tag\n# value is set to YES, a side panel will be generated containing a tree-like\n# index structure (just like the one that is generated for HTML Help). For this\n# to work a browser that supports JavaScript, DHTML, CSS and frames is required\n# (i.e. any modern browser). Windows users are probably better off using the\n# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can\n# further fine-tune the look of the index. As an example, the default style\n# sheet generated by doxygen has an example that shows how to put an image at\n# the root of the tree instead of the PROJECT_NAME. Since the tree basically has\n# the same information as the tab index, you could consider setting\n# DISABLE_INDEX to YES when enabling this option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_TREEVIEW      = NO\n\n# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that\n# doxygen will group on one line in the generated HTML documentation.\n#\n# Note that a value of 0 will completely suppress the enum values from appearing\n# in the overview section.\n# Minimum value: 0, maximum value: 20, default value: 4.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nENUM_VALUES_PER_LINE   = 4\n\n# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used\n# to set the initial width (in pixels) of the frame in which the tree is shown.\n# Minimum value: 0, maximum value: 1500, default value: 250.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nTREEVIEW_WIDTH         = 250\n\n# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to\n# external symbols imported via tag files in a separate window.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nEXT_LINKS_IN_WINDOW    = NO\n\n# Use this tag to change the font size of LaTeX formulas included as images in\n# the HTML documentation. When you change the font size after a successful\n# doxygen run you need to manually remove any form_*.png images from the HTML\n# output directory to force them to be regenerated.\n# Minimum value: 8, maximum value: 50, default value: 10.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_FONTSIZE       = 10\n\n# Use the FORMULA_TRANPARENT tag to determine whether or not the images\n# generated for formulas are transparent PNGs. Transparent PNGs are not\n# supported properly for IE 6.0, but are supported on all modern browsers.\n#\n# Note that when changing this option you need to delete any form_*.png files in\n# the HTML output directory before the changes have effect.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_TRANSPARENT    = YES\n\n# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see\n# http://www.mathjax.org) which uses client side Javascript for the rendering\n# instead of using prerendered bitmaps. Use this if you do not have LaTeX\n# installed or if you want to formulas look prettier in the HTML output. When\n# enabled you may also need to install MathJax separately and configure the path\n# to it using the MATHJAX_RELPATH option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nUSE_MATHJAX            = NO\n\n# When MathJax is enabled you can set the default output format to be used for\n# the MathJax output. See the MathJax site (see:\n# http://docs.mathjax.org/en/latest/output.html) for more details.\n# Possible values are: HTML-CSS (which is slower, but has the best\n# compatibility), NativeMML (i.e. MathML) and SVG.\n# The default value is: HTML-CSS.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_FORMAT         = HTML-CSS\n\n# When MathJax is enabled you need to specify the location relative to the HTML\n# output directory using the MATHJAX_RELPATH option. The destination directory\n# should contain the MathJax.js script. For instance, if the mathjax directory\n# is located at the same level as the HTML output directory, then\n# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax\n# Content Delivery Network so you can quickly see the result without installing\n# MathJax. However, it is strongly recommended to install a local copy of\n# MathJax from http://www.mathjax.org before deployment.\n# The default value is: http://cdn.mathjax.org/mathjax/latest.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest\n\n# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax\n# extension names that should be enabled during MathJax rendering. For example\n# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_EXTENSIONS     = \n\n# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces\n# of code that will be used on startup of the MathJax code. See the MathJax site\n# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an\n# example see the documentation.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_CODEFILE       = \n\n# When the SEARCHENGINE tag is enabled doxygen will generate a search box for\n# the HTML output. The underlying search engine uses javascript and DHTML and\n# should work on any modern browser. Note that when using HTML help\n# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)\n# there is already a search function so this one should typically be disabled.\n# For large projects the javascript based search engine can be slow, then\n# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to\n# search using the keyboard; to jump to the search box use <access key> + S\n# (what the <access key> is depends on the OS and browser, but it is typically\n# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down\n# key> to jump into the search results window, the results can be navigated\n# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel\n# the search. The filter options can be selected when the cursor is inside the\n# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>\n# to select a filter and <Enter> or <escape> to activate or cancel the filter\n# option.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nSEARCHENGINE           = NO\n\n# When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n# implemented using a web server instead of a web client using Javascript. There\n# are two flavours of web server based searching depending on the\n# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for\n# searching and an index file used by the script. When EXTERNAL_SEARCH is\n# enabled the indexing and searching needs to be provided by external tools. See\n# the section \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSERVER_BASED_SEARCH    = NO\n\n# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP\n# script for searching. Instead the search results are written to an XML file\n# which needs to be processed by an external indexer. Doxygen will invoke an\n# external search engine pointed to by the SEARCHENGINE_URL option to obtain the\n# search results.\n#\n# Doxygen ships with an example indexer ( doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: http://xapian.org/).\n#\n# See the section \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH        = NO\n\n# The SEARCHENGINE_URL should point to a search engine hosted by a web server\n# which will return the search results when EXTERNAL_SEARCH is enabled.\n#\n# Doxygen ships with an example indexer ( doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: http://xapian.org/). See the section \"External Indexing and\n# Searching\" for details.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHENGINE_URL       = \n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed\n# search data is written to a file for indexing by an external tool. With the\n# SEARCHDATA_FILE tag the name of this file can be specified.\n# The default file is: searchdata.xml.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHDATA_FILE        = searchdata.xml\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the\n# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\n# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\n# projects and redirect the results back to the right project.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH_ID     = \n\n# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n# projects other than the one defined by this configuration file, but that are\n# all added to the same external search index. Each project needs to have a\n# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of\n# to a relative location where the documentation can be found. The format is:\n# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTRA_SEARCH_MAPPINGS  = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the LaTeX output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.\n# The default value is: YES.\n\nGENERATE_LATEX         = NO\n\n# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_OUTPUT           = latex\n\n# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n# invoked.\n#\n# Note that when enabling USE_PDFLATEX this option is only used for generating\n# bitmaps for formulas in the HTML output, but not in the Makefile that is\n# written to the output directory.\n# The default file is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_CMD_NAME         = latex\n\n# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate\n# index for LaTeX.\n# The default file is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nMAKEINDEX_CMD_NAME     = makeindex\n\n# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nCOMPACT_LATEX          = NO\n\n# The PAPER_TYPE tag can be used to set the paper type that is used by the\n# printer.\n# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x\n# 14 inches) and executive (7.25 x 10.5 inches).\n# The default value is: a4.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPAPER_TYPE             = a4wide\n\n# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names\n# that should be included in the LaTeX output. To get the times font for\n# instance you can specify\n# EXTRA_PACKAGES=times\n# If left blank no extra packages will be included.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nEXTRA_PACKAGES         = \n\n# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the\n# generated LaTeX document. The header should contain everything until the first\n# chapter. If it is left blank doxygen will generate a standard header. See\n# section \"Doxygen usage\" for information on how to let doxygen write the\n# default header to a separate file.\n#\n# Note: Only use a user-defined header if you know what you are doing! The\n# following commands have a special meaning inside the header: $title,\n# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will\n# replace them by respectively the title of the page, the current date and time,\n# only the current date, the version number of doxygen, the project name (see\n# PROJECT_NAME), or the project number (see PROJECT_NUMBER).\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HEADER           = \n\n# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the\n# generated LaTeX document. The footer should contain everything after the last\n# chapter. If it is left blank doxygen will generate a standard footer.\n#\n# Note: Only use a user-defined footer if you know what you are doing!\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_FOOTER           = \n\n# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the LATEX_OUTPUT output\n# directory. Note that the files will be copied as-is; there are no commands or\n# markers available.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_FILES      = \n\n# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is\n# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will\n# contain links (just like the HTML output) instead of page references. This\n# makes the output suitable for online browsing using a PDF viewer.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPDF_HYPERLINKS         = YES\n\n# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate\n# the PDF file directly from the LaTeX files. Set this option to YES to get a\n# higher quality PDF documentation.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nUSE_PDFLATEX           = YES\n\n# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode\n# command to the generated LaTeX files. This will instruct LaTeX to keep running\n# if errors occur, instead of asking the user for help. This option is also used\n# when generating formulas in HTML.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BATCHMODE        = NO\n\n# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the\n# index chapters (such as File Index, Compound Index, etc.) in the output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HIDE_INDICES     = NO\n\n# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source\n# code with syntax highlighting in the LaTeX output.\n#\n# Note that which sources are shown also depends on other settings such as\n# SOURCE_BROWSER.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_SOURCE_CODE      = NO\n\n# The LATEX_BIB_STYLE tag can be used to specify the style to use for the\n# bibliography, e.g. plainnat, or ieeetr. See\n# http://en.wikipedia.org/wiki/BibTeX and \\cite for more info.\n# The default value is: plain.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BIB_STYLE        = plain\n\n#---------------------------------------------------------------------------\n# Configuration options related to the RTF output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The\n# RTF output is optimized for Word 97 and may not look too pretty with other RTF\n# readers/editors.\n# The default value is: NO.\n\nGENERATE_RTF           = NO\n\n# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: rtf.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_OUTPUT             = rtf\n\n# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nCOMPACT_RTF            = NO\n\n# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will\n# contain hyperlink fields. The RTF file will contain links (just like the HTML\n# output) instead of page references. This makes the output suitable for online\n# browsing using Word or some other Word compatible readers that support those\n# fields.\n#\n# Note: WordPad (write) and others do not support links.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_HYPERLINKS         = NO\n\n# Load stylesheet definitions from file. Syntax is similar to doxygen's config\n# file, i.e. a series of assignments. You only have to provide replacements,\n# missing definitions are set to their default value.\n#\n# See also section \"Doxygen usage\" for information on how to generate the\n# default style sheet that doxygen normally uses.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_STYLESHEET_FILE    = \n\n# Set optional variables used in the generation of an RTF document. Syntax is\n# similar to doxygen's config file. A template extensions file can be generated\n# using doxygen -e rtf extensionFile.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_EXTENSIONS_FILE    = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the man page output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for\n# classes and files.\n# The default value is: NO.\n\nGENERATE_MAN           = NO\n\n# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it. A directory man3 will be created inside the directory specified by\n# MAN_OUTPUT.\n# The default directory is: man.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_OUTPUT             = man\n\n# The MAN_EXTENSION tag determines the extension that is added to the generated\n# man pages. In case the manual section does not start with a number, the number\n# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is\n# optional.\n# The default value is: .3.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_EXTENSION          = .3\n\n# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it\n# will generate one additional man file for each entity documented in the real\n# man page(s). These additional files only source the real man page, but without\n# them the man command would be unable to find the correct page.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_LINKS              = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the XML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that\n# captures the structure of the code including all documentation.\n# The default value is: NO.\n\nGENERATE_XML           = NO\n\n# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: xml.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_OUTPUT             = xml\n\n# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a\n# validating XML parser to check the syntax of the XML files.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_SCHEMA             = \n\n# The XML_DTD tag can be used to specify a XML DTD, which can be used by a\n# validating XML parser to check the syntax of the XML files.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_DTD                = \n\n# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program\n# listings (including syntax highlighting and cross-referencing information) to\n# the XML output. Note that enabling this will significantly increase the size\n# of the XML output.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_PROGRAMLISTING     = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to the DOCBOOK output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files\n# that can be used to generate PDF.\n# The default value is: NO.\n\nGENERATE_DOCBOOK       = NO\n\n# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.\n# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in\n# front of it.\n# The default directory is: docbook.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_OUTPUT         = docbook\n\n#---------------------------------------------------------------------------\n# Configuration options for the AutoGen Definitions output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen\n# Definitions (see http://autogen.sf.net) file that captures the structure of\n# the code including all documentation. Note that this feature is still\n# experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_AUTOGEN_DEF   = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the Perl module output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module\n# file that captures the structure of the code including all documentation.\n#\n# Note that this feature is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_PERLMOD       = NO\n\n# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary\n# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI\n# output from the Perl module output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_LATEX          = NO\n\n# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely\n# formatted so it can be parsed by a human reader. This is useful if you want to\n# understand what is going on. On the other hand, if this tag is set to NO the\n# size of the Perl module output will be much smaller and Perl will parse it\n# just the same.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_PRETTY         = YES\n\n# The names of the make variables in the generated doxyrules.make file are\n# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful\n# so different doxyrules.make files included by the same Makefile don't\n# overwrite each other's variables.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_MAKEVAR_PREFIX = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the preprocessor\n#---------------------------------------------------------------------------\n\n# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all\n# C-preprocessor directives found in the sources and include files.\n# The default value is: YES.\n\nENABLE_PREPROCESSING   = YES\n\n# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names\n# in the source code. If set to NO only conditional compilation will be\n# performed. Macro expansion can be done in a controlled way by setting\n# EXPAND_ONLY_PREDEF to YES.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nMACRO_EXPANSION        = NO\n\n# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then\n# the macro expansion is limited to the macros specified with the PREDEFINED and\n# EXPAND_AS_DEFINED tags.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_ONLY_PREDEF     = NO\n\n# If the SEARCH_INCLUDES tag is set to YES the includes files in the\n# INCLUDE_PATH will be searched if a #include is found.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSEARCH_INCLUDES        = YES\n\n# The INCLUDE_PATH tag can be used to specify one or more directories that\n# contain include files that are not input files but should be processed by the\n# preprocessor.\n# This tag requires that the tag SEARCH_INCLUDES is set to YES.\n\nINCLUDE_PATH           = \n\n# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\n# patterns (like *.h and *.hpp) to filter out the header-files in the\n# directories. If left blank, the patterns specified with FILE_PATTERNS will be\n# used.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nINCLUDE_FILE_PATTERNS  = \n\n# The PREDEFINED tag can be used to specify one or more macro names that are\n# defined before the preprocessor is started (similar to the -D option of e.g.\n# gcc). The argument of the tag is a list of macros of the form: name or\n# name=definition (no spaces). If the definition and the \"=\" are omitted, \"=1\"\n# is assumed. To prevent a macro definition from being undefined via #undef or\n# recursively expanded use the := operator instead of the = operator.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nPREDEFINED             = \n\n# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this\n# tag can be used to specify a list of macro names that should be expanded. The\n# macro definition that is found in the sources will be used. Use the PREDEFINED\n# tag if you want to use a different macro definition that overrules the\n# definition found in the source code.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_AS_DEFINED      = \n\n# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will\n# remove all references to function-like macros that are alone on a line, have an\n# all uppercase name, and do not end with a semicolon. Such function macros are\n# typically used for boiler-plate code, and will confuse the parser if not\n# removed.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSKIP_FUNCTION_MACROS   = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to external references\n#---------------------------------------------------------------------------\n\n# The TAGFILES tag can be used to specify one or more tag files. For each tag\n# file the location of the external documentation should be added. The format of\n# a tag file without this location is as follows:\n# TAGFILES = file1 file2 ...\n# Adding location for the tag files is done as follows:\n# TAGFILES = file1=loc1 \"file2 = loc2\" ...\n# where loc1 and loc2 can be relative or absolute paths or URLs. See the\n# section \"Linking to external documentation\" for more information about the use\n# of tag files.\n# Note: Each tag file must have an unique name (where the name does NOT include\n# the path). If a tag file is not located in the directory in which doxygen is\n# run, you must also specify the path to the tagfile here.\n\nTAGFILES               = \n\n# When a file name is specified after GENERATE_TAGFILE, doxygen will create a\n# tag file that is based on the input files it reads. See section \"Linking to\n# external documentation\" for more information about the usage of tag files.\n\nGENERATE_TAGFILE       = \n\n# If the ALLEXTERNALS tag is set to YES all external class will be listed in the\n# class index. If set to NO only the inherited external classes will be listed.\n# The default value is: NO.\n\nALLEXTERNALS           = NO\n\n# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in\n# the modules index. If set to NO, only the current project's groups will be\n# listed.\n# The default value is: YES.\n\nEXTERNAL_GROUPS        = YES\n\n# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in\n# the related pages index. If set to NO, only the current project's pages will\n# be listed.\n# The default value is: YES.\n\nEXTERNAL_PAGES         = YES\n\n# The PERL_PATH should be the absolute path and name of the perl script\n# interpreter (i.e. the result of 'which perl').\n# The default file (with absolute path) is: /usr/bin/perl.\n\nPERL_PATH              = /usr/bin/perl\n\n#---------------------------------------------------------------------------\n# Configuration options related to the dot tool\n#---------------------------------------------------------------------------\n\n# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram\n# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to\n# NO turns the diagrams off. Note that this option also works with HAVE_DOT\n# disabled, but it is recommended to install and use dot, since it yields more\n# powerful graphs.\n# The default value is: YES.\n\nCLASS_DIAGRAMS         = YES\n\n# You can define message sequence charts within doxygen comments using the \\msc\n# command. Doxygen will then run the mscgen tool (see:\n# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the\n# documentation. The MSCGEN_PATH tag allows you to specify the directory where\n# the mscgen tool resides. If left empty the tool is assumed to be found in the\n# default search path.\n\nMSCGEN_PATH            = \n\n# You can include diagrams made with dia in doxygen documentation. Doxygen will\n# then run dia to produce the diagram and insert it in the documentation. The\n# DIA_PATH tag allows you to specify the directory where the dia binary resides.\n# If left empty dia is assumed to be found in the default search path.\n\nDIA_PATH               = \n\n# If set to YES, the inheritance and collaboration graphs will hide inheritance\n# and usage relations if the target is undocumented or is not a class.\n# The default value is: YES.\n\nHIDE_UNDOC_RELATIONS   = YES\n\n# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n# available from the path. This tool is part of Graphviz (see:\n# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent\n# Bell Labs. The other options in this section have no effect if this option is\n# set to NO\n# The default value is: NO.\n\nHAVE_DOT               = NO\n\n# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed\n# to run in parallel. When set to 0 doxygen will base this on the number of\n# processors available in the system. You can set it explicitly to a value\n# larger than 0 to get control over the balance between CPU load and processing\n# speed.\n# Minimum value: 0, maximum value: 32, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_NUM_THREADS        = 0\n\n# When you want a differently looking font n the dot files that doxygen\n# generates you can specify the font name using DOT_FONTNAME. You need to make\n# sure dot is able to find the font, which can be done by putting it in a\n# standard location or by setting the DOTFONTPATH environment variable or by\n# setting DOT_FONTPATH to the directory containing the font.\n# The default value is: Helvetica.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTNAME           = FreeSans\n\n# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of\n# dot graphs.\n# Minimum value: 4, maximum value: 24, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTSIZE           = 10\n\n# By default doxygen will tell dot to use the default font as specified with\n# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set\n# the path where dot can find it using this tag.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTPATH           = \n\n# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for\n# each documented class showing the direct and indirect inheritance relations.\n# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCLASS_GRAPH            = YES\n\n# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a\n# graph for each documented class showing the direct and indirect implementation\n# dependencies (inheritance, containment, and class references variables) of the\n# class with other documented classes.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCOLLABORATION_GRAPH    = YES\n\n# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for\n# groups, showing the direct groups dependencies.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGROUP_GRAPHS           = YES\n\n# If the UML_LOOK tag is set to YES doxygen will generate inheritance and\n# collaboration diagrams in a style similar to the OMG's Unified Modeling\n# Language.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LOOK               = NO\n\n# If the UML_LOOK tag is enabled, the fields and methods are shown inside the\n# class node. If there are many fields or methods and many nodes the graph may\n# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the\n# number of items for each type to make the size more manageable. Set this to 0\n# for no limit. Note that the threshold may be exceeded by 50% before the limit\n# is enforced. So when you set the threshold to 10, up to 15 fields may appear,\n# but if the number exceeds 15, the total amount of fields shown is limited to\n# 10.\n# Minimum value: 0, maximum value: 100, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LIMIT_NUM_FIELDS   = 10\n\n# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and\n# collaboration graphs will show the relations between templates and their\n# instances.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nTEMPLATE_RELATIONS     = NO\n\n# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to\n# YES then doxygen will generate a graph for each documented file showing the\n# direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDE_GRAPH          = YES\n\n# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are\n# set to YES then doxygen will generate a graph for each documented file showing\n# the direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDED_BY_GRAPH      = YES\n\n# If the CALL_GRAPH tag is set to YES then doxygen will generate a call\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable call graphs for selected\n# functions only using the \\callgraph command.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALL_GRAPH             = NO\n\n# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable caller graphs for selected\n# functions only using the \\callergraph command.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALLER_GRAPH           = NO\n\n# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical\n# hierarchy of all classes instead of a textual one.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGRAPHICAL_HIERARCHY    = YES\n\n# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the\n# dependencies a directory has on other directories in a graphical way. The\n# dependency relations are determined by the #include relations between the\n# files in the directories.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDIRECTORY_GRAPH        = YES\n\n# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\n# generated by dot.\n# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order\n# to make the SVG files visible in IE 9+ (other browsers do not have this\n# requirement).\n# Possible values are: png, jpg, gif and svg.\n# The default value is: png.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_IMAGE_FORMAT       = png\n\n# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\n# enable generation of interactive SVG images that allow zooming and panning.\n#\n# Note that this requires a modern browser other than Internet Explorer. Tested\n# and working are Firefox, Chrome, Safari, and Opera.\n# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make\n# the SVG files visible. Older versions of IE do not have SVG support.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINTERACTIVE_SVG        = NO\n\n# The DOT_PATH tag can be used to specify the path where the dot tool can be\n# found. If left blank, it is assumed the dot tool can be found in the path.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_PATH               = \n\n# The DOTFILE_DIRS tag can be used to specify one or more directories that\n# contain dot files that are included in the documentation (see the \\dotfile\n# command).\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOTFILE_DIRS           = \n\n# The MSCFILE_DIRS tag can be used to specify one or more directories that\n# contain msc files that are included in the documentation (see the \\mscfile\n# command).\n\nMSCFILE_DIRS           = \n\n# The DIAFILE_DIRS tag can be used to specify one or more directories that\n# contain dia files that are included in the documentation (see the \\diafile\n# command).\n\nDIAFILE_DIRS           = \n\n# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes\n# that will be shown in the graph. If the number of nodes in a graph becomes\n# larger than this value, doxygen will truncate the graph, which is visualized\n# by representing a node as a red box. Note that doxygen if the number of direct\n# children of the root node in a graph is already larger than\n# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that\n# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\n# Minimum value: 0, maximum value: 10000, default value: 50.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_GRAPH_MAX_NODES    = 50\n\n# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs\n# generated by dot. A depth value of 3 means that only nodes reachable from the\n# root by following a path via at most 3 edges will be shown. Nodes that lay\n# further from the root node will be omitted. Note that setting this option to 1\n# or 2 may greatly reduce the computation time needed for large code bases. Also\n# note that the size of a graph can be further restricted by\n# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\n# Minimum value: 0, maximum value: 1000, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nMAX_DOT_GRAPH_DEPTH    = 1000\n\n# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent\n# background. This is disabled by default, because dot on Windows does not seem\n# to support this out of the box.\n#\n# Warning: Depending on the platform used, enabling this option may lead to\n# badly anti-aliased labels on the edges of a graph (i.e. they become hard to\n# read).\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_TRANSPARENT        = NO\n\n# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output\n# files in one run (i.e. multiple -o and -T options on the command line). This\n# makes dot run faster, but since only newer versions of dot (>1.8.10) support\n# this, this feature is disabled by default.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_MULTI_TARGETS      = NO\n\n# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page\n# explaining the meaning of the various boxes and arrows in the dot generated\n# graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGENERATE_LEGEND        = YES\n\n# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot\n# files that are used to generate the various graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_CLEANUP            = YES\n"
  },
  {
    "path": "src/DvisvgmSpecialHandler.cpp",
    "content": "/*************************************************************************\n** DvisvgmSpecialHandler.cpp                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstring>\n#include <utility>\n#include \"algorithm.hpp\"\n#include \"Calculator.hpp\"\n#include \"DvisvgmSpecialHandler.hpp\"\n#include \"FileFinder.hpp\"\n#include \"FileSystem.hpp\"\n#include \"GraphicsPathParser.hpp\"\n#include \"InputBuffer.hpp\"\n#include \"InputReader.hpp\"\n#include \"Length.hpp\"\n#include \"Message.hpp\"\n#include \"SpecialActions.hpp\"\n#include \"SVGTree.hpp\"\n#include \"utility.hpp\"\n#include \"XMLNode.hpp\"\n#include \"XMLString.hpp\"\n\nusing namespace std;\n\n\nvoid SVGParser::assign (SVGTree &svg, Append append, PushContext pushContext, PopContext popContext) {\n\t_svg = &svg;\n\t_append = append;\n\t_pushContext = pushContext;\n\t_popContext = popContext;\n\tsetRootElement(nullptr);\n}\n\n\nXMLElement* SVGParser::openElement (const std::string &tag) {\n\tXMLElement *elem = XMLParser::openElement(tag);\n\tif (elem->name() == \"path\" || elem->name() == \"svg:path\") {\n\t\tif (const char *d = elem->getAttributeValue(\"d\")) {\n\t\t\ttry {\n\t\t\t\t// parse and reformat path definition\n\t\t\t\tauto path = GraphicsPathParser<double>().parse(d);\n\t\t\t\tostringstream oss;\n\t\t\t\tpath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);\n\t\t\t\telem->addAttribute(\"d\", oss.str());\n\t\t\t}\n\t\t\tcatch (const GraphicsPathParserException &e) {\n\t\t\t\tthrow XMLParserException(string(\"error in path data: \")+e.what());\n\t\t\t}\n\t\t}\n\t}\n\treturn elem;\n}\n\n\nvoid SVGParser::appendNode (unique_ptr<XMLNode> node) {\n\t(_svg->*_append)(std::move(node));\n}\n\n\nXMLElement* SVGParser::finishPushContext (unique_ptr<XMLElement> elem) {\n\tunique_ptr<SVGElement> svgElement{static_cast<SVGElement*>(elem.release())};\n\tXMLElement *elemPtr = svgElement.get();\n\t(_svg->*_pushContext)(std::move(svgElement));\n\treturn elemPtr;\n}\n\n\nvoid SVGParser::finishPopContext () {\n\t(_svg->*_popContext)();\n}\n\n\nXMLElement* SVGParser::createElementPtr (std::string name) const {\n\treturn new SVGElement(std::move(name));\n}\n\n///////////////////////////////////////////////////////////////////////////\n\nDvisvgmSpecialHandler::DvisvgmSpecialHandler () : _currentMacro(_macros.end())\n{\n}\n\n\nvoid DvisvgmSpecialHandler::preprocess (const string&, istream &is, SpecialActions&) {\n\tconstexpr struct Command {\n\t\tconst char *name;\n\t\tvoid (DvisvgmSpecialHandler::*handler)(InputReader&);\n\t} commands[] = {\n\t\t{\"raw\",       &DvisvgmSpecialHandler::preprocessRaw},\n\t\t{\"rawdef\",    &DvisvgmSpecialHandler::preprocessRawDef},\n\t\t{\"rawset\",    &DvisvgmSpecialHandler::preprocessRawSet},\n\t\t{\"endrawset\", &DvisvgmSpecialHandler::preprocessEndRawSet},\n\t\t{\"rawput\",    &DvisvgmSpecialHandler::preprocessRawPut}\n\t};\n\n\tStreamInputReader ir(is);\n\tconst string cmdstr = ir.getWord();\n\tauto it = algo::find_if(commands, [&](const Command &cmd) {\n\t\treturn cmd.name == cmdstr;\n\t});\n\tif (it != end(commands)) {\n\t\tir.skipSpace();\n\t\t(this->*it->handler)(ir);\n\t}\n}\n\n\nvoid DvisvgmSpecialHandler::preprocessRawSet (InputReader &ir) {\n\t_nestingLevel++;\n\tstring id = ir.getString();\n\tif (id.empty())\n\t\tthrow SpecialException(\"definition of unnamed SVG fragment\");\n\tif (_nestingLevel > 1)\n\t\tthrow SpecialException(\"nested definition of SVG fragment '\" + id + \"'\");\n\n\t_currentMacro = _macros.find(id);\n\tif (_currentMacro != _macros.end()) {\n\t\t_currentMacro = _macros.end();\n\t\tthrow SpecialException(\"redefinition of SVG fragment '\" + id + \"'\");\n\t}\n\tpair<MacroMap::iterator, bool> state = _macros.emplace(id, StringVector());\n\t_currentMacro = state.first;\n}\n\n\nvoid DvisvgmSpecialHandler::preprocessEndRawSet (InputReader&) {\n\tif (_nestingLevel > 0 && --_nestingLevel == 0)\n\t\t_currentMacro = _macros.end();\n}\n\n\nvoid DvisvgmSpecialHandler::preprocessRaw (InputReader &ir) {\n\tif (_currentMacro == _macros.end())\n\t\treturn;\n\tstring str = ir.getLine();\n\tif (!str.empty())\n\t\t_currentMacro->second.emplace_back(\"P\"+str);\n}\n\n\nvoid DvisvgmSpecialHandler::preprocessRawDef (InputReader &ir) {\n\tif (_currentMacro == _macros.end())\n\t\treturn;\n\tstring str = ir.getLine();\n\tif (!str.empty())\n\t\t_currentMacro->second.emplace_back(\"D\"+str);\n}\n\n\nvoid DvisvgmSpecialHandler::preprocessRawPut (InputReader &ir) {\n\tif (_currentMacro != _macros.end())\n\t\tthrow SpecialException(\"dvisvgm:rawput not allowed inside rawset/endrawset\");\n}\n\n\n/** Evaluates and executes a dvisvgm special statement.\n *  @param[in] prefix special prefix read by the SpecialManager\n *  @param[in] is the special statement is read from this stream\n *  @param[in] actions object providing the actions that can be performed by the SpecialHandler */\nbool DvisvgmSpecialHandler::process (const string &prefix, istream &is, SpecialActions &actions) {\n\tconstexpr struct Command {\n\t\tconst char *name;\n\t\tvoid (DvisvgmSpecialHandler::*handler)(InputReader&, SpecialActions&);\n\t} commands[] = {\n\t\t{\"raw\",          &DvisvgmSpecialHandler::processRaw},\n\t\t{\"rawdef\",       &DvisvgmSpecialHandler::processRawDef},\n\t\t{\"rawset\",       &DvisvgmSpecialHandler::processRawSet},\n\t\t{\"endrawset\",    &DvisvgmSpecialHandler::processEndRawSet},\n\t\t{\"rawput\",       &DvisvgmSpecialHandler::processRawPut},\n\t\t{\"bbox\",         &DvisvgmSpecialHandler::processBBox},\n\t\t{\"img\",          &DvisvgmSpecialHandler::processImg},\n\t\t{\"currentcolor\", &DvisvgmSpecialHandler::processCurrentColor},\n\t\t{\"message\",      &DvisvgmSpecialHandler::processMessage}\n\t};\n\tStreamInputReader ir(is);\n\tconst string cmdstr = ir.getWord();\n\tauto it = algo::find_if(commands, [&](const Command &cmd) {\n\t\treturn cmd.name == cmdstr;\n\t});\n\tif (it != end(commands)) {\n\t\tir.skipSpace();\n\t\t(this->*it->handler)(ir, actions);\n\t}\n\treturn true;\n}\n\n\n/** Processes raw SVG fragments from the input stream. The SVG data must represent\n *  a single or multiple syntactically complete XML parts, like opening/closing tags,\n *  comments, or CDATA blocks. These must not be split and distributed over several\n *  'raw' statements. Elements can be split but element tags can't.\n *  Example: \"<g transform=\" is invalid, \"<g transform='scale(2,3)'>\" is ok. */\nvoid DvisvgmSpecialHandler::processRaw (InputReader &ir, SpecialActions &actions) {\n\tif (_nestingLevel == 0) {\n\t\tstring xml = ir.getLine();\n\t\tif (!xml.empty()) {\n\t\t\txml = actions.expandText(xml);\n\t\t\t_pageParser.parse(std::move(xml));\n\t\t}\n\t}\n}\n\n\nvoid DvisvgmSpecialHandler::processRawDef (InputReader &ir, SpecialActions &actions) {\n\tif (_nestingLevel == 0) {\n\t\tstring xml = ir.getLine();\n\t\tif (!xml.empty()) {\n\t\t\txml = actions.expandText(xml);\n\t\t\t_defsParser.parse(std::move(xml));\n\t\t}\n\t}\n}\n\n\nvoid DvisvgmSpecialHandler::processRawSet (InputReader&, SpecialActions&) {\n\t_nestingLevel++;\n}\n\n\nvoid DvisvgmSpecialHandler::processEndRawSet (InputReader&, SpecialActions&) {\n\tif (_nestingLevel > 0)\n\t\t_nestingLevel--;\n}\n\n\nvoid DvisvgmSpecialHandler::processRawPut (InputReader &ir, SpecialActions &actions) {\n\tif (_nestingLevel > 0)\n\t\treturn;\n\tstring id = ir.getString();\n\tauto it = _macros.find(id);\n\tif (it == _macros.end())\n\t\tthrow SpecialException(\"undefined SVG fragment '\" + id + \"' referenced\");\n\n\tStringVector &defvector = it->second;\n\tfor (string &defstr : defvector) {\n\t\tchar &type = defstr[0];\n\t\tstring def = defstr.substr(1);\n\t\tif ((type == 'P' || type == 'D') && !def.empty()) {\n\t\t\tdef = actions.expandText(def);\n\t\t\tif (type == 'P')\n\t\t\t\t_pageParser.parse(std::move(def));\n\t\t\telse {          // type == 'D'\n\t\t\t\t_defsParser.parse(std::move(def));\n\t\t\t\ttype = 'L';  // locked\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/** Embeds the virtual rectangle (x, y ,w , h) into the current bounding box,\n *  where (x,y) is the lower left vertex composed of the current DVI position.\n *  @param[in] w width of the rectangle in PS point units\n *  @param[in] h height of the rectangle in PS point units\n *  @param[in] d depth of the rectangle in PS point units\n *  @param[in] transform if true, apply the current transformation matrix to the rectangle\n *  @param[in] actions object providing the actions that can be performed by the SpecialHandler */\nstatic void update_bbox (Length w, Length h, Length d, bool transform, SpecialActions &actions) {\n\tdouble x = actions.getX();\n\tdouble y = actions.getY();\n\tBoundingBox bbox1(x, y, x+w.bp(), y-h.bp());\n\tBoundingBox bbox2(x, y, x+w.bp(), y+d.bp());\n\tif (transform) {\n\t\tbbox1.transform(actions.getMatrix());\n\t\tbbox2.transform(actions.getMatrix());\n\t}\n\tactions.embed(bbox1);\n\tactions.embed(bbox2);\n}\n\n\n/** Reads a length value including a trailing unit specifier and returns it. */\nstatic Length read_length (InputReader &ir) {\n\tLength length;\n\tir.skipSpace();\n\tif (!isalpha(ir.peek())) {\n\t\tdouble val = ir.getDouble();\n\t\tstring unit = isalpha(ir.peek()) ? ir.getString(2) : \"pt\";\n\t\tlength = Length(val, unit);\n\t}\n\treturn length;\n}\n\n\n/** Evaluates the special dvisvgm:bbox.\n *  variant 1: dvisvgm:bbox [r[el]] <width> <height> [<depth>] [transform]\n *  variant 2: dvisvgm:bbox a[bs] <x1> <y1> <x2> <y2> [transform]\n *  variant 3: dvisvgm:bbox f[ix] <x1> <y1> <x2> <y2> [transform]\n *  variant 4: dvisvgm:bbox n[ew] <name>\n *  variant 5: dvisvgm:bbox lock | unlock */\nvoid DvisvgmSpecialHandler::processBBox (InputReader &ir, SpecialActions &actions) {\n\tir.skipSpace();\n\tif (ir.check(\"lock\"))\n\t\tactions.bbox().lock();\n\telse if (ir.check(\"unlock\"))\n\t\tactions.bbox().unlock();\n\telse {\n\t\tint c = ir.peek();\n\t\ttry {\n\t\t\tif (!isalpha(c))\n\t\t\t\tc = 'r';   // no mode specifier => relative box parameters\n\t\t\telse {\n\t\t\t\twhile (!isspace(ir.peek()))  // skip trailing characters\n\t\t\t\t\tir.get();\n\t\t\t\tif (c == 'n') {   // \"new\": create new local bounding box\n\t\t\t\t\tir.skipSpace();\n\t\t\t\t\tstring name;\n\t\t\t\t\twhile (isalnum(ir.peek()))\n\t\t\t\t\t\tname += char(ir.get());\n\t\t\t\t\tir.skipSpace();\n\t\t\t\t\tif (!name.empty() && ir.eof())\n\t\t\t\t\t\tactions.bbox(name, true); // create new user box\n\t\t\t\t}\n\t\t\t\telse if (c == 'a' || c == 'f') {  // \"abs\" or \"fix\"\n\t\t\t\t\tLength lengths[4];\n\t\t\t\t\talgo::generate(lengths, [&ir]() {\n\t\t\t\t\t\treturn read_length(ir);\n\t\t\t\t\t});\n\t\t\t\t\tBoundingBox b(lengths[0], lengths[1], lengths[2], lengths[3]);\n\t\t\t\t\tir.skipSpace();\n\t\t\t\t\tif (ir.check(\"transform\"))\n\t\t\t\t\t\tb.transform(actions.getMatrix());\n\t\t\t\t\tif (c == 'a')\n\t\t\t\t\t\tactions.embed(b);\n\t\t\t\t\telse {\n\t\t\t\t\t\tactions.bbox() = b;\n\t\t\t\t\t\tactions.bbox().lock();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (c == 'r') {\n\t\t\t\tLength w = read_length(ir);\n\t\t\t\tLength h = read_length(ir);\n\t\t\t\tLength d = read_length(ir);\n\t\t\t\tir.skipSpace();\n\t\t\t\tupdate_bbox(w, h, d, ir.check(\"transform\"), actions);\n\t\t\t}\n\t\t}\n\t\tcatch (const UnitException &e) {\n\t\t\tthrow SpecialException(string(\"dvisvgm:bbox: \") + e.what());\n\t\t}\n\t}\n}\n\n\ninline string filename_suffix (const string &fname) {\n\tstring ret;\n\tauto pos = fname.rfind('.');\n\tif (pos != string::npos)\n\t\tret = util::tolower(fname.substr(pos+1));\n\treturn ret;\n}\n\n\nvoid DvisvgmSpecialHandler::processImg (InputReader &ir, SpecialActions &actions) {\n\ttry {\n\t\tconst Length width = read_length(ir);\n\t\tconst Length height = read_length(ir);\n\t\tconst string fname = ir.getString();\n\t\tconst string suffix = filename_suffix(fname);\n\n\t\tstring pathstr;\n\t\tif (const char *path = FileFinder::instance().lookup(fname, false))\n\t\t\tpathstr = FileSystem::ensureForwardSlashes(path);\n\t\tif ((pathstr.empty() || !FileSystem::exists(pathstr)) && FileSystem::exists(fname))\n\t\t\tpathstr = fname;\n\t\tif (pathstr.empty())\n\t\t\tMessage::wstream(true) << \"file '\" << fname << \"' not found\\n\";\n\n\t\tupdate_bbox(width, height, Length(0), true, actions);\n\t\tauto imageNode = util::make_unique<SVGElement>(\"image\");\n\t\timageNode->addAttribute(\"x\", actions.getX());\n\t\timageNode->addAttribute(\"y\", actions.getY()-height.bp());\n\t\timageNode->addAttribute(\"width\", width.bp());\n\t\timageNode->addAttribute(\"height\", height.bp());\n\n\t\tstring mimetype = util::mimetype(fname);\n\t\tif (SVGTree::EMBED_BITMAP_DATA && (mimetype == \"image/jpeg\" || mimetype == \"image/png\"))\n\t\t\timageNode->addAttribute(\"@@xlink:href\", \"data:\"+mimetype+\";base64,\"+fname);\n\t\telse {\n\t\t\tstring href = fname;\n\t\t\t// Only reference the image with an absolute path if either an absolute path was given by the user\n\t\t\t// or a given plain filename is not present in the current working directory but was found through\n\t\t\t// the FileFinder, i.e. it's usually located somewhere in the texmf tree.\n\t\t\tif (!FilePath::isAbsolute(fname) && (fname.find('/') != string::npos || FilePath(fname).exists()))\n\t\t\t\thref = FilePath(pathstr).relative(FilePath(actions.getSVGFilePath(1)));\n\t\t\timageNode->addAttribute(\"xlink:href\", href);\n\t\t}\n\t\timageNode->setTransform(actions.getMatrix());\n\t\tactions.svgTree().appendToPage(std::move(imageNode));\n\t}\n\tcatch (const UnitException &e) {\n\t\tthrow SpecialException(string(\"dvisvgm:img: \") + e.what());\n\t}\n}\n\n\nvoid DvisvgmSpecialHandler::processCurrentColor (InputReader &ir, SpecialActions &actions) {\n\tstring param = ir.getString();\n\tColor color = actions.getFillColor();\n\tif (param.empty() || param == \"on\") {\n\t\tSVGElement::CURRENTCOLOR = color;\n\t\tSVGElement::USE_CURRENTCOLOR = true;\n\t}\n\telse if (param == \"off\") {\n\t\tif (SVGElement::USE_CURRENTCOLOR) {\n\t\t\t// force a color change to get the new currentColor setting recognized\n\t\t\tactions.setFillColor(Color{uint32_t(color)+1});\n\t\t\tactions.setFillColor(color);\n\t\t\tSVGElement::USE_CURRENTCOLOR = false;\n\t\t}\n\t}\n\telse\n\t\tthrow SpecialException(\"currentcolor: unknown parameter '\"+param+\"'\");\n}\n\n\nvoid DvisvgmSpecialHandler::processMessage (InputReader &ir, SpecialActions &actions) {\n\tstring message = actions.expandText(ir.getLine());\n\tMessage::ustream() << message << \"\\n\";\n}\n\n\nvoid DvisvgmSpecialHandler::dviPreprocessingFinished () {\n\tstring id;\n\tif (_currentMacro != _macros.end())\n\t\tid = _currentMacro->first;\n\t// ensure all pattern definitions are closed after pre-processing the whole DVI file\n\t_currentMacro = _macros.end();\n\t_nestingLevel = 0;\n\tif (!id.empty())\n\t\tthrow SpecialException(\"missing dvisvgm:endrawset for SVG fragment '\" + id + \"'\");\n}\n\n\nvoid DvisvgmSpecialHandler::dviBeginPage (unsigned, SpecialActions &actions) {\n\tSVGTree &svg = actions.svgTree();\n\t_defsParser.assign(svg, &SVGTree::appendToDefs, &SVGTree::pushDefsContext, &SVGTree::popDefsContext);\n\t_pageParser.assign(svg, &SVGTree::appendToPage, &SVGTree::pushPageContext, &SVGTree::popPageContext);\n}\n\n\nvoid DvisvgmSpecialHandler::dviEndPage (unsigned, SpecialActions &actions) {\n\t_defsParser.finish();\n\t_pageParser.finish();\n\tactions.bbox().unlock();\n\tfor (auto &strvecpair : _macros) {\n\t\tStringVector &vec = strvecpair.second;\n\t\tfor (string &str : vec) {\n\t\t\t// activate locked parts of a pattern again\n\t\t\tif (str[0] == 'L')\n\t\t\t\tstr[0] = 'D';\n\t\t}\n\t}\n}\n\n\nvector<const char*> DvisvgmSpecialHandler::prefixes () const {\n\tvector<const char*> pfx {\"dvisvgm:\"};\n\treturn pfx;\n}\n"
  },
  {
    "path": "src/DvisvgmSpecialHandler.hpp",
    "content": "/*************************************************************************\n** DvisvgmSpecialHandler.hpp                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef DVISVGMSPECIALHANDLER_HPP\n#define DVISVGMSPECIALHANDLER_HPP\n\n#include <memory>\n#include <string>\n#include <unordered_map>\n#include <vector>\n#include \"SpecialHandler.hpp\"\n#include \"XMLParser.hpp\"\n\nclass InputReader;\nclass SpecialActions;\nclass SVGElement;\nclass SVGTree;\nclass XMLElement;\nclass XMLNode;\n\n#ifdef _MSC_VER\n// MSVC: Prevent aggressive optimization of pointers to member functions.\n// Instantiating class DvisvgmSpecialHandler without the following pragma\n// leads to memory corruption.\n// https://docs.microsoft.com/en-us/cpp/preprocessor/pointers-to-members\n#pragma pointers_to_members(full_generality, single_inheritance)\n#endif\n\nclass SVGParser : public XMLParser {\n\tusing Append = void (SVGTree::*)(std::unique_ptr<XMLNode> node);\n\tusing PushContext = void (SVGTree::*)(std::unique_ptr<SVGElement> elem);\n\tusing PopContext = void (SVGTree::*)();\n\n\tpublic:\n\t\tSVGParser () : XMLParser() {}\n\t\tvoid assign (SVGTree &svg, Append append, PushContext pushContext, PopContext popContext);\n\n\tprotected:\n\t\tXMLElement* openElement (const std::string &tag) override;\n\t\tvoid appendNode (std::unique_ptr<XMLNode> node) override;\n\t\tXMLElement* finishPushContext (std::unique_ptr<XMLElement> elem) override;\n\t\tvoid finishPopContext () override;\n\t\tXMLElement* createElementPtr (std::string name) const override;\n\n\tprivate:\n\t\tSVGTree *_svg=nullptr;\n\t\tAppend _append=nullptr;\n\t\tPushContext _pushContext=nullptr;\n\t\tPopContext _popContext=nullptr;\n};\n\n\nclass DvisvgmSpecialHandler : public SpecialHandler {\n\tusing StringVector = std::vector<std::string>;\n\tusing MacroMap = std::unordered_map<std::string, StringVector>;\n\n\tpublic:\n\t\tDvisvgmSpecialHandler ();\n\t\tvoid preprocess (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tbool process (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tconst char* info () const override {return \"special set for embedding raw SVG fragments\";}\n\t\tconst char* name () const override {return handlerName();}\n\t\tstatic const char* handlerName ()  {return \"dvisvgm\";}\n\t\tstd::vector<const char*> prefixes () const override;\n\n\tprotected:\n\t\tvoid preprocessRaw (InputReader &ir);\n\t\tvoid preprocessRawDef (InputReader &ir);\n\t\tvoid preprocessRawSet (InputReader &ir);\n\t\tvoid preprocessEndRawSet (InputReader &ir);\n\t\tvoid preprocessRawPut (InputReader &ir);\n\t\tvoid processRaw (InputReader &ir, SpecialActions &actions);\n\t\tvoid processRawDef (InputReader &ir, SpecialActions &actions);\n\t\tvoid processRawSet (InputReader &ir, SpecialActions &actions);\n\t\tvoid processEndRawSet (InputReader &ir, SpecialActions &actions);\n\t\tvoid processRawPut (InputReader &ir, SpecialActions &actions);\n\t\tvoid processBBox (InputReader &ir, SpecialActions &actions);\n\t\tvoid processImg (InputReader &ir, SpecialActions &actions);\n\t\tvoid processCurrentColor (InputReader &ir, SpecialActions &actions);\n\t\tvoid processMessage (InputReader &ir, SpecialActions &actions);\n\t\tvoid dviPreprocessingFinished () override;\n\t\tvoid dviBeginPage (unsigned pageno, SpecialActions &actions) override;\n\t\tvoid dviEndPage (unsigned pageno, SpecialActions &actions) override;\n\n\tprivate:\n\t\tMacroMap _macros;\n\t\tMacroMap::iterator _currentMacro;\n\t\tint _nestingLevel=0;    ///< nesting depth of rawset specials\n\t\tSVGParser _defsParser;  ///< parses XML added by 'rawdef' specials\n\t\tSVGParser _pageParser;  ///< parses XML added by 'raw' specials\n};\n\n#endif\n"
  },
  {
    "path": "src/EPSFile.cpp",
    "content": "/*************************************************************************\n** EPSFile.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include <cstring>\n#include <istream>\n#include <limits>\n#include \"EPSFile.hpp\"\n#include \"InputBuffer.hpp\"\n#include \"InputReader.hpp\"\n\nusing namespace std;\n\n\n/** Reads a little-endian 32-bit integer from the given input stream. */\nstatic uint32_t getUInt32 (istream &is) {\n\tuint32_t value=0;\n\tchar buf[4];\n\tis.read(buf, 4);\n\tfor (int i=0; i < 4; i++)\n\t\tvalue |= ((buf[i] & 255) << (8*i));\n\treturn value;\n}\n\n\nstatic size_t getline (istream &is, char *line, size_t n) {\n\tchar buf[512];\n\tis.get(buf, min(n, (size_t)512)-1);\n\tn = is.gcount();\n\tsize_t linelen=0;\n\tfor (size_t i=0; i < n; i++)\n\t\tif (isprint(buf[i]))\n\t\t\tline[linelen++] = buf[i];\n\tline[linelen] = 0;\n\tif (is.peek() == '\\n')\n\t\tis.get();\n\telse\n\t\tis.ignore(numeric_limits<size_t>::max(), '\\n');\n\treturn linelen;\n}\n\n\nEPSFile::EPSFile (const string &fname) : _ifs(fname, ios::binary) {\n\tif (_ifs) {\n\t\tif (getUInt32(_ifs) != 0xC6D3D0C5)  // no binary header present?\n\t\t\t_ifs.seekg(0);                   // go back to the first byte\n\t\telse {\n\t\t\t_offset = getUInt32(_ifs);       // stream offset where PS part of the file begins\n\t\t\t_pslength = getUInt32(_ifs);     // length of PS section in bytes\n\t\t\t_ifs.seekg(_offset);             // continue reading at the beginning of the PS section\n\t\t}\n\t\tstring str;\n\t\tstr += char(_ifs.get());\n\t\tstr += char(_ifs.get());\n\t\t_headerValid = (str == \"%!\");\n\t\t_ifs.seekg(0);\n\t}\n}\n\n\n/** Returns an input stream for the EPS file. The stream pointer is automatically moved\n *  to the beginning of the ASCII (PostScript) part of the file. */\nistream& EPSFile::istream () const {\n\t_ifs.clear();\n\t_ifs.seekg(_offset);\n\treturn _ifs;\n}\n\n\n/** Extracts the bounding box information from the DSC header/footer (if present).\n *  @return the extracted bounding box */\nBoundingBox EPSFile::bbox () const {\n\tBoundingBox box;\n\tstd::istream &is = EPSFile::istream();\n\tif (is) {\n\t\twhile (is) {\n\t\t\tchar buf[64];\n\t\t\tsize_t linelen = getline(is, buf, 64);\n\t\t\tif (strncmp(buf, \"%%BoundingBox:\", 14) == 0) {\n\t\t\t\tCharInputBuffer ib(buf, linelen);\n\t\t\t\tBufferInputReader ir(ib);\n\t\t\t\tir.skip(14);\n\t\t\t\tir.skipSpace();\n\t\t\t\tif (!ir.check(\"(atend)\", true)) {\n\t\t\t\t\tarray<int, 4> values;\n\t\t\t\t\tfor (int &v : values) {\n\t\t\t\t\t\tir.skipSpace();\n\t\t\t\t\t\tir.parseInt(v);\n\t\t\t\t\t}\n\t\t\t\t\tbox = BoundingBox(values[0], values[1], values[2], values[3]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn box;\n}\n"
  },
  {
    "path": "src/EPSFile.hpp",
    "content": "/*************************************************************************\n** EPSFile.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef EPSFILE_HPP\n#define EPSFILE_HPP\n\n#include <fstream>\n#include <istream>\n#include <string>\n#include \"BoundingBox.hpp\"\n\nclass EPSFile {\n\tpublic:\n\t\texplicit EPSFile (const std::string &fname);\n\t\tstd::istream& istream () const;\n\t\tbool hasValidHeader () const {return _headerValid;}\n\t\tBoundingBox bbox () const;\n\t\tuint32_t pslength () const {return _pslength;}\n\n\tprivate:\n\t\tmutable std::ifstream _ifs;\n\t\tbool _headerValid=false; ///< true if file has a valid header\n\t\tuint32_t _offset=0;      ///< stream offset where ASCII part of the file begins\n\t\tuint32_t _pslength=0;    ///< length of PS section (in bytes)\n};\n\n#endif\n"
  },
  {
    "path": "src/EPSToSVG.hpp",
    "content": "/*************************************************************************\n** EPSToSVG.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef EPSTOSVG_HPP\n#define EPSTOSVG_HPP\n\n#include \"EPSFile.hpp\"\n#include \"ImageToSVG.hpp\"\n\nclass PsSpecialHandler;\n\nclass EPSToSVG : public ImageToSVG {\n\tpublic:\n\t\tEPSToSVG (const std::string &fname, SVGOutputBase &out) : ImageToSVG(fname, out) {}\n\t\tbool isSinglePageFormat() const override {return true;}\n\t\tint totalPageCount() const override {return 1;}\n\n\tprotected:\n\t\tstd::string imageFormat () const override {return \"EPS\";}\n\t\tbool imageIsValid () const override {return EPSFile(filename()).hasValidHeader();}\n\t\tBoundingBox imageBBox () const override {return EPSFile(filename()).bbox();}\n\t\tstd::string psSpecialCmd () const override {return \"psfile=\";}\n};\n\n#endif\n\n"
  },
  {
    "path": "src/EllipticalArc.cpp",
    "content": "/*************************************************************************\n** EllipticalArc.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include \"EllipticalArc.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\n/** Constructs an elliptical arc from end point parameterization.\n *  @param[in] start start point of arc\n *  @param[in] rx length of semi-major axis\n *  @param[in] ry length of semi-minor axis\n *  @param[in] angle rotation of ellipse around its center (in radians)\n *  @param[in] laf if true, choose the larger arc between start and end point\n *  @param[in] sweep if true, arc is drawn in the direction of increasing angles\n *  @param[in] end end point of the arc */\nEllipticalArc::EllipticalArc (const DPair &start, double rx, double ry, double angle, bool laf, bool sweep, const DPair &end)\n\t: _rx(abs(rx)), _ry(abs(ry)), _rotationAngle(math::normalize_angle(angle, math::PI)),\n\t  _largeArc(laf), _sweepPositive(sweep), _startPoint(start), _endPoint(end)\n{\n\tif (!isStraightLine()) {\n\t\t// fix out-of-range radii according to section F.6.6.3 in\n\t\t// https://www.w3.org/TR/SVG/implnote.html#ArcCorrectionOutOfRangeRadii\n\t\tdouble c = cos(_rotationAngle);\n\t\tdouble s = sin(_rotationAngle);\n\t\tDPair p = (_startPoint-_endPoint)/2.0;\n\t\tp = DPair(c*p.x()+s*p.y(), c*p.y()-s*p.x());\n\t\tdouble lambda = (p.x()*p.x())/(_rx*_rx) + (p.y()*p.y())/(_ry*_ry);\n\t\tif (lambda > 1) {\n\t\t\tlambda = sqrt(lambda);\n\t\t\t_rx *= lambda;\n\t\t\t_ry *= lambda;\n\t\t}\n\t}\n}\n\n\n/** Constructs an elliptical arc from center parameterization\n *  @param[in] center absolute coordinates of the center of the ellipse\n *  @param[in] rx length of semi-major axis\n *  @param[in] ry length of semi-minor axis\n *  @param[in] rot rotation of ellipse around its center (in radians)\n *  @param[in] startAngle angle between major axis and vector from center to start point\n *  @param[in] deltaAngle angle between the vectors from center to start and end point, respectively */\nEllipticalArc::EllipticalArc (const DPair &center, double rx, double ry, double rot, double startAngle, double deltaAngle)\n\t: _rx(rx), _ry(ry), _rotationAngle(math::normalize_angle(rot, math::TWO_PI)),\n\t  _largeArc(abs(deltaAngle) > math::PI), _sweepPositive(deltaAngle > 0)\n{\n\t// https://www.w3.org/TR/SVG/implnote.html#ArcConversionCenterToEndpoint\n\tdouble c = cos(_rotationAngle);\n\tdouble s = sin(_rotationAngle);\n\tdouble c1 = cos(startAngle);\n\tdouble s1 = sin(startAngle);\n\tdouble c2 = cos(startAngle+deltaAngle);\n\tdouble s2 = sin(startAngle+deltaAngle);\n\t_startPoint = DPair(c*rx*c1*c - s*ry*s1, s*rx*c1 + c*ry*s1) + center;\n\t_endPoint   = DPair(c*rx*c2*c - s*ry*s2, s*rx*c2 + c*ry*s2) + center;\n}\n\n\n/** Returns the angle between (1, 0) and a given vector.\n *  The angle is normalized to the range [0, 2pi). */\nstatic inline double angle (const DPair &p) {\n\treturn math::normalize_0_2pi(atan2(p.y(), p.x()));\n}\n\n\n/** Computes the center parameterization of the arc. */\nEllipticalArc::CenterParams EllipticalArc::getCenterParams () const {\n\tEllipticalArc::CenterParams params;\n\tif (isStraightLine()) {\n\t\tparams.center = (_endPoint-_startPoint)/2.0;\n\t\tparams.startAngle = params.deltaAngle = 0;\n\t}\n\telse {\n\t\t// https://www.w3.org/TR/SVG/implnote.html#ArcConversionEndpointToCenter\n\t\tdouble c = cos(_rotationAngle);\n\t\tdouble s = sin(_rotationAngle);\n\t\tDPair p = (_startPoint-_endPoint)/2.0;\n\t\tp = DPair(c*p.x()+s*p.y(), c*p.y()-s*p.x());\n\t\tdouble rx2 = _rx*_rx, ry2 = _ry*_ry;\n\t\tdouble px2 = p.x()*p.x(), py2 = p.y()*p.y();\n\t\tdouble radicand = rx2*ry2 - rx2*py2 - ry2*px2;\n\t\tif (radicand < 0)  // should not happen if out-of-range radii were fixed correctly\n\t\t\tradicand = 0;\n\t\telse\n\t\t\tradicand /= rx2*py2 + ry2*px2;\n\t\tdouble root = sqrt(radicand) * (_largeArc == _sweepPositive ? -1 : 1);\n\t\tDPair cp(root*p.y()*_rx/_ry, -root*p.x()*_ry/_rx);\n\t\tDPair mid = (_startPoint+_endPoint)/2.0;\n\t\tparams.center = DPair(c*cp.x() - s*cp.y() + mid.x(), s*cp.x() + c*cp.y() + mid.y());\n\t\tDPair q1((p.x() - cp.x())/_rx, (p.y() - cp.y())/_ry);\n\t\tDPair q2(-(p.x() + cp.x())/_rx, -(p.y() + cp.y())/_ry);\n\t\tparams.startAngle = angle(q1);\n\t\tparams.deltaAngle = angle(q2) - params.startAngle;\n\t\tif (_sweepPositive && params.deltaAngle < 0)\n\t\t\tparams.deltaAngle += math::TWO_PI;\n\t\telse if (!_sweepPositive && params.deltaAngle > 0)\n\t\t\tparams.deltaAngle -= math::TWO_PI;\n\t}\n\treturn params;\n}\n\n\n/** Applies the affine transformation described by a given matrix to the arc. */\nvoid EllipticalArc::transform (const Matrix &matrix) {\n\tdouble c = cos(_rotationAngle);\n\tdouble s = sin(_rotationAngle);\n\tMatrix ellipse({_rx*c, -_ry*s, 0, _rx*s, _ry*c});  // E := rotate(xrot)*scale(rx, ry)\n\tellipse.lmultiply(matrix);                         // E':= M*E\n\t// Compute the singular value decomposition of the transformed ellipse shape:\n\t// E' = rotate(phi)*scale(sx, sy)*rotate(theta)\n\t// The initial, right-hand rotation can be ignored because it rotates the unit circle\n\t// around the origin, i.e. rotate(theta) maps the circle to itself.\n\t// The signs of sx and sy don't matter either. They just flip the yet unrotated\n\t// ellipse on the x- and/or y-axis. Thus, |sx| and |sy| are the new radii,\n\t// and phi the new rotation angle.\n\tauto vec = math::svd({{ellipse.get(0,0), ellipse.get(0,1)}, {ellipse.get(1,0), ellipse.get(1,1)}});\n\tif (std::abs(vec[1]-vec[2]) < 1e-7) {  // circle?\n\t\t_rx = _ry = vec[1];   // always >= 0\n\t\t_rotationAngle = 0;\n\t}\n\telse {\n\t\t_rx = vec[1];         // always >= 0\n\t\t_ry = abs(vec[2]);    // ensure >= 0\n\t\t_rotationAngle = math::normalize_angle(vec[0], math::HALF_PI);\n\t}\n\t// change drawing direction (clockwise vs. counter-clockwise) if 'matrix'\n\t// flipped the ellipse horizontally or vertically but not both\n\tif ((matrix.get(0, 0) < 0) != (matrix.get(1, 1) < 0))\n\t\t_sweepPositive = !_sweepPositive;\n\t_startPoint = matrix * _startPoint;\n\t_endPoint = matrix * _endPoint;\n}\n\n\n/** Approximates an arc of the unit circle by a single cubic Bézier curve.\n *  @param[in] phi start angle of the arc in radians\n *  @param[in] delta length of the arc */\nstatic CubicBezier approx_unit_arc (double phi, double delta) {\n\tdouble c = 0.551915024494;  // see http://spencermortensen.com/articles/bezier-circle\n\tif (abs(delta + math::HALF_PI) < 1e-7)\n\t\tc = -c;\n\telse\n\t\tc = 4.0/3*tan(delta/4);\n\tDPair p1(cos(phi), sin(phi));\n\tDPair p4(cos(phi+delta), sin(phi+delta));\n\tDPair p2(p1.x()-c*p1.y(), p1.y()+c*p1.x());\n\tDPair p3(p4.x()+c*p4.y(), p4.y()-c*p4.x());\n\treturn {p1, p2, p3, p4};\n}\n\n\n/** Approximates the arc by a sequence of cubic Bézier curves. */\nvector<CubicBezier> EllipticalArc::approximate () const {\n\tvector<CubicBezier> beziers;\n\tif (_startPoint != _endPoint) {\n\t\tif (isStraightLine()) {\n\t\t\tDPair dir = (_endPoint - _startPoint);\n\t\t\tdir /= dir.length()/3.0;\n\t\t\tbeziers.emplace_back(_startPoint, _startPoint+dir, _endPoint-dir, _endPoint);\n\t\t}\n\t\telse {\n\t\t\tCenterParams cparams = getCenterParams();\n\t\t\tint numCurves = ceil(cparams.deltaAngle/math::HALF_PI);\n\t\t\tdouble remainder = abs(fmod(cparams.deltaAngle, math::HALF_PI));\n\t\t\tif (remainder < 1e-7)\n\t\t\t\tnumCurves--;\n\t\t\telse if (math::HALF_PI-remainder < 1e-7)\n\t\t\t\tnumCurves++;\n\t\t\tif (numCurves > 0) {\n\t\t\t\tdouble c = cos(_rotationAngle);\n\t\t\t\tdouble s = sin(_rotationAngle);\n\t\t\t\tMatrix ellipse{_rx*c, -_ry*s, cparams.center.x(), _rx*s, _ry*c, cparams.center.y()};\n\t\t\t\tdouble angle = cparams.startAngle;\n\t\t\t\tdouble diff = cparams.deltaAngle/numCurves;\n\t\t\t\twhile (numCurves-- > 0) {\n\t\t\t\t\tbeziers.push_back(approx_unit_arc(angle, diff).transform(ellipse));\n\t\t\t\t\tangle += diff;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn beziers;\n}\n\n\nstatic inline bool is_angle_between (double t, double angle1, double angle2) {\n\tif (angle1 < angle2)\n\t\treturn angle1 < t && t < angle2;\n\treturn angle2 > t || t > angle1;\n}\n\n\n/** Returns the tight bounding box of the arc. */\nBoundingBox EllipticalArc::getBBox () const {\n\tBoundingBox bbox;\n\tbbox.embed(_startPoint);\n\tbbox.embed(_endPoint);\n\tif (!isStraightLine()) {\n\t\t// compute extremes of ellipse centered at the origin\n\t\tdouble c = cos(_rotationAngle);\n\t\tdouble s = sin(_rotationAngle);\n\t\tdouble tx1 = math::normalize_0_2pi(-atan2(_ry*s, _rx*c));  // position of vertical tangent, d/dt E(tx1)=(0, y)\n\t\tdouble tx2 = math::normalize_0_2pi(math::PI+tx1);          // position of second vertical tangent\n\t\tdouble ct = cos(tx1);\n\t\tdouble st = sin(tx1);\n\t\tDPair pv1(_rx*c*ct - _ry*s*st, _rx*s*ct + _ry*c*st);       // E(tx1), 1st point on ellipse with vertical tangent\n\t\tDPair pv2 = -pv1;                                          // E(tx2), 2nd point on ellipse with vertical tangent\n\n\t\tdouble ty1 = math::normalize_0_2pi(atan2(_ry*c, _rx*s));   // position of horizontal tangent, d/dt E(ty1)=(x, 0)\n\t\tdouble ty2 = math::normalize_0_2pi(math::PI+ty1);          // position of second horizontal tangent\n\t\tct = cos(ty1);\n\t\tst = sin(ty1);\n\t\tDPair ph1(_rx*c*ct - _ry*s*st, _rx*s*ct + _ry*c*st);       // E(ty1), 1st point on ellipse with horizontal tangent\n\t\tDPair ph2 = -ph1;                                          // E(ty2), 2nd point on ellipse with horizontal tangent\n\n\t\t// translate extreme points to actual coordinates\n\t\tCenterParams cparams = getCenterParams();\n\t\tpv1 += cparams.center;\n\t\tpv2 += cparams.center;\n\t\tph1 += cparams.center;\n\t\tph2 += cparams.center;\n\n\t\tdouble angle1 = cparams.startAngle;\n\t\tdouble angle2 = math::normalize_0_2pi(angle1+cparams.deltaAngle);\n\t\tif (!_sweepPositive)\n\t\t\tswap(angle1, angle2);\n\n\t\t// only consider extreme points located on the arc\n\t\tif (is_angle_between(tx1, angle1, angle2))\n\t\t\tbbox.embed(pv1);\n\t\tif (is_angle_between(tx2, angle1, angle2))\n\t\t\tbbox.embed(pv2);\n\t\tif (is_angle_between(ty1, angle1, angle2))\n\t\t\tbbox.embed(ph1);\n\t\tif (is_angle_between(ty2, angle1, angle2))\n\t\t\tbbox.embed(ph2);\n\t}\n\treturn bbox;\n}\n"
  },
  {
    "path": "src/EllipticalArc.hpp",
    "content": "/*************************************************************************\n** EllipticalArc.hpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include \"Bezier.hpp\"\n#include \"BoundingBox.hpp\"\n#include \"Matrix.hpp\"\n#include \"Pair.hpp\"\n\nclass EllipticalArc {\n\tpublic:\n\t\tstruct CenterParams {\n\t\t\tDPair center;      ///< absolute coordinates of the center point\n\t\t\tdouble startAngle; ///< angle of start point relative to semi-major axis (in radians)\n\t\t\tdouble deltaAngle; ///< difference between angles of the start and end point (>0 if sweep flag is set)\n\t\t};\n\n\tpublic:\n\t\tEllipticalArc (const DPair &start, double rx, double ry, double angle, bool laf, bool sweep, const DPair &end);\n\t\tEllipticalArc (const DPair &center, double rx, double ry, double rot, double startAngle, double deltaAngle);\n\t\tCenterParams getCenterParams () const;\n\t\tdouble rx () const {return _rx;}\n\t\tdouble ry () const {return _ry;}\n\t\tbool largeArc () const {return _largeArc;}\n\t\tbool sweepPositive () const {return _sweepPositive;}\n\t\tdouble rotationAngle () const {return _rotationAngle;}\n\t\tDPair startPoint () const {return _startPoint;}\n\t\tDPair endPoint () const {return _endPoint;}\n\t\tbool isStraightLine () const {return _rx < 1e-7 || _ry < 1e-7;}\n\t\tBoundingBox getBBox () const;\n\t\tvoid transform (const Matrix &matrix);\n\t\tstd::vector<CubicBezier> approximate () const;\n\n\tprivate:\n\t\tdouble _rx, _ry;       ///< length of semi-major and semi-minor axes\n\t\tdouble _rotationAngle; ///< rotation angle around center (in radians)\n\t\tbool _largeArc;        ///< if true, the longer arc from start to end point is chosen, else the shorter one\n\t\tbool _sweepPositive;   ///< if true, arc is drawn in direction of positive angles, else the opposite direction\n\t\tDPair _startPoint, _endPoint;  ///< absolute coordinates of start and end point\n};\n\n"
  },
  {
    "path": "src/EmSpecialHandler.cpp",
    "content": "/*************************************************************************\n** EmSpecialHandler.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <sstream>\n#include \"EmSpecialHandler.hpp\"\n#include \"InputBuffer.hpp\"\n#include \"InputReader.hpp\"\n#include \"Length.hpp\"\n#include \"SpecialActions.hpp\"\n#include \"SVGElement.hpp\"\n#include \"SVGTree.hpp\"\n\nusing namespace std;\n\n\n/** Computes the \"cut vector\" that is used to compute the line shape.\n *  Because each line has a width > 0 the actual shape of the line is a tetragon.\n *  The 4 vertices can be influenced by the cut parameter c that specifies\n *  a horizontal, vertical or orthogonal cut of a line end. Depending on c and the\n *  line's slope a cut vector v can be computed that, relatively to endpoint p, denotes\n *  the 2 vertices of that line end: v1=p+v and v2=p-v.\n *  @param[in] cuttype character identifying the cut direction ('h', 'v' or 'p')\n *  @param[in] linedir direction vector of line to be drawn\n *  @param[in] linewidth width of line to be drawn\n *  @return the \"cut vector\" */\nstatic DPair cut_vector (char cuttype, const DPair &linedir, double linewidth) {\n\tDPair cut;\n\tswitch (cuttype) {\n\t\tcase 'v':  // vertical\n\t\t\tif (linedir.x() != 0) {\n\t\t\t\tdouble slope = linedir.y()/linedir.x();\n\t\t\t\tdouble h = sqrt(linewidth*linewidth*(1+slope*slope));\n\t\t\t\tcut.y(h/2);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'h':  // horizontal\n\t\t\tif (linedir.y() != 0) {\n\t\t\t\tdouble slope = linedir.x()/linedir.y();\n\t\t\t\tdouble h = sqrt(linewidth*linewidth*(1+slope*slope));\n\t\t\t\tdouble sgn = slope < 0 ? 1.0 : -1.0;\n\t\t\t\tcut.x(h*sgn/2);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault: // c == 'p': perpendicular to the line vector\n\t\t\tif (linedir.x() != 0 && linedir.y() != 0)\n\t\t\t\treturn linedir.ortho()/linedir.length() * (linewidth/2);\n\t}\n\treturn cut;\n}\n\n\n/** Creates the SVG element that will a the line.\n * @param[in] p1 first endpoint in PS point units\n * @param[in] p2 second endpoint in PS point units\n * @param[in] c1 cut method of first endpoint ('h', 'v' or 'p')\n * @param[in] c2 cut method of second endpoint ('h', 'v' or 'p')\n * @param[in] lw line width in PS point units\n * @param[in] actions object providing the actions that can be performed by the SpecialHandler */\nstatic void create_line (const DPair &p1, const DPair &p2, char c1, char c2, double lw, SpecialActions &actions) {\n\tif (actions.outputLocked())\n\t\treturn;\n\tunique_ptr<SVGElement> node;\n\tDPair dir = p2-p1;\n\tif (dir.x() == 0 || dir.y() == 0 || (c1 == 'p' && c2 == 'p')) {\n\t\t// draw regular line\n\t\tnode = util::make_unique<SVGElement>(\"line\");\n\t\tnode->addAttribute(\"x1\", p1.x());\n\t\tnode->addAttribute(\"y1\", p1.y());\n\t\tnode->addAttribute(\"x2\", p2.x());\n\t\tnode->addAttribute(\"y2\", p2.y());\n\t\tnode->setStrokeWidth(lw);\n\t\tnode->setStrokeColor(actions.getStrokeColor());\n\t\tnode->setStrokeOpacity(actions.getOpacity());\n\n\t\t// update bounding box\n\t\tDPair cv = cut_vector('p', dir, lw);\n\t\tactions.embed(p1+cv);\n\t\tactions.embed(p1-cv);\n\t\tactions.embed(p2+cv);\n\t\tactions.embed(p2-cv);\n\t}\n\telse {\n\t\t// draw polygon\n\t\tvector<DPair> points;\n\t\tDPair cv1 = cut_vector(c1, dir, lw);\n\t\tDPair cv2 = cut_vector(c2, dir, lw);\n\t\tpoints.push_back(p1+cv1);\n\t\tpoints.push_back(p1-cv1);\n\t\tpoints.push_back(p2-cv2);\n\t\tpoints.push_back(p2+cv2);\n\n\t\tnode = util::make_unique<SVGElement>(\"polygon\");\n\t\tnode->setPoints(points);\n\t\tnode->setFillColor(actions.getFillColor());\n\t\tnode->setFillOpacity(actions.getOpacity());\n\n\t\t// update bounding box\n\t\tactions.embed(points[0]);\n\t\tactions.embed(points[1]);\n\t\tactions.embed(points[2]);\n\t\tactions.embed(points[3]);\n\t}\n\tactions.svgTree().appendToPage(std::move(node));\n}\n\n\n/** Reads a length (value + unit) and returns its value in PS points (bp).\n *  If no unit is specified, TeX points are assumed. */\nstatic double read_length (InputReader &in) {\n\tdouble val = in.getDouble();\n\tstring unitstr;\n\tif (isalpha(in.peek())) unitstr += char(in.get());\n\tif (isalpha(in.peek())) unitstr += char(in.get());\n\tLength::Unit unit = Length::Unit::PT;\n\ttry {\n\t\tunit = Length::stringToUnit(unitstr);\n\t}\n\tcatch (UnitException &) {\n\t}\n\treturn Length(val, unit).bp();\n}\n\n\nbool EmSpecialHandler::process (const string &prefix, istream &is, SpecialActions &actions) {\n\t// em:moveto => move graphic cursor to dvi position\n\t// em:lineto => draw line from graphic cursor to dvi cursor, then move graphic cursor to dvi position\n\t// em:linewidth <w> => set line width to <w>\n\t// em:point <n>[,<x>[,<y>]] => defines point <n> as (<x>,<y>); if <x> and/or <y> is missing,\n\t//                             the corresponding dvi cursor coordinate is inserted\n\t//                             <x> and <y> are lengths\n\t// em:line <n>[h|v|p], <m>[h|v|p] [,<w>] => draws line of width <w> from point #<n> to point #<m>\n\t// \tpoint number suffixes:\n\t// \t  h: cut line horizontally\n\t// \t  v: cut line vertically\n\t// \t  p: cut line orthogonally to line direction (default)\n\t//    if <w> is omitted, the global line width is used\n\t//\n\t// supported length units: pt, pc, in, bp, cm, mm, dd, cc, sp\n\t// default line width: 0.4pt\n\tstruct Command {\n\t\tconst char *name;\n\t\tvoid (EmSpecialHandler::*handler)(InputReader&, SpecialActions&);\n\t} commands[] = {\n\t\t{\"point\",     &EmSpecialHandler::point},\n\t\t{\"line\",      &EmSpecialHandler::line},\n\t\t{\"moveto\",    &EmSpecialHandler::moveto},\n\t\t{\"lineto\",    &EmSpecialHandler::lineto},\n\t\t{\"linewidth\", &EmSpecialHandler::linewidth},\n\t\t{nullptr, nullptr}\n\t};\n\n\tStreamInputReader ir(is);\n\tconst string cmdstr = ir.getWord();\n\tfor (Command *cmd=commands; cmd->name; cmd++) {\n\t\tif (cmdstr == cmd->name) {\n\t\t\t(this->*cmd->handler)(ir, actions);\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn true;\n}\n\n\n/** Handles the \"moveto\" command that sets the drawing position to the current DVI position. */\nvoid EmSpecialHandler::moveto (InputReader&, SpecialActions &actions) {\n\t_pos.x(actions.getX());\n\t_pos.y(actions.getY());\n}\n\n\n/** Handles the \"lineto\" command that sraws a straight line from the current drawing position\n *  to the current DVI position, and sets the drawing position to the DVI position afterwards. */\nvoid EmSpecialHandler::lineto (InputReader&, SpecialActions &actions) {\n\tDPair currpos(actions.getX(), actions.getY());\n\tcreate_line(_pos, currpos, 'p', 'p', _linewidth, actions);\n\t_pos = currpos;\n}\n\n\n/** Handles the \"linewidth\" command that changes the line width which affects all following\n *  drawing commands. */\nvoid EmSpecialHandler::linewidth (InputReader &ir, SpecialActions&) {\n\t_linewidth = read_length(ir);\n}\n\n\n/** Handles the \"point\" command that adds a point to the point list. */\nvoid EmSpecialHandler::point (InputReader &ir, SpecialActions &actions) {\n\tDPair pos(actions.getX(), actions.getY());\n\tint n = ir.getInt();\n\tif (ir.getPunct() == ',') {\n\t\tpos.x(ir.getDouble());\n\t\tif (ir.getPunct() == ',')\n\t\t\tpos.y(ir.getDouble());\n\t}\n\t_points[n] = pos;\n}\n\n\n/** Handles the \"line\" command that draws a straight line between two points\n *  from the point list. */\nvoid EmSpecialHandler::line (InputReader &ir, SpecialActions& actions) {\n\tint pointnum1 = ir.getInt();\n\tint cut1 = 'p';\n\tif (isalpha(ir.peek()))\n\t\tcut1 = ir.get();\n\tir.getPunct();\n\tint pointnum2 = ir.getInt();\n\tint cut2 = 'p';\n\tif (isalpha(ir.peek()))\n\t\tcut2 = ir.get();\n\tdouble linewidth = _linewidth;\n\tif (ir.getPunct() == ',')\n\t\tlinewidth = read_length(ir);\n\tauto it1=_points.find(pointnum1);\n\tauto it2=_points.find(pointnum2);\n\tif (it1 != _points.end() && it2 != _points.end())\n\t\tcreate_line(it1->second, it2->second, char(cut1), char(cut2), linewidth, actions);\n\telse {\n\t\t// Line endpoints don't necessarily have to be defined before\n\t\t// a line definition. If a point isn't defined yet, we put the line\n\t\t// in a wait list and process the lines at the end of the page.\n\t\t_lines.emplace_back(pointnum1, pointnum2, char(cut1), char(cut2), linewidth);\n\t}\n}\n\n\n/** This method is called at the end of a DVI page. Here we have to draw all pending\n *   lines that are still in the line list. All line endpoints must be defined until here. */\nvoid EmSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actions) {\n\tfor (const Line &line : _lines) {\n\t\tauto pit1=_points.find(line.p1);\n\t\tauto pit2=_points.find(line.p2);\n\t\tif (pit1 != _points.end() && pit2 != _points.end())\n\t\t\tcreate_line(pit1->second, pit2->second, line.c1, line.c2, line.width, actions);\n\t\t// all lines with still undefined points are ignored\n\t}\n\t// line and point definitions are local to a page\n\t_lines.clear();\n\t_points.clear();\n}\n\n\nvector<const char*> EmSpecialHandler::prefixes () const {\n\tvector<const char*> pfx {\"em:\"};\n\treturn pfx;\n}\n"
  },
  {
    "path": "src/EmSpecialHandler.hpp",
    "content": "/*************************************************************************\n** EmSpecialHandler.hpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef EMSPECIALHANDLER_HPP\n#define EMSPECIALHANDLER_HPP\n\n#include <unordered_map>\n#include <vector>\n#include \"Pair.hpp\"\n#include \"SpecialHandler.hpp\"\n\nclass InputReader;\nclass SpecialActions;\n\nclass EmSpecialHandler : public SpecialHandler {\n\tstruct Line {\n\t\tLine (int pp1, int pp2, char cc1, char cc2, double w) : p1(pp1), p2(pp2), c1(cc1), c2(cc2), width(w) {}\n\t\tint p1, p2;   ///< point numbers of line ends\n\t\tchar c1, c2;  ///< cut type of line ends (h, v or p)\n\t\tdouble width; ///< line width\n\t};\n\n\tpublic:\n\t\tbool process (const std::string &prefix, std::istream &in, SpecialActions &actions) override;\n\t\tconst char* info () const override {return \"line drawing statements of the emTeX special set\";}\n\t\tconst char* name () const override {return handlerName();}\n\t\tstatic const char* handlerName ()  {return \"em\";}\n\t\tstd::vector<const char*> prefixes () const override;\n\n\tprotected:\n\t\tvoid dviEndPage (unsigned pageno, SpecialActions &actions) override;\n\t\tvoid linewidth (InputReader &ir, SpecialActions &actions);\n\t\tvoid moveto (InputReader &ir, SpecialActions &actions);\n\t\tvoid lineto (InputReader &ir, SpecialActions &actions);\n\t\tvoid line (InputReader &ir, SpecialActions &actions);\n\t\tvoid point (InputReader &ir, SpecialActions &actions);\n\n\tprivate:\n\t\tstd::unordered_map<int, DPair> _points; ///< points defined by special em:point\n\t\tstd::vector<Line> _lines;       ///< list of lines with undefined end points\n\t\tdouble _linewidth=0.4*72/72.27; ///< global line width\n\t\tDPair _pos;                     ///< current position of \"graphic cursor\"\n};\n\n#endif\n"
  },
  {
    "path": "src/EncFile.cpp",
    "content": "/*************************************************************************\n** EncFile.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <fstream>\n#include \"Font.hpp\"\n#include \"EncFile.hpp\"\n#include \"InputBuffer.hpp\"\n#include \"InputReader.hpp\"\n#include \"FileFinder.hpp\"\n#include \"Message.hpp\"\n\nusing namespace std;\n\nstatic string read_entry (InputReader &in);\nstatic bool valid_name_char (int c);\n\n\nEncFile::EncFile (string encname) : _encname(std::move(encname))\n{\n\tread();\n}\n\n\nconst char* EncFile::path () const {\n\treturn FileFinder::instance().lookup(_encname+\".enc\", false);\n}\n\n\n/** Search for suitable enc-file and read its encoding information.\n *  The file contents must be a valid PostScript vector with 256 entries. */\nvoid EncFile::read () {\n\tif (const char *p = path()) {\n\t\tifstream ifs(p);\n\t\tread(ifs);\n\t}\n\telse\n\t\tMessage::wstream(true) << \"encoding file '\" << _encname << \".enc' not found\\n\";\n}\n\n\n/** Read encoding information from stream. */\nvoid EncFile::read (istream &is) {\n\tStreamInputBuffer ib(is, 256);\n\tBufferInputReader in(ib);\n\t_table.resize(256);\n\n\t// find beginning of vector\n\twhile (!in.eof()) {\n\t\tin.skipSpace();\n\t\tif (in.peek() == '%')\n\t\t\tin.skipUntil(\"\\n\");\n\t\telse\n\t\t\tif (in.get() == '[')\n\t\t\t\tbreak;\n\t}\n\n\t// read vector entries\n\tint n=0;\n\twhile (!in.eof()) {\n\t\tin.skipSpace();\n\t\tif (in.peek() == '%')\n\t\t\tin.skipUntil(\"\\n\");\n\t\telse if (in.peek() == ']') {\n\t\t\tin.get();\n\t\t\tbreak;\n\t\t}\n\t\telse {\n\t\t\tstring entry = read_entry(in);\n\t\t\tif (entry == \".notdef\")\n\t\t\t\tentry.clear();\n\t\t\tif (n < 256)\n\t\t\t\t_table[n++] = std::move(entry);\n\t\t}\n\t}\n\t// remove trailing .notdef names\n\tfor (n--; n > 0 && _table[n].empty(); n--);\n\t_table.resize(n+1);\n}\n\n\nstatic string read_entry (InputReader &in) {\n\tstring entry;\n\tbool accept_slashes=true;\n\twhile (!in.eof() && ((in.peek() == '/' && accept_slashes) || valid_name_char(in.peek()))) {\n\t\tif (in.peek() != '/')\n\t\t\taccept_slashes = false;\n\t\tentry += char(in.get());\n\t}\n\tif (entry.length() > 1) {\n\t\t// strip leading slashes\n\t\t// According to the PostScript specification, a single slash without further\n\t\t// following characters is a valid name.\n\t\tsize_t n=0;\n\t\twhile (n < entry.length() && entry[n] == '/')\n\t\t\tn++;\n\t\tentry = entry.substr(n);\n\t}\n\treturn entry;\n}\n\n\nstatic bool valid_name_char (int c) {\n\tconst char *delimiters = \"<>(){}[]/~%\";\n\treturn isprint(c) && !isspace(c) && !strchr(delimiters, c);\n}\n\n\n/** Returns an entry of the encoding table.\n * @param[in] c character code\n * @return character name assigned to character code c*/\nconst char* EncFile::charName (uint32_t c) const {\n\tif (c < _table.size())\n\t\treturn !_table[c].empty() ? _table[c].c_str() : nullptr;\n\treturn nullptr;\n}\n"
  },
  {
    "path": "src/EncFile.hpp",
    "content": "/*************************************************************************\n** EncFile.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef ENCFILE_HPP\n#define ENCFILE_HPP\n\n#include <istream>\n#include <map>\n#include <string>\n#include <vector>\n#include \"FontEncoding.hpp\"\n\n\nclass EncFile : public NamedFontEncoding {\n\tpublic:\n\t\texplicit EncFile (std::string encname);\n\t\tvoid read ();\n\t\tvoid read (std::istream &is);\n\t\tint size () const {return _table.size();}\n\t\tconst char* name () const override {return _encname.c_str();}\n\t\tconst char* charName (uint32_t c) const;\n\t\tCharacter decode (uint32_t c) const override {return Character(charName(c));}\n\t\tbool mapsToCharIndex () const override {return false;}\n\t\tconst char* path () const override;\n\n\tprivate:\n\t\tstd::string _encname;\n\t\tstd::vector<std::string> _table;\n};\n\n#endif\n"
  },
  {
    "path": "src/FileFinder.cpp",
    "content": "/*************************************************************************\n** FileFinder.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <config.h>\n#ifdef MIKTEX\n\t#include \"MiKTeXCom.hpp\"\n#else\n\t#ifdef KPSE_CXX_UNSAFE\n\textern \"C\" {\n\t#endif\n\t\t#include <kpathsea/kpathsea.h>\n\t#ifdef KPSE_CXX_UNSAFE\n\t}\n\t#endif\n#endif\n\n#include <cstdlib>\n#include <fstream>\n#include <map>\n#include <set>\n#include \"algorithm.hpp\"\n#include \"FileFinder.hpp\"\n#include \"FilePath.hpp\"\n#include \"FileSystem.hpp\"\n#include \"FontMap.hpp\"\n#include \"Message.hpp\"\n#include \"MessageException.hpp\"\n#include \"Process.hpp\"\n#include \"utility.hpp\"\n\nstd::string FileFinder::_argv0;\nstd::string FileFinder::_progname;\nstd::string FileFinder::_pathbuf;\nbool FileFinder::_enableMktex = false;\n\n\n/** Constructs a new file finder. */\nFileFinder::FileFinder () {\n\taddLookupDir(\".\");  // always lookup files in the current working directory\n#ifdef MIKTEX\n\t_miktex = util::make_unique<MiKTeXCom>();\n#else\n\tkpse_set_program_name(_argv0.c_str(), _progname.c_str());\n\t// enable tfm and mf generation (actually invoked by calls of kpse_make_tex)\n\tkpse_set_program_enabled(kpse_tfm_format, 1, kpse_src_env);\n\tkpse_set_program_enabled(kpse_mf_format, 1, kpse_src_env);\n\tkpse_make_tex_discard_errors = true;  // suppress messages from mktexFOO tools\n#endif\n}\n\n\nvoid FileFinder::init (const std::string &argv0, const std::string &progname, bool enable_mktexmf) {\n\t_argv0 = argv0;\n\t_progname = progname;\n\t_enableMktex = enable_mktexmf;\n}\n\n\nFileFinder& FileFinder::instance () {\n\tstatic FileFinder instance;\n\treturn instance;\n}\n\n\n/** Returns the version string of the underlying file searching library (kpathsea, MiKTeX) */\nstd::string FileFinder::version () const {\n#ifdef MIKTEX\n\treturn _miktex->getVersion();\n#else\n\tif (const char *v = strrchr(KPSEVERSION, ' '))\n\t\treturn (std::string(KPSEVERSION).substr(0, 9) == \"kpathsea \") ? v+1 : KPSEVERSION;\n\tif (strlen(KPSEVERSION) > 0)\n\t\treturn KPSEVERSION;\n#endif\n\treturn \"unknown\";\n}\n\n\nvoid FileFinder::addLookupDir (const std::string &path) {\n\tFilePath filepath(path);\n\t_additionalDirs.insert(filepath.absolute());\n}\n\n\n/** Determines filetype by the filename extension and calls kpse_find_file\n *  to actually look up the file.\n *  @param[in] fname name of file to look up\n *  @param[in] ftype expected file format of file fname; if 0, it's derived from the filename suffix\n *  @return file path on success, 0 otherwise */\nconst char* FileFinder::findFile (const std::string &fname, const char *ftype) const {\n\tif (fname.empty())\n\t\treturn nullptr;\n\n\t// try to lookup the file in the additionally specified directories\n\tfor (const std::string &dir : _additionalDirs) {\n\t\t_pathbuf = dir+\"/\"+fname;\n\t\tif (FileSystem::exists(_pathbuf))\n\t\t\treturn _pathbuf.c_str();\n\t}\n\tstd::string ext;\n\tif (ftype)\n\t\text = ftype;\n\telse {\n\t\tauto pos = fname.rfind('.');\n\t\tif (pos == std::string::npos)\n\t\t\treturn nullptr;  // no extension and no file type => no search\n\t\text = fname.substr(pos+1);\n\t}\n\text = util::tolower(ext);\n#ifdef _WIN32\n\tif (ext == \"dll\" || ext == \"exe\")\n\t\treturn lookupExecutable(fname);\n#ifdef MIKTEX\n\telse if (ext == \"cmap\") {\n\t\t// The MiKTeX SDK doesn't support the lookup of files without suffix (yet), thus\n\t\t// it's not possible to find cmap files which usually don't have a suffix. In order\n\t\t// to work around this, we try to lookup the files by calling kpsewhich.\n\t\tProcess process(\"kpsewhich\", \"-format=cmap \"+fname);\n\t\tprocess.run(&_pathbuf);\n\t\t_pathbuf = util::trim(_pathbuf);\n\t\treturn _pathbuf.empty() ? nullptr : _pathbuf.c_str();\n\t}\n\ttry {\n\t\tif (!ftype) // no file type given?\n\t\t\treturn _miktex->findFile(fname.c_str());  // lookup given filename\n\t\t// handle file type \"ttf\" similar to kpathsea and look for .ttf, .ttc, and .dfont\n\t\tstd::vector<std::string> suffixes{ext};\n\t\tif (ext == \"ttf\") {\n\t\t\tsuffixes.emplace_back(\"ttc\");\n\t\t\tsuffixes.emplace_back(\"dfont\");\n\t\t}\n\t\tauto it = algo::find_if(suffixes, [&](const std::string &suffix) {\n\t\t\treturn _miktex->findFile((fname+\".\"+suffix).c_str()) != nullptr;\n\t\t});\n\t\treturn it != suffixes.end() ? it->c_str() : nullptr;\n\t}\n\tcatch (const MessageException &) {\n\t\treturn nullptr;\n\t}\n#endif  // MIKTEX\n#endif  // _WIN32\n#ifndef MIKTEX\n\tstatic std::map<std::string, kpse_file_format_type> types = {\n\t\t{\"tfm\",  kpse_tfm_format},\n\t\t{\"ofm\",  kpse_ofm_format},\n\t\t{\"pfb\",  kpse_type1_format},\n\t\t{\"vf\",   kpse_vf_format},\n\t\t{\"mf\",   kpse_mf_format},\n\t\t{\"ttc\",  kpse_truetype_format},\n\t\t{\"ttf\",  kpse_truetype_format},\n\t\t{\"otf\",  kpse_opentype_format},\n\t\t{\"map\",  kpse_fontmap_format},\n\t\t{\"cmap\", kpse_cmap_format},\n\t\t{\"sty\",  kpse_tex_format},\n\t\t{\"enc\",  kpse_enc_format},\n\t\t{\"pro\",  kpse_tex_ps_header_format},\n\t\t{\"sfd\",  kpse_sfd_format},\n\t\t{\"eps\",  kpse_pict_format},\n\t\t{\"png\",  kpse_pict_format},\n\t\t{\"jpg\",  kpse_pict_format},\n\t\t{\"jpeg\", kpse_pict_format},\n\t\t{\"svg\",  kpse_pict_format},\n\t\t{\"pdf\",  kpse_tex_format},\n\t};\n\tauto it = types.find(ext);\n\tif (it == types.end())\n\t\treturn nullptr;\n\n\tif (char *path = kpse_find_file(fname.c_str(), it->second, 0)) {\n\t\t// In the current version of libkpathsea, each call of kpse_find_file produces\n\t\t// a memory leak since the path buffer is not freed. I don't think we can do\n\t\t// anything against it here...\n\t\t_pathbuf = path;\n\t\tstd::free(path);\n\t\treturn _pathbuf.c_str();\n\t}\n\treturn nullptr;\n#endif  // !MIKTEX\n}\n\n\n/** Checks whether the given file is mapped to a different name and if the\n *  file can be found under this name.\n *  @param[in] fname name of file to look up\n *  @return file path on success, 0 otherwise */\nconst char* FileFinder::findMappedFile (std::string fname) const {\n\tauto pos = fname.rfind('.');\n\tif (pos == std::string::npos)\n\t\treturn nullptr;\n\tconst std::string ext  = fname.substr(pos+1);  // file extension\n\tconst std::string base = fname.substr(0, pos);\n\tif (const FontMap::Entry *entry = FontMap::instance().lookup(base)) {\n\t\tconst char *path=nullptr;\n\t\tif (entry->fontname.find('.') != std::string::npos)  // does the mapped filename has an extension?\n\t\t\tpath = findFile(entry->fontname, nullptr);        // look for that file\n\t\telse {                             // otherwise, use extension of unmapped file\n\t\t\tfname = entry->fontname + \".\" + ext;\n\t\t\t(path = findFile(fname, nullptr)) || (path = mktex(fname));\n\t\t}\n\t\treturn path;\n\t}\n\treturn nullptr;\n}\n\n\n/** Runs external mktexFOO tool to create missing tfm or mf file.\n *  @param[in] fname name of file to build\n *  @return file path on success, 0 otherwise */\nconst char* FileFinder::mktex (const std::string &fname) const {\n\tauto pos = fname.rfind('.');\n\tif (!_enableMktex || pos == std::string::npos)\n\t\treturn nullptr;\n\n\tstd::string ext  = fname.substr(pos+1);  // file extension\n\tif (ext != \"tfm\" && ext != \"mf\")\n\t\treturn nullptr;\n\n\tconst char *path = nullptr;\n#ifdef MIKTEX\n\t// maketfm and makemf are located in miktex/bin which is in the search PATH\n\tstd::string toolname = (ext == \"tfm\" ? \"miktex-maketfm\" : \"miktex-makemf\");\n\tsystem((toolname+\".exe \"+fname).c_str());\n\tpath = findFile(fname, nullptr);\n#else\n\tkpse_file_format_type type = (ext == \"tfm\" ? kpse_tfm_format : kpse_mf_format);\n\tpath = kpse_make_tex(type, fname.c_str());\n#endif\n\treturn path;\n}\n\n\n/** Searches a file in the TeX directory tree.\n *  If the file doesn't exist, maximal two further steps are applied\n *  (if \"extended\" is true):\n *  - checks whether the filename is mapped to a different name and returns\n *    the path to that name\n *  - in case of tfm or mf files: invokes the external mktextfm/mktexmf tool\n *    to create the missing file\n *  @param[in] fname name of file to look up\n *  @param[in] ftype type/format of file to look up\n *  @param[in] extended if true, use fontmap lookup and mktexFOO calls\n *  @return path to file on success, 0 otherwise */\nconst char* FileFinder::lookup (const std::string &fname, const char *ftype, bool extended) const {\n\tconst char *path;\n\tif ((path = findFile(fname, ftype)) || (extended  && ((path = findMappedFile(fname)) || (path = mktex(fname)))))\n\t\treturn path;\n\treturn nullptr;\n}\n\n\n/** Looks up the location of an executable file.\n *  @param[in] fname name of file to look up\n *  @param[in] addSuffix if true, \".exe\" is appended to the given filename (Windows only)\n *  @return absolute path of file or nullptr if not found */\nconst char* FileFinder::lookupExecutable (const std::string &fname, bool addSuffix) const {\n#ifdef MIKTEX\n\t_pathbuf = _miktex->getBinDir() + \"/\" + fname;\n\tif (addSuffix)\n\t\t_pathbuf += \".exe\";\n\tif (FileSystem::exists(_pathbuf))\n\t\treturn _pathbuf.c_str();\n\ttry {\n\t\treturn _miktex->findFile(fname.c_str());\n\t}\n\tcatch (...) {\n\t}\n#else\n\t// lookup executables in directory where dvisvgm is located\n\tif (const char *path = kpse_var_value(\"SELFAUTOLOC\")) {\n\t\t_pathbuf = std::string(path) + \"/\" + fname;\n#ifdef _WIN32\n\t\tif (addSuffix)\n\t\t\t_pathbuf += \".exe\";\n#endif\n\t\tif (FileSystem::exists(_pathbuf))\n\t\t\treturn _pathbuf.c_str();\n\t}\n#endif  // !MIKTEX\n\treturn nullptr;\n}\n"
  },
  {
    "path": "src/FileFinder.hpp",
    "content": "/*************************************************************************\n** FileFinder.hpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FILEFINDER_HPP\n#define FILEFINDER_HPP\n\n#include <memory>\n#include <set>\n#include <string>\n\nclass MiKTeXCom;\n\nclass FileFinder {\n\tpublic:\n\t\tstatic void init (const std::string &argv0, const std::string &progname, bool enable_mktexmf);\n\t\tstatic FileFinder& instance ();\n\t\tstd::string version () const;\n\t\tvoid addLookupDir (const std::string &path);\n\t\tconst char* lookup (const std::string &fname, const char *ftype, bool extended=true) const;\n\t\tconst char* lookup (const std::string &fname, bool extended=true) const {return lookup(fname, nullptr, extended);}\n\t\tconst char* lookupExecutable (const std::string &fname, bool addSuffix=false) const;\n\n\tprotected:\n\t\tFileFinder ();\n\t\tconst char* findFile (const std::string &fname, const char *ftype) const;\n\t\tconst char* findMappedFile (std::string fname) const;\n\t\tconst char* mktex (const std::string &fname) const;\n\n\tprivate:\n\t\tstatic std::string _argv0;\n\t\tstatic std::string _progname;\n\t\tstatic std::string _pathbuf;  ///< buffer holding the path of the last search\n\t\tstatic bool _enableMktex;\n\t\tstd::set<std::string> _additionalDirs;\n#ifdef MIKTEX\n\t\tstd::unique_ptr<MiKTeXCom> _miktex;\n#endif\n};\n\n#endif\n"
  },
  {
    "path": "src/FilePath.cpp",
    "content": "/*************************************************************************\n** FilePath.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cctype>\n#include \"FilePath.hpp\"\n#include \"FileSystem.hpp\"\n#include \"MessageException.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\n/** Removes redundant slashes from a given path. */\nstatic string& single_slashes (string &str) {\n\tstring::size_type pos=0;\n\twhile ((pos = str.find(\"//\", pos)) != string::npos)\n\t\tstr.replace(pos, 2, \"/\");\n\treturn str;\n}\n\n\n#ifdef _WIN32\n/** Returns the drive letter of a given path string or 0 if there's none. */\nstatic char drive_letter (const string &path) {\n\tif (path.length() >= 2 && path[1] == ':' && isalpha(path[0]))\n\t\treturn tolower(path[0]);\n\treturn '\\0';\n}\n\n/** Removes the drive letter and following colon from a given path string if present.\n *  @param[in] path path to strip drive letter from\n *  @return drive letter or 0 if there was none */\nstatic char strip_drive_letter (string &path) {\n\tchar letter = '\\0';\n\tif (path.length() >= 2 && path[1] == ':' && isalpha(path[0])) {\n\t\tletter = path[0];\n\t\tpath.erase(0, 2);\n\t}\n\treturn tolower(letter);\n}\n#endif\n\n\nbool FilePath::Directory::operator == (const Directory &dir) const {\n#ifdef _WIN32\n\t// letter case is not significant on Windows systems\n\treturn util::tolower(_dirstr) == util::tolower(dir._dirstr);\n#else\n\treturn _dirstr == dir._dirstr;\n#endif\n}\n\n\n/** Constructs a FilePath object.\n *  @param[in] path absolute or relative path to a file or directory\n *  @param[in] type type of path (file or directory)\n *  @param[in] current_dir if 'path' is a relative path expression it will be related to 'current_dir' */\nFilePath::FilePath (const std::string &path, PathType type, const std::string &current_dir) {\n\tinit(path, type, current_dir);\n}\n\n\n/** Assigns a new path of a file or directory that already exists.\n *  Relative paths are relative to the current working directory.\n *  @param[in] path absolute or relative path to a file or directory */\nvoid FilePath::set (const string &path) {\n\tset(path, FileSystem::isDirectory(path) ? PT_DIR : PT_FILE);\n}\n\n\n/** Assigns a new path. Relative paths are relative to the current working directory.\n *  @param[in] path absolute or relative path to a file or directory\n *  @param[in] type type of path (file or directory) */\nvoid FilePath::set (const std::string &path, PathType type) {\n\tinit(path, type, \"\");\n}\n\n\n/** Assigns a new path. Relative paths are relative to the current working directory.\n *  @param[in] path absolute or relative path to a file or directory\n *  @param[in] type type of path (file or directory)\n *  @param[in] current_dir if 'path' is a relative path expression it will be related to 'current_dir' */\nvoid FilePath::set (const std::string &path, PathType type, const std::string &current_dir) {\n\tinit(path, type, current_dir);\n}\n\n\n/** Initializes a FilePath object. This method should be called by the constructors only.\n *  @param[in] path absolute or relative path to a file or directory\n *  @param[in] type type of path (file or directory)\n *  @param[in] current_dir if 'path' is a relative path expression, it will be related to 'current_dir' */\nvoid FilePath::init (string path, PathType type, string current_dir) {\n\t_dirs.clear();\n\t_fname.clear();\n\tsingle_slashes(path);\n\tsingle_slashes(current_dir);\n#ifndef _WIN32\n\tif (current_dir.empty())\n\t\tcurrent_dir = FileSystem::getcwd();\n#else\n\t_drive = strip_drive_letter(path);\n\tif (current_dir.empty() || (_drive && drive_letter(current_dir) != _drive))\n\t\tcurrent_dir = FileSystem::getcwd(_drive);\n\tif (!_drive)\n\t\t_drive = drive_letter(current_dir);\n\tstrip_drive_letter(current_dir);\n\tpath = FileSystem::ensureForwardSlashes(path);\n#endif\n\tif (type == PT_FILE) {\n\t\tauto pos = path.rfind('/');\n\t\t_fname = path.substr((pos == string::npos) ? 0 : pos+1);\n\t\t// remove filename from path\n\t\tif (pos == 0 && _fname.length() > 1)  // file in root directory?\n\t\t\tpath.erase(1);\n\t\telse if (pos != string::npos)\n\t\t\tpath.erase(pos);\n\t\telse\n\t\t\tpath.clear();\n\t}\n\tif ((path.empty() || path[0] != '/') && !current_dir.empty())\n\t\tpath.insert(0, current_dir + \"/\");\n\tstring elem;\n\tfor (char c : path) {\n\t\tif (c != '/')\n\t\t\telem += c;\n\t\telse if (!elem.empty()){\n\t\t\tadd(elem);\n\t\t\telem.clear();\n\t\t}\n\t}\n\tif (!elem.empty())\n\t\tadd(elem);\n}\n\n\n/** Adds a location step to the current path. */\nvoid FilePath::add (const string &dir) {\n\tif (dir == \"..\" && !_dirs.empty())\n\t\t_dirs.pop_back();\n\telse if (!dir.empty() && dir != \".\")\n\t\t_dirs.emplace_back(dir);\n}\n\n\n/** Returns the suffix of the filename. If FilePath represents the\n *  location of a directory (and not of a file) an empty string\n *  is returned. */\nstring FilePath::suffix () const {\n\tstring::size_type start = 0;\n\t// ignore leading dots\n\twhile (start < _fname.length() && _fname[start] == '.')\n\t\tstart++;\n\tstring sub = _fname.substr(start);\n\tauto pos = sub.rfind('.');\n\tif (pos != string::npos && pos < sub.length()-1)\n\t\treturn sub.substr(pos+1);\n\treturn \"\";\n}\n\n\n/** Changes the suffix of the filename. If FilePath represents the\n *  location of a directory (and not of a file) nothing happens. An\n *  empty new suffix leads to the removal of the current one.\n *  @param[in] newSuffix the new suffix */\nvoid FilePath::suffix (const string &newSuffix) {\n\tif (!_fname.empty()) {\n\t\tstring current_suffix = suffix();\n\t\tif (!current_suffix.empty())\n\t\t\t_fname.erase(_fname.length()-current_suffix.length()-1);\n\t\tif (!newSuffix.empty())\n\t\t\t_fname += \".\"+newSuffix;\n\t}\n}\n\n\n/** Returns the filename without suffix.\n *  Example: FilePath(\"/a/b/c.def\", true) == \"c\" */\nstring FilePath::basename () const {\n\tif (!_fname.empty()) {\n\t\tauto len = suffix().length();\n\t\tif (len > 0)\n\t\t\tlen++; // strip dot too\n\t\treturn _fname.substr(0, _fname.length()-len);\n\t}\n\treturn \"\";\n}\n\n\n/** Returns the absolute path string of this FilePath.\n *  @param[in] with_filename if false, the filename is omitted\n *  @return the absolute path string */\nstring FilePath::absolute (bool with_filename) const {\n\tstring path;\n#ifdef _WIN32\n\tif (_drive)\n\t\tpath = string(1, _drive) + \":\";\n#endif\n\tfor (const Directory &dir : _dirs)\n\t\tpath += \"/\" + string(dir);\n\tif (path.empty())\n\t\tpath = \"/\";\n\tif (with_filename && !_fname.empty())\n\t\tpath += \"/\"+_fname;\n\treturn single_slashes(path);\n}\n\n\n/** Returns a path string of this FilePath relative to reldir. If we wanted to\n *  navigate from /a/b/c/d to /a/b/e/f using the shell command \"cd\", we could do that\n *  with the relative path argument: \"cd ../../e/f\". This function returns such a relative\n *  path. Example: FilePath(\"/a/b/e/f\").relative(\"/a/b/c/d\") => \"../../e/f\".\n *  @param[in] reldir absolute path to a directory\n *  @param[in] with_filename if false, the filename is omitted\n *  @return the relative path string */\nstring FilePath::relative (string reldir, bool with_filename) const {\n#ifdef _WIN32\n\tchar reldrive = drive_letter(reldir);\n\tif (reldir.empty()) {\n\t\treldir = FileSystem::getcwd(_drive);\n\t\treldrive = drive_letter(FileSystem::getcwd());\n\t}\n\tbool isAbsolute = (reldir[0] == '/')\n\t\t|| (reldir.length() >= 3 && isalpha(reldir[0]) && reldir[1] == ':' && reldir[2] == '/');\n#else\n\tif (reldir.empty())\n\t\treldir = FileSystem::getcwd();\n\tbool isAbsolute = (reldir[0] == '/');\n#endif\n\tif (!isAbsolute)\n\t\treturn absolute();\n\tFilePath relpath(reldir, PT_DIR);\n\tstring path;\n\tauto it1 = _dirs.begin();\n\tauto it2 = relpath._dirs.begin();\n\twhile (it1 != _dirs.end() && it2 != relpath._dirs.end() && *it1 == *it2)\n\t\t++it1, ++it2;\n\tfor (; it2 != relpath._dirs.end(); ++it2)\n\t\tpath += \"../\";\n\tfor (; it1 != _dirs.end(); ++it1)\n\t\tpath += string(*it1) + \"/\";\n\tif (!path.empty() && path.back() == '/')\n\t\tpath.erase(path.length()-1, 1);  // remove trailing slash\n\tif (with_filename && !_fname.empty()) {\n\t\tif (!path.empty() && path != \"/\")\n\t\t\tpath += \"/\";\n\t\tpath += _fname;\n\t}\n\tif (path.empty())\n\t\tpath = \".\";\n#ifdef _WIN32\n\tif (relpath._drive && _drive && _drive != reldrive)\n\t\tpath.insert(0, string(1, _drive) + \":\");\n#endif\n\treturn single_slashes(path);\n}\n\n\nstring FilePath::relative (const FilePath &filepath, bool with_filename) const {\n\treturn relative(filepath.absolute(false), with_filename);\n}\n\n\n/** Return the absolute or relative path whichever is shorter.\n*  @param[in] reldir absolute path to a directory\n*  @param[in] with_filename if false, the filename is omitted */\nstring FilePath::shorterAbsoluteOrRelative (string reldir, bool with_filename) const {\n\tstring abs = absolute(with_filename);\n\tstring rel = relative(std::move(reldir), with_filename);\n\treturn abs.length() < rel.length() ? abs : rel;\n}\n\n\nbool FilePath::exists () const {\n\treturn empty() ? false : FileSystem::exists(absolute());\n}\n\n\n/** Checks if a given path is absolute or relative.\n *  @param[in] path path string to check\n *  @return true if path is absolute */\nbool FilePath::isAbsolute (string path) {\n\tpath = util::trim(path);\n#ifdef _WIN32\n\tpath = FileSystem::ensureForwardSlashes(path);\n\tif (path.length() >= 2 && path[1] == ':' && isalpha(path[0]))\n\t\tpath.erase(0, 2);  // remove drive letter and colon\n#endif\n\treturn !path.empty() && path[0] == '/';\n}\n"
  },
  {
    "path": "src/FilePath.hpp",
    "content": "/*************************************************************************\n** FilePath.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FILEPATH_HPP\n#define FILEPATH_HPP\n\n#include <string>\n#include <utility>\n#include <vector>\n\nclass FilePath {\n\tclass Directory {\n\t\tpublic:\n\t\t\texplicit Directory (std::string dir) : _dirstr(std::move(dir)) {}\n\t\t\texplicit Directory (std::string &&dir) : _dirstr(std::move(dir)) {}\n\t\t\tbool operator == (const Directory &dir) const;\n\t\t\tbool operator != (const Directory &dir) const {return !(*this == dir);}\n\t\t\texplicit operator std::string () const {return _dirstr;}\n\n\t\tprivate:\n\t\t\tstd::string _dirstr;\n\t};\n\n\tpublic:\n\t\tenum PathType {PT_DIR, PT_FILE};\n\n\tpublic:\n\t\tFilePath () =default;\n\t\texplicit FilePath (const std::string &path) {set(path);}\n\t\tFilePath (const std::string &path, PathType type) : FilePath(path, type, \"\") {}\n\t\tFilePath (const std::string &path, PathType type, const std::string &current_dir);\n\t\tvoid set (const std::string &path);\n\t\tvoid set (const std::string &path, PathType type);\n\t\tvoid set (const std::string &path, PathType type, const std::string &current_dir);\n\t\tstd::string absolute (bool with_filename=true) const;\n\t\tstd::string relative (std::string reldir=\"\", bool with_filename=true) const;\n\t\tstd::string relative (const FilePath &filepath, bool with_filename=true) const;\n\t\tstd::string shorterAbsoluteOrRelative (std::string reldir=\"\", bool with_filename=true) const;\n\t\tstd::string basename () const;\n\t\tstd::string suffix () const;\n\t\tvoid suffix (const std::string &newSuffix);\n\t\tsize_t depth () const                    {return _dirs.size();}\n\t\tbool isFile () const                     {return !_fname.empty();}\n\t\tbool empty () const                      {return _dirs.empty() && _fname.empty();}\n\t\tconst std::string& filename () const     {return _fname;}\n\t\tvoid filename (const std::string &fname) {_fname = fname;}\n\t\tbool exists () const;\n\t\tstatic bool isAbsolute (std::string path);\n\n\tprotected:\n\t\tvoid init (std::string path, PathType type, std::string current_dir);\n\t\tvoid add (const std::string &elem);\n\n\tprivate:\n\t\tstd::vector<Directory> _dirs;\n\t\tstd::string _fname;\n#ifdef _WIN32\n\t\tchar _drive=0;\n#endif\n};\n\n#endif\n"
  },
  {
    "path": "src/FileSystem.cpp",
    "content": "/*************************************************************************\n** FileSystem.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <config.h>\n#include <algorithm>\n#include <chrono>\n#include <cstdlib>\n#include <cstring>\n#include <fstream>\n#include \"FileSystem.hpp\"\n#include \"utility.hpp\"\n#include \"version.hpp\"\n#include \"XXHashFunction.hpp\"\n\n#ifdef HAVE_UNISTD_H\n#include <unistd.h>\n#endif\n\n\n#ifdef _WIN32\n\t#include <direct.h>\n\t#include \"windows.hpp\"\n\tconst char *FileSystem::DEVNULL = \"nul\";\n\tconst char FileSystem::PATHSEP = '\\\\';\n\t#define unlink _unlink\n#else\n\t#include <dirent.h>\n\t#include <pwd.h>\n\t#include <sys/stat.h>\n\t#include <sys/types.h>\n\tconst char *FileSystem::DEVNULL = \"/dev/null\";\n\tconst char FileSystem::PATHSEP = '/';\n#endif\n\n\nusing namespace std;\n\nstring FileSystem::TMPDIR;\nFileSystem::TemporaryDirectory FileSystem::_tmpdir;\n\n\n/** Private wrapper function for mkdir: creates a single folder.\n *  @param[in] dirname folder name\n *  @return true on success */\nstatic bool s_mkdir (const string &dirname) {\n\tbool success = true;\n\tif (!FileSystem::exists(dirname)) {\n#ifdef _WIN32\n\t\tsuccess = (_mkdir(dirname.c_str()) == 0);\n#else\n\t\tsuccess = (::mkdir(dirname.c_str(), 0775) == 0);\n#endif\n\t}\n\treturn success;\n}\n\n\nstatic bool inline s_rmdir (const string &dirname) {\n#ifdef _WIN32\n\treturn (_rmdir(dirname.c_str()) == 0);\n#else\n\treturn (::rmdir(dirname.c_str()) == 0);\n#endif\n}\n\n\nbool FileSystem::remove (const string &fname) {\n\treturn unlink(fname.c_str()) == 0;\n}\n\n\n/** Copies a file.\n *  @param[in] src path of file to copy\n *  @param[in] dest path of target file\n *  @param[in] remove_src remove file 'src' if true\n *  @return true on success */\nbool FileSystem::copy (const string &src, const string &dest, bool remove_src) {\n\tifstream ifs(src, ios::in|ios::binary);\n\tofstream ofs(dest, ios::out|ios::binary);\n\tif (ifs && ofs) {\n\t\tofs << ifs.rdbuf();\n\t\tif (!ifs.fail() && !ofs.fail() && remove_src) {\n\t\t\tofs.close();\n\t\t\tifs.close();\n\t\t\treturn remove(src);\n\t\t}\n\t\telse\n\t\t\treturn !remove_src;\n\t}\n\treturn false;\n}\n\n\nbool FileSystem::rename (const string &oldname, const string &newname) {\n\treturn ::rename(oldname.c_str(), newname.c_str()) == 0;\n}\n\n\nuint64_t FileSystem::filesize (const string &fname) {\n#ifdef _WIN32\n\t// unfortunately, stat doesn't work properly under Windows\n\t// so we have to use this freaky code\n\tWIN32_FILE_ATTRIBUTE_DATA attr;\n\tGetFileAttributesExA(fname.c_str(), GetFileExInfoStandard, &attr);\n\treturn (static_cast<uint64_t>(attr.nFileSizeHigh) << (8*sizeof(attr.nFileSizeLow))) | attr.nFileSizeLow;\n#else\n\tstruct stat attr;\n\treturn (stat(fname.c_str(), &attr) == 0) ? attr.st_size : 0;\n#endif\n}\n\n\nstring FileSystem::ensureForwardSlashes (string path) {\n#ifdef _WIN32\n\tstd::replace(path.begin(), path.end(), PATHSEP, '/');\n#endif\n\treturn path;\n}\n\n\nstring FileSystem::ensureSystemSlashes (string path) {\n#ifdef _WIN32\n\tstd::replace(path.begin(), path.end(), '/', PATHSEP);\n#endif\n\treturn path;\n}\n\n\n/** Returns the absolute path of the current working directory. */\nstring FileSystem::getcwd () {\n\tchar buf[1024];\n#ifdef _WIN32\n\tGetCurrentDirectoryA(1024, buf);\n\treturn ensureForwardSlashes(buf);\n#else\n\treturn ::getcwd(buf, 1024);\n#endif\n}\n\n\n#ifdef _WIN32\n/** Returns the absolute path of the current directory of a given drive.\n *  Windows keeps a current directory for every drive, i.e. when accessing a drive\n *  without specifying a path (e.g. with \"cd z:\"), the current directory of that\n *  drive is used.\n *  @param[in] drive letter of drive to get the current directory from\n *  @return absolute path of the directory */\nstring FileSystem::getcwd (char drive) {\n\tstring cwd = getcwd();\n\tif (cwd.length() > 1 && cwd[1] == ':' && tolower(cwd[0]) != tolower(drive)) {\n\t\tchdir(string(1, drive)+\":\");\n\t\tstring cwd2 = cwd;\n\t\tcwd = getcwd();\n\t\tchdir(string(1, cwd2[0])+\":\");\n\t}\n\treturn cwd;\n}\n#endif\n\n\n/** Changes the work directory.\n *  @param[in] dirname path to new work directory\n *  @return true on success */\nbool FileSystem::chdir (const std::string &dirname) {\n\tbool success = false;\n\tif (const char *cdirname = dirname.c_str()) {\n#ifdef _WIN32\n\t\tsuccess = (_chdir(cdirname) == 0);\n#else\n\t\tsuccess = (::chdir(cdirname) == 0);\n#endif\n\t}\n\treturn success;\n}\n\n\n/** Returns the user's home directory. */\nconst char* FileSystem::userdir () {\n#ifdef _WIN32\n\tconst char *drive=getenv(\"HOMEDRIVE\");\n\tconst char *path=getenv(\"HOMEPATH\");\n\tif (drive && path) {\n\t\tstatic string ret = string(drive)+path;\n\t\tif (!ret.empty())\n\t\t\treturn ret.c_str();\n\t}\n\treturn nullptr;\n#else\n\tconst char *dir=getenv(\"HOME\");\n\tif (!dir) {\n\t\tif (const char *user=getenv(\"USER\")) {\n\t\t\tif (struct passwd *pw=getpwnam(user))\n\t\t\t\tdir = pw->pw_dir;\n\t\t}\n\t}\n\treturn dir;\n#endif\n}\n\n\n/** Returns the path of the temporary folder.\n *  @param[in] inplace if true, don't create a uniquely named subfolder */\nstring FileSystem::tmpdir (bool inplace) {\n\tif (_tmpdir.path().empty()) {\n\t\tstring basedir;\n\t\tif (!TMPDIR.empty())\n\t\t\tbasedir = ensureForwardSlashes(TMPDIR);\n\t\telse {\n#ifdef _WIN32\n\t\t\tchar buf[MAX_PATH];\n\t\t\tif (GetTempPath(MAX_PATH, buf))\n\t\t\t\tbasedir = ensureForwardSlashes(buf);\n\t\t\telse\n\t\t\t\tbasedir = \".\";\n#else\n\t\t\tif (const char *path = getenv(\"TMPDIR\"))\n\t\t\t\tbasedir = path;\n\t\t\telse\n\t\t\t\tbasedir = \"/tmp\";\n#endif\n\t\t}\n\t\tif (basedir.length() > 2 && string(basedir.end()-2, basedir.end()) == \"//\") {\n\t\t\tinplace = true;\n\t\t\tbasedir.pop_back();\n\t\t}\n\t\tif (basedir.front() != '/' && basedir.back() == '/')\n\t\t\tbasedir.pop_back();\n\t\t_tmpdir = TemporaryDirectory(basedir, PROGRAM_NAME, inplace);\n\t}\n\treturn _tmpdir.path();\n}\n\n\n/** Creates a new folder relative to the current work directory. If necessary,\n *  the parent folders are also created.\n *  @param[in] dirname single folder name or path to folder\n *  @return true if folder(s) could be created */\nbool FileSystem::mkdir (const string &dirname) {\n\tbool success = false;\n\tif (const char *cdirname = dirname.c_str()) {\n\t\tsuccess = true;\n\t\tconst string dirstr = ensureForwardSlashes(util::trim(cdirname));\n\t\tfor (size_t pos=1; success && (pos = dirstr.find('/', pos)) != string::npos; pos++)\n\t\t\tsuccess &= s_mkdir(dirstr.substr(0, pos));\n\t\tsuccess &= s_mkdir(dirstr);\n\t}\n\treturn success;\n}\n\n\n/** Removes a directory and its contents.\n *  @param[in] dirname path to directory\n *  @return true on success */\nbool FileSystem::rmdir (const string &dirname) {\n\tbool ok = false;\n\tif (isDirectory(dirname)) {\n\t\tok = true;\n#ifdef _WIN32\n\t\tstring pattern = dirname + \"/*\";\n\t\tWIN32_FIND_DATA data;\n\t\tHANDLE h = FindFirstFile(pattern.c_str(), &data);\n\t\tbool ready = (h == INVALID_HANDLE_VALUE);\n\t\twhile (!ready && ok) {\n\t\t\tconst char *fname = data.cFileName;\n\t\t\tstring path = dirname + \"/\" + fname;\n\t\t\tif (isDirectory(path)) {\n\t\t\t\tif (strcmp(fname, \".\") != 0 && strcmp(fname, \"..\") != 0)\n\t\t\t\t\tok = rmdir(path) && s_rmdir(path);\n\t\t\t}\n\t\t\telse if (isFile(path))\n\t\t\t\tok = remove(path);\n\t\t\telse\n\t\t\t\tok = false;\n\t\t\tready = !FindNextFile(h, &data);\n\t\t}\n\t\tFindClose(h);\n#else\n\t\tif (DIR *dir = opendir(dirname.c_str())) {\n\t\t\tstruct dirent *ent;\n\t\t\twhile ((ent = readdir(dir)) && ok) {\n\t\t\t\tconst char *fname = ent->d_name;\n\t\t\t\tstring path = dirname + \"/\" + fname;\n\t\t\t\tif (isDirectory(path)) {\n\t\t\t\t\tif (strcmp(fname, \".\") != 0 && strcmp(fname, \"..\") != 0)\n\t\t\t\t\t\tok = rmdir(path) && s_rmdir(path);\n\t\t\t\t}\n\t\t\t\telse if (isFile(path))\n\t\t\t\t\tok = remove(path);\n\t\t\t\telse\n\t\t\t\t\tok = false;\n\t\t\t}\n\t\t\tclosedir(dir);\n\t\t}\n#endif\n\t\tok = s_rmdir(dirname);\n\t}\n\treturn ok;\n}\n\n\n/** Checks if a file or directory exits. */\nbool FileSystem::exists (const string &fname) {\n\tif (const char *cfname = fname.c_str()) {\n\n#ifdef _WIN32\n\t\treturn GetFileAttributes(cfname) != INVALID_FILE_ATTRIBUTES;\n#else\n\t\tstruct stat attr;\n\t\treturn stat(cfname, &attr) == 0;\n#endif\n\t}\n\treturn false;\n}\n\n\n/** Returns true if 'fname' references a directory. */\nbool FileSystem::isDirectory (const string &fname) {\n\tif (const char *cfname = fname.c_str()) {\n#ifdef _WIN32\n\t\tauto attr = GetFileAttributes(cfname);\n\t\treturn attr != INVALID_FILE_ATTRIBUTES && (attr & FILE_ATTRIBUTE_DIRECTORY);\n#else\n\t\tstruct stat attr;\n\t\treturn stat(cfname, &attr) == 0 && S_ISDIR(attr.st_mode);\n#endif\n\t}\n\treturn false;\n}\n\n\n/** Returns true if 'fname' references a file. */\nbool FileSystem::isFile (const string &fname) {\n\tif (const char *cfname = fname.c_str()) {\n#ifdef _WIN32\n\t\tifstream ifs(cfname);\n\t\treturn (bool)ifs;\n#else\n\t\tstruct stat attr;\n\t\treturn stat(cfname, &attr) == 0 && S_ISREG(attr.st_mode);\n#endif\n\t}\n\treturn false;\n}\n\n\nint FileSystem::collect (const std::string &dirname, vector<string> &entries) {\n\tentries.clear();\n#ifdef _WIN32\n\tstring pattern = dirname + \"/*\";\n\tWIN32_FIND_DATA data;\n\tHANDLE h = FindFirstFile(pattern.c_str(), &data);\n\tbool ready = (h == INVALID_HANDLE_VALUE);\n\twhile (!ready) {\n\t\tstring fname = data.cFileName;\n\t\tstring path = dirname+\"/\"+fname;\n\t\tstring typechar = isFile(path) ? \"f\" : isDirectory(path) ? \"d\" : \"?\";\n\t\tif (fname != \".\" && fname != \"..\")\n\t\t\tentries.emplace_back(typechar+fname);\n\t\tready = !FindNextFile(h, &data);\n\t}\n\tFindClose(h);\n#else\n\tif (DIR *dir = opendir(dirname.c_str())) {\n\t\tstruct dirent *ent;\n\t\twhile ((ent = readdir(dir))) {\n\t\t\tstring fname = ent->d_name;\n\t\t\tstring path = dirname+\"/\"+fname;\n\t\t\tstring typechar = isFile(path) ? \"f\" : isDirectory(path) ? \"d\" : \"?\";\n\t\t\tif (fname != \".\" && fname != \"..\")\n\t\t\t\tentries.emplace_back(typechar+fname);\n\t\t}\n\t\tclosedir(dir);\n\t}\n#endif\n\treturn entries.size();\n}\n\n\n/** Creates a temporary directory in a given folder or treats the given folder as temporary directory.\n *  @param[in] folder folder path in which the directory is to be created\n *  @param[in] prefix initial string of the directory name\n *  @param[in] inplace if true, 'folder' is treated as temporary directory and no subfolder is created */\nFileSystem::TemporaryDirectory::TemporaryDirectory (const std::string &folder, string prefix, bool inplace) {\n\tif (inplace) {\n\t\t_path = folder;\n\t\tif (!_path.empty() && _path.back() != '/')\n\t\t\t_path.push_back('/');\n\t}\n\telse {\n\t\tusing namespace std::chrono;\n\t\tauto now = system_clock::now().time_since_epoch();\n\t\tauto now_ms = duration_cast<milliseconds>(now).count();\n\t\tauto hash = XXH64HashFunction(to_string(now_ms)).digestValue();\n\t\tif (!prefix.empty() && prefix.back() != '-')\n\t\t\tprefix.push_back('-');\n\t\tfor (int i = 0; i < 10 && _path.empty(); i++) {\n\t\t\thash++;\n\t\t\tstringstream oss;\n\t\t\toss << folder << '/' << prefix << hex << hash;\n\t\t\tif (exists(oss.str()))\n\t\t\t\tcontinue;\n\t\t\tif (s_mkdir(oss.str()))\n\t\t\t\t_path = oss.str() + \"/\";\n\t\t\telse\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\n\nFileSystem::TemporaryDirectory::~TemporaryDirectory () {\n\tif (!_path.empty())\n\t\ts_rmdir(_path);\n}\n"
  },
  {
    "path": "src/FileSystem.hpp",
    "content": "/*************************************************************************\n** FileSystem.hpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FILESYSTEM_HPP\n#define FILESYSTEM_HPP\n\n#include <cstdint>\n#include <string>\n#include <vector>\n\nclass FileSystem {\n\tclass TemporaryDirectory {\n\t\tfriend class FileSystem;\n\t\tpublic:\n\t\t\tTemporaryDirectory (const std::string &folder, std::string prefix, bool inplace=false);\n\t\t\tTemporaryDirectory (TemporaryDirectory &&tmpdir) =default;\n\t\t\t~TemporaryDirectory ();\n\t\t\tTemporaryDirectory& operator = (TemporaryDirectory &&tmpdir) =default;\n\t\t\tconst std::string& path () const {return _path;}\n\n\t\tprotected:\n\t\t\tTemporaryDirectory () =default;\n\n\t\tprivate:\n\t\t\tstd::string _path;\n\t};\n\n\tpublic:\n\t\tstatic bool remove (const std::string &fname);\n\t\tstatic bool rename (const std::string &oldname, const std::string &newname);\n\t\tstatic bool copy (const std::string &src, const std::string &dest, bool remove_src=false);\n\t\tstatic uint64_t filesize (const std::string &fname);\n\t\tstatic std::string ensureForwardSlashes (std::string path);\n\t\tstatic std::string ensureSystemSlashes (std::string path);\n\t\tstatic std::string getcwd ();\n#ifdef _WIN32\n\t\tstatic std::string getcwd (char drive);\n#endif\n\t\tstatic std::string tmpdir (bool inplace=false);\n\t\tstatic bool chdir (const std::string &dir);\n\t\tstatic bool exists (const std::string &fname);\n\t\tstatic bool mkdir (const std::string &dirname);\n\t\tstatic bool rmdir (const std::string &dirname);\n\t\tstatic int collect (const std::string &dirname, std::vector<std::string> &entries);\n\t\tstatic bool isDirectory (const std::string &fname);\n\t\tstatic bool isFile (const std::string &fname);\n\t\tstatic const char* userdir ();\n\t\tstatic const char* DEVNULL;   ///< name of NULL device\n\t\tstatic const char PATHSEP;    ///< character used to separate folders/files in a path\n\t\tstatic std::string TMPDIR;    ///< set path to temporary folder\n\n\tprotected:\n\t\tFileSystem () =default;\n\n\tprivate:\n\t\tstatic TemporaryDirectory _tmpdir;\n};\n\n#endif\n"
  },
  {
    "path": "src/FixWord.hpp",
    "content": "/*************************************************************************\n** FixWord.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FIXWORD_HPP\n#define FIXWORD_HPP\n\n#include <cstdint>\n\nclass FixWord {\n\tpublic:\n\t\tFixWord () =default;\n\t\tFixWord (int32_t fw) : _value(fw) {}\n\t\texplicit operator double () const {return double(_value)/(1 << 20);}\n\t\tbool operator < (FixWord fw) const {return _value < fw._value;}\n\t\tbool operator == (FixWord fw) const {return _value == fw._value;}\n\n\tprivate:\n\t\tint32_t _value=0;\n};\n\n#endif\n"
  },
  {
    "path": "src/Font.cpp",
    "content": "/*************************************************************************\n** Font.cpp                                                             **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <algorithm>\n#include <cstdlib>\n#include <set>\n#include <sstream>\n#include \"CMap.hpp\"\n#include \"FileFinder.hpp\"\n#include \"FileSystem.hpp\"\n#include \"Font.hpp\"\n#include \"FontEngine.hpp\"\n#include \"Message.hpp\"\n#include \"MetafontWrapper.hpp\"\n#include \"SignalHandler.hpp\"\n#include \"Subfont.hpp\"\n#include \"Unicode.hpp\"\n#include \"utility.hpp\"\n\n\nusing namespace std;\n\n\nuint32_t Font::unicode (uint32_t c) const {\n\treturn Unicode::charToCodepoint(c);\n}\n\n\n/** Returns the encoding object of this font which is assigned in a map file.\n *  If there's no encoding assigned, the function returns 0. */\nconst FontEncoding* Font::encoding () const {\n\tif (const FontMap::Entry *entry = fontMapEntry())\n\t\treturn FontEncoding::encoding(entry->encname);\n\treturn nullptr;\n}\n\n\nconst FontMap::Entry* Font::fontMapEntry () const {\n\tstring fontname = name();\n\tauto pos = fontname.rfind('.');\n\tif (pos != string::npos)\n\t\tfontname.resize(pos); // strip extension\n\treturn FontMap::instance().lookup(fontname);\n}\n\n\n/** Compute the extents of a given glyph.\n *  @param[in] c character code of glyph\n *  @param[in] vertical true if is glyph is part of vertical aligned text\n *  @param[out] metrics the resulting extents */\nvoid Font::getGlyphMetrics (int c, bool vertical, GlyphMetrics &metrics) const {\n\tdouble s = scaleFactor();\n\tif (vertical) {  // get metrics for vertical text flow?\n\t\tif (verticalLayout()) {  // is the font designed for vertical texts?\n\t\t\tmetrics.wl = s*charDepth(c);\n\t\t\tmetrics.wr = s*charHeight(c);\n\t\t\tmetrics.h  = 0;\n\t\t\tmetrics.d  = s*charWidth(c);\n\t\t}\n\t\telse {  // rotate box by 90 degrees for alphabetic text\n\t\t\tmetrics.wl = s*charDepth(c);\n\t\t\tmetrics.wr = s*charHeight(c);\n\t\t\tmetrics.h  = 0;\n\t\t\tmetrics.d  = s*(charWidth(c)+italicCorr(c));\n\t\t}\n\t}\n\telse {\n\t\tmetrics.wl = 0;\n\t\tmetrics.wr = s*(charWidth(c)+italicCorr(c));\n\t\tmetrics.h  = s*charHeight(c);\n\t\tmetrics.d  = s*charDepth(c);\n\t}\n}\n\n\nconst char* Font::filename () const {\n\tconst char *fname = strrchr(path(), '/');\n\tif (fname)\n\t\treturn fname+1;\n\treturn path();\n}\n\n///////////////////////////////////////////////////////////////////////////////////////\n\nTFMFont::TFMFont (string name, uint32_t cs, double ds, double ss)\n\t: _fontname(std::move(name)), _checksum(cs), _dsize(ds), _ssize(ss)\n{\n}\n\n\n/** Returns a font metrics object for the current font.\n *  @throw FontException if TFM file can't be found */\nconst FontMetrics* TFMFont::getMetrics () const {\n\tif (!_metrics) {\n\t\ttry {\n\t\t\t_metrics = FontMetrics::read(_fontname);\n\t\t\tif (!_metrics) {\n\t\t\t\t_metrics = util::make_unique<NullFontMetrics>();\n\t\t\t\tMessage::wstream(true) << \"can't find \"+_fontname+\".tfm\\n\";\n\t\t\t}\n\t\t}\n\t\tcatch (FontMetricException &e) {\n\t\t\tconst char *ext = (_metrics && _metrics->isOFM()) ? \".ofm\" : \".tfm\";\n\t\t\t_metrics = util::make_unique<NullFontMetrics>();\n\t\t\tMessage::wstream(true) << e.what() << \" in \" << _fontname << ext << \"\\n\";\n\t\t}\n\t}\n\treturn _metrics.get();\n}\n\n\ndouble TFMFont::charWidth (int c) const {\n\tdouble w = getMetrics() ? getMetrics()->getCharWidth(c) : 0;\n\tif (style())\n\t\tw *= style()->extend;\n\treturn w;\n}\n\n\ndouble TFMFont::italicCorr (int c) const {\n\tdouble w = getMetrics() ? getMetrics()->getItalicCorr(c) : 0;\n\tif (style()) {\n\t\tw += abs(style()->slant*charHeight(c));  // slant := tan(phi) = dx/height\n\t\tw *= style()->extend;\n\t}\n\treturn w;\n}\n\n\ndouble TFMFont::charDepth (int c) const  {return getMetrics() ? getMetrics()->getCharDepth(c) : 0;}\ndouble TFMFont::charHeight (int c) const {return getMetrics() ? getMetrics()->getCharHeight(c) : 0;}\n\n\n/** Tests if the checksum of the font matches that of the corresponding TFM file. */\nbool TFMFont::verifyChecksums () const {\n\tif (_checksum != 0 && getMetrics() && getMetrics()->getChecksum() != 0)\n\t\treturn _checksum == getMetrics()->getChecksum();\n\treturn true;\n}\n\n//////////////////////////////////////////////////////////////////////////////\n\n// static class variables\nbool PhysicalFont::EXACT_BBOX = false;\nbool PhysicalFont::KEEP_TEMP_FILES = false;\nstring PhysicalFont::CACHE_PATH;\ndouble PhysicalFont::METAFONT_MAG = 4;\nFontCache PhysicalFont::_cache;\n\n\nunique_ptr<Font> PhysicalFont::create (const string &name, uint32_t checksum, double dsize, double ssize, PhysicalFont::Type type) {\n\treturn unique_ptr<PhysicalFontImpl>(new PhysicalFontImpl(name, 0, checksum, dsize, ssize, type));\n}\n\n\nunique_ptr<Font> PhysicalFont::create (const string &name, int fontindex, uint32_t checksum, double dsize, double ssize) {\n\treturn unique_ptr<PhysicalFontImpl>(new PhysicalFontImpl(name, fontindex, checksum, dsize, ssize, PhysicalFont::Type::TTC));\n}\n\n\nconst char* PhysicalFont::path () const {\n\tconst char *ext=nullptr;\n\tswitch (type()) {\n\t\tcase Type::OTF: ext = \"otf\"; break;\n\t\tcase Type::PFB: ext = \"pfb\"; break;\n\t\tcase Type::TTC: ext = \"ttc\"; break;\n\t\tcase Type::TTF: ext = \"ttf\"; break;\n\t\tcase Type::MF : ext = \"mf\";  break;\n\t\tdefault : ext = nullptr;\n\t}\n\tif (ext)\n\t\treturn FileFinder::instance().lookup(name()+\".\"+ext);\n\treturn FileFinder::instance().lookup(name());\n}\n\n\n/** Returns true if this font is CID-based. */\nbool PhysicalFont::isCIDFont () const {\n\tif (type() == Type::MF)\n\t\treturn false;\n\tFontEngine::instance().setFont(*this);\n\treturn FontEngine::instance().isCIDFont();\n}\n\n\n/** Retrieve the IDs of all character maps available in the font file.\n *  @param[out] charMapIDs IDs of the found character maps\n *  @return number of found character maps */\nint PhysicalFont::collectCharMapIDs (std::vector<CharMapID> &charMapIDs) const {\n\tif (type() == Type::MF)\n\t\treturn 0;\n\tFontEngine::instance().setFont(*this);\n\treturn FontEngine::instance().getCharMapIDs(charMapIDs);\n}\n\n\n/** Decodes a character code used in the DVI file to the code required to\n *  address the correct character in the font.\n *  @param[in] c DVI character to decode\n *  @return target character code or name */\nCharacter PhysicalFont::decodeChar (uint32_t c) const {\n\tif (const FontEncoding *enc = encoding())\n\t\treturn enc->decode(c);\n\treturn {Character::CHRCODE, c};\n}\n\n\n/** Returns the number of units per EM. The EM square is the virtual area a glyph is designed on.\n *  All coordinates used to specify portions of the glyph are relative to the origin (0,0) at the\n *  lower left corner of this square, while the upper right corner is located at (m,m), where m\n *  is an integer value defined with the font, and returned by this function. */\nint PhysicalFont::unitsPerEm() const {\n\tif (type() == Type::MF)\n\t\treturn 1000;\n\tFontEngine::instance().setFont(*this);\n\treturn FontEngine::instance().getUnitsPerEM();\n}\n\n\n/** Returns the average horizontal advance width in font units. */\nint PhysicalFont::hAverageAdvance () const {\n\tif (type() == Type::MF)\n\t\treturn 0;\n\tFontEngine::instance().setFont(*this);\n\treturn FontEngine::instance().getHAdvance();\n}\n\n\n/** Returns the horizontal advance width of a character in font units. */\ndouble PhysicalFont::hAdvance (int c) const {\n\tif (type() == Type::MF)\n\t\treturn unitsPerEm()*charWidth(c)/designSize();\n\tFontEngine::instance().setFont(*this);\n\tif (const FontMap::Entry *entry = fontMapEntry())\n\t\tif (Subfont *sf = entry->subfont)\n\t\t\tc = sf->decode(c);\n\treturn FontEngine::instance().getHAdvance(decodeChar(c));\n}\n\n\n/** Returns the vertical advance width of a character in font units. */\ndouble PhysicalFont::vAdvance (int c) const {\n\tif (type() == Type::MF)\n\t\treturn unitsPerEm()*charWidth(c)/designSize();\n\tFontEngine::instance().setFont(*this);\n\tif (const FontMap::Entry *entry = fontMapEntry())\n\t\tif (Subfont *sf = entry->subfont)\n\t\t\tc = sf->decode(c);\n\treturn FontEngine::instance().getVAdvance(decodeChar(c));\n}\n\n\nstring PhysicalFont::glyphName (int c) const {\n\tif (type() == Type::MF)\n\t\treturn \"\";\n\tFontEngine::instance().setFont(*this);\n\tif (const FontMap::Entry *entry = fontMapEntry())\n\t\tif (Subfont *sf = entry->subfont)\n\t\t\tc = sf->decode(c);\n\treturn FontEngine::instance().getGlyphName(decodeChar(c));\n}\n\n\ndouble PhysicalFont::scaledAscent() const {\n\treturn ascent()*scaledSize()/unitsPerEm();\n}\n\n\n/** Returns the unscaled ascender of the font in design units.\n *  Positive values denote an extension above the baseline.'*/\nint PhysicalFont::ascent () const {\n\tif (type() == Type::MF)\n\t\treturn getMetrics() ? getMetrics()->getAscent()*unitsPerEm()/getMetrics()->getQuad() : 0;\n\tFontEngine::instance().setFont(*this);\n\treturn FontEngine::instance().getAscender();\n}\n\n\n/** Returns the unscaled descender of the font in design units.\n *  Positive values denote an extension below the baseline. */\nint PhysicalFont::descent () const {\n\tif (type() == Type::MF)\n\t\treturn getMetrics() ? getMetrics()->getDescent()*unitsPerEm()/getMetrics()->getQuad() : 0;\n\tFontEngine::instance().setFont(*this);\n\treturn FontEngine::instance().getDescender();\n}\n\n\nstd::string PhysicalFont::familyName () const {\n\tif (type() == Type::MF)\n\t\treturn \"\";\n\tFontEngine::instance().setFont(*this);\n\tconst char *family = FontEngine::instance().getFamilyName();\n\treturn family ? family : \"\";\n}\n\n\nstd::string PhysicalFont::styleName () const {\n\tif (type() == Type::MF)\n\t\treturn \"\";\n\tFontEngine::instance().setFont(*this);\n\tconst char *style = FontEngine::instance().getStyleName();\n\treturn style ? style : \"\";\n}\n\n\nint PhysicalFont::charIndexByName(const string &charname) const {\n\tif (charname.empty())\n\t\treturn 0;\n\tFontEngine::instance().setFont(*this);\n\treturn FontEngine::instance().getCharIndexByGlyphName(charname.c_str());\n}\n\n\n/** Extracts the glyph outlines of a given character.\n *  @param[in]  c character code of requested glyph\n *  @param[out] glyph path segments of the glyph outline\n *  @param[in]  callback optional callback object for tracer class\n *  @return true if outline could be computed */\nbool PhysicalFont::getGlyph (int c, GraphicsPath<int32_t> &glyph, GFGlyphTracer::Callback *callback) const {\n\tif (type() == Type::MF) {\n\t\tconst Glyph *cached_glyph=nullptr;\n\t\tif (!CACHE_PATH.empty()) {\n\t\t\t_cache.write(CACHE_PATH);\n\t\t\t_cache.read(name(), CACHE_PATH);\n\t\t\tcached_glyph = _cache.getGlyph(c);\n\t\t}\n\t\tif (cached_glyph) {\n\t\t\tglyph = *cached_glyph;\n\t\t\treturn true;\n\t\t}\n\t\tstring gfname;\n\t\tif (createGF(gfname)) {\n\t\t\ttry {\n\t\t\t\tdouble ds = getMetrics() ? getMetrics()->getDesignSize() : 1;\n\t\t\t\tGFGlyphTracer tracer(gfname, unitsPerEm()/ds, callback);\n\t\t\t\ttracer.setGlyph(glyph);\n\t\t\t\ttracer.executeChar(c);\n\t\t\t\tglyph.closeOpenSubPaths();\n\t\t\t\tif (!CACHE_PATH.empty())\n\t\t\t\t\t_cache.setGlyph(c, glyph);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tcatch (GFException &) {\n\t\t\t\t// @@ print error message\n\t\t\t}\n\t\t}\n\t}\n\telse { // vector fonts (OTF, PFB, TTF, TTC)\n\t\tbool ok=true;\n\t\tFontEngine::instance().setFont(*this);\n\t\tif (const FontMap::Entry *entry = fontMapEntry())\n\t\t\tif (Subfont *sf = entry->subfont)\n\t\t\t\tc = sf->decode(c);\n\t\tok = FontEngine::instance().traceOutline(decodeChar(c), glyph, false);\n\t\tglyph.closeOpenSubPaths();\n\t\treturn ok;\n\t}\n\treturn false;\n}\n\n\n/** Creates a GF file for this font object.\n *  @param[out] gfname name of the generated GF font file\n *  @return true on success */\nbool PhysicalFont::createGF (string &gfname) const {\n\tstatic set<string> failed_fonts;\n\tif (failed_fonts.find(name()) == failed_fonts.end()) {\n\t\tSignalHandler::instance().check();\n\t\tgfname = FileSystem::tmpdir()+name()+\".gf\";\n\t\tMetafontWrapper mf(name(), FileSystem::tmpdir());\n\t\tbool ok = mf.make(\"ljfour\", METAFONT_MAG); // call Metafont if necessary\n\t\tif (ok && mf.success() && getMetrics())\n\t\t\treturn true;\n\t\t// report failure only once\n\t\tfailed_fonts.insert(name());\n\t\tMessage::wstream(true) << \"failed to create \" << name() << \".gf\\n\";\n\t}\n\treturn false;\n}\n\n\n/** Traces all glyphs of the current font and stores them in the cache. If caching is disabled, nothing happens.\n *  @param[in] includeCached if true, glyphs already cached are traced again\n *  @param[in] cb optional callback methods called by the tracer\n *  @return number of glyphs traced */\nint PhysicalFont::traceAllGlyphs (bool includeCached, GFGlyphTracer::Callback *cb) const {\n\tint count = 0;\n\tif (type() == Type::MF && !CACHE_PATH.empty()) {\n\t\tif (const FontMetrics *metrics = getMetrics()) {\n\t\t\tstring gfname;\n\t\t\tif (createGF(gfname)) {\n\t\t\t\t_cache.read(name(), CACHE_PATH);\n\t\t\t\tdouble ds = getMetrics() ? getMetrics()->getDesignSize() : 1;\n\t\t\t\tGFGlyphTracer tracer(gfname, unitsPerEm()/ds, cb);\n\t\t\t\tGlyph glyph;\n\t\t\t\ttracer.setGlyph(glyph);\n\t\t\t\tint fchar = metrics->firstChar();\n\t\t\t\tint lchar = metrics->lastChar();\n\t\t\t\tfor (int i=fchar; i <= lchar; i++) {\n\t\t\t\t\tif (includeCached || !_cache.getGlyph(i)) {\n\t\t\t\t\t\tglyph.clear();\n\t\t\t\t\t\ttracer.executeChar(i);\n\t\t\t\t\t\tglyph.closeOpenSubPaths();\n\t\t\t\t\t\t_cache.setGlyph(i, glyph);\n\t\t\t\t\t\t++count;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_cache.write(CACHE_PATH);\n\t\t\t}\n\t\t}\n\t}\n\treturn count;\n}\n\n\n/** Computes the exact bounding box of a glyph.\n *  @param[in]  c character code of the glyph\n *  @param[out] bbox the computed bounding box\n *  @param[in]  cb optional callback object forwarded to the tracer\n *  @return true if the box could be computed successfully */\nbool PhysicalFont::getExactGlyphBox (int c, BoundingBox& bbox, GFGlyphTracer::Callback* cb) const {\n\tGlyph glyph;\n\tif (getGlyph(c, glyph, cb)) {\n\t\tbbox = glyph.computeBBox();\n\t\tdouble s = scaledSize()/unitsPerEm();\n\t\tbbox.scale(s, s);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n\nbool PhysicalFont::getExactGlyphBox (int c, GlyphMetrics &metrics, bool vertical, GFGlyphTracer::Callback *cb) const {\n\tBoundingBox charbox;\n\tif (!getExactGlyphBox(c, charbox, cb))\n\t\treturn false;\n\tmetrics.wl = -charbox.minX();\n\tmetrics.wr = charbox.maxX();\n\tmetrics.h = charbox.maxY();\n\tmetrics.d = -charbox.minY();\n\tif (vertical) {  // vertical text orientation\n\t\tif (verticalLayout()) {  // font designed for vertical layout?\n\t\t\tdouble wl = max(0.0, metrics.wl);\n\t\t\tdouble wr = max(0.0, metrics.wr);\n\t\t\tdouble h = max(0.0, metrics.h);\n\t\t\tmetrics.wl = metrics.wr = (wl+wr)/2;\n\t\t\tmetrics.d += h;\n\t\t\tmetrics.h = 0;\n\t\t}\n\t\telse {\n\t\t\tdouble depth = metrics.d;\n\t\t\tmetrics.d = metrics.wr;\n\t\t\tmetrics.wr = metrics.h;\n\t\t\tmetrics.h = metrics.wl;\n\t\t\tmetrics.wl = depth;\n\t\t}\n\t}\n\treturn true;\n}\n\n\nunique_ptr<Font> VirtualFont::create (const string &name, uint32_t checksum, double dsize, double ssize) {\n\treturn unique_ptr<VirtualFontImpl>(new VirtualFontImpl(name, checksum, dsize, ssize));\n}\n\n\n//////////////////////////////////////////////////////////////////////////////\n\n\nPhysicalFontImpl::PhysicalFontImpl (const string &name, int fontindex, uint32_t cs, double ds, double ss, PhysicalFont::Type type)\n\t: TFMFont(name, cs, ds, ss),\n\t_filetype(type), _fontIndex(fontindex), _encodingPair(Font::encoding())\n{\n}\n\n\nPhysicalFontImpl::~PhysicalFontImpl () {\n\tif (!CACHE_PATH.empty())\n\t\t_cache.write(CACHE_PATH);\n\tif (!KEEP_TEMP_FILES)\n\t\ttidy();\n}\n\n\nconst FontEncoding* PhysicalFontImpl::encoding () const {\n\tif (!_encodingPair.enc1())\n\t\treturn nullptr;\n\treturn &_encodingPair;\n}\n\n\nbool PhysicalFontImpl::findAndAssignBaseFontMap () {\n\tconst FontEncoding *enc = encoding();\n\tif (enc && !enc->mapsToUnicode() && enc->mapsToCharIndex()) {\n\t\t// try to find a base font map that maps from character indexes to a suitable\n\t\t// target encoding supported by the font file\n\t\tif (const FontEncoding *bfmap = enc->findCompatibleBaseFontMap(this, _charmapID))\n\t\t\t_encodingPair.assign(bfmap);\n\t\telse\n\t\t\treturn false;\n\t}\n\telse if (type() != Type::MF) {\n\t\tFontEngine::instance().setFont(*this);\n\t\t_localCharMap = FontEngine::instance().createCustomToUnicodeMap();\n\t\tif (_localCharMap)\n\t\t\t_charmapID = FontEngine::instance().setCustomCharMap();\n\t\telse\n\t\t\t_charmapID = FontEngine::instance().setUnicodeCharMap();\n\t}\n\treturn true;\n}\n\n\n/** Returns the Unicode point for a given DVI character. */\nuint32_t PhysicalFontImpl::unicode (uint32_t c) const {\n\tif (type() == Type::MF)\n\t\treturn Font::unicode(c);\n\tCharacter chr = decodeChar(c);\n\tif (_localCharMap) {\n\t\tif (uint32_t mapped_char = _localCharMap->valueAt(chr.number()))\n\t\t\treturn mapped_char;\n\t}\n\tif (type() == Type::PFB) {\n\t\t// try to get the Unicode point from the character name\n\t\tstring glyphname = glyphName(c);\n\t\tuint32_t codepoint;\n\t\tif (!glyphname.empty() && (codepoint = Unicode::aglNameToCodepoint(glyphname)) != 0)\n\t\t\treturn codepoint;\n\t\tif (c <= 0x1900)  // does character code c fit into Private Use Zone U+E000?\n\t\t\treturn 0xe000+c;\n//\t\tMessage::wstream() << \"can't properly map PS character '\" << glyphname << \"' (0x\" << hex << c << \") to Unicode\\n\";\n\t\t// If we get here, there is no easy mapping. As for now, we use the character code as Unicode point.\n\t\t// Although quite unlikely, it might collide with properly mapped characters.\n\t\treturn Unicode::charToCodepoint(c);\n\t}\n\tif (chr.type() == Character::NAME || chr.number() == 0)\n\t\treturn Unicode::charToCodepoint(chr.number());\n\n\t// No Unicode equivalent found in the font file.\n\t// Now we should look for a smart alternative but at the moment\n\t// it's sufficient to simply choose a valid unused codepoint.\n\treturn Unicode::charToCodepoint(chr.number());\n}\n\n\nconst FontStyle* PhysicalFontImpl::style () const {\n\tif (auto entry = fontMapEntry())\n\t\treturn &entry->style;\n\treturn nullptr;\n}\n\n\n/** Delete all temporary font files created by Metafont. */\nvoid PhysicalFontImpl::tidy () const {\n\tif (type() == Type::MF) {\n\t\tstring fname = FileSystem::tmpdir()+name();\n\t\tfor (const char *ext : {\"gf\", \"tfm\", \"log\"}) {\n\t\t\tif (FileSystem::exists(fname+\".\"+ext))\n\t\t\t\tFileSystem::remove(fname+\".\"+ext);\n\t\t}\n\t}\n}\n\n//////////////////////////////////////////////////////////////////////////////\n\nstring NativeFont::uniqueName (const string &path, const FontStyle &style) {\n\tstatic unordered_map<string, int> ids;\n\tostringstream oss;\n\toss << path << \"b\" << style.bold << \"e\" << style.extend << \"s\" << style.slant;\n\tauto it = ids.find(oss.str());\n\tint id = ids.size();\n\tif (it == ids.end())\n\t\tids[oss.str()] = id;\n\telse\n\t\tid = it->second;\n\toss.str(\"\");\n\toss << \"nf\" << id;\n\treturn oss.str();\n}\n\n\nstring NativeFont::name () const {\n\treturn uniqueName(path(), _style);\n}\n\n\nPhysicalFont::Type NativeFont::type () const {\n\tif (const char *filepath = path()) {\n\t\tif (const char *p =strrchr(filepath, '.')) {\n\t\t\tstring ext = p+1;\n\t\t\tif (ext == \"otf\")\n\t\t\t\treturn PhysicalFont::Type::OTF;\n\t\t\tif (ext == \"ttf\")\n\t\t\t\treturn PhysicalFont::Type::TTF;\n\t\t\tif (ext == \"pfb\" || ext == \"pfa\")\n\t\t\t\treturn PhysicalFont::Type::PFB;\n\t\t}\n\t}\n\treturn PhysicalFont::Type::UNKNOWN;\n}\n\n\ndouble NativeFont::charWidth (int c) const {\n\tFontEngine::instance().setFont(*this);\n\tint upem = FontEngine::instance().getUnitsPerEM();\n\treturn upem ? (scaledSize()*FontEngine::instance().getHAdvance(decodeChar(c))/upem*_style.extend) : 0;\n}\n\n\ndouble NativeFont::italicCorr(int c) const {\n\tdouble w = abs(_style.slant*charHeight(c));   // slant := tan(phi) = dx/height\n\tw *= _style.extend;\n\treturn w;\n}\n\n\ndouble NativeFont::charHeight (int c) const {\n\tFontEngine::instance().setFont(*this);\n\tint upem = FontEngine::instance().getUnitsPerEM();\n\treturn upem ? (scaledSize()*FontEngine::instance().getHeight(decodeChar(c))/upem) : 0;\n}\n\n\ndouble NativeFont::charDepth (int c) const {\n\tFontEngine::instance().setFont(*this);\n\tint upem = FontEngine::instance().getUnitsPerEM();\n\treturn upem ? (scaledSize()*FontEngine::instance().getDepth(decodeChar(c))/upem) : 0;\n}\n\n\ndouble NativeFont::hAdvance (Character c) const {\n\tFontEngine::instance().setFont(*this);\n\tint upem = FontEngine::instance().getUnitsPerEM();\n\treturn upem ? (scaledSize()*FontEngine::instance().getHAdvance(c)/upem) : 0;\n}\n\n\ndouble NativeFont::vAdvance (Character c) const {\n\tFontEngine::instance().setFont(*this);\n\tint upem = FontEngine::instance().getUnitsPerEM();\n\treturn upem ? (scaledSize()*FontEngine::instance().getVAdvance(c)/upem) : 0;\n}\n\n//////////////////////////////////////////////////////////////////////////////\n\nNativeFontImpl::NativeFontImpl (string fname, string fontname, double ptsize)\n\t: NativeFont(ptsize, FontStyle(), Color::BLACK), _path(std::move(fname)), _name(std::move(fontname))\n{\n\t// plus characters (as appended to subset prefixes) are not allowed in font/family names\n\tstd::replace(_name.begin(), _name.end(), '+', '-');\n}\n\n\nbool NativeFontImpl::findAndAssignBaseFontMap () {\n\tFontEngine &fe = FontEngine::instance();\n\tfe.setFont(*this);\n\tfe.setUnicodeCharMap();\n\t_toUnicodeMap = fe.buildGidToUnicodeMap();\n\tif (!_toUnicodeMap.addMissingMappings(fe.getNumGlyphs()))\n\t\tMessage::wstream(true) << \"incomplete Unicode mapping for native font \" << name() << \" (\" << filename() << \")\\n\";\n\treturn true;\n}\n\n\nCharacter NativeFontImpl::decodeChar (uint32_t c) const {\n\treturn {Character::INDEX, c};\n}\n\n\nuint32_t NativeFontImpl::unicode (uint32_t c) const {\n\tuint32_t ucode = _toUnicodeMap.valueAt(c);\n\treturn Unicode::charToCodepoint(ucode, true);\n}\n\n\nvoid NativeFontImpl::mapCharToUnicode (uint32_t c, uint32_t codepoint) {\n\t_toUnicodeMap.addRange(c, c, codepoint);\n}\n\n\nbool NativeFontImpl::verticalLayout() const {\n\tFontEngine &fe = FontEngine::instance();\n\tfe.setFont(*this);\n\treturn fe.hasVerticalMetrics();\n}\n\n//////////////////////////////////////////////////////////////////////////////\n\nVirtualFontImpl::VirtualFontImpl (const string &name, uint32_t cs, double ds, double ss)\n\t: TFMFont(name, cs, ds, ss)\n{\n}\n\n\nconst char* VirtualFontImpl::path () const {\n\treturn FileFinder::instance().lookup(name()+\".vf\");\n}\n\n\nvoid VirtualFontImpl::assignChar (uint32_t c, DVIVector dvi) {\n\t_charDefs.emplace(c, std::move(dvi));\n}\n\n\n/** Returns the DVI sippet that describes a given character of the virtual font.\n *  @param[in] c character code\n *  @return pointer to vector of DVI commands, or 0 if character doesn't exist */\nconst VirtualFont::DVIVector* VirtualFontImpl::getDVI (int c) const {\n\tauto it = _charDefs.find(c);\n\treturn (it == _charDefs.end() ? nullptr : &it->second);\n}\n\n//////////////////////////////////////////////////////////////////////////////\n\nvoid PhysicalFont::visit (FontVisitor &visitor) {visitor.visited(this);}\nvoid VirtualFont::visit (FontVisitor &visitor) {visitor.visited(this);}\nvoid NativeFont::visit (FontVisitor &visitor) {visitor.visited(this);}\nvoid PhysicalFont::visit (FontVisitor &visitor) const {visitor.visited(this);}\nvoid VirtualFont::visit (FontVisitor &visitor) const {visitor.visited(this);}\nvoid NativeFont::visit (FontVisitor &visitor) const {visitor.visited(this);}\n"
  },
  {
    "path": "src/Font.hpp",
    "content": "/*************************************************************************\n** Font.hpp                                                             **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FONT_HPP\n#define FONT_HPP\n\n#include <memory>\n#include <string>\n#include <unordered_map>\n#include <vector>\n#include \"Character.hpp\"\n#include \"CharMapID.hpp\"\n#include \"Color.hpp\"\n#include \"FontCache.hpp\"\n#include \"FontEncoding.hpp\"\n#include \"FontMap.hpp\"\n#include \"FontMetrics.hpp\"\n#include \"GFGlyphTracer.hpp\"\n#include \"Glyph.hpp\"\n#include \"GraphicsPath.hpp\"\n#include \"MessageException.hpp\"\n#include \"RangeMap.hpp\"\n#include \"ToUnicodeMap.hpp\"\n#include \"VFActions.hpp\"\n#include \"VFReader.hpp\"\n#include \"utility.hpp\"\n\nstruct FontStyle;\n\nstruct GlyphMetrics {\n\tGlyphMetrics () : wl(0), wr(0), h(0), d(0) {}\n\tGlyphMetrics (double wwl, double wwr, double hh, double dd) : wl(wwl), wr(wwr), h(hh), d(dd) {}\n\tdouble wl, wr, h, d;\n};\n\nstruct FontVisitor;\n\n/** Abstract base for all font classes. */\nclass Font {\n\tpublic:\n\t\tvirtual ~Font () =default;\n\t\tvirtual std::unique_ptr<Font> clone (double ds, double sc) const =0;\n\t\tvirtual const Font* uniqueFont () const =0;\n\t\tvirtual std::string name () const =0;\n\t\tvirtual double designSize () const =0;\n\t\tvirtual double scaledSize () const =0;\n\t\tvirtual double scaleFactor () const     {return scaledSize()/designSize();}\n\t\tvirtual double charWidth (int c) const =0;\n\t\tvirtual double charDepth (int c) const =0;\n\t\tvirtual double charHeight (int c) const =0;\n\t\tvirtual double italicCorr (int c) const =0;\n\t\tvirtual const FontMetrics* getMetrics () const =0;\n\t\tvirtual const char* path () const =0;\n\t\tvirtual const char* filename () const;\n\t\tvirtual const FontEncoding* encoding () const;\n\t\tvirtual bool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *callback) const =0;\n\t\tvirtual void getGlyphMetrics (int c, bool vertical, GlyphMetrics &metrics) const;\n\t\tvirtual uint32_t unicode (uint32_t c) const;\n\t\tvirtual void tidy () const {}\n\t\tvirtual bool findAndAssignBaseFontMap () {return true;}\n\t\tvirtual bool verticalLayout () const     {return getMetrics() != nullptr && getMetrics()->verticalLayout();}\n\t\tvirtual bool verifyChecksums () const    {return true;}\n\t\tvirtual int fontIndex () const           {return 0;}\n\t\tvirtual const FontStyle* style () const  {return nullptr;}\n\t\tvirtual Color color () const             {return Color::BLACK;}\n\t\tvirtual const FontMap::Entry* fontMapEntry () const;\n\t\tvirtual void visit (FontVisitor &visitor) =0;\n\t\tvirtual void visit (FontVisitor &visitor) const =0;\n};\n\n\n/** Empty font without any glyphs. Instances of this class are used\n *  if no physical or virtual font file can be found.\n *  The metric values returned by the member functions are based on cmr10. */\nclass EmptyFont : public Font {\n\tpublic:\n\t\texplicit EmptyFont (std::string name) : _fontname(std::move(name)) {}\n\t\tstd::unique_ptr<Font> clone (double ds, double sc) const override  {return util::make_unique<EmptyFont>(*this);}\n\t\tconst Font* uniqueFont () const override           {return this;}\n\t\tstd::string name () const override                 {return _fontname;}\n\t\tdouble designSize () const override                {return 10;}    // cmr10 design size in pt\n\t\tdouble scaledSize () const override                {return 10;}    // cmr10 scaled size in pt\n\t\tdouble charWidth (int c) const override            {return 9.164;} // width of cmr10's 'M' in pt\n\t\tdouble charHeight (int c) const override           {return 6.833;} // height of cmr10's 'M' in pt\n\t\tdouble charDepth (int c) const override            {return 0;}\n\t\tdouble italicCorr (int c) const override           {return 0;}\n\t\tconst FontMetrics* getMetrics () const override    {return nullptr;}\n\t\tconst char* path () const override                 {return nullptr;}\n\t\tbool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback*) const override {return false;}\n\t\tvoid visit (FontVisitor &visitor) override {}\n\t\tvoid visit (FontVisitor &visitor) const override {}\n\n\tprivate:\n\t\tstd::string _fontname;\n};\n\n\n/** Interface for all physical fonts. */\nclass PhysicalFont : public virtual Font {\n\tpublic:\n\t\tenum class Type {MF, OTF, PFB, TTC, TTF, UNKNOWN};\n\n\t\tstatic std::unique_ptr<Font> create (const std::string &name, uint32_t checksum, double dsize, double ssize, PhysicalFont::Type type);\n\t\tstatic std::unique_ptr<Font> create (const std::string &name, int fontindex, uint32_t checksum, double dsize, double ssize);\n\t\tvirtual Type type () const =0;\n\t\tbool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback *cb) const override;\n\t\tvirtual bool getExactGlyphBox (int c, BoundingBox &bbox, GFGlyphTracer::Callback *cb) const;\n\t\tvirtual bool getExactGlyphBox (int c, GlyphMetrics &metrics, bool vertical, GFGlyphTracer::Callback *cb) const;\n\t\tvirtual bool isCIDFont () const;\n\t\tvirtual int hAverageAdvance () const;\n\t\tvirtual std::string familyName () const;\n\t\tvirtual std::string styleName () const;\n\t\tvirtual double hAdvance (int c) const;\n\t\tvirtual double vAdvance (int c) const;\n\t\tstd::string glyphName (int c) const;\n\t\tvirtual int unitsPerEm () const;\n\t\tvirtual double scaledAscent () const;\n\t\tvirtual int ascent () const;\n\t\tvirtual int descent () const;\n\t\tvirtual int traceAllGlyphs (bool includeCached, GFGlyphTracer::Callback *cb) const;\n\t\tvirtual int collectCharMapIDs (std::vector<CharMapID> &charmapIDs) const;\n\t\tvirtual CharMapID getCharMapID () const =0;\n\t\tvirtual void setCharMapID (const CharMapID &id) {}\n\t\tvirtual Character decodeChar (uint32_t c) const;\n\t\tvirtual int charIndexByName (const std::string &charname) const;\n\t\tconst char* path () const override;\n\t\tvoid visit (FontVisitor &visitor) override;\n\t\tvoid visit (FontVisitor &visitor) const override;\n\n\tprotected:\n\t\tbool createGF (std::string &gfname) const;\n\n\tpublic:\n\t\tstatic bool EXACT_BBOX;\n\t\tstatic bool KEEP_TEMP_FILES;\n\t\tstatic std::string CACHE_PATH; ///< path to cache directory (\"\" if caching is disabled)\n\t\tstatic double METAFONT_MAG;    ///< magnification factor for Metafont calls\n\n\tprotected:\n\t\tstatic FontCache _cache;\n};\n\n\n/** Interface for all virtual fonts. */\nclass VirtualFont : public virtual Font {\n\tfriend class FontManager;\n\tpublic:\n\t\tusing DVIVector = std::vector<char>;\n\n\tpublic:\n\t\tstatic std::unique_ptr<Font> create (const std::string &name, uint32_t checksum, double dsize, double ssize);\n\t\tvirtual const DVIVector* getDVI (int c) const =0;\n\t\tbool getGlyph (int c, Glyph &glyph, GFGlyphTracer::Callback*) const override {return false;}\n\t\tvoid visit (FontVisitor &visitor) override;\n\t\tvoid visit (FontVisitor &visitor) const override;\n\n\tprotected:\n\t\tvirtual void assignChar (uint32_t c, DVIVector dvi) =0;\n};\n\n\nclass TFMFont : public virtual Font {\n\tpublic:\n\t\tTFMFont (std::string name, uint32_t cs, double ds, double ss);\n\t\tconst FontMetrics* getMetrics () const override;\n\t\tstd::string name () const override  {return _fontname;}\n\t\tdouble designSize () const override {return _dsize;}\n\t\tdouble scaledSize () const override {return _ssize;}\n\t\tdouble charWidth (int c) const override;\n\t\tdouble charDepth (int c) const override;\n\t\tdouble charHeight (int c) const override;\n\t\tdouble italicCorr (int c) const override;\n\t\tbool verifyChecksums () const override;\n\n\tprivate:\n\t\tmutable std::unique_ptr<FontMetrics> _metrics;\n\t\tstd::string _fontname;\n\t\tuint32_t _checksum; ///< checksum to be compared with TFM checksum\n\t\tdouble _dsize;    ///< design size in PS point units\n\t\tdouble _ssize;    ///< scaled size in PS point units\n};\n\n\nclass PhysicalFontRef : public PhysicalFont {\n\tfriend class PhysicalFontImpl;\n\tpublic:\n\t\tstd::unique_ptr<Font> clone (double ds, double sc) const override {\n\t\t\treturn std::unique_ptr<PhysicalFontRef>(new PhysicalFontRef(*this, ds, sc));\n\t\t}\n\n\t\tconst Font* uniqueFont () const override             {return _pf;}\n\t\tstd::string name () const override                   {return _pf->name();}\n\t\tdouble designSize () const override                  {return _dsize;}\n\t\tdouble scaledSize () const override                  {return _ssize;}\n\t\tdouble charWidth (int c) const override              {return _pf->charWidth(c);}\n\t\tdouble charDepth (int c) const override              {return _pf->charDepth(c);}\n\t\tdouble charHeight (int c) const override             {return _pf->charHeight(c);}\n\t\tdouble italicCorr (int c) const override             {return _pf->italicCorr(c);}\n\t\tconst FontMetrics* getMetrics () const override      {return _pf->getMetrics();}\n\t\tType type () const override                          {return _pf->type();}\n\t\tuint32_t unicode (uint32_t c) const override         {return _pf->unicode(c);}\n\t\tint fontIndex () const override                      {return _pf->fontIndex();}\n\t\tconst FontStyle* style () const override             {return _pf->style();}\n\t\tconst FontMap::Entry* fontMapEntry () const override {return _pf->fontMapEntry();}\n\t\tconst FontEncoding* encoding () const override       {return _pf->encoding();}\n\t\tCharMapID getCharMapID () const override             {return _pf->getCharMapID();}\n\t\tint collectCharMapIDs (std::vector<CharMapID> &charmapIDs) const override {return _pf->collectCharMapIDs(charmapIDs);}\n\n\tprotected:\n\t\tPhysicalFontRef (const PhysicalFont *font, double ds, double ss) : _pf(font), _dsize(ds), _ssize(ss) {}\n\t\tPhysicalFontRef (const PhysicalFontRef &ref, double ds, double ss) : _pf(ref._pf), _dsize(ds), _ssize(ss) {}\n\n\tprivate:\n\t\tconst PhysicalFont *_pf;\n\t\tdouble _dsize;  ///< design size in PS point units\n\t\tdouble _ssize;  ///< scaled size in PS point units\n};\n\n\nclass PhysicalFontImpl : public PhysicalFont, public TFMFont {\n\tfriend class PhysicalFont;\n\tpublic:\n\t\t~PhysicalFontImpl () override;\n\n\t\tstd::unique_ptr<Font> clone (double ds, double ss) const override {\n\t\t\treturn std::unique_ptr<PhysicalFontRef>(new PhysicalFontRef(this, ds, ss));\n\t\t}\n\n\t\tconst Font* uniqueFont () const override             {return this;}\n\t\tType type () const override                          {return _filetype;}\n\t\tint fontIndex() const override                       {return _fontIndex;}\n\t\tconst FontStyle* style () const override;\n\t\tconst FontEncoding* encoding () const override;\n\t\tuint32_t unicode (uint32_t c) const override;\n\t\tbool findAndAssignBaseFontMap () override;\n\t\tvoid tidy () const override;\n\t\tCharMapID getCharMapID () const override             {return _charmapID;}\n\n\tprotected:\n\t\tPhysicalFontImpl (const std::string &name, int fontindex, uint32_t checksum, double dsize, double ssize, PhysicalFont::Type type);\n\n\tprivate:\n\t\tType _filetype;\n\t\tint _fontIndex;\n\t\tFontEncodingPair _encodingPair;\n\t\tCharMapID _charmapID;  ///< ID of the font's charmap to use\n\t\tstd::unique_ptr<const RangeMap> _localCharMap;\n};\n\n\nclass NativeFont : public PhysicalFont {\n\tpublic:\n\t\tvirtual std::unique_ptr<NativeFont> clone (double ptsize, const FontStyle &style, Color color) const =0;\n\t\tstd::unique_ptr<Font> clone (double ds, double sc) const override =0;\n\t\tstd::string name () const override;\n\t\tType type () const override;\n\t\tconst NativeFont* uniqueFont () const override   {return this;}\n\t\tdouble designSize () const override              {return _ptsize;}\n\t\tdouble scaledSize () const override              {return _ptsize;}\n\t\tdouble charWidth (int c) const override;\n\t\tdouble charDepth (int c) const override;\n\t\tdouble charHeight (int c) const override;\n\t\tdouble italicCorr (int c) const override;\n\t\tvirtual double hAdvance (Character c) const;\n\t\tvirtual double vAdvance (Character c) const;\n\t\tconst FontMetrics* getMetrics () const override  {return nullptr;}\n\t\tconst FontStyle* style () const override         {return &_style;}\n\t\tColor color () const override                    {return _color;}\n\t\tconst FontMap::Entry* fontMapEntry () const override {return nullptr;}\n\t\tvirtual void mapCharToUnicode (uint32_t c, uint32_t codepoint) =0;\n\t\tstatic std::string uniqueName (const std::string &path, const FontStyle &style);\n\t\tvoid visit (FontVisitor &visitor) override;\n\t\tvoid visit (FontVisitor &visitor) const override;\n\n\tprotected:\n\t\tNativeFont (double ptsize, const FontStyle &style, Color color) : _ptsize(ptsize), _style(style), _color(color) {}\n\t\tusing PhysicalFont::hAdvance;\n\t\tusing PhysicalFont::vAdvance;\n\n\tprivate:\n\t\tdouble _ptsize;    ///< font size in PS point units\n\t\tFontStyle _style;\n\t\tColor _color;\n};\n\n\nclass NativeFontRef : public NativeFont {\n\tfriend class NativeFontImpl;\n\tpublic:\n\t\tstd::unique_ptr<NativeFont> clone (double ptsize, const FontStyle &style, Color color) const override {\n\t\t\treturn std::unique_ptr<NativeFontRef>(new NativeFontRef(this, ptsize, style, color));\n\t\t}\n\n\t\tstd::unique_ptr<Font> clone (double ds, double sc) const override {\n\t\t\treturn std::unique_ptr<NativeFontRef>(new NativeFontRef(this , sc, *style(), color()));\n\t\t}\n\n\t\tconst NativeFont* uniqueFont () const override    {return _nfont;}\n\t\tconst char* path () const override                {return _nfont->path();}\n\t\tint fontIndex () const override                   {return _nfont->fontIndex();}\n\t\tCharacter decodeChar (uint32_t c) const override  {return _nfont->decodeChar(c);}\n\t\tuint32_t unicode (uint32_t c) const override      {return _nfont->unicode(c);}\n\t\tCharMapID getCharMapID () const override          {return _nfont->getCharMapID();}\n\t\tbool verticalLayout() const override              {return _nfont->verticalLayout();}\n\t\tstd::string name () const override                {return _nfont->name();}\n\n\t\tvoid mapCharToUnicode (uint32_t c, uint32_t codepoint) override {\n\t\t\tconst_cast<NativeFont*>(_nfont)->mapCharToUnicode(c, codepoint);\n\t\t}\n\n\tprotected:\n\t\tNativeFontRef (const NativeFont *nfont, double ptsize, const FontStyle &style, Color color)\n\t\t\t: NativeFont(ptsize, style, color), _nfont(nfont) {}\n\n\tprivate:\n\t\tconst NativeFont *_nfont;\n};\n\n\nclass NativeFontImpl : public NativeFont {\n\tpublic:\n\t\tNativeFontImpl (std::string fname, int fontIndex, double ptsize, const FontStyle &style, Color color)\n\t\t\t: NativeFont(ptsize, style, color), _path(std::move(fname)), _fontIndex(fontIndex) {}\n\n\t\tNativeFontImpl (std::string fname, std::string fontname, double ptsize);\n\n\t\tstd::unique_ptr<NativeFont> clone (double ptsize, const FontStyle &style, Color color) const override {\n\t\t\treturn std::unique_ptr<NativeFontRef>(new NativeFontRef(this, ptsize, style, color));\n\t\t}\n\n\t\tstd::unique_ptr<Font> clone (double ds, double sc) const override {\n\t\t\treturn std::unique_ptr<NativeFontRef>(new NativeFontRef(this , sc, *style(), color()));\n\t\t}\n\n\t\tconst char* path () const override                {return _path.c_str();}\n\t\tint fontIndex () const override                   {return _fontIndex;}\n\t\tstd::string name () const override                {return _name.empty() ? NativeFont::name() : _name;}\n\t\tbool findAndAssignBaseFontMap () override;\n\t\tCharMapID getCharMapID () const override          {return CharMapID::NONE;}\n\t\tCharacter decodeChar (uint32_t c) const override;\n\t\tuint32_t unicode (uint32_t c) const override;\n\t\tbool verticalLayout() const override;\n\t\tvoid mapCharToUnicode (uint32_t c, uint32_t codepoint) override;\n\n\tprivate:\n\t\tstd::string _path;\n\t\tstd::string _name;\n\t\tint _fontIndex = 0;\n\t\tToUnicodeMap _toUnicodeMap; ///< maps from char indexes to unicode points\n};\n\n\nclass VirtualFontRef : public VirtualFont {\n\tfriend class VirtualFontImpl;\n\tpublic:\n\t\tstd::unique_ptr<Font> clone (double ds, double ss) const override {\n\t\t\treturn std::unique_ptr<VirtualFontRef>(new VirtualFontRef(*this, ds, ss));\n\t\t}\n\n\t\tconst Font* uniqueFont () const override          {return _vf;}\n\t\tstd::string name () const override                {return _vf->name();}\n\t\tconst DVIVector* getDVI (int c) const override    {return _vf->getDVI(c);}\n\t\tdouble designSize () const override               {return _dsize;}\n\t\tdouble scaledSize () const override               {return _ssize;}\n\t\tdouble charWidth (int c) const override           {return _vf->charWidth(c);}\n\t\tdouble charDepth (int c) const override           {return _vf->charDepth(c);}\n\t\tdouble charHeight (int c) const override          {return _vf->charHeight(c);}\n\t\tdouble italicCorr (int c) const override          {return _vf->italicCorr(c);}\n\t\tconst FontMetrics* getMetrics () const override   {return _vf->getMetrics();}\n\t\tconst char* path () const override                {return _vf->path();}\n\n\tprotected:\n\t\tVirtualFontRef (const VirtualFont *font, double ds, double ss) : _vf(font), _dsize(ds), _ssize(ss) {}\n\t\tVirtualFontRef (const VirtualFontRef &ref, double ds, double ss) : _vf(ref._vf), _dsize(ds), _ssize(ss) {}\n\t\tvoid assignChar (uint32_t c, DVIVector dvi) override {}\n\n\tprivate:\n\t\tconst VirtualFont *_vf;\n\t\tdouble _dsize;  ///< design size in PS point units\n\t\tdouble _ssize;  ///< scaled size in PS point units\n};\n\n\nclass VirtualFontImpl : public VirtualFont, public TFMFont {\n\tfriend class VirtualFont;\n\tpublic:\n\t\tstd::unique_ptr<Font> clone (double ds, double ss) const override {\n\t\t\treturn std::unique_ptr<VirtualFontRef>(new VirtualFontRef(this, ds, ss));\n\t\t}\n\n\t\tconst Font* uniqueFont () const override {return this;}\n\t\tconst DVIVector* getDVI (int c) const override;\n\t\tconst char* path () const override;\n\n\tprotected:\n\t\tVirtualFontImpl (const std::string &name, uint32_t checksum, double dsize, double ssize);\n\t\tvoid assignChar (uint32_t c, DVIVector dvi) override;\n\n\tprivate:\n\t\tstd::unordered_map<uint32_t, DVIVector> _charDefs; ///< dvi subroutines defining the characters\n};\n\n\nstruct FontVisitor {\n\tvirtual ~FontVisitor () =default;\n\tvirtual void visited (const PhysicalFont *font) {}\n\tvirtual void visited (const VirtualFont *font) {}\n\tvirtual void visited (const NativeFont *font) {visited(static_cast<const PhysicalFont*>(font));}\n\tvirtual void visited (PhysicalFont *font) {}\n\tvirtual void visited (VirtualFont *font) {}\n\tvirtual void visited (NativeFont *font) {visited(static_cast<PhysicalFont*>(font));}\n};\n\n\n/** This function works similar to dynamic_cast but only on pointers to Font classes.\n *  It uses double dispatch instead of RTTI and should therefore be faster.\n *  @param[in] font font pointer to be cast\n *  @return cast pointer on success, nullptr otherwise */\ntemplate <typename C>\nC font_cast (typename util::set_const_of<Font>::by<typename std::remove_pointer<C>::type>::type *font) {\n\tstruct : FontVisitor {\n\t\tvoid visited (C font) override {result = font;}\n\t\tC result = nullptr;\n\t} visitor;\n\tif (font)\n\t\tfont->visit(visitor);\n\treturn visitor.result;\n}\n\n\nstruct FontException : MessageException {\n\texplicit FontException (const std::string &msg) : MessageException(msg) {}\n};\n\n#endif\n"
  },
  {
    "path": "src/FontCache.cpp",
    "content": "/*************************************************************************\n** FontCache.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstring>\n#include <fstream>\n#include <iomanip>\n#include <sstream>\n#include \"FileSystem.hpp\"\n#include \"FontCache.hpp\"\n#include \"Pair.hpp\"\n#include \"StreamReader.hpp\"\n#include \"StreamWriter.hpp\"\n#include \"XXHashFunction.hpp\"\n\nusing namespace std;\n\nconst uint8_t FontCache::FORMAT_VERSION = 5;\n\n\nstatic Pair32 read_pair (int bytes, StreamReader &sr) {\n\tint32_t x = sr.readSigned(bytes);\n\tint32_t y = sr.readSigned(bytes);\n\treturn Pair32(x, y);\n}\n\n\n/** Removes all data from the cache. This does not affect the cache files. */\nvoid FontCache::clear () {\n\t_glyphs.clear();\n\t_fontname.clear();\n}\n\n\n/** Assigns glyph data to a character and adds it to the cache.\n *  @param[in] c character code\n *  @param[in] glyph font glyph data */\nvoid FontCache::setGlyph (int c, const Glyph &glyph) {\n\t_glyphs[c] = glyph;\n\t_changed = true;\n}\n\n\n/** Returns the corresponding glyph data of a given character of the current font.\n *  @param[in] c character code\n *  @return font glyph data (0 if no matching data was found) */\nconst Glyph* FontCache::getGlyph (int c) const {\n\tauto it = _glyphs.find(c);\n\treturn (it != _glyphs.end()) ? &it->second : nullptr;\n}\n\n\n/** Writes the current cache data to a file (only if anything changed after\n *  the last call of read()).\n *  @param[in] fontname name of current font\n *  @param[in] dir directory where the cache file should go\n *  @return true if writing was successful */\nbool FontCache::write (const string &fontname, const string &dir) const {\n\tif (!_changed)\n\t\treturn true;\n\n\tif (!fontname.empty()) {\n\t\tstring pathstr = dir.empty() ? FileSystem::getcwd() : dir;\n\t\tpathstr += \"/\" + fontname + \".fgd\";\n\t\tofstream ofs(pathstr, ios::binary);\n\t\treturn write(fontname, ofs);\n\t}\n\treturn false;\n}\n\n\nbool FontCache::write (const string &dir) const {\n\treturn _fontname.empty() ? false : write(_fontname, dir);\n}\n\n\n/** Returns the minimal number of bytes needed to store the given value. */\nstatic int max_number_of_bytes (int32_t value) {\n\tint32_t limit = 0x7f;\n\tfor (int i=1; i <= 4; i++) {\n\t\tif ((value < 0  && -value <= limit+1) || (value >= 0 && value <= limit))\n\t\t\treturn i;\n\t\tlimit = (limit << 8) | 0xff;\n\t}\n\treturn 4;\n}\n\nstatic int max_int_size () {\n\treturn 0;\n}\n\ntemplate <typename ...Args>\nstatic int max_int_size (const Glyph::Point &p1, const Args& ...args) {\n\tint max1 = max(max_number_of_bytes(p1.x()), max_number_of_bytes(p1.y()));\n\treturn max(max1, max_int_size(args...));\n}\n\n\nstruct WriteActions : Glyph::IterationActions {\n\tWriteActions (StreamWriter &sw, HashFunction &hashfunc) : _sw(sw), _hashfunc(hashfunc) {}\n\n\tusing Point = Glyph::Point;\n\tvoid moveto (const Point &p) override {write('M', p);}\n\tvoid lineto (const Point &p) override {write('L', p);}\n\tvoid quadto (const Point &p1, const Point &p2) override {write('Q', p1, p2);}\n\tvoid cubicto (const Point &p1, const Point &p2, const Point &p3) override {write('C', p1, p2, p3);\t}\n\tvoid closepath () override {write('Z');}\n\n\ttemplate <typename ...Args>\n\tvoid write (char cmd, Args ...args) {\n\t\tint bytesPerValue = max_int_size(args...);\n\t\tint cmdchar = (bytesPerValue << 5) | (cmd - 'A');\n\t\t_sw.writeUnsigned(cmdchar, 1, _hashfunc);\n\t\twriteParams(bytesPerValue, args...);\n\t}\n\n\tstatic void writeParams (int bytesPerValue) {}\n\n\ttemplate <typename ...Args>\n\tvoid writeParams (int bytesPerValue, const Point &p, const Args& ...args) {\n\t\t_sw.writeSigned(p.x(), bytesPerValue, _hashfunc);\n\t\t_sw.writeSigned(p.y(), bytesPerValue, _hashfunc);\n\t\twriteParams(bytesPerValue, args...);\n\t}\n\n\tStreamWriter &_sw;\n\tHashFunction &_hashfunc;\n};\n\n\n/** Writes the current cache data to a stream (only if anything changed after\n *  the last call of read()).\n *  @param[in] fontname name of current font\n *  @param[in] os output stream\n *  @return true if writing was successful */\nbool FontCache::write (const string &fontname, ostream &os) const {\n\tif (!_changed)\n\t\treturn true;\n\tif (!os)\n\t\treturn false;\n\n\tStreamWriter sw(os);\n\tXXH32HashFunction hashfunc;\n\n\tsw.writeUnsigned(FORMAT_VERSION, 1, hashfunc);\n\tsw.writeBytes(hashfunc.digestBytes());  // space for checksum\n\tsw.writeString(fontname, hashfunc, true);\n\tsw.writeUnsigned(_glyphs.size(), 4, hashfunc);\n\tWriteActions actions(sw, hashfunc);\n\tfor (const auto &charglyphpair : _glyphs) {\n\t\tconst Glyph &glyph = charglyphpair.second;\n\t\tsw.writeUnsigned(charglyphpair.first, 4, hashfunc);\n\t\tsw.writeUnsigned(glyph.size(), 2, hashfunc);\n\t\tglyph.iterate(actions, false);\n\t}\n\tos.seekp(1);\n\tauto digest = hashfunc.digestBytes();\n\tsw.writeBytes(digest);  // insert checksum\n\tos.seekp(0, ios::end);\n\treturn true;\n}\n\n\n/** Reads font glyph information from a file.\n *  @param[in] fontname name of font data to read\n *  @param[in] dir directory where the cache files are located\n *  @return true if reading was successful */\nbool FontCache::read (const string &fontname, const string &dir) {\n\tif (fontname.empty())\n\t\treturn false;\n\tif (_fontname == fontname)\n\t\treturn true;\n\tclear();\n\tstring dirstr = dir.empty() ? FileSystem::getcwd() : dir;\n\tostringstream oss;\n\toss << dirstr << '/' << fontname << \".fgd\";\n\tifstream ifs(oss.str(), ios::binary);\n\treturn read(fontname, ifs);\n}\n\n\n/** Reads font glyph information from a stream.\n *  @param[in] fontname name of font data to read\n *  @param[in] is input stream to read the glyph data from\n *  @return true if reading was successful */\nbool FontCache::read (const string &fontname, istream &is) {\n\tif (_fontname == fontname)\n\t\treturn true;\n\tclear();\n\t_fontname = fontname;\n\tif (!is)\n\t\treturn false;\n\n\tStreamReader sr(is);\n\tXXH32HashFunction hashfunc;\n\tif (sr.readUnsigned(1, hashfunc) != FORMAT_VERSION)\n\t\treturn false;\n\n\tauto hashcmp = sr.readBytes(hashfunc.digestSize());\n\thashfunc.update(is);\n\tif (hashfunc.digestBytes() != hashcmp)\n\t\treturn false;\n\n\tis.clear();\n\tis.seekg(hashfunc.digestSize()+1);  // continue reading after checksum\n\n\tstring fname = sr.readString();\n\tif (fname != fontname)\n\t\treturn false;\n\n\tuint32_t num_glyphs = sr.readUnsigned(4);\n\twhile (num_glyphs-- > 0) {\n\t\tuint32_t c = sr.readUnsigned(4);  // character code\n\t\tuint16_t s = sr.readUnsigned(2);  // number of path commands\n\t\tGlyph &glyph = _glyphs[c];\n\t\twhile (s-- > 0) {\n\t\t\tuint8_t cmdval = sr.readUnsigned(1);\n\t\t\tuint8_t cmdchar = (cmdval & 0x1f) + 'A';\n\t\t\tint bytes = cmdval >> 5;\n\t\t\tswitch (cmdchar) {\n\t\t\t\tcase 'C': {\n\t\t\t\t\tPair32 p1 = read_pair(bytes, sr);\n\t\t\t\t\tPair32 p2 = read_pair(bytes, sr);\n\t\t\t\t\tPair32 p3 = read_pair(bytes, sr);\n\t\t\t\t\tglyph.cubicto(p1, p2, p3);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'L':\n\t\t\t\t\tglyph.lineto(read_pair(bytes, sr));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'M':\n\t\t\t\t\tglyph.moveto(read_pair(bytes, sr));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Q': {\n\t\t\t\t\tPair32 p1 = read_pair(bytes, sr);\n\t\t\t\t\tPair32 p2 = read_pair(bytes, sr);\n\t\t\t\t\tglyph.quadto(p1, p2);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'Z':\n\t\t\t\t\tglyph.closepath();\n\t\t\t}\n\t\t}\n\t}\n\t_changed = false;\n\treturn true;\n}\n\n\n/** Collects font cache information.\n *  @param[in]  dirname path to font cache directory\n *  @param[out] infos the collected font information\n *  @param[out] invalid names of outdated/corrupted cache files\n *  @return true on success */\nbool FontCache::fontinfo (const string &dirname, vector<FontInfo> &infos, vector<string> &invalid) {\n\tinfos.clear();\n\tinvalid.clear();\n\tif (!dirname.empty()) {\n\t\tvector<string> fnames;\n\t\tFileSystem::collect(dirname, fnames);\n\t\tfor (const string &fname : fnames) {\n\t\t\tif (fname[0] == 'f' && fname.length() > 5 && fname.substr(fname.length()-4) == \".fgd\") {\n\t\t\t\tFontInfo info;\n\t\t\t\tstring path = dirname+\"/\"+(fname.substr(1));\n\t\t\t\tifstream ifs(path, ios::binary);\n\t\t\t\tif (fontinfo(ifs, info))\n\t\t\t\t\tinfos.push_back(std::move(info));\n\t\t\t\telse\n\t\t\t\t\tinvalid.push_back(fname.substr(1));\n\t\t\t}\n\t\t}\n\t}\n\treturn !infos.empty();\n}\n\n\n/** Collects font cache information of a single font.\n *  @param[in]  is input stream of the cache file\n *  @param[out] info the collected data\n *  @return true if data could be read, false if cache file is unavailable, outdated, or corrupted */\nbool FontCache::fontinfo (std::istream &is, FontInfo &info) {\n\tinfo.name.clear();\n\tinfo.numchars = info.numbytes = info.numcmds = 0;\n\tif (is) {\n\t\tis.clear();\n\t\tis.seekg(0);\n\t\ttry {\n\t\t\tStreamReader sr(is);\n\t\t\tXXH32HashFunction hashfunc;\n\t\t\tif ((info.version = sr.readUnsigned(1, hashfunc)) != FORMAT_VERSION)\n\t\t\t\treturn false;\n\n\t\t\tinfo.checksum = sr.readBytes(hashfunc.digestSize());\n\t\t\thashfunc.update(is);\n\t\t\tif (hashfunc.digestBytes() != info.checksum)\n\t\t\t\treturn false;\n\n\t\t\tis.clear();\n\t\t\tis.seekg(hashfunc.digestSize()+1);  // continue reading after checksum\n\n\t\t\tinfo.name = sr.readString();\n\t\t\tinfo.numchars = sr.readUnsigned(4);\n\t\t\tfor (uint32_t i=0; i < info.numchars; i++) {\n\t\t\t\tsr.readUnsigned(4);  // character code\n\t\t\t\tuint16_t s = sr.readUnsigned(2);  // number of path commands\n\t\t\t\twhile (s-- > 0) {\n\t\t\t\t\tuint8_t cmdval = sr.readUnsigned(1);\n\t\t\t\t\tuint8_t cmdchar = (cmdval & 0x1f) + 'A';\n\t\t\t\t\tint bytes = cmdval >> 5;\n\t\t\t\t\tint bc = 0;\n\t\t\t\t\tswitch (cmdchar) {\n\t\t\t\t\t\tcase 'C': bc = 6*bytes; break;\n\t\t\t\t\t\tcase 'H':\n\t\t\t\t\t\tcase 'L':\n\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\tcase 'T':\n\t\t\t\t\t\tcase 'V': bc = 2*bytes; break;\n\t\t\t\t\t\tcase 'Q':\n\t\t\t\t\t\tcase 'S': bc = 4*bytes; break;\n\t\t\t\t\t\tcase 'Z': break;\n\t\t\t\t\t\tdefault : return false;\n\t\t\t\t\t}\n\t\t\t\t\tinfo.numbytes += bc+1; // command length + command\n\t\t\t\t\tinfo.numcmds++;\n\t\t\t\t\tis.seekg(bc, ios::cur);\n\t\t\t\t}\n\t\t\t\tinfo.numbytes += 6; // number of path commands + char code\n\t\t\t}\n\t\t\tinfo.numbytes += 6+info.name.length(); // version + 0-byte + fontname + number of chars\n\t\t}\n\t\tcatch (StreamReaderException &e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n\n/** Collects font cache information and write it to a stream.\n *  @param[in] dirname path to font cache directory\n *  @param[in] os output is written to this stream\n *  @param[in] purge if true, outdated and corrupted cache files are removed */\nvoid FontCache::fontinfo (const string &dirname, ostream &os, bool purge) {\n\tif (!dirname.empty()) {\n\t\tios::fmtflags osflags(os.flags());\n\t\tvector<FontInfo> infos;\n\t\tvector<string> invalid_files;\n\t\tif (!fontinfo(dirname, infos, invalid_files))\n\t\t\tos << \"cache is empty\\n\";\n\t\telse {\n\t\t\tos << \"cache format version \" << infos[0].version << endl;\n\t\t\tmap<string, const FontInfo*> sortmap;\n\t\t\tfor (const FontInfo &info : infos)\n\t\t\t\tsortmap[info.name] = &info;\n\t\t\tfor (const auto &strinfopair : sortmap) {\n\t\t\t\tos\t<< dec << setfill(' ') << left\n\t\t\t\t\t<< setw(10) << left  << strinfopair.second->name\n\t\t\t\t\t<< setw(5)  << right << strinfopair.second->numchars << \" glyph\" << (strinfopair.second->numchars == 1 ? ' ':'s')\n\t\t\t\t\t<< setw(10) << right << strinfopair.second->numcmds  << \" cmd\"   << (strinfopair.second->numcmds == 1 ? ' ':'s')\n\t\t\t\t\t<< setw(12) << right << strinfopair.second->numbytes << \" byte\"  << (strinfopair.second->numbytes == 1 ? ' ':'s')\n\t\t\t\t\t<< \"  hash:\" << hex;\n\t\t\t\tfor (int byte : strinfopair.second->checksum)\n\t\t\t\t\tos << setw(2) << setfill('0') << byte;\n\t\t\t\tos << '\\n';\n\t\t\t}\n\t\t}\n\t\tif (purge) {\n\t\t\tfor (const string &str : invalid_files) {\n\t\t\t\tstring path=dirname+\"/\"+str;\n\t\t\t\tif (FileSystem::remove(path))\n\t\t\t\t\tos << \"invalid cache file \" << str << \" removed\\n\";\n\t\t\t}\n\t\t}\n\t\tos.flags(osflags);  // restore format flags\n\t}\n}\n"
  },
  {
    "path": "src/FontCache.hpp",
    "content": "/*************************************************************************\n** FontCache.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FONTCACHE_HPP\n#define FONTCACHE_HPP\n\n#include <map>\n#include <string>\n#include <vector>\n#include \"Glyph.hpp\"\n\n\nclass FontCache {\n\tpublic:\n\t\tstruct FontInfo {\n\t\t\tstd::string name;               // fontname\n\t\t\tuint16_t version;               // file format version\n\t\t\tstd::vector<uint8_t> checksum;  // checksum of file data\n\t\t\tuint32_t numchars;              // number of characters\n\t\t\tuint32_t numbytes;              // number of bytes\n\t\t\tuint32_t numcmds;               // number of path commands\n\t\t};\n\n\tpublic:\n\t\t~FontCache () {clear();}\n\t\tbool read (const std::string &fontname, const std::string &dir);\n\t\tbool read (const std::string &fontname, std::istream &is);\n\t\tbool write (const std::string &dir) const;\n\t\tbool write (const std::string &fontname, const std::string &dir) const;\n\t\tbool write (const std::string &fontname, std::ostream &os) const;\n\t\tconst Glyph* getGlyph (int c) const;\n\t\tvoid setGlyph (int c, const Glyph &glyph);\n\t\tvoid clear ();\n\t\tconst std::string& fontname () const {return _fontname;}\n\n\t\tstatic bool fontinfo (const std::string &dirname, std::vector<FontInfo> &infos, std::vector<std::string> &invalid);\n\t\tstatic bool fontinfo (std::istream &is, FontInfo &info);\n\t\tstatic void fontinfo (const std::string &dirname, std::ostream &os, bool purge=false);\n\n\tprivate:\n\t\tstatic const uint8_t FORMAT_VERSION;\n\t\tstd::string _fontname;\n\t\tstd::map<int, Glyph> _glyphs;\n\t\tbool _changed=false;\n};\n\n#endif\n"
  },
  {
    "path": "src/FontEncoding.cpp",
    "content": "/*************************************************************************\n** FontEncoding.cpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"CMap.hpp\"\n#include \"CMapManager.hpp\"\n#include \"EncFile.hpp\"\n#include \"FileFinder.hpp\"\n#include \"FontEncoding.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n/** Returns the encoding object for a given encoding name.\n * @param[in] encname name of the encoding to lookup\n * @return pointer to encoding object, or 0 if there is no encoding defined */\nFontEncoding* FontEncoding::encoding (const string &encname) {\n\tif (encname.empty())\n\t\treturn nullptr;\n\n\tusing EncodingMap = unordered_map<string, unique_ptr<EncFile>>;\n\tstatic EncodingMap encmap;\n\t// initially, try to find an .enc file with the given name\n\tauto it = encmap.find(encname);\n\tif (it != encmap.end())\n\t\treturn it->second.get();\n\tif (FileFinder::instance().lookup(encname + \".enc\", false)) {\n\t\tauto state = encmap.emplace(encname, util::make_unique<EncFile>(encname));\n\t\treturn state.first->second.get();\n\t}\n\t// no .enc file found => try to find a CMap\n\tif (CMap *cmap = CMapManager::instance().lookup(encname))\n\t\treturn cmap;\n\treturn nullptr;\n}\n\n/////////////////////////////////////////////////////////////////////////\n\nCharacter FontEncodingPair::decode (uint32_t c) const {\n\tif (_enc1) {\n\t\tCharacter chr = _enc1->decode(c);\n\t\tif (_enc2 && chr.type() != Character::NAME)\n\t\t\tchr = _enc2->decode(chr.number());\n\t\treturn chr;\n\t}\n\treturn {Character::INDEX, 0};\n}\n\n\nbool FontEncodingPair::mapsToCharIndex () const {\n\tif (_enc2)\n\t\treturn _enc2->mapsToCharIndex();\n\tif (_enc1)\n\t\treturn _enc1->mapsToCharIndex();\n\treturn false;\n}\n\n\nbool FontEncodingPair::mapsToUnicode () const {\n\tif (_enc2)\n\t\treturn _enc2->mapsToUnicode();\n\tif (_enc1)\n\t\treturn _enc1->mapsToUnicode();\n\treturn false;\n}\n\n\nconst FontEncoding* FontEncodingPair::findCompatibleBaseFontMap (const PhysicalFont *font, CharMapID &charmapID) const {\n\tif (_enc2)\n\t\treturn _enc2->findCompatibleBaseFontMap(font, charmapID);\n\tif (_enc1)\n\t\treturn _enc1->findCompatibleBaseFontMap(font, charmapID);\n\treturn nullptr;\n}\n\n\nvoid FontEncodingPair::assign (const FontEncoding *enc) {\n\tif (!_enc1)\n\t\t_enc1 = enc;\n\telse\n\t\t_enc2 = enc;\n}\n"
  },
  {
    "path": "src/FontEncoding.hpp",
    "content": "/*************************************************************************\n** FontEncoding.hpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FONTENCODING_HPP\n#define FONTENCODING_HPP\n\n#include <string>\n#include \"Character.hpp\"\n\n\nstruct CharMapID;\nclass PhysicalFont;\n\nstruct FontEncoding {\n\tvirtual ~FontEncoding () =default;\n\tvirtual Character decode (uint32_t c) const =0;\n\tvirtual bool mapsToCharIndex () const =0;\n\tvirtual bool mapsToUnicode () const {return false;}\n\tvirtual const FontEncoding* findCompatibleBaseFontMap (const PhysicalFont *font, CharMapID &charmapID) const {return nullptr;}\n\tstatic FontEncoding* encoding (const std::string &encname);\n};\n\n\nstruct NamedFontEncoding : FontEncoding {\n\tvirtual const char* name () const =0;\n\tvirtual const char* path () const =0;\n};\n\n\nclass FontEncodingPair : public FontEncoding {\n\tpublic:\n\t\texplicit FontEncodingPair (const FontEncoding *enc1) : _enc1(enc1), _enc2(nullptr) {}\n\t\tFontEncodingPair (const FontEncoding *enc1, const FontEncoding *enc2) : _enc1(enc1), _enc2(enc2) {}\n\t\tCharacter decode (uint32_t c) const override;\n\t\tbool mapsToCharIndex () const override;\n\t\tbool mapsToUnicode () const override;\n\t\tconst FontEncoding* findCompatibleBaseFontMap (const PhysicalFont *font, CharMapID &charmapID) const override;\n\t\tconst FontEncoding* enc1 () const       {return _enc1;}\n\t\tconst FontEncoding* enc2 () const       {return _enc2;}\n\t\tvoid assign (const FontEncoding *enc);\n\n\tprivate:\n\t\tconst FontEncoding *_enc1, *_enc2;\n};\n\n#endif\n"
  },
  {
    "path": "src/FontEngine.cpp",
    "content": "/*************************************************************************\n** FontEngine.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include <set>\n#include <sstream>\n#include <ft2build.h>\n#include FT_ADVANCES_H\n#include FT_GLYPH_H\n#include FT_OUTLINE_H\n#include FT_TRUETYPE_TABLES_H\n#include FT_TYPES_H\n#include \"Font.hpp\"\n#include \"FontEngine.hpp\"\n#include \"FontStyle.hpp\"\n#include \"fonts/Base14Fonts.hpp\"\n#include \"Message.hpp\"\n#include \"Unicode.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\n/** Converts a floating point value to a 16.16 fixed point value. */\nstatic inline FT_Fixed to_16dot16 (double val) {\n\treturn static_cast<FT_Fixed>(lround(val*65536.0));\n}\n\n\n/** Converts an integer to a 16.16 fixed point value. */\nstatic inline FT_Fixed to_16dot16 (int val) {\n\treturn static_cast<FT_Fixed>(val) << 16;\n}\n\n\n///////////////////////////////////////////////////////////////////////////\n\n\nFontEngine::FontEngine () {\n\tif (FT_Init_FreeType(&_library))\n\t\tMessage::estream(true) << \"failed to initialize FreeType library\\n\";\n}\n\n\nFontEngine::~FontEngine () {\n\tif (_currentFace && FT_Done_Face(_currentFace))\n\t\tMessage::estream(true) << \"failed to release font\\n\";\n\tif (FT_Done_FreeType(_library))\n\t\tMessage::estream(true) << \"failed to release FreeType library\\n\";\n}\n\n\n/** Returns the singleton instance of this class. */\nFontEngine& FontEngine::instance () {\n\tstatic FontEngine engine;\n\treturn engine;\n}\n\n\nstring FontEngine::version () {\n\tFT_Int major, minor, patch;\n\tFT_Library &lib = instance()._library;\n\tFT_Library_Version(lib, &major, &minor, &patch);\n\tostringstream oss;\n\toss << major << '.' << minor << '.' << patch;\n\treturn oss.str();\n}\n\n\n/** Sets the font to be used.\n * @param[in] fname path to font file\n * @param[in] fontindex index of font in font collection (multi-font files, like TTC)\n * @param[in] charMapID character map ID to assign\n * @return true on success */\nbool FontEngine::setFont (const string &fname, int fontindex, const CharMapID &charMapID) {\n\tif (_currentFace && FT_Done_Face(_currentFace))\n\t\tMessage::estream(true) << \"failed to release font\\n\";\n\tif (fname.size() <= 6 || fname.substr(0, 6) == \"sys://\") {\n\t\tif (const MemoryFontData *data = find_base14_font(fname.substr(6))) {\n\t\t\tFT_Open_Args args;\n\t\t\targs.flags = FT_OPEN_MEMORY;\n\t\t\targs.memory_base = reinterpret_cast<const FT_Byte*>(data->data);\n\t\t\targs.memory_size = FT_Long(data->size);\n\t\t\tif (FT_Open_Face(_library, &args, fontindex, &_currentFace)) {\n\t\t\t\tMessage::estream(true) << \"can't read memory font \" << fname << '\\n';\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\telse if (FT_New_Face(_library, fname.c_str(), fontindex, &_currentFace)) {\n\t\tMessage::estream(true) << \"can't read font file \" << fname << '\\n';\n\t\treturn false;\n\t}\n\tif (charMapID.valid())\n\t\tsetCharMap(charMapID);\n\treturn true;\n}\n\n\nbool FontEngine::setFont (const Font &font) {\n\tif (_currentFont && _currentFont->name() == font.name())\n\t\treturn true;\n\n\tif (const char *path=font.path()) {\n\t\tauto pf = font_cast<const PhysicalFont*>(&font);\n\t\tif (setFont(path, font.fontIndex(), pf ? pf->getCharMapID() : CharMapID())) {\n\t\t\t_currentFont = &font;\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n\nbool FontEngine::isCIDFont() const {\n\tFT_Bool cid_keyed;\n\treturn _currentFace && FT_Get_CID_Is_Internally_CID_Keyed(_currentFace, &cid_keyed) == 0 && cid_keyed;\n}\n\n\n/** Returns true if the current font contains vertical layout data. */\nbool FontEngine::hasVerticalMetrics () const {\n\treturn _currentFace && FT_HAS_VERTICAL(_currentFace);\n}\n\n\nbool FontEngine::setCharMap (const CharMapID &charMapID) const {\n\tif (_currentFace) {\n\t\tfor (int i = 0; i < _currentFace->num_charmaps; i++) {\n\t\t\tFT_CharMap ft_cmap = _currentFace->charmaps[i];\n\t\t\tif (ft_cmap->platform_id == charMapID.platform_id && ft_cmap->encoding_id == charMapID.encoding_id) {\n\t\t\t\tFT_Set_Charmap(_currentFace, ft_cmap);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n\n/** Returns a character map that maps from glyph indexes to Unicode code points */\nRangeMap FontEngine::buildGidToUnicodeMap () const {\n\tRangeMap charmap;\n\tif (!_currentFace)\n\t\treturn charmap;\n\tFT_CharMap ft_cmap = _currentFace->charmap;\n\tif (FT_Select_Charmap(_currentFace, FT_ENCODING_UNICODE) == 0) {\n\t\tFT_UInt gid;  // index of current glyph\n\t\tuint32_t charcode = FT_Get_First_Char(_currentFace, &gid);\n\t\twhile (gid) {\n\t\t\tif (!charmap.valueExists(gid))\n\t\t\t\tcharmap.addRange(gid, gid, charcode);\n\t\t\tcharcode = FT_Get_Next_Char(_currentFace, charcode, &gid);\n\t\t}\n\t\tFT_Set_Charmap(_currentFace, ft_cmap);\n\t}\n\t// In case the Unicode map of the font doesn't cover all characters, some\n\t// of them could still be identified by their names if present in the font.\n\tif (FT_HAS_GLYPH_NAMES(_currentFace)) {\n\t\tNumericRanges<uint32_t> usedCodepoints;\n\t\tfor (size_t i=0; i < charmap.numRanges(); i++)\n\t\t\tusedCodepoints.addRange(charmap.getRange(i).minval(), charmap.getRange(i).maxval());\n\t\tif (charmap.empty())\n\t\t\taddCharsByGlyphNames(1, getNumGlyphs(), charmap, usedCodepoints);\n\t\telse {\n\t\t\taddCharsByGlyphNames(1, charmap.minKey()-1, charmap, usedCodepoints);\n\t\t\tfor (size_t i=1; i < charmap.numRanges(); i++)\n\t\t\t\taddCharsByGlyphNames(charmap.getRange(i-1).max()+1, charmap.getRange(i).min()-1, charmap, usedCodepoints);\n\t\t\taddCharsByGlyphNames(charmap.maxKey()+1, getNumGlyphs(), charmap, usedCodepoints);\n\t\t}\n\t}\n\treturn charmap;\n}\n\n\n/** Looks for known glyph names in a given GID range and adds the corresponding\n *  GID->code point mapping to a character map if the code point is not already present.\n *  @param[in] minGID minimum GID of range to iterate\n *  @param[in] maxGID maximum GID of range to iterate\n *  @param[in,out] charmap character map taking the new mappings\n *  @param[in,out] ucp collection of code points already present in the character map */\nvoid FontEngine::addCharsByGlyphNames (uint32_t minGID, uint32_t maxGID, RangeMap &charmap, CodepointRanges &ucp) const {\n\tfor (uint32_t gid=minGID; gid <= maxGID; gid++) {\n\t\tchar glyphName[64];\n\t\tif (FT_Get_Glyph_Name(_currentFace, gid, glyphName, 64) == 0) {\n\t\t\tconst int32_t cp = Unicode::aglNameToCodepoint(glyphName);\n\t\t\tif (cp && !ucp.valueExists(cp)) {\n\t\t\t\tcharmap.addRange(gid, gid, cp);\n\t\t\t\tucp.addRange(cp);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/** Returns a map that maps the character codes of the currently selected char map to their glyph IDs.\n *  @param[in] face font face to build the map for\n *  @param[out] gids all GIDs mapped to a char code\n *  @return char code to GID map based on the data present in the font */\nstatic RangeMap build_charcode_to_gid_map (FT_Face face, set<uint32_t> &gids) {\n\tRangeMap charmap;\n\tFT_UInt gid;  // index of current glyph\n\tuint32_t charcode = FT_Get_First_Char(face, &gid);\n\twhile (gid) {\n\t\tcharmap.addRange(charcode, charcode, gid);\n\t\tgids.insert(gid);\n\t\tcharcode = FT_Get_Next_Char(face, charcode, &gid);\n\t}\n\treturn charmap;\n}\n\n\n/** Returns a map that maps specified glyph IDs to Unicode code points based on the data in the font.\n *  GIDs covered by the font's Unicode map are removed from set 'codePoints', the unmapped GIDs stay\n *  in the set.\n *  @param[in] face font face to build the map for\n *  @param[in,out] gids glyph IDs to process; GIDs present in the resulting map are removed from this set\n *  @param[out] codePoints code points successfully assigned to a GID\n *  @return GID to code point map based on the data present in the font */\nstatic RangeMap build_gid_to_unicode_map (FT_Face face, set<uint32_t> &gids, set<uint32_t> &codePoints) {\n\tRangeMap gidToUnicodeMap;\n\tif (FT_Select_Charmap(face, FT_ENCODING_UNICODE) == 0) {\n\t\tFT_UInt gid;  // index of current glyph\n\t\tuint32_t cp = FT_Get_First_Char(face, &gid);  // Unicode code point\n\t\twhile (gid) {\n\t\t\tif (gids.find(gid) != gids.end()) {\n\t\t\t\tgidToUnicodeMap.addRange(gid, gid, cp);\n\t\t\t\tgids.erase(gid);\n\t\t\t\tcodePoints.insert(cp);\n\t\t\t}\n\t\t\tcp = FT_Get_Next_Char(face, cp, &gid);\n\t\t}\n\t\tif (FT_HAS_GLYPH_NAMES(face)) {\n\t\t\tfor (auto gidIt = gids.begin(); gidIt != gids.end();) {\n\t\t\t\tgid = *gidIt;\n\t\t\t\tcp = gidToUnicodeMap.valueAt(gid);\n\t\t\t\tif (!cp) {\n\t\t\t\t\tchar glyphName[64];\n\t\t\t\t\tif (FT_Get_Glyph_Name(face, gid, glyphName, 64) == 0) {\n\t\t\t\t\t\tcp = Unicode::aglNameToCodepoint(glyphName);\n\t\t\t\t\t\tif (cp && codePoints.find(cp) == codePoints.end())\n\t\t\t\t\t\t\tgidToUnicodeMap.addRange(gid, gid, cp);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tcp = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (cp) {\n\t\t\t\t\tcodePoints.insert(cp);\n\t\t\t\t\tgidIt = gids.erase(gidIt);\n\t\t\t\t}\n\t\t\t\telse ++gidIt;\n\t\t\t}\n\t\t}\n\t}\n\treturn gidToUnicodeMap;\n}\n\n\n/** Creates a character map that maps from the custom character encoding to Unicode.\n *  @return pointer to character map if it could be created, 0 otherwise */\nunique_ptr<const RangeMap> FontEngine::createCustomToUnicodeMap () const {\n\tif (!_currentFace)\n\t\treturn nullptr;\n\tauto charmap = util::make_unique<RangeMap>();\n\tFT_CharMap ftcharmap = _currentFace->charmap;\n\tif (FT_Select_Charmap(_currentFace, FT_ENCODING_ADOBE_CUSTOM) != 0)\n\t\treturn nullptr;\n\n\tset<uint32_t> assignedGIDs;  // all GIDs assigned to a char code\n\tconst RangeMap charCodeToGIDMap = build_charcode_to_gid_map(_currentFace, assignedGIDs);\n\n\t// get the code points for all GIDs assigned to custom character codes\n\tset<uint32_t> assignedCodePoints;\n\tRangeMap gidToUnicodeMap = build_gid_to_unicode_map(_currentFace, assignedGIDs, assignedCodePoints);\n\n\tFT_Set_Charmap(_currentFace, ftcharmap);  // reassign initially active character map\n\n\t// assign remaining GIDs to code points from a Private Use Area (PUA)\n\tconst NumericRanges<uint32_t> pua({{0xE000, 0xF8FF}, {0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD}});\n\tauto puaIt = pua.valueIterator();\n\tfor (const uint32_t gid : assignedGIDs) {\n\t\tfor (; puaIt.valid(); ++puaIt) {\n\t\t\tif (assignedCodePoints.find(*puaIt) == assignedCodePoints.end()) {\n\t\t\t\tgidToUnicodeMap.addRange(gid, gid, *puaIt);\n\t\t\t\tassignedCodePoints.insert(*puaIt++);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tassignedCodePoints.clear();\n\t// build the resulting map via char code -> GID -> code point\n\tfor (const auto entry : charCodeToGIDMap) {\n\t\tconst uint32_t charCode = entry.first;\n\t\tconst uint32_t gid = entry.second;\n\t\tconst uint32_t cp = gidToUnicodeMap.valueAt(gid);\n\t\tcharmap->addRange(charCode, charCode, cp);\n\t}\n\treturn charmap->empty() ? nullptr : std::move(charmap);\n}\n\n\nconst char* FontEngine::getFamilyName () const {\n\treturn _currentFace ? _currentFace->family_name : nullptr;\n}\n\n\nconst char* FontEngine::getStyleName () const {\n\treturn _currentFace ? _currentFace->style_name : nullptr;\n}\n\n\n/** Returns the PS name of the current font. */\nconst char* FontEngine::getPSName () const {\n\treturn _currentFace ? FT_Get_Postscript_Name(_currentFace) : nullptr;\n}\n\n\n/** Returns the PS name of a font given by a file.\n *  @param[in] fname name/path of the font file\n *  @return the PS name */\nstring FontEngine::getPSName (const string &fname) const {\n\tstring psname;\n\tFT_Face face;\n\tif (FT_New_Face(_library, fname.c_str(), 0, &face) == 0) {\n\t\tif (const char *ptr = FT_Get_Postscript_Name(face))\n\t\t\tpsname = ptr;\n\t\tFT_Done_Face(face);\n\t}\n\treturn psname;\n}\n\n\nint FontEngine::getUnitsPerEM () const {\n\treturn _currentFace ? _currentFace->units_per_EM : 0;\n}\n\n\n/** Returns the ascender of the current font in font units.\n *  The (usually) positive value denotes the maximum height\n *  (extent above the baseline) of the font. */\nint FontEngine::getAscender () const {\n\treturn _currentFace ? _currentFace->ascender : 0;\n}\n\n\n/** Returns the descender of the current font in font units.\n *  The (usually) positive value denotes the maximum depth\n *  (extent below the baseline) of the font. */\nint FontEngine::getDescender () const {\n\treturn _currentFace ? -_currentFace->descender : 0;\n}\n\n\nint FontEngine::getHAdvance () const {\n\tif (_currentFace) {\n\t\tauto table = static_cast<TT_OS2*>(FT_Get_Sfnt_Table(_currentFace, ft_sfnt_os2));\n\t\treturn table ? table->xAvgCharWidth : 0;\n\t}\n\treturn 0;\n}\n\n\n/** Returns the horizontal advance width of a given character in font units. */\nint FontEngine::getHAdvance (const Character &c) const {\n\tif (_currentFace) {\n\t\tFT_Fixed adv=0;\n\t\tFT_Get_Advance(_currentFace, charIndex(c), FT_LOAD_NO_SCALE, &adv);\n\t\treturn adv;\n\t}\n\treturn 0;\n}\n\n\n/** Returns the vertical advance width of a given character in font units. */\nint FontEngine::getVAdvance (const Character &c) const {\n\tif (_currentFace) {\n\t\tFT_Fixed adv=0;\n\t\tauto flags = FT_LOAD_NO_SCALE;\n\t\tif (FT_HAS_VERTICAL(_currentFace))\n\t\t\tflags |= FT_LOAD_VERTICAL_LAYOUT;\n\t\tFT_Get_Advance(_currentFace, charIndex(c), flags, &adv);\n\t\treturn adv;\n\t}\n\treturn 0;\n}\n\n\nint FontEngine::getWidth (const Character &c) const {\n\tif (_currentFace) {\n\t\tif (FT_Load_Glyph(_currentFace, charIndex(c), FT_LOAD_NO_SCALE) == 0)\n\t\t\treturn _currentFace->glyph->metrics.width;\n\t}\n\treturn 0;\n}\n\n\nint FontEngine::getHeight (const Character &c) const {\n\tif (_currentFace) {\n\t\tif (FT_Load_Glyph(_currentFace, charIndex(c), FT_LOAD_NO_SCALE) == 0)\n\t\t\treturn _currentFace->glyph->metrics.horiBearingY;\n\t}\n\treturn 0;\n}\n\n\nint FontEngine::getDepth (const Character &c) const {\n\tif (_currentFace) {\n\t\tif (FT_Load_Glyph(_currentFace, charIndex(c), FT_LOAD_NO_SCALE) == 0)\n\t\t\treturn _currentFace->glyph->metrics.height - _currentFace->glyph->metrics.horiBearingY;\n\t}\n\treturn 0;\n}\n\n\nint FontEngine::getCharIndexByGlyphName(const char *name) const {\n\treturn _currentFace ? int(FT_Get_Name_Index(_currentFace, name)) : 0;\n}\n\n\nint FontEngine::charIndex (const Character &c) const {\n\tif (!_currentFace || !_currentFace->charmap)\n\t\treturn c.type() == Character::NAME ? 0 : c.number();\n\tswitch (c.type()) {\n\t\tcase Character::CHRCODE:\n\t\t\treturn FT_Get_Char_Index(_currentFace, (FT_ULong)c.number());\n\t\tcase Character::NAME:\n\t\t\treturn FT_Get_Name_Index(_currentFace, const_cast<FT_String*>(c.name()));\n\t\tdefault:\n\t\t\treturn c.number();\n\t}\n}\n\n\n/** Returns the number of glyphs present in the current font face. */\nint FontEngine::getNumGlyphs () const {\n\treturn _currentFace ? _currentFace->num_glyphs : 0;\n}\n\n\n/** Returns the glyph name for a given character code.\n * @param[in] c char code\n * @return glyph name */\nstring FontEngine::getGlyphName (const Character &c) const {\n\tstring ret;\n\tif (c.type() == Character::NAME)\n\t\tret = c.name();\n\telse if (_currentFace && FT_HAS_GLYPH_NAMES(_currentFace)) {\n\t\tchar buf[256];\n\t\tFT_Get_Glyph_Name(_currentFace, charIndex(c), buf, 256);\n\t\tret = string(buf);\n\t}\n\treturn ret;\n}\n\n\nvector<int> FontEngine::getPanose () const {\n\tvector<int> panose(10);\n\tif (_currentFace) {\n\t\tauto table = static_cast<TT_OS2*>(FT_Get_Sfnt_Table(_currentFace, ft_sfnt_os2));\n\t\tif (table)\n\t\t\tfor (int i=0; i < 10; i++)\n\t\t\t\tpanose[i] = table->panose[i];\n\t}\n\treturn panose;\n}\n\n\nint FontEngine::getCharMapIDs (vector<CharMapID> &charmapIDs) const {\n\tcharmapIDs.clear();\n\tif (_currentFace) {\n\t\tfor (int i=0; i < _currentFace->num_charmaps; i++) {\n\t\t\tFT_CharMap charmap = _currentFace->charmaps[i];\n\t\t\tcharmapIDs.emplace_back(uint8_t(charmap->platform_id), uint8_t(charmap->encoding_id));\n\t\t}\n\t}\n\treturn charmapIDs.size();\n}\n\n\nCharMapID FontEngine::setUnicodeCharMap () const {\n\tif (_currentFace && FT_Select_Charmap(_currentFace, FT_ENCODING_UNICODE) == 0)\n\t\treturn {uint8_t(_currentFace->charmap->platform_id), uint8_t(_currentFace->charmap->encoding_id)};\n\treturn {};\n}\n\n\nCharMapID FontEngine::setCustomCharMap () const {\n\tif (_currentFace && FT_Select_Charmap(_currentFace, FT_ENCODING_ADOBE_CUSTOM) == 0)\n\t\treturn {uint8_t(_currentFace->charmap->platform_id), uint8_t(_currentFace->charmap->encoding_id)};\n\treturn {};\n}\n\n\n// handle API change in freetype version 2.2.1\n#if FREETYPE_MAJOR > 2 || (FREETYPE_MAJOR == 2 && (FREETYPE_MINOR > 2 || (FREETYPE_MINOR == 2 && FREETYPE_PATCH >= 1)))\n\tusing FTVectorPtr = const FT_Vector*;\n#else\n\tusing FTVectorPtr = FT_Vector*;\n#endif\n\n\n// Callback functions used by trace_outline/FT_Outline_Decompose\nstatic int moveto (FTVectorPtr to, void *user) {\n\tauto glyph = static_cast<Glyph*>(user);\n\tglyph->moveto(to->x, to->y);\n\treturn 0;\n}\n\n\nstatic int lineto (FTVectorPtr to, void *user) {\n\tauto glyph = static_cast<Glyph*>(user);\n\tglyph->lineto(to->x, to->y);\n\treturn 0;\n}\n\n\nstatic int quadto (FTVectorPtr control, FTVectorPtr to, void *user) {\n\tauto glyph = static_cast<Glyph*>(user);\n\tglyph->quadto(control->x, control->y, to->x, to->y);\n\treturn 0;\n}\n\n\nstatic int cubicto (FTVectorPtr control1, FTVectorPtr control2, FTVectorPtr to, void *user) {\n\tauto glyph = static_cast<Glyph*>(user);\n\tglyph->cubicto(control1->x, control1->y, control2->x, control2->y, to->x, to->y);\n\treturn 0;\n}\n\n\n/** Traces the outline of a glyph by calling the corresponding \"drawing\" functions.\n *  Each glyph is composed of straight lines, quadratic or cubic Bézier curves.\n *  This function creates a Glyph object representing these graphics segments.\n *  @param[in] face FreeType object representing the font to scan\n *  @param[in] font corresponding Font object providing additional data\n *  @param[in] index index of the glyph to be traced\n *  @param[out] glyph resulting Glyph object containing the graphics segments\n *  @param[in] scale if true the current pt size will be considered otherwise the plain TrueType units are used.\n *  @return false on errors */\nstatic bool trace_outline (FT_Face face, const Font *font, int index, Glyph &glyph, bool scale) {\n\tif (face) {\n\t\tif (FT_Load_Glyph(face, index, scale ? FT_LOAD_DEFAULT : FT_LOAD_NO_SCALE)) {\n\t\t\tMessage::estream(true) << \"can't load glyph \" << int(index) << '\\n';\n\t\t\treturn false;\n\t\t}\n\t\tif (face->glyph->format != FT_GLYPH_FORMAT_OUTLINE) {\n\t\t\tMessage::estream(true) << \"no outlines found in glyph \" << int(index) << '\\n';\n\t\t\treturn false;\n\t\t}\n\t\tFT_Outline outline = face->glyph->outline;\n\t\t// apply style parameters if set\n\t\tif (font) {\n\t\t\tif (const FontStyle *style = font->style()) {\n\t\t\t\tFT_Matrix matrix = {to_16dot16(style->extend), to_16dot16(style->slant), 0, to_16dot16(1)};\n\t\t\t\tFT_Outline_Transform(&outline, &matrix);\n\t\t\t\tif (style->bold != 0)\n\t\t\t\t\tFT_Outline_Embolden(&outline, style->bold/font->scaledSize()*face->units_per_EM);\n\t\t\t}\n\t\t}\n\t\tconstexpr FT_Outline_Funcs funcs = {moveto, lineto, quadto, cubicto, 0, 0};\n\t\tFT_Outline_Decompose(&outline, &funcs, &glyph);\n\t\treturn true;\n\t}\n\tMessage::wstream(true) << \"can't trace outline (no font selected)\\n\";\n\treturn false;\n}\n\n\n/** Traces the outline of a glyph by calling the corresponding \"drawing\" functions.\n *  Each glyph is composed of straight lines, quadratic or cubic Bézier curves.\n *  This function creates a Glyph object representing these graphics segments.\n *  @param[in] c the glyph of this character will be traced\n *  @param[out] glyph resulting Glyph object containing the graphics segments\n *  @param[in] scale if true the current pt size will be considered otherwise the plain TrueType units are used.\n *  @return false on errors */\nbool FontEngine::traceOutline (const Character &c, Glyph &glyph, bool scale) const {\n\treturn trace_outline(_currentFace, _currentFont, charIndex(c), glyph, scale);\n}"
  },
  {
    "path": "src/FontEngine.hpp",
    "content": "/*************************************************************************\n** FontEngine.hpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FONTENGINE_HPP\n#define FONTENGINE_HPP\n\n#include <ft2build.h>\n#include FT_FREETYPE_H\n#include FT_CID_H\n#include <map>\n#include <memory>\n#include <string>\n#include <vector>\n#include \"Character.hpp\"\n#include \"CharMapID.hpp\"\n#include \"Glyph.hpp\"\n#include \"NumericRanges.hpp\"\n#include \"RangeMap.hpp\"\n\nclass Font;\n\n/** This class provides methods to handle font files and font data.\n *  It's a wrapper for the Freetype font library. */\nclass FontEngine {\n\tusing CodepointRanges = NumericRanges<uint32_t>;\n\tpublic:\n\t\t~FontEngine ();\n\t\tstatic FontEngine& instance ();\n\t\tstatic std::string version ();\n\t\tbool setFont (const Font &font);\n\t\tconst Font* currentFont () const {return _currentFont;}\n\t\tbool isCIDFont() const;\n\t\tbool hasVerticalMetrics () const;\n\t\tbool traceOutline (const Character &c, Glyph &glyph, bool scale=true) const;\n\t\tconst char* getFamilyName () const;\n\t\tconst char* getStyleName () const;\n\t\tconst char* getPSName () const;\n\t\tstd::string getPSName (const std::string &fname) const;\n\t\tint getUnitsPerEM () const;\n\t\tint getAscender () const;\n\t\tint getDescender () const;\n\t\tint getHAdvance () const;\n\t\tint getHAdvance (const Character &c) const;\n\t\tint getVAdvance (const Character &c) const;\n\t\tint getWidth (const Character &c) const;\n\t\tint getHeight (const Character &c) const;\n\t\tint getDepth (const Character &c) const;\n\t\tint getCharMapIDs (std::vector<CharMapID> &charmapIDs) const;\n\t\tint getNumGlyphs () const;\n\t\tCharMapID setUnicodeCharMap () const;\n\t\tCharMapID setCustomCharMap () const;\n\t\tstd::vector<int> getPanose () const;\n\t\tstd::string getGlyphName (const Character &c) const;\n\t\tint getCharIndexByGlyphName (const char *name) const;\n\t\tbool setCharMap (const CharMapID &charMapID) const;\n\t\tRangeMap buildGidToUnicodeMap () const;\n\t\tstd::unique_ptr<const RangeMap> createCustomToUnicodeMap () const;\n\n\tprotected:\n\t\tFontEngine ();\n\t\tbool setFont (const std::string &fname, int fontindex, const CharMapID &charmapID);\n\t\tint charIndex (const Character &c) const;\n\t\tvoid addCharsByGlyphNames (uint32_t minGID, uint32_t maxGID, RangeMap &charmap, CodepointRanges &ucp) const;\n\n\tprivate:\n\t\tFT_Face _currentFace = nullptr;\n\t\tFT_Library _library = nullptr;\n\t\tconst Font *_currentFont = nullptr;\n};\n\n#endif"
  },
  {
    "path": "src/FontManager.cpp",
    "content": "/*************************************************************************\n** FontManager.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstring>\n#include <cstdlib>\n#include <fstream>\n#include <set>\n#include \"algorithm.hpp\"\n#include \"CMap.hpp\"\n#include \"Font.hpp\"\n#include \"fonts/Base14Fonts.hpp\"\n#include \"FontEngine.hpp\"\n#include \"FontManager.hpp\"\n#include \"FileFinder.hpp\"\n#include \"FileSystem.hpp\"\n#include \"Message.hpp\"\n#include \"SVGTree.hpp\"\n\nusing namespace std;\n\n\n/** Returns the singleton instance */\nFontManager& FontManager::instance () {\n\tstatic FontManager fm;\n\treturn fm;\n}\n\n\n/** Returns a unique ID that identifies the font.\n *  @param[in] n local font number, as used in DVI and VF files\n *  @return non-negative font ID if font was found, -1 otherwise */\nint FontManager::fontID (int n) const {\n\tif (_vfStack.empty()) {\n\t\tauto it = _num2id.find(n);\n\t\treturn (it == _num2id.end()) ? -1 : it->second;\n\t}\n\tauto vit = _vfnum2id.find(_vfStack.top());\n\tif (vit == _vfnum2id.end())\n\t\treturn -1;\n\tconst Num2IdMap &num2id = vit->second;\n\tauto it = num2id.find(n);\n\treturn (it == num2id.end()) ? -1 : it->second;\n}\n\n\n/** Returns a unique ID that identifies the font. Not the font object but the\n *  font pointer is looked up to get the ID. Thus, two different pointers\n *  referencing different objects of the same font are mapped to different IDs.\n *  @param[in] font pointer to font object to be identified\n *  @return non-negative font ID if font was found, -1 otherwise */\nint FontManager::fontID (const Font *font) const {\n\tauto it = algo::find_if(_fonts, [&](const unique_ptr<Font> &f) {\n\t\treturn f.get() == font;\n\t});\n\treturn it != _fonts.end() ? std::distance(_fonts.begin(), it) : -1;\n}\n\n\n/** Returns a unique ID that identifies the font.\n *  @param[in] name name of font to be identified, e.g. cmr10\n *  @return non-negative font ID if font was found, -1 otherwise */\nint FontManager::fontID (const string &name) const {\n\tauto it = _name2id.find(name);\n\tif (it == _name2id.end())\n\t\treturn -1;\n\treturn it->second;\n}\n\n\nint FontManager::fontID (string name, double ptsize) const {\n\tstd::replace(name.begin(), name.end(), '+', '-');\n\tauto it = algo::find_if(_fonts, [&](const unique_ptr<Font> &f) {\n\t\tauto nativeFont = font_cast<NativeFont*>(f.get());\n\t\treturn nativeFont && nativeFont->name() == name && nativeFont->scaledSize() == ptsize;\n\t});\n\treturn it != _fonts.end() ? std::distance(_fonts.begin(), it) : -1;\n}\n\n\nint FontManager::fontnum (int id) const {\n\tif (id >= 0 && size_t(id) < _fonts.size()) {\n\t\tconst Num2IdMap *idmap = &_num2id;\n\t\tif (!_vfStack.empty()) {\n\t\t\tauto it = _vfnum2id.find(_vfStack.top());\n\t\t\tidmap = it != _vfnum2id.end() ? &it->second : nullptr;\n\t\t}\n\t\tif (idmap) {\n\t\t\tauto it = algo::find_if(*idmap, [&](const pair<uint32_t,int> &entry) {\n\t\t\t\treturn entry.second == id;\n\t\t\t});\n\t\t\tif (it != idmap->end())\n\t\t\t\treturn it->first;\n\t\t}\n\t}\n\treturn -1;\n}\n\n\nint FontManager::vfFirstFontNum (const VirtualFont *vf) const {\n\tauto it = _vfFirstFontNumMap.find(vf);\n\treturn (it == _vfFirstFontNumMap.end()) ? -1 : (int) it->second;\n}\n\n\nFont* FontManager::vfFirstFont (const VirtualFont *vf) const {\n\tauto it = _vfFirstFontMap.find(vf);\n\treturn (it == _vfFirstFontMap.end()) ? nullptr : it->second;\n}\n\n\n/** Returns a previously registered font.\n *  @param[in] n local font number, as used in DVI and VF files\n *  @return pointer to font if font was found, 0 otherwise */\nFont* FontManager::getFont (int n) const {\n\tint id = fontID(n);\n\treturn (id < 0) ? nullptr : _fonts[id].get();\n}\n\n\nFont* FontManager::getFont (const string &name) const {\n\tint id = fontID(name);\n\tif (id < 0)\n\t\treturn nullptr;\n\treturn _fonts[id].get();\n}\n\n\nFont* FontManager::getFont (const string &name, double ptsize) {\n\tint id = fontID(name, ptsize);\n\tif (id < 0)\n\t\treturn nullptr;\n\treturn _fonts[id].get();\n}\n\n\nFont* FontManager::getFontById (int id) const {\n\tif (id < 0 || size_t(id) >= _fonts.size())\n\t\treturn nullptr;\n\treturn _fonts[id].get();\n}\n\n\nvector<const Font*> FontManager::getUniqueFonts () const {\n\tvector<const Font*> fonts;\n\tfonts.reserve(_fonts.size());\n\tfor (auto &font : _fonts) {\n\t\tauto it = _usedChars.find(font.get());\n\t\tif (it != _usedChars.end())\n\t\t\tfonts.push_back(font.get());\n\t}\n\treturn fonts;\n}\n\n\n/** Returns the current active virtual font. */\nconst VirtualFont* FontManager::getVF () const {\n\treturn _vfStack.empty() ? nullptr : _vfStack.top();\n}\n\n\nstatic unique_ptr<Font> create_font (const string &filename, const string &fontname, int fontindex, uint32_t checksum, double dsize, double ssize) {\n\tstring ext;\n\tif (const char *dot = strrchr(filename.c_str(), '.'))\n\t\text = util::tolower(dot+1);\n\tif (!ext.empty() && FileFinder::instance().lookup(filename)) {\n\t\tif (ext == \"pfb\")\n\t\t\treturn PhysicalFont::create(fontname, checksum, dsize, ssize, PhysicalFont::Type::PFB);\n\t\tif (ext == \"otf\")\n\t\t\treturn PhysicalFont::create(fontname, checksum, dsize, ssize, PhysicalFont::Type::OTF);\n\t\tif (ext == \"ttf\")\n\t\t\treturn PhysicalFont::create(fontname, checksum, dsize, ssize, PhysicalFont::Type::TTF);\n\t\tif (ext == \"ttc\")\n\t\t\treturn PhysicalFont::create(fontname, fontindex, checksum, dsize, ssize);\n\t\tif (ext == \"vf\")\n\t\t\treturn VirtualFont::create(fontname, checksum, dsize, ssize);\n\t\tif (ext == \"mf\")\n\t\t\treturn PhysicalFont::create(fontname, checksum, dsize, ssize, PhysicalFont::Type::MF);\n\t}\n\treturn nullptr;\n}\n\n\n/** Registers a new font to be managed by the FontManager. If there is\n *  already a registered font assigned to number n, nothing happens.\n *  @param[in] fontnum local font number, as used in DVI and VF files\n *  @param[in] name TFM fontname given in DVI file, e.g. cmr10\n *  @param[in] checksum checksum to be compared with TFM checksum\n *  @param[in] dsize design size in PS point units\n *  @param[in] ssize scaled size in PS point units\n *  @return id of registered font */\nint FontManager::registerFont (uint32_t fontnum, const string &name, uint32_t checksum, double dsize, double ssize) {\n\tint id = fontID(fontnum);\n\tif (id >= 0)\n\t\treturn id;\n\n\tunique_ptr<Font> newfont;\n\tconst int newid = _fonts.size();   // the new font gets this ID\n\tauto it = _name2id.find(name);\n\tif (it != _name2id.end()) {  // font with same name already registered?\n\t\tconst auto &font = _fonts[it->second];\n\t\tnewfont = font->clone(dsize, ssize);\n\t}\n\telse {\n\t\tstring filename = name;\n\t\tint fontindex = 0;\n\t\tconst FontMap::Entry *map_entry = FontMap::instance().lookup(name);\n\t\tif (map_entry) {\n\t\t\tfilename = map_entry->fontname;\n\t\t\tfontindex = map_entry->fontindex;\n\t\t}\n\t\t// try to find font file with the exact given name\n\t\tif (filename.rfind('.') != string::npos)\n\t\t\tnewfont = create_font(filename, name, fontindex, checksum, dsize, ssize);\n\t\telse {\n\t\t\t// try various font file formats if the given file has no extension\n\t\t\tconst char *exts[] = {\"pfb\", \"otf\", \"ttc\", \"ttf\", \"vf\", \"mf\", nullptr};\n\t\t\tfor (const char **p = exts; *p && !newfont; ++p)\n\t\t\t\tnewfont = create_font(filename+\".\"+*p, name, fontindex, checksum, dsize, ssize);\n\t\t}\n\t\tif (newfont) {\n\t\t\tif (!newfont->findAndAssignBaseFontMap())\n\t\t\t\tMessage::wstream(true) << \"no suitable encoding table found for font \" << filename << \"\\n\";\n\t\t\tif (!newfont->verifyChecksums())\n\t\t\t\tMessage::wstream(true) << \"checksum mismatch in font \" << name << '\\n';\n\t\t}\n\t\telse {\n\t\t\t// create dummy font as a placeholder if the proper font is not available\n\t\t\tnewfont = util::make_unique<EmptyFont>(name);\n\t\t\t// print warning message about missing font file (only once for each filename)\n\t\t\tstatic set<string> missing_fonts;\n\t\t\tif (missing_fonts.find(filename) == missing_fonts.end()) {\n\t\t\t\tif (filename.rfind('.') == string::npos)\n\t\t\t\t\tMessage::wstream(true) << \"no font file found for '\" << filename << \"'\\n\";\n\t\t\t\telse\n\t\t\t\t\tMessage::wstream(true) << \"font file '\" << filename << \"' not found\\n\";\n\t\t\t\tmissing_fonts.insert(filename);\n\t\t\t}\n\t\t}\n\t\t_name2id.emplace(name, newid);\n\t}\n\t_fonts.push_back(std::move(newfont));\n\tif (_vfStack.empty())  // register font referenced in dvi file?\n\t\t_num2id[fontnum] = newid;\n\telse {  // register font referenced in vf file\n\t\tconst VirtualFont *vf = _vfStack.top();\n\t\t_vfnum2id[vf][fontnum] = newid;\n\t\t_vfFirstFontNumMap.emplace(vf, fontnum);\n\t\t_vfFirstFontMap.emplace(vf, _fonts.back().get());\n\t}\n\treturn newid;\n}\n\n\n/** Registers a new native font to be managed by the FontManager. If there is\n *  already a registered font assigned to number n, nothing happens.\n *  @param[in] fontnum local font number used in DVI file\n *  @param[in] filename name/path of font file\n *  @param[in] ptsize font size in PS points\n *  @param[in] style font style parameters\n *  @param[in] color global font color\n *  @return global font id */\nint FontManager::registerFont (uint32_t fontnum, const string &filename, double ptsize, const FontStyle &style, Color color) {\n\treturn registerFont(fontnum, filename, 0, ptsize, style, color);\n}\n\n\n/** Registers a new native font to be managed by the FontManager. If there is\n *  already a registered font assigned to number n, nothing happens.\n *  @param[in] fontnum local font number used in DVI file\n *  @param[in] filename name/path of font file\n *  @param[in] fontIndex subfont index\n *  @param[in] ptsize font size in PS points\n *  @param[in] style font style parameters\n *  @param[in] color global font color\n *  @return global font id */\nint FontManager::registerFont (uint32_t fontnum, const string &filename, int fontIndex, double ptsize, const FontStyle &style, Color color) {\n\tint id = fontID(fontnum);\n\tif (id >= 0)\n\t\treturn id;\n\n\tstring fontname = NativeFont::uniqueName(filename, style);\n\tconst char *path = filename.c_str();\n\tunique_ptr<Font> newfont;\n\tconst int newid = _fonts.size();   // the new font gets this ID\n\tauto it = _name2id.find(fontname);\n\tif (it != _name2id.end()) {  // font with same name already registered?\n\t\tif (auto font = font_cast<NativeFont*>(_fonts[it->second].get()))\n\t\t\tnewfont = font->clone(ptsize, style, color);\n\t}\n\telse {\n\t\tif (!FileSystem::exists(path)) {\n\t\t\tconst char *fontFormats[] = {nullptr, \"otf\", \"ttf\"};\n\t\t\tauto it = algo::find_if(fontFormats, [&](const char *format) {\n\t\t\t\treturn FileFinder::instance().lookup(filename, format, false) != nullptr;\n\t\t\t});\n\t\t\tpath = it != end(fontFormats) ? *it : nullptr;\n\t\t}\n\t\tif (path) {\n\t\t\tnewfont.reset(new NativeFontImpl(path, fontIndex, ptsize, style, color));\n\t\t\tnewfont->findAndAssignBaseFontMap();\n\t\t}\n\t\tif (!newfont) {\n\t\t\t// create dummy font as a placeholder if the proper font is not available\n\t\t\tnewfont = util::make_unique<EmptyFont>(filename);\n\t\t\t// print warning message about missing font file (only once for each filename)\n\t\t\tstatic set<string> missing_fonts;\n\t\t\tif (missing_fonts.find(filename) == missing_fonts.end()) {\n\t\t\t\tMessage::wstream(true) << \"font file '\" << filename << \"' not found\\n\";\n\t\t\t\tmissing_fonts.insert(filename);\n\t\t\t}\n\t\t}\n\t\t_name2id.emplace(fontname, newid);\n\t}\n\t_fonts.push_back(std::move(newfont));\n\t_num2id[fontnum] = newid;\n\treturn newid;\n}\n\n\n/** Registers a native font that is referenced by its name instead of a DVI font number.\n *  @param[in] fname filename/path of the font file\n *  @param[in] fontname font name used if the font file doesn't provide one\n *  @param[in] ptsize font size in PS points\n *  return global ID assigned to the font */\nint FontManager::registerFont (const string &fname, string fontname, double ptsize) {\n\tif (fname.empty())\n\t\treturn -1;\n\tif (fname.size() > 6 && fname.substr(0,6) == \"sys://\") {\n\t\tfontname = fname.substr(6);\n\t\tif (!find_base14_font(fontname))\n\t\t\treturn -1;\n\t}\n\telse if (!FileSystem::exists(fname) || (fontname.empty() && (fontname = FontEngine::instance().getPSName(fname)).empty()))\n\t\treturn -1;\n\tint id = fontID(fontname, ptsize);\n\tif (id >= 0)\n\t\treturn id;\n\tunique_ptr<NativeFont> nativeFont;\n\tid = fontID(fontname);\n\tif (id < 0) {\n\t\tnativeFont = util::make_unique<NativeFontImpl>(fname, fontname, ptsize);\n\t\t_name2id.emplace(std::move(fontname), int(_fonts.size()));\n\t}\n\telse {\n\t\tauto *nf = font_cast<NativeFont*>(getFontById(id));\n\t\tnativeFont = unique_ptr<NativeFont>(nf->clone(ptsize, FontStyle(), Color::BLACK));\n\t}\n\tid = int(_fonts.size());\n\t_fonts.push_back(std::move(nativeFont));\n\treturn id;\n}\n\n\n/** Enters a new virtual font frame.\n *  This method must be called before processing a VF character.\n *  @param[in] vf virtual font */\nvoid FontManager::enterVF (VirtualFont *vf) {\n\tif (vf)\n\t\t_vfStack.push(vf);\n}\n\n\n/** Leaves a previously entered virtual font frame. */\nvoid FontManager::leaveVF () {\n\tif (!_vfStack.empty())\n\t\t_vfStack.pop();\n}\n\n\n/** Assigns a sequence of DVI commands to a char code.\n * @param[in] c character code\n * @param[in] dvi DVI commands that describe character c */\nvoid FontManager::assignVFChar (int c, vector<char> dvi) {\n\tif (!_vfStack.empty())\n\t\t_vfStack.top()->assignChar(c, std::move(dvi));\n}\n\n\nvoid FontManager::addUsedChar (const Font &font, int c) {\n\t_usedChars[font.uniqueFont()].insert(c);\n\tif (!SVGTree::USE_FONTS)\n\t\t_usedChars[&font].insert(c);\n\t_usedFonts.insert(&font);\n}\n\n\nvoid FontManager::resetUsedChars () {\n\t_usedChars.clear();\n\t_usedFonts.clear();\n}\n\n\nostream& FontManager::write (ostream &os, Font *font, int level) {\n#if 0\n\tif (font) {\n\t\tint id = -1;\n\t\tfor (int i=0; i < _fonts.size() && id < 0; i++)\n\t\t\tif (_fonts[i] == font)\n\t\t\t\tid = i;\n\n\t\tVirtualFont *vf = font_cast<VirtualFont*>(font);\n\t\tfor (int j=0; j < level+1; j++)\n\t\t\tos << \"  \";\n\t\tos << \"id \" << id\n\t\t\t<< \" fontnum \" << fontnum(id) << \" \"\n\t\t\t<< (vf ? \"VF\" : \"PF\") << \" \"\n\t\t\t<< font->name()\n\t\t\t<< endl;\n\n\t\tif (vf) {\n\t\t\tenterVF(vf);\n\t\t\tconst Num2IdMap &num2id = _vfnum2id.find(vf)->second;\n\t\t\tfor (const auto &entry : num2id) {\n\t\t\t\tFont *font = _fonts[entry.second];\n\t\t\t\twrite(os, font, level+1);\n\t\t\t}\n\t\t\tleaveVF();\n\t\t}\n\t}\n\telse {\n\t\tfor (int i=0; i < _fonts.size(); i++)\n\t\t\twrite(os, _fonts[i], level);\n\t\tos << endl;\n\t}\n#endif\n\treturn os;\n}\n"
  },
  {
    "path": "src/FontManager.hpp",
    "content": "/*************************************************************************\n** FontManager.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FONTMANAGER_HPP\n#define FONTMANAGER_HPP\n\n#include <memory>\n#include <ostream>\n#include <set>\n#include <string>\n#include <stack>\n#include <unordered_map>\n#include <unordered_set>\n#include <vector>\n#include \"Color.hpp\"\n#include \"FontStyle.hpp\"\n\n\nclass FileFinder;\nclass Font;\nclass VirtualFont;\n\n/** This class provides methods for easy DVI font handling.\n *  DVI and VF files use local font numbers to reference fonts. For SVG output\n *  we need a single list with unique IDs of all physical fonts. Characters of\n *  virtual fonts are completely replaced by their DVI description so they don't\n *  appear anywhere in the output. */\nclass FontManager {\n\tusing CharMap = std::unordered_map<const Font*, std::set<int>>;\n\tusing FontSet = std::unordered_set<const Font*>;\n\tusing Num2IdMap = std::unordered_map<uint32_t, int>;\n\tusing Name2IdMap = std::unordered_map<std::string, int>;\n\tusing VfNum2IdMap = std::unordered_map<const VirtualFont*, Num2IdMap>;\n\tusing VfFirstFontNumMap = std::unordered_map<const VirtualFont*, uint32_t>;\n\tusing VfFirstFontMap = std::unordered_map<const VirtualFont*, Font*>;\n\tusing VfStack = std::stack<VirtualFont*>;\n\n\tpublic:\n\t\tstatic FontManager& instance ();\n\t\tint registerFont (uint32_t fontnum, const std::string &fontname, uint32_t checksum, double dsize, double scale);\n\t\tint registerFont (uint32_t fontnum, const std::string &fname, double ptsize, const FontStyle &style, Color color);\n\t\tint registerFont (uint32_t fontnum, const std::string &fname, int fontIndex, double ptsize, const FontStyle &style, Color color);\n\t\tint registerFont (const std::string &fname, std::string fontname, double ptsize);\n\t\tFont* getFont (int n) const;\n\t\tFont* getFont (const std::string &name) const;\n\t\tFont* getFont (const std::string &name, double ptsize);\n\t\tFont* getFontById (int id) const;\n\t\tstd::vector<const Font*> getUniqueFonts () const;\n\t\tconst VirtualFont* getVF () const;\n\t\tint fontID (int n) const;\n\t\tint fontID (const Font *font) const;\n\t\tint fontID (const std::string &name) const;\n\t\tint fontID (std::string name, double ptsize) const;\n\t\tint fontnum (int id) const;\n\t\tint vfFirstFontNum (const VirtualFont *vf) const;\n\t\tFont* vfFirstFont (const VirtualFont *vf) const;\n\t\tvoid enterVF (VirtualFont *vf);\n\t\tvoid leaveVF ();\n\t\tvoid assignVFChar (int c, std::vector<char> dvi);\n\t\tvoid addUsedChar (const Font &font, int c);\n\t\tvoid resetUsedChars ();\n\t\tCharMap& getUsedChars ()  {return _usedChars;}\n\t\tFontSet& getUsedFonts ()  {return _usedFonts;}\n\t\tstd::ostream& write (std::ostream &os, Font *font=nullptr, int level=0);\n\n\tprotected:\n\t\tFontManager () =default;\n\n\tprivate:\n\t\tstd::vector<std::unique_ptr<Font>> _fonts; ///< all registered Fonts\n\t\tNum2IdMap      _num2id;    ///< DVI font number -> fontID\n\t\tName2IdMap     _name2id;   ///< fontname -> fontID\n\t\tVfNum2IdMap    _vfnum2id;\n\t\tVfStack        _vfStack;   ///< stack of currently processed virtual fonts\n\t\tVfFirstFontNumMap _vfFirstFontNumMap; ///< VF -> local font number of first font defined in VF\n\t\tVfFirstFontMap _vfFirstFontMap;       ///< VF -> first font defined\n\t\tCharMap _usedChars;\n\t\tFontSet _usedFonts;\n};\n\n#endif\n"
  },
  {
    "path": "src/FontMap.cpp",
    "content": "/*************************************************************************\n** FontMap.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <algorithm>\n#include <cstring>\n#include <fstream>\n#include <limits>\n#include <vector>\n#include \"CMap.hpp\"\n#include \"Directory.hpp\"\n#include \"FileFinder.hpp\"\n#include \"FilePath.hpp\"\n#include \"FontManager.hpp\"\n#include \"FontMap.hpp\"\n#include \"MapLine.hpp\"\n#include \"Message.hpp\"\n#include \"Subfont.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n/** Returns the singleton instance. */\nFontMap& FontMap::instance() {\n\tstatic FontMap fontmap;\n\treturn fontmap;\n}\n\n\n/** Reads and evaluates a single font map file.\n *  @param[in] fname path/name of map file to read (it's not looked up via FileFinder)\n *  @param[in] mode selects how to integrate the map file entries into the global map tree\n *  @param[in,out] includedFilesRef pointer to sequence of (nested) file paths currently being included\n *  @return true if file could be opened */\nbool FontMap::read (const string &fname, FontMap::Mode mode, vector<string> *includedFilesRef) {\n\tifstream ifs(fname);\n\tif (!ifs)\n\t\treturn false;\n\n\tunique_ptr<vector<string>> includedFilesStore;\n\tint lineNumber = 1;\n\twhile (ifs) {\n\t\ttry {\n\t\t\tint c = ifs.peek();\n\t\t\tif (c < 0 || strchr(\"\\n&%;*\", c))  // comment or empty line?\n\t\t\t\tifs.ignore(numeric_limits<int>::max(), '\\n');\n\t\t\telse if (c != '#') {\n\t\t\t\tMapLine mapline(ifs);\n\t\t\t\tapply(mapline, mode);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchar line[256];\n\t\t\t\tifs.getline(line, 256);\n\t\t\t\tif (strncmp(line, \"#include \", 9) == 0 || strncmp(line, \"#includefirst \", 14) == 0) {\n\t\t\t\t\tFilePath path(fname);\n\t\t\t\t\tif (!includedFilesRef && !includedFilesStore) {  // not yet inside an include chain?\n\t\t\t\t\t\tincludedFilesStore = util::make_unique<vector<string>>();\n\t\t\t\t\t\tincludedFilesRef = includedFilesStore.get();\n\t\t\t\t\t\tincludedFilesRef->emplace_back(path.absolute());\n\t\t\t\t\t}\n\t\t\t\t\tif (strncmp(line, \"#include \", 9) == 0)\n\t\t\t\t\t\tinclude(line+9, path, *includedFilesRef);\n\t\t\t\t\telse\n\t\t\t\t\t\tincludefirst(line+14, path, *includedFilesRef);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlineNumber++;\n\t\t}\n\t\tcatch (const MapLineException &e) {\n\t\t\tMessage::wstream(true) << FilePath(fname).shorterAbsoluteOrRelative()\n\t\t\t\t<< \", line \" << lineNumber << \": \" << e.what() << '\\n';\n\t\t}\n\t\tcatch (const SubfontException &e) {\n\t\t\tMessage::wstream(true) << FilePath(e.filename()).shorterAbsoluteOrRelative();\n\t\t\tif (e.lineno() > 0)\n\t\t\t\tMessage::wstream(false) << \", line \" << e.lineno();\n\t\t\tMessage::wstream(false) << e.what() << '\\n';\n\t\t}\n\t}\n\treturn true;\n}\n\n\n/** Reads and evaluates a single font map file.\n *  @param[in] fname path/name of map file to read (it's not looked up via FileFinder)\n *  @param[in] modechar character '+', '-', or '=' to determine how the map file entries are merged into the global map tree\n *  @param[in,out] includedFilesRef pointer to sequence of (nested) file paths currently being included\n *  @return true if file could be opened */\nbool FontMap::read (const string &fname, char modechar, vector<string> *includedFilesRef) {\n\tMode mode;\n\tswitch (modechar) {\n\t\tcase '=': mode = Mode::REPLACE; break;\n\t\tcase '-': mode = Mode::REMOVE; break;\n\t\tdefault : mode = Mode::APPEND;\n\t}\n\treturn read(fname, mode, includedFilesRef);\n}\n\n\n/** Evaluates an #include statement and processes the contents of the included map file.\n *  @param[in] line parameters of #include statement (optional mode character and file name/path\n *  @param[in] includingFile path of file containing the #include statement\n *  @param[in,out] includedFiles sequence of (nested) file paths currently being included */\nvoid FontMap::include (string line, const FilePath &includingFile, vector<string> &includedFiles) {\n\tauto it = line.begin();\n\twhile (it != line.end() && isspace(*it))\n\t\t++it;\n\tchar modechar = '+';\n\tif (it != line.end() && strchr(\"+-=\", *it))\n\t\tmodechar = *it++;\n   string fname = util::trim(line.substr(it-line.begin()));\n\tif (fname.size() > 1 && fname[0] == '\"' && fname.back() == '\"')\n\t\tfname = fname.substr(1, fname.size()-2);   // strip surrounding quotes\n\tif (fname.empty())\n\t\tthrow FontMapException(\"file name missing after #include\");\n\n\tconst char *path;\n\tauto pos = fname.find('/');\n\tif (pos == 0)  // absolute path given?\n\t\tpath = fname.c_str();\n\telse if (pos == string::npos) {  // filename only given?\n\t\tpath = FileFinder::instance().lookup(fname);\n\t\tif (!path)\n\t\t\tthrow FontMapException(\"include file '\"+fname+\"' not found\", FontMapException::Cause::FILE_ACCESS_ERROR);\n\t}\n\telse {\n\t\tfname = FilePath(fname, FilePath::PT_FILE, includingFile.absolute(false)).absolute();\n\t\tpath = fname.c_str();\n\t}\n\tif (find(includedFiles.begin(), includedFiles.end(), path) != includedFiles.end())\n\t\tthrow FontMapException(\"circular inclusion of file '\"+string(FilePath(path).shorterAbsoluteOrRelative())+\"'\");\n\tincludedFiles.emplace_back(path);\n\tif (!read(path, modechar, &includedFiles))\n\t\tthrow FontMapException(\"include file '\"+fname+\"' not found\", FontMapException::Cause::FILE_ACCESS_ERROR);\n\tincludedFiles.pop_back();\n}\n\n\nvoid FontMap::includefirst (string line, const FilePath &includingFile, vector<string> &includedFiles) {\n\tif (_firstincludeMode != FirstIncludeMode::OFF)\n\t\treturn;\n\ttry {\n\t\t_firstincludeMode = FirstIncludeMode::ACTIVE;\n\t\tinclude(std::move(line), includingFile, includedFiles);\n\t\t_firstincludeMode = FirstIncludeMode::DONE;\n\t}\n\tcatch (FontMapException &e) {\n\t\tif (e.cause() != FontMapException::Cause::FILE_ACCESS_ERROR)\n\t\t\tthrow;\n\t\t_firstincludeMode = FirstIncludeMode::OFF;\n\t}\n}\n\n\n/** Applies a mapline according to the given mode (append, remove, replace).\n *  @param[in] mapline the mapline to be applied\n *  @param[in] mode mode to use\n *  @return true in case of success */\nbool FontMap::apply (const MapLine& mapline, FontMap::Mode mode) {\n\tswitch (mode) {\n\t\tcase Mode::APPEND:\n\t\t\treturn append(mapline);\n\t\tcase Mode::REMOVE:\n\t\t\treturn remove(mapline);\n\t\tdefault:\n\t\t\treturn replace(mapline);\n\t}\n}\n\n\n/** Applies a mapline according to the given mode (append, remove, replace).\n *  @param[in] mapline the mapline to be applied\n *  @param[in] modechar character that denotes the mode (+, -, or =)\n *  @return true in case of success */\nbool FontMap::apply (const MapLine& mapline, char modechar) {\n\tMode mode;\n\tswitch (modechar) {\n\t\tcase '=': mode = Mode::REPLACE; break;\n\t\tcase '-': mode = Mode::REMOVE; break;\n\t\tdefault : mode = Mode::APPEND;\n\t}\n\treturn apply(mapline, mode);\n}\n\n\n/** Reads and evaluates a sequence of map files. Each map file is looked up in the local\n *  directory and the TeX file tree.\n *  @param[in] fname_seq comma-separated list of map file names\n *  @param[in] warn true: print warning if a file couldn't be read\n *  @return true if at least one of the given map files was found */\nbool FontMap::read (const string &fname_seq, bool warn) {\n\tbool found = false;\n\tstring::size_type left=0;\n\twhile (left < fname_seq.length()) {\n\t\tchar modechar = fname_seq[left];\n\t\tif (strchr(\"+-=\", modechar))\n\t\t\tleft++;\n\t\telse\n\t\t\tmodechar = '+';\n\t\tstring fname;\n\t\tauto right = fname_seq.find(',', left);\n\t\tif (right != string::npos)\n\t\t\tfname = fname_seq.substr(left, right-left);\n\t\telse {\n\t\t\tfname = fname_seq.substr(left);\n\t\t\tright = fname_seq.length();\n\t\t}\n\t\tif (!fname.empty()) {\n\t\t\tif (!read(fname, modechar)) {\n\t\t\t\tif (const char *path = FileFinder::instance().lookup(fname, false))\n\t\t\t\t\tfound = found || read(path, modechar);\n\t\t\t\telse if (warn)\n\t\t\t\t\tMessage::wstream(true) << \"map file '\" << fname << \"' not found\\n\";\n\t\t\t}\n\t\t}\n\t\tleft = right+1;\n\t}\n\treturn found;\n}\n\n\n/** Appends given map line data to the font map if there is no entry for the corresponding\n *  font in the map yet.\n *  @param[in] mapline parsed font data\n *  @return true if data has been appended */\nbool FontMap::append (const MapLine &mapline) {\n\tbool appended = false;\n\tif (!mapline.texname().empty()) {\n\t\tif (!mapline.fontfname().empty() || !mapline.encname().empty()) {\n\t\t\tvector<Subfont*> subfonts;\n\t\t\tif (mapline.sfd())\n\t\t\t\tsubfonts = mapline.sfd()->subfonts();\n\t\t\telse\n\t\t\t\tsubfonts.push_back(nullptr);\n\t\t\tfor (Subfont *subfont : subfonts) {\n\t\t\t\tstring fontname = mapline.texname()+(subfont ? subfont->id() : \"\");\n\t\t\t\tauto it = _entries.find(fontname);\n\t\t\t\tif (it == _entries.end()) {\n\t\t\t\t\t_entries.emplace(fontname, util::make_unique<Entry>(mapline, subfont));\n\t\t\t\t\tappended = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn appended;\n}\n\n\n/** Replaces the map data of the given font.\n *  If the font is locked (because it's already in use) nothing happens.\n *  @param[in] mapline parsed font data\n *  @return true if data has been replaced */\nbool FontMap::replace (const MapLine &mapline) {\n\tif (mapline.texname().empty())\n\t\treturn false;\n\tif (mapline.fontfname().empty() && mapline.encname().empty())\n\t\treturn remove(mapline);\n\n\tvector<Subfont*> subfonts;\n\tif (mapline.sfd())\n\t\tsubfonts = mapline.sfd()->subfonts();\n\telse\n\t\tsubfonts.push_back(nullptr);\n\tfor (Subfont *subfont : subfonts) {\n\t\tstring fontname = mapline.texname()+(subfont ? subfont->id() : \"\");\n\t\tauto it = _entries.find(fontname);\n\t\tif (it == _entries.end())\n\t\t\t_entries.emplace(fontname, util::make_unique<Entry>(mapline, subfont));\n\t\telse if (!it->second->locked)\n\t\t\t*it->second = Entry(mapline, subfont);\n\t}\n\treturn true;\n}\n\n\n/** Removes the map entry of the given font.\n *  If the font is locked (because it's already in use) nothing happens.\n *  @param[in] mapline parsed font data\n *  @return true if entry has been removed */\nbool FontMap::remove (const MapLine &mapline) {\n\tbool removed = false;\n\tif (!mapline.texname().empty()) {\n\t\tvector<Subfont*> subfonts;\n\t\tif (mapline.sfd())\n\t\t\tsubfonts = mapline.sfd()->subfonts();\n\t\telse\n\t\t\tsubfonts.push_back(nullptr);\n\t\tfor (const Subfont *subfont : subfonts) {\n\t\t\tstring fontname = mapline.texname()+(subfont ? subfont->id() : \"\");\n\t\t\tauto it = _entries.find(fontname);\n\t\t\tif (it != _entries.end() && !it->second->locked) {\n\t\t\t\t_entries.erase(it);\n\t\t\t\tremoved = true;\n\t\t\t}\n\t\t}\n\t}\n\treturn removed;\n}\n\n\nostream& FontMap::write (ostream &os) const {\n\tfor (const auto &entry : _entries)\n\t\tos << entry.first << \" -> \" << entry.second->fontname << \" [\" << entry.second->encname << \"]\\n\";\n\treturn os;\n}\n\n\n/** Reads and evaluates all map files in the given directory.\n *  @param[in] dirname path to directory containing the map files to be read */\nvoid FontMap::readdir (const string &dirname) {\n\tDirectory dir(dirname);\n\twhile (const char *fname = dir.read(Directory::ET_FILE)) {\n\t\tif (strlen(fname) >= 4 && strcmp(fname+strlen(fname)-4, \".map\") == 0) {\n\t\t\tstring path = dirname + \"/\" + fname;\n\t\t\tread(path);\n\t\t}\n\t}\n}\n\n\n/** Returns name of font that is mapped to a given font.\n * @param[in] fontname name of font whose mapped name is retrieved\n * @returns name of mapped font */\nconst FontMap::Entry* FontMap::lookup (const string &fontname) const {\n\tauto it = _entries.find(fontname);\n\tif (it == _entries.end())\n\t\treturn nullptr;\n\treturn it->second.get();\n}\n\n\n/** Sets the lock flag for the given font in order to avoid changing the map data of this font.\n *  @param[in] fontname name of font to be locked */\nvoid FontMap::lockFont (const string& fontname) {\n\tauto it = _entries.find(fontname);\n\tif (it != _entries.end())\n\t\tit->second->locked = true;\n}\n\n\n/** Removes all (unlocked) entries from the font map.\n *  @param[in] unlocked_only if true, only unlocked entries are removed */\nvoid FontMap::clear (bool unlocked_only) {\n\tif (!unlocked_only)\n\t\t_entries.clear();\n\telse {\n\t\tauto it=_entries.begin();\n\t\twhile (it != _entries.end()) {\n\t\t\tif (it->second->locked)\n\t\t\t\t++it;\n\t\t\telse\n\t\t\t\tit = _entries.erase(it);\n\t\t}\n\t}\n}\n\n/////////////////////////////////////////////////\n\nFontMap::Entry::Entry (const MapLine &mapline, Subfont *sf)\n\t: fontname(mapline.fontfname()), encname(mapline.encname()), subfont(sf), fontindex(mapline.fontindex()),\n\t  locked(false), style(mapline.bold(), mapline.extend(), mapline.slant())\n{\n}\n"
  },
  {
    "path": "src/FontMap.hpp",
    "content": "/*************************************************************************\n** FontMap.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FONTMAP_HPP\n#define FONTMAP_HPP\n\n#include <memory>\n#include <ostream>\n#include <string>\n#include <unordered_map>\n#include <vector>\n#include \"FontStyle.hpp\"\n#include \"MapLine.hpp\"\n#include \"MessageException.hpp\"\n\nclass FilePath;\nstruct FontEncoding;\nclass Subfont;\n\nclass FontMap {\n\tpublic:\n\t\tstruct Entry {\n\t\t\texplicit Entry (const MapLine &mapline, Subfont *subfont=nullptr);\n\t\t\tEntry (const Entry &entry) =delete;\n\t\t\tEntry (Entry &&entry) =default;\n\t\t\tEntry& operator = (Entry &&entry) =default;\n\t\t\tstd::string fontname; ///< target font name\n\t\t\tstd::string encname;  ///< name of font encoding\n\t\t\tSubfont *subfont;\n\t\t\tint fontindex;        ///< index of font in multi-font file\n\t\t\tbool locked;\n\t\t\tFontStyle style;\n\t\t};\n\n\tpublic:\n\t\tenum class Mode {APPEND, REMOVE, REPLACE};\n\t\tenum class FirstIncludeMode {OFF, ACTIVE, DONE};\n\n\t\tstatic FontMap& instance ();\n\t\tbool read (const std::string &fname, Mode mode, std::vector<std::string> *includedFilesRef=nullptr);\n\t\tbool read (const std::string &fname, char modechar, std::vector<std::string> *includedFilesRef=nullptr);\n\t\tbool read (const std::string &fname_seq, bool warn=false);\n\t\tvoid readdir (const std::string &dirname);\n\t\tbool apply (const MapLine &mapline, Mode mode);\n\t\tbool apply (const MapLine &mapline, char modechar);\n\t\tbool append (const MapLine &mapline);\n\t\tbool replace (const MapLine &mapline);\n\t\tbool remove (const MapLine &mapline);\n\t\tvoid lockFont (const std::string &fontname);\n\t\tvoid clear (bool unlocked_only=false);\n\t\tstd::ostream& write (std::ostream &os) const;\n\t\tconst Entry* lookup (const std::string &fontname) const;\n\n\tprotected:\n\t\tFontMap () =default;\n\t\tvoid include (std::string line, const FilePath &includingFile, std::vector<std::string> &includedFiles);\n\t\tvoid includefirst (std::string line, const FilePath &includingFile, std::vector<std::string> &includedFiles);\n\n\tprivate:\n\t\tstd::unordered_map<std::string,std::unique_ptr<Entry>> _entries;\n\t\tFirstIncludeMode _firstincludeMode = FirstIncludeMode::OFF;\n};\n\nclass FontMapException : public MapLineException {\n\tpublic:\n\t\tenum class Cause {UNSPECIFIED, FILE_ACCESS_ERROR};\n\n\t\tFontMapException (const std::string &msg, Cause cause) : MapLineException(msg), _cause(cause) {}\n\t\texplicit FontMapException (const std::string &msg) : FontMapException(msg, Cause::UNSPECIFIED) {}\n\t\tCause cause () const {return _cause;}\n\n\tprivate:\n\t\tCause _cause = FontMapException::Cause::UNSPECIFIED;\n};\n\n#endif\n"
  },
  {
    "path": "src/FontMetrics.cpp",
    "content": "/*************************************************************************\n** FontMetrics.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <fstream>\n#include <memory>\n#include \"FileFinder.hpp\"\n#include \"FontMetrics.hpp\"\n#include \"JFM.hpp\"\n#include \"OFM.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\nstatic inline uint16_t read_uint16 (istream &is) {\n\tuint16_t val = 256*is.get();\n\treturn val + is.get();\n}\n\n\n/** Reads the font metrics for a given font name from a TFM, JFM, or OFM file.\n *  @param[in] fontname name of font to get the metrics for.\n *  @return pointer to object that holds the font metrics, or nullptr if no matching file was found */\nunique_ptr<FontMetrics> FontMetrics::read (const string &fontname) {\n\tunique_ptr<FontMetrics> metrics;\n\tconst char *path = FileFinder::instance().lookup(fontname + \".ofm\", false);\n\tif (!path)\n\t\tpath = FileFinder::instance().lookup(fontname + \".tfm\");\n\tifstream ifs(path, ios::binary);\n\tif (ifs) {\n\t\tauto id = read_uint16(ifs);\n\t\tif (id == 0) {   // OFM?\n\t\t\tauto ofmLevel = read_uint16(ifs);\n\t\t\tif (ofmLevel == 0)\n\t\t\t\tmetrics = util::make_unique<OFM0>();\n\t\t\telse if (ofmLevel == 1)\n\t\t\t\tmetrics = util::make_unique<OFM1>();\n\t\t\telse\n\t\t\t\tthrow FontMetricException(\"OFM level \"+to_string(ofmLevel)+\" not supported\");\n\t\t}\n\t\telse if (id == 9 || id == 11)  // Japanese font metric file?\n\t\t\tmetrics = util::make_unique<JFM>();\n\t\telse\n\t\t\tmetrics = util::make_unique<TFM>();\n\t\tmetrics->read(ifs);\n\t}\n\treturn metrics;\n}\n"
  },
  {
    "path": "src/FontMetrics.hpp",
    "content": "/*************************************************************************\n** FontMetrics.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FONTMETRICS_HPP\n#define FONTMETRICS_HPP\n\n#include <cstdint>\n#include <istream>\n#include <memory>\n#include <string>\n#include \"MessageException.hpp\"\n\nstruct FontMetrics {\n\tvirtual ~FontMetrics () =default;\n\tvirtual void read (std::istream &is) {}\n\tvirtual double getDesignSize () const =0;\n\tvirtual double getCharWidth (int c) const =0;\n\tvirtual double getCharHeight (int c) const =0;\n\tvirtual double getCharDepth (int c) const =0;\n\tvirtual double getItalicCorr (int c) const =0;\n\tvirtual double getSpace () const =0;\n\tvirtual double getSpaceStretch () const =0;\n\tvirtual double getSpaceShrink () const =0;\n\tvirtual double getQuad () const =0;\n\tvirtual double getAscent () const =0;\n\tvirtual double getDescent () const =0;\n\tvirtual bool verticalLayout () const =0;\n\tvirtual uint32_t getChecksum () const =0;\n\tvirtual uint32_t firstChar () const =0;\n\tvirtual uint32_t lastChar () const =0;\n\tvirtual bool isJFM () const {return false;}\n\tvirtual bool isOFM () const {return false;}\n\tstatic std::unique_ptr<FontMetrics> read (const std::string &fontname);\n};\n\n\nstruct NullFontMetrics : FontMetrics {\n\tdouble getDesignSize () const override      {return 1;}\n\tdouble getCharWidth (int c) const override  {return 0;}\n\tdouble getCharHeight (int c) const override {return 0;}\n\tdouble getCharDepth (int c) const override  {return 0;}\n\tdouble getItalicCorr (int c) const override {return 0;}\n\tdouble getSpace () const override           {return 0;}\n\tdouble getSpaceStretch () const override    {return 0;}\n\tdouble getSpaceShrink () const override     {return 0;}\n\tdouble getQuad () const override            {return 0;}\n\tdouble getAscent () const override          {return 0;}\n\tdouble getDescent () const override         {return 0;}\n\tbool verticalLayout () const override       {return false;}\n\tuint32_t getChecksum () const override      {return 0;}\n\tuint32_t firstChar () const override        {return 0;}\n\tuint32_t lastChar () const override         {return 0;}\n};\n\n\nstruct FontMetricException : MessageException {\n\texplicit FontMetricException (const std::string &msg) : MessageException(msg) {}\n};\n\n#endif\n"
  },
  {
    "path": "src/FontStyle.hpp",
    "content": "/*************************************************************************\n** FontStyle.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FONTSTYLE\n#define FONTSTYLE\n\nstruct FontStyle {\n\tFontStyle () =default;\n\tFontStyle (float b, float e, float s) : bold(b), extend(e), slant(s) {}\n\tdouble bold=0;   ///< stroke width in pt used to draw the glyph outlines\n\tdouble extend=1; ///< factor to stretch/shrink the glyphs horizontally\n\tdouble slant=0;  ///< horizontal slanting/skewing value (= tan(phi))\n};\n\n#endif\n"
  },
  {
    "path": "src/FontWriter.cpp",
    "content": "/*************************************************************************\n** FontWriter.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include \"algorithm.hpp\"\n#include \"FontWriter.hpp\"\n#include \"Message.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\nbool FontWriter::AUTOHINT_FONTS = false;\n\nconst array<FontWriter::FontFormatInfo, 4> FontWriter::_formatInfos {{\n\t{FontWriter::FontFormat::SVG, \"image/svg+xml\", \"svg\", \"svg\"},\n\t{FontWriter::FontFormat::TTF, \"application/x-font-ttf\", \"ttf\", \"truetype\"},\n\t{FontWriter::FontFormat::WOFF, \"application/x-font-woff\", \"woff\", \"woff\"},\n\t{FontWriter::FontFormat::WOFF2, \"application/x-font-woff2\", \"woff2\", \"woff2\"},\n}};\n\n\n/** Returns the corresponding FontFormat for a given format name (e.g. \"svg\", \"woff\" etc.). */\nFontWriter::FontFormat FontWriter::toFontFormat (string formatstr) {\n\tformatstr = util::tolower(formatstr);\n\tauto it = algo::find_if(_formatInfos, [&](const FontFormatInfo &info) {\n\t\treturn info.formatstr_short == formatstr;\n\t});\n\treturn it != _formatInfos.end() ? it->format : FontFormat::UNKNOWN;\n}\n\n\n/** Returns the corresponding FontFormatInfo for a given FontFormat. */\nconst FontWriter::FontFormatInfo* FontWriter::fontFormatInfo (FontFormat format) {\n\tauto it = algo::find_if(_formatInfos, [&](const FontFormatInfo &info) {\n\t\treturn info.format == format;\n\t});\n\treturn it != _formatInfos.end() ? &(*it) : nullptr;\n}\n\n\n/** Returns the names of all supported font formats. */\nvector<string> FontWriter::supportedFormats () {\n\tvector<string> formats;\n\talgo::transform(_formatInfos, std::back_inserter(formats), [](const FontFormatInfo &info) {\n\t\treturn info.formatstr_short;\n\t});\n\treturn formats;\n}\n\n#include <config.h>\n\n#ifdef DISABLE_WOFF\n// dummy functions used if WOFF support is disabled\nFontWriter::FontWriter (const PhysicalFont &font) : _currentFont(font) {}\nstd::string FontWriter::createFontFile (FontFormat format, const set<int> &charcodes, GFGlyphTracer::Callback *cb) const {return \"\";}\nbool FontWriter::writeCSSFontFace (FontFormat format, const set<int> &charcodes, ostream &os, GFGlyphTracer::Callback *cb) const {return false;}\n#else\n#include <cmath>\n#include <fstream>\n#include <iomanip>\n#include <sstream>\n#include <woff2/encode.h>\n#include \"Bezier.hpp\"\n#include \"FileSystem.hpp\"\n#include \"Font.hpp\"\n#include \"Glyph.hpp\"\n#include \"ttf/TTFAutohint.hpp\"\n#include \"ttf/TTFWriter.hpp\"\n\nusing namespace ttf;\n\nbool FontWriter::createTTFFile (const std::string &ttfname, const PhysicalFont &font, const set<int> &charcodes, GFGlyphTracer::Callback *cb) const {\n\tTTFWriter ttfWriter(font, charcodes);\n\tif (cb)\n\t\tttfWriter.setTracerCallback(*cb);\n\tbool ok = ttfWriter.writeTTF(ttfname);\n\tif (ok && AUTOHINT_FONTS) {\n\t\tTTFAutohint autohinter;\n\t\tif (!autohinter.available()) {\n\t\t\tstatic bool reported=false;\n\t\t\tif (!reported) {\n\t\t\t\tMessage::wstream(true) << \"autohint functionality disabled (ttfautohint not found)\";\n\t\t\t\treported = true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tstring tmpname = ttfname+\"-ah\";\n\t\t\ttry {\n\t\t\t\tint errnum = autohinter.autohint(ttfname, tmpname, true);\n\t\t\t\tif (errnum == 0) {  // success?\n\t\t\t\t\tFileSystem::remove(ttfname);\n\t\t\t\t\tFileSystem::rename(tmpname, ttfname);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tMessage::wstream(true) << \"failed to autohint font '\" << _font.name() << \"'\";\n\t\t\t\t\tstring msg = autohinter.lastErrorMessage();\n\t\t\t\t\tif (!msg.empty())\n\t\t\t\t\t\tMessage::wstream() << \" (\" << msg << \")\";\n\t\t\t\t\t// keep the unhinted TTF\n\t\t\t\t\tFileSystem::remove(tmpname);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (MessageException &e) {\n\t\t\t\tMessage::wstream(true) << e.what() << '\\n';\n\t\t\t\tFileSystem::remove(tmpname);\n\t\t\t}\n\t\t}\n\t}\n\treturn ok;\n}\n\n\n/** Creates a font file containing a given set of glyphs mapped to their Unicode points.\n * @param[in] format target font format\n * @param[in] charcodes character codes of the glyphs to be considered\n * @param[in] cb callback object that allows to react to events triggered by the glyph tracer\n * @return name of the created font file */\nstring FontWriter::createFontFile (FontFormat format, const set<int> &charcodes, GFGlyphTracer::Callback *cb) const {\n\tstring tmpdir = FileSystem::tmpdir();\n\tstring basename = tmpdir+_font.name()+\"-tmp\";\n\tstring ttfname = basename+\".ttf\";\n\tstring targetname = basename+\".\"+fontFormatInfo(format)->formatstr_short;\n\tbool ok = createTTFFile(ttfname, _font, charcodes, cb);\n\tif (ok) {\n\t\tif (format == FontFormat::WOFF || format == FontFormat::WOFF2) {\n\t\t\tif (format == FontFormat::WOFF)\n\t\t\t\tok = TTFWriter::convertTTFToWOFF(ttfname, targetname);\n\t\t\telse\n\t\t\t\tTTFWriter::convertTTFToWOFF2(ttfname, targetname);\n\t\t\tif (!PhysicalFont::KEEP_TEMP_FILES)\n\t\t\t\tFileSystem::remove(ttfname);\n\t\t}\n\t}\n\tif (!ok)\n\t\tthrow FontWriterException(\"failed writing \"+string(fontFormatInfo(format)->formatstr_short)+ \" file \" + targetname);\n\treturn targetname;\n}\n\n\n/** Writes a CSS font-face rule to an output stream that references or contains the WOFF/TTF font data.\n * @param[in] format target font format\n * @param[in] charcodes character codes of the glyphs to be considered\n * @param[in] os stream the CSS data is written to\n * @param[in] cb callback object that allows to react to events triggered by the glyph tracer\n * @return true on success */\nbool FontWriter::writeCSSFontFace (FontFormat format, const set<int> &charcodes, ostream &os, GFGlyphTracer::Callback *cb) const {\n\tif (const FontFormatInfo *info = fontFormatInfo(format)) {\n\t\tstring filename = createFontFile(format, charcodes, cb);\n\t\tifstream ifs(filename, ios::binary);\n\t\tif (ifs) {\n\t\t\tos << \"@font-face{\"\n\t\t\t\t<< \"font-family:\" << _font.name() << ';'\n\t\t\t\t<< \"src:url(data:\" << info->mimetype << \";base64,\";\n\t\t\tutil::base64_encode(ifs, os);\n\t\t\tos << \") format('\" << info->formatstr_long << \"');}\\n\";\n\t\t\tifs.close();\n\t\t\tif (!PhysicalFont::KEEP_TEMP_FILES)\n\t\t\t\tFileSystem::remove(filename);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n#endif // !DISABLE_WOFF\n"
  },
  {
    "path": "src/FontWriter.hpp",
    "content": "/*************************************************************************\n** FontWriter.hpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef FONTWRITER_HPP\n#define FONTWRITER_HPP\n\n#include <ostream>\n#include <set>\n#include <string>\n#include <vector>\n#include \"GFGlyphTracer.hpp\"\n#include \"MessageException.hpp\"\n\nclass PhysicalFont;\n\nclass FontWriter {\n\tpublic:\n\t\tenum class FontFormat {UNKNOWN, SVG, TTF, WOFF, WOFF2};\n\t\tstatic bool AUTOHINT_FONTS;\n\n\tpublic:\n\t\texplicit FontWriter (const PhysicalFont &font) : _font(font) {}\n\t\tstd::string createFontFile (FontFormat format, const std::set<int> &charcodes, GFGlyphTracer::Callback *cb=nullptr) const;\n\t\tbool writeCSSFontFace (FontFormat format, const std::set<int> &charcodes, std::ostream &os, GFGlyphTracer::Callback *cb=nullptr) const;\n\t\tstatic FontFormat toFontFormat (std::string formatstr);\n\t\tstatic std::vector<std::string> supportedFormats ();\n\n\tprotected:\n\t\tstruct FontFormatInfo {\n\t\t\tFontWriter::FontFormat format;\n\t\t\tconst char *mimetype;\n\t\t\tconst char *formatstr_short;\n\t\t\tconst char *formatstr_long;\n\t\t};\n\t\tstatic const FontFormatInfo* fontFormatInfo (FontFormat format);\n\t\tbool createTTFFile (const std::string &ttfname, const PhysicalFont &font, const std::set<int> &charcodes, GFGlyphTracer::Callback *cb) const;\n\n\tprivate:\n\t\tconst PhysicalFont &_font;\n\t\tstatic const std::array<FontFormatInfo, 4> _formatInfos;\n};\n\n\nstruct FontWriterException : MessageException {\n\texplicit FontWriterException (const std::string &msg) : MessageException(msg) {}\n};\n\n#endif\n\n"
  },
  {
    "path": "src/GFGlyphTracer.cpp",
    "content": "/*************************************************************************\n** GFGlyphTracer.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"GFGlyphTracer.hpp\"\n\nusing namespace std;\n\n/** Constructs a new glyph tracer.\n *  @param[in] fname name/path of GF input file\n *  @param[in] upp target units per PS point */\nGFGlyphTracer::GFGlyphTracer (const string &fname, double upp, Callback *cb)\n\t: GFTracer(_ifs, upp), _callback(cb)\n{\n\tif (_callback)\n\t\t_callback->setFont(fname);\n\t_ifs.open(fname, ios::binary);\n}\n\n\nvoid GFGlyphTracer::reset (const string &fname, double upp) {\n\tif (_callback)\n\t\t_callback->setFont(fname);\n\tif (_ifs.is_open())\n\t\t_ifs.close();\n\tunitsPerPoint(upp);\n\t_ifs.open(fname, ios::binary);\n}\n\n\nbool GFGlyphTracer::executeChar (uint8_t c) {\n\tif (!_glyph)\n\t\treturn false;\n\n\tif (_callback)\n\t\t_callback->beginChar(c);\n\tbool ok = GFTracer::executeChar(c);\n\tif (_callback) {\n\t\tif (ok)\n\t\t\t_callback->endChar(c);\n\t\telse\n\t\t\t_callback->emptyChar(c);\n\t}\n\treturn ok;\n}\n\n\nvoid GFGlyphTracer::moveTo (double x, double y) {\n\t_glyph->moveto(int(x), int(y));\n}\n\n\nvoid GFGlyphTracer::lineTo (double x, double y) {\n\t_glyph->lineto(int(x), int(y));\n}\n\n\nvoid GFGlyphTracer::curveTo (double c1x, double c1y, double c2x, double c2y, double x, double y) {\n\t_glyph->cubicto(int(c1x), int(c1y), int(c2x), int(c2y), int(x), int(y));\n}\n\n\nvoid GFGlyphTracer::closePath () {\n\t_glyph->closepath();\n}\n\n\nvoid GFGlyphTracer::endChar (uint32_t c) {\n\t_glyph->clear();\n\tGFTracer::endChar(c);\n}\n"
  },
  {
    "path": "src/GFGlyphTracer.hpp",
    "content": "/*************************************************************************\n** GFGlyphTracer.hpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef GFGLYPHTRACER_HPP\n#define GFGLYPHTRACER_HPP\n\n#include <fstream>\n#include <string>\n#include \"GFTracer.hpp\"\n#include \"Glyph.hpp\"\n\nclass GFGlyphTracer : public GFTracer {\n\tpublic:\n\t\tstruct Callback {\n\t\t\tvirtual ~Callback () =default;\n\t\t\tvirtual void setFont (const std::string &fontname) {}\n\t\t\tvirtual void beginChar (uint8_t c) {}\n\t\t\tvirtual void endChar (uint8_t c) {}\n\t\t\tvirtual void emptyChar (uint8_t c) {}\n\t\t};\n\n\tpublic:\n\t\tGFGlyphTracer () : GFTracer(_ifs, 0) {}\n\t\tGFGlyphTracer (const std::string &fname, double upp, Callback *cb=nullptr);\n\t\tvoid reset (const std::string &fname, double upp);\n\t\tvoid setCallback (Callback *cb) {_callback = cb;}\n\t\tbool executeChar (uint8_t c) override;\n\t\tvoid moveTo (double x, double y) override;\n\t\tvoid lineTo (double x, double y) override;\n\t\tvoid curveTo (double c1x, double c1y, double c2x, double c2y, double x, double y) override;\n\t\tvoid closePath () override;\n\t\tvoid endChar (uint32_t c) override;\n\t\tvoid setGlyph (Glyph &glyph)   {_glyph = &glyph;}\n\t\tconst Glyph& getGlyph () const {return *_glyph;}\n\n\tprivate:\n\t\tstd::ifstream _ifs;\n\t\tGlyph *_glyph = nullptr;\n\t\tCallback *_callback = nullptr;\n};\n\n#endif\n"
  },
  {
    "path": "src/GFReader.cpp",
    "content": "/*************************************************************************\n** GFReader.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <sstream>\n#include \"FixWord.hpp\"\n#include \"GFReader.hpp\"\n#include \"Length.hpp\"\n#include \"SignalHandler.hpp\"\n\nusing namespace std;\n\n\nstruct GFCommand {\n\tvoid (GFReader::*method)(int);\n\tint numBytes;\n};\n\n\n/** Converts a scaled value to double */\nstatic inline double scaled2double (int32_t scaled) {\n\treturn double(scaled)/(1 << 16);\n}\n\n\nuint32_t GFReader::readUnsigned (int bytes) const {\n\tuint32_t ret = 0;\n\tfor (int i=bytes-1; i >= 0 && !_in.eof(); i--) {\n\t\tuint32_t b = _in.get();\n\t\tret |= b << (8*i);\n\t}\n\treturn ret;\n}\n\n\nint32_t GFReader::readSigned (int bytes) const {\n\tuint32_t ret = _in.get();\n\tif (ret & 128)        // negative value?\n\t\tret |= 0xffffff00;\n\tfor (int i=bytes-2; i >= 0 && !_in.eof(); i--)\n\t\tret = (ret << 8) | _in.get();\n\treturn int32_t(ret);\n}\n\n\nstring GFReader::readString (int bytes) const {\n\tbytes = max(0, bytes);\n\tstring str(bytes, '\\0');\n\t_in.read(&str[0], bytes);\n\treturn str;\n}\n\n\n/** Reads a single GF command from the current position of the input stream and calls the\n *  corresponding cmdFOO method.\n *  @return opcode of the executed command */\nint GFReader::executeCommand () {\n\tSignalHandler::instance().check();\n\t/* Each cmdFOO command reads the necessary number of bytes from the stream so executeCommand\n\tdoesn't need to know the exact GF command format. Some cmdFOO methods are used for multiple\n\tGF commands because they only differ in the size of their parameters. */\n\tstatic const GFCommand commands[] = {\n\t\t{&GFReader::cmdPaint, 1}, {&GFReader::cmdPaint, 2}, {&GFReader::cmdPaint, 3},                        // 64-66\n\t\t{&GFReader::cmdBoc, 0},   {&GFReader::cmdBoc1, 0},                                                   // 67-68\n\t\t{&GFReader::cmdEoc, 0},                                                                              // 69\n\t\t{&GFReader::cmdSkip, 0},  {&GFReader::cmdSkip, 1},  {&GFReader::cmdSkip, 2},{&GFReader::cmdSkip, 3}, // 70-73\n\t\t{&GFReader::cmdXXX, 1},   {&GFReader::cmdXXX, 2},   {&GFReader::cmdXXX, 3}, {&GFReader::cmdXXX, 4},  // 239-242\n\t\t{&GFReader::cmdYYY, 0},                                                                              // 243\n\t\t{&GFReader::cmdNop, 0},                                                                              // 244\n\t\t{&GFReader::cmdCharLoc, 0}, {&GFReader::cmdCharLoc0, 0},                                             // 245-246\n\t\t{&GFReader::cmdPre, 0},     {&GFReader::cmdPost, 0}, {&GFReader::cmdPostPost, 0}                     // 247-249\n\t};\n\n\tint opcode = _in.get();\n\tif (opcode < 0)  // at end of file?\n\t\tthrow GFException(\"unexpected end of file\");\n\n\tif (opcode <= 63)\n\t\tcmdPaint0(opcode);\n\telse if (opcode >= 74 && opcode <= 238)\n\t\tcmdNewRow(opcode-74);\n\telse if (opcode >= 250)\n\t\tthrow GFException(\"undefined GF command (opcode \" + std::to_string(opcode) + \")\");\n\telse {\n\t\tint offset = opcode <= 73 ? 64 : 239-(73-64+1);\n\t\tconst GFCommand &cmd = commands[opcode-offset];\n\t\tif (cmd.method)\n\t\t\t(this->*cmd.method)(cmd.numBytes);\n\t}\n\treturn opcode;\n}\n\n\nbool GFReader::executeChar (uint8_t c) {\n\t_in.clear();\n\tif (_charInfoMap.empty())\n\t\texecutePostamble();          // read character info\n\t_in.clear();\n\tauto it = _charInfoMap.find(c);\n\tif (_in && it != _charInfoMap.end()) {\n\t\t_in.seekg(it->second.location);\n\t\twhile (executeCommand() != 69);  // execute all commands until eoc is reached\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n\nbool GFReader::executeAllChars () {\n\t_in.clear();\n\tif (_charInfoMap.empty())\n\t\texecutePostamble();   // read character info\n\t_in.clear();\n\tif (_in) {\n\t\t_in.seekg(0);\n\t\twhile (executeCommand() != 248); // execute all commands until postamble is reached\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n\nbool GFReader::executePreamble () {\n\t_in.clear();\n\tif (!_in)\n\t\treturn false;\n\t_in.seekg(0);\n\texecuteCommand();\n\treturn true;\n}\n\n\nbool GFReader::executePostamble () {\n\t_in.clear();\n\tif (!_in)\n\t\treturn false;\n\t_in.seekg(-1, ios::end);\n\twhile (_in.peek() == 223)        // skip fill bytes\n\t\t_in.seekg(-1, ios::cur);\n\tif (_in.peek() != 131)\n\t\tthrow GFException(\"invalid identification byte in postpost\");\n\t_in.seekg(-5, ios::cur);         // now on postpost\n\tif (_in.get() != 249)\n\t\tthrow GFException(\"invalid GF file (missing postpost)\");\n\tuint32_t q = readUnsigned(4);    // pointer to begin of postamble\n\t_in.seekg(q);                    // now on begin of postamble\n\twhile (executeCommand() != 249); // execute all commands until postpost is reached\n\treturn true;\n}\n\n\n/** Returns the width of character c in PS point units */\ndouble GFReader::getCharWidth (uint32_t c) const {\n\tauto it = _charInfoMap.find(c%256);\n\treturn it == _charInfoMap.end() ? 0 : it->second.width*getDesignSize()/(1<<24);\n}\n\n///////////////////////\n\n\n/** Reads the preamble. */\nvoid GFReader::cmdPre (int) {\n\tuint32_t i = readUnsigned(1);\n\tif (i != 131)\n\t\tthrow GFException(\"invalid identification byte in preamble\");\n\telse {\n\t\tuint32_t k = readUnsigned(1);\n\t\tstring s = readString(k);\n\t\tpreamble(s);\n\t}\n}\n\n\n/** Reads the postamble. */\nvoid GFReader::cmdPost (int) {\n\treadUnsigned(4);                // pointer to byte after final eoc\n\t_designSize = double(FixWord(readUnsigned(4)))*Length::pt2bp; // design size of font in points\n\t_checksum   = readUnsigned(4);  // checksum\n\t_hppp       = scaled2double(readUnsigned(4))/Length::pt2bp; // horizontal pixels per PS point\n\t_vppp       = scaled2double(readUnsigned(4))/Length::pt2bp; // vertical pixels per PS point\n\t_in.seekg(16, ios::cur);        // skip x and y bounds\n\tpostamble();\n}\n\n\n/** Reads trailing bytes at end of stream. */\nvoid GFReader::cmdPostPost (int) {\n\treadUnsigned(4);   // pointer to begin of postamble\n\tuint32_t i = readUnsigned(1);\n\tif (i != 131)\n\t\tthrow GFException(\"invalid identification byte in postpost\");\n\twhile (readUnsigned(1) == 223); // skip fill bytes\n}\n\n\n/** Inverts \"paint color\" (black to white or vice versa) of n pixels\n *  and advances the cursor by n.\n *  @param[in] n number of pixels to be inverted */\nvoid GFReader::cmdPaint0 (int n) {\n\tif (!_insideCharDef)\n\t\tthrow GFException(\"character-related command outside BOC and EOC\");\n\tif (_penDown)  // set pixels?\n\t\t_bitmap.setBits(_y, _x, n);\n\t_x += n;\n\t_penDown = !_penDown;  // invert pen state\n}\n\n\n/** Inverts \"paint color\" (black to white or vice versa) of n pixels\n *  and advances the cursor by n. The number n of pixels is read from\n *  the input stream.\n *  @param[in] len size of n in bytes */\nvoid GFReader::cmdPaint (int len) {\n\tuint32_t pixels = readUnsigned(len);\n\tcmdPaint0(pixels);\n}\n\n\n/** Beginning of character (generic format). */\nvoid GFReader::cmdBoc (int) {\n\t_currentChar = readSigned(4);\n\treadSigned(4);  // pointer to previous boc with same c mod 256\n\t_minX = readSigned(4);\n\t_maxX = readSigned(4);\n\t_minY = readSigned(4);\n\t_maxY = readSigned(4);\n\t_x = _minX;\n\t_y = _maxY;\n\t_penDown = false;\n\t_bitmap.resize(_minX, _maxX, _minY, _maxY);\n\t_insideCharDef = true;\n\tbeginChar(_currentChar);\n}\n\n\n/** Beginning of character (compact format). */\nvoid GFReader::cmdBoc1 (int) {\n\t_currentChar = readUnsigned(1);\n\tuint32_t dx = readUnsigned(1);\n\t_maxX = readUnsigned(1);\n\t_minX = _maxX - dx;\n\tuint32_t dy = readUnsigned(1);\n\t_maxY = readUnsigned(1);\n\t_minY = _maxY - dy;\n\t_x = _minX;\n\t_y = _maxY;\n\t_penDown = false;\n\t_bitmap.resize(_minX, _maxX, _minY, _maxY);\n\t_insideCharDef = true;\n\tbeginChar(_currentChar);\n}\n\n\n/** End of character. */\nvoid GFReader::cmdEoc (int) {\n\tif (!_insideCharDef)\n\t\tthrow GFException(\"misplaced EOC\");\n\t_insideCharDef = false;\n\tendChar(_currentChar);\n}\n\n\n/** Moves cursor to the beginning of a following row and sets\n *  paint color to white.\n *  @param[in] len if 0: move to next row, otherwise: number of bytes to read.\n *                 The read value denotes the number of rows to be skipped.  */\nvoid GFReader::cmdSkip (int len) {\n\tif (!_insideCharDef)\n\t\tthrow GFException(\"character-related command outside BOC and EOC\");\n\tif (len == 0)\n\t\t_y--;\n\telse\n\t\t_y -= readUnsigned(len)+1;\n\t_x = _minX;\n\t_penDown = false;\n}\n\n\n/** Moves cursor to pixel number 'col' in the next row and sets\n *  the paint color to black.\n *  @param[in] col pixel/column number */\nvoid GFReader::cmdNewRow (int col) {\n\tif (!_insideCharDef)\n\t\tthrow GFException(\"character-related command outside BOC and EOC\");\n\t_x = _minX + col ;\n\t_y--;\n\t_penDown = true;\n}\n\n\nvoid GFReader::cmdXXX (int len) {\n\tuint32_t n = readUnsigned(len);\n\tstring str = readString(n);\n\tspecial(str);\n}\n\n\nvoid GFReader::cmdYYY (int) {\n\tint32_t y = readSigned(4);\n\tnumspecial(y);\n}\n\n\n/** Does nothing. */\nvoid GFReader::cmdNop (int) {\n}\n\n\n/** Reads character locator (part of postamble) */\nvoid GFReader::cmdCharLoc0 (int) {\n\tuint8_t c  = readUnsigned(1); // character code mod 256\n\tuint8_t dm = readUnsigned(1); // = dx/65536\n\tint32_t w  = readSigned(4);   // (1<<24)*characterWidth/designSize\n\tint32_t p  = readSigned(4);   // pointer to begin of (last) character data\n\tint32_t dx = 65536*dm;        // horizontal escapement\n\tint32_t dy = 0;               // vertical escapement\n\t_charInfoMap.emplace(c, CharInfo(dx, dy, w, p));\n}\n\n\n/** Reads character locator (part of postamble) */\nvoid GFReader::cmdCharLoc (int) {\n\tuint8_t c  = readUnsigned(1); // character code mod 256\n\tint32_t dx = readSigned(4);   // horizontal escapement (scaled pixel units)\n\tint32_t dy = readSigned(4);   // vertical escapement (scaled pixel units)\n\tint32_t w  = readSigned(4);   // (1<<24)*characterWidth/designSize\n\tint32_t p  = readSigned(4);   // pointer to begin of (last) character data\n\t_charInfoMap.emplace(c, CharInfo(dx, dy, w, p));\n}\n"
  },
  {
    "path": "src/GFReader.hpp",
    "content": "/*************************************************************************\n** GFReader.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef GFREADER_HPP\n#define GFREADER_HPP\n\n#include <istream>\n#include <string>\n#include <unordered_map>\n#include \"Bitmap.hpp\"\n#include \"MessageException.hpp\"\n\n\nclass CharInfo;\n\n\nstruct GFException : MessageException {\n\texplicit GFException (const std::string &msg) : MessageException(msg) {}\n};\n\n\nclass GFReader {\n\tstruct CharInfo {\n\t\tCharInfo () : dx(0), dy(0), width(0), location(0) {}\n\t\tCharInfo (int32_t dxx, int32_t dyy, int32_t w, uint32_t p) : dx(dxx), dy(dyy), width(w), location(p) {}\n\n\t\tint32_t dx, dy;\n\t\tint32_t width;  // 2^24 * (true width)/(design size)\n\t\tuint32_t location;\n\t};\n\n\tpublic:\n\t\texplicit GFReader (std::istream &is) : _in(is) {}\n\t\tvirtual ~GFReader () =default;\n\t\tvirtual bool executeChar (uint8_t c);\n\t\tvirtual bool executeAllChars ();\n\t\tbool executePreamble ();\n\t\tbool executePostamble ();\n\t\tvirtual void preamble (const std::string &str) {}\n\t\tvirtual void postamble () {}\n\t\tvirtual void beginChar (uint32_t c) {}\n\t\tvirtual void endChar (uint32_t c) {}\n\t\tvirtual void special (const std::string &str) {}\n\t\tvirtual void numspecial (int32_t y) {}\n\t\tconst Bitmap& getBitmap () const   {return _bitmap;}\n\t\tdouble getDesignSize () const      {return _designSize;}\n\t\tdouble getHPixelsPerPoint () const {return _hppp;}\n\t\tdouble getVPixelsPerPoint () const {return _vppp;};\n\t\tdouble getCharWidth (uint32_t c) const;\n\t\tuint32_t getChecksum () const      {return _checksum;}\n\n\tprotected:\n\t\tint32_t readSigned (int bytes) const;\n\t\tuint32_t readUnsigned (int bytes) const;\n\t\tstd::string readString (int len) const;\n\t\tint executeCommand ();\n\t\tstd::istream& getInputStream () const {return _in;}\n\n\t\tvoid cmdPre (int);\n\t\tvoid cmdPost (int);\n\t\tvoid cmdPostPost (int);\n\t\tvoid cmdPaint0 (int pixels);\n\t\tvoid cmdPaint (int len);\n\t\tvoid cmdBoc (int);\n\t\tvoid cmdBoc1 (int);\n\t\tvoid cmdEoc (int);\n\t\tvoid cmdSkip (int len);\n\t\tvoid cmdNewRow (int col);\n\t\tvoid cmdXXX (int len);\n\t\tvoid cmdYYY (int);\n\t\tvoid cmdNop (int);\n\t\tvoid cmdCharLoc0 (int);\n\t\tvoid cmdCharLoc (int);\n\n\tprivate:\n\t\tstd::istream &_in;\n\t\tint32_t _minX=0, _maxX=0, _minY=0, _maxY=0;\n\t\tint32_t _x=0, _y=0;          ///< current pen location (pixel units)\n\t\tint32_t _currentChar=0;\n\t\tBitmap _bitmap;              ///< bitmap of current char\n\t\tdouble _designSize=0;        ///< designSize in PS points\n\t\tdouble _hppp=0, _vppp=0;     ///< horizontal and vertical pixel per point\n\t\tuint32_t _checksum=0;\n\t\tstd::unordered_map<uint8_t,CharInfo> _charInfoMap;\n\t\tbool _insideCharDef=false;   ///< true if inside a character definition (between BOC and EOC)\n\t\tbool _penDown=false;\n};\n\n#endif\n"
  },
  {
    "path": "src/GFTracer.cpp",
    "content": "/*************************************************************************\n** GFTracer.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <fstream>\n#include <potracelib.h>\n#include \"GFTracer.hpp\"\n#include \"Glyph.hpp\"\n#include \"Message.hpp\"\n\nusing namespace std;\n\n\n/** Constructs a new GFTracer.\n *  @param[in] is GF file is read from this stream\n *  @param[in] upp target units per PS point */\nGFTracer::GFTracer (istream &is, double upp)\n\t: GFReader(is), _unitsPerPoint(upp)\n{\n}\n\n\nvoid GFTracer::beginChar (uint32_t c) {\n}\n\n\nvoid GFTracer::endChar (uint32_t c) {\n\tconst Bitmap &bitmap = getBitmap();\n\tif (bitmap.empty())\n\t\treturn;\n\n\t// prepare potrace's bitmap structure\n\tvector<potrace_word> buffer;\n\tpotrace_bitmap_t pobitmap;\n\tpobitmap.w = bitmap.width();\n\tpobitmap.h = bitmap.height();\n\tpobitmap.dy = bitmap.copy(buffer);\n\tpobitmap.map = &buffer[0];\n\tpotrace_param_t *param = potrace_param_default();\n\tpotrace_state_t *state = potrace_trace(param, &pobitmap);\n\tpotrace_param_free(param);\n\n\tif (!state || state->status == POTRACE_STATUS_INCOMPLETE)\n\t\tMessage::wstream(true) << \"error while tracing character\\n\";\n\telse {\n\t\tdouble hsf=1.0, vsf=1.0; // horizontal a d vertical scale factor\n\t\tif (_unitsPerPoint != 0.0) {\n\t\t\thsf = _unitsPerPoint/getHPixelsPerPoint();  // horizontal scale factor\n\t\t\tvsf = _unitsPerPoint/getVPixelsPerPoint();  // vertical scale factor\n\t\t}\n\t\tfor (potrace_path_t *path = state->plist; path; path = path->next) {\n\t\t\tpotrace_dpoint_t &p = path->curve.c[path->curve.n-1][2]; // start/end point\n\t\t\tmoveTo(hsf*(p.x+bitmap.xshift()), vsf*(p.y+bitmap.yshift()));\n\t\t\tfor (int i=0; i < path->curve.n; i++) {\n\t\t\t\tif (path->curve.tag[i] == POTRACE_CURVETO) {\n\t\t\t\t\tcurveTo(hsf*(path->curve.c[i][0].x+bitmap.xshift()), vsf*(path->curve.c[i][0].y+bitmap.yshift()),\n\t\t\t\t\t\t\t  hsf*(path->curve.c[i][1].x+bitmap.xshift()), vsf*(path->curve.c[i][1].y+bitmap.yshift()),\n\t\t\t\t\t\t\t  hsf*(path->curve.c[i][2].x+bitmap.xshift()), vsf*(path->curve.c[i][2].y+bitmap.yshift()));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlineTo(hsf*(path->curve.c[i][1].x+bitmap.xshift()), vsf*(path->curve.c[i][1].y+bitmap.yshift()));\n\t\t\t\t\tif (i == path->curve.n-1)\n\t\t\t\t\t\tclosePath();\n\t\t\t\t\telse\n\t\t\t\t\t\tlineTo(hsf*(path->curve.c[i][2].x+bitmap.xshift()), vsf*(path->curve.c[i][2].y+bitmap.yshift()));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tpotrace_state_free(state);\n}\n"
  },
  {
    "path": "src/GFTracer.hpp",
    "content": "/*************************************************************************\n** GFTracer.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef GFTRACER_HPP\n#define GFTRACER_HPP\n\n#include <istream>\n#include \"GFReader.hpp\"\n\nclass GFTracer : public GFReader {\n\tpublic:\n\t\texplicit GFTracer (std::istream &is) : GFReader(is) {}\n\t\tGFTracer (std::istream &is, double upp);\n\t\tvirtual void moveTo (double x, double y) =0;\n\t\tvirtual void lineTo (double x, double y) =0;\n\t\tvirtual void curveTo (double c1x, double c1y, double c2x, double c2y, double x, double y) =0;\n\t\tvirtual void closePath () =0;\n\t\tvoid beginChar (uint32_t c) override;\n\t\tvoid endChar (uint32_t c) override;\n\n\tprotected:\n\t\tvoid unitsPerPoint(double upp) {_unitsPerPoint = upp;}\n\n\tprivate:\n\t\tdouble _unitsPerPoint=0; ///< target units per PS point\n};\n\n#endif\n"
  },
  {
    "path": "src/Ghostscript.cpp",
    "content": "/*************************************************************************\n** Ghostscript.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <config.h>\n#include \"FilePath.hpp\"\n#include \"Ghostscript.hpp\"\n#include \"utility.hpp\"\n#if !defined(DISABLE_GS)\n#include <cstring>\n#include <iomanip>\n#include <sstream>\n#if defined(HAVE_LIBGS)\n\t#include <ghostscript/ierrors.h>\n#else\n\t#include \"ierrors.h\"\n\t#include \"FileFinder.hpp\"\n#endif\n\nusing namespace std;\n\n// name of Ghostscript shared library set by the user\nstring Ghostscript::LIBGS_NAME;\n\n#ifndef HAVE_LIBGS\n\n#ifdef _WIN32\n/** Looks up the path of the Ghostscript DLL in the Windows registry and returns it.\n *  If there is no proper registry entry, the returned string is empty. */\nstatic string get_path_from_registry () {\n#ifdef RRF_RT_REG_SZ   // RegGetValueA and RRF_RT_REG_SZ may not be defined for some oldish MinGW\n\tREGSAM mode = KEY_READ|KEY_QUERY_VALUE;\n#ifdef KEY_WOW64_64KEY\n#ifdef _WIN64\n\tmode |= KEY_WOW64_64KEY;\n#else\n\tmode |= KEY_WOW64_32KEY;\n#endif\n#endif\n\tfor (const char *gs_company : {\"GPL\", \"GNU\", \"AFPL\", \"Aladdin\"}) {\n\t\tconst string reg_path = string(\"SOFTWARE\\\\\") + gs_company + \" Ghostscript\";\n\t\tfor (HKEY reg_root : {HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE}) {\n\t\t\tHKEY hkey;\n\t\t\tif (RegOpenKeyExA(reg_root, reg_path.c_str(), 0, mode, &hkey) == ERROR_SUCCESS) {\n\t\t\t\tchar subkey[16];\n\t\t\t\tfor (int k=0; RegEnumKeyA(hkey, k, subkey, 16) == ERROR_SUCCESS; k++) {\n\t\t\t\t\tistringstream iss(subkey);\n\t\t\t\t\tint major_version;\n\t\t\t\t\tiss >> major_version;\n\t\t\t\t\tif (major_version >= 7) {\n\t\t\t\t\t\tchar dll_path[512];  // path to Ghostscript DLL stored in the registry\n\t\t\t\t\t\tDWORD length = 512;\n\t\t\t\t\t\tif (RegGetValueA(hkey, subkey, \"GS_DLL\", RRF_RT_REG_SZ, nullptr, dll_path, &length) == ERROR_SUCCESS) {\n\t\t\t\t\t\t\tRegCloseKey(hkey);\n\t\t\t\t\t\t\treturn dll_path;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tRegCloseKey(hkey);\n\t\t\t}\n\t\t}\n\t}\n#endif  // RRF_RT_REG_SZ\n\treturn \"\";\n}\n#endif // _WIN32\n\n#if defined(_WIN32)\nstatic string get_gsdll () {\n\tstring pathstr;\n#if defined(TEXLIVEWIN32)\n\tchar exepath[256];\n\tif (GetModuleFileNameA(NULL, exepath, 256)) {\n\t\tFilePath path(exepath);\n\t\tpath.set(path.absolute(false)+\"/../../tlpkg/tlgs\");\n\t\tpathstr = util::replace(path.absolute(false)+\"/\", \"/\", \"\\\\\");\n\t\tstring envvar = \"GS_LIB=\";\n\t\tfor (string dirs : {\"lib\", \"fonts\", \"Resource\\\\Init\", \"Resource\", \"kanji\"})\n\t\t\tenvvar += pathstr+dirs+\";\";\n\t\t_putenv(envvar.c_str());\n\t\tpathstr += \"bin\\\\\";\n\t}\n#endif\n#if defined(_WIN64)\n\treturn pathstr+\"gsdll64.dll\";\n#else\n\treturn pathstr+\"gsdll32.dll\";\n#endif\n}\n#endif  // _WIN32\n\n\n/** Try to detect name of the Ghostscript shared library depending on the user settings.\n *  @param[in] fname path/filename given by the user\n *  @return name of Ghostscript shared library */\nstatic string get_libgs (const string &fname) {\n\tif (!fname.empty())\n\t\treturn fname;\n#ifdef MIKTEX\n#if defined(_WIN64)\n\tconst char *gsdll = \"mgsdll64.dll\";\n#else\n\tconst char *gsdll = \"mgsdll32.dll\";\n#endif\n\t// try to look up the Ghostscript DLL coming with MiKTeX\n\tif (const char *gsdll_path = FileFinder::instance().lookup(gsdll))\n\t\treturn gsdll_path;\n#endif // MIKTEX\n#if defined(_WIN32)\n\t// try to look up the path of the Ghostscript DLL in the Windows registry\n\tstring gsdll_path = get_path_from_registry();\n\tif (!gsdll_path.empty())\n\t\treturn gsdll_path;\n\treturn get_gsdll();\n#else\n\t// try to find libgs.so.X on the user's system\n\tconst int abi_min=7, abi_max=10; // supported libgs ABI versions\n\tfor (int i=abi_max; i >= abi_min; i--) {\n#if defined(__CYGWIN__)\n\t\tstring dlname = \"cyggs-\" + to_string(i) + \".dll\";\n#else\n\t\tstring dlname = \"libgs.so.\" + to_string(i);\n#endif\n\t\tDLLoader loader(dlname);\n\t\tif (loader.loaded())\n\t\t\treturn dlname;\n#if defined(__APPLE__)\n\t\t// dlopen() requires an absolute path in a hardened runtime such as installed\n\t\t// by MacTeX. Thus, explicitly lookup libgs in /usr/local/lib too.\n\t\tfor (const string path : {\"\", \"/usr/local/lib/\"}) {\n\t\t\tdlname = path + \"libgs.\" + to_string(i) + \".dylib\";\n\t\t\tif (loader.loadLibrary(dlname))\n\t\t\t\treturn dlname;\n\t\t\tdlname = path + \"libgs.dylib.\" + to_string(i);\n\t\t\tif (loader.loadLibrary(dlname))\n\t\t\t\treturn dlname;\n\t\t}\n#endif\n\t}\n#endif\n\t// no appropriate library found\n\treturn \"\";\n}\n#endif // !HAVE_LIBGS\n\n\n/** Loads the Ghostscript library but does not create an instance. This\n *  constructor should only be used to call available() and revision(). */\nGhostscript::Ghostscript ()\n#if !defined(HAVE_LIBGS)\n\t: DLLoader(get_libgs(LIBGS_NAME))\n#endif\n{\n}\n\n\n/** Tries to load the shared library and to initialize Ghostscript.\n * @param[in] argc number of parameters in array argv\n * @param[in] argv parameters passed to Ghostscript\n * @param[in] caller this parameter is passed to all callback functions */\nGhostscript::Ghostscript (int argc, const char **argv, void *caller)\n#if !defined(HAVE_LIBGS)\n\t: DLLoader(get_libgs(LIBGS_NAME))\n#endif\n{\n\tinit(argc, argv, caller);\n}\n\n\n/** Exits Ghostscript and unloads the dynamic library. */\nGhostscript::~Ghostscript () {\n\tfinalize();\n}\n\n\nbool Ghostscript::init (int argc, const char **argv, void *caller) {\n\tif (!_inst) {\n\t\tint status = new_instance(&_inst, caller);\n\t\tif (status < 0)\n\t\t\t_inst = nullptr;\n\t\telse {\n\t\t\tinit_with_args(argc, const_cast<char**>(argv));\n\t\t}\n\t}\n\treturn _inst != nullptr;\n}\n\n\nvoid Ghostscript::finalize () {\n\tif (_inst) {\n\t\tGhostscript::exit();\n\t\tdelete_instance();\n\t}\n}\n\n\n/** Returns true if Ghostscript library was found and can be loaded. */\nbool Ghostscript::available () const {\n#if defined(HAVE_LIBGS)\n\treturn true;\n#else\n\tgsapi_revision_t rev;\n\treturn loaded() && revision(&rev);\n#endif\n}\n\n\n/** Retrieves version information about Ghostscript.\n * @param[out] r takes the revision information (see GS API documentation for further details)\n * @return true on success  */\nbool Ghostscript::revision (gsapi_revision_t *r) const {\n#if defined(HAVE_LIBGS)\n\treturn (gsapi_revision(r, sizeof(gsapi_revision_t)) == 0);\n#else\n\tif (auto fn = LOAD_SYMBOL(gsapi_revision))\n\t\treturn (fn(r, sizeof(gsapi_revision_t)) == 0);\n\treturn false;\n#endif\n}\n\n\n/** Returns the revision number of the GS library. */\nint Ghostscript::revision () const {\n\tstatic int rev=0;\n\tif (rev == 0) {\n\t\tgsapi_revision_t r;\n\t\tif (revision(&r))\n\t\t\trev = static_cast<int>(r.revision);\n\t}\n\treturn rev;\n}\n\n\n/** Returns the revision of the GS library as a string of the form \"MAJOR.MINOR\". */\nstring Ghostscript::revisionstr () const {\n\tstring revstr;\n\tif (int rev = revision()) {\n\t\tif (rev < 1000) {  // until GS 9.52\n\t\t\trevstr = to_string(rev/100) + \".\";\n\t\t\tif (rev % 100 < 10)\n\t\t\t\trevstr += \"0\";\n\t\t\trevstr += to_string(rev%100);\n\t\t}\n\t\telse { // as of GS 9.52.1, see ghostpdl/base/gsmisc.c\n\t\t\tint major = rev / 1000;\n\t\t\tint minor = (rev - major*1000)/10;\n\t\t\tint patch = rev % 10;\n\t\t\trevstr = to_string(major) + \".\";\n\t\t\tif (minor > 0 && minor < 10)\n\t\t\t\trevstr += '0';\n\t\t\trevstr += to_string(minor) + \".\" + to_string(patch);\n\t\t}\n\t}\n\treturn revstr;\n}\n\n\n/** Creates a new instance of Ghostscript. This method is called by the constructor and\n *  should not be used elsewhere.\n *  @param[out] psinst handle of newly created instance (or 0 on error)\n *  @param[in] caller pointer forwarded to callback functions */\nint Ghostscript::new_instance (void **psinst, void *caller) const {\n#if defined(HAVE_LIBGS)\n\treturn gsapi_new_instance(psinst, caller);\n#else\n\tif (auto fn = LOAD_SYMBOL(gsapi_new_instance))\n\t\treturn fn(psinst, caller);\n\t*psinst = nullptr;\n\treturn 0;\n#endif\n}\n\n\n/** Destroys the current instance of Ghostscript. This method is called by the destructor\n *  and should not be used elsewhere. */\nvoid Ghostscript::delete_instance () {\n#if defined(HAVE_LIBGS)\n\tgsapi_delete_instance(_inst);\n#else\n\tif (auto fn = LOAD_SYMBOL(gsapi_delete_instance))\n\t\tfn(_inst);\n#endif\n\t_inst = nullptr;\n}\n\n\n/** Exits the interpreter. Must be called before destroying the GS instance. */\nint Ghostscript::exit () const {\n#if defined(HAVE_LIBGS)\n\treturn gsapi_exit(_inst);\n#else\n\tif (auto fn = LOAD_SYMBOL(gsapi_exit))\n\t\treturn fn(_inst);\n\treturn 0;\n#endif\n}\n\n\n/** Sets the I/O callback functions.\n * @param[in] in pointer to stdin handler\n * @param[in] out pointer to stdout handler\n * @param[in] err pointer to stderr handler */\nint Ghostscript::set_stdio (Stdin in, Stdout out, Stderr err) const {\n#if defined(HAVE_LIBGS)\n\treturn gsapi_set_stdio(_inst, in, out, err);\n#else\n\tif (auto fn = LOAD_SYMBOL(gsapi_set_stdio))\n\t\treturn fn(_inst, in, out, err);\n\treturn 0;\n#endif\n}\n\n\n/** Initializes Ghostscript with a set of optional parameters. This\n *  method is called by the constructor and should not be used elsewhere.\n *  @param[in] argc number of parameters\n *  @param[in] argv parameters passed to Ghostscript */\nint Ghostscript::init_with_args (int argc, char **argv) const {\n#if defined(HAVE_LIBGS)\n\treturn gsapi_init_with_args(_inst, argc, argv);\n#else\n\tif (auto fn = LOAD_SYMBOL(gsapi_init_with_args))\n\t\treturn fn(_inst, argc, argv);\n\treturn 0;\n#endif\n}\n\n\n/** Tells Ghostscript that several calls of run_string_continue will follow. */\nint Ghostscript::run_string_begin (int user_errors, int *pexit_code) const {\n#if defined(HAVE_LIBGS)\n\treturn gsapi_run_string_begin(_inst, user_errors, pexit_code);\n#else\n\tif (auto fn = LOAD_SYMBOL(gsapi_run_string_begin))\n\t\treturn fn(_inst, user_errors, pexit_code);\n\t*pexit_code = 0;\n\treturn 0;\n#endif\n}\n\n\n/** Executes a chunk of PostScript commands given by a buffer of characters. The size of\n *  this buffer must not exceed 64KB. Longer programs can be split into arbitrary smaller chunks\n *  and passed to Ghostscript by successive calls of run_string_continue.\n *  @param[in] str buffer containing the PostScript code\n *  @param[in] length number of characters in buffer\n *  @param[in] user_errors if non-negative, the default PS error values will be generated, otherwise this value is returned\n *  @param[out] pexit_code takes the PS error code */\nint Ghostscript::run_string_continue (const char *str, unsigned length, int user_errors, int *pexit_code) const {\n#if defined(HAVE_LIBGS)\n\treturn gsapi_run_string_continue(_inst, str, length, user_errors, pexit_code);\n#else\n\tif (auto fn = LOAD_SYMBOL(gsapi_run_string_continue))\n\t\treturn fn(_inst, str, length, user_errors, pexit_code);\n\t*pexit_code = 0;\n\treturn 0;\n#endif\n}\n\n\n/** Terminates the successive code feeding. Must be called after the last call of run_string_continue. */\nint Ghostscript::run_string_end (int user_errors, int *pexit_code) const {\n#if defined(HAVE_LIBGS)\n\treturn gsapi_run_string_end(_inst, user_errors, pexit_code);\n#else\n\tif (auto fn = LOAD_SYMBOL(gsapi_run_string_end))\n\t\treturn fn(_inst, user_errors, pexit_code);\n\t*pexit_code = 0;\n\treturn 0;\n#endif\n}\n\n\nconst char* Ghostscript::error_name (int code) {\n\tif (code < 0)\n\t\tcode = -code;\n\tconst char *error_names[] = { ERROR_NAMES };\n\tif (code == 0 || size_t(code) > sizeof(error_names)/sizeof(error_names[0]))\n\t\treturn nullptr;\n\treturn error_names[code-1];\n}\n\n#endif  // !DISABLE_GS\n"
  },
  {
    "path": "src/Ghostscript.hpp",
    "content": "/*************************************************************************\n** Ghostscript.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef GHOSTSCRIPT_HPP\n#define GHOSTSCRIPT_HPP\n\n#include <config.h>\n#include <string>\n\n#if defined(DISABLE_GS)\n\t#include \"iapi.h\"\n#elif defined(HAVE_LIBGS)\n\t#include <ghostscript/iapi.h>\n#else\n\t#include \"DLLoader.hpp\"\n\t#include \"iapi.h\"\n#endif\n\n#if defined(_WIN32) && !defined(_Windows)\n\t#define _Windows\n#endif\n\n#if defined(DISABLE_GS)\nstruct Ghostscript {\n\tusing Stdin  = int (GSDLLCALLPTR)(void *caller, char *buf, int len);\n\tusing Stdout = int (GSDLLCALLPTR)(void *caller, const char *str, int len);\n\tusing Stderr = int (GSDLLCALLPTR)(void *caller, const char *str, int len);\n\n\tGhostscript () {}\n\tGhostscript (int argc, const char **argv, void *caller=0) {}\n\tbool init (int argc, const char **argv, void *caller=0) {return false;}\n\tbool available () {return false;}\n\tbool revision (gsapi_revision_t *r) const {return false;}\n\tint revision () const {return 0;}\n\tstd::string revisionstr () {return \"\";}\n\tint set_stdio (Stdin in, Stdout out, Stderr err) {return 0;}\n\tint run_string_begin (int user_errors, int *pexit_code) {return 0;}\n\tint run_string_continue (const char *str, unsigned int length, int user_errors, int *pexit_code) {return 0;}\n\tint run_string_end (int user_errors, int *pexit_code) {return 0;}\n\tint exit () {return 0;}\n\tconst char* error_name (int code) {return 0;}\n};\n\n#else\n\n/** Wrapper class of (a subset of) the Ghostscript API. */\nclass Ghostscript\n#ifndef HAVE_LIBGS\n: public DLLoader\n#endif\n{\n\tpublic:\n\t\tusing Stdin  = int (GSDLLCALLPTR)(void *caller, char *buf, int len);\n\t\tusing Stdout = int (GSDLLCALLPTR)(void *caller, const char *str, int len);\n\t\tusing Stderr = int (GSDLLCALLPTR)(void *caller, const char *str, int len);\n\n\tpublic:\n\t\tGhostscript ();\n\t\tGhostscript (int argc, const char **argv, void *caller=nullptr);\n\t\tGhostscript (const Ghostscript &gs) =delete;\n#ifdef HAVE_LIBGS\n\t\t~Ghostscript ();\n#else\n\t\t~Ghostscript () override;\n#endif\n\t\tbool init (int argc, const char **argv, void *caller=nullptr);\n\t\tvoid finalize ();\n\t\tbool available () const;\n\t\tbool revision (gsapi_revision_t *r) const;\n\t\tint revision () const;\n\t\tstd::string revisionstr () const;\n\t\tint set_stdio (Stdin in, Stdout out, Stderr err) const;\n\t\tint run_string_begin (int user_errors, int *pexit_code) const;\n\t\tint run_string_continue (const char *str, unsigned int length, int user_errors, int *pexit_code) const;\n\t\tint run_string_end (int user_errors, int *pexit_code) const;\n\t\tint exit () const;\n\t\tstatic const char* error_name (int code);\n\n\t\tstatic std::string LIBGS_NAME;\n\n\tprotected:\n\t\tint init_with_args (int argc, char **argv) const;\n\t\tint new_instance (void **psinst, void *caller) const;\n\t\tvoid delete_instance ();\n\n\tprivate:\n\t\tvoid *_inst = nullptr; ///< Ghostscript handle needed to call the gsapi_foo functions\n};\n\n#endif  // DISABLE_GS\n\n#endif\n"
  },
  {
    "path": "src/Glyph.hpp",
    "content": "/*************************************************************************\n** Glyph.hpp                                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef GLYPH_HPP\n#define GLYPH_HPP\n\n#include \"GraphicsPath.hpp\"\n\nusing Glyph = GraphicsPath<int32_t>;\n\n#endif\n"
  },
  {
    "path": "src/GlyphTracerMessages.hpp",
    "content": "/*************************************************************************\n** GlyphTracerMessages.hpp                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef GLYPHTRACERMESSAGES_HPP\n#define GLYPHTRACERMESSAGES_HPP\n\n#include <sstream>\n#include \"GFGlyphTracer.hpp\"\n#include \"Message.hpp\"\n\nclass GlyphTracerMessages : public GFGlyphTracer::Callback {\n\tpublic:\n\t\tGlyphTracerMessages () =default;\n\t\texplicit GlyphTracerMessages (bool sfmsg, bool autonl) : _sfmsg(sfmsg), _autonl(autonl) {}\n\n\t\t~GlyphTracerMessages () override {\n\t\t\tif (_autonl)\n\t\t\t\tMessage::mstream() << '\\n';\n\t\t}\n\n\t\tvoid beginChar (uint8_t c) override {\n\t\t\tif (!_traced) {\n\t\t\t\tif (!_fname.empty()) {\n\t\t\t\t\tMessage::mstream() << '\\n';\n\t\t\t\t\t// extract font name from file path\n\t\t\t\t\tstd::string fontname = _fname;\n\t\t\t\t\tsize_t pos;\n\t\t\t\t\tif ((pos = fontname.rfind('/')) != std::string::npos)\n\t\t\t\t\t\tfontname = fontname.substr(pos+1);\n\t\t\t\t\tif ((pos = fontname.rfind('.')) != std::string::npos)\n\t\t\t\t\t\tfontname.resize(pos);\n\t\t\t\t\tMessage::mstream(false, Message::MC_STATE)\n\t\t\t\t\t\t<< \"tracing glyphs of \" << fontname << '\\n';\n\t\t\t\t}\n\t\t\t\t_traced = true;\n\t\t\t}\n\t\t}\n\n\t\tvoid endChar (uint8_t c) override {\n\t\t\tstd::ostringstream oss;\n\t\t\toss << '[';\n\t\t\tif (isprint(c))\n\t\t\t\toss << c;\n\t\t\telse\n\t\t\t\toss << '#' << unsigned(c);\n\t\t\toss << ']';\n\t\t\tMessage::mstream(false, Message::MC_TRACING) << oss.str();\n\t\t}\n\n\t\tvoid setFont (const std::string &fname) override {\n\t\t\tif (_sfmsg && fname != _fname) {\n\t\t\t\t_fname = fname;\n\t\t\t\t_traced = false;\n\t\t\t}\n\t\t}\n\n\tprivate:\n\t\tstd::string _fname;\n\t\tbool _sfmsg=true, _autonl=true;\n\t\tbool _traced=false;  ///< true if a glyph of the current font has already been traced?\n};\n\n#endif\n"
  },
  {
    "path": "src/GraphicsPath.hpp",
    "content": "/*************************************************************************\n** GraphicsPath.hpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <array>\n#include <cctype>\n#include <cmath>\n#include <deque>\n#include <ostream>\n#include <type_traits>\n#include <mpark/variant.hpp>\n#include \"algorithm.hpp\"\n#include \"BoundingBox.hpp\"\n#include \"EllipticalArc.hpp\"\n#include \"Matrix.hpp\"\n#include \"Pair.hpp\"\n#include \"utility.hpp\"\n#include \"XMLString.hpp\"\n\ntemplate <typename T>\nclass GraphicsPath;\n\nnamespace gp {\n\n/// Base class for all path data commands, like moveto, lineto, curveto, etc.\nstruct CommandBase {};\n\n/** Base class for all path data commands with NUM_POINTS point parameters\n * @tparam NUM_POINTS number of parameter pairs representing points, e.g. 1 for moveto and lineto */\ntemplate <typename T, int NUM_POINTS>\nclass Command : public CommandBase {\n\tfriend class GraphicsPath<T>;\n\tpublic:\n\t\tint numPoints () const {return NUM_POINTS;}\n\t\tPair<T>& point (int n) {return points[n];}\n\t\tconst Pair<T>& point (int n) const {return points[n];}\n\n\t\t/** Transforms the command by a given transformation matrix.\n \t\t *  @params[in] matrix describes the affine transformation to apply\n\t\t *  @params[in] currentPoint the untransformed end point of the preceding command */\n\t\tvoid transform (const Matrix &matrix, const Pair<T> &currentPoint) {\n\t\t\talgo::transform(points, points.begin(), [&matrix](const Pair<T> &p) {\n\t\t\t\treturn matrix * p;\n\t\t\t});\n\t\t}\n\n\t\t/** Returns true if all points are identical to those of another command. */\n\t\tbool pointsEqual (const Command &cmd) const {\n\t\t\tfor (int i=0; i < NUM_POINTS; i++)\n\t\t\t\tif (points[i] != cmd.points[i])\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\n\tprotected:\n\t\texplicit Command () =default;\n\t\texplicit Command (std::array<Pair<T>, NUM_POINTS> &&pts) : points(std::move(pts)) {}\n\n\tprotected:\n\t\tstd::array<Pair<T>, NUM_POINTS> points;\n};\n\ntemplate <typename T>\nstruct MoveTo : Command<T, 1> {\n\texplicit MoveTo (const Pair<T> &p) : Command<T, 1>({p}) {}\n};\n\ntemplate <typename T>\nstruct LineTo : Command<T, 1> {\n\texplicit LineTo (const Pair<T> &p) : Command<T, 1>({p}) {}\n};\n\ntemplate <typename T>\nstruct CubicTo : Command<T, 3> {\n\texplicit CubicTo (const Pair<T> &p1, const Pair<T> &p2, const Pair<T> &p3) : Command<T, 3>({p1, p2, p3}) {}\n};\n\ntemplate <typename T>\nstruct QuadTo : Command<T, 2> {\n\texplicit QuadTo (const Pair<T> &p1, const Pair<T> &p2) : Command<T, 2>({p1, p2}) {}\n};\n\ntemplate <typename T>\nstruct ClosePath : Command<T, 0> {\n\tClosePath () : Command<T, 0>() {}\n};\n\ntemplate <typename T>\nstruct ArcTo : Command<T, 1> {\n\tArcTo (T rxx, T ryy, double xrot, bool laf, bool sf, const Pair<T> &pp)\n\t\t: Command<T, 1>({pp}), rx(rxx < 0 ? -rxx : rxx), ry(ryy < 0 ? -ryy : ryy),\n\t\t  xrotation(xrot), largeArcFlag(laf), sweepFlag(sf) {}\n\n\tbool operator == (const ArcTo &arc) const {\n\t\treturn rx == arc.rx\n\t\t\t&& ry == arc.ry\n\t\t\t&& xrotation == arc.xrotation\n\t\t\t&& largeArcFlag == arc.largeArcFlag\n\t\t\t&& sweepFlag == arc.sweepFlag\n\t\t\t&& this->points[0] == arc.points[0];\n\t}\n\n\tvoid transform (const Matrix &matrix, const Pair<T> &currentPoint);\n\n\tbool operator != (const ArcTo &arc) const {return !(*this == arc);}\n\n\tT rx, ry;          ///< length of the semi-major and semi-minor axes\n\tdouble xrotation;  ///< rotation of the semi-major axis in degrees\n\tbool largeArcFlag; ///< if true, the longer arc from start to end point is chosen, else the shorter one\n\tbool sweepFlag;    ///< if true, arc is drawn in direction of positive angles, else the opposite direction\n};\n\n/** Applies an affine transformation described by a given matrix to the arc segment.\n *  @params[in] matrix describes the affine transformation to apply\n *  @params[in] currentPoint the untransformed end point of the preceding command */\ntemplate <typename T>\nvoid ArcTo<T>::transform (const Matrix &matrix, const Pair<T> &currentPoint) {\n\tEllipticalArc arc(currentPoint, rx, ry, math::deg2rad(xrotation), largeArcFlag, sweepFlag, this->points[0]);\n\tarc.transform(matrix);\n\trx = arc.rx();\n\try = arc.ry();\n\txrotation = math::rad2deg(arc.rotationAngle());\n\tlargeArcFlag = arc.largeArc();\n\tsweepFlag = arc.sweepPositive();\n\tthis->points[0] = Pair<T>(arc.endPoint());\n}\n\n/** Returns true if two path command objects are identical (same command and same parameters). */\ntemplate <typename Cmd1, typename Cmd2>\ntypename std::enable_if<std::is_base_of<CommandBase, Cmd1>::value, bool>::type\noperator == (const Cmd1 &cmd1, const Cmd2 &cmd2) {\n\tif (std::is_convertible<Cmd1, Cmd2>::value && std::is_convertible<Cmd2, Cmd1>::value)\n\t\treturn cmd1.pointsEqual(cmd2);\n\treturn false;\n}\n\n/** Returns true if two path command objects differ (different commands or different parameters). */\ntemplate <typename Cmd1, typename Cmd2>\ntypename std::enable_if<std::is_base_of<CommandBase, Cmd1>::value, bool>::type\noperator != (const Cmd1 &cmd1, const Cmd2 &cmd2) {\n\tif (std::is_convertible<Cmd1, Cmd2>::value && std::is_convertible<Cmd2, Cmd1>::value)\n\t\treturn !cmd1.pointsEqual(cmd2);\n\treturn true;\n}\n\n}  // namespace gp\n\n\ntemplate <typename T>\nclass GraphicsPath {\n\tfriend class PathClipper;\n\tpublic:\n\t\tenum class WindingRule {EVEN_ODD, NON_ZERO};\n\t\tusing Point = Pair<T>;\n\n\tprotected:\n\n\t\tstatic XMLString to_param_str (double v, double s, double d, bool leadingSpace) {\n\t\t\tXMLString str(v*s + d);\n\t\t\tif (leadingSpace && (str[0] != '-'))\n\t\t\t\tstr.insert(0, \" \");\n\t\t\treturn str;\n\t\t}\n\n\t\tstatic XMLString to_param_str (double val, double prev, double s, double d, bool leadingSpace) {\n\t\t\tXMLString str((val-prev)*s + d);\n\t\t\tif (leadingSpace && (str[0] != '-'))\n\t\t\t\tstr.insert(0, \" \");\n\t\t\treturn str;\n\t\t}\n\n\t\tstatic std::string to_param_str (const Point &p, double sx, double sy, double dx, double dy, bool leadingSpace) {\n\t\t\treturn to_param_str(p.x(), sx, dx, leadingSpace) + to_param_str(p.y(), sy, dy, true);\n\t\t}\n\n\t\tstatic std::string to_param_str (const Point &p, const Point &prev, double sx, double sy, double dx, double dy, bool leadingSpace) {\n\t\t\treturn to_param_str(p.x()-prev.x(), sx, dx, leadingSpace) + to_param_str(p.y()-prev.y(), sy, dy, true);\n\t\t}\n\n\t\tusing MoveTo = gp::MoveTo<T>;\n\t\tusing LineTo = gp::LineTo<T>;\n\t\tusing CubicTo = gp::CubicTo<T>;\n\t\tusing QuadTo = gp::QuadTo<T>;\n\t\tusing ArcTo = gp::ArcTo<T>;\n\t\tusing ClosePath = gp::ClosePath<T>;\n\n\t\t/// Variant representing a single path command\n\t\tusing CommandVariant = mpark::variant<MoveTo, LineTo, CubicTo, QuadTo, ArcTo, ClosePath>;\n\n\t\tclass IterationVisitor;\n\n\tpublic:\n\t\t/** Base class providing several template methods being called when executing\n\t\t *  GraphicsPath::iterate(). */\n\t\tclass IterationActions {\n\t\t\tfriend class IterationVisitor;\n\t\t\tpublic:\n\t\t\t\tvirtual ~IterationActions () =default;\n\t\t\t\tvirtual void moveto (const Point &p) {}\n\t\t\t\tvirtual void lineto (const Point &p) {}\n\t\t\t\tvirtual void hlineto (const T &x) {}\n\t\t\t\tvirtual void vlineto (const T &y) {}\n\t\t\t\tvirtual void quadto (const Point &p) {}\n\t\t\t\tvirtual void quadto (const Point &p1, const Point &p2) {}\n\t\t\t\tvirtual void cubicto (const Point &p1, const Point &p2) {}\n\t\t\t\tvirtual void cubicto (const Point &p1, const Point &p2, const Point &p3) {}\n\t\t\t\tvirtual void arcto (T rx, T ry, double angle, bool largeArcFlag, bool sweepFlag, const Point &p) {}\n\t\t\t\tvirtual void closepath () {}\n\t\t\t\tvirtual bool quit () {return false;}\n\t\t\t\tvirtual void finished () {}\n\t\t\t\tconst Point& startPoint () const {return _startPoint;}\n\t\t\t\tconst Point& currentPoint () const {return _currentPoint;}\n\n\t\t\tprivate:\n\t\t\t\tPoint _startPoint;   ///< first point of the current sub-path\n\t\t\t\tPoint _currentPoint; ///< point reached by preceding path command, or (0,0) otherwise\n\t\t};\n\n\tprotected:\n\t\tclass ModificationActions : public IterationActions {\n\t\t\tfriend class GraphicsPath;\n\t\t\tpublic:\n\t\t\t\texplicit ModificationActions (GraphicsPath &path) : _path(path) {}\n\n\t\t\tprotected:\n\t\t\t\tGraphicsPath& path () {return _path;}\n\t\t\t\tint commandPos () const {return _commandPos;}\n\n\t\t\tprivate:\n\t\t\t\tGraphicsPath &_path;\n\t\t\t\tint _commandPos=0;  ///< number of command in path being processed\n\t\t};\n\n\t\tclass WriteActions : public IterationActions {\n\t\t\tpublic:\n\t\t\t\tWriteActions (std::ostream &os, bool rel, double sx, double sy, double dx, double dy)\n\t\t\t\t\t: _os(os), _relative(rel), _sx(sx), _sy(sy), _dx(dx), _dy(dy) {}\n\n\t\t\t\tvoid moveto (const Point &p) override  {write('M', {p});}\n\t\t\t\tvoid lineto (const Point &p) override  {write('L', {p});}\n\t\t\t\tvoid hlineto (const T &x) override     {write('H', x, this->currentPoint().x(), _sx, _dx);}\n\t\t\t\tvoid vlineto (const T &y) override     {write('V', y, this->currentPoint().y(), _sy, _dy);}\n\t\t\t\tvoid quadto (const Point &p) override {write('T', {p});}\n\t\t\t\tvoid quadto (const Point &p1, const Point &p2) override {write('Q', {p1, p2});}\n\t\t\t\tvoid cubicto (const Point &p1, const Point &p2) override {write('S', {p1, p2});}\n\t\t\t\tvoid cubicto (const Point &p1, const Point &p2, const Point &p3) override {write('C', {p1, p2, p3});}\n\t\t\t\tvoid closepath () override {_os << (_relative ? 'z' : 'Z');}\n\n\t\t\t\tvoid arcto (T rx, T ry, double angle, bool largeArcFlag, bool sweepFlag, const Point &p) override {\n\t\t\t\t\tPoint diff = p-this->currentPoint();\n\t\t\t\t\tif (std::abs(diff.x()) < 1e-7 && std::abs(diff.y()) < 1e-7)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (std::abs(rx) < 1e-7 && std::abs(ry) < 1e-7)\n\t\t\t\t\t\tlineto(p);\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (std::abs(std::abs(_sx) - std::abs(_sy)) < 1e-7)  {  // symmetric scaling?\n\t\t\t\t\t\t\tangle *= math::sgn(_sx) * math::sgn(_sy);\n\t\t\t\t\t\t\trx *= std::abs(_sx);\n\t\t\t\t\t\t\try *= std::abs(_sx);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {  // asymmetric scaling => compute new shape parameters\n\t\t\t\t\t\t\tEllipticalArc arc(this->currentPoint(), double(rx), double(ry), math::deg2rad(angle), largeArcFlag, sweepFlag, p);\n\t\t\t\t\t\t\tarc.transform(ScalingMatrix(_sx, _sy));\n\t\t\t\t\t\t\tangle = math::rad2deg(arc.rotationAngle());\n\t\t\t\t\t\t\trx = arc.rx();\n\t\t\t\t\t\t\try = arc.ry();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_os << (_relative ? 'a' : 'A')\n\t\t\t\t\t\t\t << to_param_str(rx, 1.0, 0, false)\n\t\t\t\t\t\t\t << to_param_str(ry, 1.0, 0, true)\n\t\t\t\t\t\t\t << to_param_str(angle, 1.0, 0, true)\n\t\t\t\t\t\t\t << ' ' << (largeArcFlag ? 1 : 0)\n\t\t\t\t\t\t\t << ' ' << (sweepFlag ? 1 : 0);\n\t\t\t\t\t\tif (_relative)\n\t\t\t\t\t\t\t_os << to_param_str(p, this->currentPoint(), _sx, _sy, _dx, _dy, true);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t_os << to_param_str(p, _sx, _sy, _dx, _dy, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tprotected:\n\t\t\t\tvoid write (char cmdchar, std::initializer_list<Point> points) const {\n\t\t\t\t\tint count=0;\n\t\t\t\t\tif (_relative) {\n\t\t\t\t\t\t_os << char(tolower(cmdchar));\n\t\t\t\t\t\tfor (const Point &p : points)\n\t\t\t\t\t\t\t_os << to_param_str(p, this->currentPoint(), _sx, _sy, _dx, _dy, count++ > 0);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t_os << cmdchar;\n\t\t\t\t\t\tfor (const Point &p : points)\n\t\t\t\t\t\t\t_os << to_param_str(p, _sx, _sy, _dx, _dy, count++ > 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvoid write (char cmdchar, T val, T relval, double s, double d) const {\n\t\t\t\t\tif (_relative)\n\t\t\t\t\t\t_os << char(tolower(cmdchar)) << to_param_str(val, relval, s, d, false);\n\t\t\t\t\telse\n\t\t\t\t\t\t_os << cmdchar << to_param_str(val, s, d, false);\n\t\t\t\t}\n\n\t\t\tprivate:\n\t\t\t\tstd::ostream &_os;  ///< write output to this stream\n\t\t\t\tbool _relative;     ///< if true, use relative coordinates in path commands\n\t\t\t\tdouble _sx, _sy;    ///< horizontal and vertical scaling factors\n\t\t\t\tdouble _dx, _dy;    ///< horizontal and vertical translation values\n\t\t};\n\n\t\t///////////////////////////////////////////////////////////////////////////////\n\n\t\t/** Calls the corresponding template method of an Action object for the current path command.\n\t\t *  If parameter 'useShortCmds' is true, the visitor operators check whether a command\n\t\t *  can be shortened due to special cases, e.g. horizontal or vertical lines, smooth\n\t\t *  curve connections etc. Otherwise, the full command templates are triggered. */\n\t\tclass IterationVisitor {\n\t\t\tpublic:\n\t\t\t\tIterationVisitor (IterationActions &actions, bool useShortCmds, double eps=1e-7)\n\t\t\t\t\t: _actions(actions), _shortCommandsActive(useShortCmds), _eps(eps) {}\n\n\t\t\t\tvoid setPrevCommand (const CommandVariant &prevCommand) {\n\t\t\t\t\t_prevCommand = &prevCommand;\n\t\t\t\t}\n\n\t\t\t\tvoid operator () (const MoveTo &cmd) {\n\t\t\t\t\t_actions.moveto(cmd.points[0]);\n\t\t\t\t\t_actions._startPoint = _actions._currentPoint = cmd.points[0];\n\t\t\t\t}\n\n\t\t\t\tvoid operator () (const LineTo &cmd) {\n\t\t\t\t\tPoint diff = abs(_actions._currentPoint-cmd.points[0]);\n\t\t\t\t\tif (diff.x() >= _eps || diff.y() >= _eps) {\n\t\t\t\t\t\tif (!_shortCommandsActive)\n\t\t\t\t\t\t\t_actions.lineto(cmd.points[0]);\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (diff.x() < _eps)\n\t\t\t\t\t\t\t\t_actions.vlineto(cmd.points[0].y());\n\t\t\t\t\t\t\telse if (diff.y() < _eps)\n\t\t\t\t\t\t\t\t_actions.hlineto(cmd.points[0].x());\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t_actions.lineto(cmd.points[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t_actions._currentPoint = cmd.points[0];\n\t\t\t\t}\n\n\t\t\t\tvoid operator () (const CubicTo &cmd) {\n\t\t\t\t\tbool smooth=false;\n\t\t\t\t\tif (_shortCommandsActive) {\n\t\t\t\t\t\tif (auto *prevCubic = mpark::get_if<CubicTo>(_prevCommand)) {\n\t\t\t\t\t\t\tPoint diff = abs(cmd.points[0] - prevCubic->points[2]*T(2) + prevCubic->points[1]);\n\t\t\t\t\t\t\tif ((smooth = (diff.x() < _eps && diff.y() < _eps)))\n\t\t\t\t\t\t\t\t_actions.cubicto(cmd.points[1], cmd.points[2]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!smooth)\n\t\t\t\t\t\t_actions.cubicto(cmd.points[0], cmd.points[1], cmd.points[2]);\n\t\t\t\t\t_actions._currentPoint = cmd.points[2];\n\t\t\t\t}\n\n\t\t\t\tvoid operator () (const QuadTo &cmd) {\n\t\t\t\t\tbool smooth=false;\n\t\t\t\t\tif (_shortCommandsActive) {\n\t\t\t\t\t\tif (auto *prevQuad = mpark::get_if<QuadTo>(_prevCommand)) {\n\t\t\t\t\t\t\tPoint diff = abs(cmd.points[0] - prevQuad->points[1] * T(2) + prevQuad->points[0]);\n\t\t\t\t\t\t\tif ((smooth = (diff.x() < _eps && diff.y() < _eps)))  // is reflection?\n\t\t\t\t\t\t\t\t_actions.quadto(cmd.points[1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!smooth)\n\t\t\t\t\t\t_actions.quadto(cmd.points[0], cmd.points[1]);\n\t\t\t\t\t_actions._currentPoint = cmd.points[1];\n\t\t\t\t}\n\n\t\t\t\tvoid operator () (const ClosePath &cmd) {\n\t\t\t\t\t_actions.closepath();\n\t\t\t\t\t_actions._currentPoint = _actions._startPoint;\n\t\t\t\t}\n\n\t\t\t\tvoid operator () (const ArcTo &cmd) {\n\t\t\t\t\t_actions.arcto(cmd.rx, cmd.ry, cmd.xrotation, cmd.largeArcFlag, cmd.sweepFlag, cmd.points[0]);\n\t\t\t\t\t_actions._currentPoint = cmd.points[0];\n\t\t\t\t}\n\n\t\t\tprivate:\n\t\t\t\tIterationActions &_actions;\n\t\t\t\tbool _shortCommandsActive=false;\n\t\t\t\tdouble _eps=1e-7;\n\t\t\t\tconst CommandVariant *_prevCommand=nullptr;\n\t\t};\n\n\t\t///////////////////////////////////////////////////////////////////////////////\n\n\t\t/** Transforms all Point parameters of a path command. */\n\t\tclass TransformVisior {\n\t\t\tpublic:\n\t\t\t\texplicit TransformVisior (const Matrix &m) : matrix(m) {}\n\n\t\t\t\ttemplate <typename Cmd>\tvoid operator () (Cmd &cmd) {\n\t\t\t\t\tPoint cp = cmd.point(cmd.numPoints()-1);\n\t\t\t\t\tcmd.transform(matrix, _currentPoint);\n\t\t\t\t\t_currentPoint = cp;\n\t\t\t\t}\n\n\t\t\t\tvoid operator () (MoveTo &cmd) {\n\t\t\t\t\tPoint cp = cmd.point(0);\n\t\t\t\t\tcmd.transform(matrix, _currentPoint);\n\t\t\t\t\t_startPoint = _currentPoint = cp;\n\t\t\t\t}\n\n\t\t\t\tvoid operator () (ClosePath &cmd) {\n\t\t\t\t\t_currentPoint = _startPoint;\n\t\t\t\t}\n\n\t\t\tprivate:\n\t\t\t\tconst Matrix &matrix;\n\t\t\t\tPoint _startPoint, _currentPoint;  ///< untransformed start end current point\n\t\t};\n\n\tpublic:\n\t\texplicit GraphicsPath (WindingRule wr=WindingRule::NON_ZERO) : _windingRule(wr) {}\n\n\t\tvoid setWindingRule (WindingRule wr) {_windingRule = wr;}\n\t\tWindingRule windingRule () const     {return _windingRule;}\n\n\t\tvoid clear () {\n\t\t\t_commands.clear();\n\t\t}\n\n\t\t/// Returns true if the path is empty, i.e. there is nothing to draw\n\t\tbool empty () const {\n\t\t\treturn _commands.empty();\n\t\t}\n\n\t\t/// Returns the number of path commands used to describe the path.\n\t\tsize_t size () const {\n\t\t\treturn _commands.size();\n\t\t}\n\n\t\tconst Point& startPoint () const {return _startPoint;}\n\t\tconst Point& finalPoint () const {return _finalPoint;}\n\n\t\t/// Insert another path at the beginning of this one.\n\t\tvoid prepend (const GraphicsPath &path) {\n\t\t\t_commands.insert(_commands.begin(), path._commands.begin(), path._commands.end());\n\t\t}\n\n\t\tvoid moveto (const T &x, const T &y) {\n\t\t\tmoveto(Point(x, y));\n\t\t}\n\n\t\tvoid moveto (const Point &p) {\n\t\t\t// avoid sequences of several MOVETOs; always use latest\n\t\t\tif (_commands.empty() || !mpark::get_if<MoveTo>(&_commands.back()))\n\t\t\t\t_commands.emplace_back(MoveTo{p});\n\t\t\telse\n\t\t\t\tmpark::get<MoveTo>(_commands.back()).points[0] = p;\n\t\t\t_startPoint = _finalPoint = p;\n\t\t}\n\n\t\tvoid lineto (const T &x, const T &y) {\n\t\t\tlineto(Point(x, y));\n\t\t}\n\n\t\tvoid lineto (const Point &p) {\n\t\t\t_commands.emplace_back(LineTo{p});\n\t\t\t_finalPoint = p;\n\t\t}\n\n\t\tvoid rect (const T &x1, const T &y1, const T &x2, const T &y2) {\n\t\t\trect(Point(x1, y1), Point(x2, y2));\n\t\t}\n\n\t\tvoid rect (const Point &p1, const Point &p2) {\n\t\t\tmoveto(p1.x(), p1.y());\n\t\t\tlineto(p2.x(), p1.y());\n\t\t\tlineto(p2.x(), p2.y());\n\t\t\tlineto(p1.x(), p2.y());\n\t\t\tclosepath();\n\t\t}\n\n\t\tvoid quadto (const T &x1, const T &y1, const T &x2, const T &y2) {\n\t\t\tquadto(Point(x1, y1), Point(x2, y2));\n\t\t}\n\n\t\t/** Creates a quadratic Bézier segment. */\n\t\tvoid quadto (const Point &p1, const Point &p2) {\n\t\t\t_commands.emplace_back(QuadTo{p1, p2});\n\t\t\t_finalPoint = p2;\n\t\t}\n\n\t\t/** Creates a quadratic Bézier segment smoothly extending a preceding one, i.e. the gradients\n\t\t *  of the two curves are identical at the connection point. The control point of the second\n\t\t *  curve is computed as the reflection of the preceding curve's control point at the connection\n\t\t *  point. */\n\t\tvoid quadto (const Point &p2) {\n\t\t\tPoint p1;\n\t\t\tif (!_commands.empty()) {\n\t\t\t\tif (auto qto = mpark::get_if<QuadTo>(&_commands.back()))\n\t\t\t\t\tp1 = _finalPoint*T(2) - qto->point(0);  // reflect previous control point at current point\n\t\t\t\telse                  // previous command isn't a quadto?\n\t\t\t\t\tp1 = _finalPoint;  // => use current point as control point\n\t\t\t}\n\t\t\tquadto(p1, p2);\n\t\t}\n\n\t\tvoid cubicto (const T &x1, const T &y1, const T &x2, const T &y2, const T &x3, const T &y3) {\n\t\t\tcubicto(Point(x1, y1), Point(x2, y2), Point(x3, y3));\n\t\t}\n\n\t\t/** Creates a cubic Bézier segment. */\n\t\tvoid cubicto (const Point &p1, const Point &p2, const Point &p3) {\n\t\t\t_commands.emplace_back(CubicTo{p1, p2, p3});\n\t\t\t_finalPoint = p3;\n\t\t}\n\n\t\t/** Creates a cubic Bézier segment smoothly extending a preceding one, i.e. the gradients\n\t\t *  of the two curves are identical at the connection point. The first control point of\n\t\t *  the second curve is computed as the reflection of the preceding curve's second control\n\t\t *  point at the connection point. */\n\t\tvoid cubicto (const Point &p2, const Point &p3) {\n\t\t\tPoint p1;\n\t\t\tif (!_commands.empty()) {\n\t\t\t\tif (auto cto = mpark::get_if<CubicTo>(&_commands.back()))\n\t\t\t\t\tp1 = _finalPoint*T(2) - cto->point(1);  // reflect previous control point at current point\n\t\t\t\telse                  // previous command isn't a cubicto?\n\t\t\t\t\tp1 = _finalPoint;  // => use current point as control point\n\t\t\t}\n\t\t\tcubicto(p1, p2, p3);\n\t\t}\n\n\t\tvoid closepath () {\n\t\t\tif (!_commands.empty() && !mpark::get_if<ClosePath>(&_commands.back())) {\n\t\t\t\t_commands.emplace_back(ClosePath{});\n\t\t\t\t_finalPoint = _startPoint;\n\t\t\t}\n\t\t}\n\n\t\tvoid arcto (T rx, T ry, double angle, bool laf, bool sweep, const Point &p) {\n\t\t\t_commands.emplace_back(ArcTo{rx, ry, angle, laf, sweep, p});\n\t\t\t_finalPoint = p;\n\t\t}\n\n\t\t/** Detects all open subpaths and closes them by adding a closePath command.\n\t\t *\t Most font formats only support closed outline paths so there are no explicit closePath statements\n\t\t *\t in the glyph's outline description. All open paths are automatically closed by the renderer.\n\t\t *\t This method detects all open paths and adds the missing closePath statement. */\n\t\tvoid closeOpenSubPaths () {\n\t\t\tCommandVariant *prevCmd = nullptr;\n\t\t\tfor (auto it=_commands.begin(); it != _commands.end(); ++it) {\n\t\t\t\tif (mpark::get_if<MoveTo>(&*it) && prevCmd && !mpark::get_if<ClosePath>(prevCmd)) {\n\t\t\t\t\tprevCmd = &*it;\n\t\t\t\t\tit = _commands.insert(it, ClosePath{})+1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tprevCmd = &*it;\n\t\t\t}\n\t\t\tif (!_commands.empty() && !mpark::get_if<ClosePath>(&_commands.back()))\n\t\t\t\tclosepath();\n\t\t}\n\n\t\t/** Removes redundant path commands commands. Currently, only removes movetos. */\n\t\tvoid removeRedundantCommands () {\n\t\t\t// remove trailing moveto commands\n\t\t\twhile (!_commands.empty() && mpark::get_if<MoveTo>(&_commands.back()))\n\t\t\t\t_commands.pop_back();\n\t\t\t// resolve intermediate sequences of moveto commands\n\t\t\tauto it=_commands.begin();\n\t\t\tif (it == _commands.end())\n\t\t\t\treturn;\n\t\t\tauto prev = it++;\n\t\t\twhile (it != _commands.end()) {\n\t\t\t\tif (!mpark::get_if<MoveTo>(&*prev) || !mpark::get_if<MoveTo>(&*it))\n\t\t\t\t\tprev = it++;\n\t\t\t\telse {\n\t\t\t\t\tprev = _commands.erase(prev);  // remove leading MOVETO and advance 'prev' to 'it'\n\t\t\t\t\t++it;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/** Writes the path data as SVG path drawing command to a given output stream.\n\t\t *  @param[in] os output stream used to write the SVG commands to\n\t\t *  @param[in] relative if true, create relative rather than absolute coordinate values\n\t\t *  @param[in] sx horizontal scale factor\n\t\t *  @param[in] sy vertical scale factor\n\t\t *  @param[in] dx horizontal translation in PS point units\n\t\t *  @param[in] dy vertical translation in PS point units */\n\t\tvoid writeSVG (std::ostream &os, bool relative, double sx=1.0, double sy=1.0, double dx=0.0, double dy=0.0) const {\n\t\t\tWriteActions actions(os, relative, sx, sy, dx, dy);\n\t\t\titerate(actions, true);\n\t\t}\n\n\t\t/** Computes the bounding box of the current path.\n\t\t *  @param[out] bbox the computed bounding box */\n\t\tBoundingBox computeBBox () const {\n\t\t\tBoundingBox bbox;\n\t\t\tstruct BBoxActions : IterationActions {\n\t\t\t\texplicit BBoxActions (BoundingBox &bb) : bbox(bb) {}\n\t\t\t\tvoid moveto (const Point &p) override {bbox.embed(p);}\n\t\t\t\tvoid lineto (const Point &p) override {bbox.embed(p);}\n\t\t\t\tvoid quadto (const Point &p1, const Point &p2) override {bbox.embed(p1); bbox.embed(p2);}\n\t\t\t\tvoid cubicto (const Point &p1, const Point &p2, const Point &p3) override {bbox.embed(p1); bbox.embed(p2); bbox.embed(p3);}\n\t\t\t\tvoid arcto (T rx, T ry, double angle, bool laf, bool sweep, const Point &p) override {\n\t\t\t\t\tbbox.embed(EllipticalArc(this->currentPoint(), double(rx), double(ry), angle, laf, sweep, p).getBBox());\n\t\t\t\t}\n\t\t\t\tBoundingBox &bbox;\n\t\t\t} actions(bbox);\n\t\t\titerate(actions, false);\n\t\t\treturn bbox;\n\t\t}\n\n\t\t/** Checks whether the current path describes a dot/point only (with no extent).\n\t\t *  @param[out] p coordinates of the point if path describes a dot\n\t\t *  @return true if path is a dot/point */\n\t\tbool isDot (Point &p) const {\n\t\t\tstruct DotActions : IterationActions {\n\t\t\t\tDotActions () : differs(false) {}\n\t\t\t\tvoid moveto (const Point &p) override {point = p;}\n\t\t\t\tvoid lineto (const Point &p) override {differs = (p != point);}\n\t\t\t\tvoid quadto (const Point &p1, const Point &p2) override { differs = (point != p1 || point != p2);}\n\t\t\t\tvoid cubicto (const Point &p1, const Point &p2, const Point &p3) override {differs = (point != p1 || point != p2 || point != p3);}\n\t\t\t\tvoid arcto (T rx, T ry, double angle, bool largeArcFlag, bool sweepFlag, const Point &p) override { differs = (point != p);}\n\t\t\t\tbool quit () override {return differs;}\n\t\t\t\tPoint point;\n\t\t\t\tbool differs;\n\t\t\t} actions;\n\t\t\titerate(actions, false);\n\t\t\tp = actions.point;\n\t\t\treturn !actions.differs;\n\t\t}\n\n\t\t/** Replaces all elliptic arcs with cubic Bézier curves. */\n\t\tvoid approximateArcs () {\n\t\t\tstruct ArcActions : ModificationActions {\n\t\t\t\texplicit ArcActions (GraphicsPath &path) : ModificationActions(path) {}\n\t\t\t\tvoid arcto (T rx, T ry, double angle, bool largeArcFlag, bool sweepFlag, const Point &p) override {\n\t\t\t\t\tEllipticalArc arc(this->currentPoint(), rx, ry, angle, largeArcFlag, sweepFlag, p);\n\t\t\t\t\tstd::vector<CommandVariant> cmds;\n\t\t\t\t\tfor (const CubicBezier &bezier : arc.approximate())\n\t\t\t\t\t\tcmds.emplace_back(CubicTo{bezier.point(1), bezier.point(2), bezier.point(3)});\n\t\t\t\t\tthis->path().replace(this->commandPos(), cmds);\n\t\t\t\t}\n\t\t\t} actions(*this);\n\t\t\titerate(actions);\n\t\t}\n\n\t\t/** Transforms the path according to a given Matrix.\n\t\t *  @param[in] matrix Matrix describing the affine transformation */\n\t\tvoid transform (const Matrix &matrix) {\n\t\t\tTransformVisior visior(matrix);\n\t\t\tfor (CommandVariant &command : _commands)\n\t\t\t\tmpark::visit(visior, command);\n\t\t}\n\n\t\t/** Returns true if this path equals another one, i.e. it consists the same sequence\n\t\t *  of commands and coordinates. */\n\t\tbool operator == (const GraphicsPath &path) const {\n\t\t\tif (size() != path.size())\n\t\t\t\treturn false;\n\t\t\treturn std::equal(_commands.begin(), _commands.end(), path._commands.begin());\n\t\t}\n\n\t\t/** Returns true if this path differs from another one (command-wise). */\n\t\tbool operator != (const GraphicsPath &path) const {\n\t\t\tif (size() != path.size())\n\t\t\t\treturn true;\n\t\t\treturn !std::equal(_commands.begin(), _commands.end(), path._commands.begin());\n\t\t}\n\n\t\t/** Iterates over all commands defining this path and calls the corresponding template methods.\n\t\t *  In the case of successive bezier curve sequences, control points or tangent slopes are often\n\t\t *  identical so that the path description contains redundant information. SVG provides shorthand\n\t\t *  curve commands that require less parameters. If 'optimize' is true, this method detects such\n\t\t *  command sequences.\n\t\t *  @param[in] actions template methods called by each iteration step\n\t\t *  @param[in] optimize if true, shorthand drawing commands (hlineto, vlineto,...) are considered */\n\t\tvoid iterate (IterationActions &actions, bool optimize) const {\n\t\t\tdouble eps = XMLString::DECIMAL_PLACES > 0 ? std::pow(10, -XMLString::DECIMAL_PLACES) : 1e-7;\n\t\t\tIterationVisitor visitor(actions, optimize, eps);\n\t\t\tfor (const CommandVariant &cmd : _commands) {\n\t\t\t\tif (actions.quit())\n\t\t\t\t\tbreak;\n\t\t\t\tmpark::visit(visitor, cmd);\n\t\t\t\tvisitor.setPrevCommand(cmd);\n\t\t\t}\n\t\t\tactions.finished();\n\t\t}\n\n\tprotected:\n\t\t/** Replaces a command by a sequence of other ones.\n\t\t *  @param[in] pos position of command to replace (0-based)\n\t\t *  @param[in] cmds commands to insert */\n\t\tvoid replace (int pos, const std::vector<CommandVariant> &cmds) {\n\t\t\tauto it = _commands.end();\n\t\t\tif (!_commands.empty()) {\n\t\t\t\tit = _commands.begin()+pos;\n\t\t\t\tit = _commands.erase(it);\n\t\t\t}\n\t\t\t_commands.insert(it, cmds.begin(), cmds.end());\n\t\t}\n\n\t\t/** Iterates over all commands of the path and calls the corresponding template methods.\n\t\t *  In contrast to the public iterate() method, this one allows to modify the command sequence.\n\t\t *  @param[in] actions template methods called by each iteration step */\n\t\tvoid iterate (ModificationActions &actions) {\n\t\t\tIterationVisitor visitor(actions, false);\n\t\t\t// no iterators here since they may be invalidated during path modifications\n\t\t\tfor (size_t i=0; i < _commands.size(); i++) {\n\t\t\t\tif (actions.quit())\n\t\t\t\t\tbreak;\n\t\t\t\tactions._commandPos = i;\n\t\t\t\tmpark::visit(visitor, _commands[i]);\n\t\t\t\tvisitor.setPrevCommand(_commands[i]);\n\t\t\t}\n\t\t\tactions.finished();\n\t\t}\n\n\tprivate:\n\t\tstd::deque<CommandVariant> _commands; ///< sequence of path commands\n\t\tWindingRule _windingRule = WindingRule::NON_ZERO;\n\t\tPoint _startPoint; ///< start point of final sub-path\n\t\tPoint _finalPoint; ///< final point reached by last command in path\n};\n"
  },
  {
    "path": "src/GraphicsPathParser.hpp",
    "content": "/*************************************************************************\n** GraphicsPathParser.hpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <cctype>\n#include <cstring>\n#include <istream>\n#include <sstream>\n#include \"GraphicsPath.hpp\"\n#include \"MessageException.hpp\"\n\nnamespace internal {\n\ttemplate <typename NumType>\n\tbool parse_number (std::istream &is, NumType &value) {\n\t\tis >> value;\n\t\treturn !is.fail();\n\t}\n\n\ttemplate <>\n\tbool parse_number (std::istream &is, double &value) {\n\t\t// don't use operator >> for parsing floating point values because it's implemented\n\t\t// differently in libstdc++ and libc++. Instead, use our own function to read the\n\t\t// value from the input stream.\n\t\treturn util::read_double(is, value);\n\t}\n}\n\n\nstruct GraphicsPathParserException : MessageException {\n\texplicit GraphicsPathParserException (const std::string &msg) : MessageException(msg) {}\n};\n\n\ntemplate <typename T>\nclass GraphicsPathParser {\n\tpublic:\n\t\tGraphicsPath<T> parse (std::istream &is);\n\n\t\tGraphicsPath<T> parse (const std::string &str) {\n\t\t\tstd::istringstream iss(str);\n\t\t\treturn parse(iss);\n\t\t}\n\n\tprotected:\n\t\ttemplate <typename NumType>\n\t\tNumType parseNumberOfType (std::istream &is) const {\n\t\t\tis >> std::ws;\n\t\t\tNumType number;\n\t\t\tif (!internal::parse_number(is, number))\n\t\t\t\terror(\"number expected\", is);\n\t\t\tis >> std::ws;\n\t\t\treturn number;\n\t\t}\n\n\t\tT parseNumber (std::istream &is) const {\n\t\t\treturn parseNumberOfType<T>(is);\n\t\t}\n\n\t\tPair<T> parsePair (std::istream &is) {\n\t\t\tT x = parseNumber(is);\n\t\t\tskipCommaAndWhitespace(is);\n\t\t\tT y = parseNumber(is);\n\t\t\treturn Pair<T>(x, y);\n\t\t}\n\n\t\tvoid skipCommaAndWhitespace (std::istream &is) {\n\t\t\tis >> std::ws;\n\t\t\tif (is.peek() == ',') {\n\t\t\t\tis.get();\n\t\t\t\tis >> std::ws;\n\t\t\t}\n\t\t}\n\n\t\tvoid parseMoveTo (std::istream &is, bool relative);\n\t\tvoid parseClosePath ();\n\t\tvoid parseLineTo (std::istream &is, bool relative);\n\t\tvoid parseHorizontalLineTo (std::istream &is, bool relative);\n\t\tvoid parseVerticalLineTo (std::istream &is, bool relative);\n\t\tvoid parseCubicTo (std::istream &is, bool relative);\n\t\tvoid parseShortCubicTo (std::istream &is, bool relative);\n\t\tvoid parseQuadraticTo (std::istream &is, bool relative);\n\t\tvoid parseShortQuadraticTo (std::istream &is, bool relative);\n\t\tvoid parseArcTo (std::istream &is, bool relative);\n\n\t\tvoid error (const std::string &msg, std::istream &is) const {\n\t\t\tstd::string postext;\n\t\t\tif (_startpos >= 0) { // valid start position?\n\t\t\t\tif (is)\n\t\t\t\t\tpostext = \" at position \"+ std::to_string(is.tellg()-_startpos);\n\t\t\t\telse\n\t\t\t\t\tpostext = \" (premature end of data)\";\n\t\t\t}\n\t\t\tthrow GraphicsPathParserException(msg + postext);\n\t\t}\n\n\tprivate:\n\t\tstd::istream::pos_type _startpos=0; ///< stream position where the parsing started\n\t\tGraphicsPath<T> *_path=nullptr;     ///< path being parsed\n\t\tPair<T> _startPoint;                ///< start point of current subpath\n\t\tPair<T> _currentPoint;              ///< current point reached by last path command\n\t\tPair<T> _prevCtrlPoint;             ///< last control point of preceding curve command\n};\n\n\n/** Creates a GraphicsPath object from a SVG path data string read from a given input stream.\n *  @param[in] is stream to read from\n *  @return GraphicsPath object created from the SVG path description\n *  @throw GraphicsPathParserException if the path data contains syntax error */\ntemplate <typename T>\nGraphicsPath<T> GraphicsPathParser<T>::parse (std::istream &is) {\n\tGraphicsPath<T> path;\n\t_path = &path;\n\t_startpos = is.tellg();\n\t_currentPoint = _startPoint = _prevCtrlPoint = Pair<T>(0, 0);\n\tint cmd=0;\n\twhile (!is.eof()) {\n\t\tis >> std::ws;\n\t\tif (is.peek() < 0)\n\t\t\tbreak;\n\t\tif (isalpha(is.peek()))\n\t\t\tcmd = is.get();\n\t\telse {\n\t\t\t// further set of parameters appended to preceding command (command letter omitted)\n\t\t\tskipCommaAndWhitespace(is);\n\t\t\t// subsequent coordinate pairs of a \"moveto\" command lead to implicit \"lineto\" commands\n\t\t\t// https://www.w3.org/TR/SVG/paths.html#PathDataMovetoCommands\n\t\t\tif (cmd == 'M')\n\t\t\t\tcmd = 'L';\n\t\t\telse if (cmd == 'm')\n\t\t\t\tcmd = 'l';\n\t\t}\n\t\tint lower_cmd = std::tolower(cmd);\n\t\tbool relative = (cmd == lower_cmd);\n\t\tswitch (lower_cmd) {\n\t\t\tcase 'm': parseMoveTo(is, relative); break;\n\t\t\tcase 'z': parseClosePath(); break;\n\t\t\tcase 'l': parseLineTo(is, relative); break;\n\t\t\tcase 'h': parseHorizontalLineTo(is, relative); break;\n\t\t\tcase 'v': parseVerticalLineTo(is, relative); break;\n\t\t\tcase 'c': parseCubicTo(is, relative); break;\n\t\t\tcase 's': parseShortCubicTo(is, relative); break;\n\t\t\tcase 'q': parseQuadraticTo(is, relative); break;\n\t\t\tcase 't': parseShortQuadraticTo(is, relative); break;\n\t\t\tcase 'a': parseArcTo(is, relative); break;\n\t\t\tcase  0 : error(\"missing command at beginning of SVG path\", is);\n\t\t\tdefault : error(\"invalid SVG path command '\"+std::string(1, char(cmd))+\"'\", is);\n\t\t}\n\t\tif (strchr(\"csqt\", lower_cmd) == nullptr)  // not a Bézier curve command?\n\t\t\t_prevCtrlPoint = _currentPoint;            // => no control point, use current point\n\t}\n\t_path = nullptr;\n\treturn path;\n}\n\n\n/** Parses a single parameter pair of a \"moveto\" command. */\ntemplate <typename T>\nvoid GraphicsPathParser<T>::parseMoveTo (std::istream &is, bool relative) {\n\tPair<T> p = parsePair(is);\n\tif (!relative || _path->empty())\n\t\t_currentPoint = p;\n\telse\n\t\t_currentPoint += p;\n\t_path->moveto(_currentPoint);\n\t_startPoint = _currentPoint;\n}\n\n\n/** Handles a \"closepath\" command. */\ntemplate <typename T>\nvoid GraphicsPathParser<T>::parseClosePath () {\n\t_path->closepath();\n\t_currentPoint = _startPoint;\n}\n\n\n/** Parses a single parameter pair of a \"lineto\" command. */\ntemplate <typename T>\nvoid GraphicsPathParser<T>::parseLineTo (std::istream &is, bool relative) {\n\tPair<T> p = parsePair(is);\n\tif (relative)\n\t\t_currentPoint += p;\n\telse\n\t\t_currentPoint = p;\n\t_path->lineto(_currentPoint);\n}\n\n\n/** Parses a single parameter of a horizontal \"lineto\" command. */\ntemplate <typename T>\nvoid GraphicsPathParser<T>::parseHorizontalLineTo (std::istream &is, bool relative) {\n\tT x = parseNumber(is);\n\tif (relative)\n\t\t_currentPoint += Pair<T>(x, 0);\n\telse\n\t\t_currentPoint = Pair<T>(x, _currentPoint.y());\n\t_path->lineto(_currentPoint);\n}\n\n\n/** Parses a single parameter of a vertical \"lineto\" command. */\ntemplate <typename T>\nvoid GraphicsPathParser<T>::parseVerticalLineTo (std::istream &is, bool relative) {\n\tT y = parseNumber(is);\n\tif (relative)\n\t\t_currentPoint += Pair<T>(0, y);\n\telse\n\t\t_currentPoint = Pair<T>(_currentPoint.x(), y);\n\t_path->lineto(_currentPoint);\n}\n\n\n/** Parses a single parameter set a \"cubicto\" (cubic Bézier curve) command. */\ntemplate <typename T>\nvoid GraphicsPathParser<T>::parseCubicTo (std::istream &is, bool relative) {\n\tPair<T> p1 = parsePair(is);\n\tPair<T> p2 = parsePair(is);\n\tPair<T> pe = parsePair(is);\n\tif (!relative)\n\t\t_currentPoint = pe;\n\telse {\n\t\tp1 += _currentPoint;\n\t\tp2 += _currentPoint;\n\t\t_currentPoint += pe;\n\t}\n\t_path->cubicto(p1, p2, _currentPoint);\n\t_prevCtrlPoint = p2;\n}\n\n\n/** Parses a single parameter set a shorthand \"cubicto\" (cubic Bézier curve) command. */\ntemplate <typename T>\nvoid GraphicsPathParser<T>::parseShortCubicTo (std::istream &is, bool relative) {\n\tPair<T> p1 = _prevCtrlPoint + (_currentPoint-_prevCtrlPoint)*T(2);\n\tPair<T> p2 = parsePair(is);\n\tPair<T> pe = parsePair(is);\n\tif (!relative)\n\t\t_currentPoint = pe;\n\telse {\n\t\tp2 += _currentPoint;\n\t\t_currentPoint += pe;\n\t}\n\t_path->cubicto(p1, p2, _currentPoint);\n\t_prevCtrlPoint = p2;\n}\n\n\n/** Parses a single parameter set a \"quadto\" (quadratic Bézier curve) command. */\ntemplate <typename T>\nvoid GraphicsPathParser<T>::parseQuadraticTo (std::istream &is, bool relative) {\n\tPair<T> p1 = parsePair(is);\n\tPair<T> pe = parsePair(is);\n\tif (!relative)\n\t\t_currentPoint = pe;\n\telse {\n\t\tp1 += _currentPoint;\n\t\t_currentPoint += pe;\n\t}\n\t_path->quadto(p1, _currentPoint);\n\t_prevCtrlPoint = p1;\n}\n\n\n/** Parses a single parameter set a shorthand \"quadto\" (quadratic Bézier curve) command. */\ntemplate <typename T>\nvoid GraphicsPathParser<T>::parseShortQuadraticTo (std::istream &is, bool relative) {\n\tPair<T> p1 = _prevCtrlPoint + (_currentPoint-_prevCtrlPoint)*T(2);\n\tPair<T> pe = parsePair(is);\n\tif (relative)\n\t\t_currentPoint += pe;\n\telse\n\t\t_currentPoint = pe;\n\t_path->quadto(p1, _currentPoint);\n\t_prevCtrlPoint = p1;\n}\n\n\n/** Parses a single parameter set an \"arcto\" command. */\ntemplate <typename T>\nvoid GraphicsPathParser<T>::parseArcTo (std::istream &is, bool relative) {\n\tPair<T> r = parsePair(is);\n\tdouble xrot = parseNumberOfType<double>(is);\n\tint largeArgFlag = parseNumberOfType<int>(is);\n\tif (largeArgFlag != 0 && largeArgFlag != 1)\n\t\terror(\"large-arc-flag must be 0 or 1\", is);\n\tint sweepFlag = parseNumberOfType<int>(is);\n\tif (sweepFlag != 0 && sweepFlag != 1)\n\t\terror(\"sweep-flag must be 0 or 1\", is);\n\tT x = parseNumber(is);\n\tT y = parseNumber(is);\n\tPair<T> p(x, y);\n\tif (relative)\n\t\tp += _currentPoint;\n\t_currentPoint = p;\n\t_path->arcto(r.x(), r.y(), xrot, bool(largeArgFlag), bool(sweepFlag), _currentPoint);\n}\n"
  },
  {
    "path": "src/HashFunction.cpp",
    "content": "/*************************************************************************\n** HashFunction.cpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <iomanip>\n#include <sstream>\n#include \"algorithm.hpp\"\n#include \"HashFunction.hpp\"\n#include \"utility.hpp\"\n#include \"MD5HashFunction.hpp\"\n#include \"XXHashFunction.hpp\"\n\nusing namespace std;\n\n\n/** Returns a vector containing the names of the currently supported hash algorithms. */\nvector<string> HashFunction::supportedAlgorithms () {\n\treturn vector<string> {\n\t\t\"md5\", \"xxh32\", \"xxh64\",\n#ifdef ENABLE_XXH128\n\t\t\"xxh128\"\n#endif\n\t};\n}\n\n\n/** Returns true if 'algo' is the name of a supported hash algorithm. */\nbool HashFunction::isSupportedAlgorithm (const std::string &algo) {\n\tauto algos = supportedAlgorithms();\n\treturn algo::find(algos, algo) != algos.end();\n}\n\n\n/** Creates a hash function for a given algorithm name/identifier.\n *  The following names are currently supported: md5, xxh32, xxh64. */\nunique_ptr<HashFunction> HashFunction::create (const string &name) {\n\tstring lowerName = util::tolower(name);\n\tif (lowerName == \"md5\")\n\t\treturn util::make_unique<MD5HashFunction>();\n\tif (lowerName == \"xxh32\")\n\t\treturn util::make_unique<XXH32HashFunction>();\n\tif (lowerName == \"xxh64\")\n\t\treturn util::make_unique<XXH64HashFunction>();\n#ifdef ENABLE_XXH128\n\tif (lowerName == \"xxh128\")\n\t\treturn util::make_unique<XXH128HashFunction>();\n#endif\n\treturn nullptr;\n}\n\n\nstd::unique_ptr<HashFunction> HashFunction::create (const string &name, const char *data, size_t length) {\n\tauto hashfunc = create(name);\n\tif (hashfunc)\n\t\thashfunc->update(data, length);\n\treturn hashfunc;\n}\n\n\nstd::unique_ptr<HashFunction> HashFunction::create (const string &name, const string &data) {\n\treturn create(name, data.data(), data.length());\n}\n\n\nstd::unique_ptr<HashFunction> HashFunction::create (const string &name, const vector<uint8_t> &data) {\n\treturn create(name, reinterpret_cast<const char*>(data.data()), data.size());\n}\n\n\nvoid HashFunction::update (istream &is) {\n\twhile (is) {\n\t\tchar buf[4096];\n\t\tis.read(buf, 4096);\n\t\tupdate(buf, is.gcount());\n\t}\n}\n\n\n/** Returns the current digest as hexadecimal value. */\nstring HashFunction::digestString () const {\n\tostringstream oss;\n\toss << hex << setfill('0');\n\tfor (int byte : digestBytes())\n\t\toss << setw(2) << byte;\n\treturn oss.str();\n}\n"
  },
  {
    "path": "src/HashFunction.hpp",
    "content": "/*************************************************************************\n** HashFunction.hpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef HASHFUNCTION_HPP\n#define HASHFUNCTION_HPP\n\n#include <cstdint>\n#include <istream>\n#include <memory>\n#include <string>\n#include <vector>\n\n/** Common base class for all hash functions. */\nclass HashFunction {\n\tpublic:\n\t\tvirtual ~HashFunction () =default;\n\t\tvirtual int digestSize () const =0;\n\t\tvirtual void reset () =0;\n\t\tvirtual void update (const char *data, size_t length) =0;\n\t\tvirtual void update (const std::string &data) =0;\n\t\tvirtual void update (const std::vector<uint8_t> &data) =0;\n\t\tvirtual std::vector<uint8_t> digestBytes () const =0;\n\t\tvoid update (std::istream &is);\n\t\tstd::string digestString () const;\n\t\tstatic std::vector<std::string> supportedAlgorithms ();\n\t\tstatic bool isSupportedAlgorithm (const std::string &algo);\n\t\tstatic std::unique_ptr<HashFunction> create (const std::string &name);\n\t\tstatic std::unique_ptr<HashFunction> create (const std::string &name, const char *data, size_t length);\n\t\tstatic std::unique_ptr<HashFunction> create (const std::string &name, const std::string &data);\n\t\tstatic std::unique_ptr<HashFunction> create (const std::string &name, const std::vector<uint8_t> &data);\n};\n\n#endif\n"
  },
  {
    "path": "src/HtmlSpecialHandler.cpp",
    "content": "/*************************************************************************\n** HtmlSpecialHandler.cpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"HtmlSpecialHandler.hpp\"\n#include \"HyperlinkManager.hpp\"\n#include \"InputReader.hpp\"\n#include \"SpecialActions.hpp\"\n\nusing namespace std;\n\n\nvoid HtmlSpecialHandler::preprocess (const string&, istream &is, SpecialActions &actions) {\n\tStreamInputReader ir(is);\n\tir.skipSpace();\n\t// collect page number and ID of named anchors\n\tmap<string,string> attribs;\n\tif (ir.check(\"<a \") && ir.parseAttributes(attribs, true, \"\\\"\") > 0) {\n\t\tmap<string,string>::iterator it;\n\t\tif ((it = attribs.find(\"name\")) != attribs.end())\n\t\t\tHyperlinkManager::instance().addNameAnchor(it->second, actions.getCurrentPageNumber());\n\t\telse if ((it = attribs.find(\"href\")) != attribs.end())\n\t\t\tHyperlinkManager::instance().addHrefAnchor(it->second);\n\t}\n}\n\n\nbool HtmlSpecialHandler::process (const string&, istream &is, SpecialActions &actions) {\n\t_active = true;\n\tStreamInputReader ir(is);\n\tir.skipSpace();\n\tmap<string,string> attribs;\n\tmap<string,string>::iterator it;\n\tif (ir.check(\"<a \") && ir.parseAttributes(attribs, true, \"\\\"\") > 0) {\n\t\tif ((it = attribs.find(\"href\")) != attribs.end())   // <a href=\"URI\">\n\t\t\tHyperlinkManager::instance().createLink(it->second, actions);\n\t\telse if ((it = attribs.find(\"name\")) != attribs.end())  // <a name=\"ID\">\n\t\t\tHyperlinkManager::instance().setActiveNameAnchor(it->second, actions);\n\t\telse\n\t\t\treturn false;  // none or only invalid attributes\n\t}\n\telse if (ir.check(\"</a>\"))\n\t\tHyperlinkManager::instance().closeAnchor(actions);\n\telse if (ir.check(\"<img src=\")) {\n\t}\n\telse if (ir.check(\"<base \") && ir.parseAttributes(attribs, true, \"\\\"\") > 0 && (it = attribs.find(\"href\")) != attribs.end())\n\t\tHyperlinkManager::instance().setBaseUrl(it->second);\n\treturn true;\n}\n\n\n/** This method is called every time the DVI position changes. */\nvoid HtmlSpecialHandler::dviMovedTo (double x, double y, SpecialActions &actions) {\n\tif (_active)\n\t\tHyperlinkManager::instance().checkNewLine(actions);\n}\n\n\nvoid HtmlSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actions) {\n\tif (_active) {\n\t\tHyperlinkManager::instance().createViews(pageno, actions);\n\t\t_active = false;\n\t}\n}\n\n\nvector<const char*> HtmlSpecialHandler::prefixes () const {\n\tvector<const char*> pfx {\"html:\"};\n\treturn pfx;\n}\n"
  },
  {
    "path": "src/HtmlSpecialHandler.hpp",
    "content": "/*************************************************************************\n** HtmlSpecialHandler.hpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef HTMLSPECIALHANDLER_HPP\n#define HTMLSPECIALHANDLER_HPP\n\n#include <string>\n#include \"Color.hpp\"\n#include \"SpecialHandler.hpp\"\n\nclass SpecialActions;\n\nclass HtmlSpecialHandler : public SpecialHandler {\n\tpublic:\n\t\tvoid preprocess (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tbool process (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tconst char* info () const override {return \"hyperref specials\";}\n\t\tconst char* name () const override {return handlerName();}\n\t\tstatic const char* handlerName ()  {return \"html\";}\n\t\tstd::vector<const char*> prefixes () const override;\n\n\tprotected:\n\t\tvoid dviEndPage (unsigned pageno, SpecialActions &actions) override;\n\t\tvoid dviMovedTo (double x, double y, SpecialActions &actions) override;\n\n\tprivate:\n\t\tbool _active=false;\n};\n\n#endif\n"
  },
  {
    "path": "src/HyperlinkManager.cpp",
    "content": "/*************************************************************************\n** HyperlinkManager.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <sstream>\n#include \"HyperlinkManager.hpp\"\n#include \"Message.hpp\"\n#include \"SpecialActions.hpp\"\n#include \"SVGTree.hpp\"\n#include \"utility.hpp\"\n#include \"XMLNode.hpp\"\n\nusing namespace std;\n\n// variable to select the link marker variant (none, underlined, boxed, or colored background)\nHyperlinkManager::MarkerType HyperlinkManager::MARKER_TYPE = MarkerType::LINE;\nColor HyperlinkManager::LINK_BGCOLOR;\nColor HyperlinkManager::LINK_LINECOLOR;\nHyperlinkManager::ColorSource HyperlinkManager::COLORSOURCE = ColorSource::DEFAULT;\n\n\nHyperlinkManager& HyperlinkManager::instance () {\n\tstatic HyperlinkManager instance;\n\treturn instance;\n}\n\n\nvoid HyperlinkManager::addHrefAnchor (const string &uri) {\n\tif (uri.empty() || uri[0] != '#')\n\t\treturn;\n\tstring name = uri.substr(1);\n\tauto it = _namedAnchors.find(name);\n\tif (it != _namedAnchors.end())  // anchor already defined?\n\t\tit->second.referenced = true;\n\telse {\n\t\tint id = static_cast<int>(_namedAnchors.size())+1;\n\t\t_namedAnchors.emplace(name, NamedAnchor(0, -id, 0, true));\n\t}\n}\n\n\nvoid HyperlinkManager::addNameAnchor (const string &name, int pageno) {\n\tif (name.empty())\n\t\treturn;\n\tauto it = _namedAnchors.find(name);\n\tif (it == _namedAnchors.end()) {  // anchor completely undefined?\n\t\tint id = static_cast<int>(_namedAnchors.size())+1;\n\t\t_namedAnchors.emplace(name, NamedAnchor(pageno, id, 0));\n\t}\n\telse if (it->second.id >= 0) // anchor already defined?\n\t\tMessage::wstream(true) << \"named hyperref anchor '\" << name << \"' redefined\\n\";\n\telse {\n\t\t// anchor referenced but not defined yet?\n\t\tit->second.id *= -1;\n\t\tit->second.pageno = pageno;\n\t}\n}\n\n\nvoid HyperlinkManager::setActiveNameAnchor (const string &name, SpecialActions &actions) {\n\tauto it = _namedAnchors.find(name);\n\tif (it != _namedAnchors.end()) {\n\t\tcloseAnchor(actions);\n\t\tit->second.pos = actions.getY();\n\t\t_anchorType = AnchorType::NAME;\n\t}\n}\n\n\nvoid HyperlinkManager::createLink (string uri, SpecialActions &actions) {\n\tcloseAnchor(actions);\n\tstring name;\n\tif (uri[0] == '#') {  // reference to named anchor?\n\t\tname = uri.substr(1);\n\t\tauto it = _namedAnchors.find(name);\n\t\tif (it == _namedAnchors.end() || it->second.id < 0)\n\t\t\tMessage::wstream(true) << \"reference to undefined anchor '\" << name << \"'\\n\";\n\t\telse {\n\t\t\tint id = it->second.id;\n\t\t\turi = \"#loc\"+XMLString(id);\n\t\t\tif (actions.getCurrentPageNumber() != it->second.pageno) {\n\t\t\t\tostringstream oss;\n\t\t\t\toss << actions.getSVGFilePath(it->second.pageno).relative() << uri;\n\t\t\t\turi = oss.str();\n\t\t\t}\n\t\t}\n\t}\n\tif (!_base.empty() && uri.find(\"://\") != string::npos) {\n\t\tif (*_base.rbegin() != '/' && uri[0] != '/' && uri[0] != '#')\n\t\t\turi = \"/\" + uri;\n\t\turi = _base + uri;\n\t}\n\tauto anchorNode = util::make_unique<SVGElement>(\"a\");\n\tanchorNode->addAttribute(\"xlink:href\", uri);\n\tanchorNode->addAttribute(\"xlink:title\", XMLString(name.empty() ? uri : name, false));\n\tactions.svgTree().pushPageContext(std::move(anchorNode));\n\tactions.bbox(\"{anchor}\", true);  // start computing the bounding box of the linked area\n\t_depthThreshold = actions.getDVIStackDepth();\n\t_anchorType = AnchorType::HREF;\n}\n\n\nvoid HyperlinkManager::closeAnchor (SpecialActions &actions) {\n\tif (_anchorType == AnchorType::HREF) {\n\t\tmarkLinkedBox(actions);\n\t\tactions.svgTree().popPageContext();\n\t\t_depthThreshold = 0;\n\t}\n\t_anchorType = AnchorType::NONE;\n}\n\n\nvoid HyperlinkManager::checkNewLine (SpecialActions &actions) {\n\tif (_anchorType == AnchorType::NONE)\n\t\treturn;\n\t// Start a new box if the current depth of the DVI stack underruns\n\t// the initial threshold which indicates a line break.\n\tif (actions.getDVIStackDepth() < _depthThreshold) {\n\t\tmarkLinkedBox(actions);\n\t\t_depthThreshold = actions.getDVIStackDepth();\n\t\tactions.bbox(\"{anchor}\", true);  // start a new box on the new line\n\t}\n}\n\n\n/** Marks a single rectangular area of the linked part of the document with a line or\n *  a box so that it's noticeable by the user. Additionally, an invisible rectangle is\n *  placed over this area in order to avoid flickering of the mouse cursor when moving\n *  it over the hyperlinked area. */\nvoid HyperlinkManager::markLinkedBox (SpecialActions &actions) const {\n\tconst BoundingBox &bbox = actions.bbox(\"{anchor}\");\n\tif (bbox.width() > 0 && bbox.height() > 0) {  // does the bounding box extend in both dimensions?\n\t\tif (MARKER_TYPE != MarkerType::NONE) {\n\t\t\tconst double linewidth = _linewidth >= 0 ? _linewidth : min(0.5, bbox.height()/15);\n\t\t\tauto rect = util::make_unique<SVGElement>(\"rect\");\n\t\t\tdouble x = bbox.minX();\n\t\t\tdouble y = bbox.maxY()+linewidth;\n\t\t\tdouble w = bbox.width();\n\t\t\tdouble h = linewidth;\n\t\t\tconst Color strokeColor = COLORSOURCE == ColorSource::DEFAULT ? actions.getStrokeColor() : LINK_LINECOLOR;\n\t\t\tconst Color fillColor = COLORSOURCE == ColorSource::DEFAULT ? actions.getFillColor() : LINK_LINECOLOR;\n\t\t\tif (MARKER_TYPE == MarkerType::LINE)\n\t\t\t\trect->setFillColor(fillColor);\n\t\t\telse {\n\t\t\t\tconst double offset = _linewidth < 0 ? linewidth : 0 ;\n\t\t\t\tx -= offset;\n\t\t\t\ty = bbox.minY()-offset;\n\t\t\t\tw += 2*offset;\n\t\t\t\th += bbox.height()+offset;\n\t\t\t\tif (MARKER_TYPE == MarkerType::BGCOLOR) {\n\t\t\t\t\trect->setFillColor(LINK_BGCOLOR);\n\t\t\t\t\tif (COLORSOURCE != ColorSource::DEFAULT) {\n\t\t\t\t\t\trect->setStrokeColor(strokeColor);\n\t\t\t\t\t\trect->setStrokeWidth(linewidth);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {  // LM_BOX\n\t\t\t\t\trect->setNoFillColor();\n\t\t\t\t\trect->setStrokeColor(strokeColor);\n\t\t\t\t\trect->setStrokeWidth(linewidth);\n\t\t\t\t}\n\t\t\t}\n\t\t\trect->addAttribute(\"x\", x);\n\t\t\trect->addAttribute(\"y\", y);\n\t\t\trect->addAttribute(\"width\", w);\n\t\t\trect->addAttribute(\"height\", h);\n\t\t\tactions.svgTree().prependToPage(std::move(rect));\n\t\t\tif (MARKER_TYPE == MarkerType::BOX || MARKER_TYPE == MarkerType::BGCOLOR) {\n\t\t\t\t// slightly enlarge the boxed area\n\t\t\t\tx -= linewidth/2;\n\t\t\t\ty -= linewidth/2;\n\t\t\t\tw += linewidth;\n\t\t\t\th += linewidth;\n\t\t\t}\n\t\t\tactions.embed(BoundingBox(x, y, x+w, y+h));\n\t\t}\n\t\t// Create an invisible rectangle around the linked area so that it's easier to access.\n\t\t// This is only necessary when using paths rather than real text elements together with fonts.\n\t\tif (!SVGTree::USE_FONTS) {\n\t\t\tauto rect = util::make_unique<SVGElement>(\"rect\");\n\t\t\trect->addAttribute(\"x\", bbox.minX());\n\t\t\trect->addAttribute(\"y\", bbox.minY());\n\t\t\trect->addAttribute(\"width\", bbox.width());\n\t\t\trect->addAttribute(\"height\", bbox.height());\n\t\t\trect->setFillColor(Color::WHITE);\n\t\t\trect->setFillOpacity(OpacityAlpha(0, 0));\n\t\t\tactions.svgTree().appendToPage(std::move(rect));\n\t\t}\n\t}\n}\n\n\n// Creates SVG views for all collected named anchors defined on a given page.\nvoid HyperlinkManager::createViews (unsigned pageno, SpecialActions &actions) {\n\tconst BoundingBox &pagebox = actions.bbox();\n\tfor (auto &stranchorpair : _namedAnchors) {\n\t\tif (stranchorpair.second.pageno == pageno && stranchorpair.second.referenced) {  // current anchor referenced?\n\t\t\tostringstream oss;\n\t\t\toss << pagebox.minX() << ' ' << stranchorpair.second.pos << ' '\n\t\t\t\t << pagebox.width() << ' ' << pagebox.height();\n\t\t\tauto view = util::make_unique<XMLElement>(\"view\");\n\t\t\tview->addAttribute(\"id\", \"loc\"+XMLString(stranchorpair.second.id));\n\t\t\tview->addAttribute(\"viewBox\", oss.str());\n\t\t\tactions.svgTree().appendToDefs(std::move(view));\n\t\t}\n\t}\n\tcloseAnchor(actions);\n}\n\n\n/** Sets the appearance of the link markers.\n *  @param[in] marker string specifying the marker (format: type[:linecolor])\n *  @return true on success */\nbool HyperlinkManager::setLinkMarker (const string &marker) {\n\tstring type;  // \"none\", \"box\", \"line\", or a background color specifier\n\tstring color; // optional line color specifier\n\tauto seppos = marker.find(':');\n\tif (seppos == string::npos)\n\t\ttype = marker;\n\telse {\n\t\ttype = marker.substr(0, seppos);\n\t\tcolor = marker.substr(seppos+1);\n\t}\n\tif (type.empty() || type == \"none\")\n\t\tMARKER_TYPE = MarkerType::NONE;\n\telse if (type == \"line\")\n\t\tMARKER_TYPE = MarkerType::LINE;\n\telse if (type == \"box\")\n\t\tMARKER_TYPE = MarkerType::BOX;\n\telse {\n\t\tif (!LINK_BGCOLOR.setPSName(std::move(type), false))\n\t\t\treturn false;\n\t\tMARKER_TYPE = MarkerType::BGCOLOR;\n\t}\n\tCOLORSOURCE = ColorSource::DEFAULT;\n\tif (MARKER_TYPE != MarkerType::NONE && !color.empty()) {\n\t\tif (!LINK_LINECOLOR.setPSName(std::move(color), false))\n\t\t\treturn false;\n\t\tCOLORSOURCE = ColorSource::LINKMARKER;\n\t}\n\treturn true;\n}\n\n\nvoid HyperlinkManager::setDefaultLinkColor (Color color) {\n\tif (COLORSOURCE != ColorSource::LINKMARKER) {\n\t\tCOLORSOURCE = ColorSource::STATIC;\n\t\tLINK_LINECOLOR = color;\n\t}\n}"
  },
  {
    "path": "src/HyperlinkManager.hpp",
    "content": "/*************************************************************************\n** HyperlinkManager.hpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef HYPERLINKMANAGER_HPP\n#define HYPERLINKMANAGER_HPP\n\n#include <string>\n#include <unordered_map>\n#include \"Color.hpp\"\n#include \"SpecialActions.hpp\"\n\nclass SpecialActions;\n\nclass HyperlinkManager {\n\tstruct NamedAnchor {\n\t\tNamedAnchor () : pageno(0), id(0), pos(0), referenced(false) {}\n\t\tNamedAnchor (unsigned pn, int i, double p, bool r=false) : pageno(pn), id(i), pos(p), referenced(r) {}\n\t\tunsigned pageno;  ///< page number where the anchor is located\n\t\tint id;           ///< unique numerical ID (< 0 if anchor is undefined yet)\n\t\tdouble pos;       ///< vertical position of named anchor (in PS point units)\n\t\tbool referenced;  ///< true if a reference to this anchor exists\n\t};\n\n\tenum class AnchorType {NONE, HREF, NAME};\n\tenum class ColorSource {DEFAULT, LINKMARKER, STATIC};\n\tusing NamedAnchors = std::unordered_map<std::string, NamedAnchor>;\n\n\tpublic:\n\t\tHyperlinkManager (const HyperlinkManager&) =delete;\n\t\tHyperlinkManager (HyperlinkManager&&) =delete;\n\t\tvoid addHrefAnchor (const std::string &uri);\n\t\tvoid addNameAnchor (const std::string &name, int pageno);\n\t\tvoid setActiveNameAnchor (const std::string &name, SpecialActions &actions);\n\t\tvoid closeAnchor (SpecialActions &actions);\n\t\tvoid checkNewLine (SpecialActions &actions);\n\t\tvoid createLink (std::string uri, SpecialActions &actions);\n\t\tvoid createViews (unsigned pageno, SpecialActions &actions);\n\t\tvoid setBaseUrl (const std::string &base) {_base = base;}\n\t\tvoid setLineWidth (double w) {_linewidth = w;}\n\t\tstatic HyperlinkManager& instance ();\n\t\tstatic bool setLinkMarker (const std::string &marker);\n\t\tstatic void setDefaultLinkColor (Color color);\n\n\tprotected:\n\t\tHyperlinkManager () =default;\n\t\tvoid markLinkedBox (SpecialActions &actions) const;\n\n\t\tenum class MarkerType {NONE, LINE, BOX, BGCOLOR};\n\t\tstatic MarkerType MARKER_TYPE;  ///< selects how to mark linked areas\n\t\tstatic Color LINK_BGCOLOR;      ///< background color if linkmark type == LT_BGCOLOR\n\t\tstatic Color LINK_LINECOLOR;    ///< line color if linkmark type is LM_LINE or LM_BOX\n\t\tstatic ColorSource COLORSOURCE; ///< if true, LINK_LINECOLOR is applied\n\n\tprivate:\n\t\tAnchorType _anchorType=AnchorType::NONE;  ///< type of active anchor\n\t\tint _depthThreshold=0;      ///< break anchor box if the DVI stack depth underruns this threshold\n\t\tdouble _linewidth=-1;       ///< line width of link marker (-1 => compute individual value per link)\n\t\tstd::string _base;          ///< base URL that is prepended to all relative targets\n\t\tNamedAnchors _namedAnchors; ///< information about all named anchors processed\n};\n\n#endif\n"
  },
  {
    "path": "src/ImageToSVG.cpp",
    "content": "/*************************************************************************\n** ImageToSVG.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <config.h>\n#include <fstream>\n#include <sstream>\n#include \"Calculator.hpp\"\n#include \"DvisvgmSpecialHandler.hpp\"\n#include \"ImageToSVG.hpp\"\n#include \"Message.hpp\"\n#include \"MessageException.hpp\"\n#include \"PageRanges.hpp\"\n#include \"PsSpecialHandler.hpp\"\n#include \"optimizer/SVGOptimizer.hpp\"\n#include \"SVGOutput.hpp\"\n#include \"System.hpp\"\n#include \"utility.hpp\"\n#include \"version.hpp\"\n\nusing namespace std;\n\n\nImageToSVG::ImageToSVG (std::string fname, SVGOutputBase &out)\n\t: _fname(std::move(fname)), _out(out), _gsVersion(Ghostscript().revision())\n{\n}\n\n\nvoid ImageToSVG::checkGSAndFileFormat () {\n\tif (!_gsVersion)\n\t\tthrow MessageException(\"Ghostscript is required to process \"+imageFormat()+\" files\");\n\tif (!imageIsValid())\n\t\tthrow MessageException(\"invalid \"+imageFormat()+\" file\");\n}\n\n\nvoid ImageToSVG::convert (int pageno) {\n\tcheckGSAndFileFormat();\n\tBoundingBox bbox = imageBBox();\n\tif (bbox.valid() && (bbox.width() == 0 || bbox.height() == 0))\n\t\tMessage::wstream(true) << \"bounding box of \" << imageFormat() << \" file is empty\\n\";\n\tMessage::mstream().indent(0);\n\tif (isSinglePageFormat())\n\t\tMessage::mstream(false, Message::MC_PAGE_NUMBER) << \"processing \" << imageFormat() << \" file\\n\";\n\telse\n\t\tMessage::mstream(false, Message::MC_PAGE_NUMBER) << \"processing page \" << pageno << \"\\n\";\n\tMessage::mstream().indent(1);\n\t_svg.newPage(pageno);\n\t// create a psfile special and forward it to the PsSpecialHandler\n\tstringstream ss;\n\tss << \"\\\"\" << _fname << \"\\\" \"\n\t\t\t\"llx=\" << bbox.minX() << \" \"\n\t\t\t\"lly=\" << bbox.minY() << \" \"\n\t\t\t\"urx=\" << bbox.maxX() << \" \"\n\t\t\t\"ury=\" << bbox.maxY();\n\t_currentPageNumber = pageno;\n\tif (!isSinglePageFormat())\n\t\tss << \" page=\" << pageno << \" proc=gs\";\n\ttry {\n\t\t_psHandler.process(psSpecialCmd(), ss, *this);\n\t}\n\tcatch (...) {\n\t\tprogress(nullptr);  // remove progress message\n\t\tthrow;\n\t}\n\twriteSVG(pageno);\n}\n\n\nvoid ImageToSVG::writeSVG (int pageno) {\n\tprogress(nullptr);\n\tMatrix matrix = getUserMatrix(_bbox);\n\t// output SVG file\n\tSVGOptimizer(_svg).execute();\n\t_svg.transformPage(matrix);\n\t_bbox.transform(matrix);\n\t_svg.setBBox(_bbox);\n\t_svg.appendToDoc(util::make_unique<XMLComment>(\" This file was generated by dvisvgm \" + string(PROGRAM_VERSION) + \" \"));\n\tbool success = _svg.write(_out.getPageStream(pageno, totalPageCount()));\n\tstring svgfname = _out.filepath(pageno, totalPageCount()).shorterAbsoluteOrRelative();\n\t_out.finish();\n\tif (svgfname.empty())\n\t\tsvgfname = \"<stdout>\";\n\tif (!success)\n\t\tMessage::wstream() << \"failed to write output to \" << svgfname << '\\n';\n\telse {\n\t\tconst double bp2pt = (1_bp).pt();\n\t\tMessage::mstream(false,Message::MC_PAGE_SIZE)\n\t\t\t<< \"graphic size: \" << XMLString(_bbox.width()*bp2pt) << \"pt\"\n\t\t\t<< \" x \" << XMLString(_bbox.height()*bp2pt) << \"pt\"\n\t\t\t<< \" (\" << XMLString(_bbox.width()) << \"bp\"\n\t\t\t<< \" x \" << XMLString(_bbox.height()) << \"bp)\\n\";\n\t\tMessage::mstream(false, Message::MC_PAGE_WRITTEN) << \"output written to \" << svgfname << '\\n';\n\t\tif (!_userMessage.empty()) {\n\t\t\tstring msg = expandText(_userMessage);\n\t\t\tMessage::ustream(true) << msg << \"\\n\";\n\t\t}\n\t}\n\t_bbox.invalidate();\n\t_svg.reset();\n}\n\n\nvoid ImageToSVG::convert (int firstPage, int lastPage, pair<int,int> *pageinfo) {\n\tcheckGSAndFileFormat();\n\tint pageCount = 1;       // number of pages converted\n\tif (isSinglePageFormat())\n\t\tconvert(1);\n\telse {\n\t\tif (firstPage > lastPage)\n\t\t\tswap(firstPage, lastPage);\n\t\tfirstPage = max(1, firstPage);\n\t\tif (firstPage > totalPageCount())\n\t\t\tpageCount = 0;\n\t\telse {\n\t\t\tlastPage = min(totalPageCount(), lastPage);\n\t\t\tpageCount = lastPage-firstPage+1;\n\t\t\tfor (int i=firstPage; i <= lastPage; i++)\n\t\t\t\tconvert(i);\n\t\t}\n\t}\n\tif (pageinfo) {\n\t\tpageinfo->first = pageCount;\n\t\tpageinfo->second = totalPageCount();\n\t}\n}\n\n\nvoid ImageToSVG::convert (const std::string &rangestr, pair<int,int> *pageinfo) {\n\tcheckGSAndFileFormat();\n\tPageRanges ranges;\n\tif (!ranges.parse(rangestr, totalPageCount()))\n\t\tthrow MessageException(\"invalid page range format\");\n\n\tint pageCount=0;  // number of pages converted\n\tfor (const auto &range : ranges) {\n\t\tconvert(range.first, range.second, pageinfo);\n\t\tif (pageinfo)\n\t\t\tpageCount += pageinfo->first;\n\t}\n\tif (pageinfo)\n\t\tpageinfo->first = pageCount;\n}\n\n\nFilePath ImageToSVG::getSVGFilePath (unsigned pageno) const {\n\tFilePath path;\n\tunsigned numPages = totalPageCount();\n\tif (pageno >= 1 && pageno <= numPages)\n\t\tpath = _out.filepath(pageno, numPages);\n\treturn path;\n}\n\n\nvoid ImageToSVG::progress (const char *id) {\n\tstatic double time=System::time();\n\tstatic bool draw=false; // show progress indicator?\n\tstatic size_t count=0;\n\tcount++;\n\t// don't show the progress indicator before the given time has elapsed\n\tif (!draw && System::time()-time > PROGRESSBAR_DELAY) {\n\t\tdraw = true;\n\t\tTerminal::cursor(false);\n\t\tMessage::mstream(false) << \"\\n\";\n\t}\n\tif (draw && ((System::time() - time > 0.05) || id == nullptr)) {\n\t\tconstexpr size_t DIGITS=6;\n\t\tMessage::mstream(false, Message::MC_PROGRESS)\n\t\t\t<< string(DIGITS-min(DIGITS, static_cast<size_t>(log10(count))), ' ')\n\t\t\t<< count << \" PostScript instructions processed\\r\";\n\t\t// overprint indicator when finished\n\t\tif (id == nullptr) {\n\t\t\tMessage::estream().clearline();\n\t\t\tTerminal::cursor(true);\n\t\t}\n\t\ttime = System::time();\n\t}\n}\n\n\n/** Returns the matrix describing the graphics transformations\n *  given by the user in terms of transformation commands.\n *  @param[in] bbox bounding box of the graphics to transform */\nMatrix ImageToSVG::getUserMatrix (const BoundingBox &bbox) const {\n\tMatrix matrix(1);\n\tif (!_transCmds.empty()) {\n\t\tconst double bp2pt = (1_bp).pt();\n\t\tCalculator calc;\n\t\tcalc.setVariable(\"ux\", bbox.minX()*bp2pt);\n\t\tcalc.setVariable(\"uy\", bbox.minY()*bp2pt);\n\t\tcalc.setVariable(\"w\",  bbox.width()*bp2pt);\n\t\tcalc.setVariable(\"h\",  bbox.height()*bp2pt);\n\t\t// add constants for length units to calculator\n\t\tfor (const auto &unit : Length::getUnits())\n\t\t\tcalc.setVariable(unit.first, Length(1, unit.second).pt());\n\t\tmatrix.set(_transCmds, calc);\n\t}\n\treturn matrix;\n}\n"
  },
  {
    "path": "src/ImageToSVG.hpp",
    "content": "/*************************************************************************\n** ImageToSVG.hpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef IMAGETOSVG_HPP\n#define IMAGETOSVG_HPP\n\n#include <istream>\n#include <memory>\n#include <string>\n#include \"PsSpecialHandler.hpp\"\n#include \"SpecialActions.hpp\"\n#include \"SVGTree.hpp\"\n\nstruct SVGOutputBase;\n\nclass ImageToSVG : protected SpecialActions {\n\tpublic:\n\t\tImageToSVG (std::string fname, SVGOutputBase &out);\n\t\tvirtual void convert (int pageno);\n\t\tvoid convert (int firstPage, int lastPage, std::pair<int,int> *pageinfo);\n\t\tvoid convert (const std::string &rangestr, std::pair<int,int> *pageinfo);\n\t\tvoid setPageTransformation (const std::string &transCmds) {_transCmds = transCmds;}\n\t\tvoid setUserMessage (const std::string &msg) {_userMessage = msg;}\n\t\tstd::string filename () const {return _fname;}\n\t\tPSInterpreter& psInterpreter () const {return _psHandler.psInterpreter();}\n\t\tvirtual bool isSinglePageFormat () const =0;\n\t\tvirtual int totalPageCount () const =0;\n\n\tprotected:\n\t\tvirtual void checkGSAndFileFormat ();\n\t\tMatrix getUserMatrix (const BoundingBox &bbox) const;\n\t\tvirtual std::string imageFormat () const =0;\n\t\tvirtual bool imageIsValid () const =0;\n\t\tvirtual BoundingBox imageBBox () const =0;\n\t\tvirtual std::string psSpecialCmd () const =0;\n\t\tint gsVersion () const                                  {return _gsVersion;}\n\t\tvirtual void writeSVG (int pageno);\n\t\t// implement abstract base class SpecialActions\n\t\tdouble getX () const override                           {return _x;}\n\t\tdouble getY () const override                           {return _y;}\n\t\tvoid setX (double x) override                           {_x = x; _svg.setX(x);}\n\t\tvoid setY (double y) override                           {_y = y; _svg.setY(y);}\n\t\tvoid finishLine () override                             {}\n\t\tvoid setFillColor (const Color &color) override         {_svg.setFillColor(color);}\n\t\tvoid setStrokeColor (const Color &color) override       {_svg.setStrokeColor(color);}\n\t\tvoid setOpacity (const Opacity &opacity) override       {_svg.setOpacity(opacity);}\n\t\tColor getFillColor () const override                    {return _svg.getFillColor();}\n\t\tColor getStrokeColor () const override                  {return _svg.getStrokeColor();}\n\t\tvoid setMatrix (const Matrix &m) override               {_svg.setMatrix(m);}\n\t\tconst Matrix& getMatrix () const override               {return _svg.getMatrix();}\n\t\tconst Opacity& getOpacity () const override             {return _svg.getOpacity();}\n\t\tconst SVGTree& svgTree () const override                {return _svg;}\n\t\tvoid setBgColor (const Color &color) override           {}\n\t\tvoid embed (const BoundingBox &bbox) override           {_bbox.embed(bbox);}\n\t\tvoid embed (const DPair &p, double r=0) override        {if (r==0) _bbox.embed(p); else _bbox.embed(p, r);}\n\t\tvoid progress (const char *id) override;\n\t\tunsigned getCurrentPageNumber() const override          {return _currentPageNumber;}\n\t\tBoundingBox& bbox () override                           {return _bbox;}\n\t\tBoundingBox& bbox (const std::string &name, bool reset=false) override {return _bbox;}\n\t\tFilePath getSVGFilePath (unsigned pageno) const override;\n\t\tstd::string getBBoxFormatString () const override       {return \"\";}\n\n\tprotected:\n\t\tSVGTree _svg;\n\n\tprivate:\n\t\tstd::string _fname;   ///< name of image file\n\t\tSVGOutputBase &_out;\n\t\tdouble _x=0, _y=0;\n\t\tunsigned _currentPageNumber=0;\n\t\tBoundingBox _bbox;\n\t\tmutable PsSpecialHandler _psHandler;\n\t\tint _gsVersion=0;         ///< Ghostscript version found\n\t\tstd::string _transCmds;   ///< transformation commands\n\t\tstd::string _userMessage; ///< message printed after conversion\n};\n\n#endif\n"
  },
  {
    "path": "src/InputBuffer.cpp",
    "content": "/*************************************************************************\n** InputBuffer.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include <cstring>\n#include \"InputBuffer.hpp\"\n\nusing namespace std;\n\n\nStreamInputBuffer::StreamInputBuffer (istream &is, size_t bufsize)\n\t: _is(is), _buf1(bufsize), _buf2(bufsize)\n{\n\t_size1 = fillBuffer(_buf1);\n\t_size2 = fillBuffer(_buf2);\n}\n\n\n/** Returns the next character from the input buffer (or -1 if there's none). */\nint StreamInputBuffer::get () {\n\tif (_pos == _size1) {\n\t\tif (_size2 == 0)\n\t\t\treturn -1;\n\t\tswap(_buf1, _buf2);  // O(1) swap of memory buffers\n\t\t_size1 = _size2;\n\t\t_pos = 0;\n\t\t_size2 = fillBuffer(_buf2);\n\t}\n\treturn _buf1[_pos++];\n}\n\n\n/** Returns the next character to be read without skipping it.\n *  Same as peek(0). */\nint StreamInputBuffer::peek () const {\n\tif (_pos < _size1)\n\t\treturn _buf1[_pos];\n\treturn _size2 > 0 ? _buf2[0] : -1;\n}\n\n\n/** Returns the n-th next character without skipping it. */\nint StreamInputBuffer::peek (size_t n) const {\n\tif (_pos+n < _size1)\n\t\treturn _buf1[_pos+n];\n\tif (_pos+n < _size1+_size2)\n\t\treturn _buf2[_pos+n-_size1];\n\treturn -1;\n}\n\n\n/** Fills the buffer by reading a sequence of characters from the assigned input stream.\n *  @param[in] buf buffer to be filled\n *  @return number of characters read */\nsize_t StreamInputBuffer::fillBuffer (vector<uint8_t> &buf) const {\n\tif (_is && !_is.eof()) {\n\t\t_is.read(reinterpret_cast<char*>(buf.data()), streamsize(buf.size()));\n\t\treturn _is.gcount();\n\t}\n\treturn 0;\n}\n\n///////////////////////////////////////////////\n\nSplittedCharInputBuffer::SplittedCharInputBuffer (const char *buf1, size_t s1, const char *buf2, size_t s2) {\n\t_buf[0] = buf1;\n\t_buf[1] = buf2;\n\t_size[0] = buf1 ? s1 : 0;\n\t_size[1] = buf2 ? s2 : 0;\n\t_index = _size[0] ? 0 : 1;\n}\n\n\nint SplittedCharInputBuffer::get () {\n\tif (_size[_index] == 0)\n\t\treturn -1;\n\tint ret = static_cast<unsigned char>(*_buf[_index]++);\n\t_size[_index]--;\n\tif (_index == 0 && _size[0] == 0)\n\t\t_index++;\n\treturn ret;\n}\n\n\nint SplittedCharInputBuffer::peek () const {\n\treturn _size[_index] ? *_buf[_index] : -1;\n}\n\n\nint SplittedCharInputBuffer::peek (size_t n) const {\n\tif (n < _size[_index])\n\t\treturn _buf[_index][n];\n\tn -= _size[_index];\n\tif (_index == 0 && n < _size[1])\n\t\treturn _buf[1][n];\n\treturn -1;\n}\n\n\n/** Returns the buffer contents as string. */\nstring SplittedCharInputBuffer::toString () const {\n\tsize_t size = _size[1];\n\tif (_index == 0)\n\t\tsize += _size[0];\n\tstring ret;\n\tret.reserve(size);\n\tif (_index == 0 && _size[0] > 0)\n\t\tret = string(_buf[0], _size[0]);\n\tret += string(_buf[1], _size[1]);\n\treturn ret;\n}\n\n\n/** Looks for the first occurrence of a given character and returns its\n *  position relative to the current reading position. */\nint SplittedCharInputBuffer::find (char c) const {\n\tint pos=0;\n\tfor (int i=_index; i < 2; i++) {\n\t\tfor (size_t j=0; j < _size[i]; j++) {\n\t\t\tif (_buf[i][j] == c)\n\t\t\t\treturn pos;\n\t\t\tpos++;\n\t\t}\n\t}\n\treturn -1;\n}\n\n///////////////////////////////////////////////\n\n\nint TextStreamInputBuffer::get () {\n\tint c = StreamInputBuffer::get();\n\tif (c == '\\n') {\n\t\t_line++;\n\t\t_col = 1;\n\t}\n\telse\n\t\t_col++;\n\treturn c;\n}\n"
  },
  {
    "path": "src/InputBuffer.hpp",
    "content": "/*************************************************************************\n** InputBuffer.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef INPUTBUFFER_HPP\n#define INPUTBUFFER_HPP\n\n#include <cstdint>\n#include <cstring>\n#include <istream>\n#include <ostream>\n#include <string>\n#include <vector>\n\nstruct InputBuffer {\n\tvirtual ~InputBuffer () =default;\n\tvirtual int get () =0;\n\tvirtual int peek () const =0;\n\tvirtual int peek (size_t n) const =0;\n\tvirtual bool eof () const =0;\n\tvirtual void invalidate () =0;\n};\n\n\nclass StreamInputBuffer : public InputBuffer {\n\tpublic:\n\t\texplicit StreamInputBuffer (std::istream &is, size_t bufsize=1024);\n\t\tStreamInputBuffer (const StreamInputBuffer &ib) =delete;\n\t\tint get () override;\n\t\tint peek () const override;\n\t\tint peek (size_t n) const override;\n\t\tbool eof () const override {return _pos == _size1 && _size2 == 0;}\n\t\tvoid invalidate () override {_pos = _size1; _size2 = 0;}\n\t\tvoid operator = (const StreamInputBuffer &ib) =delete;\n\n\tprotected:\n\t\tsize_t fillBuffer (std::vector<uint8_t> &buf) const;\n\n\tprivate:\n\t\tstd::istream &_is;\n\t\tstd::vector<uint8_t> _buf1;  ///< first buffer\n\t\tstd::vector<uint8_t> _buf2;  ///< second buffer\n\t\tsize_t _size1;  ///< number of bytes in buffer 1\n\t\tsize_t _size2;  ///< number of bytes in buffer 2\n\t\tsize_t _pos=0;  ///< position of next character to be read from first buffer\n};\n\n\nclass StringInputBuffer : public InputBuffer {\n\tpublic:\n\t\texplicit StringInputBuffer (const std::string &str) : _str(&str) {}\n\t\tStringInputBuffer (const StreamInputBuffer &ib) =delete;\n\t\tvoid assign (const std::string &str) {_str = &str; _pos=0;}\n\t\tint get () override                  {return _pos < _str->length() ? _str->at(_pos++) : -1;}\n\t\tint peek () const override           {return _pos < _str->length() ? _str->at(_pos) : -1;}\n\t\tint peek (size_t n) const override   {return _pos+n < _str->length() ? _str->at(_pos+n) : -1;}\n\t\tbool eof () const override           {return _pos >= _str->length();}\n\t\tvoid invalidate () override          {_pos = _str->length();}\n\n\tprivate:\n\t\tconst std::string *_str;\n\t\tsize_t _pos=0;\n};\n\n\nclass CharInputBuffer : public InputBuffer {\n\tpublic:\n\t\tCharInputBuffer (const char *buf, size_t size) : _pos(buf), _size(buf ? size : 0) {}\n\t\tCharInputBuffer (const CharInputBuffer &ib) =delete;\n\n\t\tint get () override {\n\t\t\tif (_size == 0)\n\t\t\t\treturn -1;\n\t\t\telse {\n\t\t\t\t_size--;\n\t\t\t\treturn *_pos++;\n\t\t\t}\n\t\t}\n\n\n\t\tvoid assign (const char *buf, size_t size) {\n\t\t\t_pos = buf;\n\t\t\t_size = size;\n\t\t}\n\n\t\tvoid assign (const char *buf)      {assign(buf, std::strlen(buf));}\n\t\tint peek () const override         {return _size > 0 ? *_pos : -1;}\n\t\tint peek (size_t n) const override {return _size >= n ? _pos[n] : -1;}\n\t\tbool eof () const override         {return _size == 0;}\n\t\tvoid invalidate () override        {_size = 0;}\n\n\tprivate:\n\t\tconst char *_pos;\n\t\tsize_t _size;\n};\n\n\nclass SplittedCharInputBuffer : public InputBuffer {\n\tpublic:\n\t\tSplittedCharInputBuffer (const char *buf1, size_t s1, const char *buf2, size_t s2);\n\t\tSplittedCharInputBuffer (const SplittedCharInputBuffer &ib) =delete;\n\t\tint get () override;\n\t\tint peek () const override;\n\t\tint peek (size_t n) const override;\n\t\tbool eof () const override  {return _size[_index] == 0;}\n\t\tvoid invalidate () override {_size[_index] = 0;}\n\t\tstd::string toString () const;\n\t\tint find (char c) const;\n\n\tprivate:\n\t\tconst char *_buf[2];\n\t\tsize_t _size[2];\n\t\tint _index;\n};\n\n\nclass TextStreamInputBuffer : public StreamInputBuffer {\n\tpublic:\n\t\texplicit TextStreamInputBuffer (std::istream &is) : StreamInputBuffer(is) {}\n\t\tint get () override;\n\t\tint line () const {return _line;}\n\t\tint col () const {return _col;}\n\n\tprivate:\n\t\tint _line=1, _col=1;\n};\n\n#endif\n"
  },
  {
    "path": "src/InputReader.cpp",
    "content": "/*************************************************************************\n** InputReader.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include <cstring>\n#include <functional>\n#include \"InputReader.hpp\"\n\nusing namespace std;\n\n\nvoid StringMatcher::setPattern (const string &pattern) {\n\t_pattern = pattern;\n\t_charsRead = 0;\n\t_borders.resize(pattern.length()+1);\n\t// preprocessing to set up the border indexes\n\t_borders[0] = -1;\n\tint i=0, j=-1;\n\tconst int len = static_cast<int>(pattern.length());\n\twhile (i < len) {\n\t\twhile (j >= 0 && _pattern[i] != _pattern[j])\n\t\t\tj = _borders[j];\n\t\t_borders[++i] = ++j;\n\t}\n}\n\n\n/** Reads characters from an input stream until the pattern string or EOF is reached.\n *  The matching string is read too if found. An empty pattern matches any character, i.e.\n *  reading stops after the first character.\n *  @return true if the pattern was found */\nbool StringMatcher::match (InputReader &ir) {\n\tint c;\n\tint i=0;\n\tconst int len = static_cast<int>(_pattern.length());\n\t_charsRead = 0;\n\twhile ((c = ir.get()) >= 0) {\n\t\t_charsRead++;\n\t\twhile (i >= 0 && c != _pattern[i])\n\t\t\ti = _borders[i];\n\t\tif (++i == len)\n\t\t\treturn true;\n\t}\n\treturn false;\n}\n\n\n/** Reads characters from an input stream until the pattern string or EOF is reached\n *  and returns them as a string. The matching string is also appended to the returned string. */\nstring StringMatcher::read (InputReader &ir) {\n\tstring ret;\n\tint c;\n\tint i=0;\n\tconst int len = static_cast<int>(_pattern.length());\n\twhile ((c = ir.get()) >= 0) {\n\t\tret += char(c);\n\t\twhile (i >= 0 && c != _pattern[i])\n\t\t\ti = _borders[i];\n\t\tif (++i == len)\n\t\t\tbreak;\n\t}\n\t_charsRead = ret.length();\n\treturn ret;\n}\n\n///////////////////////////////////////////////////////////////////////////\n\n/** Skips n characters. */\nvoid InputReader::skip (size_t n) {\n\twhile (n-- > 0)\n\t\tget();\n}\n\n\n/** Moves the buffer pointer to the next non-space character. A following call\n *  of get() returns this character. */\nvoid InputReader::skipSpace () {\n\twhile (isspace(peek()))\n\t\tget();\n}\n\n\n/** Tries to find a given string and skips all characters preceding that string. If\n *  the string can't be found, all characters until EOF are skipped.\n *  @param[in] str string to look for (must not be longer than the maximal buffer size)\n *  @return true if str was found */\nbool InputReader::skipUntil (const char *str) {\n\tStringMatcher matcher(str);\n\treturn matcher.match(*this);\n}\n\n\n/** Tries to find a given string and returns all characters including that string. If\n *  the string can't be found, all characters until EOF are read.\n *  @param[in] str string to look for (must not be longer than the maximal buffer size)\n *  @return the read characters */\nstring InputReader::readUntil (const char *str) {\n\tStringMatcher matcher(str);\n\treturn matcher.read(*this);\n}\n\n\n/** Looks for the first occurrence of a given character.\n *  @param[in] c character to lookup\n *  @return position of character relative to current location, -1 if character was not found */\nint InputReader::find (char c) const {\n\tint pos = 0;\n\tint cc;\n\twhile ((cc = peek(pos)) >= 0 && cc != c)\n\t\tpos++;\n\treturn cc < 0 ? -1 : pos;\n}\n\n\n/** Checks if the next characters to be read match a given string.\n *  @param[in] s string to be matched\n *  @param[in] consume if true, the characters of the matched string are skipped\n *  @return true if s matches */\nbool InputReader::check (const char *s, bool consume) {\n\tsize_t count = 0;\n\tfor (const char *p=s; *p; p++) {\n\t\tif (peek(count++) != *p)\n\t\t\treturn false;\n\t}\n\tif (consume)\n\t\tskip(count);\n\treturn true;\n}\n\n\n/** Reads an integer from the buffer. All characters that are part of\n *  the read integer constant are skipped. If this function returns false,\n *  the buffer pointer points to the same position as before the function call.\n *  @param[out] val contains the read integer value on success\n *  @param[in] accept_sign if false, only positive integers (without sign) are accepted\n *  @return true if integer could be read */\nbool InputReader::parseInt (int &val, bool accept_sign) {\n\tval = 0;\n\tint fac=1;\n\tint sign;    // explicitly given sign\n\tif (accept_sign && ((sign = peek()) == '+' || sign == '-')) {\n\t\tif (isdigit(peek(1))) {\n\t\t\tget();  // skip sign\n\t\t\tif (sign == '-')\n\t\t\t\tfac = -1;\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n\telse if (!isdigit(peek()))\n\t\treturn false;\n\n\twhile (isdigit(peek()))\n\t\tval = val*10 + (get()-'0');\n\tval *= fac;\n\treturn true;\n}\n\n\nbool InputReader::parseUInt (unsigned &val) {\n\tval = 0;\n\tif (!isdigit(peek()))\n\t\treturn false;\n\twhile (isdigit(peek()))\n\t\tval = val*10 + (get()-'0');\n\treturn true;\n}\n\n\nbool InputReader::parseUInt (int base, unsigned &val) {\n\tif (base < 2 || base > 32)\n\t\treturn false;\n\n\tconst char *digits = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n\tconst char maxdigit = digits[base-1];\n\tint c;\n\tif (!isalnum(c = tolower(peek())) || c > maxdigit)\n\t\treturn false;\n\n\tval = 0;\n\twhile (isalnum(c = tolower(peek())) && c <= maxdigit) {\n\t\tget();\n\t\tunsigned digit = c - (c <= '9' ? '0' : 'a'-10);\n\t\tval = val*base + digit;\n\t}\n\treturn true;\n}\n\n\n/** Reads a double from the buffer. All characters that are part of\n *  the read double constant are skipped. If this function returns false,\n *  the buffer pointer points to the same position as before the function call.\n *  @param[out] val contains the read double value on success\n *  @return number details: 0=no number, 'i'=integer, 'f'=floating point number */\nchar InputReader::parseDouble (double &val) {\n\tint fac=1;\n\tint int_part=0;\n\tbool is_float = false;\n\tskipSpace();\n\tint sign = peek();\n\tif (parseInt(int_part)) { // match [+-]?[0-9]+\\.?\n\t\tif (peek() == '.') {\n\t\t\tget();\n\t\t\tis_float = true;\n\t\t}\n\t\tif (int_part < 0 || sign == '-') {\n\t\t\tfac = -1;\n\t\t\tint_part = -int_part;\n\t\t}\n\t}\n\telse {  // match [+-]?\\.\n\t\tif ((sign = peek()) == '+' || sign == '-') { // match [+-]?\\.[0-9]\n\t\t\tif (peek(1) != '.' || !isdigit(peek(2)))\n\t\t\t\treturn 0;\n\t\t\tif (sign == '-')\n\t\t\t\tfac = -1;\n\t\t\tskip(2);  // skip sign and dot\n\t\t}\n\t\telse if (peek() == '.' && isdigit(peek(1)))\n\t\t\tget();\n\t\telse\n\t\t\treturn 0;\n\t\tis_float = true;\n\t}\n\t// parse fractional part\n\tdouble frac_part=0.0;\n\tfor (double u=10; isdigit(peek()); u*=10)\n\t\tfrac_part += (get()-'0')/u;\n\tval = (int_part + frac_part) * fac;\n\t// parse exponent\n\tint c;\n\tif (tolower(peek()) == 'e' && (isdigit(c=peek(1)) || ((c == '+' || c == '-') && isdigit(peek(2))))) {\n\t\tget(); // skip 'e'\n\t\tint exp;\n\t\tparseInt(exp);\n\t\tval *= pow(10.0, exp);\n\t\tis_float = true;\n\t}\n\treturn is_float ? 'f' : 'i';\n}\n\n\n/** Reads an integer value from the buffer. If no valid integer constant\n *  could be found at the current position 0 is returned. */\nint InputReader::getInt () {\n\tskipSpace();\n\tint val;\n\treturn parseInt(val) ? val : 0;\n}\n\n\n/** Reads an double value from the buffer. If no valid double constant\n *  could be found at the current position 0 is returned. */\ndouble InputReader::getDouble () {\n\tskipSpace();\n\tdouble val;\n\treturn parseDouble(val) ? val : 0.0;\n}\n\n\n/** Reads a string that consists of alphabetic letters only. Reading stops as\n *  soon as a non-alphabetic character is found or EOF is reached. */\nstring InputReader::getWord () {\n\tstring ret;\n\tskipSpace();\n\twhile (isalpha(peek()))\n\t\tret += char(get());\n\treturn ret;\n}\n\n\n/** Reads a single punctuation character.\n *  @return the read character or 0 if there's no punctuation character at the current position */\nchar InputReader::getPunct () {\n\tskipSpace();\n\tif (ispunct(peek()))\n\t\treturn char(get());\n\treturn 0;\n}\n\n\n/** Reads a string optionally enclosed by a given quotation character.\n *  Before reading the string, all leading whitespace is skipped. Then, the function checks\n *  for one of the the given quotation characters. If it is found, all characters until the\n *  second appearance of the same quotation char are appended to the result. Otherwise, an\n *  empty string is returned. If the quotation character is 0, the behavior of this function\n *  is identical to a call of getString().\n *  @param[in] quotechars recognized quotation characters bounding the string to be read\n *  @return the string read */\nstring InputReader::getQuotedString (const char *quotechars) {\n\tif (!quotechars)\n\t\treturn getString();\n\n\tstring ret;\n\tskipSpace();\n\tif (const char *quotechar = strchr(quotechars, peek())) {\n\t\tget();\n\t\twhile (!eof() && peek() != *quotechar)\n\t\t\tret += char(get());\n\t\tget();\n\t}\n\treturn ret;\n}\n\n\n/** Reads a string delimited by whitespace and/or invisible characters.\n *  Before reading the string, all leading whitespace is skipped. Then, the function adds\n *  all printable characters to the result until a whitespace, an unprintable character, or\n *  EOF is found.\n *  @return the string read */\nstring InputReader::getString () {\n\tstring ret;\n\tskipSpace();\n\twhile (!eof() && !isspace(peek()) && isprint(peek()))\n\t\tret += char(get());\n\treturn ret;\n}\n\n\n/** Reads a given number of characters and returns the resulting string.\n *  @param n number of character to read\n *  @return the string read */\nstring InputReader::getString (size_t n) {\n\tstring ret;\n\tret.reserve(n);\n\twhile (n-- > 0)\n\t\tret += char(get());\n\treturn ret;\n}\n\n\n/** Reads a string delimited by EOF or a single character from a given set of characters.\n *  @param[in] delim characters delimiting the string\n *  @return the read string */\nstring InputReader::getString (const char *delim) {\n\tif (!delim || !delim[0])\n\t\treturn getString();\n\tstring ret;\n\tskipSpace();\n\twhile (!eof() && peek() > 0 && !strchr(delim, peek()))\n\t\tret += char(get());\n\treturn ret;\n}\n\n\nstring InputReader::getLine () {\n\tstring ret;\n\tskipSpace();\n\twhile (!eof() && peek() > 0 && peek() != '\\n')\n\t\tret += char(get());\n\t// trim trailing whitespace\n\treturn ret.erase(ret.find_last_not_of(\" \\t\\n\\r\\f\\v\")+1);\n}\n\n\n/** Parses a sequence of key-value pairs of the form KEY=VALUE or KEY=\"VALUE\".\n *  If parameter 'requireValues' is false, attributes may also consist of a key only.\n *  @param[in] requireValues true if all attributes require a value\n *  @param[in] quotechars recognized quote characters used to enclose the attribute values\n *  @return the scanned attributes  */\nmap<string,string> InputReader::parseAttributes (bool requireValues, const char *quotechars) {\n\tmap<string,string> attribs;\n\twhile (!eof()) {\n\t\tstring key;\n\t\tskipSpace();\n\t\tif (!isalpha(peek()))  // first character of attribute name must be a letter\n\t\t\tbreak;\n\t\tkey += char(get());\n\t\twhile (isalnum(peek()) || strchr(\"-:._\", peek()))\n\t\t\tkey += char(get());\n\t\tskipSpace();\n\t\tif (peek() == '=') {\n\t\t\tget();\n\t\t\tskipSpace();\n\t\t\tstring val = getQuotedString(quotechars);\n\t\t\tattribs.emplace(std::move(key), std::move(val));\n\t\t}\n\t\telse if (!requireValues)\n\t\t\tattribs.emplace(std::move(key), \"\");\n\t}\n\treturn attribs;\n}\n\n\n/** Parses a sequence of key-value pairs of the form KEY=VALUE or KEY=\"VALUE\".\n *  If parameter 'requireValues' is false, attributes may also consist of a key only.\n *  @param[out] attribs the scanned attributes\n *  @param[in] requireValues true if all attributes require a value\n *  @param[in] quotechars recognized quote characters used to enclose the attribute values\n *  @return number of attributes scanned */\nint InputReader::parseAttributes (map<string,string> &attribs, bool requireValues, const char *quotechars) {\n\tattribs = parseAttributes(requireValues, quotechars);\n\treturn int(attribs.size());\n}\n\n//////////////////////////////////////////\n\n\nint StreamInputReader::peek (size_t n) const {\n\tif (n == 0)\n\t\treturn peek();\n\tvector<char> chars(n);\n\t_is.read(&chars[0], n);\n\tint ret = peek();\n\tfor (int i=n-1; i >= 0; i--)\n\t\t_is.putback(chars[i]);\n\treturn ret;\n}\n\n\nstreamsize StreamInputReader::read (char *buf, streamsize size) {\n\t_is.read(buf, size);\n\treturn _is.gcount();\n}\n\n\nstreamsize BufferInputReader::read (char *buf, streamsize size) {\n\tchar *p = buf;\n\tint c = get();\n\twhile (c >= 0 && size-- > 0)\n\t\t*p++ = char(c);\n\treturn p-buf;\n}\n"
  },
  {
    "path": "src/InputReader.hpp",
    "content": "/*************************************************************************\n** InputReader.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef INPUTREADER_HPP\n#define INPUTREADER_HPP\n\n#include <istream>\n#include <map>\n#include <string>\n#include <vector>\n#include \"InputBuffer.hpp\"\n\nclass InputReader {\n\tpublic:\n\t\tvirtual ~InputReader() =default;\n\t\tvirtual int get () =0;\n\t\tvirtual std::streamsize read (char *buf, std::streamsize size) =0;\n\t\tvirtual int peek () const =0;\n\t\tvirtual int peek (size_t n) const =0;\n\t\tvirtual bool eof () const =0;\n\t\tvirtual bool check (char c) const {return peek() == c;}\n\t\tvirtual bool check (const char *s, bool consume=true);\n\t\tvirtual void skip (size_t n);\n\t\tvirtual bool skipUntil (const char *str);\n\t\tvirtual std::string readUntil (const char *str);\n\t\tvirtual int find (char c) const;\n\t\tvirtual void skipSpace ();\n\t\tvirtual int getInt ();\n\t\tvirtual bool parseInt (int &val, bool accept_sign=true);\n\t\tvirtual bool parseUInt (int base, unsigned &val);\n\t\tvirtual bool parseUInt (unsigned &val);\n\t\tvirtual char parseDouble (double &val);\n\t\tvirtual double getDouble ();\n\t\tvirtual std::string getWord ();\n\t\tvirtual char getPunct ();\n\t\tvirtual std::string getQuotedString (const char *quotechars);\n\t\tvirtual std::string getString ();\n\t\tvirtual std::string getString (size_t n);\n\t\tvirtual std::string getString (const char *delim);\n\t\tvirtual std::string getLine ();\n\t\tvirtual int parseAttributes (std::map<std::string,std::string> &attr, bool requireValues, const char *quotechars=nullptr);\n\t\tvirtual std::map<std::string,std::string> parseAttributes (bool requireValues, const char *quotechars=nullptr);\n\t\tvirtual operator bool () const {return !eof();}\n};\n\n\nclass StreamInputReader : public InputReader {\n\tpublic:\n\t\texplicit StreamInputReader (std::istream &is) : _is(is) {}\n\t\tint get () override        {return _is.get();}\n\t\tstd::streamsize read (char *buf, std::streamsize size) override;\n\t\tint peek () const override {return _is.peek();}\n\t\tint peek (size_t n) const override;\n\t\tbool eof () const override {return !_is || _is.eof();}\n\t\tstd::istream& getStream () {return _is;}\n\n\tprivate:\n\t\tstd::istream &_is;\n};\n\n\nclass BufferInputReader : public InputReader {\n\tpublic:\n\t\texplicit BufferInputReader (InputBuffer &ib) : _ib(&ib) {}\n\t\tvoid assign (InputBuffer &ib) {_ib = &ib;}\n\t\tint get () override                {return _ib->get();}\n\t\tstd::streamsize read (char *buf, std::streamsize size) override;\n\t\tint peek () const override         {return _ib->peek();}\n\t\tint peek (size_t n) const override {return _ib->peek(n);}\n\t\tbool eof () const override         {return _ib->eof();}\n\n\tprivate:\n\t\tInputBuffer *_ib;\n};\n\n\n/** Implementation of the Knuth-Morris-Pratt search algorithm.\n *  http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/kmpen.htm */\nclass StringMatcher {\n\tpublic:\n\t\tStringMatcher () : _charsRead(0) {}\n\t\texplicit StringMatcher (const std::string &pattern) : _charsRead(0) {setPattern(pattern);}\n\t\tvoid setPattern (const std::string &pattern);\n\t\tbool match (InputReader &ir);\n\t\tstd::string read (InputReader &ir);\n\t\tsize_t charsRead () const {return _charsRead;}\n\n\tprivate:\n\t\tstd::string _pattern;\n\t\tstd::vector<int> _borders;\n\t\tsize_t _charsRead;\n};\n\n#endif\n"
  },
  {
    "path": "src/JFM.cpp",
    "content": "/*************************************************************************\n** JFM.cpp                                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <fstream>\n#include <sstream>\n#include \"JFM.hpp\"\n#include \"StreamReader.hpp\"\n\nusing namespace std;\n\n\nvoid JFM::read (istream &is) {\n\tis.seekg(0);\n\tStreamReader reader(is);\n\tauto id = uint16_t(reader.readUnsigned(2)); // JFM ID (9 or 11)\n\tif (id != 9 && id != 11)\n\t\tthrow FontMetricException(\"invalid JFM identifier \" + std::to_string(id) + \" (9 or 11 expected)\");\n\n\t_vertical = (id == 9);\n\tauto nt = uint16_t(reader.readUnsigned(2));  // length of character type table\n\tauto lf = uint16_t(reader.readUnsigned(2));  // length of entire file in 4 byte words\n\tauto lh = uint16_t(reader.readUnsigned(2));  // length of header in 4 byte words\n\tauto bc = uint16_t(reader.readUnsigned(2));  // smallest character code in font\n\tauto ec = uint16_t(reader.readUnsigned(2));  // largest character code in font\n\tauto nw = uint16_t(reader.readUnsigned(2));  // number of words in width table\n\tauto nh = uint16_t(reader.readUnsigned(2));  // number of words in height table\n\tauto nd = uint16_t(reader.readUnsigned(2));  // number of words in depth table\n\tauto ni = uint16_t(reader.readUnsigned(2));  // number of words in italic corr. table\n\tauto nl = uint16_t(reader.readUnsigned(2));  // number of words in glue/kern table\n\tauto nk = uint16_t(reader.readUnsigned(2));  // number of words in kern table\n\tauto ng = uint16_t(reader.readUnsigned(2));  // number of words in glue table\n\tauto np = uint16_t(reader.readUnsigned(2));  // number of font parameter words\n\n\tif (7+nt+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ng+np != lf)\n\t\tthrow FontMetricException(\"inconsistent length values\");\n\n\tsetCharRange(bc, ec);\n\treadHeader(reader);\n\tis.seekg(28+lh*4);\n\treadTables(reader, nt, nw, nh, nd, ni);\n\tis.seekg(4*(lf-np));\n\treadParameters(reader, np);   // JFM files provide 9 parameters but we don't need all of them\n}\n\n\nvoid JFM::readTables (StreamReader &reader, int nt, int nw, int nh, int nd, int ni) {\n\t// determine smallest charcode with chartype > 0\n\tuint32_t minchar=0xFFFFFFFF, maxchar=0;\n\tfor (int i=0; i < nt; i++) {\n\t\t// support new JFM spec by texjporg\n\t\tuint32_t c = reader.readUnsigned(2);\n\t\tc += 0x10000 * reader.readUnsigned(1);\n\t\tauto t =  uint8_t(reader.readUnsigned(1));\n\t\tif (t > 0) {\n\t\t\tminchar = min(minchar, c);\n\t\t\tmaxchar = max(maxchar, c);\n\t\t}\n\t}\n\t// build charcode to chartype map\n\tif (minchar <= maxchar) {\n\t\t_minchar = minchar;\n\t\t_charTypeTable.resize(maxchar-minchar+1, 0);\n\t\treader.seek(-nt*4, ios::cur);\n\t\tfor (int i=0; i < nt; i++) {\n\t\t\t// support new JFM spec by texjporg\n\t\t\tuint32_t c = reader.readUnsigned(2);\n\t\t\tc += 0x10000 * reader.readUnsigned(1);\n\t\t\tauto t = uint8_t(reader.readUnsigned(1));\n\t\t\tif (c >= minchar)\n\t\t\t\t_charTypeTable[c-minchar] = t;\n\t\t}\n\t}\n\tTFM::readTables(reader, nw, nh, nd, ni);\n}\n\n\nsize_t JFM::charIndex (int c) const {\n\tuint8_t chartype = 0;\n\tif (!_charTypeTable.empty() && uint32_t(c) >= _minchar && uint32_t(c) < _minchar+_charTypeTable.size())\n\t\tchartype = _charTypeTable[c-_minchar];\n\treturn TFM::charIndex(chartype);\n}\n"
  },
  {
    "path": "src/JFM.hpp",
    "content": "/*************************************************************************\n** JFM.hpp                                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef JFM_HPP\n#define JFM_HPP\n\n#include <istream>\n#include \"TFM.hpp\"\n\n\nclass JFM : public TFM {\n\tpublic:\n\t\tJFM () =default;\n\t\tvoid read (std::istream &is) override;\n\t\tbool verticalLayout () const  override {return _vertical;}\n\t\tbool isJFM () const override {return true;}\n\t\tuint32_t minChar () const {return _minchar;}\n\t\tuint32_t maxChar () const {return static_cast<uint32_t>(_minchar+_charTypeTable.size()-1);}\n\n\tprotected:\n\t\tvoid readTables (StreamReader &reader, int nt, int nw, int nh, int nd, int ni);\n\t\tsize_t charIndex (int c) const override;\n\n\tprivate:\n\t\tuint32_t _minchar=0;   ///< character code of first entry in character type table\n\t\tbool _vertical=false;  ///< true if metrics refer to vertical text layout\n\t\tstd::vector<uint8_t> _charTypeTable;\n};\n\n#endif\n"
  },
  {
    "path": "src/Length.cpp",
    "content": "/*************************************************************************\n** Length.cpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <sstream>\n#include \"InputReader.hpp\"\n#include \"Length.hpp\"\n\nusing namespace std;\n\nvoid Length::set (const string &lenstr) {\n\tswitch (lenstr.length()) {\n\t\tcase 0:\n\t\t\t_pt = 0;\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tif (isdigit(lenstr[0]))\n\t\t\t\t_pt = lenstr[0] - '0';\n\t\t\telse\n\t\t\t\tthrow UnitException(string(\"invalid length: \")+lenstr);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tistringstream iss(lenstr);\n\t\t\tStreamInputReader ir(iss);\n\t\t\tdouble val;\n\t\t\tif (!ir.parseDouble(val))\n\t\t\t\tthrow UnitException(string(\"invalid length: \")+lenstr);\n\t\t\tstring unit = ir.getWord();\n\t\t\tset(val, std::move(unit));\n\t}\n}\n\n\nvoid Length::set (double val, Unit unit) {\n\tswitch (unit) {\n\t\tcase Unit::PT: _pt = val; break;\n\t\tcase Unit::BP: _pt = val/pt2bp; break;\n\t\tcase Unit::IN: _pt = val/pt2in; break;\n\t\tcase Unit::CM: _pt = val/pt2cm; break;\n\t\tcase Unit::MM: _pt = val/pt2mm; break;\n\t\tcase Unit::PC: _pt = val/pt2pc; break;\n\t\tcase Unit::DD: _pt = val/pt2dd; break;\n\t\tcase Unit::CC: _pt = val/pt2cc; break;\n\t\tcase Unit::SP: _pt = val/pt2sp; break;\n\t\tdefault:\n\t\t\t// this isn't supposed to happen\n\t\t\tthrow UnitException(\"invalid length unit: (\" + std::to_string(static_cast<int>(unit)) + \")\");\n\t}\n}\n\n\ndouble Length::get (Unit unit) const {\n\tswitch (unit) {\n\t\tcase Unit::PT: return pt();\n\t\tcase Unit::BP: return bp();\n\t\tcase Unit::IN: return in();\n\t\tcase Unit::CM: return cm();\n\t\tcase Unit::MM: return mm();\n\t\tcase Unit::PC: return pc();\n\t\tcase Unit::DD: return dd();\n\t\tcase Unit::CC: return cc();\n\t\tcase Unit::SP: return sp();\n\t}\n\t// this isn't supposed to happen\n\tthrow UnitException(\"invalid length unit: (\" + std::to_string(static_cast<int>(unit)) + \")\");\n}\n\n\nstring Length::toString (Unit unit) const {\n\tostringstream oss;\n\toss << get(unit) << unitToString(unit);\n\treturn oss.str();\n}\n\n\nstatic constexpr int unit_id (int c1, int c2) {\n\treturn (c1 << 8) | c2;\n}\n\nLength::Unit Length::stringToUnit (const std::string &unitstr) {\n\tif (unitstr.length() == 2) {\n\t\tswitch (unit_id(unitstr[0], unitstr[1])) {\n\t\t\tcase unit_id('p','t'): return Unit::PT;\n\t\t\tcase unit_id('b','p'): return Unit::BP;\n\t\t\tcase unit_id('i','n'): return Unit::IN;\n\t\t\tcase unit_id('c','m'): return Unit::CM;\n\t\t\tcase unit_id('m','m'): return Unit::MM;\n\t\t\tcase unit_id('p','c'): return Unit::PC;\n\t\t\tcase unit_id('d','d'): return Unit::DD;\n\t\t\tcase unit_id('c','c'): return Unit::CC;\n\t\t\tcase unit_id('s','p'): return Unit::SP;\n\t\t}\n\t}\n\tthrow UnitException(string(\"invalid length unit: \") + unitstr);\n}\n\n\nstring Length::unitToString (Unit unit) {\n\tswitch (unit) {\n\t\tcase Unit::PT: return \"pt\";\n\t\tcase Unit::BP: return \"bp\";\n\t\tcase Unit::IN: return \"in\";\n\t\tcase Unit::CM: return \"cm\";\n\t\tcase Unit::MM: return \"mm\";\n\t\tcase Unit::PC: return \"pc\";\n\t\tcase Unit::DD: return \"dd\";\n\t\tcase Unit::CC: return \"cc\";\n\t\tcase Unit::SP: return \"sp\";\n\t}\n\t// this isn't supposed to happen\n\treturn \"??\";\n}\n\n\nvoid Length::set (double val, string unitstr) {\n\tif (unitstr.empty())\n\t\tunitstr = \"pt\";\n\telse if (unitstr.length() != 2)\n\t\tthrow UnitException(string(\"invalid length unit: \") + unitstr);\n\tset(val, stringToUnit(unitstr));\n}\n\n\nmap<string,Length::Unit> Length::getUnits () {\n\tmap<string,Length::Unit> units = {\n\t\t{\"pt\", Unit::PT},\n\t\t{\"bp\", Unit::BP},\n\t\t{\"in\", Unit::IN},\n\t\t{\"cm\", Unit::CM},\n\t\t{\"mm\", Unit::MM},\n\t\t{\"pc\", Unit::PC},\n\t\t{\"dd\", Unit::DD},\n\t\t{\"cc\", Unit::CC},\n\t\t{\"sp\", Unit::SP},\n\t};\n\treturn units;\n}\n"
  },
  {
    "path": "src/Length.hpp",
    "content": "/*************************************************************************\n** Length.hpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef LENGTH_HPP\n#define LENGTH_HPP\n\n#include <map>\n#include <vector>\n#include \"MessageException.hpp\"\n\n#ifdef IN\n#undef IN\n#endif\n\nstruct UnitException : MessageException {\n\texplicit UnitException (const std::string &msg) : MessageException(msg) {}\n};\n\n\nclass Length {\n\tpublic:\n\t\tenum class Unit {PT, BP, CM, MM, IN, PC, DD, CC, SP};\n\n\tpublic:\n\t\tconstexpr Length () =default;\n\t\texplicit constexpr Length (long double pt) : _pt(static_cast<double>(pt)) {}\n\t\tLength (double val, Unit unit)                  {set(val, unit);}\n\t\tLength (double val, const std::string &unitstr) {set(val, unitstr);}\n\t\tLength (const std::string &lenstr) {set(lenstr);}\n\t\tvoid set (double val, Unit unit);\n\t\tvoid set (double val, std::string unit);\n\t\tvoid set (const std::string &lenstr);\n\t\tdouble pt () const {return _pt;}\n\t\tdouble in () const {return _pt*pt2in;}\n\t\tdouble bp () const {return _pt*pt2bp;}\n\t\tdouble cm () const {return _pt*pt2cm;}\n\t\tdouble mm () const {return _pt*pt2mm;}\n\t\tdouble pc () const {return _pt*pt2pc;}\n\t\tdouble dd () const {return _pt*pt2dd;}\n\t\tdouble cc () const {return _pt*pt2cc;}\n\t\tdouble sp () const {return _pt*pt2sp;}\n\t\tdouble get (Unit unit) const;\n\t\tstd::string toString (Unit unit) const;\n\t\tbool operator == (Length len) const {return _pt == len._pt;}\n\t\tbool operator != (Length len) const {return _pt != len._pt;}\n\n\t\tstatic Unit stringToUnit (const std::string &unitstr);\n\t\tstatic std::string unitToString (Unit unit);\n\t\tstatic std::map<std::string,Unit> getUnits ();\n\n\tpublic:\n\t\tstatic constexpr double pt2in = 1.0/72.27;\n\t\tstatic constexpr double pt2bp = pt2in*72;\n\t\tstatic constexpr double pt2cm = pt2in*2.54;\n\t\tstatic constexpr double pt2mm = pt2cm*10;\n\t\tstatic constexpr double pt2pc = 1.0/12;\n\t\tstatic constexpr double pt2dd = 1157.0/1238;\n\t\tstatic constexpr double pt2cc = pt2dd/12;\n\t\tstatic constexpr double pt2sp = 65536.0;\n\n\tprivate:\n\t\tdouble _pt=0;  // length in TeX point units (72.27pt = 1in)\n};\n\n\nconstexpr Length operator \"\"_pt (long double pt) {return Length(pt);}\nconstexpr Length operator \"\"_bp (long double bp) {return Length(bp/Length::pt2bp);}\nconstexpr Length operator \"\"_mm (long double mm) {return Length(mm/Length::pt2mm);}\nconstexpr Length operator \"\"_in (long double in) {return Length(in/Length::pt2in);}\nconstexpr Length operator \"\"_pt (unsigned long long pt) {return Length(static_cast<double>(pt));}\nconstexpr Length operator \"\"_bp (unsigned long long bp) {return Length(static_cast<double>(bp)/Length::pt2bp);}\nconstexpr Length operator \"\"_mm (unsigned long long mm) {return Length(static_cast<double>(mm)/Length::pt2mm);}\nconstexpr Length operator \"\"_in (unsigned long long in) {return Length(static_cast<double>(in)/Length::pt2in);}\n\n#endif\n"
  },
  {
    "path": "src/MD5HashFunction.hpp",
    "content": "/*************************************************************************\n** MD5HashFunction.hpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef MD5HASHFUNCTION_HPP\n#define MD5HASHFUNCTION_HPP\n\n#include <md5.h>\n#include \"HashFunction.hpp\"\n\nclass MD5HashFunction : public HashFunction {\n\tpublic:\n\t\tMD5HashFunction () {MD5_Init(&_context);}\n\t\tMD5HashFunction (const char *data, size_t length) : MD5HashFunction() {update(data, length);}\n\t\texplicit MD5HashFunction (const std::string &data) : MD5HashFunction() {update(data);}\n\t\texplicit MD5HashFunction (const std::vector<uint8_t> &data) : MD5HashFunction() {update(data);}\n\t\tint digestSize () const override {return 16;}\n\t\tvoid reset () override {MD5_Init(&_context);}\n\t\tvoid update (const char *data, size_t length) override {MD5_Update(&_context, data, length);}\n\t\tvoid update (const std::string &data) override {update(data.data(), data.length());}\n\t\tvoid update (const std::vector<uint8_t> &data) override {update(reinterpret_cast<const char*>(data.data()), data.size());}\n\n\t\tstd::vector<uint8_t> digestBytes () const override {\n\t\t\tstd::vector<uint8_t> hash(16);\n\t\t\tMD5_CTX savedContext = _context;\n\t\t\tMD5_Final(hash.data(), &_context);   // also erases the context structure\n\t\t\t_context = savedContext;\n\t\t\treturn hash;\n\t\t}\n\n\tprivate:\n\t\tmutable MD5_CTX _context;\n};\n\n#endif\n\n"
  },
  {
    "path": "src/Makefile.am",
    "content": "## This file is part of dvisvgm\n## Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>\n##\n## Process this file with automake.\n\nbin_PROGRAMS     = dvisvgm\nnoinst_LTLIBRARIES = libdvisvgm.la\nSUBDIRS = fonts optimizer ttf\n\ndvisvgm_SOURCES = \\\n\tCommandLine.hpp \\\n\tdvisvgm.cpp\n\ninclude ../libs/defs.am\n\ndvisvgm_LDADD = \\\n\t$(noinst_LTLIBRARIES) \\\n\t../libs/clipper/libclipper.a \\\n\t../libs/md5/libmd5.a \\\n\t$(POTRACE_LIBS) \\\n\t$(XXHASH_LIBS)\n\nif ENABLE_WOFF\nSUBDIRS += ttf\n\ndvisvgm_LDADD += \\\n\t$(WOFF2_LIBS) \\\n\t$(BROTLI_LIBS)\nendif ENABLE_WOFF\n\nif TEXLIVE_BUILD\ndvisvgm_LDADD += \\\n\t$(KPATHSEA_LIBS) \\\n\t$(FREETYPE2_LIBS) \\\n\t$(ZLIB_LIBS) \\\n\t$(LIBGS_LIBS)\nelse\ndvisvgm_LDADD += \\\n\t$(FREETYPE_LIBS) \\\n\t$(ZLIB_LIBS)\nendif !TEXLIVE_BUILD\n\ndvisvgm_DEPENDENCIES = $(noinst_LTLIBRARIES)\n\nif TEXLIVE_BUILD\ndvisvgm_DEPENDENCIES += $(KPATHSEA_DEPEND) $(ZLIB_DEPEND) $(FREETYPE2_DEPEND)\ndvisvgm_DEPENDENCIES += $(POTRACE_DEPEND)\nendif\n\nlibdvisvgm_la_SOURCES = \\\n\tAGLTable.hpp \\\n\talgorithm.hpp \\\n\tBasicDVIReader.hpp           BasicDVIReader.cpp \\\n\tBezier.hpp                   Bezier.cpp \\\n\tBgColorSpecialHandler.hpp    BgColorSpecialHandler.cpp \\\n\tBitmap.hpp                   Bitmap.cpp \\\n\tBoundingBox.hpp              BoundingBox.cpp \\\n\tCalculator.hpp               Calculator.cpp \\\n\tCharacter.hpp \\\n\tCharMapID.hpp                CharMapID.cpp \\\n\tCLCommandLine.hpp            CLCommandLine.cpp \\\n\tCMap.hpp                     CMap.cpp \\\n\tCMapManager.hpp              CMapManager.cpp \\\n\tCMapReader.hpp               CMapReader.cpp \\\n\tCLOption.hpp \\\n\tColor.hpp                    Color.cpp \\\n\tColorSpecialHandler.hpp      ColorSpecialHandler.cpp \\\n\tCommandLine.hpp \\\n\tDirectory.hpp                Directory.cpp \\\n\tDVIActions.hpp \\\n\tDLLoader.hpp                 DLLoader.cpp \\\n\tDVIReader.hpp                DVIReader.cpp \\\n\tDvisvgmSpecialHandler.hpp    DvisvgmSpecialHandler.cpp \\\n\tDVIToSVG.hpp                 DVIToSVG.cpp \\\n\tDVIToSVGActions.hpp          DVIToSVGActions.cpp \\\n\tEllipticalArc.hpp            EllipticalArc.cpp \\\n\tEmSpecialHandler.hpp         EmSpecialHandler.cpp \\\n\tEncFile.hpp                  EncFile.cpp \\\n\tEPSFile.hpp                  EPSFile.cpp \\\n\tEPSToSVG.hpp \\\n\tFileFinder.hpp               FileFinder.cpp \\\n\tFilePath.hpp                 FilePath.cpp \\\n\tFileSystem.hpp               FileSystem.cpp \\\n\tFixWord.hpp \\\n\tFont.hpp                     Font.cpp \\\n\tFontCache.hpp                FontCache.cpp \\\n\tFontEncoding.hpp             FontEncoding.cpp \\\n\tFontEngine.hpp               FontEngine.cpp \\\n\tFontManager.hpp              FontManager.cpp \\\n\tFontMap.hpp                  FontMap.cpp \\\n\tFontMetrics.hpp              FontMetrics.cpp \\\n\tFontStyle.hpp \\\n\tFontWriter.hpp               FontWriter.cpp \\\n\tGFGlyphTracer.hpp            GFGlyphTracer.cpp \\\n\tGFReader.hpp                 GFReader.cpp \\\n\tGFTracer.hpp                 GFTracer.cpp \\\n\tGhostscript.hpp              Ghostscript.cpp \\\n\tGlyph.hpp \\\n\tGlyphTracerMessages.hpp \\\n\tGraphicsPath.hpp \\\n\tGraphicsPathParser.hpp \\\n\tHashFunction.hpp             HashFunction.cpp \\\n\tHtmlSpecialHandler.hpp       HtmlSpecialHandler.cpp \\\n\tHyperlinkManager.hpp         HyperlinkManager.cpp \\\n\tImageToSVG.hpp               ImageToSVG.cpp \\\n\tInputBuffer.hpp              InputBuffer.cpp \\\n\tInputReader.hpp              InputReader.cpp \\\n\tJFM.hpp                      JFM.cpp \\\n\tLength.hpp                   Length.cpp \\\n\tmacros.hpp \\\n\tMapLine.hpp                  MapLine.cpp \\\n\tMatrix.hpp                   Matrix.cpp \\\n\tMD5HashFunction.hpp \\\n\tMessage.hpp                  Message.cpp \\\n\tMessageException.hpp \\\n\tMetafontWrapper.hpp          MetafontWrapper.cpp \\\n\tNoPsSpecialHandler.hpp       NoPsSpecialHandler.cpp \\\n\tNumericRanges.hpp \\\n\tOFM.hpp                      OFM.cpp \\\n\tOpacity.hpp                  Opacity.cpp \\\n\tPageRanges.hpp               PageRanges.cpp \\\n\tPageSize.hpp                 PageSize.cpp \\\n\tPair.hpp \\\n\tPapersizeSpecialHandler.hpp  PapersizeSpecialHandler.cpp \\\n\tPathClipper.hpp              PathClipper.cpp \\\n\tPDFHandler.hpp               PDFHandler.cpp \\\n\tPDFParser.hpp                PDFParser.cpp \\\n\tPdfSpecialHandler.hpp        PdfSpecialHandler.cpp \\\n\tPDFToSVG.hpp                 PDFToSVG.cpp \\\n\tPreScanDVIReader.hpp         PreScanDVIReader.cpp \\\n\tProcess.hpp                  Process.cpp \\\n\tpsdefs.cpp \\\n\tPSInterpreter.hpp            PSInterpreter.cpp \\\n\tPSPattern.hpp                PSPattern.cpp \\\n\tPSPreviewHandler.hpp         PSPreviewHandler.cpp \\\n\tPsSpecialHandler.hpp         PsSpecialHandler.cpp \\\n\tPsSpecialHandlerProxy.hpp    PsSpecialHandlerProxy.cpp \\\n\tRangeMap.hpp                 RangeMap.cpp \\\n\tShadingPatch.hpp             ShadingPatch.cpp \\\n\tSignalHandler.hpp            SignalHandler.cpp \\\n\tSourceInput.hpp              SourceInput.cpp \\\n\tSpecialActions.hpp           SpecialActions.cpp \\\n\tSpecialHandler.hpp \\\n\tSpecialManager.hpp           SpecialManager.cpp \\\n\tStreamReader.hpp             StreamReader.cpp \\\n\tStreamWriter.hpp             StreamWriter.cpp \\\n\tSubfont.hpp                  Subfont.cpp \\\n\tSVGCharHandler.hpp           SVGCharHandler.cpp \\\n\tSVGCharHandlerFactory.hpp    SVGCharHandlerFactory.cpp \\\n\tSVGCharPathHandler.hpp       SVGCharPathHandler.cpp \\\n\tSVGCharTspanTextHandler.hpp  SVGCharTspanTextHandler.cpp \\\n\tSVGElement.hpp               SVGElement.cpp \\\n\tSVGOutput.hpp                SVGOutput.cpp \\\n\tSVGSingleCharTextHandler.hpp SVGSingleCharTextHandler.cpp \\\n\tSVGTree.hpp                  SVGTree.cpp \\\n\tSystem.hpp                   System.cpp \\\n\tTensorProductPatch.hpp       TensorProductPatch.cpp \\\n\tTerminal.hpp                 Terminal.cpp \\\n\tTFM.hpp                      TFM.cpp \\\n\tToUnicodeMap.hpp             ToUnicodeMap.cpp \\\n\tTpicSpecialHandler.hpp       TpicSpecialHandler.cpp \\\n\tTriangularPatch.hpp          TriangularPatch.cpp \\\n\tUnicode.hpp                  Unicode.cpp \\\n\tutility.hpp                  utility.cpp \\\n\tVectorIterator.hpp \\\n\tVFActions.hpp \\\n\tVFReader.hpp                 VFReader.cpp \\\n\twindows.hpp \\\n\tXMLDocument.hpp              XMLDocument.cpp \\\n\tXMLNode.hpp                  XMLNode.cpp \\\n\tXMLParser.hpp                XMLParser.cpp \\\n\tXMLString.hpp                XMLString.cpp \\\n\tXXHashFunction.hpp \\\n\tZLibOutputStream.hpp\n\nlibdvisvgm_la_LIBADD = fonts/libbase14fonts.la optimizer/liboptimizer.la\n\nif ENABLE_WOFF\nlibdvisvgm_la_LIBADD += ttf/libttf.la\nendif\n\nEXTRA_DIST = options.xml options.dtd iapi.h ierrors.h MiKTeXCom.hpp MiKTeXCom.cpp\n\nAM_CFLAGS = $(WARNING_CFLAGS) \\\n\t$(ZLIB_CFLAGS) \\\n\t$(CODE_COVERAGE_CFLAGS)\n\nAM_CXXFLAGS = $(WARNING_CXXFLAGS) \\\n\t-I$(dvisvgm_srcdir)/libs/boost \\\n\t-I$(dvisvgm_srcdir)/libs/clipper \\\n\t-I$(dvisvgm_srcdir)/libs/variant/include\n\nAM_CXXFLAGS += \\\n\t$(POTRACE_CFLAGS) \\\n\t$(XXHASH_CFLAGS)\n\nif TEXLIVE_BUILD\nAM_CXXFLAGS += \\\n\t$(KPATHSEA_INCLUDES) \\\n\t$(POTRACE_INCLUDES) \\\n\t$(FREETYPE2_INCLUDES) \\\n\t$(ZLIB_INCLUDES) \\\n\t$(CODE_COVERAGE_CFLAGS)\nif WIN32\nAM_CXXFLAGS += -DTEXLIVEWIN32\nendif WIN32\nelse\nAM_CXXFLAGS += \\\n\t$(KPSE_CFLAGS) \\\n\t$(FREETYPE_CFLAGS) \\\n\t$(ZLIB_CFLAGS) \\\n\t$(CODE_COVERAGE_CFLAGS)\nendif !TEXLIVE_BUILD\n\nAM_LDFLAGS = \\\n\t$(KPSE_LIBS) \\\n\t$(CODE_COVERAGE_LDFLAGS)\n\nif ENABLE_WOFF\nAM_CXXFLAGS += $(TTFAUTOHINT_CFLAGS)\n\nAM_CXXFLAGS +=  \\\n\t$(BROTLI_CFLAGS) \\\n\t$(WOFF2_CFLAGS)\n\n# TL: do not try to rebuild these source files.\nif !TEXLIVE_BUILD\nAM_LDFLAGS += $(TTFAUTOHINT_LIBS)\nendif !TEXLIVE_BUILD\nendif ENABLE_WOFF\n\nAM_CXXFLAGS += -I$(dvisvgm_srcdir)/libs/md5\n\nif !TEXLIVE_BUILD\n# the command-line parser class is generated from options.xml by opt2cpp\n$(srcdir)/CommandLine.hpp: options.xml\n\trm -f $@\n\tpython $(srcdir)/opt2cpp.py $< >$@\n\n# Create a C string definition containing the PostScript routines psdefs.ps needed by class PSInterpreter\n$(srcdir)/psdefs.cpp: psdefs.ps\n\tif test -f $<; then \\\n\t\tps2c PSInterpreter::PSDEFS $< >$@; \\\n\tfi\n\npsdefs.ps: ;\nendif !TEXLIVE_BUILD\n\nCLEANFILES = *.gcda *.gcno\n\nif TEXLIVE_BUILD\n# Rebuild libkpathsea:\n@KPATHSEA_RULE@\n# Rebuild libfreetype:\n@FREETYPE2_RULE@\n# Rebuild libz:\n@ZLIB_RULE@\n# Rebuild potrace:\n@POTRACE_RULE@\nendif TEXLIVE_BUILD\n"
  },
  {
    "path": "src/MapLine.cpp",
    "content": "/*************************************************************************\n** MapLine.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstring>\n#include <sstream>\n#include \"InputBuffer.hpp\"\n#include \"InputReader.hpp\"\n#include \"MapLine.hpp\"\n#include \"Subfont.hpp\"\n\nusing namespace std;\n\n\n/** Constructs a MapLine object by parsing a single map line from the given stream. */\nMapLine::MapLine (istream &is) : MapLine() {\n\tchar buf[256];\n\tis.getline(buf, 256);\n\tparse(buf);\n}\n\n\nMapLine::MapLine (string str) : MapLine() {\n\tauto pos = str.rfind('\\n');\n\tif (pos != string::npos)\n\t\tstr.resize(pos);\n\tparse(str.c_str());\n}\n\n\n// Some of the following functions have been derived from the dvipdfmx source file fontmap.c:\n// http://cvs.ktug.or.kr/viewcvs/dvipdfmx/src/fontmap.c?revision=1.43&view=markup\n\n\n/** Returns true if the given string is in dvips mapline format, and false if it's in dvipdfm format.\n\t @param[in] line string to check */\nbool MapLine::isDVIPSFormat (const char *line) const {\n\tif (strchr(line, '\"') || strchr(line, '<'))  // these chars are only present in dvips maps\n\t\treturn true;\n\tchar prevchar = ' ';\n\tint entry_count=0;\n\tfor (const char *p=line; *p; ++p) {\n\t\tif (isspace(prevchar)) {\n\t\t\tif (*p == '-') // options starting with '-' are only present in dvipdfm map files\n\t\t\t\treturn false;\n\t\t\tif (!isspace(*p))\n\t\t\t\tentry_count++;\n\t\t}\n\t\tprevchar = *p;\n\t}\n\t// tfm_name and ps_name only => dvips map\n\treturn entry_count == 2;\n}\n\n\n/** Separates main font name and subfont definition name from a given combined name.\n *  Example: \"basename@sfdname@10\" => {\"basename10\", \"sfdname\"}\n *  @param[in,out] fontname complete fontname; after separation: main fontname only\n *  @param[out] sfdname name of subfont definition\n *  @return true on success */\nstatic bool split_fontname (string &fontname, string &sfdname) {\n\tstring::size_type pos1;    // index of first '@'\n\tif ((pos1 = fontname.find('@')) != string::npos && pos1 > 0) {\n\t\tstring::size_type pos2; // index of second '@'\n\t\tif ((pos2 = fontname.find('@', pos1+1)) != string::npos && pos2 > pos1+1) {\n\t\t\tsfdname = fontname.substr(pos1+1, pos2-pos1-1);\n\t\t\tfontname = fontname.substr(0, pos1) + fontname.substr(pos2+1);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n\n/** Parses a single mapline and stores the scanned data in member variables.\n *  The line may either be given in dvips or dvipdfmx mapfile format.\n *  @param[in] line the mapline */\nvoid MapLine::parse (const char *line) {\n\tif (line) {\n\t\tCharInputBuffer ib(line, strlen(line));\n\t\tBufferInputReader ir(ib);\n\t\t_texname = ir.getString();\n\t\tstring sfdname;\n\t\tsplit_fontname(_texname, sfdname);\n\t\tif (!sfdname.empty())\n\t\t\t_sfd = SubfontDefinition::lookup(sfdname);\n\t\tif (isDVIPSFormat(line))\n\t\t\tparseDVIPSLine(ir);\n\t\telse\n\t\t\tparseDVIPDFMLine(ir);\n\t}\n}\n\n\n/** Parses a single line in dvips mapfile format.\n *  @param[in] ir the input stream must be assigned to this reader */\nvoid MapLine::parseDVIPSLine (InputReader &ir) {\n\tir.skipSpace();\n\tif (ir.peek() != '<' && ir.peek() != '\"')\n\t\t_psname = ir.getString();\n\tir.skipSpace();\n\twhile (ir.peek() == '<' || ir.peek() == '\"') {\n\t\tif (ir.peek() == '<') {\n\t\t\tir.get();\n\t\t\tif (ir.peek() == '[' || ir.peek() == '<')\n\t\t\t\tir.get();  // skip second char of \"<[\" and \"<<\"\n\t\t\tstring name = ir.getString();\n\t\t\tif (name.length() > 4 && name.substr(name.length()-4) == \".enc\")\n\t\t\t\t_encname = name.substr(0, name.length()-4);\n\t\t\telse\n\t\t\t\t_fontfname = std::move(name);\n\t\t}\n\t\telse {  // ir.peek() == '\"' => list of PS font operators\n\t\t\tstring options = ir.getQuotedString(\"\\\"\");\n\t\t\tStringInputBuffer sib(options);\n\t\t\tBufferInputReader sir(sib);\n\t\t\twhile (!sir.eof()) {\n\t\t\t\tdouble number;\n\t\t\t\tif (sir.parseDouble(number)) {\n\t\t\t\t\t// operator with preceding numeric parameter (value opstr)\n\t\t\t\t\tstring opstr = sir.getString();\n\t\t\t\t\tif (opstr == \"SlantFont\")\n\t\t\t\t\t\t_slant = number;\n\t\t\t\t\telse if (opstr == \"ExtendFont\")\n\t\t\t\t\t\t_extend = number;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// operator without parameter => skip for now\n\t\t\t\t\tsir.getString();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tir.skipSpace();\n\t}\n}\n\n\nstatic void throw_number_expected (char opt, bool integer_only=false) {\n\tostringstream oss;\n\toss << \"option -\" << opt << \": \" << (integer_only ? \"integer\" : \"floating point\") << \" value expected\";\n\tthrow MapLineException(oss.str());\n}\n\n\n/** Parses a single line in dvipdfmx mapfile format.\n *  @param[in] ir the input stream must be assigned to this reader */\nvoid MapLine::parseDVIPDFMLine (InputReader &ir) {\n\tir.skipSpace();\n\tif (ir.peek() != '-') {\n\t\t_encname = ir.getString();\n\t\tif (_encname == \"default\" || _encname == \"none\")\n\t\t\t_encname.clear();\n\t}\n\tir.skipSpace();\n\t\tif (ir.peek() != '-')\n\t\t_fontfname = ir.getString();\n\tif (!_fontfname.empty()) {\n\t\tparseFilenameOptions(_fontfname);\n\t}\n\tir.skipSpace();\n\twhile (ir.peek() == '-') {\n\t\tir.get();\n\t\tint option = ir.get();\n\t\tif (!isprint(option))\n\t\t\tthrow MapLineException(\"option character expected\");\n\t\tir.skipSpace();\n\t\tswitch (option) {\n\t\t\tcase 's': // slant\n\t\t\t\tif (!ir.parseDouble(_slant))\n\t\t\t\t\tthrow_number_expected('s');\n\t\t\t\tbreak;\n\t\t\tcase 'e': // extend\n\t\t\t\tif (!ir.parseDouble(_extend))\n\t\t\t\t\tthrow_number_expected('e');\n\t\t\t\tbreak;\n\t\t\tcase 'b': // bold\n\t\t\t\tif (!ir.parseDouble(_bold))\n\t\t\t\t\tthrow_number_expected('b');\n\t\t\t\tbreak;\n\t\t\tcase 'r': //remap (deprecated)\n\t\t\t\tbreak;\n\t\t\tcase 'i': // ttc index\n\t\t\t\tif (!ir.parseInt(_fontindex, false))\n\t\t\t\t\tthrow_number_expected('i', true);\n\t\t\t\tbreak;\n\t\t\tcase 'p': // UCS plane\n\t\t\t\tint dummy;\n\t\t\t\tif (!ir.parseInt(dummy, false))\n\t\t\t\t\tthrow_number_expected('p', true);\n\t\t\t\tbreak;\n\t\t\tcase 'u': // to unicode\n\t\t\t\tir.getString();\n\t\t\t\tbreak;\n\t\t\tcase 'v': // stemV\n\t\t\t\tint stemv;\n\t\t\t\tif (!ir.parseInt(stemv, true))\n\t\t\t\t\tthrow_number_expected('v', true);\n\t\t\t\tbreak;\n\t\t\tcase 'm': // map single chars\n\t\t\t\tir.skipUntil(\"-\");\n\t\t\t\tbreak;\n\t\t\tcase 'w': // writing mode (horizontal=0, vertical=1)\n\t\t\t\tint vertical;\n\t\t\t\tif (!ir.parseInt(vertical, false))\n\t\t\t\t\tthrow_number_expected('w', true);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow MapLineException(\"invalid option: -\" + string(1, option));\n\t\t}\n\t\tir.skipSpace();\n\t}\n}\n\n\n/** [:INDEX:][!]FONTNAME[/CSI][,VARIANT] */\nvoid MapLine::parseFilenameOptions (string fname) {\n\t_fontfname = fname;\n\tStringInputBuffer ib(fname);\n\tBufferInputReader ir(ib);\n\tif (ir.peek() == ':' && isdigit(ir.peek(1))) {  // index given?\n\t\tir.get();\n\t\t_fontindex = ir.getInt();  // font index of file with multiple fonts\n\t\tif (ir.peek() == ':')\n\t\t\tir.get();\n\t\telse\n\t\t\t_fontindex = 0;\n\t}\n\tif (ir.peek() == '!')  // no embedding\n\t\tir.get();\n\n\tbool csi_given=false, style_given=false;\n\tint pos;\n\tif ((pos = ir.find('/')) >= 0) {  // csi delimiter\n\t\tcsi_given = true;\n\t\t_fontfname = ir.getString(pos);\n\t}\n\telse if ((pos = ir.find(',')) >= 0) {\n\t\tstyle_given = true;\n\t\t_fontfname = ir.getString(pos);\n\t}\n\telse\n\t\t_fontfname = ir.getString();\n\n\tif (csi_given) {\n\t\tif ((pos = ir.find(',')) >= 0) {\n\t\t\tstyle_given = true;\n\t\t\tir.getString(pos);  // charcoll\n\t\t}\n\t\telse if (ir.eof())\n\t\t\tthrow MapLineException(\"CSI specifier expected\");\n\t\telse\n\t\t\tir.getString();  // charcoll\n\t}\n\tif (style_given) {\n\t\tir.get();  // skip ','\n\t\tif (ir.check(\"BoldItalic\")) {\n\t\t}\n\t\telse if (ir.check(\"Bold\")) {\n\t\t}\n\t\telse if (ir.check(\"Italic\")) {\n\t\t}\n\t\tif (!ir.eof())\n\t\t\tthrow MapLineException(\"invalid style given\");\n\t}\n}\n"
  },
  {
    "path": "src/MapLine.hpp",
    "content": "/*************************************************************************\n** MapLine.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef MAPLINE_HPP\n#define MAPLINE_HPP\n\n#include <istream>\n#include <sstream>\n#include <string>\n#include \"MessageException.hpp\"\n\n\nclass InputReader;\nclass SubfontDefinition;\n\n\nstruct MapLineException : MessageException {\n\texplicit MapLineException (const std::string &msg) : MessageException(msg) {}\n};\n\n\nclass MapLine {\n\tpublic:\n\t\texplicit MapLine (std::istream &is);\n\t\texplicit MapLine (std::string str);\n\t\tconst std::string& texname () const   {return _texname;}\n\t\tconst std::string& psname () const    {return _psname;}\n\t\tconst std::string& fontfname () const {return _fontfname;}\n\t\tconst std::string& encname () const   {return _encname;}\n\t\tint fontindex () const                {return _fontindex;}\n\t\tdouble bold () const                  {return _bold;}\n\t\tdouble slant () const                 {return _slant;}\n\t\tdouble extend () const                {return _extend;}\n\t\tSubfontDefinition* sfd () const       {return _sfd;}\n\n\tprotected:\n\t\tMapLine () =default;\n\t\tbool isDVIPSFormat (const char *line) const;\n\t\tvoid parse (const char *line);\n\t\tvoid parseDVIPSLine (InputReader &ir);\n\t\tvoid parseDVIPDFMLine (InputReader &ir);\n\t\tvoid parseFilenameOptions (std::string opt);\n\n\tprivate:\n\t\tstd::string _texname;             ///< TeX font name\n\t\tstd::string _psname;              ///< PS font name\n\t\tstd::string _fontfname;           ///< name of fontfile\n\t\tstd::string _encname;             ///< name of encoding (without file suffix \".enc\")\n\t\tSubfontDefinition *_sfd=nullptr;  ///< subfont definition to be used\n\t\tint _fontindex=0;                 ///< font index of file with multiple fonts (e.g. ttc files)\n\t\tdouble _slant=0, _bold=0, _extend=1;\n};\n\n\n#endif\n"
  },
  {
    "path": "src/Matrix.cpp",
    "content": "/*************************************************************************\n** Matrix.cpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <limits>\n#include <sstream>\n#include \"Calculator.hpp\"\n#include \"Matrix.hpp\"\n#include \"utility.hpp\"\n#include \"XMLString.hpp\"\n\nusing namespace std;\nusing math::deg2rad;\n\n\n/** Computes the determinant of a given matrix */\ndouble det (const Matrix &m) {\n\tdouble sum=0;\n\tfor (int i=0; i < 3; ++i) {\n\t\tsum += m._values[0][i] * m._values[1][(i+1)%3] * m._values[2][(i+2)%3]\n\t\t\t  - m._values[0][2-i] * m._values[1][(4-i)%3] * m._values[2][(3-i)%3];\n\t}\n\treturn sum;\n}\n\n\n/** Computes the determinant of the 2x2 submatrix of m where a given\n *  row and column were removed.\n *  @param[in] m base matrix\n *  @param[in] row row to remove\n *  @param[in] col column to remove */\ndouble det (const Matrix &m, int row, int col) {\n\tint c1 = (col+1)%3, c2 = (col+2)%3;\n\tint r1 = (row+1)%3, r2 = (row+2)%3;\n\tif (c1 > c2)\n\t\tswap(c1, c2);\n\tif (r1 > r2)\n\t\tswap(r1, r2);\n\treturn m._values[r1][c1] * m._values[r2][c2]\n\t\t  - m._values[r1][c2] * m._values[r2][c1];\n}\n\n\n/** Creates a diagonal matrix ((d,0,0),(0,d,0),(0,0,d)).\n *  @param[in] d value of diagonal elements */\nMatrix::Matrix (double d) {\n\tset(d);\n}\n\n\n/** Creates the matrix ((v0,v1,v2),(v3,v4,v5),(v6,v7,v8)).\n *  Expects that array v consists of 'size' elements. If size is less than 9, the\n *  remaining matrix components will be set to those of the identity matrix.\n *  @param[in] v array containing the matrix components\n *  @param[in] size size of array v */\nMatrix::Matrix (const double *v, unsigned size) {\n\tset(v, size);\n}\n\n\n/** Creates the matrix ((v0,v1,v2),(v3,v4,v5),(v6,v7,v8)).\n *  If vector v has less than 9 elements, the remaining matrix components will be set to\n *  those of the identity matrix.\n *  @param[in] v array containing the matrix components\n *  @param[in] start use vector components start,...,start+8 */\nMatrix::Matrix (const std::vector<double> &v, int start) {\n\tset(v, start);\n}\n\n\nMatrix::Matrix (const string &svgMatrix) {\n\tistringstream iss(svgMatrix);\n\tfor (int col=0; col < 3; col++) {\n\t\tfor (int row=0; row < 2; row++)\n\t\t\tiss >> _values[row][col];\n\t\t_values[2][col] = 0;\n\t}\n\t_values[2][2] = 1;\n}\n\n\nMatrix::Matrix (const string &cmds, const Calculator &calc) {\n\t*this = parse(cmds, calc);\n}\n\n\nMatrix::Matrix (initializer_list<double> initlist) {\n\tint count=0;\n\tfor (auto it=initlist.begin(); it != initlist.end() && count < 9; ++it) {\n\t\t_values[count/3][count%3] = *it;\n\t\tcount++;\n\t}\n\tfor (; count < 9; count++)\n\t\t_values[count/3][count%3] = (count%4 ? 0 : 1);\n}\n\n\nMatrix& Matrix::set (double d) {\n\tfor (int i=0; i < 3; i++)\n\t\tfor (int j=0; j < 3; j++)\n\t\t\t_values[i][j] = (i==j ? d : 0);\n\treturn *this;\n}\n\n\nMatrix& Matrix::set (const double *v, unsigned size) {\n\tsize = min(size, 9u);\n\tfor (unsigned i=0; i < size; i++)\n\t\t_values[i/3][i%3] = v[i];\n\tfor (unsigned i=size; i < 9; i++)\n\t\t_values[i/3][i%3] = (i%4 ? 0 : 1);\n\treturn *this;\n}\n\n\n/** Set matrix values ((v0,v1,v2),(v3,v4,v5),(v6,v7,v8)).\n *  If vector v has less than 9 elements, the remaining matrix components will be set to\n *  those of the identity matrix.\n *  @param[in] v array containing the matrix components\n *  @param[in] start use vector components start,...,start+8 */\nMatrix& Matrix::set (const vector<double> &v, int start) {\n\tunsigned size = min((unsigned)v.size()-start, 9u);\n\tfor (unsigned i=0; i < size; i++)\n\t\t_values[i/3][i%3] = v[i+start];\n\tfor (unsigned i=size; i < 9; i++)\n\t\t_values[i/3][i%3] = (i%4 ? 0 : 1);\n\treturn *this;\n}\n\n\nMatrix& Matrix::set (const string &cmds, const Calculator &calc) {\n\t*this = parse(cmds, calc);\n\treturn *this;\n}\n\n\nMatrix& Matrix::translate (double tx, double ty) {\n\tif (tx != 0 || ty != 0) {\n\t\tTranslationMatrix t(tx, ty);\n\t\tlmultiply(t);\n\t}\n\treturn *this;\n}\n\n\nMatrix& Matrix::scale (double sx, double sy) {\n\tif (sx != 1 || sy != 1) {\n\t\tScalingMatrix s(sx, sy);\n\t\tlmultiply(s);\n\t}\n\treturn *this;\n}\n\n\n/** Multiplies this matrix by ((cos d, -sin d, 0), (sin d, cos d, 0), (0,0,1)) that\n *  describes an anti-clockwise rotation by d degrees.\n *  @param[in] deg rotation angle in degrees */\nMatrix& Matrix::rotate (double deg) {\n\tRotationMatrix r(deg);\n\tlmultiply(r);\n\treturn *this;\n}\n\n\nMatrix& Matrix::xskewByAngle (double deg) {\n\tif (fmod(abs(deg)-90, 180) != 0)\n\t\treturn xskewByRatio(tan(deg2rad(deg)));\n\treturn *this;\n}\n\n\nMatrix& Matrix::xskewByRatio (double xyratio) {\n\tif (xyratio != 0) {\n\t\tdouble v[] = {1, xyratio};\n\t\tMatrix t(v, 2);\n\t\tlmultiply(t);\n\t}\n\treturn *this;\n}\n\n\nMatrix& Matrix::yskewByAngle (double deg) {\n\tif (fmod(abs(deg)-90, 180) != 0)\n\t\treturn yskewByRatio(tan(deg2rad(deg)));\n\treturn *this;\n}\n\n\nMatrix& Matrix::yskewByRatio (double xyratio) {\n\tif (xyratio != 0) {\n\t\tdouble v[] = {1, 0, 0, xyratio};\n\t\tMatrix t(v, 4);\n\t\tlmultiply(t);\n\t}\n\treturn *this;\n}\n\n\nMatrix& Matrix::flip (bool haxis, double a) {\n\tdouble s = 1;\n\tif (haxis) // mirror at horizontal axis?\n\t\ts = -1;\n\tdouble v[] = {-s, 0, (haxis ? 0 : 2*a), 0, s, (haxis ? 2*a : 0), 0, 0, 1};\n\tMatrix t(v);\n\tlmultiply(t);\n\treturn *this;\n}\n\n\n/** Swaps rows and columns of the matrix. */\nMatrix& Matrix::transpose () {\n\tfor (int i=0; i < 3; i++)\n\t\tfor (int j=i+1; j < 3; j++)\n\t\t\tswap(_values[i][j], _values[j][i]);\n\treturn *this;\n}\n\n\n/** Multiplies this matrix M with matrix tm (tm is the factor on the right side): M := M * tm */\nMatrix& Matrix::rmultiply (const Matrix &tm) {\n\tMatrix ret;\n\tfor (int i=0; i < 3; i++)\n\t\tfor (int j=0; j < 3; j++)\n\t\t\tfor (int k=0; k < 3; k++)\n\t\t\t\tret._values[i][j] += _values[i][k] * tm._values[k][j];\n\treturn *this = ret;\n}\n\n\n/** Multiplies this matrix M with matrix tm (tm is the factor on the left side): M := tm * M */\nMatrix& Matrix::lmultiply (const Matrix &tm) {\n\tMatrix ret;\n\tfor (int i=0; i < 3; i++)\n\t\tfor (int j=0; j < 3; j++)\n\t\t\tfor (int k=0; k < 3; k++)\n\t\t\t\tret._values[i][j] += tm._values[i][k] * _values[k][j];\n\treturn *this = ret;\n}\n\n\nMatrix& Matrix::invert () {\n\tMatrix ret;\n\tdouble denom = det(*this);\n\tif (abs(denom) < 1e-12)\n\t\tthrow exception();\n\tfor (int i=0; i < 3; ++i) {\n\t\tfor (int j=0; j < 3; ++j) {\n\t\t\tret._values[j][i] = det(*this, i, j)/denom;\n\t\t\tif ((i+j)%2 != 0)\n\t\t\t\tret._values[j][i] *= -1;\n\t\t}\n\t}\n\treturn *this = ret;\n}\n\n\nMatrix& Matrix::operator *= (double c) {\n\tfor (auto &row : _values)\n\t\tfor (auto &val : row)\n\t\t\tval *= c;\n\treturn *this;\n}\n\n\nMatrix& Matrix::operator /= (double c) {\n\tfor (auto &row : _values)\n\t\tfor (auto &val : row)\n\t\t\tval /= c;\n\treturn *this;\n}\n\n\nDPair Matrix::operator * (const DPair &p) const {\n\tdouble pp[] = {p.x(), p.y(), 1};\n\tdouble ret[]= {0, 0};\n\tfor (int i=0; i < 2; i++)\n\t\tfor (int j=0; j < 3; j++)\n\t\t\tret[i] += _values[i][j] * pp[j];\n\treturn DPair(ret[0], ret[1]);\n}\n\n\n/** Returns true if this matrix equals. Checks equality by comparing the matrix components. */\nbool Matrix::operator == (const Matrix &m) const {\n\tfor (int i=0; i < 2; i++)\n\t\tfor (int j=0; j < 3; j++)\n\t\t\tif (std::abs(_values[i][j]-m._values[i][j]) >= numeric_limits<double>::epsilon())\n\t\t\t\treturn false;\n\treturn true;\n}\n\n\n/** Returns true if this matrix doesn't equal m. Checks inequality by comparing the matrix components. */\nbool Matrix::operator != (const Matrix &m) const {\n\tfor (int i=0; i < 2; i++)\n\t\tfor (int j=0; j < 3; j++)\n\t\t\tif (std::abs(_values[i][j]-m._values[i][j]) >= numeric_limits<double>::epsilon())\n\t\t\t\treturn true;\n\treturn false;\n}\n\n\n/** Returns true if this matrix is the identity matrix ((1,0,0),(0,1,0),(0,0,1)). */\nbool Matrix::isIdentity() const {\n\tfor (int i=0; i < 2; i++)\n\t\tfor (int j=0; j < 3; j++) {\n\t\t\tconst double &v = _values[i][j];\n\t\t\tif ((i == j && v != 1) || (i != j && v != 0))\n\t\t\t\treturn false;\n\t\t}\n\treturn true;\n}\n\n\n/** Checks whether this matrix describes a plain translation (without any other transformations).\n *  If so, the parameters tx and ty are filled with the translation components.\n *  @param[out] tx horizontal translation\n *  @param[out] ty vertical translation\n *  @return true if matrix describes a pure translation */\nbool Matrix::isTranslation (double &tx, double &ty) const {\n\ttx = _values[0][2];\n\tty = _values[1][2];\n\tfor (int i=0; i < 3; i++)\n\t\tfor (int j=0; j < 2; j++) {\n\t\t\tconst double &v = _values[i][j];\n\t\t\tif ((i == j && v != 1) || (i != j && v != 0))\n\t\t\t\treturn false;\n\t\t}\n\treturn _values[2][2] == 1;\n}\n\n\n/** Gets a parameter for the transformation command.\n *  @param[in] is parameter chars are read from this stream\n *  @param[in] calc parameters can be arithmetic expressions, so we need a calculator to evaluate them\n *  @param[in] def default value if parameter is optional\n *  @param[in] optional true if parameter is optional\n *  @param[in] leadingComma true if first non-blank must be a comma\n *  @return value of argument */\nstatic double getArgument (istream &is, const Calculator &calc, double def, bool optional, bool leadingComma) {\n\tis >> ws;\n\tif (!optional && leadingComma && is.peek() != ',')\n\t\tthrow ParserException(\"',' expected\");\n\tif (is.peek() == ',') {\n\t\tis.get();         // skip comma\n\t\toptional = false; // now we expect a parameter\n\t}\n\tstring expr;\n\twhile (!isupper(is.peek()) && is.peek() != ',' && is)\n\t\texpr += (char)is.get();\n\tif (expr.empty()) {\n\t\tif (optional)\n\t\t\treturn def;\n\t\telse\n\t\t\tthrow ParserException(\"parameter expected\");\n\t}\n\treturn calc.eval(expr);\n}\n\n\nMatrix Matrix::parse (istream &is, const Calculator &calc) {\n\tMatrix ret(1);\n\twhile (is) {\n\t\tis >> ws;\n\t\tint cmd = is.get();\n\t\tswitch (cmd) {\n\t\t\tcase 'T': {\n\t\t\t\tdouble tx = getArgument(is, calc, 0, false, false);\n\t\t\t\tdouble ty = getArgument(is, calc, 0, true, true);\n\t\t\t\tret.translate(tx, ty);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'S': {\n\t\t\t\tdouble sx = getArgument(is, calc, 1, false, false);\n\t\t\t\tdouble sy = getArgument(is, calc, sx, true, true );\n\t\t\t\tret.scale(sx, sy);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'R': {\n\t\t\t\tdouble a = getArgument(is, calc, 0, false, false);\n\t\t\t\tdouble x = getArgument(is, calc, calc.getVariable(\"ux\")+calc.getVariable(\"w\")/2, true, true);\n\t\t\t\tdouble y = getArgument(is, calc, calc.getVariable(\"uy\")+calc.getVariable(\"h\")/2, true, true);\n\t\t\t\tret.translate(-x, -y);\n\t\t\t\tret.rotate(a);\n\t\t\t\tret.translate(x, y);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'F': {\n\t\t\t\tint c = is.get();\n\t\t\t\tif (c != 'H' && c != 'V')\n\t\t\t\t\tthrow ParserException(\"'H' or 'V' expected\");\n\t\t\t\tdouble a = getArgument(is, calc, 0, false, false);\n\t\t\t\tret.flip(c == 'H', a);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'K': {\n\t\t\t\tint c = is.get();\n\t\t\t\tif (c != 'X' && c != 'Y')\n\t\t\t\t\tthrow ParserException(\"transformation command 'K' must be followed by 'X' or 'Y'\");\n\t\t\t\tdouble a = getArgument(is, calc, 0, false, false);\n\t\t\t\tif (std::abs(cos(deg2rad(a))) < numeric_limits<double>::epsilon())\n\t\t\t\t\tthrow ParserException(\"illegal skewing angle: \" + util::to_string(a) + \" degrees\");\n\t\t\t\tif (c == 'X')\n\t\t\t\t\tret.xskewByAngle(a);\n\t\t\t\telse\n\t\t\t\t\tret.yskewByAngle(a);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'M': {\n\t\t\t\tdouble v[9];\n\t\t\t\tfor (int i=0; i < 6; i++)\n\t\t\t\t\tv[i] = getArgument(is, calc, i%4 ? 0 : 1, i!=0, i!=0);\n\t\t\t\t// third row (0, 0, 1)\n\t\t\t\tv[6] = v[7] = 0;\n\t\t\t\tv[8] = 1;\n\t\t\t\tMatrix tm(v);\n\t\t\t\tret.lmultiply(tm);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tthrow ParserException(\"transformation command expected (found '\" + string(1, cmd) + \"' instead)\");\n\t\t}\n\t}\n\treturn ret;\n}\n\n\nMatrix Matrix::parse (const string &cmds, const Calculator &calc) {\n\tistringstream iss;\n\tiss.str(cmds);\n\treturn parse(iss, calc);\n}\n\n\n/** Returns an SVG matrix expression that can be used in transform attributes.\n *  ((a,b,c),(d,e,f),(0,0,1)) => matrix(a d b e c f) */\nstring Matrix::toSVG () const {\n\tostringstream oss;\n\toss << \"matrix(\";\n\tfor (int i=0; i < 3; i++) {\n\t\tfor (int j=0; j < 2; j++)\n\t\t\toss << XMLString(_values[j][i]) << ' ';\n\t}\n\toss.seekp(-1, ios::cur) << ')';  // overwrite trailing space character\n\treturn oss.str();\n}\n\n\nostream& Matrix::write (ostream &os) const {\n\tos << '(';\n\tfor (int i=0; i < 3; i++) {\n\t\tos << '(' << _values[i][0];\n\t\tfor (int j=1; j < 3; j++)\n\t\t\tos << ',' << _values[i][j];\n\t\tos << ')';\n\t\tif (i < 2)\n\t\t\tos << ',';\n\t}\n\tos << ')';\n\treturn os;\n}\n\n\nstatic const char* ord_suffix (int n) {\n\tstatic const char *suffixes[] = {\"th\", \"st\", \"nd\", \"rd\"};\n\tif (abs(n) < 4)\n\t\treturn suffixes[n];\n\treturn suffixes[0];\n}\n\n\nstatic void skip_comma_wsp (istream &is) {\n\tis >> ws;\n\tif (is.peek() == ',') is.get();\n\tis >> ws;\n}\n\n\nstatic size_t parse_transform_cmd (istream &is, const string &cmd, size_t minparams, size_t maxparams, vector<double> &params) {\n\tfor (int i=0; i < int(cmd.length()); i++) {\n\t\tif (is.get() != cmd[i]) {\n\t\t\tis.seekg(-i-1, ios::cur);\n\t\t\treturn 0;\n\t\t}\n\t}\n\tparams.clear();\n\tis >> ws;\n\tif (is.get() != '(')\n\t\tthrow ParserException(\"missing '(' after command '\"+cmd+\"'\");\n\tfor (size_t i=1; i <= maxparams; i++) {\n\t\tis >> ws;\n\t\tdouble val;\n\t\tif (is.fail())\n\t\t\tthrow ParserException(to_string(i)+ord_suffix(i)+\" parameter of '\"+cmd+\"' must be a number\");\n\t\tis >> val;\n\t\tparams.push_back(val);\n\t\tis >> ws;\n\t\tif (i == minparams && is.peek() == ')') {\n\t\t\tis.get();\n\t\t\treturn i;\n\t\t}\n\t\tif (i == maxparams) {\n\t\t\tif (is.peek() != ')')\n\t\t\t\tthrow ParserException(\"missing ')' at end of command '\"+cmd+\"'\");\n\t\t\tis.get();\n\t\t}\n\t\tskip_comma_wsp(is);\n\t}\n\treturn maxparams;\n}\n\n\nstatic bool ne (double x, double y) {return abs(x-y) >= 1e-6;}\nstatic bool ne_angle (double x, double y) {return abs(x-y) >= 1e-3;}\n\n\nMatrix Matrix::parseSVGTransform (const string &transform) {\n\tistringstream iss(transform);\n\tMatrix matrix(1);\n\tiss >> ws;\n\twhile (iss) {\n\t\tvector<double> params;\n\t\tif (parse_transform_cmd(iss, \"matrix\", 6, 6, params)) {\n\t\t\tif (ne(params[0], 1) || ne(params[1], 0) || ne(params[2], 0) || ne(params[3], 1) || ne(params[4], 0) || ne(params[5], 0))\n\t\t\t\tmatrix.rmultiply(Matrix{params[0], params[2], params[4], params[1], params[3], params[5]});\n\t\t}\n\t\telse if (parse_transform_cmd(iss, \"rotate\", 1, 3, params)) {\n\t\t\tif (params.size() == 1) {\n\t\t\t\tparams.push_back(0);\n\t\t\t\tparams.push_back(0);\n\t\t\t}\n\t\t\tif (ne_angle(fmod(params[0], 360), 0)) {\n\t\t\t\tbool translate = ne(params[1], 0) || ne(params[2], 0);\n\t\t\t\tif (translate)\n\t\t\t\t\tmatrix.rmultiply(TranslationMatrix(params[1], params[2]));\n\t\t\t\tmatrix.rmultiply(RotationMatrix(params[0]));\n\t\t\t\tif (translate)\n\t\t\t\t\tmatrix.rmultiply(TranslationMatrix(-params[1], -params[2]));\n\t\t\t}\n\t\t}\n\t\telse if (parse_transform_cmd(iss, \"scale\", 1, 2, params)) {\n\t\t\tif (params.size() == 1)\n\t\t\t\tparams.push_back(params[0]);\n\t\t\tif (ne(params[0], 1) || ne(params[1], 1))\n\t\t\t\tmatrix.rmultiply(ScalingMatrix(params[0], params[1]));\n\t\t}\n\t\telse if (parse_transform_cmd(iss, \"skewX\", 1, 1, params)) {\n\t\t\tif (ne_angle(fmod(abs(params[0])-90, 180), 0))\n\t\t\t\tmatrix.rmultiply(XSkewingMatrix(params[0]));\n\t\t}\n\t\telse if (parse_transform_cmd(iss, \"skewY\", 1, 1, params)) {\n\t\t\tif (ne_angle(fmod(abs(params[0])-90, 180), 0))\n\t\t\t\tmatrix.rmultiply(YSkewingMatrix(params[0]));\n\t\t}\n\t\telse if (parse_transform_cmd(iss, \"translate\", 1, 2, params)) {\n\t\t\tif (params.size() == 1)\n\t\t\t\tparams.push_back(0);\n\t\t\tif (ne(params[0], 0) || ne(params[1], 0))\n\t\t\t\tmatrix.rmultiply(TranslationMatrix(params[0], params[1]));\n\t\t}\n\t\telse {  // invalid command\n\t\t\tstring cmd;\n\t\t\twhile (isalpha(iss.peek()))\n\t\t\t\tcmd += char(iss.get());\n\t\t\tif (cmd.empty())\n\t\t\t\tthrow ParserException(\"unexpected character in transform attribute: \"+to_string(char(iss.get())));\n\t\t\tthrow ParserException(\"invalid command in transform attribute: \"+cmd);\n\t\t}\n\t\tskip_comma_wsp(iss);\n\t}\n\treturn matrix;\n}\n\n//////////////////////////////////////////////////////////////////\n\nTranslationMatrix::TranslationMatrix (double tx, double ty) {\n\tdouble v[] = {1, 0, tx, 0, 1, ty};\n\tset(v, 6);\n}\n\n\nScalingMatrix::ScalingMatrix (double sx, double sy) {\n\tdouble v[] = {sx, 0, 0, 0, sy};\n\tset(v, 5);\n}\n\n\nRotationMatrix::RotationMatrix (double deg) {\n\tdouble rad = deg2rad(deg);\n\tdouble c = cos(rad);\n\tdouble s = sin(rad);\n\tdouble v[] = {c, -s, 0, s, c};\n\tset(v, 5);\n}\n\n\nXSkewingMatrix::XSkewingMatrix (double deg) {\n\tdouble xyratio = tan(deg2rad(deg));\n\tlmultiply(Matrix({1, xyratio}));\n}\n\n\nYSkewingMatrix::YSkewingMatrix (double deg) {\n\tdouble xyratio = tan(deg2rad(deg));\n\tlmultiply(Matrix({1, 0, 0, xyratio}));\n}\n"
  },
  {
    "path": "src/Matrix.hpp",
    "content": "/*************************************************************************\n** Matrix.hpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef MATRIX_HPP\n#define MATRIX_HPP\n\n#include <initializer_list>\n#include <istream>\n#include <string>\n#include <vector>\n#include \"MessageException.hpp\"\n#include \"Pair.hpp\"\n\n\nstruct ParserException : MessageException {\n\texplicit ParserException (const std::string &msg) : MessageException(msg) {}\n};\n\nclass Calculator;\n\nclass Matrix {\n\tfriend double det (const Matrix &m);\n\tfriend double det (const Matrix &m, int row, int col);\n\n\tpublic:\n\t\tMatrix () {set(0);}\n\t\tMatrix (double d);\n\t\tMatrix (const std::string &cmds, const Calculator &calc);\n\t\texplicit Matrix (const std::string &svgMatrix);\n\t\texplicit Matrix (const double *v, unsigned size=9);\n\t\texplicit Matrix (const std::vector<double> &v, int start=0);\n\t\tMatrix (std::initializer_list<double> initlist);\n\t\tMatrix& set (double d);\n\t\tMatrix& set (const double *v, unsigned size);\n\t\tMatrix& set (const std::vector<double> &v, int start=0);\n\t\tMatrix& set (const std::string &cmds, const Calculator &calc);\n\t\tdouble get (int row, int col) const {return _values[row][col];}\n\t\tMatrix& transpose ();\n\t\tMatrix& invert ();\n\t\tMatrix& rmultiply (const Matrix &tm);\n\t\tMatrix& lmultiply (const Matrix &tm);\n\t\tMatrix& translate (double tx, double ty);\n\t\tMatrix& translate (const DPair &p)   {return translate(p.x(), p.y());}\n\t\tMatrix& scale (double sx, double sy);\n\t\tMatrix& scale (const DPair &p)       {return scale(p.x(), p.y());}\n\t\tMatrix& rotate (double deg);\n\t\tMatrix& xskewByAngle (double deg);\n\t\tMatrix& yskewByAngle (double deg);\n\t\tMatrix& xskewByRatio (double xyratio);\n\t\tMatrix& yskewByRatio (double xyratio);\n\t\tMatrix& flip (bool h, double a);\n\t\tMatrix& operator *= (double c);\n\t\tMatrix& operator /= (double c);\n\t\tDPair operator * (const DPair &p) const;\n\t\tbool operator == (const Matrix &m) const;\n\t\tbool operator != (const Matrix &m) const;\n\t\tbool isIdentity() const;\n\t\tbool isTranslation (double &tx, double &ty) const;\n\t\tstd::string toSVG () const;\n\t\tstd::ostream& write (std::ostream &os) const;\n\n\t\tstatic Matrix parse (std::istream &is, const Calculator &c);\n\t\tstatic Matrix parse (const std::string &cmds, const Calculator &c);\n\t\tstatic Matrix parseSVGTransform (const std::string &transform);\n\n\tprivate:\n\t\tdouble _values[3][3];  // row x col\n};\n\n\nstruct TranslationMatrix : Matrix {\n\tTranslationMatrix (double tx, double ty);\n};\n\n\nstruct ScalingMatrix : Matrix {\n\tScalingMatrix (double sx, double sy);\n};\n\n\nstruct RotationMatrix : Matrix {\n\texplicit RotationMatrix (double deg);\n};\n\n\nstruct XSkewingMatrix : Matrix {\n\texplicit XSkewingMatrix (double deg);\n};\n\n\nstruct YSkewingMatrix : Matrix {\n\texplicit YSkewingMatrix (double deg);\n};\n\n\ninline std::ostream& operator << (std::ostream &os, const Matrix &m) {\n\treturn m.write(os);\n}\n\n\ndouble det (const Matrix &m);\ndouble det (const Matrix &m, int row, int col);\n\n\n#endif\n"
  },
  {
    "path": "src/Message.cpp",
    "content": "/*************************************************************************\n** Message.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstdarg>\n#include <cstdlib>\n#include <cstring>\n#include <iostream>\n#include <unordered_map>\n#include \"Message.hpp\"\n#include \"Terminal.hpp\"\n\nusing namespace std;\n\nMessageStream::MessageStream (std::ostream &os) noexcept\n\t: _os(&os), _nl(true)\n{\n\tTerminal::init(os);\n}\n\n\nMessageStream::~MessageStream () {\n\tif (_os && Message::COLORIZE)\n\t\tTerminal::finish(*_os);\n}\n\n\nvoid MessageStream::putChar (char c, ostream &os) {\n\tswitch (c) {\n\t\tcase '\\r':\n\t\t\tos << '\\r';\n\t\t\t_nl = true;\n\t\t\t_col = 1;\n\t\t\treturn;\n\t\tcase '\\n':\n\t\t\tif (!_nl) {\n\t\t\t\t_col = 1;\n\t\t\t\t_nl = true;\n\t\t\t\tos << '\\n';\n\t\t\t}\n\t\t\treturn;\n\t\tdefault:\n\t\t\tif (_nl) {\n\t\t\t\tos << string(_indent, ' ');\n\t\t\t\t_col += _indent;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst int cols = Terminal::columns();\n\t\t\t\tif (cols > 0 && _col >= cols) {\n#ifndef _WIN32\n\t\t\t\t\t// move cursor to next line explicitly (not necessary in Windows/DOS terminal)\n\t\t\t\t\tos << '\\n';\n#endif\n\t\t\t\t\tos << string(_indent, ' ');\n\t\t\t\t\t_col = _indent+1;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\t_col++;\n\t\t\t}\n\t\t\t_nl = false;\n\t\t\tif (c != '\\n')\n\t\t\t\tos << c;\n\t}\n}\n\n\nMessageStream& MessageStream::operator << (const char *str) {\n\tif (_os && str) {\n\t\tconst char *first = str;\n\t\twhile (*first) {\n\t\t\tconst char *last = strchr(first, '\\n');\n\t\t\tif (!last)\n\t\t\t\tlast = first+strlen(first)-1;\n#ifndef _WIN32\n\t\t\t// move cursor to next line explicitly (not necessary in Windows/DOS terminal)\n\t\t\tconst int cols = Terminal::columns();\n\t\t\tint len = last-first+1;\n\t\t\tif (cols > 0 && _col+len > cols && _indent+len <= cols)\n\t\t\t\tputChar('\\n', *_os);\n#endif\n\t\t\twhile (first <= last)\n\t\t\t\tputChar(*first++, *_os);\n\t\t\tfirst = last+1;\n\t\t}\n\t}\n\treturn *this;\n}\n\n\nMessageStream& MessageStream::operator << (const char &c) {\n\tif (_os)\n\t\tputChar(c, *_os);\n\treturn *this;\n}\n\n\nvoid MessageStream::indent (bool reset) {\n\tif (reset)\n\t\t_indent = 0;\n\t_indent += 2;\n}\n\n\nvoid MessageStream::outdent (bool all) {\n\tif (all)\n\t\t_indent = 0;\n\telse if (_indent > 0)\n\t\t_indent -= 2;\n}\n\n\nvoid MessageStream::clearline () {\n\tif (_os) {\n\t\tint cols = Terminal::columns();\n\t\t*_os << '\\r' << string(cols ? cols-1 : 79, ' ') << '\\r';\n\t\t_nl = true;\n\t\t_col = 1;\n\t}\n}\n\nstatic MessageStream nullStream;\nstatic MessageStream messageStream(cerr);\n\n\n//////////////////////////////\n\n// maximal verbosity\nint Message::LEVEL = Message::MESSAGES | Message::WARNINGS | Message::ERRORS;\nbool Message::COLORIZE = false;\nbool Message::_initialized = false;\nMessage::Color Message::_classColors[9];\n\n\n/** Returns the stream for usual messages. */\nMessageStream& Message::mstream (bool prefix, MessageClass mclass) {\n\tinit();\n\tMessageStream *ms = (LEVEL & MESSAGES) ? &messageStream : &nullStream;\n\tif (COLORIZE && ms && ms->os()) {\n\t\tTerminal::fgcolor(_classColors[mclass].foreground, *ms->os());\n\t\tTerminal::bgcolor(_classColors[mclass].background, *ms->os());\n\t}\n\tif (prefix)\n\t\t*ms << \"\\nMESSAGE: \";\n\treturn *ms;\n}\n\n\n/** Returns the stream for warning messages. */\nMessageStream& Message::wstream (bool prefix) {\n\tinit();\n\tMessageStream *ms = (LEVEL & WARNINGS) ? &messageStream : &nullStream;\n\tif (COLORIZE && ms && ms->os()) {\n\t\tTerminal::fgcolor(_classColors[MC_WARNING].foreground, *ms->os());\n\t\tTerminal::bgcolor(_classColors[MC_WARNING].background, *ms->os());\n\t}\n\tif (prefix)\n\t\t*ms << \"\\nWARNING: \";\n\treturn *ms;\n}\n\n\n/** Returns the stream for error messages. */\nMessageStream& Message::estream (bool prefix) {\n\tinit();\n\tMessageStream *ms = (LEVEL & ERRORS) ? &messageStream : &nullStream;\n\tif (COLORIZE && ms && ms->os()) {\n\t\tTerminal::fgcolor(_classColors[MC_ERROR].foreground, *ms->os());\n\t\tTerminal::bgcolor(_classColors[MC_ERROR].background, *ms->os());\n\t}\n\tif (prefix)\n\t\t*ms << \"\\nERROR: \";\n\treturn *ms;\n}\n\n\n/** Returns the output stream for user messages\n *  @param[in] always ignore verbosity settings if true */\nMessageStream& Message::ustream (bool always) {\n\tinit();\n\tMessageStream *ms = (always || (LEVEL & USERMESSAGES)) ? &messageStream : &nullStream;\n\treturn *ms;\n}\n\n\nstatic bool colorchar2int (char colorchar, int *val) {\n\tcolorchar = tolower(colorchar);\n\tif (colorchar >= '0' && colorchar <= '9')\n\t\t*val = int(colorchar-'0');\n\telse if (colorchar >= 'a' && colorchar <= 'f')\n\t\t*val = int(colorchar-'a'+10);\n\telse if (colorchar == '*')\n\t\t*val = -1;\n\telse\n\t\treturn false;\n\treturn true;\n}\n\n\n/** Initializes the Message class. Sets the colors for each message set.\n *  The colors can be changed via environment variable DVISVGM_COLORS. Its\n *  value must be a sequence of color entries of the form gg:BF where the\n *  two-letter ID gg specifies a message set, B the hex digit of the\n *  background, and F the hex digit of the foreground/text color.\n *  Color codes:\n *  - 1: red, 2: green, 4: blue\n *  - 0-7: dark colors\n *  - 8-F: light colors\n *  - *: default color\n *  Example: pn:01 sets page number messages to red on black background */\nvoid Message::init () {\n\tif (_initialized || !Message::COLORIZE)\n\t\treturn;\n\n\t// set default message colors\n\t_classColors[MC_ERROR]        = Color(Terminal::RED, true);\n\t_classColors[MC_WARNING]      = Color(Terminal::YELLOW);\n\t_classColors[MC_PAGE_NUMBER]  = Color(Terminal::BLUE, true);\n\t_classColors[MC_PAGE_SIZE]    = Color(Terminal::MAGENTA);\n\t_classColors[MC_PAGE_WRITTEN] = Color(Terminal::GREEN);\n\t_classColors[MC_STATE]        = Color(Terminal::CYAN);\n\t_classColors[MC_TRACING]      = Color(Terminal::BLUE);\n\t_classColors[MC_PROGRESS]     = Color(Terminal::MAGENTA);\n\n\tif (const char *color_str = getenv(\"DVISVGM_COLORS\")) {\n\t\tunordered_map<string, MessageClass> classes = {\n\t\t\t{\"er\", MC_ERROR},\n\t\t\t{\"wn\", MC_WARNING},\n\t\t\t{\"pn\", MC_PAGE_NUMBER},\n\t\t\t{\"ps\", MC_PAGE_SIZE},\n\t\t\t{\"fw\", MC_PAGE_WRITTEN},\n\t\t\t{\"sm\", MC_STATE},\n\t\t\t{\"tr\", MC_TRACING},\n\t\t\t{\"pi\", MC_PROGRESS},\n\t\t};\n\t\tconst char *p=color_str;\n\n\t\t// skip leading whitespace\n\t\twhile (isspace(*p))\n\t\t\t++p;\n\n\t\t// iterate over color assignments\n\t\twhile (strlen(p) >= 5) {\n\t\t\tauto it = classes.find(string(p, 2));\n\t\t\tif (it != classes.end() && p[2] == '=') {\n\t\t\t\tint bgcolor, fgcolor;\n\t\t\t\tif (colorchar2int(p[3], &bgcolor) && colorchar2int(p[4], &fgcolor)) {\n\t\t\t\t\t_classColors[it->second].background = bgcolor;\n\t\t\t\t\t_classColors[it->second].foreground = fgcolor;\n\t\t\t\t}\n\t\t\t}\n\t\t\tp += 5;\n\n\t\t\t// skip trailing characters in a malformed entry\n\t\t\twhile (*p && !isspace(*p) && *p != ':' && *p != ';')\n\t\t\t\t++p;\n\t\t\t// skip separation characters\n\t\t\twhile (isspace(*p) || *p == ':' || *p == ';')\n\t\t\t\t++p;\n\t\t}\n\t}\n\t_initialized = true;\n}\n\n"
  },
  {
    "path": "src/Message.hpp",
    "content": "/*************************************************************************\n** Message.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef MESSAGE_HPP\n#define MESSAGE_HPP\n\n#include <cstdint>\n#include <string>\n#include <ostream>\n#include <sstream>\n#include \"Terminal.hpp\"\n\n\nclass Message;\n\nclass MessageStream {\n\tfriend class Message;\n\n\tpublic:\n\t\tMessageStream () =default;\n\t\texplicit MessageStream (std::ostream &os) noexcept;\n\t\t~MessageStream ();\n\n\t\ttemplate <typename T>\n\t\tMessageStream& operator << (const T &obj) {\n\t\t\tstd::ostringstream oss;\n\t\t\toss << obj;\n\t\t\t(*this) << oss.str();\n\t\t\treturn *this;\n\t\t}\n\n\t\tMessageStream& operator << (const char *str);\n\t\tMessageStream& operator << (const char &c);\n\t\tMessageStream& operator << (const std::string &str) {return (*this) << str.c_str();}\n\n\t\tvoid indent (int level)        {_indent = std::max(0, level*2);}\n\t\tvoid indent (bool reset=false);\n\t\tvoid outdent (bool all=false);\n\t\tvoid clearline ();\n\n\tprotected:\n\t\tvoid putChar (char c, std::ostream &os);\n\t\tstd::ostream* os () {return _os;}\n\n\tprivate:\n\t\tstd::ostream *_os=nullptr;\n\t\tbool _nl=false;     ///< true if previous character was a newline\n\t\tint _col=1;         ///< current terminal column\n\t\tint _indent=0;      ///< indentation width (number of columns/characters)\n};\n\n\nclass Message {\n\tstruct Color {\n\t\tColor () =default;\n\t\texplicit Color (int8_t fgcolor) noexcept : foreground(fgcolor) {}\n\t\tColor (int8_t fgcolor, bool light) noexcept: foreground(fgcolor + (light ? 8 : 0)) {}\n\t\tColor (int8_t fgcolor, int8_t bgcolor) noexcept : foreground(fgcolor), background(bgcolor) {}\n\t\tint8_t foreground = -1;\n\t\tint8_t background = -1;\n\t};\n\n\tpublic:\n\t\tenum MessageClass {\n\t\t\tMC_ERROR,\n\t\t\tMC_WARNING,\n\t\t\tMC_MESSAGE,\n\t\t\tMC_PAGE_NUMBER,\n\t\t\tMC_PAGE_SIZE,\n\t\t\tMC_PAGE_WRITTEN,\n\t\t\tMC_STATE,\n\t\t\tMC_TRACING,\n\t\t\tMC_PROGRESS,\n\t\t};\n\n\tpublic:\n\t\tstatic MessageStream& mstream (bool prefix=false, MessageClass mclass=MC_MESSAGE);\n\t\tstatic MessageStream& estream (bool prefix=false);\n\t\tstatic MessageStream& wstream (bool prefix=false);\n\t\tstatic MessageStream& ustream (bool always=false);\n\n\t\tenum {ERRORS=1, WARNINGS=2, MESSAGES=4, USERMESSAGES=8};\n\t\tstatic int LEVEL;\n\t\tstatic bool COLORIZE;\n\n\tprotected:\n\t\tstatic void init ();\n\n\n\tprivate:\n\t\tstatic Color _classColors[];\n\t\tstatic bool _initialized;\n};\n\n#endif\n"
  },
  {
    "path": "src/MessageException.hpp",
    "content": "/*************************************************************************\n** MessageException.hpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef MESSAGEEXCEPTION_HPP\n#define MESSAGEEXCEPTION_HPP\n\n#include <exception>\n#include <string>\n\n\nclass MessageException : public std::exception {\n\tpublic:\n\t\texplicit MessageException (std::string msg) : _message(std::move(msg)) {}\n\t\tconst char* what () const noexcept override {return _message.c_str();}\n\n\tprivate:\n\t\tstd::string _message;\n};\n\n#endif\n"
  },
  {
    "path": "src/MetafontWrapper.cpp",
    "content": "/*************************************************************************\n** MetafontWrapper.cpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cctype>\n#include <fstream>\n#include <sstream>\n#include \"FileSystem.hpp\"\n#include \"FileFinder.hpp\"\n#include \"Message.hpp\"\n#include \"MetafontWrapper.hpp\"\n#include \"Process.hpp\"\n#include \"XMLString.hpp\"\n\nusing namespace std;\n\n\nMetafontWrapper::MetafontWrapper (string fname, string dir)\n\t: _fontname(std::move(fname)), _dir(std::move(dir))\n{\n\t// ensure that folder paths ends with slash\n\tif (_dir.empty())\n\t\t_dir = \"./\";\n\telse if (_dir != \"/\" && _dir.back() != '/')\n\t\t_dir += '/';\n}\n\n\n/** Calls Metafont and evaluates the logfile. If a gf file was successfully\n *  generated the dpi value is stripped from the filename\n *  (e.g. cmr10.600gf => cmr10.gf). This makes life easier...\n *  @param[in] mode Metafont mode, e.g. \"ljfour\"\n *  @param[in] mag magnification factor\n *  @return true on success */\nbool MetafontWrapper::call (const string &mode, double mag) const {\n\tif (!FileFinder::instance().lookup(_fontname+\".mf\"))\n\t\treturn false;     // mf file not available => no need to call the \"slow\" Metafont\n\tFileSystem::remove(_fontname+\".gf\");\n\n\tstring mfName = \"mf\";  // file name of Metafont executable\n#ifndef MIKTEX\n\tif (const char *mfnowinPath = FileFinder::instance().lookupExecutable(\"mf-nowin\", true))\n\t\tmfName = mfnowinPath;\n\telse\n#endif\n\t\tif (const char *mfPath = FileFinder::instance().lookupExecutable(mfName, true))\n\t\t\tmfName = mfPath;\n#ifdef _WIN32\n\t\telse {\n\t\t\tMessage::estream(true) << \"can't run Metafont (mf.exe and mf-nowin.exe not found)\\n\";\n\t\t\treturn false;\n\t\t}\n#endif\n\tostringstream oss;\n\toss << \"\\\"\\\\mode=\" << mode  << \";\"  // set MF mode, e.g. 'proof', 'ljfour' or 'localfont'\n\t\t\"mode_setup;\"                    // initialize MF variables\n\t\t\"mag:=\" << mag << \";\"            // set magnification factor\n\t\t\"show pixels_per_inch*mag;\"      // print character resolution to stdout\n\t\t\"batchmode;\"                     // don't halt on errors and don't print informational messages\n\t\t\"input \" << _fontname << \"\\\"\";   // load font description\n\tMessage::mstream(false, Message::MC_STATE) << \"\\nrunning Metafont for \" << _fontname << '\\n';\n\tProcess mf_process(std::move(mfName), oss.str());\n\tstring mf_messages;\n\tmf_process.run(_dir, &mf_messages);\n\n\tint resolution = getResolution(mf_messages);\n\n\t// compose expected name of GF file (see Metafont Book, p. 324)\n\tstring gfname = _dir + _fontname + \".\";\n\tif (resolution > 0)\n\t\tgfname += XMLString(resolution);\n\tgfname += \"gf\";\n\tFileSystem::rename(gfname, _dir+_fontname+\".gf\");  // remove resolution value from filename\n\treturn FileSystem::exists(_dir+_fontname+\".gf\");\n}\n\n\n/** Returns the resolution applied to a GF file generated by Metafont. Since the resolution\n *  is part of the filename suffix, we need this value in order to address the file.\n *  @param[in] mfMessage output written to stdout by Metafont\n *  @return the resolution (>0 on success, 0 otherwise) */\nint MetafontWrapper::getResolution (const string &mfMessage) const {\n\tint res = 0;\n\tchar buf[256];\n\tif (!mfMessage.empty()) {\n\t\t// try get resolution value written to stdout by above MF command\n\t\tistringstream iss(mfMessage);\n\t\twhile (iss) {\n\t\t\tiss.getline(buf, sizeof(buf));\n\t\t\tstring line = buf;\n\t\t\tif (line.substr(0, 3) == \">> \") {\n\t\t\t\tres = stoi(line.substr(3));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// couldn't read resolution from stdout, try to get it from log file\n\tif (res == 0) {\n\t\tifstream ifs(_dir+_fontname+\".log\");\n\t\twhile (ifs) {\n\t\t\tifs.getline(buf, sizeof(buf));\n\t\t\tstring line = buf;\n\t\t\tif (line.substr(0, 18) == \"Output written on \") {\n\t\t\t\tline = line.substr(18);\n\t\t\t\tauto pos = line.find(' ');\n\t\t\t\tif (pos != string::npos)\n\t\t\t\t\tline.resize(pos);\n\t\t\t\tpos = line.rfind('.');\n\t\t\t\tif (pos != string::npos && line.substr(line.length()-2) == \"gf\") {\n\t\t\t\t\tline.pop_back();\n\t\t\t\t\tline.pop_back();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tres = stoi(line.substr(pos+1));\n\t\t\t\t\t}\n\t\t\t\t\tcatch (...) {\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn res;\n}\n\n\n/** Calls Metafont if output files (tfm and gf) don't already exist.\n *  @param[in] mode Metafont mode to be used (e.g. 'ljfour')\n *  @param[in] mag magnification factor\n *  @return true on success */\nbool MetafontWrapper::make (const string &mode, double mag) const {\n\tifstream tfm(_dir+_fontname+\".tfm\");\n\tifstream gf(_dir+_fontname+\".gf\");\n\tif (gf && tfm) // @@ distinguish between gf and tfm\n\t\treturn true;\n\treturn call(mode, mag);\n}\n\n\nbool MetafontWrapper::success () const {\n\tifstream tfm(_dir+_fontname+\".tfm\");\n\tifstream gf(_dir+_fontname+\".gf\");\n\treturn tfm && gf;\n}\n"
  },
  {
    "path": "src/MetafontWrapper.hpp",
    "content": "/*************************************************************************\n** MetafontWrapper.hpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef METAFONTWRAPPER_HPP\n#define METAFONTWRAPPER_HPP\n\n#include <string>\n\n\nclass FileFinder;\n\nclass MetafontWrapper {\n\tpublic:\n\t\tMetafontWrapper (std::string fname, std::string dir);\n\t\tbool call (const std::string &mode, double mag) const;\n\t\tbool make (const std::string &mode, double mag) const;\n\t\tbool success () const;\n\n\tprotected:\n\t\tint getResolution (const std::string &mfMessage) const;\n\n\tprivate:\n\t\tstd::string _fontname;\n\t\tstd::string _dir;\n};\n\n#endif\n"
  },
  {
    "path": "src/MiKTeXCom.cpp",
    "content": "/*************************************************************************\n** MiKTeXCom.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <comdef.h>\n#include <string>\n#include \"MessageException.hpp\"\n#include \"MiKTeXCom.hpp\"\n\nusing namespace std;\n\n\n/** Constructs a COM object representing a MiKTeX session. */\nMiKTeXCom::MiKTeXCom () : _session() {\n\tif (FAILED(CoInitialize(nullptr)))\n\t\tthrow MessageException(\"COM library could not be initialized\\n\");\n\t// try to initialize the MiKTeX session object\n#ifdef _MSC_VER\n\tHRESULT hres = _session.CreateInstance(L\"MiKTeX.Session\");\n#elif defined(_WIN64)\n\tHRESULT hres = CoCreateInstance(CLSID_MiKTeXSession2_9, 0, CLSCTX_LOCAL_SERVER, IID_ISession2, (void**)&_session);\n#else\n\tHRESULT hres = CoCreateInstance(CLSID_MiKTeXSession2_9, 0, CLSCTX_INPROC_SERVER, IID_ISession2, (void**)&_session);\n#endif\n\tif (FAILED(hres)) {\n\t\tCoUninitialize();\n\t\tthrow MessageException(\"MiKTeX session could not be initialized\");\n\t}\n}\n\n\nMiKTeXCom::~MiKTeXCom () {\n\tif (_session) {\n#ifdef _MSC_VER\n\t\t_session.Release();\n#else\n\t\t_session->Release();\n#endif\n\t\t_session = nullptr; // prevent automatic call of Release() after CoUninitialize()\n\t}\n\tCoUninitialize();\n}\n\n\n/** Returns the MiKTeX version number. */\nstring MiKTeXCom::getVersion () const {\n#ifdef _MSC_VER\n\tMiKTeXSetupInfo info = _session->GetMiKTeXSetupInfo();\n#else\n\tMiKTeXSetupInfo info;\n\t_session->GetMiKTeXSetupInfo(&info);\n#endif\n\treturn to_string(info.series/100)+\".\"+ to_string(info.series%100);\n}\n\n\n/** Returns the path of the directory where the MiKTeX binaries are located. */\nstring MiKTeXCom::getBinDir () const {\n#ifdef _MSC_VER\n\tMiKTeXSetupInfo info = _session->GetMiKTeXSetupInfo();\n#else\n\tMiKTeXSetupInfo info;\n\t_session->GetMiKTeXSetupInfo(&info);\n#endif\n\t_bstr_t bindir = info.binDirectory;\n\treturn {bindir};\n}\n\n\n/** Try to lookup a given file in the MiKTeX directory tree.\n *  @param[in] fname name of file to lookup\n *  @return path of the file or 0 if it can't be found */\nconst char* MiKTeXCom::findFile (const char *fname) const {\n\ttry {\n\t\t_bstr_t path;\n\t\tstatic string ret;\n#ifdef _MSC_VER\n\t\tbool found = (_session->FindFile(fname, path.GetAddress()) == VARIANT_TRUE);\n#else\n\t\tVARIANT_BOOL found_var;\n\t\t_session->FindFile(_bstr_t(fname), path.GetAddress(), &found_var);\n\t\tbool found = (found_var == VARIANT_TRUE);\n#endif\n\t\tif (found) {\n\t\t\tret = _bstr_t(path);\n\t\t\treturn ret.c_str();\n\t\t}\n\t\treturn nullptr;\n\t}\n\tcatch (_com_error &e) {\n\t\tthrow MessageException(static_cast<const char*>(e.Description()));\n\t}\n}\n"
  },
  {
    "path": "src/MiKTeXCom.hpp",
    "content": "/*************************************************************************\n** MiKTeXCom.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef MIKTEXCOM_HPP\n#define MIKTEXCOM_HPP\n\n#include <string>\n#include \"windows.hpp\"\n\n#ifdef _MSC_VER\n#import <miktex-session.tlb>\nusing namespace MiKTeXSession2_9;\n#else\n#include \"miktex-session.h\"\n#endif\n\nclass MiKTeXCom {\n\tpublic:\n\t\tMiKTeXCom ();\n\t\t~MiKTeXCom ();\n\t\tstd::string getBinDir () const;\n\t\tstd::string getVersion () const;\n\t\tconst char* findFile (const char* fname) const;\n\n\tprivate:\n#ifdef _MSC_VER\n\t\tISession2Ptr _session;\n#else\n\t\tISession2 *_session;\n#endif\n};\n\n#endif\n"
  },
  {
    "path": "src/NoPsSpecialHandler.cpp",
    "content": "/*************************************************************************\n** NoPsSpecialHandler.cpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"Message.hpp\"\n#include \"NoPsSpecialHandler.hpp\"\n\nusing namespace std;\n\n\nbool NoPsSpecialHandler::process (const string&, istream&, SpecialActions&) {\n\t_ignoreCount++;\n\treturn true;\n}\n\n\nvoid NoPsSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actions) {\n\tif (_ignoreCount > 0) {\n\t\tstring suffix = (_ignoreCount > 1 ? \"s\" : \"\");\n\t\tMessage::wstream(true) << _ignoreCount << \" PostScript special\" << suffix << \" ignored.\"\n\t\t\t<< \" The resulting SVG might look wrong.\\n\";\n\t\t_ignoreCount = 0;\n\t}\n}\n\n\nvector<const char*> NoPsSpecialHandler::prefixes () const {\n\tvector<const char*> pfx {\"header=\", \"psfile=\", \"PSfile=\", \"ps:\", \"ps::\", \"!\", \"\\\"\", \"pst:\", \"PST:\"};\n\treturn pfx;\n}\n"
  },
  {
    "path": "src/NoPsSpecialHandler.hpp",
    "content": "/*************************************************************************\n** NoPsSpecialHandler.hpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef NOPSSPECIALHANDLER_HPP\n#define NOPSSPECIALHANDLER_HPP\n\n#include \"SpecialHandler.hpp\"\n\nclass NoPsSpecialHandler : public SpecialHandler {\n\tpublic:\n\t\tbool process (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tconst char* info () const override {return nullptr;}\n\t\tconst char* name () const override {return nullptr;}\n\t\tstatic const char* handlerName ()  {return nullptr;}\n\t\tstd::vector<const char*> prefixes () const override;\n\n\tprotected:\n\t\tvoid dviEndPage (unsigned pageno, SpecialActions &actions) override;\n\n\tprivate:\n\t\tsize_t _ignoreCount=0;  // number of PS specials skipped\n};\n\n#endif\n"
  },
  {
    "path": "src/NumericRanges.hpp",
    "content": "/*************************************************************************\n** NumericRanges.hpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef NUMERICRANGES_HPP\n#define NUMERICRANGES_HPP\n\n#include <initializer_list>\n#include <list>\n#include <utility>\n#include \"algorithm.hpp\"\n\ntemplate <class T>\nclass NumericRanges {\n\tpublic:\n\t\tusing Range = std::pair<T,T>;\n\t\tusing Container = std::list<Range>;\n\t\tusing ConstIterator = typename Container::const_iterator;\n\n\t\tclass ValueIterator {\n\t\t\tfriend class NumericRanges<T>;\n\t\t\tpublic:\n\t\t\t\tbool valid () const   {return _currentRangeIt != _endRangeIt;}\n\t\t\t\tT operator * () const {return _currentValue;}\n\n\t\t\t\tbool operator != (const ValueIterator &it) const {\n\t\t\t\t\treturn _currentRangeIt != it._currentRangeIt\n\t\t\t\t\t\t|| (_currentRangeIt != _endRangeIt && _currentValue != it._currentValue);\n\t\t\t\t}\n\n\t\t\t\tbool operator == (const ValueIterator &it) const {\n\t\t\t\t\treturn _currentRangeIt == it._currentRangeIt\n\t\t\t\t\t\t&& (_currentRangeIt == _endRangeIt || _currentValue == it._currentValue);\n\t\t\t\t}\n\n\t\t\t\tvoid operator ++ () {\n\t\t\t\t\tif (_currentValue < _currentRangeIt->second)\n\t\t\t\t\t\t++_currentValue;\n\t\t\t\t\telse if (++_currentRangeIt != _endRangeIt)\n\t\t\t\t\t\t_currentValue = _currentRangeIt->first;\n\t\t\t\t}\n\n\t\t\t\tValueIterator operator ++ (int) {\n\t\t\t\t\tValueIterator it = *this;\n\t\t\t\t\t++(*this);\n\t\t\t\t\treturn it;\n\t\t\t\t}\n\n\t\t\tprotected:\n\t\t\t\tValueIterator (const NumericRanges<T> &ranges) : _currentRangeIt(ranges.begin()), _endRangeIt(ranges.end()), _currentValue() {\n\t\t\t\t\tif (_currentRangeIt != ranges.end())\n\t\t\t\t\t\t_currentValue = _currentRangeIt->first;\n\t\t\t\t}\n\n\t\t\tprivate:\n\t\t\t\tConstIterator _currentRangeIt;\n\t\t\t\tconst ConstIterator _endRangeIt;\n\t\t\t\tT _currentValue;\n\t\t};\n\n\tpublic:\n\t\tNumericRanges () = default;\n\t\tNumericRanges (const std::initializer_list<Range> &ranges);\n\t\tvoid addRange (T value)              {addRange(value, value);}\n\t\tvoid addRange (T first, T last);\n\t\tvoid addRange (const Range &range)   {addRange(range.first, range.second);}\n\t\tbool valueExists (T value) const;\n\t\tvoid clear ()                        {_ranges.clear();}\n\t\tbool empty () const                  {return _ranges.empty();}\n\t\tsize_t size () const                 {return _ranges.size();}\n\t\tConstIterator begin () const         {return _ranges.begin();}\n\t\tConstIterator end () const           {return _ranges.end();}\n\t\tValueIterator valueIterator () const {return ValueIterator(*this);}\n\t\tconst Container& ranges () const     {return _ranges;}\n\n\tprivate:\n\t\tContainer _ranges;\n};\n\n\ntemplate<class T>\nNumericRanges<T>::NumericRanges (const std::initializer_list<Range> &ranges) {\n\tfor (const Range &r : ranges)\n\t\taddRange(r);\n}\n\n\n/** Adds a numeric range to the collection.\n *  @param[in] first left bound of new range\n *  @param[in] last right bound of new range */\ntemplate <typename T>\nvoid NumericRanges<T>::addRange (T first, T last) {\n\tif (first > last)\n\t\tstd::swap(first, last);\n\tauto it = _ranges.begin();\n\twhile (it != _ranges.end() && first > it->first+1 && first > it->second+1)\n\t\t++it;\n\tif (it == _ranges.end() || last < it->first-1 || first > it->second+1)\n\t\tit = _ranges.insert(it, Range(first, last));\n\telse if ((first < it->first && last >= it->first-1) || (first <= it->second+1 && last > it->second)) {\n\t\tit->first = std::min(it->first, first);\n\t\tit->second = std::max(it->second, last);\n\t}\n\t// merge adjacent ranges\n\tif (it != _ranges.end()) {\n\t\tauto l = it;\n\t\tauto r = it;\n\t\tif (l == _ranges.begin())\n\t\t\tl = _ranges.end();\n\t\telse\n\t\t\t--l;\n\t\t++r;\n\t\tbool l_modified = false;\n\t\tbool r_modified = false;\n\t\tif (l != _ranges.end() && l->second >= it->first-1) {\n\t\t\tl->first = std::min(l->first, it->first);\n\t\t\tl->second = std::max(l->second, it->second);\n\t\t\tl_modified = true;\n\t\t}\n\t\tif (r != _ranges.end() && r->first <= it->second+1) {\n\t\t\tr->first = std::min(r->first, it->first);\n\t\t\tr->second = std::max(r->second, it->second);\n\t\t\tr_modified = true;\n\t\t}\n\t\tif (l_modified || r_modified) {\n\t\t\t_ranges.erase(it);\n\t\t\tif (l_modified && r_modified && l->second >= r->first-1) {\n\t\t\t\tl->first = std::min(l->first, r->first);\n\t\t\t\tl->second = std::max(l->second, r->second);\n\t\t\t\t_ranges.erase(r);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\ntemplate <typename T>\nbool NumericRanges<T>::valueExists (T value) const {\n\tauto it = algo::find_if(_ranges, [&](const Range &r) {\n\t\treturn value <= r.second && value >= r.first;\n\t});\n\treturn it != _ranges.end();\n}\n\n#endif\n"
  },
  {
    "path": "src/OFM.cpp",
    "content": "/*************************************************************************\n** OFM.cpp                                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstdint>\n#include <string>\n#include \"algorithm.hpp\"\n#include \"Length.hpp\"\n#include \"OFM.hpp\"\n\nusing namespace std;\n\n\nstatic uint32_t read_uint32 (StreamReader &reader, const string &name) {\n\tuint32_t quad = reader.readUnsigned(4);\n\tif (quad & 0x80000000)\n\t\tthrow FontMetricException(\"negative '\"+name+\"' value not permitted\");\n\treturn quad;\n}\n\nvoid OFM::FileDimensions::read (StreamReader &reader) {\n\tlf = read_uint32(reader, \"lf\");\n\tlh = read_uint32(reader, \"lh\");\n\tbc = read_uint32(reader, \"bc\");\n\tec = read_uint32(reader, \"ec\");\n\tnw = read_uint32(reader, \"nw\");\n\tnh = read_uint32(reader, \"nh\");\n\tnd = read_uint32(reader, \"nd\");\n\tni = read_uint32(reader, \"ni\");\n\tnl = read_uint32(reader, \"nl\");\n\tnk = read_uint32(reader, \"nk\");\n\tne = read_uint32(reader, \"ne\");\n\tnp = read_uint32(reader, \"np\");\n\tdir = read_uint32(reader, \"font-dir\");\n}\n\n\n/** Reads the common beginning of OFM level 0 and 1 files, and initializes\n *  the corresponding members.\n *  @param[in] is reads from this stream\n *  @param[in] maxNumWidths maximum number of width entries\n *  @return the collected data (file offsets, table sizes, writing direction) */\nOFM::FileDimensions OFM::read (istream &is, uint32_t maxNumWidths) {\n\tOFM::FileDimensions dim;\n\tif (is) {\n\t\tis.seekg(0);\n\t\tStreamReader sr(is);\n\t\tuint32_t ofmLevel = sr.readUnsigned(4);\n\t\tif (ofmLevel > 1)\n\t\t\tthrow FontMetricException(\"OFM level \"+to_string(ofmLevel)+\" not supported\");\n\t\tif (int(ofmLevel) != level())\n\t\t\tthrow FontMetricException(\"OFM level \"+to_string(level())+\" expected but found level \"+to_string(ofmLevel));\n\t\tdim.read(sr);\n\t\tif (dim.nw > maxNumWidths)\n\t\t\tthrow FontMetricException(\"invalid size of width table\");\n\t\t_firstChar = dim.bc;  // smallest character code in font\n\t\t_lastChar = dim.ec;   // largest character code in font\n\t\t_vertical = (dim.dir > 0);\n\t}\n\treturn dim;\n}\n\n\n/** Reads and stores the required data from the OFM header. */\nvoid OFM::readHeader (StreamReader &reader) {\n\t_checksum = reader.readUnsigned(4);\n\t_designSize = double(FixWord(reader.readSigned(4)))*Length::pt2bp;\n}\n\n\n/** Reads a sequence of values and stores them in a vector.\n *  @param[in] reader the TFM data is read from this object\n *  @param[out] words vector taking the read words\n *  @param[in] n number of entries to read */\nstatic void read_words (StreamReader &reader, vector<FixWord> &words, size_t n) {\n\twords.resize(n);\n\tfor (size_t i=0; i < n; i++)\n\t\twords[i] = reader.readSigned(4);\n}\n\n\n/** Reads and stores the required OFM tables (characters widths, heights, depths, ...). */\nvoid OFM::readTables (StreamReader &reader, const FileDimensions &dim) {\n\tread_words(reader, _widthTable, dim.nw);\n\tread_words(reader, _heightTable, dim.nh);\n\tread_words(reader, _depthTable, dim.nd);\n\tread_words(reader, _italicTable, dim.ni);\n\treader.skip(8*dim.nl + 4*dim.nk + 8*dim.ne);\n\tread_words(reader, _params, min(dim.np, 7u));  // we only need params 0-6\n\t_params.resize(7, 0);   // ensure 7 parameters\n\t_ascent = dim.nh > 0 ? *algo::max_element(_heightTable) : 0;\n\t_descent = dim.nd > 0 ? *algo::max_element(_depthTable) : 0;\n}\n\n\n/** Returns the character index for a given character or -1 if\n *  the OFM file doesn't contain information on the character. */\nsize_t OFM::charIndex (int c) const {\n\tuint32_t chr=c;\n\tif (chr < _firstChar || chr > _lastChar || size_t(chr-_firstChar) >= numCharInfos())\n\t\treturn -1;\n\treturn chr-_firstChar;\n}\n\n\n/** Returns the width of a character in bp units. */\ndouble OFM::getCharWidth (int c) const {\n\tauto cindex = charIndex(c);\n\tif (cindex == size_t(-1))\n\t\treturn 0;\n\treturn double(_widthTable[widthIndex(cindex)])*_designSize;\n}\n\n\n/** Returns the height of a character in bp units. */\ndouble OFM::getCharHeight (int c) const {\n\tauto cindex = charIndex(c);\n\tif (cindex == size_t(-1))\n\t\treturn 0;\n\treturn double(_heightTable[heightIndex(cindex)])*_designSize;\n}\n\n\n/** Returns the depth of a character in bp units. */\ndouble OFM::getCharDepth (int c) const {\n\tauto cindex = charIndex(c);\n\tif (cindex == size_t(-1))\n\t\treturn 0;\n\treturn double(_depthTable[depthIndex(cindex)])*_designSize;\n}\n\n\n/** Returns the italic correction width of a character in bp units. */\ndouble OFM::getItalicCorr (int c) const {\n\tauto cindex = charIndex(c);\n\tif (cindex == size_t(-1))\n\t\treturn 0;\n\treturn double(_italicTable[italicIndex(cindex)])*_designSize;\n}\n\n/** Returns the optimal space width between words in bp units. */\ndouble OFM::getSpace () const {\n\treturn _params.empty() ? 0 : double(_params[1])*_designSize;\n}\n\n\n/** Returns the amount of glue stretching between words in bp units. */\ndouble OFM::getSpaceStretch () const {\n\treturn _params.empty() ? 0 : double(_params[2])*_designSize;\n}\n\n\n/** Returns the amount of glue shrinking between words in bp units. */\ndouble OFM::getSpaceShrink () const {\n\treturn _params.empty() ? 0 : double(_params[3])*_designSize;\n}\n\n\n/** Returns the size of one EM unit in bp units. */\ndouble OFM::getQuad () const {\n\tif (_params.empty() || _params[5] == 0)\n\t\treturn _designSize;\n\treturn double(_params[5])*_designSize;\n}\n\n/////////////////////////////////////////////////////////////////////////////\n\n/** Reads and stores the required data from an OFM level 0 data stream. */\nvoid OFM0::read (std::istream &is) {\n\tauto dim = OFM::read(is, 0xFFFF);\n\tif (_firstChar >= _lastChar || _lastChar > 0xFFFF)\n\t\tthrow FontMetricException(\"character codes out of range\");\n\tif (14 + dim.lh + 2*(dim.ec-dim.bc+1) + dim.nw + dim.nh + dim.nd + dim.ni +2*dim.nl + dim.nk + 2*dim.ne + dim.np != dim.lf)\n\t\tthrow FontMetricException(\"inconsistent table size values\");\n\tStreamReader sr(is);\n\treadHeader(sr);\n\tsr.seek(56 + dim.lh*4);  // move to char info table\n\treadCharInfos(sr);\n\treadTables(sr, dim);\n}\n\n\n/** Reads and stores the required data from the char-info section.\n *  Expects the stream pointer to be located on the first byte of the first char-info entry. */\nvoid OFM0::readCharInfos (StreamReader &reader) {\n\tauto numChars = _lastChar-_firstChar+1;\n\t_charInfos.resize(numChars);\n\tfor (size_t i=0; i < numChars; i++) {\n\t\t_charInfos[i] = uint64_t(reader.readUnsigned(4)) << 32;\n\t\t_charInfos[i] |= reader.readUnsigned(4);\n\t}\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/** Reads and stores the required data from an OFM level 1 data stream. */\nvoid OFM1::read (std::istream &is) {\n\tauto dim = OFM::read(is, 0x110000);\n\tif (_firstChar >= _lastChar || _lastChar > 0x10FFFF)\n\t\tthrow FontMetricException(\"character codes out of range\");\n\tStreamReader sr(is);\n\tuint32_t nco = sr.readUnsigned(4);  // OFM1: offset of char-info table (in 4-byte words)\n\t_ncw = sr.readUnsigned(4);  // total number of character info words in OFM file\n\t_npc = sr.readUnsigned(4);  // number of parameters per character\n\t// check validity of number entries for new (OFM level 1) table types\n\tsize_t sum=0, numTables=0;\n\tfor (int i=0; i < 12; i++) {\n\t\tuint32_t num = sr.readUnsigned(4);\n\t\tsum += num;\n\t\tif (i%2 == 0)\n\t\t\tnumTables += num;\n\t}\n\tif (numTables > 32)\n\t\tthrow FontMetricException(\"too many OFM level 1 tables\");\n\tif (29 + dim.lh + _ncw + dim.nw + dim.nh + dim.nd + dim.ni +2*dim.nl + dim.nk + 2*dim.ne + dim.np + sum != dim.lf)\n\t\tthrow FontMetricException(\"inconsistent table size values\");\n\treadHeader(sr);\n\tsr.seek(4*nco);  // move to char info table\n\treadCharInfos(sr);\n\treadTables(sr, dim);\n}\n\n\n/** Reads and stores the required data from the char-info section.\n *  Expects the stream pointer to be located on the first byte of the first char-info entry. */\nvoid OFM1::readCharInfos (StreamReader &reader) {\n\tauto numCharInfos = _ncw/(3 + _npc/2);  // number of char info entries in file\n\tauto numChars = _lastChar-_firstChar+1;\n\tsize_t numCharsRead=0;\n\t_charInfos.reserve(numChars);\n\twhile (numCharsRead <= numChars && numCharInfos > 0) {\n\t\tCharInfo info;\n\t\tinfo.widthIndex = uint16_t(reader.readUnsigned(2));\n\t\tinfo.heightIndex = uint8_t(reader.readUnsigned(1));\n\t\tinfo.depthIndex = uint8_t(reader.readUnsigned(1));\n\t\tinfo.italicIndex = uint8_t(reader.readUnsigned(1));\n\t\treader.skip(3);  // skip RFU, ext-tag, tag, and remainder\n\t\tauto repeats = uint16_t(reader.readUnsigned(2));\n\t\tif (numCharsRead + repeats > numChars)\n\t\t\tthrow FontMetricException(\"number of characters exceeded due to too many char-info repeats\");\n\t\treader.skip(_npc*2);  // skip parameters\n\t\tif (_npc%2 == 0)\n\t\t\treader.skip(2);    // skip padding bytes\n\t\tfor (int j=0; j <= repeats; j++)\n\t\t\t_charInfos.push_back(info);\n\t\tnumCharsRead += repeats+1;\n\t\tnumCharInfos--;\n\t}\n\tif (numCharInfos > 0)\n\t\tthrow FontMetricException(\"more char-info entries present than characters\");\n\tif (numCharsRead < numChars)\n\t\tthrow FontMetricException(\"not all characters covered by char-info entries\");\n}\n"
  },
  {
    "path": "src/OFM.hpp",
    "content": "/*************************************************************************\n** OFM.hpp                                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef OFM_HPP\n#define OFM_HPP\n\n#include <vector>\n#include \"FixWord.hpp\"\n#include \"FontMetrics.hpp\"\n#include \"StreamReader.hpp\"\n\nclass OFM : public FontMetrics {\n\tpublic:\n\t\tvirtual int level () const =0;\n\t\tbool isOFM () const override           {return true;}\n\t\tuint32_t getChecksum () const override {return _checksum;}\n\t\tuint32_t firstChar () const override   {return _firstChar;}\n\t\tuint32_t lastChar () const override    {return _lastChar;}\n\t\tbool verticalLayout () const  override {return _vertical;}\n\t\tdouble getDesignSize () const override {return _designSize;}\n\t\tdouble getAscent () const override     {return double(_ascent)*_designSize;}\n\t\tdouble getDescent () const override    {return double(_descent)*_designSize;}\n\t\tdouble getCharWidth (int c) const override;\n\t\tdouble getCharHeight (int c) const override;\n\t\tdouble getCharDepth (int c) const override;\n\t\tdouble getItalicCorr (int c) const override;\n\t\tdouble getSpace () const override;\n\t\tdouble getSpaceStretch () const override;\n\t\tdouble getSpaceShrink () const override;\n\t\tdouble getQuad () const override;\n\t\tusing FontMetrics::read;\n\n\tprotected:\n\t\tstruct FileDimensions {\n\t\t\tuint32_t lf=0;  // length of file in 4-byte words\n\t\t\tuint32_t lh=0;  // length of header data in 4-byte words\n\t\t\tuint32_t bc=0;  // smallest character code\n\t\t\tuint32_t ec=0;  // largest character code\n\t\t\tuint32_t nw=0;  // number of width entries\n\t\t\tuint32_t nh=0;  // number of height entries\n\t\t\tuint32_t nd=0;  // number of depth entries\n\t\t\tuint32_t ni=0;  // number of italic correction entries\n\t\t\tuint32_t nl=0;  // number of lig-kern entries\n\t\t\tuint32_t nk=0;  // number of kern entries\n\t\t\tuint32_t ne=0;  // number of extensible character entries\n\t\t\tuint32_t np=0;  // number of font parameter words\n\t\t\tuint32_t dir=0; // writing direction of font\n\t\t\tvoid read (StreamReader &reader);\n\t\t};\n\n\t\tFileDimensions read (std::istream &is, uint32_t maxNumWidths);\n\t\tvoid readHeader (StreamReader &reader);\n\t\tvoid readTables (StreamReader &reader, const FileDimensions &dim);\n\t\tsize_t charIndex (int c) const;\n\t\tvirtual size_t numCharInfos () const =0;\n\t\tvirtual size_t widthIndex (size_t n) const =0;\n\t\tvirtual size_t heightIndex (size_t n) const =0;\n\t\tvirtual size_t depthIndex (size_t n) const =0;\n\t\tvirtual size_t italicIndex (size_t n) const =0;\n\n\tprotected:\n\t\tuint32_t _checksum=0;\n\t\tuint32_t _firstChar=0, _lastChar=0;\n\t\tdouble _designSize=0;  ///< design size of the font in PS points (72bp = 1in)\n\t\tstd::vector<FixWord> _widthTable;    ///< character widths in design size units\n\t\tstd::vector<FixWord> _heightTable;   ///< character height in design size units\n\t\tstd::vector<FixWord> _depthTable;    ///< character depth in design size units\n\t\tstd::vector<FixWord> _italicTable;   ///< italic corrections in design size units\n\t\tstd::vector<FixWord> _params;        ///< values of the OFM's param section\n\t\tFixWord _ascent=0, _descent=0;       ///< max. height and depth\n\t\tbool _vertical=false;     ///< true if metrics refer to vertical text layout\n};\n\n\nclass OFM0 : public OFM {\n\tpublic:\n\t\tvoid read (std::istream &is) override;\n\t\tint level () const override {return 0;}\n\n\tprotected:\n\t\tvoid readCharInfos (StreamReader &reader);\n\t\tsize_t numCharInfos () const override {return _charInfos.size();}\n\t\tsize_t widthIndex (size_t n) const override  {return (_charInfos[n] >> 48) & 0xFFFF;}\n\t\tsize_t heightIndex (size_t n) const override {return (_charInfos[n] >> 40) & 0xFF;}\n\t\tsize_t depthIndex (size_t n) const override  {return (_charInfos[n] >> 32) & 0xFF;}\n\t\tsize_t italicIndex (size_t n) const override {return (_charInfos[n] >> 24) & 0xFF;}\n\n\tprivate:\n\t\tstd::vector<uint64_t>  _charInfos;\n};\n\n\nclass OFM1 : public OFM {\n\tstruct CharInfo {\n\t\tuint16_t widthIndex=0;\n\t\tuint8_t heightIndex=0;\n\t\tuint8_t depthIndex=0;\n\t\tuint8_t italicIndex=0;\n\t};\n\tpublic:\n\t\tvoid read (std::istream &is) override;\n\t\tint level () const override {return 1;}\n\n\tprotected:\n\t\tvoid readCharInfos (StreamReader &reader);\n\t\tsize_t numCharInfos () const override {return _charInfos.size();}\n\t\tsize_t widthIndex (size_t n) const override  {return _charInfos[n].widthIndex;}\n\t\tsize_t heightIndex (size_t n) const override {return _charInfos[n].heightIndex;}\n\t\tsize_t depthIndex (size_t n) const override  {return _charInfos[n].depthIndex;}\n\t\tsize_t italicIndex (size_t n) const override {return _charInfos[n].italicIndex;}\n\n\tprivate:\n\t\tuint32_t _ncw=0;\n\t\tuint32_t _npc=0;\n\t\tstd::vector<CharInfo> _charInfos;\n};\n\n#endif\n"
  },
  {
    "path": "src/Opacity.cpp",
    "content": "/*************************************************************************\n** Opacity.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"algorithm.hpp\"\n#include \"Opacity.hpp\"\n\nusing namespace std;\n\nstring Opacity::cssBlendMode (BlendMode bm) {\n\tswitch (bm) {\n\t\tcase BM_NORMAL    : return \"normal\";\n\t\tcase BM_MULTIPLY  : return \"multiply\";\n\t\tcase BM_SCREEN    : return \"screen\";\n\t\tcase BM_OVERLAY   : return \"overlay\";\n\t\tcase BM_SOFTLIGHT : return \"soft-light\";\n\t\tcase BM_HARDLIGHT : return \"hard-light\";\n\t\tcase BM_COLORDODGE: return \"color-dodge\";\n\t\tcase BM_COLORBURN : return \"color-burn\";\n\t\tcase BM_DARKEN    : return \"darken\";\n\t\tcase BM_LIGHTEN   : return \"lighten\";\n\t\tcase BM_DIFFERENCE: return \"difference\";\n\t\tcase BM_EXCLUSION : return \"exclusion\";\n\t\tcase BM_HUE       : return \"hue\";\n\t\tcase BM_SATURATION: return \"saturation\";\n\t\tcase BM_COLOR     : return \"color\";\n\t\tcase BM_LUMINOSITY: return \"luminosity\";\n\t}\n\treturn \"\";\n}\n\n\nstatic string to_lower_drop_nonalpha (const string &str) {\n\tstring ret;\n\tif (!str.empty()) {\n\t\tret.reserve(str.length());\n\t\tfor (char c : str) {\n\t\t\tif (isalpha(c))\n\t\t\t\tret += char(tolower(c));\n\t\t}\n\t}\n\treturn ret;\n}\n\n\nOpacity::BlendMode Opacity::blendMode (const std::string &name) {\n\tstruct NamedMode {\n\t\tconst char *name;\n\t\tBlendMode mode;\n\t} modes[] = {\n\t\t{\"normal\",     BM_NORMAL    },\n\t\t{\"multiply\",   BM_MULTIPLY  },\n\t\t{\"screen\",     BM_SCREEN    },\n\t\t{\"overlay\",    BM_OVERLAY   },\n\t\t{\"softlight\",  BM_SOFTLIGHT },\n\t\t{\"hardlight\",  BM_HARDLIGHT },\n\t\t{\"colordodge\", BM_COLORDODGE},\n\t\t{\"colorburn\",  BM_COLORBURN },\n\t\t{\"darken\",     BM_DARKEN    },\n\t\t{\"lighten\",    BM_LIGHTEN   },\n\t\t{\"difference\", BM_DIFFERENCE},\n\t\t{\"exclusion\",  BM_EXCLUSION },\n\t\t{\"hue\",        BM_HUE       },\n\t\t{\"saturation\", BM_SATURATION},\n\t\t{\"color\",      BM_COLOR     },\n\t\t{\"luminosity\", BM_LUMINOSITY}\n\t};\n\tstring compname = to_lower_drop_nonalpha(name);\n\tauto it = algo::find_if(modes, [&compname](const NamedMode &m) {\n\t\treturn compname == m.name;\n\t});\n\treturn it != end(modes) ? it->mode : BM_NORMAL;\n}\n\n\nbool Opacity::operator == (const Opacity &opacity) const {\n\treturn opacity._fillalpha == _fillalpha\n\t\t&& opacity._strokealpha == _strokealpha\n\t\t&& opacity._blendMode == _blendMode;\n}\n\n\nbool Opacity::operator != (const Opacity &opacity) const {\n\treturn opacity._fillalpha != _fillalpha\n\t\t|| opacity._strokealpha != _strokealpha\n\t\t|| opacity._blendMode != _blendMode;\n}\n"
  },
  {
    "path": "src/Opacity.hpp",
    "content": "/*************************************************************************\n** Opacity.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef OPACITY_HPP\n#define OPACITY_HPP\n\n#include <string>\n\nclass OpacityAlpha {\n\tpublic:\n\t\tOpacityAlpha () =default;\n\t\tOpacityAlpha (double constalpha, double shapealpha) : _constalpha(constalpha), _shapealpha(shapealpha) {}\n\t\texplicit OpacityAlpha (double alpha) : _constalpha(alpha) {}\n\t\tvoid setConstAlpha (double alpha) { _constalpha = alpha;}\n\t\tvoid setShapeAlpha (double shapealpha) {_shapealpha = shapealpha;}\n\t\tdouble value () const {return _constalpha * _shapealpha;}\n\t\tbool operator == (const OpacityAlpha &alpha) const {return alpha._constalpha == _constalpha && alpha._shapealpha == _shapealpha;}\n\t\tbool operator != (const OpacityAlpha &alpha) const {return alpha._constalpha != _constalpha || alpha._shapealpha != _shapealpha;}\n\t\tbool isOpaque () const {return _constalpha == 1.0 && _shapealpha == 1.0;}\n\n\tprivate:\n\t\tdouble _constalpha=1.0;\n\t\tdouble _shapealpha=1.0;\n};\n\nclass Opacity {\n\tpublic:\n\t\tenum BlendMode {\n\t\t\tBM_NORMAL, BM_MULTIPLY, BM_SCREEN, BM_OVERLAY,\n\t\t\tBM_SOFTLIGHT, BM_HARDLIGHT, BM_COLORDODGE, BM_COLORBURN,\n\t\t\tBM_DARKEN, BM_LIGHTEN, BM_DIFFERENCE, BM_EXCLUSION,\n\t\t\tBM_HUE, BM_SATURATION, BM_COLOR, BM_LUMINOSITY\n\t\t};\n\n\tpublic:\n\t\tOpacity () =default;\n\t\tOpacity (OpacityAlpha fillalpha, OpacityAlpha strokealpha, BlendMode bm) : _fillalpha(fillalpha), _strokealpha(strokealpha), _blendMode(bm) {}\n\t\tOpacity (OpacityAlpha fillalpha, OpacityAlpha strokealpha) : Opacity(fillalpha, strokealpha, BM_NORMAL) {}\n\t\texplicit Opacity (BlendMode bm) : _blendMode(bm) {}\n\t\tOpacityAlpha& fillalpha () {return _fillalpha;}\n\t\tOpacityAlpha& strokealpha () {return _strokealpha;}\n\t\tconst OpacityAlpha& fillalpha () const {return _fillalpha;}\n\t\tconst OpacityAlpha& strokealpha () const {return _strokealpha;}\n\t\tBlendMode blendMode () const {return _blendMode;}\n\t\tvoid setBlendMode (BlendMode mode) {_blendMode = mode;}\n\t\tstd::string cssBlendMode () const {return cssBlendMode(_blendMode);}\n\t\tstatic std::string cssBlendMode (BlendMode bm);\n\t\tbool isFillDefault () const {return _fillalpha.isOpaque() && _blendMode == BM_NORMAL;}\n\t\tbool isStrokeDefault () const {return _strokealpha.isOpaque() && _blendMode == BM_NORMAL;}\n\t\tbool operator == (const Opacity &opacity) const;\n\t\tbool operator != (const Opacity &opacity) const;\n\n\t\tstatic BlendMode blendMode (const std::string &name);\n\n\tprivate:\n\t\tOpacityAlpha _fillalpha;\n\t\tOpacityAlpha _strokealpha;\n\t\tBlendMode _blendMode=BM_NORMAL;\n};\n\n#endif\n"
  },
  {
    "path": "src/PDFHandler.cpp",
    "content": "/*************************************************************************\n** PDFHandler.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <fstream>\n#include <iterator>\n#include <limits>\n#include <sstream>\n#include \"algorithm.hpp\"\n#include \"FilePath.hpp\"\n#include \"FileSystem.hpp\"\n#include \"FontEngine.hpp\"\n#include \"FontManager.hpp\"\n#include \"GraphicsPath.hpp\"\n#include \"Color.hpp\"\n#include \"Matrix.hpp\"\n#include \"Opacity.hpp\"\n#include \"PDFHandler.hpp\"\n#include \"Process.hpp\"\n#include \"SVGElement.hpp\"\n#include \"SVGTree.hpp\"\n#include \"Unicode.hpp\"\n#include \"XMLParser.hpp\"\n#include \"XXHashFunction.hpp\"\n\nusing namespace std;\n\ntemplate <typename T>\nstatic T parse_value (const string &str) {\n\tT value{};\n\tistringstream iss(str);\n\tiss >> value;\n\treturn value;\n}\n\ntemplate<>\nstring parse_value (const string &str) {\n\treturn str;\n}\n\ntemplate<>\nvector<double> parse_value (const string &str) {\n\tvector<double> vec;\n\tistringstream iss(str);\n\twhile (iss) {\n\t\tdouble val;\n\t\tif (iss >> val)\n\t\t\tvec.push_back(val);\n\t}\n\treturn vec;\n}\n\n\nistream& operator >> (istream &is, PDFHandler::ObjID &objId) {\n\tis >> objId.num;\n\tis >> objId.gen;\n\tis >> ws;\n\tif (is.peek() == 'R')\n\t\tis.get();\n\treturn is;\n}\n\n\ntemplate <typename T>\nstatic vector<T> parse_pdf_array (const string &str) {\n\tvector<T> vec;\n\tistringstream iss(str);\n\tif (iss.get() == '[') {\n\t\twhile (iss) {\n\t\t\tT val;\n\t\t\tif (iss >> val)\n\t\t\t\tvec.push_back(val);\n\t\t}\n\t}\n\treturn vec;\n}\n\ntemplate <typename T>\nstatic map<string, T> parse_pdf_dict (const string &str) {\n\tmap<string, T> dict;\n\tistringstream iss(str);\n\tif (iss.get() == '<' && iss.get() == '<') {\n\t\tstring name;\n\t\tT val;\n\t\twhile (iss) {\n\t\t\tiss >> ws >> name >> val;\n\t\t\tif (iss)\n\t\t\t\tdict.emplace(name, val);\n\t\t}\n\t}\n\treturn dict;\n}\n\n\ntemplate <typename T>\nstatic T parse_attr_value (const XMLElement *elem, const string &attr) {\n\tT ret{};\n\tif (const char *value = elem->getAttributeValue(attr))\n\t\tret = parse_value<T>(value);\n\treturn ret;\n}\n\ntemplate<>\nMatrix parse_attr_value (const XMLElement *elem, const string &attr) {\n\tMatrix matrix(1);\n\tif (const char *val = elem->getAttributeValue(attr))\n\t\tmatrix = Matrix(val);\n\treturn matrix;\n}\n\n///////////////////////////////////////////////////////////////////////////////\n\n\nPDFHandler::~PDFHandler () {\n\tfinishFile();\n}\n\n\nstring PDFHandler::mutoolVersion () {\n\tstatic string version;\n\tif (version.empty())\n\t\tversion = mutool(\"-v\", SearchPattern(\"([0-9.]+)\", \"$1\"), true);\n\treturn version;\n}\n\n\n/** Returns the total number of pages of a PDF file. */\nint PDFHandler::numberOfPages (const string &fname) {\n\treturn parse_value<int>(mtShow(\"\\\"\"+fname+\"\\\"\", \"trailer/Root/Pages/Count\"));\n}\n\n\n/** Converts a single page of a PDF file to SVG. If no context element is given,\n *  the SVG page contents are added to a page group element of the SVG tree.\n *  Otherwise, they are added to the context element which is not inserted into\n *  the SVG tree but returned for further processing.\n *  @param[in] fname PDF filename\n *  @param[in] pageno number of page to convert\n *  @param[in] context element the generated page contents are appended to\n *  @return the context element holding the page contents */\nunique_ptr<SVGElement> PDFHandler::convert (const string &fname, int pageno, unique_ptr<SVGElement> context) {\n\tif (_fname != fname)\n\t\tinitFile(fname);\n\tif (!_svg || pageno < 1 || pageno > _numPages)\n\t\treturn context;\n\tinitPage(pageno, std::move(context));\n\n\t// create trace XML and convert it to SVG\n\tXMLParser xmlParser;\n\tauto openfunc = std::bind(&PDFHandler::elementOpened, this, std::placeholders::_1);\n\tauto closefunc = std::bind(&PDFHandler::elementClosed, this, std::placeholders::_1);\n\txmlParser.setNotifyFuncs(openfunc, closefunc);\n\txmlParser.setRootElement(nullptr);\n\tstring xmlfname = FileSystem::tmpdir()+FilePath(fname, FilePath::PT_FILE).filename()+\"-\"+ to_string(_pageno)+\".xml\";\n\tmutool(\"draw -Ftrace -o\"+xmlfname+\" \"+_fname+\" \"+to_string(_pageno));\n\tifstream ifs(xmlfname);\n\txmlParser.parse(ifs);\n\tifs.close();\n\t// remove trace XML\n\tif (!PhysicalFont::KEEP_TEMP_FILES)\n\t\tFileSystem::remove(xmlfname);\n\treturn finishPage();\n}\n\n\nvoid PDFHandler::initFile (const string &fname) {\n\tfinishFile();\n\t_fname = FilePath(fname, FilePath::PT_FILE).absolute();\n\t_fname = \"\\\"\" + _fname + \"\\\"\";\n\t_numPages = parse_value<int>(mtShow(\"trailer/Root/Pages/Count\"));\n\t// extract image and font files from the PDF\n\tstring cwd = FileSystem::getcwd();\n\tstring tmpdir = FileSystem::tmpdir();\n\tFileSystem::chdir(tmpdir);\n\tstring out = mtExtract(_fname, SearchPattern(R\"(extracting\\s+([a-z]+-\\d+\\.\\S+))\", \"$1\\n\"));\n\tFileSystem::chdir(cwd);\n\tfor (const string &extrfname : util::split(out, \"\\n\")) {\n\t\tauto dashpos = extrfname.rfind('-');\n\t\tif (dashpos != string::npos) {\n\t\t\tint objnum;\n\t\t\tistringstream iss(extrfname.substr(dashpos+1));\n\t\t\tiss >> objnum;\n\t\t\t_extractedFiles.emplace(objnum, extrfname);\n\t\t}\n\t}\n}\n\n\nvoid PDFHandler::finishFile () {\n\tif (!PhysicalFont::KEEP_TEMP_FILES) {\n\t\t// remove extracted image and font files\n\t\tfor (auto &entry : _extractedFiles)\n\t\t\tFileSystem::remove(FileSystem::tmpdir() + entry.second);\n\t}\n\t_fname.clear();\n\t_numPages = 0;\n}\n\n\nvoid PDFHandler::initPage (int pageno, unique_ptr<SVGElement> context) {\n\t_pageno = pageno;\n\tif (!context)\n\t\t_svg->newPage(_pageno);\n\telse {\n\t\t_context = context.get();\n\t\t_svg->pushPageContext(std::move(context));\n\t}\n\t// collect sequence of images referenced on current page\n\tcollectObjects();\n\t_imgSeq.clear();\n\tSearchPattern pattern{R\"((/[a-zA-Z0-9]+)\\s+Do)\", \"$1\\n\"};\n\tstring content = mtShow(\"pages/\" + to_string(_pageno) + \"/Contents\", pattern);\n\tif (content.empty())\n\t\tcontent = mtShow(\"pages/\" + to_string(_pageno) + \"/Contents/*\", pattern);\n\t_imgSeq = util::split(content, \"\\n\");\n\talgo::erase_if(_imgSeq, util::IsEmptyString());\n}\n\n\nunique_ptr<SVGElement> PDFHandler::finishPage () {\n\tif (!_context) {\n\t\t// add glyph outlines of used characters\n\t\tfor (auto &fontchars: FontManager::instance().getUsedChars()) {\n\t\t\tif (auto font = font_cast<const PhysicalFont *>(fontchars.first))\n\t\t\t\t_svg->append(*font, fontchars.second);\n\t\t}\n\t\t_svg->appendFontStyles(FontManager::instance().getUsedFonts());\n\t}\n\t// pop clipping paths still active\n\twhile (!_clipPathStack.empty()) {\n\t\t_svg->popPageContext();\n\t\tif (_clipPathStack.top().groupElement->empty())\n\t\t\tXMLElement::detach(_clipPathStack.top().groupElement);\n\t\t_clipPathStack.pop();\n\t}\n\t_pageno = 0;\n\t_x = _y = 0;\n\t_currentFont = nullptr;\n\t_objDict.clear();\n\tauto context = util::static_unique_ptr_cast<SVGElement>(XMLElement::detach(_context));\n\tif (context)\n\t\t_svg->popPageContext();\n\t_context = nullptr;\n\treturn context;\n}\n\n\n/** Called by the XMLParser after an opening tag of an element has been processed.\n *  @param[in] trcElement opened element of trace XML */\nvoid PDFHandler::elementOpened (XMLElement *trcElement) {\n\tconst string &name = trcElement->name();\n\tif (name == \"tile\")\n\t\tdoOpenTile(trcElement);  // start defining a tiling pattern\n}\n\n\n/** Called by the XMLParser after a closing tag of an element has been processed.\n *  @param[in] trcElement closed element of trace XML */\nvoid PDFHandler::elementClosed (XMLElement *trcElement) {\n\tconst string &name = trcElement->name();\n\tstruct Handler {\n\t\tconst char *name;\n\t\tvoid (PDFHandler::*func)(XMLElement*);\n\t} handlers[] = {\n\t\t{\"page\", &PDFHandler::doPage},\n\t\t{\"stroke_path\", &PDFHandler::doStrokePath},\n\t\t{\"fill_path\", &PDFHandler::doFillPath},\n\t\t{\"fill_image\", &PDFHandler::doFillImage},\n\t\t{\"fill_text\", &PDFHandler::doFillText},\n\t\t{\"clip_path\", &PDFHandler::doClipPath},\n\t\t{\"clip_stroke_path\", &PDFHandler::doClipStrokePath},\n\t\t{\"clip_text\", &PDFHandler::doClipText},\n\t\t{\"pop_clip\", &PDFHandler::doPopClip},\n\t\t{\"tile\", &PDFHandler::doCloseTile},\n\t};\n\tauto it = algo::find_if(handlers, [&name](const Handler &handler) {\n\t\treturn handler.name == name;\n\t});\n\tif (it != end(handlers))\n\t\t(this->*it->func)(trcElement);\n\telse\n\t\treturn;\n\tXMLElement::detach(trcElement);  // remove element from XML tree, it's no longer needed\n}\n\n\nvoid PDFHandler::doPage (XMLElement *trcPageElement) {\n\tauto vec = parse_attr_value<vector<double>>(trcPageElement, \"mediabox\");\n\tif (vec.size() == 4)\n\t\t_bbox = BoundingBox(vec[0], vec[1], vec[2], vec[3]);\n}\n\n\n/** Returns a color object from color data given in the trace XML.\n *  @param[in] colorspace currently supported: DeviceGray, DeviceRGB, DeviceCMYK\n *  @param[in] value color components depending on color space */\nstatic Color to_color (const string &colorspace, const string &value) {\n\tColor color;\n\tif (colorspace == \"DeviceGray\")\n\t\tcolor.setGray(parse_value<double>(value));\n\telse if (colorspace == \"DeviceRGB\") {\n\t\tauto comp = util::split(value, \" \");\n\t\tif (comp.size() == 3)\n\t\t\tcolor.setRGB(parse_value<double>(comp[0]), parse_value<double>(comp[1]), parse_value<double>(comp[2]));\n\t}\n\telse if (colorspace == \"DeviceCMYK\") {\n\t\tauto comp = util::split(value, \" \");\n\t\tif (comp.size() == 4)\n\t\t\tcolor.setCMYK(parse_value<double>(comp[0]), parse_value<double>(comp[1]), parse_value<double>(comp[2]), parse_value<double>(comp[3]));\n\t}\n\treturn color;\n}\n\n\nstatic double matrix_extent (const Matrix &m) {\n\t// signed area of the parallelogram spanned by the scale/rotation components of the matrix\n\t// v1 x v2 = det(v1,v2) = sin(v1,v2) * |v1| * |v2|\n\tdouble area = m.get(0,0)*m.get(1,1) - m.get(0,1)*m.get(1,0);\n\treturn sqrt(abs(area));\n}\n\n\nstatic double matrix_max_extent (const Matrix &matrix) {\n\tdouble max1 = max(abs(matrix.get(0,0)), abs(matrix.get(0,1)));\n\tdouble max2 = max(abs(matrix.get(1,0)), abs(matrix.get(1,1)));\n\treturn max(max1, max2);\n}\n\n\n/** Creates a GraphicsPath object from a sequence of command elements\n *  (moveto, lineto, curveto, closepath) read from the trace XML file.\n *  @param[in] srcPathElement parent of the command elements */\nstatic GraphicsPath<double> create_path (XMLElement *srcPathElement) {\n\tGraphicsPath<double> path;\n\tfor (const XMLNode *child : *srcPathElement) {\n\t\tif (const XMLElement *cmd = child->toElement()) {\n\t\t\tstring name = cmd->name();\n\t\t\tif (name == \"moveto\")\n\t\t\t\tpath.moveto(parse_attr_value<double>(cmd, \"x\"), parse_attr_value<double>(cmd, \"y\"));\n\t\t\telse if (name == \"lineto\")\n\t\t\t\tpath.lineto(parse_attr_value<double>(cmd, \"x\"), parse_attr_value<double>(cmd, \"y\"));\n\t\t\telse if (name == \"curveto\")\n\t\t\t\tpath.cubicto(\n\t\t\t\t\tparse_attr_value<double>(cmd, \"x1\"), parse_attr_value<double>(cmd, \"y1\"),\n\t\t\t\t\tparse_attr_value<double>(cmd, \"x2\"), parse_attr_value<double>(cmd, \"y2\"),\n\t\t\t\t\tparse_attr_value<double>(cmd, \"x3\"), parse_attr_value<double>(cmd, \"y3\"));\n\t\t\telse if (name == \"closepath\")\n\t\t\t\tpath.closepath();\n\t\t}\n\t}\n\tif (!path.empty())\n\t\tpath.removeRedundantCommands();\n\treturn path;\n}\n\n\n/** Creates a new SVG path element from XML drawing commands.\n *  @param[in] srcPathElement element holding the drawing commands\n *  @param[in] stroke create a stroke path if true, a fill path otherwise\n *  @param[out] bbox if not 0, gets the bounding box of the resulting path */\nstatic unique_ptr<SVGElement> create_path_element (XMLElement *srcPathElement, bool stroke, BoundingBox *bbox=nullptr) {\n\tunique_ptr<SVGElement> pathElement;\n\tauto path = create_path(srcPathElement);\n\tif (!path.empty()) {\n\t\tauto matrix = parse_attr_value<Matrix>(srcPathElement, \"transform\");\n\t\tpath.transform(matrix);\n\t\tif (bbox)\n\t\t\t*bbox = path.computeBBox();\n\t\tpathElement = util::make_unique<SVGElement>(\"path\");\n\t\tostringstream oss;\n\t\tpath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);\n\t\tpathElement->addAttribute(\"d\", oss.str());\n\t\tstring colorspace = parse_attr_value<string>(srcPathElement, \"colorspace\");\n\t\tstring color = parse_attr_value<string>(srcPathElement, \"color\");\n\t\tif (!stroke) {  // create path for filling?\n\t\t\tif (parse_attr_value<string>(srcPathElement, \"winding\") == \"evenodd\")\n\t\t\t\tpathElement->setFillRule(SVGElement::FR_EVENODD);\n\t\t\tif (!colorspace.empty())\n\t\t\t\tpathElement->setFillColor(to_color(colorspace, color));\n\t\t}\n\t\telse {  // create path for stroking\n\t\t\tif (!colorspace.empty())\n\t\t\t\tpathElement->setStrokeColor(to_color(colorspace, color));\n\t\t\tpathElement->setNoFillColor();\n\t\t\tdouble linewidth=1;\n\t\t\tif (const char *valstr = srcPathElement->getAttributeValue(\"linewidth\")) {\n\t\t\t\tdouble lwScale = matrix_extent(matrix);\n\t\t\t\tlinewidth = parse_value<double>(valstr);\n\t\t\t\tpathElement->setStrokeWidth(linewidth * lwScale);\n\t\t\t}\n\t\t\tdouble miterlimit=0;\n\t\t\tSVGElement::LineJoin linejoin=SVGElement::LJ_MITER;\n\t\t\tif (const char *valstr = srcPathElement->getAttributeValue(\"miterlimit\"))\n\t\t\t\tpathElement->setStrokeMiterLimit(miterlimit = parse_value<double>(valstr));\n\t\t\tif (const char *valstr = srcPathElement->getAttributeValue(\"linejoin\")) {\n\t\t\t\tlinejoin = SVGElement::LJ_MITER;\n\t\t\t\tswitch (parse_value<int>(valstr)) {\n\t\t\t\t\tcase 1: linejoin = SVGElement::LJ_ROUND; break;\n\t\t\t\t\tcase 2: linejoin = SVGElement::LJ_BEVEL; break;\n\t\t\t\t}\n\t\t\t\tpathElement->setStrokeLineJoin(linejoin);\n\t\t\t}\n\t\t\tif (const char *valstr = srcPathElement->getAttributeValue(\"linecap\")) {\n\t\t\t\tSVGElement::LineCap captype = SVGElement::LC_BUTT;\n\t\t\t\tswitch (parse_value<int>(valstr)) {\n\t\t\t\t\tcase 1: captype = SVGElement::LC_ROUND; break;\n\t\t\t\t\tcase 2: captype = SVGElement::LC_SQUARE; break;\n\t\t\t\t}\n\t\t\t\tpathElement->setStrokeLineCap(captype);\n\t\t\t}\n\t\t\tif (const char *valstr = srcPathElement->getAttributeValue(\"dash\")) {\n\t\t\t\tauto offset = parse_attr_value<double>(srcPathElement, \"dash_phase\");\n\t\t\t\tpathElement->setStrokeDash(valstr, offset);\n\t\t\t}\n\t\t\tif (bbox) {\n\t\t\t\tdouble extent = (linewidth != 0 ? linewidth : 1.0) * matrix_max_extent(matrix);\n\t\t\t\tif (linejoin == SVGElement::LJ_MITER && miterlimit > 1)\n\t\t\t\t\textent *= miterlimit;\n\t\t\t\tbbox->expand(extent);\n\t\t\t}\n\t\t}\n\t}\n\treturn pathElement;\n}\n\n\nstatic const char* attribute_value (const string &attr, XMLElement *elem) {\n\tconst char *val = elem->getAttributeValue(attr);\n\tif (val == nullptr) {\n\t\tif (XMLElement *parent = elem->parent()->toElement())\n\t\t\tval = parent->getAttributeValue(attr);\n\t}\n\treturn val;\n}\n\n\nvoid PDFHandler::doFillPath (XMLElement *trcFillPathElement) {\n\tif (auto pathElement = create_path_element(trcFillPathElement, false)) {\n\t\tif (const char *valstr = attribute_value(\"blendmode\", trcFillPathElement))\n\t\t\tpathElement->setFillOpacity(Opacity::blendMode(valstr));\n\t\tif (const char *valstr = attribute_value(\"alpha\", trcFillPathElement))\n\t\t\tpathElement->setFillOpacity(OpacityAlpha(parse_value<double>(valstr)));\n\t\t_svg->appendToPage(std::move(pathElement));\n\t}\n}\n\n\nvoid PDFHandler::doStrokePath (XMLElement *trcStrokePathElement) {\n\tif (auto pathElement = create_path_element(trcStrokePathElement, true)) {\n\t\tOpacity opacity;\n\t\tif (const char *valstr = attribute_value(\"blendmode\", trcStrokePathElement))\n\t\t\topacity.setBlendMode(Opacity::blendMode(valstr));\n\t\tif (const char *valstr = attribute_value(\"alpha\", trcStrokePathElement))\n\t\t\topacity.strokealpha().setConstAlpha(parse_value<double>(valstr));\n\t\tpathElement->setStrokeOpacity(opacity);\n\t\t_svg->appendToPage(std::move(pathElement));\n\t}\n}\n\n\nvoid PDFHandler::doClipPath (XMLElement *trcClipPathElement) {\n\tif (auto pathElement = create_path_element(trcClipPathElement, false)) {\n\t\tstring id = \"cp\"+to_string(_numClipPath++);\n\t\tauto clipPathElement = util::make_unique<SVGElement>(\"clipPath\");\n\t\tclipPathElement->addAttribute(\"id\", id);\n\t\tauto groupElement = util::make_unique<SVGElement>(\"g\");\n\t\t_clipPathStack.emplace(std::move(id), groupElement.get());\n\t\tgroupElement->setClipPathUrl(_clipPathStack.top().id);\n\t\tclipPathElement->append(std::move(pathElement));\n\t\t_svg->appendToDefs(std::move(clipPathElement));\n\t\t_svg->pushPageContext(std::move(groupElement));\n\t}\n}\n\n\nvoid PDFHandler::doClipStrokePath (XMLElement *trcClipStrokePathElement) {\n\tBoundingBox pathbox;\n\tif (auto pathElement = create_path_element(trcClipStrokePathElement, true, &pathbox)) {\n\t\tpathElement->setStrokeColor(Color::WHITE);\n\t\tstring id = \"cm\"+to_string(_numClipPath++);\n\t\tauto maskElement = util::make_unique<SVGElement>(\"mask\");\n\t\tmaskElement->addAttribute(\"id\", id);\n\t\tmaskElement->addAttribute(\"x\", pathbox.minX());\n\t\tmaskElement->addAttribute(\"y\", pathbox.minY());\n\t\tmaskElement->addAttribute(\"width\", pathbox.width());\n\t\tmaskElement->addAttribute(\"height\", pathbox.height());\n\t\tmaskElement->addAttribute(\"maskUnits\", \"userSpaceOnUse\");\n\t\tmaskElement->append(std::move(pathElement));\n\t\tauto groupElement = util::make_unique<SVGElement>(\"g\");\n\t\tgroupElement->setMaskUrl(id);\n\t\t_clipPathStack.emplace(std::move(id), groupElement.get());\n\t\t_svg->appendToDefs(std::move(maskElement));\n\t\t_svg->pushPageContext(std::move(groupElement));\n\t}\n}\n\n\nvoid PDFHandler::doClipText (XMLElement *trcClipTextElement) {\n\tstring id = \"cp\"+to_string(_numClipPath++);\n\tauto clipPathElement = util::make_unique<SVGElement>(\"clipPath\");\n\tclipPathElement->addAttribute(\"id\", id);\n\tauto groupElement = util::make_unique<SVGElement>(\"g\");\n\t_clipPathStack.emplace(std::move(id), groupElement.get());\n\tgroupElement->setClipPathUrl(_clipPathStack.top().id);\n\tSVGElement *cpElementPtr = clipPathElement.get();\n\t_svg->pushPageContext(std::move(clipPathElement));\n\tdoFillText(trcClipTextElement);\n\t_svg->popPageContext();\n\t_svg->appendToDefs(XMLElement::detach(cpElementPtr));  // move clipPath element from page to defs section\n\t_svg->pushPageContext(std::move(groupElement));\n}\n\n\nvoid PDFHandler::doPopClip (XMLElement*) {\n\tif (!_clipPathStack.empty()) {\n\t\t_svg->popPageContext();\n\t\tif (_clipPathStack.top().groupElement->empty())\n\t\t\tXMLElement::detach(_clipPathStack.top().groupElement);\n\t\t_clipPathStack.pop();\n\t}\n}\n\n\nstatic unique_ptr<SVGElement> create_use_element (double x, double y, const string &refID) {\n\tauto useElement = util::make_unique<SVGElement>(\"use\");\n\tuseElement->addAttribute(\"x\", x);\n\tuseElement->addAttribute(\"y\", y);\n\tuseElement->addAttribute(\"xlink:href\", \"#\"+refID);\n\treturn useElement;\n}\n\n\nvoid PDFHandler::doFillImage (XMLElement *trcFillImageElement) {\n\tif (_numImages < _imgSeq.size()) {\n\t\tauto it = _objDict.find(_imgSeq[_numImages]);\n\t\tif (it != _objDict.end()) {\n\t\t\tstring imgID = \"img\"+to_string(it->second.num)+\"-\"+XXH32HashFunction(_fname).digestString();\n\t\t\tauto w = parse_attr_value<double>(trcFillImageElement, \"width\");\n\t\t\tauto h = parse_attr_value<double>(trcFillImageElement, \"height\");\n\t\t\tauto alpha = parse_attr_value<double>(trcFillImageElement, \"alpha\");\n\t\t\tif (w == 0 || h == 0 || alpha == 0)\n\t\t\t\treturn;\n\t\t\t// add base64 encoding of the image to the defs section if it hasn't been referenced yet\n\t\t\tauto last = _imgSeq.begin()+int(_numImages);\n\t\t\tif (find(_imgSeq.begin(), last, it->first) == last) {\n\t\t\t\tstring fname = it->second.fname;\n\t\t\t\tauto symbolElement = util::make_unique<SVGElement>(\"symbol\");\n\t\t\t\tsymbolElement->addAttribute(\"id\", imgID);\n\t\t\t\tsymbolElement->addAttribute(\"viewBox\", BoundingBox(0, 0, w, h).svgViewBoxString());\n\t\t\t\tauto imgElement = util::make_unique<SVGElement>(\"image\");\n\t\t\t\timgElement->addAttribute(\"width\", parse_attr_value<double>(trcFillImageElement, \"width\"));\n\t\t\t\timgElement->addAttribute(\"height\", parse_attr_value<double>(trcFillImageElement, \"height\"));\n\t\t\t\timgElement->addAttribute(\"@@xlink:href\", \"data:\"+util::mimetype(fname)+\";base64,\"+fname);\n\t\t\t\tsymbolElement->append(std::move(imgElement));\n\t\t\t\t_svg->appendToDefs(std::move(symbolElement));\n\t\t\t}\n\t\t\t// add reference to image\n\t\t\tauto useElement = create_use_element(0, 0, imgID);\n\t\t\tuseElement->setOpacity(OpacityAlpha(alpha));\n\t\t\tMatrix matrix = parse_attr_value<Matrix>(trcFillImageElement, \"transform\");\n\t\t\tmatrix.rmultiply(ScalingMatrix(1/w, 1/h));\n\t\t\tuseElement->setTransform(matrix);\n\t\t\tif (!_clipPathStack.empty())\n\t\t\t\tuseElement->setClipPathUrl(_clipPathStack.top().id);\n\t\t\t_svg->appendToPage(std::move(useElement));\n\t\t}\n\t\t_numImages++;\n\t}\n}\n\n\nstatic string to_utf8 (const string &str) {\n\tif (str.empty())\n\t\treturn \"\";\n\tif (str.front() != '&' || str.back() != ';')\n\t\treturn str;\n\tstring ent = str.substr(1, str.length()-2);\n\tif (ent == \"amp\")  return Unicode::utf8('&');\n\tif (ent == \"apos\") return Unicode::utf8('\\'');\n\tif (ent == \"gt\")   return Unicode::utf8('>');\n\tif (ent == \"lt\")   return Unicode::utf8('<');\n\tif (ent == \"quot\") return Unicode::utf8('\"');\n\tif (ent[0] == '#') {\n\t\ttry {\n\t\t\tint32_t cp;\n\t\t\tcp = (ent[1] == 'x' ? stoi(ent.substr(2), nullptr, 16) : stoi(ent.substr(1)));\n\t\t\treturn Unicode::utf8(cp);\n\t\t}\n\t\tcatch (exception&) {}\n\t}\n\treturn \"\";\n}\n\n\nstatic string strip_subset_prefix (const std::string &fontname) {\n\tauto pos = fontname.find('+');\n\tif (pos != string::npos)\n\t\treturn fontname.substr(pos+1);\n\treturn fontname;\n}\n\n\nstatic string compose_utf8_char (const XMLElement *charElement, int glyph) {\n\tstring utf8 = to_utf8(parse_attr_value<string>(charElement, \"unicode\"));\n\tstring nonlig;\n\tfor (XMLElement *elem=charElement->nextElement(); elem && !elem->hasAttribute(\"glyph\"); elem=elem->nextElement())\n\t\tnonlig += to_utf8(parse_attr_value<string>(elem, \"unicode\"));\n\tif (!nonlig.empty()) {\n\t\tif (uint32_t lig_cp = Unicode::toLigature(utf8+nonlig)) // known Unicode ligature?\n\t\t\tutf8 = Unicode::utf8(lig_cp);\n\t\telse if (glyph <= 0x1900)  // unknown ligature fitting in Private Use Zone?\n\t\t\tutf8 = Unicode::utf8(0xE000+glyph);\n\t\t// TODO: handle unknown ligatures with glyph indices > 0x1900\n\t}\n\treturn utf8;\n}\n\n\nvoid PDFHandler::doFillText (XMLElement *trcFillTextElement) {\n\tfor (const XMLNode *textchild : *trcFillTextElement) {\n\t\tif (const XMLElement *spanElement = textchild->toElement()) {\n\t\t\tauto trm = parse_attr_value<vector<double>>(spanElement, \"trm\");\n\t\t\tif (trm.size() < 4 || trm[0] == 0)\n\t\t\t\tcontinue;\n\t\t\tauto fontname = parse_attr_value<string>(spanElement, \"font\");\n\t\t\tauto it = _objDict.find(fontname);\n\t\t\tif (it == _objDict.end()) {\n\t\t\t\t// try to lookup font without subfont prefix\n\t\t\t\tfontname = strip_subset_prefix(fontname);\n\t\t\t\tit = _objDict.find(fontname);\n\t\t\t}\n\t\t\tstring filename;\n\t\t\tif (it != _objDict.end())\n\t\t\t\tfilename = it->second.fname;\n\t\t\tif (filename.empty())\n\t\t\t\tfilename = \"sys://\"+fontname;\n\t\t\tdouble ptsize = matrix_extent({trm[0], trm[1], 0, trm[2], trm[3]});\n\t\t\tptsize = round(100*ptsize)/100;\n\t\t\tint fontID = FontManager::instance().registerFont(filename, std::move(fontname), ptsize);\n\t\t\tif (fontID >= 0) {\n\t\t\t\tauto font = font_cast<NativeFont*>(FontManager::instance().getFontById(fontID));\n\t\t\t\tif (font != _currentFont) {\n\t\t\t\t\t_svg->setFont(FontManager::instance().fontID(font), *font);\n\t\t\t\t\t_currentFont = font;\n\t\t\t\t\t_svg->setX(0);\n\t\t\t\t\t_svg->setY(0);\n\t\t\t\t\t_x = _y = numeric_limits<double>::max();\n\t\t\t\t}\n\t\t\t\tMatrix fontMatrix({trm[0]/ptsize, -trm[2]/ptsize, 0, trm[1]/ptsize, -trm[3]/ptsize});\n\t\t\t\tMatrix matrix = parse_attr_value<Matrix>(trcFillTextElement, \"transform\");\n\t\t\t\tmatrix.rmultiply(fontMatrix);\n\t\t\t\t_svg->setMatrix(matrix);\n\t\t\t\tfontMatrix.invert();\n\t\t\t\tstring colorspace = parse_attr_value<string>(trcFillTextElement, \"colorspace\");\n\t\t\t\tstring colorval = parse_attr_value<string>(trcFillTextElement, \"color\");\n\t\t\t\t_svg->setFillColor(to_color(colorspace, colorval));\n\t\t\t\tfor (const XMLNode *spanchild : *spanElement) {\n\t\t\t\t\tconst XMLElement *charElement = spanchild->toElement();\n\t\t\t\t\tif (!charElement || charElement->name() != \"g\" || !charElement->hasAttribute(\"glyph\"))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tint glyph;\n\t\t\t\t\tif (font->isCIDFont())\n\t\t\t\t\t\tglyph = parse_attr_value<int>(charElement, \"glyph\");\n\t\t\t\t\telse {\n\t\t\t\t\t\tglyph = font->charIndexByName(parse_attr_value<string>(charElement, \"glyph\"));\n\t\t\t\t\t\tif (glyph == 0)\n\t\t\t\t\t\t\tglyph = parse_attr_value<int>(charElement, \"glyph\");\n\t\t\t\t\t}\n\t\t\t\t\t// determine code point of current character\n\t\t\t\t\tstring utf8;\n\t\t\t\t\tif (charElement->hasAttribute(\"unicode\"))\n\t\t\t\t\t\tutf8 = to_utf8(parse_attr_value<string>(charElement, \"unicode\"));\n\t\t\t\t\tif (utf8.empty())\n\t\t\t\t\t\tutf8 = compose_utf8_char(charElement, glyph);\n\t\t\t\t\tif (glyph == 0 || utf8.empty())\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tDPair p(parse_attr_value<double>(charElement, \"x\"), parse_attr_value<double>(charElement, \"y\"));\n\t\t\t\t\tp = fontMatrix * p;\n\t\t\t\t\tif (abs(_x-p.x()) > 0.2) {_x = p.x(); _svg->setX(_x);}\n\t\t\t\t\tif (abs(_y-p.y()) > 0.2) {_y = p.y(); _svg->setY(_y);}\n\t\t\t\t\tfont->mapCharToUnicode(glyph, Unicode::utf8ToCodepoint(utf8));\n\t\t\t\t\tif (font->verticalLayout())\n\t\t\t\t\t\t_y += font->charHeight(glyph);\n\t\t\t\t\telse\n\t\t\t\t\t\t_x += font->charWidth(glyph);\n\t\t\t\t\t_svg->appendChar(glyph, p.x(), p.y());\n\t\t\t\t\tFontManager::instance().addUsedChar(*font, glyph);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nvoid PDFHandler::doOpenTile (XMLElement *trcTileElement) {\n\tauto patternSymbol = util::make_unique<SVGElement>(\"symbol\");\n\tpatternSymbol->addAttribute(\"id\", \"tile\"+ to_string(_numPatterns));\n\tpatternSymbol->addAttribute(\"style\", \"overflow:visible\");\n\t_svg->pushPageContext(std::move(patternSymbol));\n}\n\n\nstatic unique_ptr<SVGElement> rect_path_elem (const vector<double> &coords) {\n\tGraphicsPath<double> path;\n\tpath.rect(coords[0], coords[1], coords[2], coords[3]);\n\tostringstream oss;\n\tpath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);\n\tauto pathElement = util::make_unique<SVGElement>(\"path\");\n\tpathElement->addAttribute(\"d\", oss.str());\n\treturn pathElement;\n}\n\n\nvoid PDFHandler::doCloseTile (XMLElement *trcTileElement) {\n\t_svg->popPageContext();  // definition of symbol finished\n\tauto xstep = parse_attr_value<double>(trcTileElement, \"xstep\");\n\tauto ystep = parse_attr_value<double>(trcTileElement, \"ystep\");\n\tif (xstep == 0 || ystep == 0)\n\t\treturn;\n\tauto view = parse_attr_value<vector<double>>(trcTileElement, \"view\");\n\tauto patternElement = util::make_unique<SVGElement>(\"pattern\");\n\tpatternElement->addAttribute(\"id\", \"pat\"+ to_string(_numPatterns));\n\tpatternElement->addAttribute(\"x\", 0);\n\tpatternElement->addAttribute(\"y\", 0);\n\tpatternElement->addAttribute(\"width\", xstep);\n\tpatternElement->addAttribute(\"height\", ystep);\n\tpatternElement->addAttribute(\"patternUnits\", \"userSpaceOnUse\");\n\n\tSVGElement *contextElement = patternElement.get();\n\tview.resize(4);\n\tif (view[0] > 0 || view[2] > xstep || view[1] > 0 || view[3] > ystep) {\n\t\tauto clipPathElement = util::make_unique<SVGElement>(\"clipPath\");\n\t\tclipPathElement->addAttribute(\"id\", \"patcp\"+to_string(_numPatterns));\n\t\tauto pathElement = rect_path_elem(view);\n\t\tclipPathElement->append(std::move(pathElement));\n\t\tpatternElement->append(std::move(clipPathElement));\n\n\t\tauto clipGroupElement = util::make_unique<SVGElement>(\"g\");\n\t\tclipGroupElement->setClipPathUrl(\"patcp\"+to_string(_numPatterns));\n\t\tcontextElement = clipGroupElement.get();\n\t\tpatternElement->append(std::move(clipGroupElement));\n\t}\n\tMatrix matrix = parse_attr_value<Matrix>(trcTileElement, \"transform\");\n\tauto transformGroupElement = util::make_unique<SVGElement>(\"g\");\n\ttransformGroupElement->setTransform(matrix);\n\t// Most SVG renderers don't support overflow:visible on patterns. Thus, parts of\n\t// the pattern graphics that lie outside the tile area are clipped. To work around\n\t// this, we place the pattern graphics at all 4 corners of the tile rectangle. This\n\t// way, the outside parts of all quadrants are drawn inside as well so that adjacent\n\t// tiles are enabled to compose the pattern. If the pattern graphics falls completely\n\t// inside the tile area, the additional drawings are empty and thus redundant. For now,\n\t// we keep them anyway.\n\tMatrix invmatrix{matrix.get(0,0), matrix.get(0,1), 0, matrix.get(1,0), matrix.get(1,1)};\n\tinvmatrix.invert();\n\tfor (int i=0; i < 2; i++) {\n\t\tfor (int j=0; j < 2; j++) {\n\t\t\tDPair p = invmatrix * DPair(xstep*i, ystep*j);\n\t\t\ttransformGroupElement->append(create_use_element(p.x(), p.y(), \"tile\"+to_string(_numPatterns)));\n\t\t}\n\t}\n\tcontextElement->append(std::move(transformGroupElement));\n\t_svg->appendToPage(std::move(patternElement));\n\tauto area = parse_attr_value<vector<double>>(trcTileElement, \"area\");\n\tarea.resize(4);\n\tauto pathElement = rect_path_elem(area);\n\tpathElement->setFillPatternUrl(\"pat\"+to_string(_numPatterns));\n\tpathElement->setTransform(matrix);\n\t_svg->appendToPage(std::move(pathElement));\n\t_numPatterns++;\n}\n\n\nvoid PDFHandler::collectObjects () {\n\tstring tmpdir = FileSystem::tmpdir();\n\t_objDict = parse_pdf_dict<ObjID>(mtShow(\"pages/\" + to_string(_pageno) + \"/Resources/XObject\"));\n\t// replace referenced font IDs by actual IDs used for extracted fonts\n\tfor (auto &entry : _objDict) {\n\t\t// store filenames of non-font object in object map\n\t\tauto fnameIt = _extractedFiles.find(entry.second.num);\n\t\tentry.second.fname = fnameIt != _extractedFiles.end() ? tmpdir+fnameIt->second : \"\";\n\t}\n\tfor (auto &entry : _extractedFiles) {\n\t\tif (entry.second.substr(0, 5) == \"font-\") {\n\t\t\tstring filepath = tmpdir+entry.second;  // path to font file\n\t\t\tstring psFontname = FontEngine::instance().getPSName(filepath);\n\t\t\tstring fontname = mtShow(to_string(entry.first) + \"/FontName\", SearchPattern(R\"(/((\\w|[+-])+))\", \"$1\"));\n\t\t\tif (!psFontname.empty() && fontname.find('+') == string::npos)\n\t\t\t\tfontname = std::move(psFontname);\n\t\t\t_objDict.emplace(fontname, ObjID(entry.first, 0, std::move(filepath)));\n\t\t}\n\t}\n}\n\n///////////////////////////////////////////////////////////////////////////////\n\nstring PDFHandler::mutool (const string &cmd, bool readFromStderr) {\n\tstring out;\n\tProcess(\"mutool\", cmd).run(&out, readFromStderr ? Process::PF_STDERR : Process::PF_STDOUT);\n\treturn out;\n}\n\n\nstring PDFHandler::mutool (const string &cmd, const SearchPattern &pattern, bool readFromStderr) {\n\tstring out;\n\tProcess(\"mutool\", cmd).run(&out, pattern, readFromStderr ? Process::PF_STDERR : Process::PF_STDOUT);\n\treturn out;\n}\n\n\nstring PDFHandler::mtExtract (const string &fname, const SearchPattern &pattern) {\n\treturn mutool(\"extract -a \"+fname, pattern);\n}\n\n\n/** Calls \"mutool show\" to retrieve select data from a PDF file.\n *  @param[in] fname name of PDF file\n *  @param[in] path path expression locating the requested data\n *  @param[in] fmtmode flag specifying the output format\n *  @return mutool output, result of the query */\nstring PDFHandler::mtShow (const string &fname, const string &path, char fmtmode) {\n\tstring cmd = \"show -\";\n\tcmd += fmtmode;\n\tcmd += \" \" + fname + \" \" + path;\n\treturn mutool(cmd);\n}\n\n\nstring PDFHandler::mtShow (const string &fname, const string &path, const SearchPattern &pattern, char fmtmode) {\n\tstring cmd = \"show -\";\n\tcmd += fmtmode;\n\tcmd += \" \" + fname + \" \" + path;\n\treturn mutool(cmd, pattern);\n}\n\n#if 0\nint main (int argc, char *argv[]) {\n\tif (argc < 2)\n\t\treturn 0;\n\tSVGTree::USE_FONTS=true;\n\tSVGTree::FONT_FORMAT = FontWriter::FontFormat::SVG;\n\tSVGTree svg;\n\tPDFHandler page(svg);\n\tpage.convert(argv[1], argc > 2 ? stoi(argv[2]) : 1);\n\tsvg.write(cout);\n}\n#endif\n"
  },
  {
    "path": "src/PDFHandler.hpp",
    "content": "/*************************************************************************\n** PDFHandler.hpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PDFHANDLER_HPP\n#define PDFHANDLER_HPP\n\n#include <map>\n#include <string>\n#include \"BoundingBox.hpp\"\n#include \"Process.hpp\"\n#include \"SVGTree.hpp\"\n\nclass XMLElement;\n\nclass PDFHandler {\n\tpublic:\n\t\tstruct ObjID {\n\t\t\tObjID () : num(-1), gen(0) {}\n\t\t\tObjID (int number, int generation) : num(number), gen(generation) {}\n\t\t\tObjID (int number, int generation, std::string filename) : num(number), gen(generation), fname(std::move(filename)) {}\n\t\t\tbool valid () const {return num >= 0;}\n\t\t\tint num, gen;  ///< object and generation number\n\t\t\tstd::string fname;\n\t\t};\n\n\tprotected:\n\t\tstruct ClipPathData {\n\t\t\tClipPathData (std::string cpid, SVGElement *group) : id(std::move(cpid)), groupElement(group) {}\n\t\t\tstd::string id;\n\t\t\tSVGElement *groupElement;\n\t\t};\n\n\tpublic:\n\t\tPDFHandler () =default;\n\t\texplicit PDFHandler (SVGTree &svg) : _svg(&svg) {}\n\t\tPDFHandler (const PDFHandler &page) =delete;\n\t\tPDFHandler (PDFHandler &&page) =delete;\n\t\t~PDFHandler ();\n\t\tvoid assignSVGTree (SVGTree &svg) {_svg = &svg;}\n\t\tconst BoundingBox& bbox () const {return _bbox;}\n\t\tstd::unique_ptr<SVGElement> convert (const std::string &fname, int pageno, std::unique_ptr<SVGElement> context=nullptr);\n\t\tstatic std::string mutoolVersion ();\n\t\tstatic bool available () {return !mutoolVersion().empty();}\n\t\tstatic int numberOfPages (const std::string &fname);\n\n\tprotected:\n\t\tstatic std::string mutool (const std::string &cmd, bool readFromStderr=false);\n\t\tstatic std::string mutool (const std::string &cmd, const SearchPattern &pattern, bool readFromStderr=false);\n\t\tstatic std::string mtExtract (const std::string &fname, const SearchPattern &pattern);\n\t\tstatic std::string mtShow (const std::string &fname, const std::string &path, char fmtmode= 'b');\n\t\tstatic std::string mtShow (const std::string &fname, const std::string &path, const SearchPattern &pattern, char fmtmode= 'b');\n\t\tstd::string mtShow (const std::string &path, char fmtmode= 'b') const {return mtShow(_fname, path, fmtmode);}\n\t\tstd::string mtShow (const std::string &path, const SearchPattern &pattern, char fmtmode= 'b') const {\n\t\t\treturn mtShow(_fname, path, pattern, fmtmode);\n\t\t}\n\t\tvoid initFile (const std::string &fname);\n\t\tvoid finishFile ();\n\t\tvoid initPage (int pageno, std::unique_ptr<SVGElement> context);\n\t\tstd::unique_ptr<SVGElement> finishPage ();\n\t\tvoid collectObjects ();\n\t\tvoid elementOpened (XMLElement *trcElement);\n\t\tvoid elementClosed (XMLElement *trcElement);\n\t\tvoid doPage (XMLElement *trcPageElement);\n\t\tvoid doClipPath (XMLElement *trcClipPathElement);\n\t\tvoid doClipStrokePath (XMLElement *trcClipStrokePathElement);\n\t\tvoid doClipText (XMLElement *trcClipTextElement);\n\t\tvoid doPopClip (XMLElement *trcPopClipElement);\n\t\tvoid doFillPath (XMLElement *trcFillPathElement);\n\t\tvoid doStrokePath (XMLElement *trcStrokePathElement);\n\t\tvoid doFillImage (XMLElement *trcFillImageElement);\n\t\tvoid doFillText (XMLElement *trcFillTextElement);\n\t\tvoid doOpenTile (XMLElement *trcTileElement);\n\t\tvoid doCloseTile (XMLElement *trcTileElement);\n\n\tprivate:\n\t\tstd::string _fname;\n\t\tint _pageno=0;\n\t\tint _numPages=0;\n\t\tstd::map<int,std::string> _extractedFiles;\n\t\tstd::map<std::string,ObjID> _objDict;    ///< object names => object IDs\n\t\tstd::vector<std::string> _imgSeq;\n\t\tNativeFont *_currentFont=nullptr;        ///< currently selected font\n\t\tsize_t _numClipPath=0; ///< number of clipping paths processed\n\t\tsize_t _numImages=0;   ///< number of embedded images already processed\n\t\tsize_t _numPatterns=0; ///< number of patterns processed\n\t\tstd::stack<ClipPathData> _clipPathStack;\n\t\tdouble _x=0, _y=0;     ///< current character position\n\t\tBoundingBox _bbox;     ///< bounding box of current/last page processed\n\t\tSVGTree *_svg=nullptr;\n\t\tXMLElement *_context=nullptr; ///< node holding the generated page contents\n};\n\n#endif\n"
  },
  {
    "path": "src/PDFParser.cpp",
    "content": "/*************************************************************************\n** PDFParser.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cctype>\n#include <istream>\n#include <ostream>\n#include <sstream>\n#include <stdexcept>\n#include \"InputReader.hpp\"\n#include \"PDFParser.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\n/** Parses PDF from an input stream and returns the corresponding object representation.\n *  @param[in] is input stream the PDF data is read from\n *  @param[in] opHandler handler used to treat PDF operators\n *  @return the parsed objects */\nvector<PDFObject> PDFParser::parse (std::istream &is, const PDFOperatorHandler &opHandler) {\n\tStreamInputReader ir(is);\n\treturn parse(ir, opHandler);\n}\n\n\n/** Parses PDF from a string and returns the corresponding object representation.\n *  @param[in] str string that contains the PDF data\n *  @param[in] opHandler handler used to treat PDF operators\n *  @return the parsed objects */\nvector<PDFObject> PDFParser::parse (const std::string &str, const PDFOperatorHandler &opHandler) {\n\tistringstream iss(str);\n\treturn parse(iss, opHandler);\n}\n\n\n/** Parses PDF from an InputReader object and returns the corresponding object representation.\n *  @param[in] ir InputReader the PDF data is read from\n *  @param[in] opHandler handler used to treat PDF operators\n *  @return the parsed objects */\nvector<PDFObject> PDFParser::parse (InputReader &ir, const PDFOperatorHandler &opHandler) {\n\tvector<PDFObject> objects;\n\twhile (!ir.eof()) {\n\t\tir.skipSpace();\n\t\tif (ir.peek() == '%')  // comment?\n\t\t\twhile (ir.get() != '\\n' && !ir.eof());\n\t\telse if (!ir.eof())\n\t\t\tparse(ir, objects, opHandler);\n\t}\n\treturn objects;\n}\n\n\n/** Default handler for PDF operators. Just adds the operators to the\n *  object vector without evaluating them.\n *  @param[in] opname name of the operator\n *  @param[in,out] objects vector holding the parsed objects */\nstatic void append_operator (const string &opname, vector<PDFObject> &objects) {\n\tobjects.emplace_back(PDFOperator(opname));\n}\n\n\n/** Parses PDF from an input stream and returns the corresponding object representation.\n *  @param[in] is input stream the PDF data is read from\n *  @return the parsed objects */\nvector<PDFObject> PDFParser::parse (std::istream &is) {\n\treturn parse(is, append_operator);\n}\n\n\n/** Parses PDF from a string and returns the corresponding object representation.\n *  @param[in] str string that contains the PDF data\n *  @return the parsed objects */\nvector<PDFObject> PDFParser::parse (const std::string &str) {\n\treturn parse(str, append_operator);\n}\n\n/** Parses PDF from an InputReader object and returns the corresponding object representation.\n *  @param[in] ir InputReader the PDF data is read from\n *  @return the parsed objects */\nvector<PDFObject> PDFParser::parse (InputReader &ir) {\n\treturn parse(ir, append_operator);\n}\n\n\n/** Parses PDF from an InputReader object and appends the recognized objects to a vector.\n *  @param[in] ir InputReader the PDF data is read from\n *  @param[in,out] objects the parsed PDF objects are appended to this vector\n *  @return the parsed objects */\nvoid PDFParser::parse (InputReader &ir, vector<PDFObject> &objects) {\n\tparse(ir, objects, append_operator);\n}\n\n\ninline bool isoctaldigit (int c) {return c >= '0' && c <= '7';}\n\n/** Parses a PDF escape sequence of the form \\FOO, where FOO is a single\n *  character or a sequence of 1-3 octal digits\n *  @return pair (s,c), s=true if c contains a parsed character */\nstatic pair<bool,int> parse_escape_seq (InputReader &ir) {\n\t// leading backslash has already been read\n\tif (isoctaldigit(ir.peek())) {\n\t\tstring str;\n\t\tfor (int i=0; i < 3 && isoctaldigit(ir.peek()); i++)\n\t\t\tstr += static_cast<char>(ir.get());\n\t\treturn pair<bool,int>{true, stoi(str, nullptr, 8)};\n\t}\n\tchar c = static_cast<char>(ir.get());\n\tswitch (c) {\n\t\tcase 'n': c = '\\n'; break;\n\t\tcase 'r': c = '\\r'; break;\n\t\tcase 't': c = '\\t'; break;\n\t\tcase 'b': c = '\\b'; break;\n\t\tcase 'f': c = '\\f'; break;\n\t\tcase '\\n':\n\t\tcase '\\r':\n\t\t\tif ((c == '\\n' && ir.peek() == '\\r') || (c == '\\r' && ir.peek() == '\\n'))\n\t\t\t\tir.get();\n\t\t\treturn pair<bool,int>{false, 0};\n\t}\n\treturn pair<bool,int>{true, c};\n}\n\n\n/** Parses a literal PDF string of the form (FOO). */\nstatic string parse_literal_string (InputReader &ir) {\n\tstring str;\n\tir.get();  // skip initial '('\n\tint open_parens=1;\n\twhile (ir.peek() >= 0 && open_parens > 0) {\n\t\tif (ir.peek() == '\\n' || ir.peek() == '\\r')\n\t\t\tbreak;\n\t\tint c = ir.get();\n\t\tswitch (c) {\n\t\t\tcase '(': open_parens++; break;\n\t\t\tcase ')': open_parens--; break;\n\t\t\tcase '\\\\':\n\t\t\t\tpair<bool,int> state = parse_escape_seq(ir);\n\t\t\t\tc = state.first ? state.second : -1;\n\t\t\t\tbreak;\n\t\t}\n\t\tif (open_parens > 0 && c >= 0)\n\t\t\tstr += static_cast<char>(c);\n\t}\n\tif (open_parens > 0)\n\t\tthrow PDFException(\"missing ')' at end of literal string\");\n\treturn str;\n}\n\n\n/** Gets a single hex digit from the InputReader. */\nstatic char get_hex_digit (InputReader &ir) {\n\tint c = ir.get();\n\tif (isxdigit(c))\n\t\treturn char(c);\n\tthrow PDFException(\"invalid hexadecimal digit '\" + string(1, char(c)) + \"'\");\n}\n\n\n/** Parses a PDF hex string of the form <FOO>, where FOO is a sequence of\n *  hex digits optionally separated by whitespace. */\nstatic string parse_hex_string (InputReader &ir) {\n\t// initial '<' has already been read\n\tstring str;\n\tir.skipSpace();\n\twhile (ir.peek() > 0 && ir.peek() != '>') {\n\t\tstring hexpair;\n\t\thexpair += get_hex_digit(ir);\n\t\tir.skipSpace();\n\t\tif (ir.peek() > 0 && ir.peek() != '>')\n\t\t\thexpair += get_hex_digit(ir);\n\t\telse if (ir.peek() == '>')\n\t\t\thexpair += '0';\n\t\tir.skipSpace();\n\t\tstr += static_cast<char>(stoi(hexpair, nullptr, 16));\n\t}\n\tif (ir.peek() != '>')\n\t\tthrow PDFException(\"missing '>' at end of hexadecimal string\");\n\tir.get();  // skip closing '>'\n\treturn str;\n}\n\n\nusing NumberVariant = mpark::variant<int, double>;\n\n/** Parses a PDF number from a string. The number is either integer or real.\n *  @param[in] str string to parse\n *  @param[out] nv variant holding the numeric value\n *  @return true if entire string has been parsed successfully */\nstatic bool parse_number (const string &str, NumberVariant &nv) {\n\tif (str.empty())\n\t\treturn false;\n\ttry {\n\t\tauto dotpos = str.find('.');\n\t\tif (dotpos == string::npos) {      // not a real number?\n\t\t\tsize_t count;\n\t\t\tnv = NumberVariant(stoi(str, &count, 10));  // then try to convert str to int\n\t\t\treturn count == str.length();  // successful only if all characters have been processed\n\t\t}\n\t\tstring postdot = str.substr(dotpos+1);\n\t\t// ensure signless integer after dot to exclude exponental notation\n\t\t// which is not allowed in PDF real number constants\n\t\tif (!postdot.empty() && isdigit(postdot[0])) {\n\t\t\tsize_t count;\n\t\t\tstatic_cast<void>(stoi(postdot, &count, 10));\n\t\t\tif (count != postdot.length())\n\t\t\t\treturn false;\n\t\t}\n\t\tsize_t count;\n\t\tnv = NumberVariant(stod(str, &count));\n\t\treturn count == str.length();\n\t}\n\tcatch (invalid_argument &) {\n\t\treturn false;\n\t}\n}\n\n\n/** Parses a PDF array from the input stream and returns a corresponding object. */\nPDFArray PDFParser::parseArray (InputReader &ir, const PDFOperatorHandler &opHandler) {\n\tir.get();  // skip '['\n\tvector<PDFObject> localObjects;\n\twhile (!ir.eof() && ir.peek() != ']')\n\t\tparse(ir, localObjects, opHandler);\n\tir.skipSpace();\n\tif (ir.peek() != ']')\n\t\tthrow PDFException(\"missing ']' at end of array\");\n\tir.get();\n\tPDFArray arr;\n\tstd::move(localObjects.begin(), localObjects.end(), back_inserter(arr));\n\treturn arr;\n}\n\n\n/** Parses a PDF dictionary from the input stream and returns a corresponding object.\n *  The function expects that the first opening angle bracket denoting the start of an\n *  dictionary has already been swallowed from the stream. */\nPDFDict PDFParser::parseDict (InputReader &ir, const PDFOperatorHandler &opHandler) {\n\tir.get();  // skip second \"<\"\n\tvector<PDFObject> localObjects;\n\twhile (!ir.eof() && ir.peek() != '>')\n\t\tparse(ir, localObjects, opHandler);\n\tif (ir.getString(2) != \">>\")\n\t\tthrow PDFException(\"missing '>>' at end of dictionary\");\n\tPDFDict dict;\n\tfor (auto it=localObjects.begin(); it != localObjects.end(); ++it) {\n\t\tif (!it->get<PDFName>())\n\t\t\tthrow PDFException(\"name key expected in dictionary\");\n\t\tconst PDFName &key = *it->get<PDFName>();\n\t\tif (++it == localObjects.end())\n\t\t\tthrow PDFException(string(\"missing dictionary value for key '\")+key.str+\"'\");\n\t\tdict.emplace(key.str, std::move(*it));\n\t}\n\treturn dict;\n}\n\n\nstatic PDFStream parse_stream (InputReader &ir, const char *delim) {\n\tdo\n\t\tir.skipUntil(\"endstream\");\n\twhile (ir.peek() >= 0 && !strchr(delim, ir.peek()));  // ensure delimiter after \"endstream\"\n\treturn {};\n}\n\n\nstatic PDFIndirectObject parse_indirect_object (InputReader &ir, const char *delim, vector<PDFObject> &objects) {\n\tdo\n\t\tir.skipUntil(\"endobj\");\n\twhile (ir.peek() >= 0 && !strchr(delim, ir.peek()));  // ensure delimiter after \"endobj\"\n\tif (objects.size() >= 2) {\n\t\tconst int *genno = objects.back().get<int>();\n\t\tobjects.pop_back();\n\t\tconst int *objno = objects.back().get<int>();\n\t\tobjects.pop_back();\n\t\tif (objno && genno)\n\t\t\treturn {*objno, *genno};\n\t}\n\tthrow PDFException(\"object and generation number expected before 'obj'\");\n}\n\n\nstatic PDFObjectRef parse_object_ref (vector<PDFObject> &objects) {\n\tif (objects.size() >= 2) {\n\t\tconst int *genno = objects.back().get<int>();\n\t\tobjects.pop_back();\n\t\tconst int *objno = objects.back().get<int>();\n\t\tobjects.pop_back();\n\t\tif (objno && genno)\n\t\t\treturn {*objno, *genno};\n\t}\n\tthrow PDFException(\"object and generation number expected before 'R'\");\n}\n\n\n/** Replaces all occurrences of \"#XX\" (XX are two hex digits) with the corresponding character. */\nstatic string& subst_numeric_chars (string &str) {\n\tfor (auto pos=str.find('#'); pos != string::npos; pos=str.find('#', pos+1)) {\n\t\tif (pos > str.length()-3)\n\t\t\tthrow PDFException(\"sign character # must be followed by two hexadecimal digits\");\n\t\tif (isxdigit(str[pos+1]) && isxdigit(str[pos+2])) {\n\t\t\tint c = stoi(str.substr(pos+1, 2), nullptr, 16);\n\t\t\tif (c == 0)\n\t\t\t\tthrow PDFException(\"null character not permitted in name\");\n\t\t\tstr.replace(pos, 3, 1, static_cast<char>(c));\n\t\t}\n\t\telse\n\t\t\tthrow PDFException(\"sign character # must be followed by two hexadecimal digits\");\n\t}\n\treturn str;\n}\n\n\n/** Parses a single PDF object from an InputReader object.\n *  @param[in,out] ir reader object to read the PDF data from\n *  @param[out] objects the parsed object is appended to this vector\n *  @param[in] opHandler handler used to treat PDF operators\n *  @throws PDFException on failure */\nvoid PDFParser::parse (InputReader &ir, vector<PDFObject> &objects, const PDFOperatorHandler &opHandler) {\n\tstatic const char *delim = \"()<>[]{}/% \\t\\n\\r\\f\";\n\tir.skipSpace();\n\tif (ir.peek() < 0)\n\t\treturn;\n\tswitch (ir.peek()) {\n\t\tcase '(':\n\t\t\tobjects.emplace_back(parse_literal_string(ir));\tbreak;\n\t\tcase '[':\n\t\t\tobjects.emplace_back(util::make_unique<PDFArray>(parseArray(ir, opHandler))); break;\n\t\tcase '<':\n\t\t\tir.get();\n\t\t\tif (ir.peek() != '<')\n\t\t\t\tobjects.emplace_back(parse_hex_string(ir));\n\t\t\telse\n\t\t\t\tobjects.emplace_back(util::make_unique<PDFDict>(parseDict(ir, opHandler)));\n\t\t\tbreak;\n\t\tcase '/': {\n\t\t\tir.get();\n\t\t\tstring name = ir.getString(delim);\n\t\t\tobjects.emplace_back(PDFName(subst_numeric_chars(name)));\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tstring str = ir.getString(delim);\n\t\t\tif (str.empty())\n\t\t\t\tbreak;\n\t\t\tif (str == \"null\")\n\t\t\t\tobjects.emplace_back(PDFNull());\n\t\t\telse if (str == \"true\")\n\t\t\t\tobjects.emplace_back(true);\n\t\t\telse if (str == \"false\")\n\t\t\t\tobjects.emplace_back(false);\n\t\t\telse if (str == \"stream\")\n\t\t\t\tobjects.emplace_back(parse_stream(ir, delim));\n\t\t\telse if (str == \"obj\")\n\t\t\t\tobjects.emplace_back(parse_indirect_object(ir, delim, objects));\n\t\t\telse if (str == \"R\")\n\t\t\t\tobjects.emplace_back(parse_object_ref(objects));\n\t\t\telse {\n\t\t\t\tNumberVariant number;\n\t\t\t\tif (!parse_number(str, number))\n\t\t\t\t\topHandler(str, objects);\n\t\t\t\telse {\n\t\t\t\t\tif (mpark::get_if<int>(&number))\n\t\t\t\t\t\tobjects.emplace_back(mpark::get<int>(number));\n\t\t\t\t\telse\n\t\t\t\t\t\tobjects.emplace_back(mpark::get<double>(number));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n//////////////////////////////////////////////////////////////////////////\n\nstruct ToDoubleVisitor {\n\ttemplate <typename V>\n\tdouble operator () (const V &val) {return 0;}\n};\n\ntemplate<> double ToDoubleVisitor::operator () (const int &val)    {return static_cast<double>(val);}\ntemplate<> double ToDoubleVisitor::operator () (const double &val) {return val;}\ntemplate<> double ToDoubleVisitor::operator () (const string &val) {\n\ttry {\n\t\treturn stod(val);\n\t}\n\tcatch (exception &) {\n\t\treturn 0;\n\t}\n}\n\n\nPDFObject::operator double () const {\n\treturn mpark::visit(ToDoubleVisitor(), _value);\n}\n\n\nPDFObject::operator std::string () const {\n\tostringstream oss;\n\toss << *this;\n\treturn oss.str();\n}\n\n\nstatic std::ostream& operator << (std::ostream &os, const PDFName &name) {return os << name.str;}\nstatic ostream& operator << (ostream &os, const PDFNull&) {return os << \"null\";}\nstatic ostream& operator << (ostream &os, const PDFStream&) {return os << \"stream\";}\nstatic ostream& operator << (ostream &os, const PDFOperator &op) {return os << op.opname;}\n\nstatic ostream& operator << (ostream &os, const PDFIndirectObject &obj) {\n\treturn os << \"obj(\" << obj.objnum << \", \" << obj.gennum << ')';\n}\n\n\nstatic ostream& operator << (ostream &os, const PDFObjectRef &ref) {\n\treturn os << \"obj(\" << ref.objnum << \", \" << ref.gennum << ')';\n}\n\n\nstatic ostream& operator << (ostream &os, const unique_ptr<vector<PDFObject>> &val) {\n\tos << '[';\n\tfor (auto it=val->begin(); it != val->end(); ++it) {\n\t\tif (it != val->begin())\n\t\t\tos << \", \";\n\t\tit->write(os);\n\t}\n\tos << ']';\n\treturn os;\n}\n\n\nstatic ostream& operator << (ostream &os, const unique_ptr<Dictionary<string,PDFObject>> &val) {\n\tos << \"<<\";\n\tfor (auto it=val->begin(); it != val->end(); ++it) {\n\t\tif (it != val->begin())\n\t\t\tos << \", \";\n\t\tos << it->first << ':' << it->second;\n\t}\n\tos << \">>\";\n\treturn os;\n}\n\n\nstruct WriteVisitor {\n\texplicit WriteVisitor (ostream &os) : _os(os) {}\n\ttemplate <typename T> void operator () (const T &val) {_os << val;}\n\tostream &_os;\n};\n\n\nvoid PDFObject::write (ostream &os) const {\n\tmpark::visit(WriteVisitor(os), _value);\n}\n"
  },
  {
    "path": "src/PDFParser.hpp",
    "content": "/*************************************************************************\n** PDFParser.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PDFPARSER_HPP\n#define PDFPARSER_HPP\n\n#include <initializer_list>\n#include <istream>\n#include <functional>\n#include <map>\n#include <memory>\n#include <string>\n#include <unordered_map>\n#include <utility>\n#include <vector>\n#include <mpark/variant.hpp>\n#include \"MessageException.hpp\"\n\ntemplate <typename K, typename V>\nclass Dictionary {\n\tusing Map = std::map<K, V>;\n\n\tpublic:\n\t\ttypename Map::const_iterator begin () const {return _map.begin();}\n\t\ttypename Map::const_iterator end () const   {return _map.end();}\n\t\ttypename Map::iterator begin () {return _map.begin();}\n\t\ttypename Map::iterator end ()   {return _map.end();}\n\t\ttypename Map::const_iterator find (const K &key) const {return _map.find(key);}\n\t\tbool empty () const {return _map.empty();}\n\t\tbool exists (const K &key) const {return _map.find(key) != _map.end();}\n\t\tsize_t size () const {return _map.size();}\n\n\t\tconst V* get (const K &key) const {\n\t\t\tauto it = _map.find(key);\n\t\t\tif (it != _map.end())\n\t\t\t\treturn &it->second;\n\t\t\treturn nullptr;\n\t\t}\n\n\t\tstd::pair<typename Map::iterator,bool> emplace (const K &key, V &&value) {\n\t\t\treturn _map.emplace(key, static_cast<V&&>(value));\n\t\t}\n\n\tprivate:\n\t\tMap _map;\n};\n\n//////////////////////////////////////////////////////////////////////////\n// PDF object types\n\nstruct PDFNull {};\nstruct PDFStream {};\n\nstruct PDFIndirectObject {\n\tPDFIndirectObject (int n, int gen) : objnum(n), gennum(gen) {}\n\tint objnum, gennum;\n};\n\nstruct PDFObjectRef {\n\tPDFObjectRef (int n, int gen) : objnum(n), gennum(gen) {}\n\tint objnum, gennum;\n};\n\nstruct PDFOperator {\n\texplicit PDFOperator (std::string name) : opname(std::move(name)) {}\n\tstd::string opname;\n};\n\nstruct PDFName {\n\texplicit PDFName (std::string val) : str(std::move(val)) {}\n\tbool operator == (const PDFName &name) const {return str == name.str;}\n\tstd::string str;\n};\n\nclass PDFObject;\n\nusing PDFArray = std::vector<PDFObject>;\nusing PDFDict = Dictionary<std::string, PDFObject>;\n\n//////////////////////////////////////////////////////////////////////////\n\n/** This class represents a single variadic PDF object. */\nclass PDFObject {\n\tusing Value = mpark::variant<\n\t\tPDFNull,\n\t\tbool,\n\t\tint,\n\t\tdouble,\n\t\tPDFName,\n\t\tPDFStream,\n\t\tPDFIndirectObject,\n\t\tPDFObjectRef,\n\t\tPDFOperator,\n\t\tstd::string,\n\t\tstd::unique_ptr<PDFArray>,\n\t\tstd::unique_ptr<PDFDict>\n\t>;\n\n\tpublic:\n\t\tPDFObject () : _value(0) {}\n\n\t\ttemplate <typename T>\n\t\texplicit PDFObject (T &&value) : _value(std::forward<T>(value)) {}\n\n\t\texplicit PDFObject (const char *value) : _value(std::string(value)) {}\n\t\texplicit operator std::string () const;\n\t\texplicit operator double () const;\n\n\t\ttemplate <typename T>\n\t\tconst T* get () const {return mpark::get_if<T>(&_value);}\n\n\t\tvoid write (std::ostream &os) const;\n\n\tprivate:\n\t\tValue _value;\n};\n\n\ntemplate<> inline const PDFArray* PDFObject::get() const {\n\tif (auto p = mpark::get_if<std::unique_ptr<PDFArray>>(&_value))\n\t\treturn &(**p);\n\treturn nullptr;\n}\n\n\ntemplate<> inline const PDFDict* PDFObject::get() const {\n\tif (auto p = mpark::get_if<std::unique_ptr<PDFDict>>(&_value))\n\t\treturn &(**p);\n\treturn nullptr;\n}\n\n\ninline std::ostream& operator << (std::ostream &os, const PDFObject &obj) {\n\tobj.write(os);\n\treturn os;\n}\n\n//////////////////////////////////////////////////////////////////////////\n\nclass InputReader;\n\nclass PDFParser {\n\tpublic:\n\t\tusing PDFOperatorHandler = std::function<void (const std::string&, std::vector<PDFObject>&)>;\n\n\tpublic:\n\t\tstd::vector<PDFObject> parse (std::istream &is);\n\t\tstd::vector<PDFObject> parse (const std::string &str);\n\t\tstd::vector<PDFObject> parse (InputReader &ir);\n\t\tvoid parse (InputReader &ir, std::vector<PDFObject> &objects);\n\n\t\tstd::vector<PDFObject> parse (std::istream &is, const PDFOperatorHandler &opHandler);\n\t\tstd::vector<PDFObject> parse (const std::string &str, const PDFOperatorHandler &opHandler);\n\t\tstd::vector<PDFObject> parse (InputReader &ir, const PDFOperatorHandler &opHandler);\n\t\tvoid parse (InputReader &ir, std::vector<PDFObject> &objects, const PDFOperatorHandler &opHandler);\n\n\tprotected:\n\t\tPDFArray parseArray (InputReader &ir, const PDFOperatorHandler &opHandler);\n\t\tPDFDict parseDict (InputReader &ir, const PDFOperatorHandler &opHandler);\n};\n\n\n/** If errors occur while parsing a sequence of PDF objects, an instance of this exception is thrown. */\nstruct PDFException : MessageException {\n\texplicit PDFException (const std::string &msg) : MessageException(msg) {}\n};\n\n#endif\n"
  },
  {
    "path": "src/PDFToSVG.cpp",
    "content": "/*************************************************************************\n** PDFToSVG.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstdlib>\n#include \"Message.hpp\"\n#include \"PDFToSVG.hpp\"\n\nusing namespace std;\n\n\nPDFToSVG::PDFToSVG (const string &fname, SVGOutputBase &out) : ImageToSVG(fname, out) {\n\t_useGS = (gsVersion() > 0 && gsVersion() < 10010);\n\tif (const char *pdfproc = getenv(\"DVISVGM_PDF_PROC\")) {\n\t\tif (strcmp(pdfproc, \"gs\") == 0)\n\t\t\t_useGS = true;\n\t\telse if (strcmp(pdfproc, \"mutool\") == 0)\n\t\t\t_useGS = false;\n\t}\n\tif (!_useGS)\n\t\t_pdfHandler.assignSVGTree(_svg);\n\n\tifstream ifs(filename());\n\tif (ifs) {\n\t\tstring buf(5, 0);\n\t\tifs.read(&buf[0], 5);\n\t\tif (buf == \"%PDF-\") {\n\t\t\tint major=0, minor=0;\n\t\t\tifs >> major;\n\t\t\tif (ifs.get() == '.')\n\t\t\t\tifs >> minor;\n\t\t\telse\n\t\t\t\tmajor = 0;  // missing dot => invalid PDF version\n\t\t\t_pdfVersion = major*100 + minor;\n\t\t}\n\t}\n}\n\n\nvoid PDFToSVG::checkGSAndFileFormat () {\n\tif (_useGS)\n\t\tImageToSVG::checkGSAndFileFormat();\n\telse {\n\t\tif (!PDFHandler::available()) {\n\t\t\tif (gsVersion() > 0) {\n\t\t\t\tostringstream oss;\n\t\t\t\toss << \"To process PDF files, either Ghostscript < 10.01.0 or mutool is required.\\n\";\n\t\t\t\toss << \"The installed Ghostscript version \" << Ghostscript().revisionstr() << \" is not supported.\\n\";\n\t\t\t\tthrow MessageException(oss.str());\n\t\t\t}\n\t\t}\n\t}\n\tif (!imageIsValid())\n\t\tthrow MessageException(\"invalid \"+imageFormat()+\" file\");\n}\n\n\n/** Returns the total number of pages in the PDF file. */\nint PDFToSVG::totalPageCount () const {\n\tif (_totalPageCount < 0) {\n\t\tif (_useGS)\n\t\t\t_totalPageCount = psInterpreter().pdfPageCount(filename());\n\t\telse\n\t\t\t_totalPageCount = PDFHandler::numberOfPages(filename());\n\t\tif (_totalPageCount < 1)\n\t\t\tthrow MessageException(\"can't retrieve number of pages from file \" + filename());\n\t}\n\treturn _totalPageCount;\n}\n\n\nbool PDFToSVG::imageIsValid () const {\n\treturn _pdfVersion > 0;\n}\n\n\nvoid PDFToSVG::convert (int pageno) {\n\tif (_useGS)\n\t\tImageToSVG::convert(pageno);\n\telse {\n\t\tMessage::mstream().indent(0);\n\t\tMessage::mstream(false, Message::MC_PAGE_NUMBER) << \"processing page \" << pageno << \"\\n\";\n\t\tMessage::mstream().indent(1);\n\t\t_pdfHandler.convert(filename(), pageno);\n\t\tembed(_pdfHandler.bbox());\n\t\twriteSVG(pageno);\n\t}\n}\n"
  },
  {
    "path": "src/PDFToSVG.hpp",
    "content": "/*************************************************************************\n** PDFToSVG.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PDFTOSVG_HPP\n#define PDFTOSVG_HPP\n\n#include <fstream>\n#include \"ImageToSVG.hpp\"\n#include \"PDFHandler.hpp\"\n\n\nclass PDFToSVG : public ImageToSVG {\n\tpublic:\n\t\tPDFToSVG (const std::string &fname, SVGOutputBase &out);\n\t\tbool isSinglePageFormat() const override {return false;}\n\t\tint totalPageCount() const override;\n\t\tvoid convert (int pageno) override;\n\n\tprotected:\n\t\tvoid checkGSAndFileFormat () override;\n\t\tbool imageIsValid () const override;\n\t\tstd::string imageFormat () const override {return \"PDF\";}\n\t\tBoundingBox imageBBox () const override {return {};}\n\t\tstd::string psSpecialCmd () const override {return \"pdffile=\";}\n\n\tprivate:\n\t\tmutable int _totalPageCount = -1;\n\t\tPDFHandler _pdfHandler;\n\t\tbool _useGS = true;\n\t\tint _pdfVersion = 0; // PDF version of file being processed (major*100 + minor)\n};\n\n#endif\n"
  },
  {
    "path": "src/PSInterpreter.cpp",
    "content": "/*************************************************************************\n** PSInterpreter.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstring>\n#include <fstream>\n#include <sstream>\n#include <unordered_map>\n#include \"algorithm.hpp\"\n#include \"FileFinder.hpp\"\n#include \"FileSystem.hpp\"\n#include \"InputReader.hpp\"\n#include \"Message.hpp\"\n#include \"PSInterpreter.hpp\"\n#include \"SignalHandler.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\n/** Constructs a new PSInterpreter object.\n *  @param[in] actions template methods to be executed after recognizing the corresponding PS operator. */\nPSInterpreter::PSInterpreter (PSActions *actions)\n\t: _mode(PS_NONE), _actions(actions)\n{\n}\n\n\nPSInterpreter::~PSInterpreter () {\n\t// don't process any further PS code that might be received when exiting GS\n\t_gs.finalize();\n\t_actions = nullptr;\n}\n\n\nvoid PSInterpreter::init () {\n\tif (!_initialized) {\n\t\tvector<const char*> gsargs {\n\t\t\t\"gs\",                // dummy name\n\t\t\t\"-q\",                // be quiet, suppress gs banner\n\t\t\t\"-dNODISPLAY\",       // we don't need a display device\n\t\t\t\"-dNOPAUSE\",         // keep going\n\t\t\t\"-dWRITESYSTEMDICT\", // leave systemdict writable as some operators must be replaced\n\t\t\t\"-dNOPROMPT\"\n\t\t};\n\t\tif (int gsrev = _gs.revision()) {\n\t\t\tgsargs.emplace_back(gsrev == 922 ? \"-dREALLYDELAYBIND\" : \"-dDELAYBIND\");\n\t\t\t// As of GS 9.50, -dSAFER is active by default which leads to warnings\n\t\t\t// in conjunction with -dDELAYBIND and -dWRITESYSTEMDICT.\n\t\t\t// Thus, -dDELAYSAFER (or -dNOSAFER) must be added.\n\t\t\t// https://www.ghostscript.com/doc/9.50/Use.htm#Safer\n\t\t\tif (gsrev >= 950) {\n\t\t\t\tgsargs.emplace_back(\"-dDELAYSAFER\");\n\t\t\t\tgsargs.emplace_back(\"-dALLOWPSTRANSPARENCY\");\n\t\t\t}\n\t\t\t// GS 9.55.0 introduced a new, C-based PDF interpreter which is enabled by default\n\t\t\t// as of GS 9.56.0. Since dvisvgm relies on the old PS-based interpreter for its\n\t\t\t// PDF support, we try to disable the new one.\n\t\t\t// https://www.ghostscript.com/doc/9.56.0/Use.htm#PDF_switches\n\t\t\t// As of GS 10.02.0, option NEWPDF has been deprecated and has no effect any longer.\n\t\t\tif (gsrev >= 9560 && gsrev < 10020)\n\t\t\t\tgsargs.emplace_back(\"-dNEWPDF=false\");\n\t\t}\n\t\t_gs.init(gsargs.size(), gsargs.data(), this);\n\t\t_gs.set_stdio(input, output, error);\n\t\t_initialized = true;\n\t\t// Before executing any random PS code redefine some operators and run\n\t\t// initializing PS code. This cannot be done in the constructor because we\n\t\t// need the completely initialized PSInterpreter object here.\n\t\texecute(PSDEFS);\n\t}\n}\n\n\nPSActions* PSInterpreter::setActions (PSActions *actions) {\n\tPSActions *old_actions = _actions;\n\t_actions = actions;\n\treturn old_actions;\n}\n\n\n/** Checks if the given status value returned by Ghostscript indicates an error.\n *  @param[in] status status value returned by Ghostscript after the execution of a PS fragment\n *  @throw PSException if the status value indicates a PostScript error */\nvoid PSInterpreter::checkStatus (int status) {\n\tif (status < 0) {\n\t\t_mode = PS_QUIT;\n\t\tif (status < -100)\n\t\t\tthrow PSException(\"fatal error\");\n\t\tif (_errorMessage.empty())\n\t\t\tthrow PSException(_gs.error_name(status));\n\t\tsize_t pos = _errorMessage.rfind(\"Operand stack:\");\n\t\tif (pos != string::npos && pos > 0 && !isspace(_errorMessage[pos-1]))\n\t\t\t_errorMessage.insert(pos, \"\\n\");\n\t\tthrow PSException(_errorMessage);\n\t}\n}\n\n\n/** Executes a chunk of PostScript code.\n *  @param[in] str buffer containing the code\n *  @param[in] len number of characters in buffer\n *  @param[in] flush If true, a final 'flush' is sent which forces the output buffer to be written immediately.\n *  @return true if the assigned number of bytes have been read */\nbool PSInterpreter::execute (const char *str, size_t len, bool flush) {\n\tinit();\n\tif (_mode == PS_QUIT)\n\t\treturn false;\n\tif (_mode == PS_EXCEPTION) {\n\t\tif (_errorMessage.empty())\n\t\t\treturn false;\n\t\tthrow PSException(_errorMessage);\n\t}\n\n\tint status=0;\n\tif (_mode == PS_NONE) {\n\t\t_gs.run_string_begin(0, &status);\n\t\t_mode = PS_RUNNING;\n\t}\n\tcheckStatus(status);\n\n\tbool complete=false;\n\tif (_bytesToRead > 0 && len >= _bytesToRead) {\n\t\tlen = _bytesToRead;\n\t\tcomplete = true;\n\t}\n\n\t// feed Ghostscript with code chunks that are not larger than 64KB\n\t// => see documentation of gsapi_run_string_foo()\n\tconst char *p=str;\n\twhile (_mode == PS_RUNNING && len > 0) {\n\t\tSignalHandler::instance().check();\n\t\tsize_t chunksize = min(len, (size_t)0xffff);\n\t\t_gs.run_string_continue(p, chunksize, 0, &status);\n\t\tp += chunksize;\n\t\tlen -= chunksize;\n\t\tif (_bytesToRead > 0)\n\t\t\t_bytesToRead -= chunksize;\n\t\tif (status == -101)  // e_Quit\n\t\t\t_mode = PS_QUIT;\n\t\telse\n\t\t\tcheckStatus(status);\n\t}\n\tif (flush) {\n\t\t// force writing contents of output buffer\n\t\t_gs.run_string_continue(\"\\nflush \", 7, 0, &status);\n\t}\n\treturn complete;\n}\n\n\n/** Executes a chunk of PostScript code read from a stream. The method returns on EOF.\n *  @param[in] is the input stream\n *  @param[in] flush If true, a final 'flush' is sent which forces the output buffer to be written immediately.\n *  @return true if the assigned number of bytes have been read */\nbool PSInterpreter::execute (istream &is, bool flush) {\n\tbool finished = false;\n\twhile (is && !is.eof() && !finished) {\n\t\tchar buf[4096];\n\t\tis.read(buf, 4096);\n\t\tfinished = execute(buf, is.gcount(), false);\n\t}\n\texecute(\"\\n\", 1, flush);\n\treturn finished;\n}\n\n\nbool PSInterpreter::executeRaw (const string &str, int n) {\n\t_rawData.clear();\n\tostringstream oss;\n\toss << str << ' ' << n << \" (raw) prcmd\\n\";\n\texecute(oss.str());\n\treturn !_rawData.empty();\n}\n\n\n/** This callback function handles input from stdin to Ghostscript. Currently not needed.\n *  @param[in] inst pointer to calling instance of PSInterpreter\n *  @param[in] buf takes the read characters\n *  @param[in] len size of buffer buf\n *  @return number of characters read */\nint GSDLLCALL PSInterpreter::input (void *inst, char *buf, int len) noexcept {\n\treturn 0;\n}\n\n\n/** This callback function handles output from Ghostscript to stdout. It looks for\n *  emitted commands staring with \"dvi.\" and executes them by calling method callActions.\n *  Ghostscript sends the text in chunks by several calls of this function.\n *  Unfortunately, the PostScript specification wants error messages also to be sent to stdout\n *  instead of stderr. Thus, we must collect and concatenate the chunks until an evaluable text\n *  fragment is completely received. Furthermore, error messages have to be recognized and to be\n *  filtered out.\n *  @param[in] inst pointer to calling instance of PSInterpreter\n *  @param[in] buf contains the characters to be output\n *  @param[in] len number of characters in buf\n *  @return number of processed characters (equals 'len') */\nint GSDLLCALL PSInterpreter::output (void *inst, const char *buf, int len) noexcept {\n\tauto self = static_cast<PSInterpreter*>(inst);\n\tif (!self || !self->_actions || self->_mode == PS_EXCEPTION)\n\t\treturn len;\n\n\ttry {\n\t\tSplittedCharInputBuffer ib(self->_unprocessedChars.data(), self->_unprocessedChars.length(), buf, len);\n\t\tBufferInputReader ir(ib);\n\t\twhile (!ir.eof()) {\n\t\t\tif (self->_inError) {\n\t\t\t\tself->_errorMessage += ib.toString();\n\t\t\t\tib.invalidate();\n\t\t\t}\n\t\t\telse if (ir.check(\"Unrecoverable error: \")) {\n\t\t\t\tself->_errorMessage = ib.toString();\n\t\t\t\tib.invalidate();\n\t\t\t\tself->_inError = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tir.skipSpace();\n\t\t\t\tint spacepos = ib.find(' ');\n\t\t\t\tif (spacepos <= 0)  // no separating space found?\n\t\t\t\t\tbreak;           // => wait for more data\n\t\t\t\tstring entry = ir.getString(spacepos);\n\t\t\t\tif (self->_command.empty()) {   // not yet collecting command parameters?\n\t\t\t\t\tif (entry.length() < 4 || entry.substr(0, 4) != \"dvi.\")\n\t\t\t\t\t\tir.skipUntil(\"\\n\");\n\t\t\t\t\telse\n\t\t\t\t\t\tself->_command.emplace_back(entry.substr(4));\n\t\t\t\t}\n\t\t\t\telse if (entry[0] != '|') {   // not yet at end of command?\n\t\t\t\t\tself->_command.emplace_back(std::move(entry));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tself->processCommand();\n\t\t\t\t\tself->_command.clear();\n\t\t\t\t\tir.skipSpace();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (ir.eof())\n\t\t\tself->_unprocessedChars.clear();\n\t\telse\n\t\t\tself->_unprocessedChars = ib.toString();\n\t}\n\tcatch (exception &e) {\n\t\tself->_mode = PS_EXCEPTION;\n\t\tself->_errorMessage = e.what();\n\t}\n\treturn len;\n}\n\n\n/** Evaluates a command emitted by Ghostscript and invokes the corresponding\n *  method of interface class PSActions. */\nvoid PSInterpreter::processCommand () {\n\tif (!_actions || _command.empty())\n\t\treturn;\n\tstruct Operator {\n\t\tint pcount;       // number of parameters (< 0 : variable number of parameters)\n\t\tvoid (PSActions::*handler)(vector<double> &p);  // operation handler\n\t};\n\tstatic const unordered_map<string, Operator> operators {\n\t\t{\"applyscalevals\",         { 3, &PSActions::applyscalevals}},\n\t\t{\"clip\",                   { 0, &PSActions::clip}},\n\t\t{\"clippath\",               { 0, &PSActions::clippath}},\n\t\t{\"closepath\",              { 0, &PSActions::closepath}},\n\t\t{\"curveto\",                { 6, &PSActions::curveto}},\n\t\t{\"eoclip\",                 { 0, &PSActions::eoclip}},\n\t\t{\"eofill\",                 { 0, &PSActions::eofill}},\n\t\t{\"fill\",                   { 0, &PSActions::fill}},\n\t\t{\"grestore\",               { 0, &PSActions::grestore}},\n\t\t{\"grestoreall\",            { 0, &PSActions::grestoreall}},\n\t\t{\"gsave\",                  { 0, &PSActions::gsave}},\n\t\t{\"image\",                  { 3, &PSActions::image}},\n\t\t{\"initclip\",               { 0, &PSActions::initclip}},\n\t\t{\"lineto\",                 { 2, &PSActions::lineto}},\n\t\t{\"makepattern\",            {-1, &PSActions::makepattern}},\n\t\t{\"moveto\",                 { 2, &PSActions::moveto}},\n\t\t{\"newpath\",                { 1, &PSActions::newpath}},\n\t\t{\"querypos\",               { 2, &PSActions::querypos}},\n\t\t{\"restore\",                { 1, &PSActions::restore}},\n\t\t{\"rotate\",                 { 1, &PSActions::rotate}},\n\t\t{\"save\",                   { 1, &PSActions::save}},\n\t\t{\"scale\",                  { 2, &PSActions::scale}},\n\t\t{\"setalphaisshape\",        { 1, &PSActions::setalphaisshape}},\n\t\t{\"setblendmode\",           { 1, &PSActions::setblendmode}},\n\t\t{\"setcolorspace\",          { 1, &PSActions::setcolorspace}},\n\t\t{\"setcmykcolor\",           { 4, &PSActions::setcmykcolor}},\n\t\t{\"setdash\",                {-1, &PSActions::setdash}},\n\t\t{\"setfillconstantalpha\",   { 1, &PSActions::setfillconstantalpha}},\n\t\t{\"setgray\",                { 1, &PSActions::setgray}},\n\t\t{\"sethsbcolor\",            { 3, &PSActions::sethsbcolor}},\n\t\t{\"setlinecap\",             { 1, &PSActions::setlinecap}},\n\t\t{\"setlinejoin\",            { 1, &PSActions::setlinejoin}},\n\t\t{\"setlinewidth\",           { 1, &PSActions::setlinewidth}},\n\t\t{\"setmatrix\",              { 6, &PSActions::setmatrix}},\n\t\t{\"setmiterlimit\",          { 1, &PSActions::setmiterlimit}},\n\t\t{\"setnulldevice\",          { 1, &PSActions::setnulldevice}},\n\t\t{\"setpagedevice\",          { 0, &PSActions::setpagedevice}},\n\t\t{\"setpattern\",             {-1, &PSActions::setpattern}},\n\t\t{\"setrgbcolor\",            { 3, &PSActions::setrgbcolor}},\n\t\t{\"setstrokeconstantalpha\", { 1, &PSActions::setstrokeconstantalpha}},\n\t\t{\"shfill\",                 {-1, &PSActions::shfill}},\n\t\t{\"stroke\",                 { 0, &PSActions::stroke}},\n\t\t{\"translate\",              { 2, &PSActions::translate}},\n\t};\n\n\tif (_command[0] == \"raw\") {\n\t\t_rawData.resize(_command.size()-1);\n\t\tstd::copy(_command.begin()+1, _command.end(), _rawData.begin());\n\t}\n\telse {\n\t\tvector<double> numbers(_command.size()-1);\n\t\ttransform(_command.begin()+1, _command.end(), numbers.begin(), [](const string &str) {\n\t\t\treturn stod(str);\n\t\t});\n\t\tauto it = operators.find(_command[0]);\n\t\tif (it != operators.end()) {\n\t\t\t(_actions->*it->second.handler)(numbers);\n\t\t\t_actions->executed();\n\t\t}\n\t}\n}\n\n\n/** This callback function handles output from Ghostscript to stderr.\n *  @param[in] inst pointer to calling instance of PSInterpreter\n *  @param[in] buf contains the characters to be output\n *  @param[in] len number of chars in buf\n *  @return number of processed characters */\nint GSDLLCALL PSInterpreter::error (void *inst, const char *buf, int len) noexcept {\n\treturn len;\n}\n\n\n/** Returns the total number of pages of a PDF file.\n *  @param[in] fname name/path of the PDF file */\nint PSInterpreter::pdfPageCount (const string &fname) {\n\texecuteRaw(\"\\n(\"+FileSystem::ensureForwardSlashes(fname)+\")@pdfpagecount \", 1);\n\tif (!_rawData.empty()) {\n\t\tsize_t index;\n\t\tint ret = stoi(_rawData[0], &index, 10);\n\t\tif (index > 0)\n\t\t\treturn ret;\n\t}\n\treturn 0;\n}\n\n\n/** Returns the bounding box of a PDF page. If the selected page doesn't exist,\n *  the \"invalid\" flag of the returned bounding box is set.\n *  @param[in] fname name/path of the PDF file\n *  @param[in] pageno page number\n *  @return the bounding box of the given page */\nBoundingBox PSInterpreter::pdfPageBox (const string &fname, int pageno) {\n\tBoundingBox pagebox;\n\texecuteRaw(\"\\n\"+to_string(pageno)+\"(\"+FileSystem::ensureForwardSlashes(fname)+\")@pdfpagebox \", 4);\n\tif (_rawData.size() < 4)\n\t\tpagebox.invalidate();\n\telse\n\t\tpagebox = BoundingBox(stod(_rawData[0]), stod(_rawData[1]), stod(_rawData[2]), stod(_rawData[3]));\n\treturn pagebox;\n}\n\n\nvector<PSDeviceInfo> PSInterpreter::getImageDeviceInfos () {\n\tvector<PSDeviceInfo> infos {\n\t\t{\"none\", \"no processing of bitmap images\"},\n\t\t{\"jpeg\", \"color JPEG format\"},\n\t\t{\"jpeggray\", \"grayscale JPEG format\"},\n\t\t{\"png\", \"grayscale or 24-bit color PNG format\"},\n\t\t{\"pnggray\", \"grayscale PNG format\"},\n\t\t{\"pngmono\", \"black-and-white PNG format\"},\n\t\t{\"pngmonod\", \"dithered black-and-white PNG format\"},\n\t\t{\"png16\", \"4-bit color PNG format\"},\n\t\t{\"png256\", \"8-bit color PNG format\"},\n\t\t{\"png16m\", \"24-bit color PNG format\"},\n\t};\n\treturn infos;\n}\n\n\nvoid PSInterpreter::listImageDeviceInfos (ostream &os) {\n\tfor (const PSDeviceInfo &info : getImageDeviceInfos())\n\t\tos << setw(8) << left << info.name << \" | \" << info.description << '\\n';\n}\n\n\n/** Returns true if a given PS device name is known. The function deosn't\n *  check whether the device is actually available.\n *  @param[in] deviceStr device specifier of the form <device name>[:<param>] */\nbool PSInterpreter::imageDeviceKnown (string deviceStr) {\n\tif (deviceStr.empty() || !isalpha(deviceStr[0]))\n\t\treturn false;\n\tsize_t colonpos = deviceStr.find(':');\n\tif (colonpos != string::npos)\n\t\tdeviceStr.resize(colonpos);  // strip optional argument\n\tauto infos = getImageDeviceInfos();\n\tauto it = algo::find_if(infos, [&](const PSDeviceInfo &info) {\n\t\treturn info.name == deviceStr;\n\t});\n\treturn it != infos.end();\n}\n\n\n/** Sets the output device used to create bitmap images.\n *  @param[in] deviceStr device specifier of the form <device name>[:<param>]\n *  @return true on success, false if device is not supported */\nbool PSInterpreter::setImageDevice (const string &deviceStr) {\n\tauto params = util::split(deviceStr, \":\");\n\tstring name = util::tolower(params[0]);\n\tif (!imageDeviceKnown(name))\n\t\treturn false;\n\tif (name != \"jpeg\" && name != \"png\" && name != \"none\") {\n\t\t// check if image device is supported by Ghostscript\n\t\texecuteRaw(\"devicedict/\"+name+\" known{1}{0}ifelse\\n\", 1);\n\t\tif (_rawData.empty() || _rawData[0] != \"1\")\n\t\t\tthrow PSException(\"output device '\"+name+\"' is not available\");\n\t}\n\tstring ps = \"/@imgdevice(\"+name+\")store \";\n\ttry {\n\t\tif (params.size() > 1) {\n\t\t\t// set JPEG quality level if given\n\t\t\tif (name.substr(0, 4) == \"jpeg\") {\n\t\t\t\tint quality = max(0, min(stoi(params[1]), 100));\n\t\t\t\tps += \"/JPEGQ \"+to_string(quality)+\" def \";\n\t\t\t}\n\t\t\telse if (name == \"pngmonod\") {\n\t\t\t\tint minFeatureSize = max(0, min(stoi(params[1]), 4));\n\t\t\t\tps += \"/MinFeatureSize \"+to_string(minFeatureSize)+\" def \";\n\t\t\t}\n\t\t}\n\t}\n\tcatch (...) {\n\t\tthrow PSException(\"invalid device option '\"+params[1]+\"' (integer expected)\");\n\t}\n\texecute(ps);\n\treturn true;\n}\n"
  },
  {
    "path": "src/PSInterpreter.hpp",
    "content": "/*************************************************************************\n** PSInterpreter.hpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PSINTERPRETER_HPP\n#define PSINTERPRETER_HPP\n\n#include <cstring>\n#include <istream>\n#include <string>\n#include <vector>\n#include \"BoundingBox.hpp\"\n#include \"Ghostscript.hpp\"\n#include \"MessageException.hpp\"\n\n\nstruct PSException : MessageException {\n\texplicit PSException (const std::string &msg) : MessageException(msg) {}\n};\n\n\n/** This interface provides the template methods called by PSInterpreter when executing a PS fragment.\n *  Each method corresponds to a PostScript operator of the same name. */\nstruct PSActions {\n\tvirtual ~PSActions () =default;\n\tvirtual void applyscalevals (std::vector<double> &p) =0;\n\tvirtual void clip (std::vector<double> &p) =0;\n\tvirtual void clippath (std::vector<double> &p) =0;\n\tvirtual void closepath (std::vector<double> &p) =0;\n\tvirtual void curveto (std::vector<double> &p) =0;\n\tvirtual void eoclip (std::vector<double> &p) =0;\n\tvirtual void eofill (std::vector<double> &p) =0;\n\tvirtual void fill (std::vector<double> &p) =0;\n\tvirtual void gsave (std::vector<double> &p) =0;\n\tvirtual void grestore (std::vector<double> &p) =0;\n\tvirtual void grestoreall (std::vector<double> &p) =0;\n\tvirtual void image (std::vector<double> &p) =0;\n\tvirtual void initclip (std::vector<double> &p) =0;\n\tvirtual void lineto (std::vector<double> &p) =0;\n\tvirtual void makepattern (std::vector<double> &p) =0;\n\tvirtual void moveto (std::vector<double> &p) =0;\n\tvirtual void newpath (std::vector<double> &p) =0;\n\tvirtual void querypos (std::vector<double> &p) =0;\n\tvirtual void restore (std::vector<double> &p) =0;\n\tvirtual void rotate (std::vector<double> &p) =0;\n\tvirtual void save (std::vector<double> &p) =0;\n\tvirtual void scale (std::vector<double> &p) =0;\n\tvirtual void setalphaisshape (std::vector<double> &p) =0;\n\tvirtual void setblendmode (std::vector<double> &p) =0;\n\tvirtual void setcolorspace (std::vector<double> &p) =0;\n\tvirtual void setcmykcolor (std::vector<double> &cmyk) =0;\n\tvirtual void setdash (std::vector<double> &p) =0;\n\tvirtual void setfillconstantalpha (std::vector<double> &p) =0;\n\tvirtual void setgray (std::vector<double> &p) =0;\n\tvirtual void sethsbcolor (std::vector<double> &hsb) =0;\n\tvirtual void setlinecap (std::vector<double> &p) =0;\n\tvirtual void setlinejoin (std::vector<double> &p) =0;\n\tvirtual void setlinewidth (std::vector<double> &p) =0;\n\tvirtual void setmatrix (std::vector<double> &p) =0;\n\tvirtual void setmiterlimit (std::vector<double> &p) =0;\n\tvirtual void setnulldevice (std::vector<double> &p) =0;\n\tvirtual void setpagedevice (std::vector<double> &p) =0;\n\tvirtual void setpattern (std::vector<double> &p) =0;\n\tvirtual void setrgbcolor (std::vector<double> &rgb) =0;\n\tvirtual void setstrokeconstantalpha (std::vector<double> &p) =0;\n\tvirtual void shfill (std::vector<double> &p) =0;\n\tvirtual void stroke (std::vector<double> &p) =0;\n\tvirtual void translate (std::vector<double> &p) =0;\n\tvirtual void executed () {}  // triggered if one of the above PS operators has been executed\n};\n\nclass PSFilter;\n\nstruct PSDeviceInfo {\n\tstd::string name;\n\tstd::string description;\n};\n\n/** This class provides methods to execute chunks of PostScript code and calls\n *  several template methods on invocation of selected PS operators (see PSActions). */\nclass PSInterpreter {\n\tenum Mode {PS_NONE, PS_RUNNING, PS_QUIT, PS_EXCEPTION};\n\n\tpublic:\n\t\texplicit PSInterpreter (PSActions *actions=nullptr);\n\t\tvirtual ~PSInterpreter ();\n\t\tPSInterpreter (const PSInterpreter &psi) =delete;\n\t\tbool execute (const char *str, size_t len, bool flush=true);\n\t\tbool execute (const char *str, bool flush=true)        {return execute(str, std::strlen(str), flush);}\n\t\tbool execute (const std::string &str, bool flush=true) {return execute(str.c_str(), flush);}\n\t\tbool execute (std::istream &is, bool flush=true);\n\t\tbool executeRaw (const std::string &str, int n);\n\t\tbool active () const                   {return _mode != PS_QUIT;}\n\t\tvoid limit (size_t max_bytes)          {_bytesToRead = max_bytes;}\n\t\tPSActions* setActions (PSActions *actions);\n\t\tint pdfPageCount (const std::string &fname);\n\t\tBoundingBox pdfPageBox (const std::string &fname, int pageno);\n\t\tconst std::vector<std::string>& rawData () const {return _rawData;}\n\t\tbool setImageDevice (const std::string &deviceStr);\n\t\tbool hasFullOpacitySupport () const {return _gs.revision() >= 952;}\n\t\tbool supportsPDF () const           {return _gs.revision() > 0 && _gs.revision() < 10010;}\n\t\tstatic std::vector<PSDeviceInfo> getImageDeviceInfos ();\n\t\tstatic void listImageDeviceInfos (std::ostream &os);\n\t\tstatic bool imageDeviceKnown (std::string deviceStr);\n\n\tprotected:\n\t\tvoid init ();\n\t\t// callback functions\n\t\tstatic int GSDLLCALL input (void *inst, char *buf, int len) noexcept;\n\t\tstatic int GSDLLCALL output (void *inst, const char *buf, int len) noexcept;\n\t\tstatic int GSDLLCALL error (void *inst, const char *buf, int len) noexcept;\n\n\t\tvoid checkStatus (int status);\n\t\tvoid processCommand ();\n\n\tprivate:\n\t\tGhostscript _gs;\n\t\tMode _mode;                        ///< current execution mode\n\t\tPSActions *_actions=nullptr;       ///< actions to be performed\n\t\tsize_t _bytesToRead=0;             ///< if > 0, maximal number of bytes to be processed by following calls of execute()\n\t\tstd::string _unprocessedChars;\n\t\tstd::string _errorMessage;         ///< text of error message\n\t\tstd::vector<std::string> _command; ///< current command being scanned\n\t\tbool _inError=false;               ///< true if scanning error message\n\t\tbool _initialized=false;           ///< true if PSInterpreter has been completely initialized\n\t\tstd::vector<std::string> _rawData; ///< raw data received\n\t\tstatic const char *PSDEFS;         ///< initial PostScript definitions\n};\n\n#endif\n"
  },
  {
    "path": "src/PSPattern.cpp",
    "content": "/*************************************************************************\n** PSPattern.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include <sstream>\n#include <vector>\n#include \"BoundingBox.hpp\"\n#include \"PSPattern.hpp\"\n#include \"SpecialActions.hpp\"\n#include \"SVGTree.hpp\"\n#include \"utility.hpp\"\n#include \"XMLNode.hpp\"\n\nusing namespace std;\n\n\nstring PSPattern::svgID () const {\n\treturn XMLString(\"pat\")+XMLString(_id);\n}\n\n\n/** Appends the definition of this pattern to the \"def\" section of the SVG tree. */\nvoid PSPattern::apply (SpecialActions &actions) {\n\tif (auto pattern = createPatternNode())\n\t\tactions.svgTree().appendToDefs(std::move(pattern));\n}\n\n\n/////////////////////////////////////////////////////////////////////////////\n\nPSTilingPattern::PSTilingPattern (int id, const BoundingBox &bbox, const Matrix &matrix, double xstep, double ystep)\n\t: PSPattern(id), _bbox(bbox), _matrix(matrix), _xstep(xstep), _ystep(ystep)\n{\n\t_groupNode = PSTilingPattern::createGroupNode();\n\t_groupNodePtr = _groupNode.get();\n}\n\n\n/** Assigns a new group element. */\nvoid PSTilingPattern::setGroupNode (unique_ptr<XMLElement> node) {\n\t_groupNode = std::move(node);\n\t_groupNodePtr = _groupNode.get();\n}\n\n\n/** Creates a new pattern element representing the pattern defined in the PS code. */\nunique_ptr<XMLElement> PSTilingPattern::createPatternNode () const {\n\tif (!_groupNode)\n\t\treturn nullptr;\n\tBoundingBox box(_bbox.minX(), _bbox.minY(), _bbox.minX()+_xstep, _bbox.minY()+_ystep);\n\tauto pattern = util::make_unique<XMLElement>(\"pattern\");\n\tpattern->addAttribute(\"id\", svgID());\n\tpattern->addAttribute(\"x\", box.minX());\n\tpattern->addAttribute(\"y\", box.minY());\n\tpattern->addAttribute(\"width\", box.width());\n\tpattern->addAttribute(\"height\", box.height());\n\tpattern->addAttribute(\"viewBox\", box.svgViewBoxString());\n\tpattern->addAttribute(\"patternUnits\", \"userSpaceOnUse\");\n\tif (!_matrix.isIdentity())\n\t\tpattern->addAttribute(\"patternTransform\", _matrix.toSVG());\n\tif (_xstep < _bbox.width() || _ystep < _bbox.height()) {  // overlapping tiles?\n\t\t// disable clipping at the tile borders => tiles become \"transparent\"\n\t\tpattern->addAttribute(\"overflow\", \"visible\");\n\t}\n\tif (auto clip = createClipNode())\n\t\tpattern->append(std::move(clip));\n\tpattern->append(std::move(_groupNode));\n\t_groupNode.reset();\n\treturn pattern;\n}\n\n\n/** Creates a new clip element restricting the drawing area to the\n *  dimensions given in the definition of the pattern. */\nunique_ptr<XMLElement> PSTilingPattern::createClipNode() const {\n\tauto clip = util::make_unique<XMLElement>(\"clipPath\");\n\tclip->addAttribute(\"id\", \"pc\"+XMLString(psID()));\n\tauto rect = util::make_unique<XMLElement>(\"rect\");\n\trect->addAttribute(\"x\", _bbox.minX());\n\trect->addAttribute(\"y\", _bbox.minY());\n\trect->addAttribute(\"width\", _bbox.width());\n\trect->addAttribute(\"height\", _bbox.height());\n\tclip->append(std::move(rect));\n\treturn clip;\n}\n\n\n/** Creates a new group element that contains all \"drawing\" elements that\n *  define the pattern graphic. */\nunique_ptr<XMLElement> PSTilingPattern::createGroupNode () const {\n\t// add all succeeding path elements to this group\n\tauto group = util::make_unique<SVGElement>(\"g\");\n\tgroup->setClipPathUrl(\"pc\"+XMLString(psID()));\n\treturn group;\n}\n\n\nvoid PSTilingPattern::apply (SpecialActions &actions) {\n\tPSPattern::apply(actions);\n\t_groupNode.reset();\n}\n\n\n/////////////////////////////////////////////////////////////////////////////\n\nPSColoredTilingPattern::PSColoredTilingPattern (int id, const BoundingBox &bbox, const Matrix &matrix, double xstep, double ystep)\n\t: PSTilingPattern(id, bbox, matrix, xstep, ystep)\n{\n}\n\n\n/////////////////////////////////////////////////////////////////////////////\n\nPSUncoloredTilingPattern::PSUncoloredTilingPattern (int id, const BoundingBox &bbox, const Matrix &matrix, double xstep, double ystep)\n\t: PSTilingPattern(id, bbox, matrix, xstep, ystep), _applied()\n{\n}\n\n\n/** Returns an SVG id value that identifies this pattern with the current color applied. */\nstring PSUncoloredTilingPattern::svgID () const {\n\tostringstream oss;\n\toss << PSPattern::svgID() << '-' << hex << uint32_t(_currentColor);\n\treturn oss.str();\n}\n\n\n/** Appends the definition of this pattern with the current color applied\n *  to the \"def\" section of the SVG tree. */\nvoid PSUncoloredTilingPattern::apply (SpecialActions &actions) {\n\tauto it=_colors.find(_currentColor);\n\tif (it == _colors.end()) {\n\t\tif (_applied)\n\t\t\tsetGroupNode(util::static_unique_ptr_cast<XMLElement>(getGroupNode()->clone()));\n\t\t// assign current color to the pattern graphic\n\t\tvector<XMLElement*> colored_elems;\n\t\tfor (const char *attrName : {\"fill\", \"stroke\"}) {\n\t\t\tgetGroupNode()->getDescendants(nullptr, attrName, colored_elems);\n\t\t\tfor (XMLElement *elem : colored_elems) {\n\t\t\t\tif (string(elem->getAttributeValue(attrName)) != \"none\")\n\t\t\t\t\telem->addAttribute(attrName, _currentColor.svgColorString());\n\t\t\t}\n\t\t\tcolored_elems.clear();\n\t\t}\n\t\tPSPattern::apply(actions);\n\t\t_colors.insert(_currentColor);\n\t\t_applied = true;\n\t}\n}\n\n\nunique_ptr<XMLElement> PSUncoloredTilingPattern::createClipNode() const {\n\t// only the first instance of this patterns get a clip element\n\tif (_colors.empty())\n\t\treturn PSTilingPattern::createClipNode();\n\treturn nullptr;\n}\n"
  },
  {
    "path": "src/PSPattern.hpp",
    "content": "/*************************************************************************\n** PSPattern.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PSPATTERN_HPP\n#define PSPATTERN_HPP\n\n#include <memory>\n#include <set>\n#include <string>\n#include \"BoundingBox.hpp\"\n#include \"Color.hpp\"\n#include \"Matrix.hpp\"\n#include \"XMLNode.hpp\"\n\n\nclass SpecialActions;\nclass SVGTree;\nclass XMLElement;\n\nclass PSPattern {\n\tpublic:\n\t\tvirtual ~PSPattern () =default;\n\t\tvirtual int psID () const {return _id;}\n\t\tvirtual std::string svgID () const;\n\t\tvirtual void apply (SpecialActions &actions);\n\t\tvirtual void setColor (Color color) {}\n\t\tvirtual bool tiled () const =0;\n\n\tprotected:\n\t\texplicit PSPattern (int id) : _id(id) {}\n\t\tvirtual std::unique_ptr<XMLElement> createPatternNode () const =0;\n\n\tprivate:\n\t\tint _id;  ///< PostScript ID of this pattern\n};\n\n\nclass PSTilingPattern : public PSPattern {\n\tpublic:\n\t\tvirtual XMLElement* getContainerNode ()     {return _groupNode.get();}\n\t\tvoid apply (SpecialActions &actions) override;\n\t\tbool tiled () const override {return true;}\n\n\n\tprotected:\n\t\tPSTilingPattern (int id, const BoundingBox &bbox, const Matrix &matrix, double xstep, double ystep);\n\t\tstd::unique_ptr<XMLElement> createPatternNode () const override;\n\t\tvirtual std::unique_ptr<XMLElement> createClipNode () const;\n\t\tvirtual std::unique_ptr<XMLElement> createGroupNode () const;\n\t\tvirtual XMLElement* getGroupNode () const    {return _groupNodePtr;}\n\t\tvirtual void setGroupNode (std::unique_ptr<XMLElement> node);\n\n\tprivate:\n\t\tBoundingBox _bbox;           ///< bounding box of the tile graphics\n\t\tMatrix _matrix;              ///< tile transformation\n\t\tdouble _xstep, _ystep;       ///< horizontal and vertical distance between neighbouring tiles\n\t\tmutable std::unique_ptr<XMLElement> _groupNode;  ///< group containing the drawing elements\n\t\tXMLElement *_groupNodePtr; ///< keeps a pointer to the group node even after moving _groupNode to the SVGTree\n};\n\n\nclass PSColoredTilingPattern final : public PSTilingPattern {\n\tpublic:\n\t\tPSColoredTilingPattern (int id, const BoundingBox &bbox, const Matrix &matrix, double xstep, double ystep);\n};\n\n\nclass PSUncoloredTilingPattern final : public PSTilingPattern {\n\tpublic:\n\t\tPSUncoloredTilingPattern (int id, const BoundingBox &bbox, const Matrix &matrix, double xstep, double ystep);\n\t\tstd::string svgID () const override;\n\t\tvoid setColor (Color color) override {_currentColor = color;}\n\t\tvoid apply (SpecialActions &actions) override;\n\n\tprotected:\n\t\tstd::unique_ptr<XMLElement> createClipNode () const override;\n\n\tprivate:\n\t\tstd::set<Color> _colors;  ///< colors this pattern has already been drawn with\n\t\tColor _currentColor;      ///< current color to be applied\n\t\tbool _applied;  ///< has pattern with current group node already been applied to the SVG tree?\n};\n\n#endif\n"
  },
  {
    "path": "src/PSPreviewHandler.cpp",
    "content": "/*************************************************************************\n** PSPreviewHandler.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"PSInterpreter.hpp\"\n#include \"PSPreviewHandler.hpp\"\n\nusing namespace std;\n\nPSPreviewHandler::PSPreviewHandler (PSInterpreter &psi) : _psi(psi) {\n}\n\n\n/** Activates this filter so that the PS code will be redirected through it if\n *  it's hooked into the PSInterpreter. */\nvoid PSPreviewHandler::init () {\n\t// try to retrieve version string of preview package set in the PS header section\n\tif (_psi.executeRaw(\"SDict begin currentdict/preview@version known{preview@version}{0}ifelse end\", 1))\n\t\t_version = _psi.rawData()[0];\n\t// check if tightpage option was set\n\tif (_version != \"0\" && _psi.executeRaw(\"SDict begin preview@tightpage end\", 1))\n\t\t_tightpage = (_psi.rawData()[0] == \"true\");\n\t_boxExtents.clear();\n}\n\n\n/** Tries to extract the bounding box information from the PS operand stack.\n    @return true on success. */\nbool PSPreviewHandler::readDataFromStack () {\n\tif (!_tightpage)\n\t\treturn false;\n\n\t// Read bounding box information pushed on the operand stack by the preview package.\n\t// It consists of 7 values in DVI units:\n\t// adj_left, adj_bottom, adj_right, adj_top, height, depth, width,\n\t// where the first 4 values are set by \\PreviewBorder or \\PreviewBbAdjust. They denote\n\t// the border adjustments to create additional space around the graphics.\n\t// The baseline of the tight box extends from (0,0) to (tight_width, 0).\n\tconst char *getOperands =\n\t\t\"count 7 sub neg dup 0 lt{pop 0}if{0}repeat\\n\"  // ensure 7 operands on the stack\n\t\t\"7{dup type dup /integertype eq exch /realtype eq or not{pop 0}if cvi 7 1 roll} repeat\";  // ensure integer operands\n\t_psi.executeRaw(getOperands, 7);\n\t_boxExtents.clear();\n\tfor (const string &str: _psi.rawData())\n\t\t_boxExtents.push_back(stoi(str));\n\treturn true;\n}\n\n\n/** Returns the bounding box defined by the preview package. */\nbool PSPreviewHandler::getBoundingBox (BoundingBox &bbox) const {\n\tif (_boxExtents.size() < 7)\n\t\treturn false;\n\tconst double leftX = _boxExtents[0]*_dvi2bp;\n\tbbox = BoundingBox(leftX, -height(), width()+leftX, depth());\n\treturn true;\n}\n\n\n/** Returns the box height in PS points, or -1 if no data was found or read yet. */\ndouble PSPreviewHandler::height () const {\n\treturn _boxExtents.size() > 4 ? (_boxExtents[4]+_boxExtents[3])*_dvi2bp : -1;\n}\n\n\n/** Returns the box depth in PS points, or -1 if no data was found or read yet. */\ndouble PSPreviewHandler::depth () const {\n\treturn _boxExtents.size() > 5 ? (_boxExtents[5]-_boxExtents[1])*_dvi2bp : -1;\n}\n\n\n/** Returns the box width in PS points, or -1 if no data was found or read yet. */\ndouble PSPreviewHandler::width () const {\n\treturn _boxExtents.size() > 6 ? (_boxExtents[6]+_boxExtents[2]-_boxExtents[0])*_dvi2bp : -1;\n}\n"
  },
  {
    "path": "src/PSPreviewHandler.hpp",
    "content": "/*************************************************************************\n** PSPreviewHandler.hpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PSPREVIEWHANDLER_HPP\n#define PSPREVIEWHANDLER_HPP\n\n#include <string>\n#include <vector>\n#include \"BoundingBox.hpp\"\n\nclass PSInterpreter;\n\nclass PSPreviewHandler {\n\tpublic:\n\t\texplicit PSPreviewHandler (PSInterpreter &psi);\n\t\tvoid init ();\n\t\tstd::string version () const  {return _version;}\n\t\tbool tightpage () const       {return _tightpage;}\n\t\tbool readDataFromStack ();\n\t\tvoid setDviScaleFactor (double dvi2bp) {_dvi2bp = dvi2bp;}\n\t\tbool getBoundingBox (BoundingBox &bbox) const;\n\t\tdouble height () const;\n\t\tdouble depth () const;\n\t\tdouble width () const;\n\n\tprivate:\n\t\tstd::string _version;         ///< version string of preview package\n\t\tbool _tightpage=false;        ///< true if tightpage option was given\n\t\tdouble _dvi2bp=1.0/65536.0;   ///< factor to convert dvi units to PS points\n\t\tstd::vector<int> _boxExtents; ///< bounding box data set by the preview package (in DVI units)\n\t\tPSInterpreter &_psi;\n};\n\n#endif\n"
  },
  {
    "path": "src/PageRanges.cpp",
    "content": "/*************************************************************************\n** PageRanges.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <numeric>\n#include \"algorithm.hpp\"\n#include \"Calculator.hpp\"\n#include \"InputBuffer.hpp\"\n#include \"InputReader.hpp\"\n#include \"MessageException.hpp\"\n#include \"PageRanges.hpp\"\n\nusing namespace std;\n\nusing FilterFunc = bool (*)(int);\n\nstatic bool is_even (int n) {return n % 2 == 0;}\nstatic bool is_odd (int n) {return n % 2 == 1;}\n\n\n/** Replaces expressions in a given string by the corresponding values and returns the result.\n *  Supported expressions:\n *  %P: maximum page number\n *  %(expr): arithmetic expression\n *  @param[in] str string to expand\n *  @param[in] max_page maximum page number\n *  @return the expanded string */\nstatic string expand_variables (string str, int max_page) {\n\tstring result;\n\twhile (!str.empty()) {\n\t\tauto pos = str.find('%');\n\t\tif (pos == string::npos) {\n\t\t\tresult += str;\n\t\t\tstr.clear();\n\t\t}\n\t\telse {\n\t\t\tresult += str.substr(0, pos);\n\t\t\tstr = str.substr(pos);\n\t\t\tpos = 1;\n\t\t\tswitch (str[pos]) {\n\t\t\t\tcase 'P': result += to_string(max_page); break;\n\t\t\t\tcase '(': {\n\t\t\t\t\tauto endpos = str.find(')', pos);\n\t\t\t\t\tif (endpos == string::npos)\n\t\t\t\t\t\tthrow MessageException(\"missing ')' in page argument\");\n\t\t\t\t\tif (endpos-pos > 1) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tCalculator calculator;\n\t\t\t\t\t\t\tcalculator.setVariable(\"P\", max_page);\n\t\t\t\t\t\t\tresult += to_string(static_cast<int>(calculator.eval(str.substr(pos, endpos-pos+1))));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (CalculatorException &e) {\n\t\t\t\t\t\t\tthrow MessageException(\"error in page argument (\" + string(e.what()) + \")\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpos = endpos;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tthrow MessageException(\"invalid expression '%\" + str.substr(pos,1) + \"' in page argument\");\n\t\t\t}\n\t\t\tstr = str.substr(pos+1);\n\t\t}\n\t}\n\treturn result;\n}\n\n\n/** Analyzes a string describing a range sequence.\n *  Syntax: ([0-9]+(-[0-9]*)?)|(-[0-9]+)(,([0-9]+(-[0-9]*)?)|(-[0-9]+))*\n *  @param[in] str string to parse\n *  @param[in] max_page greatest allowed value\n *  @return true on success; false denotes a syntax error */\nbool PageRanges::parse (string str, int max_page) {\n\tif (max_page > 0)\n\t\tstr = expand_variables(str, max_page);\n\tStringInputBuffer ib(str);\n\tBufferInputReader ir(ib);\n\twhile (ir && ir.peek() != ':') {\n\t\tint first=1;\n\t\tint last=max_page;\n\t\tir.skipSpace();\n\t\tif (!isdigit(ir.peek()) && ir.peek() != '-')\n\t\t\treturn false;\n\t\tif (isdigit(ir.peek()))\n\t\t\tfirst = last = ir.getInt();\n\t\tir.skipSpace();\n\t\tif (ir.peek() == '-') {\n\t\t\twhile (ir.peek() == '-')\n\t\t\t\tir.get();\n\t\t\tir.skipSpace();\n\t\t\tlast = isdigit(ir.peek()) ? ir.getInt() : max_page;\n\t\t}\n\t\tir.skipSpace();\n\t\tif (ir.peek() == ',') {\n\t\t\tir.get();\n\t\t\tif (ir.eof())\n\t\t\t\treturn false;\n\t\t}\n\t\telse if (!ir.eof() && ir.peek() != ':')\n\t\t\treturn false;\n\t\tif (first > last)\n\t\t\tswap(first, last);\n\t\tfirst = max(1, first);\n\t\tlast  = max(first, last);\n\t\tif (first <= max_page || max_page == 0) {\n\t\t\tif (max_page > 0) {\n\t\t\t\tfirst = min(first, max_page);\n\t\t\t\tlast  = min(last, max_page);\n\t\t\t}\n\t\t\taddRange(first, last);\n\t\t}\n\t}\n\t// apply filter if present\n\tif (ir.peek() == ':') {\n\t\tir.get();\n\t\tstring filterName = ir.getWord();\n\t\tFilterFunc filterFunc;\n\t\tif (filterName == \"even\")\n\t\t\tfilterFunc = &is_even;\n\t\telse if (filterName == \"odd\")\n\t\t\tfilterFunc = &is_odd;\n\t\telse\n\t\t\treturn false;\n\t\t*this = filter(filterFunc);\n\t}\n\treturn true;\n}\n\n\n/** Returns a new PageRanges object that contains only the values\n *  for which the given filter function returns true. */\nPageRanges PageRanges::filter (FilterFunc filterFunc) const {\n\tPageRanges newRanges;\n\tif (filterFunc == nullptr)\n\t\tnewRanges = *this;\n\telse {\n\t\tfor (const auto &range : *this) {\n\t\t\tfor (int i=range.first; i <= range.second; i++)\n\t\t\t\tif (filterFunc(i))\n\t\t\t\t\tnewRanges.addRange(i, i);\n\t\t}\n\t}\n\treturn newRanges;\n}\n\n\n/** Returns the number of pages. */\nsize_t PageRanges::numberOfPages () const {\n\treturn algo::accumulate(*this, 0, [](int sum, const Range &range) {\n\t\treturn sum + range.second - range.first + 1;\n\t});\n}\n"
  },
  {
    "path": "src/PageRanges.hpp",
    "content": "/*************************************************************************\n** PageRanges.hpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PAGERANGES_HPP\n#define PAGERANGES_HPP\n\n#include <string>\n#include \"NumericRanges.hpp\"\n\nclass PageRanges : public NumericRanges<int> {\n\tpublic:\n\t\tbool parse (std::string str, int max_page=0);\n\t\tPageRanges filter (bool (*filterFunc)(int)) const;\n\t\tsize_t numberOfPages () const;\n};\n\n#endif\n"
  },
  {
    "path": "src/PageSize.cpp",
    "content": "/*************************************************************************\n** PageSize.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <algorithm>\n#include <cctype>\n#include <cmath>\n#include <sstream>\n#include \"PageSize.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\n/** Computes width and height of ISO/DIN An.\n *  @param[in]  n the A level (e.g. n=4 => DIN A4)\n *  @param[out] width contains the page width when function returns\n *  @param[out] height contains the page height when function returns */\nstatic void computeASize (int n, Length &width, Length &height) {\n\theight.set(round(1189.0/pow(math::SQRT2, n)), Length::Unit::MM);\n\twidth.set(round(height.mm()/math::SQRT2), Length::Unit::MM);\n}\n\n\n/** Computes width and height of ISO/DIN Bn.\n *  @param[in]  n the B level (e.g. n=4 => DIN B4)\n *  @param[out] width contains the page width when function returns\n *  @param[out] height contains the page height when function returns */\nstatic void computeBSize (int n, Length &width, Length &height) {\n\tLength w, h;\n\tcomputeASize(n, width, height);\n\tcomputeASize(n-1, w, h);\n\twidth.set(round(sqrt(width.mm() * w.mm())), Length::Unit::MM);\n\theight.set(round(sqrt(height.mm() * h.mm())), Length::Unit::MM);\n}\n\n\n/** Computes width and height of ISO/DIN Cn.\n *  @param[in] n the C level (e.g. n=4 => DIN C4)\n *  @param[out] width contains the page width when function returns\n *  @param[out] height contains the page height when function returns */\nstatic void computeCSize (int n, Length &width, Length &height) {\n\tLength w, h;\n\tcomputeASize(n, width, height);\n\tcomputeBSize(n, w, h);\n\twidth.set(round(sqrt(width.mm() * w.mm())), Length::Unit::MM);\n\theight.set(round(sqrt(height.mm() * h.mm())), Length::Unit::MM);\n}\n\n\n/** Computes width and height of ISO/DIN Dn in millimeters.\n *  @param[in] n the D level (e.g. n=4 => DIN D4)\n *  @param[out] width contains the page width when function returns\n *  @param[out] height contains the page height when function returns */\nstatic void computeDSize (int n, Length &width, Length &height) {\n\tLength w, h;\n\tcomputeASize(n, width, height);\n\tcomputeBSize(n+1, w, h);\n\twidth.set(round(sqrt(width.mm() * w.mm())), Length::Unit::MM);\n\theight.set(round(sqrt(height.mm() * h.mm())), Length::Unit::MM);\n}\n\n\n/** Constructs a PageSize object of given size.\n *  @param[in] name specifies the page size, e.g. \"A4\" or \"letter\" */\nPageSize::PageSize (const string &name) : _width(0), _height(0) {\n\tresize(name);\n}\n\n\nvoid PageSize::resize (Length w, Length h) {\n\t_width = w;\n\t_height = h;\n}\n\n\nvoid PageSize::resize (string name) {\n\tif (name.length() < 2)\n\t\tthrow PageSizeException(\"unknown page format: \"+name);\n\n\tname = util::tolower(name);\n\t// extract optional suffix\n\tauto pos = name.rfind('-');\n\tbool landscape = false;\n\tif (pos != string::npos) {\n\t\tstring suffix = name.substr(pos);\n\t\tname.resize(pos);\n\t\tif (suffix == \"-l\" || suffix == \"-landscape\")\n\t\t\tlandscape = true;\n\t\telse if (suffix != \"-p\" && suffix != \"-portrait\")\n\t\t\tthrow PageSizeException(\"invalid page format suffix: \" + suffix);\n\t}\n\n\tif (name == \"invoice\") {\n\t\t_width = 140_mm;\n\t\t_height = 216_mm;\n\t}\n\telse if (name == \"executive\") {\n\t\t_width = 184_mm;\n\t\t_height = 267_mm;\n\t}\n\telse if (name == \"legal\") {\n\t\t_width = 216_mm;\n\t\t_height = 356_mm;\n\t}\n\telse if (name == \"letter\") {\n\t\t_width = 216_mm;\n\t\t_height = 279_mm;\n\t}\n\telse if (name == \"ledger\") {\n\t\t_width = 279_mm;\n\t\t_height = 432_mm;\n\t}\n\telse if (isdigit(name[1]) && name.length() < 5) {  // limit length of number to prevent arithmetic errors\n\t\tistringstream iss(name.substr(1));\n\t\tint n;\n\t\tiss >> n;\n\t\tswitch (name[0]) {\n\t\t\tcase 'a' : computeASize(n, _width, _height); break;\n\t\t\tcase 'b' : computeBSize(n, _width, _height); break;\n\t\t\tcase 'c' : computeCSize(n, _width, _height); break;\n\t\t\tcase 'd' : computeDSize(n, _width, _height); break;\n\t\t\tdefault  : throw PageSizeException(\"invalid page format: \"+name);\n\t\t}\n\t}\n\tif (_width.pt() == 0 || _height.pt() == 0)\n\t\tthrow PageSizeException(\"unknown page format: \"+name);\n\tif (landscape)\n\t\tswap(_width, _height);\n}\n"
  },
  {
    "path": "src/PageSize.hpp",
    "content": "/*************************************************************************\n** PageSize.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PAGESIZE_HPP\n#define PAGESIZE_HPP\n\n#include \"Length.hpp\"\n#include \"MessageException.hpp\"\n\nstruct PageSizeException : MessageException {\n\texplicit PageSizeException (const std::string &msg) : MessageException(msg) {}\n};\n\nclass PageSize {\n\tpublic:\n\t\tPageSize () =default;\n\t\tPageSize (Length w, Length h) : _width(w), _height(h) {}\n\t\texplicit PageSize (const std::string &name);\n\t\tvoid resize (std:: string name);\n\t\tvoid resize (Length w, Length h);\n\t\tLength width () const  {return _width;}\n\t\tLength height () const {return _height;}\n\t\tbool valid () const    {return _width.pt() > 0 && _height.pt() > 0;}\n\n\tprivate:\n\t\tLength _width, _height;\n};\n\n#endif\n"
  },
  {
    "path": "src/Pair.hpp",
    "content": "/*************************************************************************\n** Pair.hpp                                                             **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PAIR_HPP\n#define PAIR_HPP\n\n#include <cmath>\n#include <cstdint>\n#include <ostream>\n#include \"macros.hpp\"\n\ntemplate <typename T>\nclass Pair {\n\tpublic:\n\t\texplicit Pair (T x=0, T y=0) : _x(x), _y(y) {}\n\t\ttemplate <typename U> Pair (const Pair<U> &p) : _x(U(p.x())), _y(U(p.y())) {}\n\t\tPair (const Pair &p) =default;\n\t\tPair (Pair &&p) noexcept =default;\n\t\tPair& operator = (const Pair &p) =default;\n\t\tPair& operator = (Pair &&p) noexcept =default;\n\t\tPair operator += (const Pair &p)       {_x += p._x; _y += p._y; return *this;}\n\t\tPair operator -= (const Pair &p)       {_x -= p._x; _y -= p._y; return *this;}\n\t\tPair operator *= (T c)                 {_x *= c; _y *= c; return *this;}\n\t\tPair operator /= (T c)                 {_x /= c; _y /= c; return *this;}\n\t\tPair operator - () const               {return Pair(-_x, -_y);}\n\t\tPair ortho () const                    {return Pair(-_y, _x);}\n\t\tdouble length () const                 {return std::hypot(_x, _y);}\n\t\tbool operator == (const Pair &p) const {return _x == p._x && _y == p._y;}\n\t\tbool operator != (const Pair &p) const {return _x != p._x || _y != p._y;}\n\t\tT x () const                           {return _x;}\n\t\tT y () const                           {return _y;}\n\t\tvoid x (const T &xx)                   {_x = xx;}\n\t\tvoid y (const T &yy)                   {_y = yy;}\n\t\tstd::ostream& write (std::ostream &os) const {return os << '(' << _x << ',' << _y << ')';}\n\n\tprivate:\n\t\tT _x, _y;\n};\n\ntemplate <typename T>\nPair<T> abs (const Pair<T> &p) {\n\treturn Pair<T>(std::abs(p.x()), std::abs(p.y()));\n}\n\n/** Returns the dot product of two 2D vectors. */\ntemplate <typename T>\nT dot (const Pair<T> &p1, const Pair<T> &p2) {\n\treturn p1.x()*p1.y() + p1.y()*p2.y();\n}\n\n/** Returns the determinant of two 2D vectors. */\ntemplate <typename T>\nT det (const Pair<T> &p1, const Pair<T> &p2) {\n\treturn p1.x()*p2.y() - p1.y()*p2.x();\n}\n\nstruct Pair32 : Pair<int32_t> {\n\texplicit Pair32 (int32_t x=0, int32_t y=0) : Pair(x, y) {}\n\texplicit Pair32 (double x, double y) : Pair(lround(x), lround(y)) {}\n\texplicit Pair32 (const Pair<double> &p) : Pair32(p.x(), p.y()) {}\n\tPair32 (const Pair &p) : Pair(p) {}\n};\n\ntypedef Pair<double> DPair;\n\ninline DPair round (const DPair &p) {\n\treturn DPair(std::lround(p.x()), std::lround(p.y()));\n}\n\n\ntemplate<> template<>\ninline Pair<int>::Pair (const Pair<double> &p) : _x(int(round(p.x()))), _y(int(round(p.y()))) {}\n\n\ntemplate <typename T>\nIMPLEMENT_ARITHMETIC_OPERATOR(Pair<T>, +)\n\ntemplate <typename T>\nIMPLEMENT_ARITHMETIC_OPERATOR(Pair<T>, -)\n\ntemplate <typename T>\nIMPLEMENT_ARITHMETIC_OPERATOR2(Pair<T>, T, *)\n\ntemplate <typename T>\nIMPLEMENT_ARITHMETIC_OPERATOR2(Pair<T>, T, /)\n\ntemplate <typename T>\nIMPLEMENT_OUTPUT_OPERATOR(Pair<T>)\n\nIMPLEMENT_ARITHMETIC_OPERATOR2(Pair32, int32_t, *)\n#endif\n"
  },
  {
    "path": "src/PapersizeSpecialHandler.cpp",
    "content": "/*************************************************************************\n** PapersizeSpecialHandler.cpp                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"algorithm.hpp\"\n#include \"Message.hpp\"\n#include \"PapersizeSpecialHandler.hpp\"\n#include \"SpecialActions.hpp\"\n\nusing namespace std;\n\nvoid PapersizeSpecialHandler::preprocess (const string&, std::istream &is, SpecialActions &actions) {\n\tstring params;\n\tis >> params;\n\tconst auto splitpos = params.find(',');\n\ttry {\n\t\tLength w, h;\n\t\tif (splitpos == string::npos) {\n\t\t\tw.set(params);\n\t\t\th.set(params);\n\t\t}\n\t\telse {\n\t\t\tw.set(params.substr(0, splitpos));\n\t\t\th.set(params.substr(splitpos+1));\n\t\t}\n\t\tstorePaperSize(actions.getCurrentPageNumber(), w, h);\n\t}\n\tcatch (UnitException &) { // ignore invalid length units for now\n\t}\n}\n\n\nbool PapersizeSpecialHandler::process (const string&, std::istream&, SpecialActions&) {\n\treturn true;\n}\n\n\n/** Records a paper size for a given page number for later processing. This function doesn't\n *  assign them to the page. */\nvoid PapersizeSpecialHandler::storePaperSize (unsigned pageno, Length width, Length height) {\n\tDoublePair whpair(width.bp(), height.bp());\n\tif (_pageSizes.empty() || _pageSizes.back().second != whpair) {\n\t\tif (!_pageSizes.empty() && _pageSizes.back().first == pageno)\n\t\t\t_pageSizes.back().second = std::move(whpair);\n\t\telse\n\t\t\t_pageSizes.emplace_back(pageno, whpair);\n\t}\n}\n\n\n/** Applies the previously recorded size to a given page. */\nvoid PapersizeSpecialHandler::applyPaperSize (unsigned pageno, SpecialActions &actions) {\n\t// find page n >= pageno that contains a papersize special\n\tauto lb_it = algo::lower_bound(_pageSizes, PageSize(pageno, DoublePair()),\n\t\t[](const PageSize &ps1, const PageSize &ps2) {\n\t\t\t// order PageSize objects by page number\n\t\t\treturn ps1.first < ps2.first;\n\t\t});\n\tauto it = _pageSizes.end();\n\tif (lb_it != _pageSizes.end() && lb_it->first == pageno)\n\t\tit = lb_it;                        // if current page contains a papersize special, use it\n\telse if (lb_it != _pageSizes.begin()) // no papersize special on current page?\n\t\tit = lb_it-1;                      // => use the one on the nearest preceding page\n\tif (it == _pageSizes.end())\n\t\tMessage::wstream(true) << \"no valid papersize special found\\n\";\n\telse {\n\t\tDoublePair size = it->second;\n\t\tconstexpr double border = -72;  // DVI standard: coordinates of upper left paper corner are (-72bp, -72bp)\n\t\tactions.bbox() = BoundingBox(border, border, size.first+border, size.second+border);\n\t}\n}\n\n\nvoid PapersizeSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actions) {\n\tif (actions.getBBoxFormatString() == \"papersize\")\n\t\tapplyPaperSize(pageno, actions);\n}\n\n\nvector<const char*> PapersizeSpecialHandler::prefixes () const {\n\tvector<const char*> pfx {\"papersize=\"};\n\treturn pfx;\n}\n"
  },
  {
    "path": "src/PapersizeSpecialHandler.hpp",
    "content": "/*************************************************************************\n** PapersizeSpecialHandler.hpp                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PAPERSIZESPECIALHANDLER_HPP\n#define PAPERSIZESPECIALHANDLER_HPP\n\n#include <utility>\n#include <vector>\n#include \"Length.hpp\"\n#include \"SpecialHandler.hpp\"\n\nclass PapersizeSpecialHandler : public SpecialHandler {\n\tusing DoublePair = std::pair<double,double>;       // (width, height)\n\tusing PageSize = std::pair<unsigned,DoublePair>;   // page number -> (width, height)\n\n\tpublic:\n\t\tvoid preprocess (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tbool process (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tconst char* info () const override {return \"special to set the page size\";}\n\t\tconst char* name () const override {return handlerName();}\n\t\tstatic const char* handlerName ()  {return \"papersize\";}\n\t\tstd::vector<const char*> prefixes () const override;\n\t\tvoid storePaperSize (unsigned pageno, Length width, Length height);\n\t\tvoid reset () {_pageSizes.clear();}\n\n\tprotected:\n\t\tvoid dviEndPage (unsigned pageno, SpecialActions &actions) override;\n\t\tvoid applyPaperSize (unsigned pageno, SpecialActions &actions);\n\n\tprivate:\n\t\tstd::vector<PageSize> _pageSizes;\n};\n\n#endif\n"
  },
  {
    "path": "src/PathClipper.cpp",
    "content": "/*************************************************************************\n** PathClipper.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include \"Bezier.hpp\"\n#include \"PathClipper.hpp\"\n\nusing namespace std;\nusing namespace ClipperLib;\n\nusing Polygon = ClipperLib::Path;\nusing Polygons = ClipperLib::Paths;\nusing CurvedPath = PathClipper::CurvedPath;\n\nconstexpr int SCALE_FACTOR = 1000;\n\ninline cInt to_cInt (double x) {\n\treturn static_cast<cInt>(lround(x*SCALE_FACTOR));\n}\n\n\ninline double to_double (cInt x) {\n\treturn static_cast<double>(x)/SCALE_FACTOR;\n}\n\n\ninline DPair to_DPair (const IntPoint &p) {\n\treturn DPair(to_double(p.X), to_double(p.Y));\n}\n\n\n/** In order to flatten a curved path, all path segments are processed sequentially.\n *  Depending on the type of the segment, one of the methods provided by this class\n *  is called. */\nclass FlattenActions : public CurvedPath::IterationActions {\n\tpublic:\n\t\tFlattenActions (vector<CubicBezier> &curves, Polygons &polygons, int &numLines)\n\t\t\t: _polygons(polygons), _curves(curves), _numLines(numLines) {}\n\n\t\tvoid moveto (const CurvedPath::Point &p) override {\n\t\t\tif (p == _currentPoint && !_currentPoly.empty())\n\t\t\t\treturn;\n\t\t\tclosepath();\n\t\t\t_currentPoly.emplace_back(to_cInt(p.x()), to_cInt(p.y()), 0);\n\t\t\t_currentPoint = _startPoint = p;\n\t\t}\n\n\t\tvoid lineto (const CurvedPath::Point &p) override {\n\t\t\tif (p == _currentPoint && !_currentPoly.empty())\n\t\t\t\treturn;\n\t\t\tif (_currentPoly.empty()) // this shouldn't happen but in case it does...\n\t\t\t\t_currentPoly.emplace_back(0, 0, 0); // ...add a start point first\n\t\t\t_numLines--;\n\t\t\t_currentPoly.back().Z.label2 = _numLines;\n\t\t\t_currentPoly.emplace_back(to_cInt(p.x()), to_cInt(p.y()), ZType(_numLines, 0));\n\t\t\t_currentPoint = p;\n\t\t}\n\n\t\tvoid quadto (const CurvedPath::Point &p1, const CurvedPath::Point &p2) override {\n\t\t\tQuadBezier qbezier(_currentPoint, p1, p2);\n\t\t\taddCurvePoints(CubicBezier(qbezier));\n\t\t}\n\n\t\tvoid cubicto (const CurvedPath::Point &p1, const CurvedPath::Point &p2, const CurvedPath::Point &p3) override {\n\t\t\tCubicBezier bezier(_currentPoint, p1, p2, p3);\n\t\t\taddCurvePoints(bezier);\n\t\t}\n\n\t\tvoid closepath () override {\n\t\t\tif (_currentPoly.empty())\n\t\t\t\treturn;\n\t\t\t_numLines--;\n\t\t\t_currentPoly.back().Z.label2 = ZLabel(_numLines, 0);\n\t\t\t_currentPoly.front().Z.label1 = ZLabel(_numLines, 0);\n\t\t\t_polygons.push_back(_currentPoly);\n\t\t\t_currentPoly.clear();\n\t\t}\n\n\t\tvoid finished () override {\n\t\t\tclosepath();\n\t\t}\n\n\tprotected:\n\t\tvoid addCurvePoints (const CubicBezier &bezier) {\n\t\t\tif (_currentPoly.empty()) // this shouldn't happen but in case it does, ...\n\t\t\t\t_currentPoly.emplace_back(0, 0, 0); // ...add a start point first\n\t\t\tvector<DPair> points;  // points of flattened curve\n\t\t\tvector<double> t;      // corresponding 'time' parameters\n\t\t\tbezier.approximate(0.01, points, &t);\n\t\t\tif (points.size() < 2)\n\t\t\t\treturn;\n\t\t\t_curves.push_back(bezier);\n\t\t\tfor (size_t i=1; i < points.size(); i++) {\n\t\t\t\tconst DPair &p = points[i];\n\t\t\t\tif (p == _currentPoint)\n\t\t\t\t\tcontinue;\n\t\t\t\t_currentPoly.back().Z.label2 = ZLabel(_curves.size(), t[i-1]);\n\t\t\t\tZLabel label(_curves.size(), t[i]);\n\t\t\t\t_currentPoly.emplace_back(to_cInt(p.x()), to_cInt(p.y()), ZType(label, label));\n\t\t\t\t_currentPoint = p;\n\t\t\t}\n\t\t}\n\n\tprivate:\n\t\tCurvedPath::Point _startPoint, _currentPoint;\n\t\tPolygon _currentPoly;    ///< polygon being created\n\t\tPolygons &_polygons;     ///< all polygons created\n\t\tvector<CubicBezier> &_curves;\n\t\tint &_numLines;\n};\n\n\n/** Removes adjacent polygon vertices that equal their predecessor. */\nstatic void remove_redundant_vertices (Polygon &polygon) {\n\tauto it1=polygon.begin();\n\twhile (it1 != polygon.end()) {\n\t\tauto it2 = it1+1;\n\t\tif (it2 == polygon.end())\n\t\t\tit2 = polygon.begin();\n\t\tif (it1 == it2)\n\t\t\treturn;\n\n\t\tif (*it1 != *it2)\n\t\t\t++it1;\n\t\telse {\n\t\t\tit1->Z.label2 = it2->Z.label2;\n\t\t\tpolygon.erase(it2);\n\t\t}\n\t}\n}\n\n\n/** Approximates a curved path by a set of polygons and stores information\n *  to reconstruct the curved segments later. The z component of each\n *  polygon vertex holds two integers representing information about the two\n *  adjacent edges the vertex belongs to. This is required to identify the\n *  affected edges and thus the former (curve/line) segment of the path during\n *  the intersection process.\n *  @param[in] curvedPath curved path to be flattened\n *  @param[out] polygons the flattened path (set of polygons) */\nvoid PathClipper::flatten (const CurvedPath &curvedPath, Polygons &polygons) {\n\tFlattenActions flattenActions(_curves, polygons, _numLines);\n\tcurvedPath.iterate(flattenActions, false);\n\tfor (Polygon &poly : polygons)\n\t\tremove_redundant_vertices(poly);\n}\n\n\n/** Returns the ID of the path segment the polygon edge defined by its start\n *  and end point belongs to. The z component of a polygon vertex holds a pair\n *  of labels that allows to identify the original path segments the point belongs to.\n *  Since always two adjacent segments share a point, each point gets two values assigned.\n *  Negative numbers denote line segments, positive ones Bézier curves.\n *  There are only these two segment types, so we don't need further flags in\n *  order to distinguish them. By comparing the labels of two adjacent polygon\n *  vertexes it's possible to identify the original path segment the corresponding\n *  edge belongs to.\n *  @param[in] p1 first of two adjacent vertices\n *  @param[in] p2 second of two adjacent vertices\n *  @param[out] t1 time parameter of p1\n *  @param[out] t2 time parameter of p2\n *  @return id of edge between p1 and p2, or 0 if it's not possible to identify the segment */\nstatic int32_t segment_id (const IntPoint &p1, const IntPoint &p2, double &t1, double &t2) {\n\tconst ZType &z1=p1.Z, &z2=p2.Z;\n\tif (z1 == z2 && z1.minLabel().id < 0) return z1.minLabel().id;\n\tif (z1.label1 == z2.label2) {t1=z1.label1.t; t2=z2.label2.t; return z1.label1.id;}\n\tif (z1.label2 == z2.label1) {t1=z1.label2.t; t2=z2.label1.t; return z1.label2.id;}\n\tif (z1.label1 == z2.label1) {t1=z1.label1.t; t2=z2.label1.t; return z1.label1.id;}\n\tif (z1.label2 == z2.label2) {t1=z1.label2.t; t2=z2.label2.t; return z1.label2.id;}\n\t// if we get here, it's not possible to identify the segment\n\t// => the edge is going to be handled as line segment\n\treturn 0;\n}\n\n\n/** This function expects 3 colinear points p1, p2, and q, where q lies between p1 and p2,\n *  i.e. q divides the line \\f$ \\overline{p_1 p_2} \\f$ somewhere. The function returns\n *  the corresponding division ratio. */\nstatic double division_ratio (const IntPoint &p1, const IntPoint &p2, const IntPoint &q) {\n\tif (p1 == p2 || q == p1)\n\t\treturn 0;\n\tif (q == p2)\n\t\treturn 1;\n\tif (p1.X == p2.X)\n\t\treturn double(q.Y-p1.Y)/(p2.Y-p1.Y);\n\treturn double(q.X-p1.X)/(p2.X-p1.X);\n}\n\n\n/** Returns the label of point q that lies on the line between points p1 and p2. */\ninline ZLabel division_label (const IntPoint &p1, const IntPoint &p2, const IntPoint &q) {\n\tdouble t1=0, t2=0;\n\tdouble s=0;\n\tint32_t id = segment_id(p1, p2, t1, t2);\n\tif (id > 0)\n\t\ts = t1+(t2-t1)*division_ratio(p1, p2, q);\n\treturn {id, s};\n}\n\n\n/** This method is called if the clipper library finds an intersection between two polygon edges.\n *  It populates the z coordinate of the intersection point with the idexes of the two edges.\n *  @param[in] e1bot first endpoint of edge 1\n *  @param[in] e1top second endpoint of edge 1\n *  @param[in] e2bot first endpoint of edge 2\n *  @param[in] e2top second endpoint of edge 2\n *  @param[in] ip intersection point of edge 1 and 2 */\nvoid PathClipper::callback (IntPoint &e1bot, IntPoint &e1top, IntPoint &e2bot, IntPoint &e2top, IntPoint &ip) {\n\tZLabel label1 = division_label(e1bot, e1top, ip);\n\tZLabel label2 = division_label(e2bot, e2top, ip);\n\tip.Z = ZType(label1, label2);\n}\n\n\n/** Iterates along the polygon edges until the endpoint of the current\n *  path segment is found and returns its vector index afterwards.\n *  @param[in] polygon the polygon to be processed\n *  @param[in] start index of the vertex where the iteration starts\n *  @param[out] label if not 0, retrieves the label of the endpoint\n *  @param[in] startLabel if true, the found endpoint is treated as start point and\n *             parameter 'label' gets the corresponding value */\nstatic size_t find_segment_endpoint (const Polygon &polygon, size_t start, ZLabel *label=nullptr, bool startLabel=false) {\n\tif (polygon.empty())\n\t\treturn 0;\n\n\tconst size_t num_points = polygon.size();\n\tint i = start%num_points;\n\tdouble t1=0, t2=0; // time parameters of start and endpoint of current edge\n\tint32_t id1 = segment_id(polygon[i], polygon[(i+1)%num_points], t1, t2);\n\tint32_t id2 = id1;\n\tdouble t = t2; // time parameter of resulting endpoint\n\tfor (size_t j=1; id1 == id2 && j < num_points; j++) {\n\t\tt = t2;\n\t\ti = (i+1)%num_points;\n\t\tif (id1 == 0)\n\t\t\tbreak;\n\t\tid2 = segment_id(polygon[i], polygon[(i+1)%num_points], t1, t2);\n\t}\n\tif (label) {\n\t\t*label = ZLabel(id1, id1 < 0 ? 0 : t);\n\t\tif (startLabel && id1 != 0)\n\t\t\t*label = polygon[i].Z.otherLabel(*label);\n\t}\n\treturn i;\n}\n\n\n/** Reconstructs a curved path from the set of polygons.\n *  @param[in] polygons set of polygons to reconstruct\n *  @param[out] path the reconstructed curved path */\nvoid PathClipper::reconstruct (const Polygons &polygons, CurvedPath &path) const {\n\tfor (const Polygon &polygon : polygons)\n\t\treconstruct(polygon, path);\n}\n\n\n/** Reconstructs a curved path from a single polygon.\n *  @param[in] polygon polygon to reconstruct\n *  @param[out] path the reconstructed curved path */\nvoid PathClipper::reconstruct (const Polygon &polygon, CurvedPath &path) const {\n\tsize_t num_points = polygon.size();\n\tif (num_points < 2)\n\t\treturn;\n\n\tZLabel label1, label2;  // labels of the current segment's start and endpoint\n\tint index1 = find_segment_endpoint(polygon, 0, &label1, true);\n\tint index2 = find_segment_endpoint(polygon, index1, &label2);\n\tint diff = (num_points+index2-index1)%num_points;\n\tpath.moveto(to_DPair(polygon[index1]));\n\tfor (size_t count = diff; count <= num_points; count += diff) {\n\t\tif (diff == 1 || label1.id <= 0)  // line segment?\n\t\t\tpath.lineto(to_DPair(polygon[index2]));\n\t\telse {  // Bézier curve segment\n\t\t\tCubicBezier bezier(_curves[label1.id-1], label1.t, label2.t);\n\t\t\tif (label1.t > label2.t)\n\t\t\t\tbezier.reverse();\n\t\t\tpath.cubicto(bezier.point(1), bezier.point(2), bezier.point(3));\n\t\t}\n\t\tif (label1.id == 0)\n\t\t\tfind_segment_endpoint(polygon, index2, &label1, true);\n\t\telse\n\t\t\tlabel1 = polygon[index2].Z.otherLabel(label2);\n\t\tindex1 = index2;\n\t\tindex2 = find_segment_endpoint(polygon, index1, &label2);\n\t\tdiff = (num_points+index2-index1)%num_points;\n\t}\n\tpath.closepath();\n}\n\n\ninline PolyFillType polyFillType (CurvedPath::WindingRule wr) {\n\treturn (wr == CurvedPath::WindingRule::NON_ZERO) ? pftNonZero : pftEvenOdd;\n}\n\n\n/** Combines two curved paths by applying a boolean operation on them.\n *  @param[in] op operation to perform\n *  @param[in] p1 first curved path\n *  @param[in] p2 second curved path\n *  @return intersection of p1 and p2 */\nCurvedPath PathClipper::combine (ClipType op, const CurvedPath &p1, const CurvedPath &p2) {\n\tCurvedPath result;\n\tif (p1.size() > 1 && p2.size() > 1) {\n\t\tClipper clipper;\n\t\tPolygons polygons;\n\t\tflatten(p1, polygons);\n\t\tclipper.AddPaths(polygons, ptSubject, true);\n\t\tpolygons.clear();\n\t\tflatten(p2, polygons);\n\t\tclipper.AddPaths(polygons, ptClip, true);\n\t\tclipper.ZFillFunction(callback);\n\t\tPolygons flattenedPath;\n\t\tclipper.Execute(op, flattenedPath, polyFillType(p1.windingRule()), polyFillType(p2.windingRule()));\n\t\treconstruct(flattenedPath, result);\n\t}\n\treturn result;\n}\n\n\n/** Returns the intersection of two curved paths. */\nCurvedPath PathClipper::intersect (const CurvedPath &p1, const CurvedPath &p2) {\n\treturn combine(ctIntersection, p1, p2);\n}\n\n\n/** Returns the union of two curved paths. */\nCurvedPath PathClipper::unite (const CurvedPath &p1, const CurvedPath &p2) {\n\treturn combine(ctUnion, p1, p2);\n}\n"
  },
  {
    "path": "src/PathClipper.hpp",
    "content": "/*************************************************************************\n** PathClipper.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PATHCLIPPER_HPP\n#define PATHCLIPPER_HPP\n\n#include <clipper.hpp>\n#include <string>\n#include <vector>\n#include \"Bezier.hpp\"\n#include \"GraphicsPath.hpp\"\n#include \"MessageException.hpp\"\n\n\nusing ClipperLib::IntPoint;\n\nclass PathClipper {\n\tpublic:\n\t\tusing CurvedPath = GraphicsPath<double>;\n\n\tpublic:\n\t\tCurvedPath intersect (const CurvedPath &p1, const CurvedPath &p2);\n\t\tCurvedPath unite (const CurvedPath &p1, const CurvedPath &p2);\n\n\tprotected:\n\t\tCurvedPath combine (ClipperLib::ClipType op, const CurvedPath &p1, const CurvedPath &p2);\n\t\tvoid flatten (const CurvedPath &gp, ClipperLib::Paths &polygons);\n\t\tvoid reconstruct (const ClipperLib::Path &polygon, CurvedPath &path) const;\n\t\tvoid reconstruct (const ClipperLib::Paths &polygons, CurvedPath &path) const;\n\t\tstatic void callback (IntPoint &e1bot, IntPoint &e1top, IntPoint &e2bot, IntPoint &e2top, IntPoint &ip);\n\n\tprivate:\n\t\tstd::vector<CubicBezier> _curves;\n\t\tint _numLines=0;  ///< negative number of straight line segments in path been processed\n};\n\n#endif\n"
  },
  {
    "path": "src/PdfSpecialHandler.cpp",
    "content": "/*************************************************************************\n** PdfSpecialHandler.cpp                                                **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include <cstring>\n#include <unordered_map>\n#include <utility>\n#include \"Color.hpp\"\n#include \"HyperlinkManager.hpp\"\n#include \"InputReader.hpp\"\n#include \"MapLine.hpp\"\n#include \"PdfSpecialHandler.hpp\"\n#include \"FontMap.hpp\"\n#include \"Message.hpp\"\n#include \"PapersizeSpecialHandler.hpp\"\n#include \"PDFParser.hpp\"\n#include \"SpecialActions.hpp\"\n#include \"SpecialManager.hpp\"\n\nusing namespace std;\n\nusing CmdHandler = void (PdfSpecialHandler::*)(StreamInputReader&, SpecialActions&);\n\n\nvoid PdfSpecialHandler::preprocess (const string&, istream &is, SpecialActions &actions) {\n\tStreamInputReader ir(is);\n\tir.skipSpace();\n\tconst string cmdstr = ir.getWord();\n\tstatic unordered_map<string, CmdHandler> commands = {\n\t\t{\"bann\",     &PdfSpecialHandler::preprocessBeginAnn},\n\t\t{\"bannot\",   &PdfSpecialHandler::preprocessBeginAnn},\n\t\t{\"beginann\", &PdfSpecialHandler::preprocessBeginAnn},\n\t\t{\"dest\",     &PdfSpecialHandler::preprocessDest},\n\t\t{\"pagesize\", &PdfSpecialHandler::preprocessPagesize},\n\t\t{\"mapfile\",  &PdfSpecialHandler::preprocessMapfile},\n\t\t{\"mapline\",  &PdfSpecialHandler::preprocessMapline}\n\t};\n\tauto it = commands.find(cmdstr);\n\tif (it != commands.end())\n\t\t(this->*it->second)(ir, actions);\n}\n\n\nbool PdfSpecialHandler::process (const string&, istream &is, SpecialActions &actions) {\n\t_active = true;\n\tStreamInputReader ir(is);\n\tir.skipSpace();\n\tconst string cmdstr = ir.getWord();\n\tir.skipSpace();\n\t// dvipdfm(x) specials currently supported\n\tstatic unordered_map<string, CmdHandler> commands = {\n\t\t{\"bann\",     &PdfSpecialHandler::processBeginAnn},\n\t\t{\"bannot\",   &PdfSpecialHandler::processBeginAnn},\n\t\t{\"beginann\", &PdfSpecialHandler::processBeginAnn},\n\t\t{\"eann\",     &PdfSpecialHandler::processEndAnn},\n\t\t{\"eannot\",   &PdfSpecialHandler::processEndAnn},\n\t\t{\"endann\",   &PdfSpecialHandler::processEndAnn},\n\t\t{\"dest\",     &PdfSpecialHandler::processDest},\n\t\t// No need to handle the following specials here because they have\n\t\t// already been completely processed in the preprocessing stage.\n\t\t{\"pagesize\", nullptr},\n\t\t{\"mapfile\",  nullptr},\n\t\t{\"mapline\",  nullptr}\n\t};\n\tauto it = commands.find(cmdstr);\n\tif (it == commands.end())\n\t\t_ignoreCount++;\n\telse if (it->second)\n\t\t(this->*it->second)(ir, actions);\n\treturn true;\n}\n\n\nstatic char prepare_mode (InputReader &ir) {\n\t// read mode selector ('+', '-', or '=')\n\tchar modechar = '+';           // default mode (append if new, do not replace existing mapping)\n\tif (strchr(\"=+-\", ir.peek()))  // leading modifier given?\n\t\tmodechar = static_cast<char>(ir.get());\n\treturn modechar;\n}\n\n\n/** Sets the page size. This command is similar to the papersize special.\n *  Syntax pdf:pagesize (<dimname> <dimlenhth>)+ */\nvoid PdfSpecialHandler::preprocessPagesize (StreamInputReader &ir, SpecialActions &actions) {\n\t// add page sizes to collection of paper sizes in order to handle them equally\n\tSpecialHandler *handler = SpecialManager::instance().findHandlerByName(\"papersize\");\n\tif (auto papersizeHandler = static_cast<PapersizeSpecialHandler*>(handler)) {\n\t\ttry {\n\t\t\tLength width, height;\n\t\t\t// parse parameter sequence of the form (name length)+\n\t\t\twhile (!ir.eof()) {\n\t\t\t\tstring dimname = ir.getWord();\n\t\t\t\tstring lenstr = ir.getString(\" \\t\");\n\t\t\t\t// only consider width and height settings\n\t\t\t\tif (dimname == \"width\" && !lenstr.empty())\n\t\t\t\t\twidth.set(lenstr);\n\t\t\t\telse if (dimname == \"height\" && !lenstr.empty())\n\t\t\t\t\theight.set(lenstr);\n\t\t\t}\n\t\t\tpapersizeHandler->storePaperSize(actions.getCurrentPageNumber(), width, height);\n\t\t}\n\t\tcatch (UnitException &) { // ignore invalid length units for now\n\t\t}\n\t}\n}\n\n\nvoid PdfSpecialHandler::preprocessMapfile (StreamInputReader &ir, SpecialActions&) {\n\tchar modechar = prepare_mode(ir);\n\tstring fname = ir.getString();\n\tif (!FontMap::instance().read(fname, modechar))\n\t\tMessage::wstream(true) << \"can't open map file \" << fname << '\\n';\n}\n\n\nvoid PdfSpecialHandler::preprocessMapline (StreamInputReader &ir, SpecialActions&) {\n\tchar modechar = prepare_mode(ir);\n\ttry {\n\t\tMapLine mapline(ir.getStream());\n\t\tFontMap::instance().apply(mapline, modechar);\n\t}\n\tcatch (const MapLineException &ex) {\n\t\tMessage::wstream(true) << \"pdf:mapline: \" << ex.what() << '\\n';\n\t}\n}\n\n\n/** Defines a named destination, e.g. a link target.\n * Syntax: dest PDFString PDFDest */\nvoid PdfSpecialHandler::preprocessDest (StreamInputReader &ir, SpecialActions &actions) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(ir, [&](const string &opname, vector<PDFObject> &objects) {\n\t\tif (!opname.empty() && opname[0] == '@') {\n\t\t\tif (opname == \"@thispage\")\n\t\t\t\tobjects.emplace_back(static_cast<int>(actions.getCurrentPageNumber()));\n\t\t\telse if (opname == \"@xpos\")\n\t\t\t\tobjects.emplace_back(actions.getX());\n\t\t\telse if (opname == \"@ypos\")\n\t\t\t\tobjects.emplace_back(actions.getY());\n\t\t}\n\t});\n\tif (objects.size() < 2)\n\t\treturn;\n\tauto name = objects[0].get<string>();\n\tauto dest = objects[1].get<PDFArray>();\n\t// get target info from array [pageno /XYZ xpos ypos zpos]\n\tif (name && dest && dest->size() >= 4 && dest->at(0).get<int>()) {\n\t\tint pageno = *dest->at(0).get<int>();\n\t\tHyperlinkManager::instance().addNameAnchor(*name, pageno);\n\t}\n}\n\n\n/** Extracts the URI from a PDF annotation dictionary. \"GoTo\" targets (named anchors)\n *  are prefixed with a '#'.\n *  @param[in] annotDict annotation dictionary containing the target URI\n *  @return the URI if one was found, \"\" otherwise */\nstatic string get_uri (const PDFDict &annotDict) {\n\t// At the moment, we only support link annotations\n\tconst PDFObject *type = annotDict.get(\"Type\");\n\tif (type && string(*type) == \"Annot\") {\n\t\tconst PDFObject *subtype = annotDict.get(\"Subtype\");\n\t\tif (subtype && string(*subtype) == \"Link\") {\n\t\t\tconst PDFObject *dict = annotDict.get(\"A\");\n\t\t\tif (const PDFDict *actionDict = dict->get<PDFDict>()) {\n\t\t\t\tif (const PDFObject *s = actionDict->get(\"S\")) {\n\t\t\t\t\tif (string(*s) == \"GoTo\") {\n\t\t\t\t\t\tif (const PDFObject *dest = actionDict->get(\"D\"))\n\t\t\t\t\t\t\treturn \"#\" + string(*dest);\n\t\t\t\t\t}\n\t\t\t\t\telse if (string(*s) == \"URI\") {\n\t\t\t\t\t\tif (const PDFObject *uri = actionDict->get(\"URI\"))\n\t\t\t\t\t\t\treturn string(*uri);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\";\n}\n\n\nvoid PdfSpecialHandler::preprocessBeginAnn (StreamInputReader &ir, SpecialActions&) {\n\tPDFParser parser;\n\tvector<PDFObject> pdfobjs = parser.parse(ir);\n\tif (pdfobjs.empty() || !pdfobjs[0].get<PDFDict>())\n\t\treturn;\n\tconst PDFDict &annotDict = *pdfobjs[0].get<PDFDict>();\n\tstring uri = get_uri(annotDict);\n\tif (!uri.empty())\n\t\tHyperlinkManager::instance().addHrefAnchor(uri);\n}\n\n\n/** Converts a PDFObject to a Color, where a single number denotes a gray value.\n *  Number arrays are treated as gray, RGB, or CMYK colors depending on the\n *  number of components. */\nstatic Color to_color (const PDFObject &obj) {\n\tColor color;\n\tif (obj.get<int>() || obj.get<double>())\n\t\tcolor.setGray(double(obj));\n\telse if (auto colorArray = obj.get<PDFArray>()) {\n\t\tsize_t size = min(size_t(4), colorArray->size());\n\t\tvalarray<double> colorComps(size);\n\t\tfor (size_t i=0; i < size; i++)\n\t\t\tcolorComps[i] = double(colorArray->at(i));\n\t\tswitch (size) {\n\t\t\tcase 1: color.setGray(colorComps); break;\n\t\t\tcase 3: color.setRGB(colorComps); break;\n\t\t\tcase 4: color.setCMYK(colorComps); break;\n\t\t}\n\t}\n\treturn color;\n}\n\n\n/** Begins a breakable annotation, e.g. a hyperlink.\n *  Syntax: beginann PDFDict */\nvoid PdfSpecialHandler::processBeginAnn (StreamInputReader &ir, SpecialActions &actions) {\n\tPDFParser parser;\n\tvector<PDFObject> pdfobjs = parser.parse(ir);\n\tif (pdfobjs.empty() || !pdfobjs[0].get<PDFDict>())\n\t\treturn;\n\tconst PDFDict &annotDict = *pdfobjs[0].get<PDFDict>();\n\tstring uri = get_uri(annotDict);\n\tif (uri.empty())\n\t\treturn;\n\n\t// check presence of entry /Border [hr vr bw] defining the horizontal/vertical\n\t// corner radius and the border width\n\tauto it = annotDict.find(\"Border\");\n\tif (it != annotDict.end() && it->second.get<PDFArray>() && it->second.get<PDFArray>()->size() > 2)\n\t\tHyperlinkManager::instance().setLineWidth(double(it->second.get<PDFArray>()->at(2)));\n\n\t// check presence of entry /C defining the border color\n\tit = annotDict.find(\"C\");\n\tif (it != annotDict.end())\n\t\tHyperlinkManager::setDefaultLinkColor(to_color(it->second));\n\tHyperlinkManager::instance().createLink(std::move(uri), actions);\n}\n\n\n/** Terminates the preceding breakable annotation.\n *  Syntax: endann */\nvoid PdfSpecialHandler::processEndAnn (StreamInputReader&, SpecialActions &actions) {\n\tHyperlinkManager::instance().closeAnchor(actions);\n}\n\n\nvoid PdfSpecialHandler::processDest (StreamInputReader &ir, SpecialActions &actions) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(ir);\n\tif (!objects.empty()) {\n\t\tif (auto name = objects[0].get<string>())\n\t\t\tHyperlinkManager::instance().setActiveNameAnchor(*name, actions);\n\t}\n}\n\n\n/** This method is called every time the DVI position changes. */\nvoid PdfSpecialHandler::dviMovedTo (double x, double y, SpecialActions &actions) {\n\tif (_active)\n\t\tHyperlinkManager::instance().checkNewLine(actions);\n}\n\n\nvoid PdfSpecialHandler::dviEndPage (unsigned pageno, SpecialActions &actions) {\n\tif (_active) {\n\t\tHyperlinkManager::instance().createViews(pageno, actions);\n\t\t_active = false;\n\t}\n\tif (_ignoreCount > 0) {\n\t\tstring suffix = (_ignoreCount > 1 ? \"s\" : \"\");\n\t\tMessage::wstream(true) << _ignoreCount << \" PDF special\" << suffix << \" ignored.\"\n\t\t\t<< \" The resulting SVG might look wrong.\\n\";\n\t\t_ignoreCount = 0;\n\t}\n}\n\n\nvector<const char*> PdfSpecialHandler::prefixes () const {\n\tvector<const char*> pfx {\"pdf:\"};\n\treturn pfx;\n}\n"
  },
  {
    "path": "src/PdfSpecialHandler.hpp",
    "content": "/*************************************************************************\n** PdfSpecialHandler.hpp                                                **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PDFSPECIALHANDLER_HPP\n#define PDFSPECIALHANDLER_HPP\n\n#include \"SpecialHandler.hpp\"\n\nclass StreamInputReader;\n\nclass PdfSpecialHandler : public SpecialHandler {\n\tpublic:\n\t\tvoid preprocess (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tbool process (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tconst char* info () const override {return \"PDF hyperlink, font map, and pagesize specials\";}\n\t\tconst char* name () const override {return handlerName();}\n\t\tstatic const char* handlerName ()  {return \"pdf\";}\n\t\tstd::vector<const char*> prefixes () const override;\n\n\tprotected:\n\t\t// handlers for corresponding PDF specials\n\t\tvoid preprocessBeginAnn (StreamInputReader &ir, SpecialActions &actions);\n\t\tvoid preprocessDest (StreamInputReader &ir, SpecialActions &actions);\n\t\tvoid preprocessPagesize (StreamInputReader &ir, SpecialActions &actions);\n\t\tvoid preprocessMapfile (StreamInputReader &ir, SpecialActions &actions);\n\t\tvoid preprocessMapline (StreamInputReader &ir, SpecialActions &actions);\n\t\tvoid processBeginAnn (StreamInputReader &ir, SpecialActions &actions);\n\t\tvoid processEndAnn (StreamInputReader &ir, SpecialActions &actions);\n\t\tvoid processDest (StreamInputReader &ir, SpecialActions &actions);\n\n\t\tvoid dviMovedTo (double x, double y, SpecialActions &actions) override;\n\t\tvoid dviEndPage (unsigned pageno, SpecialActions &actions) override;\n\n\tprivate:\n\t\tbool _active=false;\n\t\tunsigned _ignoreCount=0;  ///< number of ignored PDF specials\n};\n\n#endif\n"
  },
  {
    "path": "src/PreScanDVIReader.cpp",
    "content": "/*************************************************************************\n** PreScanDVIReader.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"DVIActions.hpp\"\n#include \"PreScanDVIReader.hpp\"\n\nusing namespace std;\n\n\nPreScanDVIReader::PreScanDVIReader (std::istream &is, DVIActions *actions)\n\t: BasicDVIReader(is), _actions(actions)\n{\n}\n\n\nvoid PreScanDVIReader::cmdBop (int) {\n\t_currentPageNumber++;\n\tBasicDVIReader::cmdBop(0);\n}\n\n\nvoid PreScanDVIReader::cmdXXX (int len) {\n\tuint32_t numBytes = readUnsigned(len);\n\tstring s = readString(numBytes);\n\tif (_actions)\n\t\t_actions->special(s, 0, true);  // pre-process special\n}\n"
  },
  {
    "path": "src/PreScanDVIReader.hpp",
    "content": "/*************************************************************************\n** PreScanDVIReader.hpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PRESCANDVIREADER_HPP\n#define PRESCANDVIREADER_HPP\n\n#include \"BasicDVIReader.hpp\"\n\nstruct DVIActions;\n\nclass PreScanDVIReader : public BasicDVIReader {\n\tpublic:\n\t\tPreScanDVIReader (std::istream &is, DVIActions *actions);\n\t\tunsigned currentPageNumber () const override {return _currentPageNumber;}\n\n\tprotected:\n\t\tvoid cmdBop (int) override;\n\t\tvoid cmdXXX (int len) override;\n\n\tprivate:\n\t\tDVIActions *_actions;\n\t\tunsigned _currentPageNumber=0;\n};\n\n#endif\n"
  },
  {
    "path": "src/Process.cpp",
    "content": "/*************************************************************************\n** Process.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifdef _WIN32\n\t#include \"windows.hpp\"\n#else\n\t#include <csignal>\n\t#include <cstring>\n\t#include <fcntl.h>\n\t#include <sys/wait.h>\n\t#include <unistd.h>\n#endif\n\n#include <cstdlib>\n#include <regex>\n#include \"FileSystem.hpp\"\n#include \"Process.hpp\"\n#include \"SignalHandler.hpp\"\n\nusing namespace std;\n\n\n/** Helper class that encapsulates the system-specific parts of\n *  running a subprocess and retrieving its terminal output. */\nclass Subprocess {\n\tpublic:\n\t\tenum class State {RUNNING, FINISHED, FAILED};\n\n\tpublic:\n\t\tSubprocess () : _rdbuf(4096) {}\n\t\tSubprocess (const Subprocess&) =delete;\n\t\tSubprocess (Subprocess&&) =delete;\n\t\t~Subprocess ();\n\t\tbool run (const string &cmd, string params, Process::PipeFlags flags);\n\t\tbool readFromPipe (string &out, const SearchPattern &pattern);\n\t\tState state ();\n\n\tprotected:\n\t\tstring read (const SearchPattern &pattern, bool *error=nullptr);\n\t\tsize_t readFromPipe (char *buf, size_t size, bool *error=nullptr) const;\n\n\tprivate:\n\t\tvector<char> _rdbuf;\n\t\tsize_t _bufstartpos = 0;\n#ifdef _WIN32\n\t\tHANDLE _pipeReadHandle = nullptr;   ///< handle of read end of pipe\n\t\tHANDLE _childProcHandle = nullptr;  ///< handle of child process\n#else\n\t\tint _readfd = -1; ///< file descriptor of read end of pipe\n\t\tpid_t _pid = -1;  ///< PID of the subprocess\n#endif\n};\n\n\nstring Subprocess::read (const SearchPattern &pattern, bool *error) {\n\tstring result;\n\tconst size_t bytesRead = readFromPipe(&_rdbuf[_bufstartpos], _rdbuf.size()-_bufstartpos, error);\n\tconst size_t bufendpos = _bufstartpos + bytesRead;\n\tsmatch matches;\n\tsize_t matchendpos = bufendpos;  // buffer position after last match\n\tif (pattern.search.empty())\n\t\tresult.assign(_rdbuf.data(), matchendpos);\n\telse {\n\t\tbool matched=false;\n\t\tregex re(pattern.search);\n\t\tfor (auto it = cregex_iterator(&_rdbuf[0], &_rdbuf[0]+bufendpos, re); it != cregex_iterator(); ++it) {\n\t\t\tresult += it->format(pattern.replace, regex_constants::format_no_copy);\n\t\t\tmatchendpos = it->position() + it->length();\n\t\t\tmatched = true;\n\t\t}\n\t\tconstexpr size_t MAX_OVERLAP=50;\n\t\tsize_t overlappos;\n\t\tif (matched)\n\t\t\toverlappos = max(bufendpos - min(bufendpos, MAX_OVERLAP), matchendpos);\n\t\telse\n\t\t\toverlappos = matchendpos - min(MAX_OVERLAP, matchendpos);\n\t\tstd::copy(_rdbuf.begin()+overlappos, _rdbuf.begin()+bufendpos, _rdbuf.begin());\n\t\t_bufstartpos = bufendpos-overlappos;\n\t}\n\treturn result;\n}\n\n\nProcess::Process (string cmd, string paramstr)\n\t: _cmd(std::move(cmd)), _paramstr(std::move(paramstr))\n{\n}\n\n\n/** Runs the process and waits until it's finished.\n *  @param[out] out takes the output written to stdout by the executed subprocess\n *  @return true if process terminated properly\n *  @throw SignalException if CTRL-C was pressed during execution */\n\nbool Process::run (string *out, PipeFlags flags) const {\n\treturn run(out, SearchPattern(), flags);\n}\n\n\nbool Process::run (string *out, const SearchPattern &pattern, PipeFlags flags) const {\n\tSubprocess subprocess;\n\tif (!subprocess.run(_cmd, _paramstr, flags))\n\t\treturn false;\n\tif (out)\n\t\tout->clear();\n\tfor (;;) {\n\t\tif (out)\n\t\t\tsubprocess.readFromPipe(*out, pattern);\n\t\tSubprocess::State state = subprocess.state();\n\t\tif (state != Subprocess::State::RUNNING)\n\t\t\treturn state == Subprocess::State::FINISHED;\n\t\tSignalHandler::instance().check();\n\t}\n}\n\n\n/** Runs the process in the given working directory and waits until it's finished.\n *  @param[in] dir working directory\n *  @param[out] out takes the output written to stdout by the executed process\n *  @return true if process terminated properly\n *  @throw SignalException if CTRL-C was pressed during execution */\nbool Process::run (const string &dir, string *out, PipeFlags flags) const {\n\tbool ret = false;\n\tstring cwd = FileSystem::getcwd();\n\tif (FileSystem::chdir(dir)) {\n\t\tret = run(out, flags);\n\t\tret &= FileSystem::chdir(cwd);\n\t}\n\treturn ret;\n}\n\n// system-specific stuff\n\n#ifdef _WIN32\n\nstatic inline void close_and_zero_handle (HANDLE &handle) {\n\tCloseHandle(handle);\n\thandle = nullptr;\n}\n\n\nSubprocess::~Subprocess () {\n\tif (_pipeReadHandle != nullptr)\n\t\tCloseHandle(_pipeReadHandle);\n\tif (_childProcHandle != nullptr) {\n\t\tTerminateProcess(_childProcHandle, 1);\n\t\tCloseHandle(_childProcHandle);\n\t}\n}\n\n\n/** Retrieves output generated by the child process and optionally filters\n *  the lines by a regular expression and replaces them. If the search pattern\n *  is not empty and the line currently processed doesn't match, the line isn't\n *  appended to the output string.\n *  @param[out] out read output is appended to this string\n *  @param[in] pattern regex pattern applied to each line\n *  @returns false on errors */\nbool Subprocess::readFromPipe (string &out, const SearchPattern &pattern) {\n\tif (!_pipeReadHandle)\n\t\treturn false;\n\tbool finished=false;\n\tbool processExited=false;\n\tDWORD len=0;\n\twhile (PeekNamedPipe(_pipeReadHandle, nullptr, 0, nullptr, &len, nullptr)) {  // prevent blocking\n\t\tif (len == 0) {\n\t\t\tif (processExited)\n\t\t\t\tbreak;\n\t\t\t// process still busy\n\t\t\tprocessExited = (!_childProcHandle || WaitForSingleObject(_childProcHandle, 100) != WAIT_TIMEOUT);\n\t\t}\n\t\tstring buf = read(pattern, &finished);\n\t\tif (buf.empty())\n\t\t\tbreak;\n\t\tout.append(buf);\n\t}\n\treturn !finished;\n}\n\n\n/** Reads a sequence of bytes from the pipe into a buffer. The function stops reading\n *  when either all bytes have been read from the pipe or the buffer is completely filled.\n *  @param[in] buf pointer to start of the buffer\n *  @param[in] size maximal number of bytes that can be stored in the buffer\n *  @return number of bytes read */\nsize_t Subprocess::readFromPipe (char *buf, size_t size, bool *error) const {\n\tDWORD bytesRead;\n\tbool success = ReadFile(_pipeReadHandle, buf, size, &bytesRead, nullptr);\n\tif (error)\n\t\t*error = !success;\n\treturn success ? bytesRead : 0;\n}\n\n\n/** Starts a child process.\n *  @param[in] cmd name of command to execute\n *  @param[in] paramstr parameters required by command\n *  @returns true if child process started properly */\nbool Subprocess::run (const string &cmd, string paramstr, Process::PipeFlags flags) {\n\tSECURITY_ATTRIBUTES securityAttribs;\n\tZeroMemory(&securityAttribs, sizeof(SECURITY_ATTRIBUTES));\n\tsecurityAttribs.nLength = sizeof(SECURITY_ATTRIBUTES);\n\tsecurityAttribs.bInheritHandle = true;\n\n\tHANDLE pipeWriteHandle; // write end of pipe\n\tif (CreatePipe(&_pipeReadHandle, &pipeWriteHandle, &securityAttribs, 0) == ERROR_INVALID_HANDLE)\n\t\treturn false;\n\n\tSetHandleInformation(_pipeReadHandle, HANDLE_FLAG_INHERIT, 0);\n\tHANDLE nullFile = CreateFile(\"NUL\", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, &securityAttribs, OPEN_EXISTING, 0, nullptr);\n\tbool success = false;\n\tif (nullFile != INVALID_HANDLE_VALUE) {\n\t\tSTARTUPINFO startupInfo;\n\t\tZeroMemory(&startupInfo, sizeof(STARTUPINFO));\n\t\tstartupInfo.cb = sizeof(STARTUPINFO);\n\t\tstartupInfo.dwFlags = STARTF_USESTDHANDLES;\n\t\tstartupInfo.hStdInput = nullFile;\n\t\tstartupInfo.hStdOutput = (flags & Process::PF_STDOUT) ? pipeWriteHandle : nullFile;\n\t\tstartupInfo.hStdError = (flags & Process::PF_STDERR) ? pipeWriteHandle : nullFile;\n\n\t\tPROCESS_INFORMATION processInfo;\n\t\tZeroMemory(&processInfo, sizeof(PROCESS_INFORMATION));\n\n\t\tstring cmdline = cmd + \" \" + paramstr;\n\t\t// put subprocess in separate process group to prevent its termination in case of CTRL-C\n\t\tsuccess = CreateProcess(nullptr, (LPSTR)cmdline.c_str(), nullptr, nullptr, true, CREATE_NEW_PROCESS_GROUP, nullptr, nullptr, &startupInfo, &processInfo);\n\t\tif (success) {\n\t\t\t_childProcHandle = processInfo.hProcess;\n\t\t\tCloseHandle(processInfo.hThread);\n\t\t}\n\t\tCloseHandle(nullFile);\n\t}\n\tCloseHandle(pipeWriteHandle);  // must be closed before reading from pipe to prevent blocking\n\tif (!success)\n\t\tclose_and_zero_handle(_pipeReadHandle);\n\treturn success;\n}\n\n\n/** Returns the current state of the child process. */\nSubprocess::State Subprocess::state () {\n\tDWORD status;\n\tif (!GetExitCodeProcess(_childProcHandle, &status))\n\t\treturn State::FAILED;\n\tif (status == STILL_ACTIVE)\n\t\treturn State::RUNNING;\n\tclose_and_zero_handle(_childProcHandle);\n\treturn status == 0 ? State::FINISHED : State::FAILED;\n}\n\n#else  // !_WIN32\n\nSubprocess::~Subprocess () {\n\tif (_readfd >= 0)\n\t\tclose(_readfd);\n\tif (_pid > 0)\n\t\tkill(_pid, SIGKILL);\n}\n\n\n/** Retrieves output generated by child process.\n *  @param[out] out read output is appended to this string\n *  @returns false on errors */\nbool Subprocess::readFromPipe (string &out, const SearchPattern &pattern) {\n\tif (_readfd < 0 || _pid < 0)\n\t\treturn false;\n\tbool finished=false;\n\tfor (;;) {\n\t\tstring buf = read(pattern, &finished);\n\t\tif (buf.empty())\n\t\t\tbreak;\n\t\tout.append(buf);\n\t}\n\tif (finished) {\n\t\tclose(_readfd);\n\t\t_readfd = -1;\n\t}\n\treturn !finished;\n}\n\n\nsize_t Subprocess::readFromPipe (char *buf, size_t size, bool *error) const {\n\tauto len = ::read(_readfd, buf, size);\n\tif (error)\n\t\t*error = len < 0;\n\treturn len >= 0 ? size_t(len) : 0;\n}\n\n/** Extracts whitespace-separated parameters from a string.\n *  @param[in,out] paramstr the parameter string\n *  @param[out] params vector holding pointers to the extracted parameters */\nstatic void split_paramstr (string &paramstr, vector<const char*> &params) {\n\tsize_t left=0, right=0;  // index of first and last character of current parameter\n\tchar quote=0;            // current quote character, 0=none\n\tconst size_t len = paramstr.length();\n\twhile (left <= right && right < len) {\n\t\twhile (left < len && isspace(paramstr[left]))\n\t\t\t++left;\n\t\tif (left < len && (paramstr[left] == '\"' || paramstr[left] == '\\''))\n\t\t\tquote = paramstr[left++];\n\t\tright = left;\n\t\twhile (right < len && (quote || !isspace(paramstr[right]))) {\n\t\t\tif (quote && paramstr[right] == quote) {\n\t\t\t\tquote=0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse\n\t\t\t\t++right;\n\t\t}\n\t\tif (right < len)\n\t\t\tparamstr[right]=0;\n\t\tif (left < len)\n\t\t\tparams.push_back(&paramstr[left]);\n\t\tleft = ++right;\n\t}\n}\n\n\n/** Starts a child process.\n *  @param[in] cmd name of command to execute or absolute path to executable\n *  @param[in] paramstr parameters required by the command\n *  @returns true if child process started properly */\nbool Subprocess::run (const string &cmd, string paramstr, Process::PipeFlags flags) {\n\tint pipefd[2];\n\tif (cmd.empty() || pipe(pipefd) < 0)\n\t\treturn false;\n\n\t_pid = fork();\n\tif (_pid < 0) {\n\t\tclose(pipefd[0]);\n\t\tclose(pipefd[1]);\n\t\treturn false;\n\t}\n\tif (_pid == 0) {   // child process\n\t\tint devnull = open(\"/dev/null\", O_WRONLY);\n\t\tdup2((flags & Process::PF_STDOUT) ? pipefd[1] : devnull, STDOUT_FILENO);  // redirect stdout to the pipe\n\t\tdup2((flags & Process::PF_STDERR) ? pipefd[1] : devnull, STDERR_FILENO);  // redirect stdout to the pipe\n\t\tclose(pipefd[0]);\n\t\tclose(pipefd[1]);\n\t\tclose(devnull);\n\n\t\tvector<const char*> params;\n\t\tparams.push_back(cmd.c_str());\n\t\tsplit_paramstr(paramstr, params);\n\t\tparams.push_back(nullptr);  // trailing null pointer marks end of parameter list\n\t\tsignal(SIGINT, SIG_IGN);    // child process is supposed to ignore ctrl-c events\n\t\tif (params[0][0] == '/')    // absolute path to executable?\n\t\t\tparams[0] = strrchr(params[0], '/')+1;  // filename of executable\n\t\texecvp(cmd.c_str(), const_cast<char* const*>(params.data()));\n\t\texit(1);\n\t}\n\t_readfd = pipefd[0];\n\tclose(pipefd[1]);  // close write end of pipe\n\treturn true;\n}\n\n\n/** Returns the current state of the child process. */\nSubprocess::State Subprocess::state () {\n\tint status;\n\tpid_t wpid = waitpid(_pid, &status, WNOHANG);\n\tif (wpid == 0)\n\t\treturn State::RUNNING;  // still running\n\t_pid = -1;\n\tif (wpid > 0 && WIFEXITED(status) && WEXITSTATUS(status) == 0)\n\t\treturn State::FINISHED;\n\treturn State::FAILED;\n}\n\n#endif  // !_WIN32\n"
  },
  {
    "path": "src/Process.hpp",
    "content": "/*************************************************************************\n** Process.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PROCESS_HPP\n#define PROCESS_HPP\n\n#include <string>\n\nstruct SearchPattern {\n\tSearchPattern () =default;\n\n\texplicit SearchPattern (std::string searchRegex)\n\t\t: search(std::move(searchRegex)) {}\n\n\tSearchPattern (std::string searchRegex, std::string replExpr)\n\t\t: search(std::move(searchRegex)), replace(std::move(replExpr)) {}\n\n\tstd::string search;\n\tstd::string replace;\n};\n\n\nclass Process {\n\tpublic:\n\t\tenum PipeFlags {PF_STDOUT=1, PF_STDERR=2};\n\n\t\tProcess (std::string cmd, std::string paramstr);\n\t\tProcess (const Process &orig) =delete;\n\t\tProcess (Process &&orig) =delete;\n\t\tbool run (std::string *out=nullptr, PipeFlags flags=PF_STDOUT) const;\n\t\tbool run (const std::string &dir, std::string *out=nullptr, PipeFlags flags=PF_STDOUT) const;\n\t\tbool run (std::string *out, const SearchPattern &pattern, PipeFlags flags=PF_STDOUT) const;\n\n\tprivate:\n\t\tstd::string _cmd;\n\t\tconst std::string _paramstr;\n};\n\n#endif\n\n"
  },
  {
    "path": "src/PsSpecialHandler.cpp",
    "content": "/*************************************************************************\n** PsSpecialHandler.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include <cmath>\n#include <memory>\n#include <sstream>\n#include \"FileFinder.hpp\"\n#include \"FilePath.hpp\"\n#include \"FileSystem.hpp\"\n#include \"InputReader.hpp\"\n#include \"Message.hpp\"\n#include \"PathClipper.hpp\"\n#include \"PSPattern.hpp\"\n#include \"PSPreviewHandler.hpp\"\n#include \"PsSpecialHandler.hpp\"\n#include \"SpecialActions.hpp\"\n#include \"SVGElement.hpp\"\n#include \"TensorProductPatch.hpp\"\n#include \"TriangularPatch.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\nbool PsSpecialHandler::COMPUTE_CLIPPATHS_INTERSECTIONS = false;\nbool PsSpecialHandler::SHADING_SEGMENT_OVERLAP = false;\nint PsSpecialHandler::SHADING_SEGMENT_SIZE = 20;\ndouble PsSpecialHandler::SHADING_SIMPLIFY_DELTA = 0.01;\nstring PsSpecialHandler::BITMAP_FORMAT;\n\n\nPsSpecialHandler::PsSpecialHandler () : _psi(this), _previewHandler(_psi)\n{\n\t_psi.setImageDevice(BITMAP_FORMAT);\n}\n\n\nPsSpecialHandler::~PsSpecialHandler () {\n\t_psi.setActions(nullptr);     // ensure no further PS actions are performed\n}\n\n\n/** Initializes the PostScript handler. It's called by the first use of process(). The\n *  deferred initialization speeds up the conversion of DVI files that doesn't contain\n *  PS specials. */\nvoid PsSpecialHandler::initialize () {\n\tif (_psSection == PS_NONE) {\n\t\tinitgraphics();\n\t\t// execute dvips prologue/header files\n\t\tfor (const char *fname : {\"tex.pro\", \"texps.pro\", \"special.pro\", \"color.pro\"})\n\t\t\tprocessHeaderFile(fname);\n\t\t// disable bop/eop operators to prevent side-effects by\n\t\t// unexpected bops/eops present in PS specials\n\t\t_psi.execute(\"\\nTeXDict begin /bop{pop pop}def /eop{}def end \");\n\t\t_psSection = PS_HEADERS;  // allow to process header specials now\n\t}\n}\n\n\n/** Set initial values of PS graphics state (see PS language reference (Red Book)), p. 612). */\nvoid PsSpecialHandler::initgraphics () {\n\t_linewidth = 1;\n\t_linecap = _linejoin = 0;  // butt end caps and miter joins\n\t_miterlimit = 4;\n\t_xmlnode = _savenode = nullptr;\n\t_isshapealpha = false;     // opacity operators change constant component by default\n\t_opacity = Opacity();\n\t_sx = _sy = _cos = 1.0;\n\t_pattern = nullptr;\n\t_makingPattern = false;\n\t_patternEnabled = false;\n\t_currentcolor = Color::BLACK;\n\t_dashoffset = 0;\n\t_dashpattern.clear();\n\t_path.clear();\n\t_clipStack.clear();\n}\n\n\nvoid PsSpecialHandler::processHeaderFile (const char *name) {\n\tif (const char *path = FileFinder::instance().lookup(name, false)) {\n\t\tifstream ifs(path);\n\t\t_psi.execute(string(\"%%BeginProcSet: \")+name+\" 0 0\\n\", false);\n\t\t_psi.execute(ifs, false);\n\t\t_psi.execute(\"%%EndProcSet\\n\", false);\n\t}\n\telse\n\t\tMessage::wstream(true) << \"PostScript header file \" << name << \" not found\\n\";\n}\n\n\nvoid PsSpecialHandler::enterBodySection () {\n\tif (_psSection == PS_HEADERS) {\n\t\t_psSection = PS_BODY; // don't process any PS header code\n\t\tostringstream oss;\n\t\t// process collected header code\n\t\tif (!_headerCode.empty()) {\n\t\t\toss << \"\\nTeXDict begin @defspecial \" << _headerCode << \"\\n@fedspecial end\";\n\t\t\t_headerCode.clear();\n\t\t}\n\t\t// push dictionary \"TeXDict\" with dvips definitions on dictionary stack\n\t\t// and initialize basic dvips PostScript variables\n\t\toss << \"\\nTeXDict begin 0 0 1000 72 72 () @start 0 0 moveto \";\n\t\t_psi.execute(oss.str(), false);\n\t\t// Check for information generated by preview.sty. If the tightpage options\n\t\t// was set, don't execute the bop-hook but allow the PS filter to read\n\t\t// the bbox data present at the beginning of the page.\n\t\t_previewHandler.init();\n\t\tif (!_previewHandler.tightpage())\n\t\t\t_psi.execute(\"userdict/bop-hook known{bop-hook}if\\n\", false);\n\t}\n}\n\n\n/** Move PS graphic position to current DVI location. */\nvoid PsSpecialHandler::moveToDVIPos () {\n\tif (_actions) {\n\t\tconst double x = _actions->getX();\n\t\tconst double y = _actions->getY();\n\t\tostringstream oss;\n\t\toss << '\\n' << x << ' ' << y << \" moveto \";\n\t\t_psi.execute(oss.str());\n\t\t_currentpoint = DPair(x, y);\n\t}\n}\n\n\n/** Executes a PS fragment and optionally synchronizes the DVI cursor position\n *  with the current PS point.\n *  @param[in] is  stream to read the PS code from\n *  @param[in] updatePos if true, move the DVI drawing position to the current PS point */\nvoid PsSpecialHandler::executeAndSync (istream &is, bool updatePos) {\n\tif (_actions && _actions->getFillColor() != _currentcolor) {\n\t\t// update the PS graphics state if the color has been changed by a color special\n\t\tdouble r, g, b;\n\t\t_actions->getFillColor().getRGB(r, g, b);\n\t\tostringstream oss;\n\t\toss << '\\n' << r << ' ' << g << ' ' << b << \" setrgbcolor \";\n\t\t_psi.execute(oss.str(), false);\n\t}\n\t_psi.execute(is);\n\tif (updatePos) {\n\t\t// retrieve current PS position (stored in _currentpoint)\n\t\t_psi.execute(\"\\nquerypos \");\n\t\tif (_actions) {\n\t\t\t_actions->setX(_currentpoint.x());\n\t\t\t_actions->setY(_currentpoint.y());\n\t\t}\n\t}\n}\n\n\nvoid PsSpecialHandler::preprocess (const string &prefix, istream &is, SpecialActions &actions) {\n\tinitialize();\n\tif (_psSection != PS_HEADERS)\n\t\treturn;\n\n\t_actions = &actions;\n\tif (prefix == \"!\") {\n\t\t_headerCode += \"\\n\";\n\t\t_headerCode += string(istreambuf_iterator<char>(is), istreambuf_iterator<char>());\n\t}\n\telse if (prefix == \"header=\") {\n\t\t// read and execute PS header file\n\t\tstring fname;\n\t\tis >> fname;\n\t\tprocessHeaderFile(fname.c_str());\n\t}\n}\n\n\nstatic string filename_suffix (const string &fname) {\n\tstring ret;\n\tauto pos = fname.rfind('.');\n\tif (pos != string::npos)\n\t\tret = util::tolower(fname.substr(pos+1));\n\treturn ret;\n}\n\n\nbool PsSpecialHandler::process (const string &prefix, istream &is, SpecialActions &actions) {\n\t// process PS headers only once (in prescan)\n\tif (prefix == \"!\" || prefix == \"header=\")\n\t\treturn true;\n\n\t_actions = &actions;\n\tinitialize();\n\tif (_psSection != PS_BODY)\n\t\tenterBodySection();\n\n\tif (prefix == \"\\\"\" || prefix == \"pst:\") {\n\t\t// read and execute literal PostScript code (isolated by a wrapping save/restore pair)\n\t\tmoveToDVIPos();\n\t\t_psi.execute(\"\\n@beginspecial @setspecial \");\n\t\texecuteAndSync(is, false);\n\t\t_psi.execute(\"\\n@endspecial \");\n\t}\n\telse if (prefix == \"psfile=\" || prefix == \"PSfile=\" || prefix == \"pdffile=\") {\n\t\tif (_actions) {\n\t\t\tStreamInputReader in(is);\n\t\t\tstring fname = in.getQuotedString(in.peek() == '\"' ? \"\\\"\" : nullptr);\n\t\t\tfname = FileSystem::ensureForwardSlashes(fname);\n\t\t\tFileType fileType = FileType::EPS;\n\t\t\tif (prefix == \"pdffile=\")\n\t\t\t\tfileType = FileType::PDF;\n\t\t\telse {\n\t\t\t\t// accept selected non-PS files in psfile special\n\t\t\t\tstring ext = filename_suffix(fname);\n\t\t\t\tif (ext == \"pdf\")\n\t\t\t\t\tfileType = FileType::PDF;\n\t\t\t\telse if (ext == \"svg\")\n\t\t\t\t\tfileType = FileType::SVG;\n\t\t\t\telse if (ext == \"jpg\" || ext == \"jpeg\" || ext == \"png\")\n\t\t\t\t\tfileType = FileType::BITMAP;\n\t\t\t}\n\t\t\tmap<string,string> attr;\n\t\t\timgfile(fileType, fname, in.parseAttributes(false));\n\t\t}\n\t}\n\telse if (prefix == \"ps::\") {\n\t\tif (_actions)\n\t\t\t_actions->finishLine();  // reset DVI position on next DVI command\n\t\tif (is.peek() == '[') {\n\t\t\t// collect characters inside the brackets\n\t\t\tstring code;\n\t\t\tfor (int i=0; i < 9 && is.peek() != ']' && !is.eof(); ++i)\n\t\t\t\tcode += char(is.get());\n\t\t\tif (is.peek() == ']')\n\t\t\t\tcode += char(is.get());\n\n\t\t\tif (code == \"[begin]\" || code == \"[nobreak]\") {\n\t\t\t\tmoveToDVIPos();\n\t\t\t\texecuteAndSync(is, true);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// no move to DVI position here\n\t\t\t\tif (code != \"[end]\") // PS array?\n\t\t\t\t\t_psi.execute(code);\n\t\t\t\texecuteAndSync(is, true);\n\t\t\t}\n\t\t}\n\t\telse { // ps::<code> behaves like ps::[end]<code>\n\t\t\t// no move to DVI position here\n\t\t\texecuteAndSync(is, true);\n\t\t}\n\t}\n\telse { // ps: ... or PST: ...\n\t\tif (_actions)\n\t\t\t_actions->finishLine();\n\t\tmoveToDVIPos();\n\t\tStreamInputReader in(is);\n\t\tif (in.check(\" plotfile \")) { // ps: plotfile fname\n\t\t\tstring fname = in.getString();\n\t\t\tifstream ifs(fname);\n\t\t\tif (ifs)\n\t\t\t\t_psi.execute(ifs);\n\t\t\telse\n\t\t\t\tMessage::wstream(true) << \"file '\" << fname << \"' not found in ps: plotfile\\n\";\n\t\t}\n\t\telse {\n\t\t\t// ps:<code> is almost identical to ps::[begin]<code> but does\n\t\t\t// a final repositioning to the current DVI location\n\t\t\texecuteAndSync(is, true);\n\t\t\tmoveToDVIPos();\n\t\t}\n\t}\n\treturn true;\n}\n\n\n/** Handles a psfile/pdffile special which places an external EPS/PDF graphic\n *  at the current DVI position. The lower left corner (llx,lly) of the\n *  given bounding box is placed at the DVI position.\n *  @param[in] filetype type of file to process (EPS or PDF)\n *  @param[in] fname EPS/PDF file to be included\n *  @param[in] attr attributes given with psfile/pdffile special */\nvoid PsSpecialHandler::imgfile (FileType filetype, const string &fname, const map<string,string> &attr) {\n\t// prevent warning about missing image file \"/dev/null\" which is\n\t// added by option \"psfixbb\" of the preview package\n\tif (fname == \"/dev/null\")\n\t\treturn;\n\n\tmap<string,string>::const_iterator it;\n\n\t// bounding box of EPS figure in PS point units (lower left and upper right corner)\n\tdouble llx = (it = attr.find(\"llx\")) != attr.end() ? stod(it->second) : 0;\n\tdouble lly = (it = attr.find(\"lly\")) != attr.end() ? stod(it->second) : 0;\n\tdouble urx = (it = attr.find(\"urx\")) != attr.end() ? stod(it->second) : 0;\n\tdouble ury = (it = attr.find(\"ury\")) != attr.end() ? stod(it->second) : 0;\n\tint pageno = (it = attr.find(\"page\")) != attr.end() ? stoi(it->second, nullptr, 10) : 1;\n\t_pdfProc = ((it = attr.find(\"proc\")) != attr.end() ? it->second : \"\");\n\n\tif (filetype == FileType::BITMAP || filetype == FileType::SVG)\n\t\tswap(lly, ury);\n\telse if (filetype == FileType::PDF && llx == 0 && lly == 0 && urx == 0 && ury == 0) {\n\t\tBoundingBox pagebox = _psi.pdfPageBox(fname, pageno);\n\t\tpagebox.transform(TranslationMatrix(-pagebox.minX(), -pagebox.minY()));\n\t\tif (pagebox.valid()) {\n\t\t\tllx = lly = 0.0;\n\t\t\turx = pagebox.maxX();\n\t\t\tury = pagebox.maxY();\n\t\t}\n\t}\n\n\t// desired width and height of the untransformed figure in PS point units\n\tdouble rwi = (it = attr.find(\"rwi\")) != attr.end() ? stod(it->second)/10.0 : -1;\n\tdouble rhi = (it = attr.find(\"rhi\")) != attr.end() ? stod(it->second)/10.0 : -1;\n\tif (rwi == 0 || rhi == 0 || urx-llx == 0 || ury-lly == 0)\n\t\treturn;\n\n\t// user transformations (default values chosen according to dvips manual)\n\t// order of transformations: rotate, scale, translate/offset\n\tdouble hoffset = (it = attr.find(\"hoffset\")) != attr.end() ? stod(it->second) : 0;\n\tdouble voffset = (it = attr.find(\"voffset\")) != attr.end() ? stod(it->second) : 0;\n//\tdouble hsize   = (it = attr.find(\"hsize\")) != attr.end() ? stod(it->second) : 612;\n//\tdouble vsize   = (it = attr.find(\"vsize\")) != attr.end() ? stod(it->second) : 792;\n\tdouble hscale  = (it = attr.find(\"hscale\")) != attr.end() ? stod(it->second) : 100;\n\tdouble vscale  = (it = attr.find(\"vscale\")) != attr.end() ? stod(it->second) : 100;\n\tdouble angle   = (it = attr.find(\"angle\")) != attr.end() ? stod(it->second) : 0;\n\n\tbool clipToBbox = (attr.find(\"clip\") != attr.end());\n\n\t// compute factors to scale the bounding box to width rwi and height rhi\n\tdouble sx = rwi/abs(llx-urx);\n\tdouble sy = rhi/abs(lly-ury);\n\tif (sx == 0 || sy == 0)\n\t\treturn;\n\n\tif (sx < 0) sx = sy;         // rwi attribute not set\n\tif (sy < 0) sy = sx;         // rhi attribute not set\n\tif (sx < 0) sx = sy = 1.0;   // neither rwi nor rhi set\n\n\t// save current DVI position\n\tdouble x = _actions->getX();\n\tdouble y = _actions->getY();\n\n\t// all following drawings are relative to (0,0)\n\t_actions->setX(0);\n\t_actions->setY(0);\n\tmoveToDVIPos();\n\tauto imgNode = createImageNode(filetype, fname, pageno, BoundingBox(llx, lly, urx, ury), clipToBbox);\n\tif (imgNode.element) {  // has anything been drawn?\n\t\tif (filetype == FileType::EPS || filetype == FileType::PDF)\n\t\t\tsy = -sy;  // adapt orientation of y-coordinates\n\t\timgNode.matrix.scale(sx, sy).rotate(-angle).scale(hscale/100, vscale/100);  // apply transformation attributes\n\t\timgNode.matrix.translate(x+hoffset, y-voffset);     // move image to current DVI position\n\t\timgNode.matrix.lmultiply(_actions->getMatrix());\n\t\t// update bounding box\n\t\tBoundingBox bbox(0, 0, urx-llx, ury-lly);\n\t\tbbox.transform(imgNode.matrix);\n\t\t_actions->embed(bbox);\n\t\t// insert element containing the image data\n\t\timgNode.matrix.rmultiply(TranslationMatrix(-llx, -lly));  // move lower left corner of image to origin\n\t\timgNode.element->setTransform(imgNode.matrix);\n\t\t_actions->svgTree().appendToPage(std::move(imgNode.element));\n\t}\n\t// restore DVI position\n\t_actions->setX(x);\n\t_actions->setY(y);\n\tmoveToDVIPos();\n}\n\n\n/** Returns path + basename of temporary bitmap images. */\nstatic string image_base_path (const SpecialActions &actions) {\n\tFilePath imgpath = actions.getSVGFilePath(actions.getCurrentPageNumber());\n\treturn FileSystem::tmpdir() + \"/\" + imgpath.basename() + \"-tmp-\";\n}\n\n\n/** Creates an XML element containing the image data depending on the file type.\n *  @param[in] type file type of the image\n *  @param[in] fname file name/path of image file\n *  @param[in] pageno number of page to process (PDF only)\n *  @param[in] bbox bounding box of the image\n *  @param[in] clip if true, the image is clipped to its bounding box\n *  @return pointer to the element or nullptr if there's no image data */\nPsSpecialHandler::ImageNode PsSpecialHandler::createImageNode (FileType type, const string &fname, int pageno, const BoundingBox &bbox, bool clip) {\n\tImageNode imgnode;\n\tstring pathstr;\n\tif (const char *path = FileFinder::instance().lookup(fname, false))\n\t\tpathstr = FileSystem::ensureForwardSlashes(path);\n\tif ((pathstr.empty() || !FileSystem::exists(pathstr)) && FileSystem::exists(fname))\n\t\tpathstr = fname;\n\tif (pathstr.empty())\n\t\tMessage::wstream(true) << \"file '\" << fname << \"' not found\\n\";\n\telse if (type == FileType::BITMAP || type == FileType::SVG)\n\t\timgnode = createBitmapNode(fname, pathstr, pageno, bbox);\n\telse if (type == FileType::EPS)\n\t\timgnode = createPSNode(fname, pathstr, pageno, bbox, clip);\n\telse\n\t\timgnode = createPDFNode(fname, pathstr, pageno, bbox, clip);\n\treturn imgnode;\n}\n\n\nPsSpecialHandler::ImageNode PsSpecialHandler::createBitmapNode (const string &fname, const string &path, int pageno, const BoundingBox &bbox) const {\n\tImageNode imgnode(util::make_unique<SVGElement>(\"image\"));\n\timgnode.element->addAttribute(\"x\", 0);\n\timgnode.element->addAttribute(\"y\", 0);\n\timgnode.element->addAttribute(\"width\", bbox.width());\n\timgnode.element->addAttribute(\"height\", bbox.height());\n\tstring mimetype = util::mimetype(fname);\n\tif (SVGTree::EMBED_BITMAP_DATA && mimetype != \"image/svg+xml\")\n\t\timgnode.element->addAttribute(\"@@xlink:href\", \"data:\" + mimetype + \";base64,\" + fname);\n\telse {\n\t\tstring href = path;\n\t\t// Only reference the image with an absolute path if either an absolute path was given by the user\n\t\t// or a given plain filename is not present in the current working directory but was found through\n\t\t// the FileFinder, i.e. it's usually located somewhere in the texmf tree.\n\t\tif (!FilePath::isAbsolute(fname) && (fname.find('/') != string::npos || FilePath(fname).exists()))\n\t\t\thref = FilePath(path).relative(FilePath(_actions->getSVGFilePath(pageno)));\n\t\timgnode.element->addAttribute(\"xlink:href\", href);\n\t}\n\treturn imgnode;\n}\n\n\nPsSpecialHandler::ImageNode PsSpecialHandler::createPSNode (const string &fname, const string &path, int pageno, const BoundingBox &bbox, bool clip) {\n\tImageNode imgnode(util::make_unique<SVGElement>(\"g\")); // put SVG nodes created from the EPS/PDF file in this group\n\t_xmlnode = imgnode.element.get();\n\t_psi.execute(\n\t\t\"\\n@beginspecial @setspecial\"            // enter special environment\n\t\t\"/setpagedevice{@setpagedevice}def \"     // activate processing of operator \"setpagedevice\"\n\t\t\"/@imgbase(\"+image_base_path(*_actions)+\")store \" // path and basename of image files\n\t\t\"matrix setmatrix\"                       // don't apply outer PS transformations\n\t\t\"/FirstPage \"+to_string(pageno)+\" def\"   // set number of first page to convert (PDF only)\n\t\t\"/LastPage \"+to_string(pageno)+\" def\"    // set number of last page to convert (PDF only)\n\t\t\"(\" + path + \")run \"                  // execute file content\n\t\t\"@endspecial\\n\"                          // leave special environment\n\t);\n\tif (imgnode.element->empty())\n\t\timgnode.element.reset(nullptr);\n\telse if (clip) {\n\t\t// clip image to its bounding box if flag 'clip' is given\n\t\tauto clippath = util::make_unique<SVGElement>(\"clipPath\");\n\t\tclippath->addAttribute(\"id\", \"imgclip\"+ to_string(_imgClipCount));\n\t\tclippath->append(bbox.createSVGPath());\n\t\timgnode.element->setClipPathUrl(\"imgclip\" + to_string(_imgClipCount++));\n\t\t_actions->svgTree().appendToDefs(std::move(clippath));\n\t}\n\t_xmlnode = nullptr;   // append following elements to page group again\n\treturn imgnode;\n}\n\n\nPsSpecialHandler::ImageNode PsSpecialHandler::createPDFNode (const string &fname, const string &path, int pageno, const BoundingBox &bbox, bool clip) {\n\tif (_pdfProc == \"gs\" || (_pdfProc.empty() && _psi.supportsPDF()))\n\t\treturn createPSNode(fname, path, pageno, bbox, clip);\n\n\tImageNode imgnode;\n\tif (PDFHandler::available()) {\n\t\t// save SVG state\n\t\tauto savedFont = _actions->svgTree().getFontPair();\n\t\tauto savedMatrix = _actions->svgTree().getMatrix();\n\t\tauto savedColor = _actions->svgTree().getFillColor();\n\n\t\timgnode.element = util::make_unique<SVGElement>(\"g\");\n\t\t_pdfHandler.assignSVGTree(_actions->svgTree());\n\t\timgnode.element = _pdfHandler.convert(path, pageno, std::move(imgnode.element));\n\n\t\t// restore SVG state\n\t\tif (savedFont.second)\n\t\t\t_actions->svgTree().setFont(savedFont.first, *savedFont.second);\n\t\t_actions->svgTree().setMatrix(savedMatrix);\n\t\t_actions->svgTree().setFillColor(savedColor);\n\n\t\tif (imgnode.element->empty())\n\t\t\timgnode.element.reset(nullptr);\n\t\telse {\n\t\t\timgnode.matrix.translate(0, -bbox.height()).scale(1, -1);\n\t\t\tif (clip) {\n\t\t\t\tauto clippath = util::make_unique<SVGElement>(\"clipPath\");\n\t\t\t\tclippath->addAttribute(\"id\", \"imgclip\" + to_string(_imgClipCount));\n\t\t\t\tclippath->append(bbox.createSVGPath());\n\t\t\t\timgnode.element->setClipPathUrl(\"imgclip\" + to_string(_imgClipCount++));\n\t\t\t\t_actions->svgTree().appendToDefs(std::move(clippath));\n\t\t\t}\n\t\t}\n\t}\n\treturn imgnode;\n}\n\n\n/** Apply transformation to width, height, and depth set by preview package.\n *  @param[in] matrix transformation matrix to apply\n *  @param[out] w width\n *  @param[out] h height\n *  @param[out] d depth\n *  @return true if the baseline is still horizontal after the transformation */\nstatic bool transform_box_extents (const Matrix &matrix, double &w, double &h, double &d) {\n\tDPair shift = matrix*DPair(0,0);  // the translation component of the matrix\n\tDPair ex = matrix*DPair(1,0)-shift;\n\tDPair ey = matrix*DPair(0,1)-shift;\n\tif (ex.y() != 0 && ey.x() != 0)  // rotation != mod 90 degrees?\n\t\treturn false;                 // => non-horizontal baseline, can't compute meaningful extents\n\n\tif (ex.y() == 0)  // horizontal scaling or skewing?\n\t\tw *= abs(ex.x());\n\tif (ey.x()==0 || ex.y()==0) { // vertical scaling?\n\t\tif (ey.y() < 0)\n\t\t\tswap(h, d);\n\t\tdouble sy = abs(ey.y())/ey.length();\n\t\tif (sy < 1e-8)\n\t\t\th = d = 0;\n\t\telse {\n\t\t\th *= abs(ey.y()/sy);\n\t\t\td *= abs(ey.y()/sy);\n\t\t}\n\t}\n\treturn true;\n}\n\n\nvoid PsSpecialHandler::dviBeginPage (unsigned int pageno, SpecialActions &actions) {\n\t_psi.execute(\"/@imgbase(\"+image_base_path(actions)+\")store\\n\"); // path and basename of image files\n\t_imgClipCount = 0;\n}\n\n\nvoid PsSpecialHandler::dviEndPage (unsigned, SpecialActions &actions) {\n\t_previewHandler.readDataFromStack();\n\tBoundingBox bbox;\n\tif (_previewHandler.getBoundingBox(bbox)) {  // is there any data written by preview package?\n\t\tif (actions.getBBoxFormatString() == \"preview\" || actions.getBBoxFormatString() == \"min\") {\n\t\t\tdouble w=0, h=0, d=0;\n\t\t\tif (actions.getBBoxFormatString() == \"preview\") {\n\t\t\t\tw = max(0.0, _previewHandler.width());\n\t\t\t\th = max(0.0, _previewHandler.height());\n\t\t\t\td = max(0.0, _previewHandler.depth());\n\t\t\t\tactions.bbox() = bbox;\n\t\t\t\tMessage::mstream() << \"\\napplying bounding box set by\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\tw = actions.bbox().width();\n\t\t\t\th = max(0.0, -actions.bbox().minY());\n\t\t\t\td = max(0.0, actions.bbox().maxY());\n\t\t\t\tif (d == 0)\n\t\t\t\t\th = actions.bbox().height();\n\t\t\t\telse if (h == 0)\n\t\t\t\t\td = actions.bbox().height();\n\t\t\t\tMessage::mstream() << \"\\ncomputing extents based on data set by\";\n\t\t\t}\n\t\t\tMessage::mstream() << \" preview package (version \" << _previewHandler.version() << \")\\n\";\n\n\t\t\t// apply page transformations to box extents\n\t\t\tMatrix pagetrans = actions.getPageTransformation();\n\t\t\tbool isBaselineHorizontal = transform_box_extents(pagetrans, w, h, d);\n\t\t\tactions.bbox().lock();\n\n\t\t\tif (!isBaselineHorizontal)\n\t\t\t\tMessage::mstream() << \"can't determine height, width, and depth due to non-horizontal baseline\\n\";\n\t\t\telse {\n\t\t\t\tconstexpr double bp2pt = 72.27/72.0;\n\t\t\t\tMessage::mstream() <<\n\t\t\t\t\t\"width=\" << XMLString(w*bp2pt) << \"pt, \"\n\t\t\t\t\t\"height=\" << XMLString(h*bp2pt) << \"pt, \"\n\t\t\t\t\t\"depth=\" << XMLString(d*bp2pt) << \"pt\\n\";\n\t\t\t}\n#if 0\n\t\t\tauto rect = util::make_unique<XMLElement>(\"rect\");\n\t\t\trect->addAttribute(\"x\", actions.bbox().minX());\n\t\t\trect->addAttribute(\"y\", actions.bbox().minY());\n\t\t\trect->addAttribute(\"width\", w);\n\t\t\trect->addAttribute(\"height\", h+d);\n\t\t\trect->addAttribute(\"fill\", \"none\");\n\t\t\trect->addAttribute(\"stroke\", \"red\");\n\t\t\trect->addAttribute(\"stroke-width\", \"0.1\");\n\t\t\tactions.appendToPage(std::move(rect));\n\t\t\tif (d > 0) {\n\t\t\t\tauto line = util::make_unique<XMLElement>(\"line\");\n\t\t\t\tline->addAttribute(\"x1\", actions.bbox().minX());\n\t\t\t\tline->addAttribute(\"y1\", actions.bbox().minY()+h);\n\t\t\t\tline->addAttribute(\"x2\", actions.bbox().maxX());\n\t\t\t\tline->addAttribute(\"y2\", actions.bbox().minY()+h);\n\t\t\t\tline->addAttribute(\"stroke\", \"blue\");\n\t\t\t\tline->addAttribute(\"stroke-width\", \"0.1\");\n\t\t\t\tactions.appendToPage(std::move(line));\n\t\t\t}\n#endif\n\t\t}\n\t}\n\t// close dictionary TeXDict and execute end-hook if defined\n\tif (_psSection == PS_BODY) {\n\t\t_psi.execute(\"\\nend userdict/end-hook known{end-hook}if initgraphics \");\n\t\tinitgraphics();  // reset graphics state to default values\n\t\t_psSection = PS_HEADERS;\n\t}\n}\n\n///////////////////////////////////////////////////////\n\nvoid PsSpecialHandler::setpagedevice (std::vector<double> &p) {\n\t_linewidth = 1;\n\t_linecap = _linejoin = 0;  // butt end caps and miter joins\n\t_miterlimit = 4;\n\t_isshapealpha = false;     // opacity operators change constant component by default\n\t_opacity = Opacity();\n\t_sx = _sy = _cos = 1.0;\n\t_pattern = nullptr;\n\t_currentcolor = Color::BLACK;\n\t_dashoffset = 0;\n\t_dashpattern.clear();\n\t_path.clear();\n}\n\n\nvoid PsSpecialHandler::gsave (vector<double>&) {\n\t_clipStack.dup();\n}\n\n\nvoid PsSpecialHandler::grestore (vector<double>&) {\n\t_clipStack.pop();\n}\n\n\nvoid PsSpecialHandler::grestoreall (vector<double>&) {\n\t_clipStack.pop(-1, true);\n}\n\n\nvoid PsSpecialHandler::save (vector<double> &p) {\n\t_clipStack.dup(static_cast<int>(p[0]));\n}\n\n\nvoid PsSpecialHandler::restore (vector<double> &p) {\n\t_clipStack.pop(static_cast<int>(p[0]));\n}\n\n\nvoid PsSpecialHandler::moveto (vector<double> &p) {\n\t_path.moveto(p[0], p[1]);\n}\n\n\nvoid PsSpecialHandler::lineto (vector<double> &p) {\n\t_path.lineto(p[0], p[1]);\n}\n\n\nvoid PsSpecialHandler::curveto (vector<double> &p) {\n\t_path.cubicto(p[0], p[1], p[2], p[3], p[4], p[5]);\n}\n\n\nvoid PsSpecialHandler::closepath (vector<double>&) {\n\t_path.closepath();\n}\n\n\nvoid PsSpecialHandler::setblendmode (vector<double> &p) {\n\tint mode = static_cast<int>(p[0]);\n\tstatic constexpr Opacity::BlendMode blendmodes[] = {\n\t\tOpacity::BM_NORMAL, Opacity::BM_MULTIPLY, Opacity::BM_SCREEN, Opacity::BM_OVERLAY,\n\t\tOpacity::BM_SOFTLIGHT, Opacity::BM_HARDLIGHT, Opacity::BM_COLORDODGE, Opacity::BM_COLORBURN,\n\t\tOpacity::BM_DARKEN, Opacity::BM_LIGHTEN, Opacity::BM_DIFFERENCE, Opacity::BM_EXCLUSION,\n\t\tOpacity::BM_HUE, Opacity::BM_SATURATION, Opacity::BM_COLOR, Opacity::BM_LUMINOSITY\n\t};\n\tif (mode < 0 || mode > 15)\n\t\tmode = Opacity::BM_NORMAL;\n\t_opacity.setBlendMode(blendmodes[mode]);\n}\n\n\nvoid PsSpecialHandler::setfillconstantalpha (vector<double> &p) {\n\tif (_isshapealpha)\n\t\t_opacity.fillalpha().setShapeAlpha(p[0]);\n\telse\n\t\t_opacity.fillalpha().setConstAlpha(p[0]);\n\tif (_actions)\n\t\t_actions->setOpacity(_opacity);\n}\n\n\nvoid PsSpecialHandler::setstrokeconstantalpha (vector<double> &p) {\n\tif (_isshapealpha)\n\t\t_opacity.strokealpha().setShapeAlpha(p[0]);\n\telse\n\t\t_opacity.strokealpha().setConstAlpha(p[0]);\n\tif (_actions)\n\t\t_actions->setOpacity(_opacity);\n}\n\n\n/** Draws the current path recorded by previously executed path commands (moveto, lineto,...).\n *  @param[in] p not used */\nvoid PsSpecialHandler::stroke (vector<double> &p) {\n\t_path.removeRedundantCommands();\n\tif ((_path.empty() && !_clipStack.prependedPath()) || !_actions)\n\t\treturn;\n\n\tBoundingBox bbox;\n\tif (!_actions->getMatrix().isIdentity()) {\n\t\t_path.transform(_actions->getMatrix());\n\t\tif (!_xmlnode)\n\t\t\tbbox.transform(_actions->getMatrix());\n\t}\n\tif (_clipStack.prependedPath())\n\t\t_path.prepend(*_clipStack.prependedPath());\n\tunique_ptr<SVGElement> path;\n\tPair<double> point;\n\tif (_path.isDot(point)) {  // zero-length path?\n\t\tif (_linecap == 1) {    // round line ends?  => draw dot\n\t\t\tdouble x = point.x();\n\t\t\tdouble y = point.y();\n\t\t\tdouble r = _linewidth/2.0;\n\t\t\tpath = util::make_unique<SVGElement>(\"circle\");\n\t\t\tpath->addAttribute(\"cx\", x);\n\t\t\tpath->addAttribute(\"cy\", y);\n\t\t\tpath->addAttribute(\"r\", r);\n\t\t\tpath->setFillColor(_actions->getFillColor());\n\t\t\tbbox = BoundingBox(x-r, y-r, x+r, y+r);\n\t\t}\n\t}\n\telse {\n\t\t// compute bounding box\n\t\tbbox = _path.computeBBox();\n\t\tbbox.expand(_linewidth/2);\n\n\t\tostringstream oss;\n\t\t_path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);\n\t\tpath = util::make_unique<SVGElement>(\"path\");\n\t\tpath->addAttribute(\"d\", oss.str());\n\t\tpath->setStrokeColor(_actions->getStrokeColor());\n\t\tpath->setNoFillColor();\n\t\tpath->setStrokeWidth(_linewidth);\n\t\tpath->setStrokeMiterLimit(_miterlimit);\n\t\tpath->setStrokeLineCap(_linecap == 0 ? SVGElement::LC_BUTT : _linecap == 1 ? SVGElement::LC_ROUND : SVGElement::LC_SQUARE);\n\t\tpath->setStrokeLineJoin(_linejoin == 0 ? SVGElement::LJ_MITER : _linecap == 1 ? SVGElement::LJ_ROUND : SVGElement::LJ_BEVEL);\n\t\tpath->setStrokeOpacity(_opacity);\n\t\tpath->setStrokeDash(_dashpattern, _dashoffset);\n\t}\n\tif (path && _clipStack.path() && !_makingPattern) {\n\t\t// assign clipping path and clip bounding box\n\t\tpath->setClipPathUrl(\"clip\"+XMLString(_clipStack.topID()));\n\t\tbbox.intersect(_clipStack.path()->computeBBox());\n\t\t_clipStack.removePrependedPath();\n\t}\n\tif (_xmlnode)\n\t\t_xmlnode->append(std::move(path));\n\telse {\n\t\t_actions->svgTree().appendToPage(std::move(path));\n\t\t_actions->embed(bbox);\n\t}\n\t_path.clear();\n}\n\n\n/** Draws a closed path filled with the current color.\n *  @param[in] p not used\n *  @param[in] evenodd true: use even-odd fill algorithm, false: use nonzero fill algorithm */\nvoid PsSpecialHandler::fill (vector<double> &p, bool evenodd) {\n\t_path.removeRedundantCommands();\n\tif ((_path.empty() && !_clipStack.prependedPath()) || (_patternEnabled && !_pattern) || !_actions)\n\t\treturn;\n\n\t// compute bounding box\n\tBoundingBox bbox = _path.computeBBox();\n\tif (!_actions->getMatrix().isIdentity()) {\n\t\t_path.transform(_actions->getMatrix());\n\t\tif (!_xmlnode)\n\t\t\tbbox.transform(_actions->getMatrix());\n\t}\n\tif (_clipStack.prependedPath())\n\t\t_path.prepend(*_clipStack.prependedPath());\n\n\tostringstream oss;\n\t_path.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);\n\tauto path = util::make_unique<SVGElement>(\"path\");\n\tpath->addAttribute(\"d\", oss.str());\n\tif (_pattern)\n\t\tpath->setFillPatternUrl(XMLString(_pattern->svgID()));\n\telse if (_actions->getFillColor() != Color::BLACK || _makingPattern)\n\t\tpath->setFillColor(_actions->getFillColor(), false);\n\tif (_clipStack.path() && !_makingPattern) {  // clip path active and not inside pattern definition?\n\t\t// assign clipping path and clip bounding box\n\t\tpath->setClipPathUrl(\"clip\"+XMLString(_clipStack.topID()));\n\t\tbbox.intersect(_clipStack.path()->computeBBox());\n\t\t_clipStack.removePrependedPath();\n\t}\n\tpath->setFillRule(evenodd ? SVGElement::FR_EVENODD : SVGElement::FR_NONZERO);\n\tpath->setFillOpacity(_opacity);\n\tif (_xmlnode)\n\t\t_xmlnode->append(std::move(path));\n\telse {\n\t\t_actions->svgTree().appendToPage(std::move(path));\n\t\t_actions->embed(bbox);\n\t}\n\t_path.clear();\n}\n\n\n/** Postprocesses the 'image' operation performed by the PS interpreter. If\n *  the PS image operator succeeded, there's now a PNG file that must be embedded\n *  into the SVG file. */\nvoid PsSpecialHandler::image (std::vector<double> &p) {\n\tint imgID = static_cast<int>(p[0]);   // ID of PNG file written\n\tif (imgID < 0)  // no bitmap file written?\n\t\treturn;\n\n\tdouble width = p[1];\n\tdouble height = p[2];\n\tstring suffix = (BITMAP_FORMAT.substr(0, 3) == \"png\" ? \".png\" : \".jpg\");\n\tstring fname = image_base_path(*_actions)+to_string(imgID)+suffix;\n\tifstream ifs(fname, ios::binary);\n\tif (ifs) {\n\t\tifs.close();\n\t\tauto image = util::make_unique<XMLElement>(\"image\");\n\t\tdouble x = _actions->getX();\n\t\tdouble y = _actions->getY();\n\t\timage->addAttribute(\"x\", x);\n\t\timage->addAttribute(\"y\", y);\n\t\timage->addAttribute(\"width\", util::to_string(width));\n\t\timage->addAttribute(\"height\", util::to_string(height));\n\n\t\t// The current transformation matrix (CTM) maps the unit square to the rectangular region\n\t\t// of the target canvas showing the bitmap (see PS Reference Manual, 4.10.3). Therefore,\n\t\t// the local pixel coordinates of the original bitmap must be transformed by CTM*inv(M) to\n\t\t// get the target coordinates. M is the matrix that maps the unit square to the bitmap rectangle.\n\t\tMatrix matrix{width, 0, 0, 0, -height, height};  // maps unit square to bitmap rectangle\n\t\tmatrix = matrix.invert().lmultiply(_actions->getMatrix());\n\t\timage->addAttribute(\"transform\", matrix.toSVG());\n\n\t\t// To prevent memory issues, only add the filename to the href attribute and tag it by '@'\n\t\t// for later base64 encoding.\n\t\timage->addAttribute(\"@xlink:href\", \"data:\"+util::mimetype(fname)+\";base64,\"+fname);\n\t\t// if set, assign clipping path to image\n\t\tif (_clipStack.path()) {\n\t\t\tauto group = util::make_unique<SVGElement>(\"g\");\n\t\t\tgroup->setClipPathUrl(\"clip\"+XMLString(_clipStack.topID()));\n\t\t\tgroup->append(std::move(image));\n\t\t\timage = std::move(group);  // handle the entire group as image to add\n\t\t}\n\t\tif (_xmlnode)\n\t\t\t_xmlnode->append(std::move(image));\n\t\telse {\n\t\t\t_actions->svgTree().appendToPage(std::move(image));\n\t\t\tBoundingBox bbox(x, y, x+width, y+height);\n\t\t\tbbox.transform(matrix);\n\t\t\tif (_clipStack.path())\n\t\t\t\tbbox.intersect(_clipStack.path()->computeBBox());\n\t\t\t_actions->embed(bbox);\n\t\t}\n\t}\n}\n\n\n/** Creates a Matrix object from a given sequence of 6 double values.\n *  The given values must be arranged in PostScript matrix order.\n *  @param[in] v vector containing the matrix values\n *  @param[in] startindex vector index of first component\n *  @return the generated matrix */\nstatic Matrix create_matrix (vector<double> &v, int startindex=0) {\n\t// Ensure vector p has 6 elements. If necessary, add missing ones\n\t// using corresponding values of the identity matrix.\n\tif (v.size()-startindex < 6) {\n\t\tv.resize(6+startindex);\n\t\tfor (size_t i=v.size()-startindex; i < 6; ++i)\n\t\t\tv[i+startindex] = (i%3 ? 0 : 1);\n\t}\n\t// PS matrix [a b c d e f] equals ((a,b,0),(c,d,0),(e,f,1)).\n\t// Since PS uses left multiplications, we must transpose and reorder\n\t// the matrix to ((a,c,e),(b,d,f),(0,0,1)). This is done by the\n\t// following swaps.\n\tswap(v[startindex+1], v[startindex+2]);  // => (a, c, b, d, e, f)\n\tswap(v[startindex+2], v[startindex+4]);  // => (a, c, e, d, b, f)\n\tswap(v[startindex+3], v[startindex+4]);  // => (a, c, e, b, d, f)\n\treturn Matrix(v, startindex);\n}\n\n\n/** Starts the definition of a new fill pattern. This operator\n *  expects 9 parameters for tiling patterns (see PS reference 4.9.2):\n *  @param[in] p the 9 values defining a tiling pattern (see PS reference 4.9.2):\n *  0: pattern type (0:none, 1:tiling, 2:shading)\n *  1: pattern ID\n *  2-5: lower left and upper right coordinates of pattern box\n *  6: horizontal distance of adjacent tiles\n *  7: vertical distance of adjacent tiles\n *  8: paint type (1: colored pattern, 2: uncolored pattern)\n *  9-14: pattern matrix */\nvoid PsSpecialHandler::makepattern (vector<double> &p) {\n\tint pattern_type = static_cast<int>(p[0]);\n\tswitch (pattern_type) {\n\t\tcase 0:\n\t\t\t// pattern definition completed\n\t\t\t_xmlnode = _savenode;\n\t\t\t_savenode = nullptr;\n\t\t\t_makingPattern = false;\n\t\t\tbreak;\n\t\tcase 1: {  // tiling pattern\n\t\t\tint id = static_cast<int>(p[1]);\n\t\t\tBoundingBox bbox(p[2], p[3], p[4], p[5]);\n\t\t\tconst double &xstep=p[6], &ystep=p[7]; // horizontal and vertical distance of adjacent tiles\n\t\t\tint paint_type = static_cast<int>(p[8]);\n\n\t\t\t// transformation matrix given together with pattern definition\n\t\t\tMatrix matrix = create_matrix(p, 9);\n\t\t\tmatrix.lmultiply(_actions->getMatrix());\n\n\t\t\tunique_ptr<PSTilingPattern> pattern;\n\t\t\tif (paint_type == 1)\n\t\t\t\tpattern = util::make_unique<PSColoredTilingPattern>(id, bbox, matrix, xstep, ystep);\n\t\t\telse\n\t\t\t\tpattern = util::make_unique<PSUncoloredTilingPattern>(id, bbox, matrix, xstep, ystep);\n\t\t\t_savenode = _xmlnode;\n\t\t\t_xmlnode = pattern->getContainerNode();  // insert the following SVG elements into this node\n\t\t\t_patterns[id] = std::move(pattern);\n\t\t\t_makingPattern = true;\n\t\t\tbreak;\n\t\t}\n\t\tcase 2: {\n\t\t\t// define a shading pattern\n\t\t}\n\t}\n}\n\n\n/** Selects a previously defined fill pattern.\n *  0: pattern ID\n *  1-3: (optional) RGB values for uncolored tiling patterns\n *  further parameters depend on the pattern type */\nvoid PsSpecialHandler::setpattern (vector<double> &p) {\n\tint patternID = static_cast<int>(p[0]);\n\tColor color;\n\tif (p.size() == 4)\n\t\tcolor.setRGB(p[1], p[2], p[3]);\n\tauto it = _patterns.find(patternID);\n\tif (it == _patterns.end())\n\t\t_pattern = nullptr;\n\telse {\n\t\tit->second->setColor(color);\n\t\tit->second->apply(*_actions);\n\t\t_pattern = it->second->tiled() ? static_cast<PSTilingPattern*>(it->second.get()) : nullptr;\n\t}\n}\n\n\n/** Clears the current clipping path. */\nvoid PsSpecialHandler::initclip (vector<double> &) {\n\t_clipStack.pushEmptyPath();\n}\n\n\n/** Assigns the current clipping path to the graphics path. */\nvoid PsSpecialHandler::clippath (std::vector<double>&) {\n\tif (!_clipStack.empty())\n\t\t_clipStack.setPrependedPath();\n}\n\n\n/** Assigns a new clipping path to the graphics state using the current path.\n *  If the graphics state already contains a clipping path, the new one is\n *  computed by intersecting the current clipping path with the current graphics\n *  path (see PS language reference, 3rd edition, pp. 193, 542)\n *  @param[in] evenodd true: use even-odd fill algorithm, false: use nonzero fill algorithm */\nvoid PsSpecialHandler::clip (vector<double>&, bool evenodd) {\n\tclip(_path, evenodd);\n}\n\n\n/** Assigns a new clipping path to the graphics state using the current path.\n *  If the graphics state already contains a clipping path, the new one is\n *  computed by intersecting the current one with the given path.\n *  @param[in] path path used to restrict the clipping region\n *  @param[in] evenodd true: use even-odd fill algorithm, false: use nonzero fill algorithm */\nvoid PsSpecialHandler::clip (Path path, bool evenodd) {\n\t// when this method is called, _path contains the clipping path\n\tif (path.empty() || !_actions)\n\t\treturn;\n\n\tPath::WindingRule windingRule = evenodd ? Path::WindingRule::EVEN_ODD : Path::WindingRule::NON_ZERO;\n\tpath.setWindingRule(windingRule);\n\n\tif (!_actions->getMatrix().isIdentity())\n\t\tpath.transform(_actions->getMatrix());\n\tif (_clipStack.prependedPath())\n\t\tpath = PathClipper().unite(*_clipStack.prependedPath(), path);\n\n\tint oldID = _clipStack.topID();\n\n\tostringstream oss;\n\tbool pathReplaced;\n\tif (!COMPUTE_CLIPPATHS_INTERSECTIONS || oldID < 1) {\n\t\tpathReplaced = _clipStack.replace(path);\n\t\tpath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);\n\t}\n\telse {\n\t\t// compute the intersection of the current clipping path with the current graphics path\n\t\tconst Path *oldPath = _clipStack.path();\n\t\tPath intersectedPath = PathClipper().intersect(*oldPath, path);\n\t\tpathReplaced = _clipStack.replace(intersectedPath);\n\t\tintersectedPath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);\n\t}\n\tif (pathReplaced) {\n\t\tauto pathElem = util::make_unique<SVGElement>(\"path\");\n\t\tpathElem->addAttribute(\"d\", oss.str());\n\t\tpathElem->setClipRule(evenodd ? SVGElement::FR_EVENODD : SVGElement::FR_NONZERO);\n\n\t\tint newID = _clipStack.topID();\n\t\tauto clipElem = util::make_unique<SVGElement>(\"clipPath\");\n\t\tclipElem->addAttribute(\"id\", XMLString(\"clip\")+XMLString(newID));\n\t\tif (!COMPUTE_CLIPPATHS_INTERSECTIONS && oldID)\n\t\t\tclipElem->setClipPathUrl(\"clip\"+XMLString(oldID));\n\n\t\tclipElem->append(std::move(pathElem));\n\t\t_actions->svgTree().appendToDefs(std::move(clipElem));\n\t}\n}\n\n\n/** Applies a gradient fill to the current graphics path. Vector p contains the shading parameters\n *  in the following order:\n *  - shading type (6=Coons, 7=tensor product)\n *  - color space (1=gray, 3=rgb, 4=cmyk)\n *  - 1.0 followed by the background color components based on the declared color space, or 0.0\n *  - 1.0 followed by the bounding box coordinates, or 0.0\n *  - geometry and color parameters depending on the shading type */\nvoid PsSpecialHandler::shfill (vector<double> &params) {\n\tif (params.size() < 9)\n\t\treturn;\n\n\t// collect common data relevant for all shading types\n\tint shadingTypeID = static_cast<int>(params[0]);\n\tColorSpace colorSpace = Color::ColorSpace::RGB;\n\tswitch (static_cast<int>(params[1])) {\n\t\tcase 1: colorSpace = Color::ColorSpace::GRAY; break;\n\t\tcase 3: colorSpace = Color::ColorSpace::RGB; break;\n\t\tcase 4: colorSpace = Color::ColorSpace::CMYK; break;\n\t}\n\tVectorIterator<double> it(params);\n\tit += 2;     // skip shading type and color space\n\t// Get color to fill the whole mesh area before drawing the gradient colors on top of that background.\n\t// This is an optional parameter to shfill.\n\tbool bgcolorGiven = static_cast<bool>(*it++);\n\tColor bgcolor;\n\tif (bgcolorGiven)\n\t\tbgcolor.set(colorSpace, it);\n\t// Get clipping rectangle to limit the drawing area of the gradient mesh.\n\t// This is an optional parameter to shfill too.\n\tbool bboxGiven = static_cast<bool>(*it++);\n\tif (bboxGiven) { // bounding box given\n\t\tPath bboxPath;\n\t\tconst double &x1 = *it++;\n\t\tconst double &y1 = *it++;\n\t\tconst double &x2 = *it++;\n\t\tconst double &y2 = *it++;\n\t\tbboxPath.rect(x1, y1, x2, y2);\n\t\tclip(std::move(bboxPath), false);\n\t}\n\ttry {\n\t\tif (shadingTypeID == 5)\n\t\t\tprocessLatticeTriangularPatchMesh(colorSpace, it);\n\t\telse\n\t\t\tprocessSequentialPatchMesh(shadingTypeID, colorSpace, it);\n\t}\n\tcatch (ShadingException &e) {\n\t\tMessage::estream(false) << \"PostScript error: \" << e.what() << '\\n';\n\t\tit.invalidate();  // stop processing the remaining patch data\n\t}\n\tcatch (IteratorException &) {\n\t\tMessage::estream(false) << \"PostScript error: incomplete shading data\\n\";\n\t}\n\tif (bboxGiven)\n\t\t_clipStack.pop();\n}\n\n\n/** Reads position and color data of a single shading patch from the data vector.\n *  @param[in] patch patch to be processed\n *  @param[in] edgeflag edge flag specifying how to connect the current patch to the preceding one\n *  @param[in,out] it iterator used to sequentially access the patch data\n *  @param[out] points the points defining the geometry of the patch\n *  @param[out] colors the colors assigned to the vertices of the patch */\nstatic void read_patch_data (const ShadingPatch &patch, int edgeflag,\n\t\tVectorIterator<double> &it, vector<DPair> &points, vector<Color> &colors)\n{\n\t// number of control points and colors required to define a single patch\n\tint numPoints = patch.numPoints(edgeflag);\n\tint numColors = patch.numColors(edgeflag);\n\tpoints.resize(numPoints);\n\tcolors.resize(numColors);\n\tif (patch.psShadingType() == 4) {\n\t\t// format of a free-form triangular patch definition, where eN denotes\n\t\t// the edge of the corresponding vertex:\n\t\t// edge flag = 0, x1, y1, {color1}, e2, x2, y2, {color2}, e3, x3, y3, {color3}\n\t\t// edge flag > 0, x1, y1, {color1}\n\t\tfor (int i=0; i < numPoints; i++) {\n\t\t\tif (i > 0) ++it;  // skip redundant edge flag from free-form triangular patch\n\t\t\tdouble x = *it++;\n\t\t\tdouble y = *it++;\n\t\t\tpoints[i] = DPair(x, y);\n\t\t\tcolors[i].set(patch.colorSpace(), it);\n\t\t}\n\t}\n\telse if (patch.psShadingType() == 6 || patch.psShadingType() == 7) {\n\t\t// format of each Coons/tensor product patch definition:\n\t\t// edge flag = 0, x1, y1, ... , xn, yn, {color1}, {color2}, {color3}, {color4}\n\t\t// edge flag > 0, x5, y5, ... , xn, yn, {color3}, {color4}\n\t\tfor (int i=0; i < numPoints; i++) {\n\t\t\tdouble x = *it++;\n\t\t\tdouble y = *it++;\n\t\t\tpoints[i] = DPair(x, y);\n\t\t}\n\t\tfor (int i=0; i < numColors; i++)\n\t\t\tcolors[i].set(patch.colorSpace(), it);\n\t}\n}\n\n\nclass ShadingCallback : public ShadingPatch::Callback {\n\tpublic:\n\t\tShadingCallback (SpecialActions &actions, XMLElement *parent, int clippathID)\n\t\t\t: _actions(actions)\n\t\t{\n\t\t\tauto group = util::make_unique<SVGElement>(\"g\");\n\t\t\t_group = group.get();\n\t\t\tif (parent)\n\t\t\t\tparent->append(std::move(group));\n\t\t\telse\n\t\t\t\tactions.svgTree().appendToPage(std::move(group));\n\t\t\tif (clippathID > 0)\n\t\t\t\t_group->setClipPathUrl(\"clip\"+XMLString(clippathID));\n\t\t}\n\n\t\tvoid patchSegment (GraphicsPath<double> &path, const Color &color) override {\n\t\t\tif (!_actions.getMatrix().isIdentity())\n\t\t\t\tpath.transform(_actions.getMatrix());\n\n\t\t\t// draw a single patch segment\n\t\t\tostringstream oss;\n\t\t\tpath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);\n\t\t\tauto pathElem = util::make_unique<SVGElement>(\"path\");\n\t\t\tpathElem->addAttribute(\"d\", oss.str());\n\t\t\tpathElem->setFillColor(color);\n\t\t\t_group->append(std::move(pathElem));\n\t\t}\n\n\tprivate:\n\t\tSpecialActions &_actions;\n\t\tSVGElement *_group;\n};\n\n\n/** Handle all patch meshes whose patches and their connections can be processed sequentially.\n *  This comprises free-form triangular, Coons, and tensor-product patch meshes. */\nvoid PsSpecialHandler::processSequentialPatchMesh (int shadingTypeID, ColorSpace colorSpace, VectorIterator<double> &it) const {\n\tunique_ptr<ShadingPatch> previousPatch;\n\twhile (it.valid()) {\n\t\tint edgeflag = static_cast<int>(*it++);\n\t\tvector<DPair> points;\n\t\tvector<Color> colors;\n\t\tunique_ptr<ShadingPatch> patch = ShadingPatch::create(shadingTypeID, colorSpace);\n\t\tread_patch_data(*patch, edgeflag, it, points, colors);\n\t\tpatch->setPoints(points, edgeflag, previousPatch.get());\n\t\tpatch->setColors(colors, edgeflag, previousPatch.get());\n\t\tShadingCallback callback(*_actions, _xmlnode, _clipStack.topID());\n#if 0\n\t\tif (bgcolorGiven) {\n\t\t\t// fill whole patch area with given background color\n\t\t\tGraphicsPath<double> outline = patch->getBoundaryPath();\n\t\t\tcallback.patchSegment(outline, bgcolor);\n\t\t}\n#endif\n\t\tpatch->approximate(SHADING_SEGMENT_SIZE, SHADING_SEGMENT_OVERLAP, SHADING_SIMPLIFY_DELTA, callback);\n\t\tif (!_xmlnode) {\n\t\t\t// update bounding box\n\t\t\tBoundingBox bbox = patch->getBBox();\n\t\t\tbbox.transform(_actions->getMatrix());\n\t\t\t_actions->embed(bbox);\n\t\t}\n\t\tpreviousPatch = std::move(patch);\n\t}\n}\n\n\nvoid PsSpecialHandler::processLatticeTriangularPatchMesh (ColorSpace colorSpace, VectorIterator<double> &it) const {\n\tint verticesPerRow = static_cast<int>(*it++);\n\tif (verticesPerRow < 2)\n\t\treturn;\n\n\tstruct PatchVertex {\n\t\tDPair point;\n\t\tColor color;\n\t};\n\n\t// hold two adjacent rows of vertices and colors\n\tvector<PatchVertex> row1(verticesPerRow);\n\tvector<PatchVertex> row2(verticesPerRow);\n\tvector<PatchVertex> *rowptr1 = &row1;\n\tvector<PatchVertex> *rowptr2 = &row2;\n\t// read data of first row\n\tfor (int i=0; i < verticesPerRow; i++) {\n\t\tPatchVertex &vertex = (*rowptr1)[i];\n\t\tvertex.point.x(*it++);\n\t\tvertex.point.y(*it++);\n\t\tvertex.color.set(colorSpace, it);\n\t}\n\tLatticeTriangularPatch patch(colorSpace);\n\tShadingCallback callback(*_actions, _xmlnode, _clipStack.topID());\n\twhile (it.valid()) {\n\t\t// read next row\n\t\tfor (int i=0; i < verticesPerRow; i++) {\n\t\t\tPatchVertex &vertex = (*rowptr2)[i];\n\t\t\tvertex.point.x(*it++);\n\t\t\tvertex.point.y(*it++);\n\t\t\tvertex.color.set(colorSpace, it);\n\t\t}\n\t\t// create triangular patches for the vertices of the two rows\n\t\tfor (int i=0; i < verticesPerRow-1; i++) {\n\t\t\tconst PatchVertex &v1 = (*rowptr1)[i], &v2 = (*rowptr1)[i+1];\n\t\t\tconst PatchVertex &v3 = (*rowptr2)[i], &v4 = (*rowptr2)[i+1];\n\t\t\tpatch.setPoints(v1.point, v2.point, v3.point);\n\t\t\tpatch.setColors(v1.color, v2.color, v3.color);\n\t\t\tpatch.approximate(SHADING_SEGMENT_SIZE, SHADING_SEGMENT_OVERLAP, SHADING_SIMPLIFY_DELTA, callback);\n\n\t\t\tpatch.setPoints(v2.point, v3.point, v4.point);\n\t\t\tpatch.setColors(v2.color, v3.color, v4.color);\n\t\t\tpatch.approximate(SHADING_SEGMENT_SIZE, SHADING_SEGMENT_OVERLAP, SHADING_SIMPLIFY_DELTA, callback);\n\t\t}\n\t\tswap(rowptr1, rowptr2);\n\t}\n}\n\n\n/** Clears current path. */\nvoid PsSpecialHandler::newpath (vector<double> &p) {\n\tbool calledByNewpathOp = (p[0] > 0);\n\tif (calledByNewpathOp)  // function triggered by PS operator 'newpath'?\n\t\t_clipStack.removePrependedPath();\n\t_path.clear();\n}\n\n\nvoid PsSpecialHandler::setmatrix (vector<double> &p) {\n\tif (_actions)\n\t\t_actions->setMatrix(create_matrix(p));\n}\n\n\n// In contrast to SVG, PostScript transformations are applied in\n// reverse order (M' = T*M). Thus, the transformation matrices must be\n// left-multiplied in the following methods scale(), translate() and rotate().\n\n\nvoid PsSpecialHandler::scale (vector<double> &p) {\n\tif (_actions) {\n\t\tMatrix m = _actions->getMatrix();\n\t\tScalingMatrix s(p[0], p[1]);\n\t\tm.rmultiply(s);\n\t\t_actions->setMatrix(m);\n\t}\n}\n\n\nvoid PsSpecialHandler::translate (vector<double> &p) {\n\tif (_actions) {\n\t\tMatrix m = _actions->getMatrix();\n\t\tTranslationMatrix t(p[0], p[1]);\n\t\tm.rmultiply(t);\n\t\t_actions->setMatrix(m);\n\t}\n}\n\n\nvoid PsSpecialHandler::rotate (vector<double> &p) {\n\tif (_actions) {\n\t\tMatrix m = _actions->getMatrix();\n\t\tRotationMatrix r(p[0]);\n\t\tm.rmultiply(r);\n\t\t_actions->setMatrix(m);\n\t}\n}\n\n\nvoid PsSpecialHandler::setgray (vector<double> &p) {\n\tif (!_patternEnabled)\n\t\t_pattern = nullptr;\n\t_currentcolor.setGray(p[0]);\n\tif (_actions) {\n\t\t_actions->setFillColor(_currentcolor);\n\t\t_actions->setStrokeColor(_currentcolor);\n\t}\n}\n\n\nvoid PsSpecialHandler::setrgbcolor (vector<double> &p) {\n\tif (!_patternEnabled)\n\t\t_pattern= nullptr;\n\t_currentcolor.setRGB(p[0], p[1], p[2]);\n\tif (_actions) {\n\t\t_actions->setFillColor(_currentcolor);\n\t\t_actions->setStrokeColor(_currentcolor);\n\t}\n}\n\n\nvoid PsSpecialHandler::setcmykcolor (vector<double> &p) {\n\tif (!_patternEnabled)\n\t\t_pattern = nullptr;\n\t_currentcolor.setCMYK(p[0], p[1], p[2], p[3]);\n\tif (_actions) {\n\t\t_actions->setFillColor(_currentcolor);\n\t\t_actions->setStrokeColor(_currentcolor);\n\t}\n}\n\n\nvoid PsSpecialHandler::sethsbcolor (vector<double> &p) {\n\tif (!_patternEnabled)\n\t\t_pattern = nullptr;\n\t_currentcolor.setHSB(p[0], p[1], p[2]);\n\tif (_actions) {\n\t\t_actions->setFillColor(_currentcolor);\n\t\t_actions->setStrokeColor(_currentcolor);\n\t}\n}\n\n\n/** Sets the dash parameters used for stroking.\n *  @param[in] p dash pattern array m1,...,mn plus trailing dash offset */\nvoid PsSpecialHandler::setdash (vector<double> &p) {\n\t_dashpattern.clear();\n\tfor (size_t i=0; i < p.size()-1; i++)\n\t\t_dashpattern.push_back(scale(p[i]));\n\t_dashoffset = scale(p.back());\n}\n\n\n/** This method is called by the PSInterpreter if an PS operator has been executed. */\nvoid PsSpecialHandler::executed () {\n\tif (_actions)\n\t\t_actions->progress(\"ps\");\n}\n\n\n/** This method is called by PSInterpreter if the status of the output devices has changed.\n *  @param[in] p 1 if output device is the nulldevice, 1 otherwise */\nvoid PsSpecialHandler::setnulldevice (vector<double> &p) {\n\tif (_actions) {\n\t\tif (p[0] != 0)\n\t\t\t_actions->lockOutput();   // prevent further SVG output\n\t\telse\n\t\t\t_actions->unlockOutput(); // enable SVG output again\n\t}\n}\n\n////////////////////////////////////////////\n\nvoid PsSpecialHandler::ClippingStack::pushEmptyPath () {\n\tif (!_stack.empty())\n\t\t_stack.emplace(Entry());\n}\n\n\nvoid PsSpecialHandler::ClippingStack::push (const Path &path, int saveID) {\n\tshared_ptr<Path> prependedPath;\n\tif (!_stack.empty())\n\t\tprependedPath = _stack.top().prependedPath;\n\tif (path.empty())\n\t\t_stack.emplace(saveID);\n\telse\n\t\t_stack.emplace(path, ++_maxID, saveID);\n\t_stack.top().prependedPath = std::move(prependedPath);\n}\n\n\n/** Pops a single or several elements from the clipping stack.\n *  The method distinguishes between the following cases:\n *  1) saveID < 0 and grestoreall == false:\n *     pop top element if it was pushed by gsave (its saveID is < 0 as well)\n *  2) saveID < 0 and grestoreall == true\n *     repeat popping until stack is empty or the top element was pushed\n *     by save (its saveID is >= 0)\n *  3) saveID >= 0:\n *     pop all elements until the saveID of the top element equals parameter saveID */\nvoid PsSpecialHandler::ClippingStack::pop (int saveID, bool grestoreall) {\n\tif (_stack.empty())\n\t\treturn;\n\n\tif (saveID < 0) {                // grestore?\n\t\tif (_stack.top().saveID < 0)  // pushed by 'gsave'?\n\t\t\t_stack.pop();\n\t\t// pop all further elements pushed by 'gsave' if grestoreall == true\n\t\twhile (grestoreall && !_stack.empty() && _stack.top().saveID < 0)\n\t\t\t_stack.pop();\n\t}\n\telse {\n\t\t// pop elements pushed by 'gsave'\n\t\twhile (!_stack.empty() && _stack.top().saveID != saveID)\n\t\t\t_stack.pop();\n\t\t// pop element pushed by 'save'\n\t\tif (!_stack.empty())\n\t\t\t_stack.pop();\n\t}\n}\n\n\n/** Returns a pointer to the path on top of the stack, or 0 if the stack is empty. */\nconst PsSpecialHandler::Path* PsSpecialHandler::ClippingStack::path () const {\n\treturn _stack.empty() ? nullptr : _stack.top().path.get();\n}\n\n\n/** Returns a pointer to the path on top of the stack, or 0 if the stack is empty. */\nconst PsSpecialHandler::Path* PsSpecialHandler::ClippingStack::prependedPath () const {\n\treturn _stack.empty() ? nullptr : _stack.top().prependedPath.get();\n}\n\n\nvoid PsSpecialHandler::ClippingStack::removePrependedPath () {\n\tif (!_stack.empty())\n\t\t_stack.top().prependedPath = nullptr;\n}\n\n\n/** Pops all elements from the stack. */\nvoid PsSpecialHandler::ClippingStack::clear() {\n\twhile (!_stack.empty())\n\t\t_stack.pop();\n}\n\n\n/** Replaces the top path by a new one.\n *  @param[in] path new path to put on the stack\n *  @return true if the new path differs from the previous one */\nbool PsSpecialHandler::ClippingStack::replace (const Path &path) {\n\tif (_stack.empty())\n\t\tpush(path, -1);\n\telse if (_stack.top().path && path == *_stack.top().path)\n\t\treturn false;\n\telse {\n\t\t_stack.top().path = make_shared<Path>(path);\n\t\t_stack.top().pathID = ++_maxID;\n\t}\n\treturn true;\n}\n\n\n/** Duplicates the top element, i.e. the top element is pushed again. */\nvoid PsSpecialHandler::ClippingStack::dup (int saveID) {\n\t_stack.emplace(_stack.empty() ? Entry() : _stack.top());\n\t_stack.top().saveID = saveID;\n}\n\n\nvoid PsSpecialHandler::ClippingStack::setPrependedPath () {\n\tif (!_stack.empty())\n\t\t_stack.top().prependedPath = _stack.top().path;\n}\n\n\nvector<const char*> PsSpecialHandler::prefixes () const {\n\tvector<const char*> pfx {\n\t\t\"header=\",    // read and execute PS header file prior to the following PS statements\n\t\t\"pdffile=\",   // process PDF file\n\t\t\"psfile=\",    // read and execute PS file\n\t\t\"PSfile=\",    // dito\n\t\t\"ps:\",        // execute literal PS code wrapped by @beginspecial and @endspecial\n\t\t\"ps::\",       // execute literal PS code without additional adaption of the drawing position\n\t\t\"!\",          // execute literal PS header code following this prefix\n\t\t\"\\\"\",         // execute literal PS code following this prefix\n\t\t\"pst:\",       // dito\n\t\t\"PST:\",       // same as \"ps:\"\n\t};\n\treturn pfx;\n}\n"
  },
  {
    "path": "src/PsSpecialHandler.hpp",
    "content": "/*************************************************************************\n** PsSpecialHandler.hpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef PSSPECIALHANDLER_HPP\n#define PSSPECIALHANDLER_HPP\n\n#include <memory>\n#include <set>\n#include <stack>\n#include <string>\n#include <vector>\n#include \"GraphicsPath.hpp\"\n#include \"PDFHandler.hpp\"\n#include \"PSInterpreter.hpp\"\n#include \"Opacity.hpp\"\n#include \"PSPattern.hpp\"\n#include \"PSPreviewHandler.hpp\"\n#include \"SpecialHandler.hpp\"\n\nclass PSPattern;\nclass SVGElement;\nclass XMLElement;\n\nclass PsSpecialHandler : public SpecialHandler, protected PSActions {\n\tusing Path = GraphicsPath<double>;\n\tusing ColorSpace = Color::ColorSpace;\n\n\t/** Helper class storing the clipping paths currently present on the graphics context stack.\n\t *  Since PS operator 'clippath' only delivers a linearly approximated version of the paths\n\t *  that are sometimes too imprecise for direct usage in SVG, we keep the possibly curved\n\t *  clipping paths and compute their intersections locally if necessary. */\n\tclass ClippingStack {\n\t\tpublic:\n\t\t\tvoid pushEmptyPath ();\n\t\t\tvoid push (const Path &path, int saveID=-1);\n\t\t\tbool replace (const Path &path);\n\t\t\tvoid dup (int saveID=-1);\n\t\t\tvoid pop (int saveID=-1, bool grestore=false);\n\t\t\tvoid clear ();\n\t\t\tbool empty () const {return _stack.empty();}\n\t\t\tvoid setPrependedPath ();\n\t\t\tconst Path* path () const;\n\t\t\tconst Path* prependedPath () const;\n\t\t\tvoid removePrependedPath ();\n\t\t\tint topID () const {return _stack.empty() ? 0 : _stack.top().pathID;}\n\n\t\tprivate:\n\t\t\tstruct Entry {\n\t\t\t\tstd::shared_ptr<Path> path;  ///< pointer to current clipping path\n\t\t\t\tstd::shared_ptr<Path> prependedPath=nullptr;\n\t\t\t\tint pathID;        ///< ID of current clipping path\n\t\t\t\tint saveID;        ///< if >=0, path was pushed by 'save', and saveID holds the ID of the PS memory object\n\t\t\t\tEntry () : Entry(-1) {}\n\t\t\t\tEntry (const Path &p, int pid, int sid) : path(std::make_shared<Path>(p)), pathID(pid), saveID(sid) {}\n\t\t\t\texplicit Entry (int sid) : path(nullptr), pathID(0), saveID(sid) {}\n\t\t\t\tEntry (const Entry &entry) =default;\n\t\t\t\tEntry (Entry &&entry) =default;\n\t\t\t};\n\t\t\tsize_t _maxID=0;\n\t\t\tstd::stack<Entry> _stack;  ///< stack holding the clipping information of the current graphics context\n\t};\n\n\tstruct ImageNode {\n\t\tImageNode () : matrix(1) {}\n\t\texplicit ImageNode (std::unique_ptr<SVGElement> elem) : element(std::move(elem)), matrix(1) {}\n\t\tImageNode (std::unique_ptr<SVGElement> elem, const Matrix &m) : element(std::move(elem)), matrix(m) {}\n\t\tstd::unique_ptr<SVGElement> element;\n\t\tMatrix matrix;\n\t};\n\n\tenum PsSection {PS_NONE, PS_HEADERS, PS_BODY};\n\tenum class FileType {EPS, PDF, SVG, BITMAP};\n\n\tpublic:\n\t\tPsSpecialHandler ();\n\t\t~PsSpecialHandler () override;\n\t\tvoid preprocess (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tbool process (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tconst char* info () const override {return \"dvips PostScript specials\";}\n\t\tconst char* name () const override {return handlerName();}\n\t\tstatic const char* handlerName ()  {return \"ps\";}\n\t\tstd::vector<const char*> prefixes () const override;\n\t\tvoid setDviScaleFactor (double dvi2bp) override {_previewHandler.setDviScaleFactor(dvi2bp);}\n\t\tvoid enterBodySection ();\n\t\tPSInterpreter& psInterpreter () {return _psi;}\n\n\tpublic:\n\t\tstatic bool COMPUTE_CLIPPATHS_INTERSECTIONS;\n\t\tstatic bool SHADING_SEGMENT_OVERLAP;\n\t\tstatic int SHADING_SEGMENT_SIZE;\n\t\tstatic double SHADING_SIMPLIFY_DELTA;\n\t\tstatic std::string BITMAP_FORMAT;\n\n\tprotected:\n\t\tvoid initialize ();\n\t\tvoid initgraphics ();\n\t\tvoid moveToDVIPos ();\n\t\tvoid executeAndSync (std::istream &is, bool updatePos);\n\t\tvoid processHeaderFile (const char *fname);\n\t\tvoid imgfile (FileType type, const std::string &fname, const std::map<std::string,std::string> &attr);\n\t\tImageNode createImageNode (FileType type, const std::string &fname, int pageno, const BoundingBox &bbox, bool clip);\n\t\tImageNode createBitmapNode (const std::string &fname, const std::string &path, int pageno, const BoundingBox &bbox) const;\n\t\tImageNode createPSNode (const std::string &fname, const std::string &path, int pageno, const BoundingBox &bbox, bool clip);\n\t\tImageNode createPDFNode (const std::string &fname, const std::string &path, int pageno, const BoundingBox &bbox, bool clip);\n\t\tvoid dviBeginPage (unsigned int pageno, SpecialActions &actions) override;\n\t\tvoid dviEndPage (unsigned pageno, SpecialActions &actions) override;\n\t\tvoid clip (Path path, bool evenodd);\n\t\tvoid processSequentialPatchMesh (int shadingTypeID, ColorSpace cspace, VectorIterator<double> &it) const;\n\t\tvoid processLatticeTriangularPatchMesh (ColorSpace colorSpace, VectorIterator<double> &it) const;\n\n\t\t/// scale given value by current PS scale factors\n\t\tdouble scale (double v) const {return v*(_sx*(1-_cos*_cos) + _sy*_cos*_cos);}\n\n\t\tvoid applyscalevals (std::vector<double> &p) override  {_sx = p[0]; _sy = p[1]; _cos = p[2];}\n\t\tvoid clip (std::vector<double> &p) override            {clip(p, false);}\n\t\tvoid clip (std::vector<double> &p, bool evenodd);\n\t\tvoid clippath (std::vector<double> &p) override;\n\t\tvoid closepath (std::vector<double> &p) override;\n\t\tvoid curveto (std::vector<double> &p) override;\n\t\tvoid eoclip (std::vector<double> &p) override          {clip(p, true);}\n\t\tvoid eofill (std::vector<double> &p) override          {fill(p, true);}\n\t\tvoid fill (std::vector<double> &p, bool evenodd);\n\t\tvoid fill (std::vector<double> &p) override            {fill(p, false);}\n\t\tvoid grestore (std::vector<double> &p) override;\n\t\tvoid grestoreall (std::vector<double> &p) override;\n\t\tvoid gsave (std::vector<double> &p) override;\n\t\tvoid image (std::vector<double> &p) override;\n\t\tvoid initclip (std::vector<double> &p) override;\n\t\tvoid lineto (std::vector<double> &p) override;\n\t\tvoid makepattern (std::vector<double> &p) override;\n\t\tvoid moveto (std::vector<double> &p) override;\n\t\tvoid newpath (std::vector<double> &p) override;\n\t\tvoid querypos (std::vector<double> &p) override        {_currentpoint = DPair(p[0], p[1]);}\n\t\tvoid restore (std::vector<double> &p) override;\n\t\tvoid rotate (std::vector<double> &p) override;\n\t\tvoid save (std::vector<double> &p) override;\n\t\tvoid scale (std::vector<double> &p) override;\n\t\tvoid setalphaisshape (std::vector<double> &p) override { _isshapealpha = bool(p[0]);}\n\t\tvoid setblendmode (std::vector<double> &p) override;\n\t\tvoid setcolorspace (std::vector<double> &p) override   {_patternEnabled = bool(p[0]);}\n\t\tvoid setcmykcolor (std::vector<double> &cmyk) override;\n\t\tvoid setdash (std::vector<double> &p) override;\n\t\tvoid setfillconstantalpha (std::vector<double> &p) override;\n\t\tvoid setgray (std::vector<double> &p) override;\n\t\tvoid sethsbcolor (std::vector<double> &hsb) override;\n\t\tvoid setlinecap (std::vector<double> &p) override      {_linecap = uint8_t(p[0]);}\n\t\tvoid setlinejoin (std::vector<double> &p) override     {_linejoin = uint8_t(p[0]);}\n\t\tvoid setlinewidth (std::vector<double> &p) override    {_linewidth = scale(p[0] ? p[0] : 0.5);}\n\t\tvoid setmatrix (std::vector<double> &p) override;\n\t\tvoid setmiterlimit (std::vector<double> &p) override   {_miterlimit = p[0];}\n\t\tvoid setnulldevice (std::vector<double> &p) override;\n\t\tvoid setpagedevice (std::vector<double> &p) override;\n\t\tvoid setpattern (std::vector<double> &p) override;\n\t\tvoid setrgbcolor (std::vector<double> &rgb) override;\n\t\tvoid setstrokeconstantalpha (std::vector<double> &p) override;\n\t\tvoid shfill (std::vector<double> &p) override;\n\t\tvoid stroke (std::vector<double> &p) override;\n\t\tvoid translate (std::vector<double> &p) override;\n\t\tvoid executed () override;\n\n\tprivate:\n\t\tPSInterpreter _psi;\n\t\tPDFHandler _pdfHandler;\n\t\tSpecialActions *_actions=nullptr;\n\t\tPSPreviewHandler _previewHandler;  ///< extracts information generated by the preview package\n\t\tPsSection _psSection=PS_NONE;      ///< current section processed (nothing yet, headers, or body specials)\n\t\tXMLElement *_xmlnode=nullptr;      ///< if != 0, created SVG elements are appended to this node\n\t\tXMLElement *_savenode=nullptr;     ///< pointer to temporaryly store _xmlnode\n\t\tstd::string _headerCode;           ///< collected literal PS header code\n\t\tPath _path;\n\t\tDPair _currentpoint;               ///< current PS position in bp units\n\t\tColor _currentcolor;               ///< current stroke/fill color\n\t\tdouble _sx, _sy;                   ///< horizontal and vertical scale factors retrieved by operator \"applyscalevals\"\n\t\tdouble _cos;                       ///< cosine of angle between (1,0) and transform(1,0)\n\t\tdouble _linewidth;                 ///< current line width in bp units\n\t\tdouble _miterlimit;                ///< current miter limit in bp units\n\t\tbool _isshapealpha;                ///< if true, opacity operators act on shape component, otherwise on constant component\n\t\tOpacity _opacity;\n\t\tuint8_t _linecap  : 2;             ///< current line cap (0=butt, 1=round, 2=projecting square)\n\t\tuint8_t _linejoin : 2;             ///< current line join (0=miter, 1=round, 2=bevel)\n\t\tdouble _dashoffset;                ///< current dash offset\n\t\tstd::vector<double> _dashpattern;\n\t\tClippingStack _clipStack;\n\t\tint _imgClipCount=0;               ///< current number of clip paths assigned to images\n\t\tbool _makingPattern=false;         ///< true if executing makepattern operator\n\t\tstd::map<int, std::unique_ptr<PSPattern>> _patterns;\n\t\tPSTilingPattern *_pattern;         ///< current pattern\n\t\tbool _patternEnabled;              ///< true if active color space is a pattern\n\t\tstd::string _pdfProc;              ///< tool to process PDF files (\"gs\" or \"mutool\")\n};\n\n#endif\n"
  },
  {
    "path": "src/PsSpecialHandlerProxy.cpp",
    "content": "/*************************************************************************\n** PsSpecialHandlerProxy.cpp                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <config.h>\n#include <memory>\n#include \"Message.hpp\"\n#ifndef DISABLE_GS\n\t#include \"PsSpecialHandler.hpp\"\n#endif\n#ifndef HAVE_LIBGS\n\t#include \"NoPsSpecialHandler.hpp\"\n#endif\n#include \"PsSpecialHandlerProxy.hpp\"\n#include \"SpecialManager.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\ninline unique_ptr<SpecialHandler> createPsSpecialHandler () {\n#ifndef DISABLE_GS\n#ifndef HAVE_LIBGS\n\tif (Ghostscript().available())\n#endif\n\t\treturn util::make_unique<PsSpecialHandler>();\n#endif\n#ifndef HAVE_LIBGS\n\treturn util::make_unique<NoPsSpecialHandler>();\n#endif\n}\n\n\n/** Replaces this handler proxy with the actual PS special handler. */\nSpecialHandler* PsSpecialHandlerProxy::replaceHandler () const {\n\tauto psSpecialHandler = createPsSpecialHandler();\n\tif (_pswarning) {\n#ifdef DISABLE_GS\n\t\tMessage::wstream() << \"processing of PostScript specials was permanently disabled\\n\";\n#else\n\t\tif (!psSpecialHandler->name())\n\t\t\tMessage::wstream() << \"processing of PostScript specials is disabled (Ghostscript not found)\\n\";\n#endif\n\t}\n\tSpecialHandler *handlerPtr = psSpecialHandler.get();\n\tSpecialManager::instance().unregisterHandler(this);\n\tSpecialManager::instance().registerHandler(std::move(psSpecialHandler));\n\treturn handlerPtr;\n}\n\n\nvoid PsSpecialHandlerProxy::preprocess (const string &prefix, istream &is, SpecialActions &actions) {\n\treplaceHandler()->preprocess(prefix, is, actions);\n}\n\n\nbool PsSpecialHandlerProxy::process (const string &prefix, istream &is, SpecialActions &actions) {\n\treturn replaceHandler()->process(prefix, is, actions);\n}\n\n\nconst char* PsSpecialHandlerProxy::info() const {\n\treturn createPsSpecialHandler()->info();\n}\n\n\nvector<const char *> PsSpecialHandlerProxy::prefixes() const {\n\tvector<const char*> pfx {\"header=\", \"pdffile=\", \"psfile=\", \"PSfile=\", \"ps:\", \"ps::\", \"!\", \"\\\"\", \"pst:\", \"PST:\"};\n\treturn pfx;\n}\n"
  },
  {
    "path": "src/PsSpecialHandlerProxy.hpp",
    "content": "/*************************************************************************\n** PsSpecialHandlerProxy.hpp                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include \"SpecialHandler.hpp\"\n\nclass PsSpecialHandlerProxy : public SpecialHandler {\n\tpublic:\n\t\texplicit PsSpecialHandlerProxy (bool pswarning) : _pswarning(pswarning) {}\n\t\tvoid preprocess (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tbool process (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tconst char* name () const override {return \"ps\";}\n\t\tconst char* info () const override;\n\t\tstd::vector<const char*> prefixes () const override;\n\n\tprotected:\n\t\tSpecialHandler* replaceHandler () const;\n\n\tprivate:\n\t\tbool _pswarning;\n};\n"
  },
  {
    "path": "src/RangeMap.cpp",
    "content": "/*************************************************************************\n** RangeMap.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"algorithm.hpp\"\n#include \"RangeMap.hpp\"\n\nusing namespace std;\n\n\n/** Tries to merge range r into this one. This is only possible if the ranges\n *  touch or overlap and if the assigned values match at the junction points.\n *  @param[in] r range to join\n *  @return true if join was successful */\nbool RangeMap::Range::join (const Range &r) {\n\t// check most common cases first\n\tif (_max+1 < r._min || _min-1 > r._max)  // disjoint ranges?\n\t\treturn false;\n\tif (r._min-1 == _max) {                  // does r touch *this on the right?\n\t\tif (valueAt(r._min) == r._minval) {\n\t\t\t_max = r._max;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tif (r._max+1 == _min) {                  // does r touch *this on the left\n\t\tif (r.valueAt(_min) == _minval) {\n\t\t\tsetMinAndAdaptValue(r._min);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t// the following cases should be pretty rare\n\tif (r._min <= _min && r._max >= _max) {  // does r overlap *this on both sides?\n\t\t*this = r;\n\t\treturn true;\n\t}\n\tif (r._min < _min) {                     // left overlap only?\n\t\tif (r.valueAt(_min) == _minval) {\n\t\t\t_min = r._min;\n\t\t\t_minval = r._minval;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tif (r._max > _max) {                     // right overlap only?\n\t\tif (valueAt(r._min) == r._minval) {\n\t\t\t_max = r._max;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t// r completely inside *this\n\treturn valueAt(r._min) == r._minval;\n}\n\n\n/** Adds a new number range. The range describes a mapping from c to v(c), where\n *  \\f$c \\in [cmin,cmax]\\f$ and \\f$v(cmin):=vmin, v(c):=vmin+c-cmin\\f$.\n *  @param[in] cmin smallest number in the range\n *  @param[in] cmax largest number in the range\n *  @param[in] vmin map value of cmin */\nvoid RangeMap::addRange (uint32_t cmin, uint32_t cmax, uint32_t vmin) {\n\tif (cmin > cmax)\n\t\tswap(cmin, cmax);\n\n\tRange range(cmin, cmax, vmin);\n\tif (_ranges.empty())\n\t\t_ranges.push_back(std::move(range));\n\telse {\n\t\t// check for simple cases that can be handled pretty fast\n\t\tRange &lrange = *_ranges.begin();\n\t\tRange &rrange = *_ranges.rbegin();\n\t\tif (cmin > rrange.max()) {       // non-overlapping range at end of vector?\n\t\t\tif (!rrange.join(range))\n\t\t\t\t_ranges.push_back(std::move(range));\n\t\t}\n\t\telse if (cmax < lrange.min()) {  // non-overlapping range at begin of vector?\n\t\t\tif (!lrange.join(range))\n\t\t\t\t_ranges.emplace(_ranges.begin(), std::move(range));\n\t\t}\n\t\telse {\n\t\t\t// ranges overlap and/or must be inserted somewhere inside the vector\n\t\t\tauto it = lower_bound(_ranges.begin(), _ranges.end(), range);\n\t\t\tconst bool at_end = (it == _ranges.end());\n\t\t\tif (at_end)\n\t\t\t\t--it;\n\t\t\tif (!it->join(range) && (it == _ranges.begin() || !(it-1)->join(range))) {\n\t\t\t\tif (it->min() < cmin && it->max() > cmax) { // new range completely inside an existing range?\n\t\t\t\t\t//split existing range\n\t\t\t\t\tuint32_t itmax = it->max();\n\t\t\t\t\tit->max(cmin-1);\n\t\t\t\t\tit = _ranges.emplace(it+1, cmax+1, itmax, it->valueAt(cmax+1));\n\t\t\t\t}\n\t\t\t\telse if (at_end)        // does new range overlap right side of last range in vector?\n\t\t\t\t\tit = _ranges.end();  // => append new range at end of vector\n\t\t\t\tit = _ranges.emplace(it, std::move(range));\n\t\t\t}\n\t\t\tadaptNeighbors(it);  // resolve overlaps\n\t\t}\n\t}\n}\n\n\n/** Adapts the left and right neighbor elements of a newly inserted range.\n *  The new range could overlap ranges in the neighborhood so that those must be\n *  adapted or removed. All ranges in the range vector are ordered ascendingly, i.e.\n *  [min_1, max_1],...,[min_n, max_n] where min_i < min_j for all i < j.\n *  @param[in] it pointer to the newly inserted range */\nvoid RangeMap::adaptNeighbors (Ranges::iterator it) {\n\tif (it != _ranges.end()) {\n\t\t// adapt left neighbor\n\t\tif (it != _ranges.begin() && it->min() <= (it-1)->max()) {\n\t\t\tauto lit = it-1;  // points to left neighbor\n\t\t\tbool left_neighbor_valid = (it->min() > 0 && it->min()-1 >= lit->min());\n\t\t\tif (left_neighbor_valid)      // is adapted left neighbor valid?\n\t\t\t\tlit->max(it->min()-1);     // => assign new max value\n\t\t\tif (!left_neighbor_valid || it->join(*lit))\n\t\t\t\tit = _ranges.erase(lit);\n\t\t}\n\t\t// remove right neighbors completely overlapped by *it\n\t\tauto rit = it+1;    // points to right neighbor\n\t\twhile (rit != _ranges.end() && it->max() >= rit->max()) { // complete overlap?\n\t\t\t_ranges.erase(rit);\n\t\t\trit = it+1;\n\t\t}\n\t\t// adapt rightmost range partially overlapped by *it\n\t\tif (rit != _ranges.end()) {\n\t\t\tif (it->max() >= rit->min())\n\t\t\t\trit->setMinAndAdaptValue(it->max()+1);\n\t\t\t// try to merge right neighbor into *this\n\t\t\tif (it->join(*rit))\n\t\t\t\t_ranges.erase(rit); // remove merged neighbor\n\t\t}\n\t}\n}\n\n\n/** Finds the index of the range that contains a given value c.\n *  @param[in] c find range that contains this value\n *  @return index of the range found, or -1 if range was not found */\nint RangeMap::lookup (uint32_t c) const {\n\t// simple binary search\n\tint left=0, right=_ranges.size()-1;\n\twhile (left <= right) {\n\t\tint mid = (left+right)/2;\n\t\tif (c < _ranges[mid].min())\n\t\t\tright = mid-1;\n\t\telse if (c > _ranges[mid].max())\n\t\t\tleft = mid+1;\n\t\telse\n\t\t\treturn mid;\n\t}\n\treturn -1;\n}\n\n\nuint32_t RangeMap::valueAt (uint32_t c) const {\n\tint pos = lookup(c);\n\treturn pos < 0 ? 0 : _ranges[pos].valueAt(c);\n}\n\n\n/** Returns the number of values mapped. */\nsize_t RangeMap::numValues () const {\n\treturn algo::accumulate(_ranges, size_t(0), [](size_t sum, const Range &range) {\n\t\treturn sum+range.max()-range.min()+1;\n\t});\n}\n\n\nostream& RangeMap::Range::write (ostream& os) const {\n\treturn os << '[' << _min << ',' << _max << \"] => \" << _minval;\n}\n\n\nostream& RangeMap::write (ostream& os) const {\n\tfor (const Range &range : _ranges)\n\t\trange.write(os) << '\\n';\n\treturn os;\n}\n"
  },
  {
    "path": "src/RangeMap.hpp",
    "content": "/*************************************************************************\n** RangeMap.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef RANGEMAP_HPP\n#define RANGEMAP_HPP\n\n#include <algorithm>\n#include <cstdint>\n#include <ostream>\n#include <vector>\n\nclass RangeMap {\n\tclass Range {\n\t\tfriend class RangeMap;\n\t\tpublic:\n\t\t\tRange () =default;\n\n\t\t\tRange (uint32_t min, uint32_t max, uint32_t minval) : _min(min), _max(max), _minval(minval) {\n\t\t\t\tif (_min > _max)\n\t\t\t\t\tstd::swap(_min, _max);\n\t\t\t}\n\n\t\t\tuint32_t min () const                  {return _min;}\n\t\t\tuint32_t max () const                  {return _max;}\n\t\t\tuint32_t minval () const               {return _minval;}\n\t\t\tuint32_t maxval () const               {return valueAt(_max);}\n\t\t\tuint32_t valueAt (uint32_t c) const    {return c-_min+_minval;}\n\t\t\tuint32_t numKeys () const              {return _max-_min+1;}\n\t\t\tbool operator < (const Range &r) const {return _min < r._min;}\n\t\t\tstd::ostream& write (std::ostream &os) const;\n\n\t\tprotected:\n\t\t\tvoid min (uint32_t m)                 {_min = m;}\n\t\t\tvoid max (uint32_t m)                 {_max = m;}\n\t\t\tvoid setMinAndAdaptValue (uint32_t c) {_minval = valueAt(c); _min = c;}\n\t\t\tbool join (const Range &r);\n\n\t\tprivate:\n\t\t\tuint32_t _min=0, _max=0;\n\t\t\tuint32_t _minval=0;\n\t};\n\n\tusing Ranges = std::vector<Range>;\n\n\tclass Iterator {\n\t\tfriend class RangeMap;\n\t\tpublic:\n\t\t\tvoid operator ++ () {\n\t\t\t\tif (_currentKey < _rangeIterator->max())\n\t\t\t\t\t++_currentKey;\n\t\t\t\telse {\n\t\t\t\t\tif (++_rangeIterator != _rangeMap._ranges.end())\n\t\t\t\t\t\t_currentKey = _rangeIterator->min();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvoid operator -- () {\n\t\t\t\tif (_currentKey > _rangeIterator->min())\n\t\t\t\t\t--_currentKey;\n\t\t\t\telse {\n\t\t\t\t\tif (_rangeIterator != _rangeMap._ranges.begin())\n\t\t\t\t\t\t_currentKey = (--_rangeIterator)->max();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstd::pair<uint32_t,uint32_t> operator * () const {\n\t\t\t\treturn {_currentKey, _rangeMap.valueAt(_currentKey)};\n\t\t\t}\n\n\t\t\tbool operator == (const Iterator &it) const {\n\t\t\t\tbool ret = (_rangeIterator == it._rangeIterator);\n\t\t\t\tif (ret && _rangeIterator != _rangeMap._ranges.end())\n\t\t\t\t\tret = (_currentKey == it._currentKey);\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tbool operator != (const Iterator &it) const {\n\t\t\t\tbool ret = (_rangeIterator != it._rangeIterator);\n\t\t\t\tif (!ret && _rangeIterator != _rangeMap._ranges.end())\n\t\t\t\t\tret = _currentKey != it._currentKey;\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\tprotected:\n\t\t\tIterator (const RangeMap &rangeMap, Ranges::const_iterator it) : _rangeMap(rangeMap), _rangeIterator(it), _currentKey() {\n\t\t\t\tif (_rangeIterator != _rangeMap._ranges.end())\n\t\t\t\t\t_currentKey = _rangeIterator->min();\n\t\t\t}\n\n\t\tprivate:\n\t\t\tconst RangeMap &_rangeMap;\n\t\t\tRanges::const_iterator _rangeIterator;\n\t\t\tuint32_t _currentKey;\n\t};\n\n\tpublic:\n\t\tvoid addRange (uint32_t cmin, uint32_t cmax, uint32_t vmin);\n\t\tbool valueExists (uint32_t c) const  {return lookup(c) >= 0;}\n\t\tuint32_t valueAt (uint32_t c) const;\n\t\tuint32_t minKey () const               {return _ranges.empty() ? 0 : _ranges.front().min();}\n\t\tuint32_t maxKey () const               {return _ranges.empty() ? 0 : _ranges.back().max();}\n\t\tsize_t numRanges () const              {return _ranges.size();}\n\t\tsize_t numValues () const;\n\t\tbool empty () const                    {return _ranges.empty();}\n\t\tvoid clear ()                          {_ranges.clear();}\n\t\tconst Range& getRange (size_t n) const {return _ranges[n];}\n\t\tIterator begin () const                {return {*this, _ranges.begin()};}\n\t\tIterator end () const                  {return {*this, _ranges.end()};}\n\t\tstd::ostream& write (std::ostream &os) const;\n\n\tprotected:\n\t\tvoid adaptNeighbors (Ranges::iterator it);\n\t\tint lookup (uint32_t c) const;\n\n\tprivate:\n\t\tRanges _ranges;\n};\n\n\ninline std::ostream& operator << (std::ostream& os, const RangeMap &rangemap) {\n\treturn rangemap.write(os);\n}\n\n#endif\n"
  },
  {
    "path": "src/SVGCharHandler.cpp",
    "content": "/*************************************************************************\n** SVGCharHandler.cpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"SVGCharHandler.hpp\"\n#include \"utility.hpp\"\n#include \"SVGElement.hpp\"\n\nusing namespace std;\n\n\nvoid SVGCharHandler::setInitialContextNode (SVGElement *node) {\n\tresetContextNode();\n\t_initialContextNode = node;\n}\n\n\n/** Changes the context element. All following nodes will be appended to this node.\n *  @param[in] node the new context node\n *  @return bare pointer to the new context node or 0 if context hasn't changed */\nSVGElement* SVGCharHandler::pushContextNode (unique_ptr<SVGElement> node) {\n\tif (node && (_contextNodeStack.empty() || node.get() != _contextNodeStack.top())) {\n\t\tSVGElement *nodeptr = node.get();\n\t\tcontextNode()->append(std::move(node));\n\t\t_contextNodeStack.push(nodeptr);\n\t\treturn nodeptr;\n\t}\n\treturn nullptr;\n}\n\n\nvoid SVGCharHandler::popContextNode () {\n\tif (!_contextNodeStack.empty())\n\t\t_contextNodeStack.pop();\n}\n\n\n/** Resets the context node to the initial element node. */\nvoid SVGCharHandler::resetContextNode () {\n\twhile (!_contextNodeStack.empty())\n\t\t_contextNodeStack.pop();\n}\n\n\n/** Creates and returns a new SVG text element.\n *  @param[in] x current x coordinate\n *  @param[in] y current y coordinate */\nunique_ptr<SVGElement> SVGCharTextHandler::createTextNode (double x, double y) const {\n\tconst Font *font = _font.get();\n\tif (!font)\n\t\treturn nullptr;\n\tauto textNode = util::make_unique<SVGElement>(\"text\");\n\tif (_selectFontByClass)\n\t\ttextNode->addAttribute(\"class\", string(\"f\")+XMLString(_fontnum));\n\telse {\n\t\ttextNode->addAttribute(\"font-family\", font->name());\n\t\ttextNode->addAttribute(\"font-size\", font->scaledSize());\n\t\ttextNode->setFillColor(font->color());\n\t}\n\tif (_vertical) {\n\t\ttextNode->addAttribute(\"writing-mode\", \"tb\");\n\t\t// align glyphs designed for horizontal layout properly\n\t\tif (auto pf = font_cast<const PhysicalFont*>(font)) {\n\t\t\tif (!pf->getMetrics()->verticalLayout()) { // alphabetic text designed for horizontal layout?\n\t\t\t\tx += pf->scaledAscent()/2.5; // move vertical baseline to the right by strikethrough offset\n\t\t\t\ttextNode->addAttribute(\"glyph-orientation-vertical\", 90); // ensure rotation\n\t\t\t}\n\t\t}\n\t}\n\ttextNode->addAttribute(\"x\", x);\n\ttextNode->addAttribute(\"y\", y);\n\tif (!_matrix->isIdentity())\n\t\ttextNode->addAttribute(\"transform\", _matrix->toSVG());\n\treturn textNode;\n}\n"
  },
  {
    "path": "src/SVGCharHandler.hpp",
    "content": "/*************************************************************************\n** SVGCharHandler.hpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SVGCHARHANDLER_HPP\n#define SVGCHARHANDLER_HPP\n\n#include <memory>\n#include <stack>\n#include \"Color.hpp\"\n#include \"Font.hpp\"\n#include \"Matrix.hpp\"\n#include \"Opacity.hpp\"\n\n\ntemplate <typename T>\nclass CharProperty {\n\tpublic:\n\t\tCharProperty () =default;\n\t\tCharProperty (const T &v) : _value(v) {}\n\t\tCharProperty (T &&v) : _value(std::move(v)) {}\n\n\t\tvoid set (const T &v) {\n\t\t\tif (v != _value) {\n\t\t\t\t_value = v;\n\t\t\t\t_changed = true;\n\t\t\t}\n\t\t}\n\n\t\tconst T& get () const         {return _value;}\n\t\tconst T* operator -> () const {return &_value;}\n\t\toperator const T& () const    {return _value;}\n\t\tbool changed () const         {return _changed;}\n\t\tvoid changed (bool c)         {_changed = c;}\n\n\tprivate:\n\t\tT _value=T();\n\t\tbool _changed=false;\n};\n\n\nclass SVGElement;\n\n\n/** Base class for all character handlers. These handlers create SVG representations\n *  for the added characters and append them to the SVG tree. */\nclass SVGCharHandler {\n\tpublic:\n\t\tSVGCharHandler () : _matrix(1) {}\n\t\tvirtual ~SVGCharHandler() =default;\n\t\tvirtual void setInitialContextNode (SVGElement *node);\n\t\tvirtual void appendChar (uint32_t c, double x, double y) =0;\n\t\tvirtual void notifyXAdjusted () {}\n\t\tvirtual void notifyYAdjusted () {}\n\t\tvoid setFillColor (const Color &color)   {_fillColor.set(color);}\n\t\tvoid setStrokeColor (const Color &color) {_strokeColor.set(color);}\n\t\tvoid setOpacity (const Opacity &opacity) {_opacity.set(opacity);}\n\t\tvoid setFont (const Font &font, int id)  {_font.set(&font); _fontnum = id;}\n\t\tvoid setMatrix (const Matrix &matrix)    {_matrix.set(matrix);}\n\t\tvoid setVertical (bool vertical)         {_vertical.set(vertical);}\n\t\tColor getFillColor () const              {return _fillColor.get();}\n\t\tColor getStrokeColor () const            {return _strokeColor.get();}\n\t\tconst Opacity& getOpacity () const       {return _opacity.get();}\n\t\tconst Font* getFont () const             {return _font.get();}\n\t\tint getFontID () const                   {return _fontnum;}\n\t\tconst Matrix& getMatrix () const         {return _matrix.get();}\n\n\tprotected:\n\t\tvirtual void resetContextNode ();\n\t\tSVGElement* pushContextNode (std::unique_ptr<SVGElement> node);\n\t\tvoid popContextNode ();\n\n\t\tSVGElement* contextNode () const {\n\t\t\treturn _contextNodeStack.empty() ? _initialContextNode : _contextNodeStack.top();\n\t\t}\n\n\t\tCharProperty<Color> _fillColor=Color::BLACK;    ///< current fill color\n\t\tCharProperty<Color> _strokeColor=Color::BLACK;  ///< current stroke color\n\t\tCharProperty<Opacity> _opacity;            ///< current opacity values\n\t\tCharProperty<const Font*> _font=0;         ///< current font\n\t\tint _fontnum=0;                            ///< current font ID\n\t\tCharProperty<Matrix> _matrix;              ///< current transformation\n\t\tCharProperty<bool> _vertical=false;        ///< current writing mode\n\n\tprivate:\n\t\tSVGElement *_initialContextNode= nullptr;  ///< SVG element the generated character nodes are attached to\n\t\tstd::stack<SVGElement*> _contextNodeStack;\n};\n\n\n/** Base class for all character handlers that create SVG <text> elements. */\nclass SVGCharTextHandler : public SVGCharHandler {\n\tpublic:\n\t\texplicit SVGCharTextHandler (bool selectFontByClass) : _selectFontByClass(selectFontByClass) {}\n\n\tprotected:\n\t\tstd::unique_ptr<SVGElement> createTextNode (double x, double y) const;\n\n\tprivate:\n\t\tbool _selectFontByClass;\n};\n\n#endif\n"
  },
  {
    "path": "src/SVGCharHandlerFactory.cpp",
    "content": "/*************************************************************************\n** SVGCharHandlerFactory.cpp                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"SVGCharHandlerFactory.hpp\"\n#include \"SVGCharPathHandler.hpp\"\n#include \"SVGSingleCharTextHandler.hpp\"\n#include \"SVGCharTspanTextHandler.hpp\"\n#include \"SVGTree.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\nunique_ptr<SVGCharHandler> SVGCharHandlerFactory::createHandler () {\n\tif (!SVGTree::USE_FONTS)\n\t\treturn util::make_unique<SVGCharPathHandler>(SVGTree::CREATE_USE_ELEMENTS, SVGTree::RELATIVE_PATH_CMDS);\n\tif (SVGTree::MERGE_CHARS)\n\t\treturn util::make_unique<SVGCharTspanTextHandler>(SVGTree::CREATE_CSS);\n\treturn util::make_unique<SVGSingleCharTextHandler>(SVGTree::CREATE_CSS);\n}\n"
  },
  {
    "path": "src/SVGCharHandlerFactory.hpp",
    "content": "/*************************************************************************\n** SVGCharHandlerFactory.hpp                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SVGCHARHANDLERFACTORY_HPP\n#define SVGCHARHANDLERFACTORY_HPP\n\n#include <memory>\n#include \"SVGCharHandler.hpp\"\n\nstruct SVGCharHandlerFactory {\n\tstatic std::unique_ptr<SVGCharHandler> createHandler ();\n};\n\n#endif\n\n"
  },
  {
    "path": "src/SVGCharPathHandler.cpp",
    "content": "/*************************************************************************\n** SVGCharPathHandler.cpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <sstream>\n#include \"Font.hpp\"\n#include \"FontManager.hpp\"\n#include \"SVGCharPathHandler.hpp\"\n#include \"utility.hpp\"\n#include \"SVGElement.hpp\"\n\nusing namespace std;\n\n/** Constructs a new path builder.\n *  @param[in] createUseElements determines whether to create \"use\" elements to reference previous paths or not\n *  @param[in] relativePathCommands determines whether to create relative or absolute SVG path commands */\nSVGCharPathHandler::SVGCharPathHandler (bool createUseElements, bool relativePathCommands)\n\t: _relativePathCommands(relativePathCommands)\n{\n\tif (createUseElements)\n\t\t_appendChar = &SVGCharPathHandler::appendUseElement;\n\telse\n\t\t_appendChar = &SVGCharPathHandler::appendPathElement;\n}\n\n\nvoid SVGCharPathHandler::resetContextNode () {\n\tSVGCharHandler::resetContextNode();\n\t_groupNode = nullptr;\n}\n\n\n/** Appends the path representation of a single character to the context element.\n *  @param[in] c code of the character to be appended\n *  @param[in] x horizontal position of the character (in bp units)\n *  @param[in] y vertical position of the character (in bp units) */\nvoid SVGCharPathHandler::appendChar (uint32_t c, double x, double y) {\n\tif (_font.changed()) {\n\t\t_fontColor.set(_font.get()->color());\n\t\tif (_fontColor.changed() && _fontColor.get() != Color::BLACK)\n\t\t\t_fillColor.changed(true); // ensure application of text color when resetting the font color to black\n\t\t_font.changed(false);\n\t}\n\t// Apply text color changes only if the color of the entire font is black.\n\t// Glyphs of non-black fonts (e.g. defined in a XeTeX document) can't change their color.\n\tCharProperty<Color> &color = (_fontColor.get() != Color::BLACK) ? _fontColor : _fillColor;\n\tbool applyColor = color.get() != Color::BLACK || (SVGElement::USE_CURRENTCOLOR && SVGElement::CURRENTCOLOR == Color::BLACK);\n\tbool applyMatrix = !_matrix->isIdentity();\n\tbool applyOpacity = !_opacity->isFillDefault();\n\tif (!_groupNode) {\n\t\tcolor.changed(applyColor);\n\t\t_matrix.changed(applyMatrix);\n\t}\n\tif (color.changed() || _matrix.changed() || _opacity.changed()) {\n\t\tresetContextNode();\n\t\tif (applyColor || applyMatrix || applyOpacity) {\n\t\t\t_groupNode = pushContextNode(util::make_unique<SVGElement>(\"g\"));\n\t\t\tcontextNode()->setFillColor(color);\n\t\t\tcontextNode()->setFillOpacity(_opacity->fillalpha());\n\t\t\tcontextNode()->setTransform(_matrix);\n\t\t}\n\t\tcolor.changed(false);\n\t\t_matrix.changed(false);\n\t\t_opacity.changed(false);\n\t}\n\tconst Font *font = _font.get();\n\tif (font->verticalLayout()) {\n\t\t// move glyph graphics so that its origin is located at the top center position\n\t\tGlyphMetrics metrics;\n\t\tfont->getGlyphMetrics(c, _vertical, metrics);\n\t\tx -= metrics.wl;\n\t\tif (_vertical) {\n\t\t\tauto physicalFont = font_cast<const PhysicalFont *>(font);\n\t\t\tif (!physicalFont)\n\t\t\t\ty += metrics.d;\n\t\t\telse {\n\t\t\t\t// Center glyph between top and bottom border of the TFM box.\n\t\t\t\t// This is just an approximation used until I find a way to compute\n\t\t\t\t// the exact location in vertical mode.\n\t\t\t\tGlyphMetrics exact_metrics;\n\t\t\t\tphysicalFont->getExactGlyphBox(c, exact_metrics, false, nullptr);\n\t\t\t\tdouble ed = max(0.0, exact_metrics.d);\n\t\t\t\tdouble eh = max(0.0, exact_metrics.h);\n\t\t\t\ty += eh + (metrics.d - eh - ed) / 2;\n\t\t\t}\n\t\t}\n\t}\n\tMatrix rotation(1);\n\tif (_vertical && !font->verticalLayout()) {\n\t\t// alphabetic text designed for horizontal mode\n\t\t// must be rotated by 90 degrees if in vertical mode\n\t\trotation.translate(-x, -y);\n\t\trotation.rotate(90);\n\t\trotation.translate(x, y);\n\t}\n\t(this->*_appendChar)(c, x, y, rotation);\n}\n\n\nvoid SVGCharPathHandler::appendUseElement (uint32_t c, double x, double y, const Matrix &matrix) const {\n\tstring id = \"#g\" + to_string(FontManager::instance().fontID(_font)) + \"-\" + to_string(c);\n\tauto useNode = util::make_unique<SVGElement>(\"use\");\n\tuseNode->addAttribute(\"x\", x);\n\tuseNode->addAttribute(\"y\", y);\n\tuseNode->addAttribute(\"xlink:href\", id);\n\tuseNode->setFillOpacity(_opacity->blendMode()); // add blend mode style here because it's not inheritable\n\tuseNode->setTransform(matrix);\n\tcontextNode()->append(std::move(useNode));\n}\n\n\nvoid SVGCharPathHandler::appendPathElement (uint32_t c, double x, double y, const Matrix &matrix) const {\n\tGlyph glyph;\n\tauto pf = font_cast<const PhysicalFont*>(_font.get());\n\tif (pf && pf->getGlyph(c, glyph, nullptr)) {\n\t\tdouble sx = pf->scaledSize()/pf->unitsPerEm();\n\t\tdouble sy = -sx;\n\t\tostringstream oss;\n\t\tglyph.writeSVG(oss, _relativePathCommands, sx, sy, x, y);\n\t\tauto glyphNode = util::make_unique<SVGElement>(\"path\");\n\t\tglyphNode->addAttribute(\"d\", oss.str());\n\t\tglyphNode->setTransform(matrix);\n\t\tcontextNode()->append(std::move(glyphNode));\n\t}\n}\n"
  },
  {
    "path": "src/SVGCharPathHandler.hpp",
    "content": "/*************************************************************************\n** SVGCharPathHandler.hpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SVGCHARPATHHANDLER_HPP\n#define SVGCHARPATHHANDLER_HPP\n\n#include \"SVGCharHandler.hpp\"\n\n/** Creates SVG path elements for all characters. */\nclass SVGCharPathHandler : public SVGCharHandler {\n\tusing AppendMethod = void (SVGCharPathHandler::*)(uint32_t c, double x, double y, const Matrix &matrix) const;\n\n\tpublic:\n\t\tSVGCharPathHandler (bool createUseElements, bool relativePathsCommands);\n\t\tvoid appendChar (uint32_t c, double x, double y) override;\n\n\tprotected:\n\t\tvoid appendUseElement (uint32_t c, double x, double y, const Matrix &matrix) const;\n\t\tvoid appendPathElement (uint32_t c, double x, double y, const Matrix &matrix) const;\n\t\tvoid resetContextNode () override;\n\n\tprivate:\n\t\tAppendMethod _appendChar;        ///< method called to append a single character\n\t\tbool _relativePathCommands;      ///< if true, create relative rather than absolute SVG path commands\n\t\tSVGElement *_groupNode=nullptr;  ///< current group node taking the path elements\n\t\tCharProperty<Color> _fontColor=Color::BLACK;  ///< color of current font\n};\n\n#endif\n"
  },
  {
    "path": "src/SVGCharTspanTextHandler.cpp",
    "content": "/*************************************************************************\n** SVGCharTspanTextHandler.cpp                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"SVGCharTspanTextHandler.hpp\"\n#include \"utility.hpp\"\n#include \"SVGElement.hpp\"\n\nusing namespace std;\n\nSVGCharTspanTextHandler::SVGCharTspanTextHandler (bool selectFontByClass)\n\t: SVGCharTextHandler(selectFontByClass)\n{\n\tresetContextNode();\n}\n\n\nvoid SVGCharTspanTextHandler::appendChar (uint32_t c, double x, double y) {\n\t// changes of fonts and transformations require a new text element\n\tif (!_textNode || _font.changed() || _matrix.changed() || _vertical.changed()) {\n\t\tresetContextNode();\n\t\t_textNode = pushContextNode(createTextNode(x, y));\n\t\t_fillColor.changed(true);   // force creating tspan with color attribute if current color differs from font color\n\t\t_opacity.changed(true); // dito for opacity properties\n\t}\n\tif (_tspanNode && (_xchanged || _ychanged || _fillColor.changed() || _opacity.changed())) {\n\t\t// if drawing position or color was explicitly changed, finish current tspan element\n\t\tpopContextNode();\n\t\t_tspanNode = nullptr;\n\t}\n\t// Apply text color changes only if the color of the entire font is black.\n\t// Glyphs of non-black fonts (e.g. defined in a XeTeX document) can't change their color.\n\tbool applyColor = _fillColor.get() != Color::BLACK || (SVGElement::USE_CURRENTCOLOR && _font.get()->color() == Color::BLACK);\n\tbool applyOpacity = !_opacity->isFillDefault();\n\tif (_xchanged || _ychanged || (_fillColor.changed() && applyColor) || (_opacity.changed() && applyOpacity)) {\n\t\t_tspanNode = pushContextNode(util::make_unique<SVGElement>(\"tspan\"));\n\t\tif (applyColor)\n\t\t\t_tspanNode->setFillColor(_fillColor);\n\t\t_fillColor.changed(false);\n\t\t_tspanNode->setFillOpacity(_opacity);\n\t\t_opacity.changed(false);\n\t\tif (_xchanged) {\n\t\t\tif (_vertical) {\n\t\t\t\t// align glyphs designed for horizontal layout properly\n\t\t\t\tif (auto pf = font_cast<const PhysicalFont*>(_font.get()))\n\t\t\t\t\tif (!pf->getMetrics()->verticalLayout())\n\t\t\t\t\t\tx += pf->scaledAscent()/2.5; // move vertical baseline to the right by strikethrough offset\n\t\t\t}\n\t\t\t_tspanNode->addAttribute(\"x\", x);\n\t\t\t_xchanged = false;\n\t\t}\n\t\tif (_ychanged) {\n\t\t\t_tspanNode->addAttribute(\"y\", y);\n\t\t\t_ychanged = false;\n\t\t}\n\t}\n\tcontextNode()->append(XMLString(_font.get()->unicode(c), false));\n}\n\n\nvoid SVGCharTspanTextHandler::setInitialContextNode (SVGElement *node) {\n\tSVGCharHandler::setInitialContextNode(node);\n\t_textNode = _tspanNode = nullptr;\n\t_xchanged = _ychanged = false;\n}\n\n\nvoid SVGCharTspanTextHandler::resetContextNode () {\n\tSVGCharHandler::resetContextNode();\n\t_textNode = _tspanNode = nullptr;\n\t_xchanged = _ychanged = false;\n\t_font.changed(false);\n\t_matrix.changed(false);\n\t_vertical.changed(false);\n}\n"
  },
  {
    "path": "src/SVGCharTspanTextHandler.hpp",
    "content": "/*************************************************************************\n** SVGCharTspanTextHandler.hpp                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SVGCHARTSPANTEXTHANDLER_HPP\n#define SVGCHARTSPANTEXTHANDLER_HPP\n\n#include \"SVGCharHandler.hpp\"\n\nclass SVGCharTspanTextHandler : public SVGCharTextHandler {\n\tpublic:\n\t\texplicit SVGCharTspanTextHandler (bool selectFontByClass);\n\t\tvoid notifyXAdjusted () override {_xchanged = true;}\n\t\tvoid notifyYAdjusted()  override {_ychanged = true;}\n\t\tvoid appendChar (uint32_t c, double x, double y) override;\n\t\tvoid setInitialContextNode (SVGElement *node) override;\n\n\tprotected:\n\t\tvoid resetContextNode () override;\n\n\tprivate:\n\t\tbool _xchanged, _ychanged;\n\t\tSVGElement *_textNode;\n\t\tSVGElement *_tspanNode;\n};\n\n#endif\n"
  },
  {
    "path": "src/SVGElement.cpp",
    "content": "/*************************************************************************\n** SVGElement.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <sstream>\n#include \"Color.hpp\"\n#include \"Matrix.hpp\"\n#include \"Opacity.hpp\"\n#include \"SVGElement.hpp\"\n#include \"XMLString.hpp\"\n\nusing namespace std;\n\nbool SVGElement::USE_CURRENTCOLOR=false;\nColor SVGElement::CURRENTCOLOR;\n\n\nvoid SVGElement::setClipPathUrl (const string &url) {\n\tif (!url.empty())\n\t\taddAttribute(\"clip-path\", \"url(#\"+url+\")\");\n}\n\n\nvoid SVGElement::setClipRule (FillRule rule) {\n\tif (rule != FR_NONZERO)\n\t\taddAttribute(\"clip-rule\", \"evenodd\");\n}\n\n\nvoid SVGElement::setFillColor (Color color, bool skipBlack) {\n\tif (USE_CURRENTCOLOR && color == CURRENTCOLOR)\n\t\taddAttribute(\"fill\", \"currentColor\");\n\telse if (color != Color::BLACK || !skipBlack)\n\t\taddAttribute(\"fill\", color.svgColorString());\n}\n\n\nvoid SVGElement::setFillOpacity (const Opacity &opacity) {\n\tif (!opacity.isFillDefault()) {\n\t\tsetFillOpacity(opacity.fillalpha());\n\t\tsetFillOpacity(opacity.blendMode());\n\t}\n}\n\n\nvoid SVGElement::setFillOpacity (const OpacityAlpha &alpha) {\n\tif (!alpha.isOpaque())\n\t\taddAttribute(\"fill-opacity\", alpha.value());\n}\n\n\nvoid SVGElement::setFillOpacity (Opacity::BlendMode blendMode) {\n\tif (blendMode != Opacity::BM_NORMAL)\n\t\taddAttribute(\"style\", \"mix-blend-mode:\"+Opacity::cssBlendMode(blendMode));\n}\n\n\nvoid SVGElement::setFillRule (FillRule rule) {\n\tif (rule != FR_NONZERO)\n\t\taddAttribute(\"fill-rule\", \"evenodd\");\n}\n\n\nvoid SVGElement::setFillPatternUrl (const std::string &url) {\n\tif (!url.empty())\n\t\taddAttribute(\"fill\", \"url(#\" + url + \")\");\n}\n\n\nvoid SVGElement::setMaskUrl (const string &url) {\n\tif (!url.empty())\n\t\taddAttribute(\"mask\", \"url(#\"+url+\")\");\n}\n\n\nvoid SVGElement::setNoFillColor () {\n\taddAttribute(\"fill\", \"none\");\n}\n\n\nvoid SVGElement::setOpacity (const OpacityAlpha &alpha) {\n\tif (!alpha.isOpaque())\n\t\taddAttribute(\"opaque\", alpha.value());\n}\n\n\nvoid SVGElement::setPoints (const vector<DPair> &points) {\n\tif (!points.empty()) {\n\t\tostringstream oss;\n\t\tfor (const DPair &p : points)\n\t\t\toss << XMLString(p.x()) << ' ' << XMLString(p.y()) << ' ';\n\t\tstring str = oss.str();\n\t\tstr.pop_back();\n\t\taddAttribute(\"points\", str);\n\t}\n}\n\n\nvoid SVGElement::setStrokeColor (Color color) {\n\taddAttribute(\"stroke\", USE_CURRENTCOLOR && color == CURRENTCOLOR ? \"currentColor\" : color.svgColorString());\n}\n\n\nvoid SVGElement::setStrokeDash (const vector<double> &pattern, double offset) {\n\tif (!pattern.empty()) {\n\t\tstring patternStr;\n\t\tfor (double dashValue : pattern)\n\t\t\tpatternStr += XMLString(dashValue)+\" \";\n\t\tpatternStr.pop_back();\n\t\tsetStrokeDash(patternStr, offset);\n\t}\n}\n\n\nvoid SVGElement::setStrokeDash (const string &pattern, double offset) {\n\tif (!pattern.empty()) {\n\t\taddAttribute(\"stroke-dasharray\", pattern);\n\t\tif (offset != 0)\n\t\t\taddAttribute(\"stroke-dashoffset\", offset);\n\t}\n}\n\n\nvoid SVGElement::setStrokeLineCap (LineCap cap) {\n\tif (cap != LC_BUTT)\n\t\taddAttribute(\"stroke-linecap\", cap == LC_ROUND ? \"round\" : \"square\");\n}\n\n\nvoid SVGElement::setStrokeLineJoin (LineJoin join) {\n\tif (join != LJ_MITER)\n\t\taddAttribute(\"stroke-linejoin\", join == LJ_BEVEL ? \"bevel\" : \"round\");\n}\n\n\nvoid SVGElement::setStrokeMiterLimit (double limit) {\n\tif (limit != 4)\n\t\taddAttribute(\"stroke-miterlimit\", limit);\n}\n\n\nvoid SVGElement::setStrokeOpacity (const Opacity &opacity) {\n\tif (!opacity.isStrokeDefault()) {\n\t\tif (!opacity.strokealpha().isOpaque())\n\t\t\taddAttribute(\"stroke-opacity\", opacity.strokealpha().value());\n\t\tif (opacity.blendMode() != Opacity::BM_NORMAL)\n\t\t\taddAttribute(\"style\", \"mix-blend-mode:\"+opacity.cssBlendMode());\n\t}\n}\n\n\nvoid SVGElement::setStrokeWidth (double width) {\n\tif (width != 1)\n\t\taddAttribute(\"stroke-width\", width);\n}\n\n\nvoid SVGElement::setTransform (const Matrix &matrix) {\n\tif (!matrix.isIdentity())\n\t\taddAttribute(\"transform\", matrix.toSVG());\n}"
  },
  {
    "path": "src/SVGElement.hpp",
    "content": "/*************************************************************************\n** SVGElement.hpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SVGELEMENT_HPP\n#define SVGELEMENT_HPP\n\n#include \"XMLNode.hpp\"\n\nclass Color;\nclass Matrix;\nclass Opacity;\n\nclass SVGElement : public XMLElement {\n\tpublic:\n\t\tenum FillRule {FR_EVENODD, FR_NONZERO};\n\t\tenum LineCap {LC_BUTT, LC_ROUND, LC_SQUARE};\n\t\tenum LineJoin {LJ_BEVEL, LJ_MITER, LJ_ROUND};\n\n\tpublic:\n\t\texplicit SVGElement (std::string name) : XMLElement(std::move(name)) {}\n\t\texplicit SVGElement (const XMLElement &node) : XMLElement(node) {}\n\t\texplicit SVGElement (XMLElement &&node) noexcept : XMLElement(std::move(node)) {}\n\t\tvoid setClipPathUrl (const std::string &url);\n\t\tvoid setClipRule (FillRule rule);\n\t\tvoid setFillColor (Color color, bool skipBlack=true);\n\t\tvoid setFillOpacity (const Opacity &opacity);\n\t\tvoid setFillOpacity (const OpacityAlpha &alpha);\n\t\tvoid setFillOpacity (Opacity::BlendMode blendMode);\n\t\tvoid setFillPatternUrl (const std::string &url);\n\t\tvoid setFillRule (FillRule rule);\n\t\tvoid setMaskUrl (const std::string &url);\n\t\tvoid setNoFillColor ();\n\t\tvoid setOpacity (const OpacityAlpha &alpha);\n\t\tvoid setPoints (const std::vector<DPair> &points);\n\t\tvoid setStrokeColor (Color color);\n\t\tvoid setStrokeDash (const std::vector<double> &pattern, double offset=0);\n\t\tvoid setStrokeDash (const std::string &pattern, double offset=0);\n\t\tvoid setStrokeLineCap (LineCap cap);\n\t\tvoid setStrokeLineJoin (LineJoin join);\n\t\tvoid setStrokeOpacity (const Opacity &opacity);\n\t\tvoid setStrokeWidth (double width);\n\t\tvoid setStrokeMiterLimit (double limit);\n\t\tvoid setTransform (const Matrix &matrix);\n\n\t\tstatic bool USE_CURRENTCOLOR;  ///< if true, apply color value \"currentColor\"\n\t\tstatic Color CURRENTCOLOR;     ///< color to be replaced with \"currentColor\"\n};\n\n#endif\n"
  },
  {
    "path": "src/SVGOutput.cpp",
    "content": "/*************************************************************************\n** SVGOutput.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include <fstream>\n#include <iomanip>\n#include <iostream>\n#include <sstream>\n#include \"Calculator.hpp\"\n#include \"FileSystem.hpp\"\n#include \"Message.hpp\"\n#include \"SVGOutput.hpp\"\n#include \"utility.hpp\"\n#include \"ZLibOutputStream.hpp\"\n\nusing namespace std;\n\n\nSVGOutput::SVGOutput (const string &base, string pattern, int zipLevel)\n\t: _path(base), _pattern(std::move(pattern)), _stdout(base.empty()), _zipLevel(zipLevel)\n{\n}\n\n\n/** Returns an output stream for the given page.\n *  @param[in] page number of current page\n *  @param[in] numPages total number of pages in the DVI file\n *  @param[in] hashes hash values of the current page\n *  @return output stream for the given page */\nostream& SVGOutput::getPageStream (int page, int numPages, const HashTriple &hashes) const {\n\tFilePath path = filepath(page, numPages, hashes);\n\tif (path.empty()) {\n\t\tif (_zipLevel == 0) {\n\t\t\t_osptr.reset();\n\t\t\treturn cout;\n\t\t}\n#ifdef _WIN32\n\t\tif (_setmode(_fileno(stdout), _O_BINARY) == -1)\n\t\t\tthrow MessageException(\"can't open stdout in binary mode\");\n#endif\n\t\treturn *(_osptr = util::make_unique<ZLibOutputStream>(cout, ZLIB_GZIP, _zipLevel));\n\t}\n\tif (page == _page)\n\t\treturn *_osptr;\n\n\t_page = page;\n\tif (_zipLevel > 0)\n\t\t_osptr = util::make_unique<ZLibOutputFileStream>(path.absolute(), ZLIB_GZIP, _zipLevel);\n\telse\n\t\t_osptr = util::make_unique<ofstream>(path.absolute());\n\tif (!_osptr)\n\t\tthrow MessageException(\"can't open file \"+path.shorterAbsoluteOrRelative()+\" for writing\");\n\treturn *_osptr;\n}\n\n\n/** Returns the path of the SVG file containing the given page number.\n *  @param[in] page number of current page\n *  @param[in] numPages total number of pages\n *  @param[in] hashes hash values of current page */\nFilePath SVGOutput::filepath (int page, int numPages, const HashTriple &hashes) const {\n\tFilePath outpath;\n\tif (!_stdout) {\n\t\tstring expanded_pattern = util::trim(expandFormatString(_pattern, page, numPages, hashes));\n\t\t// set and expand default pattern if necessary\n\t\tif (expanded_pattern.empty()) {\n\t\t\tstring pattern = hashes.empty() ? (numPages > 1 ? \"%f-%p\" : \"%f\") : \"%f-%hd\";\n\t\t\texpanded_pattern = expandFormatString(std::move(pattern), page, numPages, hashes);\n\t\t}\n\t\t// append suffix if necessary\n\t\toutpath.set(expanded_pattern, FilePath::PT_FILE);\n\t\tif (outpath.suffix().empty())\n\t\t\toutpath.suffix(_zipLevel > 0 ? \"svgz\" : \"svg\");\n\t}\n\treturn outpath;\n}\n\n\n/** Replaces expressions in a given string by the corresponding values and returns the result.\n *  Supported constructs:\n *  %f: basename of the current file (filename without suffix)\n *  %h: hash value of current page\n *  %[0-9]?p: current page number\n *  %[0-9]?P: number of pages in DVI file\n *  %[0-9]?(expr): arithmetic expression\n *  @param[in] str string to expand\n *  @param[in] page number of current page\n *  @param[in] numPages total number of pages\n *  @param[in] hashes hash values of current page (skipped if empty) */\nstring SVGOutput::expandFormatString (string str, int page, int numPages, const HashTriple &hashes) const {\n\tstring result;\n\twhile (!str.empty()) {\n\t\tauto pos = str.find('%');\n\t\tif (pos == string::npos) {\n\t\t\tresult += str;\n\t\t\tstr.clear();\n\t\t}\n\t\telse {\n\t\t\tresult += str.substr(0, pos);\n\t\t\tstr = str.substr(pos);\n\t\t\tpos = 1;\n\t\t\tostringstream oss;\n\t\t\tif (!isdigit(str[pos]))\n\t\t\t\toss << setw(util::ilog10(numPages)+1) << setfill('0');\n\t\t\telse {\n\t\t\t\toss << setw(str[pos]-'0') << setfill('0');\n\t\t\t\tpos++;\n\t\t\t}\n\t\t\tswitch (str[pos]) {\n\t\t\t\tcase 'f':\n\t\t\t\t\tresult += _path.basename();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'h': {\n\t\t\t\t\tchar variant = pos+1 < str.length() ? str[++pos] : '\\0';\n\t\t\t\t\tswitch (variant) {\n\t\t\t\t\t\tcase 'd': result += hashes.dviHash(); break;\n\t\t\t\t\t\tcase 'c': result += hashes.cmbHash(); break;\n\t\t\t\t\t\tcase 'o': result += hashes.optHash(); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow MessageException(\"hash type 'd', 'c', or 'o' expected after '%h' in filename pattern\");\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'n':\n\t\t\t\tcase 'N':\n\t\t\t\t\toss << (str[pos] == 'n' ? _fileNumber : _fileCount);\n\t\t\t\t\tresult += oss.str();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'p':\n\t\t\t\tcase 'P':\n\t\t\t\t\toss << (str[pos] == 'p' ? page : numPages);\n\t\t\t\t\tresult += oss.str();\n\t\t\t\t\tbreak;\n\t\t\t\tcase '(': {\n\t\t\t\t\tauto endpos = str.find(')', pos);\n\t\t\t\t\tif (endpos == string::npos)\n\t\t\t\t\t\tthrow MessageException(\"missing ')' in filename pattern\");\n\t\t\t\t\tif (endpos-pos-1 > 1) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tCalculator calculator;\n\t\t\t\t\t\t\tcalculator.setVariable(\"p\", page);\n\t\t\t\t\t\t\tcalculator.setVariable(\"P\", numPages);\n\t\t\t\t\t\t\toss << floor(calculator.eval(str.substr(pos, endpos-pos+1)));\n\t\t\t\t\t\t\tresult += oss.str();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (CalculatorException &e) {\n\t\t\t\t\t\t\tthrow MessageException(\"error in filename pattern (\" + string(e.what()) + \")\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpos = endpos;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tstr = str.substr(pos+1);\n\t\t}\n\t}\n\treturn result;\n}\n\n\n/** Returns true if methods 'filename' and 'getPageStream' ignore the hash\n *  parameter because it's not requested in the filename pattern. */\nbool SVGOutput::ignoresHashes () const {\n\treturn _stdout || (!_pattern.empty() && _pattern.find(\"%h\") == string::npos);\n}\n"
  },
  {
    "path": "src/SVGOutput.hpp",
    "content": "/*************************************************************************\n** SVGOutput.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SVGOUTPUT_HPP\n#define SVGOUTPUT_HPP\n\n#include <memory>\n#include <ostream>\n#include <string>\n#include \"FilePath.hpp\"\n\n\nstruct SVGOutputBase {\n\tclass HashTriple {\n\t\tpublic:\n\t\t\tHashTriple () =default;\n\t\t\tHashTriple (std::string dviHash, std::string optHash, std::string cmbHash)\n\t\t\t\t: _dviHash(std::move(dviHash)), _optHash(std::move(optHash)), _cmbHash(std::move(cmbHash)) {}\n\t\t\tconst std::string& dviHash () const {return _dviHash;}\n\t\t\tconst std::string& optHash () const {return _optHash;}\n\t\t\tconst std::string& cmbHash () const {return _cmbHash;}\n\t\t\tbool empty () const {return _dviHash.empty();}\n\n\t\tprivate:\n\t\t\tstd::string _dviHash;  ///< hash of plain DVI data\n\t\t\tstd::string _optHash;  ///< hash of options affecting the SVG document\n\t\t\tstd::string _cmbHash;  ///< combined hash of DVI data and options\n\t};\n\n\tvirtual ~SVGOutputBase () =default;\n\tvirtual std::ostream& getPageStream (int page, int numPages, const HashTriple &hashes=HashTriple()) const =0;\n\tvirtual FilePath filepath (int page, int numPages, const HashTriple &hashes= HashTriple()) const =0;\n\tvirtual void finish () =0;\n\tvirtual bool ignoresHashes () const {return true;}\n};\n\n\nclass SVGOutput : public SVGOutputBase {\n\tpublic:\n\t\tSVGOutput () =default;\n\t\texplicit SVGOutput (const std::string &base) : SVGOutput(base, \"\", 0) {}\n\t\tSVGOutput (const std::string &base, const std::string &pattern) : SVGOutput(base, pattern, 0) {}\n\t\tSVGOutput (const std::string &base, std::string pattern, int zipLevel);\n\t\tstd::ostream& getPageStream (int page, int numPages, const HashTriple &hash=HashTriple()) const override;\n\t\tFilePath filepath (int page, int numPages, const HashTriple &hash=HashTriple()) const override;\n\t\tvoid finish () override {_osptr.reset();}\n\t\tbool ignoresHashes () const override;\n\t\tvoid setFileNumbers (int fileNumber, int fileCount) {_fileNumber = fileNumber; _fileCount = fileCount;}\n\n\tprotected:\n\t\tstd::string expandFormatString (std::string str, int page, int numPages, const HashTriple &hashes) const;\n\n\tprivate:\n\t\tFilePath _path;\n\t\tstd::string _pattern;\n\t\tbool _stdout=true;    ///< write to STDOUT?\n\t\tint _zipLevel=0;      ///< compression level\n\t\tint _fileNumber=1;    ///< current number of file in sequence of files\n\t\tint _fileCount=1;     ///< number of files in sequence\n\t\tmutable int _page=-1; ///< number of current page being written\n\t\tmutable std::unique_ptr<std::ostream> _osptr;\n};\n\n#endif\n"
  },
  {
    "path": "src/SVGSingleCharTextHandler.cpp",
    "content": "/*************************************************************************\n** SVGSingleCharTextHandler.cpp                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"SVGSingleCharTextHandler.hpp\"\n#include \"SVGElement.hpp\"\n\nusing namespace std;\n\nvoid SVGSingleCharTextHandler::appendChar (uint32_t c, double x, double y) {\n\tconst Font *font = _font.get();\n\tauto textNode = createTextNode(x, y);\n\ttextNode->append(XMLString(font->unicode(c), false));\n\t// Apply color changes only if the color differs from black and if the font color itself is black.\n\t// Glyphs from non-black fonts (e.g. defined in a XeTeX document) can't change their color.\n\tif (font->color() == Color::BLACK && (_fillColor.get() != Color::BLACK || (SVGElement::USE_CURRENTCOLOR && SVGElement::CURRENTCOLOR == Color::BLACK)))\n\t\ttextNode->setFillColor(_fillColor);\n\t_fillColor.changed(false);\n\tif (!_opacity->isFillDefault())\n\t\ttextNode->setFillOpacity(_opacity);\n\t_opacity.changed(false);\n\tcontextNode()->append(std::move(textNode));\n}\n"
  },
  {
    "path": "src/SVGSingleCharTextHandler.hpp",
    "content": "/*************************************************************************\n** SVGSingleCharTextHandler.hpp                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SVGSINGLECHARTEXTHANDLER_HPP\n#define SVGSINGLECHARTEXTHANDLER_HPP\n\n#include \"SVGCharHandler.hpp\"\n\n\nclass SVGSingleCharTextHandler : public SVGCharTextHandler {\n\tpublic:\n\t\texplicit SVGSingleCharTextHandler (bool createStyleElements) : SVGCharTextHandler(createStyleElements) {}\n\t\tvoid appendChar (uint32_t c, double x, double y) override;\n};\n\n#endif\n\n"
  },
  {
    "path": "src/SVGTree.cpp",
    "content": "/*************************************************************************\n** SVGTree.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include <cstring>\n#include <sstream>\n#include \"BoundingBox.hpp\"\n#include \"DVIToSVG.hpp\"\n#include \"FileSystem.hpp\"\n#include \"Font.hpp\"\n#include \"FontManager.hpp\"\n#include \"FontWriter.hpp\"\n#include \"SVGCharHandlerFactory.hpp\"\n#include \"SVGTree.hpp\"\n#include \"XMLDocument.hpp\"\n#include \"XMLString.hpp\"\n\nusing namespace std;\n\n// static class variables\nbool SVGTree::CREATE_CSS=true;\nbool SVGTree::USE_FONTS=true;\nFontWriter::FontFormat SVGTree::FONT_FORMAT = FontWriter::FontFormat::SVG;\nbool SVGTree::CREATE_USE_ELEMENTS=false;\nbool SVGTree::RELATIVE_PATH_CMDS=false;\nbool SVGTree::MERGE_CHARS=true;\nbool SVGTree::ADD_COMMENTS=false;\nbool SVGTree::EMBED_BITMAP_DATA = false;\ndouble SVGTree::ZOOM_FACTOR=1.0;\n\n\nSVGTree::SVGTree () : _charHandler(SVGCharHandlerFactory::createHandler()) {\n\treset();\n}\n\n\n/** Clears the SVG tree and initializes the root element. */\nvoid SVGTree::reset () {\n\t_doc.clear();\n\tauto rootNode = util::make_unique<SVGElement>(\"svg\");\n\trootNode->addAttribute(\"version\", \"1.1\");\n\trootNode->addAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n\trootNode->addAttribute(\"xmlns:xlink\", \"http://www.w3.org/1999/xlink\");\n\t_root = rootNode.get();\n\t_doc.setRootNode(std::move(rootNode));\n\t_page = _defs = nullptr;\n\t_styleCDataNode = nullptr;\n}\n\n\n/** Sets the bounding box of the document.\n *  @param[in] bbox bounding box in PS point units */\nvoid SVGTree::setBBox (const BoundingBox &bbox) const {\n\tif (ZOOM_FACTOR >= 0) {\n\t\t_root->addAttribute(\"width\", XMLString(bbox.width()*ZOOM_FACTOR)+\"pt\");\n\t\t_root->addAttribute(\"height\", XMLString(bbox.height()*ZOOM_FACTOR)+\"pt\");\n\t}\n\t_root->addAttribute(\"viewBox\", bbox.svgViewBoxString());\n}\n\n\nvoid SVGTree::setFillColor (const Color &c) const {\n\tconst Font *font = _charHandler->getFont();\n\tif (!font || font->color() == Color::BLACK)\n\t\t_charHandler->setFillColor(c);\n}\n\n\nvoid SVGTree::setStrokeColor (const Color &c) const {\n\tconst Font *font = _charHandler->getFont();\n\tif (!font || font->color() == Color::BLACK)\n\t\t_charHandler->setStrokeColor(c);\n}\n\n\nvoid SVGTree::setFont (int num, const Font &font) const {\n\t_charHandler->setFont(font, num);\n\t// set default color assigned to the font\n\tif (font.color() != Color::BLACK && getFillColor() != font.color())\n\t\tsetFillColor(font.color());\n}\n\n\npair<int,const Font*> SVGTree::getFontPair () const {\n\tif (_charHandler)\n\t\treturn {_charHandler->getFontID(), _charHandler->getFont()};\n\treturn {0, nullptr};\n}\n\n\nbool SVGTree::setFontFormat (string formatstr) {\n\tauto pos = formatstr.find(',');\n\tstring opt;\n\tif (pos != string::npos) {\n\t\topt = formatstr.substr(pos+1);\n\t\tformatstr.resize(pos);\n\t}\n\tFontWriter::FontFormat format = FontWriter::toFontFormat(std::move(formatstr));\n\tif (format == FontWriter::FontFormat::UNKNOWN)\n\t\treturn false;\n\tFONT_FORMAT = format;\n\tFontWriter::AUTOHINT_FONTS = (opt == \"autohint\" || opt == \"ah\");\n\treturn true;\n}\n\n\n/** Starts a new page.\n *  @param[in] pageno number of new page */\nvoid SVGTree::newPage (int pageno) {\n\tauto pageNode = util::make_unique<SVGElement>(\"g\");\n\tif (pageno >= 0)\n\t\tpageNode->addAttribute(\"id\", string(\"page\")+XMLString(pageno));\n\t_charHandler->setInitialContextNode(pageNode.get());\n\t_page = pageNode.get();\n\t_root->append(std::move(pageNode));\n\t_defsContextStack = stack<SVGElement*>();\n\t_pageContextStack = stack<SVGElement*>();\n}\n\n\nvoid SVGTree::appendToDefs (unique_ptr<XMLNode> node) {\n\tif (!_defs) {\n\t\tauto defsNode = util::make_unique<SVGElement>(\"defs\");\n\t\t_defs = defsNode.get();\n\t\t_root->prepend(std::move(defsNode));\n\t}\n\tXMLElement *parent = _defsContextStack.empty() ? _defs : _defsContextStack.top();\n\tparent->append(std::move(node));\n}\n\n\nvoid SVGTree::appendToPage (unique_ptr<XMLNode> node) {\n\tSVGElement *parent = _pageContextStack.empty() ? _page : _pageContextStack.top();\n\tparent->append(std::move(node));\n\t_charHandler->setInitialContextNode(parent);\n}\n\n\nvoid SVGTree::prependToPage (unique_ptr<XMLNode> node) {\n\tif (_pageContextStack.empty())\n\t\t_page->prepend(std::move(node));\n\telse\n\t\t_pageContextStack.top()->prepend(std::move(node));\n}\n\n\nvoid SVGTree::transformPage (const Matrix &usermatrix) const {\n\t_page->setTransform(usermatrix);\n}\n\n\n/** Creates an SVG element for a single glyph.\n *  @param[in] c character number\n *  @param[in] font font to extract the glyph from\n *  @param[in] cb pointer to callback object for sending feedback to the glyph tracer (may be 0)\n *  @return pointer to element node if glyph exists, 0 otherwise */\nstatic unique_ptr<XMLElement> createGlyphNode (int c, const PhysicalFont &font, GFGlyphTracer::Callback *cb) {\n\tGlyph glyph;\n\tif (!font.getGlyph(c, glyph, cb) || (!SVGTree::USE_FONTS && !SVGTree::CREATE_USE_ELEMENTS))\n\t\treturn nullptr;\n\n\tdouble sx=1.0, sy=1.0;\n\tdouble upem = font.unitsPerEm();\n\tunique_ptr<XMLElement> glyphNode;\n\tif (SVGTree::USE_FONTS) {\n\t\tdouble extend = font.style() ? font.style()->extend : 1;\n\t\tglyphNode = util::make_unique<XMLElement>(\"glyph\");\n\t\tglyphNode->addAttribute(\"unicode\", XMLString(font.unicode(c), false));\n\t\tglyphNode->addAttribute(\"horiz-adv-x\", font.hAdvance(c)*extend);\n\t\tglyphNode->addAttribute(\"vert-adv-y\", font.vAdvance(c));\n\t\tstring name = font.glyphName(c);\n\t\tif (!name.empty())\n\t\t\tglyphNode->addAttribute(\"glyph-name\", name);\n\t}\n\telse {\n\t\tglyphNode = util::make_unique<XMLElement>(\"path\");\n\t\tglyphNode->addAttribute(\"id\", \"g\"+to_string(FontManager::instance().fontID(&font))+\"-\"+to_string(c));\n\t\tsx = font.scaledSize()/upem;\n\t\tsy = -sx;\n\t}\n\tostringstream oss;\n\tglyph.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS, sx, sy);\n\tglyphNode->addAttribute(\"d\", oss.str());\n\treturn glyphNode;\n}\n\n\nstatic string font_info (const Font &font) {\n\tostringstream oss;\n\tif (auto nf = font_cast<const NativeFont*>(&font)) {\n\t\toss << nf->familyName() << ' ' << nf->styleName() << \"; \" << nf->filename();\n\t\tif (nf->style()) {\n\t\t\tif (nf->style()->bold != 0)\n\t\t\t\toss << \", bold:\" << XMLString(nf->style()->bold) << \"pt\";\n\t\t\tif (nf->style()->extend != 1)\n\t\t\t\toss << \", extent:\" << XMLString(nf->style()->extend);\n\t\t\tif (nf->style()->slant != 0)\n\t\t\t\toss << \", slant:\" << XMLString(nf->style()->slant);\n\t\t}\n\t}\n\treturn oss.str();\n}\n\n\nvoid SVGTree::appendFontStyles (const unordered_set<const Font*> &fonts) {\n\tif (CREATE_CSS && USE_FONTS && !fonts.empty() && _page) {\n\t\tmap<int, const Font*> sortmap;\n\t\tfor (const Font *font : fonts)\n\t\t\tif (!font_cast<const VirtualFont*>(font))   // skip virtual fonts\n\t\t\t\tsortmap[FontManager::instance().fontID(font)] = font;\n\t\tostringstream style;\n\t\t// add font style definitions in ascending order\n\t\tfor (auto &idfontpair : sortmap) {\n\t\t\tif (CREATE_CSS) {\n\t\t\t\tstyle << \"text.f\"     << idfontpair.first << ' '\n\t\t\t\t\t<< \"{font-family:\" << idfontpair.second->name()\n\t\t\t\t\t<< \";font-size:\"   << XMLString(idfontpair.second->scaledSize()) << \"px\";\n\t\t\t\tif (idfontpair.second->color() != Color::BLACK)\n\t\t\t\t\tstyle << \";fill:\" << idfontpair.second->color().svgColorString();\n\t\t\t\tstyle << '}';\n\t\t\t\tif (ADD_COMMENTS) {\n\t\t\t\t\tstring info = font_info(*idfontpair.second);\n\t\t\t\t\tif (!info.empty())\n\t\t\t\t\t\tstyle << \" /* \" << info << \" */\";\n\t\t\t\t}\n\t\t\t\tstyle << '\\n';\n\t\t\t}\n\t\t}\n\t\tstyleCDataNode()->append(style.str());\n\t}\n}\n\n\n/** Appends glyph definitions of a given font to the defs section of the SVG tree.\n *  @param[in] font font to be appended\n *  @param[in] chars codes of the characters whose glyph outlines should be appended\n *  @param[in] callback pointer to callback object for sending feedback to the glyph tracer (may be 0) */\nvoid SVGTree::append (const PhysicalFont &font, const set<int> &chars, GFGlyphTracer::Callback *callback) {\n\tif (chars.empty())\n\t\treturn;\n\n\tif (USE_FONTS) {\n\t\tif (FONT_FORMAT != FontWriter::FontFormat::SVG) {\n\t\t\tostringstream style;\n\t\t\tFontWriter fontWriter(font);\n\t\t\tif (fontWriter.writeCSSFontFace(FONT_FORMAT, chars, style, callback))\n\t\t\t\tstyleCDataNode()->append(style.str());\n\t\t}\n\t\telse {\n\t\t\tif (ADD_COMMENTS) {\n\t\t\t\tstring info = font_info(font);\n\t\t\t\tif (!info.empty())\n\t\t\t\t\tappendToDefs(util::make_unique<XMLComment>(string(\" font: \")+info+\" \"));\n\t\t\t}\n\t\t\tauto fontNode = util::make_unique<XMLElement>(\"font\");\n\t\t\tstring fontname = font.name();\n\t\t\tfontNode->addAttribute(\"id\", fontname);\n\t\t\tfontNode->addAttribute(\"horiz-adv-x\", font.hAverageAdvance());\n\n\t\t\tauto faceNode = util::make_unique<XMLElement>(\"font-face\");\n\t\t\tfaceNode->addAttribute(\"font-family\", fontname);\n\t\t\tfaceNode->addAttribute(\"units-per-em\", font.unitsPerEm());\n\t\t\tif (!font.verticalLayout()) {\n\t\t\t\tfaceNode->addAttribute(\"ascent\", font.ascent());\n\t\t\t\tfaceNode->addAttribute(\"descent\", font.descent());\n\t\t\t}\n\t\t\tfontNode->append(std::move(faceNode));\n\t\t\tfor (int c : chars)\n\t\t\t\tfontNode->append(createGlyphNode(c, font, callback));\n\t\t\tappendToDefs(std::move(fontNode));\n\t\t}\n\t}\n\telse if (CREATE_USE_ELEMENTS && &font != font.uniqueFont()) {\n\t\t// If the same character is used in various sizes, we don't want to embed the complete (lengthy) path\n\t\t// descriptions multiple times. Because they would only differ by a scale factor, it's better to\n\t\t// reference the already embedded path together with a transformation attribute and let the SVG renderer\n\t\t// scale the glyphs properly. This is only necessary if we don't want to use font but path elements.\n\t\tfor (int c : chars) {\n\t\t\tauto useNode = util::make_unique<XMLElement>(\"use\");\n\t\t\tuseNode->addAttribute(\"id\", \"g\"+to_string(FontManager::instance().fontID(&font))+\"-\"+to_string(c));\n\t\t\tuseNode->addAttribute(\"xlink:href\", \"#g\"+to_string(FontManager::instance().fontID(font.uniqueFont()))+\"-\"+to_string(c));\n\t\t\tdouble scale = font.scaledSize()/font.uniqueFont()->scaledSize();\n\t\t\tif (scale != 1.0)\n\t\t\t\tuseNode->addAttribute(\"transform\", \"scale(\"+XMLString(scale)+\")\");\n\t\t\tappendToDefs(std::move(useNode));\n\t\t}\n\t}\n\telse {\n\t\tfor (int c : chars)\n\t\t\tappendToDefs(createGlyphNode(c, font, callback));\n\t}\n}\n\n\nvoid SVGTree::pushDefsContext (unique_ptr<SVGElement> node) {\n\tSVGElement *nodePtr = node.get();\n\tif (_defsContextStack.empty())\n\t\tappendToDefs(std::move(node));\n\telse\n\t\t_defsContextStack.top()->append(std::move(node));\n\t_defsContextStack.push(nodePtr);\n}\n\n\nvoid SVGTree::popDefsContext () {\n\tif (!_defsContextStack.empty())\n\t\t_defsContextStack.pop();\n}\n\n\n/** Pushes a new context element that will take all following nodes added to the page. */\nvoid SVGTree::pushPageContext (unique_ptr<SVGElement> node) {\n\tSVGElement *nodePtr = node.get();\n\tif (_pageContextStack.empty())\n\t\t_page->append(std::move(node));\n\telse\n\t\t_pageContextStack.top()->append(std::move(node));\n\t_pageContextStack.push(nodePtr);\n\t_charHandler->setInitialContextNode(nodePtr);\n}\n\n\n/** Pops the current context element and restores the previous one. */\nvoid SVGTree::popPageContext () {\n\tif (!_pageContextStack.empty())\n\t\t_pageContextStack.pop();\n\t_charHandler->setInitialContextNode(_pageContextStack.empty() ? _page : _pageContextStack.top());\n}\n\n\nXMLCData* SVGTree::styleCDataNode () {\n\tif (!_styleCDataNode) {\n\t\tauto styleNode = util::make_unique<XMLElement>(\"style\");\n\t\tstyleNode->addAttribute(\"type\", \"text/css\");\n\t\tauto cdataNode = util::make_unique<XMLCData>();\n\t\t_styleCDataNode = cdataNode.get();\n\t\tstyleNode->append(std::move(cdataNode));\n\t\t_root->insertBefore(std::move(styleNode), _page);\n\t}\n\treturn _styleCDataNode;\n}\n"
  },
  {
    "path": "src/SVGTree.hpp",
    "content": "/*************************************************************************\n** SVGTree.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SVGTREE_HPP\n#define SVGTREE_HPP\n\n#include <map>\n#include <memory>\n#include <set>\n#include <stack>\n#include <unordered_set>\n#include \"Color.hpp\"\n#include \"FontWriter.hpp\"\n#include \"GFGlyphTracer.hpp\"\n#include \"Matrix.hpp\"\n#include \"SVGCharHandler.hpp\"\n#include \"SVGElement.hpp\"\n#include \"XMLDocument.hpp\"\n\nclass BoundingBox;\nclass Color;\nclass Font;\nclass Matrix;\nclass Opacity;\nclass PhysicalFont;\n\nclass SVGTree {\n\tpublic:\n\t\tSVGTree ();\n\t\tvoid reset ();\n\t\tbool write (std::ostream &os) const {return bool(_doc.write(os));}\n\t\tvoid newPage (int pageno);\n\t\tvoid appendToDefs (std::unique_ptr<XMLNode> node);\n\t\tvoid appendToPage (std::unique_ptr<XMLNode> node);\n\t\tvoid prependToPage (std::unique_ptr<XMLNode> node);\n\t\tvoid appendToDoc (std::unique_ptr<XMLNode> node)  {_doc.append(std::move(node));}\n\t\tvoid appendToRoot (std::unique_ptr<XMLNode> node) {_root->append(std::move(node));}\n\t\tvoid appendChar (int c, double x, double y) {_charHandler->appendChar(c, x, y);}\n\t\tvoid appendFontStyles (const std::unordered_set<const Font*> &fonts);\n\t\tvoid append (const PhysicalFont &font, const std::set<int> &chars, GFGlyphTracer::Callback *callback=nullptr);\n\t\tvoid pushDefsContext (std::unique_ptr<SVGElement> node);\n\t\tvoid popDefsContext ();\n\t\tvoid pushPageContext (std::unique_ptr<SVGElement> node);\n\t\tvoid popPageContext ();\n\t\tvoid setBBox (const BoundingBox &bbox) const;\n\t\tvoid setFont (int id, const Font &font) const;\n\t\tstd::pair<int,const Font*> getFontPair () const;\n\t\tstatic bool setFontFormat (std::string formatstr);\n\t\tvoid setX (double x)                {_charHandler->notifyXAdjusted();}\n\t\tvoid setY (double y)                {_charHandler->notifyYAdjusted();}\n\t\tvoid setMatrix (const Matrix &m)    {_charHandler->setMatrix(m);}\n\t\tvoid setFillColor (const Color &c) const;\n\t\tvoid setStrokeColor (const Color &c) const;\n\t\tvoid setOpacity (const Opacity &op) {_charHandler->setOpacity(op);}\n\t\tvoid setVertical (bool state)       {_charHandler->setVertical(state);}\n\t\tvoid transformPage (const Matrix &m) const;\n\t\tColor getFillColor () const         {return _charHandler->getFillColor();}\n\t\tColor getStrokeColor () const       {return _charHandler->getStrokeColor();}\n\t\tconst Opacity& getOpacity () const  {return _charHandler->getOpacity();}\n\t\tconst Matrix& getMatrix () const    {return _charHandler->getMatrix();}\n\t\tXMLElement* rootNode () const       {return _root;}\n\t\tXMLElement* defsNode () const       {return _defs;}\n\t\tXMLElement* pageNode () const       {return _page;}\n\n\tprotected:\n\t\tXMLCData* styleCDataNode ();\n\n\tpublic:\n\t\tstatic bool USE_FONTS;           ///< if true, create font references and don't draw paths directly\n\t\tstatic bool CREATE_CSS;          ///< define and use CSS classes to reference fonts?\n\t\tstatic bool CREATE_USE_ELEMENTS; ///< allow generation of <use/> elements?\n\t\tstatic FontWriter::FontFormat FONT_FORMAT;   ///< format of fonts to be embedded\n\t\tstatic bool RELATIVE_PATH_CMDS;  ///< relative path commands rather than absolute ones?\n\t\tstatic bool MERGE_CHARS;         ///< whether to merge chars with common properties into the same <text> tag\n\t\tstatic bool ADD_COMMENTS;        ///< add comments with additional information\n\t\tstatic double ZOOM_FACTOR;       ///< factor applied to width/height attribute\n\t\tstatic bool EMBED_BITMAP_DATA;   ///< if true, bitmaps are embedded into the SVG document\n\n\tprivate:\n\t\tXMLDocument _doc;\n\t\tSVGElement *_root=nullptr, *_page=nullptr, *_defs=nullptr;\n\t\tXMLCData *_styleCDataNode=nullptr;\n\t\tstd::unique_ptr<SVGCharHandler> _charHandler;\n\t\tstd::stack<SVGElement*> _defsContextStack;\n\t\tstd::stack<SVGElement*> _pageContextStack;\n};\n\n#endif\n"
  },
  {
    "path": "src/ShadingPatch.cpp",
    "content": "/*************************************************************************\n** ShadingPatch.cpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <sstream>\n#include \"ShadingPatch.hpp\"\n#include \"TensorProductPatch.hpp\"\n#include \"TriangularPatch.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\n/** Factory method: Creates a shading patch object depending on the given PostScript shading type. */\nunique_ptr<ShadingPatch> ShadingPatch::create (int psShadingType, Color::ColorSpace cspace) {\n\tswitch (psShadingType) {\n\t\tcase 4: return util::make_unique<TriangularPatch>(cspace);\n\t\tcase 5: return util::make_unique<LatticeTriangularPatch>(cspace);\n\t\tcase 6: return util::make_unique<CoonsPatch>(cspace);\n\t\tcase 7: return util::make_unique<TensorProductPatch>(cspace);\n\t}\n\tostringstream oss;\n\tif (psShadingType > 0 && psShadingType < 4)\n\t\toss << \"shading type \" << psShadingType << \" not supported\";\n\telse\n\t\toss << \"invalid shading type \" << psShadingType;\n\tthrow ShadingException(oss.str());\n}\n"
  },
  {
    "path": "src/ShadingPatch.hpp",
    "content": "/*************************************************************************\n** ShadingPatch.hpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SHADINGPATCH_HPP\n#define SHADINGPATCH_HPP\n\n#include <memory>\n#include \"Color.hpp\"\n#include \"GraphicsPath.hpp\"\n#include \"MessageException.hpp\"\n\n\nclass ShadingPatch {\n\tpublic:\n\t\tstruct Callback {\n\t\t\tvirtual ~Callback () =default;\n\t\t\tvirtual void patchSegment (GraphicsPath<double> &path, const Color &color) =0;\n\t\t};\n\n\t\tusing PointVec = std::vector<DPair>;\n\t\tusing ColorVec = std::vector<Color>;\n\n\tpublic:\n\t\texplicit ShadingPatch (Color::ColorSpace colorSpace) : _colorspace(colorSpace) {}\n\t\tvirtual ~ShadingPatch () =default;\n\t\tvirtual int psShadingType () const =0;\n\t\tvirtual void approximate (int gridsize, bool overlap, double delta, Callback &callback) const =0;\n\t\tvirtual BoundingBox getBBox () const =0;\n\t\tvirtual GraphicsPath<double> getBoundaryPath () const =0;\n\t\tvirtual void setPoints (const PointVec &points, int edgeflag, ShadingPatch *patch) =0;\n\t\tvirtual void setColors (const ColorVec &colors, int edgeflag, ShadingPatch *patch) =0;\n\t\tvirtual int numPoints (int edgeflag) const =0;\n\t\tvirtual int numColors (int edgeflag) const =0;\n\t\tColor::ColorSpace colorSpace () const {return _colorspace;}\n\t\tstatic std::unique_ptr<ShadingPatch> create (int psShadingType, Color::ColorSpace cspace);\n\n\tprotected:\n\t\tusing ColorGetter = void (Color::*)(std::valarray<double> &va) const;\n\t\tusing ColorSetter = void (Color::*)(const std::valarray<double> &va);\n\n\tprivate:\n\t\tColor::ColorSpace _colorspace;  ///< color space used to compute the shading values\n};\n\n\nstruct ShadingException : MessageException {\n\texplicit ShadingException (const std::string &msg) : MessageException(msg) {}\n};\n\n#endif\n\n"
  },
  {
    "path": "src/SignalHandler.cpp",
    "content": "/*************************************************************************\n** SignalHandler.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <config.h>\n#include <cerrno>\n#include <csignal>\n#include <cstdlib>\n#include \"SignalHandler.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\nvolatile bool SignalHandler::_break = false;\n\n/** Helper class that encapsulates the system-specific parts of\n *  registering and handling CTRL-C (SIGINT) events. */\nclass SignalHandler::Impl {\n\tusing HandlerFunc = void (*)(int);\n\tpublic:\n\t\tImpl ();\n\t\tbool setSigintHandler (HandlerFunc handler);\n\t\tbool restoreSigintHandler () const;\n\n\tprivate:\n#ifdef HAVE_SIGACTION\n\t\tstruct sigaction _currentSigaction;\n\t\tstruct sigaction _origSigaction;\n#else\n\t\tHandlerFunc _origHandlerFunc;\n#endif\n};\n\n\nSignalHandler::SignalHandler ()\n\t: _impl(util::make_unique<SignalHandler::Impl>())\n{\n}\n\n\nSignalHandler::~SignalHandler () {\n\tstop();\n}\n\n\n/** Returns the singleton handler object. */\nSignalHandler& SignalHandler::instance() {\n\tstatic SignalHandler handler;\n\treturn handler;\n}\n\n\n/** Starts listening to CTRL-C signals.\n *  @return true if handler was activated. */\nbool SignalHandler::start () {\n\tif (!_active) {\n\t\t_break = false;\n\t\tif (_impl->setSigintHandler(callback))\n\t\t\t_active = true;\n\t}\n\treturn _active;\n}\n\n\n/** Stops listening for CTRL-C signals. */\nvoid SignalHandler::stop () {\n\tif (_active) {\n\t\t_impl->restoreSigintHandler();\n\t\t_active = false;\n\t}\n}\n\n\n/** Checks for incoming signals and throws an exception if CTRL-C was caught.\n *  @throw SignalException */\nvoid SignalHandler::check () {\n\tif (_break)\n\t\tthrow SignalException();\n}\n\n\nvoid SignalHandler::trigger (bool notify) {\n\t_break = true;\n\tif (notify)\n\t\tcheck();\n}\n\n\n/** This function is called on CTRL-C signals. */\nvoid SignalHandler::callback (int) {\n\t_break = true;\n}\n\n\n// Prefer sigaction() to signal() due to its more reliable interface and behavior.\n// Use signal() as fallback on systems that don't provide sigaction().\n\n#ifdef HAVE_SIGACTION\n\nSignalHandler::Impl::Impl () {\n\t_origSigaction.sa_handler = nullptr;\n}\n\n\nbool SignalHandler::Impl::setSigintHandler (HandlerFunc handler) {\n\tsigemptyset(&_currentSigaction.sa_mask);\n\t_currentSigaction.sa_handler = handler;\n\t_currentSigaction.sa_flags = SA_SIGINFO;\n\treturn (sigaction(SIGINT, &_currentSigaction, &_origSigaction) == 0);\n}\n\n\nbool SignalHandler::Impl::restoreSigintHandler () const {\n\tif (_origSigaction.sa_handler == nullptr)\n\t\treturn false;\n\treturn (sigaction(SIGINT, &_origSigaction, nullptr) == 0);\n}\n\n#else  // !HAVE_SIGACTION\n\nSignalHandler::Impl::Impl () : _origHandlerFunc(SIG_ERR) {\n}\n\n\nbool SignalHandler::Impl::setSigintHandler (HandlerFunc handler) {\n\t_origHandlerFunc = signal(SIGINT, handler);\n\treturn _origHandlerFunc != SIG_ERR;\n}\n\n\nbool SignalHandler::Impl::restoreSigintHandler () const {\n\tif (_origHandlerFunc == SIG_ERR)\n\t\treturn false;\n\treturn (signal(SIGINT, _origHandlerFunc) != SIG_ERR);\n}\n\n#endif\n"
  },
  {
    "path": "src/SignalHandler.hpp",
    "content": "/*************************************************************************\n** SignalHandler.hpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SIGNALHANDLER_HPP\n#define SIGNALHANDLER_HPP\n\n#include <exception>\n#include <memory>\n\nstruct SignalException : std::exception {\n};\n\n\nclass SignalHandler {\n\tpublic:\n\t\tSignalHandler (const SignalHandler&) =delete;\n\t\tSignalHandler (SignalHandler&&) =delete;\n\t\t~SignalHandler ();\n\t\tstatic SignalHandler& instance ();\n\t\tbool start ();\n\t\tvoid stop ();\n\t\tvoid check ();\n\t\tvoid trigger (bool notify);\n\t\tbool active () const {return _active;}\n\n\tprotected:\n\t\tSignalHandler ();\n\t\tstatic void callback (int signal);\n\n\tprivate:\n\t\tbool _active=false;          ///< true if listening for signals\n\t\tstatic volatile bool _break; ///< true if signal has been caught\n\t\tclass Impl;\n\t\tstd::unique_ptr<Impl> _impl; ///< system-specific data/functions\n};\n\n#endif\n"
  },
  {
    "path": "src/SourceInput.cpp",
    "content": "/*************************************************************************\n** SourceInput.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <algorithm>\n#include <fstream>\n#include <iostream>\n#include \"FileSystem.hpp\"\n#include \"Message.hpp\"\n#include \"MessageException.hpp\"\n#include \"SourceInput.hpp\"\n#include \"utility.hpp\"\n\n#ifdef _WIN32\n#\tinclude <fcntl.h>\n#\tinclude <sys/stat.h>\n#\tinclude <windows.h>\n#else\n#\tinclude <config.h>\n#\tifdef HAVE_UMASK\n#\t\tinclude <sys/stat.h>\n#\tendif\n#endif\n\n#ifdef _MSC_VER\n#\tinclude <io.h>\n#else\n#\tinclude <cstdlib>\n#\tinclude <unistd.h>\n#endif\n\nusing namespace std;\n\n#ifdef _WIN32\nstatic int fdwrite (int fd, const char *buf, size_t len) {return _write(fd, buf, len);}\nstatic int fdclose (int fd) {return _close(fd);}\n#else\nstatic int fdwrite (int fd, const char *buf, size_t len) {return write(fd, buf, len);}\nstatic int fdclose (int fd) {return close(fd);}\n#endif\n\n\n/** Creates a new temporary file in the configured tmp folder.\n *  If the object already holds an opened temporary file, it's closed\n *  and removed before creating the new one.\n *  @return true on success */\nbool TemporaryFile::create () {\n\tif (opened())\n\t\tclose();\n\t_path = FileSystem::tmpdir();\n#ifndef _WIN32\n\t_path += \"stdinXXXXXX\";\n#ifdef HAVE_UMASK\n\tmode_t mode_mask = umask(S_IXUSR | S_IRWXG | S_IRWXO);  // set file permissions to 0600\n#endif\n\t_fd = mkstemp(&_path[0]);\n#ifdef HAVE_UMASK\n\tumask(mode_mask);\n#endif\n#else  // !_WIN32\n\tchar fname[MAX_PATH];\n\tstd::replace(_path.begin(), _path.end(), '/', '\\\\');\n\tif (GetTempFileName(_path.c_str(), \"stdin\", 0, fname)) {\n\t\t_fd = _open(fname, _O_CREAT | _O_WRONLY | _O_BINARY, _S_IWRITE);\n\t\t_path = fname;\n\t}\n#endif\n\treturn opened();\n}\n\n\n/** Writes a sequence of characters to the file.\n *  @param[in] buf buffer containing the characters to write\n *  @param[in] len number of characters to write\n *  @return true on success */\nbool TemporaryFile::write (const char *buf, size_t len) const {\n\treturn opened() && fdwrite(_fd, buf, len) >= 0;\n}\n\n\n/** Closes and removes the temporary file.\n *  @return true on success */\nbool TemporaryFile::close () {\n\tbool ok = true;\n\tif (opened()) {\n\t\tok = (fdclose(_fd) >= 0);\n\t\tFileSystem::remove(_path);\n\t\t_fd = -1;\n\t\t_path.clear();\n\t}\n\treturn ok;\n}\n\n////////////////////////////////////////////////////////////////\n\nistream& SourceInput::getInputStream (bool showMessages) {\n\tif (!_ifs.is_open()) {\n\t\tif (!_fname.empty())\n\t\t\t_ifs.open(_fname, ios::binary);\n\t\telse {\n#ifdef _WIN32\n\t\t\tif (_setmode(_fileno(stdin), _O_BINARY) == -1)\n\t\t\t\tthrow MessageException(\"can't open stdin in binary mode\");\n#endif\n\t\t\tif (!_tmpfile.create())\n\t\t\t\tthrow MessageException(\"can't create temporary file for writing\");\n\t\t\tif (showMessages)\n\t\t\t\tMessage::mstream() << \"reading from \" << getMessageFileName() << '\\n';\n\t\t\twhile (cin) {\n\t\t\t\tchar buf[1024];\n\t\t\t\tcin.read(buf, 1024);\n\t\t\t\tsize_t count = cin.gcount();\n\t\t\t\tif (!_tmpfile.write(buf, count))\n\t\t\t\t\tthrow MessageException(\"failed to write data to temporary file\");\n\t\t\t}\n\t\t\t_ifs.open(_tmpfile.path(), ios::binary);\n\t\t}\n\t}\n\treturn _ifs;\n}\n\n\nstring SourceInput::getFileName () const {\n\treturn _fname.empty() ? \"stdin\" : _fname;\n}\n\n\nstring SourceInput::getMessageFileName () const {\n\treturn _fname.empty() ? \"<stdin>\" : _fname;\n}\n\n\nstring SourceInput::getFilePath () const {\n\treturn _tmpfile.path().empty() ? _fname : _tmpfile.path();\n}\n"
  },
  {
    "path": "src/SourceInput.hpp",
    "content": "/*************************************************************************\n** SourceInput.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SOURCEINPUT_HPP\n#define SOURCEINPUT_HPP\n\n#include <fstream>\n#include <string>\n\n\n/** Helper class to handle temporary files. */\nclass TemporaryFile {\n\tpublic:\n\t\t~TemporaryFile () {close();}\n\t\tbool create ();\n\t\tbool opened () const {return _fd >= 0;}\n\t\tbool write (const char *buf, size_t len) const;\n\t\tbool close ();\n\t\tconst std::string& path () const {return _path;}\n\n\tprivate:\n\t\tint _fd = -1;       ///< file descriptor assigned to the temporary file\n\t\tstd::string _path;  ///< path to temporary file\n};\n\n\nclass SourceInput {\n\tpublic:\n\t\texplicit SourceInput (const std::string &fname) : _fname(fname) {}\n\t\tstd::istream& getInputStream (bool showMessages=false);\n\t\tstd::string getFileName () const;\n\t\tstd::string getMessageFileName () const;\n\t\tstd::string getFilePath () const;\n\n\tprivate:\n\t\tconst std::string &_fname; ///< name of file to read from\n\t\tTemporaryFile _tmpfile;    ///< temporary file used when reading from stdin\n\t\tstd::ifstream _ifs;\n};\n\n#endif\n"
  },
  {
    "path": "src/SpecialActions.cpp",
    "content": "/*************************************************************************\n** SpecialActions.cpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstring>\n#include <regex>\n#include \"Calculator.hpp\"\n#include \"SpecialActions.hpp\"\n\nusing namespace std;\n\n\ninline string get_color_string (const SpecialActions &actions, Color (SpecialActions::*getColor)() const) {\n\treturn SVGElement::USE_CURRENTCOLOR && SVGElement::CURRENTCOLOR == (actions.*getColor)()\n\t\t? \"currentColor\"\n\t\t: (actions.*getColor)().svgColorString();\n}\n\n\n/** Replaces constants of the form {?name} by their corresponding value.\n *  @param[in,out] str text to expand\n *  @param[in] actions interface to the world outside the special handler */\nstatic void expand_constants (string &str, SpecialActions &actions) {\n\tbool repl_bbox = true;\n\twhile (repl_bbox) {\n\t\tconst auto pos = str.find(\"{?bbox \");\n\t\tif (pos == string::npos)\n\t\t\trepl_bbox = false;\n\t\telse {\n\t\t\tauto endpos = pos+7;\n\t\t\twhile (endpos < str.length() && isalnum(str[endpos]))\n\t\t\t\t++endpos;\n\t\t\tif (endpos == str.length() || str[endpos] != '}')\n\t\t\t\trepl_bbox = false;\n\t\t\telse {\n\t\t\t\tBoundingBox &box = actions.bbox(str.substr(pos+7, endpos-pos-7));\n\t\t\t\tstr.replace(pos, endpos-pos+1, box.svgViewBoxString());\n\t\t\t}\n\t\t}\n\t}\n\tconst struct Constant {\n\t\tconst char *name;\n\t\tstring val;\n\t} constants[] = {\n\t\t{\"x\",           XMLString(actions.getX())},\n\t\t{\"y\",           XMLString(actions.getY())},\n\t\t{\"color\",       get_color_string(actions, &SpecialActions::getFillColor)},\n\t\t{\"fillcolor\",   get_color_string(actions, &SpecialActions::getFillColor)},\n\t\t{\"strokecolor\", get_color_string(actions, &SpecialActions::getStrokeColor)},\n\t\t{\"matrix\",      actions.getMatrix().toSVG()},\n\t\t{\"nl\",          \"\\n\"},\n\t\t{\"pageno\",      to_string(actions.getCurrentPageNumber())},\n\t\t{\"svgfile\",     actions.getSVGFilePath(actions.getCurrentPageNumber()).relative()},\n\t\t{\"svgpath\",     actions.getSVGFilePath(actions.getCurrentPageNumber()).absolute()},\n\t};\n\tfor (const Constant &constant : constants) {\n\t\tconst string pattern = string(\"{?\")+constant.name+\"}\";\n\t\tauto pos = str.find(pattern);\n\t\twhile (pos != string::npos) {\n\t\t\tstr.replace(pos, strlen(constant.name)+3, constant.val);\n\t\t\tpos = str.find(pattern, pos+constant.val.length());  // look for further matches\n\t\t}\n\t}\n\t// expand {?cmyk(c,m,y,k)} to #RRGGBB\n\tstd::smatch match;\n\tstd::regex pattern(R\"(\\{\\?(cmyk\\(([0-9.]+,){3}[0-9.]\\))\\})\");\n\twhile (regex_search(str, match, pattern))\n\t\tstr = match.prefix().str() + Color(match[1].str()).rgbString() + match.suffix().str();\n}\n\n\n/** Evaluates substrings of the form {?(expr)} where 'expr' is a math expression,\n *  and replaces the substring by the computed value.\n *  @param[in,out] str string to scan for expressions\n *  @param[in] actions interface to external fuctionality available in special handlers */\nstatic void evaluate_expressions (string &str, const SpecialActions &actions) {\n\tauto left = str.find(\"{?(\");             // start position of expression macro\n\twhile (left != string::npos) {\n\t\tauto right = str.find(\")}\", left+2);  // end position of expression macro\n\t\tif (right == string::npos)\n\t\t\tbreak;\n\t\tCalculator calc;\n\t\tcalc.setVariable(\"x\", actions.getX());\n\t\tcalc.setVariable(\"y\", actions.getY());\n\t\tstring expr = str.substr(left+3, right-left-3);  // math expression to evaluate\n\t\tif (util::normalize_space(expr).empty())         // no expression given, e.g. {?( )}\n\t\t\tstr.erase(left, right-left+2);                // => replace with empty string\n\t\telse {\n\t\t\ttry {\n\t\t\t\tdouble val = calc.eval(expr);\n\t\t\t\tXMLString valstr(val);\n\t\t\t\tstr.replace(left, right-left+2, valstr);\n\t\t\t\tright = left+valstr.length()-1;\n\t\t\t}\n\t\t\tcatch (CalculatorException &e) {\n\t\t\t\tthrow SpecialException(string(e.what())+\" in '{?(\"+expr+\")}'\");\n\t\t\t}\n\t\t}\n\t\tleft = str.find(\"{?(\", right+1);  // find next expression macro\n\t}\n}\n\n\n/** Returns a given string with macros and arithmetic expressions expanded.\n *  @param[in] text string to be processed\n *  @return the expanded text */\nstring SpecialActions::expandText (const string &text) {\n\tstring ret = text;\n\tevaluate_expressions(ret, *this);\n\texpand_constants(ret, *this);\n\treturn ret;\n}"
  },
  {
    "path": "src/SpecialActions.hpp",
    "content": "/*************************************************************************\n** SpecialActions.hpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SPECIALACTIONS_HPP\n#define SPECIALACTIONS_HPP\n\n#include <string>\n#include <memory>\n#include \"BoundingBox.hpp\"\n#include \"Color.hpp\"\n#include \"FilePath.hpp\"\n#include \"Matrix.hpp\"\n#include \"MessageException.hpp\"\n#include \"Opacity.hpp\"\n#include \"SVGTree.hpp\"\n\nclass XMLElement;\nclass XMLNode;\n\nstruct SpecialException : MessageException {\n\texplicit SpecialException (const std::string &msg) : MessageException(msg) {}\n};\n\nclass SpecialActions {\n\tpublic:\n\t\tvirtual ~SpecialActions () =default;\n\t\tvirtual double getX () const =0;\n\t\tvirtual double getY () const =0;\n\t\tvirtual void setX (double x) =0;\n\t\tvirtual void setY (double y) =0;\n\t\tvirtual void finishLine () =0;\n\t\tvirtual void setFillColor (const Color &color) =0;\n\t\tvirtual void setStrokeColor (const Color &color) =0;\n\t\tvirtual Color getFillColor () const =0;\n\t\tvirtual Color getStrokeColor () const =0;\n\t\tvirtual void setMatrix (const Matrix &m) =0;\n\t\tvirtual const Matrix& getMatrix () const =0;\n\t\tvirtual Matrix getPageTransformation () const {return Matrix(1);}\n\t\tvirtual void setBgColor (const Color &color) =0;\n\t\tvirtual void setOpacity (const Opacity &opacity) =0;\n\t\tvirtual const Opacity& getOpacity () const =0;\n\t\tvirtual const SVGTree& svgTree () const =0;\n\t\tvirtual SVGTree& svgTree () {return const_cast<SVGTree&>(const_cast<const SpecialActions*>(this)->svgTree());}\n\t\tvirtual BoundingBox& bbox () =0;\n\t\tvirtual BoundingBox& bbox (const std::string &name, bool reset=false) =0;\n\t\tvirtual void embed (const BoundingBox &bbox) =0;\n\t\tvirtual void embed (const DPair &p, double r=0) =0;\n\t\tvirtual unsigned getCurrentPageNumber () const =0;\n\t\tvirtual FilePath getSVGFilePath (unsigned pageno) const =0;\n\t\tvirtual std::string getBBoxFormatString () const =0;\n\t\tvirtual void progress (const char *id) {}\n\t\tvirtual int getDVIStackDepth () const  {return 0;}\n\t\tvirtual void lockOutput () {}\n\t\tvirtual void unlockOutput () {}\n\t\tvirtual bool outputLocked () const {return false;}\n\t\tstd::string expandText (const std::string &text);\n\n\t\tstatic double PROGRESSBAR_DELAY; ///< progress bar doesn't appear before this time has elapsed (in sec)\n};\n\n\nclass EmptySpecialActions : public SpecialActions {\n\tpublic:\n\t\tEmptySpecialActions () : _matrix(1) {_svg.newPage(1);}\n\t\tdouble getX () const override {return 0;}\n\t\tdouble getY () const override {return 0;}\n\t\tvoid setX (double x) override {}\n\t\tvoid setY (double y) override {}\n\t\tvoid finishLine ()  override {}\n\t\tvoid setFillColor (const Color &color) override {}\n\t\tvoid setStrokeColor (const Color &color) override {}\n\t\tvoid setBgColor (const Color &color) override {}\n\t\tvoid setOpacity (const Opacity &opacity) override {}\n\t\tconst Opacity& getOpacity () const override {return _svg.getOpacity();}\n\t\tColor getFillColor () const override {return Color::BLACK;}\n\t\tColor getStrokeColor () const override {return Color::BLACK;}\n\t\tvoid setMatrix (const Matrix &m) override {}\n\t\tconst Matrix& getMatrix () const override {return _matrix;}\n\t\tconst SVGTree& svgTree () const override {return _svg;}\n\t\tBoundingBox& bbox () override {return _bbox;}\n\t\tBoundingBox& bbox (const std::string &name, bool reset=false) override {return _bbox;}\n\t\tvoid embed (const BoundingBox &bbox) override {}\n\t\tvoid embed (const DPair &p, double r=0) override {}\n\t\tunsigned getCurrentPageNumber() const override {return 0;}\n\t\tFilePath getSVGFilePath (unsigned pageno) const override {return FilePath();}\n\t\tstd::string getBBoxFormatString () const override {return \"\";}\n\n\tprivate:\n\t\tBoundingBox _bbox;\n\t\tMatrix _matrix;\n\t\tSVGTree _svg;\n};\n\n#endif\n"
  },
  {
    "path": "src/SpecialHandler.hpp",
    "content": "/*************************************************************************\n** SpecialHandler.hpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SPECIALHANDLER_HPP\n#define SPECIALHANDLER_HPP\n\n#include <istream>\n#include <list>\n#include <vector>\n\nclass SpecialActions;\nclass SpecialManager;\n\nclass SpecialHandler {\n\tpublic:\n\t\tvirtual ~SpecialHandler () =default;\n\t\tvirtual const char* info () const =0;\n\t\tvirtual const char* name () const =0;\n\t\tvirtual std::vector<const char*> prefixes () const =0;\n\t\tvirtual void setDviScaleFactor (double dvi2bp) {}\n\t\tvirtual void preprocess (const std::string &prefix, std::istream &is, SpecialActions &actions) {}\n\t\tvirtual bool process (const std::string &prefix, std::istream &is, SpecialActions &actions) =0;\n\t\tvirtual void dviPreprocessingFinished () {}\n\t\tvirtual void dviBeginPage (unsigned pageno, SpecialActions &actions) {}\n\t\tvirtual void dviEndPage (unsigned pageno, SpecialActions &actions) {}\n\t\tvirtual void dviMovedTo (double x, double y, SpecialActions &actions) {}\n};\n\n#endif\n"
  },
  {
    "path": "src/SpecialManager.cpp",
    "content": "/*************************************************************************\n** SpecialManager.cpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <iomanip>\n#include <map>\n#include <sstream>\n#include \"SpecialActions.hpp\"\n#include \"SpecialHandler.hpp\"\n#include \"SpecialManager.hpp\"\n\nusing namespace std;\n\ndouble SpecialActions::PROGRESSBAR_DELAY=1000;  // initial delay in seconds (values >= 1000 disable the progressbar)\n\n\nSpecialManager& SpecialManager::instance() {\n\tstatic SpecialManager sm;\n\treturn sm;\n}\n\n\n/** Remove all registered handlers. */\nvoid SpecialManager::unregisterHandlers () {\n\t_handlerPool.clear();\n\t_handlersByPrefix.clear();\n}\n\n\n/** Registers a single special handler. This method doesn't check if a\n *  handler of the same class is already registered.\n *  @param[in] handler pointer to handler to be registered */\nvoid SpecialManager::registerHandler (unique_ptr<SpecialHandler> handler) {\n\tif (handler) {\n\t\t// get array of prefixes this handler is responsible for\n\t\tfor (const char *prefix : handler->prefixes())\n\t\t\t_handlersByPrefix[prefix] = handler.get();\n\t\t_handlerPool.emplace_back(std::move(handler));\n\t}\n}\n\n\nvoid SpecialManager::registerHandler (unique_ptr<SpecialHandler> handler, const vector<string> &ignoredHandlerNames) {\n\tconst char *name = handler->name();\n\tif (!name || find(ignoredHandlerNames.begin(), ignoredHandlerNames.end(), string(name)) == ignoredHandlerNames.end())\n\t\tinstance().registerHandler(std::move(handler));\n}\n\n\n/** Registers several special handlers at once.\n *  If ignorelist == 0, all given handlers are registered. To exclude selected sets of\n *  specials, the corresponding names can be given separated by non alpha-numeric characters,\n *  e.g. \"color, ps, em\" or \"color: ps em\" etc.\n *  @param[in] handlers pointer to zero-terminated array of handlers to be registered\n *  @param[in] ignorelist list of special names to be ignored */\nvoid SpecialManager::registerHandlers (vector<unique_ptr<SpecialHandler>> &handlers, const char *ignorelist) {\n\tif (handlers.empty())\n\t\treturn;\n\tstring ignorestr = ignorelist ? ignorelist : \"\";\n\tfor (char &c : ignorestr)\n\t\tif (!isalnum(c))\n\t\t\tc = '%';\n\tignorestr = \"%\"+ignorestr+\"%\";\n\n\tfor (auto &handler : handlers)\n\t\tif (!handler->name() || ignorestr.find(\"%\"+string(handler->name())+\"%\") == string::npos)\n\t\t\tregisterHandler(std::move(handler));\n}\n\n\n/** Removes a handler and the corresponding prefixes. */\nvoid SpecialManager::unregisterHandler (const SpecialHandler *handler) {\n\tif (handler) {\n\t\tauto it = algo::find_if(_handlerPool, [&](const unique_ptr<SpecialHandler> &h) {\n\t\t\treturn h.get() == handler;\n\t\t});\n\t\tif (it != _handlerPool.end()) {\n\t\t\tfor (const char *prefix : handler->prefixes())\n\t\t\t\t_handlersByPrefix.erase(prefix);\n\t\t\t_handlerPool.erase(it);\n\t\t}\n\t}\n}\n\n\n/** Looks for a handler responsible for a given special prefix.\n *  @param[in] prefix the special prefix, e.g. \"color\" or \"em\"\n *  @return in case of success: pointer to handler, 0 otherwise */\nSpecialHandler* SpecialManager::findHandlerByPrefix (const string &prefix) const {\n\tauto it = _handlersByPrefix.find(prefix);\n\tif (it != _handlersByPrefix.end())\n\t\treturn it->second;\n\treturn nullptr;\n}\n\n\n/** Looks for a handler with a given name.\n *  @param[in] name name of handler to look for, e.g. \"papersize\"\n *  @return in case of success: pointer to handler, 0 otherwise */\nSpecialHandler* SpecialManager::findHandlerByName (const string &name) const {\n\tusing HandlerPtr = unique_ptr<SpecialHandler>;\n\tauto it = algo::find_if(_handlerPool, [&](const HandlerPtr &hptr) {\n\t\treturn hptr->name() == name;\n\t});\n\treturn it != _handlerPool.end() ? it->get() : nullptr;\n}\n\n\nstatic string extract_prefix (istream &is) {\n\tint c;\n\tstring prefix;\n\twhile (isalnum(c=is.get()))\n\t\tprefix += char(c);\n\tif (ispunct(c)) // also add separation character to identifying prefix\n\t\tprefix += char(c);\n\tif (prefix == \"ps:\" && is.peek() == ':')\n\t\tprefix += char(is.get());\n\treturn prefix;\n}\n\n\nvoid SpecialManager::preprocess (const string &special, SpecialActions &actions) const {\n\tistringstream iss(special);\n\tconst string prefix = extract_prefix(iss);\n\tif (SpecialHandler *handler = findHandlerByPrefix(prefix))\n\t\thandler->preprocess(prefix, iss, actions);\n}\n\n\n/** Executes a special command.\n *  @param[in] special the special expression\n *  @param[in] dvi2bp factor to convert DVI units to PS points\n *  @param[in] actions actions the special handlers can perform\n *  @return true if the special could be processed successfully\n *  @throw SpecialException in case of errors during special processing */\nbool SpecialManager::process (const string &special, double dvi2bp, SpecialActions &actions) const {\n\tistringstream iss(special);\n\tconst string prefix = extract_prefix(iss);\n\tbool success=false;\n\tif (SpecialHandler *handler = findHandlerByPrefix(prefix)) {\n\t\thandler->setDviScaleFactor(dvi2bp);\n\t\tsuccess = handler->process(prefix, iss, actions);\n\t}\n\treturn success;\n}\n\n\nvoid SpecialManager::notifyPreprocessingFinished () const {\n\tfor (auto &handler : _handlerPool)\n\t\thandler->dviPreprocessingFinished();\n}\n\n\nvoid SpecialManager::notifyBeginPage (unsigned pageno, SpecialActions &actions) const {\n\tfor (auto &handler : _handlerPool)\n\t\thandler->dviBeginPage(pageno, actions);\n}\n\n\nvoid SpecialManager::notifyEndPage (unsigned pageno, SpecialActions &actions) const {\n\tfor (auto &handler : _handlerPool)\n\t\thandler->dviEndPage(pageno, actions);\n}\n\n\nvoid SpecialManager::notifyPositionChange (double x, double y, SpecialActions &actions) const {\n\tfor (auto &handler : _handlerPool)\n\t\thandler->dviMovedTo(x, y, actions);\n}\n\n\nvoid SpecialManager::writeHandlerInfo (ostream &os) const {\n\tios::fmtflags osflags(os.flags());\n\tmap<string,SpecialHandler*> sortmap;\n\tfor (const auto &handler : _handlerPool)\n\t\tif (handler->name())\n\t\t\tsortmap[handler->name()] = handler.get();\n\tfor (const auto &strhandlerpair : sortmap) {\n\t\tif (const char *info = strhandlerpair.second->info()) {\n\t\t\tos << setw(10) << left << strhandlerpair.second->name() << ' ';\n\t\t\tos << info << '\\n';\n\t\t}\n\t}\n\tos.flags(osflags);  // restore format flags\n}\n"
  },
  {
    "path": "src/SpecialManager.hpp",
    "content": "/*************************************************************************\n** SpecialManager.hpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SPECIALMANAGER_HPP\n#define SPECIALMANAGER_HPP\n\n#include <memory>\n#include <ostream>\n#include <string>\n#include <unordered_map>\n#include <vector>\n#include \"algorithm.hpp\"\n#include \"SpecialHandler.hpp\"\n#include \"utility.hpp\"\n\nclass SpecialActions;\n\nclass SpecialManager {\n\tprivate:\n\t\tusing HandlerPool = std::vector<std::unique_ptr<SpecialHandler>>;\n\t\tusing HandlerMap = std::unordered_map<std::string,SpecialHandler*>;\n\n\tpublic:\n\t\tSpecialManager (const SpecialManager &) =delete;\n\t\tstatic SpecialManager& instance ();\n\n\t\ttemplate <class Handler>\n\t\tstatic void registerHandler (const std::vector<std::string> &ignoredHandlerNames) {\n\t\t\tconst char *name = Handler::handlerName();\n\t\t\tif (!name || algo::find(ignoredHandlerNames, std::string(name)) == ignoredHandlerNames.end())\n\t\t\t\tinstance().registerHandler(util::make_unique<Handler>());\n\t\t}\n\n\t\tstatic void registerHandler (std::unique_ptr<SpecialHandler> handler, const std::vector<std::string> &ignoredHandlerNames);\n\t\tvoid registerHandler (std::unique_ptr<SpecialHandler> handler);\n\t\tvoid registerHandlers (std::vector<std::unique_ptr<SpecialHandler>> &handlers, const char *ignorelist);\n\t\tvoid unregisterHandler (const SpecialHandler *handler);\n\t\tvoid unregisterHandlers ();\n\t\tvoid preprocess (const std::string &special, SpecialActions &actions) const;\n\t\tbool process (const std::string &special, double dvi2bp, SpecialActions &actions) const;\n\t\tvoid notifyPreprocessingFinished () const;\n\t\tvoid notifyBeginPage (unsigned pageno, SpecialActions &actions) const;\n\t\tvoid notifyEndPage (unsigned pageno, SpecialActions &actions) const;\n\t\tvoid notifyPositionChange (double x, double y, SpecialActions &actions) const;\n\t\tvoid writeHandlerInfo (std::ostream &os) const;\n\t\tSpecialHandler* findHandlerByName (const std::string &name) const;\n\n\tprotected:\n\t\tSpecialManager () =default;\n\t\tSpecialHandler* findHandlerByPrefix (const std::string &prefix) const;\n\n\tprivate:\n\t\tHandlerPool _handlerPool;      ///< stores pointers to all handlers\n\t\tHandlerMap _handlersByPrefix;  ///< pointers to handlers for corresponding prefixes\n};\n\n#endif\n"
  },
  {
    "path": "src/StreamReader.cpp",
    "content": "/*************************************************************************\n** StreamReader.cpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <vector>\n#include \"HashFunction.hpp\"\n#include \"StreamReader.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\nistream& StreamReader::replaceStream (istream &in) {\n\tistream &ret = *_is;\n\t_is = &in;\n\treturn ret;\n}\n\n\n/** Reads an unsigned integer from assigned input stream.\n *  @param[in] bytes number of bytes to read (max. 4)\n *  @return read integer */\nuint32_t StreamReader::readUnsigned (int bytes) const {\n\tuint32_t ret = 0;\n\tfor (bytes--; bytes >= 0 && !_is->eof(); bytes--) {\n\t\tauto b = uint32_t(_is->get());\n\t\tret |= b << (8*bytes);\n\t}\n\treturn ret;\n}\n\n\n/** Reads an unsigned integer from assigned input stream and updates the hash value.\n *  @param[in] n number of bytes to read (max. 4)\n *  @param[in,out] hashfunc hash to update\n *  @return read integer */\nuint32_t StreamReader::readUnsigned (int n, HashFunction &hashfunc) const {\n\tuint32_t ret = readUnsigned(n);\n\thashfunc.update(util::bytes(ret, n));\n\treturn ret;\n}\n\n\n/** Reads an signed integer from assigned input stream.\n *  @param[in] bytes number of bytes to read (max. 4)\n *  @return read integer */\nint32_t StreamReader::readSigned (int bytes) const {\n\tauto ret = uint32_t(_is->get());\n\tif (ret & 128)        // negative value?\n\t\tret |= 0xffffff00;\n\tfor (bytes-=2; bytes >= 0 && !_is->eof(); bytes--)\n\t\tret = (ret << 8) | _is->get();\n\treturn int32_t(ret);\n}\n\n\n/** Reads an signed integer from assigned input stream and updates the hash value.\n *  @param[in] n number of bytes to read (max. 4)\n *  @param[in,out] hashfunc hash to update\n *  @return read integer */\nint32_t StreamReader::readSigned (int n, HashFunction &hashfunc) const {\n\tint32_t ret = readSigned(n);\n\thashfunc.update(util::bytes(ret, n));\n\treturn ret;\n}\n\n\n/** Reads a string terminated by a 0-byte. */\nstring StreamReader::readString () const {\n\tstring ret;\n\tif (_is) {\n\t\twhile (!_is->eof() && _is->peek() > 0)\n\t\t\tret += char(_is->get());\n\t\t_is->get();  // skip 0-byte\n\t}\n\treturn ret;\n}\n\n\n/** Reads a string terminated by a 0-byte and updates the hash value.\n *  @param[in,out] hashfunc hash to update\n *  @param[in] finalZero consider final 0-byte in checksum\n *  @return the string read */\nstring StreamReader::readString (HashFunction &hashfunc, bool finalZero) const {\n\tstring ret = readString();\n\thashfunc.update(ret.data(), ret.length());\n\tif (finalZero)\n\t\thashfunc.update(nullptr, 1);\n\treturn ret;\n}\n\n\n/** Reads a string of a given length.\n *  @param[in] length number of characters to read\n *  @return the string read */\nstring StreamReader::readString (int length) const {\n\tstring str;\n\tif (_is) {\n\t\tstr.resize(max(0, length));\n\t\t_is->read(&str[0], streamsize(str.length()));  // read 'length' bytes and append '\\0'\n\t}\n\treturn str;\n}\n\n\n/** Reads a string of a given length and updates the hash value.\n *  @param[in] length number of characters to read\n *  @param[in,out] hashfunc hash to update\n *  @return the string read */\nstring StreamReader::readString (int length, HashFunction &hashfunc) const {\n\tstring ret = readString(length);\n\thashfunc.update(ret.data(), length);\n\treturn ret;\n}\n\n\nvector<uint8_t> StreamReader::readBytes (int n) const {\n\tvector<uint8_t> bytes(n);\n\tif (n > 0)\n\t\t_is->read(reinterpret_cast<char*>(bytes.data()), n);\n\treturn bytes;\n}\n\n\nvector<uint8_t> StreamReader::readBytes (int n, HashFunction &hashfunc) const {\n\tvector<uint8_t> bytes = readBytes(n);\n\thashfunc.update(bytes);\n\treturn bytes;\n}\n\n\nvector<char> StreamReader::readBytesAsChars (int n) const {\n\tvector<char> chars(n);\n\tif (n > 0)\n\t\t_is->read(chars.data(), n);\n\treturn chars;\n}\n\n\nint StreamReader::readByte (HashFunction &hashfunc) const {\n\tint ret = readByte();\n\tif (ret >= 0) {\n\t\tchar c = char(ret & 0xff);\n\t\thashfunc.update(&c, 1);\n\t}\n\treturn ret;\n}\n"
  },
  {
    "path": "src/StreamReader.hpp",
    "content": "/*************************************************************************\n** StreamReader.hpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef STREAMREADER_HPP\n#define STREAMREADER_HPP\n\n#include <istream>\n#include <string>\n#include <vector>\n#include \"MessageException.hpp\"\n\nclass HashFunction;\n\nclass StreamReader {\n\tpublic:\n\t\texplicit StreamReader (std::istream &is) : _is(&is) {}\n\t\tvirtual ~StreamReader () =default;\n\t\tbool isStreamValid () const {return _is;}\n\t\tbool eof () const           {return _is->eof();}\n\t\tvoid clearStream () const   {_is->clear();}\n\t\tstd::istream& replaceStream (std::istream &s);\n\t\tuint32_t readUnsigned (int n) const;\n\t\tuint32_t readUnsigned (int n, HashFunction &hashfunc) const;\n\t\tint32_t readSigned (int n) const;\n\t\tint32_t readSigned (int n, HashFunction &hashfunc) const;\n\t\tstd::string readString () const;\n\t\tstd::string readString (HashFunction &hashfunc, bool finalZero=false) const;\n\t\tstd::string readString (int length) const;\n\t\tstd::string readString (int length, HashFunction &hashfunc) const;\n\t\tstd::vector<uint8_t> readBytes (int n) const;\n\t\tstd::vector<uint8_t> readBytes (int n, HashFunction &hash) const;\n\t\tstd::vector<char> readBytesAsChars (int n) const;\n\t\tint readByte () const           {return _is->get();}\n\t\tint readByte (HashFunction &hashfunc) const;\n\t\tvoid seek (std::streampos pos, std::ios::seekdir dir) const {_is->seekg(pos, dir);}\n\t\tvoid seek (std::streampos pos) const {_is->seekg(pos);}\n\t\tvoid skip (std::streampos n) const   {_is->seekg(n, std::ios::cur);}\n\t\tstd::streampos tell () const {return _is->tellg();}\n\t\tint peek () const            {return _is->peek();}\n\t\tstd::streampos tellg () const {return _is->tellg();}\n\n\tprotected:\n\t\tstd::istream& getInputStream () const {return *_is;}\n\n\tprivate:\n\t\tstd::istream *_is;\n};\n\n\nstruct StreamReaderException : MessageException {\n\texplicit StreamReaderException (const std::string &msg) : MessageException(msg) {}\n};\n\n#endif\n"
  },
  {
    "path": "src/StreamWriter.cpp",
    "content": "/*************************************************************************\n** StreamWriter.cpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"HashFunction.hpp\"\n#include \"StreamWriter.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\n/** Writes an unsigned integer to the output stream.\n *  @param[in] val the value to write\n *  @param[in] n number of bytes to be considered */\nvoid StreamWriter::writeUnsigned (uint32_t val, int n) const {\n\tfor (n--; n >= 0; n--)\n\t\t_os.put(char((val >> (8*n)) & 0xff));\n}\n\n\n/** Writes a signed integer to the output stream.\n *  @param[in] val the value to write\n *  @param[in] n number of bytes to be considered */\nvoid StreamWriter::writeSigned (int32_t val, int n) const {\n\twriteUnsigned(uint32_t(val), n);\n}\n\n\nvoid StreamWriter::writeBytes (const std::vector<uint8_t> &bytes) const {\n\t_os.write(reinterpret_cast<const char*>(bytes.data()), bytes.size());\n}\n\n\nvoid StreamWriter::writeBytes (const uint8_t *buf, size_t bufsize) const {\n\t_os.write(reinterpret_cast<const char*>(buf), bufsize);\n}\n\n\nvoid StreamWriter::writeBytes (int byte, size_t count) const {\n\twhile (count-- > 0)\n\t\t_os.put(byte);\n}\n\n\n/** Writes a string to the output stream.\n *  @param[in] str the string to write\n *  @param[in] finalZero if true, a final 0-byte is appended */\nvoid StreamWriter::writeString (const string &str, bool finalZero) const {\n\t_os.write(str.c_str(), str.length() + (finalZero ? 1 : 0));\n}\n\n\n/** Writes an unsigned integer to the output stream.\n *  @param[in] val the value to write\n *  @param[in] n number of bytes to be considered\n *  @param[in,out] hashfunc hash to update */\nvoid StreamWriter::writeUnsigned (uint32_t val, int n, HashFunction &hashfunc) const {\n\twriteUnsigned(val, n);\n\thashfunc.update(util::bytes(val, n));\n}\n\n\n/** Writes a signed integer to the output stream and updates the hash value.\n *  @param[in] val the value to write\n *  @param[in] n number of bytes to be considered\n *  @param[in,out] hashfunc hash to update */\nvoid StreamWriter::writeSigned (int32_t val, int n, HashFunction &hashfunc) const {\n\twriteUnsigned(static_cast<uint32_t>(val), n, hashfunc);\n}\n\n\n/** Writes a string to the output stream and updates the hash value.\n *  @param[in] str the string to write\n *  @param[in,out] hashfunc hash to update\n *  @param[in] finalZero if true, a final 0-byte is appended */\nvoid StreamWriter::writeString (const std::string &str, HashFunction &hashfunc, bool finalZero) const {\n\twriteString(str, finalZero);\n\thashfunc.update(str.data(), str.length() + (finalZero ? 1 : 0));\n}\n"
  },
  {
    "path": "src/StreamWriter.hpp",
    "content": "/*************************************************************************\n** StreamWriter.hpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef STREAMWRITER_HPP\n#define STREAMWRITER_HPP\n\n#include <ostream>\n#include <vector>\n\nclass HashFunction;\n\nclass StreamWriter {\n\tpublic:\n\t\texplicit StreamWriter (std::ostream &os) : _os(os) {}\n\t\tvoid writeUnsigned (uint32_t val, int n) const;\n\t\tvoid writeSigned (int32_t val, int n) const;\n\t\tvoid writeBytes (const std::vector<uint8_t> &bytes) const;\n\t\tvoid writeBytes (const uint8_t *buf, size_t bufsize) const;\n\t\tvoid writeBytes (int byte, size_t count) const;\n\t\tvoid writeString (const std::string &str, bool finalZero=false) const;\n\t\tvoid writeUnsigned (uint32_t val, int n, HashFunction &hashfunc) const;\n\t\tvoid writeSigned (int32_t val, int n, HashFunction &hashfunc) const;\n\t\tvoid writeString (const std::string &str, HashFunction &hashfunc, bool finalZero=false) const;\n\n\tprivate:\n\t\tstd::ostream &_os;\n};\n\n#endif\n"
  },
  {
    "path": "src/Subfont.cpp",
    "content": "/*************************************************************************\n** Subfont.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cstdlib>\n#include <cstring>\n#include <fstream>\n#include <limits>\n#include <memory>\n#include \"FileFinder.hpp\"\n#include \"Message.hpp\"\n#include \"Subfont.hpp\"\n#include \"utility.hpp\"\n\n\nusing namespace std;\n\n// helper functions\n\nstatic int skip_mapping_data (istream &is);\nstatic bool scan_line (const char *line, int lineno, vector<uint16_t> &mapping, const string &fname, long &offset);\n\n\n/** Constructs a new SubfontDefinition object.\n *  @param[in] name name of subfont definition\n *  @param[in] fpath path to corresponding .sfd file*/\nSubfontDefinition::SubfontDefinition (string name, const char *fpath) : _sfname(std::move(name)) {\n\t// read all subfont IDs from the .sfd file but skip the mapping data\n\tifstream is(fpath);\n\twhile (is) {\n\t\tif (is.peek() == '#')                            // comment line?\n\t\t\tis.ignore(numeric_limits<int>::max(), '\\n');  // => skip it\n\t\telse if (isspace(is.peek()))\n\t\t\tis.get();\n\t\telse {\n\t\t\tstring id;\n\t\t\twhile (is && !isspace(is.peek()))\n\t\t\t\tid += char(is.get());\n\t\t\tif (!id.empty()) {\n\t\t\t\tauto state = _subfonts.emplace(id, unique_ptr<Subfont>());\n\t\t\t\tif (state.second) // id was not present in map already\n\t\t\t\t\tstate.first->second = unique_ptr<Subfont>(new Subfont(*this, state.first->first));\n\t\t\t\tskip_mapping_data(is);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/** Looks for a subfont definition of the given name and returns the corresponding object.\n *  All objects are only created once for a given name and stored in an internal cache.\n *  @param[in] name name of subfont definition to lookup\n *  @return pointer to subfont definition object or 0 if it doesn't exist */\nSubfontDefinition* SubfontDefinition::lookup (const std::string &name) {\n\tstatic map<string,unique_ptr<SubfontDefinition>> sfdMap;\n\tauto it = sfdMap.find(name);\n\tif (it != sfdMap.end())\n\t\treturn it->second.get();\n\tSubfontDefinition *sfd=nullptr;\n\tif (const char *path = FileFinder::instance().lookup(name+\".sfd\", false)) {\n\t\tsfd = new SubfontDefinition(name, path);\n\t\tsfdMap[name] = unique_ptr<SubfontDefinition>(sfd);\n\t}\n\treturn sfd;\n}\n\n\n/** Returns the full path to the corresponding .sfd file or 0 if it can't be found. */\nconst char* SubfontDefinition::path () const {\n\treturn FileFinder::instance().lookup(filename(), false);\n}\n\n\n/** Returns the subfont with the given ID, or 0 if it doesn't exist. */\nSubfont* SubfontDefinition::subfont (const string &id) const {\n\tauto it = _subfonts.find(id);\n\tif (it != _subfonts.end())\n\t\treturn it->second.get();\n\treturn nullptr;\n}\n\n\n/** Returns all subfonts defined in this SFD. */\nvector<Subfont*> SubfontDefinition::subfonts () const {\n\tvector<Subfont*> subfonts;\n\tfor (const auto &strsfpair : _subfonts)\n\t\tsubfonts.push_back(strsfpair.second.get());\n\treturn subfonts;\n}\n\n//////////////////////////////////////////////////////////////////////\n\n\n/** Reads the character mappings for a given subfont ID.\n *  Format of subfont definition (sfd) files:\n *  sfd ::= (ID entries | '#' <string> '\\n')*\n *  ID ::= <string without whitespace>\n *  entries ::= (integer | integer ':' | integer '_' integer)*\n *  The mapping data for a subfont is given as a sequence of 256 16-bit values where\n *  value v at position c defines the (global) character code that is assigned to the\n *  local subfont character c. The sequence v,v+1,v+2,...,v+n can be abbreviated with\n *  v '_' v+n, e.g. 10_55. In order to continue the sequence at a different position,\n *  the syntax number ':' can be used. Example: 10: 5 6 7 assigns the values v=5, 6, 7\n *  to c=10, 11 and 12, respectively.\n *  @return true if the data has been read successfully */\nbool Subfont::read () {\n\tif (!_mapping.empty())  // if there's already a mapping assigned, we're finished here\n\t\treturn true;\n\tif (const char *p = _sfd.path()) {\n\t\tifstream is(p);\n\t\tif (!is)\n\t\t\treturn false;\n\t\tint lineno=1;\n\t\twhile (is) {\n\t\t\tif (is.peek() == '#' || is.peek() == '\\n') {\n\t\t\t\tis.ignore(numeric_limits<int>::max(), '\\n');  // skip comment and empty line\n\t\t\t\tlineno++;\n\t\t\t}\n\t\t\telse if (isspace(is.peek()))\n\t\t\t\tis.get();\n\t\t\telse {\n\t\t\t\tstring id;\n\t\t\t\twhile (is && !isspace(is.peek()))\n\t\t\t\t\tid += char(is.get());\n\t\t\t\tif (id != _id)\n\t\t\t\t\tlineno += skip_mapping_data(is);\n\t\t\t\telse {\n\t\t\t\t\t// build mapping array\n\t\t\t\t\t_mapping.resize(256, 0);\n\t\t\t\t\tlong pos=0;\n\t\t\t\t\tbool complete=false;\n\t\t\t\t\twhile (!complete) {\n\t\t\t\t\t\tchar buf[1024];\n\t\t\t\t\t\tis.getline(buf, 1024);\n\t\t\t\t\t\tcomplete = scan_line(buf, lineno, _mapping, _sfd.filename(), pos);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n\n/** Returns the global character code of the target font for a\n *  (local) character code of the subfont.\n *  @param[in] c local character code relative to the subfont\n *  @return character code of the target font */\nuint16_t Subfont::decode (unsigned char c) {\n\tif (_mapping.empty() && !read())\n\t\treturn 0;\n\treturn _mapping[c];\n}\n\n\n//////////////////////////////////////////////////////////////////////\n\n\n/** Skips the mapping data of a subfont entry.\n *  @param[in] is stream to read from\n *  @return number of lines skipped */\nstatic int skip_mapping_data (istream &is) {\n\tbool complete=false;\n\tint lines=0;\n\twhile (is && !complete) {\n\t\tchar buf[1024];\n\t\tis.getline(buf, 1024);\n\t\tif (is.gcount() > 1)\n\t\t\tlines++;\n\t\tconst char *p = buf+is.gcount()-2;\n\t\twhile (p >= buf && isspace(*p))\n\t\t\tp--;\n\t\tcomplete = (p < buf || *p != '\\\\');  // line doesn't end with backslash\n\t}\n\treturn lines;\n}\n\n\n/** Scans a single line of mapping data and stores the values in the given array.\n *  @param[in] line the line of text to be scanned\n *  @param[in] lineno line number used in exception messages\n *  @param[in,out] mapping the mapping data\n *  @param[in] fname name of the mapfile being scanned\n *  @param[in,out] offset position/index of next mapping value\n *  @return true if the line is the last one the current mapping sequence, i.e. the line doesn't end with a backslash */\nstatic bool scan_line (const char *line, int lineno, vector<uint16_t> &mapping, const string &fname, long &offset) {\n\tconst char *p=line;\n\tchar *q;\n\tfor (; *p && isspace(*p); p++);\n\twhile (*p) {\n\t\tif (*p == '\\\\') {\n\t\t\twhile (*++p)\n\t\t\t\tif (!isspace(*p))\n\t\t\t\t\tthrow SubfontException(\"unexpected backslash in mapping table\", fname, lineno);\n\t\t}\n\t\telse {\n\t\t\tlong val1 = strtol(p, &q, 0); // first value of range\n\t\t\tlong val2 = -1;               // last value of range\n\t\t\tswitch (*q) {\n\t\t\t\tcase ':':\n\t\t\t\t\tif (val1 < 0 || val1 > 255)\n\t\t\t\t\t\tthrow SubfontException(\"offset value \"+to_string(val1)+\" out of range (0-255)\", fname, lineno);\n\t\t\t\t\toffset = val1;\n\t\t\t\t\tval1 = -1;\n\t\t\t\t\tq++;\n\t\t\t\t\tbreak;\n\t\t\t\tcase '_':\n\t\t\t\t\tp = q+1;\n\t\t\t\t\tval2 = strtol(p, &q, 0);\n\t\t\t\t\tif (val1 < 0 || val1 > 0xffffL)\n\t\t\t\t\t\tthrow SubfontException(\"table value \"+to_string(val1)+\" out of range\", fname, lineno);\n\t\t\t\t\tif (val2 < 0 || val2 > 0xffffL)\n\t\t\t\t\t\tthrow SubfontException(\"table value \"+to_string(val2)+\" out of range\", fname, lineno);\n\t\t\t\t\tif (p == q || (!isspace(*q) && *q != '\\\\' && *q))\n\t\t\t\t\t\tthrow SubfontException(\"unexpected character '\"+to_string(*q)+\"'\", fname, lineno);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif (p == q || (!isspace(*q) && *q != '\\\\' && *q))\n\t\t\t\t\t\tthrow SubfontException(\"unexpected character '\"+to_string(*q)+\"'\", fname, lineno);\n\t\t\t\t\tif (val1 < 0 || val1 > 0xffffL)\n\t\t\t\t\t\tthrow SubfontException(\"invalid character code\", fname, lineno);\n\t\t\t\t\tval2 = val1;\n\t\t\t}\n\t\t\tif (val1 >= 0) {\n\t\t\t\tif (val1 > val2 || offset+val2-val1 > 255)\n\t\t\t\t\tthrow SubfontException(\"invalid range in mapping table: \"+util::tohex(val1)+\"_\"+util::tohex(val2), fname, lineno);\n\t\t\t\tfor (long v=val1; v <= val2; v++) {\n\t\t\t\t\tif (mapping[offset])\n\t\t\t\t\t\tthrow SubfontException(\"mapping of character \"+to_string(offset)+\" already defined\", fname, lineno);\n\t\t\t\t\tmapping[offset++] = static_cast<uint16_t>(v);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (p=q; *p && isspace(*p); p++);\n\t\t}\n\t}\n\tfor (p--; p >= line && isspace(*p); p--);\n\treturn p < line || *p != '\\\\';\n}\n\n"
  },
  {
    "path": "src/Subfont.hpp",
    "content": "/*************************************************************************\n** Subfont.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SUBFONT_HPP\n#define SUBFONT_HPP\n\n#include <istream>\n#include <map>\n#include <memory>\n#include <sstream>\n#include <string>\n#include <vector>\n#include \"MessageException.hpp\"\n\nclass Subfont;\n\n\n/** Represents a collection of subfont mappings as defined in a .sfd file, and\n *  encapsulates the evaluation of these files. */\nclass SubfontDefinition {\n\tusing Subfonts = std::map<std::string, std::unique_ptr<Subfont>>;\n\tpublic:\n\t\tSubfontDefinition (const SubfontDefinition &sfd) =delete;\n\t\tstatic SubfontDefinition* lookup (const std::string &name);\n//\t\tint getIDs (std::vector<std::string> &ids) const;\n\t\tconst std::string& name() const {return _sfname;}\n\t\tstd::string filename() const    {return _sfname+\".sfd\";}\n\t\tSubfont* subfont (const std::string &id) const;\n\t\tstd::vector<Subfont*> subfonts () const;\n\t\tconst char* path () const;\n\n\tprotected:\n\t\tSubfontDefinition (std::string name, const char *fpath);\n\n\tprivate:\n\t\tstd::string _sfname; ///< name of subfont\n\t\tSubfonts _subfonts;  ///< all subfonts defined in the corresponding .sfd file\n};\n\n\n/** Represents a single subfont mapping defined in a SubfontDefinition (.sfd file). */\nclass Subfont {\n\tfriend class SubfontDefinition;\n\tpublic:\n\t\tSubfont (const Subfont &sf) =delete;\n\t\tconst std::string& id () const {return _id;}\n\t\tuint16_t decode (unsigned char c);\n\n\tprotected:\n\t\tSubfont (SubfontDefinition &sfd, const std::string &id) : _sfd(sfd), _id(id), _mapping(0) {}\n\t\tbool read ();\n\n\tprivate:\n\t\tSubfontDefinition &_sfd;        ///< SubfontDefinition where this Subfont belongs to\n\t\tconst std::string &_id;         ///< id of this subfont as specified in the .sfd file\n\t\tstd::vector<uint16_t> _mapping; ///< the character mapping table with 256 entries\n};\n\n\nclass SubfontException : public MessageException {\n\tpublic:\n\t\tSubfontException (const std::string &msg, std::string fname, int lineno=0)\n\t\t\t: MessageException(msg), _fname(std::move(fname)), _lineno(lineno) {}\n\n\t\tconst char* filename () const {return _fname.c_str();}\n\t\tint lineno () const           {return _lineno;}\n\n\tprivate:\n\t\tstd::string _fname;\n\t\tint _lineno;\n};\n\n#endif\n"
  },
  {
    "path": "src/System.cpp",
    "content": "/*************************************************************************\n** System.cpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <config.h>\n#include <ctime>\n#include \"System.hpp\"\n\n#if defined (HAVE_SYS_TIME_H)\n#include <sys/time.h>\n#elif defined (HAVE_SYS_TIMEB_H)\n#include <sys/timeb.h>\n#endif\n\n\nusing namespace std;\n\n\n/** Returns timestamp (wall time) in seconds. */\ndouble System::time () {\n#if defined (HAVE_SYS_TIME_H)\n\tstruct timeval tv;\n\tgettimeofday(&tv, nullptr);\n\treturn tv.tv_sec + tv.tv_usec/1000000.0;\n#elif defined (HAVE_SYS_TIMEB_H)\n\tstruct timeb tb;\n\tftime(&tb);\n\treturn tb.time + tb.millitm/1000.0;\n#else\n\tclock_t myclock = clock();\n\treturn double(myclock)/CLOCKS_PER_SEC;\n#endif\n}\n"
  },
  {
    "path": "src/System.hpp",
    "content": "/*************************************************************************\n** System.hpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef SYSTEM_HPP\n#define SYSTEM_HPP\n\nnamespace System\n{\n\tdouble time ();\n}\n\n#endif\n"
  },
  {
    "path": "src/TFM.cpp",
    "content": "/*************************************************************************\n** TFM.cpp                                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <fstream>\n#include <vector>\n#include \"algorithm.hpp\"\n#include \"Length.hpp\"\n#include \"Message.hpp\"\n#include \"StreamReader.hpp\"\n#include \"TFM.hpp\"\n\nusing namespace std;\n\n\n/** Reads a sequence of n TFM words (4 Bytes each).\n *  @param[in]  reader the TFM data is read from this object\n *  @param[out] v the read words\n *  @param[in]  n number of words to be read */\ntemplate <typename T>\nstatic void read_words (StreamReader &reader, vector<T> &v, unsigned n) {\n\tv.resize(n);\n\tfor (unsigned i=0; i < n; i++)\n\t\tv[i] = reader.readUnsigned(4);\n}\n\n\nvoid TFM::read (istream &is) {\n\tif (!is)\n\t\treturn;\n\tis.seekg(0);\n\tStreamReader reader(is);\n\tauto lf = uint16_t(reader.readUnsigned(2)); // length of entire file in 4 byte words\n\tauto lh = uint16_t(reader.readUnsigned(2)); // length of header in 4 byte words\n\tauto bc = uint16_t(reader.readUnsigned(2)); // smallest character code in font\n\tauto ec = uint16_t(reader.readUnsigned(2)); // largest character code in font\n\tauto nw = uint16_t(reader.readUnsigned(2)); // number of words in width table\n\tauto nh = uint16_t(reader.readUnsigned(2)); // number of words in height table\n\tauto nd = uint16_t(reader.readUnsigned(2)); // number of words in depth table\n\tauto ni = uint16_t(reader.readUnsigned(2)); // number of words in italic corr. table\n\tauto nl = uint16_t(reader.readUnsigned(2)); // number of words in lig/kern table\n\tauto nk = uint16_t(reader.readUnsigned(2)); // number of words in kern table\n\tauto ne = uint16_t(reader.readUnsigned(2)); // number of words in ext. char table\n\tauto np = uint16_t(reader.readUnsigned(2)); // number of font parameter words\n\tif (6+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np != lf)\n\t\tthrow FontMetricException(\"inconsistent length values\");\n\tif (bc >= ec || ec > 255 || ne > 256)\n\t\tthrow FontMetricException(\"character codes out of range\");\n\t_firstChar = bc;\n\t_lastChar = ec;\n\treadHeader(reader);\n\tis.seekg(24+lh*4);  // move to char info table\n\treadTables(reader, nw, nh, nd, ni);\n\tis.seekg(4*(lf-np));  // move to param section\n\treadParameters(reader, np);\n}\n\n\nvoid TFM::readHeader (const StreamReader &reader) {\n\t_checksum = reader.readUnsigned(4);\n\t_designSize = double(FixWord(reader.readSigned(4)))*Length::pt2bp;\n}\n\n\nvoid TFM::readTables (StreamReader &reader, int nw, int nh, int nd, int ni) {\n\tread_words(reader, _charInfoTable, _lastChar-_firstChar+1);\n\tread_words(reader, _widthTable, nw);\n\tread_words(reader, _heightTable, nh);\n\tread_words(reader, _depthTable, nd);\n\tread_words(reader, _italicTable, ni);\n\t_ascent = nh > 0 ? *algo::max_element(_heightTable) : 0;\n\t_descent = nd > 0 ? *algo::max_element(_depthTable) : 0;\n}\n\n\n/** Read the values from the param section of the TFM file.\n *  @param[in] reader read from this stream\n *  @param[in] np number of parameters to read */\nvoid TFM::readParameters (const StreamReader &reader, int np) {\n\t_params.resize(7);\n\tnp = min(np, 7);\n\tfor (int i=0; i < np; i++)\n\t\t_params[i] = reader.readSigned(4);\n\tfor (int i=np; i < 7; i++)\n\t\t_params[i] = 0;\n}\n\n\n/** Returns the optimal space width between words (in PS point units). */\ndouble TFM::getSpace () const {\n\treturn _params.empty() ? 0 : double(_params[1])*_designSize;\n}\n\n\n/** Returns the amount of glue stretching between words (in PS point units). */\ndouble TFM::getSpaceStretch () const {\n\treturn _params.empty() ? 0 : double(_params[2])*_designSize;\n}\n\n\n/** Returns the amount of glue shrinking between words (in PS point units). */\ndouble TFM::getSpaceShrink () const {\n\treturn _params.empty() ? 0 : double(_params[3])*_designSize;\n}\n\n\n/** Returns the size of one EM unit (in PS point units). */\ndouble TFM::getQuad () const {\n\tif (_params.empty() || _params[5] == 0)\n\t\treturn _designSize;\n\treturn double(_params[5])*_designSize;\n}\n\n\n/** Returns the index to the entry of the character info table that describes the metric of a given character.\n *  @param[in] c character whose index is retrieved\n *  @return table index for character c, or -1 if there's no entry */\nsize_t TFM::charIndex (int c) const {\n\tif (c < _firstChar || c > _lastChar || size_t(c-_firstChar) >= _charInfoTable.size())\n\t\treturn -1;\n\treturn c-_firstChar;\n}\n\n\n// the char info word for each character consists of 4 bytes holding the following information:\n// width index w, height index (h), depth index (d), italic correction index (it),\n// tag (tg) and a remainder:\n//\n// byte 1   | byte 2    | byte 3    | byte 4\n// xxxxxxxx | xxxx xxxx | xxxxxx xx | xxxxxxxx\n// w        | h    d    | it     tg | remainder\n\n/** Returns the width of char c in PS point units. */\ndouble TFM::getCharWidth (int c) const {\n\tsize_t index = charIndex(c);\n\tif (index == size_t(-1))\n\t\treturn 0;\n\tindex = (_charInfoTable[index] >> 24) & 0xFF;\n\treturn double(_widthTable[index]) * _designSize;\n}\n\n\n/** Returns the height of char c in PS point units. */\ndouble TFM::getCharHeight (int c) const {\n\tsize_t index = charIndex(c);\n\tif (index == size_t(-1))\n\t\treturn 0;\n\tindex = (_charInfoTable[index] >> 20) & 0x0F;\n\treturn double(_heightTable[index]) * _designSize;\n}\n\n\n/** Returns the depth of char c in PS point units. */\ndouble TFM::getCharDepth (int c) const {\n\tsize_t index = charIndex(c);\n\tif (index == size_t(-1))\n\t\treturn 0;\n\tindex = (_charInfoTable[index] >> 16) & 0x0F;\n\treturn double(_depthTable[index]) * _designSize;\n}\n\n\n/** Returns the italic correction of char c in PS point units. */\ndouble TFM::getItalicCorr (int c) const {\n\tsize_t index = charIndex(c);\n\tif (index == size_t(-1))\n\t\treturn 0;\n\tindex = (_charInfoTable[index] >> 10) & 0x3F;\n\treturn double(_italicTable[index]) * _designSize;\n}\n"
  },
  {
    "path": "src/TFM.hpp",
    "content": "/*************************************************************************\n** TFM.hpp                                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef TFM_HPP\n#define TFM_HPP\n\n#include <istream>\n#include <string>\n#include <vector>\n#include \"FixWord.hpp\"\n#include \"FontMetrics.hpp\"\n#include \"StreamReader.hpp\"\n\nclass StreamReader;\n\nclass TFM : public FontMetrics {\n\tpublic:\n\t\tTFM () =default;\n\t\tvoid read (std::istream &is) override;\n\t\tdouble getCharWidth (int c) const override;\n\t\tdouble getCharHeight (int c) const override;\n\t\tdouble getCharDepth (int c) const override;\n\t\tdouble getItalicCorr (int c) const override;\n\t\tdouble getDesignSize () const override {return _designSize;}\n\t\tdouble getSpace () const override;\n\t\tdouble getSpaceStretch () const override;\n\t\tdouble getSpaceShrink () const override;\n\t\tdouble getQuad () const override;\n\t\tdouble getAscent () const override     {return double(_ascent)*_designSize;}\n\t\tdouble getDescent () const override    {return double(_descent)*_designSize;}\n\t\tbool verticalLayout () const override  {return false;}\n\t\tuint32_t getChecksum () const override {return _checksum;}\n\t\tuint32_t firstChar () const override   {return _firstChar;}\n\t\tuint32_t lastChar () const override    {return _lastChar;}\n\n\tprotected:\n\t\tvoid readHeader (const StreamReader &reader);\n\t\tvoid readTables (StreamReader &reader, int nw, int nh, int nd, int ni);\n\t\tvoid readParameters (const StreamReader &reader, int np);\n\t\tvirtual size_t charIndex (int c) const;\n\t\tvoid setCharRange (int firstchar, int lastchar) {_firstChar=firstchar; _lastChar=lastchar;}\n\n\tprivate:\n\t\tuint32_t _checksum=0;\n\t\tuint16_t _firstChar=0, _lastChar=0;\n\t\tdouble _designSize=0;  ///< design size of the font in PS points (72bp = 1in)\n\t\tstd::vector<uint32_t>  _charInfoTable;\n\t\tstd::vector<FixWord> _widthTable;    ///< character widths in design size units\n\t\tstd::vector<FixWord> _heightTable;   ///< character height in design size units\n\t\tstd::vector<FixWord> _depthTable;    ///< character depth in design size units\n\t\tstd::vector<FixWord> _italicTable;   ///< italic corrections in design size units\n\t\tstd::vector<FixWord> _params;        ///< values of the TFM's param section\n\t\tFixWord _ascent=0, _descent=0;       ///< max. height and depth\n};\n\n#endif\n"
  },
  {
    "path": "src/TensorProductPatch.cpp",
    "content": "/*************************************************************************\n** TensorProductPatch.cpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <valarray>\n#include \"TensorProductPatch.hpp\"\n\nusing namespace std;\n\n\nTensorProductPatch::TensorProductPatch (const PointVec &points, const ColorVec &colors, Color::ColorSpace cspace, int edgeflag, TensorProductPatch *patch)\n\t: ShadingPatch(cspace)\n{\n\tsetPoints(points, edgeflag, patch);\n\tsetColors(colors, edgeflag, patch);\n}\n\n\nvoid TensorProductPatch::setFirstMatrixColumn (const DPair source[4], bool reverse) {\n\tfor (int i=0; i < 4; i++)\n\t\t_points[i][0] = source[reverse ? 3-i : i];\n}\n\n\nvoid TensorProductPatch::setFirstMatrixColumn (DPair source[4][4], int col, bool reverse) {\n\tfor (int i=0; i < 4; i++)\n\t\t_points[i][0] = source[reverse ? 3-i : i][col];\n}\n\n\n/** Sets the control points defining the structure of the patch. If the edge flag is 0,\n *  the point vector must contain all 16 control points of the 4x4 matrix in \"spiral\" order:\n *    0 11 10  9\n *    1 12 15  8\n *    2 13 14  7\n *    3  4  5  6\n *  If the edge flag is 1,2, or 3, the points of the first matrix column\n *  are omitted, and taken from a reference patch instead.\n *  @param[in] points the control points in \"spiral\" order as described in the PS reference, p. 286\n *  @param[in] edgeflag defines how to connect this patch with another one\n *  @param[in] patch reference patch required if edgeflag > 0 */\nvoid TensorProductPatch::setPoints (const PointVec &points, int edgeflag, ShadingPatch *patch) {\n\tTensorProductPatch *tpPatch = nullptr;\n\tif (patch && patch->psShadingType() == psShadingType())\n\t\ttpPatch = static_cast<TensorProductPatch*>(patch);\n\tif (edgeflag > 0 && !tpPatch)\n\t\tthrow ShadingException(\"missing preceding data in definition of tensor-product patch\");\n\tif ((edgeflag == 0 && points.size() != 16) || (edgeflag > 0 && points.size() != 12))\n\t\tthrow ShadingException(\"invalid number of control points in tensor-product patch definition\");\n\n\t// assign the 12 control points that are invariant for all edge flag values\n\tint i = (edgeflag == 0 ? 4 : 0);\n\t_points[3][1] = points[i++];  //  4\n\t_points[3][2] = points[i++];  //  5\n\t_points[3][3] = points[i++];  //  6\n\t_points[2][3] = points[i++];  //  7\n\t_points[1][3] = points[i++];  //  8\n\t_points[0][3] = points[i++];  //  9\n\t_points[0][2] = points[i++];  // 10\n\t_points[0][1] = points[i++];  // 11\n\t_points[1][1] = points[i++];  // 12\n\t_points[2][1] = points[i++];  // 13\n\t_points[2][2] = points[i++];  // 14\n\t_points[1][2] = points[i];    // 15\n\t// populate first column of control point tensor depending on edge flag value\n\tswitch (edgeflag) {\n\t\tcase 0: setFirstMatrixColumn(&points[0], false); break;\n\t\tcase 1: setFirstMatrixColumn(tpPatch->_points[3], false); break;\n\t\tcase 2: setFirstMatrixColumn(tpPatch->_points, 3, true); break;\n\t\tcase 3: setFirstMatrixColumn(tpPatch->_points[0], true); break;\n\t\tdefault: ;\n\t}\n}\n\n\n/** Sets the vertex colors of the patch. If the edge flag is 0,\n *  the color vector must contain all 4 colors in the following order:\n *  c00, c30, c33, c03, where cXY belongs to vertex pXY of the control\n *  point tensor.\n *  c00 ---- c03\n *   |        |\n *   |        |\n *  c30 ---- c33\n *  If the edge flag is 1,2, or 3, the colors c00 and c30 are omitted,\n *  and taken from a reference patch instead.\n *  @param[in] colors the color values in the order c00, c30, c33, c03\n *  @param[in] edgeflag defines how to connect this patch with another one\n *  @param[in] patch reference patch required if edgeflag > 0 */\nvoid TensorProductPatch::setColors (const ColorVec &colors, int edgeflag, ShadingPatch* patch) {\n\tTensorProductPatch *tpPatch = nullptr;\n\tif (patch && patch->psShadingType() == psShadingType())\n\t\ttpPatch = static_cast<TensorProductPatch*>(patch);\n\tif (edgeflag > 0 && !tpPatch)\n\t\tthrow ShadingException(\"missing preceding data in definition of tensor-product patch\");\n\tif ((edgeflag == 0 && colors.size() != 4) || (edgeflag > 0 && colors.size() != 2))\n\t\tthrow ShadingException(\"invalid number of colors in tensor-product patch definition\");\n\n\tint i = (edgeflag == 0 ? 2 : 0);\n\t_colors[3] = colors[i];\n\t_colors[1] = colors[i+1];\n\tswitch (edgeflag) {\n\t\tcase 0: _colors[0] = colors[0]; _colors[2] = colors[1]; break;\n\t\tcase 1: _colors[0] = tpPatch->_colors[2]; _colors[2] = tpPatch->_colors[3]; break;\n\t\tcase 2: _colors[0] = tpPatch->_colors[3]; _colors[2] = tpPatch->_colors[1]; break;\n\t\tcase 3: _colors[0] = tpPatch->_colors[1]; _colors[2] = tpPatch->_colors[0]; break;\n\t}\n}\n\n\n/** Returns the point P(u,v) of the patch. */\nDPair TensorProductPatch::valueAt (double u, double v) const {\n\t// check if we can return one of the vertices\n\tif ((u == 0 || u == 1) && (v == 0 || v == 1))\n\t\treturn _points[3*int(v)][3*int(u)];\n\n\t// compute tensor product\n\tDPair p[4];\n\tfor (int i=0; i < 4; i++) {\n\t\tCubicBezier bezier(_points[i][0], _points[i][1], _points[i][2], _points[i][3]);\n\t\tp[i] = bezier.valueAt(u);\n\t}\n\tCubicBezier bezier(p[0], p[1], p[2], p[3]);\n\treturn bezier.valueAt(v);\n}\n\n\n/** Returns the color at point P(u,v) which is bilinearly interpolated from\n *  the colors assigned to vertices of the patch. */\nColor TensorProductPatch::colorAt (double u, double v) const {\n\t// check if we can return one of the vertex colors\n\tif (u == 0) {\n\t\tif (v == 0)\n\t\t\treturn _colors[0];\n\t\telse if (v == 1)\n\t\t\treturn _colors[2];\n\t}\n\telse if (u == 1) {\n\t\tif (v == 0)\n\t\t\treturn _colors[1];\n\t\telse if (v == 1)\n\t\t\treturn _colors[3];\n\t}\n\t// interpolate color\n\tvalarray<double> comp[4];\n\tfor (int i=0; i < 4; i++)\n\t\tcomp[i] = _colors[i].getDoubleValues();\n\tColor color((1-u)*(1-v)*comp[0] + u*(1-v)*comp[1] + (1-u)*v*comp[2] + u*v*comp[3], colorSpace());\n\treturn color;\n}\n\n\nGraphicsPath<double> TensorProductPatch::getBoundaryPath () const {\n\t// Simple approach: Use the outer curves as boundary path. This doesn't always lead\n\t// to correct results since, depending on the control points, P(u,v) might exceed\n\t// the simple boundary.\n\tGraphicsPath<double> path;\n\tpath.moveto(_points[0][0]);\n\tpath.cubicto(_points[0][1], _points[0][2], _points[0][3]);\n\tpath.cubicto(_points[1][3], _points[2][3], _points[3][3]);\n\tpath.cubicto(_points[3][2], _points[3][1], _points[3][0]);\n\tpath.cubicto(_points[2][0], _points[1][0], _points[0][0]);\n\tpath.closepath();\n\treturn path;\n}\n\n\n/** Computes the bicubically interpolated isoparametric Bézier curve P(u,t) that\n *  runs \"vertically\" from P(u,0) to P(u,1) through the patch P.\n *  @param[in] u \"horizontal\" parameter in the range from 0 to 1\n *  @return the resulting Bézier curve */\nCubicBezier TensorProductPatch::verticalCurve (double u) const {\n\tCubicBezier bezier;\n\t// check for simple cases (boundary curves) first\n\tif (u == 0)\n\t\tbezier.setPoints(_points[0][0], _points[1][0], _points[2][0], _points[3][0]);\n\telse if (u == 1)\n\t\tbezier.setPoints(_points[0][3], _points[1][3], _points[2][3], _points[3][3]);\n\telse {\n\t\t// compute \"inner\" curve\n\t\tDPair p[4];\n\t\tfor (int i=0; i < 4; i++) {\n\t\t\tCubicBezier hbezier(_points[i][0], _points[i][1], _points[i][2], _points[i][3]);\n\t\t\tp[i] = hbezier.valueAt(u);\n\t\t}\n\t\tbezier.setPoints(p[0], p[1], p[2], p[3]);\n\t}\n\treturn bezier;\n}\n\n\n/** Computes the bicubically interpolated isoparametric Bézier curve P(t,v) that\n *  runs \"horizontally\" from P(0,v) to P(1,v) through the patch P.\n *  @param[in] v \"vertical\" parameter in the range from 0 to 1\n *  @return the resulting Bézier curve */\nCubicBezier TensorProductPatch::horizontalCurve (double v) const {\n\tCubicBezier bezier;\n\t// check for simple cases (boundary curves) first\n\tif (v == 0)\n\t\tbezier.setPoints(_points[0][0], _points[0][1], _points[0][2], _points[0][3]);\n\telse if (v == 1)\n\t\tbezier.setPoints(_points[3][0], _points[3][1], _points[3][2], _points[3][3]);\n\telse {\n\t\t// compute \"inner\" curve\n\t\tDPair p[4];\n\t\tfor (int i=0; i < 4; i++) {\n\t\t\tCubicBezier vbezier(_points[0][i], _points[1][i], _points[2][i], _points[3][i]);\n\t\t\tp[i] = vbezier.valueAt(v);\n\t\t}\n\t\tbezier.setPoints(p[0], p[1], p[2], p[3]);\n\t}\n\treturn bezier;\n}\n\n\n/** Computes the sub-patch that maps the unit square [0,1]x[0,1] to\n *  the area P([u1,u2],[v1,v2]) of patch P. The control points of the sub-patch\n *  can easily be calculated using the tensor product blossom of patch P.\n *  See G. Farin: Curves and Surfaces for CAGD, p. 259 for example. */\nvoid TensorProductPatch::subpatch (double u1, double u2, double v1, double v2, TensorProductPatch &patch) const {\n\tif (u1 > u2) swap(u1, u2);\n\tif (v1 > v2) swap(v1, v2);\n\t// compute control points\n\tdouble u[] = {u1, u1, u1, 0};    // blossom parameters of the \"horizontal\" domain (plus dummy value 0)\n\tfor (int i=0; i < 4; i++) {\n\t\tu[3-i] = u2;\n\t\tdouble v[] = {v1, v1, v1, 0}; // blossom parameters of the \"vertical\" domain (plus dummy value 0)\n\t\tfor (int j=0; j < 4; j++) {\n\t\t\tv[3-j] = v2;\n\t\t\tpatch._points[i][j] = blossomValue(u, v);\n\t\t}\n\t}\n\t// assign color values\n\tpatch._colors[0] = colorAt(u1, v1);\n\tpatch._colors[1] = colorAt(u2, v1);\n\tpatch._colors[2] = colorAt(u1, v2);\n\tpatch._colors[3] = colorAt(u2, v2);\n}\n\n\n/** Computes the value b(u1,u2,u3;v1,v2,v3) where b is tensor product blossom of the patch. */\nDPair TensorProductPatch::blossomValue (double u1, double u2, double u3, double v1, double v2, double v3) const {\n\tDPair p[4];\n\tfor (int i=0; i < 4; i++) {\n\t\tCubicBezier bezier(_points[i][0], _points[i][1], _points[i][2], _points[i][3]);\n\t\tp[i] = bezier.blossomValue(u1, u2, u3);\n\t}\n\tCubicBezier bezier(p[0], p[1], p[2], p[3]);\n\treturn bezier.blossomValue(v1, v2, v3);\n}\n\n\n/** Snaps value x to the interval [0,1]. Values lesser than or near 0 are mapped to 0, values\n *  greater than or near 1 are mapped to 1. */\nstatic inline double snap (double x) {\n\tif (abs(x) < 0.001)\n\t\treturn 0;\n\tif (abs(1-x) < 0.001)\n\t\treturn 1;\n\treturn x;\n}\n\n\n/** Computes a single row of segments approximating the patch region between v1 and v1+inc. */\nvoid TensorProductPatch::approximateRow (double v1, double inc, bool overlap, double delta, const vector<CubicBezier> &vbeziers, Callback &callback) const {\n\tdouble v2 = snap(v1+inc);\n\tdouble ov2 = (overlap && v2 < 1) ? snap(v2+inc) : v2;\n\tCubicBezier hbezier1 = horizontalCurve(v1);\n\tCubicBezier hbezier2 = horizontalCurve(ov2);\n\tdouble u1 = 0;\n\tfor (size_t i=1; i < vbeziers.size(); i++) {\n\t\tdouble u2 = snap(u1+inc);\n\t\tdouble ou2 = (overlap && u2 < 1) ? snap(u2+inc) : u2;\n\t\t// compute segment boundaries\n\t\tCubicBezier b1(hbezier1, u1, ou2);\n\t\tCubicBezier b2(vbeziers[i + (overlap && i < vbeziers.size()-1 ? 1 : 0)], v1, ov2);\n\t\tCubicBezier b3(hbezier2, u1, ou2);\n\t\tCubicBezier b4(vbeziers[i-1], v1, ov2);\n\t\tGraphicsPath<double> path;\n\t\tpath.moveto(b1.point(0));\n\t\tif (inc > delta) {\n\t\t\tpath.cubicto(b1.point(1), b1.point(2), b1.point(3));\n\t\t\tpath.cubicto(b2.point(1), b2.point(2), b2.point(3));\n\t\t\tpath.cubicto(b3.point(2), b3.point(1), b3.point(0));\n\t\t\tpath.cubicto(b4.point(2), b4.point(1), b4.point(0));\n\t\t}\n\t\telse {\n\t\t\tpath.lineto(b1.point(3));\n\t\t\tpath.lineto(b2.point(3));\n\t\t\tpath.lineto(b3.point(0));\n\t\t}\n\t\tpath.closepath();\n\t\t// draw segment filled with its midpoint color\n\t\tcallback.patchSegment(path, colorAt((u1+u2)/2, (v1+v2)/2));\n\t\tu1 = u2;\n\t}\n}\n\n\n/** Approximate the patch by dividing it into a grid of segments that are filled with the\n *  average color of the corresponding region. The boundary of each segment consists of\n *  four Bézier curves, too. In order to prevent visual gaps between neighbored segments due\n *  to anti-aliasing, the flag 'overlap' can be set. It enlarges the segments so that they overlap\n *  with their right and bottom neighbors (which are drawn on top of the overlapping regions).\n *  @param[in] gridsize number of segments per row/column\n *  @param[in] overlap if true, enlarge each segment to overlap with its right and bottom neighbors\n *  @param[in] delta reduce level of detail if the segment size is smaller than the given value\n *  @param[in] callback object notified */\nvoid TensorProductPatch::approximate (int gridsize, bool overlap, double delta, Callback &callback) const {\n\tconst double inc = 1.0/gridsize;\n\t// collect curves dividing the patch into several columns (curved vertical stripes)\n\tvector<CubicBezier> vbeziers(gridsize+1);\n\tdouble u=0;\n\tfor (CubicBezier &vbezier : vbeziers) {\n\t\tvbezier = verticalCurve(u);\n\t\tu = snap(u+inc);\n\t}\n\t// compute the segments row by row\n\tdouble v=0;\n\tfor (int i=0; i < gridsize; i++) {\n\t\tapproximateRow(v, inc, overlap, delta, vbeziers, callback);\n\t\tv = snap(v+inc);\n\t}\n}\n\n\nBoundingBox TensorProductPatch::getBBox () const {\n\tBoundingBox bbox;\n\tfor (int i=0; i <= 1; i++) {\n\t\tCubicBezier bezier = horizontalCurve(i);\n\t\tbbox.embed(bezier.getBBox());\n\t\tbezier = verticalCurve(i);\n\t\tbbox.embed(bezier.getBBox());\n\t}\n\treturn bbox;\n}\n\n\n#if 0\nvoid TensorProductPatch::approximate (int gridsize, Callback &callback) const {\n\tconst double inc = 1.0/gridsize;\n\tCubicBezier ubezier0; verticalCurve(0, ubezier0);\n\tCubicBezier ubezier1; verticalCurve(1, ubezier1);\n\tCubicBezier vbezier0; horizontalCurve(0, vbezier0);\n\tCubicBezier vbezier1; horizontalCurve(1, vbezier1);\n\tfor (double v1=0; v1 < 1; v1=snap(v1+inc)) {\n\t\tdouble v2 = snap(v1+inc);\n\t\tDPair p0 = valueAt(0, v1);\n\t\tDPair p2 = valueAt(0, v2);\n\t\tColor c0 = colorAt(0, v1);\n\t\tColor c2 = colorAt(0, v2);\n\t\tdouble u1 = 0;\n\t\tfor (double u2=inc; u2 <= 1; u2=snap(u2+inc)) {\n\t\t\tDPair p1 = valueAt(u2, v1);\n\t\t\tDPair p3 = valueAt(u2, v2);\n\t\t\tColor c1 = colorAt(u2, v1);\n\t\t\tColor c3 = colorAt(u2, v2);\n\t\t\t// Compute a single patch segment. Only those segment edges that lay on the\n\t\t\t// patch boundary are drawn as Bézier curves, all other edges are approximated\n\t\t\t// with straight lines. This ensures a smooth outline and reduces the number of\n\t\t\t// time consuming computations.\n\t\t\tGraphicsPath<double> path;\n\t\t\tpath.moveto(p0);\n\t\t\tif (v1 > 0)\n\t\t\t\tpath.lineto(p1);\n\t\t\telse {\n\t\t\t\tCubicBezier bezier(vbezier0, u1, u2);\n\t\t\t\tpath.cubicto(bezier.point(1), bezier.point(2), bezier.point(3));\n\t\t\t}\n\t\t\tif (u2 < 1)\n\t\t\t\tpath.lineto(p3);\n\t\t\telse {\n\t\t\t\tCubicBezier bezier(ubezier1, v1, v2);\n\t\t\t\tpath.cubicto(bezier.point(1), bezier.point(2), bezier.point(3));\n\t\t\t}\n\t\t\tif (v2 < 1)\n\t\t\t\tpath.lineto(p2);\n\t\t\telse {\n\t\t\t\tCubicBezier bezier(vbezier1, u1, u2);\n\t\t\t\tpath.cubicto(bezier.point(2), bezier.point(1), bezier.point(0));\n\t\t\t}\n\t\t\tif (u1 > 0)\n\t\t\t\tpath.closepath();\n\t\t\telse {\n\t\t\t\tCubicBezier bezier(ubezier0, v1, v2);\n\t\t\t\tpath.cubicto(bezier.point(2), bezier.point(1), bezier.point(0));\n\t\t\t\tpath.closepath();\n\t\t\t}\n\t\t\tcallback.patchSegment(path, averageColor(c0, c1, c2, c3));\n\t\t\tp0 = p1;\n\t\t\tp2 = p3;\n\t\t\tc0 = c1;\n\t\t\tc2 = c3;\n\t\t\tu1 = u2;\n\t\t}\n\t}\n}\n#endif\n\n\n/////////////////////////////////////////////////////////////////////////////////////\n\n\nCoonsPatch::CoonsPatch (const PointVec &points, const ColorVec &colors, Color::ColorSpace cspace, int edgeflag, CoonsPatch *patch)\n\t: TensorProductPatch(cspace)\n{\n\tCoonsPatch::setPoints(points, edgeflag, patch);\n\tCoonsPatch::setColors(colors, edgeflag, patch);\n}\n\n\ninline DPair internal_control_point (const DPair p[4][4], const array<int,16> &i) {\n\tconst DPair &a = p[i[ 0]][i[ 1]];\n\tconst DPair &b = p[i[ 2]][i[ 3]];\n\tconst DPair &c = p[i[ 4]][i[ 5]];\n\tconst DPair &d = p[i[ 6]][i[ 7]];\n\tconst DPair &e = p[i[ 8]][i[ 9]];\n\tconst DPair &f = p[i[10]][i[11]];\n\tconst DPair &g = p[i[12]][i[13]];\n\tconst DPair &h = p[i[14]][i[15]];\n\treturn (-a*4.0 + (b+c)*6.0 - (d+e)*2.0 + (f+g)*3.0 - h) / 9.0;\n}\n\n\n/** Sets the 12 control points defining the geometry of the Coons patch. The points\n *  must be given in the following order:\n *  3  4  5  6\n *  2        7\n *  1        8\n *  0 11 10  9\n *  where each edge of the square represents the four control points of a cubic Bézier curve.\n *  If the edge flag is 1, 2, or 3, the points 0 to 3 are omitted, and taken from a reference\n *  patch instead.\n *  @param[in] points the control points in cyclic order as described in the PS reference, p. 281\n *  @param[in] edgeflag defines how to connect this patch to another one\n *  @param[in] patch reference patch required if edgeflag > 0 */\nvoid CoonsPatch::setPoints (const PointVec &points, int edgeflag, ShadingPatch *patch) {\n\tCoonsPatch *coonsPatch = nullptr;\n\tif (patch && patch->psShadingType() == psShadingType())\n\t\tcoonsPatch = static_cast<CoonsPatch*>(patch);\n\tif (edgeflag > 0 && !coonsPatch)\n\t\tthrow ShadingException(\"missing preceding data in definition of relative Coons patch\");\n\tif ((edgeflag == 0 && points.size() != 12) || (edgeflag > 0 && points.size() != 8))\n\t\tthrow ShadingException(\"invalid number of control points in Coons patch definition\");\n\n\t// Since a Coons patch is a special tensor product patch, we only have to reorder the\n\t// control points and compute the additional \"internal\" points of the 4x4 point tensor.\n\n\t// set outer control points of the tensor except those of the first column\n\t// because these points depend on the edge flag\n\tint i = (edgeflag == 0 ? 4 : 0);\n\t_points[3][1] = points[i++];\n\t_points[3][2] = points[i++];\n\t_points[3][3] = points[i++];\n\t_points[2][3] = points[i++];\n\t_points[1][3] = points[i++];\n\t_points[0][3] = points[i++];\n\t_points[0][2] = points[i++];\n\t_points[0][1] = points[i];\n\n\t// set control points of first matrix column\n\tswitch (edgeflag) {\n\t\tcase 0: setFirstMatrixColumn(&points[0], false); break;\n\t\tcase 1: setFirstMatrixColumn(coonsPatch->_points[3], false); break;\n\t\tcase 2: setFirstMatrixColumn(coonsPatch->_points, 3, true); break;\n\t\tcase 3: setFirstMatrixColumn(coonsPatch->_points[0], true); break;\n\t\tdefault: ;\n\t}\n\t// compute internal control points of the tensor (see PDF Reference 1.7, p. 330)\n\t_points[1][1] = internal_control_point(_points, {0, 0, 0, 1, 1, 0, 0, 3, 3, 0, 3, 1, 1, 3, 3, 3});\n\t_points[1][2] = internal_control_point(_points, {0, 3, 0, 2, 1, 3, 0, 0, 3, 3, 3, 2, 1, 0, 3, 0});\n\t_points[2][1] = internal_control_point(_points, {3, 0, 3, 1, 2, 0, 3, 3, 0, 0, 0, 1, 2, 3, 0, 3});\n\t_points[2][2] = internal_control_point(_points, {3, 3, 3, 2, 2, 3, 3, 0, 0, 3, 0, 2, 2, 0, 0, 0});\n}\n\n\nvoid CoonsPatch::setColors (const ColorVec &colors, int edgeflag, ShadingPatch *patch) {\n\tCoonsPatch *coonsPatch = nullptr;\n\tif (patch && patch->psShadingType() == psShadingType())\n\t\tcoonsPatch = static_cast<CoonsPatch*>(patch);\n\tif (edgeflag > 0 && !coonsPatch)\n\t\tthrow ShadingException(\"missing preceding data in definition of relative Coons patch\");\n\tif ((edgeflag == 0 && colors.size() != 4) || (edgeflag > 0 && colors.size() != 2))\n\t\tthrow ShadingException(\"invalid number of colors in Coons patch definition\");\n\n\tint i = (edgeflag == 0 ? 2 : 0);\n\t_colors[3] = colors[i];\n\t_colors[1] = colors[i+1];\n\tswitch (edgeflag) {\n\t\tcase 0: _colors[0] = colors[0]; _colors[2] = colors[1]; break;\n\t\tcase 1: _colors[0] = coonsPatch->_colors[2]; _colors[2] = coonsPatch->_colors[3]; break;\n\t\tcase 2: _colors[0] = coonsPatch->_colors[3]; _colors[2] = coonsPatch->_colors[1]; break;\n\t\tcase 3: _colors[0] = coonsPatch->_colors[1]; _colors[2] = coonsPatch->_colors[0]; break;\n\t\tdefault: ;\n\t}\n}\n\n"
  },
  {
    "path": "src/TensorProductPatch.hpp",
    "content": "/*************************************************************************\n** TensorProductPatch.hpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef TENSORPRODUCTPATCH_HPP\n#define TENSORPRODUCTPATCH_HPP\n\n#include <map>\n#include <ostream>\n#include <vector>\n#include \"Bezier.hpp\"\n#include \"Color.hpp\"\n#include \"MessageException.hpp\"\n#include \"Pair.hpp\"\n#include \"ShadingPatch.hpp\"\n\n\n/** This class represents a single tensor product patch P which is defined by 16 control points\n *  and 4 color values. The mapping of the unit square to the patch surface is defined as the sum\n *  \\f[P(u,v):=\\sum_{i=0}^3\\sum_{j=0}^3 p_{ij} B_i(u) B_j(v)\\f]\n *  where \\f$B_k(t)={3\\choose k}(1-t)^k t^k\\f$ and \\f$u,v \\in [0,1]\\f$. The four colors assigned\n *  to the vertices are interpolated bilinearily over the unit square. */\nclass TensorProductPatch : public ShadingPatch {\n\tfriend class CoonsPatch;\n\tpublic:\n\t\tTensorProductPatch () : ShadingPatch(Color::ColorSpace::RGB) {}\n\t\texplicit TensorProductPatch (Color::ColorSpace cspace) : ShadingPatch(cspace) {}\n\t\tTensorProductPatch (const PointVec &points, const ColorVec &colors, Color::ColorSpace cspace, int edgeflag, TensorProductPatch *patch);\n\t\tint psShadingType() const override {return 7;}\n\t\tvoid setPoints (const PointVec &points, int edgeflag, ShadingPatch *patch) override;\n\t\tvoid setColors (const ColorVec &colors, int edgeflag, ShadingPatch *patch) override;\n\t\tvirtual DPair valueAt (double u, double v) const;\n\t\tColor colorAt (double u, double v) const;\n\t\tCubicBezier horizontalCurve (double v) const;\n\t\tCubicBezier verticalCurve (double u) const;\n\t\tGraphicsPath<double> getBoundaryPath () const override;\n\t\tvoid subpatch (double u1, double u2, double v1, double v2, TensorProductPatch &patch) const;\n\t\tDPair blossomValue (double u1, double u2, double u3, double v1, double v2, double v3) const;\n\t\tDPair blossomValue (double u[3], double v[3]) const {return blossomValue(u[0], u[1], u[2], v[0], v[1], v[2]);}\n\t\tvoid approximate (int gridsize, bool overlap, double delta, Callback &callback) const override;\n\t\tBoundingBox getBBox () const override;\n\t\tint numPoints (int edgeflag) const override {return edgeflag == 0 ? 16 : 12;}\n\t\tint numColors (int edgeflag) const override {return edgeflag == 0 ? 4 : 2;}\n\n\tprotected:\n\t\tvoid approximateRow (double v1, double inc, bool overlap, double delta, const std::vector<CubicBezier> &beziers, Callback &callback) const;\n\t\tvoid setFirstMatrixColumn (const DPair source[4], bool reverse);\n\t\tvoid setFirstMatrixColumn (DPair source[4][4], int col, bool reverse);\n\n\tprivate:\n\t\tDPair _points[4][4];  ///< control point tensor defining the geometry of the patch surface\n\t\tColor _colors[4];     ///< vertex colors cK (c0->p00, c1->p03, c2->p30, c3->p33)\n};\n\n\n/** Coons patches are special tensor product patches where the four \"inner\" control points\n *  depend on the outer ones, i.e. they are computed automatically and can't be set by the user.\n *  Thus, a Coons patch is defined by 12 control points, 4 vertex colors and a corresponding\n *  color space. */\nclass CoonsPatch : public TensorProductPatch {\n\tpublic:\n\t\tCoonsPatch () =default;\n\t\texplicit CoonsPatch (Color::ColorSpace cspace) : TensorProductPatch(cspace) {}\n\t\tCoonsPatch (const PointVec &points, const ColorVec &colors, Color::ColorSpace cspace, int edgeflag, CoonsPatch *patch);\n\t\tint psShadingType() const override {return 6;}\n\t\tvoid setPoints (const PointVec &points, int edgeflag, ShadingPatch *patch) override;\n\t\tvoid setColors (const ColorVec &colors, int edgeflag, ShadingPatch *patch) override;\n\t\tint numPoints (int edgeflag) const override {return edgeflag == 0 ? 12 : 8;}\n\t\tint numColors (int edgeflag) const override {return edgeflag == 0 ? 4 : 2;}\n};\n\n#endif\n"
  },
  {
    "path": "src/Terminal.cpp",
    "content": "/*************************************************************************\n** Terminal.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <config.h>\n#include \"Terminal.hpp\"\n\n#ifdef HAVE_TERMIOS_H\n#include <termios.h>\n#endif\n\n#ifdef GWINSZ_IN_SYS_IOCTL\n#include <sys/ioctl.h>\n#endif\n\n#ifdef _WIN32\n#include \"windows.hpp\"\n#endif\n\n#include <cstdio>\n\n\nusing namespace std;\n\n\nconst int Terminal::RED     = 1;\nconst int Terminal::GREEN   = 2;\nconst int Terminal::BLUE    = 4;\n\nconst int Terminal::CYAN    = GREEN|BLUE;\nconst int Terminal::YELLOW  = RED|GREEN;\nconst int Terminal::MAGENTA = RED|BLUE;\nconst int Terminal::WHITE   = RED|GREEN|BLUE;\nconst int Terminal::DEFAULT = -1;\nconst int Terminal::BLACK   = 0;\n\n#ifdef _WIN32\nint Terminal::_defaultColor;\nint Terminal::_cursorHeight;\n#endif\n\nint Terminal::_fgcolor = Terminal::DEFAULT;\nint Terminal::_bgcolor = Terminal::DEFAULT;\n\n\n/** Initializes the terminal. This method should be called before any of the others.\n *  @param[in,out] os terminal output stream (currently unused) */\nvoid Terminal::init (ostream &os) {\n#ifdef _WIN32\n\tHANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);\n\tif (h != INVALID_HANDLE_VALUE) {\n\t\tCONSOLE_SCREEN_BUFFER_INFO buffer_info;\n\t\tGetConsoleScreenBufferInfo(h, &buffer_info);\n\t\t_defaultColor = (buffer_info.wAttributes & 0xff);\n\t\tCONSOLE_CURSOR_INFO cursor_info;\n\t\tGetConsoleCursorInfo(h, &cursor_info);\n\t\t_cursorHeight = cursor_info.dwSize;\n\t}\n#endif\n}\n\n\n/** Finishes the terminal output. Should be called after last terminal action.\n *  @param[in,out] os terminal output stream */\nvoid Terminal::finish (ostream &os) {\n\tfgcolor(DEFAULT, os);\n\tbgcolor(DEFAULT, os);\n\tcursor(true);\n}\n\n\n/** Returns the number of terminal columns (number of characters per row).\n *  If it's not possible to retrieve information about the terminal size, 0 is returned. */\nint Terminal::columns () {\n#if defined(TIOCGWINSZ)\n\tstruct winsize ws;\n\tif (ioctl(fileno(stderr), TIOCGWINSZ, &ws) < 0)\n\t\treturn 0;\n\treturn ws.ws_col;\n#elif defined(_WIN32)\n\tCONSOLE_SCREEN_BUFFER_INFO info;\n\tif (!GetConsoleScreenBufferInfo(GetStdHandle(STD_ERROR_HANDLE), &info))\n\t\treturn 0;\n\treturn info.dwSize.X;\n#else\n\treturn 0;\n#endif\n}\n\n\n/** Returns the number of terminal rows.\n *  If it's not possible to retrieve information about the terminal size, 0 is returned. */\nint Terminal::rows () {\n#if defined(TIOCGWINSZ)\n\tstruct winsize ws;\n\tif (ioctl(fileno(stderr), TIOCGWINSZ, &ws) < 0)\n\t\treturn 0;\n\treturn ws.ws_row;\n#elif defined(_WIN32)\n\tCONSOLE_SCREEN_BUFFER_INFO info;\n\tif (!GetConsoleScreenBufferInfo(GetStdHandle(STD_ERROR_HANDLE), &info))\n\t\treturn 0;\n\treturn info.dwSize.Y;\n#else\n\treturn 0;\n#endif\n}\n\n\n/** Sets the foreground color.\n *  @param[in] color color code\n *  @param[in] os terminal output stream */\nvoid Terminal::fgcolor (int color, ostream &os) {\n\t_fgcolor = color;\n\n#ifdef _WIN32\n\tHANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);\n\tif (h != INVALID_HANDLE_VALUE) {\n\t\tCONSOLE_SCREEN_BUFFER_INFO info;\n\t\tGetConsoleScreenBufferInfo(h, &info);\n\t\tif (_fgcolor == DEFAULT)\n\t\t\tcolor = _defaultColor & 0x0f;\n\t\telse {\n\t\t\t// swap red and blue bits\n\t\t\tcolor = (color & 0x0a) | ((color & 1) << 2) | ((color & 4) >> 2);\n\t\t}\n\t\tcolor = (info.wAttributes & 0xf0) | (color & 0x0f);\n\t\tSetConsoleTextAttribute(h, (DWORD)color);\n\t}\n#else\n\tbool light = false;\n\tif (color != DEFAULT && color > 7) {\n\t\tlight = true;\n\t\tcolor %= 8;\n\t}\n\tif (color == DEFAULT) {\n\t\tos << \"\\x1B[0m\";\n\t\tif (_bgcolor != DEFAULT)\n\t\t\tbgcolor(_bgcolor, os);\n\t}\n\telse\n\t\tos << \"\\x1B[\" << (light ? '1': '0') << ';' << (30+(color & 0x07)) << 'm';\n#endif\n}\n\n\n/** Sets the background color.\n *  @param[in] color color code\n *  @param[in] os terminal output stream */\nvoid Terminal::bgcolor (int color, ostream &os) {\n\t_bgcolor = color;\n#ifdef _WIN32\n\tHANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);\n\tif (h != INVALID_HANDLE_VALUE) {\n\t\tCONSOLE_SCREEN_BUFFER_INFO info;\n\t\tGetConsoleScreenBufferInfo(h, &info);\n\t\tif (_bgcolor == DEFAULT)\n\t\t\tcolor = (_defaultColor & 0xf0) >> 4;\n\t\telse {\n\t\t\t// swap red and blue bits\n\t\t\tcolor = (color & 0x0a) | ((color & 1) << 2) | ((color & 4) >> 2);\n\t\t}\n\t\tcolor = (info.wAttributes & 0x0f) | ((color & 0x0f) << 4);\n\t\tSetConsoleTextAttribute(h, (DWORD)color);\n\t}\n#else\n\tif (color != DEFAULT && color > 7)\n\t\tcolor %= 8;\n\tif (color == DEFAULT) {\n\t\tos << \"\\x1B[0m\";\n\t\tif (_fgcolor != DEFAULT)\n\t\t\tfgcolor(_fgcolor, os);\n\t}\n\telse\n\t\tos << \"\\x1B[\" << (40+(color & 0x07)) << 'm';\n#endif\n}\n\n\n/** Disables or enables the console cursor\n *  @param[in] visible if false, the cursor is disabled, and enabled otherwise */\nvoid Terminal::cursor (bool visible) {\n#ifdef _WIN32\n\tHANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);\n\tif (h != INVALID_HANDLE_VALUE) {\n\t\tCONSOLE_CURSOR_INFO cursor_info;\n\t\tcursor_info.bVisible = visible;\n\t\tcursor_info.dwSize = _cursorHeight;\n\t\tSetConsoleCursorInfo(h, &cursor_info);\n\t}\n#endif\n}\n"
  },
  {
    "path": "src/Terminal.hpp",
    "content": "/*************************************************************************\n** Terminal.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef TERMINAL_HPP\n#define TERMINAL_HPP\n\n#include <ostream>\n\nclass Terminal\n{\n\tpublic:\n\t\tstatic const int DEFAULT;\n\t\tstatic const int BLACK;\n\t\tstatic const int RED;\n\t\tstatic const int GREEN;\n\t\tstatic const int BLUE;\n\t\tstatic const int CYAN;\n\t\tstatic const int YELLOW;\n\t\tstatic const int MAGENTA;\n\t\tstatic const int WHITE;\n\n\tpublic:\n\t\tstatic void init (std::ostream &os);\n\t\tstatic void finish (std::ostream &os);\n\t\tstatic int columns ();\n\t\tstatic int rows ();\n\t\tstatic void fgcolor (int color, std::ostream &os);\n\t\tstatic void bgcolor (int color, std::ostream &os);\n\t\tstatic void cursor (bool visible);\n\n\tprivate:\n\t\tstatic int _fgcolor;  ///< current foreground color\n\t\tstatic int _bgcolor;  ///< current background color\n\n#ifdef _WIN32\n\t\tstatic int _defaultColor;\n\t\tstatic int _cursorHeight;  ///< current height of the cursor in percent\n#endif\n};\n\n#endif\n"
  },
  {
    "path": "src/ToUnicodeMap.cpp",
    "content": "/*************************************************************************\n** ToUnicodeMap.cpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <limits>\n#include \"ToUnicodeMap.hpp\"\n#include \"Unicode.hpp\"\n\nusing namespace std;\n\n\n/** Adds valid but random mappings for all missing character indexes.\n *  If a font's cmap table doesn't provide Unicode mappings for some\n *  glyphs in the font, it's necessary to fill the gaps in order to\n *  handle all characters correctly. This functions assumes that the\n *  characters are numbered from 1 to maxIndex.\n *  @param[in] maxIndex largest character index to consider\n *  @return true on success */\nbool ToUnicodeMap::addMissingMappings (uint32_t maxIndex) {\n\t// collect Unicode points already in assigned\n\tNumericRanges<uint32_t> codepoints;\n\tfor (size_t i=0; i < numRanges(); i++)\n\t\tcodepoints.addRange(getRange(i).minval(), getRange(i).maxval());\n\t// fill unmapped ranges\n\tbool success;\n\tif (empty()) // no Unicode mapping present at all?\n\t\tsuccess = fillRange(1, maxIndex, 1, codepoints, true);\n\telse {   // (partial) Unicode mapping present?\n\t\tsuccess = fillRange(1, getRange(0).min()-1, getRange(0).minval()-1, codepoints, false);\n\t\tfor (size_t i=0; i < numRanges()-1 && success; i++)\n\t\t\tsuccess = fillRange(getRange(i).max()+1, getRange(i+1).min()-1, getRange(i).maxval()+1, codepoints, true);\n\t\tif (success)\n\t\t\tsuccess = fillRange(getRange(numRanges()-1).max()+1, maxIndex, getRange(numRanges()-1).maxval()+1, codepoints, true);\n\t}\n\treturn success;\n}\n\n\n/** Checks if a given codepoint is valid and unused. Otherwise, try to find an alternative.\n * @param[in,out] ucp codepoint to fix\n * @param[in] used_codepoints codepoints already in use\n * @param[in] ascending if true, increase ucp to look for valid/unused codepoints\n * @return true on success */\nstatic bool fix_codepoint (uint32_t &ucp, const NumericRanges<uint32_t> &used_codepoints, bool ascending) {\n\tuint32_t start = ucp;\n\twhile (!Unicode::isValidCodepoint(ucp) && used_codepoints.valueExists(ucp)) {\n\t\tif (ascending)\n\t\t\tucp = (ucp == numeric_limits<uint32_t>::max()) ? 0 : ucp+1;\n\t\telse\n\t\t\tucp = (ucp == 0) ? numeric_limits<uint32_t>::max() : ucp-1;\n\t\tif (ucp == start) // no free Unicode point found\n\t\t\treturn false;\n\t}\n\treturn true;\n}\n\n\nstatic bool is_less_or_equal (uint32_t a, uint32_t b) {return a <= b;}\nstatic bool is_greater_or_equal (uint32_t a, uint32_t b) {return a >= b;}\n\n\n/** Adds index to Unicode mappings for a given range of character indexes.\n *  @param[in] minIndex lower bound of range to fill\n *  @param[in] maxIndex upper bound of range to fill\n *  @param[in] ucp first Unicode point to add (if possible)\n *  @param[in,out] used_ucps Unicode points already in use\n *  @param[in] ascending if true, fill range from lower to upper bound\n *  @return true on success */\nbool ToUnicodeMap::fillRange (uint32_t minIndex, uint32_t maxIndex, uint32_t ucp, NumericRanges<uint32_t> &used_ucps, bool ascending) {\n\tif (minIndex <= maxIndex) {\n\t\tuint32_t first=minIndex, last=maxIndex;\n\t\tint inc=1;\n\t\tbool (*cmp)(uint32_t, uint32_t) = is_less_or_equal;\n\t\tif (!ascending) {\n\t\t\tswap(first, last);\n\t\t\tinc = -1;\n\t\t\tcmp = is_greater_or_equal;\n\t\t}\n\t\tfor (uint32_t i=first; cmp(i, last); i += inc) {\n\t\t\tif (!fix_codepoint(ucp, used_ucps, ascending))\n\t\t\t\treturn false;\n\t\t\telse {\n\t\t\t\taddRange(i, i, ucp);\n\t\t\t\tused_ucps.addRange(ucp);\n\t\t\t\tucp += inc;  // preferred Unicode point for the next character of the current range\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}"
  },
  {
    "path": "src/ToUnicodeMap.hpp",
    "content": "/*************************************************************************\n** ToUnicodeMap.hpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef TOUNICODEMAP_HPP\n#define TOUNICODEMAP_HPP\n\n#include \"NumericRanges.hpp\"\n#include \"RangeMap.hpp\"\n\n\n/** Represents a mapping from character indexes to Unicode points. */\nclass ToUnicodeMap : public RangeMap {\n\tpublic:\n\t\tToUnicodeMap () = default;\n\t\tToUnicodeMap (RangeMap &&charmap) : RangeMap(std::move(charmap)) {}\n\t\tbool addMissingMappings (uint32_t maxIndex);\n\n\tprotected:\n\t\tbool fillRange (uint32_t minIndex, uint32_t maxIndex, uint32_t ucp, NumericRanges<uint32_t> &used_ucps, bool ascending);\n};\n\n#endif\n"
  },
  {
    "path": "src/TpicSpecialHandler.cpp",
    "content": "/*************************************************************************\n** TpicSpecialHandler.cpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <bitset>\n#include <cstring>\n#include <sstream>\n#include <string>\n#include \"Color.hpp\"\n#include \"EllipticalArc.hpp\"\n#include \"InputBuffer.hpp\"\n#include \"InputReader.hpp\"\n#include \"GraphicsPath.hpp\"\n#include \"SpecialActions.hpp\"\n#include \"SVGElement.hpp\"\n#include \"SVGTree.hpp\"\n#include \"TpicSpecialHandler.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n\nTpicSpecialHandler::TpicSpecialHandler () {\n\treset();\n}\n\n\nvoid TpicSpecialHandler::dviEndPage (unsigned pageno, SpecialActions&) {\n\treset();\n}\n\n\nvoid TpicSpecialHandler::reset () {\n\t_points.clear();\n\t_penwidth = 1.0;\n\t_grayLevel = -1.0; // no fill\n}\n\n\n/** Returns the current color used to fill closed paths or shapes.\n *  The TPIC documentation only specifies grayscale colors set by a floating point value\n *  in the range of 0 (white) and 1 (black). Most DVI drivers extend the color support\n *  by taking color specials into account: The grayscale colors are only applied if\n *  the DVI color is set to black. All other colors are directly used as fill color\n *  without evaluating the TPIC gray level. */\nColor TpicSpecialHandler::fillColor (bool grayOnly) const {\n\tif (_grayLevel >= 0 && (_dviColor == Color::BLACK || grayOnly))\n\t\treturn Color::WHITE*(1.0-_grayLevel);\n\treturn _dviColor;\n}\n\n\n/** Adds stroke attributes to a given element depending on the pen width.\n *  @param[in] elem element node the attributes are added to\n *  @param[in] penwidth pen with used to compute the stroke parameters\n *  @param[in] pencolor the drawing color\n *  @param[in] ddist dash/dot distance of line in PS point units (0:solid line, >0:dashed line, <0:dotted line) */\nstatic void add_stroke_attribs (SVGElement *elem, double penwidth, Color pencolor, double ddist) {\n\tif (penwidth > 0) {  // attributes actually required?\n\t\telem->setStrokeColor(pencolor);\n\t\telem->setStrokeWidth(penwidth);\n\t\tvector<double> dasharray;\n\t\tif (ddist > 0)\n\t\t\tdasharray.push_back(ddist);\n\t\telse if (ddist < 0) {\n\t\t\tdasharray.push_back(penwidth);\n\t\t\tdasharray.push_back(-ddist);\n\t\t}\n\t\telem->setStrokeDash(dasharray);\n\t}\n}\n\n\nstatic unique_ptr<SVGElement> create_ellipse_element (double cx, double cy, double rx, double ry) {\n\tbool is_circle = (rx == ry);\n\tauto elem = util::make_unique<SVGElement>(is_circle ? \"circle\" : \"ellipse\");\n\telem->addAttribute(\"cx\", cx);\n\telem->addAttribute(\"cy\", cy);\n\tif (is_circle)\n\t\telem->addAttribute(\"r\", rx);\n\telse {\n\t\telem->addAttribute(\"rx\", rx);\n\t\telem->addAttribute(\"ry\", ry);\n\t}\n\treturn elem;\n}\n\n\n/** Creates SVG elements that draw lines through the recorded points.\n *  @param[in] ddist dash/dot distance of line in PS point units (0:solid line, >0:dashed line, <0:dotted line)\n *  @param[in] actions object providing the actions that can be performed by the SpecialHandler */\nvoid TpicSpecialHandler::drawLines (double ddist, SpecialActions &actions) {\n\tif (!_points.empty() && (_penwidth > 0 || _grayLevel >= 0) && !actions.outputLocked()) {\n\t\tunique_ptr<SVGElement> elem;\n\t\tif (_points.size() == 1) {\n\t\t\tconst DPair &p = _points.back();\n\t\t\telem = create_ellipse_element(p.x()+actions.getX(), p.y()+actions.getY(), _penwidth/2.0, _penwidth/2.0);\n\t\t\tactions.embed(p, _penwidth/2.0);\n\t\t}\n\t\telse {\n\t\t\tif (_points.size() == 2 || (_grayLevel < 0 && _points.front() != _points.back())) {\n\t\t\t\telem = util::make_unique<SVGElement>(\"polyline\");\n\t\t\t\telem->setNoFillColor();\n\t\t\t\telem->setStrokeLineCap(SVGElement::LC_ROUND);\n\t\t\t}\n\t\t\telse {\n\t\t\t\twhile (_points.front() == _points.back())\n\t\t\t\t\t_points.pop_back();\n\t\t\t\telem = util::make_unique<SVGElement>(\"polygon\");\n\t\t\t\tif (_grayLevel < 0)\n\t\t\t\t\telem->setNoFillColor();\n\t\t\t\telse\n\t\t\t\t\telem->setFillColor(fillColor(false));\n\t\t\t}\n\t\t\tvector<DPair> points;\n\t\t\tfor (const DPair &p : _points) {\n\t\t\t\tdouble x = p.x()+actions.getX();\n\t\t\t\tdouble y = p.y()+actions.getY();\n\t\t\t\tpoints.emplace_back(x, y);\n\t\t\t\tactions.embed(DPair(x, y));\n\t\t\t}\n\t\t\telem->setPoints(points);\n\t\t\tadd_stroke_attribs(elem.get(), _penwidth, Color::BLACK, ddist);\n\t\t}\n\t\tactions.svgTree().appendToPage(std::move(elem));\n\t}\n\treset();\n}\n\n\n/** Stroke a quadratic spline through the midpoints of the lines defined by\n *  the previously recorded points. The spline starts\twith a straight line\n *  from the first point to the mid-point of the first line.  The spline ends\n *  with a straight line from the mid-point of the last line to the last point.\n *  If ddist=0, the spline is stroked solid. Otherwise ddist denotes the length\n *  of the dashes and the gaps in between.\n *  @param[in] ddist length of dashes and gaps\n *  @param[in] actions object providing the actions that can be performed by the SpecialHandler */\nvoid TpicSpecialHandler::drawSplines (double ddist, SpecialActions &actions) {\n\tif (!_points.empty() && _penwidth > 0 && !actions.outputLocked()) {\n\t\tconst size_t numPoints = _points.size();\n\t\tif (numPoints < 3) {\n\t\t\t_grayLevel = -1;\n\t\t\tdrawLines(ddist, actions);\n\t\t}\n\t\telse {\n\t\t\tDPair p(actions.getX(), actions.getY());\n\t\t\tGraphicsPath<double> path;\n\t\t\tpath.moveto(p+_points[0]);\n\t\t\tDPair mid = p+_points[0]+(_points[1]-_points[0])/2.0;\n\t\t\tpath.lineto(mid);\n\t\t\tactions.embed(p+_points[0]);\n\t\t\tfor (size_t i=1; i < numPoints-1; i++) {\n\t\t\t\tconst DPair p0 = p+_points[i-1];\n\t\t\t\tconst DPair p1 = p+_points[i];\n\t\t\t\tconst DPair p2 = p+_points[i+1];\n\t\t\t\tmid = p1+(p2-p1)/2.0;\n\t\t\t\tpath.quadto(p1, mid);\n\t\t\t\tactions.embed(mid);\n\t\t\t\tactions.embed((p0+p1*6.0+p2)/8.0, _penwidth);\n\t\t\t}\n\t\t\tif (_points[0] == _points[numPoints-1])  // closed path?\n\t\t\t\tpath.closepath();\n\t\t\telse {\n\t\t\t\tpath.lineto(p+_points[numPoints-1]);\n\t\t\t\tactions.embed(p+_points[numPoints-1]);\n\t\t\t}\n\t\t\tauto pathElem = util::make_unique<SVGElement>(\"path\");\n\t\t\tpathElem->setNoFillColor();\n\t\t\tostringstream oss;\n\t\t\tpath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);\n\t\t\tpathElem->addAttribute(\"d\", oss.str());\n\t\t\tadd_stroke_attribs(pathElem.get(), _penwidth, _dviColor, ddist);\n\t\t\tactions.svgTree().appendToPage(std::move(pathElem));\n\t\t}\n\t}\n\treset();\n}\n\n\n/** Draws an elliptical arc.\n *  @param[in] cx x-coordinate of arc center relative to current DVI position\n *  @param[in] cy y-coordinate of arc center relative to current DVI position\n *  @param[in] rx length of horizontal semi-axis\n *  @param[in] ry length of vertical semi-axis\n *  @param[in] angle1 starting angle (clockwise) relative to x-axis\n *  @param[in] angle2 ending angle (clockwise) relative to x-axis\n *  @param[in] actions object providing the actions that can be performed by the SpecialHandler */\nvoid TpicSpecialHandler::drawArc (double cx, double cy, double rx, double ry, double angle1, double angle2, SpecialActions &actions) {\n\tif ((_penwidth > 0 || _grayLevel >= 0) && !actions.outputLocked()) {\n\t\tcx += actions.getX();\n\t\tcy += actions.getY();\n\t\tunique_ptr<SVGElement> elem;\n\t\tbool closed=true;\n\t\tif (abs(angle2-angle1) >= math::TWO_PI) // closed ellipse?\n\t\t\telem = create_ellipse_element(cx, cy, rx, ry);\n\t\telse {\n\t\t\tEllipticalArc arc(DPair(cx, cy), rx, ry, 0, -angle1, math::normalize_0_2pi(angle2-angle1));\n\t\t\tGraphicsPath<double> path;\n\t\t\tpath.moveto(arc.startPoint());\n\t\t\tpath.arcto(rx, ry, 0, arc.largeArc(), arc.sweepPositive(), arc.endPoint());\n\t\t\tif (_grayLevel >= 0)\n\t\t\t\tpath.closepath();\n\t\t\telse\n\t\t\t\tclosed = false;\n\t\t\telem = util::make_unique<SVGElement>(\"path\");\n\t\t\tostringstream oss;\n\t\t\tpath.writeSVG(oss, SVGTree::RELATIVE_PATH_CMDS);\n\t\t\telem->addAttribute(\"d\", oss.str());\n\t\t}\n\t\tif (_penwidth > 0) {\n\t\t\telem->setStrokeWidth(_penwidth);\n\t\t\telem->setStrokeColor(actions.getStrokeColor());\n\t\t\tif (!closed)\n\t\t\t\telem->setStrokeLineCap(SVGElement::LC_ROUND);\n\t\t}\n\t\tif (_grayLevel < 0)\n\t\t\telem->setNoFillColor();\n\t\telse\n\t\t\telem->setFillColor(fillColor(true));\n\t\tactions.svgTree().appendToPage(std::move(elem));\n\t\tdouble pw = _penwidth/2.0;\n\t\tactions.embed(BoundingBox(cx-rx-pw, cy-ry-pw, cx+rx+pw, cy+ry+pw));\n\t}\n\treset();\n}\n\n\n/** Computes the gray level based on the ratio of set bits to the total\n *  number of bits of a given hex value.\n *  @param[in] hexstr a sequence of hexadecimal digits\n *  @return the computed gray level [0-1] */\nstatic double bit_sequence_to_gray (const string &hexstr) {\n\tif (hexstr.empty())\n\t\treturn 1.0;\n\tint setbits=0;   // number of bits set\n\tint totalbits=0; // number of bits processed\n\tconstexpr int CHUNKBITS = 8*sizeof(unsigned long long);\n\tfor (size_t pos=0; pos < hexstr.length(); pos+=CHUNKBITS/4) {\n\t\tsize_t digitcount;  // number of hex digits processed\n\t\tunsigned long long val = stoull(hexstr.substr(pos, CHUNKBITS/4), &digitcount, 16);\n\t\tsetbits += bitset<CHUNKBITS>(val).count();\n\t\ttotalbits += 4*digitcount;\n\t}\n\treturn totalbits == 0 ? 1.0 : 1.0-double(setbits)/double(totalbits);\n}\n\n\n/** Returns a unique integer for a TPIC command (consisting of two letters). */\nconstexpr int cmd_id (const char *cmd) {\n\treturn (cmd[0] << 8) | cmd[1];\n};\n\n\nbool TpicSpecialHandler::process (const string &prefix, istream &is, SpecialActions &actions) {\n\tif (prefix.length() != 2)\n\t\treturn false;\n\t_dviColor = actions.getFillColor();\n\tconstexpr double mi2bp=0.072; // factor for milli-inch to PS points\n\tStreamInputBuffer ib(is);\n\tBufferInputReader ir(ib);\n\tswitch (cmd_id(prefix.c_str())) {\n\t\tcase cmd_id(\"pn\"): // set pen width in milli-inches\n\t\t\t_penwidth = max(0.0, ir.getDouble()*mi2bp);\n\t\t\tbreak;\n\t\tcase cmd_id(\"bk\"): // set fill color to black\n\t\t\t_grayLevel = 1;\n\t\t\tbreak;\n\t\tcase cmd_id(\"wh\"): // set fill color to white\n\t\t\t_grayLevel = 0;\n\t\t\tbreak;\n\t\tcase cmd_id(\"sh\"): // set fill color to given gray level (0=white, 1=black)\n\t\t\tir.skipSpace();\n\t\t\t_grayLevel = ir.eof() ? 0.5 : max(0.0, min(1.0, ir.getDouble()));\n\t\t\tbreak;\n\t\tcase cmd_id(\"tx\"): { // set fill color depending on a sequence of bits (given as hex value)\n\t\t\tstring hexstr;\n\t\t\twhile (!ir.eof()) {\n\t\t\t\tir.skipSpace();\n\t\t\t\tint c = ir.get();\n\t\t\t\tif (isxdigit(c))\n\t\t\t\t\thexstr += static_cast<char>(tolower(c));\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t_grayLevel = bit_sequence_to_gray(hexstr);\n\t\t\tbreak;\n\t\t}\n\t\tcase cmd_id(\"pa\"): { // add point to path\n\t\t\tdouble x = ir.getDouble()*mi2bp;\n\t\t\tdouble y = ir.getDouble()*mi2bp;\n\t\t\t_points.emplace_back(x, y);\n\t\t\tbreak;\n\t\t}\n\t\tcase cmd_id(\"fp\"): // draw solid lines through recorded points; close and fill path if fill color was defined\n\t\t\tdrawLines(0, actions);\n\t\t\tbreak;\n\t\tcase cmd_id(\"ip\"): // don't draw outlines but close the recorded path and fill the resulting polygon\n\t\t\t_penwidth = 0;\n\t\t\tdrawLines(0, actions);\n\t\t\tbreak;\n\t\tcase cmd_id(\"da\"): // as fp but draw dashed lines\n\t\t\tdrawLines(ir.getDouble()*72, actions);\n\t\t\tbreak;\n\t\tcase cmd_id(\"dt\"): // as fp but draw dotted lines\n\t\t\tdrawLines(-ir.getDouble()*72, actions);\n\t\t\tbreak;\n\t\tcase cmd_id(\"sp\"): { // draw quadratic splines through recorded points\n\t\t\tdouble ddist = ir.getDouble()*72;\n\t\t\tdrawSplines(ddist, actions);\n\t\t\tbreak;\n\t\t}\n\t\tcase cmd_id(\"ar\"): { // draw elliptical arc\n\t\t\tdouble cx = ir.getDouble()*mi2bp;\n\t\t\tdouble cy = ir.getDouble()*mi2bp;\n\t\t\tdouble rx = ir.getDouble()*mi2bp;\n\t\t\tdouble ry = ir.getDouble()*mi2bp;\n\t\t\tdouble a1 = ir.getDouble();\n\t\t\tdouble a2 = ir.getDouble();\n\t\t\tdrawArc(cx, cy, rx, ry, a1, a2, actions);\n\t\t\tbreak;\n\t\t}\n\t\tcase cmd_id(\"ia\"): { // fill elliptical arc\n\t\t\tdouble cx = ir.getDouble()*mi2bp;\n\t\t\tdouble cy = ir.getDouble()*mi2bp;\n\t\t\tdouble rx = ir.getDouble()*mi2bp;\n\t\t\tdouble ry = ir.getDouble()*mi2bp;\n\t\t\tdouble a1 = ir.getDouble();\n\t\t\tdouble a2 = ir.getDouble();\n\t\t\t_penwidth = 0;\n\t\t\tdrawArc(cx, cy, rx, ry, a1, a2, actions);\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\treturn false;\n\t}\n\treturn true;\n}\n\n\nvector<const char*> TpicSpecialHandler::prefixes () const {\n\tvector<const char*> pfx {\"ar\", \"bk\", \"da\", \"dt\", \"fp\", \"ia\", \"ip\", \"pa\", \"pn\", \"sh\", \"sp\", \"tx\", \"wh\"};\n\treturn pfx;\n}\n"
  },
  {
    "path": "src/TpicSpecialHandler.hpp",
    "content": "/*************************************************************************\n** TpicSpecialHandler.hpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef TPICSPECIALHANDLER_HPP\n#define TPICSPECIALHANDLER_HPP\n\n#include <list>\n#include \"Pair.hpp\"\n#include \"SpecialHandler.hpp\"\n\nclass TpicSpecialHandler : public SpecialHandler {\n\tpublic:\n\t\tTpicSpecialHandler ();\n\t\tbool process (const std::string &prefix, std::istream &is, SpecialActions &actions) override;\n\t\tconst char* info () const override {return \"TPIC specials\";}\n\t\tconst char* name () const override {return handlerName();}\n\t\tstatic const char* handlerName ()  {return \"tpic\";}\n\t\tstd::vector<const char*> prefixes () const override;\n\t\tdouble penwidth () const  {return _penwidth;}\n\t\tdouble grayLevel () const {return _grayLevel;}\n\t\tColor fillColor (bool grayOnly) const;\n\n\tprotected:\n\t\tvoid dviEndPage (unsigned pageno, SpecialActions &actions) override;\n\t\tvoid reset ();\n\t\tvoid drawLines (double ddist, SpecialActions &actions);\n\t\tvoid drawSplines (double ddist, SpecialActions &actions);\n\t\tvoid drawArc (double cx, double cy, double rx, double ry, double angle1, double angle2, SpecialActions &actions);\n\n\tprivate:\n\t\tdouble _penwidth;  ///< pen width in PS point units\n\t\tdouble _grayLevel; ///< [0,1]; 0=white, 1=black, if < 0, we don't fill anything\n\t\tstd::vector<DPair> _points;\n\t\tColor _dviColor;   ///< current DVI color\n};\n\n#endif\n"
  },
  {
    "path": "src/TriangularPatch.cpp",
    "content": "/*************************************************************************\n** TriangularPatch.cpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"TriangularPatch.hpp\"\n\nusing namespace std;\n\nTriangularPatch::TriangularPatch (const PointVec &points, const ColorVec &colors, Color::ColorSpace cspace, int edgeflag, TriangularPatch *patch)\n\t: ShadingPatch(cspace)\n{\n\tsetPoints(points, edgeflag, patch);\n\tsetColors(colors, edgeflag, patch);\n}\n\n\nvoid TriangularPatch::setPoints (const PointVec &points, int edgeflag, ShadingPatch *patch) {\n\tTriangularPatch *triangularPatch = nullptr;\n\tif (patch && patch->psShadingType() == psShadingType())\n\t\ttriangularPatch = static_cast<TriangularPatch*>(patch);\n\tif (edgeflag > 0 && !triangularPatch)\n\t\tthrow ShadingException(\"missing preceding data in definition of triangular patch\");\n\tif ((edgeflag == 0 && points.size() != 3) || (edgeflag > 0 && points.size() != 1))\n\t\tthrow ShadingException(\"invalid number of vertices in triangular patch definition\");\n\n\t_points[0] = points[0];\n\tswitch (edgeflag) {\n\t\tcase 0:\n\t\t\t_points[1] = points[1];\n\t\t\t_points[2] = points[2];\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\t_points[1] = triangularPatch->_points[1];\n\t\t\t_points[2] = triangularPatch->_points[2];\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t_points[1] = triangularPatch->_points[2];\n\t\t\t_points[2] = triangularPatch->_points[0];\n\t}\n}\n\n\nvoid TriangularPatch::setPoints (const DPair &p1, const DPair &p2, const DPair &p3) {\n\t_points[0] = p1;\n\t_points[1] = p2;\n\t_points[2] = p3;\n}\n\n\nvoid TriangularPatch::setColors (const ColorVec &colors, int edgeflag, ShadingPatch *patch) {\n\tTriangularPatch *triangularPatch = nullptr;\n\tif (patch && patch->psShadingType() == psShadingType())\n\t\ttriangularPatch = static_cast<TriangularPatch*>(patch);\n\tif (edgeflag > 0 && !triangularPatch)\n\t\tthrow ShadingException(\"missing preceding data in definition of triangular patch\");\n\tif ((edgeflag == 0 && colors.size() != 3) || (edgeflag > 0 && colors.size() != 1))\n\t\tthrow ShadingException(\"invalid number of colors in triangular patch definition\");\n\n\t_colors[0] = colors[0];\n\tswitch (edgeflag) {\n\t\tcase 0:\n\t\t\t_colors[1] = colors[1];\n\t\t\t_colors[2] = colors[2];\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\t_colors[1] = triangularPatch->_colors[1];\n\t\t\t_colors[2] = triangularPatch->_colors[2];\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t_colors[1] = triangularPatch->_colors[2];\n\t\t\t_colors[2] = triangularPatch->_colors[0];\n\t}\n}\n\n\nvoid TriangularPatch::setColors (const Color &c1, const Color &c2, const Color &c3) {\n\t_colors[0] = c1;\n\t_colors[1] = c2;\n\t_colors[2] = c3;\n}\n\n\n/** Returns the Cartesian coordinates for the barycentric coordinates \\f$(u, v, 1-u-v)\\f$\n *  of a point of the triangle, where \\f$u, v \\in [0,1]\\f$ and \\f$u+v \\le 1\\f$.\n *  The relation between the vertices of the triangle and their barycentric coordinates\n *  is as follows: \\f$(1,0,0)=p_1, (0,1,0)=p_2, (0,0,1)=p_0\\f$. */\nDPair TriangularPatch::valueAt (double u, double v) const {\n\treturn _points[0] + (_points[1]-_points[0])*u + (_points[2]-_points[0])*v;\n}\n\n\n/** Returns the color at a given point of the triangle. The point must be given\n *  in barycentric coordinates \\f$(u, v, 1-u-v)\\f$, where \\f$u, v \\in [0,1]\\f$\n *  and \\f$u+v \\le 1\\f$.\n *  The relation between the vertices of the triangle and their barycentric coordinates\n *  is as follows: \\f$(1,0,0)=p_1, (0,1,0)=p_2, (0,0,1)=p_0\\f$. */\nColor TriangularPatch::colorAt (double u, double v) const {\n\tvalarray<double> comp[3];\n\tfor (int i=0; i < 3; i++)\n\t\tcomp[i] = _colors[i].getDoubleValues();\n\treturn Color(comp[0]*(1-u-v) + comp[1]*u + comp[2]*v, colorSpace());\n}\n\n\n/** Snaps value x to the interval [0,1]. Values lesser than or near 0 are mapped to 0, values\n *  greater than or near 1 are mapped to 1. */\nstatic inline double snap (double x) {\n\tif (abs(x) < 0.001)\n\t\treturn 0;\n\tif (abs(1-x) < 0.001)\n\t\treturn 1;\n\treturn x;\n}\n\n\n/** Approximate the patch by dividing it into a grid of triangular segments that are filled\n *  with the average color of the corresponding region. In order to prevent visual gaps between\n *  adjacent segments due to anti-aliasing, the flag 'overlap' can be set. It enlarges the\n *  segments so that they overlap with their right and bottom neighbors (which are drawn on\n *  top of the overlapping regions).\n *  @param[in] gridsize number of segments per row/column\n *  @param[in] overlap if true, enlarge each segment to overlap with its right and bottom neighbors\n *  @param[in] delta reduce level of detail if the segment size is smaller than the given value\n *  @param[in] callback object notified */\nvoid TriangularPatch::approximate (int gridsize, bool overlap, double delta, Callback &callback) const {\n\tif (_colors[0] == _colors[1] && _colors[1] == _colors[2]) {\n\t\tGraphicsPath<double> path = getBoundaryPath();\n\t\tcallback.patchSegment(path, _colors[0]);\n\t}\n\telse {\n\t\tconst double inc = 1.0/gridsize;\n\t\tfor (double u1=0; u1 < 1; u1=snap(u1+inc)) {\n\t\t\tdouble u2 = snap(u1+inc);\n\t\t\tdouble ou2 = (overlap && snap(u2+inc) <= 1 ? snap(u2+inc) : u2);\n\t\t\tfor (double v1=0; snap(u1+v1) < 1; v1=snap(v1+inc)) {\n\t\t\t\tdouble v2 = snap(v1+inc);\n\t\t\t\tdouble ov2 = (overlap && snap(v2+inc) <= 1 ? snap(v2+inc) : v2);\n\t\t\t\tif (!overlap || (snap(u1+ov2) <= 1 && snap(ou2+v1) <= 1)) {\n\t\t\t\t\t// create triangular segments pointing in the same direction as the whole patch\n\t\t\t\t\tGraphicsPath<double> path;\n\t\t\t\t\tpath.moveto(valueAt(u1, v1));\n\t\t\t\t\tpath.lineto(valueAt(ou2, v1));\n\t\t\t\t\tpath.lineto(valueAt(u1, ov2));\n\t\t\t\t\tpath.closepath();\n\t\t\t\t\t// draw segment filled with its midpoint color\n\t\t\t\t\tcallback.patchSegment(path, colorAt((2*u1+u2)/3, (2*v1+v2)/3));\n\t\t\t\t\tif (snap(u2+v2) <= 1 && (!overlap || inc > delta)) {\n\t\t\t\t\t\t// create triangular segments pointing in the opposite direction as the whole patch\n\t\t\t\t\t\tpath.clear();\n\t\t\t\t\t\tpath.moveto(valueAt(u1, v2));\n\t\t\t\t\t\tpath.lineto(valueAt(u2, v1));\n\t\t\t\t\t\tpath.lineto(valueAt(u2, v2));\n\t\t\t\t\t\tpath.closepath();\n\t\t\t\t\t\t// draw segment filled with its midpoint color\n\t\t\t\t\t\tcallback.patchSegment(path, colorAt((u1+2*u2)/3, (v1+2*v2)/3));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nGraphicsPath<double> TriangularPatch::getBoundaryPath () const {\n\tGraphicsPath<double> path;\n\tpath.clear();\n\tpath.moveto(_points[0]);\n\tpath.lineto(_points[1]);\n\tpath.lineto(_points[2]);\n\tpath.closepath();\n\treturn path;\n}\n\n\nBoundingBox TriangularPatch::getBBox () const {\n\tBoundingBox bbox;\n\tbbox.embed(_points[0]);\n\tbbox.embed(_points[1]);\n\tbbox.embed(_points[2]);\n\treturn bbox;\n}\n"
  },
  {
    "path": "src/TriangularPatch.hpp",
    "content": "/*************************************************************************\n** TriangularPatch.hpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef TRIANGULARPATCH_HPP\n#define TRIANGULARPATCH_HPP\n\n#include \"Color.hpp\"\n#include \"Pair.hpp\"\n#include \"ShadingPatch.hpp\"\n\nclass TriangularPatch : public ShadingPatch {\n\tpublic:\n\t\tTriangularPatch ();\n\t\texplicit TriangularPatch (Color::ColorSpace cspace) : ShadingPatch(cspace) {}\n\t\tTriangularPatch (const PointVec &points, const ColorVec &colors, Color::ColorSpace cspace, int edgeflag, TriangularPatch *patch);\n\t\tint psShadingType() const override {return 4;}\n\t\tDPair valueAt (double u, double v) const;\n\t\tColor colorAt (double u, double v) const;\n\t\tvoid setPoints (const PointVec &points, int edgeflag, ShadingPatch *patch) override;\n\t\tvoid setPoints (const DPair &p1, const DPair &p2, const DPair &p3);\n\t\tvoid setColors (const ColorVec &colors, int edgeflag, ShadingPatch *patch) override;\n\t\tvoid setColors (const Color &c1, const Color &c2, const Color &c3);\n\t\tvoid approximate (int gridsize, bool overlap, double delta, Callback &listener) const override;\n\t\tBoundingBox getBBox () const override;\n\t\tGraphicsPath<double> getBoundaryPath () const override;\n\t\tint numPoints (int edgeflag) const override {return edgeflag == 0 ? 3 : 1;}\n\t\tint numColors (int edgeflag) const override {return edgeflag == 0 ? 3 : 1;}\n\n\tprivate:\n\t\tDPair _points[3];\n\t\tColor _colors[3];\n};\n\n\nclass LatticeTriangularPatch : public TriangularPatch {\n\tpublic:\n\t\texplicit LatticeTriangularPatch (Color::ColorSpace cspace) : TriangularPatch(cspace) {}\n\t\tint psShadingType() const override {return 5;}\n};\n\n#endif\n"
  },
  {
    "path": "src/Unicode.cpp",
    "content": "/*************************************************************************\n** Unicode.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cctype>\n#include <cstddef>\n#include <iomanip>\n#include <sstream>\n#include <tuple>\n#include <xxhash.h>\n#include \"algorithm.hpp\"\n#include \"Unicode.hpp\"\n\nusing namespace std;\n\n\n/** Returns true if c is a valid Unicode point in XML documents.\n *  XML version 1.0 doesn't allow various Unicode character references\n *  (&#1; for example). */\nbool Unicode::isValidCodepoint (uint32_t c) {\n\tif ((c & 0xffff) == 0xfffe || (c & 0xffff) == 0xffff)\n\t\treturn false;\n\n\tusing CPRange = pair<uint32_t, uint32_t>;\n\tCPRange ranges[] = {\n\t\t{0x0000, 0x0020},  // basic control characters + space\n\t\t{0x007f, 0x009f},  // use of control characters is discouraged by the XML standard\n\t\t{0x202a, 0x202e},  // bidi control characters\n\t\t{0xd800, 0xdfff},  // High Surrogates are not allowed in XML\n\t\t{0xfdd0, 0xfdef}   // non-characters for internal use by applications\n\t};\n\treturn algo::none_of(ranges, [&](const CPRange &range) {\n\t\treturn c <= range.second && c >= range.first;\n\t});\n}\n\n\n/** Returns a valid Unicode point for the given character code. Character codes\n *  that are invalid code points because the XML standard forbids or discourages\n *  their usage, are mapped to the Private Use Zone U+E000-U+F8FF.\n *  @param[in] c character code to map\n *  @param[in] permitSpace if true, space characters are treated as allowed code points\n *  @return the code point */\nuint32_t Unicode::charToCodepoint (uint32_t c, bool permitSpace) {\n\tusing Triple = tuple<uint32_t, uint32_t, uint32_t>;\n\tstatic Triple ranges[] = {\n\t\t{0x0000, 0x0020, 0xe000}, // basic control characters + space\n\t\t{0x007f, 0x009f, 0xe021}, // use of control characters is discouraged by the XML standard\n\t\t{0x202a, 0x202e, 0xe042}, // bidi control characters\n\t\t{0xd800, 0xdfff, 0xe047}, // High Surrogates are not allowed in XML\n\t\t{0xfdd0, 0xfdef, 0xe847}, // non-characters for internal use by applications\n\t\t{0xfffe, 0xffff, 0xe867},\n\t\t{0x1fffe, 0x1ffff, 0xe869},\n\t\t{0x2fffe, 0x2ffff, 0xe86b},\n\t\t{0x3fffe, 0x3ffff, 0xe86d},\n\t\t{0x4fffe, 0x4ffff, 0xe86f},\n\t\t{0x5fffe, 0x5ffff, 0xe871},\n\t\t{0x6fffe, 0x6ffff, 0xe873},\n\t\t{0x7fffe, 0x7ffff, 0xe875},\n\t\t{0x8fffe, 0x8ffff, 0xe877},\n\t\t{0x9fffe, 0x9ffff, 0xe879},\n\t\t{0xafffe, 0xaffff, 0xe87b},\n\t\t{0xbfffe, 0xbffff, 0xe87d},\n\t\t{0xcfffe, 0xcffff, 0xe87f},\n\t\t{0xdfffe, 0xdffff, 0xe881},\n\t\t{0xefffe, 0xeffff, 0xe883},\n\t\t{0xffffe, 0xfffff, 0xe885},\n\t\t{0x10fffe, 0x10ffff, 0xe887}\n\t};\n\tif (!permitSpace || c != 0x20) {\n\t\tauto it = algo::find_if(ranges, [&](const Triple &range) {\n\t\t\treturn c < std::get<0>(range) || c <= std::get<1>(range);\n\t\t});\n\t\tif (it != end(ranges) && c >= std::get<0>(*it))\n\t\t\treturn std::get<2>(*it) + c - std::get<0>(*it);\n\t}\n\treturn c;\n}\n\n\n/** Converts a Unicode point to a UTF-8 byte sequence.\n *  @param[in] cp code point\n *  @return  utf8 sequence consisting of 1-4 bytes */\nstring Unicode::utf8 (int32_t cp) {\n\tstring utf8;\n\tif (cp >= 0) {\n\t\tif (cp < 0x80)\n\t\t\tutf8 += char(cp);\n\t\telse if (cp < 0x800) {\n\t\t\tutf8 += char(0xC0 + (cp >> 6));\n\t\t\tutf8 += char(0x80 + (cp & 0x3F));\n\t\t}\n\t\telse if (cp < 0x10000) {\n\t\t\tutf8 += char(0xE0 + (cp >> 12));\n\t\t\tutf8 += char(0x80 + ((cp >> 6) & 0x3F));\n\t\t\tutf8 += char(0x80 + (cp & 0x3F));\n\t\t}\n\t\telse if (cp < 0x110000) {\n\t\t\tutf8 += char(0xF0 + (cp >> 18));\n\t\t\tutf8 += char(0x80 + ((cp >> 12) & 0x3F));\n\t\t\tutf8 += char(0x80 + ((cp >> 6) & 0x3F));\n\t\t\tutf8 += char(0x80 + (cp & 0x3F));\n\t\t}\n\t\t// UTF-8 does not support codepoints >= 0x110000\n\t}\n\treturn utf8;\n}\n\n\nuint32_t Unicode::utf8ToCodepoint (const string &utf8) {\n\tauto len = utf8.length();\n\tif (len > 0) {\n\t\tunsigned char c0 = utf8[0];\n\t\tif (c0 <= 127)\n\t\t\treturn c0;\n\t\tif (len > 1) {\n\t\t\tunsigned char c1 = utf8[1];\n\t\t\tif (c0 >= 0xC0 && c0 <= 0xDF)\n\t\t\t\treturn ((c0-0xC0) << 6) + (c1-0x80);\n\t\t\tif (len > 2 && (c0 != 0xED || (c1 & 0xA0) != 0xA0)) {\n\t\t\t\tunsigned char c2 = utf8[2];\n\t\t\t\tif (c0 >= 0xE0 && c0 <= 0xEF)\n\t\t\t\t\treturn ((c0-0xE0) << 12) + ((c1-0x80) << 6) + (c2-0x80);\n\t\t\t\tif (len > 3) {\n\t\t\t\t\tunsigned char c3 = utf8[3];\n\t\t\t\t\tif (c0 >= 0xF0 && c0 <= 0xF7)\n\t\t\t\t\t\treturn  ((c0-0xF0) << 18) + ((c1-0x80) << 12) + ((c2-0x80) << 6) + (c3-0x80);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn 0;\n}\n\n\n/** Converts a surrogate pair to its code point.\n *  @param[in] high high-surrogate value (upper 16 bits)\n *  @param[in] low low-surrogate value (lower 16 bits)\n *  @return corresponding code point or 0 if the surrogate is invalid */\nuint32_t Unicode::fromSurrogate (uint32_t high, uint32_t low) {\n\tif (high < 0xD800 || high > 0xDBff || low < 0xDC00 || low > 0xDFFF)\n\t\treturn 0;\n\t// http://www.unicode.org/versions/Unicode3.0.0/ch03.pdf, p. 45\n\treturn (high-0xD800)*0x400 + low-0xDC00 + 0x10000;\n}\n\n\n/** Converts a surrogate value to its code point.\n *  @param[in] surrogate combined high and low surrogate value\n *  @return corresponding code point or 0 if the surrogate is invalid */\nuint32_t Unicode::fromSurrogate (uint32_t surrogate) {\n\treturn fromSurrogate(surrogate >> 16, surrogate & 0xFFFF);\n}\n\n\n/** Converts a code point of the surrogate range (0x10000--0x10FFFF)\n *  to its surrogate value.\n *  @param[in] cp code point to convert\n *  @return 32-bit surrogate (combined high and low values) */\nuint32_t Unicode::toSurrogate (uint32_t cp) {\n\tif (cp < 0x10000 || cp > 0x10FFFF)\n\t\treturn 0;\n\t// http://www.unicode.org/versions/Unicode3.0.0/ch03.pdf, p. 45\n\tuint32_t high = (cp-0x10000)/0x400 + 0xD800;\n\tuint32_t low = (cp-0x10000)%0x400 + 0xDC00;\n\treturn (high << 16) | low;\n}\n\n\nuint32_t Unicode::toLigature (const string &nonlig) {\n\tstruct Ligature {\n\t\tconst char *nonlig;\n\t\tuint32_t lig;\n\t} ligatures[39] = {\n\t\t{u8\"AA\",  0xA732}, {u8\"aa\", 0xA733},\n\t\t{u8\"AE\",  0x00C6}, {u8\"ae\", 0x00E6},\n\t\t{u8\"AO\",  0xA734}, {u8\"ao\", 0xA735},\n\t\t{u8\"AU\",  0xA736}, {u8\"au\", 0xA737},\n\t\t{u8\"AV\",  0xA738}, {u8\"av\", 0xA739},\n\t\t{u8\"AY\",  0xA73C}, {u8\"ay\", 0xA73D},\n\t\t{u8\"et\", 0x1F670},\n\t\t{u8\"ff\",  0xFB00},\n\t\t{u8\"ffi\", 0xFB03},\n\t\t{u8\"ffl\", 0xFB04},\n\t\t{u8\"fi\",  0xFB01},\n\t\t{u8\"fl\",  0xFB02},\n\t\t{u8\"Hv\",  0x01F6}, {u8\"hv\", 0x0195},\n\t\t{u8\"lb\",  0x2114},\n\t\t{u8\"lL\",  0x1EFA}, {u8\"ll\", 0x1EFB},\n\t\t{u8\"OE\",  0x0152}, {u8\"oe\", 0x0153},\n\t\t{u8\"OO\",  0xA74E}, {u8\"oo\", 0xA74F},\n\t\t{u8\"OO\",  0xA74E},\n\t\t{u8\"\\u0254e\", 0xAB62},\n\t\t{u8\"\\u017Fs\", 0x1E9E}, {u8\"\\u017Az\", 0x00DF},\n\t\t{u8\"Tz\",  0xA728}, {u8\"tz\",  0xA729},\n\t\t{u8\"ue\",  0x1D6B},\n\t\t{u8\"uo\",  0xAB63},\n\t\t{u8\"VV\",  0x0057}, {u8\"tz\",  0x0077},\n\t\t{u8\"VY\",  0xA760}, {u8\"tz\",  0xA761},\n\t};\n\tauto it = algo::find_if(ligatures, [&nonlig](const Ligature &l) {\n\t\treturn l.nonlig == nonlig;\n\t});\n\treturn it != end(ligatures) ? it->lig : 0;\n}\n\n#include \"AGLTable.hpp\"\n\n/** Tries to extract the codepoint from AGL character names like \"uni1234\" or \"u1234\".\n *  Returns 0 if the given name doesn't satisfy the constraints.\n *  https://github.com/adobe-type-tools/agl-specification\n *  @param[in] name AGL character name\n *  @return the extracted codepoint or 0 on failure */\nstatic int32_t extract_codepoint_from_name (const string &name) {\n\tsize_t offset=1;\n\tauto is_hex_digit = [](char c) {return isdigit(c) || (c >= 'A' && c <= 'F');};\n\tif (name.substr(0, 3) == \"uni\" && is_hex_digit(name[4]) && name.length() >= 7)\n\t\toffset = 3;\n\telse if (name[0] != 'u' || !is_hex_digit(name[1]) || name.length() < 5)\n\t\treturn 0;\n\n\tstring::const_iterator it = name.begin()+offset;\n\twhile (it != name.end() && is_hex_digit(*it) && *it != '.' && *it != '_')\n\t\t++it;\n\tif (it != name.end() && *it != '.' && *it != '_')\n\t\treturn 0;\n\n\tstring hexstr(name.begin()+offset, it);\n\tif (hexstr.length() < 4 || (offset == 3 && hexstr.length() % 4 != 0))\n\t\treturn 0;\n\tif (offset == 3)\n\t\thexstr.resize(4);\n\tint32_t codepoint;\n\tistringstream iss(hexstr);\n\tiss >> hex >> codepoint;\n\tif (!iss.fail() && (codepoint <= 0xD7FF || (codepoint >= 0xE000 && codepoint <= 0x10FFFF)))\n\t\treturn codepoint;\n\treturn 0;\n}\n\n\n#if 0\nstatic const char* get_suffix (const string &name) {\n\tstatic const char *suffixes[] = {\n\t\t\"small\", \"swash\", \"superior\", \"inferior\", \"numerator\", \"denominator\", \"oldstyle\",\n\t\t\"display\", \"text\", \"big\", \"bigg\", \"Big\", \"Bigg\", 0\n\t};\n\tauto pos = name.rfind('.');\n\tif (pos != string::npos) {\n\t\tstring suffix = name.substr(pos+1);\n\t\tfor (const char **p=suffixes; *p; p++)\n\t\t\tif (suffix == *p)\n\t\t\t\treturn *p;\n\t}\n\treturn 0;\n}\n#endif\n\n\n/** Returns the Unicode point for a given AGL character name.\n * @param name AGL name of the character to look up\n * @return codepoint of the character */\nint32_t Unicode::aglNameToCodepoint (const string &name) {\n\tif (int32_t cp = extract_codepoint_from_name(name))\n\t\treturn cp;\n\n\tuint32_t hash = XXH32(&name[0], name.length(), 0);\n\tconst HashCodepointPair cmppair = {hash, 0};\n\tauto it = algo::lower_bound(hash2unicode, cmppair,\n\t\t[](const HashCodepointPair &p1, const HashCodepointPair &p2) {\n\t\t\treturn p1.hash < p2.hash;\n\t\t}\n\t);\n\tif (it != hash2unicode.end() && it->hash == hash)\n\t\treturn it->codepoint;\n\treturn 0;\n}\n"
  },
  {
    "path": "src/Unicode.hpp",
    "content": "/*************************************************************************\n** Unicode.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef UNICODE_HPP\n#define UNICODE_HPP\n\n#include <cstdint>\n#include <string>\n\nstruct Unicode {\n\tstatic bool isValidCodepoint (uint32_t code);\n\tstatic uint32_t charToCodepoint (uint32_t c, bool permitSpace=false);\n\tstatic std::string utf8 (int32_t c);\n\tstatic uint32_t utf8ToCodepoint (const std::string &utf8);\n\tstatic uint32_t fromSurrogate (uint32_t high, uint32_t low);\n\tstatic uint32_t fromSurrogate (uint32_t cp);\n\tstatic uint32_t toSurrogate (uint32_t cp);\n\tstatic uint32_t toLigature (const std::string &nonlig);\n\tstatic int32_t aglNameToCodepoint (const std::string &name);\n};\n\n#endif\n"
  },
  {
    "path": "src/VFActions.hpp",
    "content": "/*************************************************************************\n** VFActions.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef VFACTIONS_HPP\n#define VFACTIONS_HPP\n\n#include <string>\n#include <vector>\n\n\nstruct VFActions {\n\tvirtual ~VFActions () =default;\n\tvirtual void vfPreamble (const std::string &comment, uint32_t checksum, double dsize) {}\n\tvirtual void vfPostamble () {}\n\tvirtual void defineVFFont (uint32_t fontnum, const std::string &path, const std::string &name, uint32_t checksum, double dsize, double ssize) {}\n\tvirtual void defineVFChar (uint32_t c, std::vector<char> dvi) {}\n};\n\n#endif\n"
  },
  {
    "path": "src/VFReader.cpp",
    "content": "/*************************************************************************\n** VFReader.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <sstream>\n#include \"FixWord.hpp\"\n#include \"Font.hpp\"\n#include \"Length.hpp\"\n#include \"VFActions.hpp\"\n#include \"VFReader.hpp\"\n\nusing namespace std;\n\n\nVFActions* VFReader::replaceActions (VFActions *a) {\n\tVFActions *ret = _actions;\n\t_actions = a;\n\treturn ret;\n}\n\n\n/** Reads a single VF command from the current position of the input stream and calls the\n *  corresponding cmdFOO method. The execution can be influenced by a function of type ApproveOpcode.\n *  It takes an opcode and returns true if the command is supposed to be executed.\n *  @param[in] approve function to approve invocation of the action assigned to command\n *  @return opcode of the executed command */\nint VFReader::executeCommand (ApproveAction approve) {\n\tint opcode = readByte();\n\tif (!isStreamValid() || opcode < 0)  // at end of file?\n\t\tthrow VFException(\"invalid VF file\");\n\n\tbool approved = !approve || approve(opcode);\n\tVFActions *actions = _actions;\n\tif (!approved)\n\t\treplaceActions(nullptr);  // disable actions\n\n\tif (opcode <= 241)     // short character definition?\n\t\tcmdShortChar(opcode);\n\telse if (opcode >= 243 && opcode <= 246)   // font definition?\n\t\tcmdFontDef(opcode-243+1);\n\telse {\n\t\tswitch (opcode) {\n\t\t\tcase 242: cmdLongChar(); break;  // long character definition\n\t\t\tcase 247: cmdPre();      break;  // preamble\n\t\t\tcase 248: cmdPost();     break;  // postamble\n\t\t\tdefault : {                      // invalid opcode\n\t\t\t\treplaceActions(actions);      // reenable actions\n\t\t\t\tthrow VFException(\"undefined VF command (opcode \" + std::to_string(opcode) + \")\");\n\t\t\t}\n\t\t}\n\t}\n\treplaceActions(actions); // reenable actions\n\treturn opcode;\n}\n\n\nbool VFReader::executeAll () {\n\tclearStream();  // reset all status bits\n\tif (!isStreamValid())\n\t\treturn false;\n\tseek(0);  // move file pointer to first byte of the input stream\n\twhile (!eof() && executeCommand() != 248); // stop reading after post (248)\n\treturn true;\n}\n\n\nbool VFReader::executePreambleAndFontDefs () {\n\tclearStream();\n\tif (!isStreamValid())\n\t\treturn false;\n\tseek(0);  // move file pointer to first byte of the input stream\n\tauto is_pre_or_fontdef = [](int op) {return op > 242;};\n\twhile (!eof() && executeCommand(is_pre_or_fontdef) > 242); // stop reading after last font definition\n\treturn true;\n}\n\n\nbool VFReader::executeCharDefs () {\n\tclearStream();\n\tif (!isStreamValid())\n\t\treturn false;\n\tseek(0);\n\tauto is_chardef = [](int op) {return op < 243;};\n\twhile (!eof() && executeCommand(is_chardef) < 243); // stop reading after last char definition\n\treturn true;\n}\n\n//////////////////////////////////////////////////////////////////////////////\n\n/** Reads and executes DVI preamble command. */\nvoid VFReader::cmdPre () {\n\tuint32_t i = readUnsigned(1);  // identification number (should be 2)\n\tuint32_t k = readUnsigned(1);  // length of following comment\n\tstring cmt = readString(k);    // comment\n\tuint32_t cs = readUnsigned(4); // check sum to be compared with TFM checksum\n\tint32_t ds = readUnsigned(4);  // design size (same as TFM design size) (fix_word)\n\t_designSize = double(FixWord(ds))*Length::pt2bp;\n\tif (i != 202)\n\t\tthrow VFException(\"invalid identification value in preamble\");\n\tif (_actions)\n\t\t_actions->vfPreamble(cmt, cs, ds);\n}\n\n\nvoid VFReader::cmdPost () const {\n\twhile ((readUnsigned(1)) == 248); // skip fill bytes\n\tif (_actions)\n\t\t_actions->vfPostamble();\n}\n\n\nvoid VFReader::cmdLongChar () const {\n\tuint32_t pl  = readUnsigned(4);     // packet length (length of DVI subroutine)\n\tif (!_actions)\n\t\tseek(8+pl, ios::cur);            // skip remaining char definition bytes\n\telse {\n\t\tuint32_t cc  = readUnsigned(4);  // character code\n\t\treadUnsigned(4);                 // equals character width from corresponding TFM file\n\t\tauto dvi = readBytesAsChars(pl); // DVI subroutine\n\t\t_actions->defineVFChar(cc, std::move(dvi)); // call template method for user actions\n\t}\n}\n\n\n/** Reads and executes short_char_x command.\n *  @param[in] pl packet length (length of DVI subroutine) */\nvoid VFReader::cmdShortChar (int pl) const {\n\tif (!_actions)\n\t\tseek(4+pl, ios::cur);  // skip char definition bytes\n\telse {\n\t\tuint32_t cc  = readUnsigned(1);  // character code\n\t\treadUnsigned(3);                 // character width from corresponding TFM file\n\t\tauto dvi = readBytesAsChars(pl); // DVI subroutine\n\t\t_actions->defineVFChar(cc, std::move(dvi)); // call template method for user actions\n\t}\n}\n\n\nvoid VFReader::cmdFontDef (int len) const {\n\tuint32_t fontnum  = readUnsigned(len);  // font number\n\tuint32_t checksum = readUnsigned(4);    // font checksum (to be compared with corresponding TFM checksum)\n\tuint32_t ssize    = readUnsigned(4);    // scaled size of font relative to design size (fix_word)\n\tuint32_t dsize    = readUnsigned(4);    // design size of font (same as TFM design size) (fix_word)\n\tuint32_t pathlen  = readUnsigned(1);    // length of font path\n\tuint32_t namelen  = readUnsigned(1);    // length of font name\n\tstring fontpath = readString(pathlen);\n\tstring fontname = readString(namelen);\n\tif (_actions) {\n\t\tdouble ss = double(FixWord(ssize))*Length::pt2bp;\n\t\tdouble ds = double(FixWord(dsize))*Length::pt2bp;\n\t\t_actions->defineVFFont(fontnum, fontpath, fontname, checksum, ds, ss*_designSize);\n\t}\n}\n"
  },
  {
    "path": "src/VFReader.hpp",
    "content": "/*************************************************************************\n** VFReader.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef VFREADER_HPP\n#define VFREADER_HPP\n\n#include \"MessageException.hpp\"\n#include \"StreamReader.hpp\"\n\n\nstruct VFException : MessageException {\n\texplicit VFException (const std::string &msg) : MessageException(msg) {}\n};\n\nstruct VFActions;\n\nclass VFReader : public StreamReader {\n\tusing ApproveAction = bool (*)(int);\n\tpublic:\n\t\texplicit VFReader (std::istream &is) : StreamReader(is) {}\n\t\tVFActions* replaceActions (VFActions *a);\n\t\tbool executeAll ();\n\t\tbool executePreambleAndFontDefs ();\n\t\tbool executeCharDefs ();\n\n\tprotected:\n\t\tint executeCommand (ApproveAction approve=nullptr);\n\n\t\t// the following methods represent the VF commands\n\t\t// they are called by executeCommand and should not be used directly\n\t\tvoid cmdPre ();\n\t\tvoid cmdPost () const;\n\t\tvoid cmdShortChar (int pl) const;\n\t\tvoid cmdLongChar () const;\n\t\tvoid cmdFontDef (int len) const;\n\n\tprivate:\n\t\tVFActions *_actions=nullptr; ///< actions to execute when reading a VF command\n\t\tdouble _designSize=0;  ///< design size of currently read VF in PS points\n};\n\n#endif\n"
  },
  {
    "path": "src/VectorIterator.hpp",
    "content": "/*************************************************************************\n** VectorIterator.hpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef VECTORITERATOR_HPP\n#define VECTORITERATOR_HPP\n\n#include <vector>\n#include \"MessageException.hpp\"\n\n\nstruct IteratorException : MessageException {\n\texplicit IteratorException (const std::string &msg) : MessageException(msg) {}\n};\n\n\ntemplate <typename T>\nclass VectorIterator {\n\tpublic:\n\t\texplicit VectorIterator (std::vector<T> &vec) : _vector(vec), _pos(0) {}\n\n\t\tVectorIterator operator ++ () {\n\t\t\t_pos++;\n\t\t\treturn *this;\n\t\t}\n\n\t\tVectorIterator operator ++ (int) {\n\t\t\tVectorIterator it = *this;\n\t\t\t_pos++;\n\t\t\treturn it;\n\t\t}\n\n\t\tVectorIterator operator -- () {\n\t\t\t_pos--;\n\t\t\treturn *this;\n\t\t}\n\n\t\tVectorIterator operator -- (int) {\n\t\t\tVectorIterator it = *this;\n\t\t\t_pos--;\n\t\t\treturn it;\n\t\t}\n\n\t\tVectorIterator operator += (int n) {\n\t\t\t_pos += n;\n\t\t\treturn *this;\n\t\t}\n\n\t\tVectorIterator operator -= (int n) {\n\t\t\t_pos -= n;\n\t\t\treturn *this;\n\t\t}\n\n\t\tVectorIterator operator + (int n) {\n\t\t\treturn VectorIterator(_vector, _pos+n);\n\t\t}\n\n\t\tVectorIterator operator - (int n) {\n\t\t\treturn VectorIterator(_vector, _pos-n);\n\t\t}\n\n\t\tT& operator * () {\n\t\t\tif (valid())\n\t\t\t\treturn _vector[_pos];\n\t\t\tthrow IteratorException(\"invalid access\");\n\t\t}\n\n\t\tT* operator -> () {\n\t\t\tif (valid())\n\t\t\t\treturn &_vector[_pos];\n\t\t\tthrow IteratorException(\"invalid access\");\n\t\t}\n\n\t\tbool operator == (const VectorIterator &it) const {return _pos == it._pos;}\n\t\tbool operator != (const VectorIterator &it) const {return _pos != it._pos;}\n\t\tbool operator <= (const VectorIterator &it) const {return _pos <= it._pos;}\n\t\tbool operator >= (const VectorIterator &it) const {return _pos >= it._pos;}\n\t\tbool operator < (const VectorIterator &it) const  {return _pos < it._pos;}\n\t\tbool operator > (const VectorIterator &it) const  {return _pos > it._pos;}\n\t\tbool valid () const {return _pos < _vector.size();}\n\t\tvoid invalidate ()  {_pos = _vector.size();}\n\t\tvoid reset ()       {_pos = 0;}\n\n\tprotected:\n\t\tVectorIterator (std::vector<T> &vec, size_t pos) : _vector(vec), _pos(pos) {}\n\n\tprivate:\n\t\tstd::vector<T> &_vector;\n\t\tsize_t _pos;\n};\n\n#endif\n"
  },
  {
    "path": "src/XMLDocument.cpp",
    "content": "/*************************************************************************\n** XMLDocument.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"XMLDocument.hpp\"\n\nusing namespace std;\n\nXMLDocument::XMLDocument (unique_ptr<XMLElement> root)\n\t: _rootElement(std::move(root))\n{\n}\n\n\nvoid XMLDocument::clear () {\n\t_rootElement.reset();\n\t_nodes.clear();\n}\n\n\nvoid XMLDocument::append (unique_ptr<XMLNode> node) {\n\tif (node) {\n\t\tif (node->toElement())\n\t\t\t_rootElement = util::static_unique_ptr_cast<XMLElement>(std::move(node));\n\t\telse\n\t\t\t_nodes.push_back(std::move(node));\n\t}\n}\n\n\nvoid XMLDocument::setRootNode (unique_ptr<XMLElement> root) {\n\t_rootElement = std::move(root);\n}\n\n\nostream& XMLDocument::write (ostream &os) const {\n\tif (_rootElement) { // no root element => no output\n\t\tos << \"<?xml version='1.0' encoding='UTF-8'?>\\n\";\n\t\tfor (const auto &node : _nodes) {\n\t\t\tnode->write(os);\n\t\t\tos << '\\n';\n\t\t}\n\t\t_rootElement->write(os);\n\t}\n\treturn os;\n}\n"
  },
  {
    "path": "src/XMLDocument.hpp",
    "content": "/*************************************************************************\n** XMLDocument.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef XMLDOCUMENT_HPP\n#define XMLDOCUMENT_HPP\n\n#include <memory>\n#include <vector>\n#include \"XMLNode.hpp\"\n\nclass XMLDocument {\n\tpublic:\n\t\tXMLDocument () =default;\n\t\texplicit XMLDocument(std::unique_ptr<XMLElement> root);\n\t\tvoid clear ();\n\t\tvoid append (std::unique_ptr<XMLElement> node);\n\t\tvoid append (std::unique_ptr<XMLNode> node);\n\t\tvoid setRootNode (std::unique_ptr<XMLElement> root);\n\t\tconst XMLElement* getRootElement () const {return _rootElement.get();}\n\t\tstd::ostream& write (std::ostream &os) const;\n\n\tprivate:\n\t\tstd::vector<std::unique_ptr<XMLNode>> _nodes;\n\t\tstd::unique_ptr<XMLElement> _rootElement;\n};\n\n#endif\n"
  },
  {
    "path": "src/XMLNode.cpp",
    "content": "/*************************************************************************\n** XMLNode.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <fstream>\n#include <iterator>\n#include <list>\n#include <map>\n#include <sstream>\n#include \"algorithm.hpp\"\n#include \"FileSystem.hpp\"\n#include \"utility.hpp\"\n#include \"XMLNode.hpp\"\n#include \"XMLString.hpp\"\n\nusing namespace std;\n\nbool XMLNode::KEEP_ENCODED_FILES=false;\nbool XMLElement::WRITE_NEWLINES=true;\n\n\n/** Inserts a sibling node after this one.\n *  @param[in] node node to insert\n *  @return raw pointer to inserted node */\nXMLNode* XMLNode::insertNext (unique_ptr<XMLNode> node) {\n\tif (_next) {\n\t\t_next->_prev = node.get();\n\t\tnode->_next = std::move(_next);\n\t}\n\tnode->_prev = this;\n\tnode->_parent = _parent;\n\t_next = std::move(node);\n\treturn _next.get();\n}\n\n\n/** Removes the following sibling node of this one.\n *  @return pointer to the removed node */\nunique_ptr<XMLNode> XMLNode::removeNext () {\n\tunique_ptr<XMLNode> oldnext = std::move(_next);\n\tif (oldnext) {\n\t\toldnext->_parent = oldnext->_prev = nullptr;\n\t\tif ((_next = std::move(oldnext->_next))) {\n\t\t\t_next->_prev = this;\n\t\t\toldnext->_next.reset();\n\t\t}\n\t}\n\treturn oldnext;\n}\n\n\nXMLElement* XMLNode::nextElement () const {\n\tfor (XMLNode *node = next(); node; node = node->next())\n\t\tif (node->toElement())\n\t\t\treturn node->toElement();\n\treturn nullptr;\n}\n\n/////////////////////////////////////////////////////////////////////\n\nXMLElement::XMLElement (string name) : _name(std::move(name)) {\n}\n\n\nXMLElement::XMLElement (const XMLElement &node)\n\t: XMLNode(node), _name(node._name), _attributes(node._attributes)\n{\n\tfor (XMLNode *child=node._firstChild.get(); child; child = child->next())\n\t\tinsertLast(child->clone());\n}\n\n\nXMLElement::XMLElement (XMLElement &&node) noexcept\n\t: XMLNode(std::move(node)),\n\t_name(std::move(node._name)),\n\t_attributes(std::move(node._attributes)),\n\t_firstChild(std::move(node._firstChild)),\n\t_lastChild(node._lastChild)\n{\n}\n\n\nXMLElement::~XMLElement () {\n\t// explicitly remove child nodes by iteration to prevent deep recursion\n\tunique_ptr<XMLNode> child = std::move(_firstChild);\n\twhile (child && child->next())\n\t\tchild->removeNext();\n}\n\n\n/** Removes all attributes and children. */\nvoid XMLElement::clear () {\n\t_attributes.clear();\n\t_firstChild.reset();\n\t_lastChild = nullptr;\n}\n\n\n/** Returns true if element has no child nodes or, alternatively, only whitespace children.\n *  @param[in] ignoreWhitespace if true and if there are only whitespace children, the functions returns true */\nbool XMLElement::empty (bool ignoreWhitespace) const {\n\tif (!_firstChild || !ignoreWhitespace)\n\t\treturn _firstChild == nullptr;\n\n\treturn algo::all_of(*this, [](const XMLNode *node) {\n\t\treturn node->toWSNode();\n\t});\n}\n\n\nvoid XMLElement::addAttribute (const string &name, const string &value) {\n\tif (Attribute *attr = getAttribute(name))\n\t\tattr->value = value;\n\telse\n\t\t_attributes.emplace_back(name, value);\n}\n\n\nvoid XMLElement::addAttribute (const string &name, double value) {\n\taddAttribute(name, XMLString(value));\n}\n\n\nvoid XMLElement::addAttributes (const map<string, string> &attribs) {\n\tfor (auto &attr : attribs)\n\t\t_attributes.emplace_back(attr);\n}\n\n\nvoid XMLElement::removeAttribute (const std::string &name) {\n\t_attributes.erase(algo::find_if(_attributes, [&](const Attribute &attr) {\n\t\treturn attr.name == name;\n\t}));\n}\n\n\n/** Inserts a new last child node and returns a raw pointer to it. */\nXMLNode* XMLElement::insertLast (unique_ptr<XMLNode> child) {\n\tif (!child)\n\t\treturn nullptr;\n\tchild->parent(this);\n\tif (!empty())\n\t\t_lastChild = _lastChild->insertNext(std::move(child));\n\telse {\n\t\t_firstChild = std::move(child);\n\t\t_lastChild = _firstChild.get();\n\t}\n\treturn _lastChild;\n}\n\n\n/** Inserts a new first child node and returns a raw pointer to it. */\nXMLNode* XMLElement::insertFirst (unique_ptr<XMLNode> child) {\n\tif (!child)\n\t\treturn nullptr;\n\tchild->parent(this);\n\tif (empty()) {\n\t\t_firstChild = std::move(child);\n\t\t_lastChild = _firstChild.get();\n\t}\n\telse {\n\t\tchild->insertNext(std::move(_firstChild));\n\t\t_firstChild = std::move(child);\n\t}\n\treturn _firstChild.get();\n}\n\n\n/** Appends a child node to this element. The element also takes the ownership of the child.\n *  @param[in] child node to be appended\n *  @return raw pointer to the appended child node */\nXMLNode* XMLElement::append (unique_ptr<XMLNode> child) {\n\tif (!child)\n\t\treturn nullptr;\n\tXMLText *textNode1 = child->toText();\n\tif (!textNode1 || empty())\n\t\tinsertLast(std::move(child));\n\telse {\n\t\tif (XMLText *textNode2 = _lastChild->toText())\n\t\t\ttextNode2->append(util::static_unique_ptr_cast<XMLText>(std::move(child)));  // merge two consecutive text nodes\n\t\telse\n\t\t\tinsertLast(std::move(child));\n\t}\n\treturn _lastChild;\n}\n\n\n/** Appends a string to this element. If the last child is a text node, the string is\n *  appended there, otherwise a new text node is created.\n *  @param[in] str string to be appended\n *  @return raw pointer to the text node the string was appended to */\nXMLNode* XMLElement::append (const string &str) {\n\tXMLText *last;\n\tif (!empty() && (last = _lastChild->toText()))\n\t\tlast->append(str);\n\telse\n\t\tinsertLast(util::make_unique<XMLText>(str));\n\treturn _lastChild;\n}\n\n\n/** Prepends a child node to this element. The element also takes the ownership of the child.\n *  @param[in] child node to be prepended\n *  @return raw pointer to the prepended child node */\nXMLNode* XMLElement::prepend (unique_ptr<XMLNode> child) {\n\tif (!child)\n\t\treturn nullptr;\n\tXMLText *textNode1 = child->toText();\n\tif (textNode1 && !empty()) {\n\t\tif (XMLText *textNode2 = _firstChild->toText()) {\n\t\t\ttextNode2->prepend(util::static_unique_ptr_cast<XMLText>(std::move(child)));  // merge two consecutive text nodes\n\t\t\treturn textNode2;\n\t\t}\n\t}\n\tinsertFirst(std::move(child));\n\treturn _firstChild.get();\n}\n\n\n/** Inserts a new child node before a given child node already present. The latter\n *  will be the following sibling of the node to be inserted. If there's no such\n *  node present, nothing is inserted.\n *  @param[in] child node to be inserted\n *  @param[in] sibling following sibling of 'child'\n *  @return raw pointer to inserted node */\nXMLNode* XMLElement::insertBefore (unique_ptr<XMLNode> child, const XMLNode *sibling) {\n\tif (!child || (sibling && sibling->parent() != this))\n\t\treturn nullptr;\n\tif (!sibling)\n\t\treturn insertLast(std::move(child));\n\tif (sibling == _firstChild.get())\n\t\treturn insertFirst(std::move(child));\n\treturn sibling->prev()->insertNext(std::move(child));\n}\n\n\n/** Inserts a new child node after a given child node already present. The latter\n *  will be the preceding sibling of the node to be inserted. If there's no such\n *  node present, nothing is inserted.\n *  @param[in] child node to be inserted\n *  @param[in] sibling preceding sibling of 'child'\n *  @return raw pointer to inserted node */\nXMLNode* XMLElement::insertAfter (unique_ptr<XMLNode> child, XMLNode *sibling) {\n\tif (!child || (sibling && sibling->parent() != this))\n\t\treturn nullptr;\n\tif (!sibling)\n\t\treturn insertFirst(std::move(child));\n\tif (sibling == _lastChild)\n\t\treturn insertLast(std::move(child));\n\treturn sibling->insertNext(std::move(child));\n}\n\n\n/** Moves a sequence of child nodes to a new element of a given name and inserts\n *  this (wrapper) element at the former position of the first node of the sequence.\n *  Example: wrap 3 child nodes of element a with b:\n *  <a>text1<c/>text2<d/></a> => <a>text1<b><c/>text2<d/></b></a>\n *  @param[in] first first node to wrap\n *  @param[in] last last node to wrap (or nullptr if all following siblings of 'first' are to be wrapped)\n *  @param[in] name name of the wrapper element to be created\n *  @return raw pointer to the new wrapper element */\nXMLElement* XMLElement::wrap (XMLNode *first, const XMLNode *last, const string &name) {\n\tif (!first || !first->parent() || (last && first->parent() != last->parent()))\n\t\treturn nullptr;\n\tXMLElement *parent = first->parent()->toElement();\n\tXMLNode *prev = first->prev();\n\tauto wrapper = util::make_unique<XMLElement>(name);\n\tif (last)\n\t\tlast = last->next();\n\tXMLNode *child = first;\n\twhile (child && child != last) {\n\t\tXMLNode *next = child->next();\n\t\twrapper->insertLast(detach(child));\n\t\tchild = next;\n\t}\n\tXMLElement *ret = wrapper.get();\n\tif (prev)\n\t\tparent->insertAfter(std::move(wrapper), prev);\n\telse\n\t\tparent->insertFirst(std::move(wrapper));\n\treturn ret;\n}\n\n\n/** Moves all child nodes C1,...,Cn of a given element E to its parent and\n *  removes E afterwards, so that C1 is located at the former position of E\n *  followed by C2,...,Cn.\n *  Example: unwrap a child element b of a:\n *  <a>text1<b><c/>text2<d/></b></a> => <a>text1<c/>text2<d/></a>\n *  @param[in] element element to unwrap\n *  @return raw pointer to the first node C1 of the unwrapped sequence or nullptr if element was empty */\nXMLNode* XMLElement::unwrap (XMLElement *element) {\n\tif (!element || !element->parent())\n\t\treturn nullptr;\n\tXMLElement *parent = element->parent()->toElement();\n\tXMLNode *prev = element->prev();\n\tauto detachedElement = util::static_unique_ptr_cast<XMLElement>(detach(element));\n\tif (detachedElement->empty())\n\t\treturn nullptr;\n\tXMLNode *firstChild = detachedElement->firstChild();\n\twhile (auto child = detach(detachedElement->firstChild()))\n\t\tprev = parent->insertAfter(std::move(child), prev);\n\treturn firstChild;\n}\n\n\n/** Isolates a node and its descendants from a subtree.\n *  @param[in] node raw pointer to node to be detached\n *  @return unique pointer to the detached node. */\nunique_ptr<XMLNode> XMLElement::detach (XMLNode *node) {\n\tunique_ptr<XMLNode> uniqueNode;\n\tif (node && node->parent()) {\n\t\tXMLElement *parent = node->parent()->toElement();\n\t\tif (node == parent->_lastChild)\n\t\t\tparent->_lastChild = node->prev();\n\t\tif (node != parent->firstChild())\n\t\t\tuniqueNode = node->prev()->removeNext();\n\t\telse {\n\t\t\tuniqueNode = std::move(parent->_firstChild);\n\t\t\tif ((parent->_firstChild = std::move(uniqueNode->_next)))\n\t\t\t\tparent->_firstChild->prev(nullptr);\n\t\t}\n\t\tnode->parent(nullptr);\n\t}\n\treturn uniqueNode;\n}\n\n\n/** Gets all descendant elements with a given name and given attribute.\n *  @param[in] name name of elements to find\n *  @param[in] attrName name of attribute to find\n *  @param[out] descendants all elements found\n *  @return true if at least one element was found  */\nbool XMLElement::getDescendants (const char *name, const char *attrName, vector<XMLElement*> &descendants) const {\n\tfor (XMLNode *child = _firstChild.get(); child; child = child->next()) {\n\t\tif (XMLElement *elem = child->toElement()) {\n\t\t\tif (!name || !name[0] || (name[0] != '!' && elem->name() == name) || (name[0] == '!' && elem->name() != name+1)) {\n\t\t\t\tif (!attrName || elem->hasAttribute(attrName))\n\t\t\t\t\tdescendants.push_back(elem);\n\t\t\t}\n\t\t\telem->getDescendants(name, attrName, descendants);\n\t\t}\n\t}\n\treturn !descendants.empty();\n}\n\n\n/** Returns the first descendant element that matches the given properties in depth first order.\n *  @param[in] name element name; if 0, all elements are taken into account\n *  @param[in] attrName if not 0, only elements with an attribute of this name are considered\n *  @param[in] attrValue if not 0, only elements with attribute attrName=\"attrValue\" are considered\n *  @return pointer to the found element or 0 */\nXMLElement* XMLElement::getFirstDescendant (const char *name, const char *attrName, const char *attrValue) const {\n\tfor (XMLNode *child = _firstChild.get(); child; child = child->next()) {\n\t\tif (XMLElement *elem = child->toElement()) {\n\t\t\tif (!name || elem->name() == name) {\n\t\t\t\tconst char *value;\n\t\t\t\tif (!attrName || (((value = elem->getAttributeValue(attrName)) != nullptr) && (!attrValue || string(value) == attrValue)))\n\t\t\t\t\treturn elem;\n\t\t\t}\n\t\t\tif (XMLElement *descendant = elem->getFirstDescendant(name, attrName, attrValue))\n\t\t\t\treturn descendant;\n\t\t}\n\t}\n\treturn nullptr;\n}\n\n\nostream& XMLElement::write (ostream &os) const {\n\tos << '<' << _name;\n\tfor (const auto &attrib : _attributes) {\n\t\tos << ' ';\n\t\tif (attrib.name.front() != '@')\n\t\t\tos << attrib.name << \"='\" << attrib.value << '\\'';\n\t\telse {\n\t\t\tbool keep = (attrib.name.size() > 1 && attrib.name[1] == '@');\n\t\t\tos << attrib.name.substr(keep ? 2 : 1) << \"='\";\n\t\t\tauto pos = attrib.value.find(\"base64,\");\n\t\t\tif (pos == string::npos)\n\t\t\t\tos << attrib.value;\n\t\t\telse {\n\t\t\t\tos << attrib.value.substr(0, pos+7);\n\t\t\t\tstring fname = attrib.value.substr(pos+7);\n\t\t\t\tifstream ifs(fname, ios::binary);\n\t\t\t\tif (ifs) {\n\t\t\t\t\tos << '\\n';\n\t\t\t\t\tutil::base64_encode(ifs, os, 200);\n\t\t\t\t\tifs.close();\n\t\t\t\t\tif (!KEEP_ENCODED_FILES && !keep)\n\t\t\t\t\t\tFileSystem::remove(fname);\n\t\t\t\t}\n\t\t\t}\n\t\t\tos << \"'\";\n\t\t}\n\t}\n\tif (empty())\n\t\tos << \"/>\";\n\telse {\n\t\tos << '>';\n\t\t// Insert newlines around children except text nodes. According to the\n\t\t// SVG specification, pure whitespace nodes are ignored by the SVG renderer.\n\t\tif (WRITE_NEWLINES && name() != \"text\" && !_firstChild->toText())\n\t\t\tos << '\\n';\n\t\tfor (XMLNode *child = _firstChild.get(); child; child = child->next()) {\n\t\t\tchild->write(os);\n\t\t\tif (!child->toText()) {\n\t\t\t\tif (WRITE_NEWLINES && name() != \"text\" && (!child->next() || !child->next()->toText()))\n\t\t\t\t\tos << '\\n';\n\t\t\t}\n\t\t}\n\t\tos << \"</\" << _name << '>';\n\t}\n\treturn os;\n}\n\n\n/** Returns true if this element has an attribute of given name. */\nbool XMLElement::hasAttribute (const string &name) const {\n\treturn getAttribute(name) != nullptr;\n}\n\n\n/** Returns the value of an attribute.\n *  @param[in] name name of attribute\n *  @return attribute value or 0 if attribute doesn't exist */\nconst char* XMLElement::getAttributeValue (const std::string& name) const {\n\tif (const Attribute *attr = getAttribute(name))\n\t\treturn attr->value.c_str();\n\treturn nullptr;\n}\n\n\nXMLElement::Attribute* XMLElement::getAttribute (const string &name) {\n\tauto it = algo::find_if(_attributes, [&](const Attribute &attr) {\n\t\treturn attr.name == name;\n\t});\n\treturn it != _attributes.end() ? &(*it) : nullptr;\n}\n\n\nconst XMLElement::Attribute* XMLElement::getAttribute (const string &name) const {\n\tauto it = algo::find_if(_attributes, [&](const Attribute &attr) {\n\t\treturn attr.name == name;\n\t});\n\treturn it != _attributes.end() ? &(*it) : nullptr;\n}\n\n\n/** Checks whether an SVG attribute A of an element E implicitly propagates its properties\n *  to all child elements of E that don't specify A. For now we only consider a subset of\n *  the inheritable properties.\n *  @return true if the attribute is inheritable */\nbool XMLElement::Attribute::inheritable () const {\n\t// subset of inheritable properties listed on https://www.w3.org/TR/SVG11/propidx.html\n\t// clip-path is not inheritable but can be moved to the parent element as long as\n\t// no child gets an different clip-path attribute\n\t// https://www.w3.org/TR/SVG11/styling.html#Inheritance\n\tstatic const char *names[] = {\n\t\t\t\"clip-path\", \"clip-rule\", \"color\", \"color-interpolation\", \"color-interpolation-filters\", \"color-profile\",\n\t\t\t\"color-rendering\", \"direction\", \"fill\", \"fill-opacity\", \"fill-rule\", \"font\", \"font-family\", \"font-size\",\n\t\t\t\"font-size-adjust\", \"font-stretch\", \"font-style\", \"font-variant\", \"font-weight\", \"glyph-orientation-horizontal\",\n\t\t\t\"glyph-orientation-vertical\", \"letter-spacing\", \"paint-order\", \"stroke\", \"stroke-dasharray\", \"stroke-dashoffset\",\n\t\t\t\"stroke-linecap\", \"stroke-linejoin\", \"stroke-miterlimit\", \"stroke-opacity\", \"stroke-width\", \"transform\",\n\t\t\t\"visibility\", \"word-spacing\", \"writing-mode\"\n\t};\n\treturn algo::binary_search(names, name, [](const string &name1, const string &name2) {\n\t\treturn name1 < name2;\n\t});\n}\n\n\n//////////////////////\n\nvoid XMLText::append (unique_ptr<XMLNode> node) {\n\tif (!node)\n\t\treturn;\n\tif (node->toText())\n\t\tappend(util::static_unique_ptr_cast<XMLText>(std::move(node)));\n\telse {\n\t\t// append text representation of the node\n\t\tostringstream oss;\n\t\tnode->write(oss);\n\t\tappend(XMLString(oss.str()));\n\t}\n}\n\n\nvoid XMLText::append (const unique_ptr<XMLText> &node) {\n\tif (node)\n\t\t_text += node->_text;\n}\n\n\nvoid XMLText::append (const string &str) {\n\t_text += str;\n}\n\n\nvoid XMLText::prepend (const unique_ptr<XMLNode> &node) {\n\tif (XMLText *textNode = node->toText())\n\t\t_text = textNode->_text + _text;\n}\n\n\nconst XMLText* XMLText::toWSNode () const {\n\treturn _text.find_first_not_of(\" \\t\\n\\r\") == string::npos ? this : nullptr;\n}\n\n/////////////////////////////////////////////////////////////////////\n\nostream& XMLCData::write (ostream &os) const {\n\tif (!_data.empty())\n\t\tos << \"<![CDATA[\" << _data << \"]]>\";\n\treturn os;\n}\n\n\nvoid XMLCData::append (string str) {\n\tif (_data.empty())\n\t\t_data = std::move(str);\n\telse\n\t\t_data += str;\n}\n"
  },
  {
    "path": "src/XMLNode.hpp",
    "content": "/*************************************************************************\n** XMLNode.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef XMLNODE_HPP\n#define XMLNODE_HPP\n\n#include <deque>\n#include <map>\n#include <memory>\n#include <ostream>\n#include <string>\n#include <vector>\n#include \"utility.hpp\"\n\nclass XMLCData;\nclass XMLComment;\nclass XMLElement;\nclass XMLText;\n\nclass XMLNode {\n\tfriend class XMLElement;\n\n\ttemplate <typename T>\n\tT* cast (const T* (XMLNode::*func)() const) {\n\t\treturn const_cast<T*>((const_cast<const XMLNode*>(this)->*func)());\n\t}\n\n\tpublic:\n\t\tXMLNode () =default;\n\t\tXMLNode (const XMLNode &node) : _next(nullptr) {}\n\t\tXMLNode (XMLNode &&node) noexcept : _parent(node._parent), _prev(node._prev), _next(std::move(node._next)) {}\n\t\tvirtual ~XMLNode () =default;\n\t\tvirtual std::unique_ptr<XMLNode> clone () const =0;\n\t\tvirtual void clear () =0;\n\t\tvirtual std::ostream& write (std::ostream &os) const =0;\n\t\tvirtual const XMLElement* toElement () const {return nullptr;}\n\t\tvirtual const XMLText* toText () const       {return nullptr;}\n\t\tvirtual const XMLText* toWSNode () const     {return nullptr;}\n\t\tvirtual const XMLComment* toComment () const {return nullptr;}\n\t\tvirtual const XMLCData* toCData () const     {return nullptr;}\n\t\tXMLElement* toElement ()  {return cast<XMLElement>(&XMLNode::toElement);}\n\t\tXMLText* toText ()        {return cast<XMLText>(&XMLNode::toText);}\n\t\tXMLComment* toComment ()  {return cast<XMLComment>(&XMLNode::toComment);}\n\t\tXMLCData* toCData ()      {return cast<XMLCData>(&XMLNode::toCData);}\n\t\tXMLNode* parent () const  {return _parent;}\n\t\tXMLNode* prev () const    {return _prev;}\n\t\tXMLNode* next () const    {return _next.get();}\n\t\tXMLElement* nextElement () const;\n\n\t\tstatic bool KEEP_ENCODED_FILES;\n\n\tprotected:\n\t\tXMLNode* insertNext (std::unique_ptr<XMLNode> node);\n\t\tstd::unique_ptr<XMLNode> removeNext ();\n\t\tvoid parent (XMLNode *p) {_parent = p;}\n\t\tvoid prev (XMLNode *p)   {_prev = p;}\n\n\tprivate:\n\t\tXMLNode *_parent=nullptr;  ///< pointer to parent node\n\t\tXMLNode *_prev=nullptr;    ///< pointer to preceding sibling\n\t\tstd::unique_ptr<XMLNode> _next;  ///< pointer to next sibling (incl. ownership)\n};\n\n\ntemplate <typename T>\nclass XMLNodeIteratorTempl {\n\tpublic:\n\t\tusing iterator_category = std::forward_iterator_tag;\n\t\tusing value_type = T*;\n\t\tusing difference_type = std::ptrdiff_t;\n\t\tusing pointer = T*;\n\t\tusing reference = T&;\n\n\t\tXMLNodeIteratorTempl () =default;\n\t\texplicit XMLNodeIteratorTempl (XMLNode *curr) : _curr(curr) {}\n\t\tXMLNodeIteratorTempl& operator ++ ()   {_curr = _curr->next(); return *this;}\n\t\tXMLNodeIteratorTempl& operator -- ()   {_curr = _curr->prev(); return *this;}\n\t\tXMLNodeIteratorTempl operator ++ (int) {auto p=_curr; _curr = _curr->next(); return XMLNodeIterator(p);}\n\t\tXMLNodeIteratorTempl operator -- (int) {auto p=_curr; _curr = _curr->prev(); return XMLNodeIterator(p);}\n\t\tT* operator * ()     {return _curr;}\n\t\tT& operator -> ()    {return *_curr;}\n\t\tbool operator == (const XMLNodeIteratorTempl &it) const {return _curr == it._curr;}\n\t\tbool operator != (const XMLNodeIteratorTempl &it) const {return _curr != it._curr;}\n\n\tprivate:\n\t\tT *_curr=nullptr;\n};\n\nusing XMLNodeIterator = XMLNodeIteratorTempl<XMLNode>;\nusing ConstXMLNodeIterator = XMLNodeIteratorTempl<const XMLNode>;\n\n\nclass XMLElement : public XMLNode {\n\tpublic:\n\t\tstruct Attribute {\n\t\t\tAttribute (std::string nam, std::string val) : name(std::move(nam)), value(std::move(val)) {}\n\t\t\tAttribute (std::pair<std::string, std::string> attr) : name(std::move(attr.first)), value(std::move(attr.second)) {}\n\t\t\tbool inheritable () const;\n\t\t\tstd::string name;\n\t\t\tstd::string value;\n\t\t};\n\t\tusing Attributes = std::vector<Attribute>;\n\t\tstatic bool WRITE_NEWLINES;  ///< insert line breaks after element tags?\n\n\tpublic:\n\t\texplicit XMLElement (std::string name);\n\t\tXMLElement (const XMLElement &node);\n\t\tXMLElement (XMLElement &&node) noexcept;\n\t\t~XMLElement () override;\n\t\tstd::unique_ptr<XMLNode> clone () const override {return util::make_unique<XMLElement>(*this);}\n\t\tvoid clear () override;\n\t\tvoid addAttribute (const std::string &name, const std::string &value);\n\t\tvoid addAttribute (const std::string &name, double value);\n\t\tvoid addAttributes (const std::map<std::string, std::string> &attribs);\n\t\tvoid removeAttribute (const std::string &name);\n\t\tXMLNode* append (std::unique_ptr<XMLNode> child);\n\t\tXMLNode* append (const std::string &str);\n\t\tXMLNode* prepend (std::unique_ptr<XMLNode> child);\n\t\tXMLNode* insertAfter (std::unique_ptr<XMLNode> child, XMLNode *sibling);\n\t\tXMLNode* insertBefore (std::unique_ptr<XMLNode> child, const XMLNode *sibling);\n\t\tbool hasAttribute (const std::string &name) const;\n\t\tconst char* getAttributeValue (const std::string &name) const;\n\t\tbool getDescendants (const char *name, const char *attrName, std::vector<XMLElement*> &descendants) const;\n\t\tXMLElement* getFirstDescendant (const char *name, const char *attrName, const char *attrValue) const;\n\t\tXMLNode* firstChild () const {return _firstChild.get();}\n\t\tXMLNode* lastChild () const {return _lastChild;}\n\t\tstd::ostream& write (std::ostream &os) const override;\n\t\tbool empty (bool ignoreWhitespace=false) const;\n\t\tAttributes& attributes () {return _attributes;}\n\t\tconst Attributes& attributes () const {return _attributes;}\n\t\tXMLNodeIterator begin () {return XMLNodeIterator(_firstChild.get());}\n\t\tXMLNodeIterator end () {return XMLNodeIterator(nullptr);}\n\t\tConstXMLNodeIterator begin () const {return ConstXMLNodeIterator(_firstChild.get());}\n\t\tConstXMLNodeIterator end () const {return ConstXMLNodeIterator(nullptr);}\n\t\tconst std::string& name () const {return _name;}\n\t\tconst XMLElement* toElement () const override {return this;}\n\t\tconst Attribute* getAttribute (const std::string &name) const;\n\n\t\tstatic std::unique_ptr<XMLNode> detach (XMLNode *node);\n\t\tstatic XMLElement* wrap (XMLNode *first, const XMLNode *last, const std::string &name);\n\t\tstatic XMLNode* unwrap (XMLElement *child);\n\n\tprotected:\n\t\tAttribute* getAttribute (const std::string &name);\n\t\tXMLNode* insertFirst (std::unique_ptr<XMLNode> child);\n\t\tXMLNode* insertLast (std::unique_ptr<XMLNode> child);\n\n\tprivate:\n\t\tstd::string _name;     // element name (<name a1=\"v1\" .. an=\"vn\">...</name>)\n\t\tstd::vector<Attribute> _attributes;\n\t\tstd::unique_ptr<XMLNode> _firstChild;  ///< pointer to first child node (incl. ownership)\n\t\tXMLNode *_lastChild=nullptr;  ///< pointer to last child node\n};\n\n\nclass XMLText : public XMLNode {\n\tpublic:\n\t\texplicit XMLText (std::string str) : _text(std::move(str)) {}\n\t\tstd::unique_ptr<XMLNode> clone () const override {return util::make_unique<XMLText>(*this);}\n\t\tvoid clear () override {_text.clear();}\n\t\tvoid append (std::unique_ptr<XMLNode> node);\n\t\tvoid append (const std::unique_ptr<XMLText> &node);\n\t\tvoid append (const std::string &str);\n\t\tvoid prepend (const std::unique_ptr<XMLNode> &node);\n\t\tstd::ostream& write (std::ostream &os) const override {return os << _text;}\n\t\tconst std::string& getText () const {return _text;}\n\t\tconst XMLText* toText () const override {return this;}\n\t\tconst XMLText* toWSNode () const override;\n\n\tprivate:\n\t\tstd::string _text;\n};\n\n\nclass XMLComment : public XMLNode {\n\tpublic:\n\t\texplicit XMLComment (std::string str) : _text(std::move(str)) {}\n\t\tstd::unique_ptr<XMLNode> clone () const override {return util::make_unique<XMLComment>(*this);}\n\t\tvoid clear () override {_text.clear();}\n\t\tstd::ostream& write (std::ostream &os) const override {return os << \"<!--\" << _text << \"-->\";}\n\t\tconst XMLComment* toComment () const override {return this;}\n\n\tprivate:\n\t\tstd::string _text;\n};\n\n\nclass XMLCData : public XMLNode {\n\tpublic:\n\t\tXMLCData () =default;\n\t\texplicit XMLCData (std::string data) : _data(std::move(data)) {}\n\t\tstd::unique_ptr<XMLNode> clone () const override {return util::make_unique<XMLCData>(*this);}\n\t\tvoid clear () override                {_data.clear();}\n\t\tvoid append (std::string str);\n\t\tstd::ostream& write (std::ostream &os) const override;\n\t\tconst XMLCData* toCData () const override {return this;}\n\n\tprivate:\n\t\tstd::string _data;\n};\n\n\ninline std::ostream& operator << (std::ostream &os, const XMLElement &node) {return node.write(os);}\ninline std::ostream& operator << (std::ostream &os, const XMLText &node) {return node.write(os);}\ninline std::ostream& operator << (std::ostream &os, const XMLComment &node) {return node.write(os);}\ninline std::ostream& operator << (std::ostream &os, const XMLCData &node) {return node.write(os);}\n\n#endif\n"
  },
  {
    "path": "src/XMLParser.cpp",
    "content": "/*************************************************************************\n** XMLParser.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"InputReader.hpp\"\n#include \"XMLParser.hpp\"\n\nusing namespace std;\n\nXMLElement* XMLParser::setRootElement (XMLElement *root) {\n\t_elementStack.clear();\n\tif (root)\n\t\t_elementStack.push_back(root);\n\telse {\n\t\t_root = util::make_unique<XMLElement>(\"root\");\n\t\t_elementStack.push_back(_root.get());\n\t}\n\treturn _elementStack.back();\n}\n\n\n/** Parses an XML fragment from an input stream. */\nvoid XMLParser::parse (istream &is) {\n\twhile (is) {\n\t\tstring buf;\n\t\tbuf.resize(1024);\n\t\tis.read(&buf[0], 1024);\n\t\tbuf.resize(is.gcount());\n\t\tparse(std::move(buf));\n\t}\n\tfinish();\n}\n\n\nstatic string::size_type find_end_of_tag (const string &str, string::size_type startpos) {\n\tchar attrval_delim = 0;\n\tbool expect_attrval = false;\n\tfor (auto i=startpos; i < str.length(); i++) {\n\t\tif (attrval_delim) {  // inside attribute value?\n\t\t\tif (str[i] == attrval_delim)  // end of attribute value?\n\t\t\t\tattrval_delim = 0;\n\t\t}\n\t\telse if (str[i] == '>')\n\t\t\treturn i;\n\t\telse if (str[i] == '\"' || str[i] == '\\'') { // start of attribute value?\n\t\t\tif (expect_attrval)\n\t\t\t\tattrval_delim = str[i];\n\t\t\telse {\n\t\t\t\tostringstream oss;\n\t\t\t\toss << \"misplaced \" << str[i] << \" inside tag\";\n\t\t\t\tthrow XMLParserException(oss.str());\n\t\t\t}\n\t\t}\n\t\telse if (str[i] == '=') {\n\t\t\texpect_attrval = true;\n\t\t\tcontinue;\n\t\t}\n\t\telse if (str[i] == '<')\n\t\t\tthrow XMLParserException(\"invalid '<' inside tag\");\n\t\texpect_attrval = false;\n\t}\n\treturn string::npos;\n}\n\n\n/** Parses a fragment of XML code, creates corresponding XML nodes and adds them\n *  to an SVG tree. The code may be split and processed by several calls of this\n *  function. Incomplete chunks that can't be processed yet are stored and picked\n *  up again together with the next incoming XML fragment. If a call of this function\n *  is supposed to finish the parsing of an XML subtree, parameter 'finish' must be set.\n *  @param[in] xml XML fragment to parse\n *  @param[in] finish if true, no more XML is expected and parsing is finished */\nvoid XMLParser::parse (string xml, bool finish) {\n\tif (_elementStack.empty())  // no root element set?\n\t\treturn;\n\t// collect/extract an XML fragment that only contains complete tags\n\t// incomplete tags are held back\n\tif (_xmlbuf.empty())\n\t\t_xmlbuf.assign(std::move(xml));\n\telse\n\t\t_xmlbuf.append(xml);\n\tstring::size_type left=0;\n\ttry {\n\t\twhile (left != string::npos) {\n\t\t\tauto right = _xmlbuf.find('<', left);\n\t\t\tif (left < right && left < _xmlbuf.length())  {// plain text found?\n\t\t\t\tstring text = (right == string::npos ? _xmlbuf.substr(left) : _xmlbuf.substr(left, right-left));\n\t\t\t\tappendNode(util::make_unique<XMLText>(std::move(text)));\n\t\t\t}\n\t\t\tif (right != string::npos) {\n\t\t\t\tleft = right;\n\t\t\t\tif (_xmlbuf.compare(left, 9, \"<![CDATA[\") == 0) {\n\t\t\t\t\tright = _xmlbuf.find(\"]]>\", left+9);\n\t\t\t\t\tif (right == string::npos) {\n\t\t\t\t\t\tif (finish) throw XMLParserException(\"expected ']]>' at end of CDATA block\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tappendNode(util::make_unique<XMLCData>(_xmlbuf.substr(left+9, right-left-9)));\n\t\t\t\t\tright += 2;\n\t\t\t\t}\n\t\t\t\telse if (_xmlbuf.compare(left, 4, \"<!--\") == 0) {\n\t\t\t\t\tright = _xmlbuf.find(\"-->\", left+4);\n\t\t\t\t\tif (right == string::npos) {\n\t\t\t\t\t\tif (finish) throw XMLParserException(\"expected '-->' at end of comment\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tappendNode(util::make_unique<XMLComment>(_xmlbuf.substr(left+4, right-left-4)));\n\t\t\t\t\tright += 2;\n\t\t\t\t}\n\t\t\t\telse if (_xmlbuf.compare(left, 2, \"<?\") == 0) {\n\t\t\t\t\tright = _xmlbuf.find(\"?>\", left+2);\n\t\t\t\t\tif (right == string::npos) {\n\t\t\t\t\t\tif (finish) throw XMLParserException(\"expected '?>' at end of processing instruction\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tappendNode(util::make_unique<XMLText>(_xmlbuf.substr(left, right-left+2)));\n\t\t\t\t\tright++;\n\t\t\t\t}\n\t\t\t\telse if (_xmlbuf.compare(left, 2, \"</\") == 0) {\n\t\t\t\t\tright = _xmlbuf.find('>', left+2);\n\t\t\t\t\tif (right == string::npos) {\n\t\t\t\t\t\tif (finish) throw XMLParserException(\"missing '>' at end of closing XML tag\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcloseElement(_xmlbuf.substr(left+2, right-left-2));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tright = find_end_of_tag(_xmlbuf, left+1);\n\t\t\t\t\tif (right == string::npos) {\n\t\t\t\t\t\tif (finish)\tthrow XMLParserException(\"missing '>' or '/>' at end of opening XML tag\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\topenElement(_xmlbuf.substr(left+1, right-left-1));\n\t\t\t\t}\n\t\t\t}\n\t\t\tleft = right;\n\t\t\tif (right != string::npos)\n\t\t\t\tleft++;\n\t\t}\n\t}\n\tcatch (const XMLParserException &e) {\n\t\t_error = true;\n\t\tthrow;\n\t}\n\tif (left == string::npos)\n\t\t_xmlbuf.clear();\n\telse\n\t\t_xmlbuf.erase(0, left);\n}\n\n\nvoid XMLParser::appendNode (unique_ptr<XMLNode> node) {\n\tcontext()->append(std::move(node));\n}\n\n\nXMLElement* XMLParser::finishPushContext (unique_ptr<XMLElement> elem) {\n\tXMLElement *elemPtr = elem.get();\n\tcontext()->append(std::move(elem));\n\treturn elemPtr;\n}\n\n\n/** Processes an opening element tag.\n *  @param[in] tag tag without leading and trailing angle brackets */\nXMLElement* XMLParser::openElement (const string &tag) {\n\tStringInputBuffer ib(tag);\n\tBufferInputReader ir(ib);\n\tstring name = ir.getString(\"/ \\t\\n\\r\");\n\tir.skipSpace();\n\tunique_ptr<XMLElement> elemNode{createElementPtr(name)};\n\telemNode->addAttributes(ir.parseAttributes(true, \"\\\"'\"));\n\tir.skipSpace();\n\tXMLElement *elemPtr = elemNode.get();\n\tif (ir.peek() == '/')       // end of empty element tag\n\t\tappendNode(std::move(elemNode));\n\telse if (ir.peek() < 0)   // end of opening tag\n\t\t_elementStack.push_back(finishPushContext(std::move(elemNode)));\n\telse\n\t\tthrow XMLParserException(\"'>' or '/>' expected at end of opening tag <\"+name);\n\tif (_notifyElementOpened)\n\t\t_notifyElementOpened(elemPtr);\n\tif (ir.peek() == '/' && _notifyElementClosed)\n\t\t_notifyElementClosed(elemPtr);\n\treturn elemPtr;\n}\n\n\n/** Processes a closing element tag.\n *  @param[in] tag tag without leading and trailing angle brackets */\nvoid XMLParser::closeElement (const string &tag) {\n\tStringInputBuffer ib(tag);\n\tBufferInputReader ir(ib);\n\tstring name = ir.getString(\" \\t\\n\\r\");\n\tir.skipSpace();\n\tif (ir.peek() >= 0)\n\t\tthrow XMLParserException(\"'>' expected at end of closing tag </\"+name);\n\tif (_elementStack.size() <= 1)\n\t\tthrow XMLParserException(\"spurious closing tag </\" + name + \">\");\n\tif (_elementStack.back()->name() != name)\n\t\tthrow XMLParserException(\"expected </\" + _elementStack.back()->name() + \"> but found </\" + name + \">\");\n\tfinishPopContext();\n\tif (_notifyElementClosed)\n\t\t_notifyElementClosed(_elementStack.back());\n\t_elementStack.pop_back();\n}\n\n\n/** Processes any remaining XML fragments, checks for missing closing tags,\n *  and resets the parser state. */\nvoid XMLParser::finish () {\n\tif (!_xmlbuf.empty()) {\n\t\tif (!_error)\n\t\t\tparse(\"\", true);\n\t\t_xmlbuf.clear();\n\t}\n\tstring tags;\n\twhile (_elementStack.size() > 1) {\n\t\ttags += \"</\" + _elementStack.back()->name() + \">, \";\n\t\t_elementStack.pop_back();\n\t}\n\tif (!tags.empty() && !_error) {\n\t\ttags.resize(tags.length()-2);  // drop trailing \", \"\n\t\tthrow XMLParserException(\"missing closing tag(s): \" + tags);\n\t}\n}\n\n\nXMLElement* XMLParser::createElementPtr (std::string name) const {\n\treturn new XMLElement(std::move(name));\n}\n\n\nvoid XMLParser::setNotifyFuncs (NotifyFunc notifyElementOpened, NotifyFunc notifyElementClosed) {\n\t_notifyElementOpened = std::move(notifyElementOpened);\n\t_notifyElementClosed = std::move(notifyElementClosed);\n}\n"
  },
  {
    "path": "src/XMLParser.hpp",
    "content": "/*************************************************************************\n** XMLParser.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef XMLPARSER_HPP\n#define XMLPARSER_HPP\n\n#include <functional>\n#include <string>\n#include \"MessageException.hpp\"\n#include \"XMLNode.hpp\"\n\nstruct XMLParserException : MessageException {\n\texplicit XMLParserException (const std::string &msg) : MessageException(msg) {}\n};\n\nclass XMLParser {\n\tusing ElementStack = std::vector<XMLElement*>;\n\tusing NotifyFunc = std::function<void(XMLElement*)>;\n\n\tpublic:\n\t\tXMLParser () =default;\n\t\tvirtual ~XMLParser() {}\n\t\texplicit XMLParser (XMLElement *root) {setRootElement(root);}\n\t\tXMLElement* setRootElement (XMLElement *root);\n\t\tvoid parse (std::istream &is);\n\t\tvoid parse (std::string xml, bool finish=false);\n\t\tvoid finish ();\n\t\tvoid setNotifyFuncs (NotifyFunc notifyElementOpened, NotifyFunc notifyElementClosed);\n\n\tprotected:\n\t\tXMLElement* context () {return _elementStack.back();}\n\t\tvirtual void appendNode (std::unique_ptr<XMLNode> node);\n\t\tvirtual XMLElement* finishPushContext (std::unique_ptr<XMLElement> elem);\n\t\tvirtual void finishPopContext () {}\n\t\tvirtual XMLElement* openElement (const std::string &tag);\n\t\tvirtual void closeElement (const std::string &tag);\n\t\tvirtual XMLElement* createElementPtr (std::string name) const;\n\n\tprivate:\n\t\tstd::string _xmlbuf;\n\t\tstd::unique_ptr<XMLElement> _root;  ///< element holding the parsed nodes\n\t\tElementStack _elementStack;         ///< elements not yet closed\n\t\tbool _error=false;\n\t\tstd::function<void(XMLElement*)> _notifyElementOpened;\n\t\tstd::function<void(XMLElement*)> _notifyElementClosed;\n};\n\n#endif\n"
  },
  {
    "path": "src/XMLString.cpp",
    "content": "/*************************************************************************\n** XMLString.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include <cstdlib>\n#include \"Unicode.hpp\"\n#include \"utility.hpp\"\n#include \"XMLString.hpp\"\n\nusing namespace std;\n\nint XMLString::DECIMAL_PLACES = 0;\n\n\nstatic string translate (uint32_t c) {\n\tswitch (c) {\n\t\tcase '<' : return \"&lt;\";\n\t\tcase '&' : return \"&amp;\";\n\t\tcase '\"' : return \"&quot;\";\n\t\tcase '\\'': return \"&apos;\";\n\t}\n\treturn Unicode::utf8(c);\n}\n\n\nXMLString::XMLString (const string &str, bool plain) {\n\tif (plain)\n\t\tassign(str);\n\telse {\n\t\tfor (char c : str)\n\t\t\tappend(translate(c));\n\t}\n}\n\n\nXMLString::XMLString (const char *str, bool plain) {\n\tif (str) {\n\t\tif (plain)\n\t\t\tassign(str);\n\t\telse {\n\t\t\twhile (*str)\n\t\t\t\tappend(translate(*str++));\n\t\t}\n\t}\n}\n\n\nXMLString::XMLString (int n, bool cast)\n\t: std::string(cast ? to_string(n) : translate(n))\n{\n}\n\n\n/** Rounds a floating point value to a given number of decimal places.\n *  @param[in] x number to round\n *  @param[in] n number of decimal places (must be between 1 and 6)\n *  @return rounded value */\nstatic inline double round (double x, int n) {\n\tconstexpr long pow10[] = {10L, 100L, 1000L, 10000L, 100000L, 1000000L};\n\tconstexpr double eps = 1e-7;\n\tn--;\n\tif (x >= 0)\n\t\treturn floor(x*pow10[n]+0.5+eps)/pow10[n];\n\treturn ceil(x*pow10[n]-0.5-eps)/pow10[n];\n}\n\n\nXMLString::XMLString (double x) {\n\tif (DECIMAL_PLACES > 0) {\n\t\t// don't use fixed and setprecision() manipulators here to avoid\n\t\t// banker's rounding applied in some STL implementations\n\t\tx = round(x, DECIMAL_PLACES);\n\t}\n\tif (std::abs(x) < 1e-6)\n\t\tx = 0;\n\tassign(util::to_string(x));\n\tauto pos = find(\"0.\");\n\tif (pos != string::npos && (pos == 0 || at(pos-1) == '-'))\n\t\terase(pos, 1);\n}\n"
  },
  {
    "path": "src/XMLString.hpp",
    "content": "/*************************************************************************\n** XMLString.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef XMLSTRING_HPP\n#define XMLSTRING_HPP\n\n#include <string>\n\n\nclass XMLString : public std::string {\n\tpublic:\n\t\tXMLString () : std::string() {}\n\t\texplicit XMLString (const char *str, bool plain=false);\n\t\texplicit XMLString (const std::string &str, bool plain=false);\n\t\texplicit XMLString (int n, bool cast=true);\n\t\texplicit XMLString (double x);\n\n\t\tstatic int DECIMAL_PLACES;  ///< number of decimal places applied to floating point values (0-6)\n};\n\n\n#endif\n"
  },
  {
    "path": "src/XXHashFunction.hpp",
    "content": "/*************************************************************************\n** XXHashFunction.hpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef XXHASHFUNCTION_HPP\n#define XXHASHFUNCTION_HPP\n\n#include <xxhash.h>\n#include \"HashFunction.hpp\"\n#include \"utility.hpp\"\n\n#if (XXH_VERSION_NUMBER >= 701) && defined(XXH3_SECRET_SIZE_MIN)\n#define ENABLE_XXH128\n#endif\n\ntemplate <int HASH_SIZE>\nstruct XXHInterface {\n};\n\ntemplate<>\nstruct XXHInterface<4> {\n\tusing State = XXH32_state_t;\n\tusing Digest = XXH32_hash_t;\n\tstatic constexpr auto createState = &XXH32_createState;\n\tstatic constexpr auto freeState = &XXH32_freeState;\n\tstatic constexpr auto reset = &XXH32_reset;\n\tstatic constexpr auto update = &XXH32_update;\n\tstatic constexpr auto digest = &XXH32_digest;\n};\n\ntemplate<>\nstruct XXHInterface<8> {\n\tusing State = XXH64_state_t;\n\tusing Digest = XXH64_hash_t;\n\tstatic constexpr auto createState = &XXH64_createState;\n\tstatic constexpr auto freeState = &XXH64_freeState;\n\tstatic constexpr auto reset = &XXH64_reset;\n\tstatic constexpr auto update = &XXH64_update;\n\tstatic constexpr auto digest = &XXH64_digest;\n};\n\n#ifdef ENABLE_XXH128\ntemplate<>\nstruct XXHInterface<16> {\n\tusing State = XXH3_state_t;\n\tusing Digest = XXH128_hash_t;\n\tstatic constexpr auto createState = &XXH3_createState;\n\tstatic constexpr auto freeState = &XXH3_freeState;\n\tstatic constexpr auto reset = &XXH3_128bits_reset_withSeed;\n\tstatic constexpr auto update = &XXH3_128bits_update;\n\tstatic constexpr auto digest = &XXH3_128bits_digest;\n};\n#endif\n\n/** Implements the HashFunction class for the xxHash algorithms. */\ntemplate <int HASH_BYTES>\nclass XXHashFunction : public HashFunction {\n\tusing Interface = XXHInterface<HASH_BYTES>;\n\tpublic:\n\t\tXXHashFunction () : _state(Interface::createState()) {Interface::reset(_state, 0);}\n\t\tXXHashFunction (const char *data, size_t length) : XXHashFunction() {update(data, length);}\n\t\texplicit XXHashFunction(const std::string &data) : XXHashFunction() {update(data);}\n\t\texplicit XXHashFunction(const std::vector<uint8_t> &data) : XXHashFunction() {update(data);}\n\t\t~XXHashFunction () override {Interface::freeState(_state);}\n\t\tint digestSize () const override {return HASH_BYTES;}\n\t\tvoid reset () override {Interface::reset(_state, 0);}\n\t\tvoid update (const char *data, size_t length) override {Interface::update(_state, data, length);}\n\t\tvoid update (const std::string &data) override {update(data.data(), data.length());}\n\t\tvoid update (const std::vector<uint8_t> &data) override {update(reinterpret_cast<const char*>(data.data()), data.size());}\n\n\t\tusing HashFunction::update;  // unhide update(istream &is) defined in base class\n\n\t\tstd::vector<uint8_t> digestBytes () const override {\n\t\t\treturn util::bytes(Interface::digest(_state), HASH_BYTES);\n\t\t}\n\n\t\ttypename Interface::Digest digestValue () const {return Interface::digest(_state);}\n\t\tstatic unsigned version () {return XXH_versionNumber();}\n\n\tprivate:\n\t\ttypename Interface::State *_state;\n};\n\nusing XXH32HashFunction = XXHashFunction<4>;\nusing XXH64HashFunction = XXHashFunction<8>;\n\n#ifdef ENABLE_XXH128\nusing XXH128HashFunction = XXHashFunction<16>;\n\ntemplate<>\ninline std::vector<uint8_t> XXHashFunction<16>::digestBytes () const {\n\tstd::vector<uint8_t> hash;\n\tauto digest = Interface::digest(_state);\n\tfor (auto chunk : {digest.high64, digest.low64}) {\n\t\tauto bytes = util::bytes(chunk);\n\t\thash.insert(hash.end(), bytes.begin(), bytes.end());\n\t}\n\treturn hash;\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "src/ZLibOutputStream.hpp",
    "content": "/*************************************************************************\n** ZLibOutputStream.hpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef ZLIBOUTPUTSTREAM_HPP\n#define ZLIBOUTPUTSTREAM_HPP\n\n#include <fstream>\n#include <ostream>\n#include <vector>\n#include <zlib.h>\n#include \"MessageException.hpp\"\n\n#ifdef _WIN32\n#  include <fcntl.h>\n#  include <io.h>\n#endif\n\nstruct ZLibException : MessageException {\n\texplicit ZLibException (const std::string &msg) : MessageException(msg) {}\n};\n\nenum ZLibCompressionFormat {ZLIB_DEFLATE=0, ZLIB_GZIP=16};\n\nclass ZLibOutputBuffer : public std::streambuf {\n\tpublic:\n\t\tZLibOutputBuffer () =default;\n\n\t\tZLibOutputBuffer (std::streambuf *sbuf, ZLibCompressionFormat format, int zipLevel) {\n\t\t\topen(sbuf, format, zipLevel);\n\t\t}\n\n\t\t~ZLibOutputBuffer () override {\n\t\t\tclose();\n\t\t}\n\n\t\t/** Opens the buffer for writing.\n\t\t *  @param[in] sink stream buffer taking the compressed data\n\t\t *  @param[in] format compression format (deflate or gzip)\n\t\t *  @param[in] zipLevel compression level (1-9)\n\t\t *  @return true if buffer is ready for writing */\n\t\tbool open (std::streambuf *sink, ZLibCompressionFormat format, int zipLevel) {\n\t\t\tif (sink) {\n\t\t\t\t_inbuf.reserve(4096);\n\t\t\t\t_zbuf.resize(4096);\n\t\t\t\t_zstream.zalloc = Z_NULL;\n\t\t\t\t_zstream.zfree = Z_NULL;\n\t\t\t\t_zstream.opaque = Z_NULL;\n\t\t\t\tzipLevel = std::max(1, std::min(9, zipLevel));\n\t\t\t\tif (deflateInit2(&_zstream, zipLevel, Z_DEFLATED, 15+format, 8, Z_DEFAULT_STRATEGY) != Z_OK)\n\t\t\t\t\tthrow ZLibException(\"failed to initialize deflate compression\");\n\t\t\t\t_sink = sink;\n\t\t\t\t_opened = true;\n\t\t\t}\n\t\t\treturn _opened;\n\t\t}\n\n\t\t/** Flushes the remaining data, finishes the compression process, and\n\t\t *  closes the buffer so that further output doesn't reach the sink. */\n\t\tvoid close () {\n\t\t\tclose(true);\n\t\t}\n\n\t\tint_type overflow (int_type c) override {\n\t\t\tif (c == traits_type::eof()) {\n\t\t\t\tclose();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (_inbuf.size() == _inbuf.capacity())\n\t\t\t\t\tflush(Z_NO_FLUSH);\n\t\t\t\t_inbuf.push_back(static_cast<unsigned char>(c));\n\t\t\t}\n\t\t\treturn c;\n\t\t}\n\n\t\tint sync () override {\n\t\t\tflush(Z_NO_FLUSH);\n\t\t\treturn 0;\n\t\t}\n\n\tprotected:\n\t\t/** Compresses the chunk of data present in the input buffer\n\t\t *  and writes it to the assigned output stream.\n\t\t *  @param[in] flushmode flush mode of deflate function (Z_NO_FLUSH or Z_FINISH)\n\t\t *  @throws ZLibException if compression failed */\n\t\tvoid flush (int flushmode) {\n\t\t\tif (_opened) {\n\t\t\t\t_zstream.avail_in = static_cast<uInt>(_inbuf.size());\n\t\t\t\t_zstream.next_in = _inbuf.data();\n\t\t\t\tdo {\n\t\t\t\t\t_zstream.avail_out = static_cast<uInt>(_zbuf.size());\n\t\t\t\t\t_zstream.next_out = _zbuf.data();\n\t\t\t\t\tint ret = deflate(&_zstream, flushmode);\n\t\t\t\t\tif (ret == Z_STREAM_ERROR) {\n\t\t\t\t\t\tclose(false);\n\t\t\t\t\t\tthrow ZLibException(\"stream error during data compression\");\n\t\t\t\t\t}\n\t\t\t\t\tauto have = _zbuf.size()-_zstream.avail_out;\n\t\t\t\t\t_sink->sputn(reinterpret_cast<char*>(_zbuf.data()), have);\n\t\t\t\t} while (_zstream.avail_out == 0);\n\t\t\t}\n\t\t\t_inbuf.clear();\n\t\t}\n\n\t\t/** Closes the buffer so that further output doesn't reach the sink.\n\t\t *  @param[in] finish if true, flushes the remaining data and finishes the compression process */\n\t\tvoid close (bool finish) {\n\t\t\tif (_opened) {\n\t\t\t\tif (finish)\n\t\t\t\t\tflush(Z_FINISH);\n\t\t\t\tdeflateEnd(&_zstream);\n\t\t\t\t_sink = nullptr;\n\t\t\t\t_opened = false;\n\t\t\t}\n\t\t}\n\n\tprivate:\n\t\tz_stream _zstream;\n\t\tstd::streambuf *_sink = nullptr;  ///< target buffer where the compressded data is flushed to\n\t\tstd::vector<Bytef> _inbuf;  ///< buffer holding a chunk of data to be compressed\n\t\tstd::vector<Bytef> _zbuf;   ///< buffer holding a chunk of compressed data\n\t\tbool _opened = false;       ///< true if ready to process the incoming data correctly\n};\n\n\nclass ZLibOutputStream : private ZLibOutputBuffer, public std::ostream {\n\tpublic:\n\t\tZLibOutputStream () : std::ostream(this) {}\n\n\t\tZLibOutputStream (std::ostream &os, ZLibCompressionFormat format, int zipLevel)\n\t\t\t: ZLibOutputBuffer(os.rdbuf(), format, zipLevel), std::ostream(this) {}\n\n\t\t~ZLibOutputStream () override {close();}\n\n\t\tbool open (std::ostream &os, ZLibCompressionFormat format, int zipLevel) {\n\t\t\tZLibOutputBuffer::close();\n\t\t\treturn ZLibOutputBuffer::open(os.rdbuf(), format, zipLevel);\n\t\t}\n\n\t\tvoid close () {\n\t\t\tZLibOutputBuffer::close();\n\t\t}\n};\n\n\nclass ZLibOutputFileStream : public ZLibOutputStream {\n\tpublic:\n\t\tZLibOutputFileStream (const std::string &fname, ZLibCompressionFormat format, int zipLevel)\n\t\t\t: _ofs(fname, std::ios::binary)\n\t\t{\n\t\t\tif (_ofs) {\n\t\t\t\tif (_ofs.rdbuf())\n\t\t\t\t\topen(_ofs, format, zipLevel);\n\t\t\t\telse\n\t\t\t\t\t_ofs.close();\n\t\t\t}\n\t\t}\n\n\t\t~ZLibOutputFileStream () override {close();}\n\n\tprivate:\n\t\tstd::ofstream _ofs;\n};\n\n#endif\n"
  },
  {
    "path": "src/algorithm.hpp",
    "content": "/*************************************************************************\n** algorithm.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <algorithm>\n#include <iterator>\n#include <numeric>\n\nnamespace algo {\n\ntemplate <class Container, class T, class BinaryOp>\nT accumulate (const Container &c, T init, BinaryOp op) {\n\treturn std::accumulate(std::begin(c), std::end(c), std::move(init), op);\n}\n\ntemplate <class Container, class UnaryOp>\nbool any_of (const Container &c, UnaryOp op) {\n\treturn std::any_of(std::begin(c), std::end(c), op);\n}\n\ntemplate <class Container, class UnaryOp>\nbool all_of (const Container &c, UnaryOp op) {\n\treturn std::all_of(std::begin(c), std::end(c), op);\n}\n\ntemplate <class Container, class UnaryOp>\nbool none_of (const Container &c, UnaryOp op) {\n\treturn std::none_of(std::begin(c), std::end(c), op);\n}\n\ntemplate <class Container, class T, class Compare>\nbool binary_search (const Container &c, T val, Compare cmp) {\n\treturn std::binary_search(std::begin(c), std::end(c), std::move(val), cmp);\n}\n\ntemplate <class Container, class OutputIt>\nOutputIt copy (const Container &c, OutputIt out) {\n\treturn std::copy(std::begin(c), std::end(c), out);\n}\n\ntemplate <class Container, class OutputIt, class UnaryOp>\nOutputIt copy_if (const Container &c, OutputIt out, UnaryOp op) {\n\treturn std::copy_if(std::begin(c), std::end(c), out, op);\n}\n\ntemplate <class Container, class UnaryOp>\nsize_t count_if (const Container &c, UnaryOp op) {\n\treturn std::count_if(std::begin(c), std::end(c), op);\n}\n\ntemplate <class Container, class UnaryOp>\nauto erase_if (Container &c, UnaryOp op) -> decltype(std::begin(std::declval<Container&>()))\n{\n\treturn c.erase(std::remove_if(std::begin(c), std::end(c), op), std::end(c));\n}\n\ntemplate <class Container, class T>\nauto find (Container &c, const T &val) -> decltype(std::begin(std::declval<Container&>()))\n{\n\treturn std::find(std::begin(c), std::end(c), val);\n}\n\ntemplate <class Container, class UnaryOp>\nauto find_if (Container &c, UnaryOp op) -> decltype(std::begin(std::declval<Container&>()))\n{\n\treturn std::find_if(std::begin(c), std::end(c), op);\n}\n\ntemplate <class Container, class Generator>\nvoid generate (Container &c, Generator generator) {\n\tstd::generate(std::begin(c), std::end(c), generator);\n}\n\ntemplate <class Container, class T>\nauto lower_bound (Container &c, const T &val) -> decltype(std::begin(std::declval<Container&>()))\n{\n\treturn std::lower_bound(std::begin(c), std::end(c), val);\n}\n\ntemplate <class Container, class T, class Compare>\nauto lower_bound (Container &c, const T &val, Compare cmp) -> decltype(std::begin(std::declval<Container&>()))\n{\n\treturn std::lower_bound(std::begin(c), std::end(c), val, cmp);\n}\n\ntemplate <class Container>\nauto max_element (Container &c) -> decltype(std::begin(std::declval<Container&>()))\n{\n\treturn std::max_element(std::begin(c), std::end(c));\n}\n\ntemplate <class Container, class Compare>\nvoid sort (Container &c, Compare cmp) {\n\treturn std::sort(std::begin(c), std::end(c), cmp);\n}\n\ntemplate <class Container, class OutputIt, class UnaryOp>\nOutputIt transform (const Container &c, OutputIt out, UnaryOp op) {\n\treturn std::transform(std::begin(c), std::end(c), out, op);\n}\n\n} // namespace algo\n"
  },
  {
    "path": "src/dvisvgm.cpp",
    "content": "/*************************************************************************\n** dvisvgm.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <config.h>\n#include <clipper.hpp>\n#include <fstream>\n#include <iostream>\n#include <numeric>\n#include <potracelib.h>\n#include <sstream>\n#include <vector>\n#include <zlib.h>\n#include \"algorithm.hpp\"\n#include \"CommandLine.hpp\"\n#include \"DVIToSVG.hpp\"\n#include \"DVIToSVGActions.hpp\"\n#include \"EPSToSVG.hpp\"\n#include \"FileFinder.hpp\"\n#include \"FileSystem.hpp\"\n#include \"Font.hpp\"\n#include \"FontEngine.hpp\"\n#include \"Ghostscript.hpp\"\n#include \"HashFunction.hpp\"\n#include \"HyperlinkManager.hpp\"\n#include \"Message.hpp\"\n#include \"PageSize.hpp\"\n#include \"PDFHandler.hpp\"\n#include \"PDFToSVG.hpp\"\n#include \"PSInterpreter.hpp\"\n#include \"PsSpecialHandler.hpp\"\n#include \"SignalHandler.hpp\"\n#include \"SourceInput.hpp\"\n#include \"optimizer/SVGOptimizer.hpp\"\n#include \"SVGOutput.hpp\"\n#include \"System.hpp\"\n#include \"ttf/TTFWriter.hpp\"\n#include \"XMLParser.hpp\"\n#include \"XXHashFunction.hpp\"\n#include \"utility.hpp\"\n#include \"version.hpp\"\n\n#ifndef DISABLE_WOFF\n#include <brotli/encode.h>\n//#include <woff2/version.h>\n#include \"ttf/TTFAutohint.hpp\"\n#endif\n\nusing namespace std;\n\n////////////////////////////////////////////////////////////////////////////////\n\nstatic string remove_path (string fname) {\n\tfname = FileSystem::ensureForwardSlashes(fname);\n\tauto slashpos = fname.rfind('/');\n\tif (slashpos == string::npos)\n\t\treturn fname;\n\treturn fname.substr(slashpos+1);\n}\n\n\nstatic string ensure_suffix (string fname, const string &suffix) {\n\tif (!fname.empty()) {\n\t\tauto dotpos = remove_path(fname).rfind('.');\n\t\tif (dotpos == string::npos)\n\t\t\tfname += \".\" + suffix;\n\t}\n\treturn fname;\n}\n\n\nstatic string get_transformation_string (const CommandLine &args) {\n\tostringstream oss;\n\tif (args.rotateOpt.given())\n\t\toss << 'R' << args.rotateOpt.value() << \",w/2,h/2\";\n\tif (args.translateOpt.given())\n\t\toss << 'T' << args.translateOpt.value();\n\tif (args.scaleOpt.given())\n\t\toss << 'S' << args.scaleOpt.value();\n\tif (args.transformOpt.given())\n\t\toss << args.transformOpt.value();\n\treturn oss.str();\n}\n\n\nstatic void set_libgs (CommandLine &args) {\n#if !defined(DISABLE_GS) && !defined(HAVE_LIBGS)\n\tif (args.libgsOpt.given())\n\t\tGhostscript::LIBGS_NAME = args.libgsOpt.value();\n\telse if (getenv(\"LIBGS\"))\n\t\tGhostscript::LIBGS_NAME = getenv(\"LIBGS\");\n#endif\n}\n\n\nstatic bool set_cache_dir (const CommandLine &args) {\n\tif (args.cacheOpt.given() && !args.cacheOpt.value().empty()) {\n\t\tif (args.cacheOpt.value() == \"none\")\n\t\t\tPhysicalFont::CACHE_PATH.clear();\n\t\telse if (FileSystem::exists(args.cacheOpt.value()))\n\t\t\tPhysicalFont::CACHE_PATH = args.cacheOpt.value();\n\t\telse\n\t\t\tMessage::wstream(true) << \"cache directory '\" << args.cacheOpt.value() << \"' does not exist (caching disabled)\\n\";\n\t}\n\telse {\n\t\tstring &cachepath = PhysicalFont::CACHE_PATH;\n\t\tconst char *cachehome = getenv(\"XDG_CACHE_HOME\");\n\t\tif (!cachehome || util::trim(cachehome).empty()) {\n#ifdef _WIN32\n\t\t\tcachehome = \"~\\\\.cache\";\n#else\n\t\t\tcachehome = \"~/.cache\";\n#endif\n\t\t}\n\t\tcachepath = util::trim(cachehome) + FileSystem::PATHSEP + \"dvisvgm\";\n\t\tif (cachepath[0] == '~' && cachepath[1] == FileSystem::PATHSEP) {\n\t\t\tif (FileSystem::userdir())\n\t\t\t\tcachepath.replace(0, 1, FileSystem::userdir());\n\t\t\telse\n\t\t\t\tcachepath.erase(0, 2);  // strip leading \"~/\"\n\t\t}\n\t\tif (!FileSystem::exists(cachepath))\n\t\t\tFileSystem::mkdir(cachepath);\n\t}\n\tif (args.cacheOpt.given() && args.cacheOpt.value().empty()) {\n\t\tcout << \"cache directory: \" << (PhysicalFont::CACHE_PATH.empty() ? \"(none)\" : PhysicalFont::CACHE_PATH) << '\\n';\n\t\ttry {\n\t\t\tif (!PhysicalFont::CACHE_PATH.empty())\n\t\t\t\tFontCache::fontinfo(PhysicalFont::CACHE_PATH, cout, true);\n\t\t}\n\t\tcatch (StreamReaderException &) {\n\t\t\tMessage::wstream(true) << \"failed reading cache data\\n\";\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n\nstatic bool set_temp_dir (const CommandLine &args) {\n\tif (args.tmpdirOpt.given()) {\n\t\tif (!args.tmpdirOpt.value().empty())\n\t\t\tFileSystem::TMPDIR = args.tmpdirOpt.value();\n\t\telse {\n\t\t\tcout << \"temporary folder: \" << FileSystem::ensureSystemSlashes(FileSystem::tmpdir(true)) << '\\n';\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n\nstatic void check_bbox (const string &bboxstr) {\n\tfor (const char *fmt : {\"none\", \"min\", \"preview\", \"papersize\", \"dvi\"})\n\t\tif (bboxstr == fmt)\n\t\t\treturn;\n\tif (isalpha(bboxstr[0])) {\n\t\ttry {\n\t\t\tPageSize size(bboxstr);\n\t\t}\n\t\tcatch (const PageSizeException &) {\n\t\t\tthrow MessageException(\"invalid bounding box format '\" + bboxstr + \"'\");\n\t\t}\n\t}\n\telse {\n\t\t// check if given bbox argument is valid, i.e. doesn't throw an exception\n\t\tBoundingBox bbox;\n\t\tbbox.set(bboxstr);\n\t}\n}\n\n\n// Helper class to generate a list of version information of the used libraries.\nclass VersionInfo {\n\tpublic:\n\t\tvoid add (const string &name, const string &version, bool ignoreEmpty=false) {\n\t\t\tif (!version.empty() || !ignoreEmpty)\n\t\t\t\tappend(name, util::trim(version));\n\t\t}\n\n\t\tvoid add (const string &name, const char *version, bool ignoreEmpty=false) {\n\t\t\tif (version && *version)\n\t\t\t\tappend(name, util::trim(version));\n\t\t\telse if (!ignoreEmpty)\n\t\t\t\tappend(name, \"\");\n\t\t}\n\n\t\tvoid add (const string &name, const vector<int> &versionComponents) {\n\t\t\tstring version = algo::accumulate(versionComponents, string(), [](const string &ver, int comp) {\n\t\t\t\treturn ver + to_string(comp) + \".\";\n\t\t\t});\n\t\t\tversion.pop_back();\n\t\t\tappend(name, version);\n\t\t}\n\n\t\t/** Adds a version number given as a single unsigned integer, and optionally\n\t\t *  extracts its components, e.g. 0x00010203 => \"1.2.3\" (3 components separated\n\t\t *  by multiples of 256).\n\t\t *  @param[in] name library name\n\t\t *  @param[in] version version number\n\t\t *  @param[in] compcount number of components the version consists of\n\t\t *  @param[in] factor factor used to separate the components */\n\t\tvoid add (const string &name, uint32_t version, int compcount=1, uint32_t factor=0xffffffff) {\n\t\t\tstring str;\n\t\t\twhile (compcount-- > 0) {\n\t\t\t\tif (!str.empty())\n\t\t\t\t\tstr.insert(0, \".\");\n\t\t\t\tstr.insert(0, to_string(version % factor));\n\t\t\t\tversion /= factor;\n\t\t\t}\n\t\t\tappend(name, str);\n\t\t}\n\n\t\t/** Writes the version information to the given output stream. */\n\t\tvoid write (ostream &os) {\n\t\t\tusing Entry = pair<string,string>;\n\t\t\talgo::sort(_versionPairs, [](const Entry &e1, const Entry &e2) {\n\t\t\t\treturn util::tolower(e1.first) < util::tolower(e2.first);\n\t\t\t});\n\t\t\tsize_t maxNameLength = algo::accumulate(_versionPairs, 0, [](size_t len, const Entry &e) {\n\t\t\t\treturn max(len, e.first.length());\n\t\t\t});\n\t\t\tfor (const Entry &versionPair : _versionPairs) {\n\t\t\t\tstring name = versionPair.first+\":\";\n\t\t\t\tos << left << setw(maxNameLength+2) << name;\n\t\t\t\tos << (versionPair.second.empty() ? \"unknown\" : versionPair.second) << '\\n';\n\t\t\t}\n\t\t}\n\n\tprotected:\n\t\tvoid append (const string &name, const string &version) {\n\t\t\t_versionPairs.emplace_back(name, version);\n\t\t}\n\n\tprivate:\n\t\tvector<pair<string,string>> _versionPairs;\n};\n\n\nstatic void print_version (bool extended) {\n\tstring versionstr = string(PROGRAM_NAME)+\" \"+PROGRAM_VERSION;\n#ifdef HOST_SYSTEM\n\tif (extended && strlen(HOST_SYSTEM) > 0)\n\t\tversionstr += \" (\" HOST_SYSTEM \")\";\n#endif\n\tcout << versionstr << '\\n';\n\tif (extended) {\n\t\tcout << string(versionstr.length(), '-') << '\\n';\n\t\tVersionInfo versionInfo;\n\t\tversionInfo.add(\"clipper\", CLIPPER_VERSION);\n\t\tversionInfo.add(\"freetype\", FontEngine::version());\n\t\tversionInfo.add(\"potrace\", strchr(potrace_version(), ' '));\n\t\tversionInfo.add(\"xxhash\", XXH64HashFunction::version(), 3, 100);\n\t\tversionInfo.add(\"zlib\", zlibVersion());\n\t\tversionInfo.add(\"Ghostscript\", Ghostscript().revisionstr(), true);\n\t\tversionInfo.add(\"mutool\", PDFHandler::mutoolVersion(), true);\n#ifndef DISABLE_WOFF\n\t\tversionInfo.add(\"brotli\", BrotliEncoderVersion(), 3, 0x1000);\n//\t\tversionInfo.add(\"woff2\", woff2::version, 3, 0x100);\n\t\tversionInfo.add(\"ttfautohint\", ttf::TTFAutohint().version(), true);\n#endif\n#ifdef MIKTEX\n\t\tversionInfo.add(\"MiKTeX\", FileFinder::instance().version());\n#else\n\t\tversionInfo.add(\"kpathsea\", FileFinder::instance().version());\n#endif\n\t\tversionInfo.write(cout);\n\t}\n}\n\n\nstatic void init_fontmap (const CommandLine &cmdline) {\n\tstring mapseq;\n\tif (cmdline.fontmapOpt.given())\n\t\tmapseq = cmdline.fontmapOpt.value();\n\tbool additional = !mapseq.empty() && strchr(\"+-=\", mapseq[0]);\n\tif (mapseq.empty() || additional) {\n\t\tstring mapfiles[] = {\"dvisvgm\", \"ps2pk\", \"pdftex\", \"dvipdfm\", \"psfonts\"};\n\t\tauto it = algo::find_if(mapfiles, [](const string &mapfile) {\n\t\t\treturn FontMap::instance().read(mapfile+\".map\");\n\t\t});\n\t\tif (it == std::end(mapfiles))\n\t\t\tMessage::wstream(true) << \"none of the default map files could be found\\n\";\n\t}\n\tif (!mapseq.empty())\n\t\tFontMap::instance().read(mapseq, true);\n}\n\n\n/** Returns a unique string for the current state of the command-line\n *  options affecting the SVG output. */\nstatic string svg_options_hash (const CommandLine &cmdline) {\n\t// options affecting the SVG output\n\tconst CL::Option* svg_options[] = {\n\t\t&cmdline.bboxOpt,\t&cmdline.clipjoinOpt, &cmdline.colornamesOpt, &cmdline.commentsOpt,\n\t\t&cmdline.currentcolorOpt, &cmdline.exactBboxOpt, &cmdline.fontFormatOpt, &cmdline.fontmapOpt,\n\t\t&cmdline.gradOverlapOpt, &cmdline.gradSegmentsOpt, &cmdline.gradSimplifyOpt, &cmdline.linkmarkOpt,\n\t\t&cmdline.magOpt, &cmdline.noFontsOpt, &cmdline.noMergeOpt, &cmdline.noSpecialsOpt, &cmdline.noStylesOpt,\n\t\t&cmdline.optimizeOpt, &cmdline.precisionOpt, &cmdline.relativeOpt, &cmdline.zoomOpt\n\t};\n\tstring idString = get_transformation_string(cmdline);\n\tfor (const CL::Option *opt : svg_options) {\n\t\tidString += char(opt->given());\n\t\tidString += opt->valueString();\n\t}\n\treturn XXH64HashFunction(idString).digestString();\n}\n\n\nstatic bool list_page_hashes (const CommandLine &cmdline, DVIToSVG &dvisvg) {\n\tif (cmdline.pageHashesOpt.given()) {\n\t\tDVIToSVG::PAGE_HASH_SETTINGS.setParameters(cmdline.pageHashesOpt.value());\n\t\tDVIToSVG::PAGE_HASH_SETTINGS.setOptionHash(svg_options_hash(cmdline));\n\t\tif (DVIToSVG::PAGE_HASH_SETTINGS.isSet(DVIToSVG::HashSettings::P_LIST)) {\n\t\t\tdvisvg.listHashes(cmdline.pageOpt.value(), cout);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\n\nstatic void set_variables (const CommandLine &cmdline) {\n\tMessage::COLORIZE = cmdline.colorOpt.given();\n\tif (cmdline.progressOpt.given()) {\n\t\tDVIToSVG::COMPUTE_PROGRESS = true;\n\t\tSpecialActions::PROGRESSBAR_DELAY = cmdline.progressOpt.value();\n\t}\n\tColor::SUPPRESS_COLOR_NAMES = !cmdline.colornamesOpt.given();\n\tif ((SVGElement::USE_CURRENTCOLOR = cmdline.currentcolorOpt.given())) {\n\t\tColor color;\n\t\tif (color.setRGBHexString(cmdline.currentcolorOpt.value()))\n\t\t\tSVGElement::CURRENTCOLOR = color;\n\t\telse\n\t\t\tthrow CL::CommandLineException(\"invalid color string '\"+cmdline.currentcolorOpt.value()+\"'\");\n\t}\n\tSVGTree::CREATE_CSS = !cmdline.noStylesOpt.given();\n\tSVGTree::USE_FONTS = !cmdline.noFontsOpt.given();\n\tif (!SVGTree::setFontFormat(cmdline.fontFormatOpt.value())) {\n\t\tstring msg = \"unknown font format '\"+cmdline.fontFormatOpt.value()+\"' (supported formats: \";\n\t\tfor (const string &format : FontWriter::supportedFormats())\n\t\t\tmsg += format + \", \";\n\t\tmsg.pop_back();\n\t\tmsg.back() = ')';\n\t\tthrow CL::CommandLineException(msg);\n\t}\n\tSVGTree::CREATE_USE_ELEMENTS = cmdline.noFontsOpt.value() < 1;\n\tSVGTree::ZOOM_FACTOR = cmdline.zoomOpt.value();\n\tSVGTree::RELATIVE_PATH_CMDS = cmdline.relativeOpt.given();\n\tSVGTree::MERGE_CHARS = !cmdline.noMergeOpt.given();\n\tSVGTree::ADD_COMMENTS = cmdline.commentsOpt.given();\n\tDVIToSVG::TRACE_MODE = cmdline.traceAllOpt.given() ? (cmdline.traceAllOpt.value() ? 'a' : 'm') : 0;\n\tMessage::LEVEL = cmdline.verbosityOpt.value();\n\tPhysicalFont::EXACT_BBOX = cmdline.exactBboxOpt.given();\n\tPhysicalFont::KEEP_TEMP_FILES = cmdline.keepOpt.given();\n\tPhysicalFont::METAFONT_MAG = max(1.0, cmdline.magOpt.value());\n\tXMLString::DECIMAL_PLACES = max(0, min(6, cmdline.precisionOpt.value()));\n\tXMLNode::KEEP_ENCODED_FILES = cmdline.keepOpt.given();\n\tPsSpecialHandler::COMPUTE_CLIPPATHS_INTERSECTIONS = cmdline.clipjoinOpt.given();\n\tPsSpecialHandler::SHADING_SEGMENT_OVERLAP = cmdline.gradOverlapOpt.given();\n\tPsSpecialHandler::SHADING_SEGMENT_SIZE = max(1, cmdline.gradSegmentsOpt.value());\n\tPsSpecialHandler::SHADING_SIMPLIFY_DELTA = cmdline.gradSimplifyOpt.value();\n\tPsSpecialHandler::BITMAP_FORMAT = util::tolower(cmdline.bitmapFormatOpt.value());\n#ifdef TTFDEBUG\n\tttf::TTFWriter::CREATE_PS_GLYPH_OUTLINES = cmdline.debugGlyphsOpt.given();\n#endif\n\tSVGTree::EMBED_BITMAP_DATA = cmdline.embedBitmapsOpt.given();\n\tif (!PSInterpreter::imageDeviceKnown(PsSpecialHandler::BITMAP_FORMAT)) {\n\t\tostringstream oss;\n\t\toss << \"unknown image format '\" << PsSpecialHandler::BITMAP_FORMAT << \"'\\nknown formats:\\n\";\n\t\tPSInterpreter::listImageDeviceInfos(oss);\n\t\tthrow CL::CommandLineException(oss.str());\n\t}\n\tif (cmdline.optimizeOpt.given()) {\n\t\tSVGOptimizer::MODULE_SEQUENCE = cmdline.optimizeOpt.value();\n\t\tvector<string> modnames;\n\t\tif (!SVGOptimizer().checkModuleString(SVGOptimizer::MODULE_SEQUENCE, modnames)) {\n\t\t\tstring msg = \"invalid optimizer module\";\n\t\t\tif (modnames.size() > 1) msg += 's';\n\t\t\tmsg += \": \";\n\t\t\tfor (const string &modname : modnames)\n\t\t\t\tmsg += modname + \", \";\n\t\t\tmsg.erase(msg.end()-2);\n\t\t\tthrow CL::CommandLineException(msg);\n\t\t}\n\t}\n}\n\n\nstatic void timer_message (double start_time, const pair<int,int> *pageinfo) {\n\tMessage::mstream().indent(0);\n\tif (!pageinfo)\n\t\tMessage::mstream(false, Message::MC_PAGE_NUMBER) << \"\\n\" << \"file\";\n\telse {\n\t\tMessage::mstream(false, Message::MC_PAGE_NUMBER) << \"\\n\" << pageinfo->first << \" of \" << pageinfo->second << \" page\";\n\t\tif (pageinfo->second > 1)\n\t\t\tMessage::mstream(false, Message::MC_PAGE_NUMBER) << 's';\n\t}\n\tMessage::mstream(false, Message::MC_PAGE_NUMBER) << \" converted in \" << (System::time()-start_time) << \" seconds\\n\";\n}\n\n\nstatic void convert_file (size_t fnameIndex, const CommandLine &cmdline) {\n\tconst char *suffix = cmdline.epsOpt.given() ? \"eps\" : cmdline.pdfOpt.given() ? \"pdf\" : \"dvi\";\n\tstring inputfile = ensure_suffix(cmdline.filenames()[fnameIndex], suffix);\n\tSourceInput srcin(inputfile);\n\tif (!srcin.getInputStream(true))\n\t\tthrow MessageException(\"can't open file '\" + srcin.getMessageFileName() + \"' for reading\");\n\n\tdouble start_time = System::time();\n\tset_variables(cmdline);\n\tSVGOutput out(cmdline.stdoutOpt.given() ? \"\" : srcin.getFileName(),\n\t\t\t\t\t  cmdline.outputOpt.value(),\n\t\t\t\t\t  cmdline.zipOpt.given() ? cmdline.zipOpt.value() : 0);\n\tout.setFileNumbers(fnameIndex+1, cmdline.filenames().size());\n\tpair<int,int> pageinfo;\n\tif (cmdline.epsOpt.given() || cmdline.pdfOpt.given()) {\n\t\tauto img2svg = unique_ptr<ImageToSVG>(\n\t\t\t\tcmdline.epsOpt.given()\n\t\t\t\t? static_cast<ImageToSVG*>(new EPSToSVG(srcin.getFilePath(), out))\n\t\t\t\t: static_cast<ImageToSVG*>(new PDFToSVG(srcin.getFilePath(), out)));\n\t\timg2svg->setPageTransformation(get_transformation_string(cmdline));\n\t\timg2svg->setUserMessage(cmdline.messageOpt.value());\n\t\timg2svg->convert(cmdline.pageOpt.value(), &pageinfo);\n\t\ttimer_message(start_time, img2svg->isSinglePageFormat() ? nullptr : &pageinfo);\n\t}\n\telse {\n\t\tinit_fontmap(cmdline);\n\t\tDVIToSVG dvi2svg(srcin.getInputStream(), out);\n\t\tif (!list_page_hashes(cmdline, dvi2svg)) {\n\t\t\tstring ignore_specials;\n\t\t\tif (cmdline.noSpecialsOpt.given())\n\t\t\t\tignore_specials = cmdline.noSpecialsOpt.value().empty() ? \"*\" : cmdline.noSpecialsOpt.value();\n\t\t\tdvi2svg.setProcessSpecials(ignore_specials, true);\n\t\t\tdvi2svg.setPageTransformation(get_transformation_string(cmdline));\n\t\t\tdvi2svg.setPageSize(cmdline.bboxOpt.value());\n\t\t\tdvi2svg.setUserMessage(cmdline.messageOpt.value());\n\t\t\tdvi2svg.convert(cmdline.pageOpt.value(), &pageinfo);\n\t\t\ttimer_message(start_time, &pageinfo);\n\t\t}\n\t}\n}\n\n\nint main (int argc, char *argv[]) {\n\ttry {\n\t\tCommandLine cmdline;\n\t\tcmdline.parse(argc, argv);\n\t\tif (argc == 1 || cmdline.helpOpt.given()) {\n\t\t\tcmdline.help(cout, cmdline.helpOpt.value());\n\t\t\treturn 0;\n\t\t}\n\t\tFileFinder::init(argv[0], \"dvisvgm\", !cmdline.noMktexmfOpt.given());\n\t\tset_libgs(cmdline);\n\t\tif (cmdline.versionOpt.given()) {\n\t\t\tprint_version(cmdline.versionOpt.value());\n\t\t\treturn 0;\n\t\t}\n\t\tif (cmdline.listSpecialsOpt.given()) {\n\t\t\tDVIToSVG::setProcessSpecials();\n\t\t\tSpecialManager::instance().writeHandlerInfo(cout);\n\t\t\treturn 0;\n\t\t}\n\t\tif (cmdline.optimizeOpt.value() == \"list\") {\n\t\t\tSVGOptimizer().listModules(cout);\n\t\t\treturn 0;\n\t\t}\n\t\tif (!set_cache_dir(cmdline) || !set_temp_dir(cmdline))\n\t\t\treturn 0;\n\t\tcheck_bbox(cmdline.bboxOpt.value());\n\t\tif (!HyperlinkManager::setLinkMarker(cmdline.linkmarkOpt.value()))\n\t\t\tMessage::wstream(true) << \"invalid argument '\"+cmdline.linkmarkOpt.value()+\"' supplied for option --linkmark\\n\";\n\t\tif (cmdline.stdinOpt.given() || cmdline.singleDashGiven()) {\n\t\t\tif (!cmdline.filenames().empty())\n\t\t\t\tthrow MessageException(\"option - or --stdin can't be used together with a filename\");\n\t\t\tcmdline.addFilename(\"\");  // empty filename => read from stdin\n\t\t}\n\t\tif (argc > 1 && cmdline.filenames().empty())\n\t\t\tthrow MessageException(\"no input file given\");\n\n\t\tSignalHandler::instance().start();\n\t\tsize_t numFiles = cmdline.epsOpt.given() ? cmdline.filenames().size() : 1;\n\t\tfor (size_t i=0; i < numFiles; i++)\n\t\t\tconvert_file(i, cmdline);\n\t}\n\tcatch (DVIException &e) {\n\t\tMessage::estream() << \"\\nDVI error: \" << e.what() << '\\n';\n\t\treturn -1;\n\t}\n\tcatch (PSException &e) {\n\t\tMessage::estream() << \"\\nPostScript error: \" << e.what() << '\\n';\n\t\treturn -2;\n\t}\n\tcatch (XMLParserException &e) {\n\t\tMessage::estream() << \"\\nXML error: \" << e.what() << '\\n';\n\t\treturn -5;\n\t}\n\tcatch (SignalException &) {\n\t\tMessage::wstream().clearline();\n\t\tMessage::wstream(true) << \"execution interrupted by user\\n\";\n\t\treturn -3;\n\t}\n\tcatch (exception &e) {\n\t\tMessage::estream(true) << e.what() << '\\n';\n\t\treturn -4;\n\t}\n\treturn 0;\n}\n"
  },
  {
    "path": "src/fonts/Base14Fonts.cpp",
    "content": "/*************************************************************************\n** Base14Fonts.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"../algorithm.hpp\"\n#include \"Base14Fonts.hpp\"\n\nusing namespace std;\n\nextern const MemoryFontData Dingbats_cff;\nextern const MemoryFontData NimbusMonoPS_Bold_cff;\nextern const MemoryFontData NimbusMonoPS_BoldItalic_cff;\nextern const MemoryFontData NimbusMonoPS_Italic_cff;\nextern const MemoryFontData NimbusMonoPS_Regular_cff;\nextern const MemoryFontData NimbusRoman_Bold_cff;\nextern const MemoryFontData NimbusRoman_BoldItalic_cff;\nextern const MemoryFontData NimbusRoman_Italic_cff;\nextern const MemoryFontData NimbusRoman_Regular_cff;\nextern const MemoryFontData NimbusSans_Bold_cff;\nextern const MemoryFontData NimbusSans_BoldItalic_cff;\nextern const MemoryFontData NimbusSans_Italic_cff;\nextern const MemoryFontData NimbusSans_Regular_cff;\nextern const MemoryFontData StandardSymbolsPS_cff;\n\n/** Returns the CFF font data for a given name of a Base 14 font.\n *  If 'fontname' doesn't specify one of the 14 PDF base fonts,\n *  the function returns nullptr. */\nconst MemoryFontData* find_base14_font (const string &fontname) {\n\tstruct FontData {\n\t\tconst char *name;\n\t\tconst MemoryFontData *font;\n\t} names[14] = {\n\t\t{\"Courier\", &NimbusMonoPS_Regular_cff},\n\t\t{\"Courier-Oblique\", &NimbusMonoPS_Italic_cff},\n\t\t{\"Courier-Bold\", &NimbusMonoPS_Bold_cff},\n\t\t{\"Courier-BoldOblique\", &NimbusMonoPS_BoldItalic_cff},\n\t\t{\"Helvetica\", &NimbusSans_Regular_cff},\n\t\t{\"Helvetica-Oblique\", &NimbusSans_Italic_cff},\n\t\t{\"Helvetica-Bold\", &NimbusSans_Bold_cff},\n\t\t{\"Helvetica-BoldOblique\", &NimbusSans_BoldItalic_cff},\n\t\t{\"Times-Roman\", &NimbusRoman_Regular_cff},\n\t\t{\"Times-Italic\", &NimbusRoman_Italic_cff},\n\t\t{\"Times-Bold\", &NimbusRoman_Bold_cff},\n\t\t{\"Times-BoldItalic\", &NimbusRoman_BoldItalic_cff},\n\t\t{\"Symbol\", &StandardSymbolsPS_cff},\n\t\t{\"ZapfDingbats\", &Dingbats_cff}\n\t};\n\tauto it = algo::find_if(names, [&fontname](const FontData &data) {\n\t\treturn data.name == fontname;\n\t});\n\treturn it != end(names) ? it->font : nullptr;\n}\n"
  },
  {
    "path": "src/fonts/Base14Fonts.hpp",
    "content": "/*************************************************************************\n** Base14Fonts.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <cstddef>\n#include <string>\n\nstruct MemoryFontData {\n\tMemoryFontData () =delete;\n\tconst char *data;\n\tsize_t size;\n};\n\nconst MemoryFontData* find_base14_font (const std::string &name);\n"
  },
  {
    "path": "src/fonts/Dingbats.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData Dingbats_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x09\\x44\\x69\\x6e\\x67\\x62\\x61\\x74\\x73\\x00\\x01\\x01\\x01\\x39\\xf8\\xe4\\x00\\xf8\\xe5\\x01\\xf8\\xe6\\x0c\\x00\"\n\"\\xf8\\xe7\\x02\\xf8\\xe7\\x03\\xf8\\x18\\x04\\x43\\x0c\\x03\\xaf\\x0c\\x04\\x8a\\xfb\\x24\\xfa\\x69\\xf9\\xc7\\x05\\x1d\\x00\\x4c\\x9a\\x04\\x0d\\x1c\\x05\\x2a\"\n\"\\x0f\\x1c\\x05\\x31\\x10\\x1c\\x05\\x3b\\x11\\x9f\\x1c\\x60\\x1e\\x12\\x00\\xcd\\x02\\x00\\x01\\x00\\x03\\x00\\x05\\x00\\x09\\x00\\x0b\\x00\\x0d\\x00\\x0f\\x00\"\n\"\\x13\\x00\\x17\\x00\\x1b\\x00\\x1e\\x00\\x21\\x00\\x24\\x00\\x27\\x00\\x2a\\x00\\x2d\\x00\\x31\\x00\\x34\\x00\\x37\\x00\\x3a\\x00\\x3d\\x00\\x40\\x00\\x43\\x00\"\n\"\\x46\\x00\\x49\\x00\\x4c\\x00\\x4f\\x00\\x52\\x00\\x55\\x00\\x57\\x00\\x59\\x00\\x5b\\x00\\x5d\\x00\\x60\\x00\\x63\\x00\\x66\\x00\\x69\\x00\\x6c\\x00\\x6f\\x00\"\n\"\\x72\\x00\\x75\\x00\\x78\\x00\\x7b\\x00\\x7e\\x00\\x81\\x00\\x84\\x00\\x87\\x00\\x8a\\x00\\x8d\\x00\\x90\\x00\\x93\\x00\\x96\\x00\\x99\\x00\\x9c\\x00\\x9f\\x00\"\n\"\\xa2\\x00\\xa5\\x00\\xa8\\x00\\xab\\x00\\xae\\x00\\xb1\\x00\\xb4\\x00\\xb7\\x00\\xba\\x00\\xbd\\x00\\xc0\\x00\\xc3\\x00\\xc6\\x00\\xc9\\x00\\xcc\\x00\\xcf\\x00\"\n\"\\xd2\\x00\\xd5\\x00\\xd8\\x00\\xdb\\x00\\xde\\x00\\xe1\\x00\\xe4\\x00\\xe7\\x00\\xea\\x00\\xee\\x00\\xf1\\x00\\xf5\\x00\\xf8\\x00\\xfb\\x00\\xfe\\x01\\x01\\x01\"\n\"\\x04\\x01\\x07\\x01\\x0a\\x01\\x0d\\x01\\x10\\x01\\x13\\x01\\x16\\x01\\x1a\\x01\\x1d\\x01\\x20\\x01\\x23\\x01\\x26\\x01\\x29\\x01\\x2c\\x01\\x30\\x01\\x33\\x01\"\n\"\\x37\\x01\\x3a\\x01\\x3d\\x01\\x40\\x01\\x43\\x01\\x46\\x01\\x4a\\x01\\x4e\\x01\\x52\\x01\\x56\\x01\\x5a\\x01\\x5e\\x01\\x62\\x01\\x66\\x01\\x6a\\x01\\x6e\\x01\"\n\"\\x72\\x01\\x76\\x01\\x7a\\x01\\x7e\\x01\\x82\\x01\\x86\\x01\\x8a\\x01\\x8e\\x01\\x92\\x01\\x96\\x01\\x9a\\x01\\x9e\\x01\\xa2\\x01\\xa6\\x01\\xaa\\x01\\xae\\x01\"\n\"\\xb2\\x01\\xb6\\x01\\xba\\x01\\xbe\\x01\\xc2\\x01\\xc6\\x01\\xca\\x01\\xce\\x01\\xd2\\x01\\xd6\\x01\\xda\\x01\\xde\\x01\\xe2\\x01\\xe6\\x01\\xea\\x01\\xee\\x01\"\n\"\\xf2\\x01\\xf6\\x01\\xfa\\x01\\xfe\\x02\\x02\\x02\\x06\\x02\\x0a\\x02\\x0e\\x02\\x12\\x02\\x16\\x02\\x1a\\x02\\x1e\\x02\\x22\\x02\\x26\\x02\\x2a\\x02\\x2e\\x02\"\n\"\\x32\\x02\\x36\\x02\\x3a\\x02\\x3e\\x02\\x42\\x02\\x46\\x02\\x4a\\x02\\x4e\\x02\\x52\\x02\\x56\\x02\\x5a\\x02\\x5e\\x02\\x62\\x02\\x66\\x02\\x6a\\x02\\x6e\\x02\"\n\"\\x72\\x02\\x76\\x02\\x7a\\x02\\x7e\\x02\\x82\\x02\\x86\\x02\\x8a\\x02\\x8e\\x02\\x92\\x02\\x96\\x02\\x9a\\x02\\x9e\\x02\\xa2\\x02\\xa6\\x02\\xaa\\x02\\xae\\x02\"\n\"\\xb2\\x02\\xb6\\x02\\xba\\x02\\xbe\\x02\\xf4\\x03\\x34\\x03\\x3c\\x61\\x31\\x61\\x32\\x61\\x32\\x30\\x32\\x61\\x33\\x61\\x34\\x61\\x35\\x61\\x31\\x31\\x39\\x61\"\n\"\\x31\\x31\\x38\\x61\\x31\\x31\\x37\\x61\\x31\\x31\\x61\\x31\\x32\\x61\\x31\\x33\\x61\\x31\\x34\\x61\\x31\\x35\\x61\\x31\\x36\\x61\\x31\\x30\\x35\\x61\\x31\\x37\"\n\"\\x61\\x31\\x38\\x61\\x31\\x39\\x61\\x32\\x30\\x61\\x32\\x31\\x61\\x32\\x32\\x61\\x32\\x33\\x61\\x32\\x34\\x61\\x32\\x35\\x61\\x32\\x36\\x61\\x32\\x37\\x61\\x32\"\n\"\\x38\\x61\\x36\\x61\\x37\\x61\\x38\\x61\\x39\\x61\\x31\\x30\\x61\\x32\\x39\\x61\\x33\\x30\\x61\\x33\\x31\\x61\\x33\\x32\\x61\\x33\\x33\\x61\\x33\\x34\\x61\\x33\"\n\"\\x35\\x61\\x33\\x36\\x61\\x33\\x37\\x61\\x33\\x38\\x61\\x33\\x39\\x61\\x34\\x30\\x61\\x34\\x31\\x61\\x34\\x32\\x61\\x34\\x33\\x61\\x34\\x34\\x61\\x34\\x35\\x61\"\n\"\\x34\\x36\\x61\\x34\\x37\\x61\\x34\\x38\\x61\\x34\\x39\\x61\\x35\\x30\\x61\\x35\\x31\\x61\\x35\\x32\\x61\\x35\\x33\\x61\\x35\\x34\\x61\\x35\\x35\\x61\\x35\\x36\"\n\"\\x61\\x35\\x37\\x61\\x35\\x38\\x61\\x35\\x39\\x61\\x36\\x30\\x61\\x36\\x31\\x61\\x36\\x32\\x61\\x36\\x33\\x61\\x36\\x34\\x61\\x36\\x35\\x61\\x36\\x36\\x61\\x36\"\n\"\\x37\\x61\\x36\\x38\\x61\\x36\\x39\\x61\\x37\\x30\\x61\\x37\\x31\\x61\\x37\\x32\\x61\\x37\\x33\\x61\\x37\\x34\\x61\\x32\\x30\\x33\\x61\\x37\\x35\\x61\\x32\\x30\"\n\"\\x34\\x61\\x37\\x36\\x61\\x37\\x37\\x61\\x37\\x38\\x61\\x37\\x39\\x61\\x38\\x31\\x61\\x38\\x32\\x61\\x38\\x33\\x61\\x38\\x34\\x61\\x39\\x37\\x61\\x39\\x38\\x61\"\n\"\\x39\\x39\\x61\\x31\\x30\\x30\\x61\\x38\\x39\\x61\\x39\\x30\\x61\\x39\\x33\\x61\\x39\\x34\\x61\\x39\\x31\\x61\\x39\\x32\\x61\\x32\\x30\\x35\\x61\\x38\\x35\\x61\"\n\"\\x32\\x30\\x36\\x61\\x38\\x36\\x61\\x38\\x37\\x61\\x38\\x38\\x61\\x39\\x35\\x61\\x39\\x36\\x61\\x31\\x30\\x31\\x61\\x31\\x30\\x32\\x61\\x31\\x30\\x33\\x61\\x31\"\n\"\\x30\\x34\\x61\\x31\\x30\\x36\\x61\\x31\\x30\\x37\\x61\\x31\\x30\\x38\\x61\\x31\\x31\\x32\\x61\\x31\\x31\\x31\\x61\\x31\\x31\\x30\\x61\\x31\\x30\\x39\\x61\\x31\"\n\"\\x32\\x30\\x61\\x31\\x32\\x31\\x61\\x31\\x32\\x32\\x61\\x31\\x32\\x33\\x61\\x31\\x32\\x34\\x61\\x31\\x32\\x35\\x61\\x31\\x32\\x36\\x61\\x31\\x32\\x37\\x61\\x31\"\n\"\\x32\\x38\\x61\\x31\\x32\\x39\\x61\\x31\\x33\\x30\\x61\\x31\\x33\\x31\\x61\\x31\\x33\\x32\\x61\\x31\\x33\\x33\\x61\\x31\\x33\\x34\\x61\\x31\\x33\\x35\\x61\\x31\"\n\"\\x33\\x36\\x61\\x31\\x33\\x37\\x61\\x31\\x33\\x38\\x61\\x31\\x33\\x39\\x61\\x31\\x34\\x30\\x61\\x31\\x34\\x31\\x61\\x31\\x34\\x32\\x61\\x31\\x34\\x33\\x61\\x31\"\n\"\\x34\\x34\\x61\\x31\\x34\\x35\\x61\\x31\\x34\\x36\\x61\\x31\\x34\\x37\\x61\\x31\\x34\\x38\\x61\\x31\\x34\\x39\\x61\\x31\\x35\\x30\\x61\\x31\\x35\\x31\\x61\\x31\"\n\"\\x35\\x32\\x61\\x31\\x35\\x33\\x61\\x31\\x35\\x34\\x61\\x31\\x35\\x35\\x61\\x31\\x35\\x36\\x61\\x31\\x35\\x37\\x61\\x31\\x35\\x38\\x61\\x31\\x35\\x39\\x61\\x31\"\n\"\\x36\\x30\\x61\\x31\\x36\\x31\\x61\\x31\\x36\\x33\\x61\\x31\\x36\\x34\\x61\\x31\\x39\\x36\\x61\\x31\\x36\\x35\\x61\\x31\\x39\\x32\\x61\\x31\\x36\\x36\\x61\\x31\"\n\"\\x36\\x37\\x61\\x31\\x36\\x38\\x61\\x31\\x36\\x39\\x61\\x31\\x37\\x30\\x61\\x31\\x37\\x31\\x61\\x31\\x37\\x32\\x61\\x31\\x37\\x33\\x61\\x31\\x36\\x32\\x61\\x31\"\n\"\\x37\\x34\\x61\\x31\\x37\\x35\\x61\\x31\\x37\\x36\\x61\\x31\\x37\\x37\\x61\\x31\\x37\\x38\\x61\\x31\\x37\\x39\\x61\\x31\\x39\\x33\\x61\\x31\\x38\\x30\\x61\\x31\"\n\"\\x39\\x39\\x61\\x31\\x38\\x31\\x61\\x32\\x30\\x30\\x61\\x31\\x38\\x32\\x61\\x32\\x30\\x31\\x61\\x31\\x38\\x33\\x61\\x31\\x38\\x34\\x61\\x31\\x39\\x37\\x61\\x31\"\n\"\\x38\\x35\\x61\\x31\\x39\\x34\\x61\\x31\\x39\\x38\\x61\\x31\\x38\\x36\\x61\\x31\\x39\\x35\\x61\\x31\\x38\\x37\\x61\\x31\\x38\\x38\\x61\\x31\\x38\\x39\\x61\\x31\"\n\"\\x39\\x30\\x61\\x31\\x39\\x31\\x32\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x33\"\n\"\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\"\n\"\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x33\"\n\"\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\"\n\"\\x44\\x69\\x6e\\x67\\x62\\x61\\x74\\x73\\x00\\x00\\x01\\x00\\x01\\x00\\x01\\x87\\xc8\\x01\\x04\\x20\\x5e\\x80\\x0d\\xa1\\x4e\\xf1\\x0d\\x00\\xcb\\x02\\x00\\x01\"\n\"\\x00\\x04\\x00\\x07\\x00\\xba\\x01\\x6f\\x02\\x26\\x03\\xec\\x04\\xf2\\x05\\xf3\\x06\\x9c\\x07\\x66\\x07\\xcc\\x08\\x9f\\x0a\\x5d\\x0c\\x0f\\x0d\\xb9\\x0e\\x7b\"\n\"\\x0f\\x43\\x10\\x02\\x10\\xbf\\x11\\x71\\x11\\xc6\\x12\\x66\\x12\\x92\\x12\\xc6\\x13\\xe2\\x15\\x02\\x15\\x52\\x15\\x6f\\x15\\x9b\\x15\\xc7\\x15\\xe2\\x16\\x21\"\n\"\\x16\\x73\\x16\\xd9\\x17\\x54\\x17\\xe5\\x18\\x89\\x19\\x12\\x1a\\x02\\x1a\\x6a\\x1a\\xea\\x1b\\x12\\x1b\\x5d\\x1b\\x89\\x1b\\xc5\\x1c\\x49\\x1c\\xb7\\x1d\\x60\"\n\"\\x1d\\xc1\\x1e\\x1a\\x1e\\x5a\\x1e\\xac\\x1e\\xf9\\x1f\\xa1\\x20\\x4c\\x20\\xd0\\x21\\x84\\x21\\xc1\\x22\\x16\\x22\\xa3\\x23\\x64\\x24\\xca\\x25\\xe4\\x27\\x1e\"\n\"\\x28\\x15\\x29\\x99\\x2c\\x26\\x2c\\xeb\\x2e\\x13\\x2e\\xbd\\x2f\\xff\\x30\\xa1\\x31\\xe3\\x33\\x14\\x33\\xca\\x34\\xd1\\x35\\xdc\\x36\\x04\\x36\\x60\\x36\\x6c\"\n\"\\x36\\x88\\x36\\xa3\\x36\\xc3\\x36\\xe5\\x36\\xf3\\x37\\x01\\x37\\x13\\x37\\x5c\\x37\\x7b\\x37\\x86\\x37\\x94\\x37\\xa2\\x37\\xe9\\x38\\x2d\\x38\\x86\\x38\\xdd\"\n\"\\x39\\x1d\\x39\\x58\\x39\\x83\\x39\\xae\\x39\\xc5\\x39\\xdb\\x39\\xf5\\x3a\\x10\\x3a\\x28\\x3a\\x40\\x3a\\x5d\\x3a\\x7b\\x3a\\xe4\\x3b\\x4a\\x3b\\xe7\\x3c\\x41\"\n\"\\x3c\\x9f\\x3c\\xf3\\x3d\\x57\\x3e\\x64\\x3f\\x37\\x3f\\xa9\\x3f\\xd3\\x40\\x1a\\x40\\x6a\\x40\\xa3\\x41\\x06\\x41\\x96\\x41\\xf9\\x42\\x68\\x42\\xdc\\x43\\x3e\"\n\"\\x43\\x9e\\x44\\x11\\x44\\x7e\\x44\\xc0\\x45\\x30\\x45\\xbd\\x45\\xf9\\x46\\x63\\x46\\xde\\x47\\x35\\x47\\x99\\x48\\x04\\x48\\x93\\x48\\xac\\x48\\xf7\\x49\\x67\"\n\"\\x49\\x90\\x49\\xd0\\x4a\\x32\\x4a\\x5a\\x4a\\xc4\\x4b\\x29\\x4b\\x88\\x4b\\x9d\\x4b\\xed\\x4c\\x61\\x4c\\x8d\\x4c\\xeb\\x4d\\x58\\x4d\\x81\\x4d\\xde\\x4e\\x44\"\n\"\\x4e\\x95\\x4e\\xb9\\x4e\\xd6\\x4f\\x0e\\x4f\\x4d\\x4f\\x69\\x4f\\x84\\x4f\\xa0\\x4f\\xd4\\x50\\x25\\x50\\x3d\\x50\\x56\\x50\\x89\\x50\\xcd\\x50\\xe4\\x51\\x04\"\n\"\\x51\\x23\\x51\\x36\\x51\\x6a\\x51\\x9b\\x51\\xb3\\x51\\xd9\\x52\\x0b\\x52\\x3d\\x52\\x78\\x52\\xb1\\x52\\xe0\\x53\\x13\\x53\\x4c\\x53\\x82\\x53\\xce\\x54\\x66\"\n\"\\x54\\xc8\\x55\\x26\\x55\\x8b\\x56\\x00\\x56\\x52\\x56\\xbc\\x57\\x36\\x57\\xad\\x58\\x49\\x58\\xf0\\x59\\x49\\xfc\\xc5\\x0e\\xfc\\xc5\\x0e\\xf7\\x1b\\xf8\\xfd\"\n\"\\xf7\\x0c\\x15\\x2b\\xf7\\x02\\xf8\\x36\\xc2\\x05\\xb4\\x42\\x4a\\x9f\\x4b\\x1b\\x7e\\x79\\x8a\\x8a\\x7a\\x1f\\xfb\\x9d\\x7c\\x5d\\xb7\\x69\\xa4\\x6d\\x97\\x19\"\n\"\\x49\\xa4\\x8a\\x8c\\x95\\x1a\\x8e\\x8c\\x90\\x8d\\x8f\\x1e\\x99\\xa6\\x8d\\x93\\x9b\\x1a\\xc4\\x54\\xbe\\x4e\\x5d\\x66\\x67\\x5d\\x59\\xb3\\x62\\xcb\\x7b\\x1e\"\n\"\\xee\\x79\\xc8\\x65\\xb4\\x45\\x08\\x68\\x69\\x57\\x71\\x67\\x1b\\x7b\\x73\\x8f\\x92\\x6f\\x1f\\x90\\x74\\x75\\x8f\\x7a\\x1b\\x5d\\x64\\x65\\x5d\\x52\\xc0\\x5a\"\n\"\\xc7\\xc1\\xb1\\xaf\\xbe\\x91\\x8a\\x91\\x8a\\x90\\x1f\\x88\\x99\\x89\\x94\\x8e\\x1a\\x93\\x93\\x91\\x97\\x1e\\xbc\\x8a\\x05\\x97\\xcc\\x91\\x91\\xb8\\x1f\\xf0\"\n\"\\xfb\\x06\\x05\\xfc\\x09\\xf8\\x71\\x15\\xb5\\xb5\\x65\\x65\\x6b\\x75\\x74\\x70\\x5e\\x5d\\xb1\\xb1\\xa9\\xa5\\xa4\\xa9\\x1f\\x73\\xfb\\xf8\\x15\\xba\\xaf\\x6b\"\n\"\\x61\\x69\\x70\\x70\\x68\\x5f\\x62\\xb1\\xb3\\xab\\xa7\\xa4\\xaf\\x1f\\x0e\\xf7\\x0e\\xf8\\xb9\\xf7\\xef\\x15\\xf8\\x0d\\xf7\\x25\\x05\\xab\\x68\\x76\\x94\\x67\"\n\"\\x1b\\x70\\x68\\x84\\x7c\\x64\\x1f\\xfb\\xcc\\xfb\\x0a\\x05\\xa2\\x59\\x3e\\xa2\\x70\\x1b\\x6f\\x8d\\x81\\x90\\x96\\x1a\\x8e\\x8d\\x91\\x8e\\x92\\x1e\\x91\\x99\"\n\"\\x8f\\x9c\\x99\\x1a\\xbe\\x5d\\xb4\\x50\\x4e\\x60\\x63\\x51\\x4f\\xbe\\x62\\xd5\\x1e\\xd1\\x8d\\x05\\xc8\\xb7\\x74\\x60\\x9e\\x1f\\x63\\x7d\\x5b\\x70\\x50\\x1b\"\n\"\\x47\\x8c\\x05\\x40\\x57\\x5f\\x4d\\x53\\xb5\\x65\\xc8\\xc8\\xb7\\xb3\\xc1\\x97\\x89\\x96\\x87\\x94\\x1f\\x81\\xa2\\x8b\\x8b\\x90\\x1a\\x95\\x93\\x90\\x9b\\x8d\"\n\"\\x1e\\xcc\\x94\\x92\\x8d\\xea\\xb1\\xf7\\xc9\\xfb\\x06\\x18\\x7d\\xb3\\xa9\\x85\\xab\\x1b\\xb5\\xa4\\x95\\xa8\\xa7\\x1f\\xfd\\xa9\\xf8\\x08\\x15\\xb5\\xab\\x6e\"\n\"\\x63\\x64\\x70\\x70\\x64\\x5f\\x69\\xaa\\xb2\\xb1\\xa8\\xa6\\xb4\\x1f\\x94\\xfb\\xdd\\x15\\xb2\\xa6\\x70\\x65\\x60\\x6e\\x6f\\x5d\\x64\\x6f\\xa5\\xaf\\xb2\\xae\"\n\"\\xae\\xb4\\x1f\\x0e\\xf7\\x1b\\xf8\\xfd\\xf8\\xcb\\x15\\x2f\\x93\\x26\\xfb\\x06\\x05\\x91\\x5e\\x4c\\x91\\x7d\\x1b\\x5b\\x8a\\x05\\x7e\\x83\\x90\\x94\\x8e\\x8d\"\n\"\\x94\\x8e\\x99\\x1f\\x8c\\x90\\x8c\\x90\\x91\\x1a\\xbe\\x65\\xaf\\x55\\x4f\\x56\\x5a\\x52\\x5d\\xb1\\x65\\xba\\x9b\\xa2\\x8f\\x90\\xa2\\x1e\\x92\\xa7\\xa3\\x8f\"\n\"\\x9b\\x1b\\xaf\\xbf\\x72\\x68\\xad\\x1f\\x75\\x5d\\x44\\x53\\x56\\x7f\\x3f\\x79\\x8b\\x8b\\x7c\\x84\\x08\\x61\\x77\\x71\\x66\\x65\\x1a\\x5d\\xb0\\x67\\xb9\\xc8\"\n\"\\xc2\\xbe\\xc4\\x9b\\x88\\x94\\x7e\\xa5\\x1e\\x89\\x90\\x8a\\x8f\\x8e\\x1a\\x95\\x8d\\x8d\\xcc\\xa4\\x1e\\xa9\\x96\\xac\\xa3\\xba\\xb9\\xf7\\x9d\\x7c\\x18\\x8a\"\n\"\\x9c\\x9f\\x8a\\x96\\x1b\\xcb\\xcb\\x9e\\xb5\\xd5\\x1f\\xfc\\x36\\xc1\\x05\\xfb\\xe2\\xfb\\x77\\x15\\xa6\\xa1\\x73\\x6c\\x64\\x61\\x65\\x60\\x6d\\x72\\xa5\\xa9\"\n\"\\xb1\\xb9\\xb1\\xb8\\x1f\\x62\\xf7\\xfa\\x15\\xb1\\xa6\\x72\\x67\\x62\\x67\\x6b\\x5c\\x67\\x6f\\xa4\\xab\\xb3\\xb2\\xb0\\xb6\\x1f\\x0e\\xf7\\x21\\xf7\\x4a\\xf7\"\n\"\\x7a\\x15\\x59\\x63\\x64\\x5a\\x59\\xb2\\x63\\xbd\\xbc\\xb3\\xb3\\xbc\\xbc\\x63\\xb3\\x5b\\x1f\\x91\\x72\\x15\\xab\\xa5\\x6e\\x67\\x67\\x71\\x6f\\x6a\\x68\\x6e\"\n\"\\xa8\\xaf\\xae\\xa8\\xa8\\xaf\\x1f\\x84\\xf8\\x46\\x15\\x59\\x63\\x63\\x5b\\x59\\xb2\\x63\\xbc\\xbd\\xb2\\xb3\\xbc\\xbb\\x64\\xb4\\x5b\\x1f\\x8e\\x72\\x15\\xab\"\n\"\\xa5\\x6f\\x68\\x68\\x71\\x6f\\x6a\\x69\\x6f\\xa8\\xad\\xae\\xa8\\xa7\\xad\\x1f\\xf7\\xb2\\xfb\\x69\\x15\\x72\\x77\\x75\\x6d\\x6e\\x9e\\x74\\xa4\\xa4\\xa0\\xa4\"\n\"\\xa8\\xa7\\x77\\xa1\\x72\\x1f\\x8d\\x78\\x15\\x98\\x96\\x7f\\x7b\\x79\\x7f\\x7c\\x7d\\x7c\\x81\\x98\\x9c\\x9d\\x97\\x98\\x9a\\x1f\\xf8\\x6d\\xf7\\x2d\\x15\\xc0\"\n\"\\x5a\\x65\\x9d\\x53\\x1b\\x58\\x52\\x79\\x65\\x4a\\x1f\\xfb\\x36\\x2c\\x05\\x9f\\x74\\x7d\\x92\\x7c\\x1b\\x87\\x85\\x8a\\x89\\x84\\x1f\\x83\\x6b\\x7b\\x89\\x76\"\n\"\\x1b\\x7e\\x85\\x8c\\x8f\\x81\\x1f\\xa0\\xab\\x94\\xa3\\xa7\\x1a\\xd4\\x49\\xc7\\x39\\x33\\x50\\x50\\x33\\x58\\x9f\\x60\\xb0\\x70\\x1e\\xaa\\x75\\xb4\\x80\\xd0\"\n\"\\x88\\xc7\\x88\\x94\\x89\\x9b\\x84\\x08\\x97\\x85\\x93\\x7f\\x7e\\x1a\\x71\\x71\\x7d\\x59\\x89\\x1e\\x2e\\x89\\x6d\\x85\\x66\\x74\\x08\\x61\\x71\\x75\\x61\\x54\"\n\"\\x1a\\x32\\xc5\\x50\\xe3\\xe0\\xc7\\xc3\\xd8\\xaa\\x83\\xa3\\x76\\xac\\x1e\\x8e\\x9c\\x93\\x8d\\x94\\x1b\\x96\\x9d\\x88\\x88\\x9f\\x1f\\x89\\x93\\x93\\x8a\\x91\"\n\"\\x1b\\x91\\x8f\\x8c\\x8e\\x8f\\x1f\\xbb\\xa9\\xf7\\x53\\xfb\\x13\\x05\\x6f\\xb6\\xc5\\x77\\xb2\\x1b\\xc3\\xc2\\xa2\\xb1\\xac\\x1f\\xfb\\xd6\\xf7\\x60\\x05\\xfb\"\n\"\\x58\\x35\\x15\\x87\\x85\\x84\\x8a\\x84\\x1b\\x45\\x8d\\x05\\x6b\\x69\\x7b\\x7c\\x87\\x8c\\x86\\x8e\\x88\\x1f\\x9e\\x74\\x91\\x7b\\x6f\\x1a\\x46\\x5b\\x5a\\x47\"\n\"\\x43\\x5c\\xbb\\xd5\\xdd\\xbe\\xb9\\xe7\\x1e\\xc4\\x06\\xd0\\xa8\\xa0\\xbb\\x8c\\x8b\\x8e\\x8a\\x8d\\x1f\\xf7\\xb9\\xf7\\x3f\\xc2\\xab\\x8b\\x8b\\x96\\x90\\x19\"\n\"\\x9c\\xb0\\xa9\\x94\\xa6\\x1b\\xaf\\xa6\\x7f\\x6d\\xae\\x1f\\xfc\\x37\\xfb\\xa9\\x15\\xf2\\xca\\xf7\\xc5\\xfb\\x56\\x05\\x70\\x68\\x71\\x80\\x6b\\x1b\\x5e\\x62\"\n\"\\x9c\\xbb\\x42\\x1f\\xfb\\xc0\\xf7\\x75\\x15\\x7e\\x9e\\x6d\\x97\\x64\\x8c\\x08\\x48\\x06\\x37\\x54\\xbd\\xd8\\xd3\\xbb\\xbe\\xcf\\xd0\\xbe\\x5b\\x4a\\x76\\x86\"\n\"\\x77\\x82\\x7e\\x1f\\x7c\\x74\\x8b\\x8b\\x85\\x1a\\x7a\\xa4\\x82\\xb9\\x99\\x96\\x8c\\x8d\\x90\\x1e\\x95\\xad\\x8b\\x8b\\x96\\x1b\\x98\\x92\\x87\\x7d\\x94\\x1f\"\n\"\\x0e\\xfb\\x0c\\xf7\\x37\\xf7\\x1e\\x15\\xf8\\x1c\\x06\\x98\\x8c\\x8c\\x8b\\x8c\\x8c\\x8e\\x8c\\x8e\\xa2\\x8c\\xaf\\x5a\\xf7\\x21\\x7d\\xab\\x78\\x9e\\x08\\x6d\"\n\"\\xad\\x8b\\x8b\\x99\\x1a\\x96\\x8b\\x92\\x8d\\x97\\x1e\\xac\\x84\\x97\\x81\\x95\\x71\\x08\\x85\\xa9\\xa6\\x88\\xbb\\x1b\\xa6\\x94\\x8c\\x8f\\x9f\\x1f\\x87\\xbc\"\n\"\\x82\\xa4\\x78\\x99\\x08\\xa9\\x66\\xfb\\x1b\\xa4\\xfb\\x0c\\x1b\\xfb\\x0d\\xfb\\x1a\\x72\\x6d\\x65\\x1f\\x79\\x7d\\x82\\x72\\x86\\x5a\\x08\\x87\\xa0\\x93\\x8a\"\n\"\\xa7\\x1b\\xba\\xa7\\x8e\\x91\\xa9\\x1f\\x95\\xa5\\x97\\x95\\xab\\x92\\x08\\x8d\\x7f\\x8c\\x84\\x80\\x1a\\x7e\\x8a\\x8a\\x81\\x80\\x1e\\x84\\x82\\x83\\x83\\x83\"\n\"\\x82\\x81\\x7f\\x8a\\x89\\x87\\x83\\x68\\x35\\x88\\x85\\x71\\x40\\x8d\\x5c\\x8d\\x7e\\x92\\x8a\\x08\\xf7\\x08\\xf7\\xe1\\x15\\x93\\xcd\\x8c\\x8b\\xa4\\x1b\\xa5\"\n\"\\x8b\\x8b\\x83\\xcd\\x1f\\x7a\\x62\\x05\\x8d\\x62\\x7a\\x8c\\x7a\\x1b\\x7b\\x79\\x8a\\x89\\x62\\x1f\\xd9\\x6d\\x15\\xbf\\xb6\\x5f\\x57\\x55\\x60\\x60\\x55\\x56\"\n\"\\x5f\\xb6\\xc1\\xc1\\xb7\\xb5\\xc2\\x1f\\xf7\\xd7\\x92\\x15\\x86\\x75\\x7d\\x89\\x66\\x1b\\x6c\\x7c\\x8c\\x91\\x64\\x1f\\x70\\x92\\x97\\x87\\xde\\x1b\\xb6\\x8e\"\n\"\\x8d\\xa8\\x95\\x1f\\xfd\\x1f\\x16\\x6f\\x96\\x90\\x88\\xae\\x1b\\xb3\\xac\\x8d\\x8f\\x98\\x1f\\x98\\x8e\\x8e\\x8f\\x91\\x9d\\x08\\x86\\x67\\x6b\\x89\\x63\\x1b\"\n\"\\x71\\x85\\x8c\\x91\\x78\\x1f\\x0e\\x59\\xf7\\x2d\\xf7\\x17\\x15\\x51\\xce\\x70\\xd0\\xdb\\x1a\\xf7\\x45\\xf7\\x28\\xf7\\x26\\xf7\\x46\\xf7\\x48\\xf7\\x29\\xfb\"\n\"\\x26\\xfb\\x45\\xfb\\x4a\\xfb\\x2d\\xfb\\x25\\xfb\\x53\\x2e\\x48\\xb3\\xc2\\x9a\\x91\\x98\\x91\\x8c\\x8e\\x8a\\x8a\\x8d\\x1e\\x88\\x90\\x94\\x88\\x91\\x1b\\xa5\"\n\"\\xc3\\xd3\\xae\\x90\\x89\\x8e\\x87\\x8f\\x1f\\x7d\\x98\\x88\\x92\\x96\\x1a\\xa9\\xbc\\xf4\\xa8\\xaa\\x1e\\x9a\\x9b\\x91\\x8e\\xa1\\x8e\\x96\\x8d\\x8f\\x8d\\x90\"\n\"\\x92\\x08\\x9f\\xa5\\x97\\xb3\\xb4\\x1a\\x99\\x83\\x8f\\x6e\\x62\\x84\\x88\\x63\\x69\\x1e\\x2f\\x23\\x41\\xfb\\x3c\\x25\\x1a\\x82\\x8c\\x84\\x8e\\x88\\x1e\\x92\"\n\"\\x84\\x8c\\x89\\x89\\x1a\\x89\\x89\\x89\\x89\\x88\\x1e\\x7f\\x7b\\x86\\x7d\\x78\\x1a\\x47\\xdc\\x58\\xf7\\x01\\xf7\\x63\\xf7\\x37\\xf7\\x32\\xf7\\x5c\\xf7\\x5a\"\n\"\\xfb\\x37\\xf7\\x38\\xfb\\x5a\\xfb\\x57\\xfb\\x38\\xfb\\x36\\xfb\\x54\\x37\\xb1\\x2a\\xbc\\x61\\x1e\\x85\\x92\\x94\\x88\\x93\\x1b\\x8e\\x8f\\x8b\\x8e\\x92\\x1f\"\n\"\\xf7\\xf3\\xf8\\x68\\x15\\x87\\x53\\x7f\\x69\\x71\\x68\\x08\\x86\\x98\\x97\\x89\\x9a\\x1b\\x9a\\x8c\\x8c\\x9c\\x95\\x1f\\x9a\\xa6\\x91\\x9f\\xa6\\x1a\\x95\\x8a\"\n\"\\x8c\\x84\\x92\\x1e\\x7e\\x97\\x81\\x90\\x7d\\x90\\x08\\xfb\\x2f\\xfb\\xf9\\x15\\x7b\\x54\\x74\\x6a\\x64\\x74\\x08\\x80\\x9b\\xa0\\x82\\x94\\x1b\\xa2\\xb8\\xc8\"\n\"\\xa9\\x93\\x86\\x91\\x75\\x9d\\x1f\\x0e\\x5a\\xf8\\xfd\\xf7\\x26\\x15\\x99\\x95\\xae\\xc2\\x90\\xa0\\xfb\\x25\\xf7\\x09\\x18\\x58\\x6f\\x5e\\x5f\\x76\\x1e\\xfb\"\n\"\\xe6\\x98\\x15\\x96\\x6c\\xa3\\x62\\x9c\\x7a\\xf7\\x3a\\xd7\\x18\\x5d\\xa6\\x75\\xb2\\xc4\\x1a\\xf7\\x43\\xf7\\xb0\\x15\\x90\\x7c\\x81\\x8c\\x76\\x1b\\x76\\x7c\"\n\"\\x89\\x87\\x7d\\x1f\\x76\\xfb\\x4d\\x05\\x9a\\xa4\\xa1\\x92\\xa6\\x1b\\xa8\\xa0\\x84\\x7c\\xa0\\x1f\\x43\\x84\\x15\\x52\\x5e\\x5e\\x53\\x53\\xb8\\x5e\\xc3\\xc3\"\n\"\\xb8\\xb8\\xc3\\xc2\\x5e\\xb9\\x54\\x1f\\x8f\\xf7\\x97\\x15\\xfb\\x5f\\xfb\\x37\\x26\\x0a\\xfb\\x5e\\xf7\\x34\\xfb\\x35\\xf7\\x5c\\xf7\\x5b\\xf7\\x35\\xf7\\x35\"\n\"\\xf7\\x5b\\xf7\\x58\\x25\\x0a\\x71\\x04\\xd7\\xde\\x6a\\x56\\xc5\\x1f\\xd4\\x49\\xb1\\x35\\x2b\\x1a\\xfb\\x4c\\xfb\\x2a\\xfb\\x2a\\xfb\\x4c\\xfb\\x4e\\xfb\\x28\"\n\"\\xf7\\x29\\xf7\\x50\\xdb\\xaa\\xdb\\xc2\\xc7\\x1e\\xd5\\xce\\xe0\\xb0\\xf1\\x1b\\x0e\\x5b\\xae\\xf7\\xef\\x15\\xae\\x7e\\x6a\\xfb\\x0b\\xbe\\x92\\xd5\\xee\\x05\"\n\"\\x86\\xb9\\xde\\x84\\x91\\x1b\\xc3\\x8a\\x8b\\x8b\\x94\\x87\\x08\\x94\\x87\\x90\\x83\\x80\\x1a\\x81\\x8a\\x87\\x75\\x38\\x1e\\x34\\xfb\\x59\\x05\\xb0\\x06\\x9f\"\n\"\\x8c\\x8f\\x8d\\x9c\\xa4\\xb2\\xc1\\x18\\xc8\\x06\\x91\\x90\\x93\\x94\\x93\\x86\\x94\\x85\\x1f\\x6a\\x06\\xbc\\xd0\\x05\\xc7\\x06\\x91\\x91\\x93\\x93\\x94\\x85\"\n\"\\x94\\x84\\x1f\\x6c\\x06\\xd5\\xee\\x93\\x8c\\x8b\\x8b\\xb6\\x8d\\x19\\xb1\\x8c\\x97\\x8c\\xa6\\x8e\\x08\\xbb\\x91\\xa2\\x96\\x9d\\x1a\\x9e\\x5f\\x97\\x3f\\x8f\"\n\"\\x1e\\x45\\x8d\\x82\\x8c\\x41\\xef\\x05\\xaa\\x06\\x92\\x91\\x93\\x94\\x94\\x85\\x93\\x85\\x1f\\x4f\\x06\\x5a\\xd0\\x05\\xac\\x06\\x91\\x90\\x93\\x94\\x93\\x86\"\n\"\\x93\\x85\\x1f\\x4e\\x06\\x64\\xc2\\x7a\\xa3\\x87\\x8e\\x77\\x8c\\x19\\x66\\x06\\xe2\\xfb\\x59\\x05\\xa0\\x3b\\x8d\\x83\\x81\\x1a\\x7a\\x7f\\x82\\x71\\x8a\\x1e\"\n\"\\x62\\x8a\\x05\\x81\\x76\\x89\\x88\\x6b\\x1f\\x77\\x89\\x77\\x89\\x77\\x8a\\x7f\\x89\\x18\\x41\\xee\\x58\\x93\\xac\\xfb\\x0b\\x05\\x0e\\xfb\\x29\\xf9\\x23\\xf8\"\n\"\\xc0\\x15\\xfd\\x00\\xfc\\x37\\xf9\\x00\\x06\\xfc\\xed\\xf8\\x0e\\x15\\xf7\\x64\\xfb\\x36\\x05\\x85\\x07\\x85\\x07\\xfb\\x64\\xfb\\x36\\x05\\xf8\\xda\\x74\\x15\"\n\"\\xfc\\xda\\x06\\xf7\\x64\\xf7\\x36\\x05\\x67\\x9b\\xa8\\x78\\xb1\\x1b\\xb1\\xa8\\x9e\\xaf\\x9b\\x1f\\xf7\\x64\\xf7\\x59\\x15\\xfb\\xe4\\x07\\xfb\\x64\\xf7\\x36\"\n\"\\x05\\x91\\x07\\x91\\x07\\xf7\\x64\\xf7\\x4c\\x15\\xfb\\x64\\xfb\\x36\\x05\\xaf\\x7b\\x6e\\x9e\\x65\\x1b\\x65\\x6e\\x78\\x67\\x7b\\x1f\\xfb\\x64\\xf7\\x36\\x05\"\n\"\\x0e\\xf7\\x0d\\xf9\\x2a\\xf8\\x3c\\x15\\xa0\\xb3\\x85\\x83\\xad\\x1f\\x82\\xb2\\x93\\x89\\x9e\\x1b\\xa2\\xaf\\x90\\x8f\\x9c\\x1f\\x9d\\x90\\x93\\x92\\x96\\x1a\"\n\"\\x98\\x7f\\x97\\x6e\\x9a\\x1e\\x66\\x9e\\xfb\\x00\\xb3\\x5b\\x97\\x08\\x96\\x5d\\xfb\\x19\\x9a\\x58\\x1b\\x73\\x7e\\x88\\x80\\x71\\x1f\\x5d\\x78\\x5c\\x74\\x6c\"\n\"\\x7a\\x6e\\x7b\\x84\\x89\\x67\\x88\\x5b\\x87\\x8a\\x8b\\x80\\x82\\x08\\x74\\x79\\x7b\\x55\\x50\\x1a\\x5b\\x97\\x54\\x9b\\x72\\x1e\\x8f\\x84\\x8b\\x8b\\xba\\x82\"\n\"\\xa1\\x88\\x97\\x8a\\x9c\\x89\\x9f\\x89\\x8d\\x8b\\x91\\x89\\x90\\x89\\x90\\x88\\x95\\x85\\x08\\x61\\xd7\\x8d\\x8a\\xb5\\x1b\\xad\\xcf\\x94\\x99\\xc7\\x1f\\xb0\"\n\"\\x93\\x9c\\x9a\\xa6\\x1a\\x93\\x8a\\x92\\x8a\\x94\\x1e\\xaa\\x95\\x95\\x95\\xa3\\x1a\\x9d\\x87\\x95\\x7c\\x9b\\x1e\\xae\\x99\\x9c\\x9c\\xa1\\x1a\\xa0\\x83\\x95\"\n\"\\x66\\xac\\x1e\\xfc\\x8b\\xd1\\x15\\x97\\x83\\x86\\x8f\\x82\\x1b\\x5c\\x66\\x36\\xfb\\x00\\x21\\xa9\\x4a\\xbb\\x96\\x93\\x8e\\x96\\x94\\x1f\\x8a\\x88\\x89\\x8b\"\n\"\\x8a\\x1b\\x5b\\x6f\\xc5\\xef\\xd2\\x9c\\xcd\\xa3\\xa4\\x1f\\x97\\x97\\x92\\x8d\\xa1\\x8c\\x08\\x0e\\xef\\xae\\xf8\\x8f\\x15\\xfb\\xee\\x07\\xf5\\x7e\\x96\\xa4\"\n\"\\x05\\xde\\xbc\\x06\\xa2\\x8a\\xa0\\x88\\x91\\x88\\x92\\x89\\x9b\\x83\\xa4\\x7d\\x08\\x72\\xb9\\xa2\\x86\\xc8\\x1b\\xb5\\x06\\x95\\x06\\x78\\x98\\x9e\\x82\\xa9\"\n\"\\x1b\\xd4\\xd1\\xb3\\xb4\\x99\\x85\\x97\\x78\\xa1\\x1f\\x93\\x95\\x8c\\x90\\x97\\x1a\\xa3\\x82\\x9c\\x73\\x9a\\x1e\\x90\\x96\\x8d\\x91\\x91\\x1a\\x97\\x86\\x94\"\n\"\\x7e\\x9a\\x1e\\xa9\\xea\\x90\\x8f\\xa8\\x1f\\xc8\\x91\\xa8\\x9d\\xaa\\x1a\\xa0\\x78\\xa0\\x6b\\x98\\x1e\\x99\\x68\\xfb\\x02\\x94\\xfb\\x15\\x1b\\x70\\x79\\x8a\"\n\"\\x87\\x69\\x1f\\x98\\x78\\x7b\\x90\\x76\\x1b\\x6c\\x6d\\x80\\x6d\\x5d\\x1f\\x71\\x61\\x76\\x82\\x72\\x1b\\x86\\x89\\x8b\\x8c\\x84\\x1f\\xad\\x07\\x2b\\x69\\x15\"\n\"\\xca\\xfb\\xa4\\x56\\x06\\xe1\\xf7\\x81\\x15\\xae\\x8c\\x96\\x8f\\xa9\\x9d\\xbf\\xac\\x8b\\x8b\\x9a\\x93\\x08\\x97\\xa5\\xa0\\x92\\x99\\x1b\\xa0\\xa2\\x81\\x7c\"\n\"\\x9a\\x1f\\xd2\\x44\\x05\\x97\\x7e\\x93\\x7d\\x81\\x1a\\x7b\\x78\\x7d\\x76\\x75\\x7d\\x92\\xa4\\x6e\\x1e\\x51\\xbc\\x7f\\x7d\\xb5\\x55\\x05\\x70\\x73\\x6c\\x7d\"\n\"\\x6a\\x1b\\x7f\\x77\\x8e\\x90\\x75\\x1f\\x7e\\x8e\\x83\\x7c\\xce\\x74\\x05\\xc1\\x06\\x99\\x5d\\x94\\x81\\xae\\x85\\x8c\\x69\\x95\\x7c\\xa4\\x86\\x08\\x7e\\x07\"\n\"\\x8a\\x75\\x82\\x8b\\x7f\\x1b\\x56\\x62\\x94\\x9f\\x6b\\x1f\\x84\\x90\\x83\\x90\\x83\\x90\\x7d\\x93\\x80\\x91\\x84\\x8e\\x7d\\x8f\\x80\\x8d\\x73\\x8c\\x08\\xf7\"\n\"\\xbf\\xf7\\x9d\\x15\\x8e\\xb4\\x9f\\x8c\\xa3\\x1b\\xde\\xf3\\x83\\x83\\xa5\\x1f\\xa5\\x83\\x98\\x7f\\x7d\\x1a\\x82\\x85\\x82\\x82\\x87\\x1e\\x83\\x77\\x29\\x85\"\n\"\\x2b\\x1b\\x86\\x7e\\x8b\\x8c\\x78\\x1f\\xa3\\x62\\x15\\x98\\x82\\x8f\\x85\\x82\\x1a\\x79\\x7e\\x7e\\x66\\x7b\\x1e\\x73\\x58\\x59\\x79\\x7c\\x1b\\x77\\x79\\x9b\"\n\"\\x9d\\xa0\\xa6\\xa7\\xa0\\x8d\\x8f\\x8a\\x89\\x90\\x1f\\x85\\x9b\\x99\\x89\\x9a\\x1b\\xaa\\xa5\\x96\\xa4\\xa1\\x1f\\x8d\\x8e\\x8b\\x8b\\x8d\\x8d\\x08\\x9f\\x3f\"\n\"\\x15\\x96\\x97\\x7e\\x7e\\x77\\x78\\x76\\x6f\\x80\\x1f\\x7e\\x6b\\x61\\x80\\x76\\x1b\\x7c\\x7e\\x96\\x99\\x99\\x90\\x8f\\xa7\\x93\\x1f\\x90\\x8c\\x96\\x90\\x9a\"\n\"\\x92\\x08\\xb1\\xd9\\x8b\\x8b\\x90\\x1b\\x4c\\xfb\\x06\\x15\\x8e\\x97\\x94\\x8d\\x8c\\x1b\\xa3\\x96\\x9a\\x92\\x97\\x91\\x08\\x8e\\x8f\\x8e\\x8c\\x8c\\x1b\\x93\"\n\"\\x96\\x79\\x7f\\x74\\x4d\\x6d\\x5b\\x73\\x79\\x97\\x9b\\x93\\x8d\\x8d\\x9a\\x8e\\x1f\\x0e\\xfb\\xb6\\xf7\\xcc\\xf8\\x55\\x15\\x7f\\xa8\\x84\\xa0\\x7c\\xb6\\x08\"\n\"\\xf7\\x0f\\x62\\x72\\xb4\\x69\\x1b\\x6c\\x6e\\x6e\\x6b\\x76\\x9d\\x49\\x9e\\x56\\x1f\\xa9\\x3a\\x8c\\x88\\x90\\x78\\x08\\x91\\x7c\\x7f\\x8f\\x83\\x1b\\x6d\\x63\"\n\"\\x63\\x6e\\x7d\\x8e\\x79\\x90\\x77\\x1f\\x67\\x6e\\x6d\\x64\\x5f\\xa0\\x50\\xab\\x5c\\x1f\\x56\\xb0\\xc9\\x6e\\xdb\\x1b\\xd9\\xde\\xb5\\xc7\\xb7\\x1f\\xa9\\xb5\"\n\"\\x9f\\xcf\\xc6\\x1a\\xb3\\x85\\xae\\x7e\\xa9\\x1e\\x84\\x9d\\x84\\x90\\x72\\x91\\x88\\x8c\\x81\\x8e\\x81\\x8e\\x08\\xc0\\xf7\\x2a\\x97\\xb4\\xb1\\x1a\\xac\\x74\"\n\"\\xa6\\x70\\x81\\x80\\x87\\x83\\x82\\x1e\\x71\\x76\\x7e\\x73\\x71\\x42\\x85\\x7c\\x79\\x5c\\x78\\x59\\x08\\xfb\\x7e\\xfb\\x8e\\x15\\x74\\x07\\x98\\x73\\x98\\x77\"\n\"\\x95\\x82\\x08\\x7a\\x9e\\xa6\\x7e\\x9d\\x1b\\x94\\x9a\\x91\\x92\\x94\\x1f\\x95\\x93\\x8f\\x93\\x9b\\x1a\\x8f\\x8b\\x92\\x8a\\x92\\x1e\\xa1\\x06\\x90\\x5a\\x90\"\n\"\\x80\\xab\\x6c\\x95\\x94\\x18\\x8a\\x90\\x8a\\x90\\x8a\\x8d\\x08\\x83\\xa9\\x86\\x9f\\x92\\x1a\\xa0\\xa8\\xbc\\xa8\\xa7\\x1e\\xa4\\xa5\\x9c\\x93\\xb1\\x92\\x08\"\n\"\\xa6\\x07\\x76\\x8b\\x8b\\x86\\x5b\\x1f\\x81\\x8a\\x55\\x99\\x7c\\x92\\x08\\x79\\x94\\x7b\\xa2\\x9b\\x1a\\x92\\x8e\\x96\\x90\\x97\\x1e\\xa7\\x82\\x8b\\x8b\\xb0\"\n\"\\x85\\xf7\\x15\\x75\\x8b\\x8b\\x8f\\x89\\x08\\xa8\\x7d\\x97\\x72\\x5a\\x1a\\xfb\\x26\\x2c\\x25\\xfb\\x1c\\x5b\\x5b\\x98\\xa0\\x73\\x1e\\x7e\\x96\\x69\\xc0\\x85\"\n\"\\x9b\\x08\\x74\\xd3\\x8b\\x8b\\x90\\x1a\\x9d\\xa5\\xa5\\x9d\\x9b\\x8f\\x86\\x57\\xae\\x1e\\xb0\\x54\\x8b\\x8b\\x86\\x1a\\x81\\x79\\x7f\\x7e\\x75\\x60\\xb6\\xac\"\n\"\\x7f\\x1e\\xf7\\x59\\xf7\\x76\\x15\\x8e\\x7c\\x80\\x8c\\x83\\x1b\\x85\\x80\\x89\\x89\\x7e\\x1f\\x86\\x94\\x8b\\x8b\\x7d\\xb2\\x08\\x61\\xf7\\x07\\x84\\xa1\\xac\"\n\"\\x1a\\x9a\\x95\\x97\\x97\\x97\\x93\\x84\\x7a\\x94\\x1e\\x97\\x73\\xb4\\xfb\\x04\\xa7\\x36\\x08\\xc4\\x16\\xf7\\x71\\xd7\\x91\\x98\\xa3\\x1b\\x96\\x95\\x7f\\x7d\"\n\"\\x76\\x65\\xfb\\x14\\x6e\\x44\\x1f\\xfb\\x8f\\x63\\x15\\xa0\\x87\\x93\\x85\\x94\\x7d\\x08\\xb3\\x4d\\xaa\\x4d\\x7c\\x1a\\x81\\x80\\x80\\x7f\\x80\\x7a\\x96\\x9a\"\n\"\\x7d\\x1e\\x65\\xb5\\x67\\xc7\\x9f\\x1a\\x95\\x90\\x92\\x9c\\x98\\x1e\\x8f\\x8e\\x8b\\x8c\\x8f\\x8d\\x08\\xf7\\x1d\\xfb\\x1e\\x15\\x74\\xc2\\xa5\\x83\\x96\\x89\"\n\"\\xaa\\x87\\x19\\x0e\\x9b\\xdd\\xf7\\x5e\\x15\\x98\\x7a\\x53\\xfb\\x03\\x05\\x88\\x85\\x89\\x87\\x8a\\x1a\\x89\\x8e\\x89\\x8d\\x8d\\x8e\\x8c\\x8d\\x90\\x1e\\xe3\"\n\"\\xab\\xbf\\xc3\\x05\\x7b\\xc7\\xa6\\x86\\xae\\x1b\\x9e\\xad\\x8e\\x91\\xd4\\x1f\\xf3\\x80\\xe7\\xa2\\x99\\x53\\x05\\xf7\\x2a\\x06\\xa2\\xf7\\x22\\x05\\xf2\\x07\"\n\"\\x74\\xd2\\xfb\\x2a\\x94\\x7d\\x77\\x6d\\x8c\\x80\\x8f\\x74\\x9a\\x19\\x2f\\xc6\\xd5\\xdf\\x05\\x90\\x91\\x8d\\x8f\\x92\\x1a\\xa6\\x77\\xa4\\x75\\x83\\x82\\x88\"\n\"\\x86\\x87\\x1e\\x35\\x2b\\x4f\\xae\\x4a\\x6e\\x65\\x6f\\x30\\x35\\x19\\x74\\x48\\x87\\x7d\\x80\\x5d\\x08\\xf8\\xa2\\xe1\\x15\\x96\\x57\\x8e\\x72\\x6b\\x1a\\x72\"\n\"\\x89\\x75\\x83\\x5e\\x1e\\x79\\x4f\\x71\\x86\\x71\\x1b\\x78\\x81\\x8c\\x95\\x50\\x1f\\x6f\\x87\\x74\\x88\\x7d\\x88\\x08\\x86\\x73\\x78\\x88\\x80\\x1b\\x81\\x62\"\n\"\\x92\\x8d\\x85\\x1f\\x89\\x8c\\x89\\x8d\\x8c\\x1a\\x8c\\x8d\\x8c\\x8d\\x8d\\x8c\\x08\\x97\\x95\\x8f\\x91\\x96\\x1a\\x9f\\x7a\\x9e\\x78\\x89\\x8a\\x8a\\x8a\\x8b\"\n\"\\x8b\\x8a\\x8c\\x8a\\x1e\\x94\\x80\\x90\\x7c\\x7f\\x1a\\x7c\\x85\\x81\\x83\\x1e\\x7d\\x8c\\x05\\x77\\x06\\x7d\\x82\\x94\\x98\\x9f\\x96\\x9d\\x9b\\x93\\x1f\\xa7\"\n\"\\x98\\x9f\\x98\\x8d\\x8b\\xa1\\x8c\\x19\\xf7\\x10\\x06\\xa1\\x9e\\x8f\\x90\\x91\\x9c\\x08\\x7a\\x62\\x76\\x84\\x77\\x1b\\x7d\\x8c\\xba\\xc0\\x8c\\x94\\x8c\\x93\"\n\"\\x8c\\x8f\\x19\\x8c\\x93\\x8c\\x90\\x8e\\x1a\\x8e\\x89\\x91\\x88\\x95\\x1e\\xc7\\xd1\\xf7\\x0c\\x45\\x05\\xfb\\xef\\x4e\\x15\\x71\\x49\\x85\\x7c\\x78\\x75\\x72\"\n\"\\x76\\x19\\x79\\x06\\xa6\\xc5\\x82\\xa6\\x79\\x95\\xa6\\xe5\\x8f\\x97\\x8c\\x8c\\xa0\\x9e\\x19\\xd6\\xcd\\x05\\x9f\\xa1\\xc0\\xaa\\x96\\x1b\\x93\\x94\\x85\\x74\"\n\"\\xa9\\x1f\\xfb\\xcd\\xfc\\x3c\\x15\\x8a\\x88\\x88\\x8b\\x88\\x1b\\x84\\x85\\x90\\x92\\x8e\\x8d\\x94\\x8d\\x8e\\x1f\\x9a\\xa5\\x05\\x9c\\x95\\x8b\\x8b\\x90\\x1b\"\n\"\\x94\\xa1\\x6c\\x7d\\x85\\x87\\x87\\x83\\x88\\x1f\\xa0\\xf7\\x55\\x15\\x92\\x84\\x8d\\x86\\x7f\\x1a\\x67\\x7c\\x71\\x77\\x88\\x86\\x8b\\x8c\\x86\\x1e\\xf7\\xb0\"\n\"\\xf7\\x3c\\x15\\x5e\\x6e\\x59\\x71\\x84\\x83\\x8c\\x8d\\x82\\x1e\\xf8\\x5b\\xf7\\x01\\x15\\x9c\\x61\\x92\\x68\\x52\\x1a\\x5a\\x86\\x6b\\x7f\\x5e\\x1e\\x21\\x82\"\n\"\\x05\\x9b\\xc2\\x92\\xbb\\xbe\\x1a\\xa7\\x89\\x99\\x81\\xd4\\x1e\\x0e\\xd3\\xf7\\x56\\xf8\\xbe\\x15\\x6a\\x64\\x58\\x61\\x78\\x9a\\x7a\\x9b\\xaa\\xb1\\xbe\\xb6\"\n\"\\x9e\\x7e\\x9b\\x7c\\x1f\\xd2\\xe2\\x15\\xfb\\x29\\x72\\x3a\\xfb\\x1c\\xb4\\xfb\\x2e\\xf8\\x46\\xfb\\x99\\x9b\\x82\\x93\\x88\\xa8\\x89\\x19\\xf7\\xa9\\x06\\xa3\"\n\"\\x97\\x93\\x9b\\x91\\x89\\x8f\\x86\\x95\\x1f\\xfb\\x23\\xf7\\x8f\\x80\\x9f\\x86\\x90\\x7b\\x94\\x19\\x81\\x91\\x05\\xfc\\x3f\\xf7\\x7a\\x15\\xad\\xfb\\x0b\\x42\"\n\"\\xfb\\x0f\\xfb\\x0d\\x71\\x6a\\xf7\\x16\\xd0\\xf7\\x07\\x05\\xf9\\x29\\xfc\\x33\\x15\\xa1\\x6a\\x8b\\x8a\\x82\\x1a\\x7f\\x7d\\x72\\x7d\\x7f\\x1e\\x84\\x84\\x7d\"\n\"\\x87\\x7c\\x1b\\xfb\\x49\\x06\\xe9\\xca\\xb3\\xd0\\x93\\xf7\\x01\\x08\\xfc\\x3b\\xf7\\xaf\\x15\\xf8\\x1e\\xfb\\x84\\x05\\x8e\\x79\\x8c\\x83\\x7d\\x1a\\x7d\\x8a\"\n\"\\x81\\x88\\x77\\x1e\\xfc\\x02\\xf7\\x6f\\x05\\x7f\\x77\\x15\\xf8\\x05\\xfb\\x73\\x87\\x70\\x67\\x4f\\x74\\x79\\x19\\xfc\\x05\\xf7\\x73\\x05\\x7f\\x77\\x15\\xf8\"\n\"\\x01\\xfb\\x70\\x7b\\x78\\x6a\\x6e\\x7e\\x85\\x19\\xfc\\x32\\xf7\\x91\\x05\\x0e\\xe9\\xf7\\x25\\xf8\\x3c\\x15\\x72\\x7d\\x6f\\x59\\x58\\x98\\x6f\\xa5\\xa4\\x99\"\n\"\\xa7\\xbd\\xbe\\x7d\\xa7\\x72\\x1f\\x82\\xfb\\xaf\\x15\\xf8\\x60\\x06\\x8c\\x9e\\x8c\\x8b\\x8e\\x1b\\x95\\x8d\\x8b\\x8b\\x99\\x95\\xf7\\x75\\xf7\\x31\\x18\\xa9\"\n\"\\x9f\\x8c\\x8d\\x98\\x1a\\x97\\x8a\\x8d\\x6d\\x9f\\x1e\\xfb\\x75\\xf7\\x31\\x88\\x8d\\x88\\x8d\\x87\\x8e\\x19\\x88\\x8e\\x86\\x8c\\x85\\x8c\\x08\\x89\\x83\\x8b\"\n\"\\x8c\\x7e\\x1f\\xfc\\x60\\x06\\x26\\xfb\\x0b\\x05\\xfb\\x40\\x07\\xf7\\x54\\x94\\x15\\x39\\x28\\x39\\xea\\x05\\xf7\\x36\\x07\\xdd\\xea\\xdd\\x29\\x05\\xf8\\x38\"\n\"\\xfb\\x7b\\x15\\xa7\\xc8\\x97\\xbb\\xb8\\x1a\\xb7\\x7f\\xb9\\x6f\\xc9\\x1e\\xf7\\x32\\xfb\\x01\\x05\\x92\\x7a\\x8d\\x81\\x7a\\x1a\\x7a\\x89\\x81\\x84\\x7b\\x1e\"\n\"\\xfb\\x61\\xf7\\x6d\\x15\\x97\\x79\\x97\\x6d\\x96\\x6b\\x08\\xfc\\x14\\x06\\x49\\xdb\\x05\\xd1\\xfb\\x85\\x15\\xf7\\x17\\xf8\\x18\\x07\\x90\\x79\\x8d\\x7c\\x6a\"\n\"\\x1a\\x6b\\x89\\x7c\\x86\\x79\\x1e\\x88\\x6c\\x15\\x7a\\x60\\x87\\x80\\x81\\x75\\x08\\xfc\\x42\\x06\\xcf\\xd7\\x05\\x0e\\xd3\\xf7\\x2d\\xf7\\x9c\\x15\\x7a\\x7d\"\n\"\\x7b\\x78\\x61\\xb2\\x58\\xac\\x9b\\x97\\x9b\\x9e\\xb6\\x66\\xbd\\x6b\\x1f\\xf7\\x04\\xfb\\x6a\\x15\\xf8\\x37\\xf7\\x91\\xa6\\x9a\\x8d\\x8d\\x98\\xa2\\x19\\xf7\"\n\"\\x22\\xf7\\x8d\\x05\\x91\\x95\\x8d\\x90\\x90\\x1a\\x9b\\x7f\\x93\\x73\\x1e\\xfb\\xa9\\x06\\x70\\x89\\x81\\x88\\x7b\\x82\\xfc\\x46\\xfb\\x97\\x18\\x62\\xfb\\x2e\"\n\"\\xdc\\xfb\\x1a\\x05\\xf7\\x21\\x8a\\x15\\xfb\\x10\\xa2\\x46\\xf7\\x07\\xac\\xf7\\x15\\xf7\\x0d\\x71\\xd4\\xfb\\x0f\\x05\\xf8\\x3a\\xf7\\x49\\x15\\x83\\xf7\\x00\"\n\"\\x63\\xd0\\x2d\\xc9\\x08\\xf7\\x49\\x06\\x97\\x9b\\x88\\x87\\x90\\x1f\\x9a\\x7f\\x9b\\x70\\x7e\\x1a\\x81\\x8b\\x8a\\x75\\x6b\\x1e\\xfc\\x8c\\xfc\\x37\\x15\\xa7\"\n\"\\xf3\\xf8\\x02\\xf7\\x6f\\x05\\x8e\\x77\\x8c\\x81\\x7d\\x1a\\x7d\\x8a\\x82\\x88\\x7a\\x1e\\xfc\\x0e\\xfb\\x07\\x15\\x4c\\xf4\\xf8\\x05\\xf7\\x71\\xa2\\x7a\\xaf\"\n\"\\x4f\\x8e\\x70\\x19\\xfc\\x4f\\x2a\\x15\\xfb\\x03\\xa0\\xf8\\x32\\xf7\\x8f\\x98\\x85\\xab\\x6f\\x9b\\x78\\x19\\x0e\\xf5\\xf7\\x3b\\xf8\\x83\\x15\\x3e\\x54\\x4b\"\n\"\\x31\\x50\\xa5\\x5a\\xb7\\x70\\x1f\\x81\\x9c\\x95\\x89\\xa7\\x1b\\xf7\\x33\\x06\\xb6\\x97\\xa3\\xa2\\xad\\x1b\\xa2\\x9e\\x7d\\x69\\xa0\\x1f\\x4e\\xb2\\x99\\x7f\"\n\"\\xb0\\x1b\\xb8\\xc8\\xa6\\xce\\xf7\\x02\\x1f\\xce\\xb4\\xb4\\xa9\\xb6\\xb2\\x3f\\xcb\\x81\\x92\\x61\\xa6\\x08\\xdc\\xfb\\x16\\x4e\\xa7\\x5d\\x1b\\x66\\x75\\x7a\"\n\"\\x60\\x74\\x1f\\x5c\\x74\\x72\\x75\\x6e\\x1b\\x6c\\x75\\xa4\\xbc\\x7e\\x1f\\xf8\\x35\\xfb\\x20\\x15\\x2b\\x06\\xba\\x7f\\x77\\xa2\\x6c\\x1b\\x65\\x6c\\x65\\x5c\"\n\"\\x5e\\xa8\\x66\\xb0\\xab\\xa1\\xa3\\xbc\\x97\\x1f\\xeb\\x42\\x06\\x64\\x58\\x25\\x5b\\x6b\\x1b\\x70\\x77\\x99\\xae\\x76\\x1f\\xc4\\x68\\x77\\x9a\\x65\\x1b\\x60\"\n\"\\x68\\x72\\x63\\x7c\\x1f\\xfb\\x1e\\x06\\x5b\\x60\\xc2\\xc8\\xcd\\xb7\\xc0\\xc2\\x1f\\xf7\\x16\\x06\\x5a\\x9f\\xa9\\x73\\xb4\\x1b\\xb0\\xa1\\x9d\\xc2\\xac\\x1f\"\n\"\\xb6\\xa5\\x9c\\x98\\xaa\\x1b\\xa1\\x9b\\x85\\x72\\xbb\\x1f\\xbb\\x71\\xa3\\x7d\\xa3\\x7a\\x08\\x0e\\xf7\\x1b\\xfa\\x3e\\xf7\\xee\\x15\\x8c\\x87\\x8a\\x8c\\x87\"\n\"\\x1b\\x88\\x8c\\x8b\\x8b\\x84\\x8d\\x40\\x9e\\x5f\\xaf\\x42\\xef\\x08\\xc5\\x61\\x69\\xa2\\x61\\x1b\\x5b\\x5b\\x62\\x53\\x7b\\x1f\\x7f\\x5e\\x8b\\x8b\\x86\\x7e\"\n\"\\x08\\x6e\\x80\\x7e\\x82\\x6f\\x1b\\x73\\x7e\\x93\\xa7\\x7b\\x1f\\xc3\\x6b\\x8b\\x8b\\xfb\\x37\\x1b\\x50\\x79\\x88\\x7f\\x77\\x1f\\x6c\\x77\\x7a\\x5e\\x4c\\x1a\"\n\"\\x4a\\xa0\\x5a\\xae\\x7b\\x1e\\x83\\x9e\\x99\\x8a\\xcc\\x1b\\xf7\\x2c\\x8b\\x8b\\xcb\\xb3\\x1f\\xa0\\x99\\x94\\x91\\xa2\\x1b\\xac\\x9a\\x7c\\x5d\\x98\\x1f\\x9b\"\n\"\\x51\\x8b\\x8b\\x93\\x7e\\x08\\x66\\xa1\\xb0\\x75\\xb2\\x1b\\xb6\\xac\\xa2\\xc6\\xb6\\x1f\\xd5\\xf3\\xb9\\xaf\\xe4\\x9f\\x08\\xfb\\x94\\x9b\\x15\\xd2\\x89\\x05\"\n\"\\xf2\\x85\\x93\\x8a\\x84\\x1a\\x84\\x63\\x86\\x45\\x89\\x1e\\x43\\x89\\x7f\\x8a\\x05\\x68\\x7d\\x76\\x78\\x6e\\x1b\\x68\\x70\\xaa\\xb2\\xb2\\xa7\\xab\\xad\\xa7\"\n\"\\xa1\\x78\\x68\\x99\\x1f\\x0e\\x37\\xf9\\x65\\x23\\x0a\\x53\\x8c\\x47\\x77\\x63\\x6e\\x3e\\x3e\\xfb\\x23\\xfb\\x5b\\x21\\xfb\\x47\\x08\\x74\\x7e\\x85\\x84\\x85\"\n\"\\x1b\\x85\\x84\\x94\\x9b\\x84\\x1f\\x6e\\xd2\\x05\\x9b\\x85\\x86\\x8f\\x7f\\x1b\\x75\\x6b\\x7e\\x75\\x6f\\x1f\\x7e\\x81\\x86\\x83\\x7e\\x1a\\x61\\xad\\x25\\xb1\"\n\"\\x42\\x1e\\x7a\\x93\\x91\\x89\\xb4\\x1b\\xbd\\x97\\x8f\\x9f\\x96\\x1f\\xf6\\xf7\\x5b\\xf7\\x7b\\xf7\\xd6\\xf7\\x29\\xf7\\x32\\x08\\x0e\\x92\\xf9\\xbf\\xf9\\x2f\"\n\"\\x15\\x97\\x07\\xa1\\x86\\x90\\x75\\x76\\x83\\x89\\x7d\\x7a\\x1e\\x39\\x4a\\x5c\\x61\\x31\\x2e\\x4f\\x4d\\x60\\x5f\\x73\\x75\\x3e\\x42\\x18\\x6f\\x6e\\x89\\x8a\"\n\"\\x82\\x1b\\x88\\x84\\x8e\\x8f\\x84\\x1f\\x7f\\x92\\x87\\x94\\x88\\xa0\\x84\\xb5\\x86\\xa9\\x8a\\x92\\x86\\xa7\\x87\\xaa\\x8c\\x8d\\x08\\x9e\\x88\\x90\\x7d\\x95\"\n\"\\x1e\\x90\\x83\\x82\\x8e\\x81\\x1b\\x7c\\x75\\x88\\x85\\x7c\\x1f\\x7c\\x86\\x83\\x84\\x6b\\x64\\x72\\x6d\\x8b\\x8b\\x8a\\x80\\x08\\x89\\x80\\x88\\x57\\x7d\\x1a\"\n\"\\x74\\x8d\\x70\\x8f\\x6b\\x1e\\x93\\x4d\\x90\\x61\\x8c\\x7a\\x8c\\x72\\x8e\\x85\\x95\\x7f\\x9a\\x7b\\x9e\\x7a\\x9e\\x7e\\x08\\x73\\xad\\x98\\x86\\xa1\\x1b\\x9e\"\n\"\\x9a\\x94\\xb1\\xb7\\x1f\\xef\\xe1\\xf7\\x60\\xf7\\x5b\\xcf\\xd9\\xd6\\xe2\\xbf\\xc4\\x9a\\x99\\x9a\\x99\\x94\\x96\\x8e\\x90\\x08\\x0e\\x3e\\xf9\\x6b\\xf9\\x0d\"\n\"\\x15\\x50\\xc6\\xfb\\xb3\\xfb\\xb4\\xfb\\xb3\\xf7\\xb4\\x50\\x50\\xf7\\xb4\\xfb\\xb2\\xfb\\xb4\\xfb\\xb4\\xc6\\x50\\xf7\\xb3\\xf7\\xb5\\xf7\\xb3\\xfb\\xb5\\xc6\"\n\"\\xc6\\xfb\\xb4\\xf7\\xb4\\x05\\x0e\\x3d\\xf9\\x6b\\xf8\\x9a\\x15\\xfb\\x42\\xf7\\x42\\xfb\\x40\\xfb\\x42\\xfb\\x40\\xf7\\x42\\xfb\\x42\\xfb\\x42\\xf7\\x42\\xfb\"\n\"\\x3f\\xfb\\x42\\xfb\\x41\\xf7\\x42\\xfb\\x42\\xf7\\x40\\xf7\\x42\\xf7\\x40\\xfb\\x42\\xf7\\x42\\xf7\\x42\\xfb\\x42\\xf7\\x41\\x05\\x0e\\xfb\\xa0\\xf8\\xb4\\xf9\"\n\"\\x28\\x15\\x8b\\x89\\x89\\x89\\x8a\\x1e\\x81\\x80\\x8a\\x8a\\x89\\x89\\x87\\x88\\x19\\x96\\x7d\\x7b\\x94\\x86\\x1b\\x87\\x89\\x89\\x63\\x68\\x1f\\x44\\x39\\x63\"\n\"\\x5d\\x7a\\x74\\x87\\x93\\x89\\x90\\x8a\\x8c\\x68\\xcc\\x18\\x63\\xde\\x8b\\x8b\\x89\\x8c\\x08\\x8f\\x88\\x88\\x8c\\x87\\x1b\\x88\\x88\\x8a\\x89\\x89\\x1f\\x85\"\n\"\\x83\\x85\\x85\\x05\\x8c\\x87\\x88\\x8b\\x89\\x1b\\x8a\\x88\\x8b\\x8a\\x88\\x1f\\x90\\x83\\x87\\x8d\\x87\\x1b\\x81\\x7a\\x76\\x7f\\x8a\\x1f\\x8a\\x98\\x66\\xa5\"\n\"\\x40\\x1e\\x97\\x6b\\x97\\x6c\\x96\\x6c\\x8d\\x87\\x8e\\x81\\x91\\x7c\\xfb\\x0d\\xfb\\x26\\x63\\x57\\x79\\x6b\\x78\\x68\\x7e\\x75\\x87\\x85\\x08\\x81\\x7e\\x85\"\n\"\\x81\\x86\\x1a\\x8a\\x8e\\x84\\x8f\\x81\\x1e\\x8c\\x88\\x8c\\x88\\x8a\\x1a\\x89\\x89\\x84\\x88\\x81\\x1e\\x8a\\x88\\x8a\\x89\\x88\\x1a\\x83\\x8b\\x8b\\xa1\\x69\"\n\"\\x1e\\x82\\x90\\x8d\\x8a\\x93\\x1b\\x9e\\xa1\\x90\\x92\\x96\\x1f\\xba\\xdc\\xdb\\xf7\\x11\\xd2\\xf0\\xac\\x53\\x8b\\x8b\\xcf\\x28\\x08\\x6f\\x9e\\x90\\x86\\x93\"\n\"\\x1b\\x97\\x9f\\x9a\\x94\\x8d\\x89\\x8e\\x89\\x8f\\x1f\\x8a\\x8f\\x05\\x8d\\x8e\\x8e\\x92\\x90\\x1e\\x95\\x93\\x05\\x92\\x07\\x94\\x8f\\x8d\\x8e\\x8f\\x92\\x87\"\n\"\\x95\\x18\\x88\\x93\\x8a\\x8c\\x7f\\xa6\\x78\\xb2\\x79\\xb2\\x71\\xc2\\x88\\x91\\x82\\x9d\\x7d\\xa5\\xbe\\xd3\\xf7\\x00\\xf7\\x1f\\xa6\\xa8\\x08\\x94\\x94\\x8d\"\n\"\\x8f\\x8e\\x1a\\x8d\\x88\\x91\\x87\\x8f\\x1e\\x82\\x95\\x8b\\x8c\\x87\\x91\\x08\\x92\\x87\\x8a\\x8c\\x8a\\x1b\\x0e\\xfb\\x36\\xf8\\xf2\\xf9\\x1a\\x15\\x88\\x8a\"\n\"\\x7d\\x98\\x8e\\x1a\\x8d\\x8b\\x8c\\x8c\\x8d\\x1e\\x8e\\x8e\\x8b\\x8d\\x8c\\x1a\\x90\\x8a\\x6c\\xa7\\x86\\x1b\\x83\\xfb\\x1d\\xfb\\x1f\\x2a\\x33\\x1f\\x5d\\xcb\"\n\"\\x75\\xac\\x56\\xe1\\x08\\x94\\x83\\x87\\x8e\\x83\\x1b\\x7e\\x82\\x81\\x79\\x89\\x1f\\x83\\x8a\\x85\\x84\\x86\\x1b\\x89\\x87\\x8d\\x8f\\x88\\x1f\\x88\\x8e\\x86\"\n\"\\x90\\x84\\x90\\x77\\x78\\x88\\x88\\x7d\\x75\\x90\\x68\\xcb\\xfb\\x23\\xbb\\x37\\x88\\x88\\x88\\x87\\x89\\x88\\x70\\x6c\\x70\\x6b\\x6f\\x6c\\x70\\x6b\\x74\\x6f\"\n\"\\x71\\x68\\x8e\\x80\\x8b\\x8b\\x90\\x80\\x08\\x92\\x7e\\x8b\\x8b\\x88\\x1a\\x86\\x88\\x84\\x87\\x85\\x1e\\x88\\x87\\x89\\x88\\x89\\x1a\\x84\\xa9\\x62\\x93\\x87\"\n\"\\x1e\\x91\\x98\\x92\\x8e\\x8e\\x1b\\x8e\\x8e\\x88\\x88\\x8a\\x8b\\x89\\x8a\\x88\\x1f\\x8a\\x8a\\x8a\\x88\\x87\\x1a\\x9e\\x76\\x05\\x98\\x06\\xb9\\xcc\\x9f\\xa6\"\n\"\\x93\\x95\\xd0\\xe5\\x18\\x95\\x99\\x9a\\x78\\x8d\\x88\\xa7\\x61\\x19\\xa9\\x5f\\x96\\x7d\\xa6\\x6f\\x08\\x8a\\x8e\\x8e\\x8a\\x8c\\x1b\\x93\\x98\\x95\\x9c\\x99\"\n\"\\x1f\\x8f\\x8f\\x8d\\x8d\\x8d\\x1b\\x8c\\x8e\\x89\\x89\\x8e\\x1f\\x80\\x9a\\x8d\\x8a\\x8f\\x1b\\x8e\\xa5\\xa0\\x8e\\x8c\\x1f\\x88\\x96\\x05\\x8c\\x07\\x8c\\x8d\"\n\"\\x8c\\x99\\x97\\x1e\\xa6\\x9f\\x90\\x93\\x90\\xa6\\x7d\\x97\\x4e\\xd6\\x42\\xeb\\xc9\\xd9\\xdb\\xe3\\xd8\\xd9\\x08\\x8a\\x8d\\x8a\\x8c\\x8d\\x1a\\x8c\\x8d\\x8d\"\n\"\\x8d\\x8e\\x1e\\x93\\x95\\x8b\\x8b\\x8d\\x93\\x88\\x8f\\x86\\x93\\x82\\x98\\x08\\x89\\x8e\\x89\\x8e\\x8a\\x1a\\x0e\\x3f\\xf8\\x40\\xf9\\x04\\x15\\x2f\\xfb\\x7a\"\n\"\\xfb\\x7b\\x2f\\xf7\\x7b\\xfb\\x7b\\xe7\\xf7\\x7b\\xf7\\x7a\\xe7\\xfb\\x7a\\x06\\xd0\\xf7\\xc0\\x15\\xfb\\x7c\\xfb\\x7b\\xfb\\x7a\\xfb\\x7c\\xf7\\x7a\\xfb\\x7a\"\n\"\\xf7\\x7c\\xf7\\x7a\\xf7\\x7b\\xf7\\x7c\\xfb\\x7b\\x06\\x68\\xf7\\x58\\x15\\xfb\\x7b\\xf7\\x7b\\xfb\\x35\\xfb\\x7b\\xfb\\x7b\\xfb\\x35\\xf7\\x7b\\xfb\\x7b\\xf7\"\n\"\\x35\\xf7\\x7b\\xf7\\x7b\\x07\\x0e\\x3c\\xf8\\x84\\x20\\x0a\\xfb\\x7b\\xfb\\x7a\\xfb\\x7a\\xfb\\x7b\\xf7\\x7a\\xfb\\x7a\\xf7\\x7b\\xf7\\x7a\\xf7\\x7a\\xf7\\x7b\"\n\"\\xfb\\x7a\\x06\\x0e\\x3b\\xf7\\xd9\\x16\\xf7\\x02\\xf7\\xb6\\xfb\\x02\\x06\\xf7\\x02\\x04\\xf7\\x02\\xf7\\xb6\\xfb\\x02\\x06\\xfb\\xb6\\xfb\\xb6\\x15\\xfb\\x02\"\n\"\\xf7\\xb6\\xf7\\x02\\x07\\xf7\\x02\\x16\\xfb\\x02\\xf7\\xb6\\xf7\\x02\\x07\\x0e\\x36\\xf7\\xa5\\x16\\xf7\\x65\\xf7\\x82\\xfb\\x65\\x06\\xf7\\x65\\x04\\xf7\\x65\"\n\"\\xf7\\x82\\xfb\\x65\\x06\\xfb\\x82\\xfb\\x82\\x15\\xfb\\x65\\xf7\\x82\\xf7\\x65\\x07\\xf7\\x65\\x16\\xfb\\x65\\xf7\\x82\\xf7\\x65\\x07\\x0e\\xfb\\xed\\xf7\\x5e\"\n\"\\x20\\x0a\\xfb\\x49\\xfb\\x3b\\x2f\\xf7\\x3b\\xfc\\x36\\xe6\\xf8\\x36\\xf7\\x3b\\xe7\\xfb\\x3b\\xf7\\x49\\x07\\x0e\\xfb\\xb3\\xf7\\x49\\x20\\x0a\\xfb\\x28\\xfb\"\n\"\\x26\\xfb\\x09\\x07\\xe5\\x40\\x05\\xc3\\xfb\\xac\\x06\\xe1\\x44\\x05\\xf6\\xf7\\xf3\\xf7\\x23\\xf7\\x0f\\x06\\x3d\\xd0\\x05\\x4a\\xd8\\x06\\x3f\\xd2\\x05\\x2e\"\n\"\\x73\\x15\\xe8\\xfb\\x27\\xf7\\x21\\x2d\\xfb\\x21\\xfb\\xf7\\x2e\\xf7\\xf7\\xfb\\x26\\xe9\\xf7\\x26\\x06\\x0e\\xfb\\xc2\\xf7\\x75\\xf9\\x15\\x15\\xfb\\x2c\\xfb\"\n\"\\x20\\x36\\xf7\\x20\\xfb\\xf6\\xe6\\xf7\\xf6\\xf7\\x1d\\xe0\\xfb\\x1d\\xf7\\x2c\\x07\\xfb\\x20\\xbc\\x15\\xfb\\x2b\\xfb\\x21\\xfb\\x4d\\xf7\\x21\\xfb\\xf6\\xf7\"\n\"\\x53\\xf7\\xf6\\xf7\\x1c\\xf7\\x4d\\xfb\\x1c\\xf7\\x2b\\x07\\xfb\\x3a\\x73\\x15\\xf7\\x21\\xfb\\x2c\\xf7\\x1c\\xfb\\x1b\\xfb\\x1c\\xfb\\xf6\\xfb\\x21\\xf7\\xf6\"\n\"\\xfb\\x21\\xf7\\x1b\\xf7\\x21\\x06\\x0e\\xfb\\x9a\\xf4\\xf8\\xe7\\x15\\x75\\x07\\xef\\x89\\xd0\\x32\\x85\\xfb\\x09\\x08\\x79\\x06\\x51\\x63\\x98\\xa9\\x67\\x1f\"\n\"\\x62\\xad\\x7b\\xad\\xc0\\x1a\\x73\\xfc\\x03\\xa3\\x06\\x8c\\xea\\xe1\\xd3\\xf7\\x00\\x87\\x08\\x99\\x7d\\x06\\xfb\\x02\\x8f\\x45\\x39\\x2a\\x1b\\x74\\xf8\\x02\"\n\"\\xa2\\x07\\x2b\\x8d\\x48\\xda\\xf7\\x03\\x1a\\x99\\x07\\xa2\\x8c\\x05\\xf7\\x02\\xd8\\x47\\x2b\\x1f\\xa3\\xf8\\x03\\x73\\x06\\x88\\x28\\x38\\x47\\xfb\\x02\\x8f\"\n\"\\x7d\\x8a\\x18\\x84\\xf7\\x0a\\xd2\\xe6\\xee\\x8a\\x08\\xa1\\x07\\x0e\\xfb\\x27\\xf7\\xee\\xf9\\x52\\x15\\x21\\xfb\\x49\\x05\\xfb\\x61\\x06\\xf1\\xfb\\x43\\x25\"\n\"\\xfb\\x45\\x05\\xf7\\x61\\x06\\xf5\\xfb\\x4b\\xf4\\xf7\\x4b\\x05\\xf7\\x62\\x06\\x25\\xf7\\x45\\xf1\\xf7\\x43\\x05\\xfb\\x62\\x06\\xfb\\x51\\x6a\\x15\\xf7\\x3c\"\n\"\\x06\\xdd\\xfb\\x22\\x39\\xfb\\x24\\x05\\xfb\\x3c\\x06\\x39\\xf7\\x24\\x05\\xf7\\x3a\\xf7\\xb0\\x15\\xc9\\xfb\\x01\\x05\\xfb\\x11\\x06\\xf7\\x52\\x6a\\x15\\xf7\"\n\"\\x0d\\x06\\x4f\\x23\\x05\\x3e\\x04\\xc6\\x22\\x05\\xfb\\x0b\\x06\\x4c\\x6a\\x15\\x4a\\xfb\\x00\\x50\\xf7\\x00\\x05\\x48\\xac\\x15\\xfb\\x0f\\x06\\xc8\\xf4\\x05\"\n\"\\xd8\\x04\\x50\\xf3\\x05\\xf7\\x0b\\x06\\x0e\\x56\\xf8\\x2e\\xf7\\xfd\\x15\\x8a\\xa4\\x96\\xbd\\x9e\\xca\\x08\\xaa\\xe8\\x8b\\x8b\\xa5\\x1a\\xbc\\x6a\\xb1\\x61\"\n\"\\x60\\x69\\x63\\x5b\\x7a\\x8e\\x79\\x90\\x7b\\x1e\\xb0\\xfb\\x07\\x97\\x59\\x8d\\x63\\x4b\\x93\\x78\\x8f\\x65\\x98\\x08\\xaf\\xfb\\x00\\x8b\\x8b\\x70\\x1b\\x5a\"\n\"\\x66\\x6b\\x60\\x60\\xb1\\x6a\\xbb\\x9f\\xa0\\x8e\\x91\\x9e\\x1f\\xf0\\xac\\xba\\x97\\xbb\\x8f\\x8c\\x7b\\x85\\x69\\x79\\x48\\x08\\x67\\xfb\\x01\\x8b\\x8b\\x6e\"\n\"\\x1a\\x59\\xac\\x66\\xb5\\xb5\\xad\\xb1\\xbc\\x9d\\x87\\xa0\\x84\\xa0\\x1e\\x67\\xf7\\x05\\x84\\xa8\\x86\\xc0\\xab\\x89\\xbb\\x81\\xb9\\x7c\\x08\\x6a\\xef\\x8b\"\n\"\\x8b\\xa7\\x1b\\xbd\\xb0\\xa9\\xb6\\xb7\\x65\\xac\\x58\\x78\\x79\\x89\\x85\\x7b\\x1f\\xfb\\x07\\x66\\x85\\x89\\x3d\\x80\\x08\\x0e\\xf8\\x16\\xf8\\x2c\\x15\\x6c\"\n\"\\x86\\x77\\x77\\x86\\x6c\\x47\\x8c\\x7b\\x90\\x71\\xad\\x08\\xae\\x6e\\x71\\x9a\\x69\\x1b\\x57\\x5f\\x5f\\x55\\x56\\xb7\\x5f\\xbf\\xae\\xa4\\x99\\xaf\\xa8\\x1f\"\n\"\\xa4\\xac\\x9b\\x90\\xd0\\x8c\\x90\\x6d\\x9f\\x77\\xa9\\x86\\x08\\x48\\x85\\x7a\\x6a\\x71\\x1e\\x67\\x6e\\x7d\\x71\\x69\\x1a\\x57\\xb8\\x5f\\xc0\\xc0\\xb7\\xb7\"\n\"\\xbf\\xad\\x7d\\xa5\\x67\\xa8\\x1e\\x6a\\xa4\\x85\\x9b\\xd0\\x1a\\xa9\\x90\\x9f\\x9f\\x90\\xa9\\xd0\\x8a\\x9b\\x86\\xa4\\x6a\\x08\\x67\\xa8\\xa4\\x7d\\xae\\x1b\"\n\"\\xbf\\xb7\\xb7\\xc0\\xc1\\x5f\\xb7\\x57\\x68\\x72\\x7c\\x68\\x6e\\x1f\\x6c\\x73\\x78\\x83\\x54\\x1b\\x7f\\x8a\\x86\\xaa\\x77\\x9f\\x6d\\x90\\x19\\xd0\\x91\\x9b\"\n\"\\xac\\xa4\\x1e\\xae\\xa8\\x9a\\xa5\\xad\\x1a\\xbf\\x5f\\xb7\\x56\\x56\\x5e\\x5f\\x57\\x69\\x9a\\x71\\xae\\x6e\\x1e\\xaa\\x73\\x93\\x78\\x54\\x1a\\x0e\\xf8\\x0f\"\n\"\\xf7\\xd7\\x15\\x6c\\x79\\x6b\\x67\\x69\\x1e\\x5e\\x61\\x7e\\x72\\x60\\x1a\\x44\\xc6\\x50\\xd2\\xd3\\xc5\\xc6\\xd2\\xad\\x7c\\xae\\x72\\xa3\\x1e\\x55\\xbd\\x76\"\n\"\\xab\\xb2\\x1a\\xaf\\xa2\\x7e\\x5e\\xb6\\x1f\\x62\\xb2\\xa8\\x7d\\xb5\\x1b\\xd3\\xc4\\xc4\\xd3\\xd3\\x51\\xc6\\x44\\x67\\x66\\x7a\\x70\\x73\\x1f\\x59\\x5e\\x6c\"\n\"\\x77\\x64\\x1b\\x8f\\xb7\\x95\\x9e\\xb7\\xb4\\x08\\xb2\\xaf\\x9b\\xab\\xb4\\x1a\\xd1\\x50\\xc6\\x44\\x44\\x50\\x50\\x45\\x62\\x9a\\x6e\\xb4\\x63\\x1e\\xb3\\x63\"\n\"\\x9c\\x6d\\x8c\\x6a\\x08\\x5f\\x81\\x91\\xc8\\x50\\x1f\\xaa\\x6c\\x6b\\x9a\\x65\\x1b\\x44\\x50\\x50\\x45\\x43\\xc8\\x4f\\xd2\\xb0\\xa8\\x98\\xa8\\xa8\\x1f\\xc4\"\n\"\\xc6\\x97\\x92\\xbb\\x92\\x08\\x0e\\x5a\\xf8\\x31\\xf7\\xe4\\x15\\xf7\\x20\\x06\\x7c\\x78\\x87\\x7e\\x79\\x1a\\x68\\xa7\\x6f\\xae\\xaf\\xa2\\xa2\\xb8\\x92\\x1e\"\n\"\\x86\\x97\\x93\\x89\\x97\\x1b\\xaf\\xa4\\xa4\\xb1\\xaf\\x73\\xa5\\x69\\x80\\x83\\x89\\x84\\x7b\\x1f\\xbc\\x80\\x76\\xa1\\x69\\x1b\\x67\\x70\\x70\\x68\\x77\\x8f\"\n\"\\x7f\\x9a\\x7a\\x1f\\xfb\\x20\\xf7\\x1f\\x06\\x7d\\xa1\\x96\\x87\\x9b\\x1b\\xae\\xa6\\xa8\\xaf\\xae\\x70\\xa6\\x63\\x90\\x1f\\x90\\x96\\x8d\\x92\\x94\\x1a\\xb0\"\n\"\\x6c\\xa9\\x66\\x69\\x6d\\x71\\x6d\\x81\\x8d\\x84\\x91\\x76\\x1e\\x5b\\x85\\x73\\x76\\x66\\x1a\\x65\\xa6\\x6e\\xb0\\x9d\\x98\\x90\\x97\\x9c\\x1e\\xfb\\x1f\\xfb\"\n\"\\x1d\\x07\\x98\\x9e\\x90\\x96\\x9b\\x1a\\xad\\x6c\\xa9\\x68\\x6f\\x72\\x79\\x72\\x83\\x1e\\x89\\x85\\x8a\\x85\\x8a\\x7c\\x08\\x90\\x7d\\x84\\x8c\\x81\\x1b\\x68\"\n\"\\x6e\\x70\\x6a\\x69\\xa9\\x6e\\xae\\x95\\x92\\x8d\\x91\\x98\\x1f\\x5f\\x91\\xa5\\x71\\xaf\\x1b\\xad\\xa7\\xa8\\xad\\x9e\\x86\\x98\\x7f\\x9f\\x1f\\xf7\\x1d\\xfb\"\n\"\\x23\\x06\\x98\\x7a\\x7e\\x8f\\x79\\x1b\\x67\\x71\\x71\\x66\\x65\\xa6\\x71\\xb6\\x88\\x1f\\x86\\x7e\\x89\\x85\\x81\\x1a\\x67\\xa9\\x6e\\xaf\\xaf\\xaa\\xa9\\xae\"\n\"\\x95\\x89\\x91\\x84\\x98\\x1e\\xb6\\x90\\xa4\\xa4\\xb1\\x1a\\xaf\\x70\\xa5\\x68\\x79\\x7d\\x87\\x7f\\x79\\x1e\\x0e\\x5d\\xf8\\x1f\\x23\\x0a\\x87\\x89\\x87\\x84\"\n\"\\x89\\x1f\\x81\\x55\\x4f\\x2b\\x4c\\x4a\\x52\\x52\\x4b\\x66\\x35\\x72\\x08\\x82\\x89\\x88\\x88\\x87\\x1a\\x87\\x8e\\x88\\x93\\x89\\x1e\\xbf\\x81\\xf6\\x4a\\xc2\"\n\"\\x56\\xc8\\x51\\xbc\\x35\\x98\\x42\\x08\\x84\\x8c\\x8d\\x88\\x8f\\x1b\\x8f\\x8d\\x8e\\x92\\x8d\\x1f\\x97\\xc6\\xbe\\xe0\\xc9\\xcd\\xcd\\xd0\\xd6\\xb7\\xde\\x9c\"\n\"\\x08\\x94\\x8d\\x8e\\x8e\\x90\\x1a\\x8f\\x88\\x8d\\x83\\x8d\\x1e\\xfb\\x2c\\xb0\\xfb\\x28\\xf7\\x20\\x62\\xf7\\x23\\x08\\xa7\\x85\\x8b\\x8d\\x85\\x1b\\x0e\\x5e\"\n\"\\xf8\\x14\\x23\\x0a\\x5a\\xfb\\x3f\\xfb\\x1c\\xfb\\x1b\\xfb\\x38\\x62\\x08\\x78\\x07\\xf7\\x45\\x59\\xf7\\x1d\\xfb\\x1e\\xae\\xfb\\x39\\x08\\x9c\\x06\\xb6\\xf7\"\n\"\\x3f\\xf7\\x2c\\xf7\\x2a\\xf7\\x37\\xab\\x08\\x9e\\x07\\xfb\\x3f\\xb1\\xfb\\x25\\xf7\\x21\\x61\\xf7\\x3c\\x08\\x82\\x61\\x15\\xa3\\xfb\\x13\\x9b\\x59\\xae\\x4c\"\n\"\\xd2\\x65\\xb6\\x7e\\xf7\\x1d\\x74\\x75\\x86\\x77\\x87\\x85\\x89\\x66\\x84\\x6c\\x84\\x7b\\x87\\x60\\x80\\x6a\\x7e\\x60\\x73\\x69\\x52\\x7a\\x54\\x73\\xfb\\x13\"\n\"\\x70\\xf7\\x16\\x79\\xc1\\x6c\\xc2\\x08\\x48\\xaf\\x6e\\x94\\xfb\\x2b\\xab\\xf7\\x1d\\xa5\\xba\\x99\\xca\\xad\\xaf\\xcc\\x97\\xb1\\xa7\\xf7\\x1d\\x08\\x0e\\x74\"\n\"\\xf8\\x2d\\xf9\\x57\\x15\\x34\\xfb\\xa2\\x05\\xfb\\xb3\\x06\\xf7\\x7e\\xfb\\x42\\x31\\xfb\\xa8\\xf7\\x7a\\xf7\\x3e\\xf7\\x7b\\xfb\\x3e\\x32\\xf7\\xa8\\xf7\\x7b\"\n\"\\xf7\\x42\\x05\\xfb\\xb4\\x06\\x0e\\x7b\\xf8\\x32\\xf9\\x63\\x15\\x24\\xfb\\x86\\xfb\\xa8\\x75\\xf7\\x65\\xfb\\x4c\\x4f\\xfb\\xa1\\xf7\\x7a\\xf7\\x2b\\xf7\\x80\"\n\"\\xfb\\x2b\\x45\\xf7\\xa1\\xf7\\x63\\xf7\\x4c\\xfb\\xa7\\xa1\\x05\\x29\\xf7\\x66\\x15\\xc8\\xfb\\x9a\\xf7\\xaa\\x9d\\xfb\\x7c\\xfb\\x2e\\xf5\\xfb\\x95\\xfb\\x69\"\n\"\\xf7\\x4c\\xfb\\x65\\xfb\\x4c\\xef\\xf7\\x95\\xfb\\x7f\\xf7\\x2e\\xf7\\xab\\x79\\x05\\x0e\\x59\\xf8\\x24\\xf9\\x56\\x36\\x0a\\x85\\x71\\x15\\xd7\\xfb\\x74\\x05\"\n\"\\xf7\\x88\\x06\\xfb\\x5a\\xfb\\x26\\xd3\\xfb\\x7e\\xfb\\x56\\xf7\\x26\\xfb\\x61\\xfb\\x26\\xda\\xf7\\x7e\\xfb\\x53\\xf7\\x26\\x05\\xf7\\x86\\x06\\x0e\\x8d\\xf8\"\n\"\\x31\\xf9\\x56\\x15\\x38\\xfb\\xb8\\xfb\\xbb\\x97\\xf7\\x8e\\xfb\\x30\\x23\\xfb\\xb0\\xf7\\x7c\\xf7\\x53\\xf7\\x86\\xfb\\x53\\xfb\\x05\\xf7\\xb0\\xf7\\x9d\\xf7\"\n\"\\x30\\xfb\\xcc\\x7f\\x05\\x3b\\x90\\x15\\xc4\\xbb\\x5a\\x51\\x50\\x5c\\x5c\\x50\\x4f\\x5c\\xba\\xc7\\xc6\\xbb\\xba\\xc7\\x1f\\x0e\\x7b\\xf8\\x33\\xf9\\x56\\x15\"\n\"\\x25\\xfb\\x88\\xfb\\xaa\\x76\\xf7\\x67\\xfb\\x4c\\x4b\\xfb\\xa1\\xf7\\x7d\\xf7\\x2b\\xf7\\x7e\\xfb\\x2b\\x46\\xf7\\xa1\\xf7\\x65\\xf7\\x4c\\xfb\\xa7\\xa0\\x05\"\n\"\\x28\\xf7\\x66\\x15\\xc8\\xfb\\x99\\x05\\x97\\x73\\x7a\\x8f\\x75\\x1b\\x74\\x7b\\x87\\x7f\\x75\\x1f\\xf8\\x28\\x9e\\x15\\xfb\\x7c\\xfb\\x2e\\x05\\x90\\x9a\\x8c\"\n\"\\x95\\x97\\x1a\\xb0\\x7b\\xaa\\x68\\xa9\\x1e\\xf7\\x29\\xfc\\x1c\\x15\\xfb\\x69\\xf7\\x48\\xbe\\x91\\xad\\xa2\\xa3\\xb9\\x19\\xfb\\xd3\\xfb\\x97\\x15\\xf2\\xf7\"\n\"\\x97\\xa6\\x58\\xab\\x75\\xbb\\x89\\x19\\xfb\\xef\\xf7\\x7b\\x15\\xf7\\xae\\x78\\x05\\x6a\\x6e\\x7a\\x6c\\x6e\\x1a\\x7f\\x8e\\x7b\\x8f\\x78\\x1e\\x0e\\x85\\xf8\"\n\"\\x35\\xf8\\xbb\\x15\\x48\\xfb\\x45\\x05\\xfb\\x2f\\x06\\xf7\\x08\\x2e\\x5e\\xfb\\x37\\xf7\\x2b\\xed\\xf7\\x28\\x29\\x54\\xf7\\x38\\xf7\\x0e\\xe7\\x05\\xfb\\x26\"\n\"\\x06\\x46\\xf7\\xe0\\x15\\x22\\xfb\\xaa\\x05\\xfb\\xa9\\x06\\xf7\\x69\\xfb\\x3b\\x3e\\xfb\\xa7\\xf7\\x8a\\xf7\\x37\\xf7\\x8d\\xfb\\x37\\x31\\xf7\\xa7\\xf7\\x72\"\n\"\\xf7\\x3b\\x05\\xfb\\xa6\\x06\\x20\\xf7\\x60\\x15\\xe4\\xfb\\x78\\x05\\xf7\\x6b\\x06\\xfb\\x44\\xfb\\x19\\xd1\\xfb\\x70\\xfb\\x5a\\xf7\\x17\\xfb\\x5b\\xfb\\x17\"\n\"\\xc8\\xf7\\x70\\xfb\\x3c\\xf7\\x19\\x05\\xf7\\x6e\\x06\\x0e\\x74\\xf8\\x2e\\xf8\\x7d\\x15\\x5e\\xfb\\x09\\x05\\xfb\\x08\\x06\\xe3\\x44\\x66\\xfb\\x16\\xf7\\x02\"\n\"\\xd8\\xf5\\x3e\\x69\\xf7\\x16\\xe8\\xd2\\x05\\xfb\\x0c\\x06\\xcc\\xe5\\x15\\x24\\xf7\\x82\\x05\\x8f\\x8a\\x89\\x8c\\x87\\x1b\\x88\\x89\\x8a\\x87\\x89\\x1f\\x25\"\n\"\\xfb\\x82\\xfb\\x96\\x70\\x05\\x86\\x88\\x88\\x87\\x8a\\x8d\\x88\\x8d\\x89\\x1f\\xf7\\x57\\xfb\\x30\\x4e\\xfb\\x9d\\x05\\x87\\x07\\x88\\x8e\\x87\\x8d\\x8c\\x1e\"\n\"\\x8d\\x8d\\x8c\\x8c\\x8d\\x1f\\xf7\\x76\\xf7\\x23\\xf7\\x73\\xfb\\x27\\x05\\x8a\\x8d\\x8d\\x8a\\x8d\\x1b\\x8d\\x8e\\x8e\\x8f\\x1f\\x8e\\x07\\x50\\xf7\\xa1\\xf7\"\n\"\\x55\\xf7\\x30\\x05\\x8e\\x8e\\x8c\\x8d\\x8d\\x1a\\x8f\\x89\\x8d\\x85\\x1e\\xfc\\x00\\xf7\\x34\\x15\\xd5\\xfb\\x4b\\xf7\\x52\\x7f\\xfb\\x27\\xfb\\x05\\xbd\\xfb\"\n\"\\x61\\xfb\\x3b\\xf7\\x08\\xfb\\x3f\\xfb\\x08\\xc0\\xf7\\x61\\xfb\\x25\\xf7\\x05\\xf7\\x53\\x97\\x05\\x0e\\x83\\xf8\\x38\\xf9\\x57\\x15\\x2a\\xfb\\xa6\\x05\\xfb\"\n\"\\xb4\\x06\\xf7\\x7c\\xfb\\x39\\x2b\\xfb\\xad\\xf7\\x8d\\xf7\\x44\\xf7\\x94\\xfb\\x44\\x26\\xf7\\xad\\xf7\\x71\\xf7\\x39\\x05\\xfb\\xad\\x06\\xfb\\x45\\x78\\x15\"\n\"\\xdd\\xf7\\x85\\x05\\xfb\\xe7\\x07\\xd9\\xed\\x15\\xf7\\x87\\x06\\xfb\\xd5\\x29\\x05\\xf7\\x18\\x5b\\x15\\xe5\\xfb\\x80\\xfb\\x72\\xf7\\xb0\\x05\\xfb\\x17\\x04\"\n\"\\xfb\\x69\\xfb\\x2d\\xf7\\x69\\xf7\\xaf\\x05\\xfb\\x15\\x5c\\x15\\xfb\\x60\\xf7\\x26\\xf7\\xe1\\x28\\x05\\x0e\\xdf\\xf8\\x2b\\xf9\\x56\\x15\\x33\\xfb\\x9c\\x05\"\n\"\\xfb\\xb0\\x06\\xf7\\x76\\xfb\\x40\\x35\\xfb\\x98\\xf7\\x17\\x74\\xf7\\x46\\xf7\\x16\\xf7\\x26\\x20\\x05\\xf7\\x19\\x06\\x31\\xf7\\x98\\xf7\\x6b\\xf7\\x2d\\x4c\"\n\"\\x9e\\x05\\xfb\\x69\\x06\\x39\\xf7\\x89\\x05\\xfb\\x06\\x79\\x15\\xdd\\xfb\\x8a\\x05\\xf7\\x8b\\x06\\xfb\\x5f\\xfb\\x21\\xd6\\xfb\\x83\\xfb\\x5d\\xf7\\x2c\\xfb\"\n\"\\x66\\xfb\\x2c\\xdc\\xf7\\x83\\xfb\\x52\\xf7\\x21\\x05\\xf7\\x82\\x06\\x0e\\x2c\\xf8\\x54\\x20\\x0a\\xfb\\x2a\\xfb\\x73\\x06\\xfb\\x4d\\xf7\\x0a\\x3d\\xfb\\x19\"\n\"\\xf7\\x59\\xfb\\x01\\xfb\\x59\\xfb\\x02\\xd9\\xfb\\x18\\xf7\\x4d\\xf7\\x09\\x05\\xfb\\x6f\\xf7\\x2a\\xf7\\x6f\\x07\\xf7\\x4c\\xfb\\x09\\xd9\\xf7\\x18\\xfb\\x59\"\n\"\\xf7\\x02\\xf7\\x59\\xf7\\x01\\x3d\\xf7\\x19\\xfb\\x4c\\xfb\\x0a\\x05\\x0e\\xfb\\x08\\xf8\\x34\\x20\\x0a\\xfb\\x01\\xfb\\x87\\xf7\\x01\\x06\\xfb\\x01\\xfc\\x54\"\n\"\\x15\\xf7\\x01\\xf7\\x87\\xfb\\x01\\x06\\xf8\\x11\\xf7\\x78\\x15\\x54\\xe9\\xfb\\x66\\xfb\\x0d\\xc1\\x2c\\x05\\xfc\\x4e\\xfb\\x15\\x15\\xc2\\x2c\\xf7\\x66\\xf7\"\n\"\\x0e\\x55\\xea\\x05\\xfb\\x30\\xf7\\x73\\x15\\x54\\x2d\\xf7\\x67\\xfb\\x0e\\xc1\\xea\\x05\\xf7\\xe1\\xfb\\xd3\\x15\\xc2\\xea\\xfb\\x67\\xf7\\x0e\\x55\\x2c\\x05\"\n\"\\x0e\\x31\\xf8\\x21\\x20\\x0a\\x5a\\x06\\x99\\xfb\\xd4\\xfb\\x6c\\xf7\\x7a\\x70\\x6c\\xf7\\x79\\xfb\\x68\\xfb\\xcd\\x98\\x05\\x60\\xf7\\xcd\\x07\\xfb\\x79\\xfb\"\n\"\\x66\\xb0\\x6b\\xf7\\x62\\xf7\\x79\\x7d\\xfb\\xcf\\x05\\xbc\\x06\\x7f\\xf7\\xcf\\xf7\\x6b\\xfb\\x79\\xaa\\xab\\xfb\\x7e\\xf7\\x66\\x05\\xf7\\xd1\\xb6\\x06\\xfb\"\n\"\\xd1\\x7e\\xf7\\x7e\\xf7\\x68\\x6c\\xaa\\xfb\\x6b\\xfb\\x7a\\x05\\x0e\\x5a\\xf7\\xfa\\xf8\\x39\\x15\\xfb\\x6b\\xf7\\x47\\x05\\x8c\\x89\\x89\\x8d\\x89\\x1b\\x88\"\n\"\\x88\\x87\\x88\\x89\\x8b\\x8a\\x8c\\x8a\\x1f\\xf7\\x48\\xfb\\x6b\\xfb\\xa3\\x6f\\x05\\x86\\x8a\\x89\\x89\\x87\\x1a\\x87\\x8d\\x89\\x8e\\x8a\\x1e\\xf7\\xa5\\x76\"\n\"\\xfb\\x45\\xfb\\x67\\x05\\x89\\x88\\x8a\\x89\\x89\\x1a\\x88\\x8f\\x87\\x8e\\x8d\\x8c\\x8c\\x8c\\x8c\\x1e\\xf7\\x6b\\xf7\\x46\\xa7\\xfb\\xa8\\x05\\x86\\x8e\\x88\"\n\"\\x8f\\x8e\\x8f\\x8d\\x8e\\x1e\\xa1\\xf7\\xab\\xf7\\x65\\xfb\\x46\\x91\\x88\\x05\\x8e\\x8e\\x8f\\x8e\\x8d\\x8b\\x8c\\x8a\\x8c\\x1f\\xfb\\x41\\xf7\\x6b\\xf7\\xac\"\n\"\\xa5\\x05\\x8f\\x8c\\x8e\\x8e\\x8f\\x1a\\x8f\\x89\\x8e\\x88\\x1e\\xfb\\xae\\xa1\\xf7\\x48\\xf7\\x6e\\x05\\x8d\\x8d\\x8c\\x8e\\x8d\\x1a\\x8e\\x87\\x8e\\x87\\x8a\"\n\"\\x89\\x8b\\x8a\\x1e\\xfb\\x6f\\xfb\\x4e\\x6e\\xf7\\xaa\\x05\\x8f\\x88\\x8e\\x87\\x88\\x88\\x89\\x89\\x1e\\x0e\\x5c\\xf8\\x29\\x23\\x0a\\x80\\x06\\x51\\xfb\\x71\"\n\"\\xfb\\x50\\xf7\\x0d\\x83\\x84\\xf7\\x0b\\xfb\\x5f\\xfb\\x74\\x58\\x05\\x81\\x07\\xf7\\x74\\x56\\xfb\\x0b\\xfb\\x51\\x93\\x83\\xf7\\x5c\\xf7\\x0a\\xb9\\xfb\\x6c\"\n\"\\x05\\x96\\x06\\xc3\\xf7\\x75\\xf7\\x50\\xfb\\x0b\\x94\\x93\\xfb\\x09\\xf7\\x57\\xf7\\x6d\\xbc\\x05\\x97\\x07\\xfb\\x71\\xc1\\xf7\\x11\\xf7\\x54\\x84\\x93\\xfb\"\n\"\\x5f\\xfb\\x0f\\x05\\x26\\x78\\x15\\xbc\\xf7\\x5e\\x05\\xfb\\xc9\\x07\\xc0\\xf4\\x15\\xf7\\x45\\xf7\\x04\\xfb\\x70\\xfb\\x6f\\x05\\xf7\\x06\\xaf\\x15\\xf7\\x57\"\n\"\\x5d\\x05\\xfb\\xc4\\x06\\xf1\\x55\\x15\\xf7\\x03\\xfb\\x42\\xfb\\x6b\\xf7\\x69\\x05\\xac\\xfb\\x03\\x15\\x5d\\xfb\\x5d\\x05\\xf7\\xc9\\x07\\x57\\xfb\\x00\\x15\"\n\"\\xfb\\x49\\xfb\\x05\\xf7\\x73\\xf7\\x74\\x05\\xfb\\x06\\x64\\x15\\xfb\\x65\\xb9\\xf7\\xcd\\x8e\\x05\\x26\\xbe\\x15\\xfb\\x01\\xf7\\x46\\xf7\\x6b\\xfb\\x6d\\x05\"\n\"\\x0e\\xfb\\x24\\xf8\\x66\\xf7\\xed\\x15\\xf7\\x54\\xf7\\x41\\x05\\x8d\\x8d\\x8c\\x8c\\x8d\\x1a\\x8d\\x89\\x8d\\x88\\x1e\\x88\\x06\\xfb\\x8a\\x3b\\x55\\xf7\\x91\"\n\"\\x05\\x8f\\x8a\\x8a\\x8d\\x88\\x1b\\x88\\x8a\\x89\\x87\\x8a\\x1f\\x55\\xfb\\x91\\xfb\\x8a\\xdb\\x05\\x88\\x06\\x88\\x89\\x89\\x89\\x89\\x8c\\x8a\\x8d\\x89\\x1f\"\n\"\\xf7\\x54\\xfb\\x41\\xfb\\x54\\xfb\\x42\\x05\\x89\\x8a\\x8a\\x89\\x8a\\x1a\\x88\\x8d\\x89\\x8e\\x1e\\x8b\\x8d\\x8b\\x8c\\x8c\\x1e\\xf7\\x8a\\xdb\\xc1\\xfb\\x92\"\n\"\\x05\\x88\\x8c\\x8d\\x89\\x8d\\x1b\\x8e\\x8c\\x8d\\x8e\\x8c\\x1f\\xc1\\xf7\\x92\\xf7\\x8a\\x3b\\x05\\x8c\\x8a\\x8d\\x8b\\x8b\\x1a\\x8e\\x8d\\x8d\\x8e\\x8c\\x8a\"\n\"\\x8d\\x89\\x8c\\x1f\\x0e\\x4c\\xf8\\x7e\\xf8\\x5c\\x15\\xb6\\xf7\\x7a\\x05\\x8c\\x8d\\x8b\\x8c\\x8b\\x1a\\x8e\\x87\\x8e\\x87\\x88\\x88\\x8a\\x88\\x89\\x1e\\xfb\"\n\"\\x18\\xfb\\x53\\xfb\\x1d\\xf7\\x56\\x05\\x8d\\x8a\\x88\\x8c\\x89\\x1b\\x87\\x89\\x88\\x86\\x8c\\x1f\\xb6\\xfb\\x7d\\xfb\\x7e\\xb7\\x05\\x88\\x06\\x88\\x88\\x88\"\n\"\\x88\\x88\\x8c\\x89\\x8e\\x89\\x1f\\xf7\\x58\\xfb\\x21\\xfb\\x5a\\xfb\\x19\\x05\\x87\\x88\\x8a\\x8a\\x88\\x1a\\x88\\x8e\\x88\\x8f\\x8c\\x1e\\x8e\\x06\\xf7\\x80\"\n\"\\xb2\\x60\\xfb\\x83\\x05\\x87\\x8a\\x8d\\x87\\x8f\\x1b\\x8d\\x8d\\x8c\\x8d\\x8d\\x1f\\xf7\\x1d\\xf7\\x58\\xf7\\x1c\\xfb\\x57\\x05\\x88\\x8d\\x8e\\x8a\\x8d\\x1b\"\n\"\\x8d\\x8d\\x8d\\x8f\\x8c\\x1f\\x8c\\x8b\\x8d\\x8a\\x8c\\x1e\\x60\\xf7\\x81\\xf7\\x86\\x5b\\x05\\x8d\\x8c\\x8a\\x8b\\x1f\\x8e\\x8e\\x8e\\x8e\\x8e\\x89\\x8d\\x89\"\n\"\\x8d\\x1f\\xfb\\x5f\\xf7\\x22\\xf7\\x5f\\xf7\\x22\\x05\\x8e\\x8d\\x8c\\x8d\\x8d\\x1a\\x8f\\x89\\x8d\\x87\\x1e\\x88\\x06\\x0e\\x44\\xf8\\xa7\\xf9\\x4e\\x15\\xfb\"\n\"\\x28\\xfb\\x3c\\xfb\\x25\\xf7\\x3c\\x99\\xfb\\x6d\\xfb\\x6d\\x9b\\xf7\\x3c\\xfb\\x27\\xfb\\x3c\\xfb\\x26\\xf7\\x6d\\x9a\\x7d\\xfb\\x76\\xf7\\x25\\xf7\\x3d\\xf7\"\n\"\\x28\\xfb\\x3d\\x7d\\xf7\\x76\\xf7\\x6d\\x7c\\xfb\\x3b\\xf7\\x26\\xf7\\x3b\\xf7\\x27\\xfb\\x6d\\x7b\\x05\\x0e\\x5c\\xf8\\xdb\\xf9\\x34\\x15\\xfb\\x20\\xfb\\x17\"\n\"\\x59\\xf7\\x47\\x5e\\xfb\\x47\\xfb\\x17\\xf7\\x17\\xb8\\xfb\\x43\\xfb\\x44\\xb7\\xf7\\x17\\xfb\\x16\\xfb\\x4a\\x59\\xf7\\x4a\\x55\\xfb\\x17\\xfb\\x17\\xf7\\x44\"\n\"\\xb9\\x5e\\xfb\\x43\\xf7\\x17\\xf7\\x15\\xb8\\xfb\\x45\\xbd\\xf7\\x45\\xf7\\x20\\xfb\\x15\\x5a\\xf7\\x43\\xf7\\x42\\x5d\\xfb\\x11\\xf7\\x17\\xf7\\x42\\xc1\\xfb\"\n\"\\x42\\xbd\\xf7\\x11\\xf7\\x16\\xfb\\x42\\x5f\\x05\\x0e\\x3b\\xf8\\x00\\xf9\\x49\\x15\\xfb\\xa1\\x07\\x2a\\xf7\\x8e\\x67\\x7d\\xf5\\xfb\\x8c\\xfb\\x4f\\xf7\\x55\"\n\"\\x70\\x70\\xf7\\x57\\xfb\\x51\\xfb\\x8e\\xf6\\x7d\\x68\\xf7\\x92\\x28\\x05\\xfb\\xa5\\x6a\\xf7\\xa5\\x06\\xfb\\x92\\x2a\\x99\\x67\\xf7\\x8e\\xf7\\x02\\xfb\\x57\"\n\"\\xfb\\x53\\xa6\\x70\\xf7\\x4f\\xf7\\x59\\x21\\xfb\\x8f\\xaf\\x7d\\xec\\xf7\\x93\\x05\\xfb\\xa7\\xac\\xf7\\xa7\\x07\\xeb\\xfb\\x93\\xae\\x99\\x20\\xf7\\x8f\\xf7\"\n\"\\x51\\xfb\\x59\\xa6\\xa6\\xfb\\x55\\xf7\\x53\\xf7\\x8b\\xfb\\x02\\x9a\\xaf\\xfb\\x8f\\xec\\x05\\xf7\\xa2\\xac\\xfb\\xa2\\x06\\xf7\\x8f\\xee\\x7c\\xae\\xfb\\x8b\"\n\"\\x20\\xf7\\x55\\xf7\\x51\\x70\\xa6\\xfb\\x51\\xfb\\x55\\xf6\\xf7\\x8c\\x68\\x99\\x2b\\xfb\\x8e\\x05\\xf7\\xa1\\x07\\x0e\\xfb\\x18\\xf7\\x9c\\xf7\\xbb\\x15\\x37\"\n\"\\x84\\x5a\\x80\\x59\\x74\\x08\\x69\\x7c\\x7f\\x7c\\x72\\x1a\\x6b\\xa7\\x6d\\xa9\\x98\\x97\\x90\\x99\\x9f\\x1e\\xb9\\xad\\xa7\\xaa\\xbd\\xd2\\x08\\xf7\\x49\\xf5\"\n\"\\x15\\xe0\\x92\\xb8\\x95\\xc0\\xa3\\x08\\xad\\x99\\x97\\x9b\\xa4\\x1a\\xab\\x70\\xa9\\x6d\\x65\\x46\\x4b\\x2d\\x4a\\x1e\\xfb\\x49\\x8e\\x15\\x5a\\xd1\\x6e\\xab\"\n\"\\x5d\\xac\\x08\\x9a\\x77\\x7f\\x90\\x7e\\x1b\\x6d\\x6f\\x6d\\x6b\\x72\\x97\\x7c\\xad\\x7c\\x1f\\xbe\\x74\\xbc\\x80\\xde\\x84\\x08\\xf7\\x47\\x24\\x15\\x2d\\xcb\"\n\"\\xd1\\x4b\\xb1\\x1b\\xa9\\xa6\\xa9\\xab\\xa4\\x7f\\x9a\\x69\\x9a\\x1f\\x57\\xa3\\x5d\\x95\\x36\\x92\\x08\\x32\\xf7\\x1c\\x15\\x5d\\x64\\x65\\x5e\\x5c\\xb0\\x64\"\n\"\\xba\\xba\\xb1\\xb1\\xba\\xb9\\x65\\xb1\\x5d\\x1f\\x8c\\xa1\\x15\\xb2\\xe0\\x9c\\xc4\\xbf\\x1a\\xad\\x74\\xa2\\x68\\x69\\x74\\x74\\x6a\\x56\\x9c\\x51\\xb4\\x34\"\n\"\\x1e\\xfb\\x63\\x04\\x62\\x34\\x7a\\x51\\x56\\x1a\\x69\\xa2\\x75\\xae\\xad\\xa2\\xa2\\xad\\xbe\\x7a\\xc6\\x64\\xdf\\x1e\\x0e\\xfb\\x17\\xf7\\xa1\\xf7\\x9e\\x15\"\n\"\\x8e\\x92\\x87\\x83\\x97\\x1f\\x92\\x85\\x92\\x87\\x91\\x89\\x08\\x9b\\x86\\x8e\\x88\\x7c\\x1a\\x7d\\x87\\x79\\x80\\x6b\\x1e\\x7b\\x5a\\x85\\x71\\x74\\x1a\\x64\"\n\"\\xa6\\x6b\\xab\\xaf\\xa5\\xa9\\xb5\\xa5\\x85\\xa7\\x7b\\xb6\\x1e\\x82\\xa4\\x86\\xa2\\x99\\x1a\\x9b\\x8e\\x90\\x9a\\x8f\\x1e\\x92\\x8d\\x94\\x90\\x94\\x93\\x08\"\n\"\\x90\\x92\\x91\\x8f\\x8f\\x1b\\x96\\xa4\\x76\\x6f\\xa4\\x1f\\x4d\\xc1\\xa5\\x79\\xaf\\x1b\\xaa\\xa5\\xa4\\xa8\\xa4\\x7d\\xa3\\x75\\x98\\x1f\\x75\\x98\\x73\\x93\"\n\"\\x57\\x95\\x08\\x59\\x94\\x72\\x97\\x9b\\x1a\\x8c\\x8b\\x8f\\x8c\\x8f\\x1e\\x8c\\x8f\\x8b\\x90\\x91\\x1a\\x91\\x8b\\x90\\x8a\\x8e\\x1e\\x8a\\x90\\x8b\\x8f\\x8c\"\n\"\\x1a\\x9b\\xa3\\x97\\xbe\\x94\\x1e\\xbf\\x95\\xa3\\x93\\xa1\\x98\\x08\\xa1\\x98\\x99\\xa3\\xa3\\x1a\\xa9\\x71\\xa4\\x6c\\x67\\x71\\x79\\x4d\\x55\\x1e\\x6e\\x72\"\n\"\\x72\\x77\\x80\\x1b\\x87\\x85\\x8f\\x90\\x84\\x1f\\x82\\x92\\x82\\x91\\x84\\x8d\\x08\\x7c\\x8f\\x88\\x90\\x9b\\x1a\\x99\\x90\\xa2\\x94\\xa4\\x1e\\x9b\\xb6\\x91\"\n\"\\xa7\\xa5\\x1a\\xb5\\x71\\xa9\\x68\\x6a\\x70\\x6b\\x64\\x74\\x90\\x72\\x9c\\x59\\x1e\\x95\\x6c\\x8f\\x78\\x7e\\x1a\\x7c\\x88\\x87\\x7b\\x86\\x1e\\x84\\x89\\x82\"\n\"\\x85\\x82\\x84\\x08\\x86\\x84\\x85\\x87\\x88\\x1b\\x80\\x74\\x9f\\xa8\\x70\\x1f\\xca\\x53\\x73\\x9c\\x67\\x1b\\x6d\\x70\\x71\\x6e\\x73\\x9a\\x73\\xa1\\x7e\\x1f\"\n\"\\xa0\\x7e\\xa1\\x84\\xc2\\x80\\x08\\xbc\\x82\\xa5\\x7e\\x7e\\x1a\\x89\\x8a\\x87\\x8a\\x85\\x1e\\x8a\\x88\\x8b\\x86\\x85\\x1a\\x85\\x8b\\x86\\x8c\\x87\\x1e\\x8c\"\n\"\\x86\\x8c\\x87\\x89\\x1a\\x7e\\x70\\x7e\\x5b\\x81\\x1e\\x55\\x81\\x74\\x84\\x76\\x7e\\x08\\x75\\x7d\\x7c\\x74\\x73\\x1a\\x6d\\xa6\\x72\\xaa\\xae\\xa4\\x9c\\xca\"\n\"\\xc3\\x1e\\xa5\\xa9\\xa2\\x9d\\x96\\x8c\\x08\\xe0\\xf7\\x2d\\x15\\xb4\\xab\\x6a\\x61\\x63\\x6a\\x6a\\x63\\x63\\x6a\\xac\\xb4\\xb4\\xac\\xac\\xb3\\x1f\\x0e\\xfb\"\n\"\\x31\\xf7\\xd1\\xf7\\xec\\x15\\x62\\x73\\x75\\x86\\xfb\\x02\\x7c\\x62\\x86\\x6f\\x81\\x7d\\x7c\\x08\\x7b\\x7a\\x81\\x73\\x76\\x1a\\x82\\x8c\\x7e\\x8e\\x7c\\x1e\"\n\"\\x72\\xa9\\x9c\\x83\\xa7\\x1b\\xac\\xa2\\x9a\\xb7\\xac\\x1f\\xcc\\xdf\\xa0\\xa2\\xb5\\xa2\\x08\\x5c\\x82\\x6c\\x63\\x2a\\x1e\\x7f\\x6f\\x85\\x73\\x78\\x1a\\x7a\"\n\"\\x94\\x76\\x9a\\x7b\\x1e\\x97\\x7e\\x98\\x84\\xa7\\x81\\xa2\\x93\\x97\\x91\\x96\\x94\\x08\\x9d\\x9b\\x98\\xa4\\x9f\\x1a\\x9e\\x85\\xa3\\x80\\xa7\\x1e\\x61\\xed\"\n\"\\x83\\xa9\\xba\\x1a\\xb6\\x72\\x9d\\x79\\xce\\x34\\x08\\x5f\\xac\\xa2\\x7c\\xac\\x1b\\xa7\\x9c\\x93\\xa4\\xa9\\x1f\\x8d\\x9a\\x8d\\x97\\x95\\x1a\\x9e\\x83\\x9f\"\n\"\\x7e\\x9c\\x1e\\x7c\\x9e\\x71\\x96\\x5c\\x91\\x21\\x99\\x6f\\x92\\x61\\xa3\\xb3\\xa3\\xab\\x93\\xf3\\x99\\xb4\\x90\\xa7\\x95\\x99\\x9a\\x08\\x9b\\x9c\\x95\\xa3\"\n\"\\xa0\\x1a\\x94\\x89\\x98\\x89\\x9a\\x1e\\xa4\\x6d\\x7a\\x93\\x6f\\x1b\\x6b\\x73\\x7b\\x60\\x6a\\x1f\\x4a\\x36\\x76\\x75\\x61\\x73\\x08\\xbb\\x93\\xa8\\xb5\\xee\"\n\"\\x1e\\x96\\xa7\\x91\\xa3\\x9e\\x1a\\x9c\\x82\\xa0\\x7c\\x9b\\x1e\\x7f\\x98\\x7e\\x92\\x6f\\x95\\x74\\x83\\x7f\\x84\\x81\\x83\\x08\\x78\\x7a\\x7e\\x72\\x78\\x1a\"\n\"\\x78\\x91\\x73\\x97\\x6f\\x1e\\xb3\\x2a\\x94\\x6c\\x5b\\x1a\\x61\\xa3\\x76\\xa1\\x4a\\xe0\\x08\\xb6\\x6a\\x74\\x9b\\x6a\\x1b\\x70\\x79\\x83\\x72\\x6d\\x1f\\x88\"\n\"\\x7c\\x8a\\x7e\\x82\\x1a\\x78\\x92\\x77\\x99\\x7a\\x1e\\x9a\\x77\\xa5\\x81\\xba\\x85\\xf4\\x7d\\xa9\\x83\\xb4\\x73\\x08\\x0e\\xfb\\x1e\\xf7\\xdc\\xf8\\x1a\\x15\"\n\"\\x28\\xf7\\x11\\x05\\xaa\\x72\\x65\\x9f\\x69\\x1b\\x74\\x6f\\x81\\x74\\x5f\\x1f\\x8a\\x77\\x8a\\x7a\\x7c\\x1a\\x46\\xaf\\x65\\xd4\\x83\\x1e\\xf7\\x36\\x78\\xfb\"\n\"\\x36\\x79\\x05\\x42\\x82\\x67\\x65\\x47\\x1a\\x7c\\x8c\\x7a\\x8c\\x77\\x1e\\x75\\xb5\\xa9\\x80\\x9d\\x1b\\xab\\xbb\\xa3\\xa6\\xa1\\x1f\\xee\\xf7\\x11\\x4a\\xfb\"\n\"\\x23\\x05\\x7e\\x6e\\x87\\x7d\\x76\\x1a\\x5d\\xa9\\x6c\\xd5\\x69\\x1e\\xd6\\xad\\xa8\\xaa\\xbb\\x1a\\xa0\\x88\\x96\\x7e\\xa9\\x1e\\x4a\\xf7\\x23\\xee\\xfb\\x11\"\n\"\\x05\\x6f\\xa2\\xb9\\x74\\xae\\x1b\\x9b\\xa9\\x96\\xa1\\xb5\\x1f\\x8c\\x9f\\x8c\\x9b\\x9a\\x1a\\xd0\\x67\\xb1\\x42\\x94\\x1e\\xfb\\x36\\x9d\\xf7\\x36\\x9e\\x05\"\n\"\\xd4\\x93\\xaf\\xb1\\xd0\\x1a\\x9a\\x8a\\x9c\\x8a\\x9f\\x1e\\xa2\\x5f\\x70\\x95\\x74\\x1b\\x69\\x64\\x77\\x6c\\x72\\x1f\\x28\\xfb\\x11\\xcc\\xf7\\x23\\x05\\x95\"\n\"\\xa2\\x91\\xa3\\x9f\\x1a\\xb6\\x6d\\xaa\\x41\\xad\\x1e\\x42\\x69\\x6c\\x6c\\x60\\x1a\\x78\\x92\\x73\\x95\\x73\\x1e\\xe3\\xfb\\x37\\x15\\x97\\x95\\x81\\x7e\\x7f\"\n\"\\x81\\x81\\x7e\\x7f\\x81\\x95\\x98\\x97\\x95\\x95\\x98\\x1f\\x93\\x9f\\x15\\x7a\\x06\\x55\\xf7\\x2d\\x05\\x85\\x9b\\x89\\x9b\\x9b\\x1a\\xbb\\xa0\\xa7\\xbc\\x9d\"\n\"\\x1e\\xbd\\x79\\xa0\\x6f\\x5b\\x1a\\x7b\\x88\\x7b\\x86\\x7b\\x1e\\x29\\xfb\\x76\\x15\\x21\\xfb\\x0f\\x05\\x6f\\x73\\x6f\\x7b\\x71\\x1b\\x71\\x79\\x92\\xa0\\x6f\"\n\"\\x1f\\x8a\\x96\\x8a\\x96\\x92\\x1a\\xbd\\xae\\xb2\\xc0\\x93\\x1e\\xf7\\x35\\xa6\\x05\\xdb\\x7d\\x15\\x94\\x99\\xf7\\x35\\x70\\x05\\xc0\\x83\\xae\\x64\\x58\\x1a\"\n\"\\x84\\x8a\\x80\\x8a\\x81\\x1e\\x76\\x6f\\x79\\x84\\x71\\x1b\\x72\\x6d\\x9c\\xa6\\x74\\x1f\\x0e\\x7e\\xf8\\x26\\xf7\\x2f\\x15\\x90\\x90\\x90\\x91\\x91\\x90\\x86\"\n\"\\x86\\x8a\\x8b\\x88\\x8a\\x89\\x1e\\x89\\x85\\x8a\\x85\\x85\\x1a\\x77\\x94\\x69\\x96\\x76\\x1e\\x5c\\xa2\\xb5\\x70\\xbb\\x1b\\xd8\\xd5\\xd0\\xd4\\xc1\\x68\\xbb\"\n\"\\x4f\\xa8\\x1f\\x7f\\x90\\x84\\x8d\\x81\\x8c\\x08\\x83\\x86\\x8e\\x92\\x91\\x90\\x91\\x91\\x8d\\x8d\\x8a\\x88\\x8f\\x1f\\x82\\x9a\\xa1\\x86\\xab\\x1b\\xdb\\xc3\"\n\"\\xc0\\xd7\\xdf\\x4f\\xce\\x42\\x62\\x64\\x78\\x66\\x67\\x1f\\x82\\x82\\x87\\x84\\x88\\x82\\x08\\x84\\x88\\x89\\x89\\x85\\x1b\\x85\\x86\\x90\\x91\\x8f\\x8c\\x8d\"\n\"\\x90\\x8f\\x1f\\xa2\\x9c\\x9f\\xbe\\xb4\\x1a\\xd6\\x51\\xc1\\x39\\x39\\x51\\x55\\x40\\x63\\x9f\\x57\\xa2\\x7a\\x1e\\x90\\x87\\x8c\\x89\\x87\\x1a\\x85\\x86\\x86\"\n\"\\x85\\x85\\x89\\x8d\\x92\\x88\\x1e\\x88\\x94\\x86\\x92\\x83\\x94\\x08\\xb0\\x67\\x64\\x9e\\x62\\x1b\\x42\\x4f\\x48\\x37\\x3f\\xc3\\x56\\xdb\\xab\\xa1\\x90\\x94\"\n\"\\x9a\\x1f\\x8e\\x8f\\x8d\\x8c\\x8d\\x1b\\x91\\x90\\x85\\x85\\x84\\x86\\x88\\x83\\x1f\\x81\\x8a\\x83\\x89\\x80\\x86\\x08\\x4f\\x6e\\x68\\x5b\\x55\\x1a\\x42\\xd5\"\n\"\\x46\\xd8\\xb8\\xb4\\xa4\\xb4\\xa2\\x1e\\x98\\xa1\\x96\\xb2\\xa1\\x1a\\x91\\x8a\\x91\\x89\\x91\\x1e\\x97\\xf7\\xbb\\x15\\xc9\\xc0\\x56\\x4b\\x4b\\x56\\x56\\x4b\"\n\"\\x4a\\x57\\xc0\\xcc\\xcc\\xc0\\xbe\\xcd\\x1f\\x0e\\x73\\xf7\\xcf\\xf8\\x53\\x15\\xc9\\x48\\x67\\x9e\\x5b\\x1b\\x44\\x51\\x51\\x45\\x3a\\xc8\\x56\\xe9\\x9d\\x9b\"\n\"\\x8c\\x90\\xad\\x1f\\x5b\\x70\\x75\\x7b\\x77\\x77\\x08\\x71\\x6f\\x7d\\x6a\\x69\\x1a\\x43\\xc5\\x51\\xd3\\xb8\\xb3\\xa2\\xb2\\xa5\\x1e\\x9c\\xa7\\x94\\xa5\\x97\"\n\"\\xca\\x98\\x4f\\x93\\x71\\x9b\\x70\\x08\\x61\\xa4\\xb5\\x73\\xb9\\x1b\\xd3\\xc5\\xc5\\xd3\\xad\\x7d\\xac\\x71\\xa7\\x1f\\x77\\x9f\\x75\\x9a\\x5b\\xa7\\x08\\x86\"\n\"\\xad\\x9b\\x8a\\x9d\\x1b\\xe9\\xc8\\xc0\\xdc\\xd1\\x51\\xc5\\x44\\x5b\\x67\\x78\\x4d\\x48\\x1f\\xa7\\xc9\\x94\\xa9\\xad\\x1a\\xd5\\x52\\xc5\\x42\\x43\\x52\\x51\"\n\"\\x41\\x69\\x94\\x6d\\xa7\\x4d\\x1e\\xd0\\x90\\x15\\x6a\\x7e\\x05\\x6c\\xb8\\x83\\xa3\\xb3\\x1a\\xcb\\xb3\\xb9\\xc2\\xc3\\xb3\\x5d\\x4b\\x63\\x82\\x73\\x6d\\x5e\"\n\"\\x1e\\x6a\\x98\\x7d\\xea\\x05\\x93\\x8a\\x87\\x90\\x86\\x1b\\x86\\x88\\x86\\x83\\x8a\\x1f\\xf4\\xfb\\x1c\\x15\\x9c\\xa0\\x93\\x94\\x96\\x94\\x08\\xa3\\xa8\\xb0\"\n\"\\x99\\xad\\x1b\\xbf\\xb6\\x62\\x59\\x4f\\x52\\x5e\\x3f\\x79\\x7e\\x8d\\x94\\x6b\\x1f\\x8d\\xae\\xe1\\xb6\\x05\\x92\\x8e\\x8e\\x8f\\x8e\\x1a\\x91\\x87\\x8d\\x85\"\n\"\\x1e\\x85\\x06\\x2d\\x7b\\x05\\x88\\xfb\\x12\\x15\\xae\\x7f\\x96\\x85\\x9c\\x7d\\x08\\xaf\\x6f\\xa1\\x63\\x67\\x1a\\x58\\x63\\x62\\x57\\x65\\x68\\xa3\\xb5\\x73\"\n\"\\x1e\\x7a\\xa8\\x86\\x9f\\x8a\\xba\\xad\\x93\\x18\\xce\\x47\\x05\\x87\\x8f\\x8f\\x89\\x8e\\x1b\\x8f\\x8f\\x8e\\x8f\\x8e\\x89\\x8e\\x89\\x8f\\x1f\\x5f\\xe0\\x05\"\n\"\\xfb\\x6b\\xf7\\x30\\x15\\x2d\\x9b\\x05\\x85\\x06\\x85\\x88\\x89\\x85\\x88\\x8e\\x87\\x91\\x88\\x1f\\xe1\\x60\\x8d\\x68\\x05\\x82\\x6b\\x7e\\x89\\x79\\x1b\\x3f\"\n\"\\x52\\xb8\\xc7\\xbd\\xb6\\xb4\\xbf\\xab\\xae\\x7f\\x75\\xa8\\x1f\\x98\\x81\\x93\\x82\\x9e\\x73\\x08\\x8c\\xfb\\x45\\x15\\x5d\\x2f\\x05\\x89\\x87\\x8a\\x88\\x88\"\n\"\\x1a\\x87\\x8e\\x88\\x8f\\x8e\\x8f\\x8d\\x8f\\x8f\\x1e\\xce\\xcf\\xad\\x83\\x8a\\x60\\x87\\x79\\x7e\\x70\\x19\\x5d\\x74\\x65\\x6f\\x62\\x1b\\x58\\x62\\xb4\\xbe\"\n\"\\xaf\\xa1\\xb3\\xaf\\xa7\\x1f\\x9c\\x99\\x96\\x90\\xae\\x98\\x08\\x0e\\x59\\xf9\\x22\\xf7\\x7d\\x15\\xac\\x93\\x9e\\x94\\x98\\x97\\x08\\xa1\\x9e\\x98\\xaa\\xac\"\n\"\\x1a\\xa8\\x82\\xa6\\x79\\x9e\\x1e\\x7c\\x9d\\x78\\x94\\x64\\x95\\x08\\x9b\\xa7\\x95\\xa5\\x9d\\x1a\\x9f\\x79\\xac\\x77\\x9e\\x1e\\x9f\\x77\\x72\\x96\\x74\\x1b\"\n\"\\x7a\\x78\\x84\\x79\\x6a\\x1f\\x81\\xab\\x83\\x9d\\x7e\\x98\\x08\\xa0\\x76\\x6d\\x98\\x6e\\x1b\\x72\\x73\\x82\\x7a\\x76\\x1f\\x78\\x7b\\x82\\x7a\\x7f\\x65\\x08\"\n\"\\x9d\\x6a\\x78\\x92\\x7a\\x1b\\x74\\x72\\x7f\\x78\\x77\\x1f\\x77\\x78\\x79\\x6a\\x77\\x1a\\x79\\x94\\x71\\x9c\\x6f\\x1e\\x6a\\x83\\x78\\x82\\x7e\\x7f\\x08\\x75\"\n\"\\x78\\x7e\\x6c\\x6a\\x1a\\x6e\\x95\\x70\\x9c\\x78\\x1e\\x9a\\x79\\x9e\\x82\\xb2\\x81\\x08\\x7b\\x6f\\x82\\x71\\x7a\\x1a\\x77\\x9c\\x69\\x9f\\x78\\x1e\\x78\\x9f\"\n\"\\xa4\\x80\\xa2\\x1b\\x9c\\x9e\\x92\\x9c\\xac\\x1f\\x95\\x6b\\x93\\x79\\x98\\x7e\\x08\\x76\\xa0\\xa9\\x7e\\xa7\\x1b\\xa5\\xa3\\x94\\x9c\\xa0\\x1f\\x9e\\x9b\\x95\"\n\"\\x9c\\x96\\xb1\\x08\\x7a\\xac\\x9e\\x84\\x9c\\x1b\\xa2\\xa5\\x96\\x9e\\x9e\\x1f\\x9f\\x9e\\x9d\\xad\\x9f\\x1a\\x9c\\x81\\xa5\\x7b\\xa7\\x1e\\xfb\\x96\\xf7\\x5e\"\n\"\\x15\\xbc\\xb3\\x62\\x5a\\x59\\x63\\x63\\x59\\x59\\x62\\xb3\\xbd\\xbd\\xb3\\xb3\\xbf\\x1f\\xa4\\xfb\\x63\\x15\\x96\\x8d\\xb4\\x21\\x05\\x8e\\x82\\x8d\\x82\\x81\"\n\"\\x1a\\x5e\\x65\\x66\\x5e\\x5d\\x65\\xb0\\xb8\\x96\\x8d\\x94\\x8e\\x93\\x1e\\xb4\\xf5\\x96\\x89\\x72\\xfb\\x01\\x05\\x8a\\x86\\x8b\\x86\\x87\\x1a\\x6b\\xa2\\x72\"\n\"\\xa8\\xa9\\xa2\\xa4\\xab\\x90\\x8b\\x8f\\x8a\\x90\\x1e\\xfb\\x08\\xf7\\x11\\x15\\x95\\x84\\x5d\\x24\\x05\\x6e\\x7e\\x6e\\x79\\x6b\\x1b\\x5d\\x65\\xb1\\xb9\\xab\"\n\"\\x9d\\xa7\\xa8\\x98\\x1f\\xf3\\xb9\\x91\\x82\\x2c\\x4f\\x05\\x7a\\x80\\x80\\x78\\x77\\x1a\\x6f\\xa1\\x75\\xa7\\x9f\\x9f\\x96\\x9c\\x95\\x1e\\x93\\xf7\\x3e\\x15\"\n\"\\x8d\\x7f\\x21\\x63\\x05\\x87\\x82\\x81\\x8a\\x82\\x1b\\x5e\\x66\\xb0\\xb9\\xb9\\xb0\\xb0\\xb8\\x94\\x95\\x8a\\x87\\x94\\x1f\\xf5\\x63\\x89\\x7f\\xfb\\x02\\xa4\"\n\"\\x05\\x8c\\x87\\x87\\x8b\\x85\\x1b\\x6c\\x71\\x74\\x6e\\x6e\\xa5\\x73\\xab\\x90\\x8f\\x8c\\x8c\\x8f\\x1f\\xf7\\x11\\xf7\\x07\\x15\\x85\\x82\\x23\\xb9\\x05\\x6e\"\n\"\\x98\\x79\\xa7\\xac\\x1a\\xb9\\xb1\\xb1\\xb9\\xab\\xa7\\x79\\x6d\\x99\\x1e\\xb9\\x24\\x81\\x84\\x50\\xea\\x05\\x9d\\x7f\\x78\\x96\\x77\\x1b\\x6f\\x75\\x75\\x6e\"\n\"\\x78\\x96\\x77\\x9c\\x80\\x1f\\xf7\\x3e\\x84\\x15\\x80\\x89\\x62\\xf5\\x05\\x88\\x93\\x89\\x95\\x95\\x1a\\xb8\\xb1\\xb0\\xb9\\xb9\\xb0\\x66\\x5e\\x81\\x89\\x82\"\n\"\\x88\\x82\\x1e\\x62\\x21\\x80\\x8d\\xa4\\xf7\\x01\\x05\\x8c\\x90\\x8b\\x8f\\x90\\x1a\\xab\\x74\\xa4\\x6d\\x6e\\x74\\x72\\x6b\\x87\\x8b\\x86\\x8c\\x86\\x1e\\xf7\"\n\"\\x08\\xfb\\x11\\x15\\x81\\x92\\xb9\\xf2\\x05\\xa9\\x99\\xa7\\x9d\\xab\\x1b\\xb9\\xb1\\x65\\x5d\\x6a\\x79\\x6f\\x6e\\x7e\\x1f\\x23\\x5d\\x85\\x94\\xea\\xc7\\x05\"\n\"\\x9c\\x96\\x96\\x9f\\x9f\\x1a\\xa7\\x75\\xa1\\x6f\\x77\\x78\\x80\\x79\\x80\\x1e\\x83\\xfb\\x3e\\x15\\x89\\x97\\xf5\\xb3\\x05\\x8f\\x94\\x95\\x8c\\x95\\x1b\\xb8\"\n\"\\xaf\\x66\\x5d\\x5d\\x67\\x66\\x5d\\x82\\x81\\x8c\\x8f\\x82\\x1f\\x21\\xb3\\x8d\\x97\\xf7\\x02\\x72\\x05\\x8a\\x8f\\x8f\\x8a\\x91\\x1b\\xab\\xa4\\xa3\\xa8\\xa8\"\n\"\\x71\\xa2\\x6c\\x85\\x87\\x8b\\x8a\\x87\\x1f\\xfb\\x11\\xfb\\x07\\x15\\x91\\x94\\xf3\\x5d\\x05\\xa8\\x7e\\x9d\\x6f\\x6a\\x1a\\x5d\\x65\\x66\\x5d\\x6b\\x6e\\x9d\"\n\"\\xa8\\x7e\\x1e\\x5d\\xf2\\x95\\x92\\xc7\\x2c\\x05\\x7a\\x95\\x9f\\x80\\x9f\\x1b\\xa7\\xa1\\xa1\\xa7\\x9f\\x81\\x9e\\x79\\x96\\x1f\\x0e\\x59\\xf8\\x23\\xf9\\x54\"\n\"\\x15\\xfb\\x5f\\xfb\\x35\\xfb\\x33\\xfb\\x5d\\xfb\\x59\\xf7\\x36\\xfb\\x35\\xf7\\x5a\\xf7\\x5a\\xf7\\x35\\xf7\\x35\\xf7\\x5a\\x27\\x0a\\xfb\\x56\\x1f\\x86\\x82\"\n\"\\x15\\xd0\\xfb\\x38\\x05\\x94\\x73\\x78\\x8e\\x71\\x1b\\x72\\x78\\x88\\x82\\x73\\x1f\\xcf\\xfc\\xab\\x15\\x47\\xf7\\x38\\x05\\x81\\xa3\\x9e\\x88\\xa5\\x1b\\xa4\"\n\"\\x9e\\x8e\\x95\\xa3\\x1f\\xf7\\x47\\xf8\\x44\\x15\\x47\\xfb\\x38\\x7a\\xb3\\x63\\xb3\\x63\\x9c\\x19\\xfb\\xde\\xfc\\x3f\\x15\\xcf\\xf7\\x39\\x9c\\x62\\xb3\\x63\"\n\"\\xb3\\x7a\\x19\\xf8\\x44\\xf7\\x48\\x15\\xfb\\x38\\x46\\x05\\x94\\xa3\\x8e\\x9d\\xa6\\x1a\\xa6\\x88\\x9d\\x82\\xa3\\x1e\\xfc\\xab\\x46\\x15\\xf7\\x38\\xd0\\x05\"\n\"\\x82\\x74\\x88\\x79\\x6f\\x1a\\x70\\x8e\\x79\\x94\\x73\\x1e\\x4d\\xf7\\xd0\\x15\\xf7\\x39\\x48\\x63\\x7a\\x63\\x63\\x7a\\x63\\x19\\xf8\\x3f\\xfb\\xde\\x15\\xfb\"\n\"\\x39\\xce\\xb3\\x9c\\xb3\\xb3\\x9c\\xb4\\x19\\xfb\\x46\\xf7\\x92\\x15\\xe8\\xd8\\x3c\\x2d\\x2d\\x3f\\x3e\\x2d\\x2c\\x3d\\xd8\\xea\\xec\\xd7\\xd6\\xec\\x1f\\x0e\"\n\"\\xfb\\x18\\xf7\\xe6\\xf8\\x15\\x15\\xf7\\x20\\x21\\x4d\\xc3\\x58\\x1b\\x79\\x72\\x7d\\x6e\\x6a\\x1f\\x85\\x74\\x88\\x74\\x7a\\x1a\\x47\\xc4\\x74\\xf7\\x7b\\x71\"\n\"\\x1e\\xfb\\x68\\x71\\x41\\x6b\\x4a\\x1a\\x7d\\x8d\\x76\\x90\\x76\\x1e\\x69\\xb0\\xa3\\x7c\\xa2\\x1b\\xbb\\xbe\\xbc\\xf7\\x2d\\xf7\\x04\\x1f\\x56\\xfb\\x10\\x77\"\n\"\\x49\\x53\\x1a\\x61\\xa3\\x74\\xcb\\x76\\x1e\\xce\\x9d\\xa9\\xa5\\xb3\\x1a\\xbb\\x75\\xcf\\x51\\xf7\\x18\\x1e\\xfb\\x1f\\xf3\\xcb\\x52\\xbd\\x1b\\x9d\\xa4\\x99\"\n\"\\xa8\\xad\\x1f\\x90\\xa2\\x8e\\xa2\\x9c\\x1a\\xce\\x50\\xa3\\xfb\\x79\\xa4\\x1e\\xf7\\x68\\xa6\\xd5\\xab\\xcc\\x1a\\x99\\x89\\xa0\\x87\\xa0\\x1e\\xad\\x66\\x72\"\n\"\\x9a\\x75\\x1b\\x5b\\x57\\x59\\xfb\\x2c\\xfb\\x03\\x1f\\xbe\\xf7\\x0c\\xa0\\xd1\\xc2\\x1a\\xb6\\x73\\xa2\\x4b\\xa0\\x1e\\x48\\x78\\x6d\\x71\\x64\\x1a\\x5b\\xa2\"\n\"\\x44\\xc5\\xfb\\x15\\x1e\\x9b\\x90\\x15\\x53\\xf7\\x10\\x7a\\xc2\\xc1\\x1a\\xba\\x9d\\x9c\\xc2\\x92\\x1e\\xa7\\xfb\\xd4\\x15\\xc0\\xd3\\xa3\\xa8\\xa7\\xa8\\x08\"\n\"\\xb2\\xb1\\xb0\\xa1\\xa7\\x1b\\x9d\\x9a\\x80\\x6f\\xa1\\x1f\\xfb\\x9b\\xfb\\x4b\\x15\\xf7\\x00\\x7e\\xb6\\x83\\xb2\\x7e\\x08\\xc2\\x78\\xa9\\x72\\x70\\x1a\\x7e\"\n\"\\x87\\x7b\\x83\\x78\\x1e\\xfb\\xb8\\xf7\\x1d\\x15\\xc3\\xfb\\x10\\x9c\\x54\\x55\\x1a\\x5c\\x79\\x79\\x54\\x84\\x1e\\x70\\xf7\\xd5\\x15\\x54\\x41\\x74\\x6f\\x70\"\n\"\\x6f\\x08\\x64\\x64\\x66\\x75\\x6f\\x1b\\x79\\x7c\\x96\\xa6\\x75\\x1f\\xf7\\x9c\\xf7\\x4c\\x15\\xfb\\x03\\x98\\x61\\x93\\x65\\x98\\x08\\x54\\x9d\\x6d\\xa5\\xa6\"\n\"\\x1a\\x98\\x8f\\x9b\\x93\\x9d\\x1e\\x0e\\xfb\\x2c\\xf8\\x0e\\xf7\\xec\\x15\\xf7\\x1f\\xdc\\xf7\\x03\\x54\\x9e\\xa5\\x2b\\xbb\\xef\\xc3\\x78\\xab\\x29\\x50\\x92\"\n\"\\xf7\\x00\\x6a\\x87\\x83\\xfb\\x0f\\xfb\\x1f\\x3a\\x05\\xf7\\x36\\x07\\xf1\\xcf\\x7e\\xa9\\x32\\x50\\x8d\\xf7\\x06\\x05\\x65\\x06\\x8d\\xfb\\x06\\x31\\xc6\\x7e\"\n\"\\x6d\\xf2\\x47\\x05\\xfb\\x36\\x07\\xfb\\x20\\xdc\\x83\\xf7\\x0f\\x6b\\x8f\\x91\\xfb\\x00\\x29\\xc6\\x78\\x6b\\xef\\x53\\x2b\\x5b\\x9e\\x71\\xf7\\x03\\xc2\\xf7\"\n\"\\x1f\\x3a\\xfb\\x1f\\x3a\\xfb\\x03\\xc2\\x78\\x71\\xeb\\x5b\\x27\\x53\\x9e\\x6b\\xed\\xc5\\x85\\x20\\xab\\x8f\\x93\\xf7\\x0f\\xf7\\x20\\xdc\\x05\\xfb\\x36\\x07\"\n\"\\x24\\x47\\x98\\x6d\\xe5\\xc6\\x89\\xfb\\x06\\x05\\xb1\\x06\\x89\\xf7\\x06\\xe4\\x50\\x98\\xa9\\x25\\xcf\\x05\\xf7\\x36\\x07\\xf7\\x1f\\x3a\\x93\\xfb\\x0f\\xac\"\n\"\\x87\\x84\\xf6\\xed\\x51\\x9e\\xab\\x27\\xc3\\xeb\\xbb\\x78\\xa5\\xfb\\x03\\x54\\x05\\x0e\\xfb\\x23\\xf7\\x57\\xf8\\xf7\\x15\\xfb\\x2c\\x07\\xfb\\x12\\xdf\\x05\"\n\"\\x8c\\x89\\x8a\\x8b\\x8a\\x1b\\x89\\x88\\x88\\x88\\x8a\\x1f\\x84\\x77\\x7d\\x7a\\x05\\x89\\x89\\x8a\\x89\\x89\\x1a\\x89\\x8c\\x8a\\x8e\\x8a\\x1e\\xf7\\x1b\\x47\"\n\"\\xfb\\x18\\x3e\\xf7\\x18\\x3f\\xfb\\x1b\\x47\\x05\\x88\\x8a\\x8a\\x8a\\x8a\\x1a\\x89\\x8c\\x87\\x8d\\x8a\\x1e\\x99\\x7a\\x92\\x77\\x05\\x88\\x8c\\x8e\\x88\\x8d\"\n\"\\x1b\\x8c\\x8c\\x8b\\x8c\\x8d\\x1f\\xf7\\x12\\xdf\\x05\\xfb\\x2c\\x07\\xf7\\x18\\xd6\\x82\\xfb\\x2b\\x05\\x87\\x8d\\x89\\x92\\x1e\\xa0\\x8f\\xa0\\x87\\x05\\x92\"\n\"\\x8d\\x8d\\x8f\\x1f\\x81\\xf7\\x2b\\xf7\\x19\\x40\\x05\\xf7\\x2c\\x07\\xf7\\x12\\x37\\x05\\x8a\\x8d\\x8c\\x8b\\x8c\\x1b\\x8d\\x8e\\x8e\\x8e\\x8c\\x1f\\x92\\x9f\"\n\"\\x99\\x9c\\x05\\x8c\\x8c\\x8c\\x8e\\x8d\\x1a\\x8d\\x8a\\x8d\\x89\\x1e\\xfb\\x1b\\xcf\\xf7\\x17\\xd7\\xfb\\x17\\xd8\\xf7\\x1b\\xcf\\x05\\x8e\\x8c\\x8c\\x8c\\x8c\"\n\"\\x1a\\x8d\\x8a\\x8f\\x89\\x8c\\x1e\\x7d\\x9c\\x84\\x9f\\x05\\x8e\\x8a\\x88\\x8e\\x89\\x1b\\x8a\\x8a\\x8b\\x8a\\x89\\x1f\\xfb\\x12\\x37\\x05\\xf7\\x2c\\x07\\xfb\"\n\"\\x19\\x40\\x95\\xf7\\x2b\\x05\\x8f\\x89\\x8d\\x84\\x1e\\x76\\x87\\x76\\x8f\\x05\\x84\\x89\\x89\\x87\\x1f\\x94\\xfb\\x2b\\x05\\xfb\\x04\\xb4\\x15\\xf7\\x06\\x4a\"\n\"\\x05\\xfb\\x19\\x07\\xfb\\x06\\xce\\x05\\xf7\\x9e\\xf7\\x17\\x15\\xfb\\x17\\x07\\xfb\\x06\\x48\\x05\\xf7\\x19\\x07\\xf7\\x8b\\xfb\\x3a\\x15\\xfb\\x05\\x4a\\xfb\"\n\"\\x07\\xcc\\xf7\\x07\\xcd\\x05\\x77\\xfb\\xbc\\x15\\xfb\\x06\\xcc\\x05\\xf7\\x18\\x07\\xf7\\x06\\x49\\x05\\xfb\\x9e\\xfb\\x17\\x15\\xf7\\x17\\x07\\xf7\\x06\\xcd\"\n\"\\x05\\xfb\\x18\\x07\\xfb\\x8b\\xf7\\x39\\x15\\xf7\\x05\\xcd\\xf7\\x07\\x49\\xfb\\x07\\x4a\\x05\\x0e\\xfb\\x2a\\xf8\\x06\\xf7\\xe9\\x15\\xf4\\xc8\\xf7\\x32\\x69\"\n\"\\xa1\\xbb\\x28\\xaa\\xe7\\xbc\\x7a\\xa9\\x33\\x53\\xa1\\xf1\\x57\\x8f\\x59\\xfb\\x2e\\x22\\x50\\x89\\xf7\\x0d\\xf7\\x01\\xf7\\x0c\\x6d\\xb6\\x3e\\x45\\x8f\\xf3\"\n\"\\x05\\x69\\x06\\x8f\\x23\\x3e\\xd1\\x6d\\x60\\xf7\\x01\\xfb\\x0c\\x89\\xfb\\x0d\\x22\\xc6\\x59\\xf7\\x2e\\x57\\x87\\xa1\\x25\\x33\\xc3\\x7a\\x6d\\xe7\\x5a\\x28\"\n\"\\x6c\\xa1\\x5b\\xf7\\x32\\xad\\xf4\\x4e\\x22\\x4d\\xfb\\x32\\xad\\x75\\x5b\\xee\\x6c\\x2f\\x5a\\x9c\\x6e\\xe3\\xc2\\x05\\x75\\x25\\xbf\\x87\\xbd\\xf7\\x2e\\xf4\"\n\"\\xc6\\x8d\\xfb\\x0d\\xfb\\x01\\xfb\\x0c\\xa9\\x60\\xd8\\xd1\\x87\\x23\\x05\\xad\\x06\\x87\\xf3\\xd8\\x45\\xa9\\xb6\\xfb\\x01\\xf7\\x0c\\x8d\\xf7\\x0d\\xf4\\x50\"\n\"\\xbd\\xfb\\x2e\\xbf\\x8f\\x75\\xf1\\xe3\\x54\\x9c\\xa8\\x2f\\xbc\\xee\\xaa\\x75\\xbb\\xfb\\x32\\x69\\x05\\x0e\\x56\\xf7\\xc5\\xf8\\x32\\x15\\x92\\x06\\x94\\x8e\"\n\"\\x8d\\x93\\x8c\\x8b\\x8f\\x8a\\x8e\\x1f\\xfb\\x61\\xf7\\x6e\\x7f\\x76\\x88\\x89\\x77\\x80\\x19\\xf8\\x21\\xfb\\xe9\\x15\\x84\\x06\\x82\\x88\\x89\\x83\\x8a\\x8b\"\n\"\\x87\\x8c\\x88\\x1f\\xf7\\x61\\xfb\\x6e\\x97\\xa0\\x8e\\x8d\\x9f\\x96\\x19\\xfc\\x0f\\xf7\\x4c\\x15\\x92\\x07\\x93\\x88\\x8f\\x85\\x1e\\x89\\x06\\x84\\x06\\xfb\"\n\"\\x6e\\xfb\\x62\\xa0\\x7f\\x8d\\x88\\x96\\x77\\x19\\xf7\\xe9\\xf8\\x21\\x15\\x84\\x07\\x82\\x8d\\x88\\x93\\x8c\\x8f\\x8b\\x8c\\x8e\\x1e\\xf7\\x6e\\xf7\\x61\\x76\"\n\"\\x97\\x89\\x8e\\x80\\x9f\\x19\\xfb\\xa5\\xfb\\x8e\\x15\\x6b\\x70\\x71\\x6a\\x6a\\xa5\\x70\\xad\\xab\\xa6\\xa6\\xac\\xac\\x71\\xa5\\x69\\x1f\\xf7\\xbf\\x04\\x82\"\n\"\\x8c\\x86\\x88\\x7a\\x81\\x08\\x79\\x80\\x8b\\x8b\\x7f\\x1a\\x2c\\x8f\\x61\\x96\\x69\\x1e\\x5a\\x9c\\x98\\x6e\\x91\\x1b\\x8e\\x8f\\x92\\xa1\\x95\\x1f\\xa3\\xc1\"\n\"\\x94\\xc8\\xf1\\x1a\\xa1\\x81\\x93\\x62\\x93\\x1e\\x8d\\xfd\\x61\\x15\\x94\\x91\\x8d\\x95\\x9b\\x1f\\x9d\\x96\\x8b\\x8b\\x97\\x1a\\xe9\\x87\\xb6\\x80\\xad\\x1e\"\n\"\\xbc\\x7a\\x7e\\xa8\\x85\\x1b\\x88\\x87\\x84\\x75\\x81\\x1f\\x73\\x56\\x82\\x4d\\x25\\x1a\\x75\\x95\\x83\\xb3\\x83\\x1e\\xf7\\xfb\\xf7\\xfb\\x15\\x8a\\x91\\x8a\"\n\"\\x91\\x88\\x92\\x08\\xa4\\x82\\x85\\x91\\x7c\\x1b\\x2b\\x62\\x87\\x80\\x69\\x1f\\x5a\\x7a\\x6f\\x7e\\x8a\\x85\\x08\\x88\\x93\\x87\\xa0\\x81\\x1e\\x73\\xc2\\xc7\"\n\"\\x82\\xf1\\x1b\\xa1\\x93\\x95\\xb4\\x93\\x1f\\xfd\\x61\\x89\\x15\\x83\\x8e\\x82\\x94\\x7d\\x1e\\x79\\x95\\x8b\\x8b\\x9a\\x1b\\xe7\\xb7\\x8f\\x96\\xad\\x1f\\xbb\"\n\"\\x9b\\xa8\\x99\\x91\\x1a\\x8e\\x85\\x8f\\x74\\x95\\x1e\\xa3\\x55\\x4f\\x94\\x25\\x1b\\x74\\x83\\x81\\x63\\x83\\x1f\\x0e\\x57\\xe0\\xf9\\x0d\\x15\\xf7\\x5b\\xfb\"\n\"\\x5b\\x9f\\xa0\\xfb\\x5a\\xf7\\x5b\\x05\\xf8\\xe8\\xfc\\xea\\x15\\xfb\\x5b\\xf7\\x5b\\x77\\x76\\xf7\\x5a\\xfb\\x5b\\x05\\xf8\\xff\\x04\\xfb\\x5a\\xfb\\x5b\\x9f\"\n\"\\x76\\xf7\\x5b\\xf7\\x5b\\x05\\xfc\\xe8\\xfc\\xea\\x15\\xf7\\x5a\\xf7\\x5b\\x77\\xa0\\xfb\\x5b\\xfb\\x5b\\x05\\xf7\\xc9\\xf8\\x06\\x15\\x5e\\x66\\x66\\x5e\\x5e\"\n\"\\xb0\\x66\\xb8\\xb8\\xb0\\xb0\\xb7\\xba\\x67\\xaf\\x5d\\x1f\\x83\\xf7\\xaa\\x15\\x67\\x62\\x56\\x5d\\x6f\\x95\\x73\\xaa\\x5b\\x1f\\x95\\x7b\\x95\\x7b\\x8d\\x87\"\n\"\\x08\\x6a\\x9c\\x8c\\x8a\\x8f\\x1b\\x8f\\x8d\\x8e\\xab\\x9d\\x1f\\x8e\\x92\\x94\\x9a\\x95\\x9b\\x08\\xa8\\xbb\\x94\\xa3\\xa9\\x1a\\xbb\\x72\\xa6\\x4f\\x9d\\x1e\"\n\"\\x93\\xfd\\x62\\x15\\xae\\xb5\\xc0\\xb9\\xa7\\x81\\xa3\\x6c\\xbb\\x1f\\x80\\x9b\\x81\\x9c\\x8a\\x8e\\x08\\xad\\x7a\\x8a\\x8b\\x87\\x1b\\x87\\x88\\x87\\x6c\\x7a\"\n\"\\x1f\\x88\\x84\\x82\\x7d\\x81\\x7a\\x08\\x6e\\x5b\\x82\\x73\\x6d\\x1a\\x5b\\xa4\\x70\\xc6\\x79\\x1e\\xf7\\xfa\\xf7\\xfb\\x15\\x8c\\x8e\\x8b\\x8e\\x8c\\x1a\\xaf\"\n\"\\x55\\xb4\\x5d\\x70\\x74\\x81\\x6c\\x5b\\x1e\\x7b\\x81\\x7b\\x81\\x86\\x89\\x08\\x6a\\x7a\\x8b\\x8b\\x86\\x1a\\x87\\x8f\\x88\\xaa\\x7a\\x1e\\x92\\x87\\x99\\x83\"\n\"\\x9b\\x81\\x08\\x6e\\xbc\\xa2\\x82\\xa9\\x1b\\xbb\\xa6\\xa3\\xc8\\x9d\\x1f\\xfd\\x5f\\x16\\x8a\\x87\\x8b\\x89\\x89\\x1a\\x67\\xc0\\x62\\xb9\\xa7\\xa3\\x95\\xaa\"\n\"\\xba\\x1e\\x9b\\x95\\x9a\\x95\\x90\\x8d\\x08\\xac\\x9c\\x8c\\x8b\\x90\\x1a\\x8f\\x88\\x8e\\x6b\\x9c\\x1e\\x84\\x8e\\x7d\\x94\\x7a\\x95\\x08\\xa8\\x5b\\x73\\x94\"\n\"\\x6e\\x1b\\x5b\\x70\\x73\\x4f\\x79\\x1f\\x0e\\xfb\\x12\\xf8\\x09\\xf8\\x0c\\x15\\xf7\\x31\\x07\\xb9\\x9d\\xa3\\xa9\\xb4\\x1a\\xba\\x63\\xb2\\x5b\\x5d\\x64\\x63\"\n\"\\x5b\\x63\\xa2\\x6e\\xba\\x79\\x1e\\xfb\\x31\\x07\\xfb\\x19\\xd8\\x05\\x8e\\x97\\x8c\\x97\\x91\\x1a\\xb9\\x63\\xb1\\x5c\\x5a\\x64\\x67\\x5c\\x59\\xb3\\x62\\xbb\"\n\"\\xa5\\x9e\\x94\\xa3\\xa1\\x1e\\xf7\\x18\\x3d\\xfb\\x18\\x3d\\x05\\xa2\\x75\\x77\\x94\\x72\\x1b\\x5b\\x62\\x62\\x5a\\x5d\\xb3\\x65\\xbc\\xba\\xb4\\xb2\\xb9\\x94\"\n\"\\x8a\\x91\\x87\\x9a\\x1f\\xf7\\x19\\xd7\\x05\\xfb\\x31\\x07\\x5d\\x7a\\x73\\x6d\\x61\\x1a\\x5d\\xb3\\x63\\xbb\\xb9\\xb2\\xb3\\xbb\\xb3\\x74\\xa8\\x5c\\x9d\\x1e\"\n\"\\xf7\\x31\\x07\\xf7\\x19\\x3f\\x05\\x88\\x7e\\x8a\\x80\\x84\\x1a\\x5e\\xb3\\x64\\xba\\xbc\\xb2\\xb0\\xba\\xbc\\x64\\xb4\\x5a\\x72\\x77\\x82\\x74\\x75\\x1e\\xfb\"\n\"\\x17\\xd9\\xf7\\x17\\xd9\\x05\\x74\\xa1\\x9e\\x82\\xa6\\x1b\\xbb\\xb3\\xb3\\xbc\\xba\\x64\\xb0\\x5a\\x5b\\x62\\x64\\x5f\\x82\\x8c\\x85\\x8f\\x7b\\x1f\\x0e\\x5b\"\n\"\\xf8\\x28\\xf8\\x72\\x15\\xab\\xf7\\x30\\x05\\x8e\\x96\\x8c\\x95\\x91\\x1a\\xa3\\x76\\xa1\\x73\\x74\\x76\\x76\\x72\\x86\\x8c\\x80\\x8e\\x80\\x1e\\xab\\xfb\\x30\"\n\"\\x05\\xfb\\x9b\\x04\\x6b\\xfb\\x30\\x05\\x88\\x80\\x8a\\x80\\x86\\x1a\\x72\\xa0\\x76\\xa2\\xa3\\xa0\\xa0\\xa4\\x91\\x8a\\x95\\x88\\x96\\x1e\\x6b\\xf7\\x30\\x05\"\n\"\\xe5\\xf7\\x6e\\x15\\xf7\\x1a\\xe3\\x05\\xa5\\x9c\\x93\\x98\\x9f\\x1a\\xa3\\x79\\x9d\\x73\\x77\\x7e\\x82\\x72\\x7a\\x1e\\x33\\xfb\\x1a\\x05\\xfb\\x4d\\xfb\\x4d\"\n\"\\x15\\xfb\\x1a\\x33\\x05\\x72\\x7a\\x82\\x7e\\x77\\x1a\\x73\\x9d\\x79\\xa3\\xa0\\x97\\x93\\xa5\\x9c\\x1e\\xe3\\xf7\\x1a\\x05\\xf7\\x6e\\xe5\\x15\\xf7\\x30\\x6b\"\n\"\\x05\\x89\\x96\\x94\\x89\\x92\\x1b\\xa4\\xa0\\xa0\\xa2\\xa3\\x76\\xa0\\x72\\x84\\x81\\x89\\x89\\x81\\x1f\\xfb\\x30\\x6b\\x05\\xfb\\x9b\\x16\\xfb\\x30\\xab\\x05\"\n\"\\x8d\\x81\\x81\\x8d\\x84\\x1b\\x72\\x76\\x76\\x73\\x74\\xa1\\x76\\xa3\\x92\\x94\\x8d\\x8d\\x96\\x1f\\xf7\\x30\\xab\\x05\\xf7\\x6e\\x31\\x15\\xe3\\xfb\\x1a\\x05\"\n\"\\x71\\x9c\\x98\\x83\\x9f\\x1b\\xa3\\x9d\\x9d\\xa3\\x9f\\x83\\x98\\x71\\x9c\\x1f\\xfb\\x1a\\xe3\\x05\\xfb\\x4d\\xf7\\x4d\\x15\\x33\\xf7\\x1a\\x05\\xa4\\x7a\\x7e\"\n\"\\x94\\x78\\x1b\\x72\\x79\\x79\\x73\\x77\\x94\\x7e\\xa4\\x7a\\x1f\\xf7\\x1a\\x33\\x05\\xef\\x94\\x15\\x55\\x60\\x61\\x55\\x57\\xb6\\x60\\xc0\\xbf\\xb6\\xb6\\xbf\"\n\"\\xc0\\x61\\xb6\\x57\\x1f\\x0e\\x55\\xf8\\x05\\xf8\\x3c\\x15\\x84\\x89\\x84\\x88\\x86\\x87\\xfb\\x01\\xf7\\x2d\\x18\\xaa\\x75\\x7b\\x95\\x72\\x1b\\x6c\\x73\\x74\"\n\"\\x6c\\x72\\x96\\x7b\\xaa\\x75\\x1f\\xf7\\x2f\\xfb\\x02\\x88\\x86\\x88\\x83\\x8a\\x85\\x19\\xfb\\x4e\\xaa\\x05\\x8e\\x7e\\x7f\\x8c\\x85\\x1b\\x6b\\x6f\\x70\\x6d\"\n\"\\x6c\\xa7\\x71\\xab\\x92\\x96\\x8c\\x8d\\x98\\x1f\\xf7\\x4f\\xab\\x8d\\x84\\x8e\\x84\\x8e\\x86\\x19\\xfb\\x2d\\xfb\\x01\\x05\\x6c\\x75\\x80\\x7b\\x72\\x1a\\x6c\"\n\"\\xa3\\x73\\xaa\\xa4\\x9a\\x96\\xaa\\xa2\\x1e\\xf7\\x01\\xf7\\x2e\\x91\\x88\\x91\\x89\\x93\\x89\\x19\\x6c\\xfb\\x4d\\x05\\x88\\x7e\\x8a\\x80\\x83\\x1a\\x6c\\xa6\"\n\"\\x6f\\xa9\\xa9\\xa6\\xa7\\xab\\x93\\x8a\\x95\\x89\\x98\\x1e\\x6b\\xf7\\x4e\\x91\\x8d\\x92\\x8e\\x91\\x8f\\x19\\xf7\\x01\\xfb\\x2d\\x05\\x6c\\xa1\\x9b\\x81\\xa5\"\n\"\\x1b\\xaa\\xa2\\xa2\\xaa\\xa4\\x81\\x9a\\x6b\\xa2\\x1f\\xfb\\x2f\\xf7\\x01\\x8e\\x91\\x8e\\x93\\x8c\\x91\\x19\\xf7\\x4e\\x6b\\x05\\x89\\x98\\x96\\x8a\\x92\\x1b\"\n\"\\xab\\xa7\\xa6\\xa9\\xaa\\x6f\\xa5\\x6b\\x85\\x80\\x8a\\x89\\x7d\\x1f\\xfb\\x4f\\x6b\\x88\\x93\\x89\\x91\\x88\\x90\\x19\\xf7\\x2d\\xf7\\x01\\x05\\xaa\\xa1\\x96\"\n\"\\x9b\\xa4\\x1a\\xaa\\x73\\xa3\\x6c\\x72\\x7c\\x80\\x6c\\x74\\x1e\\xfb\\x01\\xfb\\x2e\\x85\\x8e\\x86\\x8d\\x82\\x8d\\x19\\xaa\\xf7\\x4d\\x05\\x8e\\x99\\x8c\\x97\"\n\"\\x90\\x1a\\xab\\x70\\xa7\\x6d\\x6d\\x70\\x6f\\x6b\\x84\\x8c\\x80\\x8d\\x7e\\x1e\\x0e\\x5b\\xf8\\x26\\xf9\\x58\\x15\\xfb\\x60\\xfb\\x37\\xfb\\x33\\xfb\\x5b\\xfb\"\n\"\\x5e\\xf7\\x35\\xfb\\x36\\xf7\\x5c\\xf7\\x5b\\xf7\\x36\\xf7\\x36\\xf7\\x5b\\xf7\\x59\\xfb\\x36\\xf7\\x38\\xfb\\x55\\x1f\\x0e\\xad\\xf8\\x4b\\x23\\x0a\\xfb\\x80\"\n\"\\xfb\\x3c\\xfb\\x29\\xfb\\x66\\xfb\\x04\\xc1\\xfb\\x00\\xe5\\x4a\\x1f\\x5b\\xce\\xe2\\x71\\xed\\x1b\\xf7\\x82\\xf7\\x3d\\xf7\\x29\\xf7\\x66\\xed\\x61\\xeb\\x44\"\n\"\\xcb\\x1f\\xc9\\x45\\xfb\\x01\\xb2\\x20\\x1b\\x61\\x69\\x15\\xd5\\xdc\\x6b\\x58\\xc3\\x1f\\xd2\\x4b\\xb0\\x37\\x2e\\x1a\\xfb\\x47\\xfb\\x25\\xfb\\x25\\xfb\\x47\"\n\"\\xfb\\x48\\xfb\\x24\\xf7\\x25\\xf7\\x4a\\xd9\\xa9\\xd8\\xc0\\xc6\\x1e\\xd2\\xcc\\xdd\\xaf\\xee\\x1b\\x0e\\x3d\\xf9\\x6a\\x16\\xf9\\x47\\xfd\\x47\\xfd\\x47\\x07\"\n\"\\x0e\\x3e\\xf9\\x02\\x20\\x0a\\xfc\\xdf\\xfc\\xe6\\xf6\\x2a\\xf8\\xdd\\xf8\\xdf\\x22\\x06\\x6b\\xd2\\x15\\xfc\\xa4\\xfc\\x9e\\xf8\\xa4\\x07\\x0e\\x3e\\xf9\\x02\"\n\"\\x16\\xf3\\xf4\\xf8\\xdf\\xfc\\xdd\\x25\\x20\\xfc\\xe1\\x07\\xf8\\xbf\\xac\\x15\\xfc\\x9e\\xf8\\xa0\\xf8\\x9e\\x06\\x0e\\x3b\\xf8\\xeb\\x20\\x0a\\xfc\\xc8\\xfc\"\n\"\\xd4\\x06\\xf7\\x0b\\xfb\\x07\\x05\\xf8\\xcf\\xf8\\xd0\\x06\\xfb\\x13\\xe1\\x15\\xfc\\xab\\xfc\\xa6\\xf8\\xab\\x07\\x0e\\x3b\\xf8\\xeb\\x16\\xf7\\x12\\xf7\\x0c\"\n\"\\x05\\xf8\\xcf\\xfc\\xcf\\x07\\xfb\\x0b\\xfb\\x07\\x05\\xfc\\xd4\\x07\\xf8\\xc7\\xac\\x15\\xfc\\xa6\\xf8\\xab\\xf8\\xa6\\x06\\x0e\\xc0\\xf9\\xee\\x16\\xfc\\x2f\"\n\"\\xf9\\x55\\xfc\\x30\\xfd\\x55\\x05\\x0e\\xc0\\xf9\\xee\\x20\\x0a\\xfd\\xcb\\x06\\xf8\\x30\\xfd\\x55\\x05\\x0e\\xf8\\x1f\\x7d\\x15\\xf7\\xfb\\xf7\\xfc\\xfb\\xfb\"\n\"\\xf7\\xfb\\xfb\\xfc\\xfb\\xfb\\x05\\x0e\\x54\\xf8\\x1c\\x23\\x0a\\xfb\\x29\\xfb\\x35\\xf7\\x29\\xfb\\x29\\xf7\\x27\\xf7\\x29\\x05\\xf7\\x66\\xfb\\x58\\x15\\xfb\"\n\"\\x34\\xf7\\x29\\xfb\\x29\\xfb\\x29\\xf7\\x29\\xfb\\x2d\\x05\\xfb\\x59\\xfb\\x65\\x15\\xf7\\x2b\\xf7\\x38\\xfb\\x2b\\xf7\\x2a\\xfb\\x29\\xfb\\x2a\\x05\\xfb\\x64\"\n\"\\xf7\\x5a\\x15\\xf7\\x33\\xfb\\x28\\xf7\\x29\\xf7\\x28\\xfb\\x29\\xf7\\x29\\x05\\x0e\\xfc\\x25\\xae\\x7d\\x15\\xc8\\x8c\\xb8\\x94\\xb8\\x9e\\x08\\xf7\\x14\\xc1\"\n\"\\xe4\\xf7\\x1b\\xf7\\x22\\x1a\\xf7\\x5b\\xfb\\x39\\xf7\\x34\\xfb\\x5f\\x1e\\x0e\\xfd\\x51\\xf3\\x20\\x0a\\x46\\xfd\\x47\\xd0\\x06\\x0e\\xfc\\xc6\\xf7\\x86\\x20\"\n\"\\x0a\\xfb\\x63\\xfd\\x47\\xf7\\x63\\x06\\x0e\\xfc\\x3c\\xf8\\x10\\x20\\x0a\\xfb\\xed\\xfd\\x47\\xf7\\xed\\x06\\x0e\\xfc\\x53\\xf7\\xee\\xf9\\x54\\x15\\x8c\\x7f\"\n\"\\x7f\\x8b\\x86\\x1b\\x2e\\x44\\x72\\x57\\x5b\\x1f\\x5f\\x5d\\x71\\x45\\x44\\x1a\\x20\\xcb\\x44\\xed\\xe6\\xd0\\xca\\xdd\\xdc\\x4b\\xcb\\x3a\\x7a\\x7c\\x88\\x87\"\n\"\\x80\\x1e\\x86\\x7e\\x8b\\x8b\\x85\\x1b\\x7b\\x81\\x96\\x9b\\x9f\\x9a\\xa6\\xa0\\x9f\\x1f\\xa5\\xa8\\xcd\\xa2\\xbc\\x1b\\xaa\\x8a\\x05\\x96\\x06\\x0e\\xfc\\x53\"\n\"\\xb8\\xf7\\x9c\\x15\\x8a\\x9b\\x96\\x8b\\x93\\x1b\\xe1\\xd6\\xa7\\xbc\\xb9\\x1f\\xb6\\xb9\\xa6\\xd3\\xcf\\x1a\\xf7\\x00\\x4a\\xd2\\x29\\x30\\x46\\x4c\\x39\\x3b\"\n\"\\xcb\\x4b\\xdc\\x9b\\x9b\\x8d\\x8f\\x96\\x1e\\x91\\x99\\x8b\\x8b\\x91\\x1b\\x9a\\x95\\x7f\\x7b\\x6d\\x6d\\x64\\x66\\x79\\x1f\\x79\\x68\\x5b\\x81\\x5f\\x1b\\x6f\"\n\"\\x06\\x0e\\xfb\\x3f\\xf7\\xd2\\x23\\x0a\\x6d\\x7f\\x8a\\x86\\x75\\x1f\\xfb\\x12\\x72\\x2e\\xfb\\x02\\xfb\\x10\\x1a\\x26\\xcf\\x3f\\xe6\\xcc\\xc5\\xb4\\xc8\\x9f\"\n\"\\x1e\\x46\\xaa\\xba\\x6a\\xcd\\x1b\\xe0\\xce\\xce\\xdf\\xdf\\x47\\xcf\\x37\\x72\\x78\\x87\\x7d\\x6d\\x1f\\x9e\\xd2\\xee\\xc7\\xf0\\x8c\\x77\\xa4\\x18\\xfb\\x1e\"\n\"\\x8d\\x21\\x38\\x67\\xfb\\x1d\\x08\\xc0\\x6a\\x5e\\xa5\\x53\\x1b\\x71\\x78\\x87\\x7d\\x6f\\x1f\\xa2\\xd7\\xe9\\xc4\\xf0\\x8a\\x08\\x0e\\xfb\\x3f\\xf7\\xf3\\xf7\"\n\"\\x9b\\x15\\xc0\\xb5\\x95\\xa0\\xb4\\x1f\\xe4\\xb8\\xc5\\xe8\\xeb\\x1a\\xf1\\x47\\xd6\\x30\\x4a\\x51\\x62\\x4e\\x76\\x1e\\xd0\\x6d\\x5c\\xac\\x49\\x1b\\x36\\x48\"\n\"\\x49\\x36\\x37\\xcf\\x46\\xde\\xa4\\x9c\\x90\\x99\\xab\\x1f\\x79\\x44\\x25\\x4d\\x29\\x8c\\x9f\\x72\\x18\\xf7\\x1d\\x89\\xf6\\xdf\\xae\\xf7\\x1c\\x08\\x56\\xad\"\n\"\\xb8\\x70\\xc2\\x1b\\xa5\\x9f\\x91\\x98\\xa7\\x1f\\x74\\x3f\\x2c\\x52\\x26\\x8c\\x08\\x0e\\xfc\\x55\\xf7\\xf0\\x23\\x0a\\x49\\x79\\x6d\\x80\\x67\\x79\\x08\\xfb\"\n\"\\x01\\x53\\x43\\xfb\\x10\\xfb\\x18\\x1a\\xfb\\x19\\xd3\\xfb\\x11\\xf7\\x01\\x54\\x1e\\xac\\x7b\\xaa\\x80\\xcf\\x77\\x93\\x96\\x18\\xfb\\x14\\xb8\\x3a\\xf7\\x1a\"\n\"\\xf7\\x3d\\x1a\\xf7\\x05\\xb0\\xee\\xce\\xd2\\x1e\\xa8\\xaa\\xa9\\x9e\\xb9\\x9b\\x08\\x0e\\xfc\\x55\\xae\\xf9\\x4a\\x15\\xf7\\x13\\x5f\\xdc\\xfb\\x1b\\xfb\\x3e\"\n\"\\x1a\\xfb\\x3d\\x3a\\xfb\\x1c\\xfb\\x13\\x60\\x1e\\x93\\x80\\xce\\x9e\\xaa\\x96\\xad\\x9c\\x19\\xf7\\x00\\xc2\\xd3\\xf7\\x11\\xf7\\x19\\x1a\\xf7\\x18\\x43\\xf7\"\n\"\\x10\\xfb\\x00\\xc3\\x1e\\x68\\x9c\\x6c\\x96\\x49\\x9e\\x08\\x0e\\xfc\\x9e\\xf7\\x42\\x20\\x0a\\x2e\\xfb\\x04\\x5d\\xfb\\x06\\xfb\\x0c\\x1a\\xfb\\x0c\\xbb\\xfb\"\n\"\\x0b\\xe6\\x21\\x1e\\xf7\\x01\\x06\\x4f\\xf7\\x12\\x73\\xf1\\xf7\\x0d\\x1a\\xf7\\x0f\\xb2\\xf7\\x31\\xb8\\xc9\\x1e\\x0e\\xfc\\x9e\\xae\\x20\\x0a\\xc9\\xfb\\x14\"\n\"\\xa1\\x2f\\xfb\\x11\\x1a\\xfb\\x0a\\x71\\xfb\\x00\\x51\\xfb\\x0c\\x1e\\xf7\\x01\\x06\\xe5\\xf2\\xbc\\xf7\\x0e\\xf7\\x0c\\x1a\\xf7\\x0c\\x5d\\xf7\\x07\\x2e\\xf7\"\n\"\\x03\\x1e\\x0e\\xfc\\xc7\\xf7\\x1d\\x20\\x0a\\x25\\xfb\\xee\\xf1\\xfb\\xed\\x05\\xf4\\x06\\x23\\xf7\\xed\\xf3\\xf7\\xee\\x05\\x0e\\xfc\\xc7\\xf7\\x1e\\x20\\x0a\"\n\"\\x24\\x06\\xf2\\xfb\\xee\\x24\\xfb\\xed\\x05\\xf2\\x06\\xf3\\xf7\\xed\\x05\\x0e\\xfb\\xde\\xf7\\xaa\\x16\\xf7\\x59\\x06\\xfb\\x87\\xf7\\xee\\xf7\\x87\\xf7\\xed\"\n\"\\x05\\xfb\\x59\\x06\\xfb\\x87\\xfb\\xed\\x05\\x0e\\xfb\\xde\\xf7\\x7c\\x16\\xf7\\x87\\xf7\\xee\\xfb\\x87\\xf7\\xed\\x05\\xfb\\x59\\x06\\xf7\\x87\\xfb\\xed\\xfb\"\n\"\\x87\\xfb\\xee\\x05\\x0e\\xfc\\x41\\xf7\\x1b\\x20\\x0a\\x27\\xfb\\xed\\xef\\xfb\\xee\\x05\\xf7\\x84\\x06\\x27\\xf7\\xee\\xef\\xf7\\xed\\x05\\x0e\\xfc\\x41\\xf7\"\n\"\\xa7\\x20\\x0a\\xfb\\x84\\x06\\xef\\xfb\\xed\\x27\\xfb\\xee\\x05\\xf7\\x84\\x06\\xef\\xf7\\xee\\x05\\x0e\\xfc\\xf1\\xf7\\x5b\\xf9\\x4a\\x15\\x75\\x96\\xfb\\x22\"\n\"\\x32\\x05\\xfc\\xb1\\x07\\xf7\\x22\\x32\\xa1\\x96\\xfb\\x06\\xd9\\x05\\xf8\\xb1\\x07\\x0e\\xfc\\xf1\\xae\\xf9\\x4a\\x15\\xf7\\x06\\x3d\\x05\\xfc\\xb1\\x07\\xfb\"\n\"\\x06\\x3d\\xa1\\x80\\xf7\\x22\\xe4\\x05\\xf8\\xb1\\x07\\xfb\\x22\\xe4\\x05\\x0e\\xfc\\x8d\\xf7\\xbf\\x20\\x0a\\x60\\x06\\x3b\\x71\\x89\\x83\\x76\\x1f\\x6c\\x7e\"\n\"\\x7e\\x74\\x60\\x1a\\x7f\\x07\\x8c\\x78\\x05\\xfb\\x18\\x07\\x8d\\x4c\\x7f\\x76\\x62\\x87\\x08\\x7f\\x07\\xb5\\x88\\x96\\x7a\\x89\\x48\\x08\\xfb\\x18\\x07\\x8a\"\n\"\\x6b\\x05\\x65\\x96\\x74\\xa4\\x7e\\x1e\\x80\\xa0\\xa5\\x88\\xd8\\x1b\\xc1\\x97\\x86\\x06\\x76\\x77\\x92\\x95\\x82\\x1f\\x80\\x98\\x8a\\x94\\xc4\\x1a\\xf7\\x01\"\n\"\\x07\\x8d\\xe0\\x79\\xa8\\x4b\\x99\\xcb\\x9a\\x9d\\xa7\\x89\\xe1\\x08\\xf7\\x01\\x07\\x89\\xda\\x95\\x9a\\xc6\\x8d\\x08\\x0e\\xfc\\x8d\\xae\\x20\\x0a\\x7f\\x07\"\n\"\\xc6\\x89\\x96\\x7c\\x88\\x3c\\x08\\xfb\\x01\\x07\\x8a\\x35\\x9c\\x6f\\xcb\\x7c\\x4b\\x7d\\x7a\\x6e\\x8c\\x36\\x08\\xfb\\x01\\x07\\x51\\x8a\\x83\\x80\\x7e\\x1e\"\n\"\\x81\\x83\\x76\\x84\\x76\\x1b\\x86\\x7f\\xb6\\x06\\xdd\\xa3\\x8d\\x93\\xa0\\x1f\\xaa\\x97\\x98\\xa3\\xb5\\x1a\\x8a\\xab\\x05\\xf7\\x18\\x07\\x8a\\xce\\x95\\x9c\"\n\"\\xb5\\x8e\\x08\\x97\\x07\\x62\\x8f\\x7f\\xa0\\x8d\\xca\\x08\\xf7\\x18\\x07\\x8c\\xaa\\x05\\xb3\\x80\\xa1\\x73\\x98\\x1e\\x96\\x75\\x70\\x8e\\x3d\\x1b\\x0e\\x20\"\n\"\\xf9\\x4d\\x20\\x0a\\xfb\\x46\\xf7\\x06\\x06\\x64\\x81\\x05\\x23\\x2a\\x07\\x31\\x60\\x88\\x81\\x5d\\x1f\\x27\\x76\\x46\\x33\\x21\\x1a\\x2e\\xc0\\x3d\\xe3\\x67\"\n\"\\x1e\\x7b\\xb4\\xba\\x83\\xc8\\x1b\\xbb\\xbf\\x8f\\x94\\xc2\\x1f\\x89\\xfb\\x05\\x84\\x51\\x7c\\x5c\\x08\\x35\\x6f\\x50\\x57\\x45\\x1b\\x5b\\x63\\xa8\\xad\\x94\"\n\"\\x8f\\x93\\x91\\x90\\x1f\\x90\\x90\\x8c\\x8c\\xa4\\x8c\\x08\\xaa\\x8e\\xa2\\xa5\\xad\\x1a\\xb6\\x65\\xae\\x5c\\x50\\x5b\\x56\\x4a\\x38\\xd4\\x4a\\xe9\\xb8\\xb5\"\n\"\\x9a\\xa8\\xb1\\x1e\\xb8\\xac\\xa6\\xb5\\x9d\\xcc\\x08\\x9e\\xcb\\x8f\\xc9\\xf7\\x3b\\x1a\\xf7\\xd3\\x07\\x8a\\x9e\\x99\\x8b\\x95\\x1b\\xb7\\xa6\\x8f\\x98\\xba\"\n\"\\x1f\\xfb\\x5c\\x7b\\x15\\xfc\\x19\\x07\\x6e\\x8e\\x6b\\x95\\x67\\x9c\\x08\\x82\\xb2\\x86\\xc5\\xcc\\x1a\\xcb\\x91\\xe2\\x93\\xb9\\x1e\\x0e\\xfb\\xbb\\xf7\\xa4\"\n\"\\xf7\\xbd\\x15\\xa2\\xcd\\x96\\x99\\xc4\\xa9\\xb6\\xa2\\x9b\\x94\\x99\\x97\\x08\\xae\\xa7\\x9c\\xad\\xb7\\x1a\\xae\\x7e\\xae\\x73\\xa5\\x1e\\xb4\\x66\\x64\\x96\"\n\"\\x24\\x1b\\x24\\x64\\x80\\x62\\x66\\x1f\\x73\\x71\\x7e\\x68\\x68\\x1a\\x64\\x98\\x6b\\xa6\\x72\\x1e\\x9c\\x7a\\x9b\\x82\\xbf\\x6f\\xc4\\x6d\\x96\\x7e\\xa2\\x48\"\n\"\\x08\\x8d\\x70\\x15\\x3b\\x4b\\x4d\\x3c\\x3b\\xca\\x4c\\xda\\xda\\xca\\xca\\xda\\xd9\\x4c\\xcb\\x3e\\x1f\\x0e\\xfb\\xbb\\xf7\\xa3\\xf9\\x06\\x15\\x7f\\x9f\\x87\"\n\"\\x92\\x85\\x92\\x08\\xa7\\x75\\x68\\x9b\\x66\\x1b\\x42\\x5b\\x54\\x37\\x4e\\xa9\\x56\\xb9\\x76\\x1f\\xf6\\x5b\\xa5\\x75\\xa7\\x4b\\xa2\\xc1\\xa5\\xa4\\xcb\\xab\"\n\"\\xc9\\xa8\\x8b\\x8b\\x97\\x96\\x08\\xab\\xa6\\x9d\\xb6\\xbb\\x1a\\xdf\\x5c\\xc2\\x42\\x65\\x67\\x7b\\x6f\\x76\\x1e\\x85\\x84\\x87\\x85\\x7f\\x76\\x08\\x8d\\xfb\"\n\"\\xf8\\x15\\x3b\\x4b\\x4c\\x3d\\x3b\\xca\\x4c\\xda\\xd9\\xcb\\xca\\xda\\xd8\\x4b\\xcc\\x3f\\x1f\\x0e\\xd2\\xf8\\x5b\\xf8\\x6e\\x15\\x7b\\xb4\\x84\\x9a\\x7f\\xa0\"\n\"\\x08\\xc8\\x65\\x45\\xb2\\x41\\x1b\\xfb\\x09\\x35\\x35\\xfb\\x0b\\x44\\xa2\\x57\\xbc\\x65\\x1f\\xaa\\x72\\xac\\x7a\\xe0\\x66\\xf7\\x0c\\x56\\xb1\\x6c\\xb4\\x39\"\n\"\\xb5\\xdd\\xb0\\xaa\\xf7\\x0c\\xc0\\xd1\\xa9\\xad\\x9c\\xa4\\x9c\\x08\\xcb\\xb7\\xa7\\xbf\\xd9\\x1a\\xf7\\x0c\\x36\\xe2\\xfb\\x0a\\x41\\x44\\x64\\x4e\\x66\\x1e\"\n\"\\x7f\\x77\\x84\\x7b\\x7b\\x62\\x08\\x0e\\xfb\\x40\\xf9\\x0d\\xf8\\x11\\x15\\x89\\x7b\\x7d\\x8a\\x81\\x1b\\x6a\\x67\\x97\\xa0\\x6b\\x1f\\x62\\xa5\\x6c\\xb6\\x70\"\n\"\\xcf\\x76\\xc1\\x83\\x9c\\x7d\\x9d\\x08\\xb7\\x6a\\x5a\\xa4\\x54\\x1b\\x29\\x3b\\x3c\\x2b\\x56\\xa4\\x57\\xb6\\x6a\\x1f\\xa2\\x78\\x9e\\x83\\xb5\\x81\\x08\\x79\"\n\"\\x07\\x67\\x82\\x79\\x83\\x77\\x7e\\x08\\x5b\\x69\\x6d\\x54\\x52\\x1a\\x2a\\xda\\x3d\\xed\\xd5\\xcd\\xb8\\xd1\\xa4\\x1e\\xaf\\xed\\x90\\x94\\xab\\xb1\\x08\\xb8\"\n\"\\xb2\\xc4\\xa6\\xc3\\x1b\\x94\\x92\\x8a\\x89\\x9a\\x1f\\x0e\\x3c\\xf7\\xd9\\xf9\\x0e\\x15\\xb2\\x5b\\x6a\\x9a\\x65\\x1b\\x3d\\x2e\\x2c\\x3a\\x74\\x9a\\x7a\\x9f\"\n\"\\x9e\\xa0\\x9d\\x9c\\x8f\\x8b\\x8c\\x80\\x98\\x1f\\x82\\x95\\x86\\x99\\x99\\x1a\\xbc\\xb6\\xb6\\xbd\\xaf\\xb9\\x76\\x4e\\xea\\x1e\\xc2\\x68\\x91\\x87\\xa4\\x7e\"\n\"\\x7a\\x5e\\x88\\x84\\x83\\x7b\\x08\\x7b\\x6c\\x89\\x85\\x7d\\x1a\\x85\\x8c\\x87\\x8d\\x82\\x1e\\x8d\\x8f\\x8d\\x90\\x8e\\x90\\x92\\x98\\x92\\x99\\x93\\x99\\x93\"\n\"\\x9a\\x97\\xa6\\x97\\xac\\x08\\x7c\\xaf\\xa1\\x84\\x9b\\x1b\\x98\\xa3\\x8f\\x8f\\x9a\\x1f\\xdf\\xa2\\xc4\\xc5\\xc7\\x1a\\xb0\\x71\\xa7\\x69\\x6a\\x73\\x6f\\x64\"\n\"\\x82\\x8d\\x86\\x90\\x88\\x1e\\xa2\\x7c\\x90\\x83\\x76\\x1a\\x67\\x69\\x6c\\x65\\x6a\\x64\\x98\\xa1\\x6c\\x1e\\x91\\xa5\\x8d\\x9a\\x9b\\x1a\\xc4\\x66\\xb7\\x5c\"\n\"\\x71\\x7a\\x81\\x6f\\x72\\x1e\\xf7\\x11\\xfb\\x03\\x15\\x7e\\x90\\x77\\x97\\x77\\x9b\\x08\\x75\\x9c\\x82\\x99\\x9e\\x1a\\x9e\\x9a\\x9a\\x9d\\xaa\\xa7\\x67\\x61\"\n\"\\x80\\x89\\x80\\x87\\x80\\x1e\\x42\\xfb\\x5b\\x15\\x96\\x07\\xca\\x66\\xb2\\x4e\\x3c\\x52\\x3f\\x21\\xfb\\x38\\xf7\\x21\\xfb\\x21\\xf7\\x39\\xe0\\xd6\\xb5\\xbc\"\n\"\\xa1\\x79\\x9b\\x72\\x7e\\x85\\x88\\x81\\x83\\x1e\\x4d\\x82\\x71\\x6d\\x5e\\x1b\\x69\\x71\\xa3\\xa9\\xaa\\xa0\\x9e\\xd7\\xb0\\x1f\\xbe\\xa4\\xab\\x9f\\x9c\\x9e\"\n\"\\x08\\xa7\\xa8\\x9a\\xb1\\xb1\\x1a\\xd1\\x58\\xc3\\x4e\\x6d\\x6a\\x80\\x79\\x77\\x1e\\x7a\\x7d\\x7f\\x7c\\x77\\x68\\x08\\x0e\\x3c\\x98\\xf7\\x6c\\x15\\x94\\x06\"\n\"\\x54\\x91\\xad\\x67\\xbb\\x1b\\xb2\\xa1\\xa1\\xb1\\x94\\x8a\\x91\\x8a\\x9b\\x1f\\x7d\\x7b\\x80\\x86\\x7a\\x1b\\x70\\x7b\\x99\\xa8\\x84\\x1f\\xdf\\xac\\xc2\\xc9\"\n\"\\x8a\\xc6\\xb7\\x89\\xb3\\x75\\x9a\\x6c\\x08\\x5b\\x71\\x7b\\x76\\x64\\x1a\\x41\\xdd\\x51\\xf2\\xd5\\xe2\\xab\\xc9\\xe1\\x1e\\xc3\\xb2\\xa1\\xa4\\xa3\\x1a\\x9f\"\n\"\\x7e\\x97\\x77\\x7d\\x83\\x86\\x7d\\x82\\x1e\\x90\\x7c\\x8c\\x84\\x81\\x1a\\x6b\\x73\\x74\\x6b\\x75\\x77\\x96\\xa0\\x7e\\x1e\\x82\\x9a\\x88\\x9a\\x86\\xb9\\x84\"\n\"\\xd7\\x89\\x95\\x76\\xaa\\x08\\xb5\\x70\\x58\\xa6\\x59\\x1b\\x54\\x5d\\x63\\x5a\\x77\\x8f\\x7c\\x98\\x6d\\x1f\\x67\\xaa\\x62\\x9b\\x63\\x8a\\x80\\xa5\\x7e\\x9a\"\n\"\\x6d\\x9e\\x08\\x5d\\xa7\\x80\\x97\\xa3\\x1a\\x97\\x91\\x94\\x98\\x95\\x1e\\x81\\x06\\x62\\x6f\\x72\\x67\\x6a\\x9d\\x7a\\xb9\\x81\\x1f\\xc7\\x7f\\x8e\\x89\\x95\"\n\"\\x77\\x3a\\x7e\\x42\\x45\\x88\\x46\\x7c\\x7c\\x87\\x81\\x88\\x75\\x08\\xd2\\xc9\\x15\\x88\\xc4\\xc5\\xc5\\xc8\\x8c\\x08\\x8c\\x85\\x8b\\x86\\x88\\x1a\\x76\\x79\"\n\"\\x6f\\x71\\x79\\x1e\\x76\\x7c\\x7b\\x83\\x67\\x7f\\x08\\x0e\\x4c\\xf9\\x0a\\x16\\x9f\\x07\\x2f\\x9c\\x6c\\x9a\\x5f\\xba\\x5e\\xbf\\x80\\xae\\x86\\xf6\\x9c\\x6b\"\n\"\\x93\\x7d\\x99\\x7b\\x08\\x5f\\xaf\\xc5\\x6d\\xbd\\x1b\\xe1\\xd1\\xd4\\xe4\\xe2\\x4c\\xd1\\x3c\\x73\\x7c\\x86\\x7b\\x6a\\x1f\\x85\\x88\\x84\\x88\\x84\\x87\\x08\"\n\"\\xa7\\xb4\\x96\\xa8\\xb0\\x1a\\xe0\\x44\\xcf\\x34\\x34\\x44\\x47\\x36\\x66\\x96\\x6e\\xa7\\x62\\x1e\\xa9\\x4e\\x89\\x8c\\x6e\\x1b\\x3c\\x4c\\x45\\x34\\x32\\xd1\"\n\"\\x42\\xe1\\xbd\\xc5\\xa8\\xb8\\xb0\\x1f\\x98\\x9b\\x93\\x99\\x9c\\xab\\x86\\x21\\x80\\x67\\x5e\\x57\\x5f\\x5c\\x6c\\x7c\\x2f\\x7a\\x08\\x77\\x07\\x0e\\xfb\\x88\"\n\"\\xb9\\xf7\\xdf\\x15\\xec\\xfb\\x06\\xf7\\x04\\xfb\\x30\\xb4\\x40\\xb6\\xda\\xf7\\x13\\xf7\\x41\\xe9\\xf7\\x00\\x3f\\xde\\xfb\\x30\\xf7\\x69\\x6b\\xca\\x58\\x2e\"\n\"\\x43\\x29\\xfb\\x1f\\xfb\\x3c\\x08\\x0e\\xfb\\x25\\xf7\\xf0\\x7d\\x15\\xa0\\xe2\\xc3\\xeb\\xf7\\x04\\xf7\\x1d\\x08\\xe6\\xf7\\x07\\xaa\\xcc\\xd6\\x1a\\xd9\\x48\"\n\"\\xcc\\x3b\\x5d\\x60\\x77\\x67\\x6b\\x1e\\x77\\x73\\x80\\x77\\x7f\\x5f\\x80\\xad\\x83\\x9c\\x7f\\x9d\\x08\\xbb\\x6b\\x5a\\xa6\\x55\\x1b\\x38\\x4b\\x4a\\x37\\x4d\"\n\"\\xa1\\x5d\\xdb\\x20\\x1f\\xf7\\x27\\xfb\\x53\\xb1\\x4b\\xa5\\x28\\x08\\x0e\\xfb\\x69\\xd3\\x16\\xf8\\x75\\x9f\\x06\\x2f\\x9c\\x6c\\x99\\x5f\\xbb\\x66\\xb6\\x7d\"\n\"\\xad\\x85\\xc9\\x08\\x58\\xac\\xbb\\x6e\\xc0\\x1b\\xd3\\xc3\\xc3\\xd2\\xca\\x73\\xb1\\x27\\xe6\\x1f\\x29\\xe3\\x6d\\xb7\\x71\\xeb\\x70\\x2b\\x6d\\x5f\\x2a\\x33\"\n\"\\x08\\x27\\x30\\x72\\x65\\x4c\\x1a\\x44\\xc4\\x53\\xd2\\xc0\\xbb\\xa8\\xbe\\xac\\x1e\\x85\\x4d\\x7d\\x69\\x66\\x60\\x5f\\x5b\\x6c\\x7d\\x2f\\x7a\\x08\\x0e\\xf8\"\n\"\\x52\\xf8\\xe0\\x15\\x6b\\x06\\x6c\\x60\\x5a\\x73\\x42\\x83\\x08\\x70\\xd1\\x07\\xa4\\x8a\\x8e\\x87\\x70\\x1a\\xfb\\x83\\x07\\x8d\\x59\\x7f\\x7e\\x5c\\x8a\\x08\"\n\"\\x70\\x6a\\xf7\\x97\\xac\\x67\\x06\\x63\\x8c\\x7f\\x9a\\xbb\\x1a\\x5d\\xf8\\x7f\\x22\\x0a\\xfb\\x32\\xfb\\x5b\\x31\\x0a\\xf8\\xa8\\xf7\\xbd\\x15\\x60\\x07\\x8a\"\n\"\\x5f\\x84\\x84\\x62\\x8d\\x08\\xfb\\x59\\x06\\x99\\xb0\\xbf\\xb6\\xd2\\xab\\x08\\xeb\\xb8\\xae\\xb3\\xcb\\x1a\\xda\\x4b\\xbd\\x25\\x39\\x51\\x61\\x51\\x6b\\x9f\"\n\"\\x74\\xa8\\xa5\\xa1\\xa1\\xa5\\x91\\x8a\\x90\\x89\\x8f\\x1e\\x83\\x9e\\x8b\\x8b\\x8e\\x1a\\x9c\\xa8\\x9f\\xa3\\xb0\\xa4\\x69\\x58\\x4f\\x6e\\x62\\x32\\x48\\x1e\"\n\"\\x46\\x56\\x67\\x54\\x52\\x1a\\x85\\x8c\\x82\\x8c\\x80\\x1e\\xf7\\xe4\\xf7\\x47\\x06\\xfb\\x38\\xf8\\x2d\\x22\\x0a\\x26\\x0a\\x31\\x0a\\xf7\\xd5\\xf7\\xf7\\x15\"\n\"\\x90\\xa4\\x96\\x8d\\x9a\\x1b\\xc8\\xb0\\x67\\x51\\x4b\\x5f\\x56\\x54\\x6c\\x75\\x99\\x9e\\x8e\\x8c\\x8f\\x8c\\x8d\\x1f\\x91\\x9b\\x8b\\x8b\\x94\\x1a\\xa8\\x76\"\n\"\\x9f\\x6c\\x6b\\x76\\x76\\x6c\\x4e\\xcc\\x60\\xe6\\xf7\\x05\\xdd\\xc9\\xe2\\xb2\\x7a\\xac\\x6d\\xa0\\x1e\\x7b\\x96\\x64\\x99\\x74\\x8d\\x08\\x83\\x88\\x8d\\x8e\"\n\"\\x8e\\x8f\\x8d\\x9a\\x8f\\x1f\\xc1\\x9a\\xa8\\xae\\xbb\\x1a\\xce\\x57\\xb0\\x2e\\x32\\x4e\\x67\\x57\\x71\\x9e\\x77\\xa4\\xa5\\xa1\\xa1\\xa4\\x90\\x89\\x94\\x8a\"\n\"\\x8e\\x1e\\x87\\x92\\x8b\\x8b\\x8d\\x1a\\x99\\xa4\\x99\\xa4\\xb4\\xa7\\x6d\\x5e\\x50\\x62\\x64\\x4e\\x85\\x83\\x8b\\x8c\\x81\\x1e\\xda\\xf7\\xcf\\x15\\xfb\\x5e\"\n\"\\xfb\\x37\\x32\\x0a\\x37\\x2e\\x1a\\xfb\\x49\\x28\\x0a\\xf8\\x60\\xf8\\xe0\\x15\\x48\\x06\\xfb\\x69\\xfb\\xd5\\x05\\x6f\\xf7\\x55\\x65\\x07\\x8c\\x64\\x84\\x82\"\n\"\\x6b\\x89\\x08\\x5b\\x6a\\xf7\\x85\\xac\\x6b\\x06\\x6c\\x8e\\x85\\x91\\x8c\\xad\\x08\\xb8\\xf7\\x02\\xb8\\xfb\\x02\\x07\\x34\\xf7\\x67\\x15\\xfb\\x67\\xfb\\x1b\"\n\"\\x07\\xf7\\x37\\xf8\\x39\\x15\\xfb\\x60\\xfb\\x36\\x2d\\x0a\\xf7\\x5c\\xf7\\x5b\\xf7\\x34\\xf7\\x35\\xf7\\x5a\\x3f\\x0a\\xf7\\x38\\xfb\\x54\\x1f\\x8a\\x6a\\x15\"\n\"\\xd5\\xde\\x6a\\x58\\xc3\\x2f\\x0a\\x37\\x2d\\x1a\\xfb\\x48\\x28\\x0a\\xf7\\xb2\\xf7\\xcf\\x15\\xad\\xa6\\xa4\\x9b\\xa8\\x1b\\xb9\\xad\\x5f\\x4e\\x4b\\x60\\x57\"\n\"\\x56\\x6f\\x74\\x99\\x9c\\x91\\x8b\\x8b\\x92\\x9a\\x1f\\x8e\\x92\\x8d\\x93\\x93\\x1a\\xa3\\x74\\x9f\\x6e\\x6d\\x76\\x75\\x6b\\x53\\xcc\\x61\\xe1\\xf7\\x05\\xe1\"\n\"\\xce\\xe3\\xdc\\x49\\xc6\\x2e\\x5c\\x66\\x7f\\x73\\x6d\\x1e\\x96\\xf7\\x0d\\x05\\x88\\xac\\x9c\\x8a\\xac\\x1b\\xe0\\xa2\\x8f\\x9a\\xa0\\x1f\\x9e\\x98\\x9a\\xa8\"\n\"\\x95\\xb7\\x08\\x7d\\x64\\x6a\\x86\\x55\\x1b\\x67\\x6b\\x8f\\x9a\\x32\\x1f\\x88\\x57\\x80\\xfb\\x0b\\x80\\x32\\x08\\xf7\\x2f\\xf8\\x0a\\x21\\x0a\\xf7\\xc3\\xf7\"\n\"\\xe2\\x15\\x8a\\xa1\\x8b\\x99\\x90\\x1a\\xd1\\xa1\\xd0\\xac\\xaa\\x1e\\x96\\x97\\x9f\\x92\\x9e\\x1b\\xa8\\xa2\\x7c\\x78\\x88\\x8a\\x87\\x8a\\x87\\x1f\\x87\\x80\"\n\"\\x89\\x80\\x86\\x1a\\x75\\xa1\\x77\\xa3\\xa7\\x9f\\xa2\\xaa\\xc0\\x4d\\xb2\\x36\\x52\\x5e\\x79\\x67\\x6b\\x1e\\x61\\x5b\\x72\\x41\\x40\\x1a\\x4b\\x9c\\x51\\xac\"\n\"\\x60\\x1e\\x5e\\xad\\xbc\\x74\\xca\\x1b\\xf3\\xd7\\xd1\\xea\\xd8\\x51\\xc3\\x3c\\x54\\x5e\\x72\\x59\\x69\\x1f\\xed\\xa9\\x15\\xbd\\xac\\x5e\\x48\\x4b\\x66\\x5f\"\n\"\\x58\\x56\\x66\\xb8\\xcc\\xca\\xb4\\xba\\xc1\\x1f\\x8a\\xf7\\xea\\x22\\x0a\\x30\\x0a\\xf7\\x6f\\xf8\\xdd\\x15\\xfb\\x3b\\xa9\\x07\\x93\\xae\\x97\\xb7\\x8c\\x8c\"\n\"\\xac\\x8c\\x19\\xf7\\x4a\\x06\\x43\\x27\\x47\\x33\\x8b\\x8b\\x7c\\x72\\x19\\x73\\x62\\x7d\\x63\\x6d\\x1a\\x66\\xa5\\x70\\xae\\xae\\xa4\\xa2\\xac\\x91\\x8a\\x91\"\n\"\\x8a\\x90\\x1e\\x80\\xb6\\x8b\\x8b\\x98\\x1a\\xa7\\x97\\xb3\\x9d\\xac\\x1e\\x91\\x97\\x8e\\x8f\\xe3\\xf7\\x29\\xb5\\xce\\x18\\x8c\\x8e\\x8f\\x8e\\x92\\x1e\\xfb\"\n\"\\x43\\xf7\\x0d\\x15\\xfb\\x5e\\xfb\\x37\\x26\\x0a\\x34\\x0a\\x37\\x2e\\x1a\\xfb\\x49\\x28\\x0a\\xf8\\x5e\\xf8\\x24\\x15\\xc1\\xaf\\x9d\\xa3\\xb1\\x1a\\xc3\\x55\"\n\"\\xb4\\x41\\x36\\x4e\\x58\\x43\\x5e\\x9b\\x72\\xbf\\x6a\\x1e\\x40\\x60\\x72\\x6a\\x53\\x1a\\x3f\\xcc\\x59\\xed\\xf4\\xd5\\xca\\xe3\\xc7\\x6d\\xb3\\x3d\\xb1\\x1e\"\n\"\\x3f\\xb2\\x15\\x68\\x9e\\x7c\\x9d\\xa5\\x1a\\xad\\xa9\\xa5\\xb3\\xb5\\xa9\\x6f\\x63\\x6b\\x7b\\x71\\x69\\x77\\x1e\\x82\\x28\\x15\\xb9\\x71\\x9e\\x72\\x67\\x1a\"\n\"\\x5a\\x62\\x66\\x56\\x53\\x62\\xb4\\xc3\\xb7\\xa3\\xb2\\xb7\\xa5\\x1e\\xb6\\xf7\\xf8\\x21\\x0a\\xf8\\x7a\\xf7\\xfc\\x15\\x8c\\x7c\\x8b\\x86\\x82\\x1a\\x45\\x75\"\n\"\\x46\\x69\\x6c\\x1e\\x80\\x80\\x76\\x84\\x78\\x1b\\x6e\\x74\\x9a\\x9e\\x8e\\x8c\\x8f\\x8d\\x90\\x1f\\x8e\\x96\\x8d\\x95\\x90\\x1a\\xa1\\x75\\x9f\\x73\\x6f\\x77\"\n\"\\x74\\x6c\\x56\\xc9\\x64\\xe1\\xc3\\xb9\\x9d\\xaf\\xaa\\x1e\\xb6\\xbb\\xa4\\xd5\\xd6\\x1a\\xcb\\x7a\\xc5\\x69\\xb7\\x1e\\xb7\\x69\\x5b\\xa2\\x4c\\x1b\\x22\\x3f\"\n\"\\x45\\x2c\\x3e\\xc5\\x53\\xda\\xc3\\xb7\\xa4\\xbd\\xad\\x1f\\x2f\\xf7\\x52\\x15\\xc0\\xb1\\x5e\\x4a\\x4c\\x62\\x5c\\x54\\x59\\x6a\\xb7\\xcf\\xcb\\xaf\\xb7\\xbf\"\n\"\\x1f\\x92\\xf7\\x24\\x21\\x0a\\xf7\\xd2\\xf8\\xe1\\x15\\x69\\x06\\x73\\x63\\x64\\x78\\x46\\x87\\x08\\x71\\xbe\\x07\\xab\\x88\\x8c\\x8b\\x64\\x1a\\xfb\\x9d\\x07\"\n\"\\x6a\\x8c\\x86\\x84\\x6e\\x1b\\x72\\x68\\xf7\\x5a\\xae\\x78\\x06\\x69\\x8e\\x85\\x91\\x8c\\xb1\\x08\\xf7\\x4f\\xf8\\x1f\\x15\\x2e\\x59\\x35\\xfb\\x30\\xfb\\x36\"\n\"\\xba\\x3b\\xeb\\xc2\\xb0\\x9d\\xb0\\xa1\\x1f\\xa3\\xb3\\x98\\xc9\\xd7\\x1a\\xf7\\x3d\\x5a\\xdd\\x25\\x1e\\x8f\\x6a\\x15\\xad\\x9c\\x46\\xfb\\x20\\xfb\\x1f\\x7a\"\n\"\\x47\\x68\\x6a\\x79\\xd3\\xf7\\x1c\\xf7\\x1d\\x9d\\xd2\\xad\\x1f\\xfb\\x01\\xf7\\x24\\x21\\x0a\\xf8\\x24\\xf9\\x56\\x39\\x0a\\xf7\\x58\\xfb\\x35\\xf7\\x37\\xfb\"\n\"\\x55\\x1f\\xc1\\x2e\\x15\\xfc\\x32\\x07\\x8a\\x57\\x9a\\x78\\xb7\\x8a\\x08\\xb3\\x69\\xfb\\xb8\\xad\\xa9\\x06\\xb8\\x9e\\x9c\\xb2\\x1f\\x91\\x07\\x8a\\x95\\x05\"\n\"\\xf7\\x9d\\x07\\x8c\\xa9\\x86\\x8f\\x70\\x8c\\x08\\x3e\\xa9\\x06\\xd9\\x93\\xc6\\xa8\\xaf\\xba\\x08\\x0e\\xf8\\x24\\xf9\\x56\\x22\\x0a\\x2a\\x0a\\xf7\\x26\\xfc\"\n\"\\x31\\x15\\xb0\\xfb\\x5c\\xfc\\x09\\x06\\x8a\\x97\\x8a\\x95\\x90\\x1a\\xce\\xb0\\xc6\\xda\\xc6\\x1e\\xc5\\xb6\\x99\\x98\\xa2\\xa9\\x08\\xa1\\xa8\\x97\\xad\\xac\"\n\"\\x1a\\xc3\\x70\\xb0\\x63\\x70\\x6c\\x75\\x7a\\x88\\x8c\\x89\\x8c\\x89\\x1e\\x94\\x74\\x8b\\x8b\\x82\\x1a\\x6f\\x74\\x75\\x6d\\x6b\\x74\\xa4\\xad\\xca\\xcc\\xb9\"\n\"\\xe6\\xf7\\x04\\xd4\\x54\\x36\\x66\\x7e\\x6b\\x70\\x6e\\x1e\\x75\\x73\\x72\\x7c\\x51\\x6f\\x39\\x66\\x55\\x60\\x7b\\x60\\x08\\xf7\\x6d\\x06\\xa0\\x8a\\x05\\xa3\"\n\"\\x94\\x9a\\xb4\\x1f\\x0e\\x33\\x0a\\x34\\xfb\\xcf\\x15\\x8a\\x96\\x94\\x8a\\x92\\x1b\\xa0\\xa2\\x91\\x96\\x9e\\x1f\\xac\\x9e\\x9b\\xa7\\xb5\\x1a\\xbd\\x6c\\xac\"\n\"\\x5e\\x70\\x71\\x7c\\x7b\\x8a\\x1e\\x8a\\x8b\\x8a\\x8c\\x8a\\x1e\\x8f\\x82\\x8c\\x85\\x82\\x1a\\x6f\\x73\\x74\\x6e\\x6f\\x76\\xa0\\xa8\\xc0\\xcf\\xb2\\xea\\xf2\"\n\"\\xc4\\x62\\x41\\x56\\x6a\\x64\\x53\\x7b\\x1e\\x7a\\x86\\x88\\x89\\x88\\x1a\\x87\\x8e\\x8a\\x94\\x8a\\x1e\\x9c\\x8a\\xb7\\x7d\\x9b\\x82\\x08\\xb2\\x75\\xa1\\x64\"\n\"\\x5c\\x1a\\x2c\\x31\\x46\\xfb\\x10\\x26\\x43\\xbc\\xd0\\xaf\\xa2\\xa3\\xae\\xad\\xa2\\x75\\x6b\\x85\\x8a\\x85\\x8a\\x86\\x1e\\x85\\x7c\\x8b\\x8b\\x85\\x1a\\x76\"\n\"\\xa3\\x7c\\xac\\xc5\\xbb\\xc5\\xd1\\xcb\\x63\\xb2\\x49\\x7b\\x7f\\x8a\\x86\\x71\\x1e\\x0e\\xf8\\x06\\xf8\\x92\\x15\\xfb\\x2a\\xfb\\x7a\\x05\\xf7\\x2a\\x06\\xa9\"\n\"\\xf8\\x3e\\x35\\x0a\\xcf\\x2e\\x15\\xfb\\xe1\\xf7\\x0c\\x55\\xfb\\x0c\\x59\\x07\\x65\\x90\\x85\\xae\\x87\\x1e\\xae\\x68\\xfb\\xa0\\xae\\xbf\\x06\\xaf\\x8e\\x92\"\n\"\\x94\\xb6\\x1a\\xb6\\xfb\\x6a\\xac\\x07\\xf7\\x81\\xf7\\xf6\\x05\\x0e\\x29\\x0a\\xfb\\x12\\xfb\\xe3\\x15\\xa6\\xad\\xb4\\x98\\xbf\\x1b\\xf1\\xd5\\x4a\\x31\\x2a\"\n\"\\x2b\\x41\\xfb\\x13\\x2e\\x43\\xba\\xc8\\xae\\xa2\\xa4\\xad\\xab\\xa5\\x74\\x6f\\x83\\x89\\x82\\x87\\x83\\x1f\\x83\\x7b\\x8b\\x8b\\x84\\x1a\\x77\\xa4\\x7b\\xa9\"\n\"\\xc6\\xba\\xc5\\xd4\\xce\\x65\\xbc\\x58\\x6c\\x70\\x7b\\x65\\x6d\\x1e\\x5f\\x9e\\x97\\xf0\\x94\\xe9\\x90\\xe8\\x19\\x79\\xf7\\x06\\x9f\\x89\\xb7\\x1b\\xc5\\xab\"\n\"\\x90\\x9a\\xb9\\x1f\\x82\\x60\\x7a\\x68\\x7b\\x7d\\x08\\x77\\x72\\x72\\x86\\x27\\x1b\\x67\\x79\\x8c\\x8e\\x66\\x1f\\x0e\\xf8\\x26\\xf8\\x03\\x15\\x50\\x5f\\x58\"\n\"\\x46\\x45\\xb3\\x5a\\xc4\\xc3\\xb3\\xbb\\xd0\\xd5\\x67\\xbb\\x55\\x1f\\x89\\xf7\\xe7\\x24\\x0a\\x21\\xfc\\x05\\x15\\xc2\\xb1\\xbc\\xa6\\xc8\\x1b\\xe3\\xcb\\x4c\"\n\"\\x34\\x20\\x37\\x3e\\xfb\\x08\\x45\\x56\\xa4\\xbd\\x65\\x1f\\x66\\xbb\\x78\\xca\\xd3\\x1a\\xd4\\xa1\\xd5\\xb0\\xbf\\x1e\\xc2\\xb2\\xbf\\xa5\\xd4\\x1b\\xe8\\xd0\"\n\"\\x60\\x51\\x69\\x75\\x73\\x6c\\x70\\x74\\xa1\\xa4\\x91\\x8d\\x96\\x8d\\x97\\x1f\\x8d\\x90\\x8b\\x8f\\x8e\\x1a\\xa1\\x73\\x9b\\x6b\\x76\\x74\\x83\\x7f\\x7f\\x1e\"\n\"\\x66\\x68\\x73\\x40\\x3c\\x1a\\x82\\x8b\\x8b\\x8c\\x7c\\x1e\\x80\\x8b\\x8b\\x8c\\x82\\x1e\\x0e\\x38\\x0a\\xf7\\x57\\x25\\x0a\\xfb\\x5c\\x2c\\x15\\xf8\\x1e\\x06\"\n\"\\x88\\x84\\x88\\x86\\x8a\\x89\\x5e\\x40\\x18\\x2a\\xfb\\x3a\\x87\\x84\\x86\\x81\\x08\\x78\\x67\\x7e\\x5f\\x6b\\x1a\\x82\\x8c\\x82\\x8d\\x81\\x1e\\x91\\x62\\x8b\"\n\"\\x8b\\x83\\x1a\\x63\\x72\\x72\\x62\\x63\\x71\\xa8\\xb7\\xbc\\xa8\\xc8\\xc6\\xd7\\x1e\\x9a\\x9f\\x9a\\x9f\\x9a\\x9e\\xdc\\xf7\\x03\\x18\\xfb\\x5e\\x06\\x66\\x8a\"\n\"\\x8a\\x8a\\x7e\\x5a\\x82\\x65\\x18\\x6a\\x06\\x0e\\xf8\\x40\\xf8\\x40\\x15\\xae\\xa1\\x9c\\xa7\\xae\\x1a\\xb6\\x6b\\xab\\x5e\\x5f\\x6b\\x6f\\x66\\x6e\\x9c\\x75\"\n\"\\xb0\\x78\\x1e\\x6f\\x28\\x15\\x5d\\x70\\x72\\x61\\x5b\\x1a\\x4f\\xb7\\x5e\\xc7\\xc4\\xb8\\xb3\\xbf\\xb2\\x76\\xa6\\x5a\\xa7\\x1e\\x79\\xf8\\x18\\x24\\x0a\\xcc\"\n\"\\xfb\\xbc\\x15\\xe0\\x60\\xae\\x5f\\x47\\x1a\\x28\\x38\\x44\\xfb\\x07\\xfb\\x01\\x43\\xc3\\xe0\\xcb\\xa7\\xb1\\xdd\\xba\\x1e\\x52\\xb1\\x79\\xa6\\xbc\\x1a\\xdb\"\n\"\\xcf\\xc3\\xe9\\xde\\xc7\\x5f\\x4d\\x60\\x77\\x70\\x4e\\x64\\x1e\\x0e\\xf8\\x19\\xf8\\xdf\\x15\\x53\\x64\\x5b\\x45\\x42\\xb0\\x5d\\xc4\\xc4\\xb5\\xbd\\xd0\\xcf\"\n\"\\x62\\xbd\\x52\\x1f\\x96\\xf7\\x0b\\x35\\x0a\\xe8\\xfb\\xeb\\x15\\x5d\\x65\\x60\\x77\\x4c\\x1b\\x2d\\x4c\\xc6\\xe4\\xf3\\xdf\\xd7\\xf7\\x06\\xf7\\x17\\xe1\\x26\"\n\"\\xfb\\x2f\\x3d\\x76\\x40\\x64\\x54\\x1f\\x58\\x67\\x56\\x72\\x40\\x1b\\x2f\\x47\\xb7\\xc7\\xaf\\xa3\\xa6\\xa9\\xa7\\xa1\\x74\\x6d\\x86\\x8a\\x86\\x8a\\x85\\x1f\"\n\"\\x88\\x80\\x8a\\x83\\x88\\x1a\\x75\\xa3\\x7b\\xaa\\xa4\\xa4\\x95\\x9c\\x99\\x1e\\xac\\xb1\\x9f\\xd0\\xd7\\x1a\\x95\\x07\\x0e\\xf8\\xa0\\xf8\\xe0\\x15\\x63\\x76\"\n\"\\x3b\\xfb\\x2f\\xfb\\x2e\\xa0\\x3a\\xb3\\xb4\\x9f\\xd7\\xf7\\x32\\xf7\\x32\\x77\\xd9\\x62\\x1f\\xfb\\x13\\xf7\\x0a\\x15\\xfb\\x5d\\xfb\\x35\\xfb\\x34\\xfb\\x5c\"\n\"\\xfb\\x5a\\xf7\\x35\\xfb\\x35\\xf7\\x5a\\xf7\\x5b\\xf7\\x35\\xf7\\x34\\xf7\\x5b\\xf7\\x5a\\xfb\\x35\\xf7\\x36\\xfb\\x58\\x1f\\x33\\x2e\\x15\\xfc\\x42\\x07\\x61\"\n\"\\x90\\x84\\xb1\\x88\\x1e\\xa0\\x65\\xfb\\x70\\xb1\\xa7\\x06\\xaa\\x8c\\x91\\x92\\x8a\\xaf\\x08\\xf7\\xba\\x07\\xb5\\x8a\\x8c\\x67\\x8d\\x1e\\x52\\xa8\\x06\\xda\"\n\"\\x91\\xb3\\x9e\\xa8\\xb8\\x08\\xf7\\x8d\\x93\\x15\\xf7\\x04\\xc2\\x30\\xfb\\x4f\\x47\\x80\\x48\\x79\\x63\\x1f\\x51\\x70\\x62\\x72\\x45\\x1b\\x21\\x56\\xe4\\xf7\"\n\"\\x46\\xf7\\x43\\xc2\\xe9\\xf3\\x1f\\x0e\\xf8\\x1d\\xf8\\xe0\\x15\\x80\\x55\\x6a\\x77\\x3e\\x8c\\x08\\x62\\xec\\xfb\\xf8\\xc8\\xf8\\x6a\\x07\\x6d\\xf7\\x0a\\x21\"\n\"\\x0a\\xf8\\xae\\xf7\\x3d\\x15\\xfb\\x75\\x06\\x99\\xa8\\x94\\x94\\xc2\\xb0\\x08\\xf7\\x0d\\xdc\\xa9\\xb3\\xd7\\x1a\\xe1\\x4b\\xc9\\x32\\x35\\x4d\\x4e\\x36\\x1e\"\n\"\\x7d\\xc8\\x07\\x8a\\x92\\x8b\\x8f\\x8f\\x1a\\xc7\\xae\\xb3\\xc0\\xc1\\xb1\\x61\\x4f\\x4e\\x73\\x6c\\x2d\\x4e\\x1e\\x3c\\x58\\x66\\x5a\\x54\\x1a\\x88\\x8c\\x85\"\n\"\\x8c\\x84\\x1e\\xf7\\xb5\\x06\\xfb\\x1e\\xf8\\xe0\\x21\\x0a\\xf7\\xca\\xf8\\x62\\x15\\x8c\\x9d\\x8c\\x93\\x8e\\x97\\x08\\xa9\\x94\\xa8\\x9e\\xb0\\x1b\\xbe\\xab\"\n\"\\x6b\\x59\\x6c\\x82\\x76\\x78\\x7e\\x1f\\x7c\\x76\\x74\\x83\\x75\\x1b\\x88\\x84\\x8c\\x8c\\x81\\x1f\\x82\\x60\\xac\\x06\\xd0\\xb2\\x6b\\x51\\x58\\x65\\x66\\x56\"\n\"\\x6b\\x70\\x98\\xa2\\x7b\\x1f\\x80\\x9a\\x87\\x9d\\xab\\x1a\\x55\\x80\\x8a\\x77\\x05\\x46\\xc7\\x58\\xdc\\xe3\\xc9\\xc4\\xdd\\xc6\\x71\\xb0\\x55\\x9d\\x1e\\xbb\"\n\"\\xa1\\x9f\\xa9\\xbc\\x1a\\xd6\\x4f\\xc2\\x3a\\x58\\x5d\\x74\\x66\\x75\\x1e\\x80\\x77\\x86\\x78\\x89\\x6a\\x08\\xf7\\x24\\xf7\\x88\\x21\\x0a\\xf8\\xae\\xf7\\xb1\"\n\"\\x15\\x40\\xf7\\xc8\\x53\\x06\\xfb\\x63\\xfb\\xc8\\x05\\x59\\xf7\\x64\\xfb\\x09\\xc2\\xf7\\x09\\xd6\\x07\\xfb\\x16\\xf7\\xab\\x15\\xfb\\x79\\xfb\\x2c\\x07\\xf7\"\n\"\\x24\\xf8\\x39\\x21\\x0a\\xf7\\xa1\\xf8\\xdd\\x15\\xfb\\x9e\\xb8\\x07\\xbf\\x95\\xac\\xa8\\xba\\x1b\\xc3\\xb1\\x62\\x4f\\x31\\x69\\x5a\\x4d\\x57\\x68\\xad\\xbc\"\n\"\\x8a\\x1f\\x5e\\x7f\\x05\\x41\\x8f\\xbd\\x5c\\xd6\\x1b\\xe8\\xce\\xd5\\xf1\\xea\\x4e\\xcc\\x34\\x5c\\x70\\x7e\\x6c\\x75\\x1f\\xf7\\x19\\xf7\\x5d\\xbd\\x07\\xfb\"\n\"\\x07\\xf7\\x0d\\x21\\x0a\\xf8\\x9c\\xf8\\x7c\\x15\\xd1\\x7e\\x61\\xaf\\x49\\x1b\\x51\\x53\\x67\\x56\\x72\\x1f\\x78\\x63\\x83\\x5a\\x46\\x1a\\x41\\x96\\x54\\xa0\"\n\"\\x65\\x1e\\x61\\xa4\\xbb\\x6f\\xbd\\x1b\\xde\\xc9\\xd1\\xe7\\xe2\\x53\\xc8\\x3c\\x58\\x67\\x74\\x5e\\x76\\x1f\\x8a\\x96\\x8b\\x8c\\x96\\x1a\\xf7\\x00\\xb4\\xcd\"\n\"\\xcd\\xa5\\xa1\\x7f\\x77\\x96\\x1e\\x91\\x81\\x8d\\x83\\x91\\x72\\x08\\x3c\\x2d\\x15\\xc0\\xad\\x5e\\x44\\x49\\x69\\x60\\x58\\x53\\x62\\xbd\\xcf\\xc8\\xb4\\xb9\"\n\"\\xc1\\x1f\\x95\\xf7\\xda\\x21\\x0a\\xf7\\x82\\xf8\\xdc\\x15\\x59\\xf7\\x92\\x07\\x24\\xfb\\x0e\\x3c\\xfb\\x38\\x79\\xfb\\x16\\x08\\xce\\x06\\xa4\\xf7\\x1f\\xc2\"\n\"\\xf7\\x0f\\xf7\\x03\\xf7\\x37\\x08\\xb4\\x07\\xfb\\x2a\\xf7\\x0e\\x21\\x0a\\xf8\\x5e\\xf8\\x02\\x15\\x9c\\x92\\x94\\x90\\x93\\x90\\x08\\xa5\\x9d\\x9a\\xab\\xb1\"\n\"\\x1a\\xd4\\x55\\xbd\\x3d\\x3b\\x52\\x58\\x44\\x59\\xa1\\x6a\\xbc\\x74\\x1e\\x76\\x84\\x7f\\x85\\x81\\x84\\x08\\x6d\\x77\\x7a\\x67\\x61\\x1a\\x3a\\xc8\\x52\\xe2\"\n\"\\xe2\\xca\\xc5\\xdc\\xc7\\x70\\xb0\\x51\\x9f\\x1e\\x4e\\xf7\\x51\\x15\\xc0\\xac\\x6b\\x56\\x59\\x67\\x68\\x59\\x58\\x6b\\xac\\xbf\\xbe\\xac\\xad\\xbd\\x1f\\x88\"\n\"\\xfb\\x6b\\x15\\xc6\\xad\\x68\\x50\\x53\\x65\\x63\\x55\\x54\\x64\\xb3\\xc3\\xc4\\xb1\\xb0\\xc2\\x1f\\x91\\xf8\\x02\\x21\\x0a\\xf7\\x9c\\xf7\\x69\\x15\\x90\\x70\"\n\"\\x8f\\x7e\\x94\\x7c\\x08\\x6e\\x9e\\xb1\\x78\\xb4\\x1b\\xaf\\xae\\x98\\xa2\\xa4\\x1f\\xba\\xb5\\xa0\\xcb\\xf3\\x1a\\xcf\\x80\\xc6\\x79\\xae\\x1e\\xbc\\x71\\x5f\"\n\"\\xa6\\x55\\x1b\\x37\\x4c\\x48\\x2f\\x34\\xc1\\x4f\\xda\\xc1\\xad\\xa0\\xba\\xa2\\x1f\\x89\\x3b\\x85\\x68\\x7c\\x6e\\x08\\x67\\x78\\x6f\\x77\\x6a\\x1b\\x66\\x73\"\n\"\\xa2\\xb7\\x80\\x1f\\xd4\\xf7\\xe0\\x15\\xc2\\xb3\\x59\\x46\\x4b\\x65\\x5f\\x54\\x53\\x6b\\xb5\\xd5\\xcf\\xac\\xb6\\xc0\\x1f\\x99\\xf7\\x2b\\x21\\x0a\\xf8\\x74\"\n\"\\xf8\\xe6\\x15\\x61\\x66\\x79\\x69\\x72\\x1f\\x6f\\x65\\x7d\\x50\\x33\\x1a\\x2e\\x9e\\x43\\xac\\x63\\x1e\\x71\\xa2\\xac\\x7b\\xae\\x1b\\xb3\\xad\\x9c\\xad\\xa5\"\n\"\\x1f\\xa8\\xaf\\x9b\\xce\\xdd\\x1a\\xf7\\x3a\\x5c\\xdd\\x2c\\x1e\\x89\\x64\\x15\\xc4\\xa7\\x46\\xfb\\x20\\xfb\\x17\\x70\\x4a\\x54\\x53\\x6b\\xd6\\xf7\\x18\\xf7\"\n\"\\x17\\xa8\\xce\\xc3\\x1f\\xfb\\x75\\xac\\x15\\x86\\x5d\\x64\\x6e\\x51\\x8a\\x08\\x63\\xde\\xfb\\xf6\\xc7\\xf8\\x6a\\x07\\xf5\\xf7\\x0a\\x21\\x0a\\x29\\x0a\\xb8\"\n\"\\x22\\x15\\xfc\\x78\\x30\\xf7\\xf9\\x2c\\xc1\\x07\\xe1\\x8a\\xa2\\x99\\x97\\xc7\\x08\\x0e\\x29\\x0a\\xf7\\x2c\\xfc\\x9f\\x15\\x49\\xfb\\xd1\\x07\\x8a\\x94\\x8b\"\n\"\\x93\\x8f\\x1a\\xc7\\xb0\\xbc\\xe2\\xc4\\x1e\\xdf\\xc1\\xa4\\xac\\xc4\\x1a\\xc4\\x6c\\xb2\\x5d\\x5c\\x6f\\x66\\x4e\\x86\\x8b\\x85\\x8c\\x81\\x1e\\x33\\x93\\x05\"\n\"\\x8a\\x94\\x8b\\x92\\x90\\x1a\\xe2\\xd0\\xcb\\xe9\\xed\\xd2\\x49\\x31\\x4f\\x71\\x5d\\x4d\\x5c\\x1e\\x78\\x7c\\x73\\x7a\\x6c\\x77\\x5d\\x6b\\x7f\\x81\\x82\\x78\"\n\"\\x08\\x0e\\x33\\x0a\\xfb\\x32\\xfb\\x83\\x15\\x8d\\xb2\\x91\\xa0\\x99\\xa1\\x08\\xaf\\xa4\\xbc\\xa2\\xc1\\x1b\\xe3\\xcc\\x51\\x3c\\x5d\\x78\\x6b\\x64\\x75\\x1f\"\n\"\\x9c\\x81\\x96\\x83\\x92\\x85\\x08\\xa2\\x76\\x98\\x6b\\x64\\x1a\\x34\\x48\\x4d\\x2c\\x31\\x4a\\xc2\\xd8\\x91\\x8b\\x94\\x8c\\x93\\x1e\\xdd\\x9c\\x05\\x65\\x8d\"\n\"\\x7e\\x91\\x7e\\x1e\\x73\\x97\\xa3\\x7d\\xa8\\x1b\\xb7\\xaa\\xac\\xbb\\xc0\\x6c\\xa8\\x55\\x7d\\x7f\\x8a\\x88\\x72\\x1f\\xc9\\x07\\x88\\xa0\\x95\\x8b\\x92\\x1b\"\n\"\\xc0\\xaa\\xa7\\xb9\\xbe\\x73\\xa7\\x60\\x73\\x77\\x82\\x79\\x80\\x1f\\x82\\x7d\\x89\\x7e\\x8a\\x68\\x08\\x0e\\xf8\\x1e\\xf8\\x79\\x15\\xfb\\x0f\\xfb\\x4c\\x05\"\n\"\\xf7\\x0f\\x06\\x91\\xf8\\x29\\x36\\x0a\\xf7\\x2b\\xfc\\x29\\x15\\x49\\x40\\xfb\\x0a\\x39\\xf7\\x0a\\xfb\\x64\\xcd\\x07\\xf7\\x6e\\xf7\\xc5\\x05\\xd3\\xfb\\xc5\"\n\"\\x06\\x0e\\xf8\\x24\\xf9\\x56\\x22\\x0a\\x2d\\x0a\\xf7\\x5c\\xf7\\x5b\\xf7\\x34\\xf7\\x35\\xf7\\x5b\\x27\\x0a\\xfb\\x55\\x1f\\xfb\\x25\\x21\\x15\\xf7\\xad\\x4a\"\n\"\\xfb\\x66\\x2d\\x06\\x9a\\xad\\x9c\\x8f\\xaa\\x1b\\xed\\xcd\\x48\\x27\\x20\\x43\\x3f\\x24\\x38\\x54\\xbe\\xdc\\x87\\x1f\\xd2\\x9e\\x05\\x73\\x8c\\x84\\x8f\\x7f\"\n\"\\x1e\\x6e\\x96\\xa5\\x79\\xaa\\x1b\\xc0\\xa9\\xb6\\xd8\\xb1\\x87\\x9c\\x80\\x9e\\x1f\\xa0\\x7d\\x72\\x99\\x71\\x1b\\x62\\x72\\x70\\x55\\x81\\x1f\\x44\\x06\\x0e\"\n\"\\xf8\\x19\\xf8\\x0c\\x15\\x5d\\x69\\x61\\x53\\x4e\\xae\\x5d\\xbb\\xb6\\xa6\\xb1\\xc7\\xcd\\x6f\\xb4\\x5e\\x1f\\x96\\xf7\\xde\\x24\\x0a\\xc5\\xfb\\x7f\\x15\\x85\"\n\"\\xa3\\x86\\x9a\\x89\\x91\\x08\\x9e\\x82\\x79\\x95\\x72\\x1b\\x67\\x71\\x77\\x64\\x7f\\x1f\\x82\\x72\\x89\\x7a\\x86\\x58\\x08\\xa9\\xae\\xa2\\x95\\xb3\\x1b\\xe0\"\n\"\\xc8\\x49\\x30\\x2a\\x47\\x42\\x30\\x56\\x57\\xa7\\xb6\\x6f\\x1f\\x73\\xb1\\x7f\\xc3\\xdb\\x1a\\xd4\\x94\\xb9\\xa2\\xb7\\x1e\\xc2\\xa7\\xc5\\xae\\xc9\\x1b\\xba\"\n\"\\xb4\\x78\\x6c\\xa2\\x1f\\x98\\x7a\\x90\\x7d\\x91\\x6b\\x08\\x0e\\x38\\x0a\\x27\\x0a\\xfb\\x55\\x1f\\xfb\\x45\\x20\\x15\\xf7\\xe8\\x59\\x06\\x22\\xfb\\x42\\x5f\"\n\"\\xfb\\x02\\x74\\xfb\\x27\\x08\\x2c\\x06\\x9e\\xf7\\x1a\\xd2\\xf7\\x31\\xee\\xf7\\x11\\x08\\xfb\\x9a\\x06\\x0e\\xf8\\x22\\xf8\\xbb\\x15\\x62\\x72\\x6e\\x5c\\x5b\"\n\"\\xa3\\x6e\\xb4\\xb4\\xa7\\xab\\xb9\\xba\\x71\\xa7\\x61\\x1f\\x87\\xfb\\x67\\x15\\x5b\\x6c\\x6a\\x59\\x57\\xac\\x67\\xba\\xba\\xab\\xaf\\xbf\\xc0\\x6d\\xa9\\x59\"\n\"\\x1f\\x91\\xf8\\x02\\x24\\x0a\\xdb\\xfb\\xe0\\x15\\xc4\\x6a\\x9e\\x6d\\x56\\x1a\\x34\\x45\\x49\\x2e\\x2f\\x46\\xcb\\xe0\\xc5\\xa6\\xb3\\xc2\\xa1\\x1e\\x62\\x9f\"\n\"\\x74\\xb1\\xb9\\x1a\\xd5\\xcd\\xc4\\xdf\\xe0\\xc8\\x53\\x3f\\x5a\\x79\\x70\\x5b\\x70\\x1e\\x0e\\xf8\\x14\\xf8\\xbb\\x15\\x60\\x70\\x65\\x4f\\x49\\xa7\\x62\\xb8\"\n\"\\xb9\\xad\\xb5\\xc3\\xc8\\x68\\xb9\\x5b\\x1f\\x9b\\xf7\\x2f\\x24\\x0a\\x40\\xfc\\x67\\x15\\x58\\x95\\x9d\\x76\\xab\\x1b\\x9b\\x9d\\x92\\x98\\x97\\x1f\\xa5\\xa7\"\n\"\\x95\\xab\\x90\\xd5\\x08\\x70\\x70\\x6d\\x80\\x61\\x1b\\x38\\x4f\\xcd\\xe7\\xeb\\xcf\\xd2\\xe7\\xbe\\xb4\\x77\\x64\\xa9\\x1f\\xa9\\x65\\x9a\\x4c\\x35\\x1a\\x43\"\n\"\\x7f\\x4b\\x77\\x68\\x1e\\x55\\x6c\\x55\\x6b\\x4f\\x1b\\x5e\\x62\\x9f\\xaa\\x75\\x1f\\x7f\\x9c\\x86\\x9c\\x85\\xae\\x08\\x0e\\xf8\\x78\\xf8\\xb9\\x15\\x5d\\x73\"\n\"\\x4a\\xfb\\x0f\\xfb\\x0e\\xa6\\x41\\xb9\\xb8\\xa2\\xcb\\xf7\\x0f\\xf7\\x16\\x72\\xce\\x5d\\x1f\\x37\\xf7\\x31\\x24\\x0a\\x28\\x22\\x15\\xfc\\x77\\x35\\xf7\\xf6\"\n\"\\x38\\xc1\\x07\\xce\\x8a\\xa9\\xa1\\x91\\xc1\\x08\\xf7\\x8f\\x92\\x15\\xf3\\xc0\\x36\\xfb\\x3d\\xfb\\x35\\x53\\x34\\x23\\x25\\x54\\xe5\\xf7\\x3a\\xe5\\x9a\\xc9\"\n\"\\xab\\xb4\\x1f\\xad\\xa6\\xb3\\x9e\\xb9\\x1b\\x0e\\xc2\\xf8\\x22\\xf9\\x0d\\x15\\xf7\\x6b\\xfb\\x6f\\x05\\xfc\\xd6\\xfb\\x18\\xf8\\xd6\\x06\\xfb\\x6b\\xfb\\x74\"\n\"\\x05\\xf7\\x47\\x06\\xf7\\xaf\\xf7\\xb3\\xfb\\xaf\\xf7\\xb4\\x05\\x0e\\x8a\\xae\\xf7\\xf6\\x15\\x77\\xf8\\xe1\\x07\\x53\\x46\\x75\\x56\\x8c\\x4f\\xc6\\xe0\\xf7\"\n\"\\x04\\xdf\\xe0\\xa1\\x36\\xa4\\x26\\xd7\\x45\\x3d\\x0a\\xf7\\x45\\xf7\\x69\\xf7\\xf6\\x15\\xc1\\xcd\\xa4\\xc7\\x89\\xc5\\x50\\x35\\xfb\\x05\\x35\\x37\\x75\\xde\"\n\"\\x74\\xf6\\x3b\\xcd\\x32\\x8d\\xc7\\x68\\xde\\x5f\\xb2\\x08\\xf8\\xe2\\x06\\x53\\x47\\x74\\x54\\x8d\\x50\\xc6\\xe0\\xf7\\x04\\xe0\\xdf\\xa1\\x37\\xa2\\x25\\xd8\"\n\"\\x46\\x3d\\x0a\\xfc\\x11\\xf7\\x82\\xf9\\x14\\x15\\xcd\\x55\\xc6\\x72\\xc6\\x8d\\x36\\xc4\\x36\\xf7\\x05\\x73\\xe1\\x73\\x35\\x3f\\x26\\x2e\\x46\\xc8\\x89\\xde\"\n\"\\xae\\xb3\\xb7\\x08\\xfc\\xe1\\x07\\x46\\xc3\\x52\\xa2\\x51\\x89\\xe1\\x50\\xdf\\xfb\\x03\\xa2\\x35\\xa4\\xe1\\xd9\\xf2\\xe6\\xce\\x4e\\x8d\\x36\\x68\\x65\\x5f\"\n\"\\x08\\x0e\\x30\\xf7\\x0f\\xf8\\xe9\\x15\\x33\\xfb\\x11\\xf8\\x04\\xfb\\x6b\\x38\\xfb\\x04\\xf8\\x0e\\x58\\xfb\\x40\\xf7\\xeb\\x3d\\xfb\\x09\\x05\\x0e\\xe0\\xae\"\n\"\\xf8\\x4c\\x15\\xfb\\x50\\x07\\xf8\\xb2\\xcd\\x3b\\xfb\\x46\\xf8\\x1d\\xf7\\x62\\xfc\\x1d\\xf7\\x61\\xdb\\xfb\\x46\\x05\\x0e\\x30\\xf7\\x0f\\xe9\\x15\\xf7\\xd9\"\n\"\\xf7\\xa9\\xd9\\xfb\\x08\\xf7\\x40\\xf7\\xea\\xfc\\x0e\\x59\\xde\\xfb\\x05\\xfc\\x04\\xfb\\x6b\\x05\\x0e\\xda\\xae\\xf8\\x04\\x15\\x5e\\x07\\xf7\\xff\\x9a\\x66\"\n\"\\x5b\\x61\\x47\\x71\\x54\\x19\\xf7\\x2c\\xcc\\xc4\\xa1\\xd5\\xa2\\xf7\\x0a\\xae\\xf7\\x19\\xa8\\xc4\\x8f\\xfb\\x7f\\xb2\\x27\\xaa\\xfb\\x94\\xf7\\x03\\x08\\x87\"\n\"\\x07\\xa6\\x54\\xb4\\x4a\\xb0\\x5b\\x08\\x0e\\xe3\\xf8\\xda\\xf7\\x98\\x15\\x56\\x56\\x05\\x68\\x68\\x7e\\x74\\x6f\\x1a\\x58\\xb5\\x61\\xbe\\xac\\x9e\\x97\\xb7\"\n\"\\xb1\\x1e\\xf7\\x78\\xf7\\x9e\\xfb\\x78\\xf7\\x98\\x05\\xb6\\x66\\x79\\x96\\x6b\\x1b\\x59\\x61\\x61\\x5a\\x71\\x9a\\x6f\\xab\\x6d\\x1f\\xbd\\x59\\x05\\xfc\\x3b\"\n\"\\x06\\x5d\\x81\\x89\\x82\\x76\\x1f\\x70\\x7e\\x77\\x6a\\x6b\\x1a\\x6b\\x9f\\x6a\\xa6\\x7e\\x1e\\x81\\xa0\\x96\\x89\\xb8\\x1b\\x0e\\xe4\\xae\\xf7\\xfe\\x15\\x6a\"\n\"\\xf9\\x11\\xfb\\x5c\\x07\\xf7\\x6f\\xf7\\x6c\\xfb\\x6f\\xf7\\x6d\\x05\\xfb\\x5c\\x07\\x0e\\xe4\\xae\\xf8\\x24\\x15\\xfb\\x04\\xf9\\x13\\xfb\\x33\\x07\\xf7\\x6f\"\n\"\\xf7\\x6b\\xfb\\x6f\\xf7\\x6d\\x05\\xfb\\x35\\x07\\x0e\\x86\\xf7\\xca\\xf8\\x46\\x15\\xfb\\x45\\xf7\\x99\\x25\\x07\\xf7\\x78\\xf7\\x53\\xfb\\x78\\xf7\\x53\\x05\"\n\"\\x24\\x07\\xfb\\xff\\x16\\xfb\\x45\\xd7\\xf7\\x45\\x07\\xfb\\x33\\x16\\xfb\\x45\\xb8\\xf7\\x45\\x07\\xfb\\x1b\\x16\\xfb\\x45\\xa3\\xf7\\x45\\x07\\x0e\\xad\\xf8\"\n\"\\x2c\\xf8\\x7c\\x15\\xfb\\xb3\\xf7\\x43\\x23\\x92\\x07\\xb0\\xee\\xf2\\xf1\\xf7\\x00\\xb6\\xfb\\x07\\xba\\x28\\xf1\\x69\\xf3\\x08\\x84\\x21\\x06\\xfb\\xa6\\x16\"\n\"\\xfb\\xb3\\xd2\\xf7\\xb3\\x07\\xfb\\x34\\x16\\xfb\\xb3\\xbd\\xf7\\xb3\\x07\\xfb\\x21\\x16\\xfb\\xb3\\xac\\xf7\\xb3\\x07\\xfb\\x13\\x16\\xfb\\xb3\\x9e\\xf7\\xb3\"\n\"\\x07\\x0e\\x80\\xae\\xf8\\x7f\\x15\\xfb\\xb6\\xf8\\x93\\x2a\\x07\\xf7\\x89\\xf7\\x86\\xfb\\x89\\xf7\\x86\\x05\\x2a\\x07\\x0e\\xe0\\xae\\xf8\\xf6\\x15\\xf7\\xba\"\n\"\\xfb\\xa4\\xfb\\xba\\xfb\\x94\\xf9\\xea\\xf7\\x8c\\x05\\xfd\\x70\\xf7\\x63\\x15\\xf9\\x12\\xfb\\x63\\xfc\\x39\\x95\\x05\\x0e\\xe0\\xae\\xdd\\x15\\xf9\\xea\\xf7\"\n\"\\xab\\xfd\\xea\\xf7\\x8d\\xf7\\xba\\xfb\\x95\\x05\\xfb\\x40\\xfb\\x5b\\x15\\xf7\\x6d\\xf7\\x59\\xf8\\x39\\x95\\x05\\x0e\\xd9\\xae\\xf9\\x44\\x15\\xf7\\x5d\\xfb\"\n\"\\xea\\xfb\\x5d\\xfb\\xea\\xf9\\xe3\\xf7\\xea\\x05\\x0e\\xe6\\xf8\\xb6\\xf8\\xb8\\x15\\x38\\xfb\\xb7\\x07\\x60\\x8a\\x05\\x3b\\x6a\\x9d\\xbd\\x7c\\x1f\\x84\\xa0\"\n\"\\x8a\\x95\\xb7\\x1a\\x63\\xfb\\x76\\x06\\x8a\\x2b\\x94\\x6b\\xb1\\x61\\xb0\\x67\\xae\\x80\\xd8\\x8d\\x08\\xf7\\xcf\\x38\\x06\\xf7\\xf3\\xf7\\x7d\\x05\\x0e\\xe7\"\n\"\\xf8\\xb5\\xf7\\x24\\x15\\xf7\\xf3\\xf7\\x7b\\xfb\\xf3\\xf7\\x7d\\x05\\x38\\xfb\\xcf\\x07\\x3e\\x8d\\x69\\x80\\x65\\x67\\x08\\x65\\x61\\x83\\x6f\\x28\\x1a\\xfb\"\n\"\\x78\\xb3\\x97\\x07\\xf2\\xab\\xa9\\xf7\\x01\\x1e\\xb1\\x06\\xf7\\xb7\\x06\\x0e\\xfc\\x0c\\xf8\\x41\\xf7\\xee\\x15\\xfb\\x9e\\xf8\\x50\\x05\\xfb\\x24\\xfb\\x14\"\n\"\\xfc\\xed\\xf7\\x14\\xfb\\x25\\x07\\x0e\\xb7\\xae\\xf8\\xa4\\x15\\xfc\\x01\\xf8\\x1f\\x2e\\x96\\x07\\xef\\xf7\\x2f\\xf7\\x17\\xe2\\xf7\\x44\\xa9\\x08\\x93\\x07\"\n\"\\xfb\\x3b\\xa1\\xfb\\x22\\xe9\\x29\\xf7\\x2f\\x08\\x80\\x2e\\x06\\x0e\\x88\\xf8\\x2e\\xf9\\x1c\\x15\\xfb\\x32\\xfc\\x0b\\xfb\\xb7\\xf8\\x0b\\xfb\\x30\\xf7\\x14\"\n\"\\x07\\xf7\\x9c\\xf7\\xc1\\xfb\\x9c\\xf7\\xc4\\x05\\x22\\x75\\x15\\xf7\\x8e\\xfb\\xae\\xfb\\x8e\\xfb\\xad\\x05\\xf7\\x34\\xfc\\x0a\\xf7\\x87\\xf8\\x0a\\x07\\x0e\"\n\"\\x88\\xf8\\x2b\\xf9\\x1c\\x15\\xfb\\x32\\xfc\\x08\\xfb\\xb7\\xf8\\x08\\xfb\\x30\\xf7\\x16\\x07\\xf7\\x9d\\xf7\\xc0\\xfb\\x9d\\xf7\\xc5\\x05\\x7a\\x75\\x15\\xf7\"\n\"\\x8e\\xfb\\xaf\\xfb\\x8e\\xfb\\xac\\x05\\xf7\\x34\\xfc\\x09\\xf7\\x87\\xf8\\x09\\x07\\x0e\\xa7\\xf9\\x30\\xf8\\xe1\\x15\\x47\\x36\\x05\\xfc\\x15\\x06\\xfb\\x48\"\n\"\\xfb\\x4c\\x05\\xfb\\x13\\xf7\\xf0\\x2f\\x07\\xf8\\x55\\xf7\\x51\\x05\\xf7\\x09\\x07\\xfb\\x37\\xf7\\x2a\\x15\\xf7\\x21\\xfb\\x31\\xfc\\x23\\xfb\\x3b\\xc6\\xd8\"\n\"\\x05\\xfc\\x32\\x06\\xf7\\x3c\\xf7\\x43\\x05\\xf8\\x15\\x06\\x0e\\xa7\\xf9\\x31\\xf0\\x15\\xf7\\x37\\xf7\\x4b\\x05\\xf7\\x0a\\x07\\xfc\\x54\\xf7\\x51\\x05\\x2f\"\n\"\\xfb\\xf1\\xfb\\x13\\x07\\xf7\\x48\\xfb\\x4e\\x05\\xf8\\x16\\x06\\xd0\\x56\\x15\\x4f\\xd3\\x05\\xfc\\x16\\x06\\xfb\\x3c\\xf7\\x45\\x05\\xf8\\x33\\x06\\x50\\xd7\"\n\"\\xf8\\x22\\xfb\\x3b\\x05\\x0e\\xfb\\x23\\xf7\\xaf\\xf9\\x1f\\x15\\x22\\xfb\\x8c\\xfb\\xe9\\x07\\xdd\\x3a\\x05\\xf7\\x3a\\x7a\\x06\\xdf\\x4c\\xf7\\xba\\xf7\\xab\"\n\"\\x05\\xfb\\xf6\\xfb\\x5b\\x15\\xec\\xfb\\x8c\\xf7\\xba\\xf7\\x8c\\xd9\\x07\\xf7\\x97\\xfb\\x77\\x05\\x0e\\xfb\\x23\\xf7\\xaf\\xb7\\x15\\xf8\\x0e\\xf7\\xd9\\xfb\"\n\"\\xba\\xf7\\xa9\\x37\\x4c\\x05\\x7a\\xfb\\x3a\\x07\\x39\\x3b\\x05\\xfb\\xe5\\xf7\\x8c\\x07\\xa3\\xf7\\xd4\\x15\\xec\\x07\\xf7\\x97\\xfb\\x83\\xfb\\x97\\xfb\\x75\"\n\"\\x05\\xdb\\xfb\\x8c\\xf7\\xb3\\x07\\x0e\\xae\\xf8\\xcf\\xf8\\xfa\\x15\\x30\\xfc\\xa6\\x07\\xc9\\xfb\\x2f\\x47\\xfb\\x18\\xcf\\x4a\\x05\\xf8\\x62\\x2b\\x06\\xf7\"\n\"\\xa7\\xf7\\x9f\\x05\\xfb\\x8e\\xf7\\x6b\\x15\\xf7\\x4e\\xfb\\x51\\xfb\\x54\\xfb\\x4a\\x05\\xbd\\xfc\\x9d\\x07\\xce\\xf7\\x18\\x55\\xf7\\x18\\x05\\xf8\\x96\\x06\"\n\"\\x0e\\xae\\xf8\\xcf\\xd6\\x15\\xf7\\xa1\\xf7\\xa3\\xfb\\xa7\\xf7\\x9f\\x05\\x2c\\xfc\\x62\\x07\\x47\\x49\\xcf\\xfb\\x17\\x47\\xfb\\x30\\x05\\xf8\\xac\\x06\\x9e\"\n\"\\x6a\\x15\\xc4\\xfc\\x96\\x07\\xc1\\xf7\\x18\\x48\\xf7\\x17\\x05\\xf8\\x9d\\xbe\\x06\\xf7\\x54\\xfb\\x4a\\x05\\x0e\\x3c\\xf8\\x19\\xf8\\xb2\\x15\\xf7\\x0d\\x07\"\n\"\\xf7\\xcb\\xfb\\xd1\\xfb\\xcb\\xfb\\xd1\\x05\\xf7\\x0c\\xfb\\xf6\\x07\\x8f\\x69\\x96\\x77\\xa3\\x75\\x08\\x61\\xba\\xf7\\x01\\x6d\\xf4\\x1b\\xf2\\xec\\xaa\\xc2\"\n\"\\xcd\\x1f\\xd9\\xcb\\xb9\\xeb\\xee\\x1a\\xe1\\x69\\xde\\x4d\\xcb\\x1e\\xd2\\x46\\x21\\xb3\\xfb\\x0b\\x1b\\x2a\\x22\\x70\\x66\\x5a\\x1f\\x6c\\x74\\x7e\\x74\\x86\"\n\"\\x65\\x08\\x0e\\xf6\\xf8\\x94\\xf7\\xf6\\x15\\xfb\\x0d\\xf7\\x46\\x05\\xfb\\xf8\\x06\\xf7\\x16\\xfb\\x51\\xfb\\x16\\xfb\\x4c\\x05\\xf7\\xf8\\x06\\xf7\\x0d\\xf7\"\n\"\\x3f\\x05\\xf7\\x6f\\x06\\x73\\x73\\x81\\x71\\x68\\x1a\\x67\\x96\\x70\\xa2\\x74\\x1e\\xbf\\xf5\\xc0\\xc1\\xd6\\xa3\\x46\\x9c\\x48\\xd2\\x5f\\xf0\\x08\\x73\\x6f\"\n\"\\x81\\x70\\x67\\x1a\\x69\\x95\\x72\\xa3\\x6f\\x1e\\xfd\\x1c\\x3e\\x0a\\x5b\\x06\\x74\\xf7\\x2e\\x15\\xbd\\x2e\\x0a\\x59\\x06\\x76\\x3e\\x0a\\x59\\x06\\x75\\xf7\"\n\"\\x2e\\x15\\xbc\\x2e\\x0a\\x5a\\x06\\xfb\\x89\\x73\\x15\\xbc\\x06\\x26\\xfb\\x2c\\x05\\x5b\\x06\\xf7\\x4a\\xf7\\x2c\\x15\\xbd\\x06\\x26\\xfb\\x2c\\x05\\x58\\x06\"\n\"\\xf7\\x4c\\xf7\\x2c\\x15\\xbc\\x06\\x25\\xfb\\x2c\\x05\\x5a\\x06\\xf7\\x4b\\xf7\\x2c\\x15\\xbb\\x06\\x25\\xfb\\x2c\\x05\\x5b\\x06\\x0e\\x47\\xf8\\x7e\\xf7\\x9f\"\n\"\\x15\\x73\\x6e\\xf7\\x11\\x22\\x05\\x67\\x86\\x63\\x5e\\x68\\x1a\\x94\\xa5\\x9c\\x8e\\xa2\\x1b\\xbc\\xc1\\x82\\x7c\\xb7\\x1f\\x93\\x97\\x05\\x68\\xcc\\x7a\\xc5\"\n\"\\xbf\\x1a\\x92\\x8c\\x96\\x8c\\x99\\x1e\\x68\\x83\\x6b\\x62\\x87\\x5f\\x08\\xfb\\xd4\\xcc\\x15\\x96\\xcd\\xb6\\x8e\\xc5\\x1b\\xfb\\x97\\xf7\\x6e\\x3c\\x88\\x55\"\n\"\\x87\\x67\\x84\\x19\\xf7\\x44\\xf7\\x66\\x15\\x6d\\x95\\x24\\x92\\x68\\x1e\\xf7\\x97\\xfb\\x6d\\x05\\x81\\xbc\\x85\\xcb\\xb6\\x1a\\x96\\x07\\x0e\\xa5\\xf8\\x87\"\n\"\\xf7\\xfc\\x15\\x69\\xf7\\x35\\x07\\x7e\\x78\\x85\\x7a\\x74\\x1a\\x71\\x90\\x7c\\x99\\x7a\\x1e\\xa3\\xb8\\xd5\\xc4\\xd3\\xa9\\x08\\x97\\x07\\x35\\xad\\x65\\xa8\"\n\"\\x5d\\xce\\x08\\x7d\\x79\\x87\\x7f\\x71\\x1a\\x73\\x8f\\x7a\\x99\\x71\\x1e\\xfb\\xb1\\xfb\\x2b\\x15\\xc0\\xc5\\xa3\\xa1\\xba\\xb1\\x08\\xfb\\xeb\\x06\\x5b\\x61\"\n\"\\x5c\\x5d\\x72\\x6d\\x08\\x8a\\xf7\\xa6\\x15\\xbb\\x56\\xc1\\x54\\x9e\\x7c\\x08\\xf7\\xeb\\x06\\x66\\xa8\\x57\\xbf\\x67\\xb5\\x08\\x0e\\x47\\xf8\\x7e\\xf8\\x3d\"\n\"\\x15\\xf7\\x11\\xf4\\x8f\\x5f\\xab\\x61\\xae\\x83\\x19\\x8a\\x99\\x8a\\x96\\x92\\x1a\\xbd\\x9d\\xc9\\xad\\xca\\x1e\\x83\\x97\\x05\\x7b\\x5d\\x59\\x82\\x60\\x1b\"\n\"\\x6f\\x79\\x8e\\x95\\x6f\\x1f\\x68\\xb3\\x5e\\xaf\\x86\\x1e\\xfb\\x11\\x22\\x05\\xfc\\x44\\xfb\\x63\\x15\\xb0\\x84\\xc1\\x87\\xd9\\x89\\xf7\\x97\\xf7\\x6d\\x18\"\n\"\\x48\\x8c\\x73\\x8d\\x3f\\x97\\x08\\xf7\\x43\\xfb\\x67\\x15\\x96\\x07\\xb6\\x91\\xcc\\x95\\xbc\\x1e\\xfb\\x97\\xfb\\x6e\\x05\\x84\\x68\\x81\\x24\\x6d\\x1a\\x0e\"\n\"\\xbc\\xf7\\xbb\\xf9\\x5b\\x15\\x6d\\x58\\x7e\\x61\\x5c\\x1a\\x5f\\x91\\x74\\xa0\\x61\\x1e\\x95\\x6a\\x7d\\x8e\\x7a\\x1b\\x46\\x55\\x75\\x56\\x51\\x1f\\xf7\\x99\"\n\"\\xfb\\x6e\\x05\\xb6\\xbd\\xc1\\xa2\\xbd\\x1b\\xb2\\xbe\\x73\\x61\\xbc\\x1f\\xf1\\x34\\x47\\x80\\x5b\\x6e\\x44\\x42\\x19\\x9c\\xdc\\xb6\\x90\\xc6\\x1b\\xcd\\xbe\"\n\"\\x84\\x7c\\xbd\\x1f\\x76\\xb6\\x7e\\xad\\x7f\\xb7\\x08\\x81\\xb0\\x7f\\xe9\\xb5\\x1a\\x90\\x8c\\x97\\x8c\\x9b\\x1e\\x8c\\x8e\\x8b\\x90\\x92\\x1a\\x5c\\x50\\x6d\"\n\"\\x44\\x55\\x1a\\x8c\\x77\\x26\\xe0\\x05\\x42\\xc9\\x75\\xb1\\xcb\\x1a\\xb6\\x96\\xb1\\xa6\\xb7\\x1e\\x0e\\xf7\\x14\\xae\\xf8\\xb8\\x15\\x9b\\x25\\xbe\\x46\\xdb\"\n\"\\x6b\\x3b\\x6e\\x53\\x3e\\x80\\x2a\\x08\\xf7\\xe6\\x06\\x93\\xc6\\xa9\\xc3\\xb5\\xb0\\x08\\xa2\\xa7\\xbe\\x97\\xcf\\x1b\\xf7\\x1a\\x06\\x5d\\x57\\x79\\x57\\x82\"\n\"\\x25\\xe5\\xf7\\x04\\xeb\\xda\\xe0\\xaa\\x25\\xb6\\x36\\xd1\\x37\\xf7\\x02\\x8d\\x37\\xa8\\x3a\\xb5\\x62\\x08\\xfb\\x18\\x06\\x40\\x8a\\x5e\\x96\\x69\\xa7\\x64\"\n\"\\xac\\x6d\\xc6\\x85\\xc3\\x08\\x0e\\xbc\\xf8\\xbd\\xf7\\x59\\x15\\x6e\\xbc\\x80\\xad\\xb7\\x1a\\xc6\\xa5\\xb6\\xd2\\xc7\\x1e\\xf0\\xe0\\x8a\\x78\\x05\\x55\\xa9\"\n\"\\x43\\xba\\x50\\x1e\\x89\\xa3\\x8b\\x95\\x98\\x1a\\xf7\\x02\\xa4\\xf7\\x00\\xb6\\xd9\\x1e\\x7b\\x56\\x5a\\x84\\x4a\\x1b\\x51\\x64\\x90\\x9c\\x34\\x1f\\xd3\\x42\"\n\"\\xba\\x6e\\xcf\\x81\\x25\\x33\\x18\\x62\\x5b\\x56\\x72\\x65\\x1b\\x59\\x55\\xa2\\xb6\\x59\\x1f\\xfb\\x98\\xfb\\x6f\\x05\\x57\\xc6\\xc0\\x75\\xd0\\x1b\\x9b\\x99\"\n\"\\x8e\\x96\\xac\\x1f\\x77\\x62\\x84\\x70\\x63\\x1a\\x5a\\x94\\x6c\\xad\\x4d\\x1e\\x0e\\x83\\xf9\\xb0\\xf7\\xf4\\x15\\x30\\xa3\\x64\\xaf\\x69\\xe4\\x7d\\xb1\\x87\"\n\"\\x92\\x7c\\x98\\x08\\x97\\x7e\\x79\\x92\\x79\\x1b\\x63\\x6b\\x6c\\x64\\x79\\x93\\x78\\x96\\x7e\\x1f\\xac\\x67\\xb0\\x79\\xf7\\x0a\\x65\\x98\\x87\\x9b\\x86\\x98\"\n\"\\x86\\xfb\\x52\\x92\\x33\\x99\\xfb\\x44\\xbf\\x08\\x9e\\x49\\x6b\\x91\\x6a\\x1b\\x49\\x62\\x63\\x4a\\x4b\\xb4\\x63\\xcc\\xac\\xab\\x91\\x9e\\xce\\x1f\\xf7\\x45\"\n\"\\xbf\\xe6\\x9a\\xf7\\x4e\\x91\\x2d\\x6c\\x77\\x84\\x61\\x7a\\x08\\x50\\x73\\x69\\x65\\x62\\x1a\\x66\\xab\\x6c\\xb3\\x9d\\x9d\\x92\\x97\\x98\\x1e\\x9a\\x98\\x8f\"\n\"\\x92\\x99\\xb2\\xad\\xe4\\xb2\\xae\\xe6\\xa3\\x08\\x0e\\xad\\xf9\\xda\\xf7\\xf2\\x15\\x28\\xb4\\x21\\xf7\\x04\\x82\\xd4\\x08\\x5a\\x6b\\x70\\x5b\\x57\\x1a\\x66\"\n\"\\x9e\\x6f\\xb6\\x70\\x1e\\xfb\\x09\\x8d\\x50\\x9f\\x45\\xcb\\x08\\xc9\\x43\\x70\\x99\\x5a\\x1b\\x69\\x70\\x80\\x76\\x75\\x1f\\x7a\\x7a\\x82\\x7a\\x7b\\x5f\\x7b\"\n\"\\x62\\x83\\x83\\x6c\\x86\\xaa\\x85\\x95\\x81\\x99\\x62\\x98\\x66\\x95\\x75\\x97\\x7d\\x08\\x70\\xa2\\xab\\x7c\\xab\\x1b\\xb8\\xb2\\x9e\\xba\\xc1\\x1f\\xbd\\xb6\"\n\"\\x90\\x8f\\xa6\\x99\\x08\\xa0\\xb4\\xc6\\x98\\xc2\\x1b\\xa1\\x06\\x5d\\x6e\\x7c\\x72\\x63\\x1a\\x57\\xa5\\x5e\\xbc\\x6a\\x1e\\x94\\xd4\\xf3\\xf7\\x01\\xf0\\xb6\"\n\"\\x08\\x0e\\xe3\\xdb\\xf8\\xb2\\x15\\x6f\\x7b\\x81\\x79\\x82\\x90\\x7d\\x94\\x7d\\x1f\\xc6\\x31\\x05\\x9b\\x72\\x8d\\x85\\x82\\x1a\\x80\\x8b\\x8a\\x7b\\x71\\x1e\"\n\"\\x4d\\x27\\x05\\x7d\\x78\\x8b\\x8b\\x81\\x1a\\x79\\x9b\\x7e\\xa0\\x1e\\xf7\\x88\\x06\\xb7\\x8f\\x8d\\xae\\xa9\\x1f\\xbb\\xc6\\xab\\xb5\\x99\\x92\\xbe\\x8a\\x19\"\n\"\\xdc\\x06\\xa1\\x96\\x82\\x7b\\x82\\x89\\x84\\x7e\\x70\\x1f\\x86\\x82\\x89\\x81\\x85\\x1a\\x78\\xac\\x77\\xaa\\x9e\\x9c\\x94\\xa1\\xa3\\x1e\\xf6\\xf0\\x05\\x9f\"\n\"\\x9e\\x94\\x9b\\x9d\\x1a\\x9e\\x81\\x9e\\x7a\\x9a\\x1e\\xfb\\x0d\\xf7\\x02\\x05\\x97\\x7e\\x7a\\x92\\x7b\\x1b\\x64\\x70\\x7b\\x75\\x83\\x8d\\x84\\x8e\\x85\\x1f\"\n\"\\x9c\\x6c\\x8b\\x8a\\x7e\\x1a\\x79\\x81\\x84\\x71\\x1e\\x39\\x06\\x5a\\x8c\\x81\\x90\\x68\\xb5\\x55\\xcd\\x18\\x75\\xa6\\x82\\x8f\\x69\\x89\\x08\\x0e\\xf7\\x17\"\n\"\\xf7\\x14\\xf8\\xfb\\x15\\x49\\x70\\x76\\x56\\x7a\\x8d\\x81\\x94\\x6f\\x1f\\xa9\\x2d\\x05\\x95\\x67\\x8c\\x86\\x84\\x1a\\x84\\x88\\x7f\\x86\\x7c\\x1e\\x87\\x80\"\n\"\\x88\\x82\\x88\\x82\\x70\\x31\\x18\\x86\\x7b\\x89\\x7e\\x7d\\x1a\\x71\\x94\\x76\\x9a\\x7f\\x1e\\x80\\x99\\x9b\\x88\\xb4\\x1b\\xf7\\x70\\x06\\xd5\\x8a\\xa0\\x97\"\n\"\\xaf\\xcc\\xb2\\xd0\\x18\\xc4\\xab\\x96\\x94\\xb2\\x1b\\xa0\\x98\\x81\\x79\\x83\\x89\\x7f\\x87\\x7d\\x1f\\x82\\x6d\\x85\\x69\\x7e\\x1a\\x6d\\xa7\\x70\\xaa\\x9f\"\n\"\\x99\\x93\\xab\\xaa\\x1e\\xf7\\x24\\xf7\\x24\\x05\\xbb\\xbe\\x8b\\x8b\\xa0\\x1a\\xa0\\x8a\\x8d\\x62\\xb4\\x1e\\xfb\\x28\\xf7\\x2b\\x05\\xaa\\x6d\\x7c\\x94\\x75\"\n\"\\x1b\\x68\\x74\\x71\\x65\\x7e\\x8d\\x7d\\x8e\\x7e\\x1f\\x9a\\x55\\x8b\\x8b\\x7f\\x1a\\x79\\x7d\\x82\\x71\\x6d\\x7c\\x97\\xb6\\x74\\x1e\\x60\\xd9\\x05\\xcc\\x68\"\n\"\\x75\\x98\\x3d\\x1b\\x0e\\xda\\xf8\\xc9\\xf8\\xe4\\x15\\xd0\\x23\\xce\\x45\\xf0\\x41\\xfb\\x0c\\x30\\x67\\x66\\x3a\\xfb\\x09\\x08\\xc9\\x06\\xc8\\xeb\\xd9\\xd5\"\n\"\\xf7\\x0a\\xd6\\xfb\\x0b\\xd8\\x33\\xe0\\x59\\xe1\\x08\\xfb\\x60\\x16\\x9d\\x65\\xc3\\x3f\\xba\\x5b\\x08\\xfc\\x92\\x5e\\xf9\\x0f\\x06\\x47\\xbc\\x3b\\xe2\\x61\"\n\"\\xd2\\x08\\xfc\\x51\\xfb\\xe2\\x15\\xf8\\x92\\x06\\x6b\\x71\\x4e\\x39\\x71\\x58\\x08\\xc3\\x06\\xb9\\xd8\\xd5\\xda\\xcf\\xbb\\x08\\xfd\\x0f\\x06\\x0e\\xfb\\x8e\"\n\"\\x8b\\x1c\\x05\\x46\\x8b\\x06\\x8b\\x0a\\x8b\\x0b\\xf9\\xa8\\x14\\xf9\\xdb\\x15\\x9f\\x13\\x00\\x20\\x02\\x00\\x01\\x00\\x05\\x00\\x0c\\x00\\x12\\x00\\x16\\x00\"\n\"\\x1e\\x00\\x26\\x00\\x2b\\x00\\x30\\x00\\x37\\x00\\x3e\\x00\\x43\\x00\\x50\\x00\\x5a\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x79\\x00\\x84\\x00\\x90\\x00\\x9d\\x00\"\n\"\\xa9\\x00\\xb3\\x00\\xba\\x00\\xc0\\x00\\xcc\\x00\\xd5\\x00\\xdc\\x00\\xed\\x00\\xfc\\x01\\x05\\x01\\x0c\\x01\\x11\\xf9\\x47\\x15\\x0b\\x15\\xfb\\x5e\\xfb\\x37\"\n\"\\x30\\x0a\\x15\\xfb\\x5f\\xfb\\x36\\x0b\\xf9\\x55\\x15\\x0b\\x15\\xfb\\x5e\\xfb\\x37\\x2a\\x0a\\x0b\\xfb\\x35\\xf7\\x38\\xfb\\x55\\x1f\\x0b\\xfb\\x33\\xfb\\x5a\"\n\"\\x0b\\x3f\\x0a\\xf7\\x37\\x0b\\x3c\\x0a\\xd9\\xa9\\xda\\x2c\\x0a\\xf8\\x24\\xf9\\x56\\x24\\x0a\\x0b\\x26\\x0a\\x3a\\x0a\\x0b\\x2d\\x0a\\xf7\\x5b\\xf7\\x5b\\xf7\"\n\"\\x35\\xf7\\x35\\xf7\\x5b\\x0b\\xc1\\xc6\\x1e\\xd3\\xcc\\xde\\xaf\\xef\\x1b\\x0e\\x26\\x0a\\xfb\\x5d\\xf7\\x34\\xfb\\x35\\x0b\\x06\\xf3\\xfb\\x2e\\x05\\x0b\\x1f\"\n\"\\xd2\\x4a\\xb1\\x0b\\x32\\x0a\\x38\\x2d\\x37\\x0a\\xda\\xa9\\xd9\\x2c\\x0a\\x34\\x0a\\x38\\x2d\\x37\\x0a\\xda\\xa9\\xd9\\x2c\\x0a\\x2a\\x0a\\x6a\\x04\\xd5\\xdd\"\n\"\\x6b\\x57\\xc4\\x2f\\x0a\\x0b\\xf8\\x24\\xf9\\x56\\x22\\x0a\\x2b\\x0a\\xf7\\x57\\x25\\x0a\\x0b\\x3a\\x0a\\x6a\\x04\\xd5\\xde\\x6b\\x57\\xc3\\x2f\\x0a\\x0b\\x22\"\n\"\\x0a\\x2b\\x0a\\x27\\x0a\\xfb\\x55\\x1f\\x0b\\x39\\x0a\\xf7\\x57\\x25\\x0a\\x0b\\x1a\\xfb\\x49\\x3c\\x0a\\x0b\\xf8\\x24\\xf9\\x56\\x15\\xfb\\x5e\\xfb\\x37\\x2b\"\n\"\\x0a\\x0b\\x22\\x0a\\xfb\\x32\\xfb\\x5b\\x3b\\x0a\\x0b\\x3b\\x0a\\xf7\\x57\\x25\\x0a\\x0b\\xfb\\x5d\\xf7\\x34\\xfb\\x35\\xf7\\x5c\\xf7\\x5a\\xf7\\x35\\xf7\\x35\"\n\"\\xf7\\x5b\\x0b\\xfb\\x27\\xfb\\x26\\xfb\\x48\\xfb\\x4a\\xfb\\x25\\xf7\\x26\\xf7\\x4b\\x0b\\xe9\\x89\\x4e\\xaf\\x35\\xb6\\x66\\x08\\x0e\\xf7\\x2e\\x15\\xbb\\x2e\"\n\"\\x0a\\x0b\\xf7\\x58\\xfb\\x35\\x0b\", 24967\n};\n"
  },
  {
    "path": "src/fonts/Makefile.am",
    "content": "noinst_LTLIBRARIES = libbase14fonts.la\n\nlibbase14fonts_la_SOURCES = \\\n\tBase14Fonts.cpp \\\n\tBase14Fonts.hpp \\\n\tDingbats.cff.cpp \\\n\tNimbusMonoPS-Bold.cff.cpp \\\n\tNimbusMonoPS-BoldItalic.cff.cpp \\\n\tNimbusMonoPS-Italic.cff.cpp \\\n\tNimbusMonoPS-Regular.cff.cpp \\\n\tNimbusRoman-Bold.cff.cpp \\\n\tNimbusRoman-BoldItalic.cff.cpp \\\n\tNimbusRoman-Italic.cff.cpp \\\n\tNimbusRoman-Regular.cff.cpp \\\n\tNimbusSans-Bold.cff.cpp \\\n\tNimbusSans-BoldItalic.cff.cpp \\\n\tNimbusSans-Italic.cff.cpp \\\n\tNimbusSans-Regular.cff.cpp \\\n\tStandardSymbolsPS.cff.cpp\n"
  },
  {
    "path": "src/fonts/NimbusMonoPS-Bold.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusMonoPS_Bold_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x12\\x4e\\x69\\x6d\\x62\\x75\\x73\\x4d\\x6f\\x6e\\x6f\\x50\\x53\\x2d\\x42\\x6f\\x6c\\x64\\x00\\x01\\x01\\x01\\x35\\xf9\"\n\"\\xbc\\x00\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xc0\\x03\\xf8\\x14\\x04\\x8c\\x0c\\x01\\x33\\x0c\\x03\\xf7\\x02\\x0c\\x04\\x39\\xfc\\x1d\\xf9\"\n\"\\x4e\\xfa\\x83\\x05\\x1c\\x32\\x32\\x0f\\x1c\\x32\\x45\\x11\\xb7\\x1d\\x00\\x00\\xb7\\x0a\\x12\\x01\\xa6\\x02\\x00\\x01\\x00\\x08\\x00\\x0e\\x00\\x13\\x00\\x1d\"\n\"\\x00\\x24\\x00\\x2b\\x00\\x35\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x74\\x00\\x7a\\x00\\x84\\x00\\x8b\"\n\"\\x00\\x8e\\x00\\x95\\x00\\x9c\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\\x00\\xcd\\x00\\xd9\\x00\\xe3\\x00\\xe7\\x00\\xf2\\x00\\xf4\\x00\\xfa\"\n\"\\x01\\x04\\x01\\x0b\\x01\\x12\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\\x01\\x4d\\x01\\x53\\x01\\x59\\x01\\x5f\\x01\\x6b\\x01\\x6f\\x01\\x71\"\n\"\\x01\\x77\\x01\\x7d\\x01\\x89\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\\x01\\xc2\\x01\\xcd\\x01\\xd0\\x01\\xd2\\x01\\xd5\\x01\\xdb\\x01\\xe1\"\n\"\\x01\\xed\\x01\\xf0\\x01\\xf6\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\\x02\\x27\\x02\\x33\\x02\\x38\\x02\\x3e\\x02\\x4b\\x02\\x52\\x02\\x59\"\n\"\\x02\\x60\\x02\\x6f\\x02\\x7b\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\\x02\\xa8\\x02\\xb3\\x02\\xb9\\x02\\xbf\\x02\\xc9\\x02\\xcd\\x02\\xd3\"\n\"\\x02\\xda\\x02\\xe3\\x02\\xec\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\\x03\\x2b\\x03\\x34\\x03\\x3d\\x03\\x46\\x03\\x4f\\x03\\x58\\x03\\x61\"\n\"\\x03\\x6a\\x03\\x73\\x03\\x7c\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\\x03\\xbb\\x03\\xc4\\x03\\xcd\\x03\\xd6\\x03\\xdf\\x03\\xe8\\x03\\xf1\"\n\"\\x03\\xfa\\x04\\x03\\x04\\x0c\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\\x04\\x4b\\x04\\x54\\x04\\x5d\\x04\\x66\\x04\\x6f\\x04\\x78\\x04\\x81\"\n\"\\x04\\x8a\\x04\\x93\\x04\\x9c\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\\xed\\x04\\xf6\\x04\\xff\\x05\\x08\\x05\\x11\"\n\"\\x05\\x1a\\x05\\x23\\x05\\x2c\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\\x05\\x6b\\x05\\x74\\x05\\x7d\\x05\\x86\\x05\\x8f\\x05\\x98\\x05\\xa1\"\n\"\\x05\\xaa\\x05\\xb3\\x05\\xbc\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\\x05\\xfb\\x06\\x04\\x06\\x0d\\x06\\x16\\x06\\x1f\\x06\\x28\\x06\\x31\"\n\"\\x06\\x3a\\x06\\x43\\x06\\x4c\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\\x06\\x85\\x06\\x90\\x06\\x9a\\x06\\xa3\\x06\\xac\\x06\\xb5\\x06\\xbf\"\n\"\\x06\\xc6\\x06\\xcf\\x06\\xdb\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\\x07\\x11\\x07\\x15\\x07\\x1b\\x07\\x21\\x07\\x26\\x07\\x2d\\x07\\x3a\"\n\"\\x07\\x40\\x07\\x46\\x07\\x50\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\\x07\\x86\\x07\\x8f\\x07\\x92\\x07\\x9a\\x07\\xa3\\x07\\xae\\x07\\xb4\"\n\"\\x07\\xb9\\x07\\xbe\\x07\\xc4\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\\x08\\x05\\x08\\x0a\\x08\\x10\\x08\\x12\\x08\\x19\\x08\\x21\\x08\\x29\"\n\"\\x08\\x33\\x08\\x3d\\x08\\x49\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\\x08\\x8c\\x08\\x97\\x08\\x9c\\x08\\xa8\\x08\\xb4\\x08\\xba\\x08\\xc0\"\n\"\\x08\\xc6\\x08\\xd2\\x08\\xd6\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\\x09\\x0b\\x09\\x11\\x09\\x1c\\x09\\x22\\x09\\x2e\\x09\\x38\\x09\\x40\"\n\"\\x09\\x42\\x09\\x48\\x09\\x55\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\\x09\\x93\\x09\\x9e\\x09\\xa4\\x09\\xa7\\x09\\xa9\\x09\\xb0\\x09\\xbc\"\n\"\\x09\\xca\\x09\\xcd\\x09\\xda\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\\x0a\\x0f\\x0a\\x17\\x0a\\x22\\x0a\\x2e\\x0a\\x34\\x0a\\x39\\x0a\\x42\"\n\"\\x0a\\x47\\x0a\\x50\\x0a\\x53\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\\x0a\\x7c\\x0a\\x89\\x0a\\x90\\x0a\\x9d\\x0a\\xa4\\x0a\\xab\\x0a\\xb2\"\n\"\\x0a\\xb9\\x0a\\xc0\\x0a\\xc7\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\\x0a\\xf8\\x0a\\xff\\x0b\\x06\\x0b\\x0d\\x0b\\x14\\x0b\\x1b\\x0b\\x22\"\n\"\\x0b\\x29\\x0b\\x30\\x0b\\x37\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\\x0b\\x68\\x0b\\x6f\\x0b\\x76\\x0b\\x7d\\x0b\\x84\\x0b\\x8b\\x0b\\x92\"\n\"\\x0b\\x99\\x0b\\xa0\\x0b\\xa7\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\\x0b\\xd8\\x0b\\xdf\\x0b\\xe6\\x0b\\xed\\x0b\\xf4\\x0b\\xfb\\x0c\\x02\"\n\"\\x0c\\x09\\x0c\\x10\\x0c\\x17\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\\x0c\\x48\\x0c\\x4d\\x0c\\x56\\x0c\\x5d\\x0c\\x64\\x0c\\x73\\x0c\\x87\"\n\"\\x0c\\x93\\x0c\\x98\\x0c\\x9e\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\\x0c\\xd1\\x0c\\xd7\\x0c\\xe1\\x0c\\xe5\\x0c\\xe9\\x0d\\x1f\\x0d\\x5f\"\n\"\\x0d\\x72\\x0d\\x80\\x41\\x45\\x61\\x63\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\\x6c\\x70\\x68\\x61\\x41\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\"\n\"\\x41\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x41\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x42\\x65\\x74\\x61\\x43\\x61\\x63\\x75\"\n\"\\x74\\x65\\x43\\x63\\x61\\x72\\x6f\\x6e\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x43\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x43\\x68\\x69\"\n\"\\x44\\x63\\x61\\x72\\x6f\\x6e\\x44\\x63\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\\x62\\x72\\x65\\x76\\x65\\x45\\x63\\x61\\x72\\x6f\\x6e\\x45\\x64\\x6f\"\n\"\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x45\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x45\"\n\"\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x75\\x72\\x6f\\x47\\x61\\x6d\\x6d\\x61\\x47\"\n\"\\x62\\x72\\x65\\x76\\x65\\x47\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x47\\x64\\x6f\\x74\"\n\"\\x61\\x63\\x63\\x65\\x6e\\x74\\x48\\x62\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x49\\x4a\\x49\\x62\\x72\\x65\\x76\\x65\\x49\\x64\\x6f\"\n\"\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x49\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x49\\x6f\\x74\\x61\\x49\\x6f\\x74\\x61\\x64\\x69\\x65\"\n\"\\x72\\x65\\x73\\x69\\x73\\x49\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\\x64\\x65\\x4a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x4b\"\n\"\\x61\\x70\\x70\\x61\\x4b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\\x63\\x75\\x74\\x65\\x4c\\x61\\x6d\\x62\\x64\\x61\\x4c\\x63\\x61\\x72\"\n\"\\x6f\\x6e\\x4c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\\x4d\\x75\\x4e\\x61\\x63\\x75\\x74\\x65\\x4e\\x63\\x61\\x72\\x6f\\x6e\"\n\"\\x4e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\\x76\\x65\\x4f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\"\n\"\\x74\\x4f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\"\n\"\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\\x69\\x50\\x69\\x50\\x73\\x69\\x52\\x61\\x63\\x75\\x74\\x65\\x52\\x63\"\n\"\\x61\\x72\\x6f\\x6e\\x52\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\\x6f\\x53\\x61\\x63\\x75\\x74\\x65\\x53\\x63\\x65\\x64\\x69\\x6c\\x6c\"\n\"\\x61\\x53\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x53\\x69\\x67\\x6d\\x61\\x54\\x61\\x75\"\n\"\\x54\\x62\\x61\\x72\\x54\\x63\\x61\\x72\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x54\\x68\\x65\\x74\\x61\\x55\\x62\\x72\\x65\\x76\"\n\"\\x65\\x55\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x55\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x55\\x70\\x73\\x69\"\n\"\\x6c\\x6f\\x6e\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x55\\x72\"\n\"\\x69\\x6e\\x67\\x55\\x74\\x69\\x6c\\x64\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x57\\x64\\x69\\x65\\x72\\x65\"\n\"\\x73\\x69\\x73\\x57\\x67\\x72\\x61\\x76\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x59\\x67\\x72\\x61\\x76\\x65\\x5a\\x61\\x63\\x75\"\n\"\\x74\\x65\\x5a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\\x72\\x65\\x76\\x65\\x61\\x65\\x61\\x63\\x75\\x74\\x65\\x61\\x66\\x69\"\n\"\\x69\\x30\\x30\\x32\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\"\n\"\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x32\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x32\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x36\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x39\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x33\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x33\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x36\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x33\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x30\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x34\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x34\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x37\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x34\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\"\n\"\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x34\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x35\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x38\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x31\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x36\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x37\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x30\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x37\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x34\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x37\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x37\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x31\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x38\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\"\n\"\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x38\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x38\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x32\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x35\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x39\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x39\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x32\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x31\\x30\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x36\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x31\\x30\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\"\n\"\\x31\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x38\\x34\\x36\\x61\\x66\\x69\"\n\"\\x69\\x36\\x31\\x32\\x34\\x38\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\\x69\\x36\\x31\\x33\\x35\\x32\\x61\\x6c\\x70\\x68\\x61\\x61\\x6c\\x70\"\n\"\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x61\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\\x61\\x6e\\x67\\x6c\\x65\\x72\\x69\\x67\\x68\"\n\"\\x74\\x61\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x61\\x72\\x72\"\n\"\\x6f\\x77\\x62\\x6f\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\\x77\\x72\\x69\\x67\"\n\"\\x68\\x74\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x62\\x73\\x65\\x62\\x65\"\n\"\\x74\\x61\\x63\\x61\\x63\\x75\\x74\\x65\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x63\\x64\\x6f\\x74\\x61\\x63\\x63\"\n\"\\x65\\x6e\\x74\\x63\\x68\\x69\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\\x63\\x6c\\x75\\x62\\x64\\x63\\x61\\x72\\x6f\\x6e\\x64\\x63\"\n\"\\x72\\x6f\\x61\\x74\\x64\\x65\\x6c\\x74\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x62\\x72\"\n\"\\x65\\x76\\x65\\x65\\x63\\x61\\x72\\x6f\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x65\\x6d\\x61\\x63\\x72\\x6f\"\n\"\\x6e\\x65\\x6e\\x67\\x65\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x71\"\n\"\\x75\\x69\\x76\\x61\\x6c\\x65\\x6e\\x63\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\\x65\\x74\\x61\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x78\\x63\"\n\"\\x6c\\x61\\x6d\\x64\\x62\\x6c\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\\x65\\x6d\\x61\\x6c\\x65\\x66\\x72\\x61\\x6e\\x63\\x67\\x61\\x6d\\x6d\"\n\"\\x61\\x67\\x62\\x72\\x65\\x76\\x65\\x67\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x67\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x64\"\n\"\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x68\\x62\\x61\\x72\\x68\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\"\n\"\\x6c\\x65\\x78\\x68\\x65\\x61\\x72\\x74\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\\x65\\x69\\x6a\\x69\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x69\\x6e\\x66\\x69\"\n\"\\x6e\\x69\\x74\\x79\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x74\\x70\"\n\"\\x69\\x6e\\x74\\x65\\x72\\x73\\x65\\x63\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x69\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x69\"\n\"\\x6f\\x74\\x61\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\"\n\"\\x69\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x6b\\x61\\x70\\x70\\x61\\x6b\"\n\"\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\\x61\\x6e\\x64\\x69\\x63\\x6c\\x61\\x63\\x75\\x74\\x65\\x6c\\x61\\x6d\"\n\"\\x62\\x64\\x61\\x6c\\x63\\x61\\x72\\x6f\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6c\\x64\\x6f\\x74\\x6c\\x65\\x73\\x73\\x65\\x71\\x75\"\n\"\\x61\\x6c\\x6c\\x69\\x72\\x61\\x6c\\x6f\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\"\n\"\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\\x74\\x65\\x6e\\x61\\x70\\x6f\\x73\\x74\\x72\\x6f\\x70\\x68\\x65\\x6e\"\n\"\\x63\\x61\\x72\\x6f\\x6e\\x6e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x71\"\n\"\\x75\\x61\\x6c\\x6e\\x75\\x6f\\x62\\x72\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x6f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x6f\"\n\"\\x6d\\x65\\x67\\x61\\x6f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\"\n\"\\x73\\x6f\\x72\\x74\\x68\\x6f\\x67\\x6f\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x70\\x61\\x72\\x74\\x69\\x61\\x6c\\x64\\x69\\x66\"\n\"\\x66\\x70\\x65\\x73\\x65\\x74\\x61\\x70\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x62\\x73\\x65\\x74\\x70\"\n\"\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\\x6f\\x74\\x65\\x72\\x65\\x76\\x65\\x72\\x73\\x65\\x64\\x72\\x61\\x63\"\n\"\\x75\\x74\\x65\\x72\\x61\\x64\\x69\\x63\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x72\\x65\\x76\\x6c\"\n\"\\x6f\\x67\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\\x73\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x73\\x63\\x69\\x72\\x63\\x75\"\n\"\\x6d\\x66\\x6c\\x65\\x78\\x73\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\\x65\\x63\\x6f\\x6e\\x64\\x73\\x69\\x67\\x6d\\x61\\x73\\x6d\\x69\\x6c\"\n\"\\x65\\x66\\x61\\x63\\x65\\x73\\x70\\x61\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x73\\x75\\x6e\\x74\\x61\\x75\\x74\\x62\\x61\\x72\\x74\\x63\\x61\"\n\"\\x72\\x6f\\x6e\\x74\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x62\\x72\\x65\\x76\\x65\\x75\"\n\"\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x75\\x6e\\x64\\x65\\x72\\x73\\x63\\x6f\\x72\\x65\\x64\\x62\\x6c\"\n\"\\x75\\x6e\\x69\\x30\\x30\\x41\\x30\\x75\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\\x32\\x31\\x41\\x75\\x6e\\x69\\x30\\x32\\x31\\x42\\x75\\x6e\\x69\\x30\"\n\"\\x32\\x43\\x39\\x75\\x6e\\x69\\x30\\x33\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\\x6e\\x69\\x30\\x33\\x41\\x39\\x75\\x6e\\x69\\x30\\x33\\x42\\x43\\x75\"\n\"\\x6e\\x69\\x30\\x33\\x43\\x32\\x75\\x6e\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\\x30\\x44\\x75\\x6e\\x69\\x30\\x34\\x35\\x30\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x35\\x44\\x75\\x6e\\x69\\x30\\x34\\x39\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\\x69\\x30\\x34\\x39\\x36\\x75\\x6e\\x69\\x30\\x34\\x39\\x37\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x39\\x38\\x75\\x6e\\x69\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\\x41\\x75\\x6e\\x69\\x30\\x34\\x39\\x42\\x75\\x6e\\x69\\x30\\x34\\x39\"\n\"\\x43\\x75\\x6e\\x69\\x30\\x34\\x39\\x44\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\\x30\\x34\\x41\\x31\\x75\\x6e\\x69\\x30\\x34\\x41\\x32\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x41\\x33\\x75\\x6e\\x69\\x30\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\\x75\\x6e\\x69\\x30\\x34\\x41\\x45\\x75\\x6e\\x69\\x30\\x34\\x41\\x46\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x42\\x30\\x75\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\\x34\\x42\\x32\\x75\\x6e\\x69\\x30\\x34\\x42\\x33\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x42\\x36\\x75\\x6e\\x69\\x30\\x34\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\\x6e\\x69\\x30\\x34\\x42\\x39\\x75\\x6e\\x69\\x30\\x34\\x42\\x41\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x42\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\\x43\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x43\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x44\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\\x69\\x30\\x34\\x45\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x39\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x45\\x45\\x75\\x6e\\x69\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\\x45\\x75\\x6e\\x69\\x32\\x30\\x41\\x46\\x75\\x6e\\x69\\x32\\x31\\x32\"\n\"\\x36\\x75\\x6e\\x69\\x32\\x32\\x31\\x35\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\\x32\\x32\\x32\\x37\\x75\\x6e\\x69\\x32\\x32\\x32\\x38\\x75\\x6e\\x69\"\n\"\\x32\\x32\\x39\\x35\\x75\\x6e\\x69\\x32\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x75\\x6f\\x67\\x6f\\x6e\\x65\\x6b\"\n\"\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\"\n\"\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x72\\x69\\x6e\\x67\\x75\\x74\\x69\\x6c\\x64\"\n\"\\x65\\x77\\x61\\x63\\x75\\x74\\x65\\x77\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x77\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x77\\x67\\x72\\x61\\x76\"\n\"\\x65\\x78\\x69\\x79\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\\x76\\x65\\x7a\\x61\\x63\\x75\\x74\\x65\\x7a\\x64\\x6f\\x74\\x61\\x63\"\n\"\\x63\\x65\\x6e\\x74\\x7a\\x65\\x74\\x61\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\"\n\"\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\"\n\"\\x6e\\x74\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\"\n\"\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\"\n\"\\x6e\\x74\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x4d\\x6f\\x6e\\x6f\\x20\\x50\\x53\\x20\\x42\\x6f\\x6c\\x64\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x4d\\x6f\\x6e\\x6f\"\n\"\\x20\\x50\\x53\\x01\\x43\\x02\\x00\\x01\\x00\\x08\\x00\\x70\\x00\\x7a\\x00\\xa0\\x00\\xe2\\x01\\x19\\x01\\x21\\x01\\x25\\x01\\x2c\\x01\\x37\\x01\\x3f\\x01\\x45\"\n\"\\x01\\xa3\\x01\\xae\\x01\\xbb\\x01\\xc1\\x01\\xee\\x01\\xfb\\x02\\x03\\x02\\x0c\\x02\\x14\\x02\\x1d\\x02\\x44\\x02\\x5e\\x02\\x6a\\x02\\x75\\x02\\x79\\x02\\x8b\"\n\"\\x02\\x99\\x02\\xa4\\x02\\xaf\\x02\\xb7\\x02\\xbe\\x03\\x54\\x03\\xe5\\x04\\x1b\\x04\\x5a\\x04\\x7d\\x04\\x89\\x04\\xbe\\x04\\xe2\\x04\\xf7\\x04\\xfb\\x05\\x0a\"\n\"\\x05\\x15\\x05\\x27\\x05\\x34\\x05\\x3e\\x05\\x47\\x05\\x51\\x05\\x5b\\x05\\x64\\x05\\x6d\\x05\\x74\\x05\\x7b\\x05\\x80\\x05\\xdc\\x06\\x2c\\x06\\x8e\\x06\\xa4\"\n\"\\x06\\xba\\x06\\xc1\\x06\\xc7\\x06\\xce\\x06\\xe6\\x06\\xf4\\x06\\xff\\x07\\x08\\x07\\x18\\x07\\x27\\x07\\x32\\x07\\x3d\\x07\\x43\\x07\\x55\\x07\\x5f\\x07\\x69\"\n\"\\x07\\x79\\x07\\x84\\x07\\x8c\\x07\\x95\\x07\\x9e\\x07\\xa5\\x07\\xad\\x07\\xb5\\x07\\xbd\\x07\\xc5\\x07\\xd0\\x07\\xdb\\x07\\xe2\\x08\\x5e\\x08\\xa2\\x09\\x05\"\n\"\\x09\\x4d\\x09\\xac\\x09\\xd2\\x0a\\x06\\x0a\\x37\\x0a\\x59\\x0a\\x7f\\x0a\\x8c\\x0a\\xad\\x0a\\xbe\\x0a\\xe1\\x0a\\xf0\\x0b\\x0a\\x0b\\x12\\x0b\\x27\\x0b\\x35\"\n\"\\x0b\\x4a\\x0b\\x5d\\x0b\\x6f\\x0b\\x77\\x0b\\x7f\\x0b\\x8a\\x0b\\x9e\\x0b\\xaa\\x0b\\xb9\\x0b\\xd2\\x0b\\xe0\\x0b\\xed\\x0b\\xfd\\x0c\\x11\\x0c\\x1d\\x0c\\x29\"\n\"\\x0c\\x35\\x0c\\x47\\x0c\\x59\\x0c\\x5d\\x0c\\x68\\x0c\\x79\\x0c\\x83\\x0c\\x88\\x0c\\x90\\x0c\\x9e\\x0c\\xac\\x0c\\xba\\x0c\\xc7\\x0c\\xd4\\x0c\\xdc\\x0c\\xe8\"\n\"\\x0c\\xee\\x0c\\xf6\\x0c\\xfe\\x0d\\x06\\x0d\\x11\\x0d\\x18\\x0d\\x6b\\x0d\\x8b\\x0d\\xd9\\x0e\\x23\\x0e\\x73\\x0e\\xe6\\x0f\\x01\\x0f\\x4a\\x0f\\xb7\\x0f\\xc8\"\n\"\\x10\\x0c\\x10\\x45\\x10\\xa0\\x11\\x0a\\x11\\x3d\\x11\\x79\\x11\\xc8\\x11\\xf5\\x12\\x3c\\x12\\x7e\\x12\\xac\\x12\\xb7\\x12\\xf6\\x12\\xff\\x13\\x2a\\x13\\x36\"\n\"\\x13\\x5b\\x13\\x67\\x13\\x84\\x13\\xc9\\x14\\x04\\x14\\x34\\x14\\x72\\x14\\xac\\x14\\xc7\\x14\\xf8\\x15\\x22\\x15\\x4b\\x15\\x67\\x15\\x88\\x15\\x9f\\x15\\xae\"\n\"\\x15\\xde\\x15\\xe2\\x16\\x03\\x16\\x15\\x16\\x36\\x16\\x5f\\x16\\x69\\x16\\x86\\x16\\x96\\x16\\xaa\\x16\\xc8\\x16\\xef\\x16\\xf7\\x17\\x07\\x17\\x17\\x17\\x2a\"\n\"\\x17\\x48\\x17\\x6d\\x17\\x87\\x17\\x9b\\x17\\xbb\\x17\\xc7\\x17\\xe9\\x17\\xf7\\x17\\xfb\\x18\\x09\\x18\\x29\\x18\\x36\\x18\\x45\\x18\\x63\\x18\\x7a\\x18\\x91\"\n\"\\x18\\xa9\\x18\\xb8\\x18\\xbf\\x18\\xce\\x18\\xd9\\x18\\xf3\\x18\\xf8\\x19\\x11\\x19\\x2a\\x19\\x30\\x19\\x36\\x19\\x4f\\x19\\x5d\\x19\\x75\\x19\\x7c\\x19\\x85\"\n\"\\x19\\x9b\\x19\\xa7\\x19\\xb3\\x19\\xc3\\x19\\xd5\\x19\\xda\\x19\\xf1\\x1a\\x08\\x1a\\x1d\\x1a\\x33\\x1a\\x45\\x1a\\x55\\x1a\\x6b\\x1a\\x75\\x1a\\x85\\x1a\\x9a\"\n\"\\x1a\\xaf\\x1a\\xc4\\x1a\\xd7\\x1a\\xeb\\x1a\\xff\\x1b\\x13\\x1b\\x1a\\x1b\\x2d\\x1b\\x40\\x1b\\x53\\x1b\\x66\\x1b\\x6f\\x1b\\x82\\x1b\\x86\\x1b\\x98\\x1b\\xaa\"\n\"\\x1b\\xbc\\x1b\\xce\\x1b\\xde\\x1b\\xef\\x1c\\x00\\x1c\\x11\\x1c\\x22\\x1c\\x33\\x1c\\x44\\x1c\\x54\\x1c\\x64\\x1c\\x74\\x1c\\x84\\x1c\\x94\\x1c\\xa4\\x1c\\xb4\"\n\"\\x1c\\xc4\\x1c\\xd4\\x1c\\xe2\\x1c\\xf1\\x1d\\x00\\x1d\\x0f\\x1d\\x16\\x1d\\x20\\x1d\\x2e\\x1d\\x37\\x1d\\x45\\x1d\\x53\\x1d\\x61\\x1d\\x6a\\x1d\\x77\\x1d\\x84\"\n\"\\x1d\\x91\\x1d\\x9e\\x1d\\xab\\x1d\\xb8\\x1d\\xc3\\x1d\\xcf\\x1d\\xdb\\x1d\\xe0\\x1d\\xec\\x1d\\xf8\\x1e\\x04\\x1e\\x10\\x1e\\x1c\\x1e\\x28\\x1e\\x30\\x1e\\x38\"\n\"\\x1e\\x43\\x1e\\x4e\\x1e\\x59\\x1e\\x64\\x1e\\x6f\\x1e\\x7a\\x1e\\x85\\x83\\x34\\x1d\\x7a\\x7a\\x1a\\x0b\\xf8\\x32\\xf7\\x2b\\x15\\x9e\\x5c\\x05\\x7a\\x06\\x71\"\n\"\\x83\\x89\\x9d\\x1d\\x99\\x88\\xa3\\x1b\\xf7\\x1f\\x06\\xa0\\x9a\\xf7\\x3a\\x1d\\x80\\x92\\x82\\x8d\\x70\\x8c\\xfb\\x5b\\xf8\\x60\\x18\\xfb\\x6f\\x06\\x70\\x20\"\n\"\\x1d\\x7a\\x93\\x7c\\x9a\\x81\\x1e\\x83\\x95\\x96\\x89\\xa6\\x1b\\xc4\\x06\\xfb\\x2c\\xfb\\xf9\\x05\\x5f\\x73\\x79\\x69\\x68\\xa2\\x7a\\xba\\x1f\\xf7\\x19\\x06\"\n\"\\xa0\\x9a\\x8d\\x90\\x3a\\x1d\\x93\\x80\\x82\\x8d\\x6f\\x1b\\x7a\\x06\\x9f\\xba\\x05\\xf7\\x50\\xf2\\x15\\xfb\\x25\\x06\\xd4\\xf7\\x3d\\x05\\x0b\\x1a\\x9c\\x83\"\n\"\\x9a\\x7d\\x95\\x1e\\x71\\x1d\\x0b\\x15\\x95\\x99\\x8f\\x95\\x93\\x1a\\xa0\\x79\\x9c\\x75\\x79\\x82\\x85\\x77\\x7d\\x1e\\x39\\xfb\\x0c\\x05\\x83\\x7f\\x86\\x7f\"\n\"\\x82\\x1a\\x77\\x9d\\x7a\\xa2\\x9b\\x95\\x92\\x9f\\x98\\x1e\\x0e\\xf7\\xc0\\xf8\\xd6\\x15\\x48\\x4a\\x71\\x5a\\x53\\x1f\\x4e\\x55\\x69\\x3c\\x34\\x1a\\xfb\\x38\"\n\"\\xf7\\x13\\xfb\\x18\\xf7\\x30\\xf7\\x2f\\xf7\\x14\\xf7\\x18\\xf7\\x33\\xe8\\x6b\\xd6\\x4c\\xc4\\x1e\\xbc\\x55\\x49\\xa5\\x47\\x1b\\x24\\x04\\xea\\xdb\\x34\\x24\"\n\"\\xfb\\x00\\x3d\\x34\\x2a\\x2b\\x3c\\xe2\\xf5\\xf4\\xda\\xe2\\xeb\\x1f\\x0b\\xf7\\xc3\\xf8\\x49\\x15\\xfb\\x2a\\xfb\\x07\\x29\\xfb\\x14\\xfb\\x13\\xf7\\x07\\x28\"\n\"\\xf7\\x27\\xf7\\x27\\xf7\\x07\\xee\\xf7\\x13\\xf7\\x12\\xfb\\x07\\xef\\xfb\\x24\\x1f\\x86\\x24\\x15\\xe4\\xce\\x56\\x45\\x46\\x48\\x55\\x34\\x34\\x48\\xc1\\xd0\"\n\"\\xd0\\xce\\xc1\\xe0\\x1f\\x0b\\x15\\x9c\\x99\\x92\\x95\\x98\\xf3\\x1d\\x06\\x4f\\x1d\\x0b\\x1a\\xb1\\x74\\x99\\x4b\\x1e\\x0b\\x06\\x5c\\x73\\x79\\x69\\x69\\xa3\"\n\"\\x79\\xba\\x1f\\x0b\\x83\\x9a\\x7d\\x95\\x1f\\x93\\x80\\x0b\\x06\\xb9\\xa3\\x9d\\xad\\x0b\\xf8\\x96\\xf8\\x3d\\x15\\xfb\\x1f\\x06\\x3d\\x1d\\x7a\\x1a\\x7a\\x93\"\n\"\\x7c\\x99\\x81\\x3f\\x1d\\xaa\\xfb\\x3c\\x06\\x58\\x58\\x74\\x7f\\x5a\\x1b\\x51\\x71\\x9f\\xb8\\x1f\\xf7\\xa1\\xfb\\x0c\\x07\\x3d\\x1d\\x7a\\x1a\\x7a\\x93\\x7c\"\n\"\\x99\\x81\\x1e\\x84\\x95\\x96\\x88\\xa6\\x1b\\x97\\xfb\\x3e\\x06\\x52\\x9f\\x61\\xb3\\x6e\\x1e\\x73\\xad\\xb5\\x7f\\xb9\\x1b\\xc1\\xab\\x98\\xb3\\xba\\x1f\\x62\"\n\"\\xee\\x07\\xa0\\x9a\\x8d\\x90\\x3a\\x1d\\x81\\x91\\x83\\x8d\\x76\\x8c\\x08\\x0b\\x1b\\x9c\\x9b\\x93\\x98\\x96\\x1f\\x93\\x96\\x8d\\x0b\\x76\\x84\\x8a\\x88\\x82\"\n\"\\x1f\\x78\\x85\\x7c\\x76\\x76\\x1a\\x0b\\x81\\x80\\x8d\\x70\\x1b\\x0b\\xf7\\x5a\\xf7\\x7c\\x15\\xd8\\x88\\x06\\x47\\x1d\\x9b\\x93\\x98\\x96\\x72\\x1d\\xf7\\x27\"\n\"\\xfc\\x59\\x07\\x6b\\x1d\\x7b\\x79\\x92\\x1d\\x7b\\x79\\x1a\\x69\\xa3\\x79\\xb9\\x1e\\xf8\\x6f\\xf7\\x29\\x06\\xf7\\x07\\x1d\\x07\\x0b\\x06\\xb9\\xa3\\x9c\\xae\"\n\"\\x9b\\x2a\\x1d\\x82\\x8d\\x6f\\x1b\\x0b\\x8d\\x90\\x94\\x1f\\x9b\\x95\\x95\\x0b\\x1a\\x9b\\x83\\x9a\\x7d\\x95\\x1e\\x93\\x0b\\x8a\\x85\\x81\\x1f\\x7b\\x81\\x81\"\n\"\\x0b\\x5d\\x1d\\x5d\\x1b\\x38\\x59\\x5e\\x1d\\x0b\\x15\\x68\\x6e\\x6f\\x6a\\x69\\xa8\\x6f\\xae\\xae\\xa8\\xa7\\xac\\xae\\x6f\\xa6\\x67\\x1f\\xf7\\x64\\x16\\x68\"\n\"\\x6e\\x6f\\x6a\\x69\\xa8\\x6f\\xae\\xae\\xa8\\xa7\\xac\\xae\\x6f\\xa6\\x67\\x1f\\x0e\\x15\\x67\\x76\\x7c\\x70\\x82\\x90\\x7f\\x92\\x83\\x1f\\x81\\x95\\x93\\x88\"\n\"\\xa6\\x1b\\xf7\\x88\\x06\\xae\\xa7\\x1d\\x73\\x1b\\x0e\\x8d\\x90\\x94\\xa6\\x1d\\x92\\x80\\x82\\x8d\\x6f\\x1b\\x0b\\x06\\xba\\xa3\\x9d\\xad\\xad\\x73\\x9d\\x5c\"\n\"\\x1f\\x0b\\x93\\xa6\\x1d\\x0b\\x15\\x73\\x7c\\x7b\\x73\\x3f\\xe0\\x47\\xe9\\xe9\\xe0\\x6f\\x1d\\x81\\x6b\\xf7\\x1d\\x1d\\x1f\\x7b\\x81\\x81\\x7a\\x79\\x1a\\x7b\"\n\"\\x93\\x7b\\x99\\x81\\x1e\\x0b\\x72\\x81\\x89\\x86\\x82\\x1f\\x7b\\x81\\x81\\x7a\\x0b\\x1b\\x9c\\x9b\\x93\\x98\\x96\\x1f\\x93\\x95\\x8d\\x0b\\x1e\\x84\\x95\\x98\"\n\"\\x88\\xa4\\x1b\\x0b\\x1b\\x74\\x79\\x7a\\x75\\x7e\\x0b\\xf8\\xbe\\xf7\\x41\\x15\\xa6\\x93\\x9a\\x9d\\xa4\\x33\\x1d\\x80\\x81\\x8d\\x6f\\x1b\\xfb\\x43\\x06\\x71\"\n\"\\x83\\x50\\x1d\\x9a\\x81\\x1e\\x83\\x95\\x97\\x89\\xa4\\x1b\\xeb\\x4f\\x06\\x7d\\x68\\x64\\x84\\x5b\\x1b\\x4d\\x5b\\x99\\xa6\\x69\\x1f\\x6e\\xa3\\x7d\\xaf\\xc0\"\n\"\\x1a\\xc8\\x07\\xba\\x9e\\xba\\xac\\xaa\\x1e\\xa8\\xa9\\xb7\\x9a\\xc1\\x1b\\xd3\\xbc\\x77\\x6b\\x94\\x1f\\x94\\x6c\\x8b\\x8b\\x91\\x84\\x08\\x81\\x94\\x99\\x85\"\n\"\\x9a\\x2d\\x1d\\x93\\xa6\\x1a\\xd5\\x07\\xa4\\x8a\\x93\\x85\\x95\\x1e\\x9a\\x82\\x7a\\x95\\x79\\x1b\\x77\\x80\\x83\\x76\\x80\\x1f\\x9e\\x60\\x5b\\x95\\x56\\x1b\"\n\"\\x37\\x4b\\x73\\x58\\x55\\x1f\\x54\\x57\\x6c\\x44\\x41\\x1a\\x48\\x07\\x47\\xa5\\x48\\xb4\\x63\\x1e\\x5a\\xbd\\xe1\\x6f\\xef\\x1b\\xda\\xbd\\x99\\xba\\xe8\\x1f\"\n\"\\x0b\\xf8\\x92\\xf8\\x06\\x15\\x9e\\x8a\\x92\\x88\\x94\\x1e\\x9e\\x86\\x77\\x98\\x75\\x1b\\x7b\\x82\\x85\\x7a\\x82\\x1f\\x9a\\x66\\x61\\x93\\x5b\\x1b\\xfb\\x0e\"\n\"\\x33\\x53\\x3c\\x3e\\xc7\\x63\\xf7\\x22\\x7c\\x1f\\xc1\\x86\\xa0\\x87\\x9b\\x85\\x08\\x9f\\x83\\x97\\x80\\x80\\x1a\\x77\\x56\\x7a\\x50\\x56\\x61\\x97\\xa2\\x6f\"\n\"\\x1e\\xa9\\x82\\x7a\\x99\\x6f\\x1b\\x78\\x54\\x1d\\x82\\x71\\x1a\\x6b\\x07\\x5d\\x9d\\x76\\xb0\\x98\\x94\\x8e\\x93\\x96\\x1e\\x79\\xb2\\xbe\\x82\\xc5\\x1b\\xf7\"\n\"\\x17\\xea\\xc5\\xdb\\xb9\\x70\\xb5\\x5e\\xa3\\x1f\\x6d\\x9b\\x61\\x96\\x41\\x94\\x4b\\x94\\x85\\x8c\\x7e\\x8f\\x08\\x7c\\x91\\x82\\x92\\x92\\x1a\\x99\\xbb\\x9a\"\n\"\\xba\\xb4\\xac\\x82\\x79\\xa5\\x1e\\x6c\\x9d\\x97\\x83\\xa4\\x3e\\x1d\\x95\\xa5\\x1a\\x0b\\xf7\\x98\\xf8\\x61\\x15\\xc0\\x69\\x1d\\xfb\\x6a\\x06\\x6b\\x1d\\x7b\"\n\"\\x79\\x1a\\x7a\\x93\\x7b\\x99\\x82\\x1e\\x83\\x96\\x96\\x89\\xa5\\x1b\\xc0\\xfb\\xfa\\x56\\x06\\x71\\x83\\x34\\x1d\\x7b\\x79\\x1a\\x68\\xa3\\x7a\\xb9\\x1e\\xf8\"\n\"\\x70\\xf7\\x04\\x1d\\xfb\\x63\\x07\\x0b\\xf7\\x66\\xf2\\x15\\xf7\\xbe\\xf7\\xff\\x05\\xed\\xfc\\x34\\xfb\\x3a\\x07\\x73\\x8d\\x82\\x91\\x82\\x1e\\x7b\\x95\\x9d\"\n\"\\x82\\x9d\\x2d\\x1d\\x93\\xa6\\x1a\\xca\\xf7\\x3a\\x07\\xfb\\xbd\\xfb\\xfd\\x05\\x27\\xf8\\x62\\xf7\\x3c\\x07\\xa4\\x8a\\x93\\x84\\x95\\x1e\\x99\\x82\\x79\\x95\"\n\"\\x78\\xf7\\x50\\x1d\\x4a\\x07\\x0b\\x15\\xfb\\x03\\xe5\\x05\\x96\\x7e\\x84\\x8e\\x81\\x1b\\x76\\x79\\x7a\\x76\\xf7\\x46\\x1d\\xa2\\x9e\\x8d\\x8e\\x9a\\x1a\\xa0\"\n\"\\x79\\x9c\\x77\\x80\\x83\\x87\\x81\\x7f\\x1e\\x0e\\xc7\\x1d\\xba\\xb8\\xaa\\x9b\\xb8\\x1b\\xc7\\xd5\\x1d\\x0b\\x73\\x8c\\x82\\x91\\x82\\x1e\\x7c\\x95\\x9d\\x81\"\n\"\\xac\\x1d\\x93\\xa6\\x1a\\xf7\\x00\\x07\\x9f\\x8a\\x91\\x88\\x95\\x1e\\x9d\\x84\\x76\\x99\\x75\\x1b\\x7a\\x7b\\x83\\x7e\\x81\\x1f\\x83\\x80\\x89\\x81\\x71\\x1a\"\n\"\\x88\\x3e\\xf7\\x13\\xf7\\x76\\x5f\\xf7\\x48\\x1d\\x0b\\x15\\x74\\x7c\\x7b\\x73\\x3f\\xe0\\x47\\xe9\\xe9\\xe0\\x6f\\x1d\\x82\\x6a\\x84\\x1f\\x61\\x81\\x63\\x70\"\n\"\\x56\\x1b\\x56\\x62\\xa6\\xb5\\x82\\x1f\\xab\\x84\\x82\\x95\\x75\\x1b\\x0e\\xb2\\xaa\\xa8\\xb1\\xb0\\x6c\\xa9\\x64\\x1f\\x79\\x06\\x65\\x6b\\x6d\\x66\\x66\\xaa\"\n\"\\x6d\\xb2\\x1f\\x0b\\x16\\x9e\\x1d\\x0e\\x80\\x82\\x8d\\x6f\\x1b\\x26\\x06\\x72\\x81\\x89\\x86\\x82\\x73\\x1d\\x0b\\x71\\x20\\x1d\\x7a\\x93\\x7c\\x99\\x81\\x1e\"\n\"\\x84\\x0b\\x95\\x1e\\x9a\\x81\\x7a\\x94\\x78\\x1b\\x7a\\x7b\\x83\\x7e\\x80\\x1f\\x83\\x81\\x89\\x0b\\x7e\\x1a\\x77\\x9e\\x78\\x9f\\x95\\x96\\x91\\x96\\x96\\x1e\"\n\"\\x0b\\xb9\\xa3\\x9d\\xad\\xad\\x73\\x9d\\x5d\\x1f\\x0b\\x34\\x1d\\x7b\\x79\\x1a\\x7a\\x93\\x7c\\x0b\\x88\\x7e\\x7b\\x1e\\xfb\\x1a\\x21\\x05\\x7a\\x0b\\x5d\\x72\"\n\"\\x79\\x69\\x69\\xa3\\x79\\xba\\x1f\\x0b\\x87\\x81\\x7f\\x1e\\xfb\\x00\\x38\\x05\\x0b\\x7c\\x84\\x7d\\x80\\x1f\\x83\\x80\\x89\\x0b\\x82\\x1b\\x76\\x79\\x7a\\x76\"\n\"\\x0b\\x78\\xa2\\x68\\x68\\x78\\x74\\x0b\\x90\\x94\\x97\\x1e\\x0e\\xf7\\xae\\xf8\\x3e\\x15\\xfb\\x1f\\x06\\x79\\x78\\x88\\x86\\x84\\x1f\\x7b\\x82\\x81\\x7a\\x79\"\n\"\\x1a\\x69\\xa3\\x79\\xb9\\x1e\\xaa\\xfb\\x6f\\x55\\xf7\\x2c\\x1d\\xf7\\xbd\\x06\\xba\\xa3\\x9c\\xae\\x9b\\x2a\\x1d\\x81\\x8d\\x6f\\x1b\\xfb\\x1b\\xf7\\x1b\\x06\"\n\"\\xd3\\xe6\\xb3\\xa3\\xa9\\x1b\\x98\\x94\\x87\\x7f\\x99\\x1f\\x7d\\x9b\\x96\\x86\\x9a\\x1b\\xa8\\xa4\\xa3\\xa8\\x9d\\x83\\x98\\x76\\x9c\\x1f\\xa4\\x6b\\x6a\\x97\"\n\"\\x67\\x1b\\x59\\x68\\x7c\\x55\\x3d\\x1f\\x0b\\xf7\\x29\\x1d\\x79\\x1a\\x7b\\x93\\x7c\\x99\\x81\\x1e\\x83\\x95\\x98\\x89\\xa4\\x1b\\xf7\\x6b\\x06\\xa2\\x97\\x6c\"\n\"\\x1d\\x71\\x1b\\xf7\\x76\\xf8\\x33\\x05\\xad\\x8f\\x9e\\x9d\\xa8\\x22\\x1d\\x2f\\x06\\x2e\\x1d\\x7b\\x93\\x7b\\x99\\x81\\x1e\\x95\\x85\\x92\\x89\\xa1\\x8a\\xfb\"\n\"\\x04\\xfb\\x5e\\x18\\xfb\\x01\\xf7\\x5e\\x05\\xb0\\x8d\\x9f\\x9e\\xa9\\x1a\\x9c\\x83\\x9b\\x7d\\x95\\x1e\\x92\\x83\\x1d\\x0b\\xf7\\x0d\\x1d\\x9a\\x7d\\x96\\x1e\"\n\"\\x92\\x80\\x82\\x8d\\x6f\\x1b\\xfb\\x17\\x06\\x71\\x83\\x8a\\x85\\x81\\x1f\\x7b\\x82\\x81\\x79\\x7a\\xf7\\x5f\\x1d\\xa5\\x1b\\xbc\\x06\\x6a\\xfb\\x82\\x43\\xf7\"\n\"\\x5f\\x05\\xfb\\x00\\x06\\x43\\xfb\\x5f\\x6a\\xf7\\x82\\x05\\xb6\\x06\\xa3\\x96\\x8d\\x90\\x95\\x77\\x1d\\x7d\\x95\\x1e\\x93\\x80\\x81\\x8d\\x6f\\x1b\\xfb\\x17\"\n\"\\x06\\x70\\x84\\x8a\\x85\\x81\\x1f\\x7a\\x81\\x82\\x7b\\x77\\x1a\\x6f\\x9b\\x7a\\xa9\\x87\\x1e\\xc9\\xfc\\x62\\x05\\xf7\\x0a\\x06\\x0b\\x5b\\x6c\\x76\\x69\\x5e\"\n\"\\x1a\\x54\\x60\\x1d\\x80\\x1e\\x7d\\x6e\\x83\\x88\\x7f\\x1b\\x7e\\x84\\x90\\x95\\x0b\\x83\\x8a\\x85\\x81\\x1f\\x7b\\x82\\x81\\x79\\x7a\\x1a\\x7a\\x93\\x7c\\x99\"\n\"\\x81\\x1e\\x83\\x96\\x96\\x89\\x0b\\xd9\\x1d\\x74\\x31\\x71\\x87\\x0b\\xa3\\xbf\\xf7\\x36\\x1d\\x0b\\x71\\x83\\x8a\\x85\\x61\\x1d\\x0b\\xb0\\x69\\xc8\\xa7\\xaa\"\n\"\\x92\\x97\\xa5\\x1e\\xa5\\x96\\x97\\x99\\x9f\\x1a\\xa1\\x78\\x9d\\x74\\x83\\x85\\x89\\x86\\x0b\\x81\\x1f\\x7b\\x81\\x81\\x7a\\xf7\\x6b\\x1d\\x9a\\x88\\xa2\\x1b\"\n\"\\x0b\\x06\\x64\\x6c\\x6d\\x66\\x66\\xaa\\x6d\\xb2\\x1f\\x0e\\x2b\\x1d\\x9b\\x83\\x9b\\x7d\\x95\\x1f\\x0b\\x1a\\xa7\\x72\\xa3\\x6e\\x7d\\x7e\\x86\\x7f\\x7f\\x1e\"\n\"\\x71\\x72\\x8b\\x8b\\x0b\\x9c\\xae\\x9b\\x83\\x9a\\x7d\\x96\\x1f\\x92\\x80\\x82\\x8d\\x6f\\x1b\\x0b\\xf8\\x87\\x15\\xfb\\x12\\xfb\\x00\\xf7\\x12\\x06\\x0b\\x06\"\n\"\\xb9\\xa4\\x9d\\xad\\xad\\x72\\x9d\\x5d\\x1f\\x0b\\x06\\x5d\\x72\\x75\\x1d\\x0b\\x06\\xa2\\x97\\x8d\\x90\\x94\\x77\\x1d\\x7d\\x95\\x1e\\x93\\x80\\x82\\x8d\\x6f\"\n\"\\x1b\\x0b\\x9a\\x80\\x1e\\x84\\x96\\x98\\x88\\xa5\\x1b\\x0b\\x70\\x84\\x8a\\x85\\x81\\x1f\\x7b\\x81\\x81\\x0b\\x32\\x1d\\x9c\\x9d\\x1a\\x9b\\x83\\x9b\\x7d\\x94\"\n\"\\x1e\\x93\\x80\\x82\\x8d\\x0b\\x06\\x72\\x82\\x89\\x86\\x81\\x1f\\x7b\\x81\\x81\\x0b\\xae\\x1a\\xad\\x73\\x9d\\x5d\\x1e\\x0b\\xcf\\xd7\\xa3\\x7c\\x9b\\x74\\x75\"\n\"\\x82\\x0b\\x9c\\x93\\x98\\x95\\x1f\\x93\\x96\\x8d\\x0b\\x93\\x80\\x81\\x8d\\x70\\x1b\\x0b\\x1f\\x93\\x96\\x8d\\x94\\xa6\\x1a\\x0b\\x1f\\x7b\\x81\\x81\\x7a\\x7a\"\n\"\\x1a\\x0b\\xfb\\x0b\\xfb\\x0a\\xfb\\x2f\\x1f\\x0b\\x79\\x69\\x69\\xa4\\x79\\xb9\\x1f\\x0b\\x1b\\xab\\x9c\\x81\\x79\\x7e\\x80\\x84\\x76\\x7b\\x0b\\x1f\\x9b\\x95\"\n\"\\x95\\x9c\\x9d\\x1a\\x9b\\x83\\x9a\\x0b\\xf8\\x9d\\xf8\\x93\\xb5\\x1d\\x0b\\xf8\\x06\\xf7\\xb4\\x15\\xf7\\x2c\\xf7\\x41\\x05\\xb1\\x8c\\xa1\\x9e\\xaa\\x22\\x1d\"\n\"\\x31\\x06\\x2e\\x1d\\x76\\x95\\x7d\\xf7\\x35\\x1d\\x7c\\x95\\x1e\\x93\\x2f\\x1d\\x30\\x06\\x77\\x84\\x8a\\x88\\x82\\x1f\\x78\\x85\\x7c\\x76\\x76\\x1a\\x7b\\x94\"\n\"\\x7b\\x98\\x82\\x1e\\x94\\x84\\x92\\x89\\xa1\\x8a\\xf7\\x2f\\xfb\\x41\\x18\\xfb\\x37\\xfb\\x4d\\x05\\x65\\x74\\x77\\x6c\\x68\\xa3\\x7a\\xb9\\x1f\\xf7\\x03\\x06\"\n\"\\xb9\\xa3\\x9c\\xae\\xa7\\x78\\x9e\\x6c\\x8e\\x1f\\xe9\\xf5\\xe8\\x22\\x05\\x6b\\x87\\x78\\x78\\x6f\\x1a\\x68\\xa3\\x7a\\xb9\\x1e\\xf7\\x03\\x06\\xa0\\x9a\\x8d\"\n\"\\x90\\x3a\\x1d\\x81\\x91\\x84\\x8d\\x75\\x8c\\x08\\x0e\\xf8\\x2a\\xf8\\x1f\\x15\\xa7\\x66\\x5a\\x9a\\xe1\\x1d\\x79\\x1a\\x7b\\x93\\x7c\\x99\\x81\\x1e\\x83\\x95\"\n\"\\x98\\x89\\xa4\\x1b\\xf7\\x04\\x06\\xf7\\x04\\xdf\\xda\\xf1\\x8a\\x1f\\xf7\\xe5\\x97\\x07\\xa3\\x96\\x38\\x1d\\xfb\\x0c\\x06\\xfb\\x1b\\x31\\x15\\xd6\\xc7\\x55\"\n\"\\x48\\x45\\x50\\x55\\x3f\\x41\\x4f\\xc2\\xcf\\xcf\\xc7\\xc1\\xd5\\x1f\\x0b\\xa8\\xf7\\x85\\x15\\xfb\\x27\\xf7\\x12\\x20\\xf7\\x40\\xd4\\xd0\\x9d\\xa9\\xb7\\x1e\"\n\"\\xaf\\xa4\\x9e\\xa4\\xa2\\x64\\x1d\\x81\\x85\\x08\\x7d\\x71\\x65\\x83\\x5d\\x1b\\xfb\\x08\\x3f\\xc7\\xe8\\x1f\\xc8\\x07\\xef\\xd3\\xd2\\xef\\xad\\xad\\x83\\x7c\"\n\"\\xa6\\x1e\\xa7\\x7c\\x95\\x80\\x8f\\x75\\x08\\x65\\x92\\x9a\\x7b\\xaa\\x3e\\x1d\\x96\\xa4\\x1a\\xdb\\x07\\xa4\\x8a\\x93\\x84\\x95\\x1e\\x9a\\x81\\x7a\\x94\\x78\"\n\"\\x1b\\x79\\x7f\\x85\\x7b\\x7e\\x1f\\xa9\\x46\\x71\\x91\\x53\\x1b\\xfb\\x31\\x74\\x1d\\x0b\\xf7\\xf5\\xf8\\x61\\x15\\xf0\\x37\\x06\\x73\\x8d\\x81\\x91\\x82\\x1e\"\n\"\\x7b\\x95\\x9c\\x82\\x9e\\x2d\\x1d\\x93\\xa7\\x1a\\xf7\\x4f\\xfc\\xa0\\xfb\\x4f\\x07\\x73\\x8d\\x81\\x91\\x82\\x1e\\x7b\\x95\\x9d\\x82\\x9d\\x2d\\x1d\\x93\\xa7\"\n\"\\x1a\\xdf\\xee\\xfb\\xfa\\x4e\\x07\\x5f\\x1d\\xf7\\x7b\\x06\\xb9\\xa3\\x9c\\xae\\x9b\\x2a\\x1d\\x81\\x8d\\x70\\x1b\\x4d\\x06\\x0b\\xd1\\xf2\\x15\\x63\\x8a\\x77\"\n\"\\x7a\\x6a\\x1a\\x69\\xa2\\x79\\xb5\\x1e\\xef\\x06\\xf7\\x77\\xf7\\xa4\\x05\\xfb\\x3c\\x84\\x07\\x5d\\x73\\x79\\x69\\x69\\xa3\\x79\\xb9\\x1f\\xf7\\x03\\x06\\xba\"\n\"\\xa3\\x9d\\xac\\xad\\x75\\x9c\\x5e\\x8c\\x1f\\xf7\\x6e\\x95\\x07\\xba\\xa3\\x9d\\xad\\xad\\x73\\x9d\\x5c\\x1f\\xfb\\x07\\x06\\xfb\\x77\\xfb\\xa3\\x05\\xf7\\x3b\"\n\"\\x98\\x07\\xc0\\xa3\\x9b\\xaf\\xaf\\x73\\x9b\\x56\\x1f\\xfb\\x03\\x06\\x5c\\x73\\x79\\x69\\x6a\\x9f\\x7a\\xb4\\x8a\\x1f\\x0b\\xf8\\x80\\xf7\\x6e\\x15\\xa2\\x98\"\n\"\\x8d\\x90\\x93\\x1f\\x9b\\x95\\x95\\x9c\\x9d\\x22\\x1d\\xfc\\x14\\x06\\x3d\\x1d\\x79\\x1a\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x83\\x95\\x97\\x89\\xa5\\x1b\\x0e\\x15\"\n\"\\xfb\\x0c\\x6a\\x05\\x70\\x84\\x83\\x83\\x79\\x1a\\x78\\x99\\x7c\\x9b\\x92\\x92\\x8c\\x8e\\x93\\x1e\\xaf\\x97\\x05\\xfb\\x79\\x5d\\x07\\x6e\\x7d\\x80\\x76\\x76\"\n\"\\x9a\\x7f\\xa7\\x1f\\xf7\\x37\\x06\\xa4\\x98\\x96\\xa1\\xa0\\x7f\\x96\\x71\\x1f\\x59\\x06\\x0b\\x15\\xfb\\x03\\xe5\\x05\\x95\\x7f\\x83\\x8e\\x81\\x1b\\x76\\x79\"\n\"\\x7a\\x76\\x7f\\x8f\\x84\\x98\\x81\\x1f\\x93\\x84\\xf7\\x2f\\xfb\\x10\\xf7\\x2e\\xf7\\x10\\x05\\xa3\\x9e\\x8c\\x8d\\x9b\\x1a\\x9f\\x79\\x9c\\x77\\x80\\x82\\x87\"\n\"\\x82\\x80\\x1e\\x0e\\x15\\x98\\x7b\\x85\\x8e\\x7f\\x40\\x1d\\x92\\x81\\x9c\\x7d\\x1f\\xf7\\x1a\\x20\\x05\\x7e\\x9b\\x92\\x88\\x96\\x1b\\xa1\\x9e\\x9d\\xa0\\x98\"\n\"\\x84\\x96\\x7a\\x99\\x1f\\x0e\\x15\\x4b\\x57\\x59\\x4d\\x4d\\xbf\\x59\\xcb\\xca\\xc0\\xbd\\xc8\\xca\\x58\\xbd\\x4a\\x1f\\x53\\x04\\xab\\xa5\\x72\\x6d\\x6b\\x71\"\n\"\\x72\\x6b\\x6b\\x71\\xa4\\xaa\\xaa\\xa5\\xa4\\xab\\x1f\\x0b\\x2f\\x1d\\x31\\xf7\\x11\\x1d\\x6f\\x9d\\x79\\xab\\x86\\x1e\\x0b\\xa4\\x8a\\x93\\x84\\x4d\\x1d\\x81\"\n\"\\x71\\x1a\\x3b\\x6c\\x07\\x70\\x84\\x8a\\x85\\x81\\x1f\\x7b\\x82\\x81\\x79\\x7a\\x1a\\x7a\\x93\\x7c\\x99\\x81\\x3f\\x1d\\xaa\\x0b\\xf7\\xc9\\xf7\\x60\\x15\\xb2\"\n\"\\xaa\\xa9\\xb0\\xb0\\x6c\\xa9\\x64\\x1f\\x79\\x62\\x1d\\xf7\\xf6\\xf8\\x3d\\x15\\xfb\\x4a\\x06\\x70\\x83\\x34\\x1d\\x7b\\x79\\x1a\\x68\\xa3\\x7a\\xba\\x1e\\xd5\"\n\"\\xfb\\x6f\\xfb\\x0a\\x06\\x71\\x20\\x1d\\x69\\xa3\\x79\\xb9\\x1e\\x0b\\x06\\x72\\x81\\x89\\x86\\x82\\x3c\\x1d\\x84\\x96\\x96\\x89\\xa5\\x1b\\x0b\\x06\\x5d\\x73\"\n\"\\x79\\x69\\x6d\\x9c\\x7a\\xae\\x87\\x1f\\xfb\\xfa\\x07\\x58\\x8a\\x76\\x7c\\x68\\x1a\\x69\\xa3\\x79\\xb9\\x1e\\x0b\\x4c\\x1d\\x95\\x99\\x88\\xa3\\x1b\\x0b\\xf9\"\n\"\\x2f\\x15\\x68\\x6e\\x6f\\x6a\\x69\\xa8\\x6f\\xae\\xae\\xa8\\xa7\\xac\\xae\\x6f\\xa6\\x67\\x1f\\x0e\\x74\\x8d\\x81\\x91\\x82\\x1e\\x7b\\x95\\x9c\\x82\\x9e\\x2d\"\n\"\\x1d\\x0b\\x94\\x1f\\x9b\\x95\\x95\\x9b\\x9d\\x1a\\x9c\\x83\\x9a\\x7d\\x95\\x1e\\x93\\x80\\x82\\x8d\\x6f\\x1b\\x0b\\xf8\\x14\\x16\\xf7\\x0d\\xf7\\x33\\x1d\\x7f\"\n\"\\xf7\\x51\\x06\\xe6\\x40\\xc1\\xfb\\x12\\x58\\x0b\\x06\\x77\\x84\\x8a\\x88\\x81\\x1f\\x79\\x85\\x7c\\x76\\x76\\x1a\\x7b\\x93\\x7b\\x99\\x0b\\x9f\\x98\\xaf\\x28\"\n\"\\x1d\\x37\\x06\\x0b\\x91\\xf7\\x5e\\x1d\\x80\\x1e\\x25\\x0b\\x9b\\x2a\\x1d\\x81\\x8d\\x70\\x1b\\xfb\\x0a\\x06\\x0b\\x1a\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x83\\x96\"\n\"\\x96\\x89\\xa5\\x1b\\x96\\xfb\\xfa\\x80\\x6d\\x1d\\x0b\\x89\\xf7\\x4e\\x1d\\x7b\\x93\\x7b\\x99\\x81\\x3f\\x1d\\x0b\\x86\\x90\\xa3\\x88\\xad\\x1b\\x96\\x06\\xcb\"\n\"\\xa2\\x99\\xb0\\xb2\\x75\\x0b\\x15\\x46\\x51\\x55\\x4a\\x4a\\xc5\\x55\\xd0\\xd0\\xc5\\xc1\\xcb\\xcd\\x52\\xc1\\x45\\x1f\\x50\\x04\\xae\\xaa\\x70\\x6b\\x0b\\xf7\"\n\"\\x64\\x1d\\x81\\x80\\x79\\x78\\x1a\\x79\\x94\\x7b\\x6a\\x1d\\x0b\\x94\\x78\\x1b\\x7a\\x7b\\x83\\x7e\\x80\\x1f\\x83\\x81\\x89\\x0b\\x15\\x98\\x7b\\x85\\x8e\\x7f\"\n\"\\x40\\x1d\\x91\\x81\\x9d\\x7d\\x1f\\xf7\\x1a\\x0b\\x1f\\x9b\\x95\\x95\\x9b\\x9d\\x1a\\x9c\\x83\\x9a\\x7d\\x95\\x1e\\x93\\x80\\x80\\x8d\\x71\\x1b\\x0b\\x7d\\x66\"\n\"\\x68\\xa3\\x79\\xbb\\x1f\\x8f\\xfb\\x17\\x06\\x0b\\x1a\\x7b\\x9b\\x7c\\x9c\\x98\\x95\\x93\\x9c\\x95\\x1e\\x0b\\xb9\\x1b\\xa9\\x9e\\x86\\x7f\\x9a\\x1f\\x9b\\x7e\"\n\"\\x8f\\x0b\\x85\\x81\\x1f\\x7b\\x82\\x81\\x7a\\x79\\x1a\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x84\\x95\\x0b\\x6b\\x72\\x73\\x6d\\x6c\\xa4\\x73\\xab\\xab\\xa4\\xa3\\xa9\"\n\"\\xaa\\x72\\xa3\\x6b\\x1f\\x0b\\x07\\xa3\\x1d\\x0b\\x68\\x6e\\x70\\x69\\x6a\\xa8\\x6f\\xae\\xae\\xa8\\x0b\\xb9\\xa3\\x9c\\xae\\x9b\\x83\\x9b\\x7d\\x95\\x1f\\x92\"\n\"\\x80\\x82\\x8d\\x6f\\x1b\\x0b\\x94\\x54\\x1b\\xfb\\x2d\\x20\\x2a\\xfb\\x1f\\x0b\\x5c\\x73\\x75\\x1d\\x0b\\x9b\\x94\\xf7\\x69\\x1d\\x93\\x80\\x0b\\x7d\\x84\\x80\"\n\"\\x7e\\x1a\\x76\\x9e\\x79\\xa1\\x96\\x92\\x8e\\x98\\x0b\\x1f\\x9b\\x95\\x95\\x9c\\x9d\\x1a\\x9b\\x83\\x9b\\x7d\\x95\\x1e\\x0b\\xa1\\x9b\\xa5\\x94\\x85\\x99\\x85\"\n\"\\x92\\x1f\\x94\\x83\\x7e\\x8e\\x0b\\x7d\\xa3\\x1b\\xa9\\xa3\\x99\\xac\\xa7\\x1f\\xa1\\xa6\\x93\\x0b\\x9b\\x83\\x9b\\x7d\\x95\\x1f\\x93\\x80\\x82\\x8c\\x6f\\x1b\"\n\"\\x0b\\x9d\\xad\\x9b\\x2a\\x1d\\x81\\x8d\\x0b\\x1b\\x80\\x80\\x90\\x9e\\x69\\x1f\\xa9\\x59\\x78\\x92\\x0b\\x9d\\x1b\\x9c\\x70\\x1d\\x0b\\xd5\\xc1\\xc9\\xa1\\x7c\"\n\"\\x9a\\x75\\x0b\\x1e\\x3d\\x06\\x61\\x75\\x79\\x69\\x0b\\x72\\x81\\x8a\\x85\\x82\\x1f\\x7b\\x0b\\x9d\\x5c\\x1f\\xfb\\x0c\\x06\\x5d\\x73\\x79\\x68\\x0b\\xf8\\x29\"\n\"\\xf7\\x7a\\xb2\\x1d\\x0b\\x15\\xfb\\x13\\x80\\x07\\xde\\x1d\\xf7\\xfa\\x06\\xad\\x8f\\x9d\\x9d\\xa9\\x1a\\x9b\\x83\\x9a\\x7d\\x96\\x1e\\x92\\x4b\\x1d\\x7a\\x93\"\n\"\\x7b\\x99\\x81\\x1e\\x84\\x96\\x95\\x89\\xa6\\x1b\\x96\\xfb\\x14\\xfb\\x62\\xf7\\x14\\x96\\x06\\xa4\\x95\\x8c\\x91\\x94\\x1f\\x9b\\x95\\x95\\x9b\\x9e\\x33\\x1d\"\n\"\\x4b\\x1d\\x6d\\x9d\\x79\\xad\\x87\\x1e\\xfb\\xfa\\x93\\x1d\\xf7\\x0d\\x06\\xba\\xa2\\x65\\x1d\\x80\\xf7\\x13\\x06\\x0b\\xf7\\x26\\x1d\\x9c\\xae\\x9b\\x83\\x9b\"\n\"\\x7d\\x95\\x1f\\x93\\x80\\x81\\x8c\\xf0\\x1d\\x85\\x8a\\x88\\x81\\xbd\\x1d\\x92\\x80\\x82\\x8d\\x6f\\x1b\\x6c\\x06\\x0b\\xf8\\x9d\\xf8\\x93\\xf7\\x13\\x1d\\x59\"\n\"\\x1b\\xfb\\x13\\x2d\\x41\\x28\\xf7\\x55\\x1d\\xce\\x80\\x9a\\x87\\xa1\\x80\\x08\\x9f\\x81\\x98\\x79\\x79\\x1a\\x64\\x53\\x6d\\x42\\x4c\\x4d\\xa6\\xab\\x81\\x1e\"\n\"\\x83\\xa6\\x8b\\x8b\\x84\\x92\\x08\\x95\\xee\\x1d\\xf7\\x20\\xe8\\xcf\\xf2\\xbe\\x77\\xb3\\x63\\xaa\\x1f\\x6b\\xa4\\x64\\x98\\x33\\x9a\\x41\\x99\\x86\\xf7\\x39\"\n\"\\x1d\\x73\\x66\\xd8\\x1d\\x0b\\xf7\\x13\\x1d\\x58\\x1b\\xfb\\x12\\x2d\\x41\\x29\\xf7\\x55\\x1d\\xcd\\x7f\\x9b\\x87\\xa1\\x81\\x08\\x9f\\x81\\x98\\x79\\x79\\x1a\"\n\"\\x64\\x53\\x6d\\x43\\x4b\\x4d\\xa6\\xab\\x81\\x1e\\x83\\xa5\\x8b\\x8b\\x84\\x93\\x08\\x94\\xee\\x1d\\xf7\\x1f\\xe9\\xd0\\xf1\\xbe\\x77\\xb3\\x63\\xaa\\x1f\\x6b\"\n\"\\xa3\\x64\\x99\\x33\\x9a\\x3f\\x99\\x88\\xf7\\x39\\x1d\\x72\\x67\\xd8\\x1d\\x0b\\xf7\\x29\\x1d\\x7a\\x1a\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x83\\x95\\x98\\x89\\xa4\"\n\"\\x1b\\xf7\\x6b\\x06\\xa2\\x97\\x6c\\x1d\\x71\\x1b\\xf7\\x76\\xf8\\x33\\x05\\xad\\x8f\\x9e\\x9d\\xa8\\x22\\x1d\\x2f\\x06\\x2e\\x1d\\x7b\\x93\\x7b\\x99\\x81\\x1e\"\n\"\\x95\\x85\\x92\\x89\\xa1\\x8a\\xfb\\x04\\xfb\\x5e\\x18\\xfb\\x01\\xf7\\x5e\\x05\\xaf\\x8d\\xa0\\x9e\\xa9\\x1a\\x9c\\x83\\x9a\\x7d\\x95\\x1e\\x93\\x83\\x1d\\x0b\"\n\"\\xf7\\x6f\\xf7\\x33\\x15\\x99\\x95\\xec\\x39\\x05\\x81\\x7e\\x87\\x82\\x7e\\x1a\\x69\\xa3\\x79\\xb9\\x1e\\xf7\\x0a\\x06\\xba\\xa3\\x9c\\xae\\x9c\\x2a\\x1d\\x81\"\n\"\\x8c\\x6f\\x1b\\x6b\\x06\\xfb\\x2f\\xf7\\x17\\xf7\\x06\\xe3\\x05\\xa5\\x06\\xa3\\x96\\x8c\\x91\\x8c\\x1d\\xfb\\x04\\x06\\x72\\x80\\x89\\x86\\x82\\x73\\x1d\\x7d\"\n\"\\x8f\\x81\\x95\\x7f\\x1e\\x46\\x57\\x05\\xf7\\xd1\\xfb\\x0c\\x07\\x78\\x83\\x8b\\x88\\x81\\x1f\\x79\\x85\\x7c\\x76\\xf7\\x45\\x1d\\xfc\\x20\\x7f\\x06\\x72\\x81\"\n\"\\x89\\x85\\x82\\x1f\\x7b\\x82\\x81\\x7a\\x79\\x1a\\x69\\xa3\\x79\\xb9\\x1e\\xf7\\x0c\\x06\\x0b\\xf7\\x3d\\x1d\\xf7\\x13\\x22\\xe8\\xfb\\x23\\x4f\\x61\\x7d\\x66\"\n\"\\x5c\\x1f\\xb2\\xfb\\x0c\\x07\\xf7\\x0f\\x1d\\x97\\xfc\\x33\\xc2\\x1d\\xd1\\xf7\\x7c\\x15\\xfb\\x15\\x07\\x65\\x8a\\x74\\x78\\x6c\\x1a\\x69\\xa3\\x79\\xb9\\x1e\"\n\"\\xf7\\x61\\xe0\\x1d\\x98\\x82\\x1e\\x95\\x84\\x92\\x89\\xa1\\x8a\\x08\\xfb\\x12\\x88\\x07\\x70\\x20\\x1d\\x68\\xa3\\x7a\\xb9\\x1e\\xf7\\x04\\x16\\xd1\\x31\\x1d\"\n\"\\x45\\xf7\\x12\\xf5\\x06\\xe7\\x8f\\xcf\\x46\\x8d\\x28\\x08\\x5f\\x07\\x2b\\x4d\\x51\\x28\\x8f\\x1e\\x20\\x06\\x0e\\xf8\\x53\\xf7\\xcf\\x15\\xf7\\x1c\\x1d\\x05\"\n\"\\x73\\x74\\x86\\x88\\x75\\x1b\\x81\\xb6\\x06\\xc1\\x8d\\xa0\\x99\\xaf\\x28\\x1d\\x36\\x06\\x4b\\x74\\x7d\\x66\\x66\\xa0\\x7c\\xc2\\x8a\\x1f\\xfb\\x6d\\x07\\x54\"\n\"\\x8a\\x76\\x7c\\x67\\x1a\\x65\\xa2\\x7d\\xcb\\x1e\\xe0\\x06\\xcb\\xa2\\x99\\xb0\\xae\\x73\\x9d\\x5c\\x1f\\x89\\x06\\x89\\xd1\\xa3\\x06\\xa5\\x8c\\xa8\\x77\\xab\"\n\"\\x62\\xbd\\x48\\x18\\xad\\x5f\\x8f\\x89\\xb1\\x8a\\x08\\xb7\\x06\\xb5\\xa0\\x9d\\xae\\xb1\\x75\\x97\\x47\\x8c\\x1f\\x58\\xcf\\x76\\xa8\\x75\\xa0\\x74\\x9a\\x19\"\n\"\\xcd\\xcd\\x05\\x0b\\xf7\\x6e\\xf7\\xd6\\x15\\xf7\\x45\\xf7\\x32\\x1d\\xfb\\x45\\xdb\\x06\\xc0\\x1d\\x0b\\xf8\\x2a\\xf8\\x1f\\x15\\xa6\\x68\\x58\\x9b\\xe1\\x1d\"\n\"\\x7a\\x1a\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x83\\x95\\x98\\x89\\xa4\\x1b\\xf7\\x04\\x06\\xf7\\x04\\xdf\\xda\\xf1\\x8a\\x1f\\xf7\\xe5\\x97\\x07\\xa3\\x96\\x38\\x1d\"\n\"\\xfb\\x0c\\x06\\xfb\\x1b\\x31\\x15\\xd6\\xc7\\x55\\x48\\x45\\x50\\x55\\x3f\\x41\\x4f\\xc2\\xcf\\xcf\\xc7\\xc1\\xd5\\x1f\\x0b\\x1f\\x78\\x85\\x7d\\x76\\x75\\x1a\"\n\"\\x76\\x95\\x7c\\x9c\\x83\\x1e\\xfb\\x3a\\xfb\\x1c\\x05\\xf7\\x16\\xaa\\x07\\xa3\\x96\\x8c\\x91\\x94\\x1f\\xa4\\x1d\\x81\\x8d\\x70\\x1b\\xfb\\x2a\\x87\\x1d\\x96\"\n\"\\xfb\\xfa\\x80\\x06\\x72\\x82\\x8a\\x9d\\x1d\\x9a\\x88\\xa2\\x1b\\xf7\\x2a\\x63\\x1d\\x0b\\xf7\\x98\\xf8\\x61\\x15\\xf7\\x63\\x37\\x06\\x72\\x8d\\x82\\x91\\x82\"\n\"\\x1e\\x7b\\x95\\x9c\\x82\\x9e\\x1b\\x9d\\x9a\\x92\\x99\\x96\\x72\\x1d\\xf7\\x4f\\xfc\\x70\\x07\\x5d\\x73\\x79\\x69\\x7b\\x93\\x7c\\x99\\x81\\x1f\\x83\\x97\\x93\"\n\"\\x89\\xa7\\x1b\\xc0\\xfb\\xfa\\x56\\x06\\x74\\x7f\\x89\\x86\\x82\\x1f\\x7b\\x81\\x81\\x7a\\x79\\x1a\\x7b\\x93\\x7c\\x99\\x80\\x1e\\x84\\x96\\x93\\x89\\xa8\\x1b\"\n\"\\xf7\\x6a\\x06\\xa4\\x95\\x8d\\x90\\x94\\x99\\x1d\\x56\\x06\\x0e\\x15\\x78\\x7e\\x7d\\x78\\x79\\x97\\x80\\x9e\\x89\\x1f\\xa3\\x8a\\x92\\x8a\\x95\\x86\\x08\\xa3\"\n\"\\x80\\x9b\\x76\\x77\\x1a\\x6a\\x70\\x7a\\x55\\x68\\x7d\\x8e\\x94\\x7d\\x1e\\x92\\x83\\x87\\x8c\\x84\\x1b\\x7b\\x7e\\x7d\\x78\\x6c\\xb9\\x76\\xd1\\xb9\\xaa\\x93\"\n\"\\x9e\\xa3\\x1f\\xa5\\x9f\\x9b\\xad\\xac\\x1a\\xaf\\x77\\xac\\x68\\x9f\\x1e\\xa9\\xa1\\x99\\xa3\\xab\\x1a\\xc8\\x5a\\xb7\\x48\\x4e\\x54\\x6b\\x67\\x79\\x98\\x7c\"\n\"\\x9b\\x93\\x93\\x8e\\x92\\x90\\x1e\\x9f\\x9c\\x99\\x91\\xa7\\x1b\\xad\\xa1\\x7b\\x73\\x74\\x75\\x77\\x72\\x1f\\x0b\\x84\\x1d\\xfb\\x5e\\x06\\x38\\xd3\\x57\\xf7\"\n\"\\x09\\xc1\\xd9\\x9b\\xa1\\xbc\\x1e\\xb3\\x9d\\x98\\x98\\xa4\\x1a\\xa8\\x74\\xa2\\x6e\\x7f\\x85\\x89\\x82\\x78\\x1e\\x76\\x5f\\x5b\\x80\\x57\\x1b\\x66\\x70\\x91\"\n\"\\x97\\x80\\x1f\\x86\\x90\\x89\\x94\\x9e\\x1a\\x0b\\xd1\\xf2\\x15\\x65\\x8a\\x74\\x78\\x6c\\x1a\\x7a\\x94\\x7b\\x98\\x82\\x1e\\x84\\x95\\x9a\\x88\\xa3\\x1b\\xf7\"\n\"\\x60\\xe0\\x1d\\x99\\x82\\x1e\\x94\\x84\\x92\\x89\\xa1\\x8a\\x08\\xf7\\x00\\xfb\\xfa\\x15\\xf7\\xfa\\xf5\\x07\\xe7\\x8f\\xcf\\x46\\x8d\\x28\\x08\\x5e\\x07\\x2c\"\n\"\\x4d\\x51\\x28\\x8f\\x1e\\x0b\\x7f\\x06\\x72\\x81\\x89\\x86\\x82\\x1f\\x7b\\x82\\x81\\x79\\x7a\\x1a\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x83\\x95\\x97\\x89\\xa5\\x1b\"\n\"\\xf7\\x42\\x06\\xa2\\x98\\x8d\\x90\\x3a\\x1d\\x92\\x2f\\x1d\\x55\\x06\\xf7\\x25\\xf8\\x3f\\x15\\xdf\\xc7\\x5d\\x4a\\x6c\\x79\\x6a\\x6f\\x77\\x1f\\x79\\x72\\x6a\"\n\"\\x82\\x63\\x1b\\x62\\x6a\\x94\\x9d\\x72\\x1f\\x70\\x9f\\x78\\xac\\xa9\\x1a\\xcd\\xc6\\xb9\\xe1\\x1e\\x0e\\x08\\xd2\\xb0\\xad\\xba\\xc8\\x1a\\xf1\\x30\\xd2\\xfb\"\n\"\\x19\\x1e\\xfb\\x73\\x06\\xf7\\x0b\\x1d\\xfb\\xf9\\x80\\x06\\x72\\x82\\xf7\\x3f\\x1d\\xf7\\x2a\\x06\\xa0\\x9a\\x8e\\x8f\\x3a\\x1d\\x93\\x80\\x82\\x8d\\x6f\\x1b\"\n\"\\x6c\\x0b\\xf7\\xf6\\xf7\\xd6\\x15\\xe0\\x06\\xa3\\x97\\x8d\\x90\\x94\\x77\\x1d\\x7c\\x96\\x1e\\x92\\x81\\x81\\x8d\\x6f\\x1b\\x36\\xf7\\x01\\x06\\xa5\\x8a\\x92\"\n\"\\x84\\x95\\x1e\\x9a\\x82\\x79\\x97\\x1d\\x81\\x71\\x1a\\xfb\\x01\\x35\\x07\\x72\\x81\\x89\\x86\\x82\\x1f\\x7b\\x82\\x81\\x79\\x7a\\x1a\\x7a\\x93\\x7c\\x99\\x81\"\n\"\\x1e\\x83\\x96\\x96\\x89\\xa5\\x1b\\xe1\\x0b\\xf8\\xa7\\x15\\x7d\\x7e\\x81\\x77\\x7b\\x1f\\x6f\\x77\\x87\\x88\\x7e\\xab\\x1d\\x74\\x1b\\x6c\\x6e\\x7c\\x6d\\x71\"\n\"\\x1f\\x79\\x76\\x81\\x78\\x7d\\x1a\\x78\\x9a\\x7d\\x9f\\x96\\x94\\x90\\x96\\x94\\x1e\\xaf\\xa7\\x93\\x91\\x9b\\x1b\\x99\\x92\\x88\\x7a\\xa6\\x1f\\x70\\xb8\\xac\"\n\"\\xa8\\x1d\\x9a\\x9a\\x1a\\x9b\\x7a\\x9a\\x78\\x1e\\x0e\\x15\\x7d\\x7e\\x81\\x77\\x7b\\x1f\\x70\\x77\\xf7\\x5b\\x1d\\x59\\x79\\x92\\x72\\x1b\\x6d\\x6e\\x7c\\x6e\"\n\"\\x71\\x1f\\x79\\x75\\x81\\x79\\x7d\\x1a\\x78\\x9a\\x7d\\x9e\\x97\\x94\\x8f\\x97\\x94\\x1e\\xaf\\xa8\\x92\\x90\\x9b\\xf5\\x1d\\xf8\\x3d\\x15\\x29\\x06\\xcc\\x1d\"\n\"\\xf7\\x3c\\x06\\x0b\\xf8\\x14\\xf7\\xd6\\x15\\xfb\\xe5\\x07\\x5c\\x67\\x6c\\x55\\x1e\\xfb\\x03\\x06\\x71\\x83\\x8a\\x85\\x81\\x1f\\x7b\\x82\\x81\\x79\\x7a\\x1a\"\n\"\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x83\\x95\\x98\\x89\\xa4\\x1b\\xf7\\x06\\x06\\xf7\\x03\\xe0\\xda\\xf1\\x8a\\x1f\\xf8\\x4c\\xfb\\xc6\\x07\\x4c\\x1d\\x96\\x97\\x88\"\n\"\\xa4\\x1b\\x0b\\x5d\\x1d\\x5d\\x1b\\x37\\x5a\\x5e\\x1d\\x0b\\x15\\x9a\\x9a\\x90\\x1d\\x23\\x05\\x76\\x75\\x89\\x88\\x4e\\x1d\\xf7\\x9e\\xf4\\x15\\xa0\\xa2\\x8b\"\n\"\\x8b\\x99\\x1a\\x9f\\x79\\x9d\\x77\\x7f\\x82\\x87\\x7f\\x80\\x1e\\x25\\x23\\x05\\x77\\x75\\x89\\x88\\x4e\\x1d\\x0e\\xf7\\x45\\x07\\xa1\\x1d\\xfb\\x45\\xdb\\x06\"\n\"\\x84\\x1d\\x0b\\x2e\\x1d\\x7b\\x93\\x7b\\x99\\x81\\x1e\\x95\\x85\\x92\\x89\\xa1\\x8a\\x08\\xfb\\x6f\\x93\\x1d\\xf7\\x04\\x2b\\x1d\\x9b\\x83\\x9a\\x7d\\x96\\x1f\"\n\"\\x92\\x80\\x82\\x8d\\x6f\\x1b\\x89\\x0b\\x86\\x1d\\xf7\\xec\\x06\\xb9\\xa3\\x9c\\xae\\x91\\x1d\\x0b\\xb2\\x8c\\xa1\\x9d\\xab\\x22\\x1d\\xfb\\x16\\x87\\x1d\\xaa\"\n\"\\xfb\\x9a\\x06\\xfb\\x90\\xf8\\x01\\x05\\xfb\\x09\\x06\\x3d\\x1d\\x79\\x1a\\x7b\\x0b\\x06\\x73\\x6b\\x76\\x61\\x7c\\x1a\\x83\\x92\\x84\\x94\\x92\\x8f\\x8d\\x92\"\n\"\\x91\\x1e\\xad\\xb2\\xa3\\x9f\\xbc\\xa8\\x99\\x94\\x18\\x91\\x8e\\x8f\\x8d\\x8c\\x8c\\x08\\x99\\x93\\x8e\\x8e\\x93\\x1a\\x92\\x87\\x8f\\x78\\x95\\x1e\\x4f\\xad\"\n\"\\x6e\\xa2\\x6c\\xae\\x08\\x98\\x80\\x87\\x8e\\x84\\x1b\\x82\\x83\\x85\\x83\\x7c\\x9b\\x6b\\xa8\\x5f\\x1f\\x0b\\x06\\x5d\\x73\\x79\\x69\\x69\\xa3\\x7a\\xb9\\x1f\"\n\"\\x90\\x55\\xfb\\x5c\\xc1\\x90\\x06\\xb9\\xa3\\x9c\\xad\\xad\\x73\\x9d\\x5d\\x1f\\x2c\\x06\\x5d\\x73\\x79\\x69\\x6d\\x9c\\x7a\\xae\\x87\\x1f\\xfb\\x6e\\x07\\x58\"\n\"\\x8a\\x76\\x7b\\x69\\x1a\\x68\\xa3\\x79\\xb9\\x1e\\xf7\\x07\\x27\\x1d\\x86\\xc7\\x0b\\xe5\\xf2\\x15\\x80\\x06\\x72\\x82\\x89\\x86\\x61\\x1d\\xf7\\xbb\\x06\\xf7\"\n\"\\x0d\\xdb\\xc9\\xea\\xc6\\x69\\xba\\x47\\xab\\x1f\\xb4\\xaa\\x9d\\xac\\xb7\\x1a\\xe8\\x36\\xcf\\xfb\\x07\\x1e\\xfb\\x91\\x06\\x72\\x81\\x89\\x86\\x82\\x1f\\x7b\"\n\"\\x0b\\x15\\x8c\\x98\\x8c\\x97\\x93\\x1a\\xb9\\x64\\xaf\\x5a\\x59\\x64\\x67\\x5d\\x84\\x8c\\x7e\\x8c\\x7e\\x1e\\xa8\\xfb\\xac\\x05\\x6a\\x8e\\xa1\\x77\\xac\\x1b\"\n\"\\xab\\xa1\\x9f\\xac\\x8e\\x1f\\x5a\\xfb\\x80\\x15\\xb5\\xac\\xaa\\xb2\\xb2\\x6a\\xaa\\x61\\x1f\\x7a\\x06\\x62\\x6a\\x6c\\x64\\x64\\xac\\x6c\\xb4\\x1f\\x0b\\xf7\"\n\"\\x63\\x1d\\x88\\x8f\\x84\\x91\\x1f\\x63\\xac\\x78\\xa1\\x6d\\xbc\\x88\\x8f\\x88\\x90\\x88\\x90\\x08\\x88\\x90\\x87\\x91\\x8b\\x1a\\x98\\x84\\x88\\x8e\\x82\\x1b\"\n\"\\x84\\x87\\x87\\x79\\x81\\x1f\\x6a\\x52\\x72\\x6b\\x67\\x6f\\x08\\x7e\\x80\\x88\\x86\\x85\\x1a\\x81\\x92\\x84\\x93\\x99\\x0b\\xf7\\xf6\\xf8\\x60\\x15\\xe9\\x67\"\n\"\\x1d\\xfb\\xbc\\x68\\x1d\\xe9\\xfb\\xf8\\x2d\\x68\\x1d\\xf7\\xbc\\x67\\x1d\\x2d\\x06\\xfb\\x31\\x0b\\xa5\\x77\\x5e\\x1f\\xfb\\x3a\\x07\\x65\\x74\\x78\\x6b\\x68\"\n\"\\xa3\\x7a\\xba\\x1f\\xe4\\x06\\xb9\\xa3\\x9c\\xae\\x9b\\x83\\x9b\\x7d\\x95\\x1f\\x81\\x91\\x84\\x8d\\x75\\x8c\\x08\\xf7\\x3e\\xf7\\x5a\\x1d\\x5c\\x1b\\x56\\x6a\"\n\"\\x7e\\x63\\x5d\\x1f\\x0b\\x07\\x8c\\x98\\x94\\x8c\\x8f\\x76\\x1d\\x75\\x91\\x94\\x7a\\x1f\\x96\\x77\\x89\\x8c\\x55\\x1d\\x7a\\x94\\x7e\\xa0\\x80\\x1f\\x7e\\xa5\"\n\"\\xb2\\x81\\xa7\\x1b\\xcd\\xb9\\xb3\\xc3\\xbe\\x72\\xa8\\x59\\x96\\x1f\\x0e\\x8c\\x98\\x94\\x8c\\x8f\\x76\\x1d\\x75\\x91\\x94\\x7a\\x1f\\x96\\x77\\x89\\x8c\\x55\"\n\"\\x1d\\x7a\\x94\\x7e\\xa0\\x80\\x1f\\x7e\\xa5\\xb3\\x81\\xa7\\x1b\\xcc\\xb9\\xb3\\xc3\\xbd\\x72\\xa9\\x59\\x96\\x1f\\x0b\\x94\\x1e\\x92\\x6b\\x8b\\x8b\\x93\\x83\"\n\"\\x08\\x82\\x94\\x9a\\x85\\x9a\\x1b\\x9c\\x9a\\x93\\x98\\x96\\x1f\\x93\\x96\\x8d\\x93\\xa6\\x1a\\x0b\\xf7\\x21\\x1d\\xfb\\x17\\xf7\\x02\\x2e\\xf7\\x32\\xd3\\xf2\"\n\"\\x9c\\x9f\\xb8\\x1e\\xa4\\x95\\x97\\x9a\\xa0\\x1a\\xa8\\x75\\xa2\\x6e\\x80\\x80\\x89\\x88\\x7e\\x1e\\x0b\\xfc\\x6f\\x07\\x71\\x83\\xf7\\x19\\x1d\\x96\\xfb\\xfa\"\n\"\\x80\\x6d\\x1d\\x7a\\x7a\\x1a\\x69\\xa3\\x79\\xb9\\x1e\\x0b\\x71\\x83\\x50\\x1d\\x99\\x81\\x1e\\x84\\x96\\x95\\x88\\xa6\\x1b\\x97\\x0b\\x15\\xfb\\x28\\xfb\\x17\"\n\"\\x05\\x7f\\x81\\x86\\x82\\x82\\x1a\\x78\\x9b\\x7d\\x9f\\x97\\x8e\\x8c\\x98\\x9b\\x1e\\xf7\\x90\\xf7\\x46\\xfb\\x90\\xf7\\x47\\x05\\x98\\x7a\\x89\\x8c\\x7f\\x1b\"\n\"\\x77\\x7b\\x7d\\x78\\x81\\x90\\x84\\x97\\x80\\x1f\\x0b\\xf8\\xc5\\xdf\\x1d\\x72\\x82\\x8a\\x85\\x81\\x1f\\x7b\\x82\\x81\\x79\\x7a\\x1a\\x7a\\x93\\x7b\\x99\\x82\"\n\"\\x1e\\x84\\x95\\x99\\x88\\xa3\\x1b\\xf7\\x0d\\x06\\xb9\\xa3\\x65\\x1d\\x89\\x0b\\x15\\x73\\x7c\\x7b\\x73\\x3f\\xdf\\x47\\xea\\xea\\xdf\\x6f\\x1d\\x82\\x6a\\xf7\"\n\"\\x1d\\x1d\\x06\\xf7\\x32\\x87\\xf7\\x03\\xf1\\x8c\\xf7\\x2c\\x08\\xb7\\x07\\xf7\\x2d\\xfb\\x07\\xf7\\x0b\\xfb\\x27\\x89\\x1e\\xfb\\x68\\x06\\x70\\x20\\x1d\\x7a\"\n\"\\x94\\x7b\\x0b\\x58\\x1b\\xfb\\x1d\\x24\\x2a\\xfb\\x15\\xfb\\x14\\xf3\\x29\\xf7\\x1c\\xbd\\xb8\\x99\\xa9\\xb5\\x1f\\x5e\\x07\\x5c\\x67\\x6c\\x55\\x1e\\xfb\\x01\"\n\"\\x06\\x71\\x83\\x8a\\x85\\x81\\x1f\\x7b\\x82\\x81\\x79\\x0b\\xf7\\x12\\x1d\\x82\\x87\\x80\\x84\\x9b\\x1d\\x0e\\x15\\x9d\\xf7\\x57\\x1d\\x7e\\x7b\\x1e\\xfb\\x19\"\n\"\\x21\\x05\\x7b\\x7e\\x83\\x7f\\x7e\\x1a\\x77\\x9e\\x79\\xa1\\x95\\x94\\x8f\\x97\\x9a\\x1e\\x0e\\x95\\x1d\\x6a\\x6d\\x70\\x67\\x67\\x6d\\xa6\\xac\\xab\\xa9\\xa6\"\n\"\\xaf\\x1f\\x0e\\xf7\\x1f\\x1d\\x7f\\x9b\\x93\\x87\\x95\\x1b\\xa2\\x9e\\x9d\\xa0\\x99\\x85\\x94\\x78\\x9a\\x1f\\x0e\\xf7\\x6f\\xf7\\x0d\\x15\\x34\\xb9\\x5a\\xde\"\n\"\\xbf\\xad\\xa2\\xaf\\xa7\\x73\\xa3\\x6f\\x84\\x82\\x89\\x89\\x83\\x1e\\x89\\x85\\x85\\xf7\\x53\\x1d\\x0b\\xa1\\x9b\\x9d\\x9e\\x95\\x97\\x88\\x86\\x9b\\x1e\\x86\"\n\"\\x9c\\x8f\\x8a\\x95\\x1b\\xa9\\xa2\\xa2\\xa8\\x9d\\x83\\x99\\x7c\\x95\\x1f\\x98\\x76\\x5f\\x95\\x66\\x1b\\x3d\\x4d\\x4c\\x3b\\x1f\\x69\\x0b\\xf7\\x53\\x1d\\x56\"\n\"\\x1d\\x5e\\x1e\\x0b\\xaf\\x1d\\x81\\x81\\x7a\\x7a\\x1a\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x84\\x95\\x0b\\x95\\x1d\\x69\\x6d\\x70\\x67\\x67\\x6d\\xa7\\xab\\xac\\xa9\"\n\"\\xa6\\xaf\\x1f\\x0b\\x70\\x20\\x1d\\x69\\xa3\\x79\\xba\\x1e\\xf7\\x7a\\x06\\xba\\xa3\\xaa\\x1d\\x6f\\x1b\\x4e\\x0b\\x6a\\x1d\\xf8\\xb4\\x06\\xa2\\x98\\x8d\\x91\"\n\"\\x95\\x1f\\x9c\\x95\\x96\\x9d\\x9e\\x1a\\x9d\\x82\\x9c\\x7c\\x95\\x1e\\x93\\x7f\\x82\\x8d\\x6e\\x1b\\x0b\\xaa\\x9b\\x98\\xa4\\xa4\\x7b\\x98\\x6c\\x1f\\xfb\\x01\"\n\"\\x06\\xbc\\x89\\x7c\\x9f\\x66\\x1b\\x66\\x7b\\x77\\x5a\\x8a\\x1f\\x5f\\x06\\x6c\\x7b\\x7e\\x72\\x72\\x9b\\x7e\\xaa\\x1f\\xb7\\x0b\\x81\\x7d\\x90\\x7c\\xf7\\x50\"\n\"\\x1d\\x4c\\x07\\x5e\\x9d\\x75\\xaf\\x9c\\x94\\x90\\x9c\\x9b\\x1e\\x72\\xbe\\xbd\\x80\\xc1\\x1b\\x0b\\x9d\\x2d\\x1d\\x94\\xa6\\x1a\\xf6\\x07\\xa4\\x8a\\x93\\x84\"\n\"\\x95\\xf7\\x60\\x1d\\x81\\x1f\\x83\\x0b\\x70\\x1b\\x6e\\x06\\x5e\\xf6\\x4e\\xda\\x50\\xa9\\xf7\\x3e\\xf7\\x22\\x18\\xb5\\xa2\\x9d\\xac\\x9c\\x83\\x9a\\x7d\\x95\"\n\"\\x1f\\x93\\x2f\\x1d\\x27\\x06\\x76\\x0b\\xf8\\x82\\xf8\\x61\\x15\\xc0\\x69\\x1d\\xfb\\xa8\\x06\\x0b\\x15\\xf7\\x01\\x30\\x05\\x82\\x97\\x93\\x87\\x96\\x1b\\x9f\"\n\"\\x9d\\x9c\\xa0\\x9a\\x88\\x8f\\x75\\x9c\\x1f\\xfb\\x2d\\xf7\\x11\\xfb\\x2f\\xfb\\x11\\x05\\x73\\x79\\x89\\x0b\\x1a\\xa1\\x79\\x9c\\x74\\x7f\\x85\\x51\\x1d\\xa5\"\n\"\\x1d\\x9b\\x1e\\x0e\\xf7\\x01\\x1d\\x0e\\xf7\\x24\\x1d\\xa5\\x93\\x9a\\x9a\\x1a\\x9b\\x7a\\x9a\\x78\\x1e\\x0e\\x87\\x1e\\xf7\\x10\\x26\\xfb\\x21\\xfb\\x0a\\x05\"\n\"\\x67\\x88\\x77\\x79\\x6d\\x1a\\x69\\xa3\\x79\\xb9\\x1e\\xf7\\x03\\x06\\xba\\xa2\\x9c\\xaf\\xa2\\x82\\x97\\x0b\\xab\\xa4\\xa3\\xa9\\xaa\\x72\\xa3\\x6b\\x1f\\xf7\"\n\"\\x61\\x4a\\x1d\\xf7\\x6c\\xf7\\x1c\\xf7\\x5d\\x1d\\x79\\xf7\\x61\\x1d\\xf7\\x9a\\x05\\x0b\\x1e\\x29\\x06\\x4c\\x74\\x7e\\x65\\x66\\xa4\\x7a\\xc3\\x8c\\x1f\\xfb\"\n\"\\xf8\\x07\\x4f\\x8a\\x76\\x7d\\x65\\x1a\\x66\\xa2\\x7d\\xca\\x1e\\xed\\x06\\x0b\\x15\\x99\\x97\\x92\\x96\\x97\\x1a\\x9d\\x7a\\x9b\\x78\\x82\\x81\\x53\\x1d\\x7d\"\n\"\\x80\\x84\\x80\\x7e\\x1a\\x79\\x0b\\xf7\\x4f\\x06\\xa4\\x89\\x94\\x85\\x94\\x1e\\x9b\\x81\\x7a\\x94\\x78\\x1b\\x79\\x54\\x1d\\x82\\x70\\x1a\\x37\\x0b\\xcb\\x07\"\n\"\\xc6\\x8d\\x9e\\x97\\xb0\\x28\\x1d\\x3a\\x06\\x4d\\x73\\x7d\\x67\\x68\\xa1\\x7a\\xb9\\x8a\\x1f\\x4b\\x07\\x0b\\xf7\\xc4\\x15\\xe4\\xf7\\x58\\x05\\x97\\xa6\\x8e\"\n\"\\x94\\xf7\\x3b\\x1d\\x0b\\xa3\\x89\\x95\\xf7\\x0c\\x1d\\x0b\\x06\\x70\\x84\\x8a\\x85\\x81\\x3c\\x1d\\x84\\x96\\x96\\x89\\xa5\\x1b\\x0b\\x06\\xa4\\x8a\\x93\\x84\"\n\"\\x4d\\x1d\\x80\\x72\\x1a\\x0b\\x46\\xfb\\x5c\\x05\\x88\\x85\\x8a\\x83\\x85\\x1a\\x7b\\x9b\\x7d\\x9e\\x99\\x94\\x91\\x9d\\x97\\x1e\\xf7\\x25\\xf7\\x76\\x05\\x0b\"\n\"\\xf7\\x0e\\x1d\\x96\\x0b\\x85\\x94\\x1e\\x9b\\x81\\x7a\\x94\\x78\\x1b\\x7a\\x7b\\x83\\x7e\\x80\\x1f\\x83\\x80\\x89\\x82\\x70\\x1a\\x5d\\xfb\\x8c\\x0b\\xf7\\xc0\"\n\"\\xf7\\x95\\x15\\xe6\\xfb\\x95\\x05\\xf7\\x08\\x06\\xc7\\xf8\\x62\\x05\\xa9\\x90\\x9c\\x9e\\xa6\\x1a\\x9b\\x83\\x0b\\x70\\x84\\xf7\\x19\\x1d\\x0b\\x72\\x81\\xf7\"\n\"\\x17\\x1d\\x0b\\x77\\x1a\\x6d\\xa6\\x71\\xab\\xa0\\x95\\x91\\xac\\xa6\\x1e\\xa8\\xa4\\x94\\x93\\x92\\x1b\\x90\\x99\\x82\\x7c\\x9d\\x1f\\x0b\\x06\\x77\\x84\\x8a\"\n\"\\x88\\x82\\x1f\\x77\\x85\\x7d\\x76\\x76\\x1a\\x0b\\x15\\x8e\\x91\\x8f\\x9b\\x90\\x1a\\x9b\\x7b\\x9a\\x7b\\x7d\\x81\\x84\\x79\\x82\\x1e\\xfb\\x7d\\xfc\\x47\\x05\"\n\"\\x87\\x0b\\x15\\xf7\\x25\\x1d\\x5e\\x96\\x0b\\xf7\\x30\\x1d\\x66\\x77\\x59\\x68\\x1f\\x0b\\xfb\\x2f\\xfb\\x11\\x05\\x73\\x78\\x89\\x88\\x7d\\x1a\\x76\\x9d\\x7a\"\n\"\\xa0\\x95\\x94\\x8f\\x94\\x97\\x1e\\x0e\\xf7\\x48\\x1d\\x9b\\x93\\x99\\x96\\x1f\\x93\\x95\\x8d\\x0b\\x89\\x86\\x82\\x3c\\x1d\\x84\\x96\\x95\\x89\\xa6\\x1b\\x0b\"\n\"\\x8a\\x84\\x80\\x1f\\x7a\\x82\\x80\\x78\\x78\\x1a\\x79\\x94\\x7b\\x6a\\x1d\\x0b\\x34\\x1d\\x7a\\x7a\\x1a\\x7a\\x94\\x7b\\x98\\x82\\x1e\\x83\\x96\\x96\\x89\\xa5\"\n\"\\x1b\\x0b\\xf7\\x20\\x1d\\x7d\\x0b\\x1f\\xfb\\xc1\\xed\\x07\\xb9\\xa3\\x9c\\xae\\x9b\\x83\\x9b\\x7d\\x95\\x1f\\x81\\x91\\x84\\x8d\\x76\\x8c\\x08\\x0b\\x6d\\x92\"\n\"\\x9c\\x7d\\xa9\\x1b\\xb1\\x9a\\xa2\\xc6\\xbf\\x77\\x9f\\x57\\x57\\x5f\\x7a\\x6a\\x6d\\x1f\\x4a\\x45\\x0b\\x84\\x1f\\x61\\x82\\x62\\x70\\x56\\x1b\\x56\\x62\\xa6\"\n\"\\xb5\\x82\\x1f\\xab\\x84\\x82\\x95\\x76\\x1b\\x0e\\x83\\x1b\\x85\\x7f\\x92\\x98\\x7c\\x1f\\xc9\\x44\\x70\\x99\\x5e\\x1b\\x5f\\x69\\x79\\x5f\\x63\\x1f\\x6d\\x0b\"\n\"\\x15\\x98\\x7b\\x85\\x8e\\x7f\\x40\\x1d\\x92\\x80\\x9c\\x7e\\x1f\\xf7\\x1a\\x20\\x05\\x0b\\x15\\x9a\\x97\\x92\\x96\\x97\\x1a\\x9d\\x7a\\x9b\\x78\\x82\\x80\\x53\"\n\"\\x1d\\x0b\\xf8\\xbe\\xf7\\x38\\x15\\xb4\\x07\\xf7\\x1a\\xfb\\x03\\xed\\xfb\\x2c\\xfb\\x29\\xfb\\x05\\x28\\xfb\\x15\\x0b\\x06\\x72\\x81\\x89\\x86\\x82\\x3c\\x1d\"\n\"\\x83\\x0b\\x15\\xf7\\x1d\\x06\\xa2\\x98\\x32\\x1d\\x9c\\x9d\\x1a\\x9b\\x83\\x9b\\x7d\\x0b\\x1b\\x99\\x92\\x88\\x7b\\xa6\\x1f\\x6f\\xb9\\xab\\x7e\\xa2\\x1b\\xaa\"\n\"\\xa3\\x99\\xac\\xa7\\x1f\\xa1\\x0b\\xa5\\x8a\\x92\\x85\\x95\\x1e\\x9a\\x82\\x79\\x94\\x78\\x1b\\x77\\x80\\x83\\x75\\x81\\x1f\\x9e\\x6a\\x0b\\xf7\\x5a\\xf7\\x5c\"\n\"\\x15\\xc3\\xb9\\xc5\\x7b\\xcf\\x28\\xb6\\xfb\\x17\\x19\\xf7\\x05\\x06\\xb9\\xa3\\x0b\\x1e\\x87\\x7b\\x8a\\x85\\x7d\\x1a\\xf7\\x00\\xfb\\xf8\\x15\\xf7\\x6f\\xcc\"\n\"\\xfb\\x6f\\x07\\x0e\\xf8\\x60\\x15\\xfb\\xf8\\x81\\x07\\x5c\\x73\\x79\\x69\\x69\\xa3\\x79\\xba\\x1f\\xf7\\x0c\\x06\\x0b\\xf7\\x82\\x91\\x15\\x56\\x28\\x05\\x29\"\n\"\\x06\\x72\\x82\\x89\\x86\\x81\\x1f\\x7b\\x82\\x81\\x79\\x0b\\x76\\x7d\\x6c\\x6a\\x1a\\x4a\\xbb\\x5f\\xd3\\xd3\\xbb\\xb6\\xcd\\xac\\x7d\\xaa\\x71\\xa0\\x1e\\x0b\"\n\"\\x34\\x1d\\x7a\\x7a\\x1a\\x7a\\x0b\\x06\\x71\\x83\\x8a\\x85\\x81\\x1f\\x7b\\x82\\x81\\x79\\x7a\\x1a\\x69\\xa3\\x79\\xb9\\x1e\\x0b\\xfb\\x2e\\xf7\\x11\\xfb\\x2f\"\n\"\\xfb\\x11\\x05\\x74\\x79\\x89\\x87\\x7d\\x1a\\x76\\x9d\\x7a\\x0b\\x15\\xa3\\x9e\\x78\\x74\\x73\\x78\\x78\\x74\\x73\\x78\\x9e\\xa3\\xa1\\x9e\\x9f\\xa2\\x1f\\x0b\"\n\"\\x1a\\x6d\\xa1\\x76\\xa9\\x1e\\xac\\x06\\xb2\\x8c\\x96\\x94\\x9f\\xbd\\xb4\\xf5\\x18\\x99\\x0b\\xa1\\xc6\\x1f\\x94\\x07\\xf7\\x51\\x1d\\x0b\\x74\\x8d\\x80\\x91\"\n\"\\x81\\x1e\\x7b\\x96\\x9e\\x81\\x9f\\x1b\\x9e\\x9c\\x93\\x9a\\x96\\x1f\\x0b\\x06\\xa1\\x1d\\x0b\\x06\\xba\\xa2\\x9c\\xae\\x9b\\x83\\x9b\\x7d\\x95\\x1f\\x92\\x80\"\n\"\\x82\\x8d\\x6f\\x1b\\x0b\\x15\\xfb\\x3f\\xfb\\x1f\\xfb\\x19\\xfb\\x37\\xfb\\x36\\xf7\\x1f\\xfb\\x1b\\xf7\\x3c\\x0b\\xa4\\x7e\\x1e\\x35\\x2b\\x33\\xeb\\x05\\xa4\"\n\"\\x98\\x95\\x98\\xa2\\x1a\\x9b\\x83\\x9a\\x0b\\x72\\x1f\\x8d\\xe7\\x15\\xb9\\x9b\\xc5\\xab\\xcf\\x1b\\xcf\\xc4\\x6b\\x5d\\x9c\\x1f\\x0b\\x79\\x5d\\x1b\\x5e\\x68\"\n\"\\x9e\\xa7\\x83\\x1f\\xa5\\x84\\x82\\x94\\x77\\x1b\\x0e\\x8a\\x84\\x80\\x1f\\x7a\\x81\\x80\\x79\\x78\\x1a\\x7a\\x94\\x7a\\x9a\\x80\\x1e\\x0b\\x8c\\x77\\x95\\x08\"\n\"\\x77\\x94\\x7d\\xa0\\x9e\\x1a\\xb1\\xbb\\xa9\\xc8\\xc8\\xb8\\x0b\\x8d\\x90\\x93\\x1f\\x9b\\x94\\x95\\x9d\\x9d\\x1a\\x9b\\x83\\x9b\\x7d\\x95\\x1e\\x0b\\x98\\x1a\"\n\"\\xa2\\x7a\\x9a\\x6f\\x61\\x80\\x7e\\x48\\x7f\\x1e\\x67\\xfb\\x5f\\x05\\x0b\\x1e\\xfb\\x7d\\xfc\\x47\\x05\\x87\\x82\\x87\\x80\\x84\\x1a\\x7b\\x9b\\x7c\\x9c\\x0b\"\n\"\\xf7\\x46\\xc6\\x15\\x68\\xbb\\xb9\\x7c\\xc5\\x1b\\xf7\\x21\\xf3\\xe3\\xf7\\x0c\\x0b\\x7e\\x81\\x87\\x83\\x81\\x1e\\x6a\\x63\\x6b\\x82\\x3b\\x1b\\xfb\\x07\\x52\"\n\"\\x0b\\x89\\x85\\x81\\x1f\\x7b\\x82\\x81\\x7a\\x79\\x1a\\x69\\xa3\\x79\\xb9\\x1e\\x0b\\x15\\xf7\\x28\\xf7\\x17\\x05\\x97\\x96\\x90\\x92\\x95\\x1a\\x9e\\x7b\\x99\"\n\"\\x0b\\x15\\xf7\\x02\\x31\\x05\\x82\\x96\\x94\\x87\\x96\\x1b\\x9f\\x9d\\x9c\\xa0\\x0b\\x15\\xfb\\x03\\xe5\\x05\\x96\\x7e\\x83\\x8e\\x81\\x1b\\x76\\x79\\x7a\\x76\"\n\"\\x0b\\x94\\x1f\\x9b\\x95\\x95\\x9c\\x9c\\x1a\\x9c\\x83\\x9a\\x7d\\x95\\x1e\\x93\\x0b\\xf7\\xc1\\xf7\\x39\\x15\\xd0\\xfb\\x39\\x05\\xec\\x06\\xdf\\xf7\\xd6\\x05\"\n\"\\x0b\\x76\\x1a\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x83\\x96\\x95\\x89\\xa6\\x1b\\x97\\x0b\\x7c\\x8e\\x87\\xa1\\x79\\x1f\\xf7\\x2f\\xfb\\x10\\xf7\\x2e\\xf7\\x10\\x05\"\n\"\\x0b\\xb2\\x1f\\x9c\\x06\\xb2\\xab\\xa9\\xb0\\xb0\\x6b\\xa9\\x64\\x1f\\x0e\\x07\\x74\\x8d\\x80\\x91\\x82\\x1e\\x7c\\x95\\x9d\\x81\\x9d\\x1b\\x9c\\x0b\\x15\\xf7\"\n\"\\x01\\x31\\x05\\x82\\x97\\x94\\x87\\x95\\x1b\\xa0\\x9d\\x9c\\x0b\\x20\\x05\\x7a\\x7e\\x84\\x80\\x7d\\x1a\\x77\\x9e\\x79\\xa1\\x96\\x92\\x0b\\xad\\xad\\x72\\xb0\"\n\"\\x1d\\x69\\x0b\\x7e\\x1a\\x79\\x9c\\x7b\\x9e\\x94\\x95\\x57\\x1d\\xc0\\xcd\\x57\\x05\\x75\\x82\\x7e\\x79\\x76\\x1a\\x67\\xa2\\x7a\\x0b\\x07\\xaf\\x1d\\x82\\x81\"\n\"\\x79\\x7a\\x1a\\x0b\\x15\\x70\\x83\\x8a\\x84\\x80\\x1f\\x7a\\x82\\x80\\x78\\x78\\x1a\\x0b\\x1b\\x7a\\x7b\\x83\\x7e\\x80\\x1f\\x84\\x81\\x88\\x80\\x72\\x1a\\x0b\"\n\"\\xb1\\x89\\x97\\x84\\x96\\x1e\\x9b\\x80\\x79\\x91\\x69\\x1b\\x4e\\x0b\\x81\\x1e\\x84\\x96\\x96\\x89\\xa5\\x1b\\x0b\\x8a\\x87\\x1b\\x80\\x87\\x91\\x9a\\x1f\\xf7\"\n\"\\x8b\\x07\\xb8\\x0b\\x8c\\x92\\x96\\x1f\\x9b\\x94\\x95\\x9c\\x9d\\x1a\\x9b\\x82\\x0b\\x53\\xab\\x57\\xbf\\x6f\\x1f\\xac\\x79\\xaa\\x82\\xce\\x80\\x0b\\x93\\x1a\"\n\"\\xa0\\x79\\x9d\\x75\\x79\\x82\\x85\\x76\\x7d\\x1e\\x0b\\x9a\\x91\\x94\\x98\\x1a\\xa1\\x79\\x9c\\x74\\x7f\\x84\\x88\\x0b\\xac\\x52\\x08\\x79\\x95\\x8f\\x87\\x92\"\n\"\\x1b\\x92\\x90\\x8e\\x0b\\xf7\\xac\\x15\\xfb\\x13\\xfb\\x00\\xf7\\x13\\x06\\x0e\\x07\\xc4\\x77\\xb5\\x62\\xa8\\x1e\\xa3\\x6a\\x61\\x97\\x0b\\x87\\x88\\x7e\\x1b\"\n\"\\x80\\x7f\\x90\\x9e\\x6a\\x1f\\xa8\\x0b\\x8f\\xf7\\x68\\x1d\\x0b\\x15\\x46\\xfb\\x80\\x05\\x88\\x81\\x8a\\x87\\x86\\x1a\\x0b\\x95\\x97\\x1a\\x9f\\x79\\x9d\\x77\"\n\"\\x7f\\x83\\x87\\x7f\\x0b\\x1a\\x7a\\x93\\x7b\\x99\\x82\\x1e\\x83\\x96\\x96\\x89\\x0b\\x1e\\x9a\\x82\\x79\\x95\\x78\\x1b\\x7a\\x7b\\x83\\x7e\\x0b\\x9b\\x7d\\x9e\"\n\"\\x99\\x97\\x94\\x9b\\x94\\x1e\\xf7\\x25\\x0b\\x74\\x8a\\x19\\x83\\xf7\\x00\\x06\\xc9\\x8d\\x9e\\x97\\x0b\\x9a\\x1b\\x93\\x92\\x92\\x94\\x92\\x0b\\x70\\x83\\x8a\"\n\"\\x84\\x80\\x1f\\x7a\\x0b\\x06\\x5e\\x9d\\x74\\xaf\\xae\\x9e\\xa2\\xb8\\x1e\\x0b\\x06\\x5d\\x9c\\x75\\xb0\\xae\\x9e\\xa2\\xb8\\x1e\\x0b\\x8a\\x88\\x81\\x1f\\x78\"\n\"\\x85\\x7d\\x76\\x76\\x1a\\x0b\\x91\\x91\\x92\\x08\\x5f\\x8f\\x9c\\x79\\xad\\x1b\\x0b\\x95\\x9c\\x9d\\x1a\\x9c\\x83\\x9a\\x7d\\x95\\x1e\\x0b\\xae\\xfb\\x8b\\x05\"\n\"\\x70\\x8e\\x95\\x80\\xa1\\x1b\\x0b\\x7a\\x1a\\x7b\\x94\\x7a\\x98\\x82\\x1e\\x84\\x95\\x0b\\x01\\x00\\x01\\xe3\\x01\\x05\\x00\\x01\\x0a\\x02\\x01\\x40\\x03\\x01\"\n\"\\x87\\xff\\x02\\x87\\xa0\\x02\\x8e\\x02\\x00\\x01\\x00\\x02\\x00\\x03\\x00\\x3c\\x00\\x5f\\x01\\x32\\x02\\x05\\x02\\x82\\x03\\x07\\x03\\x16\\x03\\x59\\x03\\x9a\"\n\"\\x04\\x05\\x04\\x44\\x04\\x46\\x04\\x48\\x04\\x4f\\x04\\x7a\\x04\\xca\\x04\\xf8\\x05\\x58\\x05\\xd8\\x06\\x1a\\x06\\x7e\\x06\\xe7\\x07\\x1e\\x07\\x7a\\x07\\xe3\"\n\"\\x08\\x02\\x08\\x1b\\x08\\x65\\x08\\x80\\x08\\xca\\x09\\x30\\x09\\xb4\\x09\\xb7\\x09\\xbe\\x09\\xc1\\x09\\xc4\\x09\\xc7\\x09\\xf8\\x09\\xfb\\x09\\xfd\\x0a\\x00\"\n\"\\x0a\\x3b\\x0a\\x3e\\x0a\\x41\\x0a\\x9b\\x0a\\x9e\\x0a\\xa1\\x0a\\xe1\\x0b\\x78\\x0b\\x7b\\x0b\\x7e\\x0b\\x80\\x0b\\x83\\x0b\\xa9\\x0b\\xac\\x0b\\xae\\x0b\\xb1\"\n\"\\x0b\\xb4\\x0b\\xd6\\x0c\\x01\\x0c\\x27\\x0c\\x5b\\x0c\\x6e\\x0c\\x73\\x0c\\x76\\x0c\\xed\\x0c\\xf0\\x0d\\x39\\x0d\\x3c\\x0d\\x8f\\x0d\\x92\\x0d\\xc4\\x0d\\xca\"\n\"\\x0d\\xee\\x0d\\xf1\\x0d\\xf4\\x0e\\x57\\x0e\\x5c\\x0e\\x5f\\x0e\\x61\\x0e\\xeb\\x0e\\xee\\x0e\\xf1\\x0e\\xf4\\x0e\\xf7\\x0f\\x2c\\x0f\\x2f\\x0f\\x3f\\x0f\\x42\"\n\"\\x0f\\x45\\x0f\\xa3\\x0f\\xb0\\x10\\x0c\\x10\\x3c\\x10\\x72\\x10\\xf6\\x11\\x68\\x11\\x6a\\x11\\xff\\x12\\x5f\\x13\\x11\\x13\\xb1\\x13\\xbe\\x13\\xd8\\x14\\x2b\"\n\"\\x14\\x4c\\x14\\x4f\\x14\\xb9\\x15\\x2b\\x15\\x2d\\x15\\x34\\x15\\x70\\x15\\x72\\x15\\xe1\\x15\\xf8\\x15\\xfa\\x16\\x06\\x16\\x14\\x16\\x1c\\x16\\x2d\\x16\\x67\"\n\"\\x16\\xc7\\x16\\xcd\\x16\\xd8\\x16\\xde\\x17\\x0b\\x17\\x11\\x17\\x17\\x17\\x1e\\x17\\x24\\x17\\x2a\\x17\\x35\\x17\\x3b\\x17\\x62\\x17\\x68\\x17\\x6a\\x17\\x6d\"\n\"\\x17\\xdb\\x18\\x3b\\x18\\x3e\\x18\\xaf\\x18\\xd9\\x18\\xdc\\x18\\xdf\\x19\\x39\\x19\\x3c\\x19\\xba\\x1a\\x4c\\x1a\\x84\\x1a\\xa4\\x1b\\x1a\\x1b\\xc4\\x1b\\xc6\"\n\"\\x1c\\x3b\\x1c\\x78\\x1c\\xdd\\x1d\\x41\\x1d\\x6e\\x1d\\xc9\\x1d\\xf3\\x1e\\x18\\x1e\\x60\\x1e\\xb3\\x1f\\x48\\x1f\\x4b\\x1f\\xea\\x20\\x42\\x20\\xb0\\x21\\x35\"\n\"\\x21\\x4e\\x21\\x68\\x21\\x70\\x21\\x77\\x21\\x7e\\x21\\xa2\\x22\\x09\\x22\\x17\\x22\\x31\\x22\\x38\\x22\\x46\\x22\\x4d\\x22\\x7b\\x22\\x83\\x22\\x8b\\x22\\xcd\"\n\"\\x22\\xe6\\x22\\xf2\\x22\\xf9\\x23\\x00\\x23\\x24\\x23\\x50\\x23\\x6f\\x23\\x8d\\x23\\x95\\x23\\x9d\\x23\\xbd\\x23\\xc5\\x24\\x01\\x24\\x25\\x24\\x3a\\x24\\x85\"\n\"\\x24\\xa0\\x24\\xcb\\x25\\x06\\x25\\x71\\x25\\x8f\\x25\\xcd\\x25\\xdf\\x25\\xfa\\x26\\x01\\x26\\x12\\x26\\x1a\\x26\\x22\\x26\\x75\\x26\\x7d\\x26\\xad\\x26\\xb4\"\n\"\\x26\\xbb\\x26\\xf4\\x27\\xa9\\x27\\xc6\\x27\\xd5\\x27\\xdd\\x27\\xf8\\x28\\x00\\x28\\x08\\x28\\x31\\x28\\x94\\x28\\xe1\\x29\\x36\\x29\\x7e\\x29\\xc1\\x29\\xea\"\n\"\\x2a\\x7e\\x2a\\xec\\x2a\\xf4\\x2a\\xfc\\x2a\\xff\\x2b\\x51\\x2b\\x59\\x2b\\xc4\\x2b\\xe0\\x2b\\xe2\\x2b\\xea\\x2b\\xf2\\x2b\\xfa\\x2c\\x03\\x2c\\x05\\x2c\\x0a\"\n\"\\x2c\\x0c\\x2c\\x27\\x2c\\x2e\\x2c\\x33\\x2c\\x38\\x2c\\x3f\\x2c\\xa3\\x2c\\xd7\\x2c\\xd9\\x2d\\x16\\x2d\\x18\\x2d\\x24\\x2d\\xd7\\x2d\\xd9\\x2d\\xe1\\x2d\\xe9\"\n\"\\x2d\\xf1\\x2d\\xfa\\x2e\\x77\\x2e\\x7e\\x2e\\xe3\\x2e\\xeb\\x2e\\xf0\\x2e\\xf8\\x2f\\x13\\x2f\\x16\\x2f\\x1c\\x2f\\x3b\\x2f\\x42\\x2f\\x4a\\x2f\\x6a\\x2f\\x72\"\n\"\\x2f\\x7a\\x2f\\xb7\\x2f\\xe3\\x2f\\xea\\x2f\\xfd\\x2f\\xff\\x30\\x07\\x30\\x0d\\x30\\x15\\x30\\x2c\\x30\\x34\\x30\\x3b\\x30\\x43\\x30\\xa1\\x30\\xa4\\x30\\xf5\"\n\"\\x30\\xfc\\x31\\x9c\\x31\\xc2\\x32\\x36\\x32\\x3e\\x32\\x45\\x32\\x4c\\x32\\x4e\\x32\\x55\\x32\\xf5\\x32\\xfd\\x33\\x05\\x33\\x48\\x33\\x4a\\x33\\x84\\x33\\x89\"\n\"\\x33\\xbc\\x34\\x33\\x34\\x3b\\x34\\x43\\x34\\x4b\\x34\\x82\\x34\\x85\\x34\\xe4\\x34\\xf0\\x34\\xf8\\x34\\xff\\x35\\x07\\x35\\x6d\\x35\\x74\\x35\\x7b\\x35\\xdc\"\n\"\\x35\\xe3\\x35\\xeb\\x35\\xf2\\x35\\xf8\\x35\\xfb\\x36\\x03\\x36\\x0a\\x36\\x0c\\x36\\x0f\\x36\\x34\\x36\\x36\\x36\\x38\\x36\\xaf\\x36\\xb1\\x37\\x13\\x37\\x9a\"\n\"\\x38\\x29\\x38\\x2c\\x38\\x4f\\x38\\x52\\x38\\xba\\x38\\xbc\\x38\\xbe\\x38\\xc1\\x38\\xe1\\x38\\xe3\\x38\\xe6\\x38\\xe8\\x38\\xeb\\x39\\x6f\\x39\\x71\\x39\\xa2\"\n\"\\x39\\xe5\\x3a\\x33\\x3a\\x77\\x3a\\xbb\\x3b\\x2a\\x3b\\x4a\\x3b\\xc1\\x3c\\x34\\x3c\\x96\\x3c\\xcc\\x3d\\x5f\\x3d\\xa8\\x3e\\x1f\\x3e\\x22\\x3e\\x25\\x3e\\x2b\"\n\"\\x3e\\x2e\\x3e\\xaa\\x3f\\x21\\x3f\\xa7\\x3f\\xd3\\x3f\\xf1\\x40\\x1c\\x40\\x96\\x40\\xeb\\x40\\xee\\x41\\x4e\\x41\\x51\\x41\\xbd\\x42\\x68\\x42\\xdd\\x42\\xe0\"\n\"\\x42\\xff\\x43\\x02\\x43\\x67\\x43\\xb0\\x43\\xd0\\x43\\xd3\\x44\\x25\\x44\\x27\\x44\\x2e\\x44\\x4f\\x44\\x52\\x44\\xea\\x44\\xfa\\x45\\x2b\\x45\\x66\\x45\\xb9\"\n\"\\x45\\xf4\\x46\\x34\\x46\\xa6\\x46\\xe8\\x47\\x57\\x47\\xa2\\x47\\xee\\x48\\x0c\\x48\\x6b\\x48\\x7d\\x48\\xe5\\x48\\xe8\\x48\\xee\\x49\\x1b\\x49\\x22\\x49\\xa3\"\n\"\\x4a\\x05\\x4a\\x14\\x4a\\x23\\x4a\\xac\\x4a\\xd5\\x4a\\xd7\\x4b\\x24\\x4c\\x01\\x4c\\x9f\\x4d\\x4f\\x4d\\xb6\\x4e\\x26\\x4e\\x2e\\x4e\\x62\\x4e\\x96\\x4f\\x01\"\n\"\\x4f\\x86\\x4f\\xa5\\x4f\\xf4\\x50\\x3a\\x50\\x80\\x50\\x8c\\x50\\xd9\\x51\\x0e\\x51\\x4c\\x51\\xac\\x51\\xb3\\x51\\xbb\\x51\\xc7\\x51\\xd0\\x52\\x28\\x52\\x9e\"\n\"\\x53\\x0a\\x53\\x62\\x53\\xb7\\x54\\x1d\\x54\\x41\\x54\\x64\\x54\\x6c\\x54\\x74\\x54\\x7d\\x54\\xbb\\x54\\xc3\\x55\\x03\\x55\\x3b\\x55\\xaa\\x56\\x41\\x56\\x7e\"\n\"\\x56\\xd3\\x56\\xd6\\x56\\xeb\\x56\\xf8\\x57\\x12\\x57\\x58\\x57\\xde\\x58\\x30\\x58\\x38\\x58\\x3f\\x58\\x62\\x58\\x72\\x58\\xd4\\x58\\xe3\\x58\\xee\\x59\\x24\"\n\"\\x59\\x48\\x59\\x4e\\x59\\x99\\x59\\xa1\\x5a\\x0c\\x5a\\x5c\\x5a\\x8a\\x5a\\xb8\\x5b\\x19\\x5b\\x82\\x5b\\xa9\\x5b\\xb0\\x5b\\xbb\\x5b\\xe4\\x5b\\xfb\\x5c\\x00\"\n\"\\x5c\\x16\\x5c\\x70\\x5c\\x9c\\x5c\\xfa\\x5d\\x01\\x5d\\x42\\x5d\\x6e\\x5d\\x75\\x5d\\x88\\x5d\\xeb\\x5e\\x50\\x5e\\x99\\x5f\\x13\\x5f\\x19\\x5f\\x5b\\x5f\\xe0\"\n\"\\x5f\\xea\\x60\\x17\\x60\\x20\\x60\\x2a\\x60\\xb2\\x61\\x23\\x61\\x67\\x61\\x6f\\x61\\x76\\x61\\x7e\\x62\\x14\\x62\\xc0\\x62\\xc3\\x63\\x0d\\x63\\x1a\\x63\\x3a\"\n\"\\x63\\x9d\\x64\\x52\\x64\\xb9\\x65\\x48\\x65\\xc5\\x66\\x1a\\x66\\x6d\\x66\\xc8\\x67\\x3e\\x67\\x46\\x67\\x7c\\x67\\x83\\x67\\x8a\\x67\\xaa\\x67\\xef\\x67\\xf6\"\n\"\\x68\\x9c\\x68\\xa4\\x68\\xac\\x68\\xc0\\x69\\x10\\x69\\xbc\\x6a\\x02\\x6a\\x80\\x6a\\xfa\\x6b\\x56\\x6b\\x9c\\x6b\\xd9\\x6c\\x42\\x6c\\x84\\x6c\\xa5\\x6c\\xf8\"\n\"\\x6d\\x23\\x6d\\x2b\\x6d\\x58\\x6d\\x59\\x6d\\x5b\\x6d\\x62\\x6d\\x6a\\x6d\\x70\\x6d\\x72\\x6d\\x8f\\x6e\\x09\\x6e\\x62\\x6e\\xd4\\x6e\\xdb\\x6e\\xf0\\x6f\\x18\"\n\"\\x6f\\x39\\x6f\\x66\\x6f\\x9e\\x70\\x25\\x70\\xce\\x71\\x63\\x71\\xe3\\x72\\x6d\\x72\\xdc\\x73\\x64\\x74\\x0e\\x74\\x89\\x74\\xe3\\x75\\x4c\\x75\\x77\\x75\\xb2\"\n\"\\x76\\x06\\x76\\x09\\x76\\x5b\\x76\\xab\\x76\\xf3\\x77\\x5e\\x77\\xbc\\x77\\xf6\\x78\\x34\\x78\\xb3\\x79\\x2e\\x79\\x9c\\x79\\xbc\\x79\\xbf\\x79\\xf5\\x7a\\x5d\"\n\"\\x7a\\xab\\x7a\\xb3\\x7a\\xbb\\x7b\\x07\\x7b\\x09\\x7b\\x10\\x7b\\x18\\x7b\\x24\\x7b\\xdd\\x7c\\x5a\\x7c\\x5c\\x7c\\x5e\\x7c\\x75\\x7c\\x93\\x7c\\xee\\x7d\\x04\"\n\"\\x7d\\x65\\x7d\\x92\\x7d\\xea\\x7d\\xed\\x7d\\xf5\\x7e\\x28\\x7e\\x41\\x7e\\x49\\x7e\\x4e\\x7e\\x56\\x7e\\x91\\x7e\\x98\\x7e\\x9f\\x7f\\x22\\x7f\\x2a\\x7f\\x32\"\n\"\\x7f\\x39\\x7f\\x42\\x7f\\xa5\\x0e\\x0e\\xf8\\x13\\xf8\\x8c\\x15\\x8c\\x98\\x8c\\x98\\x93\\x1a\\xb7\\x66\\xae\\x5c\\x5b\\x66\\x68\\x5f\\x83\\x8c\\x7e\\x8c\\x7e\"\n\"\\x1e\\xa8\\xfb\\xaf\\x05\\x6c\\x8e\\x9f\\x78\\xaa\\x1b\\xa9\\x9f\\x9e\\xaa\\x8e\\x1f\\x5e\\xfb\\x7f\\x15\\xb3\\xaa\\xa8\\xb1\\xb0\\x6c\\xa9\\x63\\x1f\\x7a\\x62\"\n\"\\x1d\\xf7\\x17\\xf8\\xdb\\x15\\xf7\\x6a\\x1d\\xa0\\x96\\x96\\xa6\\x8e\\x1f\\xab\\xf7\\x8b\\x05\\xca\\x16\\xae\\xfb\\x8b\\x05\\x70\\x8e\\x95\\x80\\xa1\\x1b\\xa0\"\n\"\\x96\\xf7\\x11\\x0a\\xf8\\x57\\xf8\\x44\\x15\\x96\\xf7\\x29\\x8d\\xa2\\x05\\xa2\\x8d\\x6f\\xa5\\x6f\\x1b\\x7b\\x7b\\x84\\x7e\\x80\\x1f\\x82\\x81\\x89\\x84\\x8a\"\n\"\\x70\\x80\\xfb\\x31\\x18\\x4b\\x06\\x96\\xf7\\x29\\x8c\\x9e\\x05\\xa9\\x74\\xa2\\x6c\\x7b\\x7b\\x84\\x7e\\x80\\x1e\\x82\\x80\\x89\\x84\\x8a\\x71\\x80\\xfb\\x31\"\n\"\\x18\\x74\\x06\\x70\\x83\\x8a\\x85\\x81\\x3b\\x0a\\x7a\\x93\\x7c\\x9a\\x81\\x1e\\x83\\x95\\x95\\x89\\xa7\\x1b\\x9a\\x06\\x84\\x2e\\x05\\x6e\\x06\\x71\\x83\\x8a\"\n\"\\x85\\x81\\x32\\x0a\\x83\\x96\\x96\\x89\\xa5\\x1b\\xa1\\x06\\x80\\xfb\\x29\\x05\\x8a\\x84\\x8b\\x84\\x87\\x1a\\x6c\\xa2\\x74\\xaa\\xae\\x9e\\xa2\\xb5\\x1e\\x97\"\n\"\\xf7\\x30\\x05\\xcb\\x06\\x80\\xfb\\x29\\x89\\x76\\x05\\x72\\x89\\xa6\\x71\\xa7\\x1b\\x9b\\x9b\\x92\\x98\\x95\\x1f\\x91\\x91\\x92\\xa1\\x8c\\x9b\\x96\\xf7\\x31\"\n\"\\x18\\xa2\\x06\\xa2\\x97\\x8d\\x90\\xf7\\x43\\x1d\\x80\\x80\\x8d\\x70\\x1b\\x7d\\x06\\x92\\xe8\\x05\\xa7\\x06\\xa4\\x94\\x8d\\x90\\x95\\x1f\\x9b\\x95\\x95\\x9c\"\n\"\\x9c\\x1a\\x9c\\x83\\x9b\\x7d\\x94\\x1e\\x71\\x1d\\xfb\\x1c\\x24\\x15\\x84\\x2e\\x05\\x4b\\x06\\x92\\xe8\\x05\\x0e\\xf7\\xf7\\xf8\\xe6\\x15\\xa4\\x8a\\x93\\x84\"\n\"\\x94\\x1e\\x9b\\x82\\x79\\x94\\x79\\x1b\\x79\\x7b\\x83\\x7e\\x81\\x1f\\x83\\x80\\x89\\x82\\x71\\x1a\\x75\\x07\\x36\\x7c\\x4f\\x4c\\x40\\x1a\\x3c\\xc1\\x56\\xf1\"\n\"\\x77\\x1e\\xd4\\x7d\\x05\\xc2\\x81\\xa1\\x7a\\x6d\\x1a\\x63\\x5d\\x6e\\x4c\\x56\\x57\\xa2\\xa6\\x83\\x1e\\x84\\xa5\\x8b\\x8b\\x83\\x93\\x08\\x95\\x81\\x7c\\x90\"\n\"\\x7d\\x1b\\x7a\\x7b\\x83\\x7e\\x80\\x1f\\x83\\x80\\x89\\x82\\x71\\x1a\\x50\\x07\\x72\\x8d\\x82\\x91\\x82\\x1e\\x7b\\x96\\x9b\\x82\\x9f\\x1b\\x9a\\x94\\x8f\\x98\"\n\"\\x9b\\x1f\\xa8\\x7e\\x92\\x89\\xb1\\x83\\x08\\x3f\\x07\\x73\\x8d\\x82\\x91\\x82\\x1e\\x7c\\x94\\x9d\\x81\\x9e\\x1b\\x9b\\x70\\x1d\\x93\\xa6\\x1a\\xd7\\x07\\xf2\"\n\"\\x9f\\xca\\xcb\\xdf\\x1a\\xb5\\x7b\\xb1\\x70\\xa6\\x1e\\x6f\\xa5\\x67\\x9a\\x4c\\x98\\x4a\\x97\\x18\\x5b\\x95\\x74\\x9b\\xa4\\x1a\\xac\\xb0\\xa1\\xc5\\xb2\\xb1\"\n\"\\x7c\\x7b\\x8f\\x1e\\x6f\\x90\\x9f\\x7b\\xa9\\x2d\\x1d\\x92\\xa7\\x1a\\xa9\\x07\\xb8\\x79\\xa1\\x67\\x81\\x84\\x89\\x87\\x80\\x1e\\x8c\\x87\\x88\\x8c\\x8a\\x1b\"\n\"\\x74\\x93\\x83\\x8d\\x82\\x8d\\x7c\\x8d\\x19\\x0e\\xf7\\x78\\xf8\\xe8\\x15\\x3e\\x4d\\x4f\\x40\\x41\\xca\\x4e\\xd8\\xd7\\xca\\xc7\\xd5\\xd7\\x4e\\xc7\\x3c\\x1f\"\n\"\\x4c\\x04\\xb4\\xad\\x6b\\x64\\x62\\x6a\\x6b\\x61\\x63\\x69\\xac\\xb2\\xb3\\xac\\xab\\xb4\\x1f\\xf7\\x9b\\xfb\\x6a\\x15\\xa1\\x92\\x93\\x93\\x9a\\x1a\\x9c\\x7d\"\n\"\\x99\\x7c\\x86\\x85\\x8a\\x88\\x82\\x1e\\xfb\\xfe\\xfb\\x05\\x05\\x74\\x84\\x84\\x84\\x7b\\x1a\\x7a\\x98\\x7d\\x9b\\x90\\x93\\x8d\\x8d\\x92\\x1e\\xf7\\x83\\xbc\"\n\"\\x15\\x3e\\x4d\\x4f\\x41\\x40\\xc9\\x4f\\xd9\\xd7\\xca\\xc7\\xd4\\xd7\\x4e\\xc7\\x3c\\x1f\\x8c\\x4c\\x15\\xb3\\xad\\x6b\\x64\\x63\\x6a\\x6b\\x61\\x63\\x69\\xab\"\n\"\\xb3\\xb2\\xac\\xab\\xb5\\x1f\\x0e\\xf7\\xff\\xf7\\x5d\\x15\\x2c\\xf7\\x18\\x05\\x7a\\xa3\\x81\\x9f\\x95\\x1a\\xa2\\xa1\\x9f\\xa6\\x9f\\x96\\x85\\x6f\\xaa\\x1e\"\n\"\\xb7\\xa2\\x05\\xac\\x9c\\x95\\x97\\xa2\\x1a\\xa7\\x72\\xa3\\x6f\\x86\\x83\\x89\\x87\\x7d\\x1e\\x96\\x71\\x77\\x90\\x74\\x1b\\x37\\x42\\x47\\x3b\\x6d\\x92\\x78\"\n\"\\xa4\\x62\\x1f\\x4f\\x69\\x69\\x53\\x4b\\x1a\\x2d\\xd4\\x4f\\xf7\\x06\\xbe\\xab\\x92\\x9e\\xa7\\x1e\\x95\\x7e\\x05\\xca\\x06\\xb9\\xa3\\x65\\x1d\\x8a\\x06\\x95\"\n\"\\x9d\\x91\\x9a\\x95\\xaf\\x08\\xa5\\x8f\\x9d\\x9f\\xa6\\x1a\\x9c\\x84\\x9a\\x7c\\x95\\x1e\\x93\\x20\\x0a\\x53\\x06\\x3c\\xfb\\x43\\x15\\x83\\x7a\\x82\\x89\\x75\"\n\"\\x1b\\x55\\x72\\x9b\\xae\\xa9\\x9b\\xa1\\xab\\x9b\\x1f\\x0e\\xf7\\x6c\\xf8\\xee\\xf7\\x5d\\x1d\\x7a\\xf7\\x61\\x1d\\xf7\\x99\\x05\\x0e\\xf8\\x49\\xf8\\xf7\\x15\"\n\"\\x73\\x7f\\x82\\x68\\x72\\x1f\\x42\\x22\\x60\\xfb\\x0f\\x24\\x1a\\x21\\xaf\\xfb\\x02\\xd3\\xfb\\x01\\x1e\\x5d\\xa9\\x98\\x80\\xa6\\x1b\\xa9\\xa3\\xa1\\xa8\\x98\"\n\"\\x89\\x90\\x81\\x9b\\x1f\\x45\\xf5\\x6c\\xe7\\xeb\\x1a\\xeb\\xaa\\xe4\\xd1\\xf7\\x00\\x1e\\x95\\x9b\\x8d\\x90\\x98\\x1a\\xa8\\x74\\xa1\\x6b\\x1e\\x0e\\xf7\\x3c\"\n\"\\xf8\\xf7\\x15\\x6c\\x73\\x75\\x6e\\x7e\\x8d\\x86\\x95\\x7b\\x1f\\xd1\\x21\\xaa\\x2f\\x2b\\x1a\\x2b\\x6c\\x30\\x45\\x21\\x1e\\x81\\x7b\\x89\\x86\\x7e\\x1a\\x6e\"\n\"\\xa3\\x75\\xaa\\xa3\\x97\\x94\\xae\\xa4\\x1e\\xd4\\xf4\\xb6\\xf7\\x0f\\xf2\\x1a\\xf5\\x67\\xf7\\x02\\x43\\xf7\\x01\\x1e\\xb9\\x6e\\x7d\\x96\\x71\\x1b\\x0e\\xf7\"\n\"\\x68\\xf7\\xf9\\x15\\x5b\\x4c\\x05\\x7b\\x75\\x87\\x83\\x7e\\x1a\\x6e\\xa3\\x74\\xa9\\xa1\\x96\\x92\\xa6\\x9f\\x1e\\xbc\\xcb\\xbc\\x4b\\x05\\x70\\x9f\\x96\\x84\"\n\"\\xa1\\x1b\\xa9\\xa3\\xa2\\xa8\\x98\\x87\\x93\\x7b\\xa1\\x1f\\x5b\\xca\\xdb\\xa4\\x05\\xb1\\x96\\x9a\\x9a\\xa6\\x1a\\xa7\\x73\\xa3\\x6f\\x81\\x88\\x8a\\x85\\x76\"\n\"\\x1e\\x3a\\x72\\x05\\xda\\x07\\xa3\\x89\\x94\\x85\\x95\\x1e\\x9a\\x82\\x79\\x97\\x1d\\x80\\x72\\x1a\\x3c\\x07\\x3a\\xa4\\x05\\x91\\x76\\x87\\x8c\\x82\\x1b\\x6f\"\n\"\\x73\\x73\\x70\\x6f\\x9a\\x7c\\xb1\\x80\\x1f\\x0e\\xf7\\xf6\\xf7\\x6f\\xf7\\x23\\x1d\\x94\\x1e\\x93\\x7f\\x83\\x8d\\x6e\\x1b\\xfb\\x1d\\xf7\\x2c\\x06\\xa5\\x8a\"\n\"\\x92\\x84\\x95\\x1e\\x9a\\x81\\x7a\\x97\\x1d\\x81\\x71\\x1a\\xfb\\x2c\\xfb\\x1e\\x07\\xd5\\x0a\\x95\\x98\\x88\\xa4\\x1b\\xf7\\x1e\\xfb\\x2c\\x06\\x74\\x8d\\x81\"\n\"\\x91\\x82\\x1e\\x7c\\x94\\x9e\\xe5\\x0a\\x0e\\xf4\\x1d\\x7e\\x1d\\xf7\\xc9\\x7d\\x15\\x49\\x1d\\x0e\\xf8\\x91\\xf8\\xdc\\x15\\x95\\x9e\\x8d\\x93\\x96\\x1a\\xa5\"\n\"\\x72\\xa2\\x6f\\x71\\x7e\\x81\\x69\\x7a\\x1e\\xfb\\xd5\\xfd\\x1b\\x05\\x82\\x79\\x88\\x81\\x80\\x1a\\x71\\xa5\\x74\\xa7\\xa5\\x98\\x95\\xad\\x9c\\x1e\\x0e\\xf8\"\n\"\\x9d\\xf7\\xee\\x15\\xe3\\x6e\\xda\\x59\\xbe\\x1e\\xae\\x67\\x5b\\x9d\\x51\\x1b\\x51\\x5b\\x79\\x68\\x67\\x1f\\x59\\x58\\x6e\\x3c\\x33\\x1a\\x31\\x07\\x34\\xa8\"\n\"\\x3b\\xbd\\x59\\x1e\\x68\\xaf\\xbb\\x79\\xc5\\x1b\\xc5\\xbb\\x9d\\xae\\xaf\\x1f\\xbd\\xbd\\xa8\\xdb\\xe2\\x1a\\xfb\\xe2\\xec\\x15\\xed\\xb7\\xca\\xd0\\xd0\\xb7\"\n\"\\x4c\\x29\\x1e\\x24\\x07\\x2a\\x5e\\x4b\\x47\\x47\\x5e\\xcb\\xec\\x1e\\x0e\\xf7\\xf6\\xf8\\xfd\\x15\\xfb\\x6d\\x56\\x05\\x61\\x81\\x7d\\x7d\\x6e\\x1a\\x6d\\xa1\"\n\"\\x73\\xa7\\x95\\x8e\\x8c\\x90\\x9f\\x1e\\xdd\\xa0\\x05\\xfc\\x11\\x2a\\x07\\x5f\\x1d\\xf7\\xc2\\x06\\xb9\\xa3\\xaa\\x1d\\x70\\x1b\\x2a\\x06\\x0e\\xf7\\x6e\\xf3\"\n\"\\x15\\xf7\\x98\\xf7\\x65\\xa8\\xac\\xde\\x1a\\xf6\\x2e\\xdc\\xfb\\x10\\x4e\\x53\\x77\\x68\\x62\\x1e\\x68\\x6d\\x70\\x5c\\x6b\\x1a\\x70\\xa4\\x74\\xa8\\xa2\\x9f\"\n\"\\x97\\x9d\\x91\\x1e\\x96\\xaa\\x8c\\x8d\\x94\\x95\\x08\\xa3\\xa1\\xac\\x99\\xb2\\x1b\\xca\\xbb\\x68\\x5c\\x6c\\x7b\\x78\\x27\\x34\\x1f\\x62\\x67\\x45\\x52\\xfb\"\n\"\\x08\\x31\\x85\\x86\\x18\\x20\\xf8\\x62\\xe3\\x07\\xa3\\x89\\x94\\x85\\x95\\x1e\\x9a\\x81\\x7a\\x94\\x78\\x1b\\x6b\\x7a\\x7b\\x68\\x87\\x1f\\x0e\\xf7\\xa8\\xf8\"\n\"\\x09\\x15\\x6b\\x73\\x75\\x6e\\x6e\\x9f\\x7a\\xae\\x89\\x1f\\xb8\\x89\\x96\\x89\\x9f\\x83\\x08\\xb9\\x79\\xa7\\x6b\\x69\\x1a\\x76\\x80\\x74\\x7b\\x7e\\x1e\\x74\"\n\"\\x71\\x67\\x82\\x47\\x1b\\x4b\\x6e\\x90\\x9b\\x73\\x1f\\x95\\x7a\\x86\\x8d\\x7e\\x1b\\x6c\\x74\\x74\\x6e\\x58\\xde\\x6a\\xf7\\x12\\xe3\\xc0\\x98\\xac\\xb8\\x1f\"\n\"\\xba\\xad\\xa8\\xc2\\xc4\\x1a\\xc7\\x66\\xbd\\x44\\xad\\x1e\\xc7\\xae\\xa5\\xb1\\xbe\\x1a\\xb5\\x78\\xb5\\x6b\\xaa\\x1e\\xb0\\x64\\x57\\x9e\\x47\\x1b\\xfb\\x03\"\n\"\\x28\\x57\\x51\\x6e\\xa3\\x74\\xa8\\x9a\\x99\\x91\\x95\\x94\\x1f\\xac\\xab\\xa5\\x95\\xc1\\x1b\\xce\\xb5\\x71\\x61\\x64\\x63\\x69\\x5c\\x1f\\x0e\\xf8\\x57\\xf8\"\n\"\\xed\\x15\\xfb\\x1d\\x06\\xfb\\x87\\xfc\\x15\\x05\\x37\\xf7\\xa4\\x6e\\x69\\x07\\xde\\x0a\\xf7\\x18\\x06\\xba\\xa3\\x9d\\xad\\x9b\\x83\\x9b\\x7d\\x94\\x1f\\x81\"\n\"\\x92\\x84\\x8d\\x75\\x8c\\x08\\xa8\\x07\\xb2\\x8c\\xa1\\x9e\\xab\\x4c\\x0a\\x81\\x91\\x4d\\x0a\\xfb\\x00\\x16\\xfb\\x1e\\x06\\xf7\\x1e\\xf7\\x6a\\x05\\x0e\\xf7\"\n\"\\x73\\xf8\\x86\\x15\\xf7\\x5a\\x06\\xa1\\x99\\x8d\\x90\\x93\\x1f\\x9b\\x95\\xf7\\x69\\x1d\\x92\\x80\\x81\\x8d\\x70\\x1b\\xfb\\xc6\\xfb\\xa7\\x06\\x6a\\xa2\\x73\"\n\"\\xaa\\x96\\x8f\\x8c\\x92\\x99\\x1e\\x9f\\xb4\\xb9\\x98\\xaa\\x1b\\xcd\\xb6\\x5e\\x47\\x41\\x5d\\x69\\x26\\x49\\x6f\\x92\\xa2\\x6d\\x1f\\x98\\x7c\\x83\\x8e\\x7c\"\n\"\\x1b\\x6e\\x72\\x74\\x6f\\x53\\xe7\\x61\\xf7\\x10\\xeb\\xc5\\x9e\\xba\\xb8\\x1f\\xaf\\xb1\\x9f\\xbe\\xc3\\x1a\\xf7\\x11\\x30\\xe6\\xfb\\x10\\x6e\\x6c\\x86\\x81\"\n\"\\x68\\x1e\\x0e\\xf7\\x6a\\xf7\\xda\\x15\\xf7\\x00\\xa6\\xe4\\xd8\\xee\\x1b\\x94\\x8f\\x8a\\x87\\x96\\x1f\\x85\\x9c\\x95\\x89\\x94\\x1b\\xa9\\xa4\\xa3\\xa8\\xb3\"\n\"\\x5b\\xa5\\x42\\x2e\\x37\\x62\\x3c\\x48\\x1f\\x57\\x4e\\x71\\x41\\x36\\x1a\\x45\\x9d\\x3f\\xa6\\x5d\\x1e\\x49\\xb1\\xc9\\x6a\\xe0\\x1b\\xcf\\xbd\\x9d\\xb2\\xb0\"\n\"\\x1f\\xad\\xb0\\x9e\\xbc\\xc3\\x1a\\xf7\\x02\\x34\\xe4\\xfb\\x00\\x5b\\x65\\x7a\\x62\\x5f\\x1e\\x93\\xfb\\x10\\x15\\xb9\\xa5\\xbc\\xac\\xb5\\x1b\\xbe\\xb4\\x61\"\n\"\\x56\\x4f\\x66\\x66\\x4f\\x4c\\x68\\xae\\xd9\\x7d\\x1f\\x0e\\xf8\\x21\\xf8\\x86\\x15\\xfb\\x27\\xfc\\x34\\x05\\x85\\x7c\\x89\\x81\\x82\\x1a\\x71\\xa4\\x74\\xa8\"\n\"\\xa8\\x9a\\x98\\xb0\\x98\\x1e\\xf7\\x33\\xf8\\x59\\x05\\xee\\xfc\\x4d\\x34\\x07\\x73\\x8d\\x81\\x91\\x82\\x1e\\x7b\\x95\\x9c\\x82\\x9e\\x1b\\xab\\x9c\\x9c\\xae\"\n\"\\x8f\\x1f\\x0e\\xf8\\x3f\\xf7\\xc8\\x15\\xc3\\xaf\\xa8\\xb8\\xbc\\x1a\\xef\\x2e\\xda\\xfb\\x0b\\xfb\\x0b\\x2e\\x3c\\x27\\x59\\xa8\\x60\\xc3\\x66\\x1e\\x4d\\x66\"\n\"\\x6b\\x58\\x50\\x1a\\x23\\xe4\\x44\\xf7\\x17\\xf7\\x18\\xe5\\xd2\\xf3\\xc6\\x6b\\xbe\\x4d\\xb0\\x1e\\xfb\\x13\\xf7\\x62\\x15\\xc8\\xb6\\x6b\\x5d\\x5a\\x61\\x6b\"\n\"\\x4d\\x4e\\x60\\xac\\xba\\xba\\xb5\\xab\\xc9\\x1f\\xfb\\x9b\\x04\\xc9\\xbe\\x67\\x5e\\x5b\\x5d\\x6a\\x48\\x49\\x5c\\xac\\xba\\xb9\\xbe\\xaf\\xc9\\x1f\\x0e\\xf8\"\n\"\\x44\\xf7\\xa9\\x15\\xfb\\x01\\x70\\x33\\x3f\\x26\\x1b\\x82\\x88\\x8c\\x8e\\x81\\x1f\\x91\\x7a\\x81\\x8d\\x81\\x1b\\x6d\\x72\\x74\\x6d\\x64\\xbb\\x71\\xd3\\xea\"\n\"\\xdd\\xb3\\xdb\\xcf\\x1f\\xbf\\xc8\\xa5\\xd5\\xe1\\x1a\\xd0\\x79\\xd7\\x70\\xb9\\x1e\\xcd\\x64\\x4e\\xac\\x36\\x1b\\x47\\x59\\x78\\x64\\x66\\x1f\\x69\\x67\\x78\"\n\"\\x59\\x54\\x1a\\xfb\\x03\\xe2\\x32\\xf7\\x00\\xbb\\xb1\\x9c\\xb5\\xb7\\x1e\\x83\\xf7\\x0f\\x15\\x5e\\x71\\x5a\\x6a\\x62\\x1b\\x57\\x62\\xb5\\xc0\\xc8\\xaf\\xaf\"\n\"\\xc7\\xcb\\xad\\x68\\x3c\\x9a\\x1f\\x0e\\xf7\\xc9\\x7d\\x15\\x49\\x1d\\x9d\\xf7\\xc4\\x15\\xb2\\xaa\\xa9\\xb0\\xb1\\x6c\\xa8\\x64\\x1f\\x79\\x06\\x64\\x6c\\x6d\"\n\"\\x66\\x66\\xab\\x6d\\xb1\\x1f\\x0e\\xf7\\x01\\x1d\\x3a\\xf7\\xb4\\x15\\x5b\\x6b\\x71\\x62\\x62\\xab\\x71\\xbb\\xb9\\xab\\xa6\\xb2\\xb4\\x6c\\xa6\\x5c\\x1f\\x0e\"\n\"\\xf7\\xaa\\xf7\\xa3\\x15\\xf7\\x8c\\xf7\\x0a\\x05\\xa5\\x98\\x98\\x9a\\x9c\\x1a\\x93\\x89\\x93\\x87\\x93\\x1e\\x8a\\x8d\\x05\\x9c\\x83\\x74\\x96\\x72\\x1b\\x7c\"\n\"\\x7d\\x88\\x85\\x7e\\x1f\\xfc\\x51\\xfb\\x63\\xf8\\x51\\xfb\\x68\\x05\\x85\\x98\\x99\\x88\\x9a\\x1b\\xa4\\xa2\\x96\\x9c\\x93\\x1f\\x8c\\x8d\\x05\\x8f\\x93\\x8d\"\n\"\\x93\\x92\\x1a\\x9e\\x80\\x97\\x6e\\x9a\\x1e\\x0e\\xf7\\x00\\xf8\\x2f\\x15\\x4c\\x1d\\x96\\x97\\x88\\xa4\\x1b\\xf8\\x14\\x06\\xa1\\x98\\x6c\\x1d\\x6f\\x1b\\xfc\"\n\"\\x14\\xfb\\x44\\x94\\x0a\\xf7\\xcd\\xf7\\xa3\\x15\\xfb\\x8b\\xfb\\x0d\\x05\\x6e\\x7c\\x80\\x7f\\x78\\x1a\\x84\\x8d\\x83\\x8f\\x83\\x1e\\x8c\\x89\\x05\\x7a\\x93\"\n\"\\xa2\\x80\\xa4\\x1b\\x9a\\x99\\x8e\\x91\\x98\\x1f\\xf8\\x51\\xf7\\x68\\xfc\\x51\\xf7\\x63\\x05\\x91\\x7e\\x7d\\x8e\\x7c\\x1b\\x72\\x74\\x80\\x7a\\x83\\x1f\\x8a\"\n\"\\x89\\x05\\x87\\x83\\x89\\x83\\x83\\x1a\\x7a\\x98\\x7c\\xa5\\x7e\\x1e\\x0e\\xef\\xf8\\x9d\\x15\\x3d\\x07\\x71\\x0a\\x7d\\x94\\x9d\\x81\\x9e\\x2d\\x1d\\x92\\xa7\"\n\"\\x1a\\x96\\x07\\x9a\\xad\\xa9\\x92\\xb0\\x1b\\xc9\\xb5\\x6c\\x5d\\x65\\x62\\x6f\\xfb\\x0f\\x5f\\x1f\\x53\\x07\\x75\\x8d\\x80\\x91\\x82\\x1e\\x7c\\x95\\x9c\\x81\"\n\"\\x9e\\x1b\\xa9\\x9e\\x9d\\xad\\x8f\\x1f\\xf7\\x0c\\xbd\\xb8\\xbb\\xd9\\x1a\\xf7\\x02\\x35\\xd6\\xfb\\x13\\x4b\\x5e\\x7f\\x61\\x30\\x1e\\xf7\\x5f\\xfc\\xaf\\x15\"\n\"\\xb2\\xaa\\xa8\\xb1\\xb0\\x6c\\xa9\\x64\\x1f\\x7a\\x06\\x64\\x6b\\x6d\\x66\\x66\\xab\\x6d\\xb2\\x1f\\x0e\\xf8\\x27\\xf8\\x17\\x15\\xfb\\x03\\x82\\x3d\\x47\\x30\"\n\"\\x1a\\x3a\\xd4\\x46\\xe0\\x94\\x92\\x8c\\x8c\\x9a\\x1e\\x89\\xbe\\x07\\xb2\\x9f\\x99\\xa8\\x9c\\x83\\x97\\x7c\\x92\\x1f\\xf7\\x9d\\x07\\xf7\\x01\\x3c\\xd9\\xfb\"\n\"\\x01\\xfb\\x1a\\x2b\\xfb\\x0d\\xfb\\x3b\\x1e\\xfb\\x35\\x07\\x45\\x9c\\x45\\xaa\\x57\\x1e\\x43\\xb6\\xc2\\x6b\\xde\\x1b\\xee\\xde\\xb2\\xba\\xa3\\x78\\x9e\\x71\"\n\"\\x80\\x83\\x87\\x7e\\x7d\\x1f\\x79\\x79\\x65\\x80\\x5f\\x1b\\x5f\\x6f\\x98\\xac\\x73\\x1f\\x6a\\xb7\\x7a\\xc6\\xd2\\x1a\\xf7\\x29\\x07\\xf7\\x0c\\xc8\\xe5\\xde\"\n\"\\xc6\\xb4\\x61\\x4d\\x1e\\xfb\\x96\\x04\\x8a\\x80\\x86\\x8b\\x85\\x1b\\x5d\\x69\\xa7\\xb0\\xb6\\xb4\\xac\\xc8\\x91\\x1f\\x0e\\x21\\x1d\\x0e\\xd1\\x1d\\x82\\x81\"\n\"\\x79\\x8e\\x0a\\x53\\x0a\\x0e\\xc1\\x1d\\x0e\\x30\\x1d\\x0e\\xf7\\x5a\\xf7\\x7c\\x15\\xd8\\x88\\x06\\x74\\x8d\\x80\\x90\\x82\\x1e\\x7c\\x95\\x9d\\x81\\xef\\x1d\"\n\"\\x80\\x89\\x81\\x71\\x1a\\x89\\x3e\\xf7\\x13\\xf7\\x8c\\x5e\\x07\\x8b\\x1d\\x94\\xa5\\x1a\\xf7\\x28\\xda\\x1d\\xf7\\x6b\\x29\\x0a\\x2b\\x06\\x0e\\x41\\x1d\\x0e\"\n\"\\x50\\x0a\\x21\\x0a\\x0e\\xf1\\x1d\\x70\\x84\\xb6\\x0a\\x89\\x84\\x76\\x78\\x1e\\x77\\x75\\x68\\x7e\\x6a\\x1b\\x68\\x6b\\x93\\x9f\\x5b\\x1f\\xe4\\x07\\xa3\\x89\"\n\"\\x94\\x85\\x4d\\x1d\\x80\\x72\\x1a\\xfb\\x32\\x07\\x93\\x88\\x05\\x61\\xe5\\xcc\\x79\\xc3\\x1b\\xc7\\xc3\\x9e\\xaf\\xb6\\x1f\\xbc\\xb2\\x9c\\xb0\\xcb\\x1a\\x0e\"\n\"\\xb3\\x1d\\x0e\\x43\\x1d\\x0e\\xaf\\x0a\\x7b\\x93\\x7b\\x99\\x81\\x1e\\x84\\x95\\x99\\x88\\xa3\\x1b\\xf7\\x16\\x2b\\x1d\\x9c\\x83\\x9a\\x7d\\x95\\x1f\\x81\\x92\"\n\"\\x4d\\x0a\\xf7\\xf9\\x07\\xad\\x90\\x9d\\x9c\\xa9\\x33\\x1d\\x80\\x81\\x8d\\x70\\x1b\\xfb\\x04\\x06\\xfb\\x19\\xfb\\xaa\\xfb\\x1c\\xf7\\xaa\\x05\\xfb\\x03\\xd7\"\n\"\\x0a\\x77\\x1a\\x6d\\x9d\\x7a\\xad\\x86\\x1e\\xfb\\xf9\\x07\\x65\\x8a\\x74\\x78\\x6b\\x70\\x0a\\xf7\\x15\\x06\\xb9\\x67\\x0a\\x82\\x8d\\x6f\\x1b\\x6c\\x06\\x0e\"\n\"\\x33\\x0a\\x0e\\x24\\x1d\\x0e\\xf7\\x5a\\xf7\\x53\\x15\\xe9\\x06\\xe9\\xbe\\x9c\\xba\\xb8\\x1f\\xab\\xad\\x9e\\xb9\\xb8\\x1a\\xf7\\x00\\x2f\\xd7\\xfb\\x15\\x1e\"\n\"\\xfb\\x7d\\x06\\x71\\x20\\x1d\\x7a\\x94\\x7b\\x98\\x82\\x1e\\x83\\x96\\x96\\x89\\xa5\\x96\\x0a\\xf7\\xfa\\x04\\xf7\\x06\\x06\\xce\\xb3\\x6c\\x57\\x56\\x63\\x6c\"\n\"\\x48\\x1f\\xfb\\x06\\x06\\x0e\\xf7\\xa6\\x85\\x15\\xe9\\x8c\\xb6\\x98\\xc4\\xb7\\x08\\xd7\\xc7\\xb2\\xda\\xe9\\x1a\\xf7\\x35\\xfb\\x13\\xf7\\x18\\xfb\\x30\\xfb\"\n\"\\x30\\xfb\\x13\\xfb\\x18\\xfb\\x37\\x32\\xae\\x39\\xc8\\x58\\x1e\\x9a\\x7e\\xa2\\x7d\\xb4\\x73\\x51\\x55\\x18\\x7a\\x7c\\x87\\x83\\x7b\\x1a\\x6e\\xa2\\x73\\xa7\"\n\"\\x92\\x96\\x8d\\x8e\\x97\\x1e\\x96\\xba\\xc3\\x94\\xa2\\x1b\\xa0\\x97\\x88\\x7e\\xaf\\x1f\\x83\\x9f\\x9a\\x88\\x9f\\x1b\\xac\\xa6\\x93\\xa1\\xb0\\x1f\\xa8\\x9b\"\n\"\\x96\\x99\\xa1\\x1a\\xa9\\x74\\xa1\\x6c\\x7d\\x86\\x89\\x7c\\x73\\x1e\\x80\\x79\\x83\\x88\\x7c\\x1b\\x80\\x84\\x8c\\x91\\x75\\x1f\\x94\\x6a\\x73\\x8e\\x6e\\x1b\"\n\"\\x7d\\x80\\x8a\\x88\\x77\\x1f\\xa7\\xf8\\x83\\x15\\xea\\xdb\\x34\\x24\\xfb\\x01\\x3d\\x34\\x2a\\x2b\\x3c\\xe3\\xf4\\xf5\\xda\\xe2\\xeb\\x1f\\x0e\\x3c\\x0a\\x0e\"\n\"\\x78\\x1d\\x0e\\x54\\x0a\\x22\\x0a\\x0e\\x8b\\x0a\\xf7\\x61\\xf8\\x61\\x05\\x9f\\x92\\x8b\\x8e\\x94\\x1f\\x9f\\x92\\x99\\x9f\\xa0\\x31\\x0a\\x81\\x7f\\x8d\\x71\"\n\"\\x1b\\xfb\\x18\\xf7\\x22\\x1d\\x96\\x95\\x8a\\xa6\\x1b\\x9d\\x06\\x0e\\x5a\\x1d\\x0e\\x79\\x1d\\x2b\\x0a\\x0e\\x44\\x1d\\x0e\\xf7\\xf6\\xf8\\x8b\\x15\\xc1\\x06\"\n\"\\xba\\xa2\\x9c\\xae\\x9b\\x83\\x9b\\x7d\\x94\\x1f\\x93\\x20\\x0a\\xfb\\x36\\xfd\\x7f\\xf7\\x37\\x06\\xa2\\x97\\x38\\x1d\\x54\\x06\\x0e\\xf7\\x50\\xf9\\x07\\x15\"\n\"\\xad\\x7a\\x7e\\x95\\x71\\x1b\\x6f\\x72\\x74\\x71\\x80\\x8d\\x83\\x95\\x78\\x1f\\xf7\\xd4\\xfd\\x1c\\x05\\x69\\x9c\\x98\\x81\\xa5\\x1b\\xa7\\xa5\\xa3\\xa4\\x96\"\n\"\\x88\\x95\\x82\\x9d\\x1f\\x0e\\xf7\\x8a\\x65\\x15\\x55\\x06\\x74\\x7e\\x89\\x86\\x83\\x6d\\x0a\\x7c\\x99\\x81\\x1e\\x83\\x96\\x94\\x89\\xa7\\x1b\\xf7\\x36\\xf9\"\n\"\\x7f\\xfb\\x37\\x06\\x73\\x80\\xf7\\x17\\x1d\\xc2\\x06\\x0e\\xf7\\xbf\\xf8\\x62\\x15\\xf7\\x05\\xfb\\x11\\x05\\x72\\xa2\\x95\\x85\\xa1\\x1b\\xab\\xa5\\xa4\\xa9\"\n\"\\x9c\\x86\\x94\\x78\\xa1\\x1f\\xfb\\x5e\\xf7\\x76\\xfb\\x5c\\xfb\\x76\\x05\\x78\\x75\\x86\\x81\\x7c\\x1a\\x6c\\xa5\\x72\\xab\\xa1\\x95\\x91\\xa5\\xa2\\x1e\\x0e\"\n\"\\xa7\\x6a\\x15\\x71\\x82\\xf7\\x18\\x1d\\xf8\\xb4\\x06\\xa2\\x99\\x8d\\x91\\x94\\x37\\x0a\\x0e\\xf8\\x16\\xbd\\x0a\\x0e\\x23\\x0a\\x0e\\xf7\\x46\\xf8\\xef\\x15\"\n\"\\xfb\\x0c\\x06\\xd6\\x0a\\x95\\x96\\x89\\xa6\\x1b\\x97\\xfc\\x21\\x7f\\x06\\x72\\x81\\x8a\\x85\\x82\\x1f\\x7b\\x82\\x81\\x7a\\x79\\x4b\\x0a\\x84\\x95\\x98\\x88\"\n\"\\xa4\\x1b\\xf7\\x0c\\xa9\\x06\\x6c\\xbc\\xb3\\x7f\\xc5\\x1b\\xf7\\x27\\xf2\\xe8\\xf7\\x19\\xca\\x73\\xc3\\x5c\\xb6\\x1f\\xb6\\x5c\\x52\\x9f\\x3f\\x1b\\x52\\x59\"\n\"\\x7c\\x6e\\x64\\x1f\\xf7\\x23\\x50\\x15\\xbc\\xaa\\x80\\x71\\xa7\\x1f\\xa3\\x74\\x99\\x6c\\x6c\\x1a\\x6c\\x7d\\x6b\\x73\\x74\\x1e\\x72\\x70\\x6a\\x7f\\x5d\\x1b\"\n\"\\x5c\\x6a\\x97\\xa4\\x70\\x1f\\x73\\xa2\\x7d\\xaa\\xa9\\x1a\\xd4\\xc6\\xbe\\xdf\\x1e\\x0e\\x3d\\x0a\\x0e\\xf8\\xab\\xf8\\xef\\x15\\xfb\\x0c\\x06\\x71\\x83\\x50\"\n\"\\x1d\\x99\\x81\\x1e\\x84\\x96\\x95\\x88\\xa6\\x1b\\x97\\x21\\x06\\xa8\\x64\\x59\\x9a\\x52\\x1b\\x3e\\x52\\x77\\x60\\x5c\\x1f\\x5c\\x60\\x73\\x53\\x4c\\x1a\\x4b\"\n\"\\xa3\\x53\\xba\\x60\\x1e\\x60\\xba\\xc4\\x77\\xd7\\x1b\\xc5\\xb3\\x97\\xaa\\xbc\\x1f\\x6d\\xf7\\x0c\\x45\\x0a\\x7f\\x06\\xfb\\x91\\xf7\\x7c\\x9b\\x0a\\x35\\x1d\"\n\"\\x0e\\xf7\\xc3\\xf7\\xd6\\x15\\xf7\\x27\\xf7\\x32\\x1d\\xfb\\x27\\xaa\\x06\\xa8\\xa5\\x99\\xc2\\xab\\xb5\\x87\\x85\\xb0\\x1e\\x89\\x98\\x95\\x8a\\x92\\x1b\\xa7\"\n\"\\xa1\\xa2\\xa9\\xa3\\x7b\\x9c\\x6e\\x93\\x1f\\x93\\x6a\\x4d\\x92\\x60\\x1b\\xfb\\x0d\\x3f\\x53\\x30\\x1f\\x6c\\x61\\x07\\x70\\x83\\x8a\\x4f\\x0a\\x7a\\x79\\x1a\"\n\"\\x68\\xa3\\x7a\\xb9\\x1e\\xb6\\xfb\\x6f\\x55\\x06\\x89\\x1d\\xf7\\xbd\\x31\\x1d\\xfb\\x1b\\x06\\x0e\\x7a\\x1d\\x0e\\xf7\\x5b\\xad\\x0a\\x89\\x06\\x41\\x0a\\xbf\"\n\"\\xc3\\x9f\\x95\\x9c\\x1d\\x81\\x6b\\x1a\\xfb\\x33\\x89\\x07\\x71\\x82\\x50\\x1d\\x9a\\x81\\x3f\\x1d\\xf7\\x04\\xf7\\x33\\x1d\\x89\\xf7\\x40\\x06\\xec\\x42\\xcc\"\n\"\\xfb\\x00\\x59\\x5c\\x78\\x69\\x67\\x1e\\x0e\\x25\\x0a\\x7d\\x66\\x1d\\x0e\\xf8\\x14\\xf7\\xd6\\x15\\xfb\\xe5\\x07\\x5c\\x67\\x6c\\x55\\x1e\\xfb\\x03\\x5e\\x0a\"\n\"\\x96\\x97\\xb8\\x0a\\xfb\\xc6\\x07\\x4c\\x1d\\x96\\x97\\x88\\xa4\\x1b\\xf7\\x8c\\xf7\\x59\\x1d\\xb7\\x1d\\x0e\\x34\\x0a\\x0e\\xf7\\x25\\xf8\\x3d\\x15\\x2a\\x06\"\n\"\\x2e\\x1d\\x7b\\x93\\x7b\\x99\\x81\\x1e\\x94\\x85\\x92\\x89\\xa1\\x8a\\x08\\xfb\\x6f\\x07\\x66\\x74\\x77\\x6c\\x69\\xa3\\x79\\xba\\x1f\\xe3\\x63\\x1d\\x81\\x91\"\n\"\\x4d\\x0a\\xf7\\x53\\x07\\xaa\\xa8\\x9c\\x94\\xa6\\x1b\\xa1\\x93\\x82\\x73\\xf7\\x1b\\x1d\\xf7\\x53\\x07\\xab\\xab\\x9a\\x93\\xa5\\x1b\\xa2\\x92\\x83\\x72\\xf7\"\n\"\\x1b\\x1d\\xf7\\x62\\x07\\xd5\\x52\\xc1\\x3c\\x63\\x6a\\x7d\\x6c\\x6d\\x1e\\xa8\\x6f\\x68\\x9b\\x64\\x1b\\x6d\\x78\\x84\\x73\\x6b\\x1f\\x0e\\xf7\\x5b\\x46\\x1d\"\n\"\\x0e\\x25\\x1d\\x0e\\xb8\\x1d\\xf8\\x3f\\x2e\\x15\\x55\\x06\\x73\\x80\\x89\\x86\\x82\\x1f\\x7b\\x81\\x81\\x7b\\x79\\x4b\\x0a\\x83\\x95\\x97\\x89\\xa5\\x1b\\xf7\"\n\"\\x42\\x06\\xa2\\x98\\xe0\\x0a\\x92\\x80\\x81\\x8d\\x70\\x1b\\x7f\\xf8\\x33\\x97\\x06\\xa4\\x95\\x8c\\x91\\x94\\x1f\\x9b\\x94\\x95\\x9d\\x9c\\x1a\\x9c\\x83\\x9b\"\n\"\\x7d\\x94\\x1e\\x93\\x20\\x0a\\xfb\\x0c\\x64\\x06\\xb0\\x5c\\x61\\x99\\x4e\\x1b\\xfb\\x23\\x22\\x2e\\xfb\\x13\\xfb\\x0c\\xf3\\x33\\xf7\\x22\\xc5\\xb9\\x9a\\xae\"\n\"\\xbb\\x1f\\xfb\\x25\\xf7\\xa7\\x15\\xb4\\xab\\x82\\x79\\xa5\\x1f\\xa6\\x78\\x9e\\x69\\x6d\\x1a\\x49\\x50\\x5d\\x34\\x63\\x6a\\x94\\x9d\\x72\\x1e\\x6f\\x9f\\x79\"\n\"\\xac\\xaa\\x1a\\xaa\\x9d\\xac\\xa7\\x9f\\x1e\\x9d\\xa4\\xab\\x94\\xb5\\x1b\\x0e\\x58\\x1d\\x0e\\x42\\x1d\\x0e\\xbb\\x1d\\x0e\\x2c\\x1d\\x0e\\xf7\\xc2\\xf7\\x15\"\n\"\\x15\\x24\\xf7\\x55\\x05\\xa3\\x95\\x8c\\x91\\xf7\\x43\\x1d\\x2f\\x1d\\xfb\\x18\\xbf\\x0a\\x96\\x06\\xf7\\x3c\\xfb\\xd6\\x05\\xf7\\x00\\x06\\xf7\\x3b\\xf7\\xd6\"\n\"\\x05\\x99\\x06\\xa4\\x94\\x8c\\x91\\x95\\x99\\x1d\\xfb\\x1b\\xbf\\x0a\\x8f\\x06\\x0e\\x3e\\x0a\\x0e\\x7a\\x0a\\xbb\\x1e\\xf7\\x04\\x63\\x1d\\x82\\x91\\x84\\x8d\"\n\"\\x78\\x8c\\x08\\x0e\\x59\\x1d\\x0e\\x40\\x0a\\x0e\\xf7\\xf4\\xf8\\x67\\x15\\xa3\\x8c\\x92\\x92\\xa3\\x1b\\xaa\\x8d\\xa1\\xa0\\xa8\\x1a\\xaa\\x73\\xa0\\x67\\x43\"\n\"\\x4e\\x50\\x46\\x1e\\xfb\\x31\\x07\\x73\\x86\\x85\\x73\\x89\\x1e\\x69\\x87\\x79\\x79\\x6d\\x1a\\x6c\\x9d\\x79\\xad\\x87\\x1e\\xa3\\x89\\x90\\x85\\x73\\x1a\\xfb\"\n\"\\x39\\x07\\x45\\xc8\\x50\\xd4\\xae\\xa3\\xa0\\xaa\\xa8\\x75\\xa0\\x6c\\x8d\\x1e\\x72\\x8c\\x85\\x91\\x8a\\xa4\\x08\\xf7\\x29\\x07\\xbe\\x86\\x9b\\x74\\xa6\\x1e\"\n\"\\xa1\\xa3\\x90\\x9d\\x8c\\xb5\\x08\\x0e\\xf7\\xfa\\xf9\\xcd\\x15\\xfb\\x08\\xfe\\xc7\\xf7\\x08\\x06\\x0e\\xf7\\x8c\\x81\\x15\\x72\\x8a\\x84\\x84\\x73\\x1b\\x6c\"\n\"\\x8a\\x75\\x75\\x6e\\x1a\\x6c\\xa3\\x76\\xae\\xd4\\xc8\\xc6\\xd1\\x1e\\xf7\\x30\\x07\\xa4\\x90\\x90\\xa3\\x8e\\x1e\\xad\\x8e\\x9d\\x9d\\xaa\\x1a\\xa9\\x79\\x9d\"\n\"\\x69\\x8f\\x1e\\x73\\x8d\\x86\\x91\\xa3\\x1a\\xf7\\x3a\\x07\\xd0\\x4e\\xc6\\x42\\x68\\x73\\x76\\x6c\\x6e\\xa1\\x76\\xaa\\x89\\x1e\\xa4\\x91\\x84\\x73\\x8c\\x1f\"\n\"\\xfb\\x2a\\x07\\x58\\x90\\x7c\\xa2\\x70\\x1e\\x76\\x72\\x85\\x79\\x8a\\x61\\x08\\x0e\\xf8\\x7c\\xf8\\x0b\\x15\\x75\\x7e\\x83\\x6f\\x75\\x1f\\x6e\\x75\\x7f\\x80\"\n\"\\xf7\\x1e\\x1d\\x6a\\x80\\x78\\xf7\\x10\\x1d\\x56\\xc8\\xb2\\x77\\xb5\\x1b\\xb5\\xab\\x9d\\xb6\\xb1\\x1f\\xae\\xb3\\x93\\x98\\xa0\\x1a\\xaa\\x71\\xa4\\x6b\\x1e\"\n\"\\x0e\\xf7\\x6e\\x23\\x15\\x8a\\x7e\\x8a\\x7e\\x83\\x1a\\x5e\\xb0\\x69\\xba\\xbb\\xb0\\xae\\xb7\\x93\\x8a\\x98\\x8a\\x98\\x1e\\x6e\\xf7\\xaf\\x05\\xaa\\x88\\x77\"\n\"\\x9e\\x6c\\x1b\\x6d\\x77\\x78\\x6c\\x88\\x1f\\xb8\\xf7\\x80\\x15\\x64\\x6c\\x6d\\x66\\x65\\xaa\\x6e\\xf7\\x47\\x1d\\xf7\\xf7\\xea\\x15\\xe4\\x9a\\xc6\\xb1\\xb4\"\n\"\\x1a\\xa7\\x72\\xa4\\x6e\\x7d\\x82\\x88\\x82\\x7d\\x1e\\x74\\x6a\\x6b\\x80\\x66\\x1b\\x45\\x56\\xb8\\xc6\\xca\\xc3\\xb8\\xd8\\xb7\\xa0\\x80\\x70\\x92\\x1f\\x92\"\n\"\\x6e\\x8b\\x8a\\x94\\x83\\x08\\x83\\x93\\x9b\\x85\\x98\\x1b\\x9c\\x9c\\x93\\x98\\x95\\x1f\\x93\\x96\\x8d\\x94\\xa5\\x1a\\xb3\\x07\\xa4\\x66\\x0a\\x84\\x85\\x8a\"\n\"\\x88\\x84\\x1f\\x79\\x96\\x73\\x92\\x6f\\x90\\x08\\xc7\\x07\\xa5\\x66\\x0a\\x7a\\x7b\\x84\\x7d\\x80\\x1f\\x83\\x80\\x89\\x81\\x71\\x1a\\x45\\x07\\x29\\x74\\x45\"\n\"\\x38\\x2e\\x1a\\x28\\xcd\\x3b\\xf1\\x73\\x1e\\x41\\x07\\x74\\x8d\\x80\\x91\\x83\\x1e\\x7b\\x95\\x9d\\x82\\xac\\x1d\\x94\\xa5\\x1a\\x0e\\xf7\\xce\\xf7\\x7c\\x15\"\n\"\\xa3\\x97\\x32\\x1d\\x9b\\x9d\\x31\\x0a\\x80\\x81\\x8d\\x6f\\x1b\\x4a\\x06\\x89\\x93\\x05\\x7a\\xc6\\x8b\\x8b\\x9f\\xc4\\x0a\\x3a\\x24\\x41\\x47\\x2d\\x6f\\x8f\"\n\"\\x76\\x97\\x6a\\x1f\\x64\\x06\\x71\\xdc\\x0a\\x7b\\x78\\x1a\\x7b\\x93\\x7c\\x99\\x81\\x1e\\x83\\x96\\x96\\x89\\xa5\\x1b\\xcc\\x06\\x8c\\x85\\x8b\\x84\\x89\\x1a\"\n\"\\x6a\\x85\\x6e\\x7f\\x74\\x1e\\x82\\x7a\\x80\\x84\\x74\\x87\\x08\\x66\\x83\\x7b\\x7c\\xef\\x0a\\xae\\x75\\xa1\\x6a\\x6e\\x79\\x7c\\x6e\\x86\\x1f\\xfb\\x56\\x06\"\n\"\\x9b\\xb2\\x90\\xa5\\xb4\\x1a\\x8e\\x8b\\x94\\x8a\\x95\\x1e\\x0e\\x9a\\x0a\\xf7\\xc1\\xf7\\xeb\\x15\\x34\\xf7\\x0a\\x05\\xa1\\x92\\x99\\x9e\\xa2\\x33\\x1d\\x80\"\n\"\\x83\\x8d\\x6d\\x1b\\x2f\\x06\\x71\\x83\\x8a\\x85\\x81\\x32\\x0a\\x96\\x84\\x94\\x89\\xa5\\x8a\\xf7\\x18\\xfb\\x4a\\x18\\x4b\\x06\\x74\\x7f\\x81\\x77\\x77\\x98\"\n\"\\x80\\xa1\\x1f\\xe8\\x72\\x2e\\xf7\\x0b\\x0a\\xe8\\x71\\x61\\x06\\x70\\x20\\x1d\\x7a\\x93\\x7b\\x99\\x82\\x1e\\x84\\x95\\x9a\\x88\\xa2\\x1b\\xf7\\x56\\x06\\xb9\"\n\"\\xa3\\x9c\\xae\\x9b\\x83\\x9b\\x7d\\x94\\x1f\\x93\\x7f\\x83\\x8d\\x6f\\x1b\\x60\\xa5\\xe8\\x69\\x0a\\x2e\\xa4\\xe8\\x06\\xa1\\x98\\x96\\x9f\\x9e\\x7f\\x96\\x74\"\n\"\\x1f\\x4b\\x06\\xf7\\x19\\xf7\\x4a\\x05\\xb7\\xa2\\x9d\\xad\\x9b\\x83\\x9b\\x7d\\x94\\x1f\\x93\\x20\\x0a\\x30\\x06\\x70\\xdc\\x0a\\x7a\\x79\\x1a\\x75\\x9a\\x78\"\n\"\\xa2\\x84\\x1e\\x0e\\xf7\\xfa\\xf8\\x1d\\x15\\xb8\\x07\\xb5\\xaa\\xac\\xb1\\x9d\\x9a\\x88\\x86\\x9a\\x1e\\x86\\x97\\x91\\x8a\\x92\\x1b\\xa8\\xa2\\xa3\\xa9\\xb3\"\n\"\\x5d\\xa2\\x3d\\x29\\x3b\\x3d\\x2a\\x1f\\x5b\\x56\\x07\\x70\\x83\\xd1\\x0a\\xa6\\x1b\\xc0\\xfb\\x73\\x06\\x5b\\x6d\\x6a\\x5f\\x7a\\x7f\\x8d\\x91\\x79\\x1e\\x8f\"\n\"\\x7c\\x89\\x8c\\x84\\x1b\\x6f\\x73\\x73\\x6f\\x63\\xba\\x73\\xda\\xf0\\xd9\\xdb\\xf3\\x1f\\xf7\\x73\\xc0\\x07\\xa3\\x97\\x32\\x1d\\x9b\\x9e\\x33\\x1d\\x7f\\x83\"\n\"\\x8d\\x6e\\x1b\\x0e\\xf8\\x3f\\xf8\\x6a\\x15\\x6c\\x07\\x65\\x9b\\x78\\xab\\x9b\\x9a\\x92\\x97\\x94\\x1e\\x92\\x94\\x8c\\x91\\xa2\\x1a\\xf7\\x11\\xfb\\x79\\x07\"\n\"\\x55\\x66\\x7d\\x6a\\x6b\\x1f\\x6f\\x6f\\x7c\\x67\\x65\\x1a\\x82\\x8c\\x86\\x8e\\x80\\x1e\\x4c\\x7a\\x66\\x61\\x52\\x1a\\x53\\xae\\x65\\xf0\\x53\\x1e\\xf5\\x51\"\n\"\\x05\\xd0\\x66\\xad\\x6d\\x74\\x1a\\x73\\x6d\\x75\\x6a\\x1e\\xfb\\x21\\xac\\x06\\xb1\\x7b\\x9d\\x6b\\x6b\\x7b\\x78\\x66\\x1e\\xfb\\x11\\xf7\\x7f\\x07\\xc1\\xae\"\n\"\\x99\\xac\\xaa\\x1f\\xa5\\xa6\\x98\\xaa\\xae\\x1a\\x96\\x8a\\x92\\x88\\x9a\\x1e\\xcb\\x99\\xb0\\xb6\\xc6\\x1a\\xc9\\x6b\\xac\\xfb\\x0a\\xca\\x1e\\x2f\\xbc\\x05\"\n\"\\x45\\xb1\\x68\\xa8\\xa1\\x1a\\xa5\\xa8\\xa0\\xb0\\x1e\\xdd\\xfb\\x9e\\x15\\xc6\\x6b\\xaf\\x6b\\x76\\x1a\\x78\\x7a\\x83\\x64\\x1e\\x7a\\x99\\x7c\\x95\\x56\\xaa\"\n\"\\x24\\xc3\\x18\\x51\\xab\\x71\\xa4\\xa1\\x1a\\x9e\\x9d\\x95\\xaf\\x1e\\xb3\\x6e\\x92\\x86\\xac\\x79\\x08\\x0e\\xf7\\x12\\xf8\\x09\\x15\\x79\\x6a\\x85\\x74\\x69\"\n\"\\x1a\\x69\\x91\\x74\\x9d\\x69\\x1e\\x6d\\x6d\\x05\\x74\\x74\\x87\\x84\\x79\\x1a\\x6e\\xa4\\x73\\xa9\\x9e\\x92\\x8f\\xa2\\xa3\\x1e\\xa9\\xa7\\x05\\x7a\\xaf\\xa3\"\n\"\\x85\\xaf\\x1b\\xae\\xa3\\x91\\x9c\\xae\\x1f\\xab\\x6e\\x05\\x75\\xa2\\x93\\x87\\x9d\\x1b\\xaa\\xa4\\xa3\\xa8\\x9c\\x86\\x94\\x75\\xa1\\x1f\\x6c\\xa8\\x05\\x9e\"\n\"\\xae\\x91\\xa2\\xad\\x1a\\xac\\x85\\xa2\\x79\\xad\\x1e\\xa8\\xa8\\x05\\xa2\\xa0\\x8f\\x93\\x9d\\x1a\\xa8\\x73\\xa2\\x6c\\x78\\x84\\x87\\x75\\x73\\x1e\\x6f\\x71\"\n\"\\x05\\x9e\\x66\\x73\\x91\\x67\\x1b\\x67\\x73\\x85\\x78\\x67\\x1f\\x6c\\xa7\\x05\\xa1\\x74\\x83\\x8f\\x79\\x1b\\x6d\\x72\\x74\\x6e\\x7d\\x96\\x78\\x9b\\x7b\\x1f\"\n\"\\xf7\\x60\\x6c\\x15\\xbd\\xb3\\x64\\x5c\\x5a\\x63\\x63\\x59\\x5a\\x62\\xb3\\xbb\\xbb\\xb3\\xb2\\xbd\\x1f\\x0e\\xf7\\x7b\\xf8\\xdb\\x15\\xf7\\x6a\\x1d\\xa1\\x95\"\n\"\\xf7\\x11\\x0a\\xf7\\x7d\\xbd\\x0a\\xf7\\x19\\xf7\\x60\\xf7\\x01\\x0a\\x94\\x85\\x9a\\x1b\\x9e\\x9b\\x99\\x9c\\x91\\x8a\\x92\\x88\\x92\\x1f\\x0e\\xf7\\x49\\xf7\"\n\"\\x68\\xf7\\x40\\x1d\\x77\\x7f\\x88\\x8a\\x7e\\x7b\\x1e\\xfb\\x91\\xfb\\x46\\xf7\\x91\\xfb\\x47\\x05\\x7e\\x9b\\x8e\\x8a\\x97\\x1b\\x9f\\x9b\\x99\\x9e\\x95\\x86\"\n\"\\x92\\x7f\\x96\\x1f\\xdc\\xf7\\x18\\x15\\xf7\\x28\\xf7\\x17\\x05\\x97\\x96\\x90\\x92\\x95\\x1a\\x9e\\x7b\\x99\\x77\\x7f\\x88\\x8a\\x7e\\x7b\\x1e\\xfb\\x91\\xfb\"\n\"\\x46\\xf7\\x91\\xfb\\x47\\x05\\x7e\\x9b\\x8e\\x8a\\x97\\x1b\\x9f\\xf7\\x05\\x0a\\xf7\\x49\\xf7\\x68\\xf7\\x40\\x1d\\x76\\x80\\x88\\x8a\\x7e\\x7b\\x1e\\xfb\\x91\"\n\"\\xfb\\x46\\xf7\\x91\\xfb\\x47\\x05\\x7e\\x9c\\x8d\\x8a\\x96\\x1b\\xa0\\xf7\\x05\\x0a\\x97\\x0a\\x0e\\xf7\\x5b\\xf7\\xd6\\x15\\x8d\\x0a\\x69\\x07\\x70\\x5c\\x1d\"\n\"\\xa6\\x1b\\xad\\xfb\\x6f\\x65\\x06\\x70\\x20\\x1d\\x69\\xa3\\x79\\xba\\x1e\\xf7\\x43\\x06\\x9f\\x9b\\x8e\\x8f\\x93\\x61\\x0a\\x82\\x8d\\x6f\\x1b\\x6e\\x06\\xf7\"\n\"\\xd6\\xf7\\xd6\\x15\\xfb\\x10\\x06\\x71\\x83\\x8a\\x85\\x81\\x1f\\x7b\\x82\\x81\\x79\\x79\\x1a\\x7b\\x93\\x7c\\x99\\x80\\x1e\\x84\\x96\\x95\\x89\\xa6\\x1b\\x9b\"\n\"\\xfb\\x6f\\x69\\x06\\x70\\x20\\x1d\\x69\\xa3\\x79\\xba\\x1e\\xf7\\x42\\x31\\x1d\\x6b\\x06\\x7a\\xf8\\x88\\x15\\xfb\\x12\\xfb\\x00\\xf7\\x12\\x06\\x0e\\xf7\\x58\"\n\"\\xf7\\xd6\\x15\\xa8\\x06\\xa3\\x96\\x38\\x1d\\x6e\\xac\\x06\\xa4\\x99\\x9b\\xa1\\x96\\x91\\x8a\\x84\\xa3\\x1e\\x87\\x98\\x94\\x89\\x93\\x1b\\x9c\\x99\\x93\\x9b\"\n\"\\x96\\x1f\\x94\\x84\\x94\\x89\\x9b\\x8a\\x08\\xa9\\xfc\\x20\\x69\\x06\\x70\\x49\\x0a\\x69\\xa3\\x79\\xba\\x1e\\xf7\\x43\\xb2\\x0a\\x6a\\xf8\\x87\\xfb\\x1a\\x06\"\n\"\\x72\\x7c\\x84\\x79\\x81\\x1f\\x9b\\x6e\\x66\\x94\\x62\\x1b\\x3e\\x4e\\x4b\\x3a\\x1f\\x6b\\x6a\\x07\\x70\\x5c\\x1d\\xa6\\x1b\\xac\\xfb\\x6f\\x64\\x5b\\x0a\\xf7\"\n\"\\x44\\x06\\x9f\\x9b\\x8e\\x8f\\x93\\x61\\x0a\\x81\\x8d\\x70\\x1b\\x6e\\x06\\x0e\\x7e\\x1d\\xc4\\x1d\\xfb\\xea\\xc0\\x0a\\x0e\\xc4\\x1d\\x65\\x35\\x06\\x73\\x80\"\n\"\\x89\\x86\\x82\\x32\\x0a\\x83\\x96\\x94\\x89\\xa7\\x1b\\xe1\\xfb\\x5e\\x06\\x74\\x8d\\x80\\x91\\x83\\xe3\\x0a\\x93\\xa6\\x1a\\xf7\\x5e\\xe0\\x07\\xa5\\x94\\x8d\"\n\"\\x90\\x95\\x1f\\x9b\\x95\\x95\\x9c\\x9c\\x1a\\x9c\\x83\\x9a\\x7c\\x95\\x1e\\x93\\x2f\\x1d\\x36\\x06\\x0e\\x85\\x1d\\xf8\\x6f\\xf8\\x76\\x15\\xa9\\x06\\xb2\\x9e\"\n\"\\x99\\xa6\\xa6\\x78\\x99\\x64\\x1f\\xfb\\x59\\x06\\xfb\\x23\\x8c\\xfb\\x0b\\x3c\\x8d\\x2e\\x08\\x5f\\x07\\x88\\x37\\xee\\x3e\\xf7\\x11\\x80\\x08\\xfb\\x99\\x40\"\n\"\\x07\\x76\\x84\\x8a\\x86\\x83\\x1f\\x7e\\x83\\x83\\x7e\\x7d\\x1a\\x70\\x9e\\x7d\\xb1\\x1e\\xf7\\x1d\\x06\\xa3\\x95\\x91\\x9f\\x94\\x1f\\x79\\x93\\x99\\x83\\x9d\"\n\"\\x1b\\xe8\\x06\\xb2\\x9e\\x98\\xa7\\xa6\\x78\\x99\\x64\\x1f\\x6b\\x06\\x37\\xf8\\xca\\x15\\xfc\\xcc\\x07\\x82\\x86\\x88\\x87\\x86\\x83\\x86\\x94\\x87\\x8e\\x81\"\n\"\\x91\\x08\\xf8\\xcb\\x07\\x0e\\xf7\\xbc\\xf8\\x59\\x15\\x38\\x49\\x49\\x37\\x38\\xcd\\x48\\xdd\\xdc\\xcd\\xce\\xde\\xdd\\x49\\xcf\\x3b\\x1f\\x0e\\xf4\\x1d\\xf7\"\n\"\\x30\\xf7\\x1c\\x15\\xc1\\x0a\\xc5\\x16\\xc1\\x0a\\x0e\\xf7\\x30\\xf8\\xdb\\x15\\xf7\\x0a\\x1d\\xc5\\x16\\xf7\\x0a\\x1d\\x0e\\x97\\x0a\\x39\\xfb\\x18\\xdc\\x1d\"\n\"\\x0e\\xf7\\x01\\x7d\\x15\\x49\\x1d\\xf7\\x6e\\x16\\x49\\x1d\\xf7\\x6e\\x16\\x49\\x1d\\x0e\\xf8\\x69\\xf8\\x00\\x15\\xa0\\x92\\x93\\x93\\x9a\\x1a\\x9c\\x7e\\x99\"\n\"\\x7b\\x86\\x89\\x8b\\x87\\x7f\\x1e\\xfc\\x01\\xfb\\x05\\x05\\x76\\x85\\x83\\x82\\x7c\\x1a\\x7a\\x98\\x7c\\x9a\\x91\\x8d\\x8b\\x90\\x97\\x1e\\x97\\xf7\\xee\\x82\"\n\"\\x1d\\xed\\xfb\\xd1\\x82\\x1d\\xf7\\xa2\\xc3\\x82\\x1d\\x0e\\xf8\\x88\\xfb\\x33\\x15\\xd9\\x07\\xa2\\x89\\x96\\x85\\x93\\xf7\\x60\\x1d\\x80\\x1f\\x83\\x80\\x89\"\n\"\\x84\\x6f\\x1a\\x80\\x07\\x7c\\x69\\x6d\\x84\\x67\\x1b\\x4c\\x61\\xaa\\xb9\\xb2\\xae\\xa3\\xf7\\x15\\xba\\x1f\\xc3\\x07\\xa2\\x89\\x95\\x85\\x94\\x1e\\x9a\\x81\"\n\"\\x79\\x95\\x79\\x1b\\x6d\\x78\\x79\\x69\\x87\\x1f\\xfb\\x0d\\x58\\x5f\\x5c\\x3d\\x1a\\xfb\\x02\\xe1\\x40\\xf7\\x13\\xca\\xb9\\x97\\xb5\\xe6\\x1e\\xfb\\x5f\\xf8\"\n\"\\xaf\\x15\\x64\\x6c\\x6e\\x65\\x66\\xaa\\x6d\\xf7\\x47\\x1d\\xf7\\x58\\xf9\\x24\\x5a\\x0a\\xf8\\x5b\\xf8\\xe8\\xac\\x0a\\x90\\x96\\x99\\x1e\\x0e\\xf7\\xc1\\xf8\"\n\"\\xd6\\x2e\\x0a\\xf8\\x59\\xf9\\x0e\\x15\\x7d\\x7e\\x81\\x77\\x7b\\x1f\\x6f\\x77\\x87\\x88\\x7e\\xe7\\x0a\\x7c\\x6d\\x71\\x1f\\x79\\x76\\x81\\x78\\x7d\\x1a\\x78\"\n\"\\x9a\\x7d\\x9f\\x96\\x94\\x90\\x96\\x94\\x1e\\xaf\\xa7\\x93\\x91\\x9b\\xb1\\x0a\\xf7\\x46\\xf8\\xf1\\x37\\x1d\\xf7\\x34\\xf9\\x2c\\x3b\\x1d\\xf7\\xc0\\xf9\\x0c\"\n\"\\x36\\x0a\\x0e\\xf7\\x58\\xf9\\x0c\\x28\\x0a\\xf7\\xc0\\xf9\\x52\\xe4\\x1d\\xf7\\x96\\x93\\x15\\x21\\x07\\xd7\\x1d\\xb3\\x07\\x0e\\xf7\\xba\\xf8\\xe7\\xca\\x1d\"\n\"\\xf7\\xdc\\x93\\x15\\x4f\\x66\\x75\\x6c\\x59\\x1a\\x54\\x60\\x1d\\x80\\x1e\\x7d\\x6e\\x83\\x88\\x7f\\x1b\\x7e\\x84\\x90\\x95\\x9a\\x97\\xa1\\x9b\\x9b\\x1f\\x9c\"\n\"\\x9c\\x98\\x94\\xbe\\xac\\x08\\x0e\\xf7\\xc1\\xf8\\xcc\\x45\\x1d\\x91\\x0a\\x75\\x0a\\x0e\\xf7\\xf2\\xf7\\xa3\\x15\\xe4\\x06\\xae\\x9e\\x9a\\xa5\\xa7\\x79\\x99\"\n\"\\x66\\x1f\\x89\\xf7\\x0a\\x06\\xcd\\x56\\xb1\\x30\\x67\\x5a\\x83\\x7f\\x6a\\x1e\\x79\\x85\\x82\\x7f\\x79\\x1a\\x74\\x9e\\x78\\xa1\\x92\\x96\\x8d\\x8e\\x97\\x1e\"\n\"\\x93\\xae\\x9e\\x8e\\xa4\\x1b\\xb1\\x9a\\x85\\x7b\\x1f\\x87\\x07\\x8f\\x71\\x7e\\x8c\\x78\\x1b\\x46\\x5c\\x7b\\x67\\x6a\\x1f\\x79\\x78\\x80\\x73\\x75\\x1a\\x56\"\n\"\\xc5\\x60\\xd5\\xb1\\xa7\\x90\\x9a\\xb1\\x1e\\xe6\\x04\\x7a\\x6e\\x65\\x80\\x6c\\x1b\\x74\\x7b\\x92\\x95\\x9f\\xaf\\x9d\\xb1\\x9f\\x98\\x8a\\x86\\xa9\\x1f\\x0e\"\n\"\\xf7\\x98\\xf8\\x61\\x15\\xc0\\x69\\x1d\\xfb\\x6a\\x06\\x5d\\x0a\\xc0\\xfb\\x2c\\x06\\x25\\x53\\x05\\x6a\\x79\\x82\\x80\\x74\\x1a\\x6f\\xa4\\x72\\xa6\\x98\\x96\"\n\"\\x8f\\x96\\x9f\\x1e\\xbb\\xa6\\x05\\x34\\x56\\x07\\x71\\x20\\x1d\\x2d\\x0a\\x1e\\xf8\\x70\\xf7\\x4e\\x06\\xa4\\x89\\x94\\x85\\x94\\x74\\x0a\\x79\\x54\\x1d\\x81\"\n\"\\x71\\x1a\\x38\\xfb\\x63\\xf7\\x17\\x07\\xf7\\x1b\\xd7\\x05\\xab\\x9d\\x94\\x96\\xa3\\x1a\\xa6\\x73\\xa3\\x70\\x7f\\x7d\\x86\\x82\\x7a\\x1e\\x39\\x5d\\x05\\x0e\"\n\"\\x7e\\x0a\\x0e\\xf8\\x06\\xf7\\x7c\\x15\\x96\\x06\\x69\\x8d\\xa0\\x77\\xaa\\x1b\\x9b\\x9b\\x93\\x98\\x96\\x1f\\x93\\x96\\x8d\\x94\\xa5\\x1a\\xd5\\x07\\xa5\\x66\"\n\"\\x0a\\x6c\\x79\\x79\\x68\\x87\\x1f\\x80\\xf7\\x13\\xf7\\x0b\\x51\\xc0\\x0a\\xf7\\x35\\xfb\\xe6\\x07\\xfb\\x39\\xfb\\x0a\\xfb\\x09\\xfb\\x39\\xfb\\x38\\xf7\\x0a\"\n\"\\xfb\\x0a\\xf7\\x39\\x1f\\xf7\\xf9\\xf7\\x0c\\x06\\xa5\\x8a\\x92\\x85\\x4d\\x1d\\x82\\x70\\x1a\\x7a\\xfb\\x1f\\x07\\xfb\\x00\\x16\\x60\\x73\\x91\\x9b\\x70\\x1f\"\n\"\\x59\\xa9\\x69\\xca\\xcb\\x1a\\xc5\\xa9\\xc8\\xb6\\xaa\\x1e\\xa8\\x9f\\xa8\\x93\\xba\\x8c\\x08\\x0e\\xf7\\xc1\\xf8\\xd4\\x15\\x2c\\x3c\\x42\\x33\\x35\\xd8\\x47\"\n\"\\xec\\xeb\\xd9\\xcf\\xdf\\xe6\\x3e\\xd3\\x2a\\x1f\\x39\\x04\\xba\\xb3\\x67\\x61\\x63\\x63\\x6a\\x5c\\x5d\\x62\\xad\\xb0\\xb7\\xb2\\xaf\\xbb\\x1f\\x0e\\x76\\x0a\"\n\"\\x0e\\x25\\x0a\\x0e\\xf7\\xf6\\xf8\\xef\\x15\\xfb\\x47\\x06\\x71\\x82\\x89\\x86\\x81\\x3c\\x1d\\x83\\x96\\x97\\x89\\xa5\\x1b\\xd2\\xfb\\x2b\\x06\\x3a\\x60\\x05\"\n\"\\x6d\\x7b\\x80\\x7c\\x75\\x1a\\x6f\\xa3\\x72\\xa7\\x97\\x95\\x8f\\x95\\x9f\\x1e\\xa7\\x9b\\x05\\xfb\\x12\\xfb\\x0a\\x07\\x71\\x49\\x0a\\x2d\\x0a\\x1e\\xf7\\xec\"\n\"\\x29\\x0a\\xfb\\x0a\\xf7\\x3c\\x06\\xde\\xb9\\x05\\xaa\\x9b\\x95\\x98\\xa2\\x1a\\xa8\\x73\\xa4\\x6f\\x7d\\x84\\x88\\x7f\\x75\\x1e\\x6e\\x7a\\x05\\x0e\\x80\\x0a\"\n\"\\x0e\\xf8\\xfc\\xf7\\x37\\x15\\xba\\x07\\xd1\\x77\\xc6\\x67\\xb2\\x1e\\xb2\\x67\\x60\\x9f\\x5e\\x1b\\x56\\x5c\\x71\\x5c\\x6a\\x1f\\xbb\\x67\\x5d\\xa4\\x58\\x1b\"\n\"\\x23\\x3a\\x26\\xfb\\x16\\xfb\\x0f\\xde\\x29\\xf2\\xbd\\xba\\xa3\\xb6\\xae\\x1f\\x5f\\xac\\xb9\\x74\\xc2\\x1b\\xb5\\xcb\\x98\\x9b\\xae\\x1f\\xa8\\x99\\x95\\x99\"\n\"\\xa3\\x1a\\xa9\\x73\\xa3\\x6e\\x82\\x83\\x89\\x88\\x83\\x1e\\x73\\x53\\x80\\x88\\x6f\\x1b\\x63\\x71\\xa4\\xbd\\x7e\\x1f\\xfb\\x54\\xf7\\x3e\\x15\\xb6\\xaf\\x54\"\n\"\\x49\\x45\\x68\\x55\\x5e\\x60\\x67\\xc2\\xce\\xcf\\xaf\\xc2\\xb7\\x1f\\xf7\\x57\\x3b\\x15\\xc3\\x98\\x9f\\xa3\\xac\\x1b\\xab\\xa0\\x72\\x54\\x97\\x1f\\x0e\\xe6\"\n\"\\xf7\\xb0\\x15\\xfb\\x49\\x7f\\x07\\xaf\\x1d\\x82\\x81\\x79\\xf7\\x6b\\x1d\\x98\\x88\\xa4\\x1b\\xf7\\x0c\\xf8\\x50\\x06\\xaf\\xa3\\x9e\\xb8\\xb7\\xa9\\x74\\x69\"\n\"\\x7c\\x82\\x7c\\x7d\\x82\\x1e\\x80\\x84\\x84\\x8a\\x71\\x88\\x08\\x67\\x87\\x77\\x79\\x6d\\x1a\\x6d\\x9e\\x7a\\xb3\\x87\\x1e\\xbe\\x86\\xa9\\x7f\\xa5\\x73\\x08\"\n\"\\xa5\\x74\\x99\\x6c\\x69\\x1a\\x5f\\x7a\\x6f\\x71\\x7d\\x82\\x93\\x9b\\x88\\x1e\\xac\\x83\\x7d\\x97\\x6e\\x1b\\x6a\\x76\\x74\\x66\\x4a\\xbf\\x5c\\xd2\\xb9\\xb1\"\n\"\\x9a\\xa6\\xa5\\x1f\\xaa\\xad\\x9d\\xbc\\xbe\\x1a\\xdc\\x62\\xcf\\x41\\xb6\\x1e\\xa3\\xa8\\x93\\xa0\\xaf\\x1a\\xe8\\x3d\\xd1\\x23\\x23\\x42\\x50\\x38\\x1e\\x43\"\n\"\\x7f\\x07\\xce\\x0a\\x7b\\x94\\x7b\\x98\\x81\\x1e\\x84\\x95\\x98\\x88\\xa4\\x1b\\x0e\\xf7\\xe2\\xf8\\xfc\\x15\\xfb\\x18\\x6a\\x05\\x72\\x85\\x82\\x82\\x79\\x1a\"\n\"\\x78\\x99\\x7c\\x9c\\x91\\x8d\\x8b\\x8f\\x97\\x1e\\xbb\\x97\\x05\\xfb\\x79\\x52\\x07\\x6d\\x7d\\x80\\x76\\x76\\x9a\\x7f\\xa8\\x1f\\xf7\\x49\\x06\\xa7\\x9a\\x97\"\n\"\\xa0\\xa0\\x7d\\x96\\x6e\\x1f\\x52\\x06\\x0e\\xf8\\x76\\xf8\\x19\\x15\\xfb\\x55\\x07\\x77\\x94\\x80\\x9c\\x9c\\x94\\x96\\x9f\\x1e\\xf7\\x88\\xfc\\x46\\x07\\x75\"\n\"\\x80\\x82\\x7a\\x7b\\x96\\x82\\xa1\\x1f\\x0e\\xf7\\x5f\\x82\\x15\\x86\\xa0\\x95\\x8a\\x9e\\x1b\\xbd\\xbc\\x95\\xa1\\xbd\\x1f\\x7a\\xf2\\x07\\xa1\\x9a\\x8d\\x91\"\n\"\\x94\\x1f\\x9d\\x95\\x95\\x9d\\x9e\\x1a\\xac\\x75\\x9f\\x64\\x8d\\x1e\\xf7\\xd2\\xfb\\x23\\x07\\x71\\x81\\x89\\x85\\x81\\x1f\\x7a\\x81\\x80\\x79\\x78\\x1a\\x7a\"\n\"\\x94\\x7a\\x9a\\x81\\x1e\\x83\\x96\\x98\\x88\\xa5\\x1b\\xa6\\xfb\\x43\\x06\\x68\\x4e\\x63\\x7e\\x61\\x1b\\x62\\x7c\\x98\\xaf\\x1f\\xf7\\xb0\\xfb\\x10\\x07\\x7b\"\n\"\\x06\\x6b\\x71\\x73\\x6c\\x7a\\x94\\x7a\\x9a\\x81\\x1f\\x83\\x96\\x98\\x88\\xa5\\x1b\\x93\\xfc\\x1c\\x06\\xf7\\x31\\x1d\\x94\\x96\\x8d\\x95\\xa5\\x1a\\x0e\\xf7\"\n\"\\x37\\xf8\\x81\\x15\\xb0\\x5a\\x06\\x6f\\x96\\x7d\\xa0\\xa0\\x96\\x99\\xa7\\x1e\\xf7\\x06\\xfb\\x9d\\xfb\\x06\\x07\\x6f\\x96\\x7d\\xa0\\xa0\\x95\\x99\\xa7\\x1e\"\n\"\\xbc\\xb0\\xfb\\x68\\x74\\x07\\x6f\\x7e\\x80\\x76\\x75\\x99\\x80\\xa5\\x1f\\xf7\\x03\\x06\\xa6\\x99\\x96\\xa1\\xa0\\x7e\\x96\\x6f\\x1f\\x74\\x06\\xf7\\x67\\xf7\"\n\"\\x24\\x15\\xc7\\xfb\\x16\\x05\\x99\\x06\\xc3\\xf7\\x15\\x05\\xfb\\x23\\x07\\x7a\\x8a\\x8b\\x89\\x85\\x1f\\x80\\x87\\x83\\x7e\\x7e\\x1a\\x75\\x99\\x80\\xa5\\x1e\"\n\"\\xc7\\x06\\xa5\\x99\\x96\\xa1\\x9e\\x80\\x96\\x75\\x8d\\x1f\\xf7\\x69\\x07\\x9f\\x8e\\x94\\x96\\x9d\\x1a\\xa1\\x7e\\x95\\x6f\\x1e\\x47\\x06\\x5a\\xfb\\x13\\x59\"\n\"\\xf7\\x13\\x05\\x49\\x06\\x6f\\x7e\\x81\\x75\\x79\\x95\\x80\\x9e\\x88\\x1f\\xfb\\x69\\x07\\x74\\x89\\x80\\x80\\x78\\x1a\\x75\\x99\\x80\\xa6\\x1e\\xc6\\x06\\xa5\"\n\"\\x99\\x96\\xa1\\xa1\\x7f\\x95\\x6c\\x1f\\x0e\\xb9\\x1d\\xf7\\x36\\xf9\\x10\\x7f\\x1d\\xf7\\xbd\\xf7\\x4e\\x15\\x8f\\x93\\x8f\\x99\\x90\\x1a\\x9b\\x7b\\x9a\\x7a\"\n\"\\x7d\\x82\\x84\\x79\\x81\\xf7\\x3c\\x1d\\x99\\x95\\x93\\x9c\\x94\\x1e\\xf7\\x6d\\x68\\x15\\xf7\\x19\\xf7\\x0e\\x9e\\xa4\\xbc\\x1a\\xce\\x56\\xbc\\x42\\x68\\x6a\"\n\"\\x7f\\x76\\x74\\x1e\\x76\\x78\\x7c\\x6e\\x77\\x1a\\x7a\\x9a\\x7d\\x9c\\x98\\x96\\x93\\x96\\x8f\\x1e\\x92\\x9e\\x8b\\x8b\\x90\\x91\\x08\\x9a\\x97\\x9e\\x93\\xa0\"\n\"\\x1b\\xae\\xa6\\x76\\x6f\\x71\\x77\\x76\\xfb\\x33\\xfb\\x21\\x1f\\x81\\x82\\x05\\x49\\xf7\\x95\\xc2\\x07\\xa6\\x81\\x99\\x76\\x79\\x81\\x80\\x77\\x88\\x1e\\x0e\"\n\"\\xf7\\xf6\\xf7\\xcf\\xf7\\x23\\x1d\\x95\\x1e\\x92\\x80\\x82\\x8d\\x6e\\x1b\\xfb\\x1d\\xf7\\x0a\\xf7\\x09\\x1d\\xfb\\x0a\\xfb\\x1e\\x07\\x71\\x83\\x8a\\x85\\x81\"\n\"\\x48\\x0a\\x84\\x96\\x97\\x88\\xa4\\x1b\\xf7\\x1e\\x30\\x06\\x74\\x8d\\x81\\x91\\x82\\x1e\\x7c\\x94\\x9e\\xe5\\x0a\\xfb\\x8a\\xfb\\x0d\\x94\\x0a\\xf7\\x5b\\xf7\"\n\"\\x1a\\x15\\xe9\\x06\\xf3\\xbf\\x9b\\xb6\\xb5\\x1f\\xa2\\xa3\\x98\\xac\\xac\\x1a\\xac\\x7e\\xab\\x74\\xa3\\x1e\\xb6\\x61\\x57\\x9b\\x23\\x1b\\x2d\\xa9\\xea\\x06\"\n\"\\xa4\\x95\\x32\\x1d\\x9b\\x9d\\x1a\\xae\\x73\\x9c\\x5d\\x1e\\xfb\\x6a\\x06\\x76\\x7c\\x89\\x86\\x83\\x6d\\x0a\\x7b\\x99\\x82\\x1e\\x83\\x96\\x94\\x89\\xa7\\x1b\"\n\"\\x96\\xfb\\xfa\\x80\\x06\\x72\\x82\\x89\\x86\\x61\\x1d\\xf7\\x6a\\x29\\x0a\\x2c\\x06\\xf7\\x1a\\x04\\xe6\\xf7\\x13\\x07\\xcb\\xa6\\x7e\\x6a\\x6b\\x70\\x7e\\x4b\"\n\"\\x1f\\x0e\\xf8\\xb5\\xf7\\xe9\\x15\\x37\\x06\\xfb\\x26\\xfb\\x7e\\x05\\x56\\xf7\\x37\\x7c\\x78\\x07\\x6e\\x7d\\x80\\x76\\x75\\x9a\\x80\\xa7\\x1f\\xda\\x06\\xa8\"\n\"\\x9a\\x96\\xa1\\x9e\\x7e\\x97\\x73\\x8c\\x1f\\x9a\\x07\\xa3\\x8c\\x98\\x97\\x9f\\x1a\\x9e\\x7d\\x97\\x74\\x8c\\x1e\\x48\\x16\\x3c\\x06\\xda\\xf7\\x10\\x05\\xfb\"\n\"\\xd0\\xf8\\x1d\\x7f\\x1d\\xf7\\xca\\xf7\\x4e\\x15\\x8f\\x92\\x8f\\x9a\\xf5\\x0a\\xfb\\x7c\\xfc\\x47\\x05\\x85\\x80\\x88\\x82\\x84\\x1a\\x7b\\x9b\\x7c\\x9c\\x99\"\n\"\\x95\\x93\\x9c\\x95\\x1e\\x0e\\x92\\x0a\\xfb\\x54\\xfb\\x35\\x15\\x5c\\x6b\\x70\\x63\\x62\\xab\\x70\\xb9\\xbb\\xab\\xa5\\xb4\\xb5\\x6c\\xa5\\x5b\\x1f\\xf7\\xf7\"\n\"\\x04\\x5c\\x6b\\x70\\x63\\x62\\xab\\x70\\xba\\xba\\xab\\xa5\\xb4\\xb5\\x6c\\xa5\\x5b\\x1f\\x0e\\xf7\\xfa\\xf8\\xa8\\x15\\x9f\\x8a\\x91\\x88\\x95\\x1e\\x9e\\x83\"\n\"\\x74\\x9a\\x74\\x1b\\x79\\x79\\x83\\x7d\\x80\\x1f\\x83\\x80\\x88\\x80\\x71\\x1a\\xfb\\x53\\x07\\x74\\x8d\\x80\\x91\\x81\\x1e\\x7b\\x96\\x9e\\x81\\x9f\\x1b\\xad\"\n\"\\xa3\\xa3\\xaf\\x1f\\x95\\x07\\xfb\\x74\\x04\\xa3\\x89\\x95\\x85\\x95\\x1e\\x9b\\x80\\x78\\x95\\x77\\x1b\\x79\\x79\\x83\\x7d\\x80\\x1f\\x83\\x80\\x88\\x80\\x71\"\n\"\\x1a\\xfb\\x53\\x07\\xf7\\x31\\x1d\\x93\\x95\\x8e\\x96\\xa5\\x1a\\x0e\\xf7\\xc0\\xf8\\xd5\\x15\\x28\\x3b\\x3e\\x2c\\x2c\\xdb\\x3d\\xec\\xf0\\xdb\\xd7\\xec\\xea\"\n\"\\x3b\\xd8\\x28\\x1f\\x49\\x04\\xc8\\xbc\\x5c\\x4f\\x52\\x59\\x5a\\x50\\x4d\\x5a\\xba\\xc7\\xc6\\xbc\\xba\\xc8\\x1f\\x0e\\xf7\\x3d\\x1d\\xf7\\x12\\x21\\xe9\\xfb\"\n\"\\x22\\x4f\\x61\\x7d\\x67\\x5c\\x1f\\xf7\\x6c\\xfb\\x0c\\x07\\x77\\x84\\x8b\\x88\\x81\\x1f\\x78\\x84\\x7d\\x77\\xf7\\x45\\x1d\\xfc\\xe5\\xc2\\x1d\\xf7\\x0a\\xf8\"\n\"\\x79\\xbf\\x1d\\xf8\\x2a\\xfb\\x24\\x15\\x37\\x06\\xfb\\x26\\xfb\\x7e\\x05\\x56\\xf7\\x37\\x7c\\x78\\x07\\x6e\\x7d\\x80\\x76\\x75\\x9a\\x80\\xa7\\x1f\\xda\\x06\"\n\"\\xa8\\x9a\\x96\\xa1\\x9e\\x7e\\x97\\x73\\x8c\\x1f\\x9a\\x07\\xa3\\x8c\\x98\\x97\\x9f\\x1a\\x9e\\x7d\\x97\\x74\\x8c\\x1e\\x48\\x16\\x3c\\x06\\xda\\xf7\\x10\\x05\"\n\"\\x85\\xf7\\x9e\\xe2\\x1d\\xf7\\x91\\xf7\\xc3\\x15\\xf7\\x2b\\xf7\\x0f\\xa0\\xa3\\xbd\\x1a\\xcc\\x53\\xbd\\x40\\x66\\x69\\x7f\\x76\\x72\\x1e\\x76\\x78\\x7b\\x6e\"\n\"\\x77\\x1a\\x7a\\x9a\\x7d\\x9d\\x99\\x98\\x93\\x96\\x8f\\x1e\\x91\\x9e\\x8c\\x8b\\x90\\x91\\x08\\x9a\\x98\\x9f\\x93\\xa2\\x1b\\xb0\\xa7\\x76\\x6f\\x71\\x75\\x76\"\n\"\\xfb\\x44\\xfb\\x21\\x1f\\x80\\x82\\x05\\x49\\xf7\\xac\\xc2\\x07\\xa6\\x80\\x99\\x74\\x78\\x80\\x80\\x77\\x88\\x1e\\x0e\\xf7\\xa5\\xf7\\x7e\\x15\\x95\\x06\\xa8\"\n\"\\x7e\\xae\\x56\\x98\\x5b\\x08\\xb6\\x06\\xa9\\x9d\\x99\\xa3\\xa0\\x7e\\x99\\x72\\x8e\\x1f\\x77\\xac\\x84\\x94\\x76\\x9d\\x08\\xb0\\x9f\\xa0\\xa9\\xae\\x1a\\xc8\"\n\"\\x56\\xb6\\x3d\\x1e\\x2e\\x06\\x6b\\x7a\\x7e\\x72\\x74\\x9a\\x7e\\xa7\\x89\\x1f\\xfb\\x41\\x07\\x70\\x8a\\x7b\\x7d\\x74\\x1a\\x73\\x9d\\x7d\\xaa\\x1e\\xcf\\x06\"\n\"\\xa9\\x9d\\x99\\xa3\\xa2\\x7c\\x98\\x70\\x8d\\x1f\\xf7\\x05\\x04\\xc7\\xa0\\x07\\xa9\\x9f\\x80\\x7b\\x79\\x75\\x7c\\x6f\\x1f\\x90\\xf7\\xa2\\xf7\\x34\\x1d\\xf7\"\n\"\\x43\\xf7\\x1f\\xf7\\x17\\xf7\\x3a\\xf7\\x37\\xfb\\x1f\\xf7\\x19\\xfb\\x40\\x1f\\x8c\\x3d\\x15\\xf7\\x12\\xf2\\x29\\xfb\\x0c\\xfb\\x0c\\x24\\x28\\xfb\\x10\\xfb\"\n\"\\x16\\x25\\xec\\xf7\\x0e\\xf7\\x0c\\xf2\\xed\\xf7\\x13\\x1f\\x0e\\x92\\x0a\\x0e\\xf8\\x37\\xf8\\xc0\\x15\\x9b\\x93\\x94\\x97\\x98\\x1a\\x9f\\x7c\\x9a\\x77\\x81\"\n\"\\x7e\\x88\\x85\\x7f\\x1e\\x40\\x65\\x5c\\x9f\\x73\\x95\\x89\\x8c\\x19\\x93\\x72\\x7b\\x8e\\x7d\\x1b\\x74\\x77\\x79\\x76\\x7c\\x95\\x7f\\x9d\\x85\\x1f\\x91\\x8a\"\n\"\\x91\\x89\\x90\\x89\\x08\\x8c\\x92\\x88\\x87\\x95\\x1f\\x98\\x85\\x60\\x74\\x05\\x75\\x7f\\x87\\x86\\x7c\\x1a\\x75\\x9a\\x7a\\x9e\\x95\\x8f\\x8c\\x95\\x9f\\x1e\"\n\"\\xe5\\xba\\xb2\\x76\\xbb\\x64\\xab\\x66\\x19\\xa7\\x56\\x71\\x92\\x5d\\x1b\\xfb\\x1f\\xfb\\x02\\x27\\xfb\\x11\\xfb\\x0f\\xf7\\x09\\x29\\xf7\\x25\\xd2\\xd1\\xa4\"\n\"\\xb7\\xbd\\x1f\\xbc\\xb5\\xa1\\xc0\\xd9\\x1a\\xf7\\x13\\x52\\xec\\xfb\\x11\\xe0\\x1e\\x3b\\xfb\\x5e\\x15\\xdf\\xcf\\x53\\x44\\x69\\x80\\x75\\x6e\\x73\\x1f\\x71\"\n\"\\x6c\\x65\\x7e\\x5f\\x1b\\x38\\x47\\xc0\\xcc\\xd3\\xce\\xc3\\xe0\\x1f\\x0e\\xf7\\xc0\\xf7\\x5a\\x15\\xef\\x2c\\x05\\x75\\xa2\\x94\\x86\\x9c\\x1b\\xaa\\xa3\\xa2\"\n\"\\xa8\\x9c\\x85\\x95\\x75\\xa0\\x1f\\x28\\xea\\xee\\xeb\\x05\\xa1\\x9f\\x91\\x95\\x9c\\x1a\\xa8\\x73\\xa2\\x6c\\x7a\\x82\\x86\\x76\\x74\\x1e\\x27\\x2b\\x27\\xeb\"\n\"\\x05\\x9f\\x75\\x81\\x91\\x7a\\x1b\\x6c\\x73\\x74\\x6e\\x79\\x90\\x83\\xa2\\x76\\x1f\\xef\\x2b\\x27\\x2c\\x05\\x75\\x76\\x85\\x81\\x7a\\x1a\\x6e\\xa3\\x74\\xaa\"\n\"\\x9c\\x94\\x90\\xa1\\xa2\\x1e\\x0e\\xf7\\xb2\\xf8\\x67\\x15\\x78\\x7c\\x7e\\x78\\x79\\x98\\x7f\\xa0\\x8a\\x1f\\xa6\\x8a\\x92\\x8a\\x96\\x86\\x08\\xa6\\x80\\x9c\"\n\"\\x76\\x77\\x1a\\x6a\\x6c\\x7a\\x4e\\x64\\x7a\\x8e\\x94\\x7c\\x1e\\x92\\x81\\x87\\x8c\\x83\\x1b\\x78\\x7d\\x7d\\x78\\x6b\\xbd\\x77\\xd9\\xbd\\xad\\x93\\x9e\\xa6\"\n\"\\x1f\\xa7\\x9f\\x9d\\xac\\xac\\x1a\\xb0\\x74\\xab\\x62\\xa0\\x1e\\xaf\\xa1\\x9a\\xa3\\xaa\\x1a\\xc8\\x56\\xb7\\x41\\x48\\x4f\\x6b\\x68\\x79\\x9a\\x7c\\x9d\\x94\"\n\"\\x94\\x8f\\x91\\x91\\x1e\\x9f\\x9e\\x9a\\x91\\xac\\x1b\\xb1\\xa4\\x7b\\x73\\x73\\x73\\x77\\x70\\x1f\\x0e\\xf7\\x17\\xf7\\x98\\x15\\x36\\xd4\\x4c\\xed\\xd6\\xcd\"\n\"\\xaf\\xb3\\xa0\\x79\\x9c\\x75\\x81\\x82\\x87\\x83\\x82\\x1e\\x75\\x75\\x80\\x87\\x64\\x1b\\x52\\x67\\xa8\\xb7\\x1f\\xac\\x07\\xbc\\xad\\xad\\xbc\\xab\\xa7\\x7d\"\n\"\\x7b\\x8e\\x1e\\x71\\x90\\x97\\x7f\\xa1\\x1b\\xa5\\x99\\x9b\\xa9\\x1f\\xbe\\x07\\xab\\x7f\\x9a\\x72\\x7d\\x81\\x86\\x7f\\x85\\x1e\\x97\\x70\\x75\\x90\\x6f\\x1b\"\n\"\\x30\\x46\\x47\\x31\\x1f\\xf7\\x3c\\xf7\\xb0\\xf7\\x34\\x1d\\xf7\\x44\\xf7\\x1e\\xf7\\x17\\xf7\\x3a\\xf7\\x38\\xfb\\x1f\\xf7\\x18\\xfb\\x40\\x1f\\x8c\\x3d\\x15\"\n\"\\xf7\\x12\\xf2\\x29\\xfb\\x0c\\xfb\\x0c\\x24\\x28\\xfb\\x10\\xfb\\x16\\x25\\xec\\xf7\\x0e\\xf7\\x0c\\xf2\\xed\\xf7\\x13\\x1f\\x0e\\x21\\x1d\\xf7\\x08\\xf7\\xca\"\n\"\\xcf\\x0a\\x7b\\x7e\\x83\\x7f\\x7e\\x1a\\x76\\x9d\\x79\\xa2\\x96\\x91\\x8e\\x98\\x9c\\x1e\\x0e\\x21\\x1d\\x7e\\xf7\\xb7\\xf7\\x41\\x1d\\x98\\x87\\x92\\x7b\\x97\"\n\"\\x1f\\x86\\x8f\\xfb\\x2e\\xf7\\x11\\xed\\x0a\\x9f\\x96\\x6f\\x0a\\x21\\x1d\\xfb\\x0a\\xf7\\xef\\x36\\x1d\\x21\\x1d\\x36\\xf8\\x06\\xe5\\x1d\\x21\\x1d\\x7d\\xf8\"\n\"\\x34\\xa1\\x0a\\x21\\x1d\\xf7\\x1f\\xf7\\xef\\x15\\x7f\\x7b\\x81\\x7c\\x80\\x1f\\x6b\\x73\\x88\\x88\\x7d\\xf7\\x03\\x0a\\x73\\x1b\\x6b\\x6d\\x7a\\x6c\\x71\\x1f\"\n\"\\x79\\x77\\x83\\x7a\\x7e\\x98\\x0a\\xf7\\xe9\\x7e\\x15\\xcc\\x8e\\xbb\\x97\\xb2\\xa0\\x08\\xb9\\xa3\\xa8\\xac\\xa7\\x64\\x1d\\x80\\x85\\x08\\x7d\\x72\\x65\\x83\"\n\"\\x5d\\x1b\\xfb\\x09\\xd8\\x0a\\x94\\x80\\x8f\\x75\\x08\\x64\\x93\\x9f\\x0a\\x52\\x1b\\xfb\\x30\\x74\\x1d\\x4b\\x07\\x8c\\xfb\\x13\\xe8\\x28\\xf7\\x20\\x74\\x08\"\n\"\\x31\\x07\\x8d\\x9e\\x8f\\x8b\\x91\\x1b\\xa8\\x9c\\x80\\x7a\\x7e\\x80\\x84\\x76\\x7a\\x76\\x91\\x94\\x7a\\x1f\\x96\\x77\\x89\\x8c\\x55\\x1d\\x7d\\x92\\x7e\\x98\"\n\"\\x83\\x1f\\x7a\\xa7\\xb5\\x7f\\xb0\\x1b\\xc9\\xb9\\xb4\\xc2\\x4e\\x0a\\x30\\x1d\\xf7\\x73\\xf9\\x0a\\xcf\\x0a\\x79\\xa5\\x1d\\x9c\\x1e\\x0e\\x51\\x0a\\xe9\\xf8\"\n\"\\xf7\\xf7\\x41\\x1d\\x97\\x87\\x92\\x7e\\x95\\x1f\\x88\\x8e\\x89\\x8d\\x88\\xc6\\x0a\\x8f\\x94\\x97\\x1e\\x0e\\x51\\x0a\\x80\\xf9\\x2f\\x36\\x1d\\x51\\x0a\\x9a\"\n\"\\xf9\\x46\\x98\\x1d\\x20\\x05\\x7e\\x9c\\x92\\x62\\x0a\\x21\\x0a\\xf0\\xf9\\x0a\\x26\\x1d\\x21\\x0a\\x56\\xf8\\xf7\\xb9\\x0a\\x98\\x87\\x93\\x7e\\x94\\x1f\\x87\"\n\"\\x8e\\x87\\x8e\\x8a\\x8c\\xfb\\x2d\\xf7\\x11\\x18\\xfb\\x2f\\xfb\\x11\\x05\\x73\\x78\\x89\\x89\\x7c\\x1a\\x76\\x9d\\x7a\\xa0\\x95\\x94\\x8f\\x94\\x97\\x1e\\x0e\"\n\"\\x21\\x0a\\xfb\\x32\\xf9\\x2f\\x36\\x1d\\x21\\x0a\\xfb\\x18\\xf9\\x46\\xe5\\x1d\\x33\\x0a\\xf7\\xa6\\xf9\\x2f\\x15\\x7c\\x8a\\x7f\\x83\\x7d\\x77\\x08\\x6f\\x76\"\n\"\\xf7\\x5b\\x1d\\x58\\x79\\x92\\x73\\x1b\\x6d\\x6d\\x7b\\x6e\\x71\\x1f\\x79\\x75\\x82\\x7a\\x7d\\x1a\\x78\\x9a\\x7d\\x9e\\x97\\x94\\x90\\x95\\x93\\x1e\\xb0\\xa9\"\n\"\\x91\\x90\\x9c\\xf7\\x24\\x1d\\xa6\\x93\\x99\\x9a\\x1a\\x9c\\x7d\\x97\\x74\\x8d\\x1e\\x0e\\x24\\x1d\\xf7\\x12\\xf7\\x96\\xf7\\x0d\\x0a\\x73\\x7f\\x85\\x63\\x0a\"\n\"\\x76\\x9d\\x79\\xa2\\x96\\x91\\x8e\\x98\\x9c\\x1e\\x0e\\x24\\x1d\\x8c\\xf7\\x83\\xf7\\x49\\x1d\\xa0\\x99\\xb0\\x0a\\x24\\x1d\\x23\\xf7\\xbb\\x36\\x1d\\x24\\x1d\"\n\"\\x40\\xf7\\xd2\\xa3\\x0a\\x24\\x1d\\xf7\\x34\\xf7\\xbb\\x15\\x7e\\x7d\\x81\\x77\\x7c\\x1f\\x70\\x76\\x88\\x88\\x7d\\xf7\\x03\\x0a\\x73\\x1b\\x6c\\x6e\\x7c\\x6e\"\n\"\\x72\\x1f\\x78\\x75\\x81\\x79\\x7d\\x98\\x0a\\xf7\\xce\\xf9\\x55\\x15\\xfb\\x03\\xe5\\x05\\x95\\x7f\\x83\\x8e\\x81\\x1b\\x76\\x79\\x7a\\x77\\xf7\\x46\\x1d\\xa3\"\n\"\\x9f\\x8c\\x8c\\x9a\\x1a\\xa0\\x79\\x9c\\x76\\x81\\x82\\x87\\x82\\x80\\x1e\\xec\\xfb\\xb0\\xb5\\x1d\\x0e\\x22\\x0a\\x20\\xf8\\xa9\\x15\\x9f\\x9a\\x90\\x93\\x99\"\n\"\\x1a\\xa1\\x79\\x9c\\x73\\x7f\\x85\\x63\\x0a\\x76\\x9d\\x79\\xa2\\x96\\x91\\x8e\\x98\\x9c\\x1e\\x0e\\x22\\x0a\\xfb\\x7c\\xf8\\x96\\x15\\xf7\\x01\\x31\\xf1\\x0a\"\n\"\\x92\\x7e\\x95\\x1f\\x88\\x8e\\x88\\x8d\\x88\\x8d\\xfb\\x2d\\xf7\\x11\\x18\\xf7\\x15\\x1d\\x22\\x0a\\xfb\\xe5\\xf8\\xce\\x36\\x1d\\x22\\x0a\\xfb\\xc8\\xf8\\xe5\"\n\"\\xa3\\x0a\\x2b\\x0a\\xd6\\xf9\\x0a\\x15\\x9e\\x9a\\x91\\x93\\x99\\x1a\\xa1\\x79\\x9c\\x74\\x7e\\x86\\x88\\x7e\\x7a\\x1e\\xfb\\x1a\\x21\\x05\\x7a\\xa5\\x1d\\x9b\"\n\"\\x1e\\x0e\\x2b\\x0a\\xfb\\x32\\xf9\\x2f\\x36\\x1d\\x44\\x1d\\xfb\\x0e\\xf8\\xee\\x15\\xfb\\x03\\xe5\\x05\\x94\\x7f\\x82\\x8f\\x81\\x1b\\x76\\x79\\x7a\\x76\\x7f\"\n\"\\x8f\\x83\\x9b\\x80\\x1f\\x8c\\x89\\x8d\\x8a\\x8e\\x89\\xf7\\x2f\\xfb\\x10\\x18\\xf7\\x2d\\xf7\\x10\\x05\\xa5\\xa0\\x8b\\x8b\\x9a\\x1a\\xa0\\x79\\x9c\\x77\\x80\"\n\"\\x81\\x87\\x82\\x80\\x1e\\x0e\\x23\\x0a\\xb0\\xf8\\x37\\x15\\x9e\\x9a\\x91\\x94\\x98\\x1a\\xa1\\x79\\x9c\\x74\\x7f\\x84\\x51\\x1d\\x7d\\x84\\x81\\x7d\\x1a\\x76\"\n\"\\x9e\\x7a\\xa1\\x96\\x95\\x90\\x96\\x98\\x1e\\x0e\\x23\\x0a\\x2d\\xf8\\x25\\xf2\\x1d\\x88\\x7c\\x1a\\x76\\x9d\\x7a\\xa0\\x95\\x93\\x8e\\x95\\x98\\x1e\\x0e\\x8d\"\n\"\\x1d\\x47\\x80\\x7a\\x58\\x1e\\x73\\x83\\x7f\\x7d\\x75\\x1a\\x6d\\xa2\\x74\\xa8\\x95\\x99\\x8d\\x8f\\x9d\\x1e\\x96\\xbb\\xad\\x90\\xad\\x1b\\xc8\\xa6\\x7e\\x6e\"\n\"\\x1f\\x79\\x07\\x91\\x68\\x6a\\x8e\\x6a\\x1b\\x32\\x46\\x72\\x5a\\x5c\\x1f\\x72\\x71\\x7c\\x68\\x6c\\x1a\\x42\\xde\\x50\\xf2\\xc2\\xc5\\x97\\xa1\\xba\\x1e\\x8c\"\n\"\\xf7\\x08\\x44\\x0a\\xfb\\x5c\\xf8\\x5b\\x28\\x0a\\x23\\x0a\\xfb\\x45\\xf8\\x73\\x15\\x98\\x7c\\x84\\x8e\\x7f\\xa9\\x0a\\x96\\x1b\\xa1\\x9e\\x9d\\x9f\\x99\\x85\"\n\"\\x95\\x78\\x99\\x1f\\x0e\\x23\\x0a\\x2b\\xf8\\xa1\\x15\\x46\\x51\\x55\\x4a\\x4a\\xc5\\x55\\xd0\\xd0\\xc5\\xc1\\xcb\\xcd\\x52\\xc1\\x45\\x1f\\x50\\x04\\xaf\\xa9\"\n\"\\x70\\x6b\\x6a\\x6d\\x70\\x67\\x68\\x6d\\xa6\\xac\\xab\\xa9\\xa6\\xae\\x1f\\x0e\\x23\\x0a\\xc8\\xf8\\x5d\\x15\\x7f\\x7b\\x81\\x7c\\x80\\x1f\\x6a\\x73\\x88\\x88\"\n\"\\x7e\\x1b\\x7f\\x7f\\x90\\x9e\\x6a\\x1f\\xa8\\x5a\\x77\\x93\\x74\\x1b\\x6d\\x6d\\x7c\\x6f\\x72\\x1f\\x78\\x75\\x81\\x78\\x7c\\x1a\\x78\\x9a\\x7d\\x9f\\x95\\x95\"\n\"\\x90\\x93\\x91\\x1e\\xb3\\xab\\x91\\x90\\x9c\\xb1\\x0a\\xf7\\xee\\x7c\\x15\\xc2\\x8d\\xb0\\x91\\xb2\\x97\\x08\\xc2\\x9d\\xb0\\xad\\xac\\x1a\\xa7\\x72\\xa3\\x6e\"\n\"\\x90\\x0a\\xd4\\x07\\xa5\\x8a\\x94\\x85\\x94\\x1e\\x99\\x83\\x78\\x94\\x77\\x1b\\x77\\x80\\x83\\x78\\x84\\x1f\\x9d\\x65\\x5a\\xa2\\x1d\\xfb\\x0b\\xdf\\x39\\xf7\"\n\"\\x1a\\x7e\\x1f\\x36\\x07\\x8d\\x9c\\x8b\\x8b\\x90\\x1b\\xae\\x9c\\x82\\x78\\x7e\\x80\\x84\\x76\\x7b\\x75\\x91\\x94\\x7a\\x1f\\x96\\x78\\x89\\x8c\\x55\\x1d\\x7d\"\n\"\\x92\\x7e\\x98\\x83\\x1f\\x7a\\xa7\\xb5\\x7f\\xaf\\x1b\\xc9\\xb9\\xb4\\xc2\\xbd\\x72\\xa9\\x5a\\x96\\x1f\\x0e\\xc9\\x1d\\xf7\\xe8\\x04\\x9d\\x99\\x91\\x95\\x98\"\n\"\\x1a\\xa1\\x79\\x9c\\x74\\x80\\x84\\x63\\x0a\\x77\\x9e\\x79\\xa1\\x95\\x95\\x90\\x96\\x99\\x1e\\x0e\\x5d\\x1d\\x5e\\x1b\\x36\\x5a\\xa2\\xc0\\xf7\\x36\\x1d\\xfb\"\n\"\\x14\\xf7\\xd6\\x15\\xf7\\x01\\x30\\x05\\x82\\x97\\x93\\x87\\x96\\x1b\\x9f\\x9d\\x9c\\xa0\\x99\\x88\\x90\\x75\\x9c\\x1f\\xfb\\x2d\\xf7\\x11\\xfb\\x2f\\xfb\\x11\"\n\"\\x05\\x74\\x79\\x88\\x87\\x7d\\x1a\\x76\\x9d\\x7a\\xa0\\x95\\x93\\x8e\\x95\\x98\\x1e\\x0e\\xd9\\x1d\\x75\\x31\\x70\\x86\\x5e\\x1b\\x37\\x5a\\x5e\\x1d\\xfb\\x7e\"\n\"\\xf8\\x0c\\x28\\x0a\\xc9\\x1d\\xfb\\x6a\\xf8\\x24\\x15\\x98\\x7b\\x84\\x8e\\x80\\xa9\\x0a\\x95\\x1b\\xa1\\x9e\\x9d\\x9f\\x98\\x84\\x97\\x7a\\x98\\x1f\\x0e\\x25\"\n\"\\x0a\\xc6\\xf8\\x81\\xe3\\x1d\\x25\\x0a\\x45\\xc8\\x0a\\x88\\x8d\\x88\\x8d\\x89\\xc6\\x0a\\x8e\\x95\\x97\\x1e\\x0e\\x25\\x0a\\xfb\\x43\\xf8\\xa5\\x28\\x0a\\x25\"\n\"\\x0a\\xfb\\x25\\xf8\\xbd\\xa2\\x0a\\xf7\\x5b\\xc7\\x1d\\xbe\\xbe\\xa2\\x97\\xbc\\x1b\\xc5\\xd5\\x1d\\xf7\\x8b\\xf7\\x8e\\x15\\x7d\\x89\\x7e\\x83\\x80\\x7c\\x08\"\n\"\\x6a\\x73\\x88\\x88\\x7d\\xab\\x1d\\x73\\x1b\\x6d\\x6d\\x7b\\x6e\\x72\\x1f\\x78\\x75\\x82\\x79\\x7d\\x1a\\x78\\x9a\\x7d\\x9f\\x96\\x94\\x90\\x95\\x93\\x1e\\xb0\"\n\"\\xa8\\x92\\x91\\x9b\\x1b\\x9a\\x93\\x88\\x7a\\xa5\\x1f\\x70\\xb7\\xad\\xa8\\x1d\\x99\\x9b\\x1a\\x9c\\x7d\\x96\\x74\\x8e\\x1e\\x0e\\x25\\x1d\\xf7\\x1b\\xf7\\x9a\"\n\"\\xe3\\x1d\\x25\\x1d\\x8e\\xf7\\x88\\x15\\xf7\\x01\\x30\\xf1\\x0a\\x93\\x7e\\x94\\x1f\\x87\\x8e\\x88\\x8e\\x89\\x8c\\xfb\\x2d\\xf7\\x11\\x18\\xfb\\x2f\\xfb\\x11\"\n\"\\x05\\x73\\x79\\x89\\x87\\x7d\\x1a\\x76\\x9d\\x7a\\xa0\\x95\\x94\\x8f\\x94\\x97\\x1e\\x0e\\x25\\x1d\\x25\\xf7\\xbe\\x28\\x0a\\x25\\x1d\\x3c\\xf7\\xd6\\xa2\\x0a\"\n\"\\x25\\x1d\\xf7\\x36\\xf7\\xc0\\x15\\x7e\\x7c\\x81\\x78\\x7d\\x1f\\x6e\\x76\\x88\\x88\\x7d\\xe7\\x0a\\x7b\\x6e\\x71\\x1f\\x78\\x76\\x82\\x78\\x7d\\x1a\\x79\\x9a\"\n\"\\x7c\\x9e\\x97\\x94\\x90\\x95\\x93\\x1e\\xb0\\xa8\\x93\\x91\\x9a\\x1b\\x9a\\x92\\x88\\x7a\\xa6\\x1f\\x70\\xb7\\xad\\xcd\\x0a\\xf7\\xcb\\xf8\\xcc\\xf7\\x42\\x1d\"\n\"\\x7f\\x8f\\x83\\x98\\x81\\x1f\\x94\\x84\\xf7\\x2f\\xfb\\x10\\xf7\\x2d\\xf7\\x10\\x05\\xa2\\x9d\\x8e\\x8f\\x9a\\x1a\\xa0\\x79\\x9c\\x76\\x81\\x82\\x87\\x81\\x7f\"\n\"\\x1e\\xe5\\xfb\\xb4\\x15\\x9e\\x8a\\x92\\x88\\x94\\x1e\\x9e\\x86\\x77\\x98\\x75\\x1b\\x7b\\x82\\x85\\x7a\\x82\\x1f\\x9a\\x66\\x61\\x93\\x5b\\x1b\\xfb\\x0e\\x33\"\n\"\\x53\\x3c\\x3e\\xc7\\x63\\xf7\\x22\\x7c\\x1f\\xc1\\x86\\xa0\\x87\\x9b\\x85\\x08\\x9f\\x83\\x97\\x80\\x80\\x1a\\x77\\x56\\x7a\\x50\\x56\\x61\\x97\\xa2\\x6f\\x1e\"\n\"\\xa9\\x82\\x7a\\x99\\x6f\\x1b\\x78\\x54\\x1d\\x82\\x71\\x1a\\x6b\\x07\\x5d\\x9d\\x76\\xb0\\x98\\x94\\x8e\\x93\\x96\\x1e\\x79\\xb2\\xbe\\x82\\xc5\\x1b\\xf7\\x17\"\n\"\\xea\\xc5\\xdb\\xb9\\x70\\xb5\\x5e\\xa3\\x1f\\x6d\\x9b\\x61\\x96\\x41\\x94\\x4b\\x94\\x85\\x8c\\x7e\\x8f\\x08\\x7c\\x91\\x82\\x92\\x92\\x1a\\x99\\xbb\\x9a\\xba\"\n\"\\xb4\\xac\\x82\\x79\\xa5\\x1e\\x6c\\x9d\\x97\\x83\\xa4\\x47\\x0a\\x0e\\x2c\\x1d\\x2e\\xf8\\x81\\xf7\\x0d\\x0a\\x74\\x7f\\x84\\x51\\x1d\\x7d\\x84\\x80\\x7e\\x1a\"\n\"\\x77\\x9e\\x79\\xa1\\x95\\x95\\x90\\x96\\x99\\x1e\\x0e\\x2c\\x1d\\xfb\\x6e\\xc8\\x0a\\x83\\x91\\xf7\\x2d\\x1d\\x9f\\x96\\x6f\\x0a\\x2c\\x1d\\xfb\\xd7\\xf8\\xa5\"\n\"\\x28\\x0a\\x2c\\x1d\\xfb\\xbd\\xf8\\xbd\\x98\\x1d\\x21\\x05\\x80\\x99\\x95\\x86\\x96\\x1b\\xa1\\x9e\\x9c\\xa0\\x99\\x85\\x94\\x78\\x9a\\x1f\\x0e\\x59\\x1d\\xf8\"\n\"\\x18\\xf7\\xa6\\x27\\x0a\\x59\\x1d\\xf7\\x15\\xf7\\xca\\x28\\x0a\\x40\\x0a\\xfb\\x05\\xf8\\x65\\xf7\\x42\\x1d\\x7c\\x8e\\x87\\xa2\\x79\\x1f\\xf7\\x2f\\xfb\\x10\"\n\"\\xf7\\x2d\\xf7\\x10\\x05\\xa4\\x9f\\x8c\\x8d\\x9a\\x1a\\xa0\\x79\\x9c\\x77\\x80\\x82\\x87\\x81\\x7f\\x1e\\x0e\\xf7\\x70\\xf8\\x98\\x15\\x48\\x06\\x6a\\x7b\\x7f\"\n\"\\x73\\x7a\\x9a\\x7b\\x9d\\x89\\x1f\\x90\\xfb\\x0b\\x06\\x6f\\x7a\\x7e\\x74\\x74\\x9c\\x7e\\xab\\x1f\\xd1\\x06\\xab\\x9c\\x97\\xa3\\xa2\\x7c\\x97\\x6d\\x8c\\x1f\"\n\"\\xe7\\x07\\xa5\\xa7\\x9a\\x93\\xa5\\x1b\\xad\\x99\\x81\\x74\\x1f\\x2e\\x07\\x74\\x89\\x7c\\x7d\\x77\\x1a\\x73\\x9c\\x7f\\xab\\x1e\\xc3\\x06\\xab\\x9c\\x97\\xa3\"\n\"\\x9d\\x7c\\x9b\\x79\\x8c\\x1f\\x86\\x8c\\x05\\xea\\x07\\xca\\x5c\\xb3\\x44\\x70\\x70\\x83\\x7e\\x7a\\x1e\\x85\\x86\\x05\\x0e\\xf8\\x74\\x16\\x9f\\x9b\\x8e\\x8f\"\n\"\\xa6\\x0a\\x6e\\xf7\\x6e\\x8d\\x0a\\xfb\\x29\\xad\\x07\\xe7\\x1d\\x7d\\x07\\x71\\x5c\\x1d\\xa5\\x1b\\x99\\xfb\\x6e\\x79\\x06\\x71\\x83\\xf7\\x3f\\x1d\\xf7\\x1c\"\n\"\\x06\\xae\\x97\\x90\\x9c\\x98\\x1f\\x7a\\x99\\x97\\x86\\xae\\x1b\\xfb\\x17\\xf3\\x15\\xf7\\x6e\\xf7\\x29\\xfb\\x6e\\x79\\x07\\x6a\\x7d\\x86\\x7a\\x7d\\x1f\\x9c\"\n\"\\x7e\\x7d\\x90\\x6a\\x1b\\x0e\\xf8\\x9f\\xf2\\x15\\xf7\\xd6\\xfb\\x41\\xad\\x07\\xa1\\x9b\\x9d\\x9f\\x95\\x97\\x89\\x85\\x9b\\x1e\\x86\\x9c\\x8f\\x8a\\x95\\x1b\"\n\"\\xa8\\xa3\\xa2\\xa8\\x9d\\x83\\x99\\x7c\\x95\\x1f\\x98\\x76\\x5f\\x95\\x66\\x1b\\x6f\\x76\\x86\\x7d\\x74\\x1f\\x98\\x6c\\x6e\\x91\\x69\\x1b\\x3d\\x4d\\x4b\\x3c\"\n\"\\x8c\\x0a\\xfb\\xba\\x16\\x52\\xf7\\x6f\\xc4\\x06\\xf2\\x04\\x52\\xad\\x06\\xa1\\x9b\\x9d\\x9e\\x93\\x93\\x8a\\x88\\x96\\xf7\\x27\\x1d\\xf8\\x9f\\xf2\\x15\\xf8\"\n\"\\x87\\xfb\\x1a\\x07\\x69\\x78\\x87\\x7c\\x72\\x1f\\x98\\x6c\\x6e\\x91\\x69\\x1b\\x3d\\x4d\\x4c\\x3b\\x8c\\x0a\\xfb\\x0d\\xf7\\xd6\\x15\\x4a\\xad\\x06\\xa1\\x9b\"\n\"\\x9e\\x9e\\x94\\x91\\x8a\\x87\\x9a\\x1e\\xfb\\x41\\xfc\\x1c\\x15\\x52\\xf7\\x6f\\xc4\\x06\\xf2\\x04\\x52\\xad\\x06\\xa1\\x9b\\x9e\\x9e\\x93\\x92\\x8a\\x87\\x97\"\n\"\\xf7\\x27\\x1d\\xf8\\xba\\xf7\\x34\\x15\\xa3\\xa1\\x97\\xa7\\xaa\\x1a\\xc9\\x58\\xbb\\x4a\\x4a\\x58\\x5b\\x4c\\x6d\\x97\\x70\\xa3\\x74\\x1e\\x71\\xf7\\x2a\\x1d\"\n\"\\x3b\\xf7\\x12\\x15\\xa8\\x9f\\x78\\x70\\x6e\\x77\\x78\\x6e\\x6e\\x77\\x9e\\xa7\\xa7\\x9f\\x9e\\xa8\\x1f\\xfb\\x33\\x04\\x60\\x0a\\xfb\\xc5\\xf8\\x91\\x7f\\x1d\"\n\"\\xf7\\xc4\\xf7\\x4e\\xe2\\x1d\\xf8\\x5c\\xf8\\x91\\xf7\\x12\\x1d\\x83\\x87\\x7e\\x85\\x9b\\x1d\\x22\\xf8\\x2f\\xbf\\x1d\\xf8\\x2f\\xfb\\xd9\\xc7\\x0a\\x7d\\x6c\"\n\"\\x6a\\x1a\\x4a\\xbb\\x5f\\xd3\\xd3\\xb3\\x0a\\xfb\\x33\\x04\\x60\\x0a\\x0e\\xf8\\x5b\\xf8\\x91\\x15\\x8e\\x91\\x90\\x9b\\xf5\\x0a\\xfb\\x7c\\xfc\\x47\\x05\\x87\"\n\"\\x83\\x87\\x7e\\x85\\x9b\\x1d\\xf7\\xdc\\xe1\\xc7\\x0a\\x7c\\x6c\\x6a\\x1a\\x4a\\xbb\\x5f\\xd3\\xd4\\xb3\\x0a\\x8a\\xfb\\x33\\x15\\xa8\\xa4\\x72\\x6e\\x71\\x76\"\n\"\\x7b\\x6a\\x6c\\x75\\x9c\\xa3\\xa9\\xa3\\xa4\\xa8\\x1f\\xfc\\x03\\xf8\\x47\\x15\\xea\\x06\\xa8\\x9a\\x96\\xa1\\xa0\\x7d\\x96\\x6d\\x1f\\xfb\\x36\\xfb\\x3c\\x06\"\n\"\\x77\\x98\\x7c\\x9c\\x90\\x8e\\x8c\\x8f\\x93\\x1e\\x97\\xa1\\xa2\\x92\\x9c\\x1b\\xad\\xa1\\x70\\x62\\x5e\\x75\\x79\\x55\\x69\\x7c\\x8f\\x99\\x7c\\x1f\\x92\\x82\"\n\"\\x88\\x8d\\x82\\x1b\\x7b\\x7e\\x7d\\x79\\x69\\xbd\\x71\\xcf\\xbf\\xae\\x97\\xa6\\xa1\\x1f\\x9e\\xa1\\x96\\xac\\xae\\x1a\\xd7\\x5a\\xc2\\x49\\x7c\\x7b\\x88\\x86\"\n\"\\x79\\x1e\\x0e\\xf7\\x7a\\xf8\\xc4\\x15\\x33\\xfb\\x8f\\x05\\x89\\x82\\x89\\x84\\x86\\x1a\\x7a\\x9b\\x7d\\x9d\\x9c\\x94\\x93\\xa2\\x93\\x1e\\xeb\\xf7\\xa7\\x05\"\n\"\\xc9\\xfb\\x9f\\x54\\x07\\x70\\x96\\x7d\\xa2\\x9e\\x96\\x96\\x9f\\x8e\\x1e\\xf7\\xf5\\x58\\x15\\x8f\\x93\\x8f\\x99\\x90\\x1a\\x9b\\x7b\\x9a\\x7a\\x7d\\x82\\x84\"\n\"\\x79\\x81\\xf7\\x3c\\x1d\\x99\\x95\\x93\\x9c\\x94\\x1e\\xf7\\xdc\\xe1\\x15\\xa3\\xa2\\x97\\xa6\\xaa\\x1a\\xc9\\x59\\xbb\\x4a\\x49\\x59\\x5b\\x4c\\x6d\\x97\\x70\"\n\"\\xa2\\x74\\x1e\\x71\\xf7\\x2a\\x1d\\x3c\\xd2\\x0a\\x8a\\xfb\\x33\\x15\\x60\\x0a\\x0e\\x75\\x0a\\xf7\\x54\\xf7\\xc5\\x26\\x1d\\x21\\x1d\\xfb\\x1e\\xf8\\x0e\\x48\"\n\"\\x1d\\x21\\x1d\\x0e\\xf8\\x34\\xf7\\x2b\\x15\\x9e\\x5c\\x05\\x7b\\x06\\x5c\\x73\\xe8\\x0a\\x76\\x9b\\x5b\\x8d\\x1f\\xfb\\x57\\xf8\\x60\\x05\\xfb\\x51\\x39\\x0a\"\n\"\\xa9\\x06\\xfb\\x2a\\xfb\\xf8\\x05\\x86\\x06\\x61\\x74\\xe8\\x0a\\x73\\x9d\\x5d\\x1f\\x7a\\x06\\x9f\\xba\\x05\\xf7\\x4f\\xf2\\x15\\xfb\\x23\\x06\\xd3\\xf7\\x3c\"\n\"\\x05\\xfb\\x78\\xec\\x15\\xa8\\x7e\\x9b\\x73\\x74\\x7e\\x7b\\x6e\\x73\\x0a\\xa2\\xa3\\x98\\x9b\\xa8\\x1e\\x0e\\x21\\x1d\\xfb\\x0b\\xf7\\xd3\\x35\\x0a\\xf7\\xf9\"\n\"\\xf8\\xc8\\x15\\xfb\\x6f\\x06\\x70\\x20\\x1d\\x7a\\x93\\x7c\\x9a\\x81\\x1e\\x83\\x95\\x96\\x89\\xa6\\x1b\\xc4\\x06\\xfb\\x2c\\xfb\\xf9\\x05\\x5f\\x73\\x79\\x69\"\n\"\\x68\\xa2\\x7a\\xba\\x1f\\xf7\\x19\\x06\\xa0\\x9a\\x8d\\x90\\xa6\\x0a\\x7a\\x06\\x9f\\xba\\x05\\xf7\\x7d\\x06\\x9e\\x5c\\x05\\x7a\\x06\\x71\\x83\\x89\\x9d\\x1d\"\n\"\\x99\\x88\\xa3\\x1b\\xc1\\x06\\x5b\\x1d\\xa8\\xb1\\xb4\\xc1\\xa8\\x1f\\xb0\\x9f\\x95\\x98\\xa3\\x4c\\x0a\\x80\\x92\\x82\\x8d\\x70\\x8c\\x08\\xfb\\x4f\\xf7\\x2a\"\n\"\\x15\\xfb\\x25\\x06\\xd4\\xf7\\x3d\\x05\\x0e\\x21\\x1d\\x93\\xf8\\x34\\xea\\x1d\\xbd\\xf7\\x2b\\x15\\x9d\\xf7\\x57\\x1d\\x7f\\x7b\\x1e\\xfb\\x19\\xf7\\x4a\\x1d\"\n\"\\x8e\\x98\\x9b\\x1e\\x0e\\x7c\\x0a\\x53\\x0a\\xf8\\x3e\\xf8\\x40\\x26\\x1d\\x53\\x0a\\xf7\\xa4\\xf8\\x24\\x80\\x1d\\x7b\\x1d\\xf7\\xa4\\xf8\\x2d\\x26\\x0a\\x7b\"\n\"\\x1d\\xf7\\xa3\\xf8\\x65\\xab\\x0a\\x0e\\x79\\x1d\\xc1\\x1d\\x9b\\x42\\x0a\\xb9\\x1d\\x8f\\x16\\xf8\\xe4\\x06\\xfb\\x96\\xf8\\xc7\\x05\\x3f\\x06\\xfb\\x0c\\xfc\"\n\"\\x70\\x15\\xf7\\x32\\xf7\\xe6\\xf7\\x32\\xfb\\xe6\\x05\\x0e\\x30\\x1d\\x64\\xf9\\x4e\\x48\\x1d\\x30\\x1d\\xf2\\x42\\x0a\\x30\\x1d\\xf1\\x8a\\x1d\\x30\\x1d\\x77\"\n\"\\xf9\\x13\\x35\\x0a\\xf8\\x40\\x8e\\x15\\x7d\\x44\\x74\\x75\\x4d\\x88\\x08\\x68\\x06\\xaa\\x0a\\x95\\x97\\x89\\xa5\\x1b\\xb1\\x06\\xf7\\x07\\xe0\\xde\\xf7\\x09\"\n\"\\x8f\\x1f\\x8a\\xf8\\x5d\\x05\\xb2\\x8c\\xa1\\x9d\\xab\\x22\\x1d\\xfb\\x16\\x87\\x1d\\xaa\\xfb\\x9a\\x06\\xfb\\x90\\xf8\\x01\\x05\\xfb\\x09\\x06\\x3d\\x1d\\x79\"\n\"\\x1a\\x7b\\x94\\x7b\\x98\\x81\\x1e\\x84\\x96\\x96\\x89\\xa5\\x1b\\x96\\xfb\\xfa\\x06\\x65\\x74\\x78\\x6b\\x69\\xa3\\x79\\xba\\x1f\\xf7\\x15\\x06\\xb9\\xa3\\x9c\"\n\"\\xae\\xa9\\x1d\\x6c\\xf7\\x9c\\x06\\x0e\\xf8\\xa8\\xf8\\xc8\\x15\\xfc\\x59\\x06\\x57\\x0a\\xf7\\xfb\\x06\\x5c\\x6b\\x76\\x6a\\x89\\x0a\\x9a\\x97\\xa1\\x9b\\x9b\"\n\"\\x1f\\x9c\\x9b\\x96\\x93\\xb6\\xa8\\x08\\xf7\\x27\\x07\\xf7\\x07\\x1d\\xf7\\x15\\xd8\\x88\\x07\\x47\\x1d\\x9b\\x93\\x98\\x96\\x72\\x1d\\x0e\\x78\\x0a\\x83\\xf8\"\n\"\\x9b\\x38\\x0a\\xf7\\x62\\xfb\\x2f\\x15\\xd8\\x88\\x06\\x47\\x1d\\x70\\x1d\\x94\\xa6\\x1a\\xf7\\x27\\xfc\\x59\\x07\\x57\\x0a\\xf8\\x6f\\xf7\\x29\\x06\\xa3\\x89\"\n\"\\x95\\x85\\x94\\x1e\\x9b\\x81\\x79\\x94\\x79\\x1b\\x79\\x7c\\x83\\x7e\\x80\\x1f\\x83\\x80\\x89\\x82\\x70\\x1a\\x5d\\xfb\\x8c\\x07\\x0e\\x50\\x0a\\x98\\xf8\\x9b\"\n\"\\x38\\x0a\\xf8\\x1c\\xfb\\x31\\xb2\\x1d\\x0e\\xf7\\x46\\xf7\\xf2\\x15\\xdb\\x9d\\xba\\xb8\\xcd\\x1b\\xa8\\xaa\\x83\\x7c\\xa3\\x1f\\xa4\\x7c\\x94\\x80\\x8f\\x75\"\n\"\\x08\\x64\\x91\\x99\\x7c\\xa7\\x1b\\x9b\\x99\\x93\\x98\\x95\\x1f\\x92\\x95\\x8d\\x96\\xa4\\x1a\\xdb\\x07\\xa4\\x8a\\x93\\x85\\x94\\x1e\\x9b\\x82\\x7b\\x94\\x7a\"\n\"\\x1b\\x7b\\x80\\x85\\x7b\\x7f\\x1f\\xa8\\x50\\x71\\x92\\x58\\x1b\\xfb\\x12\\x2a\\x32\\xfb\\x1f\\x75\\x1f\\x70\\x06\\x76\\x80\\x80\\x78\\x77\\x96\\x80\\xa0\\x1f\"\n\"\\xa3\\x6c\\x73\\x06\\x76\\x80\\x80\\x77\\x77\\x96\\x80\\xa0\\x1f\\xa6\\x06\\xfb\\x15\\xa4\\xf1\\x3b\\xf7\\x1f\\x1b\\xcc\\xc9\\x9d\\xa9\\xb3\\x1f\\xab\\xa4\\x9c\"\n\"\\xa4\\xa2\\x1a\\xa7\\x75\\xa3\\x70\\x7e\\x80\\x86\\x7f\\x80\\x1e\\x73\\x72\\x8b\\x8b\\x82\\x85\\x08\\x7e\\x75\\x68\\x83\\x64\\x1b\\x3e\\x56\\xb0\\xcf\\x78\\x1f\"\n\"\\xf7\\x36\\x06\\x9f\\x97\\x96\\x9f\\x9f\\x80\\x96\\x76\\x1f\\xfb\\x3b\\xaa\\xf7\\x56\\x06\\x9f\\x97\\x96\\x9f\\x9e\\x80\\x96\\x76\\x1f\\x0e\\xbe\\x1d\\x41\\x1d\"\n\"\\xfc\\x12\\xf9\\x85\\x48\\x1d\\x41\\x1d\\xfb\\x91\\xf9\\x2e\\x26\\x0a\\x41\\x1d\\xfb\\x69\\xfb\\x3b\\x23\\x1d\\x41\\x1d\\xfb\\x92\\xf9\\x66\\xab\\x0a\\x0e\\xe6\"\n\"\\xf8\\x48\\x15\\x86\\x06\\x88\\x06\\x65\\x71\\x7b\\x73\\x71\\xa4\\x7d\\xba\\x1f\\xfb\\x91\\x93\\x1d\\xf7\\x0d\\x06\\xba\\xa2\\x65\\x1d\\x80\\xf7\\x13\\xf7\\x62\"\n\"\\xfb\\x13\\x80\\x06\\xde\\x1d\\xf7\\x91\\x06\\xbb\\xa3\\x99\\xa5\\xa3\\x72\\x9b\\x64\\x1f\\x88\\x06\\x86\\xa5\\x06\\xad\\x8f\\x9d\\x9c\\xa9\\x4c\\x0a\\x92\\x20\"\n\"\\x0a\\x26\\x06\\x72\\x81\\x89\\x86\\x82\\x48\\x0a\\x83\\x96\\x95\\x89\\xa6\\x1b\\x96\\x72\\xfb\\x62\\xa4\\x96\\x06\\xa4\\x95\\x8d\\x91\\x94\\x1f\\x9b\\x94\\x95\"\n\"\\x9c\\x9d\\x1a\\x9b\\x83\\x9a\\x7d\\x96\\x1e\\x92\\x4b\\x1d\\x6e\\x9d\\x79\\xad\\x87\\x1e\\xf7\\xce\\x21\\x15\\x68\\xfb\\x62\\xae\\x07\\x0e\\xb1\\x1d\\xf1\\xf8\"\n\"\\x78\\x26\\x0a\\xf7\\x6a\\xf8\\x61\\x15\\xa9\\x06\\xa3\\x96\\x8d\\x90\\x8c\\x1d\\xfb\\x3c\\xf7\\x08\\x1d\\xa9\\xfb\\xfa\\x6d\\xf7\\x2c\\x1d\\xf7\\x3c\\x2b\\x1d\"\n\"\\xa9\\x1d\\x6d\\x06\\xf7\\x9b\\xf7\\xfa\\x15\\xfc\\x2a\\x07\\x5f\\x88\\x84\\x77\\x78\\x1e\\x77\\x76\\x67\\x7d\\x6b\\x1b\\x6e\\x6a\\x92\\x9a\\x63\\x1f\\x90\\x7e\"\n\"\\x7f\\x8e\\x84\\x1b\\x72\\x72\\x72\\x70\\x7a\\x93\\x7c\\x99\\x81\\x1f\\x77\\xaa\\xd8\\x78\\xc3\\x1b\\xc1\\xc4\\x9f\\xae\\xb4\\x1f\\xbc\\xb3\\x9c\\xb0\\xcb\\x1a\"\n\"\\xf8\\x9c\\xfb\\x35\\x07\\x5d\\x0a\\x0e\\x21\\x0a\\xfb\\x56\\xf9\\x4e\\x58\\x0a\\x21\\x0a\\x55\\x8a\\x1d\\x21\\x0a\\xfb\\x44\\xf9\\x13\\x35\\x0a\\x85\\x0a\\xf7\"\n\"\\x6f\\x06\\x5b\\x6b\\x76\\x6a\\x89\\x0a\\xa7\\xb0\\xb3\\xc1\\xaa\\x1f\\xb0\\xa0\\x94\\x97\\xa2\\x22\\x1d\\x2a\\x06\\x0e\\x21\\x0a\\x0e\\xd4\\x1d\\xf9\\x06\\x43\"\n\"\\x0a\\xf8\\x0f\\xf8\\x60\\x15\\xea\\x27\\x1d\\xfb\\xbd\\x39\\x0a\\xe9\\xfb\\xf8\\x2d\\x39\\x0a\\xf7\\xbd\\x27\\x1d\\x2c\\x06\\xfb\\xc6\\xf8\\x33\\x38\\x0a\\x0e\"\n\"\\x21\\x0a\\xee\\xf9\\x2f\\xc6\\x1d\\x7d\\x0a\\xfb\\x55\\xf8\\xa8\\x26\\x0a\\xf7\\x26\\x1d\\x9d\\xad\\x9b\\x83\\x9b\\x7d\\x95\\x1f\\x92\\x80\\x81\\x8d\\xf0\\x1d\"\n\"\\x84\\x8a\\x88\\x82\\xbd\\x1d\\x93\\x80\\x82\\x8c\\x6f\\x1b\\x6c\\x06\\x0e\\xb3\\x1d\\xf7\\x23\\xfb\\x72\\x23\\x1d\\x43\\x1d\\xf7\\x07\\xf9\\x0a\\x26\\x1d\\xf8\"\n\"\\x49\\xf3\\x15\\x7b\\x29\\x1d\\xf7\\x18\\x06\\xb8\\xa4\\x9d\\xac\\xaa\\x73\\xa1\\x69\\x1f\\x80\\x06\\xfb\\x57\\xf8\\x60\\x05\\xfb\\x6c\\x06\\xa3\\x1d\\xc4\\x06\"\n\"\\xfb\\x2a\\xfb\\xf8\\x05\\x81\\x06\\x67\\x73\\x76\\x6b\\x6a\\xa4\\x79\\xb9\\x1f\\xf7\\x18\\x27\\x1d\\x7a\\x06\\xf7\\x1c\\xf7\\xd2\\x05\\x0e\\x43\\x1d\\xf7\\xc1\"\n\"\\xf8\\x29\\x15\\x94\\x99\\x8f\\x95\\x93\\x1a\\xa0\\x79\\x9c\\x75\\x79\\x82\\x85\\x77\\x7d\\x1e\\x39\\xfb\\x0c\\x05\\x82\\x7e\\x87\\x80\\x82\\x1a\\x77\\x9e\\x7a\"\n\"\\xa0\\x9c\\x95\\x92\\x9e\\x98\\x1e\\x0e\\x43\\x1d\\xdc\\xfb\\x72\\x23\\x1d\\x43\\x1d\\xf7\\x0d\\xf7\\x06\\x15\\xb2\\xaa\\xa9\\xb0\\xb0\\x6c\\xa9\\x64\\x1f\\x79\"\n\"\\x62\\x1d\\x79\\x0a\\x33\\x0a\\xf7\\xaa\\xf9\\x0a\\x26\\x1d\\x33\\x0a\\xf7\\x10\\x42\\x0a\\x33\\x0a\\xf7\\x38\\xfb\\x72\\x23\\x1d\\xf7\\x45\\xf8\\x03\\x15\\xf7\"\n\"\\x91\\xfc\\x03\\x05\\xf4\\xf8\\x61\\x06\\xce\\x1d\\x93\\x7b\\x99\\x9c\\x0a\\x06\\x0e\\x24\\x1d\\xfb\\x20\\xf7\\xda\\x58\\x0a\\x24\\x1d\\xad\\xf7\\x94\\x87\\x0a\"\n\"\\x24\\x1d\\xfb\\x0e\\xf7\\x9f\\x35\\x0a\\xf7\\x27\\xec\\x15\\x9f\\x88\\x80\\x96\\x79\\x1b\\x74\\x80\\x77\\x62\\x1f\\x48\\xf7\\x7d\\xf7\\x38\\x07\\x34\\xa1\\x67\"\n\"\\xb6\\xe0\\x1a\\xe7\\xc6\\xcf\\xdb\\xdb\\xc5\\x47\\x2e\\x39\\x62\\x59\\x39\\x7a\\x1e\\xfb\\x38\\xf7\\x7c\\xce\\x07\\xb3\\x7f\\xa0\\x75\\x79\\x81\\x81\\x76\\x87\"\n\"\\x1e\\x51\\x06\\xde\\xb7\\xb3\\xd2\\xf1\\x1a\\xf7\\x28\\xfb\\x00\\xf7\\x08\\xfb\\x20\\xfb\\x1d\\xfb\\x01\\xfb\\x09\\xfb\\x28\\x25\\xb3\\x45\\xdf\\x5f\\x1e\\xfb\"\n\"\\x19\\xf8\\x3a\\x38\\x0a\\x0e\\x24\\x1d\\x0e\\xf7\\xdf\\xf8\\xd6\\x15\\xfb\\x21\\xfb\\x03\\xfb\\x17\\xfb\\x3a\\xfb\\x38\\xf7\\x04\\xfb\\x17\\xf7\\x20\\xf7\\x21\"\n\"\\xf7\\x03\\xf7\\x16\\xf7\\x39\\xe1\\x72\\xd0\\x59\\xc4\\x1f\\xc4\\x59\\x4f\\xa7\\x48\\x1b\\x23\\x04\\xdb\\xcb\\x35\\x21\\x21\\x4a\\x35\\x3c\\x3c\\x4a\\xe1\\xf4\"\n\"\\xf6\\xcb\\xe1\\xdb\\x1f\\xfb\\x96\\xb8\\x15\\xa8\\x7e\\x9b\\x73\\x73\\x7e\\x7c\\x6d\\x73\\x0a\\xa3\\xa3\\x98\\x9b\\xa8\\x1e\\x0e\\x7e\\x0a\\xd5\\xf7\\xad\\x26\"\n\"\\x1d\\xf7\\xf4\\xf8\\xad\\x15\\x98\\x06\\xa2\\x91\\x8c\\x8f\\x92\\x1f\\x98\\x91\\x93\\x97\\x98\\x1a\\xa3\\x79\\x96\\x64\\x1e\\xfb\\x18\\x06\\x64\\x79\\x80\\x73\"\n\"\\x73\\x9e\\x7f\\xb1\\x1f\\x96\\x76\\x06\\x54\\x85\\x69\\x81\\x65\\x76\\x08\\x40\\x62\\x5b\\x3c\\x38\\x1a\\xfb\\x15\\xf3\\x28\\xf7\\x26\\x82\\x1e\\x76\\x80\\x07\"\n\"\\x7f\\x8c\\x05\\x71\\x78\\x7c\\x77\\x73\\x9e\\x7f\\xb1\\x1f\\xf7\\x18\\x06\\xa3\\x90\\x8c\\x8f\\x92\\x1f\\x98\\x91\\x93\\x97\\x97\\x1a\\x97\\x84\\x95\\x80\\x92\"\n\"\\x1e\\x91\\x82\\x86\\x8b\\x72\\x1b\\x7e\\x9f\\x06\\xf7\\x24\\x92\\xf7\\x02\\xf2\\xf7\\x15\\x1a\\xe5\\x51\\xe1\\x35\\xb1\\x1e\\x6a\\x99\\x6b\\x92\\x5e\\x8f\\x08\"\n\"\\xfb\\x00\\xfc\\x1b\\x15\\x39\\x92\\x4f\\xcb\\xdc\\x1a\\xdd\\xc4\\xc8\\xe0\\x94\\x1e\\xf7\\x00\\x16\\xe3\\x83\\xc5\\x4e\\x38\\x1a\\x39\\x4f\\x4c\\x35\\x84\\x1e\"\n\"\\x0e\\xf8\\x24\\xf7\\x28\\x1d\\xb8\\xa4\\x9d\\xac\\xa2\\x7b\\xa0\\x77\\x90\\x1f\\x8e\\x83\\x80\\x8b\\x7a\\x1b\\xf7\\xfa\\x30\\x0a\\xfc\\x10\\x88\\x1d\\xf7\\x0c\"\n\"\\x39\\x1d\\x81\\xf7\\xf8\\x06\\x0e\\xf7\\x8b\\xf7\\x8b\\x15\\x48\\x95\\x7a\\xa6\\x89\\xf4\\x08\\xf7\\x43\\x2f\\x07\\x5d\\x72\\x79\\x6a\\x6c\\xa0\\x78\\xad\\x89\"\n\"\\x1f\\x43\\x07\\xfb\\x31\\xc8\\x3e\\xf7\\x19\\x7f\\x1e\\x63\\x07\\x63\\x8a\\x77\\x7a\\x6a\\x2a\\x0a\\xe3\\x2b\\x1d\\xac\\x77\\x9c\\x63\\x8c\\x1f\\xb3\\x07\\xf7\"\n\"\\x19\\x96\\xcc\\xde\\x87\\xf7\\x2c\\x08\\xd3\\x07\\xaf\\x8d\\x9e\\x9c\\xab\\x1a\\xad\\x73\\x9d\\x5c\\x1e\\x2f\\xfb\\x43\\x06\\x89\\x22\\x7b\\x70\\x47\\x81\\x08\"\n\"\\xf7\\x6a\\x07\\xb4\\x8c\\x9e\\x9c\\xae\\x1a\\xaf\\x74\\x99\\x4b\\x1e\\x55\\x06\\x4b\\x74\\x7d\\x66\\x69\\x9f\\x7a\\xb3\\x8a\\x1f\\x0e\\x3c\\x0a\\xf7\\x4d\\xf8\"\n\"\\x36\\x26\\x1d\\x3c\\x0a\\xaa\\xf8\\x1a\\x80\\x1d\\x3c\\x0a\\xd2\\xfc\\x46\\x23\\x1d\\x7f\\x0a\\x78\\x1d\\x49\\xf7\\xc7\\x26\\x1d\\xf7\\xe4\\x7f\\x15\\xf7\\x17\"\n\"\\x96\\xd6\\xc9\\xeb\\x1a\\xbf\\x77\\xb3\\x62\\xaa\\x1e\\x6b\\xa3\\x64\\x98\\x34\\x9b\\x3e\\x99\\x88\\x8c\\x77\\x94\\x08\\x77\\x95\\x7d\\xa0\\x9e\\x1a\\xb1\\xbb\"\n\"\\xa9\\xc8\\xc8\\xb9\\x72\\x67\\x93\\x1e\\x92\\x6b\\x8b\\x8b\\x94\\x83\\x08\\x82\\x94\\x9a\\x85\\x99\\x1b\\x9d\\x9a\\x93\\x98\\x96\\x1f\\x93\\x96\\x8d\\x93\\xa6\"\n\"\\x1a\\xe0\\x07\\xf7\\x25\\x1d\\x5d\\x96\\x59\\x1b\\xfb\\x12\\x2d\\x41\\x28\\x53\\xab\\x57\\xbf\\x6f\\x1f\\xab\\x79\\xab\\x82\\xcd\\x80\\xcf\\x7f\\x9a\\x88\\xa1\"\n\"\\x80\\x08\\x9f\\x81\\x98\\x79\\x79\\x1a\\x64\\x53\\x6d\\x42\\x4b\\x4e\\xa6\\xab\\x81\\x1e\\x83\\xa6\\x8b\\x8b\\x83\\x92\\x08\\x95\\x82\\x7d\\x90\\x7c\\x1b\\x67\"\n\"\\x79\\x75\\x5e\\x1f\\x4c\\x07\\x5e\\x9d\\x75\\xaf\\x9c\\x94\\x90\\x9c\\x9b\\x1e\\xa8\\x7c\\xb8\\x7d\\xa9\\x87\\x08\\x33\\xd6\\x1d\\xb4\\x1d\\xfb\\x70\\xf7\\xb4\"\n\"\\x26\\x0a\\x78\\x1d\\xfb\\x48\\xfc\\xb5\\x23\\x1d\\xf8\\xb2\\xf8\\xc8\\x15\\xfc\\x4b\\x35\\x06\\xf7\\x3c\\xfb\\x52\\xfb\\x3c\\xfb\\x59\\x05\\x30\\xf8\\x51\\xf7\"\n\"\\x33\\x07\\xb0\\x7b\\x9d\\x6b\\x6a\\x7b\\x7a\\x65\\x89\\x1e\\x88\\x53\\x05\\xfb\\x69\\x06\\xf7\\x38\\xf7\\x4f\\xfb\\x2f\\xf7\\x43\\x05\\xf7\\x57\\x06\\x90\\x47\"\n\"\\x05\\x65\\x8e\\x9b\\x7a\\xaa\\x1b\\xac\\x9c\\x9d\\xb0\\x1f\\x0e\\x54\\x0a\\xf7\\xf5\\xf7\\xea\\x15\\xf7\\x0b\\xf0\\x70\\xf7\\x16\\x1d\\x93\\xa7\\x1a\\xf7\\x16\"\n\"\\xfc\\xa0\\xfb\\x16\\xf7\\x16\\x1d\\x94\\xa6\\x1a\\xa6\\xee\\xfb\\x0b\\x58\\x07\\x4c\\x1d\\x95\\x9a\\x88\\xa2\\x1b\\xbe\\xfb\\x1c\\x4e\\x06\\x5f\\x1d\\xf7\\x7b\"\n\"\\x29\\x0a\\x4d\\xf7\\x1c\\xbf\\x31\\x1d\\x0e\\x7c\\x1d\\x57\\x42\\x0a\\xf7\\xeb\\x16\\xd3\\x29\\x0a\\x4d\\xf7\\xfa\\xf0\\x37\\x06\\x73\\x8d\\x81\\xd9\\x0a\\x93\"\n\"\\xa7\\x1a\\xf7\\x4f\\xfc\\xa0\\xfb\\x4f\\x07\\x73\\x8d\\x81\\x91\\x82\\xe3\\x0a\\x93\\xa7\\x1a\\xdf\\xee\\xfb\\xfa\\x4e\\x07\\x5f\\x1d\\xdc\\x29\\x06\\xd7\\x1d\"\n\"\\x0e\\xf7\\x82\\xf7\\xcb\\x15\\x98\\x07\\xa3\\x7d\\x99\\x73\\x74\\x7d\\x7d\\x73\\x1e\\x27\\x07\\x73\\x99\\x7d\\xa2\\xa3\\x99\\x99\\xa3\\x1e\\x9a\\xf7\\x12\\x7c\"\n\"\\x07\\x73\\x99\\x7d\\xa3\\xa2\\x99\\x99\\xa3\\x1e\\xef\\x07\\xa3\\x7d\\x99\\x74\\x73\\x7d\\x7d\\x73\\x1e\\x7e\\x07\\x4b\\xf7\\x9f\\x15\\x48\\x4a\\x71\\x5a\\x53\"\n\"\\x1f\\x4e\\x55\\x69\\x3c\\x34\\x1a\\xfb\\x38\\xf7\\x13\\xfb\\x18\\xf7\\x30\\xf7\\x2f\\xf7\\x14\\xf7\\x18\\xf7\\x33\\xe8\\x6b\\xd6\\x4c\\xc4\\x1e\\xbc\\x55\\x49\"\n\"\\xa5\\x47\\x1b\\x24\\x04\\xea\\xdb\\x34\\x24\\xfb\\x00\\x3d\\x34\\x2a\\x2b\\x3c\\xe2\\xf5\\xf4\\xda\\xe2\\xeb\\x1f\\x0e\\x22\\x0a\\xfc\\x09\\xf8\\xed\\x58\\x0a\"\n\"\\x22\\x0a\\xfb\\x5b\\xf8\\xa7\\x87\\x0a\\x22\\x0a\\xfb\\xf7\\xf8\\xb2\\x35\\x0a\\x81\\x0a\\x3c\\xb1\\x4d\\xd4\\x61\\x1e\\x79\\xab\\xbc\\x7e\\xb2\\x1b\\x91\\x94\"\n\"\\x8c\\x8c\\x97\\x1f\\x64\\x69\\x7e\\x73\\x64\\x1a\\x53\\x60\\x1d\\x81\\x1e\\x7e\\x71\\x80\\x87\\x7e\\x1b\\x7e\\x85\\x90\\x94\\xaf\\xa8\\xb7\\xc3\\xbe\\x1f\\xcc\"\n\"\\xc3\\xa1\\xb6\\x8d\\xd6\\x08\\x0e\\x2b\\x0a\\x0e\\xf7\\xf6\\xf7\\x80\\x15\\xf7\\x33\\xf7\\x74\\x05\\xb8\\x8d\\xa1\\x9c\\xac\\x1a\\xad\\x73\\x9c\\x5c\\x8c\\x1e\"\n\"\\x2f\\x06\\x5e\\x71\\x79\\x69\\x74\\x97\\x7c\\xa5\\x80\\x1f\\x37\\xfb\\x0c\\x36\\xf7\\x0c\\x05\\xa5\\x98\\x95\\x99\\xa2\\x1a\\xac\\x72\\x9c\\x5e\\x8c\\x1e\\x32\"\n\"\\x06\\x5d\\x72\\x79\\x69\\x6b\\xa0\\x7a\\xb7\\x88\\x1f\\xf7\\x34\\xfb\\x74\\x05\\xfb\\x18\\x4e\\x07\\x5e\\x72\\x79\\x69\\x69\\xa4\\x79\\xb8\\x1f\\xf7\\x7a\\x67\"\n\"\\x1d\\x4e\\x06\\xfb\\x31\\xf9\\x06\\x59\\x0a\\x83\\xf8\\x9b\\x38\\x0a\\xf7\\xfe\\xfb\\x2b\\x7b\\x0a\\x0e\\x22\\x0a\\xfb\\x7d\\xf9\\x13\\xa1\\x0a\\x22\\x0a\\x42\"\n\"\\xf8\\xce\\xc6\\x1d\\x5a\\x1d\\xf7\\x87\\xf9\\x71\\x26\\x1d\\xf7\\x0d\\x1d\\x9b\\x7d\\x95\\x1e\\x92\\x20\\x0a\\xfb\\x17\\x06\\x71\\x83\\x8a\\x85\\x81\\x1f\\x7b\"\n\"\\x82\\x81\\x79\\x7a\\x1a\\x7a\\x94\\x7b\\x98\\x82\\x1e\\x83\\x96\\x96\\x89\\xa5\\x1b\\xbc\\x06\\x6a\\xfb\\x82\\x43\\xf7\\x5f\\x05\\xfb\\x00\\x06\\x43\\xfb\\x5f\"\n\"\\x6a\\xf7\\x82\\x05\\xb6\\x06\\xa3\\x96\\x8d\\x90\\x95\\x61\\x0a\\x81\\x8d\\x6f\\x1b\\xfb\\x17\\x06\\x70\\x84\\x8a\\x85\\x81\\x1f\\x7a\\x81\\x82\\x7b\\x77\\x1a\"\n\"\\x6f\\x9b\\x7a\\xa9\\x87\\x1e\\xc9\\xfc\\x62\\x05\\xf7\\x0a\\x06\\xe4\\xf9\\x5e\\x26\\x0a\\x5a\\x1d\\x7b\\xf9\\x96\\x36\\x1d\\x5a\\x1d\\x7b\\xf9\\xad\\x81\\x1d\"\n\"\\xf8\\x4e\\xf8\\x60\\x15\\x5e\\x2f\\x0a\\xf7\\x29\\xfc\\x87\\xfb\\x29\\x2f\\x0a\\xb8\\x07\\xf7\\x4d\\xfb\\x76\\x15\\x6c\\x91\\x9a\\x7c\\xa6\\x1b\\xad\\x9a\\xa0\"\n\"\\xbd\\x1f\\xb9\\x07\\xbc\\x7c\\xa1\\x69\\x70\\x7c\\x7c\\x6c\\x85\\x1e\\x32\\x06\\xab\\x85\\x7d\\x99\\x6f\\x1b\\x6a\\x7c\\x75\\x5a\\x1f\\x5d\\x07\\x5a\\x9b\\x75\"\n\"\\xad\\xa5\\x9a\\x9a\\xaa\\x90\\x1e\\x2b\\xfb\\x16\\x15\\xb8\\x07\\xb8\\x56\\x1d\\x5e\\x1e\\xfb\\x29\\xf8\\x87\\xf7\\x29\\x07\\xb8\\x56\\x1d\\x5e\\x1e\\x5e\\x07\"\n\"\\x0e\\x2b\\x0a\\x56\\xf8\\xf7\\x26\\x0a\\x2b\\x0a\\xfb\\x32\\xf9\\x46\\x81\\x1d\\x44\\x1d\\xab\\xf9\\x0a\\x26\\x1d\\x44\\x1d\\xfb\\x0f\\x8a\\x1d\\x44\\x1d\\x0e\"\n\"\\x23\\x0a\\xfb\\x75\\xf8\\x7b\\x3b\\x1d\\x76\\x0a\\x61\\xf7\\xea\\x27\\x0a\\x91\\x0a\\x21\\x1d\\x0e\\xf8\\xbb\\xf8\\xc8\\x15\\xfc\\x66\\x9d\\x0a\\xf7\\x12\\xf7\"\n\"\\x84\\x7a\\xf7\\x65\\x1d\\xfb\\xf0\\xfb\\xe7\\x15\\xf7\\x12\\xf7\\x11\\x07\\xe6\\xba\\x74\\x5d\\x65\\x6a\\x78\\x4a\\x1f\\x0e\\x7c\\x0a\\xbe\\x1d\\xf8\\x69\\x16\"\n\"\\x8f\\x5e\\x05\\x52\\x90\\x99\\x77\\xaf\\x1b\\xb2\\x99\\xa1\\xc7\\x1f\\xc7\\x07\\x8d\\xcd\\x7d\\x9b\\x4f\\x8d\\x08\\xf7\\xf8\\x07\\xbc\\x8c\\xa2\\x9d\\xae\\x1a\"\n\"\\xaf\\x73\\x99\\x4c\\x1e\\xfb\\xd9\\x06\\x4a\\x74\\x7e\\x65\\x68\\xa4\\x79\\xbe\\x1f\\x91\\x06\\x8d\\x06\\x8d\\xfb\\x4b\\x06\\x47\\x80\\x5e\\x74\\x71\\x1e\\x74\"\n\"\\x76\\x6e\\x7f\\x68\\x1b\\x83\\x06\\x80\\x8c\\x05\\x89\\x06\\x8a\\x06\\x85\\xfb\\x24\\x06\\x4e\\x99\\x76\\xb2\\xaf\\x99\\x9f\\xc6\\x8f\\x1e\\x8d\\xb6\\x05\\xf7\"\n\"\\x26\\xf8\\x60\\x15\\xf7\\x12\\xfb\\xf8\\x06\\xfb\\x35\\x8d\\xa1\\xb1\\x97\\xc9\\x8c\\xd2\\x19\\x0e\\x78\\x0a\\xf7\\x60\\xf7\\x7b\\x15\\xd8\\x06\\x74\\x8c\\x82\"\n\"\\x8f\\x83\\x1e\\x78\\x93\\x9e\\x80\\xa1\\x1b\\xaf\\x9d\\xa1\\xb9\\x1f\\xf7\\x00\\x07\\xb6\\x78\\xa3\\x68\\x76\\x78\\x80\\x7a\\x83\\x1e\\x86\\x83\\x8a\\x81\\x74\"\n\"\\x1a\\x3e\\xf7\\x11\\xf7\\x6f\\x5f\\x06\\x60\\x9e\\x73\\xae\\xae\\x9e\\xa2\\xb7\\x1e\\xf7\\x28\\xfc\\x51\\x07\\x65\\x0a\\x95\\xfb\\xf8\\x81\\x06\\x5d\\x72\\x75\"\n\"\\x1d\\xf8\\x67\\xf7\\x2a\\x06\\xb6\\x78\\xa3\\x68\\x68\\x78\\x73\\x60\\x1e\\x5d\\xfb\\x85\\x07\\x84\\xf9\\x13\\x43\\x0a\\xf7\\x8a\\xf2\\x15\\x65\\x86\\x7a\\x7b\"\n\"\\x6c\\x1a\\x66\\xa2\\x7d\\xcb\\x1e\\xb6\\x06\\xc9\\xa3\\x99\\xb0\\xa9\\x7a\\x9b\\x67\\x91\\x1f\\xf7\\x24\\x07\\x95\\x81\\xa1\\x62\\x96\\x6d\\xb4\\x21\\x18\\xa0\"\n\"\\x59\\x95\\x82\\xb4\\x8a\\x08\\xab\\x06\\xaa\\xa1\\x9f\\xa9\\xaa\\x78\\x9d\\x64\\x8f\\x1f\\x64\\xf3\\x7a\\xb7\\x74\\xac\\x6a\\xa7\\xf7\\x0e\\x0a\\x6f\\x94\\x99\"\n\"\\x7f\\xa4\\x1b\\xae\\x98\\xa0\\xc3\\x1f\\x98\\x07\\xce\\x80\\x9b\\x5f\\x4a\\x78\\x77\\xfb\\x46\\x29\\x1e\\xea\\x07\\xac\\x92\\x9b\\x9b\\xa7\\x1a\\xb1\\x74\\x99\"\n\"\\x4d\\xbc\\x0a\\x7b\\x48\\xcc\\x0a\\x6a\\x6c\\x73\\x68\\x7c\\x62\\x64\\x24\\x18\\x64\\x87\\x79\\x7b\\x6b\\xf7\\x2f\\x1d\\xaf\\x9c\\xaa\\x99\\x99\\x08\\x0e\\xf7\"\n\"\\x4f\\xf8\\xc6\\x15\\xa6\\x8c\\x72\\xa2\\x6f\\x1b\\x6d\\x74\\x75\\x6e\\x1f\\x80\\x07\\x8c\\x63\\x05\\x60\\x8a\\x80\\x87\\x70\\x1e\\x86\\x72\\x88\\x74\\x86\\x1a\"\n\"\\x71\\xa3\\x76\\xa8\\xa6\\x99\\x98\\xad\\x95\\x1e\\xd2\\x9f\\xb0\\xa6\\xd5\\x1b\\xcc\\xb6\\x71\\x65\\x61\\x5c\\x72\\x40\\x1f\\x78\\x06\\x4b\\x74\\x7d\\x65\\x64\"\n\"\\xa3\\x7e\\xcf\\x1f\\xab\\x06\\xe4\\xaf\\x77\\x5b\\x56\\x5c\\x6f\\x31\\x44\\x59\\x99\\xaf\\x50\\x1f\\xa2\\x66\\x7c\\x91\\x7b\\x1b\\x6f\\x72\\x71\\x6f\\x76\\x95\"\n\"\\x7a\\xa1\\x7d\\x1f\\x57\\xd8\\xe1\\x71\\xea\\x1b\\xe6\\xc7\\x9b\\xaf\\xb9\\x1f\\xb4\\xab\\xa2\\xba\\xbf\\x1a\\xc4\\x73\\xb6\\x59\\xac\\x1e\\xaf\\xac\\x9c\\xaf\"\n\"\\xb8\\x1a\\xea\\x34\\xcf\\xfb\\x0e\\x5b\\x62\\x82\\x77\\x62\\x1e\\x0e\\x56\\x0a\\x0e\\x56\\x0a\\xf7\\x06\\xf7\\xc7\\x15\\x74\\x7c\\x7c\\x75\\x4d\\xd6\\x55\\xe1\"\n\"\\xe0\\xd6\\xc1\\xc9\\xa1\\x7c\\x9a\\x75\\x78\\x81\\x82\\x75\\x84\\x1f\\x6a\\x82\\x6c\\xf7\\x37\\x1d\\x77\\x0a\\x0e\\xf8\\x90\\xf8\\x60\\x15\\xbe\\x8d\\xa0\\x9a\"\n\"\\xae\\x1a\\xb1\\x74\\x99\\x4c\\x1e\\xfb\\xd8\\x06\\x4b\\x74\\x7d\\x66\\x68\\xa3\\x7a\\xbb\\x8a\\x1f\\x90\\x06\\x92\\xfb\\x94\\x06\\x3f\\x7a\\x67\\x69\\x89\\x1e\"\n\"\\x8a\\x06\\x87\\x95\\x06\\xbb\\x79\\xa4\\x67\\x64\\x7c\\x74\\x54\\x1e\\x52\\x07\\x6a\\xaf\\x77\\xc9\\xca\\xb5\\x9d\\xb3\\xa7\\x1e\\xa7\\xb0\\x99\\xc2\\xd0\\x1a\"\n\"\\xf7\\x94\\xf7\\x10\\xfb\\xf9\\x07\\x58\\x8a\\x76\\x7c\\x68\\x1a\\x64\\xa2\\x7e\\xcb\\x1e\\xda\\x06\\xca\\xa2\\x99\\xb1\\xae\\x76\\x9a\\x58\\x8c\\x1f\\x0e\\x79\"\n\"\\x0a\\x50\\x0a\\x24\\x1d\\x0e\\xf8\\x26\\xf7\\x28\\x1d\\xb9\\xa3\\x9d\\xad\\xae\\x76\\x9a\\x58\\x8c\\x1f\\xf7\\xfa\\x30\\x0a\\xfc\\x10\\x88\\x1d\\xf7\\x0c\\x39\"\n\"\\x1d\\x81\\xf7\\xf8\\x06\\x0e\\x7f\\x0a\\x7b\\x1d\\x0e\\x54\\x0a\\x83\\x0a\\x0e\\xf7\\xf6\\xf8\\x69\\x15\\xa2\\x06\\xb5\\xa1\\x9b\\xaa\\xaa\\x74\\x9c\\x5e\\x1f\"\n\"\\xfb\\x24\\x06\\x5e\\x74\\x7b\\x6c\\x6c\\xa1\\x7a\\xb3\\x1f\\xa2\\x70\\x06\\x43\\x89\\x63\\x85\\x71\\x80\\x08\\x54\\x75\\x6c\\x58\\x4b\\x1a\\x22\\xcf\\x52\\xf7\"\n\"\\x10\\x1e\\xab\\x6e\\x74\\x06\\x62\\x75\\x7a\\x6c\\x6c\\xa1\\x7b\\xb4\\x1f\\xf7\\x2e\\x06\\xb5\\xa2\\x9c\\xaa\\xaa\\x76\\x9b\\x62\\x1f\\x71\\xa8\\x99\\x06\\xf7\"\n\"\\x1f\\xd2\\xc2\\xf7\\x01\\xc5\\x6f\\xbb\\x5c\\xa3\\x1f\\x6e\\x9a\\x5e\\x92\\x40\\x8d\\x08\\xfb\\x00\\x2d\\x15\\xfb\\x16\\x7c\\x07\\x48\\x69\\xa2\\xb7\\xb5\\xa9\"\n\"\\xa0\\xc7\\x1f\\xf7\\x1a\\x16\\xa2\\x06\\xc9\\xaa\\x76\\x61\\x5e\\x67\\x75\\x43\\x1f\\x83\\x06\\x0e\\x79\\x1d\\xf8\\x83\\xf8\\x60\\x15\\xc0\\x8e\\x9f\\x98\\xaf\"\n\"\\xd3\\x0a\\xfb\\xf9\\xfb\\x5c\\xf7\\xf9\\x95\\x06\\xb9\\xa4\\x9d\\xad\\xad\\x73\\xb0\\x1d\\x68\\x9e\\x7e\\xc0\\x88\\x1f\\xfb\\xf9\\x2c\\x0a\\xf8\\x19\\x55\\xf7\"\n\"\\x66\\x1d\\xf7\\x31\\x28\\x07\\x0e\\xf8\\x20\\xf3\\x15\\x55\\x06\\x4b\\x74\\x7d\\x64\\x66\\xa2\\x7d\\xcb\\x1f\\xf7\\x29\\xba\\x0a\\x4c\\x73\\x9a\\x1d\\x62\\x50\"\n\"\\x63\\x7b\\xf7\\x07\\x0a\\xf7\\x04\\x07\\xca\\x8c\\x9f\\x98\\xb0\\x1a\\xb2\\x74\\x98\\x4a\\x1e\\x32\\x06\\x4b\\x74\\x7d\\x65\\x68\\x9f\\x7d\\xc0\\x89\\x1f\\xfb\"\n\"\\x08\\x07\\xfb\\x09\\xc2\\x4e\\xf7\\x09\\x0a\\x0e\\xf7\\x8a\\xf3\\x15\\x3f\\xf8\\x60\\xfb\\x02\\x06\\x5d\\x73\\x79\\x68\\x69\\x9e\\x7d\\xc0\\x89\\x1f\\xfb\\xfa\"\n\"\\x2c\\x0a\\xf8\\x5f\\x06\\xaf\\xa3\\xa0\\xaa\\xac\\x76\\x9c\\x63\\x8d\\x1f\\xf7\\xf9\\x07\\xbf\\x8d\\x9f\\x99\\xae\\x1a\\xad\\x73\\x9d\\x5c\\x1e\\xfb\\x01\\xfc\"\n\"\\x60\\x3f\\xf7\\xf9\\x06\\xac\\x8e\\x9c\\x9c\\xaa\\x1a\\xad\\x75\\x9d\\x5f\\xae\\x1d\\x6e\\x9c\\x7a\\xac\\x86\\x1f\\x0e\\xf7\\x7f\\xf2\\x15\\x3f\\xf8\\x61\\xfb\"\n\"\\x02\\x06\\x5d\\x73\\x79\\x68\\x68\\x9e\\x7e\\xc0\\x88\\x1f\\xfb\\xf9\\x2c\\x0a\\xf8\\x54\\x55\\x4a\\x0a\\xf7\\x31\\x29\\xf7\\xf9\\x07\\xc0\\x8e\\x9e\\x99\\x6e\"\n\"\\x1d\\xfb\\x02\\xfc\\x61\\x3f\\xf7\\xfa\\x06\\xaa\\x8e\\x9e\\x9e\\xa9\\x1a\\xac\\x74\\x9d\\x60\\xae\\x1d\\x6d\\x9c\\x7a\\xac\\x87\\x1f\\x0e\\x7c\\xf8\\xc8\\x15\"\n\"\\xfb\\x0d\\x07\\x5e\\x9e\\x74\\xae\\xaf\\x9d\\xa2\\xb8\\x1e\\x9c\\xf7\\x06\\xfb\\xf8\\x81\\x9f\\x1d\\xf7\\x50\\x06\\xf7\\x21\\xd4\\xc0\\xf2\\xbd\\x77\\xb8\\x67\"\n\"\\xaa\\x1f\\xae\\x63\\x4c\\x9c\\x2f\\x1b\\x6a\\xf7\\x12\\xb2\\x39\\x1d\\x64\\xfc\\x60\\x15\\xf7\\x12\\xb1\\x07\\xe4\\xbb\\x72\\x5d\\x67\\x6a\\x78\\x4b\\x1f\\x0e\"\n\"\\xca\\xf3\\x15\\x81\\x06\\x64\\x76\\x79\\x6b\\x67\\xa3\\x79\\xba\\x1f\\xf7\\x20\\x06\\xf7\\x1e\\xd3\\xc2\\xf5\\xf4\\x32\\xcf\\xfb\\x1d\\x1f\\x7a\\xf7\\x12\\xb3\"\n\"\\x27\\x1d\\xfb\\x32\\x29\\x1d\\x95\\x06\\xf7\\x00\\xfb\\xf8\\x15\\xf7\\x13\\xa1\\x07\\xd6\\xb1\\x74\\x5d\\x64\\x6f\\x78\\x52\\x1f\\xf7\\x7d\\x16\\x63\\x89\\x75\"\n\"\\x78\\x6b\\x1a\\x69\\xa3\\x7a\\xb9\\x1e\\xed\\x06\\xb9\\xa4\\x9d\\xac\\xad\\x74\\x9c\\x5d\\x8c\\x1f\\xf7\\xfa\\x07\\xb4\\x8c\\x9f\\x9c\\xad\\x1a\\xac\\x74\\x9d\"\n\"\\x60\\x1e\\x26\\x06\\x62\\x75\\x79\\x6a\\x69\\x9f\\x7a\\xb4\\x8a\\x1f\\x0e\\xf7\\x5f\\xf8\\x60\\x15\\xa3\\x06\\x4f\\x1d\\xfb\\x22\\x9d\\x0a\\x06\\xfb\\x7a\\x04\"\n\"\\xf7\\x12\\xf7\\x11\\x07\\xe6\\xba\\x74\\x5d\\x65\\x6a\\x78\\x4a\\x1f\\x0e\\xf7\\x7f\\xf7\\xe3\\x15\\x5f\\x74\\x79\\x69\\x69\\xa2\\x79\\xb7\\x1f\\xf7\\x75\\x06\"\n\"\\x32\\x83\\x44\\x57\\xfb\\x08\\x1b\\x53\\x64\\x97\\xa7\\x6e\\x1f\\xa3\\x72\\x80\\x91\\x79\\x1b\\x6f\\x72\\x72\\x71\\x6e\\xa3\\x6d\\xb8\\x73\\x1f\\x6f\\xbd\\xbe\"\n\"\\x7f\\xcd\\x1b\\xf7\\x44\\xf7\\x0f\\xf4\\xf7\\x2a\\x1f\\xca\\x07\\xf7\\x31\\xfb\\x0a\\xf7\\x09\\xfb\\x32\\x55\\x5d\\x80\\x71\\x5d\\x1e\\x9c\\x7e\\x7e\\x91\\x78\"\n\"\\x1b\\x69\\x78\\x73\\x60\\x1f\\x3b\\x07\\x60\\x9e\\x73\\xad\\xa9\\x9c\\x9c\\xaf\\x93\\x1e\\x8f\\x9e\\x91\\x94\\x9b\\x97\\x08\\x9d\\xa4\\xb9\\x98\\xb2\\x1b\\xdf\"\n\"\\xcf\\x53\\x38\\x99\\x1f\\x0e\\xf7\\x5b\\xf7\\x79\\x15\\xfb\\x32\\x98\\xd5\\x36\\xf7\\x0f\\x1b\\xbd\\xb6\\x9a\\xa7\\xad\\x1f\\xbd\\xb6\\xa9\\xed\\xf7\\x0e\\x1a\"\n\"\\xee\\x78\\xd4\\x65\\xba\\x1e\\xb7\\x67\\x57\\xa2\\x4e\\x1b\\xfb\\x10\\x3c\\x2f\\xfb\\x2d\\x83\\x1f\\x67\\xf7\\x13\\x90\\x27\\x1d\\x2c\\x88\\x1d\\xf7\\x07\\x2b\"\n\"\\x1d\\xad\\x73\\x9c\\x5d\\x1f\\x86\\xf7\\x12\\x06\\xf7\\x87\\xf7\\x89\\x15\\xa1\\x9e\\x84\\x7e\\x9a\\x1f\\xa7\\x74\\x9d\\x45\\x37\\x1a\\xfb\\x13\\x6b\\x4f\\x46\"\n\"\\x6d\\x71\\x99\\xa2\\x7a\\x1e\\x78\\xa8\\x81\\xbc\\xd3\\x1a\\xe5\\x97\\xc0\\xa6\\xa7\\x1e\\x9c\\x9c\\xa0\\x94\\xa3\\x1b\\x0e\\xf8\\x20\\xf7\\x68\\x15\\xfb\\x00\"\n\"\\x6d\\x07\\x65\\x0a\\xf7\\x28\\x06\\xb9\\xa4\\x9d\\xad\\xac\\x72\\x9e\\x5d\\x1f\\x81\\xf7\\xf8\\x95\\x67\\x1d\\xfb\\x72\\x06\\x45\\x55\\x7a\\x69\\x63\\x1f\\x65\"\n\"\\x6b\\x76\\x60\\x5d\\x1a\\x4f\\xad\\x5c\\xd1\\x64\\x1e\\x5c\\x62\\x71\\x6b\\x5c\\x46\\x74\\x8a\\x80\\x8a\\x82\\x87\\x08\\x79\\x84\\x7f\\x79\\x76\\x2a\\x0a\\xc6\"\n\"\\x06\\xd9\\xf7\\x08\\xd2\\xd7\\xba\\x9f\\x08\\xe6\\xf3\\x15\\x43\\x06\\x3d\\x46\\xaf\\xb5\\xb1\\xba\\xa7\\xcb\\x1f\\xf7\\x00\\x06\\x0e\\xf7\\x2c\\xf8\\x61\\x15\"\n\"\\xfb\\xfa\\x56\\x07\\x74\\x7f\\x89\\x86\\x82\\x6d\\x0a\\x7c\\x99\\x80\\x1e\\x84\\x96\\x93\\x89\\xa8\\x1b\\xf7\\x6a\\x06\\xa4\\x95\\x8d\\x90\\x94\\x99\\x1d\\x56\"\n\"\\xf7\\xfa\\xf7\\xcf\\xf7\\x04\\x1d\\xfc\\x04\\x07\\x71\\x49\\x0a\\x2d\\x0a\\x1e\\x0e\\xf7\\x3e\\xf8\\x60\\x15\\xfb\\xf7\\x07\\x4e\\x89\\x77\\x7e\\x65\\x1a\\x69\"\n\"\\xa3\\x77\\xb3\\x8d\\x1e\\xa2\\x8c\\xe1\\x8a\\x05\\xcb\\x8a\\xa3\\x9a\\xb1\\x1a\\xaf\\x77\\x9a\\x57\\x8d\\x1e\\xd8\\x07\\xb3\\xcb\\xb3\\x9c\\xaa\\x1b\\xb1\\xa6\"\n\"\\x6b\\x5d\\x5f\\x80\\x7d\\x5f\\x7d\\x1f\\x69\\x80\\x7e\\x7c\\x6e\\x1a\\x6d\\xa0\\x79\\xaf\\xdf\\xd0\\xe0\\xf3\\xef\\x4a\\xcf\\x2c\\x5c\\x60\\x7e\\x6a\\x51\\x1e\"\n\"\\xf7\\x37\\xc2\\x07\\x8c\\x66\\x8c\\x80\\x8f\\x82\\x08\\x77\\x92\\x9f\\x7e\\xa2\\x1b\\xac\\x9d\\x9f\\xaf\\x8e\\x8b\\x9d\\x8a\\x92\\x1f\\x8a\\xa9\\x88\\xd4\\x86\"\n\"\\x90\\x3b\\x8d\\x19\\xfb\\x91\\x06\\x3f\\x89\\x85\\x86\\x82\\x42\\x87\\x69\\x18\\x89\\x79\\x8b\\x85\\x84\\x1a\\x69\\x9f\\x77\\xad\\xae\\x98\\x9d\\xc2\\x92\\x1e\"\n\"\\x8e\\xa1\\x05\\x0e\\xf7\\x9c\\xf3\\x15\\xf7\\xf8\\xf7\\x5e\\x37\\x07\\x60\\x9e\\x74\\xae\\xae\\x9e\\xa2\\xb6\\x1e\\xf7\\x50\\xfc\\x6a\\x9f\\x1d\\xbf\\xfb\\xf8\"\n\"\\x57\\x06\\x46\\x0a\\xc7\\xf8\\xf3\\x15\\x99\\x97\\x92\\x95\\x97\\x1a\\x9d\\x7a\\x9b\\x78\\x81\\x81\\x87\\x82\\x80\\x1e\\xfb\\x00\\x37\\x05\\x7d\\x81\\x84\\x80\"\n\"\\x7e\\x1a\\x79\\x9b\\x7b\\x9f\\x95\\x94\\x8f\\x95\\x97\\x1e\\x0e\\xf7\\x22\\xf7\\xe3\\x15\\xde\\x9a\\xcd\\xc3\\xe0\\x1b\\xae\\xb5\\x80\\x7c\\xa4\\x1f\\xa0\\x7e\"\n\"\\x93\\x80\\x90\\x76\\x08\\x67\\x93\\x9c\\x7a\\xa9\\x1b\\xad\\x9e\\xa3\\xb6\\x1f\\xdb\\x07\\xb6\\x78\\xa3\\x6a\\x77\\x7d\\x84\\x7b\\x7f\\x1e\\xa4\\x5e\\x5d\\x97\"\n\"\\x54\\x1b\\xfb\\x32\\xfb\\x0a\\xfb\\x09\\xfb\\x31\\x1f\\x4c\\x07\\xfb\\x2a\\xf7\\x0f\\x22\\xf7\\x44\\xcd\\xbe\\x97\\xa7\\xbd\\x1e\\xb8\\xa3\\xa3\\xa9\\xa8\\x1a\"\n\"\\xa6\\x72\\xa3\\x6f\\x7c\\x7c\\x83\\x7a\\x79\\x1e\\x69\\x67\\x6a\\x80\\x4e\\x1b\\xfb\\x08\\x44\\xbf\\xe4\\x83\\x1f\\xf7\\x75\\x06\\xb7\\xa2\\x9d\\xad\\xad\\x74\"\n\"\\x9d\\x5f\\x1f\\x0e\\xb4\\x1d\\x0e\\x21\\x0a\\x0e\\xd4\\x1d\\xf9\\x13\\x43\\x0a\\x7d\\x0a\\x0e\\xf7\\xa1\\xf8\\x60\\x15\\xb2\\xfb\\xf9\\x06\\x68\\x86\\x7a\\x7a\"\n\"\\x6e\\x1a\\x68\\xa3\\x7a\\xbb\\x1e\\xd2\\x06\\xd0\\xbc\\x9c\\xae\\xad\\x1f\\xaa\\xaa\\x9c\\xb6\\xb8\\x1a\\xc0\\x73\\xbb\\x60\\xaa\\x1e\\x6c\\xa2\\x6a\\x96\\x57\"\n\"\\x90\\x08\\xf7\\x0a\\x07\\xcb\\x8c\\xa0\\x98\\xb1\\x28\\x1d\\xfb\\x88\\x06\\x4b\\x74\\x7d\\x66\\x68\\xa3\\x79\\xbb\\x1f\\x91\\xfb\\x94\\x06\\x3c\\x89\\x7d\\x68\"\n\"\\x6e\\x1b\\x89\\x06\\x87\\x8c\\x05\\x99\\x07\\xbd\\x7d\\x9d\\x63\\x64\\x7c\\x77\\x56\\x1e\\x61\\x07\\x5a\\xad\\x73\\xd2\\xf5\\xc3\\xd6\\xf7\\x24\\x1e\\xf7\\x27\"\n\"\\xac\\x15\\xbc\\x81\\xa1\\x77\\x65\\x1a\\x66\\x75\\x78\\x5a\\x84\\x1e\\x0e\\xf8\\x11\\xf7\\xe1\\x15\\xf7\\x14\\x30\\x0a\\x3f\\x06\\x61\\x74\\x79\\x6a\\x6e\\x9f\"\n\"\\x76\\xaa\\x88\\x1f\\xfb\\x13\\xfb\\x01\\xf7\\x13\\x07\\xab\\x8e\\x9f\\xa0\\xa8\\x1a\\xac\\x74\\x9d\\x60\\x1e\\x3f\\x5f\\x0a\\xfb\\xf9\\x07\\x58\\x8a\\x76\\x7c\"\n\"\\x68\\x1a\\x68\\xa3\\x79\\xb9\\x1e\\xeb\\x06\\xb6\\xa2\\x9d\\xac\\xa9\\x77\\x9f\\x6b\\x8e\\x1f\\xf7\\x12\\xf7\\x01\\xfb\\x12\\x07\\x6c\\x88\\x77\\x76\\x6e\\x1a\"\n\"\\x6a\\xa2\\x79\\xb5\\x1e\\xf7\\x1a\\x06\\xf7\\x13\\xd3\\xc3\\xef\\xf7\\x03\\x35\\xcd\\xfb\\x24\\x1f\\x82\\xfb\\x79\\x15\\xf7\\x12\\x9d\\x07\\xcd\\xba\\x6e\\x61\"\n\"\\x67\\x6c\\x78\\x50\\x1f\\x0e\\xf7\\xaa\\xf8\\x60\\x15\\xc4\\x82\\x06\\x79\\x07\\x63\\x9f\\x74\\xae\\xac\\x9d\\xa0\\xb2\\x1e\\xa4\\x07\\x89\\xa9\\x88\\xd0\\x7e\"\n\"\\x96\\x42\\x8a\\x19\\xfb\\x92\\x06\\x44\\x8e\\x7d\\x7e\\x87\\x46\\x8a\\x6d\\x18\\x8a\\x7a\\x8b\\x8b\\x85\\x1a\\x63\\x9d\\x75\\xad\\xb3\\x99\\xa2\\xce\\x8c\\x1e\"\n\"\\xc5\\xfb\\xf9\\x06\\x4f\\x76\\x7d\\x65\\x66\\xa2\\x7d\\xca\\x1f\\xe2\\x06\\xca\\xa3\\x99\\xb0\\xad\\x74\\x9c\\x5b\\x8c\\x1f\\xe1\\x07\\xb3\\xb6\\xa8\\x9a\\xab\"\n\"\\x1b\\xaf\\x9d\\x71\\x59\\x1f\\x4a\\x07\\x5a\\x8a\\x75\\x7a\\x68\\x1a\\x67\\xa3\\x7d\\xca\\x1e\\xca\\x06\\xca\\xa2\\x99\\xb0\\xab\\x79\\x9b\\x64\\x8f\\x1f\\xce\"\n\"\\x07\\xf4\\x4b\\xd2\\x2e\\x67\\x68\\x80\\x75\\x65\\x1e\\x0e\\x77\\x0a\\xfb\\x40\\xf7\\x83\\x15\\x9b\\x97\\x91\\x95\\x97\\x1a\\x9d\\x7a\\x9b\\x78\\x81\\x81\\x87\"\n\"\\x82\\x7f\\x1e\\xfb\\x00\\x37\\x05\\x7d\\x80\\x84\\x80\\x80\\x1a\\x78\\x9c\\x7b\\x9f\\x94\\x94\\x8f\\x95\\x98\\x1e\\x0e\\x83\\x0a\\xfb\\x0c\\xf8\\x7d\\x15\\x74\"\n\"\\x7c\\x7c\\x75\\x4d\\xd5\\x55\\xe2\\xe1\\xad\\x1d\\x78\\x82\\x83\\x74\\x84\\x1f\\x6a\\x80\\x6d\\xf7\\x37\\x1d\\x8d\\x1d\\x42\\x7f\\x7b\\x5a\\x1e\\x75\\x83\\x80\"\n\"\\x7c\\x75\\x1a\\x6e\\xb5\\x0a\\x45\\x72\\x5a\\x5d\\x1f\\x72\\x71\\x7c\\x68\\x6d\\x1a\\x41\\xdd\\x50\\xf3\\xc2\\xc6\\x97\\xa1\\xb9\\x1e\\x8c\\xf7\\x08\\x44\\x0a\"\n\"\\x0e\\xf7\\xec\\xf8\\x4f\\x15\\xc9\\xb2\\x95\\xa0\\xa0\\x1f\\x9c\\x9e\\x96\\xa9\\xaa\\x1a\\xaf\\x75\\xa3\\x69\\x79\\x7c\\x83\\x7d\\x80\\x1e\\x86\\x85\\x84\\x73\"\n\"\\x8c\\x82\\x08\\x80\\x07\\x7f\\x88\\x8a\\x62\\x8a\\x1e\\x36\\x06\\x45\\x5b\\x79\\x62\\x68\\x1f\\x68\\x62\\x7d\\x51\\x23\\x1a\\x20\\x9a\\x56\\xb8\\x5e\\x1e\\x5b\"\n\"\\xb9\\xcc\\x72\\xd6\\x1b\\xf7\\x23\\xf4\\xe7\\xf7\\x10\\xf7\\x13\\x2a\\xe4\\xfb\\x1c\\x52\\x61\\x80\\x71\\x63\\x1f\\x95\\xbb\\x99\\x95\\xc7\\x8d\\x08\\xb5\\xfb\"\n\"\\x0e\\x15\\xd9\\xc3\\x5a\\x47\\x47\\x53\\x5a\\x3c\\x3d\\x53\\xbc\\xce\\xa9\\x97\\xa8\\xa0\\xa1\\x1f\\xa5\\xa5\\xa8\\x96\\xba\\x1b\\x0e\\xea\\xf3\\x15\\x81\\x29\"\n\"\\x1d\\xf7\\xa3\\x06\\xce\\xbb\\x97\\xa2\\xaa\\x1f\\xa8\\xa1\\x9c\\xac\\xad\\x1a\\xb9\\x71\\xaa\\x53\\xa1\\x1e\\xa9\\xa6\\x99\\xa8\\xac\\x1a\\xa5\\x82\\xa2\\x7a\"\n\"\\x9d\\x1e\\xa7\\x70\\x49\\x9d\\x3d\\x1b\\xfb\\x78\\x29\\x1d\\x95\\x06\\xf7\\x00\\x54\\x15\\xc2\\xf5\\x07\\xc6\\xad\\x81\\x7b\\x75\\x71\\x84\\x34\\x1f\\x35\\xfb\"\n\"\\x36\\x15\\xc5\\xf7\\x13\\x07\\xe5\\x9f\\x86\\x76\\x76\\x6c\\x80\\x50\\x1f\\x0e\\x8f\\x0a\\x0e\\xf8\\x5f\\x16\\x68\\x07\\x58\\x9d\\x72\\xb0\\xb2\\x99\\xa1\\xc7\"\n\"\\x1e\\xbd\\x07\\x8d\\xcb\\x7d\\x9c\\x53\\x8d\\x08\\xf7\\x6d\\x07\\xba\\x8d\\xa0\\x9b\\xae\\x1a\\xb0\\x73\\x99\\x4c\\x1e\\xfb\\xc2\\x06\\x4c\\x74\\x7d\\x66\\x67\"\n\"\\xa3\\x7a\\xbb\\x1f\\x8e\\x06\\x90\\xfb\\x04\\x06\\x89\\x34\\x7b\\x7c\\x35\\x88\\x08\\x69\\xfb\\x19\\x06\\x4b\\x96\\x79\\xb4\\xb5\\x99\\x9f\\xc5\\x1e\\xac\\x07\"\n\"\\xf7\\x1e\\xf7\\xd5\\x15\\xf7\\x03\\xfb\\x6d\\xfb\\x1d\\x06\\x9b\\xa4\\x95\\xb0\\xb6\\x1a\\x0e\\x35\\x1d\\x0e\\xf8\\xbb\\xf7\\x34\\x15\\xb8\\x07\\xc9\\x6f\\xca\"\n\"\\x5d\\xb5\\x1e\\xb2\\x61\\x40\\xa5\\x46\\x1b\\xfb\\x27\\xfb\\x04\\x29\\xfb\\x14\\xfb\\x1b\\xf7\\x00\\x30\\xf7\\x34\\xd5\\xed\\x9d\\xa1\\xbc\\x1f\\x9e\\x93\\x96\"\n\"\\x9c\\x9e\\x1a\\xa7\\x75\\xa2\\x6e\\x81\\x7c\\x88\\x85\\x6f\\x1e\\x7a\\x40\\x6d\\x86\\x60\\x1b\\x42\\x59\\xa3\\xba\\x72\\x1f\\x8f\\xf3\\x15\\xbb\\xaa\\xb6\\xa1\"\n\"\\xca\\x1b\\xc9\\xb7\\x75\\x5b\\xaa\\x1f\\xfb\\x7c\\xf7\\xe1\\x15\\x6b\\x72\\x73\\x6d\\x6c\\xa5\\x73\\xaa\\xab\\xa4\\xa3\\xaa\\xa9\\x72\\xa3\\x6b\\x1f\\xf7\\x61\"\n\"\\x4a\\x1d\\xf7\\xf5\\xf7\\x9f\\x15\\xc3\\x07\\xa4\\x9b\\x94\\x9a\\xa0\\x1a\\xab\\x71\\x9d\\x5d\\x1e\\x6b\\x06\\x5e\\x71\\x79\\x6b\\x76\\x94\\x7d\\xa4\\x7a\\x1f\"\n\"\\x53\\x07\\x46\\xf5\\x05\\xad\\x74\\x69\\x9d\\x62\\x1b\\x5f\\x76\\x77\\x63\\x1f\\x63\\x07\\x65\\x9c\\x77\\xaa\\xa2\\x99\\x94\\xa2\\x95\\x1e\\x97\\x69\\x9c\\x76\"\n\"\\xa3\\x7d\\x7a\\x7e\\x77\\x73\\x7d\\x72\\x66\\x4a\\x18\\x5d\\x8a\\x76\\x7a\\x68\\x1a\\x6a\\x9e\\x7a\\xad\\x1e\\xce\\x06\\xcf\\xf7\\x0a\\x9b\\xa7\\xa0\\x9f\\x99\"\n\"\\x8e\\x19\\x47\\x07\\x73\\x7b\\x81\\x7c\\x77\\xe1\\x0a\\x9b\\x1f\\xd0\\x07\\x99\\x88\\xa0\\x76\\x9c\\x6f\\xcf\\xfb\\x0a\\x18\\xcd\\x06\\xae\\x9e\\x9c\\xab\\xaf\"\n\"\\x76\\x9c\\x5d\\x8c\\x1f\\x66\\xcc\\x7b\\xa5\\x7a\\xa0\\x78\\x9a\\x19\\xa4\\x99\\x9a\\x9f\\x98\\xae\\x08\\x75\\x95\\x99\\x81\\xa3\\x1b\\xaa\\x9c\\x9f\\xb1\\x1f\"\n\"\\xb3\\x07\\xb3\\x75\\x9f\\x5f\\x62\\x69\\x79\\x69\\x74\\x1e\\x0e\\xf7\\xc6\\xf7\\x3b\\x15\\xda\\xba\\x7f\\x76\\x74\\x58\\x79\\x4a\\x4b\\x4e\\x9b\\xab\\x4e\\x1f\"\n\"\\x95\\x78\\x81\\x8e\\x7e\\x1b\\x70\\x71\\x72\\x71\\x6b\\xab\\x70\\xcb\\x74\\x1f\\x74\\xcc\\xc5\\x81\\xcb\\x1b\\xf7\\x1f\\xe2\\xc2\\xe2\\xb4\\x79\\xa9\\x65\\xa6\"\n\"\\x1f\\xa3\\xa6\\x96\\xa3\\xa8\\x1a\\xd6\\x3b\\xc1\\xfb\\x02\\x58\\x62\\x80\\x73\\x63\\x1e\\xc1\\x81\\x80\\x99\\x6a\\x1b\\x6f\\x73\\x76\\x72\\x84\\x8d\\x80\\x8d\"\n\"\\x80\\x1f\\x8e\\x7d\\x8c\\x7c\\x6e\\x1a\\x79\\x8b\\x76\\x8a\\x83\\x1e\\xb4\\x0a\\x67\\x7f\\x8a\\x89\\x82\\x1f\\x70\\x84\\x7e\\x7b\\x6f\\x1a\\x66\\xa2\\x7e\\xcb\"\n\"\\x1e\\x0e\\x7d\\x1d\\x0e\\x7d\\x1d\\xf7\\x00\\xf7\\xc0\\x15\\x74\\x7c\\x7c\\x75\\x4d\\xd5\\x55\\xe2\\xe1\\xad\\x1d\\x77\\x83\\x83\\x70\\x82\\x1f\\x6f\\x82\\x69\"\n\"\\x78\\x61\\xea\\x0a\\xba\\x1d\\x0e\\xf8\\x82\\xf7\\xd5\\x15\\xba\\x8c\\xa0\\x9c\\xad\\x28\\x1d\\xfb\\xd0\\x06\\x4b\\x74\\x7d\\x65\\x64\\xa0\\x7f\\xce\\x8a\\x1f\"\n\"\\xfb\\x38\\x07\\x74\\x87\\x79\\x84\\x82\\x1e\\x83\\x83\\x7d\\x85\\x81\\x8c\\x08\\x88\\x06\\x85\\x8c\\x05\\xb2\\x88\\x7a\\x9e\\x6a\\x1b\\x67\\x7d\\x76\\x55\\x1f\"\n\"\\x5c\\x07\\x70\\xad\\x7b\\xc5\\xf7\\x05\\xc5\\xc4\\xf7\\x04\\x1e\\xf7\\x38\\xf7\\x0a\\xfb\\x6e\\x07\\x5e\\x8a\\x75\\x7a\\x68\\x1a\\x67\\xa2\\x7d\\xcb\\x1e\\xd0\"\n\"\\x06\\xca\\xa3\\x99\\xaf\\xae\\x75\\x9c\\x5d\\x8c\\x1f\\x0e\\xf7\\x3f\\xf7\\x9d\\x15\\xe8\\xfb\\x2d\\x05\\xd7\\x06\\xe4\\xf7\\x2c\\x05\\xfb\\x34\\x6c\\x07\\x3a\"\n\"\\x0a\\xf7\\x15\\x06\\xb9\\xa4\\x9d\\xad\\xac\\x77\\x9c\\x62\\x8d\\x1f\\xf7\\x6e\\x30\\x0a\\xfb\\x01\\x06\\xfb\\x02\\xfb\\x4b\\xfb\\x04\\xf7\\x4b\\x05\\x20\\x5f\"\n\"\\x0a\\xfb\\x6e\\x88\\x07\\x69\\x73\\x76\\x6c\\x69\\xa4\\x79\\xb9\\x1f\\xf7\\x14\\x39\\x1d\\x6d\\x06\\x0e\\xf8\\x26\\xf7\\x38\\x15\\x4f\\x86\\x07\\x3a\\x0a\\xf7\"\n\"\\x07\\x06\\xb9\\xa3\\x9d\\xae\\xad\\x76\\x9b\\x58\\x8c\\x1f\\xf7\\x6e\\x30\\x0a\\x2c\\xd0\\x1d\\x06\\x0e\\x25\\x1d\\x0e\\xf8\\x23\\xf7\\xd5\\x15\\xfb\\x6e\\x81\"\n\"\\x07\\x5c\\x73\\x7a\\x69\\x69\\xa3\\x79\\xba\\x1f\\xf7\\x0c\\x2b\\x1d\\xae\\x76\\x9a\\x58\\x8c\\x1f\\xf7\\x6e\\x07\\xae\\x90\\x9c\\x9b\\xa9\\x1a\\xae\\x73\\x9d\"\n\"\\x5d\\x1e\\xfc\\x10\\x06\\x5d\\x73\\x79\\x69\\x6c\\x9c\\x7a\\xae\\x87\\x1f\\xfb\\x6e\\x07\\x58\\x8a\\x76\\x7c\\x68\\x2a\\x0a\\xf7\\x0c\\x06\\xb9\\xa4\\x9d\\xad\"\n\"\\xad\\x73\\x9c\\x5c\\x1f\\x81\\xf7\\x6e\\x06\\x0e\\xb8\\x1d\\x6c\\x0a\\x64\\x5b\\x55\\x0a\\x0e\\xf7\\xf4\\xf7\\xd5\\x15\\xee\\x37\\x06\\x24\\x0a\\xf7\\x50\\xfc\"\n\"\\x9b\\xfb\\x50\\x2f\\x0a\\xdf\\xeb\\xfb\\x6d\\x4f\\x07\\xeb\\x0a\\xf7\\x7a\\x39\\x1d\\x4d\\x06\\x0e\\xb6\\x1d\\x0e\\xf7\\xf5\\xf8\\x8e\\x15\\x8a\\xcb\\x80\\x9b\"\n\"\\x61\\x8d\\x08\\x5a\\x50\\x82\\x81\\x7f\\x1f\\x80\\x82\\x85\\x7b\\x79\\x1a\\x6b\\x9e\\x7d\\xb8\\x1e\\x9e\\x5d\\x06\\x8d\\x79\\x86\\x8c\\x82\\x1b\\x2d\\x42\\x29\"\n\"\\xfb\\x11\\xfb\\x15\\xcf\\x2d\\xea\\x94\\x92\\x8b\\x8d\\x9f\\x1f\\x76\\x7d\\x07\\x4b\\x74\\x7e\\x65\\x64\\xa1\\x7e\\xcc\\x1f\\xf7\\x1d\\x06\\xcb\\xa3\\x99\\xb0\"\n\"\\xb2\\x75\\x98\\x49\\x1f\\x7c\\xa0\\x06\\x89\\xa2\\x90\\x8b\\x94\\x1b\\xec\\xce\\xe6\\xf7\\x17\\xf7\\x12\\x42\\xed\\x2e\\x82\\x85\\x8a\\x89\\x77\\x1f\\xfb\\x00\"\n\"\\xfb\\xe5\\x15\\x8a\\x82\\x85\\x8a\\x84\\x1b\\x61\\x70\\xb9\\xd4\\xcf\\xa9\\xbe\\xb3\\x90\\x92\\x8a\\x89\\x94\\x1f\\xf7\\x00\\x16\\x8d\\x97\\x93\\x8c\\x8d\\x1b\"\n\"\\xb6\\xa7\\x5c\\x44\\x42\\x70\\x5b\\x62\\x84\\x85\\x8c\\x8d\\x7f\\x1f\\x0e\\x7a\\x0a\\xba\\x1e\\xf7\\x05\\x63\\x1d\\x82\\x91\\x84\\x8d\\x78\\x8c\\x08\\x0e\\xf8\"\n\"\\x83\\xf7\\xd5\\x15\\xbf\\x8d\\xa0\\x9a\\xae\\xd3\\x0a\\xfb\\x6e\\xfb\\x5c\\xf7\\x6e\\x95\\x06\\xba\\xa3\\x9d\\xad\\xad\\x73\\xb0\\x1d\\x69\\xa0\\x7c\\xbe\\x89\"\n\"\\x1f\\xfb\\x6e\\x2c\\x0a\\xf8\\x19\\x60\\xf7\\x66\\x1d\\xf7\\x26\\x28\\x07\\x0e\\xf8\\x16\\xf3\\x15\\x5e\\x06\\x4b\\x74\\x7d\\x65\\x65\\xa2\\x7d\\xcb\\x1f\\xf7\"\n\"\\x1c\\x06\\xca\\xa3\\x99\\xb0\\xae\\x75\\x9c\\x5b\\x8c\\x1f\\xf7\\x6e\\xc2\\x0a\\x4c\\x07\\x6f\\x59\\x6b\\x81\\x62\\x1b\\x62\\x7c\\x95\\xa6\\x1f\\xf7\\x05\\x1d\"\n\"\\x35\\xc0\\x5d\\xef\\xbc\\xb7\\x95\\xa0\\xb4\\x1e\\x0e\\xf7\\x8a\\xf3\\x15\\x3f\\xf7\\xd5\\xfb\\x02\\x06\\x5d\\x73\\x79\\x68\\x69\\xa0\\x7c\\xbe\\x8a\\x1f\\xfb\"\n\"\\x6f\\x2c\\x0a\\xf8\\x4c\\x06\\xc2\\xa3\\x9a\\xaf\\xad\\x77\\x9c\\x62\\x8d\\x1f\\xf7\\x6e\\x07\\xbe\\x8c\\xa0\\x9a\\xae\\x1a\\xad\\x73\\x9d\\x5c\\x1e\\xfb\\x01\"\n\"\\xfb\\xd5\\x3f\\xf7\\x6e\\x06\\xac\\x8e\\x9c\\x9c\\xaa\\x1a\\xad\\x74\\x9d\\x60\\x1e\\x3d\\x06\\x61\\x75\\x79\\x6a\\x6b\\x9c\\x79\\xac\\x89\\x1f\\x0e\\xf7\\x7f\"\n\"\\xf2\\x15\\x3f\\xf7\\xd6\\xfb\\x02\\x72\\x0a\\xfb\\x6e\\x2c\\x0a\\xf8\\x54\\x60\\x4a\\x0a\\xf7\\x26\\x29\\xf7\\x6e\\x07\\xbe\\x8d\\xa0\\x9a\\x6e\\x1d\\xfb\\x02\"\n\"\\xfb\\xd6\\x3f\\xf7\\x6f\\x06\\xad\\x8f\\x9b\\x9b\\xa9\\x1a\\xae\\x75\\x9d\\x5f\\xae\\x1d\\x6d\\x9b\\x7a\\xad\\x87\\x1f\\x0e\\xf7\\x87\\xf7\\xd5\\x15\\xfb\\x6d\"\n\"\\x81\\x07\\xeb\\x0a\\xf7\\x3a\\x06\\xf7\\x13\\xcd\\xb7\\xdf\\xb1\\x7c\\xae\\x70\\xa3\\x1f\\xa7\\x6c\\x59\\x98\\x3e\\x1b\\x62\\xc2\\xa2\\x06\\x4f\\x1d\\xfc\\x04\"\n\"\\xfb\\x50\\x06\\x24\\x0a\\xdf\\x07\\xf7\\x81\\xfb\\x6d\\x15\\xc6\\xa2\\x07\\xe1\\xa3\\x85\\x75\\x77\\x6b\\x80\\x51\\x1f\\x0e\\xf7\\x4c\\xf7\\xd5\\x15\\x9c\\x06\"\n\"\\x4f\\x1d\\xfb\\x18\\x06\\x52\\x1d\\x92\\xfb\\x6d\\x84\\x06\\xa3\\x1d\\xf7\\x1e\\x06\\xf7\\x0b\\xce\\xb9\\xdd\\xb2\\x7b\\xae\\x70\\xa3\\x1f\\xa6\\x6b\\x5c\\x98\"\n\"\\x44\\x1b\\x7b\\x06\\xfb\\x36\\x04\\xc5\\x95\\x07\\xce\\xa3\\x84\\x76\\x77\\x6d\\x81\\x55\\x1f\\xf7\\x85\\xf7\\x6d\\x15\\xfb\\x6d\\x86\\x07\\x6d\\x74\\x74\\x6d\"\n\"\\x6a\\xa1\\x79\\xb4\\x1f\\xe0\\x06\\xba\\xa3\\x9c\\xad\\xaa\\x79\\x9d\\x68\\x8e\\x1f\\xf7\\x6f\\x07\\xae\\x90\\x9d\\x9c\\xa9\\x1a\\xad\\x73\\x9c\\x5c\\x1e\\x36\"\n\"\\x06\\x62\\x75\\x79\\x6a\\x6d\\xa2\\x74\\xa9\\x1f\\x0e\\xf7\\x5f\\xf7\\xd5\\x15\\x9e\\x06\\xb9\\xa4\\x9d\\xad\\xad\\x73\\x9d\\x5c\\x1f\\xfb\\x1d\\x29\\x1d\\x95\"\n\"\\xfb\\x6d\\x81\\x29\\x1d\\xf7\\xa3\\x06\\xf7\\x12\\xcd\\xb7\\xde\\xb1\\x7b\\xaf\\x71\\xa3\\x1f\\xa7\\x6c\\x59\\x98\\x3e\\x1b\\xfb\\x25\\x06\\xfb\\x36\\x04\\xc5\"\n\"\\xf7\\x13\\x07\\xe2\\xa2\\x85\\x75\\x78\\x6b\\x80\\x51\\x1f\\x0e\\xf7\\x9f\\xf7\\x9d\\x15\\x5f\\x74\\x7a\\x69\\x68\\xa2\\x79\\xb7\\x1f\\xf7\\x36\\x06\\x59\\x79\"\n\"\\x57\\x74\\x2f\\x1b\\x4a\\x5d\\x97\\xa4\\x6c\\x1f\\x98\\x7b\\x81\\x8f\\x7d\\x1b\\x6f\\x72\\x73\\x6f\\x4e\\xf0\\x5f\\xf7\\x1f\\xe0\\xc7\\x9b\\xad\\xb9\\x1f\\xc0\"\n\"\\xb3\\xa7\\xc5\\xcf\\x1a\\xf7\\x1f\\x21\\xec\\xfb\\x2d\\x57\\x60\\x82\\x78\\x61\\x1e\\x96\\x7d\\x81\\x8f\\x7c\\x1b\\x69\\x79\\x73\\x60\\x1f\\x4f\\x07\\x5e\\x9e\"\n\"\\x74\\xaf\\xa8\\x9c\\x99\\xa9\\x92\\x1e\\x8e\\x98\\x8c\\x8e\\x8f\\x91\\x08\\xa3\\x9a\\xb3\\x9a\\xc0\\x1b\\xd1\\xb5\\x76\\x5b\\xa6\\x1f\\x0e\\xf7\\x6e\\xf7\\x38\"\n\"\\x15\\x20\\x97\\xda\\x43\\xf3\\x1b\\xf7\\x0e\\xd7\\xe2\\xf7\\x1f\\xf7\\x1f\\x3f\\xe2\\xfb\\x0d\\x23\\x42\\x4b\\x22\\x7a\\x1f\\x56\\xc1\\x90\\x06\\xb9\\xa3\\x9c\"\n\"\\xad\\xad\\x73\\x9d\\x5d\\x1f\\x2c\\x5c\\x0a\\xf7\\x07\\x27\\x1d\\x86\\xc7\\x06\\xf7\\x8a\\xf7\\x3e\\x15\\xc1\\xaf\\x5a\\x42\\x42\\x66\\x59\\x56\\x56\\x66\\xbd\"\n\"\\xd4\\xd3\\xb0\\xbd\\xc0\\x1f\\x0e\\xf8\\x1a\\xf3\\x15\\x78\\x06\\x52\\x1d\\xf7\\x1d\\x39\\x1d\\x81\\xf7\\x6d\\x95\\x39\\x1d\\xfb\\xa3\\x06\\xfb\\x13\\x4a\\x5f\"\n\"\\x36\\x48\\xb3\\x5e\\xd6\\x79\\x1f\\x72\\x75\\x7e\\x7e\\x75\\x70\\x08\\x56\\x8a\\x76\\x7c\\x67\\x70\\x0a\\xc6\\x06\\x8f\\x91\\xc4\\xd5\\xc9\\xbd\\xd2\\xa8\\x19\"\n\"\\xb3\\x06\\xf7\\x36\\x04\\x51\\xfb\\x12\\x07\\x34\\x73\\x91\\xa0\\x9f\\xaa\\x96\\xc6\\x1f\\x0e\\xf7\\x30\\xf7\\xd5\\x15\\xfb\\x6d\\x57\\x07\\x46\\x0a\\x56\\xf7\"\n\"\\x6d\\xf7\\xca\\xf7\\x50\\x06\\xb7\\x56\\x1d\\x5f\\x1e\\x37\\xfb\\xfe\\x9f\\x1d\\x0e\\xeb\\xf2\\x15\\x89\\x06\\x41\\x0a\\xbf\\xc3\\x9f\\x95\\x9c\\x1d\\x80\\x6c\"\n\"\\x1a\\xfb\\xa9\\x07\\x5c\\x8c\\x68\\x6d\\x53\\x1b\\xfb\\x00\\x68\\x1d\\xf7\\x03\\x06\\xf7\\x05\\x8c\\xdd\\xd8\\xf2\\x1a\\xf7\\xb6\\x07\\xec\\x42\\xcc\\xfb\\x00\"\n\"\\x59\\x5c\\x78\\x69\\x67\\x1e\\xde\\xf7\\x01\\x07\\xaa\\x9b\\x98\\xa4\\xa4\\x7b\\x98\\x6c\\x1f\\xfb\\x01\\x06\\xbc\\x89\\x7c\\x9f\\x66\\x1b\\x66\\x7b\\x77\\x5a\"\n\"\\x8a\\x1f\\x5f\\x06\\x6c\\x7b\\x7e\\x72\\x72\\x9b\\x7e\\xaa\\x1f\\xb7\\x06\\x0e\\x8f\\x0a\\xc7\\xf8\\x61\\xf7\\x03\\x1d\\x9b\\x7b\\x9f\\x94\\x95\\x8f\\x95\\x97\"\n\"\\x1e\\x0e\\xf7\\x47\\xf7\\x9d\\x15\\xbb\\xa6\\xb5\\xa0\\xd1\\x1b\\xcd\\xb3\\x78\\x66\\x94\\x1f\\x67\\x94\\x99\\x7e\\xaa\\x1b\\xaf\\x9e\\xa2\\xb8\\x1f\\xc7\\x07\"\n\"\\xb6\\x79\\xa3\\x69\\x7c\\x81\\x87\\x80\\x7d\\x1e\\x9e\\x60\\x61\\x94\\x57\\x1b\\xfb\\x2d\\x21\\x2a\\xfb\\x1f\\x47\\xa7\\x51\\xc0\\x63\\x1f\\x69\\xb9\\xc7\\x7b\"\n\"\\xe0\\x1b\\xf7\\x1f\\xf0\\xb7\\xc8\\xa7\\x72\\xa3\\x6f\\x7d\\x81\\x87\\x7e\\x7b\\x1f\\x72\\x6c\\x5e\\x7f\\x4a\\x1b\\x2e\\x57\\xa2\\xbd\\x79\\x1f\\xf7\\x36\\x06\"\n\"\\xb7\\xa2\\x9d\\xae\\xad\\x74\\x9c\\x5f\\x1f\\x0e\\x42\\x1d\\x0e\\xcd\\x1d\\x7d\\x66\\x1d\\x0e\\xf7\\xf5\\xf8\\x3d\\x15\\xfb\\x4a\\x68\\x1d\\xd5\\xfb\\x6d\\xfb\"\n\"\\x05\\x06\\x5e\\x72\\x79\\x69\\x69\\xa4\\x79\\xb8\\x1f\\xf7\\xe2\\x06\\xb8\\xa4\\x9d\\xad\\xad\\x72\\x9d\\x5e\\x1f\\xfb\\x05\\x06\\xfb\\x58\\xf8\\x81\\x43\\x0a\"\n\"\\xc8\\x1d\\xf7\\x8c\\xf7\\x59\\x1d\\xf8\\x2f\\xf7\\xd5\\x15\\xb6\\x8c\\xa1\\x9d\\xac\\x28\\x1d\\xfb\\x7e\\x06\\x4c\\x74\\x7d\\x66\\x68\\xa3\\x79\\xbb\\x1f\\x8e\"\n\"\\x06\\x8f\\xfb\\x38\\x06\\x8a\\x58\\x83\\x80\\x65\\x8a\\x08\\x86\\x06\\xb3\\x88\\x7a\\x9e\\x6b\\x1b\\x69\\x7d\\x76\\x55\\x1f\\x5c\\x07\\x7d\\x8f\\x82\\x94\\x87\"\n\"\\x1e\\x82\\x9f\\xae\\x84\\xa9\\x1b\\xed\\xc4\\xc9\\xf6\\x1f\\xf7\\x38\\xc1\\xfb\\x6e\\x07\\x6a\\x85\\x7a\\x7a\\x6f\\x1a\\x69\\xa5\\x79\\xbc\\x1e\\xb5\\x06\\xda\"\n\"\\xb4\\x92\\x9d\\xa9\\x1f\\xb2\\xa3\\xa3\\xb3\\xb7\\x1a\\xb6\\x76\\xb3\\x67\\xa4\\x1e\\x6f\\x9e\\x69\\x94\\x56\\x8c\\x08\\x23\\x04\\xb9\\x89\\x99\\x83\\x75\\x1a\"\n\"\\x77\\x79\\x80\\x68\\x1e\\x84\\x06\\x0e\\xf8\\x17\\xf7\\xa0\\x15\\xc1\\x30\\x0a\\x3f\\x06\\x61\\x74\\x79\\x6b\\x6d\\x9f\\x77\\xaa\\x88\\x1f\\x55\\xfb\\x08\\xc1\"\n\"\\x07\\xaa\\x8d\\xa0\\xa0\\xa9\\x1a\\xab\\x74\\x9d\\x60\\x1e\\x3f\\x5c\\x0a\\xeb\\x06\\xb6\\xa2\\x9d\\xac\\xa9\\x77\\x9f\\x6b\\x8e\\x1f\\xc7\\xf7\\x08\\x4f\\x07\"\n\"\\x6c\\x87\\x77\\x77\\x6e\\x1a\\x6a\\xa2\\x79\\xb5\\x1e\\xf7\\x17\\x06\\xf7\\x13\\xcc\\xb7\\xe1\\xe6\\x47\\xba\\xfb\\x17\\x1f\\x6d\\xfb\\x38\\x15\\xc7\\x96\\x07\"\n\"\\xe3\\xa1\\x85\\x74\\x77\\x6c\\x80\\x50\\x1f\\x0e\\xf7\\x60\\xf8\\x67\\x15\\xf7\\x01\\x06\\xed\\x1d\\xfc\\x00\\x52\\x0a\\x0e\\xba\\x1d\\x52\\xf7\\x9a\\xf7\\x03\"\n\"\\x1d\\x9c\\x7b\\x9d\\x95\\x95\\x57\\x1d\\xf7\\x68\\xf7\\xd7\\x15\\xab\\x92\\x99\\x9b\\xa7\\x1a\\xb0\\x74\\x99\\x4b\\x1e\\x4c\\x06\\x4b\\x74\\x7d\\x66\\x68\\xa0\"\n\"\\x7b\\xba\\x8a\\x1f\\xf7\\x30\\xfb\\xa0\\x79\\x6c\\x7b\\x70\\x7a\\x7a\\x81\\x8d\\x19\\x8a\\x06\\x8a\\x06\\xc6\\x89\\x7f\\x9d\\x63\\x1b\\x62\\x7d\\x77\\x4f\\x1f\"\n\"\\x59\\x07\\x7a\\x8f\\x80\\x94\\x87\\x1e\\x80\\xa3\\xb6\\x81\\xa7\\x1b\\xc2\\xba\\xac\\xcd\\xb2\\x1f\\xf7\\x5f\\xf7\\xf0\\x05\\xb9\\x8c\\x9f\\x9b\\xae\\x1a\\xb0\"\n\"\\x73\\x99\\x4c\\x1e\\x4e\\x06\\x4c\\x74\\x7d\\x66\\x6f\\x99\\x7b\\xab\\x84\\x1f\\x2b\\xfb\\x37\\x05\\xfb\\x15\\xf8\\x62\\x15\\x74\\x7c\\x7c\\x75\\x4d\\xd5\\x55\"\n\"\\xe1\\xe2\\xad\\x1d\\x78\\x82\\x83\\x74\\x83\\x1f\\x6a\\x81\\x6c\\x79\\x5e\\xea\\x0a\\xf7\\x5b\\xf3\\x15\\xf7\\xf8\\x95\\x07\\xba\\xa4\\x9d\\xf7\\x4b\\x1d\\x9e\"\n\"\\x7d\\xc0\\x89\\x1f\\xfb\\xfa\\xa0\\x0a\\xf7\\xfa\\x07\\xc0\\x8d\\x9e\\x99\\x6e\\x1d\\xfb\\x0c\\x39\\x0a\\x95\\xfb\\xf8\\x06\\x0e\\x82\\x0a\\xa8\\xf7\\x96\\x15\"\n\"\\x62\\x07\\xfb\\x1a\\xf7\\x03\\x29\\xf7\\x2c\\xf7\\x29\\xf7\\x05\\xee\\xf7\\x15\\xf7\\x18\\xfb\\x02\\xe7\\xfb\\x32\\x43\\x25\\x7a\\x78\\x5d\\x1e\\x72\\x80\\x7f\"\n\"\\x7c\\x76\\x1a\\x6e\\xa1\\x74\\xa8\\x96\\x96\\x8d\\x8e\\x98\\x1e\\xa2\\xe8\\xa2\\x8f\\xb8\\x1b\\xdf\\xbd\\x73\\x57\\xa4\\x1f\\x89\\x2f\\x15\\x59\\x76\\x57\\x6f\"\n\"\\x46\\x1b\\x46\\x58\\xa7\\xbd\\x75\\x1f\\x0e\\xf2\\xcf\\x15\\x85\\x80\\x87\\x80\\x82\\x1a\\x74\\xa2\\x77\\xa4\\x9d\\x9a\\x94\\x9d\\x96\\x1e\\xee\\xf7\\x30\\x05\"\n\"\\x89\\x7c\\x8a\\x84\\x81\\x1a\\x32\\xcc\\x4b\\xe7\\xe5\\xcd\\xcb\\xe3\\xe3\\x49\\xcb\\x31\\x64\\x71\\x83\\x75\\x6a\\x1e\\xf7\\x2b\\xf7\\x84\\x05\\x92\\x95\\x8e\"\n\"\\x95\\x96\\x1a\\xa2\\x75\\x9f\\x72\\x78\\x7d\\x82\\x79\\x80\\x1e\\xfb\\x08\\xfb\\x4b\\x05\\xa1\\x85\\x7c\\x96\\x76\\x1b\\x7f\\x86\\x89\\x7e\\x78\\x1f\\x7d\\x78\"\n\"\\x77\\x84\\x7a\\x1b\\x67\\x71\\xa8\\xb5\\xb4\\xa6\\xa7\\xb2\\xa5\\x98\\x82\\x77\\x8f\\x1f\\x75\\x8e\\x9c\\x7d\\xa1\\x1b\\x8c\\x8d\\x8b\\x8c\\x8e\\x1f\\x8d\\x06\"\n\"\\xa0\\x8e\\x9a\\x9a\\x9f\\x1a\\x8a\\x95\\x05\\x87\\x9d\\x8b\\x8b\\x91\\x1a\\x90\\x8c\\x93\\x8d\\x92\\x1e\\x8d\\x93\\x8b\\x8c\\x8f\\x1a\\x9f\\x7d\\x9b\\x76\\x8e\"\n\"\\x1e\\x81\\x8d\\x05\\x8c\\x85\\x86\\x8c\\x89\\x1b\\x84\\x83\\x88\\x87\\x85\\x1f\\x88\\x86\\x8b\\x8b\\x8a\\x1b\\x8a\\x87\\x8c\\x8e\\x82\\x1f\\x8d\\x82\\x7d\\x8d\"\n\"\\x7f\\x1b\\x35\\x49\\x49\\x35\\x35\\xcc\\x49\\xe1\\xae\\xaa\\x95\\xa1\\xb0\\x1f\\xf7\\x43\\x24\\x15\\xb4\\xa5\\x6f\\x61\\x61\\x70\\x6f\\x64\\x64\\x71\\xa7\\xb5\"\n\"\\xb5\\xa5\\xa7\\xb1\\x1f\\x0e\\xf7\\x50\\xf7\\x22\\x15\\x8d\\x45\\x8e\\x76\\x95\\x76\\x08\\x72\\x98\\x9f\\x7d\\xa3\\x1b\\xa8\\xa3\\x99\\xab\\xa8\\x1f\\x9d\\x9f\"\n\"\\x9b\\xa0\\x96\\x9e\\x90\\x94\\x18\\x8d\\x8e\\x8c\\x8f\\x8f\\x1a\\x92\\x85\\x90\\x84\\x84\\x86\\x87\\x82\\x84\\x1e\\x80\\x7b\\x05\\x6c\\x75\\x7a\\x7d\\x7c\\x1b\"\n\"\\x79\\x84\\x9e\\xc0\\x97\\x8b\\xa4\\x8c\\xa0\\x1f\\x9e\\x07\\xaf\\x07\\xf7\\x1e\\xf7\\x44\\xbe\\xec\\xe1\\x1a\\xc1\\x6e\\xae\\x5f\\x5f\\x5a\\x6a\\x52\\x64\\x1e\"\n\"\\x60\\x4b\\x74\\xfb\\x01\\x88\\xfb\\x3d\\x8a\\x4e\\x18\\x74\\x6f\\x86\\x85\\x79\\x76\\x88\\x88\\x19\\x76\\x75\\x05\\x85\\x85\\x89\\x86\\x86\\x1a\\x87\\x07\\x84\"\n\"\\x8f\\x8e\\x88\\x91\\x1b\\x96\\x8b\\x8b\\xb9\\xb7\\x1f\\xec\\xf7\\x3d\\x15\\x8d\\xb1\\x05\\xf7\\x6d\\x95\\x9e\\xd0\\xbc\\x1b\\xa2\\x9a\\x76\\x6b\\x44\\x64\\x2f\"\n\"\\x45\\x2b\\x1f\\x0e\\xf8\\x25\\xf8\\x61\\x15\\xad\\x91\\x9c\\x9c\\xa8\\x1a\\xb0\\x74\\x99\\x4b\\x1e\\x52\\x06\\x4c\\x73\\x7d\\x67\\x68\\xa2\\x7a\\xbc\\x8a\\x1f\"\n\"\\xfb\\x51\\x07\\x2e\\xf7\\x7a\\x73\\xc3\\x85\\x90\\x5f\\x8c\\x19\\x5d\\x06\\x62\\x73\\x78\\x6a\\x70\\x9c\\x79\\xab\\x85\\x1f\\xfb\\xfa\\x07\\x6a\\x84\\x7b\\x7b\"\n\"\\x6f\\x1a\\x65\\xa2\\x7d\\xcb\\x1e\\xc2\\x06\\xcc\\xa2\\x99\\xb1\\xae\\x76\\x9a\\x57\\x8d\\x1f\\xf7\\x57\\x07\\xe6\\xfb\\x75\\x05\\x4f\\xa3\\x9a\\x7d\\xad\\x1b\"\n\"\\xa3\\x9f\\x96\\x9e\\x97\\x1f\\x92\\x96\\x8d\\x99\\xb7\\x1a\\xa8\\xf7\\x5f\\x15\\x55\\xa8\\x6f\\xc1\\xc1\\xa7\\xa7\\xc1\\x1e\\xf1\\x07\\xbb\\x6b\\xa9\\x59\\x59\"\n\"\\x6a\\x6c\\x5c\\x1e\\xd8\\x85\\x15\\x92\\x8c\\x8f\\x8e\\x90\\x8d\\x88\\x83\\x1e\\x2d\\x07\\x83\\x8a\\x88\\x87\\x87\\x89\\x8e\\x93\\x1e\\x84\\xfb\\x00\\x15\\x57\"\n\"\\x76\\x7d\\x68\\x6e\\xa4\\x7b\\xb8\\x1f\\xa5\\x06\\xb6\\xa4\\x9b\\xa8\\xae\\x77\\x99\\x58\\x1f\\x0e\\xf8\\x5a\\xf7\\xe2\\x15\\xd0\\x61\\x4e\\xad\\x3d\\x1b\\xfb\"\n\"\\x17\\x23\\x27\\xfb\\x12\\xfb\\x15\\xf3\\x2a\\xf7\\x1f\\xdf\\xbe\\xa8\\xcc\\xaa\\x1f\\x9f\\x4b\\x05\\x7a\\x91\\x9c\\x80\\xa0\\x1b\\xa9\\x9e\\x9d\\xa6\\x93\\x8a\"\n\"\\x8f\\x8a\\x90\\x1f\\x55\\xf7\\x37\\xd7\\xf7\\x2d\\x05\\x8f\\x93\\x8d\\x94\\x94\\x1a\\xa2\\x73\\x9f\\x6e\\x77\\x82\\x85\\x76\\x80\\x1e\\x32\\xfb\\x58\\x15\\x33\"\n\"\\x6f\\x66\\x68\\x4a\\x1b\\x43\\x53\\xc1\\xd0\\xd0\\xc3\\xc1\\xd3\\xac\\xa9\\x7f\\x75\\xa1\\x1f\\x9e\\x77\\x95\\x76\\x9b\\x5b\\x08\\x0e\\xf8\\xa0\\xf7\\xe3\\x15\"\n\"\\x96\\xa7\\x91\\x9f\\x94\\x1a\\xa5\\x76\\x9e\\x6c\\x6c\\x81\\x81\\x56\\x76\\x1e\\x7a\\x5f\\x05\\xda\\x52\\x5f\\xa7\\x45\\x1b\\xfb\\x06\\x35\\x2a\\xfb\\x15\\xfb\"\n\"\\x13\\xe4\\x28\\xf7\\x08\\xce\\xbf\\xa9\\xce\\xba\\x1f\\xaa\\x39\\x05\\xcb\\x06\\xb9\\xa4\\x9d\\xad\\xab\\x78\\x9c\\x63\\x8d\\x1f\\x89\\x92\\x88\\x92\\x85\\x9a\"\n\"\\x83\\xa2\\x7d\\xad\\x82\\x9e\\x08\\xfb\\x09\\x87\\x15\\x37\\x62\\x6b\\x6c\\x60\\x1b\\x56\\x61\\xc1\\xd1\\xcf\\xb2\\xbf\\xbf\\xb3\\xad\\x66\\x2f\\xb9\\x1f\\xa7\"\n\"\\xf7\\xfd\\xf7\\x1a\\x1d\\x80\\x84\\x80\\xf7\\x4c\\x1d\\x23\\x0a\\xfb\\x63\\xf8\\x40\\x37\\x1d\\xf7\\x4f\\xf7\\x98\\x15\\xf7\\x51\\xfb\\xfe\\x05\\x7c\\x93\\x95\"\n\"\\x83\\x95\\x1b\\x92\\x8e\\x8e\\x93\\x90\\x8a\\x8f\\x87\\x97\\x1f\\xfb\\x24\\xf7\\xf5\\xf7\\x24\\xf7\\xf6\\x05\\x8e\\x92\\x8d\\x94\\x92\\x1a\\x91\\x88\\x8e\\x84\"\n\"\\x81\\x86\\x87\\x78\\x7e\\x1e\\x0e\\xf8\\x32\\xf7\\x98\\x15\\xfb\\x51\\xf7\\xff\\x05\\x9d\\x7f\\x85\\x90\\x81\\x1b\\x84\\x88\\x88\\x85\\x84\\x8d\\x82\\x8e\\x84\"\n\"\\x1f\\xf7\\x24\\xfb\\xf6\\xfb\\x24\\xfb\\xf5\\x05\\x87\\x7f\\x8a\\x87\\x86\\x1a\\x83\\x8e\\x88\\x92\\x95\\x95\\x93\\x9a\\x93\\x1e\\x0e\\xf8\\x81\\xf2\\x15\\xf7\"\n\"\\x51\\x07\\xe6\\x40\\xc1\\xfb\\x12\\x58\\x42\\x7f\\x7b\\x5a\\x1e\\x75\\x83\\x80\\x7c\\x75\\x1a\\x6e\\xa2\\x74\\xa8\\x95\\x99\\x8d\\x8f\\x9d\\x1e\\x96\\xbb\\xad\"\n\"\\x90\\xad\\x1b\\xc8\\xa6\\x7e\\x6e\\x1f\\x79\\x07\\x91\\x68\\x6a\\x8e\\x6a\\x1b\\x32\\x46\\x72\\x5a\\x5c\\x1f\\x72\\x71\\x7c\\x68\\x6c\\x1a\\x42\\xde\\x50\\xf2\"\n\"\\xc2\\xc5\\x97\\xa1\\xba\\x1e\\x78\\xbb\\x07\\x5b\\x1d\\xa2\\xa0\\xa6\\xb4\\xa9\\x1f\\xc7\\xb8\\x90\\x90\\xa5\\x1a\\x9b\\x83\\x9a\\x7d\\x96\\x1e\\x92\\x20\\x0a\"\n\"\\xfb\\x0c\\xab\\x44\\x0a\\x0e\\xf8\\x76\\xf8\\x4b\\x15\\x74\\x80\\x84\\x6e\\x74\\x1f\\x6f\\x75\\x7f\\x7f\\xf7\\x1e\\x1d\\x6b\\x80\\x77\\xf7\\x10\\x1d\\x57\\xc7\"\n\"\\xb4\\x76\\xb4\\x1b\\xb5\\xab\\x9d\\xb6\\xb1\\x1f\\xae\\xb2\\x93\\x99\\xa0\\x1a\\xaa\\x71\\xa4\\x6b\\x1e\\x8d\\xfb\\x4a\\x15\\x75\\x7f\\x84\\x6f\\x74\\x1f\\x6e\"\n\"\\x75\\x7f\\x80\\x83\\x1b\\x85\\x7f\\x92\\x98\\x7c\\x1f\\xc8\\x44\\x70\\x99\\x5e\\x1b\\x5f\\x69\\x79\\x60\\x63\\x1f\\x6d\\x6a\\x80\\x78\\x77\\x1a\\x6d\\xa6\\x71\"\n\"\\xab\\xa0\\x95\\x91\\xab\\xa6\\x1e\\xa7\\xa3\\x95\\x94\\x92\\x1b\\x91\\x97\\x83\\x7b\\x9e\\x1f\\x57\\xc8\\xb2\\x77\\xb5\\x1b\\xb5\\xab\\x9c\\xb7\\xb1\\x1f\\xae\"\n\"\\xb2\\x93\\x99\\xa0\\x1a\\xa9\\x71\\xa4\\x6b\\x1e\\x0e\\x23\\x0a\\x2e\\xf8\\xa1\\x95\\x1d\\x6a\\x6d\\x70\\x67\\x67\\x6d\\xa6\\xac\\xab\\xa9\\xa6\\xaf\\x1f\\xbf\"\n\"\\xf7\\x30\\x15\\x9d\\x99\\x91\\x94\\x99\\xf3\\x1d\\xf7\\x35\\xf7\\x9e\\x15\\xa9\\xb8\\x9a\\xaa\\x9a\\x1a\\x93\\x83\\x91\\x82\\x84\\x87\\x88\\x7e\\x80\\x1e\\x6c\"\n\"\\x68\\x6e\\x74\\x4f\\x69\\x08\\x78\\x81\\x87\\x87\\x84\\x1a\\x85\\x8f\\x85\\x92\\x87\\x1e\\x91\\x88\\x8c\\x8a\\x8f\\x89\\x91\\x88\\x19\\x99\\x82\\xbc\\x6e\\xa3\"\n\"\\x77\\xad\\x64\\x19\\x84\\x91\\x8f\\x89\\x92\\x1b\\x94\\x92\\x92\\x93\\x9a\\x76\\xb5\\x73\\xab\\x1f\\xf7\\xb3\\xcf\\x1d\\x0e\\xf7\\x9b\\xf8\\xae\\x15\\xfc\\x34\"\n\"\\x07\\xa2\\x6c\\x5e\\xa1\\x7c\\x1b\\x83\\x84\\x84\\x82\\x84\\x8d\\x87\\x93\\x85\\x1f\\xb8\\x65\\x9a\\x79\\xb8\\x41\\x08\\x7e\\x92\\x8e\\x88\\x94\\x1b\\x92\\x8f\"\n\"\\x90\\x9c\\x95\\x1f\\xab\\xc3\\xa5\\xab\\xaf\\xa9\\x08\\x98\\x96\\x8e\\x90\\x91\\x1a\\x94\\x85\\x93\\x83\\x7c\\x6b\\x7c\\x6e\\x5d\\x1e\\xf8\\x33\\x07\\x0e\\xf8\"\n\"\\xdd\\xf7\\x9f\\x15\\xfc\\x3c\\x06\\xa3\\xab\\xa0\\xb5\\x9a\\x1a\\x93\\x84\\x92\\x82\\x84\\x87\\x89\\x84\\x85\\x1e\\x64\\x5e\\x78\\x7c\\x41\\x60\\x08\\x7d\\x83\"\n\"\\x88\\x88\\x83\\x1a\\x84\\x8f\\x87\\x9e\\x81\\x1e\\xc6\\x6a\\xaa\\x73\\xa9\\x68\\x08\\x7f\\x95\\x90\\x87\\x91\\x1b\\x95\\x93\\x91\\x93\\x9a\\x7b\\xab\\x6e\\xb7\"\n\"\\x1f\\xf8\\x3c\\x06\\x0e\\xa3\\xf7\\x6b\\x15\\xf8\\x3c\\xcf\\x1d\\xfc\\x3c\\x06\\x0e\\xf7\\xd0\\x7f\\x15\\xf8\\x34\\x07\\x75\\xaa\\xb8\\x75\\xf7\\x63\\x1d\\x89\"\n\"\\x8f\\x83\\x91\\x1f\\x63\\xac\\x79\\xa0\\x6c\\xbd\\x88\\x8f\\x88\\x8f\\x88\\x91\\x88\\x90\\x88\\x90\\x8a\\x8c\\x08\\x98\\x84\\x88\\x8e\\x82\\x1b\\x84\\x87\\x87\"\n\"\\x79\\x81\\x1f\\x69\\x51\\x74\\x6e\\x66\\x6c\\x08\\x7e\\x81\\x88\\x86\\x85\\x1a\\x81\\x91\\x84\\x93\\x9a\\xa9\\x99\\xa9\\xbb\\x1e\\xfc\\x34\\x07\\x0e\\xf7\\xa6\"\n\"\\xf7\\x02\\xda\\x0a\\x6e\\xa5\\x6b\\xf7\\x58\\x1d\\x93\\x8f\\x1f\\xb7\\xd4\\x9e\\xa4\\xb8\\xb0\\x08\\x92\\x91\\x8e\\x8f\\x92\\x1a\\x94\\x84\\x92\\x83\\x7c\\x5f\"\n\"\\x75\\x74\\x6b\\x1e\\xf7\\xae\\x07\\x74\\xab\\xb7\\x76\\xd3\\x1d\\xab\\x9a\\xa8\\xb9\\x1e\\x0e\\xf7\\x57\\x63\\x15\\x5f\\xf7\\x6a\\xb7\\x07\\xfb\\x18\\xf7\\x51\"\n\"\\xda\\x0a\\x70\\xa5\\x6a\\xf7\\x58\\x1d\\x92\\x8f\\x1f\\xb6\\xd5\\x9f\\xa3\\xb8\\xb0\\x08\\x92\\x91\\x8e\\x8f\\x92\\x1a\\x94\\x84\\x92\\x83\\x7c\\x5e\\x75\\x75\"\n\"\\x6c\\x1e\\xf7\\xad\\x07\\x75\\xaa\\xb8\\x75\\xd3\\x1d\\xac\\x9a\\xa8\\xb8\\x1e\\x0e\\xf7\\x6f\\x99\\x15\\x76\\xad\\xa8\\x83\\xb5\\x1b\\xf7\\x03\\xdf\\xdf\\xf7\"\n\"\\x03\\xdd\\x6a\\xbc\\x3f\\xa9\\x1f\\xb1\\xaa\\x9c\\xad\\xb9\\x1a\\xe3\\x43\\xca\\x27\\x4c\\x54\\x72\\x5e\\x6c\\x1e\\x73\\x6a\\x82\\x5b\\x35\\x1a\\xfc\\xc2\\xf7\"\n\"\\x00\\x07\\xa8\\xf8\\x70\\x15\\x96\\x06\\xc4\\x8a\\x94\\x8a\\xa5\\x81\\x08\\xb8\\x7b\\x9a\\x76\\x5a\\x1a\\x51\\x6a\\x64\\x58\\x5e\\x68\\x9c\\xaf\\x6f\\x1e\\xf7\"\n\"\\x88\\x07\\xe2\\x9c\\xa5\\xc5\\xb3\\xa2\\x77\\x69\\x58\\x63\\x6c\\x46\\x89\\x1e\\x0e\\x3d\\x0a\\x32\\xf7\\xbf\\x27\\x0a\\x3d\\x0a\\xfb\\x73\\xf7\\xa3\\x45\\x1d\"\n\"\\x6c\\x0a\\x64\\x5b\\x55\\x0a\\xfb\\x87\\xf7\\xad\\x2e\\x0a\\x3d\\x0a\\xfb\\x74\\xf7\\xe3\\x36\\x0a\\x0e\\xf7\\xbf\\xf7\\x74\\x15\\xfb\\x16\\xf7\\x5d\\x05\\x48\"\n\"\\x29\\x1d\\x91\\x06\\xf7\\x12\\xfb\\x57\\xfb\\x2f\\xfb\\x84\\x05\\x7f\\x78\\x86\\x7f\\x7f\\x1a\\x71\\xa5\\x72\\xa8\\x9e\\x9d\\x98\\xa3\\x9b\\x1e\\xf7\\x14\\xf7\"\n\"\\x5a\\xf7\\x28\\xfb\\x73\\x05\\xce\\x06\\xba\\xa3\\x9d\\xad\\xad\\x72\\x9d\\x5d\\x1f\\x84\\x06\\xfb\\x24\\xf7\\x70\\xf7\\x22\\xf7\\x6b\\x05\\x97\\x9d\\x90\\x97\"\n\"\\x98\\x1a\\xa6\\x71\\xa3\\x6e\\x78\\x79\\x7e\\x73\\x7c\\x1e\\x0e\\xf7\\xad\\xf8\\x88\\x15\\xfb\\x1e\\xfb\\x07\\xfb\\x03\\xfb\\x1a\\xfb\\x22\\xf7\\x06\\xfb\\x05\"\n\"\\xf7\\x24\\xf7\\x1f\\xf7\\x05\\xf7\\x03\\xf7\\x1c\\xf7\\x1f\\xfb\\x08\\xf7\\x06\\xfb\\x21\\x1f\\x8f\\xfb\\xbe\\x15\\xf5\\x23\\x05\\x72\\x67\\x68\\x80\\x61\\x1b\"\n\"\\x60\\x6e\\x94\\xa3\\x6c\\x1f\\x5d\\xb8\\x15\\x70\\xaf\\x82\\xa6\\xb4\\x1a\\xb6\\x96\\xaf\\xa3\\xac\\x1e\\xf7\\x02\\xfb\\x00\\x05\\xe8\\x16\\xf7\\x02\\xf6\\x05\"\n\"\\xa1\\x6d\\x94\\x72\\x66\\x1a\\x5a\\x80\\x66\\x73\\x6a\\x1e\\xfb\\x2c\\xf7\\x29\\x15\\xfb\\x03\\xf7\\x00\\x05\\xa3\\xac\\xae\\x96\\xb5\\x1b\\xb7\\xaa\\x81\\x72\"\n\"\\xae\\x1f\\x0e\\xf8\\x82\\x16\\x9b\\x07\\xfb\\x15\\x9e\\x50\\xce\\xf7\\x18\\x1a\\x9c\\x6e\\x91\\x81\\x94\\x80\\x08\\x68\\xa9\\xba\\x73\\xb5\\x1b\\xd1\\xc2\\xc4\"\n\"\\xd4\\xd1\\x59\\xc2\\x4c\\x78\\x80\\x88\\x7e\\x70\\x1f\\x89\\x8a\\x82\\x86\\x86\\x89\\x08\\xa1\\xaa\\x93\\xa3\\xa8\\x1a\\xd0\\x53\\xc1\\x44\\x44\\x54\\x55\\x45\"\n\"\\x70\\x90\\x7d\\xa5\\x61\\x1e\\x9c\\x68\\x78\\x91\\x76\\x1b\\x4f\\x58\\x52\\x46\\x43\\xc3\\x53\\xd2\\xca\\xc0\\xb1\\xd2\\xad\\x1f\\x8c\\x78\\x05\\x85\\x07\\x8a\"\n\"\\x53\\x6e\\x4c\\x62\\x6a\\x72\\x78\\x79\\x84\\x42\\x7c\\x08\\x7b\\x07\\x0e\\xf8\\xab\\xf8\\x7d\\x15\\xf7\\x06\\xfb\\x0c\\x07\\xdb\\x1d\\x21\\x06\\xa8\\x64\\x59\"\n\"\\x9a\\x52\\x1b\\x3e\\x52\\x77\\x60\\x5c\\x1f\\x5c\\x60\\x73\\x53\\x4c\\x1a\\x4b\\xa3\\x53\\xba\\x60\\x1e\\x60\\xba\\xc4\\x77\\xd7\\x1b\\xc5\\xb3\\x97\\xaa\\xbc\"\n\"\\x1f\\x6d\\xf7\\x0c\\x45\\x0a\\x7f\\xf7\\xbf\\x06\\x89\\x91\\x91\\x8a\\x8e\\x1b\\x9a\\x96\\x93\\x9e\\x98\\x1f\\xdd\\xf7\\x0c\\x05\\x95\\x9a\\x8f\\x93\\xf7\\x56\"\n\"\\x1d\\xfb\\xd6\\xfb\\x92\\x9b\\x0a\\xf8\\xab\\xf8\\x7f\\x15\\xf7\\x04\\xfb\\x0c\\x07\\xdb\\x1d\\x24\\x06\\xa6\\x5d\\x5e\\x98\\x54\\x1b\\xfb\\x23\\xfb\\x01\\x25\"\n\"\\xfb\\x18\\xfb\\x15\\xf3\\x32\\xf7\\x2a\\xc0\\xb8\\x96\\xa3\\xb9\\x1f\\x77\\xf7\\x0c\\x45\\x0a\\x7f\\xf7\\xb1\\x97\\x06\\xba\\xa2\\x9d\\xad\\x9c\\x83\\x9a\\x7d\"\n\"\\x95\\x1f\\x92\\x20\\x0a\\xfb\\x9d\\xfb\\x31\\x15\\xdc\\xcb\\x52\\x41\\x43\\x54\\x60\\x30\\x33\\x53\\xb7\\xd1\\xd6\\xca\\xc4\\xdd\\x1f\\x0e\\xf7\\x87\\xf8\\x41\"\n\"\\x15\\x6b\\x84\\x78\\x84\\x72\\x7f\\x08\\x3d\\x65\\x58\\x3f\\x3c\\x1a\\xfb\\x12\\xf7\\x07\\x28\\xf7\\x27\\xf7\\x28\\xf7\\x06\\xee\\xf7\\x14\\xda\\x64\\xc3\\x27\"\n\"\\xce\\x1e\\xfb\\x1f\\xe8\\x7d\\x97\\xa0\\x1a\\xa0\\x9e\\x93\\xbc\\x1e\\xd9\\x06\\xae\\x9d\\x9b\\xa8\\xa6\\x79\\x99\\x68\\x1f\\x4d\\x06\\x5d\\x5f\\x85\\x81\\x72\"\n\"\\x1f\\x5d\\x79\\x6b\\x60\\x60\\x1a\\x6b\\x9b\\x74\\xbb\\x66\\x1e\\xd4\\x27\\x15\\xe4\\xce\\x54\\x41\\x44\\x48\\x54\\x34\\x34\\x48\\xc2\\xd2\\xd3\\xce\\xc4\\xe0\"\n\"\\x1f\\x0e\\xf6\\xf7\\xa2\\x15\\xe1\\x20\\xdc\\xfb\\x09\\xaf\\x47\\xba\\xe0\\xe3\\xf7\\x0f\\xdb\\xeb\\x4d\\xd1\\xfb\\x10\\xf7\\x44\\x6e\\xc4\\x60\\x3a\\x53\\x3c\"\n\"\\xfb\\x06\\xfb\\x23\\x08\\x0e\\xf8\\x17\\xf8\\xe1\\x6a\\x0a\\x78\\x7b\\x7f\\x83\\x7a\\x80\\x1e\\x44\\x6b\\x0a\\x9b\\x7c\\x9f\\x99\\x97\\x93\\x9c\\x96\\x1e\\xf7\"\n\"\\x0e\\xdf\\x15\\x9e\\x1d\\xfb\\xaa\\x4a\\x1d\\x35\\x1d\\xfb\\xa6\\xf8\\x2c\\x3b\\x1d\\x35\\x1d\\xfb\\x19\\xf7\\xcc\\x45\\x1d\\x35\\x1d\\xfb\\x1a\\xf8\\x0c\\x36\"\n\"\\x0a\\x0e\\xf8\\xd9\\xf7\\x7b\\x15\\xbe\\xfc\\x8d\\x07\\x8f\\xf7\\x10\\xcd\\xc7\\xf7\\x15\\x88\\x08\\xf7\\xc6\\xbe\\xfb\\xba\\xf2\\x0a\\x49\\x99\\x50\\xa4\\x65\"\n\"\\x1e\\xa2\\x68\\xae\\x6c\\xac\\x7e\\x08\\x7c\\xaf\\xa7\\x87\\xd4\\x1b\\xf7\\xba\\xbe\\xfb\\xc6\\x06\\xfb\\x14\\x88\\x4a\\xc5\\x85\\xf7\\x0c\\x08\\x90\\x07\\x0e\"\n\"\\x35\\x1d\\xfb\\x94\\xf7\\xf1\\x37\\x1d\\xf7\\x5b\\xf7\\xa3\\x15\\xbd\\xbd\\xa4\\x98\\xba\\x1b\\xc4\\xa7\\x76\\x5f\\x1f\\xfb\\xb0\\x07\\x8a\\x5a\\x6b\\x6f\\x52\"\n\"\\x8a\\x08\\x5f\\x5e\\x0a\\x95\\x97\\x89\\xa5\\x1b\\xba\\x06\\xf7\\x07\\x8c\\xdd\\xd8\\x89\\xf2\\x08\\xf7\\xb4\\xf7\\x5a\\x1d\\x5d\\x1b\\x55\\x6a\\x7e\\x63\\x5d\"\n\"\\x1f\\xb4\\x29\\x07\\xcc\\x1d\\x06\\x0e\\xf7\\x21\\x1d\\xfb\\x18\\xf7\\x03\\x2f\\xf7\\x33\\x97\\x8d\\x8b\\x8c\\x9a\\x1e\\x69\\x6e\\x7c\\x6e\\x65\\x8a\\x0a\\xb3\"\n\"\\xc3\\xbb\\xe4\\xad\\x1f\\xab\\x98\\x98\\x99\\xa2\\x1a\\xa8\\x75\\xa2\\x6e\\x80\\x80\\x89\\x88\\x7e\\x1e\\x74\\x31\\x71\\x87\\x5d\\x1b\\x38\\x59\\x5e\\x1d\\x0e\"\n\"\\xf8\\x1c\\xf7\\xa2\\x15\\x88\\x76\\x80\\x8b\\x75\\x1b\\x51\\x60\\x9e\\xa3\\x9e\\xa9\\x97\\xb6\\x9c\\xa6\\x88\\x88\\x9d\\x1f\\x87\\xa2\\x8b\\x8b\\x94\\x1b\\xa3\"\n\"\\x9e\\x9f\\xa4\\x9e\\x81\\x99\\x79\\x93\\x1f\\x96\\x71\\x5a\\x94\\x65\\x1b\\x22\\x42\\x59\\x42\\x6a\\x97\\x7a\\xb9\\x66\\x1f\\x5b\\x72\\x6f\\x64\\x5e\\x1a\\x3e\"\n\"\\xdc\\x53\\xf7\\x05\\xb8\\xcb\\x98\\x9a\\xaa\\x1e\\x9d\\x95\\x93\\x98\\xa1\\x1a\\xa4\\x79\\xa0\\x74\\x84\\x81\\x8a\\x89\\x81\\x1e\\x81\\x5d\\x78\\x88\\x6e\\x1b\"\n\"\\x58\\x64\\x9d\\xa2\\xa6\\xbe\\xa0\\xcf\\x9e\\x9b\\x8a\\x89\\x9f\\x1f\\x0e\\xf8\\x14\\xf7\\xa1\\x15\\x57\\x06\\x43\\x61\\x98\\xa2\\x9b\\xa7\\x98\\xb1\\xbe\\xb0\"\n\"\\x7a\\x64\\xad\\x1f\\x78\\x9c\\x98\\x84\\x9c\\x1b\\xa9\\xa6\\xa6\\xa6\\x88\\x1f\\x8e\\x07\\x89\\xb7\\x8c\\xa3\\x05\\x8e\\x07\\xab\\x8e\\x74\\xa4\\x6b\\x1b\\x75\"\n\"\\x7d\\x84\\x78\\x7e\\x1f\\x9d\\x66\\x68\\x93\\x5f\\x1b\\x25\\x3e\\x54\\x42\\x6b\\x9a\\x72\\xab\\x72\\x1f\\x66\\x70\\x78\\x69\\x63\\x1a\\x64\\x9e\\x69\\xae\\x70\"\n\"\\x1e\\x6f\\xb1\\xbb\\x7e\\xce\\x1b\\xbc\\xb7\\x92\\x99\\xb6\\x1f\\xb4\\x99\\xa1\\x9f\\xa3\\x1a\\xa7\\x70\\xa2\\x6b\\x81\\x7f\\x89\\x87\\x7e\\x1e\\x7c\\x5c\\x6e\"\n\"\\x86\\x67\\x1b\\x58\\x62\\x9c\\x9f\\xa3\\xbe\\x9c\\xd4\\x1f\\xbe\\x06\\x9c\\xf8\\x22\\x15\\x9b\\x97\\x91\\x96\\x97\\x1a\\x9d\\x7a\\x9b\\x78\\x82\\x80\\x53\\x1d\"\n\"\\x7d\\x80\\x84\\x7f\\xf0\\x0a\\xf7\\x00\\xf7\\xdb\\x15\\x70\\x83\\xf7\\x38\\x1d\\x84\\x96\\x98\\x88\\xa5\\x1b\\xf8\\x14\\x06\\xa2\\x98\\x8d\\x91\\x95\\x37\\x0a\"\n\"\\xfc\\x14\\xfb\\x42\\x15\\x96\\x1d\\xf8\\x14\\x06\\xa2\\x99\\x8d\\x91\\x94\\x37\\x0a\\xfc\\x14\\xf7\\xef\\x15\\x96\\x1d\\xf8\\x14\\x06\\xa2\\x98\\x8d\\x91\\x95\"\n\"\\x37\\x0a\\x0e\\xf8\\x71\\xf7\\x54\\x15\\x8a\\xcf\\x87\\xa8\\x7d\\xaa\\x08\\xcc\\x6e\\x47\\xb2\\x35\\x1b\\xfb\\x14\\x3b\\x37\\xfb\\x1a\\xfb\\x1a\\xd8\\x3c\\xf7\"\n\"\\x15\\xeb\\xce\\xb4\\xd7\\xa5\\x1f\\x8c\\x8e\\x8d\\x8f\\x05\\x5e\\x06\\x8a\\x89\\x8b\\x8a\\x88\\x87\\x08\\x5a\\x72\\x5a\\x70\\x4a\\x1b\\x41\\x69\\xa1\\xc8\\x77\"\n\"\\x1f\\xd6\\x07\\xf7\\x96\\xb4\\x15\\xfb\\x94\\xd3\\x06\\xc5\\xa9\\xab\\xa0\\xc8\\x1b\\xcb\\xbd\\x6d\\x5a\\x9e\\x1f\\x0e\\x84\\x0a\\x0e\\x84\\x0a\\xf7\\x3a\\xf7\"\n\"\\x39\\xcb\\x0a\\x7f\\x84\\x80\\x7f\\x1a\\x79\\x9c\\x7b\\x9e\\x94\\x96\\x57\\x1d\\xf7\\xb2\\xf8\\x8a\\xd2\\x1d\\xf7\\xbb\\xf8\\x98\\xd2\\x1d\\x0e\\xf8\\x30\\xf7\"\n\"\\x9e\\x15\\xfb\\x6b\\xfb\\xb9\\x58\\xf7\\xed\\xf8\\xc6\\xfb\\xed\\x58\\xf7\\xb9\\xfb\\x56\\xfb\\xb9\\x58\\x07\\x0e\\xf7\\xd6\\xf7\\xac\\x15\\xf6\\x94\\xe0\\xe9\"\n\"\\xf7\\x01\\x1a\\xf7\\x0a\\x2b\\xea\\xfb\\x0a\\xfb\\x0a\\x2c\\x2c\\xfb\\x0a\\xfb\\x01\\xe0\\x2d\\xf5\\x82\\x1e\\x32\\xfb\\x29\\x64\\xf7\\x29\\xfb\\x2c\\xb7\\xf7\"\n\"\\x2c\\xf7\\x28\\xb2\\xfb\\x28\\x07\\x72\\xf8\\x69\\x15\\xeb\\xd8\\x40\\x2f\\x2d\\x3f\\x3f\\x2d\\x2e\\x3f\\xd6\\xe9\\xe6\\xd7\\xd8\\xe5\\x1f\\x0e\\xf7\\x17\\xf7\"\n\"\\x7c\\x15\\xb6\\x88\\x06\\x71\\x0a\\x7b\\x95\\x9d\\x82\\xef\\x1d\\x81\\x88\\x80\\x71\\x1a\\x89\\x60\\xf7\\x13\\xf7\\x8c\\x07\\x76\\x8d\\x83\\x91\\x82\\x1e\\x7b\"\n\"\\x94\\x9d\\x82\\x9e\\x1b\\x9c\\x9c\\x93\\x98\\x95\\x1f\\x93\\x95\\x8d\\x94\\xa6\\x1a\\xee\\xda\\x1d\\xf7\\x49\\xb2\\x0a\\x4d\\x06\\xf7\\xe5\\xf7\\x9d\\x15\\x24\"\n\"\\x8e\\x1d\\x81\\x1e\\x95\\x84\\x95\\x89\\xa3\\x8a\\x08\\xfb\\x35\\x78\\x07\\x89\\x1d\\xf7\\x58\\x29\\x0a\\x45\\x06\\x8c\\xd9\\x05\\xc8\\xb3\\xad\\xad\\xa1\\x1b\"\n\"\\x96\\x96\\x86\\x80\\x97\\x1f\\x7c\\x9e\\x93\\x87\\x9c\\x1b\\xa8\\xa2\\xa2\\xa8\\x9d\\x82\\x9a\\x76\\x9c\\x1f\\xa2\\x6d\\x67\\x99\\x6d\\x1b\\x67\\x7d\\x82\\x54\"\n\"\\x58\\x1f\\x0e\\xf7\\xbe\\xf7\\x1d\\x15\\xfb\\x1d\\xf7\\xb4\\x05\\x46\\x06\\x5c\\x73\\x79\\x69\\x69\\xa0\\x7b\\xbc\\x8a\\x1f\\xf7\\x2b\\xfb\\xd2\\x05\\x81\\x5d\"\n\"\\x87\\x6f\\x68\\x1a\\x48\\xa3\\x67\\xb8\\xb8\\xa3\\xaf\\xce\\xae\\x87\\xad\\x81\\xb3\\x1e\\xf7\\x1e\\xf7\\xaf\\x05\\x97\\x91\\x93\\x99\\x8c\\x1b\\x8d\\x8d\\x8f\"\n\"\\x8c\\x93\\x8c\\x08\\xb7\\x92\\x9d\\x9b\\xac\\x1a\\xad\\x75\\x9d\\x60\\x4f\\x6b\\x6f\\x32\\x60\\x1e\\x0e\\x7a\\x1d\\xfb\\x03\\xf7\\xdd\\x3b\\x1d\\xbc\\x1d\\xa9\"\n\"\\xf7\\x87\\x2e\\x0a\\x7a\\x1d\\xf7\\x02\\xf7\\xb7\\x15\\x95\\x98\\x8f\\x95\\xf7\\x56\\x1d\\x39\\xfb\\x0c\\x05\\x82\\x7e\\x87\\x81\\x81\\x1a\\x77\\x9d\\x7a\\xa2\"\n\"\\x9a\\x96\\x92\\x9f\\x98\\x1e\\x0e\\xbc\\x1d\\xa8\\xf7\\xbd\\x15\\xa0\\x1d\\xa6\\xac\\xae\\x6f\\xa6\\x67\\x1f\\x0e\\xf8\\xee\\xf7\\xf8\\x15\\xfc\\x81\\xf7\\x65\"\n\"\\x05\\x90\\x7e\\x80\\x8e\\x82\\x1b\\x7b\\x78\\x7f\\x7b\\x83\\x1f\\x8a\\x89\\x05\\x88\\x85\\x89\\x84\\x83\\x1a\\x75\\x97\\x7d\\xa6\\x7f\\x1e\\xf7\\xb2\\xfb\\x0b\"\n\"\\xfb\\xb2\\xfb\\x0f\\x05\\x70\\x7f\\x7f\\x7d\\x75\\x1a\\x85\\x8d\\x83\\x8e\\x84\\x1e\\x8c\\x8a\\x05\\x7a\\x93\\x9e\\x7f\\x9c\\x1b\\x93\\x97\\x8e\\x90\\x97\\x1f\"\n\"\\x7f\\x5f\\x15\\x65\\x74\\x79\\x6d\\x6d\\xa2\\x79\\xb1\\x1f\\xf8\\x1e\\x06\\xb0\\xa2\\x9d\\xa9\\xa9\\x74\\x9d\\x66\\x1f\\x0e\\xf7\\x5b\\xf8\\x67\\x15\\xf7\\x01\"\n\"\\x06\\xed\\x1d\\xfc\\x00\\x52\\x0a\\x0e\\xf7\\x5b\\xad\\x0a\\x52\\x0a\\xf1\\xf7\\xde\\x26\\x0a\\xf7\\xc0\\x75\\x15\\x9b\\xd2\\xba\\xdb\\xe3\\xf7\\x02\\x08\\xd5\"\n\"\\xe9\\xa4\\xbf\\xc9\\x1a\\xca\\x55\\xc0\\x4a\\x4b\\x5d\\x62\\x3f\\x76\\x1e\\xd9\\x72\\x5f\\xb2\\x4b\\x1b\\x4a\\x58\\x56\\x47\\x57\\x9b\\x68\\xcc\\x33\\x1f\\xf7\"\n\"\\x09\\xfb\\x30\\xa9\\x56\\xa0\\x3b\\x08\\x0e\\xd1\\x16\\xf8\\x61\\xf7\\xcb\\x06\\xfb\\x7b\\xf7\\x92\\xfb\\x7a\\xfb\\x92\\x05\\xbd\\xfb\\x99\\x15\\xf7\\x85\\x07\"\n\"\\xf7\\x48\\xf7\\x5a\\xf7\\x49\\xfb\\x5a\\x05\\xfb\\x85\\x07\\x0e\\xcd\\x1d\\xfb\\x56\\xdd\\x1d\\xf7\\x90\\xf8\\x3d\\x15\\xfb\\x43\\x06\\x70\\x49\\x0a\\x68\\xa3\"\n\"\\x7a\\xba\\x1e\\xce\\xfb\\x6f\\x47\\x5b\\x0a\\xf7\\x84\\x06\\xba\\xa3\\xaa\\x1d\\x6f\\x1b\\x4b\\x06\\x84\\x66\\x1d\\xf7\\x83\\xfb\\x40\\x15\\xfb\\xe5\\x07\\x5c\"\n\"\\x67\\x6c\\x55\\x1e\\xfb\\x03\\x5e\\x0a\\x96\\x97\\xb8\\x0a\\xfb\\x6a\\x07\\xc5\\x0a\\xf7\\x30\\xf7\\xac\\x15\\xfb\\x13\\xfb\\x00\\xf7\\x13\\x06\\x0e\\x25\\x0a\"\n\"\\xfb\\x44\\xf8\\x8a\\x37\\x1d\\xf7\\xc0\\xf7\\x8a\\x15\\x52\\xba\\xc8\\x69\\xbf\\x1b\\xa7\\xa5\\x93\\x98\\x9f\\x1f\\xaa\\xa1\\xa2\\xba\\xb2\\x1a\\xd0\\x50\\xc3\"\n\"\\x43\\x54\\x4f\\x68\\x54\\x61\\x1e\\xc6\\x59\\x56\\xa9\\x55\\x1b\\x43\\x50\\x52\\x44\\x47\\xc4\\x52\\xd1\\xc7\\xb8\\xa4\\xca\\xc1\\x1f\\xae\\xb2\\x15\\xb9\\xab\"\n\"\\xbd\\xa9\\xb6\\x1b\\xba\\xaa\\x6d\\x5e\\x5e\\x6c\\x6b\\x61\\x77\\x76\\x91\\x97\\x75\\x1f\\x7a\\x94\\x8b\\x8b\\x5c\\xb9\\x08\\x47\\x8f\\x15\\x5c\\x66\\x58\\x6d\"\n\"\\x61\\x1b\\x5e\\x6e\\xaa\\xba\\xb6\\xaa\\xa9\\xb8\\xb4\\xb3\\x74\\x58\\xba\\x1f\\x0e\\xf7\\xa7\\x5c\\x15\\x44\\x84\\x6f\\x7b\\x84\\x88\\x8d\\x99\\x83\\x1e\\x9a\"\n\"\\x80\\x7c\\x94\\x7a\\x1b\\x71\\x79\\x7a\\x72\\x6d\\xa5\\x76\\xb0\\xa7\\xa7\\x98\\xa3\\xa2\\x1f\\xa9\\xab\\x93\\xa9\\xe4\\x1a\\xf8\\x8a\\x07\\xca\\x92\\xa6\\x9d\"\n\"\\x90\\x8f\\x87\\x82\\x91\\x1e\\x77\\x99\\x95\\x85\\x9f\\x1b\\xa5\\x9d\\x9c\\xa3\\xa9\\x72\\xa0\\x68\\x73\\x72\\x82\\x7c\\x77\\x1f\\x66\\x6e\\x7d\\x60\\x32\\x1a\"\n\"\\x0e\\xf7\\xda\\xf9\\x0e\\x15\\x57\\xfd\\x35\\x06\\x4b\\x83\\x70\\x7a\\x86\\x87\\x8f\\x94\\x85\\x1e\\xa0\\x7d\\x81\\x92\\x77\\x1b\\x72\\x78\\x7a\\x72\\x6e\\xa4\"\n\"\\x75\\xae\\xa3\\xa4\\x94\\x9a\\x9f\\x1f\\xb0\\xa8\\x99\\xb6\\xe4\\x1a\\x0e\\xf7\\xa6\\xfb\\x4a\\x15\\xbf\\xf9\\x35\\x06\\xca\\x93\\xa6\\x9c\\x90\\x8f\\x87\\x82\"\n\"\\x91\\x1e\\x77\\x99\\x95\\x85\\x9f\\x1b\\xa5\\x9d\\x9c\\xa3\\xa9\\x72\\xa0\\x68\\x73\\x72\\x82\\x7c\\x77\\x1f\\x66\\x6e\\x7d\\x60\\x32\\x1a\\x0e\\xf8\\xad\\xf7\"\n\"\\x74\\x15\\xf7\\x2a\\x86\\xae\\x70\\xb8\\x1e\\xce\\x61\\x3e\\xb4\\x35\\x1b\\x57\\x5b\\x7c\\x70\\x62\\x1f\\x58\\x68\\x6e\\x5d\\x81\\x4d\\x08\\x86\\x69\\x8a\\x75\"\n\"\\x2a\\x1a\\xfb\\x52\\x07\\x75\\x94\\x7f\\x9c\\x9b\\x95\\x98\\xa0\\x1e\\xf7\\x55\\x07\\x8c\\xe3\\x8b\\x8b\\x95\\x1a\\x8e\\xbf\\x92\\xa9\\x9a\\xa1\\x08\\xbd\\xad\"\n\"\\xc8\\xab\\xcb\\x1b\\xc8\\xc6\\x6e\\x5e\\xab\\x1f\\xa6\\x66\\x91\\x66\\xfb\\x1c\\x1a\\xfb\\x55\\x07\\x75\\x94\\x7f\\x9b\\x9b\\x96\\x99\\x9f\\x1e\\x0e\\xf7\\xc5\"\n\"\\xf8\\xc7\\x15\\xfb\\x33\\xfb\\x13\\xfb\\x10\\xfb\\x2f\\xfb\\x32\\xf7\\x11\\xfb\\x12\\xf7\\x31\\xf7\\x2f\\xf7\\x12\\xf7\\x12\\xf7\\x30\\xf7\\x2d\\xfb\\x12\\xf7\"\n\"\\x14\\xfb\\x2b\\x1f\\x30\\xfb\\x34\\xf7\\x2e\\x1d\\xf7\\xa2\\x34\\x15\\x86\\x48\\x82\\x6c\\x74\\x69\\x08\\x5a\\x6a\\x5a\\x72\\x4b\\x1b\\x4f\\x5e\\xa0\\xb4\\x6a\"\n\"\\x1f\\x6e\\xb0\\x80\\xad\\x85\\xd4\\x95\\x63\\x93\\x7a\\x9e\\x75\\x08\\x61\\xae\\xbc\\x76\\xca\\x1b\\xc9\\xbc\\xa0\\xb5\\xae\\x1f\\x9e\\xa1\\x93\\x9c\\x95\\xb3\"\n\"\\x08\\x29\\xe2\\xf7\\x2e\\x1d\\x0e\\x86\\x1d\\xf7\\x9c\\x06\\x5b\\x1d\\x95\\x91\\x99\\x94\\x98\\x1f\\x95\\x9a\\xb9\\xb1\\xa5\\x9a\\x08\\xa8\\x9c\\x93\\x96\\xa2\"\n\"\\x33\\x1d\\x80\\x81\\x8d\\x70\\x1b\\xfb\\x0a\\x06\\x7d\\x66\\x1d\\x0e\\xc3\\x0a\\x85\\x85\\xe8\\x1d\\x0e\\xc3\\x0a\\x86\\x84\\xe8\\x1d\\x66\\xf7\\x84\\x59\\x0a\"\n\"\\xe6\\x1d\\x56\\x1d\\x5e\\x1e\\xf7\\x33\\xf7\\x93\\x6a\\x0a\\x77\\x7c\\x7f\\x83\\x7a\\x80\\x1e\\x44\\x6b\\x0a\\x9b\\x7c\\x9f\\x99\\x97\\x93\\x9c\\x96\\x1e\\xf7\"\n\"\\x0e\\xdf\\x15\\x9e\\x1d\\xfb\\xaa\\x4a\\x1d\\xe6\\x1d\\x79\\xa2\\x67\\x68\\x78\\x73\\x5f\\x1e\\xf7\\x3b\\xf7\\x64\\xf7\\x1a\\x1d\\x7f\\x84\\x81\\xf7\\x4c\\x1d\"\n\"\\x25\\x0a\\xc5\\xc5\\x1d\\xc8\\x1d\\xf7\\x15\\xf7\\x94\\xf2\\x1d\\x87\\x7d\\x1a\\x76\\x9d\\x7a\\xa0\\x95\\x93\\x8e\\x95\\x97\\x1e\\x0e\\xf7\\x85\\xf7\\xd6\\x15\"\n\"\\xaf\\x8e\\x9d\\x9c\\xaa\\x1a\\xad\\x73\\x9d\\x5d\\x1e\\x2d\\x72\\x0a\\xfb\\x6d\\x07\\x58\\x89\\x76\\x7c\\x68\\x2a\\x0a\\xf7\\x04\\x06\\xb9\\xa3\\x9d\\xae\\xad\"\n\"\\x76\\x9a\\x58\\x8d\\x1f\\xc9\\x07\\xc2\\x86\\xba\\x5e\\xca\\x20\\x8d\\x87\\x18\\x8e\\x86\\x05\\xdd\\x27\\x1d\\x78\\x06\\x68\\xc2\\x63\\xb7\\x67\\xa2\\xf7\\x05\"\n\"\\xea\\x18\\xb8\\x8d\\xa0\\x9b\\xad\\x1a\\xad\\x73\\x9d\\x5c\\x1e\\x65\\x06\\xfb\\x54\\xfb\\x38\\x05\\x0e\\xb7\\x1d\\xf7\\x0e\\xfb\\x0b\\x15\\x95\\x99\\x8f\\x95\"\n\"\\x93\\x1a\\xa0\\x79\\x9c\\x75\\x79\\x82\\x85\\x77\\x7d\\x1e\\x39\\xfb\\x0c\\x05\\x83\\x7f\\x86\\x7f\\x82\\x1a\\x77\\x9d\\x7a\\xa2\\x9b\\x95\\x92\\x9f\\x98\\x1e\"\n\"\\x0e\\xf7\\x6f\\xf7\\x33\\x15\\x99\\x95\\xec\\x39\\x05\\x81\\x7e\\x87\\x82\\x7e\\x2a\\x0a\\xf7\\x0a\\x06\\xba\\x67\\x0a\\x81\\x8c\\x6f\\x1b\\x6b\\x06\\xfb\\x2f\"\n\"\\xf7\\x17\\xf7\\x06\\xe2\\x05\\xa5\\x06\\xa3\\x96\\x8d\\x91\\x8c\\x1d\\xfb\\x04\\x06\\x72\\x80\\xbe\\x0a\\x7d\\x8f\\x81\\x95\\x7f\\x1e\\x46\\x57\\x05\\xf7\\x1f\"\n\"\\xfb\\x0c\\x07\\x73\\x80\\x89\\x86\\x82\\x3b\\x0a\\x7a\\x93\\x7b\\x99\\xf7\\x52\\x1d\\x97\\xfb\\x6e\\x7f\\x06\\xce\\x0a\\x2d\\x0a\\x1e\\xf7\\x0c\\x06\\x0e\\x34\"\n\"\\x0a\\xf0\\xf9\\x0a\\x26\\x1d\\xe6\\xf2\\x15\\x5e\\xf7\\x0c\\x0a\\xe9\\x06\\xba\\xa3\\x9d\\xad\\xa9\\x7b\\x9b\\x6a\\x90\\x1f\\xe2\\xf7\\x3e\\xec\\xfb\\x3e\\x05\"\n\"\\x6a\\x85\\x7c\\x7b\\x6e\\x1a\\x69\\xa4\\x79\\xb9\\x1e\\xec\\x06\\xb9\\xa4\\x9d\\xad\\xad\\x75\\x9b\\x5d\\x8c\\x1f\\xfb\\xb0\\xf8\\x88\\x05\\x23\\x06\\x52\\x1d\"\n\"\\xb4\\x06\\xcc\\xfb\\x08\\x05\\x0e\\x34\\x0a\\xf7\\x3b\\xf8\\x4f\\x15\\x94\\x98\\x8f\\x95\\x94\\x1a\\x9f\\x79\\x9d\\x75\\x7a\\x81\\x85\\x76\\x7d\\x1e\\x39\\xfb\"\n\"\\x0b\\x05\\x82\\x7e\\x87\\x80\\x81\\x1a\\x77\\x9e\\x7a\\xa1\\x9b\\x94\\x91\\xa0\\x99\\x1e\\x0e\\x34\\x0a\\x7e\\xfb\\x72\\x23\\x1d\\x34\\x0a\\xf7\\x44\\xf7\\x3e\"\n\"\\x15\\xb3\\xaa\\xa9\\xb0\\xb1\\x6c\\xa8\\x63\\x1f\\x7a\\x62\\x1d\\xf7\\x7d\\xf7\\xf7\\x15\\xf7\\xb1\\xf7\\x0b\\x05\\xa6\\x97\\x97\\x99\\xa1\\x1a\\x92\\x89\\x92\"\n\"\\x88\\x92\\x1e\\x8a\\x8d\\x05\\x9a\\x84\\x78\\x98\\x7a\\x1b\\x82\\x80\\x88\\x86\\x7e\\x1f\\xfc\\x80\\xfb\\x65\\xf8\\x80\\xfb\\x6b\\x05\\x86\\x97\\x97\\x88\\x93\"\n\"\\x1b\\x9c\\x9f\\x98\\x9b\\x92\\x1f\\x8c\\x8c\\x05\\x8e\\x92\\x8d\\x93\\x91\\x1a\\xa1\\x7f\\x99\\x70\\x97\\x1e\\x6c\\xfb\\x7b\\x15\\xb0\\xa2\\x9d\\xa9\\xa9\\x75\"\n\"\\x9d\\x65\\x1f\\xfc\\x1d\\x06\\x65\\x74\\x79\\x6d\\x6d\\xa2\\x79\\xb1\\x1f\\x0e\\xf7\\x36\\xf7\\x4b\\x15\\x83\\x57\\x7a\\x74\\x6a\\x87\\x08\\x66\\x84\\x7b\\x7b\"\n\"\\xef\\x0a\\xad\\x76\\xa1\\x69\\x6e\\x79\\x7c\\x6f\\x86\\x1f\\xfb\\x56\\x06\\x97\\xa9\\x8f\\x9a\\x8f\\xad\\x08\\xf7\\x03\\x69\\x0a\\xfb\\x06\\x06\\x87\\xa5\\x05\"\n\"\\xf7\\x0a\\x69\\x0a\\xfb\\x1a\\x06\\x88\\x98\\x05\\x7b\\xc0\\x8a\\x91\\x9e\\xc4\\x0a\\x39\\x24\\x42\\x47\\x2c\\x70\\x8e\\x7c\\x99\\x60\\x1f\\x58\\x06\\x74\\x7f\"\n\"\\x81\\x77\\x77\\x97\\x80\\xa2\\x1f\\xcf\\x06\\x8d\\x82\\x8c\\x88\\x8d\\x7d\\x08\\x42\\xf7\\x0b\\x0a\\x0e\\xf7\\xc3\\xf2\\x15\\xf7\\xf5\\x07\\xa8\\xa5\\x99\\xc2\"\n\"\\xab\\xb5\\x87\\x85\\xb0\\x1e\\x89\\x98\\x95\\x8a\\x92\\x1b\\xa7\\xa1\\xa2\\xa9\\xa3\\x7b\\x9c\\x6e\\x93\\x1f\\x93\\x6a\\x4d\\x92\\x60\\x1b\\xfb\\x0d\\x3f\\x53\"\n\"\\x30\\x1f\\x6c\\x61\\x07\\x70\\x83\\x8a\\x4f\\x0a\\x7a\\x79\\x1a\\x68\\xa3\\x7a\\xb9\\x1e\\xb6\\xfb\\x6f\\x55\\x06\\x89\\x1d\\xf7\\xbd\\x31\\x1d\\x0e\\xf7\\xe4\"\n\"\\xf8\\x30\\x15\\x92\\x75\\x77\\x8e\\x76\\x1b\\xfb\\x0b\\x2c\\x2c\\xfb\\x0a\\xfb\\x0a\\xea\\x2c\\xf7\\x0a\\xf7\\x0a\\xea\\xea\\xf7\\x0a\\xdb\\x5e\\xd4\\x45\\xb0\"\n\"\\x1f\\xe3\\xf7\\x53\\x05\\x61\\xaa\\xaa\\x6d\\x95\\x1b\\x92\\x8f\\x8f\\x90\\x8f\\x89\\x8f\\x85\\x95\\x1f\\x75\\xad\\x78\\xc0\\x88\\xaf\\x08\\x9e\\x8a\\x8a\\x8e\"\n\"\\x85\\x1b\\x87\\x87\\x89\\x83\\x81\\x1f\\x78\\x7a\\x4a\\x73\\x67\\x88\\x08\\x79\\x88\\x87\\x89\\x83\\x1a\\x80\\xa3\\x84\\xb2\\x1e\\x9f\\x06\\x9f\\x8c\\x05\\x8d\"\n\"\\x06\\xfb\\x31\\xfb\\x79\\x15\\xea\\xd8\\x40\\x2f\\x2d\\x40\\x3f\\x2d\\x2e\\x3f\\xd6\\xe8\\xe7\\xd7\\xd8\\xe5\\x1f\\x0e\\xf7\\xb5\\xf7\\x06\\x1d\\x0e\\xf7\\xa6\"\n\"\\xf7\\x28\\x15\\x90\\x7e\\x7a\\x8f\\x7d\\x1b\\x57\\x5d\\x5e\\x59\\x6e\\xa1\\x78\\xad\\xd3\\xbe\\xc2\\xda\\x1f\\xf7\\x8b\\x07\\xba\\x84\\xb3\\x4b\\x46\\x1a\\x60\"\n\"\\x83\\x69\\x77\\x5e\\x1e\\xa2\\x06\\xa9\\xb0\\x9b\\xb9\\xbc\\x1a\\xca\\x73\\xc7\\x59\\xc7\\x1e\\x61\\xbe\\x8a\\x8c\\x86\\x90\\x85\\x94\\x19\\xbc\\x66\\x07\\x0e\"\n\"\\xf7\\xd8\\xf8\\x71\\x15\\xa1\\x70\\xa2\\x77\\xa2\\x7e\\xc8\\x6a\\x96\\x84\\x90\\x82\\x08\\x92\\x7f\\x8f\\x78\\x74\\x1a\\xfb\\x89\\x07\\x92\\x79\\x71\\x90\\x76\"\n\"\\x1b\\x3f\\x48\\x53\\x4c\\x66\\xaa\\x74\\xbd\\xc3\\xc0\\xa3\\xb4\\xac\\x1f\\xa2\\xa7\\x92\\xa2\\x8e\\xbe\\x08\\xf8\\x14\\x07\\x8c\\xd8\\x67\\xd8\\x59\\xa9\\x34\"\n\"\\xc1\\x18\\x80\\x94\\x05\\x7d\\x9a\\x84\\x9e\\xa3\\x1a\\x99\\x5b\\xfc\\x9b\\x07\\x92\\x79\\x73\\x8f\\x76\\x1b\\x41\\x49\\x53\\x4c\\x66\\xaa\\x74\\xbb\\xc2\\xbf\"\n\"\\xa3\\xb4\\xac\\x1f\\xa1\\xa7\\x92\\xa2\\x8e\\xbf\\x08\\xf7\\x2c\\xf7\\x40\\x15\\xfb\\x0d\\xca\\x70\\xb3\\x88\\xf7\\x0d\\x8e\\x89\\x18\\xf7\\x0d\\x4c\\xa5\\x64\"\n\"\\x90\\xfb\\x0e\\x08\\x0e\\xf7\\x5b\\x46\\x1d\\xf7\\x94\\xf7\\x68\\x27\\x0a\\xf7\\x73\\x46\\x1d\\x56\\xf7\\x44\\x15\\x93\\x98\\x90\\x96\\x93\\x1a\\xa0\\x79\\x9c\"\n\"\\x75\\x7a\\x81\\x85\\x77\\x7d\\x1e\\x39\\xfb\\x0c\\x05\\x82\\x7e\\x87\\x80\\x82\\x1a\\x77\\x9d\\x7a\\xa2\\x9b\\x95\\x92\\x9e\\x99\\x1e\\x0e\\xf7\\x5b\\x46\\x1d\"\n\"\\xf1\\xf7\\x4c\\x45\\x1d\\xf7\\x5b\\x46\\x1d\\xf7\\x22\\xfc\\x8b\\x23\\x1d\\xf7\\xda\\xf7\\x7c\\x15\\xf7\\x93\\xbd\\xfb\\x79\\x06\\xec\\xf7\\x49\\x05\\xf7\\x18\"\n\"\\xbe\\x22\\x06\\x97\\xa9\\x96\\xa1\\x96\\x9a\\x08\\x8f\\x90\\x8d\\x8f\\x8e\\x1a\\x96\\x7e\\x96\\x7f\\x7e\\x85\\x87\\x7b\\x83\\x1e\\x60\\x3a\\x05\\xfb\\x1a\\xf2\"\n\"\\x0a\\xfb\\x10\\xb7\\x3b\\xe6\\x63\\x1e\\x6e\\x55\\x05\\x87\\x83\\x89\\x85\\x86\\x1a\\x7f\\x97\\x80\\x98\\x97\\x92\\x90\\x9a\\x93\\x1e\\xac\\xca\\x05\\x87\\xac\"\n\"\\x8f\\x8b\\xb8\\x1b\\xf7\\xba\\xbe\\xfb\\xc6\\x06\\x73\\x84\\x8b\\x8d\\x7e\\x1f\\xb2\\xf7\\x47\\x15\\x31\\xfb\\x3c\\x4a\\xa1\\x68\\xc3\\x87\\xe0\\x19\\x90\\x07\"\n\"\\xf7\\xd2\\xf7\\x7b\\x15\\x2a\\xfb\\x49\\x05\\xfb\\x71\\x90\\x06\\x91\\xf7\\x0c\\xcc\\xc6\\xf7\\x14\\x88\\x08\\x0e\\xf8\\x54\\xf8\\x32\\x15\\x92\\x97\\x05\\x91\"\n\"\\x96\\x8e\\x94\\x95\\x1a\\xa9\\x71\\xa4\\x6c\\x78\\x77\\x7d\\x77\\x7f\\x1e\\x67\\x4c\\x05\\xfb\\x68\\x06\\x96\\x1d\\xf7\\x29\\x06\\x67\\x4b\\x05\\xfb\\x05\\x06\"\n\"\\x71\\x82\\xf7\\x18\\x1d\\xbd\\x06\\x7c\\x71\\x05\\x85\\x81\\x87\\x7d\\x81\\x1a\\x71\\xa5\\x74\\xa9\\xa1\\x9e\\x97\\x9f\\x97\\x1e\\xb7\\xd8\\x05\\xf7\\x62\\x06\"\n\"\\xa2\\x98\\x8d\\x91\\x95\\x1f\\x9c\\x94\\x96\\x9e\\x9e\\x1a\\x9d\\x82\\x9c\\x7c\\x95\\x1e\\x93\\x7f\\x81\\x8d\\x6f\\x1b\\xfb\\x23\\x06\\xaf\\xcb\\x05\\xf6\\x06\"\n\"\\xa2\\x99\\x8d\\x91\\x94\\x37\\x0a\\x0e\\xf7\\x3f\\xf8\\x3d\\x15\\x28\\x06\\x67\\x73\\x78\\x6e\\x6d\\xa3\\x78\\xaf\\x1f\\xa2\\x06\\xf7\\x42\\xfb\\xe2\\x05\\xd8\"\n\"\\x06\\xf7\\x14\\xf7\\x0b\\xca\\xee\\xdd\\x1a\\xb3\\x7a\\xbd\\x72\\xaa\\x1e\\x9a\\x7f\\x7c\\x92\\x79\\x1b\\x6d\\x72\\x74\\x6f\\x84\\x8d\\x83\\x8e\\x85\\x1f\\x9f\"\n\"\\x63\\x8e\\x81\\x71\\x1a\\x59\\x6c\\x55\\x49\\x48\\x1e\\x0e\\x25\\x1d\\xfb\\x1e\\xf7\\xde\\xdf\\x1d\\x25\\x1d\\xaf\\xf7\\x99\\xca\\x1d\\x25\\x1d\\xfb\\x0c\\xf7\"\n\"\\xa3\\x37\\x1d\\xf7\\xc0\\xba\\x15\\x60\\xa7\\xaa\\x78\\xb8\\x1b\\xb5\\xb2\\x9e\\xaa\\xa6\\x1f\\xa6\\xad\\x99\\xbc\\xcf\\x1a\\xd9\\x76\\xd0\\x67\\xb8\\x1e\\xae\"\n\"\\x6f\\x62\\xa3\\x6b\\x1b\\x6f\\x74\\x73\\x6e\\x76\\x92\\x82\\xa6\\x7b\\x1f\\x96\\x84\\x8e\\x89\\x8f\\x88\\x08\\xaa\\x73\\x9d\\x55\\x41\\x1a\\x57\\x7b\\x6a\\x72\"\n\"\\x6f\\x7a\\xb0\\xd0\\x87\\x1e\\x8a\\xa5\\x8a\\x91\\x88\\x93\\x08\\xa2\\x84\\x7a\\x97\\x71\\x1b\\x73\\x7a\\x81\\x77\\x83\\x1f\\x87\\x81\\x8b\\x87\\x89\\x6c\\x08\"\n\"\\x45\\x87\\x7b\\x67\\x6e\\x1b\\x72\\x7b\\xac\\xc1\\xc1\\x99\\xc5\\x9e\\xa2\\x1f\\x93\\x94\\x93\\x92\\x99\\x93\\x08\\xa9\\x9d\\x93\\x95\\x9f\\x1a\\xa9\\x74\\xa3\"\n\"\\x6e\\x69\\x60\\x70\\x62\\x6e\\x1e\\x6a\\x5e\\x79\\x4a\\x42\\x1a\\xfb\\x12\\xc2\\x40\\xe8\\xb9\\xa9\\x9d\\xb7\\xa8\\x1e\\x0e\\xf7\\xc0\\xa8\\x15\\x6d\\xa7\\xaa\"\n\"\\x7d\\xb5\\x1b\\xec\\xc2\\xd4\\xf7\\x13\\xd9\\x76\\xd1\\x67\\xb8\\x1f\\xae\\x6f\\x62\\xa3\\x6b\\x1b\\x6f\\x74\\x73\\x6e\\x76\\x92\\x82\\xa6\\x7b\\x1f\\x96\\x84\"\n\"\\x8e\\x89\\x8f\\x88\\x08\\xaa\\x73\\x9d\\x55\\x41\\x1a\\x57\\x7b\\x6a\\x72\\x6f\\x7a\\xb0\\xd0\\x87\\x1e\\x8a\\xa5\\x8a\\x91\\x88\\x93\\x08\\xa2\\x84\\x7a\\x97\"\n\"\\x71\\x1b\\x73\\x7a\\x81\\x77\\x83\\x1f\\x87\\x81\\x8b\\x87\\x89\\x6c\\x08\\x45\\x87\\x7b\\x67\\x6e\\x1b\\x72\\x7b\\xac\\xc1\\xc1\\x99\\xc5\\x9e\\xa2\\x1f\\x93\"\n\"\\x94\\x93\\x92\\x99\\x93\\x08\\xa9\\x9d\\x93\\x95\\x9f\\x1a\\xa9\\x74\\xa3\\x6e\\x69\\x60\\x6f\\x63\\x6e\\x1e\\x6a\\x5e\\x79\\x4a\\x42\\x1a\\xfb\\x14\\xc2\\x42\"\n\"\\xec\\xb6\\xa8\\x98\\xaa\\xa8\\x1e\\xf0\\xf8\\xac\\x15\\x9b\\x97\\x91\\x95\\x98\\x1a\\x9d\\x7a\\x9b\\x78\\x82\\x80\\x86\\x82\\x7f\\x1e\\xfb\\x00\\x38\\x05\\x7d\"\n\"\\x80\\x84\\x7f\\xf0\\x0a\\x25\\x1d\\x0e\\xf7\\xc1\\xf8\\x49\\x15\\xfb\\x22\\xfb\\x09\\x23\\xfb\\x13\\xfb\\x0f\\xf7\\x07\\x29\\xf7\\x24\\xf7\\x24\\xf7\\x07\\xec\"\n\"\\xf7\\x0e\\xf7\\x15\\xfb\\x08\\xf3\\xfb\\x23\\x1f\\x23\\x04\\xde\\xcf\\x51\\x45\\x4d\\x45\\x55\\x3a\\x39\\x46\\xc1\\xca\\xd1\\xcf\\xc4\\xde\\x1f\\xf4\\xf7\\x7c\"\n\"\\xcb\\x0a\\x80\\x85\\x80\\x7e\\x1a\\x79\\x9c\\x7b\\x9d\\x95\\x95\\x8f\\x95\\x97\\x1e\\x0e\\xcf\\x8e\\x15\\xf8\\x66\\xec\\xfc\\x02\\xf7\\xf5\\x27\\x06\\x0e\\x80\"\n\"\\x0a\\xe1\\xf7\\xa1\\x15\\x9d\\x99\\x91\\x95\\x99\\x1a\\xa0\\x79\\x9c\\x74\\x7f\\x84\\x88\\x7f\\x7c\\x1e\\xfb\\x1a\\xf7\\x4a\\x1d\\x8f\\x97\\x9b\\x1e\\x0e\\xf7\"\n\"\\x2b\\xf8\\xbc\\x15\\x7d\\x8c\\x95\\x82\\x9a\\x1b\\xac\\x8c\\x05\\xbb\\xc4\\x77\\x6c\\xb5\\x1f\\xa8\\x76\\x9e\\x76\\xa7\\x60\\x08\\xa7\\x5e\\x67\\x96\\x57\\x1b\"\n\"\\xfb\\x16\\x24\\x28\\xfb\\x11\\xfb\\x11\\xf2\\x27\\xf7\\x17\\xf7\\x15\\xf3\\xee\\xf7\\x10\\xe9\\x64\\xf7\\x00\\x4e\\xd1\\x1f\\xcb\\x55\\x33\\xb0\\x29\\x1b\\x70\"\n\"\\x88\\x8a\\x84\\x84\\x1f\\x87\\x87\\x89\\x84\\x84\\x1a\\xf7\\x27\\xfb\\x40\\x15\\xf3\\xdb\\x40\\x28\\x2b\\x3b\\x3e\\x26\\x26\\x3a\\xd8\\xec\\xea\\xdb\\xd9\\xee\"\n\"\\x1f\\x0e\\xf8\\x50\\xf7\\x49\\x15\\xd3\\x06\\xa6\\x99\\x99\\xa3\\xa4\\x7d\\x98\\x70\\x1f\\x43\\xb2\\x06\\xaa\\x80\\x9b\\x75\\x75\\x80\\x7b\\x6c\\x1e\\x64\\x85\"\n\"\\x07\\x71\\x7d\\x7e\\x72\\x73\\x99\\x7d\\xa5\\x1f\\x91\\xfb\\x01\\x06\\x56\\xb0\\x69\\xc5\\xa5\\xb0\\x95\\x98\\xa3\\x1e\\xa0\\x97\\x92\\x95\\x9d\\x1a\\xa0\\x7d\"\n\"\\x9c\\x79\\x84\\x87\\x8a\\x85\\x81\\x1e\\x7f\\x77\\x77\\x85\\x75\\x1b\\x72\\x87\\x8e\\x9d\\x1f\\xfb\\xaa\\xf7\\x00\\x15\\xce\\x8e\\xa4\\x91\\xa8\\x9e\\x08\\xbf\"\n\"\\xac\\xad\\xca\\xcd\\x1a\\xf6\\x3a\\xd8\\xfb\\x05\\x1e\\x23\\x06\\x75\\x82\\x89\\x86\\x83\\x1f\\x7d\\x81\\x82\\x7a\\x79\\x1a\\x7b\\x93\\x7b\\x96\\x81\\x1e\\x84\"\n\"\\x95\\x93\\x89\\xa0\\x1b\\xfb\\xfa\\x07\\x65\\x77\\x79\\x6a\\x69\\xa0\\x79\\xb4\\x1f\\xf7\\x41\\x06\\xb4\\xa0\\x9d\\xad\\x9b\\x84\\x9a\\x7f\\x95\\x1f\\x93\\x81\"\n\"\\x82\\x8d\\x73\\x1b\\x39\\x06\\xf7\\xf9\\x04\\x99\\x06\\xc4\\xae\\x6c\\x57\\x57\\x68\\x6b\\x52\\x1f\\x7d\\x06\\x0e\\xf7\\x7d\\xfb\\x21\\x15\\x24\\x0a\\xf7\\x12\"\n\"\\x07\\xc4\\x93\\xad\\x98\\xae\\xa5\\x08\\xc3\\xb4\\xac\\xcc\\xd2\\x1a\\xf7\\x05\\x2c\\xf2\\x22\\x62\\x65\\x78\\x6c\\x75\\x1e\\x7b\\x76\\x85\\x6d\\x5a\\x1a\\xfb\"\n\"\\x4e\\x07\\x53\\x9a\\x72\\xb0\\xcf\\x1a\\xbc\\x9a\\xaf\\xae\\xb2\\x1e\\x99\\x9a\\x90\\x96\\x9a\\x1a\\xa6\\x73\\xa3\\x70\\x4d\\x4b\\xfb\\x02\\x20\\x39\\xa7\\x4d\"\n\"\\xc2\\x64\\x1e\\xa8\\x76\\xa3\\x82\\xc0\\x81\\x08\\xf7\\x00\\xf7\\xb6\\x15\\xb3\\x8d\\x91\\x97\\xba\\xb9\\x53\\x51\\x4e\\x62\\x5d\\x49\\x80\\x1e\\x0e\\xf7\\x6b\"\n\"\\xf7\\xd6\\x15\\xf7\\x3e\\xfb\\x6e\\x8a\\x06\\x70\\x83\\x89\\x85\\x81\\x3b\\x0a\\x7b\\x94\\x7b\\x98\\x81\\x1e\\x83\\x96\\x94\\x89\\xa8\\x1b\\xf7\\x04\\x06\\xa6\"\n\"\\x92\\x8c\\x92\\x95\\x1f\\x9b\\x96\\x95\\x9b\\x9c\\x1a\\x9b\\x83\\x99\\x7c\\x96\\x1e\\x94\\x7f\\x84\\x8d\\x6f\\x1b\\x88\\xf7\\x6e\\x93\\x06\\xa5\\x92\\xf7\\x54\"\n\"\\x1d\\x9b\\x7d\\x94\\x1e\\x93\\x80\\x82\\x8d\\x70\\x1b\\xfc\\x26\\x06\\x72\\x83\\xc9\\x0a\\x93\\xfb\\x6e\\x88\\x06\\x71\\x84\\x89\\x85\\x80\\x1f\\x7a\\x80\\x82\"\n\"\\x7b\\x7a\\x1a\\x7b\\x93\\x7c\\x9a\\x80\\x1e\\x83\\x97\\x92\\x89\\xa7\\x1b\\xf7\\x04\\x06\\xa6\\x93\\x8c\\x92\\x95\\x1f\\x9b\\x94\\x95\\x9c\\x9d\\x1a\\x9b\\x82\"\n\"\\x9b\\x7e\\x95\\x1e\\x93\\x80\\x82\\x8d\\x6e\\x1b\\x8a\\x06\\x0e\\xf8\\x93\\xf8\\xae\\x15\\x92\\x06\\xae\\x8a\\xa3\\x9f\\xab\\x1a\\x93\\x07\\x8a\\xac\\x74\\x9f\"\n\"\\x66\\x89\\x08\\xfc\\x44\\x06\\x66\\x8d\\x74\\x77\\x8a\\x6a\\x08\\x83\\x07\\x8c\\x6a\\xa2\\x77\\xb0\\x8d\\x08\\x98\\xfc\\x9b\\x7e\\x06\\x66\\x8d\\x74\\x77\\x8a\"\n\"\\x6a\\x08\\x83\\x07\\x8c\\x6a\\xa2\\x77\\xb0\\x8d\\x08\\xf7\\x13\\x06\\xb0\\x89\\xa2\\x9f\\x8c\\xac\\x08\\x93\\x07\\xaa\\x74\\xa0\\x6a\\x8a\\x1e\\x88\\xf8\\x9b\"\n\"\\xf7\\x4a\\xfc\\x9b\\x83\\x06\\x68\\x8d\\x73\\x77\\x6a\\x1a\\x83\\x07\\x8c\\x6a\\xa2\\x77\\xb0\\x8d\\x08\\xf7\\x13\\x06\\xb0\\x89\\xa2\\x9f\\x8c\\xac\\x08\\x93\"\n\"\\x07\\xab\\x73\\x9f\\x68\\x8a\\x1e\\x84\\x06\\x0e\\xf7\\xe9\\xf8\\x64\\x15\\xfb\\x2b\\x65\\x86\\x71\\x5e\\x1f\\x46\\x62\\x61\\x3f\\x37\\x1a\\x3e\\xad\\x46\\xc8\"\n\"\\x5f\\x1e\\x67\\xbd\\xae\\x85\\xf7\\x39\\x1b\\xf7\\x56\\x06\\xa0\\x99\\x95\\x9b\\x9b\\x7f\\x94\\x74\\x1f\\xfb\\x58\\x06\\xfb\\x14\\x60\\x90\\x9e\\x68\\x1f\\x54\"\n\"\\xa8\\x65\\xcb\\xcb\\x1a\\xc5\\xab\\xc7\\xba\\xaa\\x1e\\xa6\\xb3\\xb0\\x90\\xf7\\x23\\x1b\\xf7\\x58\\x06\\xa1\\x98\\x95\\x9b\\x9b\\x7e\\x94\\x75\\x1f\\x0e\\xf7\"\n\"\\x74\\x16\\xf7\\x2d\\xb0\\x90\\xa5\\xb8\\x1f\\xd0\\xb4\\xb5\\xd7\\xdf\\x1a\\xd8\\x68\\xd0\\x4f\\xb7\\x1e\\xaf\\x59\\x67\\x91\\xfb\\x39\\x1b\\xfb\\x55\\x06\\x75\"\n\"\\x7e\\x82\\x7b\\x7b\\x98\\x81\\xa1\\x1f\\xf7\\x58\\x06\\xf7\\x16\\xb3\\x86\\x78\\xaf\\x1f\\xc2\\x6f\\xb1\\x4a\\x4b\\x1a\\x51\\x6b\\x50\\x5b\\x6b\\x1e\\x71\\x65\"\n\"\\x63\\x85\\xfb\\x21\\x1b\\xfb\\x58\\x06\\x74\\x7f\\x82\\x7b\\x7c\\x99\\x80\\xa0\\x1f\\x0e\\xf7\\x8a\\xfb\\x21\\x15\\x24\\x0a\\xf7\\x15\\x07\\xf7\\x03\\x91\\xc9\"\n\"\\xce\\x89\\xf7\\x02\\x08\\xf7\\x2b\\x07\\xb4\\x8d\\x9f\\x9b\\xac\\x1a\\xad\\x73\\x9d\\x5c\\x1e\\x29\\xfb\\x98\\x06\\x5b\\x7c\\x78\\x5b\\x81\\x1e\\xf8\\x53\\x07\"\n\"\\xb7\\x78\\xa3\\x68\\x68\\x78\\x74\\x5e\\x1e\\xfc\\x53\\x07\\x5b\\x96\\x7e\\x9c\\x8a\\xbc\\x08\\xf7\\x98\\x29\\x07\\x5c\\x73\\x79\\x69\\x6b\\x9f\\x7a\\xb4\\x89\"\n\"\\x1f\\xfb\\x2b\\x07\\x88\\xfb\\x01\\xcd\\x45\\xf6\\x87\\x08\\x0e\\xf8\\x68\\xf7\\x5d\\x15\\x89\\x8c\\x8b\\x8c\\x8a\\x8c\\x7b\\x9c\\x83\\x94\\x77\\x9b\\xc3\\x1d\"\n\"\\xf7\\x00\\xe7\\x06\\x9e\\x83\\x9d\\x7d\\xa6\\x6f\\x88\\x8a\\x18\\x6e\\x81\\x7f\\x7e\\x75\\x1a\\x76\\x9f\\x76\\x9f\\x90\\x97\\x8e\\x8f\\x98\\x1e\\xab\\x96\\x90\"\n\"\\x84\\xaa\\x61\\x97\\x79\\x94\\x78\\x19\\x8e\\x85\\x05\\xdc\\xec\\x0a\\x82\\x9c\\x7e\\x94\\x1e\\x71\\x1d\\x80\\x06\\x84\\x94\\x89\\x8e\\x82\\x99\\x9b\\x91\\x18\"\n\"\\xa8\\x95\\x97\\x98\\xa1\\x1a\\x9f\\x78\\xa0\\x78\\x82\\x80\\x89\\x87\\x7e\\x1e\\xfb\\xcc\\xee\\x15\\xf7\\x26\\xf7\\x00\\x07\\xc8\\xb8\\x6f\\x64\\x5d\\x4f\\x6a\"\n\"\\x39\\x1f\\x0e\\x58\\x1d\\xf7\\x41\\xf7\\x78\\x27\\x0a\\xf7\\x2e\\xf7\\xd1\\x15\\x22\\x06\\x79\\x8c\\x80\\x82\\x8a\\x7a\\x08\\x8a\\x07\\x8c\\x7a\\x96\\x82\\x9d\"\n\"\\x8c\\x08\\xc7\\x06\\xe4\\xfb\\xb0\\xf7\\x85\\xf9\\x2f\\x05\\xf7\\x3b\\x06\\x9c\\x98\\x96\\x9a\\x9b\\x80\\x94\\x78\\x1f\\xfb\\x66\\x06\\xfb\\x55\\xfc\\xcc\\x05\"\n\"\\x0e\\x58\\x1d\\xb2\\xf7\\x5c\\x45\\x1d\\x58\\x1d\\xc6\\xfc\\x7b\\x23\\x1d\\xf7\\x0b\\xf8\\x19\\x15\\xf8\\x12\\x06\\xa1\\x96\\x94\\x9b\\x9c\\x80\\x94\\x75\\x1f\"\n\"\\xfc\\x46\\xfb\\x88\\x06\\x77\\x94\\x80\\x9c\\x9c\\x94\\x96\\x9f\\x1e\\x0e\\xf7\\x53\\xa3\\x15\\x71\\xb5\\xb4\\x7e\\xba\\x1b\\xf7\\x10\\xf2\\xf3\\xf7\\x12\\xf7\"\n\"\\x13\\x2a\\xea\\xfb\\x17\\x3d\\x48\\x6d\\x53\\x5f\\x1f\\x65\\x5d\\x81\\x66\\x32\\x1a\\xfb\\xd4\\x2f\\x0a\\xf7\\x14\\xf8\\x6e\\x15\\xd2\\xbd\\x5a\\x45\\x47\\x55\"\n\"\\x52\\x4a\\x67\\x64\\x9d\\xa8\\x70\\x1f\\x78\\xa0\\x82\\xa5\\xaa\\x1a\\xd0\\xc0\\xbd\\xd6\\x1e\\x0e\\x42\\x1d\\x54\\xf7\\x99\\x27\\x0a\\xf7\\xe4\\x7d\\x15\\xf7\"\n\"\\x0c\\x96\\xd6\\xbf\\xd5\\x1a\\xb9\\x70\\xb4\\x5e\\xa4\\x1e\\x6d\\x9b\\x61\\x96\\x41\\x94\\x4b\\x94\\x85\\x8c\\x7e\\x8f\\x08\\x7c\\x91\\x82\\x92\\x92\\x1a\\x99\"\n\"\\xbb\\x9a\\xba\\xb4\\xac\\x82\\x79\\xa5\\x1e\\x6c\\x9d\\x97\\x83\\xa4\\x47\\x0a\\xae\\x07\\x9e\\x8a\\x92\\x88\\x94\\x1e\\x9e\\x86\\x77\\x98\\x75\\x1b\\x7a\\x83\"\n\"\\x85\\x7a\\x81\\x1f\\x9a\\x66\\x62\\x93\\x5b\\x1b\\xfb\\x0f\\x34\\x53\\x3c\\x3e\\xc7\\x63\\xf7\\x22\\x7c\\x1f\\xc1\\x86\\xa0\\x87\\x9b\\x85\\x08\\x9f\\x83\\x97\"\n\"\\x80\\x80\\x1a\\x77\\x56\\x7a\\x4f\\x56\\x61\\x97\\xa2\\x70\\x1e\\xa9\\x82\\x79\\x99\\x6f\\x1b\\x79\\x54\\x1d\\x84\\x6f\\x1a\\x6b\\x07\\x71\\x8c\\x84\\x92\\x81\"\n\"\\x1e\\x7c\\x95\\x9c\\x82\\x9f\\x1b\\x98\\x93\\x8e\\x93\\x96\\x1f\\xa6\\x7e\\xab\\x83\\xb6\\x87\\x08\\x36\\x88\\x0a\\xb2\\x81\\xa8\\x1b\\xcc\\xb9\\xb3\\xc3\\x4e\"\n\"\\x0a\\x42\\x1d\\xfb\\x65\\xf7\\x87\\x2e\\x0a\\x42\\x1d\\xfb\\x3d\\xfc\\x5a\\x23\\x1d\\xf7\\x5f\\xf7\\x06\\x1d\\xf7\\x60\\x16\\xe4\\xf7\\x58\\x05\\x97\\xa5\\x8e\"\n\"\\x95\\xf7\\x3b\\x1d\\x0e\\xf7\\xe8\\xf8\\x49\\x15\\x35\\x59\\x82\\x72\\x5b\\x1f\\x44\\x66\\x5c\\x3f\\x3c\\x1a\\xfb\\x13\\xf7\\x04\\x28\\xf7\\x24\\xf7\\x22\\xf7\"\n\"\\x05\\xee\\xf7\\x11\\xb8\\x7b\\xb4\\x6b\\xb2\\x1e\\xb9\\x06\\xa5\\x94\\x32\\x1d\\x9b\\x9d\\x1a\\xa0\\x7d\\xa0\\x78\\x91\\x1e\\x8e\\x81\\x84\\x8c\\x77\\x1b\\xfb\"\n\"\\x93\\x24\\x15\\xe0\\xcb\\x56\\x45\\x46\\x4b\\x55\\x38\\x37\\x4b\\xc1\\xd0\\xd0\\xcb\\xc1\\xdd\\x1f\\x0e\\xf7\\x6d\\xf8\\x23\\x15\\x75\\x79\\x7a\\x75\\x76\\x9c\"\n\"\\x79\\xa1\\xa1\\x9c\\x9c\\xa1\\xa0\\x7a\\x9d\\x76\\x1f\\xf7\\x41\\x8c\\x15\\x75\\x79\\x79\\x76\\x75\\x9d\\x79\\xa1\\xa0\\x9d\\x9d\\xa0\\xa1\\x79\\x9d\\x76\\x1f\"\n\"\\xe9\\x37\\x15\\x82\\x64\\x83\\x7b\\x77\\x73\\x08\\x61\\x66\\x5c\\x77\\x4d\\x1b\\x4c\\x5d\\x9f\\xb5\\x66\\x1f\\x77\\xa3\\x83\\x9b\\x82\\xb2\\x90\\x48\\x93\\x6c\"\n\"\\xa2\\x68\\x08\\x5b\\xac\\xbd\\x72\\xcb\\x1b\\xc6\\xba\\xa0\\xb4\\xab\\x1f\\xa8\\xb0\\x96\\xae\\x90\\xd3\\x08\\xfb\\x47\\xf7\\x8b\\x15\\xfb\\x33\\xfb\\x13\\xfb\"\n\"\\x10\\xfb\\x2f\\xfb\\x32\\xf7\\x11\\xfb\\x12\\xf7\\x31\\xf7\\x2f\\xf7\\x12\\xf7\\x12\\xf7\\x30\\xf7\\x2d\\xfb\\x12\\xf7\\x14\\xfb\\x2b\\x1f\\x83\\x66\\x15\\xf7\"\n\"\\x1d\\xf7\\x03\\xfb\\x00\\xfb\\x1b\\xfb\\x1d\\xfb\\x01\\xfb\\x01\\xfb\\x1c\\xfb\\x1b\\xfb\\x01\\xf7\\x01\\xf7\\x1c\\xf7\\x19\\xf7\\x02\\xf7\\x03\\xf7\\x17\\x1f\"\n\"\\x0e\\xf7\\x22\\x16\\xf8\\x09\\x9d\\x06\\xfb\\x11\\x91\\x51\\xcd\\x8d\\xf7\\x17\\x08\\x4a\\xad\\xaf\\x72\\xc3\\x1b\\xc1\\xb8\\xba\\xc5\\xc0\\x77\\xaa\\x38\\xd7\"\n\"\\x1f\\x37\\xd8\\x7c\\xa1\\x6d\\xe5\\x7f\\x44\\x5c\\x47\\x3a\\x4a\\x08\\x4d\\x58\\x70\\x5f\\x5a\\x1a\\x51\\xba\\x5b\\xc4\\xc3\\xb3\\xa8\\xc8\\xa8\\x1e\\xfb\\x14\"\n\"\\x90\\x47\\x40\\xfb\\x0e\\x1b\\x0e\\xf8\\x37\\xf8\\xab\\x15\\x91\\x42\\x8c\\x6d\\xa2\\x75\\xaa\\x8a\\x19\\x90\\x06\\xac\\x8c\\xa1\\xa3\\x8a\\xab\\x08\\xf7\\x0f\"\n\"\\x07\\xad\\x8c\\x72\\xa2\\x67\\x1b\\xfb\\xeb\\x06\\x67\\x8c\\x72\\x74\\x6b\\x1a\\x7e\\x07\\x7b\\x8e\\x82\\x95\\x7e\\x1e\\xf7\\x39\\xfb\\x73\\xfb\\x3d\\xfb\\xba\"\n\"\\x05\\x84\\x7f\\x89\\x84\\x7e\\x1a\\x7c\\x07\\x6a\\xa4\\x74\\xaf\\x8c\\x1e\\xf7\\xf2\\x06\\xaf\\xa3\\xa2\\xad\\x1f\\xf7\\x10\\x07\\xab\\x75\\xa3\\x6a\\x8c\\x1e\"\n\"\\x86\\x06\\x6c\\x8a\\x74\\x74\\x8a\\x6c\\x88\\x43\\x18\\xfb\\x62\\x06\\xf7\\x2a\\xf7\\x93\\x05\\x91\\x97\\x8e\\x93\\x95\\x1a\\x97\\x88\\x94\\x82\\x97\\x1e\\xfb\"\n\"\\x1a\\xf7\\x4c\\x05\\x0e\\xf7\\x23\\xf8\\x2a\\x15\\x73\\x6e\\x7d\\x68\\x86\\x65\\x08\\x2c\\x5e\\xeb\\x06\\x8f\\x64\\x99\\x68\\xa2\\x6e\\x48\\x48\\x18\\xab\\x6b\"\n\"\\xce\\xcf\\xa9\\x73\\xab\\x7e\\xb4\\x85\\x19\\x2c\\xb8\\xea\\x07\\xb4\\x91\\xad\\x99\\xa7\\xa2\\xce\\x47\\x18\\xab\\xab\\x48\\xcf\\xa1\\xa4\\x9a\\xaf\\x90\\xb4\"\n\"\\x19\\xeb\\xb8\\x2b\\x06\\x86\\xb3\\x7c\\xaf\\x75\\xa6\\xce\\xce\\x18\\x6b\\xab\\x48\\x48\\x70\\xa1\\x64\\x9b\\x66\\x8f\\x19\\xea\\x5e\\x2d\\x07\\x67\\x87\\x62\"\n\"\\x79\\x72\\x75\\x47\\xcf\\x18\\x6b\\x6b\\x05\\xf7\\x72\\x5d\\x15\\xdc\\xcc\\x4b\\x3d\\x3a\\x4b\\x4b\\x3b\\x3c\\x4b\\xcb\\xda\\xda\\xcb\\xcc\\xd8\\x1f\\x0e\\xf7\"\n\"\\xed\\xf7\\xd7\\x15\\xd7\\x06\\xa7\\x92\\x8c\\x91\\x94\\x1f\\x9c\\x95\\x94\\x9b\\x9d\\x1a\\xa5\\x79\\x9f\\x71\\x8e\\x1e\\x8e\\x74\\x8b\\x8b\\x88\\x1b\\xfb\\x9f\"\n\"\\x06\\x71\\x83\\x8a\\x84\\x81\\x1f\\x7b\\x81\\x81\\x7b\\x7a\\x1a\\x7a\\x94\\x7a\\x99\\x82\\x1e\\x84\\x96\\x95\\x89\\xa5\\x1b\\xde\\xfb\\x8a\\x06\\x53\\xb3\\x6c\"\n\"\\xd2\\xd1\\xbb\\xa6\\xb2\\xa3\\x7a\\xa0\\x78\\x84\\x81\\x89\\x87\\x81\\x1e\\x82\\x75\\x82\\x89\\x7e\\x1b\\x80\\x88\\x8f\\x99\\x1f\\x0e\\xf7\\x6e\\xf7\\xa4\\x15\"\n\"\\xbd\\xcb\\x1d\\x59\\x76\\x06\\xc5\\x0a\\xa0\\x5a\\x06\\x38\\xd3\\x57\\xf7\\x09\\xc0\\xda\\x9b\\xa1\\xbc\\x1e\\xb1\\x9b\\x9a\\x9b\\xa3\\x1a\\xa7\\x74\\xa3\\x6e\"\n\"\\x80\\x84\\x89\\x82\\x79\\x1e\\x75\\x5b\\x5f\\x81\\x57\\x1b\\x65\\x70\\x91\\x97\\x80\\x1f\\x86\\x90\\x89\\x94\\x9d\\x1a\\xaa\\xf7\\x1d\\x07\\xa2\\x97\\x38\\x1d\"\n\"\\x0e\\xf7\\x6e\\xf8\\x3d\\x15\\xdb\\x07\\xc0\\x1d\\xf7\\x4b\\xf7\\x45\\x07\\xb9\\xa3\\x9c\\xae\\x9f\\x7f\\x9d\\x78\\x93\\x1f\\xe2\\xf7\\x12\\x05\\x94\\x98\\x8f\"\n\"\\x95\\x94\\x1a\\x9f\\x79\\x9d\\x75\\x7a\\x81\\x85\\x76\\x7d\\x1e\\x39\\xfb\\x0b\\x05\\x81\\x7d\\x88\\x82\\x80\\x1a\\x87\\x8b\\x89\\x8d\\x86\\x1e\\x0e\\xf7\\xc2\"\n\"\\x7c\\x15\\xbd\\x8c\\xc6\\x96\\xbf\\x9e\\x08\\xbe\\x9d\\x9e\\x9c\\xa7\\x1a\\xa8\\x74\\xa2\\x6e\\x7f\\x85\\x89\\x82\\x79\\x1e\\x76\\x5f\\x5a\\x80\\x58\\x1b\\x65\"\n\"\\x71\\x91\\x97\\x80\\x1f\\x85\\x91\\x89\\x93\\x9e\\x1a\\xf7\\x4b\\xcb\\x1d\\xfb\\x5e\\x06\\x4b\\xb4\\x5e\\xd4\\x7a\\x1e\\x2f\\x07\\x8d\\x9c\\x8d\\x8b\\x92\\x76\"\n\"\\x1d\\x74\\x91\\x94\\x7a\\x1f\\x97\\x77\\x89\\x8b\\x82\\x1b\\x76\\x79\\x7a\\x76\\x7a\\x94\\x7e\\xa0\\x80\\x1f\\x7e\\xa5\\xb3\\x81\\xa7\\x1b\\xcd\\xb9\\xb3\\xc4\"\n\"\\xbd\\x72\\xa9\\x59\\x95\\x1f\\x0e\\xf7\\xc0\\xf8\\xef\\x15\\xfb\\x1c\\x2b\\xfb\\x13\\xfb\\x4a\\xfb\\x4b\\xea\\xfb\\x12\\xf7\\x1d\\xf7\\x1d\\xea\\xf7\\x13\\xf7\"\n\"\\x4a\\xf7\\x4b\\x2c\\xf7\\x12\\xfb\\x1d\\x1f\\xfb\\x0c\\xfb\\x96\\x15\\xed\\x9a\\xb7\\xc3\\xc8\\x1b\\xc8\\xb6\\x54\\x28\\x9b\\x1f\\x23\\x04\\x29\\x7b\\x60\\x54\"\n\"\\x4e\\x1b\\x4e\\x60\\xc2\\xed\\x7b\\x1f\\x0e\\xf8\\x0b\\xf8\\xc9\\x15\\x9a\\x97\\x92\\x96\\x96\\x1a\\x9e\\x7a\\x9b\\x78\\x82\\x80\\x53\\x1d\\x7d\\x80\\x84\\x80\"\n\"\\x7f\\x1a\\x78\\x9c\\x7b\\x9d\\x95\\x95\\x57\\x1d\\xbb\\x0a\\x96\\x97\\x88\\xa4\\x1b\\xaa\\xfb\\x3c\\x06\\x58\\x58\\x74\\x7f\\x5a\\x1b\\x51\\x71\\x9f\\xb8\\x1f\"\n\"\\xf7\\xa1\\xfb\\x0c\\x07\\x72\\x81\\x89\\x86\\x82\\x32\\x0a\\x84\\x95\\x96\\x88\\xa6\\x1b\\x97\\xfb\\x3e\\x06\\x52\\x9f\\x61\\xb3\\x6e\\x1e\\x73\\xad\\xb5\\x7f\"\n\"\\xb9\\x1b\\xc1\\xab\\x98\\xb3\\xba\\x1f\\x62\\xee\\x07\\xa0\\x9a\\x8d\\x90\\x93\\xa6\\x1d\\x81\\x91\\x83\\x8d\\x76\\x8c\\x08\\xfb\\xf6\\xdd\\x1d\\x2c\\x1d\\xfb\"\n\"\\x5c\\xf8\\x80\\x15\\x9a\\x9a\\x90\\x1d\\x23\\x05\\x76\\x9e\\x0a\\xf7\\x9e\\xf4\\x15\\xa0\\xa2\\x8b\\x8b\\x99\\x1a\\x9f\\x79\\x9d\\x77\\x7f\\x82\\x87\\x7f\\x80\"\n\"\\x1e\\x25\\x23\\x05\\x77\\x9e\\x0a\\x0e\\x2c\\x1d\\xfb\\xe4\\xf8\\x8a\\x37\\x1d\\xa7\\xfb\\xaf\\xf7\\x4f\\x1d\\x79\\x94\\x7b\\xec\\x1d\\xfc\\xb4\\xf7\\x2f\\x15\"\n\"\\xf7\\x64\\x1d\\x81\\x80\\x79\\x78\\x1a\\x7a\\x94\\x7a\\x6a\\x1d\\xf8\\xb4\\x06\\xa2\\x98\\x8d\\x91\\x95\\x1f\\x9c\\x94\\x96\\x9e\\xee\\x0a\\x0e\\x0e\\x7e\\x1d\"\n\"\\x7c\\x1d\\x7f\\xfb\\x72\\x23\\x1d\\xbb\\x1d\\xf7\\x0f\\xfb\\x96\\x23\\x1d\\xf7\\x46\\xf8\\xf1\\x37\\x1d\\x85\\x1d\\xf8\\xe8\\x16\\xfb\\x82\\xf8\\xc8\\x05\\xfb\"\n\"\\x08\\x06\\xfb\\x82\\xfc\\xc8\\x05\\xf8\\x44\\xf3\\x15\\xfb\\xa3\\x06\\xf7\\x1b\\xf7\\xd3\\x05\\x0e\\xf7\\x9b\\xe9\\x15\\x69\\x9a\\x7d\\x92\\x7d\\x98\\x08\\x63\"\n\"\\xac\\x72\\xd0\\xd7\\x1a\\xf7\\x0f\\xc4\\xcd\\xf7\\x00\\xf5\\xc4\\x48\\xfb\\x0e\\x3f\\x72\\x46\\x63\\x6a\\x1e\\x7d\\x7e\\x7d\\x84\\x69\\x7c\\x08\\x2d\\xf7\\x5b\"\n\"\\x07\\xa4\\x93\\xf7\\x54\\x1d\\x9a\\x7e\\x95\\x1e\\x93\\x7f\\x82\\x8d\\x71\\x1b\\x4d\\x06\\xa8\\x99\\x96\\x93\\x99\\x9b\\x08\\xad\\xb1\\xa0\\xcd\\xce\\x1a\\xd9\"\n\"\\x6e\\xd7\\x5e\\xb6\\x1e\\xb6\\x5e\\x3c\\xa5\\x35\\x1b\\x35\\x3c\\x71\\x60\\x5e\\x1f\\x5e\\x60\\x6e\\x3f\\x3d\\x1a\\x4e\\x9d\\x4c\\xa8\\x65\\x1e\\x9c\\x76\\x97\"\n\"\\x81\\xac\\x7b\\x08\\x4d\\x06\\x72\\x84\\xc9\\x0a\\xf7\\x5b\\x06\\x0e\\xf7\\x61\\x84\\x15\\x85\\xa1\\x9d\\x88\\x9f\\x1b\\xa9\\xba\\x93\\x94\\xa0\\x1f\\xb6\\x9d\"\n\"\\x05\\x78\\xed\\x07\\xb9\\xa4\\x9d\\xad\\xaa\\x75\\x9e\\x64\\x8c\\x1f\\xf7\\xd6\\xfb\\x1f\\x07\\x5d\\x72\\x79\\x69\\x6a\\xa4\\x78\\xb9\\x1f\\xaa\\xfb\\x4b\\x06\"\n\"\\x67\\x4e\\x61\\x7d\\x62\\x1b\\x63\\x7a\\x9b\\xb0\\x1f\\xf7\\xb0\\xfb\\x0c\\x07\\x5e\\x72\\x79\\x69\\x6a\\xa4\\x78\\xb8\\x1f\\x97\\xfc\\x55\\x06\\x5f\\x9e\\x73\"\n\"\\xae\\xae\\x9e\\xa3\\xb7\\x1e\\x0e\\xf8\\xa9\\xf8\\x0f\\x15\\xad\\x75\\xa3\\x6b\\x76\\x7d\\x83\\x79\\x80\\x1e\\x9d\\x70\\x6b\\x93\\x5c\\x1b\\x3c\\x50\\x74\\x5c\"\n\"\\x5f\\x1f\\x62\\x5e\\x75\\x50\\x47\\x1a\\x3e\\xa7\\x4f\\xc0\\x65\\x1e\\xa7\\x77\\xac\\x7d\\xc7\\x78\\x08\\xcd\\x75\\x8b\\x8b\\x81\\x1a\\x7b\\x7a\\x83\\x60\\x87\"\n\"\\x1e\\x65\\x87\\x78\\x7b\\x6b\\x1a\\x69\\xa1\\x7a\\xb7\\xe6\\xcf\\xc5\\xd8\\xad\\x7d\\xa7\\x71\\xa1\\x1e\\x78\\x9b\\x72\\x95\\x51\\x9c\\x08\\x24\\xa9\\x74\\xa3\"\n\"\\xd6\\x1a\\xe8\\xbf\\xc0\\xe6\\xc5\\xa3\\x79\\x55\\x98\\x1e\\x65\\x95\\x9a\\x7c\\xa8\\x1b\\xaa\\x9e\\xa3\\xb1\\x8c\\x1f\\x0e\\x30\\x1d\\x89\\xf9\\x46\\x81\\x1d\"\n\"\\x56\\x0a\\xf7\\x30\\xf7\\xe0\\x15\\x99\\x7a\\x86\\x8d\\x7f\\x64\\x0a\\x20\\x05\\x7e\\x9c\\x92\\x62\\x0a\\x8b\\x0a\\xf7\\x41\\xf8\\x13\\x05\\xb7\\x9d\\x91\\x95\"\n\"\\x94\\x1b\\x8f\\x91\\x89\\x87\\x92\\x1f\\x7d\\xa0\\x9e\\x85\\x9d\\x1b\\xaf\\xaa\\xab\\xb0\\xba\\x5f\\xad\\x4d\\x41\\x5e\\x68\\x2f\\x61\\x1f\\x0e\\x7d\\x1d\\xf7\"\n\"\\x2a\\xf7\\xe2\\x15\\x98\\x7b\\x84\\x8e\\x80\\x64\\x0a\\x21\\x05\\x80\\x99\\x95\\x86\\x96\\x1b\\xa1\\x9e\\x9d\\x9f\\x99\\x85\\x95\\x78\\x99\\x1f\\x0e\\xf7\\x5a\"\n\"\\xf7\\x7c\\x15\\xf4\\xf1\\x22\\xf7\\x13\\xf7\\x8c\\x5e\\x06\\x8b\\x1d\\x94\\xa5\\x1a\\xf7\\x28\\xfc\\x6f\\x07\\xf7\\x0b\\x1d\\xfb\\x13\\x50\\x25\\xc6\\xfb\\x15\"\n\"\\x80\\x06\\xde\\x0a\\xf7\\x6b\\x31\\x1d\\x2b\\x06\\x0e\\xf7\\x30\\xf7\\x4a\\x15\\x3d\\x57\\x07\\x46\\x0a\\x56\\xd9\\xbd\\x06\\xae\\xa1\\x9b\\xa5\\x94\\x85\\x99\"\n\"\\x85\\x92\\x1f\\x94\\x82\\x7e\\x8e\\x74\\x1b\\x59\\xc2\\xf7\\x5e\\x37\\x06\\x24\\x0a\\xf7\\x50\\xfc\\x6a\\x07\\x52\\x1d\\xbf\\x54\\x65\\x06\\x67\\x76\\x7b\\x71\"\n\"\\xf4\\x0a\\x0e\\xf8\\xad\\xf3\\x15\\x64\\xf1\\x7a\\xb8\\x76\\xaa\\x69\\xa9\\xf7\\x0e\\x0a\\x6e\\x94\\x99\\x80\\xa4\\x1b\\xae\\x98\\xa0\\xc3\\x1f\\x98\\x07\\xce\"\n\"\\x80\\x9b\\x5f\\x65\\x6f\\x7d\\x6e\\x74\\x1e\\x7a\\x76\\x69\\x52\\x60\\x3d\\x08\\xeb\\x07\\xad\\x92\\x9b\\x9b\\xa7\\x1a\\xb1\\x74\\x99\\x4c\\xbc\\x0a\\x7a\\x49\"\n\"\\xcc\\x0a\\x69\\x6b\\x74\\x69\\x7c\\x62\\x64\\x24\\x18\\x64\\x87\\x79\\x7a\\x6c\\xf7\\x2f\\x1d\\xae\\x9c\\xaa\\x99\\x99\\x08\\xfb\\x23\\x07\\x65\\x86\\x7a\\x7b\"\n\"\\x6b\\x1a\\x67\\xa2\\x7d\\xcb\\x1e\\xb6\\x06\\xc9\\xa3\\x99\\xb0\\xa8\\x7a\\x9c\\x67\\x91\\x1f\\xf7\\x23\\x07\\x95\\x82\\xa1\\x61\\x96\\x6e\\xb5\\x21\\x18\\x9f\"\n\"\\x59\\x96\\x82\\xb4\\x8a\\x08\\x9e\\x56\\xe9\\x0a\\xf8\\xa2\\xf4\\x15\\x66\\xca\\x7b\\xa6\\x7a\\xa0\\x78\\x99\\x19\\xa4\\x99\\x9b\\xa0\\x98\\xae\\x08\\x75\\x94\"\n\"\\x9a\\x81\\xa2\\x1b\\xaa\\x9c\\x9f\\xb0\\x1f\\xb3\\x07\\xb3\\x75\\x9f\\x60\\x61\\x69\\x79\\x69\\x75\\x1e\\x45\\x21\\x05\\xc4\\x07\\xa5\\x9b\\x94\\x99\\xa0\\x1a\"\n\"\\xab\\x71\\x9d\\x5c\\x1e\\x6b\\x06\\x5e\\x71\\x79\\x6b\\x76\\x94\\x7e\\xa4\\x7a\\x1f\\x52\\x07\\x46\\xf5\\x05\\xad\\x75\\x68\\x9d\\x62\\x1b\\x5f\\x76\\x77\\x63\"\n\"\\x1f\\x63\\x07\\x65\\x9c\\x77\\xaa\\xa2\\x99\\x95\\xa1\\x95\\x1e\\x97\\x69\\x9c\\x76\\xa3\\x7d\\x7a\\x7f\\x77\\x72\\x7d\\x72\\x66\\x4b\\x18\\x5e\\x8a\\x75\\x79\"\n\"\\x68\\x1a\\x6a\\x9e\\x7a\\xad\\x1e\\xce\\x06\\xcf\\xf7\\x0b\\x9b\\xa6\\xa0\\xa0\\x99\\x8e\\x19\\x47\\x07\\x73\\x7a\\x81\\x7d\\x76\\xe1\\x0a\\x9c\\x1f\\xcf\\x07\"\n\"\\x99\\x88\\xa0\\x76\\x9c\\x70\\xcf\\xfb\\x0b\\x18\\xb7\\x61\\xf7\\x0a\\x0a\\xf7\\x27\\x07\\x0e\\xf7\\xce\\x7d\\x15\\xc5\\x8e\\xb8\\x95\\xa9\\x9a\\x08\\xc9\\xaa\"\n\"\\xb0\\xc4\\xcd\\x1a\\xc4\\x73\\xb6\\x59\\xac\\x1e\\xb0\\xad\\x9c\\xae\\xb8\\x1a\\xea\\x34\\xcf\\xfb\\x0e\\x5b\\x62\\x82\\x77\\x61\\x1e\\x8c\\x98\\x05\\xa6\\x8c\"\n\"\\x72\\xa2\\x6e\\x1b\\x6e\\x74\\x75\\x6e\\x1f\\x80\\x07\\x8c\\x63\\x05\\x60\\x8a\\x80\\x87\\x70\\x1e\\x86\\x72\\x88\\x74\\x86\\x1a\\x71\\xa3\\x76\\xa8\\xa6\\x99\"\n\"\\x98\\xad\\x95\\x1e\\xd2\\x9f\\xb0\\xa6\\xd5\\x1b\\xcc\\xb6\\x71\\x65\\x61\\x5c\\x72\\x3f\\x1f\\x78\\x06\\x4b\\x74\\x7d\\x65\\x64\\xa3\\x7e\\xd0\\x1f\\xab\\x06\"\n\"\\xe3\\xaf\\x77\\x5b\\x56\\x5c\\x6f\\x32\\x43\\x5a\\x99\\xaf\\x4f\\x1f\\xa2\\x66\\x7d\\x91\\x7b\\x1b\\x6f\\x72\\x71\\x6f\\x6f\\x99\\x7b\\xbc\\x70\\x1f\\xc5\\x6b\"\n\"\\xc6\\x78\\xc7\\x85\\x08\\x36\\x93\\x0a\\xf7\\xe0\\x7f\\x15\\xbd\\x8d\\xb6\\x93\\xa7\\x98\\x08\\xc4\\xa4\\xac\\xb6\\xbe\\x1a\\xb4\\x7a\\xa9\\x65\\xa6\\x1e\\xa3\"\n\"\\xa6\\x95\\xa3\\xa8\\x1a\\xd6\\x3b\\xc1\\xfb\\x01\\x57\\x62\\x80\\x73\\x64\\x1e\\xc1\\x80\\x80\\x99\\x6b\\x1b\\x6f\\x73\\x76\\x72\\x84\\x8d\\x7e\\x8c\\x82\\x1f\"\n\"\\x8e\\x7e\\x8c\\x7b\\x6e\\x1a\\x8a\\x5c\\x05\\xb4\\x0a\\x1f\\x67\\x8a\\x7f\\x8b\\x82\\x89\\x08\\x71\\x84\\x7e\\x7b\\x6f\\x1a\\x66\\xa2\\x7e\\xcb\\x1e\\x95\\x06\"\n\"\\xd9\\xba\\x7f\\x76\\x74\\x58\\x79\\x4a\\x4b\\x4f\\x9a\\xac\\x4e\\x1f\\x95\\x78\\x80\\x8e\\x7f\\x1b\\x70\\x71\\x72\\x71\\x65\\xb5\\x6d\\xe7\\x71\\x1f\\xab\\x82\"\n\"\\xa3\\x86\\xa8\\x88\\x08\\x31\\x93\\x0a\\xf8\\x02\\xf7\\xd1\\x15\\x90\\x92\\x98\\x9d\\xa1\\xaa\\x8c\\x8c\\x8d\\x8f\\x90\\x92\\x90\\x92\\x8f\\x91\\x8d\\x8f\\xa3\"\n\"\\xaf\\x18\\x8c\\x8c\\x8f\\x91\\x92\\x93\\x08\\x60\\x8f\\x9c\\x78\\xad\\x1b\\xb0\\x99\\xf7\\x30\\x1d\\x65\\x77\\x59\\x69\\x1f\\x44\\x24\\x72\\x69\\x85\\x87\\x75\"\n\"\\x8a\\x19\\x82\\xf7\\x00\\x06\\xc9\\x8d\\x9e\\x97\\xb1\\x1a\\xb2\\x75\\x98\\x4b\\x1e\\x29\\x06\\x4c\\x74\\x7e\\x65\\x66\\xa4\\x7a\\xc3\\x8c\\x1f\\xfb\\xf9\\x07\"\n\"\\x4f\\x8a\\x76\\x7e\\xdb\\x0a\\x81\\xf7\\x24\\xa2\\x06\\xa9\\x8d\\xae\\x6d\\xaa\\x52\\xc6\\x20\\x18\\x9b\\x6c\\x98\\x7a\\x91\\x89\\x92\\x88\\x95\\x8a\\xae\\x89\"\n\"\\x08\\x55\\x2f\\x0a\\xf7\\x32\\x25\\x07\\x50\\xf4\\x6e\\xbe\\x77\\xa4\\x6d\\xa4\\x19\\x0e\\xf8\\x79\\xf4\\x15\\x59\\xcf\\x76\\xa7\\x74\\xa1\\x74\\x99\\x19\\xcd\"\n\"\\xcd\\x99\\x97\\x05\\x6d\\x92\\x9c\\x7d\\xa8\\x1b\\xb1\\x9a\\xa2\\xc6\\xbf\\x77\\x9f\\x57\\x58\\x5f\\x7a\\x6a\\x6d\\x1f\\x49\\x45\\x74\\x73\\x86\\x89\\x75\\x8a\"\n\"\\x19\\x81\\xb7\\x06\\xc1\\x8c\\xa0\\x99\\xaf\\x28\\x1d\\x36\\x06\\x4b\\x74\\x7d\\x66\\x66\\xa0\\x7c\\xc2\\x8a\\x1f\\xfb\\x6d\\x07\\x54\\x8a\\x76\\x7c\\x67\\x1a\"\n\"\\x65\\xa2\\x7d\\xcb\\xe2\\x0a\\xa3\\x06\\xa5\\x8c\\xa9\\x77\\xab\\x62\\xbd\\x48\\x18\\xad\\x5f\\x8f\\x89\\xb1\\x8a\\x08\\x92\\x64\\x06\\x24\\x0a\\xf7\\x24\\x07\"\n\"\\x0e\\xf7\\xdd\\xf7\\x57\\x15\\x9f\\x6c\\xc5\\xfb\\x00\\x98\\x72\\x99\\x76\\x90\\x89\\x19\\x94\\x1d\\x99\\x4a\\x1f\\x7c\\x06\\x53\\xf4\\x73\\xb8\\x72\\xaa\\x6d\"\n\"\\xa4\\x19\\x8e\\x92\\x92\\x94\\x98\\x9e\\x9f\\xa7\\x19\\x8e\\x91\\x8d\\x8d\\x8e\\x8f\\x90\\x93\\x8f\\x91\\x8e\\x8e\\x92\\x97\\x93\\x97\\x93\\x97\\x8d\\x8d\\xf7\"\n\"\\x5c\\x1d\\xb1\\x98\\xf7\\x14\\x1d\\x66\\x55\\x05\\x9a\\x84\\x7c\\x95\\x79\\x1b\\x82\\x7e\\x86\\x84\\x83\\x1f\\x80\\x83\\x88\\x82\\x72\\x1a\\x50\\x7f\\xf7\\x00\"\n\"\\x07\\xca\\x8d\\x9e\\x97\\xb2\\x1a\\xb1\\x75\\x98\\x4a\\xf7\\x02\\x1d\\xcb\\xa2\\x98\\xb1\\xae\\x73\\x9d\\x5c\\x1f\\x86\\x06\\x85\\xf7\\x24\\x97\\x44\\x06\\x6a\"\n\"\\x9c\\x76\\xa6\\xa8\\x9a\\x9d\\xaf\\x1e\\x0e\\xf8\\x04\\xf7\\x06\\x15\\xbd\\x48\\xad\\x5f\\x8f\\x89\\xb1\\x8a\\x19\\xb7\\x06\\xb5\\xa0\\x9d\\xae\\xb1\\x75\\x97\"\n\"\\x47\\x8c\\x1f\\x58\\xcf\\x65\\xbe\\x88\\x8f\\x6e\\xa4\\x19\\xd0\\xbd\\x99\\x98\\x05\\x6d\\x92\\x9c\\x7d\\xa9\\x1b\\xb1\\x9a\\xa2\\xc6\\xbf\\x77\\x9f\\x57\\x57\"\n\"\\x5f\\x7a\\x6a\\x6d\\x1f\\x5c\\x59\\x05\\x97\\x84\\x81\\x91\\x7e\\x1b\\x89\\x89\\x8b\\x8a\\x87\\x1f\\x91\\x94\\x8e\\x95\\x98\\x1a\\xb0\\x73\\x99\\x4c\\x1e\\x36\"\n\"\\x06\\x4b\\x74\\x7d\\x66\\x66\\xa0\\x7c\\xc2\\x8a\\x1f\\xfb\\x6d\\x07\\x54\\x8a\\x76\\x7c\\x67\\x1a\\x65\\xa2\\x7d\\xcb\\x1e\\xe0\\x06\\xcb\\xa2\\x99\\xb0\\xae\"\n\"\\x73\\x9d\\x5c\\x1f\\x89\\x06\\x89\\xd1\\x06\\xaf\\x8a\\x05\\x86\\x07\\x6b\\x9a\\x77\\xa2\\x9c\\x98\\x96\\x9d\\x90\\x1e\\x42\\xf7\\x1e\\x15\\x88\\x84\\x85\\x89\"\n\"\\x7e\\x1b\\x81\\xb6\\x06\\xa2\\x8c\\x91\\x8c\\x99\\x8f\\x08\\x85\\x83\\x8a\\x86\\x74\\x1a\\x0e\\xef\\xf8\\x60\\x15\\x8e\\x06\\x92\\x06\\x91\\x06\\x90\\xfb\\xf9\"\n\"\\x06\\x4f\\x8a\\x76\\x7e\\xdb\\x0a\\x81\\xf7\\x24\\xa2\\x06\\xa9\\x8d\\xad\\x6d\\xab\\x52\\xc5\\x20\\x18\\x98\\x72\\x99\\x76\\x90\\x89\\x08\\x94\\x1d\\x98\\x4a\"\n\"\\x1f\\x7c\\x06\\x53\\xf5\\x73\\xb7\\x72\\xab\\x6c\\xa4\\x19\\x8f\\x92\\x92\\x94\\x98\\x9d\\x9f\\xa8\\x19\\x8d\\x8f\\x8e\\x8f\\x8e\\x8f\\x90\\x92\\x8f\\x91\\x8d\"\n\"\\x8f\\x94\\x97\\x92\\x96\\x93\\x97\\x8d\\x8e\\xf7\\x5c\\x1d\\xb0\\x99\\xf7\\x14\\x1d\\x44\\x24\\x73\\x68\\x85\\x88\\xf7\\x62\\x1d\\xb1\\x1a\\xad\\x7c\\x98\\x5c\"\n\"\\x8f\\x1e\\x8c\\x8c\\x05\\xfb\\x9c\\xfb\\x0d\\x4a\\x0a\\x9c\\x07\\x0e\\xf4\\xf7\\xd5\\x15\\xac\\xfb\\x6d\\x06\\x53\\x8a\\x76\\x7c\\x67\\x1a\\x64\\xa2\\x7e\\xcc\"\n\"\\xe2\\x0a\\xa3\\x06\\xa5\\x8c\\xa8\\x77\\xab\\x62\\xbd\\x48\\x18\\xae\\x5f\\x8e\\x89\\xb1\\x8a\\x08\\xb7\\x06\\xb5\\xa0\\x9d\\xae\\xb1\\x75\\x98\\x47\\x1f\\x58\"\n\"\\xd0\\x76\\xa6\\x75\\xa2\\x74\\x99\\x19\\xcd\\xcd\\x98\\x97\\x05\\xf7\\x1c\\x1d\\x74\\x73\\x86\\x89\\x75\\x8a\\x19\\x81\\xb7\\x06\\xc1\\x8c\\xa0\\x99\\xaf\\x28\"\n\"\\x1d\\xfb\\x81\\xfb\\x4f\\x4a\\x0a\\x0e\\xf8\\x93\\xf2\\x15\\xf7\\xfa\\x07\\xad\\x8f\\x9d\\x9d\\xa9\\x1a\\x9b\\x83\\x9a\\x7d\\x96\\x1e\\x92\\x4b\\x1d\\x7a\\x93\"\n\"\\x7b\\x99\\x81\\x1e\\x84\\x96\\x95\\x89\\xa6\\x1b\\x96\\xfb\\x14\\xfb\\x62\\xf7\\x14\\x96\\x06\\xa4\\x95\\x8c\\x91\\x94\\x1f\\x9b\\x95\\x95\\x9b\\x9e\\x33\\x1d\"\n\"\\x4b\\x1d\\x6d\\x9d\\x79\\xad\\x87\\x1e\\xfb\\xfa\\x89\\x07\\xf7\\x10\\x0a\\x7a\\x1a\\x7a\\x93\\x7b\\x99\\x82\\x3f\\x1d\\xf7\\x0d\\x31\\x1d\\x80\\xf7\\x13\\xf7\"\n\"\\x62\\xfb\\x13\\x80\\x06\\x72\\x82\\x89\\x4f\\x0a\\x7a\\x7a\\xf3\\x0a\\x55\\xe9\\x0a\\xf8\\x92\\xf3\\x15\\xf7\\x6e\\x07\\xaf\\x8f\\x9c\\x9c\\xa9\\x1a\\xad\\x73\"\n\"\\x9d\\x5d\\x1e\\x2b\\xd0\\x1d\\xf7\\x5c\\x4f\\x86\\x39\\x0a\\xf1\\x63\\x06\\x5d\\x9c\\x75\\xaf\\xaf\\x9e\\xa2\\xb8\\x1e\\xf7\\x23\\x07\\x0e\\xf7\\xe9\\x7e\\x15\"\n\"\\xc7\\x8d\\xc0\\x98\\xb2\\xa0\\x08\\xb9\\xa3\\xa8\\xac\\xa7\\x64\\x1d\\x80\\x85\\x08\\x7d\\x72\\x65\\x83\\x5d\\x1b\\xfb\\x09\\xd8\\x0a\\x94\\x80\\x8f\\x75\\x08\"\n\"\\x64\\x93\\x9f\\x0a\\x52\\x1b\\xfb\\x30\\x74\\x1d\\x4b\\x07\\xfb\\x12\\xea\\x26\\xf7\\x1f\\x75\\x1e\\x31\\xd6\\x1d\\xf7\\xf4\\x7c\\x15\\xf7\\x13\\x90\\xe5\\xb7\"\n\"\\xc3\\x1a\\xa7\\x72\\xa3\\x6e\\xf7\\x3e\\x1d\\xb0\\xd7\\xf7\\x00\\x0a\\x90\\x83\\x8f\\x7b\\x90\\x75\\x8e\\x85\\x93\\x84\\x08\\x83\\x94\\x9b\\x85\\x99\\x47\\x0a\"\n\"\\xd4\\x07\\xb9\\x7b\\xa0\\x67\\x75\\x80\\x83\\x78\\x84\\x1e\\x9d\\x65\\x5a\\xa2\\x1d\\x41\\xad\\x4d\\xc9\\x63\\x1f\\xad\\x75\\xaf\\x81\\xc5\\x85\\x08\\x36\\x88\"\n\"\\x0a\\xb2\\x81\\xa8\\x1b\\xcc\\xb9\\xb3\\xc3\\x4e\\x0a\\x2b\\x0a\\x0e\\xf7\\xf7\\x8e\\x15\\xf7\\x42\\xf7\\xd3\\xa7\\x0a\\x82\\x1e\\x95\\x84\\x92\\x89\\xa1\\x8a\"\n\"\\xfb\\x04\\xfb\\x5d\\x18\\xfb\\x00\\xf7\\x5d\\x05\\xaf\\x8d\\xa0\\x9e\\xa9\\x22\\x1d\\x31\\x06\\x77\\x84\\xf7\\x67\\x1d\\x6f\\x9d\\x79\\xab\\x86\\x1e\\xf7\\x42\"\n\"\\xfb\\xd3\\x05\\x27\\x89\\xf7\\x4e\\x1d\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x84\\x95\\x99\\x88\\xa3\\x1b\\xf7\\x0a\\xd0\\x0a\\x81\\x82\\x8c\\x6e\\x1b\\x89\\x06\\x0e\"\n\"\\xf7\\xf6\\xf7\\x6a\\x15\\xa1\\x07\\xf7\\x36\\xf7\\x75\\x05\\xb7\\xa2\\x9d\\xad\\x9b\\xae\\x0a\\xfb\\x0c\\x32\\xf7\\x0d\\x05\\xa3\\x95\\xb7\\x0a\\x77\\x4b\\x0a\"\n\"\\x95\\x84\\x94\\x89\\xa4\\x8a\\xf7\\x37\\xfb\\x75\\x18\\x75\\x46\\x07\\xf7\\x04\\x0a\\x95\\x94\\x88\\xa5\\x1b\\xd0\\x70\\x4e\\x06\\xeb\\x1d\\xa6\\xcf\\x06\\xad\"\n\"\\xa1\\x9b\\xa5\\x94\\x85\\x99\\x85\\x92\\x1f\\x94\\x83\\x7e\\x8e\\x74\\x1b\\x0e\\xf7\\x85\\x88\\x15\\x4e\\x06\\x67\\x76\\x7b\\x71\\xf4\\x0a\\xc8\\x81\\x89\\x06\"\n\"\\xe9\\x1d\\x9a\\x88\\xa2\\x1b\\xf7\\x0b\\xd0\\x0a\\x80\\x83\\x8c\\x6e\\x1b\\x89\\x95\\xd0\\x06\\xad\\xa7\\x1d\\x73\\x1b\\x47\\x91\\x06\\xf7\\x42\\xf7\\xd3\\x99\"\n\"\\x0a\\xfb\\x5d\\x18\\xfb\\x01\\xf7\\x5d\\x05\\xaf\\x8d\\xa0\\x9e\\xa9\\x31\\x0a\\x83\\x1d\\xf7\\x42\\xfb\\xd4\\x05\\x0e\\xf8\\xa8\\xf3\\x15\\xfb\\x36\\xf7\\x4c\"\n\"\\xf7\\x2d\\xf7\\x41\\x05\\xb0\\x8c\\xa1\\x9e\\xaa\\x22\\x1d\\x31\\x06\\x2e\\x1d\\x75\\x95\\x7e\\xf7\\x35\\x1d\\x7d\\x95\\x1e\\x93\\x80\\x80\\x8d\\x71\\x1b\\x30\"\n\"\\x06\\x2e\\x1d\\x7b\\x94\\x7b\\x99\\x82\\x1e\\x93\\x84\\x93\\x89\\xa0\\x8a\\xf7\\x2f\\xfb\\x41\\x18\\xfb\\x37\\xfb\\x4d\\x05\\x65\\x74\\x77\\x6c\\x68\\xa3\\x7a\"\n\"\\xba\\x1f\\xf7\\x02\\x06\\xba\\xa2\\x9c\\xae\\xa7\\x78\\x9e\\x6c\\x8e\\x1f\\xe9\\xf5\\xe8\\x22\\x05\\x6b\\x87\\x78\\x78\\x6f\\xf3\\x0a\\x55\\x06\\x24\\x0a\\xf7\"\n\"\\x32\\x07\\x0e\\xf8\\xa2\\xf2\\x15\\xfb\\x26\\xf7\\x0a\\xf7\\x13\\xf0\\x9b\\x8d\\x91\\x8c\\x92\\x8f\\x19\\x9b\\x94\\x95\\x9c\\x9d\\x1a\\x9c\\x83\\x9a\\x7c\\x95\"\n\"\\x1e\\x93\\x2f\\x1d\\x30\\x06\\x76\\x85\\x8a\\x88\\x81\\x1f\\x78\\x85\\x7d\\x76\\x76\\x1a\\x7a\\x92\\x7e\\x9b\\x7f\\x1e\\x55\\x60\\x55\\xb5\\x05\\x9a\\x97\\x93\"\n\"\\x9a\\x9c\\x1a\\x9b\\x68\\x0a\\x81\\x1f\\x78\\x85\\x7d\\x76\\x76\\x1a\\x6d\\x9d\\x7a\\xaf\\xf6\\x1d\\x71\\x97\\x1f\\xcd\\xf7\\x4d\\x1d\\xba\\x1e\\xf7\\x08\\xe4\"\n\"\\x0a\\xf8\\x8c\\xf3\\x15\\xf7\\xf8\\x07\\xc1\\x8e\\x8f\\x1d\\x4c\\x73\\x9a\\x1d\\x62\\x4f\\x64\\x7b\\xa8\\x0a\\xfb\\x09\\xc2\\x4e\\xf7\\x09\\x0a\\x23\\x55\\x07\"\n\"\\x4b\\x74\\x7d\\x65\\x65\\xa2\\x7e\\xcb\\x8a\\x1f\\xf7\\x1d\\x56\\x06\\x5f\\x9e\\x73\\xae\\xae\\x9e\\xa2\\xb8\\x1e\\xf7\\x31\\x07\\x0e\\xf8\\x82\\xf3\\x15\\xf7\"\n\"\\x6e\\xc2\\x0a\\x4c\\x07\\x6f\\x59\\x6b\\x81\\x62\\x1b\\x62\\x7c\\x95\\xa6\\x1f\\xcb\\x07\\xc6\\x8d\\x9e\\x97\\xb0\\x28\\x1d\\x3a\\x06\\x4d\\x73\\xdf\\x0a\\x35\"\n\"\\xc0\\x5d\\xef\\xbc\\xb7\\x95\\xa0\\xb4\\x1e\\x56\\x5e\\x07\\x4b\\x74\\x7d\\x65\\x65\\xa2\\x7d\\xcb\\x1f\\xf7\\x14\\xe4\\x0a\\xf7\\xe1\\xf7\\x48\\x15\\xa3\\x92\"\n\"\\x9a\\x92\\xa3\\x99\\x08\\x23\\x54\\x07\\x4b\\x74\\x7d\\x64\\x66\\xa2\\x7d\\xcb\\x1f\\xf7\\x2a\\xba\\x0a\\x4b\\x73\\x7d\\x66\\x68\\xa4\\x79\\xbb\\x1f\\x8f\\xfb\"\n\"\\x17\\x06\\x76\\x7c\\x84\\x87\\x68\\x79\\x08\\xbe\\x07\\xad\\x7b\\x9f\\x6f\\x81\\x7f\\x86\\x84\\x83\\x1e\\x80\\x82\\x88\\x83\\x72\\x1a\\x45\\x07\\x66\\x90\\x82\"\n\"\\x98\\x8a\\xc5\\x08\\xf7\\x04\\x07\\xc9\\x8c\\x9f\\x98\\xb0\\x28\\x1d\\x32\\x06\\x4b\\x74\\x7d\\x65\\x68\\x9f\\x7d\\xc0\\x89\\x1f\\xfb\\x08\\x07\\x8e\\xfb\\x0c\"\n\"\\xb9\\x57\\xf5\\x85\\x08\\x85\\x07\\x6a\\x9c\\x76\\xa6\\x94\\x9a\\x90\\x91\\x92\\x1e\\x94\\x93\\x8f\\x97\\xa2\\x1a\\x0e\\xf7\\xbf\\xf7\\x15\\x15\\xb0\\x91\\xa1\"\n\"\\x92\\xa7\\x9a\\x08\\x55\\x84\\x07\\x50\\x74\\x7c\\x66\\x66\\xa3\\x7c\\xc5\\x1f\\xed\\x8c\\x05\\xcb\\x8c\\xa2\\x98\\xb0\\x1a\\xad\\x75\\x9c\\x5b\\x8c\\x1e\\xf7\"\n\"\\x6f\\x07\\xbb\\x8c\\xa1\\x9c\\xae\\x1a\\xaf\\x73\\x99\\x4c\\x1e\\x40\\x06\\x4c\\x73\\x7d\\x67\\x68\\xa1\\x7a\\xbc\\x8a\\x1f\\x4b\\x07\\x67\\x77\\x76\\x83\\x6d\"\n\"\\x85\\x08\\x98\\x07\\xad\\x7d\\x9e\\x72\\x81\\x82\\x87\\x85\\x84\\x1e\\x7f\\x81\\x89\\x83\\x72\\x1a\\x82\\x07\\x82\\x90\\x88\\x94\\x8a\\x9b\\x08\\xf7\\x05\\x1d\"\n\"\\x8c\\x3c\\xb2\\x61\\xdc\\x81\\x08\\x72\\x07\\x6a\\x9a\\x77\\xa4\\xa5\\x98\\x9c\\xaf\\x1e\\x0e\\xf7\\x5b\\xf8\\x60\\x15\\xc1\\x06\\xcb\\xa2\\x99\\xb1\\xb1\\x74\"\n\"\\x99\\x4b\\x1f\\xfb\\x29\\x06\\x4b\\x74\\x7d\\x65\\x67\\xa0\\x7d\\xc0\\x89\\x1f\\xfb\\xf9\\x07\\x55\\x8a\\x77\\x7c\\x68\\x1a\\x65\\xa2\\x7d\\xcb\\x1e\\xdf\\x06\"\n\"\\xca\\xa3\\x99\\xb0\\xae\\x73\\x9d\\x5b\\x1f\\x87\\xf7\\x17\\x06\\xb4\\xc6\\xb3\\x9b\\xb5\\x1b\\xb7\\x98\\x79\\x50\\x1f\\xfb\\x04\\x07\\x4d\\x8a\\x76\\x7e\\x66\"\n\"\\x1a\\x64\\xa2\\x7e\\xcc\\x1e\\xe4\\x06\\xcb\\xa2\\x99\\xb1\\xae\\x76\\x9a\\x57\\x8c\\x1f\\xf7\\x08\\x07\\xf7\\x09\\x54\\xc8\\x20\\x58\\x5f\\x7f\\x6e\\x5a\\x1e\"\n\"\\x0e\\xf7\\x61\\xf8\\xaf\\x15\\xbe\\x7b\\xa1\\x65\\x65\\x7b\\x75\\x58\\x1e\\xfc\\x48\\x89\\x07\\x41\\x0a\\xbe\\xc2\\xa0\\x96\\x86\\x0a\\x5b\\x78\\x69\\x68\\x1e\"\n\"\\x0e\\x21\\x0a\\x0e\\xf8\\x20\\xf3\\x15\\xfb\\x21\\xfb\\x32\\x06\\x24\\x0a\\xc1\\xf7\\x1e\\x07\\xcb\\xa2\\x99\\xb1\\xb1\\x76\\x98\\x4c\\x8c\\x1f\\xf7\\xf8\\x07\"\n\"\\xc1\\x8e\\x8f\\x1d\\x4b\\x74\\x9a\\x1d\\x61\\x4e\\x65\\x7c\\xa8\\x0a\\xfb\\x0a\\xc2\\x4f\\xf6\\xbe\\xb7\\x97\\xa8\\xbc\\x1e\\x0e\\xf8\\x16\\xf2\\x15\\x5a\\x06\"\n\"\\x38\\x8a\\x05\\xfb\\x23\\x07\\x5f\\x9e\\x74\\xae\\xaf\\x9d\\xa2\\xb7\\x1e\\xb4\\xf7\\x14\\x07\\xcb\\xa2\\x99\\xb1\\xb0\\x76\\x98\\x4d\\x8c\\x1f\\xf7\\x6e\\x07\"\n\"\\xbb\\x8d\\xa1\\x9c\\xad\\x1a\\xb0\\x73\\x99\\x4c\\x1e\\x40\\x06\\x4b\\x74\\x7d\\x66\\x68\\xa1\\x7b\\xbc\\x89\\x1f\\x4c\\x07\\x6f\\x58\\x6b\\x81\\x63\\x1b\\x62\"\n\"\\x7c\\x95\\xa7\\x1f\\xca\\x07\\xc6\\x8e\\x9d\\x97\\xb0\\x1a\\xb1\\x74\\x99\\x4c\\x1e\\x3a\\x06\\x4c\\x74\\xdf\\x0a\\x34\\xc0\\x5d\\xee\\xbd\\xb6\\x95\\xa1\\xb5\"\n\"\\x1e\\x0e\\x9d\\xf7\\xb4\\x15\\x96\\x30\\x93\\x6e\\xa1\\x63\\x08\\x35\\xbc\\xea\\x54\\xec\\x1b\\xf7\\x30\\xf7\\x13\\xf7\\x18\\xf7\\x37\\xf7\\x38\\xfb\\x12\\xf7\"\n\"\\x18\\xfb\\x31\\xfb\\x02\\x26\\x47\\x22\\x5c\\x1f\\xf6\\x6f\\x05\\xc6\\xa9\\xc6\\xb1\\xc9\\x1b\\xbf\\xbe\\x70\\x5d\\xad\\x1f\\xa3\\x6a\\x95\\x6f\\x8f\\x57\\x08\"\n\"\\x7c\\x37\\x15\\x43\\x6a\\x51\\x61\\x46\\x1b\\x46\\x4d\\xb8\\xd0\\x6e\\x1f\\x0e\\x21\\x1d\\xfb\\x1e\\xf8\\x0e\\x48\\x1d\\x23\\x0a\\xfb\\x75\\xf8\\x7b\\x3b\\x1d\"\n\"\\xf7\\xc0\\xf8\\xd6\\x15\\xfb\\x30\\xfb\\x13\\xfb\\x19\\xfb\\x37\\xfb\\x37\\xf7\\x13\\xfb\\x18\\xf7\\x30\\xf7\\x2e\\xf7\\x15\\xf7\\x18\\xf7\\x33\\xe8\\x6b\\xd5\"\n\"\\x4c\\xc5\\x1f\\xbc\\x55\\x49\\xa5\\x47\\x1b\\xf7\\x3f\\xfb\\xe7\\x15\\x32\\x76\\x46\\x4f\\x3a\\x1b\\x3a\\x46\\xc7\\xe4\\x76\\x1f\\xdf\\x04\\xe3\\x9e\\xd1\\xca\"\n\"\\xdd\\x1b\\xdd\\xd1\\x4d\\x32\\x9e\\x1f\\xfb\\xea\\x06\\x0e\\x82\\x0a\\x30\\x1d\\x64\\xf9\\x4e\\x48\\x1d\\x35\\x1d\\xfb\\xa6\\xf8\\x2c\\x3b\\x1d\\xa7\\xf9\\x6c\"\n\"\\xf7\\x4f\\x1d\\x7a\\x94\\x7a\\xec\\x1d\\x0e\\xf8\\x3d\\x95\\x15\\x7f\\x9b\\x96\\x87\\x9c\\x1b\\xd2\\xba\\xe5\\xf7\\x1e\\xf7\\x19\\x5a\\xe5\\x43\\x39\\x61\\x33\"\n\"\\xfb\\x3f\\x1f\\xfb\\xd1\\x07\\x71\\x9c\\x79\\xa4\\xa3\\x9c\\x9d\\xa5\\x1e\\xf7\\xe6\\x04\\x9e\\x07\\xd0\\xa1\\xd3\\xa0\\xa1\\x9e\\x47\\x3f\\x2f\\x7b\\x51\\x71\"\n\"\\x75\\x7c\\xaf\\xc3\\x88\\x1e\\xfc\\x04\\xf7\\xc0\\x15\\xfb\\xd0\\x07\\x8a\\x67\\x81\\x6f\\x7c\\x86\\x08\\x7c\\x83\\x82\\x7c\\x7a\\x1a\\x89\\x07\\x8c\\x73\\x9e\"\n\"\\x7a\\xa5\\x8d\\x08\\xee\\x06\\xf7\\x06\\xca\\xec\\xf7\\x43\\xf7\\x06\\x6d\\xe1\\x55\\xb4\\x1f\\x6d\\xa2\\x73\\x93\\x5b\\x8c\\x8d\\x93\\x8c\\x8e\\x8e\\x8e\\x08\"\n\"\\x90\\x92\\x8d\\x91\\x93\\x1a\\x96\\x85\\x96\\x80\\x91\\x1e\\x89\\x8c\\x05\\x8f\\x85\\x83\\x8d\\x84\\x1b\\x71\\x71\\x6c\\x64\\x85\\x1f\\x86\\x06\\x6f\\x79\\x7b\"\n\"\\x73\\x74\\x9d\\x7b\\xa7\\x1f\\xe1\\x16\\xdb\\x8a\\xa6\\x57\\xfb\\x28\\x1a\\x2a\\x79\\x50\\x69\\x77\\x1e\\x83\\x7c\\x7a\\x88\\x61\\x1b\\x95\\x9d\\x94\\xb2\\xa9\"\n\"\\x1a\\x0e\\xf7\\x9f\\xef\\x15\\x86\\x8d\\x69\\x9a\\x80\\x91\\x7d\\x96\\x19\\x64\\xab\\x73\\xce\\xd6\\x1a\\xf7\\x0a\\xc3\\xcb\\xf3\\xf3\\xc3\\x4c\\xfb\\x0b\\x36\"\n\"\\x6e\\x46\\x5a\\x6d\\x1e\\x80\\x84\\x80\\x85\\x70\\x80\\x08\\x27\\xf7\\x5f\\x07\\xa5\\x94\\x8c\\x92\\x96\\x1f\\x9c\\x95\\x96\\x9e\\x9d\\x1a\\x9c\\x82\\x9c\\x7c\"\n\"\\x95\\x1e\\x94\\x7f\\x81\\x8d\\x70\\x1b\\x5e\\x06\\xc8\\xac\\xae\\xd5\\xeb\\x1a\\xd9\\x6e\\xd7\\x5d\\xb6\\x1e\\xb6\\x5d\\x3b\\xa5\\x34\\x1b\\x34\\x3b\\x71\\x60\"\n\"\\x5d\\x1f\\x5d\\x60\\x6e\\x3f\\x3d\\x1a\\x2b\\xae\\x41\\xc8\\x6a\\x1e\\x5e\\x06\\x72\\x82\\xf7\\x38\\x1d\\x83\\x97\\x95\\x89\\xa7\\x1b\\xf7\\x5f\\x06\\x0e\\x9a\"\n\"\\x0a\\x85\\x1d\\xe6\\x16\\xbe\\x06\\xf7\\x34\\xf8\\x19\\xf7\\x35\\xfc\\x19\\x05\\xbe\\x06\\xfb\\x42\\xf8\\x47\\x05\\x40\\x06\\x0e\\xe6\\xf8\\x46\\x15\\xf7\\x42\"\n\"\\xfc\\x46\\x05\\xd6\\x06\\xf7\\x42\\xf8\\x47\\x05\\x58\\x06\\xfb\\x35\\xfc\\x19\\xfb\\x34\\xf8\\x19\\x05\\x58\\x06\\x0e\\xf7\\xbd\\xf8\\x89\\x15\\xfb\\x1b\\xfb\"\n\"\\x05\\xfb\\x04\\xfb\\x1b\\xfb\\x22\\xf7\\x02\\xfb\\x04\\xf7\\x20\\xf7\\x1c\\xf7\\x03\\xf7\\x04\\xf7\\x1f\\xf7\\x1f\\xfb\\x03\\xf7\\x03\\xfb\\x1e\\x1f\\x70\\xfb\"\n\"\\xad\\x15\\xfb\\x36\\x07\\x35\\x94\\x3e\\xd6\\x87\\xd9\\x08\\xc2\\x04\\x91\\xde\\xd5\\xd5\\xe2\\x96\\x08\\xfb\\x3c\\x07\\xc2\\x54\\x15\\xf7\\x3b\\x06\\x88\\x42\"\n\"\\x3b\\x3d\\x37\\x80\\x08\\xf7\\x6d\\x04\\xf7\\x3c\\x07\\xdf\\x82\\xd7\\x3f\\x92\\x38\\x08\\x0e\\x9c\\x16\\xf8\\xcb\\xf8\\xcb\\xfc\\xcb\\x06\\xf8\\x92\\xfc\\x92\"\n\"\\x15\\xfc\\x59\\xf8\\x59\\xf8\\x59\\x06\\x0e\\xca\\xf7\\xe7\\x15\\xfb\\x2b\\x90\\x68\\xa6\\x5f\\x1e\\x47\\xb5\\xd8\\x62\\xe1\\x1b\\xbf\\xbb\\x9a\\xa6\\xb4\\x1f\"\n\"\\xbe\\xae\\xa8\\xb9\\x95\\xca\\x08\\x90\\xac\\x8c\\xa1\\xed\\x1a\\xf7\\x51\\x07\\x9f\\x80\\x99\\x7b\\x7b\\x82\\x7f\\x75\\x1e\\xfb\\x54\\x07\\xfb\\x10\\x86\\x62\"\n\"\\x78\\x6a\\x1e\\x57\\x6d\\x4a\\x68\\x49\\x1b\\x63\\x62\\x98\\xa2\\x6a\\x1f\\x62\\xa8\\x78\\xac\\x85\\xbb\\x87\\xa9\\x8b\\x8b\\x8a\\xf7\\x01\\x08\\xf7\\x54\\x07\"\n\"\\xa0\\x81\\x98\\x7b\\x7a\\x82\\x7f\\x75\\x1e\\x0e\\xf7\\xe1\\x16\\xf7\\x67\\xf8\\xeb\\x05\\x55\\x06\\x4c\\xfb\\x37\\x05\\xfb\\x97\\x06\\x4d\\xf7\\x37\\x05\\x58\"\n\"\\x06\\xf7\\x5f\\xfc\\xeb\\x05\\xf7\\x2a\\xf8\\x15\\x15\\xfb\\x03\\xfb\\xe2\\x05\\x84\\x06\\x24\\xf7\\xe2\\x05\\x0e\\xbb\\x0a\\x95\\x98\\x88\\xa4\\x1b\\xaa\\xfb\"\n\"\\x3c\\x06\\x58\\x58\\x74\\x7f\\x5a\\x1b\\x51\\x71\\x9f\\xb8\\x1f\\xf7\\xa1\\xfb\\x0c\\x07\\x72\\x81\\x89\\x86\\x82\\x32\\x0a\\x84\\x95\\x96\\x88\\xa6\\x1b\\x97\"\n\"\\xfb\\x3e\\x06\\x52\\x9f\\x61\\xb3\\x6e\\x1e\\x73\\xad\\xb5\\x7f\\xb9\\x1b\\xc1\\xab\\x98\\xb3\\xba\\x1f\\x62\\x9b\\x07\\x5b\\x1d\\xa8\\xb8\\xba\\xc0\\xa8\\x1f\"\n\"\\xaa\\x9c\\x93\\x96\\xa2\\x4c\\x0a\\x81\\x91\\x83\\x8d\\x76\\x8c\\x08\\x0e\\x3f\\x0a\\x0e\\x3f\\x0a\\xfb\\xb9\\xf8\\x2e\\x59\\x0a\\x3f\\x0a\\x23\\xf8\\x3d\\x6a\"\n\"\\x0a\\x78\\x7b\\x7f\\x83\\x7a\\x81\\x1e\\x43\\x6b\\x0a\\x9c\\x7c\\x9e\\x9a\\x97\\x93\\x9c\\x95\\x1e\\xf7\\x0e\\xdf\\x15\\x6b\\x72\\x73\\x6d\\x6c\\xa4\\x73\\xab\"\n\"\\xaa\\xa5\\xa3\\xa9\\xaa\\x72\\xa3\\x6b\\x1f\\xfb\\xaa\\x4a\\x1d\\x3f\\x0a\\x36\\xf8\\x0e\\xf7\\x20\\x1d\\x7c\\x7f\\x85\\x81\\x7e\\x1a\\x79\\x9c\\x7b\\x9e\\x94\"\n\"\\x95\\x8f\\x95\\x97\\x1e\\x0e\\x2c\\x1d\\xfb\\x6a\\xf8\\xeb\\xe4\\x1d\\x2c\\x1d\\x4e\\xc5\\x1d\\x3e\\x0a\\xf7\\x6f\\xf8\\xe8\\x27\\x0a\\xf7\\x44\\x1d\\xae\\x8f\"\n\"\\x9d\\x9d\\xa8\\x22\\x1d\\x2e\\x8e\\x1d\\x82\\x1e\\x83\\x96\\x95\\x89\\xa6\\xd4\\x0a\\xb3\\xa1\\x9d\\xac\\x9c\\x83\\x9a\\x7d\\x95\\x1f\\x93\\x81\\x80\\x8d\\x70\"\n\"\\x1b\\x2f\\xf7\\x11\\x1d\\x6d\\x9e\\x79\\xaf\\x88\\x1e\\xe0\\xfb\\xd6\\x05\\xef\\x06\\xcc\\xf8\\xd6\\x2e\\x0a\\x3e\\x0a\\x63\\xf9\\x0c\\x28\\x0a\\x3e\\x0a\\x63\"\n\"\\xf9\\x24\\x5a\\x0a\\xf8\\x44\\xf7\\xe1\\x15\\x22\\x8e\\x5f\\xa3\\xc1\\x1a\\xa3\\x99\\xa4\\xa0\\x9a\\x1e\\x99\\x94\\xa1\\x91\\xa8\\x8e\\x08\\xcb\\x8f\\xa1\\x99\"\n\"\\xb0\\x1a\\xad\\x72\\x9d\\x5e\\x1e\\xfb\\x45\\x06\\x5e\\x71\\x79\\x6a\\x6b\\xa1\\x7b\\xbc\\x87\\x1f\\x6a\\x72\\x7d\\x71\\x63\\x1a\\x5c\\x9f\\x62\\xb0\\x6a\\x1e\"\n\"\\x4c\\x6a\\x6d\\x5b\\x44\\x1a\\x55\\xa3\\x5b\\xb6\\x6e\\x1e\\xa2\\x7b\\xad\\x80\\xcd\\x7c\\x08\\xc3\\x7e\\x93\\x86\\x78\\x1a\\x77\\x7f\\x84\\x69\\x88\\x1e\\x5a\"\n\"\\x87\\x76\\x7b\\x6a\\x1a\\x69\\xa2\\x7a\\xb9\\xe9\\xc8\\xc0\\xdc\\xb7\\x78\\xb0\\x68\\xa3\\x1e\\x77\\x98\\x68\\x97\\x5c\\x95\\x08\\x3d\\x9a\\x77\\x9a\\xb4\\x1a\"\n\"\\xc7\\xcb\\xab\\xf7\\x0d\\x1e\\x0e\\xb6\\x1d\\xf7\\x7e\\xf7\\x94\\x2e\\x0a\\x59\\x1d\\xf7\\x15\\xf7\\xe2\\x5a\\x0a\\x40\\x0a\\xb2\\xf8\\x81\\x27\\x0a\\x40\\x0a\"\n\"\\xfb\\x08\\xf8\\xa5\\x36\\x0a\\x0e\\xf7\\xd8\\xf8\\x87\\x15\\xfb\\x0f\\xfb\\x11\\x57\\x29\\x23\\x1a\\x51\\xa6\\x52\\xb5\\x69\\x1e\\xa5\\x77\\xab\\x7d\\xcb\\x79\"\n\"\\x08\\xc6\\x7a\\x8f\\x89\\x77\\x1a\\x75\\x7b\\x7f\\x6b\\x89\\x1e\\x59\\x87\\x78\\x7c\\x69\\x1a\\x69\\xa2\\x7a\\xb7\\xe7\\xcd\\xc6\\xdd\\xd0\\x65\\xb3\\x32\\xa4\"\n\"\\x1e\\x56\\x99\\x74\\x93\\x7e\\x93\\x08\\x73\\x9a\\x7d\\xa8\\xab\\x1a\\xac\\x93\\xaa\\x99\\xa6\\x1e\\xad\\xcd\\xbf\\xcc\\xce\\xc7\\x9a\\x99\\x92\\x91\\xa4\\xa0\"\n\"\\x91\\x91\\x18\\xf0\\xfb\\x64\\x07\\x3a\\x0a\\x0e\\x7e\\x98\\xf8\\xed\\x9b\\x06\\xf2\\x0a\\xf7\\x00\\x0b\\xaf\\x9c\\x90\\x8f\\x8f\\x93\\x8f\\x8e\\x8e\\x97\\x92\"\n\"\\x92\\x0c\\x0c\\xba\\x8f\\x8e\\x8f\\x90\\x8e\\x98\\x93\\xa0\\x90\\x90\\xaa\\x0c\\x0d\\xf8\\xec\\x14\\xb7\\x13\\x00\\xe9\\x02\\x00\\x01\\x00\\x07\\x00\\x10\\x00\"\n\"\\x20\\x00\\x4b\\x00\\x55\\x00\\x61\\x00\\x66\\x00\\x6d\\x00\\x7c\\x00\\x89\\x00\\x90\\x00\\x97\\x00\\xa0\\x00\\xa5\\x00\\xb4\\x00\\xb8\\x00\\xc5\\x00\\xce\\x00\"\n\"\\xd7\\x00\\xee\\x01\\x1f\\x01\\x31\\x01\\x3c\\x01\\x44\\x01\\x56\\x01\\x5a\\x01\\x64\\x01\\x6c\\x01\\xa3\\x01\\xaa\\x01\\xe4\\x02\\x2a\\x02\\x61\\x02\\x82\\x02\"\n\"\\x86\\x02\\x92\\x02\\xb0\\x02\\xb6\\x02\\xbd\\x02\\xc3\\x02\\xcc\\x02\\xd3\\x02\\xde\\x02\\xe6\\x02\\xee\\x02\\xf4\\x02\\xfb\\x03\\x02\\x03\\x05\\x03\\x31\\x03\"\n\"\\x41\\x03\\x79\\x03\\x7c\\x03\\x9d\\x03\\xe7\\x03\\xf2\\x04\\x16\\x04\\x22\\x04\\x37\\x04\\x3f\\x04\\x50\\x04\\x55\\x04\\x59\\x04\\x65\\x04\\x77\\x04\\x7f\\x04\"\n\"\\x8d\\x04\\x95\\x04\\x9f\\x04\\xa4\\x04\\xab\\x04\\xb7\\x04\\xc6\\x04\\xd1\\x04\\xdc\\x04\\xe7\\x04\\xf8\\x04\\xfe\\x05\\x07\\x05\\x0d\\x05\\x14\\x05\\x1b\\x05\"\n\"\\x20\\x05\\x28\\x05\\x30\\x05\\xa9\\x06\\x6c\\x06\\xda\\x07\\x12\\x07\\x6c\\x07\\xb2\\x07\\xe4\\x07\\xeb\\x08\\x26\\x08\\xa4\\x08\\xe4\\x09\\x5f\\x09\\xa0\\x09\"\n\"\\xd1\\x0a\\x32\\x0a\\x7f\\x0a\\x9a\\x0a\\xc1\\x0a\\xe4\\x0a\\xe8\\x0a\\xec\\x0a\\xfd\\x0b\\x33\\x0b\\x47\\x0b\\x53\\x0b\\x92\\x0b\\xb4\\x0b\\xcf\\x0b\\xe7\\x0b\"\n\"\\xee\\x0b\\xfb\\x0b\\xfe\\x0c\\x1f\\x0c\\x32\\x0c\\x39\\x0c\\x4b\\x0c\\x58\\x0c\\x83\\x0c\\xad\\x0c\\xc8\\x0c\\xe2\\x0c\\xe8\\x0c\\xed\\x0d\\x0b\\x0d\\x0e\\x0d\"\n\"\\x29\\x0d\\x31\\x0d\\x4c\\x0d\\x6b\\x0d\\x71\\x0d\\x82\\x0d\\xa3\\x0d\\xb3\\x0d\\xbc\\x0d\\xcf\\x0d\\xea\\x0d\\xfb\\x0e\\x0f\\x0e\\x2c\\x0e\\x38\\x0e\\x44\\x0e\"\n\"\\x51\\x0e\\x5e\\x0e\\x7d\\x0e\\x9b\\x0e\\xa4\\x0e\\xb8\\x0e\\xc8\\x0e\\xcd\\x0e\\xe0\\x0e\\xf1\\x0f\\x0d\\x0f\\x21\\x0f\\x2c\\x0f\\x31\\x0f\\x3f\\x0f\\x59\\x0f\"\n\"\\x72\\x0f\\x8b\\x0f\\xa4\\x0f\\xb2\\x0f\\xbe\\x0f\\xd6\\x0f\\xe1\\x0f\\xf8\\x0f\\xfd\\x10\\x0e\\x10\\x25\\x10\\x30\\x10\\x36\\x10\\x4c\\x10\\x57\\x10\\x64\\x10\"\n\"\\x79\\x10\\x85\\x10\\x99\\x10\\xa8\\x10\\xb7\\x10\\xc3\\x10\\xc7\\x10\\xd2\\x10\\xe5\\x10\\xf2\\x10\\xf6\\x11\\x08\\x11\\x13\\x11\\x1e\\x11\\x23\\x11\\x34\\x11\"\n\"\\x3f\\x11\\x50\\x11\\x58\\x11\\x5f\\x11\\x6f\\x11\\x76\\x11\\x7f\\x11\\x86\\x11\\x94\\x11\\x9a\\x11\\x9f\\x11\\xae\\x11\\xbd\\x11\\xcc\\x11\\xd6\\x11\\xe4\\x11\"\n\"\\xf2\\x11\\xfb\\x12\\x08\\x12\\x15\\x12\\x22\\x12\\x2f\\x12\\x3b\\x12\\x47\\x12\\x53\\x12\\x5f\\x12\\x69\\x12\\x71\\x12\\x79\\x12\\x81\\x12\\x89\\x12\\x94\\x12\"\n\"\\x9f\\x12\\xaa\\x12\\xb5\\x12\\xc0\\x12\\xcb\\x12\\xd6\\x12\\xdf\\x80\\x82\\x8d\\x6f\\x1b\\x0b\\x85\\x0a\\xf7\\xc2\\x29\\x0a\\x2a\\x06\\x0b\\x81\\x0a\\xfb\\x0d\"\n\"\\xf0\\x2f\\xf7\\x18\\xf7\\x18\\xf0\\xe7\\xf7\\x0d\\x1e\\x0b\\x8d\\x1d\\x42\\x7f\\x7b\\x5a\\x1e\\x75\\x83\\x80\\x7c\\x75\\x1a\\x6e\\xb5\\x0a\\x46\\x72\\x5a\\x5c\"\n\"\\x1f\\x72\\x71\\x7c\\x68\\x6c\\x1a\\x42\\xde\\x50\\xf2\\xc2\\xc5\\x97\\xa1\\xba\\x1e\\x8c\\xf7\\x08\\x44\\x0a\\x0b\\x5f\\x9e\\x74\\xae\\xae\\x9e\\xa2\\xb7\\x1e\"\n\"\\x0b\\x86\\x1d\\xf7\\xec\\x06\\xb9\\xa3\\x9d\\xad\\x91\\x1d\\x0b\\xb9\\x0a\\x9a\\xb0\\x0a\\xac\\x0a\\x8f\\x97\\x99\\x1e\\x0e\\x36\\x0a\\xf7\\x64\\x16\\xa0\\x1d\"\n\"\\xa7\\xab\\xae\\x6f\\xa6\\x67\\x1f\\x0e\\x06\\xb9\\xa3\\x9c\\xae\\x9b\\x2a\\x1d\\x81\\x8d\\x70\\x1b\\x0b\\x1a\\x69\\xa3\\x79\\xb9\\x1e\\x0b\\xf7\\xf6\\xf7\\x80\"\n\"\\x7b\\x0a\\x0b\\x07\\x68\\x87\\x7a\\x7a\\x6d\\x2a\\x0a\\x0b\\x69\\xa3\\x79\\xb9\\x0b\\xe6\\x0a\\x9a\\x88\\x8e\\x75\\x9d\\x1f\\xf7\\x2d\\x1d\\xa0\\x95\\x6f\\x0a\"\n\"\\x07\\x24\\x0a\\x0b\\x07\\xae\\x8f\\x9c\\x9c\\xa9\\x1a\\xad\\x73\\x9d\\x5d\\x1e\\x0b\\x1a\\x9c\\x83\\x9a\\x7d\\x95\\x1e\\x93\\x0b\\x73\\x1d\\x7a\\x93\\x7c\\x99\"\n\"\\x81\\x1e\\x0b\\xf7\\x45\\xf8\\x03\\x15\\xf7\\x91\\xfc\\x03\\x05\\xf4\\xf8\\x61\\x06\\xce\\x1d\\x94\\x7b\\x98\\x9c\\x0a\\x06\\x0b\\xf7\\xf6\\xf8\\xef\\x15\\xfb\"\n\"\\x4a\\x06\\x71\\x82\\x89\\x86\\x81\\xf7\\x06\\x0a\\x7a\\x93\\x7c\\x9a\\x81\\x1e\\x83\\x95\\x97\\x89\\xa5\\x1b\\xd5\\xfc\\x20\\xfb\\x0a\\x06\\x71\\x20\\x1d\\x69\"\n\"\\xa3\\x79\\xb9\\x1e\\xf7\\xec\\x2b\\x1d\\x91\\x1d\\x0b\\x15\\xf7\\x04\\x0a\\x94\\x94\\x88\\xa6\\x1b\\xf7\\x88\\x06\\xae\\xa7\\x1d\\x73\\x1b\\x0e\\x15\\xa0\\x1d\"\n\"\\xa7\\xab\\xae\\x6f\\xa6\\x67\\x1f\\x0b\\x1f\\x9c\\x95\\x96\\x9d\\xee\\x0a\\x0b\\x15\\xa8\\x7e\\x9b\\x73\\x73\\x7e\\x7c\\x6d\\x73\\x0a\\xa3\\xa3\\x98\\x9b\\xa8\"\n\"\\x1e\\x0b\\x06\\x3a\\x0a\\x0b\\x5d\\x73\\x79\\x69\\x69\\xa3\\x79\\xb9\\x1f\\x0b\\x1f\\x7b\\x82\\x81\\x79\\x7a\\x1a\\x0b\\xf7\\x5a\\xf7\\x68\\x15\\xe7\\x06\\xb3\"\n\"\\x7d\\xe2\\x28\\xbf\\x2e\\x8e\\x85\\x18\\xdc\\xec\\x0a\\x82\\x9c\\x7e\\x94\\x1e\\x71\\x1d\\x80\\x06\\x65\\xc5\\x63\\xba\\x60\\xb0\\xc3\\x1d\\x06\\xf7\\x67\\x04\"\n\"\\xf7\\x26\\xf7\\x00\\x07\\xc8\\xb8\\x6f\\x64\\x5d\\x4f\\x6a\\x39\\x1f\\x0b\\x6c\\x0a\\x65\\x5a\\x55\\x0a\\x0b\\xf7\\x44\\x1d\\xad\\x8f\\x9e\\x9d\\xa8\\x22\\x1d\"\n\"\\x2e\\x8e\\x1d\\x81\\x1e\\x84\\x96\\x96\\x89\\xa5\\xd4\\x0a\\x9f\\x93\\x8d\\x90\\x94\\x1f\\x9a\\x94\\x95\\x9d\\x9c\\x1a\\x9c\\x68\\x0a\\x82\\x1f\\x77\\x85\\x7d\"\n\"\\x76\\x76\\x1a\\x6d\\x9e\\x79\\xaf\\x88\\x1e\\xe0\\xfb\\xd6\\x05\\xef\\x06\\x0b\\xf8\\x7f\\xf7\\xd5\\x15\\x8d\\x27\\x1d\\xfb\\x04\\x06\\x5c\\x73\\x79\\x68\\x69\"\n\"\\xa0\\x7c\\xbf\\x89\\x1f\\xfb\\x19\\x07\\x45\\x74\\x6e\\x52\\x72\\x76\\x91\\x96\\x7c\\x1e\\x7b\\x98\\x83\\xa6\\xb5\\x1a\\xf7\\x81\\xfb\\x02\\x07\\xf7\\x0f\\x0a\"\n\"\\xfb\\x1a\\x07\\xfb\\x16\\xcf\\x43\\xf7\\x0e\\xc4\\xba\\x9b\\xab\\xad\\x1e\\xae\\xac\\x9d\\xbe\\xd1\\x1a\\x0b\\xf7\\x92\\xf2\\x15\\xf7\\x94\\xf7\\x83\\x05\\xde\"\n\"\\xfc\\x35\\x20\\x07\\x74\\x8d\\x80\\xd9\\x0a\\x94\\xa6\\x1a\\x8f\\xf7\\x1a\\x07\\xfb\\x92\\xfb\\x82\\x05\\x37\\xf8\\x4e\\xe3\\x07\\xa4\\x8a\\x93\\x84\\x94\\x1e\"\n\"\\x9b\\x82\\x79\\x94\\x78\\x1b\\x6c\\x78\\x79\\x69\\x88\\x1f\\x0b\\xe9\\x1d\\x99\\x88\\xa3\\x1b\\xf7\\x04\\x06\\xa1\\x99\\x32\\x1d\\x9c\\x9d\\x1a\\x9b\\x83\\x9a\"\n\"\\x7c\\x96\\x1e\\x93\\x81\\x81\\x8c\\x6f\\x1b\\x89\\xf7\\x3d\\x06\\x0b\\xf8\\xee\\x80\\x1d\\x15\\x6b\\x72\\x73\\x6d\\x6c\\xa4\\x73\\xab\\xf7\\x00\\x1d\\x15\\x6c\"\n\"\\x55\\x55\\x7b\\x55\\x1b\\x64\\x6b\\x9a\\x9d\\x99\\x97\\x9a\\x9f\\x98\\x1f\\x9c\\xa6\\xa7\\x92\\xb3\\x1b\\xac\\xa9\\x88\\x84\\xb6\\x1f\\x0b\\x07\\xa3\\x96\\x38\"\n\"\\x1d\\x0b\\x65\\x0a\\xf7\\x69\\x27\\x1d\\x0b\\x3e\\x1d\\x95\\xa5\\x1a\\x0b\\x3b\\x0a\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x0b\\x83\\x34\\x1d\\x7b\\x79\\x1a\\x0b\\x06\"\n\"\\x5e\\x9e\\x74\\xae\\xae\\x9e\\xa2\\xb8\\x1e\\x0b\\x1a\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x0b\\x1a\\x9b\\x83\\x9b\\x7d\\x95\\x1e\\x0b\\x84\\x8d\\x75\\x8c\\x08\\x0b\"\n\"\\xbe\\x72\\xa8\\x59\\x96\\x1f\\x0e\\x85\\x81\\x1f\\x7b\\x82\\x81\\x0b\\xb1\\x1d\\x0e\\xf7\\x5a\\xf7\\x7c\\x15\\xd8\\x88\\x06\\x47\\x1d\\x9b\\x93\\x98\\x96\\x72\"\n\"\\x1d\\xf7\\x27\\xfc\\x59\\x07\\x6b\\x1d\\x7a\\x7a\\x92\\x1d\\x7a\\x7a\\x2a\\x0a\\xf8\\x6f\\xf7\\x29\\x06\\xa4\\x89\\x94\\xf7\\x0c\\x1d\\x07\\x0b\\x89\\x06\\x41\"\n\"\\x0a\\xbf\\xc3\\x9f\\x95\\x86\\x0a\\x5c\\x78\\x69\\x67\\x1e\\x0b\\xa8\\xf7\\x85\\x15\\xfb\\x27\\xf7\\x12\\x20\\xf7\\x40\\xd4\\xd0\\x9d\\xa9\\xb7\\x1e\\xaf\\xa4\"\n\"\\x9e\\xa4\\xa2\\x64\\x1d\\x81\\x85\\x08\\x7d\\x71\\x65\\x83\\x5e\\x1b\\xfb\\x0a\\x40\\xdd\\x0a\\x95\\x80\\x8f\\x75\\x08\\x64\\x92\\x9a\\x7c\\xa5\\x0a\\x53\\x1b\"\n\"\\xfb\\x31\\x74\\x1d\\x0b\\x7c\\x1d\\x0e\\xa2\\x1d\\x50\\xa0\\x58\\xb4\\x64\\x1f\\x5c\\xbd\\xca\\x77\\xed\\x1b\\xd5\\xcb\\x96\\x9f\\xb4\\x1f\\xb7\\xa0\\xa2\\xa5\"\n\"\\xa6\\x1a\\xa7\\x73\\xa3\\x6d\\x90\\x0a\\x0b\\xcb\\xf2\\x15\\x5f\\xf7\\x0c\\x0a\\xf0\\x06\\xf7\\x87\\xf8\\x02\\x05\\xfb\\x9a\\x78\\x07\\x3a\\x0a\\xf7\\x15\\x06\"\n\"\\xb9\\xa3\\x9d\\xae\\xad\\x76\\x9a\\x58\\x8d\\x1f\\xf7\\xf8\\x96\\x07\\x4f\\x1d\\xfb\\x09\\x06\\xfb\\x87\\xfc\\x00\\x05\\xf7\\x98\\xaa\\x07\\xba\\xa3\\x9d\\xad\"\n\"\\xad\\x72\\x9d\\x5d\\x1f\\xfb\\x15\\x06\\x5c\\x73\\x79\\x6a\\x69\\x9f\\x7a\\xb4\\x8a\\x1f\\x0b\\x6b\\x1d\\x7b\\x79\\x92\\x1d\\x7b\\x79\\x2a\\x0a\\x0b\\x15\\x73\"\n\"\\x7c\\x7b\\x73\\x3f\\xe0\\x47\\xe9\\xe9\\xe0\\x6f\\x1d\\x82\\x6a\\x84\\x1f\\x61\\x81\\x63\\x70\\x56\\x1b\\x56\\x62\\xa6\\xb5\\x82\\x1f\\xab\\x84\\x82\\x95\\x76\"\n\"\\x1b\\x0e\\x15\\x6b\\x72\\x73\\x6d\\x6c\\xa5\\x73\\xaa\\xf7\\x00\\x1d\\x98\\x1d\\x21\\x05\\x7f\\x99\\x95\\x87\\x95\\x1b\\xa1\\x9e\\x9d\\x9f\\x98\\x84\\x96\\x7a\"\n\"\\x99\\x1f\\x0e\\x06\\x71\\x20\\x1d\\x2d\\x0a\\x1e\\x0b\\x5f\\x0a\\xfb\\x6e\\x07\\x58\\x8a\\x76\\x7b\\x69\\x1a\\x68\\xa3\\x79\\xb9\\x1e\\x0b\\x71\\x83\\xca\\x0a\"\n\"\\x0b\\x06\\xaa\\x0a\\x0b\\x06\\x5d\\x73\\x79\\x69\\x6d\\x9c\\x7a\\xae\\x87\\x1f\\x0b\\xa7\\xa4\\x72\\x6e\\x71\\x76\\x7b\\x6b\\x6b\\x76\\x9c\\xa3\\xa9\\xa3\\xa4\"\n\"\\xa8\\x1f\\x0b\\x77\\x1d\\x7d\\x95\\x1e\\x93\\x80\\x0b\\x88\\x96\\x1b\\xa1\\x9e\\x9d\\xa0\\x98\\x85\\x95\\x78\\x9a\\x1f\\x0e\\x51\\x1d\\x7e\\x84\\x7f\\x7e\\x1a\"\n\"\\x0b\\x40\\x1d\\x92\\x80\\x9c\\x7e\\x1f\\xf7\\x19\\x0b\\x5d\\x72\\x75\\x1d\\x0b\\x8a\\x92\\x84\\x95\\x74\\x0a\\x0b\\xa3\\x9c\\xae\\x9c\\x83\\x9a\\x7d\\x95\\x1f\"\n\"\\x93\\x80\\x0b\\x83\\x9a\\x7d\\x95\\x1e\\x93\\x2f\\x1d\\x2f\\x06\\x77\\x84\\x8a\\x88\\x0b\\x06\\xa2\\x97\\x96\\x9f\\x9e\\x7f\\x96\\x74\\x1f\\x0b\\x15\\x92\\x97\"\n\"\\x8e\\x93\\x93\\x1a\\x9d\\x7b\\x9b\\x0b\\xfb\\x06\\x05\\x84\\x81\\x88\\x82\\x83\\x1a\\x78\\x0b\\xf8\\xb4\\xf8\\x06\\x15\\xb9\\x7b\\xa0\\x67\\x75\\x80\\x83\\x78\"\n\"\\x84\\x1e\\x9d\\x0b\\xf7\\x06\\x0a\\x7b\\x93\\x0b\\xa2\\x99\\xb0\\xae\\x73\\x9d\\x5c\\x1f\\x0b\\x93\\x8e\\x95\\x97\\x1e\\x0e\\x1a\\x69\\xa3\\x79\\xba\\x1e\\x0b\"\n\"\\x74\\x8d\\x80\\x91\\x82\\x1e\\x0b\\x06\\xf7\\x0f\\x0a\\x0b\\x1e\\xfb\\x18\\x07\\x6e\\x98\\x7b\\x0b\\x1e\\x9b\\x81\\x7a\\x94\\x78\\x1b\\x0b\\xbd\\xf2\\x15\\x87\"\n\"\\x6d\\x1d\\x7b\\x79\\x1a\\x68\\xa3\\x7a\\xb9\\x1e\\xea\\x06\\xb1\\xa2\\x9f\\xad\\xa5\\x7d\\x9c\\x71\\x90\\x1f\\x9a\\xbc\\x05\\xe1\\x5b\\x87\\x06\\x6c\\x74\\x75\"\n\"\\x70\\x6a\\xa3\\x76\\xaf\\x1f\\xf7\\xf5\\xf7\\x0d\\xf7\\x09\\x1d\\x79\\xfb\\x1f\\xf7\\x15\\x96\\x07\\x6a\\x8d\\xa0\\x77\\xaa\\x3e\\x1d\\x94\\xa6\\x1a\\xd5\\x07\"\n\"\\xa5\\x8a\\x92\\x84\\x94\\x74\\x0a\\x7a\\x7b\\x83\\x7e\\x80\\x1f\\x85\\x82\\x89\\x86\\x89\\x79\\x08\\x80\\xf7\\x13\\xf7\\x0a\\x51\\x06\\x8b\\x1d\\x93\\xa6\\x1a\"\n\"\\xf7\\x35\\xfc\\x4f\\x07\\xf7\\x0e\\x1d\\x93\\x06\\xf0\\xfb\\x62\\x15\\x55\\x06\\xc1\\xf7\\x41\\x05\\x0b\\xf8\\xfb\\xf7\\x38\\x15\\xbb\\x07\\xcc\\x7a\\xc2\\x6b\"\n\"\\xb1\\x1e\\xb6\\x67\\x5d\\xa3\\x5a\\x1b\\x60\\x6b\\x7c\\x66\\x66\\x1f\\xaf\\x6a\\x66\\x9b\\x5d\\x1b\\x72\\x51\\x80\\x7f\\x65\\x1f\\x6e\\x82\\x7c\\x7a\\x72\\x1a\"\n\"\\x6e\\xa2\\x73\\xa8\\x92\\x93\\x8c\\x8e\\x94\\x1e\\x9d\\xcc\\x92\\x8d\\x9c\\x1b\\xa5\\x9d\\x79\\x72\\x1f\\x7c\\x07\\x8e\\x74\\x79\\x8d\\x7c\\x1b\\x5b\\x4c\\x79\"\n\"\\x73\\x62\\x1f\\x5f\\x70\\x7b\\x71\\x5e\\x1a\\x2c\\xd1\\x4d\\xf5\\xb6\\xaa\\x94\\xa1\\xae\\x1e\\x80\\x96\\x96\\x86\\x9a\\x1b\\x9b\\x97\\x90\\x95\\x95\\x1f\\x75\"\n\"\\xae\\xa3\\x84\\xb4\\x1b\\xbb\\xc9\\x9a\\xa0\\xaf\\x1f\\x9c\\x96\\x95\\x9b\\x9e\\x1a\\xaa\\x76\\xa2\\x6e\\x7d\\x7c\\x87\\x7e\\x6e\\x1e\\x7f\\x6f\\x7a\\x87\\x75\"\n\"\\x1b\\x65\\x75\\xa1\\xc1\\x7b\\x1f\\xfb\\x06\\x69\\x15\\x6a\\x62\\x75\\x81\\x6e\\x1b\\x62\\x71\\x9f\\xaa\\x96\\x8f\\x93\\x93\\x91\\x1f\\x9a\\x9e\\xb2\\x95\\xb0\"\n\"\\x1b\\x9c\\x98\\x89\\x86\\xa1\\x1f\\xf7\\x08\\xd4\\x15\\xc0\\x94\\xa1\\xa6\\xad\\x1b\\xae\\xa1\\x70\\x56\\x93\\x1f\\x0b\\xf8\\xca\\xf8\\x75\\x15\\xf7\\x51\\x1d\"\n\"\\x65\\x77\\x59\\x69\\x1f\\x44\\x24\\x73\\x69\\x85\\x87\\xf7\\x62\\x1d\\xb2\\x1a\\xb1\\x75\\x98\\x4b\\xf7\\x02\\x1d\\xca\\x6e\\x0a\\x86\\x06\\x86\\xf7\\x24\\xa2\"\n\"\\x06\\xa9\\x8d\\xad\\x6d\\xab\\x53\\xc5\\xfb\\x00\\x18\\x98\\x72\\x99\\x76\\x90\\x89\\x08\\x94\\x1d\\x99\\x4a\\x1f\\x7c\\x06\\x53\\xf4\\x72\\xb8\\x73\\xaa\\x6c\"\n\"\\xa4\\x19\\x8f\\x92\\x92\\x94\\x98\\x9e\\x9f\\xa7\\x19\\x8e\\x91\\x8d\\x8d\\x8e\\x8f\\x90\\x93\\x8f\\x91\\x8d\\x8e\\xa3\\xaf\\x18\\x8c\\x8d\\x90\\xf7\\x68\\x1d\"\n\"\\xb0\\x99\\xa1\\xc6\\x1f\\x0b\\xf7\\x5a\\xf7\\x7c\\x15\\xd8\\x88\\x06\\x47\\x1d\\x70\\x1d\\x94\\xa6\\x1a\\xf7\\x27\\xfc\\x59\\x07\\x57\\x0a\\xf8\\x6f\\xf7\\x29\"\n\"\\x06\\xa3\\x89\\x95\\x85\\x94\\x1e\\x9b\\x81\\x79\\x94\\x79\\x1b\\x79\\x7c\\x83\\x7e\\x80\\x1f\\x83\\x80\\x89\\x82\\x70\\x1a\\x5d\\xfb\\x8c\\x07\\x0e\\xaf\\x0a\"\n\"\\x7a\\x93\\x7c\\x99\\x81\\x1e\\x84\\x95\\x99\\x88\\xa3\\x1b\\xf7\\x16\\x2b\\x1d\\x9c\\x83\\x9a\\x7d\\x95\\x1f\\x81\\x92\\x4d\\x0a\\xf7\\xf9\\x07\\xad\\x90\\x9d\"\n\"\\x9c\\xa9\\x33\\x1d\\x80\\x81\\x8d\\x70\\x1b\\xfb\\x04\\x06\\xfb\\x19\\xfb\\xaa\\xfb\\x1c\\xf7\\xaa\\x05\\xfb\\x03\\xd7\\x0a\\x77\\x1a\\x6d\\x9d\\x7a\\xad\\x86\"\n\"\\x1e\\xfb\\xf9\\x07\\x65\\x8a\\x74\\x78\\x6b\\x70\\x0a\\xf7\\x15\\x06\\xb9\\x67\\x0a\\x82\\x8d\\x6f\\x1b\\x6c\\x06\\x0e\\xf8\\x10\\xf7\\x71\\x15\\xf7\\x13\\xf0\"\n\"\\x9c\\x8d\\x90\\x8c\\x92\\x8f\\x19\\xa4\\x1d\\x80\\x8d\\x70\\x1b\\x30\\x06\\x77\\x84\\xf7\\x67\\x1d\\x7a\\x92\\x7e\\x9b\\x7f\\x1e\\x55\\x60\\x55\\xb5\\x05\\x9a\"\n\"\\x97\\x93\\x9a\\x9c\\x1a\\x9b\\x68\\x0a\\x81\\x1f\\x78\\x85\\x7d\\x76\\x76\\x1a\\x6d\\x9e\\x7a\\xae\\xf6\\x1d\\x72\\x97\\x1f\\xcc\\xf7\\x4d\\x1d\\x0b\\x15\\xf7\"\n\"\\x36\\xf7\\x75\\x05\\xb7\\xa2\\x9d\\xac\\x9c\\xae\\x0a\\xfb\\x0d\\x32\\xf7\\x0d\\x05\\xa3\\x96\\xb7\\x0a\\x76\\x1a\\x7b\\x93\\x7b\\x99\\x81\\x1e\\x95\\x85\\x94\"\n\"\\x89\\xa4\\x8a\\xf7\\x37\\xfb\\x75\\x18\\xfb\\x19\\x4e\\x07\\xeb\\x1d\\x06\\x0b\\xd1\\x1d\\x81\\x81\\x7a\\x8e\\x0a\\xf1\\x1d\\x71\\x83\\xb6\\x0a\\x88\\x83\\x77\"\n\"\\x78\\x1e\\x77\\x75\\x68\\x7e\\x6a\\x1b\\x68\\x6d\\x93\\xa0\\x59\\x1f\\xe4\\x07\\xa3\\x89\\x94\\x85\\x4d\\x1d\\x80\\x72\\x1a\\xfb\\x32\\x07\\x93\\x88\\x05\\x61\"\n\"\\xe5\\xcc\\x79\\xc3\\x1b\\xc7\\xc3\\x9e\\xaf\\xb6\\x1f\\xbc\\xb2\\x9c\\xb0\\xcb\\x1a\\x0b\\xf7\\x33\\xa5\\x15\\x6f\\xbc\\xb5\\x80\\xbd\\x1b\\xf7\\x30\\xf7\\x13\"\n\"\\xf7\\x18\\xf7\\x37\\xd2\\x79\\xc2\\x61\\xc4\\x1f\\xbd\\xc7\\x05\\x9c\\x9f\\x8f\\x93\\x99\\x1a\\xa7\\x74\\xa1\\x6e\\x77\\x82\\x85\\x72\\x76\\x1e\\x5f\\x56\\x05\"\n\"\\xaa\\x5a\\x5c\\x99\\x57\\x1b\\xfb\\x31\\xfb\\x13\\xfb\\x18\\xfb\\x38\\x41\\x9f\\x51\\xb9\\x51\\x1f\\x54\\x48\\x05\\x79\\x76\\x87\\x83\\x7d\\x1a\\x70\\xa3\\x75\"\n\"\\xa8\\x9f\\x94\\x90\\xa4\\xa0\\x1e\\xf7\\xec\\xf8\\x33\\x15\\x99\\x6f\\x94\\x67\\x69\\x1a\\x24\\x3b\\x34\\x2c\\x71\\x75\\x90\\x98\\x72\\x1e\\x41\\xd0\\x15\\x77\"\n\"\\xac\\x82\\xad\\xb2\\x1a\\xf4\\xda\\xe2\\xeb\\xa8\\xa5\\x84\\x7b\\xa6\\x1e\\x0b\\xf7\\x5a\\xf7\\x53\\x15\\xe9\\x06\\xea\\xbd\\x9c\\xba\\xb8\\x1f\\xab\\xad\\x9e\"\n\"\\xb9\\xb8\\x1a\\xf7\\x00\\x2f\\xd7\\xfb\\x15\\x1e\\xfb\\x7d\\x06\\x71\\x20\\x1d\\x7a\\x94\\x7b\\x98\\x82\\x1e\\x83\\x96\\x96\\x89\\xa5\\x96\\x0a\\xf7\\xfa\\x04\"\n\"\\xf7\\x06\\x06\\xce\\xb3\\x6c\\x57\\x56\\x63\\x6c\\x48\\x1f\\xfb\\x06\\x06\\x0e\\xf8\\xbb\\xf8\\x15\\x15\\xa0\\x9f\\x90\\x93\\x9c\\x1a\\xa6\\x74\\xa1\\x6f\\x78\"\n\"\\x82\\x86\\x77\\x76\\x1e\\x5e\\x5e\\x05\\x9c\\x66\\x56\\x96\\x5e\\x1b\\xfb\\x24\\xfb\\x07\\x27\\xfb\\x12\\x5a\\x9d\\x5c\\xae\\x61\\x1f\\x5d\\x5e\\x05\\x76\\x77\"\n\"\\x86\\x82\\x7b\\x1a\\x6f\\xa2\\x75\\xa8\\x9c\\x93\\x90\\xa0\\xa2\\x1e\\xc0\\xc0\\x05\\x78\\xb6\\xb2\\x83\\xba\\x1b\\xf7\\x26\\xf7\\x07\\xef\\xf7\\x12\\xbb\\x7a\"\n\"\\xb8\\x6a\\xb5\\x1f\\x3e\\x40\\x15\\x98\\x78\\x91\\x77\\x76\\x1a\\x45\\x48\\x56\\x32\\x7c\\x82\\x8c\\x8f\\x78\\x1e\\x33\\xc2\\x15\\x7d\\xa0\\x84\\x9f\\xa1\\x1a\"\n\"\\xd0\\xce\\xc1\\xe2\\x9b\\x96\\x8a\\x86\\xa1\\x1e\\x0b\\xf8\\xa9\\xf8\\x61\\x15\\xb2\\x8c\\xa1\\x9d\\xab\\x31\\x0a\\x20\\x0a\\xfb\\x16\\xf7\\x08\\x1d\\xaa\\xfb\"\n\"\\xa2\\x06\\x53\\x53\\x5e\\x46\\x46\\x53\\xb8\\xc3\\x1e\\xf7\\xa2\\xaa\\x07\\xa3\\x96\\x8c\\x91\\x94\\x1f\\xa4\\x1d\\x83\\x8d\\x6e\\x1b\\xfb\\x16\\x06\\x3d\\x1d\"\n\"\\x79\\x1a\\x6c\\xa1\\x78\\xb2\\x8a\\x1e\\xfb\\x99\\x07\\x0b\\xf7\\x5b\\xf3\\x15\\xf7\\x6e\\x95\\x07\\xba\\xa4\\x9c\\xf7\\x4b\\x1d\\xa0\\x7c\\xbe\\x8a\\x1f\\xfb\"\n\"\\x6f\\xa0\\x0a\\xf7\\x6f\\x07\\xbf\\x8c\\x9f\\x9a\\x6e\\x1d\\xfb\\x0c\\x06\\x5d\\x73\\x79\\x69\\x69\\xa3\\x7a\\xb9\\x1f\\x95\\xfb\\x6e\\x06\\x0e\\xf7\\x5d\\xf8\"\n\"\\x62\\x15\\xab\\x92\\x99\\x9b\\xa7\\x1a\\xb1\\x74\\x98\\x4b\\x1e\\x48\\x06\\x4c\\x73\\x7d\\x67\\x67\\xa1\\x7b\\xbc\\x89\\x1f\\xf7\\x3d\\xfb\\xb3\\x76\\x68\\x78\"\n\"\\x6b\\x79\\x7a\\x7e\\x8d\\x19\\x8a\\x06\\x87\\x91\\x06\\xc1\\x7b\\xa1\\x65\\x64\\x7d\\x76\\x50\\x1e\\x5a\\x07\\x66\\xb3\\x75\\xd1\\xcb\\xb1\\xa6\\xd8\\xb8\\x1e\"\n\"\\xf7\\x6e\\xf8\\x07\\x05\\xba\\x8d\\xa1\\x9c\\xac\\x28\\x1d\\x4b\\x06\\x4b\\x74\\x7d\\x66\\x6f\\x99\\x7b\\xab\\x84\\x1f\\xfb\\x00\\xfb\\x4b\\x05\\x0b\\xf7\\x7f\"\n\"\\xf8\\x3d\\x15\\xfb\\x02\\x72\\x0a\\xfb\\x6d\\x7e\\x07\\x68\\x73\\x76\\x6c\\x2d\\x0a\\x1f\\xf7\\x04\\x06\\xb9\\xa4\\x9d\\xac\\xa2\\x7b\\xa0\\x77\\x90\\x1f\\x8d\"\n\"\\x83\\x7f\\x8d\\x7a\\x1b\\xf0\\x07\\xb8\\x91\\xa0\\x9d\\xa0\\x1e\\xa7\\xa3\\xa5\\x99\\xa7\\x1b\\xb7\\x9e\\x6c\\x46\\x1f\\xfc\\x0b\\x2f\\x0a\\xf8\\x0a\\x07\\xf7\"\n\"\\x14\\x4c\\xd7\\x21\\x60\\x6e\\x81\\x70\\x6b\\x1e\\x0b\\xf7\\xf6\\xf8\\x61\\x15\\xec\\x69\\x1d\\xfb\\xc2\\x06\\x5d\\x0a\\xec\\xfb\\xfa\\x2a\\x06\\x71\\x20\\x1d\"\n\"\\x68\\xa3\\x7a\\xb9\\x1e\\x0b\\x9c\\x1d\\x80\\x6c\\x1a\\xfb\\x33\\x89\\x07\\x71\\x82\\x50\\x1d\\x9a\\x81\\x3f\\x1d\\xf7\\x04\\x06\\xa1\\x99\\xf7\\x3a\\x1d\\x92\"\n\"\\x20\\x0a\\x89\\xf7\\x40\\x06\\xec\\x42\\xcc\\xfb\\x00\\x59\\x0b\\x15\\x9a\\x9b\\x90\\x1d\\x22\\x05\\x75\\x74\\x8a\\x8a\\x4e\\x1d\\xf7\\x9e\\xf3\\x15\\x9b\\x9b\"\n\"\\x90\\xf7\\x5e\\x1d\\x7f\\x1e\\x25\\x22\\x05\\x76\\x74\\x8a\\x8a\\x4e\\x1d\\x0e\\x07\\xa4\\x0a\\x0b\\x5e\\x8a\\x0a\\x0b\\x1a\\x54\\x60\\x1d\\x80\\x1e\\x7d\\x6e\"\n\"\\x83\\x88\\x7f\\x1b\\x7e\\x84\\x90\\x95\\x0b\\xf7\\xc3\\xf7\\x2b\\x15\\xfb\\x1e\\xf7\\xca\\x05\\x98\\x06\\xa4\\x95\\x8c\\x91\\x94\\x1f\\x9b\\x94\\x95\\x9d\\x9c\"\n\"\\x31\\x0a\\x81\\x7f\\x8d\\x71\\x1b\\xfb\\x19\\x06\\x72\\x82\\x89\\x86\\x81\\x3c\\x1d\\x84\\x96\\x95\\x89\\xa5\\x1b\\xf7\\x5f\\xfc\\x61\\x05\\xf2\\x06\\x0b\\x1f\"\n\"\\x69\\x84\\x07\\x71\\x5c\\x1d\\xa5\\x1b\\x92\\xfb\\x6f\\x80\\x5b\\x0a\\xf8\\x6a\\x31\\x1d\\x0b\\xa8\\x06\\xa2\\x97\\x38\\x1d\\x6e\\xad\\x06\\xe7\\x1d\\x0b\\x7a\"\n\"\\x1a\\x7a\\x94\\x7b\\x98\\x82\\x1e\\x83\\x96\\x96\\x89\\xa5\\x1b\\x96\\x06\\xf7\\x00\\xfb\\x13\\x15\\xf7\\x13\\xf7\\x15\\x07\\xc8\\xaf\\x75\\x68\\x61\\x5b\\x6f\"\n\"\\x46\\x1f\\xfb\\x01\\xfb\\x7b\\x15\\xf7\\x14\\xf7\\x17\\x07\\xb4\\xaa\\x84\\x7d\\xa4\\x1f\\xa3\\x7d\\x9c\\x73\\x76\\x1a\\x6b\\x6a\\x7b\\x4a\\x1e\\x0e\\xf7\\x9c\"\n\"\\xf3\\x15\\xf7\\x6d\\xf7\\x5e\\x38\\x07\\x5e\\x9e\\x74\\xae\\xae\\x9e\\xa2\\xb8\\x1e\\xf7\\x4f\\xfc\\x6a\\x07\\x52\\x1d\\xbf\\xfb\\x6d\\x57\\x06\\x46\\x0a\\x0b\"\n\"\\xf7\\x3e\\x1d\\xb1\\xd6\\xf7\\x00\\x0a\\x91\\x83\\x8e\\x7b\\x90\\x75\\x8e\\x85\\x93\\x84\\x08\\x83\\x94\\x9b\\x85\\x99\\x47\\x0a\\x0b\\xf8\\xc7\\xf7\\x6e\\x15\"\n\"\\xa2\\x97\\x32\\x1d\\x9c\\x9d\\x22\\x1d\\xfc\\xa2\\xf7\\x22\\x1d\\x95\\x97\\x89\\xa5\\x1b\\x0e\\xf7\\x00\\xf7\\xd6\\x95\\x0a\\x0b\\x07\\xa4\\x0a\\xb3\\x81\\xa7\"\n\"\\x1b\\xcc\\xb9\\xb3\\xc3\\x4e\\x0a\\x95\\x0a\\x0e\\x15\\xd5\\x0a\\x96\\x97\\x88\\xa4\\x1b\\xf8\\x14\\x06\\xa1\\x98\\x8d\\x90\\x94\\x1f\\x9b\\x94\\x95\\x9d\\x9d\"\n\"\\x1a\\x9b\\x83\\x9b\\x7d\\x94\\x1e\\x93\\x20\\x0a\\x0b\\x1b\\x96\\xfb\\xfa\\x80\\x06\\x72\\x82\\x89\\x86\\x61\\x1d\\xf7\\x6a\\x29\\x0a\\x2c\\x06\\x0b\\xf8\\x3c\"\n\"\\xf7\\x67\\xdc\\x1d\\x0b\\x1a\\x78\\x9a\\x7d\\x9f\\x95\\x95\\x90\\x93\\x91\\x1e\\xb2\\xab\\x91\\x90\\x9c\\xf5\\x1d\\xa7\\x0a\\x81\\x1e\\x95\\x85\\x92\\x89\\xa1\"\n\"\\x8a\\xfb\\x04\\x0b\\xf8\\xb3\\xf8\\x15\\x15\\xa8\\x9d\\x93\\x95\\xa0\\x1a\\xa4\\x74\\xa3\\x71\\x7e\\x84\\x88\\x7d\\x75\\x1e\\xfc\\x43\\xfb\\xa1\\x05\\x6d\\x79\"\n\"\\x84\\x81\\x77\\x1a\\x71\\xa2\\x73\\xa4\\x97\\x9a\\x91\\x95\\x9b\\x1e\\x0e\\x15\\xbb\\xaa\\x80\\x71\\xa7\\x1f\\xa3\\x75\\x99\\x6b\\x6d\\x1a\\x41\\x50\\x59\\x34\"\n\"\\x5d\\x6a\\x97\\xa4\\x70\\x1e\\x73\\xa2\\x7d\\xaa\\xab\\x1a\\xaa\\x99\\xaa\\xa3\\xa2\\x1e\\xa5\\xa6\\xab\\x96\\xbb\\x1b\\x0e\\xf7\\x52\\x1d\\x96\\xfb\\xfa\\x06\"\n\"\\x65\\x74\\x78\\x6b\\x69\\xa3\\x79\\xba\\x1f\\xf7\\x15\\x06\\xb9\\xa3\\x9c\\xae\\xa9\\x1d\\x6c\\x0b\\x29\\x1d\\x95\\xfb\\xf8\\x81\\x29\\x1d\\xf7\\xa7\\x06\\xf7\"\n\"\\x21\\xd4\\xc0\\xf3\\xf7\\x07\\x34\\xc9\\xfb\\x37\\x1f\\xfb\\x0d\\x0b\\x75\\x89\\x88\\x4e\\x1d\\x0b\\x9a\\x7c\\xa5\\x0a\\x0b\\x2c\\x0a\\xf7\\x1c\\x63\\x06\\x5f\"\n\"\\x9e\\x74\\xae\\xaf\\x9e\\xa2\\xb7\\x1e\\xb3\\xf7\\x1b\\x07\\xb9\\xa3\\x9d\\xad\\xaa\\x7a\\x9b\\x68\\x8f\\x1f\\x0b\\xea\\x1d\\x0e\\x15\\x98\\x7a\\x86\\x8e\\x7f\"\n\"\\x64\\x0a\\x21\\x05\\x80\\x99\\x96\\x86\\x95\\x1b\\xa1\\x9e\\x9c\\xa0\\x99\\x84\\x95\\x7a\\x99\\x1f\\x0e\\xf7\\x1f\\x1d\\x7e\\x9b\\x93\\x62\\x0a\\x8c\\x98\\x94\"\n\"\\x8c\\x8f\\x76\\x1d\\x75\\x91\\x94\\x7a\\x1f\\x96\\x77\\x89\\x8c\\x55\\x1d\\x7a\\x94\\x7e\\xa0\\x80\\x1f\\x7e\\xa5\\x0b\\xaa\\x3e\\x1d\\x96\\xa4\\x1a\\xdb\\x07\"\n\"\\xa4\\x8a\\x93\\x84\\x95\\x1e\\x9a\\x81\\x7a\\x94\\x78\\x1b\\x79\\x7f\\x85\\x7b\\x7e\\x1f\\xa9\\x46\\x71\\x91\\x0b\\x3a\\x1d\\x93\\x20\\x0a\\x0b\\x05\\xad\\x8f\"\n\"\\x9e\\x9d\\xa8\\x22\\x1d\\x2f\\x06\\x2e\\x1d\\x7b\\x93\\x7b\\x99\\x0b\\xf7\\x07\\x0a\\xf7\\x03\\x07\\xca\\x8d\\x9f\\x98\\xb0\\x1a\\xb2\\x74\\x98\\x4a\\x1e\\x32\"\n\"\\x06\\x4b\\x74\\x7d\\x65\\x68\\x9f\\x7d\\xc0\\x88\\x1f\\xfb\\x07\\x07\\x0b\\x40\\x1d\\x91\\x81\\x9d\\x7d\\x1f\\xf7\\x1a\\x21\\x05\\x80\\x99\\x95\\x86\\x0b\\x71\"\n\"\\x83\\x8a\\x85\\x81\\x48\\x0a\\x83\\x0b\\x15\\x68\\x6e\\x6f\\x6a\\x69\\xa8\\x6f\\xae\\xae\\xa8\\xa7\\xac\\xae\\x6f\\xa6\\x67\\x1f\\x0b\\x15\\x9d\\x99\\x91\\x95\"\n\"\\x98\\x1a\\xa1\\x79\\x9c\\x74\\x7f\\x85\\x51\\x1d\\x7d\\x84\\x80\\x7e\\x1a\\x77\\x9e\\x79\\xa1\\x95\\x95\\x0b\\xf8\\xef\\x15\\xfb\\x0c\\x06\\xd6\\x0a\\x95\\x96\"\n\"\\x89\\xa6\\x1b\\x97\\xfc\\x21\\x0b\\x2a\\x1d\\x81\\x8d\\x70\\x1b\\x2f\\x06\\x73\\x7f\\xbe\\x0a\\x74\\x97\\x7a\\xa4\\x81\\x1e\\x34\\x0b\\xf7\\x26\\xf7\\xfa\\x15\"\n\"\\xf7\\x04\\xfb\\x76\\x05\\xea\\x06\\xf4\\xf7\\x75\\x05\\xfb\\x91\\x6c\\x07\\x71\\x83\\x89\\x4f\\x0a\\x7a\\x79\\x1a\\x0b\\x88\\x8f\\x74\\x9d\\x1f\\xfb\\x2d\\xf7\"\n\"\\x11\\xf7\\x15\\x1d\\x1b\\x99\\x92\\x88\\x7a\\xa6\\x1f\\x70\\xb8\\xac\\xcd\\x0a\\x06\\xba\\xa3\\x9c\\xae\\x9b\\x2a\\x1d\\x81\\x8d\\x6f\\x1b\\x0b\\xbb\\xb6\\xcd\"\n\"\\xac\\x7d\\xaa\\x71\\xa0\\x1e\\x3b\\xd2\\x0a\\x0b\\x8a\\x84\\x8b\\x80\\x82\\x1a\\x6c\\xa0\\x76\\xa9\\xa5\\x9c\\x9b\\xb0\\x94\\x1e\\xc1\\x9a\\xa2\\x99\\xd8\\x1b\"\n\"\\xbf\\xb3\\x7e\\x79\\x7a\\x5f\\x7e\\x4e\\x0b\\xa2\\x74\\xa8\\x95\\x99\\x8d\\x8f\\x9d\\x1e\\x96\\xbb\\xad\\x90\\xad\\x1b\\xc8\\xa6\\x7e\\x6e\\x1f\\x79\\x07\\x91\"\n\"\\x68\\x6a\\x8e\\x6a\\x1b\\x32\\x0b\\xca\\x0a\\xf7\\x07\\xfb\\xa0\\x06\\x60\\x0b\\x97\\x9b\\xa1\\x31\\x0a\\x2f\\x1d\\x32\\x06\\x76\\x84\\x8a\\x88\\x82\\x1f\\x78\"\n\"\\x85\\x7c\\x76\\x0b\\x89\\xa4\\x1b\\xf7\\x06\\x06\\xf7\\x03\\xe0\\xda\\xf1\\x8a\\x1f\\xf8\\x4c\\x0b\\xf7\\x49\\x1d\\x9f\\x0b\\x06\\xcb\\xa2\\x99\\xb1\\xaf\\x75\"\n\"\\x9a\\x57\\x8c\\x1f\\xf7\\xf9\\x07\\xc1\\x8d\\x8f\\x1d\\x0b\\xf8\\x96\\xf8\\x3d\\x15\\xfb\\x1f\\x06\\x72\\x81\\x89\\x86\\x82\\x32\\x0a\\x84\\x0b\\x1e\\x69\\x06\"\n\"\\x4c\\x74\\x7d\\x66\\x6e\\x9a\\x7a\\xac\\x85\\x1f\\x2b\\x07\\x4c\\xf7\\x02\\x05\\xcd\\x65\\x6c\\xa2\\x58\\x1b\\x5f\\x81\\x0b\\xf8\\xe4\\xf7\\x01\\x0a\\x93\\x85\"\n\"\\x9b\\x1b\\x9e\\x9b\\x99\\x9c\\x90\\x8a\\x93\\x88\\x92\\x1f\\x0b\\x89\\x86\\x82\\x1f\\x7b\\x81\\x81\\x7a\\x7a\\x1a\\x0b\\x06\\xf7\\x0f\\x1d\\x0b\\x06\\x71\\x0a\"\n\"\\x7c\\x95\\x9d\\x82\\x9d\\x3e\\x1d\\x94\\xa6\\x1a\\x0b\\x46\\xfb\\x5c\\x05\\x88\\x84\\x8a\\x84\\x85\\x1a\\x7b\\x9b\\x7d\\x9e\\x9a\\x93\\x91\\x9d\\x97\\x1e\\xf7\"\n\"\\x25\\xf7\\x76\\x05\\x0b\\x07\\xbb\\x8c\\xa1\\x9c\\xae\\x1a\\xaf\\x73\\x99\\x4c\\x1e\\x40\\x06\\x4c\\x73\\x7d\\x67\\x68\\xa1\\x7a\\xbc\\x8a\\x1f\\x0b\\xf7\\x6f\"\n\"\\xf7\\x0d\\x15\\x34\\xb9\\x5a\\xde\\xbf\\xad\\xa2\\xaf\\xa7\\x73\\xa3\\x6f\\x84\\x81\\x89\\x89\\x84\\x1e\\x89\\x0b\\x1a\\xaa\\xa8\\xa2\\xb2\\xa5\\x9e\\x84\\x7a\"\n\"\\x9b\\x1e\\x72\\xa2\\x91\\x88\\x9f\\x1b\\xa9\\xa2\\xa2\\xa9\\xbe\\x3a\\xbe\\x0b\\x70\\x84\\x8a\\x85\\x81\\x48\\x0a\\x84\\x95\\x98\\x88\\xa4\\x1b\\x0b\\x8d\\xfb\"\n\"\\x2e\\xf7\\x11\\x18\\xed\\x0a\\xa0\\x95\\x93\\x0b\\x15\\xa2\\xa2\\x97\\xa6\\xaa\\x1a\\xc9\\x59\\xbb\\x4a\\x49\\x59\\x5b\\x4c\\x6d\\x97\\x70\\xa2\\x74\\x1e\\x72\"\n\"\\x76\\x0b\\xf8\\x6f\\xe6\\x0a\\x97\\x87\\x93\\x7e\\x95\\x1f\\x0b\\x8a\\x84\\x80\\x1f\\x7b\\x82\\x81\\x7a\\x7a\\x1a\\x7b\\x94\\x7b\\x98\\x81\\x1e\\x83\\x97\\x94\"\n\"\\x89\\xa6\\x1b\\x0b\\xd1\\x0a\\xa5\\x1b\\x0b\\x15\\x99\\x97\\x92\\x96\\x97\\x1a\\x9d\\x7a\\x9b\\x78\\x82\\x81\\x53\\x1d\\x7c\\x0b\\x1f\\x7e\\x07\\x53\\x98\\x76\"\n\"\\xae\\xa4\\x98\\x96\\xa7\\x94\\x1e\\xc0\\x2d\\x8e\\x85\\x8e\\x87\\x95\\x7e\\x19\\x0b\\xa8\\x1d\\x9a\\x9a\\x1a\\x9b\\x7a\\x9a\\x78\\x1e\\x0e\\xf7\\x10\\x0a\\x79\"\n\"\\x1a\\x0b\\x15\\x9d\\x99\\x91\\x95\\x98\\x1a\\xa1\\x79\\x9c\\x74\\x7f\\x85\\x88\\x7e\\x7a\\x1e\\xfb\\x19\\x21\\x05\\x0b\\x06\\xa0\\xf6\\x0a\\x83\\x9a\\x7c\\x96\"\n\"\\x1e\\x93\\x0b\\xf7\\x2b\\x1d\\x93\\x7b\\x99\\x82\\x1e\\x83\\x96\\x96\\x89\\x0b\\xf7\\x12\\x15\\xa7\\x9f\\x78\\x70\\x6e\\x78\\x78\\x6d\\x6f\\x77\\x9e\\xa7\\xa7\"\n\"\\x9f\\x9e\\xa8\\x1f\\x0b\\x1a\\xad\\x73\\x9d\\x5c\\x1e\\xfb\\x0c\\x29\\x1d\\x95\\x0b\\x1b\\x8d\\x06\\x67\\xfb\\x16\\x52\\xf7\\x23\\x05\\x2d\\x06\\x53\\xfb\\x22\"\n\"\\x69\\xf7\\x15\\x05\\x0b\\x71\\x83\\x8a\\x85\\x81\\x3b\\x0a\\x7a\\x93\\x7b\\x99\\x82\\x1e\\x84\\x0b\\x77\\x84\\x8b\\x88\\x81\\x1f\\x78\\x84\\x7d\\x77\\x76\\x4b\"\n\"\\x0a\\x83\\x0b\\x06\\x77\\x84\\x8a\\x88\\x82\\x1f\\x77\\x85\\x7d\\x76\\x0b\\x40\\xdd\\x0a\\x0b\\x91\\x82\\x1e\\x7b\\x95\\x9c\\x82\\x9e\\x2d\\x1d\\x0b\\x15\\xa7\"\n\"\\x5f\\x69\\x9b\\x7c\\x1b\\x84\\x84\\x83\\x82\\x85\\x8f\\x86\\x97\\x80\\x1f\\xae\\x0b\\x65\\x1a\\x66\\xa2\\x7d\\xca\\x1e\\xed\\x06\\xca\\x6e\\x0a\\x0b\\x83\\x34\"\n\"\\x1d\\x0b\\xc7\\xe8\\x1f\\xc8\\x07\\xef\\xd3\\xd2\\xef\\xad\\xad\\x83\\x7c\\xa6\\x1e\\xa7\\x7c\\x0b\\x72\\x82\\x89\\x86\\x81\\x73\\x1d\\x2d\\x0a\\x1e\\x0b\\x7d\"\n\"\\x67\\x68\\xa1\\x7a\\xb9\\x8a\\x1f\\x4b\\x07\\x0b\\x8d\\x90\\x3a\\x1d\\x0b\\x1a\\x6b\\xa5\\x79\\xb8\\x1e\\xab\\x06\\xba\\xa5\\x9d\\xac\\xa0\\x82\\x98\\x71\\x0b\"\n\"\\x1e\\xe0\\x06\\xcb\\x6e\\x0a\\x89\\x06\\x89\\xd1\\x0b\\x1e\\x7b\\x95\\x9d\\x82\\x9d\\x1b\\x9c\\x9b\\x93\\x98\\x96\\x1f\\x93\\x96\\x8d\\x0b\\x62\\xf7\\x0a\\x0a\"\n\"\\xf7\\x24\\x07\\x0e\\x81\\xac\\x1d\\x93\\xa6\\x1a\\x0b\\x15\\xf7\\x02\\x30\\x05\\x82\\x97\\x93\\x87\\x95\\x1b\\xa0\\x9d\\x9c\\xa0\\x0b\\xab\\x1d\\x74\\x1b\\x6c\"\n\"\\x6e\\x0b\\xf7\\x08\\x0a\\xf7\\x18\\x2b\\x1d\\xad\\x0b\\xf7\\x65\\x1d\\xf7\\x31\\x07\\x0e\\x1b\\x5e\\x68\\x9e\\xa7\\x83\\x1f\\xa6\\x83\\x83\\x93\\x77\\x1b\\x0e\"\n\"\\x5c\\x73\\xf7\\x08\\x0a\\x0b\\x06\\x9f\\xf6\\x0a\\x0b\\xfb\\x2f\\xfb\\x11\\x05\\x75\\x79\\x88\\x87\\x7d\\x1a\\x76\\x9d\\x7a\\x0b\\x9e\\x1a\\x9d\\x82\\x9b\\x7c\"\n\"\\x96\\x1e\\x93\\x7f\\x82\\x8d\\x6e\\x1b\\x0b\\x6f\\x1a\\x68\\xa3\\x79\\xb9\\x1e\\xf7\\xd5\\x06\\xd4\\xb2\\xab\\xc6\\x0b\\x7f\\x1a\\x79\\x9c\\x7b\\x9e\\x94\\x96\"\n\"\\x57\\x1d\\x05\\x82\\x97\\x94\\x87\\x95\\x1b\\xa0\\x9d\\x9c\\xa0\\x97\\x87\\x0b\\x06\\x33\\x66\\x84\\x71\\x64\\x1f\\x47\\x5e\\x68\\x40\\x27\\x1a\\x0b\\x1a\\x68\"\n\"\\xa3\\x7a\\xb9\\x1e\\xf7\\x03\\x0b\\x82\\x90\\x7f\\x92\\x83\\x1f\\x81\\x95\\x93\\x88\\xa6\\x1b\\x0b\\x90\\x1a\\x9b\\x7b\\x9a\\x7a\\x7d\\x82\\x84\\x79\\x81\\x1e\"\n\"\\x0b\\x9b\\x8e\\x8f\\x93\\x1f\\x9b\\x95\\x95\\x9c\\x9d\\x1a\\x9b\\x0b\\xdc\\xc7\\xbf\\xe8\\xb6\\xae\\x83\\x7b\\xa4\\x1f\\x97\\x84\\x0b\\x15\\xfb\\x25\\x06\\xf7\"\n\"\\x28\\xfb\\x7a\\x05\\x78\\x97\\x0b\\x93\\x7c\\x99\\x81\\x1e\\x83\\x95\\x98\\x89\\xa4\\x1b\\x0b\\x1b\\x80\\x7f\\x90\\x9e\\x6a\\x1f\\xa8\\x59\\x79\\x92\\x0b\\x67\"\n\"\\x76\\x7c\\x70\\x82\\x90\\x7f\\x92\\x83\\x1f\\x81\\x0b\\x9b\\x99\\x9e\\x95\\x86\\x92\\x7f\\x96\\x1f\\x0e\\x1f\\x7b\\x81\\x81\\x7a\\x79\\x1a\\x0b\\x61\\x1b\\x5f\"\n\"\\x7e\\x9d\\xc6\\x1f\\x0b\\x79\\x69\\x69\\xa3\\x79\\xba\\x1f\\x0b\\xf6\\xbe\\xb7\\x97\\xa8\\xbc\\x1e\\x0b\\x06\\x5f\\x9d\\x74\\xaf\\xae\\x9e\\xa2\\xb7\\x1e\\x0b\"\n\"\\x06\\x74\\x7f\\x80\\x78\\x77\\x97\\x80\\xa2\\x1f\\x0b\\x8a\\x75\\x7a\\x6a\\x1a\\x69\\xa4\\x79\\xb9\\x1e\\x0b\\x15\\x9f\\x9a\\x90\\x93\\x99\\x1a\\xa1\\x79\\x9c\"\n\"\\x0b\\x19\\x8f\\x8f\\x94\\x98\\x90\\x94\\xbf\\xe8\\x18\\x0b\\x5d\\x73\\x79\\x68\\x69\\xa0\\x7c\\xbe\\x89\\x1f\\x0b\\x72\\x81\\x89\\x85\\x82\\x1f\\x7b\\x82\\x81\"\n\"\\x7a\\x0b\\x96\\xa6\\x8e\\x1f\\xab\\xf7\\x8b\\x05\\x0e\", 52203\n};\n"
  },
  {
    "path": "src/fonts/NimbusMonoPS-BoldItalic.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusMonoPS_BoldItalic_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x18\\x4e\\x69\\x6d\\x62\\x75\\x73\\x4d\\x6f\\x6e\\x6f\\x50\\x53\\x2d\\x42\\x6f\\x6c\\x64\\x49\\x74\\x61\\x6c\\x69\\x63\"\n\"\\x00\\x01\\x01\\x01\\x38\\xf9\\xbc\\x00\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xc0\\x03\\xf8\\x14\\x04\\x8c\\x0c\\x01\\x7f\\x0c\\x02\\x33\\x0c\"\n\"\\x03\\xf7\\x02\\x0c\\x04\\x2e\\xfc\\x1d\\xf9\\xe0\\xfa\\x79\\x05\\x1c\\x35\\xaf\\x0f\\x1c\\x35\\xc2\\x11\\xa9\\x1d\\x00\\x00\\xd1\\x60\\x12\\x01\\xa6\\x02\\x00\"\n\"\\x01\\x00\\x08\\x00\\x0e\\x00\\x13\\x00\\x1d\\x00\\x24\\x00\\x2b\\x00\\x35\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\"\n\"\\x6e\\x00\\x74\\x00\\x7a\\x00\\x84\\x00\\x8b\\x00\\x8e\\x00\\x95\\x00\\x9c\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\\x00\\xcd\\x00\\xd9\\x00\"\n\"\\xe3\\x00\\xe7\\x00\\xf2\\x00\\xf4\\x00\\xfa\\x01\\x04\\x01\\x0b\\x01\\x12\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\\x01\\x4d\\x01\\x53\\x01\"\n\"\\x59\\x01\\x5f\\x01\\x6b\\x01\\x6f\\x01\\x71\\x01\\x77\\x01\\x7d\\x01\\x89\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\\x01\\xc2\\x01\\xcd\\x01\"\n\"\\xd0\\x01\\xd2\\x01\\xd5\\x01\\xdb\\x01\\xe1\\x01\\xed\\x01\\xf0\\x01\\xf6\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\\x02\\x27\\x02\\x33\\x02\"\n\"\\x38\\x02\\x3e\\x02\\x4b\\x02\\x52\\x02\\x59\\x02\\x60\\x02\\x6f\\x02\\x7b\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\\x02\\xa8\\x02\\xb3\\x02\"\n\"\\xb9\\x02\\xbf\\x02\\xc9\\x02\\xcd\\x02\\xd3\\x02\\xda\\x02\\xe3\\x02\\xec\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\\x03\\x2b\\x03\\x34\\x03\"\n\"\\x3d\\x03\\x46\\x03\\x4f\\x03\\x58\\x03\\x61\\x03\\x6a\\x03\\x73\\x03\\x7c\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\\x03\\xbb\\x03\\xc4\\x03\"\n\"\\xcd\\x03\\xd6\\x03\\xdf\\x03\\xe8\\x03\\xf1\\x03\\xfa\\x04\\x03\\x04\\x0c\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\\x04\\x4b\\x04\\x54\\x04\"\n\"\\x5d\\x04\\x66\\x04\\x6f\\x04\\x78\\x04\\x81\\x04\\x8a\\x04\\x93\\x04\\x9c\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\"\n\"\\xed\\x04\\xf6\\x04\\xff\\x05\\x08\\x05\\x11\\x05\\x1a\\x05\\x23\\x05\\x2c\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\\x05\\x6b\\x05\\x74\\x05\"\n\"\\x7d\\x05\\x86\\x05\\x8f\\x05\\x98\\x05\\xa1\\x05\\xaa\\x05\\xb3\\x05\\xbc\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\\x05\\xfb\\x06\\x04\\x06\"\n\"\\x0d\\x06\\x16\\x06\\x1f\\x06\\x28\\x06\\x31\\x06\\x3a\\x06\\x43\\x06\\x4c\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\\x06\\x85\\x06\\x90\\x06\"\n\"\\x9a\\x06\\xa3\\x06\\xac\\x06\\xb5\\x06\\xbf\\x06\\xc6\\x06\\xcf\\x06\\xdb\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\\x07\\x11\\x07\\x15\\x07\"\n\"\\x1b\\x07\\x21\\x07\\x26\\x07\\x2d\\x07\\x3a\\x07\\x40\\x07\\x46\\x07\\x50\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\\x07\\x86\\x07\\x8f\\x07\"\n\"\\x92\\x07\\x9a\\x07\\xa3\\x07\\xae\\x07\\xb4\\x07\\xb9\\x07\\xbe\\x07\\xc4\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\\x08\\x05\\x08\\x0a\\x08\"\n\"\\x10\\x08\\x12\\x08\\x19\\x08\\x21\\x08\\x29\\x08\\x33\\x08\\x3d\\x08\\x49\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\\x08\\x8c\\x08\\x97\\x08\"\n\"\\x9c\\x08\\xa8\\x08\\xb4\\x08\\xba\\x08\\xc0\\x08\\xc6\\x08\\xd2\\x08\\xd6\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\\x09\\x0b\\x09\\x11\\x09\"\n\"\\x1c\\x09\\x22\\x09\\x2e\\x09\\x38\\x09\\x40\\x09\\x42\\x09\\x48\\x09\\x55\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\\x09\\x93\\x09\\x9e\\x09\"\n\"\\xa4\\x09\\xa7\\x09\\xa9\\x09\\xb0\\x09\\xbc\\x09\\xca\\x09\\xcd\\x09\\xda\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\\x0a\\x0f\\x0a\\x17\\x0a\"\n\"\\x22\\x0a\\x2e\\x0a\\x34\\x0a\\x39\\x0a\\x42\\x0a\\x47\\x0a\\x50\\x0a\\x53\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\\x0a\\x7c\\x0a\\x89\\x0a\"\n\"\\x90\\x0a\\x9d\\x0a\\xa4\\x0a\\xab\\x0a\\xb2\\x0a\\xb9\\x0a\\xc0\\x0a\\xc7\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\\x0a\\xf8\\x0a\\xff\\x0b\"\n\"\\x06\\x0b\\x0d\\x0b\\x14\\x0b\\x1b\\x0b\\x22\\x0b\\x29\\x0b\\x30\\x0b\\x37\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\\x0b\\x68\\x0b\\x6f\\x0b\"\n\"\\x76\\x0b\\x7d\\x0b\\x84\\x0b\\x8b\\x0b\\x92\\x0b\\x99\\x0b\\xa0\\x0b\\xa7\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\\x0b\\xd8\\x0b\\xdf\\x0b\"\n\"\\xe6\\x0b\\xed\\x0b\\xf4\\x0b\\xfb\\x0c\\x02\\x0c\\x09\\x0c\\x10\\x0c\\x17\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\\x0c\\x48\\x0c\\x4d\\x0c\"\n\"\\x56\\x0c\\x5d\\x0c\\x64\\x0c\\x73\\x0c\\x87\\x0c\\x93\\x0c\\x98\\x0c\\x9e\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\\x0c\\xd1\\x0c\\xd7\\x0c\"\n\"\\xe1\\x0c\\xe5\\x0c\\xe9\\x0d\\x1f\\x0d\\x5f\\x0d\\x79\\x0d\\x87\\x41\\x45\\x61\\x63\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\\x6c\\x70\\x68\\x61\\x41\"\n\"\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x41\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x41\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\"\n\"\\x65\\x42\\x65\\x74\\x61\\x43\\x61\\x63\\x75\\x74\\x65\\x43\\x63\\x61\\x72\\x6f\\x6e\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x43\\x64\\x6f\\x74\"\n\"\\x61\\x63\\x63\\x65\\x6e\\x74\\x43\\x68\\x69\\x44\\x63\\x61\\x72\\x6f\\x6e\\x44\\x63\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\\x62\\x72\\x65\\x76\\x65\"\n\"\\x45\\x63\\x61\\x72\\x6f\\x6e\\x45\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x45\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\\x6f\\x67\\x6f\\x6e\\x65\"\n\"\\x6b\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x45\"\n\"\\x75\\x72\\x6f\\x47\\x61\\x6d\\x6d\\x61\\x47\\x62\\x72\\x65\\x76\\x65\\x47\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\\x6f\\x6d\\x6d\\x61\\x61\"\n\"\\x63\\x63\\x65\\x6e\\x74\\x47\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x48\\x62\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x49\\x4a\"\n\"\\x49\\x62\\x72\\x65\\x76\\x65\\x49\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x49\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x49\\x6f\"\n\"\\x74\\x61\\x49\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x49\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\\x64\\x65\\x4a\\x63\\x69\"\n\"\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x4b\\x61\\x70\\x70\\x61\\x4b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\\x63\\x75\\x74\\x65\\x4c\"\n\"\\x61\\x6d\\x62\\x64\\x61\\x4c\\x63\\x61\\x72\\x6f\\x6e\\x4c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\\x4d\\x75\\x4e\\x61\\x63\"\n\"\\x75\\x74\\x65\\x4e\\x63\\x61\\x72\\x6f\\x6e\\x4e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\\x76\\x65\\x4f\\x68\\x75\"\n\"\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x4f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x6d\\x69\\x63\\x72\"\n\"\\x6f\\x6e\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\\x69\\x50\\x69\\x50\\x73\"\n\"\\x69\\x52\\x61\\x63\\x75\\x74\\x65\\x52\\x63\\x61\\x72\\x6f\\x6e\\x52\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\\x6f\\x53\\x61\\x63\\x75\"\n\"\\x74\\x65\\x53\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x53\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\"\n\"\\x74\\x53\\x69\\x67\\x6d\\x61\\x54\\x61\\x75\\x54\\x62\\x61\\x72\\x54\\x63\\x61\\x72\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x54\"\n\"\\x68\\x65\\x74\\x61\\x55\\x62\\x72\\x65\\x76\\x65\\x55\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x55\\x6f\"\n\"\\x67\\x6f\\x6e\\x65\\x6b\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x55\\x70\\x73\\x69\\x6c\"\n\"\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x55\\x72\\x69\\x6e\\x67\\x55\\x74\\x69\\x6c\\x64\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\"\n\"\\x6c\\x65\\x78\\x57\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x57\\x67\\x72\\x61\\x76\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x59\"\n\"\\x67\\x72\\x61\\x76\\x65\\x5a\\x61\\x63\\x75\\x74\\x65\\x5a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\\x72\\x65\\x76\\x65\\x61\"\n\"\\x65\\x61\\x63\\x75\\x74\\x65\\x61\\x66\\x69\\x69\\x30\\x30\\x32\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\"\n\"\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x31\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x32\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x35\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x32\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x32\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x33\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x39\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x34\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x34\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x36\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x34\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\"\n\"\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x33\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x35\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x37\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x36\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x36\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x37\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x33\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x37\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x37\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x30\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x38\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\"\n\"\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x37\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x38\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x31\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x39\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x38\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x31\\x30\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x35\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x31\\x30\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x31\"\n\"\\x30\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x31\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x39\\x33\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x38\\x34\\x36\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x34\\x38\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\\x69\\x36\\x31\\x33\\x35\"\n\"\\x32\\x61\\x6c\\x70\\x68\\x61\\x61\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x61\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\"\n\"\\x61\\x6e\\x67\\x6c\\x65\\x72\\x69\\x67\\x68\\x74\\x61\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x69\\x6e\"\n\"\\x67\\x61\\x63\\x75\\x74\\x65\\x61\\x72\\x72\\x6f\\x77\\x62\\x6f\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\"\n\"\\x74\\x61\\x72\\x72\\x6f\\x77\\x72\\x69\\x67\\x68\\x74\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x61\\x72\\x72\\x6f\\x77\"\n\"\\x75\\x70\\x64\\x6e\\x62\\x73\\x65\\x62\\x65\\x74\\x61\\x63\\x61\\x63\\x75\\x74\\x65\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\"\n\"\\x65\\x78\\x63\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x63\\x68\\x69\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\\x63\\x6c\\x75\"\n\"\\x62\\x64\\x63\\x61\\x72\\x6f\\x6e\\x64\\x63\\x72\\x6f\\x61\\x74\\x64\\x65\\x6c\\x74\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\\x65\\x72\\x65\\x73\\x69\"\n\"\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x62\\x72\\x65\\x76\\x65\\x65\\x63\\x61\\x72\\x6f\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x65\\x6c\\x65\\x6d\"\n\"\\x65\\x6e\\x74\\x65\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x65\\x6e\\x67\\x65\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x65\\x70\\x73\\x69\\x6c\"\n\"\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x71\\x75\\x69\\x76\\x61\\x6c\\x65\\x6e\\x63\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\\x65\\x74\\x61\\x65\\x74\"\n\"\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x78\\x63\\x6c\\x61\\x6d\\x64\\x62\\x6c\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\\x65\\x6d\\x61\\x6c\\x65\"\n\"\\x66\\x72\\x61\\x6e\\x63\\x67\\x61\\x6d\\x6d\\x61\\x67\\x62\\x72\\x65\\x76\\x65\\x67\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x67\\x63\\x6f\\x6d\\x6d\"\n\"\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x68\\x62\\x61\"\n\"\\x72\\x68\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x68\\x65\\x61\\x72\\x74\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\\x65\\x69\\x6a\\x69\\x6d\"\n\"\\x61\\x63\\x72\\x6f\\x6e\\x69\\x6e\\x66\\x69\\x6e\\x69\\x74\\x79\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x69\"\n\"\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x74\\x70\\x69\\x6e\\x74\\x65\\x72\\x73\\x65\\x63\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\"\n\"\\x65\\x69\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x69\\x6f\\x74\\x61\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\"\n\"\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\"\n\"\\x6c\\x65\\x78\\x6b\\x61\\x70\\x70\\x61\\x6b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\\x61\\x6e\\x64\\x69\\x63\"\n\"\\x6c\\x61\\x63\\x75\\x74\\x65\\x6c\\x61\\x6d\\x62\\x64\\x61\\x6c\\x63\\x61\\x72\\x6f\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6c\\x64\"\n\"\\x6f\\x74\\x6c\\x65\\x73\\x73\\x65\\x71\\x75\\x61\\x6c\\x6c\\x69\\x72\\x61\\x6c\\x6f\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6d\\x75\"\n\"\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\\x74\\x65\\x6e\\x61\\x70\"\n\"\\x6f\\x73\\x74\\x72\\x6f\\x70\\x68\\x65\\x6e\\x63\\x61\\x72\\x6f\\x6e\\x6e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\"\n\"\\x6d\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x71\\x75\\x61\\x6c\\x6e\\x75\\x6f\\x62\\x72\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\"\n\"\\x74\\x6f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x65\\x67\\x61\\x6f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x6f\\x6d\"\n\"\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x72\\x74\\x68\\x6f\\x67\\x6f\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x70\"\n\"\\x61\\x72\\x74\\x69\\x61\\x6c\\x64\\x69\\x66\\x66\\x70\\x65\\x73\\x65\\x74\\x61\\x70\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x70\\x72\\x6f\\x70\"\n\"\\x65\\x72\\x73\\x75\\x62\\x73\\x65\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\\x6f\\x74\\x65\\x72\\x65\"\n\"\\x76\\x65\\x72\\x73\\x65\\x64\\x72\\x61\\x63\\x75\\x74\\x65\\x72\\x61\\x64\\x69\\x63\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\\x6f\\x6d\\x6d\\x61\\x61\"\n\"\\x63\\x63\\x65\\x6e\\x74\\x72\\x65\\x76\\x6c\\x6f\\x67\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\\x73\\x63\\x65\\x64\\x69\"\n\"\\x6c\\x6c\\x61\\x73\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x73\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\\x65\\x63\\x6f\\x6e\\x64\"\n\"\\x73\\x69\\x67\\x6d\\x61\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x73\\x70\\x61\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x73\\x75\\x6e\\x74\"\n\"\\x61\\x75\\x74\\x62\\x61\\x72\\x74\\x63\\x61\\x72\\x6f\\x6e\\x74\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\\x74\\x61\\x74\\x6f\\x6e\"\n\"\\x6f\\x73\\x75\\x62\\x72\\x65\\x76\\x65\\x75\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x75\\x6e\\x64\\x65\"\n\"\\x72\\x73\\x63\\x6f\\x72\\x65\\x64\\x62\\x6c\\x75\\x6e\\x69\\x30\\x30\\x41\\x30\\x75\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\\x32\\x31\\x41\\x75\\x6e\"\n\"\\x69\\x30\\x32\\x31\\x42\\x75\\x6e\\x69\\x30\\x32\\x43\\x39\\x75\\x6e\\x69\\x30\\x33\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\\x6e\\x69\\x30\\x33\\x41\"\n\"\\x39\\x75\\x6e\\x69\\x30\\x33\\x42\\x43\\x75\\x6e\\x69\\x30\\x33\\x43\\x32\\x75\\x6e\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\\x30\\x44\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x35\\x30\\x75\\x6e\\x69\\x30\\x34\\x35\\x44\\x75\\x6e\\x69\\x30\\x34\\x39\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\\x69\\x30\\x34\\x39\\x36\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x39\\x37\\x75\\x6e\\x69\\x30\\x34\\x39\\x38\\x75\\x6e\\x69\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\\x41\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x39\\x42\\x75\\x6e\\x69\\x30\\x34\\x39\\x43\\x75\\x6e\\x69\\x30\\x34\\x39\\x44\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\\x30\\x34\\x41\\x31\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x41\\x32\\x75\\x6e\\x69\\x30\\x34\\x41\\x33\\x75\\x6e\\x69\\x30\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x41\\x45\\x75\\x6e\\x69\\x30\\x34\\x41\\x46\\x75\\x6e\\x69\\x30\\x34\\x42\\x30\\x75\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\\x34\\x42\\x32\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x42\\x33\\x75\\x6e\\x69\\x30\\x34\\x42\\x36\\x75\\x6e\\x69\\x30\\x34\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\\x6e\\x69\\x30\\x34\\x42\"\n\"\\x39\\x75\\x6e\\x69\\x30\\x34\\x42\\x41\\x75\\x6e\\x69\\x30\\x34\\x42\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\\x43\\x42\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x43\\x43\\x75\\x6e\\x69\\x30\\x34\\x44\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\\x69\\x30\\x34\\x45\\x38\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x45\\x39\\x75\\x6e\\x69\\x30\\x34\\x45\\x45\\x75\\x6e\\x69\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\\x45\\x75\\x6e\\x69\\x32\"\n\"\\x30\\x41\\x46\\x75\\x6e\\x69\\x32\\x31\\x32\\x36\\x75\\x6e\\x69\\x32\\x32\\x31\\x35\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\\x32\\x32\\x32\\x37\\x75\"\n\"\\x6e\\x69\\x32\\x32\\x32\\x38\\x75\\x6e\\x69\\x32\\x32\\x39\\x35\\x75\\x6e\\x69\\x32\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\"\n\"\\x61\\x6c\\x75\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x75\"\n\"\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x75\"\n\"\\x72\\x69\\x6e\\x67\\x75\\x74\\x69\\x6c\\x64\\x65\\x77\\x61\\x63\\x75\\x74\\x65\\x77\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x77\\x64\\x69\\x65\\x72\"\n\"\\x65\\x73\\x69\\x73\\x77\\x67\\x72\\x61\\x76\\x65\\x78\\x69\\x79\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\\x76\\x65\\x7a\\x61\\x63\"\n\"\\x75\\x74\\x65\\x7a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x7a\\x65\\x74\\x61\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\"\n\"\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\"\n\"\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\"\n\"\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\"\n\"\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x4d\\x6f\\x6e\\x6f\\x20\\x50\\x53\\x20\\x42\\x6f\\x6c\\x64\\x20\\x49\"\n\"\\x74\\x61\\x6c\\x69\\x63\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x4d\\x6f\\x6e\\x6f\\x20\\x50\\x53\\x01\\x4d\\x02\\x00\\x01\\x00\\x06\\x00\\x16\\x00\\x7d\\x00\\xb0\"\n\"\\x00\\xb6\\x00\\xbb\\x00\\xc6\\x00\\xcd\\x00\\xd6\\x00\\xdb\\x00\\xe4\\x00\\xea\\x00\\xf6\\x01\\x25\\x01\\x64\\x01\\x7f\\x01\\x8e\\x01\\x96\\x01\\x9c\\x01\\xa1\"\n\"\\x01\\xd8\\x01\\xf1\\x01\\xf9\\x02\\x07\\x02\\x12\\x02\\x1e\\x02\\x26\\x02\\x2c\\x02\\x30\\x02\\x39\\x02\\x42\\x02\\x4a\\x02\\x52\\x02\\x5a\\x02\\x60\\x02\\x7d\"\n\"\\x02\\xd2\\x02\\xf5\\x03\\x21\\x03\\x2a\\x03\\x3c\\x03\\x46\\x03\\x4d\\x03\\x58\\x03\\x67\\x03\\x6f\\x03\\x7a\\x03\\x80\\x03\\x89\\x03\\x92\\x03\\x9b\\x03\\xa1\"\n\"\\x03\\xa7\\x03\\xb2\\x04\\x21\\x04\\x26\\x04\\x76\\x04\\xac\\x04\\xb8\\x04\\xcb\\x04\\xd9\\x04\\xe7\\x04\\xfa\\x05\\x07\\x05\\x13\\x05\\x1f\\x05\\x2e\\x05\\x3a\"\n\"\\x05\\x4c\\x05\\x54\\x05\\x5d\\x05\\x66\\x05\\x73\\x05\\x7a\\x05\\x86\\x05\\x8e\\x05\\x96\\x06\\x0a\\x06\\x9f\\x06\\xf3\\x07\\x4a\\x07\\xa6\\x08\\x06\\x08\\x2a\"\n\"\\x08\\x4e\\x08\\x80\\x08\\x8f\\x08\\xad\\x08\\xc9\\x08\\xe3\\x08\\xea\\x08\\xf9\\x09\\x0b\\x09\\x24\\x09\\x50\\x09\\x58\\x09\\x6d\\x09\\x72\\x09\\x7c\\x09\\x90\"\n\"\\x09\\xb4\\x09\\xd5\\x09\\xe6\\x09\\xf0\\x09\\xfc\\x0a\\x17\\x0a\\x1b\\x0a\\x2a\\x0a\\x38\\x0a\\x41\\x0a\\x4b\\x0a\\x61\\x0a\\x6e\\x0a\\x76\\x0a\\x7e\\x0a\\x8a\"\n\"\\x0a\\x96\\x0a\\xa2\\x0a\\xad\\x0a\\xb8\\x0a\\xc0\\x0a\\xd0\\x0a\\xda\\x0a\\xe4\\x0a\\xec\\x0a\\xf3\\x0b\\x02\\x0b\\x10\\x0b\\x16\\x0b\\x24\\x0b\\x32\\x0b\\x3b\"\n\"\\x0b\\x44\\x0b\\x4a\\x0b\\x57\\x0b\\x5e\\x0b\\x6a\\x0b\\x76\\x0b\\x7e\\x0b\\x86\\x0b\\x8e\\x0b\\x96\\x0b\\xa1\\x0b\\xac\\x0b\\xb7\\x0c\\x83\\x0d\\x10\\x0d\\xa5\"\n\"\\x0d\\xc5\\x0e\\x32\\x0e\\x90\\x0e\\xfd\\x0f\\x34\\x0f\\x44\\x0f\\x53\\x0f\\xdd\\x0f\\xf1\\x10\\x54\\x10\\xbf\\x11\\x3c\\x11\\x9b\\x11\\xd9\\x12\\x39\\x12\\xaf\"\n\"\\x12\\xbf\\x13\\x2c\\x13\\x6c\\x13\\x90\\x13\\xf6\\x14\\x46\\x14\\x90\\x14\\xc2\\x15\\x1b\\x15\\x75\\x15\\xaf\\x15\\xb6\\x15\\xd0\\x16\\x0d\\x16\\x1d\\x16\\x3e\"\n\"\\x16\\x6f\\x16\\x90\\x16\\xce\\x16\\xea\\x16\\xed\\x17\\x18\\x17\\x53\\x17\\x6f\\x17\\x9a\\x17\\xc2\\x17\\xd3\\x17\\xe1\\x18\\x09\\x18\\x25\\x18\\x55\\x18\\x84\"\n\"\\x18\\xb0\\x18\\xdd\\x19\\x0a\\x19\\x13\\x19\\x29\\x19\\x52\\x19\\x7b\\x19\\x7e\\x19\\x88\\x19\\x9a\\x19\\xc1\\x19\\xe7\\x1a\\x0c\\x1a\\x2c\\x1a\\x4f\\x1a\\x66\"\n\"\\x1a\\x89\\x1a\\xac\\x1a\\xce\\x1a\\xf0\\x1b\\x12\\x1b\\x2a\\x1b\\x41\\x1b\\x5e\\x1b\\x7d\\x1b\\x9b\\x1b\\xb8\\x1b\\xc9\\x1b\\xe6\\x1c\\x02\\x1c\\x1e\\x1c\\x34\"\n\"\\x1c\\x50\\x1c\\x6a\\x1c\\x85\\x1c\\x8d\\x1c\\xa1\\x1c\\xba\\x1c\\xca\\x1c\\xde\\x1c\\xec\\x1c\\xf7\\x1c\\xff\\x1d\\x17\\x1d\\x1f\\x1d\\x25\\x1d\\x3c\\x1d\\x41\"\n\"\\x1d\\x52\\x1d\\x62\\x1d\\x6d\\x1d\\x83\\x1d\\x98\\x1d\\xa5\\x1d\\xb0\\x1d\\xc5\\x1d\\xd4\\x1d\\xdb\\x1d\\xe9\\x1d\\xfd\\x1e\\x11\\x1e\\x15\\x1e\\x28\\x1e\\x3b\"\n\"\\x1e\\x4e\\x1e\\x52\\x1e\\x5c\\x1e\\x6f\\x1e\\x82\\x1e\\x94\\x1e\\xa6\\x1e\\xb8\\x1e\\xca\\x1e\\xdc\\x1e\\xee\\x1e\\xf9\\x1f\\x0a\\x1f\\x1b\\x1f\\x25\\x1f\\x36\"\n\"\\x1f\\x47\\x1f\\x58\\x1f\\x69\\x1f\\x7a\\x1f\\x7f\\x1f\\x89\\x1f\\x99\\x1f\\xa4\\x1f\\xb4\\x1f\\xbc\\x1f\\xcc\\x1f\\xd6\\x1f\\xe0\\x1f\\xef\\x1f\\xf7\\x20\\x00\"\n\"\\x20\\x0f\\x20\\x18\\x20\\x26\\x20\\x34\\x20\\x42\\x20\\x50\\x20\\x5c\\x20\\x65\\x20\\x6e\\x20\\x77\\x20\\x84\\x20\\x91\\x20\\x9e\\x20\\xab\\x20\\xb8\\x20\\xc5\"\n\"\\x20\\xd2\\x20\\xdf\\x20\\xe8\\x20\\xf5\\x21\\x01\\x21\\x0d\\x21\\x19\\x21\\x25\\x21\\x31\\x21\\x3d\\x21\\x49\\x21\\x51\\x21\\x5c\\x21\\x67\\x21\\x72\\x21\\x7d\"\n\"\\x21\\x88\\x21\\x93\\x21\\x9e\\x21\\xa9\\x21\\xb4\\x21\\xbf\\x21\\xca\\x21\\xd5\\x21\\xde\\x84\\x8c\\x77\\x1b\\x0b\\x78\\x9c\\x71\\x68\\x75\\x75\\x5e\\x81\\x1e\"\n\"\\x80\\x5c\\x05\\xfb\\x8b\\x06\\x0b\\xf8\\x53\\xf7\\x2b\\x15\\x94\\x5c\\x05\\x79\\x06\\x6b\\x81\\x88\\x7f\\x7c\\x1f\\x7b\\x7f\\x82\\x79\\x7a\\x1a\\x6d\\x9d\\x7f\"\n\"\\xb5\\x1e\\xf7\\x1f\\x06\\xa8\\x99\\x3d\\x1d\\x9c\\x1a\\xa6\\x79\\x9a\\x6b\\x1e\\x82\\x06\\x2b\\xf8\\x60\\x05\\xfb\\x70\\x06\\x6a\\x83\\x99\\x1d\\xc3\\x06\\xfb\"\n\"\\x7b\\xfb\\xf9\\x6b\\x8a\\x81\\x89\\x7d\\x7f\\x19\\x7b\\x7e\\x31\\x1d\\xb6\\x1e\\xf7\\x18\\x06\\xa9\\x98\\x3d\\x1d\\x9c\\x1a\\x9c\\x2c\\x1d\\x7c\\x06\\xa9\\xba\"\n\"\\x05\\xf7\\x67\\xf2\\x15\\xfb\\x25\\x06\\xf7\\x03\\xf7\\x3d\\x05\\x0b\\x15\\x8c\\x8c\\x8c\\x8c\\x8d\\x8c\\x8e\\x8f\\x8e\\x8e\\x8c\\x8d\\x08\\x93\\x94\\x8e\\x92\"\n\"\\x96\\x1a\\x9d\\x7d\\x98\\x78\\x7a\\x7d\\x83\\x7b\\x7d\\x1e\\x23\\xfb\\x0e\\x05\\x7a\\x79\\x87\\x83\\x7d\\x1a\\x7b\\x9a\\x7d\\x9d\\x9a\\x9b\\x94\\x9b\\x99\\x1e\"\n\"\\x0e\\xb9\\x1d\\xf8\\x6d\\x06\\x0b\\x39\\x1d\\x7a\\x1a\\x0b\\x06\\x6b\\x81\\x4e\\x1d\\x6d\\x9d\\x7f\\xb6\\x1e\\x0b\\x49\\x1d\\x9c\\x7f\\xb6\\x1e\\x0b\\x8f\\x96\"\n\"\\x99\\x1f\\x9b\\x97\\x94\\x9d\\x0b\\x3d\\x1d\\x9b\\x1a\\x0b\\x88\\x7f\\x7c\\x1f\\x7c\\x7f\\x81\\x79\\x0b\\x06\\xa7\\xf7\\x13\\x05\\x0b\\x81\\x9b\\x7c\\x90\\x1e\"\n\"\\x8e\\x82\\x85\\x8c\\x76\\x1b\\x0b\\xf8\\x13\\x16\\xf7\\x0e\\x06\\xa9\\x98\\x28\\x1d\\x9b\\x1a\\x9d\\x81\\x9b\\x41\\x1d\\x77\\x1b\\x7f\\x06\\xb5\\xf7\\x50\\x05\"\n\"\\x8e\\x97\\x8c\\x95\\x97\\x69\\x1d\\x2a\\x7b\\x7b\\x67\\x1e\\x76\\x4f\\x1d\\x73\\x9d\\x7a\\xa3\\x73\\x1d\\x0b\\xf8\\x3f\\xf8\\xd6\\x15\\xfb\\x4a\\xfb\\x42\\xfb\"\n\"\\x45\\xfb\\x4d\\xfb\\x17\\xea\\x29\\xf7\\x14\\xf7\\x4e\\xf7\\x41\\xf7\\x43\\xf7\\x50\\xf7\\x18\\x2b\\xeb\\xfb\\x16\\x1f\\x75\\x24\\x15\\xdb\\xc4\\x4e\\x36\\xfb\"\n\"\\x0b\\xfb\\x03\\xfb\\x0c\\xfb\\x02\\x39\\x52\\xc7\\xe1\\xf7\\x0d\\xf7\\x02\\xf7\\x0a\\xf7\\x05\\x1f\\x0b\\x15\\xa3\\x9b\\x94\\x97\\x9c\\x1a\\x9d\\xf7\\x4a\\x1d\"\n\"\\x7c\\x81\\x7d\\x7c\\x1a\\x78\\x99\\x7e\\x9f\\x95\\x97\\x90\\x95\\x9a\\x1e\\x0e\\x7c\\x1f\\x7b\\x7f\\x82\\x7a\\x7a\\x1a\\x7a\\x95\\x7b\\x9a\\x86\\x1e\\x0b\\x82\"\n\"\\x7a\\x7a\\x1a\\x6d\\x9d\\x7f\\x0b\\x90\\x1e\\x8e\\x82\\x84\\x0b\\xf8\\xe2\\xcf\\x1d\\x0b\\x39\\x1d\\x7b\\x1a\\x77\\x93\\x7f\\x9e\\x83\\x1e\\xfb\\x07\\xfb\\x0e\"\n\"\\x4e\\xf7\\x0d\\xf7\\x04\\x1d\\x79\\x7b\\x1a\\x6e\\x9c\\x7e\\xb1\\x1e\\xf7\\x05\\xfb\\x74\\x6d\\xfb\\x1a\\x05\\x4d\\x06\\x6b\\x81\\x3a\\x1d\\xf7\\x7b\\x06\\xa7\"\n\"\\x9a\\x8f\\x96\\x99\\x91\\x1d\\x4f\\x06\\x0b\\x67\\x1d\\x4e\\x1d\\x6d\\x9d\\x7f\\xb7\\x1e\\xd4\\x06\\x5a\\xfb\\x6f\\x05\\xfb\\x0a\\x06\\x6b\\x81\\x88\\x7f\\xe8\"\n\"\\x1d\\x0b\\x4e\\x1d\\x6d\\x9d\\x7f\\xb6\\x1e\\x0b\\x06\\x6b\\x81\\x88\\x7f\\x7c\\x1f\\x7b\\x7f\\x82\\x79\\x7b\\x1a\\x0b\\x06\\x6b\\x81\\x3b\\x1d\\x6e\\x9d\\x7e\"\n\"\\xb6\\x1e\\x0b\\x06\\x6b\\x81\\x88\\x7f\\x7c\\x1f\\x7b\\x7f\\x82\\x7a\\x0b\\x3b\\x1d\\x6d\\x9d\\x7f\\xb6\\x1e\\x0b\\x3f\\x1d\\x7a\\x7a\\x1a\\x0b\\x9c\\x3e\\x1d\"\n\"\\x0b\\x8f\\x96\\x99\\x1f\\x9a\\x97\\x95\\x9d\\x0b\\x1a\\x9c\\x81\\x9b\\x7c\\x90\\x1e\\x8e\\x0b\\x89\\x7e\\x7c\\x1f\\x7b\\x7f\\x82\\x0b\\x74\\x64\\x6e\\x9e\\x7e\"\n\"\\xb5\\x1f\\x0b\\x7c\\x90\\x1e\\x8e\\x83\\x84\\x8b\\x0b\\x06\\x6a\\x82\\x89\\x7e\\x0b\\xf8\\x7c\\xf8\\xef\\x15\\xfb\\x4b\\x06\\x6b\\x80\\xf7\\x19\\x1d\\xd5\\x06\"\n\"\\x32\\xfc\\x20\\x05\\xfb\\x0a\\x06\\x6b\\x81\\x89\\x7e\\xe8\\x1d\\x0b\\x15\\x6f\\xfb\\x13\\x05\\x7f\\x06\\x6b\\x81\\x3f\\x1d\\x7a\\x7b\\x1a\\x6c\\x9c\\x7f\\xb7\"\n\"\\x1e\\xf7\\x0d\\x06\\xa8\\x98\\x29\\x1d\\x9c\\x81\\x9c\\x41\\x1d\\x77\\x1b\\x8a\\x06\\xdb\\xf7\\xfa\\x05\\xb2\\x8f\\xa4\\xa3\\xac\\xa8\\x1d\\x76\\x1b\\x27\\x06\"\n\"\\x6b\\x81\\x88\\x7f\\x30\\x1d\\x88\\x94\\x91\\x8a\\x9f\\x1b\\x95\\x06\\x6f\\xfb\\x14\\x05\\xfb\\x62\\x06\\xa7\\xf7\\x14\\x05\\x97\\x06\\xaa\\x96\\x7f\\x1d\\x27\"\n\"\\x39\\x1d\\x0b\\x8c\\x1d\\x74\\x80\\x8c\\x8a\\x9c\\x79\\x1f\\xf7\\x14\\xfb\\x10\\xf7\\x49\\xf7\\x10\\x05\\xa7\\x9e\\x91\\x92\\x9d\\x1a\\x9d\\x7e\\x98\\x78\\x81\"\n\"\\x82\\x87\\x81\\x7d\\x1e\\x0e\\xf7\\x55\\x1d\\xe1\\xee\\xf5\\xdb\\xd5\\x9d\\x7f\\x97\\x7a\\x74\\x7f\\x80\\x6d\\x7f\\x1f\\x61\\x7b\\x5c\\x6e\\x56\\x1b\\x72\\x75\"\n\"\\x92\\x9a\\x78\\x1f\\x7b\\x97\\x88\\x92\\x88\\xa8\\x08\\xac\\x88\\x84\\x94\\x75\\x1b\\x0e\\x1f\\x9c\\x95\\x96\\x9d\\xf7\\x4d\\x1d\\x0b\\x7d\\x1f\\xa3\\xe7\\x15\"\n\"\\xbd\\xac\\xc4\\xa7\\xd1\\x1b\\xcf\\xbd\\x6b\\x5d\\x90\\x1f\\x0b\\x06\\x6a\\x82\\x3f\\x1d\\x7a\\x7a\\x1a\\x6d\\x0b\\x06\\x6b\\x81\\xf7\\x41\\x1d\\x0b\\x96\\x06\"\n\"\\x66\\xfb\\x3d\\x05\\x87\\x7c\\x8a\\x7e\\x0b\\x78\\x1a\\x79\\x94\\x7b\\x9a\\x80\\x1e\\x84\\x96\\x98\\x88\\xa5\\x1b\\x0b\\x7a\\x1a\\x79\\x99\\x7e\\x9d\\x95\\x0b\"\n\"\\x88\\x7f\\x7c\\x1f\\x7b\\x7f\\x82\\x7a\\x7a\\x1a\\x0b\\x82\\x7d\\x77\\x74\\x1a\\x0b\\x8e\\x97\\x99\\x1f\\x9b\\x97\\x94\\x9d\\x0b\\x1a\\x9c\\x80\\x9b\\x7d\\x90\"\n\"\\x1e\\x8e\\x0b\\x1a\\x9b\\x80\\x9b\\x7d\\x90\\x1e\\x8e\\x0b\\x06\\x3b\\xfb\\xf8\\x05\\x0b\\x5f\\x7a\\x92\\x74\\x1b\\x0b\\x1b\\x9c\\x9d\\x93\\x98\\x98\\x1f\\x95\"\n\"\\x95\\x8f\\x0b\\xf8\\xe4\\xf8\\x05\\x15\\x8e\\x9b\\x8c\\x91\\x94\\x1a\\xa1\\x7a\\x9a\\x73\\x7a\\x81\\x85\\x7a\\x7e\\x1e\\x9a\\x6a\\x63\\x93\\x5b\\x1b\\xfb\\x1d\"\n\"\\x22\\x46\\x31\\x4c\\xbf\\x6c\\xf7\\x10\\x63\\x1d\\x4b\\x56\\x64\\x97\\xa2\\x75\\x1e\\xa9\\x88\\x7c\\x99\\x6f\\x1b\\x66\\x75\\x75\\x5f\\x81\\x1f\\x84\\x6b\\x05\"\n\"\\x88\\x7b\\x8a\\x87\\x83\\x1a\\x73\\x9d\\x7b\\xa6\\x99\\x93\\x8e\\x93\\x98\\x1e\\x79\\xaf\\xbb\\x82\\xc5\\x1b\\xf7\\x26\\xf7\\x05\\xd2\\xe6\\xb0\\x79\\xaa\\x6a\"\n\"\\x9f\\x1f\\x72\\x9b\\x62\\x96\\x44\\x94\\x4e\\x93\\x84\\x8d\\x7f\\x8f\\x84\\x1d\\x08\\x0b\\xf8\\xf4\\xbc\\x1d\\x0b\\x15\\x40\\x27\\x05\\x29\\x06\\x6c\\x80\\xf7\"\n\"\\x41\\x1d\\xf7\\x6a\\xf7\\x23\\x1d\\x83\\x85\\x8c\\x79\\x1b\\xf7\\xd2\\xf8\\x33\\x05\\xb2\\x8f\\xa5\\xa3\\xac\\x1a\\x9c\\x2c\\x1d\\x2f\\x06\\x6c\\x7f\\x88\\x7f\"\n\"\\x7d\\x1f\\x7b\\x7f\\x82\\x79\\x7b\\x1a\\x6f\\x9a\\x7f\\xae\\x89\\x1e\\xfb\\x31\\xfb\\x5e\\x4c\\xf7\\x5e\\xf7\\x69\\x1d\\x7d\\x32\\x1d\\xf7\\x42\\x1d\\x7a\\x1a\"\n\"\\x73\\x98\\x7e\\xa7\\x87\\x1e\\x0b\\xf8\\xee\\x15\\x2e\\xe5\\x05\\x94\\x81\\x83\\x8f\\x82\\x1b\\x74\\x72\\x74\\x76\\x81\\x8f\\x84\\x99\\x7e\\x1f\\xf7\\x17\\xfb\"\n\"\\x11\\xf7\\x43\\xf7\\x10\\x99\\x95\\x92\\x91\\x8d\\x8c\\x19\\x91\\x91\\x90\\x98\\x94\\x1a\\x9b\\x7c\\x99\\x7a\\x81\\x7e\\x86\\x83\\x81\\x1e\\x0e\\x05\\xfb\\x0d\"\n\"\\x06\\x6b\\x81\\x88\\x7f\\x30\\x1d\\x88\\x0b\\x15\\x62\\x65\\x68\\x66\\x6e\\xa1\\x76\\xa9\\xb4\\xb1\\xae\\xb1\\xa8\\x75\\x9f\\x6d\\x1f\\x0e\\x1a\\x9c\\x81\\x9a\"\n\"\\x7c\\x91\\x1e\\x8d\\x85\\x84\\x8c\\x7e\\x1b\\x0e\\xf8\\x87\\x15\\xfb\\x13\\x06\\x73\\xfb\\x00\\x05\\xf7\\x13\\x06\\x0b\\x06\\xab\\x95\\x8e\\x97\\x9a\\x1f\\x9b\"\n\"\\x97\\x94\\x9c\\x9c\\x1a\\xa9\\x79\\x97\\x60\\x1e\\x0b\\x7e\\x1a\\x76\\x9a\\x7c\\x9f\\x94\\x9c\\x93\\x94\\x95\\x1e\\x0b\\x06\\x59\\x6b\\x72\\x64\\x6f\\x9b\\x81\"\n\"\\xb9\\x8a\\x1f\\x0b\\xc1\\xac\\x97\\xb3\\xc4\\x1e\\x82\\x63\\x05\\xee\\x06\\x0b\\x65\\x68\\x66\\x6e\\xa1\\x76\\xa9\\xb4\\xb1\\xae\\xb1\\xa7\\x75\\xa0\\x0b\\x7d\"\n\"\\x1f\\xe1\\x82\\xa5\\x81\\x75\\x1a\\x75\\x52\\x78\\x0b\\x68\\x6c\\x6e\\x6a\\x73\\x9d\\x79\\xa5\\xae\\xaa\\xa8\\xac\\xa4\\x79\\x9c\\x71\\x1f\\x0b\\xfb\\x3c\\x05\"\n\"\\x58\\x4d\\x70\\x7f\\x0b\\x06\\x61\\xfb\\x4f\\x05\\x88\\x7e\\x8a\\x0b\\xf8\\x3d\\x15\\xfb\\x4b\\x06\\x6a\\x81\\x0b\\x97\\x94\\x9d\\x9b\\x1a\\x9d\\x81\\x9a\\x7c\"\n\"\\x90\\x1e\\x8e\\x0b\\x1a\\xd0\\x49\\xb6\\x21\\x53\\x0b\\x96\\x7b\\x99\\x86\\x1e\\x88\\x93\\x96\\x8a\\x9c\\x1b\\x0b\\x06\\xa8\\x99\\x8f\\x96\\x99\\x1f\\x0b\\x1f\"\n\"\\xa4\\xab\\xb3\\x98\\xbc\\x1b\\x0b\\xf9\\x0d\\xf8\\x92\\x15\\x90\\x9e\\x8b\\x8d\\x93\\x1a\\xa2\\x79\\x9b\\x72\\x76\\x7f\\x83\\x75\\x7c\\x1e\\x9e\\x6e\\x60\\x96\"\n\"\\x59\\x1b\\xfb\\x24\\xfb\\x0a\\x2e\\xfb\\x06\\x64\\xa2\\x62\\xae\\x76\\x1f\\xa7\\x79\\xa8\\x82\\xcd\\x80\\xcc\\x7f\\x99\\x87\\x9e\\x81\\x08\\x9a\\x83\\x94\\x7d\"\n\"\\x7d\\x1a\\x60\\x49\\x67\\x3a\\x4c\\x54\\xa5\\xab\\x88\\x1e\\x89\\xa5\\xdb\\x1d\\x6c\\x93\\x55\\x95\\x3d\\x9a\\x83\\xae\\x1d\\xb5\\xc6\\xb0\\xcf\\xc7\\xb3\\x73\"\n\"\\x67\\x6b\\x8b\\x8b\\x92\\x82\\x1e\\x82\\x92\\x99\\x85\\x9a\\x1b\\x9c\\x9c\\x93\\x98\\x98\\x1f\\x96\\x95\\x8f\\x94\\x91\\xa5\\x08\\x0b\\xf8\\xe4\\xf7\\x41\\x15\"\n\"\\xac\\x94\\xa0\\xa3\\xa7\\x1a\\x9c\\x80\\x9a\\x7d\\x32\\x1d\\x8c\\x77\\x1b\\xfb\\x43\\x06\\x6b\\x81\\x3b\\x1d\\x7a\\x6a\\x1d\\xe9\\x06\\x7e\\x50\\x05\\x7c\\x63\"\n\"\\x63\\x84\\x5b\\x1b\\x27\\x52\\xb0\\xcd\\x9b\\x8d\\x9c\\x8f\\x9c\\x1f\\x98\\xc8\\x05\\xf1\\xa2\\xe3\\xcf\\xf7\\x00\\x1b\\xd2\\xb7\\x78\\x6b\\x8d\\x1f\\x8d\\x6c\"\n\"\\x8b\\x8b\\x90\\x83\\x08\\x81\\x91\\x99\\x85\\x9a\\x55\\x1d\\x94\\x91\\xa5\\x9c\\xd6\\x18\\x8f\\x9d\\x8b\\x8c\\x94\\x1a\\xa3\\x7b\\x9b\\x72\\x77\\x7e\\x83\\x76\"\n\"\\x7b\\x1e\\x9e\\x65\\x5d\\x95\\x56\\x1b\\x38\\x44\\x73\\x58\\x4b\\x1f\\x48\\x58\\x5d\\x44\\x7b\\x41\\x7c\\x47\\x18\\x86\\x78\\x89\\x77\\x77\\x1a\\x48\\xa4\\x57\"\n\"\\xba\\x6d\\x1e\\x6f\\xb7\\xcc\\x7b\\xd3\\x1b\\xdb\\xbe\\x98\\xba\\xf4\\x1f\\x0b\\xaf\\xf7\\x86\\x15\\x87\\x7a\\x89\\x7a\\x7a\\x1a\\xfb\\x10\\xed\\x3b\\xf7\\x2a\"\n\"\\xe6\\xda\\xa3\\xb9\\xc6\\x1e\\xa5\\xa0\\x98\\x9e\\x9f\\x7e\\x1d\\xcb\\xc5\\x6c\\x6a\\x89\\x1f\\x8a\\x76\\x05\\x74\\x8a\\x9d\\x7a\\xa5\\x55\\x1d\\x95\\x91\\xa4\"\n\"\\x9d\\xdb\\x18\\x8f\\x9d\\x8b\\x8c\\x94\\x1a\\xa2\\x79\\x9c\\x71\\x79\\x7e\\x85\\x7b\\x7a\\x1e\\xa9\\x4c\\x73\\x91\\x52\\x1b\\xfb\\x30\\xfb\\x25\\xfb\\x0a\\xfb\"\n\"\\x2e\\x69\\x1f\\x0b\\xf8\\x80\\xf8\\x1e\\x15\\xa7\\x6d\\x5d\\x9b\\x58\\x1b\\xfb\\x32\\xfb\\x1e\\xfb\\x15\\xfb\\x26\\x23\\xdb\\x42\\xf7\\x08\\xbd\\xbb\\x99\\xa8\"\n\"\\xbb\\x1f\\x81\\x60\\x82\\x5c\\x5e\\x6a\\x55\\x8c\\x19\\xfb\\x01\\x4a\\x1d\\xf7\\x03\\x06\\xf7\\x04\\xf1\\xd9\\xf1\\xa0\\x1f\\xd6\\xf7\\xe6\\x05\\x98\\x06\\xaa\"\n\"\\x97\\x8e\\x97\\x9a\\x1f\\x9a\\x97\\xaf\\x1d\\x8e\\x82\\xf7\\x3a\\x1d\\x3b\\x43\\x37\\x49\\x5e\\xb2\\xc6\\xd7\\xdb\\xd2\\xe1\\x1f\\x0b\\xf7\\x8b\\xf8\\x60\\x15\"\n\"\\xa7\\x06\\xb8\\xab\\xa4\\xaf\\xa8\\x77\\x99\\x62\\x1f\\xfb\\x28\\x06\\x59\\x6b\\x73\\x67\\x6e\\x9f\\x7c\\xb4\\x1f\\x9c\\x06\\x3a\\xfb\\xf8\\xf7\\x4b\\x1d\\xf7\"\n\"\\xb4\\xf7\\xfd\\x50\\xfb\\x95\\x05\\x72\\x06\\x59\\x6b\\x72\\x64\\x72\\xa1\\x7c\\xb3\\x1f\\xf7\\x2d\\x06\\xb8\\xab\\xa4\\xae\\xa8\\x77\\x9a\\x62\\x1f\\x7b\\x06\"\n\"\\xd9\\xf7\\xf8\\x05\\x97\\x06\\xb1\\xaa\\xa7\\xad\\xa7\\x76\\x99\\x62\\x1f\\x24\\x06\\xfb\\xaf\\xfb\\xfd\\x05\\x0b\\xf8\\x99\\xf7\\xd5\\x15\\x92\\x06\\xb2\\xa9\"\n\"\\xa6\\xae\\xa9\\x7a\\x97\\x60\\x1f\\xfb\\x04\\x06\\x59\\x6c\\x73\\x66\\x6d\\x9d\\x7e\\xb5\\x1f\\x90\\x06\\x6f\\xfb\\x14\\x05\\x45\\x7c\\x67\\x69\\x4f\\x1b\\x63\"\n\"\\x76\\x9b\\xa8\\x96\\x8d\\x99\\x93\\xac\\x1f\\xc0\\xf7\\x7d\\x05\\xfb\\x0b\\x06\\x58\\x6d\\x74\\x64\\x6e\\x9d\\x7e\\xb5\\x1f\\x90\\x06\\x6e\\xfb\\x15\\x05\\x87\"\n\"\\x77\\x88\\x73\\x7b\\x1a\\x34\\xd0\\x4f\\xf0\\xc9\\xbf\\xa0\\xb4\\xb5\\x1e\\xa9\\xa9\\x9d\\xb1\\x9a\\xcf\\x08\\x0b\\xf7\\x3d\\x1d\\x86\\x8b\\x8a\\xf4\\x1d\\xa6\"\n\"\\xf7\\x08\\x15\\x6c\\x4f\\x50\\x7b\\x55\\x1b\\x68\\x6f\\x98\\x9b\\x94\\x93\\x96\\x99\\x97\\x6c\\x1d\\xac\\xa9\\x88\\x84\\xb3\\x1f\\x0b\\x90\\x1e\\x8e\\x82\\x85\"\n\"\\x8c\\x76\\x1b\\xfb\\xc1\\x27\\x1d\\xeb\\x06\\x3b\\xfb\\xfa\\x05\\x2a\\x26\\x1d\\xf7\\xc1\\x06\\xa8\\x99\\x28\\x1d\\x9b\\x1a\\x9c\\x2c\\x1d\\x2c\\x06\\x0b\\x15\"\n\"\\xfb\\x20\\x26\\x1d\\xa9\\x06\\x65\\x65\\x1d\\x5a\\x1b\\x5d\\x72\\x9a\\xa7\\x91\\x8c\\x92\\x8d\\x93\\x1f\\xc7\\xf7\\xa2\\x5a\\x1d\\x93\\x94\\x8a\\x9d\\x1b\\x4b\"\n\"\\x1d\\x7b\\x1a\\x42\\xc8\\x5b\\xe5\\xc1\\xac\\x97\\xb3\\xc4\\x1e\\x82\\x63\\x05\\x0b\\xf8\\xb1\\xf7\\x0c\\x1d\\xfc\\x13\\x37\\x1d\\x6c\\x9c\\x7f\\xb7\\x1e\\x0e\"\n\"\\x15\\xa7\\x9e\\x90\\x92\\x9d\\x1a\\x9d\\x7c\\x98\\x77\\x80\\x80\\x87\\x80\\x7d\\x1e\\xfb\\x2b\\x21\\x05\\x73\\x7a\\x83\\xf7\\x61\\x1d\\x98\\x1e\\x0e\\x1a\\xa5\"\n\"\\x7a\\x9c\\x72\\x7f\\x84\\x89\\x82\\x77\\x1e\\x76\\x5a\\x58\\x80\\x58\\x1b\\x5b\\x71\\x94\\x9d\\x92\\x8c\\x92\\x8d\\x94\\x1f\\x0b\\xf7\\xf6\\xf7\\x60\\x15\\xb8\"\n\"\\xb4\\xb2\\xb4\\xab\\x73\\xa1\\x69\\x1f\\x7a\\x06\\x5f\\x61\\x65\\x62\\x6b\\xa3\\x74\\xad\\x1f\\x0e\\x06\\xa8\\x99\\xf7\\x1a\\x1d\\x0b\\x06\\xa9\\x98\\x8e\\x97\"\n\"\\x99\\xa0\\x1d\\x8f\\x81\\x87\\x8b\\x75\\x1b\\x0b\\x69\\x6c\\x6e\\x6b\\x73\\x9d\\x79\\xa5\\xae\\xaa\\xa8\\xac\\xa3\\x79\\x9c\\x70\\x1f\\x0b\\x9f\\x99\\xaf\\x1a\"\n\"\\xb1\\x74\\x99\\x4b\\x1e\\x39\\x06\\x4c\\x73\\x7d\\x67\\x68\\xa1\\x7a\\xb9\\x8a\\x1f\\x6f\\xfb\\x15\\x0b\\x1a\\xa4\\x78\\x9d\\x71\\x7d\\x7e\\x86\\x80\\x7d\\x1e\"\n\"\\x6b\\x71\\x8b\\x8b\\x7f\\x85\\x08\\x7d\\x6f\\x62\\x83\\x5d\\x1b\\x27\\x4e\\xb8\\xd4\\x96\\x8c\\x97\\x8e\\x96\\x1f\\x99\\xc8\\x05\\xef\\xa1\\xe3\\xd3\\xf0\\x1b\"\n\"\\x0b\\x96\\x1d\\x82\\x85\\x8c\\x76\\x1b\\x0b\\xf9\\x2a\\x15\\x65\\x64\\x66\\x66\\x70\\xa3\\x73\\xa7\\xb4\\xb0\\xae\\xb2\\xa8\\x75\\xa1\\x6c\\x1f\\x0e\\xf7\\x23\"\n\"\\x1d\\x82\\x0b\\x05\\x4e\\x25\\x1d\\x6e\\x9d\\x7e\\xb5\\x1e\\x0b\\x1f\\x9b\\x97\\x94\\x9d\\x9c\\x1a\\x97\\x86\\x96\\x81\\x93\\x1e\\x93\\x82\\x82\\x8d\\x6f\\x1b\"\n\"\\x0b\\x08\\x80\\x90\\x83\\x91\\x91\\x1a\\x9b\\xbf\\x9b\\xbd\\xb5\\xa8\\x83\\x79\\xa2\\x1e\\x6b\\x96\\x95\\x83\\xa5\\x1b\\x9b\\x9d\\x93\\x98\\x99\\x1f\\x95\\x95\"\n\"\\x8f\\x93\\x91\\xa6\\x0b\\x08\\x94\\x84\\x7d\\x91\\x7c\\x1b\\x67\\x75\\x76\\x5e\\x81\\x1f\\x7d\\x4c\\x05\\x88\\x7e\\x8a\\x82\\x84\\x1a\\x75\\x9e\\x7a\\xa4\\x9c\"\n\"\\x94\\x8f\\x9d\\xa0\\x1e\\x0b\\x98\\x1a\\xa2\\x7a\\x9a\\x6f\\x61\\x80\\x7e\\x48\\x7f\\x1e\\x67\\xfb\\x5f\\x05\\x0b\\x86\\x84\\x4d\\x1d\\x95\\x8f\\x94\\x98\\x1e\"\n\"\\x0e\\x3a\\x6a\\x4d\\x4e\\x1f\\x58\\x56\\x6c\\x44\\x4a\\x1a\\x0b\\xf7\\x38\\x15\\x94\\xb3\\x05\\x8e\\x9a\\x8d\\x9b\\x9b\\x1a\\xf7\\x05\\x36\\xd4\\xfb\\x18\\xfb\"\n\"\\x3d\\xfb\\x28\\xfb\\x13\\xfb\\x25\\x0b\\x37\\x1d\\x6d\\x0b\\x1e\\x3e\\x06\\x4c\\x73\\x7d\\x67\\x68\\xa1\\x7a\\xb9\\x8a\\x1f\\x5a\\x0b\\x15\\x30\\xe5\\x05\\x96\"\n\"\\x80\\x85\\x8e\\x80\\x1b\\x73\\x74\\x75\\x0b\\x1e\\xfb\\x12\\xf7\\x40\\x1d\\x99\\x1e\\x0e\\x91\\x9e\\x1d\\xae\\xa8\\x9c\\xb6\\xb5\\x1f\\x0b\\x70\\xa2\\x76\\xa9\"\n\"\\x9d\\x9c\\x94\\x98\\x91\\x1e\\x96\\xa1\\x9a\\xc7\\x9f\\x1a\\xab\\x72\\x9c\\x5d\\x51\\x0b\\x95\\x06\\x3b\\xfb\\xfa\\x05\\x80\\x06\\x6c\\x80\\x4e\\x1d\\x0b\\xf7\"\n\"\\x45\\x1d\\x85\\x8c\\x76\\x1b\\x0b\\x1f\\x9b\\x68\\x1d\\x82\\x20\\x1d\\x0b\\xf7\\x03\\xf7\\x17\\xf7\\x0e\\xe7\\xf7\\x0c\\xa5\\x1e\\x0b\\xf8\\x61\\x15\\xc1\\x06\"\n\"\\xa9\\x97\\x8e\\x97\\x9a\\x1f\\x0b\\x7c\\x1f\\x7b\\x7f\\x82\\x79\\x7b\\x1a\\x6d\\x9d\\x7f\\x0b\\x8e\\x97\\x9a\\x1f\\x9b\\x97\\x94\\x9c\\x3c\\x1d\\x0b\\x06\\x58\"\n\"\\x6c\\x74\\x65\\x6d\\x9d\\x7e\\xb6\\x1f\\x0b\\x90\\x9e\\x6e\\x1f\\xa9\\x54\\x1d\\x0b\\x89\\x7e\\x7b\\x1f\\x7b\\x7f\\x82\\x7a\\x7a\\x1a\\x6d\\x9c\\x7f\\xb7\\x1e\"\n\"\\x0b\\x84\\x79\\x7d\\x1e\\xfb\\xd4\\xfc\\x47\\x05\\x0b\\x8e\\x96\\x8c\\x95\\x92\\x1a\\xab\\x72\\x9d\\x0b\\x06\\xca\\xa3\\x99\\xb0\\xad\\x75\\x0b\\x1a\\x6d\\x9c\"\n\"\\x7f\\xb6\\x1e\\x0b\\x9c\\x1b\\x99\\x91\\x88\\x7a\\xa2\\x1f\\x70\\xb1\\xaa\\x7d\\xa2\\x1b\\x0b\\x06\\xa9\\x98\\x8e\\x97\\x9a\\x1f\\x9a\\x97\\x95\\x9d\\x9c\\x1a\"\n\"\\x0b\\x1f\\x9b\\x97\\xaf\\x1d\\x0b\\xa2\\xa1\\xa2\\x96\\x8a\\x8c\\x7a\\x9c\\x1f\\xfb\\x12\\xf7\\x11\\x0b\\x7c\\x1f\\x7c\\x7f\\x81\\x79\\x7b\\x1a\\x6d\\x9d\\x7f\"\n\"\\xb6\\x1e\\x0b\\x83\\x72\\x78\\x19\\x76\\x70\\x65\\x7e\\x0b\\x1b\\xc8\\xa5\\x9b\\xaf\\xac\\x72\\x9e\\x0b\\xa4\\x7e\\x95\\x67\\x1f\\x0e\\x9e\\x7a\\xa4\\x9c\\x9c\"\n\"\\x93\\x98\\x99\\x1e\\x95\\x95\\x8f\\x0b\\x06\\xcb\\xa2\\x99\\xb0\\xa8\\x0b\\x1a\\x9d\\x81\\x9a\\x7c\\x90\\x1e\\x8e\\x82\\x85\\x8c\\x0b\\x9e\\x7a\\xa4\\x9c\\x9c\"\n\"\\x93\\x98\\x98\\x1e\\x96\\x95\\x0b\\x06\\x6c\\x80\\x88\\x7f\\x7c\\x1f\\x0b\\x90\\x80\\x95\\x82\\x1e\\x83\\x95\\x0b\\x1f\\xa7\\xa2\\x9e\\xa8\\xa1\\x1a\\x0b\\x1f\"\n\"\\x7c\\x7f\\x81\\x79\\x7a\\x1a\\x0b\\x8d\\x7d\\x96\\x08\\x80\\x94\\x84\\x99\\x97\\x1a\\x0b\\x94\\x9c\\x9c\\x1a\\x9d\\x81\\x9a\\x7c\\x90\\x1e\\x0b\\x9e\\x7a\\xa4\"\n\"\\x9c\\x9d\\x93\\x98\\x98\\x1e\\x95\\x0b\\xf9\\x1f\\xf7\\x38\\x15\\x95\\xba\\x05\\x90\\xa3\\x8e\\xa2\\xa3\\x1a\\xe5\\x51\\xcc\\x3b\\x60\\x66\\x7b\\x67\\x5f\\x1e\"\n\"\\xaf\\x72\\x6a\\x9b\\x5c\\x1b\\x70\\x40\\x7d\\x80\\x6c\\x1f\\x6d\\x80\\x79\\x75\\x70\\x1a\\x73\\x9d\\x79\\xa3\\x92\\x94\\x8c\\x8e\\x94\\x1e\\x9d\\xd0\\x92\\x8d\"\n\"\\x9d\\x1b\\x9f\\x99\\x7e\\x7a\\x84\\x8b\\x8a\\x8a\\x87\\x1f\\x88\\x7b\\x05\\x8f\\x72\\x7b\\x8c\\x7c\\x1b\\x4c\\x39\\x70\\x67\\x5a\\x1f\\x69\\x71\\x79\\x65\\x5b\"\n\"\\x1a\\x3e\\xc1\\x5e\\xe6\\xb7\\xaa\\x93\\xa1\\xb4\\x1e\\x81\\x93\\x96\\x86\\x9a\\x1b\\x9b\\x98\\x90\\x95\\x97\\x1f\\x75\\xa9\\xa1\\x84\\xb3\\x1b\\xc0\\xd9\\x9f\"\n\"\\xa0\\xab\\x1f\\xa0\\x99\\x95\\x9d\\xa2\\x1a\\xa2\\x7a\\x9c\\x74\\x7d\\x7c\\x87\\x7e\\x69\\x1e\\x7f\\x6d\\x79\\x87\\x75\\x1b\\x65\\x7b\\xa1\\xc1\\x87\\x1f\\xfb\"\n\"\\x0e\\x69\\x15\\x6c\\x5f\\x6d\\x7f\\x6f\\x1b\\x68\\x76\\x9a\\xa4\\x97\\x8f\\x95\\x93\\x93\\x1f\\x9c\\x9c\\xbc\\x99\\xb5\\x1b\\x9b\\x97\\x89\\x86\\xa0\\x1f\\xf7\"\n\"\\x19\\xd4\\x15\\xc0\\xa0\\xa7\\xa5\\xaf\\x1b\\xa8\\x9c\\x74\\x64\\x88\\x8b\\x85\\x8a\\x83\\x1f\\x0b\\xd3\\xf2\\x15\\x87\\x06\\x6c\\x80\\x36\\x1d\\xe9\\x06\\xb7\"\n\"\\xa9\\xa6\\xb3\\x9d\\x81\\x97\\x76\\x90\\x1f\\xa5\\xbc\\x05\\xe1\\x06\\x80\\x5b\\x05\\x86\\x06\\x68\\x6d\\x6f\\x6b\\x6f\\x9d\\x7c\\xac\\x1f\\xf7\\xf3\\x06\\xa6\"\n\"\\xf7\\x0c\\x05\\x8e\\x96\\x8c\\x95\\xf7\\x5d\\x1d\\x87\\x78\\x05\\xfb\\x1e\\x06\\xa7\\xf7\\x15\\x05\\x96\\x06\\x8a\\x85\\x8b\\x88\\x88\\x1a\\x73\\xf7\\x46\\x1d\"\n\"\\x9b\\xd5\\x18\\x90\\x9e\\x8b\\x8c\\x93\\x1a\\xa2\\x78\\x9c\\x72\\x6b\\x75\\x79\\x68\\x80\\x1e\\x80\\x2b\\x1d\\xf7\\x0a\\x06\\x7e\\x52\\x05\\x88\\x7f\\x8a\\x81\"\n\"\\x84\\x1a\\x75\\x9e\\x7a\\xa3\\xb0\\xa1\\xa0\\xb8\\x95\\x1e\\xaf\\xf7\\x36\\x05\\xfc\\x4f\\x27\\x1d\\x92\\x06\\xc2\\xfb\\x62\\x15\\x55\\x06\\xe7\\xf7\\x3f\\x05\"\n\"\\x0b\\xf8\\xb6\\xf7\\x41\\x15\\xac\\x94\\xa0\\xa3\\xa7\\x1a\\x9c\\x80\\x9a\\x7d\\x32\\x1d\\x8c\\x77\\x1b\\xfb\\x43\\x06\\x6b\\x81\\x3b\\x1d\\x7a\\x6a\\x1d\\xe9\"\n\"\\x06\\x7e\\x50\\x05\\x7c\\x63\\x63\\x84\\x5b\\x1b\\x27\\x52\\xb0\\xcd\\x9b\\x8d\\x9c\\x8f\\x9c\\x1f\\x98\\xc8\\x05\\xf1\\xa2\\xe3\\xcf\\xf7\\x00\\x1b\\xd2\\xb7\"\n\"\\x78\\x6b\\x8d\\x1f\\x8d\\x6c\\x8b\\x8b\\x90\\x83\\x08\\x81\\x91\\x99\\x85\\x9a\\x55\\x1d\\x94\\x91\\xa5\\x9c\\xd6\\x18\\x8f\\x9d\\x8b\\x8c\\x94\\x1a\\xa3\\x7b\"\n\"\\x9b\\x72\\x77\\x7e\\x83\\x76\\x7b\\x1e\\x9e\\x65\\x5d\\x95\\x56\\x1b\\x38\\x44\\x73\\x58\\x4b\\x1f\\x48\\x58\\x5d\\x44\\x7b\\x41\\x7c\\x47\\x18\\x86\\x78\\x89\"\n\"\\x77\\x77\\x1a\\x48\\xa4\\x57\\xba\\x6d\\x1e\\x6f\\xb7\\xcc\\x7b\\xd3\\x1b\\xdb\\xbe\\x98\\xba\\xf4\\x1f\\x0b\\xf7\\x5f\\xd1\\x1d\\x7e\\x8a\\x82\\x84\\x1a\\x74\"\n\"\\x9f\\x7a\\xa3\\xd7\\x1d\\xf8\\x6d\\x06\\xad\\xf7\\x28\\x05\\x8e\\x9b\\x8c\\x91\\x92\\x1a\\xa2\\x21\\x1d\\x0e\\xf8\\xdf\\xf8\\x92\\x15\\x8f\\x9c\\x8c\\x90\\x93\"\n\"\\x1a\\xa1\\x79\\x9b\\x71\\x77\\x7f\\x83\\x75\\x7c\\x1e\\x9e\\x6e\\x60\\x96\\x59\\x1b\\xfb\\x24\\xfb\\x0a\\x2d\\xfb\\x06\\x64\\xa2\\x63\\xae\\x75\\x1f\\xa7\\x79\"\n\"\\xa8\\x83\\xcd\\x7f\\xcd\\x7f\\x98\\x88\\x9e\\x80\\x08\\x9a\\x83\\x94\\x7d\\x7e\\x1a\\x5f\\x49\\x67\\x3a\\x4c\\x54\\xa6\\xaa\\x88\\x1e\\x89\\xa6\\xdb\\x1d\\x6d\"\n\"\\x93\\x54\\x95\\x3e\\x9a\\x82\\xae\\x1d\\xb6\\xc6\\xaf\\xd0\\xc6\\xb3\\x73\\x67\\x6b\\x8b\\x8b\\x92\\x82\\x1e\\x82\\x92\\x99\\x85\\x9a\\x1b\\xae\\xa2\\xa1\\xb7\"\n\"\\x95\\x1f\\x0b\\xf7\\x0d\\xf7\\x7c\\x15\\x6f\\xfb\\x15\\x05\\x5f\\x8a\\x6d\\x72\\x68\\x1a\\x6e\\x9d\\x7e\\xb6\\x1e\\xf7\\x61\\x06\\xf7\\x30\\x86\\xf7\\x1a\\xf3\"\n\"\\xad\\xf7\\x2a\\x95\\xb8\\x18\\x90\\x9f\\x8d\\xa0\\xf1\\x1d\\x6f\\xfb\\x12\\x18\\x87\\x06\\x6b\\x81\\x3a\\x1d\\xf7\\x02\\x16\\xd2\\x6b\\x1d\\x9a\\x97\\x95\\x9c\"\n\"\\x3c\\x1d\\x82\\x20\\x1d\\x46\\x06\\xa7\\xf7\\x12\\xf7\\x4f\\x1d\\x63\\x1a\\x7e\\x8a\\x7e\\x88\\x7d\\x1e\\x81\\x60\\x76\\x2b\\x3e\\x50\\x29\\x8f\\x19\\x22\\x06\"\n\"\\x0e\\x8c\\x76\\x1b\\x31\\x25\\x1d\\x79\\x91\\x81\\x9e\\x81\\x1e\\xfb\\x00\\x2a\\x49\\xeb\\x05\\xab\\x9a\\x9a\\x9d\\xa4\\x51\\x1d\\x82\\x20\\x1d\\x30\\x06\\x6b\"\n\"\\x81\\x88\\x7f\\x30\\x1d\\x90\\x89\\x92\\x8a\\x98\\x8a\\xf7\\x08\\xfb\\x40\\x18\\xfb\\x61\\xfb\\x4e\\x05\\x60\\x8a\\x6d\\x72\\x68\\x1a\\x6d\\x9d\\x7f\\xb6\\x1e\"\n\"\\xf7\\x02\\x06\\xa8\\x99\\x29\\x1d\\xa4\\x7e\\x98\\x71\\x8e\\x1e\\xf7\\x09\\xf5\\xd1\\x22\\x05\\x65\\x87\\x71\\x72\\x6b\\x1a\\x6d\\x9d\\x7f\\xb6\\x1e\\xf7\\x02\"\n\"\\x06\\xa9\\x98\\x28\\x1d\\x9b\\x3e\\x1d\\x86\\x84\\x8c\\x7d\\x1b\\x0e\\xf8\\x8b\\xf8\\x4b\\x15\\x8f\\x1d\\x65\\x79\\x5a\\x5e\\x1e\\x2d\\x24\\x71\\x70\\x73\\x7b\"\n\"\\x7e\\x8c\\x19\\x88\\x06\\xa3\\xf7\\x00\\x05\\xcb\\x8c\\xa0\\x98\\xb1\\xe2\\x1d\\xa6\\x06\\xa9\\x8d\\xa4\\x70\\x9e\\x53\\xab\\x27\\x18\\xa1\\x4c\\x8e\\x89\\xd0\"\n\"\\x89\\x08\\xf5\\x1d\\x0b\\xf7\\x8d\\xd1\\x1d\\x7d\\x8a\\x84\\x83\\x1a\\x74\\x9e\\x7a\\xa4\\xd7\\x1d\\x0b\\xf9\\x31\\xf8\\xef\\x15\\xca\\x1d\\xfb\\x5e\\xf7\\x7c\"\n\"\\xf7\\x00\\x1d\\x0b\\xf7\\x3a\\xa5\\x15\\x70\\xb5\\xb2\\x7f\\xbe\\x1b\\xdf\\xe7\\xb5\\xd1\\xd1\\x1f\\xd1\\xd0\\xb2\\xe7\\xe8\\x1a\\xb6\\x85\\xa3\\x76\\xb7\\x1e\"\n\"\\xcb\\xc7\\x05\\xa4\\xa4\\x91\\x94\\x9e\\x1a\\xa2\\x79\\x9c\\x72\\x77\\x81\\x86\\x71\\x71\\x1e\\x53\\x56\\x05\\xa9\\x62\\x5e\\x9a\\x56\\x1b\\xfb\\x4b\\xfb\\x41\"\n\"\\xfb\\x45\\xfb\\x4f\\x5c\\x94\\x68\\xa2\\x64\\x1f\\x44\\x47\\x05\\x70\\x72\\x86\\x82\\x78\\x1a\\x75\\x9e\\x7a\\xa4\\x9f\\x95\\x90\\xa4\\xa5\\x1e\\xf8\\x48\\xf8\"\n\"\\x33\\x15\\x90\\x78\\x8c\\x81\\x79\\x1a\\xfb\\x10\\xfb\\x01\\xfb\\x09\\xfb\\x08\\x73\\x7a\\x8f\\x98\\x72\\x1e\\x50\\xd1\\x15\\x83\\xa3\\x89\\x97\\xa0\\x1a\\xf7\"\n\"\\x0f\\xf7\\x02\\xf7\\x0a\\xf7\\x05\\xa8\\xa2\\x84\\x7c\\xa3\\x1e\\x0b\\xf8\\x3d\\x75\\x1d\\xee\\x9f\\x1d\\x9c\\x81\\x9a\\x7c\\x91\\x1e\\x8d\\x85\\x84\\x8c\\x7e\"\n\"\\x1b\\x0b\\xcc\\xf2\\x15\\x80\\x06\\x6c\\x80\\x36\\x1d\\xf7\\xbb\\x06\\xd4\\xc7\\x9f\\xb4\\xb7\\x1f\\xb0\\xac\\xa3\\xbc\\xb5\\x1a\\xb9\\x72\\xb0\\x59\\xa6\\x1e\"\n\"\\xc5\\xaf\\xa8\\xba\\xc1\\x1a\\xac\\x7d\\xac\\x72\\xa2\\x1e\\xa9\\x6c\\x62\\x98\\x51\\x1b\\xfb\\x90\\xf7\\x39\\x1d\\xb6\\x1e\\x95\\x06\\xdb\\xfb\\x13\\x15\\xa7\"\n\"\\xf7\\x13\\x05\\xf7\\x16\\x06\\xc1\\xaa\\x7a\\x6e\\x5d\\x51\\x68\\x3e\\x1f\\xfb\\x33\\xfb\\x7b\\x15\\xa7\\xf7\\x14\\x05\\xf7\\x18\\x06\\xd5\\xb9\\x71\\x60\\x65\"\n\"\\x65\\x76\\x43\\x1f\\x0e\\xf7\\xc5\\x16\\xf7\\x27\\x06\\xbd\\xab\\xa3\\xb0\\xa4\\x7e\\x98\\x6f\\x8f\\x1f\\xba\\xf7\\x6f\\xf7\\x62\\x1d\\xa1\\x1a\\xa6\\x76\\x9a\"\n\"\\x63\\x1e\\xfb\\x0d\\x06\\x59\\x6b\\x74\\x66\\x6e\\x9f\\x7d\\xb4\\x1f\\x94\\x06\\x5c\\xfb\\x6e\\x05\\xfb\\x70\\x06\\xba\\xf7\\x6e\\x05\\x97\\x06\\xbd\\xab\\xa2\"\n\"\\xaf\\xa8\\x76\\x9a\\x63\\x1f\\xfb\\x0d\\x60\\x1d\\x5c\\xfb\\x6e\\x05\\x63\\x85\\x72\\x74\\x6b\\x1a\\x6f\\x9f\\x7c\\xb4\\x1e\\xf7\\x25\\x06\\x81\\x61\\x05\\x88\"\n\"\\x7e\\x89\\x7f\\x85\\x1a\\x76\\xa2\\x7a\\xaa\\xac\\x9a\\x9b\\xbe\\x96\\x1e\\x0e\\xf9\\x10\\xf8\\x15\\x15\\xa7\\xa0\\x94\\x98\\x9f\\x1a\\xa2\\x79\\x9c\\x72\\x7a\"\n\"\\x80\\x86\\x77\\x72\\x1e\\x53\\x5e\\x05\\x9c\\x68\\x5b\\x96\\x5d\\x1b\\xfb\\x36\\xfb\\x2b\\xfb\\x14\\xfb\\x1e\\x66\\x94\\x6c\\x9d\\x6e\\x1f\\x53\\x5d\\x05\\x6e\"\n\"\\x75\\x83\\x7e\\x77\\x1a\\x74\\x9d\\x7a\\xa4\\x9c\\x94\\x8f\\xa1\\xa6\\x1e\\xcd\\xc0\\x05\\x79\\xb0\\xb3\\x82\\xb9\\x1b\\xf7\\x38\\xf7\\x2b\\xf7\\x14\\xf7\\x1f\"\n\"\\xae\\x83\\xa8\\x7a\\xa9\\x1f\\x2e\\x40\\x15\\x91\\x7c\\x8d\\x83\\x7d\\x1a\\x3c\\x34\\x48\\x26\\x7c\\x83\\x8c\\x8f\\x7a\\x1e\\x3f\\xc3\\x15\\x85\\x97\\x87\\x99\"\n\"\\x97\\x1a\\xda\\xe1\\xcf\\xee\\x9b\\x95\\x8a\\x86\\xa0\\x1e\\x0b\\xf8\\x52\\xf8\\x1e\\x15\\xa7\\x6d\\x5d\\x9b\\x58\\x1b\\xfb\\x32\\xfb\\x1e\\xfb\\x14\\xfb\\x27\"\n\"\\x23\\xdb\\x42\\xf7\\x08\\xbd\\xbb\\x99\\xa8\\xbb\\x1f\\x81\\x60\\x82\\x5c\\x5e\\x6a\\x55\\x8c\\x19\\xfb\\x01\\x4a\\x1d\\xf7\\x03\\x06\\xf7\\x04\\xf1\\xd9\\xf1\"\n\"\\xa0\\x1f\\xd6\\xf7\\xe6\\x05\\x98\\x06\\xaa\\x97\\x8e\\x97\\x9a\\x1f\\x9a\\x97\\x94\\x9c\\x9c\\x1a\\x9d\\x81\\x9b\\x7d\\x8f\\x1e\\x8e\\x81\\xf7\\x3a\\x1d\\x3a\"\n\"\\x43\\x38\\x49\\x5e\\xb3\\xc5\\xd7\\xdb\\xd2\\xe1\\x1f\\x0b\\xf8\\x61\\x15\\xf0\\x06\\x78\\x37\\x05\\x88\\x7f\\x8a\\x81\\x85\\x1a\\x74\\xf7\\x2a\\x1d\\x8f\\x93\"\n\"\\x91\\xa7\\xb5\\xf7\\x50\\x18\\xfc\\xa0\\x66\\x1d\\x83\\x84\\x1a\\x74\\xa6\\x1d\\x94\\x91\\xa6\\x9e\\xe0\\x18\\xee\\x06\\x3b\\xfb\\xfa\\x82\\x1d\\xf7\\x7b\\x06\"\n\"\\xa7\\x9a\\x8f\\x96\\x99\\x92\\x1d\\x4e\\x06\\x0b\\xf8\\x61\\x15\\xf7\\x63\\x06\\x79\\x38\\x05\\x86\\x77\\x8b\\x8a\\x83\\x1a\\x74\\x9e\\x7a\\xa4\\x9d\\x9c\\x92\"\n\"\\x99\\x98\\x1e\\x96\\x96\\x8e\\x92\\x91\\xa7\\xb5\\xf7\\x50\\x18\\xfc\\x70\\x06\\x6e\\x7d\\x87\\x80\\x7d\\x1f\\x7b\\x7f\\x82\\x79\\x7a\\x1a\\x7f\\x90\\x80\\x95\"\n\"\\x83\\x1e\\x83\\x94\\x93\\x89\\xa8\\x1b\\xbe\\x06\\x3c\\xfb\\xfa\\x05\\x55\\xaa\\x1d\\x7b\\x7f\\x82\\x79\\x7a\\x1a\\x7f\\x90\\x80\\x95\\x83\\x1e\\x83\\x94\\x93\"\n\"\\x89\\xa8\\x1b\\xf7\\x69\\x5e\\x1d\\x58\\x06\\x0e\\xf7\\xb7\\xf8\\x3d\\x15\\xfb\\x06\\x06\\x58\\x6c\\x73\\x66\\x6b\\x99\\x82\\xbb\\x8a\\x1f\\x5b\\xfb\\x6e\\x05\"\n\"\\x7c\\x06\\x64\\x6c\\x6f\\x69\\x6d\\x9c\\x7f\\xb6\\x1f\\xf7\\x09\\x06\\xbd\\xaa\\xa2\\xb1\\xaa\\x7c\\x96\\x5c\\x8c\\x1f\\xa1\\xef\\x95\\xb8\\x96\\xa2\\xa4\\xa1\"\n\"\\x19\\xa5\\xa8\\xa9\\x99\\xa6\\x1b\\xa7\\x9f\\x78\\x70\\x83\\x88\\x7a\\x85\\x70\\x1f\\x37\\xfc\\x00\\x05\\x86\\x74\\x89\\x7f\\x84\\x1a\\x72\\x9d\\x7b\\xa6\\x9f\"\n\"\\x9d\\x93\\x9a\\x98\\x1e\\x93\\x93\\x8e\\x96\\x93\\xac\\xdf\\xf8\\x00\\x18\\x91\\xa5\\x8e\\xa5\\xa1\\x1a\\xdd\\x56\\xc0\\x39\\x62\\x6b\\x80\\x71\\x67\\x1e\\x0b\"\n\"\\xcb\\x1d\\x9b\\x97\\x94\\x9d\\x3c\\x1d\\x83\\x84\\x8b\\x77\\x1b\\x6d\\x06\\x0b\\xf7\\x8c\\xf8\\x61\\x15\\xb2\\x8e\\x9e\\x9d\\xaa\\x1a\\xb0\\x74\\x99\\x4b\\x1e\"\n\"\\x4c\\x06\\x4c\\x73\\x7d\\x67\\x69\\x9f\\x7b\\xb4\\x88\\x1f\\xf3\\xfb\\xad\\x6a\\x64\\x77\\x72\\x6e\\x73\\x81\\x8a\\x19\\x8f\\x9b\\x8c\\x95\\x94\\x1a\\xa8\\x77\"\n\"\\x9d\\x6b\\x67\\x7c\\x7a\\x57\\x7f\\x1e\\x7e\\x51\\x05\\x89\\x7f\\x8a\\x87\\x88\\x1a\\x76\\xc1\\x76\\xc0\\xc6\\xc0\\xab\\xd0\\xc3\\x1e\\xf7\\xc3\\xf8\\x0a\\x05\"\n\"\\xbe\\x8d\\xa2\\x9b\\xaf\\x1a\\xaf\\x73\\x99\\x4c\\x1e\\x3d\\x06\\x4c\\x73\\x7d\\x66\\x6f\\x99\\x7b\\xab\\x84\\x1f\\xfb\\x28\\xfb\\x4a\\x05\\x0b\\xe8\\xf2\\x15\"\n\"\\x5f\\x8a\\x6d\\x72\\x68\\x1a\\x6e\\x9d\\x7e\\xb6\\x1e\\xf7\\x61\\x06\\xf7\\x2f\\x86\\xf7\\x1b\\xf3\\xad\\xf7\\x2a\\x95\\xb8\\x18\\x90\\xa0\\x8d\\x9f\\xf1\\x1d\"\n\"\\x08\\xa8\\xfb\\xfa\\x15\\xda\\xf7\\xfa\\xf7\\x4f\\x1d\\x64\\x1a\\x7d\\x8a\\x7e\\x88\\x7d\\x1e\\x81\\x5f\\x76\\x2c\\x3e\\x50\\x29\\x8f\\x19\\x0b\\xd4\\x1d\\x81\"\n\"\\x9b\\x7c\\x32\\x1d\\x8c\\x77\\x1b\\xfb\\x17\\x42\\x1d\\x7b\\x1f\\x7b\\x7f\\x82\\x78\\x78\\x1a\\x76\\x96\\x7f\\xa5\\x87\\x1e\\x62\\xfc\\x62\\x05\\xf7\\x0a\\x06\"\n\"\\x0b\\xf8\\x5d\\xf8\\x60\\x15\\x3c\\xfb\\xf8\\x05\\x7f\\x06\\x5a\\x6a\\x73\\x67\\x6d\\x9e\\x7d\\xb5\\x1f\\xf7\\x0d\\x06\\xbe\\xaa\\xa2\\xb1\\xaa\\x7c\\x96\\x5c\"\n\"\\x8c\\x1f\\xdb\\xf7\\xf9\\x05\\xb2\\x90\\xa4\\xa2\\xac\\x1a\\xa9\\x7a\\x97\\x5f\\x1e\\xfc\\x18\\x06\\x56\\x6e\\x76\\x63\\x6e\\x9a\\x7d\\xa8\\x1f\\x91\\x06\\x3c\"\n\"\\xfb\\xf9\\x05\\x73\\x7d\\x8a\\x86\\x81\\x1f\\x76\\x82\\x7b\\x73\\x74\\x1a\\x6e\\x9d\\x7f\\xb6\\x1e\\xf7\\x0d\\x06\\xbd\\xaa\\xa2\\xb1\\xa9\\x7a\\x98\\x5f\\x1f\"\n\"\\x82\\x06\\xda\\xf7\\xf8\\x05\\x0e\\xf8\\x6a\\xf3\\x15\\xda\\xf7\\xf8\\x05\\xc5\\x8d\\x7d\\x1d\\x05\\x60\\x43\\x5e\\x7a\\x61\\x1b\\x70\\x7e\\x94\\x9d\\x96\\x8e\"\n\"\\xa0\\x8e\\x98\\x1f\\xa5\\xf7\\x08\\x05\\xcc\\x8c\\xa0\\x98\\xb1\\x1a\\xb2\\x74\\x98\\x4b\\x1e\\x33\\x06\\x4c\\x73\\x7d\\x67\\x68\\xa0\\x7a\\xb8\\x8a\\x1f\\x72\"\n\"\\xfb\\x04\\x05\\x86\\x75\\x88\\x73\\x7c\\x1a\\x44\\xc5\\x59\\xdd\\xbb\\xb9\\x97\\xa3\\xba\\x1e\\x75\\x28\\x05\\x0b\\xfb\\x0d\\x06\\x6b\\x81\\x88\\x7f\\x7c\\xf7\"\n\"\\x3f\\x1d\\x8b\\x9e\\x1b\\x96\\x06\\x73\\x20\\x05\\xa9\\x68\\x5f\\x99\\x52\\x1b\\x30\\x42\\x6f\\x4f\\x4e\\x1f\\x57\\x59\\x6c\\x45\\x4a\\x1a\\x55\\xa3\\x58\\xb3\"\n\"\\x6a\\x1e\\x71\\xac\\xbd\\x7d\\xc8\\x1b\\xc4\\xb4\\x96\\xab\\xc4\\x1f\\x84\\x6d\\x05\\xf7\\x0d\\x06\\xaa\\x97\\x8e\\x97\\x99\\x1f\\x9b\\xf7\\x33\\x1d\\x80\\x06\"\n\"\\x0b\\xb7\\x8c\\xa9\\xa4\\xae\\x1a\\x9c\\x2c\\x1d\\xfb\\x16\\x06\\x6b\\xe7\\x1d\\xa9\\x06\\x51\\xfb\\x9b\\xfb\\x3f\\xf8\\x02\\x05\\xfb\\x09\\x06\\x6b\\x80\\x88\"\n\"\\x7f\\x7d\\xf7\\x2f\\x1d\\x60\\x6d\\x72\\x67\\x6d\\x9d\\x7f\\xb6\\x1f\\xf7\\x15\\x6b\\x1d\\x0b\\x15\\x90\\x88\\x91\\x87\\x93\\x86\\x08\\x7a\\xa4\\x99\\x85\\x9e\"\n\"\\x1b\\xa7\\xa7\\x9b\\xb4\\xb6\\x1f\\xa4\\xa2\\x92\\x96\\x9b\\x1a\\x9e\\x7d\\x9a\\x79\\x80\\x80\\x85\\x80\\x81\\x1e\\x68\\x6c\\x7e\\x81\\x7c\\x1b\\x83\\x8b\\x8b\"\n\"\\xa5\\x63\\x1f\\xaa\\x5c\\x81\\x90\\x73\\x1b\\x67\\x68\\x77\\x60\\x65\\x1f\\x7a\\x79\\x85\\x7f\\x7d\\x1a\\x79\\x99\\x7e\\x9e\\x95\\x94\\x8f\\x93\\x93\\x1e\\xb4\"\n\"\\xb6\\x95\\x93\\x97\\x1b\\x92\\x90\\x88\\x7d\\xa0\\x1f\\x0e\\xbc\\xf7\\x6e\\x05\\xc2\\x8c\\x9f\\x99\\xaf\\x1a\\xb1\\x74\\x99\\x4b\\x1e\\x42\\x06\\x4c\\x73\\x7d\"\n\"\\x66\\x6a\\xa0\\x7a\\xb5\\x89\\x1f\\x7e\\x4e\\x05\\x6f\\x4d\\x5f\\x7f\\x5c\\x1b\\x78\\x7f\\x90\\x94\\x8d\\x8c\\x8e\\x8e\\x9c\\x1f\\x9a\\xcc\\x05\\xc9\\xa1\\x98\"\n\"\\xb1\\xb1\\x74\\x99\\x4a\\x1f\\x3d\\x06\\x4c\\x73\\x7d\\x66\\x6b\\x9e\\x7a\\xb4\\x88\\x1f\\x7e\\x50\\x05\\x87\\x78\\x89\\x7e\\x7d\\x1a\\x4e\\xc2\\x63\\xde\\xb4\"\n\"\\xb3\\x93\\x9d\\xba\\x1e\\x0b\\x08\\xe9\\xb7\\xba\\xc6\\xd4\\x1a\\xe3\\x43\\xc1\\xfb\\x09\\x1e\\xfb\\x73\\x27\\x1d\\x95\\x06\\x3b\\xfb\\xf9\\x05\\x80\\x06\\x6b\"\n\"\\x81\\x88\\x7f\\x7c\\x1f\\x7b\\x7e\\x31\\x1d\\xb6\\x1e\\xf7\\x29\\x06\\xa8\\x9a\\x8f\\x96\\x98\\x1f\\x9a\\x97\\x95\\x9d\\x3c\\x1d\\x83\\x20\\x1d\\x6d\\x06\\x0b\"\n\"\\xd5\\x1d\\xa3\\xbf\\x48\\x1d\\x0b\\xf8\\xc9\\x15\\x9e\\x97\\x93\\xf7\\x07\\x1d\\x95\\x8f\\x94\\x99\\x1e\\xfb\\x10\\xe6\\x15\\x64\\x1d\\xf7\\xd7\\x16\\x64\\x1d\"\n\"\\x0b\\xf7\\x7c\\x15\\xd8\\x06\\x8a\\x89\\x05\\x87\\x79\\x8b\\x8a\\x82\\x1a\\x74\\xa9\\x1d\\x8e\\x93\\x91\\xa6\\xa3\\xf7\\x00\\x18\\x90\\x9d\\x8b\\x8e\\x93\\x1a\"\n\"\\xa2\\x78\\x9c\\x72\\x7a\\x7a\\x83\\x7e\\x7e\\x1e\\x80\\x80\\x88\\x84\\x84\\x6f\\x8a\\x87\\x18\\x3f\\x2b\\x1d\\xf7\\x76\\x06\\x81\\x60\\x05\\x88\\x0b\\xf7\\x0b\"\n\"\\x1d\\xae\\xa2\\xa2\\xb7\\x95\\x1e\\x8c\\x90\\x05\\xf7\\x02\\x1d\\x0b\\x1f\\x9b\\x98\\x94\\x9c\\x9c\\x1a\\x9c\\x2c\\x1d\\xfb\\x29\\x42\\x1d\\x7c\\xf7\\x2f\\x1d\"\n\"\\x80\\x06\\x6c\\x80\\x89\\xf7\\x57\\x1d\\xb6\\x1e\\xf7\\x29\\x06\\xa8\\x0b\\x81\\x9a\\x7c\\x90\\x1e\\x8e\\x82\\x85\\x8c\\x77\\x1b\\xfb\\x17\\x49\\x1d\\x9c\\x7f\"\n\"\\xb7\\x1e\\xba\\x06\\x35\\xfb\\x82\\x71\\xf7\\x5f\\x05\\xfb\\x01\\x06\\xfb\\x09\\xfb\\x5e\\x9f\\xf7\\x81\\x05\\xb8\\x06\\xa9\\x98\\x8e\\x97\\xf7\\x49\\x1d\\x0b\"\n\"\\x89\\x1d\\xfb\\x03\\xe0\\x46\\xf7\\x1f\\xdc\\xf7\\x07\\x9f\\xa1\\xb7\\x1e\\xa2\\x96\\x98\\x9e\\xa2\\x1a\\xa2\\xf7\\x38\\x1d\\x29\\x72\\x87\\x5d\\x1b\\x37\\x60\"\n\"\\x0b\\x15\\x8c\\x98\\x8c\\x97\\x93\\x1a\\xb9\\x64\\xaf\\x5a\\x59\\x64\\x67\\x5d\\x84\\x8c\\x7e\\x8c\\x7e\\x1e\\xa8\\xfb\\xac\\x05\\x6a\\x8e\\xa1\\x77\\xac\\x1b\"\n\"\\xab\\xa1\\x9f\\xac\\x8e\\x1f\\x5a\\xfb\\x80\\x15\\xb5\\xac\\xaa\\xb2\\xb2\\x6a\\xaa\\x61\\x1f\\x7a\\x06\\x62\\x6a\\x6c\\x64\\x64\\xac\\x6c\\xb4\\x1f\\x0b\\x9c\"\n\"\\x9d\\x93\\x98\\x98\\x1e\\x95\\x95\\x8f\\x95\\x91\\xa5\\xac\\xf7\\x28\\x18\\xfc\\x59\\x27\\x1d\\x90\\x1d\\x6e\\x9d\\x7e\\xb6\\x1e\\x0b\\xda\\x1d\\x0e\\xf8\\x2d\"\n\"\\xf8\\x60\\x15\\xea\\xf7\\x6b\\x1d\\xfb\\xbc\\x06\\x57\\x6d\\x40\\x1d\\xe7\\x06\\x3c\\xfb\\xf8\\x05\\x2c\\x06\\x58\\x6c\\x40\\x1d\\xf7\\xbd\\x06\\xbf\\xa9\\xa2\"\n\"\\xb2\\xa8\\x79\\x98\\x60\\x1f\\x2e\\x06\\x0b\\xf7\\xf5\\xf8\\x49\\x15\\x2e\\x2f\\x65\\x4d\\x50\\x1f\\x5c\\x59\\x6f\\x4e\\x54\\x1a\\xfb\\x03\\xe2\\x40\\xf7\\x16\"\n\"\\xf7\\x39\\xf7\\x2b\\xf7\\x13\\xf7\\x1f\\xf7\\x02\\x34\\xd7\\xfb\\x13\\x1e\\x70\\x24\\x15\\xd9\\xc0\\x63\\x50\\x3c\\x35\\x47\\x28\\x40\\x56\\xb4\\xc5\\xd8\\xe1\"\n\"\\xd1\\xeb\\x1f\\x0b\\x8b\\x8b\\x85\\x93\\x85\\x1d\\x72\\xb9\\xba\\x80\\xc1\\x1b\\xf7\\x31\\xf7\\x09\\xe3\\xf7\\x0b\\xbb\\x6f\\xb4\\x5d\\x9f\\x1f\\x71\\x97\\x0b\"\n\"\\xfb\\x44\\x06\\x9d\\xda\\x05\\x8f\\x9d\\x8b\\x8d\\x93\\x1a\\xa2\\x78\\x9c\\x72\\x67\\x74\\x75\\x5f\\x82\\x1e\\x79\\x3a\\x05\\x6b\\x42\\x1d\\xa2\\x1d\\xa9\\x06\"\n\"\\x5e\\xfb\\x5d\\x05\\x89\\x82\\x8a\\x83\\x7f\\x1a\\x0b\\xf7\\x28\\x1d\\xa7\\xc5\\xab\\x99\\xaf\\xa3\\xa8\\x1f\\xb5\\xaf\\xbc\\xa0\\xca\\x1b\\xb6\\xad\\x83\\x7c\"\n\"\\xa0\\x1f\\x95\\x83\\x8f\\x83\\x7c\\x1a\\x68\\x98\\x7c\\xaa\\xaf\\xa2\\xa1\\xb7\\x95\\x1e\\x0b\\x15\\xf0\\x1d\\x82\\x7d\\x1a\\x7b\\x9a\\x7d\\x9d\\x9a\\x9b\\x94\"\n\"\\x9b\\x99\\x1e\\x0e\\x05\\x80\\x06\\x6c\\x80\\x36\\x1d\\xf7\\x6a\\x7a\\x1d\\x2d\\x06\\x0e\\x1f\\x9a\\x97\\x95\\x9e\\x9b\\x1a\\x9c\\x80\\x9b\\x7d\\x90\\x1e\\x8f\"\n\"\\x82\\x87\\x8b\\x75\\x1b\\xfb\\x16\\x25\\x1d\\x6f\\x9b\\x7e\\xae\\x8a\\x1e\\x51\\xfb\\x98\\x05\\x87\\x7a\\x89\\x7c\\x7e\\x1a\\x0b\\xf8\\x61\\x15\\xb7\\x8c\\xa9\"\n\"\\xa4\\xae\\x51\\x1d\\x82\\x85\\x8c\\x76\\x1b\\xfb\\x15\\x27\\x1d\\xa9\\x06\\x50\\xfb\\xa1\\x05\\x53\\x7e\\x0b\\x1a\\xb1\\x74\\x99\\x4b\\x1e\\x2c\\x06\\x4b\\x74\"\n\"\\x7e\\x66\\x67\\xa3\\x79\\xbb\\x1f\\x8d\\x06\\x3c\\xfb\\xf8\\x05\\x4d\\x74\\x7d\\x64\\x66\\xa2\\x7d\\xcb\\x1f\\xea\\x06\\xca\\xa3\\x99\\xb0\\xaf\\x74\\x9c\\x58\"\n\"\\x1f\\xaa\\xf7\\x24\\x05\\x0b\\x15\\x3d\\x3f\\x44\\x43\\x56\\xb8\\x61\\xc3\\xb5\\xb4\\x9d\\xab\\xac\\x1f\\xa7\\xa8\\x97\\xa6\\xb1\\x1a\\xc1\\x60\\xb3\\x4f\\x1e\"\n\"\\x7f\\x4f\\x15\\xac\\x9f\\x79\\x6d\\x68\\x63\\x67\\x64\\x6b\\x75\\x9e\\xa7\\xb0\\xb2\\xae\\xb4\\x1f\\x0b\\x1f\\x9f\\xe4\\x05\\x8d\\x96\\x8d\\x96\\x92\\x1a\\xa1\"\n\"\\x78\\x9c\\x72\\x67\\x75\\x75\\x5f\\x81\\x1e\\x68\\xfb\\x32\\x05\\x5a\\xeb\\xbd\\x7c\\xc7\\x1b\\xc7\\xc8\\x9e\\xae\\xbd\\x1f\\xc4\\xb3\\xa4\\xb0\\x9a\\xca\\x08\"\n\"\\x0e\\x06\\x4c\\x67\\x6b\\x5f\\x57\\x1a\\x61\\xa9\\x72\\xbe\\xb0\\xba\\x97\\x9c\\xa7\\x1e\\x9a\\x95\\x96\\x9c\\x9a\\x1a\\x9f\\x7d\\x98\\x76\\x83\\x85\\x89\\x86\"\n\"\\x80\\x1e\\x7e\\x6c\\x80\\x87\\x7f\\x1b\\x80\\x86\\x8e\\x92\\xa1\\x0b\\xf7\\x02\\x06\\xad\\xa0\\x9d\\xa8\\x9e\\x7e\\x95\\x70\\x1f\\xfb\\x00\\x06\\x8d\\x98\\x8c\"\n\"\\x91\\x93\\x1a\\xa7\\x7d\\x99\\x6f\\x66\\x77\\x77\\x5a\\x7e\\x1e\\x5e\\x06\\x69\\x76\\x79\\x6e\\x77\\x98\\x82\\xa6\\x1f\\xb6\\x06\\x0b\\x82\\x3b\\x1d\\x6d\\x9c\"\n\"\\x7f\\xb6\\x1e\\x0b\\x7c\\x1f\\x7b\\x7f\\x31\\x1d\\xb6\\x1e\\xf7\\xeb\\x06\\xa8\\x99\\x29\\x1d\\x9c\\x2c\\x1d\\xfb\\x08\\x06\\x0b\\xf9\\x47\\x15\\x97\\x7f\\x87\"\n\"\\x8d\\x7f\\x1b\\x74\\x75\\x77\\x76\\x81\\x91\\x7f\\x98\\x80\\x1f\\xf7\\x0c\\xfb\\x00\\x05\\x82\\x95\\x97\\x85\\x91\\x1b\\xa3\\xa0\\x9f\\xa2\\x96\\x86\\x93\\x7d\"\n\"\\x98\\x1f\\x0e\\x95\\x97\\x1a\\x9b\\x7e\\x96\\x79\\x82\\x83\\x88\\x84\\x81\\x1e\\x85\\x87\\xfb\\xb8\\xfb\\x46\\xf7\\x69\\xfb\\x47\\x05\\x7e\\x99\\x8e\\x8a\\x96\"\n\"\\x1b\\xa1\\xa1\\x9d\\x9e\\x92\\x87\\x94\\x83\\x93\\x1f\\x0b\\xee\\x1d\\x0e\\x99\\x84\\x7c\\x7a\\x7d\\x82\\xf7\\x01\\x1d\\x0b\\x15\\x9e\\x97\\x93\\x97\\x99\\x1a\"\n\"\\x9a\\x80\\x95\\x7b\\x82\\x80\\x87\\x82\\x7e\\x8d\\x1d\\x15\\x3c\\x3f\\x46\\x44\\x52\\xb6\\x62\\xc7\\xdb\\xd7\\xd0\\xd3\\xc3\\x60\\xb4\\x4e\\x1f\\x80\\x50\\x15\"\n\"\\xaa\\xa1\\x77\\x6f\\x67\\x62\\x68\\x62\\x6c\\x75\\x9f\\xa7\\xaf\\xb4\\xae\\xb4\\x1f\\x0b\\x7e\\x84\\x81\\x7f\\x1a\\x7b\\x98\\x80\\x9d\\x94\\x93\\x8e\\x92\\x95\"\n\"\\x1e\\x91\\x8f\\xf7\\xb7\\xf7\\x46\\xfb\\x68\\xf7\\x47\\x05\\x98\\x7c\\x89\\x8c\\x80\\x1b\\x75\\x75\\x79\\x78\\x84\\x0b\\x8c\\x8c\\x8c\\x8c\\x8c\\x8d\\x8f\\x8f\"\n\"\\x8e\\x8d\\x8c\\x8d\\x08\\x93\\x95\\x8e\\x92\\x96\\x1a\\x9d\\x7d\\x98\\x77\\x7b\\x7d\\x83\\x7a\\x7d\\x1e\\x23\\xfb\\x0e\\x05\\x7b\\x7a\\x86\\x0b\\x9f\\x1a\\xf7\"\n\"\\x11\\x37\\xdf\\xfb\\x11\\x1e\\xfb\\x69\\x06\\x6a\\x82\\x3f\\x1d\\x7a\\x7b\\x1a\\x79\\x95\\x7b\\x9a\\x86\\x1e\\x90\\x89\\x92\\x8a\\x98\\x8a\\x0b\\x22\\xee\\xfb\"\n\"\\x26\\x1f\\x7b\\x3d\\x15\\xf6\\xd8\\x43\\x27\\xfb\\x1b\\xfb\\x1e\\xfb\\x16\\xfb\\x23\\xfb\\x03\\x3e\\xd1\\xf1\\xf7\\x1d\\xf7\\x1e\\xf7\\x14\\xf7\\x27\\x1f\\x0e\"\n\"\\x15\\xfb\\x05\\xfb\\x5b\\x05\\x85\\x81\\x88\\x81\\x84\\xf7\\x3e\\x1d\\xc3\\x16\\xfb\\x05\\xfb\\x5b\\x05\\x85\\x0b\\x8a\\x88\\x1f\\x87\\x79\\x05\\x91\\x66\\x6d\"\n\"\\x8e\\x6b\\x1b\\x24\\x35\\x69\\x4e\\x55\\x1f\\x70\\x6d\\x7d\\x6b\\x6e\\x1a\\x4b\\xce\\x5b\\xe6\\xc3\\xc7\\x97\\xa1\\xbf\\x1e\\x0b\\x9e\\x06\\xca\\xa2\\x99\\xb0\"\n\"\\xb2\\x75\\x99\\x4b\\x1f\\x7c\\x06\\x69\\xf7\\x01\\x80\\xb0\\x79\\xa8\\x74\\xa3\\x19\\xaf\\xb1\\xd4\\xdd\\x90\\x91\\x90\\x90\\x97\\x97\\x19\\x0b\\x81\\x9b\\x7c\"\n\"\\x90\\x1e\\x8e\\x83\\x84\\x8b\\x76\\x1b\\x8a\\x06\\xb2\\xf7\\x3f\\x05\\x8e\\x99\\x8c\\x98\\x98\\x1a\\xd5\\x50\\xbc\\x30\\x59\\x58\\x78\\x6a\\x60\\x1e\\x0b\\x15\"\n\"\\xd8\\xb7\\x67\\x4d\\x6e\\x7e\\x6b\\x74\\x71\\x1f\\x63\\x68\\x5d\\x77\\x51\\x1b\\x3f\\x5e\\xaf\\xc9\\xa8\\x98\\xab\\xa2\\xa5\\x1f\\xb3\\xaf\\xb8\\x9f\\xc5\\x1b\"\n\"\\x0b\\x73\\x7b\\x77\\x91\\x94\\x7b\\x1f\\x96\\x79\\x8a\\x8c\\x82\\x1b\\x72\\x74\\x75\\x74\\x7d\\x92\\x81\\x9b\\x81\\x1f\\x7e\\xa1\\xb2\\x81\\xa7\\x1b\\xd5\\xc7\"\n\"\\xc0\\xcd\\x0b\\xf7\\x19\\x06\\xfb\\xc6\\xf7\\x5e\\x1d\\x9b\\x8c\\x8f\\x93\\x1a\\xa2\\x78\\x9c\\x72\\x6b\\x76\\x7a\\x68\\x80\\x1e\\x0b\\x32\\x1d\\x8c\\x77\\x1b\"\n\"\\x2f\\x06\\x6c\\x80\\x2a\\x1d\\x7a\\x1a\\x7e\\x8f\\x82\\x96\\x81\\x1e\\x4b\\x60\\x5f\\x0b\\x05\\xaa\\x97\\x9c\\xa0\\xa6\\x1a\\x9c\\x81\\x9b\\x7c\\x8f\\x1e\\x8e\"\n\"\\x83\\x20\\x1d\\x31\\x06\\x6b\\x81\\x88\\x7f\\x7c\\x1f\\x7b\\x7f\\x82\\x0b\\x15\\xe4\\x31\\x05\\x82\\x94\\x94\\x87\\x95\\x1b\\xa3\\xa2\\xa1\\xa1\\x97\\x8a\\x8c\"\n\"\\x7a\\x9c\\x1f\\xfb\\x12\\xf7\\x11\\xfb\\x4b\\xfb\\x11\\x05\\x6e\\x0b\\x06\\x92\\xac\\x05\\xa1\\x90\\xa0\\x9e\\x9f\\x1b\\x94\\x97\\x89\\x85\\x99\\x1f\\x86\\x9b\"\n\"\\x8f\\x8a\\x95\\x1b\\xad\\xaa\\xa9\\xac\\xab\\x5e\\xa1\\x0b\\x97\\x99\\x1a\\x9a\\x80\\x95\\x7c\\x81\\x81\\x87\\x82\\x7e\\x1e\\xfb\\x13\\x38\\x05\\x79\\x7f\\x82\"\n\"\\x7f\\x7d\\x1a\\x7c\\x96\\x80\\x9b\\x94\\x0b\\x98\\x9f\\x9f\\x3e\\x1d\\x82\\x85\\x8c\\x77\\x1b\\x2e\\x06\\x6c\\x81\\x2a\\x1d\\x0b\\x6f\\x82\\x7e\\x7b\\x71\\x1a\"\n\"\\x69\\xa4\\x79\\xbc\\x1e\\xb0\\x06\\xba\\xa5\\x9d\\xad\\xa3\\x81\\x99\\x73\\x97\\x1f\\x99\\xde\\x95\\x7a\\x8f\\x0b\\x80\\x1a\\x74\\xa1\\x77\\xa4\\xa2\\x9a\\x96\"\n\"\\xad\\x9e\\x1e\\xd8\\xb7\\xc0\\xac\\xdb\\x1b\\xc0\\xad\\x78\\x6d\\x5d\\x50\\x66\\x42\\x1f\\x0b\\xf7\\xa9\\xf2\\x15\\xf7\\xc8\\xf7\\x82\\x9e\\xdf\\x05\\xfc\\x35\"\n\"\\x06\\x73\\x21\\x05\\x89\\x81\\x89\\x7e\\x84\\x1a\\x75\\x9e\\x7a\\xa4\\x0b\\xf7\\x6e\\x15\\xa9\\x97\\x8e\\x97\\x9a\\x1f\\x9b\\x97\\x94\\x9d\\x9c\\x51\\x1d\\x83\"\n\"\\x82\\x8c\\x78\\x1b\\x0b\\x15\\x37\\x06\\xfb\\x55\\xfb\\x7e\\x80\\x56\\x05\\xf7\\x37\\x06\\x88\\x7c\\x05\\x78\\x06\\x6c\\x78\\x7c\\x73\\x79\\x97\\x83\\xa4\\x1f\"\n\"\\x0b\\xfb\\x12\\xf7\\x11\\xfb\\x4a\\xfb\\x11\\x05\\x6e\\x78\\x86\\x84\\x7a\\x1a\\x79\\x98\\x7e\\x9e\\x95\\x94\\x8f\\x94\\x99\\x1e\\x0e\\xfb\\xd5\\x05\\x40\\x06\"\n\"\\xbd\\xf7\\x6e\\x05\\xae\\x94\\x9d\\x9f\\xa9\\x1a\\xa9\\x77\\x99\\x62\\x1e\\x5f\\x06\\x51\\x6c\\x76\\x64\\x0b\\xf7\\x64\\x1d\\x7f\\x7d\\xf7\\x53\\x1d\\x06\\xa8\"\n\"\\x99\\x8f\\x96\\xf7\\x49\\x1d\\x81\\x9b\\x7c\\x91\\x1e\\x8d\\x86\\x84\\x8c\\x7e\\x1b\\x0b\\x05\\xb6\\x91\\xa1\\x9f\\xac\\x1a\\xa9\\x77\\x99\\x61\\x1e\\x48\\x06\"\n\"\\x52\\x6c\\x76\\x64\\x70\\x99\\x7e\\xa9\\x88\\x1f\\x0b\\x1a\\x9c\\x2c\\x1d\\x2f\\x06\\x6b\\x81\\x88\\x7f\\x7c\\x1f\\x7b\\x7f\\x82\\x0b\\xf7\\x11\\x18\\xfb\\x4a\"\n\"\\xfb\\x10\\x05\\x6f\\x78\\x85\\x83\\x4d\\x1d\\x93\\x8e\\x95\\x9a\\x1e\\x0b\\x1f\\x7b\\x7f\\x82\\x79\\x7b\\x1a\\x7a\\x95\\x7b\\x9a\\x86\\x1e\\x0b\\x81\\x87\\x82\"\n\"\\x7e\\x1e\\xfb\\x13\\xf7\\x40\\x1d\\x0b\\xf7\\x27\\x1d\\x88\\x93\\x94\\x8a\\x0b\\x64\\xfb\\x41\\x05\\x89\\x7e\\x89\\x81\\x85\\x1a\\x75\\x9e\\x7a\\xa5\\xad\\xa3\"\n\"\\xa2\\xb6\\x94\\x1e\\x9b\\xd2\\x05\\x0b\\x2a\\x1d\\x7a\\x1a\\x7a\\x6a\\x1d\\x0b\\x29\\x1d\\x9c\\x2c\\x1d\\x0b\\x74\\x75\\x72\\x83\\x91\\x80\\x96\\x81\\x1f\\xf7\"\n\"\\x02\\x21\\x05\\x7e\\x98\\x93\\x87\\x95\\x1b\\xa5\\xa3\\xa1\\x0b\\x1a\\x75\\xb0\\x1d\\x0b\\xaa\\x1d\\x7b\\x7f\\x82\\x79\\x7a\\x1a\\x7a\\x95\\x7c\\x9a\\x86\\x1e\"\n\"\\x87\\x94\\x0b\\xf7\\xb3\\x15\\xf7\\x54\\xf7\\x42\\x05\\xb5\\x8c\\xa9\\xa5\\xad\\x3e\\x1d\\x0b\\x95\\x93\\x87\\x96\\x1b\\xa2\\xa1\\x1d\\xfb\\x4b\\x0b\\xdc\\x06\"\n\"\\xa8\\x9a\\x8f\\x96\\x98\\x1f\\x9b\\x97\\x94\\x9d\\x9b\\x1a\\xaa\\x7b\\x97\\x5e\\x1e\\x81\\x06\\x0b\\x7e\\x8c\\x19\\x88\\x06\\xa3\\xf7\\x00\\x05\\xcb\\x8c\\xa0\"\n\"\\x98\\xb1\\x1a\\xb1\\x74\\x99\\x4b\\x1e\\x0b\\x06\\xa8\\x99\\x29\\x1d\\x9d\\x81\\x9b\\x7c\\x90\\x1e\\x8e\\x0b\\x06\\xa9\\x98\\x8e\\x97\\x99\\x1f\\x9b\\x68\\x1d\"\n\"\\x0b\\xfb\\x33\\x15\\xa6\\x9c\\x79\\x70\\x6d\\x71\\x76\\x67\\x6f\\x79\\x98\\x9f\\xaa\\xac\\xab\\xaa\\x1f\\x0b\\x28\\x1d\\x9c\\x1a\\x97\\x86\\x96\\x81\\x94\\x1e\"\n\"\\x92\\x82\\x83\\x8d\\x0b\\xf7\\x35\\x1d\\xb2\\x8a\\x93\\x0b\\x06\\x6b\\x81\\x2a\\x1d\\x7b\\x1a\\x7a\\x95\\x7b\\x9a\\x86\\x1e\\x0b\\x1a\\xa4\\x78\\x9d\\x72\\x7e\"\n\"\\x81\\x87\\x83\\x7f\\x1e\\x6a\\x5b\\x69\\x82\\x3b\\x1b\\x26\\x5b\\x0b\\x9a\\x80\\x1e\\x84\\x96\\x98\\x88\\xa5\\x1b\\xf8\\xb4\\x06\\xa2\\x98\\x8d\\x91\\x95\\x1f\"\n\"\\x9c\\x0b\\xb0\\x1d\\x95\\x0b\\x86\\x95\\x19\\xad\\x79\\x6c\\x9c\\x5e\\x1b\\x66\\x7a\\x7e\\x65\\x81\\x1f\\x82\\x66\\x05\\x0b\\x15\\xa3\\x9e\\x78\\x74\\x73\\x78\"\n\"\\x78\\x74\\x73\\x78\\x9e\\xa3\\xa1\\x9e\\x9f\\xa2\\x1f\\x0b\\x16\\x62\\x65\\x68\\x66\\x6e\\xa1\\x76\\xa9\\xb4\\xb1\\xae\\xb0\\xa9\\x75\\x9f\\x6d\\x1f\\x0b\\x96\"\n\"\\x96\\x1d\\x0b\\xf7\\x5f\\x1d\\x95\\x06\\x3b\\xfb\\xfa\\x05\\x0b\\x9f\\x1a\\x9d\\x7f\\x97\\x78\\x75\\x81\\x82\\x6b\\x7d\\x1e\\x60\\x77\\x5d\\x70\\x55\\x1b\\x0b\"\n\"\\x31\\x05\\x81\\x94\\x94\\x87\\x95\\x1b\\xa3\\xa2\\xa1\\xa2\\x94\\x88\\x90\\x82\\x94\\x1f\\x0b\\x80\\x1f\\xf7\\x02\\x21\\x05\\x80\\x97\\x94\\x86\\x95\\x1b\\xa5\"\n\"\\xa3\\xa1\\xa2\\x95\\x0b\\x97\\x94\\x9d\\x9b\\x1a\\x9d\\x81\\x9b\\x7d\\x90\\x1e\\x8e\\x82\\x84\\x8b\\x77\\x1b\\x0b\\x1f\\xf7\\x02\\x21\\x05\\x80\\x96\\x95\\x86\"\n\"\\x95\\x1b\\xa5\\xa3\\xa1\\xa2\\x95\\x86\\x0b\\xe1\\x06\\xca\\xa3\\x99\\xaf\\xae\\x75\\x9c\\x5d\\x8c\\x1f\\x9a\\xd2\\x05\\xa2\\x06\\x0b\\x7a\\x1a\\x6d\\x9d\\x7f\"\n\"\\xb6\\x1e\\xf7\\x02\\x06\\xa9\\x99\\x8f\\x96\\x99\\x1f\\x9b\\x0b\\x7c\\x82\\x76\\x77\\x1f\\x6e\\x6f\\x88\\x89\\x7d\\x1b\\x80\\x81\\x90\\x9e\\x6e\\x1f\\x0b\\x7a\"\n\"\\x9c\\x73\\x80\\x7f\\x89\\x88\\x7e\\x1e\\x74\\x0b\\x06\\x6b\\x80\\x88\\x7f\\x7d\\x1f\\x7b\\x7f\\x82\\x7a\\x7a\\x1a\\x6d\\x9c\\x7f\\x0b\\x85\\x8c\\x77\\x1b\\xfb\"\n\"\\x0c\\x06\\xfb\\x2d\\x31\\x15\\xcb\\xb8\\x63\\x51\\x40\\x0b\\x89\\x87\\x82\\xf7\\x71\\x1d\\x92\\x8e\\x8b\\x0b\\x8f\\x9d\\x8b\\x8c\\x93\\x1a\\xa4\\x7b\\x9a\\x71\"\n\"\\x75\\x7e\\x83\\x78\\x80\\x1e\\x0b\\x95\\x9a\\x8d\\x8f\\x9d\\x1e\\x96\\xbb\\xb1\\x90\\xad\\x1b\\xc2\\xa3\\x81\\x74\\x0b\\x1a\\x7e\\x99\\x80\\x9a\\x9a\\x95\\x91\"\n\"\\x9d\\x9b\\x1e\\xf7\\x58\\xf7\\x76\\x05\\x0b\\x1f\\x7b\\x7f\\x82\\x7a\\x7b\\x1a\\x79\\x95\\x7b\\x9a\\x86\\x1e\\x88\\x93\\x94\\x0b\\x38\\x05\\x79\\x7f\\x82\\x7f\"\n\"\\x7d\\x1a\\x7b\\x96\\x81\\x9b\\x94\\x94\\x8f\\x94\\x0b\\x88\\x7f\\xa2\\x1d\\x0b\\x8c\\x77\\x1b\\x31\\x06\\x6b\\x81\\x2a\\x1d\\x0b\\x15\\x63\\x71\\x77\\x6e\\x72\"\n\"\\x99\\x81\\xae\\x1f\\xf7\\x88\\x06\\xb2\\xa6\\x0b\\xac\\x1d\\x9c\\x80\\x95\\x79\\x7a\\x80\\x83\\x78\\x0b\\x1f\\x9a\\x97\\x95\\x9d\\x9c\\x1a\\x9b\\x81\\x9b\\x7c\"\n\"\\x90\\x1e\\x8e\\x82\\x0b\\xb0\\x1d\\x94\\x8f\\x95\\x91\\xa5\\x0b\\x79\\x7a\\x72\\x82\\x8f\\x82\\x90\\x85\\x1f\\x78\\x9e\\xba\\x7c\\xb4\\x1b\\x0b\\x1a\\x9e\\x7d\"\n\"\\x98\\x77\\x7f\\x84\\x88\\x7e\\x0b\\x99\\x1f\\x9a\\x97\\x95\\x9d\\x9b\\x1a\\x9c\\x0b\\x7d\\x98\\x77\\x7f\\x84\\x88\\x7e\\x78\\x1e\\xfb\\x31\\x21\\x05\\x74\\x0b\"\n\"\\x05\\x7d\\xf7\\x6c\\x1d\\xf4\\x06\\x0b\\x1f\\x9a\\x97\\x95\\x9d\\x9b\\x51\\x1d\\x0b\\x9e\\x1a\\x9d\\x82\\x9b\\x7c\\x96\\x1e\\x93\\x7f\\x82\\x8d\\x6e\\x1b\\x0b\"\n\"\\x7e\\x82\\x7b\\x7b\\x1a\\x7e\\xab\\x1d\\x0b\\x05\\xf6\\x06\\xb0\\xa9\\x83\\x7b\\x9e\\x1f\\xa5\\x76\\x9c\\x64\\x0b\\xf7\\x39\\x15\\xab\\xfb\\x39\\x05\\xec\\x06\"\n\"\\xf7\\x2f\\xf7\\xd6\\x0b\\x15\\xe5\\x31\\x05\\x82\\x94\\x93\\x87\\x96\\x1b\\xa3\\xa2\\xa1\\x0b\\xf7\\xfa\\x15\\xc8\\xfb\\x76\\x05\\xeb\\x06\\xf7\\x2e\\xf7\\x74\"\n\"\\x0b\\x1a\\x7b\\x96\\x81\\x9b\\x94\\x95\\x8f\\x94\\x99\\x1e\\x0e\\x83\\x1b\\x85\\x7f\\x92\\x98\\x7c\\x1f\\x0b\\x15\\x70\\x77\\x74\\x6b\\x43\\xcf\\x52\\x0b\\x63\"\n\"\\x65\\x68\\x66\\x6e\\xa1\\x76\\xa9\\x0b\\x7f\\x7c\\x1f\\x7b\\x7e\\x82\\x7a\\x7a\\x1a\\x6e\\x9d\\x7e\\x0b\\x05\\xb1\\x8d\\xa6\\xa5\\xac\\x1a\\xa7\\x76\\x99\\x63\"\n\"\\x1e\\x0b\\x06\\x67\\x6b\\x6e\\x6a\\x70\\xa0\\x7c\\xb3\\x1f\\xaf\\x06\\x0b\\x83\\x1a\\x75\\x9e\\x7a\\xa4\\x9c\\x9d\\x93\\x98\\x98\\x1e\\x0b\\xf7\\x6e\\x05\\xa2\"\n\"\\x06\\xb0\\xab\\xa7\\xac\\xa7\\x76\\x99\\x0b\\x8a\\x19\\x89\\x87\\x84\\x8a\\x82\\x1b\\x80\\x06\\x93\\xb6\\x0b\\x92\\x1a\\xa2\\x78\\x9c\\x72\\x67\\x75\\x75\\x5f\"\n\"\\x81\\x1e\\x0b\\xfb\\x81\\x78\\x36\\x05\\xf8\\x4e\\x06\\x9f\\xe2\\x05\\x8e\\x0b\\x1f\\x7b\\x7f\\x82\\x79\\x7b\\x9d\\x1d\\x0b\\xfb\\x1c\\xf4\\x27\\xf7\\x24\\xf7\"\n\"\\x5c\\xf7\\x4e\\xf7\\x40\\x0b\\x7f\\x7c\\x1a\\x78\\x99\\x7e\\x9f\\x94\\x9a\\x91\\x95\\x0b\\x05\\xa4\\x98\\x8d\\x8f\\x94\\x1f\\xa0\\x94\\x9c\\xa3\\x0b\\x06\\x6b\"\n\"\\x81\\x89\\x7f\\x7c\\x1f\\x7b\\x7e\\x82\\x7a\\x0b\\x87\\x82\\x7e\\x1e\\xfb\\x12\\x38\\x05\\x78\\x7f\\x82\\x0b\\x15\\x98\\x7d\\x86\\x8e\\x7f\\x1b\\x70\\x74\\x75\"\n\"\\x72\\x0b\\x1f\\x7a\\x81\\x80\\x79\\x78\\x1a\\x7a\\x94\\x7a\\x9a\\x0b\\xe1\\x15\\xae\\xa7\\x9e\\xb0\\xb0\\x1a\\xc0\\x64\\xaf\\x0b\\x96\\x80\\x9b\\x99\\x97\\x93\"\n\"\\x9c\\x0b\\x05\\xb4\\x8d\\xa7\\xa4\\xad\\x1a\\x9d\\x81\\x9a\\x0b\\x06\\xbd\\xab\\xa3\\xaf\\xa9\\x77\\x99\\x62\\x1f\\x0b\\x06\\xbf\\xa9\\xa2\\xb2\\xa8\\x78\\x98\"\n\"\\x61\\x1f\\x0b\\x06\\x66\\x6b\\x6e\\x6a\\x6f\\xa0\\x7d\\xb3\\x1f\\x0b\\x06\\x59\\x6b\\x73\\x66\\x6c\\x9d\\x7f\\xb6\\x1f\\x0b\\x86\\x1e\\x88\\x93\\x94\\x8a\\x9e\"\n\"\\x1b\\x96\\x06\\x0b\\xf7\\x78\\xf7\\x67\\x15\\xf7\\x45\\xf7\\x17\\x05\\x0b\\x15\\xfb\\x24\\x06\\xeb\\xfb\\x78\\x05\\x78\\x93\\x0b\\x1e\\x88\\x83\\x86\\x8a\\x87\"\n\"\\x1b\\x83\\x88\\x8e\\x0b\\x1f\\xa0\\xa1\\x94\\x99\\x98\\x1a\\x99\\x7d\\x97\\x0b\\xfb\\x10\\x05\\x6e\\x77\\x86\\x84\\x7a\\x1a\\x79\\x0b\\x78\\x9c\\x72\\x7a\\x79\"\n\"\\x83\\x7e\\x7e\\x1e\\x81\\x0b\\x06\\x73\\xfb\\x00\\x05\\xf7\\x13\\x06\\x0e\\x01\\x00\\x01\\xe3\\x01\\x05\\x00\\x01\\x0a\\x02\\x01\\x40\\x03\\x01\\x87\\xff\\x02\"\n\"\\x87\\xa0\\x02\\x8e\\x02\\x00\\x01\\x00\\x02\\x00\\x03\\x00\\x39\\x00\\x71\\x01\\x31\\x02\\x06\\x02\\x84\\x03\\x15\\x03\\x35\\x03\\x7d\\x03\\xc4\\x04\\x31\\x04\"\n\"\\x6f\\x04\\x71\\x04\\x73\\x04\\x7a\\x04\\xa5\\x05\\x06\\x05\\x38\\x05\\x9d\\x06\\x16\\x06\\x66\\x06\\xd3\\x07\\x4b\\x07\\x83\\x07\\xec\\x08\\x64\\x08\\x83\\x08\"\n\"\\xa9\\x08\\xf3\\x09\\x0a\\x09\\x54\\x09\\xbe\\x0a\\x62\\x0a\\x65\\x0a\\xc9\\x0a\\xcc\\x0a\\xcf\\x0a\\xdf\\x0b\\x31\\x0b\\x34\\x0b\\x59\\x0b\\x5c\\x0b\\x87\\x0b\"\n\"\\x8a\\x0b\\x8d\\x0b\\xeb\\x0b\\xee\\x0b\\xf1\\x0b\\xff\\x0c\\x9f\\x0c\\xa2\\x0c\\xa5\\x0c\\xa8\\x0c\\xab\\x0c\\xfe\\x0d\\x26\\x0d\\x2f\\x0d\\x3b\\x0d\\x51\\x0d\"\n\"\\x89\\x0d\\xb4\\x0d\\xee\\x0e\\x22\\x0e\\x3c\\x0e\\x4d\\x0e\\x50\\x0e\\xc4\\x0e\\xc7\\x0e\\xca\\x0e\\xcd\\x0f\\x22\\x0f\\x25\\x0f\\x69\\x0f\\x71\\x0f\\xa6\\x0f\"\n\"\\xa9\\x0f\\xac\\x10\\x28\\x10\\x2b\\x10\\x2e\\x10\\x32\\x10\\xb8\\x10\\xbb\\x10\\xbe\\x10\\xc1\\x10\\xc4\\x11\\x0f\\x11\\x12\\x11\\x1f\\x11\\x22\\x11\\x38\\x11\"\n\"\\xb1\\x11\\xbe\\x12\\x36\\x12\\x72\\x12\\xb9\\x13\\x43\\x13\\xc4\\x13\\xc6\\x14\\x72\\x14\\xde\\x15\\x8e\\x16\\x2e\\x16\\x4c\\x16\\x6e\\x16\\x86\\x16\\xb5\\x16\"\n\"\\xc8\\x17\\x29\\x17\\xbd\\x17\\xbf\\x18\\x08\\x18\\x6d\\x18\\x6f\\x18\\xf8\\x19\\x0f\\x19\\x11\\x19\\x1f\\x19\\x3a\\x19\\x82\\x19\\x92\\x19\\xcf\\x1a\\x3c\\x1a\"\n\"\\x58\\x1a\\x5e\\x1a\\x64\\x1a\\x97\\x1a\\x99\\x1a\\x9f\\x1a\\xa5\\x1a\\xab\\x1a\\xb1\\x1a\\xc7\\x1a\\xcd\\x1a\\xed\\x1a\\xf3\\x1a\\xf5\\x1a\\xf8\\x1b\\x77\\x1b\"\n\"\\xe2\\x1b\\xe5\\x1c\\x65\\x1c\\x92\\x1c\\x95\\x1c\\x9a\\x1c\\xea\\x1c\\xed\\x1d\\x6f\\x1d\\xff\\x1e\\x38\\x1e\\x58\\x1e\\xd5\\x1f\\x96\\x1f\\x98\\x20\\x1f\\x20\"\n\"\\x59\\x20\\xb6\\x21\\x02\\x21\\x3a\\x21\\x70\\x21\\x9e\\x21\\xd4\\x22\\x22\\x22\\x7e\\x22\\xfd\\x23\\x0a\\x23\\xab\\x24\\x06\\x24\\x74\\x24\\xef\\x25\\x12\\x25\"\n\"\\x2d\\x25\\x34\\x25\\x4c\\x25\\x78\\x25\\xc3\\x26\\x30\\x26\\x60\\x26\\x82\\x26\\xaa\\x26\\xdb\\x26\\xe1\\x27\\x02\\x27\\x09\\x27\\x16\\x27\\x6b\\x27\\x97\\x27\"\n\"\\x9e\\x27\\xb5\\x27\\xc2\\x28\\x0d\\x28\\xc7\\x28\\xe3\\x29\\x07\\x29\\x15\\x29\\x2c\\x29\\x57\\x29\\x75\\x29\\xde\\x2a\\x77\\x2a\\x96\\x2a\\xc3\\x2a\\xca\\x2a\"\n\"\\xf6\\x2b\\xb5\\x2c\\x4d\\x2c\\x7e\\x2c\\xb1\\x2c\\xcc\\x2c\\xf2\\x2d\\x3f\\x2d\\x63\\x2d\\x98\\x2d\\xaf\\x2e\\x02\\x2e\\x24\\x2e\\x51\\x2e\\x62\\x2e\\x8d\\x2e\"\n\"\\xcb\\x2f\\x49\\x2f\\x97\\x2f\\xdf\\x30\\x03\\x30\\x54\\x30\\x5c\\x30\\x72\\x30\\xcf\\x31\\x41\\x31\\xae\\x32\\x18\\x32\\x9c\\x32\\xfb\\x33\\x67\\x34\\x01\\x34\"\n\"\\x6e\\x34\\x8c\\x34\\x93\\x34\\x95\\x34\\xfc\\x35\\x03\\x35\\x66\\x35\\x96\\x35\\x98\\x35\\xae\\x35\\xe8\\x35\\xf0\\x35\\xf8\\x35\\xfa\\x35\\xff\\x36\\x01\\x36\"\n\"\\x1c\\x36\\x30\\x36\\x43\\x36\\x56\\x36\\x6a\\x36\\xa1\\x36\\xc2\\x36\\xc4\\x37\\x69\\x37\\x78\\x37\\xab\\x38\\x56\\x38\\x5a\\x38\\x62\\x38\\x69\\x38\\x71\\x38\"\n\"\\x78\\x39\\x18\\x39\\x2c\\x39\\xaa\\x39\\xbc\\x39\\xc1\\x39\\xc8\\x39\\xfc\\x39\\xfe\\x3a\\x1b\\x3a\\x3c\\x3a\\x6b\\x3a\\xc2\\x3a\\xda\\x3a\\xe1\\x3a\\xe7\\x3b\"\n\"\\x1b\\x3b\\x3a\\x3b\\x41\\x3b\\x5a\\x3b\\x5c\\x3b\\x62\\x3b\\x68\\x3b\\x70\\x3b\\x88\\x3b\\x91\\x3b\\xaa\\x3b\\xb1\\x3c\\x28\\x3c\\x2d\\x3c\\x97\\x3c\\xb5\\x3d\"\n\"\\x52\\x3d\\x54\\x3d\\xec\\x3d\\xf4\\x3e\\x2d\\x3e\\x34\\x3e\\x36\\x3e\\x3d\\x3e\\xea\\x3f\\x02\\x3f\\x0a\\x3f\\x5c\\x3f\\x5e\\x3f\\xd0\\x3f\\xd5\\x40\\x41\\x40\"\n\"\\xc9\\x40\\xe3\\x40\\xfc\\x41\\x13\\x41\\x3a\\x41\\x46\\x41\\xbe\\x42\\x1d\\x42\\x25\\x42\\x8f\\x42\\xb6\\x42\\xe3\\x43\\x00\\x43\\x2d\\x43\\xe2\\x43\\xf2\\x44\"\n\"\\x00\\x44\\x13\\x44\\x25\\x44\\x53\\x44\\x5b\\x44\\x62\\x44\\x64\\x44\\x66\\x44\\xc5\\x44\\xc7\\x44\\xcb\\x45\\x39\\x45\\x3b\\x45\\xc3\\x46\\x95\\x47\\x18\\x47\"\n\"\\x1b\\x47\\x46\\x47\\x49\\x47\\xae\\x47\\xb0\\x47\\xbf\\x47\\xc4\\x47\\xc6\\x47\\xc8\\x47\\xcb\\x47\\xcd\\x47\\xd0\\x48\\x65\\x48\\x67\\x48\\x89\\x48\\xd8\\x49\"\n\"\\x1b\\x49\\x72\\x49\\xd2\\x4a\\x52\\x4a\\x99\\x4b\\x1f\\x4b\\xa0\\x4c\\x2f\\x4c\\x76\\x4d\\x0c\\x4d\\x4c\\x4d\\xcd\\x4d\\xd0\\x4d\\xd2\\x4d\\xf0\\x4e\\x15\\x4e\"\n\"\\xa3\\x4f\\x41\\x4f\\xec\\x50\\x00\\x50\\x2b\\x50\\x48\\x50\\xb5\\x51\\x08\\x51\\x0b\\x51\\x83\\x51\\x88\\x51\\xf5\\x52\\xae\\x53\\x49\\x53\\x4c\\x53\\x7e\\x53\"\n\"\\x81\\x53\\xea\\x54\\x4f\\x54\\x8e\\x54\\x90\\x54\\xdc\\x54\\xe0\\x54\\xee\\x55\\x30\\x55\\x36\\x55\\xf4\\x56\\x01\\x56\\x58\\x56\\x77\\x56\\xa6\\x56\\xe9\\x57\"\n\"\\x39\\x57\\xc4\\x58\\x14\\x58\\x8b\\x59\\x0e\\x59\\x85\\x59\\xb0\\x5a\\x06\\x5a\\x1b\\x5a\\x90\\x5a\\xc3\\x5a\\xcb\\x5b\\x18\\x5b\\x26\\x5b\\xa5\\x5c\\x3a\\x5c\"\n\"\\x46\\x5c\\x4e\\x5c\\xe4\\x5d\\x10\\x5d\\x12\\x5d\\x66\\x5e\\x16\\x5e\\xb4\\x5f\\x87\\x5f\\xef\\x60\\x67\\x60\\x6f\\x60\\xa3\\x60\\xd7\\x61\\x3d\\x61\\xb5\\x61\"\n\"\\xda\\x62\\x29\\x62\\x6f\\x62\\xb5\\x62\\xc1\\x63\\x09\\x63\\x57\\x63\\xae\\x64\\x1e\\x64\\x25\\x64\\x2d\\x64\\x40\\x64\\x48\\x64\\xa4\\x65\\x1a\\x65\\x86\\x65\"\n\"\\x8e\\x65\\xbf\\x66\\x29\\x66\\x4d\\x66\\x52\\x66\\x5a\\x66\\x61\\x66\\x6d\\x66\\xac\\x66\\xb4\\x67\\x4f\\x67\\x89\\x67\\xf8\\x68\\x8e\\x68\\xde\\x69\\x33\\x69\"\n\"\\x36\\x69\\x5b\\x69\\x68\\x69\\x82\\x69\\xc8\\x6a\\xd2\\x6b\\x26\\x6b\\x2d\\x6b\\x34\\x6b\\x69\\x6b\\x70\\x6b\\xd2\\x6c\\x08\\x6c\\x5f\\x6c\\x95\\x6c\\xb9\\x6c\"\n\"\\xc0\\x6d\\x1c\\x6d\\x25\\x6d\\x90\\x6d\\xc1\\x6d\\xef\\x6d\\xfe\\x6e\\x5f\\x6e\\xc8\\x6e\\xf3\\x6e\\xf6\\x6f\\x42\\x6f\\x74\\x6f\\x83\\x6f\\xd9\\x6f\\xf0\\x70\"\n\"\\x64\\x70\\x7d\\x70\\xe8\\x70\\xee\\x71\\x36\\x71\\x3e\\x71\\x45\\x71\\x5e\\x71\\xc1\\x72\\x62\\x72\\xa9\\x73\\x23\\x73\\x33\\x73\\x75\\x73\\xfa\\x74\\x02\\x74\"\n\"\\x9b\\x74\\xa3\\x74\\xaa\\x75\\x33\\x75\\xb5\\x75\\xff\\x76\\x06\\x76\\x0d\\x76\\x14\\x76\\x39\\x76\\x79\\x76\\x7b\\x76\\xcc\\x76\\xd9\\x76\\xe1\\x77\\x44\\x78\"\n\"\\x15\\x78\\x8b\\x79\\x06\\x79\\x83\\x79\\xd8\\x7a\\x2b\\x7a\\xbf\\x7b\\x27\\x7b\\x53\\x7b\\x89\\x7b\\x90\\x7b\\x97\\x7b\\xb7\\x7c\\x11\\x7c\\x18\\x7c\\x72\\x7c\"\n\"\\x87\\x7c\\x8f\\x7c\\xac\\x7c\\xef\\x7d\\x9b\\x7d\\xe1\\x7e\\x5f\\x7e\\xd9\\x7f\\x37\\x7f\\xef\\x80\\x61\\x80\\xbd\\x81\\x17\\x81\\x2a\\x81\\x32\\x81\\x3a\\x81\"\n\"\\x42\\x81\\x6b\\x81\\x6c\\x81\\x6e\\x81\\x75\\x81\\x8e\\x81\\x90\\x81\\x92\\x81\\xaf\\x82\\x2e\\x82\\x95\\x83\\x12\\x83\\x24\\x83\\x50\\x83\\x9d\\x83\\xa4\\x83\"\n\"\\xe2\\x84\\x1d\\x84\\xf5\\x85\\xb2\\x86\\x4c\\x86\\xf6\\x87\\x85\\x87\\xf1\\x88\\x4f\\x88\\xef\\x89\\x63\\x89\\xfd\\x8a\\x74\\x8a\\xa6\\x8a\\xd3\\x8b\\x0d\\x8b\"\n\"\\x19\\x8b\\x4e\\x8b\\xb3\\x8c\\x1c\\x8c\\xa5\\x8d\\x19\\x8d\\x3c\\x8d\\x66\\x8d\\xea\\x8e\\xa8\\x8f\\x1f\\x8f\\x39\\x8f\\x3b\\x8f\\x66\\x8f\\xe5\\x90\\x52\\x90\"\n\"\\x5a\\x90\\x62\\x90\\xb2\\x90\\xb4\\x90\\xc8\\x90\\xd0\\x90\\xdd\\x91\\x96\\x92\\x12\\x92\\x14\\x92\\x16\\x92\\x2d\\x92\\x4b\\x92\\xa6\\x92\\xbc\\x93\\x1d\\x93\"\n\"\\x4a\\x93\\x5f\\x93\\xbf\\x93\\xda\\x94\\x1c\\x94\\x23\\x94\\x2a\\x94\\xba\\x94\\xe8\\x95\\x22\\x95\\x29\\x95\\x3d\\x95\\xd0\\x95\\xdb\\x95\\xfe\\x96\\x06\\x96\"\n\"\\x0d\\x96\\x7e\\x0e\\x0e\\xf8\\x82\\xf8\\x8b\\x15\\x94\\xa8\\x8d\\x95\\x98\\x1a\\xaf\\x6e\\xa5\\x62\\x6f\\x6e\\x7e\\x76\\x77\\x1e\\x79\\x78\\x85\\x7b\\x86\\x60\"\n\"\\x69\\xfb\\xaf\\x18\\x8a\\x88\\x8b\\x88\\x89\\x1a\\x70\\x9b\\x7b\\xa7\\xa9\\xa3\\x9e\\xaa\\x95\\x1e\\x2a\\xfb\\x7f\\x15\\x2c\\x0a\\x0e\\xf7\\x98\\xf8\\xdb\\x15\"\n\"\\x77\\xfb\\x8a\\x05\\x8a\\x85\\x8b\\x86\\x89\\x1a\\x7c\\x97\\x80\\x9b\\xa1\\x97\\x95\\xa6\\x94\\x1e\\xe3\\xf7\\x8c\\x05\\xc9\\x16\\x77\\xfb\\x8a\\x05\\x8a\\x85\"\n\"\\x8b\\x86\\x89\\x1a\\x7c\\x97\\x80\\x9b\\xa1\\x97\\x96\\xa5\\x94\\x1e\\xe3\\xf7\\x8c\\x05\\x0e\\xf8\\xb7\\xf8\\x44\\x15\\xb7\\xf7\\x28\\x05\\x92\\xa4\\x8b\\x8b\"\n\"\\x91\\x1a\\xa3\\x78\\x9d\\x72\\x7a\\x7b\\x84\\x7f\\x7d\\x1e\\x80\\x81\\x88\\x84\\x83\\x6f\\x5d\\xfb\\x31\\x18\\x4b\\x06\\xb7\\xf7\\x28\\x05\\x90\\x9d\\x8d\\x92\"\n\"\\x93\\x1a\\xa1\\x78\\x9d\\x72\\x68\\x74\\x76\\x60\\x81\\x1e\\x5c\\xfb\\x31\\x05\\x73\\x06\\x6b\\x81\\x89\\x7e\\x30\\x1d\\x88\\x94\\x92\\x8a\\x9f\\x1b\\x99\\x06\"\n\"\\x70\\x2e\\x05\\x6d\\x06\\x6b\\x81\\x88\\x7f\\x30\\x1d\\x88\\x94\\x94\\x8a\\x9d\\x1b\\x9f\\x06\\x5f\\xfb\\x28\\x05\\x87\\x7b\\x89\\x82\\x84\\x1a\\x74\\x9e\\x79\"\n\"\\xa4\\xae\\xa3\\xa1\\xb5\\x94\\x1e\\xba\\xf7\\x31\\x05\\xca\\x06\\x5f\\xfb\\x28\\x05\\x87\\x7c\\x89\\x82\\x83\\x1a\\x74\\x9e\\x79\\xa2\\x9b\\x9c\\x92\\x97\\x99\"\n\"\\x1e\\x91\\x92\\x97\\xa1\\x90\\x9a\\xb9\\xf7\\x32\\x18\\xa2\\x06\\xaa\\x97\\x50\\x1d\\x9b\\x1a\\x9c\\x80\\x51\\x0a\\x83\\x8c\\x78\\x1b\\x7d\\x06\\xa7\\xe8\\x05\"\n\"\\xa8\\x06\\xaa\\x96\\xd7\\x0a\\xfb\\x32\\x24\\x15\\x6f\\x2e\\x05\\x4c\\x06\\xa7\\xe8\\x05\\x0e\\xf8\\x7b\\xf8\\xe5\\x15\\xf7\\x29\\x0a\\x7a\\x7a\\x83\\x7e\\x7e\"\n\"\\x1e\\x81\\x81\\x86\\x82\\x86\\x70\\x86\\x75\\x18\\x24\\x7a\\x3b\\x3b\\x35\\x1a\\x4b\\xb5\\x62\\xdf\\x7a\\x1e\\xd2\\x7d\\x05\\xb9\\x82\\x9e\\x7e\\x74\\x1a\\x5e\"\n\"\\x52\\x67\\x46\\x55\\x5d\\xa1\\xa6\\x89\\x1e\\x8a\\xa6\\x8b\\x8b\\x84\\x93\\x08\\x94\\x83\\x7d\\x91\\x7d\\x1b\\x7a\\x79\\x83\\x7e\\x7e\\x1f\\x81\\x81\\x86\\x82\"\n\"\\x86\\x71\\x7d\\x50\\x18\\x88\\x7a\\x8a\\x87\\x83\\x1a\\x74\\x9e\\x7a\\xa5\\x9a\\x95\\x8f\\x98\\x9e\\x1e\\xa5\\x7e\\x92\\x89\\xae\\x83\\x7a\\x40\\x18\\x88\\x7f\"\n\"\\x8a\\x81\\x84\\x1a\\x75\\x9e\\x7a\\xa4\\x9b\\x9c\\x93\\x98\\x99\\x1e\\x95\\x95\\x8f\\x93\\x91\\xa6\\x9c\\xd8\\x18\\xf7\\x10\\xa2\\xdf\\xdc\\xee\\x1a\\xd0\\x63\"\n\"\\xaf\\x28\\xa0\\x1e\\x4d\\x97\\x05\\x63\\x94\\x76\\x99\\x9e\\x1a\\xb0\\xb9\\xa6\\xcb\\xae\\xb0\\x7c\\x7d\\x6d\\x9b\\x7b\\xaa\\x9c\\x9c\\x92\\x99\\x99\\x1e\\x95\"\n\"\\x95\\x8e\\x92\\x92\\xa7\\x92\\xaa\\x18\\x8e\\x99\\x8c\\x91\\x93\\x1a\\xa1\\x78\\x9c\\x72\\x81\\x83\\x89\\x87\\x7f\\x1e\\x8c\\x88\\x88\\x8c\\x8a\\x1b\\x76\\x93\"\n\"\\x84\\x8d\\x82\\x8d\\x7d\\x8d\\x19\\x0e\\xf7\\xfd\\xf8\\xe8\\x15\\x31\\x38\\x3c\\x37\\x4d\\xba\\x5e\\xcc\\xe4\\xdf\\xd9\\xe0\\xca\\x5d\\xb7\\x49\\x1f\\x7d\\x4c\"\n\"\\x15\\xae\\xa4\\x73\\x6b\\x5d\\x5f\\x61\\x5a\\x68\\x72\\xa3\\xad\\xb7\\xb8\\xb5\\xbb\\x1f\\xf7\\x6b\\xfb\\x6a\\x15\\xa5\\x93\\x96\\x95\\x9d\\x1a\\x9a\\x82\\x95\"\n\"\\x7e\\x85\\x85\\x8a\\x88\\x81\\x1e\\xfc\\x17\\xfb\\x05\\x05\\x70\\x83\\x81\\x81\\x79\\x1a\\x7c\\x94\\x81\\x98\\x90\\x94\\x8d\\x8d\\x92\\x1e\\xf7\\x90\\xbc\\x15\"\n\"\\x31\\x38\\x3d\\x37\\x4d\\xba\\x5e\\xcc\\xe4\\xdf\\xd9\\xdf\\xca\\x5d\\xb7\\x49\\x1f\\x7d\\x4c\\x15\\xae\\xa4\\x73\\x6b\\x5e\\x5f\\x61\\x5b\\x68\\x72\\xa3\\xac\"\n\"\\xb7\\xb8\\xb5\\xba\\x1f\\x0e\\xf8\\x2b\\xf7\\x5d\\x15\\x4a\\xf7\\x18\\x05\\x81\\x9d\\x84\\x9f\\x92\\x1a\\xa6\\xa8\\xa4\\xab\\x9e\\x95\\x85\\x6f\\xa5\\x1e\\xbb\"\n\"\\xa2\\x05\\xb5\\x9e\\x99\\x9b\\xa7\\x1a\\xa2\\x77\\x9e\\x73\\x85\\x83\\x89\\x86\\x7d\\x1e\\x96\\x74\\x77\\x90\\x74\\x1b\\x2d\\x29\\x33\\x38\\x78\\x8f\\x78\\x97\"\n\"\\x6e\\x1f\\x38\\x62\\x59\\x42\\x3e\\x1a\\x43\\xc8\\x5e\\xeb\\xbe\\xad\\x93\\x9d\\xab\\x1e\\x92\\x7e\\x05\\xca\\x20\\x0a\\x9b\\x1a\\x9c\\x80\\x9c\\x7d\\x8f\\x1e\"\n\"\\x8f\\x82\\x85\\x8b\\x77\\x1b\\x98\\x9c\\x95\\x9b\\x9d\\xaf\\x08\\xaa\\x8f\\xa4\\xa6\\xaa\\x1a\\x9b\\x80\\x9b\\x7d\\x90\\x1e\\x8e\\x83\\x84\\x8c\\x76\\x1b\\x54\"\n\"\\x06\\xfb\\x0a\\xfb\\x42\\x15\\x82\\x79\\x81\\x89\\x74\\x1b\\x5d\\x75\\x97\\xa4\\xad\\xa3\\xa8\\xb5\\x9e\\x1f\\x0e\\xf7\\xf0\\xf8\\xee\\x15\\xfb\\x0d\\xfb\\x7f\"\n\"\\x05\\x83\\x7d\\x8a\\x86\\x83\\x1a\\x7e\\x99\\x80\\x9b\\x98\\x99\\x93\\x9b\\x98\\x1e\\xf7\\x5f\\xf7\\x9a\\x05\\x0e\\xf8\\xd0\\xf8\\xf7\\x15\\x6d\\x77\\x7b\\x48\"\n\"\\x55\\x1f\\xfb\\x08\\xfb\\x23\\x57\\xfb\\x0f\\xfb\\x19\\x1a\\x37\\xa8\\xfb\\x04\\xb0\\x50\\x1e\\x7e\\x94\\x97\\x84\\x9d\\x1b\\xae\\xaa\\xa8\\xac\\x91\\x8a\\x90\"\n\"\\x86\\x97\\x1f\\x6b\\xd6\\x7e\\xc5\\xcc\\x1a\\xf7\\x16\\xc1\\xf7\\x0c\\xf7\\x0e\\xf7\\x1e\\x1e\\x9b\\x9e\\x90\\x95\\x9b\\x1a\\xa3\\x78\\x9c\\x71\\x1e\\x0e\\xf7\"\n\"\\xc2\\xf8\\xf7\\x15\\x68\\x6c\\x6e\\x6a\\x85\\x8c\\x86\\x90\\x7f\\x1f\\xab\\x41\\x98\\x50\\x4a\\x1a\\xfb\\x15\\x54\\xfb\\x0d\\xfb\\x0d\\xfb\\x1e\\x1e\\x7b\\x79\"\n\"\\x86\\x7f\\x7c\\x1a\\x73\\x9e\\x7a\\xa5\\xa9\\xa0\\x9b\\xce\\xc0\\x1e\\xf7\\x09\\xf7\\x25\\xbe\\xf7\\x0d\\xf7\\x19\\x1a\\xdf\\x6e\\xf7\\x04\\x65\\xc6\\x1e\\x98\"\n\"\\x83\\x7e\\x92\\x7a\\x1b\\x0e\\xf7\\xb7\\xf7\\xfa\\x15\\x4c\\x4b\\x05\\x73\\x72\\x85\\x81\\x79\\x1a\\x72\\x9d\\x7a\\xa5\\xa1\\x97\\x92\\xa5\\xa5\\x1e\\xcb\\xcc\"\n\"\\xad\\x4b\\x05\\x70\\x99\\x95\\x84\\xa2\\x1b\\xab\\xac\\xa9\\xa8\\x96\\x89\\x90\\x81\\x9e\\x1f\\x69\\xcb\\xe2\\xa4\\x05\\xb8\\x97\\x9f\\x9f\\xaa\\x1a\\xa2\\x79\"\n\"\\x9e\\x73\\x81\\x87\\x8a\\x85\\x75\\x1e\\x36\\x73\\x9c\\xd8\\x05\\x8e\\x9a\\x8c\\x91\\x93\\x1a\\xa1\\x78\\x9c\\x72\\x68\\x74\\x75\\x5f\\x81\\x1e\\x79\\x3b\\x3f\"\n\"\\xa4\\x05\\x91\\x77\\x88\\x8c\\x82\\x1b\\x6a\\x6c\\x6d\\x6b\\x75\\x96\\x80\\xab\\x81\\x1f\\x0e\\xf8\\x27\\xf7\\x6f\\x15\\xf7\\x1e\\x7b\\x1d\\xfb\\x1c\\x06\\xac\"\n\"\\xf7\\x2b\\x05\\x90\\x9e\\x8b\\x8c\\x94\\x1a\\xa1\\x78\\x9c\\x72\\x67\\x74\\x75\\x5f\\x82\\x1e\\x68\\xfb\\x2d\\x05\\xfb\\x1e\\x4a\\x1d\\xf7\\x1c\\x06\\x6a\\xfb\"\n\"\\x2b\\x05\\x89\\x81\\x89\\x80\\x83\\x1a\\x75\\xa9\\x1d\\x8f\\x94\\x91\\xa5\\x08\\x0e\\xc3\\x0a\\x76\\x1d\\xf7\\xc5\\x7d\\x15\\x2c\\x0a\\x0e\\xf9\\x13\\xf8\\xdb\"\n\"\\x15\\x9c\\xa3\\x8f\\x94\\x98\\x1a\\xa4\\x78\\x9c\\x72\\x71\\x7c\\x81\\x6a\\x73\\x1e\\xfc\\x65\\xfd\\x1c\\x05\\x7c\\x76\\x85\\x7e\\x7e\\x1a\\x74\\x9f\\x79\\xa3\"\n\"\\xa6\\x99\\x95\\xad\\xa3\\x1e\\x0e\\xf8\\xe9\\xf7\\xee\\x15\\x91\\xa6\\x8e\\xa6\\xa7\\x1a\\xf7\\x0c\\x4e\\xd0\\xfb\\x00\\x4f\\x57\\x79\\x68\\x60\\x1e\\x4d\\x57\"\n\"\\x5e\\x3e\\x77\\x33\\x77\\x31\\x18\\x85\\x70\\x88\\x6f\\x70\\x1a\\xfb\\x0d\\xc8\\x47\\xf7\\x00\\xc7\\xbf\\x9d\\xae\\xb6\\x1e\\xc9\\xbe\\xb8\\xd9\\x9f\\xe2\\x08\"\n\"\\xfb\\xcd\\xec\\x15\\xee\\xa1\\xc6\\xca\\xd0\\x1b\\xc0\\xa9\\x66\\x4a\\x78\\x89\\x77\\x86\\x78\\x1f\\x75\\x23\\x05\\x2a\\x75\\x4f\\x4b\\x47\\x1b\\x56\\x6d\\xb0\"\n\"\\xcb\\x9f\\x8d\\x9e\\x8f\\x9f\\x1f\\x0e\\xf8\\x7f\\xf8\\xfe\\x15\\xfb\\x7a\\x55\\x05\\x5b\\x80\\x77\\x78\\x68\\x1a\\x72\\x9b\\x7a\\xa3\\x95\\x8f\\x8c\\x90\\xa0\"\n\"\\x1e\\xe0\\x9f\\x36\\xfc\\x10\\x05\\x2a\\x26\\x1d\\xf7\\xc1\\x06\\xa7\\x9a\\x3d\\x1d\\x9c\\x52\\x1d\\x82\\x20\\x1d\\x2b\\x06\\x0e\\xf7\\x85\\xf3\\x15\\xa7\\x9f\"\n\"\\xf7\\x1e\\xe8\\xc1\\xb3\\xc3\\xb9\\x19\\xc7\\xbd\\xa8\\xbf\\xc9\\x1a\\xe3\\x41\\xc9\\x21\\x4e\\x4e\\x77\\x68\\x5b\\x1e\\x5a\\x68\\x65\\x57\\x6b\\x1a\\x75\\x9f\"\n\"\\x79\\xa4\\xa1\\xa2\\x97\\x9d\\x95\\x1e\\x9c\\xa9\\x8d\\x8d\\x96\\x96\\x08\\xa3\\xa7\\xaf\\x99\\xb3\\x1b\\xc1\\xb2\\x70\\x64\\x64\\x7b\\x7a\\xfb\\x19\\x2a\\x1f\"\n\"\\x5b\\x68\\x50\\x62\\xfb\\x34\\x20\\x84\\x87\\x18\\x73\\xfb\\x00\\x05\\xf8\\x62\\x06\\x9f\\xe2\\x05\\x8f\\x9d\\x83\\x0a\\x6b\\x76\\x7a\\x69\\x80\\x1e\\x0e\\xf7\"\n\"\\xf9\\xf8\\x09\\x15\\x68\\x6b\\x6f\\x6b\\x73\\x9b\\x7d\\xa9\\x8a\\x1f\\xb5\\x89\\x98\\x89\\x9d\\x83\\x08\\xac\\x7d\\xa2\\x70\\x71\\x1a\\x71\\x7b\\x6d\\x72\\x79\"\n\"\\x1e\\x74\\x6b\\x65\\x82\\x47\\x1b\\x4b\\x70\\x90\\x9b\\x76\\x1f\\x95\\x7c\\x86\\x8d\\x7e\\x1b\\x69\\x6c\\x6e\\x69\\x5f\\xd7\\x6e\\xf7\\x07\\xf5\\xce\\x9f\\xbd\"\n\"\\xc4\\x1f\\xb9\\xb4\\xab\\xc8\\xbb\\x1a\\xba\\x70\\xb3\\x57\\xa7\\x1e\\xdb\\xb5\\xb0\\xbc\\xcb\\x1a\\xe1\\x47\\xc2\\x20\\xfb\\x0d\\xfb\\x07\\x50\\x4d\\x74\\x9e\"\n\"\\x79\\xa4\\x9a\\x9a\\x91\\x94\\x96\\x1e\\xad\\xb2\\xa8\\x95\\xc1\\x1b\\xc6\\xae\\x77\\x68\\x60\\x57\\x60\\x56\\x1f\\x0e\\xf8\\xdc\\xf8\\xed\\x15\\xfb\\x1e\\x06\"\n\"\\xfb\\xdc\\xfc\\x14\\x78\\x36\\x05\\xf7\\xa4\\x06\\x85\\x6e\\x05\\x68\\x06\\x6c\\x80\\x36\\x1d\\xf7\\x18\\x06\\xa8\\x9a\\x29\\x1d\\x9c\\x81\\x9b\\x7c\\x90\\x1e\"\n\"\\x85\\x8d\\x84\\x8c\\x7e\\x8c\\x91\\xa8\\x18\\xb8\\x8c\\xa8\\xa4\\xae\\x1a\\x9d\\x81\\x9a\\x7c\\x90\\x1e\\x85\\x8d\\x85\\x8c\\x7d\\x8c\\x08\\xfb\\x00\\x16\\xfb\"\n\"\\x1d\\x06\\xf7\\x4c\\xf7\\x69\\x05\\x0e\\xf7\\xe2\\xf8\\x86\\x15\\xf7\\x5a\\x06\\xa9\\x98\\x28\\x1d\\x9c\\x1a\\xa9\\x7a\\x96\\x5f\\x1e\\xfb\\xc5\\x06\\x4e\\xfb\"\n\"\\xa6\\x05\\x8a\\x85\\x8a\\x84\\x88\\x1a\\x73\\x9e\\x79\\xa4\\x96\\x90\\x8c\\x92\\x9a\\x1e\\x9f\\xb8\\xbc\\x98\\xac\\x1b\\xbf\\xac\\x6c\\x5a\\x6b\\x80\\x6b\\x79\"\n\"\\x73\\x1f\\x66\\x6e\\x5f\\x7b\\x41\\x1b\\x4a\\x70\\x92\\xa2\\x73\\x1f\\x98\\x7e\\x84\\x8e\\x7c\\x1b\\x69\\x6b\\x6d\\x6b\\x59\\xde\\x66\\xf7\\x04\\xf7\\x03\\xd3\"\n\"\\xa6\\xcb\\xc5\\x1f\\xb5\\xbb\\xa4\\xc9\\xc7\\x1a\\xef\\x47\\xcd\\x23\\x6d\\x69\\x86\\x81\\x68\\x1e\\x0e\\xf7\\xb2\\xf7\\xdb\\x15\\xf7\\x00\\xbe\\xf6\\xd7\\xee\"\n\"\\x1b\\x93\\x90\\x8a\\x88\\x94\\x1f\\x84\\x9c\\x94\\x89\\x94\\x1b\\xae\\xab\\xa9\\xac\\xad\\x61\\xa1\\x49\\xfb\\x0b\\xfb\\x18\\x40\\xfb\\x05\\x3b\\x1f\\x58\\x43\"\n\"\\x70\\x33\\x2e\\x1a\\xfb\\x13\\xc6\\x4c\\xf7\\x0b\\xdb\\xcb\\xa6\\xc2\\xbc\\x1e\\xb3\\xb8\\xa3\\xc9\\xc3\\x1a\\xe2\\x47\\xcd\\x32\\x5b\\x65\\x7c\\x61\\x53\\x1e\"\n\"\\x77\\xfb\\x11\\x15\\xba\\xb0\\xc3\\xab\\xb5\\x1b\\xb5\\xaa\\x6c\\x61\\x74\\x81\\x6e\\x7a\\x75\\x1f\\x6d\\x75\\x6c\\x7c\\x61\\x1b\\x6e\\x72\\x94\\x99\\x80\\x1f\"\n\"\\x7f\\x99\\x81\\xad\\xa8\\x1a\\x8d\\x8b\\x90\\x8c\\x91\\x1e\\x0e\\xf8\\x8e\\xf8\\x86\\x15\\xfb\\x83\\xfc\\x33\\x05\\x80\\x77\\x86\\x7f\\x7f\\x1a\\x75\\xa0\\x79\"\n\"\\xa3\\xa7\\x9c\\x97\\xb0\\xa0\\x1e\\xf7\\x99\\xf8\\x59\\xa1\\xef\\x05\\xfc\\x4d\\x06\\x77\\x34\\x05\\x88\\x7d\\x8a\\x85\\x83\\x1a\\x75\\x9e\\x7a\\xa5\\xaa\\xa0\"\n\"\\x9c\\xad\\x96\\x1e\\x0e\\xf8\\x83\\xf7\\xc8\\x15\\xd9\\xb7\\xb2\\xc1\\xcc\\x1a\\xe1\\x42\\xc7\\x23\\x4a\\x48\\x73\\x61\\x5b\\x1e\\x5f\\x65\\x6d\\x54\\x5f\\x1a\"\n\"\\x62\\x9e\\x6a\\xb3\\x6c\\x1e\\x38\\x5e\\x5c\\x4a\\x43\\x1a\\x34\\xd2\\x55\\xf7\\x06\\xdc\\xdb\\xa8\\xba\\xb8\\x1e\\xae\\xaf\\xa2\\xbf\\xb5\\x1a\\xb9\\x75\\xb3\"\n\"\\x61\\xa9\\x1e\\x3a\\xf7\\x62\\x15\\xc0\\xad\\x73\\x65\\x54\\x55\\x61\\x44\\x56\\x69\\xa3\\xb2\\xc1\\xc1\\xb5\\xd2\\x1f\\x51\\xfb\\x9b\\x15\\xc2\\xb3\\x6e\\x63\"\n\"\\x59\\x4f\\x60\\x44\\x4d\\x67\\xa4\\xb4\\xbe\\xca\\xb8\\xd2\\x1f\\x0e\\xf8\\x80\\xf7\\xa8\\x15\\xfb\\x00\\x58\\x21\\x3f\\x26\\x1b\\x83\\x87\\x8c\\x8e\\x82\\x1f\"\n\"\\x91\\x7b\\x82\\x8d\\x81\\x1b\\x68\\x6b\\x6d\\x6b\\x69\\xb6\\x75\\xcc\\xf7\\x0b\\xf7\\x17\\xd5\\xf7\\x06\\xdc\\x1f\\xbe\\xd3\\xa6\\xe3\\xe8\\x1a\\xf7\\x13\\x50\"\n\"\\xca\\xfb\\x0a\\x3a\\x4b\\x70\\x54\\x5a\\x1e\\x63\\x5d\\x73\\x4e\\x52\\x1a\\x34\\xcf\\x49\\xe4\\xbb\\xb1\\x9a\\xb6\\xc3\\x1e\\x9f\\xf7\\x11\\x15\\x5c\\x66\\x53\"\n\"\\x6b\\x61\\x1b\\x61\\x6c\\xaa\\xb4\\xa3\\x95\\xa8\\x9c\\xa1\\x1f\\xaa\\xa2\\xa9\\x99\\xb5\\x1b\\xa9\\xa3\\x83\\x7c\\x97\\x1f\\x97\\x7c\\x94\\x6a\\x6d\\x1a\\x89\"\n\"\\x8b\\x86\\x8a\\x86\\x1e\\x0e\\xf7\\xc5\\x7d\\x15\\x2c\\x0a\\xe0\\xf7\\xc4\\x15\\xb8\\xb4\\xb2\\xb5\\xaa\\x73\\xa1\\x69\\x1f\\x7a\\x06\\x5f\\x61\\x65\\x62\\x6b\"\n\"\\xa3\\x74\\xad\\x1f\\x0e\\xf7\\x1c\\x0a\\x7e\\x89\\x86\\x83\\x1a\\x7e\\x99\\x7f\\x9b\\x98\\xf7\\x2c\\x0a\\x7a\\xf7\\xb5\\x15\\x55\\x61\\x68\\x5d\\x69\\xa3\\x77\"\n\"\\xb5\\xc1\\xb4\\xae\\xb8\\xae\\x73\\x9f\\x62\\x1f\\x0e\\xf7\\xaa\\xf7\\xa3\\x15\\xf7\\x8c\\xf7\\x0a\\x05\\xa5\\x98\\x98\\x9a\\x9c\\x1a\\x93\\x89\\x93\\x87\\x93\"\n\"\\x1e\\x8a\\x8d\\x05\\x9c\\x83\\x74\\x96\\x72\\x1b\\x7c\\x7d\\x88\\x85\\x7e\\x1f\\xfc\\x51\\xfb\\x63\\xf8\\x51\\xfb\\x68\\x05\\x85\\x98\\x99\\x88\\x9a\\x1b\\xa4\"\n\"\\xa2\\x96\\x9c\\x93\\x1f\\x8c\\x8d\\x05\\x8f\\x93\\x8d\\x93\\x92\\x1a\\x9e\\x80\\x97\\x6e\\x9a\\x1e\\x0e\\xf7\\x5a\\xf8\\x2f\\x15\\x6b\\x7c\\x0a\\x32\\x0a\\xfc\"\n\"\\x3a\\xfb\\x44\\x15\\x38\\x0a\\x7c\\x7f\\x81\\x32\\x0a\\x0e\\xf7\\xcd\\xf7\\xa3\\x15\\xfb\\x8b\\xfb\\x0d\\x05\\x6e\\x7c\\x80\\x7f\\x78\\x1a\\x84\\x8d\\x83\\x8f\"\n\"\\x83\\x1e\\x8c\\x89\\x05\\x7a\\x93\\xa2\\x80\\xa4\\x1b\\x9a\\x99\\x8e\\x91\\x98\\x1f\\xf8\\x51\\xf7\\x68\\xfc\\x51\\xf7\\x63\\x05\\x91\\x7e\\x7d\\x8e\\x7c\\x1b\"\n\"\\x72\\x74\\x80\\x7a\\x83\\x1f\\x8a\\x89\\x05\\x87\\x83\\x89\\x83\\x83\\x1a\\x7a\\x98\\x7c\\xa5\\x7e\\x1e\\x0e\\xf7\\x59\\xf8\\x50\\x15\\x88\\x7d\\x8a\\x83\\x84\"\n\"\\xf7\\x1c\\x1d\\x95\\x8f\\x92\\x91\\xa7\\x8e\\x96\\x18\\x9b\\xae\\xad\\x92\\xb1\\x1b\\xc3\\xaa\\x74\\x62\\x5d\\x60\\x70\\xfb\\x27\\x5a\\x1f\\x7f\\x53\\x05\\x86\"\n\"\\x78\\x8b\\x8a\\x82\\x1a\\x75\\x9e\\x7a\\xa3\\xab\\xa0\\x9c\\xae\\x98\\x1e\\xd1\\xa6\\xb4\\xa1\\xad\\xa8\\x08\\xb2\\xab\\xa3\\xbf\\xc0\\x1a\\xe6\\x48\\xc2\\xfb\"\n\"\\x01\\x4f\\x54\\x7e\\x69\\x39\\x1e\\x80\\x86\\x82\\x88\\x86\\x88\\x08\\xe9\\xfc\\xab\\x15\\xb7\\xb4\\xb1\\xb5\\xaa\\x73\\xa2\\x6a\\x1f\\x79\\xf7\\x24\\x0a\\x0e\"\n\"\\xf8\\x7c\\xf8\\x17\\x15\\xfb\\x13\\x81\\x24\\x34\\x28\\x1a\\x42\\xc3\\x5a\\xdd\\x1e\\xd4\\x06\\xa5\\x95\\x8d\\x95\\x97\\x1f\\x99\\x96\\x92\\x99\\x99\\x1a\\x99\"\n\"\\x86\\x93\\x80\\x91\\x1e\\xc6\\xf7\\x9c\\x05\\x8e\\x9a\\x8d\\x99\\x99\\x1a\\xe4\\x50\\xc3\\x2d\\xfb\\x19\\xfb\\x0e\\xfb\\x0c\\xfb\\x3b\\x65\\x1e\\x67\\xfb\\x35\"\n\"\\x05\\x84\\x6c\\x88\\x6c\\x6d\\x1a\\x53\\x97\\x5c\\xa2\\x66\\x1e\\x5f\\xa8\\xb7\\x76\\xcd\\x1b\\xf7\\x00\\xe9\\xb7\\xbd\\xa0\\x7c\\x99\\x75\\x7f\\x84\\x88\\x7d\"\n\"\\x7a\\x1f\\x79\\x74\\x63\\x80\\x5e\\x1b\\x6c\\x78\\x91\\x9a\\x7b\\x1f\\x72\\xa1\\x7c\\xb8\\xc0\\x1a\\xa1\\x8e\\xa6\\x92\\xa8\\x1e\\xac\\xf7\\x29\\x05\\xf7\\x0d\"\n\"\\xa6\\xdd\\xe5\\xde\\x1b\\xbc\\xa9\\x6e\\x5b\\x82\\x8a\\x83\\x89\\x82\\x1f\\x52\\xfb\\x97\\x15\\x8a\\x7f\\x86\\x8b\\x85\\x1b\\x63\\x70\\xa0\\xa9\\xba\\xc1\\xb5\"\n\"\\xcf\\x92\\x1f\\x0e\\x22\\x1d\\x0e\\xf7\\x03\\xf2\\x15\\x80\\x06\\x6c\\x80\\x36\\x1d\\xf7\\xbb\\x06\\xd4\\xc7\\x9f\\xb4\\xb7\\x1f\\xb0\\xac\\xa3\\xbc\\xb5\\x1a\"\n\"\\xb9\\x72\\xb0\\x59\\xa6\\x1e\\xc5\\xaf\\xa8\\xba\\xc1\\x1a\\xac\\x7d\\xac\\x72\\xa2\\x1e\\xa9\\x6c\\x62\\x98\\x51\\x1b\\xfb\\x90\\xf7\\x39\\x1d\\xb6\\x1e\\x95\"\n\"\\x06\\xdb\\xfb\\x13\\x15\\xa7\\xf7\\x13\\x05\\xf7\\x16\\x06\\xc1\\xaa\\x7a\\x6e\\x5d\\x51\\x68\\x3e\\x1f\\xfb\\x33\\xfb\\x7b\\x15\\xa7\\xf7\\x14\\x05\\xf7\\x18\"\n\"\\x06\\xd5\\xb9\\x71\\x60\\x65\\x65\\x76\\x43\\x1f\\x0e\\x56\\x0a\\x0e\\xc6\\x1d\\x0e\\x24\\x1d\\xad\\xf7\\x28\\x05\\x8e\\x9b\\x8c\\x91\\x93\\x1a\\xa1\\x21\\x1d\"\n\"\\x0e\\xf7\\x8d\\xf7\\x7c\\x15\\xd8\\x06\\x8a\\x89\\x05\\x89\\x81\\x89\\x7f\\x83\\x1a\\x75\\x9e\\x7a\\xa4\\x9b\\xf7\\x1b\\x0a\\xa3\\xf6\\x18\\x8e\\x96\\x8c\\x95\"\n\"\\x93\\x1a\\xa2\\x79\\x9c\\x71\\x68\\x74\\x74\\x5f\\x82\\x1e\\x8a\\x88\\x05\\x3f\\x2b\\x1d\\xf7\\x8c\\x06\\x81\\x5f\\xf7\\x08\\x0a\\x92\\x99\\x99\\x1e\\x95\\x95\"\n\"\\x8f\\x94\\x91\\xa6\\xac\\xf7\\x28\\x18\\xfc\\x6f\\x27\\x1d\\x95\\x06\\x3b\\xfb\\xfa\\xdf\\x1d\\x6e\\x1d\\x0e\\xf8\\x5b\\xf7\\x7a\\x44\\x1d\\x7a\\x1a\\x72\\x98\"\n\"\\x7e\\xa7\\x87\\x1e\\x3b\\xfb\\xfa\\x05\\x89\\xf7\\x1e\\x0a\\x7b\\x7f\\x66\\x0a\\x9c\\x81\\x9c\\x41\\x1d\\x76\\x1b\\x82\\x2b\\x1d\\x0e\\x28\\x0a\\x0e\\xf8\\xe7\"\n\"\\x94\\x1d\\x9a\\x97\\x95\\x9d\\x9b\\x1a\\x9c\\x80\\x9c\\x7d\\x8f\\x1e\\x8e\\x82\\x84\\x8c\\x77\\x62\\x0a\\x82\\x60\\x86\\x83\\x72\\x78\\x19\\x76\\x70\\x65\\x7f\"\n\"\\x67\\x1b\\x6b\\x6e\\x92\\x9f\\x5f\\xe4\\x1d\\x8b\\x0a\\x0e\\x2f\\x0a\\x0e\\xf7\\x75\\xf7\\x52\\x1d\\x53\\xfb\\x90\\x05\\x6b\\x06\\x6b\\x81\\x37\\x0a\\x79\\x7a\"\n\"\\x21\\x0a\\xf7\\x15\\x20\\x0a\\x9c\\x1a\\x9c\\x81\\x9a\\x7c\\x91\\x1e\\x86\\x8d\\x84\\x8c\\x7e\\x8c\\xdb\\xf7\\xf9\\x18\\xb2\\x90\\xa4\\xa3\\xab\\x41\\x0a\\xfb\"\n\"\\x03\\x06\\xfb\\x57\\xfb\\xaa\\x41\\xf7\\xaa\\x05\\xfb\\x03\\x25\\x1d\\x72\\x98\\x7e\\xa7\\x88\\x1e\\x3c\\xfb\\xfa\\x05\\x5f\\x8a\\x6d\\x72\\x67\\x1a\\x6d\\x9d\"\n\"\\x7f\\xb6\\x1e\\xf7\\x15\\xb3\\x0a\\x8c\\x77\\x1b\\x6d\\x06\\x0e\\x3c\\x0a\\x0e\\x2e\\x1d\\x0e\\xf7\\x84\\xf7\\x53\\x15\\xea\\x06\\xf5\\xcb\\xa3\\xc9\\xc3\\x9b\"\n\"\\x0a\\xf7\\xa4\\x85\\x15\\xd9\\x8c\\xb2\\x93\\xbb\\xa3\\x08\\xf7\\x18\\xcf\\xdf\\xf7\\x12\\xf7\\x16\\x1a\\xf7\\x17\\x2b\\xeb\\xfb\\x16\\xfb\\x4a\\xfb\\x42\\xfb\"\n\"\\x45\\xfb\\x4d\\x4e\\x9f\\x53\\xae\\x66\\x1e\\x97\\x7d\\x9f\\x7c\\xae\\x75\\x45\\x55\\x18\\x74\\x79\\x83\\x7e\\x76\\x1a\\x75\\x9e\\x78\\xa1\\x93\\x96\\x8d\\x8e\"\n\"\\x97\\x1e\\x95\\xb9\\xca\\x95\\xa2\\x1b\\x9f\\x96\\x88\\x7e\\xac\\x1f\\x83\\x9e\\x99\\x88\\x9f\\x1b\\xb1\\xba\\x9b\\xa5\\xb4\\x1f\\x9e\\x97\\x96\\x9e\\x9e\\x1a\"\n\"\\xa4\\x79\\x9c\\x70\\x7e\\x86\\x89\\x7c\\x6f\\x1e\\x80\\x76\\x82\\x88\\x7d\\x1b\\x7f\\x85\\x8c\\x91\\x76\\x1f\\x94\\x6c\\x73\\x8e\\x6f\\x1b\\x7c\\x80\\x8a\\x89\"\n\"\\x78\\x1f\\xf7\\x1e\\xf8\\x82\\x15\\xda\\xc5\\x4e\\x36\\xfb\\x0c\\xfb\\x03\\xfb\\x0c\\xfb\\x03\\x3a\\x51\\xc7\\xe1\\xf7\\x0e\\xf7\\x02\\xf7\\x0a\\xf7\\x06\\x1f\"\n\"\\x0e\\x3b\\x0a\\x0e\\x6d\\x1d\\x0e\\x57\\x0a\\x0e\\x23\\x0a\\x0e\\xf7\\xe3\\xf7\\x2b\\x15\\x46\\xf7\\xca\\x05\\x99\\x06\\xab\\x96\\x8d\\x97\\x9a\\x1f\\x9a\\x98\"\n\"\\x94\\x9c\\x9c\\x1a\\xa9\\x7a\\x97\\x60\\x1e\\xfb\\x19\\x8a\\x1d\\x9c\\x7f\\xb5\\x1e\\xef\\xfc\\x61\\x05\\xf3\\x06\\xf7\\xc7\\xf8\\x61\\x05\\xa4\\x95\\x8c\\x91\"\n\"\\x96\\x1f\\xa0\\x96\\x9a\\xa1\\xa0\\x1a\\xa9\\x7a\\x97\\x5f\\x1e\\xfb\\x17\\x37\\x1d\\x79\\x95\\x7c\\x9a\\x85\\x1e\\x88\\x94\\x91\\x8b\\x9f\\x1b\\x9c\\x06\\x0e\"\n\"\\xf7\\xf9\\x6a\\x0a\\xaa\\x1a\\x9c\\xd4\\x1d\\x80\\x9b\\x7d\\x74\\x0a\\xfb\\x17\\x42\\x1d\\x7b\\x1f\\x7b\\x7f\\x82\\x78\\x79\\x1a\\x75\\x96\\x7f\\xa5\\x87\\x1e\"\n\"\\x62\\xfc\\x62\\x05\\xf7\\x0a\\x06\\x0e\\xf8\\x44\\xf7\\x1e\\x1d\\x82\\x85\\xb7\\x1d\\xf8\\x2a\\xf7\\x7f\\x29\\x0a\\x77\\x1b\\x2e\\x34\\x1d\\x0e\\xf7\\x7c\\x71\"\n\"\\x0a\\x9d\\x9d\\x93\\x98\\x98\\x1e\\x95\\x95\\x8f\\x94\\x91\\xa5\\x99\\xcb\\x18\\x43\\x0a\\x0e\\xf8\\x65\\xf8\\x8b\\x15\\xc2\\x06\\xa9\\x98\\x50\\x1d\\x9c\\x1a\"\n\"\\x9c\\x81\\x9a\\x7c\\x90\\x1e\\x8e\\x82\\x85\\x8c\\x77\\x1b\\xfb\\x36\\x06\\xfb\\x3a\\xfd\\x7f\\x05\\xf7\\x38\\x06\\xa9\\x97\\x2a\\x0a\\x9d\\x9b\\x1a\\x9d\\x80\"\n\"\\x9b\\x7d\\x8f\\x1e\\x8e\\x82\\x20\\x1d\\x55\\x06\\x0e\\xf7\\xda\\xf9\\x07\\x15\\xac\\x82\\x80\\x96\\x72\\x1b\\x68\\x6c\\x6e\\x6c\\x84\\x8c\\x86\\x8f\\x7d\\x1f\"\n\"\\xf7\\x44\\xfd\\x1c\\x05\\x69\\x94\\x96\\x80\\xa6\\x1b\\xac\\xab\\xa8\\xaa\\x92\\x89\\x94\\x88\\x96\\x1f\\x0e\\xf7\\x81\\x65\\x15\\x54\\x06\\x6d\\x7e\\x88\\x7f\"\n\"\\x7d\\xad\\x1d\\x7a\\x95\\x7c\\x9a\\x86\\x1e\\x88\\x94\\x91\\x8a\\x9f\\x1b\\xf7\\x36\\x06\\xf7\\x3a\\xf9\\x7f\\x05\\xfb\\x38\\x06\\x6d\\x7f\\x37\\x0a\\x79\\x7b\"\n\"\\x1a\\x79\\x95\\x7c\\x9a\\x86\\x1e\\x88\\x94\\x92\\x8a\\x9f\\x1b\\xc1\\x06\\x0e\\xf7\\xbf\\xf8\\x62\\x15\\xf7\\x05\\xfb\\x11\\x05\\x72\\xa2\\x95\\x85\\xa1\\x1b\"\n\"\\xab\\xa5\\xa4\\xa9\\x9c\\x86\\x94\\x78\\xa1\\x1f\\xfb\\x5e\\xf7\\x76\\xfb\\x5c\\xfb\\x76\\x05\\x78\\x75\\x86\\x81\\x7c\\x1a\\x6c\\xa5\\x72\\xab\\xa1\\x95\\x91\"\n\"\\xa5\\xa2\\x1e\\x0e\\xa7\\x6a\\x15\\x71\\x82\\x8a\\x84\\x80\\x1f\\x7a\\x82\\x80\\x78\\x4c\\x1d\\xf8\\xb4\\x06\\xa2\\x99\\x8d\\x91\\x94\\x47\\x1d\\x0e\\xf8\\x98\"\n\"\\xf0\\x0a\\xa2\\xa0\\x9f\\xa1\\x89\\x1f\\x8c\\x8b\\x8e\\x8a\\x8f\\x1e\\x0e\\x2d\\x1d\\x0e\\xf7\\xcc\\xf8\\xef\\x15\\xfb\\x0d\\x06\\x6c\\x80\\x88\\x7f\\x7c\\xf7\"\n\"\\x15\\x1d\\x88\\x93\\x94\\x8a\\x9e\\x1b\\x96\\x06\\x32\\xfc\\x21\\x05\\x7f\\x06\\x6b\\x80\\x89\\x7f\\xf7\\x0e\\x0a\\xf7\\x0c\\x06\\x91\\xaa\\x05\\x6b\\xb5\\xb1\"\n\"\\x7f\\xc4\\x1b\\xe4\\xd4\\xa8\\xc6\\xc8\\x1f\\xbf\\xbd\\xaa\\xd1\\xcc\\x1a\\xc2\\x73\\xbe\\x63\\xab\\x1e\\xa5\\x6a\\x59\\x99\\x4e\\x1b\\x53\\x59\\x7d\\x6e\\x5b\"\n\"\\x1f\\xf7\\x17\\x4f\\x15\\xd7\\xb7\\x67\\x4d\\x6e\\x7e\\x6c\\x74\\x70\\x1f\\x63\\x68\\x5d\\x77\\x53\\x1b\\x3e\\x5f\\xaf\\xc9\\xa8\\x98\\xab\\xa2\\xa5\\x1f\\xb3\"\n\"\\xae\\xb8\\x9f\\xc5\\x1b\\x0e\\x3e\\x0a\\x0e\\xba\\x1d\\x0e\\x33\\x1d\\x0e\\xf8\\x09\\xf7\\xd6\\x15\\xf7\\x28\\x81\\x1d\\x85\\x8c\\x76\\x1b\\xfb\\x25\\x06\\x91\"\n\"\\xa9\\x05\\xa9\\x92\\xa8\\x99\\xc3\\x1b\\xab\\xb2\\x87\\x85\\xb1\\x1f\\x89\\x97\\x95\\x8a\\x92\\x1b\\xaa\\xaa\\xaa\\xaa\\x9f\\x7f\\x98\\x73\\x92\\x1f\\x93\\x6c\"\n\"\\x4e\\x92\\x61\\x1b\\xfb\\x0e\\x33\\x53\\x31\\x77\\x1f\\x84\\x6b\\x05\\x60\\x06\\xe9\\x0a\\xb4\\x39\\x0a\\x54\\x8a\\x1d\\x9d\\x7f\\xb5\\x1e\\xf7\\xbe\\x7a\\x1d\"\n\"\\xfb\\x1a\\x06\\x0e\\x70\\x1d\\x0e\\xf7\\xe1\\xf8\\xef\\x15\\xfb\\x0d\\x06\\x6c\\x80\\x2a\\x1d\\x7b\\xf4\\x0a\\x32\\xfc\\x21\\x05\\xf7\\x05\\x0a\\x6d\\x9d\\x7f\"\n\"\\xb5\\x1e\\xf7\\x04\\x06\\xa9\\x99\\x29\\x1d\\x9c\\x80\\x9c\\x7d\\x32\\x1d\\x8b\\x77\\x4e\\x0a\\xcd\\xa3\\x96\\xbb\\x1b\\xb6\\xbe\\x0a\\xa9\\x98\\x8f\\x96\\x99\"\n\"\\x1f\\x9a\\x97\\x95\\x9d\\x9c\\x1a\\x9c\\xf6\\x1d\\x0e\\xf8\\x54\\x35\\x1d\\xec\\x5d\\x1d\\x0e\\xf8\\x5b\\xf7\\xd6\\x84\\x0a\\x54\\x8c\\x19\\xfb\\x02\\x6d\\x0a\"\n\"\\xb7\\x1e\\xf7\\x05\\x06\\xf7\\x04\\xf0\\xd9\\xf1\\xa1\\x1f\\xed\\xf8\\x4d\\x05\\xfb\\xc7\\x06\\x6b\\x82\\x89\\x7e\\x7b\\x86\\x0a\\x9d\\x7f\\xb6\\x1e\\xf7\\xca\"\n\"\\xf7\\xac\\x15\\xfb\\x14\\xf7\\x75\\x1d\\x8e\\x0a\\x0e\\x43\\x1d\\x0e\\xf7\\x83\\xf8\\x3d\\x15\\x29\\xf7\\x27\\x1d\\x90\\x89\\x91\\x8a\\x98\\x8a\\x5b\\xfb\\x6f\"\n\"\\x18\\x61\\x6c\\x71\\x69\\x6c\\x9d\\x7f\\xb6\\x1f\\xe3\\xf7\\x11\\x1d\\xb5\\xf7\\x52\\x05\\xaa\\xae\\xa0\\x95\\xa6\\x1b\\x9b\\x93\\x85\\x81\\x87\\x8a\\x85\\x89\"\n\"\\x85\\x1f\\x48\\xfb\\xc2\\x05\\xee\\xd3\\x0a\\x7f\\x1b\\xb5\\xf7\\x52\\x05\\xad\\xb4\\x9a\\x92\\xa5\\x1b\\x9b\\x92\\x86\\x81\\x8c\\x1f\\x85\\x8b\\x86\\x89\\x85\"\n\"\\x1e\\x48\\xfb\\xc2\\x05\\xee\\xf7\\x11\\x1d\\xb9\\xf7\\x61\\x05\\x8d\\x95\\x8c\\x92\\x98\\x1a\\xc5\\x5e\\xb4\\x49\\x63\\x67\\x7d\\x6c\\x66\\x1e\\xaa\\x74\\x6d\"\n\"\\x99\\x65\\x1b\\x6c\\x78\\x84\\x74\\x65\\x1f\\x0e\\x3a\\x0a\\x0e\\x24\\x0a\\x0e\\xf7\\x52\\x91\\x0a\\xf8\\x29\\x2e\\x15\\x54\\x06\\x6c\\x7f\\x88\\x7f\\x7d\\xad\"\n\"\\x1d\\x7b\\x96\\x7b\\x99\\x86\\x1e\\x88\\x93\\x96\\x8a\\x9c\\x1b\\xf7\\x42\\x06\\xa9\\x98\\x8e\\x97\\x99\\xa0\\x1d\\x8e\\x82\\x85\\x8c\\x76\\x1b\\x80\\x06\\xe8\"\n\"\\xf8\\x33\\x05\\x97\\x06\\xab\\x95\\x96\\x1d\\x82\\x85\\x8c\\x77\\x1b\\xfb\\x0c\\x06\\x83\\x64\\x05\\xb0\\x64\\x64\\x99\\x4e\\x1b\\xfb\\x38\\xfb\\x1e\\xfb\\x0e\"\n\"\\xfb\\x24\\x2c\\xe0\\x48\\xf7\\x0d\\xc4\\xbd\\x9a\\xad\\xc2\\x1f\\x39\\xf7\\xa8\\x15\\xd6\\xb9\\x69\\x53\\x65\\x70\\x61\\x63\\x72\\x1f\\x79\\x6d\\x69\\x82\\x60\"\n\"\\x1b\\x63\\x6b\\x94\\x9d\\x77\\x1f\\x7a\\x9a\\x7f\\xa5\\xa0\\x1a\\xb2\\xa6\\xb5\\xb4\\xa4\\x1e\\x9e\\xa9\\xac\\x93\\xb6\\x1b\\x0e\\x3f\\x0a\\x0e\\x56\\x1d\\x0e\"\n\"\\x94\\x0a\\x0e\\x57\\x1d\\x0e\\xf7\\xdd\\xf7\\x15\\x15\\x50\\xf7\\x55\\x05\\xa4\\x94\\x8c\\x91\\x96\\x1f\\xa1\\x97\\x99\\xa0\\xa0\\x1a\\x9c\\x81\\x51\\x0a\\x82\"\n\"\\x8c\\x79\\x1b\\xfb\\x18\\xf7\\x1d\\x1d\\x92\\x8b\\x9f\\x1b\\x95\\x06\\xeb\\xfb\\xd6\\x05\\xf7\\x00\\x06\\xf7\\x83\\xf7\\xd6\\x05\\x99\\x06\\xaa\\xf7\\x2e\\x1d\"\n\"\\x83\\x82\\x8c\\x78\\x1b\\xfb\\x1a\\xf7\\x1d\\x1d\\x91\\x8b\\xa0\\x1b\\x8d\\x06\\x0e\\x3d\\x0a\\x0e\\xf8\\x40\\xec\\x0a\\x9c\\x9c\\x1a\\x9c\\x81\\x9b\\x7c\\x8d\"\n\"\\x0a\\x53\\x0a\\x0e\\xf7\\x0b\\x1d\\x9c\\x9c\\x92\\x99\\x98\\x1e\\x96\\x96\\x8e\\x92\\x92\\xa7\\x8c\\x90\\x18\\xf7\\x02\\x1d\\x0e\\xf8\\x5b\\xf8\\x66\\x15\\xa4\"\n\"\\x92\\x93\\x92\\xa4\\x1b\\xaf\\x8d\\xa8\\xa7\\xab\\x1a\\xa5\\x79\\x9b\\x6c\\x42\\x41\\x51\\x45\\x7c\\x1e\\x68\\xfb\\x30\\x85\\x72\\x84\\x85\\x73\\x89\\x19\\x64\"\n\"\\x87\\x72\\x72\\x68\\x1a\\x72\\x99\\x7e\\xa8\\x88\\x1e\\x9c\\x89\\x91\\x88\\x81\\x1a\\x88\\x8a\\x85\\x89\\x84\\x1e\\x67\\xfb\\x39\\x05\\x89\\x82\\x8a\\x83\\x82\"\n\"\\x1a\\x50\\xb9\\x5e\\xc9\\xb4\\xaa\\xa6\\xaf\\xa3\\x7a\\x9b\\x70\\x8c\\x1e\\x76\\x8c\\x86\\x8e\\x98\\x1a\\x8e\\x8c\\x91\\x8c\\x90\\x1e\\xac\\xf7\\x29\\x05\\x90\"\n\"\\xa1\\x8e\\x9e\\x96\\x1a\\x98\\x87\\x98\\x80\\x9b\\x1e\\xa6\\xa3\\x95\\x9d\\x95\\xb5\\x08\\x0e\\xf7\\xfa\\xf9\\xcd\\x15\\xfb\\x08\\xfe\\xc7\\xf7\\x08\\x06\\x0e\"\n\"\\xf7\\x89\\x82\\x15\\x71\\x85\\x82\\x84\\x72\\x1b\\x67\\x89\\x6e\\x6f\\x6b\\x1a\\x71\\x9d\\x7b\\xaa\\xd4\\xd5\\xc5\\xd1\\x9a\\x1e\\xae\\xf7\\x31\\x90\\xa3\\x93\"\n\"\\x91\\xa3\\x8e\\x19\\xb2\\x8f\\xa4\\xa4\\xad\\x1a\\xa4\\x7d\\x98\\x6e\\x8e\\x1e\\x7a\\x8d\\x85\\x8f\\x94\\x1a\\x8e\\x8c\\x92\\x8d\\x91\\x1e\\xaf\\xf7\\x3a\\x05\"\n\"\\x8d\\x93\\x8c\\x93\\x94\\x1a\\xc7\\x5d\\xb7\\x4d\\x63\\x6b\\x70\\x68\\x73\\x9c\\x7b\\xa6\\x89\\x1e\\xa0\\x8a\\x90\\x88\\x7e\\x1a\\x88\\x8a\\x86\\x8a\\x86\\x1e\"\n\"\\x6a\\xfb\\x2a\\x05\\x86\\x75\\x88\\x78\\x80\\x1a\\x7e\\x8f\\x7f\\x96\\x7a\\x1e\\x70\\x74\\x81\\x78\\x81\\x61\\x08\\x0e\\xf8\\x7c\\xf8\\x0b\\x15\\x75\\x7e\\x83\"\n\"\\x6f\\x75\\x1f\\x6e\\x75\\x7f\\x80\\xf7\\x54\\x1d\\xc9\\x44\\x70\\x99\\x5e\\x1b\\x5f\\x69\\x79\\x5f\\x63\\x1f\\x6d\\x6a\\x80\\x78\\xd1\\x0a\\x56\\xc8\\xb2\\x77\"\n\"\\xb5\\x1b\\xb5\\xab\\x9d\\xb6\\xb1\\x1f\\xae\\xb3\\x93\\x98\\xa0\\x1a\\xaa\\x71\\xa4\\x6b\\x1e\\x0e\\xf7\\x56\\x24\\x15\\x81\\x6e\\x89\\x81\\x7e\\x1a\\x67\\xa8\"\n\"\\x71\\xb4\\xa7\\xa8\\x98\\xa0\\x9f\\x1e\\x9d\\x9f\\x91\\x9a\\x90\\xb6\\xad\\xf7\\xaf\\x18\\x8c\\x8e\\x8b\\x8e\\x8d\\x1a\\xa6\\x7b\\x9b\\x6f\\x6d\\x73\\x78\\x6d\"\n\"\\x81\\x1e\\xec\\xf7\\x7f\\x15\\x5e\\x62\\x64\\x62\\x6b\\xa3\\x75\\xac\\x1f\\x9d\\x06\\xb7\\xb5\\xb1\\xb4\\xab\\x73\\xa2\\x69\\x1f\\x0e\\xf8\\x0b\\xea\\x15\\xf1\"\n\"\\x9c\\xcf\\xb4\\xb9\\x1a\\xa3\\x78\\x9e\\x72\\x7d\\x81\\x88\\x82\\x7c\\x1e\\x73\\x64\\x68\\x81\\x66\\x1b\\x4f\\x62\\xad\\xbc\\xd1\\xd5\\xc6\\xe1\\xb7\\x9d\\x80\"\n\"\\x71\\x8c\\x1f\\x8c\\x6f\\x8b\\x88\\x92\\x83\\x08\\x83\\x92\\x9a\\x85\\x98\\x1b\\x9c\\x9d\\x93\\x98\\x98\\x1f\\x95\\x94\\x8f\\x95\\x91\\xa5\\x94\\xb3\\x18\\x8e\"\n\"\\x9b\\x8c\\x90\\x92\\x1a\\xa2\\x78\\x9c\\x71\\x85\\x86\\x8a\\x88\\x82\\x1e\\x7a\\x96\\x77\\x92\\x70\\x8f\\x98\\xc7\\x18\\x90\\x9e\\x83\\x0a\\x67\\x74\\x75\\x5e\"\n\"\\x81\\x1e\\x7b\\x44\\x05\\xfb\\x0f\\x6f\\x2d\\x22\\xfb\\x03\\x1a\\x3c\\xba\\x51\\xdc\\x76\\x1e\\x7b\\x42\\x05\\x86\\x78\\x8b\\x8a\\x82\\xf7\\x1c\\x1d\\x95\\x90\"\n\"\\x94\\x90\\xa5\\x08\\x0e\\xf8\\x02\\xf7\\x7c\\x15\\xa9\\x97\\xd7\\x0a\\x4a\\x06\\x88\\xba\\x8b\\x8b\\x99\\x1a\\xba\\xad\\xac\\xbe\\xa4\\x9c\\x84\\x7b\\x97\\x1e\"\n\"\\x71\\x9e\\x8f\\x88\\xa0\\x1b\\xac\\xab\\xaa\\xaa\\xbc\\x47\\xb7\\x41\\xfb\\x0e\\x2c\\x30\\xfb\\x0a\\x7f\\x8c\\x84\\x8d\\x7b\\x1f\\x64\\x06\\x6b\\x80\\x2a\\x1d\"\n\"\\x7b\\x1a\\x79\\x95\\x7c\\x9a\\x86\\x1e\\x88\\x94\\x94\\x8a\\x9d\\x1b\\xcb\\x06\\x7c\\x3d\\x6a\\x5c\\x62\\x88\\x08\\x60\\x83\\x75\\x76\\x6b\\x1a\\x6c\\x9d\\x7f\"\n\"\\xb6\\x1e\\xf7\\xd5\\x06\\xb9\\xa8\\x95\\xa3\\xa4\\x1f\\x9e\\x9d\\x99\\xaa\\xa4\\x1a\\xa3\\x78\\x9b\\x71\\x6e\\x75\\x7c\\x6e\\x80\\x1e\\xfb\\x55\\x06\\xa5\\xb5\"\n\"\\x97\\xaa\\x96\\xc2\\x08\\x0e\\xb0\\x0a\\xf8\\x0c\\xf7\\xeb\\x15\\x4f\\xf7\\x0a\\x05\\xa7\\x93\\x9f\\xa3\\xa5\\x1a\\x9c\\x81\\x9b\\x7c\\x90\\x1e\\x8f\\x82\\x87\"\n\"\\x8b\\x74\\x1b\\x2f\\x25\\x1d\\x76\\x97\\x7c\\xa0\\x87\\x1e\\x89\\x91\\x8e\\x8b\\x9b\\x1b\\xe6\\xfb\\x4a\\x05\\x4a\\x06\\x72\\x7b\\x7d\\x75\\x7a\\x94\\x83\\x9f\"\n\"\\x1f\\xe7\\x06\\x86\\x72\\x05\\x2d\\x06\\x72\\x7a\\x7d\\x75\\x79\\x93\\x84\\xa1\\x1f\\xe7\\x06\\x85\\x71\\x05\\x60\\x06\\x6b\\x81\\x36\\x1d\\xf7\\x55\\x20\\x0a\"\n\"\\x9c\\x1a\\x9c\\x81\\x9a\\x7c\\x88\\x0a\\x75\\x1b\\x62\\x06\\x90\\xa5\\x05\\xe9\\x06\\xa4\\x9c\\x9a\\xa1\\x9b\\x82\\x93\\x76\\x1f\\x2f\\x06\\x90\\xa4\\x05\\xe9\"\n\"\\x06\\xa4\\x9c\\x9a\\xa0\\x9d\\x82\\x92\\x76\\x1f\\x4c\\x06\\xf7\\x42\\xf7\\x4a\\x05\\xa7\\x97\\x50\\x1d\\x9b\\x1a\\x9c\\x81\\x9b\\x7c\\x88\\x0a\\x75\\x1b\\x30\"\n\"\\x06\\x6b\\x81\\x88\\x7f\\x7b\\x1f\\x7c\\x7f\\x82\\x79\\x7b\\x1a\\x78\\x95\\x7d\\x9d\\x85\\x1e\\x0e\\xf8\\x51\\xf8\\x1d\\x15\\x95\\xb8\\x05\\xb4\\x94\\xb2\\xad\"\n\"\\xb2\\x1b\\x9c\\x9a\\x88\\x86\\x99\\x1f\\x86\\x96\\x90\\x8a\\x93\\x1b\\xac\\xaa\\xaa\\xad\\xab\\x61\\x9f\\x47\\x27\\x2a\\x3e\\x2a\\x76\\x1f\\x80\\x5a\\x05\\x55\"\n\"\\x06\\x6a\\x82\\x99\\x1d\\xc0\\x06\\x59\\xfb\\x72\\x05\\x5a\\x80\\x66\\x6a\\x5e\\x1b\\x7a\\x7f\\x8d\\x91\\x7b\\x1f\\x8f\\x7e\\x88\\x8c\\x85\\x1b\\x6a\\x6b\\x6d\"\n\"\\x6b\\x6a\\xb6\\x76\\xcf\\xf2\\xeb\\xda\\xf3\\xa2\\x1f\\xbd\\xf7\\x74\\x05\\xc1\\x06\\xaa\\x97\\x35\\x0a\\x9c\\x1a\\x9c\\x80\\x9a\\x7d\\x88\\x0a\\x74\\x1b\\x0e\"\n\"\\xf8\\xa7\\xf8\\x6a\\x15\\x84\\x6d\\x05\\x8a\\x84\\x89\\x7f\\x86\\x1a\\x78\\x9c\\x7c\\xa1\\xac\\x9d\\x9d\\xb1\\x94\\x1e\\xa7\\xf7\\x12\\x05\\xfb\\x7a\\x06\\x4d\"\n\"\\x5c\\x77\\x60\\x61\\x1f\\x6f\\x6d\\x76\\x61\\x6e\\x1a\\x81\\x07\\x3e\\x77\\x57\\x54\\x4c\\x1a\\x5f\\xa9\\x67\\xd8\\x5b\\x1e\\xe8\\x52\\x05\\xc0\\x6a\\xa9\\x6d\"\n\"\\x77\\x1a\\x70\\x66\\x70\\x65\\x1e\\xfb\\x20\\x06\\x92\\xab\\x05\\x8f\\x9b\\x8b\\x8c\\x91\\x1a\\x9e\\x7a\\x9a\\x74\\x6b\\x77\\x79\\x66\\x83\\x1e\\x6f\\xfb\\x12\"\n\"\\x05\\xf7\\x80\\x06\\xed\\x85\\xed\\xe2\\x87\\xe6\\x08\\xd8\\x9c\\xc0\\xc4\\xce\\x1a\\xbc\\x72\\xa8\\x2e\\xc3\\x1e\\x3a\\xbc\\x05\\x54\\xac\\x6d\\xa9\\x9f\\x1a\"\n\"\\xa6\\xb1\\xa5\\xb3\\x1e\\xa2\\xfb\\x9e\\x15\\xba\\x6e\\xa7\\x6d\\x76\\x1a\\x75\\x76\\x81\\x61\\x1e\\x7f\\x98\\x79\\x98\\x60\\xa8\\x31\\xc3\\x18\\x5c\\xa9\\x77\"\n\"\\xa0\\xa1\\x1a\\xa1\\xa2\\x98\\xb2\\x1e\\xab\\x6f\\x92\\x85\\xa8\\x79\\x08\\x0e\\xf7\\x64\\xf8\\x0a\\x15\\x6b\\x62\\x7a\\x5e\\x63\\x1a\\x7f\\x8e\\x7b\\x91\\x6f\"\n\"\\x1e\\x66\\x6d\\x05\\x6c\\x72\\x83\\x7f\\x76\\x1a\\x72\\x9e\\x79\\xa5\\x9e\\x93\\x8f\\xa1\\xa7\\x1e\\xb1\\xa8\\x05\\x7a\\xab\\xa2\\x85\\xae\\x1b\\xae\\xa5\\x91\"\n\"\\x9c\\xb2\\x1f\\xa4\\x6f\\x05\\x75\\x9d\\x92\\x86\\x9d\\x1b\\xad\\xae\\xaa\\xa9\\x98\\x87\\x93\\x7c\\x9d\\x1f\\x74\\xa9\\x05\\xac\\xb5\\x9c\\xb7\\xb4\\x1a\\x96\"\n\"\\x88\\x9b\\x85\\xa6\\x1e\\xae\\xa8\\x05\\xaa\\xa3\\x93\\x97\\xa0\\x1a\\xa4\\x78\\x9d\\x71\\x78\\x83\\x87\\x76\\x6f\\x1e\\x68\\x70\\x05\\x9e\\x6a\\x75\\x91\\x65\"\n\"\\x1b\\x68\\x72\\x85\\x78\\x63\\x1f\\x73\\xa7\\x05\\xa1\\x79\\x83\\x8f\\x79\\x1b\\x6b\\x68\\x6d\\x6e\\x82\\x95\\x74\\x92\\x82\\x1f\\xf7\\x5b\\x6b\\x15\\xb5\\xa9\"\n\"\\x6f\\x64\\x54\\x54\\x56\\x52\\x60\\x6d\\xa7\\xb4\\xc2\\xc1\\xbe\\xc6\\x1f\\x0e\\xf7\\xfc\\xf8\\xdb\\x15\\x77\\xfb\\x8a\\x05\\x8a\\x85\\x8b\\x86\\x89\\x1a\\x7c\"\n\"\\x97\\x80\\x9b\\xa1\\x97\\x95\\xa6\\x94\\x1e\\xe3\\xf7\\x8c\\x05\\x0e\\xf8\\xca\\xf0\\x0a\\xa3\\x9f\\x9f\\xa2\\x89\\x1f\\x8d\\x8b\\x8d\\x8a\\x8e\\x1e\\xfb\\x78\"\n\"\\xf7\\x60\\xf7\\x70\\x1d\\x93\\x84\\x9a\\x1b\\xa5\\x9e\\xa2\\xa6\\x88\\x1f\\x0e\\xf7\\x6f\\x1d\\x9c\\x98\\x92\\xea\\x1d\\xf7\\x03\\xf7\\x17\\x15\\xf7\\x45\\xf7\"\n\"\\x17\\x05\\x9d\\x98\\x91\\xea\\x1d\\x0e\\xf7\\x6f\\x1d\\x9d\\x99\\x91\\x93\\x98\\x1a\\x9b\\x7e\\x96\\x79\\x82\\x83\\x88\\x84\\x81\\x1e\\x85\\x87\\xfb\\xb8\\xfb\"\n\"\\x46\\xf7\\x69\\xfb\\x47\\x05\\x7e\\x99\\x8e\\x8a\\x96\\x1b\\xa1\\xa1\\x9d\\x9e\\x92\\x87\\x94\\x83\\x93\\x1f\\x0e\\xf8\\x6a\\xf7\\x68\\x15\\xfb\\x45\\xfb\\x17\"\n\"\\x05\\x7a\\xef\\x1d\\x8f\\x82\\x93\\x83\\x1f\\x0e\\xf7\\xa2\\xf7\\xd6\\x15\\xa9\\x06\\xa9\\x97\\x2a\\x0a\\x9d\\x9b\\x41\\x0a\\x6f\\x06\\x93\\xac\\x05\\xa1\\x90\"\n\"\\xc2\\x0a\\x68\\xf3\\x0a\\x7f\\xb6\\x1e\\xac\\x2e\\x0a\\x64\\x25\\x0a\\xf7\\x43\\x63\\x0a\\x70\\x06\\xf8\\x1d\\xf7\\xd6\\x15\\xfb\\x10\\x42\\x1d\\x30\\x1d\\x87\"\n\"\\x94\\x91\\x8b\\x9f\\x1b\\x9a\\x2e\\x0a\\x68\\x25\\x0a\\xf7\\x43\\x06\\xa7\\x99\\x28\\x1d\\x9c\\x1a\\x9c\\x81\\x9a\\x7d\\x74\\x0a\\x6c\\x06\\xe9\\xf8\\x88\\x15\"\n\"\\xfb\\x12\\x06\\x73\\xfb\\x00\\x05\\xf7\\x12\\x06\\x0e\\xf7\\x9e\\xf7\\xd5\\x15\\xa9\\x06\\xaa\\x96\\x8e\\x97\\x9a\\x1f\\x9b\\x98\\x94\\x9c\\x9c\\x41\\x0a\\x6f\"\n\"\\x06\\x92\\xab\\x05\\xa5\\x91\\x9d\\x9b\\xa2\\x1b\\x95\\x93\\x89\\x85\\xa0\\x1f\\x87\\x97\\x93\\x89\\x93\\x1b\\x9d\\x9a\\x93\\x9b\\x99\\x1f\\x85\\x93\\x95\\x87\"\n\"\\x99\\x1b\\xa9\\x06\\x33\\xfc\\x20\\x05\\x68\\x06\\x6a\\x81\\x3b\\x1d\\x6e\\x9d\\x7e\\xb6\\x1e\\xf7\\x44\\x63\\x0a\\x6b\\x06\\xf7\\x03\\xf8\\x87\\x05\\xfb\\x1b\"\n\"\\x06\\x72\\x7b\\x84\\x79\\x7c\\x1f\\x9b\\x71\\x68\\x94\\x65\\x1b\\x3c\\x40\\x4c\\x3a\\x79\\x1f\\x84\\x6a\\x05\\x69\\xf3\\x0a\\x7e\\xb6\\x1e\\xab\\x06\\x5b\\xfb\"\n\"\\x6e\\x05\\x63\\x06\\x6b\\x81\\x88\\x7f\\xe2\\x0a\\xb5\\x1e\\xf7\\x44\\x06\\xa8\\x99\\x8f\\x96\\x99\\xf7\\x4c\\x1d\\x83\\x82\\x8c\\x78\\x1b\\x70\\x06\\x0e\\x76\"\n\"\\x1d\\xf8\\x3d\\xf7\\xd6\\x15\\xe0\\x06\\xab\\xf7\\x2e\\x1d\\x82\\x20\\x1d\\x37\\x06\\xa3\\xf7\\x00\\x05\\x8e\\x9c\\x8c\\x8f\\x92\\x1a\\xa2\\x78\\x9c\\x72\\x7a\"\n\"\\x7a\\x83\\x7e\\x7d\\x1e\\x81\\x82\\x86\\x80\\x86\\x72\\x72\\xfb\\x02\\x18\\x35\\xf7\\x17\\x1d\\x9d\\x1b\\xe0\\x06\\x3f\\xfb\\xe9\\x05\\x87\\x78\\x8b\\x89\\xf7\"\n\"\\x5a\\x1d\\x95\\x94\\x90\\x96\\x90\\xa4\\x08\\x0e\\xf8\\x3c\\xf7\\xd6\\x15\\xe1\\x06\\xaa\\x97\\x2a\\x0a\\x9c\\x9c\\x1a\\x9c\\x80\\x51\\x0a\\x84\\x8c\\x76\\x1b\"\n\"\\x37\\x06\\xa3\\xf7\\x00\\x05\\x90\\x9e\\x8b\\x8c\\x94\\x1a\\xa1\\x78\\x9c\\x72\\x67\\x74\\x75\\x5f\\x81\\x1e\\x73\\xfb\\x02\\x05\\x34\\xf7\\x17\\x1d\\x9e\\x1b\"\n\"\\xe0\\x06\\x81\\x5f\\x05\\x34\\x06\\x6d\\x80\\xd6\\x0a\\xe0\\x06\\x60\\xfb\\x56\\x05\\x89\\x81\\x89\\x7f\\x84\\x1a\\x75\\xcf\\x0a\\xa5\\xb7\\xf7\\x58\\x18\\xe1\"\n\"\\x06\\xaa\\x96\\x8e\\x97\\x9a\\xf5\\x0a\\x82\\x8c\\x79\\x1b\\x37\\x06\\x0e\\x79\\x1d\\xf8\\xd6\\xf8\\x76\\x15\\xab\\x06\\xa0\\x92\\x8c\\x90\\x94\\x1f\\x9d\\x94\"\n\"\\x96\\x9c\\x9c\\x1a\\xa2\\x7c\\x95\\x68\\x1e\\xfb\\x59\\x06\\xfb\\x23\\x8c\\xfb\\x1c\\x3d\\x78\\x2d\\x82\\x60\\x18\\x89\\x82\\x8a\\x83\\x81\\x1a\\x40\\xd5\\x50\"\n\"\\xf7\\x03\\x7f\\x1e\\x51\\xfb\\x99\\x05\\x40\\x06\\x75\\x84\\x8a\\x86\\x82\\x1f\\x7a\\x82\\x7f\\x79\\x7c\\x1a\\x73\\x99\\x81\\xaf\\x1e\\xf7\\x1d\\x06\\xa2\\x97\"\n\"\\x92\\x9e\\x98\\x1f\\x7a\\x8f\\x97\\x82\\x9e\\x1b\\xe8\\x06\\xa0\\x92\\x8c\\x90\\x94\\x1f\\x9d\\x94\\x96\\x9c\\x9c\\x1a\\xa2\\x7d\\x95\\x68\\x1e\\x6b\\x06\\xb5\"\n\"\\xf8\\xca\\x15\\xfb\\x12\\xfc\\xcb\\x81\\x86\\x86\\x86\\x84\\x83\\x19\\x88\\x94\\x89\\x8e\\x82\\x90\\xf7\\x12\\xf8\\xcc\\x18\\x0e\\xf7\\xbc\\xf8\\x59\\x15\\x38\"\n\"\\x49\\x49\\x37\\x38\\xcd\\x48\\xdd\\xdc\\xcd\\xce\\xde\\xdd\\x49\\xcf\\x3b\\x1f\\x0e\\xc3\\x0a\\xf7\\x4c\\xf7\\x1c\\xf3\\x1d\\x80\\x88\\x83\\x83\\xf7\\x3e\\x1d\"\n\"\\x0e\\xf7\\xb0\\xf8\\xdb\\xf3\\x1d\\x81\\x88\\x81\\x84\\x1a\\x7e\\x99\\x80\\x9b\\x99\\x95\\x91\\x9d\\x9b\\x1e\\xf7\\x58\\xf7\\x76\\x05\\x0e\\xf8\\x6a\\xf7\\x68\"\n\"\\x15\\xfb\\x46\\xfb\\x17\\x05\\x7b\\xef\\x1d\\x90\\x82\\x92\\x83\\x1f\\xfb\\x04\\xfb\\x17\\x15\\xfb\\x45\\xfb\\x17\\x05\\x7a\\x7e\\x84\\x81\\x7f\\x1a\\x7b\\x98\"\n\"\\x80\\x9d\\x94\\x93\\x8e\\x92\\x95\\x1e\\x91\\x8f\\xf7\\xb7\\xf7\\x46\\xfb\\x68\\xf7\\x47\\x05\\x98\\x7d\\x88\\x8c\\x80\\x1b\\x75\\x75\\x79\\x78\\x84\\x8f\\x82\"\n\"\\x93\\x83\\x1f\\x0e\\xf4\\x7d\\x15\\x2c\\x0a\\xf7\\x6d\\x16\\x2c\\x0a\\xf7\\x6d\\x16\\x2c\\x0a\\x0e\\xf8\\xb9\\xf8\\x00\\x15\\xa4\\x93\\x96\\x96\\x9c\\x1a\\x9a\"\n\"\\x82\\x95\\x7e\\x85\\x89\\x8b\\x87\\x7e\\x1e\\xfc\\x19\\xfb\\x05\\x05\\x71\\x84\\x80\\x7f\\x79\\x1a\\x7d\\x94\\x80\\x98\\x91\\x8d\\x8b\\x90\\x98\\x1e\\xe4\\xf7\"\n\"\\xee\\x15\\x41\\x45\\xbd\\x0a\\xa8\\xfb\\xd1\\xb8\\x0a\\xf7\\xaf\\xc3\\xb8\\x0a\\x0e\\xf8\\x64\\xfb\\x33\\x15\\x9c\\xd8\\x05\\x8e\\x99\\x8c\\x92\\x93\\x1a\\xa1\"\n\"\\xf7\\x74\\x1d\\x81\\x88\\x84\\x84\\x6f\\x89\\x80\\x18\\x7c\\x68\\x67\\x83\\x67\\x1b\\x52\\x6c\\xa2\\xb3\\xb9\\xb1\\xa4\\xf7\\x24\\xbd\\x1f\\x93\\x8d\\x97\\xc3\"\n\"\\x05\\x90\\x9e\\x8b\\x8c\\x79\\x0a\\x6c\\x75\\x79\\x69\\x7f\\x1e\\x46\\x71\\x62\\x74\\x68\\x6e\\x08\\x64\\x6a\\x73\\x58\\x55\\x1a\\x32\\xce\\x53\\xf7\\x01\\xcc\"\n\"\\xba\\x97\\xb5\\xf0\\x1e\\x36\\xf8\\xaf\\x15\\x5f\\x62\\x65\\x61\\x6c\\xa3\\x74\\xac\\x1f\\x9d\\x06\\xb7\\xb5\\xb2\\xb4\\xab\\x73\\xa1\\x69\\x1f\\x0e\\xf7\\xe9\"\n\"\\xf9\\x24\\x15\\x98\\x7e\\x84\\x8e\\x80\\x1b\\x70\\x74\\x75\\x73\\x82\\x91\\x81\\x96\\x80\\xf7\\x34\\x1d\\x95\\x7f\\x96\\x1f\\x0e\\xf8\\xdf\\xf8\\xe8\\x2f\\x1d\"\n\"\\xf8\\x42\\xf8\\xd6\\x60\\x0a\\xf8\\xe4\\xf9\\x0e\\x15\\x7e\\xf7\\x37\\x1d\\xa9\\x54\\x1d\\x6c\\x6b\\x7c\\x6e\\x6b\\x1f\\x6f\\x71\\x7e\\x78\\x7a\\x1a\\x7c\\xf7\"\n\"\\x2b\\x0a\\xaf\\x94\\x91\\x9e\\x1d\\xad\\xa9\\x9c\\xb6\\xb5\\x1f\\xa0\\xa0\\x94\\x9a\\x98\\x1a\\x99\\x7c\\x97\\x7b\\x1e\\x0e\\xcb\\x0a\\xf7\\xc6\\xf9\\x2c\\x2b\"\n\"\\x0a\\xf8\\x4c\\xf9\\x0c\\x5b\\x1d\\xf7\\xe3\\xf9\\x0c\\x40\\x0a\\xf8\\x5a\\xf9\\x52\\xeb\\x1d\\xf7\\x97\\x93\\x15\\x73\\x21\\x05\\x8c\\x99\\x94\\x42\\x0a\\xb2\"\n\"\\x7b\\x9e\\x62\\x94\\x1f\\x94\\xb4\\x05\\x0e\\xf8\\x3e\\xf8\\xe6\\x5b\\x0a\\xf7\\xdc\\x93\\x15\\x69\\x79\\x81\\x84\\x7a\\x7c\\x08\\x6c\\x6e\\x79\\x68\\x67\\x5d\"\n\"\\x0a\\x95\\x94\\x9a\\x9a\\x9c\\x1f\\x9e\\xa0\\x9f\\x98\\xd3\\xb4\\x08\\x0e\\xf8\\x3e\\xf8\\xcc\\x45\\x1d\\xaa\\x0a\\xb2\\x1d\\x0e\\xf8\\x2d\\xf7\\xa3\\x15\\xe6\"\n\"\\x06\\xb1\\xa4\\x9e\\xa9\\xa3\\x7e\\x95\\x68\\x1f\\x8a\\x06\\xa5\\xf7\\x09\\x05\\x8d\\x94\\x8c\\x93\\x92\\x1a\\xbe\\x5d\\xa9\\x3e\\x62\\x4a\\x80\\x80\\x72\\x1e\"\n\"\\x7a\\x83\\x80\\x7b\\x79\\x1a\\x77\\x99\\x7d\\x9f\\x92\\x96\\x8d\\x8e\\x98\\x1e\\x93\\xae\\xa0\\x8e\\xa4\\x1b\\xad\\x9a\\x86\\x7f\\x8a\\x1f\\x8a\\x8b\\x89\\x8a\"\n\"\\x8a\\x1e\\x8a\\x86\\x05\\x8f\\x71\\x7f\\x8c\\x78\\x1b\\x3d\\x50\\x75\\x5e\\x64\\x1f\\x78\\x76\\x81\\x74\\x77\\x1a\\x5b\\xbb\\x69\\xcd\\xb0\\xa9\\x90\\x9a\\xb2\"\n\"\\x1e\\xa0\\xe7\\x15\\x79\\x6b\\x61\\x80\\x6b\\x1b\\x78\\x7c\\x91\\x93\\x9f\\xb6\\xa0\\xb5\\x9d\\x98\\x8a\\x86\\xa8\\x1f\\x0e\\xf7\\xfe\\xf8\\x61\\x15\\xc0\\x06\"\n\"\\xaa\\x97\\x8e\\x97\\x9a\\xdf\\x0a\\xfb\\x69\\x27\\x1d\\xbf\\x06\\x69\\xfb\\x2b\\xfb\\x07\\x52\\x05\\x63\\x78\\x7e\\x7b\\x6e\\x1a\\x75\\x9f\\x78\\xa1\\x98\\x95\"\n\"\\x8e\\x97\\xa3\\x1e\\xc0\\xa6\\x77\\x34\\x05\\x56\\x25\\x0a\\xf8\\x6e\\x06\\xb5\\xf7\\x4d\\x05\\x8e\\x9c\\x8c\\x8f\\x93\\x1a\\xa2\\x79\\x9c\\x71\\x67\\x75\\x75\"\n\"\\x5e\\x81\\x1e\\x78\\x37\\x05\\xfb\\x62\\x06\\xa8\\xf7\\x17\\xf7\\x2c\\xd7\\x05\\xb3\\x9f\\x98\\x9a\\xa8\\x1a\\xa0\\x78\\x9e\\x75\\x7f\\x7c\\x86\\x82\\x77\\x1e\"\n\"\\x30\\x5d\\x05\\x0e\\xbb\\x1d\\x0e\\xf8\\x39\\xf7\\x7c\\x15\\x95\\x06\\x8a\\x7d\\x05\\x74\\xa6\\x1d\\x95\\x91\\xa4\\x9b\\xd5\\x18\\x90\\x9e\\x83\\x0a\\x6b\\x76\"\n\"\\x79\\x68\\x7f\\x1e\\x81\\x2b\\x1d\\xf7\\x0b\\x06\\x7e\\x52\\x05\\x89\\x80\\x89\\x80\\x84\\x1a\\x75\\xf7\\x46\\x1d\\xaf\\xf7\\x36\\x18\\xfb\\xe7\\x06\\xfb\\x54\"\n\"\\xfb\\x35\\xfb\\x34\\xfb\\x52\\xfb\\x16\\xe6\\x37\\xf7\\x1e\\x1f\\xf7\\xf8\\x06\\xa6\\xf7\\x0b\\x05\\x8e\\x99\\x8c\\x92\\x93\\x1a\\xa2\\x79\\x9b\\x72\\x67\\x74\"\n\"\\x75\\x5f\\x82\\x1e\\x87\\x79\\x05\\xfb\\x1f\\x06\\xfb\\x00\\x16\\x6a\\x7b\\x8e\\x93\\x76\\x1f\\x5e\\x9d\\x6f\\xbb\\xc7\\x1a\\xc9\\xae\\xd1\\xc1\\xb6\\x1e\\xb2\"\n\"\\xab\\xb1\\x98\\xc4\\x8c\\x08\\x0e\\xf8\\x41\\xf8\\xd4\\x15\\xfb\\x01\\x22\\x2e\\x2a\\x43\\xc7\\x56\\xdd\\xf7\\x05\\xef\\xe2\\xed\\xd6\\x50\\xc2\\x39\\x1f\\x79\"\n\"\\x39\\x15\\xb4\\xa8\\x70\\x66\\x5e\\x58\\x61\\x54\\x65\\x6a\\xa5\\xaa\\xbb\\xc0\\xb9\\xc1\\x1f\\x0e\\xb1\\x1d\\x0e\\xf8\\x54\\x35\\x1d\\x0e\\xf8\\x7c\\xf8\\xef\"\n\"\\x15\\xfb\\x48\\x06\\x6a\\x81\\xf7\\x19\\x1d\\xd2\\x06\\x69\\xfb\\x2a\\x30\\x5f\\x05\\x63\\x78\\x7d\\x7a\\x6f\\x1a\\x74\\x9e\\x78\\xa2\\x97\\x98\\x8f\\x95\\xa0\"\n\"\\x1e\\xa9\\x9a\\x6f\\xfb\\x11\\x05\\xfb\\x0a\\x38\\x1d\\xf7\\xeb\\x63\\x0a\\xfb\\x09\\x06\\xb1\\xf7\\x3c\\xe9\\xb9\\x05\\xb2\\x9d\\x99\\x9d\\xa7\\x1a\\xa2\\x78\"\n\"\\x9e\\x74\\x7c\\x84\\x89\\x7e\\x72\\x1e\\x6c\\x7b\\x05\\x0e\\xbf\\x1d\\x0e\\xf9\\x20\\xf7\\x37\\x15\\x95\\xb9\\x05\\x90\\xa3\\x8e\\xa4\\xa2\\x1a\\xe6\\x51\\xcc\"\n\"\\x3b\\x56\\x58\\x72\\x5b\\x5e\\x1e\\xba\\x71\\x63\\xa5\\x5a\\x1b\\x4b\\x4c\\x68\\x4e\\x5c\\x1f\\x5f\\x51\\x71\\x45\\x4b\\x1a\\x2b\\xc6\\x47\\xe1\\xbc\\xbf\\xa3\"\n\"\\xb6\\xb7\\x1e\\x5f\\xa3\\xb4\\x74\\xc3\\x1b\\xbb\\xd5\\x9c\\x9e\\xb1\\x1f\\xa3\\x97\\x98\\xa0\\xa3\\x1a\\xa3\\x78\\x9d\\x74\\x82\\x81\\x89\\x88\\x83\\x1e\\x73\"\n\"\\x4d\\x7f\\x88\\x6f\\x1b\\x64\\x77\\xa3\\xbe\\x8a\\x1f\\xfb\\x2e\\xf7\\x3d\\x15\\xad\\xa0\\x6c\\x58\\x3b\\x53\\x39\\x54\\x67\\x77\\xa8\\xc2\\xda\\xc4\\xdc\\xc2\"\n\"\\x1f\\xf7\\x45\\x3c\\x15\\xc3\\xa5\\xa4\\xa2\\xad\\x1b\\xaa\\x9a\\x71\\x56\\x1f\\x0e\\xf7\\x30\\xf7\\xbe\\x15\\x60\\xfb\\x57\\x05\\x7e\\x06\\x6b\\x80\\x89\\x7e\"\n\"\\x7d\\xf7\\x3f\\x1d\\x8a\\x9d\\x1b\\xf7\\x0d\\x89\\xed\\xf8\\x51\\x05\\xb0\\x93\\xa7\\x9e\\xba\\x1b\\xb1\\xa1\\x7a\\x6e\\x7c\\x84\\x7d\\x7e\\x80\\x1f\\x7c\\x7d\"\n\"\\x7f\\x87\\x6a\\x88\\x08\\x62\\x87\\x70\\x72\\x6a\\x1a\\x72\\x9a\\x7f\\xae\\x87\\x1e\\xdb\\x83\\xb4\\x68\\x4f\\x1a\\x59\\x6c\\x5b\\x6a\\x7e\\x84\\x93\\x9a\\x1e\"\n\"\\x98\\x07\\x9e\\x7a\\x99\\x72\\x63\\x6e\\x68\\x5c\\x54\\xb2\\x68\\xc9\\xc6\\xba\\xa1\\xb8\\xb1\\x1e\\xb1\\xb7\\xa1\\xc5\\xc1\\x1a\\xc8\\x70\\xbd\\x58\\xad\\x1e\"\n\"\\xb1\\xaf\\x9c\\xaf\\xb9\\x1a\\xda\\x4f\\xbf\\x31\\x24\\x34\\x50\\x39\\x79\\x1e\\x7e\\x4f\\x05\\x7d\\x06\\x6b\\x80\\x88\\x7f\\x7d\\x86\\x0a\\x9c\\x7f\\xb7\\x1e\"\n\"\\x0e\\xf8\\x69\\xf8\\xfc\\x15\\xfb\\x1f\\x6a\\x05\\x6d\\x84\\x7e\\x7f\\x75\\x1a\\x7c\\x95\\x80\\x99\\x92\\x8d\\x8b\\x8f\\x98\\x1e\\xbd\\x97\\x59\\xfb\\x79\\x05\"\n\"\\x52\\x06\\x6b\\x77\\x7c\\x73\\x79\\x97\\x83\\xa4\\x1f\\xf7\\x4a\\x06\\xaa\\x9f\\x9b\\xa2\\x9e\\x81\\x92\\x70\\x1f\\x52\\x06\\x0e\\xf8\\x76\\xf8\\x19\\x15\\xfb\"\n\"\\x55\\x07\\x77\\x94\\x80\\x9c\\x9c\\x94\\x96\\x9f\\x1e\\xf7\\x88\\xfc\\x46\\x07\\x75\\x80\\x82\\x7b\\x7a\\x96\\x82\\xa1\\x1f\\x0e\\xf7\\x5f\\x82\\x15\\x86\\xa0\"\n\"\\x95\\x8a\\x9e\\x1b\\xbd\\xbc\\x95\\xa1\\xbd\\x1f\\x7a\\xf2\\x07\\xa1\\x9a\\x8d\\x91\\x94\\x1f\\x9d\\x95\\x95\\x9d\\x9e\\x1a\\xac\\x75\\x9f\\x64\\x8d\\x1e\\xf7\"\n\"\\xd2\\xfb\\x23\\x07\\x71\\x81\\x89\\x85\\x81\\xf7\\x66\\x1d\\x81\\x1e\\x83\\x96\\x98\\x88\\xa5\\x1b\\xa6\\xfb\\x43\\x06\\x68\\x4e\\x63\\x7e\\x61\\x1b\\x62\\x7c\"\n\"\\x98\\xaf\\x1f\\xf7\\xb0\\xfb\\x10\\x07\\x7b\\x06\\x6b\\x71\\x73\\x6c\\x7a\\x94\\x7a\\x9a\\x81\\x1f\\x83\\x96\\x98\\x88\\xa5\\x1b\\x93\\xfc\\x1c\\x06\\x74\\x8d\"\n\"\\x80\\x91\\x81\\x1e\\x7b\\x96\\x9e\\x81\\x9f\\x1b\\x9e\\x9c\\x93\\x9a\\x96\\x1f\\x94\\x96\\x8d\\x95\\xa5\\x1a\\x0e\\xf7\\xa4\\xf8\\x81\\x15\\xb0\\x06\\x80\\x5b\"\n\"\\x05\\x88\\x80\\x8b\\x88\\x87\\x1a\\x7d\\x97\\x80\\x9a\\xa0\\x98\\x98\\xa7\\x91\\x1e\\xa5\\xf7\\x07\\x05\\xfb\\x9e\\x06\\x72\\xfb\\x05\\x05\\x88\\x7e\\x8b\\x8a\"\n\"\\x87\\x1a\\x7d\\x96\\x80\\x9a\\xa0\\x98\\x99\\xa6\\x91\\x1e\\x96\\xbd\\x05\\xb0\\x06\\x5c\\xfb\\x68\\x05\\x73\\x06\\x6d\\x79\\x7d\\x72\\x79\\x96\\x83\\xa3\\x1f\"\n\"\\xf7\\x02\\x06\\xa8\\x9e\\x9a\\xa3\\x9d\\x81\\x93\\x72\\x1f\\x75\\x06\\xf7\\x87\\xf7\\x25\\x15\\xaa\\xfb\\x17\\x05\\x9a\\x06\\xdf\\xf7\\x14\\x6b\\xfb\\x22\\x05\"\n\"\\x86\\x06\\x6f\\x79\\x7b\\x74\\x79\\x96\\x83\\xa3\\x1f\\xc6\\x06\\xa8\\x9e\\x9a\\xa3\\x9b\\x83\\x93\\x78\\x8d\\x1f\\xba\\xf7\\x68\\x05\\xa2\\x8f\\x99\\x9a\\x9f\"\n\"\\x1a\\x9e\\x81\\x92\\x72\\x1e\\x48\\x06\\x3e\\xfb\\x13\\x74\\xf7\\x13\\x05\\x48\\x06\\x6d\\x79\\x7d\\x73\\x7b\\x92\\x83\\x9a\\x89\\x1f\\x5c\\xfb\\x69\\x05\\x71\"\n\"\\x89\\x7c\\x7c\\x76\\x1a\\x78\\x96\\x83\\xa2\\x1e\\xc7\\x06\\xa8\\x9e\\x9a\\xa3\\x9d\\x80\\x93\\x75\\x1f\\x87\\x06\\x0e\\xb6\\x1d\\xf7\\xb7\\xf9\\x10\\x5e\\x0a\"\n\"\\xf7\\xe2\\xf7\\x4e\\x15\\x92\\x96\\x91\\x98\\x93\\x1a\\x9a\\x80\\x96\\x7c\\x7c\\x80\\x84\\x79\\x7e\\x1e\\xfb\\xd4\\xfc\\x47\\x05\\x82\\x7e\\x86\\x81\\x83\\x1a\"\n\"\\x7b\\xf7\\x68\\x1d\\x97\\x1e\\xf7\\x66\\x68\\x15\\xf7\\x40\\xf7\\x19\\xa1\\xa4\\xc9\\x1a\\xc1\\x60\\xb1\\x4e\\x5e\\x5f\\x78\\x6a\\x6d\\x1e\\x79\\x78\\x7f\\x75\"\n\"\\x7e\\x1a\\x7c\\x96\\x80\\x9a\\x98\\x98\\x93\\x96\\x91\\x1e\\x95\\x9e\\x8c\\x8b\\x91\\x91\\x08\\x9a\\x9b\\x9f\\x93\\xa0\\x1b\\xab\\xa0\\x7a\\x73\\x6e\\x77\\x79\"\n\"\\xfb\\x5a\\xfb\\x29\\x1f\\x7f\\x82\\x7e\\x49\\x05\\xf7\\x95\\x06\\x96\\xc2\\x05\\x8c\\x90\\x8c\\x93\\x8f\\x1a\\x98\\x80\\x96\\x7d\\x79\\x7f\\x81\\x76\\x84\\x1e\"\n\"\\x0e\\xf8\\x3c\\xf7\\xcf\\x15\\xf7\\x1e\\x7b\\x1d\\xfb\\x1c\\x06\\xa5\\xf7\\x09\\x05\\x8e\\x9b\\x8c\\x90\\xf7\\x5d\\x1d\\x71\\xfb\\x0b\\x05\\xfb\\x1f\\x4a\\x1d\"\n\"\\xf7\\x1d\\x06\\x76\\x31\\xe6\\x0a\\x95\\x95\\x8f\\x94\\x91\\xa5\\x08\\xfb\\xa5\\xfb\\x0c\\x15\\x38\\x0a\\x7c\\x7f\\x81\\x32\\x0a\\x0e\\xf7\\x77\\xf7\\x1a\\x15\"\n\"\\xea\\x06\\xf3\\xc4\\x9b\\xb6\\xbd\\x1f\\xb0\\xaa\\xa1\\xb9\\xb4\\x1a\\xb0\\x76\\xae\\x6a\\x9f\\x1e\\x9f\\x6a\\x60\\x93\\x40\\x1b\\x2e\\x06\\x91\\xa9\\x05\\xeb\"\n\"\\x5e\\x1d\\xfb\\x69\\x06\\x6e\\x7d\\x87\\x80\\x72\\x0a\\x87\\x94\\x8f\\x8b\\xa1\\x1b\\x90\\x1d\\x6d\\x9d\\x7f\\xb6\\x1e\\xf7\\x69\\x06\\xa8\\x9a\\x8f\\x96\\x98\"\n\"\\x91\\x1d\\x2e\\x06\\xa9\\xf7\\x1a\\x15\\x9f\\xe6\\x05\\xf7\\x13\\x06\\xc6\\xa2\\x81\\x71\\x66\\x69\\x79\\x45\\x1f\\x0e\\xf8\\xfa\\xf7\\xe9\\xf7\\x0d\\x1d\\xdb\"\n\"\\x06\\xaa\\x9f\\x9a\\xa3\\x9b\\x80\\x94\\x76\\x8c\\x1f\\x8e\\x9a\\x05\\xa6\\x8d\\x9d\\x9a\\xa1\\x1a\\x9b\\x80\\x94\\x76\\x8c\\x1e\\x48\\x16\\x3c\\x06\\xf4\\xf7\"\n\"\\x10\\x05\\xfb\\x81\\xf8\\x1d\\x5e\\x0a\\xf7\\xef\\xf7\\x4e\\x15\\x92\\x95\\x91\\x99\\x93\\x1a\\x9a\\x80\\x96\\x7c\\x7c\\x81\\x76\\x0a\\x83\\x1a\\x7b\\xf7\\x68\"\n\"\\x1d\\x98\\x1e\\x0e\\xf7\\x47\\xf7\\xd6\\x15\\x38\\x0a\\x7c\\x7f\\x81\\x32\\x0a\\xfb\\x78\\xfb\\x35\\x15\\x57\\x61\\x67\\x5e\\x69\\xa3\\x77\\xb4\\xc2\\xb4\\xae\"\n\"\\xb9\\xae\\x73\\x9e\\x60\\x1f\\xda\\xf7\\xf7\\x15\\x57\\x61\\x67\\x5f\\x68\\xa3\\x77\\xb4\\xc2\\xb4\\xae\\xb8\\xaf\\x74\\x9e\\x5f\\x1f\\x0e\\xf7\\xfa\\xf8\\xa8\"\n\"\\x15\\x9f\\x8a\\x91\\x88\\x95\\x1e\\x9e\\x83\\x74\\x9a\\x74\\xca\\x0a\\xad\\xa3\\xa3\\xaf\\x1f\\x95\\x07\\xfb\\x74\\x04\\xa3\\x89\\x95\\x85\\x95\\x1e\\x9b\\x80\"\n\"\\x78\\x95\\x77\\xca\\x0a\\x9e\\x9c\\x93\\x9a\\x96\\x1f\\x93\\x95\\x8e\\x96\\xa5\\x1a\\x0e\\xf8\\x3f\\xf8\\xd5\\x15\\xfb\\x06\\x20\\x27\\x20\\x3b\\xc7\\x51\\xdf\"\n\"\\xf7\\x07\\xf6\\xef\\xf7\\x00\\xdb\\x4f\\xc4\\x36\\x1f\\x7e\\x49\\x15\\xbe\\xb0\\x69\\x5a\\x49\\x48\\x4b\\x46\\x55\\x67\\xad\\xbd\\xcd\\xce\\xca\\xd2\\x1f\\x0e\"\n\"\\xf7\\x52\\xc7\\x15\\x67\\xb3\\xb7\\x7c\\xf7\\x14\\x0a\\x3b\\xd0\\xfb\\x10\\x4f\\x5e\\x7d\\x67\\x54\\x1f\\xbc\\xf7\\x6c\\x05\\xfb\\x0d\\x82\\x0a\\x7f\\x82\\x7a\"\n\"\\x7a\\x1a\\x7a\\x95\\x7b\\x99\\x86\\x1e\\x88\\x94\\x94\\x8a\\x9d\\x1b\\x96\\x06\\xfb\\x18\\xfc\\xe5\\x9f\\x0a\\xf7\\x6b\\xf8\\x79\\x9c\\x0a\\xf8\\x0d\\xfb\\x24\"\n\"\\xf7\\x0d\\x1d\\xda\\x06\\xaa\\x9f\\x9a\\xa3\\x9b\\x81\\x94\\x76\\x8c\\x1f\\x8e\\x9a\\x05\\xa6\\x8d\\x9c\\x9a\\xa1\\x1a\\x9c\\x80\\x93\\x77\\x8c\\x1e\\x48\\x16\"\n\"\\x3c\\x06\\xf3\\xf7\\x10\\x05\\xbb\\xf7\\x9e\\x15\\x92\\x95\\x91\\x99\\x93\\x1a\\x9a\\x80\\x96\\x7c\\x7c\\x81\\x9a\\x1d\\x81\\x7e\\x87\\x81\\x50\\x0a\\x96\\x93\"\n\"\\x9c\\x98\\x1e\\x0e\\xf7\\xd5\\xf7\\xc3\\x15\\xf7\\x55\\xf7\\x19\\xa3\\xa4\\xc9\\x1a\\xc2\\x5f\\xb0\\x4b\\x5c\\x5e\\x78\\x6a\\x6a\\x1e\\x79\\x78\\x7e\\x75\\x7d\"\n\"\\x1a\\x7d\\x96\\x80\\x9b\\x99\\x99\\x93\\x96\\x92\\x1e\\x96\\x9e\\x8b\\x8b\\x92\\x91\\x08\\x9a\\x9b\\xa1\\x93\\xa2\\x1b\\xab\\xa2\\x7a\\x74\\x6d\\x78\\x7b\\xfb\"\n\"\\x72\\xfb\\x2b\\x1f\\x7f\\x82\\x7c\\x49\\x05\\xf7\\xac\\x06\\x97\\xc2\\x05\\x8c\\x90\\x8c\\x93\\x8f\\x1a\\x98\\x7f\\x96\\x7d\\x77\\x7e\\x81\\x76\\x84\\x1e\\x0e\"\n\"\\xf7\\xd8\\xf7\\x7e\\x15\\x96\\x06\\x9f\\x83\\xa6\\x55\\x8d\\x66\\x8c\\x83\\x18\\x8c\\x84\\x05\\xb7\\x06\\xac\\xa2\\x9d\\xa6\\x9e\\x82\\x93\\x76\\x8f\\x1f\\x7e\"\n\"\\xab\\x86\\x95\\x7b\\x9d\\x08\\xbb\\xa1\\xa9\\xb3\\xb5\\x1a\\xbf\\x61\\xac\\x46\\x1e\\x2e\\x06\\x69\\x74\\x79\\x70\\x77\\x96\\x82\\xa3\\x89\\x1f\\x65\\xfb\\x41\"\n\"\\x05\\x6b\\x8a\\x76\\x78\\x72\\x1a\\x76\\x99\\x81\\xa7\\x1e\\xd0\\x06\\xac\\xa2\\x9d\\xa6\\x9f\\x80\\x94\\x74\\x8d\\x1f\\xa4\\xf7\\x05\\x15\\x98\\xc7\\x05\\xa1\"\n\"\\x06\\xa7\\x9b\\x83\\x7d\\x77\\x6f\\x79\\x6d\\x1f\\xcd\\xf7\\xa2\\x15\\xfb\\x5a\\xfb\\x4e\\xfb\\x41\\xfb\\x4c\\xf7\\x60\\x1d\\xf7\\x4c\\xf7\\x1e\\xf2\\x1d\\xf7\"\n\"\\x47\\xf7\\xd6\\x15\\x38\\x0a\\x7c\\x7f\\x81\\x32\\x0a\\x0e\\xf8\\xb3\\xf8\\xc0\\x15\\xa0\\x95\\x97\\x99\\x9b\\x1a\\x9b\\x7f\\x97\\x7a\\x81\\x7d\\x88\\x85\\x7e\"\n\"\\x1e\\x37\\x65\\x61\\x9f\\x75\\x95\\x89\\x8c\\x19\\x93\\x74\\x7c\\x8e\\x7d\\x1b\\x71\\x71\\x75\\x74\\x7f\\x93\\x82\\x9a\\x86\\x1f\\x9a\\x85\\x91\\x89\\x90\\x88\"\n\"\\x90\\x89\\x19\\x8d\\x8a\\x8f\\x89\\x90\\x89\\x5b\\x73\\x18\\x70\\x7e\\x85\\x84\\x77\\x1a\\x78\\x96\\x7f\\x9b\\x95\\x8e\\x8c\\x95\\xa2\\x1e\\xf0\\xba\\xad\\x76\"\n\"\\xb2\\x63\\xa3\\x66\\x19\\xa8\\x5b\\x72\\x92\\x5e\\x1b\\x36\\x38\\x68\\x4e\\x50\\x1f\\x5b\\x58\\x6e\\x4c\\x53\\x1a\\x22\\xe6\\x40\\xf7\\x13\\xe1\\xe7\\xb0\\xc6\"\n\"\\xc8\\x1e\\xc0\\xbf\\xab\\xde\\xe1\\x1a\\xe9\\x66\\xd3\\x36\\xcf\\x1e\\xfb\\x10\\xfb\\x5e\\x15\\xd4\\xbf\\x60\\x4f\\x6d\\x7e\\x6d\\x76\\x75\\x1f\\x65\\x64\\x55\"\n\"\\x74\\x57\\x1b\\x41\\x53\\xb5\\xc1\\xd8\\xe5\\xd4\\xe9\\x1f\\x0e\\xf7\\xeb\\xf7\\x5a\\x15\\xda\\x2c\\x05\\x75\\x9d\\x93\\x86\\x9d\\x1b\\xac\\xad\\xa9\\xa9\\x98\"\n\"\\x87\\x93\\x7c\\x9d\\x1f\\x3c\\xeb\\xf7\\x0e\\xea\\x05\\xa9\\xa3\\x94\\x98\\xa0\\x1a\\xa3\\x78\\x9d\\x71\\x79\\x81\\x86\\x76\\x71\\x1e\\xfb\\x0e\\x2b\\x3c\\xea\"\n\"\\x05\\xa0\\x7a\\x81\\x91\\x7a\\x1b\\x6a\\x69\\x6d\\x6d\\x7d\\x8f\\x84\\x9a\\x79\\x1f\\xda\\x2c\\xfb\\x0e\\x2b\\x05\\x6c\\x73\\x83\\x7f\\x76\\x1a\\x72\\x9d\\x79\"\n\"\\xa6\\x9c\\x95\\x90\\xa0\\xa7\\x1e\\x0e\\xf8\\x19\\xf8\\x67\\x15\\x75\\x77\\x79\\x77\\x7b\\x94\\x83\\x9e\\x8a\\x1f\\xa3\\x8a\\x94\\x89\\x95\\x87\\x08\\x9e\\x82\"\n\"\\x99\\x79\\x7b\\x1a\\x65\\x66\\x76\\x48\\x64\\x7b\\x8e\\x94\\x7e\\x1e\\x92\\x82\\x88\\x8c\\x83\\x1b\\x75\\x78\\x78\\x76\\x70\\xb9\\x79\\xd2\\xc8\\xb5\\x98\\xa8\"\n\"\\xad\\x1f\\xa7\\xa3\\x9e\\xaf\\xa8\\x1a\\xa9\\x7b\\xa4\\x6d\\x9c\\x1e\\xbb\\xa5\\xa1\\xaa\\xb2\\x1a\\xc0\\x63\\xac\\x4a\\x41\\x45\\x67\\x64\\x7d\\x97\\x80\\x9a\"\n\"\\x94\\x94\\x8f\\x91\\x93\\x1e\\x9f\\xa2\\x9c\\x91\\xac\\x1b\\xad\\xa0\\x7e\\x77\\x71\\x6c\\x72\\x6c\\x1f\\x0e\\xf7\\x50\\xf7\\x99\\x15\\x89\\x81\\x8a\\x83\\x7f\"\n\"\\x1a\\x44\\xc4\\x5c\\xe0\\xdb\\xd9\\xb3\\xb5\\x9d\\x7d\\x98\\x78\\x81\\x81\\x87\\x84\\x81\\x1e\\x75\\x6f\\x7f\\x87\\x65\\x1b\\x5a\\x71\\x9e\\xaf\\x88\\x1f\\x91\"\n\"\\x8b\\x90\\x8c\\x91\\x1e\\x93\\xac\\x05\\xbb\\x95\\xb6\\xae\\xbc\\x1b\\xa8\\xa6\\x7e\\x7e\\x6c\\x93\\x80\\xa3\\xa4\\x9c\\x9b\\xa9\\x91\\x1f\\x97\\xbd\\x05\\x8e\"\n\"\\x99\\x8b\\x8b\\x90\\x1a\\x9c\\x7e\\x97\\x7a\\x7c\\x81\\x86\\x7f\\x82\\x1e\\x97\\x72\\x77\\x90\\x6e\\x1b\\x30\\x38\\x48\\x31\\x77\\x1f\\xf7\\x7c\\xf7\\xaf\\x15\"\n\"\\xfb\\x5b\\xfb\\x4d\\xfb\\x40\\xfb\\x4d\\xf7\\x60\\x1d\\xf7\\x4d\\xf7\\x1d\\xf2\\x1d\\x22\\x1d\\xf7\\x4d\\xf7\\xc9\\x15\\xa3\\x9c\\x94\\x97\\x9b\\x1a\\x9e\\x7d\"\n\"\\x98\\x77\\x7f\\x85\\x89\\x7d\\x77\\x4c\\x0a\\x78\\x99\\x7e\\x9f\\x96\\x91\\x8e\\x98\\x9f\\x1e\\x0e\\x22\\x1d\\xbf\\xf7\\xb7\\x15\\xe5\\x31\\x05\\x82\\x94\\x93\"\n\"\\x87\\x96\\x1b\\xa2\\xa1\\x1d\\xfb\\x4a\\xfb\\x11\\x05\\x6e\\x78\\x6f\\x0a\\x22\\x1d\\x61\\xf7\\xee\\x40\\x0a\\x22\\x1d\\x88\\xf8\\x06\\x15\\x98\\x7d\\x86\\x8e\"\n\"\\x7e\\x1b\\x71\\xf7\\x1b\\x1d\\xa2\\x96\\x86\\x94\\x7f\\x97\\x1f\\x0e\\x22\\x1d\\xd9\\xf8\\x34\\x15\\x3c\\x3f\\x46\\x43\\x53\\xb6\\x62\\xc6\\xdb\\xd7\\xcf\\xd3\"\n\"\\xc5\\x60\\xb3\\x4f\\x1f\\x80\\x50\\x15\\xaa\\xa0\\x77\\x6e\\x68\\x62\\x67\\x64\\x6b\\x75\\x9f\\xa6\\xb1\\xb3\\xae\\xb5\\x1f\\x0e\\x22\\x1d\\xf7\\x6c\\xf7\\xef\"\n\"\\x15\\x7f\\x78\\x81\\x7d\\x7e\\x1f\\x6a\\x6c\\x86\\x88\\x7d\\x1b\\x81\\x7f\\x91\\x9d\\x6f\\x1f\\xa8\\x54\\x1d\\x6b\\x69\\x7b\\x6c\\x6a\\x1f\\x71\\x72\\x80\\x79\"\n\"\\x7c\\x1a\\x7c\\x98\\x80\\x9b\\x95\\x96\\x8f\\x93\\x93\\x1e\\xb3\\xb3\\x93\\x90\\x9d\\x1b\\x98\\x91\\x88\\x7b\\xa2\\x1f\\x6f\\xb2\\xa9\\x7e\\xa2\\x1b\\xad\\xaa\"\n\"\\x9c\\xb5\\xb4\\x75\\x0a\\xf7\\xe5\\x7e\\x15\\xda\\x8f\\xc3\\x9a\\xbb\\xa8\\x08\\xbb\\xa7\\xa3\\xa7\\xa5\\x7e\\x1d\\xcc\\xc4\\x6c\\x69\\x89\\x1f\\x8a\\x78\\x05\"\n\"\\x73\\x8a\\x9d\\x7a\\xa5\\x1b\\xaf\\xa1\\xa1\\xb7\\x95\\x1f\\x9d\\xdb\\x05\\x98\\x0a\\x7d\\x4b\\x05\\x80\\x0a\\x3c\\xb5\\x4a\\xd1\\x6a\\x1e\\xa2\\x81\\x9c\\x86\"\n\"\\xab\\x84\\x77\\x31\\x18\\x8d\\xa2\\x8d\\x8b\\x92\\x1b\\xa3\\x99\\x83\\x7d\\x7b\\x7d\\x81\\x73\\x7b\\x77\\x91\\x94\\x7c\\x1f\\x96\\x7a\\x88\\x8c\\x83\\x1b\\x72\"\n\"\\x74\\x75\\x74\\x6c\\xc0\\x71\\xc8\\xd3\\xc6\\xc1\\xcc\\xb2\\x7b\\x9e\\x62\\x94\\x1f\\x0e\\x24\\x1d\\xad\\xf7\\x28\\x05\\x8e\\x9b\\x8c\\x91\\x93\\x1a\\xa1\\x21\"\n\"\\x1d\\xf7\\xff\\xf9\\x09\\x15\\xa1\\x9b\\x95\\x98\\x9b\\x1a\\x9e\\x7d\\x98\\x77\\x7f\\x85\\x88\\x7e\\x78\\x4c\\x0a\\x79\\x99\\x7d\\x9f\\x96\\x91\\x8e\\x98\\x9f\"\n\"\\x1e\\x0e\\x24\\x1d\\xac\\xf7\\x28\\x05\\x90\\x9e\\x8b\\x8d\\x93\\x1a\\xa2\\x21\\x1d\\xf7\\x7a\\xf8\\xf7\\xf7\\x51\\x1d\\xa2\\x94\\x88\\x90\\x82\\x93\\x1f\\x84\"\n\"\\x92\\xf7\\x0e\\x1d\\x24\\x1d\\xac\\xf7\\x28\\x05\\x90\\x9e\\x8b\\x8d\\x93\\x1a\\xa2\\x21\\x1d\\xf7\\x1c\\xf9\\x2e\\x15\\x4d\\x0a\\xb1\\xa8\\x75\\x9f\\x6d\\x1f\"\n\"\\xf7\\x64\\x16\\x4d\\x0a\\xb1\\xa7\\x75\\xa0\\x6d\\x1f\\x0e\\x24\\x1d\\xac\\xf7\\x28\\x05\\x90\\x9e\\x8b\\x8d\\x93\\x1a\\xa2\\x21\\x1d\\xf7\\x3c\\xf9\\x46\\xf7\"\n\"\\x65\\x1d\\x82\\x90\\x82\\x97\\x80\\x1f\\xf7\\x02\\x21\\x05\\x7e\\x99\\x92\\x87\\x95\\x1b\\xa5\\xa3\\xa1\\xa3\\x94\\x85\\x96\\x80\\x96\\x1f\\x0e\\x28\\x0a\\xf7\"\n\"\\x56\\x30\\x0a\\x28\\x0a\\xde\\xf8\\xf7\\x15\\xe4\\x31\\x05\\x82\\xf7\\x1f\\x1d\\xfb\\x11\\x05\\x6f\\x78\\x86\\x84\\x7a\\x1a\\x79\\x98\\x7e\\x9d\\x96\\x94\\x8e\"\n\"\\x95\\x99\\x1e\\x0e\\x28\\x0a\\x80\\xf9\\x2e\\x40\\x0a\\x28\\x0a\\xa0\\xf9\\x46\\xc4\\x0a\\x85\\x96\\x80\\x96\\x1f\\x0e\\xf8\\x10\\xf9\\x4c\\x15\\x99\\x92\\x88\"\n\"\\x7b\\xa2\\x1f\\x70\\xb0\\xab\\x7d\\xa2\\x1b\\xad\\xa9\\x9c\\xb5\\xb5\\xf7\\x72\\x1d\\x7a\\x7e\\x7b\\x81\\x78\\x78\\x1e\\x6f\\x70\\x87\\x88\\x7d\\x1b\\x80\\x80\"\n\"\\x91\\x9d\\x6f\\x1f\\xa8\\x5e\\x7b\\x92\\x73\\x1b\\x6c\\x6a\\x7c\\x6d\\x6b\\x1f\\x6f\\x72\\x7f\\x78\\x7a\\x1a\\x7d\\x98\\x80\\x9b\\x96\\x95\\x90\\x94\\x95\\x1e\"\n\"\\xb0\\xb0\\x94\\x91\\x9c\\x1b\\xfb\\x0e\\xfb\\xdd\\x96\\x0a\\x0e\\x2e\\x1d\\xf7\\x4c\\xf7\\x95\\x15\\xa3\\x9c\\x94\\x97\\x9c\\x1a\\x9d\\x7d\\x98\\x77\\x7f\\x85\"\n\"\\x89\\x7d\\x77\\x1e\\xfb\\x31\\x21\\x05\\x74\\x7c\\x81\\x7d\\x7b\\x1a\\x78\\x99\\x7e\\x9f\\x96\\x92\\x8e\\x98\\x9e\\x1e\\x0e\\x2e\\x1d\\xc2\\xf7\\x83\\x31\\x0a\"\n\"\\x2e\\x1d\\x63\\xf7\\xba\\x15\\x63\\x73\\x0a\\x6c\\x1f\\xf7\\x65\\x16\\x4d\\x0a\\xb1\\xa8\\x75\\x9f\\x6d\\x1f\\x0e\\x2e\\x1d\\x87\\xf7\\xd2\\xc4\\x0a\\x86\\x96\"\n\"\\x7f\\x96\\x1f\\x0e\\x2e\\x1d\\xf7\\x75\\xf7\\xbb\\x15\\x7d\\x7b\\x81\\x78\\x78\\x1f\\x6f\\x70\\x87\\x88\\x7d\\x1b\\x81\\x7f\\x90\\x9e\\x6f\\x1f\\xa8\\x54\\x1d\"\n\"\\x6c\\x6b\\x7c\\x6e\\x6b\\x1f\\x6f\\x72\\x7e\\x77\\x7b\\x1a\\x7c\\x98\\x80\\x9b\\x95\\x96\\x90\\x92\\x93\\x1e\\xb2\\xb2\\x94\\x91\\x9c\\x1b\\x99\\x91\\x88\\x7b\"\n\"\\xa2\\x1f\\x70\\xb2\\xa9\\x7d\\xa2\\x1b\\xad\\xaa\\x9c\\xb5\\xb4\\x75\\x0a\\xf8\\x69\\xf9\\x55\\x15\\x30\\xe5\\x05\\x94\\x82\\x83\\x8f\\x80\\x1b\\x73\\x74\\x75\"\n\"\\x75\\x81\\x8e\\x86\\x96\\x81\\x1f\\x90\\x86\\xf7\\x13\\xfb\\x11\\xf7\\x49\\xf7\\x11\\x05\\xa9\\x9f\\x8f\\x90\\x9d\\x1a\\x9d\\x7e\\x98\\x79\\x80\\x81\\x87\\x82\"\n\"\\x7e\\x1e\\xad\\xfb\\xb1\\x15\\x90\\x9e\\x8b\\x8c\\x94\\x1a\\xa2\\x79\\x9b\\x71\\x77\\xb4\\x0a\\x2e\\xfb\\x06\\x63\\xa2\\x63\\xae\\x76\\x1f\\xa7\\x79\\xa8\\x82\"\n\"\\xcd\\x80\\xcd\\x7f\\x98\\x87\\x9e\\x81\\x08\\x9a\\x83\\x94\\x7d\\x7d\\x1a\\x60\\x49\\x67\\x3a\\x4c\\x54\\xa5\\xab\\x88\\x1e\\x89\\xa6\\x8b\\x8b\\x85\\x92\\x85\"\n\"\\x1d\\x73\\xb8\\xbb\\x7f\\xc1\\x1b\\xf7\\x31\\xf7\\x09\\xe3\\xf7\\x0b\\xbb\\x6f\\xb4\\x5d\\x9f\\x1f\\x71\\x97\\x6d\\x93\\x54\\x95\\x3d\\x9a\\x83\\x8d\\x7d\\x96\"\n\"\\x08\\x80\\x94\\x84\\x99\\x97\\x1a\\xb5\\xc6\\xb0\\xcf\\xc7\\xb3\\x73\\x67\\x6b\\x8b\\x8b\\x92\\x82\\x1e\\x82\\x92\\x99\\x85\\x9a\\x1b\\x9c\\x9c\\x93\\x98\\x98\"\n\"\\x1f\\x95\\x95\\x90\\x94\\x91\\xa5\\x08\\x0e\\x23\\x0a\\x97\\xf8\\xa9\\x15\\xa5\\x9c\\x93\\x96\\x9c\\xf7\\x48\\x1d\\x78\\x4c\\x0a\\x78\\x99\\x7e\\x9e\\x96\\x92\"\n\"\\x8e\\x98\\x9f\\x1e\\x0e\\x23\\x0a\\xfb\\x09\\xf8\\x97\\xf7\\x51\\x1d\\xa1\\x95\\x89\\x90\\x82\\x93\\x1f\\x87\\x8e\\x88\\x8e\\x8a\\x8c\\xfb\\x12\\xf7\\x11\\x18\"\n\"\\xfb\\x4a\\xfb\\x11\\x05\\x6e\\x78\\x6f\\x0a\\x23\\x0a\\xfb\\x67\\xf8\\xce\\xc1\\x0a\\xa7\\x75\\xa0\\x6c\\x1f\\x0e\\x23\\x0a\\xfb\\x44\\xf8\\xe6\\x15\\x98\\x7e\"\n\"\\x86\\x8e\\x7e\\x1b\\x71\\xd5\\x0a\\x95\\x86\\x93\\x7f\\x98\\x1f\\x0e\\xf8\\xe4\\xf9\\x70\\x15\\xa4\\x9c\\x94\\x97\\x9b\\x1a\\x9e\\x7d\\x98\\x77\\x7e\\x85\\x88\"\n\"\\x7e\\x78\\x4c\\x0a\\x78\\x99\\x7e\\x9f\\x95\\x92\\x8e\\x98\\x9f\\x1e\\x6e\\xfc\\x1b\\x29\\x0a\\x77\\x1b\\x2e\\x34\\x1d\\x0e\\xf8\\x02\\xf9\\x95\\x15\\x63\\x62\"\n\"\\x1d\\x6c\\x1f\\xf7\\x64\\x16\\x63\\x62\\x1d\\x6c\\x1f\\xfb\\x3c\\xfc\\xaa\\x29\\x0a\\x77\\x1b\\x2e\\x34\\x1d\\x0e\\xf7\\x7c\\xf1\\x0a\\x86\\x78\\x8b\\x8a\\x83\"\n\"\\x1a\\x75\\x9e\\x79\\xa4\\xaf\\xa2\\xa0\\xb8\\x95\\x1e\\x99\\xcb\\x05\\xf7\\x39\\x06\\xfc\\x0c\\xfb\\xfc\\x74\\x26\\x05\\xf8\\x62\\x06\\xb0\\xf7\\x3b\\x05\\x90\"\n\"\\x9e\\x8b\\x8c\\xd9\\x0a\\x7c\\x49\\x05\\x96\\xf8\\xee\\x15\\x30\\xe5\\x05\\x95\\x81\\x84\\x8e\\x80\\x1b\\x73\\x74\\x75\\x75\\x81\\x8e\\x86\\x96\\x81\\x1f\\x8d\"\n\"\\x89\\x8c\\x89\\x8d\\x8a\\xf7\\x13\\xfb\\x11\\x18\\xf7\\x49\\xf7\\x11\\x05\\xa7\\x9d\\x91\\x93\\x9c\\x1a\\x9d\\x7d\\x98\\x79\\x81\\x81\\x87\\x82\\x7e\\x1e\\x0e\"\n\"\\xf8\\x14\\x16\\xf7\\x0e\\x06\\xa8\\x98\\x8f\\x96\\x9a\\x1f\\x9a\\xf7\\x33\\x1d\\x80\\x06\\xb5\\xf7\\x50\\x05\\x8d\\x97\\x8c\\x93\\x99\\x69\\x1d\\x2b\\x7b\\x7b\"\n\"\\x67\\x1e\\x75\\x82\\x7e\\x77\\x74\\x1a\\x73\\x9c\\x7a\\xa4\\x95\\x9a\\x8d\\x8f\\x9d\\x1e\\x96\\xbb\\xb1\\x90\\xac\\x1b\\xc3\\x9f\\x82\\x73\\x8e\\x1f\\x82\\x07\"\n\"\\x87\\x79\\x05\\x91\\x65\\x6e\\x8e\\x6b\\x1b\\x24\\x34\\x69\\x4e\\x56\\x1f\\x70\\x6d\\x7d\\x6b\\x6e\\x1a\\x4b\\xce\\x5b\\xe6\\xc3\\xc7\\x97\\xa1\\xbf\\x1e\\xa6\"\n\"\\xf7\\x08\\x15\\x6c\\x4e\\x51\\x7b\\x54\\x1b\\x68\\x6f\\x98\\x9b\\x95\\x92\\x95\\x9a\\x97\\x6c\\x1d\\xac\\xa9\\x88\\x84\\xb3\\x1f\\xf7\\x17\\xf8\\x37\\x15\\xa3\"\n\"\\x9b\\x94\\x97\\x9b\\xf7\\x48\\x1d\\x79\\x1e\\xfb\\x32\\x21\\x05\\x74\\x7b\\x81\\x7e\\x52\\x0a\\x97\\x90\\x95\\x9b\\x1e\\x0e\\x2d\\x1d\\x86\\xf8\\x25\\x15\\xe5\"\n\"\\x31\\x05\\x81\\x36\\x0a\\xa2\\x94\\x88\\x90\\x83\\x93\\x1f\\x88\\x8e\\x8a\\x8c\\x87\\x8e\\xfb\\x12\\xf7\\x14\\x1d\\x0e\\xf8\\x13\\xbc\\x0a\\x41\\x1d\\x77\\x1b\"\n\"\\x7f\\x06\\xcc\\x0a\\x30\\x7c\\x7b\\x64\\x1e\\x73\\x4f\\x1d\\x72\\x9c\\x7a\\xa4\\x73\\x1d\\x27\\xf8\\x5b\\x15\\x63\\x4a\\x0a\\xb0\\xa9\\x75\\x9f\\x6c\\x1f\\xf7\"\n\"\\x65\\xf7\\x2d\\x1d\\x0e\\x2d\\x1d\\x45\\xf8\\x73\\xb7\\x0a\\x2d\\x1d\\x9f\\xf8\\xa1\\x15\\x3c\\x3f\\x46\\x43\\x53\\xb6\\x62\\xc7\\xdb\\xd7\\xd0\\xd2\\xc4\\x60\"\n\"\\xb4\\x4e\\x1f\\x81\\x50\\x15\\xaa\\xa0\\x77\\x6f\\x68\\x62\\x67\\x64\\x6b\\x75\\x9e\\xa7\\xb0\\xb3\\xae\\xb5\\x1f\\x0e\\xf8\\x13\\x16\\xf7\\x0e\\xf7\\x22\\x1d\"\n\"\\x83\\x84\\x8b\\x76\\x1b\\x80\\x06\\xb5\\xf7\\x50\\x05\\x8d\\x97\\x8d\\x97\\x95\\x1a\\xd0\\x49\\xb6\\x21\\x53\\x2a\\x7b\\x7b\\x67\\x1e\\x76\\x4f\\x1d\\x73\\x9d\"\n\"\\x7a\\xa3\\x95\\x9a\\x8d\\x8f\\x9d\\x1e\\x96\\xbb\\xb1\\x90\\xad\\x1b\\xc2\\xa3\\x81\\x74\\x88\\x8b\\x88\\x8a\\x88\\x1f\\x87\\x79\\x05\\x91\\x66\\x6d\\x8e\\x6b\"\n\"\\x1b\\x24\\x35\\x69\\x4e\\x55\\x1f\\x70\\x6d\\x7d\\x6b\\x6e\\x1a\\x4b\\xce\\x5b\\xe6\\xc3\\xc7\\x97\\xa1\\xbf\\x1e\\xa6\\xf7\\x08\\x15\\x6c\\x4f\\x50\\x7b\\x54\"\n\"\\xf7\\x21\\x0a\\x97\\x99\\x96\\x6c\\x1d\\xad\\xa8\\x88\\x84\\xb3\\x1f\\xf7\\x37\\xf8\\x5d\\x15\\x7f\\x78\\x81\\x7c\\x7e\\x1f\\x6a\\x6b\\x87\\x88\\x7d\\x1b\\x81\"\n\"\\x7f\\x91\\x9d\\x6f\\x1f\\xa9\\x54\\x1d\\x6d\\x6a\\x7c\\x6f\\x6c\\x1f\\x6e\\x71\\x7e\\x77\\x7a\\x1a\\x7c\\x98\\x80\\x9b\\x96\\x95\\x8f\\x94\\x93\\x1e\\xb3\\xb3\"\n\"\\x93\\x90\\x9c\\x1b\\x99\\x91\\x88\\x7a\\xa2\\x1f\\x70\\xb1\\xaa\\x7d\\xa2\\x1b\\xae\\xa8\\x9c\\xb6\\xb5\\x75\\x0a\\xf7\\xe9\\x7c\\x15\\xd3\\x8e\\xbd\\x94\\xb6\"\n\"\\x9e\\x08\\xc0\\xa2\\xa9\\xa9\\xa9\\xf7\\x28\\x1d\\xa6\\xc6\\xab\\x99\\xaf\\xa3\\xa8\\x1f\\xb5\\xaf\\xbc\\xa0\\xc9\\x1b\\xb7\\xac\\x83\\x7c\\xa1\\x1f\\x95\\x83\"\n\"\\x8f\\x83\\x8a\\x7b\\x08\\x69\\x99\\x7c\\xaa\\xaf\\xa1\\xa1\\xb7\\x95\\x1e\\x9b\\xd5\\x05\\x90\\x9e\\x8b\\x8d\\x94\\x1a\\xa1\\x79\\x9a\\x71\\x77\\x7e\\x83\\x78\"\n\"\\x7f\\x1e\\x9c\\x6a\\x5b\\x95\\x55\\x1b\\x2d\\x88\\x1d\\x42\\xb7\\x50\\xd3\\x75\\x1e\\x9e\\x85\\x99\\x88\\xa6\\x88\\x78\\x36\\x18\\x8d\\x9c\\x8c\\x8b\\x90\\x1b\"\n\"\\xab\\x99\\x84\\x7c\\x7b\\x7d\\x81\\x73\\x7b\\x77\\x91\\x94\\x7c\\x1f\\x96\\x79\\x89\\x8c\\x83\\x1b\\x72\\x74\\x75\\x74\\x80\\x90\\x81\\x94\\x85\\x1f\\x79\\xa2\"\n\"\\xb4\\x7f\\xaf\\x1b\\xd3\\xc6\\xc1\\xcc\\xb3\\x7b\\x9d\\x62\\x94\\x1f\\x0e\\xf8\\xe2\\xd5\\x1d\\xa2\\xc0\\x48\\x1d\\xd7\\xf7\\xe8\\x15\\xa3\\x9a\\x94\\x98\\x9c\"\n\"\\x1a\\x9d\\x7d\\x98\\x77\\x7f\\x85\\x88\\x7e\\x78\\x1e\\xfb\\x32\\x21\\x05\\x73\\x7b\\x82\\x7f\\x7b\\x1a\\x78\\x99\\x7e\\x9f\\x95\\x98\\x90\\x95\\x9a\\x1e\\x0e\"\n\"\\xa8\\x0a\\x71\\x87\\x5e\\x1b\\x36\\x60\\xa2\\xc0\\x48\\x1d\\x53\\xf7\\xd6\\xf7\\x10\\x0a\\x96\\x1b\\xa3\\xa2\\xa1\\xa2\\x94\\x88\\x90\\x83\\x93\\x1f\\x83\\x92\"\n\"\\xfb\\x12\\xf7\\x11\\xfb\\x4a\\xf7\\x73\\x1d\\x98\\x7e\\x9e\\x95\\x93\\x8e\\x95\\x9a\\x1e\\x0e\\xa8\\x0a\\x70\\x87\\x5e\\x1b\\x37\\x60\\xa3\\xbf\\x48\\x1d\\xfb\"\n\"\\x2a\\xf8\\x0c\\x15\\x4d\\x0a\\xb0\\xa9\\x76\\x9f\\x6c\\xda\\x0a\\x0e\\x33\\x1d\\xfb\\x11\\xf8\\x24\\x15\\x98\\x7e\\x85\\x8e\\x7f\\x1b\\x70\\x74\\x75\\x72\\x83\"\n\"\\x90\\x82\\x97\\x7f\\x1f\\xf7\\x03\\x21\\x05\\x80\\x96\\x94\\xf7\\x01\\x0a\\x95\\x7f\\x96\\x1f\\x0e\\xf8\\x54\\xf8\\x3d\\x15\\xfb\\x4c\\x26\\x1d\\xd4\\x39\\x0a\"\n\"\\xfb\\x0b\\x06\\x6b\\x81\\x89\\x7e\\xf7\\x11\\x0a\\x6d\\x9d\\x7f\\xb6\\x1e\\xf7\\xeb\\x06\\xa8\\x9a\\x8f\\x96\\x99\\xdf\\x0a\\xfb\\x09\\x06\\xf7\\x3d\\xf8\\x81\"\n\"\\x15\\xa4\\x9b\\x93\\x97\\x9c\\x1a\\x9d\\x7d\\x98\\x77\\x7f\\x83\\x88\\x7e\\x79\\x1e\\xfb\\x32\\x21\\x05\\x75\\x7d\\x81\\x7c\\x52\\x0a\\x96\\x90\\x95\\x9b\\x1e\"\n\"\\x0e\\xf8\\x54\\x35\\x1d\\xaf\\xf8\\x6f\\x15\\xe4\\xf7\\x31\\x1d\\x85\\x91\\xfb\\x12\\xf7\\x11\\xfb\\x4b\\xfb\\x10\\x05\\x6e\\x76\\x86\\x86\\x79\\x1a\\x79\\x98\"\n\"\\x7e\\x9e\\x95\\x26\\x0a\\xf8\\x54\\x67\\x1d\\x89\\x7e\\xb6\\x0a\\xf7\\xeb\\x20\\x0a\\x9b\\x1a\\x9c\\x80\\x9b\\x7d\\x69\\x0a\\xfb\\x09\\x06\\x52\\xf8\\xa5\\x15\"\n\"\\x63\\x65\\x68\\x65\\x6f\\xa1\\x76\\xa9\\xb3\\xb1\\xae\\xb1\\xa7\\x75\\xa0\\x6d\\x1f\\xf7\\x64\\x16\\x62\\x62\\x1d\\x6d\\x1f\\x0e\\xf8\\x54\\x35\\x1d\\x74\\xf8\"\n\"\\xbd\\xf7\\x65\\x1d\\x83\\x91\\x81\\x96\\xf7\\x32\\x1d\\x86\\x94\\x7f\\x97\\x1f\\x0e\\xf7\\xee\\xf8\\xc4\\x15\\x99\\x92\\x88\\x7a\\xa1\\x1f\\x71\\xb0\\xac\\x7c\"\n\"\\xa1\\x1b\\xad\\xa9\\x9c\\xb4\\xb4\\x1f\\xa0\\xa1\\x95\\x9b\\x98\\x1a\\x99\\x7d\\x97\\x7a\\x80\\x78\\x80\\x7d\\x7e\\x1e\\x6a\\x6b\\x87\\x88\\x7d\\x1b\\x81\\x80\"\n\"\\x98\\x1d\\x6c\\x6a\\x7c\\x6d\\x6b\\x1f\\x6f\\x71\\x7f\\x78\\x7b\\x1a\\x7c\\x98\\x80\\x9b\\x96\\x95\\x90\\x95\\x95\\x1e\\xb0\\xb0\\x94\\x91\\x9c\\x1b\\x56\\xfb\"\n\"\\x1b\\x92\\x0a\\x0e\\x24\\x0a\\xf7\\x55\\xf7\\x9a\\x15\\xa5\\x9c\\x93\\x95\\x9c\\x1a\\x9e\\xf7\\x06\\x0a\\x76\\x7d\\x80\\x7c\\x7c\\x1a\\x78\\x99\\x7e\\x9e\\x96\"\n\"\\x95\\x8f\\x96\\x9c\\x1e\\x0e\\x24\\x0a\\xc5\\xf7\\x88\\x15\\xe4\\x31\\x05\\x81\\x36\\x0a\\xa2\\x96\\x8a\\x8d\\x7a\\x9b\\x1f\\xfb\\x12\\xf7\\x11\\xfb\\x4b\\xfb\"\n\"\\x10\\x05\\x6e\\x76\\x86\\x86\\x79\\x1a\\x79\\x99\\x7e\\x9d\\x95\\x94\\x8e\\x95\\x99\\x1e\\x0e\\x24\\x0a\\x67\\xf7\\xbe\\xc7\\x0a\\xb4\\xb1\\xae\\xb1\\xa7\\x75\"\n\"\\xa0\\x6c\\x1f\\x0e\\x24\\x0a\\x83\\xf7\\xd6\\x15\\x98\\x7d\\x86\\x8e\\x7f\\x1b\\x70\\x74\\x75\\x73\\x82\\x91\\x81\\x96\\x80\\x1f\\xf7\\x02\\x21\\x05\\x80\\x97\"\n\"\\x94\\x86\\x96\\x1b\\xa5\\xa3\\xa1\\xa2\\x95\\x87\\x93\\x7d\\x98\\x1f\\x0e\\x24\\x0a\\xf7\\x78\\xf7\\xc0\\x15\\x7d\\x7b\\x81\\x78\\x79\\x1f\\x6e\\x6f\\x87\\x88\"\n\"\\x7d\\x1b\\x81\\x80\\x98\\x1d\\x6c\\x6a\\x7c\\x6e\\x6c\\x1f\\x6f\\x71\\x7e\\x78\\x7a\\x1a\\x7c\\x98\\x80\\x9b\\x96\\x95\\x8f\\x96\\x95\\x1e\\xb0\\xb1\\x93\\x8e\"\n\"\\x1d\\xa0\\xa1\\x94\\x99\\x98\\x1a\\x99\\x7d\\x97\\x7b\\x1e\\x0e\\xf8\\x48\\xf8\\xcc\\x8c\\x1d\\x75\\x7f\\x8c\\x8a\\x9c\\x79\\x1f\\xf7\\x14\\xfb\\x10\\xf7\\x49\"\n\"\\xf7\\x10\\x05\\xa7\\x9e\\x91\\x92\\x9d\\x1a\\x9d\\x7e\\x98\\x78\\x81\\x82\\x87\\x81\\x7d\\x1e\\xa5\\xfb\\xb5\\x15\\x8e\\x98\\x8c\\x95\\x93\\x7f\\x0a\\x7f\\x1e\"\n\"\\x9a\\x69\\x78\\x0a\\xf7\\x11\\x63\\x1d\\x4a\\x61\\x0a\\x94\\x8e\\x93\\x97\\x1e\\x79\\xaf\\xbc\\x82\\xc5\\x1b\\xf7\\x26\\xf7\\x05\\xd2\\xe6\\xb0\\x79\\xaa\\x6a\"\n\"\\x9f\\x1f\\x71\\x9b\\x63\\x96\\x43\\x94\\x4e\\x93\\x84\\x8d\\x7f\\x8f\\x08\\x80\\x90\\x83\\x91\\x91\\x1a\\x9b\\xbf\\x9b\\xbd\\xb5\\xa9\\x83\\x79\\xa1\\x1e\\x6b\"\n\"\\x96\\x95\\x83\\xa5\\x55\\x1d\\x93\\x91\\xa6\\x08\\x0e\\xf8\\xbd\\xf8\\xe8\\x15\\xa5\\x9c\\x93\\x96\\x9b\\x1a\\x9e\\xf7\\x06\\x0a\\x75\\x7d\\x81\\x7c\\x52\\x0a\"\n\"\\x96\\x90\\x95\\x9b\\x1e\\xf7\\x68\\x4b\\x15\\xfb\\x20\\x26\\x1d\\xa9\\x06\\x65\\x65\\x1d\\x5a\\x1b\\x5d\\x72\\x9a\\xa7\\x91\\x8c\\x92\\x8d\\x93\\x1f\\xc7\\xf7\"\n\"\\xa2\\x5a\\x1d\\x93\\x94\\x8a\\x9d\\x1b\\x4b\\x1d\\x7b\\x1a\\x42\\xc8\\x5b\\xe5\\x61\\x1d\\xa9\\x98\\x35\\x0a\\x9c\\x5c\\x1d\\xf8\\x3c\\xf8\\xd6\\x15\\xe5\\xf7\"\n\"\\x31\\x1d\\x88\\x8d\\x89\\x8e\\x8a\\x8c\\xfb\\x13\\xf7\\x14\\x1d\\xf7\\xcf\\x4d\\x15\\xfb\\x20\\x26\\x1d\\xa9\\x06\\x65\\x65\\x1d\\x5a\\x1b\\x5d\\x72\\x9a\\xa7\"\n\"\\x91\\x8c\\x92\\x8d\\x93\\x1f\\xc7\\xf7\\xa2\\x5a\\x1d\\x93\\x94\\x8a\\x9d\\x1b\\x4b\\x1d\\x7b\\x1a\\x42\\xc8\\x5b\\xe5\\x61\\x1d\\xa9\\x98\\x35\\x0a\\x9c\\x5c\"\n\"\\x1d\\xf7\\xdf\\xf9\\x0c\\x15\\x62\\x4a\\x0a\\xb0\\xa9\\x75\\x9f\\x6d\\xda\\x0a\\xd0\\xfb\\x63\\x75\\x1d\\xee\\x9f\\x1d\\x9c\\x81\\x9a\\x7c\\x91\\x1e\\x8d\\x85\"\n\"\\x84\\x8c\\x7e\\x1b\\x0e\\xf7\\xfe\\xf9\\x24\\x15\\x98\\x7d\\x86\\xf7\\x28\\x0a\\x95\\x81\\x1f\\xf7\\x03\\x21\\x05\\x80\\x96\\x95\\xf7\\x01\\x0a\\x93\\x7e\\x98\"\n\"\\x1f\\xf7\\x1c\\xfb\\x11\\x15\\xfb\\x20\\x26\\x1d\\xa9\\x06\\x65\\x65\\x1d\\x5a\\x1b\\x5d\\x72\\x9a\\xa7\\x91\\x8c\\x92\\x8d\\x93\\x1f\\xc7\\xf7\\xa2\\x5a\\x1d\"\n\"\\x93\\x94\\x8a\\x9d\\x1b\\x4b\\x1d\\x7b\\x1a\\x42\\xc8\\x5b\\xe5\\x61\\x1d\\xa9\\x98\\x35\\x0a\\x9c\\x5c\\x1d\\x53\\x0a\\xf8\\x54\\xf7\\xa6\\x2f\\x1d\\xf7\\xe4\"\n\"\\xf9\\x0c\\xc7\\x0a\\xb3\\xb1\\xae\\xb1\\xa7\\x75\\xa0\\x6d\\x1f\\xfb\\xc5\\xfd\\x05\\x58\\x1d\\x0e\\xf7\\xa9\\xf2\\x15\\xf7\\xc9\\xf7\\x82\\x9d\\xdf\\x05\\xfc\"\n\"\\x35\\x06\\x73\\x21\\x05\\x89\\x81\\x89\\x7e\\x84\\x1a\\x75\\x9e\\x7a\\xa4\\xae\\xa2\\xa2\\xb7\\x95\\x1e\\x8c\\x90\\x05\\xf7\\x1a\\x06\\xfb\\xc7\\xf7\\x5e\\x1d\"\n\"\\x99\\x8c\\x91\\x79\\x0a\\x6c\\x75\\x7a\\x68\\x80\\x1e\\x81\\xf8\\x65\\x8c\\x1d\\x74\\x80\\x8c\\x89\\x9c\\x7a\\x1f\\xf7\\x14\\xfb\\x10\\xf7\\x49\\xf7\\x10\\x05\"\n\"\\xa8\\x9e\\x90\\x92\\x9d\\x1a\\x9d\\x7e\\x98\\x79\\x80\\x82\\x87\\x81\\x7d\\x1e\\x0e\\xf7\\xf9\\xf8\\x98\\x15\\x48\\x06\\x67\\x75\\x7b\\x71\\x7c\\x97\\x7f\\x9a\"\n\"\\x89\\x1f\\x8f\\x06\\x71\\xfb\\x0b\\x05\\x6a\\x76\\x7a\\x72\\x76\\x98\\x82\\xa9\\x1f\\xd0\\x06\\xae\\xa1\\x9c\\xa5\\x9e\\x7f\\x94\\x72\\x8c\\x1f\\x9f\\xe6\\x05\"\n\"\\xa6\\xad\\x9d\\x93\\xa4\\x1b\\xa7\\x99\\x84\\x7c\\x89\\x8a\\x87\\x8a\\x87\\x1f\\x77\\x2d\\x05\\x6f\\x89\\x78\\x7a\\x74\\x1a\\x76\\x98\\x82\\xa9\\x1e\\xc2\\x06\"\n\"\\xae\\xa1\\x9b\\xa6\\x9a\\x80\\x97\\x7b\\x8c\\x1f\\x88\\x8c\\xa0\\xe9\\x05\\x8d\\x95\\x8c\\x95\\x93\\x1a\\xb9\\x63\\xa9\\x50\\x6f\\x71\\x83\\x7e\\x75\\x1e\\x85\"\n\"\\x87\\x05\\x0e\\xf8\\x73\\x16\\xa8\\x99\\x28\\x1d\\x9c\\xf7\\x0c\\x0a\\x70\\x06\\xbb\\xf7\\x6e\\x05\\xa8\\x06\\xaa\\x97\\x2a\\x0a\\x9d\\x9b\\xf7\\x0c\\x0a\\x6f\"\n\"\\x06\\x92\\xac\\x05\\xa1\\x91\\xc2\\x0a\\xfb\\x28\\xf7\\x06\\x1d\\x4a\\x3a\\x81\\x0a\\x7d\\x25\\x0a\\x97\\x06\\x5b\\xfb\\x6e\\x05\\x78\\x06\\x6b\\x81\\x88\\xf7\"\n\"\\x04\\x0a\\xf7\\x1b\\x06\\xb0\\x8c\\x95\\x8e\\x9d\\x9d\\x08\\x7a\\x96\\x95\\x86\\xaf\\x1b\\xfb\\x01\\xf3\\x15\\xbb\\xf7\\x6e\\x05\\xf7\\x29\\x06\\x5a\\xfb\\x6e\"\n\"\\x05\\x79\\x06\\x69\\x7e\\x87\\x79\\x79\\x1f\\x9d\\x80\\x7f\\x8f\\x6a\\x1b\\x0e\\xf8\\xb6\\xf2\\x15\\xd2\\xf7\\xd6\\x05\\xfb\\x40\\xf7\\x06\\x1d\\x48\\x6f\\x76\"\n\"\\x86\\x7d\\x70\\x1f\\x98\\x6f\\x6f\\x91\\x6c\\x1b\\x3a\\x81\\x0a\\x84\\x25\\x0a\\x90\\x39\\x0a\\x7f\\x38\\x1d\\xf8\\x6a\\x06\\xa7\\x9a\\x8f\\x96\\x98\\x1f\\x9b\"\n\"\\x97\\x94\\x9d\\x9c\\x1a\\xa8\\x7a\\x97\\x60\\x1e\\xfb\\xb9\\x16\\x52\\x06\\xbc\\xf7\\x6f\\x05\\xc3\\x06\\xa3\\xf2\\x15\\x52\\x89\\x0a\\x9d\\x9f\\x1b\\x92\\x90\"\n\"\\x8a\\x89\\x97\\x1f\\x83\\x7a\\x89\\x85\\x88\\x7d\\x08\\xa8\\xfb\\xf8\\x15\\xbc\\xf7\\x6f\\x05\\xcb\\x06\\x5a\\xfb\\x6f\\x05\\x0e\\xf8\\xb5\\xf2\\x15\\xf7\\x03\"\n\"\\xf8\\x87\\x05\\xfb\\x1b\\x06\\x6c\\x8c\\x73\\x85\\x70\\x7d\\x08\\x98\\x70\\x6e\\x91\\x6c\\x1b\\x3a\\x40\\x4e\\x39\\x79\\x1f\\x83\\x69\\x05\\x84\\x06\\x6b\\x81\"\n\"\\x3a\\x1d\\x90\\x39\\x0a\\x7f\\x38\\x1d\\xf8\\x6a\\x06\\xa7\\x9a\\x8f\\x96\\x98\\x1f\\x9b\\x97\\x94\\x9d\\x9c\\x1a\\xa8\\x7a\\x97\\x60\\x1e\\x5a\\xf7\\xd6\\x15\"\n\"\\x4b\\x89\\x0a\\x9e\\x9f\\x1b\\x92\\x92\\x8a\\x87\\x98\\x1f\\xfb\\x98\\xfc\\x1c\\x15\\x52\\x06\\xbc\\xf7\\x6f\\x05\\xc3\\x06\\xa3\\xf2\\x15\\x52\\x89\\x0a\\x9e\"\n\"\\x9f\\x1b\\x92\\x90\\x8a\\x88\\x97\\x1f\\x83\\x7a\\x89\\x85\\x88\\x7d\\x08\\xa8\\xfb\\xf8\\x15\\xbc\\xf7\\x6f\\x05\\xcb\\x06\\x5a\\xfb\\x6f\\x05\\x0e\\xf8\\xdb\"\n\"\\xf7\\x34\\x15\\xad\\xa7\\x9e\\xb0\\xb0\\x1a\\xc0\\x65\\xaf\\x52\\xf7\\x07\\x0a\\x62\\x60\\x7b\\x0a\\xa2\\x7b\\x9b\\x1e\\x54\\xf7\\x12\\x15\\xa3\\x9b\\x7d\\x75\"\n\"\\x6b\\x71\\x71\\x6a\\x8a\\x0a\\xac\\x1f\\x6a\\xf7\\x24\\x1d\\xfb\\x5d\\xf8\\x91\\x5e\\x0a\\xf7\\xe8\\xf7\\x4e\\x15\\x93\\x96\\x91\\x98\\x93\\x1a\\x9a\\x80\\x96\"\n\"\\x7b\\x7d\\x80\\x84\\x79\\x7e\\x1e\\xfb\\xd5\\xfc\\x47\\x05\\x83\\x7f\\x86\\x7f\\x84\\x1a\\x7b\\x96\\x80\\x9b\\x98\\x97\\x93\\x9c\\x98\\x1e\\x0e\\xf8\\xc2\\xf8\"\n\"\\x91\\x15\\x92\\x96\\x91\\x98\\x93\\x1a\\x9a\\x80\\x96\\x7b\\x7d\\x81\\x9a\\x1d\\x82\\x7e\\x86\\x81\\x50\\x0a\\x96\\x93\\x9c\\x98\\x1e\\x75\\xf8\\x2f\\x9c\\x0a\"\n\"\\xf7\\xee\\xfb\\xd9\\x15\\xad\\xa7\\x9e\\xb0\\xb0\\x1a\\xc0\\x64\\xaf\\x53\\xf7\\x07\\x0a\\x61\\x61\\x1a\\x58\\xb2\\x6a\\xc8\\xdc\\xcb\\xc5\\xd4\\xa3\\x82\\xa2\"\n\"\\x7b\\x9b\\x1e\\x54\\xf7\\x12\\x15\\xa3\\x9b\\x7d\\x76\\x6a\\x71\\x71\\x6a\\x8a\\x0a\\xac\\x1f\\x6b\\xfb\\x33\\x15\\xa4\\x9d\\x79\\x71\\x6c\\x71\\x76\\x67\\x6f\"\n\"\\x79\\x98\\x9f\\xaa\\xac\\xab\\xab\\x1f\\x0e\\xf8\\xc2\\xf8\\x91\\x15\\x92\\x95\\x91\\x99\\x93\\x1a\\x9a\\x80\\x96\\x7c\\x7d\\x80\\x76\\x0a\\x50\\x0a\\x97\\x93\"\n\"\\x9c\\x98\\x1e\\xf7\\xed\\xf7\\x67\\x1d\\x53\\x41\\x48\\x4d\\x46\\x74\\x92\\x78\\x9a\\x79\\x1e\\x65\\x70\\x75\\x63\\x60\\x7b\\x0a\\xa3\\x7b\\x9a\\xb1\\x0a\\xfb\"\n\"\\xab\\xf8\\x47\\x15\\xeb\\x06\\xaa\\x9e\\x9a\\xa3\\x9e\\x80\\x92\\x71\\x1f\\xfb\\x37\\x06\\x69\\xfb\\x3c\\x8a\\x81\\x05\\x7d\\x95\\x80\\x98\\x91\\x8e\\x8c\\x8f\"\n\"\\x93\\x1e\\x97\\xa5\\xa2\\x92\\x9d\\x1b\\xa6\\x9c\\x79\\x6e\\x78\\x85\\x77\\x82\\x7d\\x1f\\x75\\x7e\\x74\\x82\\x63\\x1b\\x6a\\x7c\\x8f\\x99\\x7f\\x1f\\x92\\x84\"\n\"\\x88\\x8d\\x83\\x1b\\x78\\x79\\x78\\x77\\x6c\\xb8\\x75\\xc7\\xca\\xb3\\x9c\\xb1\\xa9\\x1f\\xa2\\xa9\\x98\\xb2\\xb0\\x1a\\xc7\\x67\\xb2\\x54\\x7c\\x7f\\x89\\x85\"\n\"\\x73\\x1e\\x0e\\xf7\\xec\\xf8\\xc4\\x15\\xfb\\x1f\\xfb\\x8f\\x05\\x85\\x80\\x88\\x82\\x84\\x1a\\x7d\\x98\\x80\\x9a\\x9d\\x95\\x93\\xa2\\x98\\x1e\\xf7\\x2b\\xf7\"\n\"\\xa7\\x97\\xc9\\x05\\xfb\\x9f\\x06\\x80\\x54\\x05\\x8a\\x83\\x8a\\x87\\x87\\x1a\\x7d\\x97\\x80\\x9a\\x9f\\x98\\x95\\xa0\\x92\\x1e\\xf7\\xeb\\x58\\x15\\x92\\x95\"\n\"\\x91\\x99\\x93\\x1a\\x9a\\x80\\x96\\x7b\\x7e\\x80\\x76\\x0a\\x50\\x0a\\x97\\x93\\x9c\\x97\\x1e\\xf7\\xee\\xf7\\x67\\x1d\\x52\\x42\\x48\\x4d\\x46\\x74\\x92\\x78\"\n\"\\x9a\\x79\\x1e\\x66\\x71\\x74\\x62\\x60\\x7b\\x0a\\xa2\\x7b\\x9b\\xb1\\x0a\\x0e\\xb2\\x1d\\xf7\\x95\\xf7\\xc7\\x15\\xa5\\x9d\\x91\\x93\\x6e\\x0a\\x74\\x7a\\x82\"\n\"\\x7f\\x7c\\x1a\\x78\\x99\\x7e\\x9f\\x94\\x9a\\x91\\x95\\x99\\x1e\\x0e\\x22\\x1d\\x25\\xf8\\x0e\\x46\\x1d\\x93\\x0a\\xf8\\x28\\xf7\\x2b\\x15\\x93\\x5c\\xdb\\x0a\"\n\"\\x78\\x9f\\x72\\x8a\\x1f\\x81\\x8a\\x05\\x89\\x06\\x87\\x06\\x2e\\xf8\\x60\\x05\\xfb\\x48\\x97\\x1d\\x9f\\x06\\xfb\\x7a\\xfb\\xf8\\x73\\x8a\\x80\\x8a\\x80\\x86\"\n\"\\x19\\x76\\x80\\x7c\\x74\\x76\\x1a\\x6d\\xe5\\x0a\\xaa\\xba\\x05\\xf7\\x66\\xf2\\x15\\xfb\\x24\\x06\\xf7\\x01\\xf7\\x3c\\x05\\xfb\\x60\\xea\\x15\\x8d\\x95\\x8b\"\n\"\\x8b\\x8f\\x1a\\xa1\\x81\\x96\\x79\\x79\\x7f\\x7e\\x73\\x85\\x1e\\x6a\\xfb\\x2b\\x05\\x89\\x84\\x8b\\x88\\x86\\x1a\\x77\\xf7\\x20\\x0a\\x90\\x1e\\x0e\\x22\\x1d\"\n\"\\x2c\\xf7\\xd9\\x47\\x0a\\xf8\\x76\\xf8\\xc8\\x15\\xfb\\x70\\x6b\\x0a\\xc3\\x06\\xfb\\x7b\\xfb\\xf9\\x6b\\x8a\\x81\\x89\\x7d\\x7f\\x19\\x7b\\x7e\\x31\\x1d\\xb6\"\n\"\\x1e\\xf7\\x18\\xdc\\x0a\\x82\\x85\\x8c\\x76\\x1b\\x7c\\x06\\xa9\\xba\\x05\\xf7\\x7d\\x06\\x94\\x5c\\x05\\x79\\x06\\x6b\\x81\\x37\\x0a\\x79\\x7a\\x1a\\x6d\\x9d\"\n\"\\x7f\\xb5\\x1e\\xcf\\x06\\x3f\\xb2\\x0a\\xb8\\xb6\\xc9\\xa6\\x1f\\xb4\\x9d\\x9b\\x9d\\xa7\\x1a\\xa6\\x79\\x9a\\x6b\\x1e\\x82\\x06\\xfb\\x2d\\xf7\\x2a\\x15\\xfb\"\n\"\\x25\\x06\\xf7\\x03\\xf7\\x3d\\x05\\x0e\\x22\\x1d\\xb9\\xf8\\x34\\xe3\\x1d\\xc0\\xf7\\x22\\x15\\xa5\\x9d\\x91\\x94\\x9c\\x1a\\x9d\\x7c\\x99\\x77\\x7f\\x85\\x88\"\n\"\\x7f\\x79\\x1e\\xfb\\x2b\\x20\\x05\\x74\\x7b\\x82\\x7f\\x7b\\x1a\\x78\\x99\\x7e\\xa1\\x92\\x9a\\x92\\x94\\x98\\x1e\\x0e\\xbd\\x1d\\x56\\x0a\\xf8\\x97\\xf8\\x3f\"\n\"\\x15\\xa7\\x9e\\x90\\x92\\x6e\\x0a\\x73\\x7a\\x83\\xf7\\x61\\x1d\\x98\\x1e\\x0e\\x56\\x0a\\xf7\\xf7\\xf8\\x23\\x15\\x2e\\xe5\\x05\\x94\\x81\\x83\\x8f\\x82\\x1b\"\n\"\\x74\\x72\\x74\\x76\\x81\\x8f\\x84\\x99\\x7e\\x1f\\xf7\\x17\\xfb\\x11\\xf7\\x43\\xf7\\x10\\x99\\x95\\x92\\x91\\x8d\\x8c\\x19\\x91\\x91\\x90\\x98\\x94\\x1a\\x9b\"\n\"\\x7c\\x99\\x7a\\x81\\x7e\\x86\\x83\\x81\\x1e\\x0e\\x6f\\x1d\\xf8\\x00\\xf8\\x2c\\x31\\x0a\\x6f\\x1d\\xf8\\x04\\xf8\\x5f\\xb9\\x0a\\x8c\\x0a\\xc6\\x1d\\xf4\\x59\"\n\"\\x1d\\xb6\\x1d\\x8f\\x16\\xf8\\xe4\\x06\\xfb\\x96\\xf8\\xc7\\x05\\x3f\\x06\\xfb\\x0c\\xfc\\x70\\x15\\xf7\\x32\\xf7\\xe6\\xf7\\x32\\xfb\\xe6\\x05\\x0e\\x24\\x1d\"\n\"\\xad\\xf7\\x28\\x05\\x8e\\x9b\\x8c\\x91\\x93\\x1a\\xa1\\x21\\x1d\\xe3\\xf9\\x4e\\x46\\x1d\\x24\\x1d\\xad\\xf7\\x28\\x05\\x8e\\x9b\\x8c\\x91\\x93\\x1a\\xa1\\x21\"\n\"\\x1d\\xf7\\x66\\x59\\x1d\\x24\\x1d\\xad\\xf7\\x28\\x05\\x8e\\x9b\\x8c\\x91\\x93\\x1a\\xa1\\x21\\x1d\\xf7\\x73\\x80\\x1d\\x24\\x1d\\xad\\xf7\\x28\\x05\\x8e\\x9b\"\n\"\\x8c\\x91\\x93\\x1a\\xa1\\x21\\x1d\\xea\\xf9\\x19\\x47\\x0a\\xf8\\x40\\x8f\\x15\\x76\\x48\\x6a\\x6f\\x4c\\x89\\x08\\x29\\x06\\x6a\\x83\\x89\\x7e\\x7b\\x1f\\x7a\"\n\"\\x7e\\x82\\x7b\\x7b\\x1a\\x6c\\x9c\\x7f\\xb7\\x1e\\xf0\\x06\\xc8\\xcb\\xa4\\xb6\\xb9\\x1f\\xa5\\x9f\\xa0\\xb4\\xa1\\xd3\\xf3\\xf8\\x5c\\x18\\xc4\\x1d\\xc6\\xf7\"\n\"\\x9c\\x05\\x0e\\xb9\\x1d\\xf8\\x04\\x06\\x40\\x64\\x71\\xb5\\x0a\\xb7\\xb6\\xc8\\xa4\\x1f\\x90\\x8d\\x92\\x8e\\xac\\xf7\\x27\\x05\\x8e\\x9b\\x8c\\x91\\x93\\x1a\"\n\"\\xa1\\x21\\x1d\\x0e\\xb4\\x1d\\xd0\\xf8\\x99\\x15\\x8d\\x96\\x8b\\x8b\\x8f\\x1a\\xa0\\x81\\x96\\x79\\x79\\x7f\\x7e\\x73\\x85\\x1e\\x6a\\xfb\\x2b\\x05\\x8a\\x87\"\n\"\\x8a\\x84\\x85\\x1a\\x79\\x95\\x80\\x9d\\x9d\\x97\\x98\\xa4\\x90\\x1e\\xf7\\x4a\\xfb\\x1c\\x15\\xd8\\x06\\x8a\\x89\\x05\\x87\\x78\\x8b\\x8a\\x83\\x1a\\x74\\xa9\"\n\"\\x1d\\x8e\\x93\\x91\\xa6\\xa4\\xf7\\x00\\x18\\x8e\\x9b\\x8c\\x90\\x93\\x1a\\xa2\\x78\\x9c\\x72\\x7a\\x7a\\x83\\x7e\\x7e\\x1e\\x80\\x80\\x88\\x84\\x85\\x6f\\x8a\"\n\"\\x87\\x18\\x3e\\x2b\\x1d\\xf7\\x76\\x06\\x81\\x60\\x05\\x88\\x7b\\x8a\\x86\\x83\\x1a\\x74\\x9f\\x7a\\xa3\\x9c\\xf7\\x1b\\x0a\\xac\\xf7\\x28\\x18\\xfc\\x59\\x27\"\n\"\\x1d\\x95\\x06\\x3c\\xfb\\xfa\\x05\\x7f\\x06\\x6c\\x80\\x36\\x1d\\xf8\\x6d\\x06\\xad\\xf7\\x28\\x05\\x8e\\x99\\x8c\\x93\\x92\\x1a\\xa2\\x78\\x9c\\x72\\x67\\x75\"\n\"\\x75\\x5e\\x81\\x1e\\x80\\x5c\\x05\\xfb\\x8b\\x06\\x0e\\xf8\\x2d\\xf7\\x7a\\x44\\x1d\\x7b\\x1a\\x71\\x97\\x7e\\xa8\\x45\\x0a\\x0e\\xdb\\xf8\\x99\\x15\\x8d\\x93\"\n\"\\x8b\\x8d\\x8f\\x1a\\xa1\\x81\\x96\\x79\\x79\\x7f\\x7e\\x73\\x85\\x1e\\x6a\\xfb\\x2b\\x05\\x8a\\x86\\x8a\\x86\\x86\\x1a\\x77\\xf7\\x20\\x0a\\x91\\x1e\\xf7\\xfe\"\n\"\\xfb\\x1e\\x44\\x1d\\x7b\\x1a\\x71\\x97\\x7e\\xa8\\x45\\x0a\\x0e\\xf7\\x93\\xf7\\xf2\\x15\\xdc\\xb0\\xc4\\xb7\\xce\\x1b\\xc1\\xbd\\x6d\\x6b\\x1f\\x8a\\x72\\x05\"\n\"\\x74\\x9a\\x7c\\xa2\\xab\\xa0\\xa1\\xb7\\x95\\x1e\\x9d\\xdb\\x05\\x8e\\x9a\\x8c\\x91\\x93\\x1a\\xa2\\x7b\\x9b\\x74\\x7a\\x7f\\x85\\x7b\\x7c\\x1e\\xa8\\x57\\x72\"\n\"\\x92\\x58\\x1b\\xfb\\x11\\xfb\\x0f\\x2d\\xfb\\x1a\\x5c\\x1f\\x6f\\x06\\x75\\x7b\\x7c\\x75\\x7a\\x93\\x84\\x9d\\x1f\\xa2\\x06\\x84\\x6c\\x05\\x72\\x06\\x75\\x7b\"\n\"\\x7c\\x75\\x7a\\x93\\x83\\x9d\\x1f\\xa6\\x7e\\x06\\xfb\\x0a\\xe3\\x3d\\xf7\\x17\\xdd\\xd4\\xa4\\xb8\\xc0\\x1e\\xa4\\xa1\\x97\\x9e\\x9f\\x1a\\xa3\\x7a\\x9d\\x74\"\n\"\\x7e\\x7f\\x86\\x80\\x7e\\x1e\\x6d\\x71\\x8b\\x8b\\x81\\x86\\x08\\x7d\\x72\\x65\\x83\\x64\\x1b\\x3e\\x5f\\xb0\\xcf\\x88\\x1f\\xf7\\x36\\x06\\xa2\\x9b\\x9b\\xa1\"\n\"\\x9c\\x83\\x92\\x78\\x1f\\xfb\\x3a\\x06\\x92\\xaa\\x05\\xf7\\x57\\x06\\xa2\\x9b\\x9b\\xa0\\x9c\\x83\\x92\\x78\\x1f\\x0e\\xf7\\xfd\\xc2\\x1d\\x6e\\x1d\\xfb\\x7f\"\n\"\\xf9\\x86\\x46\\x1d\\xb3\\x1d\\x23\\xf9\\x2f\\x31\\x0a\\x6e\\x1d\\xfb\\x84\\xfb\\x3a\\x23\\x1d\\xb3\\x1d\\x27\\xf9\\x62\\xb9\\x0a\\xf7\\x21\\xf8\\x48\\x15\\x84\"\n\"\\x06\\x89\\x06\\x61\\x6c\\x78\\x70\\x75\\xa0\\x80\\xb6\\x8a\\x1f\\x52\\xfb\\x91\\x05\\x89\\xc9\\x0a\\x7a\\x1a\\x6e\\x9d\\x7e\\xb5\\x1e\\xf7\\x0d\\x06\\xa9\\x98\"\n\"\\xf7\\x25\\x1d\\x6e\\x1b\\x82\\x2b\\x1d\\xf7\\x62\\x06\\x6e\\xfb\\x13\\x05\\x80\\x38\\x1d\\xf7\\x0d\\x06\\xa8\\x98\\x28\\x1d\\x9b\\x1a\\x98\\x86\\x97\\x82\\x93\"\n\"\\x1e\\x92\\x82\\x82\\x8d\\x6f\\x1b\\x8a\\x06\\xc3\\xf7\\x91\\x05\\x9d\\x94\\x8c\\x8d\\x95\\x1f\\xa4\\x90\\x9e\\x9e\\x9e\\x1a\\xa0\\x76\\x98\\x68\\x1e\\x88\\x06\"\n\"\\x87\\x06\\x90\\xa5\\x05\\xb3\\x8f\\xa4\\xa3\\xac\\xce\\x0a\\x6e\\x9d\\x7e\\xb5\\x1e\\x95\\x06\\x86\\x72\\x05\\xfb\\x62\\x06\\x90\\xa4\\x05\\x97\\x06\\xaa\\x96\"\n\"\\x2a\\x0a\\x9d\\x9c\\xce\\x0a\\x73\\x99\\x7d\\xa6\\x88\\x1e\\xf7\\xb7\\x21\\x15\\x83\\x68\\x05\\xfb\\x62\\x06\\x93\\xae\\x05\\x0e\\xf8\\x2d\\xf7\\x7a\\x44\\x1d\"\n\"\\x7b\\x1a\\x71\\x97\\x7e\\xa8\\x45\\x0a\\xf7\\x67\\xf8\\x78\\x31\\x0a\\xf7\\xd1\\xf8\\x61\\x15\\xa9\\x06\\xaa\\x97\\x8e\\x96\\x9a\\x1f\\x9a\\x98\\x95\\xf6\\x0a\"\n\"\\xfb\\x3c\\x42\\x1d\\x95\\x1d\\xb5\\x1e\\xa8\\x06\\x3c\\xfb\\xfa\\x05\\x6c\\xeb\\x0a\\xb6\\x1e\\xf7\\x3c\\x20\\x0a\\x9c\\x1a\\x97\\x86\\x96\\x81\\x94\\x1e\\x93\"\n\"\\x82\\x82\\x8c\\x6f\\x1b\\x6e\\x06\\xf7\\xea\\xf7\\xfa\\x15\\x31\\xfc\\x2a\\x81\\x60\\x87\\xa3\\x1d\\x68\\x1b\\x70\\x6f\\x92\\x9a\\x63\\x1f\\x90\\x7e\\x81\\x8e\"\n\"\\x84\\x1b\\x6d\\x6b\\x6b\\x6d\\x7d\\x90\\x81\\x95\\x83\\x1f\\x77\\xa4\\xd5\\x78\\xbf\\x1b\\xc5\\xc7\\x9f\\xae\\xbe\\x1f\\xc4\\xb2\\xa4\\xb0\\x99\\xcb\\xf7\\x08\"\n\"\\xf8\\x9d\\x18\\xfb\\x35\\x49\\x1d\\x9d\\x7f\\xb5\\x1e\\x0e\\xf8\\x2e\\x49\\x0a\\x9c\\x9c\\x1a\\x9c\\x81\\x9b\\x7c\\x74\\x1d\\x47\\xf9\\x4e\\x5f\\x0a\\x28\\x0a\"\n\"\\xe2\\x80\\x1d\\x28\\x0a\\x62\\xf9\\x19\\x47\\x0a\\xf8\\x5c\\x49\\x0a\\x9d\\x9c\\x52\\x1d\\x82\\x85\\x8c\\x76\\x1b\\xfb\\xc1\\x27\\x1d\\xeb\\x06\\x3b\\xfb\\xfa\"\n\"\\x05\\x2a\\x26\\x1d\\xf7\\x77\\x06\\x40\\xb2\\x0a\\xbb\\xb9\\xc8\\xa4\\x1f\\xb4\\x9c\\x9b\\x9c\\xa7\\x1a\\x9c\\x81\\x9b\\x7c\\x69\\x0a\\x2c\\x06\\x0e\\x58\\x0a\"\n\"\\xd9\\x1d\\x6a\\xf9\\x0d\\x15\\x7c\\x1d\\xf7\\x61\\x16\\x69\\x6c\\x6e\\x6b\\x73\\x9d\\x79\\xa5\\xae\\xaa\\xa8\\xac\\xa3\\x78\\x9c\\x71\\x1f\\x0e\\xf8\\x50\\xf8\"\n\"\\x60\\x15\\xea\\xf7\\x25\\x0a\\xfb\\xbc\\x97\\x1d\\xe8\\x53\\x1d\\x2c\\xf7\\x6d\\x1d\\xf7\\xbd\\xf7\\x25\\x0a\\x2e\\x06\\xfb\\x6d\\xf8\\x31\\xbb\\x0a\\xf8\\x5c\"\n\"\\xf8\\x61\\x15\\xed\\x06\\xa9\\x97\\x8e\\x97\\x9a\\x83\\x1d\\xfb\\xc1\\x49\\x1d\\x9d\\x7f\\xb5\\x1e\\xeb\\x06\\x3b\\xfb\\xfa\\x05\\x2a\\x38\\x1d\\xf7\\xc1\\x6b\"\n\"\\x1d\\x9a\\x97\\x95\\xf6\\x0a\\x2c\\x06\\xba\\xf8\\xcb\\xcc\\x1d\\xf8\\xb9\\x94\\x1d\\x9a\\x97\\x95\\x9c\\x9c\\x1a\\x9c\\x80\\x51\\x0a\\x85\\x8c\\x76\\x62\\x0a\"\n\"\\x81\\x60\\x87\\xa3\\x1d\\x67\\x1b\\x6b\\x6f\\x93\\x9f\\x5e\\x1f\\x9f\\xe4\\xf7\\x23\\x0a\\x72\\x67\\x75\\x75\\x5f\\x81\\x1e\\x68\\xfb\\x32\\x05\\x5b\\xe9\\xbf\"\n\"\\x7b\\xc7\\x1b\\xc7\\xc8\\x9e\\xae\\xbd\\x1f\\xc4\\xb3\\xa4\\xb0\\x9a\\xca\\x08\\x41\\xf8\\xa9\\x15\\xe5\\x31\\x05\\x82\\x36\\x0a\\xa1\\x97\\x8a\\x8c\\x79\\x9c\"\n\"\\x1f\\xf7\\x0e\\x1d\\xf7\\x57\\x9d\\x0a\\x97\\x8e\\x96\\x9a\\xd3\\x1d\\x9a\\x8f\\x96\\x98\\x48\\x0a\\x82\\x85\\x8b\\x77\\x1b\\x6d\\x06\\x0e\\x8b\\x0a\\xf3\\xfb\"\n\"\\x72\\x23\\x1d\\x2f\\x0a\\xf7\\x8d\\x30\\x0a\\xf7\\xf3\\xf8\\x3a\\x15\\xcc\\xfb\\xd2\\xdb\\x0a\\x79\\x9e\\x71\\x1f\\x81\\x8a\\x05\\x89\\x06\\x87\\x06\\x2e\\xf8\"\n\"\\x60\\x05\\xfb\\x6c\\x97\\x1d\\xc3\\x06\\xfb\\x7a\\xfb\\xf9\\x05\\x72\\x80\\x89\\x86\\x80\\x1f\\x76\\x80\\x7d\\x75\\x75\\x1a\\x6e\\xe5\\x0a\\x0e\\x2f\\x0a\\xf8\"\n\"\\x10\\xf8\\x29\\x15\\x8c\\x8c\\x8c\\x8b\\x8c\\x8d\\x8f\\x64\\x0a\\x7c\\x83\\x7b\\x7e\\x1e\\x23\\xfb\\x0e\\x05\\x7b\\x7a\\x86\\x82\\x65\\x0a\\x2f\\x0a\\xb5\\xfb\"\n\"\\x72\\x23\\x1d\\x2f\\x0a\\xf7\\x6d\\xf7\\xbf\\x15\\x60\\x60\\x64\\x63\\x6c\\xf7\\x2e\\x0a\\xb2\\xb3\\xab\\x73\\xa2\\x69\\x1f\\x82\\x06\\x0e\\x8f\\x0a\\x3c\\x0a\"\n\"\\xf8\\x08\\x30\\x0a\\x3c\\x0a\\xf7\\x7c\\x59\\x1d\\x3c\\x0a\\xf7\\x11\\xfb\\x72\\x23\\x1d\\xf7\\x68\\xf8\\x03\\x15\\xf7\\x3f\\xfc\\x03\\x05\\xf4\\x06\\xf1\\xf8\"\n\"\\x61\\x05\\xcb\\x1d\\x9a\\x97\\x95\\xe8\\x0a\\x0e\\xf8\\x11\\x5c\\x0a\\x2b\\xf7\\xda\\x5f\\x0a\\x2e\\x1d\\xe2\\xf7\\x92\\x46\\x0a\\x6e\\x72\\x88\\x87\\x5f\\x1d\"\n\"\\xf7\\xa9\\xf0\\x46\\x0a\\x6e\\x72\\x88\\x87\\x5f\\x1d\\x0e\\x2e\\x1d\\x46\\xf7\\xa5\\x47\\x0a\\xf7\\x35\\xec\\x15\\x8e\\x07\\x8e\\x07\\x9a\\x81\\x95\\x7d\\x75\"\n\"\\x81\\x7c\\x5e\\x81\\x1e\\x7c\\x47\\x05\\xf7\\x58\\x06\\xae\\xf7\\x38\\x7f\\x8f\\x83\\x8d\\x88\\x8d\\x19\\x60\\x9c\\x76\\xaf\\xc4\\x1a\\xf2\\xd3\\xe4\\xde\\xc7\"\n\"\\xb2\\x5a\\x41\\x34\\x5a\\x44\\x3d\\x71\\x1e\\x84\\x88\\x68\\xfb\\x38\\x05\\xf7\\x6c\\x06\\x99\\xcd\\x05\\x8d\\x95\\x8d\\x98\\x94\\x1a\\x9f\\x82\\x95\\x7b\\x7a\"\n\"\\x80\\x81\\x76\\x85\\x1e\\x66\\x06\\xe4\\xc4\\xbd\\xe6\\xf4\\x1a\\xf7\\x1a\\x35\\xe9\\xfb\\x0d\\x41\\x4d\\x6d\\x4e\\x57\\x1e\\x5b\\x52\\x70\\x42\\x41\\x1a\\x38\"\n\"\\xa9\\x4e\\xc8\\x61\\x1e\\x43\\xf8\\x38\\xbb\\x0a\\xf8\\x11\\x5c\\x0a\\x0e\\xf8\\x28\\xf8\\xd6\\x15\\x3c\\x46\\x67\\x42\\x4c\\x1f\\x51\\x46\\x6a\\x31\\x2c\\x1a\"\n\"\\xfb\\x20\\xd8\\x32\\xf7\\x0e\\xe9\\xe1\\xc0\\xed\\xca\\x1e\\xb2\\xc9\\xa0\\xd5\\xd8\\x1a\\xf7\\x1f\\x3c\\xe4\\xfb\\x0d\\x1e\\x23\\x04\\xc5\\xad\\x5f\\x3f\\x44\"\n\"\\x77\\x4e\\x62\\x55\\x1f\\x57\\x63\\x5e\\x71\\x5b\\x1b\\x50\\x6a\\xb7\\xdb\\xce\\x9f\\xc8\\xb4\\xc0\\x1f\\xc0\\xb4\\xb6\\xa5\\xbc\\x1b\\xfb\\x9e\\xb6\\x15\\x8c\"\n\"\\x9b\\x05\\x9f\\x81\\x96\\x79\\x79\\x80\\xf7\\x18\\x0a\\x85\\x85\\x1a\\x78\\x95\\x80\\x9d\\x9d\\x96\\x97\\xa5\\x91\\x1e\\x0e\\xbb\\x1d\\xf7\\x0b\\xf7\\xac\\x15\"\n\"\\xa5\\x9d\\x91\\x93\\x6e\\x0a\\x74\\x7a\\x82\\x80\\x7b\\x1a\\x78\\x99\\x7e\\x9f\\x95\\x99\\x91\\x95\\x98\\x1e\\x0e\\xf8\\x6b\\xf8\\xad\\x15\\x98\\x06\\xa7\\x91\"\n\"\\x8c\\x94\\x98\\x1f\\x96\\x93\\x92\\x97\\x96\\x1a\\xa1\\x7d\\x93\\x66\\x1e\\xfb\\x17\\x06\\x61\\x74\\x7c\\x71\\x76\\x9a\\x82\\xaf\\x1f\\x95\\x06\\x86\\x76\\x3d\"\n\"\\x82\\x56\\x78\\x56\\x65\\x19\\x3f\\x54\\x5a\\x35\\x3b\\x1a\\x20\\xda\\x41\\xf7\\x10\\x82\\x1e\\x86\\x77\\x05\\x80\\x06\\x7f\\x06\\x6e\\x73\\x78\\x75\\x76\\x9b\"\n\"\\x82\\xae\\x1f\\xf7\\x17\\x06\\xa7\\x91\\x8c\\x94\\x97\\x1f\\x97\\x93\\x92\\x96\\x97\\x1a\\xa1\\x7d\\x93\\x66\\x1e\\x7f\\x06\\x90\\x9f\\x05\\xf7\\x3d\\x92\\xf7\"\n\"\\x23\\xf7\\x19\\xf7\\x2a\\x1a\\xce\\x61\\xcd\\x4e\\xa8\\x1e\\x6d\\x99\\x6d\\x92\\x60\\x8f\\x08\\xfb\\x57\\xfc\\x1b\\x15\\x47\\x91\\x5f\\xb9\\xcc\\x1a\\xe9\\xda\"\n\"\\xdd\\xef\\x96\\x1e\\xf7\\x01\\x16\\xd5\\x84\\xb5\\x61\\x47\\x1a\\x2d\\x38\\x37\\x26\\x83\\x1e\\x0e\\xc8\\x1d\\xf7\\x94\\xf7\\x8b\\x15\\x5e\\x91\\x76\\x9f\\xb1\"\n\"\\x1a\\x9a\\x8f\\xa8\\x93\\xac\\x1e\\xb2\\xf7\\x44\\x05\\x2e\\x06\\x57\\x6c\\x74\\x64\\x71\\x99\\x7e\\xaa\\x89\\x1f\\x7b\\x45\\x05\\x84\\x6b\\x86\\x69\\x77\\x1a\"\n\"\\x39\\xc1\\x53\\xec\\x74\\x1e\\x82\\x63\\x05\\x5f\\x89\\x6e\\x72\\x68\\x1a\\x6e\\x9e\\x7e\\xb5\\x1e\\xe3\\x06\\xbe\\xaa\\xa2\\xb0\\xa7\\x7c\\x98\\x68\\x8d\\x1f\"\n\"\\x94\\xb3\\x05\\xc8\\xbf\\x9b\\xa8\\xb2\\x1f\\xc7\\xbe\\x91\\x97\\xaa\\xf7\\x1d\\x9b\\xd4\\x18\\xb4\\x8e\\xa6\\xa3\\xad\\x1a\\xa7\\x76\\x99\\x62\\x1e\\x30\\x06\"\n\"\\x64\\xfb\\x41\\x71\\x21\\x76\\x70\\x45\\x80\\x19\\xba\\xf7\\x69\\x05\\xb9\\x8e\\xa5\\xa2\\xb1\\x1a\\xaa\\x79\\x94\\x50\\x1e\\x54\\x06\\x64\\x7a\\x88\\x84\\x7e\"\n\"\\x1f\\x7a\\x80\\x7f\\x76\\x77\\x1a\\x70\\x9a\\x7f\\xae\\x89\\x1e\\x0e\\x3b\\x0a\\xf7\\x7c\\xf8\\x36\\x77\\x1d\\x3b\\x0a\\xd3\\xf8\\x1a\\x15\\x2e\\xe5\\x05\\x94\"\n\"\\x81\\x83\\x8f\\x82\\x1b\\x74\\x72\\x74\\x76\\x81\\x8f\\x84\\x99\\x7e\\x1f\\xf7\\x17\\xfb\\x11\\xf7\\x43\\xf7\\x10\\x99\\x95\\x92\\x91\\x8d\\x8c\\x19\\x91\\x91\"\n\"\\x90\\x98\\x94\\x1a\\x9b\\x7c\\x99\\x7a\\x81\\x7e\\x86\\x83\\x81\\x1e\\x0e\\x3b\\x0a\\x7c\\xfc\\x46\\x23\\x1d\\x99\\x0a\\x6d\\x1d\\x5f\\xf7\\xc8\\x77\\x1d\\xf7\"\n\"\\xe7\\x7f\\x15\\xf7\\x21\\x96\\xef\\xe0\\xf7\\x02\\x1a\\xba\\x6f\\xb5\\x5d\\x9f\\x1e\\x71\\x97\\x6c\\x93\\x55\\x95\\x3d\\x9a\\x83\\xae\\x1d\\xb5\\xc6\\xb0\\xcf\"\n\"\\xc7\\xb3\\x73\\x67\\x6b\\x8b\\x8b\\x92\\x82\\x1e\\x82\\x92\\x99\\x85\\x9a\\x1b\\x9c\\x9c\\x93\\x98\\x98\\x1f\\x96\\x95\\x8f\\x94\\x91\\xa5\\x9d\\xe0\\x18\\x90\"\n\"\\x9e\\x8b\\x8d\\x93\\x1a\\xa2\\x79\\x9b\\x72\\x76\\xb4\\x0a\\x2d\\xfb\\x06\\x64\\xa2\\x63\\xae\\x75\\x1f\\xa7\\x79\\xa8\\x83\\xcd\\x7f\\xcd\\x7f\\x98\\x88\\x9e\"\n\"\\x80\\x08\\x9a\\x83\\x94\\x7d\\x7d\\x1a\\x60\\x49\\x67\\x3a\\x4c\\x54\\xa6\\xaa\\x88\\x1e\\x89\\xa6\\x8b\\x8b\\x85\\x93\\x85\\x1d\\xa5\\x7b\\xb7\\x7d\\xaa\\x87\"\n\"\\x76\\x2e\\x18\\x8c\\x9c\\x95\\x8c\\x8d\\x1b\\xa6\\x9a\\x82\\x7b\\x7e\\x80\\x83\\x78\\x7a\\x74\\x92\\x95\\x7b\\x1f\\x96\\x79\\x88\\x8c\\x7f\\x1b\\x73\\xf7\\x47\"\n\"\\x1d\\xd4\\xbf\\xba\\xcd\\xb1\\x79\\xa1\\x64\\x94\\x1f\\x0e\\xb5\\x1d\\xfb\\x2f\\xf7\\xb5\\x15\\xe4\\x31\\x05\\x82\\x36\\x0a\\xa1\\x97\\x8a\\x8c\\x7a\\xf7\\x17\"\n\"\\x0a\\x78\\x87\\x1d\\x6d\\x1d\\xfb\\xb7\\xfc\\xb4\\x23\\x1d\\xf9\\x2f\\xf8\\xc8\\x15\\xfc\\x4b\\x06\\x78\\x35\\xf7\\x12\\xfb\\x51\\xfb\\x69\\xfb\\x5a\\x77\\x30\"\n\"\\x05\\xf8\\x51\\x06\\xae\\xf7\\x32\\x05\\x8d\\x92\\x8c\\x93\\x92\\x1a\\xa0\\x7c\\x98\\x73\\x6a\\x79\\x7b\\x65\\x80\\x1e\\x7b\\x52\\x05\\xfb\\x68\\x06\\xf7\\x61\"\n\"\\xf7\\x4e\\xfb\\x08\\xf7\\x44\\x05\\xf7\\x57\\x06\\x81\\x47\\x05\\x8a\\x84\\x8b\\x8b\\x80\\x1a\\x73\\x99\\x7e\\xa5\\xac\\x9e\\x9d\\xaf\\x94\\x1e\\x0e\\x97\\x0a\"\n\"\\xf8\\x41\\xf7\\xeb\\x15\\xa5\\xf7\\x0a\\x05\\xf0\\x06\\x7f\\x57\\xe6\\x0a\\x96\\x95\\x8e\\x94\\x91\\xa6\\xae\\xf7\\x30\\x18\\xfc\\xa0\\x06\\x69\\xfb\\x2f\\x05\"\n\"\\x86\\x78\\x8b\\x8a\\x83\\x1a\\x74\\x9e\\x7a\\xa4\\x9c\\x9d\\x93\\x98\\x98\\x1e\\x95\\x95\\x90\\x95\\x90\\xa5\\x97\\xc0\\x18\\xee\\x06\\x71\\xfb\\x0a\\x05\\x56\"\n\"\\x06\\x6b\\x83\\x89\\x7e\\x7a\\x1f\\x7b\\xf7\\x4e\\x1d\\x91\\x89\\xa8\\x1b\\xbf\\x06\\x6c\\xfb\\x1d\\x82\\x1d\\xf7\\x7b\\x06\\xa7\\x9b\\x8f\\x96\\x98\\x92\\x1d\"\n\"\\x4f\\x06\\xa9\\xf7\\x1d\\x05\\xbc\\x06\\xc0\\xa7\\xa1\\xb5\\xa6\\x79\\x97\\x62\\x1f\\x0e\\x57\\x0a\\xcd\\x59\\x1d\\xf7\\xf0\\x16\\xce\\x06\\xa7\\x9a\\x8f\\x96\"\n\"\\x99\\x92\\x1d\\x4e\\x06\\xdb\\xf7\\xfa\\x05\\xf0\\x06\\x78\\x37\\x05\\x88\\x7f\\x8a\\x81\\x85\\x1a\\x74\\xf7\\x2a\\x1d\\x8f\\x93\\x91\\xa7\\xb5\\xf7\\x50\\x18\"\n\"\\xfc\\xa0\\x66\\x1d\\x83\\x84\\x1a\\x74\\xcf\\x0a\\xa6\\x9e\\xe0\\x18\\xee\\x06\\x3b\\xfb\\xfa\\x82\\x1d\\xdf\\x06\\x75\\x27\\x05\\x8c\\x9c\\x94\\x8c\\x8e\\x1b\"\n\"\\xa6\\x9a\\x82\\x7b\\x7e\\x80\\x83\\x78\\x7a\\x74\\x92\\x95\\x7b\\x1f\\x96\\x79\\x88\\x8c\\x7f\\x1b\\x73\\xf7\\x47\\x1d\\xd4\\xbf\\xba\\xcd\\xb1\\x79\\xa0\\x64\"\n\"\\x95\\x1f\\x0e\\xf7\\xc6\\xf7\\xcb\\x15\\x8e\\x97\\x8c\\x98\\x05\\x9b\\x7f\\x95\\x78\\x74\\x7a\\x7d\\x74\\x86\\x1e\\x75\\x27\\x05\\x8a\\x86\\x8a\\x86\\x88\\xf7\"\n\"\\x1a\\x0a\\x8f\\x9b\\x05\\xf7\\x12\\x06\\x88\\x7d\\x05\\x8a\\x87\\x8b\\x87\\x86\\xf7\\x1a\\x0a\\xa1\\xef\\x05\\x8c\\x8e\\x8b\\x8f\\x91\\x1a\\x9b\\x7f\\x95\\x78\"\n\"\\x74\\x7b\\x7d\\x74\\x86\\x1e\\x87\\x7d\\x05\\x86\\xf7\\x9f\\x15\\x37\\x2d\\x60\\x46\\x46\\x1f\\x46\\x47\\x63\\x2d\\x30\\x1a\\xfb\\x14\\xeb\\x29\\xf7\\x13\\xf7\"\n\"\\x4e\\xf7\\x41\\xf7\\x44\\xf7\\x4f\\xf7\\x18\\x2b\\xeb\\xfb\\x16\\x1e\\x76\\x24\\x15\\xda\\xc4\\x4e\\x37\\xfb\\x0d\\xfb\\x02\\xfb\\x0b\\xfb\\x03\\x39\\x52\\xc7\"\n\"\\xe1\\xf7\\x0e\\xf7\\x02\\xf7\\x09\\xf7\\x06\\x1f\\x0e\\xf8\\xe0\\xe1\\x1d\\x48\\x5d\\x46\\xe4\\x0a\\x96\\x8e\\x96\\x9a\\xe0\\x1d\\x29\\xdc\\x44\\x93\\x1d\\xfb\"\n\"\\xa0\\xf8\\xee\\x5f\\x0a\\x23\\x0a\\x36\\xf8\\xa6\\x46\\x0a\\x6f\\x73\\x87\\x86\\x5f\\x1d\\xf7\\xa9\\xf0\\x46\\x0a\\x6f\\x73\\x87\\x86\\x5f\\x1d\\x0e\\x23\\x0a\"\n\"\\xfb\\x85\\xf8\\xb9\\x15\\x64\\x71\\x77\\x6e\\x72\\x98\\x81\\xae\\x1f\\xf7\\x89\\x06\\xb1\\xa7\\x4b\\x0a\\x95\\x0a\\x2c\\xdc\\x41\\xf2\\x98\\x96\\x8b\\x8c\\x9a\"\n\"\\x1e\\x53\\x6b\\x74\\x6a\\x5a\\x1a\\x5e\\xc6\\x0a\\x82\\x87\\x8e\\x93\\xa5\\x9d\\xa0\\xe1\\xd4\\x1f\\xe1\\xd2\\xa4\\xaf\\xa1\\xd9\\x08\\x0e\\xf7\\xfc\\xf7\\x7f\"\n\"\\x29\\x0a\\x76\\x1b\\x2f\\x34\\x1d\\x0e\\xf7\\xfc\\xf7\\x80\\x15\\xf7\\x65\\xf7\\x75\\x05\\xa0\\x94\\x8d\\x8f\\x96\\x1f\\xa2\\x95\\x9a\\xa1\\xa2\\x1a\\xa8\\x78\"\n\"\\x98\\x61\\x1e\\x2f\\x06\\x72\\x7c\\x88\\x84\\x7f\\x1f\\x79\\x80\\x7f\\x77\\x77\\x1a\\x7a\\x93\\x7f\\x9e\\x81\\x1e\\xfb\\x03\\xfb\\x0c\\x51\\xf7\\x0b\\x05\\xac\"\n\"\\x99\\x9a\\x9e\\xa5\\x1a\\xa8\\x79\\x98\\x60\\x1e\\x32\\x06\\x58\\x8c\\x6c\\x73\\x65\\x1a\\x6f\\x9c\\x7e\\xb1\\x8a\\x1e\\xf7\\x02\\xfb\\x74\\x6d\\xfb\\x19\\x05\"\n\"\\x4d\\x06\\x58\\x6c\\x40\\x1d\\xf7\\x7a\\x06\\xbf\\xaa\\xa2\\xb2\\xa8\\x78\\x98\\x60\\x1f\\x50\\x06\\x5e\\xf9\\x0d\\x15\\x7c\\x1d\\xf7\\x61\\x16\\x7c\\x1d\\x0e\"\n\"\\xc4\\xf8\\x99\\xbf\\x0a\\xf7\\xe5\\xfb\\x19\\xd0\\x0a\\x82\\x85\\x8c\\x76\\x1b\\x2f\\x06\\x6a\\x81\\x37\\x0a\\x7a\\x7b\\x1a\\x77\\x93\\x7f\\x9f\\x83\\x1e\\xfb\"\n\"\\x07\\xfb\\x0e\\x4d\\xf7\\x0d\\x05\\xab\\x97\\x9c\\xa0\\xa6\\x1a\\x9c\\x80\\x9b\\x7d\\x8f\\x1e\\x8e\\x82\\x85\\x8c\\x76\\x1b\\x32\\x06\\x6a\\x81\\x4e\\x1d\\x6e\"\n\"\\x9c\\x7e\\xb2\\x1e\\xf7\\x05\\xfb\\x74\\x6d\\xfb\\x1a\\x05\\x4d\\x25\\x0a\\xf7\\x7b\\x06\\xa7\\x9a\\x3d\\x1d\\x9c\\x52\\x1d\\x82\\x20\\x1d\\x4e\\x06\\x0e\\x23\"\n\"\\x0a\\x31\\xf9\\x14\\xe3\\x1d\\x0e\\xf9\\x0f\\xf8\\x61\\x15\\xb7\\x8c\\xa8\\xa4\\xaf\\x1a\\x97\\x86\\x96\\x82\\x93\\x1e\\x93\\x81\\x82\\x8d\\x6f\\x1b\\xfb\\x15\"\n\"\\x06\\x6a\\x82\\x3a\\x1d\\xa8\\x06\\x50\\xfb\\xa1\\x05\\x53\\x7e\\x49\\x5d\\x45\\x1b\\x4f\\x5f\\xae\\xba\\x90\\x8c\\x92\\xf7\\x27\\x0a\\x97\\x8e\\x96\\x99\\x1f\"\n\"\\x9b\\x98\\x94\\x9c\\x9d\\x1a\\x97\\x86\\x96\\x82\\x93\\x1e\\x93\\x81\\x84\\x8d\\x6e\\x1b\\xfb\\x16\\x25\\x1d\\x70\\x9b\\x7d\\xad\\x8a\\x1e\\x51\\xfb\\x98\\x05\"\n\"\\x88\\x7a\\x89\\x7b\\x7b\\x1a\\x2c\\xdc\\x45\\x93\\x1d\\xfb\\x18\\xf8\\x6b\\xcc\\x1d\\x55\\x0a\\xf8\\x16\\xf9\\x71\\x15\\xa5\\x9d\\x91\\x93\\x9d\\x1a\\x9d\\x7c\"\n\"\\x98\\x77\\x80\\x81\\x87\\x80\\x7c\\x1e\\xfb\\x2b\\x21\\x05\\x73\\x7a\\x83\\x7f\\x52\\x0a\\x99\\x91\\x95\\x99\\x1e\\x0e\\xf7\\xca\\x6a\\x0a\\xa9\\x1a\\x9d\\xc7\"\n\"\\x1d\\xf7\\x8c\\xf9\\x5e\\x15\\xe4\\x31\\x05\\x82\\x95\\x93\\x87\\x96\\x1b\\xa3\\xa2\\xa1\\xa1\\x97\\x8a\\x8c\\x79\\xf7\\x17\\x0a\\x77\\x86\\x85\\x4d\\x1d\\x95\"\n\"\\x8f\\x94\\x99\\x1e\\x0e\\x55\\x0a\\xf7\\x0f\\xf9\\x91\\xe3\\x0a\\xf7\\x64\\x16\\x65\\x64\\x66\\x66\\x70\\xa3\\x73\\xa7\\xb4\\xb0\\xae\\xb2\\xa8\\x75\\xa1\\x6c\"\n\"\\x1f\\x0e\\x55\\x0a\\xf7\\x00\\xf9\\xae\\x15\\x97\\x7e\\x87\\x8d\\x7f\\x1b\\x74\\x75\\x77\\x76\\x80\\x91\\x81\\x98\\x7f\\x1f\\xf7\\x0c\\xfb\\x00\\x05\\x82\\x95\"\n\"\\x97\\x85\\x92\\x1b\\xa3\\xa0\\x9f\\xa2\\x97\\x87\\x90\\x7c\\x9a\\x1f\\x0e\\xf8\\x86\\xf8\\x60\\x15\\x81\\x5f\\x05\\x87\\x7a\\x8a\\x84\\x86\\x1a\\x75\\x9e\\x7a\"\n\"\\xa5\\xae\\xa3\\xa2\\xb6\\x94\\x1e\\xad\\xf7\\x2a\\x05\\xfc\\x87\\x06\\x6a\\xfb\\x28\\x05\\x89\\x7f\\x89\\x80\\x86\\x1a\\x74\\x9e\\x7a\\xa5\\xad\\xa3\\xa2\\xb6\"\n\"\\x94\\x1e\\x95\\xb9\\x05\\xf7\\x1c\\xfb\\x76\\x15\\x6b\\x8a\\x97\\x7d\\xa5\\x1b\\xae\\x9e\\xa0\\xbc\\x96\\x1f\\x95\\xb9\\x05\\x8e\\x97\\x8d\\x98\\x95\\x1a\\xa3\"\n\"\\x7d\\x98\\x73\\x70\\x79\\x7d\\x6b\\x7e\\x1e\\x33\\x8d\\x06\\x8d\\x07\\x8e\\x07\\xa4\\x7e\\x99\\x73\\x69\\x76\\x74\\x5c\\x81\\x1e\\x81\\x5d\\x05\\x86\\x77\\x8a\"\n\"\\x83\\x83\\x1a\\x75\\x99\\x7d\\xa4\\xa6\\x9d\\x99\\xab\\x98\\x1e\\xfb\\x11\\xfb\\x16\\x15\\x94\\xb7\\x05\\x8e\\x99\\x8d\\x95\\x90\\x1a\\xa1\\x78\\x9c\\x71\\x68\"\n\"\\x74\\x74\\x60\\x81\\x1e\\x6a\\xfb\\x2a\\x05\\xf8\\x87\\x06\\xab\\xf7\\x28\\x05\\x8f\\x9a\\x8c\\x94\\x90\\x1a\\xa1\\x78\\x9c\\x71\\x68\\x74\\x74\\x60\\x81\\x1e\"\n\"\\x81\\x5d\\x05\\x0e\\xf7\\xfc\\xf7\\x7f\\x29\\x0a\\x76\\x1b\\x2f\\x34\\x1d\\xde\\xf8\\xf7\\x31\\x0a\\xf8\\x2a\\xf7\\x7f\\x29\\x0a\\x77\\x1b\\x2e\\x34\\x1d\\x51\"\n\"\\xe9\\x1d\\xf7\\x7c\\x71\\x0a\\xb0\\xa1\\xa0\\xb8\\x95\\x1e\\x99\\xcb\\x05\\x43\\x0a\\xf7\\x26\\x30\\x0a\\xf7\\x7c\\x71\\x0a\\xb0\\xa1\\xa0\\xb8\\x95\\x1e\\x99\"\n\"\\xcb\\x05\\x43\\x0a\\x94\\x80\\x1d\\xf7\\x4e\\xf2\\x15\\xf8\\x0f\\xf7\\xff\\xa1\\xed\\x05\\xfc\\x34\\x06\\x66\\xfb\\x39\\x05\\x89\\x81\\x89\\x7f\\x85\\x1a\\x75\"\n\"\\x9e\\x79\\xa3\\x9d\\x9d\\x93\\x98\\x98\\x1e\\x95\\x95\\x8f\\x94\\x91\\xa5\\x99\\xcb\\x18\\x43\\x0a\\x0e\\x2d\\x1d\\xfb\\x0a\\xf8\\x7b\\x2b\\x0a\\xb1\\x1d\\xad\"\n\"\\xf7\\xea\\x2f\\x1d\\xaa\\x0a\\x93\\x0a\\xf8\\xf3\\xf8\\xc8\\x15\\xfc\\x7a\\x06\\x66\\x6b\\x6f\\x69\\x70\\xa0\\x7c\\xb4\\x1f\\xaf\\x53\\x1d\\x80\\x34\\x0a\\xf7\"\n\"\\xb4\\x06\\xf7\\x22\\xeb\\xd5\\xf7\\x00\\xc1\\x77\\xb1\\x61\\xa4\\x1f\\xa2\\x63\\x56\\x97\\x50\\x1b\\xfb\\x0e\\x06\\xa9\\xf7\\x12\\x05\\xf7\\x6e\\x06\\x7e\\x5a\"\n\"\\x05\\x89\\x82\\x89\\x7f\\x83\\x1a\\x74\\x9e\\x7a\\xa5\\xad\\xa1\\xa1\\xb7\\x96\\x1e\\xfc\\x1c\\xfb\\xc4\\x15\\xa7\\xf7\\x12\\x05\\xf7\\x12\\x06\\xdb\\xb4\\x76\"\n\"\\x60\\x62\\x66\\x76\\x40\\x1f\\x0e\\xbd\\x1d\\xf7\\xcf\\xc2\\x1d\\xf8\\x34\\x16\\x86\\x67\\x05\\x89\\x7a\\x8a\\x7e\\x86\\x1a\\x6d\\xa1\\x76\\xaa\\xab\\x96\\x99\"\n\"\\xc3\\x98\\x1e\\x99\\xc9\\x05\\x91\\xa4\\x8d\\x96\\x93\\x1a\\xab\\x75\\x9c\\x60\\x8c\\x1e\\xdb\\xf7\\xf8\\x05\\xc3\\x8d\\x77\\x0a\\xfb\\xd8\\x27\\x0a\\x66\\xa2\"\n\"\\x7b\\xc3\\x1f\\x63\\xfb\\x46\\x70\\xfb\\x0d\\x5d\\x56\\x3a\\x87\\x19\\x73\\x06\\x6b\\xfb\\x1b\\x05\\x87\\x77\\x88\\x7b\\x84\\x1a\\x70\\xa2\\x76\\xa9\\xa8\\x99\"\n\"\\x9a\\xbe\\x99\\x1e\\x9b\\xc3\\x05\\xf7\\x84\\xf8\\x60\\x15\\xf7\\x10\\x53\\x1d\\xfb\\x30\\x06\\xa5\\xa6\\xa6\\xcd\\x9d\\xd7\\x08\\x0e\\xb4\\x1d\\xf7\\x64\\xf7\"\n\"\\x7b\\x15\\xd7\\x06\\x88\\x7d\\x8a\\x81\\x85\\x1a\\x74\\x9e\\x7a\\xa4\\xaf\\xa1\\xa0\\xb9\\x95\\x1e\\xa3\\xf7\\x00\\xf7\\x23\\x0a\\x73\\x75\\x76\\x80\\x7b\\x7f\"\n\"\\x1e\\x86\\x83\\x88\\x81\\x85\\x73\\x08\\x3f\\x06\\xa7\\xf7\\x11\\x05\\xf7\\x6e\\x06\\x82\\x60\\x05\\x87\\x7e\\x8a\\x81\\x85\\x1a\\x75\\x9e\\x7a\\xa5\\xae\\xa2\"\n\"\\xa1\\xb7\\x94\\x1e\\xad\\xf7\\x29\\x05\\xfc\\x53\\x06\\x57\\x6d\\x40\\x1d\\x94\\x53\\x1d\\x80\\xea\\x0a\\xf8\\x67\\x06\\xac\\xf7\\x29\\x05\\x8d\\x97\\x8d\\x96\"\n\"\\x91\\x1a\\xa1\\x77\\x9c\\x72\\x69\\x74\\x74\\x60\\x81\\x1e\\x80\\x5c\\x05\\xfb\\x84\\x06\\xf7\\x1a\\xef\\x0a\\x79\\x9c\\x70\\x1f\\xf7\\x61\\x16\\xf7\\x0d\\x0a\"\n\"\\x79\\x9c\\x70\\x1f\\x0e\\xf7\\x6d\\xf3\\x15\\x61\\x8a\\x75\\x79\\x69\\x1a\\x66\\xa2\\x7d\\xca\\x1e\\xbb\\xa7\\x1d\\x7c\\x9a\\x69\\x93\\x1f\\xad\\xf7\\x2d\\x93\"\n\"\\x80\\x92\\x7d\\x8e\\x7d\\x19\\xad\\xfb\\x25\\x8c\\x84\\x8b\\x8b\\x8e\\x80\\x19\\x87\\x8c\\x88\\x8c\\x89\\x1e\\x69\\x93\\x9e\\x80\\xbc\\x1b\\xb7\\xa3\\x9e\\xad\"\n\"\\xa7\\x7a\\x9b\\x69\\x91\\x1f\\x6b\\xf7\\x1e\\x85\\xa3\\x80\\x9f\\x78\\x9c\\x19\\x99\\x92\\xbf\\xca\\xb1\\xc2\\x08\\x71\\x91\\x99\\x80\\xa6\\x1b\\xa4\\x9a\\x9a\"\n\"\\xa9\\x92\\x1f\\x95\\xb5\\x05\\x8e\\x98\\x8d\\x9c\\x96\\x1a\\xa8\\x77\\x9c\\x68\\x51\\x69\\x6c\\xfb\\x3d\\xfb\\x13\\x1e\\xa3\\xeb\\x05\\x8f\\x06\\xae\\xa2\\xa1\"\n\"\\xab\\xaf\\x73\\x99\\x4c\\x1f\\x5f\\x06\\x4f\\x74\\x7d\\x66\\x71\\x99\\x7b\\xa9\\x82\\x1f\\x78\\x29\\x64\\xf7\\x08\\x82\\xa2\\xf7\\x2b\\x1d\\x87\\x7b\\x88\\x7b\"\n\"\\x82\\x1a\\x72\\xa1\\x77\\xa7\\xa3\\x97\\x96\\xaa\\x98\\x1e\\x94\\x5c\\x9a\\x66\\xa3\\x6a\\x6e\\x7d\\x75\\x78\\x79\\x71\\x21\\xfb\\x2c\\x18\\x60\\x89\\x76\\x7b\"\n\"\\x69\\x1a\\x68\\xa2\\x7a\\xbc\\xb4\\x92\\x90\\xb9\\xa9\\x1e\\xef\\xf7\\x2b\\x97\\x9d\\x94\\x95\\xa5\\xa3\\x19\\x0e\\xf7\\xad\\xf7\\xeb\\x15\\x59\\x73\\x7b\\x68\"\n\"\\x77\\x95\\x7a\\x9d\\x82\\x1f\\x86\\x95\\x96\\x89\\xb1\\x1b\\xe7\\xb0\\x7c\\x67\\x74\\x7d\\x72\\x73\\x79\\x1f\\x76\\x6f\\x63\\x81\\x54\\x1b\\x45\\x57\\x9a\\xb1\"\n\"\\x51\\x1f\\xa0\\x6c\\x7b\\x92\\x7d\\x1b\\x6f\\x70\\x70\\x70\\x70\\xa3\\x71\\xbe\\x6d\\x1f\\x68\\xc7\\xc9\\x7c\\xdc\\x1b\\xf1\\xce\\x9e\\xb7\\xbf\\x1f\\xb8\\xb2\"\n\"\\xa5\\xbe\\xbf\\x1a\\xb7\\x7b\\xad\\x6a\\xa6\\x1e\\xc4\\xb1\\xa5\\xb6\\xc4\\x1a\\xe2\\x41\\xc5\\xfb\\x03\\x53\\x62\\x80\\x73\\x67\\x1e\\x8c\\x95\\x8b\\x8d\\x8f\"\n\"\\x1a\\xa6\\x75\\xa0\\x6c\\x6e\\x7b\\x7a\\x63\\x85\\x1e\\x82\\x57\\x7f\\x65\\x75\\x5f\\x08\\x7d\\x6e\\x86\\x7e\\xf7\\x0a\\x1d\\x0e\\x71\\x1d\\x0e\\x71\\x1d\\xec\"\n\"\\xf8\\xc4\\x15\\x72\\x79\\x77\\x6f\\x52\\xc5\\x60\\xd6\\xbd\\xbe\\x9c\\xa9\\xaf\\xf7\\x44\\x1d\\x82\\x1e\\x68\\x7a\\x64\\x76\\x5b\\x1b\\x5f\\x6b\\x9f\\xa6\\x8a\"\n\"\\x1f\\xa6\\x8a\\x84\\x94\\x78\\x1b\\x0e\\xb8\\x1d\\x0e\\xf8\\xbf\\xf8\\x60\\x15\\xc3\\x8d\\xa0\\x99\\xb0\\x1a\\xb0\\x74\\x99\\x4b\\x1e\\xfb\\xd7\\x27\\x0a\\x68\"\n\"\\xa4\\x79\\xbb\\x1f\\x90\\x06\\x53\\xfb\\x90\\x79\\x40\\x72\\x65\\x67\\x86\\x19\\x90\\x9f\\x8d\\x94\\x93\\x1a\\xa9\\x77\\x9b\\x67\\x69\\x7d\\x7b\\x58\\x7f\\x1e\"\n\"\\x7d\\x51\\x05\\x89\\x81\\x8a\\x85\\x87\\x1a\\x75\\xc1\\x76\\xc5\\xf0\\xcf\\xd4\\xf7\\x21\\xab\\x1e\\xc5\\xf7\\x99\\x05\\xf7\\x0f\\x06\\x3c\\xfb\\xf9\\x05\\x54\"\n\"\\x76\\x7c\\x67\\x64\\xa2\\x7e\\xcb\\x1f\\xd8\\x9c\\x1d\\x9c\\x60\\x8c\\x1f\\x0e\\x8f\\x0a\\xf8\\x2d\\xf7\\x7a\\x44\\x1d\\x7b\\x1a\\x71\\x97\\x7e\\xa8\\x45\\x0a\"\n\"\\x0e\\xf8\\x11\\x5c\\x0a\\x0e\\xc8\\x1d\\x99\\x0a\\x6f\\x1d\\x0e\\x97\\x0a\\xc5\\x1d\\x0e\\xf8\\x30\\xf8\\x69\\x15\\xa2\\x06\\xba\\xa7\\xa1\\xaf\\xa6\\x7b\\x95\"\n\"\\x60\\x1f\\xfb\\x25\\x06\\x59\\x6f\\x78\\x67\\x70\\x9d\\x7e\\xb0\\x1f\\x9f\\x06\\x85\\x70\\x05\\x68\\x06\\x3f\\x53\\x79\\x68\\x64\\x1f\\x67\\x6a\\x76\\x5b\\x58\"\n\"\\x1a\\x35\\xc4\\x5c\\xf2\\x1e\\xab\\x06\\x85\\x6e\\x05\\x74\\x06\\x5e\\x6d\\x75\\x69\\x71\\x9d\\x7e\\xb1\\x1f\\xf7\\x2d\\x06\\xb8\\xaa\\xa2\\xac\\xa5\\x79\\x98\"\n\"\\x67\\x1f\\x73\\x06\\x91\\xa8\\x05\\xa2\\x06\\xdb\\xc6\\x9e\\xb2\\xb3\\x1f\\xb1\\xaf\\xa0\\xbe\\xc0\\x1a\\xdc\\x57\\xb2\\x22\\x1e\\x6a\\x06\\xfb\\x15\\x28\\x15\"\n\"\\x6e\\xfb\\x0d\\x05\\x79\\x06\\x50\\x6e\\x9d\\xaf\\xb5\\xb3\\xa4\\xcf\\x1f\\xf7\\x1b\\x16\\xa2\\x06\\xc1\\xa5\\x7d\\x6e\\x75\\x7c\\x72\\x74\\x7d\\x1f\\x7f\\x79\"\n\"\\x72\\x86\\x5f\\x1b\\x84\\x06\\x0e\\x8c\\x0a\\xf8\\x40\\x16\\x82\\x5a\\x05\\x88\\x80\\x8a\\x7e\\x83\\x1a\\x71\\x9c\\x7c\\xa8\\xad\\xa0\\xa0\\xb9\\x95\\x1e\\xb1\"\n\"\\xf7\\x33\\x05\\x29\\x06\\xda\\xf7\\xf9\\xa0\\x0a\\x0e\\xf7\\xfc\\xf3\\x15\\x51\\x06\\x4c\\x74\\x7d\\x65\\x65\\xa1\\x7d\\xcb\\x1f\\xf7\\x28\\x9c\\x1d\\x9d\\x5e\"\n\"\\x8c\\x1f\\xda\\xf7\\xf9\\x05\\xc5\\x8c\\x7d\\x1d\\x05\\x60\\x44\\x5d\\x7a\\x61\\x1b\\x70\\x7e\\x94\\x9d\\x96\\x8e\\xa0\\x8e\\x98\\x1f\\xa5\\xf7\\x09\\x05\\xcc\"\n\"\\xa0\\x98\\xb1\\xb2\\x74\\x98\\x4b\\x1f\\xc5\\x0a\\x74\\x88\\x74\\x7c\\x1a\\x44\\xc5\\x59\\xdd\\xbb\\xb7\\x96\\xa4\\xbc\\x1e\\x0e\\xf8\\x87\\xf3\\x15\\xd8\\xf7\"\n\"\\xf8\\x05\\xa2\\x06\\xb1\\xaa\\xa8\\xac\\xa7\\x76\\x99\\x63\\x1f\\xfb\\x0a\\x06\\x28\\xfc\\x60\\x05\\x40\\x06\\xda\\xf7\\xf9\\xf7\\x12\\x1d\\x3c\\xfb\\xf9\\x05\"\n\"\\x3f\\x06\\xee\\xf8\\x60\\x05\\xfb\\x06\\x06\\x58\\x6c\\x74\\x65\\x6c\\x99\\x81\\xbb\\x8a\\x1f\\x42\\xfb\\xf9\\x2d\\x0a\\xf8\\x78\\x7d\\x0a\\x0e\\xf7\\x63\\xf2\"\n\"\\x15\\x3f\\x06\\xee\\xf8\\x61\\x05\\xfb\\x06\\x06\\x58\\x6c\\x74\\x65\\x6c\\x99\\x81\\xbb\\x89\\x1f\\x42\\xfb\\xf8\\x2d\\x0a\\xf8\\x5a\\x06\\x7e\\x56\\x05\\x89\"\n\"\\x81\\x8a\\x81\\x82\\x1a\\x71\\x9c\\x7d\\xaa\\xb4\\xa2\\xa7\\xc6\\x93\\x1e\\x9e\\xf7\\x1e\\x05\\x29\\x06\\xd9\\xf7\\xf9\\x05\\xa2\\x06\\xb0\\xab\\xa8\\xac\\xa6\"\n\"\\x76\\x9a\\x63\\x1f\\xfb\\x09\\x06\\x27\\xfc\\x61\\x05\\x40\\x06\\xda\\xf7\\xfa\\xf7\\x12\\x1d\\x0e\\xf7\\x15\\xf8\\x60\\x15\\xf7\\x11\\x06\\x3c\\xfb\\xf8\\x05\"\n\"\\x80\\x06\\x59\\x6b\\x74\\x66\\x6d\\x9f\\x7d\\xb4\\x1f\\xf7\\x74\\x06\\xcc\\xcb\\x9d\\xa9\\xb5\\x1f\\xb3\\xa8\\xa5\\xc2\\xc0\\x1a\\xee\\x43\\xbd\\xfb\\x22\\x1e\"\n\"\\x52\\x06\\xa8\\xf7\\x12\\x05\\xbd\\x06\\xb1\\xaa\\xa7\\xad\\xa7\\x76\\x99\\x62\\x1f\\xfc\\x0b\\x06\\x61\\xfb\\x4e\\x05\\x88\\x7d\\x8a\\x82\\x84\\x70\\x0a\\xf7\"\n\"\\x42\\xfb\\xa3\\x15\\xa7\\xf7\\x12\\x05\\xc8\\x06\\xe2\\xad\\x7a\\x5f\\x60\\x66\\x75\\x40\\x1f\\x0e\\xf7\\x65\\xf8\\x60\\x15\\xbb\\x06\\xaf\\xab\\xa8\\xac\\xa7\"\n\"\\x76\\x99\\x63\\x1f\\xfb\\x2b\\xf7\\x13\\x0a\\x3b\\xfb\\xf8\\x05\\x5d\\x89\\x73\\x78\\x66\\x1a\\x6c\\x9d\\x7c\\xb1\\x1e\\xf7\\x23\\x06\\xf7\\x1b\\xe3\\xd4\\xf7\"\n\"\\x04\\xea\\x47\\xc1\\xfb\\x0c\\x1f\\x85\\x06\\x5a\\xfb\\x7a\\x15\\xa7\\xf7\\x13\\x05\\x95\\x06\\xce\\xa6\\x7a\\x60\\x5e\\x6b\\x75\\x4b\\x1f\\xf7\\x81\\x8a\\x15\"\n\"\\x64\\x88\\x74\\x73\\x68\\x1a\\x70\\xa0\\x7d\\xb2\\x1e\\xe4\\x06\\xbf\\xaa\\xa2\\xb1\\xaa\\x7c\\x96\\x5c\\x8c\\x1f\\xda\\xf7\\xf9\\x05\\xb0\\x91\\x9e\\x9f\\xab\"\n\"\\x1a\\xaa\\x78\\x99\\x61\\x1e\\x30\\x06\\x56\\x6e\\x75\\x65\\x6d\\x9f\\x7d\\xb4\\x1f\\x94\\x06\\x0e\\xf7\\xa0\\xf8\\x60\\x15\\xbc\\x06\\xb0\\xab\\xa8\\xac\\xa7\"\n\"\\x76\\x99\\x63\\x1f\\xfb\\x2d\\x34\\x0a\\x94\\x53\\x1d\\x80\\x34\\x0a\\xf7\\xaa\\x06\\xf7\\x2d\\xe8\\xd2\\xf7\\x09\\xaf\\x7f\\xab\\x75\\xa3\\x1f\\xac\\x6c\\x43\"\n\"\\xa0\\x36\\x1b\\xfb\\x04\\x06\\x5a\\xfb\\x7a\\x15\\xa7\\xf7\\x12\\x05\\xf7\\x07\\x06\\xeb\\xad\\x7b\\x5f\\x5c\\x68\\x78\\x36\\x1f\\x0e\\xf7\\xbc\\xf7\\xdc\\x15\"\n\"\\x63\\x75\\x79\\x69\\x69\\xa0\\x79\\xb4\\x1f\\xf7\\x1c\\x06\\x2f\\x60\\x50\\x61\\x32\\x1b\\x5a\\x5e\\x9b\\xad\\x59\\x1f\\x9b\\x73\\x7d\\x91\\x7c\\x1b\\x71\\x71\"\n\"\\x72\\x72\\x70\\xa5\\x6f\\xbc\\x6f\\x1f\\x6d\\xc2\\xbe\\x7e\\xca\\x1b\\xf0\\xd9\\xad\\xd4\\xca\\x1f\\xc5\\xce\\xaa\\xe1\\xe7\\x1a\\xf7\\x25\\x37\\xea\\xfb\\x16\"\n\"\\x5c\\x69\\x82\\x73\\x63\\x1e\\x8c\\x90\\x8b\\x8d\\x8e\\x1a\\xab\\x78\\x9d\\x69\\x6a\\x7d\\x7a\\x5c\\x85\\x1e\\x87\\x62\\x81\\x68\\x79\\x63\\x08\\x7d\\x6d\\x87\"\n\"\\x7e\\x80\\x1a\\x75\\xa2\\x76\\xa4\\xa1\\x9b\\x98\\xaa\\x9b\\x1e\\xd2\\xb2\\xba\\xaa\\xd1\\x1b\\xb2\\xac\\x7e\\x74\\x9f\\x1f\\x9d\\x77\\x92\\x6d\\x8e\\x4f\\x08\"\n\"\\x0e\\xf7\\x68\\xf7\\x7a\\x15\\x8a\\x7a\\x8b\\x88\\x86\\x1a\\xfb\\x1b\\xce\\x37\\xf7\\x00\\xd9\\xc7\\xb1\\xde\\xbe\\x1e\\xba\\xd6\\xa3\\xe1\\xe4\\x1a\\xf7\\x21\"\n\"\\x4c\\xdb\\xfb\\x03\\x3a\\x50\\x65\\x36\\x56\\x1e\\x71\\x62\\x7b\\x64\\x82\\x62\\x08\\x5c\\x06\\xa7\\xf7\\x12\\x05\\xc1\\x8e\\xa7\\x9f\\xb0\\x1a\\xa9\\x77\\x99\"\n\"\\x62\\x1e\\x32\\x06\\x59\\x6b\\x73\\x67\\x71\\x98\\x7e\\xa8\\x87\\x1f\\x3b\\xfb\\xfa\\x05\\x5f\\x8a\\x6e\\x72\\x69\\x1a\\x6e\\xa0\\x7d\\xb3\\x1e\\xf7\\x01\\x06\"\n\"\\xbd\\x7e\\x0a\\xa7\\xf7\\x13\\x05\\xf7\\xc2\\xf7\\x89\\x15\\xbf\\xa5\\x60\\x34\\xfb\\x1e\\x4c\\xfb\\x09\\x40\\x55\\x70\\xb6\\xe0\\xf7\\x28\\xc7\\xf7\\x01\\xdc\"\n\"\\x1f\\x0e\\xf8\\xa6\\xf8\\x60\\x15\\xc3\\x8d\\xa0\\x99\\xaf\\x1a\\xb1\\x74\\x99\\x4b\\x1e\\xfb\\x31\\x06\\x31\\x4b\\x7b\\x69\\x64\\x1f\\x67\\x6d\\x76\\x5d\\x5d\"\n\"\\x1a\\x4b\\xaa\\x64\\xd0\\x73\\x1e\\x7a\\x7d\\x74\\x73\\x7a\\x74\\x87\\x86\\x18\\x87\\x85\\x87\\x85\\x86\\x85\\x7a\\x75\\x7b\\x76\\x7a\\x76\\x81\\x7e\\x18\\x6e\"\n\"\\x06\\x61\\x74\\x79\\x69\\x77\\x95\\x7b\\x9b\\x83\\x1f\\x85\\x97\\x9e\\x89\\xb6\\x1b\\xb8\\x8f\\x8d\\xca\\xba\\x1f\\xf7\\x15\\xf7\\x41\\x8f\\x8f\\xae\\x8d\\x08\"\n\"\\xa4\\x06\\x69\\xfb\\x20\\x05\\x79\\x06\\x62\\x73\\x77\\x6a\\x66\\xa2\\x7d\\xcb\\x1f\\xde\\x06\\xca\\xa3\\x99\\xb0\\xad\\x76\\x9c\\x5f\\x8c\\x1f\\x70\\xf7\\xf9\"\n\"\\x15\\x72\\xfb\\x04\\x05\\x3d\\x06\\x3e\\x76\\x95\\xae\\xb7\\xac\\xa2\\xcc\\x1f\\x0e\\xf8\\xb5\\xf8\\xc8\\x15\\xfc\\x04\\x06\\x6e\\x7d\\x87\\x80\\x7d\\xe0\\x0a\"\n\"\\xbe\\x06\\x3c\\xfb\\xfa\\x05\\x55\\x06\\x6c\\x80\\x88\\x7f\\x7c\\xe0\\x0a\\xf7\\x69\\x5e\\x1d\\x58\\x06\\xda\\xf7\\xfa\\x05\\xf7\\xcf\\x06\\xb5\\xf7\\x4e\\x05\"\n\"\\x8e\\x97\\x8c\\x95\\x92\\x1a\\xa2\\x79\\x9c\\x71\\x7a\\x7a\\x84\\x7d\\x7d\\x1e\\x81\\x81\\x87\\x82\\x85\\x70\\x08\\x0e\\xf7\\x9d\\xf7\\x51\\x15\\xb2\\xd6\\xb5\"\n\"\\x9a\\xad\\x1b\\xac\\x9a\\x79\\x64\\x6b\\x80\\x69\\x7d\\x7d\\x1f\\x84\\x84\\x7f\\x87\\x74\\x87\\x08\\x5d\\x82\\x78\\x7b\\x6d\\x1a\\x6a\\xa3\\x79\\xb5\\xed\\xd8\"\n\"\\xe4\\xf7\\x05\\xf3\\x59\\xc3\\x2e\\x63\\x63\\x80\\x6f\\x4f\\x1e\\xad\\xf7\\x2e\\x05\\xc0\\x06\\x86\\x76\\x8a\\x82\\x82\\x1a\\x6a\\x9e\\x79\\xae\\xae\\x9a\\x9f\"\n\"\\xc2\\x92\\x1e\\x8f\\xa7\\x05\\x90\\xab\\x8b\\x8b\\x90\\x1a\\xb2\\x76\\x98\\x49\\x1e\\xfb\\x8e\\x06\\x45\\x8a\\x86\\x87\\x78\\x4e\\x81\\x68\\x18\\x83\\x6e\\x89\"\n\"\\x81\\x84\\x1a\\x72\\xa2\\x76\\xa8\\xa8\\x97\\x98\\xbc\\x9b\\x1e\\x94\\xa8\\x05\\xc3\\x06\\x3c\\xfb\\xfb\\x05\\x4d\\x8c\\x74\\x7d\\x65\\x1a\\x64\\xa1\\x7e\\xcc\"\n\"\\x1e\\xe2\\x06\\xca\\xa2\\x99\\xb1\\xad\\x77\\x9b\\x5e\\x8c\\x1f\\x0e\\xf7\\x39\\xf8\\x60\\x15\\x3c\\xfb\\xf8\\x44\\x0a\\xdb\\xf7\\xf8\\x05\\xf7\\x8b\\x06\\x79\"\n\"\\x39\\x05\\x88\\x80\\x8a\\x80\\x84\\x1a\\x74\\x9e\\x7a\\xa5\\xad\\xa2\\xa2\\xb6\\x95\\x1e\\xb5\\xf7\\x51\\x05\\xfc\\x98\\xf7\\x6c\\x1d\\xf7\\xd4\\xf7\\x8f\\x15\"\n\"\\x9d\\x97\\x94\\x97\\x22\\x0a\\x7b\\x82\\x81\\x87\\x82\\x7d\\x8d\\x1d\\xf7\\x3e\\xf7\\xe3\\x15\\xe2\\xb0\\xd5\\xbf\\xe4\\x1b\\xc8\\xc2\\x6d\\x69\\x1f\\x77\\x07\"\n\"\\x71\\x9a\\x7d\\xa6\\xae\\xa3\\xa2\\xb6\\x94\\x1e\\x9d\\xdb\\x05\\x8d\\x94\\x8d\\x98\\x92\\x1a\\xa1\\x78\\x9c\\x73\\x78\\x7d\\x85\\x7a\\x7a\\x1e\\xa4\\x64\\x5f\"\n\"\\x97\\x54\\x1b\\xfb\\x31\\xfb\\x22\\xfb\\x08\\xfb\\x31\\x67\\x1f\\x7d\\x4c\\x05\\x87\\x7a\\x89\\x7a\\x7b\\x1a\\x51\\xa1\\x58\\xb5\\x65\\x1e\\x63\\xb7\\xc6\\x78\"\n\"\\xdd\\x1b\\xf7\\x16\\xf7\\x19\\xce\\xcc\\xa2\\x77\\x9e\\x73\\x7c\\x7b\\x84\\x7a\\x75\\x1f\\x68\\x5f\\x68\\x80\\x4c\\x1b\\x27\\x4d\\xb7\\xd1\\x95\\x8b\\x92\\x8c\"\n\"\\x95\\x1f\\xf7\\x73\\x06\\xbc\\xa5\\x9e\\xad\\xaa\\x73\\x9f\\x66\\x1f\\x0e\\xb5\\x1d\\x0e\\x58\\x0a\\xd9\\x1d\\x78\\xef\\x0a\\x78\\x9c\\x71\\x1f\\xf7\\x61\\x16\"\n\"\\x69\\x6c\\x6e\\x6b\\x72\\x9d\\x7a\\xa6\\xad\\xaa\\xa8\\xac\\xa3\\x79\\x9c\\x70\\x1f\\x0e\\xf8\\xb9\\x94\\x1d\\x9b\\x97\\x94\\x9d\\x9b\\x1a\\x9c\\x80\\x9c\\x7d\"\n\"\\x8f\\x1e\\x8e\\x82\\x84\\x8c\\x77\\x62\\x0a\\x82\\x60\\x86\\xa3\\x1d\\x67\\x1b\\x6b\\x6f\\x93\\x9f\\x5e\\xe4\\x1d\\xf7\\xc9\\xf8\\x60\\x15\\xb6\\x06\\x3c\\xfb\"\n\"\\xf9\\x05\\x65\\x87\\x79\\x7a\\x6d\\x1a\\x69\\xa5\\x79\\xbc\\x1e\\xb6\\x06\\xdc\\xc7\\x9d\\xb0\\xb5\\x1f\\xb3\\xaf\\xa1\\xbc\\xc3\\x1a\\xe4\\x5e\\xb7\\x25\\x97\"\n\"\\x1e\\xa7\\xf7\\x0b\\x05\\xcb\\x8c\\xa0\\x98\\xb1\\x1a\\xb1\\x74\\x99\\x4b\\x1e\\xfb\\x8f\\x06\\x4a\\x75\\x7e\\x63\\x69\\x9f\\x7a\\xb1\\x1f\\xa0\\x06\\x52\\xfb\"\n\"\\x90\\x7b\\x41\\x6b\\x5c\\x6a\\x8d\\x19\\x8f\\xa5\\x8c\\x92\\x92\\x1a\\xa7\\x77\\x9b\\x67\\x68\\x7d\\x7c\\x5b\\x82\\x1e\\x80\\x55\\x05\\x89\\x80\\x8a\\x85\\x86\"\n\"\\x1a\\x7b\\x92\\x80\\x9c\\x84\\x1e\\x82\\x9d\\xb0\\x85\\xac\\x1b\\xf3\\xca\\xce\\xf7\\x27\\xac\\x1f\\xf7\\x34\\xb2\\x15\\xb6\\x88\\x9d\\x7c\\x6a\\x1a\\x5a\\x6d\"\n\"\\x70\\x4e\\x84\\x1e\\x0e\\xf7\\xbc\\xf7\\x7a\\x15\\x6e\\xfb\\x13\\x05\\x64\\x84\\x78\\x77\\x6a\\x1a\\x6b\\x9a\\x80\\xb6\\x1e\\xf7\\x01\\x06\\xd7\\xd1\\xa2\\xb0\"\n\"\\xb1\\x1f\\xab\\xaa\\x9e\\xbe\\xc0\\x1a\\xbc\\x79\\xad\\x66\\xa3\\x1e\\x9f\\x6a\\x62\\x97\\x64\\x1b\\x79\\x06\\xa9\\xf7\\x12\\x05\\xbb\\x7d\\x0a\\xfb\\x16\\x06\"\n\"\\x5a\\x6b\\x73\\x67\\x6f\\x9a\\x7e\\xac\\x88\\x1f\\x6f\\xfb\\x12\\x05\\xfb\\x0d\\x2b\\x1d\\xae\\x91\\xa3\\xa4\\xa9\\x1a\\xa6\\x78\\x9a\\x67\\x1e\\x44\\x06\\x58\"\n\"\\x6b\\x72\\x64\\x75\\x99\\x7e\\xa7\\x87\\x1f\\x3b\\xfb\\xfa\\x05\\x8a\\x89\\x8b\\x8b\\x88\\x1b\\x62\\x85\\x76\\x77\\x6a\\x1a\\x6e\\x9f\\x7d\\xb4\\x1e\\xe1\\x06\"\n\"\\xba\\xab\\xa4\\xb1\\xa4\\x7b\\x98\\x69\\x8d\\x1f\\xa7\\xf7\\x13\\x05\\xf7\\x63\\xfb\\x13\\x15\\xa7\\xf7\\x13\\x05\\x95\\x06\\xc3\\xa6\\x77\\x63\\x5f\\x6c\\x74\"\n\"\\x4c\\x1f\\x0e\\xf7\\xd9\\xf8\\x60\\x15\\xc2\\x06\\x89\\x7e\\x05\\x89\\x7e\\x89\\x7d\\x85\\x1a\\x73\\xa3\\x77\\xa7\\xa9\\x9b\\x9c\\xb3\\x92\\x1e\\x8c\\x92\\x8c\"\n\"\\x93\\x91\\xaa\\x05\\x8e\\x9a\\x8d\\x98\\x96\\x1a\\xb2\\x76\\x98\\x4a\\x1e\\xfb\\x90\\x06\\x64\\x72\\x86\\x84\\x86\\x1f\\x85\\x87\\x80\\x73\\x83\\x71\\x7c\\x5b\"\n\"\\x18\\x84\\x73\\x88\\x7f\\x85\\x1a\\x74\\x9f\\x7a\\xa5\\xad\\x9a\\x9b\\xbf\\x9e\\x1e\\x94\\xa3\\x05\\xc3\\x06\\x3d\\xfb\\xf9\\x05\\x4c\\x8c\\x74\\x7d\\x64\\x1a\"\n\"\\x66\\xa2\\x7d\\xcb\\x1e\\xd7\\x06\\xcb\\xa2\\x99\\xb0\\xaa\\x7a\\x9b\\x65\\x90\\x1f\\xa0\\xe4\\x05\\xb5\\xc5\\xad\\x9b\\xaa\\x1b\\xa2\\x98\\x7f\\x76\\x80\\x89\"\n\"\\x81\\x87\\x79\\x1f\\x7a\\x40\\x05\\x57\\x8a\\x76\\x7c\\x68\\x1a\\x65\\xa2\\x7d\\xcb\\x1e\\xc6\\xa7\\x1d\\x7a\\x9c\\x69\\x91\\x1f\\x9c\\xcf\\x05\\x8f\\x9f\\x8d\"\n\"\\x96\\x98\\x1a\\xdb\\x53\\xc6\\x40\\x67\\x6d\\x83\\x75\\x61\\x1e\\x0e\\xb8\\x1d\\x55\\xf7\\x9d\\x15\\x9d\\x96\\x94\\x98\\x22\\x0a\\x7c\\x81\\xf7\\x16\\x1d\\x99\"\n\"\\x1e\\x0e\\xc5\\x1d\\x5d\\xf8\\x77\\x15\\x71\\x7a\\x77\\x6f\\x52\\xc5\\x60\\xd7\\xbc\\xbe\\x9c\\xa9\\xb0\\xf7\\x44\\x1d\\x81\\x1e\\x67\\x7a\\x65\\x77\\x5a\\x1b\"\n\"\\x5f\\x6c\\x9e\\xa7\\x89\\x1f\\xa6\\x8a\\x84\\x94\\x78\\x1b\\x0e\\xf7\\xe5\\xbc\\x0a\\x7d\\x32\\x1d\\x8b\\x77\\x1b\\x7f\\x06\\xcc\\x0a\\x2a\\x7b\\x7b\\x67\\x1e\"\n\"\\x76\\x4f\\x1d\\x73\\x9d\\x7a\\xa3\\x73\\x1d\\x0e\\xf8\\x1a\\xf8\\x4c\\x15\\xd4\\xb6\\x98\\xab\\xa7\\x1f\\xa0\\xa2\\x9c\\xb5\\xaa\\x1a\\xa7\\x72\\xa2\\x6d\\x6e\"\n\"\\x79\\x79\\x64\\x82\\x1e\\x88\\x7d\\x88\\x82\\x87\\x85\\x08\\x88\\x8a\\x79\\x88\\x6f\\x1b\\x37\\x06\\x2a\\x47\\x62\\x35\\x5c\\x1f\\x63\\x41\\x73\\x33\\x42\\x1a\"\n\"\\xfb\\x06\\xe5\\x3d\\xf7\\x16\\xf7\\x32\\xf7\\x11\\xf7\\x01\\xf7\\x1e\\xf7\\x00\\x3b\\xd7\\xfb\\x08\\x5e\\x66\\x82\\x75\\x5c\\x1e\\x9f\\xb6\\x9b\\x95\\xc0\\x8c\"\n\"\\x08\\x9c\\xfb\\x13\\x15\\xd6\\xaf\\x6f\\x50\\x3d\\x42\\x51\\x29\\x42\\x61\\xad\\xc5\\xd9\\xd2\\xc0\\xf3\\x1f\\x0e\\xd5\\xf1\\x15\\x81\\x06\\x55\\x6e\\x77\\x67\"\n\"\\x6c\\xa1\\x7c\\xb5\\x1f\\xf7\\xa3\\x06\\xf7\\x2c\\xe2\\xb8\\xda\\xb6\\x70\\xa5\\x4c\\x9c\\x1f\\xcc\\x9e\\xaf\\xb2\\xbd\\x1a\\xce\\x4b\\xb3\\x22\\x1e\\xfb\\xa0\"\n\"\\xf7\\x12\\x0a\\xec\\x52\\x15\\x97\\xc4\\x05\\xf7\\x27\\x06\\xc1\\xa8\\x83\\x7c\\x73\\x66\\x81\\x2b\\x1f\\xfb\\x23\\xfb\\x36\\x15\\x97\\xc5\\x05\\xf7\\x18\\x06\"\n\"\\xe3\\xab\\x83\\x75\\x76\\x70\\x84\\x3d\\x1f\\x0e\\xa2\\x0a\\x0e\\xf8\\x27\\x16\\x86\\x71\\x05\\x88\\x7f\\x8a\\x80\\x81\\x1a\\x6d\\xa1\\x75\\xa8\\xa8\\x9d\\x9e\"\n\"\\xb4\\x94\\x1e\\x99\\xca\\x05\\x8f\\x9c\\x8d\\x99\\x95\\x1a\\xaa\\x79\\x9b\\x66\\x8f\\x1e\\xbb\\xf7\\x6d\\x05\\xc1\\x8d\\x9f\\x99\\xae\\x1a\\xb2\\x74\\x99\\x4b\"\n\"\\x1e\\xfb\\xc0\\x06\\x4c\\x74\\x7d\\x65\\x68\\x9f\\x7c\\xbf\\x89\\x1f\\x73\\x20\\x78\\x39\\x62\\x6e\\x28\\x8c\\x19\\x6e\\xfb\\x12\\x05\\x86\\x77\\x89\\x7d\\x83\"\n\"\\x1a\\x70\\xa1\\x76\\xa8\\xa8\\x99\\x9b\\xbd\\x99\\x1e\\x98\\xb9\\x05\\xf7\\x63\\xf7\\xd5\\x15\\xf7\\x01\\x06\\x5b\\xfb\\x6d\\x05\\xfb\\x15\\x06\\x9e\\xa8\\x99\"\n\"\\xab\\x94\\xb2\\x08\\x0e\\xf8\\xb4\\xcf\\x1d\\x0e\\xf8\\xb0\\xf7\\x34\\x15\\x95\\xb7\\x05\\x8e\\x98\\x8d\\x9b\\x9c\\x1a\\xf7\\x05\\x37\\xd5\\xfb\\x14\\xfb\\x3d\"\n\"\\xfb\\x27\\xfb\\x13\\xfb\\x26\\xfb\\x02\\xe0\\x46\\xf7\\x1c\\xd6\\xf7\\x00\\x9d\\xa0\\xbd\\x1e\\xa4\\x95\\x9b\\xa1\\xa3\\x1a\\xa2\\x79\\x9c\\x74\\x80\\x7a\\x88\"\n\"\\x85\\x6e\\x1e\\x7a\\x42\\x65\\x86\\x60\\x1b\\x42\\x5f\\xa3\\xba\\x7e\\x1f\\xa7\\xf3\\x15\\xba\\xb4\\xbc\\xa2\\xca\\x1b\\xc8\\xb3\\x74\\x5c\\x9e\\x1f\\xfb\\x35\"\n\"\\xf7\\xdc\\x15\\x69\\x6c\\x6e\\x6b\\x72\\x68\\x0a\\x9d\\x79\\xa5\\xae\\xaa\\xa8\\xad\\xa3\\x79\\x9c\\x70\\x1f\\x0e\\xf7\\x74\\xf2\\x15\\xf7\\x09\\x1d\\x83\\x93\"\n\"\\x77\\x19\\xa8\\x3f\\xa1\\x52\\x91\\x86\\xb3\\x89\\x19\\x9f\\x06\\xab\\xa3\\xa1\\xaa\\xa8\\x7a\\x9b\\x67\\x90\\x1f\\x74\\xc8\\x81\\xa5\\x7b\\xa5\\x7d\\x95\\x19\"\n\"\\x9d\\x98\\xa3\\xa2\\xa5\\xa9\\x08\\x6f\\x91\\x99\\x7f\\xa7\\x1b\\xaa\\x96\\x99\\xbd\\x97\\x1f\\x92\\xaa\\x05\\x8e\\x97\\x8c\\x94\\x92\\x1a\\xa7\\x73\\xa1\\x6b\"\n\"\\x65\\x65\\x76\\x60\\x65\\x1e\\x42\\x3a\\x92\\xb5\\x05\\xa7\\x93\\x99\\x9c\\xa5\\x1a\\xad\\x72\\x9d\\x5a\\x1e\\x65\\x06\\x5c\\x71\\x78\\x6a\\x73\\x95\\x7d\\xa4\"\n\"\\x7f\\x1f\\x83\\x5f\\x65\\xd3\\x05\\xc3\\x6d\\x73\\x9d\\x5e\\x1b\\x6c\\x78\\x81\\x73\\x7f\\x1f\\x81\\x77\\x85\\x71\\x72\\x1a\\x6d\\x9e\\x78\\xa9\\xa2\\x99\\x96\"\n\"\\xa6\\x94\\x1e\\x9f\\x62\\x91\\x81\\x9b\\x77\\x73\\x81\\x79\\x7e\\x7d\\x79\\x3d\\x2e\\x18\\x7e\\x06\\x69\\x72\\x75\\x6d\\x6e\\xa3\\x74\\xaa\\x1f\\xa6\\x06\\xa5\"\n\"\\x8c\\x8c\\x8c\\xaf\\xb5\\xda\\xec\\x18\\x99\\x9c\\x9a\\x9a\\x9a\\x96\\x08\\x0e\\xf7\\x82\\xf8\\x2c\\x15\\x8f\\x07\\xab\\x79\\x9c\\x6b\\x66\\x7f\\x79\\x4c\\x84\"\n\"\\x1e\\x89\\x72\\x85\\x75\\x81\\x70\\x08\\x84\\x76\\x87\\x7b\\x83\\x1a\\x73\\xa1\\x77\\xa6\\xa1\\x98\\x95\\xa8\\x99\\x1e\\xc7\\xa8\\xa8\\x9b\\xe1\\x1b\\xbd\\xac\"\n\"\\x81\\x7b\\x77\\x67\\x7d\\x55\\x8a\\x1f\\x60\\x8a\\x8b\\x8b\\x82\\x89\\x08\\x71\\x85\\x7d\\x7a\\x72\\x1a\\x72\\x96\\x7c\\xa3\\x83\\x1e\\x98\\x87\\x92\\x8a\\xb0\"\n\"\\x8a\\x08\\xb6\\x8a\\xa9\\x80\\x7e\\x1a\\x72\\x50\\x74\\x49\\x47\\x56\\x99\\xab\\x53\\x1e\\x99\\x71\\x7c\\x91\\x7e\\x1b\\x70\\x71\\x71\\x6f\\x73\\x9a\\x78\\xb0\"\n\"\\x77\\x1f\\x67\\xcf\\xd2\\x79\\xda\\x1b\\xdd\\xc5\\x99\\xab\\xba\\x1f\\xb4\\xa7\\xa3\\xb1\\xb2\\x1a\\xb1\\x7a\\xa3\\x65\\x9d\\x1e\\xbc\\x9f\\xa3\\xab\\xb8\\x1a\"\n\"\\xd2\\x42\\xbd\\x23\\x5a\\x63\\x81\\x74\\x65\\x1e\\x0e\\x59\\x0a\\x0e\\x59\\x0a\\xca\\xf8\\x4b\\x15\\x72\\x79\\x77\\x6f\\x52\\xc5\\x60\\xd7\\xbd\\xbc\\x9c\\xa9\"\n\"\\xb0\\xac\\x1d\\x9b\\x80\\x96\\x79\\x7a\\x80\\x83\\x78\\x82\\x1e\\x68\\x7a\\x64\\x76\\x5c\\x1b\\x5e\\x6c\\x9e\\xa7\\x89\\x1f\\xa6\\x89\\x85\\x94\\x78\\x1b\\x0e\"\n\"\\x90\\x0a\\x0e\\xf8\\x96\\xf7\\xd5\\x15\\xbf\\x8c\\xa0\\x9a\\xaf\\x1a\\xb1\\x74\\x99\\x4c\\x1e\\xfb\\xb6\\x06\\x4b\\x74\\x7d\\x66\\x68\\xa4\\x79\\xbb\\x1f\\x8f\"\n\"\\x06\\x8e\\x06\\x68\\xfb\\x31\\x81\\x5e\\x75\\x74\\x69\\x8a\\x19\\xb4\\x89\\x7d\\x9c\\x6a\\x1b\\x6a\\x7e\\x7c\\x56\\x80\\x1f\\x81\\x61\\x05\\x8a\\x85\\x8a\\x85\"\n\"\\x88\\x1a\\x74\\xb6\\x7a\\xc4\\xf0\\xcc\\xc4\\xf6\\xa4\\x1e\\xb0\\xf7\\x3d\\x05\\xe7\\x06\\x5a\\xfb\\x6e\\x05\\x58\\x75\\x7b\\x68\\x65\\xa1\\x7d\\xcb\\x1f\\xcf\"\n\"\\x06\\xcb\\xa2\\x99\\xb0\\xab\\x78\\x9c\\x63\\x8e\\x1f\\x0e\\xf7\\x42\\xf7\\x95\\x15\\xcb\\xfb\\x1f\\x05\\xe2\\x06\\xf7\\x17\\xf7\\x18\\x63\\xfb\\x26\\x05\\x6b\"\n\"\\x06\\x59\\x6b\\x73\\x66\\x6e\\x9f\\x7d\\xb4\\x1f\\xf7\\x15\\x06\\xbd\\xab\\xa2\\xb0\\xa7\\x7c\\x98\\x68\\x8d\\x1f\\xba\\xf7\\x6f\\xf7\\x58\\x1d\\x36\\x06\\xfb\"\n\"\\x53\\xfb\\x58\\x2b\\xf7\\x58\\x05\\x37\\x06\\x59\\x6b\\x73\\x66\\x72\\x98\\x7e\\xa8\\x87\\x1f\\x5b\\xfb\\x6e\\x05\\x88\\x06\\x64\\x6c\\x6f\\x69\\x70\\xa0\\x7c\"\n\"\\xb3\\x1f\\xf7\\x15\\x06\\xbd\\xab\\xa4\\xb1\\xa5\\x75\\x9a\\x64\\x1f\\x6e\\x06\\x0e\\xf8\\x1e\\xf7\\x36\\x15\\x7e\\x50\\x05\\x85\\x06\\x59\\x6b\\x74\\x66\\x6e\"\n\"\\xa0\\x7d\\xb4\\x1f\\xf7\\x0c\\x06\\xbd\\xab\\xa4\\xb1\\xa5\\x75\\x99\\x64\\x1f\\x84\\x06\\xbb\\xf7\\x6f\\xa6\\x0a\\x89\\x87\\x81\\x1f\\x77\\x82\\x7a\\x73\\x75\"\n\"\\x1a\\x70\\xa0\\x7c\\xb3\\x1e\\xf7\\x0d\\x06\\xbc\\x7e\\x0a\\x98\\xc6\\x05\\x0e\\xd8\\x1d\\xf8\\x30\\xf7\\xd5\\x15\\x5c\\xfb\\x6e\\x05\\x7f\\x06\\x59\\x6b\\x73\"\n\"\\x64\\x71\\xa1\\x7d\\xb2\\x1f\\xf7\\x0d\\x06\\xbe\\xaa\\xa2\\xb1\\xaa\\x7c\\x96\\x5c\\x1f\\xbb\\xf7\\x6e\\x05\\xb2\\x90\\xa4\\xa3\\xac\\x1a\\xa7\\x76\\x99\\x63\"\n\"\\x1e\\xfc\\x18\\x06\\x55\\x6e\\x76\\x63\\x6e\\x9a\\x7d\\xa9\\x1f\\x91\\x06\\x5c\\xfb\\x6e\\x05\\x73\\x7d\\x8a\\x86\\xcd\\x0a\\xbb\\xf7\\x6e\\x05\\x0e\\xf7\\x23\"\n\"\\x91\\x0a\\xf8\\xd8\\x7a\\x0a\\x9d\\x69\\x5c\\x94\\x55\\x1b\\x2d\\x5a\\x0a\\x0e\\xf8\\x00\\xf7\\xd5\\x15\\xec\\x06\\x78\\x38\\x05\\x89\\x7f\\x89\\x80\\x85\\x70\"\n\"\\x0a\\xb5\\xf7\\x51\\x05\\xfc\\x9a\\x66\\x1d\\x81\\x85\\x1a\\x75\\x9f\\x7a\\xa4\\xad\\xa3\\xa2\\xb6\\x94\\x1e\\x9e\\xe0\\x05\\xeb\\x06\\x5c\\xfb\\x6d\\x05\\x4d\"\n\"\\x06\\x59\\x6b\\x72\\x64\\x72\\xa1\\x7c\\xb2\\x1f\\xf7\\x7a\\xf7\\x6a\\x1d\\x4f\\x06\\x0e\\xf7\\x53\\x92\\x58\\x1d\\x0e\\xf7\\xc7\\x89\\x15\\x87\\xa0\\x9a\\x8a\"\n\"\\x9a\\x1b\\xca\\xbc\\xa8\\xc7\\xb2\\x1f\\xae\\xc2\\x9e\\xcd\\xd0\\x1a\\xf4\\x5f\\xc5\\x3c\\x7f\\x83\\x8a\\x89\\x7e\\x1e\\x98\\xcb\\x05\\x90\\xa0\\x8d\\x99\\x92\"\n\"\\x1a\\xa7\\x74\\xa0\\x6b\\x1e\\x6a\\x8a\\x74\\x89\\x05\\x4d\\x85\\x77\\x7f\\x68\\x1a\\x6b\\xa1\\x77\\xaf\\x8d\\x90\\x8b\\x8c\\x92\\x1e\\x81\\x5a\\x05\\x8f\\x76\"\n\"\\x7f\\x8c\\x7f\\x1b\\x59\\x58\\x6f\\x59\\x61\\x1f\\x5d\\x55\\x75\\x4a\\x3f\\x1a\\x51\\x97\\x64\\xa5\\x6c\\x1e\\x70\\xa2\\xab\\x7c\\xac\\x1b\\x96\\x93\\x8c\\x8e\"\n\"\\x9a\\x1f\\x84\\x72\\x05\\x77\\x06\\x4b\\x74\\x7e\\x65\\x64\\xa1\\x7e\\xcc\\x1f\\xf7\\x1b\\x06\\xcc\\xa2\\x98\\xb1\\xb2\\x75\\x98\\x49\\x1f\\x85\\x06\\x38\\xf7\"\n\"\\x12\\x15\\x87\\x7d\\x82\\x89\\x82\\x1b\\x71\\x7e\\xa1\\xb8\\xe0\\xc0\\xe3\\xbe\\x91\\x8f\\x8b\\x89\\x94\\x1f\\xf7\\x04\\x16\\x8d\\x99\\x91\\x8b\\x93\\x1b\\xa7\"\n\"\\x9b\\x74\\x62\\x67\\x82\\x62\\x7a\\x66\\x1f\\x5f\\x76\\x74\\x79\\x66\\x1b\\x86\\x89\\x8b\\x8d\\x83\\x1f\\x0e\\xf8\\x12\\xec\\x0a\\x9d\\x9b\\x1a\\x9c\\x80\\x9b\"\n\"\\x7d\\x8d\\x0a\\xf8\\xd7\\xf3\\x15\\x2c\\x06\\xba\\xf7\\x6e\\xf7\\x62\\x1d\\xa0\\x1a\\xa7\\x76\\x9a\\x63\\x1e\\xfb\\x0d\\x06\\x5a\\x6a\\x72\\x65\\x71\\xa1\\x7d\"\n\"\\xb2\\x1f\\x95\\x06\\x5b\\xfb\\x6e\\x05\\xfb\\x63\\x06\\xba\\xf7\\x6e\\x05\\x97\\x06\\xbd\\xab\\xa2\\xaf\\xa8\\x76\\x9a\\x63\\x1f\\xfb\\x0d\\x60\\x1d\\x5c\\xfb\"\n\"\\x6e\\x2d\\x0a\\xf8\\x1d\\x06\\x81\\x61\\x05\\x88\\x7d\\x89\\x80\\x86\\x1a\\x75\\xa1\\x7a\\xa7\\xac\\x9f\\xa0\\xb9\\x95\\x1e\\x0e\\xf7\\xf4\\xf3\\x15\\x54\\x06\"\n\"\\x4b\\x74\\x7d\\x65\\x65\\xa1\\x7d\\xcc\\x1f\\xf7\\x1e\\x06\\xcb\\xa2\\x99\\xb0\\xac\\x78\\x9c\\x61\\x8e\\x1f\\xcd\\x1d\\x0e\\xf8\\x87\\xf3\\x15\\xbb\\xf7\\x5b\"\n\"\\x1d\\x62\\x1f\\xfb\\x09\\x06\\x45\\xf7\\x0f\\x1d\\x75\\x95\\x7e\\xa2\\x84\\x1f\\x59\\xfb\\x6f\\x05\\x3f\\x06\\xd1\\xf7\\xd5\\x05\\xfb\\x06\\x60\\x1d\\x5f\\xfb\"\n\"\\x6e\\x2d\\x0a\\xf8\\x78\\x7d\\x0a\\x0e\\xf7\\x63\\xf3\\x15\\x3f\\x06\\xd1\\xf7\\xd5\\x05\\xfb\\x06\\x60\\x1d\\x5f\\xfb\\x6e\\x2d\\x0a\\xf8\\x4f\\x06\\x7f\\x61\"\n\"\\x05\\x88\\x81\\x89\\x81\\x82\\x1a\\x70\\x9c\\x7e\\xac\\xb4\\x98\\x9a\\xd2\\x9c\\x1e\\xaa\\xf7\\x15\\x05\\x28\\x06\\xbc\\xf7\\x5b\\x1d\\x63\\x1f\\xfb\\x09\\x06\"\n\"\\x44\\xf7\\x0f\\x1d\\x74\\x96\\x7d\\xa1\\x86\\x1f\\x0e\\xbd\\xf8\\x3d\\x15\\xf7\\x18\\x1d\\xf1\\x06\\x5e\\xfb\\x6f\\x05\\x81\\x06\\x55\\x6e\\x77\\x67\\x6c\\xa1\"\n\"\\x7c\\xb5\\x1f\\xf7\\x29\\x06\\xe1\\xc6\\x97\\xa4\\xac\\x1f\\xaa\\xa1\\x9c\\xaf\\xb3\\x1a\\xdd\\x49\\xb9\\xfb\\x09\\x1e\\x76\\x06\\x97\\xc5\\x05\\xc0\\x06\\xb1\"\n\"\\xaa\\xa7\\xad\\xa6\\x76\\x9a\\x62\\x1f\\x21\\xfb\\xd7\\x15\\x97\\xc5\\x05\\xad\\x06\\xc2\\xa8\\x81\\x78\\x78\\x70\\x81\\x58\\x1f\\x0e\\xf7\\x50\\xf7\\xd5\\x15\"\n\"\\xc2\\x06\\xb1\\xaa\\xa7\\xad\\xa7\\x76\\x99\\x63\\x1f\\xfb\\x33\\x06\\x56\\x6d\\x76\\x65\\x6d\\xa0\\x7c\\xb6\\x1f\\x91\\x06\\x5d\\xfb\\x6f\\x05\\x7f\\x06\\x64\"\n\"\\x6e\\x73\\x6a\\x6d\\xa1\\x7c\\xb5\\x1f\\xf7\\x0b\\x06\\xdf\\xc3\\x97\\xa4\\xad\\x1f\\xa9\\xa1\\x9c\\xaf\\xb4\\x1a\\xd9\\x49\\xbc\\x23\\x1e\\x80\\x06\\x69\\xfb\"\n\"\\x35\\x15\\x96\\xc5\\x05\\x96\\x06\\x9d\\xb5\\x84\\x85\\x97\\x1f\\x93\\x88\\x90\\x84\\x84\\x1a\\x79\\x6b\\x81\\x53\\x1e\\xf7\\x8a\\x8c\\x15\\x5b\\x86\\x75\\x77\"\n\"\\x67\\x1a\\x6c\\x9a\\x80\\xb8\\x1e\\xed\\x06\\xbe\\xab\\xa4\\xb2\\xa7\\x7a\\x96\\x5e\\x8c\\x1f\\xbd\\xf7\\x6e\\xf7\\x58\\x1d\\x2f\\x06\\x59\\x6b\\x72\\x64\\x6f\"\n\"\\x9a\\x81\\xb9\\x8a\\x1f\\x0e\\xf7\\x79\\xf7\\xd5\\x15\\xc3\\x06\\xb1\\xaa\\xa7\\xad\\xa6\\x76\\x9a\\x63\\x1f\\xfb\\x37\\xf7\\x12\\x0a\\x5e\\xfb\\x6f\\x05\\x81\"\n\"\\x06\\x55\\x6e\\x77\\x67\\x6c\\xa1\\x7c\\xb5\\x1f\\xf7\\x96\\x06\\xed\\xc9\\x97\\xa5\\xad\\x1f\\xa8\\xa2\\x9b\\xae\\xb3\\x1a\\xdf\\x47\\xb7\\xfb\\x14\\x1e\\xfb\"\n\"\\x16\\x06\\x69\\xfb\\x36\\x15\\x97\\xc5\\x05\\xf7\\x0b\\x06\\xe4\\xaa\\x83\\x75\\x76\\x70\\x84\\x3d\\x1f\\x0e\\xf7\\xba\\xf7\\x9a\\x15\\x5c\\x72\\x78\\x68\\x6a\"\n\"\\xa1\\x7a\\xb2\\x1f\\xf7\\x10\\x06\\x5c\\x6e\\x5e\\x74\\x4a\\x1b\\x4f\\x53\\xa1\\xb7\\x56\\x1f\\xa1\\x71\\x7b\\x93\\x7a\\x1b\\x70\\x71\\x72\\x71\\x71\\xa3\\x71\"\n\"\\xc6\\x64\\x1f\\x62\\xca\\xbd\\x7b\\xcf\\x1b\\xf7\\x3b\\xf7\\x17\\xf7\\x04\\xf7\\x23\\xf7\\x09\\x36\\xdb\\xfb\\x10\\x57\\x60\\x80\\x74\\x67\\x1f\\xb8\\x88\\x7f\"\n\"\\x99\\x69\\x1b\\x68\\x80\\x7c\\x49\\x80\\x1f\\x85\\x6c\\x85\\x70\\x85\\x76\\x08\\x80\\x6c\\x89\\x82\\x82\\x1a\\x75\\xa1\\x76\\xa3\\xa2\\x9a\\x97\\xac\\x9c\\x1e\"\n\"\\xc2\\xa8\\xb7\\xa3\\xd2\\x1b\\xcd\\xb8\\x70\\x5e\\x94\\x1f\\x0e\\xf7\\x6c\\xf7\\x36\\x15\\xfb\\x01\\x90\\xd0\\x46\\xf5\\x1b\\xd5\\xc0\\xa7\\xc6\\xb4\\x1f\\xb0\"\n\"\\xc0\\x9f\\xcd\\xd2\\x1a\\xca\\x7b\\xb6\\x68\\xa8\\x1e\\xa6\\x6c\\x60\\x99\\x5c\\x1b\\x29\\x38\\x4c\\xfb\\x00\\x62\\x1f\\x62\\x06\\x96\\xc3\\xa3\\x8c\\x95\\x8d\"\n\"\\x97\\x93\\x19\\x9c\\x96\\x96\\xa0\\x9e\\x1a\\xa5\\x75\\x9a\\x64\\x1e\\x38\\x06\\x59\\x6b\\x72\\x65\\x73\\x9a\\x7e\\xa8\\x88\\x1f\\x5b\\xfb\\x6f\\x05\\x61\\x89\"\n\"\\x75\\x77\\x67\\x1a\\x6c\\x9f\\x7d\\xb5\\x1e\\xee\\x06\\xbe\\xaa\\xa2\\xb2\\xa6\\x7c\\x99\\x6e\\x1f\\x71\\x06\\x98\\xc6\\x05\\xf7\\xa9\\xf7\\x40\\x15\\xb8\\xa5\"\n\"\\x6a\\x51\\x37\\x57\\x44\\x4e\\x59\\x6d\\xad\\xc2\\xde\\xc4\\xd5\\xcc\\x1f\\x0e\\xf8\\x8e\\xf7\\xd5\\x15\\xa2\\x06\\xb4\\xa3\\x9e\\xad\\xb0\\x73\\x99\\x4c\\x1f\"\n\"\\xfb\\x43\\x06\\x31\\x50\\x7d\\x6f\\x67\\x1f\\x6b\\x72\\x78\\x65\\x64\\x1a\\x58\\xa6\\x68\\xc2\\x76\\x1e\\x7a\\x82\\x81\\x84\\x79\\x7a\\x5f\\x5f\\x18\\x72\\x06\"\n\"\\x4f\\x75\\x7e\\x68\\x6b\\xa0\\x7a\\xb3\\x1f\\xcb\\x06\\xb0\\x8c\\x8b\\x8b\\xb7\\xba\\xde\\xe2\\x9e\\x98\\xb8\\x8d\\x08\\xa4\\x06\\x81\\x5c\\x05\\x72\\x06\\x60\"\n\"\\x75\\x7a\\x68\\x65\\xa2\\x7e\\xcb\\x1f\\xe8\\x06\\xca\\xa2\\x99\\xaf\\xae\\x75\\x9c\\x5d\\x8c\\x1f\\x4e\\xf7\\x6e\\x15\\x7c\\x47\\x05\\x49\\x06\\x38\\x6e\\x92\"\n\"\\xa1\\xa7\\xab\\x96\\xdb\\x1f\\x0e\\xf8\\x88\\xf8\\x3d\\x15\\xfc\\x19\\xf7\\x59\\x1d\\x5c\\xfb\\x6d\\x44\\x0a\\xbb\\xf7\\x6d\\x05\\xf7\\xe4\\x06\\xb5\\xf7\\x4f\"\n\"\\x05\\x8d\\x97\\x8d\\x96\\x92\\x1a\\xa1\\x78\\x9c\\x71\\x69\\x74\\x74\\x5f\\x81\\x1e\\x0e\\xd4\\xf2\\x15\\x88\\x67\\x0a\\xa8\\xde\\x0a\\x82\\x8d\\x6f\\x4e\\x0a\"\n\"\\xcc\\xa5\\x96\\xb9\\x1b\\xb7\\xa6\\x7b\\x71\\x84\\x8a\\x81\\x88\\x7f\\x1f\\x4d\\xfb\\xa9\\x05\\x5c\\x82\\x60\\x6c\\x53\\x1b\\x20\\x06\\x57\\x6c\\x73\\x63\\x70\"\n\"\\x9f\\x7e\\xb4\\x1f\\xf7\\x03\\x06\\xf7\\x05\\x8c\\xed\\xd7\\xa2\\xf2\\xcc\\xf7\\xb6\\x18\\x8e\\x99\\x8c\\x96\\x9a\\x1a\\xd6\\x50\\xbb\\x30\\x59\\x58\\x78\\x6a\"\n\"\\x60\\x1e\\x9e\\xdd\\x05\\xe6\\x1d\\x0e\\xa2\\x0a\\xf7\\xd2\\xf7\\x88\\x15\\x9e\\x97\\x93\\x97\\x22\\x0a\\x7b\\x82\\x80\\x87\\x82\\x7e\\x8d\\x1d\\xf7\\x53\\xf7\"\n\"\\x9d\\x15\\xba\\xac\\xba\\xa0\\xd2\\x1b\\xb0\\xb1\\x82\\x7e\\x9c\\x1f\\x95\\x83\\x8f\\x82\\x7c\\x1a\\x67\\x98\\x7d\\xab\\xae\\xa2\\xa1\\xb8\\x95\\x1e\\x99\\xc7\"\n\"\\x05\\x8e\\x98\\x8c\\x95\\x91\\x1a\\xa0\\x77\\x9d\\x73\\x7e\\x7f\\x87\\x80\\x7c\\x1e\\x9e\\x65\\x62\\x94\\x56\\x1b\\x30\\x42\\x6f\\x4f\\x4d\\x1f\\x50\\x53\\x6c\"\n\"\\x46\\x45\\x1a\\xfb\\x02\\xdc\\x50\\xf7\\x2c\\xf7\\x23\\xf7\\x0a\\xbf\\xca\\xa2\\x77\\x9e\\x73\\x7f\\x7f\\x87\\x81\\x7e\\x1e\\x6e\\x5e\\x62\\x80\\x42\\x1b\\x31\"\n\"\\x5e\\xa2\\xbd\\x84\\x1f\\xf7\\x35\\x06\\xba\\xa5\\x9f\\xb0\\xaa\\x77\\x9b\\x62\\x1f\\x0e\\xf8\\xb6\\xf8\\x05\\x15\\x8e\\x9b\\x8c\\x91\\x94\\x7f\\x0a\\x7e\\x1e\"\n\"\\x9a\\x6a\\x78\\x0a\\xf7\\x10\\x63\\x1d\\x4b\\x61\\x0a\\x93\\x8e\\x93\\x98\\x1e\\x79\\xaf\\xbb\\xf2\\x0a\\x72\\x9b\\x62\\x96\\x44\\x94\\x4e\\x93\\x84\\x8d\\x7f\"\n\"\\x8f\\x84\\x1d\\x08\\x0e\\xf8\\x26\\x35\\x1d\\xec\\x5d\\x1d\\x0e\\xf8\\x25\\xf8\\x3d\\x15\\xfb\\x4b\\xea\\x0a\\xd3\\x06\\x5b\\xfb\\x6d\\x05\\xfb\\x06\\x06\\x58\"\n\"\\x6c\\x74\\x64\\x6e\\x9e\\x7e\\xb5\\x1f\\xf7\\xe2\\xf7\\x6b\\x1d\\xfb\\x04\\x06\\x32\\xf8\\x7c\\x15\\x69\\x6b\\x6e\\x6b\\x72\\x9e\\x79\\xa4\\xaf\\xaa\\xa8\\xac\"\n\"\\xa4\\x79\\x9c\\x70\\x1f\\xf7\\x61\\x16\\x68\\x6c\\x6e\\x6b\\x72\\x9e\\x79\\xa5\\xae\\xaa\\xa8\\xac\\xa4\\x79\\x9c\\x70\\x1f\\x0e\\xf8\\x2d\\xa4\\x0a\\xf7\\xca\"\n\"\\xf7\\xac\\x15\\xfb\\x14\\xf7\\x75\\x1d\\xf8\\x4f\\xf7\\xd5\\x15\\xc0\\x8c\\xa0\\x9a\\xaf\\x1a\\xb1\\x74\\x99\\x4b\\x1e\\xfb\\x81\\x27\\x0a\\x69\\xa0\\x7a\\xb7\"\n\"\\x89\\x1f\\x68\\xfb\\x34\\x80\\x5f\\x77\\x75\\x6b\\x89\\x19\\x8d\\x92\\x8b\\x8e\\x8f\\x1a\\xa9\\x78\\x9c\\x6b\\x6b\\x78\\x76\\x61\\x83\\x1e\\x82\\x5f\\x05\\x89\"\n\"\\x81\\x8b\\x87\\x88\\x1a\\x71\\xaf\\x7b\\xc5\\xf7\\x03\\xc1\\xba\\xf7\\x09\\xa5\\x1e\\xb1\\xf7\\x3d\\x05\\xc8\\x06\\x5a\\xfb\\x6e\\x05\\x68\\x86\\x7a\\x7a\\x6d\"\n\"\\x1a\\x67\\xa5\\x7b\\xc5\\xec\\xbd\\x92\\x9e\\xac\\x1e\\xb9\\xa6\\xa8\\xbc\\xc0\\x1a\\xd5\\x60\\xae\\x26\\x92\\x1e\\x74\\x24\\x15\\xbb\\x8a\\x93\\x88\\x7a\\x1a\"\n\"\\x72\\x75\\x7e\\x5b\\x87\\x1e\\x0e\\xf7\\xb4\\xf7\\x34\\x15\\x7f\\x51\\x05\\x66\\x87\\x78\\x79\\x6a\\x1a\\x69\\x9e\\x7e\\xb9\\x1e\\xde\\x06\\xe0\\xb9\\x93\\x9e\"\n\"\\xaa\\x1f\\xb1\\xa1\\x9f\\xb2\\xbc\\x1a\\xdd\\x54\\xb8\\x24\\x1e\\x7f\\x06\\x96\\xc4\\x05\\xc4\\x06\\xb0\\xaa\\xa7\\xad\\xa6\\x76\\x9a\\x63\\x1f\\xfb\\x1f\\x06\"\n\"\\x56\\x6d\\x76\\x64\\x6f\\x9a\\x7d\\xae\\x89\\x1f\\x80\\x52\\x05\\xfb\\x0c\\x06\\x97\\xc5\\x05\\xb0\\x92\\x9e\\x9f\\xab\\x1a\\xa9\\x77\\x99\\x62\\x1e\\x4a\\x06\"\n\"\\x59\\x6b\\x72\\x64\\x74\\x9a\\x7e\\xa8\\x87\\x1f\\x5b\\xfb\\x6d\\x05\\x61\\x89\\x75\\x77\\x66\\x1a\\x6c\\x9e\\x7d\\xb6\\x1e\\xdd\\x06\\xbe\\xaa\\xa2\\xb2\\xa7\"\n\"\\x7c\\x99\\x6d\\x1f\\x83\\x06\\x98\\xc3\\x05\\xf7\\x6c\\x51\\x15\\x97\\xc5\\x05\\xa2\\x06\\xb3\\x9f\\x81\\x78\\x75\\x7d\\x84\\x60\\x1f\\x0e\\xf7\\x9a\\xf8\\x67\"\n\"\\x15\\xe6\\x1d\\x3b\\xfc\\x00\\x54\\x0a\\x90\\x0a\\xfb\\x2a\\xf7\\x8e\\xed\\x1d\\xf7\\x73\\xf7\\xd6\\x15\\xb0\\x91\\x9b\\x9b\\xa9\\x1a\\xb0\\x74\\x99\\x4c\\x1e\"\n\"\\x54\\x27\\x0a\\x6b\\x9e\\x7a\\xb3\\x88\\x1f\\xea\\xfb\\x98\\x6e\\x66\\x05\\x74\\x79\\x73\\x76\\x80\\x1b\\x8e\\x9d\\x8b\\x8f\\x92\\x1a\\xaa\\x78\\x9c\\x6b\\x69\"\n\"\\x7c\\x7a\\x57\\x80\\x1e\\x80\\x5c\\x05\\x8a\\x85\\x8a\\x85\\x86\\x1a\\x6e\\xb4\\x76\\xc5\\xc5\\xbf\\xaa\\xcd\\xc1\\x1e\\xf7\\xaf\\xf7\\xf2\\x05\\xbd\\x8c\\xa1\"\n\"\\x9b\\xae\\x1a\\xb0\\x73\\x99\\x4c\\x1e\\x40\\x27\\x0a\\x6f\\x99\\x7b\\xaa\\x84\\x1f\\xfb\\x17\\xfb\\x36\\x05\\x5b\\xf8\\x5c\\x15\\x73\\x79\\x77\\x6f\\x52\\xc5\"\n\"\\x60\\xd7\\xbd\\xbc\\x9c\\xa9\\xb0\\xac\\x1d\\x9b\\x80\\x96\\x79\\x7a\\x80\\x82\\x78\\x82\\x1e\\x69\\x7b\\x63\\x76\\x5c\\x1b\\x5e\\x6c\\x9e\\xa7\\x89\\x1f\\xa7\"\n\"\\x89\\x85\\x93\\x77\\x1b\\x0e\\xf7\\xc3\\x16\\xf7\\x1b\\x06\\xbe\\xab\\xa4\\xb2\\xa1\\x7c\\x99\\x70\\x8e\\x1f\\xda\\xf7\\xfa\\xa0\\x0a\\xf7\\x1e\\x06\\x7c\\x56\"\n\"\\x05\\x89\\x83\\x89\\x7f\\x82\\x1a\\x73\\x9e\\x7b\\xa9\\xaf\\x9a\\x9b\\xbe\\x97\\x1e\\x0e\\xbe\\x1d\\xb1\\xf7\\x96\\x15\\x82\\x63\\x05\\x88\\x7c\\x89\\x7b\\x7b\"\n\"\\x1a\\xfb\\x06\\xdf\\x43\\xf7\\x19\\xf7\\x3d\\xf7\\x28\\xf7\\x13\\xf7\\x25\\xf7\\x03\\x36\\xd0\\xfb\\x1f\\x3a\\xfb\\x07\\x77\\x75\\x5f\\x1e\\x74\\x80\\x7e\\x78\"\n\"\\x74\\x1a\\x74\\x9c\\x7a\\xa3\\x96\\x97\\x8d\\x8e\\x98\\x1e\\xa2\\xed\\xa4\\x8f\\xb8\\x1b\\xdf\\xb7\\x73\\x57\\x99\\x1f\\x73\\x2f\\x15\\x59\\x6a\\x52\\x6f\\x45\"\n\"\\x1b\\x47\\x59\\xab\\xb9\\x86\\x1f\\x0e\\xf8\\x0d\\xf8\\x09\\x15\\x72\\xba\\x83\\x86\\x80\\x84\\x05\\x69\\x57\\x7a\\x84\\x71\\x1b\\x6e\\x7a\\x9d\\xac\\xbc\\xb1\"\n\"\\xb3\\xb9\\xa2\\x97\\x83\\x7c\\x86\\x8a\\x73\\x89\\x79\\x1f\\xe7\\x96\\x05\\x8a\\x9b\\x8b\\x99\\x98\\x1a\\xa3\\x8c\\x8f\\x9e\\xb2\\x1e\\x90\\x94\\x8e\\x92\\x8e\"\n\"\\x90\\x34\\x9c\\x18\\x86\\x7b\\x05\\x92\\x72\\x82\\x8d\\x7b\\x1b\\x27\\x32\\x34\\x28\\x44\\xbb\\x5c\\xd3\\xae\\xac\\x94\\xa1\\xb4\\x1f\\xfb\\x67\\xfb\\x8c\\x05\"\n\"\\x80\\x7e\\x84\\x7d\\x7f\\x1a\\x78\\x9d\\x7b\\xa1\\x9d\\x9b\\x94\\x9c\\x9a\\x1e\\xf7\\x19\\xf7\\x30\\x05\\x81\\x71\\x87\\x79\\x75\\x1a\\x43\\xbc\\x5d\\xd9\\xf3\"\n\"\\xe5\\xe1\\xee\\xd3\\x59\\xba\\x3f\\x65\\x6f\\x83\\x77\\x66\\x1e\\xf7\\x60\\xf7\\x82\\x05\\x96\\x98\\x91\\x99\\x97\\x1a\\x9e\\x79\\x9b\\x75\\x79\\x7b\\x83\\x79\"\n\"\\x7c\\x1e\\x5b\\xfb\\xe8\\x15\\xac\\x9e\\x79\\x6b\\x5a\\x65\\x62\\x5d\\x6b\\x78\\x9d\\xab\\xbc\\xb1\\xb4\\xb8\\x1f\\x0e\\xf7\\x50\\xf7\\x22\\x15\\x8d\\x45\\x8e\"\n\"\\x76\\x95\\x76\\x08\\x72\\x98\\x9f\\x7d\\xa3\\x1b\\xa8\\xa3\\x99\\xab\\xa8\\x1f\\x9d\\x9f\\x9b\\xa0\\x96\\x9e\\x90\\x94\\x18\\x8d\\x8e\\x8c\\x8f\\x8f\\x1a\\x92\"\n\"\\x85\\x90\\x84\\x84\\x86\\x87\\x82\\x84\\x1e\\x80\\x7b\\x05\\x6c\\x75\\x7a\\x7d\\x7c\\x1b\\x79\\x84\\x9e\\xc0\\x97\\x8b\\xa4\\x8c\\xa0\\x1f\\x9e\\x07\\xaf\\x07\"\n\"\\xf7\\x1e\\xf7\\x44\\xbe\\xec\\xe1\\x1a\\xc1\\x6e\\xae\\x5f\\x5f\\x5a\\x6a\\x52\\x64\\x1e\\x60\\x4b\\x74\\xfb\\x01\\x88\\xfb\\x3d\\x8a\\x4e\\x18\\x74\\x6f\\x86\"\n\"\\x85\\x79\\x76\\x88\\x88\\x19\\x76\\x75\\x05\\x85\\x85\\x89\\x86\\x86\\x1a\\x87\\x07\\x84\\x8f\\x8e\\x88\\x91\\x1b\\x96\\x8b\\x8b\\xb9\\xb7\\x1f\\xec\\xf7\\x3d\"\n\"\\x15\\x8d\\xb1\\x05\\xf7\\x6d\\x95\\x9e\\xd0\\xbc\\x1b\\xa2\\x9a\\x76\\x6b\\x44\\x64\\x2f\\x45\\x2b\\x1f\\x0e\\xa8\\xf2\\x15\\x69\\x85\\x7b\\x7a\\x6e\\x1a\\x66\"\n\"\\xa2\\x7d\\xcb\\x1e\\xc1\\x06\\xca\\xa2\\x99\\xaf\\xae\\x75\\x9c\\x5e\\x8c\\x1f\\xb6\\xf7\\x5a\\xb2\\xfb\\x68\\x05\\x46\\x98\\x9a\\x77\\xb6\\x1b\\xb4\\x9a\\x9d\"\n\"\\xcf\\x9a\\x1f\\xde\\xf8\\x0b\\x05\\xae\\x91\\x9b\\x9c\\xa7\\x1a\\xb2\\x74\\x98\\x4b\\x1e\\x55\\x06\\x4c\\x73\\x7d\\x67\\x68\\xa1\\x7a\\xb9\\x8a\\x1f\\x61\\xfb\"\n\"\\x53\\x62\\xf7\\x70\\x05\\xd0\\x7f\\x85\\x90\\x42\\x1b\\x7b\\x06\\x4b\\x74\\x7d\\x66\\x6e\\x9a\\x7b\\xac\\x84\\x1f\\xf7\\xe0\\xfb\\x62\\x15\\x71\\x9a\\xa2\\x7f\"\n\"\\xac\\x1b\\xc0\\xae\\xad\\xcb\\x98\\x1f\\x9e\\xe4\\x05\\x8c\\x91\\x8c\\x92\\x92\\x1a\\xb3\\x6e\\xa7\\x60\\x55\\x68\\x6a\\x49\\x7d\\x1e\\x78\\x3b\\x05\\x88\\x7e\"\n\"\\x8a\\x82\\x85\\x1a\\x88\\x8e\\x7a\\x8c\\x85\\x1e\\x8c\\x8a\\x05\\xe2\\xb7\\x15\\x82\\x89\\x88\\x87\\x87\\x1b\\x88\\x8a\\x8c\\x8d\\x8d\\x8b\\x8b\\x8d\\x91\\x1f\"\n\"\\xa5\\xf7\\x01\\x05\\x92\\x8d\\x8d\\x8e\\x8f\\x1b\\x90\\x8b\\x8b\\x7c\\x87\\x1f\\x48\\xfb\\x69\\x15\\x58\\x76\\x7d\\x69\\x6d\\xa0\\x7a\\xb0\\x1f\\xa6\\x06\\xbd\"\n\"\\xa1\\x99\\xac\\xab\\x75\\x9b\\x61\\x1f\\x0e\\xf8\\xa3\\xf7\\xe3\\x15\\xcd\\x71\\x54\\xaf\\x41\\x1b\\xfb\\x2d\\xfb\\x20\\xfb\\x16\\xfb\\x21\\xfb\\x03\\xd8\\x45\"\n\"\\xf7\\x0d\\xdf\\xc4\\xa7\\xcc\\xb9\\x1f\\x91\\x4d\\x05\\x7a\\x8c\\x9b\\x7f\\xa0\\x1b\\xae\\xa4\\xa3\\xac\\x1f\\x8f\\x07\\x79\\xf7\\x38\\xf7\\x02\\xf7\\x2c\\x05\"\n\"\\x94\\x97\\x8f\\x96\\x95\\x1a\\xa1\\x79\\x9a\\x70\\x77\\x81\\x85\\x76\\x7b\\x1e\\xfb\\x18\\xfb\\x57\\x15\\x32\\x5b\\x5e\\x68\\x4a\\x1b\\x4d\\x62\\xb2\\xc5\\xd8\"\n\"\\xd8\\xd3\\xde\\xab\\xa7\\x7e\\x76\\x9b\\x1f\\x9a\\x76\\x90\\x78\\x90\\x5b\\x08\\x0e\\xf8\\x6f\\xf7\\x4f\\x15\\xe4\\xf7\\x1f\\x05\\x9e\\xaa\\x93\\x9d\\x9c\\x1a\"\n\"\\xa7\\x79\\x9c\\x6c\\x6d\\x81\\x83\\x54\\x69\\x1e\\x6b\\x58\\x05\\xdb\\x66\\x5b\\xad\\x41\\x1b\\xfb\\x11\\xfb\\x05\\xfb\\x12\\xfb\\x1f\\xfb\\x01\\xd5\\x3d\\xf0\"\n\"\\xcb\\xca\\xaa\\xc3\\xbb\\x1f\\x96\\x43\\x05\\xc7\\x06\\xbd\\xab\\xa3\\xaf\\xa6\\x7c\\x99\\x6a\\x8d\\x1f\\xfb\\x18\\xf4\\x15\\x70\\x65\\x84\\x83\\x7b\\x7a\\x08\"\n\"\\x63\\x65\\x6f\\x7b\\x6c\\x1b\\x63\\x6f\\xac\\xbc\\xdd\\xcc\\xdb\\xcc\\xb3\\x9f\\x6d\\x2c\\xa4\\x1f\\xd2\\xf7\\xf9\\x15\\x9e\\x97\\x93\\x97\\x22\\x0a\\x7b\\x82\"\n\"\\x80\\xf7\\x64\\x1d\\x7e\\x7e\\xf7\\x53\\x1d\\x2d\\x1d\\xfb\\x05\\xf8\\x40\\x33\\x0a\\xf7\\x4f\\xf7\\x98\\x15\\xf7\\x51\\xfb\\xfe\\x05\\x7c\\x93\\x95\\x83\\x95\"\n\"\\x1b\\x92\\x8e\\x8e\\x93\\x90\\x8a\\x8f\\x87\\x97\\x1f\\xfb\\x24\\xf7\\xf5\\xf7\\x24\\xf7\\xf6\\x05\\x8e\\x92\\x8d\\x94\\x92\\x1a\\x91\\x88\\x8e\\x84\\x81\\x86\"\n\"\\x87\\x78\\x7e\\x1e\\x0e\\xf8\\x32\\xf7\\x98\\x15\\xfb\\x51\\xf7\\xff\\x05\\x9d\\x7f\\x85\\x90\\x81\\x1b\\x84\\x88\\x88\\x85\\x84\\x8d\\x82\\x8e\\x84\\x1f\\xf7\"\n\"\\x24\\xfb\\xf6\\xfb\\x24\\xfb\\xf5\\x05\\x87\\x7f\\x8a\\x87\\x86\\x1a\\x83\\x8e\\x88\\x92\\x95\\x95\\x93\\x9a\\x93\\x1e\\x0e\\xf8\\x97\\xf2\\x15\\xb5\\xf7\\x50\"\n\"\\x05\\x8e\\x97\\x8c\\x95\\x97\\x69\\x1d\\x2a\\x7b\\x7b\\x67\\x1e\\x76\\x4f\\x1d\\x73\\x9d\\x7a\\xa3\\xf7\\x3d\\x1d\\x86\\x8b\\x8a\\xf4\\x1d\\x87\\x78\\x05\\xb7\"\n\"\\x06\\x4b\\x67\\x6b\\x5f\\x57\\x5d\\x0a\\x93\\x90\\x95\\x94\\x97\\x1f\\x9d\\xa3\\x9d\\x98\\xd1\\xb5\\x08\\xad\\xa0\\x98\\x9c\\xa3\\x1a\\x9c\\x81\\x9b\\x7c\\x90\"\n\"\\x1e\\x8e\\x83\\x84\\x8b\\x77\\x1b\\xfb\\x05\\xab\\x15\\x6c\\x4f\\x50\\x7b\\x55\\xf7\\x21\\x0a\\x96\\x99\\x97\\x6c\\x1d\\xac\\xa9\\x88\\x84\\xb3\\x1f\\x0e\\xf8\"\n\"\\x76\\xf8\\x4b\\x15\\x74\\x7f\\x84\\x6f\\x75\\x1f\\x6f\\x75\\x7f\\x7f\\xe7\\x0a\\x5f\\x63\\x1f\\x6d\\x6b\\x80\\x77\\xd1\\x0a\\x57\\xc7\\xb3\\x77\\xb5\\x1b\\xb5\"\n\"\\xab\\x9c\\xb7\\xb1\\x1f\\xae\\xb2\\x93\\x99\\x9f\\x1a\\xaa\\x71\\xa4\\x6b\\x1e\\x8d\\xfb\\x4a\\x15\\x75\\x7f\\x84\\x6f\\x74\\x1f\\x6e\\x75\\x7f\\x80\\xe7\\x0a\"\n\"\\x60\\x63\\x1f\\x6d\\x6a\\x80\\x78\\x77\\x1a\\x6d\\xa6\\x71\\xab\\xa0\\x95\\x91\\xab\\xa6\\x1e\\xa7\\xa3\\x95\\x94\\x92\\x1b\\x91\\x97\\x83\\x7b\\x9e\\x1f\\x57\"\n\"\\xc8\\xb2\\x77\\xb5\\x1b\\xb5\\xab\\x9c\\xb7\\xb1\\x1f\\xae\\xb2\\x93\\x99\\xa0\\x1a\\xa9\\x71\\xa4\\x6b\\x1e\\x0e\\x2d\\x1d\\xa9\\xf8\\xa1\\xee\\x1d\\xd1\\xf7\"\n\"\\x25\\x15\\xa3\\x9b\\x94\\x98\\x9b\\x1a\\x9e\\xf7\\x4a\\x1d\\x7b\\x81\\x7e\\x7b\\x1a\\x78\\x99\\x7e\\x9f\\x96\\x93\\x8e\\x98\\x9d\\x1e\\x0e\\xf7\\x35\\xf7\\x9e\"\n\"\\x15\\xa9\\xb8\\x9a\\xaa\\x9a\\x1a\\x93\\x83\\x91\\x82\\x84\\x87\\x88\\x7e\\x80\\x1e\\x6c\\x68\\x6e\\x74\\x4f\\x69\\x08\\x78\\x81\\x87\\x87\\x84\\x1a\\x85\\x8f\"\n\"\\x85\\x92\\x87\\x1e\\x91\\x88\\x8c\\x8a\\x8f\\x89\\x91\\x88\\x19\\x99\\x82\\xbc\\x6e\\xa3\\x77\\xad\\x64\\x19\\x84\\x91\\x8f\\x89\\x92\\x1b\\x94\\x92\\x92\\x93\"\n\"\\x9a\\x76\\xb5\\x73\\xab\\x1f\\xf7\\xb3\\xa3\\x0a\\x0e\\xf7\\x9b\\xf8\\xae\\x15\\xfc\\x34\\x07\\xa2\\x6c\\x5e\\xa1\\x7c\\x1b\\x83\\x84\\x84\\x82\\x84\\x8d\\x87\"\n\"\\x93\\x85\\x1f\\xb8\\x65\\x9a\\x79\\xb8\\x41\\x08\\x7e\\x92\\x8e\\x88\\x94\\x1b\\x92\\x8f\\x90\\x9c\\x95\\x1f\\xab\\xc3\\xa5\\xab\\xaf\\xa9\\x08\\x98\\x96\\x8e\"\n\"\\x90\\x91\\x1a\\x94\\x85\\x93\\x83\\x7c\\x6b\\x7c\\x6e\\x5d\\x1e\\xf8\\x33\\x07\\x0e\\xf8\\xdd\\xf7\\x9f\\x15\\xfc\\x3c\\x06\\xa3\\xab\\xa0\\xb5\\x9a\\x1a\\x93\"\n\"\\x84\\x92\\x82\\x84\\x87\\x89\\x84\\x85\\x1e\\x64\\x5e\\x78\\x7c\\x41\\x60\\x08\\x7d\\x83\\x88\\x88\\x83\\x1a\\x84\\x8f\\x87\\x9e\\x81\\x1e\\xc6\\x6a\\xaa\\x73\"\n\"\\xa9\\x68\\x08\\x7f\\x95\\x90\\x87\\x91\\x1b\\x95\\x93\\x91\\x93\\x9a\\x7b\\xab\\x6e\\xb7\\x1f\\xf8\\x3c\\x06\\x0e\\xa3\\xf7\\x6b\\x15\\xf8\\x3c\\xa3\\x0a\\xfc\"\n\"\\x3c\\x06\\x0e\\xf7\\xd0\\x7f\\x15\\xf8\\x34\\x07\\x75\\xaa\\xb8\\x75\\x9a\\x1b\\x93\\x92\\x92\\x94\\x92\\x89\\x8f\\x83\\x91\\x1f\\x63\\xac\\x79\\xa0\\x6c\\xbd\"\n\"\\x88\\x8f\\x88\\x8f\\x88\\x91\\x88\\x90\\x88\\x90\\x8a\\x8c\\x08\\xf7\\x16\\x0a\\x69\\x51\\x74\\x6e\\x66\\x6c\\x08\\x7e\\x81\\x88\\x86\\x85\\x1a\\x81\\x91\\x84\"\n\"\\x93\\x9a\\xa9\\x99\\xa9\\xbb\\x1e\\xfc\\x34\\x07\\x0e\\xf7\\xa6\\xf7\\x02\\x15\\xa7\\x5f\\x69\\x9b\\x7c\\x1b\\x84\\x84\\x83\\x82\\x85\\x8f\\x86\\x97\\x80\\x1f\"\n\"\\xae\\x6e\\xa5\\x6b\\xac\\x52\\x08\\x79\\x95\\x8f\\x87\\x92\\x1b\\x92\\x90\\x8e\\x93\\x8f\\x1f\\xb7\\xd4\\x9e\\xa4\\xb8\\xb0\\x08\\x92\\x91\\x8e\\x8f\\x92\\x1a\"\n\"\\x94\\x84\\x92\\x83\\x7c\\x5f\\x75\\x74\\x6b\\x1e\\xf7\\xae\\x07\\x74\\xab\\xb7\\x76\\xa7\\x0a\\xab\\x9a\\xa8\\xb9\\x1e\\x0e\\xf7\\x57\\x63\\x15\\x5f\\xf7\\x6a\"\n\"\\xb7\\x07\\xfb\\x18\\xf7\\x51\\x15\\xa7\\x5f\\x69\\x9b\\x7c\\x1b\\x84\\x84\\x83\\x82\\x85\\x8f\\x86\\x97\\x80\\x1f\\xae\\x70\\xa5\\x6a\\xac\\x52\\x08\\x79\\x95\"\n\"\\x8f\\x87\\x92\\x1b\\x92\\x90\\x8e\\x92\\x8f\\x1f\\xb6\\xd5\\x9f\\xa3\\xb8\\xb0\\x08\\x92\\x91\\x8e\\x8f\\x92\\x1a\\x94\\x84\\x92\\x83\\x7c\\x5e\\x75\\x75\\x6c\"\n\"\\x1e\\xf7\\xad\\x07\\x75\\xaa\\xb8\\x75\\xa7\\x0a\\xac\\x9a\\xa8\\xb8\\x1e\\x0e\\xf7\\x43\\x9a\\x15\\x77\\xab\\xb2\\x81\\xb8\\x1b\\xcd\\xc1\\xa2\\xbb\\xb8\\x1f\"\n\"\\xb2\\xb5\\xa1\\xc0\\xc2\\x1a\\xcd\\x74\\xb3\\x55\\xa7\\x1e\\xc3\\xae\\xa6\\xb6\\xc1\\x1a\\xda\\x4d\\xbf\\x2e\\x4d\\x54\\x73\\x5e\\x63\\x1e\\x6e\\x6a\\x7b\\x62\"\n\"\\x76\\x2d\\xfb\\x10\\xfc\\xc2\\x18\\xf7\\x00\\x06\\xf7\\x1b\\xf8\\x70\\x15\\x98\\x06\\x9b\\x8a\\x05\\xd9\\x8a\\xb1\\x73\\x59\\x1a\\x49\\x5d\\x56\\x51\\x5d\\x67\"\n\"\\x98\\xa5\\x75\\x1e\\xc4\\xf7\\x95\\x05\\xec\\xa0\\xa1\\xa6\\xc4\\x1b\\xad\\x9e\\x7a\\x6b\\x6b\\x75\\x6c\\x67\\x77\\x1f\\x76\\x80\\x7a\\x87\\x6a\\x8a\\x08\\x0e\"\n\"\\x3e\\x0a\\x74\\xf7\\xc0\\x2f\\x1d\\x3e\\x0a\\xfb\\x42\\xf7\\xa4\\x45\\x1d\\xf8\\xd8\\x7a\\x0a\\x9d\\x69\\x5c\\x94\\x55\\x1b\\x2d\\x5a\\x0a\\xfb\\x48\\xf7\\xae\"\n\"\\x60\\x0a\\x3e\\x0a\\xfb\\x2a\\xf7\\xe4\\x5b\\x1d\\xf7\\xbe\\xf7\\x78\\x15\\x39\\xf7\\x59\\x05\\x4c\\x06\\x59\\x6b\\x74\\x65\\x6d\\x9c\\x7e\\xb7\\x1f\\x95\\x06\"\n\"\\xd8\\xfb\\x4f\\xfb\\x62\\xfb\\x8a\\x05\\x79\\x75\\x83\\x7a\\x7a\\x1a\\x72\\xa0\\x79\\xa7\\xa1\\x9f\\x97\\xa3\\x9f\\x1e\\xf7\\x3c\\xf7\\x5c\\xe7\\xfb\\x71\\x05\"\n\"\\xcb\\x06\\xbd\\xaa\\xa2\\xb1\\xa9\\x79\\x98\\x60\\x1f\\x80\\x06\\x35\\xf7\\x67\\xf7\\x4d\\xf7\\x70\\x05\\x9c\\x9f\\x94\\x9e\\x9b\\x1a\\xa4\\x76\\x9d\\x6d\\x73\"\n\"\\x7f\\x84\\x6f\\x73\\x1e\\x0e\\xf7\\xad\\xf8\\x88\\x15\\xfb\\x1e\\xfb\\x07\\xfb\\x03\\xfb\\x1a\\xfb\\x22\\xf7\\x06\\xfb\\x05\\xf7\\x24\\xf7\\x1f\\xf7\\x05\\xf7\"\n\"\\x03\\xf7\\x1c\\xf7\\x1f\\xfb\\x08\\xf7\\x06\\xfb\\x21\\x1f\\x8f\\xfb\\xbe\\x15\\xf5\\x23\\x05\\x72\\x67\\x68\\x80\\x61\\x1b\\x60\\x6e\\x94\\xa3\\x6c\\x1f\\x5d\"\n\"\\xb8\\x15\\x70\\xaf\\x82\\xa6\\xb4\\x1a\\xb7\\x96\\xae\\xa3\\xac\\x1e\\xf7\\x02\\xfb\\x00\\x05\\xe8\\x16\\xf7\\x02\\xf6\\x05\\xa1\\x6d\\x94\\x72\\x66\\x1a\\x5a\"\n\"\\x80\\x66\\x73\\x6a\\x1e\\xfb\\x2c\\xf7\\x29\\x15\\xfb\\x03\\xf7\\x00\\x05\\xa3\\xac\\xae\\x96\\xb5\\x1b\\xb7\\xaa\\x81\\x72\\xae\\x1f\\x0e\\xf8\\x82\\x16\\x9b\"\n\"\\x07\\xfb\\x15\\x9e\\x50\\xce\\xf7\\x18\\x1a\\x9c\\x6e\\x91\\x81\\x94\\x80\\x08\\x68\\xa9\\xba\\x73\\xb5\\x1b\\xd1\\xc2\\xc4\\xd4\\xd1\\x59\\xc2\\x4c\\x78\\x80\"\n\"\\x88\\x7e\\x70\\x1f\\x89\\x8a\\x82\\x86\\x86\\x89\\x08\\xa1\\xaa\\x93\\xa3\\xa8\\x1a\\xd0\\x53\\xc1\\x44\\x44\\x54\\x55\\x45\\x70\\x90\\x7d\\xa5\\x61\\x1e\\x9c\"\n\"\\x68\\x78\\x91\\x76\\x1b\\x4f\\x58\\x52\\x46\\x43\\xc3\\x53\\xd2\\xca\\xc0\\xb1\\xd2\\xad\\x1f\\x8c\\x78\\x05\\x85\\x07\\x8a\\x53\\x6e\\x4c\\x62\\x6a\\x72\\x78\"\n\"\\x79\\x84\\x42\\x7c\\x08\\x7b\\x07\\x0e\\xba\\x1d\\xf8\\x66\\xf7\\x68\\xde\\x1d\\xf9\\x19\\xf8\\x83\\x15\\xa3\\xf7\\x00\\x05\\xca\\x1d\\xcb\\xf7\\xb5\\x05\\x97\"\n\"\\x06\\xaa\\x97\\x8d\\x97\\x99\\x1f\\x99\\x95\\x96\\xa1\\x9c\\x1a\\x95\\x84\\x9a\\x82\\x91\\x1e\\x92\\x82\\x81\\x8d\\x71\\x1b\\xfb\\xbf\\xfb\\x34\\xf7\\x00\\x1d\"\n\"\\x0e\\xf7\\xe7\\xf8\\x41\\x15\\x4d\\x7f\\x62\\x79\\x60\\x6b\\x08\\x45\\x58\\x60\\x3f\\x45\\x1a\\xfb\\x02\\xe2\\x40\\xf7\\x16\\xe5\\xe7\\xb1\\xc9\\xc6\\x1e\\xba\"\n\"\\xbd\\xa7\\xc9\\xc2\\x1a\\xc8\\x70\\xb7\\x43\\xc4\\x1e\\xfb\\x03\\xe2\\x7d\\x99\\x9d\\x1a\\xa4\\xa2\\x96\\xc0\\x1e\\xd9\\x06\\xb2\\xa4\\xa1\\xac\\xa0\\x7c\\x95\"\n\"\\x6b\\x1f\\x4d\\x06\\x48\\x59\\x80\\x75\\x68\\x1f\\x64\\x73\\x6e\\x5f\\x68\\x1a\\x73\\x98\\x75\\xac\\x6d\\x1e\\xbe\\x27\\x15\\xd9\\xbe\\x62\\x4b\\x3c\\x34\\x44\"\n\"\\x28\\x3f\\x58\\xb4\\xc9\\xd9\\xe4\\xd5\\xea\\x1f\\x0e\\xf6\\xf7\\xa2\\x15\\xe1\\x20\\xdc\\xfb\\x09\\xaf\\x47\\xba\\xe0\\xe3\\xf7\\x0f\\xdb\\xeb\\x4d\\xd1\\xfb\"\n\"\\x10\\xf7\\x44\\x6e\\xc4\\x60\\x3a\\x53\\x3c\\xfb\\x06\\xfb\\x23\\x08\\x0e\\xf8\\x62\\xd0\\x1d\\x0e\\x33\\x1d\\xfb\\x4c\\xf8\\x2c\\x2b\\x0a\\x33\\x1d\\x4b\\xf7\"\n\"\\xcc\\x45\\x1d\\x33\\x1d\\x59\\xf8\\x0c\\x15\\x62\\x73\\x0a\\x6d\\x1f\\x0e\\xf8\\xd9\\xf7\\x7b\\x15\\xbe\\xfc\\x8d\\x07\\x8f\\xf7\\x10\\xcd\\xc7\\xf7\\x15\\x88\"\n\"\\x08\\xf7\\xc6\\xbe\\xfb\\xba\\xf7\\x09\\x0a\\x49\\x99\\x50\\xa4\\x65\\x1e\\xa2\\x68\\xae\\x6c\\xac\\x7e\\x08\\x7c\\xaf\\xa7\\x87\\xd4\\x1b\\xf7\\xba\\xbe\\xfb\"\n\"\\xc6\\x06\\xfb\\x14\\x88\\x4a\\xc5\\x85\\xf7\\x0c\\x08\\x90\\x07\\x0e\\x33\\x1d\\xfb\\x47\\xf7\\xf1\\x33\\x0a\\xf7\\x98\\xf7\\xa3\\x15\\x94\\x92\\x8b\\x8b\\x93\"\n\"\\x91\\xa7\\xa2\\x8b\\x8b\\x92\\x8f\\x08\\x9c\\xa6\\xa1\\x91\\xb0\\x1b\\xb9\\xa2\\x7c\\x6c\\x85\\x8a\\x85\\x8a\\x85\\x1f\\x4b\\xfb\\xb0\\x81\\x5c\\x5e\\x6a\\x56\"\n\"\\x8c\\x19\\x29\\x06\\x6a\\x83\\x89\\x7e\\x7b\\x1f\\x7a\\x7e\\x82\\x7b\\x7b\\x1a\\x6c\\x9c\\x7f\\xb7\\x1e\\xf0\\x06\\xf7\\x07\\x8d\\xeb\\xd4\\xa3\\xf4\\xcb\\xf7\"\n\"\\xb4\\x18\\x8e\\x9a\\x8d\\x9b\\x9a\\x1a\\xd3\\x4f\\xba\\x2f\\x58\\x5c\\x7b\\x6c\\x61\\x1e\\x93\\xae\\x05\\x28\\x06\\x57\\x6e\\x75\\x61\\x72\\x99\\x7f\\xae\\x89\"\n\"\\x1f\\x5b\\xfb\\x6f\\x05\\x88\\x06\\x6b\\x83\\x89\\x7e\\x7b\\x1f\\x7a\\x7e\\x82\\x7b\\x7a\\x1a\\x7f\\x90\\x81\\x95\\x81\\x1e\\x83\\x95\\x91\\x89\\xa8\\x1b\\xf7\"\n\"\\x04\\x06\\xab\\x96\\x2a\\x0a\\x9d\\x9b\\x1a\\xa9\\x79\\x97\\x60\\x1e\\x8a\\x06\\x0e\\xf8\\xe2\\x89\\x1d\\xfb\\x02\\xe1\\x45\\xf7\\x1a\\x96\\x97\\x8b\\x8c\\x9c\"\n\"\\x1e\\x59\\x65\\x75\\x67\\x5f\\x5d\\x0a\\xae\\xd9\\xc7\\xe4\\xab\\x1f\\xb3\\x9a\\x9b\\x9d\\xa7\\x1a\\xa3\\x7a\\x9c\\x73\\x80\\x7f\\x89\\x88\\x7e\\x1e\\x74\\x29\"\n\"\\x72\\x87\\x5d\\x1b\\x37\\x60\\xa3\\xbf\\x48\\x1d\\x0e\\xf8\\x58\\xf7\\xa2\\x15\\x89\\x75\\x7f\\x8a\\x75\\x1b\\x55\\x66\\x9b\\xa2\\x9f\\xae\\x9a\\xb9\\x9d\\xa5\"\n\"\\x89\\x87\\x9c\\x1f\\x87\\xa1\\x8c\\x8b\\x92\\x1b\\xa8\\xa5\\xa5\\xa7\\x99\\x84\\x96\\x7d\\x92\\x1f\\x96\\x74\\x5c\\x94\\x64\\x1b\\xfb\\x06\\x2f\\x4c\\x3e\\x73\"\n\"\\x94\\x7c\\xaa\\x6c\\x1f\\x4b\\x6e\\x64\\x59\\x57\\x1a\\x48\\xce\\x5f\\xf0\\xbd\\xd5\\x9b\\x9b\\xa8\\x1e\\x9d\\x95\\x96\\xa0\\xa1\\x1a\\x9e\\x7c\\x9a\\x79\\x84\"\n\"\\x81\\x8a\\x89\\x81\\x1e\\x81\\x5c\\x76\\x88\\x6e\\x1b\\x5b\\x6b\\x9a\\xa1\\xa7\\xc7\\xa3\\xd2\\x9e\\x9b\\x8a\\x89\\x9d\\x1f\\x0e\\xf8\\x26\\xf7\\xa1\\x15\\x65\"\n\"\\x06\\x3f\\x5f\\x97\\xa0\\x9e\\xaf\\x98\\xc0\\xbd\\x9b\\x83\\x6c\\x9c\\x1f\\x6b\\x9b\\x98\\x81\\xa4\\x1b\\xa8\\x9d\\x9d\\xaf\\x92\\x1f\\x8e\\xa0\\x8d\\x93\\x91\"\n\"\\x9d\\x08\\x90\\x9d\\x8d\\x95\\x94\\x1a\\xa6\\x75\\x9e\\x6c\\x76\\x7e\\x85\\x7b\\x7f\\x1e\\x9b\\x6a\\x6b\\x91\\x5d\\x1b\\xfb\\x0b\\x3e\\x57\\x3a\\x74\\x90\\x79\"\n\"\\x9a\\x74\\x1f\\x4f\\x6a\\x71\\x65\\x58\\x1a\\x3c\\xd5\\x55\\xf7\\x01\\xc3\\xd1\\x96\\x9a\\xb1\\x1e\\xb1\\x99\\x9b\\x9d\\xa6\\x1a\\xa7\\x75\\xa2\\x70\\x81\\x7d\"\n\"\\x88\\x85\\x77\\x1e\\x78\\x4c\\x74\\x87\\x66\\x1b\\x5f\\x6a\\x99\\x9c\\xa5\\xcc\\xa4\\xcf\\x9c\\xa3\\x8a\\x8a\\x99\\x1f\\x8f\\x06\\x8e\\x06\\x91\\x8a\\x05\\xf7\"\n\"\\x00\\xf8\\x21\\x15\\x9d\\x96\\x93\\x98\\x22\\x0a\\x7c\\x81\\x81\\xf7\\x10\\x1d\\xf7\\x00\\xf7\\xdb\\x15\\x70\\x83\\xed\\x0a\\x84\\x96\\x98\\x88\\xa5\\x1b\\xf8\"\n\"\\x14\\x06\\xa2\\x98\\x8d\\x91\\x95\\x47\\x1d\\xfc\\x14\\xfb\\x42\\x15\\x70\\x83\\x8a\\x84\\x80\\x1f\\x7a\\x81\\x80\\x79\\x4c\\x1d\\xf8\\x14\\x06\\xa2\\x99\\x8d\"\n\"\\x91\\x94\\x47\\x1d\\xfc\\x14\\xf7\\xef\\x15\\x70\\x83\\x8a\\x84\\x80\\x1f\\x7a\\x81\\x80\\x79\\x4c\\x1d\\xf8\\x14\\x06\\xa2\\x98\\x8d\\x91\\x95\\x47\\x1d\\x0e\"\n\"\\xf8\\x71\\xf7\\x54\\x15\\x8a\\xcf\\x87\\xa8\\x7d\\xaa\\x08\\xcc\\x6e\\x46\\xb2\\x36\\x1b\\xfb\\x14\\x3b\\x37\\xfb\\x1a\\xfb\\x1a\\xd8\\x3c\\xf7\\x15\\xeb\\xce\"\n\"\\xb4\\xd7\\xa5\\x1f\\x8c\\x8e\\x8d\\x8f\\x05\\x5e\\x06\\x8a\\x89\\x8b\\x8a\\x88\\x87\\x08\\x5a\\x72\\x5a\\x70\\x4a\\x1b\\x41\\x69\\xa1\\xc8\\x77\\x1f\\xd6\\x07\"\n\"\\xf7\\x96\\xb4\\x15\\xfb\\x94\\xd3\\x06\\xc5\\xa9\\xab\\xa0\\xc8\\x1b\\xcb\\xbd\\x6d\\x5a\\x9e\\x1f\\x0e\\xc3\\x1d\\x0e\\xc3\\x1d\\xf7\\x75\\xf7\\x39\\x15\\x9e\"\n\"\\x97\\x93\\x97\\x22\\x0a\\x7b\\x82\\x80\\x87\\x82\\x7e\\x1e\\xfb\\x12\\x38\\x05\\x79\\x7f\\x82\\x7f\\x7d\\x1a\\x7c\\x96\\x80\\x9b\\x94\\x26\\x0a\\xf7\\xb2\\xf8\"\n\"\\x8a\\xd6\\x1d\\xf7\\xbb\\xf8\\x98\\xd6\\x1d\\x0e\\xf8\\x30\\xf7\\x9e\\x15\\xfb\\x6b\\xfb\\xb9\\x58\\xf7\\xed\\xf8\\xc6\\xfb\\xed\\x58\\xf7\\xb9\\xfb\\x56\\xfb\"\n\"\\xb9\\x58\\x07\\x0e\\xf7\\xd6\\xf7\\xac\\x15\\xf6\\x94\\xe0\\xe9\\xf7\\x01\\x1a\\xf7\\x0a\\x2b\\xea\\xfb\\x0a\\xfb\\x0a\\x2c\\x2c\\xfb\\x0a\\xfb\\x01\\xe0\\x2d\"\n\"\\xf5\\x82\\x1e\\x32\\xfb\\x29\\x64\\xf7\\x29\\xfb\\x2c\\xb7\\xf7\\x2c\\xf7\\x28\\xb2\\xfb\\x28\\x07\\x72\\xf8\\x69\\x15\\xeb\\xd8\\x40\\x2f\\x2d\\x3f\\x3f\\x2d\"\n\"\\x2e\\x3f\\xd6\\xe9\\xe6\\xd7\\xd8\\xe5\\x1f\\x0e\\xf7\\x50\\xf7\\x7c\\x15\\xa8\\x89\\x06\\x8a\\x8a\\x87\\x89\\x86\\x1e\\x8a\\x86\\x8a\\x86\\x86\\x1a\\x71\\x9d\"\n\"\\x79\\xa5\\x9c\\x9d\\x93\\x98\\x98\\x1e\\x92\\x92\\x94\\x9e\\x8f\\x9f\\xa3\\xf7\\x01\\x18\\x8d\\x95\\x8d\\x98\\x91\\x1a\\xa0\\x78\\x9c\\x73\\x6c\\x6e\\x73\\x6c\"\n\"\\x85\\x1e\\x8a\\x85\\x8a\\x88\\x8a\\x1a\\x8a\\x87\\x05\\x6e\\x06\\xa7\\xf7\\x12\\x05\\xf7\\x3c\\x06\\x88\\x80\\x05\\x89\\x80\\x89\\x7e\\x85\\x1a\\x76\\x9f\\x7b\"\n\"\\xa4\\x9a\\x9c\\x92\\x99\\x9a\\x1e\\x97\\x96\\x8e\\x92\\x90\\xa5\\xa5\\xf7\\x08\\x18\\xfc\\x10\\x06\\x6e\\x7d\\x88\\x80\\x7e\\x1f\\x7c\\x80\\x81\\x77\\x7b\\x1a\"\n\"\\x6f\\x9c\\x7d\\xb0\\x1e\\x3c\\xfb\\xfa\\x05\\x71\\x80\\x88\\x7f\\x7c\\x1f\\x7a\\x7e\\x82\\x7b\\x7a\\x1a\\x7f\\xab\\x1d\\x91\\x89\\xa8\\x1b\\xf7\\x37\\x06\\xaa\"\n\"\\x98\\x8f\\x96\\x9a\\x1f\\x98\\x96\\x95\\x9e\\x9a\\x1a\\xaa\\x7b\\x97\\x5f\\x1e\\x50\\x06\\xf7\\xd6\\x16\\x99\\xc9\\x92\\x92\\x05\\xe4\\xdc\\x8b\\x8b\\x9c\\x1b\"\n\"\\x93\\x94\\x86\\x80\\x94\\x1f\\x7d\\x98\\x92\\x87\\x99\\x1b\\xa9\\xa3\\xa6\\xac\\xb4\\x61\\xb0\\x5d\\x67\\x75\\x7e\\x5b\\x60\\x1f\\x96\\xbb\\x05\\x23\\x06\\x6e\"\n\"\\x7d\\x87\\x81\\x7e\\x1f\\x7c\\x80\\x81\\x77\\x7b\\x1a\\x6f\\x9c\\x7d\\xb0\\x1e\\x6b\\xfb\\x26\\x05\\x71\\x82\\x8a\\x84\\x80\\x1f\\x73\\x7e\\x7e\\x78\\x76\\x1a\"\n\"\\x7f\\xab\\x1d\\x92\\x89\\xa7\\x1b\\xf7\\x40\\x06\\xaa\\x96\\x4f\\x0a\\xa9\\x79\\x97\\x61\\x1e\\x0e\\xf7\\xa9\\xf7\\x23\\x15\\x42\\xf7\\xae\\x05\\x4d\\x06\\x58\"\n\"\\x6b\\x73\\x65\\x6d\\x9a\\x81\\xb8\\x8a\\x1f\\xdc\\xfb\\xd0\\x05\\x6c\\x56\\x7e\\x62\\x5c\\x1a\\x5c\\xa2\\x6e\\xb1\\xc6\\xa6\\xc8\\xf7\\x25\\x91\\x1e\\xf7\\x4d\"\n\"\\xf7\\xb5\\x05\\x9e\\x97\\x9c\\x9e\\x90\\x1b\\x8c\\x06\\x8a\\x8e\\x8b\\x8f\\x8a\\x1e\\x8d\\x06\\x8a\\x8d\\x8d\\x8b\\x8e\\x1b\\xa7\\xa3\\xa3\\xa6\\xad\\x71\\xa0\"\n\"\\x61\\x53\\x69\\x70\\x34\\x53\\x1f\\x0e\\x70\\x1d\\x63\\xf7\\xdd\\x2b\\x0a\\xc0\\x1d\\xdf\\xf7\\x87\\xaf\\x0a\\x70\\x1d\\xf7\\x56\\xf7\\xb7\\x15\\x8f\\x8f\\x8e\"\n\"\\x8f\\x8e\\x8e\\x8c\\x8c\\x19\\x93\\x95\\x8e\\x92\\x96\\x1a\\x9d\\x7d\\x98\\x78\\x7b\\x7c\\x83\\x7b\\x7d\\x1e\\x23\\xfb\\x0e\\x05\\x7b\\x79\\x86\\x82\\x7d\\x1a\"\n\"\\x7b\\x9a\\x7d\\x9d\\x9a\\x9b\\x94\\x9c\\x99\\x1e\\x0e\\xc0\\x1d\\xe9\\xf7\\xbd\\x5b\\x1d\\xf8\\xee\\xf7\\xf8\\x15\\xfc\\x81\\xf7\\x65\\x05\\x90\\x7e\\x80\\x8e\"\n\"\\x82\\x1b\\x7b\\x78\\x7f\\x7b\\x83\\x1f\\x8a\\x89\\x05\\x88\\x85\\x89\\x84\\x83\\x1a\\x75\\x97\\x7d\\xa6\\x7f\\x1e\\xf7\\xb2\\xfb\\x0b\\xfb\\xb2\\xfb\\x0f\\x05\"\n\"\\x70\\x7f\\x7f\\x7d\\x75\\x1a\\x85\\x8d\\x83\\x8e\\x84\\x1e\\x8c\\x8a\\x05\\x7a\\x93\\x9e\\x7f\\x9c\\x1b\\x93\\x97\\x8e\\x90\\x97\\x1f\\x7f\\x5f\\x15\\x65\\x74\"\n\"\\x79\\x6d\\x6d\\xa2\\x79\\xb1\\x1f\\xf8\\x1e\\x06\\xb0\\xa2\\x9d\\xa9\\xa9\\x74\\x9d\\x66\\x1f\\x0e\\xf7\\x94\\xf8\\x67\\x15\\xf7\\x02\\x06\\xad\\xa0\\x9d\\xa8\"\n\"\\x9e\\x7e\\x95\\x70\\x1f\\xfb\\x00\\x06\\x8d\\x98\\x8c\\x91\\x93\\x1a\\xa7\\x7d\\x99\\x6f\\x66\\x77\\x77\\x5a\\x7e\\x1e\\x5e\\x06\\x69\\x76\\x79\\x6e\\x77\\x98\"\n\"\\x82\\xa6\\x1f\\xb6\\x06\\x3b\\xfc\\x00\\x54\\x0a\\xf7\\xb3\\xf8\\xef\\x15\\xfb\\x0d\\x06\\x6c\\x80\\x2a\\x1d\\x7b\\x1a\\x7a\\x96\\x7b\\x99\\xf7\\x6e\\x1d\\x32\"\n\"\\xfc\\x21\\x05\\xf7\\x05\\x0a\\x6d\\x9d\\x7f\\xb5\\x1e\\xf7\\x04\\x06\\xa9\\x99\\x29\\x1d\\x9c\\x80\\x9c\\x7d\\x32\\x1d\\x8b\\x77\\x4e\\x0a\\xcd\\xa3\\x96\\xba\"\n\"\\x1b\\xb7\\xbe\\x0a\\xa8\\x9a\\x8f\\x96\\x98\\x1f\\x9b\\x97\\x94\\x9d\\x9b\\x1a\\x9d\\xf6\\x1d\\xf7\\x44\\xf7\\xdd\\xf7\\x05\\x1d\\x77\\x86\\x85\\x4d\\x1d\\x26\"\n\"\\x0a\\xf7\\xc0\\x75\\x15\\x9b\\xd2\\xba\\xdb\\xe3\\xf7\\x02\\x08\\xd5\\xe9\\xa4\\xbf\\xc9\\x1a\\xca\\x55\\xc0\\x4a\\x4b\\x5d\\x62\\x3f\\x76\\x1e\\xd9\\x72\\x5f\"\n\"\\xb2\\x4b\\x1b\\x4a\\x58\\x56\\x47\\x57\\x9b\\x68\\xcc\\x33\\x1f\\xf7\\x09\\xfb\\x30\\xa9\\x56\\xa0\\x3b\\x08\\x0e\\xd1\\x16\\xf8\\x61\\xf7\\xcb\\x06\\xfb\\x7b\"\n\"\\xf7\\x92\\xfb\\x7a\\xfb\\x92\\x05\\xbd\\xfb\\x99\\x15\\xf7\\x85\\x07\\xf7\\x48\\xf7\\x5a\\xf7\\x49\\xfb\\x5a\\x05\\xfb\\x85\\x07\\x0e\\xf8\\x26\\x35\\x1d\\x44\"\n\"\\xa9\\x0a\\xf7\\xee\\xf8\\x3d\\x15\\xfb\\x44\\x06\\x6a\\x7c\\x0a\\x79\\x7a\\x1a\\x6f\\x9e\\x7e\\xb6\\x1e\\xcd\\x2e\\x0a\\x47\\x25\\x1d\\x6e\\x9d\\x7e\\xb6\\x1e\"\n\"\\xf7\\x84\\x06\\xa7\\x9a\\x8f\\x96\\x99\\x83\\x1d\\x4c\\x06\\xf3\\x5d\\x1d\\xf7\\x5c\\xfb\\x40\\x84\\x0a\\x55\\x8c\\x19\\xfb\\x03\\x26\\x1d\\xf7\\x05\\x06\\xf7\"\n\"\\x04\\xf1\\xd9\\xf1\\xa0\\x1f\\xed\\xf8\\x4d\\x05\\xfb\\x6b\\x25\\x0a\\xf7\\x6e\\xf7\\xac\\x15\\xfb\\x13\\x06\\x73\\xfb\\x00\\x05\\xf7\\x13\\x06\\x0e\\xf8\\x54\"\n\"\\x35\\x1d\\x49\\xf8\\x8a\\x33\\x0a\\xf7\\xc0\\xf7\\x8a\\x15\\x52\\xba\\xc8\\x69\\xbf\\x1b\\xa7\\xa5\\x93\\x98\\x9f\\x1f\\xaa\\xa1\\xa2\\xba\\xb2\\x1a\\xd0\\x50\"\n\"\\xc3\\x43\\x54\\x4f\\x68\\x54\\x61\\x1e\\xc6\\x59\\x56\\xa9\\x55\\x1b\\x43\\x50\\x52\\x44\\x47\\xc4\\x52\\xd1\\xc7\\xb8\\xa4\\xca\\xc1\\x1f\\xae\\xb2\\x15\\xb9\"\n\"\\xab\\xbd\\xa9\\xb6\\x1b\\xba\\xaa\\x6d\\x5e\\x5e\\x6c\\x6b\\x61\\x77\\x76\\x91\\x97\\x75\\x1f\\x7a\\x94\\x8b\\x8b\\x5c\\xb9\\x08\\x47\\x8f\\x15\\x5c\\x66\\x58\"\n\"\\x6d\\x61\\x1b\\x5e\\x6e\\xaa\\xba\\xb6\\xaa\\xa9\\xb8\\xb4\\xb3\\x74\\x58\\xba\\x1f\\x0e\\xf7\\xa7\\x5c\\x15\\x44\\x84\\x6f\\x7b\\x84\\x88\\x8d\\x99\\x83\\x1e\"\n\"\\x9a\\x80\\x7c\\x94\\x7a\\x1b\\x71\\x79\\x7a\\x72\\x6d\\xa5\\x76\\xb0\\xa7\\xa7\\x98\\xa3\\xa2\\x1f\\xa9\\xab\\x93\\xa9\\xe4\\x1a\\xf8\\x8a\\x07\\xca\\x92\\xa6\"\n\"\\x9d\\xc0\\x0a\\xf7\\xda\\xf9\\x0e\\x15\\x57\\xfd\\x35\\x06\\x4b\\x83\\x70\\x7a\\x86\\x87\\x8f\\x94\\x85\\x1e\\xa0\\x7d\\x81\\x92\\x77\\x1b\\x72\\x78\\x7a\\x72\"\n\"\\x6e\\xa4\\x75\\xae\\xa3\\xa4\\x94\\x9a\\x9f\\x1f\\xb0\\xa8\\x99\\xb6\\xe4\\x1a\\x0e\\xf7\\xa6\\xfb\\x4a\\x15\\xbf\\xf9\\x35\\x06\\xca\\x93\\xa6\\x9c\\xc0\\x0a\"\n\"\\xf8\\xad\\xf7\\x74\\x15\\xf7\\x2a\\x86\\xae\\x70\\xb8\\x1e\\xce\\x61\\x3e\\xb4\\x35\\x1b\\x57\\x5b\\x7c\\x70\\x62\\x1f\\x58\\x68\\x6e\\x5d\\x81\\x4d\\x08\\x86\"\n\"\\x69\\x8a\\x75\\x2a\\x1a\\xfb\\x52\\x07\\x75\\x94\\x7f\\x9c\\x9b\\x95\\x98\\xa0\\x1e\\xf7\\x55\\x07\\x8c\\xe3\\x8b\\x8b\\x95\\x1a\\x8e\\xbf\\x92\\xa9\\x9a\\xa1\"\n\"\\x08\\xbd\\xad\\xc8\\xab\\xcb\\x1b\\xc8\\xc6\\x6e\\x5e\\xab\\x1f\\xa6\\x66\\x91\\x66\\xfb\\x1c\\x1a\\xfb\\x55\\x07\\x75\\x94\\x7f\\x9b\\x9b\\x96\\x99\\x9f\\x1e\"\n\"\\x0e\\xf7\\xc5\\xf8\\xc7\\x15\\xfb\\x33\\xfb\\x13\\xfb\\x10\\xfb\\x2f\\xfb\\x32\\xf7\\x11\\xfb\\x12\\xf7\\x31\\xf7\\x2f\\xf7\\x12\\xf7\\x12\\xf7\\x30\\xf7\\x2d\"\n\"\\xfb\\x12\\xf7\\x14\\xfb\\x2b\\x1f\\x30\\xfb\\x34\\xf7\\x2c\\x1d\\xf7\\xa2\\x34\\x15\\x86\\x48\\x82\\x6c\\x74\\x69\\x08\\x5a\\x6a\\x5a\\x72\\x4b\\x1b\\x4f\\x5e\"\n\"\\xa0\\xb4\\x6a\\x1f\\x6e\\xb0\\x80\\xad\\x85\\xd4\\x95\\x63\\x93\\x7a\\x9e\\x75\\x08\\x61\\xae\\xbc\\x76\\xca\\x1b\\xc9\\xbc\\xa0\\xb5\\xae\\x1f\\x9e\\xa1\\x93\"\n\"\\x9c\\x95\\xb3\\x08\\x29\\xe2\\xf7\\x2c\\x1d\\x0e\\xf8\\x54\\x67\\x1d\\x88\\x7f\\xb6\\x0a\\xf7\\x9c\\xe5\\x1d\\xab\\xac\\xbb\\xa9\\x1f\\xce\\xb4\\x8b\\x8b\\x95\"\n\"\\x99\\x08\\x91\\x93\\x8f\\x97\\x95\\x1a\\x9c\\x81\\x9b\\x7c\\x69\\x0a\\xfb\\x08\\x06\\xec\\x5d\\x1d\\x0e\\xa5\\x0a\\x0e\\xf7\\xa4\\xf8\\xe4\\x15\\x69\\x6c\\x6e\"\n\"\\x6a\\x73\\x68\\x0a\\x9e\\x79\\xa4\\xae\\xaa\\xa9\\xab\\xa4\\x79\\x9c\\x70\\x1f\\xfb\\x99\\xfc\\x67\\x15\\x86\\x74\\x89\\x7c\\x7e\\x1a\\x56\\xb6\\x67\\xcc\\xc6\"\n\"\\xb5\\xa8\\xb4\\xa4\\x78\\x9e\\x73\\x84\\x83\\x89\\x87\\x81\\xf7\\x71\\x1d\\x93\\x8d\\x8b\\x8b\\x8d\\x95\\x1f\\xc2\\xf7\\x93\\x05\\x8d\\x94\\x8d\\x99\\x92\\x1a\"\n\"\\xa2\\xf7\\x1d\\x0a\\xf8\\x42\\xd0\\x1d\\xfb\\xd2\\xfc\\x53\\x15\\x87\\x77\\x89\\x7b\\x7c\\x1a\\x55\\xb5\\x68\\xcb\\xc6\\xb5\\xa8\\xb4\\xa4\\x79\\x9e\\x73\\x83\"\n\"\\x83\\xf7\\x3b\\x1d\\x8e\\x8d\\x92\\x1f\\xc2\\xf7\\x93\\x05\\x8d\\x96\\x8d\\x96\\x92\\x1a\\xa3\\xf7\\x1d\\x0a\\xa5\\x0a\\xf7\\x40\\xf7\\x58\\x15\\x9d\\x97\\x94\"\n\"\\xf7\\x07\\x1d\\x26\\x0a\\xf8\\x54\\x67\\x1d\\x89\\x7e\\x7c\\xad\\x1d\\x6f\\x9e\\x7e\\xb6\\x1e\\xd4\\x2e\\x0a\\xfb\\x0a\\x25\\x1d\\x6e\\x9d\\x7e\\xb6\\x1e\\xf7\"\n\"\\xeb\\x06\\xa8\\x9a\\x8f\\x96\\x98\\x83\\x1d\\xfb\\x08\\x06\\xf7\\x41\\xf8\\xa7\\x15\\x7d\\xf7\\x37\\x1d\\xa8\\x5f\\x7a\\x93\\x74\\x1b\\x6c\\x6b\\x7c\\x6e\\x6b\"\n\"\\x1f\\x6f\\x71\\x7e\\x78\\x7a\\x1a\\x7c\\xf7\\x2b\\x0a\\xaf\\x94\\x8e\\x1d\\xa0\\xa1\\x94\\x99\\x98\\x1a\\x99\\x7d\\x97\\x7b\\x1e\\x0e\\xf8\\x2d\\xa4\\x0a\\xf7\"\n\"\\x47\\xf7\\x94\\x15\\xe4\\x31\\x05\\x81\\xf7\\x1f\\x1d\\xfb\\x10\\x05\\x6e\\x77\\x87\\x1d\\xf7\\x9c\\xf7\\xd6\\x15\\xb4\\x90\\xa4\\xa1\\xac\\x1a\\xaa\\x7a\\x97\"\n\"\\x5f\\x1e\\x26\\x06\\x59\\x6b\\x72\\x65\\x6f\\x9e\\x7e\\xb5\\x1f\\x90\\x06\\x5b\\xfb\\x6d\\x05\\x5a\\x89\\x6e\\x74\\x66\\x1a\\x6e\\x9d\\x7e\\xb6\\x1e\\xf7\\x05\"\n\"\\x06\\xbd\\xab\\xa3\\xb0\\xa9\\x79\\x98\\x60\\x1f\\x84\\x06\\x9a\\xcd\\xc5\\x8a\\xb5\\x59\\xad\\xfb\\x01\\x19\\x87\\x8c\\x88\\x8c\\x88\\x1e\\xda\\x06\\xbd\\xab\"\n\"\\xa2\\xb1\\xa9\\x79\\x98\\x60\\x1f\\x75\\x06\\x7c\\xb4\\x70\\xb5\\x6a\\xa8\\xf7\\x29\\xf4\\x18\\xbc\\x8c\\xaa\\xa2\\xb0\\x1a\\xa9\\x79\\x98\\x60\\x1e\\x50\\x06\"\n\"\\xfb\\x78\\xfb\\x3a\\x05\\x0e\\x8e\\x0a\\xf5\\xfb\\x0b\\x15\\x8c\\x8c\\x8c\\x8c\\x8d\\x8c\\x8e\\x64\\x0a\\x7d\\xf7\\x0f\\x0a\\x7a\\x79\\x87\\x83\\x65\\x0a\\xf7\"\n\"\\x92\\xf7\\x32\\x15\\x9b\\x96\\xda\\x39\\x05\\x7b\\x7c\\x84\\x7e\\x7a\\x1a\\x6e\\x9d\\x7e\\xb5\\x1e\\xf7\\x0b\\x20\\x0a\\x9c\\x1a\\x97\\x86\\x97\\x81\\x93\\x1e\"\n\"\\x93\\x82\\x82\\x8c\\x6f\\xd4\\x0a\\x9d\\x1a\\xa8\\x7a\\x97\\x5f\\x1e\\xfb\\x04\\x82\\x0a\\x7e\\x82\\x7b\\x79\\x1a\\x81\\x8c\\x86\\x91\\x82\\x1e\\x3a\\x56\\xaa\"\n\"\\xf7\\x1f\\x05\\xfb\\x0d\\x06\\x6d\\x7f\\x88\\x80\\xf7\\x0e\\x0a\\x96\\x06\\x5a\\xfb\\x6e\\x05\\x7f\\x06\\x6b\\x80\\x88\\x7f\\x7c\\x1f\\x7c\\x7e\\x82\\x7a\\x7a\"\n\"\\x1a\\x6e\\x9d\\x7e\\xb5\\x1e\\xf7\\x0c\\x06\\x0e\\x43\\x1d\\xf7\\x56\\x30\\x0a\\xcd\\xf2\\x15\\x60\\x8a\\x6c\\x73\\x69\\x1a\\x6d\\x9e\\x7d\\xb5\\x1e\\xf0\\x06\"\n\"\\xbd\\xab\\xa3\\xb0\\xa3\\x7f\\x98\\x70\\x90\\x1f\\xf7\\x0f\\xf7\\x3b\\xc8\\xfb\\x3b\\x05\\x64\\x85\\x73\\x74\\x6b\\x1a\\x6d\\x9c\\x7f\\xb8\\x1e\\xe7\\x06\\xbd\"\n\"\\xab\\xa2\\xb0\\xa9\\x7a\\x98\\x61\\x1f\\xfb\\x47\\xf8\\x88\\x05\\x26\\xf7\\x6d\\x1d\\xb8\\x06\\xb1\\xfb\\x00\\x05\\x0e\\x43\\x1d\\xf7\\xc5\\xf8\\x50\\xde\\x1d\"\n\"\\x43\\x1d\\x56\\xfb\\x72\\x23\\x1d\\x43\\x1d\\xf7\\x73\\xf7\\xc0\\x15\\x60\\x60\\x64\\x64\\x6b\\xf7\\x2e\\x0a\\xb3\\xb2\\xab\\x73\\xa2\\x69\\x1f\\x82\\x06\\x0e\"\n\"\\xf7\\x7d\\xf7\\xf7\\x15\\xf7\\xb1\\xf7\\x0b\\x05\\xa6\\x97\\x97\\x99\\xa1\\x1a\\x92\\x89\\x92\\x88\\x92\\x1e\\x8a\\x8d\\x05\\x9a\\x84\\x78\\x98\\x7a\\x1b\\x82\"\n\"\\x80\\x88\\x86\\x7e\\x1f\\xfc\\x80\\xfb\\x65\\xf8\\x80\\xfb\\x6b\\x05\\x86\\x97\\x97\\x88\\x93\\x1b\\x9c\\x9f\\x98\\x9b\\x92\\x1f\\x8c\\x8c\\x05\\x8e\\x92\\x8d\"\n\"\\x93\\x91\\x1a\\xa1\\x7f\\x99\\x70\\x97\\x1e\\x6c\\xfb\\x7b\\x15\\xb0\\xa2\\x9d\\xa9\\xa9\\x75\\x9d\\x65\\x1f\\xfc\\x1d\\x06\\x65\\x74\\x79\\x6d\\x6d\\xa2\\x79\"\n\"\\xb1\\x1f\\x0e\\xf7\\x2f\\xf7\\x4b\\x15\\x78\\x58\\x74\\x73\\x69\\x87\\x08\\x60\\x83\\x75\\x76\\x6a\\x1a\\x6e\\x9d\\x7e\\xb6\\x1e\\xf7\\xd4\\x06\\xb9\\xa9\\x95\"\n\"\\xa3\\xa4\\x1f\\x9f\\x9d\\x98\\xa9\\xa4\\x1a\\xa3\\x79\\x9b\\x70\\x6e\\x75\\x7c\\x6f\\x80\\x1e\\xfb\\x55\\x06\\x9c\\xa6\\x96\\xa2\\x95\\xa8\\x08\\xf7\\x04\\x06\"\n\"\\xa3\\x9c\\x9a\\xa1\\x9c\\x82\\x92\\x77\\x1f\\xfb\\x06\\x06\\x8c\\xa5\\x05\\xf7\\x0c\\x06\\xa3\\x9c\\x9a\\xa0\\x9d\\x82\\x92\\x77\\x1f\\xfb\\x1a\\x06\\x89\\xaf\"\n\"\\x8a\\xa0\\x91\\x1a\\xbd\\xac\\xab\\xbe\\xa5\\x9c\\x84\\x7b\\x97\\x1e\\x71\\x9d\\x91\\x88\\x9f\\x1b\\xad\\xaa\\xa9\\xac\\xbb\\x47\\xb7\\x41\\xfb\\x0c\\x2a\\x30\"\n\"\\xfb\\x06\\x81\\x8c\\x84\\x8d\\x71\\x1f\\x57\\x06\\x72\\x7b\\x7d\\x75\\x7a\\x94\\x83\\x9f\\x1f\\xcf\\x06\\x8a\\x71\\x05\\x41\\x06\\x72\\x7b\\x7d\\x75\\x79\\x94\"\n\"\\x84\\x9f\\x1f\\x0e\\xf7\\xd9\\xf2\\x15\\xd9\\xf7\\xf4\\x05\\xa9\\x92\\xa8\\x99\\xc3\\x1b\\xab\\xb2\\x87\\x85\\xb1\\x1f\\x89\\x97\\x95\\x8a\\x92\\x1b\\xaa\\xaa\"\n\"\\xaa\\xaa\\x9f\\x7f\\x98\\x73\\x92\\x1f\\x93\\x6c\\x4e\\x92\\x61\\x1b\\xfb\\x0e\\x33\\x53\\x31\\x77\\x1f\\x84\\x6b\\x05\\x60\\x06\\xe9\\x0a\\xb4\\x39\\x0a\\x54\"\n\"\\x8a\\x1d\\x9d\\x7f\\xb5\\x1e\\xf7\\xbe\\x7a\\x1d\\x0e\\xf7\\xe4\\xf8\\x31\\x15\\x91\\x75\\x77\\x8e\\x76\\x1b\\xfb\\x0b\\x2c\\x2c\\xfb\\x0a\\xfb\\x0a\\xea\\x2c\"\n\"\\xf7\\x0a\\xf7\\x0a\\xea\\xea\\xf7\\x0a\\xdb\\x5e\\xd4\\x45\\xb0\\x1f\\xe3\\xf7\\x53\\x05\\x61\\xaa\\xaa\\x6d\\x95\\x1b\\x92\\x8f\\x8f\\x90\\x8f\\x89\\x8f\\x85\"\n\"\\x95\\x1f\\x75\\xad\\x78\\xc0\\x88\\xaf\\x08\\x9e\\x8a\\x8a\\x8e\\x85\\x1b\\x87\\x87\\x89\\x83\\x81\\x1f\\x78\\x7a\\x4a\\x73\\x67\\x88\\x08\\x79\\x88\\x87\\x89\"\n\"\\x83\\x1a\\x80\\xa3\\x84\\xb2\\x1e\\x9f\\x06\\x9f\\x8c\\x05\\x8d\\x06\\xfb\\x31\\xfb\\x79\\x15\\xea\\xd8\\x40\\x2f\\x2d\\x40\\x3f\\x2d\\x2e\\x3f\\xd6\\xe8\\xe7\"\n\"\\xd7\\xd8\\xe5\\x1f\\x0e\\xf7\\xb5\\xf7\\xc4\\x15\\xe4\\xf7\\x58\\x05\\x97\\xa6\\x8e\\x94\\x86\\x1d\\x0e\\xf7\\xa6\\xf7\\x28\\x15\\x90\\x7e\\x7a\\x8f\\x7d\\x1b\"\n\"\\x57\\x5d\\x5e\\x59\\x6e\\xa1\\x78\\xad\\xd3\\xbe\\xc2\\xda\\x1f\\xf7\\x8b\\x07\\xba\\x84\\xb3\\x4b\\x46\\x1a\\x60\\x83\\x69\\x77\\x5e\\x1e\\xa2\\x06\\xa9\\xb0\"\n\"\\x9b\\xb9\\xbc\\x1a\\xca\\x73\\xc7\\x59\\xc7\\x1e\\x61\\xbe\\x8a\\x8c\\x86\\x90\\x85\\x94\\x19\\xbc\\x66\\x07\\x0e\\xf7\\xd8\\xf8\\x71\\x15\\xa1\\x70\\xa2\\x77\"\n\"\\xa2\\x7e\\xc8\\x6a\\x96\\x84\\x90\\x82\\x08\\x92\\x7f\\x8f\\x78\\x74\\x1a\\xfb\\x89\\x07\\x92\\x79\\x71\\x90\\x76\\x1b\\x3f\\x48\\x53\\x4c\\x66\\xaa\\x74\\xbd\"\n\"\\xc3\\xc0\\xa3\\xb4\\xac\\x1f\\xa2\\xa7\\x92\\xa2\\x8e\\xbe\\x08\\xf8\\x14\\x07\\x8c\\xd8\\x67\\xd8\\x59\\xa9\\x34\\xc1\\x18\\x80\\x94\\x05\\x7d\\x9a\\x84\\x9e\"\n\"\\xa3\\x1a\\x99\\x5b\\xfc\\x9b\\x07\\x92\\x79\\x73\\x8f\\x76\\x1b\\x41\\x49\\x53\\x4c\\x66\\xaa\\x74\\xbb\\xc2\\xbf\\xa3\\xb4\\xac\\x1f\\xa1\\xa7\\x92\\xa2\\x8e\"\n\"\\xbf\\x08\\xf7\\x2c\\xf7\\x40\\x15\\xfb\\x0d\\xca\\x70\\xb3\\x88\\xf7\\x0d\\x8e\\x89\\x18\\xf7\\x0d\\x4c\\xa5\\x64\\x90\\xfb\\x0e\\x08\\x0e\\x3a\\x0a\\xf7\\xc3\"\n\"\\xf7\\x67\\x2f\\x1d\\xf7\\xd1\\xf8\\x3d\\x15\\x28\\x06\\x71\\x82\\x8a\\x85\\x80\\x1f\\x75\\x7f\\x7d\\x76\\x75\\x1a\\x7f\\x90\\x7f\\x95\\x84\\x1e\\x93\\x84\\x92\"\n\"\\x89\\x9f\\x8a\\x5a\\xfb\\x6f\\x18\\x89\\x67\\x0a\\xa7\\x99\\xf7\\x25\\x1d\\x6f\\x1b\\x8a\\x06\\xb0\\xf7\\x3c\\x05\\xba\\xc3\\xae\\x9b\\xb8\\x1b\\xba\\xa5\\x7c\"\n\"\\x71\\x83\\x8a\\x84\\x8a\\x83\\x1f\\x66\\xfb\\x3b\\x05\\x5f\\x6d\\x71\\x68\\x6e\\x9d\\x7e\\xb6\\x1f\\xe4\\x20\\x0a\\x9c\\x1a\\xa6\\x7c\\x97\\x68\\x8d\\x1e\\xb0\"\n\"\\xf7\\x3d\\x05\\x8f\\x9a\\x8c\\x99\\x9c\\x1a\\xd2\\x4e\\xbb\\x31\\x55\\x67\\x7e\\x64\\x55\\x1e\\x76\\xf7\\x43\\x15\\x9a\\x9b\\x91\\x96\\x97\\x1a\\x9d\\x7d\\x98\"\n\"\\x78\\x7a\\x80\\x85\\x77\\x79\\x1e\\xfb\\x01\\xfb\\x0c\\x05\\x7c\\x7a\\x85\\x80\\x7f\\x1a\\x7a\\x9a\\x7e\\x9e\\x9b\\x97\\x92\\x9e\\x9c\\x1e\\x0e\\x3a\\x0a\\xf7\"\n\"\\x22\\xf7\\x4b\\x45\\x1d\\x3a\\x0a\\xb3\\xfc\\x8c\\x23\\x1d\\xf7\\xda\\xf7\\x7c\\x15\\xf7\\x93\\xbd\\xfb\\x79\\x06\\xec\\xf7\\x49\\x05\\xf7\\x18\\xbe\\x22\\x06\"\n\"\\x97\\xa9\\x96\\xa1\\x96\\x9a\\x08\\x8f\\x90\\x8d\\x8f\\x8e\\x1a\\x96\\x7e\\x96\\x7f\\x7e\\x85\\x87\\x7b\\x83\\x1e\\x60\\x3a\\x05\\xfb\\x1a\\xf7\\x09\\x0a\\xfb\"\n\"\\x10\\xb7\\x3b\\xe6\\x63\\x1e\\x6e\\x55\\x05\\x87\\x83\\x89\\x85\\x86\\x1a\\x7f\\x97\\x80\\x98\\x97\\x92\\x90\\x9a\\x93\\x1e\\xac\\xca\\x05\\x87\\xac\\x8f\\x8b\"\n\"\\xb8\\x1b\\xf7\\xba\\xbe\\xfb\\xc6\\x06\\x73\\x84\\x8b\\x8d\\x7e\\x1f\\xb2\\xf7\\x47\\x15\\x31\\xfb\\x3c\\x4a\\xa1\\x68\\xc3\\x87\\xe0\\x19\\x90\\x07\\xf7\\xd2\"\n\"\\xf7\\x7b\\x15\\x2a\\xfb\\x49\\x05\\xfb\\x71\\x90\\x06\\x91\\xf7\\x0c\\xcc\\xc6\\xf7\\x14\\x88\\x08\\x0e\\xf8\\x54\\xf8\\x32\\x15\\x92\\x97\\x05\\x91\\x96\\x8e\"\n\"\\x94\\x95\\x1a\\xa9\\x71\\xa4\\x6c\\x78\\x77\\x7d\\x77\\x7f\\x1e\\x67\\x4c\\x05\\xfb\\x68\\x06\\x70\\x83\\x8a\\x84\\x80\\x1f\\x7a\\x81\\x80\\x79\\x4c\\x1d\\xf7\"\n\"\\x29\\x06\\x67\\x4b\\x05\\xfb\\x05\\x06\\x71\\x82\\x8a\\x84\\x80\\x1f\\x7a\\x82\\x80\\x78\\x4c\\x1d\\xbd\\x06\\x7c\\x71\\x05\\x85\\x81\\x87\\x7d\\x81\\x1a\\x71\"\n\"\\xa5\\x74\\xa9\\xa1\\x9e\\x97\\x9f\\x97\\x1e\\xb7\\xd8\\x05\\xf7\\x62\\x06\\xa2\\x98\\x8d\\x91\\x95\\x1f\\x9c\\x94\\x96\\x9e\\x9e\\x1a\\x9d\\x82\\x9c\\x7c\\x95\"\n\"\\x1e\\x93\\x7f\\x81\\x8d\\x6f\\x1b\\xfb\\x23\\x06\\xaf\\xcb\\x05\\xf6\\x06\\xa2\\x99\\x8d\\x91\\x94\\x47\\x1d\\x0e\\xf7\\x7f\\xf8\\x3d\\x15\\x28\\x06\\x62\\x6d\"\n\"\\x72\\x6a\\x73\\x9e\\x7c\\xab\\x1f\\xa2\\x06\\xee\\xfb\\xe2\\x05\\xd9\\x06\\xab\\xa4\\x96\\x94\\xb2\\xad\\x08\\xf7\\x13\\xf7\\x04\\xbe\\xd9\\xdb\\x1a\\xa9\\x84\"\n\"\\xaa\\x7f\\xa0\\x1e\\x9a\\x82\\x7e\\x93\\x78\\x1b\\x6a\\x6a\\x6e\\x6c\\x86\\x8b\\x88\\x8c\\x87\\x1f\\x93\\x6d\\x8c\\x88\\x7b\\x1a\\x52\\x60\\x4d\\x2c\\x3c\\x1e\"\n\"\\x0e\\xda\\x1d\\x49\\xf7\\xde\\xac\\x0a\\x24\\x0a\\xc1\\xf7\\x98\\x5b\\x0a\\x24\\x0a\\x4e\\xf7\\xa3\\x33\\x0a\\xf7\\xaa\\xaf\\x15\\x68\\xa5\\xaa\\x7b\\xb3\\x1b\"\n\"\\xf6\\xd5\\xf7\\x02\\xf7\\x32\\x9a\\x0a\\x5c\\x98\\x69\\xa6\\x70\\x1e\\x74\\xa3\\xad\\x7d\\xab\\x1b\\xb0\\xac\\x9a\\xaf\\xb3\\x1f\\x0e\\xf7\\xa9\\xa7\\x15\\x6e\"\n\"\\xa6\\xaa\\x7d\\xb1\\x1b\\xf7\\x01\\xd5\\xf7\\x01\\xf7\\x33\\x9a\\x0a\\x36\\xc1\\x4f\\xd8\\xaf\\xab\\x98\\xa9\\xb3\\x1e\\xf7\\x66\\xf8\\xad\\x15\\x9e\\x97\\x93\"\n\"\\x97\\x22\\x0a\\x7c\\x81\\x81\\x87\\x82\\x7d\\x1e\\xfb\\x12\\x38\\x05\\x79\\x7f\\x82\\x7f\\x7d\\x1a\\x7c\\x96\\x80\\x9b\\x94\\x26\\x0a\\xd8\\x1d\\xf7\\xf3\\xf8\"\n\"\\x49\\x15\\x3e\\x32\\x69\\x57\\x52\\x1f\\x53\\x57\\x67\\x42\\x4d\\x1a\\x23\\xe5\\x40\\xf7\\x13\\xf7\\x39\\xf7\\x25\\xf7\\x10\\xf7\\x21\\xf7\\x00\\x32\\xda\\xfb\"\n\"\\x0f\\x1e\\x76\\x23\\x15\\xd3\\xbe\\x5f\\x4e\\x43\\x35\\x48\\x2e\\x43\\x54\\xb5\\xc2\\xa9\\x9b\\xab\\xa8\\xa7\\x1f\\xb2\\xb3\\xb7\\x9d\\xc1\\x1b\\xf7\\x19\\xf7\"\n\"\\x7c\\x15\\x9e\\x97\\x93\\x97\\x22\\x0a\\x7b\\x82\\x80\\xf7\\x10\\x1d\\xcf\\x8e\\x15\\xf8\\x66\\xec\\xfc\\x02\\xf7\\xf5\\x27\\x06\\x0e\\xbf\\x1d\\xf7\\x1e\\xf7\"\n\"\\xa0\\x2f\\x1d\\xf7\\x2b\\xf8\\xbc\\x15\\x7d\\x8c\\x95\\x82\\x9a\\x1b\\xac\\x8c\\x05\\xbb\\xc4\\x77\\x6c\\xb5\\x1f\\xa8\\x76\\x9e\\x76\\xa7\\x60\\x08\\xa7\\x5f\"\n\"\\x66\\x96\\x57\\x1b\\xfb\\x16\\x24\\x28\\xfb\\x11\\xfb\\x11\\xf2\\x27\\xf7\\x17\\xf7\\x15\\xf3\\xee\\xf7\\x10\\xe9\\x64\\xf7\\x00\\x4e\\xd1\\x1f\\xcb\\x55\\x33\"\n\"\\xb0\\x29\\x1b\\x70\\x88\\x8a\\x84\\x84\\x1f\\x87\\x87\\x89\\x84\\x84\\x1a\\xf7\\x27\\xfb\\x40\\x15\\xf3\\xdb\\x40\\x28\\x2b\\x3b\\x3e\\x26\\x26\\x3a\\xd8\\xec\"\n\"\\xea\\xdb\\xd9\\xee\\x1f\\x0e\\xf7\\x92\\xf7\\x6f\\x15\\x98\\x06\\xf7\\x04\\xe0\\xe0\\xf7\\x03\\xeb\\x55\\xc0\\x29\\x1f\\x35\\x06\\x74\\x85\\x8a\\x85\\x7f\\x1f\"\n\"\\x78\\x80\\x7e\\x76\\x75\\x1a\\x6f\\x99\\x7d\\xab\\x1e\\x3c\\xfb\\xfa\\x73\\x8c\\x82\\x87\\x7c\\x7f\\x19\\x7d\\x7e\\x83\\x7c\\x79\\x1a\\x7f\\x8f\\x81\\x93\\x82\"\n\"\\x1e\\x81\\x94\\x90\\x8a\\xa5\\x1b\\xf7\\x18\\x06\\xaa\\x96\\x8e\\x97\\x9a\\x1f\\x9b\\x97\\x94\\x9d\\x9b\\x1a\\xa9\\x79\\x97\\x61\\x1e\\x6f\\x06\\xda\\xf7\\xf9\"\n\"\\x15\\xb0\\x87\\x97\\x7e\\x69\\x1a\\x71\\x82\\x73\\x7a\\x7b\\x1e\\x7f\\x7e\\x7f\\x87\\x6d\\x88\\x08\\xf7\\xa3\\x44\\x15\\x90\\x9b\\x8c\\x8e\\x96\\x1a\\xa2\\x79\"\n\"\\x9a\\x70\\x68\\x71\\x72\\x62\\x84\\x1e\\x88\\x7b\\x05\\x76\\x83\\x8a\\x84\\x81\\x1f\\x7a\\x81\\x7e\\x74\\x77\\x1a\\x6e\\x99\\x7e\\xaa\\x8a\\x1e\\x85\\x6f\\x8a\"\n\"\\x80\\x7d\\x1a\\x53\\xbd\\x63\\xd0\\xbb\\xab\\xa2\\xb0\\xa1\\x7d\\x9d\\x78\\x87\\x88\\x8b\\x8a\\x88\\x1e\\x88\\x7f\\x8b\\x8b\\x84\\x1b\\x7b\\x82\\x95\\x9d\\x91\"\n\"\\x8c\\x90\\x8d\\x99\\x1f\\xa9\\x93\\x8d\\x91\\x98\\x1f\\xa0\\x96\\x9a\\xa1\\x9f\\x1a\\xab\\x7a\\x96\\x5d\\x1e\\x0e\\xf7\\xbf\\x7c\\x15\\xcc\\x92\\xbb\\x99\\xb1\"\n\"\\xa4\\x08\\xd1\\xb8\\xb9\\xe0\\xe0\\x1a\\xf6\\x40\\xdf\\x2d\\x68\\x68\\x7d\\x72\\x72\\x1e\\x78\\x79\\x80\\x72\\x80\\x5e\\x5a\\xfb\\x6f\\x18\\x5e\\x97\\x76\\xa8\"\n\"\\xbc\\x1a\\xc9\\xa3\\xba\\xc7\\xc1\\x1e\\xa0\\x9f\\x93\\x98\\x9e\\x1a\\xa4\\x7a\\x9b\\x6f\\x63\\x63\\x70\\x55\\x65\\x1e\\x64\\x54\\x78\\x53\\x4e\\x1a\\x2a\\xc4\"\n\"\\x41\\xe9\\x72\\x1e\\x6f\\xfb\\x17\\x05\\x89\\x82\\x89\\x7e\\x85\\x1a\\x73\\x9d\\x7b\\xa7\\xae\\xa3\\xa2\\xb6\\x94\\x1e\\xef\\xf8\\x56\\x15\\x9e\\x8f\\x94\\x94\"\n\"\\x98\\x1b\\xac\\xa7\\x63\\x5c\\x3c\\x58\\x52\\x37\\x78\\x1f\\x0e\\xf7\\xb1\\xf7\\xd6\\x15\\xf7\\x3f\\x06\\x5a\\xfb\\x6e\\x05\\x89\\x06\\x6b\\x80\\x88\\x7e\\x7c\"\n\"\\x1f\\x7b\\x7f\\x82\\x7a\\x7b\\x1a\\x6c\\x9d\\x7f\\xb7\\x1e\\xf7\\x04\\x06\\xaa\\x93\\x8d\\x98\\x9c\\x1f\\x9b\\x98\\x94\\x9c\\x9b\\x1a\\x97\\x86\\x96\\x81\\x94\"\n\"\\x1e\\x94\\x81\\x84\\x8d\\x6f\\x1b\\x89\\x06\\xbc\\xf7\\x6e\\x05\\x94\\x06\\xa9\\x96\\x4f\\x0a\\xa8\\x79\\x98\\x61\\x1e\\xfc\\x27\\x06\\x6d\\x80\\x88\\x7f\\x7c\"\n\"\\xf7\\x5f\\x1d\\x92\\x06\\x5a\\xfb\\x6e\\x05\\x88\\x06\\x6b\\x83\\x88\\x7e\\x7b\\x1f\\x7a\\xf7\\x4e\\x1d\\x92\\x89\\xa7\\x1b\\xf7\\x04\\x06\\xac\\x95\\x4f\\x0a\"\n\"\\xa9\\x79\\x98\\x60\\x1e\\x8a\\x06\\x0e\\xf8\\x93\\xf8\\xae\\x15\\x92\\x06\\xae\\x8a\\xa3\\x9f\\xab\\x1a\\x93\\x07\\x8a\\xac\\x74\\x9f\\x66\\x89\\x08\\xfc\\x44\"\n\"\\x06\\x66\\x8d\\x74\\x77\\x8a\\x6a\\x08\\x83\\x07\\x8c\\x6a\\xa2\\x77\\xb0\\x8d\\x08\\x98\\xfc\\x9b\\x7e\\x06\\x66\\x8d\\x74\\x77\\x8a\\x6a\\x08\\x83\\x07\\x8c\"\n\"\\x6a\\xa2\\x77\\xb0\\x8d\\x08\\xf7\\x13\\x06\\xb0\\x89\\xa2\\x9f\\x8c\\xac\\x08\\x93\\x07\\xaa\\x74\\xa0\\x6a\\x8a\\x1e\\x88\\xf8\\x9b\\xf7\\x4a\\xfc\\x9b\\x83\"\n\"\\x06\\x68\\x8d\\x73\\x77\\x6a\\x1a\\x83\\x07\\x8c\\x6a\\xa2\\x77\\xb0\\x8d\\x08\\xf7\\x13\\x06\\xb0\\x89\\xa2\\x9f\\x8c\\xac\\x08\\x93\\x07\\xab\\x73\\x9f\\x68\"\n\"\\x8a\\x1e\\x84\\x06\\x0e\\xf7\\xe9\\xf8\\x64\\x15\\xfb\\x2b\\x65\\x86\\x71\\x5e\\x1f\\x46\\x62\\x61\\x3f\\x37\\x1a\\x3e\\xad\\x46\\xc8\\x5f\\x1e\\x67\\xbd\\xae\"\n\"\\x85\\xf7\\x39\\x1b\\xf7\\x56\\x06\\xa0\\x99\\x95\\x9b\\x9b\\x7f\\x94\\x74\\x1f\\xfb\\x58\\x06\\xfb\\x14\\x60\\x90\\x9e\\x68\\x1f\\x54\\xa8\\x65\\xcb\\xcb\\x1a\"\n\"\\xc5\\xab\\xc7\\xba\\xaa\\x1e\\xa6\\xb3\\xb0\\x90\\xf7\\x23\\x1b\\xf7\\x58\\x06\\xa1\\x98\\x95\\x9b\\x9b\\x7e\\x94\\x75\\x1f\\x0e\\xf7\\x74\\x16\\xf7\\x2d\\xb0\"\n\"\\x90\\xa5\\xb8\\x1f\\xd0\\xb4\\xb5\\xd7\\xdf\\x1a\\xd8\\x68\\xd0\\x4f\\xb7\\x1e\\xaf\\x59\\x67\\x91\\xfb\\x39\\x1b\\xfb\\x55\\x06\\x75\\x7e\\x82\\x7b\\x7b\\x98\"\n\"\\x81\\xa1\\x1f\\xf7\\x58\\x06\\xf7\\x16\\xb3\\x86\\x78\\xaf\\x1f\\xc2\\x6f\\xb1\\x4a\\x4b\\x1a\\x51\\x6b\\x50\\x5b\\x6b\\x1e\\x71\\x65\\x63\\x85\\xfb\\x21\\x1b\"\n\"\\xfb\\x58\\x06\\x74\\x7f\\x82\\x7b\\x7c\\x99\\x80\\xa0\\x1f\\x0e\\xf7\\x3f\\xfb\\x14\\x15\\x86\\x78\\x89\\x7c\\x82\\x1a\\x73\\x9d\\x7b\\xa7\\x9e\\x9d\\x93\\x9a\"\n\"\\x99\\x1e\\x92\\x93\\x90\\x99\\x92\\xa9\\xa6\\xf7\\x0c\\x18\\xf7\\x20\\x8f\\xba\\xb4\\xa4\\xf7\\x1e\\xad\\xf7\\x2f\\x18\\xb9\\x8e\\xa5\\xa2\\xad\\x1a\\xaa\\x79\"\n\"\\x97\\x60\\x1e\\x29\\x06\\x4e\\xfb\\xa6\\x80\\x5b\\x7d\\x7f\\x59\\x88\\x19\\xec\\xf8\\x44\\x05\\x90\\xa2\\x8d\\x98\\x93\\x1a\\xa4\\x7a\\x99\\x6f\\x77\\x79\\x83\"\n\"\\x7b\\x7d\\x1e\\x83\\x83\\x88\\x81\\x83\\x6a\\x28\\xfc\\x4f\\x18\\x67\\x8c\\x7c\\x94\\x9f\\x1a\\x93\\x8d\\x9a\\x91\\xa3\\x1e\\xc6\\xf7\\x9b\\x05\\x26\\x06\\x59\"\n\"\\x6b\\x73\\x67\\x6f\\x9a\\x7d\\xad\\x8a\\x1f\\x6b\\xfb\\x26\\x05\\x85\\x6e\\x88\\x76\\x7c\\x1a\\x69\\x9a\\x6a\\xa7\\x72\\x1e\\xa1\\x77\\xa3\\x82\\xba\\x84\\x08\"\n\"\\x0e\\xf8\\x92\\xf7\\x5f\\x15\\x7c\\x9f\\x86\\x92\\x7c\\x9b\\xce\\x1d\\xa3\\xf7\\x00\\x05\\xe7\\x06\\x9d\\x82\\x9a\\x7d\\x9f\\x70\\x89\\x8a\\x18\\x6c\\x81\\x7c\"\n\"\\x79\\x71\\x1a\\x78\\x9b\\x77\\x9a\\x8c\\x1e\\x91\\x95\\x8e\\x8f\\x98\\x1f\\xac\\x96\\xa3\\x5b\\x92\\x7b\\x91\\x74\\x19\\xf7\\x20\\x1d\\x87\\x93\\x8a\\x8e\\x85\"\n\"\\x98\\x91\\x8c\\x18\\xa8\\x94\\x9c\\x9f\\xa5\\x1a\\x9e\\x7c\\x9d\\x7c\\x86\\x7f\\x88\\x87\\x7e\\x1e\\xfb\\xa9\\xf0\\x15\\xab\\xf7\\x26\\x05\\xf7\\x01\\x06\\xc2\"\n\"\\xaf\\x75\\x68\\x5a\\x42\\x63\\x33\\x1f\\x0e\\x3f\\x0a\\xf7\\x74\\xf7\\x78\\x15\\xa3\\x9b\\x94\\x97\\x9c\\x1a\\x9d\\x7d\\x98\\x77\\x7f\\x84\\x88\\x7e\\x78\\x1e\"\n\"\\xfb\\x31\\x21\\x05\\x74\\x7c\\x81\\x7d\\x7c\\x1a\\x78\\x99\\x7e\\x9f\\x95\\x97\\x90\\x95\\x9a\\x1e\\x0e\\xf7\\x2e\\xf7\\xd1\\x15\\x22\\x06\\x79\\x8c\\x80\\x82\"\n\"\\x8a\\x7a\\x08\\x8a\\x07\\x8c\\x7a\\x96\\x82\\x9d\\x8c\\x08\\xc7\\x06\\xe4\\xfb\\xb0\\xf7\\x85\\xf9\\x2f\\x05\\xf7\\x3b\\x06\\x9c\\x98\\x96\\x9a\\x9b\\x80\\x94\"\n\"\\x78\\x1f\\xfb\\x66\\x06\\xfb\\x55\\xfc\\xcc\\x05\\x0e\\x3f\\x0a\\xca\\xf7\\x5c\\x45\\x1d\\x3f\\x0a\\x64\\xfc\\x7b\\x23\\x1d\\xf7\\x0b\\xf8\\x19\\x15\\xf8\\x12\"\n\"\\x06\\xa1\\x96\\x94\\x9c\\x9b\\x80\\x94\\x75\\x1f\\xfc\\x46\\xfb\\x88\\x06\\x77\\x94\\x80\\x9c\\x9c\\x94\\x96\\x9f\\x1e\\x0e\\xf7\\x30\\xa8\\x15\\x6d\\xb4\\xb4\"\n\"\\x7d\\xba\\x1b\\xcb\\xca\\xa6\\xbe\\xbf\\x1f\\xc1\\xc0\\xa6\\xc8\\xd1\\x1a\\xf7\\x05\\x3c\\xd8\\xfb\\x09\\x43\\x3f\\x6b\\x58\\x5a\\x1e\\x68\\x67\\x72\\x53\\x7a\"\n\"\\x3c\\x48\\xfb\\xcb\\x18\\x86\\x71\\x89\\x81\\x83\\x1a\\x72\\x9c\\x7d\\xa8\\x9f\\x9d\\x93\\x9a\\x99\\x1e\\x92\\x93\\x8e\\x94\\x93\\xae\\x08\\xf7\\x7c\\xf8\\x69\"\n\"\\x15\\xc2\\xab\\x6c\\x54\\x3b\\x40\\x3d\\x3d\\x56\\x63\\xb4\\xc1\\xda\\xd5\\xd1\\xe0\\x1f\\x0e\\x56\\x1d\\x8e\\xf7\\x9a\\x2f\\x1d\\xf7\\xe0\\x7d\\x15\\xf7\\x19\"\n\"\\x95\\xea\\xce\\xdf\\x1a\\xb0\\x79\\xaa\\x6a\\x9f\\x1e\\x72\\x9b\\x62\\x96\\x44\\x94\\x4e\\x93\\x84\\x8c\\x7f\\x90\\x08\\x80\\x90\\x83\\x91\\x91\\x1a\\x9b\\xbf\"\n\"\\x9b\\xbd\\xb5\\xa8\\x83\\x79\\xa2\\x1e\\x6b\\x96\\x95\\x83\\xa5\\x1b\\x9b\\x9d\\x93\\x98\\x99\\x1f\\x95\\x95\\x8f\\x93\\x91\\xa6\\x93\\xae\\x18\\xa1\\x0a\\xa2\"\n\"\\x7f\\xa9\\x83\\xb5\\x86\\x78\\x36\\x18\\x8c\\x99\\x94\\x42\\x0a\\xb2\\x7b\\x9e\\x62\\x94\\x1f\\x0e\\x56\\x1d\\xfb\\x2e\\xf7\\x88\\x15\\xe4\\x31\\x05\\x81\\x95\"\n\"\\x93\\x87\\x95\\x1b\\xa3\\xc8\\x0a\\x26\\x0a\\x56\\x1d\\xfb\\x98\\xfc\\x59\\x23\\x1d\\xf7\\x5f\\xf7\\xc4\\x15\\xe4\\xf7\\x58\\x05\\x97\\xa6\\x8e\\x94\\x86\\x1d\"\n\"\\xf7\\x60\\x16\\xe4\\xf7\\x58\\x05\\x97\\xa5\\x8e\\x95\\x86\\x1d\\x0e\\xf8\\x48\\xf8\\x49\\x15\\xfb\\x07\\x45\\x77\\x59\\x4b\\x1f\\x4a\\x59\\x61\\x3d\\x45\\x1a\"\n\"\\xfb\\x02\\xe0\\x41\\xf7\\x12\\xe3\\xe5\\xb1\\xc9\\xc5\\x1e\\xb9\\xbd\\xa6\\xc6\\xc0\\x1a\\xab\\x83\\xa6\\x7a\\xa7\\x1e\\xba\\x5e\\x1d\\xfb\\xa8\\x24\\x15\\xd6\"\n\"\\xbc\\x64\\x4e\\x3e\\x36\\x46\\x2d\\x42\\x5a\\xb3\\xc7\\xd7\\xe0\\xd1\\xe7\\x1f\\x0e\\xf7\\x6d\\xf8\\x23\\x15\\x75\\x79\\x7a\\x75\\x76\\x9c\\x79\\xa1\\xa1\\x9c\"\n\"\\x9c\\xa1\\xa0\\x7a\\x9d\\x76\\x1f\\xf7\\x41\\x8c\\x15\\x75\\x79\\x79\\x76\\x75\\x9d\\x79\\xa1\\xa0\\x9d\\x9d\\xa0\\xa1\\x79\\x9d\\x76\\x1f\\xe9\\x37\\x15\\x82\"\n\"\\x64\\x83\\x7b\\x77\\x73\\x08\\x61\\x66\\x5c\\x77\\x4d\\x1b\\x4c\\x5d\\x9f\\xb5\\x66\\x1f\\x77\\xa3\\x83\\x9b\\x82\\xb2\\x90\\x48\\x93\\x6c\\xa2\\x68\\x08\\x5b\"\n\"\\xac\\xbd\\x72\\xcb\\x1b\\xc6\\xba\\xa0\\xb4\\xab\\x1f\\xa8\\xb0\\x96\\xae\\x90\\xd3\\x08\\xfb\\x47\\xf7\\x8b\\x15\\xfb\\x33\\xfb\\x13\\xfb\\x10\\xfb\\x2f\\xfb\"\n\"\\x32\\xf7\\x11\\xfb\\x12\\xf7\\x31\\xf7\\x2f\\xf7\\x12\\xf7\\x12\\xf7\\x30\\xf7\\x2d\\xfb\\x12\\xf7\\x14\\xfb\\x2b\\x1f\\x83\\x66\\x15\\xf7\\x1d\\xf7\\x03\\xfb\"\n\"\\x00\\xfb\\x1b\\xfb\\x1d\\xfb\\x01\\xfb\\x01\\xfb\\x1c\\xfb\\x1b\\xfb\\x01\\xf7\\x01\\xf7\\x1c\\xf7\\x19\\xf7\\x02\\xf7\\x03\\xf7\\x17\\x1f\\x0e\\xf7\\x22\\x16\"\n\"\\xf8\\x09\\x9d\\x06\\xfb\\x11\\x91\\x51\\xcd\\x8d\\xf7\\x17\\x08\\x4a\\xad\\xaf\\x72\\xc3\\x1b\\xc1\\xb8\\xba\\xc5\\xc0\\x77\\xaa\\x38\\xd7\\x1f\\x37\\xd8\\x7c\"\n\"\\xa1\\x6d\\xe5\\x7f\\x44\\x5c\\x47\\x3a\\x4a\\x08\\x4d\\x58\\x70\\x5f\\x5a\\x1a\\x51\\xba\\x5b\\xc4\\xc3\\xb3\\xa8\\xc8\\xa8\\x1e\\xfb\\x14\\x90\\x47\\x40\\xfb\"\n\"\\x0e\\x1b\\x0e\\xf8\\x37\\xf8\\xab\\x15\\x91\\x42\\x8c\\x6d\\xa2\\x75\\xaa\\x8a\\x19\\x90\\x06\\xac\\x8c\\xa1\\xa3\\x8a\\xab\\x08\\xf7\\x0f\\x07\\xad\\x8c\\x72\"\n\"\\xa2\\x67\\x1b\\xfb\\xeb\\x06\\x67\\x8c\\x72\\x74\\x6b\\x1a\\x7e\\x07\\x7b\\x8e\\x82\\x95\\x7e\\x1e\\xf7\\x39\\xfb\\x73\\xfb\\x3d\\xfb\\xba\\x05\\x84\\x7f\\x89\"\n\"\\x84\\x7e\\x1a\\x7c\\x07\\x6a\\xa4\\x74\\xaf\\x8c\\x1e\\xf7\\xf2\\x06\\xaf\\xa3\\xa2\\xad\\x1f\\xf7\\x10\\x07\\xab\\x75\\xa3\\x6a\\x8c\\x1e\\x86\\x06\\x6c\\x8a\"\n\"\\x74\\x74\\x8a\\x6c\\x88\\x43\\x18\\xfb\\x62\\x06\\xf7\\x2a\\xf7\\x93\\x05\\x91\\x97\\x8e\\x93\\x95\\x1a\\x97\\x88\\x94\\x82\\x97\\x1e\\xfb\\x1a\\xf7\\x4c\\x05\"\n\"\\x0e\\xf7\\x23\\xf8\\x2a\\x15\\x73\\x6e\\x7d\\x68\\x86\\x65\\x08\\x2c\\x5e\\xeb\\x06\\x8f\\x64\\x99\\x68\\xa2\\x6e\\x48\\x48\\x18\\xab\\x6b\\xce\\xcf\\xa9\\x73\"\n\"\\xab\\x7e\\xb4\\x85\\x19\\x2c\\xb8\\xea\\x07\\xb4\\x91\\xad\\x99\\xa7\\xa2\\xce\\x47\\x18\\xab\\xab\\x48\\xcf\\xa1\\xa4\\x9a\\xaf\\x90\\xb4\\x19\\xeb\\xb8\\x2b\"\n\"\\x06\\x86\\xb3\\x7c\\xaf\\x75\\xa6\\xce\\xce\\x18\\x6b\\xab\\x48\\x48\\x71\\xa1\\x62\\x9c\\x67\\x8e\\x19\\xea\\x5e\\x2d\\x07\\x68\\x87\\x61\\x79\\x72\\x75\\x47\"\n\"\\xcf\\x18\\x6b\\x6b\\x05\\xf7\\x72\\x5d\\x15\\xdc\\xcc\\x4b\\x3d\\x3a\\x4b\\x4b\\x3b\\x3c\\x4b\\xcb\\xda\\xda\\xcb\\xcc\\xd8\\x1f\\x0e\\xf8\\x35\\xf7\\xd7\\x15\"\n\"\\xd7\\x06\\xad\\x92\\x8d\\x97\\x9b\\x1f\\x9b\\x98\\x94\\x9c\\x9c\\x1a\\xa1\\x7e\\x99\\x75\\x8e\\x1e\\x8e\\x75\\x8a\\x8b\\x89\\x1b\\xfb\\x9f\\x06\\x6b\\x82\\x88\"\n\"\\x7f\\x7b\\x1f\\x7b\\x7e\\x82\\x7b\\x7a\\x9d\\x1d\\xdd\\x06\\x55\\xfb\\x89\\x05\\x89\\x84\\x8b\\x87\\x81\\x1a\\x5f\\xac\\x74\\xc8\\xd9\\xc2\\xab\\xb8\\x9f\\x7f\"\n\"\\x99\\x7b\\x83\\x81\\x89\\x87\\x81\\x1e\\x82\\x74\\x80\\x89\\x7e\\x1b\\x84\\x88\\x8d\\x90\\x8e\\x8b\\x8e\\x8c\\x8f\\x1f\\x0e\\xf7\\xab\\xf7\\xa5\\x15\\x96\\xbc\"\n\"\\x05\\xf7\\x46\\x06\\xaa\\x96\\x4f\\x0a\\xa9\\x7a\\x97\\x60\\x1e\\xfb\\x44\\x06\\x9c\\xda\\x05\\x8f\\x9b\\x8c\\x8e\\x96\\x1a\\xa2\\x79\\x9a\\x70\\x79\\x7e\\x85\"\n\"\\x7d\\x7b\\x1e\\x82\\x82\\x83\\x7a\\x87\\x77\\x79\\x3a\\x18\\x6c\\x06\\x6c\\x80\\x88\\x80\\x7c\\x1f\\x7b\\x7f\\x81\\x79\\x7a\\x1a\\x7f\\x90\\x80\\x95\\x82\\x1e\"\n\"\\x82\\x95\\x92\\x8a\\xa8\\x1b\\xa9\\x06\\x80\\x5a\\x05\\x72\\x82\\x8a\\x85\\x7f\\x1f\\x75\\x80\\x7c\\x75\\x76\\x1a\\x7f\\x90\\x81\\x95\\x81\\x1e\\x82\\x95\\x91\"\n\"\\x8a\\xa8\\x1b\\x81\\x5a\\x05\\x89\\x82\\x8a\\x83\\x80\\x1a\\x6f\\x93\\x75\\x9c\\x7b\\x1e\\x72\\xa4\\xc3\\x7a\\xc0\\x1b\\xd2\\xf0\\xa2\\xa7\\xbd\\x1f\\xa2\\x98\"\n\"\\x99\\x9f\\xa0\\x1a\\xa1\\x77\\x9e\\x73\\x83\\x83\\x89\\x87\\x82\\x1e\\x71\\x50\\x5c\\x80\\x52\\x1b\\x5a\\x72\\x94\\x9d\\x92\\x8c\\x92\\x8d\\x94\\x1f\\x92\\xab\"\n\"\\x05\\xf7\\x1d\\x06\\xab\\x96\\x2a\\x0a\\x9c\\x9b\\x1a\\xaa\\x7a\\x97\\x5f\\x1e\\x0e\\xf8\\x81\\xf8\\x3d\\x15\\x86\\x06\\xfb\\x44\\x06\\x9d\\xda\\x05\\x8f\\x9d\"\n\"\\x8b\\x8d\\xd9\\x0a\\x79\\x3a\\x05\\x6b\\x06\\x6a\\x82\\x89\\x7e\\xa2\\x1d\\xa9\\x06\\x5e\\xfb\\x5d\\x05\\x89\\x82\\x8a\\x83\\x7f\\x1a\\x6b\\x99\\x6f\\xa4\\x7b\"\n\"\\x1e\\x77\\xa9\\xb7\\x80\\xb8\\x1b\\xd2\\xeb\\xa1\\xa8\\xc3\\x1f\\xa4\\x98\\x97\\x9c\\xa1\\x78\\x1d\\xb4\\xf7\\x4c\\x05\\xf7\\x46\\x06\\xa9\\x98\\x8e\\x97\\x99\"\n\"\\x1f\\x9b\\x97\\x94\\x9c\\x9d\\x1a\\x91\\x8a\\x8f\\x87\\x93\\x1e\\x97\\x8e\\x8b\\x8b\\xa2\\xa0\\xf2\\xf7\\x0d\\x18\\xf0\\x1d\\x81\\x7f\\x1a\\x89\\x8b\\x89\\x8c\"\n\"\\x88\\x1e\\x0e\\xf7\\xc8\\x7c\\x15\\xc1\\x8d\\xd4\\x9b\\xbe\\x9f\\x08\\xbb\\x9e\\x9c\\x9d\\xa7\\x78\\x1d\\xb4\\xf7\\x4c\\x05\\xf7\\x46\\x81\\x1d\\x20\\x1d\\xdc\"\n\"\\x1d\\x57\\xac\\x6a\\xcb\\x7c\\x1e\\x74\\x26\\x05\\x8d\\x9c\\x93\\x8b\\x90\\x1b\\xa6\\x9a\\x82\\x7b\\x7e\\x80\\x83\\x78\\x7a\\x74\\x92\\x95\\x7a\\x1f\\x96\\x79\"\n\"\\x89\\x8c\\x7f\\x1b\\x72\\x79\\x7a\\x72\\x82\\x8f\\x82\\x90\\x85\\x1f\\x78\\x9e\\xba\\x7c\\xb4\\x1b\\xd5\\xbf\\xba\\xcd\\xb1\\x79\\xa0\\x64\\x95\\x1f\\x0e\\xf8\"\n\"\\x07\\xf8\\xef\\x15\\x2c\\x36\\x51\\x29\\x59\\x1f\\x67\\x45\\x74\\x2b\\x3e\\x1a\\x44\\x9d\\x56\\xb1\\x64\\x1e\\x66\\xae\\xb9\\x78\\xc0\\x1b\\xda\\xdb\\xb8\\xd3\"\n\"\\xbb\\x1f\\xbc\\xd4\\xab\\xf7\\x06\\xef\\x1a\\xf7\\x14\\x3f\\xe1\\xfb\\x05\\x1e\\xfb\\x2d\\xfb\\x96\\x15\\xee\\xa9\\xc1\\xc2\\xd0\\x1b\\xc0\\xa7\\x64\\x41\\x7f\"\n\"\\x8a\\x83\\x89\\x76\\x1f\\x73\\x23\\x15\\x28\\x6b\\x55\\x55\\x47\\x1b\\x56\\x6f\\xb2\\xd2\\x99\\x8c\\x93\\x8d\\xa0\\x1f\\x0e\\xf8\\x63\\xf8\\xc9\\x15\\x9e\\x97\"\n\"\\x93\\x97\\x22\\x0a\\x7b\\x82\\xf7\\x16\\x1d\\x9a\\x1e\\x0e\\xf8\\xc6\\xbc\\x1d\\xfb\\x7a\\xa9\\x0a\\x57\\x1d\\xfb\\x02\\xf8\\x7f\\x5b\\x0a\\x57\\x1d\\xfb\\x75\"\n\"\\xf8\\x8a\\x33\\x0a\\xa7\\xfb\\xaf\\xf7\\x0b\\x0a\\x79\\x94\\x7b\\xba\\x0a\\xfc\\xb4\\xf7\\x2f\\x15\\x70\\x83\\x8a\\x84\\x80\\x1f\\x7a\\x81\\x80\\x79\\x78\\x1a\"\n\"\\x7a\\x94\\x7a\\xf7\\x29\\x1d\\x94\\x96\\x9e\\xf7\\x4d\\x1d\\x0e\\x0e\\x76\\x1d\\x57\\x0a\\x58\\xfb\\x72\\x23\\x1d\\x94\\x0a\\xd7\\xfb\\x95\\x15\\x8c\\x8c\\x8c\"\n\"\\x8c\\x8d\\x8c\\x8e\\x64\\x0a\\x7d\\xf7\\x0f\\x0a\\x7a\\x79\\x87\\x83\\x65\\x0a\\xcb\\x0a\\x79\\x1d\\xf8\\xb9\\x16\\xfb\\x06\\xf8\\xc8\\x05\\xfb\\x08\\x06\\xfb\"\n\"\\xff\\xfc\\xc8\\x05\\xf8\\x62\\xf3\\x15\\xfb\\xa1\\x06\\xf7\\x61\\xf7\\xd2\\x05\\x0e\\xf7\\xaf\\xe9\\x15\\x74\\x96\\x87\\x8d\\x82\\x91\\x08\\x68\\xa2\\x7a\\xb2\"\n\"\\xc5\\x1a\\xcd\\xa1\\xd2\\xad\\xbc\\x1e\\xbe\\xb1\\xc0\\xa5\\xd0\\x1b\\xe1\\xb6\\x62\\x3a\\x3c\\x68\\x30\\x58\\x56\\x1f\\x73\\x72\\x78\\x81\\x56\\x75\\x75\\x2d\"\n\"\\x18\\xf7\\x5c\\x06\\xaa\\x96\\x35\\x0a\\x9b\\x1a\\xa8\\x79\\x98\\x61\\x1e\\x4f\\x06\\xc1\\xa3\\xa2\\x9f\\xaa\\xbc\\x08\\xae\\xc3\\x9f\\xce\\xca\\x1a\\xd0\\x74\"\n\"\\xc1\\x61\\xa8\\x1e\\xa7\\x62\\x4d\\x9b\\x4a\\x1b\\xfb\\x00\\x2a\\x65\\x4b\\x53\\x1f\\x53\\x4b\\x69\\x33\\x38\\x1a\\x59\\x99\\x62\\xa4\\x72\\x1e\\x91\\x85\\x94\"\n\"\\x84\\x9c\\x82\\x08\\x4c\\xaa\\x1d\\x7c\\x7f\\xf7\\x00\\x0a\\xf7\\x5a\\x06\\x0e\\xf7\\x31\\x89\\x15\\x81\\xa2\\x9d\\x87\\xa5\\x1b\\xb8\\xb5\\x95\\xa3\\xbe\\x1f\"\n\"\\x87\\x79\\x05\\xee\\x06\\xbe\\xaa\\xa2\\xb2\\xa6\\x7a\\x98\\x6a\\x8c\\x1f\\xd3\\xf7\\xd6\\x05\\xfb\\x20\\x06\\x57\\x6c\\x74\\x64\\x6e\\x9e\\x7e\\xb6\\x1f\\xa8\"\n\"\\x06\\x62\\xfb\\x4b\\x05\\x67\\x46\\x5c\\x7c\\x5e\\x1b\\x72\\x7a\\x96\\x9b\\x90\\x8d\\x94\\x8d\\x97\\x1f\\xcb\\xf7\\xb1\\x05\\xfb\\x0e\\x06\\x58\\x6d\\x40\\x1d\"\n\"\\x95\\x06\\x27\\xfc\\x54\\x05\\x88\\x7e\\x8a\\x81\\x85\\x1a\\x74\\x9e\\x7a\\xa4\\xae\\xa3\\xa2\\xb7\\x94\\x1e\\x0e\\xf8\\xb7\\xf7\\xc3\\x15\\x91\\xa8\\x05\\x93\"\n\"\\xac\\x8d\\x95\\x97\\x1a\\xa7\\x74\\xa1\\x6d\\x76\\x7c\\x83\\x7a\\x80\\x1e\\x9c\\x6e\\x67\\x93\\x5e\\x1b\\x39\\x44\\x6d\\x51\\x56\\x1f\\x5a\\x56\\x6e\\x43\\x47\"\n\"\\x1a\\x28\\xbd\\x50\\xf7\\x05\\x68\\x1e\\xc1\\x7b\\x8f\\x88\\x7f\\x1a\\x79\\x71\\x7a\\x69\\x88\\x1e\\x77\\x89\\x87\\x8a\\x81\\x88\\x08\\x72\\x82\\x7c\\x77\\x70\"\n\"\\x1a\\x6d\\x9e\\x7e\\xb4\\xf2\\xda\\xc9\\xdd\\xc7\\x6b\\xae\\x39\\xa6\\x1e\\x36\\xa8\\x79\\x9c\\xc0\\x1a\\xf3\\xd7\\xde\\xea\\xb7\\xb1\\x77\\x73\\x89\\x8b\\x88\"\n\"\\x8a\\x86\\x1e\\x8a\\x87\\x8b\\x86\\x86\\x1a\\x6b\\xa1\\x75\\xad\\xab\\x99\\x9b\\xbc\\x94\\x1e\\x0e\\x24\\x1d\\xad\\xf7\\x28\\x05\\x8e\\x9b\\x8c\\x91\\x93\\x1a\"\n\"\\xa1\\x21\\x1d\\xed\\xe9\\x1d\\x71\\x1d\\xbc\\xf8\\xe3\\x15\\x97\\x7f\\x86\\x8d\\x7f\\x1b\\x74\\x75\\x77\\x76\\x80\\x91\\x82\\x98\\x7e\\x1f\\xf7\\x0c\\xfb\\x00\"\n\"\\x05\\x83\\x95\\x97\\x84\\x92\\x1b\\xa3\\xa0\\x9f\\xa2\\x96\\x87\\x92\\x7c\\x99\\x1f\\x0e\\xf7\\x79\\xf7\\x2c\\x15\\x46\\xf7\\xc9\\x05\\x99\\x06\\xab\\x96\\x50\"\n\"\\x1d\\x9b\\x1a\\xa9\\x79\\x97\\x61\\x1e\\xfb\\x19\\x06\\x6c\\x80\\x88\\x7f\\x95\\x1d\\xb4\\x1e\\xef\\xfc\\x61\\x05\\xf3\\x06\\xf7\\x87\\xf8\\x13\\x05\\xab\\xa0\"\n\"\\x9d\\x9d\\x97\\x1b\\x8f\\x8e\\x8a\\x89\\x8e\\x1f\\x7a\\xaa\\x8d\\x8a\\x9d\\x1b\\xb7\\xb5\\xb3\\xb5\\xb4\\x68\\xa5\\x54\\x40\\x50\\x63\\x35\\x55\\x1f\\x0e\\x59\"\n\"\\x0a\\xb5\\xf8\\x72\\xb7\\x0a\\xf7\\x8d\\xf7\\x7c\\x15\\xf7\\x0b\\x06\\xa2\\xf1\\x05\\xfb\\x0b\\x06\\xa7\\xf7\\x13\\x05\\xf7\\x8c\\x06\\x81\\x5f\\xf7\\x08\\x0a\"\n\"\\x92\\x99\\x99\\x1e\\x95\\x95\\x8f\\x94\\x91\\xa6\\xac\\xf7\\x28\\x18\\xfc\\x6f\\x27\\x1d\\x95\\x06\\x6f\\xfb\\x13\\x05\\x53\\x06\\x74\\x25\\x05\\xc3\\x06\\x6e\"\n\"\\xfb\\x15\\xdf\\x1d\\xf7\\x82\\xf7\\xa2\\x15\\x96\\xbe\\x05\\xf7\\x78\\x06\\x79\\x38\\x05\\x87\\x7c\\x8a\\x83\\xf7\\x26\\x0a\\x95\\x1e\\xb5\\xf7\\x51\\x05\\xfc\"\n\"\\x86\\xf7\\x59\\x1d\\x80\\x58\\x05\\x6b\\x06\\x63\\x71\\xf7\\x22\\x0a\\xaa\\x06\\x79\\x39\\x44\\x0a\\x9d\\xdd\\x05\\xce\\x06\\xb1\\xa6\\xa0\\xa7\\xa5\\x1d\\xf8\"\n\"\\x91\\xf7\\x00\\x15\\x6c\\xf7\\x19\\x85\\xa4\\x80\\x9e\\x78\\x9c\\x19\\x99\\x93\\xbf\\xca\\xb1\\xc1\\x08\\x71\\x91\\x99\\x80\\xa6\\x1b\\xa4\\x9a\\x9a\\xa9\\x92\"\n\"\\x1f\\x95\\xb5\\x05\\x8e\\x98\\x8d\\x9c\\x96\\x1a\\xa8\\x77\\x9c\\x68\\x51\\x69\\x6b\\xfb\\x3c\\xfb\\x13\\x1e\\xa3\\xeb\\x05\\x8f\\x06\\xae\\xa2\\xa1\\xab\\xaf\"\n\"\\x73\\x99\\x4c\\x1f\\x5f\\x06\\x4f\\x74\\x7d\\x66\\x71\\x99\\x7b\\xa9\\x82\\x1f\\x78\\x29\\x64\\xf7\\x06\\x82\\xa4\\xf7\\x2b\\x1d\\x86\\x7a\\x89\\x7d\\x81\\x1a\"\n\"\\x72\\xa1\\x78\\xa7\\xa3\\x97\\x95\\xab\\x98\\x1e\\x94\\x5b\\x9a\\x67\\xa3\\x69\\x6e\\x7d\\x75\\x79\\x79\\x71\\x21\\xfb\\x2d\\x18\\x60\\x8a\\x76\\x7a\\x69\\x1a\"\n\"\\x68\\xa2\\x7a\\xbc\\xb4\\x92\\x90\\xb9\\xa9\\x1e\\xef\\xf7\\x2b\\x97\\x9d\\x94\\x95\\xa5\\xa3\\x19\\x64\\xfb\\x2a\\x05\\x61\\x8a\\x75\\x79\\x69\\x1a\\x66\\xa2\"\n\"\\x7d\\xca\\x1e\\xbb\\xa7\\x1d\\x7c\\x9b\\x69\\x92\\x1f\\xad\\xf7\\x2d\\x93\\x80\\x92\\x7d\\x8e\\x7d\\x19\\xad\\xfb\\x25\\x8d\\x84\\x8b\\x88\\x8d\\x83\\x19\\x93\"\n\"\\x62\\x97\\x81\\xbc\\x88\\x80\\x5a\\x18\\x88\\x82\\x8a\\x7f\\x84\\x85\\x0a\\xc5\\x93\\x1e\\x9e\\xf7\\x1f\\x05\\x0e\\xf8\\xef\\xf7\\xef\\x15\\x8e\\x97\\x8c\\x94\"\n\"\\x92\\x1a\\xa7\\x73\\xa1\\x6b\\x65\\x65\\x76\\x60\\x65\\x1e\\x42\\x3a\\x92\\xb5\\x05\\xa7\\x93\\x99\\x9c\\xa5\\x1a\\xad\\x72\\x9d\\x5a\\x1e\\x65\\x06\\x5c\\x71\"\n\"\\x78\\x6a\\x73\\x95\\x7d\\xa4\\x7f\\x1f\\x83\\x5f\\x65\\xd3\\x05\\xc3\\x6d\\x73\\x9d\\x5e\\x1b\\x6c\\x78\\x81\\x73\\x7f\\x1f\\x81\\x77\\x85\\x71\\x72\\x1a\\x6d\"\n\"\\x9e\\x78\\xa9\\xa2\\x99\\x96\\xa6\\x94\\x1e\\x9f\\x62\\x91\\x81\\x9b\\x77\\x73\\x81\\x79\\x7e\\x7d\\x79\\x3d\\x2e\\x18\\x7e\\x06\\x69\\x72\\x75\\x6d\\x6e\\xa3\"\n\"\\x74\\xaa\\x1f\\xa6\\x06\\xa5\\x8c\\x8c\\x8c\\xaf\\xb5\\xda\\xec\\x18\\x99\\x9c\\x9a\\x9a\\x9a\\x96\\x7c\\x3a\\x18\\xf7\\x09\\x1d\\x82\\x93\\x78\\x19\\xa8\\x3f\"\n\"\\xa1\\x54\\x90\\x86\\xac\\x87\\x19\\x7e\\x62\\x05\\x89\\xe1\\x0a\\x9b\\xd1\\x9c\\x1e\\xaa\\xf7\\x14\\x05\\x26\\x06\\x71\\xc7\\x7d\\xac\\x7e\\x9e\\x7e\\x95\\x19\"\n\"\\x9d\\x98\\xa3\\xa2\\xa5\\xa9\\x08\\x6f\\x91\\x99\\x7f\\xa7\\x1b\\xaa\\x96\\x99\\xbd\\x97\\x1f\\x0e\\xf7\\x97\\x7c\\x15\\xcf\\x8d\\xc6\\x97\\xb2\\xa1\\x08\\xd0\"\n\"\\xb1\\xb5\\xcb\\xce\\x1a\\xb7\\x7b\\xad\\x6a\\xa6\\x1e\\xc4\\xb1\\xa5\\xb6\\xc4\\x1a\\xe2\\x41\\xc5\\xfb\\x03\\x53\\x62\\x80\\x73\\x67\\x1e\\x8c\\x95\\x8b\\x8d\"\n\"\\x8f\\x1a\\xa6\\x75\\xa0\\x6c\\x6e\\x7b\\x7a\\x63\\x85\\x1e\\x82\\x57\\x7f\\x66\\x75\\x5e\\x08\\x7d\\x6f\\x86\\x7d\\xf7\\x0a\\x1d\\x61\\x06\\x59\\x73\\x7b\\x68\"\n\"\\x77\\x95\\x7a\\x9d\\x82\\x1f\\x86\\x95\\x96\\x89\\xb1\\x1b\\xe7\\xb0\\x7c\\x67\\x74\\x7d\\x72\\x73\\x79\\x1f\\x76\\x6f\\x63\\x81\\x54\\x1b\\x45\\x57\\x9a\\xb1\"\n\"\\x51\\x1f\\xa0\\x6c\\x7b\\x92\\x7d\\x1b\\x6f\\x70\\x70\\x70\\x57\\xf7\\x00\\x4a\\xf7\\x00\\x7f\\x1f\\x77\\x34\\x05\\x8e\\x9f\\x8b\\x8b\\x93\\x1b\\xa7\\x99\\x83\"\n\"\\x7c\\x7b\\x7d\\x81\\xf7\\x01\\x1d\\xb3\\x7b\\x9d\\x62\\x95\\x1f\\x0e\\xf7\\xaa\\x7f\\x15\\xc4\\xbf\\x94\\x9c\\xb0\\x1f\\xc9\\xa7\\xb1\\xbb\\xbc\\x1a\\xb0\\x7a\"\n\"\\xa4\\x65\\x9d\\x1e\\xbc\\x9f\\xa3\\xab\\xb8\\x1a\\xd2\\x42\\xbd\\x23\\x5a\\x63\\x81\\x74\\x65\\x1e\\x8f\\x07\\x8f\\x07\\xab\\x79\\x9c\\x6b\\x66\\x7f\\x79\\x4c\"\n\"\\x84\\x1e\\x89\\x72\\x85\\x75\\x81\\x70\\x08\\x84\\x76\\x87\\x7b\\x83\\x1a\\x73\\xa1\\x77\\xa6\\xa1\\x98\\x95\\xa8\\x99\\x1e\\xc7\\xa8\\xa8\\x9b\\xe1\\x1b\\xbd\"\n\"\\xac\\x81\\x7b\\x77\\x67\\x7d\\x55\\x8a\\x1f\\x60\\x8a\\x8b\\x8b\\x82\\x89\\x08\\x71\\x85\\x7d\\x7a\\x72\\x1a\\x72\\x96\\x7c\\xa3\\x83\\x1e\\x98\\x87\\x92\\x8a\"\n\"\\xb0\\x8a\\x08\\xb6\\x8a\\xa9\\x80\\x7e\\x1a\\x72\\x50\\x74\\x49\\x47\\x56\\x99\\xab\\x53\\x1e\\x99\\x71\\x7c\\x91\\x7e\\x1b\\x70\\x71\\x71\\x6f\\x6e\\xa1\\x76\"\n\"\\xc4\\x71\\x1f\\xb1\\x79\\xb8\\x7e\\xb0\\x86\\x77\\x30\\x18\\x8c\\x98\\x95\\x42\\x0a\\xb3\\x7b\\x9d\\x62\\x94\\x1f\\x0e\\xf8\\x5d\\xf5\\x15\\x6a\\xf6\\x7f\\xb0\"\n\"\\x7a\\xa8\\x74\\xa2\\x19\\xaf\\xb2\\xd4\\xdd\\x91\\x92\\x90\\x8f\\x96\\x97\\x19\\x84\\x07\\x70\\xa2\\x76\\xa9\\x9d\\x9c\\x94\\x98\\x91\\x1e\\x96\\xa1\\x9a\\xc7\"\n\"\\x9f\\x1a\\xab\\x72\\x9c\\x5d\\x51\\x65\\x79\\x59\\x5e\\x1e\\x2d\\x24\\x71\\x70\\x73\\x7c\\xf7\\x21\\x1d\\x2c\\x06\\x4b\\x74\\x7e\\x66\\x67\\xa3\\x79\\xbb\\x1f\"\n\"\\x8d\\x06\\x3c\\xfb\\xf9\\x05\\x4d\\x74\\x7d\\x65\\x65\\xa2\\x7e\\xcb\\x1f\\xea\\x06\\xca\\xa3\\x99\\xaf\\xb0\\x74\\x9b\\x58\\x1f\\xaa\\xf7\\x25\\x05\\xa6\\x06\"\n\"\\xa9\\x8c\\xa4\\x70\\x9e\\x54\\xab\\x26\\x18\\xa1\\x4d\\x8d\\x8a\\xca\\x88\\x7f\\x59\\x18\\x88\\x7d\\x8a\\x83\\x84\\x1a\\x72\\x9c\\x7c\\xaa\\xb5\\xa2\\xa7\\xc6\"\n\"\\x93\\x1e\\x9e\\xf7\\x1e\\x05\\x0e\\xf8\\x54\\xf3\\x15\\x60\\xda\\x81\\x9d\\x7d\\x9a\\x78\\x96\\x19\\xd9\\xd0\\xdd\\x0a\\x92\\xab\\x05\\x9b\\x1d\\x5f\\x5e\\x65\"\n\"\\x7c\\x6a\\x67\\x1e\\x3a\\x41\\x7d\\x7f\\x80\\x82\\x88\\xf7\\x5c\\x1d\\x05\\xbf\\x8d\\x9e\\x9a\\xb0\\x1a\\xb1\\x77\\x97\\x4d\\x8b\\x1d\\xfb\\x6f\\x05\\x50\\x8c\"\n\"\\x74\\x7c\\x66\\x1a\\x65\\xa2\\x7d\\xca\\x1e\\xf7\\x26\\x1d\\x85\\xa2\\x63\\xb2\\x44\\x18\\xa2\\x5d\\x92\\x85\\xa9\\x88\\x7f\\x61\\x18\\x87\\x7e\\x8a\\x84\\x82\"\n\"\\x1a\\x70\\x9c\\x7e\\xac\\xaf\\x97\\x96\\xb4\\x99\\x1e\\x95\\xad\\x9a\\xc7\\x9a\\xcf\\x08\\x0e\\xf7\\xcf\\xf7\\x5b\\x15\\x98\\x6b\\xab\\x27\\xa1\\x4c\\x8e\\x89\"\n\"\\xd0\\x89\\x19\\xf5\\x1d\\x84\\x07\\x8f\\x1d\\x65\\x79\\x5a\\x5e\\x1e\\x58\\x53\\x05\\x99\\x85\\x7b\\x95\\x7b\\x1b\\xa5\\x91\\x97\\x99\\xa6\\xe2\\x1d\\x96\\x06\"\n\"\\x7a\\x3f\\x05\\x89\\x84\\x8a\\x83\\x85\\x1a\\x75\\x9e\\x77\\xa0\\xa6\\x97\\x97\\xad\\x93\\x1e\\x60\\xf7\\x5a\\x15\\x8a\\x87\\x89\\x8b\\x89\\x1b\\x88\\x06\\xa3\"\n\"\\xf7\\x00\\x9a\\x8c\\x91\\x8b\\x98\\x8d\\x19\\x77\\x84\\x85\\x84\\x85\\x6d\\x08\\x0e\\xf8\\x02\\xf7\\x7b\\x15\\xd5\\xcc\\x94\\x93\\x90\\x8e\\x94\\x91\\x19\\x6a\"\n\"\\x8e\\x99\\x7c\\xa9\\x1b\\xa6\\x9b\\x9a\\xae\\x93\\x1f\\x92\\xab\\x05\\x9b\\x1d\\x60\\x5e\\x6f\\x80\\x69\\x5f\\x1e\\x96\\x84\\x7d\\x94\\x81\\x1b\\x7e\\x7c\\x7f\"\n\"\\x7d\\x86\\x1f\\xb2\\x79\\x96\\x4b\\x8c\\x8b\\x1d\\xfb\\x6e\\x05\\x50\\x74\\x7c\\x66\\x65\\xa2\\x7d\\xca\\x1f\\xf7\\x35\\x1d\\x9b\\x8a\\x8f\\x8b\\x98\\x87\\x81\"\n\"\\x5b\\x18\\x89\\x83\\x8a\\x84\\x84\\x1a\\x77\\x9e\\x76\\x9d\\x99\\x98\\x97\\x9f\\x92\\x1e\\x9d\\x69\\x98\\x73\\x94\\x7d\\x91\\x86\\x19\\x82\\x94\\x9e\\x87\\xb4\"\n\"\\xa4\\x1d\\x5f\\x1f\\x7d\\x06\\x8a\\x06\\x87\\x06\\x60\\xda\\x81\\x9d\\x7c\\x9a\\x7c\\x95\\x19\\x51\\xdd\\x15\\x87\\x86\\x7c\\x7f\\x80\\x82\\x89\\x8a\\x19\\x89\"\n\"\\x87\\x84\\x8a\\x82\\x1b\\x80\\x06\\x93\\xb6\\xaf\\x8c\\x9d\\x93\\x95\\x9b\\x19\\x0e\\xf7\\x15\\xf8\\x60\\x15\\xc2\\x06\\x3c\\xfb\\xf9\\x05\\x4d\\x8c\\x74\\x7d\"\n\"\\x64\\x1a\\x66\\xa2\\x7d\\xcb\\x1e\\xea\\x06\\xca\\xa3\\x99\\xb0\\xaf\\x74\\x9c\\x58\\x1f\\xab\\xf7\\x24\\x05\\xa5\\x06\\xa9\\x8d\\xa4\\x6f\\x9e\\x54\\xab\\x27\"\n\"\\x18\\xa1\\x4c\\x8e\\x89\\xd0\\x89\\x08\\x9e\\x06\\xca\\xa2\\x99\\xb0\\xb2\\x75\\x99\\x4b\\x1f\\x7c\\x06\\x69\\xf7\\x01\\x80\\xb0\\x79\\xa8\\x74\\xa2\\x19\\xaf\"\n\"\\xb2\\xd4\\xdd\\x90\\x91\\x90\\x90\\x97\\x97\\x19\\x84\\x07\\x8f\\x1d\\x66\\x79\\x59\\x5d\\x1e\\x2d\\x24\\x71\\x70\\x73\\x7c\\xf7\\x21\\x1d\\xfb\\x8c\\x66\\x1d\"\n\"\\x82\\x84\\x70\\x0a\\x0e\\xf7\\x44\\xf7\\xd5\\x15\\x5b\\xfb\\x6e\\x05\\x4f\\x8c\\x74\\x7c\\x66\\x1a\\x65\\xa2\\x7d\\xcb\\x1e\\xe0\\x06\\xca\\xa3\\x99\\xaf\\xae\"\n\"\\x75\\x9c\\x5d\\x8c\\x1f\\x9b\\xd1\\x05\\xa1\\x06\\xb2\\x93\\x85\\x63\\xa2\\x1f\\xb3\\x44\\x98\\x73\\x94\\x7d\\x90\\x86\\x19\\x82\\x94\\x9f\\x87\\xb3\\xa4\\x1d\"\n\"\\x60\\x1f\\x7d\\x06\\x89\\x06\\x87\\x06\\x60\\xda\\x81\\x9d\\x7c\\x9a\\x7a\\x96\\x19\\xd8\\xd0\\x94\\x92\\x90\\x8f\\x94\\x91\\x19\\x6a\\x8e\\x9a\\x7c\\xa9\\x1b\"\n\"\\xa6\\x9a\\x9a\\xae\\x93\\x1f\\x92\\xaa\\x05\\x8f\\x9b\\x8c\\x92\\x91\\x1a\\xab\\x72\\x9d\\x5f\\x5e\\x64\\x7b\\x6b\\x67\\x1e\\x3a\\x41\\x7e\\x7f\\x7f\\x82\\x88\"\n\"\\x8a\\x19\\x89\\x88\\x83\\x8a\\x82\\x1b\\x80\\x06\\x94\\xb6\\x05\\xbe\\x8d\\x9e\\x9a\\xb0\\x1a\\xb1\\x78\\x97\\x4d\\x1e\\xfb\\x73\\x06\\xf7\\x18\\x1d\\x0e\\xf8\"\n\"\\x7e\\xf6\\x15\\xdb\\xf7\\xf6\\x05\\xb2\\x8f\\xa4\\xa3\\xac\\xd2\\x0a\\x27\\xae\\x0a\\x95\\x06\\x6f\\xfb\\x14\\x05\\xfb\\x62\\x06\\xa7\\xf7\\x14\\x05\\x97\\x06\"\n\"\\xaa\\x96\\x7f\\x1d\\x27\\x39\\x1d\\x7b\\x1a\\x71\\x97\\x7e\\xa8\\x87\\x1e\\x3b\\xfb\\xf9\\x05\\x89\\x06\\x38\\x0a\\x7b\\x7e\\x66\\x0a\\x9d\\x81\\x9b\\x7c\\x90\"\n\"\\x1e\\x8e\\x83\\x84\\x8c\\x76\\x1b\\x82\\x06\\xa7\\xf7\\x12\\x05\\xf7\\x62\\x06\\x6f\\xfb\\x12\\x05\\x7f\\x37\\x1d\\x6c\\x9c\\x7f\\xb7\\x1e\\xe5\\x06\\x80\\x59\"\n\"\\x05\\x88\\x80\\x8a\\x81\\x84\\x1a\\x71\\x9c\\x7c\\xaa\\xb4\\xa2\\xa7\\xc6\\x93\\x1e\\x9f\\xf7\\x1f\\x05\\x0e\\xf8\\x7d\\xf3\\x15\\xbb\\xf7\\x6e\\xa6\\x0a\\x8a\"\n\"\\x86\\xcd\\x0a\\x98\\xc6\\x05\\xf7\\x70\\x06\\x7e\\x50\\x05\\x85\\x06\\x59\\x6b\\x74\\x66\\x6e\\x9f\\x7d\\xb5\\x1f\\xec\\x06\\x7f\\x62\\x05\\x89\\xe1\\x0a\\x9b\"\n\"\\xd1\\x9c\\x1e\\xaa\\xf7\\x14\\x05\\x0e\\xf7\\xe8\\x7e\\x15\\xd1\\x8e\\xca\\x9b\\xba\\xa8\\x08\\xbb\\xa7\\xa3\\xa7\\xa5\\x9e\\x0a\\x7d\\x4b\\x05\\x80\\x0a\\x22\"\n\"\\xd2\\x3f\\xf7\\x08\\x79\\x1e\\x77\\x31\\x05\\x8c\\x99\\x94\\x42\\x0a\\xb2\\x7b\\x9e\\x62\\x94\\x1f\\x0e\\xf7\\xf3\\x7c\\x15\\xf7\\x19\\x91\\xf4\\xbd\\xc5\\xdd\"\n\"\\x1d\\x9b\\xd5\\x05\\xf7\\x3c\\x1d\\x9c\\x6a\\x5b\\x95\\x54\\x1b\\x2e\\x88\\x1d\\x42\\xba\\x4d\\xd0\\x78\\x1e\\xa0\\x85\\x9f\\x87\\xa6\\x89\\x79\\x36\\x18\\x8c\"\n\"\\x98\\x94\\x8c\\x90\\x1b\\xa8\\xec\\x1d\\xb2\\x7b\\x9e\\x61\\x94\\x1f\\x0e\\xf8\\x2a\\xf7\\x7f\\x29\\x0a\\x77\\x1b\\x2e\\x34\\x1d\\x0e\\xf7\\x53\\x96\\x15\\x75\"\n\"\\x23\\x05\\x88\\x38\\x1d\\xf7\\x04\\x9f\\x1d\\x97\\x86\\x96\\x81\\x94\\x1e\\x92\\x82\\x82\\x8d\\x6e\\x1b\\x8a\\x06\\x9f\\xe7\\xf7\\x96\\xf7\\xd7\\x05\\xb3\\x90\"\n\"\\xa4\\xa2\\xac\\xee\\x0a\\x7f\\x88\\x7f\\x72\\x0a\\x90\\x89\\x92\\xab\\x0a\\x0e\\xf8\\x26\\xf7\\x6e\\x15\\x8f\\x9d\\xf7\\x69\\xf7\\x75\\x05\\xa1\\x95\\x8d\\x90\"\n\"\\x96\\x1f\\xa1\\x97\\x99\\xa1\\xa0\\x52\\x1d\\x83\\x20\\x1d\\x2e\\x39\\x1d\\x7b\\x1a\\x77\\x93\\x80\\x9e\\x82\\x1e\\xfb\\x07\\xfb\\x0d\\x4e\\xf7\\x0c\\xf7\\x04\"\n\"\\x1d\\x7a\\x7a\\x1a\\x6e\\x9c\\x7f\\xb1\\x8a\\x1e\\xf7\\x05\\xfb\\x74\\x87\\x78\\x05\\x27\\x06\\x64\\x70\\xf7\\x22\\x0a\\xed\\x06\\x84\\x6c\\x05\\x4d\\x06\\x6b\"\n\"\\x81\\x3a\\x1d\\xf7\\x7b\\x06\\xa7\\x9a\\xd8\\x0a\\x4f\\x06\\x91\\xaa\\x05\\xea\\x06\\xb2\\xa6\\x4b\\x0a\\xf7\\x51\\x8c\\x15\\x47\\x06\\x64\\x70\\x77\\x6d\\x83\"\n\"\\x8f\\x80\\x90\\x85\\x1f\\x83\\x92\\x94\\x89\\xa3\\x1b\\xce\\x06\\x89\\x81\\x05\\x88\\x06\\x6b\\x81\\x89\\x7f\\x95\\x1d\\xb6\\x1e\\xf7\\x04\\x06\\xa9\\x98\\xf7\"\n\"\\x1f\\x0a\\x9c\\x9c\\x1a\\x97\\x86\\x97\\x81\\x93\\x1e\\x93\\x82\\x82\\x8c\\x6e\\x1b\\x8a\\x06\\x8d\\x95\\x05\\xd1\\x06\\xb1\\xa6\\xa0\\xa8\\xa4\\x7e\\x95\\x68\"\n\"\\x1f\\x48\\x06\\xf7\\x94\\xf7\\xd5\\x05\\xb3\\x90\\xa4\\xa2\\xac\\xee\\x0a\\x7f\\x88\\x7f\\x72\\x0a\\x91\\x89\\x91\\xab\\x0a\\xee\\xfb\\xcc\\x05\\x0e\\xf8\\x90\"\n\"\\xf2\\x15\\xfb\\x0e\\xf7\\x4c\\xf7\\x54\\xf7\\x42\\x05\\xb5\\x8c\\xa9\\xa5\\xad\\x3e\\x1d\\x83\\x84\\x8c\\x76\\x1b\\x31\\x25\\x1d\\x79\\x91\\x81\\x9e\\x81\\x1e\"\n\"\\xfb\\x00\\x2a\\x49\\xeb\\x05\\xab\\x9a\\x9a\\x9d\\xa4\\x51\\x1d\\x82\\x20\\x1d\\x30\\x06\\x6b\\x81\\x88\\x7f\\x30\\x1d\\x90\\x89\\x92\\x8a\\x98\\x8a\\xf7\\x08\"\n\"\\xfb\\x40\\x18\\xfb\\x61\\xfb\\x4e\\x05\\x60\\x8a\\x6d\\x72\\x68\\x21\\x0a\\xf7\\x02\\x20\\x0a\\x9b\\x1a\\xa4\\x7e\\x98\\x71\\x8e\\x1e\\xf7\\x09\\xf5\\xd1\\x22\"\n\"\\x05\\x65\\x87\\x71\\x72\\x6b\\x21\\x0a\\xf7\\x02\\x06\\x91\\x06\\x8c\\x06\\x7e\\x54\\x05\\x88\\x7f\\x8a\\x82\\x84\\x1a\\x71\\x9c\\x7d\\xaa\\xb4\\xa2\\xa6\\xc6\"\n\"\\x94\\x1e\\x9e\\xf7\\x1f\\x05\\x0e\\xf8\\x89\\xf1\\x15\\xfb\\x0b\\xf7\\x0a\\xf7\\x2a\\xf1\\xa2\\x8d\\x92\\x8e\\x97\\x94\\x19\\x9b\\x98\\x94\\x9d\\x9b\\x1a\\x9c\"\n\"\\x80\\x9b\\x7d\\xf7\\x03\\x1d\\xb4\\x05\\xa0\\x99\\xf7\\x08\\x1d\\x7a\\x1a\\x7a\\x95\\x7c\\x9a\\x86\\x1e\\x8f\\x89\\x90\\x8a\\x95\\x8a\\xf0\\x26\\x18\\xfb\\x3c\"\n\"\\xfb\\x0a\\x74\\x89\\x83\\x88\\x7f\\x81\\x19\\x7b\\x7e\\x82\\x7b\\xf7\\x36\\x1d\\x97\\x94\\x9d\\x9d\\x1a\\x9d\\x85\\x94\\x78\\x94\\xf7\\x2d\\x0a\\x72\\x21\\x0a\"\n\"\\xf7\\x06\\x06\\x7f\\x60\\x05\\x89\\x83\\x89\\x7f\\x82\\x1a\\x70\\x9c\\x7e\\xac\\xb4\\x98\\x9a\\xd2\\x9c\\x1e\\xa9\\xf7\\x14\\x05\\x0e\\xc9\\x1d\\x51\\x06\\x4c\"\n\"\\x74\\x7d\\x65\\x65\\xa1\\x7e\\xcb\\x8a\\x1f\\xf7\\x1e\\x06\\x7f\\x54\\x05\\x88\\x81\\x8a\\x80\\x83\\x85\\x0a\\xc6\\x93\\x1e\\x9e\\xf7\\x21\\x05\\x0e\\xf8\\x61\"\n\"\\xf3\\x15\\xcd\\x1d\\x82\\x65\\x05\\x54\\x06\\x4b\\x74\\x7d\\x65\\x65\\xa1\\x7e\\xcc\\x8a\\x1f\\xf7\\x09\\x06\\x7f\\x54\\x05\\x88\\x80\\x8a\\x81\\x83\\x85\\x0a\"\n\"\\xc6\\x93\\x1e\\x9f\\xf7\\x21\\x05\\x0e\\xf7\\xcd\\xf7\\x44\\x15\\xaa\\x94\\x98\\x90\\xa4\\x98\\x75\\x28\\x18\\x51\\x06\\x4c\\x74\\x7d\\x65\\x65\\xa1\\x7d\\xcb\"\n\"\\x1f\\xf7\\x28\\x9c\\x1d\\x9d\\x5e\\x8c\\x1f\\xda\\xf7\\xf9\\x05\\xc5\\x8c\\x7d\\x1d\\x71\\x7b\\x83\\x87\\x64\\x79\\x19\\x93\\xae\\x05\\x8c\\x92\\x8c\\x92\\x93\"\n\"\\x1a\\xa3\\x79\\x9d\\x74\\x72\\x7e\\x7e\\x6a\\x83\\x1e\\x7b\\x41\\x05\\x72\\x8e\\x83\\x91\\x9c\\x1a\\x96\\x8e\\x9f\\x8e\\x99\\x1e\\xa5\\xf7\\x09\\x05\\xcc\\xa0\"\n\"\\x98\\xb1\\xb2\\x74\\x98\\x4b\\x1f\\xc5\\x0a\\x74\\x88\\x74\\x7c\\x1a\\x65\\x9e\\x68\\xab\\x74\\x1e\\x9e\\x7d\\x9b\\x86\\xaf\\x86\\x08\\x89\\x81\\x8a\\x83\\x87\"\n\"\\x1a\\x76\\x9f\\x77\\xa0\\xa5\\x98\\x98\\xac\\x92\\x1e\\x0e\\xf7\\xbe\\xf7\\x0f\\x15\\xa4\\x90\\x9b\\x90\\xa1\\x93\\x82\\x66\\x18\\x84\\x06\\x80\\x77\\x85\\x85\"\n\"\\x80\\x1f\\x7f\\x84\\x84\\x7d\\x78\\x1a\\x78\\x92\\x7c\\x98\\x84\\x1e\\x85\\x95\\x9f\\x86\\x96\\x1b\\xe5\\x06\\xcb\\xa2\\x99\\xb0\\xac\\x78\\x9b\\x61\\x8e\\x1f\"\n\"\\xbc\\xf7\\x6e\\x05\\xc2\\x8d\\x77\\x0a\\x42\\x27\\x0a\\x69\\x9f\\x7a\\xb6\\x8a\\x1f\\x7e\\x4e\\x75\\x81\\x84\\x88\\x6a\\x7f\\x19\\x90\\x9e\\x05\\x8d\\x92\\x8c\"\n\"\\x92\\x92\\x1a\\xa4\\x7a\\x9d\\x73\\x84\\x81\\x89\\x87\\x85\\x1e\\x7e\\x84\\x88\\x86\\x84\\x6f\\x7d\\x54\\x18\\x85\\x8d\\x85\\x8d\\x86\\x8c\\x08\\x81\\x8f\\x89\"\n\"\\x8d\\x91\\x1a\\x8d\\x8c\\x8e\\x8e\\x9c\\x1e\\x9a\\xcb\\x05\\xc9\\x8c\\xa1\\x98\\xb1\\x1a\\xb1\\x74\\x99\\x4a\\x1e\\x3d\\x06\\x4b\\x74\\x7d\\x66\\x6a\\x9e\\x7b\"\n\"\\xb4\\x88\\x1f\\x7e\\x50\\x05\\x87\\x78\\x89\\x7d\\x7e\\x1a\\x5a\\xae\\x67\\xc6\\x7f\\x1e\\x96\\x89\\x92\\x89\\x84\\x71\\x05\\x89\\x83\\x8a\\x82\\x86\\x1a\\x75\"\n\"\\x9e\\x77\\xa1\\xa5\\x97\\x96\\xae\\x94\\x1e\\x0e\\xf7\\xe3\\xf8\\x60\\x15\\xc5\\x06\\xcb\\xa2\\x99\\xb1\\xb1\\x74\\x99\\x4b\\x1f\\xfb\\x28\\x27\\x0a\\x69\\xa1\"\n\"\\x79\\xb8\\x8a\\x1f\\x3c\\xfb\\xf9\\x05\\x52\\x8a\\x76\\x7d\\x67\\x1a\\x65\\xa2\\x7d\\xcb\\x1e\\xde\\x06\\xca\\xa3\\x99\\xaf\\xae\\x75\\x9c\\x5c\\x8c\\x1f\\xa7\"\n\"\\xf7\\x15\\x05\\xb6\\xd4\\xb8\\x9c\\xb5\\x1b\\xa6\\x98\\x82\\x79\\x80\\x89\\x7b\\x87\\x79\\x1f\\x70\\xfb\\x09\\x05\\x4b\\x75\\x7e\\x65\\x64\\xa2\\x7e\\xcb\\x1f\"\n\"\\xe4\\x06\\xc9\\xa3\\x99\\xaf\\xae\\x75\\x9c\\x5f\\x8c\\x1f\\xa4\\xf7\\x04\\x05\\x91\\xa5\\x8e\\xa0\\x99\\x1a\\xd2\\x51\\xbd\\x39\\x5a\\x5f\\x80\\x72\\x5a\\x1e\"\n\"\\x0e\\xf7\\xa9\\xf8\\xae\\x15\\x8e\\x99\\x8c\\x93\\x96\\x1a\\xa7\\x7d\\x98\\x6e\\x66\\x77\\x76\\x58\\x7f\\x1e\\x2a\\xfc\\x49\\x54\\x0a\\x58\\x0a\\xc9\\x1d\\xfb\"\n\"\\x0f\\x06\\x62\\xfb\\x2d\\x05\\x88\\x7f\\x89\\x7d\\x81\\x1a\\x71\\x9c\\x7e\\xaa\\xb2\\x9c\\x9d\\xbe\\x95\\x1e\\x96\\xc2\\x05\\xf7\\x47\\x06\\xb8\\x8c\\xa5\\x9f\"\n\"\\xaf\\x1a\\xaa\\x74\\x9b\\x5f\\x1e\\x0e\\xf8\\x61\\xf3\\x15\\xbc\\xf7\\x6e\\x05\\xc2\\x8c\\x77\\x0a\\x42\\x27\\x0a\\x6a\\xa0\\x7a\\xb5\\x89\\x1f\\x7e\\x4e\\x05\"\n\"\\x6f\\x4d\\x5f\\x7f\\x5c\\x1b\\x78\\x7f\\x90\\x94\\x8d\\x8c\\x8e\\x8e\\x9c\\x1f\\x9a\\xcc\\x05\\xc9\\xa1\\x98\\xb1\\xb1\\x74\\x99\\x4a\\x1f\\x3d\\x06\\x4b\\x74\"\n\"\\x7d\\x66\\x6b\\x9e\\x7a\\xb4\\x88\\x1f\\x7e\\x50\\x05\\x87\\x78\\x89\\x7e\\x7d\\x1a\\x4e\\xc2\\x63\\xde\\xb4\\xb2\\x93\\x9c\\xbb\\x1e\\x82\\x66\\x05\\xfb\\x0a\"\n\"\\x06\\x5f\\xfb\\x2a\\x05\\x87\\x7f\\x89\\x7d\\x82\\x1a\\x6f\\x9a\\x7d\\xa9\\xb3\\x9f\\x9e\\xbc\\x95\\x1e\\x97\\xc2\\x05\\xf7\\x2c\\x06\\xc2\\x8c\\xa2\\x9a\\xb1\"\n\"\\x1a\\xae\\x77\\x9a\\x5c\\x1e\\x0e\\xf8\\xb4\\xf7\\xd1\\x15\\xfc\\x5f\\x06\\x85\\x6a\\x88\\x6d\\x6e\\x1a\\x36\\xa9\\x43\\xbe\\x66\\x1e\\x6f\\xb2\\xbe\\x7b\\xbd\"\n\"\\x1b\\xf7\\x4b\\xf7\\x41\\xf7\\x45\\xf7\\x4f\\xf7\\x17\\x2b\\xeb\\xfb\\x17\\x33\\x23\\x59\\x43\\x4c\\x1f\\xed\\x63\\x8c\\x8d\\x8d\\x8c\\x8d\\x8d\\x19\\x8c\\x8c\"\n\"\\x8b\\x8c\\x8c\\x1b\\xaf\\xbb\\xb2\\x9b\\xb5\\x1b\\xb7\\xb2\\x78\\x6c\\xa3\\x1f\\x9e\\x71\\x99\\x64\\x70\\x1a\\x72\\x27\\x15\\x68\\x56\\x7d\\x79\\x74\\x76\\x08\"\n\"\\x6d\\x6a\\x55\\x76\\x60\\x1b\\x61\\x62\\x9e\\xaa\\x75\\x1f\\x7e\\x9c\\x82\\xa6\\x80\\xbc\\x08\\x0e\\x22\\x1d\\xfb\\x09\\xf8\\x0e\\x46\\x1d\\x2d\\x1d\\xfb\\x0a\"\n\"\\xf8\\x7b\\x2b\\x0a\\xf8\\x40\\xf8\\xd6\\x15\\xfb\\x4c\\xfb\\x41\\xfb\\x44\\xfb\\x4f\\xfb\\x17\\xeb\\x2a\\xf7\\x16\\xf7\\x48\\xf7\\x44\\xf7\\x45\\xf7\\x4a\\xf7\"\n\"\\x1b\\x2d\\xec\\xfb\\x17\\x1f\\xe7\\xfb\\xed\\x15\\x74\\x5f\\x7a\\x75\\x6b\\x72\\x08\\x6a\\x62\\x5d\\x79\\x5f\\x1b\\x62\\x65\\x9d\\xab\\x72\\x1f\\x78\\xa2\\x84\"\n\"\\xa0\\x86\\xbb\\x08\\x9b\\xdf\\x15\\xeb\\xb4\\xdd\\xc9\\xe0\\x1b\\xde\\xc1\\x4c\\x2c\\x8a\\x1f\\x0e\\xbe\\x1d\\x24\\x1d\\xad\\xf7\\x28\\x05\\x8e\\x9b\\x8c\\x91\"\n\"\\x93\\x1a\\xa1\\x21\\x1d\\xcf\\xf9\\x4e\\x46\\x1d\\x33\\x1d\\xfb\\x5e\\xf8\\x2c\\x2b\\x0a\\xf7\\x50\\xf9\\x6c\\xf7\\x0b\\x0a\\x7a\\x94\\x7a\\xba\\x0a\\x0e\\xf8\"\n\"\\x3d\\x95\\x15\\x7f\\x9b\\x96\\x87\\x9c\\x1b\\xd2\\xba\\xe5\\xf7\\x1e\\xf7\\x19\\x5a\\xe5\\x43\\x39\\x61\\x33\\xfb\\x3f\\x1f\\xfb\\xd1\\x07\\x71\\x9c\\x79\\xa4\"\n\"\\xa3\\x9c\\x9d\\xa5\\x1e\\xf7\\xe6\\x04\\x9e\\x07\\xd0\\xa1\\xd3\\xa0\\xa1\\x9e\\x47\\x3f\\x2f\\x7b\\x51\\x71\\x75\\x7c\\xaf\\xc3\\x88\\x1e\\xfc\\x04\\xf7\\xc0\"\n\"\\x15\\xfb\\xd0\\x07\\x8a\\x67\\x81\\x6f\\x7c\\x86\\x08\\x7c\\x83\\x82\\x7c\\x7a\\x1a\\x89\\x07\\x8c\\x73\\x9e\\x7a\\xa5\\x8d\\x08\\xee\\x06\\xf7\\x06\\xca\\xec\"\n\"\\xf7\\x43\\xf7\\x06\\x6d\\xe1\\x55\\xb4\\x1f\\x6d\\xa2\\x73\\x93\\x5b\\x8c\\x8d\\x93\\x8c\\x8e\\x8e\\x8e\\x08\\x90\\x92\\x8d\\x91\\x93\\x1a\\x96\\x85\\x96\\x80\"\n\"\\x91\\x1e\\x89\\x8c\\x05\\x8f\\x85\\x83\\x8d\\x84\\x1b\\x71\\x71\\x6c\\x64\\x85\\x1f\\x86\\x06\\x6f\\x79\\x7b\\x73\\x74\\x9d\\x7b\\xa7\\x1f\\xe1\\x16\\xdb\\x8a\"\n\"\\xa6\\x57\\xfb\\x28\\x1a\\x2a\\x79\\x50\\x69\\x77\\x1e\\x83\\x7c\\x7a\\x88\\x61\\x1b\\x95\\x9d\\x94\\xb2\\xa9\\x1a\\x0e\\xf7\\x9f\\xef\\x15\\x86\\x8d\\x69\\x9a\"\n\"\\x80\\x91\\x7d\\x96\\x19\\x64\\xab\\x73\\xce\\xd6\\x1a\\xf7\\x0a\\xc3\\xcb\\xf3\\xf3\\xc3\\x4c\\xfb\\x0b\\x36\\x6e\\x46\\x5a\\x6d\\x1e\\x80\\x84\\x80\\x85\\x70\"\n\"\\x80\\x08\\x27\\xf7\\x5f\\x07\\xa5\\x94\\x8c\\x92\\x96\\x1f\\x9c\\x95\\x96\\x9e\\x9d\\x1a\\x9c\\x82\\x9c\\x7c\\x95\\x1e\\x94\\x7f\\x81\\x8d\\x70\\x1b\\x5e\\x06\"\n\"\\xc8\\xac\\xae\\xd5\\xeb\\x1a\\xd9\\x6e\\xd7\\x5d\\xb6\\x1e\\xb6\\x5d\\x3b\\xa5\\x34\\x1b\\x34\\x3b\\x71\\x60\\x5d\\x1f\\x5d\\x60\\x6e\\x3f\\x3d\\x1a\\x2b\\xae\"\n\"\\x41\\xc8\\x6a\\x1e\\x5e\\x06\\x72\\x82\\xed\\x0a\\x83\\x97\\x95\\x89\\xa7\\x1b\\xf7\\x5f\\x06\\x0e\\xb0\\x0a\\x79\\x1d\\xe6\\x16\\xbe\\x06\\xf7\\x34\\xf8\\x19\"\n\"\\xf7\\x35\\xfc\\x19\\x05\\xbe\\x06\\xfb\\x42\\xf8\\x47\\x05\\x40\\x06\\x0e\\xe6\\xf8\\x46\\x15\\xf7\\x42\\xfc\\x46\\x05\\xd6\\x06\\xf7\\x42\\xf8\\x47\\x05\\x58\"\n\"\\x06\\xfb\\x35\\xfc\\x19\\xfb\\x34\\xf8\\x19\\x05\\x58\\x06\\x0e\\xf7\\xbd\\xf8\\x89\\x15\\xfb\\x1b\\xfb\\x05\\xfb\\x04\\xfb\\x1b\\xfb\\x22\\xf7\\x02\\xfb\\x04\"\n\"\\xf7\\x20\\xf7\\x1c\\xf7\\x03\\xf7\\x04\\xf7\\x1f\\xf7\\x1f\\xfb\\x03\\xf7\\x03\\xfb\\x1e\\x1f\\x70\\xfb\\xad\\x15\\xfb\\x36\\x07\\x35\\x94\\x3e\\xd6\\x87\\xd9\"\n\"\\x08\\xc2\\x04\\x91\\xde\\xd5\\xd5\\xe2\\x96\\x08\\xfb\\x3c\\x07\\xc2\\x54\\x15\\xf7\\x3b\\x06\\x88\\x42\\x3b\\x3d\\x37\\x80\\x08\\xf7\\x6d\\x04\\xf7\\x3c\\x07\"\n\"\\xdf\\x82\\xd7\\x3f\\x92\\x38\\x08\\x0e\\x9c\\x16\\xf8\\xcb\\xf8\\xcb\\xfc\\xcb\\x06\\xf8\\x92\\xfc\\x92\\x15\\xfc\\x59\\xf8\\x59\\xf8\\x59\\x06\\x0e\\xca\\xf7\"\n\"\\xe7\\x15\\xfb\\x2b\\x90\\x68\\xa6\\x5f\\x1e\\x47\\xb5\\xd8\\x62\\xe1\\x1b\\xbf\\xbb\\x9a\\xa6\\xb4\\x1f\\xbe\\xae\\xa8\\xb9\\x95\\xca\\x08\\x90\\xac\\x8c\\xa1\"\n\"\\xed\\x1a\\xf7\\x51\\x07\\x9f\\x80\\x99\\x7b\\x7b\\x82\\x7f\\x75\\x1e\\xfb\\x54\\x07\\xfb\\x10\\x86\\x62\\x78\\x6a\\x1e\\x57\\x6d\\x4a\\x68\\x49\\x1b\\x63\\x62\"\n\"\\x98\\xa2\\x6a\\x1f\\x62\\xa8\\x78\\xac\\x85\\xbb\\x87\\xa9\\x8b\\x8b\\x8a\\xf7\\x01\\x08\\xf7\\x54\\x07\\xa0\\x81\\x98\\x7b\\x7a\\x82\\x7f\\x75\\x1e\\x0e\\xf7\"\n\"\\xe1\\x16\\xf7\\x67\\xf8\\xeb\\x05\\x55\\x06\\x4c\\xfb\\x37\\x05\\xfb\\x97\\x06\\x4d\\xf7\\x37\\x05\\x58\\x06\\xf7\\x5f\\xfc\\xeb\\x05\\xf7\\x2a\\xf8\\x15\\x15\"\n\"\\xfb\\x03\\xfb\\xe2\\x05\\x84\\x06\\x24\\xf7\\xe2\\x05\\x0e\\xf8\\xf4\\xf8\\x3d\\x75\\x1d\\xa7\\xe5\\x1d\\xa6\\xa7\\xc1\\xae\\x1f\\xcb\\xb5\\x9a\\x9c\\xa6\\x5c\"\n\"\\x1d\\xf8\\x99\\xf7\\xd5\\x15\\x92\\x06\\xb2\\xa9\\xa6\\xae\\xa9\\x7a\\x97\\x60\\x1f\\xfb\\x04\\x06\\x59\\x6c\\x73\\x66\\x6d\\x9d\\x7e\\xb5\\x1f\\x90\\x06\\x6f\"\n\"\\xfb\\x14\\x05\\x45\\x7c\\x67\\x69\\x4f\\x1b\\x63\\x76\\x9b\\xa8\\x96\\x8e\\x9a\\x92\\xab\\x1f\\xc0\\xf7\\x7d\\x05\\xfb\\x0b\\x06\\x58\\x6d\\x74\\x64\\x6e\\x9d\"\n\"\\x7e\\xb5\\x1f\\x90\\x06\\x6e\\xfb\\x15\\x05\\x87\\x77\\x88\\x73\\x7b\\x1a\\x34\\xd0\\x4f\\xf0\\xc9\\xbf\\xa0\\xb4\\xb5\\x1e\\xa9\\xa9\\x9d\\xb1\\x9a\\xcf\\x08\"\n\"\\x0e\\x72\\x1d\\xfb\\x69\\xf8\\x2d\\x15\\x69\\x6c\\x6e\\x6b\\x72\\x68\\x0a\\x9d\\x79\\xa5\\xae\\xaa\\xa8\\xad\\xa3\\x79\\x9c\\x70\\x1f\\x0e\\x72\\x1d\\x6e\\xf8\"\n\"\\x12\\x15\\x9d\\x97\\x94\\x97\\x22\\x0a\\x7b\\x82\\x81\\x87\\x82\\x7e\\x1e\\xfb\\x13\\x38\\x05\\x79\\x80\\x82\\x7e\\x7d\\x1a\\x7b\\x96\\x81\\x9b\\x94\\x94\\x8f\"\n\"\\x94\\x9a\\x1e\\xfb\\x10\\xe6\\x15\\x68\\x6c\\x6e\\x6a\\x73\\x9d\\x79\\xa6\\xad\\xaa\\xa8\\xac\\xa4\\x79\\x9c\\x71\\x1f\\xf7\\xd7\\x16\\x64\\x1d\\x0e\\x72\\x1d\"\n\"\\x82\\xf8\\x12\\xed\\x1d\\x57\\x1d\\x39\\xf8\\xeb\\xeb\\x1d\\xf8\\xf4\\xf8\\x3d\\x15\\xfb\\x20\\x25\\x1d\\x6e\\x9d\\x7e\\xb6\\x1e\\xa8\\x06\\x66\\xfb\\x3c\\x05\"\n\"\\x58\\x4d\\x70\\x7f\\x59\\x1b\\x5f\\x71\\x9a\\xa6\\x93\\x8c\\x91\\x8c\\x93\\x1f\\xc8\\xf7\\xa2\\x05\\xfb\\x0d\\x06\\x71\\x82\\x8a\\x85\\x80\\x1f\\x75\\x7f\\x7d\"\n\"\\x76\\x76\\x9d\\x1d\\x4b\\x1d\\x79\\x1a\\x44\\xc7\\x5b\\xe6\\x61\\x1d\\xa8\\x99\\x8e\\x97\\x99\\xf7\\x02\\x0a\\x97\\x81\\x93\\x1e\\x83\\x91\\x84\\x8d\\x77\\x8c\"\n\"\\x08\\xbb\\xf8\\xa7\\x15\\x7d\\x7b\\x81\\x77\\x78\\x1f\\x6f\\x6f\\x88\\x88\\x7d\\x1b\\x81\\x80\\x98\\x1d\\x67\\x63\\x75\\x63\\x66\\x1f\\x7b\\x79\\x84\\x7e\\x7f\"\n\"\\x1a\\x7b\\x97\\x80\\x9c\\x96\\x95\\x90\\x96\\x96\\x1e\\xaf\\xb0\\x93\\x8e\\x1d\\xa1\\xa1\\x93\\x99\\x99\\x1a\\x98\\x7c\\x97\\x7c\\x1e\\x0e\\x3d\\x0a\\xf7\\xdd\"\n\"\\xf8\\xe2\\x15\\xa5\\x9d\\x91\\x94\\x9c\\x1a\\x9e\\x7c\\x98\\x77\\x80\\x83\\x88\\x7f\\x7a\\x1e\\xfb\\x2b\\x20\\x05\\x74\\x7a\\x82\\x80\\x7b\\x1a\\x78\\x98\\x7f\"\n\"\\xa0\\x8a\\x1e\\x94\\x99\\x91\\x95\\x9a\\x1f\\x0e\\xf7\\xb8\\xf7\\x50\\x1d\\xa1\\x8d\\x92\\x8e\\x97\\x95\\x19\\x9b\\x97\\x94\\x9c\\x9c\\xf7\\x13\\x1d\\x7a\\x7a\"\n\"\\x1a\\x7a\\x87\\x0a\\x87\\x94\\x91\\x8b\\xa0\\x1b\\x4b\\xfb\\x15\\x71\\xf7\\x22\\x05\\x2d\\x06\\x33\\xfb\\x22\\x86\\xf7\\x15\\x05\\xa5\\x96\\xad\\x0a\\xf7\\x56\"\n\"\\xf8\\xd6\\xaf\\x0a\\x3d\\x0a\\xdb\\xf9\\x0c\\x40\\x0a\\x3d\\x0a\\xe0\\xf9\\x24\\xf7\\x15\\x0a\\x90\\x81\\x97\\xf7\\x32\\x1d\\x85\\x95\\x80\\x96\\x1f\\x0e\\xf8\"\n\"\\x48\\xf7\\x84\\x15\\xa2\\xf7\\x00\\x87\\x8c\\x05\\x86\\x06\\x84\\x8c\\x88\\x8b\\x83\\x8c\\x08\\x37\\x94\\x70\\x9a\\xae\\x1a\\xa3\\x9a\\xa4\\xa2\\x9b\\x1e\\x9c\"\n\"\\x96\\xa5\\x92\\xad\\x8e\\xab\\x8d\\x98\\x8d\\x96\\x8e\\x08\\xa3\\x94\\x9e\\xa3\\xa4\\x1a\\xa8\\x79\\x98\\x60\\x1e\\xfb\\x5c\\x06\\x5a\\x6a\\x73\\x68\\x6e\\x9f\"\n\"\\x7d\\xb7\\x89\\x1f\\x6c\\x6d\\x7f\\x71\\x65\\x1a\\x67\\x99\\x6a\\xa5\\x70\\x1e\\x2e\\x5f\\x62\\x50\\x34\\x1a\\x57\\x9f\\x61\\xb2\\x70\\x1e\\xa2\\x7b\\xb0\\x7e\"\n\"\\xcd\\x7b\\x08\\xa5\\x85\\x91\\x86\\x7f\\x1a\\x74\\x79\\x82\\x57\\x86\\x1e\\x61\\x87\\x74\\x74\\x65\\x1a\\x72\\xa0\\x7d\\xb3\\xf7\\x03\\xd2\\xc5\\xe5\\xca\\x6d\"\n\"\\xa9\\x37\\xa2\\x1e\\x30\\xa3\\x7f\\x94\\xb1\\x1a\\xd1\\xd6\\xb6\\xf7\\x13\\x8e\\x1e\\x0e\\xf7\\x54\\x92\\x58\\x1d\\xf7\\xb7\\xf7\\x94\\x60\\x0a\\x53\\x0a\\xf7\"\n\"\\x4b\\xf7\\xe2\\xf7\\x15\\x0a\\x91\\x81\\x96\\x80\\x1f\\xf7\\x03\\x21\\x05\\x80\\x96\\x94\\x86\\x95\\x1b\\xa5\\xa3\\xa1\\xa2\\x95\\x85\\x95\\x80\\x96\\x1f\\x0e\"\n\"\\xd2\\x1d\\xf7\\x29\\xf8\\x81\\x2f\\x1d\\xd2\\x1d\\x8d\\xf8\\xa5\\x5b\\x1d\\xf7\\xfa\\xf8\\x87\\x15\\x55\\x60\\x56\\x55\\x61\\x55\\x08\\x50\\x3f\\x72\\x50\\x4b\"\n\"\\x1a\\x5f\\x99\\x62\\xa4\\x6e\\x1e\\xa2\\x71\\xac\\x79\\xd4\\x73\\xa1\\x84\\x8b\\x8b\\x8e\\x8a\\x08\\x99\\x85\\x92\\x83\\x7f\\x1a\\x74\\x76\\x7f\\x5a\\x86\\x1e\"\n\"\\x60\\x87\\x75\\x75\\x64\\x1a\\x71\\xa0\\x7e\\xb3\\xf6\\xd6\\xc7\\xe1\\xaf\\x7c\\xac\\x72\\xa2\\x1e\\x7c\\x99\\x72\\x96\\x5e\\x9a\\x08\\x40\\xa4\\x7d\\x98\\xb4\"\n\"\\x1a\\xc8\\xb8\\xd2\\xf0\\xec\\x1e\\xbc\\xbb\\xbf\\xb5\\xb8\\xa9\\x94\\x91\\x18\\xa1\\xf1\\x05\\xfb\\x70\\x06\\x59\\x6b\\x72\\x63\\x71\\x9f\\x7e\\xb4\\x1f\\x0e\"\n\"\\x7e\\x98\\xf8\\xed\\x9b\\x06\\xf2\\x0a\\xf7\\x04\\x0b\\xaf\\x9c\\x8f\\x90\\x8f\\x92\\x8f\\x8f\\x8f\\x96\\x92\\x92\\x0c\\x0c\\xf8\\xec\\x14\\xa9\\x13\\x01\\x06\"\n\"\\x02\\x00\\x01\\x00\\x0d\\x00\\x14\\x00\\x1a\\x00\\x22\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\\x6f\\x00\\x7d\\x00\\x83\\x00\\x8b\\x00\\xa6\\x00\\xb4\\x00\\xc1\\x00\"\n\"\\xc7\\x00\\xfd\\x01\\x01\\x01\\x07\\x01\\x10\\x01\\x15\\x01\\x20\\x01\\x25\\x01\\x2e\\x01\\x36\\x01\\x3d\\x01\\x43\\x01\\x4a\\x01\\x79\\x01\\x80\\x01\\xab\\x01\"\n\"\\xb9\\x02\\x13\\x02\\x1b\\x02\\x20\\x02\\x27\\x02\\x4b\\x02\\x57\\x02\\x70\\x02\\x8c\\x02\\x9d\\x02\\xa5\\x02\\xb4\\x02\\xbf\\x02\\xc3\\x02\\xcf\\x02\\xd6\\x02\"\n\"\\xdf\\x02\\xe6\\x02\\xee\\x02\\xf5\\x02\\xfd\\x03\\x03\\x03\\x51\\x03\\x5b\\x03\\x75\\x03\\x7a\\x03\\x88\\x03\\xdc\\x03\\xf8\\x04\\x46\\x04\\x83\\x04\\xa9\\x04\"\n\"\\xde\\x05\\x0a\\x05\\x14\\x05\\x35\\x05\\x41\\x05\\x47\\x05\\x59\\x05\\x66\\x05\\x73\\x05\\x7b\\x05\\x90\\x05\\x99\\x05\\xad\\x05\\xb3\\x05\\xb9\\x05\\xc4\\x05\"\n\"\\xd5\\x05\\xdb\\x05\\xe7\\x05\\xf4\\x05\\xf9\\x06\\x00\\x06\\x09\\x06\\x0f\\x06\\x16\\x06\\x20\\x06\\x2d\\x06\\x34\\x06\\x3b\\x06\\x47\\x06\\x4b\\x06\\x56\\x06\"\n\"\\x61\\x06\\x6b\\x06\\x72\\x06\\x7b\\x06\\x84\\x06\\x8d\\x06\\x96\\x06\\x9f\\x06\\xa8\\x06\\xae\\x06\\xb5\\x06\\xbd\\x06\\xc5\\x06\\xda\\x06\\xe3\\x07\\x34\\x07\"\n\"\\x8e\\x07\\xe5\\x08\\x43\\x08\\x64\\x08\\xcb\\x09\\x25\\x09\\x4c\\x09\\x5c\\x09\\x6b\\x09\\x70\\x09\\x8a\\x09\\x98\\x0a\\x08\\x0a\\x45\\x0a\\xaf\\x0b\\x00\\x0b\"\n\"\\x1d\\x0b\\x68\\x0b\\xae\\x0b\\xc8\\x0b\\xf6\\x0c\\x3b\\x0c\\x65\\x0c\\x9a\\x0c\\xda\\x0d\\x0f\\x0d\\x2c\\x0d\\x30\\x0d\\x3f\\x0d\\x5f\\x0d\\x7a\\x0d\\x96\\x0d\"\n\"\\x9c\\x0d\\xb7\\x0d\\xe2\\x0d\\xf8\\x0d\\xfd\\x0e\\x08\\x0e\\x18\\x0e\\x24\\x0e\\x30\\x0e\\x41\\x0e\\x47\\x0e\\x4a\\x0e\\x5f\\x0e\\x62\\x0e\\x70\\x0e\\x94\\x0e\"\n\"\\xb3\\x0e\\xce\\x0e\\xef\\x0e\\xfd\\x0f\\x19\\x0f\\x2a\\x0f\\x36\\x0f\\x48\\x0f\\x68\\x0f\\x75\\x0f\\x81\\x0f\\x87\\x0f\\xa4\\x0f\\xaf\\x0f\\xbb\\x0f\\xcf\\x0f\"\n\"\\xe2\\x0f\\xe7\\x0f\\xfb\\x10\\x14\\x10\\x19\\x10\\x28\\x10\\x40\\x10\\x45\\x10\\x50\\x10\\x5a\\x10\\x60\\x10\\x6d\\x10\\x74\\x10\\x89\\x10\\x92\\x10\\xa6\\x10\"\n\"\\xb4\\x10\\xb9\\x10\\xcd\\x10\\xd9\\x10\\xe0\\x10\\xf3\\x10\\xff\\x11\\x12\\x11\\x1b\\x11\\x28\\x11\\x33\\x11\\x3c\\x11\\x42\\x11\\x49\\x11\\x5a\\x11\\x63\\x11\"\n\"\\x6c\\x11\\x73\\x11\\x7d\\x11\\x8e\\x11\\x9e\\x11\\xae\\x11\\xb7\\x11\\xbc\\x11\\xc4\\x11\\xce\\x11\\xd8\\x11\\xe2\\x11\\xea\\x11\\xf0\\x11\\xf5\\x12\\x03\\x12\"\n\"\\x11\\x12\\x1f\\x12\\x2d\\x12\\x33\\x12\\x41\\x12\\x47\\x12\\x55\\x12\\x63\\x12\\x6c\\x12\\x75\\x12\\x7e\\x12\\x8b\\x12\\x98\\x12\\xa5\\x12\\xb2\\x12\\xbf\\x12\"\n\"\\xcc\\x12\\xd8\\x12\\xe4\\x12\\xf0\\x12\\xfc\\x13\\x08\\x13\\x12\\x13\\x1a\\x13\\x22\\x13\\x2a\\x13\\x32\\x13\\x3a\\x13\\x45\\x13\\x50\\x13\\x5b\\x13\\x66\\x13\"\n\"\\x71\\x13\\x7c\\x13\\x87\\x13\\x92\\x13\\x9d\\x13\\xa8\\x13\\xb3\\x13\\xbe\\x06\\xa8\\x99\\x8f\\x96\\x99\\x1f\\x9a\\x97\\x95\\x9d\\x0b\\x1a\\x6d\\x9d\\x7f\\xb6\"\n\"\\x1e\\x0b\\x99\\x1a\\x9a\\x80\\x95\\x0b\\x95\\x0a\\x29\\xdc\\x44\\x93\\x1d\\x0b\\xf8\\x23\\xf8\\x49\\x15\\x2e\\x2f\\x65\\x4d\\x50\\x1f\\x5c\\x59\\x6f\\x4e\\x54\"\n\"\\x1a\\xfb\\x03\\xe2\\x40\\xf7\\x16\\xf7\\x39\\xf7\\x2b\\xf7\\x13\\xf7\\x1f\\xf7\\x02\\x34\\xd7\\xfb\\x13\\x1e\\x70\\x24\\x15\\xd9\\xc0\\x63\\x50\\x3d\\x35\\x46\"\n\"\\x28\\x40\\x56\\xb4\\xc5\\xd9\\xe1\\xd0\\xeb\\x1f\\x0b\\x06\\x6b\\x81\\x3a\\x1d\\x0b\\x94\\x8f\\x94\\x99\\x1e\\x0e\\x06\\x4c\\x73\\x7d\\x66\\x0b\\xf8\\x5c\\x49\"\n\"\\x0a\\x9d\\x9c\\x1a\\x9b\\x80\\x9b\\x7d\\x74\\x1d\\x0b\\xd0\\x0a\\x83\\x84\\x8c\\x0b\\x8e\\x97\\x9a\\x1f\\x9b\\x97\\x94\\x0b\\xf7\\x2a\\x0a\\xcb\\xa8\\xbd\\xb8\"\n\"\\x1f\\xa1\\xa3\\x9a\\xaa\\xf7\\x30\\x1d\\x54\\x6b\\xa6\\xb9\\x1f\\xa6\\x8c\\x82\\x96\\x77\\x1b\\x0e\\xb8\\xb4\\xb1\\xb5\\xaa\\x73\\xa2\\x69\\x1f\\x7a\\xf7\\x24\"\n\"\\x0a\\x0b\\x05\\x63\\x85\\x72\\x74\\x6b\\x1a\\x6f\\x9f\\x7c\\xb4\\x1e\\x0b\\x06\\x5a\\xfb\\x6f\\x05\\x0b\\xf7\\xfd\\xf8\\x61\\x15\\xc1\\x06\\xa9\\x97\\x7f\\x1d\"\n\"\\xfb\\x69\\x49\\x1d\\x9c\\x7f\\xb7\\x1e\\xbe\\x06\\x3c\\xfb\\xfa\\x05\\x55\\x25\\x0a\\xf8\\x6f\\x06\\xb5\\xf7\\x4e\\x05\\x8e\\x9b\\x8c\\x90\\x79\\x0a\\x67\\x75\"\n\"\\x75\\x5e\\x81\\x1e\\x78\\x36\\x05\\xfb\\x63\\x06\\x0b\\xf9\\x0a\\x77\\x1d\\xf7\\x05\\x1d\\x78\\x87\\x1d\\x79\\x7b\\x21\\x0a\\xf8\\x13\\x7b\\x1d\\x0b\\xf7\\x43\"\n\"\\x1d\\x4b\\x0a\\x06\\x59\\x6b\\x73\\x67\\x6e\\x9f\\x7c\\xb4\\x1f\\x0b\\xf7\\x1f\\x0a\\x9d\\x0b\\x94\\x94\\x87\\x95\\x1b\\xa3\\xa2\\xa1\\x0b\\x88\\x7f\\x7c\\x1f\"\n\"\\x7b\\x7f\\x82\\x0b\\x6b\\x81\\x88\\x7f\\x7c\\x1f\\x0b\\x06\\x5b\\xfb\\x6f\\x05\\x0b\\xf7\\xb9\\xf8\\x3d\\x92\\x0a\\x0b\\xf7\\x89\\xf7\\x68\\x15\\xe7\\x06\\xb1\"\n\"\\x7e\\xd1\\xfb\\x03\\xa6\\x33\\x08\\xf7\\x20\\x1d\\x73\\xc4\\x6d\\xbb\\x68\\xb0\\xce\\x1d\\xba\\xf7\\x67\\x15\\xab\\xf7\\x26\\x05\\xf7\\x01\\x06\\xc2\\xaf\\x75\"\n\"\\x68\\x5a\\x42\\x63\\x33\\x1f\\x0b\\xf7\\x96\\xf8\\x03\\x96\\x0a\\x0b\\xf7\\xe6\\xf7\\x50\\x1d\\x05\\xb3\\x8f\\xa5\\xa3\\xac\\xf7\\x13\\x1d\\x79\\x7b\\x1a\\x6d\"\n\"\\x9c\\x7f\\xb7\\x1e\\x4b\\xfb\\x15\\x71\\xf7\\x22\\x05\\x2d\\x06\\x33\\xfb\\x22\\x86\\xf7\\x15\\x05\\xa6\\x95\\xad\\x0a\\x0b\\xf9\\x06\\x7a\\x0a\\x9c\\x6a\\x5b\"\n\"\\x95\\x54\\x1b\\x2e\\x5a\\x0a\\x0b\\xf8\\x0c\\xf8\\x3e\\x15\\xfb\\x20\\x06\\x71\\x7a\\x87\\x80\\x7e\\x1f\\x7b\\x7e\\x82\\x7a\\x7b\\x1a\\x6d\\x9d\\x7e\\xb5\\x1e\"\n\"\\xa9\\x2e\\x0a\\x54\\x06\\x6c\\x81\\x88\\x7f\\x7b\\x1f\\x7c\\x7f\\x31\\x1d\\xb5\\x1e\\xf7\\xbe\\x06\\xa7\\x9a\\xf7\\x1a\\x1d\\xfb\\x1a\\x06\\xa9\\xf7\\x1b\\x05\"\n\"\\xd1\\xf2\\xbd\\xa5\\xa9\\x1b\\x98\\x92\\x87\\x7f\\x97\\x1f\\x7d\\x98\\x95\\x86\\x9a\\x1b\\xac\\xac\\xaa\\xaa\\xb1\\x52\\xb1\\x53\\x59\\x64\\x7c\\x55\\x32\\x1f\"\n\"\\x0b\\xc1\\x0a\\xa8\\x75\\x9f\\x6c\\x1f\\x0e\\x1a\\x9c\\x2c\\x1d\\x0b\\x8c\\x90\\x1b\\xa7\\xec\\x1d\\x0b\\xf7\\x39\\x06\\xfc\\x0c\\xfb\\xfc\\x74\\x26\\x05\\xf8\"\n\"\\x62\\x06\\xb1\\xf7\\x3b\\x05\\x8f\\x9e\\x8b\\x8c\\x93\\x1a\\xa2\\xf7\\x74\\x1d\\x82\\x86\\x80\\x86\\x72\\x7c\\x49\\x18\\x0b\\x05\\x78\\x34\\x0a\\xf7\\x66\\xf7\"\n\"\\x6a\\x1d\\x38\\x06\\x0b\\x87\\x1e\\x3b\\xfb\\xfa\\x05\\x89\\xf7\\x1e\\x0a\\x7b\\x7f\\x66\\x0a\\x9c\\x81\\x9c\\x41\\x1d\\x76\\x1b\\x82\\x2b\\x1d\\x0b\\x15\\x98\"\n\"\\x97\\x92\\x91\\x8b\\x1a\\x93\\x94\\x8e\\x92\\x96\\x1a\\x9d\\x7c\\x99\\x78\\x7d\\x83\\x87\\x7f\\x7d\\x1e\\xfb\\x08\\x26\\x05\\x0b\\x15\\x64\\x71\\x77\\x6e\\x72\"\n\"\\x98\\x81\\xae\\x1f\\xf7\\x89\\x06\\xb1\\xa7\\x4b\\x0a\\x1f\\x9a\\x97\\x95\\x9d\\x3c\\x1d\\x0b\\xf8\\x61\\x15\\xed\\x06\\xa9\\x97\\x8e\\x97\\x9a\\x1f\\x9a\\x97\"\n\"\\x95\\x0b\\x65\\x68\\x66\\x6e\\xa1\\x76\\xa9\\xb4\\xb1\\xae\\x0b\\x9f\\xa8\\xa5\\x1d\\x1e\\xfb\\x32\\x21\\x05\\x75\\x7c\\x81\\x7d\\x7b\\x1a\\x0b\\xf7\\x56\\x1d\"\n\"\\xb3\\xb1\\xae\\x0b\\x1b\\x8a\\x06\\xb0\\xf7\\x3d\\x05\\xbe\\x0b\\x8e\\x97\\x9b\\xf7\\x03\\x0a\\x0b\\x82\\x1a\\x7c\\x96\\x80\\x9b\\x99\\x0b\\x9b\\x7d\\x90\\x1e\"\n\"\\x8e\\x82\\x0b\\x7c\\x1a\\x78\\x99\\x7e\\x9f\\x95\\x0b\\xf7\\x82\\x92\\x58\\x1d\\x0b\\x05\\x88\\x67\\x0a\\xa8\\xde\\x0a\\x82\\x8d\\x6f\\x4e\\x0a\\xcc\\xa5\\x96\"\n\"\\xb9\\x1b\\xb7\\xa6\\x7b\\x71\\x84\\x8a\\x81\\x88\\x7f\\x1f\\x68\\xfb\\x34\\x05\\x88\\x06\\x6b\\x80\\x89\\xf7\\x04\\x0a\\xf7\\x04\\x06\\xa9\\x99\\x8f\\x96\\x99\"\n\"\\xf7\\x03\\x0a\\xa9\\x7a\\x97\\x60\\x1e\\x8a\\x06\\xb1\\xf7\\x3f\\x05\\x8e\\x99\\x8c\\x96\\x9b\\x1a\\xd4\\x4f\\xbc\\x31\\x59\\x58\\x78\\x6a\\x60\\x1e\\x0e\\xf7\"\n\"\\xf9\\x6a\\x0a\\xaa\\x1a\\x9c\\xc7\\x1d\\x0b\\xdd\\xf7\\x86\\x15\\x80\\x0a\\xfb\\x10\\xed\\x3b\\xf7\\x2a\\xe6\\xda\\xa3\\xb9\\xc6\\x1e\\xa5\\xa0\\x98\\x9e\\x9f\"\n\"\\x9e\\x0a\\x0b\\xf8\\x5b\\xc1\\x1d\\x0b\\xf8\\x2e\\x49\\x0a\\x9c\\x9c\\x1a\\x9c\\x81\\x9b\\x7c\\x74\\x1d\\x0e\\xf7\\x7d\\xf7\\xd5\\x15\\xa7\\x06\\xb9\\xaa\\xa4\"\n\"\\xb1\\xa6\\x75\\x99\\x64\\x1f\\xfb\\x28\\x34\\x0a\\x9b\\x06\\x5b\\xfb\\x6d\\xf7\\x4b\\x1d\\xf7\\x88\\xf7\\x8b\\x6a\\xfb\\x23\\x05\\x73\\x06\\x59\\x6b\\x72\\x64\"\n\"\\x72\\xa1\\x7c\\xb2\\x1f\\xf7\\x2d\\x06\\xb9\\xab\\xa4\\xae\\xa8\\x77\\x9a\\x62\\x1f\\x7a\\x06\\xba\\xf7\\x6d\\x05\\x96\\x06\\xb1\\xab\\xa7\\xad\\xa6\\x76\\x9a\"\n\"\\x62\\x1f\\x24\\x06\\xfb\\x85\\xfb\\x8b\\x05\\x0b\\x88\\x1d\\x58\\xa2\\x5d\\xb3\\x6c\\x1e\\x71\\xaf\\xc2\\x7d\\xd6\\x1b\\xef\\xd5\\x9c\\xaf\\xc1\\x1f\\xa7\\x9d\"\n\"\\x9a\\xa1\\xa0\\xdd\\x1d\\x0b\\x15\\xa5\\xa3\\x8f\\x90\\x9b\\x1a\\x9d\\x7e\\x98\\x78\\x80\\x81\\x87\\x80\\x7e\\x1e\\xfb\\x12\\x22\\x05\\x6f\\x73\\x88\\x86\\x7c\"\n\"\\x1a\\x79\\x99\\x7c\\x9d\\x95\\x97\\x90\\x97\\x98\\x1e\\xf7\\xb6\\xf3\\x15\\xa6\\xa3\\x8e\\x90\\x9b\\x1a\\x9d\\x7e\\x98\\x79\\x7f\\x82\\x87\\x80\\x7d\\x1e\\xfb\"\n\"\\x12\\x22\\x05\\x70\\x73\\x87\\x86\\x7c\\x1a\\x79\\x99\\x7c\\x9d\\x95\\x97\\x91\\x96\\x98\\x1e\\x0e\\xf8\\xd6\\x15\\xfb\\x4a\\xfb\\x42\\xfb\\x45\\xfb\\x4d\\xfb\"\n\"\\x17\\xea\\x29\\xf7\\x14\\xf7\\x4e\\xf7\\x41\\xf7\\x43\\xf7\\x50\\xf7\\x18\\x2b\\xeb\\xfb\\x16\\x1f\\x75\\x24\\x15\\xdb\\xc4\\x4e\\x36\\xfb\\x0b\\xfb\\x03\\xfb\"\n\"\\x0c\\xfb\\x02\\x39\\x52\\xc7\\xe1\\xf7\\x0d\\xf7\\x02\\xf7\\x0a\\xf7\\x05\\x1f\\x0b\\x1a\\x61\\xa9\\x72\\xbe\\xb0\\xba\\x97\\x9c\\xa7\\x1e\\x9a\\x95\\x96\\x9c\"\n\"\\x9a\\x1a\\x9f\\x7d\\x98\\x76\\x83\\x85\\x89\\x86\\x80\\x1e\\x7e\\x6c\\x80\\x87\\x7f\\x1b\\x80\\x86\\x8e\\x92\\x0b\\x15\\xfb\\x13\\x6a\\x05\\x6c\\x83\\x80\\x80\"\n\"\\x76\\x1a\\x7b\\x95\\x80\\x99\\x91\\x93\\x8c\\x8e\\x93\\x1e\\xb2\\x97\\x5d\\xfb\\x79\\x05\\x5d\\x06\\x6b\\x78\\x7d\\x73\\x78\\x97\\x83\\xa5\\x1f\\xf7\\x37\\x06\"\n\"\\xa6\\x9d\\x9b\\xa3\\x9d\\x82\\x92\\x74\\x1f\\x59\\x06\\x0b\\xf7\\x55\\x1d\\xe0\\xef\\xf5\\xdb\\xd5\\x9d\\x7f\\x97\\x7a\\x74\\x7f\\x80\\x6d\\x7f\\x1f\\x61\\x7b\"\n\"\\x5c\\x6e\\x56\\x1b\\x72\\x75\\x92\\x9a\\x78\\x1f\\x7b\\x97\\x88\\x92\\x88\\xa8\\x08\\xac\\x88\\x84\\x94\\x75\\x1b\\x0e\\xf7\\x10\\x0a\\x95\\x1b\\xa3\\xc8\\x0a\"\n\"\\x26\\x0a\\x56\\x64\\x97\\xa2\\x75\\x1e\\xa9\\x88\\x7c\\x99\\x6f\\x1b\\x66\\x75\\x75\\x5f\\x81\\x1f\\x84\\x6b\\x05\\x88\\x7b\\x8a\\x87\\x83\\x1a\\x73\\x9d\\x7b\"\n\"\\xa6\\x99\\x0b\\x1b\\xfb\\xa8\\x6b\\x0a\\xf7\\x06\\x06\\x4f\\xfb\\x9f\\x0b\\x06\\xa8\\x99\\xd8\\x0a\\x0b\\x8f\\x8e\\x8e\\x8c\\x8d\\x08\\x93\\x94\\x8e\\x92\\x96\"\n\"\\x1a\\x9d\\x7d\\x98\\x78\\x7a\\x0b\\x7d\\x1a\\x7b\\x9a\\x7d\\x9d\\x9a\\x9b\\x94\\x9b\\x99\\x1e\\x0e\\xf7\\x00\\x0a\\xf7\\x0d\\x06\\xa9\\x98\\x3d\\x1d\\x9b\\x1a\"\n\"\\x0b\\xeb\\x0a\\xb5\\x1e\\xf7\\x05\\x06\\x0b\\x9d\\x79\\xa5\\xae\\xaa\\xa8\\xac\\xa4\\x79\\x9c\\x70\\x1f\\xf7\\x61\\x16\\x69\\x6c\\x6e\\x6b\\x72\\x0b\\x90\\x1e\"\n\"\\x8e\\x82\\x85\\x8c\\x76\\x1b\\x0b\\xf7\\x95\\x15\\xad\\xfb\\x95\\x05\\xf7\\x08\\x06\\xf7\\x37\\xf8\\x62\\x05\\xae\\x91\\xa3\\xa3\\x0b\\x06\\x6a\\x83\\x99\\x1d\"\n\"\\x0b\\x06\\x6b\\x81\\x37\\x0a\\x0b\\x06\\x6b\\x81\\x2a\\x1d\\x7b\\x1a\\x6d\\x9c\\x7f\\x0b\\x9d\\x1a\\x9d\\x7c\\x98\\x77\\x80\\x80\\x87\\x80\\x7d\\x1e\\xfb\\x2b\"\n\"\\x21\\x05\\x0b\\x86\\x84\\x4d\\x1d\\x26\\x0a\\x1a\\x75\\x9e\\x7a\\xa5\\xad\\xa3\\xa2\\xb6\\x94\\x1e\\x0b\\xf1\\x0a\\x89\\x81\\x89\\x7f\\x85\\x1a\\x75\\x9e\\x79\"\n\"\\xa3\\x0b\\x7d\\xf7\\x15\\x1d\\x0b\\x4a\\x0a\\xb1\\xa8\\x75\\x9f\\x0b\\x90\\x1e\\x8e\\x82\\x84\\x8c\\x77\\x1b\\x0b\\xf7\\x72\\x1d\\x7b\\x1e\\x0e\\x9a\\x1d\\x81\"\n\"\\x7d\\x87\\x82\\x0b\\x9f\\x99\\xaf\\x1a\\xb1\\x74\\x99\\x4b\\x1e\\x0b\\x63\\x93\\x5b\\x1b\\xfb\\x1d\\x22\\x46\\x31\\x4c\\xbf\\x6c\\x0b\\x93\\x1a\\xa2\\x78\\x9c\"\n\"\\x72\\x0b\\xf8\\x06\\x15\\xf7\\x3c\\x1d\\x0b\\x1a\\x58\\xb2\\x6a\\xc8\\xdc\\xcb\\xc5\\xd4\\xa3\\x82\\x0b\\x81\\x3f\\x1d\\x0b\\x06\\xb0\\xab\\xa8\\xac\\xa7\\x76\"\n\"\\x99\\x62\\x1f\\x0b\\xab\\xa2\\xb0\\xa8\\x77\\x99\\x62\\x1f\\x82\\x06\\x0b\\x1a\\xa1\\x7a\\x9a\\x73\\x7a\\x81\\x85\\x7a\\x0b\\x87\\x7a\\x89\\x7a\\x7a\\x1a\\x0b\"\n\"\\x40\\x4d\\x3a\\x79\\x1f\\x83\\x69\\x05\\x0b\\x06\\x6c\\x7f\\x88\\x7f\\x7c\\x1f\\x7c\\x0b\\x8b\\x8c\\x94\\x1a\\xa2\\x78\\x9c\\x72\\x0b\\x15\\x40\\xfb\\xe4\\x81\"\n\"\\x5b\\x5f\\x6b\\x0b\\x1a\\x72\\x9c\\x7c\\xa9\\xb5\\xa2\\xa7\\x0b\\x1f\\x7b\\x7f\\x82\\x7a\\x7a\\x1a\\x6d\\x0b\\x95\\x7b\\x9a\\x86\\x1e\\x0b\\x90\\x1e\\x8f\\x81\"\n\"\\x87\\x8b\\x0b\\x06\\x92\\xac\\x05\\xa2\\x90\\xa0\\x0b\\x73\\x7b\\x99\\xa1\\xac\\xa5\\xa4\\x0b\\xf7\\x85\\x9d\\x0a\\x98\\x8e\\x96\\x99\\xd3\\x1d\\x99\\x8f\\x96\"\n\"\\x99\\x1f\\x9a\\x97\\x95\\xe8\\x0a\\x0b\\xf8\\x16\\xf7\\x1e\\x1d\\x83\\x84\\xb7\\x1d\\xf7\\x03\\x1d\\xb5\\x05\\xa0\\x98\\xf7\\x08\\x1d\\x7b\\x1a\\x7a\\x87\\x0a\"\n\"\\x8f\\x89\\x90\\x8a\\x95\\x8a\\xf0\\x27\\x18\\xfb\\x3c\\xfb\\x0b\\x74\\x89\\x83\\x89\\x7f\\x81\\x19\\x7b\\x7e\\x82\\x7a\\xf7\\x36\\x1d\\x98\\x94\\x9d\\x9d\\x1a\"\n\"\\x9c\\x85\\x94\\x78\\x95\\xf7\\x2d\\x0a\\x71\\x21\\x0a\\xf7\\x04\\x06\\xa8\\x99\\x28\\x1d\\x9b\\x1a\\x9c\\x81\\x9b\\x7c\\x91\\x1e\\x87\\x8c\\x85\\x8c\\x7f\\x8c\"\n\"\\x08\\x0e\\xf7\\x91\\xf7\\x32\\x15\\x9c\\x96\\xd9\\x39\\x05\\x7b\\x7c\\x84\\x7e\\x7a\\x21\\x0a\\xf7\\x0a\\xf7\\x22\\x1d\\x82\\x85\\x8b\\x76\\xd4\\x0a\\x9c\\xd2\"\n\"\\x0a\\xfb\\x04\\x82\\x0a\\x7e\\x82\\x7a\\x7a\\x1a\\x81\\x8d\\x86\\x90\\x82\\x1e\\x3b\\x56\\xd1\\xf7\\xd1\\x05\\xfb\\x0d\\x06\\x73\\x80\\x8a\\x85\\x80\\x1f\\x76\"\n\"\\x80\\x7c\\x75\\x76\\xf4\\x0a\\x33\\xfc\\x20\\x05\\x7e\\x06\\x6b\\x80\\x88\\x7f\\x7d\\x1f\\x7b\\x7e\\x31\\x1d\\xb5\\x1e\\xf7\\x0c\\x06\\x0b\\xf7\\x46\\xf7\\x52\"\n\"\\x1d\\x52\\xfb\\x90\\x05\\x6c\\x6c\\x0a\\x79\\x7a\\x21\\x0a\\xf7\\x15\\x20\\x0a\\x9c\\x1a\\x9c\\x81\\x9a\\x7c\\x91\\x1e\\x86\\x8d\\x84\\x8c\\x7e\\x8c\\xdb\\xf7\"\n\"\\xf9\\x18\\xb2\\x90\\xa4\\xa3\\xab\\x41\\x0a\\xfb\\x03\\x06\\xfb\\x57\\xfb\\xaa\\x41\\xf7\\xaa\\x05\\xfb\\x03\\x25\\x1d\\x72\\x98\\x7e\\xa7\\x88\\x1e\\x3c\\xfb\"\n\"\\xfa\\x05\\x5f\\x8a\\x6d\\x72\\x67\\x21\\x0a\\xf7\\x15\\xb3\\x0a\\x8c\\x77\\x1b\\x6d\\x06\\x0e\\xf8\\xcc\\xf7\\xef\\x15\\x9b\\x1d\\x5f\\x5e\\x65\\x7b\\x6b\\x67\"\n\"\\x1e\\x3a\\x41\\x7d\\x7f\\x80\\x82\\x88\\xf7\\x5c\\x1d\\x05\\xbf\\x8d\\x9e\\x9a\\xb0\\x1a\\xb1\\x77\\x97\\x4d\\x8b\\x1d\\xfb\\x6e\\x05\\x50\\x74\\x7c\\x66\\x65\"\n\"\\xa2\\x7d\\xca\\x1f\\xf7\\x26\\x1d\\x86\\xa2\\x62\\xb2\\x44\\x18\\x98\\x73\\x94\\x7d\\x91\\x86\\x08\\x82\\x94\\x9e\\x87\\xb4\\xa4\\x1d\\x5f\\x1f\\x7d\\x06\\x8a\"\n\"\\x06\\x87\\x06\\x60\\xda\\x81\\x9d\\x7c\\x9b\\x79\\x95\\x19\\xd9\\xd0\\xdd\\x0a\\x0b\\xc6\\x15\\x69\\xb3\\xb7\\x7b\\xf7\\x14\\x0a\\x3c\\xd0\\xfb\\x11\\x4f\\x5e\"\n\"\\x7d\\x67\\x54\\x1f\\x94\\xb1\\x05\\xfb\\x0d\\xae\\x0a\\x97\\x06\\x2e\\xfc\\x33\\x9f\\x0a\\x15\\x28\\x37\\x1d\\x7a\\x87\\x0a\\x90\\x89\\x92\\x8a\\x98\\x8a\\x5a\"\n\"\\xfb\\x6f\\x18\\x89\\xf7\\x63\\x1d\\x7b\\x1a\\x6c\\x9c\\x7f\\xb6\\x1e\\xf7\\x04\\x06\\xa8\\x99\\x29\\x1d\\x9c\\x81\\x9c\\x41\\x1d\\x77\\x1b\\x8a\\x06\\xb0\\xf7\"\n\"\\x3c\\x05\\xba\\xc3\\xae\\x9b\\xb7\\x1b\\xbc\\xa4\\x7c\\x6f\\x85\\x8a\\x84\\x89\\x83\\x1f\\x66\\xfb\\x3b\\x05\\x60\\x6d\\x72\\x68\\x6c\\x9d\\x7f\\xb6\\x1f\\xe4\"\n\"\\xd3\\x0a\\x7d\\x1b\\xb1\\xf7\\x3d\\x05\\x8e\\x9a\\x8d\\x9a\\x9a\\x1a\\xd3\\x4e\\xbb\\x31\\x55\\x67\\x7e\\x64\\x55\\x1e\\x0b\\xf8\\x24\\xf7\\x2b\\x15\\x94\\x5c\"\n\"\\x05\\x79\\x6c\\x0a\\x79\\x7a\\x1a\\x6d\\x9d\\x7f\\xb5\\x1e\\xf7\\x1f\\x6b\\x1d\\x9b\\x97\\x94\\x9d\\x9b\\x1a\\xa7\\x79\\x9a\\x6b\\x1e\\x82\\x06\\x2b\\xf8\\x60\"\n\"\\x05\\xfb\\x70\\x6b\\x0a\\xc3\\x06\\xfb\\x7b\\xfb\\xf9\\x6b\\x8a\\x81\\x89\\x7d\\x7f\\x19\\x7b\\x7e\\x31\\x1d\\xb6\\x1e\\xf7\\x18\\xdc\\x0a\\x82\\x85\\x8c\\x76\"\n\"\\x1b\\x7c\\x06\\xa9\\xba\\x05\\xf7\\x67\\xf2\\x15\\xfb\\x25\\x06\\xf7\\x03\\xf7\\x3d\\x05\\x0e\\xf7\\xb5\\xf7\\xd6\\x15\\xf7\\x46\\x81\\x1d\\x20\\x1d\\xdc\\x1d\"\n\"\\x6b\\x99\\x6f\\xa4\\x7b\\x1e\\x77\\xa9\\xb7\\x80\\xb8\\x1b\\xd2\\xeb\\xa1\\xa8\\xc3\\x1f\\xa4\\x98\\x97\\x9c\\xa1\\x78\\x1d\\x0b\\xf9\\x0f\\xe1\\x1d\\x49\\x5d\"\n\"\\x45\\xe4\\x0a\\x97\\x8e\\x96\\x99\\xe0\\x1d\\x0b\\x15\\xf7\\x3f\\xfc\\x03\\x05\\xf4\\x06\\xf1\\xf8\\x61\\x05\\xc4\\x1d\\x0b\\xf8\\x2d\\xc1\\x1d\\x0e\\xf7\\x29\"\n\"\\x0a\\x79\\x7e\\x85\\x7b\\x7a\\x1e\\xa9\\x4c\\x73\\x91\\x52\\x1b\\xfb\\x30\\xfb\\x25\\xfb\\x0a\\xfb\\x2e\\x69\\x1f\\x0b\\xf7\\x56\\xf7\\x53\\x15\\xea\\x06\\xf5\"\n\"\\xca\\xa3\\xc9\\xc4\\x9b\\x0a\\xca\\x7f\\xb5\\x71\\xac\\x1f\\xa8\\x74\\x6b\\x9c\\x6e\\x1b\\x6c\\x73\\x73\\x6e\\x7a\\x90\\x84\\xa4\\x7b\\x1f\\xab\\x77\\x92\\x7d\"\n\"\\x58\\x1a\\x52\\x84\\x63\\x7a\\x6c\\x1e\\x70\\x7c\\x79\\x7c\\x79\\x1b\\x7a\\x82\\x9a\\xa5\\x9b\\x8e\\x9e\\x8f\\xa0\\x1f\\x91\\xa3\\x8c\\x92\\x97\\x1a\\xa6\\x7c\"\n\"\\x99\\x6f\\x68\\x75\\x77\\x5d\\x7e\\x1e\\x38\\x73\\x75\\x6b\\x6b\\x1b\\x7b\\x83\\x98\\xa7\\xbe\\xa1\\xd4\\xa5\\xae\\x1f\\x98\\x9c\\x9b\\x97\\xa7\\x98\\x08\\xad\"\n\"\\x9a\\x99\\x9c\\xa3\\x1a\\xa5\\x72\\xa3\\x6f\\x61\\x51\\x68\\x5a\\x66\\x1e\\x61\\x53\\x6e\\x30\\x3f\\x1a\\x0b\\x1f\\xb1\\xb4\\xa1\\xbd\\xbb\\x1a\\xe6\\x44\\xc4\"\n\"\\xfb\\x06\\x1e\\xfb\\x7d\\x06\\x6b\\xe7\\x1d\\x90\\x1d\\x6d\\x9d\\x7f\\xb6\\x1e\\xf7\\x69\\x06\\xa7\\x9a\\x8f\\x96\\x99\\xf7\\x45\\x1d\\x20\\x1d\\x2e\\x06\\xda\"\n\"\\xf7\\xfa\\x15\\xf7\\x07\\x06\\xc4\\xac\\x74\\x63\\x4e\\x56\\x60\\x3f\\x1f\\xfb\\x05\\x06\\x0e\\x15\\x76\\x79\\x78\\x76\\x7d\\x94\\x82\\x9c\\x8a\\x1f\\xa2\\x8a\"\n\"\\x92\\x8a\\x95\\x86\\x08\\x9d\\x82\\x97\\x7a\\x7a\\x1a\\x65\\x6a\\x76\\x4f\\x69\\x7d\\x8e\\x94\\x7f\\x1e\\x92\\x84\\x88\\x8c\\x84\\x1b\\x78\\x79\\x78\\x76\\x70\"\n\"\\xb5\\x79\\xcb\\xc4\\xb1\\x98\\xa8\\xaa\\x1f\\xa5\\xa4\\x9c\\xaf\\xa9\\x1a\\xa7\\x7c\\xa5\\x72\\x9b\\x1e\\xb5\\xa6\\x9e\\xaa\\xb2\\x1a\\xbf\\x66\\xac\\x50\\x48\"\n\"\\x4b\\x66\\x65\\x7d\\x95\\x80\\x98\\x94\\x93\\x8e\\x92\\x91\\x1e\\x9f\\xa0\\x9a\\x91\\xa7\\x1b\\xaa\\x9d\\x7f\\x75\\x73\\x6f\\x72\\x6f\\x1f\\x0b\\xf7\\x5c\\x15\"\n\"\\xcf\\xb9\\xc0\\x7b\\xb9\\x28\\x99\\xfb\\x17\\x19\\xf7\\x05\\x06\\xa8\\x9a\\x8f\\x96\\x98\\x48\\x0a\\x82\\x85\\x8b\\x77\\x1b\\x6e\\x06\\x76\\xf5\\x5f\\xdb\\x58\"\n\"\\xa9\\xf7\\x5e\\xf7\\x22\\x18\\xb9\\xaa\\xa4\\xaf\\x9d\\x81\\x9a\\x7c\\x90\\x1f\\x8e\\x82\\x85\\x8c\\x77\\x1b\\x26\\x6c\\x0a\\x78\\x79\\x1a\\x7b\\x90\\x82\\x99\"\n\"\\x84\\x1e\\xfb\\x58\\xfb\\x1c\\xa7\\xf7\\x15\\x05\\xab\\x06\\xa9\\x0b\\x7e\\x1d\\xcb\\xc5\\x6c\\x6a\\x89\\x1f\\x8a\\x76\\x05\\x74\\x8a\\x9d\\x7a\\xa5\\x1b\\xaf\"\n\"\\xa1\\xa1\\xb7\\x95\\x1f\\x9d\\xdb\\x05\\x98\\x0a\\x0b\\x05\\x7f\\x6d\\x0a\\xb6\\x1e\\xf7\\x42\\x06\\xaa\\x97\\x50\\x1d\\x9b\\x1a\\x9d\\x81\\x9b\\x7c\\x8f\\x1e\"\n\"\\x8e\\x83\\x82\\x8c\\x79\\x1b\\x56\\x06\\xf7\\x85\\xf8\\x3f\\x15\\xb3\\xaa\\x82\\x79\\x9f\\x1f\\x9c\\x7c\\x97\\x71\\x76\\x1a\\x65\\x70\\x60\\x63\\x72\\x1e\\x79\"\n\"\\x6d\\x69\\x82\\x62\\x1b\\x40\\x5d\\xae\\xc2\\xb1\\xa6\\xb5\\xb3\\xa4\\x1f\\x9e\\xa9\\xac\\x93\\xb6\\x1b\\x0e\\x05\\xa5\\x97\\x8d\\x8f\\x95\\x1f\\x9f\\x94\\x9c\"\n\"\\xa4\\xa0\\x1a\\xa7\\x76\\x99\\x63\\x1e\\xfb\\x0c\\xf7\\x13\\x0a\\x3c\\xfb\\xf8\\x05\\xfb\\x5c\\x06\\xda\\xf7\\xf9\\x05\\xa6\\x97\\x8d\\x8f\\x95\\x1f\\xa0\\x94\"\n\"\\x9c\\xa3\\xa0\\x1a\\xa8\\x77\\x99\\x62\\x1e\\xfb\\x0c\\x06\\x58\\x6c\\x74\\x65\\x6c\\x99\\x81\\xbb\\x8a\\x1f\\x42\\xfb\\xf9\\x2d\\x0a\\x0b\\x8e\\x9b\\x8c\\x91\"\n\"\\x94\\x7f\\x0a\\x7e\\x1e\\x9a\\x6a\\x78\\x0a\\xf7\\x10\\x63\\x1d\\x4b\\x61\\x0a\\x93\\x8e\\x93\\x98\\x1e\\x0b\\xf7\\x20\\xf7\\xd5\\x15\\x5c\\xfb\\x6d\\x44\\x0a\"\n\"\\xbb\\xf7\\x6d\\x05\\xf7\\x78\\x06\\x79\\x38\\x05\\x87\\x7c\\x8a\\x83\\xf7\\x26\\x0a\\x95\\x1e\\xb5\\xf7\\x51\\x05\\xfc\\x86\\x06\\x67\\x6b\\x6e\\x6a\\x70\\xa0\"\n\"\\x7c\\xb3\\x1f\\x0b\\x06\\x73\\x6b\\x76\\x61\\x7c\\x1a\\x83\\x92\\x84\\x94\\x92\\x8f\\x8d\\x92\\x91\\x1e\\xad\\xb2\\xa3\\x9f\\xbc\\xa8\\x99\\x94\\x18\\x91\\x8e\"\n\"\\x8f\\x8d\\x8c\\x8c\\x08\\x99\\x93\\x8e\\x8e\\x93\\x1a\\x92\\x87\\x8f\\x78\\x95\\x1e\\x4f\\xad\\x6e\\xa2\\x6c\\xae\\x08\\x98\\x80\\x87\\x8e\\x84\\x1b\\x82\\x83\"\n\"\\x85\\x83\\x7c\\x9b\\x6b\\xa8\\x5f\\x1f\\x0b\\xf7\\xd6\\x84\\x0a\\x54\\x8c\\x19\\xfb\\x02\\x6d\\x0a\\xb7\\x1e\\xf7\\x05\\x06\\xf7\\x04\\xf0\\xd9\\xf1\\xa1\\x1f\"\n\"\\xed\\xf8\\x4d\\x05\\xfb\\xc7\\x06\\x6b\\x82\\x89\\x7e\\x7b\\x86\\x0a\\x9d\\x7f\\xb6\\x1e\\x0b\\xf7\\x6e\\xf7\\x11\\x15\\x86\\x76\\x89\\x7b\\x7e\\x1a\\x55\\xb5\"\n\"\\x67\\xcc\\xc6\\xb5\\xa8\\xb4\\xa4\\x79\\x9e\\x72\\x84\\x82\\xf7\\x3b\\x1d\\x8b\\x8d\\x95\\x1f\\xc2\\xf7\\x93\\x05\\x8f\\x9c\\x8c\\x91\\x91\\x1a\\xa3\\x78\\x9c\"\n\"\\x70\\x68\\x73\\x73\\x5f\\x81\\x1e\\x0b\\x05\\xb0\\x8d\\xa7\\xa5\\xac\\x1a\\xa6\\x75\\x9a\\x63\\x1e\\x27\\x06\\x59\\x6b\\x72\\x65\\x71\\xa1\\x7c\\xb2\\x1f\\x95\"\n\"\\x06\\x7f\\x54\\x05\\xfb\\x70\\x06\\x97\\xc2\\x05\\x93\\x06\\xbd\\xab\\xa3\\xb0\\xa8\\x77\\x99\\x62\\x1f\\x27\\x06\\x59\\x6b\\x72\\x64\\x74\\x9a\\x7e\\xa8\\x88\"\n\"\\x1f\\x5c\\xfb\\x6f\\x05\\x73\\x7d\\x0b\\x9a\\x1b\\x93\\x92\\x92\\x94\\x92\\x88\\x8f\\x84\\x91\\x1f\\x63\\xac\\x78\\xa1\\x6d\\xbc\\x88\\x8f\\x88\\x90\\x88\\x90\"\n\"\\x08\\x88\\x90\\x87\\x91\\x8b\\x1a\\xf7\\x16\\x0a\\x6a\\x52\\x72\\x6b\\x67\\x6f\\x08\\x7e\\x80\\x88\\x86\\x85\\x1a\\x81\\x92\\x84\\x93\\x99\\x0b\\xf8\\xe2\\x89\"\n\"\\x1d\\xfb\\x03\\xe0\\x46\\xf7\\x1f\\xdc\\xf7\\x07\\x9f\\xa1\\xb7\\x1e\\xa2\\x96\\x98\\x9e\\xa2\\x1a\\xa2\\xf7\\x38\\x1d\\x2a\\x0b\\xf8\\xc5\\xac\\x0a\\xf8\\xf8\"\n\"\\xf7\\x0c\\x1d\\xfc\\xa1\\x37\\x1d\\x6c\\x9c\\x7f\\xb7\\x1e\\x0e\\x8a\\x98\\x8a\\xfb\\x31\\xfb\\x5d\\x18\\x4c\\xf7\\x5d\\xf7\\x69\\x1d\\x7c\\x90\\x1e\\x8e\\x82\"\n\"\\x85\\xf7\\x42\\x1d\\x7b\\x1a\\x72\\x97\\x7f\\xa7\\x86\\x1e\\x0b\\xf7\\x2a\\x0a\\xcc\\xa8\\xbd\\xb7\\x1f\\xa1\\xa4\\x9a\\xa9\\xf7\\x30\\x1d\\x55\\x6a\\xa6\\xb8\"\n\"\\x1f\\xa7\\x8c\\x82\\x96\\x77\\x1b\\x0e\\x8e\\x97\\x99\\x1f\\x9a\\x68\\x1d\\x82\\x85\\x8c\\x77\\x1b\\x2f\\x37\\x1d\\x71\\x98\\x7e\\xab\\x88\\x1e\\x98\\xfb\\xd6\"\n\"\\x05\\xef\\x06\\x0b\\x06\\x6b\\x81\\xd6\\x0a\\x0b\\x15\\xe4\\x31\\x05\\x81\\x36\\x0a\\xa2\\x96\\x8a\\x8c\\x7a\\x9c\\x1f\\xfb\\x13\\xf7\\x11\\xfb\\x4a\\xfb\\x10\"\n\"\\x05\\x6e\\x77\\x6f\\x0a\\xf8\\xa9\\xf7\\xdc\\x15\\xb0\\x9e\\x97\\x9a\\xa5\\x1a\\x9f\\x79\\x9d\\x77\\x7d\\x83\\x88\\x7e\\x72\\x1e\\xfc\\x20\\xfb\\x69\\x05\\x66\"\n\"\\x78\\x7f\\x7c\\x72\\x1a\\x76\\x9d\\x79\\xa0\\x96\\x99\\x90\\x96\\xa0\\x1e\\x0e\\x1e\\x55\\xf7\\x12\\x15\\xa3\\x9b\\x7d\\x75\\x6b\\x71\\x71\\x69\\x8a\\x0a\\xad\"\n\"\\x1f\\x69\\xf7\\x24\\x1d\\x0b\\x64\\x72\\xb5\\x0a\\x0b\\x06\\xa8\\x99\\x8f\\x96\\x99\\x48\\x0a\\x83\\x84\\x0b\\x7f\\x83\\x75\\x7c\\x1e\\x9e\\x6e\\x60\\x96\\x59\"\n\"\\x1b\\xfb\\x24\\xfb\\x0a\\x0b\\x6b\\x55\\x1a\\x5d\\xc6\\x0a\\x81\\x88\\x8e\\x93\\xad\\x0b\\xe2\\x0a\\xb7\\x1e\\xd4\\x2e\\x0a\\xfb\\x0a\\x26\\x1d\\x0b\\x15\\x98\"\n\"\\x7d\\x85\\xf7\\x28\\x0a\\x96\\x81\\xf7\\x34\\x1d\\x94\\x7f\\x97\\x1f\\x0e\\x15\\x40\\x46\\xbd\\x0a\\x0b\\xe3\\x0a\\x0e\\xf7\\x29\\x1d\\x95\\x96\\x9d\\x9e\\x1a\"\n\"\\x9d\\x82\\x9c\\x7c\\x95\\x1e\\x93\\x7f\\x82\\x8d\\x6e\\x1b\\x0b\\xbf\\x0a\\x0e\\x16\\xf7\\x0e\\x06\\xa9\\x98\\x28\\x1d\\x9b\\x1a\\x9d\\x81\\x9b\\x0b\\x4a\\x45\"\n\"\\x58\\xb2\\x65\\xc1\\xd5\\xd1\\xcc\\xd1\\xbf\\x64\\xb0\\x55\\x1f\\x7e\\x53\\x15\\xa6\\x9f\\x78\\x72\\x68\\x68\\x6a\\x66\\x70\\x77\\x9e\\xa5\\xad\\xae\\xac\\xb0\"\n\"\\x1f\\x0b\\xa6\\x7b\\x71\\x84\\x8a\\x81\\x88\\x7f\\x1f\\x67\\xfb\\x34\\x05\\x89\\x06\\x6b\\x80\\x89\\x7f\\x7c\\x1f\\x7b\\x7e\\x31\\x1d\\xb6\\x1e\\xf7\\x04\\x06\"\n\"\\x0b\\x15\\x8c\\x9b\\x05\\x9f\\x81\\x96\\x79\\x79\\x80\\xf7\\x18\\x0a\\x85\\x85\\x1a\\x78\\x95\\x80\\x9d\\x9d\\x96\\x97\\xa5\\x91\\x1e\\x0b\\x90\\x8f\\x87\\x82\"\n\"\\x91\\x1e\\x77\\x99\\x95\\x85\\x9f\\x1b\\xa5\\x9d\\x9c\\xa3\\xa9\\x72\\xa0\\x68\\x73\\x72\\x82\\x7c\\x77\\x1f\\x66\\x6e\\x7d\\x60\\x32\\x1a\\x0e\\x15\\x63\\x73\"\n\"\\x0a\\x6c\\x1f\\xf7\\x64\\x16\\x63\\x4a\\x0a\\xb1\\x0b\\x9f\\x9e\\x9f\\x1b\\x95\\x96\\x89\\x85\\x9a\\x1f\\x86\\x9a\\x8f\\x8a\\x95\\x1b\\xad\\xaa\\xa9\\xac\\xab\"\n\"\\x5e\\xa1\\x4a\\x3b\\x81\\x0a\\x0b\\xf7\\x1c\\x0a\\x7d\\x89\\x87\\x83\\x1a\\x7e\\x99\\x7f\\x9a\\x99\\xf7\\x2c\\x0a\\x0e\\x15\\x98\\x7d\\x86\\x8e\\x7f\\x1b\\x70\"\n\"\\xd5\\x0a\\x94\\x0b\\x33\\x06\\x4c\\x73\\x7d\\x67\\x68\\xa0\\x7a\\xb8\\x8a\\x1f\\x72\\xfb\\x04\\x05\\x86\\x0b\\xaa\\x6f\\xbd\\xad\\xbb\\x98\\x9b\\xa5\\x1e\\x9a\"\n\"\\x95\\x95\\x9b\\x9a\\x1a\\x9f\\x7d\\x99\\x77\\x83\\x83\\x89\\x87\\x82\\x1e\\x7c\\x67\\x87\\x8a\\x7f\\x1b\\x0b\\x15\\x62\\x62\\x1d\\x6d\\x1f\\xf7\\x63\\x16\\xf7\"\n\"\\x56\\x1d\\x0b\\xa1\\x1d\\xfb\\x4b\\xf7\\x73\\x1d\\x99\\x7e\\x9d\\x95\\x0b\\x06\\x6b\\x7c\\x0a\\x7a\\x0b\\x1b\\x79\\x79\\x83\\x7d\\x80\\x1f\\x83\\x80\\x88\\x80\"\n\"\\x71\\x1a\\xfb\\x53\\x07\\x74\\x8d\\x80\\x91\\x81\\x1e\\x7b\\x96\\x9e\\x81\\x9f\\x1b\\x0b\\xf7\\xcb\\xf8\\xf1\\xf7\\x43\\x1d\\xa0\\xa7\\xa5\\x1d\\xb5\\xf7\\x50\"\n\"\\x05\\x8e\\x97\\x8c\\x95\\x97\\x69\\x1d\\x0b\\x81\\x1f\\x77\\x82\\x7a\\x73\\x75\\x1a\\x70\\xa0\\x7c\\xb3\\x1e\\xf7\\x0d\\x06\\xbc\\x7e\\x0a\\x0b\\x1a\\x97\\x86\"\n\"\\x97\\x81\\x92\\x1e\\x93\\x82\\x82\\x8d\\x6f\\x1b\\x27\\x39\\x1d\\x7a\\x1a\\x0b\\xa6\\x1d\\x94\\x91\\x0b\\x15\\xf7\\x69\\xf7\\x76\\x05\\xa1\\x95\\x8d\\x90\\x96\"\n\"\\x1f\\xa0\\x96\\x9a\\xa1\\xa1\\x52\\x1d\\x0b\\x77\\x1a\\x6d\\xa6\\x71\\xab\\xa0\\x95\\x91\\xac\\xa6\\x1e\\xa8\\xa4\\x94\\x93\\x92\\x1b\\x90\\x99\\x82\\x7c\\x9d\"\n\"\\x1f\\x0b\\xa8\\x1d\\x76\\x1b\\x0b\\x20\\x0a\\x9b\\x1a\\x9d\\x81\\x9a\\x7c\\x91\\x1e\\x8d\\x86\\x84\\x8c\\x0b\\x1b\\x6b\\x06\\xfb\\x11\\xf7\\x16\\xf7\\x1a\\xe4\"\n\"\\x05\\xa5\\x06\\xaa\\x96\\x8d\\x97\\x9a\\x1f\\x9b\\x98\\x94\\x9c\\x0b\\xf7\\x1b\\x1d\\xa3\\x0b\\x88\\x7f\\x30\\x1d\\x88\\x94\\x91\\x8a\\x9f\\x1b\\x0b\\x8e\\x97\"\n\"\\x9a\\xa0\\x1d\\x8e\\x82\\x20\\x1d\\x0b\\x8f\\x96\\x99\\x91\\x1d\\x0b\\x93\\x1a\\xa2\\x78\\x9c\\x72\\x67\\x74\\x75\\x5f\\x82\\x1e\\x0b\\x1f\\xf7\\x64\\xf7\\x2d\"\n\"\\x1d\\x0b\\x05\\x79\\x06\\x59\\x6b\\x73\\x66\\x6c\\x9c\\x7f\\xb7\\x1f\\xf7\\x18\\x06\\xbe\\xab\\xa3\\xaf\\xa5\\x0b\\x06\\xa9\\x98\\x8f\\x96\\x99\\x48\\x0a\\x0b\"\n\"\\x94\\x93\\x90\\x8e\\x94\\x91\\x19\\x6a\\x8e\\x99\\x7c\\xa9\\x1b\\xa6\\x9b\\x9a\\xae\\x93\\x1f\\x0b\\x99\\x8f\\x96\\x99\\xf7\\x02\\x0a\\x96\\x81\\x94\\x1e\\x92\"\n\"\\x82\\x0b\\xf5\\x0a\\x20\\x1d\\x0b\\x1f\\x7b\\x7f\\x82\\x79\\x7a\\x1a\\x7f\\x90\\x80\\x95\\x83\\x1e\\x83\\x94\\x93\\x89\\xa8\\x1b\\x0b\\x81\\x89\\x81\\x82\\x1a\"\n\"\\x70\\x9c\\x7e\\xac\\xb4\\x98\\x0b\\xf7\\x11\\x0a\\x6d\\x9d\\x7f\\x0b\\x15\\x65\\x64\\x66\\x66\\x70\\xa3\\x73\\xa7\\xb4\\xb0\\xae\\xb2\\xa8\\x75\\xa1\\x6c\\x1f\"\n\"\\x0b\\x1b\\x4f\\x5f\\xae\\xba\\x8f\\x8c\\x93\\xf7\\x27\\x0a\\x0b\\x9d\\x7f\\xb6\\x1e\\xf7\\x19\\x06\\xbc\\xab\\xa2\\xaf\\xaa\\x78\\x99\\x61\\x1f\\x7c\\x06\\x0b\"\n\"\\x05\\x87\\x79\\x8b\\x88\\xf7\\x5a\\x1d\\x0b\\xf7\\x54\\x1d\\xc8\\x44\\x70\\x99\\x5e\\x1b\\x5f\\x69\\x79\\x0b\\x9d\\x3c\\x1d\\x83\\x84\\x8b\\x77\\x1b\\x6d\\x06\"\n\"\\x0b\\x6b\\x81\\x3f\\x1d\\x79\\x7b\\x21\\x0a\\x0b\\x06\\x58\\x6c\\x40\\x1d\\x0b\\xf7\\x0a\\x0a\\x6e\\x9d\\x7e\\x0b\\xf7\\x70\\x15\\xf7\\x2a\\xf1\\xa2\\x8e\\x92\"\n\"\\x8d\\x97\\x95\\x19\\x9b\\x97\\x94\\x0b\\x8a\\x84\\x80\\xf7\\x66\\x1d\\x80\\x1e\\x0b\\x3e\\x1d\\x82\\x20\\x1d\\x2f\\x06\\x6c\\x0b\\xf9\\x04\\x15\\xf7\\x0d\\x0a\"\n\"\\x0b\\xf8\\xe4\\xf7\\x70\\x1d\\x94\\x84\\x9a\\x1b\\x0b\\xf2\\x15\\xf8\\x0f\\xf7\\xff\\xa1\\xed\\x05\\xfc\\x34\\x06\\x66\\xfb\\x39\\x05\\x0b\\x82\\xc5\\x1b\\xf7\"\n\"\\x26\\xf7\\x05\\xd2\\xe6\\xb0\\x79\\xaa\\x6a\\x9f\\x1f\\x0b\\x06\\x6b\\x81\\x89\\x7e\\x7c\\x1f\\x7c\\x7f\\x81\\x79\\x7b\\x1a\\x6d\\x9d\\x0b\\x1a\\x7a\\x96\\x7b\"\n\"\\x99\\xf7\\x6e\\x1d\\x0b\\xf7\\x4c\\x1d\\x82\\x0b\\x9d\\x9c\\x1a\\x97\\xf7\\x19\\x0a\\x0b\\x82\\x7a\\x7b\\x1a\\x6c\\x9c\\x7f\\xb6\\x1e\\x0b\\x86\\x95\\x1b\\xa5\"\n\"\\xa3\\xa1\\xa2\\x95\\x86\\x0b\\x1f\\x9b\\x97\\x94\\x9d\\x9c\\x1a\\x97\\x86\\x0b\\x1f\\x9a\\x97\\x94\\x9d\\x9b\\x1a\\x0b\\xf7\\x57\\x1d\\xb6\\x1e\\x0b\\x89\\xf7\"\n\"\\x0a\\x0a\\x0b\\x7d\\x98\\x77\\x7f\\x83\\x88\\x7e\\x79\\x1e\\xfb\\x32\\x21\\x05\\x0b\\x41\\x49\\x4d\\x46\\x74\\x92\\x77\\x99\\x7a\\x1e\\x66\\x71\\x75\\x0b\\x05\"\n\"\\x89\\x81\\x89\\x7f\\x84\\x1a\\x75\\x9e\\x7a\\xa4\\x9c\\x9c\\x0b\\x06\\x33\\x66\\x84\\x71\\x64\\x1f\\x47\\x5e\\x68\\x40\\x27\\x1a\\x0b\\xf7\\x63\\x1d\\x7a\\x1a\"\n\"\\x0b\\x15\\x70\\x83\\x8a\\x84\\x80\\x1f\\x7a\\x82\\x80\\x78\\x78\\x1a\\x0b\\x1a\\x98\\xf7\\x19\\x0a\\x0b\\x69\\x6c\\x6e\\x6b\\x72\\x9d\\x7a\\xa6\\xad\\xaa\\xa8\"\n\"\\xac\\xa3\\x0b\\x7c\\x1f\\x7c\\x7e\\x82\\x7a\\x7a\\x1a\\x6d\\x9c\\x7f\\xb6\\x1e\\x0b\\x83\\x7b\\x7d\\x1e\\x23\\xfb\\x0e\\x05\\x0b\\x15\\xe4\\x31\\x05\\x81\\x95\"\n\"\\x93\\x87\\x0b\\x7c\\x1f\\x7b\\x7f\\x82\\x7a\\x7a\\x1a\\x0b\\x06\\x55\\x6e\\x76\\x65\\x6d\\xa0\\x7c\\xb6\\x1f\\x94\\x06\\x0b\\x06\\x59\\x6b\\x74\\x66\\x6e\\x9f\"\n\"\\x7c\\xb4\\x1f\\x94\\x06\\x0b\\xc4\\x1b\\xf7\\x35\\xf7\\x1b\\xf7\\x07\\xf7\\x1c\\xf7\\x00\\x0b\\x15\\x98\\x7e\\x85\\x8e\\x7f\\x1b\\x70\\x74\\x75\\x73\\x82\\x0b\"\n\"\\x98\\x84\\x88\\x8e\\x82\\x1b\\x84\\x87\\x87\\x79\\x81\\x1f\\x0b\\x9c\\x1f\\xfb\\x12\\xf7\\x11\\xfb\\x4b\\xfb\\x11\\x05\\x6e\\x0b\\x7e\\x73\\x85\\x1e\\x6a\\xfb\"\n\"\\x2b\\x05\\x8a\\x87\\x8a\\x0b\\x86\\x96\\x81\\x93\\x1e\\x93\\x82\\x82\\x8d\\x6f\\x1b\\x0b\\x1a\\x7b\\x97\\x81\\x9e\\xa2\\x9c\\x99\\xa2\\x90\\x1e\\x0b\\x9d\\x93\"\n\"\\x98\\x98\\x1e\\x95\\x95\\x8f\\x95\\x91\\xa5\\x0b\\xf7\\x88\\xf7\\x1c\\x15\\xfb\\x0d\\xfb\\x80\\x05\\x84\\x0b\\x78\\x9c\\x70\\x69\\x73\\x73\\x5f\\x81\\x1e\\x0e\"\n\"\\x06\\x6b\\x81\\x89\\x7e\\x7c\\x1f\\x0b\\x8e\\x97\\x9a\\x1f\\x9a\\x97\\x95\\x0b\\x95\\x80\\x9d\\x9d\\x97\\x98\\xa4\\x0b\\x1b\\x68\\x6f\\x98\\x9b\\x94\\x93\\x0b\"\n\"\\x77\\x6e\\x72\\x99\\x81\\xae\\x1f\\x0b\\x05\\x8d\\x96\\x8d\\x96\\x92\\x1a\\xa1\\x78\\x9c\\x0b\\x06\\x5f\\x61\\x64\\x62\\x6b\\xa3\\x75\\xad\\x1f\\x0b\\x06\\xbe\"\n\"\\xaa\\xa2\\xb1\\xaa\\x7a\\x97\\x5f\\x1f\\x0b\\x85\\x1a\\x75\\x9e\\x7a\\xa5\\xad\\xa3\\xa2\\xb6\\x0b\\x8c\\x92\\x1f\\xc8\\xf7\\xa2\\x05\\xaa\\x06\\xaa\\x0b\\x8e\"\n\"\\x7f\\x1b\\x71\\x74\\x75\\x73\\x82\\x91\\x80\\x0b\\x8f\\x9d\\x8b\\x8c\\x94\\x1a\\xa2\\x79\\x9c\\x71\\x0b\\x15\\x6d\\x78\\x74\\x68\\x42\\xcb\\x56\\xe1\\xcc\\x0b\"\n\"\\x97\\x80\\x9c\\x96\\x95\\x90\\x96\\x96\\x1e\\xaf\\x0b\\x99\\x93\\x9c\\x98\\x1e\\xf7\\x5f\\xf7\\x9a\\x05\\x0b\\x1e\\xd8\\xc0\\xc2\\x57\\x05\\x6e\\x82\\x78\\x73\"\n\"\\x0b\\xa4\\x73\\xac\\x1f\\x94\\x06\\x94\\x06\\xb6\\xb6\\x0b\", 59212\n};\n"
  },
  {
    "path": "src/fonts/NimbusMonoPS-Italic.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusMonoPS_Italic_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x14\\x4e\\x69\\x6d\\x62\\x75\\x73\\x4d\\x6f\\x6e\\x6f\\x50\\x53\\x2d\\x49\\x74\\x61\\x6c\\x69\\x63\\x00\\x01\\x01\\x01\"\n\"\\x37\\xf9\\xbc\\x00\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xc0\\x03\\xf8\\x18\\x04\\x8c\\x0c\\x01\\x7f\\x0c\\x02\\x30\\x0c\\x03\\xbe\\x0c\\x04\"\n\"\\x4d\\xfb\\xd1\\xf9\\xac\\xfa\\x2c\\x05\\x1c\\x31\\x0a\\x0f\\x1c\\x31\\x1d\\x11\\xad\\x1d\\x00\\x00\\xb8\\x40\\x12\\x01\\xa6\\x02\\x00\\x01\\x00\\x08\\x00\\x0e\"\n\"\\x00\\x13\\x00\\x1d\\x00\\x24\\x00\\x2b\\x00\\x35\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x74\\x00\\x7a\"\n\"\\x00\\x84\\x00\\x8b\\x00\\x8e\\x00\\x95\\x00\\x9c\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\\x00\\xcd\\x00\\xd9\\x00\\xe3\\x00\\xe7\\x00\\xf2\"\n\"\\x00\\xf4\\x00\\xfa\\x01\\x04\\x01\\x0b\\x01\\x12\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\\x01\\x4d\\x01\\x53\\x01\\x59\\x01\\x5f\\x01\\x6b\"\n\"\\x01\\x6f\\x01\\x71\\x01\\x77\\x01\\x7d\\x01\\x89\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\\x01\\xc2\\x01\\xcd\\x01\\xd0\\x01\\xd2\\x01\\xd5\"\n\"\\x01\\xdb\\x01\\xe1\\x01\\xed\\x01\\xf0\\x01\\xf6\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\\x02\\x27\\x02\\x33\\x02\\x38\\x02\\x3e\\x02\\x4b\"\n\"\\x02\\x52\\x02\\x59\\x02\\x60\\x02\\x6f\\x02\\x7b\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\\x02\\xa8\\x02\\xb3\\x02\\xb9\\x02\\xbf\\x02\\xc9\"\n\"\\x02\\xcd\\x02\\xd3\\x02\\xda\\x02\\xe3\\x02\\xec\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\\x03\\x2b\\x03\\x34\\x03\\x3d\\x03\\x46\\x03\\x4f\"\n\"\\x03\\x58\\x03\\x61\\x03\\x6a\\x03\\x73\\x03\\x7c\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\\x03\\xbb\\x03\\xc4\\x03\\xcd\\x03\\xd6\\x03\\xdf\"\n\"\\x03\\xe8\\x03\\xf1\\x03\\xfa\\x04\\x03\\x04\\x0c\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\\x04\\x4b\\x04\\x54\\x04\\x5d\\x04\\x66\\x04\\x6f\"\n\"\\x04\\x78\\x04\\x81\\x04\\x8a\\x04\\x93\\x04\\x9c\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\\xed\\x04\\xf6\\x04\\xff\"\n\"\\x05\\x08\\x05\\x11\\x05\\x1a\\x05\\x23\\x05\\x2c\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\\x05\\x6b\\x05\\x74\\x05\\x7d\\x05\\x86\\x05\\x8f\"\n\"\\x05\\x98\\x05\\xa1\\x05\\xaa\\x05\\xb3\\x05\\xbc\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\\x05\\xfb\\x06\\x04\\x06\\x0d\\x06\\x16\\x06\\x1f\"\n\"\\x06\\x28\\x06\\x31\\x06\\x3a\\x06\\x43\\x06\\x4c\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\\x06\\x85\\x06\\x90\\x06\\x9a\\x06\\xa3\\x06\\xac\"\n\"\\x06\\xb5\\x06\\xbf\\x06\\xc6\\x06\\xcf\\x06\\xdb\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\\x07\\x11\\x07\\x15\\x07\\x1b\\x07\\x21\\x07\\x26\"\n\"\\x07\\x2d\\x07\\x3a\\x07\\x40\\x07\\x46\\x07\\x50\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\\x07\\x86\\x07\\x8f\\x07\\x92\\x07\\x9a\\x07\\xa3\"\n\"\\x07\\xae\\x07\\xb4\\x07\\xb9\\x07\\xbe\\x07\\xc4\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\\x08\\x05\\x08\\x0a\\x08\\x10\\x08\\x12\\x08\\x19\"\n\"\\x08\\x21\\x08\\x29\\x08\\x33\\x08\\x3d\\x08\\x49\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\\x08\\x8c\\x08\\x97\\x08\\x9c\\x08\\xa8\\x08\\xb4\"\n\"\\x08\\xba\\x08\\xc0\\x08\\xc6\\x08\\xd2\\x08\\xd6\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\\x09\\x0b\\x09\\x11\\x09\\x1c\\x09\\x22\\x09\\x2e\"\n\"\\x09\\x38\\x09\\x40\\x09\\x42\\x09\\x48\\x09\\x55\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\\x09\\x93\\x09\\x9e\\x09\\xa4\\x09\\xa7\\x09\\xa9\"\n\"\\x09\\xb0\\x09\\xbc\\x09\\xca\\x09\\xcd\\x09\\xda\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\\x0a\\x0f\\x0a\\x17\\x0a\\x22\\x0a\\x2e\\x0a\\x34\"\n\"\\x0a\\x39\\x0a\\x42\\x0a\\x47\\x0a\\x50\\x0a\\x53\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\\x0a\\x7c\\x0a\\x89\\x0a\\x90\\x0a\\x9d\\x0a\\xa4\"\n\"\\x0a\\xab\\x0a\\xb2\\x0a\\xb9\\x0a\\xc0\\x0a\\xc7\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\\x0a\\xf8\\x0a\\xff\\x0b\\x06\\x0b\\x0d\\x0b\\x14\"\n\"\\x0b\\x1b\\x0b\\x22\\x0b\\x29\\x0b\\x30\\x0b\\x37\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\\x0b\\x68\\x0b\\x6f\\x0b\\x76\\x0b\\x7d\\x0b\\x84\"\n\"\\x0b\\x8b\\x0b\\x92\\x0b\\x99\\x0b\\xa0\\x0b\\xa7\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\\x0b\\xd8\\x0b\\xdf\\x0b\\xe6\\x0b\\xed\\x0b\\xf4\"\n\"\\x0b\\xfb\\x0c\\x02\\x0c\\x09\\x0c\\x10\\x0c\\x17\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\\x0c\\x48\\x0c\\x4d\\x0c\\x56\\x0c\\x5d\\x0c\\x64\"\n\"\\x0c\\x73\\x0c\\x87\\x0c\\x93\\x0c\\x98\\x0c\\x9e\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\\x0c\\xd1\\x0c\\xd7\\x0c\\xe1\\x0c\\xe5\\x0c\\xe9\"\n\"\\x0d\\x1f\\x0d\\x5f\\x0d\\x74\\x0d\\x82\\x41\\x45\\x61\\x63\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\\x6c\\x70\\x68\\x61\\x41\\x6c\\x70\\x68\\x61\\x74\"\n\"\\x6f\\x6e\\x6f\\x73\\x41\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x41\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x42\\x65\\x74\\x61\"\n\"\\x43\\x61\\x63\\x75\\x74\\x65\\x43\\x63\\x61\\x72\\x6f\\x6e\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x43\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\"\n\"\\x74\\x43\\x68\\x69\\x44\\x63\\x61\\x72\\x6f\\x6e\\x44\\x63\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\\x62\\x72\\x65\\x76\\x65\\x45\\x63\\x61\\x72\\x6f\"\n\"\\x6e\\x45\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x45\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x45\\x70\\x73\\x69\"\n\"\\x6c\\x6f\\x6e\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x75\\x72\\x6f\\x47\\x61\"\n\"\\x6d\\x6d\\x61\\x47\\x62\\x72\\x65\\x76\\x65\\x47\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\"\n\"\\x47\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x48\\x62\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x49\\x4a\\x49\\x62\\x72\\x65\\x76\"\n\"\\x65\\x49\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x49\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x49\\x6f\\x74\\x61\\x49\\x6f\\x74\"\n\"\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x49\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\\x64\\x65\\x4a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\"\n\"\\x6c\\x65\\x78\\x4b\\x61\\x70\\x70\\x61\\x4b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\\x63\\x75\\x74\\x65\\x4c\\x61\\x6d\\x62\\x64\\x61\"\n\"\\x4c\\x63\\x61\\x72\\x6f\\x6e\\x4c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\\x4d\\x75\\x4e\\x61\\x63\\x75\\x74\\x65\\x4e\\x63\"\n\"\\x61\\x72\\x6f\\x6e\\x4e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\\x76\\x65\\x4f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\"\n\"\\x6d\\x6c\\x61\\x75\\x74\\x4f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x69\"\n\"\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\\x69\\x50\\x69\\x50\\x73\\x69\\x52\\x61\\x63\\x75\"\n\"\\x74\\x65\\x52\\x63\\x61\\x72\\x6f\\x6e\\x52\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\\x6f\\x53\\x61\\x63\\x75\\x74\\x65\\x53\\x63\\x65\"\n\"\\x64\\x69\\x6c\\x6c\\x61\\x53\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x53\\x69\\x67\\x6d\"\n\"\\x61\\x54\\x61\\x75\\x54\\x62\\x61\\x72\\x54\\x63\\x61\\x72\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x54\\x68\\x65\\x74\\x61\\x55\"\n\"\\x62\\x72\\x65\\x76\\x65\\x55\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x55\\x6f\\x67\\x6f\\x6e\\x65\\x6b\"\n\"\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\"\n\"\\x6f\\x73\\x55\\x72\\x69\\x6e\\x67\\x55\\x74\\x69\\x6c\\x64\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x57\\x64\"\n\"\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x57\\x67\\x72\\x61\\x76\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x59\\x67\\x72\\x61\\x76\\x65\"\n\"\\x5a\\x61\\x63\\x75\\x74\\x65\\x5a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\\x72\\x65\\x76\\x65\\x61\\x65\\x61\\x63\\x75\\x74\"\n\"\\x65\\x61\\x66\\x69\\x69\\x30\\x30\\x32\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x38\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x31\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x32\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x35\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x32\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x39\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x32\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x33\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x36\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x33\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x34\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x33\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x34\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\"\n\"\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x30\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x35\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x34\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x37\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x35\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x31\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x36\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x36\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x30\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x37\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x37\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x37\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x37\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\"\n\"\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x34\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x38\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x38\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x31\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x39\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x35\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x38\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x39\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x32\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x31\\x30\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\"\n\"\\x30\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x39\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x31\\x31\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x38\\x34\"\n\"\\x36\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x34\\x38\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\\x69\\x36\\x31\\x33\\x35\\x32\\x61\\x6c\\x70\\x68\"\n\"\\x61\\x61\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x61\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\\x61\\x6e\\x67\\x6c\\x65\"\n\"\\x72\\x69\\x67\\x68\\x74\\x61\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\"\n\"\\x65\\x61\\x72\\x72\\x6f\\x77\\x62\\x6f\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\"\n\"\\x77\\x72\\x69\\x67\\x68\\x74\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x62\"\n\"\\x73\\x65\\x62\\x65\\x74\\x61\\x63\\x61\\x63\\x75\\x74\\x65\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x63\\x64\\x6f\"\n\"\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x63\\x68\\x69\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\\x63\\x6c\\x75\\x62\\x64\\x63\\x61\\x72\"\n\"\\x6f\\x6e\\x64\\x63\\x72\\x6f\\x61\\x74\\x64\\x65\\x6c\\x74\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\"\n\"\\x73\\x65\\x62\\x72\\x65\\x76\\x65\\x65\\x63\\x61\\x72\\x6f\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x65\\x6d\"\n\"\\x61\\x63\\x72\\x6f\\x6e\\x65\\x6e\\x67\\x65\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\"\n\"\\x6f\\x73\\x65\\x71\\x75\\x69\\x76\\x61\\x6c\\x65\\x6e\\x63\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\\x65\\x74\\x61\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\"\n\"\\x73\\x65\\x78\\x63\\x6c\\x61\\x6d\\x64\\x62\\x6c\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\\x65\\x6d\\x61\\x6c\\x65\\x66\\x72\\x61\\x6e\\x63\"\n\"\\x67\\x61\\x6d\\x6d\\x61\\x67\\x62\\x72\\x65\\x76\\x65\\x67\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x67\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\"\n\"\\x6e\\x74\\x67\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x68\\x62\\x61\\x72\\x68\\x63\\x69\\x72\"\n\"\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x68\\x65\\x61\\x72\\x74\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\\x65\\x69\\x6a\\x69\\x6d\\x61\\x63\\x72\\x6f\\x6e\"\n\"\\x69\\x6e\\x66\\x69\\x6e\\x69\\x74\\x79\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x69\\x6e\\x74\\x65\\x67\\x72\"\n\"\\x61\\x6c\\x74\\x70\\x69\\x6e\\x74\\x65\\x72\\x73\\x65\\x63\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x69\\x6f\\x67\\x6f\"\n\"\\x6e\\x65\\x6b\\x69\\x6f\\x74\\x61\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\"\n\"\\x6f\\x6e\\x6f\\x73\\x69\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x6b\\x61\"\n\"\\x70\\x70\\x61\\x6b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\\x61\\x6e\\x64\\x69\\x63\\x6c\\x61\\x63\\x75\\x74\"\n\"\\x65\\x6c\\x61\\x6d\\x62\\x64\\x61\\x6c\\x63\\x61\\x72\\x6f\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6c\\x64\\x6f\\x74\\x6c\\x65\\x73\"\n\"\\x73\\x65\\x71\\x75\\x61\\x6c\\x6c\\x69\\x72\\x61\\x6c\\x6f\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\"\n\"\\x6e\\x6f\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\\x74\\x65\\x6e\\x61\\x70\\x6f\\x73\\x74\\x72\\x6f\"\n\"\\x70\\x68\\x65\\x6e\\x63\\x61\\x72\\x6f\\x6e\\x6e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x6e\"\n\"\\x6f\\x74\\x65\\x71\\x75\\x61\\x6c\\x6e\\x75\\x6f\\x62\\x72\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x6f\\x6d\\x61\\x63\"\n\"\\x72\\x6f\\x6e\\x6f\\x6d\\x65\\x67\\x61\\x6f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\"\n\"\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x72\\x74\\x68\\x6f\\x67\\x6f\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x70\\x61\\x72\\x74\\x69\\x61\"\n\"\\x6c\\x64\\x69\\x66\\x66\\x70\\x65\\x73\\x65\\x74\\x61\\x70\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x62\"\n\"\\x73\\x65\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\\x6f\\x74\\x65\\x72\\x65\\x76\\x65\\x72\\x73\\x65\"\n\"\\x64\\x72\\x61\\x63\\x75\\x74\\x65\\x72\\x61\\x64\\x69\\x63\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\"\n\"\\x72\\x65\\x76\\x6c\\x6f\\x67\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\\x73\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x73\\x63\"\n\"\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x73\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\\x65\\x63\\x6f\\x6e\\x64\\x73\\x69\\x67\\x6d\\x61\"\n\"\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x73\\x70\\x61\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x73\\x75\\x6e\\x74\\x61\\x75\\x74\\x62\\x61\"\n\"\\x72\\x74\\x63\\x61\\x72\\x6f\\x6e\\x74\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x62\\x72\"\n\"\\x65\\x76\\x65\\x75\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x75\\x6e\\x64\\x65\\x72\\x73\\x63\\x6f\\x72\"\n\"\\x65\\x64\\x62\\x6c\\x75\\x6e\\x69\\x30\\x30\\x41\\x30\\x75\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\\x32\\x31\\x41\\x75\\x6e\\x69\\x30\\x32\\x31\\x42\"\n\"\\x75\\x6e\\x69\\x30\\x32\\x43\\x39\\x75\\x6e\\x69\\x30\\x33\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\\x6e\\x69\\x30\\x33\\x41\\x39\\x75\\x6e\\x69\\x30\"\n\"\\x33\\x42\\x43\\x75\\x6e\\x69\\x30\\x33\\x43\\x32\\x75\\x6e\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\\x30\\x44\\x75\\x6e\\x69\\x30\\x34\\x35\\x30\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x35\\x44\\x75\\x6e\\x69\\x30\\x34\\x39\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\\x69\\x30\\x34\\x39\\x36\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x39\\x37\\x75\\x6e\\x69\\x30\\x34\\x39\\x38\\x75\\x6e\\x69\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\\x41\\x75\\x6e\\x69\\x30\\x34\\x39\\x42\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x39\\x43\\x75\\x6e\\x69\\x30\\x34\\x39\\x44\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\\x30\\x34\\x41\\x31\\x75\\x6e\\x69\\x30\\x34\\x41\"\n\"\\x32\\x75\\x6e\\x69\\x30\\x34\\x41\\x33\\x75\\x6e\\x69\\x30\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\\x75\\x6e\\x69\\x30\\x34\\x41\\x45\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x41\\x46\\x75\\x6e\\x69\\x30\\x34\\x42\\x30\\x75\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\\x34\\x42\\x32\\x75\\x6e\\x69\\x30\\x34\\x42\\x33\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x42\\x36\\x75\\x6e\\x69\\x30\\x34\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\\x6e\\x69\\x30\\x34\\x42\\x39\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x42\\x41\\x75\\x6e\\x69\\x30\\x34\\x42\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\\x43\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x43\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x44\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\\x69\\x30\\x34\\x45\\x38\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x45\\x39\\x75\\x6e\\x69\\x30\\x34\\x45\\x45\\x75\\x6e\\x69\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\\x45\\x75\\x6e\\x69\\x32\\x30\\x41\\x46\\x75\\x6e\"\n\"\\x69\\x32\\x31\\x32\\x36\\x75\\x6e\\x69\\x32\\x32\\x31\\x35\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\\x32\\x32\\x32\\x37\\x75\\x6e\\x69\\x32\\x32\\x32\"\n\"\\x38\\x75\\x6e\\x69\\x32\\x32\\x39\\x35\\x75\\x6e\\x69\\x32\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x75\\x6f\\x67\"\n\"\\x6f\\x6e\\x65\\x6b\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\"\n\"\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x72\\x69\\x6e\\x67\\x75\"\n\"\\x74\\x69\\x6c\\x64\\x65\\x77\\x61\\x63\\x75\\x74\\x65\\x77\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x77\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x77\"\n\"\\x67\\x72\\x61\\x76\\x65\\x78\\x69\\x79\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\\x76\\x65\\x7a\\x61\\x63\\x75\\x74\\x65\\x7a\\x64\"\n\"\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x7a\\x65\\x74\\x61\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\"\n\"\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\"\n\"\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\"\n\"\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\"\n\"\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x4d\\x6f\\x6e\\x6f\\x20\\x50\\x53\\x20\\x49\\x74\\x61\\x6c\\x69\\x63\\x4e\\x69\\x6d\\x62\\x75\"\n\"\\x73\\x20\\x4d\\x6f\\x6e\\x6f\\x20\\x50\\x53\\x01\\x3a\\x02\\x00\\x01\\x00\\x0c\\x00\\x11\\x00\\x15\\x00\\x1a\\x00\\x20\\x00\\x25\\x00\\x2b\\x00\\x33\\x00\\x39\"\n\"\\x00\\x3e\\x00\\x43\\x00\\x4e\\x00\\x5d\\x00\\x90\\x00\\xa1\\x00\\xa7\\x00\\xf8\\x01\\x03\\x01\\x0e\\x01\\x14\\x01\\x1a\\x01\\x20\\x01\\x2b\\x01\\x32\\x01\\x3a\"\n\"\\x01\\x42\\x01\\x4b\\x01\\x67\\x01\\x6c\\x01\\x81\\x01\\x86\\x01\\x8c\\x01\\x95\\x01\\x9b\\x01\\xa2\\x01\\xaa\\x01\\xb0\\x02\\x31\\x02\\x4f\\x02\\x7a\\x02\\x8a\"\n\"\\x02\\x93\\x02\\x9c\\x02\\xa2\\x02\\xad\\x02\\xb4\\x02\\xbf\\x02\\xc8\\x02\\xcf\\x02\\xd4\\x02\\xff\\x03\\x56\\x03\\x72\\x03\\xc7\\x03\\xf0\\x04\\x03\\x04\\x0d\"\n\"\\x04\\x19\\x04\\x2c\\x04\\x3e\\x04\\x4d\\x04\\x57\\x04\\x62\\x04\\x74\\x04\\x81\\x04\\x8a\\x04\\x97\\x04\\xa0\\x04\\xaa\\x04\\xb4\\x04\\xbf\\x04\\xc5\\x04\\xcf\"\n\"\\x04\\xd7\\x04\\xdf\\x04\\xee\\x04\\xf7\\x05\\x00\\x05\\x0c\\x05\\x14\\x05\\x36\\x05\\x5c\\x05\\xa4\\x05\\xfa\\x06\\x2c\\x06\\x2f\\x06\\x70\\x06\\x89\\x06\\xab\"\n\"\\x06\\xc6\\x06\\xe7\\x06\\xfb\\x07\\x29\\x07\\x3f\\x07\\x46\\x07\\x57\\x07\\x6f\\x07\\x88\\x07\\x96\\x07\\xa1\\x07\\xb1\\x07\\xc3\\x07\\xcd\\x07\\xdc\\x07\\xeb\"\n\"\\x07\\xf9\\x08\\x11\\x08\\x1d\\x08\\x26\\x08\\x31\\x08\\x3c\\x08\\x47\\x08\\x52\\x08\\x63\\x08\\x6c\\x08\\x76\\x08\\x7e\\x08\\x8c\\x08\\x95\\x08\\x9e\\x08\\xa7\"\n\"\\x08\\xb4\\x08\\xbb\\x08\\xc7\\x08\\xcf\\x08\\xd7\\x08\\xdf\\x08\\xea\\x08\\xf0\\x09\\xa1\\x09\\xa4\\x0a\\x52\\x0a\\x8f\\x0a\\x9d\\x0b\\x24\\x0b\\xa9\\x0c\\x07\"\n\"\\x0c\\x72\\x0c\\xad\\x0c\\xf1\\x0d\\x40\\x0d\\x85\\x0d\\xe2\\x0e\\x0d\\x0e\\x56\\x0e\\x73\\x0e\\xb4\\x0e\\xe1\\x0f\\x28\\x0f\\x6b\\x0f\\x83\\x0f\\x8e\\x0f\\xc8\"\n\"\\x10\\x10\\x10\\x3d\\x10\\x85\\x10\\xac\\x10\\xd7\\x11\\x0b\\x11\\x46\\x11\\x67\\x11\\x94\\x11\\xd6\\x12\\x1c\\x12\\x5f\\x12\\x85\\x12\\xc4\\x12\\xe0\\x13\\x04\"\n\"\\x13\\x3c\\x13\\x76\\x13\\xb1\\x13\\xd3\\x13\\xdf\\x13\\xfb\\x14\\x11\\x14\\x21\\x14\\x41\\x14\\x63\\x14\\x69\\x14\\x80\\x14\\x94\\x14\\xa3\\x14\\xc0\\x14\\xd1\"\n\"\\x14\\xf0\\x15\\x1b\\x15\\x45\\x15\\x6d\\x15\\x88\\x15\\xab\\x15\\xb5\\x15\\xdc\\x16\\x03\\x16\\x14\\x16\\x29\\x16\\x2e\\x16\\x39\\x16\\x53\\x16\\x73\\x16\\x94\"\n\"\\x16\\xb4\\x16\\xd4\\x16\\xe3\\x17\\x02\\x17\\x21\\x17\\x3a\\x17\\x4e\\x17\\x5d\\x17\\x6c\\x17\\x79\\x17\\x89\\x17\\x95\\x17\\xb1\\x17\\xc5\\x17\\xdf\\x17\\xf2\"\n\"\\x18\\x08\\x18\\x22\\x18\\x3c\\x18\\x56\\x18\\x66\\x18\\x75\\x18\\x83\\x18\\x98\\x18\\xb0\\x18\\xc8\\x18\\xd8\\x18\\xee\\x19\\x05\\x19\\x1a\\x19\\x1f\\x19\\x35\"\n\"\\x19\\x43\\x19\\x59\\x19\\x6d\\x19\\x78\\x19\\x8d\\x19\\xa0\\x19\\xb5\\x19\\xbd\\x19\\xc6\\x19\\xd9\\x19\\xed\\x19\\xfe\\x1a\\x12\\x1a\\x1e\\x1a\\x25\\x1a\\x38\"\n\"\\x1a\\x4b\\x1a\\x5e\\x1a\\x67\\x1a\\x7a\\x1a\\x8d\\x1a\\x9e\\x1a\\xb0\\x1a\\xc2\\x1a\\xd3\\x1a\\xdd\\x1a\\xe4\\x1a\\xf2\\x1b\\x02\\x1b\\x12\\x1b\\x1c\\x1b\\x2c\"\n\"\\x1b\\x3c\\x1b\\x4c\\x1b\\x56\\x1b\\x65\\x1b\\x6e\\x1b\\x7d\\x1b\\x8c\\x1b\\x99\\x1b\\xa8\\x1b\\xb7\\x1b\\xbb\\x1b\\xc9\\x1b\\xd7\\x1b\\xe5\\x1b\\xf3\\x1c\\x01\"\n\"\\x1c\\x0f\\x1c\\x1d\\x1c\\x29\\x1c\\x32\\x1c\\x37\\x1c\\x3d\\x1c\\x4a\\x1c\\x57\\x1c\\x64\\x1c\\x71\\x1c\\x7b\\x1c\\x88\\x1c\\x95\\x1c\\xa1\\x1c\\xad\\x1c\\xb9\"\n\"\\x1c\\xc5\\x1c\\xcf\\x1c\\xd7\\x1c\\xdf\\x1c\\xe7\\x1c\\xf2\\x1c\\xfd\\x1d\\x08\\x1d\\x13\\x1d\\x1e\\x1d\\x29\\x1d\\x34\\x1d\\x3f\\x1d\\x4a\\x1d\\x55\\x1d\\x60\"\n\"\\x1d\\x69\\x06\\x74\\x7d\\x80\\x79\\x7c\\x94\\x84\\x9e\\x1f\\x0b\\x4a\\x1d\\x9e\\x1f\\x0b\\xf8\\x94\\x15\\x0b\\x06\\xa2\\x34\\x1d\\x0b\\x06\\x74\\x7d\\x69\\x1d\"\n\"\\x0b\\x94\\x84\\x9e\\x1f\\x0b\\x06\\x27\\xfc\\x61\\x05\\x0b\\x2f\\x1d\\x9a\\x83\\x91\\x76\\x1f\\x0b\\x95\\x95\\xa0\\x90\\x1e\\x0b\\x4a\\x1d\\x9f\\x1f\\x0b\\x06\"\n\"\\xa2\\x40\\x1d\\x0b\\x06\\x73\\x7e\\x81\\x78\\x7d\\x95\\x83\\x9e\\x1f\\x0b\\x15\\xa1\\x9a\\x96\\x9d\\x99\\x82\\x92\\x77\\x1f\\xfb\\x80\\x8e\\x1d\\x0e\\xf7\\x78\"\n\"\\xf7\\x9e\\x15\\x81\\x1d\\x8e\\x1a\\x96\\x82\\x94\\x7e\\x7a\\x81\\x81\\x76\\x87\\x1e\\x82\\x63\\x8a\\x1d\\x98\\x9b\\x96\\x95\\xa0\\x8f\\x1e\\xaa\\xf7\\x23\\x05\"\n\"\\xfc\\x48\\x49\\x1d\\xf8\\x5b\\x06\\xae\\xf7\\x35\\xf7\\x11\\x1d\\xfb\\xc3\\x06\\x0b\\xb8\\x1d\\x7c\\x1a\\x2d\\xce\\x4b\\xee\\xf7\\x07\\xf6\\xe2\\xf7\\x07\\xa4\"\n\"\\x1e\\x0b\\x06\\xa2\\x9a\\x97\\x9d\\x0b\\xf8\\xcb\\xf7\\x57\\x15\\x92\\xb0\\x8d\\x99\\x9c\\x1a\\xee\\x3b\\xd2\\xfb\\x04\\xfb\\x2c\\xfb\\x19\\xfb\\x0e\\xfb\\x1f\"\n\"\\xfb\\x04\\xdd\\x3f\\xf7\\x0c\\xf3\\xf7\\x17\\xbd\\xb3\\x97\\x82\\x94\\x7f\\x85\\x87\\x89\\x85\\x81\\x1e\\x6d\\x5d\\x3e\\x75\\x4e\\x1b\\x2c\\x4a\\xc5\\xe0\\x90\"\n\"\\x8b\\x8f\\x8c\\x93\\x1f\\xf8\\x09\\xbe\\x15\\xfb\\xfe\\x06\\xdc\\xae\\xe0\\xc2\\xe7\\x1b\\xe3\\xcd\\x52\\x42\\x87\\x1f\\x0b\\x06\\xa2\\x99\\x96\\x9d\\x99\\x81\"\n\"\\x93\\x78\\x1f\\x0b\\x06\\x73\\x7d\\x80\\x78\\x7d\\x94\\x84\\x9f\\x1f\\x0b\\x06\\x73\\x7d\\x39\\x1d\\x0b\\x9a\\x97\\x9d\\x35\\x1d\\x0b\\x9a\\x82\\x91\\x77\\x1f\"\n\"\\x0b\\x06\\x71\\x7d\\x82\\x7b\\x7a\\x99\\x82\\xa5\\x1f\\x0b\\x06\\x74\\x7d\\x80\\x79\\x7c\\x0b\\x97\\x9d\\x9a\\x83\\x91\\x77\\x1f\\x0b\\x80\\x79\\x7c\\x94\\x84\"\n\"\\x9f\\x1f\\x0b\\x99\\x94\\x9b\\x9c\\x7d\\x94\\x71\\x1f\\x0b\\xf8\\x48\\x22\\x1d\\xf7\\x1b\\x27\\x1d\\xfb\\xd4\\x83\\x1d\\xf7\\xd4\\x06\\xa2\\x9a\\x97\\x9c\\x9b\"\n\"\\x82\\x91\\x76\\x1f\\xfb\\x18\\x06\\x0b\\xf8\\x34\\xd0\\x1d\\x0b\\x15\\x9a\\x96\\x8f\\x91\\x96\\x1a\\x97\\x82\\x94\\x7e\\x84\\x86\\x7f\\x1d\\x90\\x8d\\x93\\x96\"\n\"\\x1e\\x0e\\x96\\x1d\\x78\\x1f\\x0b\\x06\\x73\\x7d\\x69\\x1d\\x0b\\x9a\\x97\\x9d\\x99\\x82\\x92\\x77\\x1f\\x0b\\x1e\\xfb\\x1b\\x29\\x05\\x0b\\x6c\\x6a\\x72\\x9e\"\n\"\\x78\\xa5\\x0b\\x81\\x78\\x7d\\x95\\x83\\x9e\\x1f\\x0b\\x1f\\xe8\\x29\\x05\\x83\\x0b\\xf8\\xcd\\xf7\\x61\\x15\\x95\\x23\\x1d\\xfb\\x56\\x21\\x1d\\xf7\\x18\\x06\"\n\"\\x6e\\xfb\\x1e\\x05\\x72\\x4b\\x6c\\x84\\x58\\x1b\\xfb\\x09\\x45\\xc4\\xea\\x9b\\x8d\\xa0\\x90\\x9f\\x1f\\x9a\\xd2\\x97\\xc3\\xb4\\xc8\\xbf\\xb4\\x19\\xad\\xb7\"\n\"\\xbb\\x9c\\xc1\\x1b\\xc0\\xb6\\x7e\\x74\\xa2\\x1f\\x98\\x7e\\x95\\x80\\x88\\x1a\\x89\\x67\\x05\\x85\\x97\\x82\\x94\\x9c\\x95\\x95\\x9f\\x8f\\x1e\\x9f\\xe4\\x05\"\n\"\\x8d\\x95\\xf7\\x48\\x1d\\x86\\x1e\\x8a\\x87\\x05\\xaa\\x66\\x58\\x9b\\x4c\\x1b\\x48\\x4b\\x75\\x60\\x54\\x1f\\x4e\\x5b\\x5b\\x42\\x7c\\x44\\x7b\\x43\\x18\\x86\"\n\"\\x74\\x89\\x76\\x76\\x1a\\xfb\\x0e\\xe2\\x40\\xf7\\x20\\xcb\\xd5\\x9e\\xad\\xcc\\x1e\\x0b\\xf8\\xb8\\xf8\\x15\\x15\\x88\\x1d\\x22\\xd5\\x47\\xf7\\x06\\xd0\\xd2\"\n\"\\x9f\\xae\\xc6\\x1f\\xb2\\xa2\\x9c\\x9d\\x9b\\x1a\\x96\\x82\\x94\\x71\\x1d\\x0b\\xf8\\x12\\xf7\\x90\\x15\\xf7\\x7b\\xf7\\x98\\x05\\xa0\\x91\\x1d\\x79\\x7c\\x80\"\n\"\\x1d\\x79\\x7c\\x25\\x1d\\xa0\\x06\\xf7\\x0c\\xfb\\x96\\x5f\\xfb\\x5f\\x05\\x26\\x21\\x1d\\xf7\\x90\\x06\\xa1\\x34\\x1d\\x29\\x06\\x0b\\x15\\x77\\x7e\\x7c\\x75\"\n\"\\x4a\\xbb\\x67\\xe0\\xc1\\xb9\\x9a\\xa9\\xb0\\xd8\\x1d\\x20\\x1d\\xbb\\x26\\x1d\\x59\\x20\\x1d\\x0b\\x06\\x74\\x7d\\x80\\x78\\x7d\\x94\\x84\\x0b\\x06\\xa2\\x99\"\n\"\\x38\\x1d\\x0b\\x06\\xa5\\x99\\x94\\x9c\\x9b\\x7d\\x94\\x71\\x1f\\x0b\\x05\\x59\\x4a\\x1d\\x9e\\x1f\\x0b\\x82\\x86\\x84\\x7f\\x1a\\x7f\\x94\\x82\\x98\\x91\\x0b\"\n\"\\x06\\x73\\x7e\\x80\\x79\\x7c\\x94\\x84\\x0b\\x92\\x84\\x1f\\xe8\\x29\\x05\\x0b\\x7b\\x9a\\x76\\x1f\\x0e\\xf7\\xa9\\x92\\x15\\x28\\xfb\\x1e\\x05\\xfb\\x10\\x20\"\n\"\\x1d\\xf7\\x7d\\x06\\xa2\\x99\\x96\\x9e\\xf7\\x1d\\x1d\\x83\\x91\\x76\\x65\\x1d\\xfb\\xc6\\x33\\xf7\\xc6\\x05\\xb7\\x27\\x1d\\xfb\\x06\\x33\\x1d\\x97\\x06\\x0b\"\n\"\\xf7\\xec\\xf8\\x37\\x15\\xfb\\x0e\\x20\\x1d\\xcf\\x06\\x46\\xfb\\xd1\\x05\\x2f\\x06\\x75\\x7c\\x7f\\x7a\\x7c\\x95\\x84\\x9d\\x1f\\xf7\\xd1\\x06\\xa1\\x9a\\x97\"\n\"\\x9c\\x9a\\x81\\x92\\x78\\x1f\\xfb\\x40\\x06\\xb8\\xf7\\x64\\x05\\xea\\xf7\\x13\\xb5\\xa3\\xb6\\x1b\\x9f\\x99\\x83\\x74\\x9f\\x1f\\x83\\x92\\x8e\\x89\\x93\\x1b\"\n\"\\x9c\\x9a\\x99\\x9b\\x94\\x82\\x98\\x7a\\x9a\\x1f\\x9d\\x77\\x78\\x92\\x70\\x1b\\x57\\x57\\x72\\x3d\\x22\\x1f\\x0b\\xf8\\x8e\\x16\\xf7\\x03\\xf8\\x94\\x05\\xa8\"\n\"\\x23\\x1d\\xfb\\x29\\x06\\x73\\x7d\\x80\\x79\\x7c\\xcf\\x1d\\x9a\\x82\\x91\\xf7\\x4d\\x1d\\x0b\\xf8\\xdc\\xf8\\x96\\x15\\xb3\\x64\\x55\\xa0\\x4c\\x1b\\x47\\x49\"\n\"\\x71\\x5c\\x53\\x1f\\x55\\x5c\\x60\\x46\\x7e\\x4e\\x79\\x3a\\x18\\x88\\x7c\\x89\\x7b\\x7b\\x1a\\xfb\\x0c\\xe8\\x2e\\xf7\\x0d\\xd2\\xd5\\xa8\\xc1\\xca\\x1e\\xa7\"\n\"\\xa3\\x93\\x95\\x98\\x1a\\x96\\x82\\x93\\x7f\\x81\\x86\\x89\\x82\\x82\\x1e\\x4d\\x48\\x54\\x72\\x47\\x7d\\x1d\\x93\\x9c\\x60\\x1d\\x8b\\x8f\\x1a\\x97\\x82\\x93\"\n\"\\x7e\\x7a\\x81\\x81\\x77\\x86\\x1e\\x0b\\xf8\\x45\\x15\\xfb\\x29\\xfb\\x1e\\xfb\\x15\\xfb\\x20\\x22\\xda\\x40\\xf7\\x01\\xf7\\x2c\\xf7\\x1d\\xf7\\x14\\xf7\\x21\"\n\"\\xf5\\x3d\\xd5\\xfb\\x04\\x1f\\x82\\x58\\x15\\xe2\\xc6\\x53\\x39\\x20\\x5f\\x1d\\x0b\\x06\\x47\\x7e\\x1d\\xf7\\x20\\x06\\xa3\\x99\\x96\\x9d\\x99\\x81\\x93\\x78\"\n\"\\x1f\\x5b\\x06\\x0b\\x26\\x1d\\x6d\\x20\\x1d\\xf7\\x2a\\x2f\\x1d\\x0b\\x15\\x68\\x67\\x1d\\xaa\\xac\\xa4\\x78\\x9e\\x71\\x1f\\x0e\\x05\\x62\\x24\\x1d\\xf7\\x17\"\n\"\\x06\\xa3\\x99\\x96\\x9d\\x99\\x81\\x93\\x78\\x1f\\x64\\x06\\x0b\\x84\\x84\\x88\\x84\\x80\\x1e\\xfb\\x1a\\x2b\\x05\\x7e\\x82\\x85\\x81\\x80\\x1a\\x7f\\x0b\\xf7\"\n\"\\x4a\\x1d\\xc4\\xb8\\x69\\xab\\x5c\\x1f\\x84\\x60\\x15\\xa5\\x9d\\x0b\\x27\\x1d\\xfb\\x03\\x06\\x74\\x7d\\x39\\x1d\\x0b\\x06\\xa3\\x99\\x95\\x9e\\x9a\\x81\\x92\"\n\"\\x78\\x1f\\x0b\\xfb\\x00\\x25\\xfb\\x05\\x31\\x4f\\xc2\\xdd\\xf7\\x01\\xf7\\x00\\xf0\\xf7\\x09\\x1f\\x0b\\x95\\x95\\x9f\\x90\\x1e\\xa3\\xf7\\x02\\x05\\x8d\\x94\"\n\"\\x8b\\x0b\\x15\\x98\\x95\\x91\\x94\\x96\\x1a\\x97\\x0b\\x9e\\x70\\x93\\x3f\\x98\\x08\\x2b\\x9b\\x6c\\xa0\\xba\\x1a\\x0b\\x1a\\x80\\x94\\x82\\x98\\x9b\\x28\\x1d\"\n\"\\x0b\\x95\\x82\\x97\\x94\\x96\\x91\\x95\\x94\\x1e\\x0e\\x1f\\xfb\\x02\\x20\\x1d\\xb7\\x06\\xfb\\x6f\\x0b\\x06\\xa2\\x99\\x96\\x9d\\x99\\x82\\x92\\x78\\x1f\\x0b\"\n\"\\x6a\\x42\\x1d\\xaf\\xab\\x0b\\x74\\x7d\\x80\\x79\\x7d\\x94\\x84\\x9f\\x1f\\x0b\\x81\\x79\\x7c\\x95\\x83\\x9e\\x1f\\x0b\\x90\\x97\\x1a\\x97\\x82\\x94\\x7e\\x0b\"\n\"\\x9a\\x97\\x9d\\x9a\\x83\\x91\\x76\\x1f\\xfb\\x0c\\x06\\x74\\x7d\\x80\\x0b\\x8a\\x86\\x88\\x1a\\x80\\x95\\x82\\x97\\x0b\\x99\\x96\\x9d\\x9a\\x81\\x92\\x78\\x1f\"\n\"\\x0b\\x38\\x05\\x84\\x92\\x91\\x88\\x91\\x1b\\x9b\\x9a\\x99\\x0b\\x1a\\x96\\x82\\x94\\x7e\\x7b\\x80\\x0b\\xf4\\x85\\x1d\\xf7\\x16\\xf0\\xd0\\xe4\\xa4\\x7d\\xa7\"\n\"\\x76\\x9b\\x1f\\x76\\x1d\\x40\\x52\\x9b\\x1d\\x8e\\x8d\\x1a\\x96\\x82\\x94\\x7e\\x7a\\x81\\x81\\x76\\x86\\x1e\\x0b\\x7f\\x83\\x87\\x89\\x82\\x80\\x1e\\x5c\\x4e\"\n\"\\x4a\\x74\\x41\\x1b\\x31\\x53\\xbe\\xdb\\xb9\\x9d\\xbc\\xac\\xb3\\x1f\\xc0\\xb5\\xc7\\xa7\\xd2\\x1b\\xb4\\xb2\\xe0\\x1d\\x81\\x76\\x87\\x1e\\x0b\\xf8\\x7c\\xf8\"\n\"\\x37\\x15\\xfb\\xfc\\xfb\\xeb\\xcc\\xf7\\xb8\\x05\\xb6\\x06\\xa3\\x99\\x96\\x9d\\x99\\x81\\x93\\x78\\x1f\\xfb\\x1d\\x3f\\x1d\\xb4\\x06\\x45\\xfb\\xd1\\x05\\x64\"\n\"\\x24\\x1d\\xec\\x06\\xf7\\xfb\\xf7\\xe9\\x4c\\xfb\\xb6\\x05\\x63\\x3f\\x1d\\xf7\\x14\\x06\\xa3\\x99\\x96\\x9d\\x99\\x81\\x93\\x78\\x1f\\x68\\x06\\xd0\\xf7\\xd1\"\n\"\\x05\\xb0\\x31\\x1d\\x0b\\xf8\\x63\\xf8\\x04\\x15\\x6b\\xfb\\x27\\x7b\\x40\\x7c\\x65\\x70\\x6f\\x19\\x6e\\x6f\\x67\\x7b\\x60\\x1b\\x4b\\x67\\xac\\xc5\\xa0\\x8f\"\n\"\\xaa\\x94\\xb3\\x1f\\xb6\\xf7\\x5d\\x05\\x20\\x8d\\x1d\\xbe\\x06\\x6b\\xfb\\x27\\x05\\x83\\x66\\x87\\x69\\x70\\x1a\\x36\\xc7\\x55\\xe8\\xc3\\xc3\\xa4\\xb4\\xb0\"\n\"\\x1e\\xa9\\xad\\x9f\\xbb\\x9d\\xe1\\xab\\xf7\\x2a\\x18\\xb4\\x3e\\x1d\\xfb\\x26\\x06\\x73\\x7e\\x81\\x78\\x7d\\x95\\x83\\x9d\\x1f\\x0b\\xf7\\x28\\x1d\\xfb\\x09\"\n\"\\x2f\\x05\\x7b\\x7f\\x88\\x86\\x80\\x1a\\x7f\\x94\\x82\\x98\\x92\\x92\\x8e\\x93\\x94\\x1e\\xf7\\x98\\xe6\\xf7\\x28\\x1d\\xfb\\x0a\\x2f\\x05\\x7c\\x80\\x87\\x86\"\n\"\\x7f\\x1a\\x7f\\x94\\x82\\x98\\x92\\x92\\x8e\\x93\\x95\\x1e\\x0e\\xc8\\x1d\\x0e\\x6f\\xa0\\x68\\x97\\x4e\\x91\\x40\\x94\\x8b\\x8b\\x76\\x93\\xf7\\x21\\x1d\\x84\"\n\"\\x9d\\x78\\xf7\\x0e\\x1d\\x8e\\x1a\\x97\\x82\\x94\\x7f\\x7d\\x80\\x81\\x7b\\x85\\x1e\\xa5\\x6f\\x60\\x99\\x55\\x1b\\xfb\\x04\\x32\\x4f\\x3f\\x74\\x98\\x72\\x9f\"\n\"\\x7d\\x1f\\xa4\\x79\\xa6\\x84\\xd4\\x84\\xc0\\x85\\xa4\\x85\\xa1\\xf7\\x46\\x1d\\x0b\\x15\\x69\\x67\\x1d\\xaa\\xac\\xa5\\x78\\x9d\\x70\\x1f\\xf7\\x71\\x16\\x69\"\n\"\\x67\\x1d\\xaa\\xac\\xa5\\x78\\x9d\\x70\\x1f\\x0e\\x93\\x1a\\x95\\x81\\x95\\x80\\x81\\x83\\x87\\x7f\\x81\\x1e\\xfb\\x03\\xfb\\x0f\\x05\\x82\\x80\\x87\\x84\\x83\"\n\"\\x1a\\x80\\x95\\x82\\x97\\x94\\x95\\x91\\x95\\x95\\x1e\\x0e\\x87\\x1a\\x88\\x61\\x05\\x85\\x97\\x82\\x95\\x9b\\x28\\x1d\\xa1\\xef\\x05\\x8d\\x95\\x8b\\x8b\\x8e\"\n\"\\x6f\\x1d\\x81\\x77\\x87\\x1e\\x0b\\xef\\xf8\\x61\\x05\\xb0\\x06\\xa4\\x99\\x94\\x9c\\x9b\\x7d\\x94\\x72\\x1f\\xfb\\x18\\x06\\x72\\x7d\\x82\\x7b\\x7a\\x99\\x82\"\n\"\\xa4\\x1f\\xb4\\x06\\x61\\xfb\\x54\\x0b\\x94\\x84\\x9f\\x1f\\xf7\\x02\\x06\\xfb\\xa7\\xfc\\x61\\x05\\x6f\\x20\\x1d\\xf7\\x2b\\x2f\\x1d\\x0b\\x6f\\x49\\x1b\\x62\"\n\"\\x70\\xa5\\xb2\\x8f\\x8c\\x92\\x8c\\x91\\x1f\\xcd\\xf7\\xc2\\x05\\x25\\x20\\x1d\\xbb\\x06\\x55\\xfb\\x8d\\x05\\x88\\x7f\\x8a\\x80\\x80\\x1a\\x6e\\x98\\x6e\\xa1\"\n\"\\x78\\x1e\\x7b\\x9d\\xa4\\x83\\xaf\\x1b\\xcb\\x0b\\xf7\\x0b\\x1d\\xb9\\xb9\\x7c\\x73\\xa3\\x1f\\x93\\x83\\xa0\\x6c\\x87\\x1a\\x89\\x65\\x05\\x85\\x98\\x82\\x0b\"\n\"\\xfb\\xd1\\x05\\x62\\x24\\x1d\\x0b\\x89\\x83\\x7f\\x41\\x1d\\x7c\\x81\\x87\\x84\\x80\\x1a\\x7f\\x94\\x82\\x98\\x92\\x0b\\x94\\x84\\x9f\\x1f\\xa8\\x06\\xfb\\x4c\"\n\"\\xfb\\x64\\x29\\xf7\\x64\\x05\\xa9\\x27\\x1d\\xfb\\x03\\x06\\x74\\x7d\\x80\\x0b\\xf7\\x1a\\x06\\x83\\x65\\x05\\x8a\\x87\\x8a\\x86\\x88\\x1a\\x80\\xf7\\x34\\x1d\"\n\"\\xa7\\xf7\\x15\\x05\\x8d\\x95\\x8b\\x8b\\x0b\\x41\\x1d\\x7e\\x81\\x85\\x83\\x82\\x1a\\x7e\\x94\\x82\\x99\\x91\\x0b\\x21\\x1d\\xf7\\x19\\x26\\x1d\\xfb\\x1b\\x21\"\n\"\\x1d\\x0b\\x06\\x9b\\x8a\\x97\\x95\\x9a\\x1a\\x8e\\x07\\x9a\\x7f\\x95\\x7b\\x8a\\x1e\\x0b\\xac\\x15\\x8a\\x85\\x8a\\x87\\x88\\x63\\x1d\\x8c\\x07\\x6b\\xac\\xba\"\n\"\\x7b\\xca\\x1b\\x0b\\x7d\\x39\\x1d\\xf7\\x20\\x06\\xa2\\x9a\\x97\\x0b\\x8f\\x1f\\xa5\\xf7\\x0b\\x05\\xfc\\x67\\x06\\x72\\xfb\\x08\\x05\\x8a\\x0b\\xaa\\x69\\x5a\"\n\"\\x9c\\x50\\x1b\\xfb\\x30\\xfb\\x19\\xfb\\x13\\xfb\\x29\\x0b\\x26\\x06\\x74\\x7d\\x80\\x79\\x7b\\x93\\x85\\x9f\\x1f\\xba\\x06\\x0b\\x05\\xfb\\x1a\\x06\\xb5\\xf7\"\n\"\\x57\\x05\\xf7\\xae\\x06\\x78\\x31\\x05\\x8a\\x86\\x8a\\x87\\x88\\x1a\\x7f\\x94\\x82\\x0b\\x15\\xfb\\x70\\x06\\xf7\\x39\\xf7\\xa9\\x05\\x92\\x06\\x0b\\xab\\xaa\"\n\"\\xac\\xa5\\x78\\x9d\\x70\\x1f\\x0b\\x06\\x73\\x7e\\x81\\x79\\x7c\\x95\\x83\\x9e\\x1f\\x0b\\x06\\x74\\x7d\\x80\\x79\\x7d\\x94\\x84\\x9e\\x1f\\x0b\\x06\\x7a\\x7f\"\n\"\\x80\\x7d\\x80\\x93\\x84\\x99\\x1f\\x0b\\x99\\x9a\\x94\\x86\\x93\\x81\\x8f\\x1f\\x93\\x78\\x0b\\x06\\xa0\\x9b\\x97\\x9c\\x9a\\x81\\x92\\x78\\x1f\\xfb\\x02\\x06\"\n\"\\x73\\x7d\\x80\\x0b\\x7d\\x7c\\x82\\x8d\\x88\\x94\\x83\\x1f\\x0e\\x15\\xf7\\x13\\x06\\xf7\\x18\\xf7\\x07\\xe9\\x0b\\x96\\x99\\x96\\x83\\x92\\x7d\\x1f\\x0b\\x6c\"\n\"\\x69\\x6c\\x69\\x70\\x79\\x9b\\xa3\\xab\\xac\\xa9\\xaf\\x1f\\x0b\\x06\\xa3\\x99\\x96\\x9d\\x9a\\x81\\x92\\x0b\\x15\\x5c\\x61\\x64\\x5f\\x6a\\xa4\\x74\\x0b\\x77\"\n\"\\x1f\\x45\\x06\\xdb\\xf7\\x19\\x05\\x0b\\x1f\\x77\\x7b\\x83\\x81\\x80\\x1a\\x7f\\x94\\x83\\x98\\x92\\x0b\\x99\\x95\\x9e\\x99\\x81\\x93\\x0b\\xa8\\xb1\\x8e\\x8c\"\n\"\\x90\\x8c\\x92\\x1e\\x8c\\x8e\\x8b\\x0b\\x06\\xce\\xbe\\x9c\\xb0\\xb1\\x1f\\x0b\\x94\\x1a\\x98\\x80\\x96\\x7d\\x1e\\x0b\\x68\\x74\\xa0\\xaa\\xb2\\xb4\\xae\\x0b\"\n\"\\x85\\x7b\\x1b\\x80\\x82\\x8f\\x9e\\x6d\\x1f\\x9e\\x0b\\x1e\\xae\\xf7\\x22\\x05\\x0e\\xa2\\x06\\xa5\\x3a\\x1d\\x2c\\x06\\x72\\x7d\\x82\\x7a\\x7b\\x99\\x82\\xa4\"\n\"\\x1f\\x9e\\x06\\x63\\xfb\\x4d\\x05\\x84\\x06\\x74\\x8c\\x85\\x96\\x74\\xdd\\x79\\xce\\x87\\x97\\x7d\\xa7\\x08\\xa3\\x7f\\x72\\x96\\x61\\x1b\\x71\\x84\\x85\\x70\"\n\"\\x85\\x1f\\x7f\\x52\\x05\\x89\\x80\\x8a\\x88\\x87\\x1a\\x7e\\x94\\x82\\x9a\\x9a\\x94\\x94\\x9e\\x8f\\x1e\\x97\\xbe\\xa4\\x89\\x91\\x84\\x97\\x5d\\x19\\x9b\\x4b\"\n\"\\xa1\\x47\\x96\\x7a\\x60\\x79\\x7b\\x7a\\x53\\x35\\x34\\xfb\\x1c\\x18\\x6e\\x06\\x72\\x7d\\x82\\x7a\\x7b\\x99\\x82\\xa4\\x1f\\xab\\x06\\x98\\x96\\x8c\\x8d\\x8d\"\n\"\\x1f\\x8e\\x8d\\x92\\x94\\x91\\x94\\xe3\\xf7\\x21\\x18\\xba\\xd3\\xbb\\xb7\\xa7\\x87\\x08\\x92\\x06\\x5a\\xfb\\x75\\x05\\x6e\\x06\\x71\\x7d\\x82\\x7a\\x7b\\x99\"\n\"\\x82\\xa5\\x1f\\xf0\\x06\\xa5\\x3a\\x1d\\x78\\x06\\xbc\\xf7\\x75\\x05\\x94\\x06\\xaf\\x8a\\xa2\\x69\\x9c\\x40\\xa5\\xfb\\x18\\x18\\x92\\x6b\\x8d\\x8a\\xab\\x8a\"\n\"\\x08\\x0b\\xa3\\x1d\\x0e\\xf8\\x95\\xf7\\xdd\\x15\\x8a\\x85\\x8a\\x86\\x88\\x1a\\x7d\\x95\\x82\\x9a\\x9b\\x94\\x95\\x9f\\x8e\\x1e\\x94\\xc1\\x05\\x8c\\x8e\\x8b\"\n\"\\x8d\\x8b\\x1a\\x8c\\x8c\\x05\\x8d\\x07\\x8c\\x8e\\x8b\\x8e\\x8f\\x1a\\x9d\\x7d\\x93\\x6e\\x4e\\x6e\\x7d\\x49\\x46\\x1e\\x66\\x67\\x6f\\x73\\x76\\x7d\\x7d\\x80\"\n\"\\x72\\x87\\x5d\\x8a\\x08\\x87\\x06\\xa5\\xf7\\x0a\\x05\\xb7\\x06\\xa4\\x99\\x94\\x9b\\x9c\\x7d\\x94\\x72\\x1f\\xfb\\x1e\\x36\\x1d\\xb5\\x06\\x46\\xfb\\xd1\\x05\"\n\"\\x5f\\x06\\x72\\x7d\\x82\\x7a\\x7b\\x99\\x82\\xa4\\x1f\\xf7\\x1f\\x06\\xa4\\x99\\x94\\x9b\\x9c\\x7d\\x94\\x72\\x1f\\x61\\x06\\xaa\\xf7\\x28\\x05\\x93\\x06\\xf2\"\n\"\\x89\\x99\\x84\\xae\\x47\\xb9\\x2c\\x18\\x98\\x71\\x8c\\x8b\\xa8\\x8a\\x08\\xc6\\x06\\xa4\\x99\\x94\\x9b\\x9c\\x7d\\x94\\x72\\x1f\\x54\\x06\\x5f\\xe5\\x74\\xb9\"\n\"\\x6f\\xaa\\x70\\x95\\x19\\xa9\\x9c\\xa4\\x9f\\xb8\\xb7\\xbe\\xbb\\x99\\x93\\xaf\\x8e\\x08\\x0b\\xf7\\x4c\\xf7\\x9e\\x15\\x81\\x1d\\x8d\\x1a\\x97\\x82\\x94\\x7e\"\n\"\\x7a\\x81\\x81\\x77\\x87\\x1e\\x82\\x62\\x8a\\x1d\\x97\\x9c\\x28\\x1d\\xaa\\xf7\\x23\\x05\\xfc\\x48\\x49\\x1d\\xf8\\x5b\\x06\\xae\\xf7\\x35\\x05\\x8d\\x95\\x8b\"\n\"\\x8b\\x8e\\x6f\\x1d\\x81\\x76\\x86\\x1e\\x73\\xfb\\x04\\x05\\xfb\\xc3\\x06\\x0e\\xf7\\xf1\\xf7\\xb3\\x15\\xaa\\x1d\\xf7\\x17\\x2a\\x1d\\x7d\\x06\\x0e\\xf7\\xe1\"\n\"\\xf7\\x78\\x15\\x8d\\x95\\x8c\\x91\\x8f\\x1a\\x9a\\x82\\x94\\x7c\\x7d\\x81\\x80\\x74\\x86\\x1e\\x84\\x6b\\x7c\\x43\\x7f\\x69\\x79\\x73\\x19\\x71\\x78\\x71\\x7c\"\n\"\\x72\\x1b\\x64\\x73\\xaf\\xc6\\xf4\\xcf\\xf7\\x0a\\xd8\\xa7\\x1f\\xa3\\x93\\x90\\x90\\x99\\x1a\\x9a\\x81\\x95\\x7a\\x65\\x54\\x62\\x52\\x63\\x1e\\x64\\x51\\x70\"\n\"\\x37\\x48\\x1a\\x37\\xb9\\x51\\xd0\\xb7\\xb1\\xa1\\xb6\\xaa\\x1e\\x60\\x9d\\xaa\\x75\\xb8\\x1b\\xee\\xde\\xf7\\x0b\\xf7\\x23\\xcb\\x7f\\xb1\\x6d\\xb1\\x1f\\xa8\"\n\"\\x72\\x71\\x9d\\x77\\x1b\\x7e\\x81\\x81\\x7d\\x80\\x90\\x83\\x99\\x83\\x1f\\xbb\\x6c\\x9c\\x69\\x49\\x1a\\xfb\\x09\\x4f\\x28\\x45\\x69\\x78\\xa6\\xba\\xa1\\x8f\"\n\"\\xaa\\x94\\xb6\\x1e\\x0b\\xf7\\x2c\\xbb\\x15\\x5e\\xb3\\xb7\\x78\\xc9\\x1b\\xf7\\x3a\\xf7\\x32\\xf7\\x48\\xf7\\x50\\xbc\\x81\\xb3\\x77\\xb0\\x1f\\xe0\\xde\\x05\"\n\"\\x96\\x96\\x8e\\x90\\x93\\x1a\\x96\\x82\\x93\\x80\\x82\\x87\\x89\\x7f\\x80\\x1e\\x3b\\x3d\\x05\\xb9\\x5f\\x64\\x9c\\x4f\\x1b\\xfb\\x3c\\xfb\\x33\\xfb\\x46\\xfb\"\n\"\\x51\\x5c\\x94\\x65\\xa0\\x63\\x1f\\x36\\x38\\x05\\x81\\x80\\x88\\x87\\x83\\x1a\\x80\\x93\\x83\\x97\\x93\\x91\\x8e\\x95\\x95\\x1e\\xeb\\xf7\\x2d\\x15\\x7c\\xb0\"\n\"\\x87\\xa0\\xae\\x1a\\xf7\\x30\\xf7\\x17\\xf7\\x2b\\xf7\\x1b\\xb7\\xae\\x7b\\x68\\xaa\\x1e\\xa3\\x67\\x15\\x9a\\x62\\x8f\\x78\\x69\\x1a\\xfb\\x31\\xfb\\x16\\xfb\"\n\"\\x2b\\xfb\\x1c\\x5f\\x68\\x9c\\xaf\\x6b\\x1e\\x0b\\xf7\\xc0\\xf8\\xef\\x15\\x89\\x1d\\xfb\\x00\\xfc\\x89\\x05\\x62\\x33\\x1d\\xf7\\x18\\x2f\\x1d\\x9a\\x82\\x91\"\n\"\\x76\\x1f\\x65\\x06\\xbf\\xf7\\x86\\xbd\\xb9\\x8b\\x8b\\x98\\x94\\x19\\xa3\\xad\\xa9\\x95\\xb0\\x1b\\xb3\\x9d\\x86\\x78\\x9e\\x1f\\x9a\\x7d\\x92\\x7b\\x77\\x1a\"\n\"\\x87\\x8a\\x83\\x89\\x84\\x1e\\x58\\xfb\\x82\\x05\\x62\\x20\\x1d\\xf7\\x18\\x23\\x1d\\x64\\x06\\xbe\\xf7\\x83\\x05\\x8e\\x95\\x8c\\x95\\x93\\x1a\\xd1\\x55\\xb8\"\n\"\\x37\\x51\\x5d\\x77\\x57\\x50\\x1e\\x0b\\xf7\\x63\\x22\\x1d\\xae\\x06\\xa4\\x99\\x94\\x9b\\x9c\\x7d\\x94\\x72\\x1f\\xfb\\x03\\x36\\x1d\\x9e\\x06\\xf7\\x09\\xfb\"\n\"\\xef\\x5f\\x51\\x05\\x5c\\x66\\x6a\\x72\\x6f\\x1b\\x84\\x81\\x8c\\x8e\\x7d\\x1f\\x96\\xbc\\x05\\x8d\\x92\\x8c\\x91\\x90\\x1a\\x99\\x81\\x94\\x7c\\x7c\\x81\\x80\"\n\"\\x75\\x87\\x1e\\x7e\\x51\\x05\\x89\\x83\\x8a\\x83\\x87\\x1a\\x76\\xa8\\x7e\\xb9\\xc7\\xb0\\xa2\\xd5\\xc4\\x1e\\xf7\\xe1\\xf8\\x43\\x05\\xa2\\x06\\xa5\\x3a\\x1d\"\n\"\\x20\\x06\\x72\\x7d\\x82\\x7b\\x7a\\x99\\x82\\xa4\\x1f\\x9e\\x06\\xfb\\x78\\xfb\\xbd\\x05\\x0b\\xf7\\x74\\xf7\\x75\\x05\\x98\\x27\\x1d\\xfb\\x03\\x29\\x1d\\xab\"\n\"\\x06\\xfb\\x4a\\xfb\\x4b\\x23\\xf7\\x4b\\x05\\xac\\x06\\xa2\\x34\\x1d\\xfb\\x02\\x06\\x74\\x7d\\x80\\x78\\x7d\\xf7\\x17\\x1d\\x78\\x7d\\x94\\x84\\x9f\\x1f\\xf7\"\n\"\\x16\\x2f\\x1d\\x99\\x82\\x92\\xf7\\x32\\x1d\\x75\\x7c\\x39\\x1d\\x0b\\xf7\\xd5\\xf7\\x3a\\x15\\xf7\\x7a\\xf7\\xec\\x28\\xfc\\x5f\\x05\\x45\\x20\\x1d\\xf7\\x29\"\n\"\\x2a\\x1d\\x70\\x06\\xef\\xf8\\x61\\x05\\xa0\\x06\\xa1\\x9a\\x97\\x9d\\x9a\\x83\\x91\\x76\\x1f\\x25\\x06\\xfb\\x74\\xfb\\xe2\\x3b\\xf7\\xe2\\x05\\x23\\x20\\x1d\"\n\"\\x9e\\x58\\x1d\\x99\\x82\\x92\\x77\\x1f\\x47\\x06\\xee\\xf8\\x5f\\xdf\\xfb\\xec\\x05\\x0e\\xf7\\x79\\xf7\\x47\\x15\\xbb\\xad\\xf7\\x18\\xfb\\x36\\x05\\x7a\\x20\"\n\"\\x1d\\xf7\\x17\\x23\\x1d\\x61\\x06\\xfb\\x32\\xf7\\x55\\xf7\\x46\\xf7\\x10\\x05\\xb8\\x06\\xa2\\x9a\\x97\\x9c\\x9b\\x83\\x91\\x76\\x1f\\xfb\\x16\\x20\\x1d\\x91\"\n\"\\x06\\xfb\\x48\\xfb\\x13\\xd9\\xf7\\xfe\\x05\\x26\\x06\\x74\\x7d\\x80\\x79\\x7b\\x93\\x85\\x9f\\x1f\\xbb\\x06\\xfb\\x01\\xfc\\x89\\x05\\x59\\x20\\x1d\\xef\\x06\"\n\"\\x0b\\xf8\\x49\\xbe\\x15\\x7a\\x1d\\x05\\x50\\x36\\x50\\x73\\x4f\\x1b\\x5f\\x75\\x9e\\xb2\\x98\\x8d\\x97\\x8e\\x9c\\x1f\\xb1\\xf7\\x43\\x05\\xb9\\x4c\\x1d\\xfb\"\n\"\\x1e\\x06\\x72\\x7d\\x82\\x7b\\x7a\\x99\\x82\\xa4\\x1f\\xb1\\x06\\x67\\xfb\\x3d\\x05\\x86\\x74\\x89\\x7c\\x7d\\x1a\\x4c\\xb9\\x61\\xd0\\xc7\\xc8\\x9f\\xb9\\xd5\"\n\"\\x1e\\x60\\xfb\\x5d\\x05\\x0b\\xf8\\x4b\\xbe\\x15\\xcf\\xf7\\xd1\\x05\\xb2\\x06\\xa5\\x3a\\x1d\\xfb\\x14\\x06\\x71\\x7d\\x82\\x7a\\x7b\\x99\\x82\\xa5\\x1f\\xaf\"\n\"\\x06\\x6f\\xfb\\x11\\x05\\x60\\x37\\x55\\x7a\\x52\\x1b\\x60\\x74\\x99\\xa6\\x95\\x8d\\x97\\x8e\\x9a\\x1f\\xa3\\xf6\\x05\\xb8\\x06\\xa5\\x3a\\x1d\\xfb\\x18\\x06\"\n\"\\x72\\x7d\\x82\\x7a\\x7b\\x99\\x82\\xa4\\x1f\\xad\\x06\\x75\\x23\\x05\\x86\\x74\\x89\\x7f\\x7f\\x1a\\x58\\xb8\\x6a\\xd1\\xc7\\xc5\\x9a\\xad\\xd0\\x1e\\x6f\\xfb\"\n\"\\x17\\x05\\x0b\\xf7\\xe6\\xf7\\x90\\x15\\xf7\\x7a\\xf7\\x98\\x05\\xa1\\x91\\x1d\\x78\\x7d\\x80\\x1d\\x78\\x7d\\x25\\x1d\\xa0\\x06\\xf7\\x0c\\xfb\\x96\\x5f\\xfb\"\n\"\\x5f\\x05\\x26\\x21\\x1d\\xf7\\x90\\x06\\xa1\\x40\\x1d\\x29\\x06\\x0b\\x06\\xef\\xf8\\x61\\x05\\xad\\x06\\xa3\\x99\\x95\\x9d\\x9a\\x81\\x93\\x78\\x1f\\xfb\\x06\"\n\"\\x06\\x74\\x7d\\x80\\x79\\x7d\\x95\\x83\\x9e\\x1f\\xa6\\x26\\x1d\\xfb\\x29\\x06\\xee\\xf8\\x61\\x05\\xa4\\x06\\xa3\\x99\\x95\\x9d\\x9a\\x81\\x93\\x78\\x1f\\x20\"\n\"\\xf7\\x5b\\x1d\\xa8\\x26\\x1d\\xfb\\x29\\x06\\xef\\xf8\\x61\\x05\\xa2\\x3e\\x1d\\xfb\\x03\\x2b\\x1d\\xae\\x06\\x0b\\xdf\\x1d\\x78\\x7d\\xd1\\x1d\\x74\\x7c\\x39\"\n\"\\x1d\\xf7\\x20\\x06\\xa2\\x9a\\x97\\x9c\\x9a\\x82\\x92\\x77\\x1f\\x5c\\x06\\xba\\xf7\\x6b\\x05\\x0b\\xf8\\x84\\x22\\x1d\\x27\\xfc\\x61\\x05\\x5a\\x24\\x1d\\xf7\"\n\"\\x1f\\x06\\xa3\\x99\\x96\\x9d\\x99\\x81\\x93\\x78\\x1f\\x65\\x06\\xef\\xf8\\x61\\x05\\xa8\\x06\\xa2\\x9a\\x1d\\x79\\x1f\\xfc\\x3e\\x2b\\x1d\\xae\\x26\\x1d\\x62\"\n\"\\x24\\x1d\\xf7\\x20\\x06\\xa3\\x99\\x96\\x9d\\x99\\x81\\x93\\x78\\x1f\\x5b\\x06\\xef\\xf8\\x61\\x05\\x0e\\xf7\\x7d\\x92\\x15\\x28\\xfb\\x1e\\x05\\xfb\\x10\\x21\"\n\"\\x1d\\xf7\\x7d\\x06\\xa1\\x9a\\x97\\x9d\\xf7\\x1d\\x1d\\x82\\x91\\x77\\x65\\x1d\\xfb\\xc6\\x33\\xf7\\xc6\\x05\\xb7\\x06\\xa2\\x34\\x1d\\xfb\\x06\\x33\\x1d\\x97\"\n\"\\x06\\x0b\\xf7\\x01\\xbe\\x15\\x6d\\x29\\x1d\\xf7\\x70\\x06\\xf7\\x16\\xf7\\x12\\xf7\\x02\\xf7\\x23\\xab\\x1f\\x97\\xc2\\x05\\x90\\x9f\\x8d\\xa0\\x9c\\x1a\\xf7\"\n\"\\x09\\x3f\\xdb\\xfb\\x04\\x1e\\xfb\\x70\\x29\\x1d\\xa6\\x06\\x5b\\xfc\\x61\\x15\\xef\\xf8\\x61\\x05\\xf7\\x43\\x1d\\x63\\x1a\\x80\\x89\\x7d\\x89\\x7f\\x1e\\x7b\"\n\"\\x43\\x72\\x23\\x20\\x2c\\x31\\x8e\\x19\\x0b\\x5a\\x1d\\xc0\\xf7\\x86\\x05\\xd7\\xe1\\xa4\\x98\\xc2\\x1b\\xc7\\xac\\x71\\x5b\\x85\\x8b\\x8a\\x88\\x7f\\x1f\\x58\"\n\"\\xfb\\x82\\x05\\x62\\x06\\x73\\x7e\\x81\\x78\\x7d\\x95\\x83\\x9d\\x1f\\xf7\\x18\\x06\\xa2\\x99\\x96\\x9d\\x99\\x81\\x93\\x79\\x1f\\x64\\x06\\xbf\\xf7\\x82\\x05\"\n\"\\x8d\\x96\\x8c\\x93\\x94\\x1a\\xd1\\x56\\xb9\\x3b\\x52\\x0b\\x40\\x1d\\x70\\x06\\xdb\\xf8\\x04\\x05\\xfb\\x0e\\x32\\x1d\\xcf\\x06\\x55\\xfb\\x8b\\x05\\x51\\x48\"\n\"\\x4a\\x7c\\x1d\\x0b\\xf7\\x08\\xbd\\x1d\\x79\\x7c\\x25\\x1d\\x94\\x06\\x0b\\xf8\\xfb\\x22\\x1d\\xa8\\x27\\x1d\\xfb\\x29\\x20\\x1d\\xcf\\x06\\x45\\xfb\\xd8\\x05\"\n\"\\x35\\x78\\x39\\x48\\x35\\x1b\\x42\\x5a\\xbb\\xd2\\x96\\x8c\\x95\\x8d\\x96\\x1f\\xd2\\xf7\\xda\\x05\\xd1\\x06\\xa1\\x9a\\x38\\x1d\\xfb\\x29\\x32\\x1d\\xa6\\x06\"\n\"\\x45\\xfb\\xd8\\x05\\x88\\x7b\\x89\\x7c\\x0b\\xf8\\xd3\\x22\\x1d\\xe7\\x06\\xa1\\x9a\\x38\\x1d\\xfb\\xbc\\x21\\x1d\\xf7\\x2c\\x06\\x41\\xfb\\xeb\\x05\\x40\\x7b\"\n\"\\x3f\\x50\\x3c\\x1b\\x5b\\x63\\x9f\\xb6\\x64\\x1f\\xa6\\xf7\\x11\\x05\\x8d\\x94\\x8b\\x8b\\x8e\\x1a\\x97\\x82\\x94\\x7e\\x7a\\x81\\x81\\x76\\x86\\x1e\\x6b\\xfb\"\n\"\\x29\\x91\\x85\\x05\\x4d\\xc4\\xba\\x73\\xcc\\x1b\\xf4\\xf4\\xde\\xee\\xa0\\x1f\\x0b\\x06\\xcf\\xf7\\xd1\\x05\\xb4\\x31\\x1d\\xfb\\x1f\\x06\\x72\\x7e\\x43\\x1d\"\n\"\\xba\\x06\\x47\\xfb\\xd1\\x05\\xfb\\x94\\x06\\xcf\\xf7\\xd1\\x05\\xbc\\x3e\\x1d\\xfb\\x20\\x3f\\x1d\\xb2\\x06\\x44\\xfb\\xd1\\x05\\x70\\x24\\x1d\\x0b\\x1f\\x20\"\n\"\\x06\\xfc\\x12\\xfc\\x6f\\xe7\\xf8\\x3c\\x05\\xba\\x06\\xa2\\x99\\x96\\x9d\\x99\\x81\\x93\\x79\\x1f\\xfb\\x29\\x06\\x73\\x7d\\x81\\x78\\x7d\\x95\\x83\\x9d\\x1f\"\n\"\\xbe\\x06\\x26\\xfc\\x61\\x05\\x5d\\x24\\x1d\\xf6\\x06\\xf8\\x10\\xf8\\x64\\x31\\xfc\\x31\\x05\\x5d\\x06\\x74\\x7d\\x81\\x79\\x7c\\x95\\x83\\x9d\\x1f\\xf7\\x29\"\n\"\\x06\\xa3\\x99\\x95\\x9e\\x0b\\x61\\x1d\\x83\\x93\\x7e\\x5b\\x1d\\x94\\x83\\x97\\x92\\x92\\x8e\\x92\\x96\\xf7\\x13\\x1d\\xf7\\x97\\x16\\x6f\\x71\\x72\\x70\\x74\"\n\"\\x98\\x7e\\xa2\\xa9\\xa5\\xa3\\xa7\\xa0\\x7b\\x9a\\x75\\x1f\\x0e\\xf7\\x0a\\x1d\\x9d\\x9a\\x83\\x91\\x77\\x1f\\xfb\\x2a\\x21\\x1d\\xe3\\x06\\xfb\\x27\\xfc\\x46\"\n\"\\x73\\xf7\\xfe\\x05\\x45\\x06\\xfb\\x4c\\xfb\\xfe\\xb5\\xf8\\x46\\x05\\xe3\\x27\\x1d\\xfb\\x29\\x06\\x74\\x7d\\x80\\x0b\\x05\\x44\\x24\\x1d\\xf7\\x2b\\x31\\x1d\"\n\"\\x71\\x06\\x34\\xf8\\x94\\x05\\xfb\\x63\\x06\\x73\\x7d\\x80\\x79\\x7c\\x95\\x84\\x9e\\x1f\\xf7\\x01\\x06\\xfb\\xa6\\xfc\\x61\\x05\\x6f\\x24\\x1d\\xf7\\x2a\\x06\"\n\"\\xa3\\x99\\x96\\x9d\\x99\\x81\\x93\\x78\\x1f\\x47\\x06\\x0b\\x15\\x84\\x85\\x89\\x84\\x83\\x1f\\x6e\\x67\\x81\\x85\\x7b\\x1b\\x80\\x83\\x8f\\x9e\\x6c\\x1f\\x9e\"\n\"\\x6d\\x7f\\x8f\\x76\\x1b\\x71\\x72\\xf7\\x15\\x1d\\xa8\\xad\\x95\\x90\\x9d\\x1b\\x96\\x95\\x87\\x80\\x9c\\x1f\\x73\\xae\\x9d\\x84\\xa2\\x1b\\xa6\\xa4\\x97\\xa9\"\n\"\\xaf\\x1f\\x9e\\x9a\\x90\\x92\\x0b\\x22\\x1d\\xf7\\x9a\\x06\\x6a\\xfb\\x2b\\x05\\x89\\x83\\x8b\\x89\\x89\\x1a\\x80\\x95\\x82\\x97\\x9b\\x96\\x95\\x9f\\x90\\x1e\"\n\"\\xb7\\xf7\\x60\\x05\\xfc\\x5e\\xd9\\x1d\\xf7\\xe4\\xf8\\x18\\x15\\x8f\\x9b\\x8b\\x8d\\x8d\\x1a\\x9b\\x81\\x94\\x7b\\x7b\\x84\\x83\\x72\\x86\\x1e\\x49\\xfb\\xc8\"\n\"\\x05\\x89\\x7d\\x89\\x7e\\x7f\\x1a\\x60\\xa9\\x71\\xba\\xa0\\xea\\x1d\\x92\\x8c\\x92\\x8f\\x9f\\x1f\\x0b\\xf7\\x62\\xf8\\x04\\x15\\x48\\xfb\\xd1\\x05\\x26\\x24\"\n\"\\x1d\\xf7\\x8e\\x06\\xa3\\x99\\x96\\x9d\\x99\\x81\\x93\\x78\\x1f\\x29\\x06\\xcf\\xf7\\xd1\\x05\\xf7\\xa6\\x06\\x6e\\xfb\\x16\\x8a\\x7d\\x05\\x7f\\x93\\x84\\x98\"\n\"\\x9c\\x96\\x96\\x9e\\x8f\\x1e\\xb3\\xf7\\x4c\\x05\\xfc\\x71\\x06\\x73\\x7e\\x81\\x78\\x7d\\x95\\x83\\x9d\\x1f\\x0b\\xf7\\x35\\xac\\x15\\x6a\\xb0\\xb7\\x7b\\xc1\"\n\"\\x1b\\xf7\\x2a\\xf7\\x1d\\xf7\\x15\\xf7\\x21\\xb2\\x82\\xa9\\x76\\xab\\x1f\\xd5\\xc8\\x05\\x97\\x95\\x8f\\x91\\x94\\x1a\\x96\\x83\\x93\\x7f\\x84\\x88\\x8a\\x80\"\n\"\\x7e\\x1e\\x40\\x4d\\x05\\xab\\x67\\x60\\x9a\\x55\\x1b\\xfb\\x29\\xfb\\x1d\\xfb\\x15\\xfb\\x20\\x65\\x94\\x6c\\x9f\\x6c\\x1f\\x3e\\x4c\\x05\\x0b\\x15\\x83\\x83\"\n\"\\x86\\x7e\\x7a\\x1f\\x70\\x6a\\x89\\x8a\\x7e\\x1b\\x7f\\x81\\x8f\\x98\\x77\\x1f\\xac\\x57\\x88\\x8c\\x79\\x1b\\x63\\x45\\x5a\\x6f\\x7f\\x93\\x84\\x99\\x93\\x91\"\n\"\\x8e\\x91\\x92\\x1f\\xa1\\xa2\\xa4\\x9a\\x97\\x1b\\x91\\x9e\\x82\\x84\\x95\\x1f\\x73\\xac\\xa4\\x80\\xa0\\x1b\\xb1\\xd3\\xbc\\xa5\\x96\\x81\\x95\\x80\\x1f\\x0e\"\n\"\\x15\\x77\\x7e\\x7c\\x75\\x4a\\xba\\x67\\xe1\\xc1\\xb9\\x9a\\xa9\\xb0\\xf7\\x52\\x1d\\x80\\x81\\x85\\x82\\x87\\x1e\\x81\\x73\\x86\\x84\\x7d\\x80\\x08\\x78\\x74\"\n\"\\x66\\x80\\x65\\xf7\\x0f\\x1d\\x15\\xfb\\x55\\xfb\\x48\\xfb\\x40\\xfb\\x4c\\xfb\\x1c\\xf2\\x27\\xf7\\x20\\xf7\\x56\\xf7\\x48\\xf7\\x3f\\xf7\\x4d\\xf7\\x1d\\x25\"\n\"\\xee\\xfb\\x22\\x1f\\x82\\x58\\x15\\xf7\\x08\\xdf\\x3a\\xfb\\x04\\xfb\\x2b\\xfb\\x2a\\xfb\\x26\\xfb\\x30\\xfb\\x0d\\x37\\xda\\xf7\\x06\\xf7\\x2d\\xf7\\x2a\\xf7\"\n\"\\x24\\xf7\\x35\\x1f\\x0e\\xf8\\x0f\\xf7\\x03\\x1d\\xf7\\x19\\x3a\\xe6\\xfb\\x0a\\x1f\\x84\\x58\\x15\\xe4\\xcb\\x3f\\x21\\xfb\\x2c\\xf7\\x29\\x1d\\xf7\\x1c\\x1f\"\n\"\\x0b\\xf8\\x1c\\x22\\x1d\\xf7\\x1b\\x27\\x1d\\xfb\\xd4\\x20\\x1d\\xf7\\x19\\x26\\x1d\\xfb\\x1b\\x21\\x1d\\xf7\\xd4\\x06\\xa2\\x9a\\x97\\x9c\\x9a\\x82\\x92\\x76\"\n\"\\x1f\\xfb\\x18\\x06\\x0b\\xf8\\xb9\\x15\\xfb\\x00\\x6c\\x76\\x85\\x85\\x87\\x08\\x85\\x87\\x86\\x83\\x84\\x1a\\x82\\x93\\x83\\x94\\x8f\\x8d\\x8b\\x8c\\x8f\\x1e\"\n\"\\xcc\\x9f\\x54\\xfb\\x97\\x05\\x8c\\x75\\x75\\x8b\\x7c\\x1b\\x73\\x7d\\x82\\x7b\\x80\\x93\\x85\\x97\\x1f\\xf7\\x46\\x06\\x9a\\xf7\\x5f\\x1d\\x0b\\xf7\\x56\\x1d\"\n\"\\x88\\x8f\\x84\\x91\\x1f\\x63\\xac\\x78\\xa1\\x6d\\xbc\\x88\\x8f\\x88\\x90\\x88\\x90\\x08\\x88\\x90\\x87\\x91\\x8b\\x1a\\x98\\x84\\x88\\x8e\\x82\\x1b\\x84\\x87\"\n\"\\x87\\x79\\x81\\x1f\\x6a\\x52\\x72\\x6b\\x67\\x6f\\x08\\x7e\\x80\\x88\\x86\\x85\\x1a\\x81\\x92\\x84\\x93\\x99\\x0b\\x86\\x82\\x1a\\x80\\x93\\x83\\x97\\x91\\x91\"\n\"\\x8e\\x93\\x95\\x1e\\xf8\\x3e\\xf7\\xf2\\x15\\x99\\x74\\x91\\x75\\x6e\\x1a\\xfb\\x00\\xfb\\x00\\x25\\xfb\\x08\\x61\\x6e\\x95\\xa3\\x6d\\x1e\\x70\\xaa\\x15\\x7c\"\n\"\\xaa\\x87\\x9a\\xa5\\x1a\\xf7\\x01\\xf6\\xf0\\xf7\\x08\\xb5\\xa7\\x82\\x74\\xa9\\x1e\\x0b\\xf7\\x7b\\xf8\\x37\\x15\\x3a\\x06\\x73\\x7d\\x81\\x78\\x7c\\x95\\x84\"\n\"\\x9e\\x1f\\xa6\\x06\\x46\\xfb\\xd1\\x5a\\x1d\\xbf\\xf7\\x84\\x05\\xd4\\xdb\\xab\\x9d\\xc2\\x1b\\x0b\\xf5\\x1d\\x87\\x1a\\x80\\x95\\x82\\x97\\xf7\\x18\\x1d\\x0e\"\n\"\\xf8\\x08\\xf8\\x37\\x15\\xfb\\x3a\\x20\\x1d\\xf7\\x04\\x06\\x46\\xfb\\xd1\\x05\\xfb\\x30\\x21\\x1d\\xf7\\xfe\\x2a\\x1d\\xfb\\x2e\\x06\\x0b\\x94\\x84\\x9f\\x1f\"\n\"\\xcf\\x06\\x2d\\xfc\\x43\\xfb\\x54\\xf8\\x76\\x05\\xfb\\x02\\x20\\x1d\\xbb\\x58\\x1d\\x0b\\xf8\\x37\\x15\\xfb\\x3a\\x20\\x1d\\xf7\\x04\\x06\\x46\\xfb\\xd1\\xf1\"\n\"\\x1d\\x0b\\x94\\x84\\x9f\\x1f\\xba\\x06\\x61\\xfb\\x57\\x05\\xfb\\x97\\x06\\xb5\\xf7\\x57\\x05\\xbc\\x06\\xa2\\x6b\\x1d\\x78\\x7d\\x25\\x1d\\x9e\\x26\\x1d\\x62\"\n\"\\x06\\x0b\\xf7\\x65\\xf7\\x22\\x1d\\x89\\x92\\x80\\x1f\\xf2\\xfb\\x35\\xfb\\x42\\xfb\\x35\\x05\\x7d\\x7e\\x88\\x86\\x81\\x1a\\x7f\\x94\\x82\\x98\\x93\\x92\\x8e\"\n\"\\x94\\x96\\x1e\\x0b\\xda\\x1d\\x67\\x90\\x1f\\x0e\\xf7\\x04\\x1d\\xe1\\x35\\x05\\x83\\x92\\x8f\\x89\\x92\\x1b\\x9b\\x9b\\x99\\x9a\\x93\\x8a\\x8d\\x80\\x95\\x1f\"\n\"\\x0e\\xe5\\x1d\\x8e\\x91\\x95\\x1e\\xf7\\x0e\\xdf\\xe1\\x6e\\x1d\\x9b\\x92\\x8a\\x8e\\x81\\x94\\x1f\\x0e\\x25\\x1d\\xd2\\x06\\x46\\xfb\\xd1\\x05\\x3c\\x21\\x1d\"\n\"\\xf7\\x58\\x06\\x0b\\x06\\xb5\\xf7\\x57\\x05\\xf7\\xc3\\x06\\x78\\x31\\x05\\x8a\\x86\\x8a\\x87\\x87\\x63\\x1d\\xaa\\xf7\\x23\\x05\\xfc\\x5d\\x21\\x1d\\xbb\\x06\"\n\"\\x0b\\xf7\\x52\\x1d\\x7c\\x85\\x86\\x77\\x83\\x1e\\x65\\x7b\\x5b\\x73\\x50\\xf7\\x0f\\x1d\\x06\\x75\\x7c\\x7f\\x79\\x7d\\xf7\\x39\\x1d\\x7f\\x79\\x7c\\x93\\x85\"\n\"\\x9f\\x1f\\xf7\\x7e\\x06\\xa2\\x99\\x96\\x9e\\x99\\x82\\x92\\x77\\x1f\\x32\\x06\\x0e\\x94\\x85\\x7f\\x7d\\x7a\\x80\\x74\\x7a\\x7d\\x8f\\x95\\x79\\x1f\\x8f\\x85\"\n\"\\x89\\x8b\\x82\\x1b\\x7b\\x80\\x81\\x7b\\x7f\\x90\\x84\\x96\\x84\\x1f\\x81\\x9d\\xa7\\x84\\xa0\\x1b\\xc5\\xb6\\xae\\xb9\\xac\\x79\\x9d\\x0b\\x15\\xfb\\x2f\\xfb\"\n\"\\x01\\x05\\x7c\\x84\\x85\\x82\\x7f\\x1a\\x7f\\x95\\x82\\x97\\x8f\\x98\\x90\\x8f\\x90\\x1e\\xf7\\x0d\\xe2\\xe1\\x35\\x05\\x83\\x92\\x90\\x89\\x92\\x1b\\x9a\\x9b\"\n\"\\x9a\\x99\\x93\\x8a\\x8d\\x0b\\xf7\\x6f\\x15\\x98\\x94\\x91\\x95\\x96\\x1a\\x97\\x83\\x93\\x7e\\x84\\x84\\x88\\x84\\x81\\x1e\\xfb\\x1b\\x2b\\x05\\x7e\\x81\\x85\"\n\"\\x82\\x80\\x1a\\x7f\\x94\\x83\\x97\\x92\\x93\\x8e\\x92\\x95\\x1e\\x0e\\x15\\x6f\\x71\\x72\\x70\\x76\\x9a\\x7c\\xa1\\xa8\\xa4\\xa3\\xa7\\xa0\\xf7\\x4e\\x1d\\x9b\"\n\"\\x7c\\xa0\\xa8\\xa4\\xa3\\xa7\\xa0\\x51\\x1d\\xf9\\x06\\x15\\x93\\x83\\x86\\x8e\\x84\\x1b\\x7a\\x7d\\x7d\\x7b\\x85\\x8e\\x86\\x50\\x1d\\x83\\x92\\x91\\x88\\x92\"\n\"\\x1b\\x9a\\x9b\\x99\\x99\\x8e\\x84\\x99\\x87\\x8e\\x1f\\x0e\\xef\\xf8\\x61\\x05\\xa0\\x06\\xa1\\x6b\\x1d\\x0b\\x81\\x7b\\xa0\\x1f\\x95\\x83\\xa3\\x70\\x87\\x1a\"\n\"\\x89\\x67\\x05\\x85\\x97\\x82\\x95\\x9c\\x95\\x95\\x9f\\x8f\\x1e\\x9f\\xe5\\x05\\x8d\\x94\\x8b\\x8b\\x8f\\x1a\\x96\\x82\\x94\\x7e\\x7b\\x80\\x0b\\x15\\x4c\\x51\"\n\"\\x56\\x51\\x5f\\xad\\x6a\\xb9\\xc9\\xc5\\xc1\\xc5\\xb5\\x68\\xad\\x5f\\x1f\\x84\\x63\\x15\\xa5\\x9e\\x7b\\x74\\x67\\x68\\x6a\\x65\\x72\\x77\\x9c\\xa0\\xb1\\xac\"\n\"\\xab\\xb3\\x1f\\x0b\\xf7\\x31\\x1d\\x78\\x7d\\x25\\x1d\\xd2\\x06\\x46\\xfb\\xd1\\x05\\x3c\\x21\\x1d\\x0b\\x15\\x94\\x83\\x86\\x8d\\x84\\x1b\\x7b\\x7c\\x7d\\x7c\"\n\"\\x85\\x8e\\x84\\x92\\x85\\x44\\x1d\\x92\\xf0\\x1d\\x37\\x1d\\xf2\\x1d\\x0b\\x15\\xfb\\x32\\xfb\\x01\\x05\\x7b\\x4e\\x1d\\x91\\x0b\\x33\\x1e\\xfb\\x97\\x20\\x1d\"\n\"\\xbb\\x06\\x95\\xfb\\x57\\x15\\xb5\\xf7\\x57\\x05\\xf7\\x34\\x06\\xc8\\xb6\\x6b\\x5c\\x70\\x7a\\x0b\\xf7\\x7f\\xf7\\x2d\\x15\\xfb\\x11\\xfb\\x8c\\x05\\x88\\x84\"\n\"\\x89\\x85\\x85\\x1a\\x7b\\x97\\x7f\\x9c\\x9a\\x94\\x91\\x9f\\x9b\\x1e\\xf7\\x64\\xf7\\xa1\\x05\\x0e\\x8a\\x7c\\x05\\x7b\\x95\\x80\\x9a\\x99\\x94\\x96\\xa1\\x90\"\n\"\\x1e\\x96\\xc0\\x05\\x8d\\x94\\x8c\\x93\\x8e\\x1a\\x9b\\x7b\\x94\\x6e\\x45\\x74\\x7c\\x22\\x36\\x1e\\x0b\\xf8\\x92\\xf7\\xf1\\x15\\xc4\\x6c\\x5b\\xa6\\x46\\x1b\"\n\"\\xfb\\x1b\\xfb\\x13\\xfb\\x0f\\xfb\\x17\\x28\\xd2\\x45\\xef\\xd0\\xc5\\xa5\\xc3\\xc3\\x1f\\x73\\x20\\x0b\\x9f\\x8f\\x92\\xa0\\x1e\\xa2\\x94\\x96\\x97\\x9b\\x1a\"\n\"\\x98\\x82\\x94\\x7e\\x86\\x86\\x8a\\x88\\x85\\x1e\\x80\\x73\\x7a\\x87\\x79\\x1b\\x7b\\x83\\x91\\x99\\x0b\\x82\\x93\\x7f\\x5b\\x1d\\x94\\x83\\x97\\x92\\x92\\x8e\"\n\"\\x92\\x96\\x1e\\x0e\\x06\\x46\\xfb\\xd1\\x05\\x62\\x06\\x75\\x7c\\x7f\\x7a\\x7c\\x94\\x84\\x9f\\x1f\\xf7\\x17\\x06\\xa1\\x9a\\x97\\x9c\\x9a\\x82\\x92\\x78\\x1f\"\n\"\\x64\\x06\\x0b\\xc2\\xf7\\x93\\x05\\x8d\\x93\\x8c\\x94\\x91\\x1a\\xc9\\x51\\xb5\\x36\\x65\\x2b\\x78\\x7d\\x68\\x1e\\x7c\\x85\\x84\\x81\\x7f\\x1a\\x7f\\x94\\x82\"\n\"\\x96\\x0b\\x1a\\x6b\\xa5\\x78\\xb6\\xb9\\xb8\\xa1\\xa1\\x94\\x84\\x93\\x82\\x88\\x87\\x8a\\x88\\x86\\x1e\\x7e\\x71\\xf7\\x45\\x1d\\x0b\\x81\\x82\\x86\\x81\\x82\"\n\"\\x1e\\xfb\\x03\\xfb\\x10\\x05\\x81\\x80\\x88\\x85\\x82\\x1a\\x81\\x64\\x1d\\x91\\x88\\x91\\x1b\\x9c\\x9a\\x99\\x9b\\x90\\x8b\\x8b\\x80\\x98\\x1f\\x0e\\x05\\xfb\"\n\"\\x30\\x21\\x1d\\xf7\\xfe\\x06\\xa2\\x34\\x1d\\xfb\\x2e\\x06\\x0b\\x25\\x1d\\xbb\\x26\\x1d\\x59\\x20\\x1d\\xf7\\x3e\\x2f\\x1d\\x0b\\xf9\\x08\\xf7\\x94\\x15\\xa1\"\n\"\\x9a\\x96\\x9e\\x35\\x1d\\xfc\\xb4\\x29\\x1d\\x0e\\x2b\\x1d\\xc0\\x06\\x47\\xfb\\xd1\\x05\\x59\\x24\\x1d\\x0b\\x86\\x1e\\x6e\\xfb\\x1a\\x05\\xfb\\xc1\\x06\\xf8\"\n\"\\x3b\\xf8\\x53\\x99\\xcc\\x05\\xfb\\xfc\\x06\\x68\\xfb\\x35\\x05\\x89\\x82\\x8b\\x8b\\x0b\\xf7\\x1f\\x1d\\x7f\\x8f\\x95\\x78\\x1f\\x90\\x82\\x88\\x8c\\x86\\x1b\"\n\"\\x7b\\x7d\\x7e\\x7b\\x78\\x0b\\x78\\x1f\\xfb\\x18\\x06\\xbc\\xf7\\x76\\x15\\xbe\\xf7\\x7f\\x05\\xf7\\x24\\x06\\xcd\\xbc\\x63\\x56\\x40\\x34\\x48\\x2b\\x1f\\x0e\"\n\"\\x05\\x62\\x3f\\x1d\\xf7\\x18\\x06\\xa2\\x99\\x95\\x9e\\x9a\\x81\\x92\\x78\\x1f\\x65\\x06\\x0b\\x05\\xb8\\x06\\xa1\\x9a\\x97\\x9d\\x9a\\x82\\x91\\x78\\x1f\\xfb\"\n\"\\x07\\x06\\x74\\x7d\\x39\\x1d\\x97\\x06\\x0b\\xf8\\xd3\\x15\\xfb\\x3c\\xfb\\x32\\xfb\\x46\\xfb\\x52\\xfb\\x17\\xdc\\x2f\\xf7\\x08\\xf7\\x3e\\xf7\\x32\\xf7\\x45\"\n\"\\xf7\\x52\\x0b\\x15\\xfb\\x30\\xfb\\x01\\x05\\x7c\\x84\\x85\\x82\\x7f\\x1a\\x7f\\x95\\x82\\x97\\x8f\\x98\\x90\\x8f\\x90\\x1e\\xf7\\x0e\\xe2\\x0b\\x9a\\x96\\x92\"\n\"\\x9b\\x98\\x1e\\xf7\\x57\\xf7\\x87\\x05\\xd9\\x16\\xfb\\x0c\\xfb\\x73\\x05\\x87\\x84\\x8a\\x86\\x86\\x1a\\x7c\\x0b\\x90\\x8d\\x92\\x95\\x1e\\xf7\\x0f\\xdf\\xe1\"\n\"\\x6e\\x1d\\x9a\\x93\\x89\\x8e\\x0b\\x99\\x1d\\x94\\x8e\\x91\\x91\\x1e\\xa7\\xad\\x95\\x91\\x9d\\x1b\\x96\\x0b\\x15\\x91\\x7f\\x93\\x82\\x77\\x7e\\x7b\\x71\\x51\"\n\"\\xbe\\x65\\xd9\\x0b\\xf7\\x73\\x15\\x98\\x95\\x91\\x93\\x94\\x1a\\x98\\x82\\x94\\x7f\\x82\\x87\\x89\\x83\\x80\\x41\\x1d\\x0b\\x16\\xd4\\x06\\xf7\\x54\\xf8\\x0d\"\n\"\\xa5\\xfc\\x0d\\x05\\xd4\\x06\\xf7\\x41\\xf8\\x94\\x05\\x96\\x06\\xa1\\x9a\\x97\\x0b\\x1b\\x29\\x43\\xd3\\xed\\x99\\x8d\\x99\\x8e\\x9a\\x1f\\x9a\\xd0\\x05\\xf7\"\n\"\\x06\\xa3\\xf7\\x01\\xe8\\xf7\\x00\\x1b\\x0b\\x97\\x1d\\xaf\\x1f\\x96\\x06\\xbb\\xb5\\xb2\\xb7\\xac\\x72\\xa2\\x66\\x1f\\x0e\\x1e\\xfb\\x1c\\x29\\x05\\x7c\\x80\"\n\"\\x87\\x85\\x80\\x1a\\x7f\\x94\\x82\\x98\\x92\\x90\\x8d\\x93\\x97\\x1e\\x0e\\x87\\x1a\\x89\\x6d\\x05\\x84\\x97\\x82\\x94\\x9c\\x96\\x95\\xa0\\x8f\\x1e\\x9a\\xcf\"\n\"\\x05\\x8d\\x94\\x8b\\x8b\\x0b\\x1b\\x62\\x60\\xa0\\xa0\\x89\\x1f\\x89\\xab\\x8b\\x8b\\x87\\x90\\x08\\x91\\x87\\x86\\x8d\\x85\\x1b\\x0e\\xf9\\x56\\xf7\\x19\\x1d\"\n\"\\x05\\x8d\\x94\\x8b\\x8b\\x8f\\x1a\\x96\\x82\\x94\\x7e\\x7a\\x81\\x81\\x76\\x86\\x1e\\x73\\xfb\\x04\\x05\\x0b\\x15\\x84\\x85\\x89\\x84\\x83\\x1f\\x6e\\x67\\x81\"\n\"\\x9f\\x1d\\x6d\\x0b\\x1e\\x27\\xd9\\x15\\x6e\\x72\\x73\\x6f\\x74\\x98\\x7e\\xa2\\xa9\\xa4\\xa3\\xa7\\xa0\\x7c\\x9a\\x75\\x1f\\x0b\\xfb\\x90\\x05\\x80\\x07\\x78\"\n\"\\x96\\x7f\\x9c\\x9f\\x98\\x97\\xa6\\x95\\x1e\\xe5\\xf7\\x93\\x05\\x0e\\x80\\x71\\x68\\x99\\x1d\\x94\\x8e\\x91\\x91\\x1e\\x0b\\x86\\x8b\\x87\\x8a\\x88\\x1f\\x7d\"\n\"\\x4b\\x05\\x99\\x58\\x6c\\x90\\x5e\\x1b\\xfb\\x23\\xfb\\x00\\x40\\x0b\\x25\\x1d\\x97\\x06\\xf7\\x13\\xfb\\x73\\xfb\\x81\\xfb\\x82\\x05\\x7c\\x06\\x74\\x7d\\x80\"\n\"\\x0b\\x9b\\x96\\x96\\x9f\\x90\\x1e\\xa3\\xf7\\x04\\x05\\xf7\\x93\\x06\\xfc\\x3a\\xfc\\x52\\x7d\\x49\\x05\\x0b\\x15\\x6a\\xf7\\x3a\\x1d\\x70\\x1f\\x0e\\x16\\x69\"\n\"\\x6b\\x42\\x1d\\xae\\x8c\\x1d\\x0e\\x1b\\xa5\\xa4\\x97\\xa9\\xb0\\x1f\\x9e\\x9b\\x8f\\x91\\x95\\x1a\\x97\\x81\\x94\\x7f\\x1e\\x0e\\x8c\\x8f\\x8f\\x1a\\x94\\x86\"\n\"\\x92\\x80\\x91\\x1e\\xfb\\xed\\xf7\\x50\\xf7\\xee\\xf7\\x50\\x05\\x0b\\x9a\\x83\\x91\\x77\\x1f\\x55\\x06\\xf7\\xfb\\xf8\\x87\\x05\\x95\\x2f\\x1d\\x9a\\x0b\\xef\"\n\"\\xf7\\x66\\x15\\xf7\\x3d\\xfb\\x59\\x05\\x82\\x93\\x92\\x87\\x93\\x1b\\x9b\\x99\\x99\\x9b\\x0b\\xa6\\x06\\xa3\\x97\\x86\\x81\\x7c\\x78\\x7f\\x71\\x7c\\x0b\\xf7\"\n\"\\x2e\\x1d\\x95\\x8c\\x8b\\x0b\\x08\\x78\\x93\\x7d\\x9b\\x9a\\x1a\\xb4\\xcc\\xae\\xd7\\xaf\\xaa\\x84\\x7f\\x9e\\x1e\\x94\\x0b\\x15\\xfb\\x3c\\xf7\\x59\\x05\\x94\"\n\"\\x83\\x84\\x8f\\x83\\x1b\\x7b\\x7d\\x7d\\x7b\\x86\\x8c\\x0b\\x15\\x3b\\x40\\x42\\x3d\\x51\\xb5\\x61\\xc5\\xdc\\xd6\\xd4\\xd9\\xc5\\x61\\xb5\\x50\\x1f\\x0b\\x15\"\n\"\\xfb\\x32\\xf7\\x40\\x1d\\x91\\x91\\x0b\\x93\\x9f\\x72\\x1e\\x90\\x85\\x88\\x8c\\x86\\x1b\\x7e\\x80\\x80\\x7e\\x74\\xc5\\x6f\\xbb\\x0b\\x95\\x83\\x9d\\x1f\\xf7\"\n\"\\x20\\x06\\xa3\\x99\\x96\\x9d\\x99\\x81\\x93\\x78\\x1f\\x5c\\x06\\x0b\\x88\\x1a\\x7e\\x93\\x84\\x98\\x9c\\x96\\x95\\x9f\\x90\\x1e\\xad\\xf7\\x22\\x05\\x0e\\x15\"\n\"\\x9b\\x98\\x8e\\x8f\\x96\\x1a\\x97\\x82\\x94\\x7e\\x84\\x83\\x88\\x84\\x82\\x1e\\x0b\\xfb\\x17\\xfb\\x2f\\xfb\\x15\\x2c\\x4b\\xd4\\xf7\\x00\\xf7\\x32\\xf7\\x16\"\n\"\\xf7\\x2a\\x0b\\x49\\x4c\\x52\\x4e\\x73\\x93\\x7a\\x9f\\x7b\\x1e\\x5e\\x71\\x74\\x67\\x62\\x1a\\x0b\\xf7\\x5d\\x1d\\xfc\\xce\\x06\\x76\\x80\\x82\\x0b\\x15\\xfb\"\n\"\\x33\\xf7\\x40\\x1d\\x0b\\x41\\x1d\\x7d\\x81\\x86\\x84\\x80\\x1a\\x7f\\x94\\x82\\x98\\x92\\x0b\\xbf\\x05\\xb9\\x95\\xae\\xae\\xae\\x1b\\x99\\x9f\\x87\\x85\\x9f\"\n\"\\x1f\\x87\\x0b\\x82\\x92\\x77\\x1f\\xfb\\x0e\\x06\\xab\\xf7\\x2a\\x05\\x8d\\x91\\x8b\\x8d\\x0b\\x97\\x1d\\xb0\\x1f\\x95\\x06\\xbb\\xb5\\xb2\\x0b\\x1b\\x4c\\x4d\"\n\"\\x52\\x42\\x7b\\x1f\\x80\\x55\\x05\\x42\\x06\\x74\\x7d\\x80\\x0b\\x77\\x1f\\x58\\x06\\xf7\\x57\\xf7\\x58\\xf7\\x04\\xfb\\x58\\x05\\x56\\x06\\x0b\\xb8\\xba\\x1a\"\n\"\\xae\\x80\\xa8\\x77\\xa1\\x1e\\xab\\x6e\\x45\\x9f\\x3a\\x1b\\x0b\\x94\\x82\\x98\\x9b\\x96\\x95\\x9f\\x8f\\x1e\\x0b\\x7f\\x7a\\x70\\x4f\\xbe\\x63\\xd8\\xbf\\xb9\"\n\"\\x9c\\xa9\\xad\\x1e\\xa4\\x0b\\x05\\x8a\\x86\\x6c\\x1d\\x9b\\x96\\x95\\x0b\\x06\\x76\\x33\\x05\\x8a\\x86\\x8a\\x87\\x87\\x1a\\x7e\\x93\\x84\\x98\\x0b\\x15\\x7e\"\n\"\\x87\\x87\\x75\\x7a\\x1f\\x6a\\x73\\x75\\x7b\\x75\\x1b\\x7b\\x0b\\x25\\x1d\\xe5\\x06\\x27\\xfc\\x61\\x05\\x2f\\x06\\x74\\x7d\\x0b\\x6a\\x6b\\x6b\\x72\\x9f\\x77\"\n\"\\xa3\\xae\\xac\\xaa\\xac\\xa5\\x78\\x9e\\x0b\\xac\\x1a\\xbb\\x81\\xac\\x76\\xa2\\x1e\\xa1\\x77\\x6c\\x98\\x6b\\x1b\\x0b\\xf7\\x47\\x1d\\x0e\\x06\\x33\\x66\\x84\"\n\"\\x71\\x64\\x1f\\x47\\x5e\\x68\\x40\\x27\\x1a\\x0b\\xf7\\x35\\xf7\\x43\\xf7\\x36\\x05\\x99\\x98\\x8e\\x8f\\x95\\x1a\\x0b\\x15\\xfb\\x0b\\xfb\\x73\\x05\\x88\\x85\"\n\"\\x89\\x85\\x86\\x1a\\x7c\\x0b\\xfb\\x01\\x05\\x7b\\x81\\x86\\x85\\x7f\\x1a\\x7f\\x94\\x82\\x98\\x0b\\x9f\\x1a\\x97\\x82\\x94\\x7e\\x7c\\x81\\x83\\x79\\x85\\x1e\"\n\"\\x64\\x0b\\x25\\x06\\x74\\x7d\\x80\\x79\\x7b\\x93\\x85\\xa0\\x1f\\xba\\x06\\x0b\\xf7\\x1e\\x06\\xc0\\xac\\x7d\\x6a\\xa4\\x1f\\xa2\\x6d\\x98\\x64\\x0b\\x1b\\x9b\"\n\"\\x9b\\x9a\\x99\\x93\\x8a\\x8d\\x80\\x95\\x1f\\x0e\\x86\\x89\\x79\\x1b\\x76\\x80\\x91\\x97\\x0b\\xf7\\x4f\\x1d\\x30\\x0b\\x88\\x1a\\xf7\\x57\\x1d\\x0b\\x8b\\x8b\"\n\"\\x8e\\x1a\\x97\\x82\\x93\\x7e\\x7a\\x81\\x81\\x77\\x0b\\x15\\x4e\\x3b\\x53\\x74\\x43\\x1b\\x52\\x6a\\xa2\\xb4\\xcc\\x0b\\x15\\x4d\\x51\\x55\\x51\\x60\\xad\\x6a\"\n\"\\xb9\\xca\\xc5\\xc1\\x0b\\x1f\\xf7\\x49\\xab\\x15\\xdf\\xc4\\x57\\x3f\\x28\\x24\\x2d\\x0b\\x9d\\x35\\x1d\\xfc\\x26\\x06\\x74\\x7d\\x80\\x0b\\x77\\x1f\\x47\\x06\"\n\"\\xe8\\xf8\\x42\\xf7\\x54\\xfc\\x75\\x05\\x0b\\x7c\\x9a\\x75\\x1f\\xf7\\x62\\x16\\x6f\\x71\\x72\\x70\\x76\\x0b\\x7d\\x08\\x9c\\x80\\x97\\x78\\x7b\\x1a\\x57\\x3e\"\n\"\\x5f\\x0b\\x8b\\x82\\x6d\\x69\\xfb\\x08\\x18\\x88\\x81\\x8a\\x84\\x0b\\x15\\x43\\x48\\x49\\x45\\x57\\xb1\\x65\\xbf\\xd4\\xce\\x0b\\x1f\\xa7\\xa2\\x9d\\xa7\\xa0\"\n\"\\x1a\\x98\\x82\\x93\\x7c\\x0b\\x15\\x45\\x06\\x73\\xfb\\x05\\x05\\xd0\\x06\\x0e\\x7e\\x93\\x84\\x98\\x9c\\x96\\x96\\x0b\\x8a\\x85\\x8a\\x87\\x88\\x1a\\x80\\x0b\"\n\"\\x9a\\x1b\\x93\\x92\\x92\\x94\\x92\\x0b\\x7e\\x96\\x80\\x98\\x99\\x93\\x93\\x9e\\x8f\\x1e\\x0b\\x06\\xa0\\x96\\x95\\xa0\\x96\\x83\\x90\\x7b\\x1f\\x0b\\x06\\xa1\"\n\"\\x96\\x94\\x9c\\x9b\\x80\\x94\\x75\\x1f\\x0b\\x06\\xa2\\x99\\x95\\x9d\\x9a\\x81\\x93\\x79\\x1f\\x0b\\x06\\x74\\x7d\\x81\\x78\\x7c\\x95\\x84\\x9e\\x1f\\x0b\\x8e\"\n\"\\x1a\\x97\\x82\\x94\\x7e\\x7b\\x80\\x81\\x77\\x0b\\x15\\xa1\\x96\\x94\\x9c\\x9b\\x80\\x94\\x75\\x1f\\x0b\\x15\\x7b\\x7f\\x81\\x7d\\x80\\x92\\x85\\x99\\x1f\\x0b\"\n\"\\x97\\x96\\x98\\x96\\x84\\x91\\x7f\\x1f\\x47\\x06\\x0b\\x6a\\x80\\x7a\\x49\\x7f\\x1e\\x67\\xfb\\x66\\x05\\x0b\\xf0\\xd0\\xe4\\xa4\\x7d\\xa7\\x76\\x9b\\x1f\\x6f\"\n\"\\x0b\\x82\\x98\\x92\\x8b\\x8b\\x95\\x9c\\x1e\\x0e\\x01\\x00\\x01\\xe3\\x01\\x05\\x00\\x01\\x0a\\x02\\x01\\x40\\x03\\x01\\x87\\xff\\x02\\x87\\xa0\\x02\\x8e\\x02\"\n\"\\x00\\x01\\x00\\x02\\x00\\x03\\x00\\x42\\x00\\x61\\x00\\xf1\\x01\\xc7\\x02\\x27\\x02\\xa4\\x02\\xab\\x02\\xf9\\x03\\x40\\x03\\xad\\x03\\xe1\\x03\\xe3\\x03\\xe5\"\n\"\\x03\\xec\\x04\\x17\\x04\\x7a\\x04\\xa9\\x05\\x04\\x05\\x74\\x05\\xb6\\x06\\x1d\\x06\\x87\\x06\\xbf\\x07\\x1b\\x07\\x8b\\x07\\xab\\x07\\xbe\\x07\\xf7\\x08\\x12\"\n\"\\x08\\x5c\\x08\\xba\\x09\\x5c\\x09\\x5f\\x09\\x83\\x09\\x9e\\x09\\xa1\\x09\\xa4\\x09\\xe1\\x09\\xe4\\x09\\xe7\\x09\\xea\\x09\\xed\\x09\\xf0\\x09\\xf3\\x0a\\x30\"\n\"\\x0a\\x39\\x0a\\x3c\\x0a\\x57\\x0a\\xf2\\x0a\\xf5\\x0a\\xf8\\x0a\\xfb\\x0a\\xfe\\x0b\\x2b\\x0b\\x5e\\x0b\\x9f\\x0b\\xa2\\x0b\\xb2\\x0b\\xd1\\x0b\\xfc\\x0c\\x20\"\n\"\\x0c\\x54\\x0c\\x5a\\x0c\\x74\\x0c\\x77\\x0c\\xbd\\x0c\\xc0\\x0c\\xe1\\x0c\\xe4\\x0d\\x2f\\x0d\\x39\\x0d\\x3c\\x0d\\x44\\x0d\\x48\\x0d\\x4b\\x0d\\x4e\\x0d\\xd8\"\n\"\\x0d\\xdb\\x0d\\xde\\x0e\\x01\\x0e\\x5d\\x0e\\x60\\x0e\\x7e\\x0e\\x81\\x0e\\x8f\\x0e\\xb9\\x0e\\xbc\\x0e\\xdc\\x0e\\xdf\\x0e\\xf8\\x0f\\x73\\x0f\\x7e\\x0f\\xf8\"\n\"\\x10\\x25\\x10\\x67\\x10\\xee\\x11\\x78\\x11\\x7a\\x11\\xf4\\x12\\x5d\\x13\\x2b\\x13\\xc9\\x13\\xd2\\x14\\x05\\x14\\x4e\\x14\\x66\\x14\\x6b\\x14\\xb8\\x14\\xfa\"\n\"\\x15\\x0a\\x15\\x22\\x15\\x53\\x15\\x55\\x15\\xc5\\x15\\xdc\\x15\\xde\\x15\\xfa\\x16\\x16\\x16\\x3e\\x16\\x4d\\x16\\x8c\\x16\\xee\\x16\\xf2\\x16\\xf8\\x16\\xfe\"\n\"\\x17\\x0c\\x17\\x12\\x17\\x18\\x17\\x1e\\x17\\x22\\x17\\x2d\\x17\\x3d\\x17\\x43\\x17\\x57\\x17\\x5d\\x17\\x5f\\x17\\x62\\x17\\xd7\\x18\\x36\\x18\\x39\\x18\\xb2\"\n\"\\x18\\xdd\\x18\\xe0\\x18\\xe3\\x19\\x3b\\x19\\x43\\x19\\xc8\\x1a\\x48\\x1a\\x7e\\x1a\\x9e\\x1a\\xf3\\x1b\\x92\\x1b\\x94\\x1c\\x14\\x1c\\x60\\x1c\\x94\\x1d\\x3a\"\n\"\\x1d\\x69\\x1d\\x9c\\x1d\\xc7\\x1d\\xe7\\x1e\\x80\\x1e\\xdb\\x1f\\x49\\x1f\\x57\\x1f\\xd2\\x20\\x34\\x20\\x60\\x20\\xdc\\x20\\xfe\\x21\\x17\\x21\\x24\\x21\\x3f\"\n\"\\x21\\x62\\x21\\x9a\\x21\\xfc\\x22\\x0e\\x22\\x28\\x22\\x30\\x22\\x38\\x22\\x40\\x22\\x69\\x22\\x89\\x22\\xa9\\x22\\xe6\\x23\\x0b\\x23\\x26\\x23\\x33\\x23\\x55\"\n\"\\x23\\xc7\\x24\\x3d\\x24\\x44\\x24\\x4b\\x24\\x5b\\x24\\x6b\\x24\\x73\\x24\\x88\\x24\\x96\\x24\\xb3\\x24\\xc3\\x25\\x1b\\x25\\x3c\\x25\\x53\\x25\\xe3\\x26\\x2e\"\n\"\\x26\\x35\\x26\\x45\\x26\\x8c\\x26\\xa9\\x26\\xb7\\x26\\xc5\\x26\\xcc\\x26\\xee\\x27\\x85\\x27\\xa7\\x27\\xb8\\x27\\xcb\\x27\\xd2\\x27\\xf4\\x28\\x5f\\x28\\x71\"\n\"\\x28\\x87\\x28\\x9a\\x28\\xb3\\x28\\xbb\\x28\\xd3\\x29\\x0e\\x29\\x7f\\x29\\xa6\\x29\\xfc\\x2a\\x56\\x2a\\xb4\\x2b\\x07\\x2b\\xc1\\x2c\\x19\\x2c\\x2b\\x2c\\x33\"\n\"\\x2c\\x35\\x2c\\x7b\\x2c\\x83\\x2c\\xc0\\x2c\\xdd\\x2c\\xdf\\x2c\\xe6\\x2c\\xed\\x2c\\xf8\\x2d\\x00\\x2d\\x02\\x2d\\x09\\x2d\\x0b\\x2d\\x26\\x2d\\x2e\\x2d\\x36\"\n\"\\x2d\\x3d\\x2d\\x45\\x2d\\x8a\\x2d\\xd6\\x2d\\xd8\\x2e\\x53\\x2e\\x55\\x2e\\xac\\x2f\\x58\\x2f\\x5c\\x2f\\x72\\x2f\\x85\\x2f\\x98\\x2f\\xa5\\x2f\\xfc\\x30\\x26\"\n\"\\x30\\x8a\\x30\\x91\\x30\\x98\\x30\\xa0\\x30\\xd2\\x30\\xd4\\x30\\xfd\\x31\\x26\\x31\\x2e\\x31\\x39\\x31\\x76\\x31\\x7e\\x31\\x86\\x31\\x95\\x31\\xba\\x31\\xc1\"\n\"\\x31\\xdd\\x31\\xdf\\x31\\xe7\\x31\\xee\\x31\\xf5\\x31\\xfe\\x32\\x05\\x32\\x0c\\x32\\x14\\x32\\xad\\x32\\xaf\\x33\\x23\\x33\\x2b\\x33\\x97\\x33\\x99\\x34\\x0a\"\n\"\\x34\\x12\\x34\\x19\\x34\\x20\\x34\\x22\\x34\\x29\\x34\\x61\\x34\\x68\\x34\\x70\\x34\\xc1\\x34\\xc3\\x35\\x5b\\x35\\x62\\x35\\x97\\x36\\x33\\x36\\x3b\\x36\\x42\"\n\"\\x36\\x49\\x36\\x86\\x36\\x89\\x36\\xec\\x37\\x37\\x37\\x3f\\x37\\x46\\x37\\x58\\x37\\x6c\\x37\\x87\\x37\\xac\\x38\\x71\\x38\\x79\\x38\\xa3\\x38\\xbc\\x38\\xc5\"\n\"\\x38\\xdc\\x38\\xe4\\x38\\xf5\\x38\\xf7\\x38\\xf9\\x39\\x1a\\x39\\x1c\\x39\\x20\\x39\\x8e\\x39\\x90\\x3a\\x16\\x3a\\x63\\x3a\\xff\\x3b\\x02\\x3b\\x48\\x3b\\x4b\"\n\"\\x3b\\xa2\\x3b\\xa4\\x3b\\xa6\\x3b\\xa8\\x3b\\xaa\\x3b\\xac\\x3b\\xe4\\x3b\\xe6\\x3b\\xe9\\x3c\\x87\\x3c\\x89\\x3c\\xa8\\x3c\\xd2\\x3c\\xe0\\x3d\\x00\\x3d\\x53\"\n\"\\x3d\\x99\\x3d\\xac\\x3e\\x34\\x3e\\xb2\\x3f\\x19\\x3f\\x31\\x3f\\xba\\x40\\x18\\x40\\xb0\\x41\\x08\\x41\\x0a\\x41\\x24\\x41\\x60\\x41\\xe0\\x42\\x3d\\x42\\xbe\"\n\"\\x42\\xd0\\x43\\x03\\x43\\x6d\\x43\\xe1\\x44\\x37\\x44\\x3a\\x44\\xa8\\x44\\xdc\\x45\\x2d\\x46\\x01\\x46\\x37\\x46\\x3a\\x46\\x68\\x46\\x6a\\x46\\xcb\\x47\\x10\"\n\"\\x47\\x56\\x47\\x5b\\x47\\x80\\x47\\xc7\\x48\\x1b\\x48\\x65\\x48\\x68\\x49\\x15\\x49\\x23\\x49\\x3b\\x49\\x7f\\x49\\x8d\\x49\\xab\\x4a\\x05\\x4a\\x5b\\x4a\\x8e\"\n\"\\x4b\\x14\\x4b\\x74\\x4b\\xd6\\x4c\\x0c\\x4c\\x70\\x4c\\x76\\x4c\\xe9\\x4d\\x51\\x4d\\x59\\x4d\\x92\\x4d\\x96\\x4e\\x0b\\x4e\\x81\\x4e\\xa4\\x4e\\xa9\\x4f\\x2d\"\n\"\\x4f\\x4b\\x4f\\x4d\\x4f\\x9c\\x50\\x7e\\x51\\x1c\\x51\\xbb\\x52\\x31\\x52\\xa5\\x52\\xac\\x52\\xe0\\x53\\x14\\x53\\x75\\x53\\xe0\\x53\\xfb\\x54\\x4a\\x54\\x90\"\n\"\\x54\\xd6\\x54\\xe2\\x55\\x2f\\x55\\x7d\\x55\\xd4\\x56\\x5e\\x56\\x65\\x56\\x7c\\x56\\xa1\\x56\\xa8\\x56\\xf7\\x57\\x6d\\x57\\xd9\\x58\\x1f\\x58\\x7c\\x58\\xe4\"\n\"\\x59\\x08\\x59\\x0e\\x59\\x16\\x59\\x2e\\x59\\x35\\x59\\x74\\x59\\x7b\\x59\\xd4\\x5a\\x10\\x5a\\x85\\x5b\\x13\\x5b\\x4b\\x5b\\xa0\\x5b\\xd5\\x5c\\x1a\\x5c\\x9b\"\n\"\\x5c\\xb5\\x5c\\xfb\\x5d\\xf2\\x5e\\x34\\x5e\\x3b\\x5e\\x58\\x5e\\x73\\x5e\\x83\\x5e\\xe5\\x5f\\x55\\x5f\\x5d\\x5f\\x93\\x5f\\xb7\\x5f\\xe5\\x60\\x34\\x60\\x3c\"\n\"\\x60\\xa7\\x60\\xf7\\x61\\x25\\x61\\x53\\x61\\xb4\\x62\\x1b\\x62\\x58\\x62\\x5b\\x62\\x8c\\x62\\xdb\\x62\\xe5\\x62\\xef\\x63\\x0a\\x63\\x55\\x63\\x5c\\x63\\xa5\"\n\"\\x63\\xad\\x63\\xd9\\x63\\xe6\\x63\\xed\\x64\\x09\\x64\\x5b\\x65\\x1b\\x65\\x5c\\x65\\xd6\\x65\\xdb\\x66\\x1d\\x66\\xa6\\x66\\xc1\\x67\\x0b\\x67\\x13\\x67\\x1a\"\n\"\\x67\\xa3\\x68\\x06\\x68\\x4f\\x68\\x75\\x68\\x7c\\x68\\x84\\x68\\x87\\x68\\x9e\\x68\\xa3\\x69\\x04\\x69\\x10\\x69\\x1c\\x69\\x7f\\x6a\\x2c\\x6a\\xae\\x6a\\xd4\"\n\"\\x6b\\x0a\\x6b\\x5f\\x6b\\xb2\\x6c\\x2c\\x6c\\xb4\\x6c\\xbc\\x6c\\xf2\\x6c\\xf9\\x6d\\x00\\x6d\\x19\\x6d\\x6c\\x6d\\x74\\x6d\\xaf\\x6d\\xb7\\x6d\\xbf\\x6d\\xd8\"\n\"\\x6e\\x13\\x6e\\x9f\\x6e\\xe5\\x6f\\x61\\x6f\\xdb\\x70\\x28\\x70\\xad\\x70\\xb9\\x70\\xda\\x71\\x39\\x71\\x4e\\x71\\x56\\x71\\x5d\\x71\\x64\\x71\\x7e\\x71\\x7f\"\n\"\\x71\\x81\\x71\\x89\\x71\\x91\\x71\\x97\\x71\\x99\\x71\\xb6\\x72\\x2d\\x72\\x8e\\x73\\x12\\x73\\x3d\\x73\\x69\\x73\\xb3\\x73\\xdb\\x74\\x02\\x74\\x42\\x74\\x9c\"\n\"\\x75\\x7e\\x76\\x25\\x76\\x66\\x76\\xd7\\x77\\x6b\\x77\\xca\\x78\\x73\\x78\\x9e\\x78\\xa0\\x78\\xc1\\x78\\xfe\\x79\\x23\\x79\\x70\\x79\\x73\\x79\\x98\\x79\\xd4\"\n\"\\x7a\\x08\\x7a\\x1e\\x7a\\x35\\x7a\\x46\\x7a\\x5c\\x7a\\xaa\\x7b\\x1c\\x7b\\x69\\x7b\\x7f\\x7b\\x81\\x7b\\xaa\\x7b\\xd3\\x7c\\x2c\\x7c\\x33\\x7c\\x3b\\x7c\\x8f\"\n\"\\x7c\\x91\\x7c\\x99\\x7c\\xa1\\x7c\\xa7\\x7d\\x82\\x7d\\xf2\\x7d\\xf4\\x7d\\xf6\\x7e\\x0d\\x7e\\x2b\\x7e\\x86\\x7e\\x9c\\x7e\\xfd\\x7f\\x2a\\x7f\\x5a\\x7f\\xaa\"\n\"\\x7f\\xbe\\x7f\\xf0\\x80\\x02\\x80\\x0e\\x80\\x40\\x80\\x5e\\x80\\xa6\\x80\\xab\\x80\\xb0\\x81\\x4a\\x81\\x5a\\x81\\x78\\x81\\x89\\x81\\x91\\x82\\x03\\x0e\\x0e\"\n\"\\xf8\\x63\\xf8\\xc0\\x15\\x8f\\x97\\x8d\\x96\\x8f\\x1a\\x9e\\x7a\\x99\\x76\\x6c\\x78\\x78\\x64\\x85\\x1e\\x58\\xfb\\xd4\\x05\\x8a\\x86\\x8b\\x86\\x88\\x1a\\x80\"\n\"\\x95\\x82\\x96\\x9b\\x28\\x1d\\x4c\\xfb\\x22\\x15\\x65\\x6a\\x6d\\x68\\x71\\x9f\\x79\\xa8\\x1f\\x97\\x06\\xb2\\xac\\xa9\\xae\\xa5\\x77\\x9d\\x6d\\x1f\\x0e\\xf7\"\n\"\\xa2\\xf8\\xef\\x15\\x76\\xfb\\x90\\x05\\x80\\x07\\x78\\x96\\x7f\\x9c\\xa0\\x97\\x97\\xa6\\x95\\x1e\\xe5\\xf7\\x93\\x05\\xb2\\x16\\x77\\xf7\\x14\\x1d\\xf8\\x6a\"\n\"\\xf7\\xf1\\x15\\xe2\\x06\\x53\\x0a\\x3a\\x06\\xc8\\xf7\\x66\\x05\\x8c\\x91\\x8c\\x90\\x8e\\x28\\x0a\\x7c\\x81\\x82\\x77\\x85\\x1e\\x4d\\xfb\\x6c\\x05\\x3b\\x06\"\n\"\\xc8\\xf7\\x66\\x05\\x8e\\x95\\x8b\\x8c\\x8f\\x1a\\x96\\x81\\x94\\x7f\\x7c\\x81\\x82\\x77\\x85\\x1e\\x4d\\xfb\\x6c\\x05\\x3e\\x32\\x1d\\xd2\\x06\\x6a\\xfb\\x05\"\n\"\\x05\\x36\\x21\\x1d\\xdb\\x06\\x4e\\xfb\\x67\\x05\\x88\\x81\\x8b\\x8b\\x86\\x1a\\x80\\x95\\x82\\x97\\x9a\\x96\\x95\\x9e\\x90\\x1e\\xca\\xf7\\x6d\\x05\\xda\\x06\"\n\"\\x4f\\xfb\\x67\\x05\\x89\\x84\\x8a\\x88\\x87\\x1a\\x7f\\x94\\x82\\x98\\x9a\\x95\\x94\\x9f\\x91\\x1e\\xc9\\xf7\\x6d\\x05\\xda\\x06\\xa1\\x34\\x1d\\x43\\x06\\x78\"\n\"\\xf7\\x05\\x15\\x6a\\xfb\\x05\\x05\\x3b\\x06\\xac\\xf7\\x05\\x05\\x0e\\xf8\\x23\\xf8\\xd3\\x15\\x2a\\x7f\\x3a\\x3f\\x3b\\x1a\\x6e\\x97\\x70\\x9f\\x7c\\x1e\\xa2\"\n\"\\x7a\\xa6\\x81\\xca\\x7f\\xcb\\x7e\\x9a\\x87\\x9d\\x7e\\x08\\x99\\x82\\x94\\x78\\x79\\x1a\\x49\\x40\\x56\\x30\\x5e\\x68\\x95\\x9f\\x76\\x1e\\x7e\\x97\\x80\\x98\"\n\"\\x8e\\x1a\\x8d\\xa9\\x05\\x91\\x7f\\x94\\x82\\x7b\\x80\\x81\\x76\\x87\\x1e\\x7a\\x3e\\x05\\x8a\\x86\\x8a\\x86\\x88\\x1a\\x80\\x95\\x82\\x97\\x9b\\x95\\x95\\x9f\"\n\"\\x90\\x1e\\x8c\\x90\\x9d\\x75\\xbc\\x76\\xb1\\x89\\x19\\x74\\xfb\\x03\\x05\\x8a\\x87\\x8a\\x86\\x88\\x1a\\x7f\\x94\\x82\\x98\\x9b\\x28\\x1d\\xa3\\xf7\\x05\\x05\"\n\"\\xf7\\x0a\\x97\\xdf\\xd5\\xe6\\x1a\\xa8\\x7e\\xa8\\x77\\x9b\\x1e\\x73\\x9e\\x72\\x93\\x44\\x99\\x51\\x97\\x7a\\x90\\x7a\\x96\\x08\\x7e\\x93\\x83\\x9c\\x9c\\x1a\"\n\"\\xc4\\xd1\\xc2\\xd5\\xaa\\xad\\x81\\x7c\\x9e\\x1e\\x96\\x83\\x94\\x7e\\x85\\x1a\\x8a\\x78\\x05\\x83\\x96\\x82\\x95\\x9c\\x28\\x1d\\x98\\xc5\\x05\\x8d\\x95\\x8b\"\n\"\\x8b\\x8e\\x1a\\x96\\x82\\x94\\x7e\\x7e\\x80\\x82\\x7c\\x86\\x1e\\x71\\xa2\\x75\\x94\\x64\\x90\\x95\\xb7\\x18\\x8d\\x92\\x8b\\x8e\\x8e\\x28\\x0a\\x7b\\x80\\x81\"\n\"\\x75\\x87\\x1e\\x0e\\xf8\\x30\\xf7\\x83\\xf7\\x23\\x1d\\x83\\x60\\x15\\xb1\\xa6\\x71\\x64\\x58\\x59\\x5a\\x58\\x63\\x70\\xa5\\xb2\\xbf\\xbc\\xbb\\xc1\\x1f\\x67\"\n\"\\xf8\\x32\\xf7\\x23\\x1d\\x82\\x60\\x15\\xb2\\xa6\\x71\\x64\\x59\\x59\\x59\\x58\\x63\\x70\\xa5\\xb2\\xbf\\xbc\\xbb\\xc0\\x1f\\xf7\\x66\\xfb\\x76\\x15\\x9b\\x8f\"\n\"\\x93\\x94\\x97\\x1a\\x95\\x84\\x93\\x82\\x88\\x87\\x8a\\x89\\x85\\x1e\\xfc\\x2a\\xfb\\x0d\\x05\\x7c\\x87\\x82\\x82\\x7e\\x1a\\x82\\x93\\x83\\x93\\x8e\\x90\\x8c\"\n\"\\x8d\\x91\\x1e\\x0e\\xf8\\x1a\\x16\\xc8\\x23\\x1d\\x69\\x06\\x7b\\xad\\xa3\\xa5\\xa7\\xb7\\xa4\\xbc\\x19\\x94\\x2e\\x0a\\x5d\\x06\\x88\\x84\\x7a\\x64\\x71\\x5f\"\n\"\\x75\\x6d\\x19\\x44\\xf7\\x39\\x05\\x7b\\xb1\\x84\\xa4\\x9b\\x1a\\xb8\\xbb\\xb8\\xba\\xa3\\x98\\x85\\x76\\x9e\\x1e\\xb2\\x9d\\x05\\x9c\\x93\\x92\\x94\\x98\\x1a\"\n\"\\x96\\x82\\x95\\x80\\x86\\x87\\x8a\\x86\\x80\\x1e\\x83\\x87\\x05\\x99\\x76\\x79\\x90\\x74\\x1b\\x3c\\x3e\\x44\\x44\\x76\\x8e\\x81\\xa2\\x53\\x1f\\x38\\x72\\x4f\"\n\"\\x40\\x3c\\x1a\\x41\\xbe\\x55\\xd1\\xb7\\xb6\\x9f\\xb2\\xaf\\x1e\\x77\\xba\\x15\\x69\\x6f\\x67\\x76\\x6c\\x1b\\x5f\\x6a\\xaf\\xbb\\xc6\\xb8\\xc1\\xc7\\x99\\x1f\"\n\"\\x0e\\xf7\\xe0\\xf8\\xef\\xc6\\x0a\\x0e\\xf8\\xcb\\xf8\\xef\\x15\\x7c\\x79\\x7a\\x52\\x5e\\x1f\\xfb\\x05\\xfb\\x27\\x5d\\xfb\\x04\\xfb\\x16\\x1a\\x5a\\x90\\x69\"\n\"\\x99\\x5a\\x1e\\x9b\\x4f\\x99\\x68\\x99\\x73\\x08\\x84\\x8f\\x92\\x87\\x92\\x1b\\x9b\\x9a\\x99\\x99\\x8e\\x8b\\x8d\\x87\\x96\\x1f\\x72\\xd4\\x7e\\xcf\\xcb\\x1a\"\n\"\\xf7\\x22\\xc2\\xf7\\x19\\xf7\\x0e\\xf7\\x30\\x1e\\x96\\x9a\\x8c\\x8c\\x93\\x1a\\x97\\x81\\x94\\x7f\\x1e\\x0e\\xf7\\xbc\\xf8\\xef\\x15\\x7b\\x7c\\x7d\\x7d\\x87\"\n\"\\x8c\\x89\\x8e\\x81\\x1f\\xa3\\x4d\\x9a\\x3b\\x4c\\x1a\\xfb\\x21\\x53\\xfb\\x1e\\xfb\\x0d\\xfb\\x2c\\x1e\\x80\\x7c\\x8a\\x8a\\x83\\x1a\\x7f\\x95\\x82\\x97\\x9a\"\n\"\\x9d\\x9c\\xc4\\xb8\\x1e\\xf7\\x05\\xf7\\x26\\xb9\\xf7\\x05\\xf7\\x15\\x1a\\xdc\\x70\\xf7\\x00\\x66\\xca\\x1e\\x92\\x87\\x84\\x8f\\x84\\x1b\\x0e\\xf8\\x05\\xf8\"\n\"\\x4e\\x15\\xfb\\x0a\\xb2\\x05\\x8d\\x83\\x88\\x8c\\x87\\x1b\\x7b\\x7d\\x7d\\x7c\\x7f\\x90\\x86\\x9a\\x87\\x1f\\xf7\\x08\\x64\\x28\\x23\\x05\\x7f\\x7f\\x89\\x87\"\n\"\\x82\\x1a\\x7f\\x94\\x82\\x98\\x94\\x93\\x8f\\x96\\x95\\x1e\\xef\\xf4\\xc2\\x23\\x05\\x7f\\x91\\x90\\x87\\x95\\x1b\\x9b\\x9a\\x99\\x99\\x8f\\x89\\x92\\x88\\x91\"\n\"\\x1f\\x55\\xf3\\xf7\\x1c\\xb3\\x05\\xa0\\x91\\x94\\x94\\x9a\\x1a\\x96\\x82\\x95\\x80\\x87\\x83\\x8a\\x89\\x85\\x1e\\xfb\\x19\\x63\\xa6\\xf7\\x13\\x05\\x8c\\x91\"\n\"\\x8c\\x8f\\x8f\\x6f\\x1d\\x81\\x76\\x87\\x1e\\x0e\\xf8\\x10\\xf7\\x94\\x15\\xf7\\x44\\x23\\x1d\\xfb\\x42\\x06\\xb4\\xf7\\x52\\x05\\x8d\\x94\\xf7\\x13\\x0a\\x78\"\n\"\\x87\\x1e\\x61\\xfb\\x55\\x05\\xfb\\x44\\x21\\x1d\\xf7\\x42\\x06\\x61\\xfb\\x53\\x8a\\x7e\\x05\\x80\\x95\\x82\\x97\\x9b\\x95\\x95\\x9f\\x90\\x1e\\x0e\\xe7\\x1d\"\n\"\\xc4\\x0a\\xf7\\xd3\\xf7\\x10\\xf7\\x0c\\x1d\\xf9\\x01\\xf9\\x03\\x15\\x93\\x96\\x8d\\x8f\\x91\\x1a\\x97\\x81\\x94\\x7f\\x7f\\x84\\x86\\x7d\\x80\\x1e\\xfc\\x70\"\n\"\\xfd\\x3f\\x05\\x85\\x82\\x88\\x84\\x86\\x1a\\x7f\\x95\\x82\\x97\\x97\\x92\\x90\\x99\\x95\\x1e\\x0e\\xf8\\xcb\\xf7\\xf1\\x15\\x91\\xa9\\x8f\\xaa\\xa7\\x1a\\xf7\"\n\"\\x04\\x55\\xcd\\x2f\\xfb\\x06\\x26\\x20\\xfb\\x32\\x69\\x1e\\x76\\x29\\x05\\x84\\x6d\\x88\\x6d\\x6e\\x1a\\xfb\\x05\\xc1\\x49\\xe7\\xf7\\x06\\xef\\xf6\\xf7\\x32\"\n\"\\xae\\x1e\\xfb\\xce\\xe8\\x15\\x99\\xc9\\xab\\xcd\\xb2\\xb7\\x08\\xac\\xa8\\xaf\\x9c\\xb3\\x1b\\xce\\xac\\x5c\\x2b\\x71\\x88\\x70\\x86\\x73\\x1f\\x78\\x34\\x7e\"\n\"\\x4d\\x6a\\x49\\x64\\x5f\\x19\\x6a\\x6f\\x67\\x7a\\x63\\x1b\\x48\\x6a\\xbb\\xeb\\xa7\\x8d\\xa4\\x90\\xa2\\x1f\\x0e\\xf8\\x5f\\xf8\\xf9\\x15\\xfb\\x62\\x4f\\x05\"\n\"\\x76\\x85\\x82\\x82\\x7c\\x1a\\x80\\x94\\x81\\x96\\x8d\\x95\\x8d\\x8c\\x8f\\x1e\\xf7\\x19\\xb1\\x20\\xfc\\x80\\x05\\xfb\\x1b\\x33\\x1d\\xf7\\xd4\\x06\\xa1\\x9a\"\n\"\\x38\\x1d\\xfb\\x19\\x06\\x0e\\xf7\\x25\\xbe\\x15\\xf5\\xd7\\xf7\\x61\\xf7\\x35\\xb6\\xb4\\x08\\xc4\\xc1\\xa0\\xb2\\xbf\\x1a\\xd9\\x45\\xcb\\x38\\x4a\\x4c\\x70\"\n\"\\x5a\\x5a\\x1e\\x6f\\x6f\\x76\\x6a\\x7a\\x1a\\x81\\x95\\x82\\x97\\x97\\x94\\x92\\x9a\\x93\\x1e\\xc5\\xa8\\xd0\\xb5\\xcd\\x1b\\xc9\\xbd\\x5f\\x55\\x55\\x75\\x70\"\n\"\\xfb\\x13\\x27\\x1f\\x20\\x35\\x3d\\x50\\x32\\x49\\x81\\x84\\x18\\x7c\\x47\\x05\\xf8\\x29\\x06\\x9c\\xda\\x05\\x8d\\x95\\xf7\\x0a\\x0a\\x87\\x1e\\x84\\x6c\\x05\"\n\"\\x0e\\xf7\\xf5\\xf7\\xf9\\x15\\x76\\x7c\\x7f\\x7a\\x7c\\x94\\x85\\x9f\\x8a\\x1f\\xdd\\xcb\\x5a\\x4d\\x39\\x2d\\x3e\\x26\\x53\\x5c\\x9c\\xaf\\x62\\x1f\\x91\\x84\"\n\"\\x86\\x8d\\x84\\x1b\\x7c\\x7d\\x7d\\x7c\\x7e\\x97\\x7e\\xa7\\x7b\\x1f\\x6f\\xba\\xb7\\x7e\\xbe\\x1b\\xf7\\x18\\xf7\\x11\\xf3\\xf7\\x01\\xc2\\x6c\\xb8\\x54\\xa7\"\n\"\\x1f\\xd8\\xab\\xbd\\xca\\xce\\x1a\\xd7\\x4e\\xbf\\x30\\x4f\\x4d\\x76\\x68\\x5c\\x1e\\x74\\x79\\x82\\x80\\x80\\x1a\\x7e\\x94\\x83\\x98\\x94\\x8f\\x8d\\x98\\x99\"\n\"\\x1e\\xac\\xb0\\xbd\\x9d\\xc3\\x1b\\xcb\\xb7\\x68\\x59\\x48\\x46\\x52\\x3a\\x1f\\x0e\\xf8\\x29\\xf7\\x3a\\x15\\x72\\xfb\\x07\\x05\\x43\\x29\\x1d\\xf7\\x2a\\x06\"\n\"\\xa1\\x9a\\x38\\x1d\\x70\\x06\\xa4\\xf7\\x07\\x05\\xa8\\x06\\xa2\\x99\\x96\\x9e\\x9a\\x83\\x91\\x77\\x1f\\x70\\x06\\xde\\xf8\\x16\\x05\\x2e\\x06\\xfb\\xcc\\xfc\"\n\"\\x13\\x7f\\x55\\x05\\xf7\\xae\\xbe\\x15\\xfb\\x6d\\x06\\xf7\\xa7\\xf7\\xe3\\x05\\x99\\x06\\x0e\\xf7\\xcf\\xf8\\xbc\\x15\\xf7\\x81\\x57\\x0a\\xfb\\xb3\\x06\\x51\"\n\"\\xfb\\xa0\\x05\\x8a\\x88\\x8b\\x88\\x88\\x1a\\x80\\x8c\\x93\\x83\\x96\\x1b\\x92\\x90\\x8d\\x91\\x9a\\x1f\\xa0\\xb8\\xb8\\x96\\xb3\\x1b\\xce\\xb4\\x63\\x4a\\x65\"\n\"\\x7d\\x60\\x72\\x66\\x1f\\x52\\x65\\x51\\x6c\\x49\\x1b\\x52\\x5e\\xa0\\xb7\\x63\\x1f\\x93\\x84\\x86\\x8d\\x84\\x1b\\x7c\\x7c\\x7d\\x7c\\x7c\\x9e\\x77\\xae\\x73\"\n\"\\x1f\\x72\\xb1\\xb7\\x7e\\xbb\\x1b\\xf7\\x20\\xf7\\x0d\\xf7\\x0f\\xf7\\x23\\xe4\\x50\\xc5\\x32\\x62\\x66\\x83\\x78\\x57\\x1f\\x0e\\xf7\\x81\\xf7\\x9b\\x15\\x95\"\n\"\\xc3\\x9e\\xbf\\xa8\\xb5\\x08\\xe3\\xc5\\xf6\\xcb\\xe3\\x1b\\x9d\\x9a\\x88\\x87\\x93\\x1f\\x86\\x94\\x8f\\x8a\\x91\\x1b\\x9a\\x99\\x99\\x9a\\x9e\\x69\\x9b\\x60\"\n\"\\x39\\x32\\x65\\x48\\x42\\x1f\\x35\\x3d\\x58\\xfb\\x10\\xfb\\x15\\x1a\\xfb\\x0b\\xc7\\x3f\\xea\\xf7\\x07\\xf7\\x01\\xf7\\x06\\xf7\\x0d\\xe1\\x52\\xc8\\x3b\\x48\"\n\"\\x4a\\x66\\x48\\x57\\x1e\\x82\\x40\\x15\\xae\\xb7\\x96\\x98\\x9e\\x9c\\x08\\xae\\xb3\\xb5\\x9e\\xb1\\x1b\\xc0\\xb3\\x5f\\x50\\x30\\x3c\\x35\\x38\\x40\\x67\\xbb\"\n\"\\xf3\\x86\\x1f\\x0e\\xf8\\xb8\\xf8\\xb1\\x15\\xfb\\xa1\\xfc\\x8a\\x05\\x87\\x82\\x89\\x86\\x85\\x1a\\x80\\x94\\x82\\x97\\x98\\x93\\x91\\x9c\\x95\\x1e\\xf7\\xa5\"\n\"\\xf8\\x92\\x9a\\xd2\\x05\\xfc\\x14\\x06\\x7a\\x3c\\x05\\x8a\\x85\\x6c\\x1d\\x9c\\x95\\x95\\xa0\\x8f\\x1e\\x92\\xaa\\x05\\xf7\\xac\\x06\\x0e\\xf8\\x5a\\xf7\\xcc\"\n\"\\x15\\xde\\xb1\\xb8\\xc6\\xd1\\x1a\\xda\\x4c\\xc5\\x34\\xfb\\x04\\xfb\\x01\\x2b\\x28\\x5d\\xa1\\x68\\xb9\\x70\\x1e\\x33\\x64\\x56\\x47\\x3f\\x1a\\x36\\xcd\\x4f\"\n\"\\xe8\\xf7\\x0b\\xf7\\x06\\xf1\\xf5\\xbd\\x71\\xb4\\x59\\xa7\\x1e\\x6c\\xf7\\x91\\x15\\xc9\\xb7\\x64\\x55\\x42\\x42\\x4d\\x36\\x4d\\x5d\\xb0\\xbe\\xd3\\xd9\\xcf\"\n\"\\xdd\\x1f\\x4f\\xfb\\xaa\\x15\\xce\\xba\\x63\\x51\\x3b\\x39\\x42\\x31\\x49\\x5b\\xb5\\xc5\\xdc\\xda\\xd1\\xe8\\x1f\\x0e\\xf8\\xad\\xf7\\xe6\\x15\\x81\\x53\\x77\"\n\"\\x57\\x6f\\x61\\x08\\x33\\x51\\x20\\x4b\\x33\\x1b\\x79\\x7c\\x8e\\x90\\x83\\x1f\\x90\\x82\\x87\\x8c\\x85\\x1b\\x7b\\x7e\\x7d\\x7c\\x77\\xad\\x7b\\xb6\\xde\\xe3\"\n\"\\xb1\\xcd\\xd4\\x1f\\xe1\\xda\\xbe\\xf7\\x10\\xf7\\x15\\x1a\\xf7\\x0b\\x4f\\xd7\\x2d\\xfb\\x08\\xfb\\x01\\xfb\\x06\\xfb\\x0d\\x35\\xc4\\x4e\\xdb\\xce\\xcc\\xb0\"\n\"\\xce\\xbf\\x1e\\x94\\xd6\\x15\\x6a\\x62\\x7c\\x7a\\x7a\\x7b\\x08\\x68\\x63\\x60\\x78\\x65\\x1b\\x57\\x63\\xb7\\xc6\\xe6\\xda\\xe1\\xde\\xb3\\xac\\x7a\\x6e\\x9c\"\n\"\\x1f\\x9b\\x71\\x95\\x62\\x64\\x1a\\x0e\\xf7\\xd3\\xf7\\x10\\xf7\\x30\\x1d\\xb8\\xab\\x72\\xa2\\x66\\x1f\\xc0\\xf7\\xba\\x97\\x1d\\xaf\\x1f\\x96\\x06\\xbb\\xb5\"\n\"\\xb2\\xb7\\xad\\x72\\xa1\\x66\\x1f\\x0e\\xf7\\x83\\xf7\\x2d\\xc6\\x0a\\x70\\xf7\\x9d\\xf7\\x30\\x1d\\xb7\\xac\\x72\\xa2\\x66\\x1f\\x0e\\xc7\\xf7\\xad\\x15\\xf8\"\n\"\\x3e\\xfb\\x7d\\x05\\x88\\x90\\x91\\x8a\\x90\\x1b\\x93\\x93\\x90\\x92\\x8f\\x1f\\x8d\\x8e\\x05\\x8d\\x8f\\xf7\\x1c\\x1d\\x96\\x91\\x90\\x92\\x94\\x1a\\x8f\\x8a\"\n\"\\x8f\\x88\\x8f\\x1e\\x8a\\x8e\\x05\\x93\\x86\\x83\\x90\\x83\\x1b\\x87\\x86\\x89\\x88\\x85\\x1f\\x0e\\xf8\\xe5\\xf7\\xdb\\x15\\x53\\x0a\\xfc\\x50\\x21\\x1d\\xf8\"\n\"\\x32\\xfb\\x21\\x15\\xa2\\x99\\x96\\x9e\\x3c\\x0a\\xfc\\x50\\x29\\x1d\\x0e\\xf8\\xaa\\xf7\\xad\\x15\\xfc\\x3f\\xf7\\x7d\\x05\\x8e\\x84\\x87\\x8d\\x87\\x1b\\x82\"\n\"\\x84\\x86\\x83\\x86\\x1f\\x8a\\x88\\x05\\x88\\x87\\x8a\\x87\\x87\\x1a\\x82\\x90\\x84\\x96\\x85\\x1e\\xf7\\xee\\xfb\\x50\\xfb\\xee\\xfb\\x50\\x05\\x80\\x85\\x86\"\n\"\\x84\\x82\\x1a\\x88\\x8d\\x86\\x8d\\x87\\x1e\\x8c\\x88\\x05\\x84\\x8f\\x94\\x86\\x92\\x1b\\x91\\x90\\x8c\\x8e\\x91\\x1f\\x0e\\xf8\\x10\\xf7\\x88\\x15\\xcd\\xa6\"\n\"\\xb2\\xa0\\xac\\xa5\\x08\\xb6\\xac\\xa5\\xbd\\xbd\\x1a\\xd9\\x51\\xba\\x2b\\x51\\x75\\x86\\x64\\x29\\x1e\\x7f\\x86\\x7c\\x46\\x05\\x89\\x85\\x8b\\x88\\x73\\x0a\"\n\"\\x93\\xb1\\x05\\xa3\\xc3\\xab\\x92\\xb8\\x1b\\xd1\\xb7\\x6a\\x57\\x4c\\x56\\x5f\\xfb\\x25\\x54\\x1f\\x7c\\x45\\x05\\x8a\\x87\\x8a\\x86\\x87\\x63\\x1d\\x49\\xfb\"\n\"\\x04\\x15\\x62\\x6a\\x6e\\x67\\x70\\x9f\\x7a\\xab\\x1f\\xa7\\x06\\xb4\\xac\\xa8\\xaf\\xa6\\x77\\x9c\\x6a\\x1f\\x0e\\xf8\\x4e\\xf7\\x22\\x15\\xb3\\x06\\xa2\\x99\"\n\"\\x96\\x9e\\x95\\x87\\x91\\x81\\x8e\\x1f\\xc5\\xf7\\x9f\\x05\\x8d\\x97\\x8d\\x99\\x95\\x1a\\xd8\\x56\\xbe\\x3a\\xfb\\x07\\xfb\\x00\\xfb\\x02\\xfb\\x2c\\x6a\\x1e\"\n\"\\x69\\xfb\\x33\\x05\\x85\\x71\\x88\\x71\\x71\\x1a\\x59\\x9a\\x58\\xa4\\x6a\\x1e\\x69\\xa4\\xb0\\x7b\\xbd\\x1b\\xde\\xe1\\xaf\\xae\\x96\\x82\\x94\\x7e\\x85\\x86\"\n\"\\x89\\x87\\x86\\x1f\\x73\\x6a\\x68\\x80\\x5a\\x1b\\x69\\x70\\x95\\x9d\\x7b\\x1f\\x75\\xa3\\x7d\\xb9\\xb9\\x1a\\xa2\\x8d\\xa0\\x90\\xa1\\x1e\\xad\\xf7\\x30\\x05\"\n\"\\xf7\\x13\\xa6\\xdd\\xe4\\xe3\\x1b\\xc3\\xac\\x6b\\x55\\x83\\x8a\\x82\\x89\\x83\\x1f\\x82\\x62\\x05\\xfb\\x06\\x8a\\x2b\\x3c\\x2c\\x1a\\x51\\xbc\\x61\\xce\\x96\"\n\"\\x96\\x8c\\x8c\\x98\\x1e\\x96\\xbf\\x15\\x89\\x7e\\x83\\x8a\\x7f\\x1b\\x5d\\x6d\\xa2\\xaf\\xc8\\xce\\xbf\\xdb\\x8d\\x1f\\x0e\\x29\\x0a\\x0e\\xf7\\x15\\xbe\\x15\"\n\"\\x59\\x20\\x1d\\xf7\\xc7\\x06\\xf4\\xf0\\xe4\\xe8\\xbf\\x6c\\xb1\\x4e\\xa4\\x1f\\xd2\\xb0\\xae\\xba\\xc7\\x1a\\xd4\\x4f\\xbc\\xe6\\x1d\\x6c\\x6f\\x76\\xb3\\x0a\"\n\"\\xf8\\xdc\\xf8\\x96\\x15\\x4e\\x0a\\xfb\\x0c\\xe8\\x2e\\xf7\\x0d\\xd2\\xd4\\xa8\\xc1\\xcb\\x1e\\xa7\\xa3\\x93\\x95\\x98\\x95\\x0a\\x0e\\xb4\\x1d\\x0e\\x2d\\x1d\"\n\"\\x0e\\xf7\\x78\\xf7\\x9e\\x15\\xf7\\x1a\\x06\\x83\\x65\\x05\\x8a\\x87\\x8a\\x86\\x89\\x1a\\x7f\\xf7\\x34\\x1d\\xa7\\xf7\\x15\\x05\\x8d\\x94\\x8b\\x8b\\x8e\\x1a\"\n\"\\x97\\xf7\\x18\\x0a\\x87\\x1e\\x82\\x63\\x05\\xfb\\x1a\\xd7\\x1d\\x3f\\x0a\\x59\\x24\\x0a\\x78\\x7d\\x25\\x1d\\xf7\\x7e\\x23\\x1d\\xfb\\x18\\x06\\x0e\\x45\\x1d\"\n\"\\x0e\\x86\\x0a\\x0e\\x3b\\x1d\\x0e\\xb9\\x1d\\x0e\\x87\\x0a\\x0e\\x40\\x0a\\x0e\\xf8\\x01\\xf7\\x3a\\x15\\xf7\\x7a\\xf7\\xec\\x28\\xfc\\x5f\\x05\\x45\\x20\\x1d\"\n\"\\xf7\\x29\\x06\\x5c\\x0a\\x77\\x1f\\x70\\x06\\x36\\x0a\\xa0\\x2e\\x0a\\x25\\x06\\xfb\\x74\\xfb\\xe2\\x3b\\xf7\\xe2\\x05\\x23\\x20\\x1d\\x9e\\x58\\x1d\\x9a\\x82\"\n\"\\x91\\x77\\x1f\\x47\\x06\\xee\\xf8\\x5f\\xdf\\xfb\\xec\\x05\\x0e\\xf8\\x8e\\x9a\\x0a\\x9a\\x82\\x91\\xf6\\x0a\\x31\\x0a\\x0e\\xf7\\x6f\\xf7\\x76\\x93\\x1d\\xf7\"\n\"\\x00\\xda\\x47\\xc3\\x2c\\x1f\\xfb\\x84\\x64\\x0a\\xa1\\x9a\\x97\\x9d\\x9a\\x82\\x91\\xf7\\x00\\x1d\\xf7\\xc3\\x7b\\x15\\xf7\\x3d\\x94\\xf7\\x2a\\xf7\\x40\\xf7\"\n\"\\x4f\\x1a\\xf7\\x18\\x3a\\xe6\\xfb\\x0a\\xfb\\x3c\\xfb\\x32\\xfb\\x46\\xfb\\x51\\x47\\xa5\\x48\\xb4\\x64\\x1e\\x9e\\x78\\x9c\\x82\\xac\\x7f\\x2e\\x52\\x18\\x7f\"\n\"\\x83\\x85\\x82\\x81\\x1a\\x7e\\x94\\x82\\x97\\x8f\\x8e\\x8c\\x8c\\x90\\x1e\\x97\\xb7\\xd1\\x96\\xa9\\x1b\\xa4\\x98\\x88\\x81\\xa4\\x1f\\x80\\xa8\\x94\\x89\\x9c\"\n\"\\x1b\\xa6\\xad\\x96\\x9d\\xad\\x1f\\x9f\\x96\\x91\\x93\\x98\\x1a\\x97\\x82\\x94\\x7f\\x85\\x87\\x8a\\x87\\x85\\x1e\\x77\\x68\\x7a\\x85\\x77\\x1b\\x7f\\x84\\x8d\"\n\"\\x93\\x75\\x1f\\x97\\x6e\\x76\\x8f\\x6c\\x1b\\x7c\\x82\\x8a\\x88\\x78\\x1f\\xf7\\x2d\\xf8\\xc8\\x15\\xe3\\xcb\\x3e\\x23\\xfb\\x2d\\xfb\\x17\\xfb\\x2f\\xfb\\x15\"\n\"\\x2c\\x4b\\xd4\\xf7\\x00\\xf7\\x32\\xf7\\x16\\xf7\\x2a\\xf7\\x1d\\x1f\\x0e\\x4b\\x0a\\x0e\\x49\\x0a\\x0e\\x5f\\x0a\\x0e\\x2e\\x1d\\x0e\\xf7\\x9b\\x16\\xcb\\x06\"\n\"\\xf7\\xd4\\xf8\\x94\\x05\\xa7\\xf7\\x1e\\x0a\\xfb\\x2a\\x24\\x0a\\x78\\x7c\\x93\\x85\\x9f\\x1f\\xd0\\x06\\xfb\\xb2\\xfc\\x5c\\x3b\\xf8\\x5c\\x05\\xd1\\xf7\\x1e\"\n\"\\x0a\\xfb\\x2b\\x26\\x0a\\xa5\\x06\\x0e\\xf7\\x08\\xf7\\x0a\\x1d\\x9c\\x9b\\x83\\x91\\x77\\x1f\\xfb\\x2a\\x37\\x1d\\x25\\x1d\\xe3\\x06\\xfb\\x27\\xfc\\x46\\x73\"\n\"\\xf7\\xfe\\x05\\x45\\x06\\xfb\\x4c\\xfb\\xfe\\xb5\\xf8\\x46\\x05\\xe3\\x27\\x1d\\xfb\\x29\\x24\\x0a\\x79\\x7c\\x25\\x1d\\x94\\x06\\x0e\\xf8\\x1d\\xf7\\xb3\\x15\"\n\"\\xf7\\x74\\xf7\\x75\\x05\\x98\\x06\\x5c\\x0a\\x77\\x1f\\xfb\\x03\\x4a\\x1d\\x9f\\x1f\\xab\\x06\\xfb\\x4a\\xfb\\x4b\\x23\\xf7\\x4b\\x05\\xac\\x06\\xa2\\x6f\\x0a\"\n\"\\x79\\x7c\\xf7\\x17\\x1d\\x79\\x7c\\x2a\\x0a\\xf7\\x16\\x06\\x5c\\x0a\\xf7\\x32\\x1d\\x74\\x7d\\x39\\x1d\\xf7\\x17\\x23\\x1d\\x7d\\x06\\x0e\\x47\\x1d\\x0e\\xf8\"\n\"\\x89\\x16\\xb3\\xf7\\x4b\\x05\\x8d\\x95\\x8b\\x8b\\x8e\\x7c\\x0a\\xcd\\x1d\\xf8\\x51\\xf8\\xbc\\x15\\xe8\\x06\\xa2\\x99\\x96\\x9e\\x9a\\x82\\x91\\x77\\x1f\\xfb\"\n\"\\x22\\x06\\xfb\\x31\\xfd\\x69\\x05\\xf7\\x25\\x2e\\x0a\\x31\\x06\\x0e\\xf7\\xbe\\xf9\\x18\\x15\\x9b\\x87\\x85\\x90\\x7e\\x1b\\x7b\\x7d\\x7d\\x7c\\x88\\x8b\\x89\"\n\"\\x8d\\x85\\x1f\\xf7\\x48\\xfd\\x3f\\x05\\x7c\\x8f\\x91\\x85\\x98\\x1b\\x9a\\x9a\\x99\\x9a\\x8e\\x8b\\x8b\\x89\\x94\\x1f\\x0e\\xf7\\x95\\x44\\x15\\x2e\\x24\\x0a\"\n\"\\x78\\x7c\\x94\\x85\\x9f\\x1f\\xf7\\x22\\x06\\xf7\\x31\\xf9\\x69\\x05\\xfb\\x25\\x06\\x75\\x7c\\x7f\\x79\\x7c\\x93\\x85\\xa0\\x1f\\xe5\\x06\\x0e\\xf7\\xc0\\xf8\"\n\"\\xfc\\x15\\xfb\\x4a\\xfb\\x73\\x05\\x83\\x82\\x89\\x86\\x84\\x1a\\x7d\\x96\\x80\\x9a\\x94\\x91\\x8f\\x96\\x94\\x1e\\xf7\\x22\\xf7\\x43\\xf7\\x23\\xfb\\x43\\x05\"\n\"\\x80\\x93\\x92\\x87\\x94\\x1b\\x9a\\x96\\x96\\x99\\x92\\x89\\x8f\\x83\\x95\\x1f\\x0e\\xf8\\xdd\\xfb\\x08\\xd0\\x0a\\xf8\\x9c\\xf8\\xec\\x15\\xfb\\x25\\x06\\xeb\"\n\"\\xfb\\x80\\x05\\x79\\x93\\x94\\x83\\x99\\x1b\\xa2\\x9e\\x9d\\xa1\\x1f\\x92\\x07\\x0e\\x37\\x0a\\x0e\\xf7\\xab\\xf8\\xef\\x15\\x89\\x1d\\xfb\\x00\\xfc\\x89\\x05\"\n\"\\x59\\x20\\x1d\\xef\\x06\\x9b\\xd6\\x05\\x4e\\xad\\xbf\\x6d\\xd0\\x1b\\xf7\\x23\\xf7\\x1a\\xf7\\x18\\xf7\\x22\\xf2\\x40\\xd3\\x21\\x46\\x48\\x6c\\x51\\x52\\x1f\"\n\"\\xf7\\x4c\\xb1\\x15\\xd9\\xc6\\x52\\x3f\\xfb\\x01\\x22\\x22\\xfb\\x01\\x38\\x51\\xc2\\xda\\xf7\\x03\\xf3\\xf1\\xf7\\x06\\x1f\\x0e\\x46\\x1d\\x0e\\xb4\\x0a\\x27\"\n\"\\xd7\\x41\\xd2\\x0a\\xfb\\x2b\\xf7\\xdf\\x15\\xdd\\xc3\\x54\\x3a\\x20\\x22\\x23\\xfb\\x00\\x36\\x53\\xc1\\xdc\\xf7\\x03\\xf2\\xf0\\xf7\\x05\\x1f\\x0e\\x30\\x1d\"\n\"\\x0e\\xf7\\xf8\\xf8\\x04\\x15\\xf7\\x4d\\x2e\\x0a\\xfb\\x4a\\x06\\x96\\xc1\\x05\\xba\\x95\\xbe\\xab\\xcb\\x1b\\xaf\\xaa\\x88\\x83\\xc1\\x1f\\x8a\\x93\\x8e\\x8b\"\n\"\\x8e\\x1b\\x9c\\x99\\x98\\x9c\\x95\\x85\\x92\\x7f\\x8e\\x1f\\x91\\x6c\\x47\\x92\\x64\\x1b\\x2e\\x3e\\x56\\x40\\x7b\\x1f\\x7f\\x53\\x05\\x37\\x26\\x0a\\xdc\\x25\"\n\"\\x0a\\x2d\\x26\\x0a\\xf7\\xd0\\x23\\x1d\\xfb\\x3f\\x06\\x0e\\xe9\\x1d\\x82\\x4f\\x44\\x51\\x4c\\xa1\\x0a\\x0e\\xa8\\x1d\\x0e\\x3c\\x1d\\xf7\\x0e\\xf8\\xcf\\x77\"\n\"\\x0a\\xf8\\x7f\\x9e\\x0a\\xac\\x1d\\x0e\\x41\\x0a\\x0e\\xf7\\x64\\xf8\\x37\\x15\\x3a\\x4f\\x1d\\x9e\\x1f\\xa7\\x25\\x0a\\x6d\\x21\\x1d\\xf7\\x00\\x2a\\x1d\\x70\"\n\"\\x06\\xc2\\xf7\\x92\\x05\\xc1\\xbb\\xaf\\xa2\\xad\\x1b\\xa4\\x9f\\x74\\x6e\\x87\\x8a\\x86\\x8a\\x86\\x1f\\x47\\xfb\\xd0\\x05\\xdb\\x06\\xa2\\x99\\x97\\x9d\\x99\"\n\"\\x83\\x92\\x77\\x1f\\x70\\x06\\xc2\\xf7\\x92\\x05\\xc2\\xbb\\xad\\xa1\\xae\\x1b\\x98\\x95\\x88\\x84\\x91\\x1f\\x97\\x7f\\x92\\x7b\\x8a\\x7e\\x08\\x89\\x8a\\x87\"\n\"\\x8a\\x85\\x1e\\x46\\xfb\\xd3\\x05\\xdb\\x06\\xa1\\x9a\\x97\\x9d\\x99\\x83\\x92\\x77\\x1f\\x70\\x06\\xc5\\xf7\\xa1\\x05\\x8d\\x93\\x8c\\x95\\x91\\x1a\\xbf\\x66\"\n\"\\xb0\\x56\\x62\\x66\\x78\\x5e\\x5c\\x1e\\xb6\\x7c\\x70\\xa0\\x60\\x1b\\x64\\x6a\\x7b\\x66\\x65\\x1f\\x0e\\x4a\\x0a\\x0e\\x38\\x0a\\x0e\\xf7\\x84\\xf8\\x37\\x15\"\n\"\\x25\\x26\\x0a\\xba\\x06\\xfb\\x00\\xfc\\x87\\xaa\\x0a\\x43\\xce\\xfb\\x03\\x41\\x56\\x74\\x4f\\x4b\\xe9\\x0a\\xd7\\xf0\\xf1\\xe8\\xf7\\x03\\x1f\\x0e\\xf8\\xa7\"\n\"\\xf7\\xf1\\x15\\xc5\\x68\\x5b\\xa5\\x42\\x1b\\x3d\\x47\\x6e\\x52\\x53\\x1f\\x5d\\x5c\\x70\\x4c\\x52\\x1a\\x26\\xd5\\x46\\xf7\\x02\\xd4\\xc6\\xa4\\xc4\\xc6\\x1e\"\n\"\\x5a\\xfb\\x73\\x05\\x2e\\x06\\x74\\x7c\\x39\\x1d\\xf7\\x55\\x06\\xa2\\x99\\x97\\x9d\\x9a\\x82\\x91\\x78\\x1f\\x5b\\x06\\xf7\\x01\\xf8\\x87\\x05\\xbd\\x2e\\x0a\"\n\"\\x28\\x06\\xfb\\x48\\x66\\x15\\xdf\\xc4\\x57\\x3f\\x28\\x24\\x2d\\xfb\\x00\\x35\\x52\\xbe\\xd7\\xf1\\xf1\\xe7\\xf7\\x03\\x1f\\x0e\\x53\\x1d\\x0e\\xf4\\x85\\x1d\"\n\"\\xf7\\x16\\xf0\\xd0\\xe4\\xa4\\x7d\\xa7\\x76\\x9b\\x1f\\x76\\x1d\\x3f\\x53\\x6b\\x0a\\x81\\x94\\x7f\\x7a\\x81\\x81\\x76\\x86\\x1e\\x0e\\x5e\\x0a\\x0e\\xf8\\x45\"\n\"\\x16\\xdd\\x06\\xa1\\xb6\\x1d\\xca\\xa3\\xbc\\xcb\\x1f\\x0e\\xf7\\xe7\\x16\\xf7\\x8a\\xf8\\x04\\x05\\xb1\\x27\\x1d\\xfb\\x2c\\x20\\x1d\\xc6\\x06\\xfb\\x68\\xfb\"\n\"\\xd1\\x05\\x7f\\x06\\x3f\\xf7\\xd1\\x05\\xc6\\x27\\x1d\\xfb\\x2c\\x26\\x0a\\xaf\\x06\\xe4\\xfc\\x04\\x05\\x0e\\x4d\\x0a\\x0e\\xf8\\x13\\xf7\\x6e\\x15\\x99\\x0a\"\n\"\\x79\\x7c\\x25\\x1d\\xf7\\x19\\x23\\x1d\\x57\\x06\\xf7\\x40\\xf7\\x19\\xf7\\x04\\xfb\\x19\\x05\\x56\\xd4\\x0a\\x84\\x06\\x0e\\x52\\x1d\\x0e\\xb8\\x0a\\xfc\\x00\"\n\"\\xfb\\xd8\\x81\\x5f\\x05\\xf8\\x15\\x06\\xa1\\xee\\x05\\x8d\\x94\\x8b\\x8b\\x8e\\x1a\\x97\\xd7\\x0a\\x0e\\xf8\\x46\\xf8\\x81\\x15\\x92\\xab\\xa4\\xa2\\xab\\x8f\"\n\"\\x08\\xa4\\x8e\\x96\\x94\\x9d\\x1a\\x98\\x82\\x93\\x7b\\x51\\x54\\x5c\\x4e\\x7e\\x1e\\x66\\xfb\\x3d\\x83\\x69\\x70\\x73\\x69\\x8a\\x19\\x75\\x89\\x7f\\x80\\x79\"\n\"\\x1a\\x7d\\x92\\x85\\x9d\\x89\\x1e\\xa7\\x89\\x9a\\x7c\\x71\\x1a\\x87\\x8a\\x86\\x8a\\x86\\x1e\\x67\\xfb\\x3d\\x05\\x89\\x83\\x8a\\x83\\x82\\x1a\\x5a\\xae\\x67\"\n\"\\xbb\\x9f\\x9a\\x97\\x9c\\x9a\\x85\\x8f\\x76\\x8e\\x1e\\x74\\x8d\\x7d\\x9b\\x8a\\xa3\\x08\\x90\\x8b\\x90\\x8c\\x90\\x1e\\xb0\\xf7\\x3d\\x05\\x8d\\x96\\x8c\\x94\"\n\"\\x96\\x1a\\xa0\\x84\\x9b\\x79\\x9c\\x1e\\xac\\x9f\\x9c\\xa4\\x93\\xb1\\x08\\x0e\\xf7\\xda\\xf9\\xcd\\x15\\x58\\xfe\\xc7\\xbe\\x06\\x0e\\xf7\\xa2\\x7f\\x15\\x84\"\n\"\\x6b\\x72\\x74\\x6a\\x87\\x08\\x73\\x88\\x80\\x82\\x79\\x1a\\x7e\\x94\\x83\\x9b\\xc5\\xc2\\xba\\xc8\\x98\\x1e\\xb0\\xf7\\x3d\\x92\\xad\\xa7\\xa3\\xad\\x8d\\x19\"\n\"\\xa1\\x8c\\x97\\x96\\x9d\\x1a\\x99\\x84\\x91\\x78\\x8d\\x1e\\x6f\\x8d\\x7a\\x9c\\x8d\\xa3\\x08\\x8f\\x8c\\x8f\\x8c\\x91\\x1e\\xb0\\xf7\\x3d\\x05\\x8d\\x94\\x8c\"\n\"\\x94\\x93\\x1a\\xbb\\x68\\xaf\\x5b\\x77\\x7c\\x7f\\x7a\\x7c\\x91\\x87\\xa0\\x88\\x1e\\xa2\\x89\\x9a\\x7a\\x74\\x1a\\x85\\x8b\\x87\\x8a\\x86\\x1e\\x66\\xfb\\x3d\"\n\"\\x05\\x88\\x80\\x8a\\x80\\x82\\x1a\\x76\\x92\\x7c\\x9e\\x79\\x1e\\x6a\\x77\\x7a\\x72\\x82\\x65\\x08\\x0e\\xf8\\x7d\\xf7\\xe2\\xf7\\x38\\x1d\\x89\\x8c\\xb3\\x57\"\n\"\\x1f\\xb7\\x53\\x7c\\xf7\\x0c\\x0a\\x7d\\x72\\x0a\\xc1\\xb7\\x94\\x7b\\x0a\\x56\\xcb\\xa1\\x7f\\xac\\x1b\\xac\\xa9\\x9d\\xb5\\xaf\\x1f\\x9e\\xa0\\x92\\x97\\x9d\"\n\"\\x1d\\x0e\\xf7\\x72\\xfb\\x2b\\x15\\x88\\x7f\\x89\\x81\\x85\\x1a\\x78\\x9b\\x7d\\xa0\\xab\\x9d\\x9e\\xb3\\x91\\x1e\\xbe\\xf7\\xd4\\x05\\x8c\\x91\\x8c\\x90\\x8d\"\n\"\\x1a\\x96\\x82\\x94\\x7f\\x7b\\x81\\x82\\x75\\x85\\x1e\\xcb\\xf7\\x22\\x15\\xb1\\xac\\xa9\\xad\\xa5\\x77\\x9d\\x6d\\x1f\\x7f\\x06\\x65\\x6a\\x6d\\x69\\x71\\xa0\"\n\"\\x79\\xa8\\x1f\\x0e\\xf8\\x11\\xf8\\x84\\x15\\x51\\x7e\\x69\\x7c\\x67\\x6d\\x08\\x57\\x60\\x6c\\x4c\\x50\\x1a\\x3d\\xc0\\x4f\\xd9\\x81\\x1e\\x74\\x22\\x05\\x89\"\n\"\\x82\\x8b\\x8b\\x87\\x1a\\x80\\x95\\x82\\x97\\x9c\\x28\\x1d\\xa2\\xf5\\xb1\\x8e\\xb8\\x98\\xb4\\x9f\\x19\\xa7\\x99\\x97\\x97\\x9a\\x1a\\x97\\x83\\x93\\x7e\\x84\"\n\"\\x87\\x8a\\x83\\x80\\x1e\\x71\\x64\\x5c\\x7d\\x5d\\x1b\\x43\\x5c\\xb6\\xcc\\xe7\\xe0\\xd8\\xf0\\xa9\\xa4\\x85\\x7e\\x9c\\x1f\\x96\\x83\\x96\\x7b\\x82\\x1a\\x8a\"\n\"\\x75\\x05\\x82\\x95\\x82\\x96\\x9c\\x28\\x1d\\x98\\xc7\\x8c\\x94\\x05\\x98\\x8c\\x82\\x94\\x7d\\x1b\\x81\\x83\\x87\\x82\\x84\\x1f\\x78\\x9c\\x66\\x99\\x6a\\x8c\"\n\"\\xa1\\xec\\x18\\x8d\\x94\\xf7\\x0a\\x0a\\x86\\x1e\\x0e\\xf7\\x61\\xbe\\x15\\xbe\\xbe\\xb1\\xe4\\x8f\\xd7\\x08\\xdf\\x57\\x0a\\x2d\\x06\\x93\\x8b\\x8b\\x8a\\x99\"\n\"\\x1e\\x88\\xac\\x8b\\x8f\\x9b\\x1a\\xb4\\x94\\xa5\\xa4\\xa5\\x1e\\xa4\\xa3\\xab\\x9a\\xaa\\x1b\\xac\\xa2\\x7d\\x6c\\x9e\\x1f\\x80\\x91\\x91\\x87\\x92\\x1b\\x9b\"\n\"\\x9a\\x99\\x99\\x96\\x82\\x9c\\x7c\\x9a\\x1f\\xa6\\x73\\x6c\\x98\\x64\\x1b\\x5e\\x5f\\x78\\x67\\x67\\x1f\\x65\\x66\\x7a\\x61\\x55\\x1a\\x78\\x8c\\x7a\\x8e\\x68\"\n\"\\x1e\\x33\\x26\\x0a\\xed\\x06\\x84\\x26\\x46\\xfb\\x06\\x55\\x89\\x08\\x79\\x7d\\x7f\\x7b\\x7c\\x25\\x1d\\xf7\\xd8\\x06\\xa9\\xa9\\x9a\\xa6\\xa1\\x1f\\x9b\\x9e\"\n\"\\x97\\xa6\\x9a\\x1a\\x96\\x82\\x94\\x7e\\x7c\\x82\\x83\\x79\\x85\\x1e\\x6e\\x81\\x78\\x7a\\x74\\x1b\\x0e\\xab\\x0a\\xf8\\x0c\\xf7\\x7d\\x15\\xf7\\x13\\x06\\x9f\"\n\"\\x96\\x95\\xa0\\x96\\x83\\x90\\x7c\\x1f\\x21\\x06\\xf7\\x63\\xf7\\x7c\\x05\\xa0\\x06\\xa2\\x6f\\x0a\\x79\\x7c\\x2a\\x0a\\xa6\\x06\\xfb\\x4e\\xfb\\x64\\x2b\\xf7\"\n\"\\x64\\x05\\xaa\\x06\\xa1\\x6f\\x0a\\x78\\x7d\\x25\\x1d\\xa0\\x06\\xf5\\xfb\\x7c\\x05\\xfb\\x00\\x06\\x77\\x80\\x81\\x77\\x7f\\x93\\x86\\x9b\\x1f\\xf7\\x0f\\x06\"\n\"\\x81\\x5b\\x05\\xfb\\x12\\x06\\x76\\x80\\x81\\x77\\x80\\x93\\x85\\x9b\\x1f\\xf7\\x10\\x06\\x78\\x34\\x05\\x39\\x21\\x1d\\xf7\\x6a\\x30\\x0a\\x3c\\x06\\x9e\\xe2\"\n\"\\x05\\xf7\\x12\\x06\\xa0\\x96\\x96\\x9f\\x95\\x83\\x91\\x7b\\x1f\\xfb\\x10\\x06\\x0e\\xf8\\x2c\\xf8\\x0e\\x15\\x9c\\xd9\\x05\\xcc\\x99\\xc1\\xb7\\xcd\\x1b\\x9b\"\n\"\\x99\\x89\\x85\\x9b\\x1f\\x89\\x93\\x8f\\x8a\\x8e\\x1b\\x9a\\x99\\x99\\x9b\\x93\\x87\\x91\\x82\\x8f\\x1f\\x94\\x78\\x6f\\x90\\x71\\x1b\\x34\\x37\\x46\\x33\\x78\"\n\"\\x1f\\x7a\\x3a\\x05\\x2f\\x20\\x1d\\xe5\\x06\\x53\\xfb\\x96\\x05\\x4b\\x7d\\x57\\x5e\\x4f\\x1b\\x80\\x7b\\x8d\\x8d\\x84\\x1f\\x93\\x73\\x89\\x8b\\x85\\x1b\\x7d\"\n\"\\x7d\\x7d\\x7c\\x78\\xb0\\x7c\\xbb\\xe0\\xdc\\xce\\xe0\\x9e\\x1f\\xc5\\xf7\\x9e\\x05\\xe7\\x06\\xa2\\x99\\x97\\x9d\\x35\\x1d\\x0e\\xf9\\x0a\\xf8\\xef\\x15\\xfb\"\n\"\\x6e\\x06\\x39\\x3c\\x47\\x44\\x84\\x8c\\x87\\x8d\\x81\\x1f\\x67\\x85\\x78\\x85\\x76\\x7c\\x08\\x70\\x79\\x7a\\x6f\\x71\\x1a\\x5e\\xae\\x62\\xdb\\x59\\x1e\\xc4\"\n\"\\x67\\x05\\xd4\\x5e\\xaa\\x6c\\x70\\x1a\\x61\\x5a\\x65\\x54\\x1e\\xfb\\x33\\x06\\x98\\xca\\x05\\x8c\\x8f\\x8c\\x90\\x8d\\x1a\\x96\\x82\\x93\\x7e\\x7b\\x80\\x81\"\n\"\\x79\\x87\\x1e\\x72\\xfb\\x07\\x05\\xf7\\x6a\\x06\\xe4\\xd7\\xcb\\xd7\\x92\\x8a\\x90\\x89\\x94\\x1f\\xb2\\x90\\x9f\\x92\\xa1\\x9d\\x08\\xa5\\x9f\\x98\\xa4\\xa7\"\n\"\\x1a\\xb8\\x6c\\xaf\\x3f\\xba\\x1e\\x59\\xa9\\x05\\x2f\\xc3\\x6f\\xa5\\xa7\\x1a\\xb4\\xbe\\xb4\\xbf\\x1e\\xf7\\x35\\x06\\x7e\\x4d\\x05\\x8a\\x88\\x8b\\x88\\x87\"\n\"\\x1a\\x80\\x95\\x82\\x97\\x9a\\x97\\x95\\x9d\\x8f\\x1e\\xfb\\x38\\xfb\\x5f\\x15\\xbd\\x6c\\xac\\x67\\x71\\x1a\\x72\\x6c\\x7a\\x5c\\x89\\x1e\\x81\\x06\\x89\\x8a\"\n\"\\x8b\\x8a\\x87\\x1f\\x7c\\x9c\\x72\\x9e\\x5b\\xa8\\x55\\xae\\x18\\x48\\xb4\\x6a\\xad\\xa4\\x1a\\xa5\\xae\\x9f\\xb8\\x1e\\x92\\x06\\x8e\\x8c\\x8b\\x8c\\x90\\x1f\"\n\"\\xa2\\x72\\x9e\\x7d\\xc6\\x67\\x08\\x0e\\xf7\\x7d\\xf7\\x31\\x15\\x73\\xaa\\xa4\\x82\\xb0\\x1b\\xb2\\xa8\\x94\\xa3\\xb4\\x1f\\xb3\\x58\\x05\\x81\\x93\\x90\\x88\"\n\"\\x93\\x1b\\x9a\\x9b\\x99\\x9a\\x8d\\x85\\x99\\x89\\x8e\\x1f\\x63\\xbe\\x05\\xb4\\xb8\\x9d\\xb4\\xbc\\x1a\\xa1\\x88\\x98\\x7e\\xa7\\x1e\\xcb\\xbf\\x05\\x99\\x96\"\n\"\\x8e\\x90\\x96\\x28\\x0a\\x83\\x85\\x88\\x82\\x80\\x1e\\x4c\\x58\\x05\\xa2\\x6d\\x70\\x95\\x64\\x1b\\x66\\x6c\\x82\\x73\\x63\\x1f\\x63\\xbd\\x05\\x96\\x82\\x87\"\n\"\\x8d\\x83\\x1b\\x7b\\x7c\\x7d\\x7c\\x85\\x8d\\x86\\x91\\x84\\x1f\\xb4\\x58\\x05\\x65\\x61\\x77\\x5e\\x5c\\x1a\\x76\\x8f\\x7d\\x97\\x6e\\x1e\\x4a\\x56\\x05\\x7e\"\n\"\\x81\\x87\\x84\\x81\\x1a\\x7f\\x94\\x82\\x98\\x93\\x8f\\x8d\\x95\\x98\\x1e\\xf7\\x70\\xf7\\xc4\\x15\\xc3\\xb2\\x65\\x55\\x43\\x43\\x45\\x41\\x51\\x64\\xb0\\xc2\"\n\"\\xd4\\xd3\\xd0\\xd7\\x1f\\x0e\\xf7\\xfc\\xf8\\xef\\x15\\x76\\xf7\\x14\\x1d\\xf7\\xf9\\xf8\\xec\\x15\\xfb\\x21\\x06\\xe7\\xfb\\x80\\x05\\x79\\x92\\x94\\x83\\x9a\"\n\"\\x1b\\xa2\\x9e\\x9d\\xa1\\x1f\\x92\\x07\\xf7\\x4c\\xf7\\x6b\\x15\\xfb\\x21\\x06\\xe7\\xfb\\x80\\x05\\x79\\x92\\x94\\x83\\x99\\x1b\\xa3\\x9e\\x9d\\xa1\\x1f\\x92\"\n\"\\x07\\x0e\\xf7\\x1e\\x1d\\x90\\x89\\x8f\\x86\\x94\\x1f\\x22\\xf7\\x3e\\x1d\\x97\\x82\\x94\\x7e\\x84\\x83\\x88\\x82\\x80\\x1e\\x72\\xfb\\x59\\x15\\xf7\\x3d\\xfb\"\n\"\\x59\\x05\\x82\\x93\\x92\\x87\\x93\\x1b\\x9b\\x99\\x99\\x9b\\x90\\x8a\\x8e\\x84\\x95\\x1f\\x23\\xf7\\x35\\xf7\\x43\\xf7\\x36\\x05\\x99\\x97\\x8e\\x90\\x95\\x1a\"\n\"\\x98\\x82\\x93\\x7e\\x83\\x84\\x87\\x83\\x80\\x1e\\x0e\\xf7\\x1e\\x1d\\x91\\x8a\\x8d\\x84\\x95\\x1f\\x23\\xf7\\x3e\\x1d\\x98\\x82\\x93\\x7e\\x84\\x82\\x87\\x83\"\n\"\\x81\\x1e\\x0e\\xf8\\xe5\\xd2\\x1d\\x0e\\xf7\\x8a\\xf8\\x04\\x15\\xce\\x27\\x1d\\x4a\\x06\\x96\\xf7\\x20\\x1d\\x8f\\x1b\\x9a\\x98\\x99\\x9a\\x94\\x86\\x92\\x81\"\n\"\\x90\\x1f\\x93\\x78\\x69\\x92\\x77\\x1b\\x4c\\x4d\\x52\\x42\\x7c\\x1f\\x7f\\x55\\x05\\x42\\x37\\x1d\\xd6\\x1d\\x53\\x0a\\x4a\\x06\\xf8\\x26\\xf8\\x04\\x15\\x22\"\n\"\\x26\\x0a\\xbd\\x25\\x0a\\x42\\x26\\x0a\\xf7\\x55\\x30\\x0a\\x47\\x06\\xf7\\x0f\\xf8\\xcf\\xf7\\x53\\x1d\\xf7\\x89\\xf8\\x04\\x15\\xcf\\x2e\\x0a\\x4a\\x06\\x97\"\n\"\\xf7\\x20\\x1d\\x8e\\x1b\\x9b\\x98\\x90\\x1d\\x68\\x92\\x78\\xf7\\x31\\x1d\\x79\\x7c\\xd6\\x1d\\xa1\\x34\\x1d\\x4b\\x06\\xf8\\x4d\\xf8\\xbc\\x15\\x22\\x24\\x0a\"\n\"\\x78\\x7c\\x93\\x85\\xa0\\x1f\\xbd\\x06\\xfb\\x01\\xfc\\x89\\x05\\x43\\x21\\x1d\\xf7\\x57\\x79\\x0a\\x44\\x06\\x0e\\xf8\\xc0\\xf7\\x94\\x15\\xa2\\x9a\\x97\\xf7\"\n\"\\x4c\\x1d\\x78\\x7d\\x25\\x1d\\x0e\\xf7\\x14\\x0a\\x9e\\x99\\xf7\\x2f\\x1d\\x8e\\x1a\\x97\\xc2\\x0a\\x35\\xfc\\x21\\x05\\x8a\\x86\\x8a\\x87\\x73\\x0a\\x0e\\xf7\"\n\"\\x14\\x0a\\x9d\\x9a\\xf7\\x2f\\x1d\\x8f\\x1a\\x96\\xc2\\x0a\\x7e\\x51\\x05\\xfb\\x10\\x21\\x1d\\xf7\\x0e\\x06\\x4c\\xfb\\xb4\\xf7\\x02\\x0a\\xca\\xf7\\xb6\\x05\"\n\"\\xf7\\x10\\x06\\xa2\\x9a\\x96\\x9d\\x9b\\x82\\x91\\x77\\x1f\\xfb\\x0e\\x06\\x0e\\x68\\x0a\\xf8\\xc6\\xf8\\xbc\\x15\\xc3\\x06\\xa0\\x9a\\x97\\x9d\\x99\\x82\\x92\"\n\"\\x79\\x1f\\xfb\\x5c\\x06\\xfb\\x1d\\x89\\x28\\x50\\x77\\x30\\x81\\x5d\\x18\\x89\\x83\\x8a\\x83\\x85\\x1a\\x5f\\xa6\\x66\\xba\\x74\\x1e\\xa7\\x7e\\xa6\\x84\\xb9\"\n\"\\x88\\x52\\xfb\\x9e\\x18\\x2e\\x06\\x75\\x7d\\x7f\\x79\\x7e\\x95\\x83\\x9c\\x1f\\xf7\\x1a\\x06\\xa0\\x9a\\x97\\x9d\\x95\\x85\\x92\\x81\\x8e\\x1f\\xf7\\x0e\\xf8\"\n\"\\xc7\\x05\\xc8\\x06\\xfb\\x0e\\xfc\\xc6\\x05\\x7b\\x88\\x80\\x7f\\x7c\\x1a\\x7e\\x94\\x83\\x9d\\x1e\\xed\\x06\\xa0\\x9a\\x97\\x9d\\x99\\x82\\x92\\x79\\x1f\\x53\"\n\"\\x06\\x0e\\xf7\\xbc\\xf8\\x59\\x15\\x38\\x49\\x49\\x37\\x38\\xcd\\x48\\xdd\\xdc\\xcd\\xce\\xde\\xdd\\x49\\xcf\\x3b\\x1f\\x0e\\xe7\\x1d\\xf7\\x54\\xf7\\x2d\\xf7\"\n\"\\x3f\\x1d\\x97\\x80\\x9d\\xf7\\x05\\x1d\\x97\\x80\\x9d\\x9a\\x96\\x91\\x9c\\x98\\x1e\\xf7\\x57\\xf7\\x87\\x05\\x0e\\xf7\\xb5\\xf8\\xef\\xf7\\x3f\\x1d\\x98\\x80\"\n\"\\x9c\\xf7\\x05\\x1d\\x98\\x80\\x9c\\x9a\\x96\\x92\\x9b\\x98\\x1e\\xf7\\x57\\xf7\\x87\\x05\\x0e\\xf7\\xff\\xd2\\x1d\\xf8\\x77\\xf7\\x59\\xf7\\x22\\x1d\\x88\\x91\"\n\"\\x81\\x1f\\xf3\\xfb\\x35\\xfb\\x42\\xfb\\x35\\x05\\x7d\\x7e\\x88\\x86\\x81\\x1a\\x7f\\x94\\x82\\x98\\x93\\x92\\x8e\\x94\\x96\\x1e\\x0e\\xf7\\x0a\\xe8\\xdf\\x0a\"\n\"\\xf7\\x5b\\x16\\xe4\\x0a\\xf7\\x5c\\xf7\\x1a\\x1d\\xf7\\xa6\\xf8\\xf9\\xf7\\x51\\x1d\\xcd\\xd1\\xcb\\x0a\\xf7\\xcc\\xfb\\x52\\x15\\x99\\x8f\\x92\\x93\\x95\\x1a\"\n\"\\x94\\x85\\x92\\x83\\x87\\x87\\x8a\\x8a\\x87\\x1e\\xfc\\x24\\xfb\\x0c\\x05\\x7d\\x87\\x83\\x82\\x81\\x1a\\x82\\x92\\x84\\x93\\x8d\\x8f\\x8c\\x8d\\x91\\x1e\\xbb\"\n\"\\x5c\\xb1\\x0a\\xf7\\xab\\xb2\\xb1\\x0a\\x0e\\xf7\\xc7\\xf7\\x35\\x15\\x49\\x6f\\x64\\x76\\x69\\x72\\x08\\x61\\x6a\\x71\\x58\\x59\\x1a\\x3d\\xc5\\x5c\\xeb\\xbf\"\n\"\\xae\\x93\\xa7\\xd0\\x1e\\x9a\\x91\\x8c\\x8b\\x9d\\x92\\x9a\\xd1\\x18\\x8d\\x93\\x8b\\x8b\\xf7\\x5c\\x1d\\x86\\x1e\\x83\\x65\\x05\\x72\\x53\\x6c\\x84\\x5e\\x1b\"\n\"\\x45\\x5f\\xac\\xbf\\xcb\\xc1\\xb7\\xf7\\x24\\xc2\\x1f\\x9a\\xd0\\xf1\\x0a\\x77\\x87\\x1e\\xcd\\xf7\\x04\\x15\\xb4\\xac\\xa7\\xaf\\xa6\\x77\\x9c\\x6a\\x1f\\x6f\"\n\"\\x06\\x63\\x6a\\x6f\\x67\\x6f\\x9f\\x7b\\xab\\x1f\\x0e\\xf7\\xe0\\xde\\x1d\\xf8\\xc8\\xf8\\xe0\\x3d\\x1d\\xf8\\x49\\xf9\\x12\\xd5\\x1d\\xf8\\xc7\\xf8\\xed\\xbf\"\n\"\\x1d\\x96\\x1a\\x96\\x81\\x94\\x7f\\x1e\\x0e\\xf8\\xa9\\xf8\\xa1\\x2c\\x1d\\xf7\\xde\\xf8\\xf0\\x32\\x0a\\xf8\\x43\\xf8\\xf5\\x59\\x1d\\xf7\\xd4\\xad\\x0a\\xf8\"\n\"\\x4d\\xf9\\x26\\x5c\\x1d\\x7a\\x74\\x95\\x1d\\x0e\\xf7\\xa2\\x96\\x15\\x78\\x31\\x05\\x42\\x0a\\x68\\x8e\\x1f\\x95\\xb9\\x05\\x0e\\xf8\\x39\\xf8\\xda\\x74\\x1d\"\n\"\\xf8\\x40\\x96\\x15\\x43\\x06\\x45\\x6d\\x6a\\x67\\x5d\\x65\\x0a\\xa6\\xa5\\xa7\\xb9\\xa2\\x1f\\x0e\\xf8\\x28\\xf8\\x73\\x61\\x0a\\xf3\\x1d\\x82\\x0a\\x0e\\xf8\"\n\"\\x31\\xf7\\xa8\\x15\\xd1\\x06\\x9f\\x98\\x96\\x9b\\x99\\x83\\x91\\x7a\\x1f\\x78\\x06\\xae\\xf7\\x36\\x05\\x8c\\x91\\x8c\\x92\\x8f\\x1a\\xb5\\x67\\xa8\\x55\\x71\"\n\"\\x53\\x7f\\x80\\x74\\x1e\\x7e\\x85\\x85\\x82\\x7f\\x1a\\x81\\x93\\x82\\x96\\x90\\x8d\\x8b\\x8f\\x95\\x1e\\x96\\xa9\\xaa\\x92\\x9c\\x1b\\xaa\\x9f\\x7f\\x78\\x88\"\n\"\\x8b\\x89\\x8a\\x88\\x1f\\x83\\x64\\x05\\x92\\x70\\x7a\\x8d\\x74\\x1b\\x32\\x43\\x57\\x4c\\x60\\xad\\x71\\xc2\\xb1\\xa7\\x91\\x9d\\xb3\\x1f\\x97\\xc2\\x15\\x74\"\n\"\\x63\\x6b\\x82\\x64\\x1b\\x6e\\x78\\x96\\x9b\\xae\\xbd\\xa9\\xc4\\xa1\\x9b\\x89\\x84\\xa4\\x1f\\x0e\\xf7\\xea\\x22\\x1d\\xe7\\x4b\\x1d\\xfb\\x7e\\x21\\x1d\\xe5\"\n\"\\x06\\x5c\\xfb\\x6c\\xfb\\x20\\x44\\x05\\x7a\\x82\\x85\\x84\\x7e\\x1a\\x7f\\x94\\x81\\x96\\x91\\x8f\\x8d\\x90\\x96\\x1e\\xf7\\x01\\xc3\\x63\\xfb\\x4e\\x05\\x2f\"\n\"\\x21\\x1d\\xf8\\x5d\\x06\\xb7\\xf7\\x5f\\x05\\x8d\\x94\\xf7\\x48\\x1d\\x87\\x1e\\x69\\xfb\\x2e\\x05\\xfb\\x9b\\x06\\xb8\\xf7\\x65\\xf7\\x40\\xe3\\x05\\x9e\\x95\"\n\"\\x90\\x91\\x98\\x1a\\x97\\x82\\x94\\x80\\x85\\x82\\x88\\x88\\x84\\x1e\\xfb\\x21\\x42\\x05\\x0e\\xa7\\x1d\\x0e\\xf8\\x25\\xf7\\x9e\\x15\\xce\\x06\\x86\\x76\\x8a\"\n\"\\x7e\\x05\\x80\\x95\\x82\\x97\\x9b\\x28\\x1d\\x9f\\xea\\x05\\x8d\\x91\\x8b\\x8d\\xf7\\x5c\\x1d\\x87\\x1e\\x86\\x74\\x05\\x48\\x34\\x0a\\xf7\\x48\\x06\\x74\\x22\"\n\"\\xf7\\x02\\x0a\\xad\\xf7\\x32\\x05\\xfb\\xd5\\x06\\xfb\\x42\\xfb\\x25\\xfb\\x37\\xfb\\x59\\x4f\\xa2\\x51\\xb0\\x68\\x1f\\x6a\\xad\\xbe\\x7a\\xc9\\x1b\\xf7\\xdf\"\n\"\\x06\\xa8\\xf7\\x1b\\x05\\x8c\\x8c\\x8b\\x92\\x8e\\x1a\\x97\\xea\\x0a\\xbb\\xf8\\x61\\x15\\x3f\\x0a\\x6f\\x06\\x5d\\x65\\x95\\x9e\\x72\\x1f\\x69\\xa6\\x76\\xbc\"\n\"\\xc2\\x1a\\xcd\\xa1\\xd3\\xb0\\xc0\\x1e\\xd5\\xbf\\xce\\xaf\\xe4\\x1b\\x0e\\xf8\\x3c\\xf8\\xd4\\x15\\x2a\\x31\\x35\\x2e\\x47\\xbf\\x58\\xd2\\xec\\xe6\\xe1\\xe7\"\n\"\\xd1\\x58\\xbd\\x42\\x1f\\x83\\x5c\\x15\\xbd\\xad\\x6a\\x5c\\x4c\\x4b\\x4e\\x4a\\x58\\x68\\xac\\xba\\xcb\\xca\\xc7\\xcf\\x1f\\x0e\\x81\\x0a\\x0e\\x3c\\x1d\\x0e\"\n\"\\xf8\\x5a\\xf8\\xef\\x15\\xfb\\x38\\x24\\x0a\\x79\\x7b\\x93\\x85\\x9f\\x1f\\xf7\\x02\\x06\\x5b\\xfb\\x73\\xfb\\x0a\\x50\\x05\\x79\\x82\\x85\\x84\\x7e\\x1a\\x7f\"\n\"\\x94\\x82\\x97\\x91\\x8f\\x8c\\x90\\x96\\x1e\\xe2\\xb7\\x5c\\xfb\\x6f\\x05\\xfb\\x2f\\x29\\x1d\\xf7\\xfd\\x06\\xa1\\x9a\\x38\\x1d\\xfb\\x2f\\x06\\xbf\\xf7\\x86\"\n\"\\xf7\\x0b\\xc6\\x05\\x9d\\x94\\x91\\x92\\x99\\x1a\\x97\\x82\\x94\\x7f\\x85\\x88\\x8a\\x85\\x7f\\x1e\\x33\\x5f\\x05\\x0e\\xc3\\x1d\\x7e\\x81\\x88\\xcb\\x1d\\x0e\"\n\"\\xf9\\x04\\xf7\\x57\\x15\\x94\\xb7\\x8e\\xa1\\xf7\\x3b\\x1d\\x53\\x55\\x67\\x49\\x61\\x1f\\xc9\\x7b\\x5f\\xb3\\x57\\x1b\\x20\\x21\\xfb\\x23\\xfb\\x23\\x2d\\xbd\"\n\"\\x46\\xcf\\xc2\\xc3\\xb2\\xd0\\xb8\\x1f\\x48\\x9c\\xba\\x62\\xc5\\x1b\\xae\\xb6\\x9d\\xaf\\xbc\\x1f\\xa3\\x9d\\x91\\x92\\xe8\\x0a\\x6f\\x1b\\x58\\x67\\xc0\\xd7\"\n\"\\x93\\x8c\\x94\\x8c\\x99\\x1f\\x97\\xbe\\x15\\xe4\\xab\\xb9\\xba\\xc2\\x1b\\xba\\xa4\\x6a\\x4d\\x7d\\x8b\\x82\\x89\\x79\\x1f\\xfb\\xe0\\xf7\\x1c\\x15\\xb7\\x88\"\n\"\\xaa\\x5c\\x49\\x1a\\x5a\\x7c\\x56\\x70\\x5f\\x1e\\x6e\\x5b\\x5e\\x68\\x69\\x89\\x08\\x60\\x89\\x68\\xbe\\xce\\x1a\\xbe\\x9a\\xbf\\xa6\\xb7\\x1e\\xa9\\xbc\\xbc\"\n\"\\xb0\\xab\\x89\\x08\\x0e\\xf7\\x50\\xf7\\xd9\\x15\\x50\\xfb\\xa6\\x4d\\x1d\\xf0\\x06\\xf0\\xf8\\x6b\\x05\\xb8\\x95\\xbe\\xaf\\xc1\\x1b\\xba\\xac\\x6c\\x5e\\x6c\"\n\"\\x7c\\x71\\x6d\\x78\\x1f\\x7d\\x75\\x73\\x83\\x76\\x1b\\x86\\x06\\x79\\x7c\\x7e\\x7b\\x7c\\x93\\x85\\xa0\\x1f\\x90\\x06\\xd7\\xcc\\x51\\x48\\x36\\x4f\\x38\\x4e\"\n\"\\x6d\\x7c\\x9c\\xad\\x91\\x8b\\x90\\x8c\\x91\\x1f\\x8c\\x8f\\x8b\\x8e\\x8e\\x1a\\x96\\x81\\x93\\x7f\\x76\\x7f\\x79\\x6c\\x4c\\xab\\x67\\xc4\\xc0\\xbc\\xa9\\xc4\"\n\"\\xb1\\x1e\\xa5\\xb3\\x9c\\xc0\\xb6\\x1a\\xce\\x68\\xc0\\x48\\xaa\\x1e\\xbe\\xab\\xa4\\xb5\\xbe\\x1a\\xd2\\x59\\xbc\\x41\\x3b\\x3c\\x51\\x43\\x7c\\x1e\\x75\\x2a\"\n\"\\x05\\x5b\\x29\\x1d\\x0e\\xf8\\x58\\xf8\\xf8\\x15\\xfb\\x05\\x6a\\x7c\\x87\\x85\\x87\\x08\\x85\\x87\\x86\\x83\\x84\\x1a\\x81\\x92\\x84\\x94\\x8f\\x8e\\x8b\\x8c\"\n\"\\x8e\\x1e\\xcc\\x9f\\x54\\xfb\\x97\\x05\\x51\\x06\\x70\\x7f\\x84\\x7a\\x80\\x92\\x85\\x98\\x1f\\xf7\\x47\\x06\\x99\\xf7\\x5f\\x1d\\x0e\\xf8\\x76\\xf8\\x19\\x15\"\n\"\\xfb\\x55\\x07\\x77\\x94\\x80\\x9c\\x9c\\x94\\x96\\x9f\\x1e\\xf7\\x88\\xfc\\x46\\x07\\x75\\x80\\x82\\x7b\\x7a\\x96\\x82\\xa1\\x1f\\x0e\\xf7\\x3f\\x95\\x15\\x77\"\n\"\\xa7\\xa0\\x85\\xb2\\x1b\\xc9\\xc7\\xa2\\xb7\\xc0\\x1f\\x58\\xdc\\x07\\xa0\\x96\\x94\\x9b\\x9b\\x80\\x94\\x76\\x1f\\x6e\\xf8\\x05\\xfb\\x0d\\x06\\x74\\x81\\x83\"\n\"\\x7a\\x7b\\x97\\x82\\xa0\\x1f\\xd0\\xfb\\x8d\\x06\\x51\\x55\\x51\\x6f\\x49\\x1b\\x58\\x69\\xad\\xbd\\x1f\\xf7\\xc1\\x26\\x07\\x75\\x81\\x83\\x7a\\x7b\\x96\\x82\"\n\"\\xa0\\x1f\\xbc\\xfc\\xa9\\x06\\x76\\x94\\x80\\x9c\\x9c\\x94\\x96\\xa0\\x1e\\x0e\\xf7\\x97\\xf8\\x9c\\x15\\xc7\\x06\\x7d\\x49\\x05\\x8a\\x89\\x8b\\x89\\x89\\x1a\"\n\"\\x80\\x93\\x83\\x96\\x98\\x95\\x94\\x9a\\x8e\\x1e\\xa3\\xf7\\x02\\x05\\xfb\\x91\\x06\\x74\\xfb\\x00\\x05\\x8a\\x88\\x8b\\x89\\x88\\x1a\\x80\\x8c\\x92\\x84\\x95\"\n\"\\x1b\\x98\\x95\\x94\\x9a\\x8e\\x1f\\x9a\\xce\\x05\\xc7\\x06\\x57\\xfb\\x83\\x05\\x5a\\x8f\\x1d\\xf7\\x20\\x06\\x9b\\x98\\x96\\x99\\x97\\x83\\x91\\x7d\\x1f\\x5c\"\n\"\\x06\\xf7\\xd1\\xbb\\x15\\xf6\\xf7\\x34\\x5e\\xfb\\x64\\x05\\x6b\\x8f\\x1d\\xdf\\x06\\x9b\\x98\\x94\\x1d\\x83\\x06\\xbf\\xf7\\x83\\x05\\x90\\x06\\x9c\\x97\\x94\"\n\"\\x1d\\x4d\\x06\\xfb\\x07\\xfb\\x41\\x61\\xf7\\x41\\x05\\x4c\\x8f\\x1d\\x8e\\x06\\x57\\xfb\\x83\\x05\\x81\\x06\\x7b\\x7f\\x80\\x7d\\x80\\x93\\x84\\x98\\x1f\\xdf\"\n\"\\x06\\x9b\\x98\\x94\\x1d\\x6d\\x06\\xb8\\xf7\\x66\\xb3\\xfb\\x36\\x05\\x0e\\x84\\x0a\\xf8\\xe0\\xf8\\x6d\\x15\\x96\\x95\\x8e\\x90\\x93\\x1a\\x96\\x83\\x92\\x3b\"\n\"\\x0a\\x81\\x81\\x87\\x85\\x83\\x1a\\x81\\x93\\x83\\x96\\x93\\x8d\\x8c\\x97\\x98\\x1e\\xf7\\x1b\\xc9\\x1d\\xf7\\x4e\\xfb\\x94\\x15\\xf7\\x64\\xf7\\x32\\x9d\\x9e\"\n\"\\xbf\\x1a\\xbb\\x64\\xb0\\x59\\x61\\x62\\x77\\x68\\x6e\\x1e\\x7f\\x7c\\x83\\x7d\\x82\\x1a\\x82\\x92\\x84\\x95\\x95\\x92\\x90\\x97\\x91\\x1e\\xa9\\x9b\\xac\\xa0\"\n\"\\xad\\x1b\\xab\\xa3\\x75\\x6e\\x76\\x7d\\x77\\x68\\x6f\\x1f\\x52\\x5c\\x48\\x56\\x51\\x61\\x85\\x86\\x18\\x81\\x5c\\x05\\xf7\\x7f\\x06\\x94\\xb4\\x05\\x8c\\x8e\"\n\"\\x8b\\x8e\\x8c\\x1a\\x94\\x84\\x92\\x81\\x7f\\x81\\x82\\x7e\\x88\\x1e\\x8a\\x07\\x0e\\xf8\\x19\\xf7\\xbb\\x15\\xf7\\x44\\xf7\\x1d\\x0a\\xfb\\x42\\x06\\xab\\xf7\"\n\"\\x2b\\x05\\x8c\\x8f\\x8c\\x90\\x8e\\x28\\x0a\\x7b\\x80\\x80\\x77\\x87\\x1e\\x6a\\xfb\\x2d\\x05\\xfb\\x44\\x8e\\x1d\\xf7\\x42\\x06\\x6a\\xfb\\x2c\\x05\\x89\\x82\"\n\"\\x8b\\x8a\\x88\\xf7\\x1b\\x0a\\x95\\xa0\\x8f\\x1e\\xfb\\x8b\\x30\\x15\\x74\\x7d\\x80\\x79\\x7d\\x94\\x84\\x9f\\x1f\\xf8\\x25\\xf7\\x1d\\x0a\\x0e\\xf7\\x5a\\xf7\"\n\"\\x14\\x93\\x1d\\xf6\\xda\\x47\\xc3\\x2c\\x1f\\xfb\\x1f\\x06\\x96\\xbb\\x05\\xf7\\x1a\\x23\\x1d\\xfb\\x7e\\x64\\x0a\\x53\\x0a\\xfb\\x18\\x06\\xa7\\xf7\\x14\\x15\"\n\"\\xbd\\xf7\\x7e\\x05\\xf7\\x25\\x06\\xcd\\xbc\\x64\\x55\\x41\\x34\\x48\\x2b\\x1f\\x0e\\xf7\\xaa\\xf8\\xf8\\x15\\xfb\\x00\\x6c\\x76\\x85\\x85\\x87\\x08\\x85\\x87\"\n\"\\x86\\x83\\x84\\x1a\\x82\\x93\\x83\\x94\\x8f\\x8d\\x8b\\x8c\\x8f\\x1e\\xcc\\x9f\\x54\\xfb\\x97\\x05\\x8c\\x75\\x75\\x8b\\x7c\\x1b\\x73\\x7d\\x82\\x7b\\x80\\x93\"\n\"\\x85\\x97\\x1f\\xf7\\x46\\x06\\x9b\\x97\\x96\\x98\\x96\\x84\\x91\\x7e\\x1f\\x47\\x06\\xf8\\x3a\\xf7\\x44\\x15\\x96\\x94\\x8e\\x91\\x93\\x1a\\x95\\x83\\x93\\x3b\"\n\"\\x0a\\x81\\x81\\x87\\x85\\x83\\x1a\\x81\\x93\\x83\\x96\\x93\\x8d\\x8d\\x96\\x98\\x1e\\xf7\\xe0\\xa8\\x15\\x80\\x58\\x05\\x77\\x06\\x6d\\x80\\x85\\x79\\x80\\x92\"\n\"\\x85\\x98\\x1f\\xe1\\x06\\x9a\\x97\\x96\\x98\\x96\\x84\\x91\\x7e\\x1f\\x81\\x06\\x96\\xbe\\x05\\xa7\\x96\\x92\\x9c\\x96\\x83\\x91\\x7f\\x1f\\x81\\x06\\xb9\\xf7\"\n\"\\x6a\\x05\\x4d\\x06\\xfb\\x43\\xfb\\x6d\\x82\\x65\\x05\\xf7\\x32\\xb4\\x15\\x26\\x06\\xf7\\x1d\\xf7\\x3c\\x05\\x0e\\xf8\\xc1\\xf7\\x95\\x15\\xa2\\x99\\x96\\xf7\"\n\"\\x4c\\x1d\\x79\\x7d\\x2a\\x0a\\xf7\\x3f\\xfb\\x11\\x15\\x69\\x6b\\x6c\\x6a\\x73\\x9e\\x78\\xa5\\xae\\xab\\xa9\\xac\\xa5\\x78\\x9d\\x70\\x1f\\xe5\\xf8\\x2c\\x15\"\n\"\\x68\\xf4\\x0a\\x71\\x1f\\x0e\\xf7\\xda\\xf8\\xcf\\x15\\xa0\\x82\\x96\\x7a\\x7b\\x82\\x80\\x76\\x1e\\xfb\\x9a\\x07\\x77\\x94\\x80\\x9c\\x9b\\x94\\x96\\x9f\\x1e\"\n\"\\xfb\\x1d\\x04\\xa0\\x82\\x96\\x7a\\x7b\\x82\\x80\\x76\\x1e\\xfb\\x9a\\x07\\x76\\x94\\x80\\x9b\\x9c\\x94\\x96\\xa0\\x1e\\x0e\\xf8\\x4a\\xf9\\x0e\\x15\\x2a\\x32\"\n\"\\x36\\x30\\x46\\xbe\\x59\\xd2\\xeb\\xe4\\xe1\\xe6\\xcf\\x58\\xbd\\x45\\x1f\\x7e\\x58\\x15\\xbb\\xac\\x6c\\x5f\\x4e\\x4f\\x52\\x4c\\x5d\\x6a\\xaa\\xb8\\xc6\\xc7\"\n\"\\xc5\\xc8\\x1f\\x0e\\xf7\\xa9\\xf8\\xe1\\x15\\x25\\x21\\x1d\\xbb\\x06\\xfb\\x25\\xfd\\x31\\xaa\\x0a\\x42\\xce\\xfb\\x02\\x41\\x55\\x73\\x50\\x4c\\xe9\\x0a\\xd8\"\n\"\\xef\\xf7\\x23\\x0a\\xf7\\x68\\xf7\\x0e\\x0a\\xb7\\x8a\\xaa\\xf7\\x09\\x0a\\x76\\xf7\\x25\\x1d\\xd7\\xd4\\xc9\\xcb\\xa8\\x7f\\xa1\\x6f\\x9e\\x1f\\xb5\\xa4\\x9f\"\n\"\\xa9\\xaf\\x1a\\xb8\\x67\\xaa\\x57\\x56\\xf2\\x0a\\x9e\\xa5\\x94\\xa7\\x1b\\xac\\xa1\\x7a\\x71\\x6b\\x69\\x70\\x62\\x1f\\xf8\\x03\\x90\\x15\\x94\\x94\\x8f\\x92\"\n\"\\x92\\x1a\\x95\\x83\\x93\\x3b\\x0a\\x82\\x82\\x87\\x84\\x83\\x1a\\x81\\x92\\x83\\x96\\x93\\x8d\\x8c\\x97\\x98\\x1e\\xf8\\x07\\xa8\\x15\\x80\\x58\\x05\\x76\\x06\"\n\"\\x6d\\x80\\x84\\x7a\\x80\\x93\\x85\\x97\\x1f\\xe1\\x06\\x9b\\x97\\x96\\x98\\x96\\x83\\x91\\x7f\\x1f\\x81\\x06\\x95\\xbe\\x05\\xa7\\x96\\x92\\x9c\\x96\\x84\\x91\"\n\"\\x7e\\x1f\\x81\\x06\\xb9\\xf7\\x6a\\x05\\x4e\\x06\\xfb\\x44\\xfb\\x6d\\x83\\x65\\x05\\xf7\\x32\\xb4\\x15\\x26\\x06\\xf7\\x1d\\xf7\\x3c\\x05\\x0e\\xf7\\xb6\\xf7\"\n\"\\xbd\\x15\\xf7\\x66\\xf7\\x34\\x9c\\x9c\\xc1\\x1a\\xb9\\x63\\xb0\\x59\\x66\\x66\\x7b\\x6f\\x6e\\x1e\\x7a\\x79\\x7f\\x78\\x7f\\x1a\\x83\\x93\\x84\\x94\\x95\\x92\"\n\"\\x90\\x97\\x91\\x1e\\xa9\\x9b\\xad\\x9f\\xac\\x1b\\xab\\xa4\\x75\\x6f\\x70\\x80\\x7e\\x47\\x55\\x1f\\x53\\x5e\\x61\\x6a\\x55\\x63\\x84\\x86\\x18\\x81\\x5c\\x05\"\n\"\\xf7\\x80\\x06\\x94\\xb4\\x05\\x92\\x07\\x95\\x8a\\x85\\x91\\x81\\x1b\\x7f\\x81\\x82\\x7e\\x89\\x1f\\x8a\\x8a\\x05\\x0e\\xf7\\xb9\\xf7\\x91\\x15\\xc5\\x06\\xaa\"\n\"\\x7f\\xa7\\x5b\\x9e\\x40\\x08\\xb7\\x06\\x9b\\x98\\x97\\x9a\\x97\\x83\\x92\\x7d\\x1f\\x80\\x06\\x72\\xcc\\x83\\x9a\\x76\\xa1\\x08\\xc1\\xa0\\xa9\\xae\\xb8\\x1a\"\n\"\\xba\\x66\\xaa\\x53\\x1e\\xfb\\x1e\\x06\\x7a\\x7e\\x80\\x7b\\x7f\\x93\\x84\\x99\\x1f\\x9d\\x06\\x58\\xfb\\x7f\\x05\\x77\\x06\\x7a\\x7e\\x7f\\x7c\\x7f\\x93\\x84\"\n\"\\x99\\x1f\\xeb\\x06\\x9c\\x98\\x97\\x9a\\x97\\x83\\x92\\x7d\\x1f\\x6e\\x06\\xa8\\xf7\\x1b\\x15\\xa1\\xef\\x05\\xd4\\x06\\xad\\x9f\\x7c\\x72\\x68\\x61\\x72\\x52\"\n\"\\x1f\\xd3\\xf7\\xaa\\xc6\\x1d\\xf7\\x37\\xf7\\xc7\\x15\\x74\\x7d\\xf0\\x0a\\xf8\\x26\\x2a\\x1d\\x0e\\xf8\\xc8\\xf8\\xca\\x15\\x95\\x8f\\x92\\x95\\x97\\x1a\\x97\"\n\"\\x82\\x94\\x7f\\x88\\x88\\x8b\\x8a\\x89\\x1e\\x25\\x63\\x05\\xa6\\x56\\x51\\x9e\\x70\\x1b\\x7a\\x7d\\x7d\\x7a\\x81\\x91\\x85\\x99\\x88\\x1f\\xaf\\x83\\x9d\\x86\"\n\"\\xa4\\x7f\\x52\\x75\\x18\\x81\\x87\\x85\\x81\\x7f\\x1a\\x7e\\x95\\x81\\x97\\x8c\\x8f\\x8c\\x8c\\x8e\\x1e\\xec\\xb3\\xa7\\x74\\xae\\x54\\x9b\\x5f\\x19\\xa7\\x65\"\n\"\\x67\\x97\\x5b\\x1b\\xfb\\x28\\xfb\\x1d\\xfb\\x16\\xfb\\x1f\\x21\\xda\\x41\\xf7\\x03\\xd8\\xd6\\xac\\xc6\\xc4\\x1f\\xbf\\xc0\\xaa\\xdb\\xd9\\x1a\\xe5\\x66\\xe9\"\n\"\\x4e\\xcd\\x1e\\x22\\xfb\\x2e\\x15\\xe2\\xc6\\x53\\x39\\x20\\x5f\\x1d\\x0e\\xf8\\x03\\xf7\\xd1\\x15\\xfb\\x01\\xf7\\x1c\\x05\\x94\\x84\\x86\\x8e\\x83\\x1b\\x7b\"\n\"\\x7c\\x7d\\x7c\\x86\\x8e\\x84\\x90\\x85\\x1f\\xf7\\x01\\xfb\\x1c\\xfb\\x3d\\xfb\\x1c\\x05\\x7e\\x81\\x87\\x84\\x81\\x3e\\x0a\\x93\\x8e\\x93\\x95\\x1e\\xf7\\x3c\"\n\"\\xf7\\x1d\\xf7\\x01\\xfb\\x1c\\x05\\x82\\x93\\x90\\x88\\x93\\x1b\\x9b\\x9a\\x99\\x9a\\x90\\x88\\x91\\x86\\x92\\x1f\\xfb\\x01\\xf7\\x1c\\xf7\\x3c\\xf7\\x1c\\x05\"\n\"\\x99\\x96\\x8f\\x91\\x95\\x1a\\x97\\x81\\x94\\x7e\\x84\\x84\\x88\\x83\\x81\\x1e\\x0e\\xf8\\x17\\xf7\\x0e\\x0a\\xb6\\x8a\\xaa\\xbd\\x0a\\xa9\\x7f\\xa0\\x70\\x9e\"\n\"\\x1f\\xb4\\xa4\\x9f\\xa9\\xaf\\x1a\\xb8\\x67\\xaa\\x57\\x57\\xf2\\x0a\\x9d\\xa5\\x94\\xa8\\x1b\\xab\\xa1\\x7a\\x72\\x6a\\x6a\\x70\\x62\\x1f\\x0e\\xf7\\x60\\xf7\"\n\"\\x99\\x15\\x89\\x82\\x8a\\x81\\x82\\x1a\\x45\\xc2\\x55\\xd2\\xb4\\xb6\\x9c\\xaa\\xb0\\x1e\\x9c\\x9a\\x91\\x93\\x95\\x1a\\x97\\x83\\x92\\x80\\x83\\x86\\x89\\x84\"\n\"\\x83\\x1e\\x6a\\x68\\x70\\x7f\\x68\\x1b\\x5a\\x67\\xaf\\xbc\\x94\\x8c\\x91\\x8c\\x92\\x1f\\x93\\xb1\\x05\\xc6\\x98\\xc1\\xba\\xc2\\x1b\\xa2\\xa2\\x83\\x7f\\x98\"\n\"\\x1f\\x8f\\x87\\x94\\x7d\\x89\\x1a\\x8a\\x76\\x05\\x85\\x96\\x83\\x94\\x98\\x96\\x94\\x9a\\x8e\\x1e\\x99\\xca\\x05\\x8c\\x8e\\x8b\\x8e\\x8d\\x1a\\x96\\x83\\x93\"\n\"\\x7f\\x80\\x82\\x84\\x80\\x86\\x1e\\x9d\\x6f\\x76\\x92\\x6c\\x1b\\x3c\\x3c\\x49\\x3a\\x7a\\x1f\\xf7\\x67\\xf7\\xa4\\xc6\\x1d\\x29\\x0a\\xf7\\x11\\xf7\\x73\\x15\"\n\"\\x9c\\x97\\x8e\\x8f\\x97\\x28\\x0a\\x83\\x86\\x89\\x83\\x80\\x1e\\xfb\\x1c\\x29\\x05\\x7e\\x81\\x86\\x84\\x80\\x3e\\x0a\\x8f\\x47\\x0a\\x29\\x0a\\xad\\xf7\\xa5\"\n\"\\xe5\\x1d\\x8d\\x92\\x95\\x7f\\x0a\\x91\\x1b\\x9b\\x9a\\x99\\x9a\\x93\\x89\\x8e\\x82\\x94\\x1f\\x0e\\x29\\x0a\\x37\\xf7\\x88\\x15\\x69\\x6b\\x42\\x1d\\xae\\xbe\"\n\"\\x0a\\x29\\x0a\\x68\\xf7\\x99\\x15\\x94\\x83\\x87\\x8d\\x83\\x1b\\x7c\\x7c\\x7d\\x7c\\x85\\x8f\\x83\\x90\\x86\\x44\\x1d\\x92\\x91\\xee\\x0a\\x29\\x0a\\xb5\\xf7\"\n\"\\xb9\\xf7\\x4a\\x1d\\xc5\\xb7\\x69\\xab\\x5c\\x1f\\x84\\x60\\x15\\xa5\\x9d\\x7b\\x73\\x6c\\x6a\\x6c\\x68\\x71\\x78\\x9b\\xa2\\xac\\xac\\xa9\\xaf\\x1f\\x0e\\x29\"\n\"\\x0a\\xf7\\x34\\xf7\\x80\\x5b\\x0a\\x67\\x81\\x85\\x7b\\x1b\\x81\\x81\\x90\\x9d\\x6d\\xe3\\x0a\\x73\\x80\\x71\\x68\\xf7\\x07\\x1d\\x94\\x87\\x80\\x9c\\x1f\\x73\"\n\"\\xaf\\x9d\\x84\\xa2\\x1b\\xa5\\xa5\\x97\\xa9\\xae\\x1f\\x9f\\x9b\\x8f\\x91\\x96\\x1a\\x96\\x81\\x94\\x7f\\x1e\\x0e\\xf7\\xd3\\x7b\\x15\\x92\\x06\\xca\\xd8\\xab\"\n\"\\xbe\\xc8\\x1f\\xa8\\xa4\\x92\\x94\\x98\\x1a\\x96\\x82\\x93\\x7f\\x81\\x86\\x88\\x83\\x82\\x1e\\x4d\\x48\\x54\\x72\\x47\\xf7\\x0b\\x1d\\xb8\\xba\\x7b\\x74\\xa3\"\n\"\\x1f\\x93\\x83\\xa0\\x6c\\x87\\x1a\\x89\\x65\\x05\\x85\\x98\\x82\\x93\\x9c\\x60\\x1d\\x8b\\x8f\\xdc\\x0a\\x88\\x79\\x05\\x4e\\x0a\\x49\\xa9\\x4c\\xbe\\x63\\x1e\"\n\"\\xa3\\x79\\xa1\\x81\\xb2\\x81\\x7c\\x46\\x18\\xf6\\x1d\\xb7\\x77\\xb5\\xc4\\xb6\\xaf\\xbb\\xa9\\x79\\x9c\\x68\\x8e\\x1f\\x0e\\x2d\\x1d\\xf8\\x06\\xf9\\x40\\x15\"\n\"\\x99\\x95\\x90\\x71\\x0a\\x87\\x7f\\x1d\\x8f\\x47\\x0a\\x2d\\x1d\\xf7\\xac\\xf9\\x72\\x15\\xfb\\x33\\xfb\\x00\\x05\\x7b\\x80\\x86\\x85\\x7f\\x3e\\x0a\\xf7\\x06\"\n\"\\x1d\\x81\\x94\\x1f\\x0e\\x2d\\x1d\\xf7\\x36\\xf9\\x55\\x77\\x1d\\x2d\\x1d\\xf7\\x60\\xf9\\x66\\xe3\\x1d\\x3b\\x1d\\xf7\\x72\\xf9\\x40\\x2d\\x0a\\x3b\\x1d\\xf7\"\n\"\\x19\\xf9\\x72\\x3d\\x0a\\x81\\x86\\x85\\xef\\x0a\\x90\\x8d\\x92\\x96\\x1e\\xf7\\x0e\\xdf\\xe1\\x38\\x05\\x84\\x93\\x90\\x88\\x91\\x1b\\x9b\\x9a\\x99\\x9a\\x93\"\n\"\\x8a\\x8e\\x81\\x94\\x1f\\x0e\\xf8\\x48\\x22\\x1d\\xf7\\x1b\\x2e\\x0a\\xfb\\xd3\\x83\\x1d\\xf7\\xd4\\x06\\xa1\\x9a\\x97\\x9c\\x9b\\x83\\x91\\x76\\x1f\\xfb\\x18\"\n\"\\x06\\x9a\\xf9\\x55\\xaf\\x0a\\x3b\\x1d\\xcb\\xf9\\x66\\x15\\x94\\x83\\x86\\x8d\\x84\\x1b\\x7b\\x7c\\x7d\\x7c\\x85\\x8e\\x84\\x92\\x85\\x44\\x1d\\x92\\x91\\x88\"\n\"\\x91\\x1b\\x9d\\xf7\\x16\\x0a\\x54\\x1d\\xf7\\x29\\xf9\\x80\\xf7\\x12\\x1d\\x80\\x8f\\x75\\x1b\\x71\\x73\\x80\\x71\\x68\\x1f\\x76\\x7b\\x84\\xf7\\x00\\x0a\\xa7\"\n\"\\xad\\x95\\x91\\x9d\\x1b\\x96\\x94\\x87\\x80\\x9c\\x1f\\x73\\xb0\\x9b\\x84\\xa3\\x1b\\xa5\\xa5\\x97\\xa9\\xaf\\x1f\\x9e\\x9b\\x8f\\x91\\x96\\x1a\\x96\\x81\\x94\"\n\"\\x7f\\x1e\\x0e\\x31\\x0a\\xf7\\x29\\xf7\\x67\\x15\\x9a\\x96\\x8f\\x90\\x97\\x46\\x0a\\x80\\x1e\\xfb\\x1c\\x29\\x05\\x7e\\x82\\x86\\x83\\x80\\x1a\\x7f\\x94\\x82\"\n\"\\x97\\x93\\x8e\\x8d\\x93\\x98\\x1e\\x0e\\x31\\x0a\\xbe\\xf7\\x99\\xcd\\x0a\\xe1\\x38\\x05\\x84\\x92\\x90\\x88\\x92\\x1b\\x9a\\x9a\\x99\\x9b\\x92\\x89\\x8e\\x82\"\n\"\\x94\\x1f\\x0e\\x31\\x0a\\x48\\xf7\\x7c\\x15\\x69\\x6a\\x42\\x1d\\xaf\\xbe\\x0a\\x31\\x0a\\x72\\xf7\\x8d\\x15\\x94\\x83\\x87\\x8d\\x84\\x1b\\x7b\\x7c\\x7d\\x7c\"\n\"\\x85\\x8e\\x84\\x91\\x7d\\x0a\\x91\\x88\\x91\\x1b\\x9c\\xf7\\x11\\x0a\\x80\\x98\\x1f\\x0e\\xf8\\x3b\\xf8\\xd3\\x15\\xfb\\x3b\\xfb\\x32\\xfb\\x46\\xfb\\x52\\xfb\"\n\"\\x17\\xdc\\x2f\\xf7\\x08\\xdd\\xda\\xb2\\xd4\\xcc\\x1f\\xca\\xd2\\xb1\\xea\\xe4\\x1a\\xf7\\x19\\x3b\\xe6\\xfb\\x0b\\x1e\\x85\\x58\\x15\\xe3\\xcb\\x3f\\x21\\xfb\"\n\"\\x2c\\xfb\\x17\\xfb\\x2f\\xfb\\x14\\x2c\\x4b\\xd4\\xf6\\xf7\\x33\\xf7\\x16\\xf7\\x2a\\xf7\\x1c\\x1f\\xf7\\x4d\\xf7\\x74\\x15\\x84\\x85\\x89\\x84\\x83\\x1f\\x6e\"\n\"\\x67\\x81\\x9f\\x1d\\x6e\\x7f\\x8f\\x75\\x1b\\x71\\x73\\xa3\\x0a\\x94\\x87\\x80\\x9c\\x1f\\x73\\xb0\\x9c\\x84\\xa2\\x1b\\xa5\\xa5\\x97\\xa9\\xaf\\x1f\\x9e\\x9b\"\n\"\\x8f\\x91\\x56\\x0a\\xf8\\xbd\\xf8\\xa0\\x15\\xf5\\x0a\\xa0\\x79\\x1f\\xa6\\x76\\xad\\x7f\\xd0\\x7e\\xcf\\x80\\x9e\\x85\\x9f\\x7c\\x08\\x9b\\x80\\x96\\x75\\x77\"\n\"\\x1a\\x3b\\x37\\x4a\\x24\\x63\\x62\\x96\\x9c\\xa7\\x0a\\xc0\\x75\\xcd\\x1b\\xf7\\x1e\\xf7\\x04\\xe5\\xf7\\x03\\xaf\\x7b\\xad\\x71\\x9d\\x1f\\x71\\x62\\x1d\\xd0\"\n\"\\xd7\\xc5\\xe3\\xb0\\xae\\x80\\x7b\\x9c\\x1e\\x94\\x83\\x9f\\x6d\\x87\\x1a\\x89\\x61\\x05\\x85\\x97\\x82\\x95\\x9b\\x28\\x1d\\xa0\\xef\\x05\\x8c\\x8f\\x8c\\x91\"\n\"\\x8e\\x1a\\x96\\x82\\x94\\x7e\\x7b\\x81\\x81\\x77\\x86\\x1e\\xfb\\x00\\xe9\\xbf\\x0a\\x85\\x85\\x8e\\x85\\x1b\\x7a\\x7d\\x92\\x1d\\x2e\\x1d\\x9e\\xf8\\xb9\\xb0\"\n\"\\x0a\\x2e\\x1d\\x40\\xf8\\xeb\\xa8\\x0a\\x2e\\x1d\\xfb\\x55\\xf8\\xce\\xbb\\x0a\\xaa\\xac\\xa4\\x78\\x9e\\x70\\x1f\\x0e\\x2e\\x1d\\xfb\\x27\\xf8\\xdf\\x15\\x93\"\n\"\\x83\\x86\\x8e\\xe7\\x0a\\x92\\xf0\\x1d\\x47\\x1d\\xf7\\x75\\xf9\\x40\\xb0\\x0a\\x47\\x1d\\x98\\xf9\\x55\\x15\\x50\\x0a\\xf7\\x72\\x16\\x68\\x6b\\x35\\x0a\\xa5\"\n\"\\x78\\x9d\\x70\\x1f\\x0e\\x60\\x0a\\xf7\\xe4\\xf9\\x06\\x78\\x0a\\x85\\x89\\x84\\x81\\x4f\\x0a\\x5d\\x0a\\xc9\\xf8\\x19\\x15\\x9a\\x96\\x8f\\x90\\x97\\x46\\x0a\"\n\"\\x7f\\x41\\x1d\\x7c\\x80\\x87\\x85\\x80\\x3e\\x0a\\x90\\x8d\\x93\\x96\\x1e\\x0e\\x37\\x0a\\x6e\\xf8\\x4b\\x15\\xfb\\x33\\xfb\\x01\\x05\\x7c\\x63\\x0a\\x59\\x0a\"\n\"\\x74\\x0a\\x77\\x1f\\x5b\\x06\\xf7\\x19\\x0a\\x93\\x92\\x1a\\xc9\\x51\\xb5\\x36\\x6a\\x0a\\xd7\\xa6\\x90\\xad\\x1b\\xca\\xb2\\x73\\x66\\x85\\x8b\\x88\\x8a\\x88\"\n\"\\x1f\\x7d\\x4b\\x05\\x9a\\x55\\x6e\\x8f\\x5f\\x1b\\xfb\\x22\\xfb\\x01\\x40\\x29\\x48\\xbf\\x63\\xe0\\xd0\\xc7\\xa1\\xbf\\xd2\\x1f\\x99\\xc8\\x15\\x4e\\x3c\\x52\"\n\"\\x74\\x44\\x1b\\x51\\x6a\\xa2\\xb4\\xcc\\xe0\\xbc\\xf7\\x05\\xb3\\xb5\\x86\\x82\\xae\\x1f\\xfb\\x26\\xf8\\x2e\\x77\\x1d\\x5d\\x0a\\x22\\xf8\\x3f\\xf7\\x0b\\x0a\"\n\"\\x8d\\x86\\x93\\x84\\x44\\x1d\\x93\\x90\\x88\\x92\\x1b\\x9b\\x9a\\x99\\x9b\\x90\\x8b\\x8b\\x85\\x93\\x1f\\x87\\x90\\x05\\x0e\\x5d\\x0a\\x72\\xf8\\x5f\\x5c\\x1d\"\n\"\\x7b\\x73\\x6c\\x69\\x6c\\x69\\x70\\x79\\x9b\\xa3\\xab\\xac\\xa9\\xaf\\x1f\\x0e\\xf8\\x31\\x16\\xf0\\x4b\\x1d\\x5b\\x06\\xc3\\xf7\\x93\\x05\\x8c\\x93\\x8c\\x91\"\n\"\\x94\\x1a\\xc9\\x51\\xb5\\x37\\x6a\\x0a\\xd5\\xa8\\x90\\xac\\x1b\\xca\\xb0\\x75\\x64\\x8d\\x1f\\x86\\x8b\\x87\\x8a\\x88\\x1e\\x7e\\x4b\\x05\\x9a\\x54\\x6f\\x8f\"\n\"\\x5f\\x1b\\xfb\\x22\\xfb\\x01\\x40\\x28\\x49\\xbf\\x63\\xe0\\xcf\\xc8\\xa1\\xbf\\xd2\\x1f\\x98\\xc8\\x15\\x4e\\x3d\\x52\\x74\\x43\\x1b\\x52\\x6a\\xa2\\xb4\\xcc\"\n\"\\xdf\\xbc\\xf7\\x05\\xb4\\xb4\\x86\\x82\\xaf\\x1f\\xec\\xf8\\x26\\x5b\\x0a\\x67\\x81\\x85\\x7b\\x1b\\x80\\x82\\x8f\\x9e\\x6d\\x1f\\x9e\\x6e\\x7f\\x8f\\x75\\x1b\"\n\"\\x71\\x73\\x81\\x70\\x68\\x1f\\x77\\x7b\\x83\\xf7\\x00\\x0a\\xa8\\xad\\x95\\x90\\x9d\\x1b\\x96\\x95\\x87\\x80\\x9b\\x1f\\x73\\xb0\\x9c\\x84\\xa2\\xf7\\x1b\\x1d\"\n\"\\xf7\\xd0\\x7c\\x15\\xc4\\x8d\\xb9\\x96\\xba\\xa0\\x08\\xc5\\xa6\\xaf\\xa8\\xa0\\x1a\\x97\\x82\\x93\\x71\\x1d\\x8a\\x88\\x05\\x88\\x1d\\x47\\xad\\x51\\xc3\\x70\"\n\"\\x1f\\x9d\\x83\\x99\\x87\\xa8\\x86\\x7c\\x49\\x18\\xf7\\x1f\\x1d\\x80\\x8f\\x95\\x78\\x1f\\x90\\x82\\x88\\x8c\\x85\\x1b\\x7c\\x7d\\x7e\\x7c\\x77\\xb7\\x77\\xb5\"\n\"\\xc4\\xb5\\xaf\\xbb\\xa9\\x79\\x9c\\x69\\x8e\\x1f\\x0e\\x30\\x1d\\x93\\xf7\\xe4\\x3d\\x1d\\x30\\x1d\\x38\\xf8\\x16\\x3d\\x0a\\x4e\\x1d\\xf7\\x06\\x1d\\x82\\x94\"\n\"\\x1f\\x0e\\xa9\\x0a\\xfb\\x04\\xdd\\x3f\\xf7\\x0c\\xf3\\xf7\\x17\\xbd\\xb3\\x97\\x83\\x94\\x7e\\x85\\x87\\x89\\x85\\x81\\x1e\\x6d\\x5d\\x3f\\x75\\x4c\\x1b\\x2d\"\n\"\\x4a\\xc5\\xe0\\x8f\\x8b\\x90\\x8c\\x93\\x1f\\xf8\\x09\\xbe\\x15\\xfb\\xfd\\x06\\xdc\\xad\\xe0\\xc2\\xe7\\x1b\\xe4\\xc8\\x56\\x3e\\x1f\\xfb\\x5d\\xf7\\xf9\\xbb\"\n\"\\x0a\\xa9\\xad\\xa5\\x78\\x9d\\x70\\x1f\\x0e\\x30\\x1d\\xfb\\x33\\xf8\\x0a\\x15\\x94\\x83\\x86\\x8d\\xe7\\x0a\\x93\\x90\\x88\\x91\\x1b\\x9b\\x9b\\x99\\x99\\x8e\"\n\"\\x84\\x99\\x88\\x8e\\x1f\\x0e\\x3c\\x1d\\xf7\\x4d\\xf8\\xad\\xba\\x0a\\x8e\\x8c\\x94\\x98\\x1e\\x0e\\xf8\\x33\\xd0\\x1d\\xe0\\xf8\\xdf\\xf7\\x2c\\x1d\\x91\\x92\"\n\"\\xc3\\x0a\\x3c\\x1d\\x6d\\xf8\\xc2\\xaf\\x0a\\x3c\\x1d\\x9e\\xf8\\xd3\\x15\\x93\\x83\\x86\\x8e\\x84\\x1b\\x7b\\x7c\\x7d\\x7c\\x84\\x8e\\x85\\x91\\x7d\\x0a\\x91\"\n\"\\x88\\x91\\x1b\\x9c\\xf7\\x11\\x0a\\x80\\x98\\x1f\\x0e\\xf7\\x9b\\xf8\\x37\\x15\\x39\\x4f\\x1d\\x9f\\x1f\\xa6\\x69\\x0a\\x78\\x1f\\x64\\x06\\xbf\\xf7\\x84\\x05\"\n\"\\xd7\\xd8\\xa9\\x9b\\xc7\\x1b\\xb0\\x9c\\x85\\x79\\x9e\\x1f\\x9a\\x7c\\x92\\x7a\\x77\\x1a\\x80\\x8b\\x8a\\x8a\\x85\\x1e\\x57\\xfb\\x82\\x05\\x6e\\x06\\x73\\x7d\"\n\"\\x80\\x78\\x7d\\x2a\\x0a\\xf7\\x00\\x23\\x1d\\x70\\x06\\xc0\\xf7\\x87\\x05\\x8c\\x92\\x8c\\x93\\x94\\x1a\\xd0\\x55\\xb9\\x39\\x4f\\x62\\x79\\x54\\x4b\\x1e\\xf7\"\n\"\\xc4\\xf7\\x85\\x5b\\x0a\\x68\\x80\\x9f\\x1d\\x6d\\x7f\\x8f\\x76\\x1b\\x70\\x74\\x81\\x70\\x67\\x1f\\x77\\x7b\\x83\\x81\\x7f\\x1a\\x80\\x94\\x83\\x98\\x92\\x93\"\n\"\\x8e\\x91\\x92\\x1e\\xa8\\xae\\x94\\x90\\x9d\\x1b\\x96\\x95\\x87\\x80\\x9c\\x1f\\x73\\xaf\\x9c\\x84\\xa3\\x1b\\xa5\\xa4\\x97\\xa9\\xaf\\x1f\\x9f\\x9b\\x8f\\x91\"\n\"\\x56\\x0a\\x38\\x0a\\xf7\\x24\\xf7\\x62\\x15\\x9a\\x96\\x8f\\x90\\x97\\x46\\x0a\\x7f\\x41\\x1d\\x7e\\x82\\x86\\x83\\x80\\x1a\\x7f\\x94\\x82\\x97\\x93\\x8e\\x8c\"\n\"\\x94\\x97\\x1e\\x0e\\x38\\x0a\\xc0\\xf7\\x94\\x3d\\x0a\\x81\\x86\\x85\\xef\\x0a\\x91\\x8d\\x92\\xc8\\x0a\\xb2\\x0a\\x3a\\xfb\\x00\\x5f\\x1d\\x4b\\xf7\\x77\\x15\"\n\"\\x50\\x0a\\xf7\\x71\\x16\\x50\\x0a\\x0e\\x38\\x0a\\x7b\\xf7\\x88\\xe3\\x1d\\xb2\\x0a\\x39\\x20\\x5f\\x1d\\xf7\\x4e\\xf7\\x6f\\xf7\\x12\\x1d\\x7f\\x8f\\x76\\x1b\"\n\"\\x70\\x73\\xa3\\x0a\\x94\\x87\\x80\\x9d\\x1f\\x73\\xaf\\x9c\\x84\\xa3\\xf7\\x1b\\x1d\\xf3\\x85\\x1d\\xf7\\x17\\xf7\\x61\\x1d\\xa0\\x67\\x97\\x4f\\x91\\x3f\\x94\"\n\"\\x8b\\x8b\\x76\\x93\\xf7\\x21\\x1d\\x85\\x9d\\x77\\x87\\x1a\\x8a\\x6d\\x05\\x84\\x97\\x82\\x94\\x9c\\x28\\x1d\\x99\\xcf\\x05\\x8c\\x8f\\x8c\\x90\\x8e\\x1a\\x97\"\n\"\\x82\\x94\\x7f\\x7d\\x80\\x81\\x7b\\x86\\x1e\\xa5\\x6f\\x60\\x99\\x55\\x1b\\xfb\\x05\\xec\\x0a\\xc1\\x85\\xa4\\x85\\xa1\\xf7\\x4f\\x1d\\x2f\\x40\\x52\\x9b\\x1d\"\n\"\\x8d\\x8e\\x7c\\x0a\\x86\\x1e\\xf7\\xb6\\xf8\\x01\\xbf\\x0a\\x84\\x86\\x8e\\x84\\x1b\\x7b\\x7d\\x7d\\x7c\\x82\\x8c\\x89\\x95\\x82\\x1f\\x0e\\x2c\\x0a\\xcf\\xf8\"\n\"\\xa7\\x15\\x9c\\x96\\x8e\\x6a\\x1d\\x84\\x85\\x89\\x83\\x80\\xd3\\x0a\\x2c\\x0a\\x7b\\xf8\\xd9\\xf7\\x24\\x1d\\x8d\\x92\\x95\\x7f\\x0a\\x92\\x1b\\x9a\\x9a\\x99\"\n\"\\x9a\\x93\\x59\\x0a\\xf8\\x45\\x16\\xdc\\x06\\xa2\\xb6\\x1d\\xc9\\xa3\\xbc\\xcc\\x1f\\xfb\\x19\\xf8\\xbc\\x77\\x1d\\x2c\\x0a\\x36\\xf8\\xcd\\x15\\x94\\x83\\x87\"\n\"\\x8d\\x83\\x1b\\x7b\\x7c\\x7d\\x7c\\x85\\x8e\\x84\\x92\\x7d\\x0a\\x90\\xee\\x0a\\x52\\x1d\\xf8\\x1d\\xf7\\x70\\x3d\\x1d\\x52\\x1d\\xf7\\x29\\xf7\\x85\\x15\\x50\"\n\"\\x0a\\xf7\\x71\\x16\\x68\\x6b\\x6c\\x6a\\x71\\x9e\\x79\\xa5\\xaf\\x8c\\x1d\\x0e\\xde\\x0a\\x95\\x82\\x97\\xf7\\x0d\\x0a\\xfc\\x01\\xfb\\xd8\\x82\\x5f\\x05\\xf8\"\n\"\\x15\\x06\\xa0\\xee\\x05\\x8c\\x8f\\x8c\\x90\\x8f\\x1a\\x96\\x82\\x94\\x7f\\x7a\\x81\\x81\\x76\\x86\\x1e\\x80\\x59\\x05\\xfb\\x97\\x06\\xf8\\x03\\xf7\\xd8\\x05\"\n\"\\xfb\\x32\\xf3\\x78\\x0a\\x85\\x89\\x84\\x81\\x4f\\x0a\\xf7\\xed\\xf8\\xab\\x15\\x50\\x06\\x78\\x7f\\x81\\x7b\\x7f\\x94\\x84\\x9a\\x1f\\x94\\x06\\x63\\xfb\\x4c\"\n\"\\x05\\x79\\x06\\x78\\x7e\\x80\\x7c\\x7f\\x94\\x84\\x9a\\x1f\\xdd\\x06\\x9d\\x98\\x96\\x9a\\x98\\x83\\x91\\x7b\\x1f\\x7b\\x06\\xaa\\xf7\\x23\\x05\\xb2\\xb4\\x9f\"\n\"\\x95\\xae\\x1b\\xab\\xa2\\x7b\\x75\\x89\\x1f\\x8a\\x82\\x6b\\xfb\\x25\\x05\\x80\\x06\\x78\\x7e\\x81\\x7b\\x7f\\x94\\x84\\x9a\\x1f\\xcf\\x06\\x9d\\x98\\x96\\x9a\"\n\"\\x97\\x83\\x92\\x7b\\x1f\\x82\\x06\\xab\\xf7\\x27\\x05\\x8c\\x91\\x8c\\x91\\x8f\\x1a\\xb8\\x67\\xa8\\x53\\x68\\x73\\x82\\x73\\x6a\\x1e\\x0e\\xf7\\x8a\\xf8\\x04\"\n\"\\x15\\xce\\x23\\x1d\\x4a\\x98\\x0a\\xa2\\x40\\x1d\\x4a\\x06\\xf7\\xf3\\xf7\\xd1\\x15\\xce\\x30\\x0a\\x4b\\x98\\x0a\\xa1\\x9a\\x97\\x9d\\x99\\x82\\x92\\x78\\x1f\"\n\"\\x4a\\x06\\x0e\\xf8\\x8d\\xbe\\x15\\xda\\xf8\\x04\\x05\\xfb\\x38\\x06\\x96\\xf7\\x2e\\x1d\\x94\\x8d\\x8b\\x8f\\x1b\\x99\\x99\\x90\\x1d\\x69\\x92\\x77\\x1b\\x70\"\n\"\\x76\\x83\\x76\\x6e\\xa0\\x0a\\xfb\\x0c\\x16\\xfb\\x05\\x06\\xd0\\xf7\\xd1\\x05\\xf7\\x05\\x06\\xfb\\xee\\xfb\\xd1\\x15\\xd0\\xf7\\xd1\\x05\\xf7\\x04\\x25\\x0a\"\n\"\\xdb\\xf8\\x04\\x15\\xfb\\x04\\x76\\x0a\\x9d\\x87\\x84\\xa1\\x1f\\x8e\\x8a\\x90\\x8a\\x7d\\x77\\x82\\x77\\x85\\x71\\x19\\x0e\\xf8\\xff\\xf8\\xd9\\x15\\x5b\\x99\"\n\"\\x05\\x8f\\x7b\\x75\\x8f\\x7e\\x1b\\x70\\x77\\x83\\x76\\x6d\\xa0\\x0a\\x47\\x06\\x57\\x16\\xfb\\x05\\x06\\xd0\\xf7\\xd1\\x05\\xda\\x4b\\x1d\\x3e\\x06\\x96\\xbf\"\n\"\\x05\\xb9\\x95\\xae\\xae\\xae\\x1b\\x99\\x99\\x88\\x85\\x9f\\x1f\\xfc\\x13\\xfc\\x80\\x15\\xd0\\xf7\\xd1\\x05\\xf7\\x04\\x25\\x0a\\xdb\\xf8\\x04\\x15\\xfb\\x04\"\n\"\\x76\\x0a\\x9d\\x87\\x84\\xa1\\x1f\\x8e\\x8a\\x90\\x8a\\x7d\\x77\\x82\\x77\\x85\\x71\\x19\\x0e\\xf8\\xe8\\xf8\\x6d\\x15\\x94\\x94\\x8f\\x91\\x93\\x1a\\x96\\x83\"\n\"\\x92\\x3b\\x0a\\x82\\x82\\x87\\x84\\x83\\x1a\\x81\\x93\\x83\\x95\\x93\\x8d\\x8c\\x97\\x98\\x1e\\xf7\\x07\\xc9\\x1d\\xf8\\x0e\\xfb\\x09\\x15\\xb2\\xa2\\xa0\\xac\"\n\"\\xb1\\x1a\\xba\\x67\\xad\\x57\\xf7\\x2a\\x1d\\x5a\\xb2\\x67\\xc1\\xd1\\xcd\\xc7\\xcc\\xa5\\x81\\x9d\\x75\\x9e\\x1e\\x67\\xf7\\x1a\\x15\\xac\\xa0\\x78\\x6e\\x67\"\n\"\\x66\\x6c\\x61\\x6c\\x74\\x9d\\xa5\\xaf\\xb2\\x70\\x0a\\x5e\\x9e\\x1d\\xb8\\x1f\\x0e\\xf8\\xdb\\xf8\\x6d\\x15\\x94\\x94\\x8f\\x92\\x92\\x1a\\x95\\x83\\x93\\x3b\"\n\"\\x0a\\x80\\x80\\x88\\x86\\x84\\x1a\\x80\\x93\\x83\\x96\\x93\\x8e\\x8d\\x96\\x97\\x92\\x0a\\xfb\\xa7\\xf7\\xc9\\xf7\\x5e\\x1d\\xb7\\x8a\\xa9\\xbd\\x0a\\xa8\\x7f\"\n\"\\xa1\\x70\\x9e\\x1f\\xb5\\xa4\\x9f\\xa9\\xaf\\x1a\\xb8\\x67\\xaa\\x57\\x56\\xf7\\x12\\x0a\\x95\\x1e\\x9c\\x9e\\xa4\\x94\\xa7\\x1b\\xad\\xa0\\x7a\\x71\\x6b\\x69\"\n\"\\x70\\x62\\x1f\\x0e\\xf8\\xdb\\xf8\\x6d\\x15\\x94\\x93\\x8f\\x93\\x92\\x1a\\x95\\x83\\x93\\x81\\x83\\x88\\x89\\x80\\x7f\\x1e\\xfc\\x4a\\xfc\\x2d\\x05\\x81\\x81\"\n\"\\x87\\x85\\x84\\x1a\\x80\\x93\\x83\\x96\\x93\\x8d\\x8d\\x96\\x98\\x1e\\xf8\\x3e\\xf7\\x09\\x15\\xb2\\xa2\\xa0\\xad\\xb0\\x1a\\xba\\x66\\xad\\x58\\xf7\\x2a\\x1d\"\n\"\\x59\\xb2\\x68\\xc1\\xd1\\xcd\\xc7\\xcc\\xa5\\x81\\x9d\\x75\\x9e\\x1e\\x67\\xf7\\x1a\\x15\\xab\\xa1\\x78\\x6f\\x66\\x66\\x6c\\x61\\x6b\\x75\\x9d\\xa5\\xaf\\xb2\"\n\"\\x70\\x0a\\x5e\\x9e\\x1d\\xb8\\x1f\\xfb\\xc3\\xf8\\x27\\x15\\xf7\\x12\\x06\\x9b\\x94\\x94\\x9a\\x98\\x86\\x8f\\x7e\\x1f\\xfb\\x3a\\x06\\x69\\xfb\\x2f\\x05\\x87\"\n\"\\x07\\x83\\x93\\x81\\x92\\x1e\\x95\\x8d\\x90\\x8c\\x91\\x8e\\x05\\x91\\x94\\xb6\\x95\\x9b\\x1b\\xab\\xa1\\x76\\x6b\\x51\\x5e\\x5b\\x55\\x71\\x68\\x9b\\x9c\\x7f\"\n\"\\x1f\\x91\\x86\\x88\\x8d\\x84\\x1b\\x7f\\x80\\x80\\x7e\\x71\\xc5\\x6b\\xba\\xd9\\xcf\\xd3\\xdd\\xc0\\x68\\xad\\x55\\x79\\x79\\x88\\x82\\x71\\x1f\\x0e\\xf8\\xda\"\n\"\\xf8\\x6d\\x15\\x95\\x94\\x8f\\x92\\x92\\x1a\\x95\\x83\\x93\\x3b\\x0a\\x80\\x81\\x88\\x85\\x84\\x1a\\x80\\x93\\x83\\x96\\x93\\x8d\\x8c\\x97\\x98\\x92\\x0a\\xfb\"\n\"\\x30\\xf8\\x27\\x15\\x2d\\xfb\\x40\\x53\\xfb\\x00\\x81\\x1a\\x8a\\x83\\x05\\x88\\x97\\x85\\x92\\x92\\x95\\x92\\x94\\x90\\x1e\\xf7\\x2b\\xf7\\xb2\\x95\\xb9\\x05\"\n\"\\xfb\\x74\\x06\\x80\\x57\\x05\\x7e\\x88\\x93\\x81\\x97\\x1b\\x98\\x93\\x92\\x9a\\x8e\\x1f\\x8e\\x97\\x05\\x0e\\x82\\x0a\\xf7\\x64\\xf7\\x09\\x1d\\x7d\\x81\\x85\"\n\"\\x83\\x82\\x1a\\x7e\\x95\\xf7\\x62\\x1d\\x29\\x0a\\xfb\\x01\\xf7\\x98\\x48\\x1d\\x8d\\x0a\\xf7\\x2e\\xf8\\x98\\x15\\x94\\x97\\x8d\\x91\\x92\\x1a\\x97\\x82\\x94\"\n\"\\x7f\\x81\\x81\\x85\\x7e\\x83\\x1e\\x2e\\xfb\\x1b\\x05\\x84\\x81\\x88\\x83\\x84\\x1a\\x7e\\x93\\x82\\x98\\x95\\x94\\x91\\x98\\x94\\x1e\\xf8\\x13\\xfb\\x58\\x15\"\n\"\\xa1\\xfb\\x19\\xbe\\x1d\\xdb\\xf7\\x19\\x05\\xf7\\x8c\\xbe\\x15\\xfb\\x6e\\x06\\xf7\\x38\\xf7\\xa9\\x05\\x92\\x06\\x0e\\x29\\x0a\\xf7\\x08\\xf7\\x31\\x2c\\x1d\"\n\"\\xf8\\x5a\\xf8\\xc7\\x15\\xfb\\x64\\x37\\x1d\\x7b\\x1d\\x9a\\x82\\x91\\x98\\x1d\\xf7\\x96\\x06\\xa2\\xfb\\x19\\x05\\x45\\x21\\x1d\\xd9\\xb6\\x0a\\xa0\\x9d\\xa2\"\n\"\\xa9\\x9d\\x1f\\xa5\\x9b\\xa9\\x98\\x9a\\x8d\\x08\\xa0\\x8e\\x96\\x95\\x9c\\x1a\\x9a\\x82\\x91\\x77\\x1e\\x6b\\x06\\x36\\xf7\\x4c\\x8b\\x1d\\x0e\\x29\\x0a\\xb1\"\n\"\\xf7\\xb6\\xe1\\x1d\\xb6\\xf7\\x01\\x15\\x99\\xf7\\x07\\x0a\\x7e\\x83\\x87\\x89\\x83\\x7f\\x82\\x1d\\x95\\x8f\\x91\\x92\\x1e\\x0e\\x8c\\x0a\\x55\\x1d\\x6e\\xf7\"\n\"\\x5f\\x2d\\x0a\\x55\\x1d\\xfb\\x15\\xe9\\x39\\x0a\\x55\\x1d\\x23\\xf7\\x91\\xdb\\x1d\\x80\\x95\\x1f\\x0e\\x55\\x1d\\x23\\xf7\\x75\\xe0\\x0a\\x0e\\xa5\\x1d\\xb4\"\n\"\\x1d\\xe9\\xf8\\xd3\\x39\\x0a\\x84\\x0a\\xae\\x16\\xf8\\xa6\\x06\\xfb\\x84\\xf8\\xc6\\x05\\x59\\x06\\xfb\\x38\\xfc\\x93\\x15\\xf7\\x51\\xf8\\x47\\xf7\\x51\\xfc\"\n\"\\x47\\x05\\x0e\\x2d\\x1d\\xf7\\x1e\\xf9\\x65\\x48\\x1d\\x2d\\x1d\\xf7\\x77\\xf8\\xd3\\x39\\x0a\\x2d\\x1d\\xf7\\x9b\\xf7\\x10\\x1d\\x2d\\x1d\\xf8\\x09\\xf8\\xfe\"\n\"\\x2c\\x1d\\xf8\\xfd\\x22\\x1d\\xa8\\x23\\x1d\\xfb\\x29\\x32\\x1d\\xcf\\x06\\x2d\\xfc\\x42\\xfb\\x54\\xf8\\x75\\x05\\xfb\\x02\\x20\\x1d\\xbb\\x58\\x1d\\x35\\x1d\"\n\"\\x47\\x06\\xe8\\xf8\\x42\\xf7\\x57\\xfc\\x70\\x83\\x69\\x7e\\x4d\\x5b\\x64\\x4a\\x8a\\x19\\x46\\x06\\x7a\\x7d\\x7d\\x7b\\x7c\\x94\\x85\\xa0\\x1f\\xca\\x06\\xe5\"\n\"\\x89\\xe0\\xd1\\x9d\\xe5\\x08\\x0e\\xf7\\x49\\xbe\\x15\\xba\\xf7\\x6b\\x05\\x81\\x1d\\x8e\\x1a\\x96\\xf7\\x18\\x0a\\x87\\x1e\\x82\\x63\\x8a\\x1d\\x98\\x9b\\x96\"\n\"\\x95\\xa0\\x8f\\x1e\\xaa\\xf7\\x23\\x05\\xfc\\x48\\x49\\x1d\\xf8\\x01\\x06\\x4c\\x6c\\x71\\x6e\\x62\\x1a\\x6a\\xa5\\x79\\xb9\\xb8\\xed\\x0a\\x87\\x8a\\x72\\x1b\"\n\"\\x79\\x82\\x91\\x98\\xaf\\xb9\\xaf\\xd3\\x9f\\x1f\\x93\\x8d\\xae\\xf7\\x34\\xf7\\x11\\x1d\\x0e\\xa4\\x1d\\xf7\\x2a\\xf8\\x98\\x43\\x0a\\xf7\\x52\\xfb\\x06\\x15\"\n\"\\xf7\\x19\\x06\\x82\\x65\\x8a\\x7e\\x05\\x7f\\x93\\x83\\x98\\x9c\\x96\\x96\\x9f\\x8f\\x1e\\xa7\\xf7\\x15\\x05\\x8d\\x91\\x8b\\x8e\\x8f\\x1a\\x98\\x83\\x92\\x7d\"\n\"\\x7b\\x80\\x80\\x77\\x86\\x1e\\x83\\x63\\x05\\xfb\\x19\\x06\\xb5\\xf7\\x57\\x05\\xf7\\xa9\\x06\\x78\\x31\\x05\\x8a\\x85\\x8a\\x87\\x7e\\x0a\\x96\\x9f\\x8f\\x1e\"\n\"\\xaa\\xf7\\x23\\x05\\xfc\\x43\\x37\\x1d\\x95\\x84\\x9e\\x1f\\xb9\\x06\\x27\\xfc\\x61\\x05\\x5a\\x2b\\x1d\\xf8\\x56\\x06\\xae\\xf7\\x35\\x8c\\x99\\x05\\x97\\x83\"\n\"\\x92\\x7e\\x7a\\x80\\x80\\x77\\x87\\x1e\\x72\\xfb\\x04\\x05\\xfb\\xbe\\x06\\x0e\\x85\\x0a\\xf7\\x21\\xf8\\x98\\x43\\x0a\\xf8\\x35\\xfb\\x06\\x15\\x5c\\xfb\\x6b\"\n\"\\x05\\x59\\x06\\x74\\x7d\\x43\\x1d\\xf7\\x20\\x23\\x0a\\x64\\x06\\x36\\x0a\\xa0\\x06\\xa2\\x52\\x0a\\xfb\\x0c\\x24\\x0a\\x79\\x7d\\x95\\x83\\x9e\\x1f\\xba\\x06\"\n\"\\x61\\xfb\\x57\\x05\\xfb\\x94\\x34\\x0a\\xbc\\x5e\\x1d\\xfb\\x0c\\x06\\x74\\x7d\\x80\\x79\\x7c\\x95\\x84\\x9e\\x1f\\x9d\\x26\\x1d\\x62\\x06\\x73\\x7e\\x81\\x78\"\n\"\\x7d\\xf7\\x26\\x1d\\xba\\xf7\\x6b\\x05\\x0e\\xf7\\x51\\xf7\\xf6\\x15\\xa5\\xc2\\x9d\\xa4\\xae\\xa9\\x08\\xb3\\xb8\\xbe\\x9f\\xc2\\x1b\\xb8\\xb9\\x7c\\x73\\xa4\"\n\"\\x1f\\x95\\x82\\x9e\\x6d\\x86\\x1a\\x88\\x66\\x05\\x85\\x98\\x82\\x94\\x9c\\x95\\x95\\x9f\\x90\\x1e\\xa2\\xf7\\x02\\x05\\x8c\\x90\\x8c\\x8f\\x8f\\x1a\\xf7\\x20\"\n\"\\x0a\\x87\\x79\\x05\\xb3\\x65\\x55\\xa0\\x4c\\x1b\\xfb\\x12\\xfb\\x06\\x35\\xfb\\x1b\\x57\\x1f\\x6e\\x06\\x77\\x80\\x81\\x77\\x7f\\x92\\x86\\x9b\\x1f\\xa3\\x06\"\n\"\\x81\\x5b\\x05\\x71\\x06\\x76\\x80\\x81\\x77\\x7f\\x93\\x86\\x9b\\x1f\\xa5\\x06\\x60\\x8c\\x83\\x92\\x72\\x1e\\x2d\\xa8\\xda\\x51\\xed\\x1b\\xd2\\xd4\\xa8\\xc1\"\n\"\\xcb\\x1f\\xa7\\xa3\\x93\\x95\\x98\\x1a\\x96\\x83\\x93\\x7e\\x81\\x86\\x89\\x82\\x82\\x1e\\x4c\\x46\\x56\\x73\\x47\\x1b\\x49\\x57\\xa9\\xc1\\x6d\\x1f\\x7a\\xa8\"\n\"\\x86\\xa2\\xb4\\x1a\\xf7\\x91\\xf7\\x58\\x1d\\xfb\\x92\\x06\\x95\\xbb\\x05\\xf7\\xb1\\xf7\\x58\\x1d\\x0e\\xf7\\xea\\xc0\\x1d\\x45\\x1d\\xfb\\x2e\\xf9\\x73\\x15\"\n\"\\x77\\x7e\\x7c\\x75\\x4a\\xbb\\x67\\xe0\\xc1\\xb8\\x9a\\xa9\\xb1\\xd8\\x1d\\x45\\x1d\\x54\\xf9\\x80\\xf7\\x04\\x1d\\xe0\\x35\\x05\\x84\\x92\\x90\\x88\\x92\\xf7\"\n\"\\x44\\x1d\\x45\\x1d\\xfb\\x6f\\xfb\\x16\\x15\\x94\\x95\\x8f\\x92\\x93\\x1a\\x95\\x80\\x95\\x81\\xef\\x1d\\x45\\x1d\\x67\\xf9\\x64\\x15\\x69\\xf7\\x3a\\x1d\\x71\"\n\"\\x1f\\x0e\\xf7\\x5f\\xf8\\x11\\x15\\x43\\xfb\\xde\\x05\\x62\\x06\\x73\\x86\\x1d\\x9c\\x9b\\x82\\x91\\xca\\x0a\\xf7\\x97\\x06\\xc0\\x0a\\xd3\\xf7\\xde\\x05\\xa7\"\n\"\\x66\\x1d\\x70\\x06\\x9d\\xdc\\x05\\xa0\\x06\\xa1\\x6b\\x1d\\x79\\x7c\\x2a\\x0a\\xba\\x06\\x7a\\x3a\\x05\\xfb\\x98\\x06\\x9d\\xdc\\x05\\xbc\\x06\\xa2\\x6b\\x1d\"\n\"\\x78\\x7d\\x25\\x1d\\x9e\\x06\\x79\\x3a\\x05\\x68\\x06\\x68\\x1d\\xdf\\x16\\xf7\\x98\\x06\\x7d\\x4b\\x05\\xfb\\x97\\x06\\x0e\\x86\\x0a\\xf7\\x7e\\xf8\\x9b\\x15\"\n\"\\xfb\\x2f\\xfb\\x01\\x05\\x7b\\x84\\x85\\x82\\x7f\\x1a\\x7f\\x95\\x82\\x97\\x8f\\x98\\x90\\x8f\\x91\\x1e\\xf7\\x0d\\xe2\\xe1\\x35\\x05\\x83\\x92\\x90\\x89\\x91\"\n\"\\xf7\\x44\\x1d\\xf7\\x75\\xf8\\x94\\x15\\x3f\\x0a\\x3a\\x21\\x1d\\xf7\\x69\\x30\\x0a\\x3c\\x06\\x36\\x0a\\xdd\\x06\\xa1\\x99\\x96\\x9e\\x99\\x82\\x92\\x78\\x1f\"\n\"\\xfb\\x68\\x06\\x74\\x7d\\x7f\\x79\\x7c\\x94\\x85\\x9e\\x1f\\xf8\\x5d\\x16\\x26\\xfc\\x65\\x05\\x40\\x7b\\x3f\\x50\\x3c\\x1b\\x61\\x59\\xa1\\xa9\\x70\\x1f\\xa1\"\n\"\\x77\\x8a\\x8c\\x81\\x1b\\x7a\\x7d\\x7d\\x7b\\x82\\x8d\\x88\\xa2\\x77\\x1f\\x5d\\xbd\\xb4\\x79\\xc3\\x1b\\xf4\\xf4\\xde\\xef\\xa0\\x1f\\xf1\\xf8\\x67\\x05\\xa0\"\n\"\\x30\\x0a\\xfb\\x48\\x20\\x1d\\x0e\\xc8\\x1d\\x7a\\xf9\\x65\\xc5\\x1d\\x3b\\x1d\\xf7\\x14\\xf7\\x10\\x1d\\x3b\\x1d\\xf7\\x78\\xf8\\xfe\\x2c\\x1d\\xf8\\x48\\x22\"\n\"\\x1d\\xf7\\x1b\\x27\\x1d\\xfb\\xd4\\x83\\x1d\\xf7\\x8a\\xb6\\x0a\\x9a\\x94\\x9b\\x9b\\x9a\\x1f\\x9b\\x98\\xa7\\x9c\\x9a\\x90\\xbc\\x9b\\x8b\\x8b\\x90\\x91\\x08\"\n\"\\x91\\x91\\x8e\\x92\\x91\\x1a\\x9b\\x82\\x91\\x76\\x1e\\xfb\\x18\\x06\\x0e\\x75\\x1d\\x9f\\x0a\\x9b\\xf9\\x2c\\x15\\x6f\\x71\\x72\\x70\\x75\\x9b\\x7c\\xa0\\xa9\"\n\"\\xa4\\xa4\\xa7\\xa0\\x7c\\x9a\\x74\\x1f\\xf7\\x63\\x16\\x6f\\x71\\x72\\x6f\\x76\\x9b\\x7c\\xa0\\xa8\\xa4\\xa4\\xa7\\xa0\\x51\\x1d\\xf7\\x43\\xf8\\x98\\x43\\x0a\"\n\"\\xf7\\xe7\\xf7\\x18\\x15\\xf7\\x1a\\x31\\x1d\\xfb\\xd1\\x37\\x1d\\x95\\x84\\x9e\\x1f\\xf7\\x17\\x26\\x1d\\xfb\\x1a\\x2b\\x1d\\xf7\\xd1\\x06\\xa2\\x52\\x0a\\xfb\"\n\"\\x17\\x06\\x0e\\x3b\\x1d\\xf7\\x89\\xf9\\x49\\xc4\\x1d\\xb9\\x1d\\xe1\\xf8\\xff\\xdb\\x1d\\x81\\x95\\x1f\\x0e\\xf7\\x41\\xf7\\x6f\\x15\\xe8\\xcf\\xe0\\x6e\\xa8\"\n\"\\x51\\xa9\\xfb\\x5c\\x19\\xe6\\x2a\\x1d\\x57\\x06\\x6b\\xf7\\x4a\\x70\\xbe\\x38\\xb3\\xf7\\x93\\xf7\\x50\\x18\\x9a\\x27\\x1d\\xfb\\x0b\\x32\\x1d\\xa8\\x06\\xfb\"\n\"\\xc9\\xfb\\x77\\xbd\\xf7\\x77\\x05\\xd1\\x27\\x1d\\xfb\\x3e\\xe4\\x1d\\x3c\\x0a\\x47\\x06\\x0e\\x87\\x0a\\xf7\\x19\\xfb\\x24\\x27\\x0a\\x40\\x0a\\xf7\\x7f\\xf9\"\n\"\\x40\\x2d\\x0a\\xf8\\x13\\x22\\x1d\\xd9\\xfc\\x61\\xbe\\x1d\\xf7\\xa6\\xf8\\x61\\x05\\x0e\\x40\\x0a\\xf8\\x18\\xf8\\x73\\x15\\x95\\x96\\x8e\\x92\\x93\\x1a\\x95\"\n\"\\x81\\x95\\x7f\\x81\\x84\\x87\\x7f\\x80\\x1e\\xfb\\x03\\xfb\\x10\\x05\\x81\\x80\\x88\\x85\\x83\\x1a\\x80\\x64\\x1d\\x40\\x0a\\xd2\\xfb\\x24\\x27\\x0a\\x40\\x0a\"\n\"\\xf7\\x8e\\xf7\\xe6\\x15\\x58\\x64\\x65\\x5a\\x6d\\xa5\\x75\\xaf\\x1f\\x95\\x06\\xba\\xb7\\xb3\\xb5\\xac\\x71\\xa3\\x66\\x1f\\x0e\\xab\\x1d\\x54\\x1d\\xf7\\x05\"\n\"\\xf9\\x73\\x2d\\x0a\\x54\\x1d\\x84\\xf9\\x06\\x39\\x0a\\x54\\x1d\\xfb\\x17\\x2e\\x27\\x0a\\xf8\\x62\\x9a\\x0a\\x99\\x82\\x92\\xf6\\x0a\\xc7\\x1d\\x2a\\xf7\\x8c\"\n\"\\xc5\\x1d\\x31\\x0a\\xf0\\xf7\\x65\\x97\\x0a\\x31\\x0a\\xf7\\x27\\xf7\\x25\\x2c\\x1d\\xcd\\xbe\\x15\\x90\\xa0\\x8c\\x97\\x05\\x99\\x82\\x94\\x7c\\x7c\\x81\\x80\"\n\"\\x76\\x86\\x1e\\x7c\\x40\\x05\\xf7\\x73\\x06\\xa6\\xf7\\x0f\\x74\\x8f\\x80\\x8e\\x7d\\x90\\x19\\x50\\xa0\\x6c\\xba\\xcf\\x1a\\xc5\\xa7\\xd0\\xb5\\xb7\\x1e\\xbf\"\n\"\\xbb\\xd5\\xa9\\xd6\\x1b\\xf7\\x07\\xd2\\x4a\\x22\\xfb\\x05\\x37\\x33\\xfb\\x17\\x72\\x1f\\x84\\x8a\\x6f\\xfb\\x13\\x05\\xf7\\x78\\x06\\x9a\\xcd\\x05\\x8c\\x90\"\n\"\\x8c\\x94\\x8f\\x1a\\x99\\x82\\x94\\x7c\\x7c\\x81\\x80\\x76\\x87\\x1e\\x85\\x73\\x05\\xfb\\x0d\\x06\\x92\\xad\\xca\\x9e\\xb1\\x9e\\xb0\\xac\\x19\\xc5\\xc0\\xad\"\n\"\\xd6\\xda\\x1a\\xf7\\x12\\x2a\\xe1\\xfb\\x22\\x31\\x3f\\x6c\\x4e\\x4e\\x1e\\x50\\x50\\x6b\\x40\\x3d\\x1a\\x4e\\xa0\\x55\\xb0\\x6b\\x1e\\x9e\\x7b\\x9c\\x82\\xae\"\n\"\\x7e\\x83\\x68\\x18\\x60\\xf8\\x65\\x43\\x0a\\x0e\\x9d\\x0a\\xf8\\x2a\\xf8\\xd3\\x15\\xfb\\x3a\\xfb\\x31\\xfb\\x47\\xfb\\x51\\xfb\\x19\\xda\\x31\\xf7\\x08\\xdf\"\n\"\\xd7\\xb1\\xd7\\xcd\\x1f\\xcc\\xd7\\xad\\xe2\\xe5\\x1a\\xc9\\x7a\\xc1\\x6a\\xb4\\x1e\\xb9\\x66\\x5d\\xa0\\x4b\\x1b\\x83\\x58\\x15\\xe5\\xc9\\x41\\x20\\xfb\\x2f\"\n\"\\xfb\\x15\\xfb\\x2d\\xfb\\x17\\x2e\\x4e\\xd3\\xf7\\x02\\xd7\\xa7\\xd3\\xc1\\xca\\x1f\\xcb\\xc2\\xc7\\xab\\xcc\\x1b\\xfb\\x7b\\x83\\x15\\x91\\x94\\x8e\\x93\\x93\"\n\"\\x1a\\x97\\x83\\x94\\x7e\\x81\\x83\\x85\\x7e\\x82\\x1e\\x2e\\xfb\\x1b\\x05\\x84\\x81\\x88\\x84\\x83\\x1a\\x7e\\x93\\x82\\x98\\x95\\x93\\x91\\x98\\x95\\x1e\\x0e\"\n\"\\xa7\\x1d\\xf8\\x02\\xf9\\x1b\\x2d\\x0a\\xf7\\xe1\\xb1\\x15\\xf7\\x33\\x9c\\xf7\\x14\\xf7\\x15\\xf7\\x25\\x1a\\xf4\\x45\\xd5\\xfb\\x04\\x98\\x1e\\x92\\xaf\\x05\"\n\"\\xf1\\x23\\x1d\\xfb\\x91\\x21\\x1d\\xee\\x06\\x84\\x68\\x05\\xfb\\x34\\x79\\xfb\\x13\\xfb\\x15\\xfb\\x25\\x1a\\x22\\xd1\\x41\\xf7\\x04\\x7e\\x1e\\x81\\x5d\\x05\"\n\"\\x25\\x29\\x1d\\xf7\\x91\\x06\\xa1\\x9a\\x97\\x9c\\x9b\\x82\\x91\\x77\\x1f\\x28\\x06\\xf3\\xf8\\x72\\x15\\xe2\\x7f\\xc0\\x51\\x3a\\x1a\\xfb\\x01\\x27\\x24\\xfb\"\n\"\\x0f\\x79\\x1e\\x57\\x16\\x35\\x97\\x55\\xc5\\xdc\\x1a\\xf7\\x02\\xee\\xf1\\xf7\\x10\\x9d\\x1e\\x0e\\xb2\\x1d\\xf8\\x24\\x22\\x1d\\xb6\\xe6\\x0a\\xfb\\x24\\x06\"\n\"\\x74\\x7d\\x80\\x79\\x7d\\x95\\x83\\x9d\\x1f\\xbc\\x06\\x4c\\xfb\\xb0\\x05\\x42\\x8f\\x65\\xaa\\xc3\\x1a\\x9b\\x8e\\xa3\\x92\\xac\\x1e\\xaf\\xf7\\x3f\\x05\\x2b\"\n\"\\x24\\x0a\\x79\\x7d\\x95\\x83\\x9e\\x1f\\xb4\\x06\\x72\\xfb\\x05\\x05\\x84\\x6c\\x88\\x75\\x77\\x1a\\x33\\xc0\\x57\\xee\\x82\\x1e\\x71\\xfb\\x12\\x05\\x5a\\x2b\"\n\"\\x1d\\xf7\\x2f\\x44\\x0a\\x55\\x06\\xa5\\xf7\\x12\\xf7\\x2a\\x91\\xca\\xc9\\xb0\\xf7\\x48\\x19\\x9e\\xe2\\x05\\xa8\\x23\\x0a\\x3a\\x06\\x6e\\xfb\\x1f\\x6c\\xfb\"\n\"\\x20\\x5c\\x59\\x20\\x85\\x19\\x0e\\x4b\\x0a\\xf7\\x6c\\xf8\\x4a\\x2d\\x0a\\x4b\\x0a\\xc3\\xf7\\xdd\\x39\\x0a\\x4b\\x0a\\x6f\\xfc\\x1a\\x27\\x0a\\x94\\x0a\\x49\"\n\"\\x0a\\x8e\\xf7\\x5f\\x2d\\x0a\\xf7\\xce\\x7c\\x15\\xf7\\x1d\\x94\\xee\\xdf\\xf6\\x1a\\xaf\\x7b\\xad\\x71\\x9d\\x1e\\x70\\x62\\x1d\\xcf\\xd7\\xc6\\xe4\\xaf\\xaf\"\n\"\\x80\\x7b\\x9c\\x1e\\x93\\x83\\xa0\\x6d\\x79\\x1d\\x89\\x83\\x05\\x93\\x0a\\xa1\\x6c\\xb9\\x73\\xbe\\x85\\x19\\x7c\\x47\\x05\\xa9\\x06\\xa0\\xd3\\x1d\\x49\\x0a\"\n\"\\x3f\\xf7\\x91\\xd4\\x1d\\x49\\x0a\\xfb\\x85\\xfd\\x05\\x27\\x0a\\xf9\\x25\\xf8\\xc7\\x15\\xfc\\x26\\x06\\x80\\x5a\\xf7\\x1e\\xfb\\x6c\\xfb\\x82\\xfb\\x8a\\x80\"\n\"\\x57\\x05\\xf8\\x2d\\x06\\xab\\xf7\\x29\\x05\\x8c\\x90\\x8c\\x91\\x8e\\x1a\\x96\\x83\\x92\\x81\\x7e\\x81\\x82\\x7d\\x87\\x1e\\x6f\\x20\\x05\\xfb\\xbc\\x06\\xf7\"\n\"\\x8a\\xf7\\x8a\\xfb\\x21\\xf7\\x6b\\x05\\xf7\\xad\\x06\\x7d\\xfb\\x03\\x8a\\x89\\x05\\x83\\x89\\x95\\x82\\x96\\x1b\\x98\\x95\\x94\\x99\\x8e\\x1f\\x0e\\x90\\x0a\"\n\"\\xf8\\x1e\\xf7\\xd0\\x15\\xb6\\xf7\\x58\\x05\\xf7\\x2d\\x06\\x6f\\xfb\\x17\\x05\\x89\\x82\\x8b\\x8b\\x89\\x1a\\x7f\\x95\\x81\\x97\\x9a\\x96\\x94\\x99\\x8e\\x1e\"\n\"\\x8e\\x92\\xb2\\xf7\\x4d\\x05\\xfc\\x63\\x06\\x64\\xfb\\x4a\\x05\\x8a\\x87\\x8b\\x88\\x87\\x1a\\x7e\\x94\\x82\\x96\\x91\\x96\\x90\\x90\\x91\\x1e\\x90\\x8f\\x8b\"\n\"\\x8b\\x90\\x9b\\xa7\\xf7\\x1a\\x18\\xf7\\x2e\\x06\\x60\\xfb\\x58\\x05\\x26\\x06\\x74\\x7c\\x7e\\x79\\x7f\\x96\\x83\\x9e\\x1f\\xee\\x06\\x5c\\xfb\\x6a\\x05\\x26\"\n\"\\x06\\x76\\x7b\\x7e\\x7b\\x7d\\x96\\x83\\x9c\\x1f\\xf7\\x8f\\x06\\x95\\x8f\\x8c\\x8e\\x92\\x1f\\x93\\x8e\\x94\\x98\\x94\\x1a\\x99\\x81\\x93\\x78\\x1e\\x29\\x06\"\n\"\\xb9\\xf7\\x6a\\x05\\xf1\\x06\\x96\\x94\\x8e\\x8f\\x90\\x1f\\x90\\x8f\\x91\\x97\\x8f\\x1a\\x9c\\x83\\x92\\x77\\x1e\\x0e\\x5f\\x0a\\x87\\xf8\\xd3\\x39\\x0a\\xf7\"\n\"\\xd7\\x16\\xf2\\x23\\x1d\\x29\\x06\\xef\\xf8\\x61\\x05\\xf7\\x2f\\x06\\x7d\\x4a\\x8a\\x82\\x05\\x86\\x07\\x82\\x8a\\x96\\x81\\x96\\x1b\\x9c\\x95\\x94\\xa0\\x87\"\n\"\\x1d\\x86\\x6c\\x1d\\x67\\x0a\\xef\\x06\\x79\\x39\\x05\\xaa\\x06\\xa0\\xda\\x1d\\x66\\x90\\x1f\\x0e\\xf7\\x9c\\xf7\\xc9\\x15\\x8d\\x96\\x05\\x8c\\x8f\\x8b\\x8e\"\n\"\\x8e\\x1a\\x98\\x8a\\x83\\x93\\x7f\\x1b\\x7b\\x80\\x81\\x79\\x87\\x1f\\x7a\\x3d\\x05\\x8a\\x87\\x8b\\x89\\x87\\x1a\\x7f\\x94\\x82\\x97\\x9b\\x96\\x96\\x9c\\x8f\"\n\"\\x1e\\x8f\\x9b\\x05\\xf7\\x62\\x06\\x88\\x7e\\x05\\x8a\\x87\\x8b\\x88\\x88\\x1a\\x7f\\x94\\x82\\x97\\x9b\\x97\\x96\\x9c\\x8f\\x1e\\x9b\\xd9\\x05\\x8c\\x8f\\x8c\"\n\"\\x8f\\x8d\\x1a\\x97\\x8c\\x81\\x94\\x7f\\x1b\\x7b\\x7f\\x81\\x79\\x87\\x1f\\x88\\x7d\\x05\\x5e\\xf7\\x9e\\x15\\xfb\\x3e\\xfb\\x32\\xfb\\x45\\xfb\\x54\\xfb\\x17\"\n\"\\xdc\\x30\\xf7\\x09\\xf7\\x3d\\xf7\\x32\\xf7\\x46\\xf7\\x53\\xf7\\x16\\x3a\\xe7\\xfb\\x08\\x1f\\x7c\\x58\\x15\\xea\\xcb\\x42\\x20\\xfb\\x32\\xfb\\x16\\xfb\\x2b\"\n\"\\xfb\\x1c\\x32\\x4b\\xd7\\xf5\\xf7\\x2d\\xf7\\x17\\xf7\\x2e\\xf7\\x15\\x1f\\x0e\\x2e\\x1d\\xfb\\x71\\xf8\\xde\\x48\\x1d\\x2e\\x1d\\x49\\xf8\\xb7\\x97\\x0a\\x2e\"\n\"\\x1d\\x9f\\xf8\\x77\\x2c\\x1d\\xb8\\x1d\\x7b\\x1a\\x30\\xcf\\x49\\xe9\\x1e\\xa4\\x8c\\x05\\x62\\x71\\x78\\x70\\x6a\\x1a\\x6a\\xa5\\x79\\xb9\\xb7\\xb7\\xa1\\xa1\"\n\"\\x94\\x83\\x93\\x82\\x87\\x87\\x89\\x89\\x87\\x1e\\x7b\\x74\\x88\\x8a\\x71\\x1b\\x7a\\x82\\x91\\x98\\xa1\\x98\\x9b\\xae\\xa3\\x1f\\xf7\\x0e\\xde\\xb8\\xc0\\x9d\"\n\"\\xdc\\x08\\x0e\\xaf\\x1d\\x0e\\xf7\\xe4\\xf7\\x90\\x15\\xf7\\x79\\xf7\\x98\\x05\\xa1\\x06\\xa1\\x40\\x1d\\xfb\\x02\\x06\\x74\\x7c\\x7f\\x79\\x7d\\x2a\\x0a\\xa6\"\n\"\\x06\\xfb\\x4a\\xfb\\x63\\x2c\\xf7\\x63\\x05\\xaa\\x2a\\x1d\\xfb\\x03\\x06\\x74\\x7c\\x7f\\x7a\\x7c\\x2a\\x0a\\xa0\\x06\\xf7\\x0a\\xfb\\x96\\x5f\\xfb\\x5f\\x05\"\n\"\\x26\\x55\\x0a\\xf7\\x8e\\x2a\\x1d\\x29\\x06\\x85\\xf9\\x2c\\x15\\x6f\\x71\\x72\\x70\\x75\\x9b\\x7c\\xa0\\xa8\\xa4\\xa4\\xf7\\x05\\x0a\\x75\\x9b\\x7c\\xa0\\xa9\"\n\"\\xa4\\xa4\\xa7\\xa0\\x7b\\x9a\\x75\\x1f\\x0e\\xf7\\x2a\\xf8\\x98\\x43\\x0a\\xf7\\xee\\xfb\\x14\\x15\\xf7\\x79\\xf7\\x98\\x05\\xa0\\x06\\xa3\\x99\\x96\\x9d\\x99\"\n\"\\x81\\x93\\x77\\x1f\\xfb\\x02\\x06\\x73\\x7e\\xf7\\x17\\x0a\\xa7\\x06\\xfb\\x4a\\xfb\\x63\\x2c\\xf7\\x63\\x05\\xa9\\x23\\x0a\\xfb\\x03\\x06\\x74\\x7d\\x43\\x1d\"\n\"\\x9f\\x06\\xf7\\x0a\\xfb\\x96\\x5f\\xfb\\x5f\\x05\\x27\\x33\\x0a\\xf7\\x8f\\x31\\x1d\\x29\\x06\\x0e\\x2e\\x1d\\x46\\xf8\\xfc\\xe1\\x1d\\x0e\\x2e\\x1d\\xb4\\xf8\"\n\"\\xc2\\xc4\\x1d\\xb7\\x1d\\xf8\\x1b\\xf7\\x09\\x1d\\x7e\\x82\\x85\\x82\\x82\\x1a\\x7e\\x94\\xf7\\x62\\x1d\\xd3\\xbd\\x1d\\x78\\x7d\\x25\\x1d\\x94\\x06\\xf7\\xc1\"\n\"\\xf7\\xa5\\xf7\\x2c\\x1d\\x92\\x91\\xc3\\x0a\\x91\\x0a\\xf7\\x89\\xe0\\x0a\\xf7\\x71\\x16\\x6a\\x6a\\x6b\\x6b\\x72\\x9f\\x77\\xa3\\xae\\xab\\xaa\\xac\\xa5\\x78\"\n\"\\x9e\\x71\\x1f\\x0e\\x91\\x0a\\xf7\\x99\\x15\\x94\\x83\\x86\\x8d\\x84\\x1b\\x7b\\x7c\\x7c\\x7b\\x87\\x8e\\x85\\x50\\x1d\\x82\\x92\\x8f\\x89\\x94\\x1b\\x9a\\x9a\"\n\"\\x9a\\x9b\\x90\\x88\\x90\\x84\\x92\\x1f\\x0e\\xf8\\xb6\\x22\\x1d\\x7a\\x3c\\x05\\x89\\x84\\x8a\\x82\\x87\\x1a\\x7d\\x94\\x82\\x9a\\x9a\\x95\\x96\\xa0\\x8f\\x1e\"\n\"\\xa9\\xf7\\x21\\x05\\xfc\\x5e\\x06\\x70\\xfb\\x16\\x05\\x89\\x81\\x8a\\x85\\x87\\x1a\\x7d\\x94\\x82\\x9a\\x9a\\x95\\x96\\xa0\\x90\\x1e\\x9d\\xe5\\x05\\xa9\\xfb\"\n\"\\x61\\x15\\x8e\\x9b\\x05\\x8f\\x9d\\x8b\\x8b\\x8d\\x1a\\x99\\x81\\x94\\x7d\\x7b\\x81\\x80\\x75\\x87\\x1e\\x77\\x2e\\x05\\x88\\x7b\\x8b\\x8b\\x87\\x1a\\x7d\\x94\"\n\"\\x82\\x9a\\x9a\\x94\\x95\\xa2\\x90\\x1e\\x91\\xa5\\x05\\xf7\\x5e\\x06\\x88\\x7b\\x05\\x89\\x80\\x8a\\x86\\x88\\x1a\\x7c\\x94\\x82\\x9a\\x9a\\x95\\x96\\xa1\\x8f\"\n\"\\x1e\\xa0\\xe8\\x05\\x8e\\x98\\x8b\\x8e\\x8e\\x1a\\x9a\\x82\\x94\\x7c\\x7c\\x81\\x80\\x75\\x86\\x1e\\x85\\x71\\x05\\xfb\\xe1\\xfb\\x94\\x15\\x9c\\xda\\x05\\x8d\"\n\"\\x98\\x8c\\x8e\\x8f\\x1a\\x9a\\x82\\x94\\x7c\\x7c\\x81\\x80\\x75\\x86\\x1e\\x6e\\xfb\\x21\\x05\\xf8\\x5d\\x06\\xa6\\xf7\\x16\\x05\\x8d\\x92\\x8c\\x94\\x90\\x1a\"\n\"\\x99\\x82\\x94\\x7c\\x7c\\x82\\x80\\x75\\x86\\x1e\\x78\\x31\\x05\\x0e\\xaf\\x1d\\xf7\\x16\\xf9\\x72\\xa8\\x0a\\x47\\x1d\\x9b\\xf9\\x66\\x15\\x93\\x83\\x86\\x8e\"\n\"\\x83\\x1b\\x7b\\x7c\\x7c\\x7b\\x87\\x8e\\x86\\x93\\x83\\x1f\\xe8\\x29\\x05\\x82\\x91\\x8f\\x89\\x95\\x1b\\x9a\\x9a\\x9a\\x9b\\x90\\x88\\x8f\\x83\\x93\\x1f\\x0e\"\n\"\\x60\\x0a\\xf8\\x62\\xf9\\x73\\x15\\x98\\xf7\\x07\\x0a\\x7f\\x82\\x87\\x89\\x83\\x7f\\x82\\x1d\\x8b\\x8b\\x95\\x9d\\x1e\\x0e\\x60\\x0a\\xf7\\xf9\\xf9\\x89\\xf7\"\n\"\\x19\\x1d\\xf8\\x5e\\x16\\xb3\\xf7\\x4b\\x05\\x8d\\x94\\x8b\\x8c\\x8e\\x1a\\x96\\x81\\x94\\x7f\\x7a\\x81\\x82\\x75\\xcd\\x1d\\x37\\x0a\\xfb\\x12\\xf8\\x29\\x32\"\n\"\\x0a\\x81\\x0a\\x67\\xf7\\xea\\x15\\x9a\\x95\\x8f\\x71\\x0a\\x87\\x89\\x83\\x7f\\xd3\\x0a\\xf3\\x1d\\x8d\\x0a\\xf8\\xc6\\xf8\\xc7\\x15\\xfc\\x31\\xa2\\x0a\\xfb\"\n\"\\x14\\x34\\x0a\\xf7\\x97\\x06\\x82\\x65\\xe5\\x0a\\x99\\x9b\\x96\\x96\\x9f\\x90\\x1e\\xfc\\x26\\xfc\\x39\\xd8\\x0a\\x8c\\x0a\\xf7\\xbe\\xc0\\x1d\\xf8\\x5d\\x16\"\n\"\\x77\\x2e\\x05\\x8a\\x85\\x8a\\x86\\x86\\x1a\\x7a\\x93\\x82\\x9a\\x9a\\x94\\x95\\xa1\\x90\\x1e\\xa3\\xf7\\x02\\x05\\x8d\\x98\\x8c\\x8e\\x8f\\x1a\\x9a\\x7d\\x94\"\n\"\\x71\\x1e\\x6d\\x06\\x36\\x0a\\xb4\\x4c\\x1d\\xfc\\x1b\\x36\\x1d\\xbd\\x06\\x58\\xfb\\x7e\\x71\\xfb\\x18\\x4b\\x3b\\x31\\x7d\\x19\\x77\\x89\\x86\\x86\\x85\\x71\"\n\"\\x73\\xfb\\x05\\x18\\x89\\x81\\x8a\\x86\\x87\\x1a\\x7e\\x94\\x82\\x9a\\x99\\x95\\x95\\x9f\\x8f\\x1e\\xa2\\xf4\\x05\\xf7\\x9f\\x22\\x1d\\xf7\\x55\\x26\\x1d\\xfb\"\n\"\\x9c\\x06\\xc9\\xbb\\xac\\xc8\\xa4\\xf7\\x07\\x08\\x0e\\xa4\\x1d\\xf7\\x4f\\xf7\\x9e\\x15\\xf7\\x19\\x06\\x83\\x65\\x05\\x8a\\x88\\x8a\\x83\\x89\\xf7\\x1b\\x0a\"\n\"\\x96\\x9f\\x8f\\x1e\\xa7\\xf7\\x15\\x05\\x8c\\x90\\x8c\\x90\\x8e\\x6f\\x1d\\x80\\x77\\x86\\x1e\\x83\\x63\\x05\\xfb\\x19\\x34\\x0a\\xf7\\xa9\\x06\\x78\\x31\\x05\"\n\"\\xf7\\x55\\x1d\\x94\\x82\\x98\\x9c\\x95\\x95\\xa0\\x8f\\x1e\\xab\\xf7\\x23\\x05\\xfc\\x44\\x06\\x75\\x7c\\x7f\\x79\\x7d\\x2a\\x0a\\xba\\x26\\x1d\\x59\\x55\\x0a\"\n\"\\xf8\\x56\\x06\\xae\\xf7\\x35\\x05\\x8c\\x8e\\x8b\\x90\\x90\\x1a\\x96\\x82\\x94\\x7e\\x7c\\x7f\\x80\\x77\\x87\\x1e\\x73\\xfb\\x04\\x05\\xfb\\xbf\\x06\\xf7\\x3a\"\n\"\\xf9\\x2d\\x15\\xdd\\x0a\\xf7\\x05\\x0a\\x76\\x9a\\x7c\\xa1\\xa8\\xa4\\xa3\\xa7\\xa0\\x51\\x1d\\xf8\\x1b\\x22\\x1d\\xa1\\x1d\\xaa\\x21\\x0a\\x75\\x06\\x70\\xf7\"\n\"\\x1a\\x7e\\xc4\\x77\\xb6\\x73\\x9f\\x19\\xa0\\x9f\\xab\\xb4\\xaf\\xbe\\xc2\\xdb\\x93\\x94\\xa3\\x90\\x81\\x64\\x18\\x8a\\x80\\x05\\x79\\x94\\x81\\x9b\\x99\\x94\"\n\"\\x95\\xa0\\x90\\x1e\\x97\\xc2\\x05\\x8d\\x97\\x8c\\x90\\x8e\\x1a\\x9b\\x7e\\x94\\x71\\x51\\x75\\x78\\xfb\\x17\\x31\\x1e\\x5a\\x44\\x7e\\x7f\\x70\\x88\\x08\\x0e\"\n\"\\xf7\\x20\\xf8\\x60\\x15\\x77\\x42\\x8b\\x8b\\x89\\x1a\\x7f\\x94\\x82\\x98\\x98\\x93\\x92\\x9d\\x92\\x1e\\x94\\xa5\\x95\\x9e\\x97\\x9b\\x08\\xbb\\xae\\xca\\xa5\"\n\"\\xda\\x1b\\xda\\xbd\\x6c\\x5a\\x69\\x77\\x6a\\x68\\x74\\x1f\\x71\\x63\\x53\\x7f\\x3b\\x1b\\x6d\\x22\\x0a\\xbc\\x06\\xcc\\xcc\\x7d\\x77\\xa2\\x1f\\x9a\\x7e\\x93\"\n\"\\x79\\x76\\x1a\\x68\\x78\\x66\\x6b\\x71\\x1e\\x6c\\x66\\x59\\x7c\\x4a\\x1b\\x3a\\x56\\x9b\\xb5\\x50\\x1f\\x93\\x80\\x83\\x8e\\x84\\x1b\\x7e\\x7c\\x7c\\x7d\\x60\"\n\"\\xf7\\x0d\\x5b\\xf7\\x02\\xe9\\xca\\x9e\\xb4\\xbd\\x1f\\xb6\\xb0\\xa4\\xbc\\xbd\\x1a\\xc3\\x6e\\xb1\\x50\\xa0\\x1e\\xdd\\xa9\\xb4\\xbc\\xd1\\x1a\\xdb\\x48\\xbe\"\n\"\\x22\\x51\\x65\\x81\\x6c\\x50\\x1e\\x83\\x7d\\x88\\x8a\\x88\\x1b\\x87\\x89\\x90\\x96\\x9f\\x82\\x95\\x7b\\x7c\\x82\\x82\\x7a\\x88\\x1f\\x0e\\x8f\\x0a\\x0e\\xf8\"\n\"\\xc9\\x22\\x1d\\xb9\\x96\\x1d\\x77\\xbb\\x1d\\x9a\\x81\\x92\\x78\\x1f\\x58\\x06\\xfb\\x39\\xf9\\x5d\\x15\\x76\\x7f\\x7b\\x70\\x4e\\xbe\\x64\\xd8\\xbe\\xba\\x9c\"\n\"\\xa9\\xad\\x1f\\xa3\\xa1\\x9e\\xac\\xf7\\x41\\x1d\\x7e\\x5c\\x70\\x55\\x1b\\x5c\\x67\\xa3\\xab\\x8e\\x8b\\x8d\\x8c\\x8d\\x1f\\x8d\\x07\\x8c\\x07\\x91\\x07\\x96\"\n\"\\x82\\x94\\x81\\x1e\\x0e\\x83\\x0a\\x0e\\xf8\\xbb\\x22\\x1d\\xae\\x2f\\x0a\\xfc\\x0f\\x51\\x0a\\xb7\\x06\\x47\\xfb\\xd0\\x05\\x22\\x74\\x5f\\x52\\x51\\x1b\\x83\"\n\"\\x85\\x8c\\x8f\\x7a\\x1f\\x97\\xbf\\x8c\\x96\\x05\\x9a\\x80\\x97\\x7d\\x7d\\x82\\x81\\x76\\x86\\x1e\\x7e\\x4f\\x05\\x89\\x83\\x8a\\x82\\x87\\x1a\\x78\\xab\\x7d\"\n\"\\xb9\\xb5\\xb2\\x9a\\xa7\\xa9\\x1e\\xad\\xac\\xa3\\xbf\\x9c\\xdd\\xd1\\xf7\\xd2\\x18\\xf7\\x54\\x48\\x0a\\x68\\x20\\x0a\\xf7\\x11\\x2b\\x0a\\x66\\x06\\x0e\\xab\"\n\"\\x1d\\x85\\x0a\\x9d\\x0a\\xb2\\x1d\\x94\\x0a\\xf8\\xb0\\xf8\\x96\\x15\\x4e\\x0a\\xfb\\x0c\\xe8\\x2e\\xf7\\x0d\\xd2\\xd4\\xa8\\xc1\\xcb\\x1e\\xa7\\xa3\\x93\\x95\"\n\"\\x98\\xf7\\x1a\\x0a\\x89\\x82\\x82\\x1e\\x4b\\x43\\x5a\\x74\\x46\\x7d\\x1d\\x94\\x9b\\x60\\x1d\\x8d\\x8e\\x1a\\x96\\x81\\x93\\x7f\\x7a\\x81\\x81\\x77\\x86\\x1e\"\n\"\\x0e\\x90\\x0a\\xa9\\x1d\\x0e\\xf8\\x1c\\x22\\x1d\\xad\\x06\\x98\\x06\\x9f\\x8a\\x99\\x96\\x9d\\x1a\\x9b\\x7f\\x92\\x71\\x1e\\xfb\\x03\\x06\\x7b\\x8c\\x05\\x88\"\n\"\\x06\\x78\\x8e\\x79\\x7d\\x79\\x1a\\x79\\x95\\x86\\xab\\x1e\\xa9\\x06\\x84\\x6b\\x43\\x89\\x60\\x80\\x5f\\x6f\\x19\\x43\\x5e\\x5f\\x3e\\x3d\\x1a\\x29\\xcd\\x54\"\n\"\\xf7\\x0f\\x88\\x1e\\x84\\x6b\\x05\\x68\\x06\\x6c\\x79\\x81\\x78\\x7c\\x98\\x84\\xa6\\x1f\\xf7\\x0b\\x06\\xa9\\x9c\\x96\\x9f\\x99\\x7f\\x91\\x71\\x1f\\x6b\\x06\"\n\"\\x92\\xab\\xd3\\x8d\\xb6\\x96\\xb7\\xa7\\x19\\xd2\\xb8\\xb7\\xd8\\xd9\\x1a\\xed\\x48\\xc3\\xfb\\x0d\\x8d\\x1e\\xfb\\x13\\xfb\\xed\\x15\\x25\\x92\\x5e\\xae\\xd2\"\n\"\\x1a\\xbb\\xa2\\xba\\xb2\\xac\\x1e\\xb1\\xab\\xb7\\x9a\\xcd\\x90\\x08\\xc0\\x16\\xf1\\x83\\xb7\\x69\\x42\\x1a\\x55\\x6a\\x51\\x5a\\x6c\\x1e\\x6c\\x78\\x5f\\x7f\"\n\"\\x56\\x87\\x08\\x0e\\xa5\\x1d\\xf8\\xac\\xbe\\x15\\xfb\\x02\\x96\\x0a\\xf8\\x56\\x06\\x76\\x33\\x05\\x8a\\x88\\x8a\\x85\\x87\\x1a\\x7e\\x93\\x84\\x98\\x9b\\x96\"\n\"\\x95\\xa0\\x90\\x1e\\x0e\\xf8\\x13\\xbe\\x15\\x20\\x22\\x0a\\xf7\\x5b\\x21\\x0a\\x64\\x06\\x7a\\x1d\\x05\\x50\\x36\\x50\\x73\\x4f\\x1b\\x5f\\x75\\x9e\\xb2\\x98\"\n\"\\x8d\\x97\\xac\\x0a\\x4c\\xb9\\x61\\xd0\\xc7\\xc8\\x9f\\xb9\\xd5\\x1e\\x0e\\xb1\\xbe\\x15\\x62\\x24\\x1d\\xf8\\xb1\\x5e\\x1d\\x5d\\xb0\\x1d\\x0e\\xf8\\xdb\\xbe\"\n\"\\x15\\x31\\xb0\\x1d\\x3f\\x0a\\x62\\x24\\x1d\\xf8\\xa5\\x06\\x76\\x33\\x05\\x8a\\x87\\x8a\\x85\\x88\\x1a\\x7e\\x93\\x84\\x99\\x9b\\x28\\x1d\\x0e\\xf7\\x0e\\x22\"\n\"\\x1d\\xf7\\x1e\\x26\\x1d\\x59\\x3f\\x1d\\xf7\\x78\\x06\\xf7\\x0f\\xe3\\xd5\\xf2\\xaf\\x81\\xa9\\x76\\xa1\\x1f\\xab\\x6e\\x45\\x9f\\x3a\\x1b\\x54\\x34\\x0a\\xd9\"\n\"\\xf7\\x5a\\x1d\\xfb\\xd5\\x06\\x6a\\xfb\\x1f\\x05\\x8a\\x85\\x8a\\x87\\x87\\x1a\\x7f\\x93\\x83\\x98\\x9b\\x97\\x96\\x9f\\x90\\x1e\\xf7\\x02\\xfc\\x06\\x15\\xbb\"\n\"\\xf7\\x6b\\x05\\xcd\\x06\\xf7\\x06\\xbb\\x70\\x4b\\x42\\x4b\\x58\\x32\\x1f\\x0e\\xf7\\x59\\x22\\x1d\\xb8\\x44\\x0a\\xfb\\x29\\xc5\\x0a\\xf7\\x6b\\x9c\\x1d\\xaf\"\n\"\\xac\\x9e\\xf7\\x33\\x1d\\x60\\x06\\x4d\\xfb\\x9e\\x15\\xba\\xf7\\x6b\\x05\\xc0\\x06\\xf7\\x06\\xbc\\x70\\x4a\\x43\\x4c\\x58\\x31\\x1f\\xf8\\x15\\xf8\\x61\\x15\"\n\"\\xb2\\x23\\x0a\\xfb\\x13\\x3a\\x0a\\xaf\\x26\\x1d\\x62\\xc9\\x0a\\x9d\\x1f\\xf7\\x21\\x31\\x1d\\x5c\\x06\\x0e\\xf7\\x88\\x22\\x1d\\xc3\\x44\\x0a\\xfb\\x34\\xa2\"\n\"\\x0a\\xfb\\x10\\x06\\x4d\\xfb\\x9e\\xd8\\x0a\\xf8\\x7f\\xf7\\x96\\x15\\xfb\\x21\\x65\\x29\\x38\\xfb\\x13\\x1b\\x56\\x71\\x95\\xba\\x46\\x1f\\x91\\x82\\x84\\x8e\"\n\"\\x86\\x1b\\x7e\\x7d\\x7d\\x7f\\x79\\xa1\\x77\\xb5\\x77\\x1f\\x74\\xba\\xb1\\x82\\xbc\\x1b\\xf1\\xda\\xb0\\xd9\\xc8\\x1f\\xc4\\xd2\\xab\\xe6\\xe5\\x1a\\xf7\\x1d\"\n\"\\x3c\\xe2\\xfb\\x11\\x49\\x5a\\x79\\x60\\x58\\x1e\\x8e\\x98\\x8c\\x91\\x91\\x1a\\x9a\\x83\\x93\\x7b\\x79\\x86\\x83\\x5a\\x7e\\x1e\\x76\\x3d\\x05\\x87\\x7c\\x88\"\n\"\\x7c\\x85\\x1a\\x7e\\x95\\x82\\x99\\x98\\x94\\x94\\x9e\\x94\\x1e\\x94\\x9d\\x8d\\x91\\x91\\x95\\x08\\xc8\\xac\\xc6\\xab\\xd7\\x1b\\xee\\xc7\\x4d\\x23\\x7c\\x8a\"\n\"\\x7b\\x89\\x79\\x1f\\xfb\\xa2\\x06\\x70\\x7d\\x82\\x79\\x7c\\x97\\x82\\xa0\\x1f\\x0e\\xf7\\x55\\xf7\\x9e\\x15\\x88\\x72\\x8a\\x7c\\x77\\x1a\\xfb\\x1a\\xcb\\x33\"\n\"\\xed\\xd3\\xc8\\xb3\\xdb\\xbd\\x1e\\xba\\xd8\\xa4\\xe3\\xe6\\x1a\\xf7\\x1a\\x4f\\xdd\\x28\\xfb\\x01\\x2d\\x27\\xfb\\x33\\x62\\x1e\\x59\\x34\\x0a\\xbd\\x06\\xa3\"\n\"\\x99\\x96\\x9d\\x99\\x81\\x93\\x77\\x1f\\xfb\\x0b\\x06\\x73\\x7d\\x81\\x79\\x7c\\x95\\x83\\x9e\\x1f\\x9d\\x06\\x27\\xfc\\x61\\x05\\x62\\x24\\x1d\\xf7\\x20\\x23\"\n\"\\x0a\\x5b\\x06\\xba\\xf7\\x6b\\x05\\xf7\\xc1\\xf7\\x97\\x15\\xd3\\xb2\\x4f\\xfb\\x04\\x2d\\x6c\\x2d\\x55\\x49\\x1f\\x5f\\x68\\x68\\x77\\x62\\x1b\\x44\\x5d\\xd2\"\n\"\\xf7\\x02\\xd5\\xa0\\xd4\\xb3\\xcb\\x1f\\xce\\xb5\\xb8\\xaa\\xc1\\x1b\\x0e\\xf8\\xa7\\x22\\x1d\\xb3\\x2f\\x0a\\xfb\\x5c\\x06\\x3c\\x5a\\x7e\\x6e\\x67\\x1f\\x64\"\n\"\\x6c\\x73\\x5a\\x5a\\x1a\\x4b\\xb2\\x62\\xd5\\x7b\\x1e\\x67\\x75\\x41\\x2f\\x49\\x21\\x08\\x59\\x20\\x0a\\xbb\\x06\\x9c\\x95\\x8d\\x8e\\x8e\\x1f\\x8d\\x8d\\x97\"\n\"\\x9c\\x97\\x9c\\xf7\\x03\\xf7\\x39\\xca\\xc9\\xc1\\x86\\x08\\xc9\\x06\\x60\\xfb\\x68\\x05\\x5c\\x20\\x0a\\xf7\\x21\\x21\\x0a\\x62\\x06\\xb7\\xf8\\x62\\x15\\x60\"\n\"\\xfb\\x5b\\x05\\x2b\\x06\\x2a\\x5c\\xa6\\xc2\\xad\\x9c\\xac\\xa8\\xa2\\x1f\\x9e\\xa5\\xac\\x93\\xc6\\x1b\\x0e\\xf7\\xbe\\x22\\x1d\\xf7\\xcf\\x06\\xb7\\xf7\\x5e\"\n\"\\x8c\\x97\\x05\\xf7\\x20\\x0a\\x6a\\xfb\\x2d\\x05\\xfc\\x2b\\xd9\\x1d\\xf7\\x8b\\xf7\\x60\\x15\\xc5\\xe0\\xc3\\xa3\\xc0\\x1b\\xb7\\xa7\\x6e\\x5d\\x5c\\x77\\x57\"\n\"\\x6b\\x69\\x1f\\x74\\x72\\x74\\x7f\\x65\\x87\\x08\\x74\\x89\\x81\\x83\\x7a\\x1a\\x7a\\x96\\x82\\xa0\\xef\\xe6\\xf4\\xf7\\x09\\xdc\\x5b\\xbe\\x41\\x54\\x52\\x76\"\n\"\\x5c\\x42\\x1e\\xbf\\xf7\\x86\\x05\\xf7\\x12\\x06\\x7e\\x2a\\x05\\x89\\x7b\\x8b\\x8b\\x8a\\x1a\\x7b\\x94\\x82\\x9b\\x9b\\x94\\x97\\xa3\\x8e\\x1e\\x99\\xf7\\x04\"\n\"\\x05\\x8c\\x94\\x8c\\x91\\x8d\\x1a\\x9b\\x7d\\x94\\x72\\x1e\\xfb\\xd9\\x06\\x6a\\x8a\\x8b\\xf7\\x50\\x1d\\x86\\x1a\\x7e\\x94\\x82\\x99\\x99\\x95\\x95\\xa0\\x91\"\n\"\\x1e\\xaa\\xf7\\x01\\x05\\xf7\\x13\\x48\\x0a\\x5e\\x06\\x71\\x5a\\x0a\\xa5\\x1f\\xf7\\x1c\\x2f\\x0a\\x65\\x06\\x0e\\xf7\\x82\\x22\\x1d\\x28\\xfc\\x61\\x05\\x26\"\n\"\\x24\\x1d\\xf7\\x8e\\x23\\x0a\\x29\\x06\\xef\\xf8\\x61\\x05\\xf7\\xa6\\x06\\x6f\\xfb\\x16\\x05\\x8a\\x87\\x8a\\x85\\x87\\x1a\\x7e\\x93\\x84\\x99\\x9b\\x96\\x96\"\n\"\\x9f\\x8f\\x1e\\xb3\\xf7\\x4c\\x05\\xfc\\x71\\x24\\x1d\\xf7\\xea\\xf7\\x6d\\x15\\x98\\x94\\x91\\x95\\x95\\x1a\\x98\\x83\\x93\\x7e\\x84\\x85\\x88\\x84\\x80\\x1e\"\n\"\\xfb\\x1b\\x2a\\x05\\x7e\\x82\\x85\\x82\\x80\\x1a\\x7f\\x94\\x83\\x97\\x93\\x92\\x8e\\x92\\x95\\x1e\\x0e\\xf7\\x1c\\xf7\\xd1\\x15\\xf7\\x11\\xae\\xea\\xdd\\xf7\"\n\"\\x03\\x1b\\xd6\\xcd\\x5f\\x59\\x87\\x8b\\x89\\x8a\\x85\\x1f\\x8a\\x07\\x8a\\x85\\x8b\\x8b\\x89\\x1a\\x7e\\x93\\x83\\x99\\x9b\\x96\\x96\\xa0\\x8f\\x1e\\xa3\\xf7\"\n\"\\x01\\x05\\x8d\\x91\\x8b\\x8e\\x8f\\x1a\\x98\\x83\\x92\\x7d\\x7b\\x80\\x80\\x77\\x86\\x1e\\x88\\x7a\\x05\\xb4\\x63\\x59\\x9f\\x4b\\x1b\\xfb\\x1b\\xfb\\x18\\xfb\"\n\"\\x02\\xfb\\x1d\\x6c\\x1f\\x79\\x37\\x05\\x87\\x7b\\x8a\\x83\\x7c\\x1a\\x50\\x99\\x5d\\xa6\\x68\\x1e\\x58\\xb5\\xca\\x6d\\xce\\x1b\\xc1\\xb5\\x98\\xb1\\xcd\\x1f\"\n\"\\xbc\\xa7\\xaa\\xab\\xa0\\x1a\\x95\\x82\\x93\\x7f\\x82\\x84\\x88\\x82\\x82\\x1e\\x54\\x52\\x45\\x6b\\x4c\\x1b\\x2f\\x41\\xd4\\xe7\\x9b\\x8d\\x9d\\x91\\xab\\x1f\"\n\"\\xf7\\xaf\\x06\\xa6\\x99\\x94\\x9d\\x9b\\x80\\x93\\x75\\x1f\\x0e\\xf8\\x91\\xf8\\xa0\\x15\\xad\\x6c\\x5f\\x9c\\x53\\x1b\\xfb\\x0d\\x22\\x35\\x29\\x6b\\x98\\x6d\"\n\"\\xa1\\x79\\x1f\\xa5\\x76\\xac\\x7f\\xd1\\x7e\\xd0\\x7f\\x9e\\x86\\x9f\\x7d\\x08\\x9b\\x7f\\x96\\x75\\x77\\x1a\\x3b\\x37\\x4a\\x24\\x63\\x61\\x97\\x9b\\xa7\\x0a\"\n\"\\xc1\\x75\\xcc\\x1b\\xf7\\x1e\\xf7\\x05\\xe5\\xf7\\x03\\xaf\\x7b\\xad\\x71\\x9d\\x1f\\x70\\x62\\x1d\\xcf\\xd7\\xc6\\xe4\\xaf\\xaf\\x80\\x7b\\x9c\\x1e\\x94\\x83\"\n\"\\x9f\\x6d\\x79\\x1d\\x0e\\x75\\x1d\\x9f\\x0a\\x99\\xf9\\x2d\\x15\\xdd\\x0a\\xa8\\x9f\\xf7\\x4e\\x1d\\x9b\\x7c\\xa0\\xa8\\xa4\\xa3\\xa8\\x9f\\x7b\\x9a\\x76\\x1f\"\n\"\\x0e\\xf8\\xa7\\x22\\x1d\\xe7\\x06\\xa2\\x99\\x38\\x1d\\xfb\\xbc\\x21\\x1d\\xf7\\x2c\\x06\\x41\\xfb\\xeb\\x05\\x40\\x7b\\x3f\\x50\\x3c\\x1b\\x5b\\x63\\x9f\\xb6\"\n\"\\x64\\x1f\\xa6\\xf7\\x11\\xf1\\x0a\\x76\\x86\\x1e\\x6b\\xfb\\x29\\x91\\x85\\x05\\x4d\\xc4\\xbb\\x73\\xcb\\x1b\\xf4\\xf4\\xde\\xee\\xa0\\x1f\\x0e\\xf8\\x59\\x22\"\n\"\\x1d\\xbb\\x21\\x0a\\xfb\\xbd\\x22\\x0a\\xbc\\x06\\x48\\xfb\\xd0\\x05\\x20\\x74\\x60\\x55\\x4e\\x1b\\x81\\x83\\x8c\\x8d\\x80\\x1f\\x97\\xc0\\x05\\x8c\\x8f\\x8b\"\n\"\\x8e\\x8f\\x1a\\x9c\\x82\\x95\\x7c\\x7c\\x82\\x81\\x77\\x86\\x1e\\x7e\\x4e\\x05\\x89\\x82\\x8a\\x83\\x87\\x1a\\x77\\xa6\\x7e\\xb5\\xf6\\xc3\\xc8\\xf7\\x29\\xab\"\n\"\\x1e\\xd1\\xf7\\xd2\\x05\\xe5\\x48\\x0a\\x64\\x20\\x0a\\xde\\x06\\xe2\\xc3\\x9e\\xb6\\xb2\\x1f\\xaa\\xae\\x9d\\xbb\\xba\\x1a\\xb9\\x76\\xb2\\x67\\x9e\\x1e\\x6e\"\n\"\\x9b\\x74\\x90\\x58\\x8d\\x08\\x7c\\x56\\x15\\xe0\\x8a\\xac\\x75\\x54\\x1a\\x5d\\x72\\x5c\\x66\\x75\\x1e\\x75\\x7e\\x6d\\x84\\x5c\\x89\\x08\\x0e\\xf7\\xb3\\xf7\"\n\"\\x9e\\x15\\x5d\\xfb\\x6b\\x05\\x6b\\x3a\\x0a\\xf7\\x35\\x9c\\x1d\\xae\\xac\\x9f\\xb8\\xba\\x1a\\xe6\\x46\\xba\\xfb\\x1c\\x1e\\x7a\\x06\\xb6\\xf7\\x57\\x05\\xc9\"\n\"\\x44\\x0a\\xfb\\x28\\x06\\x72\\x7e\\x69\\x1d\\xad\\x06\\x60\\xfb\\x57\\x05\\xfb\\x29\\x34\\x0a\\xa9\\x23\\x0a\\xfb\\x01\\x3f\\x1d\\xa6\\x06\\x27\\xfc\\x61\\x5a\"\n\"\\x1d\\xba\\xf7\\x6b\\x05\\xf7\\x2f\\xfb\\x6b\\x15\\xb9\\xf7\\x6b\\x05\\xa2\\x06\\xf4\\xbf\\x6d\\x4d\\x43\\x4c\\x58\\x32\\x1f\\x0e\\xf7\\xcc\\x22\\x1d\\xf7\\x13\"\n\"\\x06\\x7d\\x2a\\x8a\\x7b\\x05\\x7b\\x94\\x81\\x9a\\x9b\\x94\\x96\\xa3\\x8e\\x1e\\x9c\\xf7\\x05\\x05\\x8d\\x9a\\x8b\\x8b\\x8d\\x1a\\x9b\\x7d\\x94\\x71\\x1e\\xfb\"\n\"\\xdb\\x06\\x6b\\x8a\\x8a\\xf7\\x50\\x1d\\x87\\x1a\\x7d\\x95\\x82\\x98\\x99\\x95\\x95\\xa0\\x91\\x1e\\xaa\\xf7\\x01\\x05\\xf7\\x13\\x48\\x0a\\x5e\\x22\\x0a\\xf7\"\n\"\\x1f\\x21\\x0a\\x62\\x06\\xad\\xf7\\x2c\\x05\\xc6\\xd2\\xb9\\xa2\\xba\\x1b\\xb3\\xa0\\x75\\x62\\x7c\\x89\\x78\\x88\\x7d\\x1f\\x71\\xfb\\x0f\\x05\\x5d\\x20\\x0a\"\n\"\\xf7\\x0d\\x21\\x0a\\x75\\x06\\xa5\\xf7\\x0b\\x05\\x8f\\x9f\\x8d\\x9b\\x9a\\x1a\\xd0\\x5e\\xba\\x48\\x5a\\x5b\\x78\\x60\\x53\\x1e\\x0e\\x83\\x0a\\x31\\xf7\\x6d\"\n\"\\x15\\x98\\x94\\x91\\x95\\xf3\\x0a\\x2a\\x05\\x7e\\x83\\x54\\x0a\\xa9\\x1d\\x71\\xf8\\xb9\\x15\\x77\\x7f\\x7b\\x70\\x4e\\xbe\\x64\\xd8\\xbe\\xbb\\x9c\\xa9\\xac\"\n\"\\x1f\\xa3\\xa2\\x9e\\xab\\xf7\\x41\\x1d\\x7d\\x5d\\x70\\x55\\x1b\\x5b\\x68\\xa3\\xac\\x1f\\x91\\x07\\x8c\\x8d\\x8b\\x90\\x8e\\x1a\\x95\\x82\\x94\\x80\\x1e\\x0e\"\n\"\\xf8\\x05\\x16\\xf1\\x30\\x0a\\x5c\\x06\\xf7\\x19\\x0a\\x94\\x91\\x1a\\xc9\\x51\\xb5\\x36\\x65\\x2e\\x79\\x7c\\x65\\x1e\\x7d\\x85\\x83\\x81\\x7f\\x1a\\x7f\\x94\"\n\"\\x82\\x96\\x90\\x8d\\x8b\\x90\\x9b\\x1e\\xa0\\xd7\\xa5\\x90\\xad\\x1b\\xca\\xb2\\x74\\x65\\x86\\x8b\\x87\\x8a\\x88\\x1f\\x7d\\x4b\\x05\\x99\\x58\\x6c\\x90\\x5e\"\n\"\\x1b\\xfb\\x23\\xfb\\x00\\x40\\x28\\x49\\xbf\\x63\\xe0\\xd0\\xc5\\xa0\\xc0\\xd4\\x1f\\x99\\xc7\\x15\\x4e\\x39\\x55\\x75\\x44\\x1b\\x51\\x6a\\xa2\\xb4\\xcc\\xdf\"\n\"\\xbc\\xf7\\x03\\xb7\\xb4\\x86\\x82\\xae\\x1f\\x0e\\xf8\\x31\\xf8\\x7b\\x15\\xc0\\xac\\x93\\x9e\\xa5\\x1f\\xa0\\x9b\\x97\\xa0\\x9e\\x1a\\x9b\\x81\\x95\\x7b\\x7c\"\n\"\\x82\\x84\\x7a\\x85\\x1e\\x86\\x76\\x6e\\x7f\\x56\\x8a\\x08\\x2f\\x06\\x39\\x46\\x6c\\x56\\x6a\\x1f\\x62\\x49\\x62\\xfb\\x29\\x37\\x1a\\x28\\xdd\\x46\\xf7\\x0c\"\n\"\\xdf\\xce\\xa5\\xc1\\xc4\\x1e\\xc1\\xbf\\xa8\\xcb\\xd1\\x1a\\xf7\\x02\\x3d\\xd1\\xfb\\x0f\\x3d\\x4a\\x72\\x57\\x53\\x1e\\xad\\xec\\xb6\\xab\\xeb\\x8d\\x08\\x9f\"\n\"\\x22\\x15\\xe8\\xc5\\x58\\x3a\\x55\\x74\\x58\\x61\\x60\\x1f\\x5e\\x5d\\x57\\x76\\x47\\x1b\\x2e\\x51\\xbd\\xdc\\xf7\\x0b\\xf2\\xeb\\xf7\\x14\\x1f\\x0e\\xe3\\xbe\"\n\"\\x15\\x59\\x24\\x1d\\xf7\\xb0\\x06\\xd6\\xbe\\x96\\xa0\\xa7\\x1f\\xa4\\x9e\\x9a\\xaa\\xad\\x1a\\xc0\\x6e\\xa9\\x47\\x9d\\x1e\\xcc\\xa0\\xa7\\xa9\\xbd\\x1a\\xcc\"\n\"\\x55\\xaf\\x28\\x1e\\xfb\\x84\\x2b\\x1d\\xc0\\x06\\xa5\\xfb\\x12\\x15\\xa5\\xf7\\x12\\x05\\xf7\\x21\\x06\\xd0\\xad\\x78\\x65\\x5e\\x58\\x73\\x28\\x1f\\xfb\\x36\"\n\"\\xfb\\x53\\x15\\xaa\\xf7\\x20\\x05\\xf7\\x14\\x06\\xf3\\xc0\\x72\\x5a\\x5c\\x62\\x78\\x29\\x1f\\x0e\\xc2\\x1d\\x0e\\xf8\\x58\\x16\\x7c\\x51\\x8a\\x7d\\x05\\x7a\"\n\"\\x94\\x81\\x9b\\x99\\x94\\x95\\xa0\\x90\\x1e\\x9c\\xd6\\x05\\x8c\\x92\\x8c\\x92\\x90\\x1a\\x9b\\x7e\\x94\\x71\\x1e\\x6a\\x06\\xd0\\xf7\\xd1\\x05\\xad\\x2b\\x0a\"\n\"\\xfc\\x08\\x20\\x0a\\xb9\\x06\\x68\\xfb\\x34\\x7a\\x31\\x55\\x56\\x36\\x7e\\x19\\x77\\x89\\x86\\x87\\x85\\x70\\x7b\\x3e\\x18\\x88\\x7e\\x8b\\x89\\x88\\x1a\\x7e\"\n\"\\x95\\x82\\x9b\\x9a\\x94\\x94\\x9e\\x8f\\x1e\\x9b\\xd1\\x05\\xf7\\x74\\xf8\\x04\\x15\\xf7\\x4e\\x06\\x47\\xfb\\xd1\\x05\\xfb\\x87\\x06\\x8c\\x8c\\xb4\\xa4\\xa9\"\n\"\\xbe\\x9c\\xd7\\x19\\x0e\\xf8\\x9f\\xf7\\x57\\x15\\x92\\xb0\\x8d\\x99\\x9b\\x1a\\xef\\xf7\\x0f\\x0a\\xfb\\x04\\xdd\\x3f\\xf7\\x0c\\xf3\\xf7\\x17\\xbd\\xb3\\x97\"\n\"\\x83\\x94\\x7e\\x85\\x87\\x8a\\x84\\x81\\x1e\\x6c\\x5b\\x41\\x76\\x4c\\x1b\\x2d\\xd5\\x0a\\xe4\\xcd\\x52\\x42\\x86\\x1f\\x0e\\xf8\\x9e\\xf7\\x56\\x15\\x93\\xb0\"\n\"\\x8c\\x90\\xa1\\x1a\\xf4\\x3e\\xd1\\xfb\\x05\\xfb\\x2a\\xfb\\x19\\xfb\\x0f\\xfb\\x1e\\xfb\\x05\\xdc\\x40\\xf7\\x10\\xf2\\xf7\\x16\\xbd\\xb3\\x96\\x82\\x95\\x80\"\n\"\\x85\\x85\\x89\\x85\\x81\\x1e\\x6a\\x56\\x47\\x78\\x4c\\x1b\\x2b\\x4b\\xc4\\xdf\\x90\\x8b\\x8c\\x8c\\x97\\x1f\\x97\\xbe\\x15\\xdd\\xb0\\xde\\xc1\\xe4\\x1b\\xe5\"\n\"\\xc4\\x56\\x38\\x1f\\xfb\\x5b\\xf7\\xed\\xdd\\x1d\\xf7\\xfb\\xf8\\x04\\x15\\xa7\\x21\\x0a\\x2a\\x20\\x0a\\x9c\\x06\\x72\\xfb\\x0a\\x05\\x84\\x06\\x74\\x8c\\x84\"\n\"\\x93\\x71\\xc4\\x08\\xe5\\x64\\x7d\\x98\\x50\\x1b\\x6f\\x83\\x84\\x71\\x85\\x1f\\x83\\x67\\x05\\x88\\x7e\\x8b\\x8a\\x87\\x1a\\x7e\\x94\\x82\\x9a\\x9b\\x96\\x95\"\n\"\\x9c\\x8f\\x1e\\x92\\xaa\\xa2\\x89\\x8f\\x86\\xa0\\x5f\\x19\\x9c\\x63\\x9a\\x6d\\x97\\x7a\\x58\\x70\\x88\\x89\\x5c\\x50\\x43\\x30\\x18\\x6f\\x20\\x0a\\xa4\\x06\"\n\"\\xa3\\x8c\\x8d\\x8c\\x92\\x91\\x95\\x98\\x19\\xd7\\xeb\\xb8\\xc2\\xb4\\xa9\\xa6\\x88\\x19\\x91\\x06\\x6b\\xfb\\x28\\x05\\x70\\x22\\x0a\\xeb\\x21\\x0a\\x7b\\x06\"\n\"\\xab\\xf7\\x28\\x05\\x94\\x06\\xb4\\x88\\x9c\\x7b\\xa0\\x4f\\xaa\\x31\\x18\\x95\\x70\\x8e\\x89\\xa8\\x8a\\x08\\xa5\\x2b\\x0a\\x77\\x06\\x6c\\xe4\\x7c\\xb5\\x74\"\n\"\\xad\\x75\\x95\\x19\\xa5\\xa0\\x94\\x93\\xa5\\xaa\\xc2\\xce\\x97\\x95\\xa6\\x8f\\x86\\x78\\x18\\x89\\x85\\x8b\\x89\\x8a\\x1a\\x78\\x94\\x81\\x9b\\x99\\x94\\x95\"\n\"\\xa1\\x90\\x1e\\x92\\xac\\x05\\x8d\\x92\\x8c\\x94\\x8f\\x1a\\x9b\\x7e\\x93\\x71\\x57\\x76\\x7e\\x42\\x4b\\x1e\\x4d\\x45\\x81\\x82\\x6f\\x87\\x08\\x0e\\xf7\\x47\"\n\"\\xf8\\x1c\\x15\\x8b\\x0a\\x7b\\x95\\x80\\x9f\\x83\\x1f\\x74\\xc2\\xcd\\x7f\\xce\\x1b\\xe2\\xc6\\x98\\xa8\\xb8\\x1f\\xb4\\xa6\\xa1\\xaf\\xb3\\x1a\\xb8\\x72\\xa8\"\n\"\\x57\\x99\\x1e\\xcc\\xa3\\xac\\xaf\\xbc\\x1a\\xcb\\x4a\\xb3\\x21\\x39\\x51\\x7c\\x6a\\x61\\x1e\\x0e\\x72\\x1d\\x0e\\x72\\x1d\\xfb\\xcf\\xf7\\x45\\x15\\x92\\x07\"\n\"\\x97\\x82\\x93\\x7e\\x77\\xf7\\x35\\x1d\\xa3\\x9d\\xaa\\xa0\\x28\\x0a\\x7d\\x80\\x82\\x7c\\x86\\x1e\\x61\\x7e\\x5d\\x70\\x53\\x1b\\x5c\\x67\\xa3\\xab\\x8e\\x8b\"\n\"\\x8d\\x8c\\x8e\\x1f\\x0e\\xa2\\x1d\\xf8\\x8d\\xf8\\x04\\x15\\xae\\x06\\xa5\\x3a\\x1d\\xfc\\x08\\x20\\x0a\\xb9\\x06\\x5b\\xfb\\x71\\x05\\x41\\x7b\\x65\\x67\\x4e\"\n\"\\x1b\\x82\\x85\\x8c\\x8c\\x81\\x1f\\x90\\xaa\\x05\\x8c\\x8e\\x8b\\x8f\\x8e\\x1a\\x9d\\x82\\x95\\x7b\\x7c\\x82\\x81\\x77\\x88\\x1e\\x84\\x66\\x05\\x89\\x7f\\x8a\"\n\"\\x85\\x86\\x1a\\x78\\xa4\\x7f\\xb4\\xf0\\xc4\\xbd\\xf7\\x00\\xa3\\x1e\\xbb\\xf7\\x73\\x05\\xf7\\x4f\\x25\\x0a\\x69\\x22\\x0a\\xf7\\x0c\\x06\\xa4\\x99\\x94\\x9b\"\n\"\\x9c\\x7e\\x94\\x71\\x1f\\x6a\\x06\\x0e\\xf7\\xc4\\xb3\\x15\\xf7\\x65\\xf7\\xd2\\x49\\xfb\\xc7\\x05\\x45\\x8d\\x1d\\xf7\\x28\\x3e\\x1d\\x70\\x06\\xcf\\xf7\\xd1\"\n\"\\x05\\x9f\\x5e\\x1d\\x20\\x06\\xfb\\x69\\xfb\\xd9\\x3d\\xf7\\xd9\\x05\\x24\\x33\\x0a\\x9d\\x06\\x47\\xfb\\xd1\\x05\\x6e\\x06\\x73\\x7e\\x69\\x1d\\xf7\\x29\\x06\"\n\"\\xa2\\x6d\\x1d\\x48\\x06\\xcd\\xf7\\xca\\xdb\\xfb\\xd5\\x05\\x0e\\xf8\\x3f\\xf7\\x53\\x15\\x6c\\xfb\\x20\\x05\\x63\\x06\\x73\\x7e\\x81\\x79\\x7c\\xf7\\x26\\x1d\"\n\"\\xcf\\xf7\\xd1\\x05\\xac\\x23\\x0a\\xfb\\x0c\\x06\\x73\\x7e\\x81\\x79\\x7c\\x95\\x83\\x9d\\x1f\\xad\\x06\\x70\\xfb\\x12\\x05\\xfb\\x93\\x6e\\x0a\\x77\\x1f\\xfb\"\n\"\\x0b\\x06\\x73\\x7d\\x81\\x78\\x7d\\x95\\x83\\x9e\\x1f\\xa9\\x57\\x1d\\xaa\\xf7\\x20\\x05\\x0e\\xf7\\xf1\\x56\\x1d\\x0e\\xf8\\x64\\xf8\\x04\\x15\\x47\\xfb\\xd1\"\n\"\\x05\\x5a\\x24\\x1d\\xf7\\x1f\\x23\\x0a\\x65\\x06\\xd2\\xf7\\xd1\\x05\\xa5\\x31\\x1d\\xfc\\x3d\\x45\\x0a\\xaf\\x57\\x1d\\xcf\\xf7\\xd1\\x05\\x0e\\xf7\\x58\\xf8\"\n\"\\x37\\x15\\x25\\x26\\x0a\\xba\\x06\\xfb\\x00\\xfc\\x87\\x4d\\x1d\\xf7\\x55\\x06\\xa2\\x99\\x96\\x9e\\x9a\\x83\\x91\\x77\\x1f\\x30\\x06\\xbb\\xf7\\x75\\x05\\x51\"\n\"\\xae\\xbc\\x71\\xd4\\x1b\\xf7\\x24\\xf7\\x15\\xf7\\x0c\\xf7\\x1a\\xf1\\x43\\xce\\xfb\\x03\\x41\\x55\\x73\\x50\\x4c\\xf7\\x4b\\x1d\\xfb\\x00\\x35\\x52\\xbe\\xd8\"\n\"\\xef\\xf7\\x23\\x0a\\xf8\\x8c\\xf8\\x15\\x15\\xab\\x68\\x5b\\x9b\\x50\\x1b\\xfb\\x30\\xfb\\x19\\xfb\\x13\\xfb\\x29\\x22\\xd5\\x47\\xf7\\x06\\xcf\\xd3\\x9f\\xae\"\n\"\\xc6\\x1f\\xb2\\xa2\\x9c\\x9c\\x9c\\x1a\\x96\\x82\\x93\\x7f\\x83\\x87\\x89\\x83\\x80\\x1e\\x64\\x6e\\x7d\\x82\\x6a\\x80\\x08\\x7d\\x66\\x62\\x84\\x67\\x1b\\x31\"\n\"\\x53\\xbe\\xdb\\xb9\\x9d\\xbc\\xac\\xb3\\x1f\\xc0\\xb5\\xc7\\xa7\\xd2\\x1b\\xb5\\xb1\\xe0\\x1d\\x80\\x77\\x87\\x1e\\x0e\\xf7\\xfb\\xf8\\x04\\x15\\xf7\\x2e\\x06\"\n\"\\x6e\\xfb\\x16\\x8a\\x7e\\x05\\x7e\\x93\\x84\\x98\\x9c\\x96\\x96\\x9e\\x8f\\x1e\\xb3\\xf7\\x4c\\x05\\xfc\\x64\\x06\\x64\\xfb\\x49\\x05\\x89\\x83\\x8b\\x89\\x88\"\n\"\\x1a\\x7e\\x93\\x84\\x98\\x9c\\x96\\x96\\x9e\\x90\\x1e\\xa7\\xf7\\x19\\x05\\xf7\\x2e\\x06\\x47\\xfb\\xd1\\x05\\x27\\xc9\\x0a\\x9d\\x1f\\xf7\\x8f\\x6c\\x0a\\x28\"\n\"\\x06\\x0e\\xb3\\x1d\\x0e\\xf8\\x23\\xf8\\xb6\\x15\\x8d\\x94\\x8c\\x92\\x90\\x1a\\x9a\\x81\\x94\\x7a\\x1e\\x8a\\x06\\x7e\\x8a\\x48\\x87\\x05\\x71\\x89\\x7e\\x82\"\n\"\\x7b\\x1a\\x7b\\x96\\x82\\x9c\\x90\\x90\\x8b\\x8c\\x8f\\x1e\\xba\\x8f\\x71\\xfb\\x0f\\x05\\x98\\x77\\x7c\\x8f\\x72\\x1b\\x52\\x57\\x6a\\x4d\\x62\\x1f\\x63\\x50\"\n\"\\x76\\x46\\x45\\x1a\\x30\\xbd\\x4c\\xd3\\x9b\\x97\\x8d\\x91\\xa7\\x1e\\x78\\x2c\\x05\\x3a\\x20\\x0a\\xf7\\x69\\x21\\x0a\\x3b\\x06\\xa2\\xf2\\x05\\x7e\\x9c\\x9d\"\n\"\\x86\\xa4\\x1b\\xc4\\xbd\\xaa\\xc8\\xb4\\x1f\\xb3\\xc5\\xa0\\xcf\\xd0\\x1a\\xf1\\x5e\\xc7\\x3e\\x77\\x7d\\x88\\x82\\x74\\x1e\\x7f\\x4d\\x15\\x9b\\x9f\\x9e\\x92\"\n\"\\xa1\\x1b\\xbc\\xa4\\x65\\x43\\xfb\\x0e\\x41\\xfb\\x06\\x3d\\x75\\x7e\\x92\\x9b\\x7d\\x1f\\x57\\x8d\\x15\\x7a\\x77\\x79\\x84\\x74\\x1b\\x59\\x70\\xb0\\xd0\\xc5\"\n\"\\x9b\\xc2\\xaa\\xbd\\x1f\\xbe\\xac\\xae\\xa4\\xb5\\x1b\\xa1\\x97\\x85\\x7c\\x97\\x1f\\x0e\\xf7\\xe7\\xf7\\x6e\\x15\\x8a\\x0a\\xf7\\x18\\x2a\\x1d\\x84\\x06\\x0e\"\n\"\\xf8\\xac\\xbe\\x15\\x28\\xba\\x1d\\xf8\\x44\\x06\\x76\\x33\\x05\\x89\\x82\\x8b\\x8a\\x7e\\x0a\\x95\\xa0\\x90\\x1e\\x0e\\xf8\\x16\\xbe\\x15\\x22\\x20\\x0a\\xf7\"\n\"\\x54\\x06\\xa5\\x98\\x80\\x0a\\x69\\x06\\xcf\\xf7\\xd1\\x05\\xb2\\x2b\\x0a\\xfb\\x14\\x22\\x0a\\xaf\\x06\\x6f\\xfb\\x11\\x05\\x60\\x37\\x55\\x7a\\x52\\x1b\\x60\"\n\"\\x74\\x99\\xa6\\x95\\x8d\\x97\\x8e\\x9a\\x1f\\xa3\\xf6\\x05\\xb8\\x06\\xa5\\xbc\\x0a\\x58\\xb8\\x6a\\xd1\\xc7\\xc5\\x9a\\xad\\xd0\\x1e\\x0e\\xb1\\xbe\\x15\\x62\"\n\"\\x24\\x1d\\xf8\\xb1\\x5e\\x1d\\x5d\\x8e\\x0a\\x0e\\xf8\\xe3\\xbe\\x15\\x29\\x8e\\x0a\\x47\\x7e\\x1d\\xf8\\xae\\x06\\x76\\x33\\x05\\x8a\\x88\\x8a\\x84\\x88\\x1a\"\n\"\\x7f\\x93\\x83\\x98\\x9c\\x28\\x1d\\x0e\\xee\\xf8\\x04\\x15\\xf7\\x1b\\x06\\x47\\xfb\\xd1\\x05\\x5a\\x33\\x0a\\xf7\\x6f\\x06\\xf7\\x18\\xc9\\xb3\\xe1\\xdb\\x52\"\n\"\\xaf\\xfb\\x13\\x1f\\x3d\\x06\\xa6\\xf7\\x12\\x05\\xc6\\x06\\xa3\\x98\\x95\\x9e\\x9a\\x81\\x92\\x79\\x1f\\xfb\\xbb\\x06\\x6a\\xfb\\x1e\\x05\\x8a\\x85\\x8a\\x86\"\n\"\\x88\\x1a\\x7e\\x93\\x84\\x98\\x9b\\x97\\x96\\x9f\\x90\\x1e\\xf7\\x20\\xfb\\x77\\x15\\xaa\\xf7\\x20\\x05\\xca\\x06\\xf7\\x07\\xb5\\x78\\x57\\x59\\x64\\x78\\x27\"\n\"\\x1f\\x0e\\xf7\\x45\\xf8\\x04\\x15\\xc6\\x31\\x1d\\xfb\\x38\\xf4\\x1d\\xf7\\x73\\x06\\xde\\xc0\\x97\\xa3\\xa3\\x1f\\xa0\\xa0\\x98\\xac\\xad\\x1a\\xd9\\x4d\\xb3\"\n\"\\xfb\\x0e\\x1e\\x38\\x06\\x63\\xfb\\x53\\x15\\xaa\\xf7\\x20\\x05\\xce\\x06\\xf7\\x09\\xb3\\x79\\x56\\x58\\x66\\x79\\x24\\x1f\\xf7\\xef\\xf7\\xd1\\x15\\xa3\\x06\"\n\"\\xa3\\xf7\\x08\\x0a\\x27\\xe2\\x0a\\x9f\\x1f\\xa2\\x06\\x48\\xfb\\xd1\\x05\\x73\\x2b\\x1d\\xf3\\x6c\\x0a\\x6e\\x06\\x0e\\xf7\\x64\\xf8\\x04\\x15\\xcc\\x3e\\x1d\"\n\"\\xfb\\x3f\\xf4\\x1d\\xf7\\xb0\\x06\\xf7\\x1a\\xc7\\xb0\\xde\\xda\\x4a\\xb6\\xfb\\x0a\\x1f\\xfb\\x25\\x06\\x63\\xfb\\x53\\x15\\xaa\\xf7\\x20\\x05\\xf7\\x14\\x06\"\n\"\\xf7\\x03\\xb9\\x76\\x58\\x5c\\x60\\x76\\x2b\\x1f\\x0e\\xf8\\x6a\\xf7\\x54\\x15\\x31\\x74\\x2e\\x48\\x27\\x1b\\x4c\\x59\\x9e\\xb6\\x55\\x1f\\x97\\x7c\\x84\\x8e\"\n\"\\x82\\x1b\\x7d\\x80\\x80\\x7d\\x79\\xa4\\x75\\xbb\\x73\\x1f\\x6f\\xc3\\xb3\\x80\\xbe\\x1b\\xdc\\xcd\\xa5\\xc3\\xc4\\x1f\\xc2\\xc0\\xa7\\xc8\\xcf\\x1a\\xf7\\x03\"\n\"\\x3b\\xd5\\xfb\\x0c\\x44\\x4f\\x75\\x60\\x5d\\x1e\\x8c\\x98\\x8b\\x91\\x90\\x1a\\x9c\\x83\\x95\\x7c\\x78\\x84\\x7f\\x63\\x86\\x1e\\x83\\x4f\\x05\\x89\\x7f\\x8b\"\n\"\\x86\\x85\\x1a\\x7a\\x94\\x80\\x99\\x99\\x92\\x92\\x9d\\x94\\x1e\\x94\\x9e\\x92\\x98\\x96\\x98\\x08\\xae\\xa9\\xc4\\xa0\\xcf\\x1b\\xc1\\xb0\\x7e\\x70\\xa4\\x1f\"\n\"\\xa0\\x73\\x97\\x6c\\x6b\\x1a\\x89\\x8b\\x85\\x8a\\x87\\x1e\\xfb\\x8f\\x36\\x1d\\x0e\\xf7\\x5f\\xf7\\x53\\x15\\x8a\\x83\\x8b\\x83\\x7f\\x1a\\xfb\\x01\\xc9\\x45\"\n\"\\xed\\xc4\\xc1\\xa5\\xb9\\xaf\\x1e\\xb6\\xc0\\xa5\\xda\\xd4\\x1a\\xf5\\x52\\xcd\\x2f\\x2b\\x35\\x40\\xfb\\x08\\x69\\x1e\\x46\\x6e\\x0a\\x78\\x1f\\xfb\\x0c\\x06\"\n\"\\x73\\x7d\\x43\\x1d\\xa9\\x57\\x1d\\xaa\\xf7\\x20\\x05\\xf7\\xb6\\xf7\\x53\\x15\\xcd\\xb0\\x5d\\x3a\\x46\\x74\\x49\\x64\\x61\\x1f\\x6e\\x70\\x6d\\x7d\\x65\\x1b\"\n\"\\x43\\x60\\xbe\\xdf\\xc0\\x9c\\xbe\\xac\\xb5\\x1f\\xb8\\xad\\xb2\\xa0\\xb9\\x1b\\x0e\\xf8\\x90\\xf8\\x03\\x15\\xb5\\x06\\xa5\\x99\\x94\\x9c\\x9c\\x7d\\x94\\x71\"\n\"\\x1f\\xfb\\x7b\\x06\\xfb\\x0c\\x42\\x58\\x36\\x54\\xad\\x6a\\xd1\\x80\\x1f\\x64\\x70\\x52\\x56\\x5c\\x56\\x08\\x52\\x20\\x0a\\xc0\\x06\\x9e\\x8f\\x8c\\x8d\\x8f\"\n\"\\x1f\\x92\\x90\\x8c\\x8d\\x98\\x9a\\xef\\xf7\\x04\\xc9\\xb7\\xbf\\x89\\x08\\xcf\\x06\\x6e\\xfb\\x14\\x05\\x58\\x20\\x0a\\xf7\\x27\\x21\\x0a\\x61\\x06\\x9b\\xf7\"\n\"\\xd0\\x15\\x6d\\xfb\\x1e\\x05\\xfb\\x12\\x06\\x3c\\x65\\x9e\\xb3\\xc0\\xbd\\xa5\\xf0\\x1f\\x0e\\xf8\\xb4\\xf8\\x37\\x15\\xfc\\x3d\\x24\\x0a\\x79\\x7d\\x95\\x83\"\n\"\\x9d\\x1f\\xeb\\x06\\x48\\xfb\\xd1\\x05\\x26\\x24\\x1d\\xf7\\x8e\\x23\\x0a\\x29\\x06\\xcf\\xf7\\xd1\\x05\\xf7\\xda\\x06\\xb3\\xf7\\x49\\x8c\\x99\\x05\\x98\\x83\"\n\"\\x92\\x7e\\x7a\\x80\\x80\\x77\\x87\\x1e\\x0e\\xcf\\x0a\\x5b\\x06\\x74\\x7f\\x81\\x79\\x7c\\x94\\x83\\x9c\\x1f\\xb9\\x06\\x31\\xfc\\x33\\x5a\\x1d\\xc0\\xf7\\x86\"\n\"\\x05\\xd7\\xe2\\xa3\\x98\\xc2\\x1b\\xc7\\xac\\x70\\x5c\\x85\\x8b\\x8a\\x88\\x7f\\x1f\\x49\\xfb\\xca\\x7c\\x4b\\x51\\x5b\\x4e\\x8d\\x19\\xfb\\x14\\xf7\\x5b\\x1d\"\n\"\\xf7\\x14\\x06\\xe8\\xde\\xcf\\xe6\\x9c\\x1f\\xcf\\xf7\\xcc\\x05\\x8d\\x96\\x8c\\x93\\x94\\x1a\\xd1\\x54\\xb9\\x39\\x56\\x56\\x75\\x60\\x56\\x1e\\xa0\\xed\\x05\"\n\"\\xf7\\x25\\x06\\xa6\\x9a\\x95\\x9c\\x9b\\x7f\\x93\\x76\\x1f\\x0e\\xc2\\x1d\\xf7\\xdc\\xdc\\x1d\\xf7\\x25\\xf7\\x86\\x15\\xe5\\xb3\\xd4\\xbd\\xe8\\x1b\\xd4\\xc5\"\n\"\\x68\\x5f\\x88\\x8b\\x88\\x8a\\x89\\x1f\\x89\\x07\\x8a\\x85\\x8b\\x8b\\x89\\x1a\\xf7\\x54\\x1d\\x9f\\x90\\x1e\\x9e\\xe4\\x05\\x8c\\x91\\x8c\\x8f\\x8e\\x1a\\x98\"\n\"\\x83\\x93\\x7e\\x79\\x82\\x81\\x73\\x84\\x1e\\xab\\x68\\x5d\\x9b\\x4f\\x1b\\x3b\\x49\\x6f\\x51\\x53\\x1f\\x55\\x54\\x6f\\x48\\x46\\x1a\\x21\\xd4\\x49\\xf7\\x09\"\n\"\\xf3\\xf7\\x25\\xcd\\xba\\x96\\x83\\x93\\x7f\\x83\\x85\\x88\\x83\\x80\\x1e\\x5c\\x4b\\x4c\\x74\\x47\\x1b\\x32\\x52\\xbd\\xda\\x94\\x8c\\x94\\x8c\\x94\\x1f\\xf7\"\n\"\\x91\\x06\\xa7\\xf7\\x22\\x0a\\xc8\\xac\\x15\\xf7\\x55\\x1d\\x95\\x82\\x97\\x9b\\x28\\x1d\\x8c\\x07\\x6b\\xac\\xba\\x7b\\xca\\x1b\\xf7\\x16\\xf7\\x61\\x1d\\xa1\"\n\"\\x68\\x96\\x4e\\x91\\x40\\x93\\x8b\\x8b\\x76\\x94\\x08\\x78\\x93\\x7d\\x9b\\x9a\\x1a\\xb4\\xcc\\xae\\xd7\\xaf\\xaa\\x84\\x7f\\x9e\\x1e\\x94\\x85\\x9d\\x77\\xf7\"\n\"\\x0e\\x1d\\x8f\\x1a\\x96\\x82\\x94\\x7e\\x7e\\x80\\x81\\x7b\\x85\\x1e\\xa5\\x6f\\x60\\x99\\x55\\x1b\\xfb\\x04\\xec\\x0a\\xc0\\x85\\xa3\\x85\\xa2\\xf7\\x46\\x1d\"\n\"\\x3f\\x53\\x6b\\x0a\\x81\\x94\\x7f\\x7a\\x81\\x81\\x76\\x87\\x1e\\x0e\\xce\\x1d\\xf7\\x0e\\xf8\\xcf\\x77\\x0a\\xf8\\x07\\xf8\\x37\\x15\\xfb\\x39\\x06\\x74\\x7c\"\n\"\\x7f\\x79\\x7d\\x95\\x84\\x9e\\x1f\\xf7\\x03\\x25\\x0a\\xfb\\x2e\\x55\\x0a\\xf7\\xf9\\x2a\\x1d\\xfb\\x2c\\x06\\x55\\xf8\\xaf\\x15\\x6f\\x71\\x72\\x70\\x76\\x9b\"\n\"\\x7c\\xa0\\xa9\\xa4\\xa3\\xa8\\x9f\\x7c\\x9a\\x74\\x1f\\xf7\\x63\\xd9\\x0a\\xf8\\x53\\x9e\\x0a\\xf8\\x38\\xf8\\x04\\x15\\xae\\x21\\x0a\\xfb\\xa6\\x22\\x0a\\xb9\"\n\"\\x06\\x5b\\xfb\\x71\\x05\\x43\\x7b\\x65\\x65\\x52\\x1b\\x80\\x83\\x8c\\x8e\\x81\\x1f\\x92\\xa8\\x05\\x8d\\x93\\x8b\\x8c\\x8f\\x1a\\x9b\\x82\\x94\\x7c\\x7c\\x80\"\n\"\\x80\\x77\\x87\\x1e\\x83\\x64\\x05\\x89\\x82\\x8a\\x84\\x87\\x1a\\x78\\xa6\\x7f\\xb6\\xed\\xc2\\xbc\\xf7\\x01\\xa3\\x1e\\xbc\\xf7\\x73\\x05\\xe3\\x25\\x0a\\x75\"\n\"\\x22\\x0a\\xe8\\x06\\xd1\\xb9\\x99\\xac\\xaa\\x1f\\xa5\\xa5\\x9a\\xb0\\xaf\\x1a\\xca\\x5a\\xad\\x2f\\x1e\\x74\\x06\\x80\\x58\\x15\\xa7\\x06\\xcf\\xa4\\x7e\\x68\"\n\"\\x51\\x5c\\x68\\x3c\\x1f\\x71\\x06\\x0e\\xf7\\x91\\xf7\\x53\\x15\\x6d\\xfb\\x20\\x05\\x71\\x24\\x1d\\xf7\\x41\\x06\\xf7\\x12\\xc3\\xb1\\xe1\\xb7\\x7b\\xa8\\x68\"\n\"\\x9e\\x1f\\x9c\\x6c\\x62\\x94\\x5b\\x1b\\x51\\x06\\xa7\\xf7\\x12\\x05\\xc5\\x23\\x0a\\xfb\\x1d\\x3a\\x0a\\xa6\\x06\\x6f\\xfb\\x12\\x05\\xfb\\x15\\x06\\xa4\\xf7\"\n\"\\x12\\x05\\xa0\\x06\\xa3\\x6d\\x1d\\x29\\x06\\x73\\x7e\\xf7\\x17\\x0a\\xa3\\x06\\x47\\xfb\\xd1\\x05\\x6b\\x24\\x1d\\xf7\\x06\\x06\\xa3\\x99\\x96\\x9d\\x99\\x81\"\n\"\\x93\\x77\\x1f\\x6e\\x06\\xaa\\xf7\\x20\\x05\\xf7\\x2d\\xfb\\x20\\x15\\xaa\\xf7\\x20\\x05\\xb5\\x06\\xf1\\xb4\\x77\\x5a\\x5c\\x60\\x73\\x38\\x1f\\x0e\\xcf\\x0a\"\n\"\\x5e\\x06\\x72\\x7e\\x82\\x7a\\x7b\\x96\\x82\\x9f\\x1f\\xb4\\x06\\x31\\xfc\\x33\\xb5\\x1d\\x56\\x76\\x5f\\x56\\x1e\\xa0\\xed\\x05\\xf7\\x29\\x06\\xa3\\xf7\\x22\"\n\"\\x0a\\xa3\\x1d\\x34\\xdc\\x1d\\xf7\\x48\\xf8\\x04\\x15\\xac\\x2b\\x0a\\x21\\x22\\x0a\\x9c\\x06\\xf7\\x05\\xfb\\xe3\\x61\\x53\\x05\\x56\\x62\\x74\\x7a\\x69\\x1b\"\n\"\\x82\\x87\\x8c\\x8d\\x7f\\x1f\\x95\\xb9\\x05\\x8e\\x94\\x8b\\x8e\\x90\\x1a\\x9b\\x82\\x95\\x7b\\x7c\\x82\\x81\\x74\\x86\\x1e\\x7f\\x54\\x05\\x89\\x81\\x8a\\x86\"\n\"\\x87\\x1a\\x77\\xab\\x7b\\xb6\\xc3\\xaf\\xa2\\xd3\\xc3\\x1e\\xf7\\xd6\\xf8\\x35\\x05\\xa1\\x2b\\x0a\\x25\\x36\\x1d\\x9c\\x06\\xfb\\x71\\xfb\\xb2\\x05\\x80\\xf8\"\n\"\\x93\\x15\\x8c\\x07\\x8c\\x8e\\x8b\\x8f\\x8e\\x1a\\x96\\x82\\x93\\x7f\\x76\\xf7\\x35\\x1d\\xa2\\x9d\\xab\\xa0\\x28\\x0a\\x7c\\x81\\x82\\x79\\x85\\x1e\\x64\\x7e\"\n\"\\x5c\\x70\\x55\\x1b\\x5c\\x67\\xa4\\xab\\x1f\\x0e\\xf7\\xb7\\x16\\xf7\\x68\\x06\\xa3\\x99\\x96\\x9d\\x99\\x81\\x93\\x77\\x1f\\x49\\x96\\x0a\\xf7\\x59\\xf7\\x37\"\n\"\\x1d\\x9c\\x96\\x96\\x9f\\x90\\x1e\\x0e\\x89\\x0a\\xcb\\xf7\\x72\\x15\\x84\\x66\\x89\\x7d\\x7b\\x1a\\x27\\xdb\\x44\\xf7\\x04\\xf7\\x2c\\xf7\\x19\\xf7\\x0e\\xf7\"\n\"\\x1f\\xf7\\x03\\x39\\xd8\\xfb\\x0c\\x23\\xfb\\x18\\x59\\x63\\x7f\\x93\\x82\\x98\\x91\\x8f\\x8c\\x92\\x95\\x1e\\xab\\xbd\\xd3\\x9f\\xcb\\x1b\\xe9\\xcc\\x51\\x36\"\n\"\\x88\\x8b\\x84\\x8a\\x84\\x1f\\xfc\\x09\\x58\\x15\\xf7\\xfd\\x06\\x39\\x69\\x36\\x55\\x2e\\x1b\\x33\\x4e\\xc0\\xd8\\x1f\\x0e\\xf8\\x72\\xf7\\xac\\x15\\x54\\x62\"\n\"\\x79\\x64\\x68\\x1f\\x6e\\x6a\\x7a\\x5f\\x63\\x1a\\x48\\xb2\\x66\\xd3\\xbf\\xb5\\x9e\\xb1\\xad\\x1e\\xa8\\xac\\x9c\\xb6\\xb4\\x1a\\xcd\\x63\\xb1\\x47\\x1e\\x7a\"\n\"\\x5c\\x15\\xbb\\xa5\\x73\\x5d\\x4c\\x5b\\x58\\x4f\\x5a\\x71\\xa3\\xba\\xa3\\x93\\xa4\\x9a\\x9f\\x1f\\xa9\\xa1\\xa6\\x99\\xb0\\x1b\\xf7\\x4c\\xf7\\xed\\x15\\x93\"\n\"\\x94\\x8f\\x94\\x93\\x1a\\x97\\x83\\x93\\x80\\x80\\x83\\x86\\x80\\x81\\x1e\\xfc\\xaf\\xfc\\xef\\x05\\x83\\x82\\x87\\x83\\x82\\x1a\\x7f\\x93\\x83\\x97\\x94\\x94\"\n\"\\x90\\x96\\x95\\x1e\\xf7\\x98\\xf8\\x29\\x15\\x90\\x88\\x87\\x8e\\x85\\x1b\\x86\\x87\\x8a\\x86\\x85\\x1f\\x74\\x69\\x6f\\x81\\x70\\x1b\\x62\\x71\\xa7\\xb6\\xca\"\n\"\\xbc\\xbe\\xc7\\x9f\\x9b\\x86\\x81\\x96\\x1f\\x93\\x83\\x8d\\x85\\x75\\x1a\\x80\\x93\\x83\\x94\\x8d\\x1e\\x8d\\x8c\\x93\\x8c\\x05\\x95\\x8c\\x94\\x94\\x95\\x1a\"\n\"\\x8d\\x07\\x8e\\x07\\x9f\\x8e\\x9b\\x90\\x97\\x1e\\x92\\x9b\\x8b\\x8b\\x90\\x1a\\x95\\x84\\x92\\x82\\x80\\x85\\x87\\x7e\\x80\\x1e\\x9a\\x6f\\x7e\\x8f\\x73\\x1b\"\n\"\\x31\\x3c\\x39\\x2f\\x4c\\xb4\\x61\\xc7\\xb1\\xc5\\xa0\\xa2\\xa6\\x1f\\x94\\x93\\x8f\\x92\\x94\\x1a\\x8f\\x8b\\x8d\\x8a\\x8c\\x1e\\x0e\\xf7\\x50\\xf7\\x22\\x15\"\n\"\\x8d\\x45\\x8e\\x76\\x95\\x76\\x08\\x72\\x98\\x9f\\x7d\\xa3\\x1b\\xa8\\xa3\\x99\\xab\\xa8\\x1f\\x9d\\x9f\\x9b\\xa0\\x96\\x9e\\x90\\x94\\x18\\x8d\\x8e\\x8c\\x8f\"\n\"\\x8f\\x1a\\x92\\x85\\x90\\x84\\x84\\x86\\x87\\x82\\x84\\x1e\\x80\\x7b\\x05\\x6c\\x75\\x7a\\x7d\\x7c\\x1b\\x79\\x84\\x9e\\xc0\\x97\\x8b\\xa4\\x8c\\xa0\\x1f\\x9e\"\n\"\\x07\\xaf\\x07\\xf7\\x1e\\xf7\\x44\\xbe\\xec\\xe1\\x1a\\xc1\\x6e\\xae\\x5f\\x5f\\x5a\\x6a\\x52\\x64\\x1e\\x60\\x4b\\x74\\xfb\\x01\\x88\\xfb\\x3d\\x8a\\x4e\\x18\"\n\"\\x74\\x6f\\x86\\x85\\x79\\x76\\x88\\x88\\x19\\x76\\x75\\x05\\x85\\x85\\x89\\x86\\x86\\x1a\\x87\\x07\\x84\\x8f\\x8e\\x88\\x91\\x1b\\x96\\x8b\\x8b\\xb9\\xb7\\x1f\"\n\"\\xec\\xf7\\x3d\\x15\\x8d\\xb1\\x05\\xf7\\x6d\\x95\\x9e\\xd0\\xbc\\x1b\\xa2\\x9a\\x76\\x6b\\x44\\x64\\x2f\\x45\\x2b\\x1f\\x0e\\xf7\\x2a\\xf8\\x94\\x15\\x3f\\x0a\"\n\"\\x72\\x20\\x0a\\xf7\\x07\\x21\\x0a\\x63\\x06\\xe4\\xf8\\x2f\\xd8\\xfc\\x32\\x05\\x66\\x92\\x94\\x80\\xa1\\x1b\\xa3\\x93\\x95\\xb1\\x93\\x1f\\xf0\\xf8\\x64\\x05\"\n\"\\xa3\\x4c\\x1d\\xfb\\x06\\x22\\x0a\\xb3\\x06\\x33\\xfc\\x28\\x3d\\xf8\\x39\\x84\\xab\\x89\\x8c\\x6a\\x8c\\x19\\x58\\x20\\x0a\\xf8\\x76\\x39\\x15\\x8c\\x91\\x8c\"\n\"\\x8f\\x8f\\x1a\\xac\\x71\\xa4\\x69\\x71\\x6e\\x78\\x74\\x80\\x1e\\x83\\x7b\\x6f\\xfb\\x12\\x79\\x1a\\x6e\\xa6\\x75\\xac\\xb3\\xa5\\xa4\\xba\\x96\\x1e\\x59\\x8e\"\n\"\\x15\\x7b\\x88\\x84\\x84\\x7e\\x1b\\x82\\x87\\x8e\\x92\\x8e\\x8b\\x8d\\x8c\\x90\\x1f\\xa3\\xf7\\x01\\x05\\x99\\x8e\\x92\\x91\\x98\\x1b\\x94\\x8e\\x88\\x82\\x1f\"\n\"\\x86\\x07\\x51\\xfb\\xb9\\x15\\xa5\\x98\\x94\\x9d\\xa1\\x81\\x8f\\x57\\x61\\x7f\\x85\\x77\\x79\\x99\\x82\\xa5\\x1f\\x0e\\xf8\\xdf\\xf7\\x6b\\x15\\xf7\\x02\\xf7\"\n\"\\x3a\\x05\\x91\\x94\\x8e\\x94\\x91\\x1a\\x96\\x83\\x93\\x80\\x7e\\x82\\x84\\x7a\\x80\\x1e\\x3f\\xfb\\x07\\x81\\xb3\\x83\\x9e\\x7a\\xa0\\x19\\xb7\\x6a\\x55\\xa3\"\n\"\\x4b\\x1b\\xfb\\x29\\xfb\\x1d\\xfb\\x15\\xfb\\x20\\x22\\xda\\x40\\xf7\\x02\\xc9\\xcd\\xa4\\xb5\\xb8\\x1f\\xa6\\xa4\\x9e\\xa1\\xa9\\xb8\\xa2\\xfb\\x11\\x18\\x72\"\n\"\\x90\\x91\\x84\\x9a\\x1b\\x9c\\x97\\x98\\x9d\\x8f\\x8b\\x8e\\x89\\x94\\x1f\\x37\\xf7\\x4c\\x15\\x6f\\x5f\\x05\\x2b\\x4d\\x4c\\x61\\x3b\\x1b\\x37\\x4f\\xc5\\xda\"\n\"\\xf7\\x01\\xf7\\x00\\xf0\\xf7\\x08\\xd6\\xbe\\x64\\x46\\x9a\\x1f\\x0e\\xf8\\x62\\xbe\\x15\\xf7\\x12\\x07\\xc7\\xd7\\xcf\\xf7\\x10\\xac\\x1a\\x98\\x81\\x95\\x7e\"\n\"\\x7d\\x82\\x83\\x78\\x83\\x1e\\x79\\x5c\\x6e\\x55\\x6a\\x5a\\x08\\xf7\\x07\\x76\\x4e\\xc9\\x2f\\x1b\\xfb\\x10\\xfb\\x03\\xfb\\x16\\xfb\\x25\\x23\\xca\\x45\\xe8\"\n\"\\xd1\\xba\\xa7\\xec\\xe5\\x1f\\xfb\\x01\\xe2\\x07\\xa3\\x52\\x0a\\x2b\\xf7\\x21\\x15\\x67\\x5c\\x7f\\x7d\\x75\\x75\\x08\\x57\\x56\\x61\\x75\\x60\\x1b\\x4e\\x61\"\n\"\\xbd\\xd4\\xf7\\x09\\xe3\\xf6\\xeb\\xdb\\xb1\\x52\\xfb\\x19\\x94\\x1f\\xad\\xf8\\x1f\\x15\\x98\\x95\\x91\\x94\\x96\\x1a\\x96\\x82\\x94\\x7f\\x84\\x7a\\x0a\\x82\"\n\"\\x54\\x0a\\x37\\x0a\\xd8\\xf7\\xda\\x2c\\x1d\\xf7\\x4f\\xf7\\x98\\x15\\xf7\\x51\\xfb\\xfe\\x05\\x7c\\x93\\x95\\x83\\x95\\x1b\\x92\\x8e\\x8e\\x93\\x90\\x8a\\x8f\"\n\"\\x87\\x97\\x1f\\xfb\\x24\\xf7\\xf5\\xf7\\x24\\xf7\\xf6\\x05\\x8e\\x92\\x8d\\x94\\x92\\x1a\\x91\\x88\\x8e\\x84\\x81\\x86\\x87\\x78\\x7e\\x1e\\x0e\\xf8\\x32\\xf7\"\n\"\\x98\\x15\\xfb\\x51\\xf7\\xff\\x05\\x9d\\x7f\\x85\\x90\\x81\\x1b\\x84\\x88\\x88\\x85\\x84\\x8d\\x82\\x8e\\x84\\x1f\\xf7\\x24\\xfb\\xf6\\xfb\\x24\\xfb\\xf5\\x05\"\n\"\\x87\\x7f\\x8a\\x87\\x86\\x1a\\x83\\x8e\\x88\\x92\\x95\\x95\\x93\\x9a\\x93\\x1e\\x0e\\xf8\\x70\\xbe\\x15\\xc2\\xf7\\x93\\x05\\x8d\\x93\\x8c\\x94\\x91\\x1a\\xc9\"\n\"\\x51\\xb5\\x36\\x6a\\x0a\\xd8\\xa5\\x90\\xad\\x1b\\xca\\xb2\\x73\\x66\\xf7\\x16\\x1d\\x29\\x48\\xbf\\x63\\xe0\\xd0\\xc6\\xa1\\xbf\\xd3\\x1f\\x7f\\x51\\x05\\xb2\"\n\"\\x06\\x57\\x70\\x70\\x69\\x63\\x65\\x0a\\xab\\xad\\xaa\\xcf\\xa7\\x1f\\x9d\\x93\\x93\\x94\\x99\\x1a\\x9a\\x83\\x91\\x76\\x1e\\x37\\xcf\\x15\\x4e\\x3b\\x53\\x74\"\n\"\\x43\\x1b\\x52\\x6a\\xa2\\xb4\\xcc\\xdf\\xbc\\xf7\\x04\\xb6\\xb4\\x86\\x82\\xae\\x1f\\x0e\\xf8\\x82\\xf8\\x2a\\xf7\\x38\\x1d\\x88\\x8c\\xb3\\x58\\x1f\\xb7\\x53\"\n\"\\x7c\\xf7\\x0c\\x0a\\x7e\\x72\\x0a\\xc0\\xb6\\x95\\x7b\\x0a\\x56\\xcb\\xa1\\x7f\\xac\\x1b\\xac\\xaa\\x9d\\xb4\\xae\\x1f\\x9d\\xa1\\x93\\x97\\x9d\\x1d\\xfb\\x20\"\n\"\\x04\\x7e\\x87\\x87\\x74\\x7a\\x1f\\x6a\\x73\\x75\\x7b\\x75\\x1b\\x7b\\x8a\\x8c\\xb3\\x56\\x1f\\xb7\\x54\\x7b\\x93\\x6a\\x1b\\x68\\x71\\x7c\\x63\\x68\\x1f\\x75\"\n\"\\x73\\x83\\x7e\\x72\\x0a\\xc0\\xb6\\x95\\x7b\\x0a\\x55\\xcc\\xa0\\x80\\xac\\x1b\\xac\\xaa\\x9e\\xb4\\xae\\x1f\\x9e\\xa0\\x92\\x98\\x9d\\x1d\\x0e\\x37\\x0a\\x7c\"\n\"\\xf8\\x5f\\x5c\\x1d\\x7a\\x74\\x95\\x1d\\xb8\\xf7\\x04\\x15\\x9a\\x95\\x8f\\x71\\x0a\\x87\\x89\\x83\\x7f\\xf7\\x0d\\x1d\\xf7\\x35\\xf7\\x9e\\x15\\xa9\\xb8\\x9a\"\n\"\\xaa\\x9a\\x1a\\x93\\x83\\x91\\x82\\x84\\x87\\x88\\x7e\\x80\\x1e\\x6c\\x68\\x6e\\x74\\x4f\\x69\\x08\\x78\\x81\\x87\\x87\\x84\\x1a\\x85\\x8f\\x85\\x92\\x87\\x1e\"\n\"\\x91\\x88\\x8c\\x8a\\x8f\\x89\\x91\\x88\\x19\\x99\\x82\\xbc\\x6e\\xa3\\x77\\xad\\x64\\x19\\x84\\x91\\x8f\\x89\\x92\\x1b\\x94\\x92\\x92\\x93\\x9a\\x76\\xb5\\x73\"\n\"\\xab\\x1f\\xf7\\xb3\\x9c\\x0a\\x0e\\xf7\\x9b\\xf8\\xae\\x15\\xfc\\x34\\x07\\xa2\\x6c\\x5e\\xa1\\x7c\\x1b\\x83\\x84\\x84\\x82\\x84\\x8d\\x87\\x93\\x85\\x1f\\xb8\"\n\"\\x65\\x9a\\x79\\xb8\\x41\\x08\\x7e\\x92\\x8e\\x88\\x94\\x1b\\x92\\x8f\\x90\\x9c\\x95\\x1f\\xab\\xc3\\xa5\\xab\\xaf\\xa9\\x08\\x98\\x96\\x8e\\x90\\x91\\x1a\\x94\"\n\"\\x85\\x93\\x83\\x7c\\x6b\\x7c\\x6e\\x5d\\x1e\\xf8\\x33\\x07\\x0e\\xf8\\xdd\\xf7\\x9f\\x15\\xfc\\x3c\\x06\\xa3\\xab\\xa0\\xb5\\x9a\\x1a\\x93\\x84\\x92\\x82\\x84\"\n\"\\x87\\x89\\x84\\x85\\x1e\\x64\\x5e\\x78\\x7c\\x41\\x60\\x08\\x7d\\x83\\x88\\x88\\x83\\x1a\\x84\\x8f\\x87\\x9e\\x81\\x1e\\xc6\\x6a\\xaa\\x73\\xa9\\x68\\x08\\x7f\"\n\"\\x95\\x90\\x87\\x91\\x1b\\x95\\x93\\x91\\x93\\x9a\\x7b\\xab\\x6e\\xb7\\x1f\\xf8\\x3c\\x06\\x0e\\xa3\\xf7\\x6b\\x15\\xf8\\x3c\\x9c\\x0a\\xfc\\x3c\\x06\\x0e\\xf7\"\n\"\\xd0\\x7f\\x15\\xf8\\x34\\x07\\x75\\xaa\\xb8\\x75\\xf7\\x56\\x1d\\x89\\x8f\\x83\\x91\\x1f\\x63\\xac\\x79\\xa0\\x6c\\xbd\\x88\\x8f\\x88\\x8f\\x88\\x91\\x88\\x90\"\n\"\\x88\\x90\\x8a\\x8c\\x08\\x98\\x84\\x88\\x8e\\x82\\x1b\\x84\\x87\\x87\\x79\\x81\\x1f\\x69\\x51\\x74\\x6e\\x66\\x6c\\x08\\x7e\\x81\\x88\\x86\\x85\\x1a\\x81\\x91\"\n\"\\x84\\x93\\x9a\\xa9\\x99\\xa9\\xbb\\x1e\\xfc\\x34\\x07\\x0e\\xf7\\xa6\\xf7\\x02\\x15\\xa7\\x5f\\x69\\x9b\\x7c\\x1b\\x84\\x84\\x83\\x82\\x85\\x8f\\x86\\x97\\x80\"\n\"\\x1f\\xae\\x6e\\xa5\\x6b\\xac\\x52\\x08\\x79\\x95\\x8f\\x87\\x92\\x1b\\x92\\x90\\x8e\\x93\\x8f\\x1f\\xb7\\xd4\\x9e\\xa4\\xb8\\xb0\\x08\\x92\\x91\\x8e\\x8f\\x92\"\n\"\\x1a\\x94\\x84\\x92\\x83\\x7c\\x5f\\x75\\x74\\x6b\\x1e\\xf7\\xae\\x07\\x74\\xab\\xb7\\x76\\xca\\x1d\\xab\\x9a\\xa8\\xb9\\x1e\\x0e\\xf7\\x57\\x63\\x15\\x5f\\xf7\"\n\"\\x6a\\xb7\\x07\\xfb\\x18\\xf7\\x51\\x15\\xa7\\x5f\\x69\\x9b\\x7c\\x1b\\x84\\x84\\x83\\x82\\x85\\x8f\\x86\\x97\\x80\\x1f\\xae\\x70\\xa5\\x6a\\xac\\x52\\x08\\x79\"\n\"\\x95\\x8f\\x87\\x92\\x1b\\x92\\x90\\x8e\\x92\\x8f\\x1f\\xb6\\xd5\\x9f\\xa3\\xb8\\xb0\\x08\\x92\\x91\\x8e\\x8f\\x92\\x1a\\x94\\x84\\x92\\x83\\x7c\\x5e\\x75\\x75\"\n\"\\x6c\\x1e\\xf7\\xad\\x07\\x75\\xaa\\xb8\\x75\\xca\\x1d\\xac\\x9a\\xa8\\xb8\\x1e\\x0e\\xf7\\x26\\xbf\\x15\\x5d\\xb3\\xba\\x75\\xc8\\x1b\\xf7\\x07\\xf1\\xf0\\xf7\"\n\"\\x07\\xb2\\x7a\\xaf\\x6d\\xa4\\x1f\\x78\\x9b\\x7b\\x92\\x68\\x92\\x08\\xda\\xaa\\xb4\\xbe\\xd0\\x1a\\xd4\\x54\\xbb\\x36\\x4f\\x56\\x73\\x60\\x67\\x1e\\x71\\x6d\"\n\"\\x7a\\x5d\\x79\\x35\\xfb\\x03\\xfc\\x98\\x18\\x8a\\x88\\x8b\\x87\\x88\\x1a\\x7d\\x96\\x80\\x99\\x99\\x94\\x94\\x9b\\x8f\\x1e\\xf7\\x49\\xf8\\x54\\x15\\xa7\\x8a\"\n\"\\x9e\\x8a\\x94\\x8a\\x08\\xd8\\x81\\xb4\\x6b\\x58\\x1a\\x65\\x7a\\x63\\x6c\\x6a\\x1e\\x67\\x69\\x65\\x7a\\x5d\\x1b\\x49\\x4e\\xba\\xbd\\x93\\x8e\\x9f\\x92\\xa7\"\n\"\\x1f\\xb8\\xf7\\x61\\x05\\xf7\\x01\\xa3\\xba\\xbc\\xdc\\x1b\\xc4\\xab\\x72\\x60\\x4e\\x5d\\x66\\xfb\\x04\\x6e\\x1f\\x84\\x8a\\x05\\x0e\\x46\\x1d\\x9a\\xf7\\x5c\"\n\"\\x3d\\x1d\\x46\\x1d\\xfb\\x25\\xe6\\x15\\xf7\\x32\\xf7\\x00\\x05\\x9c\\x97\\x8f\\x6a\\x1d\\x85\\x84\\x88\\x85\\x82\\x4f\\x0a\\x46\\x1d\\x30\\xf7\\x8e\\x3d\\x0a\"\n\"\\x4e\\x1d\\x91\\x8d\\x92\\x94\\x1e\\xf7\\x0f\\xdf\\xe1\\x38\\x05\\x84\\x92\\x90\\x88\\x92\\x1b\\x9a\\x9a\\x99\\x9b\\x92\\x89\\x8f\\x82\\x93\\x1f\\x0e\\x46\\x1d\"\n\"\\x29\\xf7\\x71\\x59\\x1d\\xf7\\xc5\\xf7\\x57\\x15\\x3e\\xf7\\x74\\x05\\x47\\x06\\x73\\x7e\\x43\\x1d\\xb3\\x06\\xd6\\xfb\\x73\\xfb\\x62\\xfb\\xa6\\x05\\x81\\x7e\"\n\"\\x88\\x83\\x82\\x1a\\x7d\\x94\\x82\\x98\\x96\\x94\\x90\\x96\\x93\\x1e\\xf7\\x51\\xf7\\x90\\xe6\\xfb\\xa0\\x05\\xd4\\x44\\x0a\\x5e\\x06\\x31\\xf7\\xa0\\xf7\\x48\"\n\"\\xf7\\x88\\x05\\x94\\x96\\x8f\\x95\\x94\\x1a\\x98\\x82\\x94\\x7e\\x80\\x82\\x86\\x80\\x83\\x1e\\x0e\\xf7\\xad\\xf8\\x88\\x15\\xfb\\x1e\\xfb\\x07\\xfb\\x03\\xfb\"\n\"\\x1a\\xfb\\x22\\xf7\\x06\\xfb\\x05\\xf7\\x24\\xf7\\x1f\\xf7\\x05\\xf7\\x03\\xf7\\x1c\\xf7\\x1f\\xfb\\x08\\xf7\\x06\\xfb\\x21\\x1f\\x8f\\xfb\\xbe\\x15\\xf5\\x23\"\n\"\\x05\\x72\\x67\\x68\\x80\\x61\\x1b\\x60\\x6e\\x94\\xa3\\x6c\\x1f\\x5d\\xb8\\x15\\x70\\xaf\\x82\\xa6\\xb4\\x1a\\xb7\\x96\\xae\\xa3\\xac\\x1e\\xf7\\x02\\xfb\\x00\"\n\"\\x05\\xe8\\x16\\xf7\\x02\\xf6\\x05\\xa1\\x6d\\x94\\x72\\x66\\x1a\\x5a\\x80\\x66\\x73\\x6a\\x1e\\xfb\\x2c\\xf7\\x29\\x15\\xfb\\x03\\xf7\\x00\\x05\\xa3\\xac\\xae\"\n\"\\x96\\xb5\\x1b\\xb7\\xaa\\x81\\x72\\xae\\x1f\\x0e\\xf8\\x82\\x16\\x9b\\x07\\xfb\\x15\\x9e\\x50\\xce\\xf7\\x18\\x1a\\x9c\\x6e\\x91\\x81\\x94\\x80\\x08\\x68\\xa9\"\n\"\\xba\\x73\\xb5\\x1b\\xd1\\xc2\\xc4\\xd4\\xd1\\x59\\xc2\\x4c\\x78\\x80\\x88\\x7e\\x70\\x1f\\x89\\x8a\\x82\\x86\\x86\\x89\\x08\\xa1\\xaa\\x93\\xa3\\xa8\\x1a\\xd0\"\n\"\\x53\\xc1\\x44\\x44\\x54\\x55\\x45\\x70\\x90\\x7d\\xa5\\x61\\x1e\\x9c\\x68\\x78\\x91\\x76\\x1b\\x4f\\x58\\x52\\x46\\x43\\xc3\\x53\\xd2\\xca\\xc0\\xb1\\xd2\\xad\"\n\"\\x1f\\x8c\\x78\\x05\\x85\\x07\\x8a\\x53\\x6e\\x4c\\x62\\x6a\\x72\\x78\\x79\\x84\\x42\\x7c\\x08\\x7b\\x07\\x0e\\xb4\\x0a\\x28\\xd7\\x40\\xf2\\xd2\\xca\\xa8\\xc8\"\n\"\\xc8\\x1f\\x7a\\x41\\x05\\xf1\\x79\\x0a\\x5b\\x06\\xfb\\x2b\\xf7\\xdf\\x15\\xdd\\xc3\\x54\\x3a\\x20\\x22\\x23\\xfb\\x00\\x36\\x53\\xc1\\xdc\\xf7\\x03\\xf2\\xf0\"\n\"\\xf7\\x05\\x1f\\xf8\\x25\\xf7\\x51\\xf7\\x03\\x0a\\x87\\x7f\\x81\\x1e\\xfb\\x03\\xfb\\x0f\\x05\\x81\\x7f\\x88\\x85\\x83\\x1a\\x80\\x64\\x1d\\xf8\\xff\\xf8\\x9c\"\n\"\\x15\\x9d\\xde\\x05\\xf7\\x42\\x1d\\x84\\x6b\\x05\\xfb\\x19\\x06\\x73\\x7e\\x80\\x77\\x7d\\x93\\x85\\x9f\\x1f\\xf7\\x17\\x06\\x70\\xfb\\x14\\x05\\xca\\x67\\x59\"\n\"\\xa8\\x43\\x1b\\xfb\\x23\\xfb\\x17\\xfb\\x18\\xfb\\x23\\x27\\xd7\\x41\\xd2\\x0a\\xe6\\xf8\\x36\\x05\\xbd\\x06\\xa4\\x97\\x95\\x9f\\x9a\\x83\\x91\\x77\\x1f\\xfb\"\n\"\\xc1\\xfb\\x1e\\x15\\xdd\\xc3\\x54\\x3a\\x20\\x22\\x23\\xfb\\x00\\x36\\x53\\xc1\\xdc\\xf7\\x03\\xf2\\xf0\\xf7\\x05\\x1f\\x0e\\xf7\\xff\\xf8\\x42\\x15\\x4f\\x81\"\n\"\\x62\\x7a\\x5d\\x68\\x08\\x47\\x56\\x61\\x3e\\x41\\x1a\\x22\\xda\\x40\\xf7\\x03\\xf7\\x2a\\xf7\\x1d\\xf7\\x15\\xf7\\x20\\xb5\\x7d\\xb2\\x70\\xa9\\x1e\\x78\\xa1\"\n\"\\x7d\\x95\\x52\\xaf\\x08\\x38\\xbe\\x7e\\x98\\xa9\\x1a\\x9f\\x98\\xa4\\x9d\\x97\\x1e\\x9a\\x9f\\xa5\\x91\\xba\\x1b\\xcf\\x06\\xa0\\x99\\x96\\x9c\\x97\\x81\\x92\"\n\"\\x7a\\x1f\\x4a\\x06\\x4a\\x63\\x7f\\x6d\\x68\\x1f\\x6d\\x71\\x79\\x68\\x69\\x1a\\x6c\\x98\\x77\\xae\\x72\\x1e\\xac\\x53\\x15\\xe1\\xf7\\x1f\\x0a\\x32\\xf7\\x06\"\n\"\\x0a\\xf6\\xf7\\xa2\\x15\\xe1\\x20\\xdc\\xfb\\x09\\xaf\\x47\\xba\\xe0\\xe3\\xf7\\x0f\\xdb\\xeb\\x4d\\xd1\\xfb\\x10\\xf7\\x44\\x6e\\xc4\\x60\\x3a\\x53\\x3c\\xfb\"\n\"\\x06\\xfb\\x23\\x08\\x0e\\xf8\\x6d\\xf8\\xdf\\xbc\\x1d\\x30\\x1d\\xfb\\x57\\xf7\\xf4\\x32\\x0a\\x30\\x1d\\xfb\\x0d\\xf7\\x77\\x15\\xf7\\x32\\xf7\\x00\\x05\\x9c\"\n\"\\x97\\x8f\\x6a\\x1d\\x85\\x84\\x88\\x85\\x82\\x4f\\x0a\\x30\\x1d\\x2d\\xf7\\xf9\\x59\\x1d\\xf8\\xd9\\xf7\\x7b\\x15\\xbe\\xfc\\x8d\\x07\\x8f\\xf7\\x10\\xcd\\xc7\"\n\"\\xf7\\x15\\x88\\x08\\xf7\\xc6\\xbe\\xfb\\xba\\xf7\\x3d\\x1d\\x49\\x99\\x50\\xa4\\x65\\x1e\\xa2\\x68\\xae\\x6c\\xac\\x7e\\x08\\x7c\\xaf\\xa7\\x87\\xd4\\x1b\\xf7\"\n\"\\xba\\xbe\\xfb\\xc6\\x06\\xfb\\x14\\x88\\x4a\\xc5\\x85\\xf7\\x0c\\x08\\x90\\x07\\x0e\\x30\\x1d\\x93\\xf7\\xa5\\x2c\\x1d\\xf7\\x7f\\xf7\\xb7\\x15\\xd7\\xd9\\xa8\"\n\"\\x9a\\xc8\\x1b\\xc8\\xad\\x73\\x5e\\x84\\x8a\\x86\\x8a\\x80\\x1f\\x47\\xfb\\xcb\\x05\\x4a\\x7c\\x54\\x5e\\x4b\\x1b\\x4e\\x32\\x1d\\xc9\\x06\\xe6\\x89\\xdf\\xd1\"\n\"\\x9e\\xe6\\xcf\\xf7\\xd1\\x18\\x8e\\x95\\x8c\\x96\\x93\\x1a\\xcd\\x54\\xb7\\x39\\x4e\\x62\\x79\\x54\\x4c\\x1e\\x98\\xc6\\x05\\x39\\x20\\x1d\\xa7\\x25\\x0a\\x62\"\n\"\\x06\\x73\\x7d\\x80\\x78\\x7d\\x95\\x84\\x9e\\x1f\\xf7\\x18\\x30\\x0a\\x65\\x06\\x0e\\xa9\\x0a\\xfb\\x01\\xdd\\x3c\\xf7\\x05\\x94\\x9b\\x8c\\x8c\\x9a\\x1e\\x66\"\n\"\\x6f\\x7a\\x70\\x6b\\xee\\x1d\\xaf\\xa8\\xa2\\xf7\\x07\\xc3\\x1f\\xb9\\xa0\\x9a\\x98\\x9c\\x1a\\x97\\x82\\x94\\x7f\\x85\\x87\\x89\\x85\\x81\\x1e\\x6d\\x5d\\x3e\"\n\"\\x75\\x4e\\x1b\\x2c\\xd5\\x0a\\xe3\\xcd\\x52\\x42\\x87\\x1f\\x0e\\xf8\\x39\\xf7\\x8f\\x15\\x82\\x8c\\x05\\x84\\x06\\x7e\\x8a\\x05\\x42\\x5c\\xa5\\xb3\\xb9\\xbc\"\n\"\\xab\\xd1\\xa1\\x9c\\x89\\x87\\x98\\x1f\\x81\\xa9\\x8b\\x8b\\x91\\x1b\\x99\\x99\\x9a\\x9c\\x9f\\x60\\x9a\\x50\\x25\\x38\\x4f\\x42\\x61\\xa4\\x6f\\xbf\\x7b\\x1f\"\n\"\\x72\\x85\\x80\\x88\\x7b\\x84\\x08\\x51\\x74\\x68\\x5d\\x56\\x1a\\x4c\\xc1\\x66\\xe6\\xbc\\xc7\\x96\\x99\\xaa\\x1e\\x98\\x92\\x92\\x95\\x97\\x1a\\x98\\x84\\x92\"\n\"\\x7e\\x88\\x88\\x8a\\x89\\x84\\x1e\\x7a\\x57\\x78\\x88\\x5f\\x1b\\x46\\x67\\x9e\\xaf\\xae\\xa6\\xac\\xb5\\x9d\\x1f\\x98\\xaa\\xab\\x8f\\xc7\\x1b\\x92\\x06\\x92\"\n\"\\x06\\x0e\\xf7\\xea\\xf7\\x55\\x15\\x93\\x8c\\x96\\xbd\\x05\\x27\\x8f\\x64\\x9e\\xb6\\x1a\\xb5\\xbc\\xa9\\xce\\xb3\\xac\\x81\\x79\\x9f\\x1e\\x93\\x84\\x90\\x7e\"\n\"\\x79\\x1a\\x71\\x92\\x82\\x9d\\x9b\\x94\\x95\\x9e\\x8d\\x1e\\x8d\\xa4\\x91\\xa1\\x96\\xaa\\x08\\x8f\\x94\\x8c\\x91\\x92\\x1a\\x98\\x81\\x95\\x7d\\x7c\\x83\\x84\"\n\"\\x77\\x84\\x1e\\x8a\\x87\\x8a\\x8a\\x89\\x84\\x08\\xa6\\x66\\x64\\x97\\x59\\x1b\\x2b\\x45\\x56\\x43\\x65\\x98\\x75\\xae\\x76\\x1f\\x43\\x74\\x61\\x5b\\x4f\\x1a\"\n\"\\x44\\xca\\x62\\xf7\\x00\\xe2\\xd1\\xa6\\xac\\x97\\x81\\x95\\x80\\x85\\x86\\x89\\x85\\x7c\\x1e\\x7a\\x62\\x6b\\x85\\x61\\x1b\\x44\\x60\\xa2\\xb2\\xc3\\xd8\\xb3\"\n\"\\xf5\\x1f\\xf7\\x14\\xf8\\x1e\\x15\\x98\\x95\\x91\\x94\\x95\\x1a\\x98\\xeb\\x1d\\xf8\\x9e\\xf7\\x08\\x15\\xa1\\x96\\x94\\x9c\\x9b\\x80\\x94\\x75\\x1f\\xfc\\x50\"\n\"\\x58\\x0a\\xf8\\x50\\xf7\\xae\\x15\\xa1\\x96\\x94\\x9b\\x9c\\x80\\x94\\x75\\x1f\\xfc\\x50\\x06\\x76\\x80\\x82\\x7a\\x7b\\x96\\x82\\xa0\\x1f\\xf8\\x50\\xfb\\x21\"\n\"\\xf7\\x5d\\x1d\\xfc\\x50\\x58\\x0a\\x0e\\xf8\\x71\\xf7\\x54\\x15\\x8a\\xcf\\x87\\xa8\\x7d\\xaa\\x08\\xcc\\x6e\\x46\\xb2\\x36\\x1b\\xfb\\x14\\x3b\\x37\\xfb\\x1a\"\n\"\\xfb\\x1a\\xd8\\x3c\\xf7\\x15\\xeb\\xce\\xb4\\xd7\\xa5\\x1f\\x8c\\x8e\\x8d\\x8f\\x05\\x5e\\x06\\x8a\\x89\\x8b\\x8a\\x88\\x87\\x08\\x5a\\x72\\x5a\\x70\\x4a\\x1b\"\n\"\\x41\\x69\\xa1\\xc8\\x77\\x1f\\xd6\\x07\\xf7\\x96\\xb4\\x15\\xfb\\x94\\xd3\\x06\\xc5\\xa9\\xab\\xa0\\xc8\\x1b\\xcb\\xbd\\x6d\\x5a\\x9e\\x1f\\x0e\\xcc\\x1d\\xc4\"\n\"\\xad\\x70\\x5d\\x85\\x8a\\x83\\x8a\\x85\\x1f\\x2e\\xfc\\x3b\\x05\\x88\\x7d\\x8a\\x84\\x87\\x1a\\x7c\\x94\\x83\\x9a\\x9f\\x91\\x93\\xaa\\x8f\\x1e\\xeb\\xf8\\x48\"\n\"\\x05\\x8d\\x95\\x8c\\x90\\x93\\x1a\\xd1\\x57\\xba\\x3c\\x53\\x56\\x76\\x5f\\x54\\x1e\\x0e\\xcc\\x1d\\xc5\\xac\\x70\\x5c\\x85\\x8a\\x84\\x8a\\x85\\x1f\\x2e\\xfc\"\n\"\\x3b\\x05\\x88\\x7d\\x8a\\x84\\x87\\x1a\\x7c\\x94\\x83\\x9a\\x9f\\x91\\x93\\xaa\\x8f\\x1e\\xeb\\xf8\\x48\\x05\\x8d\\x95\\x8c\\x90\\x93\\x1a\\xd1\\x57\\xba\\x3c\"\n\"\\x53\\x56\\x76\\x5f\\x54\\x1e\\xf7\\x92\\xf7\\x6f\\x61\\x1d\\x82\\x93\\x7f\\x5b\\x1d\\x93\\x83\\x98\\xf7\\x10\\x0a\\xf7\\x74\\xf8\\xc1\\x15\\x8c\\x9c\\x05\\xa1\"\n\"\\x8c\\x76\\x9f\\x72\\x1b\\x71\\x78\\x78\\x73\\x87\\x8b\\x86\\x8c\\x84\\x1f\\x9d\\xfb\\xd4\\x05\\x75\\x8c\\x94\\x81\\x9b\\x1b\\x9b\\x93\\x95\\xa1\\x8c\\x1f\\x6c\"\n\"\\xfb\\x23\\x15\\x69\\x72\\x74\\x6c\\x6c\\xa4\\x73\\xad\\x1f\\x97\\x06\\xad\\xa5\\xa3\\xaa\\xaa\\x71\\xa2\\x69\\x1f\\xf7\\xaa\\xf8\\x63\\x15\\x8c\\x9b\\x05\\xa2\"\n\"\\x8d\\x76\\x9f\\x71\\x1b\\x72\\x77\\x78\\x74\\x86\\x8b\\x86\\x8c\\x84\\x1f\\x9d\\xfb\\xd4\\x05\\x75\\x8c\\x94\\x81\\x9b\\x1b\\x9b\\x93\\x95\\xa1\\x8c\\x1f\\x6c\"\n\"\\xfb\\x23\\x15\\x69\\x72\\x74\\x6c\\x6c\\xa4\\x73\\xad\\x1f\\x97\\x06\\xad\\xa5\\xa3\\xaa\\xaa\\x71\\xa2\\x69\\x1f\\x0e\\xf8\\x30\\xf7\\x9e\\x15\\xfb\\x6b\\xfb\"\n\"\\xb9\\x58\\xf7\\xed\\xf8\\xc7\\xfb\\xed\\x58\\xf7\\xb9\\xfb\\x57\\xfb\\xb9\\x58\\x07\\x0e\\xf7\\xd6\\xf7\\xac\\x15\\xf6\\x94\\xe0\\xe9\\xf7\\x01\\x1a\\xf7\\x0a\"\n\"\\x2b\\xea\\xfb\\x0a\\xfb\\x0a\\x2c\\x2c\\xfb\\x0a\\xfb\\x01\\xe0\\x2d\\xf5\\x82\\x1e\\x32\\xfb\\x29\\x64\\xf7\\x29\\xfb\\x2c\\xb7\\xf7\\x2c\\xf7\\x28\\xb2\\xfb\"\n\"\\x28\\x07\\x72\\xf8\\x69\\x15\\xeb\\xd8\\x40\\x2f\\x2d\\x3f\\x3f\\x2d\\x2e\\x3f\\xd6\\xe9\\xe6\\xd7\\xd8\\xe5\\x1f\\x0e\\xf7\\x78\\xf7\\x9e\\x15\\xcb\\x06\\x83\"\n\"\\x64\\x05\\x89\\x82\\x8b\\x8b\\x89\\x1a\\x7f\\x94\\x82\\x96\\x9c\\x97\\x96\\x9e\\x90\\x1e\\xa7\\xf7\\x16\\x8c\\x95\\x05\\x99\\x8c\\x82\\x94\\x7e\\x1b\\x80\\x88\"\n\"\\x89\\x83\\x82\\x1f\\x85\\x86\\x8b\\x8b\\x88\\x7b\\x82\\x63\\x18\\x4b\\x06\\xb6\\xf7\\x57\\x05\\xf7\\x50\\x06\\x7a\\x3f\\x05\\x8a\\x84\\x8a\\x87\\x88\\x1a\\x7f\"\n\"\\x94\\x84\\x99\\x9b\\x95\\x96\\x9f\\x90\\x1e\\xa6\\xf7\\x15\\x05\\xfb\\xd6\\x06\\x7b\\x87\\x8a\\x84\\x85\\x1f\\x85\\x84\\x86\\x82\\x87\\x1a\\x7c\\x96\\x83\\x9d\"\n\"\\x1e\\xa7\\x06\\x26\\xfc\\x61\\x05\\x6d\\x06\\x80\\x82\\x88\\x87\\x86\\x1f\\x86\\x87\\x84\\x7e\\x87\\x1a\\x7c\\x95\\x83\\x9e\\x1e\\xf7\\x37\\x06\\xa3\\x99\\x97\"\n\"\\x9e\\x98\\x80\\x92\\x78\\x1f\\x3a\\x06\\xf7\\xdd\\xf7\\xca\\x15\\x2f\\x06\\x75\\x7c\\x80\\x7a\\x7b\\x2a\\x0a\\xb1\\x06\\x52\\xfb\\x97\\x05\\x65\\x06\\x74\\x7e\"\n\"\\x7f\\x77\\x7f\\x95\\x84\\x9d\\x1f\\xf7\\x4a\\x06\\xa3\\x98\\x97\\xa1\\x90\\x87\\x91\\x85\\x8f\\x1f\\x8d\\x87\\x8b\\x8b\\x7c\\x1b\\x2f\\x06\\xab\\xf7\\x2a\\x9d\"\n\"\\x9e\\x8b\\x8b\\xce\\xd1\\x19\\xa2\\xa1\\x95\\x92\\x96\\x1b\\x93\\x9e\\x80\\x82\\x91\\x1f\\x7a\\x97\\x8f\\x87\\x95\\x1b\\x9a\\x98\\x98\\x9b\\x97\\x88\\x90\\x7d\"\n\"\\x99\\x1f\\xa2\\x74\\x7a\\x94\\x74\\x1b\\x69\\x7b\\x7f\\x41\\x49\\x1f\\x0e\\xf7\\x9f\\xd4\\x15\\x23\\xf7\\xee\\x05\\x56\\x2b\\x1d\\xa2\\x06\\xf5\\xfb\\xfa\\x05\"\n\"\\x6c\\x4e\\x7e\\x61\\x62\\x1a\\x6d\\x98\\x79\\xa0\\xb2\\xa2\\xc0\\xe4\\x9b\\x8b\\x98\\x89\\x9a\\x1e\\xf7\\x71\\xf7\\xd3\\xa4\\xae\\x97\\x93\\xa9\\x8d\\x19\\xab\"\n\"\\x97\\x93\\xa0\\x99\\x81\\x93\\x78\\x1f\\x75\\x06\\x5f\\x72\\x7a\\x54\\x65\\x1f\\x0e\\x4c\\x0a\\x71\\xf7\\x72\\x32\\x0a\\x4c\\x0a\\xe1\\xf7\\x94\\x15\\xfb\\x32\"\n\"\\xfb\\x01\\x05\\x7b\\x4e\\x1d\\x92\\x8e\\x91\\x94\\x7f\\x0a\\x91\\x1b\\x9b\\x9a\\x99\\x9b\\x92\\x59\\x0a\\x4c\\x0a\\xf7\\x2f\\xf7\\x82\\xf7\\x03\\x0a\\x86\\x80\"\n\"\\x81\\x1e\\xfb\\x03\\xfb\\x0f\\x05\\x81\\x80\\x88\\x84\\x83\\x1a\\x80\\x64\\x1d\\x4c\\x0a\\xd6\\xf7\\x77\\x15\\x68\\x6a\\x35\\x0a\\xa4\\x78\\x9e\\x71\\x1f\\x0e\"\n\"\\xf8\\xa0\\xf7\\xd9\\x15\\xfc\\x3f\\xf7\\x7d\\x05\\x8d\\x86\\x85\\x8d\\x87\\x1b\\x82\\x83\\x86\\x84\\x87\\x1f\\x8a\\x88\\x05\\x88\\x87\\x8a\\x87\\x87\\x1a\\x82\"\n\"\\x90\\x84\\x96\\x85\\x1e\\xf7\\xee\\xfb\\x50\\xfb\\xee\\xfb\\x50\\x05\\x80\\x84\\x86\\x85\\x82\\x1a\\x88\\x8d\\x86\\x8d\\x86\\x1e\\x8c\\x89\\x05\\x83\\x90\\x93\"\n\"\\x86\\x92\\x1b\\x90\\x91\\x8d\\x8e\\x91\\x1f\\x77\\x61\\x15\\x76\\x80\\x82\\x7a\\x7b\\x96\\x82\\xa0\\x1f\\xf8\\x34\\x06\\xa0\\x96\\x94\\x9b\\x9c\\x80\\x94\\x76\"\n\"\\x1f\\x0e\\xf7\\xaf\\xf8\\x9f\\x15\\x9c\\xdb\\x05\\x89\\x1d\\x85\\x6e\\x05\\x5e\\x06\\x68\\x1d\\xb5\\x06\\x30\\xfc\\x3a\\x05\\x62\\x33\\x1d\\xf7\\x18\\x06\\x5c\"\n\"\\x0a\\x76\\x1f\\x65\\x06\\xbf\\xf7\\x86\\xbd\\xb9\\x8b\\x8b\\x98\\x94\\x19\\xa3\\xad\\xa9\\x95\\xb0\\x1b\\xb3\\x9d\\x86\\x78\\x9e\\x1f\\x9a\\x7d\\x92\\x7b\\x77\"\n\"\\x1a\\x87\\x8a\\x83\\x89\\x84\\x1e\\x58\\xfb\\x82\\x05\\x62\\xd4\\x0a\\x64\\x06\\xbe\\xf7\\x83\\x05\\x8e\\x95\\x8c\\x95\\x93\\x1a\\xd1\\x55\\xb8\\x37\\x51\\x5c\"\n\"\\x77\\x57\\x51\\x1e\\xa3\\xf7\\x04\\x05\\xf7\\x22\\x06\\xa1\\x9a\\x96\\x9d\\x3c\\x0a\\x0e\\xa8\\x1d\\xf7\\x4a\\xf8\\x3c\\xd4\\x1d\\xf7\\xc0\\x75\\x15\\x9b\\xd2\"\n\"\\xba\\xdb\\xe3\\xf7\\x02\\x08\\xd5\\xe9\\xa4\\xbf\\xc9\\x1a\\xca\\x55\\xc0\\x4a\\x4b\\x5d\\x62\\x3f\\x76\\x1e\\xd9\\x72\\x5f\\xb2\\x4b\\x1b\\x4a\\x58\\x56\\x47\"\n\"\\x57\\x9b\\x68\\xcc\\x33\\x1f\\xf7\\x09\\xfb\\x30\\xa9\\x56\\xa0\\x3b\\x08\\x0e\\xd1\\x16\\xf8\\x61\\xf7\\xcb\\x06\\xfb\\x7b\\xf7\\x92\\xfb\\x7a\\xfb\\x92\\x05\"\n\"\\xbd\\xfb\\x99\\x15\\xf7\\x85\\x07\\xf7\\x48\\xf7\\x5a\\xf7\\x49\\xfb\\x5a\\x05\\xfb\\x85\\x07\\x0e\\xce\\x1d\\x85\\xf8\\xbd\\x15\\x91\\x7f\\x93\\x82\\x77\\x7e\"\n\"\\x7b\\x71\\x51\\xbe\\x65\\xd9\\xbe\\xb9\\x6d\\x0a\\x83\\x84\\x79\\x84\\x1e\\x67\\x7f\\x5b\\x71\\x56\\x1b\\x70\\x73\\x92\\x97\\x7d\\x1f\\x84\\x90\\x7d\\x9d\\x8d\"\n\"\\x1a\\x0e\\xf7\\xc7\\xf8\\x37\\x15\\xfb\\x3a\\x20\\x1d\\xf7\\x04\\x25\\x0a\\xfb\\x06\\x21\\x1d\\xf7\\xaa\\x2a\\x1d\\xfb\\x04\\x06\\xf7\\x0e\\xf8\\xcf\\x15\\x45\"\n\"\\x06\\x72\\xfb\\x05\\x05\\xd1\\x06\\xf7\\xaf\\xfb\\x21\\x15\\x36\\xfc\\x19\\x05\\x4a\\x7b\\x55\\x5e\\x4b\\x1b\\xfb\\x14\\x33\\x1d\\xf7\\x15\\x06\\xe5\\x89\\xe0\"\n\"\\xd1\\x9e\\xe6\\xeb\\xf8\\x4e\\x18\\xfb\\x8b\\x26\\x0a\\xf7\\x93\\xf7\\x92\\x77\\x0a\\x3c\\x1d\\xf7\\x59\\xf8\\x6e\\x2c\\x1d\\xf7\\xc0\\xf7\\x8a\\x15\\x52\\xba\"\n\"\\xc8\\x69\\xbf\\x1b\\xa7\\xa5\\x93\\x98\\x9f\\x1f\\xaa\\xa1\\xa2\\xba\\xb2\\x1a\\xd0\\x50\\xc3\\x43\\x54\\x4f\\x68\\x54\\x61\\x1e\\xc6\\x59\\x56\\xa9\\x55\\x1b\"\n\"\\x43\\x50\\x52\\x44\\x47\\xc4\\x52\\xd1\\xc7\\xb8\\xa4\\xca\\xc1\\x1f\\xae\\xb2\\x15\\xb9\\xab\\xbd\\xa9\\xb6\\x1b\\xba\\xaa\\x6d\\x5e\\x5e\\x6c\\x6b\\x61\\x77\"\n\"\\x76\\x91\\x97\\x75\\x1f\\x7a\\x94\\x8b\\x8b\\x5c\\xb9\\x08\\x47\\x8f\\x15\\x5c\\x66\\x58\\x6d\\x61\\x1b\\x5e\\x6e\\xaa\\xba\\xb6\\xaa\\xa9\\xb8\\xb4\\xb3\\x74\"\n\"\\x58\\xba\\x1f\\x0e\\xf7\\xa7\\x5c\\x15\\x44\\x84\\x6f\\x7b\\x84\\x88\\x8d\\x99\\x83\\x1e\\x9a\\x80\\x7c\\x94\\x7a\\x1b\\x71\\x79\\x7a\\x72\\x6d\\xa5\\x76\\xb0\"\n\"\\xa7\\xa7\\x98\\xa3\\xa2\\x1f\\xa9\\xab\\x93\\xa9\\xe4\\x1a\\xf8\\x8a\\x07\\xca\\x92\\xa6\\x9d\\x90\\x8f\\x87\\x82\\x91\\x1e\\x77\\x99\\x95\\x85\\x9f\\x1b\\xa5\"\n\"\\x9d\\x9c\\xa3\\xa9\\x72\\xa0\\x68\\x73\\x72\\x82\\x7c\\x77\\x1f\\x66\\x6e\\x7d\\x60\\x32\\x1a\\x0e\\xf7\\xda\\xf9\\x0e\\x15\\x57\\xfd\\x35\\x06\\x4b\\x83\\x70\"\n\"\\x7a\\x86\\x87\\x8f\\x94\\x85\\x1e\\xa0\\x7d\\x81\\x92\\x77\\x1b\\x72\\x78\\x7a\\x72\\x6e\\xa4\\x75\\xae\\xa3\\xa4\\x94\\x9a\\x9f\\x1f\\xb0\\xa8\\x99\\xb6\\xe4\"\n\"\\x1a\\x0e\\xf7\\xa6\\xfb\\x4a\\x15\\xbf\\xf9\\x35\\x06\\xca\\x92\\xa6\\x9d\\x90\\x8f\\x87\\x82\\x91\\x1e\\x77\\x99\\x95\\x85\\x9f\\x1b\\xa5\\x9d\\x9c\\xa3\\xa9\"\n\"\\x72\\xa0\\x68\\x73\\x72\\x82\\x7c\\x77\\x1f\\x66\\x6e\\x7d\\x60\\x32\\x1a\\x0e\\xf8\\xad\\xf7\\x74\\x15\\xf7\\x2a\\x86\\xae\\x70\\xb8\\x1e\\xce\\x61\\x3e\\xb4\"\n\"\\x35\\x1b\\x57\\x5b\\x7c\\x70\\x62\\x1f\\x58\\x68\\x6e\\x5d\\x81\\x4d\\x08\\x86\\x69\\x8a\\x75\\x2a\\x1a\\xfb\\x52\\x07\\x75\\x94\\x7f\\x9c\\x9b\\x95\\x98\\xa0\"\n\"\\x1e\\xf7\\x55\\x07\\x8c\\xe3\\x8b\\x8b\\x95\\x1a\\x8e\\xbf\\x92\\xa9\\x9a\\xa1\\x08\\xbd\\xad\\xc8\\xab\\xcb\\x1b\\xc8\\xc6\\x6e\\x5e\\xab\\x1f\\xa6\\x66\\x91\"\n\"\\x66\\xfb\\x1c\\x1a\\xfb\\x55\\x07\\x75\\x94\\x7f\\x9b\\x9b\\x96\\x99\\x9f\\x1e\\x0e\\xf7\\xc5\\xf8\\xc7\\xb7\\x0a\\x30\\xfb\\x34\\x15\\xa3\\x9e\\x78\\x74\\x73\"\n\"\\x78\\x78\\x74\\x73\\x78\\x9e\\xa3\\xa1\\x9e\\x9f\\xa2\\x1f\\xf7\\xa2\\x34\\x15\\x86\\x48\\x82\\x6c\\x74\\x69\\x08\\x5a\\x6a\\x5a\\x72\\x4b\\x1b\\x4f\\x5e\\xa0\"\n\"\\xb4\\x6a\\x1f\\x6e\\xb0\\x80\\xad\\x85\\xd4\\x95\\x63\\x93\\x7a\\x9e\\x75\\x08\\x61\\xae\\xbc\\x76\\xca\\x1b\\xc9\\xbc\\xa0\\xb5\\xae\\x1f\\x9e\\xa1\\x93\\x9c\"\n\"\\x95\\xb3\\x08\\x29\\xe2\\x15\\xa3\\x9e\\x78\\x74\\x73\\x78\\x78\\x74\\x73\\x78\\x9e\\xa3\\xa1\\x9e\\x9f\\xa2\\x1f\\x0e\\xf8\\x34\\xf8\\x37\\x15\\xfb\\x3a\\x20\"\n\"\\x1d\\xf7\\x04\\x25\\x0a\\xfb\\x30\\x21\\x1d\\xf7\\xc0\\x06\\x57\\x71\\x70\\x68\\x63\\xee\\x1d\\xab\\xad\\xa9\\xce\\xa8\\x1f\\x9e\\x93\\x93\\x94\\x99\\x1a\\x9a\"\n\"\\x82\\x91\\x77\\x1e\\xfb\\x2e\\x06\\xf7\\x0e\\xf8\\xcf\\x15\\x45\\x06\\x72\\xfb\\x05\\x05\\xd1\\x06\\x0e\\xc1\\x1d\\x0e\\xf7\\xe4\\xf8\\x18\\x15\\x8f\\x9d\\x8b\"\n\"\\x8c\\x8e\\x1a\\x99\\x81\\x94\\x7b\\x7b\\x84\\x83\\x72\\x86\\x1e\\x49\\xfb\\xc8\\x05\\x89\\x7e\\x89\\x7c\\x80\\x1a\\x60\\xa9\\x71\\xbb\\x9f\\xea\\x1d\\x91\\x8d\"\n\"\\x96\\x8e\\x9c\\x1f\\x78\\xf8\\x74\\xdd\\x1d\\xf7\\xe3\\xf8\\x18\\x15\\x8f\\x9b\\x8b\\x8d\\x8d\\x1a\\x9b\\x81\\x94\\x7b\\x7b\\x84\\x83\\x72\\x86\\x1e\\x49\\xfb\"\n\"\\xc8\\x05\\x89\\x7d\\x89\\x7e\\x7f\\x1a\\x61\\xa9\\x70\\xbb\\x9f\\x9f\\x8f\\x92\\xa0\\x1e\\xa2\\x94\\x96\\x97\\x9b\\x1a\\x98\\x82\\x94\\x7e\\x86\\x86\\x8a\\x88\"\n\"\\x85\\x1e\\x81\\x73\\x79\\x86\\x7a\\x1b\\x7b\\x83\\x91\\x99\\x92\\x8c\\x92\\x8f\\x9f\\x1f\\xf7\\x56\\xf8\\x86\\xbc\\x1d\\xc1\\x1d\\xf7\\x49\\xf8\\x86\\x61\\x1d\"\n\"\\xeb\\x1d\\x3c\\x1d\\xf7\\x35\\xf8\\xba\\xbf\\x1d\\x56\\x0a\\xf8\\x7f\\xa4\\x0a\\xf7\\x69\\xf7\\xa2\\x3d\\x0a\\xd1\\x0a\\x90\\x88\\x92\\x1b\\x9a\\x9a\\x99\\x9b\"\n\"\\x92\\x89\\x8f\\x82\\x93\\x1f\\x0e\\xf7\\x71\\xf7\\x84\\x15\\xb1\\xf7\\x47\\x05\\x21\\x3f\\x1d\\xbe\\x06\\x46\\x7e\\x1d\\xf7\\x26\\x31\\x1d\\x58\\x06\\xa8\\xf7\"\n\"\\x1e\\x05\\xa8\\x06\\xdd\\x87\\xab\\x67\\xb5\\xfb\\x1c\\x8d\\x84\\x18\\x8d\\x85\\x05\\xdd\\xf7\\x5a\\x1d\\x56\\x06\\x70\\xe6\\x5f\\xca\\x5b\\x9c\\xf7\\x48\\xf7\"\n\"\\x26\\x18\\x97\\x06\\xa2\\x6d\\x1d\\x2c\\x33\\x0a\\x93\\x06\\xfb\\x39\\xfb\\x14\\x05\\x0e\\xac\\x1d\\xf7\\x10\\x2e\\x27\\x0a\\xf7\\x78\\xf7\\x47\\x15\\xbc\\xad\"\n\"\\xf7\\x18\\xfb\\x36\\x05\\x7a\\x24\\x0a\\x78\\x7d\\x25\\x1d\\xf7\\x17\\x23\\x1d\\x61\\x06\\xfb\\x33\\xf7\\x55\\xf7\\x47\\xf7\\x10\\x05\\xb8\\x06\\xa1\\x9a\\x38\"\n\"\\x1d\\xfb\\x16\\x20\\x1d\\x91\\x06\\xfb\\x48\\xfb\\x13\\xb2\\xf7\\x46\\x05\\x25\\x06\\x73\\x7e\\x80\\x78\\x7d\\x25\\x1d\\xbb\\x06\\x46\\xfb\\xd1\\x4d\\x1d\\xef\"\n\"\\x06\\x0e\\x41\\x0a\\xf7\\x72\\xf9\\x40\\x2d\\x0a\\xc4\\xbe\\x15\\x74\\x24\\x1d\\xf7\\x06\\x23\\x0a\\x70\\x06\\xf7\\x69\\xf7\\xb3\\xf5\\xfb\\xb3\\x05\\x69\\x33\"\n\"\\x0a\\xf7\\x08\\xe6\\x0a\\x71\\x06\\xfb\\x5e\\xf8\\xbb\\x05\\x34\\x3a\\x0a\\xc7\\x06\\xc3\\xfb\\x2e\\x05\\x0e\\x41\\x0a\\xf7\\x8e\\xf8\\x9c\\x15\\x93\\x94\\x8f\"\n\"\\x93\\x78\\x1d\\x41\\x0a\\x75\\xfb\\x24\\x27\\x0a\\x41\\x0a\\xf7\\x88\\xf7\\xdf\\x15\\x58\\x64\\x65\\x5a\\x6d\\xa5\\x75\\xaf\\x1f\\x95\\x06\\xb9\\xb7\\xb2\\xb5\"\n\"\\xad\\x71\\xa3\\x67\\x1f\\x0e\\xbc\\xf7\\xd9\\x15\\xf8\\x3e\\xfb\\x7d\\x05\\x88\\x91\\x91\\x89\\x8f\\x1b\\x93\\x93\\x90\\x93\\x8f\\x1f\\x8c\\x8d\\x05\\x8e\\x90\"\n\"\\xf7\\x1c\\x1d\\x95\\x90\\x90\\x93\\x94\\x1a\\x90\\x8a\\x8e\\x89\\x8f\\x1e\\x89\\x8e\\x05\\x92\\x87\\x83\\x90\\x83\\x1b\\x86\\x85\\x89\\x89\\x86\\x1f\\x9e\\xfc\"\n\"\\xc3\\x15\\xa0\\x96\\x94\\x9b\\x9c\\x80\\x94\\x76\\x1f\\xfc\\x34\\x06\\x76\\x80\\x82\\x7a\\x7b\\x96\\x82\\xa0\\x1f\\x0e\\xf7\\x49\\xf7\\x43\\x15\\x46\\x72\\x5a\"\n\"\\x53\\x69\\x1b\\x78\\x7e\\x7f\\x7b\\x7c\\x25\\x1d\\xf7\\xd7\\x06\\xaa\\xa7\\x9a\\xa6\\xa2\\x1f\\x9b\\x9e\\x97\\xa6\\x9a\\x1a\\x96\\x82\\x94\\x7e\\x7c\\x82\\x83\"\n\"\\x79\\x85\\x1e\\x6e\\x82\\x78\\x7a\\x74\\x1b\\xfb\\x82\\x06\\xa9\\xa9\\xa5\\xb7\\x9d\\xbd\\x08\\xf7\\x16\\x06\\xa0\\x96\\x95\\x9f\\x97\\x83\\x90\\x7b\\x1f\\xfb\"\n\"\\x11\\x06\\x8f\\xa1\\x8c\\x94\\x8c\\x9c\\x08\\xf7\\x18\\x06\\x9f\\x96\\x95\\x9f\\x97\\x84\\x90\\x7a\\x1f\\xfb\\x20\\x06\\x88\\xb8\\x89\\xa5\\x90\\x1a\\xb4\\x94\"\n\"\\xa5\\xa5\\xa5\\x1e\\xa4\\xa2\\xab\\x9a\\xaa\\x1b\\xad\\xa0\\x7e\\x6a\\x9f\\x1f\\x81\\x91\\x91\\x87\\x93\\x1b\\x9a\\x9a\\x99\\x99\\x96\\x82\\x9c\\x7c\\x9a\\x1f\"\n\"\\xa6\\x73\\x6c\\x98\\x65\\x1b\\x5d\\x5f\\x78\\x67\\x67\\x1f\\x65\\x66\\x7a\\x61\\x54\\x1a\\x78\\x8b\\x87\\x90\\x5b\\x1e\\x45\\x06\\x75\\x80\\x81\\x77\\x7f\\x93\"\n\"\\x86\\x9c\\x1f\\xdb\\x06\\x8a\\x81\\x88\\x73\\x88\\x7d\\x08\\x35\\x06\\x76\\x80\\x81\\x77\\x80\\x93\\x85\\x9c\\x1f\\x0e\\xf7\\xb3\\xbe\\x15\\xe6\\xf8\\x3a\\x05\"\n\"\\xba\\x96\\xbd\\xab\\xcb\\x1b\\xaf\\xaa\\x88\\x83\\xc1\\x1f\\x8a\\x93\\x8e\\x8b\\x8e\\x1b\\x9c\\x99\\x98\\x9c\\x95\\x85\\x92\\x7f\\x8e\\x1f\\x91\\x6c\\x47\\x92\"\n\"\\x64\\x1b\\x2e\\x3e\\x56\\x40\\x7b\\x1f\\x7f\\x53\\x05\\x37\\x26\\x0a\\xdc\\x25\\x0a\\x2d\\x26\\x0a\\xf7\\xd0\\x23\\x1d\\x0e\\xf7\\xe4\\xf8\\x31\\x15\\x91\\x75\"\n\"\\x77\\x8e\\x76\\x1b\\xfb\\x0b\\x2c\\x2c\\xfb\\x0a\\xfb\\x0a\\xea\\x2c\\xf7\\x0a\\xf7\\x0a\\xea\\xea\\xf7\\x0a\\xdb\\x5e\\xd4\\x45\\xb0\\x1f\\xe3\\xf7\\x53\\x05\"\n\"\\x61\\xaa\\xaa\\x6d\\x95\\x1b\\x92\\x8f\\x8f\\x90\\x8f\\x89\\x8f\\x85\\x95\\x1f\\x75\\xad\\x78\\xc0\\x88\\xaf\\x08\\x9e\\x8a\\x8a\\x8e\\x85\\x1b\\x87\\x87\\x89\"\n\"\\x83\\x81\\x1f\\x78\\x7a\\x4a\\x73\\x67\\x88\\x08\\x79\\x88\\x87\\x89\\x83\\x1a\\x80\\xa3\\x84\\xb2\\x1e\\x9f\\x06\\x9f\\x8c\\x05\\x8d\\x06\\xfb\\x31\\xfb\\x79\"\n\"\\x15\\xea\\xd8\\x40\\x2f\\x2d\\x40\\x3f\\x2d\\x2e\\x3f\\xd6\\xe8\\xe7\\xd7\\xd8\\xe5\\x1f\\x0e\\xf7\\xa8\\xc7\\x0a\\x0e\\xf7\\xa6\\xf7\\x28\\x15\\x90\\x7e\\x7a\"\n\"\\x8f\\x7d\\x1b\\x57\\x5d\\x5e\\x59\\x6e\\xa1\\x78\\xad\\xd3\\xbe\\xc2\\xda\\x1f\\xf7\\x8b\\x07\\xba\\x84\\xb3\\x4b\\x46\\x1a\\x60\\x83\\x69\\x77\\x5e\\x1e\\xa2\"\n\"\\x06\\xa9\\xb0\\x9b\\xb9\\xbc\\x1a\\xca\\x73\\xc7\\x59\\xc7\\x1e\\x61\\xbe\\x8a\\x8c\\x86\\x90\\x85\\x94\\x19\\xbc\\x66\\x07\\x0e\\xf7\\xd8\\xf8\\x81\\x15\\xa0\"\n\"\\x70\\xa2\\x76\\xa3\\x7e\\xc8\\x68\\x96\\x84\\x90\\x82\\x08\\x92\\x7e\\x8f\\x78\\x73\\x1a\\xfb\\x92\\x07\\x92\\x78\\x72\\x90\\x76\\x1b\\x3f\\x48\\x51\\x4a\\x65\"\n\"\\xaa\\x73\\xbd\\xc3\\xc0\\xa4\\xb5\\xac\\x1f\\xa2\\xa8\\x92\\xa3\\x8e\\xc0\\x08\\xf8\\x22\\x07\\x8c\\xda\\x67\\xdb\\x59\\xab\\x57\\xac\\x18\\x71\\x9c\\x7c\\x95\"\n\"\\x86\\x8f\\x08\\x7d\\x9b\\x84\\x9e\\xa5\\x1a\\x99\\x5b\\xfc\\xae\\x07\\x93\\x78\\x74\\x8f\\x76\\x1b\\x41\\x49\\x52\\x49\\x65\\xaa\\x73\\xbb\\xc2\\xbf\\xa4\\xb5\"\n\"\\xac\\x1f\\xa1\\xa8\\x92\\xa3\\x8e\\xc0\\x08\\xf7\\x2c\\xf7\\x47\\x15\\xfb\\x0d\\xcc\\x71\\xb4\\x87\\xf7\\x12\\x8e\\x89\\x18\\xf7\\x0d\\x49\\xa5\\x63\\x90\\xfb\"\n\"\\x12\\x08\\x0e\\x4a\\x0a\\xf7\\xce\\xf7\\x78\\x15\\x9a\\x96\\x8f\\x91\\x96\\x1a\\x97\\x82\\x94\\x7e\\x84\\x86\\x7f\\x1d\\x90\\x8d\\x93\\x96\\x1e\\x0e\\xf7\\xb3\"\n\"\\xf8\\x37\\x15\\x39\\x4f\\x1d\\x9e\\x1f\\xa7\\x69\\x0a\\x77\\x1f\\x65\\x06\\xbf\\xf7\\x84\\x05\\xd7\\xda\\xa6\\x9a\\xca\\x1b\\xae\\x9d\\x85\\x79\\x9d\\x1f\\x9a\"\n\"\\x7d\\x92\\x7a\\x77\\x1a\\x82\\x8b\\x88\\xb9\\x0a\\xbf\\xf7\\x87\\x05\\x8d\\x93\\x8c\\x93\\x93\\x1a\\xd1\\x55\\xb8\\x39\\x4e\\x63\\x79\\x54\\x4b\\x1e\\x7f\\xf7\"\n\"\\x67\\x15\\x94\\x95\\x8f\\x92\\x78\\x1d\\x4a\\x0a\\xf7\\x2e\\xf7\\x0b\\x61\\x0a\\x4a\\x0a\\xcb\\xfc\\x59\\x27\\x0a\\xf7\\xda\\xf7\\x7c\\x15\\xf7\\x93\\xbd\\xfb\"\n\"\\x79\\x06\\xec\\xf7\\x49\\x05\\xf7\\x18\\xbe\\x22\\x06\\x97\\xa9\\x96\\xa1\\x96\\x9a\\x08\\x8f\\x90\\x8d\\x8f\\x8e\\x1a\\x96\\x7e\\x96\\x7f\\x7e\\x85\\x87\\x7b\"\n\"\\x83\\x1e\\x60\\x3a\\x05\\xfb\\x1a\\xf7\\x3d\\x1d\\xfb\\x10\\xb7\\x3b\\xe6\\x63\\x1e\\x6e\\x55\\x05\\x87\\x83\\x89\\x85\\x86\\x1a\\x7f\\x97\\x80\\x98\\x97\\x92\"\n\"\\x90\\x9a\\x93\\x1e\\xac\\xca\\x05\\x87\\xac\\x8f\\x8b\\xb8\\x1b\\xf7\\xba\\xbe\\xfb\\xc6\\x06\\x73\\x84\\x8b\\x8d\\x7e\\x1f\\xb2\\xf7\\x47\\x15\\x31\\xfb\\x3c\"\n\"\\x4a\\xa1\\x68\\xc3\\x87\\xe0\\x19\\x90\\x07\\xf7\\xd2\\xf7\\x7b\\x15\\x2a\\xfb\\x49\\x05\\xfb\\x71\\x90\\x06\\x91\\xf7\\x0c\\xcc\\xc6\\xf7\\x14\\x88\\x08\\x0e\"\n\"\\xf8\\x12\\xf8\\x0e\\x15\\xba\\xe5\\x05\\x8f\\x92\\x8d\\x92\\x90\\x1a\\x98\\x7f\\x96\\x7d\\x80\\x84\\x86\\x7d\\x83\\x1e\\x4f\\xfb\\x06\\x05\\xfb\\x89\\x06\\x76\"\n\"\\x80\\x82\\x7a\\x7b\\x96\\x82\\xa0\\x1f\\xf7\\x6f\\x06\\x5b\\x31\\x05\\xfb\\x3f\\x58\\x0a\\xf7\\x24\\x06\\x61\\x3a\\x05\\x87\\x84\\x89\\x85\\x86\\x1a\\x7e\\x97\"\n\"\\x7f\\x99\\x96\\x92\\x90\\x9a\\x92\\x1e\\xc2\\xf3\\x05\\xf7\\x86\\xf7\\x59\\x1d\\xfb\\x6b\\x06\\xbb\\xe5\\x05\\xf7\\x3b\\x06\\xa1\\x96\\x94\\x9b\\x9c\\x80\\x94\"\n\"\\x75\\x1f\\x0e\\xf7\\x4f\\xf8\\x35\\x15\\x3b\\x06\\x76\\x7e\\x80\\x78\\x7d\\x94\\x84\\x9b\\x1f\\xb5\\x06\\xe7\\xfc\\x02\\x05\\xbb\\x06\\xf7\\x44\\xf7\\x30\\xc8\"\n\"\\xe0\\xe7\\x1a\\xbb\\x78\\xb7\\x77\\x7b\\x7c\\x7d\\x7d\\x87\\x8d\\x83\\x8d\\x83\\x1e\\x91\\x78\\x8f\\x77\\x7d\\x1a\\x46\\x57\\x3c\\xfb\\x04\\x24\\x1e\\x87\\x88\"\n\"\\x88\\x88\\x87\\x87\\x86\\x87\\x87\\x88\\x87\\x87\\x08\\x0e\\xf7\\xf1\\x56\\x1d\\x55\\xf7\\x72\\xf7\\x08\\x1d\\xbe\\xb9\\x6d\\x0a\\x83\\x84\\x79\\x84\\x1e\\x67\"\n\"\\x7f\\x5b\\x71\\x56\\x1b\\x70\\x73\\x92\\x97\\x7d\\x1f\\x84\\x90\\x7d\\x9d\\x8d\\x1a\\x0e\\x38\\x0a\\xd8\\xf7\\x5c\\x74\\x1d\\x38\\x0a\\xf7\\x29\\xf7\\x23\\x2c\"\n\"\\x1d\\xa6\\x1d\\x0e\\xa6\\x1d\\xf7\\x1e\\xf8\\x12\\x15\\x97\\x94\\x92\\x96\\x95\\x1a\\x97\\x82\\x93\\x7f\\x84\\x7a\\x0a\\x82\\x54\\x0a\\xf7\\xf1\\x56\\x1d\\x0e\"\n\"\\xf7\\xf2\\xf8\\x45\\x15\\xfb\\x2a\\xfb\\x1c\\xfb\\x15\\xfb\\x21\\x23\\xd9\\x40\\xf6\\xf7\\x2c\\xf7\\x1b\\xf7\\x14\\xf7\\x25\\xf0\\x3c\\xd6\\x20\\x1f\\x80\\x58\"\n\"\\x15\\xdf\\xc7\\x53\\x3d\\xfb\\x03\\x21\\x25\\xfb\\x08\\x36\\x50\\xc3\\xdc\\xf7\\x00\\xf7\\x00\\xf1\\xf7\\x06\\x1f\\xf7\\x1a\\xf7\\x61\\x15\\x99\\x95\\x91\\x94\"\n\"\\x96\\x1a\\x97\\x82\\x93\\x7f\\x83\\x84\\x88\\x84\\x81\\x1e\\xfb\\x1b\\x2b\\x05\\x7e\\x81\\x85\\x82\\x80\\x1a\\x7f\\x94\\x83\\x97\\x93\\x92\\x8e\\x92\\x95\\x1e\"\n\"\\x0e\\xc5\\x16\\xf8\\x7a\\xc9\\xfc\\x3c\\xf8\\x3c\\x4d\\x06\\x0e\\xc3\\x1d\\x7f\\x81\\x87\\xcb\\x1d\\xbe\\xf7\\x82\\x3d\\x1d\\xf7\\x2b\\xf8\\xbc\\x15\\x7d\\x8c\"\n\"\\x95\\x82\\x9a\\x1b\\xac\\x8c\\x05\\xbb\\xc4\\x77\\x6c\\xb5\\x1f\\xa8\\x76\\x9e\\x76\\xa7\\x60\\x08\\xa7\\x5f\\x66\\x96\\x57\\x1b\\xfb\\x16\\x24\\x28\\xfb\\x11\"\n\"\\xfb\\x11\\xf2\\x27\\xf7\\x17\\xf7\\x15\\xf3\\xee\\xf7\\x10\\xe9\\x64\\xf7\\x00\\x4e\\xd1\\x1f\\xcb\\x55\\x33\\xb0\\x29\\x1b\\x70\\x88\\x8a\\x84\\x84\\x1f\\x87\"\n\"\\x87\\x89\\x84\\x84\\x1a\\xf7\\x27\\xfb\\x40\\x15\\xf3\\xdb\\x40\\x28\\x2b\\x3b\\x3e\\x26\\x26\\x3a\\xd8\\xec\\xea\\xdb\\xd9\\xee\\x1f\\x0e\\xf8\\x4d\\xf7\\x9d\"\n\"\\x15\\x97\\xc3\\x05\\x8c\\x8e\\x8b\\x8e\\x8e\\x1a\\x98\\x82\\x94\\x7e\\x7d\\x81\\x82\\x7a\\x87\\x1e\\x7e\\x4e\\x05\\x66\\x06\\x78\\x7e\\x81\\x7b\\x7d\\x94\\x83\"\n\"\\x9d\\x1f\\xaa\\x06\\x6b\\xfb\\x25\\x05\\x89\\x83\\x8a\\x84\\x86\\x1a\\x62\\xb1\\x70\\xc3\\xae\\xb9\\x94\\x99\\xab\\x1e\\xa3\\x95\\x93\\x93\\x98\\x1a\\x98\\x82\"\n\"\\x94\\x7e\\x86\\x89\\x8a\\x87\\x82\\x1e\\x7e\\x72\\x5e\\x81\\x69\\x1b\\x6f\\x77\\x97\\x9a\\x8c\\x1f\\x8c\\x8c\\x8e\\x8c\\x90\\x1e\\xac\\xf7\\x29\\x05\\xf7\\x12\"\n\"\\x06\\x9e\\x98\\x96\\x9a\\x9a\\x82\\x92\\x7a\\x1f\\xfc\\x34\\x65\\x15\\xa6\\x06\\xf7\\x17\\xf7\\x08\\xe8\\xf6\\xdb\\x48\\xc3\\x2b\\x1f\\xfb\\x20\\x49\\x1d\\xf7\"\n\"\\x1a\\x06\\xbe\\x8b\\x8b\\x92\\x93\\x1f\\x93\\x91\\x8f\\x94\\x93\\x1a\\x99\\x82\\x92\\x77\\x1e\\x4a\\x06\\xbc\\xf7\\x76\\x15\\xbe\\xf7\\x7f\\x05\\xb7\\x06\\xcf\"\n\"\\xba\\x64\\x52\\x43\\x33\\x48\\x2c\\x1f\\x0e\\xf7\\x46\\xfb\\x1e\\x15\\x89\\x7f\\x8a\\x86\\x87\\x1a\\x7d\\x95\\x82\\x9b\\x9b\\x92\\x93\\xa4\\x90\\x1e\\xa8\\xf7\"\n\"\\x1a\\x05\\x8a\\x96\\x8d\\x8b\\x8f\\x1b\\xd3\\xcb\\xa6\\xc3\\xc4\\x1f\\xc4\\xc2\\xa8\\xcc\\xd4\\x1a\\xf0\\x4f\\xd3\\x37\\x3a\\x61\\x56\\xfb\\x1b\\x6e\\x1e\\x61\"\n\"\\xfb\\x5d\\x05\\x40\\x9f\\x6a\\xb6\\xd9\\x1a\\xdd\\xbd\\xda\\xd6\\xb0\\x1e\\x9e\\x94\\x91\\x92\\x97\\x1a\\x98\\x82\\x94\\x7d\\x6d\\x60\\x6f\\x5f\\x64\\x1e\\x5d\"\n\"\\x56\\x76\\x54\\x47\\x1a\\x26\\xc1\\x46\\xeb\\x74\\x1e\\xc9\\xb7\\x15\\xb6\\xf7\\x63\\x05\\xf1\\xa1\\xa6\\xb0\\xbe\\x1b\\xc0\\xb1\\x59\\x45\\x4d\\x74\\x59\\x5b\"\n\"\\x5c\\x1f\\x5f\\x5d\\x58\\x73\\x56\\x1b\\x88\\x06\\x0e\\xf8\\xad\\xf8\\x04\\x15\\xb4\\x06\\xa1\\x9a\\x97\\x9c\\x9a\\x82\\x92\\x77\\x1f\\xfc\\x1f\\x06\\x75\\x7c\"\n\"\\x80\\x7a\\x7b\\x2a\\x0a\\xb1\\xec\\x1d\\xd0\\xf7\\xd1\\x05\\xf7\\x68\\xec\\x1d\\x0e\\xf8\\x7d\\xf8\\xe3\\x15\\xbc\\x84\\x1d\\xfc\\x71\\xeb\\x0a\\xbc\\xfd\\x02\"\n\"\\x5a\\xeb\\x0a\\xf7\\x2b\\x84\\x1d\\x59\\xf9\\x02\\xf7\\xa6\\xfd\\x02\\x5a\\x06\\x7b\\x8c\\x80\\x81\\x8a\\x7c\\x08\\x88\\x07\\x8c\\x7c\\x96\\x81\\x9b\\x8c\\x08\"\n\"\\xf7\\x2b\\x84\\x1d\\x5a\\x06\\x0e\\xf7\\xe9\\xf8\\x64\\x15\\xfb\\x2b\\x65\\x86\\x71\\x5e\\x1f\\x46\\x62\\x61\\x3f\\x37\\x1a\\x3e\\xad\\x46\\xc8\\x5f\\x1e\\x67\"\n\"\\xbd\\xae\\x85\\xf7\\x39\\x1b\\xf7\\x56\\x06\\xa0\\x99\\x95\\x9b\\x9b\\x7f\\x94\\x74\\x1f\\xfb\\x58\\x06\\xfb\\x14\\x60\\x90\\x9e\\x68\\x1f\\x54\\xa8\\x65\\xcb\"\n\"\\xcb\\x1a\\xc5\\xab\\xc7\\xba\\xaa\\x1e\\xa6\\xb3\\xb0\\x90\\xf7\\x23\\x1b\\xf7\\x58\\x06\\xa1\\x98\\x95\\x9b\\x9b\\x7e\\x94\\x75\\x1f\\x0e\\xf7\\x74\\x16\\xf7\"\n\"\\x2d\\xb0\\x90\\xa5\\xb8\\x1f\\xd0\\xb4\\xb5\\xd7\\xdf\\x1a\\xd8\\x68\\xd0\\x4f\\xb7\\x1e\\xaf\\x59\\x67\\x91\\xfb\\x39\\x1b\\xfb\\x55\\x06\\x75\\x7e\\x82\\x7b\"\n\"\\x7b\\x98\\x81\\xa1\\x1f\\xf7\\x58\\x06\\xf7\\x16\\xb3\\x86\\x78\\xaf\\x1f\\xc2\\x6f\\xb1\\x4a\\x4b\\x1a\\x51\\x6b\\x50\\x5b\\x6b\\x1e\\x71\\x65\\x63\\x85\\xfb\"\n\"\\x21\\x1b\\xfb\\x58\\x06\\x74\\x7f\\x82\\x7b\\x7c\\x99\\x80\\xa0\\x1f\\x0e\\xf8\\x29\\xf8\\xc3\\x15\\x8c\\x91\\x8d\\x97\\x8e\\x1a\\x98\\x80\\x94\\x7c\\x7a\\x86\"\n\"\\x84\\x71\\x85\\x1e\\xfb\\x07\\xfc\\xa9\\x05\\x4d\\x8f\\x70\\x9f\\xb4\\x1a\\x98\\x8f\\xa2\\x91\\xab\\x1e\\xc1\\xf7\\x8e\\x05\\x27\\x06\\x74\\x7d\\x43\\x1d\\xb6\"\n\"\\x06\\x61\\xfb\\x59\\x05\\x85\\x6f\\x88\\x71\\x7a\\x1a\\x4a\\xbb\\x61\\xdd\\x83\\x1e\\x71\\xfb\\x0f\\x05\\x89\\x83\\x8a\\x84\\x86\\x1a\\x7c\\x94\\x82\\x9a\\x9a\"\n\"\\x95\\x95\\xa2\\x90\\x1e\\xa7\\xf7\\x1a\\xf7\\x17\\x94\\xb9\\xb5\\xa4\\xf7\\x19\\x19\\xb6\\xf7\\x5b\\x05\\xb8\\x06\\xa3\\x9a\\x1d\\x78\\x1f\\x2a\\x06\\x56\\xfb\"\n\"\\x8d\\x79\\x2c\\x6b\\x6d\\x34\\x82\\x19\\x0e\\xf8\\x82\\xf7\\x40\\x15\\x71\\xba\\x7f\\x9c\\x6d\\xa3\\x08\\xf6\\xae\\xc7\\xc8\\xd5\\x1a\\xd7\\x49\\xc4\\x33\\x1e\"\n\"\\xfb\\x8d\\x24\\x0a\\x78\\x7d\\xf2\\x1d\\x3c\\x0a\\x47\\x06\\xb5\\xf7\\x57\\x05\\xf7\\x13\\x06\\xaf\\x7a\\xab\\x6a\\xa1\\x61\\x3a\\x70\\x18\\x78\\x84\\x82\\x82\"\n\"\\x7d\\x1a\\x80\\x94\\x81\\x96\\x8f\\x90\\x8c\\x8e\\x93\\x1e\\xe8\\xaa\\x97\\x6f\\x93\\x75\\x9c\\x59\\x19\\x8f\\x80\\x05\\xc7\\x06\\xa2\\x99\\x97\\x9d\\x99\\x82\"\n\"\\x92\\x78\\x1f\\x70\\x06\\x73\\xca\\x85\\x99\\xe8\\xaa\\x05\\x9e\\x91\\x94\\x95\\x99\\x1a\\x95\\x82\\x95\\x81\\x87\\x81\\x89\\x8a\\x87\\x1e\\xfc\\x00\\xe6\\x15\"\n\"\\xba\\xf7\\x6b\\x05\\xf7\\x28\\x06\\xc9\\xbd\\x63\\x59\\x4a\\x2c\\x4f\\x23\\x1f\\x0e\\x53\\x1d\\xf7\\x84\\xf7\\x9a\\x3d\\x1d\\xf7\\x2e\\xf7\\xd1\\x15\\x22\\x06\"\n\"\\x79\\x8c\\x80\\x82\\x8a\\x7a\\x08\\x8a\\x07\\x8c\\x7a\\x96\\x82\\x9d\\x8c\\x08\\xc7\\x06\\xe4\\xfb\\xb0\\xf7\\x85\\xf9\\x2f\\x05\\xf7\\x3b\\x06\\x9c\\x98\\x96\"\n\"\\x9a\\x9b\\x80\\x94\\x78\\x1f\\xfb\\x66\\x06\\xfb\\x55\\xfc\\xcc\\x05\\x0e\\x53\\x1d\\xdb\\xf7\\x2d\\x61\\x0a\\x53\\x1d\\x45\\xfc\\x37\\x27\\x0a\\xf7\\x0b\\xf8\"\n\"\\x19\\x15\\xf8\\x12\\xf7\\x59\\x1d\\xfc\\x46\\xfb\\x88\\x06\\x77\\x94\\x80\\x9c\\x9c\\x94\\x96\\x9f\\x1e\\x0e\\xf7\\x09\\xd6\\x15\\x4d\\xb4\\xbe\\x6e\\xd1\\x1b\"\n\"\\xf7\\x20\\xf7\\x11\\xf7\\x12\\xf7\\x21\\xf7\\x01\\x43\\xd4\\xfb\\x00\\x41\\x3c\\x69\\x56\\x57\\x1f\\x6c\\x6b\\x74\\x58\\x79\\x39\\x44\\xfb\\xd2\\x18\\x89\\x82\"\n\"\\x8a\\x84\\x86\\x1a\\x7c\\x94\\x82\\x9b\\x9a\\x94\\x95\\xa2\\x90\\x1e\\xf7\\xb9\\xf8\\xa7\\x15\\xdd\\xbd\\x5a\\x3c\\xfb\\x05\\x24\\x21\\xfb\\x00\\x3b\\x51\\xc6\"\n\"\\xdb\\xf7\\x03\\xf0\\xec\\xf7\\x08\\x1f\\x0e\\x70\\x1d\\xf8\\x4e\\xf8\\x6e\\x3d\\x1d\\xf7\\xce\\x7c\\x15\\xf7\\x15\\x93\\xe2\\xca\\xe1\\x1a\\xa4\\x7d\\xa7\\x76\"\n\"\\x9b\\x1e\\x76\\x1d\\x3f\\x53\\x6b\\x0a\\x81\\x94\\x7f\\x7a\\x81\\x81\\x76\\x86\\x1e\\x7a\\x3a\\x05\\x8a\\x85\\x8a\\x87\\x88\\x63\\x1d\\x8c\\x07\\xa1\\x73\\xb1\"\n\"\\x7b\\xbc\\x85\\x7d\\x4a\\x18\\x42\\x0a\\x68\\x8e\\x1f\\x0e\\x70\\x1d\\xf7\\xcf\\xf8\\xa0\\xd5\\x1d\\x70\\x1d\\xf7\\x54\\xfb\\x63\\x27\\x0a\\xf7\\x52\\xc7\\x0a\"\n\"\\xf7\\x52\\x16\\xe5\\xf7\\x5f\\x05\\x98\\xa8\\x8d\\x93\\x99\\x1a\\xa1\\x79\\x9c\\x74\\xf7\\x60\\x1d\\x0e\\xf9\\x0f\\xf8\\x12\\x15\\x9f\\x99\\x97\\x9d\\x99\\x82\"\n\"\\x92\\x7b\\x1f\\xfb\\x6c\\x06\\x2b\\x56\\x7b\\x5a\\x4c\\x1f\\x46\\x55\\x62\\x3f\\x41\\x1a\\x22\\xda\\x40\\xf7\\x04\\xf7\\x28\\xf7\\x1e\\xf7\\x15\\xf7\\x1f\\xc0\"\n\"\\x78\\xb5\\x63\\xae\\x1e\\xfb\\x20\\x16\\xe2\\xf7\\x1f\\x0a\\x31\\xf7\\x06\\x0a\\xf7\\x6d\\xf8\\x23\\x15\\x75\\x79\\x7a\\x75\\x76\\x9c\\x79\\xa1\\xa1\\x9c\\x9c\"\n\"\\xa1\\xa0\\x7a\\x9d\\x76\\x1f\\xf7\\x41\\x8c\\x15\\x75\\x79\\x79\\x76\\x75\\x9d\\x79\\xa1\\xa0\\x9d\\x9d\\xa0\\xa1\\x79\\x9d\\x76\\x1f\\xe9\\x37\\x15\\x82\\x64\"\n\"\\x83\\x7b\\x77\\x73\\x08\\x61\\x66\\x5c\\x77\\x4d\\x1b\\x4c\\x5d\\x9f\\xb5\\x66\\x1f\\x77\\xa3\\x83\\x9b\\x82\\xb2\\x90\\x48\\x93\\x6c\\xa2\\x68\\x08\\x5b\\xac\"\n\"\\xbd\\x72\\xcb\\x1b\\xc6\\xba\\xa0\\xb4\\xab\\x1f\\xa8\\xb0\\x96\\xae\\x90\\xd3\\x08\\xfb\\x47\\xf7\\x8b\\xb7\\x0a\\x83\\x66\\x15\\xf7\\x1d\\xf7\\x03\\xfb\\x00\"\n\"\\xfb\\x1b\\xfb\\x1d\\xfb\\x01\\xfb\\x01\\xfb\\x1c\\xfb\\x1b\\xfb\\x01\\xf7\\x01\\xf7\\x1c\\xf7\\x19\\xf7\\x02\\xf7\\x03\\xf7\\x17\\x1f\\x0e\\xf7\\x22\\x16\\xf8\"\n\"\\x09\\x9d\\x06\\xfb\\x11\\x91\\x51\\xcd\\x8d\\xf7\\x17\\x08\\x4a\\xad\\xaf\\x72\\xc3\\x1b\\xc1\\xb8\\xba\\xc5\\xc0\\x77\\xaa\\x38\\xd7\\x1f\\x37\\xd8\\x7c\\xa1\"\n\"\\x6d\\xe5\\x7f\\x44\\x5c\\x47\\x3a\\x4a\\x08\\x4d\\x58\\x70\\x5f\\x5a\\x1a\\x51\\xba\\x5b\\xc4\\xc3\\xb3\\xa8\\xc8\\xa8\\x1e\\xfb\\x14\\x90\\x47\\x40\\xfb\\x0e\"\n\"\\x1b\\x0e\\xf8\\x55\\x22\\x1d\\x93\\x21\\x05\\x7d\\x93\\x82\\x99\\x89\\x1e\\x90\\x06\\x9a\\x8d\\x92\\x94\\x9b\\x1a\\xf7\\x14\\x07\\x9e\\x82\\x94\\x78\\x8a\\x1e\"\n\"\\xfb\\xeb\\x06\\x7a\\x8c\\x81\\x82\\x8a\\x7b\\x08\\x7e\\x07\\x80\\x8b\\x8a\\x92\\x82\\x1e\\xf7\\x45\\xfb\\x8c\\xfb\\x47\\xfb\\xd7\\x05\\x86\\x83\\x8b\\x8a\\x82\"\n\"\\x1a\\x7c\\x07\\x7a\\x95\\x83\\x9d\\x1e\\xf7\\xf2\\x06\\x9e\\x94\\x94\\x9e\\x1f\\xf7\\x14\\x07\\x9b\\x84\\x94\\x7c\\x8d\\x1e\\x85\\x06\\x7d\\x89\\x84\\x82\\x8a\"\n\"\\x7c\\x87\\x21\\x18\\xfb\\xb9\\x06\\xf7\\x45\\xf7\\xcd\\x05\\x8f\\x92\\x8c\\x8e\\x8f\\x1a\\x91\\x89\\x8f\\x86\\x92\\x1e\\xfb\\x3d\\xf7\\x85\\x05\\x0e\\xf7\\x23\"\n\"\\xf8\\x2b\\x15\\x73\\x6d\\x7c\\x68\\x87\\x65\\x08\\x2c\\x5e\\xeb\\x06\\x8f\\x64\\x99\\x68\\xa2\\x6e\\x48\\x48\\x18\\xab\\x6b\\xce\\xcf\\xa9\\x73\\xab\\x7e\\xb4\"\n\"\\x85\\x19\\x2c\\xb8\\xea\\x07\\xb4\\x91\\xad\\x99\\xa7\\xa2\\xce\\x47\\x18\\xab\\xab\\x48\\xcf\\xa1\\xa4\\x9a\\xaf\\x90\\xb4\\x19\\xeb\\xb8\\x2b\\x06\\x86\\xb3\"\n\"\\x7c\\xaf\\x75\\xa6\\xce\\xce\\x18\\x6b\\xab\\x48\\x48\\x70\\xa1\\x63\\x9b\\x67\\x8f\\x19\\xea\\x5e\\x2d\\x07\\x67\\x87\\x62\\x79\\x72\\x75\\x47\\xcf\\x18\\x6b\"\n\"\\x6b\\x05\\xf7\\x72\\x5d\\x15\\xdc\\xcc\\x4c\\x3c\\x3a\\x4b\\x4b\\x3b\\x3c\\x4b\\xcb\\xda\\xda\\xcb\\xcc\\xd8\\x1f\\x0e\\xf8\\x1e\\xf8\\x04\\x15\\xf7\\x12\\x06\"\n\"\\xa2\\x99\\x97\\x9e\\x99\\x83\\x91\\x77\\x1f\\xfb\\xc5\\x06\\x75\\x7c\\x7f\\x79\\x7e\\x95\\x83\\x9d\\x1f\\xf7\\x13\\x06\\x48\\xfb\\xca\\x05\\x88\\x80\\x8a\\x81\"\n\"\\x82\\x1a\\x6f\\xa5\\x7c\\xbd\\xc9\\xb7\\x9e\\xa5\\x97\\x84\\x93\\x80\\x88\\x88\\x8a\\x8a\\x89\\x1e\\x7f\\x6e\\x80\\x89\\x75\\x1b\\x71\\x7f\\x91\\x97\\x91\\x8c\"\n\"\\x90\\x8c\\x92\\x1f\\x0e\\xf7\\x91\\xf7\\xbb\\x15\\x9c\\xd4\\x05\\xf7\\x6f\\xf7\\x1c\\x0a\\xfb\\x6d\\x06\\xa3\\xf7\\x02\\x05\\x8c\\x8f\\x8c\\x90\\x8d\\x1a\\x99\"\n\"\\x83\\x93\\x7d\\x81\\x88\\x89\\x83\\x82\\x1e\\x85\\x86\\x8b\\x8b\\x88\\x7c\\x72\\xfb\\x05\\x18\\x45\\x06\\x74\\x7e\\xf0\\x0a\\xcf\\x06\\x7a\\x42\\x05\\x5d\\x4f\"\n\"\\x1d\\x9f\\x1f\\xb6\\x06\\x6e\\xfb\\x19\\x05\\x88\\x7f\\x8a\\x81\\x83\\x1a\\x52\\xc5\\x63\\xdd\\xb8\\xbf\\x95\\x9f\\xc7\\x1e\\xb4\\x98\\x9f\\x9a\\x9b\\x1a\\x96\"\n\"\\x81\\x96\\x82\\x86\\x85\\x89\\x87\\x81\\x1e\\x5e\\x77\\x8b\\x8b\\x62\\x83\\x08\\x83\\x66\\x76\\x88\\x70\\x1b\\x51\\x69\\xa0\\xae\\x94\\x8c\\x92\\x8c\\x93\\x1f\"\n\"\\xa7\\xf7\\x15\\x05\\xf7\\x48\\xf7\\x1c\\x0a\\x0e\\x5e\\x0a\\xe6\\xf7\\x2c\\x15\\x93\\x94\\x8f\\x93\\x78\\x1d\\xf7\\xb5\\x7b\\x15\\x96\\x06\\xbd\\xd6\\x9b\\x9f\"\n\"\\xbb\\x1f\\xa5\\x0a\\xfb\\x69\\x06\\xa6\\x0a\\x5f\\xa9\\x6a\\xc0\\x7d\\x1e\\x7b\\x42\\x05\\xaa\\x06\\x9f\\xd3\\x1d\\xf8\\x11\\xf8\\xee\\x15\\x33\\x35\\x4c\\x22\"\n\"\\x55\\x1f\\x65\\x43\\x75\\x31\\x3d\\x1a\\xfb\\x16\\xca\\x3b\\xf2\\xd9\\xd0\\xb6\\xe0\\xc4\\x1e\\xc2\\xdd\\xa8\\xec\\xef\\x1a\\xf7\\x17\\x4c\\xdb\\x24\\x1e\\xfb\"\n\"\\x69\\xfb\\x9c\\x15\\x94\\xaf\\x98\\xa8\\xa0\\xac\\x08\\xd7\\xbb\\xc4\\xb2\\xc9\\x1b\\xd3\\xb8\\x51\\x2f\\x7c\\x8a\\x75\\x89\\x71\\x1f\\x81\\x58\\x15\\x7b\\x4b\"\n\"\\x7a\\x62\\x6f\\x62\\x08\\x47\\x5d\\x52\\x65\\x50\\x1b\\x45\\x5f\\xc6\\xea\\xa3\\x8e\\xae\\x91\\xb2\\x1f\\x0e\\xf8\\x6e\\xf8\\xdf\\x15\\x98\\x95\\x91\\x94\\x95\"\n\"\\x1a\\x98\\x83\\x93\\x7e\\x84\\x7a\\x0a\\x82\\x54\\x0a\\x2c\\x0a\\xfb\\x17\\xf8\\xb7\\x32\\x0a\\x2c\\x0a\\x73\\xf8\\xa1\\x74\\x1d\\x2c\\x0a\\xe3\\xf8\\x68\\x2c\"\n\"\\x1d\\xf8\\xdd\\xfb\\x89\\xf7\\x2b\\x1d\\x7b\\x79\\x96\\x83\\xa0\\x1f\\xf8\\xce\\x43\\xf7\\x2b\\x1d\\x7a\\x7a\\x96\\x83\\xa0\\x1f\\x0e\\x0e\\xc4\\x0a\\x5f\\x0a\"\n\"\\xfb\\x0d\\xfb\\x24\\x27\\x0a\\x5e\\x0a\\xfb\\x49\\xfc\\x94\\x27\\x0a\\xf8\\xa9\\xf8\\xa1\\x2c\\x1d\\x68\\x0a\\xf8\\x93\\x16\\x2c\\xf8\\xc7\\x05\\x3d\\x06\\xfb\"\n\"\\xe2\\xfc\\xc7\\x05\\xf8\\x50\\xbe\\x15\\xfb\\xfa\\x06\\xf7\\xa6\\xf8\\x61\\x05\\x92\\x06\\x0e\\xf8\\x3f\\xbe\\x15\\xb5\\xa0\\xb2\\xa8\\xaf\\xb1\\x08\\xcd\\xce\"\n\"\\xac\\xd8\\xde\\x1a\\xf7\\x0f\\x30\\xe1\\xfb\\x16\\x3a\\x3e\\x6c\\x50\\x49\\x1e\\x47\\x4e\\x5f\\x2e\\x38\\x1a\\x3e\\xb6\\x3d\\xcd\\x61\\x1e\\xfb\\x17\\x06\\x72\"\n\"\\x7d\\x80\\x79\\x7d\\x95\\x83\\x9f\\x1f\\xf7\\x61\\x06\\x95\\xbb\\x67\\xa3\\x80\\x93\\x7b\\x98\\x19\\x60\\xb0\\x70\\xc6\\xc5\\x1a\\xf7\\x24\\xf7\\x18\\xf7\\x19\"\n\"\\xf7\\x23\\xc4\\xb0\\x7d\\x6a\\xac\\x1e\\xad\\x69\\x9c\\x62\\x5b\\x1a\\x3e\\x68\\x41\\x49\\x4d\\x1e\\x65\\x66\\x75\\x7d\\x3a\\x62\\x81\\x5a\\x18\\xf7\\x63\\x06\"\n\"\\xa2\\x9b\\x97\\x9d\\x9a\\x83\\x91\\x75\\x1f\\x0e\\xf8\\x5f\\xf8\\x04\\x15\\x64\\xfb\\x45\\x7f\\x53\\x76\\x65\\x6b\\x71\\x19\\x74\\x6e\\x66\\x7e\\x66\\x1b\\x55\"\n\"\\x62\\xb1\\xbc\\x98\\x8e\\x9f\\x92\\xac\\x1f\\xbf\\xf7\\x7b\\x05\\x25\\x33\\x0a\\xb9\\x06\\xfb\\x03\\xfc\\x8f\\x05\\x89\\x83\\x8a\\x83\\x87\\x1a\\x7c\\x94\\x83\"\n\"\\x9a\\x9a\\x95\\x96\\xa0\\x90\\x1e\\xb4\\xf7\\x51\\x05\\x64\\xaa\\xaf\\x7b\\xc2\\x1b\\xc1\\xaf\\x99\\xae\\xb2\\x1f\\x84\\x6a\\x05\\xef\\x06\\xa3\\x9a\\x1d\\x77\"\n\"\\x1f\\x5f\\x06\\xdb\\xf8\\x04\\x05\\x27\\x24\\x1d\\x0e\\xf8\\x9e\\xf8\\x13\\x15\\xad\\x66\\x5b\\x9b\\x4b\\x1b\\xfb\\x33\\xfb\\x12\\xfb\\x0e\\xfb\\x2c\\x50\\xa1\"\n\"\\x5c\\xb2\\x6f\\x1f\\xa4\\x7a\\xb1\\x7f\\xc8\\x82\\x08\\xcb\\x82\\x97\\x85\\x74\\x1a\\x60\\x62\\x6a\\x51\\x89\\x1e\\x6c\\x89\\x7e\\x83\\x79\\x1a\\x7a\\x96\\x83\"\n\"\\xa4\\xe4\\xd1\\xc5\\xd4\\xbe\\x6d\\xa4\\x40\\x96\\x1e\\x51\\x94\\x6a\\x93\\x7c\\x93\\x08\\x6b\\x9c\\x79\\xad\\xb9\\x1a\\xf7\\x11\\xf2\\xee\\xf7\\x16\\xb7\\xb8\"\n\"\\x7e\\x79\\x9f\\x1e\\x95\\x81\\x91\\x7d\\x8c\\x77\\x08\\x66\\x8e\\x91\\x80\\x9e\\x1b\\x9c\\x95\\x97\\xa5\\x8e\\x1f\\x8f\\xae\\x92\\xaa\\x94\\x9f\\x08\\x8f\\x95\"\n\"\\x8c\\x90\\x91\\x1a\\x98\\x81\\x95\\x7d\\x7c\\x81\\x82\\x79\\x86\\x1e\\x0e\\x2d\\x1d\\xf7\\x26\\xf9\\x66\\x15\\x93\\x84\\x86\\x8e\\x83\\x1b\\x7b\\x7c\\x7c\\x7b\"\n\"\\x87\\x8e\\x86\\x93\\x83\\x1f\\xe7\\x29\\x05\\x82\\x92\\x8f\\x89\\x95\\x1b\\x9a\\x9a\\x9a\\x9b\\x8f\\x88\\x90\\x83\\x93\\x1f\\x0e\\x8f\\x0a\\xfb\\x5a\\xf9\\x66\"\n\"\\x15\\x93\\x83\\x87\\x8e\\x83\\x1b\\x7b\\x7c\\x7c\\x7b\\x86\\x8e\\x86\\x50\\x1d\\x82\\x92\\x8f\\x89\\x94\\x1b\\x9a\\x94\\x93\\x9d\\x90\\x1f\\x8c\\x90\\x8c\\x8e\"\n\"\\x87\\x92\\x84\\x92\\x19\\x0e\\xf7\\xc8\\xc3\\x15\\x3b\\xf8\\x5c\\x05\\xd1\\x57\\x0a\\xfb\\x2b\\x29\\x1d\\xa5\\x06\\xe4\\xfc\\x94\\x05\\xcb\\x06\\xf7\\xa1\\xf8\"\n\"\\x33\\xa4\\xb4\\x8b\\x8b\\x95\\x97\\x19\\x97\\x97\\x99\\x92\\x98\\x1b\\x93\\x91\\x89\\x83\\x97\\x1f\\x7f\\x9f\\x96\\x86\\x97\\x1b\\xa6\\xa5\\xa6\\xa6\\xaa\\x70\"\n\"\\x9e\\x60\\x69\\x6e\\x81\\x75\\x6d\\x1f\\x70\\x77\\x88\\x86\\x65\\x51\\x08\\x0e\\x72\\x1d\\xfb\\xe0\\xf7\\x63\\x15\\x93\\x83\\x87\\x8e\\x84\\x1b\\x7a\\x7d\\x7d\"\n\"\\x7b\\x85\\x8e\\x86\\x91\\x84\\x44\\x1d\\x93\\x90\\x88\\x92\\x1b\\x9a\\x9b\\x99\\x99\\x8e\\x84\\x99\\x88\\x8e\\x1f\\x0e\\xf7\\x78\\xf7\\x9e\\x15\\xf7\\x0f\\x06\"\n\"\\x96\\xbe\\x05\\xfb\\x0f\\xd7\\x1d\\x61\\xfb\\x57\\x05\\x4e\\x06\\x80\\x58\\x05\\xc8\\x06\\x5c\\xfb\\x6b\\x4d\\x1d\\xf7\\x7e\\x23\\x1d\\xfb\\x18\\x06\\x0e\\xf7\"\n\"\\x82\\xf7\\xa2\\x15\\xa0\\xed\\x05\\xf7\\xa6\\x06\\x6e\\xfb\\x16\\x8a\\x7d\\x05\\xf7\\x54\\x1d\\x9f\\x8f\\x1e\\xb3\\xf7\\x4c\\x05\\xfc\\x71\\x3a\\x0a\\xeb\\x06\"\n\"\\x76\\x29\\x05\\x59\\x06\\x68\\x1d\\xbb\\x06\\x67\\xfb\\x3d\\x05\\x26\\x24\\x1d\\xf7\\x8e\\x23\\x0a\\x29\\x06\\xaf\\xf7\\x3d\\x05\\xf7\\x1c\\x66\\x1d\\x0e\\xf8\"\n\"\\x89\\xbe\\x15\\x70\\xf7\\x1a\\x7e\\xc4\\x77\\xb6\\x73\\x9f\\x19\\xa0\\x9f\\xab\\xb4\\xaf\\xbe\\xc2\\xdb\\x93\\x94\\xa3\\x90\\x81\\x64\\x18\\x8a\\x80\\x05\\x79\"\n\"\\x94\\x81\\x9b\\x99\\x94\\x95\\xa0\\x90\\x1e\\x97\\xc2\\x05\\x8d\\x97\\x8c\\x90\\x8e\\x1a\\x9b\\x7e\\x94\\x71\\x51\\x75\\x78\\xfb\\x17\\x31\\x1e\\x5a\\x44\\x7e\"\n\"\\x7f\\x70\\x88\\xb2\\xf7\\x4c\\x18\\xa1\\x1d\\x9a\\x06\\x75\\x33\\x05\\x89\\x83\\x8b\\x89\\xf7\\x01\\x0a\\xf7\\x21\\x05\\x0e\\xf8\\x7e\\xbe\\x15\\x6c\\xe4\\x7c\"\n\"\\xb5\\x74\\xad\\x75\\x95\\x19\\xa5\\xa0\\x94\\x93\\xa5\\xaa\\xc2\\xce\\x97\\x95\\xa6\\x8f\\x86\\x78\\x18\\x89\\x85\\x8b\\x89\\x8a\\x1a\\x78\\x94\\x81\\x9b\\x99\"\n\"\\x94\\x95\\xa1\\x90\\x1e\\x92\\xac\\x05\\x8d\\x92\\x8c\\x94\\x8f\\x1a\\x9b\\x7e\\x93\\x71\\x57\\x76\\x7e\\x42\\x4b\\x1e\\x4d\\x45\\x81\\x82\\x6f\\x87\\xa4\\xf7\"\n\"\\x0a\\x18\\xa7\\x21\\x0a\\x2a\\x20\\x0a\\x9c\\x06\\x72\\xfb\\x0a\\x05\\x84\\x06\\x74\\x8c\\x84\\x93\\x71\\xc4\\x08\\xe5\\x64\\x7d\\x98\\x50\\x1b\\x6f\\x83\\x84\"\n\"\\x71\\x85\\x1f\\x83\\x67\\x05\\x88\\x7e\\x8b\\x8a\\x87\\x1a\\x7e\\x94\\x82\\x9a\\x9b\\x96\\x95\\x9c\\x8f\\x1e\\x92\\xaa\\xa2\\x89\\x8f\\x86\\xa0\\x5f\\x19\\x9c\"\n\"\\x63\\x9a\\x6d\\x97\\x7a\\x58\\x70\\x88\\x89\\x5c\\x50\\x43\\x30\\x18\\x6f\\x20\\x0a\\xa4\\x06\\xa3\\x8c\\x8d\\x8c\\x92\\x91\\x95\\x98\\x19\\xd7\\xeb\\xb8\\xc2\"\n\"\\xb4\\xa9\\xa6\\x88\\x19\\x91\\x06\\x6b\\xfb\\x28\\x05\\x70\\x22\\x0a\\xeb\\x21\\x0a\\x7b\\x06\\xab\\xf7\\x28\\x05\\x94\\x06\\xb4\\x88\\x9c\\x7b\\xa0\\x4f\\xaa\"\n\"\\x31\\x18\\x95\\x70\\x8e\\x89\\xa8\\x8a\\x08\\x96\\x06\\x75\\x32\\xe5\\x0a\\x98\\x9c\\x96\\x95\\xa0\\x90\\x1e\\xad\\xf7\\x21\\x05\\x0e\\xf7\\xa2\\x7c\\x15\\xcb\"\n\"\\x8d\\xbf\\x97\\xae\\x9e\\x08\\xcc\\xaf\\xb4\\xca\\xca\\x1a\\xc3\\x6e\\xb1\\x50\\xa0\\x1e\\xdd\\xa9\\xb4\\xbc\\xd1\\x1a\\xdb\\x48\\xbe\\x22\\x51\\x65\\x81\\x6c\"\n\"\\x50\\x1e\\x83\\x7d\\x88\\x8a\\x88\\x1b\\x87\\x89\\x90\\x96\\x9f\\x82\\x95\\x7b\\x7c\\x82\\x82\\x7a\\x88\\x1f\\x7a\\x36\\x05\\x77\\x42\\x8b\\x8b\\x89\\x1a\\x7f\"\n\"\\x94\\x82\\x98\\x98\\x93\\x92\\x9d\\x92\\x1e\\x94\\xa5\\x95\\x9e\\x97\\x9b\\x08\\xbb\\xae\\xca\\xa5\\xda\\x1b\\xda\\xbd\\x6c\\x5a\\x69\\x77\\x6a\\x68\\x74\\x1f\"\n\"\\x71\\x63\\x53\\x7f\\x3b\\x1b\\x6d\\x22\\x0a\\xbc\\x06\\xcc\\xcc\\x7d\\x77\\xa2\\x1f\\x9a\\x7e\\x93\\x79\\x76\\x1a\\x68\\x78\\x66\\x6b\\x71\\x1e\\x6c\\x66\\x59\"\n\"\\x7c\\x4a\\x1b\\x3a\\x56\\x9b\\xb5\\x50\\x1f\\x93\\x80\\x83\\x8e\\x84\\x1b\\x7e\\x7c\\x7c\\x7d\\x65\\xf2\\x5d\\xed\\x85\\x1f\\x7d\\x4b\\x05\\x42\\x0a\\x68\\x8e\"\n\"\\x1f\\x0e\\xf7\\xa7\\x7f\\x15\\xc2\\x8c\\xbd\\x93\\xad\\x9a\\x08\\xc7\\xa5\\xae\\xb8\\xbc\\x1a\\xb8\\x72\\xa8\\x57\\x99\\x1e\\xcc\\xa3\\xac\\xaf\\xbc\\x1a\\xcb\"\n\"\\x4a\\xb3\\x21\\x39\\x51\\x7c\\x6a\\x61\\x1e\\x8d\\x92\\x05\\x8b\\x0a\\x77\\x98\\x80\\xb4\\x7e\\x1f\\xb7\\x7c\\xb4\\x84\\xbd\\x88\\x7c\\x48\\x18\\x42\\x0a\\x69\"\n\"\\x8e\\x1f\\x0e\\xf8\\x5c\\xbe\\x15\\x62\\xf7\\x1a\\x77\\xca\\x70\\xb5\\x6e\\x99\\x19\\xa5\\x9e\\x99\\x99\\xb0\\xb9\\xf1\\xf7\\x10\\x8d\\x8d\\xb8\\x8e\\x81\\x66\"\n\"\\x18\\x8a\\x7c\\x05\\x7b\\x95\\x80\\x9a\\x99\\x94\\x96\\xa1\\x90\\x1e\\x96\\xc0\\x05\\x8d\\x94\\x8c\\x93\\x8e\\x1a\\x9b\\x7b\\x94\\x6e\\x45\\x74\\x7c\\x22\\x36\"\n\"\\x1e\\x5a\\x50\\x73\\x6f\\x7d\\x81\\x74\\x7a\\x84\\x89\\x51\\x8a\\x08\\x88\\x06\\xb3\\xf7\\x4d\\x05\\xb7\\x2f\\x0a\\xfb\\x24\\x20\\x0a\\xb9\\x66\\x0a\\xbd\\x06\"\n\"\\x76\\x33\\x05\\x8a\\x86\\x8a\\x86\\x88\\x1a\\x7e\\x93\\x84\\x99\\x9b\\x95\\x95\\x9f\\x90\\xa0\\x1d\\xf8\\x4d\\xbe\\x15\\x5f\\xe5\\x74\\xb9\\x6f\\xaa\\x70\\x95\"\n\"\\x19\\xa9\\x9c\\xa4\\x9f\\xb8\\xb7\\xbe\\xbb\\x99\\x93\\xaf\\x8e\\x84\\x64\\x18\\x8a\\x85\\x8a\\x86\\x88\\x1a\\x7d\\x95\\x82\\x9a\\x9b\\x94\\x95\\x9f\\x8e\\x1e\"\n\"\\x94\\xc1\\x05\\x8c\\x8e\\x8b\\x8d\\x8b\\x1a\\x8c\\x8c\\x05\\x8d\\x07\\x8c\\x8e\\x8b\\x8e\\x8f\\x1a\\x9d\\x7d\\x93\\x6e\\x4e\\x6e\\x7d\\x49\\x46\\x1e\\x66\\x67\"\n\"\\x6f\\x73\\x76\\x7d\\x7d\\x80\\x72\\x87\\x5d\\x8a\\x08\\x87\\x06\\xa5\\xf7\\x0a\\x05\\xb7\\x21\\x0a\\xfb\\x1e\\x36\\x1d\\xb5\\x06\\x46\\xfb\\xd1\\x05\\x5f\\x20\"\n\"\\x0a\\xf7\\x1f\\x21\\x0a\\x61\\x06\\xaa\\xf7\\x28\\x05\\x93\\x06\\xf2\\x89\\x99\\x84\\xae\\x47\\xb9\\x2c\\x18\\x98\\x71\\x8c\\x8b\\xa8\\x8a\\x08\\xb6\\xf7\\x37\"\n\"\\x1d\\x9b\\x96\\x95\\x9f\\x90\\xa0\\x1d\\xf7\\xa6\\xf7\\xa6\\x15\\xba\\x82\\xa0\\x72\\xa3\\x41\\xc1\\x0a\\xcd\\x21\\x0a\\x50\\x06\\x62\\x0a\\x81\\x66\\x18\\xe8\"\n\"\\x1d\\x46\\x38\\x7a\\x7a\\x72\\x80\\x9b\\xd4\\x18\\x8d\\x92\\x8b\\x8d\\x8e\\x1a\\x98\\x80\\x97\\x7e\\x7d\\x82\\x83\\x78\\x87\\x1e\\x78\\x33\\x7c\\x8a\\xb3\\xf7\"\n\"\\x4d\\x05\\xb7\\x2f\\x0a\\xfb\\x24\\x20\\x0a\\xb9\\x06\\x28\\xfc\\x61\\x05\\x5e\\x20\\x0a\\xf7\\x24\\x2b\\x0a\\x5d\\x06\\xbc\\xf7\\x75\\x05\\x9a\\x06\\x77\\x30\"\n\"\\x8a\\x7d\\x05\\xf7\\x57\\x1d\\x0e\\xf7\\x92\\xf7\\x58\\x15\\xbc\\x86\\x9a\\x7f\\xa9\\x52\\xb9\\x2c\\x18\\x98\\x71\\x8c\\x8b\\xa8\\x8a\\x08\\xc6\\x21\\x0a\\x54\"\n\"\\x06\\x5f\\xe5\\x74\\xb9\\x6f\\xaa\\x70\\x95\\x19\\xa9\\x9c\\xa4\\x9f\\xb8\\xb7\\xbe\\xbb\\x99\\x93\\xaf\\x8e\\x84\\x64\\x18\\x8a\\x85\\x8a\\x86\\x88\\x1a\\x7d\"\n\"\\x95\\x82\\x9a\\x9b\\x94\\x95\\x9f\\x8e\\x1e\\x94\\xc1\\x05\\x8c\\x8e\\x8b\\x8d\\x8b\\x1a\\x8c\\x8c\\x05\\x8d\\x07\\x8c\\x8e\\x8b\\x8e\\x8f\\x1a\\x9d\\x7d\\x93\"\n\"\\x6e\\x51\\x6a\\x7b\\x56\\x53\\x1e\\x45\\x48\\x6d\\x72\\x79\\x89\\x98\\xc5\\x18\\x8d\\x95\\x8b\\x8b\\x8e\\x1a\\x98\\x80\\x97\\x7e\\x7c\\x83\\x83\\x78\\x87\\x1e\"\n\"\\x7a\\x3f\\x05\\x7b\\x06\\xa5\\xf7\\x0a\\x05\\xb7\\x21\\x0a\\xfb\\x1e\\x36\\x1d\\xb5\\x25\\x0a\\x5f\\x06\\x72\\x5a\\x0a\\xa4\\x1f\\xf7\\x1f\\x21\\x0a\\x61\\x06\"\n\"\\xaa\\xf7\\x28\\x05\\x9b\\x06\\x7b\\x42\\x05\\x8a\\x88\\x8a\\x83\\xf7\\x3c\\x1d\\xf7\\x0e\\x22\\x1d\\xee\\x66\\x0a\\xcd\\x21\\x0a\\x50\\x06\\x62\\x0a\\x81\\x66\"\n\"\\x18\\x88\\x0a\\xfb\\x81\\x06\\x6a\\xfb\\x1f\\x05\\x8a\\x86\\x8a\\x85\\x88\\x1a\\x7f\\x93\\x83\\x98\\x9b\\x97\\x96\\x9f\\x8f\\x1e\\x0e\\xa2\\x1d\\xf8\\x56\\xbe\"\n\"\\x15\\xb1\\x1d\\xf7\\x97\\x06\\x5c\\xfb\\x6b\\x05\\x59\\x29\\x1d\\xf7\\x0e\\x06\\x75\\xf7\\x21\\x0a\\x83\\x99\\x9b\\x28\\x1d\\xae\\xf7\\x21\\x05\\x0e\\xf8\\x55\"\n\"\\xbe\\x15\\xcf\\xf7\\xd1\\x05\\xac\\x23\\x0a\\xfb\\x0c\\x45\\x0a\\xad\\x06\\x70\\xfb\\x12\\x05\\xfb\\x93\\x6e\\x0a\\x77\\x1f\\xfb\\x0b\\x33\\x0a\\xa9\\x57\\x1d\"\n\"\\xaa\\xf7\\x20\\x05\\xf7\\x94\\x06\\x6c\\xfb\\x20\\x05\\x63\\x45\\x0a\\xf7\\x0d\\x06\\x76\\x33\\x05\\x89\\x83\\x8b\\x89\\xf7\\x27\\x1d\\xf7\\xd4\\x7b\\x15\\xcb\"\n\"\\xce\\xa4\\xb9\\xc7\\x1f\\xb1\\xa8\\x99\\x9a\\x9a\\x95\\x0a\\x88\\x79\\x05\\x4e\\x0a\\x25\\xd0\\x35\\xed\\x77\\x1e\\x7c\\x47\\x05\\x42\\x0a\\x69\\x8e\\x1f\\x0e\"\n\"\\xf7\\xdf\\x7c\\x15\\xbc\\x8f\\xb7\\x96\\xb5\\x9e\\x08\\xc5\\xa6\\xaf\\xa8\\xa0\\x1a\\x97\\x82\\x93\\x71\\x1d\\x8a\\x88\\x05\\x88\\x1d\\x29\\xc8\\x4c\\xf3\\x80\"\n\"\\x1f\\x7d\\x4b\\x05\\xa6\\x06\\xa2\\x97\\x86\\x81\\x7c\\x78\\x7f\\x71\\x7c\\x7f\\x8f\\x95\\x79\\x1f\\x90\\x82\\x88\\x8c\\x86\\x1b\\x7b\\x7d\\x7e\\x7b\\x78\\xb7\"\n\"\\x77\\xb5\\xc4\\xb5\\xaf\\xba\\xaa\\x79\\x9c\\x69\\x8e\\x1f\\x0e\\x47\\x1d\\x0e\\xf7\\x7c\\x92\\x15\\x67\\xfb\\x3b\\xf7\\x01\\x1d\\xab\\xf7\\x31\\xf7\\x9f\\xf8\"\n\"\\x07\\x05\\x96\\x06\\xa2\\x99\\x97\\x9d\\x9a\\x83\\xb5\\x0a\\xfb\\xc6\\x32\\xf7\\xc6\\xf7\\x02\\x1d\\x0e\\xf8\\x08\\xf7\\x66\\x15\\x95\\xb5\\xf7\\x7b\\xf7\\x98\"\n\"\\x05\\xa0\\x91\\x1d\\x79\\x7c\\x80\\x1d\\x79\\x7c\\x25\\x1d\\xa0\\x06\\xf7\\x0c\\xfb\\x96\\x81\\x5f\\x05\\x24\\x06\\x68\\x1d\\xf0\\x06\\x73\\xfb\\x01\\x05\\x26\"\n\"\\x21\\x1d\\xf7\\x90\\x30\\x0a\\x29\\x06\\xa3\\xf7\\x01\\x05\\xf7\\x00\\x66\\x1d\\x0e\\xf7\\x76\\x78\\x15\\x2e\\x8e\\x1d\\xe7\\x06\\x77\\x30\\xf7\\x01\\x1d\\x9e\"\n\"\\xe6\\x05\\xe8\\x66\\x1d\\x2f\\x06\\x8e\\x9a\\xf7\\x9f\\xf8\\x08\\x05\\x96\\x06\\xa2\\x99\\x97\\x9d\\x9a\\x83\\xb5\\x0a\\xfb\\xc7\\x32\\xf7\\xc7\\xf7\\x02\\x1d\"\n\"\\xf4\\xfb\\xfd\\x05\\x0e\\xf8\\x78\\xbe\\x15\\xfb\\x1b\\xf7\\x80\\xaa\\x1d\\xf7\\x06\\x06\\x75\\x33\\x05\\x89\\x84\\x8b\\x88\\xe1\\x0a\\xf8\\x74\\xbe\\x15\\xfb\"\n\"\\x21\\xf7\\x3b\\x8a\\x0a\\xf7\\x04\\x06\\x76\\x33\\x05\\x89\\x81\\x8b\\x8b\\xf7\\x27\\x1d\\xad\\x1d\\x20\\x22\\x0a\\xf7\\x4a\\x06\\x75\\x33\\x05\\x89\\x81\\x8b\"\n\"\\x8b\\xe1\\x0a\\xae\\x1d\\x22\\x20\\x0a\\xf7\\x47\\x06\\x76\\x33\\x05\\x8a\\x85\\x8a\\x87\\x7e\\x0a\\x95\\x9f\\x8f\\xa0\\x1d\\xf7\\xb3\\xf7\\x54\\x15\\xc7\\x9d\"\n\"\\xb0\\x9a\\xb5\\xa6\\x60\\xfb\\x5d\\x18\\x20\\x22\\x0a\\xf7\\x5b\\x21\\x0a\\x64\\x06\\x7a\\x1d\\x4e\\x61\\x6a\\x7a\\x5c\\x7d\\x19\\x9d\\xdb\\x8c\\x97\\x05\\x98\"\n\"\\x80\\x97\\x7e\\x7d\\x83\\x83\\x79\\x87\\x1e\\x75\\x26\\x05\\x82\\x06\\x5e\\x75\\x9e\\xb2\\x97\\x8d\\x98\\xac\\x0a\\x49\\xb5\\x66\\xd8\\x89\\x1e\\x7a\\x3b\\x05\"\n\"\\x8a\\x87\\x8a\\x84\\xf7\\x3c\\x1d\\xf7\\x7d\\xf7\\x18\\x15\\x81\\x5b\\x05\\x8a\\x87\\x8a\\x85\\xf7\\x47\\x1d\\x99\\xcb\\xb9\\x93\\xaa\\x95\\xbf\\xa5\\x19\\x6f\"\n\"\\xfb\\x17\\x05\\x22\\x20\\x0a\\xf7\\x54\\x06\\xa5\\x98\\x80\\x0a\\x69\\x06\\xcf\\xf7\\xd1\\x05\\xb2\\x2b\\x0a\\xfb\\x14\\x22\\x0a\\xaf\\x06\\x6f\\xfb\\x11\\x50\"\n\"\\x6d\\x74\\x81\\x5c\\x7f\\x19\\x97\\xc0\\x05\\x8c\\x91\\x8c\\x8f\\x8e\\x1a\\x98\\x80\\x97\\x7e\\x7d\\x83\\x83\\x78\\x87\\x1e\\x7a\\x42\\x7a\\x8c\\x05\\x5f\\x8e\"\n\"\\x79\\x97\\xa5\\x1a\\x95\\x8d\\x97\\x8e\\x9a\\x1e\\xa3\\xf6\\x05\\xb7\\x06\\xa6\\xbc\\x0a\\x5a\\xb2\\x6c\\xce\\x87\\x1e\\x0e\\xf7\\xcb\\x22\\x1d\\xf6\\x4c\\x1d\"\n\"\\xfb\\x5b\\x51\\x0a\\xb2\\x26\\x1d\\x66\\x51\\x0a\\xf7\\x18\\x2f\\x0a\\x62\\x06\\xb5\\xf7\\x54\\x05\\xc6\\xe0\\xc6\\xa3\\xc7\\x1b\\xb7\\xa1\\x78\\x64\\x7e\\x8a\"\n\"\\x80\\x87\\x79\\x1f\\x65\\xfb\\x43\\x05\\x5d\\x36\\x1d\\xf7\\x1e\\x2f\\x0a\\x64\\x06\\xb0\\xf7\\x3d\\x05\\x90\\xa3\\x8d\\x99\\x99\\x1a\\xca\\x5d\\xb5\\x46\\x4f\"\n\"\\x4e\\x77\\x5d\\x41\\x1e\\x0e\\xf7\\x97\\xf8\\xee\\x15\\x25\\x2b\\x1d\\xba\\x06\\xfb\\x01\\xfc\\x88\\xb5\\x1d\\x57\\x76\\x5f\\x55\\x1e\\x0e\\x75\\x1d\\xad\\x1d\"\n\"\\xfb\\x21\\x06\\x71\\xfb\\x22\\x05\\x8a\\x88\\x8b\\x87\\x88\\x1a\\x7d\\x91\\x85\\x99\\x9d\\x96\\x96\\xa1\\x8f\\x1e\\x9b\\xe3\\x05\\xf7\\x5f\\x06\\x9d\\x97\\x95\"\n\"\\x9b\\x9a\\x80\\x95\\x79\\x1f\\x0e\\xae\\x1d\\xfb\\x1f\\x06\\x72\\xfb\\x1e\\x05\\x8a\\x87\\x8b\\x87\\x88\\x1a\\x7c\\x92\\x83\\x9a\\x9d\\x94\\x95\\xa2\\x8f\\x1e\"\n\"\\x9c\\xe3\\x05\\xf7\\x49\\x06\\xab\\x98\\x93\\x9d\\x9c\\x7e\\x93\\x71\\x1f\\x0e\\xf3\\xf7\\xaf\\x15\\x85\\x5c\\x89\\x79\\x74\\x1a\\x4e\\xa4\\x4f\\xb5\\x63\\x1e\"\n\"\\x6a\\xae\\xb7\\x7a\\xc0\\x1b\\xf7\\x3c\\xf7\\x32\\xf7\\x46\\xf7\\x51\\xf7\\x1a\\x3a\\xe5\\xfb\\x0b\\x39\\x33\\x5e\\x44\\x52\\x1f\\xbb\\x78\\x05\\xbc\\xb3\\xd3\"\n\"\\xae\\xc7\\x1b\\xe6\\xca\\x3f\\xfb\\x00\\x7a\\x8a\\x7e\\x86\\x6f\\x1f\\x7c\\x59\\x15\\x70\\x4e\\x78\\x6e\\x66\\x68\\x08\\x5c\\x5a\\x52\\x72\\x53\\x1b\\x35\\x48\"\n\"\\xd7\\xeb\\x91\\x8b\\x94\\x8c\\x95\\x1f\\x0e\\x29\\x0a\\x29\\xf7\\x98\\x48\\x1d\\x37\\x0a\\xfb\\x12\\xf8\\x29\\x32\\x0a\\xf8\\x3c\\xf8\\xd3\\x15\\xfb\\x3d\\xfb\"\n\"\\x32\\xfb\\x46\\xfb\\x52\\xfb\\x19\\xdc\\x31\\xf7\\x0b\\xf7\\x39\\xf7\\x34\\xf7\\x47\\xf7\\x4d\\xf7\\x1c\\x3c\\xe6\\xfb\\x0b\\x1f\\xf7\\x17\\xfb\\xd6\\x15\\x7b\"\n\"\\x5e\\x7f\\x73\\x74\\x6b\\x08\\x41\\x55\\x41\\x60\\x41\\x1b\\x36\\x48\\xd7\\xeb\\x99\\x8c\\x9a\\x8c\\x9c\\x1f\\x96\\xbd\\x15\\xf7\\x19\\xb7\\xf0\\xe3\\xf7\\x00\"\n\"\\x1b\\xe1\\xce\\x3f\\x2a\\x7f\\x8a\\x79\\x89\\x79\\x1f\\x0e\\x89\\x0a\\x2d\\x1d\\xf7\\x0a\\xf9\\x65\\x48\\x1d\\x30\\x1d\\xfb\\x57\\xf7\\xf4\\x32\\x0a\\xf9\\x7d\"\n\"\\xf9\\x46\\xd0\\x0a\\xf8\\x2d\\xe3\\x15\\x94\\x63\\x8f\\x7e\\x92\\x7f\\x08\\x78\\x97\\x9b\\x80\\x9c\\x1b\\xc8\\xb4\\xe6\\xf7\\x1c\\xf7\\x18\\x60\\xe6\\x4e\\x44\"\n\"\\x67\\x32\\xfb\\x40\\x1f\\xfb\\xee\\x07\\x7b\\x93\\x81\\x99\\x99\\x93\\x95\\x9c\\x1e\\xf8\\x03\\x04\\xa1\\x07\\xed\\xa7\\xd7\\xaf\\xb0\\xa5\\x42\\x22\\xfb\\x0d\"\n\"\\x75\\x4b\\x61\\x68\\x75\\xb8\\xd7\\x87\\x1e\\xfb\\xe5\\x81\\x15\\x8a\\x5d\\x7d\\x66\\x76\\x81\\x08\\x81\\x86\\x85\\x82\\x80\\x1a\\x89\\x07\\x7c\\x8c\\x95\\x83\"\n\"\\x9c\\x1b\\xf1\\x8c\\x05\\xf4\\xc4\\xec\\xf7\\x46\\xf7\\x1d\\x66\\xe8\\x48\\xac\\x1f\\x75\\x96\\x75\\x8f\\x65\\x8a\\x08\\x84\\x88\\x8d\\x8f\\x95\\x93\\xa3\\x90\"\n\"\\x93\\x1f\\x8e\\x90\\x8c\\x8d\\x8f\\x1a\\x90\\x88\\x90\\x87\\x8e\\x1e\\x89\\x8c\\x05\\x8d\\x88\\x87\\x8c\\x87\\x1b\\x79\\x76\\x69\\x6c\\x8a\\x1f\\x82\\x8a\\x8a\"\n\"\\x89\\x84\\x1b\\x7a\\x06\\x7a\\x81\\x82\\x7e\\x7d\\x95\\x83\\x9c\\x1f\\x9c\\x06\\x91\\x8d\\x88\\x86\\x1f\\xb7\\x16\\x92\\x8c\\x8c\\x9b\\xee\\xaf\\x4b\\xfb\\x43\"\n\"\\xfb\\x09\\x76\\x46\\x60\\x72\\x1e\\x80\\x79\\x68\\x86\\x5a\\x1b\\x7e\\x86\\x8d\\x8f\\x8c\\x8b\\x8c\\x8c\\x8c\\x1f\\xa0\\xa8\\x94\\xaa\\x8c\\xba\\x08\\x0e\\xf8\"\n\"\\x34\\xbd\\x15\\xec\\xc2\\xc6\\xeb\\xf2\\x1a\\xf7\\x2e\\xfb\\x0a\\xf7\\x09\\xfb\\x2e\\xfb\\x2f\\xfb\\x09\\xfb\\x09\\xfb\\x2e\\x24\\xc6\\x2b\\xec\\x54\\x1e\\xfb\"\n\"\\x15\\x06\\x74\\x80\\x83\\x7a\\x7b\\x98\\x82\\xa0\\x1f\\xf7\\x62\\xbb\\x06\\x54\\xaa\\x7b\\x96\\x75\\x9f\\x08\\x51\\xbf\\x6d\\xcc\\xd3\\x1a\\xd3\\xa7\\xc6\\xc2\"\n\"\\xb9\\x1e\\xad\\xb4\\xb3\\x99\\xc3\\x1b\\xc3\\xb3\\x7d\\x69\\xb4\\x1f\\xc2\\x5d\\xa7\\x50\\x43\\x1a\\x47\\x71\\x4f\\x57\\x57\\x1e\\x72\\x72\\x7a\\x7f\\x4e\\x69\"\n\"\\x08\\x5b\\xf7\\x62\\x07\\xa0\\x98\\x94\\x9b\\x9c\\x80\\x93\\x74\\x1f\\x0e\\xab\\x0a\\x68\\x0a\\xe6\\x16\\xbe\\x06\\xf7\\x34\\xf8\\x1a\\xf7\\x35\\xfc\\x1a\\x05\"\n\"\\xbe\\x06\\xfb\\x42\\xf8\\x47\\x05\\x40\\x06\\x0e\\xe6\\xf8\\x46\\x15\\xf7\\x42\\xfc\\x46\\x05\\xd6\\x06\\xf7\\x42\\xf8\\x47\\x05\\x58\\x06\\xfb\\x35\\xfc\\x19\"\n\"\\xfb\\x34\\xf8\\x19\\x05\\x58\\x06\\x0e\\xf7\\xbd\\xf8\\x89\\x15\\xfb\\x1b\\xfb\\x05\\xfb\\x04\\xfb\\x1b\\xfb\\x22\\xf7\\x02\\xfb\\x04\\xf7\\x20\\xf7\\x1c\\xf7\"\n\"\\x03\\xf7\\x04\\xf7\\x1f\\xf7\\x1f\\xfb\\x03\\xf7\\x03\\xfb\\x1e\\x1f\\x70\\xfb\\xad\\x15\\xfb\\x36\\x07\\x35\\x94\\x3e\\xd6\\x87\\xd9\\x08\\xc2\\x04\\x91\\xde\"\n\"\\xd5\\xd5\\xe2\\x96\\x08\\xfb\\x3c\\x07\\xc2\\x54\\x15\\xf7\\x3b\\x06\\x88\\x42\\x3b\\x3d\\x37\\x80\\x08\\xf7\\x6d\\x04\\xf7\\x3c\\x07\\xdf\\x82\\xd7\\x3f\\x92\"\n\"\\x38\\x08\\x0e\\x9c\\x16\\xf8\\xcb\\xf8\\xcb\\xfc\\xcb\\x06\\xf8\\x92\\xfc\\x92\\x15\\xfc\\x59\\xf8\\x59\\xf8\\x59\\x06\\x0e\\xca\\xf7\\xe7\\x15\\xfb\\x2b\\x90\"\n\"\\x68\\xa6\\x5f\\x1e\\x47\\xb5\\xd8\\x62\\xe1\\x1b\\xbf\\xbb\\x9a\\xa6\\xb4\\x1f\\xbe\\xae\\xa8\\xb9\\x95\\xca\\x08\\x90\\xac\\x8c\\xa1\\xed\\x1a\\xf7\\x51\\x07\"\n\"\\x9f\\x80\\x99\\x7b\\x7b\\x82\\x7f\\x75\\x1e\\xfb\\x54\\x07\\xfb\\x10\\x86\\x62\\x78\\x6a\\x1e\\x57\\x6d\\x4a\\x68\\x49\\x1b\\x63\\x62\\x98\\xa2\\x6a\\x1f\\x62\"\n\"\\xa8\\x78\\xac\\x85\\xbb\\x87\\xa9\\x8b\\x8b\\x8a\\xf7\\x01\\x08\\xf7\\x54\\x07\\xa0\\x81\\x98\\x7b\\x7a\\x82\\x7f\\x75\\x1e\\x0e\\xf7\\xe1\\x16\\xf7\\x67\\xf8\"\n\"\\xeb\\x05\\x55\\x06\\x4c\\xfb\\x37\\x05\\xfb\\x97\\x06\\x4d\\xf7\\x37\\x05\\x58\\x06\\xf7\\x5f\\xfc\\xeb\\x05\\xf7\\x2a\\xf8\\x15\\x15\\xfb\\x03\\xfb\\xe2\\x05\"\n\"\\x84\\x06\\x24\\xf7\\xe2\\x05\\x0e\\xf8\\xd4\\xf8\\x37\\x15\\xdb\\x0a\\x48\\x4a\\x7c\\x1d\\xca\\xa3\\xbc\\xcb\\x1f\\x7f\\x52\\x05\\x9e\\x06\\x57\\x70\\x70\\x69\"\n\"\\x63\\x65\\x0a\\xaa\\xaf\\xac\\xc7\\xa4\\x1f\\xa3\\x94\\x93\\x94\\x9a\\x1a\\x99\\x82\\x92\\x77\\x1e\\x70\\x06\\x0e\\xf8\\x63\\xf8\\x04\\x15\\x6b\\xfb\\x27\\x7b\"\n\"\\x41\\x7b\\x64\\x71\\x6f\\x19\\x6e\\x6f\\x67\\x7b\\x60\\x1b\\x4b\\x67\\xac\\xc5\\xa0\\x8f\\xaa\\x94\\xb3\\x1f\\xb6\\xf7\\x5d\\x05\\x20\\x8d\\x1d\\xbe\\x06\\x6b\"\n\"\\xfb\\x27\\x05\\x83\\x66\\x87\\x69\\x70\\x1a\\x36\\xc7\\x55\\xe8\\xc3\\xc3\\xa4\\xb4\\xb0\\x1e\\xa9\\xad\\x9f\\xbb\\x9d\\xe1\\xab\\xf7\\x2a\\x18\\xb4\\x06\\xa3\"\n\"\\x6d\\x1d\\xfb\\x26\\x3a\\x0a\\x0e\\x73\\x1d\\xfb\\x23\\xf7\\x72\\x15\\xf7\\x15\\x0a\\xa8\\x9f\\x7c\\x9a\\x75\\x1f\\xf7\\x62\\xd9\\x0a\\x73\\x1d\\xc4\\xf7\\x5a\"\n\"\\x15\\x98\\x95\\x91\\x94\\xf3\\x0a\\x2b\\x05\\x7e\\x81\\x85\\x82\\x80\\x1a\\x7f\\x93\\x83\\x98\\x92\\x93\\x8e\\x92\\x95\\xf7\\x13\\x1d\\xf7\\x98\\x16\\x6e\\x71\"\n\"\\x72\\x6f\\x75\\x99\\x7e\\xa2\\xa8\\xa5\\xa4\\xa6\\xa0\\x51\\x1d\\x73\\x1d\\xc0\\xf7\\x6f\\x61\\x1d\\x83\\x93\\x7e\\x5b\\x1d\\x93\\x83\\x98\\xf7\\x10\\x0a\\x2c\"\n\"\\x0a\\x87\\xf8\\xed\\x5c\\x1d\\x7a\\x74\\x95\\x1d\\x0e\\x2c\\x0a\\xf7\\x02\\xf8\\xb4\\x5b\\x0a\\x68\\x80\\x85\\x7b\\x1b\\x80\\x83\\x8f\\x9e\\x6c\\xe3\\x0a\\x72\"\n\"\\x80\\x71\\x69\\xf7\\x07\\x1d\\x95\\x87\\x80\\x9b\\x1f\\x73\\xaf\\x9d\\x84\\xa2\\x1b\\xa5\\xa4\\x97\\xa9\\xaf\\x1f\\x9e\\x9a\\x90\\x92\\x56\\x0a\\x4d\\x0a\\xf7\"\n\"\\x2d\\xf8\\xe0\\x15\\x9a\\x95\\x8f\\x92\\x96\\x46\\x0a\\x80\\x1e\\xfb\\x1c\\x29\\x05\\x7c\\x80\\x87\\x86\\x7f\\x3e\\x0a\\x90\\x47\\x0a\\xf8\\x26\\x16\\xf7\\x35\"\n\"\\xf8\\x04\\x05\\x9b\\x27\\x1d\\xfb\\x03\\x20\\x1d\\xb5\\x06\\xfb\\x12\\xfb\\xb5\\x6b\\xf7\\x80\\x05\\x50\\x06\\xfb\\x19\\xfb\\x7f\\x88\\xf7\\xb4\\x05\\xba\\x5d\"\n\"\\x1d\\x99\\x06\\x8f\\xfc\\x04\\x05\\xc5\\x06\\xf7\\x1f\\xf7\\x87\\xad\\xfb\\x87\\x05\\xbd\\xf9\\x12\\x15\\xfb\\x32\\xfb\\x01\\x05\\x7b\\x63\\x0a\\x89\\x8e\\x82\"\n\"\\x94\\x1f\\x0e\\x4d\\x0a\\x33\\xad\\x0a\\x4d\\x0a\\x54\\xde\\x1d\\xf8\\x3c\\xf7\\xb1\\x15\\x92\\x06\\x97\\xbe\\x81\\x8c\\x05\\x83\\x06\\x2d\\x90\\x59\\xa9\\xc0\"\n\"\\x1a\\xcf\\xdf\\xc2\\xf6\\x8d\\x1e\\xab\\x8c\\x8b\\x8b\\x91\\x8d\\x08\\x96\\x90\\x93\\x96\\x96\\x1a\\x99\\x81\\x93\\x78\\x1e\\xfb\\x5c\\x06\\x73\\x7d\\x81\\x78\"\n\"\\x7c\\x95\\x84\\x9e\\x1f\\x99\\x06\\x59\\x6b\\x71\\x61\\x57\\x1a\\x5b\\x9d\\x6c\\xb7\\x70\\x1e\\x28\\x67\\x4e\\x40\\x38\\x1a\\x38\\xc0\\x5b\\xf5\\x7e\\x1e\\xd5\"\n\"\\x83\\x99\\x85\\x72\\x1a\\x79\\x80\\x78\\x79\\x7e\\x1e\\x7c\\x7f\\x72\\x85\\x68\\x89\\x08\\x6c\\x89\\x82\\x85\\x78\\x1a\\x78\\x96\\x83\\xa4\\xe7\\xcf\\xbf\\xd2\"\n\"\\xa7\\x80\\xa3\\x76\\x9a\\x1e\\x7a\\x97\\x77\\x91\\x5b\\x91\\x64\\x90\\x83\\x8c\\x7b\\x90\\x08\\x5d\\x9a\\x76\\xa5\\xb3\\x1a\\xbb\\xaa\\xb9\\xc0\\xab\\x1e\\xb1\"\n\"\\xa1\\xbe\\x97\\xc9\\x8c\\x08\\x0e\\xb3\\x1d\\xf7\\x9e\\xf7\\xa2\\x3d\\x0a\\x63\\x0a\\x89\\x8e\\x81\\x94\\x1f\\x0e\\x52\\x1d\\xf7\\x35\\xf7\\x96\\xf7\\x0b\\x0a\"\n\"\\x8e\\x86\\x50\\x1d\\x83\\x92\\x91\\x88\\x92\\x1b\\x9a\\x9b\\x99\\x99\\x8e\\x84\\x99\\x87\\x8e\\x1f\\x0e\\x9b\\x0a\\x8e\\xf7\\x69\\x15\\x9a\\x96\\x8f\\x91\\x96\"\n\"\\x46\\x0a\\x80\\xf7\\x0d\\x1d\\x9b\\x0a\\xfb\\x16\\xf7\\x7e\\x59\\x1d\\xf8\\x5f\\xf8\\xbb\\x15\\xfb\\x79\\xfb\\x55\\x34\\xfb\\x08\\xfb\\x03\\x1a\\x5d\\x9f\\x65\"\n\"\\xaf\\x72\\x1e\\xa7\\x78\\xaf\\x80\\xc8\\x82\\x08\\xb5\\x85\\x98\\x82\\x75\\x1a\\x5f\\x5b\\x6b\\x47\\x8a\\x1e\\x79\\x8a\\x81\\x83\\x7a\\x1a\\x7a\\x97\\x83\\xa4\"\n\"\\xe3\\xd2\\xc5\\xd2\\xa7\\x80\\xa3\\x76\\x99\\x1e\\x7e\\x94\\x7e\\x8f\\x57\\x94\\x58\\x94\\x82\\x8e\\x74\\x97\\x08\\x6f\\x98\\x7c\\xa7\\xae\\x1a\\xc0\\xb2\\xd3\"\n\"\\xd1\\xd8\\x1e\\xb0\\xb3\\xce\\xcb\\xd0\\xc7\\xa4\\xa1\\x9c\\x9a\\x92\\x92\\x90\\x90\\x18\\x8c\\x8c\\x8c\\x8c\\x8d\\x8d\\x97\\xbb\\x05\\xfb\\x6c\\x2b\\x1d\\x0e\"\n\"\\x7b\\x9b\\xf8\\x35\\x9b\\xf7\\x16\\x97\\xa7\\x98\\x06\\xbe\\x0a\\xc0\\x0b\\xa7\\x93\\x8e\\x8f\\x8f\\x8f\\x8e\\x8f\\x93\\xbb\\xae\\xab\\x0c\\x0c\\xf8\\xec\\x14\"\n\"\\xad\\x13\\x00\\xfb\\x02\\x00\\x01\\x00\\x08\\x00\\x13\\x00\\x1a\\x00\\x1f\\x00\\x24\\x00\\x2a\\x00\\x35\\x00\\x42\\x00\\x48\\x00\\x65\\x00\\x6a\\x00\\x6f\\x00\"\n\"\\x89\\x00\\xa1\\x00\\xac\\x00\\xb2\\x00\\xb9\\x00\\xd5\\x00\\xf4\\x00\\xf9\\x00\\xff\\x01\\x06\\x01\\x0b\\x01\\x41\\x01\\x46\\x01\\x75\\x01\\x80\\x01\\x8d\\x01\"\n\"\\x93\\x01\\x9b\\x01\\xa2\\x01\\xa7\\x01\\xd9\\x01\\xf2\\x01\\xff\\x02\\x25\\x02\\x30\\x02\\x3b\\x02\\x42\\x02\\x47\\x02\\x4d\\x02\\x7c\\x02\\xbd\\x02\\xfe\\x03\"\n\"\\x08\\x03\\x3b\\x03\\x57\\x03\\x68\\x03\\x72\\x03\\x7d\\x03\\x86\\x03\\x8a\\x03\\x99\\x03\\xa4\\x03\\xac\\x03\\xb4\\x03\\xbf\\x03\\xc5\\x03\\xcc\\x03\\xd5\\x03\"\n\"\\xdd\\x04\\x24\\x04\\x38\\x04\\x4c\\x04\\x66\\x04\\x75\\x04\\x8d\\x04\\x99\\x04\\x9f\\x04\\xb8\\x04\\xd2\\x04\\xe3\\x04\\xea\\x04\\xf6\\x05\\x0e\\x05\\x15\\x05\"\n\"\\x20\\x05\\x2d\\x05\\x36\\x05\\x45\\x05\\x54\\x05\\x5a\\x05\\x67\\x05\\x74\\x05\\x7d\\x05\\x84\\x05\\x90\\x05\\x9a\\x05\\xa7\\x05\\xb2\\x05\\xbd\\x05\\xc7\\x05\"\n\"\\xd1\\x05\\xd6\\x05\\xdf\\x05\\xeb\\x05\\xf3\\x06\\xb3\\x07\\x3a\\x07\\x51\\x07\\xb0\\x07\\xc5\\x07\\xdc\\x08\\x15\\x08\\x2e\\x08\\x48\\x08\\x61\\x08\\xc8\\x08\"\n\"\\xeb\\x09\\x0c\\x09\\x42\\x09\\x5a\\x09\\x74\\x09\\x79\\x09\\xc1\\x0a\\x02\\x0a\\x1d\\x0a\\x34\\x0a\\x60\\x0a\\xae\\x0a\\xc8\\x0a\\xf0\\x0b\\x04\\x0b\\x1d\\x0b\"\n\"\\x62\\x0b\\x65\\x0b\\x6e\\x0b\\x9a\\x0b\\xb6\\x0b\\xea\\x0b\\xf7\\x0c\\x02\\x0c\\x25\\x0c\\x4e\\x0c\\x73\\x0c\\x97\\x0c\\x9c\\x0c\\xac\\x0c\\xc8\\x0c\\xf3\\x0d\"\n\"\\x0e\\x0d\\x27\\x0d\\x2e\\x0d\\x45\\x0d\\x4a\\x0d\\x52\\x0d\\x79\\x0d\\x9e\\x0d\\xb9\\x0d\\xbe\\x0d\\xd5\\x0d\\xf8\\x0e\\x01\\x0e\\x12\\x0e\\x23\\x0e\\x2c\\x0e\"\n\"\\x3e\\x0e\\x4a\\x0e\\x51\\x0e\\x58\\x0e\\x67\\x0e\\x73\\x0e\\x88\\x0e\\x8c\\x0e\\x9e\\x0e\\xa7\\x0e\\xc3\\x0e\\xd8\\x0e\\xe0\\x0e\\xe9\\x0e\\xf2\\x0f\\x0c\\x0f\"\n\"\\x17\\x0f\\x22\\x0f\\x31\\x0f\\x42\\x0f\\x51\\x0f\\x61\\x0f\\x71\\x0f\\x77\\x0f\\x80\\x0f\\x97\\x0f\\xac\\x0f\\xc1\\x0f\\xd4\\x0f\\xdc\\x0f\\xe2\\x0f\\xee\\x0f\"\n\"\\xfa\\x10\\x06\\x10\\x19\\x10\\x1d\\x10\\x30\\x10\\x37\\x10\\x40\\x10\\x49\\x10\\x4f\\x10\\x5a\\x10\\x60\\x10\\x6d\\x10\\x7e\\x10\\x86\\x10\\x96\\x10\\xa6\\x10\"\n\"\\xb6\\x10\\xc6\\x10\\xcd\\x10\\xd5\\x10\\xdd\\x10\\xec\\x10\\xf3\\x11\\x02\\x11\\x0d\\x11\\x1c\\x11\\x20\\x11\\x2e\\x11\\x3c\\x11\\x47\\x11\\x55\\x11\\x63\\x11\"\n\"\\x71\\x11\\x7d\\x11\\x86\\x11\\x8f\\x11\\x98\\x11\\x9d\\x11\\xaa\\x11\\xb7\\x11\\xc4\\x11\\xca\\x11\\xd7\\x11\\xde\\x11\\xe5\\x11\\xf1\\x11\\xfd\\x12\\x09\\x12\"\n\"\\x15\\x12\\x1f\\x12\\x27\\x12\\x2f\\x12\\x37\\x12\\x3f\\x12\\x47\\x12\\x52\\x12\\x5d\\x12\\x68\\x12\\x73\\x12\\x7e\\x12\\x89\\x12\\x92\\x12\\x98\\x06\\x72\\x5a\"\n\"\\x0a\\xa4\\x1f\\x0b\\x06\\xa4\\x99\\x94\\x9b\\x9c\\x7d\\x94\\x72\\x1f\\x0b\\x06\\x71\\x5a\\x0a\\xa5\\x1f\\x0b\\x06\\xa3\\x52\\x0a\\x0b\\x06\\x74\\x7d\\x80\\x0b\"\n\"\\x06\\x46\\xfb\\xd1\\x05\\x0b\\x06\\x74\\x7d\\x80\\x79\\x7c\\x94\\x84\\x9f\\x1f\\x0b\\x15\\x94\\x95\\x8f\\x92\\x93\\x1a\\x95\\x81\\x95\\x80\\xef\\x1d\\x1a\\x97\"\n\"\\x82\\x94\\x7e\\x0b\\xf8\\x64\\xce\\x0a\\x35\\x1d\\x6b\\x06\\x34\\xf8\\x94\\x05\\xfb\\x64\\x37\\x1d\\x7b\\x1d\\x9a\\x82\\x91\\x98\\x1d\\xf7\\x8e\\xbe\\x8b\\x1d\"\n\"\\x0b\\x94\\x84\\x9f\\x1f\\x0b\\x06\\xa5\\x3a\\x1d\\x0b\\xf8\\x45\\x16\\xdd\\x06\\xa1\\x40\\x1d\\x70\\x06\\xdb\\xf8\\x04\\x05\\xdb\\x0a\\x49\\x49\\x7c\\x1d\\xca\"\n\"\\xa3\\xbc\\xcb\\x1f\\x0b\\x15\\x9a\\x95\\x90\\x93\\x94\\x1a\\x98\\x82\\x94\\x7e\\x83\\x86\\x89\\x83\\x80\\x82\\x1d\\x8b\\x8b\\x95\\x9c\\x1e\\x0e\\x06\\xa1\\x9a\"\n\"\\x97\\x9d\\x9a\\x83\\x91\\x76\\x1f\\x0b\\x06\\xa4\\x99\\x80\\x0a\\x0b\\x75\\x0a\\x82\\x91\\x77\\x1f\\x0b\\xf8\\x3b\\xf7\\x03\\x1d\\xf7\\x1a\\x3b\\xe5\\xfb\\x0b\"\n\"\\x1f\\x85\\x58\\x15\\xe3\\xcb\\x3e\\x22\\xfb\\x2c\\xf7\\x29\\x1d\\xf7\\x1d\\x1f\\x0b\\xf7\\x08\\x1d\\xbf\\xb8\\x6d\\x0a\\x82\\x84\\x79\\x85\\x1e\\x67\\x7f\\x5b\"\n\"\\x71\\x55\\x1b\\x71\\x73\\x92\\x96\\x7d\\x1f\\x84\\x91\\x7d\\x9d\\x8d\\x1a\\x0e\\xe2\\x0a\\x9e\\x1f\\x0b\\x06\\xb5\\xf7\\x57\\x05\\x0b\\x42\\x1d\\xaf\\xab\\xaa\"\n\"\\xac\\x0b\\xef\\xf8\\x61\\x05\\x0b\\x74\\x0a\\x76\\x1f\\x5c\\x06\\xed\\x1d\\x90\\x8d\\x8b\\x90\\x9a\\x1e\\xa0\\xd8\\xa5\\x90\\xad\\x1b\\xca\\xb2\\x73\\x66\\xf7\"\n\"\\x16\\x1d\\x29\\x48\\xbf\\x63\\xe0\\xd0\\xc6\\xa1\\xbf\\xd3\\x1f\\x99\\xc8\\xf7\\x49\\x1d\\xdf\\xbc\\xf7\\x04\\xb6\\xb4\\x86\\x82\\xae\\x1f\\x0b\\xf8\\x1d\\x56\"\n\"\\x1d\\x0b\\x15\\xf7\\x2f\\xf7\\x01\\x05\\x9b\\x92\\x90\\x92\\x9a\\x1a\\x97\\x82\\x93\\x7e\\x88\\x7d\\x86\\x87\\x86\\x1e\\xfb\\x0d\\x35\\x35\\xe0\\x05\\x94\\x82\"\n\"\\x89\\x8c\\x82\\x1b\\x88\\x06\\x7f\\x7c\\x7b\\x7f\\x80\\x8e\\x86\\x94\\x86\\x1f\\x0e\\x06\\x73\\x7e\\x81\\x78\\x7d\\x95\\x83\\x9d\\x1f\\x0b\\x81\\x83\\x87\\x89\"\n\"\\x80\\x80\\x1e\\xfc\\x4b\\xfc\\x2d\\x05\\x0b\\x99\\x82\\x92\\x77\\x1f\\x0b\\x15\\xfb\\x33\\xfb\\x01\\x05\\x7c\\x0b\\x1a\\x7f\\x94\\x82\\x98\\x92\\x0b\\x27\\xfc\"\n\"\\x61\\x05\\x0b\\xf7\\xea\\x22\\x1d\\xe7\\x4b\\x1d\\xfb\\x7d\\x37\\x1d\\xf7\\x39\\x1d\\x80\\x78\\x7d\\x25\\x1d\\xf8\\x5b\\x06\\xb7\\xf7\\x5e\\x05\\x8d\\x93\\x8b\"\n\"\\x8c\\x8f\\x1a\\x96\\x81\\x93\\x7f\\x7a\\x81\\x81\\x77\\x87\\x1e\\x69\\xfb\\x2d\\x05\\xfb\\x99\\x06\\x0b\\xf8\\x5b\\xf8\\xef\\x15\\xfb\\x38\\x24\\x0a\\x78\\x7c\"\n\"\\x93\\x85\\xa0\\x1f\\xf7\\x02\\x06\\xfb\\x01\\xfc\\x89\\xf1\\x1d\\x0b\\xf6\\x1d\\xb8\\x77\\xb4\\xc4\\xb6\\xaf\\xba\\xaa\\x79\\x9c\\x0b\\x15\\x91\\x94\\x8e\\x93\"\n\"\\x93\\x1a\\x97\\x83\\x94\\x7e\\x81\\x83\\x85\\x7e\\x82\\x1e\\x2e\\xfb\\x1b\\x05\\x84\\x81\\x88\\x84\\x83\\x1a\\x7e\\x93\\x82\\x98\\x95\\x93\\x91\\x98\\x95\\x1e\"\n\"\\x0b\\x06\\xa3\\x99\\x95\\x9d\\x9a\\x81\\x93\\x78\\x1f\\x0b\\x06\\x73\\x7e\\x81\\x79\\x7c\\x95\\x83\\x9d\\x1f\\x0b\\x28\\x0a\\x84\\x86\\x89\\x83\\x0b\\x8d\\x93\"\n\"\\x97\\x1e\\x0e\\x06\\x28\\xfc\\x61\\x05\\x0b\\xf8\\xbd\\xf8\\xa0\\x15\\x93\\x0a\\x05\\x62\\xab\\xc1\\x75\\xcc\\x1b\\xf7\\x1e\\xf7\\x05\\xe5\\xf7\\x03\\xaf\\x7b\"\n\"\\xad\\x71\\x9d\\x1f\\x70\\x62\\x1d\\xd0\\xd7\\xc5\\xe4\\xb0\\xad\\x80\\x7b\\x9d\\x1e\\x94\\x82\\x9f\\x6e\\x79\\x1d\\x0b\\xf7\\x9b\\xf8\\x37\\x15\\x39\\x4f\\x1d\"\n\"\\x9e\\x1f\\xa7\\x69\\x0a\\x77\\x1f\\x65\\x06\\xbf\\xf7\\x84\\x05\\xd7\\xda\\xa6\\x9a\\xca\\x1b\\xae\\x9d\\x85\\x79\\x9d\\x1f\\x9a\\x7d\\x92\\x7a\\x77\\x1a\\x82\"\n\"\\x8b\\x88\\xb9\\x0a\\xbf\\xf7\\x87\\x05\\x8d\\x93\\x8c\\x93\\x93\\x1a\\xd1\\x55\\xb8\\x39\\x4e\\x63\\x79\\x54\\x4b\\x1e\\x0b\\xf7\\x73\\xf7\\x8a\\x15\\xf7\\x13\"\n\"\\x06\\xcd\\x69\\xab\\x57\\xc1\\xfb\\x34\\x08\\xc7\\x23\\x1d\\x70\\x06\\x5b\\xf7\\x16\\x75\\xb1\\x5b\\xb4\\x08\\xf6\\xae\\xc7\\xc8\\xd6\\x1a\\xd6\\x48\\xc4\\x33\"\n\"\\x1e\\xfb\\x8c\\xae\\x0a\\xc0\\xf7\\x8a\\x15\\xba\\xf7\\x6b\\x05\\xf7\\x28\\x06\\xc9\\xbd\\x63\\x59\\x49\\x2c\\x50\\x23\\x1f\\x0b\\xe9\\x1d\\x83\\x50\\x42\\x50\"\n\"\\x4d\\xa1\\x0a\\x0b\\xf8\\x52\\x16\\xf7\\x35\\xf8\\x04\\x05\\x9b\\x5d\\x1d\\xb4\\x06\\xfb\\x12\\xfb\\xb5\\x6b\\xf7\\x80\\x05\\x50\\x06\\xfb\\x19\\xfb\\x7f\\x88\"\n\"\\xf7\\xb4\\x05\\xba\\x5d\\x1d\\x99\\x06\\x8f\\xfc\\x04\\x05\\xc5\\x06\\xf7\\x1f\\xf7\\x87\\xad\\xfb\\x87\\x05\\x0b\\xb3\\x64\\x55\\xa0\\x4c\\x1b\\x47\\x49\\x71\"\n\"\\x5c\\x53\\x1f\\x55\\x5c\\x60\\x46\\x7e\\x4e\\x79\\x3a\\x18\\x88\\x7c\\x89\\x7b\\x7b\\x1a\\x0b\\x1e\\xfb\\x0f\\x37\\x36\\xdf\\x05\\x91\\x84\\x85\\x8e\\x85\\x1b\"\n\"\\x7b\\x7c\\x92\\x1d\\x69\\x6a\\x35\\x0a\\xa5\\x78\\x9d\\x70\\x1f\\x0b\\x06\\x72\\x7d\\x82\\x7b\\x7a\\x99\\x82\\xa4\\x1f\\x0b\\x99\\x96\\x9d\\x99\\x81\\x93\\x78\"\n\"\\x1f\\x0b\\xa2\\x34\\x1d\\x0b\\x85\\x81\\x80\\x1a\\x7f\\x94\\x83\\x97\\x92\\x93\\x8e\\x92\\x95\\x1e\\x0e\\x06\\x75\\x7c\\x7f\\x7a\\x7c\\x94\\x84\\x9f\\x1f\\x0b\"\n\"\\x95\\x1a\\x97\\x81\\x94\\x7f\\x1e\\x0e\\x06\\xa2\\x9a\\x96\\x9e\\x35\\x1d\\x0b\\x06\\x76\\x80\\x82\\x7b\\x7a\\x96\\x82\\xa0\\x1f\\x0b\\x8a\\x8e\\x81\\x94\\x1f\"\n\"\\x0e\\x7d\\x82\\x7a\\x7b\\x99\\x82\\x0b\\x15\\x84\\x85\\x89\\x84\\x83\\x1f\\x6e\\x0b\\xa2\\x9a\\x97\\x9d\\x9a\\x82\\x91\\x0b\\x74\\x0a\\x76\\x1f\\x5c\\x06\\xed\"\n\"\\x1d\\x8e\\x90\\x8c\\x8c\\x90\\x1e\\xa4\\xe5\\x9f\\x8f\\xaf\\x1b\\xca\\xb2\\x73\\x66\\x86\\x8b\\x87\\x8a\\x88\\x1f\\x7d\\x4b\\x05\\x9a\\x55\\x6e\\x8f\\x5f\\x1b\"\n\"\\xfb\\x22\\xfb\\x01\\x40\\x29\\x48\\xbf\\x63\\xe0\\xd0\\xc6\\xa1\\xbf\\xd3\\x1f\\x99\\xc8\\xf7\\x49\\x1d\\xe0\\xbc\\xf7\\x05\\xb3\\xb5\\x86\\x82\\xae\\x1f\\x0b\"\n\"\\xf7\\xae\\xf8\\x37\\x15\\xa6\\x0a\\x50\\xc1\\x64\\xde\\xc0\\xd5\\x9a\\xa0\\xbc\\x1e\\xa5\\x0a\\x0b\\xf7\\xe5\\xbe\\x15\\xd6\\x0a\\x94\\xa0\\x87\\x1d\\x86\\x6c\"\n\"\\x1d\\x67\\x0a\\xf7\\x8f\\x23\\x1d\\x0b\\xf8\\x89\\x16\\xb3\\xf7\\x4b\\x05\\x8d\\x95\\x8b\\x8b\\x8e\\x7c\\x0a\\xf5\\x1d\\x88\\x1a\\x7f\\x94\\x82\\x98\\xf7\\x18\"\n\"\\x1d\\x0b\\xcc\\x0a\\x36\\xdf\\x05\\x91\\x84\\x85\\x8e\\x85\\x1b\\x7b\\x7c\\x92\\x1d\\x62\\xf7\\x1a\\x77\\xca\\x70\\xb5\\x6e\\x99\\x19\\xa5\\x9e\\x99\\x99\\xb0\"\n\"\\xb9\\xf1\\xf7\\x10\\x8d\\x8d\\xb8\\x8e\\x0b\\xd1\\x0a\\x91\\x88\\x91\\x1b\\x9b\\x9a\\x99\\x9b\\x92\\x0b\\x49\\x1d\\xf7\\x7e\\x06\\x0b\\x1a\\x6b\\xa5\\x78\\xb7\"\n\"\\xb9\\xb8\\xa1\\xa1\\x94\\x84\\x93\\x82\\x88\\x86\\x8a\\x88\\x87\\x1e\\x7e\\x70\\xf7\\x45\\x1d\\x0b\\x48\\x0a\\x5e\\x20\\x0a\\xf7\\x24\\x2b\\x0a\\x5d\\x06\\xbc\"\n\"\\xf7\\x75\\x05\\xb3\\x06\\xcb\\x89\\xa5\\x73\\xa6\\x37\\xc1\\x0a\\x0b\\x9b\\x96\\x95\\x9f\\x8f\\x1e\\x9a\\xcf\\x05\\xf7\\x30\\x26\\x1d\\x26\\x20\\x1d\\x0b\\xf8\"\n\"\\x05\\xf7\\xf4\\xf7\\x0c\\x1d\\x25\\x0a\\x62\\x33\\x1d\\xf7\\x18\\x75\\x0a\\x82\\x91\\x0b\\x65\\x2b\\x78\\x7d\\x68\\x1e\\x7c\\x85\\x84\\x81\\x7f\\x1a\\x7f\\x94\"\n\"\\x82\\x96\\x90\\x8d\\x8b\\x90\\x9a\\x1e\\xa0\\x0b\\x9b\\x1d\\x8e\\x8d\\x1a\\x96\\x0b\\x06\\xa2\\x99\\x96\\x9d\\x99\\x81\\x93\\x79\\x1f\\x0b\\x9a\\xa9\\xad\\x1e\"\n\"\\xa4\\xa0\\x9d\\xaa\\x9f\\x28\\x0a\\x7c\\x0b\\x06\\xa5\\xf7\\x12\\x05\\xb1\\x96\\x1d\\x0b\\x9a\\x97\\x9d\\x9a\\x82\\x91\\x77\\x1f\\xfb\\x02\\x06\\x74\\x7d\\x80\"\n\"\\x0b\\xae\\xb3\\x1f\\x6a\\xfb\\x2f\\x15\\xaf\\xa2\\x77\\x6d\\x64\\x61\\x66\\x0b\\x92\\x96\\x28\\x0a\\x84\\x0b\\x81\\x1a\\x7e\\x96\\x80\\x99\\x94\\x91\\x8f\\x95\"\n\"\\x93\\x1e\\x0b\\x88\\x1a\\x7f\\x94\\x82\\x98\\x9b\\x96\\x95\\xa0\\x8f\\x1e\\x0b\\xf8\\x31\\x16\\xf1\\x75\\x0a\\x83\\x91\\x0b\\x06\\xa1\\x9a\\x97\\x9d\\x9a\\x0b\"\n\"\\x06\\x96\\xbf\\x05\\xb9\\x95\\xad\\xae\\xaf\\x1b\\x99\\x0b\\x15\\x45\\x06\\x72\\xfb\\x05\\x05\\xd1\\x06\\x0e\\x15\\xf7\\x32\\xf7\\x00\\x05\\x9c\\x97\\x8f\\x6a\"\n\"\\x1d\\x85\\x0b\\x06\\xa1\\x9a\\x97\\x9c\\x9b\\x83\\x91\\x77\\x1f\\x0b\\x84\\x88\\x84\\x81\\x1e\\xfb\\x1b\\x2b\\x05\\x7e\\x0b\\x93\\xa4\\x1b\\x9a\\x9d\\x82\\x78\"\n\"\\xa3\\x1f\\x0b\\x1a\\x96\\x81\\x94\\x7f\\x7a\\x81\\x81\\x76\\x0b\\x85\\x44\\x1d\\x93\\x0b\\x88\\x1a\\x7e\\x93\\x84\\x98\\x9c\\x96\\x0b\\x1e\\xf7\\x0f\\xdf\\xe0\"\n\"\\x38\\x05\\x84\\x93\\x90\\x88\\x0b\\x94\\x9c\\x9b\\x7d\\x94\\x72\\x1f\\x0b\\xf7\\xe3\\xbd\\x15\\x60\\xa4\\xb0\\x74\\xb7\\x1b\\xae\\xb6\\x9d\\xaf\\xbc\\x1f\\xa3\"\n\"\\x9c\\x91\\x93\\xe8\\x0a\\x6e\\x1b\\x58\\x66\\xbe\\xd1\\x93\\x8c\\x9a\\x8d\\x9b\\x1f\\xf7\\x96\\x06\\x95\\xbb\\x8d\\x9d\\xf7\\x3b\\x1d\\x5c\\x5c\\x71\\x5b\\x64\"\n\"\\x1f\\xb9\\x7d\\x66\\xa7\\x5d\\x1b\\x6b\\x69\\x83\\x7b\\x62\\x1f\\x6e\\x7f\\x81\\x81\\x7c\\x1a\\x81\\x95\\x80\\x94\\x91\\x93\\x8e\\x90\\x95\\x1e\\x9a\\xa7\\xaa\"\n\"\\x93\\xa6\\x1b\\xb2\\xa6\\x72\\x67\\x83\\x8b\\x88\\x8a\\x86\\x1f\\x7f\\x56\\x05\\x92\\x74\\x6e\\x8f\\x70\\x1b\\x46\\x42\\x70\\x63\\x63\\x1f\\x73\\x72\\x7f\\x6c\"\n\"\\x65\\x1a\\x43\\xbc\\x5d\\xd7\\xb5\\xb3\\x9d\\xb2\\xb7\\x1e\\x8a\\x83\\x05\\x8a\\x86\\x8a\\x87\\x87\\x1a\\x80\\x94\\x82\\x97\\x9b\\x28\\x1d\\x6b\\xe0\\x15\\x51\"\n\"\\x50\\x66\\x74\\x66\\x1b\\x5b\\x6b\\xa6\\xb5\\x9d\\x92\\xa2\\x95\\x98\\x1f\\xa8\\xa2\\xcd\\xa4\\xc2\\x1b\\xa0\\xa3\\x87\\x83\\xa4\\x1f\\xc8\\xb9\\x15\\xe4\\xab\"\n\"\\xb9\\xba\\xc3\\x1b\\xba\\xa4\\x6a\\x4e\\x7d\\x8a\\x81\\x8a\\x79\\x1f\\x0b\\xf7\\xdf\\xf7\\x4d\\x15\\x6e\\xfb\\x1a\\x05\\x5b\\x26\\x0a\\xf7\\xf1\\x06\\xa8\\xf7\"\n\"\\x1b\\x05\\x8c\\x8c\\x8b\\x92\\x8f\\x1a\\x96\\xea\\x0a\\xba\\xf7\\x6c\\x05\\xce\\x06\\x87\\x77\\x05\\x89\\x85\\x8b\\x89\\x87\\x1a\\x7f\\x94\\x82\\x97\\x9b\\x96\"\n\"\\x96\\x9f\\x8f\\x1e\\x9f\\xe9\\x05\\x8c\\x8f\\x8c\\x90\\x8e\\x1a\\x97\\x82\\x94\\x7f\\x7b\\x81\\x81\\x76\\x86\\x1e\\x86\\x74\\x05\\x48\\x06\\xb5\\xf7\\x56\\x05\"\n\"\\xf7\\x48\\x06\\x75\\x24\\x05\\x89\\x84\\x8b\\x89\\x73\\x0a\\xad\\xf7\\x30\\x05\\xfc\\x45\\x21\\x1d\\xc2\\x06\\xfb\\x7a\\xfc\\x61\\x05\\x69\\x29\\x1d\\xf2\\x23\"\n\"\\x1d\\x7a\\x06\\xce\\xf7\\x1a\\x05\\xf7\\x22\\xbe\\x15\\xfb\\x09\\x06\\xf7\\x1d\\xf7\\xa8\\x05\\xb3\\x06\\x0b\\xf8\\xbf\\xf8\\x6f\\x15\\x88\\x0a\\xfb\\x24\\x20\"\n\"\\x0a\\xb9\\x66\\x0a\\xcd\\x21\\x0a\\x50\\x06\\x62\\x0a\\x08\\x0b\\xf7\\x30\\xf7\\x9e\\x15\\x5c\\xfb\\x6b\\x05\\x6d\\x29\\x1d\\xf7\\x70\\x06\\xf7\\x10\\x88\\xf7\"\n\"\\x1b\\xf7\\x0b\\xa9\\xf7\\x1c\\x96\\xc2\\x18\\x90\\x9f\\x8d\\x9f\\x9c\\x1a\\xf7\\x08\\x3d\\xde\\xfb\\x02\\x1e\\xfb\\x70\\x29\\x1d\\xa6\\x06\\x61\\xfb\\x57\\x05\"\n\"\\x42\\x21\\x1d\\xf7\\x44\\xf7\\x8a\\x15\\xf7\\x43\\x1d\\x62\\x1a\\x7f\\x8a\\x7e\\x88\\x7f\\x1e\\x7b\\x43\\x72\\x24\\xfb\\x00\\x2c\\x32\\x8e\\x19\\xfb\\x23\\x06\"\n\"\\xba\\xf7\\x6b\\x05\\xf7\\x31\\x4b\\x1d\\xfb\\x2f\\x06\\x0e\\xf8\\x51\\xf7\\x9e\\x15\\x5c\\xfb\\x6b\\x05\\x59\\x29\\x1d\\xf7\\x20\\x2a\\x1d\\x64\\x06\\xb1\\x1d\"\n\"\\x0e\\xf8\\x7d\\xf7\\x9e\\x15\\xc0\\x0a\\xdf\\x1d\\x79\\x7c\\xd1\\x1d\\x73\\x86\\x1d\\x9c\\x9b\\x82\\x91\\xca\\x0a\\x0b\\xf7\\x6d\\xf7\\x6f\\x15\\xe8\\xcf\\xe0\"\n\"\\x6e\\xa8\\x50\\xa9\\xfb\\x5b\\x19\\xe6\\x23\\x1d\\x57\\x06\\x6c\\xf7\\x48\\x6e\\xc1\\x39\\xb2\\xf7\\x93\\xf7\\x50\\x18\\x9a\\x23\\x1d\\xfb\\x0b\\x32\\x1d\\xa8\"\n\"\\x06\\xfb\\xc8\\xfb\\x77\\xbc\\xf7\\x77\\x05\\xd1\\x23\\x1d\\xfb\\x3e\\xae\\x0a\\x0b\\xe8\\x1d\\x5a\\x50\\x73\\x6f\\x7d\\x81\\x74\\x7a\\x84\\x89\\x51\\x8a\\x08\"\n\"\\x88\\x06\\xb3\\xf7\\x4d\\x05\\xb7\\x2f\\x0a\\x0b\\xf7\\xaf\\x16\\xf7\\x5a\\x3e\\x1d\\x56\\xba\\x1d\\xf7\\x53\\x06\\x76\\xf7\\x21\\x0a\\x84\\x99\\x9a\\x97\\x96\"\n\"\\x9f\\x8f\\x1e\\x0e\\x99\\x0a\\x78\\x7d\\x25\\x1d\\xf7\\x19\\x2a\\x1d\\x57\\x06\\xf7\\x40\\xf7\\x19\\xf7\\x04\\xfb\\x19\\x05\\x56\\x21\\x1d\\x0b\\x8c\\x90\\x8c\"\n\"\\x91\\x91\\x1a\\x9a\\x82\\x94\\x7d\\x78\\x85\\x82\\x61\\x82\\x1e\\x7b\\x46\\x05\\x85\\x72\\x8b\\x8b\\x88\\x1a\\x7f\\x94\\x83\\x97\\x98\\x92\\x92\\x9d\\x93\\x1e\"\n\"\\x91\\x99\\x93\\x97\\x95\\x97\\x08\\xac\\xa9\\xd0\\xa0\\xdc\\x1b\\xd7\\xb6\\x77\\x68\\x74\\x7b\\x75\\x6d\\x7c\\x1f\\x7a\\x69\\x53\\x83\\x3b\\x1b\\x6e\\x22\\x0a\"\n\"\\xb3\\x06\\xf7\\x13\\xc4\\x79\\x62\\x76\\x7b\\x73\\x6f\\x7a\\x1f\\x75\\x6b\\x5c\\x81\\x4b\\x1b\\x43\\x58\\x96\\xa7\\x4e\\x1f\\x90\\x82\\x86\\x8c\\x85\\x1b\\x7c\"\n\"\\x81\\x80\\x7c\\x0b\\xe0\\xbe\\x15\\x59\\x20\\x1d\\xf7\\xc7\\x06\\xf4\\xf0\\xe4\\xe8\\xbf\\x6d\\xb1\\x4d\\xa4\\x1f\\xd2\\xb0\\xae\\xba\\xc7\\x1a\\xd3\\x4f\\xbd\"\n\"\\xe6\\x1d\\x6d\\x6f\\x75\\xb3\\x0a\\xf8\\x38\\xce\\x0a\\x3c\\x0a\\x6b\\x06\\x34\\xf8\\x94\\x05\\xfb\\x63\\x06\\x73\\x7d\\x80\\x78\\x7d\\x7b\\x1d\\x99\\x82\\x92\"\n\"\\x98\\x1d\\xf7\\x8e\\xbe\\x8b\\x1d\\x0e\\x06\\xce\\xf7\\xd1\\x05\\xae\\x3e\\x1d\\xfb\\x06\\x45\\x0a\\xa6\\x06\\x48\\xfb\\xd1\\x05\\xfb\\x29\\x06\\xcf\\xf7\\xd1\"\n\"\\x05\\xa3\\x23\\x0a\\x20\\x2b\\x1d\\xa8\\x06\\x47\\xfb\\xd1\\x05\\xfb\\x29\\x06\\xcf\\xf7\\xd1\\x05\\xa2\\x6c\\x0a\\xfb\\x03\\x45\\x0a\\xaf\\x06\\x0b\\xf8\\xc9\"\n\"\\x22\\x1d\\xb9\\x06\\xa3\\x98\\x95\\x9e\\x9a\\x81\\x92\\x78\\xbb\\x1d\\x99\\x81\\x93\\x78\\x1f\\x58\\x06\\x0b\\xf7\\xb9\\xbe\\x15\\xd6\\x0a\\x95\\x9f\\x87\\x1d\"\n\"\\x85\\x8a\\x88\\x88\\x1a\\x7f\\x94\\x82\\x98\\x67\\x0a\\xf7\\x8f\\x2a\\x1d\\x0e\\xb7\\x1d\\xf7\\x34\\x0b\\x1e\\xf8\\x3f\\xf7\\x09\\x15\\xb1\\xa2\\xa0\\xad\\xb0\"\n\"\\x1a\\xba\\x67\\xad\\x58\\x49\\x4c\\x52\\x4e\\x73\\x93\\x7a\\x9e\\x7b\\x1e\\x5f\\x71\\x74\\x67\\x62\\x1a\\x59\\xb1\\x68\\xc1\\xd1\\xcd\\xc7\\xcc\\xa5\\x82\\x9e\"\n\"\\x75\\x9d\\x1e\\x66\\xf7\\x1a\\x15\\xab\\xa1\\x78\\x6f\\x67\\x67\\x6b\\x61\\x6b\\x75\\x9d\\xa5\\xaf\\xb1\\x70\\x0a\\x5f\\x9e\\x1d\\xb7\\x1f\\x0b\\xf5\\x0a\\xa1\"\n\"\\x79\\x1f\\xa5\\x75\\xad\\x80\\xd0\\x7e\\xd0\\x80\\x9e\\x85\\x9f\\x7c\\x08\\x9b\\x80\\x96\\x75\\x77\\x1a\\x3b\\x37\\x4a\\x24\\x62\\x62\\x96\\x9c\\x76\\x1e\\x80\"\n\"\\x94\\x70\\xae\\x90\\x1a\\x8e\\xb9\\x05\\x91\\x7f\\x94\\x81\\x7a\\x81\\x81\\x76\\x86\\x1e\\x74\\xfb\\x01\\xf7\\x36\\x1d\\xa0\\x8f\\x1e\\x8f\\x9b\\x0b\\xf7\\x43\"\n\"\\xf7\\x76\\x93\\x1d\\xf7\\x00\\xda\\x47\\xc3\\x2c\\x1f\\xfb\\x84\\x64\\x0a\\xa1\\x9a\\x97\\x9d\\x99\\x82\\x92\\xf7\\x00\\x1d\\xf7\\x1a\\x0a\\x88\\x83\\x82\\x1e\"\n\"\\x4d\\x48\\x54\\x72\\x47\\x7d\\x1d\\x93\\x9c\\x60\\x1d\\x8b\\x8f\\xdc\\x0a\\x0b\\x06\\x36\\x0a\\xbf\\x06\\xa3\\xf7\\x04\\x0a\\x81\\x78\\x7c\\x95\\x84\\x9e\\x1f\"\n\"\\xaf\\x26\\x1d\\xfb\\x94\\x06\\x36\\x0a\\xb7\\x06\\xa2\\xf7\\x04\\x0a\\x80\\x79\\x7d\\x95\\x83\\x9e\\x1f\\xb8\\x26\\x1d\\x67\\x24\\x1d\\x0b\\x15\\x96\\x94\\x91\"\n\"\\x95\\x93\\x1a\\x98\\x82\\x94\\x7d\\x85\\x8b\\x8b\\x81\\x7b\\x1e\\xfb\\x0a\\x2b\\x05\\x7d\\x80\\x86\\x84\\x82\\x1a\\x7e\\x94\\x82\\x99\\x91\\x96\\x90\\x90\\x92\"\n\"\\x1e\\xf7\\x98\\xeb\\x15\\x97\\x94\\x91\\x95\\x93\\x1a\\x98\\x82\\x94\\x7e\\x84\\x85\\x88\\x84\\x81\\x1e\\xfb\\x0b\\x2b\\x05\\x7d\\x80\\x87\\x86\\x81\\x1a\\x7c\"\n\"\\x93\\x83\\x99\\x91\\x96\\x90\\x90\\x92\\x1e\\x0e\\x76\\x0a\\x9f\\x87\\x85\\x9f\\x1f\\x87\\x94\\x8d\\x8b\\x8e\\x1b\\x9a\\x99\\x90\\x1d\\x68\\x92\\x78\\xe2\\x1d\"\n\"\\xf7\\x58\\x06\\x0b\\xf7\\x54\\xf7\\x2a\\x05\\x8f\\x27\\x1d\\xfb\\x02\\x20\\x1d\\xac\\x06\\xfb\\x29\\xfb\\x06\\x2c\\xf7\\x06\\x05\\xad\\x5d\\x1d\\x8e\\x06\\xf7\"\n\"\\x11\\xfb\\x28\\xfb\\x6b\\xfb\\x3d\\x05\\x83\\x24\\x0a\\x0b\\x16\\xf7\\x03\\xf8\\x94\\x05\\xa8\\x23\\x1d\\xfb\\x29\\x06\\x73\\x7d\\x80\\x78\\x7d\\xcf\\x1d\\x0b\"\n\"\\xb8\\x0a\\xfc\\x01\\xfb\\xd8\\x82\\x5f\\x05\\xf8\\x15\\x06\\xa1\\xee\\x05\\x8d\\x94\\x8b\\x8b\\x8f\\x1a\\x96\\xd7\\x0a\\x0b\\x06\\x73\\x6b\\x76\\x61\\x7c\\x1a\"\n\"\\x83\\x92\\x84\\x94\\x92\\x8f\\x8d\\x92\\x91\\x1e\\xad\\xb2\\xa3\\x9f\\xbc\\xa8\\x99\\x94\\x18\\x91\\x8e\\x8f\\x8d\\x8c\\x8c\\x08\\x99\\x93\\x8e\\x8e\\x93\\x1a\"\n\"\\x92\\x87\\x8f\\x78\\x95\\x1e\\x4f\\xad\\x6e\\xa2\\x6c\\xae\\x08\\x98\\x80\\x87\\x8e\\x84\\x1b\\x82\\x83\\x85\\x83\\x7c\\x9b\\x6b\\xa8\\x5f\\x1f\\x0b\\xc7\\x1d\"\n\"\\x0e\\xa4\\x0a\\xf7\\xbd\\xf7\\x92\\xf7\\x53\\x1d\\xf8\\x1c\\x22\\x1d\\xf7\\x1a\\x06\\xa1\\x40\\x1d\\xfb\\xd1\\x06\\x75\\x7c\\x7f\\x79\\x7d\\x2a\\x0a\\xf7\\x17\"\n\"\\x26\\x1d\\xfb\\x1a\\x55\\x0a\\xf7\\xd1\\x06\\xa1\\x9a\\x97\\x9d\\x99\\x82\\x92\\x78\\x1f\\xfb\\x18\\x06\\x0b\\x1f\\x88\\x92\\x88\\x8e\\x83\\x8f\\x08\\x93\\x78\"\n\"\\x69\\x92\\x77\\xe2\\x1d\\xf8\\xa4\\x06\\xa1\\x9a\\x97\\x9d\\x99\\x82\\x92\\x78\\x1f\\x0b\\x8d\\x19\\xfb\\x08\\x24\\x0a\\x78\\x7c\\x94\\x85\\x9f\\x1f\\xf7\\x06\"\n\"\\x06\\xe0\\x86\\xf4\\xdd\\x99\\xdd\\xe0\\xf8\\x1b\\x18\\xbd\\x2e\\x0a\\x28\\x06\\xfb\\x3d\\x66\\x15\\xd8\\xc0\\x58\\x40\\x27\\x29\\x2c\\x25\\x3a\\x57\\xbd\\xd7\"\n\"\\xf0\\xec\\xe9\\xf5\\x1f\\x0b\\xc5\\x0a\\xf7\\xbc\\x9c\\x1d\\xae\\xac\\x9f\\xf7\\x33\\x1d\\x0b\\xf7\\x15\\x1d\\xa8\\xad\\x95\\x90\\x9d\\x1b\\x96\\x0b\\xf8\\x04\"\n\"\\x15\\x37\\xfc\\x19\\x05\\x4a\\x7b\\x54\\x5e\\x4b\\x1b\\xfb\\x14\\x29\\x1d\\xf7\\x15\\x06\\xe5\\x89\\xe0\\xd1\\x9d\\xe6\\xeb\\xf8\\x4e\\x18\\xfb\\xb4\\x33\\x1d\"\n\"\\x0b\\xab\\x99\\x96\\x95\\x9a\\x1a\\x97\\x82\\x94\\x7f\\x85\\x88\\x8a\\x86\\x81\\x1e\\x75\\x61\\x40\\x7a\\x53\\x1b\\x54\\x68\\xa2\\xaf\\x91\\x8c\\x90\\x8c\\x91\"\n\"\\x1f\\xc3\\xf7\\x95\\x05\\xf7\\x6b\\x27\\x1d\\x0b\\xa3\\xf7\\x03\\x05\\x8d\\x94\\x8b\\x8b\\x8d\\x28\\x0a\\x7a\\x81\\x81\\x77\\x86\\x1e\\x73\\xfb\\x05\\x05\\x45\"\n\"\\x33\\x1d\\xcf\\x06\\x53\\xfb\\x95\\x05\\x89\\x81\\x8a\\x83\\x80\\x1a\\x0b\\x76\\x1e\\x80\\x94\\x70\\xae\\x90\\x1a\\x8e\\xb9\\x05\\x91\\x7f\\x94\\x81\\x7a\\x81\"\n\"\\x81\\x76\\x86\\x1e\\x74\\xfb\\x01\\xf7\\x36\\x1d\\xa0\\x8f\\x1e\\x8f\\x9b\\x05\\x62\\xab\\x0b\\xcd\\x0a\\xe0\\xda\\x0a\\xf8\\xcb\\xf7\\x57\\x15\\x92\\xb0\\x8d\"\n\"\\x99\\x9c\\x1a\\xee\\xf7\\x0f\\x0a\\x0b\\x4d\\x1d\\xf7\\x55\\x57\\x0a\\x30\\x06\\xbc\\xf7\\x75\\x05\\x51\\xad\\xbc\\x71\\xd4\\x1b\\xf7\\x24\\xf7\\x15\\xf7\\x0c\"\n\"\\xf7\\x1a\\xf1\\x0b\\xf9\\x07\\xf8\\x3e\\x15\\x9b\\x94\\x90\\x91\\x97\\x1a\\x95\\x83\\x93\\x81\\x85\\x85\\x89\\x86\\x82\\x1e\\xfc\\x8f\\xfb\\xad\\x05\\x7c\\x83\"\n\"\\x85\\x83\\x80\\x1a\\x80\\x93\\x83\\x95\\x91\\x8d\\x8c\\x92\\x98\\x1e\\x0e\\x8e\\x9c\\x1f\\xb1\\xf7\\x43\\x05\\xb9\\x4c\\x1d\\xfb\\x1e\\x51\\x0a\\xb1\\x06\\x67\"\n\"\\xfb\\x3d\\x05\\x86\\x74\\x89\\x7c\\x7d\\x1a\\x0b\\xf8\\xf5\\x15\\x69\\x6a\\x35\\x0a\\xa4\\x78\\x9e\\x70\\x1f\\xf7\\x71\\x16\\x69\\x6a\\x35\\x0a\\xa4\\x78\\x9e\"\n\"\\x70\\x1f\\x0e\\xe4\\x1d\\x35\\x1d\\x47\\x06\\x0b\\x15\\x69\\x6a\\x35\\x0a\\xa5\\x78\\x9d\\x70\\x1f\\xf7\\x72\\x16\\x69\\x6a\\x35\\x0a\\xa5\\x78\\x9d\\x70\\x1f\"\n\"\\x0e\\xba\\x0a\\x8f\\x47\\x0a\\xf7\\x51\\x1d\\xcc\\xd2\\xcb\\x0a\\x0b\\xf8\\x1d\\xf8\\x45\\x15\\xfb\\x29\\xfb\\x1e\\xfb\\x15\\xfb\\x20\\x22\\xda\\x40\\xf7\\x01\"\n\"\\xf7\\x2c\\xf7\\x1d\\xf7\\x14\\xf7\\x21\\xf5\\x3d\\xd5\\xfb\\x04\\x1f\\x82\\x58\\x15\\xe1\\xc7\\x53\\x0b\\x1f\\x72\\x6c\\x62\\x7f\\x5a\\x1b\\xfb\\x5a\\xfb\\x9e\"\n\"\\x15\\xba\\xf7\\x6b\\x05\\xf7\\x25\\x06\\xc7\\xa9\\x85\\x79\\xa7\\x1f\\xa2\\x7b\\x9b\\x71\\x74\\x1a\\x49\\x45\\x4f\\x3e\\x1e\\x0e\\xf9\\x11\\xf8\\xef\\x15\\xf7\"\n\"\\x42\\x1d\\x5e\\xfb\\x67\\x05\\xca\\x67\\x59\\xa8\\x43\\x1b\\xfb\\x22\\xfb\\x18\\xfb\\x18\\xfb\\x23\\x0b\\x91\\x77\\x65\\x1d\\x0b\\x06\\x4d\\x6c\\x71\\x6e\\x62\"\n\"\\x1a\\x6a\\xa5\\x79\\xb9\\xb7\\xed\\x0a\\x88\\x8a\\x71\\x1b\\x7a\\x82\\x91\\x98\\x0b\\x15\\xfb\\x33\\xfb\\x13\\xfb\\x10\\xfb\\x2f\\xfb\\x32\\xf7\\x11\\xfb\\x12\"\n\"\\xf7\\x31\\xf7\\x2f\\xf7\\x12\\xf7\\x12\\xf7\\x30\\xf7\\x2d\\xfb\\x12\\xf7\\x14\\xfb\\x2b\\x1f\\x0b\\xde\\x0a\\x94\\x82\\x98\\xf7\\x0d\\x0a\\x0b\\x8a\\x85\\x1e\"\n\"\\x57\\xfb\\x82\\x05\\x6e\\x32\\x1d\\xf7\\x00\\x23\\x1d\\x70\\x06\\x0b\\x15\\x9c\\x97\\x8e\\x8f\\x97\\x28\\x0a\\x83\\x86\\x89\\x83\\x80\\xf7\\x2d\\x1d\\x0b\\xdf\"\n\"\\x0a\\xf7\\x72\\x16\\x69\\x67\\x1d\\x0b\\x3a\\x1d\\xfb\\x18\\x20\\x0a\\xad\\x06\\x75\\x23\\x05\\x86\\x74\\x89\\x7f\\x7f\\x1a\\x0b\\xf7\\x09\\x0a\\x77\\xf7\\x25\"\n\"\\x1d\\xd6\\xd4\\xc9\\xcb\\x0b\\x8c\\x1d\\xf7\\x72\\xf7\\x1a\\x1d\\xcc\\x0a\\x35\\xdf\\x05\\x91\\x0b\\x5c\\xfb\\x6b\\x05\\x59\\x06\\x74\\x86\\x1d\\x9d\\x35\\x1d\"\n\"\\x64\\x06\\x0b\\xb4\\xfb\\x1b\\x18\\x94\\x6f\\x8e\\x89\\xa9\\x8a\\x08\\x0b\\x82\\x94\\x7e\\x7b\\x80\\x81\\x77\\x87\\x1e\\x6a\\xfb\\x2c\\x05\\xfb\\x10\\x21\\x1d\"\n\"\\xf7\\x0e\\x06\\x0b\\x8e\\x91\\xc8\\x0a\\xf8\\xc0\\xf7\\x91\\x15\\xa2\\x9a\\x96\\x9e\\x3c\\x0a\\xfc\\x26\\x4a\\x1d\\x9f\\x1f\\x0e\\x2b\\x1d\\xba\\x26\\x1d\\x59\"\n\"\\x24\\x1d\\x0b\\x15\\xfb\\x11\\xfb\\x8c\\x05\\x88\\x84\\x89\\x85\\x85\\x1a\\x7b\\x97\\x7f\\x9c\\x9a\\x94\\x91\\x9f\\x9b\\x1e\\xf7\\x64\\xf7\\xa1\\x05\\x0b\\xf7\"\n\"\\xcf\\x15\\xe4\\xf7\\x5f\\x05\\x98\\xa9\\x8d\\x92\\x99\\x1a\\xa1\\x7a\\x9c\\x73\\xf7\\x60\\x1d\\x0b\\x94\\x1e\\xf7\\x0f\\xdf\\xe1\\xda\\x0a\\x06\\x74\\x7d\\x81\"\n\"\\x79\\x7c\\x95\\x83\\x0b\\x77\\x1f\\x5c\\x06\\xba\\xf7\\x6b\\x05\\x0b\\xc0\\x65\\xb0\\x56\\x1f\\x84\\x64\\x15\\xad\\xa3\\x73\\x69\\x5d\\x5f\\x5f\\x5d\\x67\\x73\"\n\"\\xa2\\xae\\xba\\xb7\\xb6\\xbb\\x1f\\x0b\\x78\\x0a\\x84\\x88\\x85\\x82\\x1e\\xfb\\x0f\\x37\\x0b\\xf7\\x24\\x1d\\x8e\\x91\\x95\\x1e\\xf7\\x0f\\xdf\\x0b\\xf7\\x4c\"\n\"\\x15\\xa2\\xfb\\x19\\x05\\x45\\x21\\x1d\\xf7\\x30\\x2f\\x1d\\x0b\\xf7\\x84\\xf8\\x99\\x15\\x9e\\xe0\\x05\\x25\\x2b\\x1d\\xba\\x06\\x83\\x69\\x05\\x0b\\x15\\xa1\"\n\"\\x96\\x94\\x9c\\x9c\\x80\\x93\\x75\\x1f\\xfc\\xce\\x58\\x0a\\x0e\\x4e\\x1d\\x91\\x8d\\x92\\x95\\x1e\\xf7\\x0e\\xdf\\xe1\\x38\\x05\\x84\\x92\\x0b\\xf2\\xd2\\xca\"\n\"\\xa8\\xc8\\xc8\\x1f\\x7a\\x41\\x05\\xf1\\x79\\x0a\\x5b\\x06\\x0b\\xf7\\x2d\\x1d\\x8f\\x47\\x0a\\x20\\x1d\\xf7\\x18\\x06\\xa2\\x34\\x1d\\x0b\\x4a\\xc5\\xe0\\x90\"\n\"\\x8b\\x8f\\x8c\\x93\\x1f\\xf8\\x09\\xbe\\x15\\xfb\\xfe\\x06\\xdc\\xae\\xe0\\xc2\\xe7\\x1b\\x0b\\x36\\x0a\\xf7\\x2f\\x06\\x7d\\x4a\\x8a\\x82\\x05\\x86\\x07\\x82\"\n\"\\x8a\\x96\\x81\\x96\\x1b\\x9c\\x95\\x0b\\x82\\x94\\x7e\\x7a\\x81\\x81\\x76\\x86\\x1e\\x80\\x59\\x05\\xfb\\x97\\x06\\xf8\\x03\\xf7\\xd8\\x05\\x0b\\x15\\xba\\xf7\"\n\"\\x6b\\x05\\xf7\\x1a\\x06\\xf7\\x07\\xbb\\x70\\x4a\\x43\\x4c\\x58\\x31\\x1f\\x0e\\x16\\xf7\\x15\\x0a\\xa7\\xa0\\x51\\x1d\\x6e\\x1d\\x9b\\x92\\x59\\x0a\\xfb\\x0e\"\n\"\\x32\\x1d\\xcf\\x06\\x55\\xfb\\x8b\\x05\\x51\\x0b\\x1a\\x97\\x82\\x93\\x7e\\x7a\\x81\\x81\\x77\\x86\\x1e\\x0b\\x6f\\x71\\x72\\x70\\x76\\x9b\\x7c\\xa0\\xa8\\xa4\"\n\"\\xa3\\x0b\\xf8\\xcd\\xf8\\x37\\x15\\xfb\\xfd\\x06\\x76\\x29\\x05\\x8a\\x86\\x8a\\x86\\x88\\x1a\\x80\\x0b\\x15\\xe4\\x0a\\x0b\\x15\\x6a\\x6a\\x6b\\x6b\\x72\\x9f\"\n\"\\x77\\xa3\\xad\\xac\\xaa\\xac\\xa5\\x78\\x9e\\x71\\x1f\\x0b\\xf7\\x01\\x0a\\xf7\\x22\\x05\\x0e\\x06\\x73\\x7d\\x81\\x78\\x7d\\x95\\x83\\x0b\\x1f\\x9e\\x6e\\x7f\"\n\"\\x8f\\x75\\x1b\\x71\\x0b\\x69\\xf4\\x0a\\x70\\x1f\\x0b\\x05\\x89\\x81\\x8b\\x8b\\x88\\x1a\\x7e\\x93\\x84\\x0b\\x06\\xa2\\xf7\\x08\\x0a\\x0b\\x84\\x1b\\x7b\\x7c\"\n\"\\x7d\\x7c\\x85\\x8e\\x85\\x50\\x1d\\x83\\x0b\\x96\\x1a\\x98\\x82\\x94\\x7f\\x85\\x85\\x89\\x87\\x86\\x1e\\x60\\x53\\x73\\x7f\\x0b\\xf7\\x4b\\x1d\\x20\\x34\\x52\"\n\"\\xbe\\x0b\\x82\\x94\\x7f\\x79\\x82\\x82\\x76\\x87\\x1e\\x78\\x35\\x05\\xfb\\x5c\\x06\\x0b\\x06\\x7b\\x8c\\x7f\\x81\\x7c\\x1a\\x88\\x07\\x7c\\x97\\x81\\x9b\\x8c\"\n\"\\x1e\\x0b\\x32\\x4f\\x3f\\x74\\x98\\x72\\x9f\\x7d\\x1f\\xa4\\x79\\xa6\\x84\\xd4\\x84\\x0b\\xb7\\xa1\\xa1\\x94\\x83\\x93\\x82\\x87\\x87\\x89\\x89\\x87\\x1e\\x7b\"\n\"\\x74\\x0b\\x88\\x92\\x1b\\x9c\\xf7\\x16\\x0a\\x7f\\x1a\\x7f\\x94\\x82\\x98\\x91\\x0b\\x80\\x79\\x7c\\x94\\x84\\x9e\\x1f\\x0b\\x05\\x8d\\x94\\x8b\\x8b\\x8e\\x1a\"\n\"\\x97\\x82\\x94\\x7e\\x7a\\x81\\x81\\x0b\\xf7\\x12\\x0a\\x94\\x1e\\x9c\\x0b\\x95\\x1a\\x98\\x82\\x93\\x7f\\x84\\x84\\x88\\x84\\x80\\x1e\\xfb\\x1a\\x0b\\x6b\\x42\"\n\"\\x1d\\xae\\xab\\xaa\\xac\\xa5\\x78\\x9d\\x0b\\xad\\x6b\\x60\\x9c\\x53\\x1b\\xfb\\x0d\\x22\\x35\\x28\\x6c\\x98\\x6d\\x0b\\xf7\\x4d\\x1d\\x0e\\x81\\x80\\x1a\\x7f\"\n\"\\x94\\x83\\x98\\x92\\x93\\x8e\\x91\\x92\\x1e\\x0b\\x88\\x1a\\x7e\\x93\\x84\\x99\\x9b\\x96\\x95\\x9f\\x90\\x1e\\xad\\x0b\\x8a\\x7f\\x05\\x7f\\x94\\x82\\x98\\x9b\"\n\"\\x28\\x1d\\x0b\\x15\\x95\\x96\\x8e\\x91\\x93\\x1a\\x95\\x80\\x95\\x80\\x81\\x83\\x0b\\x99\\x95\\x9d\\x9a\\x81\\x93\\x78\\x1f\\xfb\\x20\\x06\\x73\\x7d\\x0b\\xa7\"\n\"\\xa0\\x7c\\x9a\\x75\\x1f\\xf7\\x62\\x16\\x6f\\x71\\x72\\x70\\x0b\\x4f\\xc2\\xde\\xf7\\x00\\xf7\\x00\\xf0\\xf7\\x09\\x1f\\x0e\\x95\\x91\\x93\\x94\\x1a\\x98\\x82\"\n\"\\x94\\x0b\\x99\\x95\\x9e\\x9a\\x81\\x92\\x78\\x1f\\x0b\\x73\\x6b\\x1a\\x61\\x5b\\x64\\x58\\x6d\\x0b\\xf7\\x13\\x0a\\x77\\x0b\\x15\\x93\\x83\\x86\\x8e\\x84\\x1b\"\n\"\\x7a\\x7d\\x7d\\x7b\\x85\\x0b\\x93\\x6a\\x1b\\x68\\x71\\x7c\\x63\\x68\\x1f\\x75\\x73\\x83\\x0b\\x9b\\x96\\x95\\x9f\\x8f\\x1e\\x96\\xbd\\x05\\xf7\\x7d\\x06\\x0b\"\n\"\\xf8\\x68\\xf7\\x5e\\x1d\\x0b\\x3b\\xd2\\xfb\\x04\\xfb\\x2c\\xfb\\x19\\xfb\\x0e\\xfb\\x1f\\x0b\\x92\\x92\\x8e\\x92\\x96\\x1e\\x0e\\x9a\\x99\\x9b\\x90\\x8b\\x8b\"\n\"\\x0b\\x49\\x69\\x70\\x82\\x92\\x84\\x95\\x92\\x8f\\x8d\\x93\\x0b\\x8b\\x8b\\x8e\\x1a\\x97\\x82\\x94\\x7e\\x7b\\x80\\x80\\x0b\\xf8\\x29\\xf8\\x05\\x15\\xf7\\x10\"\n\"\\x06\\xa2\\x9a\\x96\\x0b\\x6f\\x71\\x72\\x70\\x76\\x9a\\x7c\\xa1\\xa8\\xa4\\xa3\\x0b\\x99\\x99\\x9b\\x90\\x8b\\x8b\\x81\\x98\\x1f\\x0e\\x81\\x78\\x7d\\x95\\x83\"\n\"\\x9d\\x1f\\x0b\\x82\\x94\\x7e\\x7a\\x81\\x81\\x76\\x0b\\xc2\\xf7\\x93\\x05\\x8d\\x93\\x8c\\x0b\\x1a\\x96\\x82\\x93\\x7f\\x81\\x86\\x0b\\x1a\\x80\\x95\\x82\\x97\"\n\"\\x9b\\x96\\x0b\\x06\\xa0\\x9b\\x98\\x9b\\x9b\\x83\\x91\\x76\\x1f\\x0b\\x06\\xa2\\x9a\\x96\\x9d\\x9a\\x82\\x91\\x77\\x1f\\x0b\\x06\\xa3\\x99\\x96\\x9e\\x9a\\x83\"\n\"\\x91\\x76\\x1f\\x0b\\xc7\\x53\\x3b\\xfb\\x01\\xfb\\x00\\x25\\xfb\\x06\\x0b\\x97\\x82\\x93\\x7e\\x7b\\x80\\x81\\x77\\x87\\x1e\\x0b\\x33\\x05\\x8a\\x85\\x8a\\x87\"\n\"\\x87\\x1a\\x7f\\x93\\x0b\\x99\\x94\\x9d\\x9a\\x7f\\x94\\x76\\x1f\\x0e\\xf1\\xe8\\xf7\\x03\\x1f\\x0e\", 52468\n};\n"
  },
  {
    "path": "src/fonts/NimbusMonoPS-Regular.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusMonoPS_Regular_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x15\\x4e\\x69\\x6d\\x62\\x75\\x73\\x4d\\x6f\\x6e\\x6f\\x50\\x53\\x2d\\x52\\x65\\x67\\x75\\x6c\\x61\\x72\\x00\\x01\\x01\"\n\"\\x01\\x34\\xf9\\xbc\\x00\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xc0\\x03\\xf8\\x18\\x04\\x8c\\x0c\\x01\\x30\\x0c\\x03\\xbe\\x0c\\x04\\x6c\\xfb\"\n\"\\xd1\\xf9\\x3f\\xfa\\x38\\x05\\x1c\\x2b\\xef\\x0f\\x1c\\x2c\\x02\\x11\\xbb\\x1d\\x00\\x00\\xa1\\xbb\\x12\\x01\\xa6\\x02\\x00\\x01\\x00\\x08\\x00\\x0e\\x00\\x13\"\n\"\\x00\\x1d\\x00\\x24\\x00\\x2b\\x00\\x35\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x74\\x00\\x7a\\x00\\x84\"\n\"\\x00\\x8b\\x00\\x8e\\x00\\x95\\x00\\x9c\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\\x00\\xcd\\x00\\xd9\\x00\\xe3\\x00\\xe7\\x00\\xf2\\x00\\xf4\"\n\"\\x00\\xfa\\x01\\x04\\x01\\x0b\\x01\\x12\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\\x01\\x4d\\x01\\x53\\x01\\x59\\x01\\x5f\\x01\\x6b\\x01\\x6f\"\n\"\\x01\\x71\\x01\\x77\\x01\\x7d\\x01\\x89\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\\x01\\xc2\\x01\\xcd\\x01\\xd0\\x01\\xd2\\x01\\xd5\\x01\\xdb\"\n\"\\x01\\xe1\\x01\\xed\\x01\\xf0\\x01\\xf6\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\\x02\\x27\\x02\\x33\\x02\\x38\\x02\\x3e\\x02\\x4b\\x02\\x52\"\n\"\\x02\\x59\\x02\\x60\\x02\\x6f\\x02\\x7b\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\\x02\\xa8\\x02\\xb3\\x02\\xb9\\x02\\xbf\\x02\\xc9\\x02\\xcd\"\n\"\\x02\\xd3\\x02\\xda\\x02\\xe3\\x02\\xec\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\\x03\\x2b\\x03\\x34\\x03\\x3d\\x03\\x46\\x03\\x4f\\x03\\x58\"\n\"\\x03\\x61\\x03\\x6a\\x03\\x73\\x03\\x7c\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\\x03\\xbb\\x03\\xc4\\x03\\xcd\\x03\\xd6\\x03\\xdf\\x03\\xe8\"\n\"\\x03\\xf1\\x03\\xfa\\x04\\x03\\x04\\x0c\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\\x04\\x4b\\x04\\x54\\x04\\x5d\\x04\\x66\\x04\\x6f\\x04\\x78\"\n\"\\x04\\x81\\x04\\x8a\\x04\\x93\\x04\\x9c\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\\xed\\x04\\xf6\\x04\\xff\\x05\\x08\"\n\"\\x05\\x11\\x05\\x1a\\x05\\x23\\x05\\x2c\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\\x05\\x6b\\x05\\x74\\x05\\x7d\\x05\\x86\\x05\\x8f\\x05\\x98\"\n\"\\x05\\xa1\\x05\\xaa\\x05\\xb3\\x05\\xbc\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\\x05\\xfb\\x06\\x04\\x06\\x0d\\x06\\x16\\x06\\x1f\\x06\\x28\"\n\"\\x06\\x31\\x06\\x3a\\x06\\x43\\x06\\x4c\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\\x06\\x85\\x06\\x90\\x06\\x9a\\x06\\xa3\\x06\\xac\\x06\\xb5\"\n\"\\x06\\xbf\\x06\\xc6\\x06\\xcf\\x06\\xdb\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\\x07\\x11\\x07\\x15\\x07\\x1b\\x07\\x21\\x07\\x26\\x07\\x2d\"\n\"\\x07\\x3a\\x07\\x40\\x07\\x46\\x07\\x50\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\\x07\\x86\\x07\\x8f\\x07\\x92\\x07\\x9a\\x07\\xa3\\x07\\xae\"\n\"\\x07\\xb4\\x07\\xb9\\x07\\xbe\\x07\\xc4\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\\x08\\x05\\x08\\x0a\\x08\\x10\\x08\\x12\\x08\\x19\\x08\\x21\"\n\"\\x08\\x29\\x08\\x33\\x08\\x3d\\x08\\x49\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\\x08\\x8c\\x08\\x97\\x08\\x9c\\x08\\xa8\\x08\\xb4\\x08\\xba\"\n\"\\x08\\xc0\\x08\\xc6\\x08\\xd2\\x08\\xd6\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\\x09\\x0b\\x09\\x11\\x09\\x1c\\x09\\x22\\x09\\x2e\\x09\\x38\"\n\"\\x09\\x40\\x09\\x42\\x09\\x48\\x09\\x55\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\\x09\\x93\\x09\\x9e\\x09\\xa4\\x09\\xa7\\x09\\xa9\\x09\\xb0\"\n\"\\x09\\xbc\\x09\\xca\\x09\\xcd\\x09\\xda\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\\x0a\\x0f\\x0a\\x17\\x0a\\x22\\x0a\\x2e\\x0a\\x34\\x0a\\x39\"\n\"\\x0a\\x42\\x0a\\x47\\x0a\\x50\\x0a\\x53\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\\x0a\\x7c\\x0a\\x89\\x0a\\x90\\x0a\\x9d\\x0a\\xa4\\x0a\\xab\"\n\"\\x0a\\xb2\\x0a\\xb9\\x0a\\xc0\\x0a\\xc7\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\\x0a\\xf8\\x0a\\xff\\x0b\\x06\\x0b\\x0d\\x0b\\x14\\x0b\\x1b\"\n\"\\x0b\\x22\\x0b\\x29\\x0b\\x30\\x0b\\x37\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\\x0b\\x68\\x0b\\x6f\\x0b\\x76\\x0b\\x7d\\x0b\\x84\\x0b\\x8b\"\n\"\\x0b\\x92\\x0b\\x99\\x0b\\xa0\\x0b\\xa7\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\\x0b\\xd8\\x0b\\xdf\\x0b\\xe6\\x0b\\xed\\x0b\\xf4\\x0b\\xfb\"\n\"\\x0c\\x02\\x0c\\x09\\x0c\\x10\\x0c\\x17\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\\x0c\\x48\\x0c\\x4d\\x0c\\x56\\x0c\\x5d\\x0c\\x64\\x0c\\x73\"\n\"\\x0c\\x87\\x0c\\x93\\x0c\\x98\\x0c\\x9e\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\\x0c\\xd1\\x0c\\xd7\\x0c\\xe1\\x0c\\xe5\\x0c\\xe9\\x0d\\x1f\"\n\"\\x0d\\x5f\\x0d\\x75\\x0d\\x83\\x41\\x45\\x61\\x63\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\\x6c\\x70\\x68\\x61\\x41\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\"\n\"\\x6f\\x73\\x41\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x41\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x42\\x65\\x74\\x61\\x43\\x61\"\n\"\\x63\\x75\\x74\\x65\\x43\\x63\\x61\\x72\\x6f\\x6e\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x43\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x43\"\n\"\\x68\\x69\\x44\\x63\\x61\\x72\\x6f\\x6e\\x44\\x63\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\\x62\\x72\\x65\\x76\\x65\\x45\\x63\\x61\\x72\\x6f\\x6e\\x45\"\n\"\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x45\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x45\\x70\\x73\\x69\\x6c\\x6f\"\n\"\\x6e\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x75\\x72\\x6f\\x47\\x61\\x6d\\x6d\"\n\"\\x61\\x47\\x62\\x72\\x65\\x76\\x65\\x47\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x47\\x64\"\n\"\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x48\\x62\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x49\\x4a\\x49\\x62\\x72\\x65\\x76\\x65\\x49\"\n\"\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x49\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x49\\x6f\\x74\\x61\\x49\\x6f\\x74\\x61\\x64\"\n\"\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x49\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\\x64\\x65\\x4a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\"\n\"\\x78\\x4b\\x61\\x70\\x70\\x61\\x4b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\\x63\\x75\\x74\\x65\\x4c\\x61\\x6d\\x62\\x64\\x61\\x4c\\x63\"\n\"\\x61\\x72\\x6f\\x6e\\x4c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\\x4d\\x75\\x4e\\x61\\x63\\x75\\x74\\x65\\x4e\\x63\\x61\\x72\"\n\"\\x6f\\x6e\\x4e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\\x76\\x65\\x4f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\"\n\"\\x61\\x75\\x74\\x4f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x69\\x63\\x72\"\n\"\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\\x69\\x50\\x69\\x50\\x73\\x69\\x52\\x61\\x63\\x75\\x74\\x65\"\n\"\\x52\\x63\\x61\\x72\\x6f\\x6e\\x52\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\\x6f\\x53\\x61\\x63\\x75\\x74\\x65\\x53\\x63\\x65\\x64\\x69\"\n\"\\x6c\\x6c\\x61\\x53\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x53\\x69\\x67\\x6d\\x61\\x54\"\n\"\\x61\\x75\\x54\\x62\\x61\\x72\\x54\\x63\\x61\\x72\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x54\\x68\\x65\\x74\\x61\\x55\\x62\\x72\"\n\"\\x65\\x76\\x65\\x55\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x55\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x55\\x70\"\n\"\\x73\\x69\\x6c\\x6f\\x6e\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\"\n\"\\x55\\x72\\x69\\x6e\\x67\\x55\\x74\\x69\\x6c\\x64\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x57\\x64\\x69\\x65\"\n\"\\x72\\x65\\x73\\x69\\x73\\x57\\x67\\x72\\x61\\x76\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x59\\x67\\x72\\x61\\x76\\x65\\x5a\\x61\"\n\"\\x63\\x75\\x74\\x65\\x5a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\\x72\\x65\\x76\\x65\\x61\\x65\\x61\\x63\\x75\\x74\\x65\\x61\"\n\"\\x66\\x69\\x69\\x30\\x30\\x32\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x38\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x31\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x32\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x32\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x32\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x39\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x33\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\"\n\"\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x36\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x33\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x30\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x33\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x34\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x37\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x30\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x35\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x34\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x35\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x35\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x31\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x36\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\"\n\"\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x30\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x37\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x34\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x37\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x37\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x31\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x34\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x38\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x38\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x38\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x39\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x35\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x39\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\"\n\"\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x32\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x31\\x30\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x36\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x39\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x31\\x31\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x38\\x34\\x36\\x61\"\n\"\\x66\\x69\\x69\\x36\\x31\\x32\\x34\\x38\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\\x69\\x36\\x31\\x33\\x35\\x32\\x61\\x6c\\x70\\x68\\x61\\x61\"\n\"\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x61\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\\x61\\x6e\\x67\\x6c\\x65\\x72\\x69\"\n\"\\x67\\x68\\x74\\x61\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x61\"\n\"\\x72\\x72\\x6f\\x77\\x62\\x6f\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\\x77\\x72\"\n\"\\x69\\x67\\x68\\x74\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x62\\x73\\x65\"\n\"\\x62\\x65\\x74\\x61\\x63\\x61\\x63\\x75\\x74\\x65\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x63\\x64\\x6f\\x74\\x61\"\n\"\\x63\\x63\\x65\\x6e\\x74\\x63\\x68\\x69\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\\x63\\x6c\\x75\\x62\\x64\\x63\\x61\\x72\\x6f\\x6e\"\n\"\\x64\\x63\\x72\\x6f\\x61\\x74\\x64\\x65\\x6c\\x74\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x65\"\n\"\\x62\\x72\\x65\\x76\\x65\\x65\\x63\\x61\\x72\\x6f\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x65\\x6d\\x61\\x63\"\n\"\\x72\\x6f\\x6e\\x65\\x6e\\x67\\x65\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\"\n\"\\x65\\x71\\x75\\x69\\x76\\x61\\x6c\\x65\\x6e\\x63\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\\x65\\x74\\x61\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x65\"\n\"\\x78\\x63\\x6c\\x61\\x6d\\x64\\x62\\x6c\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\\x65\\x6d\\x61\\x6c\\x65\\x66\\x72\\x61\\x6e\\x63\\x67\\x61\"\n\"\\x6d\\x6d\\x61\\x67\\x62\\x72\\x65\\x76\\x65\\x67\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x67\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\"\n\"\\x67\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x68\\x62\\x61\\x72\\x68\\x63\\x69\\x72\\x63\\x75\"\n\"\\x6d\\x66\\x6c\\x65\\x78\\x68\\x65\\x61\\x72\\x74\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\\x65\\x69\\x6a\\x69\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x69\\x6e\"\n\"\\x66\\x69\\x6e\\x69\\x74\\x79\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\"\n\"\\x74\\x70\\x69\\x6e\\x74\\x65\\x72\\x73\\x65\\x63\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x69\\x6f\\x67\\x6f\\x6e\\x65\"\n\"\\x6b\\x69\\x6f\\x74\\x61\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\"\n\"\\x6f\\x73\\x69\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x6b\\x61\\x70\\x70\"\n\"\\x61\\x6b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\\x61\\x6e\\x64\\x69\\x63\\x6c\\x61\\x63\\x75\\x74\\x65\\x6c\"\n\"\\x61\\x6d\\x62\\x64\\x61\\x6c\\x63\\x61\\x72\\x6f\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6c\\x64\\x6f\\x74\\x6c\\x65\\x73\\x73\\x65\"\n\"\\x71\\x75\\x61\\x6c\\x6c\\x69\\x72\\x61\\x6c\\x6f\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\"\n\"\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\\x74\\x65\\x6e\\x61\\x70\\x6f\\x73\\x74\\x72\\x6f\\x70\\x68\"\n\"\\x65\\x6e\\x63\\x61\\x72\\x6f\\x6e\\x6e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x6e\\x6f\\x74\"\n\"\\x65\\x71\\x75\\x61\\x6c\\x6e\\x75\\x6f\\x62\\x72\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x6f\\x6d\\x61\\x63\\x72\\x6f\"\n\"\\x6e\\x6f\\x6d\\x65\\x67\\x61\\x6f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\"\n\"\\x6e\\x6f\\x73\\x6f\\x72\\x74\\x68\\x6f\\x67\\x6f\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x70\\x61\\x72\\x74\\x69\\x61\\x6c\\x64\"\n\"\\x69\\x66\\x66\\x70\\x65\\x73\\x65\\x74\\x61\\x70\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x62\\x73\\x65\"\n\"\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\\x6f\\x74\\x65\\x72\\x65\\x76\\x65\\x72\\x73\\x65\\x64\\x72\"\n\"\\x61\\x63\\x75\\x74\\x65\\x72\\x61\\x64\\x69\\x63\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x72\\x65\"\n\"\\x76\\x6c\\x6f\\x67\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\\x73\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x73\\x63\\x69\\x72\"\n\"\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x73\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\\x65\\x63\\x6f\\x6e\\x64\\x73\\x69\\x67\\x6d\\x61\\x73\\x6d\"\n\"\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x73\\x70\\x61\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x73\\x75\\x6e\\x74\\x61\\x75\\x74\\x62\\x61\\x72\\x74\"\n\"\\x63\\x61\\x72\\x6f\\x6e\\x74\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x62\\x72\\x65\\x76\"\n\"\\x65\\x75\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x75\\x6e\\x64\\x65\\x72\\x73\\x63\\x6f\\x72\\x65\\x64\"\n\"\\x62\\x6c\\x75\\x6e\\x69\\x30\\x30\\x41\\x30\\x75\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\\x32\\x31\\x41\\x75\\x6e\\x69\\x30\\x32\\x31\\x42\\x75\\x6e\"\n\"\\x69\\x30\\x32\\x43\\x39\\x75\\x6e\\x69\\x30\\x33\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\\x6e\\x69\\x30\\x33\\x41\\x39\\x75\\x6e\\x69\\x30\\x33\\x42\"\n\"\\x43\\x75\\x6e\\x69\\x30\\x33\\x43\\x32\\x75\\x6e\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\\x30\\x44\\x75\\x6e\\x69\\x30\\x34\\x35\\x30\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x35\\x44\\x75\\x6e\\x69\\x30\\x34\\x39\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\\x69\\x30\\x34\\x39\\x36\\x75\\x6e\\x69\\x30\\x34\\x39\\x37\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x39\\x38\\x75\\x6e\\x69\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\\x41\\x75\\x6e\\x69\\x30\\x34\\x39\\x42\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x39\\x43\\x75\\x6e\\x69\\x30\\x34\\x39\\x44\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\\x30\\x34\\x41\\x31\\x75\\x6e\\x69\\x30\\x34\\x41\\x32\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x41\\x33\\x75\\x6e\\x69\\x30\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\\x75\\x6e\\x69\\x30\\x34\\x41\\x45\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x41\\x46\\x75\\x6e\\x69\\x30\\x34\\x42\\x30\\x75\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\\x34\\x42\\x32\\x75\\x6e\\x69\\x30\\x34\\x42\\x33\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x42\\x36\\x75\\x6e\\x69\\x30\\x34\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\\x6e\\x69\\x30\\x34\\x42\\x39\\x75\\x6e\\x69\\x30\\x34\\x42\"\n\"\\x41\\x75\\x6e\\x69\\x30\\x34\\x42\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\\x43\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x43\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x44\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\\x69\\x30\\x34\\x45\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x39\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x45\\x45\\x75\\x6e\\x69\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\\x45\\x75\\x6e\\x69\\x32\\x30\\x41\\x46\\x75\\x6e\\x69\\x32\"\n\"\\x31\\x32\\x36\\x75\\x6e\\x69\\x32\\x32\\x31\\x35\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\\x32\\x32\\x32\\x37\\x75\\x6e\\x69\\x32\\x32\\x32\\x38\\x75\"\n\"\\x6e\\x69\\x32\\x32\\x39\\x35\\x75\\x6e\\x69\\x32\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x75\\x6f\\x67\\x6f\\x6e\"\n\"\\x65\\x6b\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\"\n\"\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x72\\x69\\x6e\\x67\\x75\\x74\\x69\"\n\"\\x6c\\x64\\x65\\x77\\x61\\x63\\x75\\x74\\x65\\x77\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x77\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x77\\x67\\x72\"\n\"\\x61\\x76\\x65\\x78\\x69\\x79\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\\x76\\x65\\x7a\\x61\\x63\\x75\\x74\\x65\\x7a\\x64\\x6f\\x74\"\n\"\\x61\\x63\\x63\\x65\\x6e\\x74\\x7a\\x65\\x74\\x61\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\"\n\"\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\"\n\"\\x6d\\x65\\x6e\\x74\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\"\n\"\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\"\n\"\\x6d\\x65\\x6e\\x74\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x4d\\x6f\\x6e\\x6f\\x20\\x50\\x53\\x20\\x52\\x65\\x67\\x75\\x6c\\x61\\x72\\x4e\\x69\\x6d\\x62\\x75\\x73\"\n\"\\x20\\x4d\\x6f\\x6e\\x6f\\x20\\x50\\x53\\x01\\x21\\x02\\x00\\x01\\x00\\x06\\x00\\x0c\\x00\\x14\\x00\\x18\\x00\\x23\\x00\\x27\\x00\\x32\\x00\\x3c\\x00\\x7d\\x00\"\n\"\\x88\\x00\\x90\\x00\\x9a\\x00\\xce\\x00\\xd5\\x00\\xe0\\x00\\xe4\\x00\\xea\\x01\\x31\\x01\\x40\\x01\\x4b\\x01\\x52\\x01\\x57\\x01\\x5d\\x01\\x63\\x01\\x69\\x01\"\n\"\\x70\\x01\\x75\\x01\\x7b\\x01\\x80\\x01\\x84\\x01\\x8f\\x01\\xa1\\x01\\xa9\\x01\\xb1\\x01\\xbf\\x01\\xc8\\x01\\xcc\\x01\\xd3\\x01\\xdc\\x01\\xe4\\x02\\x37\\x02\"\n\"\\x6a\\x02\\x90\\x02\\x9b\\x02\\xa6\\x02\\xb4\\x02\\xba\\x02\\xbf\\x02\\xc7\\x02\\xd3\\x02\\xdd\\x02\\xe2\\x02\\xeb\\x02\\xf1\\x02\\xf8\\x03\\x00\\x03\\x04\\x03\"\n\"\\x35\\x03\\x3b\\x03\\x44\\x03\\x52\\x03\\x5c\\x03\\x6b\\x03\\x76\\x03\\x7e\\x03\\x85\\x03\\x8a\\x03\\x95\\x03\\x9b\\x03\\xa5\\x03\\xaf\\x03\\xb6\\x03\\xbb\\x04\"\n\"\\x3d\\x04\\x87\\x04\\xdf\\x04\\xe7\\x04\\xf1\\x05\\x0d\\x05\\x1a\\x05\\x24\\x05\\x39\\x05\\x5c\\x05\\x68\\x05\\x72\\x05\\x80\\x05\\x8f\\x05\\x9a\\x05\\xa5\\x05\"\n\"\\xa9\\x05\\xb3\\x05\\xbd\\x05\\xc3\\x05\\xcc\\x05\\xd3\\x06\\x1a\\x06\\x3f\\x06\\x74\\x06\\xbb\\x06\\xf5\\x07\\x1e\\x07\\x27\\x07\\x3c\\x07\\x43\\x07\\x4a\\x07\"\n\"\\x77\\x07\\x92\\x07\\x9d\\x07\\xa6\\x07\\xb0\\x07\\xc3\\x07\\xd8\\x07\\xe8\\x07\\xf8\\x07\\xfe\\x08\\x0c\\x08\\x14\\x08\\x21\\x08\\x2c\\x08\\x36\\x08\\x44\\x08\"\n\"\\x50\\x08\\x5c\\x08\\x67\\x08\\x76\\x08\\x80\\x08\\x8a\\x08\\x98\\x08\\xa6\\x08\\xaf\\x08\\xb8\\x08\\xc5\\x08\\xcc\\x08\\xd3\\x08\\xdf\\x08\\xeb\\x08\\xf3\\x08\"\n\"\\xfb\\x09\\x03\\x09\\x0e\\x09\\x19\\x09\\x24\\x09\\x2f\\x09\\x3a\\x09\\xfa\\x0a\\x51\\x0a\\xbd\\x0b\\x11\\x0b\\x67\\x0b\\x9d\\x0b\\xe4\\x0c\\x40\\x0c\\x8d\\x0c\"\n\"\\xf9\\x0d\\x0a\\x0d\\x4d\\x0d\\x6d\\x0d\\x95\\x0d\\xd2\\x0d\\xf5\\x0e\\x0d\\x0e\\x50\\x0e\\x62\\x0e\\xa9\\x0e\\xe5\\x0f\\x03\\x0f\\x20\\x0f\\x4d\\x0f\\x7f\\x0f\"\n\"\\xa0\\x0f\\xcd\\x0f\\xeb\\x0f\\xf8\\x10\\x2e\\x10\\x51\\x10\\x7d\\x10\\x9c\\x10\\xc2\\x10\\xf5\\x11\\x27\\x11\\x58\\x11\\x68\\x11\\x83\\x11\\xa2\\x11\\xaf\\x11\"\n\"\\xb4\\x11\\xbe\\x11\\xeb\\x12\\x17\\x12\\x31\\x12\\x54\\x12\\x6f\\x12\\x92\\x12\\xb4\\x12\\xc8\\x12\\xde\\x12\\xed\\x13\\x02\\x13\\x10\\x13\\x24\\x13\\x31\\x13\"\n\"\\x44\\x13\\x54\\x13\\x72\\x13\\x95\\x13\\xa1\\x13\\xaf\\x13\\xc7\\x13\\xe6\\x13\\xf2\\x14\\x03\\x14\\x1a\\x14\\x30\\x14\\x4c\\x14\\x5f\\x14\\x75\\x14\\x8b\\x14\"\n\"\\x99\\x14\\xa3\\x14\\xb7\\x14\\xc7\\x14\\xce\\x14\\xdd\\x14\\xf7\\x15\\x10\\x15\\x19\\x15\\x32\\x15\\x41\\x15\\x4c\\x15\\x5c\\x15\\x74\\x15\\x7b\\x15\\x82\\x15\"\n\"\\x8b\\x15\\x9b\\x15\\xa8\\x15\\xbe\\x15\\xd4\\x15\\xea\\x15\\xfc\\x16\\x07\\x16\\x1b\\x16\\x27\\x16\\x2e\\x16\\x41\\x16\\x54\\x16\\x63\\x16\\x74\\x16\\x86\\x16\"\n\"\\x98\\x16\\xaa\\x16\\xbc\\x16\\xce\\x16\\xdf\\x16\\xef\\x16\\xff\\x17\\x0d\\x17\\x1c\\x17\\x2b\\x17\\x3a\\x17\\x49\\x17\\x4f\\x17\\x5d\\x17\\x67\\x17\\x73\\x17\"\n\"\\x80\\x17\\x8d\\x17\\x9a\\x17\\xa7\\x17\\xb4\\x17\\xc1\\x17\\xce\\x17\\xda\\x17\\xe6\\x17\\xf2\\x17\\xfe\\x18\\x0a\\x18\\x12\\x18\\x1a\\x18\\x22\\x18\\x2d\\x18\"\n\"\\x38\\x18\\x43\\x18\\x4e\\x18\\x59\\x18\\x64\\x18\\x6f\\x18\\x78\\x18\\x81\\x76\\x80\\x50\\x1d\\x0b\\x94\\x9c\\x9b\\x80\\x94\\x0b\\x06\\x76\\x80\\x83\\x7a\\x30\"\n\"\\x1d\\x0b\\x06\\x61\\x1d\\x0b\\x06\\xa5\\x99\\x94\\x9b\\x9c\\x7d\\x94\\x71\\x1f\\x0b\\x06\\x40\\x1d\\x0b\\x06\\x76\\x80\\x82\\x7a\\x7b\\x96\\x82\\xa0\\x1f\\x0b\"\n\"\\x76\\x94\\x80\\x9c\\x9c\\x94\\x96\\xa0\\x1e\\x0b\\xf8\\x3d\\xf7\\x4c\\x15\\xbe\\xfb\\x19\\x05\\x47\\x06\\x20\\x1d\\xf7\\x30\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\"\n\"\\x6a\\x06\\xfb\\x59\\xf8\\x94\\x05\\xfb\\x63\\x06\\x75\\x80\\x83\\x7a\\x7a\\x96\\x1d\\x6f\\x06\\x37\\x1d\\xf7\\x2b\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\x44\\x06\"\n\"\\xbd\\xf7\\x19\\x05\\xf7\\x83\\xbe\\xf7\\x46\\x1d\\x0b\\x06\\xa0\\x97\\x94\\x9c\\x9b\\x7f\\x94\\x76\\x1f\\x0b\\x83\\x7a\\x7a\\x96\\x82\\xa1\\x1f\\x0b\\x75\\x80\"\n\"\\x82\\x7b\\x7a\\x97\\x82\\xa0\\x1f\\x0b\\xf7\\x15\\x1d\\xfb\\x18\\xf7\\x01\\x25\\xf7\\x1f\\xec\\xf7\\x0b\\xbb\\xb1\\x99\\x80\\x96\\x7d\\x85\\x87\\x89\\x85\\x83\"\n\"\\x1e\\x6d\\x63\\x43\\x75\\x4f\\x1b\\x23\\x3d\\xcb\\xeb\\x7d\\x1f\\xbe\\x04\\xdd\\x9c\\xd3\\xc1\\xe7\\x1b\\xe6\\xd4\\x54\\x3a\\x9b\\x1f\\x0b\\xf7\\xc4\\xf8\\xd3\"\n\"\\xc7\\x1d\\x0b\\x06\\x75\\x80\\x82\\x7b\\x7a\\x96\\x82\\xa1\\x1f\\x0b\\x06\\x7b\\x1d\\x0b\\x7a\\x96\\x82\\xa0\\x1f\\x0b\\xf8\\x8d\\xf8\\x94\\x15\\xa8\\x06\\xa0\"\n\"\\x96\\x94\\x9c\\x9c\\x81\\x93\\x75\\x1f\\xfb\\x2a\\x22\\x1d\\xd0\\xfb\\xd9\\x06\\x35\\x48\\x49\\x35\\x36\\x48\\xcd\\xe1\\x1e\\xf7\\xd9\\xd0\\x07\\xa0\\x96\\x94\"\n\"\\x9c\\x9c\\x80\\x93\\x76\\x1f\\xfb\\x29\\x06\\x75\\x80\\x2a\\x1d\\xa7\\xfb\\xd9\\x06\\xfb\\x07\\xe3\\x33\\xf7\\x08\\xf7\\x08\\xe4\\xe3\\xf7\\x07\\x1e\\x0b\\xef\"\n\"\\x1d\\xf7\\xfe\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\xfb\\x2f\\x06\\x0b\\x06\\x71\\x7d\\x82\\x7a\\x7b\\x99\\x82\\xa5\\x1f\\x0b\\x07\\x56\\x1d\\x80\\x76\\x1e\\x0b\"\n\"\\x72\\x7d\\xa8\\x1d\\x0b\\x06\\x76\\x7f\\x38\\x1d\\x0b\\x76\\x80\\xf7\\x3e\\x1d\\x0b\\x82\\x7a\\x7b\\x3a\\x1d\\x0b\\x77\\x94\\x80\\x9c\\x9c\\x94\\x0b\\x97\\x82\"\n\"\\xa0\\x1f\\x0b\\x06\\x71\\x7e\\xa8\\x1d\\x0b\\x8d\\x1d\\x97\\x80\\x0b\\x06\\x62\\x1d\\x0b\\x06\\xa0\\x96\\x94\\x9c\\x9c\\x80\\x93\\x76\\x1f\\x0b\\x6c\\x72\\x73\"\n\"\\x6c\\x6d\\xa4\\x73\\xaa\\xa9\\xa4\\xa3\\xaa\\xa8\\x72\\xa4\\x6d\\x1f\\x0b\\x76\\x7f\\x82\\x7b\\x7a\\x3a\\x1d\\x0b\\x94\\x9c\\x9c\\x80\\x93\\x75\\x1f\\x0b\\x5d\"\n\"\\x1d\\xe1\\x4d\\x1d\\x67\\x86\\x62\\x72\\x55\\x1b\\x56\\x51\\x1d\\x15\\x3f\\x1d\\xf7\\x72\\x16\\x3f\\x1d\\x0e\\x06\\x4f\\x1d\\x0b\\x15\\xfb\\x1b\\xfb\\x01\\x05\"\n\"\\x0b\\x80\\x7d\\x80\\x8e\\x87\\x97\\x82\\x1f\\x0e\\x1b\\x7d\\x80\\x81\\x7d\\x7f\\x90\\x0b\\xf8\\x32\\x16\\xf0\\x23\\x1d\\x5a\\xf7\\x94\\x06\\xd4\\x44\\xc0\\x2b\"\n\"\\x65\\x4a\\x7e\\x78\\x54\\xa3\\x1d\\x8e\\x8c\\x8f\\x98\\x1e\\x9d\\xc4\\xb5\\x93\\xab\\x1b\\xd1\\xbb\\x6d\\x5e\\x1f\\x4d\\x07\\x9a\\x4f\\x72\\x8e\\x5e\\x1b\\xfb\"\n\"\\x16\\x34\\x4f\\x32\\x3e\\xcc\\x56\\xeb\\xd0\\xc2\\xa1\\xc0\\xc9\\x1f\\xc6\\x04\\x4f\\x4a\\x57\\x74\\x46\\x1b\\x48\\x61\\xaa\\xbb\\xc5\\xd1\\xb3\\xef\\xb7\\xbb\"\n\"\\x86\\x83\\xac\\x1f\\x0b\\xf8\\x8f\\x16\\xf8\\x94\\xa8\\x07\\xa0\\x96\\x94\\x9c\\x9c\\x80\\x93\\x76\\x1f\\xfb\\x2a\\x06\\x75\\x80\\x83\\x7a\\x7a\\x3a\\x1d\\xd0\"\n\"\\xfc\\x42\\x06\\xfb\\xbc\\xf8\\x75\\x05\\xfb\\x02\\x22\\x1d\\xbc\\x92\\x1d\\xf8\\x42\\x06\\xf7\\xbc\\xfc\\x75\\x05\\x0b\\x15\\x8c\\x91\\x8b\\x8e\\x8d\\x1a\\x9b\"\n\"\\x82\\x94\\x7b\\x7b\\x82\\x82\\x78\\x88\\x1e\\x74\\xfb\\x25\\x05\\x89\\x83\\x8b\\x89\\x89\\x1a\\x7c\\x94\\x82\\x9b\\x9b\\x93\\x94\\x9e\\x8f\\x1e\\x0b\\x06\\x71\"\n\"\\x7d\\x82\\x7b\\x7a\\x99\\x82\\xa5\\x1f\\x0b\\x06\\x72\\x7d\\x82\\x7b\\x7a\\x99\\x82\\xa4\\x1f\\x0b\\xcc\\xbb\\xca\\x9b\\x80\\x96\\x7c\\x7c\\x83\\x83\\x79\\x89\"\n\"\\x1f\\x0b\\x06\\x77\\x7f\\x50\\x1d\\x0b\\xa1\\x96\\x41\\x1d\\x0b\\x82\\x7b\\x7a\\x96\\x82\\xa0\\x1f\\x0b\\x62\\xa5\\xae\\x86\\x1f\\x9d\\x89\\x83\\x93\\x7c\\x1b\"\n\"\\x0e\\xa5\\x99\\x94\\x9c\\x9b\\x7d\\x94\\x71\\x1f\\x0b\\x21\\x1d\\x76\\x1f\\x0b\\x15\\x98\\x96\\x8d\\x8e\\x94\\x1a\\x9a\\x0b\\x15\\x97\\x96\\x8d\\x8e\\x0b\\xa0\"\n\"\\x82\\x96\\x7a\\x7a\\x82\\x0b\\x94\\x9b\\x9c\\x80\\x94\\x75\\x1f\\x0b\\x7d\\x96\\x1f\\x0e\\xf7\\x09\\x16\\xd4\\x06\\xf7\\x02\\xf8\\x0e\\xf7\\x00\\xfc\\x0e\\x05\"\n\"\\xd4\\x06\\xc9\\xf8\\x94\\x05\\x95\\xf7\\x10\\x1d\\xe5\\x06\\x56\\xfc\\x46\\x24\\xf7\\xfe\\x05\\x45\\x06\\x21\\xfb\\xff\\x57\\xf8\\x47\\x05\\xe3\\xf7\\x10\\x1d\"\n\"\\x96\\x06\\x0b\\x75\\x1d\\x7d\\x7f\\x46\\x1d\\x15\\x3f\\x1d\\xf7\\x71\\x16\\x3f\\x1d\\x0e\\x1f\\xfb\\x80\\x06\\x76\\x80\\x82\\x7b\\x7b\\x97\\x82\\x9f\\x1f\\x0e\"\n\"\\x15\\x7c\\x80\\x80\\x7b\\x4c\\xcc\\x5b\\xe0\\x0b\\x28\\x06\\x74\\x94\\x7e\\x9c\\x9c\\x94\\x98\\xa3\\x1e\\xf7\\x02\\x07\\x0b\\x07\\x76\\x80\\x82\\x7a\\x7b\\x96\"\n\"\\x82\\xa0\\x1f\\x0b\\x15\\xa1\\x96\\x21\\x1d\\x75\\x1f\\x0b\\xa0\\x96\\x21\\x1d\\x76\\x1f\\x0b\\xa0\\x97\\x41\\x1d\\x0b\\x88\\x91\\x1b\\x99\\x97\\x96\\x99\\x96\"\n\"\\x89\\x8e\\x0b\\x93\\x1f\\x85\\x91\\x05\\x0e\\x94\\x1a\\x9a\\x80\\x96\\x7c\\x84\\x86\\x89\\x0b\\x76\\x80\\x82\\x7b\\x7b\\x96\\x82\\xa0\\x1f\\x0b\\x73\\x9f\\x77\"\n\"\\xa4\\xa4\\x9f\\x0b\\x8e\\x93\\x94\\x1e\\x0e\\xf8\\x4d\\xf8\\xa0\\x15\\xae\\x63\\x5d\\x9b\\x53\\x1b\\xfb\\x00\\x3a\\x47\\x32\\x5f\\x9f\\x63\\xad\\x74\\x1f\\xaa\"\n\"\\x75\\xb0\\x7f\\xd1\\x7f\\xd2\\x80\\x9f\\x85\\xa3\\x7c\\x08\\xa5\\x7b\\x9b\\x6d\\x6b\\x1a\\x46\\x48\\x58\\x30\\x33\\x45\\xba\\xc9\\x86\\x1e\\x9f\\x8a\\x83\\x94\"\n\"\\x7b\\x1b\\x7a\\x82\\x80\\x76\\x1f\\xfb\\x01\\x07\\x27\\x1d\\x99\\x07\\x63\\xb4\\xc4\\x75\\xcc\\x1b\\xf7\\x10\\xe3\\xd2\\xed\\xbf\\x73\\xb7\\x63\\xa3\\x1f\\x6c\"\n\"\\x9e\\x6f\\x93\\x3d\\x98\\x4e\\x95\\x71\\x93\\x73\\x9b\\x08\\x73\\x9a\\x7e\\xa4\\xa8\\x1a\\xca\\xc5\\xb8\\xdb\\xd6\\xc5\\x62\\x53\\x90\\x1e\\x77\\x8c\\x94\\x82\"\n\"\\x9a\\x1b\\x9c\\x94\\x96\\xa0\\x1f\\xf0\\xac\\x1d\\x0b\\xf7\\x41\\xf8\\x37\\x15\\x3a\\x06\\x75\\x81\\x83\\x7a\\x30\\x1d\\xa8\\xfb\\xd1\\x63\\x06\\x2b\\x1d\\xf7\"\n\"\\x18\\x23\\x1d\\x63\\xf7\\x85\\x06\\xd6\\xc8\\xa4\\x9a\\xc8\\x1b\\xaf\\x9e\\x85\\x79\\xa1\\x1f\\xa3\\x77\\x97\\x74\\x70\\x1a\\xfb\\x81\\x6f\\x07\\x2b\\x1d\\xf7\"\n\"\\x01\\x06\\x9f\\x97\\x53\\x1d\\x6e\\xf7\\x88\\x06\\xd9\\x45\\xc7\\x2f\\x4e\\x67\\x79\\x53\\x56\\x1e\\x0b\\xf7\\x93\\xf8\\x37\\x15\\xfb\\x0d\\x06\\x76\\x7f\\x82\"\n\"\\x7b\\x7b\\x97\\x81\\xa0\\x1f\\xd0\\xfb\\xd1\\x30\\x06\\x76\\x7f\\x81\\x7c\\x7a\\x3a\\x1d\\xf7\\xd1\\x06\\x9f\\x97\\x94\\x9c\\x9a\\x7f\\x95\\x77\\x1f\\xfb\\x42\"\n\"\\xf7\\x64\\x06\\xec\\xf7\\x00\\xac\\xa1\\xb6\\x1b\\x9f\\x9d\\x82\\x73\\xa3\\x1f\\x84\\x93\\x8e\\x89\\x94\\x1b\\x9a\\x96\\x96\\x9b\\x95\\x85\\x94\\x78\\x9a\\x1f\"\n\"\\xa2\\x70\\x75\\x94\\x6c\\x1b\\x57\\x5c\\x71\\x3d\\x33\\x1f\\x0b\\xf7\\x45\\x1d\\x7a\\x82\\xe1\\x1d\\x0b\\x55\\x1d\\x70\\x1d\\x90\\x8d\\x94\\x95\\x1e\\x0e\\xf7\"\n\"\\x05\\x1d\\xfb\\x07\\x29\\xed\\xf7\\x08\\x1f\\xd0\\x07\\xf7\\x06\\xe2\\xe7\\xf7\\x01\\xe1\\xd7\\x5a\\x51\\x90\\x1e\\xf7\\x0f\\x1d\\x0b\\x15\\x53\\x5f\\x61\\x57\"\n\"\\x57\\xb7\\x61\\xc2\\xf7\\x1a\\x1d\\x0b\\x98\\x1d\\x82\\x1a\\x7c\\x96\\x80\\x9a\\x92\\x0b\\x75\\x1f\\x53\\x06\\xf7\\x8f\\xf8\\x87\\x05\\x95\\x06\\xa1\\x96\\x41\"\n\"\\x1d\\xfb\\x02\\x06\\x76\\x80\\x0b\\xf8\\x6d\\xf8\\x97\\x15\\xb2\\x5d\\x51\\xa0\\x4b\\x1b\\x48\\x4e\\x71\\x5b\\x5d\\x1f\\x5f\\x5d\\x6e\\x45\\x4e\\x1a\\x3a\\x07\"\n\"\\xfb\\x1c\\xf7\\x12\\xfb\\x0f\\xf7\\x1f\\xcc\\x0b\\x1b\\xbd\\xad\\xa7\\xb4\\xb1\\x73\\xa3\\x62\\x8e\\x1f\\x0e\\x30\\x1d\\xf7\\x7d\\x06\\xa1\\x96\\x94\\x9c\\x0b\"\n\"\\x15\\xf7\\x1b\\xf7\\x01\\x05\\x99\\x95\\x8d\\x8f\\x95\\x94\\x1d\\x0b\\x06\\x76\\x80\\x83\\x7a\\x30\\x1d\\xbc\\xfc\\x61\\x5a\\x06\\x20\\x1d\\x0b\\x81\\x85\\x87\"\n\"\\x7f\\x82\\x1e\\x37\\xfb\\x10\\x05\\x0b\\x06\\x9f\\x82\\x96\\x7a\\x7a\\x82\\x80\\x77\\x1e\\x0b\\x07\\x7b\\x1d\\x0b\\x62\\x74\\x78\\x70\\x66\\x1a\\x62\\xa9\\x73\"\n\"\\x0b\\xa4\\x99\\x94\\x9b\\x9c\\x7d\\x94\\x72\\x1f\\x0b\\x77\\x7f\\xf7\\x3e\\x1d\\x0b\\x94\\x93\\x98\\x97\\x82\\x93\\x7d\\x1f\\x0b\\x1b\\x73\\x81\\x95\\xa3\\x1f\"\n\"\\x0b\\xf8\\xa2\\xf7\\x61\\x15\\x94\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\xfb\\x56\\x06\\x75\\x80\\x2a\\x1d\\xf7\\x19\\xfb\\x1e\\x06\\x72\\x54\\x6c\\x84\\x58\\x1b\"\n\"\\xfb\\x22\\x36\\xda\\xf7\\x17\\x1f\\xd3\\x07\\xc2\\xa6\\xc8\\xb6\\xb3\\x1e\\xae\\xb0\\xb6\\x9b\\xc2\\x1b\\xe1\\xd0\\x66\\x5b\\x90\\x1f\\x77\\x8c\\x93\\x82\\x9b\"\n\"\\x1b\\x9c\\x94\\x96\\x9f\\xdb\\x1d\\x0b\\xf8\\x43\\xf7\\x9e\\x15\\xfb\\x6b\\x5b\\x07\\x2b\\x1d\\xf7\\x20\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\x63\\xf8\\x61\\x9f\"\n\"\\x06\\xa0\\x96\\x94\\x9c\\x9c\\x80\\x93\\x76\\x89\\x1d\\x06\\x0e\\xf7\\xde\\xf7\\x3a\\x15\\xf7\\x30\\xf7\\xed\\x05\\xfc\\x60\\x46\\x07\\x37\\x1d\\xf7\\x2a\\x23\"\n\"\\x1d\\x6e\\xf8\\x61\\x9f\\x3e\\x1d\\x23\\x06\\xfb\\x2b\\xfb\\xe2\\xfb\\x2d\\xf7\\xe2\\x05\\x24\\x06\\x20\\x1d\\x9f\\x92\\x1d\\xf8\\x5f\\x06\\xf7\\x32\\xfb\\xec\"\n\"\\x05\\x0e\\xf7\\x33\\x16\\xf7\\xad\\xf7\\xe8\\x05\\xfb\\xb5\\x5b\\x07\\x76\\x7f\\x38\\x1d\\xf7\\x29\\x06\\xa0\\x96\\x94\\x9b\\x9c\\x80\\x94\\x76\\x1f\\x5a\\xf7\"\n\"\\xd1\\xbc\\x06\\xa0\\x96\\x94\\x9b\\x9c\\x80\\x94\\x76\\x1f\\x22\\x06\\xfb\\xad\\xfb\\xe9\\x05\\xf7\\xb6\\xbb\\x07\\xa1\\x96\\x57\\x1d\\xfb\\x23\\x06\\x75\\x80\"\n\"\\x38\\x1d\\xb6\\xfb\\xd1\\x60\\x25\\x1d\\x0b\\xf7\\x54\\xf8\\x37\\x15\\xf7\\x04\\x07\\x8e\\x1d\\xfb\\x96\\x06\\x3f\\xca\\x59\\xed\\xba\\xc3\\x96\\x9d\\xbb\\x1e\"\n\"\\xb0\\x99\\x9b\\x98\\x9a\\x1a\\x99\\x80\\x96\\x7d\\x86\\x87\\x8a\\x85\\x82\\x1e\\x75\\x64\\x46\\x7b\\x54\\x1b\\x49\\x62\\xa9\\xba\\x1f\\xf7\\x94\\xf7\\x6a\\x07\"\n\"\\x4f\\x1d\\x0b\\xf7\\x3f\\xf7\\x76\\x15\\xf7\\x12\\x06\\xf7\\x08\\xe7\\xd6\\xea\\xe9\\x36\\xd4\\xfb\\x01\\x1f\\xfb\\x85\\xe4\\x1d\\xf7\\x76\\x04\\xf7\\x7f\\xf7\"\n\"\\x23\\x07\\xd8\\xc9\\x57\\x4b\\x4a\\x46\\x55\\x37\\x1f\\x0e\\x8a\\x1d\\x95\\x89\\x8f\\x7e\\x96\\x1f\\x0e\\x15\\x7c\\x80\\x80\\x7b\\x4c\\xcc\\x5b\\xe1\\xe0\\x4d\"\n\"\\x1d\\x67\\x86\\x62\\x72\\x55\\x1b\\x56\\x51\\x1d\\x15\\x91\\x94\\x8d\\x90\\xed\\x1d\\xf4\\x1d\\x99\\x91\\x92\\x68\\x1d\\x1f\\xfb\\x0c\\x06\\x75\\x80\\x83\\x7a\"\n\"\\x7a\\x3a\\x1d\\xbb\\xfb\\x57\\xfb\\x96\\xf7\\x57\\xbb\\x3d\\x1d\\xfb\\x0c\\x22\\x1d\\x9f\\xfc\\x61\\x63\\x06\\x2b\\x1d\\xf7\\x20\\x06\\xa0\\x97\\x21\\x1d\\x75\"\n\"\\x1f\\x5b\\xf7\\x6b\\x0b\\x8d\\x1d\\x96\\x80\\x99\\x92\\x91\\x8d\\x92\\x93\\x1e\\xf3\\xdf\\xf4\\x37\\x05\\x85\\x93\\x91\\x88\\x91\\x1b\\x99\\x97\\x96\\x99\\x0b\"\n\"\\x05\\xb6\\x3d\\x1d\\xfb\\x07\\x22\\x1d\\x98\\x06\\x0b\\x25\\x1d\\xb3\\xfc\\x61\\x63\\x25\\x1d\\x0b\\x45\\x1d\\x7f\\x82\\x88\\x87\\x80\\x1a\\x7d\\x0b\\xa0\\x82\"\n\"\\x95\\x7a\\x7a\\x82\\x80\\x77\\x1e\\xfb\\x04\\x46\\x07\\x75\\x80\\x2a\\x1d\\xd0\\x0b\\xf7\\x47\\x1d\\xc5\\x24\\x1d\\x53\\x06\\x45\\xf7\\x1b\\x69\\xcb\\x66\\xb6\"\n\"\\x6a\\x99\\x19\\xa8\\xaa\\x0b\\x15\\x84\\x85\\x88\\x85\\x85\\x1f\\x6e\\x6e\\x82\\x85\\x7c\\x1b\\x7f\\x82\\x0b\\x95\\x86\\x8c\\x75\\x98\\x08\\x79\\x96\\x80\\x9a\"\n\"\\x99\\x1a\\xb2\\xc0\\xa8\\x0b\\xfc\\x61\\xf7\\x0c\\x1d\\x0b\\x83\\xa1\\x1b\\xbd\\xad\\xa7\\xb4\\xb1\\x73\\xa3\\x62\\x8e\\x1f\\x0b\\xf7\\x1f\\x1d\\x85\\x8e\\x85\"\n\"\\x1b\\x0b\\x16\\x72\\x77\\x78\\x72\\x72\\x9f\\x78\\xa4\\xa4\\x9f\\x9e\\x0b\\x3a\\x1d\\xf7\\x03\\x06\\xfb\\x42\\xfc\\x61\\x05\\x0b\\x26\\x07\\x75\\x81\\x83\\x7a\"\n\"\\x30\\x1d\\xbc\\x0b\\x65\\x1d\\x82\\x81\\x1e\\xfb\\x06\\x2a\\x05\\x80\\x81\\x88\\x87\\x0b\\xbd\\xbe\\xc9\\xc9\\x59\\xbe\\x4e\\x1f\\x89\\x64\\x15\\x0b\\xa9\\x79\"\n\"\\x1f\\xa8\\x79\\xa8\\x84\\xd5\\x84\\xc2\\x85\\x0b\\x07\\x76\\x94\\x7f\\x9c\\x9c\\x94\\x97\\xa0\\x1e\\x0b\\x8a\\x89\\x85\\x1a\\x7d\\x97\\x7f\\x99\\x96\\x90\\x8e\"\n\"\\x99\\x94\\x1e\\x0e\\x89\\x82\\x81\\x1e\\xfb\\x06\\x2a\\x05\\x80\\x0b\\xa0\\x96\\x94\\x9b\\x9b\\x80\\x94\\x76\\x1f\\x0b\\x06\\xa1\\x96\\x94\\x9c\\x9c\\x81\\x93\"\n\"\\x74\\x1f\\xfb\\x02\\x06\\x0b\\x9b\\x83\\x1f\\x81\\xa0\\xa9\\x83\\xa1\\x1b\\xbd\\xad\\xa7\\xb4\\x0b\\x87\\x8a\\x79\\x1b\\x70\\x7f\\x94\\x9e\\x0b\\x73\\xa2\\xa7\"\n\"\\xa7\\xa3\\xa2\\xa9\\x1f\\x0b\\x1e\\x7d\\x86\\x84\\x83\\x7f\\x1a\\x7d\\x96\\x80\\x98\\x90\\x0b\\x1a\\x99\\x7f\\x96\\x7d\\x1e\\x0e\\x7a\\x7b\\x96\\x82\\xa0\\x1f\"\n\"\\x0b\\x2b\\x05\\x81\\x83\\x87\\x84\\x83\\x1a\\x7d\\x97\\x7f\\x0b\\xb3\\x9f\\xa0\\x96\\x82\\x94\\x81\\x88\\x87\\x8a\\x88\\x0b\\x82\\x7a\\x7b\\x99\\x82\\xa4\\x1f\"\n\"\\x0b\\x96\\x7a\\x7a\\x83\\x80\\x76\\x1e\\x0b\\x96\\x87\\x80\\x9e\\x1f\\x73\\xb4\\x0b\\x06\\xa4\\x99\\x94\\x9b\\x9c\\x7e\\x94\\x71\\x1f\\x0b\\x07\\x9f\\x82\\x96\"\n\"\\x7a\\x7a\\x83\\x80\\x77\\x1e\\x0b\\x86\\x8d\\x84\\x1b\\x7c\\x80\\x80\\x7d\\x82\\x8e\\x0b\\x91\\x8e\\x91\\x93\\x1e\\xf3\\xdf\\xf3\\x37\\x05\\x0b\\xa4\\xa4\\x9f\"\n\"\\x9f\\xa3\\xa3\\x77\\x9f\\x72\\x1f\\x0b\\xf7\\xda\\xbc\\x15\\x61\\xac\\xb5\\x74\\xb6\\x1b\\xad\\xaa\\x98\\xac\\xb5\\x1f\\xa4\\x9e\\x93\\x95\\x97\\x1a\\x98\\x7f\"\n\"\\x97\\x7e\\x85\\x85\\x89\\x87\\x86\\x1e\\x60\\x5c\\x77\\x7f\\x6e\\x1b\\x4d\\x59\\xce\\xe8\\x82\\x1f\\xf7\\x96\\x06\\x8a\\xba\\x89\\x9e\\x84\\xad\\x08\\xe3\\x78\"\n\"\\x57\\xbd\\x44\\x1b\\x5b\\x62\\x71\\x5b\\x6e\\x1f\\xb9\\x74\\x60\\xa7\\x5c\\x1b\\x6c\\x6b\\x83\\x7a\\x64\\x1f\\x74\\x81\\x82\\x82\\x7e\\x1a\\x7f\\x97\\x7e\\x96\"\n\"\\x91\\x92\\x8e\\x90\\x94\\x1e\\x9a\\xa7\\xa6\\x93\\xa5\\x1b\\xb9\\xb0\\x69\\x5f\\x1f\\x57\\x07\\x92\\x73\\x6d\\x8f\\x71\\x1b\\x20\\x3a\\x54\\x42\\x34\\xcc\\x4b\"\n\"\\xe3\\xb5\\xb0\\x9e\\xb2\\xaf\\x1f\\x81\\x07\\x76\\x94\\x80\\x9b\\x9c\\x94\\x96\\xa0\\x1e\\x58\\xde\\x15\\x52\\x5e\\x6b\\x74\\x67\\x1b\\x51\\x62\\xb0\\xbf\\xa1\"\n\"\\x91\\x9a\\x98\\x98\\x1f\\x9f\\xa2\\xc2\\x9d\\xb5\\x1b\\x9f\\xa9\\x86\\x84\\xa2\\x1f\\xbe\\xb9\\x15\\xe4\\x97\\xaf\\xba\\xc2\\x1b\\xad\\xa7\\x79\\x6a\\x9c\\x1f\"\n\"\\x95\\x77\\x92\\x73\\x90\\x62\\x08\\x0b\\xf8\\x87\\xf8\\x6a\\x15\\x74\\x94\\x7e\\x9c\\x9c\\x94\\x98\\xa4\\x1e\\xbf\\x07\\xaa\\x83\\x93\\x6b\\x3d\\x78\\x7c\\x22\"\n\"\\x4b\\x1e\\x4c\\x22\\x80\\x82\\x51\\x89\\x08\\x72\\xf7\\x4d\\xba\\x2f\\x1d\\xfb\\x25\\x4c\\x1d\\xb9\\xfc\\x61\\x5d\\x06\\x35\\x1d\\xf7\\x25\\x06\\xa4\\x99\\x94\"\n\"\\x9c\\x9b\\x7d\\x94\\x72\\x1f\\x5c\\xf7\\x75\\xa4\\x06\\xdc\\x89\\xa6\\x77\\xbc\\x31\\x8f\\x1d\\x92\\x96\\xb5\\xd0\\xbe\\xe0\\x94\\x93\\xb6\\x8d\\x08\\x0b\\xf7\"\n\"\\xb8\\xf7\\x4d\\x15\\xfb\\x1a\\x5c\\x07\\x37\\x1d\\xf7\\xf3\\xf7\\x1c\\x06\\x9e\\x81\\x98\\x7b\\x79\\x83\\x82\\x74\\x1e\\x36\\xfb\\x5c\\xf7\\x6c\\xce\\x76\\x07\"\n\"\\x77\\x94\\x7f\\x9b\\x9b\\x94\\x96\\xa0\\x1e\\xe9\\x07\\xa0\\x83\\xa9\\x1d\\x75\\x48\\xf7\\x56\\xf7\\x48\\x23\\x07\\x27\\x1d\\xf7\\x2f\\xfc\\x44\\x07\\x76\\x80\"\n\"\\x83\\x7a\\x30\\x1d\\xc3\\x06\\xfb\\x16\\xfc\\x61\\x05\\x6b\\x06\\x2b\\x1d\\xf2\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\x78\\x06\\xb1\\xf7\\x1a\\x05\\xf7\\x18\\xbe\"\n\"\\x15\\xfb\\x09\\x06\\xd7\\xf7\\xa8\\x05\\xb4\\x06\\x0b\\xf7\\xe5\\xf7\\x6f\\x15\\xf7\\x32\\xf7\\x29\\x05\\x8f\\x9f\\x1d\\x75\\x81\\x83\\x7a\\x30\\x1d\\xae\\x06\"\n\"\\xfb\\x10\\xfb\\x06\\xfb\\x0c\\xf7\\x06\\x05\\xab\\x9f\\x1d\\x74\\x81\\x83\\x7a\\x7a\\x96\\x82\\xa1\\xf7\\x35\\x1d\\x83\\x06\\x37\\x1d\\xf7\\x19\\x06\\xa0\\x97\"\n\"\\x21\\x1d\\x75\\x1f\\x55\\x06\\xf7\\x23\\xf7\\x19\\xf7\\x22\\xfb\\x19\\x05\\x57\\x06\\x37\\x1d\\xf7\\x18\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\x84\\x06\\x0e\\x41\"\n\"\\x1d\\xfb\\x03\\x22\\x1d\\xae\\x06\\xfb\\x23\\xfb\\x4b\\xfb\\x24\\xf7\\x4b\\x05\\xab\\x3e\\x1d\\xfb\\x02\\x06\\x37\\x1d\\x97\\x06\\xf7\\x44\\xfb\\x74\\xfb\\x4c\"\n\"\\xfb\\x81\\x05\\x7c\\x06\\x37\\x1d\\xf7\\x17\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\x56\\x06\\xf7\\x2d\\xf7\\x58\\xf7\\x2e\\xfb\\x58\\x05\\x59\\x06\\x75\\x80\\x82\"\n\"\\x7b\\x7a\\x97\\x82\\xa0\\x1f\\xf7\\x17\\x06\\xa0\\x97\\x94\\x9c\\x9b\\x80\\x94\\x75\\x1f\\x7d\\x06\\x0e\\xf7\\x3f\\xf7\\x70\\x15\\xd8\\xce\\xe7\\x6d\\xb5\\x51\"\n\"\\xd4\\xfb\\x5b\\x19\\xe5\\x06\\xa1\\x96\\x21\\x1d\\x75\\x1f\\x57\\x06\\x43\\xf7\\x4b\\x65\\xbe\\x2f\\xb3\\xf7\\x6a\\xf7\\x4f\\x18\\x99\\x44\\x1d\\xfb\\x0b\\x06\"\n\"\\x75\\x80\\x83\\x7a\\x7a\\x96\\x82\\xa1\\xcb\\x1d\\x0b\\xf8\\xa2\\xf7\\x61\\x15\\x94\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\xfb\\x56\\x06\\x75\\x80\\x2a\\x1d\\xf7\"\n\"\\x19\\xfb\\x1e\\x06\\x72\\x54\\x6c\\x84\\x58\\x1b\\xfb\\x22\\x36\\xda\\xf7\\x17\\x1f\\xd3\\x07\\xc2\\xa6\\xc8\\xb6\\xb3\\x1e\\xae\\xb0\\xb6\\x9b\\xc2\\x1b\\xe1\"\n\"\\xd0\\x66\\x5b\\x90\\x1f\\x77\\x8c\\x93\\x82\\x9b\\x1b\\x9c\\x94\\x95\\xa0\\xdb\\x1d\\x0b\\xf7\\x25\\xf8\\x94\\x15\\xa6\\xab\\x1d\\xfb\\x04\\x4b\\x1d\\xa1\\x06\"\n\"\\xf7\\x58\\xfb\\xf4\\x6d\\x55\\x05\\x53\\x6c\\x7a\\x7c\\x6a\\x1b\\x80\\x85\\x8c\\x90\\x79\\x1f\\xbf\\x07\\xa2\\x82\\x98\\x7a\\x7a\\x82\\x7e\\x72\\x1e\\x52\\x07\"\n\"\\x78\\x8e\\x80\\x93\\x87\\x1e\\x81\\x99\\xa9\\x85\\xa6\\x1b\\xc3\\xaf\\xa6\\xd2\\xb3\\x1f\\xf7\\x83\\xf8\\x42\\x05\\xa0\\x06\\xa4\\x99\\x94\\x9c\\x9b\\x7d\\x94\"\n\"\\x72\\x1f\\xfb\\x00\\x4b\\x1d\\xa6\\x06\\xfb\\x38\\xfb\\xbd\\x05\\x0b\\xf7\\x3f\\xf8\\xef\\x15\\x26\\x06\\x20\\x1d\\xbc\\xfc\\x89\\x63\\x06\\x2b\\x1d\\xf7\\x18\"\n\"\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\x63\\xf7\\x87\\x06\\xa6\\xa9\\x9c\\x9e\\x91\\x90\\x08\\xa3\\xa8\\xa6\\x95\\xb1\\x1b\\xb2\\x9f\\x85\\x79\\xa1\\x1f\\xa3\\x78\"\n\"\\x97\\x74\\x6f\\x1a\\xfb\\x81\\x63\\x07\\x76\\x80\\x82\\x7b\\x7a\\x96\\x82\\xa0\\xf7\\x18\\x1d\\x2c\\x4f\\x62\\x77\\x56\\x5b\\x1e\\x0b\\xf8\\xb1\\xf7\\x6c\\x15\"\n\"\\xd5\\xf7\\x3a\\x05\\x8f\\x92\\x8c\\x91\\x91\\x1a\\x98\\x81\\x95\\x7e\\x7e\\x83\\x84\\x79\\x83\\x1e\\x59\\xfb\\x06\\x05\\xec\\x60\\x3f\\xbe\\x28\\x1b\\xfb\\x16\"\n\"\\x24\\x27\\xfb\\x10\\xfb\\x11\\xf3\\x27\\xf7\\x14\\xc9\\xc7\\xa4\\xb5\\xb0\\x1f\\xa0\\xa4\\x99\\xa1\\xa0\\xb8\\xbe\\xfb\\x12\\x18\\x73\\x94\\x92\\x84\\x9a\\x1b\"\n\"\\x99\\x95\\x95\\x98\\x92\\x89\\x92\\x87\\x96\\x1f\\xfb\\x0f\\xf7\\x4a\\x15\\x78\\x5f\\x05\\x2b\\x62\\x56\\x62\\x3b\\x1b\\x29\\x3a\\xd9\\xeb\\xeb\\xdb\\xd8\\xf0\"\n\"\\xd7\\xc6\\x64\\x45\\xaa\\x1f\\x0b\\x72\\x1d\\xca\\xa4\\xb9\\xbc\\x1e\\xa7\\xa5\\x97\\x9b\\x97\\x1a\\x99\\x6e\\x1d\\x0b\\x39\\x1d\\x97\\xa1\\x1e\\xc1\\x07\\xab\"\n\"\\x83\\x92\\x65\\x47\\x7a\\x80\\x2b\\x3a\\x1e\\x5e\\x55\\x7e\\x84\\x57\\x8a\\x08\\x73\\xf7\\x0a\\xb6\\xab\\x1d\\xfb\\x1e\\x33\\x1d\\xb6\\xfb\\xd1\\x60\\x33\\x1d\"\n\"\\xf7\\x1e\\x06\\x7b\\x1d\\x60\\xf7\\x28\\xa3\\x06\\xda\\x8a\\xa8\\x7c\\xb6\\x4d\\xcf\\x28\\x18\\x95\\x7a\\x92\\x87\\xa4\\x8a\\x08\\x0b\\xf7\\xda\\x16\\xf7\\x53\"\n\"\\x06\\xa0\\x97\\x94\\x9b\\x9c\\x7f\\x94\\x76\\x1f\\x63\\xc6\\x1d\\xf7\\x53\\x28\\x06\\x74\\x94\\x7e\\x9c\\x9c\\x94\\x98\\xa3\\x1e\\x0e\\xf8\\x47\\xf7\\xf1\\x15\"\n\"\\xc5\\x5f\\x57\\xa5\\x46\\x1b\\xfb\\x09\\x2c\\x2c\\xfb\\x08\\xfb\\x09\\xea\\x2c\\xf7\\x09\\xcf\\xc0\\xa6\\xc3\\xb7\\x1f\\xfb\\x01\\x07\\x8f\\x50\\x50\\x52\\x4d\"\n\"\\xcc\\x1d\\x0b\\xf7\\x3b\\xf8\\x04\\x15\\xcd\\x44\\x1d\\x49\\xc0\\x06\\xb9\\xa6\\xad\\xae\\x99\\x9d\\x88\\x84\\xa3\\x1e\\x87\\x96\\x8c\\xf7\\x2b\\x1d\\x76\\x67\"\n\"\\x92\\x76\\x1b\\x4d\\x59\\x50\\x43\\x1f\\x56\\x43\\x07\\x20\\x1d\\xd3\\xfb\\xd1\\x3d\\x06\\x20\\x1d\\xf7\\x58\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\x49\\x06\\x0b\"\n\"\\x15\\x7c\\x82\\x83\\x7e\\x7f\\x93\\x83\\x9b\\x1f\\xbe\\x89\\xb1\\x6d\\x65\\x1a\\x66\\x65\\x6c\\x5f\\x6c\\x75\\xf7\\x22\\x1d\\xbf\\xcf\\xc3\\xbc\\xc7\\xae\\x79\"\n\"\\xdc\\x1d\\x0e\\x52\\x1d\\xfb\\x11\\x06\\x71\\x7d\\x82\\x7b\\x7a\\x99\\x82\\xa5\\xd1\\x1d\\xb4\\x1b\\xc6\\xc5\\x9c\\xac\\xbe\\x1f\\x0b\\x15\\x95\\x93\\x8f\\x93\"\n\"\\x94\\x1a\\x99\\x81\\x95\\x7d\\x83\\x85\\x88\\x83\\x81\\x1e\\xfb\\x05\\x2b\\x05\\x80\\x83\\x87\\x84\\x81\\x1a\\x7d\\x95\\x81\\x9a\\x93\\x92\\x8e\\x93\\x94\\x1e\"\n\"\\xfb\\x06\\xd8\\x15\\x72\\x77\\x78\\x72\\x72\\x9f\\x78\\xaf\\x1d\\xf7\\x97\\x16\\x71\\x77\\x78\\x72\\x67\\x1d\\x9f\\xa3\\xa3\\x77\\x9f\\x73\\x1f\\x0e\\xce\\x1d\"\n\"\\xf8\\x5c\\xf7\\x36\\x06\\x56\\x1d\\x80\\x76\\x1e\\xfb\\x03\\xfb\\xc3\\x07\\x0b\\x15\\xfb\\x3e\\xfb\\x1b\\xfb\\x17\\xfb\\x3a\\xfb\\x36\\xf7\\x1b\\xfb\\x19\\xf7\"\n\"\\x3b\\xf7\\x3a\\xf7\\x1b\\xf7\\x19\\xf7\\x37\\xf7\\x36\\xfb\\x1b\\xf7\\x1a\\xfb\\x37\\x1f\\x85\\x58\\x15\\xf7\\x21\\xf7\\x03\\xfb\\x00\\xfb\\x1d\\xfb\\x1b\\xfb\"\n\"\\x04\\xfb\\x02\\xfb\\x1d\\xfb\\x1e\\xfb\\x04\\xf7\\x02\\xf7\\x1b\\xf7\\x1a\\xf7\\x04\\xf7\\x03\\xf7\\x1b\\x1f\\x0e\\xb0\\xbc\\x1a\\xdf\\x3f\\xcb\\x27\\x1e\\xfb\"\n\"\\x97\\x22\\x1d\\xbc\\x06\\xbf\\xfb\\x57\\x15\\xf7\\x57\\xf7\\x33\\x07\\xd0\\xc1\\x61\\x55\\x51\\x51\\x62\\x39\\x1f\\xfb\\x22\\xfb\\x9e\\x15\\xf7\\x6b\\xf7\\x24\"\n\"\\x07\\xc7\\xab\\x85\\x79\\xaa\\x1f\\xaf\\x76\\xa0\\x6b\\x69\\x1a\\x51\\x56\\x5d\\x47\\x1e\\x0e\\x06\\x75\\x80\\x38\\x1d\\xa4\\xfb\\x0f\\xfb\\x8e\\xf7\\x0f\\xea\"\n\"\\x1d\\xf7\\x18\\x06\\xa0\\x97\\x94\\x9b\\x9c\\x7f\\x94\\x76\\x1f\\x63\\xf7\\x23\\x0b\\xf7\\xd1\\xa5\\x06\\x9f\\x97\\x94\\x9b\\x9c\\x80\\x94\\x76\\x1f\\x24\\x06\"\n\"\\x75\\x80\\x38\\x1d\\xa4\\xfb\\xd1\\xfb\\x8e\\xf7\\xd1\\xea\\x1d\\x0b\\x15\\xfb\\x26\\xfb\\x04\\xfb\\x15\\xfb\\x3b\\xf7\\x07\\x1d\\x85\\x58\\x15\\xf7\\x06\\xe6\"\n\"\\xfb\\x00\\xfb\\x1d\\xfb\\x1a\\x30\\xfb\\x02\\xfb\\x04\\xfb\\x03\\x30\\xf7\\x02\\xf7\\x1b\\xf7\\x19\\xe6\\xf7\\x03\\xf7\\x01\\x1f\\x0b\\xf7\\x7d\\xf8\\x94\\x15\"\n\"\\xf7\\x9a\\xfb\\x2c\\x06\\x39\\x1d\\x96\\x9f\\x1e\\xf7\\x5f\\xfc\\x5d\\x5f\\x1d\\xe6\\xfc\\x61\\x30\\x06\\x76\\x80\\x82\\x7a\\x7a\\x96\\x83\\xa0\\x1f\\xf7\\x7e\"\n\"\\x06\\xa0\\x96\\x93\\x9c\\x9c\\x80\\x94\\x76\\x1f\\x30\\x06\\x0e\\xf7\\x08\\x1d\\xb1\\xa7\\xf7\\x3d\\x1d\\xa8\\xa6\\xae\\x1f\\xfb\\x2f\\x04\\xb4\\xaa\\x70\\x68\"\n\"\\x67\\x6c\\x6f\\x63\\x63\\x6c\\xa7\\xaf\\xae\\xaa\\xa6\\xb2\\x1f\\x0b\\xf8\\x30\\xf8\\x04\\x15\\xfc\\x1a\\x07\\x4a\\x8a\\x5e\\x5f\\x4c\\x1b\\xfb\\x14\\x06\\x75\"\n\"\\x80\\x2a\\x1d\\xf7\\x15\\x06\\xe6\\x89\\xd2\\xd2\\x89\\xe6\\x08\\xf8\\x4d\\xfb\\xb3\\x07\\x74\\x81\\x2a\\x1d\\xf7\\x87\\xf7\\x49\\x1d\\x1f\\xab\\x06\\xfb\\x99\"\n\"\\xfb\\x78\\x05\\xf7\\x78\\xd0\\x07\\x62\\x1d\\xfb\\x3e\\x76\\x1d\\xf7\\x3e\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\x46\\x06\\x0b\\x8c\\x08\\xfb\\x08\\x06\\x76\\x80\"\n\"\\x83\\x7a\\x7a\\xd2\\x1d\\x0b\\x15\\x36\\x71\\x70\\x83\\x84\\x88\\x08\\x83\\x87\\x86\\x85\\x82\\x1a\\x81\\x94\\x81\\x96\\x8e\\x8e\\x8b\\x8c\\x8e\\x1e\\xc9\\x9f\"\n\"\\x05\\xfb\\x97\\x07\\x8c\\x75\\x73\\x8b\\x7d\\x1b\\x76\\x80\\x84\\x7c\\x7f\\x95\\x83\\x98\\x1f\\xf7\\x47\\x06\\x98\\x7d\\x1d\\x47\\x06\\x0b\\x1e\\xf7\\x15\\x34\"\n\"\\x1d\\x64\\xfb\\x1a\\xf7\\x57\\xf7\\xae\\x30\\x07\\x27\\x1d\\xf7\\x22\\xfc\\x47\\x07\\x76\\x80\\x83\\x7a\\x30\\x1d\\xbc\\xfc\\x61\\x5a\\x06\\x20\\x1d\\x0b\\x06\"\n\"\\x6a\\x8a\\x87\\x88\\x88\\x6a\\x83\\xfb\\x05\\x18\\x8a\\x7e\\x8b\\x8b\\x8a\\x1a\\x7a\\x95\\x81\\x9a\\x9c\\x94\\x97\\xa4\\x8c\\x1e\\x93\\xf2\\x05\\xf7\\x13\\xfc\"\n\"\\x61\\x5d\\x06\\x35\\x1d\\xf7\\x1f\\x2f\\x1d\\x62\\x0b\\x15\\xf7\\x1a\\x3d\\x1d\\xfb\\xd4\\x22\\x1d\\xf7\\x1a\\xfc\\x61\\xfb\\x1a\\x06\\x20\\x1d\\xf7\\xd4\\x06\"\n\"\\xa0\\x97\\x21\\x1d\\x75\\x1f\\xfb\\x1a\\x06\\x0b\\x1f\\xb0\\xfb\\x12\\x06\\x60\\x46\\x59\\x7b\\x4f\\x1b\\x50\\x74\\xa1\\xc5\\x1f\\xf4\\xb9\\x79\\x1d\\xfb\\x19\"\n\"\\x33\\x1d\\xae\\x22\\x06\\x55\\x99\\x69\\xa8\\x79\\x1e\\x7b\\xa4\\xaf\\x83\\x0b\\x96\\x82\\xa0\\x1f\\xf7\\x07\\x06\\xe1\\x86\\xe2\\xdd\\x88\\xde\\x08\\xf8\\x1a\"\n\"\\xbc\\x07\\xa0\\x96\\x94\\x9c\\x9c\\x81\\x93\\x75\\x1f\\x26\\x06\\xfb\\x38\\x66\\x15\\xe8\\xd2\\x45\\x30\\x32\\x44\\x44\\x30\\x30\\x43\\xd2\\xe5\\xe3\\xd3\\xd3\"\n\"\\xe4\\x1f\\x0b\\xf7\\x66\\x15\\xfb\\x67\\xf7\\x59\\x05\\x93\\x82\\x83\\x8f\\x83\\x1b\\x7d\\x80\\x80\\x7d\\x82\\x8c\\x89\\x96\\x7f\\x1f\\xf7\\x1f\\xfb\\x35\\xfb\"\n\"\\x1f\\xfb\\x36\\x05\\x80\\x7f\\x8a\\x89\\x82\\x1a\\x7d\\x96\\x80\\x99\\x94\\x92\\x8e\\x94\\x94\\x1e\\x0b\\x15\\x84\\x86\\x89\\x84\\x84\\x1f\\x6d\\x6e\\x82\\x85\"\n\"\\x7c\\x1b\\x7f\\x82\\x8f\\x9e\\x68\\x1f\\x9d\\x6b\\x7d\\x90\\x76\\x1b\\x70\\x75\\x80\\x70\\x6e\\x1f\\x7c\\x7e\\x85\\x81\\x81\\x1a\\x7f\\x96\\x80\\x99\\x93\\x93\"\n\"\\x8e\\x91\\x90\\x1e\\xa8\\x0b\\xec\\x1d\\x8d\\x94\\x1a\\x99\\x80\\x96\\x7d\\x83\\x83\\x88\\x82\\x82\\x1e\\x0b\\xf7\\xda\\xf8\\x05\\x15\\xf7\\x0f\\x06\\xa1\\x96\"\n\"\\x57\\x1d\\xfb\\x0f\\xf7\\x2b\\x78\\x1d\\xfb\\x2b\\xfb\\x0f\\x5f\\x1d\\xf7\\x0f\\x0b\\x1b\\x4b\\x73\\xab\\xe1\\x1f\\xf7\\x31\\xbc\\x79\\x1d\\xfb\\x1f\\x06\\x35\"\n\"\\x1d\\xb1\\xfb\\x35\\x06\\x47\\x99\\x60\\xa8\\x74\\x1e\\x77\\xa4\\xb0\\x80\\x0b\\x75\\x1d\\x7d\\x7f\\x80\\x7d\\x80\\x8e\\x87\\x98\\x82\\x1f\\x0e\\x3c\\x1d\\x98\"\n\"\\xf5\\x1d\\x45\\x1d\\x7f\\xf3\\x1d\\x95\\x89\\x8f\\x58\\x1d\\x1f\\xe5\\x07\\xa0\\x83\\x95\\x79\\x7a\\x82\\x81\\x76\\x1e\\x88\\x07\\xaa\\x5f\\x55\\x9b\\x4c\\x1b\"\n\"\\xfb\\x23\\xfb\\x04\\xfb\\x05\\xfb\\x25\\x1f\\x43\\x07\\xfb\\x32\\xf7\\x01\\x24\\xf7\\x3a\\xcd\\xc9\\x9c\\xaf\\xcc\\x1e\\x0b\\xa8\\x65\\xa3\\x1f\\xa9\\x9f\\x99\"\n\"\\xa2\\xa9\\x1a\\xc0\\x5d\\xb3\\x4f\\x5a\\x52\\x6c\\x70\\x81\\x94\\x82\\x96\\x93\\x8e\\x8d\\x94\\x93\\x1e\\x9b\\x9a\\xa2\\x94\\xa8\\x1b\\xb0\\xa7\\x75\\x6d\\x6e\"\n\"\\x71\\x76\\x67\\x1f\\x0b\\x9a\\x7d\\x9f\\xf7\\x3c\\x1d\\xd9\\x16\\x44\\xfb\\x74\\x05\\x89\\x86\\x8b\\x88\\x87\\x1a\\x7a\\x9b\\x7d\\x9e\\xf7\\x3c\\x1d\\x0e\\x80\"\n\"\\x96\\x7c\\x84\\x84\\x88\\x84\\x83\\x1e\\x2a\\x2f\\x05\\x7f\\x7f\\x89\\x88\\x83\\xf7\\x3a\\x1d\\xf7\\x83\\xe7\\x15\\x98\\x97\\x8c\\x8d\\x94\\x1a\\x99\\x80\\x96\"\n\"\\x7c\\x0b\\xf7\\x21\\x1d\\xf7\\x06\\x2a\\x05\\x83\\x94\\x91\\x88\\x92\\x1b\\x9a\\x96\\x96\\x9a\\x93\\x8b\\x8c\\x82\\x93\\x1f\\x86\\x91\\x05\\x0e\\x78\\x96\\x7d\"\n\"\\x9b\\x9c\\x93\\x95\\xa2\\x1e\\xf7\\x09\\xfc\\x67\\xfb\\x09\\x07\\x75\\x94\\x80\\x9c\\x9c\\x94\\x96\\xa1\\x1e\\xcd\\xf7\\x30\\xfc\\x61\\x28\\x07\\x2b\\x1d\\x0b\"\n\"\\x80\\x76\\x1e\\xfb\\x19\\xfb\\xc1\\x07\\xf7\\xda\\xf8\\x54\\x05\\xcb\\xfb\\xfc\\xfb\\x36\\x07\\x27\\x1d\\xf7\\x03\\xf7\\x93\\x07\\xfb\\xd9\\xfc\\x53\\x05\\x4a\"\n\"\\x07\\x0b\\x3c\\x1d\\x98\\x92\\x91\\x8d\\x92\\x93\\x1e\\xf3\\xdf\\xf4\\x37\\x05\\x85\\x93\\x91\\x63\\x1d\\x0b\\x15\\x72\\x77\\x78\\x72\\xf7\\x19\\x1d\\x72\\x9f\"\n\"\\x78\\xa4\\xa4\\x9f\\x9e\\xa4\\xa3\\x77\\x9f\\x72\\x1f\\x0e\\x76\\x1d\\xf7\\x7e\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\xfb\\x19\\x06\\x0b\\x15\\x91\\x94\\x8d\\x90\"\n\"\\x91\\x1a\\x99\\x7f\\x96\\x7d\\x77\\x1d\\x85\\x83\\x89\\x86\\x85\\xf7\\x31\\x1d\\xf7\\x06\\x1d\\x99\\x97\\x96\\x99\\x94\\x8b\\x8b\\x7c\\x9a\\x1f\\x0e\\x15\\x97\"\n\"\\x95\\x8d\\x8f\\x98\\x1d\\x81\\x1a\\x7d\\x96\\x80\\x9a\\x92\\x90\\x8d\\x94\\x95\\x1e\\x0e\\x7d\\x94\\x71\\x1f\\xfb\\x18\\x4c\\x1d\\xb5\\xfb\\x56\\x06\\x0b\\x63\"\n\"\\x07\\xf7\\x13\\x1d\\xf7\\xd1\\xa5\\x06\\x9f\\x97\\x94\\x9b\\x9c\\x80\\x94\\x76\\x1f\\x0b\\xa4\\x06\\xa0\\x97\\x57\\x1d\\x24\\x26\\x1d\\xa5\\xfb\\xd1\\x63\\x25\"\n\"\\x1d\\x0b\\x77\\x83\\x75\\x72\\x1f\\x87\\x93\\x87\\x8e\\x82\\x8f\\x08\\x93\\x76\\x67\\x92\\x77\\x1b\\x4d\\x59\\x50\\x43\\x1f\\x56\\x43\\x07\\x20\\x1d\\xd3\\x0b\"\n\"\\x15\\xf7\\x68\\xfb\\x59\\x05\\x82\\x95\\x92\\x87\\x93\\x1b\\x99\\x96\\x96\\x99\\x94\\x8a\\x8d\\x80\\x97\\x1f\\xfb\\x20\\xf7\\x36\\xf7\\x20\\xf7\\x35\\x05\\x96\"\n\"\\x97\\x8c\\x0b\\x90\\x1a\\x9a\\x80\\x96\\x7c\\x77\\x1d\\x83\\x80\\x9c\\x1d\\x1f\\x90\\x81\\x89\\x8c\\x85\\x47\\x1d\\x84\\x9b\\x84\\x1f\\x81\\x0b\\xf7\\xda\\xf8\"\n\"\\x37\\x15\\xfb\\x39\\x06\\x75\\x81\\x83\\x7a\\x30\\x1d\\xf7\\x05\\xfb\\xd1\\xfb\\x2f\\x06\\x20\\x1d\\x0b\\xf7\\x5f\\xf7\\x2d\\x15\\x44\\xfb\\x8d\\x05\\x8a\\x87\"\n\"\\x8a\\x87\\x87\\x1a\\x78\\x9a\\x7c\\x9f\\x9a\\x93\\x91\\xa0\\x97\\x1e\\xf7\\x29\\xf7\\xa0\\x05\\x0e\\xf7\\x0f\\x1d\\x7b\\x07\\xb2\\x5d\\x50\\xa0\\x4c\\x1b\\x0b\"\n\"\\x7f\\x96\\x7d\\xf7\\x43\\x1d\\x81\\x82\\x88\\x85\\x83\\x1a\\x7c\\x96\\xf7\\x48\\x1d\\x82\\x88\\x87\\x80\\x1a\\x7d\\x96\\x80\\x9a\\x91\\xae\\x1d\\x85\\x94\\x91\"\n\"\\x88\\x91\\x1b\\x99\\x97\\x96\\x99\\x0b\\x15\\x96\\x94\\x8e\\x90\\x94\\x1a\\x99\\x7f\\x97\\x7d\\x84\\x84\\x88\\x83\\x82\\x1e\\xfb\\x05\\xa6\\x1d\\x0b\\x92\\x91\"\n\"\\x8d\\x92\\x93\\x1e\\xf3\\xdf\\xf4\\x37\\x05\\x85\\x93\\x91\\x88\\x91\\x1b\\x99\\x97\\x96\\x99\\x95\\x89\\x8f\\x7e\\x96\\x1f\\x0e\\x05\\xa7\\x06\\x62\\x1d\\xfb\"\n\"\\x03\\x06\\x76\\x80\\x83\\x7a\\x30\\x1d\\xa0\\x06\\xf7\\x45\\x0b\\x15\\x94\\x94\\x8f\\x91\\x93\\x1a\\x9a\\x80\\x96\\x7d\\x83\\x87\\x9d\\x1d\\x81\\x88\\x87\\x81\"\n\"\\x1a\\x7d\\x0b\\xf7\\x0b\\xbe\\x15\\x5a\\x06\\x20\\x1d\\xf7\\xc7\\x06\\xe9\\xd7\\xd1\\xe1\\xcb\\x62\\xbc\\x3d\\xa8\\x1f\\x0b\\x81\\x85\\x87\\x7f\\x82\\x1e\\x37\"\n\"\\xfb\\x0f\\x05\\x83\\x7f\\x9c\\x1d\\x77\\x1d\\x86\\x84\\x88\\x84\\x86\\xf7\\x31\\x1d\\xf7\\x43\\x1d\\x82\\x82\\x87\\x85\\x83\\x1a\\x7c\\x96\\x80\\x99\\x93\\x8f\"\n\"\\x8d\\x94\\x95\\x1e\\x0e\\x81\\x95\\x7c\\x82\\x86\\x88\\x83\\x83\\x1e\\x4d\\x55\\x5b\\x72\\x47\\x1b\\x0b\\x15\\x94\\x82\\xf7\\x0a\\x1d\\x0b\\xfb\\x39\\xf7\\x05\"\n\"\\xfb\\x16\\xf7\\x21\\xf7\\x23\\xf7\\x2d\\x1d\\x1f\\x0b\\x1e\\x6b\\x75\\x7c\\x70\\x69\\x1a\\x51\\xbd\\x5c\\xc9\\xc9\\xbd\\xba\\xc5\\xad\\x7c\\xa6\\x6b\\xa1\\x1e\"\n\"\\x49\\xf7\\x1a\\x15\\x0b\\xf9\\x66\\x15\\x94\\x82\\x86\\x8d\\x84\\x1b\\x7c\\x80\\x80\\x7d\\x82\\x8f\\x85\\x95\\x82\\x1f\\xf7\\x06\\x2a\\x05\\x83\\x0b\\xf7\\x1b\"\n\"\\x1d\\x94\\x91\\x88\\x92\\x1b\\x0b\\x94\\x97\\xa3\\x1e\\xc1\\x07\\xaa\\x84\\x93\\x6e\\x4b\\x7a\\x7b\\x21\\x59\\x1e\\x5b\\x26\\x83\\x7f\\x70\\x8a\\x08\\x86\\x0b\"\n\"\\x6e\\x06\\x37\\x1d\\xf7\\x2a\\x06\\xa0\\x97\\x21\\x1d\\x75\\x1f\\x46\\x0b\\x20\\x1d\\xbc\\xfc\\x89\\x5a\\x06\\x20\\x1d\\xf0\\x0b\\xa0\\x97\\x94\\x9b\\x9c\\x7f\"\n\"\\x94\\x76\\x1f\\x63\\xf8\\x61\\xb3\\x29\\x1d\\x0b\\x78\\x8d\\x93\\x82\\x9b\\x1b\\x9c\\x94\\x96\\xa0\\x1f\\xf7\\x02\\x07\\xa0\\x82\\x95\\x7a\\x7a\\x82\\x80\\x77\"\n\"\\x1e\\x0b\\x06\\xa0\\x97\\xf7\\x1c\\x1d\\x0b\\x15\\x94\\x81\\xf7\\x1b\\x1d\\x0b\\x75\\x80\\x82\\x7a\\x7b\\xf7\\x23\\x1d\\x0b\\x40\\x1d\\xf7\\x18\\x06\\xa0\\x97\"\n\"\\x94\\x9b\\x9c\\x7f\\x94\\x76\\x1f\\x63\\x0b\\x6c\\x72\\x73\\x6d\\x6d\\xa4\\x73\\xa9\\xaa\\xa3\\xa3\\xa9\\x0b\\xf8\\xa2\\xf7\\x57\\x15\\x93\\x07\\x92\\x07\\xf7\"\n\"\\x14\\x27\\xea\\xfb\\x1a\\xfb\\x18\\x25\\x2d\\xfb\\x0d\\x0b\\xf7\\xc4\\xf8\\x45\\x15\\xfb\\x1a\\x24\\x29\\xfb\\x13\\xfb\\x10\\xf3\\x27\\xf7\\x16\\xf7\\x16\\xf2\"\n\"\\xee\\x0b\\x77\\x7f\\x82\\x7a\\x7b\\x97\\x82\\x9f\\x1f\\xf7\\x7e\\x06\\x9f\\x97\\x94\\x9b\\x9c\\x80\\x94\\x76\\x1f\\x0b\\x1f\\xf7\\x18\\x06\\xa0\\x97\\x21\\x1d\"\n\"\\x75\\x1f\\x63\\xf7\\x84\\x06\\xdd\\x46\\xc7\\x0b\\xf7\\x30\\x1d\\xf7\\x62\\x16\\x72\\x77\\x78\\x72\\x0b\\xc1\\xb7\\xb5\\xbf\\xbe\\x5f\\xb6\\x56\\x1f\\x89\\x60\"\n\"\\x15\\xaa\\xa3\\x75\\x6e\\x6f\\x73\\x74\\x0b\\xad\\x1d\\x85\\x96\\x82\\x1f\\xf7\\x06\\x2a\\x05\\x83\\x0b\\x41\\x1d\\xfb\\x2a\\x22\\x1d\\x0b\\x88\\x84\\x84\\x1e\"\n\"\\x29\\x2f\\x05\\x7f\\x80\\x89\\x88\\x82\\x1a\\x7c\\x96\\x80\\x9a\\x92\\x0b\\x15\\xa3\\x9e\\x78\\x74\\x73\\x78\\x78\\x74\\x73\\x78\\x9e\\xa3\\xa1\\x9e\\x9f\\xa2\"\n\"\\x1f\\x0b\\x1a\\x99\\x7f\\x96\\x7d\\x85\\x85\\x88\\x85\\xf7\\x3f\\x1d\\x91\\x83\\x0b\\xa0\\x95\\xa5\\xa6\\x1f\\x9e\\x9d\\x90\\x92\\x95\\x1a\\x98\\x7f\\x96\\x7d\"\n\"\\x1e\\x0e\\x15\\x94\\x81\\x87\\x8d\\x83\\x1b\\x7d\\x80\\x80\\x7d\\x82\\x8f\\x84\\x94\\x83\\x1f\\x0b\\x93\\x9f\\x6e\\x1e\\x90\\x85\\x87\\x8c\\x86\\x1b\\x80\\x82\"\n\"\\x82\\x80\\x72\\xcb\\x6d\\x0b\\x96\\x82\\xa1\\x1f\\xf7\\x16\\x06\\xa1\\x97\\x94\\x9c\\x9b\\x7f\\x94\\x75\\x1f\\x64\\x0b\\xf8\\x6d\\x15\\x91\\x92\\x8e\\x91\\x91\"\n\"\\x1a\\x97\\x81\\x95\\x7f\\x83\\x88\\x89\\x80\\x0b\\xf3\\xdb\\x40\\x28\\x2b\\x3b\\x3e\\x26\\x26\\x3a\\xd8\\xec\\xea\\xdb\\xd9\\xee\\x1f\\x0b\\x1e\\xf7\\x5f\\xfc\"\n\"\\x41\\x07\\x76\\x80\\x82\\x7a\\x7b\\x97\\x82\\x9f\\x1f\\xe6\\x0b\\x06\\x7b\\x8c\\x7f\\x81\\x7c\\x1a\\x88\\x07\\x7c\\x97\\x81\\x9b\\x8c\\x1e\\x0b\\x24\\xc6\\x2b\"\n\"\\xec\\x54\\x1e\\xfb\\x15\\x06\\x74\\x80\\x83\\x7a\\x7b\\x98\\x0b\\x32\\x3f\\x44\\x2b\\x2a\\x3f\\xd2\\xe5\\xe3\\xd7\\xd3\\xe9\\x1f\\x0e\\xf7\\x6b\\xf7\\x27\\x07\"\n\"\\xd1\\xcb\\x58\\x53\\x50\\x3d\\x5a\\x2d\\x1f\\x0b\\x8b\\x8e\\x1b\\x98\\x96\\x96\\x99\\x96\\x84\\x94\\x7f\\x90\\x1f\\x93\\x0b\\x15\\x61\\x6b\\x6d\\x64\\x64\\xab\"\n\"\\x6c\\xb5\\x1f\\x96\\x06\\xb5\\xab\\x0b\\xf7\\x04\\xf7\\x16\\xf7\\x3a\\xf7\\x37\\xfb\\x04\\xf7\\x18\\xfb\\x1f\\x0b\\xb5\\xa7\\x1d\\x87\\x1e\\x0b\\x15\\xfb\\x22\"\n\"\\x06\\xf7\\x24\\xfb\\x81\\x05\\x79\\x95\\x96\\x84\\x0b\\x67\\x1d\\x9e\\xa4\\xa3\\x77\\x9f\\x72\\x1f\\x0b\\x1a\\x7d\\x97\\x7f\\x99\\x95\\x90\\x8e\\x99\\x94\\x1e\"\n\"\\x0e\\x80\\x9c\\x9c\\x94\\x97\\xa2\\x1e\\xac\\x07\\xaa\\x83\\x93\\x0b\\x06\\x78\\x83\\x84\\x7b\\x7a\\x93\\x84\\x9e\\x1f\\xf7\\x11\\x0b\\x93\\x6a\\x1b\\x68\\x71\"\n\"\\x7c\\x63\\x68\\x1f\\x75\\x73\\x83\\x0b\\x1f\\x8f\\x06\\xf7\\x32\\xfb\\x29\\xfb\\x46\\xfb\\x3c\\x05\\x0b\\x66\\x66\\x5e\\x5e\\x66\\xb0\\xb9\\xb8\\xaf\\xb0\\xb8\"\n\"\\x1f\\x0b\\xac\\x52\\x08\\x79\\x95\\x8f\\x87\\x92\\x1b\\x92\\x90\\x8e\\x0b\\xf7\\xe0\\xf7\\xb4\\x15\\xf7\\x43\\xf7\\x74\\x05\\x97\\x06\\x0b\\x94\\x96\\xa0\\x1f\"\n\"\\xcf\\x07\\xa0\\x82\\x96\\x7b\\x7d\\x0b\\x1a\\x7c\\x96\\x80\\x9a\\x92\\x92\\x8e\\x93\\x93\\x1e\\x0b\\x1b\\x9a\\x96\\x96\\x9a\\x93\\x8b\\x8c\\x83\\x93\\x1f\\x0b\"\n\"\\x9a\\x94\\x91\\x9e\\x96\\x1e\\xf7\\x22\\xf7\\x86\\x05\\x0b\\x71\\x69\\x6c\\x6f\\x73\\x66\\x66\\x6f\\xa3\\xaa\\xac\\x0b\\x82\\x7b\\x7a\\x97\\x82\\x9f\\x1f\\x0b\"\n\"\\x82\\x1e\\x23\\x37\\x23\\xdf\\x05\\x0b\\x95\\x9b\\x9b\\x7f\\x94\\x77\\x1f\\x0b\\x7e\\x9c\\x9c\\x94\\x99\\xa3\\x1e\\xd5\\x07\\x8a\\x0b\\x06\\x75\\x80\\x82\\x7b\"\n\"\\x7b\\x97\\x81\\xa0\\x1f\\x0b\\x83\\x86\\x88\\x83\\x82\\x1e\\xfb\\x07\\x2a\\x05\\x0b\\x07\\x76\\x7f\\x82\\x7a\\x7b\\x96\\x82\\xa1\\x1f\\x0b\\xf8\\x8b\\x16\\xf7\"\n\"\\x4c\\x07\\xa0\\x82\\x96\\x7a\\x0b\\x15\\xfb\\x6f\\x06\\xf3\\xf7\\xa9\\x05\\x93\\x06\\x0b\\xd3\\xfb\\x1e\\x18\\x72\\x99\\x8c\\x8a\\xa7\\x1b\\x0b\\x80\\x99\\x93\"\n\"\\x8e\\x8d\\x94\\x96\\x1e\\x0e\\xf7\\x92\\x15\\x45\\xfb\\x05\\xd1\\x06\\x0e\\x01\\x00\\x01\\xe3\\x01\\x05\\x00\\x01\\x0a\\x02\\x01\\x40\\x03\\x01\\x87\\xff\\x02\"\n\"\\x87\\xa0\\x02\\x8e\\x02\\x00\\x01\\x00\\x02\\x00\\x03\\x00\\x08\\x00\\x38\\x00\\xbc\\x01\\x5e\\x01\\xcb\\x02\\x46\\x02\\x4d\\x02\\x8c\\x02\\xcf\\x03\\x3a\\x03\"\n\"\\x68\\x03\\x6a\\x03\\x6c\\x03\\x72\\x03\\x9d\\x03\\xf9\\x04\\x25\\x04\\x75\\x04\\xeb\\x05\\x1b\\x05\\x6f\\x05\\xdc\\x06\\x07\\x06\\x5e\\x06\\xcb\\x06\\xde\\x06\"\n\"\\xe9\\x07\\x32\\x07\\x44\\x07\\x8e\\x07\\xdf\\x08\\x60\\x08\\x63\\x08\\x6b\\x08\\x6d\\x08\\x70\\x08\\x73\\x08\\xa8\\x08\\xab\\x08\\xad\\x08\\xb0\\x08\\xb2\\x08\"\n\"\\xb5\\x08\\xb8\\x08\\xba\\x08\\xbd\\x08\\xc0\\x08\\xc2\\x09\\x60\\x09\\x63\\x09\\x66\\x09\\x68\\x09\\x6b\\x09\\x91\\x09\\x94\\x09\\x9b\\x09\\x9e\\x09\\xa1\\x09\"\n\"\\xb4\\x09\\xdf\\x09\\xf3\\x0a\\x27\\x0a\\x33\\x0a\\x51\\x0a\\x54\\x0a\\x8e\\x0a\\x91\\x0a\\x94\\x0a\\x97\\x0a\\xdb\\x0a\\xed\\x0a\\xf0\\x0a\\xf5\\x0a\\xf7\\x0a\"\n\"\\xfa\\x0a\\xfd\\x0b\\x5e\\x0b\\x61\\x0b\\x64\\x0b\\x66\\x0b\\xb2\\x0b\\xb5\\x0b\\xb8\\x0b\\xbb\\x0b\\xbe\\x0b\\xeb\\x0b\\xee\\x0b\\xf0\\x0c\\x00\\x0c\\x03\\x0c\"\n\"\\x5f\\x0c\\x6a\\x0c\\xc5\\x0c\\xf3\\x0d\\x35\\x0d\\x93\\x0e\\x11\\x0e\\x13\\x0e\\x6c\\x0e\\xcd\\x0f\\x7a\\x10\\x1b\\x10\\x35\\x10\\x5c\\x10\\x67\\x10\\x7a\\x10\"\n\"\\x7f\\x10\\x98\\x10\\xe6\\x10\\xf1\\x10\\xf9\\x11\\x16\\x11\\x18\\x11\\x73\\x11\\x8a\\x11\\x8c\\x11\\x9e\\x11\\xb0\\x11\\xe8\\x11\\xfe\\x12\\x89\\x12\\xd9\\x12\"\n\"\\xdf\\x12\\xe5\\x12\\xf4\\x12\\xfa\\x13\\x00\\x13\\x06\\x13\\x0d\\x13\\x13\\x13\\x19\\x13\\x35\\x13\\x43\\x13\\x56\\x13\\x5c\\x13\\x5e\\x13\\x61\\x13\\xc7\\x14\"\n\"\\x1a\\x14\\x1d\\x14\\x7a\\x14\\xa5\\x14\\xa8\\x14\\xab\\x14\\xf5\\x14\\xf8\\x15\\x79\\x15\\xe7\\x15\\xee\\x16\\x02\\x16\\x43\\x16\\xe7\\x16\\xe9\\x17\\x55\\x17\"\n\"\\x9e\\x17\\xce\\x18\\x5c\\x18\\x8b\\x18\\xb7\\x18\\xe2\\x19\\x00\\x19\\x71\\x19\\xb8\\x1a\\x22\\x1a\\x2f\\x1a\\xb4\\x1b\\x1a\\x1b\\x20\\x1b\\x7e\\x1b\\x8b\\x1b\"\n\"\\xa5\\x1b\\xad\\x1b\\xb4\\x1b\\xc0\\x1b\\xe5\\x1c\\x47\\x1c\\x65\\x1c\\x93\\x1c\\x9a\\x1c\\xaf\\x1c\\xb7\\x1c\\xc3\\x1c\\xcb\\x1c\\xdd\\x1c\\xf4\\x1c\\xfc\\x1d\"\n\"\\x03\\x1d\\x12\\x1d\\x19\\x1d\\x21\\x1d\\x4b\\x1d\\x58\\x1d\\x60\\x1d\\x68\\x1d\\x7f\\x1d\\xa0\\x1d\\xa8\\x1d\\xcb\\x1d\\xdd\\x1d\\xee\\x1d\\xf6\\x1e\\x0f\\x1e\"\n\"\\x22\\x1e\\x39\\x1e\\x73\\x1e\\x7a\\x1e\\x99\\x1e\\xa1\\x1e\\xa9\\x1e\\xb8\\x1e\\xd2\\x1e\\xda\\x1e\\xf1\\x1f\\x30\\x1f\\x55\\x1f\\x5c\\x1f\\x64\\x1f\\x6b\\x1f\"\n\"\\xaa\\x1f\\xd5\\x1f\\xde\\x1f\\xe6\\x1f\\xee\\x1f\\xf6\\x1f\\xfe\\x20\\x05\\x20\\x2b\\x20\\x8a\\x20\\xc2\\x21\\x25\\x21\\x84\\x21\\xdf\\x22\\x12\\x22\\xbb\\x23\"\n\"\\x06\\x23\\x0e\\x23\\x16\\x23\\x19\\x23\\x58\\x23\\x69\\x23\\xbf\\x23\\xe9\\x23\\xeb\\x24\\x08\\x24\\x1d\\x24\\x25\\x24\\x2e\\x24\\x30\\x24\\x37\\x24\\x39\\x24\"\n\"\\x54\\x24\\x5b\\x24\\x63\\x24\\x6c\\x24\\x74\\x24\\xb7\\x24\\xd9\\x24\\xdb\\x25\\x1e\\x25\\x20\\x25\\x5f\\x25\\xbb\\x25\\xbd\\x25\\xd1\\x25\\xd9\\x25\\xe6\\x25\"\n\"\\xef\\x26\\x3e\\x26\\x74\\x26\\xd5\\x26\\xe0\\x26\\xe8\\x26\\xef\\x27\\x34\\x27\\x37\\x27\\x73\\x27\\x95\\x27\\xd4\\x27\\xde\\x28\\x0e\\x28\\x16\\x28\\x29\\x28\"\n\"\\x57\\x28\\x83\\x28\\x8a\\x28\\xa6\\x28\\xa8\\x28\\xaf\\x28\\xb7\\x28\\xc2\\x28\\xc5\\x28\\xeb\\x28\\xfb\\x29\\x03\\x29\\x76\\x29\\x79\\x29\\xe7\\x2a\\x0d\\x2a\"\n\"\\x66\\x2a\\x68\\x2a\\xc5\\x2a\\xcd\\x2a\\xd4\\x2a\\xdb\\x2a\\xdd\\x2a\\xe4\\x2b\\x44\\x2b\\x56\\x2b\\x5e\\x2b\\xa2\\x2b\\xa4\\x2b\\xde\\x2b\\xf5\\x2c\\x32\\x2c\"\n\"\\x6e\\x2c\\x76\\x2c\\x98\\x2c\\xa8\\x2d\\x0b\\x2d\\x0e\\x2d\\x62\\x2d\\xa1\\x2d\\xa9\\x2d\\xb0\\x2d\\xbe\\x2d\\xd2\\x2d\\xda\\x2d\\xee\\x2e\\x3a\\x2e\\x41\\x2e\"\n\"\\x57\\x2e\\x67\\x2e\\x70\\x2e\\x78\\x2e\\x80\\x2e\\xa2\\x2e\\xa4\\x2e\\xa7\\x2e\\xdb\\x2e\\xdd\\x2e\\xdf\\x2f\\x32\\x2f\\x34\\x2f\\x91\\x30\\x36\\x30\\xe1\\x30\"\n\"\\xe4\\x31\\x13\\x31\\x16\\x31\\x60\\x31\\x62\\x31\\x64\\x31\\x67\\x31\\x69\\x31\\x6b\\x31\\x6d\\x31\\x6f\\x31\\x72\\x32\\x17\\x32\\x19\\x32\\x43\\x32\\x5c\\x32\"\n\"\\x8b\\x32\\xc2\\x33\\x0b\\x33\\x60\\x33\\x87\\x34\\x0a\\x34\\x76\\x34\\xcd\\x34\\xfc\\x35\\x51\\x35\\xa3\\x36\\x32\\x36\\x3a\\x36\\x3d\\x36\\x63\\x36\\x65\\x36\"\n\"\\xde\\x37\\x36\\x37\\x86\\x37\\xad\\x37\\xdd\\x38\\x29\\x38\\x97\\x38\\xe9\\x38\\xec\\x39\\x38\\x39\\x3b\\x39\\x97\\x3a\\x4a\\x3a\\x98\\x3a\\x9b\\x3a\\xcb\\x3a\"\n\"\\xce\\x3b\\x16\\x3b\\x53\\x3b\\x61\\x3b\\x64\\x3b\\x80\\x3b\\x82\\x3b\\x8e\\x3b\\xba\\x3b\\xca\\x3c\\x6e\\x3c\\x70\\x3c\\x7b\\x3c\\x8e\\x3c\\xc7\\x3d\\x0c\\x3d\"\n\"\\x4b\\x3d\\x8b\\x3d\\xc7\\x3e\\x27\\x3e\\x75\\x3e\\xdc\\x3e\\xf6\\x3f\\x3e\\x3f\\x55\\x3f\\xba\\x40\\x04\\x40\\x09\\x40\\x65\\x40\\x67\\x40\\xcc\\x41\\x18\\x41\"\n\"\\x52\\x41\\x70\\x41\\xef\\x42\\x13\\x42\\x15\\x42\\x5a\\x43\\x52\\x43\\xf0\\x44\\x7f\\x44\\x82\\x44\\x9a\\x44\\xaa\\x44\\xde\\x45\\x12\\x45\\x6c\\x45\\xe7\\x46\"\n\"\\x25\\x46\\x74\\x46\\xba\\x47\\x00\\x47\\x0c\\x47\\x5d\\x47\\xa2\\x47\\xf0\\x48\\x53\\x48\\x5a\\x48\\x61\\x48\\x72\\x48\\x7b\\x48\\xcb\\x49\\x41\\x49\\xad\\x49\"\n\"\\xcc\\x4a\\x1b\\x4a\\x74\\x4a\\x98\\x4a\\x9e\\x4a\\xa6\\x4a\\xbd\\x4a\\xc6\\x4b\\x04\\x4b\\x0b\\x4b\\x45\\x4b\\xa8\\x4b\\xab\\x4b\\xb2\\x4b\\xca\\x4c\\x1f\\x4c\"\n\"\\x22\\x4c\\x2e\\x4c\\x48\\x4c\\x62\\x4c\\xa8\\x4d\\x13\\x4d\\x52\\x4d\\x59\\x4d\\x60\\x4d\\x8b\\x4d\\x93\\x4d\\xe9\\x4e\\x41\\x4e\\x4b\\x4e\\x81\\x4e\\xa5\\x4e\"\n\"\\xad\\x4e\\xd8\\x4e\\xdf\\x4f\\x4a\\x4f\\x9a\\x4f\\xc8\\x4f\\xf6\\x50\\x57\\x50\\xc0\\x50\\xe3\\x50\\xed\\x51\\x0a\\x51\\x39\\x51\\x47\\x51\\x4e\\x51\\x6d\\x51\"\n\"\\xbc\\x51\\xc8\\x51\\xe9\\x51\\xf1\\x52\\x22\\x52\\x44\\x52\\x4b\\x52\\x67\\x52\\xba\\x53\\x63\\x53\\x9e\\x54\\x18\\x54\\x36\\x54\\x78\\x55\\x01\\x55\\x09\\x55\"\n\"\\x79\\x55\\x81\\x55\\x89\\x56\\x11\\x56\\x63\\x56\\xa6\\x56\\xae\\x56\\xbe\\x56\\xcf\\x56\\xd2\\x56\\xf0\\x56\\xf3\\x57\\x1e\\x57\\x2b\\x57\\x32\\x57\\x84\\x58\"\n\"\\x06\\x58\\x7d\\x58\\xa4\\x58\\xdc\\x59\\x31\\x59\\x84\\x59\\xd1\\x5a\\x3c\\x5a\\x44\\x5a\\x7a\\x5a\\x81\\x5a\\x91\\x5a\\xa5\\x5a\\xf0\\x5a\\xfd\\x5b\\x85\\x5b\"\n\"\\xa2\\x5b\\xb6\\x5b\\xef\\x5c\\x25\\x5c\\xd1\\x5d\\x17\\x5d\\x94\\x5e\\x0e\\x5e\\x56\\x5e\\xa0\\x5e\\xc1\\x5f\\x22\\x5f\\x68\\x5f\\x6e\\x5f\\x76\\x5f\\x8f\\x5f\"\n\"\\x96\\x5f\\xbb\\x5f\\xbc\\x5f\\xbe\\x5f\\xce\\x5f\\xd5\\x5f\\xdb\\x5f\\xdd\\x5f\\xfb\\x60\\x5f\\x60\\xa0\\x61\\x3e\\x61\\x64\\x61\\x8b\\x61\\xd7\\x61\\xfa\\x62\"\n\"\\x26\\x62\\x54\\x62\\xfb\\x63\\xba\\x64\\x87\\x64\\xec\\x65\\x55\\x65\\x82\\x65\\xd4\\x66\\x4f\\x66\\x94\\x67\\x00\\x67\\x28\\x67\\x59\\x67\\xc6\\x68\\x1c\\x68\"\n\"\\x1f\\x68\\x3c\\x68\\x6b\\x68\\x96\\x68\\xf9\\x69\\x49\\x69\\x6d\\x69\\x8a\\x69\\xe0\\x6a\\x3a\\x6a\\x86\\x6a\\xbd\\x6a\\xc0\\x6a\\xfe\\x6b\\x37\\x6b\\x88\\x6b\"\n\"\\x90\\x6b\\x98\\x6b\\xe5\\x6b\\xe7\\x6b\\xf1\\x6c\\x03\\x6c\\x0f\\x6c\\xea\\x6d\\x4e\\x6d\\x50\\x6d\\x52\\x6d\\x69\\x6d\\x87\\x6d\\xe2\\x6d\\xf8\\x6e\\x59\\x6e\"\n\"\\x86\\x6e\\xd3\\x6e\\xd6\\x6e\\xef\\x6f\\x37\\x6f\\x47\\x6f\\x4f\\x6f\\x56\\x6f\\x5d\\x6f\\x64\\x6f\\x6c\\x6f\\x74\\x70\\x08\\x70\\x1d\\x70\\x24\\x70\\x2b\\x70\"\n\"\\x34\\x70\\x99\\x0e\\x0e\\xf7\\xec\\xa2\\x0a\\x0e\\xf7\\x20\\xf8\\xef\\x15\\xae\\xfb\\x92\\x05\\x6f\\x8f\\x96\\x7f\\x9f\\x1b\\xa0\\x96\\x97\\xa7\\x8f\\x1f\\xad\"\n\"\\xf7\\x92\\x05\\xb3\\x16\\xae\\xfb\\x92\\x05\\x6f\\x8f\\x96\\x7f\\x9f\\x1b\\xa0\\x96\\x97\\xa7\\x8f\\x1f\\xad\\xf7\\x92\\x05\\x0e\\xf8\\x1f\\xf7\\xf1\\x15\\xe1\"\n\"\\x27\\x0a\\x39\\x06\\x9a\\xf7\\x68\\x05\\x93\\x07\\x99\\x80\\x96\\x7c\\x7c\\x82\\x81\\x77\\x8a\\x1e\\x7b\\xfb\\x6b\\x05\\x3b\\x06\\x9a\\xf7\\x68\\x05\\x9f\\x8d\"\n\"\\x80\\x98\\x7b\\x1b\\x7b\\x82\\x81\\x77\\x8a\\x1f\\x7c\\xfb\\x6b\\x05\\x3f\\x2e\\x1d\\xd3\\x06\\x83\\xfb\\x05\\x05\\x36\\x20\\x0a\\xdc\\x06\\x7c\\xfb\\x68\\x05\"\n\"\\x82\\x07\\x7d\\x8c\\x95\\x80\\x99\\x1b\\x9b\\x94\\x95\\x9f\\x8c\\x1f\\x9b\\xf7\\x6c\\x05\\xdb\\x06\\x7c\\xfb\\x68\\x8a\\x84\\x05\\x7d\\x8a\\x97\\x7e\\x9a\\x1b\"\n\"\\x9b\\x93\\x95\\x9f\\x8d\\x1f\\x9a\\xf7\\x6c\\x05\\xd9\\x21\\x0a\\x41\\x06\\x60\\xf7\\x05\\x15\\x82\\xfb\\x05\\x05\\x3b\\x06\\x93\\xf7\\x05\\x05\\x0e\\xf7\\xa7\"\n\"\\xf8\\xd3\\x15\\x38\\x81\\x4e\\x4e\\x42\\x1a\\x64\\x9e\\x66\\xaa\\x78\\x1e\\xa5\\x7a\\xa9\\x81\\xcb\\x7f\\xcf\\x7e\\x99\\x87\\xa1\\x7e\\x08\\xa2\\x7e\\x98\\x73\"\n\"\\x6f\\x1a\\x51\\x50\\x61\\x38\\x44\\x4b\\xac\\xb3\\x86\\x1e\\x89\\x9c\\x8b\\x8b\\x86\\x90\\x08\\x8f\\x86\\x84\\x8e\\x85\\x1b\\x7a\\x82\\x80\\x77\\x1f\\x3d\\x07\"\n\"\\x77\\x94\\x80\\x9c\\x9c\\x93\\x96\\x9f\\x1e\\x8f\\x07\\xa3\\x74\\xc0\\x77\\xb2\\x89\\x08\\xfb\\x04\\x07\\x27\\x1d\\xf7\\x04\\x07\\xf0\\x96\\xcc\\xc5\\xda\\x1a\"\n\"\\xb7\\x78\\xaf\\x6a\\xa1\\x1e\\x6f\\x9e\\x71\\x93\\x42\\x99\\x50\\x96\\x77\\x90\\x78\\x97\\x08\\x76\\x96\\x7f\\xa1\\xa3\\x1a\\xc0\\xc1\\xb6\\xcd\\xc5\\xc1\\x6f\"\n\"\\x6b\\x91\\x1e\\x78\\x8e\\x92\\x84\\x5c\\x0a\\xc6\\x07\\xa0\\x83\\x95\\x7a\\x7d\\x82\\x82\\x7d\\x88\\x1e\\x6e\\xa1\\x71\\x94\\x64\\x90\\x08\\xb8\\x34\\x1d\\x0e\"\n\"\\xf7\\xff\\xf7\\x83\\x15\\x44\\x53\\x53\\x45\\x46\\xc3\\x53\\xd0\\xd0\\xc3\\xc3\\xd0\\xd0\\x53\\xc4\\x48\\x1f\\x88\\x60\\x15\\xba\\xaf\\x67\\x5c\\x5e\\xf7\\x36\"\n\"\\x1d\\xfb\\x0d\\xf8\\x32\\x15\\x44\\x53\\x54\\x44\\x46\\xc3\\x53\\xd0\\xd0\\xc3\\xc3\\xd1\\xcf\\x53\\xc4\\x48\\x1f\\x88\\x60\\x15\\xba\\xaf\\x67\\x5d\\x5d\\xf7\"\n\"\\x36\\x1d\\xf7\\x98\\xfb\\x76\\x15\\x98\\x8f\\x91\\x92\\x96\\x1a\\x96\\x82\\x95\\x81\\x88\\x86\\x8a\\x89\\x86\\x1e\\xfc\\x0f\\xfb\\x0d\\x05\\x7d\\x87\\x85\\x85\"\n\"\\x80\\x1a\\x80\\x95\\x81\\x95\\x90\\x8e\\x8b\\x8d\\x90\\x1e\\x0e\\xf8\\x1a\\x16\\xc8\\x21\\x0a\\x69\\x06\\x73\\xae\\x9d\\xa6\\x9e\\xb6\\x98\\xbb\\x19\\x93\\x06\"\n\"\\x4f\\x1d\\x5d\\x06\\x7f\\x5b\\x7f\\x67\\x78\\x67\\x20\\xf7\\x3a\\x18\\x6d\\xbb\\x7f\\xa5\\xa0\\x1a\\xb1\\xb0\\xae\\xb3\\xa2\\x9b\\x84\\x77\\xa2\\x1e\\xae\\x9d\"\n\"\\x05\\x99\\x92\\x90\\x92\\x96\\x1a\\x99\\x7f\\x97\\x7e\\x86\\x86\\x89\\x87\\x83\\x1e\\x83\\x87\\x05\\x98\\x75\\x76\\x91\\x74\\x1b\\x45\\x51\\x54\\x48\\x6d\\x90\"\n\"\\x80\\xb5\\x48\\x1f\\x49\\x76\\x61\\x52\\x47\\x1a\\x34\\xd0\\x42\\xdd\\xb8\\xaf\\x9e\\xb3\\xa9\\x1e\\x6e\\xb9\\x15\\x69\\x75\\x6e\\x77\\x6b\\x1b\\x56\\x5e\\xbe\"\n\"\\xc6\\xbd\\xaa\\xb2\\xbb\\x97\\x1f\\x0e\\xf7\\x5f\\xf8\\xef\\xaa\\x0a\\x0e\\xf8\\x4a\\xf8\\xef\\x15\\x7f\\x84\\x84\\x6f\\x78\\x1f\\x43\\xfb\\x02\\x64\\xfb\\x07\"\n\"\\x25\\x1a\\x27\\xad\\x22\\xd0\\xfb\\x01\\x1e\\x63\\xa3\\x94\\x82\\x98\\x1b\\x9a\\x96\\x96\\x99\\x90\\x8a\\x8d\\x88\\x91\\x1f\\x47\\xf7\\x0c\\x6c\\xef\\xf4\\x1a\"\n\"\\xf3\\xaa\\xf0\\xcf\\xf7\\x0b\\x1e\\x8e\\x91\\x8c\\x8d\\x90\\xa4\\x1d\\xf7\\x3c\\xf8\\xef\\x15\\x7c\\x80\\x80\\x7d\\x86\\x8c\\x89\\x8e\\x85\\x1f\\xcf\\xfb\\x0b\"\n\"\\xaa\\x26\\x23\\x1a\\x22\\x6c\\x27\\x47\\xfb\\x0c\\x1e\\x88\\x85\\x8a\\x89\\x86\\x1a\\x7d\\x97\\x80\\x99\\x97\\x92\\x92\\xa7\\x9e\\x1e\\xd3\\xf7\\x03\\xb2\\xf7\"\n\"\\x06\\xf1\\x1a\\xee\\x69\\xf4\\x46\\xf7\\x02\\x1e\\xb2\\x73\\x82\\x95\\x7e\\x1b\\x0e\\xf7\\xa6\\xf8\\x4e\\x15\\xfb\\x12\\xb2\\x05\\x8d\\x84\\x87\\x8c\\x87\\x1b\"\n\"\\x7e\\x7f\\x80\\x7d\\x7d\\x92\\x84\\x9c\\x87\\x1f\\xf7\\x12\\x63\\x3e\\x23\\x05\\x83\\x81\\x8a\\x88\\x84\\x1a\\x7d\\x97\\x80\\x99\\x95\\x91\\x8f\\x97\\x93\\x1e\"\n\"\\xd9\\xf3\\xd8\\x23\\x05\\x7e\\x94\\x90\\x88\\x95\\x1b\\x9a\\x96\\x96\\x99\\x91\\x88\\x91\\x85\\x93\\x1f\\x3f\\xf3\\xf7\\x12\\xb3\\x05\\x9d\\x90\\x92\\x92\\x99\"\n\"\\x1a\\x98\\x7f\\x97\\x7f\\x88\\x82\\x89\\x8a\\x86\\x1e\\xfb\\x12\\x63\\x05\\xf7\\x14\\x07\\xa1\\x82\\x96\\x7a\\x7a\\x82\\x80\\x75\\x1e\\x0e\\xf7\\xda\\xf7\\x93\"\n\"\\x15\\xf7\\x43\\x27\\x0a\\xfb\\x43\\xf7\\x54\\x06\\x4f\\x0a\\xfb\\x53\\xfb\\x43\\x07\\x82\\x89\\x05\\x7c\\x89\\x83\\x83\\x7d\\x1a\\x7a\\x96\\x82\\xa0\\x1e\\xf7\"\n\"\\x43\\xfb\\x55\\x06\\x39\\x1d\\x96\\x9f\\x1e\\x0e\\xf0\\x1d\\xc9\\x0a\\xf7\\xbb\\xf7\\x10\\x6a\\x0a\\xf8\\x7b\\xf9\\x04\\x15\\x90\\x95\\x8c\\x8d\\x90\\x1a\\x98\"\n\"\\x7f\\x96\\x7d\\x7f\\x84\\x86\\x7c\\x84\\x1e\\xfb\\xdc\\xfd\\x3f\\x05\\x87\\x83\\x8a\\x87\\x86\\x1a\\x7e\\x97\\x80\\x99\\x97\\x92\\x90\\x9a\\x92\\x1e\\x0e\\xf8\"\n\"\\x81\\xf7\\xf2\\x15\\xf7\\x32\\x3d\\xf7\\x00\\xfb\\x06\\xfb\\x07\\x3d\\xfb\\x00\\xfb\\x32\\x1e\\x29\\x07\\xfb\\x33\\xd9\\xfb\\x00\\xf7\\x07\\xf7\\x06\\xd9\\xf7\"\n\"\\x00\\xf7\\x33\\x1e\\xfb\\xe1\\xe7\\x15\\xc9\\x9d\\xcc\\xa8\\xb8\\x1e\\xab\\xa0\\xab\\x9c\\xb4\\x1b\\xb3\\xab\\x7a\\x6b\\xa0\\x1f\\xa8\\x5e\\x9d\\x4a\\x4d\\x1a\"\n\"\\x34\\x07\\x4e\\x79\\x49\\x6e\\x5e\\x1e\\x6b\\x76\\x6a\\x7a\\x64\\x1b\\x63\\x6a\\x9c\\xab\\x76\\x1f\\x6e\\xb8\\x79\\xcd\\xc8\\x1a\\x0e\\xf7\\xdb\\xf8\\xf9\\x15\"\n\"\\xfb\\x54\\x4f\\x05\\x78\\x85\\x85\\x85\\x7d\\x1a\\x7e\\x97\\x7f\\x97\\x8d\\x95\\x8d\\x8c\\x8f\\x1e\\xf7\\x11\\xb2\\x05\\xfc\\x81\\xfb\\x1a\\x07\\x2b\\x1d\\xf7\"\n\"\\xd4\\x23\\x1d\\xfb\\x1a\\x06\\x0e\\xf7\\x1b\\xbe\\x15\\xc1\\xb9\\xc9\\xc4\\xde\\xdb\\x08\\xf7\\x12\\xf7\\x0c\\x9f\\xa8\\xc6\\x1a\\xe8\\x32\\xdc\\x26\\x4d\\x51\"\n\"\\x6f\\x5b\\x65\\x1e\\x77\\x72\\x7e\\x6d\\x78\\x1a\\x7f\\x96\\x80\\x99\\x98\\x93\\x92\\x9b\\x8f\\x1e\\xc5\\x9c\\xc6\\xb4\\xcc\\x1b\\xd5\\xcb\\x52\\x4a\\x60\\x79\"\n\"\\x72\\x2e\\x31\\x1f\\x38\\x3c\\x3f\\x45\\x45\\x4e\\x82\\x83\\x18\\x48\\xf8\\x29\\xdc\\x07\\x4f\\x0a\\x6d\\x07\\x0e\\xf7\\xab\\xf7\\xf9\\x15\\x76\\x80\\x81\\x7b\"\n\"\\x7b\\x96\\x82\\xa0\\x1f\\xeb\\x89\\xd8\\x4f\\x40\\x1a\\x43\\x42\\x4e\\x33\\x53\\x58\\x9d\\xae\\x5b\\x1e\\x91\\x82\\x86\\x8d\\x84\\x1b\\x7e\\x80\\x80\\x7e\\x7b\"\n\"\\x98\\x7e\\xaf\\x79\\x1f\\x6f\\xbf\\xba\\x7e\\xbe\\x1b\\xf7\\x0a\\xeb\\xde\\xf0\\xcc\\x5d\\xc9\\x45\\xaa\\x1f\\xc8\\xa8\\xad\\xba\\xc3\\x1a\\xe4\\x3c\\xcf\\x24\"\n\"\\x56\\x58\\x7b\\x6d\\x63\\x1e\\x74\\x79\\x7d\\x7a\\x7f\\x1a\\x7e\\x96\\x80\\x99\\x93\\x91\\x8e\\x91\\x90\\x1e\\xb3\\xaf\\xb4\\x9c\\xc7\\x1b\\xd5\\xc3\\x5d\\x4f\"\n\"\\x6b\\x79\\x6c\\x6e\\x78\\x1f\\x7c\\x73\\x77\\x86\\x64\\x1b\\x0e\\xf8\\x07\\xf7\\x3a\\x15\\xfb\\x07\\x44\\x07\\x37\\x1d\\xf7\\x2c\\x39\\x0a\\x6e\\xf7\\x07\\xa8\"\n\"\\x23\\x1d\\x6e\\xf8\\x16\\x2e\\x06\\xfb\\x7a\\xfc\\x14\\x05\\x56\\x07\\xf7\\xa3\\xbe\\x15\\xfb\\x6d\\x06\\xf7\\x5e\\xf7\\xe3\\x05\\x9a\\x06\\x0e\\xf7\\x58\\xf8\"\n\"\\xbc\\x15\\xf7\\x80\\x27\\x0a\\xfb\\xb4\\xfb\\xa1\\x06\\x7b\\x95\\x80\\x9a\\x91\\x90\\x8d\\x91\\x98\\x1e\\xa1\\xb7\\xb3\\x95\\xb3\\x1b\\xdc\\xc2\\x51\\x36\\x27\"\n\"\\x4a\\x47\\x2c\\x53\\x57\\xa1\\xb6\\x5b\\x1f\\x93\\x82\\x86\\x8d\\x84\\x1b\\x7d\\x80\\x80\\x7d\\x7c\\x99\\x7c\\xae\\x75\\x1f\\x6a\\xbe\\xbd\\x7b\\xc1\\x1b\\xf7\"\n\"\\x0f\\xe2\\xe5\\xf7\\x13\\xf7\\x06\\x3e\\xdd\\x21\\x60\\x69\\x83\\x78\\x5a\\x1f\\x0e\\xf7\\x4a\\xf7\\x9a\\x15\\x8a\\x95\\x8b\\x94\\x90\\x1a\\xc7\\x9b\\xc7\\xa8\"\n\"\\xb5\\x1e\\xd3\\xbb\\xd8\\xb8\\xd6\\x1b\\x9d\\x9a\\x89\\x86\\x95\\x1f\\x86\\x95\\x8f\\x8a\\x91\\x1b\\x99\\x95\\x96\\x98\\xa2\\x66\\x9c\\x5a\\x4a\\x49\\x72\\x5d\"\n\"\\x55\\x1f\\x40\\x4c\\x67\\x36\\xfb\\x09\\x1a\\xfb\\x41\\xe0\\xfb\\x0e\\xf7\\x0e\\xef\\xd9\\xe0\\xf7\\x01\\xf2\\x3d\\xe0\\x2c\\x49\\x50\\x65\\x48\\x67\\x1e\\x92\"\n\"\\x42\\x15\\xa2\\xb3\\x96\\x9c\\x99\\x9b\\x08\\xae\\xab\\xb1\\x9e\\xaf\\x1b\\xcd\\xc2\\x4d\\x40\\x3a\\x55\\x4d\\x44\\x40\\x5b\\xbb\\xf4\\x70\\x1f\\x0e\\xf8\\x45\"\n\"\\xf8\\xb0\\x15\\xfb\\x34\\xfc\\x8a\\x05\\x89\\x85\\x8a\\x87\\x87\\x1a\\x7d\\x96\\x80\\x99\\x99\\x91\\x91\\x9d\\x91\\x1e\\xf7\\x37\\xf8\\x92\\x05\\xd1\\xfc\\x14\"\n\"\\x3b\\x07\\x58\\x0a\\xa8\\xf7\\xad\\x07\\x0e\\xf8\\x18\\xf7\\xcc\\x15\\xca\\xac\\xaa\\xb9\\xc5\\x1a\\xe6\\x38\\xd7\\x28\\x28\\x38\\x3f\\x30\\x51\\xab\\x5d\\xca\"\n\"\\x6a\\x1e\\x48\\x6b\\x65\\x55\\x4c\\x1a\\x29\\xe1\\x3b\\xf6\\xf5\\xe1\\xdb\\xed\\xca\\x64\\xc2\\x49\\xaa\\x1e\\x31\\xf7\\x91\\x15\\xd5\\xc5\\x57\\x49\\x4d\\x52\"\n\"\\x5b\\x42\\x42\\x52\\xbb\\xc9\\xcc\\xc5\\xc0\\xd1\\x1f\\xfb\\xaa\\x04\\xdd\\xc8\\x56\\x44\\x44\\x4d\\x53\\x3d\\x3c\\x4d\\xc3\\xd2\\xd0\\xc8\\xc2\\xd8\\x1f\\x0e\"\n\"\\xf8\\x65\\xf7\\xe7\\x15\\x8c\\x81\\x8b\\x82\\x87\\x1a\\x4e\\x7b\\x4f\\x6e\\x61\\x1e\\x43\\x5b\\x3e\\x5e\\x40\\x1b\\x79\\x7c\\x8e\\x90\\x81\\x1f\\x90\\x81\\x87\"\n\"\\x8c\\x85\\x1b\\x7d\\x81\\x80\\x7d\\x74\\xaf\\x7a\\xbd\\xcc\\xcd\\xa4\\xb9\\xc1\\x1f\\xd6\\xca\\xaf\\xe0\\xf7\\x08\\x1a\\xf7\\x42\\x36\\xf7\\x0e\\xfb\\x0e\\x27\"\n\"\\x3d\\x36\\xfb\\x01\\x24\\xd9\\x36\\xea\\xcd\\xc5\\xb1\\xce\\xb0\\x1e\\x84\\xd4\\x15\\x74\\x63\\x80\\x7a\\x7c\\x7b\\x08\\x69\\x6c\\x65\\x77\\x67\\x1b\\x49\\x54\"\n\"\\xc9\\xd6\\xdc\\xc1\\xc9\\xd2\\xd6\\xba\\x5b\\x22\\xa7\\x1f\\x0e\\xf7\\xbb\\xf7\\x10\\xf7\\x2c\\x1d\\xaa\\xb2\\xb2\\x6b\\xa9\\x61\\x1f\\x80\\xf7\\xba\\x6a\\x0a\"\n\"\\xf7\\x63\\xf7\\x2d\\xaa\\x0a\\x39\\xf7\\x9d\\x6a\\x0a\\xc7\\xf7\\xad\\x15\\xf8\\x3e\\xfb\\x7d\\x05\\x88\\x90\\x91\\x8a\\x90\\x1b\\x93\\x93\\x90\\x92\\x8f\\x1f\"\n\"\\x8d\\x8e\\x05\\x8d\\x8f\\x8c\\x8f\\x8f\\x1a\\x94\\x86\\x92\\x80\\x91\\x1e\\xfb\\xed\\xf7\\x50\\xf7\\xee\\xf7\\x50\\x05\\x96\\x91\\x90\\x92\\x94\\x1a\\x8f\\x8a\"\n\"\\x8f\\x88\\x8f\\x1e\\x8a\\x8e\\x05\\x93\\x86\\x83\\x90\\x83\\x1b\\x87\\x86\\x89\\x88\\x85\\x1f\\x0e\\xf8\\x9e\\xf7\\xdb\\x15\\x57\\x0a\\xfc\\x50\\x26\\x1d\\xf8\"\n\"\\x50\\xfb\\x21\\x6b\\x0a\\x0e\\xf8\\xaa\\xf7\\xad\\x15\\xfc\\x3f\\xf7\\x7d\\x05\\x8e\\x84\\x87\\x8d\\x87\\x1b\\x82\\x84\\x86\\x83\\x86\\x1f\\x8a\\x88\\x05\\x88\"\n\"\\x87\\x8a\\x87\\x87\\x1a\\x82\\x90\\x84\\x96\\x85\\x1e\\xf7\\xee\\xfb\\x50\\xfb\\xee\\xfb\\x50\\x05\\x80\\x85\\x86\\x84\\x82\\x1a\\x88\\x8d\\x86\\x8d\\x87\\x1e\"\n\"\\x8c\\x88\\x05\\x84\\x8f\\x94\\x86\\x92\\x1b\\x91\\x90\\x8c\\x8e\\x91\\x1f\\x0e\\xf7\\xdc\\xf7\\x88\\x15\\xf7\\x10\\xc5\\xb4\\xb6\\xd6\\x1a\\xe9\\x41\\xc9\\xfb\"\n\"\\x02\\x52\\x77\\x86\\x64\\x30\\x1e\\x7f\\x86\\x05\\x45\\x07\\x27\\x1d\\xb0\\x07\\xa3\\xbe\\xa8\\x92\\xb6\\x1b\\xdc\\xc3\\x60\\x4c\\x56\\x5d\\x63\\xfb\\x0b\\x5a\"\n\"\\x1f\\x45\\x07\\x39\\x1d\\x95\\xa0\\x1e\\x62\\xfb\\x05\\x15\\x66\\x72\\x75\\x6b\\x6b\\xa4\\x74\\xb0\\x1f\\xa7\\x06\\xaf\\xa4\\xa2\\xab\\xab\\x72\\xa1\\x67\\x1f\"\n\"\\x0e\\xf8\\x31\\xf7\\x22\\x15\\xb2\\x06\\xa0\\x96\\x93\\x9d\\x97\\x84\\x94\\x7f\\x8e\\x1f\\xf7\\x9f\\x07\\xe8\\x44\\xd1\\x2e\\xfb\\x08\\x36\\xfb\\x03\\xfb\\x2c\"\n\"\\x1e\\xfb\\x33\\x07\\x43\\x9e\\x4d\\xb0\\x58\\x1e\\x57\\xb0\\xb8\\x73\\xc9\\x1b\\xd9\\xd8\\xac\\xad\\x98\\x80\\x96\\x7c\\x85\\x86\\x89\\x87\\x86\\x1f\\x73\\x71\"\n\"\\x6a\\x80\\x5a\\x1b\\x5b\\x6a\\x9c\\xb0\\x71\\x1f\\x6d\\xb6\\x7b\\xc2\\xc6\\x1a\\xf7\\x30\\x07\\xf7\\x12\\xc9\\xe4\\xe2\\xcc\\xba\\x5c\\x4a\\x1e\\x63\\x07\\x23\"\n\"\\x88\\x43\\x4f\\x37\\x1a\\x42\\xc7\\x54\\xdd\\x96\\x94\\x8c\\x8d\\x99\\x1e\\xbd\\x04\\x89\\x7b\\x86\\x8b\\x81\\x1b\\x54\\x65\\xab\\xb9\\xc1\\xc0\\xb4\\xd2\\x8c\"\n\"\\x1f\\x0e\\x28\\x1d\\x0e\\xf7\\x01\\x1d\\xbf\\xaa\\xa4\\xc4\\x1d\\x90\\x0a\\x9b\\x0a\\x0e\\x25\\x0a\\x0e\\xf7\\x3f\\xf7\\x9e\\x15\\xf7\\x1a\\x64\\x06\\x76\\x94\"\n\"\\x81\\x9c\\x9c\\x94\\x96\\x9f\\x1e\\xf7\\x15\\x34\\x1d\\x64\\xfb\\x1a\\xf7\\x57\\xf7\\xc3\\x30\\x2b\\x0a\\xf7\\x22\\xfc\\x5c\\x07\\x20\\x1d\\xbc\\xfc\\x61\\x5a\"\n\"\\x20\\x0a\\xf7\\x7e\\x21\\x0a\\xfb\\x19\\x06\\x0e\\x7f\\x1d\\x0e\\x80\\x1d\\x23\\x0a\\x0e\\x9d\\x0a\\xb5\\x1d\\x0e\\x41\\x0a\\x0e\\x81\\x1d\\x49\\x1d\\x0e\\x2d\"\n\"\\x1d\\x0e\\x84\\x1d\\xf7\\xc7\\x7c\\x15\\xf7\\x22\\x90\\xf5\\xf7\\x12\\xf7\\x38\\x1a\\xf7\\x39\\xfb\\x04\\xf7\\x16\\xfb\\x23\\xfb\\x22\\xfb\\x04\\xfb\\x16\\xfb\"\n\"\\x39\\x37\\xa8\\x3e\\xc0\\x52\\x1e\\xab\\x68\\xa7\\x7a\\xbc\\x7a\\x3a\\x52\\x18\\x83\\x85\\x86\\x84\\x83\\x1a\\x7c\\x96\\x7f\\x99\\x8e\\x8f\\x8c\\x8c\\x8f\\x1e\"\n\"\\x98\\xba\\xca\\x95\\xa8\\x1b\\xa5\\x99\\x88\\x81\\xa6\\x1f\\x81\\xa9\\x96\\x88\\x9c\\x1b\\xa4\\xa3\\x92\\x9d\\xab\\x1f\\xa0\\x96\\x92\\x93\\x97\\x1a\\x9a\\x80\"\n\"\\x96\\x7d\\x86\\x86\\x8a\\x87\\x86\\x1e\\x77\\x6c\\x7b\\x85\\x77\\x1b\\x7f\\x84\\x8d\\x93\\x73\\x1f\\x97\\x6d\\x74\\x8f\\x6c\\x1b\\x7b\\x82\\x8a\\x88\\x77\\x1f\"\n\"\\xa4\\xf8\\xc8\\x15\\xf7\\x07\\xe5\\xfb\\x00\\xfb\\x1d\\xfb\\x1a\\x30\\xfb\\x02\\xfb\\x03\\xfb\\x04\\x30\\xf7\\x02\\xf7\\x1b\\xf7\\x19\\xe6\\xf7\\x03\\xf7\\x01\"\n\"\\x1f\\x0e\\x47\\x0a\\x0e\\x69\\x1d\\x0e\\x61\\x0a\\x31\\x1d\\x0e\\xf7\\x9c\\x16\\xca\\x06\\xf7\\x66\\xf8\\x94\\x05\\xa6\\x06\\xa1\\x96\\xf7\\x1c\\x1d\\xd2\\x06\"\n\"\\xfb\\x4f\\xfc\\x5c\\xfb\\x47\\xf8\\x5c\\x05\\xcf\\x44\\x1d\\xfb\\x2b\\x22\\x1d\\xa7\\x06\\x0e\\x59\\x1d\\x0e\\xf7\\x38\\x1d\\xa0\\x97\\xb4\\x1d\\x31\\x0a\\x0e\"\n\"\\x6c\\x1d\\x0e\\xf7\\xdb\\xf8\\xbc\\x15\\xe7\\x23\\x1d\\xfb\\x24\\xfd\\x69\\xf7\\x24\\x23\\x1d\\x2f\\x06\\x0e\\xf7\\x34\\xf9\\x19\\x15\\x9a\\x84\\x84\\x90\\x7f\"\n\"\\x1b\\x7d\\x7f\\x80\\x7e\\x86\\x8c\\x87\\x8f\\x83\\x1f\\xf7\\xdc\\xfd\\x3f\\x05\\x7c\\x92\\x92\\x86\\x97\\x1b\\x99\\x97\\x96\\x98\\x90\\x8a\\x8e\\x86\\x94\\x1f\"\n\"\\x0e\\xf7\\xa6\\x44\\x15\\x2f\\x06\\xd6\\x0a\\xf7\\x24\\xf9\\x69\\xfb\\x24\\x06\\xd6\\x0a\\xe7\\x06\\x0e\\xf7\\xc0\\xf8\\xfc\\x15\\xfb\\x4a\\xfb\\x73\\x05\\x83\"\n\"\\x82\\x89\\x86\\x84\\x1a\\x7d\\x96\\x80\\x9a\\x94\\x91\\x8f\\x96\\x94\\x1e\\xf7\\x22\\xf7\\x43\\xf7\\x23\\xfb\\x43\\x05\\x80\\x93\\x92\\x87\\x94\\x1b\\x9a\\x96\"\n\"\\x96\\x99\\x92\\x89\\x8f\\x83\\x95\\x1f\\x0e\\xf8\\xdd\\xfb\\x08\\x15\\x4f\\x1d\\xfc\\xce\\x20\\x0a\\x0e\\xf8\\x1b\\xf8\\xec\\x15\\xfb\\x26\\x06\\xf7\\x28\\xfb\"\n\"\\x81\\x05\\x79\\x96\\x95\\x84\\x9a\\x1b\\x9e\\x9b\\x99\\x9c\\x90\\x8a\\x91\\x89\\x90\\x1f\\x0e\\x48\\x1d\\x0e\\xf7\\x2a\\xf8\\xef\\x15\\x26\\x06\\xf7\\x0d\\x1d\"\n\"\\xd6\\x06\\x4d\\xbb\\xc3\\x6e\\xd2\\x1b\\xf7\\x0f\\xee\\xf0\\xf7\\x11\\xf7\\x11\\x29\\xed\\xfb\\x10\\x45\\x4f\\x6c\\x50\\x5e\\x1f\\xf7\\x3e\\xb2\\x15\\xee\\xd7\"\n\"\\x3f\\x29\\x2b\\x3e\\x3e\\x2b\\x2c\\x3e\\xd8\\xec\\xea\\xd7\\xd9\\xe9\\x1f\\x0e\\x49\\x0a\\x0e\\x9a\\x0a\\x0e\\x2c\\x1d\\x0e\\xf7\\xa9\\xf8\\x04\\x15\\xf7\\x4c\"\n\"\\x3e\\x1d\\xfb\\x4c\\xc2\\x06\\xb9\\xb6\\xab\\xca\\xb0\\xa8\\x88\\x83\\xc5\\x1e\\x8a\\x92\\x8f\\x8b\\x8d\\x1b\\x9b\\x96\\x95\\x9a\\x98\\x83\\x94\\x7d\\x8e\\x1f\"\n\"\\x92\\x6b\\x46\\x91\\x63\\x1b\\x2f\\x48\\x55\\x40\\x1f\\x54\\x39\\x52\\x0a\\xdd\\xfb\\xd1\\x2f\\x29\\x0a\\xf7\\xd0\\x21\\x0a\\xfb\\x40\\x06\\x0e\\xa1\\x0a\\x51\"\n\"\\x52\\x4c\\x8c\\x08\\xfb\\x08\\x06\\x76\\x80\\x83\\x79\\x7b\\xd2\\x1d\\x0e\\xb8\\x1d\\x0e\\x32\\x1d\\x89\\x87\\x0a\\xca\\x1d\\x91\\x0a\\x0e\\x42\\x0a\\x0e\\xf7\"\n\"\\x0a\\xf8\\x37\\x15\\x3b\\x2f\\x0a\\xa8\\xfb\\xd1\\x6e\\x06\\x76\\x80\\x82\\x7b\\x7b\\x97\\x81\\x9e\\x1f\\xf7\\x01\\x38\\x0a\\x6f\\xf7\\x93\\x06\\xc0\\xaf\\xa9\"\n\"\\xa2\\xad\\x1b\\xaa\\xa7\\x6b\\x68\\x1f\\xfb\\xcf\\xdb\\x07\\x61\\x1d\\x6e\\xf7\\x93\\x06\\xc0\\xaf\\xa8\\xa2\\xac\\x1b\\xac\\xa7\\x6d\\x69\\x1f\\xfb\\xd2\\xdb\"\n\"\\x07\\x9f\\x97\\x53\\x1d\\x6e\\xf7\\xa3\\x06\\xc8\\x59\\xbd\\x4e\\x62\\x6d\\x7a\\x5b\\x63\\x1e\\xb7\\x73\\x6b\\xa0\\x61\\x1b\\x63\\x6e\\x7b\\x65\\x6c\\x1f\\x0e\"\n\"\\x6a\\x1d\\x0e\\x2c\\x0a\\x0e\\x95\\x0a\\xf8\\x5c\\xf7\\xf1\\x15\\xc6\\x5c\\x56\\xa4\\x41\\x1b\\xfb\\x13\\x2a\\x2f\\xfb\\x0b\\xfb\\x0c\\xed\\x2f\\xf7\\x12\\xd4\"\n\"\\xc2\\xa5\\xc4\\xb9\\x1f\\xfb\\x74\\x2f\\x52\\x0a\\xf7\\x55\\x23\\x1d\\x5a\\xf8\\x87\\xbc\\x06\\xa0\\x96\\x94\\x9c\\x9c\\x81\\x93\\x75\\x1f\\x26\\x06\\xfb\\x43\"\n\"\\x66\\x15\\xee\\xd7\\x45\\x30\\x32\\x3f\\x44\\x2a\\x2a\\x3f\\xd1\\xe6\\xe4\\xd7\\xd2\\xea\\x1f\\x0e\\x6b\\x1d\\x0e\\x3e\\x0a\\x0e\\x83\\x1d\\x0e\\x28\\x0a\\x0e\"\n\"\\xf7\\xe8\\x16\\xf7\\x3a\\xf8\\x04\\x05\\xb0\\x06\\x62\\x1d\\xfb\\x2c\\x2f\\x0a\\xc7\\x06\\xfb\\x22\\xfb\\xd1\\x05\\x7f\\x06\\xfb\\x25\\xf7\\xd1\\x05\\xc4\\x3d\"\n\"\\x1d\\xfb\\x2c\\x2f\\x0a\\xb1\\x06\\xf7\\x3c\\xfc\\x04\\x05\\x0e\\x40\\x0a\\x0e\\xb3\\x1d\\x4e\\x0a\\x82\\x7b\\x74\\x1d\\x9b\\x80\\x94\\x71\\x1d\\x83\\x7a\\x4c\"\n\"\\x0a\\x0e\\x4a\\x0a\\x0e\\xf7\\xdc\\xf8\\x82\\x15\\xab\\x9e\\xa1\\xaa\\x8f\\x1e\\xa2\\x8e\\x93\\x91\\x9c\\x1a\\x9a\\x80\\x95\\x79\\x51\\x5d\\x5b\\x4e\\x1e\\xfb\"\n\"\\x3d\\x07\\x69\\x75\\x75\\x6a\\x89\\x1e\\x77\\x89\\x82\\x83\\x7a\\x1a\\x7b\\x94\\x83\\x9f\\x89\\x1e\\xac\\x89\\xa1\\x75\\x69\\x1a\\xfb\\x3d\\x07\\x4e\\xb9\\x5b\"\n\"\\xc5\\x9d\\x96\\x95\\x9a\\x9c\\x83\\x91\\x74\\x8e\\x1e\\x6c\\x90\\x78\\xa0\\xab\\x1a\\xf7\\x3d\\x07\\xb3\\x7f\\xa2\\x6e\\xa0\\x1e\\xa8\\xa0\\x97\\xa3\\xb3\\x1a\"\n\"\\x0e\\xf7\\xda\\xf9\\xcd\\x15\\x58\\xfe\\xc7\\xbe\\x06\\x0e\\xf7\\xa5\\x7e\\x15\\x6b\\x78\\x75\\x6c\\x87\\x1e\\x74\\x88\\x83\\x85\\x7a\\x1a\\x7c\\x96\\x81\\x9d\"\n\"\\xc5\\xb9\\xbb\\xc8\\x1e\\xf7\\x3d\\x07\\xad\\xa1\\xa2\\xac\\x8d\\x1e\\x9f\\x8c\\x94\\x93\\x9c\\x1a\\x9b\\x82\\x93\\x77\\x8d\\x1e\\x6a\\x8d\\x75\\xa2\\xac\\x1a\"\n\"\\xf7\\x3d\\x07\\xc8\\x5d\\xbb\\x51\\x79\\x80\\x81\\x7c\\x7a\\x93\\x85\\xa2\\x88\\x1e\\xaa\\x87\\x9e\\x75\\x6b\\x1a\\xfb\\x3d\\x07\\x63\\x97\\x74\\xa8\\x76\\x1e\"\n\"\\x6e\\x76\\x7f\\x73\\x63\\x1a\\x0e\\xf8\\x7d\\xf7\\xe2\\xf0\\x0a\\x89\\x8c\\xb3\\x57\\x1f\\xb7\\x53\\x7c\\xf7\\x34\\x1d\\x7d\\xf7\\x00\\x0a\\xc1\\xb7\\x94\\x7a\"\n\"\\x0a\\x56\\xcb\\xa1\\x7f\\xac\\x1b\\xac\\xa9\\x9d\\xb5\\xaf\\x1f\\x9e\\xa0\\x92\\x97\\xf7\\x09\\x0a\\x0e\\xf7\\x95\\xfb\\x2c\\x15\\x8a\\x83\\x8b\\x85\\x88\\x1a\"\n\"\\x73\\x9f\\x79\\xa4\\xa4\\x9f\\x9d\\xa3\\x8c\\x8b\\x91\\x8a\\x95\\x1e\\x79\\xf7\\xd4\\x05\\xa1\\x89\\x83\\x95\\x7b\\x1b\\x7b\\x82\\x81\\x75\\x8a\\x1f\\xab\\xf7\"\n\"\\x23\\x15\\xac\\xa5\\xa2\\xaa\\xaa\\x71\\xa2\\x6a\\x1f\\x7f\\x06\\x69\\x71\\x74\\x6c\\x6c\\xa5\\x74\\xad\\x1f\\x0e\\xf7\\xa7\\xf8\\x83\\x15\\x64\\x83\\x75\\x83\"\n\"\\x74\\x7c\\x08\\x57\\x68\\x6c\\x53\\x4c\\x1a\\x2d\\xd3\\x3c\\xea\\x7f\\x1e\\x21\\x2b\\x0a\\xf5\\x07\\xd3\\x91\\xd7\\xaf\\xa8\\x1a\\x9a\\x81\\x95\\x7d\\x83\\x87\"\n\"\\x89\\x84\\x82\\x1e\\x71\\x6a\\x5f\\x7d\\x5e\\x1b\\x36\\x4c\\xc6\\xda\\xdd\\xca\\xc4\\xe4\\xc8\\xb5\\x72\\x63\\x91\\x1f\\x78\\x8e\\x92\\x83\\x5c\\x0a\\xc7\\x07\"\n\"\\x9e\\x81\\x96\\x7a\\x82\\x84\\x87\\x82\\x86\\x1e\\x73\\x9d\\x64\\x98\\x69\\x8c\\x08\\xed\\x34\\x1d\\x0e\\xf7\\x56\\xbe\\x15\\xac\\xb8\\x9d\\xc5\\xc9\\x1a\\x9c\"\n\"\\x8a\\x9a\\x88\\x9e\\x1e\\xde\\x44\\x0a\\x2c\\x06\\x89\\x94\\x8b\\x8b\\x81\\xad\\x08\\x83\\xa8\\x86\\xa4\\x9c\\x1a\\xbe\\xb7\\xb6\\xbf\\xac\\xa6\\x7d\\x6b\\xa4\"\n\"\\x1e\\x81\\x94\\x90\\x87\\x93\\x1b\\x98\\x98\\x97\\x97\\x97\\x7f\\x9c\\x76\\x9e\\x1f\\xa5\\x6d\\x69\\x98\\x65\\x1b\\x3a\\x4a\\x4a\\x3a\\x71\\x8f\\x77\\xa0\\x48\"\n\"\\x1f\\x34\\x20\\x0a\\xef\\x06\\x8d\\x7e\\x8c\\x77\\x7d\\x1a\\x35\\x62\\x39\\x5f\\x89\\x1e\\x7b\\x80\\x81\\x7d\\x7a\\x97\\x82\\x9f\\x1f\\xf7\\xd7\\x06\\xbc\\xb4\"\n\"\\xb7\\xc0\\x9b\\x80\\x96\\x7c\\x7c\\x82\\x82\\x79\\x8a\\x1f\\x6e\\x88\\x7c\\x7a\\x74\\x1b\\x0e\\xb2\\x0a\\xf7\\xdb\\xf7\\x7d\\x15\\xf7\\x11\\x06\\x9e\\x93\\x92\"\n\"\\x9b\\x9c\\x83\\x92\\x78\\x1f\\xfb\\x00\\x06\\xf7\\x32\\xf7\\x7c\\x05\\x9f\\x27\\x0a\\xfb\\x01\\x06\\x75\\x80\\x59\\x0a\\xa8\\x06\\xfb\\x21\\xfb\\x64\\xfb\\x21\"\n\"\\xf7\\x64\\x05\\xa8\\x23\\x1d\\xfb\\x03\\x20\\x0a\\xa0\\x06\\xf7\\x31\\xfb\\x7c\\x05\\x21\\xf7\\x33\\x1d\\x5b\\xfb\\x11\\xf7\\x33\\x1d\\x34\\x3a\\x20\\x0a\\xf7\"\n\"\\x6a\\x39\\x0a\\x3a\\xe2\\xf7\\x11\\xf7\\x0a\\x0a\\xfb\\x11\\x06\\x0e\\xf7\\xdb\\xf8\\x0e\\x15\\xdb\\x07\\xcb\\xb7\\xb6\\xcc\\x9b\\x9a\\x89\\x85\\x9c\\x1e\\x89\"\n\"\\x95\\x8d\\x8a\\x8f\\x1b\\x98\\x96\\x97\\x98\\x96\\x86\\x92\\x7f\\x90\\x1f\\x94\\x77\\x6e\\x90\\x71\\x1b\\x33\\x46\\x45\\x33\\x1f\\x3b\\x30\\x07\\x20\\x1d\\xe6\"\n\"\\xfb\\x97\\x06\\x4b\\x62\\x5f\\x4f\\x7f\\x7c\\x8d\\x8d\\x83\\x1e\\x92\\x72\\x88\\x8c\\x85\\x1b\\x7e\\x81\\x80\\x7d\\x82\\x90\\x83\\x95\\x86\\x1f\\x82\\x9e\\xab\"\n\"\\x84\\xa5\\x1b\\xe0\\xcf\\xcf\\xe0\\x1f\\xf7\\x9d\\xe6\\x07\\x53\\x0a\\x0e\\xf8\\x8a\\xf8\\xef\\x15\\xfb\\x6d\\x06\\x42\\x4e\\x55\\x49\\x7b\\x8e\\x81\\x92\\x7d\"\n\"\\x1f\\x49\\x7f\\x69\\x6e\\x5e\\x1a\\x5a\\xb7\\x5f\\xf0\\x53\\x1e\\xcc\\x67\\x05\\xe9\\x57\\xad\\x6c\\x6b\\x1a\\x65\\x65\\x6d\\x5a\\x1e\\xfb\\x34\\xcb\\x06\\x9d\"\n\"\\x81\\x96\\x7b\\x7b\\x81\\x80\\x79\\x1e\\xfb\\x06\\xf7\\x68\\x07\\xdb\\xc6\\xbd\\xcf\\x9c\\x88\\x96\\x84\\x9a\\x1f\\xcb\\x93\\xae\\xaa\\xba\\x1a\\xbe\\x64\\xb4\"\n\"\\x2a\\xc0\\x1e\\x53\\xa9\\x05\\xfb\\x09\\xcb\\x6e\\xa3\\xad\\x1a\\xb1\\xb2\\xab\\xb9\\x1e\\xf7\\x37\\x4c\\x06\\x79\\x95\\x80\\x9b\\x9b\\x95\\x96\\x9d\\x1e\\xfb\"\n\"\\x0c\\xfb\\x61\\x15\\xca\\x6a\\xb4\\x63\\x70\\x1a\\x76\\x71\\x7d\\x61\\x8a\\x1e\\x81\\x06\\x89\\x8a\\x8b\\x8a\\x87\\x1f\\x79\\x9c\\x6d\\x9e\\x55\\xa9\\x4d\\xad\"\n\"\\x18\\x3c\\xb7\\x60\\xb0\\xa5\\x1a\\xa2\\xa8\\x9b\\xb3\\x1e\\x92\\x06\\x8e\\x8d\\x8b\\x8c\\x8f\\x1f\\xa7\\x73\\xa5\\x7a\\xcb\\x69\\x08\\x0e\\xf7\\x5b\\xf7\\x31\"\n\"\\x15\\x73\\xaf\\xa7\\x82\\xb1\\x1b\\xb1\\xa4\\x94\\xa3\\xb0\\x1f\\xbf\\x57\\x05\\x82\\x94\\x92\\x88\\x92\\x1b\\x9a\\x96\\x96\\x99\\x92\\x86\\x94\\x84\\x92\\x1f\"\n\"\\x57\\xbf\\x05\\xa2\\xac\\x95\\xa8\\xb1\\x1a\\xaf\\x83\\xa5\\x73\\xaf\\x1e\\xbf\\xbe\\x05\\x95\\x95\\x8d\\x8e\\x94\\x1a\\x9a\\x80\\x96\\x7c\\x83\\x85\\x88\\x82\"\n\"\\x82\\x1e\\x57\\x58\\x05\\xa2\\x6a\\x6c\\x95\\x65\\x1b\\x65\\x6e\\x82\\x73\\x69\\x1f\\x57\\xbe\\x05\\x94\\x81\\x86\\x8e\\x83\\x1b\\x7c\\x80\\x80\\x7d\\x83\\x8e\"\n\"\\x85\\x94\\x82\\x1f\\xbf\\x58\\x05\\x75\\x6b\\x81\\x6c\\x67\\x1a\\x66\\x94\\x71\\xa3\\x67\\x1e\\x56\\x57\\x05\\x82\\x82\\x88\\x85\\x83\\x1a\\x7d\\x97\\x80\\x99\"\n\"\\x93\\x90\\x8e\\x94\\x95\\x1e\\xf7\\x2c\\xf7\\xc4\\x15\\xcd\\xc0\\x57\\x4a\\x4a\\x56\\x57\\x4a\\x4a\\x56\\xbf\\xcc\\xcb\\xc0\\xc0\\xcb\\x1f\\x0e\\xf7\\x7a\\xf8\"\n\"\\xef\\x15\\xae\\xfb\\x92\\x05\\x70\\x8f\\x96\\x7e\\x9f\\x1b\\xa0\\x96\\x97\\xa7\\x8f\\x1f\\xad\\xf7\\x92\\x05\\x0e\\xf7\\x79\\xf8\\xec\\xf7\\x2f\\x1d\\x9a\\x1b\"\n\"\\x9e\\x9b\\x99\\x9c\\x8f\\x8a\\x91\\x89\\x91\\x1f\\xf7\\x1e\\xf7\\x6b\\xf7\\x2f\\x1d\\x99\\x1b\\x9f\\x9b\\x99\\x9c\\x8f\\x8a\\x91\\x89\\x91\\x1f\\x0e\\xc2\\xf7\"\n\"\\x66\\xd5\\x1d\\x9c\\xfb\\x59\\xd5\\x1d\\x0e\\xc2\\xf7\\x66\\xec\\x1d\\x8e\\x93\\x1a\\x99\\x80\\x96\\x7d\\x83\\x83\\x87\\x83\\x82\\x1e\\x0e\\xf8\\xb9\\xd3\\x1d\"\n\"\\x0e\\xbe\\x1d\\xf7\\xd6\\xf8\\x04\\x15\\x23\\x2f\\x0a\\xbf\\xfb\\xd1\\x43\\x35\\x0a\\xf7\\x56\\x39\\x0a\\x45\\x06\\x8a\\x87\\x0a\\xf7\\x3b\\xf8\\x04\\x15\\xcd\"\n\"\\x44\\x1d\\x49\\xc0\\x06\\xb8\\xa6\\xae\\xae\\x98\\xa0\\x87\\x85\\xa1\\x1e\\x87\\x96\\x8c\\xf7\\x2b\\x1d\\x77\\x66\\x92\\x76\\x1b\\x4e\\x58\\x50\\x43\\x1f\\x56\"\n\"\\x43\\x07\\x20\\x1d\\xd3\\xfb\\xd1\\x3d\\x20\\x0a\\xf7\\x58\\x21\\x0a\\x49\\x06\\xf7\\xd6\\xf8\\xbc\\x15\\x23\\x20\\x0a\\xbf\\xfc\\x89\\x43\\x20\\x0a\\xf7\\x58\"\n\"\\x06\\xa0\\x96\\x53\\x1d\\x43\\x06\\x0e\\xf8\\x89\\xf7\\x93\\x60\\x1d\\xfc\\x26\\x22\\x1d\\x0e\\xd6\\x1d\\xfc\\x22\\x06\\x27\\x1d\\x0e\\xd6\\x1d\\x52\\xfb\\x0f\"\n\"\\x06\\x20\\x1d\\xf7\\x0f\\xfb\\xb7\\x06\\x39\\x1d\\x96\\x9f\\x1e\\xf7\\xb7\\xf7\\x0f\\x07\\x57\\x0a\\xfb\\x0f\\x06\\x0e\\x67\\x0a\\xf8\\x4f\\xf8\\xbc\\x15\\xc3\"\n\"\\x06\\x9e\\x96\\x95\\x9b\\x9a\\x80\\x95\\x78\\x1f\\xfb\\x5d\\x06\\xfb\\x1c\\x89\\x34\\x50\\x8a\\x2f\\x08\\x5d\\x07\\x8e\\x38\\xdc\\x50\\xf7\\x0d\\x85\\x08\\xfb\"\n\"\\x9e\\x2f\\x07\\x78\\x7f\\x81\\x7b\\x7c\\x97\\x81\\x9e\\x1f\\xf7\\x1a\\x06\\x9f\\x96\\x94\\x9c\\x97\\x83\\x95\\x7e\\x8d\\x1f\\xf8\\xc7\\xc8\\xfc\\xc7\\x07\\x7e\"\n\"\\x89\\x83\\x81\\x7f\\x1a\\x7b\\x97\\x81\\x9d\\x1e\\xee\\x06\\x9f\\x96\\x21\\x1d\\x77\\x1f\\x52\\x06\\x0e\\xf7\\xbc\\xf8\\x59\\x15\\x38\\x49\\x49\\x37\\x38\\xcd\"\n\"\\x48\\xdd\\xdc\\xcd\\xce\\xde\\xdd\\x49\\xcf\\x3b\\x1f\\x0e\\xf0\\x1d\\xf7\\x35\\xf7\\x2d\\x15\\x44\\xfb\\x74\\x05\\x8a\\x87\\x8a\\x87\\x87\\x1a\\x7a\\xdd\\x1d\"\n\"\\xf7\\x35\\xf8\\xef\\x15\\x44\\xfb\\x74\\x05\\x8a\\x87\\x8a\\x87\\x88\\x1a\\x79\\xdd\\x1d\\xf7\\xd3\\xd3\\x1d\\xf8\\x4d\\xf7\\x5a\\x15\\xfb\\x67\\xf7\\x59\\x05\"\n\"\\x93\\x82\\x83\\x8f\\x83\\x1b\\x7d\\x80\\x80\\x7d\\x82\\x8c\\x89\\x96\\x7f\\x1f\\xf7\\x1f\\xfb\\x35\\xfb\\x1f\\xfb\\x36\\x05\\x80\\x7f\\x8a\\x89\\x82\\x1a\\x7d\"\n\"\\x96\\x80\\x99\\x94\\x92\\x8e\\x94\\x94\\x1e\\x0e\\xf1\\xe8\\x15\\x6f\\x0a\\xf7\\x5b\\x16\\x6f\\x0a\\xf7\\x5c\\x16\\xf7\\x14\\x1d\\xa8\\x72\\xa4\\x6e\\x1f\\x0e\"\n\"\\xf7\\x26\\xf8\\xf9\\x15\\x4a\\x59\\x59\\x4c\\x4d\\xbe\\x58\\xc9\\xca\\x99\\x1d\\xb5\\xab\\x6b\\x61\\x62\\x6a\\x6a\\x63\\x62\\x6a\\xac\\xb4\\xb4\\xac\\xac\\xb3\"\n\"\\x1f\\xf7\\xf5\\xfb\\x52\\x15\\x97\\x8f\\x90\\x91\\x95\\x1a\\x95\\x82\\x94\\x83\\x89\\x87\\x8a\\x89\\x85\\x1e\\xfc\\x0a\\xfb\\x0c\\x05\\x7e\\x87\\x86\\x85\\x81\"\n\"\\x1a\\x81\\x94\\x82\\x94\\x8d\\x8f\\x8c\\x8d\\x91\\x1e\\xc7\\x5c\\x15\\x4b\\x59\\x59\\x4c\\x4d\\xbe\\x58\\xc9\\xc9\\x99\\x1d\\xb4\\xab\\x6b\\x61\\x62\\x6b\\x6a\"\n\"\\x63\\x62\\x6b\\xac\\xb4\\xb4\\xab\\xac\\xb3\\x1f\\xf7\\xa6\\xb2\\x15\\x4b\\x59\\x59\\x4c\\x4d\\xbe\\x58\\xc9\\xc9\\x99\\x1d\\xb4\\xab\\x6b\\x61\\x62\\x6b\\x6a\"\n\"\\x63\\x62\\x6b\\xac\\xb4\\xb4\\xab\\xac\\xb3\\x1f\\x0e\\xf7\\xa5\\xf7\\x35\\x15\\xfb\\x0f\\x52\\x61\\x5e\\x41\\x1a\\x2e\\xd5\\x4c\\xf7\\x02\\xbf\\xac\\x93\\xa6\"\n\"\\xca\\x1e\\x9a\\x92\\x8f\\x8c\\x98\\x91\\x08\\xd1\\x79\\x0a\\x65\\x07\\x74\\x58\\x6f\\x84\\x5f\\x1b\\x3a\\x53\\xb6\\xc9\\xc1\\xba\\xb4\\xf7\\x0a\\xba\\x1f\\xd1\"\n\"\\x34\\x1d\\xb4\\xf7\\x06\\x15\\xb0\\xa4\\xa1\\xab\\xab\\x72\\xa1\\x66\\x1f\\x6f\\x06\\x67\\x71\\x75\\x6b\\x6b\\xa4\\x75\\xb0\\x1f\\x0e\\xf7\\x5a\\xf9\\x06\\x4d\"\n\"\\x0a\\xf8\\x49\\xf8\\xe0\\x34\\x0a\\xf7\\xc0\\xf9\\x12\\x3c\\x1d\\x99\\x91\\x66\\x0a\\x95\\x89\\x8f\\x58\\x1d\\xf8\\x47\\xf8\\xed\\x5f\\x0a\\xf8\\x36\\xf8\\xa1\"\n\"\\x2d\\x0a\\xf7\\x44\\xf8\\xfe\\x42\\x1d\\xf7\\xc1\\xf8\\xf6\\x26\\x0a\\x0e\\xf7\\x53\\xf8\\xf6\\x5b\\x1d\\xf7\\xc2\\xf9\\x26\\x63\\x0a\\xf7\\xa1\\x96\\x15\\x31\"\n\"\\xa5\\x07\\xa6\\x99\\x85\\x7d\\x7e\\x7b\\x82\\x74\\x7d\\x7c\\x8f\\x95\\x77\\x6d\\x0a\\xaa\\x93\\x1d\\xb9\\x07\\x0e\\xf7\\xbb\\xf8\\xdb\\x55\\x1d\\x94\\x1a\\x99\"\n\"\\xcb\\x0a\\x88\\xa8\\x0a\\xf8\\x3e\\x96\\x15\\x46\\x06\\x4e\\x6e\\x76\\x71\\x60\\xc4\\x0a\\x9e\\xa3\\xb0\\x9f\\x1f\\x0e\\xf7\\xc0\\xf8\\x73\\xaf\\x0a\\xca\\x0a\"\n\"\\xb2\\x1d\\x0e\\xf7\\xf8\\xf7\\xa9\\x15\\xd0\\x06\\x9c\\x96\\x94\\x99\\x9a\\x81\\x94\\x79\\x1f\\x76\\xf7\\x36\\x06\\xbd\\x5e\\xb0\\x4e\\x72\\x61\\x81\\x7f\\x6d\"\n\"\\x1e\\x80\\x86\\x85\\x83\\x81\\x1a\\x7e\\x95\\x80\\x97\\x90\\x8d\\x8b\\x8f\\x94\\x1e\\x96\\xa6\\xa9\\x92\\x9c\\x1b\\xaf\\xa3\\x7b\\x73\\x1f\\x66\\x07\\x91\\x6f\"\n\"\\x7a\\x8d\\x75\\x1b\\x3a\\x51\\x61\\x51\\x59\\xb5\\x6a\\xc9\\xb1\\xa6\\x92\\x9d\\xb0\\x1f\\xc0\\x04\\x75\\x69\\x6c\\x82\\x66\\x1b\\x6a\\x74\\x98\\x9f\\xad\\xb2\"\n\"\\xa3\\xc0\\xa1\\x9d\\x88\\x85\\xa5\\x1f\\x0e\\xf7\\x7c\\xf8\\x94\\x15\\xe6\\x3e\\x1d\\xfb\\x7e\\x22\\x1d\\xe6\\xfb\\x6c\\x06\\xfb\\x10\\x44\\x05\\x7e\\x83\\x86\"\n\"\\x85\\x80\\x1a\\x7d\\x97\\x7f\\x98\\x90\\x8f\\x8c\\x91\\x95\\x1e\\xed\\xc3\\x05\\xfb\\x4e\\x30\\x07\\x20\\x1d\\xf8\\x5e\\xf7\\x60\\x78\\x1d\\xfb\\x2d\\xfb\\x9b\"\n\"\\xf7\\x65\\x07\\xf7\\x2c\\xe3\\x05\\x9a\\x94\\x8f\\x90\\x96\\x1a\\x98\\x7f\\x97\\x7e\\x85\\x83\\x89\\x87\\x85\\x1e\\xfb\\x12\\x42\\x05\\x0e\\x8c\\x0a\\x0e\\xf7\"\n\"\\xec\\xf7\\x9e\\x15\\xce\\x75\\x06\\x7c\\x0a\\xea\\xac\\x1d\\x75\\x48\\xf7\\x57\\xf7\\x48\\x21\\x2b\\x0a\\xf7\\x31\\xfb\\xd4\\x07\\xfb\\x29\\x25\\xfb\\x06\\xfb\"\n\"\\x3c\\xfb\\x3d\\xf2\\xfb\\x04\\xf7\\x2f\\x1f\\xf7\\xe1\\xf7\\x1c\\x06\\x9e\\x81\\x97\\x7b\\x79\\x83\\x82\\x75\\x1e\\x36\\xfb\\x5c\\x07\\x57\\xf8\\x61\\x15\\xfc\"\n\"\\x61\\x70\\x07\\x45\\x5a\\xa0\\xb9\\x65\\x1f\\x6a\\xb5\\x79\\xc2\\xcd\\x1a\\xcd\\x9d\\xc2\\xac\\xb6\\x1e\\xb9\\xb1\\xbb\\xa0\\xd2\\x1b\\x0e\\xf7\\xc4\\xf8\\xd4\"\n\"\\x15\\x34\\x47\\x4a\\x37\\x3a\\xd0\\x48\\xdf\\xdf\\xcf\\xce\\xdd\\xdc\\x47\\xce\\x39\\x1f\\x87\\x5c\\x15\\xc7\\xb9\\x5e\\x52\\x53\\x5c\\x5e\\x52\\x51\\x5c\\xb9\"\n\"\\xc3\\xc2\\xba\\xb9\\xc3\\x1f\\x0e\\xb0\\x1d\\x0e\\x32\\x1d\\x0e\\xf7\\xd9\\xf8\\xef\\x15\\xfb\\x37\\x2e\\x1d\\xf7\\x03\\xfb\\x73\\x06\\x23\\x50\\x05\\x7c\\x83\"\n\"\\x87\\x85\\x80\\x1a\\x7d\\x96\\x80\\x99\\x91\\x8e\\x8c\\x91\\x95\\x1e\\xda\\xb7\\x05\\xfb\\x70\\xfb\\x2d\\x6e\\x0a\\xf7\\xfe\\x23\\x1d\\xfb\\x31\\xf7\\x86\\x06\"\n\"\\xf4\\xc6\\x05\\x9a\\x93\\x8f\\x91\\x97\\x1a\\x98\\x80\\x97\\x7d\\x86\\x87\\x8a\\x85\\x81\\x1e\\x3b\\x5e\\x05\\x0e\\x8d\\x0a\\x0e\\xf8\\xdb\\xf7\\x57\\x15\\xba\"\n\"\\x89\\x9e\\x83\\xad\\x1e\\xe3\\x78\\x58\\xbd\\x43\\x1b\\x51\\x5f\\x68\\x47\\x6e\\x1f\\xca\\x6d\\x57\\xb3\\x56\\x1b\\x35\\x43\\x26\\xfb\\x0b\\xfb\\x10\\xd4\\x22\"\n\"\\xe2\\xc1\\xbc\\xb3\\xd0\\xa9\\x1f\\x47\\xaa\\xc2\\x62\\xc6\\x1b\\xac\\xaa\\x98\\xac\\xb5\\x1f\\xa4\\x9e\\x93\\x95\\x97\\x1a\\x98\\x7f\\x97\\x7e\\x85\\x85\\x89\"\n\"\\x87\\x86\\x1e\\x60\\x5d\\x76\\x7f\\x6f\\x1b\\x4f\\x56\\xd2\\xe4\\x83\\x1f\\xbe\\x04\\xe4\\x98\\xae\\xba\\xc3\\x1b\\xac\\xa7\\x79\\x6a\\x9c\\x1f\\x96\\x77\\x91\"\n\"\\x73\\x90\\x62\\x08\\xfc\\x00\\xf7\\x1c\\x15\\xc6\\xbd\\x3b\\x2d\\x2f\\x58\\x3a\\x52\\x52\\x58\\xdc\\xe8\\xe6\\xbd\\xdd\\xc4\\x1f\\x0e\\xf7\\x0b\\xf7\\xd4\\x15\"\n\"\\xfb\\xa1\\x5a\\x07\\x20\\x1d\\xef\\x06\\x8c\\xf8\\x6c\\x05\\xb8\\xb5\\xae\\xc0\\xc2\\xb8\\x60\\x56\\x62\\x60\\x66\\x5b\\x1e\\x86\\x06\\x7a\\x80\\x81\\x7c\\x7a\"\n\"\\x96\\x83\\xa1\\x1f\\x8f\\x06\\xb0\\xb8\\x7a\\x72\\xac\\x1f\\xb0\\x6e\\xa1\\x5e\\x5a\\x1a\\x43\\x64\\x53\\x5a\\x68\\x76\\xa4\\xb7\\x87\\x1e\\x9e\\x8a\\x82\\x94\"\n\"\\x7c\\x1b\\x7b\\x81\\x80\\x7b\\x46\\xbb\\x57\\xca\\xdb\\xc7\\xd8\\xf1\\xe4\\x5a\\xd0\\x31\\xb0\\x1f\\xae\\xa6\\x9c\\xa9\\xb2\\x1a\\xde\\x48\\xcd\\x37\\x3a\\x48\"\n\"\\x50\\x43\\x1e\\x26\\x5a\\x07\\x20\\x1d\\x0e\\xf7\\xd5\\xf8\\xf7\\xcd\\x1d\\x0e\\xf8\\x76\\xf8\\x19\\x15\\xfb\\x55\\x07\\x39\\x1d\\x96\\x9f\\x1e\\xf7\\x88\\xfc\"\n\"\\x46\\x52\\x0a\\x0e\\xf7\\x3f\\x95\\x15\\x77\\xa7\\xa0\\x85\\xb2\\x1b\\xc9\\xc7\\xa2\\xb7\\xc0\\x1f\\x58\\xdc\\x07\\x9e\\x1d\\x6e\\xf8\\x05\\xfb\\x0d\\x06\\x74\"\n\"\\x81\\x83\\x7a\\x7b\\x3a\\x1d\\xd0\\xfb\\x8d\\x06\\x51\\x55\\x51\\x6f\\x49\\x1b\\x58\\x69\\xad\\xbd\\x1f\\xf7\\xc1\\x26\\x07\\x75\\x81\\x83\\xa5\\x1d\\xbc\\xfc\"\n\"\\xa9\\x06\\x27\\x1d\\x0e\\xf7\\x27\\xf8\\x9c\\x15\\xc7\\x06\\x8c\\x48\\x05\\x7d\\x94\\x81\\x98\\x98\\x94\\x95\\x9a\\x1e\\xf7\\x01\\xfb\\x91\\xfb\\x02\\x07\\x7d\"\n\"\\x94\\x81\\x98\\x98\\x94\\x95\\x9a\\x1e\\xcd\\xc7\\xfb\\x83\\x5b\\x07\\x7c\\x81\\x82\\x7e\\x7f\\x95\\x82\\x9a\\x1f\\xf7\\x21\\x06\\x99\\x95\\x94\\x98\\x98\\x81\"\n\"\\x93\\x7c\\x1f\\x5b\\x06\\xf7\\xc6\\xbb\\x15\\xd4\\xf7\\x35\\x05\\xfb\\x65\\x6c\\x07\\x7c\\x81\\x83\\x7e\\x7e\\x95\\x82\\x99\\x1f\\xe0\\x06\\x9a\\x95\\x94\\x98\"\n\"\\x97\\x81\\x94\\x7c\\x1f\\x82\\xf7\\x83\\x90\\x06\\x99\\x95\\x94\\x97\\x99\\x81\\x93\\x7c\\x1f\\x4c\\x06\\x3d\\xfb\\x41\\x3d\\xf7\\x41\\x05\\x4c\\x06\\x7c\\x81\"\n\"\\x83\\x7e\\x7e\\x95\\x82\\x9a\\x1f\\x8f\\xfb\\x83\\x82\\x06\\x7c\\x82\\x82\\x7f\\x7e\\x95\\x82\\x99\\x1f\\xe0\\x06\\x99\\x95\\x94\\x98\\x97\\x81\\x94\\x7d\\x1f\"\n\"\\x6b\\xf7\\x66\\x06\\xd5\\xfb\\x36\\x05\\x0e\\x8f\\x0a\\xf8\\x80\\xf8\\x6d\\x15\\x91\\x92\\x8e\\x92\\x8f\\x1a\\x98\\x81\\x95\\x7f\\x83\\x87\\x89\\x80\\x82\\xd8\"\n\"\\x0a\\x97\\xa4\\x0a\\xf7\\x85\\xfb\\x94\\x15\\xf7\\x37\\xf7\\x2a\\x9b\\x9d\\xb6\\x1a\\xc2\\x58\\xbb\\x50\\x66\\x69\\x7b\\x6e\\x75\\x1e\\x7f\\x7c\\x84\\x79\\x7f\"\n\"\\x1a\\x81\\x94\\x82\\x96\\x96\\x91\\x90\\x98\\x8e\\x1e\\xa8\\x94\\xa8\\xa0\\xad\\x1b\\xb0\\xab\\x6e\\x6b\\x7a\\x80\\x79\\x73\\x73\\x1f\\x5f\\x5f\\x51\\x54\\x65\"\n\"\\x69\\x83\\x84\\x85\\x86\\x88\\x88\\x08\\x5d\\xf7\\x7f\\xb4\\x07\\x99\\x83\\x94\\x7f\\x7e\\x83\\x82\\x7d\\x1e\\x0e\\xf7\\xda\\xf7\\xbb\\x15\\xf7\\x43\\x06\\xa1\"\n\"\\x96\\x94\\x9b\\x9c\\x80\\x93\\x75\\x1f\\xfb\\x43\\xf7\\x2d\\x06\\x4f\\x0a\\xfb\\x2c\\xfb\\x43\\x07\\x7a\\x88\\x8b\\x8b\\x88\\x8a\\x08\\x84\\x86\\x86\\x83\\x82\"\n\"\\x1a\\x7b\\x96\\x82\\xa0\\x1e\\xf7\\x43\\xfb\\x2d\\x06\\x27\\x1d\\xfb\\x77\\x2f\\x15\\x66\\x1d\\xf8\\x26\\x06\\xa1\\x96\\x94\\x9b\\x9b\\x80\\x94\\x75\\x1f\\x0e\"\n\"\\xf7\\x3f\\xf7\\x14\\x15\\xf7\\x12\\x06\\xf7\\x08\\xe7\\xd6\\xe9\\xe9\\x36\\xd4\\xfb\\x01\\x1f\\xfb\\x20\\xbb\\xf7\\x19\\x3d\\x1d\\xfb\\x7e\\xe4\\x1d\\xf7\\x14\"\n\"\\x04\\xf7\\x7e\\xf7\\x23\\x07\\xd8\\xc9\\x57\\x4b\\x4b\\x46\\x55\\x37\\x1f\\x0e\\xf7\\x26\\xf8\\xf7\\x15\\x3b\\x73\\x6c\\x81\\x83\\x88\\x08\\x83\\x87\\x86\\x85\"\n\"\\x82\\x1a\\x81\\x94\\x81\\x96\\x8e\\x8e\\x8b\\x8c\\x8e\\x1e\\xc9\\x9f\\x05\\xfb\\x97\\x07\\x8c\\x75\\x73\\x8b\\x7d\\x1b\\x76\\x80\\x84\\x7c\\x7f\\x95\\x83\\x98\"\n\"\\x1f\\xf7\\x47\\x06\\x99\\x7d\\x1d\\x46\\x06\\xf8\\x18\\xf7\\x44\\x15\\x91\\x92\\x8e\\x91\\x90\\x1a\\x98\\xec\\x0a\\x85\\x88\\x84\\x85\\x1a\\x7f\\x95\\x81\\x97\"\n\"\\x93\\x8d\\x8c\\x98\\x95\\x1e\\xf7\\xd8\\xa7\\x15\\x58\\x78\\x07\\x6c\\x83\\x87\\x7a\\x7f\\x95\\x83\\x99\\x1f\\xe1\\x06\\x99\\x7d\\x1d\\x80\\xbe\\x06\\xa5\\x93\"\n\"\\x90\\x9b\\x97\\x82\\x93\\x7d\\x1f\\x80\\xf7\\x6a\\x4e\\x06\\xfb\\x16\\xfb\\x6d\\x05\\x65\\x07\\xf7\\x2a\\xb4\\x15\\x25\\x06\\xf1\\xf7\\x3d\\x05\\x0e\\xf8\\x89\"\n\"\\xf7\\x95\\x15\\xa1\\x96\\x94\\x9b\\x9b\\x80\\x94\\x75\\x1f\\xfc\\x26\\x06\\x66\\x1d\\xf7\\x5f\\xfb\\x11\\x15\\x6f\\x0a\\xf8\\x2c\\x04\\x6c\\x72\\x73\\x6d\\x6d\"\n\"\\xa4\\x73\\xa9\\xaa\\xa3\\xa3\\xa9\\xa9\\x72\\xa3\\x6e\\x1f\\x0e\\xf7\\xda\\xf8\\xcf\\x15\\xa0\\x82\\x96\\x7a\\x7b\\x82\\x80\\x76\\x1e\\xfb\\x9a\\x07\\x77\\x94\"\n\"\\x80\\x9c\\x9b\\x94\\x96\\x9f\\x1e\\xfb\\x1d\\x04\\xa0\\x82\\x96\\x7a\\x7b\\x82\\x80\\x76\\x1e\\xfb\\x9a\\x07\\x7c\\x0a\\x0e\\xf7\\xc2\\xf9\\x0e\\x15\\x36\\x48\"\n\"\\x4a\\x38\\x3a\\xcf\\x49\\xdd\\xdf\\xce\\xcd\\xdc\\xdc\\x48\\xce\\x39\\x1f\\x88\\x58\\x15\\xc3\\xb7\\x60\\x55\\x56\\x5f\\x60\\x55\\x54\\x5f\\xb6\\xc1\\xbf\\xb7\"\n\"\\xb7\\xc0\\x1f\\x0e\\xf7\\x2a\\xf8\\xe1\\x15\\x26\\x22\\x1d\\xbc\\xfd\\x31\\xae\\x0a\\x42\\x59\\x73\\x4f\\x59\\x1f\\xf7\\x3e\\xac\\x15\\xef\\xd6\\x46\\x2f\\xf7\"\n\"\\x29\\x1d\\xf7\\x05\\xf8\\x68\\x15\\x7c\\x82\\x83\\x7e\\x7f\\x94\\x83\\x9a\\x1f\\xbf\\x89\\xb1\\x6d\\x65\\x1a\\x66\\x65\\x6c\\x5f\\x6c\\x74\\xf7\\x22\\x1d\\xc0\"\n\"\\xcf\\xc3\\xbc\\xc7\\xae\\x78\\xdc\\x1d\\xf8\\x09\\x90\\x15\\x91\\x91\\x8e\\x93\\x8f\\x1a\\x98\\xc2\\x0a\\xf7\\xf8\\xa7\\x15\\x58\\x78\\x07\\x6d\\x83\\x87\\x7a\"\n\"\\x7f\\x94\\x83\\x99\\x1f\\xe1\\x06\\x99\\x95\\x93\\x98\\x97\\x81\\x93\\x7d\\x1f\\x80\\xbe\\x06\\xa5\\x94\\x90\\x9b\\x97\\x81\\x93\\x7d\\x1f\\x80\\xf7\\x6a\\x4e\"\n\"\\x06\\xfb\\x15\\xfb\\x6d\\x05\\x65\\x07\\xf7\\x29\\xb4\\x15\\x26\\x06\\xf0\\xf7\\x3d\\x05\\x0e\\xf7\\x76\\xf7\\xbd\\x15\\xf7\\x38\\xf7\\x2a\\x9a\\x9d\\xb7\\x1a\"\n\"\\xc2\\x58\\xba\\x50\\x54\\x52\\x5d\\x60\\x81\\x94\\x82\\x96\\x96\\x91\\x90\\x97\\x8e\\x1e\\xa9\\x94\\xa8\\x9f\\xad\\x1b\\xb0\\xab\\x6e\\x6b\\x75\\x81\\x7e\\x5a\"\n\"\\x5b\\x1f\\x5e\\x5f\\x61\\x64\\x63\\x67\\x85\\x86\\x18\\x5d\\xf7\\x7f\\xb4\\x07\\x99\\x83\\x94\\x7e\\x7f\\x83\\x82\\x7d\\x1e\\x0e\\xf7\\x83\\xf7\\x91\\x15\\xc4\"\n\"\\x06\\xad\\x80\\xb2\\x59\\xae\\x41\\x08\\xb6\\x06\\x9a\\x95\\x95\\x98\\x99\\x81\\x94\\x7c\\x1f\\x7f\\x06\\x85\\x96\\x6b\\xc0\\x7d\\x9d\\x72\\xa0\\x19\\xb6\\x9d\"\n\"\\xa0\\xa6\\xb0\\x1a\\xc3\\x5d\\xb3\\x4a\\x1e\\xfb\\x1e\\x06\\x7b\\x81\\x82\\x7d\\x7d\\x95\\x82\\x9b\\x1f\\x9e\\xfb\\x7f\\x78\\x06\\x7b\\x81\\x82\\x7d\\x7d\\x96\"\n\"\\x82\\x9a\\x1f\\xeb\\x06\\x9b\\x95\\x94\\x99\\x99\\x81\\x94\\x7b\\x1f\\x6d\\x06\\xf7\\x1b\\x04\\xef\\xd3\\x07\\xb1\\xa5\\x77\\x6e\\x6c\\x6a\\x77\\x57\\x1f\\x98\"\n\"\\xf7\\xaa\\xc3\\x1d\\xee\\xf7\\xc7\\x15\\x76\\x80\\x50\\x1d\\xf8\\x26\\x27\\x0a\\x0e\\xf8\\x4e\\xf8\\xca\\x15\\x92\\x8e\\x90\\x93\\x95\\x1a\\x9a\\x80\\x96\\x7d\"\n\"\\x88\\x89\\x8b\\x8a\\x89\\x1e\\x2e\\x63\\x05\\xa7\\x4d\\x50\\x9d\\x6f\\x1b\\x7c\\x80\\x80\\x7c\\x7e\\x92\\x84\\x9c\\x87\\x1f\\xb3\\x83\\x9a\\x86\\xa9\\x7f\\x58\"\n\"\\x75\\x18\\x84\\x87\\x86\\x84\\x81\\x1a\\x7c\\x97\\x7e\\x99\\x8d\\x8e\\x8c\\x8c\\x8f\\x1e\\xe2\\xb3\\xac\\x74\\xbb\\x54\\xa4\\x60\\x19\\xa7\\x61\\x64\\x96\\x5b\"\n\"\\x1b\\xfb\\x15\\x24\\x27\\xfb\\x10\\xfb\\x11\\xf2\\x27\\xf7\\x17\\xca\\xc5\\xa2\\xb6\\xb7\\x1f\\xb9\\xb7\\xa1\\xc3\\xd4\\x1a\\xf6\\x4c\\xf7\\x10\\x2b\\xde\\x1e\"\n\"\\x40\\xfb\\x2d\\x15\\xf3\\xdb\\x3f\\x29\\x2a\\x3a\\x3e\\x26\\x26\\x3a\\xd8\\xec\\xeb\\xdc\\xd9\\xee\\x1f\\x0e\\xf7\\xc0\\xf7\\xd1\\x15\\xfb\\x1e\\xf7\\x1c\\x05\"\n\"\\x93\\x82\\x84\\x8f\\x84\\x1b\\x7d\\x7f\\x80\\x7d\\x83\\x8e\\x85\\x94\\x82\\x1f\\xf7\\x1f\\xfb\\x1b\\xfb\\x1f\\xfb\\x1c\\x05\\x82\\x82\\x88\\x85\\x83\\x1a\\x7d\"\n\"\\x96\\x80\\x9a\\x93\\x91\\x8e\\x94\\x94\\x1e\\xf7\\x1e\\xf7\\x1c\\xf7\\x1f\\xfb\\x1c\\x05\\x82\\x94\\x90\\x88\\x93\\x1b\\x9a\\x96\\x96\\x99\\x93\\x88\\x92\\x82\"\n\"\\x93\\x1f\\xfb\\x1e\\xf7\\x1c\\xf7\\x1e\\xf7\\x1b\\x05\\x93\\x93\\x8f\\x92\\x92\\x1a\\x9a\\x7f\\x96\\x7d\\x84\\x85\\x88\\x82\\x82\\x1e\\x0e\\xf7\\xb4\\xf8\\x68\"\n\"\\xbf\\x1d\\xf7\\x28\\xf7\\x98\\x15\\x3b\\xd4\\x44\\xdd\\xb1\\xae\\x99\\xa7\\xa9\\x1e\\x9d\\x9b\\x92\\x95\\x95\\x1a\\x98\\x81\\x94\\x7e\\x83\\x86\\x89\\x84\\x85\"\n\"\\x1e\\x69\\x6d\\x76\\x80\\x68\\x1b\\x50\\x5a\\xbc\\xc6\\x1f\\xb1\\x07\\xc6\\xb6\\xb9\\xc2\\xb6\\xb0\\x74\\x6f\\x8f\\x1e\\x7b\\x8d\\x92\\x83\\x99\\x1b\\x99\\x94\"\n\"\\x95\\x9b\\x1f\\xc9\\x07\\x9b\\x82\\x95\\x7d\\x80\\x83\\x85\\x7f\\x87\\x1e\\x9d\\x6c\\x75\\x92\\x6c\\x1b\\x3c\\x49\\x48\\x3a\\x1f\\xf7\\x2f\\xf7\\xa5\\xc3\\x1d\"\n\"\\x28\\x1d\\xd7\\xf7\\x73\\x54\\x1d\\x7f\\x96\\x7d\\xf7\\x04\\x1d\\x28\\x1d\\x73\\xf7\\xa5\\x45\\x1d\\x7e\\xe1\\x0a\\x8d\\x92\\x93\\x1e\\xf4\\xdf\\xf3\\x37\\x05\"\n\"\\x85\\x94\\x90\\x63\\x1d\\x3d\\x0a\\x28\\x1d\\xfb\\x1a\\xf7\\x89\\x5b\\x1d\\x28\\x1d\\x30\\xf7\\x99\\xdf\\x1d\\x28\\x1d\\x78\\xf7\\xb9\\x6f\\x1d\\x6c\\x6d\\xa2\"\n\"\\x1d\\x0e\\x28\\x1d\\xf7\\x02\\xf7\\x81\\x15\\x84\\x86\\x88\\x85\\x84\\x1f\\x6d\\x80\\x0a\\x81\\x8f\\x9e\\xdf\\x0a\\x7e\\xf4\\x0a\\x9e\\x1b\\x95\\x97\\x87\\x80\"\n\"\\x9d\\x1f\\x73\\xb4\\x9e\\xd9\\x0a\\xf7\\xd7\\x7b\\x15\\x91\\x06\\xc5\\xcc\\xa6\\xb7\\xbb\\x1f\\xa7\\xa5\\x97\\x9b\\x97\\x1a\\x99\\x81\\x95\\x7c\\x82\\x86\\x88\"\n\"\\x83\\x83\\x1e\\x4c\\x54\\x5c\\x73\\x47\\x1b\\xfb\\x07\\x29\\xed\\xf7\\x08\\x1f\\xd0\\x07\\xbf\\xa1\\xc3\\xaf\\xb2\\x1e\\xb2\\xaf\\xba\\x9f\\xc2\\xb9\\x0a\\x47\"\n\"\\x4f\\x71\\x5b\\x5d\\x1f\\x5f\\x5c\\x6e\\x46\\x4e\\x1a\\x3a\\x07\\x8c\\xfb\\x0b\\xea\\xfb\\x03\\xf7\\x0c\\x73\\x08\\x47\\xa5\\x07\\xa6\\x99\\x85\\x7d\\x7e\\x3a\"\n\"\\x0a\\x95\\x76\\xe2\\x0a\\xaa\\x93\\x1d\\x0e\\x25\\x0a\\xf7\\x71\\xf9\\x40\\x54\\x1d\\x7f\\x96\\x7d\\x83\\x86\\x89\\x82\\x82\\x1e\\xfb\\x06\\x2a\\x05\\x7e\\x80\"\n\"\\x89\\x88\\x81\\x0a\\x91\\x68\\x1d\\x25\\x0a\\xf7\\x0d\\xf9\\x72\\x45\\x1d\\x7e\\x82\\x89\\x87\\x80\\x1a\\x7d\\x96\\x80\\x99\\x92\\x90\\x8d\\x92\\x94\\x1e\\xf3\"\n\"\\xdf\\xf3\\x37\\x05\\x84\\x94\\x90\\x89\\x91\\x1b\\x99\\x97\\x96\\x99\\x95\\x88\\x90\\x7f\\x95\\x1f\\x0e\\x25\\x0a\\x96\\xf9\\x56\\x5b\\x1d\\x25\\x0a\\xba\\xf7\"\n\"\\x09\\x1d\\x93\\x92\\x88\\x92\\x1b\\x99\\x97\\x96\\x9a\\x93\\x8a\\x8c\\x83\\x64\\x1d\\x23\\x0a\\xf7\\x03\\xf9\\x40\\x6d\\x1d\\x23\\x0a\\x71\\xf9\\x72\\x8a\\x1d\"\n\"\\x96\\x89\\x8e\\x3d\\x0a\\x23\\x0a\\xfb\\x1c\\xf9\\x56\\x43\\x1d\\x23\\x0a\\x2e\\xf9\\x66\\xf7\\x06\\x1d\\x9a\\x96\\x96\\x99\\x94\\x8a\\x8c\\x83\\x64\\x1d\\x49\"\n\"\\x1d\\x7e\\xf9\\x81\\xd4\\x1d\\xa6\\x94\\x90\\x9d\\x1b\\x96\\xaa\\x1d\\x9d\\x84\\xa2\\x1b\\xa4\\xa0\\xe8\\x0a\\x2d\\x1d\\xf7\\x02\\xf7\\x67\\xb8\\x0a\\x2d\\x1d\"\n\"\\x8d\\xf7\\x99\\x85\\x1d\\x2d\\x1d\\xfb\\x00\\xf7\\x7d\\x15\\x3f\\x1d\\xf7\\x72\\x16\\x3f\\x1d\\x0e\\x2d\\x1d\\x44\\xf7\\x8d\\xdf\\x1d\\x2d\\x1d\\xf7\\x23\\xf7\"\n\"\\x75\\x97\\x0a\\x69\\x1d\\xfb\\x17\\xea\\x15\\xf7\\x1c\\xf7\\x01\\x05\\x98\\x95\\x8d\\x8e\\x96\\x1a\\x99\\x7f\\x96\\x7d\\x85\\x85\\x88\\x85\\x83\\x1e\\x22\\x37\"\n\"\\x23\\xdf\\x05\\x91\\x83\\x85\\x8e\\x85\\x1b\\x7d\\x7f\\x46\\x1d\\x31\\x1d\\x26\\xf8\\xb8\\x54\\x1d\\x80\\x96\\x7c\\xf7\\x04\\x1d\\x31\\x1d\\xfb\\x61\\xf8\\xea\"\n\"\\x85\\x1d\\x31\\x1d\\xfb\\xcf\\xf8\\xce\\x43\\x1d\\x31\\x1d\\xfb\\xa7\\xf8\\xde\\xd7\\x0a\\x93\\x92\\x88\\x91\\x1b\\x9a\\x97\\x96\\x9a\\x93\\x8a\\x8c\\x83\\x64\"\n\"\\x1d\\x31\\x0a\\xd7\\xf9\\x40\\x15\\x96\\x94\\x8e\\x90\\x65\\x1d\\x82\\x82\\x1e\\xfb\\x07\\x2a\\x05\\x81\\x82\\x88\\x86\\x82\\x1a\\x7c\\x96\\x80\\x99\\x93\\x8f\"\n\"\\x30\\x0a\\x31\\x0a\\xfb\\x1e\\xf9\\x56\\x43\\x1d\\x6c\\x1d\\xf7\\x5b\\xf9\\x06\\x15\\xf7\\x1b\\xf7\\x01\\x05\\x99\\x95\\x8d\\x8f\\x95\\xf7\\x1f\\x1d\\x84\\x8e\"\n\"\\x85\\x1b\\x7d\\x7f\\x80\\x7d\\x80\\x8e\\x87\\x98\\x82\\x1f\\x0e\\x3f\\x0a\\x74\\xf8\\x19\\x15\\x97\\x95\\x8d\\x8f\\x70\\x1d\\x8f\\x8d\\x94\\x96\\x1e\\x0e\\x48\"\n\"\\x1d\\xfb\\x10\\xf8\\x4b\\x3c\\x1d\\x98\\x92\\x66\\x0a\\x96\\x89\\x8e\\x58\\x1d\\x3f\\x0a\\xfb\\x7d\\xf8\\x2f\\xb5\\x0a\\x3f\\x0a\\xfb\\x59\\xf8\\x3f\\xf7\\x11\"\n\"\\x1d\\x95\\x90\\x88\\x92\\x1b\\x9a\\x96\\x96\\x9a\\x93\\x8b\\x8b\\x7d\\x9a\\x1f\\x0e\\x3f\\x0a\\xfb\\x0e\\xf8\\x5f\\x6f\\x1d\\x6d\\x6d\\x72\\xa2\\xa7\\xa7\\xa3\"\n\"\\xa2\\xa9\\x1f\\x0e\\x3f\\x0a\\x96\\xf8\\x26\\x90\\x1d\\x8e\\x9f\\x67\\x1f\\x9d\\x6b\\x7d\\x90\\xb4\\x0a\\xa2\\x1b\\xa4\\xf7\\x20\\x1d\\xf7\\xd5\\x7c\\x15\\xc2\"\n\"\\x8d\\xb7\\x96\\xb5\\xa0\\x08\\xbb\\xa3\\xaa\\xa8\\x9e\\xa7\\x0a\\x89\\x07\\xdb\\x0a\\x42\\xab\\x4a\\xc5\\x62\\x1f\\xa8\\x75\\xa6\\x81\\xba\\x84\\x08\\x49\\xa5\"\n\"\\x07\\xa6\\x99\\x84\\x7e\\x7e\\x7b\\x82\\x74\\x7d\\x7c\\x8f\\x95\\x77\\xe2\\x0a\\xab\\x83\\xa0\\x73\\x1d\\x2c\\x1d\\x49\\xf7\\xea\\x34\\x0a\\x2c\\x1d\\xfb\\x3b\"\n\"\\xf8\\x1c\\x8d\\x1d\\x96\\x80\\x99\\x92\\x91\\x8e\\x91\\x93\\x1e\\xf3\\xdf\\xf3\\x37\\x05\\x85\\x94\\x91\\x63\\x1d\\x7d\\x96\\x1f\\x0e\\x2c\\x1d\\xfb\\xa8\\xf8\"\n\"\\x00\\xb5\\x0a\\x2c\\x1d\\xfb\\x84\\xf8\\x10\\x4d\\x0a\\x32\\x1d\\xcf\\xf8\\xad\\x15\\x98\\x96\\x8d\\x8e\\x95\\x1a\\x99\\xf2\\x1d\\x32\\x1d\\x61\\xf8\\xdf\\x45\"\n\"\\x1d\\x7e\\xe1\\x0a\\x8e\\x91\\x93\\x1e\\xf4\\xdf\\xf3\\x37\\x05\\x85\\x94\\x90\\x63\\x1d\\x3d\\x0a\\x32\\x1d\\xfb\\x29\\xf8\\xc3\\x43\\x1d\\x32\\x1d\\x21\\xf8\"\n\"\\xd3\\xd7\\x0a\\x94\\x91\\x88\\x92\\x1b\\x99\\x97\\x96\\x99\\x94\\x8b\\x8b\\x7c\\x9a\\x1f\\x0e\\xf7\\x41\\xf8\\x37\\x15\\x3a\\x06\\xbb\\x0a\\xf7\\x85\\x06\\xd5\"\n\"\\xc7\\xa5\\x9b\\xc8\\x1b\\xaf\\x9e\\x85\\x0a\\x77\\x97\\x74\\x70\\x1a\\xfb\\x81\\x6f\\x6e\\x0a\\xf7\\x01\\x06\\x9f\\x97\\x53\\x1d\\x6e\\xf7\\x88\\x06\\xd9\\x45\"\n\"\\xc7\\x2f\\x4e\\x66\\x79\\x53\\x57\\x1e\\xf7\\x90\\xf7\\x86\\x90\\x1d\\x8e\\x9f\\xa0\\x0a\\x2c\\x0a\\xf2\\xf7\\x62\\x54\\x1d\\x7f\\x96\\x7d\\x83\\x86\\x88\\x83\"\n\"\\x81\\x1e\\xfb\\x06\\x2a\\x05\\x82\\x83\\x87\\x84\\x83\\x1a\\x7c\\x96\\x80\\x99\\x93\\x8e\\x8c\\x95\\x96\\x1e\\x0e\\x2c\\x0a\\x8d\\xf7\\x94\\xb1\\x0a\\x2c\\x0a\"\n\"\\xfb\\x00\\xf7\\x78\\x43\\x1d\\x2c\\x0a\\x4a\\xf7\\x88\\xe6\\x1d\\x2c\\x0a\\xf7\\x23\\xf7\\x6f\\x15\\x84\\x86\\x89\\x84\\x84\\x1f\\x6e\\x80\\x0a\\x83\\x8e\\x9f\"\n\"\\x67\\x1f\\x9e\\x6a\\x7e\\x8f\\x76\\x1b\\x70\\x75\\xcf\\x0a\\x9d\\x1b\\x96\\x95\\x87\\x80\\x9f\\x1f\\x73\\xb4\\x9d\\x84\\xa3\\x1b\\xa3\\xa1\\x96\\xa4\\xa5\\x1f\"\n\"\\x9e\\x9d\\x90\\x92\\x95\\x1a\\x98\\x7f\\x96\\x7d\\x1e\\x0e\\x3e\\x0a\\xf7\\x31\\xf8\\x04\\x15\\xf7\\x1b\\xf7\\x01\\x05\\x97\\x94\\x8e\\x90\\x95\\x1a\\x99\\x80\"\n\"\\x96\\x7d\\x84\\x86\\x89\\x84\\x82\\x1e\\x23\\x37\\x23\\xdf\\x05\\x92\\x82\\x86\\x8d\\x85\\x1b\\x7c\\x80\\x46\\x1d\\x28\\x0a\\x5b\\xf8\\xa6\\x54\\x1d\\xf2\\x1d\"\n\"\\x28\\x0a\\xfb\\x22\\xf8\\xd8\\xb1\\x0a\\x28\\x0a\\xfb\\x90\\xf8\\xbc\\x43\\x1d\\x28\\x0a\\xfb\\x65\\xf8\\xcc\\xe6\\x1d\\x5d\\x0a\\xf7\\xee\\xf7\\x70\\x34\\x0a\"\n\"\\x5d\\x0a\\xee\\xf7\\x86\\x43\\x1d\\x4a\\x0a\\xfb\\x49\\xf2\\x15\\xf7\\x1b\\xf7\\x00\\x05\\x99\\x96\\x8d\\x8f\\x95\\x1a\\x99\\x7f\\x96\\x7d\\x84\\x86\\x88\\x85\"\n\"\\xf7\\x3f\\x1d\\x92\\x82\\x86\\x8d\\x85\\x1b\\x7c\\x80\\x46\\x1d\\xf7\\x7a\\xf8\\xab\\x15\\x52\\x06\\x79\\x81\\x83\\x7d\\x7d\\x95\\x82\\x9d\\x1f\\x95\\xfb\\x4c\"\n\"\\x79\\x06\\x7a\\x81\\x83\\x7d\\x7d\\x95\\x82\\x9c\\x1f\\xdd\\x06\\x9d\\x95\\x93\\x9a\\x99\\x81\\x93\\x79\\x1f\\x7a\\xf7\\x24\\x06\\xb1\\xab\\x9c\\x95\\xaf\\x1b\"\n\"\\xaf\\xa5\\x77\\x6f\\x1f\\xfb\\x24\\x81\\x07\\x79\\x81\\x83\\x7d\\x7c\\x95\\x83\\x9d\\x1f\\xce\\x06\\x9d\\x95\\x94\\x99\\x99\\x81\\x93\\x79\\x1f\\x81\\xf7\\x28\"\n\"\\x06\\xbe\\x5c\\xb1\\x4e\\x67\\x75\\x82\\x72\\x6f\\x1e\\x0e\\xbe\\x1d\\xf7\\xae\\xf7\\xd1\\x15\\xcd\\x44\\x1d\\x49\\xc0\\x06\\xb9\\xa5\\xad\\xaf\\x99\\x9d\\x88\"\n\"\\x84\\xa3\\x1e\\x87\\x96\\x8c\\x8b\\x8e\\x1b\\x99\\x95\\xf1\\x0a\\x4d\\x59\\x50\\x43\\x1f\\x56\\x43\\x07\\x20\\x1d\\xd3\\xfb\\xd1\\x3d\\x20\\x0a\\xf7\\x58\\x21\"\n\"\\x0a\\x49\\x06\\x0e\\xf7\\x06\\xbe\\x15\\x3d\\x20\\x0a\\xf8\\xa5\\x39\\x0a\\x45\\xf8\\x04\\xfb\\x39\\xc0\\x06\\xb9\\xa6\\xad\\xae\\x9a\\x99\\x88\\x83\\xa7\\x1e\"\n\"\\x88\\x95\\x8d\\x8b\\x8e\\x1b\\x98\\x96\\xf1\\x0a\\x71\\xeb\\x1d\\x06\\xf7\\xdd\\xfb\\xd1\\x15\\xfb\\x05\\xf7\\xd1\\xf7\\x05\\x06\\xfb\\xa9\\xfb\\xd1\\x15\\xf7\"\n\"\\xd1\\xf7\\x04\\xfb\\xd1\\x07\\xf8\\x04\\x04\\xfb\\x04\\xc0\\x06\\xb9\\xa5\\xad\\xaf\\x99\\x9b\\x88\\x83\\xa4\\x1e\\x8e\\x8a\\x05\\x8d\\x8d\\x8a\\x8a\\x8e\\x1f\"\n\"\\x81\\x77\\x86\\x76\\x72\\x1a\\x0e\\xf8\\x83\\xf8\\xd9\\x15\\x58\\x99\\x05\\x90\\x79\\x75\\x8e\\x7d\\x1b\\x72\\xeb\\x1d\\xfb\\xd1\\x3d\\x20\\x0a\\xf8\\xa5\\x39\"\n\"\\x0a\\x45\\x06\\x57\\x16\\xfb\\x05\\xf7\\xd1\\xd9\\x44\\x1d\\x3d\\xc0\\x06\\xb9\\xa6\\xad\\xae\\x98\\x99\\x89\\x84\\xa3\\x1e\\xfb\\xa9\\xfc\\x80\\x15\\xf7\\xd1\"\n\"\\xf7\\x04\\xfb\\xd1\\x07\\xf8\\x04\\x04\\xfb\\x04\\xc0\\x06\\xb9\\xa5\\xad\\xaf\\x99\\x9b\\x88\\x83\\xa4\\x1e\\x8e\\x8a\\x05\\x8d\\x8d\\x8a\\x8a\\x8e\\x1f\\x81\"\n\"\\x77\\x86\\x76\\x72\\x1a\\x0e\\xf8\\x82\\xf8\\x6d\\x15\\x91\\x92\\x8e\\x91\\x91\\x1a\\x97\\x81\\x95\\x7f\\x83\\x87\\x89\\x80\\x82\\x1e\\xfb\\xf2\\xfc\\x2e\\x05\"\n\"\\x84\\x83\\x88\\xf3\\x0a\\x88\\xa4\\x0a\\xf8\\x28\\xfb\\x09\\x15\\xa6\\x9f\\x99\\xa3\\xaa\\x1a\\xc2\\x5b\\xb8\\x51\\x51\\x5b\\x5e\\x54\\x6c\\x98\\x73\\xa7\\x77\"\n\"\\xf7\\x08\\x1d\\xb0\\xa8\\xf7\\x3d\\x1d\\xa7\\xa6\\xaf\\x1f\\xfb\\x2f\\x04\\xb4\\xaa\\x70\\x68\\x67\\x6c\\x6f\\x63\\x63\\x6c\\xa7\\xaf\\xae\\xaa\\xa6\\xb2\\x1f\"\n\"\\x0e\\xf8\\x70\\xf7\\x24\\x1d\\x82\\x1e\\xfb\\xf3\\xfc\\x2e\\x05\\x83\\x82\\x89\\x87\\x85\\x1a\\x7f\\x95\\x81\\x98\\x93\\x8e\\x8d\\x97\\x95\\x1e\\xf8\\x2b\\xf7\"\n\"\\x08\\x15\\xa6\\x9e\\x99\\xa5\\xf7\\x02\\x0a\\x71\\xa6\\x78\\xc9\\x1d\\xfb\\xe8\\xf7\\xc9\\xbf\\x1d\\xf8\\x71\\xf7\\x24\\x1d\\x81\\xd8\\x0a\\xf8\\x2b\\xf7\\x08\"\n\"\\x15\\xa7\\x9f\\x99\\xa4\\xa9\\x1a\\xc2\\x5b\\xb8\\x51\\x50\\x5b\\x5e\\x54\\x6d\\x99\\x72\\xa7\\x77\\x1e\\x6a\\x75\\x7c\\x70\\x69\\x1a\\x51\\xbd\\x5c\\xca\\xc9\"\n\"\\xbd\\xba\\xc5\\xad\\x7c\\xa6\\x6a\\xa1\\x1e\\x4a\\xf7\\x1a\\x15\\xb0\\xa8\\x71\\x69\\x6c\\x6e\\x73\\x66\\x66\\x6f\\xa3\\xaa\\xac\\xa8\\xa6\\xaf\\x1f\\xfb\\x2f\"\n\"\\x04\\xb4\\xaa\\x70\\x68\\x67\\x6b\\x6f\\x64\\x63\\x6b\\xa7\\xaf\\xae\\xaa\\xa6\\xb3\\x1f\\xfc\\x0e\\xf8\\x27\\x15\\xf7\\x11\\x06\\x99\\x7d\\x1d\\xfb\\x3a\\xfb\"\n\"\\x2f\\x06\\x7e\\x93\\x82\\x97\\x90\\x8f\\x8c\\x8f\\x92\\x1e\\x95\\x9d\\xa6\\x92\\x9f\\x1b\\xb4\\xa7\\x6e\\x5f\\x58\\x6a\\x68\\x5b\\x6d\\x70\\x97\\xa1\\x72\\x1f\"\n\"\\x90\\x85\\x87\\x8d\\x85\\x1b\\x80\\x82\\x82\\x7f\\x71\\xcf\\x68\\xbd\\xd3\\xbd\\xbf\\xd5\\xce\\x5e\\xbb\\x4d\\x76\\x7a\\x88\\x82\\x72\\x1f\\x0e\\xf8\\x70\\xf8\"\n\"\\x6d\\x15\\x91\\x91\\x8e\\x92\\x91\\x1a\\x97\\xc2\\x0a\\xf8\\x2b\\xf7\\x08\\x15\\xa6\\x9f\\x99\\xa4\\xf7\\x02\\x0a\\x72\\xa6\\x77\\xc9\\x1d\\xfb\\x86\\xf8\\x27\"\n\"\\x15\\x5f\\xfb\\x17\\x5e\\xfb\\x25\\x7f\\x1a\\x81\\x95\\x82\\x95\\x95\\x92\\x91\\x96\\x8e\\x1e\\xe5\\xf7\\xb1\\x05\\xb9\\xfb\\x73\\x57\\x07\\x7d\\x93\\x82\\x98\"\n\"\\x97\\x93\\x94\\x99\\x1e\\x96\\x07\\x0e\\xb2\\x1d\\xf7\\x25\\xf7\\x73\\x6d\\x1d\\x28\\x1d\\xfb\\x0e\\xf7\\x91\\x42\\x1d\\x28\\x1d\\x0e\\xf6\\xf8\\xa2\\x4a\\x1d\"\n\"\\xf8\\x05\\xfb\\x59\\x15\\xbf\\xfb\\x19\\x05\\x46\\x2e\\x1d\\xf7\\x2a\\x29\\x1d\\x70\\xf7\\x05\\x0a\\xfb\\x58\\x26\\x1d\\xef\\x06\\xfb\\x43\\xfc\\x61\\x05\\x71\"\n\"\\x86\\x0a\\xf7\\x2a\\x22\\x0a\\x46\\x06\\xbd\\xf7\\x19\\x05\\xf7\\x82\\xbe\\x15\\xfb\\x6f\\x06\\xf4\\xf7\\xa9\\x05\\x92\\x06\\x0e\\x28\\x1d\\xf7\\x0c\\xf7\\x34\"\n\"\\x15\\xa0\\x97\\x94\\x9b\\x9b\\x7f\\x94\\x76\\x5c\\x1d\\xf7\\xe2\\xf8\\xc7\\x15\\xfb\\x63\\x55\\x0a\\x96\\x1d\\x6f\\x35\\x0a\\xf7\\x2b\\x21\\x0a\\x44\\x06\\xbd\"\n\"\\xf7\\x19\\x05\\xf7\\x97\\x06\\xbe\\xfb\\x19\\x05\\x47\\x20\\x0a\\xe9\\x06\\x7a\\x1d\\xbe\\xb5\\xb3\\x9f\\xa0\\x96\\x82\\x94\\x82\\x87\\x87\\x8a\\x88\\x87\\x1e\"\n\"\\x7e\\x74\\x86\\x89\\x79\\x1b\\x71\\x7f\\x94\\x9e\\xa7\\xaa\\xaa\\xbb\\x9f\\x1f\\xa1\\x95\\x90\\x8f\\x9a\\x5b\\x0a\\x6a\\x06\\xfb\\x12\\xf7\\x4c\\xf7\\x46\\x1d\"\n\"\\x0e\\x28\\x1d\\x76\\xf7\\xb9\\x6f\\x1d\\x6c\\x6d\\xa2\\x1d\\xb0\\xf7\\x0d\\x15\\x96\\x95\\x8e\\x8f\\x65\\x1d\\x83\\x82\\x1e\\xfb\\x06\\x29\\x05\\x7e\\x80\\x89\"\n\"\\x88\\x82\\x1a\\x7c\\x97\\x80\\x99\\x93\\x8f\\x30\\x0a\\x92\\x0a\\x72\\x1d\\xca\\xa4\\xb9\\xbc\\x1e\\xa7\\xa5\\x97\\x9b\\x98\\x1a\\x98\\x6e\\x1d\\x67\\xf7\\x60\"\n\"\\x15\\x97\\x95\\x8d\\x8f\\x70\\x1d\\x90\\x30\\x0a\\x72\\x1d\\xca\\xa4\\xb9\\xbc\\x1e\\xa7\\xa5\\x97\\x9b\\x98\\x1a\\x98\\x6e\\x1d\\xfb\\x41\\xea\\x5a\\x1d\\xba\"\n\"\\x1d\\xfb\\x41\\xf7\\x92\\xd9\\x1d\\xba\\x1d\\xfb\\x40\\xf7\\x76\\x26\\x0a\\x0e\\x8b\\x0a\\x9b\\x0a\\x90\\xf8\\xd3\\x5a\\x1d\\x8f\\x0a\\xae\\x16\\xf8\\xa6\\x06\"\n\"\\xfb\\x84\\xf8\\xc6\\x05\\x59\\x06\\xfb\\x38\\xfc\\x93\\x15\\xf7\\x51\\xf8\\x47\\xf7\\x51\\xfc\\x47\\x05\\x0e\\x25\\x0a\\x90\\xf9\\x5e\\x42\\x1d\\x25\\x0a\\xf7\"\n\"\\x15\\xf8\\xd3\\x5a\\x1d\\x25\\x0a\\xf7\\x16\\xf9\\x56\\x26\\x0a\\x0e\\x25\\x0a\\xf7\\x8b\\xf9\\x01\\x2d\\x0a\\xf8\\x8f\\xf8\\x94\\x15\\xa8\\x06\\x54\\x0a\\xfb\"\n\"\\x2a\\x50\\x0a\\xd0\\xfc\\x42\\x06\\xfb\\xbc\\xf8\\x75\\x05\\xfb\\x02\\x22\\x1d\\xbc\\x92\\x1d\\xf8\\x42\\x06\\xf7\\xb6\\xfc\\x67\\x05\\x92\\x7f\\x8f\\x7b\\x77\"\n\"\\x1a\\x51\\x60\\x64\\x4c\\x1e\\x4b\\x2e\\x1d\\xcc\\x06\\xbc\\xb3\\x9c\\xad\\xaa\\x1f\\xae\\xb4\\x90\\x9e\\x8c\\xf0\\x08\\x0e\\x72\\x0a\\x95\\xa0\\xce\\x1d\\xf8\"\n\"\\x10\\x06\\x63\\x74\\x78\\x70\\x66\\xc4\\x0a\\x9f\\xa3\\xaf\\x9f\\x1f\\xa9\\x9b\\x05\\xf7\\x34\\x34\\x1d\\xfb\\x03\\xfb\\xc3\\x07\\x0e\\x94\\x0a\\xd5\\xf8\\xa2\"\n\"\\x4a\\x1d\\xf7\\x3a\\xfb\\x07\\x15\\xf7\\x18\\x64\\x06\\x27\\x1d\\xf7\\x15\\x34\\x1d\\x64\\xfb\\x18\\xf7\\x57\\xf7\\xa9\\x30\\x07\\x76\\x94\\x80\\x9c\\x9b\\x95\"\n\"\\x97\\x9f\\x1e\\xf7\\x22\\xfc\\x30\\xf7\\x44\\x1d\\xaa\\xfc\\x61\\x6c\\x2e\\x1d\\xf8\\x45\\xf7\\x36\\x06\\x56\\x1d\\x7f\\x77\\x1e\\xfb\\x03\\xfb\\xbe\\x07\\x0e\"\n\"\\x80\\x1d\\xe0\\xf8\\xa2\\x4a\\x1d\\xf8\\x25\\xfb\\x07\\x15\\xfb\\x6b\\x5a\\x07\\x20\\x1d\\xf7\\x21\\x06\\xa0\\x97\\x5a\\x0a\\x63\\xf8\\x61\\x9f\\x33\\x0a\\xfb\"\n\"\\x0d\\x26\\x1d\\xbc\\xfb\\x57\\xfb\\x94\\xf7\\x57\\xbb\\x22\\x0a\\xfb\\x03\\x25\\x1d\\x96\\xfc\\x61\\x80\\x06\\x40\\x1d\\xf7\\x03\\x29\\x1d\\x5b\\xf7\\x6b\\x06\"\n\"\\x0e\\xf7\\x01\\xf7\\xc6\\x15\\xf7\\x95\\x33\\x0a\\xfb\\x91\\x06\\xf3\\xa2\\xd4\\xca\\xeb\\xb9\\x0a\\xfb\\x0f\\x26\\x31\\xfb\\x14\\x77\\x1f\\x50\\x06\\x20\\x1d\"\n\"\\xc3\\x63\\x55\\x06\\x2b\\x1d\\xc3\\x89\\x06\\x95\\x58\\x97\\x6f\\xa7\\x65\\x08\\x44\\xbf\\xd9\\x62\\xde\\x1b\\xcc\\xc9\\xa4\\xb9\\xbd\\x1f\\xa7\\xa5\\x97\\x9b\"\n\"\\x98\\x1a\\x98\\xf7\\x05\\x1d\\x49\\x50\\xa8\\xc3\\x61\\x1f\\x74\\xa8\\x81\\xa2\\x81\\xb4\\x08\\x8d\\xf7\\x90\\x07\\x53\\x0a\\xfb\\x93\\x06\\x0e\\xc8\\x1d\\x7f\"\n\"\\x1d\\xfb\\xd4\\xf9\\x6c\\x5d\\x1d\\xe1\\x4d\\x1d\\x68\\x86\\x62\\x71\\x55\\x1b\\x56\\x51\\x1d\\xb6\\x1d\\xfb\\x76\\xf9\\x80\\xd9\\x1d\\x7f\\x1d\\xfb\\x36\\xfb\"\n\"\\x16\\x15\\x91\\x95\\x8d\\x8f\\xed\\x1d\\xb6\\x1d\\xfb\\x75\\xf9\\x64\\x26\\x0a\\x0e\\xf7\\x0d\\xf8\\x1f\\x15\\xfb\\xec\\x63\\x07\\x65\\x0a\\x5b\\xf7\\x6b\\xf7\"\n\"\\x96\\xfb\\x6b\\x5b\\x06\\x65\\x0a\\x63\\xf7\\xec\\xad\\x06\\xa0\\x96\\x93\\x9d\\x9b\\x80\\x94\\x76\\x1f\\x69\\xcd\\x9f\\x3e\\x1d\\xfb\\x0c\\x50\\x0a\\xbb\\x49\"\n\"\\xfb\\x96\\xcd\\xbb\\x3d\\x1d\\xfb\\x0c\\x22\\x1d\\x9f\\x49\\x69\\x06\\x76\\x80\\x82\\x7b\\x79\\x96\\x83\\xa0\\x1f\\xe1\\x16\\xf7\\x96\\x3d\\xfb\\x96\\x06\\x0e\"\n\"\\xf8\\x43\\xf7\\x9e\\x15\\xfb\\x6b\\x5b\\x07\\x65\\x0a\\x63\\xf8\\x61\\x9f\\x06\\xa0\\x96\\x94\\x9c\\x9c\\x80\\x93\\x76\\x89\\x1d\\x06\\xf7\\x13\\xf8\\x9b\\x3c\"\n\"\\x1d\\x99\\x91\\x91\\x8d\\x92\\x93\\x1e\\xf3\\xdf\\xf4\\x37\\x05\\x85\\x93\\x91\\x63\\x1d\\x7e\\x96\\x1f\\x0e\\xf7\\x07\\xf8\\x94\\x15\\xfc\\x61\\x3a\\x07\\x77\"\n\"\\x80\\x50\\x1d\\xf7\\x68\\x06\\xa0\\x96\\x21\\x1d\\x77\\x1f\\x3a\\xf8\\x61\\xdc\\x06\\x9f\\x96\\x83\\x0a\\xfb\\x68\\x06\\x76\\x80\\x82\\x7a\\x7b\\x96\\x82\\x9f\"\n\"\\x1f\\xf8\\x5e\\x16\\xfc\\x66\\x07\\x41\\x4d\\x51\\x3c\\x61\\x54\\xa1\\xa9\\x69\\x1e\\xa0\\x73\\x8a\\x8c\\x81\\x1b\\x7d\\x7f\\x80\\x7d\\x80\\x8d\\x88\\x9d\\x7d\"\n\"\\x1f\\x56\\xcd\\xb9\\x78\\xc7\\x1b\\xf4\\xe3\\xde\\xef\\x1f\\xf8\\x66\\x9f\\x07\\x54\\x0a\\xfb\\x49\\x35\\x0a\\x0e\\x23\\x0a\\xfb\\x2a\\xf9\\x5e\\x5d\\x1d\\xe1\"\n\"\\x64\\x0a\\x23\\x0a\\x72\\xf9\\x56\\x26\\x0a\\x0e\\x23\\x0a\\xe7\\xf9\\x01\\x2d\\x0a\\xf7\\xda\\xf8\\x94\\x15\\xf7\\x1a\\x3d\\x1d\\xfb\\xd4\\x22\\x1d\\xf7\\x1a\"\n\"\\xfc\\x61\\xfb\\x1a\\x20\\x0a\\xf7\\x9a\\x06\\x62\\x74\\x78\\x6f\\x67\\x1a\\x62\\xa9\\x73\\xbe\\xb6\\xb3\\x9f\\xa0\\x96\\x82\\x94\\x81\\x88\\x87\\x8a\\x88\\x86\"\n\"\\x1e\\x7d\\x74\\xa1\\x1d\\xa7\\xa6\\xa6\\xc0\\xa5\\x1f\\x9b\\x93\\x91\\x92\\x97\\x5b\\x0a\\xfb\\x1a\\x06\\x0e\\x23\\x0a\\x0e\\xf7\\xdb\\xf8\\x94\\x15\\xf7\\x19\"\n\"\\x06\\x9f\\x97\\x94\\x9b\\x9c\\x7f\\x94\\x77\\x1f\\xfb\\xd2\\x36\\x1d\\xf7\\x19\\xfc\\x61\\xfb\\x19\\x25\\x1d\\xf7\\xd2\\x06\\x9f\\x97\\xf7\\x40\\x1d\\xfb\\x19\"\n\"\\x06\\xfb\\x16\\xf9\\x2b\\x15\\x72\\x77\\x77\\x73\\x73\\x9f\\x77\\xaf\\x1d\\xf7\\x63\\x16\\xe7\\x0a\\x0e\\xf6\\xf8\\xa2\\x4a\\x1d\\xf7\\x9e\\xf7\\x17\\x15\\xf7\"\n\"\\x19\\x22\\x0a\\xfb\\xd2\\x25\\x1d\\xf7\\x19\\xfc\\x61\\xfb\\x19\\x25\\x1d\\xf7\\xd2\\x22\\x0a\\xfb\\x19\\x06\\x0e\\x23\\x0a\\xf7\\x00\\xf9\\x4e\\x15\\x84\\x86\"\n\"\\x89\\x84\\x84\\x1f\\x6d\\x80\\x0a\\x82\\x8e\\x9f\\x68\\x1f\\x9d\\x6b\\x7d\\x90\\xf7\\x03\\x0a\\x81\\x1a\\x7f\\x96\\x80\\xf7\\x07\\x0a\\x9d\\x1b\\x96\\x97\\x87\"\n\"\\x80\\x9d\\x1f\\x73\\xb3\\x9e\\x84\\xa2\\x1b\\xa5\\x9f\\x95\\xa5\\xa6\\x1f\\x9f\\x9e\\x8f\\x91\\x95\\xa4\\x1d\\x9e\\x0a\\xfb\\x3a\\xf8\\xfd\\xe2\\x1d\\x3d\\x0a\"\n\"\\xf7\\x3f\\xf7\\x70\\x15\\xd8\\xce\\xe7\\x6e\\xb5\\x4f\\xd4\\xfb\\x5a\\x19\\xe5\\x27\\x0a\\x57\\x06\\x43\\xf7\\x4b\\x65\\xbe\\x2f\\xb3\\xf7\\x6a\\xf7\\x4f\\x18\"\n\"\\x99\\x06\\xa0\\x97\\x41\\x1d\\xfb\\x0b\\x55\\x0a\\x97\\x82\\xa0\\xcb\\x1d\\x0e\\xb5\\x1d\\xf7\\x55\\xfb\\x24\\x87\\x1d\\x41\\x0a\\xf7\\x10\\xf9\\x40\\xd1\\x0a\"\n\"\\x85\\x83\\x1a\\x7c\\x96\\x80\\x9a\\x92\\x90\\x30\\x0a\\xf7\\xc1\\xf8\\x94\\x15\\xf7\\x46\\xfc\\x61\\x05\\x46\\x25\\x1d\\xf7\\x2a\\x38\\x0a\\x70\\xf7\\x05\\x0a\"\n\"\\xfb\\x63\\x06\\x76\\x7f\\x82\\x7a\\x7b\\x96\\x1d\\x70\\x36\\x1d\\xf7\\x2a\\x22\\x0a\\x46\\x06\\xf7\\x42\\xf8\\x61\\x05\\x0e\\x41\\x0a\\xf7\\xa5\\xf8\\x6a\\x15\"\n\"\\x90\\x92\\x8e\\x92\\x90\\x1a\\x9a\\x80\\x96\\x7d\\x80\\x86\\x88\\x7d\\x82\\x1e\\x36\\xfb\\x0f\\x05\\x85\\x81\\x89\\x87\\x86\\x1a\\x7c\\x97\\x80\\x99\\x96\\x90\"\n\"\\x8e\\x99\\x94\\x1e\\x0e\\x41\\x0a\\xf0\\xfb\\x24\\xb6\\x0a\\x41\\x0a\\xf7\\x17\\xf7\\xc1\\x15\\x61\\x6b\\x6c\\x64\\x64\\xab\\x6d\\xb5\\x1f\\x95\\x06\\xb6\\xab\"\n\"\\xa9\\xb2\\xb3\\x6b\\xa9\\x60\\x1f\\x0e\\x81\\x1d\\x49\\x1d\\x82\\xf9\\x73\\xe7\\x1d\\x49\\x1d\\xfb\\x26\\xf9\\x06\\x5a\\x1d\\x49\\x1d\\x25\\x2e\\x3c\\x0a\\x91\"\n\"\\x1a\\x99\\xc1\\x0a\\x49\\x1d\\x0e\\x2d\\x1d\\xfb\\x0e\\xf7\\x85\\x15\\x7c\\x80\\x80\\x7b\\x4c\\xcc\\x5b\\xe0\\xe1\\xcc\\xbb\\xca\\x9b\\x80\\x96\\x7c\\x7c\\x83\"\n\"\\x83\\x79\\x89\\x1f\\x67\\x86\\x62\\x72\\x55\\x1b\\x56\\x51\\x1d\\x2d\\x1d\\xb0\\xf7\\x62\\x55\\x1d\\x93\\x1a\\x9a\\xde\\x1d\\x84\\x83\\x68\\x0a\\x2d\\x1d\\xf7\"\n\"\\x0c\\xf7\\x28\\x2d\\x0a\\xeb\\xbe\\x15\\xa4\\x79\\x0a\\x3f\\xf7\\x78\\xf7\\x0e\\x07\\x6e\\x91\\x86\\x8c\\x7a\\x91\\x08\\x3b\\xa6\\x5e\\xcb\\xe1\\x1a\\xc4\\x9f\"\n\"\\xbe\\xaf\\xb3\\x1e\\xb7\\xb4\\xbe\\x9f\\xd3\\x1b\\xd3\\xbf\\x77\\x5f\\xb3\\x1f\\xaf\\x63\\x9f\\x57\\x54\\x1a\\x39\\x61\\x4b\\x44\\x6e\\x1e\\x77\\x83\\x83\\x89\"\n\"\\x69\\x85\\x08\\xfb\\x0e\\xf7\\x77\\xd7\\x79\\x0a\\x72\\xfb\\x0f\\xa9\\x07\\xf7\\x07\\xad\\xc7\\xdb\\xf7\\x0c\\x1a\\xf7\\x28\\xfb\\x09\\xf7\\x04\\xfb\\x2f\\xfb\"\n\"\\x2f\\xfb\\x09\\xfb\\x04\\xfb\\x29\\xfb\\x0a\\xc8\\x39\\xf7\\x07\\x6a\\x1e\\x6d\\x07\\xfb\\x39\\xf8\\x6f\\x4a\\x1d\\x0e\\x2d\\x1d\\x0e\\xf7\\xd3\\xf8\\xd3\\x15\"\n\"\\xfb\\x25\\xfb\\x02\\xfb\\x14\\xfb\\x3c\\xfb\\x39\\xf7\\x03\\xfb\\x15\\xf7\\x21\\xf7\\x21\\xf7\\x03\\xf7\\x16\\xf7\\x39\\xf7\\x38\\xfb\\x02\\xf7\\x17\\xfb\\x1f\"\n\"\\x1f\\x86\\x58\\x15\\xf7\\x05\\xe4\\x20\\xfb\\x1d\\xfb\\x1c\\x32\\xfb\\x00\\xfb\\x04\\xfb\\x03\\x33\\xf7\\x01\\xf7\\x1c\\xf7\\x1a\\xe4\\xf7\\x01\\xf7\\x01\\x1f\"\n\"\\xfb\\x87\\x8d\\x15\\x8c\\x91\\x8b\\x8e\\x8d\\x1a\\x9b\\x82\\x94\\x7b\\x7b\\x82\\x82\\x78\\x88\\x1e\\x74\\xfb\\x25\\x05\\x89\\x83\\x8b\\x89\\x89\\x1a\\x7c\\x94\"\n\"\\x82\\x9b\\x9b\\x93\\x94\\x9e\\x8f\\x1e\\x0e\\x8c\\x0a\\xf7\\x80\\xf9\\x1b\\x54\\x1d\\x80\\x96\\x7c\\x83\\x86\\x89\\x82\\x82\\x1e\\xfb\\x06\\x2a\\x05\\x80\\x82\"\n\"\\x88\\x85\\x83\\x1a\\x7c\\x96\\x80\\x9a\\x92\\x8f\\x8d\\x94\\x95\\x1e\\x0e\\xf7\\xda\\xb1\\x15\\xf7\\x1b\\x9a\\xe9\\xee\\xf7\\x14\\x1a\\xf7\\x13\\x2d\\xee\\xfb\"\n\"\\x1b\\x9a\\x1e\\xaf\\xf0\\x07\\x62\\x1d\\xfb\\x92\\x22\\x1d\\xf0\\x67\\x06\\xfb\\x1b\\x7c\\x2d\\x28\\xfb\\x13\\x1a\\xfb\\x14\\xe9\\x28\\xf7\\x1b\\x7c\\x1e\\x5d\"\n\"\\x26\\x07\\x20\\x1d\\xf7\\x92\\x21\\x0a\\x26\\x06\\xf8\\x72\\x04\\xf3\\x7c\\xd4\\x3d\\x2a\\x1a\\x29\\x42\\x3d\\x23\\x7c\\x1e\\x57\\x16\\x23\\x9a\\x42\\xd9\\xed\"\n\"\\x1a\\xec\\xd3\\xd9\\xf4\\x9a\\x1e\\x0e\\x96\\x0a\\xf7\\xda\\xf8\\x94\\x15\\xc0\\x29\\x1d\\xfb\\x32\\x25\\x1d\\xc0\\xfb\\xb0\\x06\\xfb\\x00\\x93\\x69\\xbb\\x8d\"\n\"\\xf7\\x21\\x08\\xf7\\x1e\\x33\\x07\\x40\\x1d\\xaf\\x34\\x06\\x8c\\xfb\\x01\\x99\\x5b\\xb2\\x64\\xaf\\x6a\\xba\\x79\\xc2\\x89\\x08\\xfb\\x11\\x56\\x78\\x0a\\xf7\"\n\"\\x32\\x22\\x0a\\x56\\xf7\\x12\\x06\\xbb\\xb7\\x9a\\xa6\\xad\\x1f\\xbd\\xb2\\x9a\\xba\\x8c\\xf7\\x0c\\x08\\xe2\\xaf\\x07\\x32\\x0a\\x33\\xfb\\x1e\\x06\\x8d\\xfb\"\n\"\\x1e\\x66\\x56\\x22\\x85\\x08\\x0e\\x47\\x0a\\xf7\\x31\\xf8\\x4a\\xe7\\x1d\\x47\\x0a\\x9f\\xf7\\xdd\\x5a\\x1d\\x47\\x0a\\xdf\\xfc\\x1a\\x87\\x1d\\x84\\x1d\\x69\"\n\"\\x1d\\x87\\xf7\\x60\\x6d\\x1d\\xf7\\xd2\\x7c\\x15\\xf7\\x0c\\x94\\xd7\\xcc\\xea\\x1a\\xbe\\x73\\xb8\\x63\\xa3\\x1e\\x6c\\x9d\\x6e\\x94\\x3e\\x97\\x4e\\x95\\x72\"\n\"\\x93\\x72\\x9b\\x08\\x73\\x9b\\x7e\\xa4\\xa8\\x1a\\xc9\\xc5\\xb8\\xda\\xd7\\xcc\\x0a\\x84\\x07\\xae\\x62\\x5e\\xeb\\x0a\\xaf\\x7f\\xd2\\xab\\x0a\\xa7\\x6d\\xbe\"\n\"\\x74\\xbe\\x84\\x08\\x4a\\xa5\\x07\\xa6\\x99\\x84\\x7e\\x7e\\x7b\\x82\\x74\\x7d\\x7c\\x8f\\x95\\x77\\x1f\\x90\\x81\\x89\\x8c\\x85\\x47\\x1d\\x85\\xa0\\x1d\\xb1\"\n\"\\x73\\xa3\\x62\\x8e\\x1f\\x0e\\xd0\\x0a\\xaf\\x7f\\xd2\\x88\\x0a\\xfb\\x21\\xf7\\x92\\x8a\\x1d\\x96\\x89\\x8e\\x3d\\x0a\\x69\\x1d\\xfb\\x09\\xfd\\x04\\xe5\\x1d\"\n\"\\xf8\\xac\\xf8\\xc7\\x15\\xfc\\x26\\x59\\x06\\xf7\\x4d\\xfb\\x6c\\xfb\\x4d\\xfb\\x8a\\x05\\x58\\xf8\\x2d\\xf7\\x2a\\x07\\xa0\\x84\\x95\\x7c\\x7d\\x83\\x82\\x7c\"\n\"\\x8a\\x1e\\x86\\x21\\x05\\xfb\\xbd\\x06\\xf7\\x56\\xf7\\x8b\\xfb\\x4f\\xf7\\x6a\\x05\\xf7\\xac\\x06\\x95\\xfb\\x04\\x05\\x81\\x8c\\x94\\x83\\x97\\x1b\\x98\\x93\"\n\"\\x94\\x9b\\x1f\\x0e\\x61\\x0a\\xf7\\xdb\\xf7\\xed\\x15\\xf7\\x3b\\xf7\\x2f\\x49\\x07\\x78\\x96\\x7d\\x9b\\x9c\\x93\\x95\\xa2\\x1e\\xf7\\x09\\xfc\\x67\\xfb\\x09\"\n\"\\x07\\x58\\x0a\\xcd\\xf7\\x30\\xfb\\x3b\\x29\\x07\\xba\\x0a\\xed\\xfb\\x87\\x28\\x06\\x75\\x80\\x71\\x0a\\x80\\x94\\x75\\x1f\\x28\\xf7\\x87\\xec\\x23\\x1d\\x0e\"\n\"\\x62\\x0a\\xfb\\x12\\xf8\\xd3\\x15\\xf7\\x1b\\xf7\\x01\\x05\\x99\\x95\\x8d\\x8e\\x96\\x94\\x1d\\x7d\\x7f\\x46\\x1d\\xf7\\xd8\\x16\\xf1\\x21\\x0a\\x28\\xf8\\x61\"\n\"\\xf7\\x2f\\x49\\x06\\xe0\\x1d\\xee\\x3c\\xa5\\x06\\xa7\\x98\\x85\\x7d\\x7e\\x7b\\x82\\x74\\x7c\\x7d\\x8f\\x95\\x77\\x1f\\x90\\x81\\x88\\x8c\\x86\\x47\\x1d\\x84\"\n\"\\x9b\\x84\\x1f\\x80\\xa0\\xa9\\x84\\xa1\\x1b\\xbd\\xad\\xa6\\xb5\\xb1\\x73\\xa3\\x62\\x8e\\x1f\\x0e\\xf7\\x5b\\xf7\\xc9\\x15\\x97\\x07\\x9e\\x81\\x96\\x7b\\x7b\"\n\"\\x81\\x80\\x78\\x1e\\x3e\\x07\\x78\\x95\\x80\\x9b\\x9b\\x95\\x96\\x9e\\x1e\\x99\\xf7\\x62\\x7d\\x07\\x78\\x95\\x80\\x9b\\x9b\\x95\\x96\\x9e\\x1e\\xd8\\x07\\x9e\"\n\"\\x81\\x96\\x7b\\x7b\\x81\\x80\\x78\\x1e\\x7f\\x07\\x26\\xf7\\x9e\\xc7\\x1d\\x0e\\x31\\x1d\\xfb\\xdd\\xf8\\xd6\\xb3\\x0a\\x31\\x1d\\xfb\\x3e\\xf8\\xb3\\x15\\x98\"\n\"\\x96\\x8c\\x8e\\x93\\x1a\\x9a\\xcb\\x0a\\x89\\x82\\xed\\x0a\\x96\\x95\\x8d\\x8f\\x93\\x1a\\x9a\\x80\\x96\\x7d\\x83\\x84\\x68\\x0a\\x31\\x1d\\x34\\xf8\\x79\\x15\"\n\"\\xa0\\x96\\x94\\x9b\\x9b\\x80\\x94\\x76\\x5c\\x1d\\xf8\\x8d\\xf8\\x94\\x15\\xa8\\x06\\xa0\\x96\\x94\\x9c\\x9c\\x81\\x93\\x75\\x1f\\xfb\\x2a\\x22\\x1d\\xd0\\xfb\"\n\"\\xd9\\x06\\x35\\x48\\x49\\x35\\x36\\x48\\xcd\\xe1\\x1e\\xf7\\xd9\\xd0\\x07\\x54\\x0a\\xfb\\x29\\x06\\x3b\\x0a\\xa7\\xfb\\xd9\\x06\\xfb\\x07\\xe3\\x33\\xf7\\x08\"\n\"\\x97\\x92\\x8c\\x8d\\x9a\\x1e\\x71\\x76\\x7e\\x73\\x6e\\x1a\\x62\\xa9\\x73\\xbe\\xb6\\xa7\\x1d\\x86\\x1e\\x7e\\x74\\x87\\x89\\x78\\x1b\\x71\\x7f\\x94\\x9e\\xa4\"\n\"\\x9f\\xa9\\xb2\\xaa\\x1f\\xdb\\xcf\\x9d\\xac\\x8f\\xdd\\x08\\x0e\\x31\\x0a\\x0e\\xf7\\xdb\\xf7\\x91\\x15\\xf7\\x40\\xf7\\x97\\x05\\xa0\\x06\\x9f\\x97\\x94\\x9c\"\n\"\\x9b\\x7f\\x94\\x77\\x1f\\xfb\\x03\\x25\\x1d\\xa8\\x06\\xfb\\x1d\\xfb\\x63\\xfb\\x20\\xf7\\x63\\x05\\xa8\\x29\\x1d\\xfb\\x03\\x35\\x0a\\xa0\\x06\\xf7\\x43\\xfb\"\n\"\\x97\\x05\\xfb\\x5e\\x28\\x07\\x76\\x7f\\x71\\x0a\\x46\\x0a\\x28\\x06\\xfb\\x15\\xf9\\x2b\\x15\\x72\\x77\\x77\\x73\\xf7\\x19\\x1d\\x67\\x1d\\x9e\\xa3\\xa4\\x77\"\n\"\\x9f\\x72\\x1f\\x0e\\xeb\\xf8\\xa2\\x4a\\x1d\\xf7\\xaa\\xfb\\x14\\x15\\xf7\\x40\\xf7\\x97\\x05\\xa0\\x06\\xa0\\x97\\x94\\x9c\\x9b\\x46\\x0a\\xfb\\x03\\x4e\\x1d\"\n\"\\xa9\\x06\\xfb\\x1e\\xfb\\x63\\xfb\\x1f\\xf7\\x63\\x05\\xa8\\x29\\x1d\\x2e\\x5c\\x06\\xf7\\x45\\xfb\\x9b\\x05\\xfb\\x5e\\x29\\x07\\x40\\x1d\\xf7\\x8d\\x22\\x0a\"\n\"\\x28\\x06\\x0e\\x31\\x1d\\xfb\\x5f\\xf8\\xfe\\x63\\x0a\\x31\\x1d\\x52\\xf8\\xc6\\x97\\x0a\\x59\\x1d\\xf8\\x0f\\xf7\\x73\\xd1\\x0a\\x86\\x81\\x0a\\x90\\x30\\x0a\"\n\"\\x59\\x1d\\xf7\\x86\\xf7\\xa5\\x45\\x1d\\x7f\\x82\\x88\\x87\\x80\\x1a\\x7e\\x97\\x7f\\x98\\xf5\\x1d\\x59\\x1d\\xf7\\x19\\xf7\\x89\\x5b\\x1d\\x59\\x1d\\xf7\\x20\"\n\"\\xf7\\x99\\xf7\\x11\\x1d\\x94\\x91\\x88\\x91\\xf7\\x3b\\x1d\\x86\\x91\\x05\\x0e\\xf8\\x73\\xf8\\x94\\x15\\x30\\x2b\\x0a\\xf7\\x22\\xfc\\x61\\xfb\\x22\\x2b\\x0a\"\n\"\\xe6\\x07\\xe7\\xfb\\x62\\x15\\xae\\x07\\xa0\\x82\\x97\\x7a\\x7a\\x82\\x7f\\x76\\x1e\\xfb\\x0d\\x9b\\x1d\\xae\\xf7\\x41\\x68\\x9b\\x1d\\xf7\\x0d\\x07\\xa0\\x82\"\n\"\\x97\\x7a\\x7a\\x82\\x7f\\x76\\x1e\\x68\\x07\\xfb\\x9d\\xfb\\x93\\x15\\xe6\\x34\\x1d\\xfb\\x22\\xf8\\x61\\xf7\\x22\\x34\\x1d\\x30\\x07\\x0e\\x31\\x0a\\x6f\\xf9\"\n\"\\x72\\x85\\x1d\\x31\\x0a\\xfb\\x07\\xf7\\x09\\x1d\\x94\\x91\\x88\\x91\\x1b\\x9a\\x96\\x96\\x9a\\x93\\x8a\\x8c\\x84\\x64\\x1d\\x6c\\x1d\\xf7\\xe7\\xf9\\x73\\xf7\"\n\"\\x00\\x1d\\x96\\x80\\x9a\\x92\\x90\\x30\\x0a\\x6c\\x1d\\xf7\\x5f\\xf9\\x89\\x26\\x0a\\x0e\\xf7\\x45\\x1d\\x79\\x83\\xe1\\x1d\\x0e\\x48\\x1d\\xfb\\x82\\xf8\\x37\"\n\"\\x42\\x1d\\xb0\\x1d\\xfb\\x06\\xf7\\xea\\x15\\x96\\x94\\x8e\\x91\\x93\\x1a\\x9a\\x80\\x96\\x7d\\x83\\x87\\x9d\\x1d\\x82\\x88\\x86\\x81\\x1a\\x7d\\x96\\x80\\x9a\"\n\"\\x92\\x8f\\x30\\x0a\\xca\\x0a\\x28\\x1d\\x0e\\xf8\\x8d\\xf8\\xc7\\x15\\xfc\\x44\\x69\\x0a\\xf7\\xc2\\x06\\xec\\xd5\\xd0\\xe4\\xf0\\x37\\xc5\\xfb\\x25\\x1f\\xfb\"\n\"\\x23\\xf7\\x57\\xf7\\xab\\x30\\x06\\x76\\x94\\x7f\\x9c\\x9c\\x94\\x97\\xa0\\x1e\\xfb\\xdf\\xfc\\x06\\x15\\xf7\\x6b\\xf7\\x20\\x07\\xce\\xe5\\x0a\\x92\\x0a\\xc8\"\n\"\\x1d\\xf8\\x95\\x16\\x29\\x07\\x73\\x24\\x0a\\xa4\\x1e\\xf7\\x02\\x07\\x8a\\xad\\x87\\x8e\\x68\\x8c\\x08\\x68\\xf8\\x61\\xae\\x24\\x1d\\xfc\\x14\\x3b\\x1d\\xbc\"\n\"\\xfb\\x80\\x06\\x8a\\x2b\\x81\\x62\\x6a\\x64\\x71\\x6e\\x6c\\x79\\x71\\x8a\\x08\\x75\\x89\\x85\\x83\\x6e\\x1a\\xfb\\x02\\x07\\x72\\x24\\x0a\\xa3\\x1e\\xed\\x07\"\n\"\\xf7\\x2f\\xf8\\x94\\x15\\xf7\\x58\\xfc\\x61\\xfb\\xa0\\x06\\xb6\\xad\\xa6\\xdf\\x8d\\xf6\\x08\\x0e\\x94\\x0a\\xf7\\x42\\xf7\\x9e\\x15\\xf7\\x19\\x64\\x06\\x77\"\n\"\\x95\\x7f\\x9b\\x9b\\x95\\x97\\x9f\\x1e\\xf7\\x15\\x07\\x9f\\x82\\x97\\x7a\\x7b\\x81\\x7f\\x77\\x1e\\x64\\xfb\\x19\\xf7\\x57\\xf7\\xa9\\x30\\x07\\x77\\x95\\x7f\"\n\"\\x9c\\x9b\\x94\\x96\\xa0\\x1e\\xf7\\x22\\xfc\\x42\\x07\\x76\\x80\\x82\\x7a\\x7b\\x97\\x82\\x9f\\x1f\\xbc\\xfc\\x61\\x5a\\x06\\x7c\\x1d\\xf8\\x58\\xf7\\x36\\x06\"\n\"\\x9f\\x81\\x97\\x7a\\x7b\\x82\\x80\\x76\\x1e\\xfb\\x03\\xfb\\xbf\\x07\\xa2\\xf9\\x2d\\xe3\\x1d\\xf7\\xda\\xf8\\x94\\x15\\xa5\\x2f\\x1d\\x24\\x3b\\x1d\\xa4\\xfb\"\n\"\\x4d\\x86\\x06\\x74\\x8c\\x7f\\x9c\\x5c\\xeb\\x08\\xf6\\x57\\x7a\\x9a\\x4b\\x1b\\x70\\x84\\x83\\x6c\\x1f\\x55\\x07\\x73\\x94\\x7f\\x9c\\x9b\\x95\\x97\\xa0\\x1e\"\n\"\\xb9\\x07\\xa0\\x88\\x95\\x7d\\xb1\\x3e\\xa4\\x55\\xa4\\x60\\x98\\x7c\\x6f\\x7a\\x6c\\x60\\x71\\x4e\\x53\\xfb\\x1b\\x18\\x70\\x2a\\x0a\\xab\\x06\\xa8\\x8c\\x8d\"\n\"\\x8c\\x96\\xa5\\xc4\\xf7\\x1d\\x18\\xab\\xd4\\xaf\\xb4\\xa9\\x88\\x08\\x94\\xfb\\x75\\x72\\x06\\x71\\x7e\\xa8\\x1d\\xf2\\x2f\\x1d\\x71\\xf7\\x75\\x94\\x06\\xaa\"\n\"\\x8e\\xaf\\x62\\xab\\x42\\xc4\\xfb\\x1d\\x18\\x96\\x70\\x8c\\x8b\\xa9\\x8a\\x08\\xab\\x2f\\x1d\\x71\\x06\\x52\\xf7\\x1b\\x71\\xc7\\x6c\\xb7\\x6f\\x9b\\x19\\x97\"\n\"\\x99\\xa6\\xba\\xa3\\xbf\\xae\\xd4\\x98\\x9d\\xa0\\x8e\\x08\\x5d\\x07\\x76\\x95\\x7f\\x9c\\x9b\\xf7\\x0b\\x1d\\x06\\x0e\\xe3\\xf8\\x5e\\x15\\x87\\x07\\x84\\x89\"\n\"\\x7a\\x8a\\x81\\x1e\\x89\\x7e\\x89\\x7a\\x84\\x1a\\x7c\\x94\\x82\\x9a\\x98\\x93\\x93\\x9c\\x8f\\x1e\\xe8\\xa0\\xc6\\xba\\xeb\\x1b\\xe8\\xc7\\x63\\x4c\\x73\\x83\"\n\"\\x76\\x7c\\x7b\\x1f\\x6f\\x71\\x43\\x78\\x39\\x1b\\x6f\\x33\\x1d\\xa7\\x06\\xe5\\xba\\x85\\x7b\\xa9\\x1f\\xaf\\x78\\xa0\\x6c\\x67\\x1a\\x6a\\x7b\\x6c\\x70\\x76\"\n\"\\x1e\\x74\\x6c\\x60\\x80\\x4b\\x1b\\x42\\x57\\x9b\\xb6\\x42\\x1f\\x90\\x83\\x85\\x8d\\x84\\x1b\\x7f\\x7d\\x7e\\x7e\\x61\\xf7\\x15\\x5a\\xf7\\x03\\xe2\\xc4\\x9a\"\n\"\\xae\\xb4\\x1f\\xb0\\xaa\\x9f\\xb6\\xba\\x1a\\xd0\\x64\\xb9\\x3e\\xa2\\x1e\\xca\\xa6\\xab\\xb6\\xc7\\x1a\\xe5\\x3a\\xc9\\xfb\\x08\\x4b\\x5a\\x7a\\x64\\x5b\\x1e\"\n\"\\x86\\x85\\x88\\x8a\\x89\\x1b\\x86\\x87\\x93\\x9b\\x88\\x1f\\xa1\\x87\\x83\\x95\\x7c\\x1b\\x7d\\x82\\x82\\x7c\\x85\\x8c\\x7f\\x8c\\x7c\\x1f\\x87\\x8b\\x84\\x8c\"\n\"\\x83\\x1e\\x0e\\x5e\\x0a\\x0e\\x5e\\x0a\\xe9\\xf7\\x80\\x15\\x7b\\x81\\x80\\x79\\x4a\\xcd\\x59\\xe0\\xdf\\xcd\\xbd\\xcc\\x9d\\x81\\x96\\x7b\\x7b\\x83\\x83\\x77\"\n\"\\x89\\x1f\\x65\\x86\\x62\\x70\\x56\\x1b\\x57\\x61\\xa7\\xb0\\x87\\x1f\\x9e\\x89\\x83\\x94\\x7b\\x1b\\x0e\\xb1\\x1d\\x0e\\xf8\\x7e\\xf8\\x94\\x15\\xb0\\x36\\x0a\"\n\"\\xfc\\x17\\x2a\\x0a\\xbd\\xfb\\xd1\\x06\\x20\\x6c\\x55\\x4f\\x81\\x83\\x8c\\x8f\\x7e\\x1e\\xc4\\x07\\xa0\\x82\\x97\\x7a\\x7a\\x82\\x7e\\x73\\x1e\\x50\\x07\\x78\"\n\"\\x8e\\x81\\x93\\x87\\x1e\\x82\\x99\\xae\\x84\\xa5\\x1b\\xe6\\xbc\\xd4\\xf7\\x1e\\x1f\\xf7\\xd1\\xf7\\x58\\xfc\\x61\\x66\\x07\\x70\\x0a\\xf7\\x12\\x36\\x0a\\x66\"\n\"\\x06\\x0e\\x81\\x1d\\x80\\x1d\\x2d\\x1d\\x0e\\x96\\x0a\\x84\\x1d\\x90\\x0a\\x61\\x0a\\xb7\\x1d\\x0e\\xf7\\xda\\xf8\\x94\\x15\\xad\\x06\\xa6\\x7f\\x0a\\x70\\x1f\"\n\"\\xfb\\x04\\x06\\x69\\x7a\\x83\\x7a\\x7a\\x9c\\x82\\xa9\\x1f\\xa9\\x6b\\x06\\x50\\x8a\\x63\\x81\\x67\\x76\\x08\\x51\\x68\\x69\\x4e\\x44\\x1a\\x4a\\xa8\\x52\\xbe\"\n\"\\x67\\x1e\\xb0\\x70\\xb6\\x80\\xce\\x89\\x08\\x6b\\x6a\\x07\\x70\\x7a\\x81\\x7b\\x7b\\x9a\\x82\\xa8\\x1f\\xf7\\x0b\\x06\\xa5\\x9a\\x94\\x9c\\x9b\\x7d\\x94\\x70\"\n\"\\x1f\\x69\\xab\\x06\\xc9\\x8d\\xb4\\x94\\xae\\xa1\\x08\\xc4\\xae\\xac\\xc9\\xd0\\x1a\\xcc\\x6e\\xc4\\x57\\xaf\\x1e\\x64\\xa6\\x60\\x97\\x4a\\x8c\\x08\\x57\\xfb\"\n\"\\xed\\x15\\x5a\\x8e\\x69\\x94\\x70\\x9b\\x08\\x62\\xa5\\x73\\xb7\\xbb\\x1a\\xb5\\x9d\\xb1\\xab\\xa6\\x1e\\xa9\\xa4\\xad\\x96\\xc8\\x8f\\x08\\xbf\\x16\\xbe\\x87\"\n\"\\xad\\x82\\xa6\\x7b\\x08\\xb3\\x71\\xa3\\x60\\x5a\\x1a\\x5e\\x76\\x63\\x67\\x70\\x1e\\x6f\\x77\\x67\\x80\\x54\\x88\\x08\\x0e\\x8b\\x0a\\xf8\\x6f\\xbe\\x15\\xf8\"\n\"\\x61\\xb2\\x73\\x0a\\xfb\\x1f\\x06\\x76\\x7f\\x76\\x0a\\xbb\\xfc\\x61\\xfb\\x94\\xf8\\x61\\xbc\\x23\\x1d\\xfb\\x21\\x8c\\x1d\\xf8\\x45\\x5e\\x1d\\x8a\\xac\\x86\"\n\"\\x90\\x69\\x8c\\x08\\x0e\\xf8\\x38\\xbe\\x15\\xfb\\x02\\x2a\\x0a\\xf7\\x5c\\x24\\x1d\\x65\\xf8\\x61\\xb1\\x06\\xa5\\x99\\x94\\x9b\\x9c\\x99\\x0a\\x0e\\xf8\\x6f\"\n\"\\xbe\\x15\\xfb\\x29\\xf8\\x61\\x9b\\x43\\x0a\\x2e\\x4e\\x1d\\xa4\\xfc\\x61\\xfb\\x28\\xf8\\x61\\xa3\\x22\\x0a\\xfb\\x08\\xd4\\x0a\\x69\\x2e\\x1d\\xf8\\x9d\\x22\"\n\"\\x0a\\x69\\xf8\\x61\\x9b\\x22\\x0a\\x2e\\x36\\x1d\\xa4\\x06\\x0e\\xf8\\xa3\\xbe\\x15\\xf8\\x61\\x9b\\x07\\x32\\x0a\\x2e\\x36\\x1d\\xa4\\xfc\\x61\\xfb\\x29\\xf8\"\n\"\\x61\\x9b\\x43\\x0a\\x2e\\x4e\\x1d\\xa4\\xfc\\x61\\xfb\\x28\\xf8\\x61\\xa3\\x22\\x0a\\xfb\\x08\\xd4\\x0a\\x69\\x2e\\x1d\\xf8\\x96\\x5e\\x1d\\x8a\\xad\\x87\\x8f\"\n\"\\x68\\x8c\\x08\\x0e\\xf7\\x8a\\xf8\\x94\\x15\\xbc\\x43\\x0a\\xfb\\xbb\\xfb\\x5f\\x06\\x76\\x94\\x7f\\x9c\\x9c\\x94\\x96\\xa1\\x1e\\xf7\\x2c\\xf7\\x22\\xfc\\x61\"\n\"\\x79\\x5f\\x1d\\xf7\\x85\\x06\\xeb\\xd4\\xcf\\xe5\\xf0\\x38\\xc5\\xfb\\x25\\x1f\\xfb\\x04\\x06\\xfb\\x9e\\x04\\xf7\\x6b\\xf7\\x01\\x07\\xce\\xb5\\x81\\x73\\xaa\"\n\"\\x1f\\xa4\\x77\\x99\\x70\\x6e\\x1a\\x50\\x56\\x5d\\x48\\x1e\\x0e\\xf7\\x19\\xf8\\x94\\x15\\xbc\\x43\\x0a\\xfb\\x2a\\x69\\x0a\\xf7\\x6e\\x06\\xec\\xd5\\xd0\\xe4\"\n\"\\xf0\\x38\\xc5\\xfb\\x26\\x1f\\x50\\x06\\xfb\\x9e\\x04\\xf7\\x6b\\xc2\\x07\\xf7\\x06\\xce\\x63\\x46\\x4f\\x57\\x5d\\x45\\x1f\\xf7\\xa2\\xf8\\x61\\x15\\xbb\\x22\"\n\"\\x0a\\xfb\\x28\\x06\\x75\\x7f\\x82\\x7b\\x7a\\x97\\x82\\xa1\\x1f\\xbb\\xfc\\x61\\x5b\\x06\\x75\\x7f\\x82\\x7a\\x7b\\x97\\x82\\xa1\\x1f\\xf7\\x28\\x29\\x1d\\x5b\"\n\"\\x06\\x0e\\xf7\\x42\\xf8\\x94\\x15\\xbc\\x43\\x0a\\xfb\\x2a\\x69\\x0a\\xf7\\xc2\\x06\\xec\\xd5\\xd0\\xe4\\xf0\\x37\\xc5\\xfb\\x25\\x1f\\xfb\\x23\\x06\\xfb\\x9e\"\n\"\\x04\\xf7\\x6b\\xf7\\x1f\\x07\\xcf\\xe5\\x0a\\xf8\\x7c\\xf7\\xd1\\x15\\xfb\\x8a\\xf7\\x42\\x1d\\xf7\\x8a\\x7a\\x06\\x57\\x76\\x58\\x65\\x61\\x1e\\x5d\\x62\\x5a\"\n\"\\x75\\x50\\x1b\\x4a\\x53\\xa7\\xc5\\x59\\x1f\\x94\\x83\\x85\\x8e\\x81\\x1b\\x7d\\x81\\x82\\x7e\\x77\\xa5\\x6d\\xb3\\x6f\\x1f\\x67\\xc1\\xb3\\x7e\\xc1\\x1b\\xd5\"\n\"\\xc7\\xa6\\xc3\\xc1\\x1f\\xbd\\xbf\\xa6\\xc9\\xc8\\x1a\\xdc\\x07\\xc9\\x73\\xc7\\x60\\xbd\\x1e\\xc1\\x5b\\x53\\xa4\\x42\\x1b\\x49\\x54\\x77\\x63\\x5d\\x1f\\x9a\"\n\"\\x07\\xa0\\x81\\x84\\x0a\\xfb\\x01\\x07\\x76\\x94\\x7f\\x9c\\x9b\\x93\\x94\\x9f\\x8d\\x1e\\x8d\\xa1\\x91\\x97\\x9c\\x9d\\x08\\xad\\xac\\xc1\\xa0\\xbf\\x1b\\xb8\"\n\"\\xb9\\x7b\\x72\\xa7\\x1f\\xb8\\x63\\xaa\\x49\\x56\\x1a\\x0e\\xf7\\x64\\xf7\\xd1\\x15\\x2d\\xf7\\x57\\xb0\\x22\\x0a\\xfb\\x01\\x06\\x77\\x7f\\x50\\x1d\\x9f\\xfc\"\n\"\\x61\\x77\\x26\\x1d\\xf7\\x01\\x06\\xa0\\x97\\x5a\\x0a\\x66\\xf7\\x6b\\xe9\\x6b\\x06\\xfb\\x31\\xd3\\x2f\\xf7\\x10\\xc4\\xbb\\xa0\\xb3\\xac\\x1e\\xaf\\xb5\\x9c\"\n\"\\xc8\\xe0\\x1a\\xe6\\x07\\xe0\\x7a\\xca\\x68\\xb5\\x1e\\xb2\\x6a\\x5a\\xa1\\x54\\x1b\\x55\\x5a\\x76\\x65\\x67\\x1f\\x63\\x60\\x78\\x4f\\x32\\x1a\\xbf\\x16\\xf7\"\n\"\\x14\\xc0\\xd3\\xe8\\xe6\\xb9\\x47\\xfb\\x18\\x1e\\x30\\x07\\xfb\\x17\\x5c\\x48\\x30\\x2e\\x57\\xd3\\xf7\\x12\\x1e\\x0e\\xf8\\x3d\\xf7\\x8a\\x15\\xfb\\x57\\x46\"\n\"\\x07\\x40\\x1d\\xf7\\x3e\\x06\\x9f\\x97\\x95\\x9b\\x9b\\xf6\\x0a\\x9b\\x9c\\x7f\\x94\\x77\\x1f\\xfb\\x89\\x06\\x27\\x37\\x43\\x36\\x4a\\xb8\\x5a\\xe2\\x6b\\x1f\"\n\"\\x50\\x60\\x75\\x6f\\x39\\xfb\\x1e\\x08\\x6f\\x06\\x7c\\x1d\\xc4\\x06\\x91\\x96\\x8f\\x92\\x94\\x9a\\xd9\\xf7\\x1a\\xb1\\xb6\\xd5\\xaf\\x08\\xf7\\x0d\\xbe\\x15\"\n\"\\x23\\x06\\x2d\\x3d\\xbd\\xc7\\xc1\\xcb\\xbe\\xd0\\x1f\\xf7\\x23\\x06\\x0e\\xf7\\x49\\xf8\\x94\\x15\\xfc\\x61\\x30\\x07\\x76\\x80\\x82\\x7a\\x7a\\x96\\x83\\xa0\"\n\"\\x1f\\xf7\\x7e\\x06\\xa0\\x96\\x93\\x9c\\x9c\\x80\\x94\\x76\\x1f\\x30\\xf8\\x61\\xf7\\xce\\xf7\\x5f\\x78\\x1d\\xfb\\x2c\\xfc\\x29\\x07\\x20\\x1d\\x0e\\xf7\\x8a\"\n\"\\xf7\\x62\\x15\\xc3\\xd2\\xbe\\xa2\\xc1\\x1b\\xc6\\xaf\\x5e\\x43\\x3f\\x6a\\x5c\\x51\\x85\\x1f\\x72\\x88\\x80\\x82\\x7b\\x1a\\x7a\\x97\\x82\\xa1\\xde\\xca\\xd9\"\n\"\\xf1\\xf2\\x50\\xd0\\x34\\x54\\x55\\x76\\x5b\\x46\\x1e\\xf7\\x88\\xf7\\x12\\x07\\x93\\x24\\x05\\x72\\x8d\\x95\\x7f\\x9c\\x1b\\x9a\\x94\\x95\\x9a\\x8e\\x8b\\x8f\"\n\"\\x8a\\x94\\x1f\\x81\\xf7\\x05\\x05\\xab\\x87\\x86\\x90\\x6b\\x1b\\xfb\\xd9\\xcf\\x1d\\x06\\x0e\\xf7\\x7f\\xbe\\x15\\xf8\\x61\\xf7\\x95\\xfb\\x2c\\x07\\x77\\x95\"\n\"\\x7f\\x9b\\x9c\\x94\\x96\\xa0\\x1e\\xf7\\x5f\\xfc\\x58\\x07\\x7c\\x1d\\xe6\\xfc\\x61\\x30\\xf7\\x0b\\x0a\\xf7\\x7d\\x06\\xa0\\x97\\x57\\x1d\\xbc\\xf9\\x29\\x15\"\n\"\\x96\\x95\\x8e\\x90\\x93\\x1a\\x99\\x7f\\x97\\x7d\\x84\\x83\\x87\\x85\\x83\\x1e\\xfb\\x05\\x2b\\x05\\x81\\x82\\x87\\x84\\x83\\x1a\\x7d\\x96\\x7f\\x99\\x92\\x91\"\n\"\\x8e\\x93\\x95\\x1e\\x0e\\xf7\\x04\\xf7\\xd1\\x15\\x92\\x07\\xc0\\xaa\\xcd\\xb8\\xb3\\x1e\\xa4\\xa7\\xb9\\x9b\\xb8\\x1b\\xbb\\xbc\\x79\\x6e\\xac\\x1f\\xa2\\x77\"\n\"\\x94\\x7c\\x8d\\x72\\x08\\x77\\x8d\\x93\\x82\\x9b\\x1b\\x9c\\x94\\x97\\xa0\\x1f\\xf7\\x01\\x07\\xa0\\x82\\x96\\x7a\\x7b\\x81\\x80\\x76\\x1e\\x7c\\x07\\xb3\\x5d\"\n\"\\x54\\x9f\\x4a\\x1b\\x41\\x53\\x72\\x55\\x5b\\x1f\\x60\\x59\\x73\\x4f\\x4d\\x1a\\x3a\\x07\\x4e\\xa6\\x4d\\xbd\\x57\\x1e\\x53\\xc1\\xc7\\x70\\xd5\\x1b\\xc1\\xb3\"\n\"\\x98\\xaf\\xc1\\x1f\\xb4\\xa7\\xa4\\xa9\\x9f\\x1a\\x98\\x81\\x94\\x7d\\x81\\x85\\x88\\x82\\x83\\x1e\\x51\\x59\\x53\\x6f\\x4a\\x1b\\x50\\x5a\\xa1\\xb9\\x62\\x1f\"\n\"\\x65\\xb5\\x76\\xbe\\xbf\\x1a\\x9c\\xf7\\x8a\\x07\\xa0\\x97\\x95\\x9b\\x9b\\x80\\x94\\x75\\x1f\\x0e\\xd0\\x0a\\xaf\\x7f\\xd2\\x88\\x0a\\x0e\\x23\\x0a\\x0e\\xf7\"\n\"\\x5b\\xf9\\x60\\x15\\x71\\x77\\x78\\x72\\x73\\x9f\\x77\\xa4\\xa4\\x9f\\x9e\\xa4\\xa3\\x77\\x9f\\x73\\x1f\\xf7\\x61\\x95\\x1d\\xa4\\xa3\\x77\\x9f\\x72\\x1f\\x3d\"\n\"\\xfb\\x60\\xd0\\x1d\\x0e\\x9d\\x0a\\xf8\\x18\\xf8\\x94\\x15\\xbd\\x36\\x0a\\xfb\\xbe\\x2a\\x0a\\xbd\\xfb\\xd1\\x06\\x22\\x6e\\x53\\x55\\x7f\\x82\\x8d\\x91\\x79\"\n\"\\x1e\\xc1\\x07\\xa0\\x82\\x97\\x7a\\x7a\\x82\\x7e\\x74\\x1e\\x4f\\x07\\x78\\x8e\\x81\\x92\\x87\\x1e\\x82\\x9a\\xad\\x84\\xa8\\x1b\\xae\\xa8\\x95\\x9e\\xa0\\x1f\"\n\"\\xab\\xa7\\xa0\\xd3\\xdd\\x1a\\xf7\\xd1\\xe9\\xfc\\x61\\x61\\x07\\x35\\x1d\\xbe\\x06\\xed\\xb5\\x92\\xa0\\xab\\x1f\\xb3\\xa6\\xa3\\xbb\\xc2\\x1a\\xc2\\x75\\xb8\"\n\"\\x63\\xa7\\x1e\\x6c\\xa1\\x64\\x95\\x4e\\x8c\\x08\\x56\\x04\\xea\\x89\\xb5\\x6b\\x43\\x1a\\x66\\x7e\\x6c\\x73\\x79\\x1e\\x78\\x7c\\x6c\\x84\\x59\\x8a\\x08\\x0e\"\n\"\\xf7\\x9a\\xf7\\x9e\\x15\\xfb\\x6b\\x72\\x07\\x40\\x1d\\xf7\\x56\\x06\\xeb\\xd5\\xd0\\xe5\\xef\\x38\\xc5\\xfb\\x26\\x1f\\x51\\xf7\\x57\\xbb\\x27\\x0a\\xfb\\x11\"\n\"\\x36\\x1d\\xa4\\xfb\\x57\\xfb\\x2a\\xf7\\x57\\xa4\\x29\\x1d\\x2a\\x26\\x1d\\x9f\\xfc\\x61\\x6e\\xf7\\x0b\\x0a\\xf5\\x38\\x0a\\x72\\xf7\\x6b\\x06\\xf7\\x5e\\xfb\"\n\"\\x6b\\x15\\xf7\\x6b\\xc2\\x07\\xce\\xb6\\x81\\x73\\xaa\\x1f\\xa4\\x77\\x99\\x70\\x6e\\x1a\\x50\\x56\\x5d\\x47\\x1e\\x0e\\xf7\\x8a\\xf8\\x94\\x15\\xf7\\x14\\x06\"\n\"\\x92\\x24\\x05\\x72\\x8d\\x94\\x7f\\x9c\\x1b\\x9a\\x95\\x95\\x9c\\x8c\\x8b\\x8b\\x8a\\x98\\x1f\\x83\\xf7\\x05\\x88\\xac\\x87\\x8e\\x6a\\x8c\\x19\\xfb\\xdd\\xcf\"\n\"\\x1d\\xf7\\x2e\\x06\\xc7\\xcc\\xae\\x9f\\xb4\\x1b\\xc3\\xac\\x60\\x40\\x1f\\xfb\\x08\\x5a\\x07\\x35\\x1d\\xf7\\x0e\\x24\\x1d\\x76\\xf7\\x0d\\x06\\xf0\\x56\\xcb\"\n\"\\x39\\x59\\x5d\\x76\\x5d\\x58\\x1e\\x0e\\xb1\\x1d\\x22\\xf7\\x5b\\x15\\x95\\x94\\x8f\\x91\\x93\\x1a\\x99\\x7f\\x97\\x7e\\x84\\x83\\x87\\x85\\x83\\x1e\\xfb\\x06\"\n\"\\x2b\\x05\\x81\\x82\\x87\\x84\\x83\\x1a\\x7d\\x97\\x7f\\x98\\x92\\x56\\x0a\\xb7\\x1d\\xfb\\x07\\xf8\\xa9\\x15\\x7a\\x81\\x80\\x79\\x4a\\xcd\\x59\\xe0\\xdf\\xcd\"\n\"\\xbe\\xcb\\x9c\\x81\\x97\\x7b\\x7c\\x82\\x83\\x7a\\x89\\x1f\\x61\\x86\\x64\\x71\\x54\\x1b\\x57\\x60\\xa7\\xb0\\x88\\x1f\\x9e\\x89\\x83\\x94\\x7c\\x1b\\x0e\\xf8\"\n\"\\x31\\x16\\xf0\\x23\\x1d\\x5a\\xf7\\x94\\x06\\xd4\\x45\\xc0\\x2b\\x65\\x4a\\x7e\\x78\\x54\\xa3\\x1d\\x8d\\x8c\\x8f\\x99\\x1e\\x9d\\xc4\\xb4\\x93\\xac\\x1b\\xd1\"\n\"\\xba\\x6d\\x5e\\x1f\\x4d\\x07\\x97\\x60\\x60\\x91\\x5f\\xef\\x0a\\xec\\xd0\\xc4\\xa2\\xbf\\xc6\\x1f\\xc6\\x04\\x52\\x52\\x4f\\x71\\x46\\x1b\\x48\\x61\\xaa\\xbb\"\n\"\\xc5\\xd1\\xb3\\xf1\\xb5\\xbf\\x85\\x84\\xa8\\x1f\\x0e\\xf7\\xf2\\xf8\\x7b\\x15\\xdc\\xba\\xa6\\xba\\x9e\\x81\\x95\\x78\\x7d\\x86\\x86\\x79\\x84\\x1f\\x86\\x77\"\n\"\\x77\\x84\\x56\\x89\\x08\\x30\\x06\\x42\\x5c\\x77\\x5f\\x6b\\x1f\\x6d\\x63\\x7f\\x50\\xfb\\x01\\x1a\\xfb\\x01\\x9a\\x55\\xb5\\x5e\\x1e\\x5b\\xb9\\xca\\x72\\xd7\"\n\"\\x1b\\xf7\\x23\\xee\\xe7\\xf7\\x18\\xf7\\x17\\x29\\xe8\\xfb\\x1f\\x3b\\x4c\\x71\\x55\\x5c\\x1f\\x96\\xee\\xac\\xab\\xe8\\x8e\\x08\\xb9\\x22\\x15\\xf7\\x04\\xd8\"\n\"\\x45\\x24\\x27\\x3e\\x43\\xfb\\x01\\x43\\x58\\xa3\\xbe\\x69\\x1f\\x77\\xa8\\x81\\xad\\xae\\x1a\\xef\\xd9\\xd3\\xf5\\x1e\\x0e\\xf7\\x1f\\xbe\\x15\\x5a\\x26\\x1d\"\n\"\\xf7\\xa0\\x06\\xf6\\xc4\\xb5\\xd8\\xc9\\x6b\\xad\\x40\\x9c\\x1f\\xba\\x9d\\x9d\\xa2\\xb4\\x1a\\xd0\\x50\\xaf\\xfb\\x03\\x1e\\xfb\\x70\\x20\\x0a\\xbc\\x06\\xbf\"\n\"\\xfb\\x06\\x15\\xf7\\x06\\xf7\\x0b\\x07\\xe1\\xab\\x7c\\x65\\x63\\x5d\\x76\\x32\\x1f\\x25\\xfb\\x5f\\x15\\xf7\\x2c\\xf4\\x07\\xd6\\xbc\\x83\\x7b\\xa1\\x1f\\x9c\"\n\"\\x7e\\x96\\x76\\x73\\x1a\\x5c\\x64\\x74\\x3e\\x1e\\x0e\\xa5\\x0a\\x0e\\xf8\\x8e\\x16\\x4b\\x07\\x74\\x24\\x0a\\xa4\\x1e\\xd6\\x07\\x8a\\xab\\x86\\x90\\x69\\x8c\"\n\"\\x08\\x69\\xf7\\xd1\\xad\\x06\\x52\\x1d\\xfc\\x08\\x4b\\x1d\\xba\\xfb\\x36\\x06\\x8c\\x2d\\x67\\x5d\\x35\\x7d\\x72\\x88\\x87\\x86\\x8a\\x6c\\x08\\x40\\x07\\x72\"\n\"\\x24\\x0a\\xa2\\x1e\\xcb\\x07\\xf7\\x2b\\xf8\\x04\\x15\\xf7\\x4f\\xfb\\xd1\\xfb\\x88\\x06\\xae\\xa5\\xa0\\xc2\\x8c\\xd5\\x08\\x0e\\x2c\\x1d\\x0e\\xf8\\xa1\\xf7\"\n\"\\x56\\x15\\x8a\\xa5\\x8a\\x9f\\x88\\x99\\x08\\xf6\\x77\\x30\\xd3\\xfb\\x07\\x1b\\xfb\\x18\\x26\\x2d\\xfb\\x0f\\xfb\\x17\\xf7\\x00\\x27\\xf7\\x24\\xe9\\xf7\\x0b\"\n\"\\xba\\xb1\\x98\\x7f\\x97\\x7e\\x85\\x86\\x89\\x85\\x83\\x1f\\x6c\\x61\\x46\\x77\\x4e\\x1b\\x23\\x3f\\xc8\\xec\\x7b\\x1f\\x8c\\xbe\\x15\\xde\\x9d\\xd1\\xc1\\xe5\"\n\"\\x1b\\xe4\\xd2\\x55\\x38\\x9d\\x1f\\xfb\\xa3\\xf7\\xec\\x15\\xe7\\x0a\\xf7\\x62\\x95\\x1d\\xa3\\xa4\\x77\\x9f\\x72\\x1f\\x0e\\xf7\\xda\\xf8\\x04\\x15\\xa1\\x24\"\n\"\\x1d\\x2a\\x3b\\x1d\\xa2\\xfb\\x0a\\x87\\x06\\x72\\x8d\\x7b\\x9b\\x64\\xca\\x08\\xd2\\x60\\x72\\x9c\\x51\\x1b\\x6e\\x84\\x83\\x6c\\x1f\\x6a\\x07\\x74\\x94\\x7f\"\n\"\\x9c\\x9c\\x94\\x96\\xa0\\x1e\\xa3\\x07\\xa3\\x89\\x94\\x82\\xaf\\x56\\xa1\\x67\\x9d\\x74\\x99\\x7e\\x70\\x79\\x6e\\x6b\\x74\\x62\\x58\\x31\\x18\\x72\\x06\\x35\"\n\"\\x1d\\xa7\\x06\\xa6\\x8c\\x8c\\x8b\\x99\\xa3\\xbf\\xe8\\x18\\xac\\xc2\\xac\\xa7\\xa9\\x89\\x08\\x93\\xfb\\x28\\x74\\x06\\x35\\x1d\\xec\\x24\\x1d\\x75\\xf7\\x28\"\n\"\\x93\\x06\\xa8\\x8d\\xad\\x6f\\xab\\x54\\xc0\\x2e\\x18\\x93\\x7e\\x90\\x83\\x8e\\x8a\\x08\\x89\\x8e\\x96\\x8a\\x99\\x1b\\xa4\\x06\\x52\\x1d\\x73\\x06\\x58\\xe5\"\n\"\\x72\\xb6\\x6e\\xad\\x72\\x99\\x19\\x95\\x93\\xa1\\xa8\\x98\\xa0\\xb4\\xcc\\x96\\x96\\xa5\\x8d\\x08\\x73\\x07\\x76\\x94\\xf7\\x32\\x1d\\x6d\\x52\\x7a\\x7f\\x3f\"\n\"\\x59\\x1e\\x5d\\x45\\x80\\x81\\x74\\x8a\\x08\\x87\\x06\\x0e\\xf8\\x4c\\xf7\\x73\\x15\\xc0\\xa1\\xa1\\xa7\\xb7\\x1a\\xd1\\x3f\\xb9\\xfb\\x0a\\x40\\x51\\x78\\x66\"\n\"\\x62\\x1e\\x9c\\x07\\xa4\\x81\\x99\\x7a\\x7b\\x82\\x7d\\x72\\x1e\\x23\\x07\\x7a\\x93\\x81\\x9a\\x99\\x93\\x94\\xa0\\x90\\xce\\x0a\\x72\\x7d\\x81\\x7a\\x7b\\x98\"\n\"\\xc3\\x0a\\x7e\\x95\\x81\\xa4\\x80\\x1f\\x73\\xbf\\xdd\\x7b\\xd6\\x1b\\xf7\\x24\\xdb\\xba\\xe1\\xbb\\x67\\xb6\\x59\\x96\\x1f\\x0e\\x82\\x1d\\x0e\\x82\\x1d\\xf7\"\n\"\\x10\\xf8\\xf0\\x15\\x7b\\x81\\x80\\x79\\x4b\\xcd\\x59\\xe0\\xdf\\xcd\\xbd\\xcb\\x9d\\x81\\x96\\x7b\\x7b\\x83\\x83\\x77\\x89\\x1f\\x66\\x86\\x62\\x70\\x56\\x1b\"\n\"\\x57\\x60\\xa7\\xaf\\x88\\x1f\\x9e\\x89\\x83\\x94\\x7b\\x1b\\x0e\\x89\\x0a\\x0e\\xf8\\x77\\xf8\\x04\\x15\\xae\\x36\\x0a\\xfc\\x09\\x3b\\x1d\\xba\\xfb\\x72\\x06\"\n\"\\x42\\x6f\\x67\\x54\\x80\\x84\\x8c\\x8e\\x7b\\x1e\\xad\\x07\\xa1\\x83\\x96\\x7a\\x7a\\x81\\x7e\\x75\\x1e\\x63\\x07\\x78\\x8e\\x81\\x92\\x87\\x1e\\x82\\x9a\\xaa\"\n\"\\x85\\xa6\\x1b\\xe5\\xbb\\xc3\\xf4\\x1f\\xf7\\x72\\xf7\\x4f\\xfb\\xd1\\x69\\x37\\x0a\\xf7\\x0d\\x2f\\x1d\\x68\\x06\\x0e\\xf7\\xdc\\xb3\\x15\\xf7\\x26\\xf7\\xcd\"\n\"\\x05\\xfb\\xc2\\x47\\x07\\x75\\x7f\\x82\\x7b\\x7a\\x97\\x82\\xa1\\x1f\\xf7\\x28\\x21\\x0a\\x6f\\xf7\\xd1\\x9e\\x38\\x0a\\x2b\\x06\\xfb\\x27\\xfb\\xd0\\xfb\\x2a\"\n\"\\xf7\\xd0\\x05\\x2a\\x20\\x0a\\x9f\\xfb\\xd1\\xf7\\x0c\\x1d\\xf7\\xc1\\x06\\xf7\\x28\\xfb\\xcc\\x05\\x0e\\xf8\\x3d\\xf7\\x56\\x15\\xfb\\x23\\xe9\\x1d\\x24\\xc5\"\n\"\\x1d\\x06\\x0e\\x4b\\x0a\\x0e\\xf8\\x3d\\xf8\\x04\\x15\\xfb\\xd1\\xe9\\x1d\\xfc\\x2a\\x06\\x76\\x80\\x82\\x7a\\x7b\\x97\\x82\\x9f\\x1f\\xa5\\xcd\\x0a\\xf7\\xd1\"\n\"\\x06\\x0e\\x95\\x0a\\xf8\\x66\\xf8\\x15\\x15\\xab\\x62\\x57\\x9b\\x60\\x0a\\x0e\\xf7\\xda\\xf8\\x04\\x15\\xf7\\x23\\xfb\\x17\\x06\\x76\\x94\\x7f\\x9c\\x9c\\x94\"\n\"\\x97\\xa0\\x1e\\xf7\\x4a\\xfc\\x4e\\xfb\\x4a\\x9b\\x1d\\xf7\\x17\\xf7\\x23\\xfb\\xd1\\x28\\x07\\x76\\x7f\\x71\\x0a\\x46\\x0a\\x28\\x06\\x0e\\x4e\\x0a\\x82\\x7b\"\n\"\\x74\\x1d\\x9b\\x80\\x94\\x71\\x1d\\x82\\x7b\\x4c\\x0a\\x0e\\xf7\\xda\\xf8\\xbc\\x15\\xa5\\x82\\x98\\x79\\x1e\\x3a\\x86\\x05\\x71\\x89\\x7e\\x82\\x7a\\x1a\\x7c\"\n\"\\x97\\x80\\x9a\\x8c\\x1e\\x8d\\x06\\xcd\\x8f\\x05\\xfb\\x0b\\x07\\x96\\x73\\x7b\\x8f\\x75\\x1b\\x31\\x49\\x2c\\xfb\\x17\\xfb\\x18\\xcd\\x33\\xed\\x9e\\x97\\x8d\"\n\"\\x93\\xa2\\x1f\\x29\\x3a\\x07\\x72\\x7d\\x82\\x7b\\x7b\\x99\\x82\\xa4\\x1f\\xf7\\x6a\\x06\\xa4\\x99\\x94\\x9b\\x9b\\x7d\\x94\\x72\\x1f\\x3a\\xed\\x06\\x83\\xa3\"\n\"\\x96\\x89\\x9f\\x1b\\xc1\\xb3\\xa1\\xb8\\xa7\\x1f\\xa6\\xb6\\x99\\xc0\\xc6\\x1a\\xf7\\x13\\x48\\xec\\x33\\x75\\x79\\x87\\x80\\x74\\x1e\\x51\\x04\\x9b\\x9d\\x9a\"\n\"\\x91\\xa1\\x1b\\xca\\xb8\\x42\\x26\\x29\\x5e\\x43\\x4d\\x76\\x7c\\x91\\x9c\\x77\\x1f\\x57\\x16\\x7a\\x7a\\x7c\\x85\\x74\\x1b\\x4c\\x5e\\xd2\\xee\\xb8\\x95\\xb5\"\n\"\\x9e\\xae\\x1f\\xae\\x9f\\xa5\\x9c\\xae\\x1b\\xa1\\x9a\\x85\\x7b\\x9b\\x1f\\x0e\\xb3\\x1d\\xf8\\x8e\\x16\\x4c\\x07\\xe4\\x0a\\x54\\xc6\\x1d\\x0e\\xf8\\x39\\xbe\"\n\"\\x15\\x24\\x33\\x1d\\xf7\\x53\\x24\\x1d\\x67\\xf7\\xd1\\xaf\\x06\\xc0\\x1d\\x0e\\xf8\\x6f\\xbe\\x15\\xfb\\x29\\xf7\\xd1\\x9b\\x44\\x0a\\x37\\x86\\x0a\\x9b\\xfb\"\n\"\\xd1\\xfb\\x29\\xf7\\xd1\\x9b\\x06\\xa1\\x97\\x94\\x9b\\x9c\\x80\\x94\\x74\\x1f\\x36\\x20\\x0a\\x9c\\xfb\\xd1\\x71\\x26\\x1d\\xf8\\x8d\\x29\\x1d\\x72\\xf7\\xd1\"\n\"\\x9c\\x23\\x1d\\x35\\x20\\x0a\\x9c\\x06\\x0e\\xf8\\xa3\\xbe\\x15\\xf7\\xd1\\x9c\\x07\\x7b\\x0a\\x35\\x20\\x0a\\x9c\\xfb\\xd1\\xfb\\x29\\xf7\\xd1\\x9b\\x44\\x0a\"\n\"\\x37\\x86\\x0a\\x9b\\xfb\\xd1\\xfb\\x29\\xf7\\xd1\\x9b\\x06\\xa1\\x97\\x94\\x9b\\x9c\\x80\\x94\\x74\\x1f\\x36\\x20\\x0a\\x9c\\xfb\\xd1\\x71\\x26\\x1d\\xf8\\x8a\"\n\"\\x4c\\x06\\x73\\x94\\xf7\\x41\\x1d\\xad\\x87\\x8f\\x68\\x8c\\x08\\x0e\\xf7\\xa6\\xf8\\x04\\x15\\xbc\\xe9\\x0a\\xfb\\xb4\\xfb\\x22\\x06\\x58\\x0a\\xe6\\xf7\\x1b\"\n\"\\xfb\\xd1\\x79\\x5f\\x1d\\xf7\\x42\\x06\\xde\\xbf\\x98\\xa5\\xa3\\x1f\\xa0\\xa1\\x97\\xac\\xad\\x1a\\xd8\\x4a\\xb3\\xfb\\x13\\x1e\\x23\\x06\\xfb\\x56\\x04\\xf7\"\n\"\\x23\\xf0\\x07\\xf5\\xaf\\x7a\\x57\\x55\\x66\\x77\\x23\\x1f\\x0e\\xf8\\x99\\xf8\\x04\\x15\\xbb\\x38\\x0a\\xfb\\x28\\x2e\\x0a\\xbb\\xfb\\xd1\\x5b\\x25\\x1d\\xf7\"\n\"\\x28\\x29\\x1d\\x5b\\x06\\xfc\\x28\\xf7\\xd1\\x15\\xbc\\x23\\x1d\\xfb\\x09\\x29\\x0a\\x9b\\xfb\\xd1\\x79\\x26\\x1d\\xf7\\x33\\xdc\\x0a\\x06\\xfb\\x56\\x04\\xf7\"\n\"\\x23\\xe1\\x07\\xf6\\xae\\x7a\\x56\\x55\\x65\\x78\\x24\\x1f\\x0e\\xf7\\x49\\xf8\\x04\\x15\\xbc\\x23\\x1d\\xfb\\x09\\x29\\x0a\\x9b\\xfb\\xd1\\x79\\x26\\x1d\\xf7\"\n\"\\x4d\\x06\\xde\\xbd\\x97\\xa6\\xa5\\x1f\\x9f\\xa0\\x98\\xad\\xac\\x1a\\xd9\\x4a\\xb3\\xfb\\x13\\x1e\\xfb\\x07\\x06\\xfb\\x56\\x04\\xf7\\x23\\xf7\\x03\\x07\\xf5\"\n\"\\xb0\\x79\\x59\\x54\\x65\\x77\\x24\\x1f\\x0e\\xf7\\x97\\xf7\\x7c\\x15\\x76\\x7f\\x59\\x0a\\xf7\\x62\\x06\\x2f\\x7c\\x49\\x56\\x29\\x1b\\x45\\x56\\xa0\\xbc\\x55\"\n\"\\x1f\\x93\\x82\\x85\\x8e\\x82\\x1b\\x7e\\x81\\x82\\x7e\\x75\\xa4\\x73\\xba\\x72\\x1f\\x70\\xbf\\xb9\\x7f\\xc2\\x1b\\xf7\\x1c\\xea\\xe5\\xf7\\x17\\xf7\\x17\\x29\"\n\"\\xeb\\xfb\\x19\\x50\\x59\\x7b\\x6b\\x62\\x1f\\x8d\\x07\\x56\\x1d\\x7f\\x77\\x1e\\x31\\x07\\x77\\x94\\x7f\\x9c\\x9b\\x93\\x94\\x9f\\x8d\\x1e\\xbc\\x91\\xcd\\xb2\"\n\"\\xda\\x1b\\xed\\xcb\\x55\\x2b\\x9a\\x1f\\x0e\\xf7\\x68\\xf7\\x56\\x15\\xfb\\x16\\x97\\xd1\\x3c\\xf2\\x1b\\xf7\\x01\\xd8\\xe9\\xf7\\x18\\xf7\\x19\\x42\\xe4\\xfb\"\n\"\\x02\\x29\\x43\\x42\\xfb\\x07\\x7b\\x1f\\x42\\xf7\\x0f\\xbc\\x33\\x0a\\xfb\\x0c\\x2e\\x0a\\x9e\\xfb\\xd1\\x63\\x25\\x1d\\xf7\\x21\\x33\\x0a\\x5a\\xf7\\x23\\x06\"\n\"\\xf7\\x92\\xf7\\x50\\x15\\xde\\xc0\\x47\\x21\\x24\\x55\\x46\\x3b\\x3c\\x55\\xd0\\xef\\xf5\\xc0\\xd2\\xd9\\x1f\\x0e\\xf8\\x33\\xf7\\x38\\x15\\xfb\\x05\\x56\\x07\"\n\"\\x78\\x81\\x82\\x7b\\x7a\\x95\\x82\\x9e\\x1f\\xf7\\x23\\x06\\x9d\\x95\\x94\\x9c\\x9b\\x81\\x94\\x79\\x1f\\x65\\xf7\\xd1\\xb1\\x06\\x9d\\x95\\x94\\x9b\\x9c\\x81\"\n\"\\x94\\x79\\x1f\\xfb\\x73\\x06\\x2c\\x55\\x5f\\x3e\\x4d\\xac\\x62\\xce\\x78\\x1f\\x50\\x70\\x60\\x5f\\x77\\x55\\x08\\x77\\x06\\x78\\x81\\x82\\x7a\\x7b\\x95\\x82\"\n\"\\x9e\\x1f\\xc7\\x06\\x98\\xd5\\xba\\xbe\\xea\\xb2\\x08\\xf7\\x01\\xbe\\x15\\x2e\\x06\\x29\\x64\\xa2\\xc4\\xbd\\xad\\xa2\\xd2\\x1f\\xf7\\x11\\x06\\x0e\\xf7\\x57\"\n\"\\xf8\\x04\\x15\\xfb\\xd1\\xd3\\x0a\\xf7\\xd1\\xf7\\xb2\\xf7\\x5f\\x06\\x4f\\x0a\\xfb\\x2c\\xfc\\x0d\\x07\\x7c\\x1d\\x0e\\xf7\\x67\\xf7\\xba\\x15\\xd4\\xcd\\xa3\"\n\"\\x9a\\xc2\\x1b\\xcf\\xb8\\x66\\x52\\x1f\\xfb\\xca\\x07\\x49\\x89\\x5f\\x60\\x4c\\x1b\\xfb\\x14\\x4e\\x1d\\xf7\\x14\\x06\\xe9\\xd1\\xd0\\xe6\\x88\\x1f\\xf7\\xcd\"\n\"\\x07\\xdc\\x47\\xc8\\x31\\x50\\x5b\\x76\\x5e\\x5e\\x1e\\xec\\xf7\\x27\\x73\\x0a\\xfb\\x27\\xe3\\x27\\x36\\x1d\\xbb\\x66\\x50\\x06\\x75\\x80\\xbe\\x0a\\x06\\x0e\"\n\"\\xa5\\x0a\\xc3\\xf8\\xad\\x15\\x95\\x93\\x8f\\x92\\x94\\x1a\\x98\\x7f\\x97\\x7e\\x84\\x84\\x88\\x83\\x82\\xd5\\x0a\\xf7\\x1b\\xf7\\x7c\\x15\\xeb\\x9a\\xcb\\xc1\"\n\"\\xec\\x1b\\xdb\\xcd\\x64\\x59\\x91\\x1f\\x78\\x8d\\x93\\x82\\x9b\\x1b\\x9c\\x94\\x97\\x9f\\x1f\\xe5\\x07\\x9f\\x82\\x97\\x7a\\x7a\\x82\\x7f\\x77\\x1e\\x89\\x07\"\n\"\\xab\\x61\\x5a\\x9b\\x50\\x1b\\xfb\\x1a\\x29\\x2b\\xfb\\x17\\xfb\\x17\\xea\\x31\\xf7\\x1d\\xc1\\xb9\\x97\\xa6\\xc0\\x1f\\xba\\xa3\\xa4\\xa4\\xa1\\x1a\\x97\\x81\"\n\"\\x95\\x7d\\x83\\x86\\x88\\x83\\x81\\x1e\\x5a\\x55\\x56\\x76\\x45\\x1b\\x29\\x48\\xc1\\xe6\\x7d\\x1f\\xf7\\x62\\x06\\xa1\\x96\\x5a\\x0a\\x0e\\xc0\\x0a\\xf7\\x09\"\n\"\\xdf\\xc3\\xda\\xaf\\x77\\xae\\x6b\\xa0\\x1f\\x6a\\xa1\\x66\\x96\\x4d\\x91\\x34\\x91\\x1d\\xd2\\x7e\\x0a\\x94\\x82\\x9a\\x1b\\x9b\\xf7\\x39\\x1d\\x82\\x82\\x7b\"\n\"\\x88\\x1e\\xa5\\x69\\x5e\\x98\\x56\\x1b\\x26\\x40\\x5a\\x48\\x6b\\x9d\\x6b\\x9a\\x1d\\xa4\\x85\\xa5\\x7c\\x08\\xa4\\x7e\\x9b\\x75\\x76\\x1a\\x5a\\x4c\\x67\\x36\"\n\"\\x3a\\x48\\xad\\xb5\\x1e\\x0e\\x32\\x1d\\x89\\x87\\x0a\\xf7\\xdc\\xf8\\x37\\x15\\xfb\\x38\\xf7\\x42\\x1d\\xf7\\x04\\xfb\\xd1\\xfb\\x2d\\x06\\x78\\x81\\x85\\x7c\"\n\"\\x86\\x1f\\x8a\\x07\\x8a\\x89\\x05\\x78\\x8f\\x96\\x83\\x9f\\x1b\\xf7\\xf9\\x06\\xa0\\x98\\x94\\x9c\\x9b\\x7f\\x94\\x75\\x1f\\xfb\\x2c\\x06\\xfb\\x40\\xf8\\xae\"\n\"\\x15\\x71\\x78\\x78\\x72\\x73\\x9f\\x77\\xa3\\xa5\\x9f\\x9e\\xa4\\xa3\\x77\\x9f\\x72\\x1f\\xf7\\x62\\x16\\x71\\x78\\x78\\x72\\x73\\x9f\\x77\\xa3\\xa5\\x9f\\x9e\"\n\"\\xa4\\xa3\\x76\\x9f\\x73\\x1f\\x0e\\xca\\x1d\\xf8\\x16\\xf8\\x04\\x15\\xad\\x24\\x1d\\xfb\\xa6\\x3b\\x1d\\xba\\xfb\\x72\\x06\\x44\\x6e\\x64\\x56\\x83\\x81\\x8c\"\n\"\\x8f\\x7a\\x1e\\xad\\x07\\xa0\\x82\\x97\\x7a\\x7a\\x82\\x7f\\x74\\x1e\\x63\\x07\\x78\\x8e\\x80\\x93\\x87\\x1e\\x82\\x9b\\xa9\\x85\\xa6\\x1b\\xe3\\xbc\\xc5\\xf3\"\n\"\\x1f\\xf7\\x72\\xe4\\xfb\\xd1\\x74\\x37\\x0a\\xe6\\x06\\xd0\\xb7\\x97\\xa5\\xa4\\x1f\\xa1\\xa0\\x97\\xab\\xac\\x1a\\xd9\\x53\\xb4\\x21\\x1e\\x71\\x06\\x58\\x04\"\n\"\\xa5\\x06\\xd8\\xa9\\x77\\x5a\\x5b\\x69\\x73\\x45\\x1f\\x6e\\x06\\x0e\\xf7\\xa9\\xf7\\x89\\x15\\xfb\\x36\\xf7\\x0f\\xc6\\x0a\\x23\\x06\\x76\\x80\\x82\\x7a\\x7b\"\n\"\\x97\\x82\\x9f\\x1f\\xa5\\xfb\\xd1\\x63\\x25\\x1d\\xf7\\x0a\\x33\\x0a\\x71\\xf7\\x23\\xf7\\x36\\xfb\\x23\\x7a\\x06\\x40\\x1d\\xf7\\x32\\xdc\\x0a\\xf7\\x0f\\xbb\"\n\"\\x38\\x0a\\xfb\\x08\\x20\\x0a\\x9b\\x06\\xbf\\xfb\\xd1\\x15\\xf7\\x23\\xe0\\x07\\xf6\\xaf\\x7a\\x58\\x54\\x65\\x77\\x24\\x1f\\x0e\\xf7\\x41\\xf8\\x97\\x15\\xe3\"\n\"\\x27\\x78\\x0a\\xbb\\x66\\x50\\x06\\x76\\x7f\\xbe\\x0a\\xf7\\x87\\x06\\xd4\\xcd\\xa3\\x9a\\xc2\\x1b\\xcf\\xb8\\x66\\x52\\x1f\\xfb\\x81\\x63\\x07\\x76\\x7f\\x82\"\n\"\\x7a\\x7b\\xde\\x0a\\xdc\\x47\\xc8\\x31\\x50\\x5b\\x76\\x5e\\x5e\\x1e\\xec\\xf7\\x27\\x73\\x0a\\x0e\\x89\\x0a\\x30\\xf7\\x70\\x15\\x94\\x93\\x8f\\x92\\x94\\x1a\"\n\"\\x98\\x7f\\x97\\x7e\\x84\\x84\\x88\\x83\\x82\\x1e\\xfb\\x05\\xa6\\x1d\\x98\\x92\\x56\\x0a\\xf7\\x28\\xf8\\x04\\x15\\xa6\\x24\\x1d\\x20\\x33\\x1d\\x9f\\x06\\xf7\"\n\"\\x52\\xfb\\xe8\\x6e\\x56\\x05\\x54\\x6c\\x7b\\x7e\\x66\\x1b\\x83\\x84\\x8c\\x8d\\x7f\\x1f\\xc0\\x07\\xa3\\x82\\x97\\x7a\\x7a\\x82\\x7e\\x72\\x1e\\x54\\x07\\x77\"\n\"\\x90\\x80\\x95\\x85\\x1e\\x83\\x9b\\xa5\\x86\\xa5\\x1b\\xbf\\xad\\xa5\\xd1\\xb2\\x1f\\xf7\\x7c\\xf8\\x34\\x05\\x9f\\xab\\x1d\\x23\\x3b\\x1d\\xa5\\x06\\xfb\\x33\"\n\"\\xfb\\xb2\\x05\\xfb\\x11\\xf8\\x9e\\x15\\x7b\\x81\\x80\\x79\\x4b\\xcd\\x59\\xdf\\xe0\\xcd\\xbd\\xcb\\x9c\\x80\\x97\\x7c\\x7c\\x83\\x83\\x7a\\x88\\x1f\\x62\\x86\"\n\"\\x64\\x71\\x54\\x1b\\x57\\x61\\xa6\\xb0\\x87\\x1f\\x9e\\x89\\x83\\x94\\x7b\\x1b\\x0e\\xf7\\xa6\\x16\\x28\\x07\\x74\\x24\\x0a\\xa3\\x1e\\xed\\xf7\\x56\\x07\\xf7\"\n\"\\x0e\\x1d\\xfb\\x20\\x25\\x1d\\xbb\\xfc\\x61\\xfb\\x94\\xf8\\x61\\xbb\\x27\\x0a\\xfb\\x20\\x8c\\x1d\\x0e\\xbc\\x1d\\xc5\\xf7\\x72\\x15\\x83\\x07\\x84\\x07\\xfb\"\n\"\\x14\\xef\\x2c\\xf7\\x1a\\xf7\\x18\\xf1\\xe8\\xf7\\x0e\\xf7\\x17\\xfb\\x01\\xf2\\xfb\\x1f\\x2a\\xfb\\x0b\\x5b\\x65\\x7d\\x96\\x80\\x99\\x91\\x8f\\x8d\\x91\\x93\"\n\"\\x1e\\xa9\\xb3\\xd3\\xa1\\xc8\\x1b\\xf1\\xda\\x4a\\x2c\\x99\\x1f\\x58\\x04\\x38\\x79\\x44\\x56\\x2f\\x1b\\x2f\\x42\\xc2\\xdc\\x7c\\x1f\\x0e\\xf8\\x9d\\xf8\\xd5\"\n\"\\x15\\x90\\x92\\x8d\\x92\\x91\\x1a\\x99\\x7f\\x98\\x7d\\x81\\x84\\x86\\x81\\x84\\x1e\\xfc\\x2c\\xfc\\xef\\x05\\x87\\x84\\x88\\x84\\x85\\x1a\\x7c\\x97\\x7f\\x9a\"\n\"\\x94\\x92\\x90\\x95\\x92\\x1e\\xf7\\x3f\\xf8\\x29\\x15\\x91\\x87\\x86\\x8e\\x85\\x1b\\x86\\x88\\x8a\\x87\\x85\\x1f\\x72\\x6b\\x74\\x82\\x72\\x1b\\x59\\x68\\xb2\"\n\"\\xc1\\xc1\\xaf\\xb1\\xbf\\x9e\\x9d\\x86\\x81\\x97\\x1f\\x95\\x84\\x8d\\x86\\x90\\x75\\x8e\\x7f\\x95\\x83\\x94\\x8c\\x8e\\x8c\\x18\\x93\\x8c\\x05\\x92\\x8c\\x91\"\n\"\\x91\\x92\\x1a\\x8c\\x8b\\x8e\\x8a\\x8d\\x1e\\x87\\x9a\\x8a\\x95\\x96\\x1a\\x91\\x8c\\x90\\x8c\\x90\\x1e\\x8e\\x98\\x8b\\x8b\\x8e\\x1a\\x98\\x81\\x95\\x7e\\x84\"\n\"\\x84\\x87\\x85\\x87\\x1e\\x89\\x89\\x8a\\x8a\\x89\\x87\\x08\\x99\\x70\\x78\\x90\\x73\\x1b\\x3f\\x52\\x50\\x3b\\x3b\\xc3\\x4f\\xd6\\xbd\\xd0\\xae\\xa4\\x90\\x89\"\n\"\\x91\\x89\\x8e\\x1f\\xf7\\x16\\x2b\\x15\\x5d\\x6c\\x7f\\x71\\x71\\x1f\\x73\\x71\\x7d\\x66\\x65\\x1a\\x65\\x99\\x66\\xa3\\x72\\x1e\\x70\\xa5\\xaa\\x7f\\xb7\\x1b\"\n\"\\xb7\\xab\\x97\\xa5\\xa4\\x1f\\xa3\\xa5\\x99\\xb0\\xb1\\x1a\\xdd\\x53\\xc4\\x3a\\x1e\\x5c\\x04\\xc0\\xae\\x66\\x54\\x73\\x83\\x73\\x7b\\x79\\x1f\\x78\\x7b\\x78\"\n\"\\x84\\x6a\\x1b\\x57\\x67\\xb0\\xc1\\xa5\\x93\\xa2\\x9b\\x9d\\x1f\\x9e\\x9c\\x9c\\x92\\xad\\x1b\\x0e\\xf7\\x50\\xf7\\x22\\x15\\x8d\\x45\\x8e\\x76\\x95\\x76\\x08\"\n\"\\x72\\x98\\x9f\\x7d\\xa3\\x1b\\xa8\\xa3\\x99\\xab\\xa8\\x1f\\x9d\\x9f\\x9b\\xa0\\x96\\x9e\\x90\\x94\\x18\\x8d\\x8e\\x8c\\x8f\\x8f\\x1a\\x92\\x85\\x90\\x84\\x84\"\n\"\\x86\\x87\\x82\\x84\\x1e\\x80\\x7b\\x05\\x6c\\x75\\x7a\\x7d\\x7c\\x1b\\x79\\x84\\x9e\\xc0\\x97\\x8b\\xa4\\x8c\\xa0\\x1f\\x9e\\x07\\xaf\\x07\\xf7\\x1e\\xf7\\x44\"\n\"\\xbe\\xec\\xe1\\x1a\\xc1\\x6e\\xae\\x5f\\x5f\\x5a\\x6a\\x52\\x64\\x1e\\x60\\x4b\\x74\\xfb\\x01\\x88\\xfb\\x3d\\x8a\\x4e\\x18\\x74\\x6f\\x86\\x85\\x79\\x76\\x88\"\n\"\\x88\\x19\\x76\\x75\\x05\\x85\\x85\\x89\\x86\\x86\\x1a\\x87\\x07\\x84\\x8f\\x8e\\x88\\x91\\x1b\\x96\\x8b\\x8b\\xb9\\xb7\\x1f\\xec\\xf7\\x3d\\x15\\x8d\\xb1\\x05\"\n\"\\xf7\\x6d\\x95\\x9e\\xd0\\xbc\\x1b\\xa2\\x9a\\x76\\x6b\\x44\\x64\\x2f\\x45\\x2b\\x1f\\x0e\\xdd\\xf8\\x94\\x15\\xfc\\x61\\x78\\x37\\x0a\\xf7\\x06\\x24\\x1d\\x60\"\n\"\\xf8\\x2d\\x06\\xf7\\x38\\xfc\\x36\\x05\\x68\\x99\\x92\\x84\\x9f\\x1b\\xa6\\x95\\x9a\\xb4\\x1f\\xf8\\x5c\\x9f\\xf7\\x0c\\x0a\\xfb\\x08\\x4c\\x1d\\xb7\\xfc\\x26\"\n\"\\x06\\xfb\\x3b\\xf8\\x3c\\x80\\xa7\\x8a\\x8b\\x6d\\x8c\\x19\\x57\\x4b\\x1d\\xf8\\x93\\x3a\\x15\\xb3\\x6d\\xaa\\x65\\x75\\x78\\x81\\x77\\x7d\\x1e\\x80\\x7b\\x88\"\n\"\\x7a\\x57\\x1a\\x42\\x8d\\x74\\x92\\x80\\x1e\\x78\\x97\\xa2\\x7f\\xa5\\x1b\\xb7\\xa2\\xa4\\xbc\\x1f\\x57\\x16\\x7c\\x86\\x84\\x80\\x80\\x86\\x92\\x9a\\x1e\\xf7\"\n\"\\x00\\x07\\x98\\x90\\x91\\x96\\x96\\x90\\x85\\x7e\\x1e\\x8d\\xfb\\xb7\\x15\\xa6\\x98\\x94\\x9d\\xa0\\x81\\x8f\\x57\\x5f\\x80\\x86\\x76\\x7a\\x99\\x82\\xa5\\x1f\"\n\"\\x0e\\xb9\\x1d\\x0e\\xb9\\x1d\\x58\\xf7\\xcf\\xf7\\x0e\\x0a\\x7e\\x83\\x85\\x88\\x83\\x82\\xf7\\x01\\x0a\\x97\\x7f\\x98\\x92\\x91\\x68\\x1d\\x48\\x1d\\x8f\\xf7\"\n\"\\xda\\x15\\xa0\\x97\\x94\\x9b\\x9b\\x80\\x94\\x75\\x5c\\x1d\\xf7\\x4f\\xf7\\x98\\x15\\xf7\\x51\\xfb\\xfe\\x05\\x7c\\x93\\x95\\x83\\x95\\x1b\\x92\\x8e\\x8e\\x93\"\n\"\\x90\\x8a\\x8f\\x87\\x97\\x1f\\xfb\\x24\\xf7\\xf5\\xf7\\x24\\xf7\\xf6\\x05\\x8e\\x92\\x8d\\x94\\x92\\x1a\\x91\\x88\\x8e\\x84\\x81\\x86\\x87\\x78\\x7e\\x1e\\x0e\"\n\"\\xf8\\x32\\xf7\\x98\\x15\\xfb\\x51\\xf7\\xff\\x05\\x9d\\x7f\\x85\\x90\\x81\\x1b\\x84\\x88\\x88\\x85\\x84\\x8d\\x82\\x8e\\x84\\x1f\\xf7\\x24\\xfb\\xf6\\xfb\\x24\"\n\"\\xfb\\xf5\\x05\\x87\\x7f\\x8a\\x87\\x86\\x1a\\x83\\x8e\\x88\\x92\\x95\\x95\\x93\\x9a\\x93\\x1e\\x0e\\xf8\\x66\\xbe\\x15\\xf7\\x94\\x07\\xd4\\x44\\xc0\\x2b\\x65\"\n\"\\x4a\\x7e\\x78\\x54\\xa6\\x0a\\x9a\\x4f\\x72\\x8e\\x5e\\xef\\x0a\\xeb\\xd0\\xc2\\xa1\\xc0\\xc9\\x1f\\x50\\xb7\\x07\\x7a\\x1d\\xbf\\xee\\x0a\\x73\\x87\\x89\\x79\"\n\"\\x1b\\x70\\x7f\\x94\\x9e\\xa7\\xa3\\xa3\\xc8\\xab\\x1f\\x95\\x91\\x90\\x92\\x96\\x1a\\x9b\\x80\\x94\\x76\\x1e\\x26\\xce\\x15\\x4f\\x4a\\x57\\x74\\x46\\x1b\\x48\"\n\"\\x61\\xaa\\xbb\\xc5\\xd1\\xb3\\xef\\xb7\\xbb\\x86\\x83\\xac\\x1f\\x0e\\xf8\\x82\\xf8\\x2a\\xf0\\x0a\\x88\\x8c\\xb3\\x58\\x1f\\xb7\\x53\\x7c\\xf7\\x34\\x1d\\x7e\"\n\"\\xf7\\x00\\x0a\\xc0\\xb6\\x95\\x7a\\x0a\\x56\\xcb\\xa1\\x7f\\xac\\x1b\\xac\\xaa\\x9d\\xb4\\xae\\x1f\\x9d\\xa1\\x93\\x97\\xf7\\x09\\x0a\\xfb\\x20\\x04\\x7e\\x87\"\n\"\\x87\\x74\\x7a\\x1f\\x6a\\x73\\x75\\x7b\\x75\\x1b\\x7b\\x8a\\x8c\\xb3\\x56\\x1f\\xb7\\x54\\x7b\\x93\\x6a\\x1b\\x68\\x71\\x7c\\x63\\x68\\x1f\\x75\\x73\\x83\\x7e\"\n\"\\x81\\x1a\\x7e\\x96\\x80\\x99\\x94\\x91\\x8f\\x95\\x93\\x1e\\xc0\\xb6\\x95\\x7a\\x0a\\x55\\xcc\\xa0\\x80\\xac\\x1b\\xac\\xaa\\x9e\\xb4\\xae\\x1f\\x9e\\xa0\\x92\"\n\"\\x98\\x94\\x1a\\x98\\x80\\x96\\x7d\\x1e\\x0e\\x48\\x1d\\xfb\\x05\\xf8\\x5f\\x15\\x54\\x5f\\x61\\x57\\x57\\xb7\\x61\\xc1\\xf7\\x1a\\x1d\\x6d\\x6d\\x73\\xa2\\xa7\"\n\"\\xa7\\xa3\\xa2\\xa8\\x1f\\xc3\\xf7\\x1b\\x15\\x96\\x95\\x8e\\x8f\\x65\\x1d\\x83\\x81\\x1e\\xfb\\x06\\x29\\x05\\x7f\\x81\\x89\\x87\\x82\\x1a\\x7c\\x96\\x80\\x9a\"\n\"\\x93\\x8e\\x8d\\x94\\x96\\x1e\\x0e\\xf7\\x35\\xf7\\x9e\\x15\\xa9\\xb8\\x9a\\xaa\\x9a\\x1a\\x93\\x83\\x91\\x82\\x84\\x87\\x88\\x7e\\x80\\x1e\\x6c\\x68\\x6e\\x74\"\n\"\\x4f\\x69\\x08\\x78\\x81\\x87\\x87\\x84\\x1a\\x85\\x8f\\x85\\x92\\x87\\x1e\\x91\\x88\\x8c\\x8a\\x8f\\x89\\x91\\x88\\x19\\x99\\x82\\xbc\\x6e\\xa3\\x77\\xad\\x64\"\n\"\\x19\\x84\\x91\\x8f\\x89\\x92\\x1b\\x94\\x92\\x92\\x93\\x9a\\x76\\xb5\\x73\\xab\\x1f\\xf7\\xb3\\x9f\\x0a\\x0e\\xf7\\x9b\\xf8\\xae\\x15\\xfc\\x34\\x07\\xa2\\x6c\"\n\"\\x5e\\xa1\\x7c\\x1b\\x83\\x84\\x84\\x82\\x84\\x8d\\x87\\x93\\x85\\x1f\\xb8\\x65\\x9a\\x79\\xb8\\x41\\x08\\x7e\\x92\\x8e\\x88\\x94\\x1b\\x92\\x8f\\x90\\x9c\\x95\"\n\"\\x1f\\xab\\xc3\\xa5\\xab\\xaf\\xa9\\x08\\x98\\x96\\x8e\\x90\\x91\\x1a\\x94\\x85\\x93\\x83\\x7c\\x6b\\x7c\\x6e\\x5d\\x1e\\xf8\\x33\\x07\\x0e\\xf8\\xdd\\xf7\\x9f\"\n\"\\x15\\xfc\\x3c\\x06\\xa3\\xab\\xa0\\xb5\\x9a\\x1a\\x93\\x84\\x92\\x82\\x84\\x87\\x89\\x84\\x85\\x1e\\x64\\x5e\\x78\\x7c\\x41\\x60\\x08\\x7d\\x83\\x88\\x88\\x83\"\n\"\\x1a\\x84\\x8f\\x87\\x9e\\x81\\x1e\\xc6\\x6a\\xaa\\x73\\xa9\\x68\\x08\\x7f\\x95\\x90\\x87\\x91\\x1b\\x95\\x93\\x91\\x93\\x9a\\x7b\\xab\\x6e\\xb7\\x1f\\xf8\\x3c\"\n\"\\x06\\x0e\\xa3\\xf7\\x6b\\x15\\xf8\\x3c\\x9f\\x0a\\xfc\\x3c\\x06\\x0e\\xf7\\xd0\\x7f\\x15\\xf8\\x34\\x07\\x75\\xaa\\xb8\\x75\\x9a\\x1b\\x93\\x92\\x92\\x94\\x92\"\n\"\\x89\\x8f\\x83\\x91\\x1f\\x63\\xac\\x79\\xa0\\x6c\\xbd\\x88\\x8f\\x88\\x8f\\x88\\x91\\x88\\x90\\x88\\x90\\x8a\\x8c\\x08\\x98\\x84\\x88\\x8e\\x82\\x1b\\x84\\x87\"\n\"\\x87\\x79\\x81\\x1f\\x69\\x51\\x74\\x6e\\x66\\x6c\\x08\\x7e\\x81\\x88\\x86\\x85\\x1a\\x81\\x91\\x84\\x93\\x9a\\xa9\\x99\\xa9\\xbb\\x1e\\xfc\\x34\\x07\\x0e\\xf7\"\n\"\\xa6\\xf7\\x02\\x15\\xa7\\x5f\\x69\\x9b\\x7c\\x1b\\x84\\x84\\x83\\x82\\x85\\x8f\\x86\\x97\\x80\\x1f\\xae\\x6e\\xa5\\x6b\\xf7\\x37\\x1d\\x93\\x8f\\x1f\\xb7\\xd4\"\n\"\\x9e\\xa4\\xb8\\xb0\\x08\\x92\\x91\\x8e\\x8f\\x92\\x1a\\x94\\x84\\x92\\x83\\x7c\\x5f\\x75\\x74\\x6b\\x1e\\xf7\\xae\\x07\\x74\\xab\\xb7\\x76\\xa3\\x0a\\xab\\x9a\"\n\"\\xa8\\xb9\\x1e\\x0e\\xf7\\x57\\x63\\x15\\x5f\\xf7\\x6a\\xb7\\x07\\xfb\\x18\\xf7\\x51\\x15\\xa7\\x5f\\x69\\x9b\\x7c\\x1b\\x84\\x84\\x83\\x82\\x85\\x8f\\x86\\x97\"\n\"\\x80\\x1f\\xae\\x70\\xa5\\x6a\\xf7\\x37\\x1d\\x92\\x8f\\x1f\\xb6\\xd5\\x9f\\xa3\\xb8\\xb0\\x08\\x92\\x91\\x8e\\x8f\\x92\\x1a\\x94\\x84\\x92\\x83\\x7c\\x5e\\x75\"\n\"\\x75\\x6c\\x1e\\xf7\\xad\\x07\\x75\\xaa\\xb8\\x75\\xa3\\x0a\\xac\\x9a\\xa8\\xb8\\x1e\\x0e\\xf7\\x44\\xbc\\x15\\x5e\\xbe\\xba\\x77\\xc0\\x1b\\xef\\xdd\\xdf\\xf1\"\n\"\\xc0\\x75\\xb6\\x61\\xa9\\x1f\\x70\\x9f\\x75\\x93\\x5c\\x94\\x08\\xce\\xa7\\xac\\xb7\\xc5\\x1a\\xdb\\x48\\xc7\\x31\\x52\\x58\\x72\\x5f\\x6e\\x1e\\x75\\x6a\\x82\"\n\"\\x5d\\x39\\x1a\\xfc\\x9f\\x2b\\x0a\\xe1\\xf8\\x51\\x15\\xf7\\x18\\x8a\\xca\\x62\\x37\\x1a\\x3d\\x55\\x53\\x3f\\x5b\\x5b\\xa2\\xb0\\x6b\\x1e\\x7b\\x9f\\x84\\xa6\"\n\"\\xbc\\x1a\\xf7\\x60\\x07\\xf7\\x02\\xae\\xba\\xdc\\xca\\xb5\\x67\\x56\\x53\\x56\\x60\\x39\\x81\\x1e\\x0e\\x49\\x0a\\x6e\\xf7\\x5d\\xb7\\x0a\\x49\\x0a\\xfb\\x1c\"\n\"\\xe7\\xd8\\x1d\\xf8\\x66\\xf8\\x15\\x15\\xab\\x62\\x57\\x9b\\x60\\x0a\\xfb\\x3a\\xf7\\x8f\\xb0\\x0a\\x49\\x0a\\xfb\\x1b\\xf7\\x73\\x26\\x0a\\x0e\\xf7\\xbf\\xf7\"\n\"\\x57\\x15\\xfb\\x14\\xf7\\x74\\x05\\x4a\\x2e\\x0a\\xb0\\x06\\xf7\\x13\\xfb\\x75\\xfb\\x2d\\xfb\\xa5\\x05\\x84\\x7e\\x88\\x82\\x84\\x1a\\x7e\\x95\\x81\\x98\\x98\"\n\"\\x94\\x92\\x9e\\x95\\x1e\\xf7\\x1d\\xf7\\x8b\\xf7\\x2e\\xfb\\xa5\\x05\\xcd\\x22\\x0a\\x65\\x06\\xfb\\x2d\\xf7\\xa6\\xf7\\x1c\\xf7\\x82\\x05\\x92\\x98\\x8e\\x94\"\n\"\\x92\\x1a\\x98\\x81\\x95\\x7e\\x7f\\x81\\x83\\x79\\x81\\x1e\\x0e\\xf7\\xad\\xf8\\x88\\x15\\xfb\\x1e\\xfb\\x07\\xfb\\x03\\xfb\\x1a\\xfb\\x22\\xf7\\x06\\xfb\\x05\"\n\"\\xf7\\x24\\xf7\\x1f\\xf7\\x05\\xf7\\x03\\xf7\\x1c\\xf7\\x1f\\xfb\\x08\\xf7\\x06\\xfb\\x21\\x1f\\x8f\\xfb\\xbe\\x15\\xf5\\x23\\x05\\x72\\x67\\x68\\x80\\x61\\x1b\"\n\"\\x60\\x6e\\x94\\xa3\\x6c\\x1f\\x5d\\xb8\\x15\\x70\\xaf\\x82\\xa6\\xb4\\x1a\\xb7\\x96\\xae\\xa3\\xac\\x1e\\xf7\\x02\\xfb\\x00\\x05\\xe8\\x16\\xf7\\x02\\xf6\\x05\"\n\"\\xa1\\x6d\\x94\\x72\\x66\\x1a\\x5a\\x80\\x66\\x73\\x6a\\x1e\\xfb\\x2c\\xf7\\x29\\x15\\xfb\\x03\\xf7\\x00\\x05\\xa3\\xac\\xae\\x96\\xb5\\x1b\\xb7\\xaa\\x81\\x72\"\n\"\\xae\\x1f\\x0e\\xf8\\x82\\x16\\x9b\\x07\\xfb\\x15\\x9e\\x50\\xce\\xf7\\x18\\x1a\\x9c\\x6e\\x91\\x81\\x94\\x80\\x08\\x68\\xa9\\xba\\x73\\xb5\\x1b\\xd1\\xc2\\xc4\"\n\"\\xd4\\xd1\\x59\\xc2\\x4c\\x78\\x80\\x88\\x7e\\x70\\x1f\\x89\\x8a\\x82\\x86\\x86\\x89\\x08\\xa1\\xaa\\x93\\xa3\\xa8\\x1a\\xd0\\x53\\xc1\\x44\\x44\\x54\\x55\\x45\"\n\"\\x70\\x90\\x7d\\xa5\\x61\\x1e\\x9c\\x68\\x78\\x91\\x76\\x1b\\x4f\\x58\\x52\\x46\\x43\\xc3\\x53\\xd2\\xca\\xc0\\xb1\\xd2\\xad\\x1f\\x8c\\x78\\x05\\x85\\x07\\x8a\"\n\"\\x53\\x6e\\x4c\\x62\\x6a\\x72\\x78\\x79\\x84\\x42\\x7c\\x08\\x7b\\x07\\x0e\\x9a\\x0a\\xf8\\x03\\xf7\\x50\\x3c\\x0a\\x90\\x1a\\x99\\x7f\\x97\\x7d\\x81\\x85\\x87\"\n\"\\x7e\\x82\\x75\\x0a\\x96\\x80\\x9a\\x95\\x90\\x8f\\x98\\x94\\x1e\\x0e\\xf8\\x90\\xf8\\x9c\\x15\\xde\\x26\\x07\\x20\\x1d\\xbc\\x6b\\xfb\\x19\\x22\\x1d\\xf7\\x19\"\n\"\\xfb\\x0c\\x06\\xc2\\x5e\\x4f\\xa8\\x45\\x1b\\xfb\\x10\\x28\\x27\\xfb\\x10\\xfb\\x10\\xee\\x26\\xf7\\x0f\\xd2\\xc5\\xa7\\xc4\\xba\\x1f\\x46\\xf0\\x07\\x61\\x1d\"\n\"\\x5a\\xf8\\x36\\xbc\\x39\\x0a\\xfb\\xa8\\xfb\\x1e\\x15\\xee\\xd7\\x40\\x28\\x2b\\x3f\\x3e\\x2a\\x2a\\x3f\\xd8\\xec\\xeb\\xd7\\xd8\\xea\\x1f\\x0e\\xf7\\xa2\\xf8\"\n\"\\x42\\x15\\x64\\x84\\x77\\x84\\x6f\\x7b\\x08\\x43\\x62\\x5f\\x42\\x3d\\x1a\\xfb\\x11\\xf3\\x28\\xf7\\x16\\xf7\\x16\\xf2\\xee\\xf7\\x11\\xc7\\x72\\xc3\\x5f\\xb3\"\n\"\\x1e\\x73\\xa1\\x7d\\x94\\x49\\xb0\\x08\\x26\\xc2\\x7a\\x9a\\xb0\\x1a\\xb9\\xab\\x9e\\xd5\\x1e\\xcf\\x06\\x9f\\x95\\x93\\x9b\\x9a\\x80\\x93\\x78\\x1f\\x4a\\x06\"\n\"\\x56\\x6a\\x83\\x79\\x71\\x1f\\x6c\\x76\\x79\\x69\\x68\\x1a\\x61\\x9d\\x70\\xba\\x6f\\x1e\\xb5\\x53\\xe0\\x0a\\xf6\\xf7\\xa2\\x15\\xe1\\x20\\xdc\\xfb\\x09\\xaf\"\n\"\\x47\\xba\\xe0\\xe3\\xf7\\x0f\\xdb\\xeb\\x4d\\xd1\\xfb\\x10\\xf7\\x44\\x6e\\xc4\\x60\\x3a\\x53\\x3c\\xfb\\x06\\xfb\\x23\\x08\\x0e\\xf8\\x22\\xf8\\xe0\\xc1\\x1d\"\n\"\\x2c\\x1d\\xfb\\xbc\\xf8\\x08\\x86\\x1d\\x2c\\x1d\\xfb\\x40\\xf7\\x7d\\x15\\xf7\\x1b\\xf7\\x01\\x05\\x99\\x95\\x8d\\x8f\\x95\\x94\\x1d\\x7c\\x80\\x46\\x1d\\x2c\"\n\"\\x1d\\xfb\\x3f\\xf8\\x00\\x26\\x0a\\x0e\\xf8\\xd9\\xf7\\x7b\\x15\\xbe\\xfc\\x8d\\x07\\x8f\\xf7\\x10\\xcd\\xc7\\xf7\\x15\\x88\\x08\\xf7\\xc6\\xbe\\xfb\\xba\\xf2\"\n\"\\x0a\\x49\\x99\\x50\\xa4\\x65\\x1e\\xa2\\x68\\xae\\x6c\\xac\\x7e\\x08\\x7c\\xaf\\xa7\\x87\\xd4\\x1b\\xf7\\xba\\xbe\\xfb\\xc6\\x06\\xfb\\x14\\x88\\x4a\\xc5\\x85\"\n\"\\xf7\\x0c\\x08\\x90\\x07\\x0e\\x2c\\x1d\\x55\\xf7\\xab\\x2d\\x0a\\xf7\\x44\\xf7\\xb8\\x15\\xd5\\xc8\\xa4\\x9b\\xc7\\x1b\\xd4\\xb0\\x6d\\x4c\\x8f\\x1f\\xfb\\xcb\"\n\"\\x07\\x4a\\x8a\\x5e\\x5f\\x4c\\x1b\\x4e\\x29\\x0a\\xc9\\x06\\xe6\\x89\\xd2\\xd2\\x89\\xe6\\x08\\xf7\\xd1\\x07\\xdc\\x48\\xc4\\x2c\\x4e\\x66\\x79\\x53\\x57\\x1e\"\n\"\\xc7\\x3a\\x07\\xbb\\x0a\\x06\\x0e\\xf7\\x15\\x1d\\xfb\\x14\\xf7\\x01\\x21\\xf7\\x17\\x96\\x97\\x8c\\x8c\\x9d\\x1e\\x71\\x74\\x80\\x76\\x6e\\x1a\\x62\\xa9\\x73\"\n\"\\xbe\\xb5\\xb3\\x9f\\xa0\\x96\\x82\\x94\\x82\\x87\\x87\\x8a\\x88\\x87\\x1e\\x7e\\x74\\x86\\x89\\x79\\x1b\\x71\\x7f\\x94\\x9e\\xab\\xa2\\x9f\\xec\\xc0\\x1f\\xb2\"\n\"\\xa0\\x97\\x96\\x9a\\x1a\\x99\\x80\\x96\\x7d\\x85\\x87\\x89\\x85\\x83\\x1e\\x6d\\x63\\x43\\x75\\x4f\\x1b\\x23\\x3d\\xcb\\xeb\\x7d\\x1f\\xbe\\x04\\xdd\\x9c\\xd3\"\n\"\\xc1\\xe7\\x1b\\xe6\\xd4\\x54\\x3a\\x9b\\x1f\\x0e\\x8e\\x0a\\x0e\\x8e\\x0a\\xa1\\xf8\\x1a\\x88\\x1d\\xf8\\x9e\\xf7\\x08\\x6b\\x0a\\xf8\\x50\\xf7\\xae\\x15\\x57\"\n\"\\x0a\\xfc\\x50\\x26\\x1d\\xf8\\x50\\xfb\\x21\\x6b\\x0a\\x0e\\xf8\\x71\\xf7\\x54\\x15\\x8a\\xcf\\x87\\xa8\\x7d\\xaa\\x08\\xcc\\x6e\\x46\\xb2\\x36\\x1b\\xfb\\x14\"\n\"\\x3b\\x37\\xfb\\x1a\\xfb\\x1a\\xd8\\x3c\\xf7\\x15\\xeb\\xce\\xb4\\xd7\\xa5\\x1f\\x8c\\x8e\\x8d\\x8f\\x05\\x5e\\x06\\x8a\\x89\\x8b\\x8a\\x88\\x87\\x08\\x5a\\x72\"\n\"\\x5a\\x70\\x4a\\x1b\\x41\\x69\\xa1\\xc8\\x77\\x1f\\xd6\\x07\\xf7\\x96\\xb4\\x15\\xfb\\x94\\xd3\\x06\\xc5\\xa9\\xab\\xa0\\xc8\\x1b\\xcb\\xbd\\x6d\\x5a\\x9e\\x1f\"\n\"\\x0e\\x98\\x0a\\x0e\\x98\\x0a\\xf7\\x6a\\xf7\\x71\\xf4\\x1d\\x98\\x92\\x56\\x0a\\xf7\\x74\\xa2\\x0a\\xf7\\xaa\\xf8\\x63\\x15\\x8c\\x9b\\x05\\xa2\\x8d\\x76\\x9f\"\n\"\\x71\\x1b\\x72\\x77\\x78\\x74\\x86\\xad\\x0a\\x0e\\xf8\\x30\\xf7\\x9e\\x15\\xfb\\x6b\\xfb\\xb9\\x58\\xf7\\xed\\xf8\\xc7\\xfb\\xed\\x58\\xf7\\xb9\\xfb\\x57\\xfb\"\n\"\\xb9\\x58\\x07\\x0e\\xf7\\xd6\\xf7\\xac\\x15\\xf6\\x94\\xe0\\xe9\\xf7\\x01\\x1a\\xf7\\x0a\\x2b\\xea\\xfb\\x0a\\xfb\\x0a\\x2c\\x2c\\xfb\\x0a\\xfb\\x01\\xe0\\x2d\"\n\"\\xf5\\x82\\x1e\\x32\\xfb\\x29\\x64\\xf7\\x29\\xfb\\x2c\\xb7\\xf7\\x2c\\xf7\\x28\\xb2\\xfb\\x28\\x07\\x72\\xf8\\x69\\x15\\xeb\\xd8\\x40\\x2f\\x2d\\x3f\\x3f\\x2d\"\n\"\\x2e\\x3f\\xd6\\xe9\\xe6\\xd7\\xd8\\xe5\\x1f\\x0e\\xf7\\x0b\\xbe\\x15\\x5a\\x20\\x0a\\xf8\\x30\\x06\\x9f\\x97\\x95\\x9b\\x9c\\x80\\x93\\x76\\x1f\\x20\\xf7\\x3f\"\n\"\\x06\\xa9\\xc5\\x8f\\x94\\x98\\x9c\\x08\\xa1\\x99\\x9b\\x96\\x98\\x1b\\x9a\\x98\\x84\\x7a\\x9f\\x1f\\x7c\\x9b\\x8f\\x89\\x94\\x1b\\x9a\\x96\\x96\\x99\\x97\\x85\"\n\"\\x93\\x79\\x99\\x1f\\xa5\\x69\\x7b\\x92\\x71\\x1b\\x66\\x78\\x7b\\x4f\\x66\\x1f\\xe1\\x33\\x07\\x20\\x1d\\xaf\\x6b\\xfb\\x2c\\xf7\\x57\\xf7\\xc3\\x5e\\x06\\x58\"\n\"\\x0a\\xeb\\xfc\\x5c\\x07\\x20\\x1d\\xbc\\x06\\xbf\\xfb\\x8a\\x15\\xf7\\x2c\\xfb\\x6b\\xfb\\x2c\\x06\\x0e\\xf7\\xc0\\xcd\\x15\\xfb\\x45\\xf7\\xf5\\x05\\x52\\x2e\"\n\"\\x0a\\xa3\\x06\\xf7\\x4d\\xfc\\x07\\x05\\x80\\x5a\\x87\\x6b\\x6d\\x1a\\x61\\x9b\\x71\\xa4\\xa3\\x9b\\xa6\\xb7\\xa8\\x86\\xac\\x7f\\xb9\\x1e\\xf7\\x38\\xf7\\xda\"\n\"\\x9e\\xaf\\x94\\x93\\xa4\\x8c\\x19\\xa0\\x44\\x0a\\x71\\x06\\x5d\\x8a\\x7a\\x7e\\x6c\\x4f\\x08\\x0e\\x93\\x0a\\x2c\\xf7\\x80\\x86\\x1d\\xbd\\x1d\\xa8\\xf7\\x94\"\n\"\\xb0\\x0a\\x93\\x0a\\xe8\\xf7\\x81\\x15\\x91\\x94\\x8d\\x8f\\x91\\x1a\\x99\\x80\\x97\\x7c\\x81\\x85\\x87\\x7e\\x82\\x1e\\x37\\xfb\\x0f\\x05\\x83\\x7f\\x8a\\x8a\"\n\"\\x85\\x1a\\x7c\\x97\\x80\\x99\\x96\\x90\\x8f\\x98\\x94\\x1e\\x0e\\xbd\\x1d\\xa9\\xf7\\x78\\x26\\x0a\\x0e\\xf8\\xa0\\xf7\\xd9\\x15\\xfc\\x3f\\xf7\\x7d\\x05\\x8d\"\n\"\\x86\\x85\\x8d\\x87\\x1b\\x82\\x83\\x86\\x84\\x87\\x1f\\x8a\\x88\\x05\\x88\\x87\\x8a\\x87\\x87\\x1a\\x82\\x90\\x84\\x96\\x85\\x1e\\xf7\\xee\\xfb\\x50\\xfb\\xee\"\n\"\\xfb\\x50\\x05\\x80\\x84\\x86\\x85\\x82\\x1a\\x88\\x8d\\x86\\x8d\\x86\\x1e\\x8c\\x89\\x05\\x83\\x90\\x93\\x86\\x92\\x1b\\x90\\x91\\x8d\\x8e\\x91\\x1f\\x77\\x61\"\n\"\\x15\\x76\\x80\\x82\\xa5\\x1d\\xf8\\x34\\x33\\x0a\\x0e\\xf7\\x3f\\xf8\\x9c\\x15\\xde\\x26\\x07\\x20\\x1d\\xbc\\x6b\\x4c\\x06\\x75\\x80\\x82\\x7b\\x7b\\x97\\x82\"\n\"\\xa0\\x1f\\xca\\xfc\\x37\\xd2\\x0a\\xf7\\x87\\x06\\xb2\\xb8\\x8b\\x8b\\x96\\x94\\x08\\xa3\\xa8\\xa6\\x95\\xb0\\x1b\\xb2\\x9f\\x85\\x0a\\x78\\x97\\x74\\x6f\\x1a\"\n\"\\xfb\\x81\\x63\\x07\\x77\\x80\\x82\\x7b\\x7a\\x96\\x82\\x9f\\xf7\\x18\\x1d\\x2d\\x4f\\x62\\x77\\x56\\x5b\\x1e\\xf7\\x02\\xf7\\x0c\\x07\\xa0\\x97\\x94\\x9b\\x9b\"\n\"\\x46\\x0a\\x0e\\xb8\\x1d\\xf7\\x15\\xf8\\x3d\\xe2\\x1d\\x58\\x1d\\xf7\\xc0\\x75\\x15\\x9b\\xd2\\xba\\xdb\\xe3\\xf7\\x02\\x08\\xd5\\xe9\\xa4\\xbf\\xc9\\x1a\\xca\"\n\"\\x55\\xc0\\x4a\\x4b\\x5d\\x62\\x3f\\x76\\x1e\\xd9\\x72\\x5f\\xb2\\x4b\\x1b\\x4a\\x58\\x56\\x47\\x57\\x9b\\x68\\xcc\\x33\\x1f\\xf7\\x09\\xfb\\x30\\xa9\\x56\\xa0\"\n\"\\x3b\\x08\\x0e\\xd1\\x16\\xf8\\x61\\xf7\\xcb\\x06\\xfb\\x7b\\xf7\\x92\\xfb\\x7a\\xfb\\x92\\x05\\xbd\\xfb\\x99\\x15\\xf7\\x85\\x07\\xf7\\x48\\xf7\\x5a\\xf7\\x49\"\n\"\\xfb\\x5a\\x05\\xfb\\x85\\x07\\x0e\\x32\\x1d\\xfb\\x2a\\xf8\\xcb\\x86\\x1d\\xf7\\x6d\\xf8\\x37\\x15\\xfb\\x39\\x2f\\x0a\\xf7\\x05\\xfb\\xd1\\xfb\\x05\\x20\\x0a\"\n\"\\xf7\\xaa\\x21\\x0a\\xfb\\x05\\xea\\x0a\\xf7\\xcc\\xfb\\x21\\xbf\\x0a\\xfb\\x89\\x07\\x74\\x81\\x2a\\x1d\\xf7\\x5e\\xf7\\x49\\x1d\\x32\\x1d\\xe7\\xf8\\x6e\\x2d\"\n\"\\x0a\\xf7\\xc0\\xf7\\x8a\\x15\\x52\\xba\\xc8\\x69\\xbf\\x1b\\xa7\\xa5\\x93\\x98\\x9f\\x1f\\xaa\\xa1\\xa2\\xba\\xb2\\x1a\\xd0\\x50\\xc3\\x43\\x54\\x4f\\x68\\x54\"\n\"\\x61\\x1e\\xc6\\x59\\x56\\xa9\\x55\\x1b\\x43\\x50\\x52\\x44\\x47\\xc4\\x52\\xd1\\xc7\\xb8\\xa4\\xca\\xc1\\x1f\\xae\\xb2\\x15\\xb9\\xab\\xbd\\xa9\\xb6\\x1b\\xba\"\n\"\\xaa\\x6d\\x5e\\x5e\\x6c\\x6b\\x61\\x77\\x76\\x91\\x97\\x75\\x1f\\x7a\\x94\\x8b\\x8b\\x5c\\xb9\\x08\\x47\\x8f\\x15\\x5c\\x66\\x58\\x6d\\x61\\x1b\\x5e\\x6e\\xaa\"\n\"\\xba\\xb6\\xaa\\xa9\\xb8\\xb4\\xb3\\x74\\x58\\xba\\x1f\\x0e\\xf7\\xa7\\x5c\\x15\\x44\\x84\\x6f\\x7b\\x84\\x88\\x8d\\x99\\x83\\x1e\\x9a\\x80\\x7c\\x94\\x7a\\x1b\"\n\"\\x71\\x79\\x7a\\x72\\x6d\\xa5\\x76\\xb0\\xa7\\xa7\\x98\\xa3\\xa2\\x1f\\xa9\\xab\\x93\\xa9\\xe4\\x1a\\xf8\\x8a\\x07\\xca\\x92\\xa6\\x9d\\x90\\x8f\\x87\\x82\\x91\"\n\"\\x1e\\x77\\x99\\x95\\x85\\x9f\\x1b\\xa5\\x9d\\x9c\\xa3\\xa9\\x72\\xa0\\x68\\x73\\x72\\x82\\x7c\\x77\\x1f\\x66\\x6e\\x7d\\x60\\x32\\x1a\\x0e\\xf7\\xda\\xf9\\x0e\"\n\"\\x15\\x57\\xfd\\x35\\x06\\x4b\\x83\\x70\\x7a\\x86\\x87\\x8f\\x94\\x85\\x1e\\xa0\\x7d\\x81\\x92\\x77\\x1b\\x72\\x78\\x7a\\x72\\x6e\\xa4\\x75\\xae\\xa3\\xa4\\x94\"\n\"\\x9a\\x9f\\x1f\\xb0\\xa8\\x99\\xb6\\xe4\\x1a\\x0e\\xf7\\xa6\\xfb\\x4a\\x15\\xbf\\xf9\\x35\\x06\\xca\\x92\\xa6\\x9d\\x90\\x8f\\x87\\x82\\x91\\x1e\\x77\\x99\\x95\"\n\"\\x85\\x9f\\x1b\\xa5\\x9d\\x9c\\xa3\\xa9\\x72\\xa0\\x68\\x73\\x72\\x82\\x7c\\x77\\x1f\\x66\\x6e\\x7d\\x60\\x32\\x1a\\x0e\\xf8\\xad\\xf7\\x74\\x15\\xf7\\x2a\\x86\"\n\"\\xae\\x70\\xb8\\x1e\\xce\\x61\\x3e\\xb4\\x35\\x1b\\x57\\x5b\\x7c\\x70\\x62\\x1f\\x58\\x68\\x6e\\x5d\\x81\\x4d\\x08\\x86\\x69\\x8a\\x75\\x2a\\x1a\\xfb\\x52\\x07\"\n\"\\x75\\x94\\x7f\\x9c\\x9b\\x95\\x98\\xa0\\x1e\\xf7\\x55\\x07\\x8c\\xe3\\x8b\\x8b\\x95\\x1a\\x8e\\xbf\\x92\\xa9\\x9a\\xa1\\x08\\xbd\\xad\\xc8\\xab\\xcb\\x1b\\xc8\"\n\"\\xc6\\x6e\\x5e\\xab\\x1f\\xa6\\x66\\x91\\x66\\xfb\\x1c\\x1a\\xfb\\x55\\x07\\x75\\x94\\x7f\\x9b\\x9b\\x96\\x99\\x9f\\x1e\\x0e\\xf7\\xc5\\xf8\\xc7\\x15\\xfb\\x33\"\n\"\\xfb\\x13\\xfb\\x10\\xfb\\x2f\\xfb\\x32\\xf7\\x11\\xfb\\x12\\xf7\\x31\\xf7\\x2f\\xf7\\x12\\xf7\\x12\\xf7\\x30\\xf7\\x2d\\xfb\\x12\\xf7\\x14\\xfb\\x2b\\x1f\\x30\"\n\"\\xfb\\x34\\xf7\\x1e\\x1d\\xf7\\xa2\\x34\\x15\\x86\\x48\\x82\\x6c\\x74\\x69\\x08\\x5a\\x6a\\x5a\\x72\\x4b\\x1b\\x4f\\x5e\\xa0\\xb4\\x6a\\x1f\\x6e\\xb0\\x80\\xad\"\n\"\\x85\\xd4\\x95\\x63\\x93\\x7a\\x9e\\x75\\x08\\x61\\xae\\xbc\\x76\\xca\\x1b\\xc9\\xbc\\xa0\\xb5\\xae\\x1f\\x9e\\xa1\\x93\\x9c\\x95\\xb3\\x08\\x29\\xe2\\xf7\\x1e\"\n\"\\x1d\\x0e\\xef\\x1d\\xf7\\xc3\\x06\\x7a\\x1d\\xbe\\xb6\\xa7\\x1d\\x87\\x1e\\x7d\\x73\\xa1\\x1d\\xa3\\xa0\\xa4\\xae\\x9e\\x1f\\xba\\xa4\\x8b\\x8b\\x9a\\x5b\\x0a\"\n\"\\xfb\\x2f\\xea\\x0a\\x0e\\xf7\\xc4\\xbc\\x0a\\x7e\\x88\\x78\\x7e\\x1d\\x0e\\xf7\\xc4\\xf8\\x25\\x15\\x56\\x1d\\x7f\\x77\\xe6\\x0a\\x82\\x88\\x86\\x82\\x1e\\x83\"\n\"\\x7b\\x7e\\x88\\x78\\x7e\\x1d\\xfb\\x0a\\xf8\\x88\\xe3\\x1d\\xf7\\xc4\\xf8\\x25\\x15\\x9f\\x82\\x97\\x7a\\x7a\\x82\\x80\\x76\\x1e\\xfb\\xea\\x07\\x58\\xa6\\x73\"\n\"\\xc4\\xc2\\xb5\\x9e\\xa5\\x98\\x7f\\x97\\x7f\\x86\\x83\\x88\\x86\\x81\\x1e\\x84\\x7c\\x7c\\x87\\x79\\x7e\\x1d\\xde\\xf8\\x9b\\xc1\\x1d\\xf7\\xc5\\xbc\\x0a\\x7d\"\n\"\\x88\\x79\\x7e\\x1d\\xd0\\xf8\\x9b\\x88\\x1d\\x32\\x1d\\xc9\\xf8\\xba\\x5f\\x0a\\xf8\\x30\\xf8\\x04\\xbf\\x0a\\xfb\\xb3\\x07\\x74\\x81\\x2a\\x1d\\xf7\\x28\\xf7\"\n\"\\xa2\\x15\\xfb\\x1a\\xfb\\x01\\x05\\x7e\\xf3\\x1d\\x96\\x89\\x8e\\x58\\x1d\\xf7\\x64\\xf7\\x84\\x15\\xf7\\x47\\x27\\x07\\x75\\x80\\x38\\x1d\\xbb\\xfb\\xd1\\x5b\"\n\"\\x36\\x1d\\xf7\\x28\\x22\\x0a\\x5b\\xf7\\x1e\\xa4\\x06\\xd7\\x8c\\xca\\x52\\xc6\\xfb\\x13\\x8e\\x85\\x18\\xe0\\x06\\xa1\\x97\\x94\\x9b\\x9c\\x7f\\x94\\x75\\x1f\"\n\"\\x57\\x06\\x58\\xea\\x51\\xcb\\x58\\x9d\\xf7\\x33\\xf7\\x20\\x18\\x9a\\x06\\xa0\\x97\\x45\\x0a\\x29\\x2e\\x0a\\x92\\x06\\xfb\\x23\\xfb\\x14\\x05\\x0e\\x91\\x0a\"\n\"\\xf7\\x19\\x2e\\x3c\\x0a\\x90\\x1a\\x9a\\xc1\\x0a\\xa9\\x0a\\x9c\\x80\\x93\\x75\\x1f\\xfb\\x15\\x06\\x74\\x81\\x2a\\x1d\\x92\\x06\\xfb\\x2d\\xfb\\x13\\x05\\xf7\"\n\"\\x46\\x97\\x1d\\xfb\\xd1\\x5a\\x20\\x0a\\xf0\\x06\\x0e\\x42\\x0a\\xf7\\x03\\xf9\\x40\\x6d\\x1d\\xe4\\xbe\\x15\\x71\\x36\\x1d\\xf7\\x09\\x22\\x0a\\x6b\\x06\\xf7\"\n\"\\x2c\\xf7\\xb2\\xf7\\x39\\xfb\\xb2\\x05\\x6d\\x20\\x0a\\xf7\\x0a\\x22\\x0a\\x71\\x06\\xfb\\xd0\\xf8\\xbc\\x05\\x36\\x06\\x77\\x7f\\x82\\xa5\\x1d\\xbf\\x06\\xe7\"\n\"\\xfb\\x35\\x05\\x0e\\x42\\x0a\\xf7\\x48\\xf8\\x9b\\x15\\x91\\x93\\x8d\\x91\\x90\\x1a\\x99\\x7f\\x97\\x7d\\x81\\x86\\x88\\x7d\\x81\\x75\\x0a\\x97\\x80\\x99\\x95\"\n\"\\x90\\x8f\\x98\\x94\\x1e\\x0e\\x42\\x0a\\x89\\xfb\\x24\\xe5\\x1d\\x42\\x0a\\xf7\\x43\\xf7\\xdf\\x15\\x62\\x6b\\x6d\\x64\\x63\\xab\\x6d\\xb4\\x1f\\x96\\x06\\xb5\"\n\"\\xab\\xa9\\xb3\\xb2\\x6b\\xa9\\x61\\x1f\\x0e\\xbc\\xf7\\xd9\\x15\\xf8\\x3e\\xfb\\x7d\\x05\\x88\\x91\\x91\\x89\\x8f\\x1b\\x93\\x93\\x90\\x93\\x8f\\x1f\\x8c\\x8d\"\n\"\\x05\\x8e\\x90\\x8c\\x8f\\x8f\\x1a\\x94\\x86\\x92\\x80\\x91\\x1e\\xfb\\xed\\xf7\\x50\\xf7\\xee\\xf7\\x50\\x05\\x95\\x90\\x90\\x93\\x94\\x1a\\x90\\x8a\\x8e\\x89\"\n\"\\x8f\\x1e\\x89\\x8e\\x05\\x92\\x87\\x83\\x90\\x83\\x1b\\x86\\x85\\x89\\x89\\x86\\x1f\\x9e\\xfc\\xc3\\x15\\x53\\x0a\\xfc\\x34\\x26\\x1d\\x0e\\xf7\\x50\\xf7\\x44\"\n\"\\x15\\x80\\x44\\x68\\x55\\x68\\x8a\\x08\\x7b\\x80\\x81\\x7d\\x7a\\x3a\\x1d\\xf7\\xd7\\x06\\xbc\\xb3\\xb7\\xc0\\x9b\\x80\\x96\\x7c\\x7c\\x83\\x82\\x79\\x89\\x1f\"\n\"\\x6e\\x88\\x7c\\x7a\\x75\\x1b\\xfb\\x85\\x06\\xa3\\xaa\\x9c\\xb6\\x92\\xbe\\x08\\xf7\\x15\\xf7\\x0a\\x0a\\xfb\\x12\\x06\\x8a\\xa0\\x8b\\x93\\x88\\x9d\\x08\\xf7\"\n\"\\x16\\x06\\x9e\\x93\\x92\\x9c\\x9b\\x83\\x92\\x78\\x1f\\xfb\\x21\\x06\\x89\\x94\\x8b\\x8b\\x80\\xae\\x08\\x83\\xa8\\x86\\xa4\\x9b\\x1a\\xbf\\xb7\\xb6\\xbf\\xad\"\n\"\\xa3\\x7e\\x6a\\xa6\\x1e\\x81\\x94\\x90\\x87\\x93\\x1b\\x98\\x98\\x97\\x97\\x97\\x7f\\x9c\\x76\\x9e\\x1f\\xa5\\x6d\\x69\\x98\\x65\\x1b\\x3a\\x4a\\x4a\\x3a\\x71\"\n\"\\x90\\x75\\xa0\\x49\\x1f\\x46\\x06\\x77\\x83\\x84\\x7a\\x7b\\x93\\x84\\x9f\\x1f\\xdc\\x06\\x8d\\x82\\x8c\\x79\\x8c\\x77\\x08\\x36\\x06\\x77\\x83\\x84\\x7a\\x7b\"\n\"\\x93\\x84\\x9f\\x1f\\x0e\\xf7\\xa9\\xbe\\x15\\xf8\\x3b\\x07\\xb9\\xb6\\xab\\xca\\xb0\\xa8\\x88\\x83\\xc5\\x1e\\x8a\\x92\\x8f\\x8b\\x8d\\x1b\\x9b\\x96\\x95\\x9a\"\n\"\\x98\\x83\\x94\\x7d\\x8e\\x1f\\x92\\x6b\\x46\\x91\\x63\\x1b\\x2f\\x48\\x55\\x40\\x1f\\x54\\x39\\x52\\x0a\\xdd\\xfb\\xd1\\x2f\\x29\\x0a\\xf7\\xd0\\x21\\x0a\\x0e\"\n\"\\xf7\\xe4\\xf8\\x31\\x15\\x91\\x75\\x77\\x8e\\x76\\x1b\\xfb\\x0b\\x2c\\x2c\\xfb\\x0a\\xfb\\x0a\\xea\\x2c\\xf7\\x0a\\xf7\\x0a\\xea\\xea\\xf7\\x0a\\xdb\\x5e\\xd4\"\n\"\\x45\\xb0\\x1f\\xe3\\xf7\\x53\\x05\\x61\\xaa\\xaa\\x6d\\x95\\x1b\\x92\\x8f\\x8f\\x90\\x8f\\x89\\x8f\\x85\\x95\\x1f\\x75\\xad\\x78\\xc0\\x88\\xaf\\x08\\x9e\\x8a\"\n\"\\x8a\\x8e\\x85\\x1b\\x87\\x87\\x89\\x83\\x81\\x1f\\x78\\x7a\\x4a\\x73\\x67\\x88\\x08\\x79\\x88\\x87\\x89\\x83\\x1a\\x80\\xa3\\x84\\xb2\\x1e\\x9f\\x06\\x9f\\x8c\"\n\"\\x05\\x8d\\x06\\xfb\\x31\\xfb\\x79\\x15\\xea\\xd8\\x40\\x2f\\x2d\\x40\\x3f\\x2d\\x2e\\x3f\\xd6\\xe8\\xe7\\xd7\\xd8\\xe5\\x1f\\x0e\\xf7\\xa8\\xf7\\xcf\\x15\\xe4\"\n\"\\xf7\\x5f\\x05\\x98\\xa9\\x8d\\x92\\x99\\x1a\\xa1\\x7a\\x9c\\x73\\x6a\\x80\\x7a\\x49\\x7f\\x1e\\x67\\xfb\\x66\\x05\\x0e\\xf7\\xa6\\xf7\\x28\\x15\\x90\\x7e\\x7a\"\n\"\\x8f\\x7d\\x1b\\x57\\x5d\\x5e\\x59\\x6e\\xa1\\x78\\xad\\xd3\\xbe\\xc2\\xda\\x1f\\xf7\\x8b\\x07\\xba\\x84\\xb3\\x4b\\x46\\x1a\\x60\\x83\\x69\\x77\\x5e\\x1e\\xa2\"\n\"\\x06\\xa9\\xb0\\x9b\\xb9\\xbc\\x1a\\xca\\x73\\xc7\\x59\\xc7\\x1e\\x61\\xbe\\x8a\\x8c\\x86\\x90\\x85\\x94\\x19\\xbc\\x66\\x07\\x0e\\xf7\\xd8\\xf8\\x81\\x15\\xa0\"\n\"\\x70\\xa2\\x76\\xa3\\x7e\\xc8\\x68\\x96\\x84\\x90\\x82\\x08\\x92\\x7e\\x8f\\x78\\x73\\x1a\\xfb\\x92\\x07\\x92\\x78\\x72\\x90\\x76\\x1b\\x3f\\x48\\x51\\x4a\\x65\"\n\"\\xaa\\x73\\xbd\\xc3\\xc0\\xa4\\xb5\\xac\\x1f\\xa2\\xa8\\x92\\xa3\\x8e\\xc0\\x08\\xf8\\x22\\x07\\x8c\\xda\\x67\\xdb\\x59\\xab\\x57\\xac\\x18\\x71\\x9c\\x7c\\x95\"\n\"\\x86\\x8f\\x08\\x7d\\x9b\\x84\\x9e\\xa5\\x1a\\x99\\x5b\\xfc\\xae\\x07\\x93\\x78\\x74\\x8f\\x76\\x1b\\x41\\x49\\x52\\x49\\x65\\xaa\\x73\\xbb\\xc2\\xbf\\xa4\\xb5\"\n\"\\xac\\x1f\\xa1\\xa8\\x92\\xa3\\x8e\\xc0\\x08\\xf7\\x2c\\xf7\\x47\\x15\\xfb\\x0d\\xcc\\x71\\xb4\\x87\\xf7\\x12\\x8e\\x89\\x18\\xf7\\x0d\\x49\\xa5\\x63\\x90\\xfb\"\n\"\\x12\\x08\\x0e\\x6a\\x1d\\xf7\\x9c\\xf7\\x79\\x34\\x0a\\xf7\\x63\\xf8\\x37\\x15\\x3b\\x06\\x74\\x81\\x2a\\x1d\\xa7\\xfb\\xd1\\x63\\x29\\x0a\\xf7\\x18\\x06\\x9f\"\n\"\\x96\\x21\\x1d\\x77\\x1f\\x63\\xf7\\x85\\x06\\xd6\\xc8\\xa4\\x9a\\xc8\\x1b\\xaf\\x9e\\x85\\x0a\\x77\\x97\\x74\\x70\\x1a\\xfb\\x81\\x6f\\x6e\\x0a\\xf7\\x01\\x06\"\n\"\\x9f\\x97\\x53\\x1d\\x6e\\xf7\\x88\\x06\\xd9\\x45\\xc7\\x2f\\x4e\\x67\\x79\\x53\\x56\\x1e\\x52\\xf7\\x67\\x15\\x92\\x95\\x8d\\x8f\\x90\\x1a\\x99\\x7f\\x97\\x7d\"\n\"\\x80\\x86\\x87\\x7e\\x82\\x1e\\x36\\xfb\\x0f\\x05\\x84\\x81\\x8a\\x88\\x85\\x1a\\x7c\\x97\\x80\\x99\\x95\\x91\\x8f\\x98\\x94\\x1e\\x0e\\x6a\\x1d\\xf7\\x13\\xf7\"\n\"\\x0c\\xd8\\x1d\\x6a\\x1d\\xf7\\x2b\\xfc\\x58\\xb6\\x0a\\xf7\\xda\\xf7\\x7c\\x15\\xf7\\x93\\xbd\\xfb\\x79\\x06\\xec\\xf7\\x49\\x05\\xf7\\x18\\xbe\\x22\\x06\\x97\"\n\"\\xa9\\x96\\xa1\\x96\\x9a\\x08\\x8f\\x90\\x8d\\x8f\\x8e\\x1a\\x96\\x7e\\x96\\x7f\\x7e\\x85\\x87\\x7b\\x83\\x1e\\x60\\x3a\\x05\\xfb\\x1a\\xf2\\x0a\\xfb\\x10\\xb7\"\n\"\\x3b\\xe6\\x63\\x1e\\x6e\\x55\\x05\\x87\\x83\\x89\\x85\\x86\\x1a\\x7f\\x97\\x80\\x98\\x97\\x92\\x90\\x9a\\x93\\x1e\\xac\\xca\\x05\\x87\\xac\\x8f\\x8b\\xb8\\x1b\"\n\"\\xf7\\xba\\xbe\\xfb\\xc6\\x06\\x73\\x84\\x8b\\x8d\\x7e\\x1f\\xb2\\xf7\\x47\\x15\\x31\\xfb\\x3c\\x4a\\xa1\\x68\\xc3\\x87\\xe0\\x19\\x90\\x07\\xf7\\xd2\\xf7\\x7b\"\n\"\\x15\\x2a\\xfb\\x49\\x05\\xfb\\x71\\x90\\x06\\x91\\xf7\\x0c\\xcc\\xc6\\xf7\\x14\\x88\\x08\\x0e\\xf8\\x12\\xf8\\x0e\\x15\\xba\\xe5\\x05\\x8f\\x92\\x8d\\x92\\x90\"\n\"\\x1a\\x98\\x7f\\x96\\x7d\\x80\\x84\\x86\\x7d\\x83\\x1e\\x4f\\xfb\\x06\\x05\\xfb\\x89\\x26\\x1d\\xf7\\x6f\\x06\\x5b\\x31\\x05\\xfb\\x3f\\x20\\x0a\\xf7\\x24\\x06\"\n\"\\x61\\x3a\\x05\\x87\\x84\\x89\\x85\\x86\\x1a\\x7e\\x97\\x7f\\x99\\x96\\x92\\x90\\x9a\\x92\\x1e\\xc2\\xf3\\x05\\xf7\\x86\\x27\\x0a\\xfb\\x6b\\x06\\xbb\\xe5\\x05\"\n\"\\xf7\\x3b\\x44\\x0a\\x0e\\xf7\\x3c\\xf8\\x35\\x15\\x3c\\x06\\x78\\x81\\x83\\x7a\\x7b\\x96\\x81\\x9d\\x1f\\xb6\\x06\\xf7\\x3f\\xfc\\x02\\x05\\xba\\x06\\xf7\\x0d\"\n\"\\xf7\\x18\\xbd\\xdf\\xd3\\x1a\\xca\\x68\\xd5\\x6e\\x7f\\x7d\\x7f\\x80\\x85\\x8e\\x81\\x91\\x81\\x1e\\x9d\\x6c\\x92\\x72\\x6d\\x1a\\x4f\\x67\\x47\\x3f\\x32\\x1e\"\n\"\\x83\\x82\\x86\\x86\\x85\\x83\\x08\\x0e\\x4b\\x0a\\xfb\\x0e\\xf7\\x80\\x42\\x1d\\x2c\\x0a\\x88\\xf7\\x5d\\x55\\x1d\\x94\\x1a\\x99\\xde\\x1d\\x83\\x84\\x68\\x0a\"\n\"\\x2c\\x0a\\xf7\\x0c\\xf7\\x23\\x15\\xa0\\x97\\x94\\x9b\\x9b\\x80\\x94\\x75\\x5c\\x1d\\x8a\\x0a\\x0e\\x8a\\x0a\\xd2\\xf8\\x1b\\x15\\x96\\x94\\x8e\\x90\\x94\\x1a\"\n\"\\x99\\x7f\\x97\\x7d\\x84\\x84\\x88\\x83\\x83\\x1e\\xfb\\x06\\xa6\\x1d\\x99\\x91\\x56\\x0a\\x4b\\x0a\\x0e\\x4b\\x0a\\xdb\\xf7\\x62\\x15\\x95\\x93\\x8f\\x92\\x93\"\n\"\\x1a\\x99\\x7f\\x97\\x7e\\x83\\x85\\x88\\x83\\x82\\x1e\\xfb\\x05\\x2b\\x05\\x80\\x82\\x87\\x85\\x83\\x1a\\x7d\\x97\\x7f\\x99\\x92\\x92\\x8e\\x93\\x93\\x1e\\x0e\"\n\"\\xcf\\x8e\\x15\\xf8\\x66\\xb5\\xfc\\x3c\\xf8\\x3c\\x61\\x06\\x0e\\x8d\\x0a\\x82\\xf7\\x82\\xb8\\x0a\\xf7\\x2b\\xf8\\xbc\\x15\\x7d\\x8c\\x95\\x82\\x9a\\x1b\\xac\"\n\"\\x8c\\x05\\xbb\\xc4\\x77\\x6c\\xb5\\x1f\\xa8\\x76\\x9e\\x76\\xa7\\x60\\x08\\xa7\\x5f\\x66\\x96\\x57\\x1b\\xfb\\x16\\x24\\x28\\xfb\\x11\\xfb\\x11\\xf2\\x27\\xf7\"\n\"\\x17\\xf7\\x15\\xf3\\xee\\xf7\\x10\\xe9\\x64\\xf7\\x00\\x4e\\xd1\\x1f\\xcb\\x55\\x33\\xb0\\x29\\x1b\\x70\\x88\\x8a\\x84\\x84\\x1f\\x87\\x87\\x89\\x84\\x84\\x1a\"\n\"\\xf7\\x27\\xfb\\x40\\xe0\\x0a\\xf7\\x3f\\xf7\\x77\\x15\\xa5\\x06\\xf7\\x08\\xe7\\xd5\\xea\\xe9\\x36\\xd4\\xfb\\x01\\x1f\\xfb\\x21\\x76\\x1d\\xf7\\x1a\\x06\\xba\"\n\"\\x8b\\x8b\\x8f\\x91\\x1f\\x93\\x8f\\x90\\x94\\x94\\x5b\\x0a\\x49\\x06\\xf7\\x76\\x04\\xf7\\x7f\\xb6\\x07\\xd8\\xc9\\x57\\x4b\\x4a\\x46\\x55\\x37\\x1f\\xf7\\xa4\"\n\"\\x78\\x15\\xc6\\x07\\x9b\\x83\\x94\\x7d\\x7d\\x83\\x82\\x7b\\x1e\\x50\\x76\\x07\\x7a\\x82\\x84\\x7d\\x7e\\x95\\x83\\x9b\\x1f\\xa0\\xfb\\x25\\x06\\x4c\\x9a\\x7a\"\n\"\\xc0\\xae\\xa8\\xa1\\xa5\\x96\\x81\\x94\\x7f\\x84\\x86\\x88\\x82\\x86\\x1e\\x7f\\x84\\x88\\x89\\x7e\\x1b\\x75\\x87\\x91\\xac\\x1f\\xf7\\x24\\xba\\x07\\x9b\\x95\"\n\"\\x93\\x98\\x99\\x82\\x92\\x7a\\x1f\\x0e\\xf7\\x8b\\xfb\\x23\\x15\\x72\\x94\\x7d\\x9c\\x9c\\x94\\x98\\xa5\\x1e\\xf7\\x14\\x07\\x8a\\x90\\x92\\x8b\\x91\\x1b\\xf7\"\n\"\\x18\\xeb\\xec\\xf7\\x18\\xf7\\x0d\\x3b\\xee\\x29\\x63\\x6a\\x7a\\x6b\\x76\\x1f\\x78\\x6f\\x84\\x67\\x3f\\x1a\\xfb\\x5f\\x07\\x6e\\x94\\x7d\\x91\\x7a\\x96\\x08\"\n\"\\x59\\xaa\\x70\\xc1\\xd0\\x1a\\xd2\\xa9\\xc3\\xc0\\xa8\\x1e\\xa1\\x97\\x92\\x93\\x97\\x1a\\x99\\x82\\x95\\x7e\\x74\\x62\\x6f\\x66\\x6e\\x1e\\x6a\\x63\\x7b\\x5a\"\n\"\\x50\\x1a\\xfb\\x10\\xd0\\x36\\xf7\\x0c\\x75\\x1e\\xbf\\xf7\\x93\\x15\\xf2\\x9c\\xae\\xbe\\xcf\\xc5\\x3e\\x31\\xfb\\x02\\x42\\x48\\xfb\\x0d\\x88\\x1e\\x0e\\xf8\"\n\"\\x5e\\xf8\\x04\\x15\\xb3\\x29\\x1d\\xfc\\x1f\\x25\\x1d\\xb3\\xfb\\xd1\\x63\\x25\\x1d\\xf7\\x17\\x22\\x0a\\x64\\xf7\\xd1\\xf7\\x67\\xfb\\xd1\\x64\\x36\\x1d\\xf7\"\n\"\\x17\\x29\\x1d\\x63\\x06\\x0e\\xf8\\x7d\\xf8\\xe3\\x15\\xbc\\x6c\\x0a\\xfc\\x71\\xf7\\x27\\x1d\\xbc\\xfd\\x02\\x5a\\xf7\\x27\\x1d\\xf7\\x2b\\x6c\\x0a\\x59\\xf9\"\n\"\\x02\\xf7\\xa6\\xfd\\x02\\x5a\\x06\\x7b\\x8c\\x80\\x81\\x8a\\x7c\\x08\\x88\\x07\\x8c\\x7c\\x96\\x81\\x9b\\x8c\\x08\\xf7\\x2b\\x6c\\x0a\\x5a\\x06\\x0e\\xf7\\xe9\"\n\"\\xf8\\x64\\x15\\xfb\\x2b\\x65\\x86\\x71\\x5e\\x1f\\x46\\x62\\x61\\x3f\\x37\\x1a\\x3e\\xad\\x46\\xc8\\x5f\\x1e\\x67\\xbd\\xae\\x85\\xf7\\x39\\x1b\\xf7\\x56\\x06\"\n\"\\xa0\\x99\\x95\\x9b\\x9b\\x7f\\x94\\x74\\x1f\\xfb\\x58\\x06\\xfb\\x14\\x60\\x90\\x9e\\x68\\x1f\\x54\\xa8\\x65\\xcb\\xcb\\x1a\\xc5\\xab\\xc7\\xba\\xaa\\x1e\\xa6\"\n\"\\xb3\\xb0\\x90\\xf7\\x23\\x1b\\xf7\\x58\\x06\\xa1\\x98\\x95\\x9b\\x9b\\x7e\\x94\\x75\\x1f\\x0e\\xf7\\x74\\x16\\xf7\\x2d\\xb0\\x90\\xa5\\xb8\\x1f\\xd0\\xb4\\xb5\"\n\"\\xd7\\xdf\\x1a\\xd8\\x68\\xd0\\x4f\\xb7\\x1e\\xaf\\x59\\x67\\x91\\xfb\\x39\\x1b\\xfb\\x55\\x06\\x75\\x7e\\x82\\x7b\\x7b\\x98\\x81\\xa1\\x1f\\xf7\\x58\\x06\\xf7\"\n\"\\x16\\xb3\\x86\\x78\\xaf\\x1f\\xc2\\x6f\\xb1\\x4a\\x4b\\x1a\\x51\\x6b\\x50\\x5b\\x6b\\x1e\\x71\\x65\\x63\\x85\\xfb\\x21\\x1b\\xfb\\x58\\x06\\x74\\x7f\\x82\\x7b\"\n\"\\x7c\\x99\\x80\\xa0\\x1f\\x0e\\xf7\\xda\\xf8\\xce\\x15\\x9f\\x82\\x97\\x7a\\x7a\\x82\\x7f\\x77\\x1e\\xfc\\xaa\\x07\\x36\\x90\\x70\\xac\\x8e\\xeb\\x08\\xf7\\x8d\"\n\"\\x27\\x78\\x0a\\xbb\\xfb\\x5a\\x06\\x8c\\xfb\\x14\\xb9\\x56\\xf7\\x06\\x87\\x08\\xfb\\x1b\\x07\\x27\\x1d\\xf7\\x1b\\x07\\xf7\\x07\\x90\\xba\\xc1\\x8a\\xf7\\x12\"\n\"\\x08\\xf7\\x5a\\xbb\\x07\\x32\\x0a\\x27\\xfb\\x8d\\x06\\x8c\\x28\\x73\\x6d\\x35\\x86\\x08\\x0e\\xf8\\x5f\\xf7\\x3f\\x15\\x65\\xbd\\x7b\\x9b\\x69\\xa3\\x08\\xe1\"\n\"\\xa8\\xba\\xbe\\xcb\\x1a\\xe0\\x36\\xd4\\x27\\x1e\\xfb\\x8d\\x9c\\x0a\\xf7\\x57\\xf7\\x12\\x06\\xb3\\x79\\xb3\\x6a\\xaa\\x61\\x41\\x71\\x18\\x7a\\x85\\x85\\x84\"\n\"\\x7d\\x1a\\x7f\\x96\\x7f\\x98\\x8f\\x90\\x8c\\x8e\\x92\\x1e\\xe2\\xaa\\x9c\\x70\\x97\\x76\\xa9\\x57\\x19\\x91\\x80\\x05\\xc6\\x21\\x0a\\x70\\x06\\x71\\xb7\\x83\"\n\"\\x98\\x7e\\xa0\\xe0\\xa9\\x18\\x9c\\x91\\x91\\x92\\x98\\x1a\\x97\\x80\\x97\\x7f\\x87\\x82\\x89\\x8a\\x87\\x1e\\xfc\\x15\\xe6\\x15\\xf7\\x2a\\x1d\\x0e\\x6b\\x1d\"\n\"\\xf7\\x4a\\xf7\\x9b\\xb7\\x0a\\xf7\\x2e\\xf7\\xd1\\x15\\x22\\x06\\x79\\x8c\\x80\\x82\\x8a\\x7a\\x08\\x8a\\x07\\x8c\\x7a\\x96\\x82\\x9d\\x8c\\x08\\xc7\\x06\\xe4\"\n\"\\xfb\\xb0\\xf7\\x85\\xf9\\x2f\\x05\\xf7\\x3b\\x06\\x9c\\x98\\x96\\x9a\\x9b\\x80\\x94\\x78\\x1f\\xfb\\x66\\x06\\xfb\\x55\\xfc\\xcc\\x05\\x0e\\x6b\\x1d\\xb8\\xf7\"\n\"\\x2e\\xaf\\x0a\\x6b\\x1d\\xa8\\xfc\\x36\\x3c\\x0a\\x91\\x1a\\x98\\x7f\\x97\\x7d\\xf7\\x02\\x1d\\xf7\\x0b\\xf8\\x19\\x15\\xf8\\x12\\x27\\x0a\\xfc\\x46\\xfb\\x88\"\n\"\\x06\\x39\\x1d\\x96\\x9f\\x1e\\x0e\\xf7\\x28\\xd1\\x15\\x51\\xbf\\xc4\\x6f\\xd0\\x1b\\xf7\\x0c\\xee\\xf1\\xf7\\x0f\\xc5\\x77\\xc1\\x66\\xb6\\x1f\\xba\\x62\\x57\"\n\"\\xa1\\x47\\x1b\\x4a\\x52\\x76\\x65\\x62\\x1f\\x5d\\x61\\x75\\x4c\\x32\\x1a\\xfb\\xde\\x2b\\x0a\\xf7\\x42\\xf8\\xa8\\x15\\xf1\\xd0\\x46\\x25\\x2a\\x40\\x3c\\x2e\"\n\"\\x56\\x58\\xa5\\xb7\\x66\\x1f\\x73\\xa9\\x7f\\xae\\xb5\\x1a\\xee\\xd4\\xd2\\xf0\\x1e\\x0e\\x3e\\x0a\\xf7\\xb3\\xf8\\x71\\xf7\\x00\\x1d\\x97\\xf7\\x48\\x1d\\xf7\"\n\"\\xd2\\x7c\\x15\\xf7\\x05\\x92\\xd3\\xbf\\xd6\\x1a\\xaf\\x77\\xae\\x6b\\xa0\\x1e\\x6a\\xa1\\x66\\x96\\x4d\\x91\\x33\\x91\\x1d\\xd3\\x7e\\x0a\\x93\\x82\\x5c\\x0a\"\n\"\\xcf\\x07\\xa0\\x82\\x96\\x7b\\x7d\\x81\\x81\\x7c\\x89\\x1e\\xa5\\x69\\x5e\\x98\\x55\\x1b\\x26\\x40\\x5a\\x48\\x6a\\x9d\\x6c\\x9a\\x1d\\xa5\\x85\\xa5\\x7c\\x08\"\n\"\\xa4\\x7e\\x9b\\x74\\x77\\xf7\\x0f\\x0a\\x92\\x07\\x9b\\x80\\x96\\x7c\\x7a\\x82\\x80\\x76\\x1e\\x3a\\x07\\x76\\x94\\x80\\x9c\\x9b\\x94\\x96\\x9f\\x1e\\xa8\\x73\"\n\"\\xb3\\x7b\\xbe\\x86\\x08\\x4a\\xa5\\x07\\xa6\\x99\\x84\\x7e\\x7e\\x7b\\x82\\x74\\x7d\\x7c\\x8f\\x95\\x77\\x1f\\x90\\x82\\x88\\x8c\\x85\\x47\\x1d\\x85\\x9b\\x83\"\n\"\\x1f\\x81\\x9f\\xaa\\x93\\x1d\\x0e\\x3e\\x0a\\xf7\\x2a\\xf8\\xa3\\x3c\\x1d\\x99\\x91\\xae\\x1d\\x84\\x94\\x90\\x89\\x92\\x1b\\x99\\x96\\x96\\x99\\x95\\x88\\x90\"\n\"\\x7f\\x95\\x1f\\x0e\\x3e\\x0a\\xf7\\x42\\xfb\\x60\\x15\\x91\\x95\\x8d\\x8f\\x90\\x1a\\x9a\\x80\\x96\\x7c\\xf7\\x02\\x1d\\xf7\\x52\\xf7\\xcf\\x15\\xe4\\xf7\\x5f\"\n\"\\x05\\x98\\xa9\\x8d\\x92\\x99\\x1a\\xa1\\x7a\\x9c\\x73\\x6a\\x80\\x7a\\x49\\x7f\\x1e\\x67\\xfb\\x66\\x05\\xf7\\x52\\x16\\xe5\\xf7\\x5f\\x05\\x98\\xa8\\x8d\\x93\"\n\"\\x99\\x1a\\xa1\\x79\\x9c\\x74\\x6a\\x80\\x7a\\x49\\x7f\\x1e\\x67\\xfb\\x66\\x05\\x0e\\xf8\\xbc\\xf8\\x12\\x15\\x9d\\x96\\x95\\x9a\\x9b\\x80\\x95\\x79\\x1f\\xfb\"\n\"\\x6c\\x06\\x3e\\x6c\\x84\\x71\\x5d\\x1f\\x44\\x62\\x5f\\x42\\x3d\\x1a\\xfb\\x11\\xf3\\x28\\xf7\\x16\\xf7\\x15\\xf3\\xee\\xf7\\x11\\xd2\\x6f\\xc1\\x4c\\xbc\\x1e\"\n\"\\xfb\\x25\\x16\\xf7\\x25\\x1d\\x0e\\xf7\\x6d\\xf8\\x23\\x15\\x75\\x79\\x7a\\x75\\x76\\x9c\\x79\\xa1\\xa1\\x9c\\x9c\\xa1\\xa0\\x7a\\x9d\\x76\\x1f\\xf7\\x41\\x8c\"\n\"\\x15\\x75\\x79\\x79\\x76\\x75\\x9d\\x79\\xa1\\xa0\\x9d\\x9d\\xa0\\xa1\\x79\\x9d\\x76\\x1f\\xe9\\x37\\x15\\x82\\x64\\x83\\x7b\\x77\\x73\\x08\\x61\\x66\\x5c\\x77\"\n\"\\x4d\\x1b\\x4c\\x5d\\x9f\\xb5\\x66\\x1f\\x77\\xa3\\x83\\x9b\\x82\\xb2\\x90\\x48\\x93\\x6c\\xa2\\x68\\x08\\x5b\\xac\\xbd\\x72\\xcb\\x1b\\xc6\\xba\\xa0\\xb4\\xab\"\n\"\\x1f\\xa8\\xb0\\x96\\xae\\x90\\xd3\\x08\\xfb\\x47\\xf7\\x8b\\x15\\xfb\\x33\\xfb\\x13\\xfb\\x10\\xfb\\x2f\\xfb\\x32\\xf7\\x11\\xfb\\x12\\xf7\\x31\\xf7\\x2f\\xf7\"\n\"\\x12\\xf7\\x12\\xf7\\x30\\xf7\\x2d\\xfb\\x12\\xf7\\x14\\xfb\\x2b\\x1f\\x83\\x66\\x15\\xf7\\x1d\\xf7\\x03\\xfb\\x00\\xfb\\x1b\\xfb\\x1d\\xfb\\x01\\xfb\\x01\\xfb\"\n\"\\x1c\\xfb\\x1b\\xfb\\x01\\xf7\\x01\\xf7\\x1c\\xf7\\x19\\xf7\\x02\\xf7\\x03\\xf7\\x17\\x1f\\x0e\\xf7\\x22\\x16\\xf8\\x09\\x9d\\x06\\xfb\\x11\\x91\\x51\\xcd\\x8d\"\n\"\\xf7\\x17\\x08\\x4a\\xad\\xaf\\x72\\xc3\\x1b\\xc1\\xb8\\xba\\xc5\\xc0\\x77\\xaa\\x38\\xd7\\x1f\\x37\\xd8\\x7c\\xa1\\x6d\\xe5\\x7f\\x44\\x5c\\x47\\x3a\\x4a\\x08\"\n\"\\x4d\\x58\\x70\\x5f\\x5a\\x1a\\x51\\xba\\x5b\\xc4\\xc3\\xb3\\xa8\\xc8\\xa8\\x1e\\xfb\\x14\\x90\\x47\\x40\\xfb\\x0e\\x1b\\x0e\\xf8\\x55\\xf8\\x94\\x15\\x93\\x21\"\n\"\\x05\\x7d\\x93\\x82\\x99\\x89\\x1e\\x90\\x06\\x9a\\x8d\\x92\\x94\\x9b\\x1a\\xf7\\x14\\x07\\x9e\\x82\\x94\\x78\\x8a\\x1e\\xfb\\xeb\\x06\\x7a\\x8c\\x81\\x82\\x8a\"\n\"\\x7b\\x08\\x7e\\x07\\x80\\x8b\\x8a\\x92\\x82\\x1e\\xf7\\x45\\xfb\\x8c\\xfb\\x47\\xfb\\xd7\\x05\\x86\\x83\\x8b\\x8a\\x82\\x1a\\x7c\\x07\\x7a\\x95\\x83\\x9d\\x1e\"\n\"\\xf7\\xf2\\x06\\x9e\\x94\\x94\\x9e\\x1f\\xf7\\x14\\x07\\x9b\\x84\\x94\\x7c\\x8d\\x1e\\x85\\x06\\x7d\\x89\\x84\\x82\\x8a\\x7c\\x87\\x21\\x18\\xfb\\xb9\\x06\\xf7\"\n\"\\x45\\xf7\\xcd\\x05\\x8f\\x92\\x8c\\x8e\\x8f\\x1a\\x91\\x89\\x8f\\x86\\x92\\x1e\\xfb\\x3d\\xf7\\x85\\x05\\x0e\\xf7\\x23\\xf8\\x2b\\x15\\x73\\x6d\\x7c\\x68\\x87\"\n\"\\x65\\x08\\x2c\\x5e\\xeb\\x06\\x8f\\x64\\x99\\x68\\xa2\\x6e\\x48\\x48\\x18\\xab\\x6b\\xce\\xcf\\xa9\\x73\\xab\\x7e\\xb4\\x85\\x19\\x2c\\xb8\\xea\\x07\\xb4\\x91\"\n\"\\xad\\x99\\xa7\\xa2\\xce\\x47\\x18\\xab\\xab\\x48\\xcf\\xa1\\xa4\\x9a\\xaf\\x90\\xb4\\x19\\xeb\\xb8\\x2b\\x06\\x86\\xb3\\x7c\\xaf\\x75\\xa6\\xce\\xce\\x18\\x6b\"\n\"\\xab\\x48\\x48\\x70\\xa1\\x63\\x9b\\x67\\x8f\\x19\\xea\\x5e\\x2d\\x07\\x67\\x87\\x62\\x79\\x72\\x75\\x47\\xcf\\x18\\x6b\\x6b\\x05\\xf7\\x72\\x5d\\x15\\xdc\\xcc\"\n\"\\x4c\\x3c\\x3a\\x4b\\x4b\\x3b\\x3c\\x4b\\xcb\\xda\\xda\\xcb\\xcc\\xd8\\x1f\\x0e\\xf7\\xcf\\xf8\\x04\\x15\\xf7\\x11\\x06\\xa0\\x96\\x94\\x9c\\x9c\\x81\\x93\\x75\"\n\"\\x1f\\xfb\\xc5\\x06\\x77\\x7f\\x81\\x7c\\x7b\\x97\\x81\\x9f\\x1f\\xf7\\x14\\xfb\\xcb\\x06\\x6a\\x90\\x7e\\x9c\\x7f\\x1e\\x82\\x99\\xa0\\x86\\xa9\\x1b\\xc4\\xb4\"\n\"\\x9c\\xa3\\x98\\x82\\x96\\x7f\\x87\\x89\\x8a\\x8a\\x88\\x1f\\x7f\\x70\\x82\\x89\\x74\\x1b\\x68\\x82\\x93\\xa8\\x1f\\x0e\\xf7\\x54\\xf7\\xc0\\x15\\xcf\\xf7\\x6a\"\n\"\\x07\\x4f\\x1d\\xfb\\x6a\\xf7\\x04\\x06\\x8e\\x1d\\x47\\x53\\x06\\x3b\\x0a\\xc3\\xfb\\x1f\\x06\\x3f\\xca\\x59\\xed\\xba\\xc3\\x96\\x9d\\xbb\\x1e\\xb0\\x99\\x9b\"\n\"\\x98\\x9a\\x1a\\x99\\x80\\x96\\x7d\\x86\\x87\\x8a\\x85\\x82\\x1e\\x75\\x64\\x46\\x7b\\x54\\x1b\\x49\\x62\\xa9\\xbb\\x1f\\xf7\\x1c\\xf7\\x49\\x07\\xa0\\x97\\x45\"\n\"\\x0a\\x0e\\x83\\x1d\\xef\\xf7\\x2b\\x15\\x91\\x93\\x8d\\x91\\x90\\x1a\\x99\\x7f\\x97\\x7d\\x81\\x85\\x87\\x7e\\x82\\x75\\x0a\\x96\\x80\\x9a\\x95\\x90\\x8e\\x99\"\n\"\\x94\\x1e\\x0e\\xf7\\xb3\\x7c\\x15\\x8a\\x90\\x8d\\x8b\\x91\\x1b\\xbb\\xc2\\x96\\x9d\\xbd\\x1f\\xaf\\x99\\x9b\\x98\\x9a\\x1a\\x99\\x80\\x96\\x7d\\x86\\x87\\x8a\"\n\"\\x85\\x82\\x1e\\x75\\x65\\x45\\x7b\\x54\\x1b\\x49\\x62\\xa8\\xbb\\x1f\\xf7\\x94\\xf7\\x6b\\x07\\x54\\x0a\\xfb\\x6b\\xf7\\x04\\x06\\x8e\\x1d\\xfb\\x96\\x06\\x8a\"\n\"\\x53\\xb0\\x5e\\xc9\\x7a\\x08\\x36\\xa5\\x07\\xa6\\x99\\x84\\x7e\\x7d\\x3a\\x0a\\x96\\x76\\x1f\\x90\\x82\\x87\\x8c\\x86\\x47\\x1d\\x84\\xa0\\x1d\\xb2\\x73\\xa3\"\n\"\\x62\\x8e\\x1f\\x0e\\xf7\\xc4\\xf8\\xef\\x15\\xfb\\x17\\x33\\xfb\\x10\\xfb\\x4d\\xfb\\x4a\\xe3\\xfb\\x13\\xf7\\x13\\xf7\\x13\\xe4\\xf7\\x14\\xf7\\x49\\xf7\\x49\"\n\"\\x33\\xf7\\x14\\xfb\\x10\\x1f\\xfb\\x3b\\xfb\\xb0\\x15\\xf7\\x22\\x8f\\xcb\\xe6\\xeb\\x1b\\xe9\\xca\\x31\\xfb\\x23\\x90\\x1f\\x58\\x04\\xfb\\x20\\x88\\x4a\\x2f\"\n\"\\x2c\\x1b\\x2c\\x4b\\xe7\\xf7\\x20\\x87\\x1f\\x0e\\xf8\\x0a\\xf8\\xe0\\x88\\x1d\\x28\\x0a\\xfb\\x96\\xf8\\xc4\\x42\\x1d\\x28\\x0a\\xfb\\x0b\\xf8\\xa1\\x15\\x95\"\n\"\\x94\\x8e\\x90\\x93\\x1a\\x9a\\x80\\x96\\x7d\\xf7\\x0d\\x0a\\x80\\x89\\x87\\xa8\\x0a\\x28\\x0a\\x7b\\xf8\\x67\\x2d\\x0a\\xf8\\xdd\\xfb\\x89\\x60\\x1d\\xfc\\xce\"\n\"\\x06\\x76\\x80\\x82\\x7b\\x79\\x96\\x83\\xa0\\x1f\\xf8\\xce\\x43\\x15\\x74\\x0a\\xfc\\xce\\x06\\x76\\x80\\x82\\x7a\\x7a\\x96\\x83\\xa0\\x1f\\x0e\\x0e\\xc9\\x0a\"\n\"\\x62\\x0a\\x25\\xfb\\x24\\x3c\\x0a\\x91\\x1a\\x99\\x7f\\x96\\x7d\\xf7\\x03\\x1d\\x83\\x1d\\x39\\xfc\\x94\\x87\\x1d\\xf8\\x36\\xf8\\xa1\\x2d\\x0a\\x67\\x0a\\xf8\"\n\"\\xbf\\x16\\xfb\\x71\\xf8\\xc7\\x05\\x3e\\x06\\xfb\\x68\\xfc\\xc7\\x05\\xf8\\x44\\xbe\\x15\\xfb\\xfb\\x06\\xf7\\x42\\xf8\\x61\\x05\\x92\\x06\\x0e\\xf8\\x34\\xbe\"\n\"\\x15\\xec\\xc2\\xc6\\xeb\\xf2\\x1a\\xf7\\x2d\\xfb\\x0a\\xf7\\x09\\xfb\\x2e\\xfb\\x2e\\xfb\\x0a\\xfb\\x09\\xfb\\x2d\\xf7\\x28\\x1d\\x81\\xa0\\x1f\\xf7\\x62\\xbc\"\n\"\\x06\\x53\\xab\\x7b\\x95\\x76\\x9e\\x08\\x50\\xc0\\x6d\\xcb\\xd3\\x1a\\xd3\\xa7\\xc6\\xc3\\xb9\\x1e\\xad\\xb3\\xb4\\x99\\xc3\\x1b\\xc3\\xb4\\x7d\\x69\\xb3\\x1f\"\n\"\\xc3\\x5d\\xa7\\x50\\x43\\x1a\\x47\\x71\\x50\\x57\\x57\\x1e\\x71\\x72\\x7b\\x80\\x4d\\x68\\x08\\x5a\\xf7\\x62\\x07\\xa0\\x98\\x95\\x9b\\x9c\\x80\\x93\\x74\\x1f\"\n\"\\x0e\\xf8\\x3e\\xf8\\x04\\x15\\xfb\\x46\\x07\\x29\\x5b\\x52\\x38\\x64\\x67\\x9d\\xa9\\x72\\x1e\\x7b\\xa1\\x84\\xa9\\xc2\\x1a\\xf7\\x79\\x27\\x07\\x75\\x80\\x38\"\n\"\\x1d\\xbb\\xfc\\x9a\\x06\\x27\\x1d\\xf7\\x4c\\x07\\x67\\xb1\\xad\\x7d\\xbd\\x1b\\xbf\\xb1\\x9b\\xb4\\xb5\\x1f\\x62\\xee\\x07\\x32\\x0a\\x5b\\xf8\\x04\\x27\\x2e\"\n\"\\x0a\\x0e\\xf8\\x71\\xf8\\x1f\\x15\\xa5\\x5f\\x5f\\x97\\x55\\x1b\\xfb\\x20\\x2a\\x2a\\xfb\\x20\\x45\\xa6\\x4b\\xb7\\x67\\x1f\\xaa\\x72\\xb1\\x7d\\xc7\\x84\\xbc\"\n\"\\x85\\xa0\\x87\\x94\\x88\\x08\\x9d\\x84\\x98\\x7c\\x7b\\x1a\\x7a\\x80\\x79\\x79\\x80\\x1e\\x7d\\x82\\x79\\x87\\x6d\\x8a\\x08\\x75\\x80\\x82\\x7b\\x79\\x97\\x83\"\n\"\\xa4\\xda\\xc7\\xbb\\xc9\\xab\\x78\\xab\\x6e\\x9a\\x1f\\x7b\\x93\\x70\\x91\\x51\\x94\\x56\\x92\\x6d\\x94\\x76\\x9b\\x08\\x67\\xa6\\x76\\xbf\\xc5\\x1a\\xf7\\x02\"\n\"\\xd6\\xd4\\xf7\\x06\\xb7\\xb2\\x80\\x76\\xa5\\x1e\\x98\\x81\\x95\\x79\\x95\\x6b\\x08\\x70\\x93\\x90\\x86\\x9c\\x1b\\x9a\\x95\\x95\\x9b\\x8e\\x8b\\x8b\\x89\\x9b\"\n\"\\x1f\\x8f\\x07\\x8a\\x92\\x8a\\x96\\x93\\x1a\\x91\\x8c\\x98\\x8d\\x9d\\x1e\\x8d\\xa6\\x8b\\x8c\\x91\\x1a\\x9d\\x82\\x96\\x7b\\x7f\\x83\\x85\\x7e\\x85\\x1e\\x0e\"\n\"\\x25\\x0a\\xa6\\xf9\\x66\\x15\\x94\\x81\\xad\\x1d\\x86\\x96\\x81\\x1f\\xf7\\x06\\x2a\\x05\\x83\\x94\\x91\\x88\\x92\\x1b\\x9a\\x96\\x96\\x9a\\x92\\x8a\\x8d\\x83\"\n\"\\x93\\x1f\\x86\\x91\\x05\\x0e\\x5e\\x0a\\xf7\\x17\\xf7\\x99\\x15\\x94\\x82\\x86\\x8d\\x83\\x1b\\x7d\\x80\\x80\\x7d\\x82\\x8f\\x85\\x94\\x82\\x1f\\xf7\\x07\\x2a\"\n\"\\x05\\x83\\x94\\x90\\x88\\x92\\xf7\\x3b\\x1d\\x85\\x91\\x05\\x0e\\xf7\\xbe\\xc3\\x15\\xfb\\x47\\xf8\\x5c\\x05\\xcf\\x44\\x1d\\xfb\\x2b\\x22\\x1d\\xa7\\x06\\xf7\"\n\"\\x5c\\xfc\\x94\\x05\\xca\\x06\\xf7\\x48\\xf8\\x33\\x9c\\xb9\\x8d\\x8e\\x95\\x95\\x19\\x94\\x93\\x95\\x8f\\x96\\x1b\\x93\\x91\\x89\\x83\\x99\\x1f\\x7f\\xa2\\x97\"\n\"\\x86\\x98\\x1b\\xa1\\x9f\\xa1\\xa3\\xad\\x6a\\xa3\\x5b\\x69\\x70\\x81\\x75\\x72\\x1f\\x74\\x76\\x87\\x85\\x73\\x52\\x08\\x0e\\x82\\x1d\\xf7\\x3e\\xf9\\x06\\x15\"\n\"\\x94\\x82\\xad\\x1d\\x85\\x96\\x82\\x1f\\xf7\\x06\\x2a\\x05\\x82\\x94\\x90\\x89\\x92\\x1b\\x9a\\x96\\x96\\x9a\\x92\\x8a\\x8d\\x84\\x64\\x1d\\xf7\\x3f\\xf7\\x9e\"\n\"\\x15\\xf7\\x25\\xbe\\xfb\\x25\\xf7\\x57\\xf7\\xc3\\x30\\x06\\x27\\x1d\\xf7\\x22\\xfc\\x5c\\x07\\x20\\x1d\\xbc\\xfb\\x57\\x48\\x58\\xce\\xfb\\x6b\\x5a\\x20\\x0a\"\n\"\\xf7\\x7e\\x21\\x0a\\xfb\\x19\\x06\\x0e\\xf7\\x57\\xf7\\x87\\x15\\xfb\\x54\\xd3\\x0a\\xf7\\x54\\xe6\\x06\\xa0\\x96\\x94\\x9b\\x9b\\x7f\\x94\\x77\\x1f\\x30\\xd6\"\n\"\\xf7\\x7e\\xfb\\x2c\\x06\\x76\\x94\\x80\\x9c\\x9c\\x94\\x96\\xa0\\xf7\\x26\\x1d\\x40\\x53\\x06\\x66\\x1d\\x0e\\xf8\\xaf\\xbe\\x15\\x53\\xf7\\x1b\\x71\\xc7\\x6c\"\n\"\\xb7\\x6f\\x9b\\x19\\x97\\x99\\xa6\\xba\\xa3\\xbf\\xae\\xd4\\x98\\x9d\\xa0\\x8e\\x08\\x5d\\x07\\x76\\x95\\x7f\\x9b\\x9c\\xf7\\x0b\\x1d\\xf7\\x4d\\xa5\\x2f\\x1d\"\n\"\\x24\\x3b\\x1d\\xa4\\xfb\\x4d\\x86\\x06\\x74\\x8c\\x7f\\x9c\\x5c\\xeb\\x08\\xf6\\x57\\x7a\\x9a\\x4b\\x1b\\x70\\x84\\x83\\x6c\\x1f\\x55\\x07\\x73\\x94\\x7f\\x9c\"\n\"\\x9b\\x95\\x97\\xa0\\x1e\\xb9\\x07\\xa0\\x88\\x95\\x7d\\xb1\\x3e\\xa4\\x55\\xa4\\x60\\x98\\x7c\\x6f\\x7a\\x6c\\x60\\x71\\x4e\\x53\\xfb\\x1b\\x18\\x70\\x2a\\x0a\"\n\"\\xab\\x06\\xa8\\x8c\\x8d\\x8c\\x96\\xa5\\xc4\\xf7\\x1d\\x18\\xab\\xd4\\xaf\\xb4\\xa9\\x88\\x08\\x94\\xfb\\x75\\x72\\x3b\\x1d\\xf2\\x2f\\x1d\\x71\\xf7\\x75\\x94\"\n\"\\x06\\xaa\\x8e\\xaf\\x62\\xab\\x42\\xc4\\xfb\\x1d\\x18\\x96\\x70\\x8c\\x8b\\xa9\\x8a\\x08\\xa1\\x5e\\x1d\\x8a\\xad\\x87\\x8f\\x69\\x8c\\x08\\x0e\\xf8\\xa4\\xbe\"\n\"\\x15\\x57\\xe5\\x72\\xb6\\x6e\\xad\\x73\\x99\\x19\\x93\\x92\\xa2\\xa9\\x98\\xa0\\xb4\\xcc\\x96\\x96\\xa5\\x8d\\x08\\x73\\x07\\x76\\x95\\xf7\\x32\\x1d\\x6c\\x52\"\n\"\\x79\\x7e\\x40\\x5a\\x1e\\x5d\\x46\\x80\\x80\\x74\\x8a\\x08\\x87\\xf7\\x0a\\xa1\\x24\\x1d\\x2a\\x3b\\x1d\\xa2\\xfb\\x0a\\x87\\x06\\x73\\x8d\\x7c\\x99\\x6b\\xbf\"\n\"\\x08\\xe1\\x55\\x77\\x9a\\x4e\\x1b\\x6e\\x84\\x83\\x6c\\x1f\\x6a\\x07\\x74\\x94\\x7f\\x9c\\x9c\\x94\\x96\\xa0\\x1e\\xa3\\x07\\xa3\\x89\\x94\\x82\\xaf\\x56\\xa1\"\n\"\\x67\\x9d\\x74\\x99\\x7e\\x70\\x79\\x6e\\x6b\\x74\\x62\\x58\\x31\\x18\\x72\\x06\\x35\\x1d\\xa7\\x06\\xa6\\x8c\\x8c\\x8b\\x99\\xa3\\xbf\\xe8\\x18\\xac\\xc2\\xac\"\n\"\\xa7\\xa9\\x89\\x08\\x93\\xfb\\x28\\x74\\x06\\x35\\x1d\\xec\\x24\\x1d\\x75\\xf7\\x28\\x93\\x06\\xa8\\x8d\\xad\\x6f\\xab\\x54\\xc0\\x2e\\x18\\x93\\x7d\\x90\\x84\"\n\"\\x8f\\x8a\\x08\\x89\\x8d\\x97\\x8a\\x98\\x1b\\x9d\\x06\\x8c\\x49\\x05\\x74\\x24\\x0a\\xa4\\x1e\\xd5\\x07\\xab\\x84\\x90\\x65\\x8f\\x1e\\x0e\\xf7\\xd3\\x7c\\x15\"\n\"\\xc2\\x8d\\xb9\\x95\\xa8\\x9b\\x08\\xc2\\xaa\\xab\\xbf\\xc6\\x1a\\xd0\\x64\\xb9\\x3d\\xa2\\x1e\\xcb\\xa5\\xab\\xb7\\xc7\\x1a\\xe5\\x3a\\xc9\\xfb\\x08\\x4b\\x5a\"\n\"\\x7a\\x64\\x5b\\x1e\\x86\\x85\\x88\\x8a\\x89\\x1b\\x86\\x87\\x93\\x9b\\x88\\x1f\\xa1\\x87\\x83\\x95\\x7c\\x1b\\x7d\\x82\\x82\\x7c\\x82\\x8b\\x81\\x8c\\x7d\\x1f\"\n\"\\x8c\\x85\\x8b\\x87\\x82\\x1a\\x8c\\x68\\x05\\x87\\x07\\x84\\x07\\x8a\\x7b\\x05\\x8a\\x89\\x8b\\x8a\\x8a\\x1a\\x8a\\x8b\\x89\\x8a\\x87\\x1e\\x8a\\x80\\x89\\x78\"\n\"\\x84\\x1a\\x7c\\x94\\x82\\x9a\\x98\\x93\\x93\\x9c\\x8f\\x1e\\xe8\\xa0\\xc6\\xba\\xeb\\x1b\\xe8\\xc7\\x63\\x4c\\x73\\x83\\x76\\x7c\\x7b\\x1f\\x6f\\x71\\x43\\x78\"\n\"\\x38\\x1b\\x70\\x33\\x1d\\xa6\\x06\\xe6\\xb9\\x85\\x7b\\xaa\\x1f\\xaf\\x78\\xa0\\x6c\\x67\\x1a\\x6a\\x7b\\x6c\\x70\\x76\\x1e\\x74\\x6c\\x60\\x80\\x4b\\x1b\\x42\"\n\"\\x57\\x9b\\xb6\\x42\\x1f\\x90\\x83\\x85\\x8d\\x84\\x1b\\x7f\\x7d\\x7e\\x7e\\x65\\xf7\\x08\\x5b\\xef\\x87\\x1f\\x4b\\xa5\\x07\\xa6\\x99\\x84\\x7e\\x7e\\x3a\\x0a\"\n\"\\x95\\x76\\x6d\\x0a\\xab\\x83\\xa0\\x73\\x1d\\xf7\\xda\\x7c\\x15\\xf7\\x1b\\x8e\\xd6\\xba\\xdd\\x1a\\xbc\\x67\\xb6\\x59\\x96\\x1e\\x81\\x8e\\x05\\xc0\\xa1\\xa1\"\n\"\\xa7\\xb7\\x1a\\xd1\\x3f\\xb9\\xfb\\x0a\\x40\\x51\\x78\\x66\\x62\\x1e\\x9c\\x07\\xa4\\x81\\x99\\x7a\\x7b\\x82\\x7d\\x72\\x1e\\x23\\x07\\x7a\\x93\\x81\\x9a\\x99\"\n\"\\x92\\x94\\xa0\\x91\\xce\\x0a\\x71\\x7d\\x81\\x7a\\x7b\\x99\\xc3\\x0a\\x77\\xa8\\x79\\xc2\\x7d\\x1f\\xba\\x7e\\xaf\\x85\\xb5\\x89\\x08\\x4a\\xa5\\x07\\xa6\\x99\"\n\"\\x84\\x7e\\x7e\\x3a\\x0a\\x95\\x76\\x6d\\x0a\\xab\\x83\\xa0\\x73\\x1d\\xf8\\x80\\xbe\\x15\\x45\\xf7\\x1b\\x69\\xcb\\x66\\xb6\\x6a\\x99\\x19\\xa8\\xaa\\x92\\x96\"\n\"\\xb5\\xd0\\xbe\\xe0\\x94\\x93\\xb6\\x8d\\x08\\x60\\x07\\x77\\x0a\\xac\\x84\\x92\\x67\\x41\\x75\\x7a\\x23\\x4d\\x1e\\x4c\\x23\\x80\\x81\\x51\\x89\\x08\\x72\\xf7\"\n\"\\x4d\\xba\\x2f\\x1d\\xfb\\x25\\x4c\\x1d\\xb9\\xfc\\x61\\x5d\\x2a\\x0a\\xf7\\x25\\x06\\xa4\\x99\\x94\\x9c\\x9b\\x7d\\x94\\x72\\x1f\\x5c\\xf7\\x75\\xa4\\x06\\xdc\"\n\"\\x89\\xa6\\x77\\xbc\\x31\\xf7\\x47\\x1d\\xbd\\x29\\x06\\x73\\xf7\\x06\\x0a\\x8a\\xad\\x87\\x8f\\x68\\x8c\\x08\\x0e\\xf8\\x74\\xbe\\x15\\x4a\\xe6\\x5c\\xcc\\x7f\"\n\"\\x95\\x65\\x98\\x19\\xa0\\x9c\\x9c\\x9d\\xa9\\xaf\\xbf\\xc9\\x91\\x8e\\xb5\\x8d\\x08\\x5e\\x07\\xbb\\x1d\\xb9\\x4c\\x06\\x73\\x95\\xf7\\x41\\x1d\\xab\\x86\\x90\"\n\"\\x6d\\x8d\\x08\\x0e\\xf7\\x92\\xf7\\xa5\\x15\\xc1\\x83\\xa4\\x75\\xb5\\x3c\\x8f\\x1d\\x93\\x96\\xb4\\xf5\\x0a\\x60\\x07\\x77\\x0a\\xaa\\x83\\x93\\x6b\\x3d\\x79\"\n\"\\x7d\\x21\\x4a\\x1e\\x58\\x36\\x79\\x76\\x70\\x86\\x08\\xf7\\x0b\\x07\\xa0\\x82\\x84\\x0a\\xfb\\x10\\x81\\xf7\\x4d\\xba\\x07\\xa5\\x7f\\x0a\\x71\\x1f\\xfb\\x25\"\n\"\\x4c\\x1d\\xb9\\xfc\\x61\\x5d\\x2a\\x0a\\xf7\\x25\\x06\\x52\\x1d\\x5c\\xf7\\x75\\x95\\xfb\\x12\\xf7\\x04\\x0a\\xf7\\x97\\xf7\\x58\\x15\\xbb\\x84\\xa3\\x7b\\xaf\"\n\"\\x57\\xcf\\x28\\x18\\x96\\x7a\\x91\\x87\\xa4\\x8a\\x08\\xc4\\x24\\x1d\\x55\\x06\\x4a\\xe6\\x5c\\xcc\\x7f\\x95\\x65\\x98\\x19\\x9e\\x9a\\xa1\\xa2\\xa6\\xac\\xbe\"\n\"\\xc8\\x92\\x90\\xb5\\x8c\\x08\\x5e\\x07\\x39\\x1d\\x97\\xa1\\x1e\\xc1\\x07\\xab\\x83\\x92\\x65\\x47\\x7a\\x80\\x2b\\x3a\\x1e\\x6c\\x66\\x79\\x7c\\x79\\x86\\x08\"\n\"\\xcb\\x07\\xa0\\x82\\x96\\x7b\\x7a\\x82\\x7f\\x77\\x1e\\x46\\x7b\\xf7\\x0a\\xb6\\x07\\xa5\\x99\\x94\\x9c\\x9b\\x7e\\x94\\x70\\x1f\\xfb\\x1e\\x33\\x1d\\xb6\\xfb\"\n\"\\xd1\\x60\\x33\\x1d\\xf7\\x1e\\x06\\x52\\x1d\\x60\\xf7\\x28\\x9b\\x3c\\xf7\\x04\\x0a\\xf7\\x53\\xf8\\x94\\x15\\xbb\\x29\\x1d\\xfb\\x7e\\xfb\\x5f\\x06\\x27\\x1d\"\n\"\\xf7\\x2c\\xdd\\xfc\\x61\\x5e\\x37\\x0a\\xf7\\x24\\x36\\x0a\\x5c\\xf7\\x75\\xa4\\x06\\xdc\\x89\\xa6\\x77\\xbc\\x31\\x8f\\x1d\\x92\\x96\\xb5\\xf5\\x0a\\x60\\x07\"\n\"\\x77\\x0a\\xaa\\x83\\x93\\x6b\\x3d\\x78\\x7c\\x22\\x4b\\x1e\\x4c\\x22\\x80\\x82\\x51\\x89\\x08\\x72\\x06\\x0e\\xd0\\xf8\\x04\\x15\\xd9\\xfb\\xd1\\x60\\x2a\\x0a\"\n\"\\xf7\\x1e\\x24\\x1d\\x60\\xf7\\x28\\xa3\\x06\\xda\\x8a\\xa8\\x7c\\xb7\\x4d\\xcf\\x28\\x18\\x95\\x7a\\x92\\x87\\xa4\\x8a\\x08\\xc4\\x24\\x1d\\x55\\x06\\x4a\\xe6\"\n\"\\x5b\\xcc\\x80\\x95\\x65\\x98\\x19\\x9e\\x9b\\x9f\\xa0\\xa8\\xad\\xbf\\xc9\\x91\\x8f\\xb5\\x8c\\x08\\x5e\\x07\\x39\\x1d\\x97\\xa1\\x1e\\xc1\\x07\\xab\\x83\\x92\"\n\"\\x65\\x49\\x77\\x7f\\x3c\\x48\\x1e\\x50\\x44\\x82\\x86\\x53\\x89\\x08\\x73\\xf7\\x0a\\xbc\\x06\\x9f\\x98\\x95\\x9a\\x9c\\x46\\x0a\\xfb\\x7b\\xfb\\x22\\x06\\x27\"\n\"\\x1d\\x0e\\xf8\\x77\\xbe\\x15\\xf8\\x61\\x9f\\x07\\xa0\\x97\\x94\\x9c\\x9c\\x80\\x93\\x75\\x89\\x1d\\xf7\\x96\\xfb\\x6b\\x5b\\x29\\x0a\\xf7\\x11\\x27\\x06\\x74\"\n\"\\xf7\\x06\\x0a\\xab\\x84\\x92\\x6e\\x8c\\x1e\\x0e\\xf8\\x71\\xbe\\x15\\xf7\\xd1\\xa4\\x07\\x32\\x0a\\x25\\xc5\\x1d\\xf7\\x8e\\xfb\\x23\\x63\\x06\\x76\\x7f\\x59\"\n\"\\x0a\\xf7\\x08\\x8a\\x05\\x4b\\x07\\x74\\x24\\x0a\\xa3\\x1e\\xd5\\x07\\xa0\\x87\\x95\\x82\\x8f\\x1e\\x90\\x82\\x87\\x8c\\x80\\x1b\\x0e\\xf7\\xdc\\x7b\\x15\\xbe\"\n\"\\x8c\\xbe\\x9c\\xb5\\xa9\\x08\\xb2\\xa7\\xa8\\xac\\x9b\\x1a\\x99\\x81\\x95\\x7c\\x82\\x86\\x88\\x83\\x83\\x1e\\x4d\\x55\\x5b\\x72\\x47\\x1b\\xfb\\x07\\x29\\xed\"\n\"\\xf7\\x08\\x1f\\xd0\\x07\\xf7\\x06\\xe2\\xe7\\xf7\\x01\\xe1\\xd7\\x5a\\x51\\x90\\x1e\\xf1\\x1d\\x48\\x4e\\x71\\x5b\\x5d\\x1f\\x5f\\x5c\\x6e\\x46\\x4e\\x1a\\x3a\"\n\"\\x07\\xfb\\x0b\\xef\\xfb\\x07\\xf7\\x0d\\x76\\x1e\\x47\\xa5\\x07\\xa6\\x99\\x84\\x7e\\x7d\\x3a\\x0a\\x96\\x76\\x1f\\x90\\x82\\x87\\x8c\\x86\\x47\\x1d\\x84\\xa0\"\n\"\\x1d\\xb2\\x73\\xa2\\x62\\x8f\\x1f\\x0e\\xf7\\xe2\\x7c\\x15\\xba\\x8f\\xb7\\x97\\xb0\\x9d\\x08\\xbb\\xa3\\xaa\\xa8\\x9e\\xda\\x0a\\x58\\x4f\\x74\\x43\\x1b\\x21\"\n\"\\x40\\xd1\\xf0\\xf4\\xd4\\xd2\\xf6\\xdd\\xce\\x65\\x59\\x91\\x1f\\x77\\x8d\\x93\\x83\\x9a\\x1b\\x9c\\x94\\x96\\x9f\\x1f\\xe5\\x07\\xa0\\x82\\xa9\\x1d\\x89\\x07\"\n\"\\xdb\\x0a\\xfb\\x0c\\xe0\\x31\\xf7\\x0d\\x81\\x1f\\x4b\\xa5\\x07\\xa6\\x99\\x84\\x7e\\x7e\\x3a\\x0a\\x95\\x76\\xee\\x1d\\xa0\\xa9\\x83\\xa1\\x73\\x1d\\x31\\x0a\"\n\"\\x0e\\xf7\\xa8\\x90\\x15\\xfb\\x1c\\x64\\x07\\xf7\\x12\\x1d\\xf7\\x19\\x06\\xf7\\x4c\\xf8\\x02\\xc7\\x0a\\xfb\\xc7\\xfb\\x2f\\xf7\\xc7\\x8b\\x1d\\x0e\\xf7\\xdc\"\n\"\\xf7\\x6d\\x15\\xb0\\x07\\xf7\\x42\\xf7\\x96\\xc8\\x0a\\xfb\\x63\\xfb\\x22\\xf7\\x63\\xf6\\x1d\\xfb\\x96\\x05\\x66\\x29\\x07\\x66\\x1d\\xed\\xfb\\x08\\x27\\x20\"\n\"\\x0a\\xf7\\x90\\x23\\x1d\\x27\\xf7\\x08\\xe7\\x06\\x9e\\x1d\\x0e\\xf7\\xa8\\x78\\x15\\x31\\x06\\x66\\x1d\\xe5\\x4d\\x64\\x06\\xf7\\x12\\x1d\\xc9\\xe9\\x06\\x9e\"\n\"\\x1d\\x2d\\xa1\\x06\\xf7\\x4c\\xf8\\x01\\xc7\\x0a\\xfb\\xc6\\xfb\\x2f\\xf7\\xc6\\x8b\\x1d\\xf7\\x4d\\xfb\\xff\\x05\\x0e\\xf8\\x9b\\xbe\\x15\\xfb\\x4f\\xf7\\x81\"\n\"\\xf7\\x43\\xf7\\x74\\x05\\x97\\x06\\xa1\\x96\\x41\\x1d\\xfb\\x03\\x06\\xba\\x0a\\xae\\x06\\xfb\\x23\\xfb\\x4b\\xfb\\x24\\xf7\\x4b\\x05\\xab\\x06\\xa0\\x97\\x41\"\n\"\\x1d\\xfb\\x02\\x20\\x0a\\x98\\x06\\xf7\\x43\\xfb\\x74\\xfb\\x4c\\xfb\\x81\\x05\\x7d\\x29\\x0a\\xf7\\x16\\x06\\xa0\\x97\\x45\\x0a\\x56\\x06\\xf7\\x2d\\xf7\\x58\"\n\"\\xf7\\x2e\\xfb\\x58\\x05\\x59\\x2e\\x1d\\xf7\\x08\\x28\\x06\\x74\\x24\\x0a\\xa3\\x1e\\xf7\\x02\\x07\\xa9\\x84\\x93\\x6d\\x8c\\x1e\\x0e\\xf8\\x97\\xbf\\x15\\xfb\"\n\"\\x45\\xf7\\x3b\\xf7\\x32\\xf7\\x29\\x05\\x8f\\x9f\\x1d\\x75\\x81\\x51\\x0a\\xae\\x06\\xfb\\x10\\xfb\\x06\\xfb\\x0c\\xf7\\x06\\x05\\xab\\x06\\xa1\\x96\\x94\\x9c\"\n\"\\x9c\\x81\\x93\\x74\\x1f\\xfb\\x02\\x55\\x0a\\x97\\x82\\xa0\\xf7\\x35\\x1d\\x84\\x29\\x0a\\xf7\\x18\\x21\\x0a\\x55\\x06\\xf7\\x23\\xf7\\x19\\xf7\\x22\\xfb\\x19\"\n\"\\x05\\x57\\x35\\x0a\\xf7\\x08\\x4d\\x06\\xe4\\x0a\\x0e\\xf8\\x6c\\xbe\\x15\\xf8\\x61\\xb1\\x07\\xa5\\x99\\x94\\x9c\\x9b\\x99\\x0a\\xfb\\x5f\\xfb\\x02\\x07\\x72\"\n\"\\x7d\\x82\\x0a\\xf7\\x50\\x5e\\x1d\\x8c\\xa8\\x83\\x94\\x6d\\x8c\\x08\\x0e\\xf8\\x6d\\xbe\\x15\\xf7\\xd1\\xaf\\x07\\xc0\\x1d\\xfb\\x18\\x24\\x07\\x70\\x0a\\xf7\"\n\"\\x48\\x5e\\x1d\\xa9\\x84\\x93\\x70\\x8c\\x1e\\x88\\x06\\x0e\\xf7\\xc1\\xf7\\x55\\x15\\xaf\\x94\\xa4\\x96\\xaa\\xa1\\xa6\\x9e\\x18\\xfb\\x5f\\xfb\\x02\\x37\\x0a\"\n\"\\xf7\\x5c\\x24\\x1d\\x65\\xf8\\x61\\xb1\\x06\\xa5\\x99\\x94\\x9b\\x9c\\xe8\\x1d\\x5d\\x66\\x72\\x7c\\x5b\\x78\\x08\\xf7\\x1a\\x07\\xa0\\x82\\x84\\x0a\\xfb\\x24\"\n\"\\x07\\x3c\\x76\\xa2\\xea\\x89\\x1f\\xf7\\x31\\xbc\\x79\\x1d\\xfb\\x1f\\x2a\\x0a\\xb1\\xfb\\x36\\x06\\x8d\\xfb\\x0d\\xaf\\x64\\xf7\\x08\\x86\\x08\\x2b\\x07\\xf7\"\n\"\\x08\\x0a\\xf7\\x96\\xf7\\x4b\\x15\\x74\\x8c\\x53\\x8d\\x79\\x9e\\x8a\\xc5\\x19\\xf4\\xb9\\x07\\x7b\\x1d\\xfb\\x19\\x33\\x1d\\xae\\x22\\x06\\x8c\\x33\\xac\\x6a\"\n\"\\xe8\\x82\\xa2\\x8a\\x18\\x5f\\x07\\x7c\\x0a\\xbd\\x07\\xbb\\x96\\xa6\\x96\\xb0\\xa2\\x08\\xfb\\x18\\x24\\x37\\x0a\\xf7\\x53\\x24\\x1d\\x67\\xf7\\xd1\\xaf\\x06\"\n\"\\xbd\\x0a\\x7e\\x82\\x0a\\xb0\\xfb\\x12\\x06\\x61\\x71\\x6b\\x7c\\x65\\x81\\x08\\xca\\x07\\x9f\\x82\\x96\\x7a\\x7b\\x82\\x80\\x77\\x1e\\x0e\\xf7\\x29\\xf8\\x94\"\n\"\\x15\\xf7\\x02\\x36\\x0a\\xfb\\x5c\\x4b\\x1d\\xb1\\xfc\\x61\\x65\\x4b\\x1d\\xf7\\x18\\x2f\\x1d\\x61\\xf7\\x56\\x06\\xc5\\xd4\\xbe\\xa2\\xc7\\x1b\\xcb\\xa3\\x6b\"\n\"\\x34\\x1f\\xfb\\x30\\x5a\\x07\\x72\\x7d\\x82\\x0a\\xf7\\x1f\\x2f\\x1d\\x65\\xf7\\x35\\x06\\xd0\\x7d\\xb5\\x6e\\xa2\\x1e\\x9f\\x72\\x66\\x96\\x61\\x1b\\x56\\x56\"\n\"\\x7a\\x6b\\x5f\\x1f\\x70\\x77\\x05\\x0e\\xf7\\x41\\xf8\\xef\\x15\\x27\\x36\\x1d\\xbb\\xfc\\x89\\x64\\x2e\\x1d\\xf7\\x17\\x22\\x0a\\x63\\xf7\\x87\\x06\\xd4\\xcd\"\n\"\\xa3\\x9a\\xc3\\x1b\\xce\\xb8\\x65\\x53\\x1f\\xfb\\x81\\x63\\x07\\x76\\x7f\\x82\\x7a\\x7b\\xde\\x0a\\xdc\\x47\\xc8\\x31\\x50\\x5b\\x76\\x5e\\x5e\\x1e\\x0e\\x23\"\n\"\\x0a\\x0e\\xf8\\x6c\\xbe\\x15\\xf8\\x61\\xb2\\xf7\\x0c\\x0a\\xfb\\x19\\x4c\\x1d\\xb5\\xfb\\x56\\x06\\x51\\x41\\x57\\x74\\x51\\xd7\\x1d\\xb4\\x1b\\xc0\\xc1\\x9d\"\n\"\\xaa\\xb7\\x1f\\xa6\\x9e\\x05\\xfb\\x5f\\xfb\\x05\\x07\\x6d\\x8a\\x83\\x82\\x8c\\x6e\\x08\\xfb\\x02\\x07\\x73\\x24\\x0a\\xa2\\x1e\\xee\\xf7\\x51\\x79\\x1d\\x0e\"\n\"\\xf8\\x6d\\xbe\\x15\\xf7\\xd1\\xaf\\x07\\xbd\\x0a\\x7e\\x82\\x7b\\x7a\\x99\\x82\\xa4\\xd1\\x1d\\xb3\\x1b\\xc7\\xc5\\x9c\\xac\\xbe\\x1f\\xfb\\x18\\x21\\x07\\x88\"\n\"\\x06\\x70\\x8a\\x84\\x83\\x6d\\x1a\\xfb\\x02\\x07\\x73\\x24\\x0a\\xa2\\x1e\\xee\\xf7\\x48\\x07\\xa5\\x7f\\x0a\\x71\\x1f\\x0e\\xb7\\xf7\\xbd\\x15\\x93\\x24\\x91\"\n\"\\x6c\\xa4\\x60\\x08\\x35\\xbc\\xdb\\x59\\xe3\\x1b\\xf7\\x22\\xf7\\x2d\\x1d\\x39\\x59\\x6e\\x27\\x32\\x1f\\xc4\\x7f\\x05\\xd4\\xd2\\xa9\\x9c\\xc6\\x1b\\xc1\\xc2\"\n\"\\x70\\x5e\\xae\\x1f\\xae\\x5f\\xa2\\x50\\x5d\\x1a\\x85\\x07\\x8a\\x59\\x15\\x7f\\x45\\x7f\\x6c\\x6a\\x64\\x08\\x5d\\x64\\x58\\x71\\x56\\x1b\\x55\\x58\\xa5\\xb9\"\n\"\\x64\\x1f\\x6a\\xb2\\x7f\\xaa\\x80\\xd1\\x08\\x0e\\x28\\x1d\\xfb\\x18\\xf7\\x91\\xb3\\x0a\\x48\\x1d\\xfb\\x82\\xf8\\x37\\x42\\x1d\\xf7\\xc4\\xf8\\xd3\\x15\\xfb\"\n\"\\x26\\xfb\\x04\\xfb\\x14\\xfb\\x3c\\xf7\\x07\\x1d\\xf7\\x59\\xfb\\xdc\\x15\\x85\\x60\\x84\\x75\\x7c\\x6d\\x08\\x42\\x66\\x4a\\x5f\\x44\\x1b\\x4b\\x4d\\xb1\\xca\"\n\"\\x65\\x1f\\x77\\xad\\x82\\xa7\\x84\\xbc\\x08\\x89\\xbd\\x15\\x91\\xbf\\x92\\xa4\\x9c\\xad\\x08\\xd3\\xb0\\xcc\\xb7\\xd1\\x1b\\xcc\\xc8\\x66\\x4b\\xb1\\x1f\\xa2\"\n\"\\x65\\x94\\x6d\\x91\\x51\\x08\\x0e\\xbc\\x1d\\x25\\x0a\\x78\\xf9\\x5e\\x5d\\x1d\\xe1\\x64\\x0a\\x2c\\x1d\\xfb\\xc6\\xf8\\x08\\x15\\x7c\\x80\\x80\\x7b\\x4c\\xcc\"\n\"\\x5b\\xe1\\xe0\\x64\\x0a\\xf8\\xdd\\xf9\\x46\\x15\\x4f\\x1d\\xfc\\xce\\x20\\x0a\\x0e\\xf8\\x2d\\xe3\\x15\\x94\\x63\\x8f\\x7e\\x92\\x7f\\x08\\x78\\x97\\x9b\\x80\"\n\"\\x9c\\x1b\\xc8\\xb4\\xe6\\xf7\\x1c\\xf7\\x18\\x60\\xe6\\x4e\\x44\\x67\\x32\\xfb\\x40\\x1f\\xfb\\xee\\x07\\x7b\\x93\\x81\\x99\\x99\\x93\\x95\\x9c\\x1e\\xf8\\x03\"\n\"\\x04\\xa1\\x07\\xed\\xa7\\xd7\\xaf\\xb0\\xa5\\x42\\x22\\xfb\\x0d\\x75\\x4b\\x61\\x68\\x75\\xb8\\xd7\\x87\\x1e\\xfb\\xe5\\x81\\x15\\x8a\\x5d\\x7d\\x66\\x76\\x81\"\n\"\\x08\\x81\\x86\\x85\\x82\\x80\\x1a\\x89\\x07\\x7c\\x8c\\x95\\x83\\x9c\\x1b\\xf1\\x8c\\x05\\xf4\\xc4\\xec\\xf7\\x46\\xf7\\x1d\\x66\\xe8\\x48\\xac\\x1f\\x75\\x96\"\n\"\\x75\\x8f\\x65\\x8a\\x08\\x84\\x88\\x8d\\x8f\\x95\\x93\\xa3\\x90\\x93\\x1f\\x8e\\x90\\x8c\\x8d\\x8f\\x1a\\x90\\x88\\x90\\x87\\x8e\\x1e\\x89\\x8c\\x05\\x8d\\x88\"\n\"\\x87\\x8c\\x87\\x1b\\x79\\x76\\x69\\x6c\\x8a\\x1f\\x82\\x8a\\x8a\\x89\\x84\\x1b\\x7a\\x06\\x7a\\x81\\x82\\x7e\\x7d\\x95\\x83\\x9c\\x1f\\x9c\\x06\\x91\\x8d\\x88\"\n\"\\x86\\x1f\\xb7\\x16\\x92\\x8c\\x8c\\x9b\\xee\\xaf\\x4b\\xfb\\x43\\xfb\\x09\\x76\\x46\\x60\\x72\\x1e\\x80\\x79\\x68\\x86\\x5a\\x1b\\x7e\\x86\\x8d\\x8f\\x8c\\x8b\"\n\"\\x8c\\x8c\\x8c\\x1f\\xa0\\xa8\\x94\\xaa\\x8c\\xba\\x08\\x0e\\xf8\\x34\\xbd\\x15\\xec\\xc2\\xc6\\xeb\\xf2\\x1a\\xf7\\x2e\\xfb\\x0a\\xf7\\x09\\xfb\\x2e\\xfb\\x2f\"\n\"\\xfb\\x09\\xfb\\x09\\xfb\\x2e\\xf7\\x28\\x1d\\x82\\xa0\\x1f\\xf7\\x62\\xbb\\x06\\x54\\xaa\\x7b\\x96\\x75\\x9f\\x08\\x51\\xbf\\x6d\\xcc\\xd3\\x1a\\xd3\\xa7\\xc6\"\n\"\\xc2\\xb9\\x1e\\xad\\xb4\\xb3\\x99\\xc3\\x1b\\xc3\\xb3\\x7d\\x69\\xb4\\x1f\\xc2\\x5d\\xa7\\x50\\x43\\x1a\\x47\\x71\\x4f\\x57\\x57\\x1e\\x72\\x72\\x7a\\x7f\\x4e\"\n\"\\x69\\x08\\x5b\\xf7\\x62\\x07\\xa0\\x98\\x94\\x9b\\x9c\\x80\\x93\\x74\\x1f\\x0e\\xb2\\x0a\\x67\\x0a\\xe6\\x16\\xbe\\x06\\xf7\\x34\\xf8\\x1a\\xf7\\x35\\xfc\\x1a\"\n\"\\x05\\xbe\\x06\\xfb\\x42\\xf8\\x47\\x05\\x40\\x06\\x0e\\xe6\\xf8\\x46\\x15\\xf7\\x42\\xfc\\x46\\x05\\xd6\\x06\\xf7\\x42\\xf8\\x47\\x05\\x58\\x06\\xfb\\x35\\xfc\"\n\"\\x19\\xfb\\x34\\xf8\\x19\\x05\\x58\\x06\\x0e\\xf7\\xbd\\xf8\\x89\\x15\\xfb\\x1b\\xfb\\x05\\xfb\\x04\\xfb\\x1b\\xfb\\x22\\xf7\\x02\\xfb\\x04\\xf7\\x20\\xf7\\x1c\"\n\"\\xf7\\x03\\xf7\\x04\\xf7\\x1f\\xf7\\x1f\\xfb\\x03\\xf7\\x03\\xfb\\x1e\\x1f\\x70\\xfb\\xad\\x15\\xfb\\x36\\x07\\x35\\x94\\x3e\\xd6\\x87\\xd9\\x08\\xc2\\x04\\x91\"\n\"\\xde\\xd5\\xd5\\xe2\\x96\\x08\\xfb\\x3c\\x07\\xc2\\x54\\x15\\xf7\\x3b\\x06\\x88\\x42\\x3b\\x3d\\x37\\x80\\x08\\xf7\\x6d\\x04\\xf7\\x3c\\x07\\xdf\\x82\\xd7\\x3f\"\n\"\\x92\\x38\\x08\\x0e\\x9c\\x16\\xf8\\xcb\\xf8\\xcb\\xfc\\xcb\\x06\\xf8\\x92\\xfc\\x92\\x15\\xfc\\x59\\xf8\\x59\\xf8\\x59\\x06\\x0e\\xca\\xf7\\xe7\\x15\\xfb\\x2b\"\n\"\\x90\\x68\\xa6\\x5f\\x1e\\x47\\xb5\\xd8\\x62\\xe1\\x1b\\xbf\\xbb\\x9a\\xa6\\xb4\\x1f\\xbe\\xae\\xa8\\xb9\\x95\\xca\\x08\\x90\\xac\\x8c\\xa1\\xed\\x1a\\xf7\\x51\"\n\"\\x07\\x9f\\x80\\x99\\x7b\\x7b\\x82\\x7f\\x75\\x1e\\xfb\\x54\\x07\\xfb\\x10\\x86\\x62\\x78\\x6a\\x1e\\x57\\x6d\\x4a\\x68\\x49\\x1b\\x63\\x62\\x98\\xa2\\x6a\\x1f\"\n\"\\x62\\xa8\\x78\\xac\\x85\\xbb\\x87\\xa9\\x8b\\x8b\\x8a\\xf7\\x01\\x08\\xf7\\x54\\x07\\xa0\\x81\\x98\\x7b\\x7a\\x82\\x7f\\x75\\x1e\\x0e\\xf7\\xe1\\x16\\xf7\\x67\"\n\"\\xf8\\xeb\\x05\\x55\\x06\\x4c\\xfb\\x37\\x05\\xfb\\x97\\x06\\x4d\\xf7\\x37\\x05\\x58\\x06\\xf7\\x5f\\xfc\\xeb\\x05\\xf7\\x2a\\xf8\\x15\\x15\\xfb\\x03\\xfb\\xe2\"\n\"\\x05\\x84\\x06\\x24\\xf7\\xe2\\x05\\x0e\\xf8\\x7a\\xf8\\x37\\x15\\xfb\\x0d\\x06\\x74\\x81\\x2a\\x1d\\xd0\\xfb\\x8c\\x06\\x52\\x55\\x51\\x6f\\x4a\\x1b\\x5b\\x65\"\n\"\\xaf\\xba\\x1f\\xf7\\xc1\\x97\\x1d\\xfb\\x8e\\x06\\x3a\\xc3\\x56\\xde\\xcb\\xc4\\xa3\\xbd\\xc2\\x1e\\x51\\xa3\\x07\\x7a\\x1d\\xbf\\xf7\\x2e\\x1d\\x7d\\x73\\xa1\"\n\"\\x1d\\xa8\\xa1\\xa0\\xca\\xad\\x1f\\x96\\x91\\x8f\\x92\\x96\\x1a\\x9b\\x80\\x94\\x76\\x1e\\x6e\\x06\\x0e\\x48\\x0a\\x0e\\x48\\x0a\\xfb\\x49\\xf7\\x5d\\x15\\x72\"\n\"\\x77\\x77\\x73\\xf7\\x30\\x1d\\xf7\\x63\\x95\\x1d\\xa3\\xa4\\x77\\x9f\\x72\\x1f\\x0e\\x48\\x0a\\xa0\\xf7\\x70\\x15\\x95\\x93\\x8f\\x92\\x95\\x1a\\x99\\x81\\x95\"\n\"\\x7d\\x82\\x85\\x88\\x83\\x82\\x1e\\xfb\\x06\\x2b\\x05\\x81\\x83\\x87\\x84\\x81\\x1a\\x7d\\x95\\x81\\x99\\x93\\x93\\x8e\\x93\\x93\\x1e\\xfb\\x06\\xd8\\x15\\x72\"\n\"\\x77\\x77\\x73\\x72\\x9f\\x78\\xaf\\x1d\\xf7\\x98\\x16\\x71\\x77\\x78\\x72\\x67\\x1d\\x9f\\xa4\\xa2\\x77\\x9f\\x73\\x1f\\x0e\\x48\\x0a\\x94\\xf7\\x70\\xf7\\x0e\"\n\"\\x0a\\x7d\\x84\\x84\\x88\\x83\\x83\\xd5\\x0a\\x28\\x0a\\xfb\\x18\\xf8\\xec\\x63\\x0a\\x28\\x0a\\x85\\xf8\\xb3\\x5f\\x0a\\x40\\x0a\\xbc\\xf8\\xe0\\x34\\x0a\\x40\"\n\"\\x0a\\x33\\xf9\\x12\\xda\\x1d\\x40\\x0a\\xfb\\x59\\xf8\\xf6\\x5b\\x1d\\x40\\x0a\\xfb\\x52\\xf9\\x06\\x4d\\x0a\\xf8\\x3a\\xf7\\xb0\\x15\\xbe\\x84\\x07\\x61\\x8e\"\n\"\\x6c\\x90\\x77\\x91\\x08\\x5f\\x99\\x6a\\xb4\\xb4\\x1a\\xa9\\x9d\\xa8\\xaa\\x9e\\x1e\\xa5\\x9b\\xb2\\x94\\xc5\\x8e\\xa1\\x8c\\x8b\\x8b\\x90\\x8d\\x08\\x96\\x8e\"\n\"\\x91\\x93\\x97\\x1a\\x9c\\x7f\\x94\\x75\\x1e\\xfb\\x5e\\x26\\x1d\\xaf\\x06\\x5a\\x6d\\x78\\x6b\\x5a\\x1a\\x53\\xae\\x5c\\xc8\\x72\\x1e\\x31\\x6a\\x5f\\x55\\x3c\"\n\"\\x1a\\x5a\\xa0\\x5e\\xb1\\x6d\\x1e\\xa9\\x73\\xb0\\x7f\\xcd\\x84\\x08\\xd8\\x83\\x9d\\x81\\x6b\\x1a\\x69\\x6f\\x77\\x50\\x83\\x1e\\x6d\\x87\\x84\\x87\\x7a\\x1a\"\n\"\\x7a\\x96\\x83\\xa2\\xd9\\xcb\\xbf\\xca\\xa9\\x7e\\xa4\\x74\\x9b\\x1e\\x79\\x98\\x6f\\x92\\x5c\\x90\\x08\\xfb\\x04\\x97\\x5d\\xad\\xd1\\x1a\\xc3\\xb3\\xbe\\xc6\"\n\"\\x9e\\x1e\\xa4\\x93\\xac\\x8f\\xbd\\x8c\\x08\\x0e\\x4e\\x0a\\x83\\x7a\\x74\\x1d\\x9c\\x80\\x93\\x71\\x1d\\x82\\x7b\\x4c\\x0a\\xf7\\x65\\xf7\\xa2\\xda\\x1d\\x5d\"\n\"\\x0a\\xf6\\xf7\\x96\\x4d\\x0a\\x4a\\x0a\\x60\\xf7\\x68\\x34\\x0a\\x4a\\x0a\\xfb\\x47\\xf7\\x7e\\x26\\x0a\\x0e\\xf8\\x22\\xf8\\xbc\\x15\\x49\\x48\\x76\\x73\\x6a\"\n\"\\x60\\x08\\x3b\\x22\\x68\\x3d\\x3f\\x1a\\x54\\xa8\\x50\\xb6\\x6d\\x1e\\xa4\\x7a\\xb0\\x7f\\xca\\x83\\x08\\xcc\\x82\\x9c\\x81\\x6f\\x1a\\x64\\x6a\\x75\\x4f\\x8a\"\n\"\\x1e\\x75\\x80\\x82\\x7b\\x7a\\x97\\x82\\xa4\\xdc\\xc7\\xbb\\xcc\\xab\\x7b\\xa7\\x71\\x9b\\x1f\\x7e\\x93\\x70\\x92\\x68\\x90\\x52\\x93\\x70\\x92\\x77\\x96\\x08\"\n\"\\x66\\xa0\\x76\\xb3\\xbd\\x1a\\xe6\\xd9\\xf7\\x0e\\xf7\\x3d\\xf7\\x3f\\x1e\\x8d\\x8e\\x90\\x8f\\x05\\xbb\\xfb\\x6a\\xf7\\x44\\x1d\\x0e\\x7b\\x9b\\xf8\\x35\\x9b\"\n\"\\xf7\\x16\\x97\\xa7\\x98\\x06\\xbf\\x0a\\xbe\\x0b\\xa7\\x93\\x8e\\x8f\\x8f\\x90\\x8f\\x8e\\x92\\xbb\\xae\\xa9\\x0c\\x0c\\xae\\x8f\\x8f\\x8f\\x8f\\x8e\\x8f\\x94\"\n\"\\x90\\xb4\\x9f\\x9e\\x0c\\x0d\\xf8\\xec\\x14\\xbb\\x13\\x00\\xe7\\x02\\x00\\x01\\x00\\x05\\x00\\x0b\\x00\\x0f\\x00\\x16\\x00\\x1d\\x00\\x24\\x00\\x28\\x00\\x2c\"\n\"\\x00\\x5d\\x00\\x61\\x00\\x65\\x00\\x69\\x00\\x73\\x00\\x7e\\x00\\x84\\x00\\x88\\x00\\x8d\\x00\\xb0\\x00\\xb5\\x00\\xb9\\x00\\xc3\\x00\\xc7\\x00\\xd2\\x00\\xd6\"\n\"\\x00\\xda\\x00\\xe0\\x00\\xe7\\x00\\xec\\x00\\xf2\\x00\\xf6\\x01\\x39\\x01\\x7a\\x01\\xb9\\x01\\xd7\\x01\\xf0\\x01\\xfb\\x01\\xff\\x02\\x04\\x02\\x09\\x02\\x3d\"\n\"\\x02\\x8c\\x02\\x98\\x02\\xc4\\x02\\xce\\x02\\xdd\\x02\\xee\\x02\\xfc\\x03\\x02\\x03\\x07\\x03\\x0f\\x03\\x15\\x03\\x1a\\x03\\x24\\x03\\x2b\\x03\\x31\\x03\\x36\"\n\"\\x03\\x40\\x03\\x48\\x03\\x50\\x03\\x57\\x03\\x5f\\x03\\x6f\\x03\\xa8\\x03\\xae\\x03\\xca\\x03\\xcd\\x03\\xde\\x03\\xe5\\x03\\xf0\\x03\\xf7\\x03\\xfe\\x04\\x18\"\n\"\\x04\\x1e\\x04\\x27\\x04\\x32\\x04\\x39\\x04\\x49\\x04\\x4d\\x04\\x51\\x04\\x5a\\x04\\x64\\x04\\x6f\\x04\\x7b\\x04\\x86\\x04\\x8b\\x04\\x98\\x04\\xa0\\x04\\xa8\"\n\"\\x04\\xae\\x04\\xb9\\x04\\xc3\\x04\\xc8\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\\xeb\\x04\\xf2\\x04\\xfa\\x05\\x02\\x05\\x0a\\x05\\x12\\x05\\x18\\x05\\x23\\x05\\x2c\"\n\"\\x05\\x5a\\x05\\x7d\\x06\\x09\\x06\\x10\\x06\\x93\\x07\\x0d\\x07\\x81\\x07\\xd3\\x07\\xe4\\x08\\x00\\x08\\x08\\x08\\x10\\x08\\x17\\x08\\x35\\x08\\x52\\x08\\x5f\"\n\"\\x08\\x8a\\x08\\x9f\\x08\\xe1\\x09\\x21\\x09\\x29\\x09\\x2c\\x09\\x5a\\x09\\x9f\\x09\\xad\\x09\\xd0\\x09\\xe4\\x0a\\x22\\x0a\\x27\\x0a\\x45\\x0a\\x5a\\x0a\\x81\"\n\"\\x0a\\x99\\x0a\\xbf\\x0a\\xda\\x0b\\x04\\x0b\\x0e\\x0b\\x3c\\x0b\\x5a\\x0b\\x60\\x0b\\x6b\\x0b\\x8b\\x0b\\xb6\\x0b\\xce\\x0b\\xdc\\x0b\\xe4\\x0b\\xef\\x0c\\x03\"\n\"\\x0c\\x17\\x0c\\x21\\x0c\\x26\\x0c\\x2e\\x0c\\x43\\x0c\\x4a\\x0c\\x5a\\x0c\\x76\\x0c\\x96\\x0c\\x9f\\x0c\\xb1\\x0c\\xd0\\x0c\\xe2\\x0c\\xe7\\x0c\\xeb\\x0c\\xf9\"\n\"\\x0d\\x0a\\x0d\\x15\\x0d\\x20\\x0d\\x29\\x0d\\x38\\x0d\\x40\\x0d\\x5a\\x0d\\x68\\x0d\\x73\\x0d\\x85\\x0d\\x8f\\x0d\\x96\\x0d\\x9c\\x0d\\xa6\\x0d\\xb0\\x0d\\xb9\"\n\"\\x0d\\xc5\\x0d\\xcc\\x0d\\xd9\\x0d\\xe6\\x0d\\xfb\\x0e\\x0a\\x0e\\x15\\x0e\\x21\\x0e\\x24\\x0e\\x30\\x0e\\x3f\\x0e\\x44\\x0e\\x53\\x0e\\x64\\x0e\\x76\\x0e\\x84\"\n\"\\x0e\\x8f\\x0e\\x95\\x0e\\xa0\\x0e\\xb1\\x0e\\xc1\\x0e\\xc9\\x0e\\xce\\x0e\\xd8\\x0e\\xe7\\x0e\\xf6\\x0f\\x04\\x0f\\x12\\x0f\\x18\\x0f\\x21\\x0f\\x2e\\x0f\\x3b\"\n\"\\x0f\\x48\\x0f\\x55\\x0f\\x62\\x0f\\x66\\x0f\\x6d\\x0f\\x79\\x0f\\x85\\x0f\\x8f\\x0f\\x97\\x0f\\xa2\\x0f\\xad\\x0f\\xb8\\x0f\\xc3\\x0f\\xce\\x0f\\xd9\\x06\\x20\"\n\"\\x1d\\x0b\\x06\\xa0\\x97\\x45\\x0a\\x0b\\x06\\x32\\x0a\\x0b\\xf7\\xda\\xf8\\x94\\xd0\\x1d\\x0b\\x94\\x7e\\x9c\\x9c\\x94\\x98\\x0b\\x72\\x0a\\x95\\xa0\\xc2\\x1d\"\n\"\\x0b\\x15\\x3f\\x1d\\x0b\\x06\\x74\\x0a\\x0b\\xf8\\x46\\x16\\xdc\\x23\\x1d\\x6e\\xf8\\x04\\xfb\\x0d\\x06\\x74\\x81\\x2a\\x1d\\xd0\\xfb\\x8c\\x06\\x52\\x55\\x51\"\n\"\\x6f\\x4a\\x1b\\x5b\\x65\\xaf\\xba\\x1f\\xf7\\xc1\\x97\\x1d\\xfb\\x8e\\x06\\x3a\\xc3\\x56\\xde\\xcb\\xc4\\xa3\\xbd\\xc2\\x1e\\x0b\\x06\\x2b\\x1d\\x0b\\x06\\x35\"\n\"\\x1d\\x0b\\x07\\x27\\x1d\\x0b\\xf7\\x16\\x1d\\xf7\\x12\\xf7\\x0f\\xac\\x0a\\x0b\\x15\\xa0\\x97\\x94\\x9b\\x9b\\x80\\x94\\x75\\x5c\\x1d\\x06\\x75\\x80\\x38\\x1d\"\n\"\\x0b\\x06\\xc5\\x0a\\x0b\\x8d\\x94\\x95\\x1e\\x0e\\xf7\\xdc\\xf7\\x91\\x15\\xf7\\x42\\xf7\\x97\\xc8\\x0a\\xfb\\x64\\xfb\\x22\\xf7\\x64\\xf6\\x1d\\xfb\\x97\\x05\"\n\"\\xfb\\x5e\\x27\\x07\\x20\\x1d\\xf7\\x90\\x23\\x1d\\x27\\x06\\x0b\\xa0\\x97\\x5a\\x0a\\x0b\\x06\\x53\\x0a\\x0b\\x55\\x1d\\x70\\x1d\\x8f\\x8d\\x94\\x96\\x1e\\x0e\"\n\"\\x06\\x37\\x1d\\x0b\\x06\\xa4\\x99\\x94\\x9c\\x9b\\x7d\\x94\\x72\\x1f\\x0b\\x07\\x70\\x0a\\x0b\\x06\\x7b\\x0a\\x0b\\x06\\x9f\\x97\\x53\\x1d\\x0b\\x7b\\x82\\x74\"\n\"\\x7d\\x7d\\x8f\\x0b\\x75\\x80\\x2a\\x1d\\x0b\\x15\\x91\\x94\\x8d\\x90\\x0b\\x7e\\x96\\x1f\\x0e\\xc0\\x0a\\xf7\\x0a\\xdf\\xc3\\xda\\xaf\\x77\\xae\\x6b\\xa0\\x1f\"\n\"\\x6a\\xa1\\x66\\x96\\x4d\\x91\\x33\\x91\\x1d\\xd3\\x7e\\x0a\\x93\\x82\\x9a\\x1b\\x9c\\xf7\\x39\\x1d\\x81\\x81\\x7c\\x89\\x1e\\xa5\\x69\\x5e\\x98\\x55\\x1b\\x26\"\n\"\\x40\\x5a\\x48\\x6a\\x9d\\x6c\\x9a\\x1d\\xa5\\x85\\xa5\\x7c\\x08\\xa4\\x7e\\x9b\\x75\\x76\\xf7\\x0f\\x0a\\x0b\\xf8\\x32\\x16\\xf0\\x23\\x1d\\x5a\\xf7\\x94\\x06\"\n\"\\xd4\\x44\\xc0\\x2b\\x66\\x4a\\x7e\\x78\\x53\\xa6\\x0a\\x99\\x54\\x6c\\x90\\x5f\\x1b\\xfb\\x15\\x33\\x4f\\x32\\x3d\\xcc\\x56\\xeb\\xd0\\xc2\\xa1\\xc0\\xc9\\x1f\"\n\"\\xc6\\x04\\x4f\\x4a\\x57\\x74\\x45\\x1b\\x49\\x61\\xaa\\xbc\\xc5\\xd1\\xb3\\xf2\\xb4\\xba\\x85\\x83\\xad\\x1f\\x0b\\xf8\\x52\\x16\\xdd\\xf8\\x04\\x05\\x9a\\x06\"\n\"\\xa1\\x96\\x94\\x9c\\x9c\\x81\\x93\\x74\\x1f\\xfb\\x03\\x2f\\x0a\\xb7\\x06\\x4b\\xfb\\xb5\\x38\\xf7\\x81\\x05\\x50\\x06\\x39\\xfb\\x81\\x49\\xf7\\xb5\\x05\\xb9\"\n\"\\x3d\\x1d\\xfb\\x03\\x2f\\x0a\\x9a\\x06\\xdf\\xfc\\x04\\x05\\xc6\\x06\\xe1\\xf7\\x88\\xe2\\xfb\\x88\\x05\\x0b\\xf7\\x7d\\xf8\\x94\\x15\\xe6\\x3e\\x1d\\xfb\\x7e\"\n\"\\x22\\x1d\\xe6\\xfc\\x61\\x30\\x20\\x0a\\xf8\\x5d\\xf7\\x5f\\x78\\x1d\\xfb\\x2c\\xfb\\x9a\\x07\\x0b\\xf7\\xda\\xf8\\xef\\x15\\xfb\\x37\\x2e\\x1d\\xf7\\x03\\xfc\"\n\"\\x89\\xfb\\x2f\\x20\\x0a\\xf7\\xfe\\x21\\x0a\\xfb\\x2f\\x06\\x0b\\x06\\xa0\\x96\\x94\\x9c\\x9b\\x7f\\x94\\x77\\x1f\\x0b\\x06\\x57\\x0a\\x0b\\x21\\x1d\\x75\\x1f\"\n\"\\x0b\\x7f\\x94\\x76\\x1f\\x0b\\xf7\\x3f\\xf7\\x8a\\x15\\xf7\\x12\\x06\\xd6\\x68\\xb5\\x58\\xe4\\xfb\\x34\\x08\\xc6\\x21\\x0a\\x70\\x06\\x3e\\xf7\\x16\\x6d\\xb3\"\n\"\\x52\\xb3\\x08\\xe1\\xa8\\xba\\xbe\\xcb\\x1a\\xe0\\x36\\xd4\\x27\\x1e\\xfb\\x8d\\x9c\\x0a\\x06\\xf7\\x8a\\x04\\xf7\\x2a\\x1d\\x0b\\xf8\\x3e\\xf8\\x04\\x15\\xfb\"\n\"\\x26\\x07\\x43\\x83\\x63\\x77\\x6f\\x1e\\x6d\\x75\\x69\\x7b\\x61\\x1b\\x62\\x67\\x9d\\xa9\\x75\\x1f\\x78\\xa6\\x83\\xb3\\xd2\\x1a\\xf7\\x59\\x27\\x07\\x75\\x80\"\n\"\\x38\\x1d\\xbb\\xfb\\x2b\\x06\\x39\\x96\\x59\\xa6\\x67\\x1e\\x60\\xaa\\xb9\\x76\\xc8\\x1b\\xc7\\xbb\\xa0\\xb2\\xaa\\x1f\\xa8\\xb0\\x97\\xbe\\xe4\\x1a\\xf7\\x26\"\n\"\\xbb\\x07\\x7b\\x0a\\xfb\\x28\\x2e\\x0a\\x0b\\xf8\\x66\\xf8\\x15\\x15\\xaa\\x63\\x56\\x9c\\x60\\x0a\\x0b\\xf8\\x74\\xf8\\x37\\x15\\xfb\\xfd\\x28\\x06\\x27\\x1d\"\n\"\\xbb\\xf7\\x7e\\x07\\xfb\\xbb\\xfb\\xd9\\x05\\x60\\xf8\\x15\\xef\\x07\\xa0\\x83\\x96\\x79\\x7a\\x82\\x80\\x76\\x1e\\x5a\\xfb\\x98\\x07\\xf7\\xbd\\xf7\\xd9\\x05\"\n\"\\x0b\\xf7\\x16\\x1d\\xf7\\x11\\xf7\\x10\\xac\\x0a\\x0b\\x30\\x1d\\xb9\\x06\\xfb\\x2d\\xfb\\xc7\\xfb\\x2f\\xf7\\xc7\\x8b\\x1d\\x0b\\x15\\x94\\x81\\xf7\\x0a\\x1d\"\n\"\\x9a\\x96\\x96\\x9a\\x93\\x8b\\x8b\\x7d\\x9a\\x1f\\x0e\\xf7\\xa8\\x91\\x15\\x47\\xfb\\x1d\\x05\\xfb\\x10\\x06\\x76\\x80\\x0b\\x56\\x1d\\x80\\x76\\x1e\\x0b\\x55\"\n\"\\x0a\\x3a\\x1d\\x0b\\x83\\x7a\\x7a\\x96\\x82\\xa0\\x1f\\x0b\\x07\\x75\\x80\\x59\\x0a\\x0b\\xa0\\x96\\x83\\x0a\\x0b\\xa0\\x96\\x94\\x9c\\x9c\\x80\\x93\\x76\\x1f\"\n\"\\x0b\\x06\\x75\\x80\\x83\\x7a\\x7a\\x0b\\x92\\x8e\\x93\\x94\\x1e\\x0e\\xa1\\x96\\x57\\x1d\\x0b\\x75\\x94\\x80\\x9c\\x9c\\x94\\x96\\xa1\\x1e\\x0b\\x82\\x7b\\x7a\"\n\"\\x96\\x82\\xa1\\x1f\\x0b\\x94\\x9b\\x9c\\x7f\\x94\\x76\\x1f\\x0b\\x1a\\x9b\\x80\\x94\\x75\\x1e\\x0b\\x9a\\x1b\\x9c\\x94\\x96\\xa0\\x1f\\x0b\\x4e\\x0a\\x83\\x7a\"\n\"\\x74\\x1d\\x9c\\x80\\x93\\x71\\x1d\\x83\\x7a\\x4c\\x0a\\x0b\\xee\\xbe\\x15\\x5a\\x26\\x1d\\xf7\\x02\\x06\\xf7\\xb4\\xf8\\x73\\x05\\xfc\\x40\\x5a\\x07\\x20\\x1d\"\n\"\\xf7\\x2a\\x06\\x9f\\x97\\x94\\x9b\\x9c\\xf6\\x0a\\x9c\\x9b\\x7f\\x94\\x77\\x1f\\xfb\\x02\\x06\\xfb\\xb4\\xfc\\x74\\x05\\xf8\\x41\\xd0\\x07\\x32\\x0a\\xfb\\x3e\"\n\"\\x4e\\x1d\\xbc\\x06\\x0b\\x90\\x1d\\x8f\\x9e\\xa0\\x0a\\x50\\x1b\\xfb\\x1d\\x29\\x2c\\xfb\\x19\\xfb\\x15\\xeb\\x2f\\xf7\\x1b\\xce\\xcd\\x9e\\xaf\\xc0\\x1f\\xa9\"\n\"\\x9f\\x9a\\x9d\\x99\\xa7\\x0a\\x0b\\x62\\x0a\\x0e\\xf7\\xdb\\xbe\\x15\\xf8\\x61\\xf7\\x2f\\x49\\x07\\xe0\\x1d\\xf7\\x8e\\x21\\x0a\\x0b\\x6f\\x1d\\x6d\\x6c\\xa2\"\n\"\\x1d\\x0e\\x4d\\x1d\\x67\\x86\\x62\\x72\\x56\\x1b\\x55\\x51\\x1d\\x2b\\x1d\\xf7\\x20\\x21\\x0a\\x0b\\xae\\x1d\\x85\\x94\\x7d\\x0a\\x0b\\xf7\\xbb\\xf7\\xf4\\x15\"\n\"\\x61\\x6b\\x6d\\x63\\x64\\xab\\x6d\\xb5\\x1f\\x96\\x06\\xb5\\xab\\xa9\\xb2\\xb3\\x6b\\xa9\\x61\\x1f\\x0e\\xf7\\x1d\\x1d\\x91\\x68\\x1d\\x4e\\x1d\\xbc\\xfc\\x61\"\n\"\\x5a\\x26\\x1d\\x0b\\xf7\\x2c\\x1d\\xa9\\xb3\\xb2\\x6b\\xa9\\x61\\x1f\\x0e\\x60\\x1d\\xfc\\x50\\x20\\x0a\\x0b\\x06\\x9b\\x8a\\x97\\x95\\x9a\\x1a\\x8e\\x07\\x9a\"\n\"\\x7f\\x95\\x7b\\x8a\\x1e\\x0b\\xee\\x1d\\x9f\\x0b\\x07\\x2b\\x1d\\x0b\\xf7\\x14\\x1d\\xa9\\x72\\xa3\\x6e\\x1f\\x0b\\x71\\x7d\\x82\\x7a\\x7b\\x99\\x82\\xa5\\x1f\"\n\"\\x0b\\x76\\x0a\\xf7\\x8e\\x06\\xa0\\x97\\x94\\x9c\\x9b\\x0b\\xf7\\x3f\\xf7\\x9e\\x15\\xf7\\x1a\\x64\\x06\\x39\\x1d\\x0b\\x07\\xa0\\x97\\x94\\x9c\\x9b\\x7f\\x94\"\n\"\\x76\\x1f\\x0b\\xa1\\x96\\x45\\x0a\\x0b\\x1e\\x37\\xfb\\x0f\\x05\\x85\\x83\\x89\\x85\\x86\\x1a\\x7c\\x0b\\x82\\x7b\\x7a\\x97\\x82\\xa0\\x1f\\x0b\\x74\\x24\\x0a\"\n\"\\xa4\\x1e\\xbf\\x07\\x0b\\x07\\x76\\x7f\\x38\\x1d\\x0b\\x07\\x9f\\x82\\x96\\x7a\\x7a\\x82\\x80\\x77\\x1e\\x0b\\x93\\xa4\\x1b\\x9a\\x9d\\x82\\x78\\xa3\\x1f\\x0b\"\n\"\\xa0\\x97\\x57\\x1d\\x0b\\x76\\x94\\x80\\x9b\\x9c\\x94\\x96\\xa0\\x1e\\x0b\\x91\\x88\\x91\\x1b\\x99\\x97\\x96\\x99\\x0b\\xd4\\xbd\\x70\\x62\\x90\\x1e\\x79\\x8d\"\n\"\\x0b\\x99\\x94\\x9b\\x9c\\x7d\\x94\\x0b\\x6e\\x82\\x85\\x7c\\x1b\\x7f\\x0b\\x82\\x1a\\x7c\\x96\\x80\\x9a\\x92\\x0b\\x82\\x7b\\x7a\\x99\\x82\\xa4\\x1f\\x0b\\x94\"\n\"\\x9b\\x9c\\x80\\x94\\x76\\x1f\\x0b\\x96\\x7b\\x7a\\x82\\x80\\x76\\x1e\\x0b\\x85\\x79\\xa1\\x1f\\xa3\\x0b\\x06\\x75\\x80\\x82\\x7a\\x7b\\x96\\x82\\xa1\\x1f\\x0b\"\n\"\\xf8\\xcf\\x15\\x45\\xfb\\x05\\xd1\\x06\\x0e\\xab\\x0a\\x63\\xb4\\xc4\\x75\\xcc\\x1b\\xf7\\x10\\xe3\\xd2\\xed\\xbf\\x73\\xb7\\x63\\xa3\\x1f\\x6c\\x9e\\x6f\\x93\"\n\"\\x3d\\x98\\x4e\\x95\\x71\\x93\\x73\\x9b\\x08\\x73\\x9a\\x7e\\xa4\\xa8\\x1a\\xca\\xc5\\xb8\\xdb\\xd6\\xcc\\x0a\\x0b\\xf8\\x7a\\xf7\\xd7\\x15\\xbb\\x1d\\xc4\\x24\"\n\"\\x1d\\x55\\x06\\x4a\\xe6\\x5c\\xcc\\x7f\\x95\\x65\\x98\\x19\\xa0\\x9c\\x9c\\x9d\\xa9\\xaf\\xbf\\xc9\\x91\\x8e\\xb5\\x8d\\x08\\x0b\\xf7\\xda\\xf7\\x79\\x15\\x9f\"\n\"\\x81\\x97\\x7b\\x7a\\x82\\x80\\x76\\x1e\\x6b\\x07\\x21\\x71\\x54\\x58\\x55\\x67\\xc4\\xe2\\xe3\\xa3\\xca\\xbb\\xac\\x1e\\x93\\x91\\x91\\x8f\\x97\\x91\\x08\\xa3\"\n\"\\x97\\x8e\\x8e\\x98\\x1a\\x9a\\x81\\x95\\x7b\\x71\\x67\\x72\\x64\\x6b\\x1e\\x62\\x59\\x7b\\x55\\x38\\x1a\\x4b\\x99\\x5b\\xa8\\x68\\x1e\\x6b\\xa5\\xaf\\x79\\xaf\"\n\"\\x1b\\xb8\\xb0\\xa2\\xb4\\xa1\\x1f\\x62\\xa0\\xb1\\x74\\xb8\\x1b\\xaf\\xaf\\x9d\\xab\\xa5\\x1f\\xa8\\xaf\\x99\\xba\\xcf\\x1a\\xd1\\x79\\xcb\\x6a\\xb6\\x1e\\xb1\"\n\"\\x6e\\x5d\\xab\\x71\\x1b\\x7c\\x81\\x81\\x7c\\x7e\\x8e\\x88\\xa4\\x7e\\x1f\\x97\\x85\\x90\\x88\\x93\\x86\\x08\\xba\\x6a\\xa4\\x4b\\x35\\x1a\\x32\\x68\\x52\\x54\"\n\"\\x58\\x71\\xc1\\xf6\\x1e\\x0b\\xf7\\x38\\x1d\\xa1\\x96\\xb4\\x1d\\xf7\\x22\\xbb\\x15\\x5e\\xbc\\xbb\\x78\\xc9\\x1b\\xf7\\x21\\xf7\\x04\\xf7\\x17\\xf7\\x39\\xd6\"\n\"\\x74\\xd1\\x61\\xc1\\x1f\\xce\\xde\\x05\\x94\\x95\\x8c\\x8e\\x91\\x1a\\x98\\x80\\x95\\x7f\\x82\\x87\\x89\\x7f\\x81\\x1e\\x4d\\x3d\\x05\\xb9\\x56\\x5f\\x9c\\x4f\"\n\"\\x1b\\xfb\\x23\\xfb\\x04\\xfb\\x16\\xfb\\x39\\x3f\\x9f\\x4e\\xb8\\x4e\\x1f\\x48\\x39\\x05\\x84\\x81\\x89\\x88\\x84\\x1a\\x7f\\x95\\x81\\x98\\x93\\x91\\x8f\\x94\"\n\"\\x93\\x1e\\xcb\\xf7\\x2d\\x15\\x6c\\xbc\\x7c\\xbc\\xc4\\x1a\\xf7\\x1b\\xe6\\xf7\\x02\\xf7\\x03\\xba\\xb1\\x7b\\x67\\xb3\\x1e\\xaa\\x68\\x15\\xaa\\x59\\x9a\\x5a\"\n\"\\x50\\x1a\\xfb\\x1a\\x30\\xfb\\x02\\xfb\\x03\\x5c\\x65\\x9b\\xb0\\x63\\x1e\\x0b\\xf7\\x2f\\xac\\x15\\x69\\xb8\\xb8\\x7c\\xc3\\x1b\\xf7\\x16\\xf2\\xee\\xf7\\x11\"\n\"\\xc3\\x78\\xbd\\x65\\xb5\\x1f\\xc7\\xc7\\x05\\x94\\x94\\x8e\\x90\\x92\\x1a\\x98\\x81\\x95\\x7e\\x83\\x88\\x89\\x81\\x81\\x1e\\x4e\\x4d\\x05\\xab\\x60\\x5d\\x9a\"\n\"\\x54\\x1b\\xfb\\x16\\x24\\x28\\xfb\\x11\\x54\\x9d\\x5c\\xb0\\x60\\x1f\\x4c\\x4c\\x05\\x83\\x82\\x88\\x86\\x84\\x1a\\x7f\\x95\\x81\\x98\\x92\\x90\\x8e\\x93\\x94\"\n\"\\x1e\\xf7\\xf1\\xf7\\xf3\\x15\\xa6\\x6a\\x99\\x66\\x62\\x1a\\x2a\\x3b\\x3e\\x26\\x60\\x6c\\x95\\xa3\\x67\\x1e\\x6a\\xaa\\x15\\x71\\xac\\x7e\\xaf\\xb3\\x1a\\xeb\"\n\"\\xdb\\xd8\\xf0\\xb5\\xa8\\x82\\x74\\xaf\\x1e\\x0b\\xf8\\x04\\xf7\\x8f\\x15\\x6b\\x8c\\x05\\x3d\\x54\\xab\\xb9\\xb3\\xb2\\xa4\\xca\\xa1\\x9d\\x89\\x87\\x98\\x1f\"\n\"\\x81\\xac\\x8b\\x8b\\x90\\x1b\\x98\\x95\\x97\\x9a\\x95\\x86\\x93\\x81\\x90\\x1f\\x94\\x79\\x60\\x93\\x6a\\x1b\\x2f\\x48\\x5b\\x48\\x68\\xa0\\x69\\xae\\x78\\x1f\"\n\"\\x96\\x85\\x94\\x87\\xa1\\x85\\x08\\x3b\\x78\\x65\\x66\\x50\\x1a\\x40\\xcc\\x5b\\xf3\\xb9\\xc0\\x95\\x98\\xaa\\x1e\\x99\\x92\\x91\\x92\\x97\\x1a\\x9a\\x82\\x95\"\n\"\\x7d\\x87\\x88\\x8a\\x89\\x85\\x1e\\x7a\\x59\\x79\\x88\\x60\\x1b\\x3d\\x61\\xa4\\xb8\\xc2\\xc4\\xad\\xe4\\x1f\\xa3\\x06\\x92\\x06\\x93\\x8a\\x05\\x0b\\xee\\xf7\"\n\"\\x9e\\x15\\xfb\\x6b\\x6e\\x07\\x20\\x1d\\xf7\\x71\\x06\\xf7\\x11\\x88\\xf7\\x02\\xf7\\x0b\\xf7\\x1e\\x1a\\xc1\\x07\\xf7\\x1f\\xfb\\x02\\xf7\\x0b\\xfb\\x11\\x88\"\n\"\\x1e\\xfb\\x71\\x22\\x1d\\xa8\\xfb\\x57\\x43\\x20\\x0a\\xf7\\x10\\xf7\\x8a\\x15\\xf7\\x1e\\x06\\xea\\x92\\xe0\\x31\\x90\\xfb\\x04\\x08\\x43\\x07\\x88\\x24\\x35\"\n\"\\x2e\\x31\\x8d\\x08\\xfb\\x24\\xf7\\x6b\\xf7\\x31\\x23\\x1d\\xfb\\x31\\x06\\x0e\\x72\\x1d\\xc9\\xa4\\xb9\\xbd\\x1e\\xa7\\xa5\\x97\\x9b\\x97\\x1a\\x99\\x6e\\x1d\"\n\"\\x0e\\xa9\\x0a\\x9b\\x80\\x94\\x75\\x1f\\xfb\\x15\\x06\\x3b\\x0a\\x92\\x06\\xfb\\x2d\\xfb\\x13\\x05\\xf7\\xfe\\x26\\x07\\xf7\\x0d\\x1d\\x06\\x0b\\xf7\\x01\\x1d\"\n\"\\xc0\\xaa\\xa3\\xc4\\x1d\\xa1\\x0a\\x51\\x52\\x4c\\xcc\\x1d\\x0b\\x72\\x0a\\x96\\x9f\\xc2\\x1d\\x0e\\xf7\\x2a\\xf8\\x37\\x15\\x26\\x2f\\x0a\\xbc\\xfc\\x87\\xae\"\n\"\\x0a\\x41\\x5b\\x73\\x4e\\x58\\x1f\\xf7\\x3e\\xad\\x15\\xee\\xd7\\x45\\x30\\xf7\\x29\\x1d\\xf8\\x40\\xf8\\x94\\x15\\xfc\\x61\\x5b\\x5f\\x1d\\xf7\\x20\\x06\\xf7\"\n\"\\x0e\\x1d\\xfc\\x4c\\x8c\\x1d\\xf7\\x21\\x33\\x0a\\x5a\\xf8\\x61\\x06\\x0e\\xd4\\x1d\\xa7\\x93\\x90\\x9d\\x1b\\x96\\xaa\\x1d\\x9d\\xd9\\x0a\\xf7\\x53\\xf8\\x37\"\n\"\\x15\\x3b\\x2e\\x1d\\xa7\\xcd\\x0a\\xf7\\x84\\x06\\xd4\\xc9\\xa7\\x9d\\xc2\\x1b\\xcd\\xb8\\x65\\x53\\x1f\\xfc\\x4a\\x2b\\x0a\\xf8\\x51\\x07\\xd9\\x45\\xc7\\x31\"\n\"\\x51\\x65\\x7a\\x5a\\x57\\x1e\\x0b\\xe8\\x1d\\x51\\x42\\x57\\x74\\x50\\xd7\\x1d\\xb5\\x1b\\xc0\\xc0\\x9c\\xab\\xb7\\x1f\\xa6\\x9e\\x05\\x0b\\xf8\\x90\\xf8\\xef\"\n\"\\x15\\x26\\x20\\x0a\\xbc\\xfb\\x66\\x06\\xc7\\x5e\\x4f\\xaa\\x44\\x1b\\xfb\\x0f\\x28\\x27\\xfb\\x10\\xfb\\x10\\xee\\x26\\xf7\\x0e\\xd2\\xc9\\xab\\xc6\\xb7\\x1f\"\n\"\\x40\\xf0\\x07\\x61\\x1d\\x5a\\x06\\xfb\\x77\\xf7\\xdf\\x15\\xee\\xd7\\x40\\x28\\x2b\\x3e\\x3e\\x2b\\x2a\\x3f\\xd8\\xec\\xeb\\xd7\\xd8\\xea\\x1f\\x0b\\xee\\xbe\"\n\"\\x15\\x6e\\x20\\x0a\\xf7\\x71\\x06\\xf7\\x16\\x8a\\xf3\\xf7\\x04\\x8c\\xf7\\x23\\x08\\xc2\\x07\\x8a\\xf7\\x23\\x23\\xf7\\x04\\xfb\\x16\\x8a\\x08\\xfb\\x71\\x22\"\n\"\\x1d\\xa8\\x06\\xbf\\xfc\\x61\\x15\\xf8\\x61\\xf7\\x1e\\x07\\xea\\x92\\xe0\\x31\\x90\\xfb\\x03\\x08\\x43\\x07\\x89\\x23\\x35\\x2e\\x30\\x8d\\x08\\x0b\\x76\\x1d\"\n\"\\xf7\\x3e\\x21\\x0a\\x46\\x0b\\x9e\\x0a\\x0e\\xf8\\x66\\xf8\\x94\\x15\\xe6\\x3e\\x1d\\xfb\\xbc\\x50\\x0a\\xf7\\x2d\\xfb\\xec\\x06\\x41\\x4d\\x50\\x3c\\x5b\\x5e\"\n\"\\x9f\\xb7\\x5a\\x1e\\xf7\\x11\\x34\\x1d\\xfb\\x29\\x07\\x47\\xd9\\xbc\\x74\\xcd\\x1b\\xf5\\xe3\\xde\\xf0\\x1f\\x0b\\x06\\x73\\x6b\\x76\\x61\\x7c\\x1a\\x83\\x92\"\n\"\\x84\\x94\\x92\\x8f\\x8d\\x92\\x91\\x1e\\xad\\xb2\\xa3\\x9f\\xbc\\xa8\\x99\\x94\\x18\\x91\\x8e\\x8f\\x8d\\x8c\\x8c\\x08\\x99\\x93\\x8e\\x8e\\x93\\x1a\\x92\\x87\"\n\"\\x8f\\x78\\x95\\x1e\\x4f\\xad\\x6e\\xa2\\x6c\\xae\\x08\\x98\\x80\\x87\\x8e\\x84\\x1b\\x82\\x83\\x85\\x83\\x7c\\x9b\\x6b\\xa8\\x5f\\x1f\\x0b\\x67\\x1f\\x9e\\x6b\"\n\"\\x7d\\x8f\\xb4\\x0a\\xa3\\x1b\\xa3\\xf7\\x20\\x1d\\xf8\\x47\\xf7\\xf1\\x15\\xc5\\x5f\\x57\\xa5\\x46\\x1b\\xfb\\x09\\x2c\\x2c\\xfb\\x08\\xfb\\x09\\xea\\x2c\\xf7\"\n\"\\x09\\xcf\\xc0\\xa6\\xc3\\xb7\\x1f\\xfb\\x01\\x07\\x8f\\x50\\x0b\\xf8\\xc1\\x15\\x8c\\x9c\\x05\\xa1\\x8c\\x76\\x9f\\x72\\x1b\\x71\\x78\\x78\\x73\\x87\\xad\\x0a\"\n\"\\x0b\\x9a\\x1b\\x93\\x92\\x92\\x94\\x92\\x88\\x8f\\x84\\x91\\x1f\\x63\\xac\\x78\\xa1\\x6d\\xbc\\x88\\x8f\\x88\\x90\\x88\\x90\\x08\\x88\\x90\\x87\\x91\\x8b\\x1a\"\n\"\\x98\\x84\\x88\\x8e\\x82\\x1b\\x84\\x87\\x87\\x79\\x81\\x1f\\x6a\\x52\\x72\\x6b\\x67\\x6f\\x08\\x7e\\x80\\x88\\x86\\x85\\x1a\\x81\\x92\\x84\\x93\\x99\\x0b\\xf8\"\n\"\\xb7\\xcd\\x1d\\x0b\\xf7\\x8b\\xbe\\x15\\xf7\\xd1\\xf7\\x7e\\xfb\\x2c\\x07\\x77\\x94\\x7f\\x9c\\x9c\\x94\\x97\\x9f\\xf7\\x26\\x1d\\xfb\\xd1\\x30\\x06\\xf7\\x17\"\n\"\\x1d\\x0b\\xa3\\x1d\\x8e\\x8c\\x8f\\x98\\x1e\\x9d\\xc4\\xb5\\x93\\xab\\x1b\\xd1\\xbb\\x6d\\x5e\\x1f\\x4d\\x07\\x0b\\xda\\x0a\\x59\\x4e\\x74\\x43\\x1b\\x21\\x40\"\n\"\\xd1\\xf0\\xf4\\xd4\\xd2\\xf6\\xdd\\xce\\x65\\x59\\x91\\x1f\\x77\\x8d\\x93\\x83\\x9a\\x1b\\x9c\\x94\\x96\\x9f\\x1f\\xe5\\x07\\xa0\\x82\\xa9\\x1d\\x0b\\x83\\xed\"\n\"\\x0a\\x97\\x97\\x8d\\x8d\\x94\\x1a\\x99\\x80\\x96\\x7c\\x84\\x83\\xf7\\x1d\\x1d\\x92\\x8e\\x93\\x93\\x1e\\x0e\\xf7\\x53\\xf7\\x47\\x15\\xb4\\xad\\xf7\\x3a\\xfb\"\n\"\\x36\\x05\\x7c\\x35\\x0a\\xf7\\x17\\x06\\x74\\x0a\\x61\\x06\\xfb\\x5d\\xf7\\x56\\xf7\\x2a\\xf7\\x0f\\x05\\xb8\\x06\\xa0\\x97\\x94\\x9c\\x0b\\x15\\x44\\xfb\\x8d\"\n\"\\x05\\x8a\\x87\\x8a\\x87\\x87\\x1a\\x78\\x9a\\x7c\\x9f\\x9a\\x93\\x91\\xa0\\x97\\x1e\\xf7\\x29\\xf7\\xa0\\x05\\x0b\\x7f\\xd2\\x80\\x9f\\x85\\xa3\\x7c\\x08\\xa5\"\n\"\\x7b\\x9b\\x6d\\x6b\\x1a\\x46\\x48\\x58\\x30\\x33\\x45\\xba\\xc9\\x86\\x1e\\x9f\\x8a\\x83\\x94\\x7b\\x1b\\x7a\\x82\\x80\\x76\\x1f\\xfb\\x01\\x2b\\x0a\\x99\\x07\"\n\"\\x0b\\x24\\xf0\\xfb\\x13\\x1f\\x85\\x58\\xe3\\x0a\\x0b\\x8b\\x86\\x8c\\x84\\x1f\\x9d\\xfb\\xd4\\x05\\x75\\x8c\\x94\\x81\\x9b\\x1b\\x9b\\x93\\x95\\xa1\\x8c\\x1f\"\n\"\\x6c\\xfb\\x23\\x15\\x69\\x72\\x74\\x6c\\x6c\\xa4\\x73\\xad\\x1f\\x97\\x06\\xad\\xa5\\xa3\\xaa\\xaa\\x71\\xa2\\x69\\x1f\\x0b\\x5a\\x20\\x0a\\xf7\\x55\\x27\\x0a\"\n\"\\x2f\\xf7\\x74\\x06\\x52\\xb9\\xc2\\x71\\xd4\\x1b\\xf7\\x12\\xec\\xe8\\xf7\\x0b\\xf7\\x0c\\x2b\\xe6\\xfb\\x14\\x0b\\x75\\x1d\\x7c\\x80\\x46\\x1d\\x3c\\x1d\\x98\"\n\"\\x92\\x66\\x0a\\x95\\x89\\x8f\\x58\\x1d\\x45\\x1d\\x7f\\x82\\x88\\x87\\x80\\x1a\\x7d\\x96\\x80\\x9a\\x91\\x91\\x8e\\x91\\x93\\x1e\\xf3\\xdf\\xf4\\x37\\x05\\x85\"\n\"\\x93\\x7d\\x0a\\x95\\x89\\x8f\\x3d\\x0a\\xf8\\xab\\xf8\\x3e\\x15\\x97\\x92\\x8f\\x91\\x94\\x1a\\x97\\x80\\x96\\x80\\x86\\x85\\x89\\x86\\x83\\x1e\\xfc\\x53\\xfb\"\n\"\\xad\\x05\\x7f\\x84\\x87\\x85\\x81\\x1a\\x7f\\x95\\x80\\x98\\x90\\x8d\\x8c\\x92\\x96\\x1e\\x0e\\x5d\\x1d\\xe0\\x4d\\x1d\\x68\\x87\\x61\\x71\\x56\\x1b\\x56\\x61\"\n\"\\xa5\\xae\\x87\\x1f\\x9d\\x89\\x83\\x93\\x7c\\x1b\\x0e\\x76\\x1b\\x71\\x74\\xcf\\x0a\\x9e\\x1b\\x95\\xaa\\x1d\\x9e\\x84\\x0b\\x26\\x0a\\xf7\\x70\\x16\\x3f\\x1d\"\n\"\\x0e\\x3c\\x0a\\x90\\x1a\\x9a\\x80\\x96\\x7c\\xf7\\x03\\x1d\\x15\\x97\\x95\\x8d\\x8f\\x98\\x1d\\x81\\x1a\\x7d\\x96\\x80\\x9a\\x92\\x8f\\x8d\\x94\\x96\\x1e\\x0e\"\n\"\\x55\\x1d\\x65\\x1d\\x82\\x81\\x1e\\xfb\\x06\\x2a\\x05\\x80\\x82\\x88\\x86\\x81\\x0a\\x8f\\x30\\x0a\\x1b\\xe1\\xd7\\x5a\\x51\\x90\\x1f\\xf1\\x1d\\x0b\\x76\\x80\"\n\"\\x51\\x0a\\x0b\\xc5\\x0a\\xa8\\xfb\\xd1\\xd2\\x0a\\x0b\\xf8\\x25\\x15\\x9f\\x82\\x97\\x7a\\x7a\\x82\\x80\\x76\\xe6\\x0a\\x84\\x88\\x86\\x80\\x1e\\x83\\x7b\\x0b\"\n\"\\x52\\x1d\\xfb\\x11\\x06\\x71\\x0b\\x76\\x0a\\xc6\\xfc\\x31\\x64\\x06\\x75\\x80\\x82\\x7b\\x7a\\xf7\\x23\\x1d\\x0b\\x15\\xfc\\x1a\\x07\\x4a\\x8a\\x5e\\x5f\\x4c\"\n\"\\x1b\\xfb\\x14\\x06\\x3b\\x0a\\xf7\\x15\\x06\\xe6\\x89\\xd2\\xd2\\x89\\xe6\\x08\\xf8\\x4d\\x0b\\xf7\\x2a\\xf7\\x0a\\x15\\x9b\\x80\\x96\\x7c\\x7a\\x82\\x80\\x76\"\n\"\\x1e\\x3a\\x07\\x76\\x94\\x80\\x9c\\x9b\\x94\\x96\\x9f\\x1e\\x6c\\xb1\\xc0\\x7b\\xc8\\x1b\\x0b\\x7f\\x96\\x7d\\x77\\x1d\\x83\\x80\\x9c\\x1d\\xec\\x0a\\x84\\x88\"\n\"\\x85\\x85\\x1a\\x7f\\x95\\x81\\x97\\x93\\x8e\\x8d\\x97\\x95\\x1e\\x0b\\x82\\xa5\\x1f\\xa5\\x06\\xf7\\x31\\xc8\\x77\\x56\\x58\\x4c\\x6c\\x26\\x3e\\x4f\\x98\\xaa\"\n\"\\x48\\x1f\\x90\\x82\\x86\\x8c\\x86\\x1b\\x7e\\x7e\\x7e\\x7d\\x0b\\x1a\\x62\\xa9\\x73\\xbe\\xee\\x0a\\x74\\x86\\x89\\x79\\x1b\\x71\\x7f\\x94\\x9e\\xa3\\x0b\\x75\"\n\"\\x81\\x51\\x0a\\x0b\\xa5\\xe9\\x0a\\x0b\\x05\\x95\\x3e\\x1d\\xfb\\x02\\x06\\x3b\\x0a\\xb8\\x06\\xfb\\x2c\\x0b\\x05\\xa0\\x06\\x9e\\x98\\xf7\\x40\\x1d\\xfb\\x03\"\n\"\\x50\\x0a\\xaa\\x06\\xfb\\x20\\x0b\\xf8\\x89\\xf7\\x90\\x60\\x1d\\xfc\\x26\\x20\\x0a\\x0e\\xf8\\xd0\\xf7\\x94\\x60\\x1d\\xfc\\xb4\\x20\\x0a\\x0e\\x80\\x96\\x7c\"\n\"\\xf7\\x0d\\x0a\\x7f\\x89\\x0b\\xc5\\x62\\x53\\x90\\x1e\\x77\\x8c\\x94\\x82\\x5c\\x0a\\xf0\\xac\\x1d\\x0b\\xfb\\xd1\\x63\\x06\\xf7\\x13\\x1d\\x0b\\x1e\\xc8\\x9b\"\n\"\\xc1\\xa7\\xee\\x1b\\xe6\\xc2\\x72\\x61\\x7f\\x87\\x80\\x81\\x80\\x1f\\x74\\x75\\x41\\x7c\\x34\\x1b\\x71\\x06\\x0b\\x80\\x70\\x6e\\x1f\\x7c\\x7e\\x85\\x81\\x82\"\n\"\\x1a\\x7d\\xf4\\x0a\\x0b\\xf8\\x4d\\xf8\\xa0\\x15\\xae\\x63\\x5d\\xeb\\x0a\\x0b\\x15\\x95\\x94\\x8e\\x91\\x93\\x1a\\x9a\\x80\\x96\\x7d\\x83\\x87\\x9d\\x1d\\x82\"\n\"\\x88\\x0b\\x63\\x29\\x0a\\xf7\\x18\\x06\\x61\\x1d\\x63\\x0b\\x30\\x07\\xf7\\x17\\x1d\\x30\\x0b\\x25\\x1d\\xb3\\xfc\\x61\\x0b\\xf7\\x01\\x0a\\x96\\x7f\\x99\\x92\"\n\"\\x91\\x68\\x1d\\x76\\x80\\x82\\x7a\\x7b\\x96\\x82\\xa0\\x1f\\x0b\\xf7\\x21\\x1d\\xf7\\x07\\x2a\\x05\\x83\\x0b\\x1e\\xfb\\xf2\\xfc\\x2e\\x05\\x83\\x83\\x89\\xf3\"\n\"\\x0a\\x0b\\x84\\xa2\\x1b\\xa4\\xa0\\xe8\\x0a\\x1a\\x98\\x80\\x96\\x7e\\x83\\x86\\x89\\x82\\x82\\x1e\\x5d\\x0b\\xaa\\x63\\x56\\x9c\\x50\\x1b\\xfb\\x1d\\x29\\x2c\"\n\"\\xfb\\x19\\x0b\\x06\\xde\\xbe\\x98\\xa5\\xa4\\x1f\\x9f\\xa0\\x98\\xad\\xad\\x1a\\xd8\\x4a\\xb3\\xfb\\x13\\x1e\\x32\\x0b\\x91\\x8d\\x92\\x93\\x1e\\xf3\\xdf\\xf4\"\n\"\\x37\\x05\\x85\\x93\\x7d\\x0a\\x0b\\x3a\\x1d\\xf7\\x18\\x22\\x0a\\x63\\xf7\\x84\\x06\\x0b\\x68\\x1f\\x9d\\x6b\\x7d\\x90\\xf7\\x03\\x0a\\x81\\x1a\\x0b\\xe3\\x0a\"\n\"\\x0e\\x82\\x88\\x87\\x80\\x1a\\x7d\\x97\\x80\\x99\\x91\\x91\\x0b\\x1f\\x90\\x82\\x88\\x8c\\x85\\x47\\x1d\\x85\\x9b\\x83\\x1f\\x81\\x9f\\x0b\\x15\\xf7\\x25\\x1d\"\n\"\\x0b\\x73\\x24\\x0a\\xa4\\x1e\\xd5\\x07\\x8a\\xac\\x85\\x90\\x6a\\x8c\\x08\\x0b\\xb6\\x80\\x74\\xaa\\x1f\\xa4\\x77\\x99\\x70\\x6e\\x1a\\x50\\x56\\x5d\\x47\\x1e\"\n\"\\x0e\\x1e\\xfb\\xea\\x07\\x59\\xa6\\x72\\xc3\\xc3\\xb5\\x9e\\xa5\\x98\\x7f\\x97\\x7f\\x86\\x0b\\x72\\x77\\x78\\x72\\x67\\x1d\\x9e\\xa3\\xa4\\x77\\x9f\\x72\\x1f\"\n\"\\x0b\\x95\\xa5\\xa6\\x1f\\x9f\\x9e\\x8f\\x91\\x95\\xa4\\x1d\\x06\\x9f\\x97\\x83\\x0a\\x0b\\x06\\x89\\xf8\\xcf\\x15\\x45\\xfb\\x05\\xd1\\x06\\x0b\\x9b\\x53\\x1b\"\n\"\\xfb\\x00\\x3a\\x47\\x32\\x5f\\x9f\\x63\\xad\\x74\\x1f\\xaa\\x75\\x0b\\x81\\x95\\x7f\\x83\\x88\\x89\\x80\\x82\\x1e\\xfb\\xf3\\xfc\\x2e\\x05\\x85\\x0b\\xf7\\x3a\"\n\"\\x1d\\xf7\\x83\\xe7\\x15\\x0b\\xf7\\x2e\\x1d\\x7e\\x0b\\x1b\\xfb\\x16\\x34\\x4f\\x32\\x3e\\xcc\\x56\\x0b\\x15\\x7e\\x87\\x87\\x75\\x7a\\x1f\\x6a\\x73\\x75\\x7b\"\n\"\\x75\\x1b\\x7b\\x0b\\x96\\x99\\x96\\x84\\x94\\x7f\\x90\\x1f\\x93\\x76\\x67\\x92\\x76\\x1b\\x0b\\x06\\x33\\x66\\x84\\x71\\x64\\x1f\\x47\\x5e\\x68\\x40\\x27\\x1a\"\n\"\\x0b\\x86\\x85\\x1a\\x7f\\x95\\x81\\x97\\x94\\x8d\\x8d\\x97\\x95\\x1e\\x0b\\x96\\x81\\xf7\\x07\\x0a\\x0b\\xd0\\xbe\\xe0\\x94\\x93\\xb6\\x8d\\x08\\x0b\\x7f\\x94\"\n\"\\x77\\x1f\\x5a\\xf8\\x61\\xbc\\x06\\x9f\\x97\\x94\\x0b\\x81\\x1a\\x7e\\x96\\x80\\x99\\x94\\x91\\x8f\\x95\\x93\\x1e\\x0b\\x1e\\xfb\\x06\\x2b\\x05\\x82\\x84\\x87\"\n\"\\x83\\x83\\x1a\\x7d\\x0b\\xa9\\x1a\\xc2\\x5b\\xb8\\x51\\x51\\x5b\\x5e\\x54\\x6d\\x99\\x0b\\x76\\x1b\\x70\\x75\\x80\\x70\\x6e\\x1f\\x7c\\x7e\\x85\\x81\\x0b\\x06\"\n\"\\xf7\\x08\\x0a\\x06\\xfb\\x59\\xf8\\x94\\x05\\x0b\\x94\\x7f\\x9c\\x9c\\x94\\x98\\xa3\\x1e\\xf7\\x01\\x07\\x0b\\x99\\x93\\x93\\x8e\\x91\\x90\\x1e\\xa8\\xa7\\x93\"\n\"\\x90\\x0b\\x76\\x94\\x80\\x9c\\x9b\\x94\\x96\\xa0\\x1e\\x0e\\x94\\x1a\\x98\\x80\\x96\\x7d\\x1e\\x0b\\x06\\x9e\\x93\\x92\\x9c\\x9b\\x83\\x92\\x78\\x1f\\x0b\\x06\"\n\"\\x77\\x7f\\x82\\x7a\\x7b\\x97\\x82\\x9f\\x1f\\x0b\\x07\\xa4\\x99\\x94\\x9c\\x9b\\x7d\\x94\\x72\\x1f\\x0b\\x84\\x84\\x88\\x84\\x83\\x1e\\x2a\\x2f\\x05\\x7f\\x0b\"\n\"\\x15\\x95\\x93\\x8f\\x91\\x94\\x1a\\x99\\x7f\\x97\\x0b\\x1a\\x5a\\x4c\\x67\\x36\\x39\\x48\\xad\\xb5\\x1e\\x0b\", 45974\n};\n"
  },
  {
    "path": "src/fonts/NimbusRoman-Bold.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusRoman_Bold_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x11\\x4e\\x69\\x6d\\x62\\x75\\x73\\x52\\x6f\\x6d\\x61\\x6e\\x2d\\x42\\x6f\\x6c\\x64\\x00\\x01\\x01\\x01\\x33\\xf9\\xbc\"\n\"\\x00\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xc0\\x03\\xf8\\x14\\x04\\xfb\\x01\\x0c\\x03\\xd0\\x0c\\x04\\xfb\\x3c\\xfb\\xe9\\xfa\\xcb\\xfa\\xa8\"\n\"\\x05\\x1c\\x28\\x98\\x0f\\x1c\\x28\\xab\\x11\\xbd\\x1d\\x00\\x00\\xb4\\xf9\\x12\\x01\\xa6\\x02\\x00\\x01\\x00\\x08\\x00\\x0e\\x00\\x13\\x00\\x1d\\x00\\x24\\x00\"\n\"\\x2b\\x00\\x35\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x74\\x00\\x7a\\x00\\x84\\x00\\x8b\\x00\\x8e\\x00\"\n\"\\x95\\x00\\x9c\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\\x00\\xcd\\x00\\xd9\\x00\\xe3\\x00\\xe7\\x00\\xf2\\x00\\xf4\\x00\\xfa\\x01\\x04\\x01\"\n\"\\x0b\\x01\\x12\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\\x01\\x4d\\x01\\x53\\x01\\x59\\x01\\x5f\\x01\\x6b\\x01\\x6f\\x01\\x71\\x01\\x77\\x01\"\n\"\\x7d\\x01\\x89\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\\x01\\xc2\\x01\\xcd\\x01\\xd0\\x01\\xd2\\x01\\xd5\\x01\\xdb\\x01\\xe1\\x01\\xed\\x01\"\n\"\\xf0\\x01\\xf6\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\\x02\\x27\\x02\\x33\\x02\\x38\\x02\\x3e\\x02\\x4b\\x02\\x52\\x02\\x59\\x02\\x60\\x02\"\n\"\\x6f\\x02\\x7b\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\\x02\\xa8\\x02\\xb3\\x02\\xb9\\x02\\xbf\\x02\\xc9\\x02\\xcd\\x02\\xd3\\x02\\xda\\x02\"\n\"\\xe3\\x02\\xec\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\\x03\\x2b\\x03\\x34\\x03\\x3d\\x03\\x46\\x03\\x4f\\x03\\x58\\x03\\x61\\x03\\x6a\\x03\"\n\"\\x73\\x03\\x7c\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\\x03\\xbb\\x03\\xc4\\x03\\xcd\\x03\\xd6\\x03\\xdf\\x03\\xe8\\x03\\xf1\\x03\\xfa\\x04\"\n\"\\x03\\x04\\x0c\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\\x04\\x4b\\x04\\x54\\x04\\x5d\\x04\\x66\\x04\\x6f\\x04\\x78\\x04\\x81\\x04\\x8a\\x04\"\n\"\\x93\\x04\\x9c\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\\xed\\x04\\xf6\\x04\\xff\\x05\\x08\\x05\\x11\\x05\\x1a\\x05\"\n\"\\x23\\x05\\x2c\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\\x05\\x6b\\x05\\x74\\x05\\x7d\\x05\\x86\\x05\\x8f\\x05\\x98\\x05\\xa1\\x05\\xaa\\x05\"\n\"\\xb3\\x05\\xbc\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\\x05\\xfb\\x06\\x04\\x06\\x0d\\x06\\x16\\x06\\x1f\\x06\\x28\\x06\\x31\\x06\\x3a\\x06\"\n\"\\x43\\x06\\x4c\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\\x06\\x85\\x06\\x90\\x06\\x9a\\x06\\xa3\\x06\\xac\\x06\\xb5\\x06\\xbf\\x06\\xc6\\x06\"\n\"\\xcf\\x06\\xdb\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\\x07\\x11\\x07\\x15\\x07\\x1b\\x07\\x21\\x07\\x26\\x07\\x2d\\x07\\x3a\\x07\\x40\\x07\"\n\"\\x46\\x07\\x50\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\\x07\\x86\\x07\\x8f\\x07\\x92\\x07\\x9a\\x07\\xa3\\x07\\xae\\x07\\xb4\\x07\\xb9\\x07\"\n\"\\xbe\\x07\\xc4\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\\x08\\x05\\x08\\x0a\\x08\\x10\\x08\\x12\\x08\\x19\\x08\\x21\\x08\\x29\\x08\\x33\\x08\"\n\"\\x3d\\x08\\x49\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\\x08\\x8c\\x08\\x97\\x08\\x9c\\x08\\xa8\\x08\\xb4\\x08\\xba\\x08\\xc0\\x08\\xc6\\x08\"\n\"\\xd2\\x08\\xd6\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\\x09\\x0b\\x09\\x11\\x09\\x1c\\x09\\x22\\x09\\x2e\\x09\\x38\\x09\\x40\\x09\\x42\\x09\"\n\"\\x48\\x09\\x55\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\\x09\\x93\\x09\\x9e\\x09\\xa4\\x09\\xa7\\x09\\xa9\\x09\\xb0\\x09\\xbc\\x09\\xca\\x09\"\n\"\\xcd\\x09\\xda\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\\x0a\\x0f\\x0a\\x17\\x0a\\x22\\x0a\\x2e\\x0a\\x34\\x0a\\x39\\x0a\\x42\\x0a\\x47\\x0a\"\n\"\\x50\\x0a\\x53\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\\x0a\\x7c\\x0a\\x89\\x0a\\x90\\x0a\\x9d\\x0a\\xa4\\x0a\\xab\\x0a\\xb2\\x0a\\xb9\\x0a\"\n\"\\xc0\\x0a\\xc7\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\\x0a\\xf8\\x0a\\xff\\x0b\\x06\\x0b\\x0d\\x0b\\x14\\x0b\\x1b\\x0b\\x22\\x0b\\x29\\x0b\"\n\"\\x30\\x0b\\x37\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\\x0b\\x68\\x0b\\x6f\\x0b\\x76\\x0b\\x7d\\x0b\\x84\\x0b\\x8b\\x0b\\x92\\x0b\\x99\\x0b\"\n\"\\xa0\\x0b\\xa7\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\\x0b\\xd8\\x0b\\xdf\\x0b\\xe6\\x0b\\xed\\x0b\\xf4\\x0b\\xfb\\x0c\\x02\\x0c\\x09\\x0c\"\n\"\\x10\\x0c\\x17\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\\x0c\\x48\\x0c\\x4d\\x0c\\x56\\x0c\\x5d\\x0c\\x64\\x0c\\x73\\x0c\\x87\\x0c\\x93\\x0c\"\n\"\\x98\\x0c\\x9e\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\\x0c\\xd1\\x0c\\xd7\\x0c\\xe1\\x0c\\xe5\\x0c\\xe9\\x0d\\x1f\\x0d\\x5f\\x0d\\x70\\x0d\"\n\"\\x7c\\x41\\x45\\x61\\x63\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\\x6c\\x70\\x68\\x61\\x41\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x41\\x6d\\x61\"\n\"\\x63\\x72\\x6f\\x6e\\x41\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x42\\x65\\x74\\x61\\x43\\x61\\x63\\x75\\x74\\x65\\x43\"\n\"\\x63\\x61\\x72\\x6f\\x6e\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x43\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x43\\x68\\x69\\x44\\x63\\x61\"\n\"\\x72\\x6f\\x6e\\x44\\x63\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\\x62\\x72\\x65\\x76\\x65\\x45\\x63\\x61\\x72\\x6f\\x6e\\x45\\x64\\x6f\\x74\\x61\\x63\"\n\"\\x63\\x65\\x6e\\x74\\x45\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x45\\x70\\x73\\x69\"\n\"\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x75\\x72\\x6f\\x47\\x61\\x6d\\x6d\\x61\\x47\\x62\\x72\\x65\"\n\"\\x76\\x65\\x47\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x47\\x64\\x6f\\x74\\x61\\x63\\x63\"\n\"\\x65\\x6e\\x74\\x48\\x62\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x49\\x4a\\x49\\x62\\x72\\x65\\x76\\x65\\x49\\x64\\x6f\\x74\\x61\\x63\"\n\"\\x63\\x65\\x6e\\x74\\x49\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x49\\x6f\\x74\\x61\\x49\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\"\n\"\\x69\\x73\\x49\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\\x64\\x65\\x4a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x4b\\x61\\x70\\x70\"\n\"\\x61\\x4b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\\x63\\x75\\x74\\x65\\x4c\\x61\\x6d\\x62\\x64\\x61\\x4c\\x63\\x61\\x72\\x6f\\x6e\\x4c\"\n\"\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\\x4d\\x75\\x4e\\x61\\x63\\x75\\x74\\x65\\x4e\\x63\\x61\\x72\\x6f\\x6e\\x4e\\x63\\x6f\"\n\"\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\\x76\\x65\\x4f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x4f\\x6d\"\n\"\\x61\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\"\n\"\\x6f\\x73\\x4f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\\x69\\x50\\x69\\x50\\x73\\x69\\x52\\x61\\x63\\x75\\x74\\x65\\x52\\x63\\x61\\x72\\x6f\"\n\"\\x6e\\x52\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\\x6f\\x53\\x61\\x63\\x75\\x74\\x65\\x53\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x53\\x63\"\n\"\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x53\\x69\\x67\\x6d\\x61\\x54\\x61\\x75\\x54\\x62\\x61\"\n\"\\x72\\x54\\x63\\x61\\x72\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x54\\x68\\x65\\x74\\x61\\x55\\x62\\x72\\x65\\x76\\x65\\x55\\x68\"\n\"\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x55\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\"\n\"\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x55\\x72\\x69\\x6e\\x67\"\n\"\\x55\\x74\\x69\\x6c\\x64\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x57\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\"\n\"\\x57\\x67\\x72\\x61\\x76\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x59\\x67\\x72\\x61\\x76\\x65\\x5a\\x61\\x63\\x75\\x74\\x65\\x5a\"\n\"\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\\x72\\x65\\x76\\x65\\x61\\x65\\x61\\x63\\x75\\x74\\x65\\x61\\x66\\x69\\x69\\x30\\x30\"\n\"\\x32\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x39\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x32\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x36\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x32\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\"\n\"\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x33\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x33\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x37\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x30\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x34\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x34\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x37\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x34\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x31\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x35\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x38\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x35\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\"\n\"\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x37\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x36\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x31\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x34\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x37\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x38\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x31\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x38\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x35\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x38\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x32\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\"\n\"\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x39\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x31\\x30\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x33\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x36\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x31\\x30\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x31\\x30\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x38\\x34\\x36\\x61\\x66\\x69\\x69\\x36\\x31\"\n\"\\x32\\x34\\x38\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\\x69\\x36\\x31\\x33\\x35\\x32\\x61\\x6c\\x70\\x68\\x61\\x61\\x6c\\x70\\x68\\x61\\x74\"\n\"\\x6f\\x6e\\x6f\\x73\\x61\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\\x61\\x6e\\x67\\x6c\\x65\\x72\\x69\\x67\\x68\\x74\\x61\\x6f\"\n\"\\x67\\x6f\\x6e\\x65\\x6b\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x61\\x72\\x72\\x6f\\x77\\x62\"\n\"\\x6f\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\\x77\\x72\\x69\\x67\\x68\\x74\\x61\"\n\"\\x72\\x72\\x6f\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x62\\x73\\x65\\x62\\x65\\x74\\x61\\x63\"\n\"\\x61\\x63\\x75\\x74\\x65\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x63\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\"\n\"\\x63\\x68\\x69\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\\x63\\x6c\\x75\\x62\\x64\\x63\\x61\\x72\\x6f\\x6e\\x64\\x63\\x72\\x6f\\x61\"\n\"\\x74\\x64\\x65\\x6c\\x74\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x62\\x72\\x65\\x76\\x65\"\n\"\\x65\\x63\\x61\\x72\\x6f\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x65\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x65\\x6e\"\n\"\\x67\\x65\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x71\\x75\\x69\\x76\"\n\"\\x61\\x6c\\x65\\x6e\\x63\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\\x65\\x74\\x61\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x78\\x63\\x6c\\x61\\x6d\"\n\"\\x64\\x62\\x6c\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\\x65\\x6d\\x61\\x6c\\x65\\x66\\x72\\x61\\x6e\\x63\\x67\\x61\\x6d\\x6d\\x61\\x67\\x62\"\n\"\\x72\\x65\\x76\\x65\\x67\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x67\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x64\\x6f\\x74\\x61\"\n\"\\x63\\x63\\x65\\x6e\\x74\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x68\\x62\\x61\\x72\\x68\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\"\n\"\\x68\\x65\\x61\\x72\\x74\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\\x65\\x69\\x6a\\x69\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x69\\x6e\\x66\\x69\\x6e\\x69\\x74\"\n\"\\x79\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x74\\x70\\x69\\x6e\\x74\"\n\"\\x65\\x72\\x73\\x65\\x63\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x69\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x69\\x6f\\x74\\x61\"\n\"\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x6f\\x74\"\n\"\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x6b\\x61\\x70\\x70\\x61\\x6b\\x63\\x6f\\x6d\"\n\"\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\\x61\\x6e\\x64\\x69\\x63\\x6c\\x61\\x63\\x75\\x74\\x65\\x6c\\x61\\x6d\\x62\\x64\\x61\"\n\"\\x6c\\x63\\x61\\x72\\x6f\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6c\\x64\\x6f\\x74\\x6c\\x65\\x73\\x73\\x65\\x71\\x75\\x61\\x6c\\x6c\"\n\"\\x69\\x72\\x61\\x6c\\x6f\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x6d\\x75\\x73\"\n\"\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\\x74\\x65\\x6e\\x61\\x70\\x6f\\x73\\x74\\x72\\x6f\\x70\\x68\\x65\\x6e\\x63\\x61\\x72\"\n\"\\x6f\\x6e\\x6e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x71\\x75\\x61\\x6c\"\n\"\\x6e\\x75\\x6f\\x62\\x72\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x6f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x65\\x67\"\n\"\\x61\\x6f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x72\"\n\"\\x74\\x68\\x6f\\x67\\x6f\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x70\\x61\\x72\\x74\\x69\\x61\\x6c\\x64\\x69\\x66\\x66\\x70\\x65\"\n\"\\x73\\x65\\x74\\x61\\x70\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x62\\x73\\x65\\x74\\x70\\x72\\x6f\\x70\"\n\"\\x65\\x72\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\\x6f\\x74\\x65\\x72\\x65\\x76\\x65\\x72\\x73\\x65\\x64\\x72\\x61\\x63\\x75\\x74\\x65\"\n\"\\x72\\x61\\x64\\x69\\x63\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x72\\x65\\x76\\x6c\\x6f\\x67\\x69\"\n\"\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\\x73\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x73\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\"\n\"\\x65\\x78\\x73\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\\x65\\x63\\x6f\\x6e\\x64\\x73\\x69\\x67\\x6d\\x61\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\"\n\"\\x63\\x65\\x73\\x70\\x61\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x73\\x75\\x6e\\x74\\x61\\x75\\x74\\x62\\x61\\x72\\x74\\x63\\x61\\x72\\x6f\\x6e\"\n\"\\x74\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x62\\x72\\x65\\x76\\x65\\x75\\x68\\x75\\x6e\"\n\"\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x75\\x6e\\x64\\x65\\x72\\x73\\x63\\x6f\\x72\\x65\\x64\\x62\\x6c\\x75\\x6e\\x69\"\n\"\\x30\\x30\\x41\\x30\\x75\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\\x32\\x31\\x41\\x75\\x6e\\x69\\x30\\x32\\x31\\x42\\x75\\x6e\\x69\\x30\\x32\\x43\\x39\"\n\"\\x75\\x6e\\x69\\x30\\x33\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\\x6e\\x69\\x30\\x33\\x41\\x39\\x75\\x6e\\x69\\x30\\x33\\x42\\x43\\x75\\x6e\\x69\\x30\"\n\"\\x33\\x43\\x32\\x75\\x6e\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\\x30\\x44\\x75\\x6e\\x69\\x30\\x34\\x35\\x30\\x75\\x6e\\x69\\x30\\x34\\x35\\x44\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x39\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\\x69\\x30\\x34\\x39\\x36\\x75\\x6e\\x69\\x30\\x34\\x39\\x37\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x39\\x38\\x75\\x6e\\x69\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\\x41\\x75\\x6e\\x69\\x30\\x34\\x39\\x42\\x75\\x6e\\x69\\x30\\x34\\x39\\x43\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x39\\x44\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\\x30\\x34\\x41\\x31\\x75\\x6e\\x69\\x30\\x34\\x41\\x32\\x75\\x6e\\x69\\x30\\x34\\x41\"\n\"\\x33\\x75\\x6e\\x69\\x30\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\\x75\\x6e\\x69\\x30\\x34\\x41\\x45\\x75\\x6e\\x69\\x30\\x34\\x41\\x46\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x42\\x30\\x75\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\\x34\\x42\\x32\\x75\\x6e\\x69\\x30\\x34\\x42\\x33\\x75\\x6e\\x69\\x30\\x34\\x42\\x36\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\\x6e\\x69\\x30\\x34\\x42\\x39\\x75\\x6e\\x69\\x30\\x34\\x42\\x41\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x42\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\\x43\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x43\\x75\\x6e\\x69\\x30\\x34\\x44\\x38\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x45\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\\x69\\x30\\x34\\x45\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x39\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x45\\x45\\x75\\x6e\\x69\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\\x45\\x75\\x6e\\x69\\x32\\x30\\x41\\x46\\x75\\x6e\\x69\\x32\\x31\\x32\\x36\\x75\\x6e\"\n\"\\x69\\x32\\x32\\x31\\x35\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\\x32\\x32\\x32\\x37\\x75\\x6e\\x69\\x32\\x32\\x32\\x38\\x75\\x6e\\x69\\x32\\x32\\x39\"\n\"\\x35\\x75\\x6e\\x69\\x32\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x75\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x75\\x70\\x73\"\n\"\\x69\\x6c\\x6f\\x6e\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\"\n\"\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x72\\x69\\x6e\\x67\\x75\\x74\\x69\\x6c\\x64\\x65\\x77\\x61\"\n\"\\x63\\x75\\x74\\x65\\x77\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x77\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x77\\x67\\x72\\x61\\x76\\x65\\x78\\x69\"\n\"\\x79\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\\x76\\x65\\x7a\\x61\\x63\\x75\\x74\\x65\\x7a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\"\n\"\\x74\\x7a\\x65\\x74\\x61\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\"\n\"\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x43\"\n\"\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\"\n\"\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x4e\"\n\"\\x69\\x6d\\x62\\x75\\x73\\x20\\x52\\x6f\\x6d\\x61\\x6e\\x20\\x42\\x6f\\x6c\\x64\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x52\\x6f\\x6d\\x61\\x6e\\x00\\xd4\\x02\\x00\"\n\"\\x01\\x00\\x0a\\x00\\x13\\x00\\x1b\\x00\\x3e\\x00\\x98\\x00\\xd7\\x01\\x1e\\x01\\x55\\x01\\x6c\\x01\\x79\\x01\\x84\\x01\\x8b\\x01\\x95\\x01\\xa7\\x02\\x23\\x02\"\n\"\\x91\\x02\\xd8\\x03\\x16\\x03\\x19\\x03\\x9a\\x04\\x0c\\x04\\x4d\\x04\\x82\\x04\\xbb\\x04\\xdd\\x04\\xf9\\x05\\x04\\x05\\x09\\x05\\x17\\x05\\x24\\x05\\x2f\\x05\"\n\"\\x36\\x05\\x3e\\x05\\x48\\x05\\x51\\x05\\x58\\x05\\x60\\x05\\x65\\x05\\x6b\\x05\\xcd\\x05\\xd7\\x05\\xf1\\x05\\xf5\\x06\\x00\\x06\\x1a\\x06\\x24\\x06\\x3e\\x06\"\n\"\\x4d\\x06\\x64\\x06\\x78\\x06\\x7d\\x06\\x96\\x06\\xa8\\x06\\xb4\\x06\\xd1\\x06\\xe2\\x06\\xeb\\x06\\xee\\x06\\xfa\\x07\\x03\\x07\\x0e\\x07\\x16\\x07\\x27\\x07\"\n\"\\x2f\\x07\\x32\\x07\\x3b\\x07\\x4a\\x07\\x59\\x07\\x62\\x07\\x6b\\x07\\x72\\x07\\x80\\x07\\x88\\x07\\x94\\x08\\x14\\x08\\x5a\\x08\\xca\\x09\\x08\\x09\\x73\\x09\"\n\"\\x78\\x09\\xdf\\x0a\\x0e\\x0a\\x5a\\x0a\\x9f\\x0a\\xfd\\x0b\\x28\\x0b\\x7f\\x0b\\xd5\\x0c\\x27\\x0c\\x70\\x0c\\xb0\\x0c\\xf0\\x0d\\x1e\\x0d\\x34\\x0d\\x4b\\x0d\"\n\"\\x68\\x0d\\x9d\\x0d\\xa8\\x0d\\xd2\\x0e\\x00\\x0e\\x2e\\x0e\\x50\\x0e\\x65\\x0e\\x78\\x0e\\x90\\x0e\\x95\\x0e\\xa8\\x0e\\xc6\\x0e\\xe6\\x0e\\xf5\\x0f\\x1f\\x0f\"\n\"\\x30\\x0f\\x58\\x0f\\x70\\x0f\\x7d\\x0f\\xa1\\x0f\\xbc\\x0f\\xdf\\x0f\\xef\\x10\\x11\\x10\\x19\\x10\\x3b\\x10\\x4d\\x10\\x6c\\x10\\x80\\x10\\x98\\x10\\xb4\\x10\"\n\"\\xd0\\x10\\xec\\x11\\x07\\x11\\x11\\x11\\x18\\x11\\x32\\x11\\x4b\\x11\\x64\\x11\\x75\\x11\\x83\\x11\\x8e\\x11\\xa6\\x11\\xbe\\x11\\xd5\\x11\\xec\\x12\\x03\\x12\"\n\"\\x1a\\x12\\x29\\x12\\x3e\\x12\\x4b\\x12\\x4f\\x12\\x5d\\x12\\x69\\x12\\x7e\\x12\\x93\\x12\\xa8\\x12\\xbd\\x12\\xd1\\x12\\xe5\\x12\\xf2\\x13\\x00\\x13\\x14\\x13\"\n\"\\x26\\x13\\x39\\x13\\x4c\\x13\\x5a\\x13\\x68\\x13\\x7b\\x13\\x8e\\x13\\xa0\\x13\\xb2\\x13\\xc3\\x13\\xd4\\x13\\xd9\\x13\\xe3\\x13\\xf3\\x14\\x03\\x14\\x13\\x14\"\n\"\\x23\\x14\\x33\\x14\\x43\\x14\\x47\\x14\\x56\\x14\\x65\\x14\\x72\\x14\\x80\\x14\\x8e\\x14\\x9c\\x14\\xa8\\x14\\xaf\\x14\\xbc\\x14\\xc9\\x14\\xd6\\x14\\xe3\\x14\"\n\"\\xf0\\x14\\xf8\\x15\\x04\\x15\\x10\\x15\\x1c\\x15\\x28\\x15\\x34\\x15\\x40\\x15\\x4c\\x15\\x58\\x15\\x64\\x15\\x6f\\x15\\x7a\\x15\\x85\\x15\\x90\\x15\\x9b\\x15\"\n\"\\xa6\\x15\\xb1\\x15\\xbc\\x15\\xc7\\x15\\xd0\\x06\\x56\\x8e\\x7c\\x9c\\x8d\\xc3\\x08\\x0b\\x07\\x8d\\x53\\x7c\\x7a\\x56\\x88\\x08\\x0b\\x15\\xc3\\x06\\xf7\\x22\"\n\"\\xe3\\x05\\x0b\\x76\\x1d\\x58\\x96\\xa1\\x78\\xbc\\x1b\\xb6\\xaa\\x9b\\xb4\\xb1\\x1f\\xfb\\x57\\xc4\\x15\\x6c\\x70\\x77\\x7f\\x73\\x1b\\x6d\\x76\\xa6\\xb3\\xc5\"\n\"\\xb5\\xb5\\xdb\\xa0\\x1f\\x0b\\xf9\\x51\\xf9\\x38\\x15\\xfb\\x70\\x72\\x06\\xd8\\x86\\xa0\\x76\\x42\\x1a\\xfb\\xc5\\x07\\xfb\\x28\\x53\\x46\\xfb\\x0b\\x24\\x5f\"\n\"\\xc6\\xf7\\x1c\\x1e\\xf7\\xe2\\x07\\x8d\\xd8\\x99\\x98\\xdc\\x8d\\x08\\xa4\\xfb\\xe6\\x72\\x07\\xd0\\x85\\x96\\x7e\\x8d\\x42\\x08\\xfb\\xe2\\x07\\x29\\xa0\\x5a\"\n\"\\xc8\\x5f\\x1e\\x68\\xbb\\xcb\\x79\\xd4\\x1b\\xd5\\xd1\\xa1\\xb0\\xb6\\x1f\\xb8\\xb1\\xa5\\xd7\\xe8\\x1a\\xf7\\xd3\\x07\\x8c\\xc7\\x99\\x9b\\xca\\x94\\x08\\x0b\"\n\"\\xf8\\x26\\xf7\\x11\\x15\\xbe\\x1d\\xf7\\x90\\x06\\x85\\xdf\\x7c\\xba\\x6b\\xb1\\x08\\xb2\\x6b\\x5c\\x9f\\x53\\x1b\\xfb\\x10\\x37\\x28\\xfb\\x26\\xfb\\x26\\xdd\"\n\"\\x2b\\xf7\\x10\\xdc\\xbc\\xaa\\xe9\\xcc\\x1f\\xfb\\x9a\\xf7\\x3f\\x15\\xf7\\x0c\\x8e\\x9d\\xb3\\xbc\\x1b\\xba\\x9a\\x69\\xfb\\x03\\x8d\\x1f\\x7c\\x07\\x0b\\xf8\"\n\"\\x1d\\xf9\\x47\\x15\\xfb\\x66\\xfb\\x28\\xfb\\x27\\xfb\\x65\\xfb\\x63\\xf7\\x27\\xfb\\x27\\xf7\\x63\\xf7\\x63\\xf7\\x27\\xf7\\x27\\xf7\\x64\\xf7\\x60\\xfb\\x28\"\n\"\\xf7\\x2b\\xfb\\x5e\\x1f\\x8a\\x6a\\x15\\xf7\\x02\\xcb\\xfb\\x0d\\xfb\\x64\\xfb\\x62\\x4e\\xfb\\x01\\xfb\\x08\\xfb\\x07\\x4d\\xf7\\x01\\xf7\\x5f\\xf7\\x6c\\xca\"\n\"\\xf7\\x08\\xf7\\x09\\x1f\\x0b\\xf7\\x8f\\xf8\\x6d\\x15\\xfb\\x14\\x29\\x22\\xfb\\x1c\\xfb\\x23\\xe9\\x24\\xf7\\x18\\xf7\\x16\\xea\\xf2\\xf7\\x20\\xf7\\x21\\x2b\"\n\"\\xf2\\xfb\\x15\\x1f\\x8c\\x6c\\x15\\xc5\\x9e\\x54\\xfb\\x38\\xfb\\x2e\\x77\\x57\\x51\\x50\\x77\\xbe\\xf7\\x27\\xf7\\x43\\x9d\\xbf\\xc9\\x1f\\x0b\\x15\\xfb\\x1d\"\n\"\\xf7\\x31\\x05\\x9d\\x7b\\x78\\x95\\x78\\x1b\\x71\\x76\\x77\\x72\\x77\\x96\\x7d\\xa8\\x79\\x46\\x1d\\xf7\\x93\\x63\\x1d\\xb7\\x83\\x93\\xcb\\x1d\\xf7\\x83\\x07\"\n\"\\x0b\\x15\\xf1\\x1d\\xa8\\xae\\xaf\\x6d\\xa9\\x68\\x1f\\x0e\\x15\\xc3\\x06\\xf7\\x22\\x59\\x1d\\xc0\\x8d\\x08\\x9e\\x9f\\xfb\\xd0\\xb5\\x1d\\x0b\\x5d\\x65\\x65\"\n\"\\x5d\\x5b\\xaf\\x66\\xba\\xbb\\xb1\\xaf\\xba\\xbb\\x65\\xb1\\x5c\\x1f\\x0b\\xfa\\x69\\xf9\\x38\\x15\\xfb\\x4a\\x72\\x06\\xc1\\x88\\x9a\\x81\\x6c\\x1a\\x7e\\x88\"\n\"\\x7c\\x87\\x7d\\x1e\\xfb\\x04\\xfb\\xeb\\xfb\\x00\\xf7\\xe4\\x05\\x80\\xad\\x88\\x97\\x95\\x1a\\xa3\\x9a\\x94\\xb7\\x8e\\x1e\\x8d\\x90\\x8b\\x8c\\x91\\x1f\\xa4\"\n\"\\xfb\\xcc\\x72\\x07\\xb4\\x89\\x9f\\x82\\x96\\x73\\xae\\x2b\\x18\\xfb\\x0a\\xfb\\xc8\\xfb\\x0c\\xf8\\x00\\x05\\x86\\x9c\\x89\\x92\\x94\\x1a\\xa8\\x97\\x94\\xbf\"\n\"\\x8f\\x1e\\xa4\\xfb\\xba\\x72\\x07\\xb5\\x85\\x95\\x82\\x9c\\x5a\\xf7\\x68\\xfc\\xee\\x18\\xa7\\x06\\xf7\\x4e\\xf8\\x71\\xf7\\x3f\\xfc\\x71\\x05\\xa6\\x06\\xf7\"\n\"\\x5c\\xf8\\xee\\x98\\xb3\\xa1\\xa0\\xad\\x8e\\x19\\x0b\\xf7\\xe8\\xf7\\xda\\x15\\xf7\\x25\\x75\\x07\\x7c\\x85\\x85\\x86\\x7e\\x1b\\x85\\x82\\x8d\\x90\\x7b\\x1f\"\n\"\\x96\\x6b\\x74\\x8f\\x74\\x1b\\x30\\x49\\x4d\\x37\\x49\\xb4\\x5d\\xf0\\x60\\x1f\\xd0\\x6d\\xa6\\x72\\x6b\\x1a\\x64\\x6d\\x71\\x5e\\x45\\x5d\\xb8\\xe2\\x76\\x1e\"\n\"\\x6f\\xfb\\x39\\xa4\\x06\\xa1\\x96\\x91\\x91\\x94\\x1b\\x90\\x93\\x89\\x87\\x95\\x1f\\x7f\\xa8\\xbd\\x80\\xa8\\x1b\\xe6\\xca\\xc9\\xe5\\xd2\\x65\\xb6\\x27\\xb5\"\n\"\\x1f\\x47\\xa8\\x6f\\xa4\\xad\\x1a\\xac\\xa7\\xa4\\xb1\\xa6\\xa5\\x80\\x76\\xa1\\x1e\\xa0\\x77\\x96\\x79\\x9a\\x5f\\x08\\x0b\\x9b\\x16\\xf7\\x77\\xa4\\x06\\x3f\"\n\"\\x93\\x79\\x9e\\x8a\\xd3\\x08\\xf8\\x26\\x07\\xf8\\x53\\xfc\\xb4\\x05\\xa7\\xf8\\xe1\\x06\\xc4\\x98\\x99\\xcc\\x94\\x1e\\xa4\\xfb\\x6b\\x72\\x07\\xd4\\x84\\x9f\"\n\"\\x76\\x44\\x1a\\xfb\\xc5\\x07\\xfb\\xf1\\xf8\\x41\\x05\\xfb\\x67\\x72\\x06\\x9f\\x9c\\x7c\\x52\\xbb\\x1f\\xfc\\x6e\\x07\\x8a\\x50\\x7b\\x7e\\x44\\x83\\x08\\x0b\"\n\"\\xf9\\x12\\xf7\\x77\\x15\\x6e\\x06\\x6a\\x3d\\x77\\x6c\\x68\\x6b\\x08\\x66\\x62\\x53\\x79\\x3d\\x1b\\x4e\\x79\\x98\\xb6\\x1f\\xf8\\x6c\\x07\\x8d\\xd8\\x99\\x98\"\n\"\\xe0\\x8d\\x08\\xa4\\xfb\\xf1\\x72\\x07\\xcd\\x88\\x9e\\x7b\\x8c\\x57\\x08\\xfc\\x78\\x07\\x8a\\x57\\x7d\\x80\\x44\\x83\\x08\\x72\\xf8\\xd6\\x07\\x0b\\x87\\x1d\"\n\"\\x0e\\xf8\\x78\\xf8\\x6f\\x15\\xf7\\x6d\\x6d\\x07\\x70\\x83\\x85\\x84\\x79\\x1b\\x82\\x7f\\x8e\\x92\\x76\\x1f\\x9c\\x5d\\x6b\\x91\\x64\\x1b\\xfb\\x1c\\x38\\x3e\"\n\"\\xfb\\x13\\x34\\xbf\\x4c\\xf7\\x0b\\x52\\x1f\\xce\\x6b\\x05\\xe3\\x61\\xa3\\x71\\x56\\x1a\\x46\\x5a\\x5f\\x3e\\x50\\x5a\\xa4\\xbc\\x65\\x1e\\x70\\xb0\\x7d\\xac\"\n\"\\x7a\\xd1\\x08\\x6e\\xfb\\x8b\\xa8\\x06\\xa5\\x91\\x93\\x93\\x9b\\x1b\\x93\\x96\\x88\\x84\\xa1\\x1f\\x7a\\xbc\\xb0\\x84\\xb7\\x1b\\xf7\\x28\\xef\\xe0\\xf7\\x12\"\n\"\\xd6\\x5e\\xd6\\x4a\\xab\\x1f\\xfb\\x27\\xd4\\x05\\x3a\\xb3\\x75\\xa4\\xbb\\x1a\\xc9\\xb5\\xb1\\xcf\\xb8\\xb5\\x78\\x66\\xaf\\x1e\\xad\\x68\\x9b\\x6e\\x9f\\x4a\"\n\"\\x08\\x0b\\xf9\\x5f\\xa4\\x15\\x79\\x7e\\x90\\x99\\x81\\x1f\\xfb\\x5d\\xf7\\xb1\\xc6\\x9e\\xa4\\x97\\xa7\\xa5\\x19\\xa8\\xa6\\x9b\\xb3\\xb8\\x1a\\xf7\\x08\\x28\"\n\"\\xc9\\xfb\\x4b\\x1e\\xfb\\xd6\\x72\\x06\\xd3\\x87\\x99\\x7d\\x8d\\x41\\x08\\xfc\\x4e\\x07\\x89\\x41\\x82\\x81\\x3e\\x83\\x08\\x72\\xf7\\xe6\\xa4\\x07\\x3f\\x94\"\n\"\\x81\\x96\\x89\\xd3\\x08\\xf7\\x58\\xa6\\x07\\xf7\\x63\\xfb\\xcd\\x05\\xf7\\x61\\x06\\xfc\\x4b\\xf8\\xec\\x15\\x91\\x8f\\x9a\\x8e\\x91\\x1e\\x95\\x91\\x9b\\x90\"\n\"\\xa4\\x1b\\xe7\\xb0\\x60\\x22\\x4b\\x7c\\x64\\x6b\\x76\\x1f\\x71\\x7a\\x69\\x84\\x3f\\x8a\\x08\\x0b\\xf7\\xbb\\xa3\\x15\\x4e\\x8e\\x80\\x98\\x8a\\xca\\x08\\xf7\"\n\"\\x51\\x07\\xbf\\xa7\\xb6\\xac\\x93\\x94\\x84\\x7b\\x96\\x1e\\x70\\x9e\\x9a\\x82\\xa5\\x1b\\xb0\\xa5\\xa7\\xb1\\xb9\\x69\\xac\\x5c\\x59\\x65\\x71\\x47\\x5c\\x1f\"\n\"\\xdd\\xfb\\x51\\x73\\x07\\xb5\\x86\\x96\\x7f\\x42\\x1d\\x81\\x80\\x60\\x84\\x08\\x73\\xf7\\x9e\\x07\\x0b\\xf8\\x30\\xf7\\x01\\x15\\x61\\x66\\x71\\x7d\\x62\\x1b\"\n\"\\x34\\x54\\xe2\\xf7\\x1c\\xf2\\xab\\xca\\xbf\\x9b\\x9a\\x83\\x80\\x91\\x1f\\x90\\x82\\x8b\\x8b\\x61\\x62\\x1d\\x33\\xfb\\x1c\\x27\\x21\\xfb\\x24\\xfb\\x1f\\xe4\"\n\"\\x29\\xf7\\x11\\xd8\\xc3\\xaa\\xd5\\xc5\\x1f\\x0b\\xf9\\x0e\\xf7\\x85\\x15\\x71\\x06\\x5e\\xfb\\x3a\\x54\\x66\\xfb\\x65\\x88\\x08\\x41\\x06\\xf8\\x0f\\xf9\\x05\"\n\"\\x05\\x9b\\xfc\\xa0\\x07\\x76\\xfb\\x62\\x05\\xa7\\x06\\xbb\\xf7\\x1f\\xb8\\xaa\\xf7\\x27\\x89\\x97\\x8c\\xad\\x8c\\xb0\\x8c\\xfc\\x12\\xfd\\x05\\x18\\x7b\\xf8\"\n\"\\xd8\\x07\\x0b\\x15\\x51\\x5a\\x5a\\x53\\x4f\\xba\\x5b\\xc6\\xc7\\xba\\xba\\xc6\\xc5\\x5b\\xbc\\x44\\x1d\\x6f\\x6b\\x6c\\x70\\x71\\x6a\\x6c\\x71\\xa5\\xab\\xab\"\n\"\\xa6\\xa6\\xaa\\x1f\\x0e\\xf7\\x0e\\x07\\xc2\\x99\\xa1\\xaf\\x9d\\x96\\x84\\x7f\\x86\\x88\\x85\\x85\\x81\\x1e\\x82\\x7c\\x87\\x81\\x80\\x1a\\x6c\\xa5\\x73\\xad\"\n\"\\x0b\\xd3\\x1d\\x8f\\x7e\\x9b\\xb0\\x1a\\xf7\\x9f\\x07\\x0b\\xf9\\x44\\xd6\\x1d\\x0b\\x9f\\x93\\x95\\xa2\\x1a\\xa6\\x78\\x9c\\x6e\\x78\\x7a\\x82\\x78\\x0b\\x77\"\n\"\\x07\\xa8\\x8a\\x9b\\x76\\x89\\x66\\x08\\xfb\\xba\\x07\\x0b\\xa0\\xa5\\x8e\\x08\\x9f\\xfb\\x61\\x77\\x07\\xa8\\x0b\\x08\\xa8\\xf7\\x43\\x71\\x06\\x0b\\x3a\\x08\"\n\"\\xa8\\xf7\\x31\\x71\\x06\\x0b\\x07\\x89\\xb0\\x9b\\xa0\\xa9\\x8c\\x08\\x9f\\x0b\\x8c\\x61\\x08\\xfb\\xba\\x07\\x8a\\x61\\x0b\\x08\\x72\\xf7\\xe5\\xa4\\x07\\x0b\"\n\"\\x51\\x1f\\x8a\\x5b\\x15\\xab\\xa6\\x0b\\x82\\x78\\x7a\\x1e\\x0e\\x1f\\xf7\\x22\\x33\\x05\\x0e\\xf9\\x25\\xf7\\x2c\\x15\\x50\\x4d\\x6b\\x73\\x5a\\x78\\x08\\x7f\"\n\"\\x6e\\x6a\\x85\\x6f\\x1b\\x49\\x4c\\xae\\xbf\\x6e\\x1f\\x6e\\xc0\\x7d\\xd2\\xf0\\x1a\\xf7\\x63\\xcb\\xf7\\x02\\xf7\\x0c\\xba\\xb5\\x79\\x65\\xb7\\x1e\\xb6\\x65\"\n\"\\xa3\\x68\\xad\\x40\\x08\\xa4\\xf7\\x7e\\x70\\x06\\x67\\x7c\\x82\\x81\\x76\\x1b\\x82\\x7d\\x8f\\x95\\x75\\x1f\\xa3\\x52\\x5a\\x96\\x5b\\x1b\\xfb\\x5c\\xfb\\x29\"\n\"\\xfb\\x2d\\xfb\\x61\\xfb\\x63\\xf7\\x26\\xfb\\x25\\xf7\\x64\\xf7\\x07\\xcf\\xae\\xf7\\x03\\xf0\\x1f\\x0b\\xf8\\x95\\xa4\\x15\\x7e\\x1d\\xf7\\xf9\\x07\\x0b\\x15\"\n\"\\x58\\x1d\\x9f\\xfb\\xd0\\x77\\x9e\\x06\\xc0\\x89\\x9a\\x78\\x89\\x51\\x08\\xfc\\x67\\x21\\x1d\\x78\\x77\\xf7\\xd0\\x06\\x0b\\x15\\xf3\\x8f\\x1d\\xf8\\xa1\\x07\"\n\"\\x89\\xc5\\x9a\\x9e\\x2c\\x1d\\x06\\x0e\\xe0\\x1d\\x6f\\x1b\\x80\\x89\\x8c\\x96\\x72\\x1f\\x63\\x9d\\x05\\x98\\x6e\\x73\\x91\\x76\\x1b\\x4e\\x67\\x64\\x35\\x79\"\n\"\\x1f\\x0e\\xb0\\x1d\\xa8\\xae\\xaf\\x6d\\xa9\\x68\\x1f\\x0e\\xcf\\x86\\x99\\x7c\\x8d\\x43\\x08\\xfc\\x4e\\x07\\x8a\\x4d\\x7d\\x75\\x5e\\x87\\x08\\x88\\x81\\x89\"\n\"\\x89\\x80\\x1f\\xf7\\x8a\\x0b\\x22\\x1d\\xac\\x9f\\x92\\x95\\xa2\\x1a\\xa5\\x78\\x9d\\x6e\\x78\\x60\\x1d\\xf7\\x11\\xf8\\x35\\x15\\x5d\\x65\\x65\\x5d\\x5b\\xaf\"\n\"\\x66\\xba\\xbc\\xb0\\xaf\\xbb\\xb9\\x65\\xb2\\x5c\\x1f\\x0e\\x77\\x98\\x06\\xc0\\x89\\x9b\\x78\\x89\\x51\\x08\\xfb\\x27\\x07\\x28\\xc4\\x5a\\xf7\\x06\\xc4\\x0b\"\n\"\\xa3\\x1d\\xed\\x05\\x0e\\x2d\\x08\\xa1\\xf7\\x4a\\xfc\\x9b\\x77\\x9d\\x06\\xc1\\x89\\x9a\\x79\\xeb\\x1d\\x55\\x88\\x08\\x79\\x77\\xf8\\xa7\\x06\\x0b\\xfb\\x49\"\n\"\\x54\\x90\\x77\\x05\\x8e\\x93\\x90\\x8c\\x8e\\x1b\\xa3\\x96\\x77\\x5f\\x1f\\x0b\\xfb\\x54\\x73\\x07\\xb9\\x82\\x91\\x85\\x8c\\x60\\x08\\x0b\\x95\\x95\\x1e\\xa1\"\n\"\\xa1\\xa3\\x97\\xa2\\x1b\\xae\\x9c\\x70\\x53\\x1f\\xfb\\x86\\x07\\x8a\\x65\\x7e\\x7b\\x6a\\x88\\x08\\x73\\xf7\\x7f\\x07\\x0b\\x1a\\xca\\x67\\xb5\\x55\\x5d\\x6e\"\n\"\\x6e\\x5e\\x60\\xa5\\x6f\\xb3\\x8f\\xe3\\x1d\\x0b\\x78\\x61\\x1d\\x9e\\xc0\\x8d\\x08\\x9e\\x0b\\xc5\\x1d\\x0e\\xfb\\x52\\x73\\x07\\xac\\x8a\\x9c\\x78\\x8c\\x65\"\n\"\\x08\\x0b\\x06\\xa8\\x8c\\x9c\\x75\\x89\\x66\\x08\\x0b\\x06\\x38\\x68\\x84\\x72\\x66\\x1f\\x4a\\x60\\x69\\x0b\\x07\\x66\\x8d\\x7b\\x75\\x6d\\x1b\\x0b\\xbe\\xba\"\n\"\\xa8\\xb9\\xa4\\x1e\\x75\\x99\\x86\\x89\\x8a\\x8a\\x83\\x87\\x19\\x81\\x0b\\x1e\\xad\\xa6\\xad\\x9c\\xb3\\x1b\\x0e\\x7a\\x45\\x1d\\x20\\x1d\\xf8\\x67\\x07\\x89\"\n\"\\xc5\\x9a\\x0b\\x1a\\x59\\x8c\\x9c\\x75\\xb1\\x1b\\xb5\\xa5\\xa3\\xb2\\xc9\\x48\\xbb\\x0b\\xa3\\x15\\x69\\x8f\\x7e\\x9a\\xb1\\x1a\\xf8\\x10\\xfb\\x54\\x73\\x07\"\n\"\\x0b\\x15\\xa7\\x8f\\x9e\\x9e\\xa5\\x1b\\x98\\x0b\\x52\\x5f\\xc4\\xfb\\xe1\\x06\\x8a\\x5f\\x0b\\x77\\x9e\\x06\\xbf\\x89\\x9b\\x0b\\x8b\\x8c\\x91\\x1e\\x8c\\x8e\"\n\"\\x8d\\x8b\\x8d\\x1b\\x96\\x93\\x82\\x0b\\x15\\x8d\\x95\\x91\\xae\\x05\\x9d\\x0b\\x65\\x77\\x7b\\x7d\\x76\\x1b\\x6f\\x80\\x9c\\xb3\\x1f\\x0b\\xf7\\xe0\\xf7\\x97\"\n\"\\x15\\xee\\xfb\\x49\\x05\\x94\\x7c\\x8d\\x84\\x82\\x1a\\x7b\\x7b\\x80\\x70\\x1e\\x7c\\x77\\xf7\\xb9\\x9f\\x7f\\x06\\x71\\x89\\x6a\\xb0\\x5f\\xda\\xfb\\x23\\xf7\"\n\"\\x91\\x18\\xea\\xf7\\x1e\\xcc\\xe7\\xa3\\x9d\\xc9\\x92\\x19\\x9f\\xfb\\x75\\x77\\x97\\x07\\xaa\\xa3\\x77\\x72\\x7a\\x83\\x78\\x7b\\x74\\x1f\\x37\\xfb\\x0b\\x3b\"\n\"\\xf7\\x26\\x05\\x7c\\xa8\\x87\\x95\\x94\\x1a\\x9c\\x9c\\x97\\xa4\\x1e\\x9c\\x9f\\xfb\\xc1\\x77\\x06\\xbd\\x88\\xa7\\x6f\\xc5\\x23\\xf7\\x0b\\xfb\\x6b\\x18\\xfb\"\n\"\\x05\\xfb\\x37\\x05\\x3d\\x55\\x65\\x6c\\x63\\x1b\\x81\\x77\\xf7\\x79\\x9f\\x78\\x06\\x66\\x74\\x9a\\xa4\\x98\\x91\\x9a\\x9a\\xa1\\x1f\\x0e\\xf7\\xbb\\x15\\x9f\"\n\"\\xa6\\xf7\\x1a\\xfb\\x7e\\x05\\x99\\x73\\x91\\x7d\\xcc\\x1d\\x84\\x91\\x68\\xc8\\xfb\\x65\\xf7\\xf5\\x18\\xcc\\xdc\\x05\\xec\\xd9\\xad\\xa2\\xd3\\x1b\\x9f\\xfb\"\n\"\\x7f\\xa7\\x1d\\x9d\\xc0\\x8d\\x08\\x93\\x9f\\xfb\\xc5\\x77\\x9e\\x06\\xc0\\x89\\x9a\\x79\\x89\\x53\\x08\\xfc\\x6a\\x21\\x1d\\x78\\x77\\xf7\\xc5\\x9f\\x83\\x20\"\n\"\\x1d\\x0b\\xf8\\x95\\xf8\\x61\\x15\\xfb\\x6a\\x74\\x06\\xa9\\x86\\x9c\\x87\\x90\\x88\\x08\\x8f\\x88\\x8e\\x85\\x86\\x1a\\x81\\x81\\x79\\x80\\x80\\x1e\\xfb\\x14\"\n\"\\xfb\\x14\\x05\\xf8\\x43\\xfb\\x4f\\x73\\x07\\xab\\x8a\\x9a\\x79\\x8c\\x64\\x08\\xfc\\x92\\x07\\x8a\\x63\\x7b\\x78\\x6c\\x8a\\x08\\x73\\xf7\\x83\\xa3\\x07\\x5c\"\n\"\\x92\\x87\\x91\\x8a\\xba\\x08\\xf7\\x06\\x07\\xa2\\xa3\\xea\\xfb\\x1a\\x05\\x9d\\x72\\x91\\x7f\\x83\\x1a\\x7f\\x7d\\x85\\x6f\\x8a\\x1e\\x73\\xf7\\x7e\\xa3\\x07\"\n\"\\x80\\x86\\x8e\\x97\\x82\\x1f\\xfb\\x56\\xf7\\xa0\\xef\\xf4\\xa5\\x9d\\xca\\x93\\x19\\x0b\\x9e\\x1d\\xe0\\xf7\\x0d\\x1a\\xf7\\x66\\xca\\xf7\\x02\\xf7\\x0d\\xba\"\n\"\\xb5\\x79\\x65\\xb6\\x1e\\xb7\\x65\\xa2\\x68\\xae\\x40\\x08\\xa4\\xf7\\x7e\\x70\\x06\\x67\\x7c\\x82\\x81\\x76\\x1b\\x82\\x7d\\x8f\\x95\\x75\\x1f\\xa3\\x51\\x5b\"\n\"\\x96\\x5a\\x1b\\xfb\\x5b\\xfb\\x29\\xfb\\x2d\\xfb\\x62\\xfb\\x63\\x88\\x1d\\x0b\\xf7\\xbe\\xf7\\x55\\x15\\x50\\xf7\\x21\\x05\\x7e\\xab\\x86\\x9e\\x9a\\x1a\\x9f\"\n\"\\x96\\x97\\x9e\\x1e\\x94\\x9f\\xfb\\x74\\x77\\x06\\xac\\x83\\x92\\x81\\xb6\\xfb\\x01\\xf7\\x09\\xfb\\xb0\\x18\\x6e\\x40\\x05\\x66\\x7c\\x7d\\x79\\x7d\\x1b\\x84\"\n\"\\x86\\x90\\x92\\x1f\\x92\\x07\\x8c\\x90\\x8b\\x8f\\x8e\\x1a\\xa8\\x74\\xa1\\x6e\\x69\\x74\\x72\\x67\\x62\\xaf\\x6a\\xba\\xba\\xb1\\xad\\xcb\\xa3\\x1e\\xf7\\x1d\"\n\"\\xf8\\x05\\xb8\\xf7\\x0b\\x90\\x92\\xb0\\x8c\\x19\\x9f\\xfb\\x24\\x77\\x97\\x07\\x9e\\x99\\x7e\\x78\\x7a\\x85\\x6e\\x81\\x6f\\x1f\\x0b\\xf7\\xa4\\x71\\x1d\\x0b\"\n\"\\x15\\xfb\\x1f\\x06\\x71\\x3a\\x05\\xd3\\x65\\x6b\\xa1\\x49\\x1b\\xfb\\x14\\x2d\\xfb\\x01\\xfb\\x28\\xfb\\x1a\\xd6\\x34\\xf7\\x06\\xda\\xcb\\xb0\\xd0\\xb4\\x1f\"\n\"\\x94\\x63\\x92\\x78\\x9b\\x76\\x08\\x7c\\x96\\x96\\x81\\x93\\x1b\\x8e\\x91\\x8d\\x8e\\x92\\x1f\\xec\\xb3\\x80\\xaa\\x05\\x87\\x7f\\x85\\x8a\\x83\\x1b\\x61\\x6b\"\n\"\\xb0\\xd4\\x79\\x1f\\xfb\\x02\\x9d\\x15\\x83\\x67\\x70\\x4c\\x79\\x71\\x08\\x7a\\x80\\x75\\x7f\\x7a\\x1b\\x5f\\x77\\xbf\\xf7\\x04\\xf7\\x1f\\xab\\xde\\xc2\\xb2\"\n\"\\xa5\\x61\\xfb\\x08\\xac\\x1f\\x0e\\xf7\\x33\\x15\\xf8\\x28\\x07\\x89\\xc5\\x9a\\x9e\\x2c\\x1d\\x77\\xf7\\xd0\\x9f\\x78\\x06\\x57\\x8e\\x7c\\x9b\\x8c\\xbf\\xf7\"\n\"\\x8d\\xf8\\x32\\x18\\xfc\\x2d\\x96\\x1d\\x9f\\xfb\\xcf\\x77\\x9e\\x06\\xbc\\x8a\\x9e\\x77\\x89\\x5c\\x08\\x0b\\xf8\\x6c\\xf7\\x60\\x15\\xfb\\x4c\\xf8\\x5e\\x05\"\n\"\\xfb\\x91\\x77\\x9e\\x06\\xc0\\x89\\x9a\\x78\\x89\\x51\\x08\\xfc\\x67\\x21\\x1d\\x78\\x77\\xf7\\x5f\\x9f\\x7e\\x06\\x51\\x8c\\x7a\\x9c\\x8e\\xc5\\x08\\xf8\\x9e\"\n\"\\x07\\xf7\\x91\\xfc\\xfe\\x05\\x9c\\x06\\xf7\\x95\\xf8\\xe5\\x05\\xfc\\x85\\x07\\x8d\\x53\\x7b\\x7a\\x57\\x88\\x08\\x71\\x77\\xf7\\xd7\\xb3\\x1d\\x9f\\xfb\\x84\"\n\"\\x06\\x0e\\xf7\\xb0\\xf7\\xd3\\x15\\xa6\\x06\\xb6\\xa5\\x77\\x5a\\x9f\\x1f\\x94\\x75\\x8f\\x79\\x72\\x1a\\x83\\xa2\\xf7\\xd7\\x74\\x07\\x82\\x2c\\x6a\\x5d\\x4f\"\n\"\\x89\\x08\\x70\\xf7\\xa3\\xf7\\x06\\x06\\xe5\\x88\\xbf\\x58\\x95\\x53\\x1d\\xab\\xf7\\x5f\\x05\\x72\\x06\\x74\\xfb\\x03\\x44\\x53\\xfb\\x09\\x8c\\x08\\x65\\x06\"\n\"\\x5e\\x7c\\x9d\\xc0\\x8d\\x1f\\x0b\\xf8\\x05\\xf7\\x2b\\x15\\x43\\x7b\\x65\\x63\\x56\\x1b\\x57\\x68\\xb7\\xcb\\xa0\\x8e\\x9b\\x93\\xa0\\x1f\\x78\\xa9\\xa5\\x82\"\n\"\\xa7\\x1b\\xb2\\xa6\\xa1\\xa9\\xa7\\x74\\x9e\\x69\\x6f\\x73\\x85\\x7d\\x69\\x1f\\x7e\\xa0\\x86\\x9a\\x9c\\x1a\\xb0\\xab\\xa5\\xb9\\xb4\\xa8\\x83\\x75\\xb0\\x1e\"\n\"\\x9e\\xe6\\x05\\x9d\\x54\\x6a\\x91\\x5a\\x1b\\xfb\\x01\\x45\\x5d\\x45\\x5f\\xa2\\x6b\\xc0\\x6f\\x1f\\x4c\\x6c\\x70\\x68\\x56\\x1a\\x3d\\xcb\\x59\\xf0\\xf3\\xcc\"\n\"\\xbf\\xf1\\xa1\\x1e\\x0b\\x15\\x66\\x8d\\x7e\\x9a\\x8c\\xb3\\x08\\xf7\\x8f\\x07\\xe1\\x56\\xc2\\x39\\x4f\\x5d\\x6f\\x50\\x66\\x1e\\xd6\\xfb\\x53\\x73\\x07\\xb7\"\n\"\\x84\\x93\\x82\\x8c\\x60\\x08\\xfb\\xba\\x3a\\x1d\\x8e\\x92\\x96\\x56\\x1d\\x0b\\xf8\\x6d\\xcb\\x15\\x81\\x81\\x05\\x88\\x88\\x88\\x8a\\x86\\x1b\\x7d\\x84\\x93\"\n\"\\x9c\\x1f\\xf7\\x99\\x07\\xe0\\x3f\\xbf\\xfb\\x0e\\xfb\\x05\\x3f\\x58\\x40\\x61\\xa3\\x73\\xb4\\xb3\\xa7\\xa3\\xad\\x99\\x86\\x98\\x7e\\x9b\\x1e\\x82\\x95\\x88\"\n\"\\x91\\x91\\x1a\\xa0\\xa6\\x9b\\xaf\\xc6\\xa4\\x70\\x4e\\x1e\\x42\\x07\\xfb\\x0b\\x67\\x5a\\x78\\x66\\x71\\x08\\x5f\\x6d\\x77\\x69\\x60\\x1a\\x4e\\xb9\\x5e\\xcc\"\n\"\\xc4\\xb9\\x9f\\xbd\\xc2\\x1e\\x0b\\xf8\\x22\\xf7\\x0e\\x15\\x5c\\x64\\x6d\\x79\\x61\\x1b\\x65\\x6e\\x9c\\xae\\x77\\x1f\\x78\\xaa\\x84\\xac\\x87\\xce\\x08\\xf7\"\n\"\\x8b\\x06\\x85\\xdc\\x7c\\xba\\x6c\\xb1\\x08\\xb0\\x6b\\x5e\\x9f\\x54\\x1b\\xfb\\x0d\\x38\\x2a\\xfb\\x23\\xfb\\x23\\xdb\\x2d\\xf7\\x0e\\xda\\xbb\\xaa\\xe7\\xcb\"\n\"\\x1f\\xfb\\x95\\xf7\\x3b\\x15\\xf7\\x0a\\x8e\\x9c\\xb2\\xbc\\x1b\\xa7\\x9d\\x7c\\x6c\\x93\\x1f\\x8f\\x78\\x8e\\x71\\x8c\\x58\\x08\\x7c\\x07\\x0b\\xf8\\x2f\\xf7\"\n\"\\x69\\x15\\xbc\\xfb\\x06\\x05\\x93\\x76\\x8f\\x7f\\x82\\x1a\\x71\\x79\\x80\\x60\\x1e\\x72\\x77\\xf7\\xc2\\x9f\\x82\\x06\\x73\\x8d\\x84\\x92\\x7b\\xae\\xfb\\x95\"\n\"\\xf8\\xf0\\x18\\x6f\\x06\\xfb\\x61\\xfc\\xb8\\x76\\x4a\\x6d\\x6a\\x64\\x89\\x19\\x77\\xf7\\x65\\x9f\\x75\\x07\\x68\\x70\\x9e\\xa3\\x94\\x8e\\x98\\x93\\xa1\\x1f\"\n\"\\xb1\\xf5\\x05\\xe2\\xf7\\x82\\x15\\xdf\\xfb\\x5e\\x05\\xfb\\x31\\x06\\x0b\\xf7\\x90\\xf8\\x5d\\x15\\xfb\\x09\\x35\\x27\\xfb\\x1b\\x47\\xa3\\x4d\\xb5\\x60\\x1f\"\n\"\\x67\\xae\\xc0\\x74\\xb8\\x1b\\xc0\\xc4\\xa5\\xb6\\xb0\\x1f\\xb0\\xb4\\x9f\\xc8\\xce\\x1a\\xf7\\x17\\x35\\xed\\xfb\\x06\\x1e\\x8a\\x65\\x15\\xa2\\x9f\\x7a\\x70\"\n\"\\x94\\x1f\\x95\\x70\\x8e\\x69\\x4c\\x1a\\xfb\\x3b\\x79\\x53\\x55\\x62\\x79\\xba\\xf4\\xf7\\x4b\\x9b\\xc3\\xbd\\x1e\\x0b\\xbf\\x96\\xa2\\x94\\xa3\\x9f\\x08\\xac\"\n\"\\xa4\\x9f\\xb6\\xb5\\x1a\\xc2\\x6b\\xbc\\x51\\xaa\\x1e\\xa2\\x60\\x5e\\x94\\x43\\x1b\\x4f\\xfb\\xe9\\x15\\xa3\\x06\\xe9\\xba\\x5c\\x2c\\x33\\x60\\x56\\x44\\x65\"\n\"\\x7e\\x99\\xb2\\x1f\\xf8\\xa8\\x04\\x9e\\x06\\xe1\\xbc\\x5c\\x38\\x36\\x5c\\x5b\\x38\\x87\\x81\\x8b\\x8c\\x81\\x1f\\x0e\\xf7\\x62\\x15\\x6f\\x68\\x7b\\x76\\x86\"\n\"\\x84\\x08\\x65\\x56\\x7c\\x71\\x7a\\x1a\\x83\\x8f\\x88\\x93\\x94\\x91\\x8e\\x99\\x9b\\x1e\\x91\\x90\\xf7\\x5f\\xf7\\x38\\x05\\x8f\\x07\\xfb\\x62\\xf7\\x3a\\x05\"\n\"\\x9a\\x78\\x7f\\x93\\x86\\x1b\\x84\\x86\\x85\\x82\\x77\\xa6\\x61\\xbe\\x4e\\x1f\\x98\\x7c\\x97\\x7b\\x9a\\x75\\x08\\x0b\\xf7\\x65\\xf8\\x5d\\x15\\x54\\x1d\\xfb\"\n\"\\x6e\\x07\\x57\\x8d\\x7f\\x99\\x73\\x1e\\x7a\\x95\\x96\\x82\\x95\\x1b\\x90\\x92\\x8d\\x8e\\x93\\x1f\\xf7\\x11\\xbd\\x84\\xa1\\x05\\x86\\x7d\\x82\\x88\\x84\\x1b\"\n\"\\x70\\x88\\x96\\xdb\\x1f\\x0b\\x75\\x1a\\x75\\x7e\\x82\\x68\\x89\\x1e\\x86\\x8a\\x7e\\x8a\\x7d\\x8a\\x08\\x72\\xf7\\xd8\\x07\\xb2\\x1d\\x0b\\x36\\x8f\\x80\\x96\"\n\"\\x89\\xd8\\x08\\xf8\\xa3\\x95\\x1d\\xfc\\xa3\\x07\\x89\\x3f\\x80\\x81\\x37\\x85\\x08\\x72\\x0b\\xf9\\x2a\\x15\\xfc\\x97\\xb5\\x1d\\x77\\xf7\\xdd\\x9f\\x6b\\x20\"\n\"\\x1d\\xf8\\xa6\\xf7\\x0d\\x07\\xdb\\x8e\\xbc\\x59\\x90\\x2f\\x08\\xa8\\x06\\x0b\\x15\\xb0\\xa4\\x9e\\x98\\xaa\\x1b\\xb3\\xa4\\x73\\x66\\x63\\x74\\x76\\x4e\\x79\"\n\"\\x1f\\x81\\x07\\xeb\\x6c\\xad\\x6b\\x51\\x1a\\x64\\x72\\x71\\x65\\x7b\\x7f\\x91\\x9f\\x76\\x1e\\x6d\\xa5\\x83\\x8f\\x6e\\x8e\\x08\\x70\\x82\\x7e\\x7e\\x78\\x1a\"\n\"\\x6a\\xb2\\x76\\xc8\\x0b\\x15\\xd2\\x1d\\x9e\\x2c\\x1d\\x77\\xf7\\xd0\\x06\\x0e\\xf7\\xc5\\xf8\\x61\\x15\\x2d\\xf7\\x3d\\x72\\x06\\x4e\\x35\\x63\\x5e\\x4a\\x54\"\n\"\\x08\\x70\\xbf\\xfb\\xd8\\x07\\x4a\\xb6\\x63\\xd0\\xce\\xb3\\xa9\\xdd\\xb4\\x1e\\x72\\x96\\x05\\x69\\x1d\\xf7\\xc1\\xe9\\x07\\x0b\\x8c\\x08\\x21\\x06\\xf4\\x8f\"\n\"\\xae\\x9a\\xa6\\x1e\\xa1\\x98\\xa1\\x96\\xad\\x1b\\xa9\\xa3\\x7f\\x7c\\x8a\\x8a\\x88\\x8a\\x88\\x1f\\x87\\x80\\x88\\x7f\\x80\\x1a\\x6b\\xa5\\x75\\xb1\\xb1\\xa6\"\n\"\\xa3\\xaf\\xc4\\x47\\xae\\xfb\\x01\\x0b\\xf9\\x41\\xf9\\x75\\x15\\x59\\x06\\x4c\\x2e\\x05\\xad\\x4b\\x5a\\x98\\x46\\x1b\\xfb\\x63\\xfb\\x28\\xfb\\x29\\xfb\\x63\"\n\"\\x59\\x93\\x5d\\x9c\\x5f\\x1f\\xa3\\x4f\\xa3\\x6b\\xc6\\x58\\x35\\xfb\\x12\\x18\\xbd\\x06\\xd2\\xf3\\x05\\x0b\\xf7\\xf8\\x15\\xf7\\x08\\xce\\xbd\\xcd\\xe1\\x1a\"\n\"\\xd0\\x62\\xba\\x4f\\x59\\x6a\\x6b\\x59\\x5b\\xa8\\x6c\\xb8\\x90\\x90\\x67\\x1d\\x7e\\x65\\x69\\x61\\x40\\x57\\x1f\\x0b\\xf8\\x06\\xa4\\x15\\x41\\x8f\\x77\\x99\"\n\"\\x8a\\xc0\\xa1\\x1d\\x89\\x58\\x79\\x7c\\x42\\x86\\x08\\x72\\x0b\\x22\\x1d\\xac\\x9f\\x92\\x95\\xa2\\x1a\\xa5\\x78\\x9d\\x6e\\x77\\x7b\\x82\\x78\\x7a\\x1e\\x0b\"\n\"\\xf7\\x26\\xfb\\x24\\xf7\\x66\\xf2\\xf7\\x00\\xa3\\xb1\\xcc\\x1f\\xf7\\x13\\x07\\x8d\\xd4\\x96\\x97\\xd4\\x92\\x08\\x0b\\xfc\\x1d\\x8e\\x1d\\x0b\\x15\\xf4\\xc6\"\n\"\\xb8\\xc6\\xd9\\x57\\x1d\\x95\\x92\\x83\\x80\\x68\\x6c\\x65\\x48\\x5c\\x1f\\x0e\\xcc\\x1d\\x85\\x91\\x67\\xc8\\xfb\\x65\\xf7\\xf5\\x18\\xcc\\xdc\\x05\\xec\\xd9\"\n\"\\xae\\xa2\\xd2\\x1b\\x9f\\xfb\\x7f\\x77\\xa1\\x07\\xa6\\x9b\\x7f\\x0b\\x15\\xf7\\x08\\xce\\xbd\\xcd\\xe1\\x1a\\xd0\\x62\\xba\\x4f\\x59\\x6a\\x6b\\x58\\x5d\\xa8\"\n\"\\x6b\\xb7\\x90\\x91\\x67\\x1d\\x7f\\x64\\x69\\x61\\x40\\x57\\x1f\\x0b\\xf9\\x45\\xa4\\x15\\x5f\\x7f\\x99\\xf7\\x11\\x56\\x9b\\x1d\\x9b\\x90\\x0b\\x15\\x50\\x8c\"\n\"\\x80\\x94\\xb9\\x1a\\xf7\\xe5\\x80\\x07\\xfb\\x38\\x4a\\x05\\x76\\x07\\x95\\xa9\\x9d\\x90\\x93\\x1b\\x9b\\x92\\x7e\\x6f\\x1f\\xfb\\x71\\x07\\x5a\\x8c\\x7d\\x80\"\n\"\\x4b\\x1b\\x77\\xf7\\x87\\x07\\x0b\\xc6\\xb8\\xc6\\xd9\\x57\\x1d\\x95\\x92\\x83\\x80\\x67\\x6d\\x66\\x47\\x5c\\x1f\\x0e\\xa4\\x15\\x45\\x93\\x7a\\x98\\x8a\\xbd\"\n\"\\x08\\xf8\\x78\\x07\\x8c\\xbe\\xa0\\x9c\\xcd\\x8e\\x08\\xa4\\xfb\\xe8\\x72\\x07\\xcf\\x88\\x9f\\x7b\\x8d\\x57\\x08\\xfb\\x63\\xfb\\x85\\xf7\\x63\\x07\\x8c\\x0b\"\n\"\\x4d\\x1b\\x4b\\x6c\\xa5\\xc8\\x7f\\x1f\\x5f\\x06\\x8e\\x54\\x92\\x72\\xa0\\x6e\\x08\\x68\\xa4\\xb5\\x78\\xc0\\xca\\x1d\\x64\\x1d\\x93\\x88\\x78\\xb6\\xb8\\x1d\"\n\"\\x7c\\x7e\\x70\\x1b\\x0b\\x15\\xf7\\x98\\x57\\x07\\x64\\x5d\\x30\\xfb\\x02\\x6c\\x62\\x61\\x4d\\x19\\x48\\xf7\\x35\\x34\\xe9\\xe2\\xb4\\xcd\\x07\\xfb\\x1a\\x16\"\n\"\\xfb\\x1d\\x06\\xf7\\x1d\\xf7\\x43\\x05\\x0b\\xa3\\x15\\x6b\\x7b\\x9f\\xb3\\x8a\\x1f\\xf8\\xe4\\x5a\\x1d\\xfc\\x92\\x07\\x8a\\x65\\x79\\x76\\x6b\\x8a\\x08\\x73\"\n\"\\xf7\\x83\\x07\\x0b\\x07\\xf7\\x0f\\x87\\xbf\\x5d\\x9c\\xfb\\x0b\\x08\\xa8\\x06\\x89\\xf7\\x5d\\x05\\xfc\\xec\\x06\\x88\\xfb\\x5d\\x05\\xa8\\x06\\x9c\\xf7\\x0b\"\n\"\\xbf\\xb9\\xf7\\x10\\x8f\\x08\\x0b\\x21\\x1d\\x78\\x77\\xf7\\xcf\\x9f\\x79\\x61\\x1d\\x9e\\xc0\\x8d\\x08\\x9d\\x0b\\xf7\\xb8\\xfb\\x4c\\x15\\x4f\\x8d\\x7b\\x9e\"\n\"\\x89\\xd0\\x08\\xf7\\x21\\x07\\x5c\\xbb\\xa4\\x7e\\xb8\\x1b\\xf7\\x05\\xda\\xf3\\xf7\\x28\\xf7\\x20\\x40\\xe9\\xfb\\x03\\x0b\\xa9\\x1d\\xca\\xfb\\x31\\x22\\x1d\"\n\"\\x0b\\xca\\xf7\\x0a\\xf7\\x06\\xc6\\xb0\\x72\\x4b\\xae\\x1e\\x9f\\x5e\\x15\\x9f\\x4a\\x91\\x5b\\x3b\\x1a\\xfb\\x64\\x4e\\xfb\\x01\\xfb\\x08\\x4c\\x64\\xa5\\xcb\"\n\"\\x69\\x1e\\x0b\\x79\\x6f\\x1a\\x5c\\xb7\\x69\\xc9\\x5e\\x1d\\x77\\x81\\x88\\x7b\\x1b\\x62\\x75\\xa1\\x0b\\x1f\\xfb\\x73\\xf8\\xa2\\x05\\x6f\\x06\\xfb\\x72\\xfc\"\n\"\\xb8\\x65\\x2d\\x7f\\x7d\\x5b\\x82\\x19\\x72\\xf7\\x5f\\xa4\\x07\\x4f\\x8f\\x75\\x96\\xa5\\x1a\\x0b\\x8c\\x08\\x9f\\xfb\\x66\\x3d\\x1d\\x8d\\x66\\x7b\\x76\\x6e\"\n\"\\x8a\\x08\\x77\\xf7\\x66\\x9f\\x07\\x0b\\xe2\\x15\\xfb\\x1d\\xf7\\x31\\x05\\x9d\\x7b\\x79\\x95\\x77\\x1b\\x71\\x76\\x77\\x72\\x77\\x96\\x7e\\xa8\\x78\\x46\\x1d\"\n\"\\x15\\xfb\\xeb\\x72\\x06\\xdf\\x87\\x9a\\x81\\x8d\\x53\\x08\\x22\\x07\\x58\\x6e\\x75\\x48\\x4c\\x61\\x9e\\xb6\\x6a\\x1e\\x5f\\xc3\\x76\\x0b\\xf7\\xfc\\x15\\xf3\"\n\"\\xf7\\x53\\x05\\xa2\\xb5\\x96\\xa8\\x9e\\x1a\\xa8\\x74\\xa0\\x6b\\x4c\\x63\\x55\\x34\\x8a\\x1e\\x88\\xfb\\x52\\x05\\x0b\\x78\\x7e\\x92\\x95\\x90\\x8e\\x92\\x91\"\n\"\\x95\\x1e\\x95\\x9a\\x8f\\x97\\x95\\x1a\\xa9\\x71\\xa3\\x6a\\x66\\x72\\x72\\x67\\x50\\xc5\\x62\\x0b\\x08\\xf8\\x78\\x07\\x8c\\xc0\\xa1\\x9b\\xd3\\x8d\\x08\\xa4\"\n\"\\xfb\\xf2\\x72\\x07\\xd1\\x88\\xa0\\x7b\\x8d\\x57\\x08\\xfc\\x78\\x07\\x0b\\xb9\\xf9\\x2a\\x15\\x77\\x9e\\x07\\xbd\\x1d\\x0b\\xf7\\x44\\x05\\x2f\\xea\\x1d\\x0b\"\n\"\\xe2\\x1a\\xf1\\x3f\\xc9\\xfb\\x13\\x67\\x78\\x87\\x76\\x58\\x1e\\x83\\x78\\x82\\x89\\x81\\x1b\\x76\\x83\\x95\\xa4\\x8a\\x1f\\x0b\\xfb\\x43\\xa8\\x06\\x90\\xe7\"\n\"\\xbb\\xbd\\xdc\\x88\\x08\\xb6\\xfc\\xa6\\x06\\x8d\\x53\\x7c\\x7a\\x56\\x88\\x08\\x6e\\x77\\x0b\\x6a\\x1b\\x69\\x72\\x95\\xa0\\x7c\\x1f\\x7f\\x9b\\x88\\x9d\\xb4\"\n\"\\x1a\\xf7\\x1d\\x07\\x88\\xc5\\x9b\\x9e\\xc0\\x8d\\x08\\x0b\\x77\\xa1\\x07\\xa6\\x9b\\x7f\\x77\\x7d\\x84\\x7e\\x78\\xf2\\x1d\\x89\\xc3\\x9a\\x0b\\xf7\\x8c\\x07\"\n\"\\xe1\\x56\\xc2\\x39\\x56\\x66\\x77\\x51\\x57\\x1e\\x0b\\x22\\x1d\\xac\\xa0\\x92\\x94\\xed\\x1d\\x7b\\x1e\\x0b\\x9d\\xbf\\xc9\\xac\\x9d\\x7a\\x60\\x98\\x1e\\x96\"\n\"\\x51\\x15\\x8c\\x5d\\x8c\\x71\\x6a\\x1a\\xfb\\x2a\\x77\\x57\\x51\\x0b\\xfc\\x3f\\x15\\xb4\\xa6\\x9d\\xa7\\xb1\\x1a\\xc2\\x5b\\xb3\\x4a\\x46\\x57\\x5e\\x4f\\x61\"\n\"\\x9d\\x6b\\xb6\\x66\\x1e\\x0b\\x83\\x05\\x8e\\x96\\x93\\x8c\\x94\\x1b\\xa8\\x9c\\x7e\\x74\\x70\\x77\\x7d\\x64\\x7b\\x7e\\x8e\\x94\\x73\\x1f\\x0b\\x07\\x8d\\x67\"\n\"\\x7c\\x76\\x6e\\x8a\\x08\\x77\\xf7\\x77\\x07\\xf7\\x02\\xc7\\xb7\\xdc\\xe3\\x4a\\xbc\\xfb\\x0a\\x0b\\x86\\x85\\x8b\\x8a\\x85\\x1e\\x8a\\x88\\x89\\x8b\\x89\\x1b\"\n\"\\x80\\x83\\x94\\x97\\xb3\\xad\\xb4\\xd6\\xbf\\x1f\\x0b\\x15\\xa7\\x8e\\x9f\\x9e\\xa4\\x1b\\x99\\x91\\x89\\x77\\xb8\\x1f\\xa8\\x7e\\x05\\x83\\x9d\\xa5\\x85\\x9f\"\n\"\\x1b\\x0b\\xaf\\xa7\\xa7\\xaf\\xaf\\x6e\\xa9\\x68\\x1f\\xf7\\x65\\x16\\xf1\\x1d\\x0b\\x15\\x8c\\x93\\x8e\\x8b\\x91\\x1b\\xbd\\xa3\\x6a\\x47\\x50\\x75\\x6b\\x63\"\n\"\\x75\\x84\\x93\\xa3\\x1f\\x0e\\xfc\\x88\\xf7\\x80\\x15\\xe9\\xf7\\x87\\xf0\\xfb\\x87\\x05\\x0b\\x9f\\x58\\x1d\\x0b\\xf0\\x1d\\x8d\\x54\\x92\\x72\\xa0\\x6f\\x08\"\n\"\\x67\\xa5\\xb4\\x78\\x0b\\x66\\x1d\\x78\\x89\\x51\\x08\\xfc\\x67\\x21\\x1d\\x78\\x0b\\x07\\x8d\\x66\\x7b\\x76\\x6e\\x8a\\x08\\x77\\xf7\\x6c\\x9f\\x87\\x07\\x6d\"\n\"\\x7b\\xa1\\xb0\\x8d\\x1f\\x0b\\x8d\\x67\\x7b\\x77\\x6d\\x89\\x08\\x86\\x77\\xf7\\x67\\x9f\\x06\\x71\\x90\\x7f\\x9f\\x8c\\xac\\x08\\x0b\\x1f\\xa8\\x7e\\x05\\x83\"\n\"\\x9e\\xa5\\x85\\x9e\\x1b\\xc4\\xb0\\xb3\\xe2\\xa2\\x1f\\x60\\x06\\x67\\x7f\\x0b\\xfb\\x10\\x08\\xa2\\xf7\\xe6\\x74\\x06\\x6f\\xfb\\x15\\x81\\x82\\xfb\\x09\\x80\"\n\"\\x08\\xf7\\x8c\\x07\\x0b\\x7f\\x7e\\x1f\\xfb\\x10\\xfb\\x1e\\x05\\xf7\\x15\\x07\\x89\\xad\\x98\\xa0\\xa4\\x8f\\x08\\x9f\\x0b\\x8a\\x5f\\x80\\x7f\\x5e\\x87\\x08\"\n\"\\x73\\xf7\\x87\\xa3\\x07\\x63\\x8d\\x85\\x96\\x8a\\xcd\\x08\\x0b\\x1f\\xf7\\x05\\x41\\x1d\\x07\\x5f\\xfb\\x76\\x15\\x8c\\x93\\x0b\\xbf\\x89\\x9b\\x78\\x89\\x50\"\n\"\\x08\\xfc\\x66\\x21\\x1d\\x78\\x77\\x0b\\x5a\\x62\\x6d\\x79\\x60\\x1b\\x64\\x6e\\x9d\\xae\\x76\\x1f\\x79\\xab\\x83\\xac\\x87\\xd0\\x08\\x0b\\x06\\xfb\\x04\\x28\"\n\"\\xfb\\x04\\xee\\x05\\x53\\x06\\xf7\\x0e\\xfb\\x44\\x05\\xe7\\x06\\x0e\\x91\\x2b\\x08\\x9a\\x33\\x15\\x5e\\x66\\x66\\x5f\\x5d\\xaf\\x66\\xb9\\xb8\\xb0\\xb0\\xb8\"\n\"\\x0b\\x15\\x70\\x74\\x74\\x71\\x6f\\xa2\\x74\\xa6\\xa6\\xa2\\xa2\\xa6\\xa6\\x74\\xa2\\x70\\x1f\\x0b\\x22\\x1d\\xab\\x9f\\x93\\x95\\xa2\\x1a\\xa5\\x78\\x9d\\x6e\"\n\"\\x77\\x0b\\x22\\x1d\\xac\\x9f\\x92\\x95\\xa2\\x1a\\xa6\\x78\\x9c\\x6e\\x77\\x0b\\x16\\x6d\\x74\\x74\\x6e\\x6e\\xa2\\x74\\xa8\\xa7\\xa3\\xa3\\xa7\\xa7\\x74\\xa3\"\n\"\\x6f\\x1f\\x0b\\xe3\\x05\\xac\\xa0\\x92\\x94\\xa2\\x1a\\xa6\\x78\\x9c\\x6e\\x77\\x7a\\x82\\x78\\x7b\\x1e\\x0b\\xbd\\xdb\\x88\\x08\\xa6\\xfc\\xa6\\x06\\x8d\\x53\"\n\"\\x7c\\x7a\\x56\\x88\\x08\\x78\\x77\\x0b\\x65\\x6c\\x6c\\x65\\x64\\xaa\\x6c\\xb2\\xb0\\xab\\xaa\\xb1\\xb2\\x6c\\xaa\\x64\\x1f\\x0b\\x08\\x9e\\x9f\\xfc\\x44\\xfb\"\n\"\\x43\\xa8\\x06\\x90\\xe7\\xbb\\xbd\\xdc\\x88\\x08\\x0b\\x77\\x07\\xa5\\x87\\x98\\x76\\x89\\x69\\x08\\xfb\\xe4\\xfb\\x04\\xf7\\xe4\\x07\\x0b\\x1b\\xc3\\xb3\\xd9\"\n\"\\x1d\\x82\\x42\\x1d\\x84\\x83\\x5e\\x81\\x08\\x73\\x0b\\x84\\x1a\\x7c\\x7b\\x83\\x6e\\x1e\\x73\\x77\\xf7\\xbb\\x9f\\x06\\x69\\x8c\\x0b\\x15\\xfb\\x08\\x48\\x59\"\n\"\\x4a\\x34\\x1a\\x46\\xb4\\x5c\\xc7\\xbd\\xac\\xab\\x0b\\x95\\x93\\x1a\\x97\\x94\\x92\\x9b\\x1e\\x9f\\x9f\\xfb\\x41\\x77\\x06\\xc1\\x0b\\xa5\\xb4\\x78\\xc1\\x1b\"\n\"\\xc2\\xb4\\x9f\\xb4\\xa5\\x1f\\x9c\\xa5\\x92\\xa4\\x0b\\xf7\\xec\\x16\\xf8\\xca\\x06\\xb4\\xf7\\x67\\x05\\x74\\x06\\x83\\x6e\\x69\\x0b\\x78\\x08\\x3c\\x70\\x63\"\n\"\\x64\\x58\\x1a\\x62\\x9d\\x79\\xcb\\x74\\x1e\\x4c\\x0b\\x78\\x61\\x1d\\x0b\\x07\\x8a\\x60\\x83\\x82\\x5f\\x83\\x08\\x73\\xf7\\x85\\xa3\\x07\\x67\\x0b\\xb0\\x8a\"\n\"\\x19\\x9f\\xfb\\x25\\x77\\x97\\x07\\x9f\\x99\\x7d\\x78\\x7b\\x0b\\xf7\\xb3\\xf7\\xb3\\x15\\xfb\\x87\\xfb\\x08\\xf7\\x87\\x06\\x0e\\x15\\xfc\\x4d\\xfd\\x50\\x05\"\n\"\\xc5\\x06\\xf8\\x4b\\xf9\\x50\\x05\\x0b\\x1b\\x7b\\x78\\xf7\\xb8\\x9e\\x7a\\x06\\x55\\x77\\x9f\\xc2\\x1f\\x0b\\xf8\\x61\\x15\\xfb\\x2b\\x73\\x06\\xb6\\x89\\x97\"\n\"\\x84\\x73\\x1a\\x0b\\x9f\\xb4\\xa5\\x1f\\x9c\\xa5\\x92\\xa4\\x91\\xbe\\x08\\x0e\\x79\\x1f\\xf7\\x1f\\x35\\x05\\x0e\\x83\\x1a\\x7c\\x7b\\x83\\x6e\\x1e\\x73\\x77\"\n\"\\xf7\\x1b\\x06\\x0b\\x08\\xfc\\x78\\x07\\x89\\x56\\x7d\\x7f\\x43\\x85\\x08\\x72\\x0b\\xae\\x1a\\xca\\x6a\\xb5\\x5a\\x5a\\x6a\\x61\\x4c\\x71\\x90\\x0b\\x5c\\x1a\"\n\"\\x4a\\xbd\\x5f\\xd7\\xd3\\xbe\\xbe\\xd3\\xb8\\x7b\\x0b\\x73\\x70\\x77\\x61\\x1b\\x49\\x60\\xcb\\xf3\\x87\\x1f\\x89\\x0b\\x1f\\x60\\x06\\x67\\x7e\\x7d\\x7e\\x0b\"\n\"\\x06\\x6e\\xfb\\x66\\x05\\xd9\\x06\\xa8\\xf7\\x66\\x05\\x0b\\x07\\x89\\xae\\x99\\x9f\\xa5\\x8f\\x08\\x9f\\xfb\\x5c\\x0b\\x90\\x8b\\x8c\\x90\\x1e\\x8c\\x8e\\x8e\"\n\"\\x8b\\x8c\\x1b\\x0b\\x1f\\xf8\\x48\\x07\\x8d\\xd5\\x99\\x9a\\xd4\\x8e\\x08\\x0b\\xa4\\xc8\\x7f\\x1f\\x60\\x06\\x8e\\x55\\x92\\x73\\x9f\\x0b\\x37\\x49\\x2c\\x68\"\n\"\\x97\\x6b\\xa3\\x6f\\x1f\\xa1\\x72\\x0b\\xc0\\xa6\\xbc\\xa7\\x1e\\x9e\\xab\\x93\\xb1\\xc6\\x1a\\x0b\\xf8\\x61\\xf8\\xb9\\x15\\x5d\\x06\\x4f\\x26\\x05\\x9d\\x0b\"\n\"\\x76\\xa8\\x4e\\xf7\\x30\\xfb\\xc2\\x18\\xfb\\x32\\x07\\x0b\\x06\\xfb\\x0e\\xfb\\x44\\x05\\xc3\\x06\\xf7\\x04\\x0b\\x89\\x52\\x08\\xfc\\x69\\x07\\x8d\\x53\\x7c\"\n\"\\x7a\\x0b\\x9b\\xa0\\xa8\\x8c\\x08\\x9f\\xfb\\x66\\x77\\x07\\x0b\\xa2\\x1a\\xa5\\x78\\x9d\\x6e\\x77\\x7a\\x82\\x78\\x0b\\x33\\x5d\\xa2\\xb7\\xa0\\x92\\x96\\xa7\"\n\"\\xa2\\x1f\\x0b\\xc0\\x89\\x9b\\x78\\x89\\x51\\x08\\xfb\\x6c\\x07\\x0b\\x4d\\x1b\\x4c\\x6b\\xa5\\xc8\\x80\\x1f\\x5f\\x06\\x0b\\x6a\\x6e\\x6d\\x69\\x66\\xa6\\x6e\"\n\"\\xae\\xaf\\xa8\\x0b\\x74\\x1f\\xfb\\x3c\\xfb\\x61\\x05\\xf7\\x67\\x07\\x0b\\xf7\\xa3\\x04\\x31\\xfa\\x7c\\xe5\\x07\\x0e\\x01\\x00\\x01\\xe3\\x01\\x05\\x00\\x01\"\n\"\\x0a\\x02\\x01\\x40\\x03\\x01\\x87\\xff\\x02\\x87\\xa0\\x02\\x8e\\x02\\x00\\x01\\x00\\x04\\x00\\x07\\x00\\x38\\x00\\x7a\\x00\\xc5\\x01\\x4e\\x02\\x19\\x02\\xce\"\n\"\\x02\\xd4\\x03\\x16\\x03\\x57\\x04\\x28\\x04\\x42\\x04\\x49\\x04\\x4d\\x04\\x57\\x04\\x68\\x04\\xb5\\x04\\xec\\x05\\x43\\x05\\xa5\\x05\\xd4\\x06\\x22\\x06\\x83\"\n\"\\x06\\xa4\\x07\\x10\\x07\\x7c\\x07\\x8a\\x07\\xaf\\x07\\xce\\x07\\xe4\\x08\\x01\\x08\\x60\\x09\\x0a\\x09\\x0d\\x09\\x72\\x09\\x75\\x09\\x78\\x09\\x7d\\x09\\xc8\"\n\"\\x09\\xcd\\x0a\\x04\\x0a\\x08\\x0a\\x4d\\x0a\\x52\\x0a\\x57\\x0a\\xb9\\x0a\\xbc\\x0a\\xc1\\x0a\\xf7\\x0b\\x6f\\x0b\\x72\\x0b\\x76\\x0b\\x7b\\x0b\\x7e\\x0b\\xcc\"\n\"\\x0b\\xd1\\x0c\\x62\\x0c\\x65\\x0c\\x6a\\x0c\\x8e\\x0c\\x9e\\x0c\\xc1\\x0c\\xdf\\x0c\\xeb\\x0c\\xfb\\x0c\\xff\\x0d\\x4a\\x0d\\x4e\\x0d\\x54\\x0d\\x58\\x0d\\x7f\"\n\"\\x0d\\x83\\x0d\\xa9\\x0d\\xc4\\x0d\\xf9\\x0d\\xfd\\x0e\\x02\\x0e\\x8f\\x0e\\x93\\x0e\\x97\\x0e\\xbb\\x0f\\x10\\x0f\\x14\\x0f\\x18\\x0f\\x1d\\x0f\\x21\\x0f\\x6a\"\n\"\\x0f\\x6d\\x10\\x05\\x10\\x09\\x10\\x0d\\x10\\x5a\\x10\\x66\\x10\\xb1\\x10\\xd6\\x11\\x17\\x11\\x91\\x12\\x39\\x12\\x40\\x12\\xc1\\x13\\x36\\x13\\xef\\x14\\x55\"\n\"\\x14\\x79\\x14\\xb5\\x15\\x19\\x15\\x32\\x15\\x39\\x15\\x7e\\x15\\xe8\\x15\\xf2\\x16\\x95\\x17\\x8b\\x17\\x8f\\x17\\xfc\\x18\\x15\\x18\\x1b\\x18\\x25\\x18\\x41\"\n\"\\x18\\x8b\\x18\\x9f\\x19\\x92\\x19\\xf5\\x19\\xfd\\x1a\\x04\\x1a\\x0c\\x1a\\x13\\x1a\\x1b\\x1a\\x21\\x1a\\x29\\x1a\\x30\\x1a\\x38\\x1a\\x5f\\x1a\\x6b\\x1a\\x96\"\n\"\\x1a\\x9e\\x1a\\xa2\\x1a\\xf1\\x1b\\x62\\x1b\\xba\\x1b\\xe9\\x1c\\x9a\\x1c\\xc6\\x1d\\x48\\x1d\\x4d\\x1d\\x78\\x1d\\xbd\\x1e\\x3b\\x1e\\xaa\\x1e\\xb3\\x1e\\xc3\"\n\"\\x1f\\x27\\x1f\\xb7\\x1f\\xb9\\x20\\x00\\x20\\x25\\x20\\x65\\x20\\x77\\x20\\xa5\\x20\\xb8\\x20\\xe3\\x21\\x09\\x21\\x38\\x21\\x75\\x21\\xd6\\x21\\xda\\x22\\x51\"\n\"\\x22\\x7d\\x22\\xa0\\x22\\xf3\\x23\\x0c\\x23\\x13\\x23\\x1f\\x23\\x26\\x23\\x54\\x23\\x8c\\x23\\xce\\x23\\xe2\\x23\\xf7\\x24\\x01\\x24\\x0d\\x24\\x14\\x24\\x1c\"\n\"\\x24\\x25\\x24\\x2d\\x24\\x43\\x24\\x4b\\x24\\x53\\x24\\x5d\\x24\\x65\\x24\\x78\\x24\\x80\\x24\\x8d\\x24\\x94\\x24\\xa0\\x24\\xa7\\x24\\xae\\x24\\xb6\\x24\\xbf\"\n\"\\x24\\xd0\\x24\\xd8\\x24\\xe1\\x24\\xec\\x24\\xf4\\x25\\x18\\x25\\x3c\\x25\\x45\\x25\\x4d\\x25\\x56\\x25\\x5e\\x25\\x68\\x25\\x71\\x25\\x84\\x25\\x8d\\x25\\x9d\"\n\"\\x25\\xaa\\x25\\xb2\\x25\\xc3\\x25\\xcd\\x25\\xdc\\x25\\xe4\\x25\\xed\\x25\\xf6\\x25\\xff\\x26\\x08\\x26\\x10\\x26\\x19\\x26\\x21\\x26\\x7d\\x26\\xe9\\x27\\x5b\"\n\"\\x27\\xf0\\x28\\x63\\x28\\xfb\\x29\\x9b\\x2a\\x0f\\x2a\\x70\\x2a\\x80\\x2a\\x82\\x2a\\xaf\\x2a\\xb7\\x2a\\xce\\x2b\\x15\\x2b\\x36\\x2b\\x3e\\x2b\\x46\\x2b\\x5d\"\n\"\\x2b\\x7c\\x2b\\x7e\\x2b\\x86\\x2b\\x88\\x2b\\xa3\\x2b\\xc5\\x2b\\xcf\\x2b\\xd9\\x2b\\xe3\\x2c\\x5c\\x2c\\xd5\\x2c\\xda\\x2d\\x2a\\x2d\\x2e\\x2d\\x72\\x2d\\xee\"\n\"\\x2e\\x2e\\x2e\\x42\\x2e\\x50\\x2e\\x82\\x2e\\x91\\x2e\\xf6\\x2f\\x2b\\x2f\\xae\\x2f\\xcc\\x2f\\xd5\\x2f\\xdd\\x2f\\xf0\\x2f\\xf5\\x30\\x11\\x30\\x1c\\x30\\x5e\"\n\"\\x30\\xa6\\x30\\xad\\x30\\xc4\\x30\\xd1\\x31\\x18\\x31\\x2f\\x31\\x57\\x31\\x5f\\x31\\x63\\x31\\x6b\\x31\\x73\\x31\\x99\\x31\\xdd\\x31\\xef\\x32\\x13\\x32\\x1d\"\n\"\\x32\\xa5\\x32\\xab\\x33\\x24\\x33\\x5d\\x33\\x63\\x33\\x88\\x34\\x2f\\x34\\x3b\\x34\\x43\\x34\\x4a\\x34\\x4e\\x34\\x57\\x34\\xf5\\x35\\x90\\x35\\x99\\x35\\xd9\"\n\"\\x35\\xf7\\x36\\x23\\x36\\x2c\\x36\\x3e\\x36\\xbb\\x36\\xd3\\x36\\xe4\\x36\\xf2\\x37\\x3e\\x37\\x98\\x38\\x01\\x38\\x52\\x38\\x5a\\x38\\x9e\\x38\\xa7\\x38\\xb0\"\n\"\\x38\\xba\\x38\\xc2\\x39\\x30\\x39\\x37\\x39\\x3d\\x39\\x45\\x39\\x4f\\x39\\x85\\x39\\x8d\\x3a\\x1b\\x3a\\x1f\\x3a\\x21\\x3a\\x5e\\x3a\\x79\\x3a\\x80\\x3a\\xe4\"\n\"\\x3b\\x15\\x3b\\x31\\x3b\\x99\\x3c\\x01\\x3c\\x06\\x3c\\x4b\\x3c\\x50\\x3c\\x70\\x3c\\x74\\x3c\\x78\\x3c\\x7e\\x3c\\x96\\x3c\\x9a\\x3c\\xf3\\x3d\\x0e\\x3d\\x7d\"\n\"\\x3d\\x83\\x3d\\x85\\x3d\\xae\\x3d\\xee\\x3e\\x0d\\x3e\\x38\\x3e\\x6e\\x3e\\xab\\x3e\\xe4\\x3f\\x61\\x3f\\xcb\\x40\\x33\\x40\\x6b\\x40\\xd0\\x40\\xf2\\x41\\x70\"\n\"\\x42\\x0c\\x42\\x0f\\x42\\x22\\x42\\x70\\x42\\xc4\\x43\\x0f\\x43\\x5f\\x43\\x7e\\x44\\x22\\x44\\x9c\\x45\\x09\\x45\\x6e\\x45\\x90\\x45\\xed\\x46\\x3a\\x46\\xb1\"\n\"\\x47\\x39\\x47\\x81\\x47\\x85\\x47\\xbe\\x47\\xc2\\x48\\x23\\x48\\x81\\x48\\xd4\\x49\\x12\\x49\\x4b\\x49\\xb5\\x49\\xf8\\x4a\\x31\\x4a\\x35\\x4a\\xbd\\x4b\\x42\"\n\"\\x4b\\x78\\x4b\\xba\\x4b\\xda\\x4c\\x04\\x4c\\x29\\x4c\\x83\\x4c\\xb6\\x4d\\x18\\x4d\\x7b\\x4d\\xd9\\x4e\\x0a\\x4e\\x6d\\x4e\\xce\\x4f\\x28\\x4f\\xa1\\x4f\\xd5\"\n\"\\x50\\x1e\\x50\\x71\\x50\\xe7\\x51\\x39\\x51\\x8d\\x51\\xad\\x51\\xe5\\x52\\x3b\\x52\\x74\\x52\\xca\\x53\\x3d\\x53\\xc7\\x54\\x81\\x54\\x88\\x54\\xb7\\x54\\xc0\"\n\"\\x54\\xf5\\x55\\x2b\\x55\\x6b\\x55\\xc8\\x56\\x6e\\x56\\xa3\\x56\\xc3\\x56\\xe3\\x57\\x03\\x57\\x23\\x57\\x2f\\x57\\x44\\x57\\xbb\\x57\\xc4\\x57\\xcc\\x58\\x0b\"\n\"\\x58\\x14\\x58\\x76\\x58\\xf4\\x59\\x60\\x59\\x78\\x59\\xbd\\x5a\\x2b\\x5a\\x57\\x5a\\x89\\x5a\\x96\\x5a\\x9e\\x5a\\xa6\\x5a\\xd6\\x5a\\xde\\x5b\\x3b\\x5b\\x97\"\n\"\\x5b\\x9b\\x5b\\xc5\\x5b\\xe4\\x5c\\x3c\\x5c\\x40\\x5c\\x6b\\x5c\\xb0\\x5c\\xc9\\x5d\\x1b\\x5d\\xa5\\x5e\\x1d\\x5e\\x26\\x5e\\x2e\\x5e\\x5e\\x5e\\xd4\\x5e\\xfb\"\n\"\\x5f\\x43\\x5f\\x69\\x5f\\xb1\\x5f\\xd8\\x5f\\xe4\\x60\\x79\\x60\\x82\\x60\\xfa\\x61\\x69\\x61\\xa0\\x61\\xd7\\x62\\x1c\\x62\\xa9\\x62\\xce\\x62\\xd3\\x62\\xf2\"\n\"\\x63\\x35\\x63\\x56\\x63\\x97\\x63\\xbb\\x64\\x1b\\x64\\x24\\x64\\x91\\x64\\x9b\\x64\\xf6\\x65\\x0b\\x65\\x13\\x65\\x1b\\x65\\x44\\x65\\x6f\\x65\\xb3\\x66\\x28\"\n\"\\x66\\x2f\\x66\\x7a\\x66\\xfc\\x67\\x05\\x67\\x3d\\x67\\x45\\x67\\x4c\\x67\\xb3\\x67\\xe7\\x68\\x36\\x68\\x43\\x68\\x54\\x68\\x5d\\x68\\x65\\x68\\x8a\\x68\\x8e\"\n\"\\x68\\xba\\x68\\xc8\\x69\\x11\\x69\\x83\\x69\\xf4\\x6a\\x7c\\x6b\\x07\\x6b\\x3b\\x6b\\x63\\x6b\\x99\\x6c\\x12\\x6c\\x43\\x6c\\x4c\\x6c\\x69\\x6c\\x83\\x6c\\x8a\"\n\"\\x6c\\x9c\\x6c\\xe1\\x6c\\xea\\x6d\\x6a\\x6d\\x72\\x6d\\x7b\\x6d\\x9c\\x6d\\xdc\\x6e\\x6d\\x6e\\xbe\\x6e\\xfa\\x6f\\x7e\\x6f\\xe3\\x70\\x0b\\x70\\x56\\x70\\x99\"\n\"\\x71\\x0e\\x71\\x36\\x71\\x4d\\x71\\x5c\\x71\\x64\\x71\\x79\\x71\\x7c\\x71\\x80\\x71\\x8a\\x71\\x94\\x71\\x9c\\x71\\xa0\\x71\\xc8\\x72\\x60\\x72\\xc7\\x73\\x40\"\n\"\\x73\\xbe\\x73\\xdc\\x73\\xf8\\x74\\x14\\x74\\x71\\x74\\xa1\\x75\\x41\\x75\\xcb\\x76\\x49\\x76\\xc6\\x77\\x0d\\x77\\x50\\x77\\xcf\\x78\\x44\\x78\\x72\\x78\\xa6\"\n\"\\x78\\xe7\\x79\\x47\\x79\\x8a\\x79\\xbb\\x7a\\x20\\x7a\\x58\\x7a\\xc0\\x7b\\x00\\x7b\\x88\\x7c\\x11\\x7c\\x68\\x7c\\xcb\\x7d\\x38\\x7d\\x9a\\x7e\\x0a\\x7e\\x67\"\n\"\\x7e\\x6a\\x7e\\xca\\x7f\\x2a\\x7f\\xa0\\x80\\x1a\\x80\\xae\\x81\\x07\\x81\\x50\\x81\\xbf\\x81\\xcc\\x81\\xd8\\x82\\x90\\x83\\x06\\x83\\x0d\\x83\\x11\\x83\\x2d\"\n\"\\x83\\x4a\\x83\\xba\\x83\\xd2\\x84\\x17\\x84\\x40\\x84\\x61\\x84\\x65\\x84\\xeb\\x85\\x30\\x85\\x63\\x85\\x6c\\x85\\x75\\x85\\x7c\\x85\\x83\\x85\\xb0\\x85\\xb7\"\n\"\\x86\\x69\\x86\\x71\\x86\\x89\\x86\\x92\\x86\\x9b\\x87\\x2e\\xfb\\x8a\\x0e\\xfb\\x8a\\x0e\\xfb\\x37\\xf7\\x3a\\xf7\\x30\\x15\\x2d\\x1d\\x99\\xd9\\x15\\x98\\xf7\"\n\"\\x0f\\x95\\xbc\\xa8\\xeb\\x08\\x99\\xb7\\x8f\\x9f\\xa2\\x1a\\xcc\\x6d\\xb0\\x55\\x55\\x6c\\x66\\x4c\\x71\\x8f\\x79\\x99\\x5e\\x1e\\xa8\\x2c\\x95\\x5a\\x98\\xfb\"\n\"\\x10\\x08\\x0e\\xc6\\xf7\\x3c\\xf8\\x28\\x15\\xac\\xf7\\x25\\x96\\xbf\\xa2\\x1a\\xb2\\x6f\\xa7\\x66\\x64\\x72\\x6f\\x60\\x75\\x97\\x4d\\xa0\\x37\\x1e\\x8c\\x84\"\n\"\\x90\\x77\\x90\\x76\\x08\\xf7\\xc1\\x16\\xad\\xf7\\x26\\x95\\xbe\\xa2\\x1a\\xb2\\x6f\\xa7\\x66\\x64\\x72\\x6f\\x60\\x75\\x97\\x4d\\xa0\\x37\\x1e\\x8c\\x84\\x90\"\n\"\\x77\\x90\\x76\\x08\\x0e\\x8f\\xf8\\x67\\xf7\\xaf\\x15\\x34\\x06\\x9d\\xf7\\x1a\\x05\\xed\\xd4\\x33\\x06\\xa8\\xf7\\x66\\x05\\x3e\\x06\\x6d\\xfb\\x66\\x05\\xfb\"\n\"\\x05\\x06\\xa8\\xf7\\x66\\x05\\x3e\\x06\\x6d\\xfb\\x66\\x05\\x21\\x42\\xeb\\x06\\x79\\xfb\\x1a\\x05\\x20\\x42\\xeb\\xe1\\x1d\\xf7\\x05\\xe1\\x1d\\xed\\x06\\xfb\"\n\"\\x27\\xf7\\x63\\x15\\x79\\xfb\\x1a\\x05\\xfb\\x05\\x06\\x9d\\xf7\\x1a\\x05\\x0e\\x8f\\xf8\\x40\\xf8\\x75\\x15\\xf7\\x21\\x07\\x5c\\xa8\\x69\\x96\\x3d\\x97\\x08\"\n\"\\xd7\\x54\\x3d\\x07\\x5d\\x86\\x75\\x85\\x6c\\x7a\\x08\\x54\\x6b\\x6c\\x57\\x4b\\x1a\\x32\\xbd\\x50\\xf7\\x1a\\x48\\x1e\\xfb\\x8f\\x07\\x41\\x99\\x63\\xb8\\x6b\"\n\"\\xf7\\x00\\x76\\x8d\\x18\\xfb\\x30\\x07\\xdd\\x69\\xa3\\x85\\xc9\\x88\\x08\\x28\\xc2\\xee\\x07\\xdd\\x9a\\xb2\\x9b\\xab\\xab\\x08\\xac\\xab\\x9c\\xb8\\xc3\\x1a\"\n\"\\xbb\\x7c\\xb6\\x71\\xa8\\x1e\\x68\\xb3\\x6d\\x9f\\x2a\\xbd\\x08\\xf7\\x6b\\x07\\xd2\\x7b\\xb1\\x5f\\xa8\\x27\\x08\\xfb\\x1e\\xfb\\x7b\\x15\\xdb\\x5e\\x98\\x7a\"\n\"\\x55\\x1a\\x50\\x6d\\x6a\\x4c\\x7f\\x1e\\x53\\xf8\\x3c\\x15\\x4f\\xa0\\x6e\\xac\\xb9\\x1a\\xbb\\xa5\\xa5\\xca\\x9b\\x1e\\x0e\\xf8\\x8c\\xf9\\x8d\\xf8\\x08\\x15\"\n\"\\xfb\\x05\\xfb\\x05\\xfb\\x10\\xfb\\x0f\\x37\\xbf\\x54\\xdc\\xb7\\xb9\\x9f\\xac\\xaa\\x1f\\xc1\\xc3\\xad\\xdf\\xd9\\x1a\\xd1\\x5d\\xb8\\x45\\x1e\\xaa\\x58\\x15\"\n\"\\xa9\\xa1\\x6d\\x61\\x63\\x7e\\x60\\x6f\\x59\\x1f\\x54\\x6d\\x68\\x6e\\x66\\x1b\\x6b\\x78\\xa1\\xad\\x8d\\x1f\\x8d\\xbb\\xaa\\xdd\\xad\\xbe\\x08\\xaf\\xa4\\xa1\"\n\"\\x9b\\xa5\\x1b\\x4b\\xf8\\x07\\x15\\x65\\x06\\x87\\x85\\x87\\x84\\x86\\x1f\\x6c\\x74\\x42\\x70\\x4e\\x1b\\x61\\x76\\x91\\xa1\\x6d\\x1f\\x9d\\x71\\x73\\x94\\x72\"\n\"\\x1b\\xfb\\x09\\xfb\\x01\\xfb\\x0c\\xfb\\x14\\x3b\\xc0\\x53\\xd7\\xc7\\xc0\\xaa\\xc5\\xb3\\x1f\\xb5\\xc9\\x9b\\xc3\\x8c\\xe4\\x08\\x87\\xa0\\x97\\x8a\\x99\\x1b\"\n\"\\xae\\xb0\\x94\\x9d\\xb6\\x1f\\xfb\\xf0\\xfd\\x00\\x05\\xc2\\x06\\xb0\\xf9\\x13\\x15\\x8f\\x8e\\x89\\x85\\x94\\x1f\\x93\\x85\\x8d\\x89\\x91\\x89\\x08\\xa0\\x81\"\n\"\\x93\\x80\\x74\\x1a\\x59\\x75\\x4a\\x67\\x56\\x1e\\x61\\x6e\\x70\\x78\\x6b\\x1b\\x6d\\x77\\xa2\\xac\\x8d\\x1f\\x8e\\xb9\\xac\\xe2\\xae\\xbf\\xa1\\xab\\xa3\\x9f\"\n\"\\x9b\\x89\\x08\\x0e\\xf7\\xe5\\xf8\\xd5\\xf8\\x37\\x15\\x73\\x07\\xc6\\x84\\x92\\x86\\x6e\\x1a\\x63\\x79\\x69\\x51\\x44\\x1e\\xfb\\x2b\\xf7\\x6a\\x05\\xf5\\xb2\"\n\"\\xb9\\xb7\\xcb\\x1a\\xd4\\x49\\xbb\\x26\\xfb\\x0c\\x40\\x4e\\x29\\x5f\\x96\\x6c\\xb4\\x46\\x1e\\xfb\\x22\\x45\\x55\\x4c\\x2d\\x1a\\x23\\xda\\x43\\xf7\\x04\\xd6\"\n\"\\xcc\\xa4\\xc9\\xdd\\x1e\\x49\\xc6\\xb0\\x75\\xc0\\x1b\\xaa\\xb0\\x98\\x9d\\xa4\\x1f\\x9b\\x98\\x98\\x9b\\xa4\\xb4\\x9b\\xa5\\x18\\x77\\x97\\x05\\x70\\x7a\\x7b\"\n\"\\x80\\x72\\x1b\\x65\\x72\\x9e\\xd3\\x53\\x1f\\xc2\\xd7\\x96\\x9b\\xa6\\xb6\\xa6\\xb7\\x18\\x9d\\xa8\\x97\\x92\\xb6\\x8f\\x08\\xa3\\x07\\xfc\\x60\\xfb\\x19\\x15\"\n\"\\xd7\\xfb\\x06\\xa0\\x6d\\xab\\x61\\x08\\x6f\\x64\\x72\\x80\\x71\\x1b\\x6d\\x69\\x9b\\xa5\\x72\\x1f\\x60\\xb7\\x6e\\xcc\\xbf\\x1a\\xb1\\x9e\\xa3\\xc2\\xab\\x1e\"\n\"\\xf7\\x0e\\xe9\\x15\\x56\\xcd\\x76\\xb6\\xb4\\x1a\\xae\\x9e\\xa0\\xac\\xbc\\xb6\\x51\\x48\\x62\\x77\\x74\\x59\\x7a\\x1e\\x0e\\xfb\\x37\\xec\\x85\\x1d\\x0e\\xfb\"\n\"\\x37\\xf7\\xc6\\xf9\\x4a\\x15\\x4d\\x6a\\x6f\\x76\\x64\\x62\\x08\\x36\\x2f\\x5d\\xfb\\x0a\\xfb\\x16\\x1a\\x2f\\xa4\\x34\\xbb\\x3e\\x1e\\xb9\\x43\\xb6\\x63\\xed\"\n\"\\x50\\x08\\xa7\\x07\\x52\\xb0\\x72\\xa4\\x76\\xb8\\x08\\x6d\\xc9\\x7d\\xe7\\xf7\\x1d\\x1a\\xf7\\x1f\\x99\\xef\\xa7\\xc7\\x1e\\x9f\\xb7\\xa4\\xa5\\xc7\\xb3\\x08\"\n\"\\x0e\\xfb\\x37\\xa6\\xfb\\x3c\\x15\\xc9\\xac\\xa7\\xa0\\xb2\\xb5\\x08\\xe0\\xe6\\xb9\\xf7\\x0b\\xf7\\x15\\x1a\\xe6\\x72\\xe3\\x5b\\xd8\\x1e\\x5d\\xd3\\x60\\xb3\"\n\"\\x29\\xc6\\x08\\x6f\\x07\\xc4\\x67\\xa4\\x71\\xa0\\x5e\\x08\\xa9\\x4d\\x99\\x2f\\xfb\\x1d\\x1a\\xfb\\x1e\\x7d\\x26\\x6f\\x4f\\x1e\\x77\\x5f\\x72\\x71\\x4f\\x63\"\n\"\\x08\\x0e\\x8f\\xf7\\xaa\\xf8\\x70\\x15\\xac\\xa1\\x97\\x8e\\xb6\\x8d\\x08\\xa3\\x94\\x8d\\x90\\x97\\x1f\\x9f\\x94\\x9b\\xa1\\x9d\\x1a\\xa5\\x72\\xa3\\x6f\\x76\"\n\"\\x7f\\x82\\x6d\\x77\\x1e\\x72\\x66\\x82\\x81\\x66\\x6e\\x83\\x8e\\x18\\x8a\\xb8\\x8e\\x95\\x9f\\xaf\\x08\\x98\\xa2\\x8e\\x95\\x9a\\x1a\\xac\\x78\\xa1\\x6e\\x6d\"\n\"\\x75\\x76\\x6e\\x7a\\x8f\\x80\\x99\\x72\\x1e\\xa0\\x64\\x8e\\x81\\x8c\\x61\\x84\\x88\\x18\\x65\\xa0\\x84\\x91\\x72\\xb3\\x08\\xad\\x77\\x7c\\x96\\x6f\\x1b\\x6f\"\n\"\\x78\\x77\\x6e\\x67\\x9b\\x7f\\xbf\\x87\\x1f\\xb8\\x87\\x9b\\x87\\xb4\\x79\\x8a\\x84\\x18\\x6d\\x75\\x80\\x88\\x61\\x89\\x08\\x53\\x6e\\x78\\x66\\x6f\\xa1\\x75\"\n\"\\xa7\\xa0\\x97\\x94\\xaa\\xa0\\x1f\\xa6\\xb2\\x93\\x93\\xb1\\xa7\\x92\\x86\\x18\\x8a\\x5d\\x88\\x81\\x78\\x69\\x08\\x7f\\x75\\x88\\x82\\x7b\\x1a\\x69\\x9e\\x74\"\n\"\\xa8\\xa8\\xa1\\xa1\\xa9\\x98\\x88\\x94\\x80\\x9f\\x1e\\x78\\xb2\\x85\\x9d\\x87\\xb6\\x92\\x90\\x18\\xa8\\x7c\\x93\\x84\\x9f\\x6f\\x08\\x59\\xac\\x9a\\x7f\\xa6\"\n\"\\x1b\\xa7\\xa0\\xa0\\xa8\\xad\\x78\\x98\\x55\\x8f\\x1f\\x5e\\x8f\\x7c\\x8f\\x67\\x9c\\x08\\x0e\\xd5\\xf7\\x85\\xf7\\xbd\\x15\\xfb\\x64\\x33\\xf7\\x64\\xfb\\x65\"\n\"\\xe3\\xf7\\x65\\xf7\\x64\\xe3\\xfb\\x64\\xf7\\x65\\x33\\x06\\x0e\\xfb\\x8a\\xc4\\xfb\\x48\\x6f\\x0a\\xfb\\x37\\xd5\\x1d\\xfb\\x8a\\xf7\\x11\\xf7\\x30\\x15\\x2d\"\n\"\\x1d\\x0e\\xfb\\x6e\\xf7\\xc2\\xf9\\x47\\x15\\x31\\x06\\xfb\\x80\\xfd\\x5a\\x05\\xe5\\x06\\x0e\\x8f\\xf7\\x8e\\xf9\\x44\\x15\\x4a\\x49\\x5f\\x43\\x62\\x1f\\x6b\"\n\"\\x54\\x75\\x2d\\x38\\x1a\\xfb\\x63\\xe9\\xfb\\x26\\xf7\\x19\\xf7\\x16\\xea\\xf7\\x28\\xf7\\x5e\\xf7\\x5c\\x2a\\xf7\\x2b\\xfb\\x15\\x1e\\xcf\\xfc\\x66\\x15\\x50\"\n\"\\x83\\x3d\\x82\\x70\\x1e\\x6e\\x80\\x7b\\x7d\\x74\\x1b\\x59\\x78\\xc5\\xf7\\x29\\x1f\\xf7\\x79\\x07\\xf7\\x2c\\x9d\\xc4\\xbc\\xbc\\x9f\\x4d\\xfb\\x27\\x1e\\x0e\"\n\"\\x8f\\xf8\\x4e\\xa3\\x15\\x31\\x8c\\x79\\x9b\\xd8\\x1a\\xf8\\xce\\x7a\\x07\\xfb\\x90\\xfb\\x01\\x05\\x71\\x07\\x94\\x8e\\x92\\x8e\\x8f\\x8d\\x08\\x95\\xa6\\xa4\"\n\"\\x92\\x98\\x1b\\xa4\\x96\\x75\\x5c\\x1f\\xfc\\x15\\x07\\x8c\\x3a\\x76\\x79\\x28\\x8a\\x08\\x73\\xf8\\x0b\\x07\\x0e\\x8f\\xf8\\x72\\xf7\\x67\\x15\\x73\\x06\\x6e\"\n\"\\x44\\x80\\x85\\x24\\x8a\\x08\\xfb\\x2b\\x06\\xf7\\x36\\xf7\\x2e\\x05\\xda\\xd6\\xae\\xce\\xd7\\x1a\\xf6\\x3f\\xd7\\xfb\\x01\\x59\\x5b\\x77\\x67\\x68\\x1e\\x64\"\n\"\\x64\\x77\\x69\\x6f\\x40\\x08\\xa7\\x06\\xca\\xaa\\xb0\\xa6\\xc1\\x1b\\xb7\\xad\\x78\\x67\\xa0\\x1f\\x97\\x76\\x93\\x6f\\x74\\x1a\\x5f\\x78\\x54\\x6b\\x5a\\x1e\"\n\"\\x58\\x3e\\x68\\x60\\xfb\\x26\\xfb\\x30\\x08\\x74\\xf8\\x34\\x07\\x0e\\x8f\\xc5\\xf8\\x9f\\x15\\xc8\\xb1\\xac\\xa2\\xbf\\x1b\\xca\\xb2\\x64\\x4b\\x49\\x68\\x68\"\n\"\\x2c\\x6d\\x1f\\x7a\\x07\\xde\\x6e\\xac\\x7a\\xaf\\x69\\x08\\xaa\\x6e\\x9d\\x5e\\x5b\\x1a\\x43\\x65\\x5d\\x4f\\x73\\x78\\x96\\xab\\x6a\\x1e\\xb2\\x64\\x6e\\x9b\"\n\"\\x6c\\x1b\\x65\\x70\\x73\\x69\\x55\\xc7\\x67\\xe7\\xf7\\x3c\\xf7\\x18\\xf7\\x06\\xf7\\x26\\xba\\x7c\\xb5\\x6e\\xae\\x1f\\x76\\xa4\\x7a\\x96\\x63\\x9d\\x08\\xcb\"\n\"\\xb2\\x9e\\xa8\\xc6\\x1a\\xe1\\x4e\\xbe\\x25\\x28\\x40\\x59\\x24\\x54\\x1e\\x0e\\x8f\\xf8\\x30\\xf7\\x93\\x15\\xf8\\x45\\x3b\\x07\\x50\\x3e\\xfb\\x12\\xfb\\x38\"\n\"\\x47\\x2c\\x4f\\x2c\\x19\\xfb\\x05\\xf7\\x8c\\xfb\\x24\\xf7\\x25\\xf7\\x24\\xca\\xf7\\x03\\x07\\xfb\\x62\\x16\\xfb\\x65\\x06\\xf7\\x65\\xf7\\xbd\\x05\\x0e\\x8f\"\n\"\\xf7\\x29\\xf8\\xb9\\x15\\xf7\\xaa\\x06\\xb6\\xf7\\x13\\x05\\xfb\\xd6\\x06\\x2a\\xfb\\xed\\xea\\x84\\xb3\\x85\\xb8\\x7d\\x19\\xe4\\x6f\\xc0\\x53\\x48\\x1a\\x53\"\n\"\\x5f\\x5f\\x53\\x74\\x70\\x97\\xa9\\x63\\x1e\\xab\\x60\\x6d\\x98\\x71\\x1b\\x67\\x71\\x72\\x68\\x56\\xc5\\x68\\xe4\\xf7\\x39\\xf7\\x09\\xef\\xf7\\x21\\xf3\\x4b\"\n\"\\xdb\\xfb\\x01\\xaa\\x1f\\x65\\x96\\x6c\\x8f\\x39\\x90\\x08\\x0e\\x8f\\xf8\\x6a\\xf9\\x44\\x15\\xfb\\x19\\x78\\x4c\\x75\\x40\\x57\\x08\\xfb\\x04\\x3e\\x50\\xfb\"\n\"\\x04\\xfb\\x19\\x1a\\xfb\\x41\\xe6\\xfb\\x05\\xf7\\x21\\xf7\\x10\\xe6\\xee\\xf7\\x1c\\xf7\\x0d\\x42\\xd9\\xfb\\x06\\x6b\\x75\\x87\\x7e\\x6d\\x1e\\xb0\\xf7\\x27\"\n\"\\xde\\xdc\\xf7\\x26\\xa9\\x08\\xfb\\x81\\xfb\\xb2\\x15\\xce\\xa2\\x55\\xfb\\x33\\xfb\\x0c\\x7f\\x6e\\x5a\\x73\\x7a\\x95\\x9e\\x81\\x1f\\x7a\\xac\\x81\\xd4\\xe8\"\n\"\\x1a\\xc9\\x91\\xc4\\x92\\x90\\x1e\\x91\\x93\\x98\\x8f\\x9a\\x1b\\x0e\\x8f\\xf8\\x71\\xf9\\x38\\x15\\xfc\\x34\\x06\\x5f\\xfb\\x72\\x05\\xa4\\x06\\x9c\\xc9\\xa8\"\n\"\\xa3\\xbf\\x8a\\x08\\xf7\\x63\\x06\\xfb\\x5c\\xfc\\xaf\\x05\\xea\\x06\\x0e\\x8f\\xf7\\x46\\xf7\\xd8\\x15\\x52\\x78\\x73\\x7e\\x72\\x72\\x08\\x6e\\x6f\\x7c\\x65\"\n\"\\x5f\\x1a\\x25\\xe0\\x47\\xf7\\x13\\xf7\\x1f\\xe8\\xdb\\xf7\\x0c\\xe2\\x60\\xc9\\x20\\xcf\\x1e\\xeb\\xad\\xb3\\xb3\\xcc\\x1a\\xe4\\x40\\xc3\\xfb\\x0c\\xfb\\x1b\"\n\"\\x32\\x46\\x21\\x3f\\xb3\\x55\\xee\\x50\\x1e\\xf7\\x0c\\xed\\x15\\x37\\xb6\\x5d\\xc2\\xc3\\x1a\\xba\\xaf\\xaf\\xba\\xc3\\xab\\x5e\\x3e\\x5b\\x83\\x74\\x6a\\x5f\"\n\"\\x1e\\x29\\xfb\\x08\\x15\\xf7\\x01\\x42\\xa3\\x6b\\x41\\x1a\\x48\\x6a\\x62\\x55\\x4e\\x67\\xc0\\xe4\\xc2\\x96\\xa9\\xb3\\xc7\\x1e\\x0e\\x8f\\xaa\\x7e\\x15\\xf7\"\n\"\\x20\\x9f\\xcf\\xa4\\xd9\\xc6\\x08\\xf1\\xd7\\xc1\\xf7\\x00\\xf7\\x13\\x1a\\xf7\\x41\\x2f\\xf7\\x05\\xfb\\x20\\xfb\\x11\\x31\\x28\\xfb\\x1d\\xfb\\x0a\\xd4\\x3b\"\n\"\\xf7\\x01\\xb2\\xa3\\x90\\x99\\xa7\\x1e\\x60\\xfb\\x2c\\x3a\\x3c\\xfb\\x24\\x6e\\x08\\xf7\\x63\\xf9\\x1c\\x15\\xa5\\x9b\\x81\\x73\\x97\\x1f\\x9a\\x70\\x95\\x44\"\n\"\\x44\\x1a\\x70\\x89\\x6b\\x88\\x5e\\x1e\\x89\\x7e\\x8b\\x82\\x8a\\x87\\x8a\\x7e\\x8a\\x86\\x88\\x89\\x08\\x86\\x83\\x79\\x87\\x7c\\x1b\\x4d\\x74\\xc5\\xf7\\x32\"\n\"\\xf7\\x08\\x97\\xa9\\xbb\\x1f\\x0e\\xfb\\x37\\xf7\\x3a\\xf7\\x30\\x15\\x2d\\x1d\\xf7\\xd0\\x04\\x9b\\x0a\\xfb\\x37\\xef\\xfb\\x48\\xa9\\x0a\\x6a\\x59\\x5e\\xa9\"\n\"\\x6a\\xb4\\x1e\\x93\\x06\\x97\\x8d\\x05\\x92\\x06\\x95\\x93\\x81\\x80\\x64\\x69\\x61\\x40\\x57\\x1f\\xd8\\xf9\\x0a\\x15\\x9b\\x0a\\xd5\\xf8\\x7f\\xf8\\xed\\x15\"\n\"\\xfc\\x3c\\xfb\\xa4\\x05\\x78\\x07\\xf8\\x3c\\xfb\\xb0\\x05\\xf7\\x16\\x07\\xfb\\xb3\\xf7\\x54\\xf7\\xb3\\xf7\\x4e\\x05\\x0e\\xd5\\xf8\\xad\\xf8\\x23\\x15\\xfc\"\n\"\\x8c\\x33\\xf8\\x8c\\x06\\xfb\\x08\\x04\\xfc\\x8c\\x33\\xf8\\x8c\\x06\\x0e\\xd5\\xd5\\xa5\\x15\\xf8\\x3c\\xf7\\xa4\\x05\\x9f\\x07\\xfc\\x3c\\xf7\\xaf\\x05\\xfb\"\n\"\\x16\\x07\\xf7\\xb3\\xfb\\x53\\xfb\\xb3\\xfb\\x4f\\x05\\x0e\\x8f\\xf7\\x91\\xf7\\x7b\\x15\\xd4\\x93\\x99\\xca\\xb2\\x1e\\xe6\\xc3\\xa9\\xb4\\xd0\\x1a\\xef\\x3c\"\n\"\\xcd\\xfb\\x0d\\xfb\\x02\\x3d\\x4f\\x37\\x5e\\xa7\\x6c\\xb3\\xb1\\xa4\\xa5\\xb1\\x9f\\x86\\x97\\x7a\\x9e\\x1e\\x7f\\x98\\x88\\x91\\x95\\x1a\\xa3\\xa3\\x9b\\xaf\"\n\"\\xc1\\xaa\\x5c\\x38\\x57\\x81\\x69\\x6a\\x4c\\x1e\\x73\\x5d\\x83\\x74\\x6f\\x1a\\x80\\x8b\\x86\\x8d\\x6d\\x1e\\x9b\\x40\\x15\\x5d\\x64\\x64\\x5e\\x5b\\xb0\\x66\"\n\"\\xbb\\xba\\xb0\\xb0\\xba\\xba\\x65\\xb1\\x5d\\x1f\\x0e\\xf8\\x46\\xf8\\xe7\\xf8\\x66\\x15\\xb6\\x74\\x7d\\x95\\x67\\x1b\\x5f\\x60\\x78\\x6a\\x6b\\x1f\\x57\\x54\"\n\"\\x6b\\x3c\\x41\\x1a\\x4a\\xb4\\x59\\xc0\\xb6\\xbb\\xa7\\xb9\\xae\\x1e\\x5e\\x92\\xb0\\x6d\\xbd\\x1b\\xf1\\xe2\\xf7\\x05\\xf7\\x1a\\xf7\\x3e\\xfb\\x27\\xf7\\x17\"\n\"\\xfb\\x52\\xfb\\x66\\xfb\\x3b\\xfb\\x33\\xfb\\x5e\\xfb\\x58\\xf7\\x3a\\xfb\\x2d\\xf7\\x69\\xd6\\xbf\\x99\\xb9\\xec\\x1f\\x7e\\xae\\x05\\x66\\x3a\\x59\\x7f\\x47\"\n\"\\x1b\\xfb\\x43\\xfb\\x10\\xf7\\x10\\xf7\\x42\\xf7\\x52\\xf7\\x0c\\xf7\\x1d\\xf7\\x39\\xf7\\x31\\xf7\\x19\\xfb\\x0e\\xfb\\x25\\x21\\x4d\\x28\\x49\\x72\\x7e\\x9c\"\n\"\\xaa\\x91\\x8c\\x92\\x8c\\x90\\x1f\\xcd\\xf7\\x98\\x05\\x44\\x06\\x44\\x68\\x15\\xa8\\x89\\x9a\\x73\\x89\\x64\\x89\\x5e\\x7a\\x4e\\x76\\x61\\x08\\x61\\x75\\x6d\"\n\"\\x72\\x6d\\x1b\\x67\\x74\\xac\\xc0\\xc1\\x9d\\xbe\\xad\\xb1\\x1f\\xa7\\xac\\xad\\x9f\\xa4\\x89\\x08\\x0e\\x26\\x0a\\x0e\\xf7\\x3f\\x9b\\x16\\xf7\\xd6\\x06\\xf7\"\n\"\\x3d\\xf7\\x04\\xd6\\xf7\\x05\\xb9\\x78\\xb3\\x68\\xaa\\x1f\\x68\\xa9\\x69\\x9a\\x45\\x9a\\x08\\xf7\\x08\\xad\\xb6\\xb4\\xd7\\x1a\\xf2\\x2f\\xc4\\xfb\\x3c\\x1e\"\n\"\\xfb\\xc9\\x72\\x06\\xce\\x88\\x9e\\x7c\\x8d\\x56\\x08\\xfc\\x78\\x07\\x89\\x57\\x7c\\x7e\\x44\\x85\\x08\\xf7\\x8c\\xf7\\xd2\\x15\\xa9\\x06\\xf2\\xbd\\x55\\xfb\"\n\"\\x02\\x2a\\x62\\x59\\x3a\\x5f\\x7a\\x9c\\xb7\\x1f\\xf8\\x8c\\x04\\xaf\\x99\\x98\\xb3\\xd1\\xab\\x60\\x2d\\x22\\x6a\\x6f\\xfb\\x0f\\x88\\x1e\\x0e\\x47\\x1d\\x0e\"\n\"\\x5e\\x0a\\x0e\\xf7\\x3f\\x24\\x0a\\x0e\\xf7\\x07\\x9b\\xf9\\x1f\\x15\\xce\\x88\\x9f\\x7c\\x8c\\x56\\xdc\\x1d\\xf7\\xfc\\xa4\\x07\\x32\\x8e\\x78\\x97\\x89\\xc3\"\n\"\\x08\\xf7\\x7d\\x07\\xf1\\x89\\xb0\\x66\\x99\\xfb\\x08\\x08\\xa4\\xf7\\xe6\\x72\\x06\\xfb\\x06\\x79\\x68\\x68\\x27\\x1b\\xf7\\x7c\\x07\\xb1\\x98\\x94\\xbe\\xe7\"\n\"\\xc7\\x7a\\x68\\xa9\\x1e\\xa1\\x72\\x96\\x70\\x99\\x4c\\x08\\xa3\\xf7\\x5d\\xfc\\xcb\\x06\\x0e\\xf7\\xae\\x3d\\x0a\\x0e\\xf7\\xae\\xf9\\x8b\\x90\\x1d\\xbe\\xa0\"\n\"\\x9c\\xcf\\x8e\\x08\\xa4\\xfb\\xe5\\x72\\x07\\xcc\\x86\\x9d\\x7c\\x8d\\x58\\x08\\xfc\\x78\\x07\\x8a\\x59\\x7b\\x7e\\x47\\x83\\x43\\x1d\\x44\\x92\\x79\\x98\\x8a\"\n\"\\xbe\\x46\\x0a\\x89\\x58\\x7a\\x7e\\x44\\x84\\x08\\x72\\xf7\\xe8\\x07\\x0e\\x20\\x27\\x0a\\x0e\\x8f\\xf8\\x73\\xf9\\x38\\x15\\xfb\\xf4\\x72\\x06\\xda\\x8a\\x9f\"\n\"\\x7c\\x8d\\x54\\x08\\xfc\\xc0\\x07\\x4d\\x79\\x72\\x5d\\x6f\\x7a\\x97\\x9f\\x94\\x8e\\x90\\x94\\x96\\x1e\\x97\\x9a\\x8e\\x93\\x9b\\x1a\\xb3\\x69\\xae\\x64\\x66\"\n\"\\x6a\\x69\\x65\\x62\\xa7\\x5e\\xb2\\x74\\x1e\\x7d\\xa5\\xb2\\x82\\xb3\\x1b\\xf7\\x21\\xd5\\xd7\\xf7\\x23\\xe4\\x1d\\x0e\\xf7\\xae\\x52\\x0a\\x0e\\xf7\\x3f\\x31\"\n\"\\x1d\\x0e\\xf8\\x54\\xfa\\x2d\\xa4\\x15\\x3f\\x94\\x81\\x95\\x89\\xd4\\x08\\xf8\\x4e\\x07\\x8d\\xd5\\x99\\x99\\xd3\\x8f\\x08\\xa4\\xfb\\x90\\x07\\xfb\\x5c\\xfc\"\n\"\\x6c\\xfb\\x5c\\xf8\\x6c\\x05\\xfb\\x91\\x72\\x06\\xd3\\x86\\x9c\\x7d\\x57\\x1a\\xfc\\x6f\\x07\\x8a\\x4e\\x7e\\x7f\\x3e\\x84\\x08\\x72\\xf7\\x7e\\xa4\\x07\\x3a\"\n\"\\x90\\x78\\x9f\\x8a\\xd5\\x08\\xf8\\x6a\\x07\\xf7\\x90\\xfc\\xe6\\x05\\xa6\\x06\\xf7\\x90\\xf8\\xf5\\x05\\xfc\\x91\\x07\\x89\\x52\\x7e\\x7f\\x41\\x85\\x08\\x72\"\n\"\\xf7\\xe0\\x07\\x0e\\x30\\x1d\\x0e\\xf7\\xae\\x26\\x1d\\x0e\\xf7\\x07\\x9b\\xb1\\x0a\\xf7\\x4e\\x07\\xf7\\x1b\\x8c\\xad\\x8f\\xb7\\x9c\\x08\\xdc\\xaa\\xb7\\xc7\"\n\"\\xd9\\x1a\\xf7\\x08\\x2c\\xcd\\xfb\\x3b\\x1e\\xfb\\xd6\\x72\\x06\\x4e\\x1d\\xf8\\xd9\\x15\\xa2\\x9c\\x97\\xac\\xde\\x4b\\x0a\\x74\\x1e\\x77\\x73\\x6a\\x84\\x44\"\n\"\\x1b\\x0e\\xf7\\xae\\xf9\\x6e\\xfb\\x09\\x15\\x81\\x69\\x7e\\x89\\x77\\x1b\\x5c\\x5e\\x9d\\xad\\x69\\x1f\\x78\\x9e\\x81\\x9a\\x79\\xb0\\xdc\\xa5\\xae\\x9f\\xb6\"\n\"\\xb9\\x08\\xc8\\xcc\\xac\\xe1\\xec\\x1a\\xf7\\x64\\xfb\\x28\\xf7\\x29\\xfb\\x62\\xfb\\x61\\xfb\\x29\\xfb\\x2c\\xfb\\x64\\x2f\\xaa\\x38\\xc5\\x4b\\x1e\\xb4\\x5d\"\n\"\\xab\\x77\\xd7\\x6f\\xa0\\x5f\\x97\\x78\\xa2\\x74\\x08\\x53\\xc3\\xdf\\x6b\\xe3\\x1b\\xc8\\xb7\\x94\\xa5\\xd5\\x1f\\xfb\\xee\\xf9\\xb3\\x15\\xf7\\x04\\xcb\\xfb\"\n\"\\x0c\\xfb\\x65\\xfb\\x61\\x4e\\xfb\\x02\\xfb\\x08\\xfb\\x08\\x4e\\xf7\\x01\\xf7\\x64\\xf7\\x66\\xcb\\xf7\\x09\\xf7\\x06\\x1f\\x0e\\x34\\x1d\\x0e\\xc7\\x33\\x1d\"\n\"\\x0e\\xf7\\x3f\\x48\\x1d\\x0e\\x24\\x1d\\x0e\\xf9\\x51\\xf9\\x38\\x15\\xfb\\x69\\x72\\x06\\xd1\\x87\\x9b\\x83\\x6b\\x1a\\x7b\\x88\\x7f\\x7a\\x60\\x1e\\xfb\\x13\"\n\"\\xfb\\xdd\\xfb\\x1e\\xf7\\xe2\\x05\\x78\\xb9\\x87\\x96\\x9a\\x1a\\xa2\\x9a\\x96\\xb1\\x8d\\x1e\\x90\\x98\\x8c\\x8c\\x9a\\x1f\\xa4\\xfb\\xe4\\x72\\x07\\xbd\\x84\"\n\"\\x94\\x83\\xa4\\x54\\xf7\\x94\\xfc\\xeb\\x18\\xa6\\x06\\xf7\\x78\\xf8\\xdf\\xa3\\xc9\\x99\\x98\\xbf\\x92\\x19\\x0e\\xf8\\x8c\\x2e\\x1d\\x0e\\xf9\\x44\\xf9\\x38\"\n\"\\x15\\xfb\\x8e\\x72\\x06\\xcb\\x86\\x93\\x86\\x70\\x1a\\x76\\x80\\x77\\x5c\\x4a\\x1e\\x7f\\x7b\\x77\\x6f\\x73\\x6a\\x2a\\xf7\\x2a\\x18\\x7e\\x9f\\x89\\x90\\x97\"\n\"\\x1a\\xa0\\x97\\x93\\xaf\\x8d\\x1e\\x90\\x97\\x8c\\x8c\\x99\\x1f\\xa4\\xfb\\xee\\x72\\x07\\xaf\\x88\\x98\\x81\\xaa\\x5e\\xf7\\x5a\\xfb\\xb7\\x18\\xfb\\x43\\xfb\"\n\"\\x71\\x6d\\x66\\x73\\x7e\\x59\\x85\\x19\\x72\\xf7\\x8e\\xa4\\x07\\x4e\\x91\\x77\\x95\\xa5\\x1a\\xa0\\x9e\\xaa\\xd6\\xf0\\x1e\\xb1\\xbe\\xf0\\xfb\\x36\\x05\\x97\"\n\"\\x78\\x94\\x74\\x7f\\x1a\\x7a\\x7a\\x82\\x68\\x89\\x1e\\x87\\x80\\x8a\\x8a\\x7e\\x1f\\x72\\xf7\\xe8\\xa4\\x07\\x69\\x8c\\x7c\\x98\\x5b\\xd3\\xfb\\x4a\\xf7\\xaf\"\n\"\\x18\\xdb\\xf7\\x03\\xe3\\xf7\\x0c\\xa5\\x9e\\xd5\\x92\\x19\\x0e\\x2c\\x0a\\x0e\\xf7\\x3f\\x37\\x1d\\x0e\\xfb\\x37\\xf7\\xc1\\xf9\\x3a\\x15\\xfb\\x7e\\xfd\\xcf\"\n\"\\xf7\\x7e\\xac\\x3b\\x06\\x61\\x8c\\x82\\x95\\x8c\\xb5\\x08\\xf9\\x12\\x07\\x8c\\xc7\\x93\\x94\\xc5\\x8c\\x08\\xca\\x06\\x0e\\xfb\\x6e\\xf7\\x67\\x78\\x15\\xe7\"\n\"\\x06\\xfb\\x7f\\xf9\\x5a\\x05\\x2e\\x06\\x0e\\xfb\\x37\\xab\\xfb\\x29\\x15\\xf7\\x7e\\xf9\\xcf\\xfb\\x7e\\x6a\\xca\\x06\\xc4\\x8a\\x94\\x82\\x8c\\x4f\\x08\\xfd\"\n\"\\x12\\x07\\x8c\\x60\\x83\\x82\\x60\\x8a\\x08\\x3b\\x06\\x0e\\xe0\\xf7\\x36\\xf7\\xcb\\x15\\xf7\\x15\\xf7\\xa4\\xf7\\x15\\xfb\\xa4\\x05\\xe4\\x06\\xfb\\x46\\xf8\"\n\"\\x01\\x05\\x3b\\x06\\xfb\\x46\\xfc\\x01\\x05\\x0e\\x8f\\xf8\\x87\\xfb\\x23\\x15\\xd0\\xfc\\x85\\x46\\x07\\x0e\\xfb\\x37\\xf7\\x80\\xf9\\x47\\xcd\\x1d\\xbe\\xb9\"\n\"\\x6d\\xab\\x60\\xae\\x1d\\x0e\\x8f\\x23\\x1d\\x0e\\xc7\\x9c\\xf9\\x20\\x15\\xb8\\x83\\x94\\x82\\x8c\\x62\\x08\\xfc\\xf3\\x97\\x07\\xda\\xc3\\x05\\x61\\xb9\\xaf\"\n\"\\x7c\\xbd\\x1b\\xf7\\x19\\xe8\\xf2\\xf7\\x2a\\xf7\\x1f\\x3e\\xea\\xfb\\x03\\x5a\\x68\\x7b\\x63\\x65\\x1f\\xf7\\x97\\xfb\\x56\\x07\\xf7\\x56\\xfb\\xd0\\x15\\xb6\"\n\"\\x9d\\x9e\\x9b\\xac\\x1b\\xc9\\xaa\\x49\\xfb\\x18\\xfb\\x1f\\x6d\\x4b\\x4b\\x61\\x70\\xaa\\xbb\\x1f\\x0e\\x57\\x36\\x1d\\x0e\\xc7\\xf8\\xaa\\x5b\\x0a\\x0e\\x57\"\n\"\\x25\\x1d\\x0e\\xfb\\x37\\x99\\x16\\xf7\\xaa\\xa3\\x06\\x46\\x8d\\x7f\\x96\\x8a\\xcd\\x08\\xf7\\xce\\xe2\\xb7\\x34\\x39\\x1d\\xb0\\xa4\\xa4\\xb0\\xc6\\x51\\xb4\"\n\"\\x36\\x48\\x57\\x73\\x5f\\x70\\x1e\\x9a\\x0a\\x0e\\x8f\\x32\\x0a\\x0e\\xc7\\xf8\\xaa\\xa3\\x15\\x68\\x8c\\x7d\\x9d\\xb4\\x1a\\xf7\\x8c\\x07\\xe1\\x56\\xc2\\x39\"\n\"\\x56\\x66\\x77\\x51\\x57\\x1e\\xf7\\xad\\x55\\x1d\\xfc\\x92\\x3a\\x1d\\x8f\\x92\\x95\\x56\\x1d\\x0e\\xfb\\x6e\\x29\\x1d\\xfb\\x09\\xf9\\x47\\x15\\x60\\x68\\x68\"\n\"\\x61\\x5e\\xac\\x6a\\xb7\\xb7\\xad\\xac\\xb7\\xb7\\x69\\xad\\x60\\x1f\\x0e\\xfb\\x37\\xf7\\x98\\xf8\\x61\\x15\\xfb\\x5e\\x73\\x06\\xbc\\x88\\x98\\x7f\\x8c\\x5f\"\n\"\\x08\\xfc\\x6e\\x07\\x56\\x7c\\x74\\x6a\\xa0\\x1d\\xdd\\xd0\\xe7\\x1d\\x40\\xf9\\x45\\x15\\x60\\x69\\x69\\x60\\x5d\\xab\\x6b\\xb8\\xb7\\xad\\xad\\xb6\\xb6\\x68\"\n\"\\xae\\x60\\x1f\\x0e\\xc7\\x6c\\x1d\\x0e\\xfb\\x6e\\x34\\x0a\\x0e\\xf7\\xe5\\xf9\\xc2\\xa3\\x15\\x65\\x8c\\x7e\\x9a\\x8c\\xb4\\x08\\xf7\\x8f\\x07\\xe1\\x56\\xc2\"\n\"\\x39\\x52\\x64\\x74\\x4b\\x58\\x1e\\xca\\x6d\\x68\\xa3\\x4c\\x1b\\x4b\\x5e\\x70\\x4f\\x65\\x1f\\xd6\\xfb\\x53\\x73\\x07\\xb5\\x86\\x97\\x7f\\x42\\x1d\\x81\\x80\"\n\"\\x5f\\x84\\x08\\x73\\xf7\\x84\\xa3\\x07\\x69\\x8f\\x7f\\x99\\xb2\\x1a\\xf7\\x9f\\x07\\x91\\x9b\\x9d\\x98\\x96\\x1e\\x9b\\xa0\\x9b\\x92\\x9d\\x1b\\xb2\\x9a\\x74\"\n\"\\x4f\\x1f\\xfb\\x86\\x07\\x8c\\x64\\x7e\\x7c\\x67\\x88\\x08\\x73\\xf7\\x7e\\xa3\\x07\\x69\\x8e\\x7e\\x9b\\xb1\\x1a\\xf7\\x9f\\x07\\x90\\x9b\\x9e\\x98\\x95\\x1e\"\n\"\\x9c\\xa1\\x9b\\x92\\x9d\\x1b\\xb1\\x9a\\x73\\x50\\x1f\\xfb\\x86\\x07\\x8c\\x63\\x7e\\x7c\\x66\\x89\\x08\\x73\\xf7\\x82\\x07\\x0e\\xc7\\x2d\\x0a\\x0e\\x8f\\x27\"\n\"\\x1d\\x0e\\xc7\\x97\\x1d\\x50\\x67\\x74\\x51\\x6c\\x1f\\xd0\\xfb\\x53\\x73\\x07\\xb7\\x85\\x95\\x80\\x61\\x1a\\xfc\\x89\\x79\\x0a\\xfb\\x10\\x70\\x50\\x51\\x6a\"\n\"\\x6e\\xa2\\xb1\\x7c\\x1f\\x0e\\xc7\\xf8\\xac\\xfb\\x49\\x15\\x5e\\x93\\x82\\x94\\x8a\\xb4\\x08\\xf8\\xe7\\x7c\\x07\\x3d\\x53\\x05\\xb7\\x58\\x6c\\x98\\x59\\x1b\"\n\"\\xfb\\x16\\x2f\\x22\\xfb\\x29\\xfb\\x1d\\xd7\\x2b\\xf7\\x01\\xbb\\xad\\x9b\\xb3\\xb4\\x1f\\xfb\\x1f\\x07\\x8a\\x4c\\x83\\x82\\x4b\\x80\\x08\\x72\\xf7\\x9f\\x07\"\n\"\\xfb\\x56\\xf7\\xc3\\x15\\x66\\x81\\x72\\x76\\x69\\x1b\\x4d\\x6c\\xcc\\xf7\\x17\\xf7\\x1c\\xab\\xd0\\xca\\xb3\\xa6\\x6b\\x5b\\x1f\\x0e\\x57\\x35\\x1d\\x0e\\x20\"\n\"\\x2f\\x1d\\x0e\\xfb\\x37\\x82\\x1d\\x0e\\xc7\\x23\\x0a\\x0e\\x8f\\xf8\\x79\\xd8\\x1d\\x7f\\x88\\x7d\\x83\\x78\\x1e\\x43\\xfb\\x4a\\x3c\\xf7\\x5f\\x05\\x83\\x9f\"\n\"\\x8a\\x8f\\x92\\x1a\\x9a\\x95\\x92\\xa4\\x8d\\x1e\\x8e\\x92\\x8c\\x8c\\x93\\x1f\\xa3\\xfb\\x8e\\x73\\x07\\xa2\\x88\\x91\\x88\\x91\\x82\\x08\\x8e\\xb9\\x27\\x63\"\n\"\\x9b\\x1f\\xf7\\x0c\\xfb\\xbc\\x05\\xa5\\x06\\xf7\\x34\\xf8\\x20\\x9e\\xb7\\x93\\x93\\xaa\\x8e\\x19\\x0e\\x2b\\x0a\\x0e\\x8f\\xf8\\x78\\xa3\\x15\\x7b\\x90\\x84\"\n\"\\x8f\\x84\\x96\\xfb\\x28\\xf7\\x78\\x18\\xf0\\xf7\\x12\\x9e\\xa2\\x9f\\x96\\xaa\\x90\\x19\\xa3\\xfb\\x3c\\x73\\x07\\xbb\\x86\\x8e\\x8a\\x79\\x1a\\x7c\\x81\\x7a\"\n\"\\x6f\\x6b\\x1e\\x85\\x85\\x7c\\x78\\x7c\\x76\\x76\\xa7\\x7e\\x9d\\x87\\x91\\x08\\x76\\xab\\x7f\\xa1\\x93\\x1a\\x98\\x98\\x91\\xad\\x8c\\x1e\\xa3\\xfb\\x8e\\x73\"\n\"\\x07\\xa5\\x86\\x91\\x87\\x9f\\x6d\\xf7\\x14\\xfb\\x59\\x18\\x6e\\x66\\x70\\x6a\\x82\\x7d\\x6f\\x64\\x6f\\x6c\\x78\\x7f\\x82\\x85\\x80\\x88\\x79\\x89\\x08\\x73\"\n\"\\xf7\\x3d\\xa3\\x07\\x66\\x8d\\x7e\\x92\\x9a\\x1a\\x9b\\xa5\\xb4\\xb1\\xb9\\x1e\\x8e\\x8e\\x91\\x93\\x92\\x94\\x9d\\x6f\\x99\\x76\\x95\\x7d\\x9a\\x75\\x18\\x95\"\n\"\\x7c\\x93\\x78\\x83\\x1a\\x7f\\x7e\\x85\\x6b\\x89\\x1e\\x73\\xf7\\x85\\x07\\x0e\\x8f\\x2a\\x0a\\x0e\\x57\\x2e\\x0a\\x0e\\x25\\xf7\\xe8\\xfb\\x37\\x15\\x3e\\x99\"\n\"\\x6f\\xac\\x8a\\xd7\\x08\\xf7\\x3f\\x07\\x8a\\xdf\\x73\\xa6\\x2e\\x9e\\xe7\\x9d\\xa4\\xa7\\x8c\\xdf\\x08\\xf7\\x3f\\x07\\x8c\\xd7\\xa7\\xac\\xd8\\x9a\\x08\\x97\"\n\"\\x07\\xfb\\x32\\x58\\x69\\xfb\\x00\\x89\\x1f\\xfb\\x47\\x07\\x8a\\x43\\x74\\x72\\x38\\x78\\xdf\\x77\\xa1\\x73\\x8c\\x43\\x08\\xfb\\x47\\x07\\x8c\\x21\\xc0\\x67\"\n\"\\xf7\\x31\\x8c\\x08\\x0e\\xfb\\xa8\\xcd\\xfb\\x8e\\x15\\xe3\\xfa\\x7a\\x33\\x06\\x0e\\x25\\xc1\\xfb\\x43\\x15\\xf7\\x32\\xbe\\xad\\xf7\\x00\\x8d\\x1f\\xf7\\x47\"\n\"\\x07\\x8c\\xd3\\xa1\\xa3\\xdf\\x9f\\x37\\x9e\\x75\\xa3\\x8a\\xd4\\x08\\xf7\\x47\\x07\\xf6\\x89\\x57\\xad\\xfb\\x31\\x1b\\x7f\\x07\\xd8\\x7d\\xa7\\x6a\\x8c\\x3f\"\n\"\\x08\\xfb\\x3f\\x07\\x8c\\x37\\xa4\\x6f\\xe7\\x79\\x08\\x2f\\x79\\x71\\x6e\\x38\\x1a\\xfb\\x3f\\x07\\x8a\\x3f\\x6f\\x6a\\x3e\\x7c\\x08\\x0e\\xa3\\xf8\\x48\\xf7\"\n\"\\xd4\\x15\\x6b\\x72\\x78\\x7e\\x73\\x1b\\x79\\x78\\x91\\x9f\\x5f\\x1f\\xab\\x45\\x6b\\x95\\x6b\\x1b\\x56\\x64\\x71\\x51\\x6b\\x8b\\x0a\\xac\\xa1\\xc9\\xb7\\x1f\"\n\"\\x0e\\xfb\\x37\\xf7\\x3c\\xf8\\x89\\x15\\x5a\\x66\\x67\\x5c\\x5b\\xb1\\x65\\xba\\xb9\\xb1\\xb1\\xb9\\xbb\\x67\\xb0\\x5c\\x1f\\x7c\\xfb\\x8b\\x15\\x7e\\xfb\\x10\"\n\"\\x81\\x5b\\x6e\\x2b\\x08\\x7d\\x5e\\x87\\x79\\x72\\x1a\\x4b\\xaa\\x66\\xc0\\xc1\\xaa\\xb0\\xca\\xa4\\x87\\x9e\\x7d\\xb8\\x1e\\x6e\\xeb\\x81\\xbc\\x7e\\xf7\\x0f\"\n\"\\x08\\x0e\\x8f\\xf8\\x41\\xf8\\xe0\\x15\\x63\\x06\\x5f\\xfb\\x0f\\x05\\x91\\x73\\x7c\\x8d\\x76\\x1b\\xfb\\x19\\x28\\x20\\xfb\\x23\\x44\\xa1\\x4f\\xb5\\x60\\x1f\"\n\"\\x9d\\x79\\x98\\x81\\xac\\x7b\\x58\\xfb\\x25\\x18\\xb3\\x06\\xba\\xf7\\x19\\x05\\x86\\x9e\\x97\\x89\\x9e\\x1b\\xb2\\xb0\\x95\\x9e\\xad\\x1f\\xa6\\x9a\\x9f\\x9e\"\n\"\\xad\\xb5\\x79\\x9d\\x18\\x62\\x69\\x6f\\x7c\\x60\\x1b\\x69\\x75\\x95\\xa6\\x70\\x1f\\xdd\\xf7\\x7a\\x05\\x7d\\x97\\x98\\x85\\x9e\\x1b\\xb3\\xa5\\xa4\\xb1\\xb1\"\n\"\\x78\\xa6\\x5f\\xa3\\x1f\\xfb\\x30\\xfb\\xd8\\x15\\x75\\xba\\x82\\xb3\\xc6\\x1a\\xf2\\xac\\xcc\\xbe\\xa4\\x9d\\x79\\x73\\x1e\\x88\\x07\\x0e\\x8f\\xf8\\x14\\xf8\"\n\"\\x09\\x15\\xfb\\x06\\x06\\x78\\xe0\\x77\\xf7\\x03\\xa1\\x1a\\xb1\\xa1\\xa4\\xad\\xa8\\x9b\\x7a\\x6e\\x8a\\x1e\\x89\\x5f\\x05\\x65\\x89\\xa5\\x70\\xb1\\x1b\\xb5\"\n\"\\xa5\\xa6\\xb8\\xd1\\x51\\xb6\\x2e\\x59\\x5e\\x7e\\x74\\x6c\\x1f\\x5b\\x68\\x6e\\x4f\\x4b\\x1a\\x6d\\x8e\\x72\\x96\\x4e\\x1e\\x3b\\x4a\\xed\\x06\\x8f\\x80\\xa9\"\n\"\\x36\\x90\\x77\\x8d\\x68\\x19\\x90\\x77\\x7e\\x8d\\x79\\x1b\\x46\\x66\\x6b\\x4f\\x55\\xab\\x6c\\xc3\\xb8\\xad\\x9e\\xb6\\xac\\x1f\\x5a\\xc2\\xa6\\x7d\\xb6\\x1b\"\n\"\\xb3\\xab\\x9c\\xaa\\xa0\\x1f\\xa0\\xaa\\x95\\xb2\\x92\\xda\\x08\\x74\\x06\\x54\\x7c\\x74\\x7b\\x4c\\x1b\\x70\\x72\\x91\\x9b\\x5f\\x1f\\x9b\\xba\\x8f\\xa3\\xbc\"\n\"\\x1a\\x9f\\x8a\\x9a\\x8a\\x9e\\x1e\\xf7\\x01\\x06\\xfb\\x5f\\xfb\\x72\\x15\\x5a\\x7d\\x76\\x77\\x66\\x1b\\x69\\x75\\x9e\\xa9\\xab\\xa1\\x9f\\xad\\xa5\\x9e\\x83\"\n\"\\x73\\xa6\\x1f\\x0e\\xfb\\xdd\\xf7\\xa5\\x3b\\x1d\\x0e\\x8f\\xf8\\x56\\xf7\\xb8\\x15\\xbd\\xfb\\x03\\x07\\xf7\\x24\\xf7\\xa3\\x98\\xa3\\x9c\\x95\\xad\\x8e\\x19\"\n\"\\xa5\\xfb\\x61\\x71\\x07\\xcb\\x88\\x99\\x83\\x6b\\x1a\\x7f\\x88\\x7f\\x86\\x80\\x1e\\xfb\\x0b\\xfb\\x7a\\x7c\\xa8\\x7c\\xaa\\x7d\\xa7\\x7e\\xa3\\x19\\x6d\\xc5\"\n\"\\x05\\x66\\xd4\\x82\\xa1\\x99\\x1a\\xa0\\x9c\\x92\\xc7\\x8c\\x1e\\xa5\\xfb\\xc1\\x71\\x07\\xb4\\x88\\xa2\\x7d\\x9e\\x67\\xf7\\x16\\xfb\\x93\\x18\\x28\\x59\\xf7\"\n\"\\x10\\x06\\x96\\x76\\x05\\x52\\xfb\\x1b\\x59\\xf7\\x1b\\x5a\\x07\\x89\\x45\\x7a\\x7d\\x38\\x85\\x08\\x72\\xf7\\xdf\\xa4\\x07\\x3a\\x91\\x7b\\x99\\x89\\xd1\\x08\"\n\"\\xbc\\xf7\\x1b\\xbd\\xfb\\x1b\\xce\\x07\\x8f\\x96\\x05\\x0e\\x8f\\xd5\\xf8\\x1e\\x15\\xf7\\x08\\x06\\x7e\\xfc\\x2a\\x05\\x47\\x89\\x71\\x5e\\x66\\x1b\\x7f\\x81\"\n\"\\x92\\x94\\x8e\\x8d\\x8e\\x90\\x91\\x1f\\x93\\x95\\x8e\\x92\\x96\\x1a\\xa8\\x75\\x9f\\x6c\\x6a\\x75\\x74\\x69\\x5b\\xaf\\x6d\\xc4\\xf5\\xd2\\xe3\\xf7\\x39\\xa8\"\n\"\\x1e\\x93\\xba\\x8d\\xa2\\x98\\xf7\\x76\\x08\\xf7\\x0e\\xb9\\xfb\\x0e\\xe5\\x06\\xec\\xa1\\xbc\\xb5\\x97\\x96\\x84\\x83\\x89\\x89\\x87\\x88\\x86\\x1e\\x83\\x7f\"\n\"\\x86\\x7e\\x7f\\x1a\\x72\\xa3\\x76\\xa8\\xaa\\xa2\\xa5\\xae\\xba\\x63\\xaa\\x4d\\x55\\x5f\\x75\\x60\\x6a\\x1e\\x68\\x5e\\x78\\x54\\x7a\\x26\\x08\\xfb\\x0c\\x06\"\n\"\\x0e\\x8f\\xf7\\xae\\xab\\x15\\xa7\\x74\\x94\\x7b\\x6c\\x1a\\x5b\\x71\\x74\\x56\\x67\\x6b\\x99\\x9a\\x8f\\x8f\\x8f\\x96\\x92\\x1e\\xa2\\x99\\x93\\x96\\x9c\\x1a\"\n\"\\xa9\\x6d\\xa5\\x68\\x67\\x70\\x6f\\x66\\x54\\xce\\x5e\\xde\\xeb\\xcf\\xc1\\xd6\\xc1\\x6f\\xb4\\x41\\xbf\\x1e\\xc1\\x8c\\xa7\\x92\\xa1\\x9d\\x08\\xa2\\x9e\\x99\"\n\"\\xaa\\xaf\\x1a\\xaa\\x84\\xa7\\x7e\\xa1\\x1e\\x6d\\xbe\\x59\\xbc\\x49\\xb6\\x08\\x46\\xb9\\x68\\xb2\\xad\\x1a\\xb4\\xad\\xa7\\xbd\\xa6\\xa5\\x81\\x80\\x87\\x86\"\n\"\\x84\\x81\\x83\\x1e\\x79\\x7d\\x82\\x7c\\x7d\\x1a\\x6f\\xaa\\x6e\\xa8\\xad\\xaa\\xaa\\xac\\xc0\\x48\\xb9\\x3d\\x34\\x4d\\x55\\x3f\\x5b\\x9d\\x71\\xdd\\x43\\x1e\"\n\"\\x5d\\x74\\x87\\x7f\\x76\\x1f\\x69\\x78\\x79\\x66\\x59\\x1a\\x48\\xa5\\x6a\\xf7\\x22\\xfb\\x07\\x1e\\x64\\xf7\\xce\\x15\\xa9\\xb5\\x70\\x4c\\xcd\\x1f\\xac\\x6c\"\n\"\\x95\\x78\\x70\\x1a\\x69\\x75\\x73\\x6c\\x6d\\x76\\x97\\xc1\\x4d\\x1e\\x4f\\xbf\\x82\\x99\\xb1\\x1a\\xab\\xa1\\xa2\\xab\\x1e\\x0e\\x8f\\x71\\xf7\\x0b\\x15\\xc5\"\n\"\\x51\\xeb\\xed\\x05\\x71\\xb5\\xaf\\x80\\xb7\\x1b\\xb7\\xaf\\x96\\xa5\\xb5\\x1f\\xeb\\x29\\xc5\\xc5\\x29\\xed\\x05\\xa5\\xb0\\x96\\xaf\\xba\\x1a\\xb9\\x81\\xac\"\n\"\\x70\\xb6\\x1e\\xed\\xed\\x51\\xc3\\x2b\\x2b\\x05\\xa4\\x63\\x68\\x95\\x5c\\x1b\\x5d\\x67\\x81\\x72\\x63\\x1f\\x2b\\xeb\\x51\\x53\\xed\\x29\\x05\\x71\\x63\\x80\"\n\"\\x67\\x5d\\x1a\\x5c\\x96\\x69\\xa5\\x64\\x1e\\xf7\\x46\\xf7\\x91\\x15\\xd2\\xc3\\x50\\x3f\\x44\\x51\\x4f\\x46\\x44\\x53\\xc6\\xd5\\xd6\\xc3\\xc5\\xd2\\x1f\\x0e\"\n\"\\xfb\\x6e\\xf7\\x34\\xf8\\x28\\x15\\xad\\xf7\\x26\\x95\\xbe\\xa2\\x1a\\xb2\\x6f\\xa7\\x66\\x64\\x72\\x6f\\x60\\x75\\x97\\x4d\\xa0\\x37\\x1e\\x8d\\x84\\x8f\\x78\"\n\"\\x90\\x75\\x08\\x0e\\x8f\\xf7\\x5a\\xf9\\x47\\xcd\\x1d\\xbe\\xb9\\x6d\\xab\\x60\\xae\\x1d\\xf7\\x97\\xa1\\x15\\xfb\\x08\\x48\\x59\\x4a\\x34\\x1a\\x46\\xb4\\x5c\"\n\"\\xc7\\xbd\\xac\\xab\\xbd\\xba\\x6e\\xab\\x5f\\x86\\x85\\x8b\\x8a\\x85\\x1e\\x8a\\x88\\x89\\x8b\\x89\\x1b\\x80\\x83\\x94\\x97\\xb3\\xad\\xb4\\xd6\\xbf\\x1f\\x0e\"\n\"\\x8f\\xf7\\x41\\xf7\\x89\\x74\\x0a\\x90\\x87\\x90\\x86\\x8f\\x88\\x8d\\x8a\\x19\\x8a\\x0a\\xf7\\x66\\x9d\\x15\\xa7\\xae\\x9b\\xa0\\x90\\x92\\x08\\xb1\\xc0\\x9a\"\n\"\\xa5\\x9c\\x1a\\x92\\x87\\x8f\\x83\\x83\\x83\\x87\\x7e\\x7c\\x1e\\x8a\\x8a\\x89\\x89\\x88\\x89\\xfb\\x5f\\xfb\\x38\\x18\\x87\\x07\\xf7\\x62\\xfb\\x3a\\x8c\\x8a\"\n\"\\x8c\\x8a\\x8e\\x89\\x19\\x90\\x86\\x8f\\x88\\x8d\\x8a\\x08\\x83\\x94\\x91\\x89\\x91\\x1b\\x92\\x8f\\x91\\x94\\x9f\\x70\\xb6\\x58\\xc6\\x1f\\x7d\\x9c\\x7f\\x9b\"\n\"\\x7d\\xa0\\x08\\x0e\\xfb\\x37\\xf7\\x5d\\xf7\\x89\\x74\\x0a\\x8c\\x8a\\x8c\\x8a\\x8e\\x89\\x19\\x90\\x86\\x8f\\x88\\x8d\\x8a\\x08\\x8a\\x0a\\x0e\\xfb\\x37\\xf7\"\n\"\\x18\\x7b\\x1d\\x0e\\xc7\\xf8\\xac\\xa3\\x15\\x68\\x8c\\x7d\\x9b\\xb3\\x1a\\xf8\\x1c\\x07\\x39\\x83\\x49\\x86\\x74\\x83\\x1d\\x41\\x53\\x79\\x67\\x66\\x1e\\x63\"\n\"\\x63\\x7c\\x5d\\x89\\x31\\x08\\x65\\x1d\\x81\\x80\\x5d\\x86\\x08\\x73\\xf7\\x87\\x3a\\x0a\\xf3\\x07\\xa5\\x8a\\x93\\x84\\x71\\x1a\\xfb\\xc2\\x07\\x8c\\x65\\x7e\"\n\"\\x7c\\x68\\x87\\x08\\x73\\xf7\\x7f\\x07\\x0e\\xc7\\xf8\\xac\\xa3\\x15\\x7f\\x8c\\x05\\x72\\x8d\\x7f\\x9e\\xae\\x1a\\xf8\\xf5\\x78\\x07\\x5c\\x6d\\x05\\xa1\\x55\"\n\"\\x61\\x94\\x55\\x1b\\x49\\x57\\x77\\x65\\x69\\x1f\\x6b\\x67\\x7e\\x5d\\x88\\x31\\x08\\x65\\x1d\\x81\\x80\\x5d\\x86\\x08\\x73\\xf7\\x87\\x3a\\x0a\\xf7\\x1e\\xfb\"\n\"\\xe4\\x07\\x68\\x80\\x7a\\x6f\\x87\\x1e\\x83\\x8a\\x05\\x73\\xf7\\x7f\\x07\\xfb\\x50\\xf8\\x61\\x15\\xfb\\x1e\\xc9\\x06\\xf1\\xa0\\xac\\xce\\xa5\\x9b\\x83\\x7e\"\n\"\\x87\\x89\\x85\\x88\\x84\\x1e\\x85\\x80\\x89\\x83\\x84\\x1a\\x7b\\x94\\x7c\\x97\\x87\\x1e\\x0e\\x8f\\xf7\\xa3\\x04\\x31\\xf8\\x88\\xe5\\x07\\x0e\\x8f\\xf7\\x99\"\n\"\\xfb\\x1a\\x15\\x90\\xf7\\x24\\x8d\\xe0\\xa1\\xf6\\xa6\\xc9\\x19\\x8c\\x8d\\x8b\\x8c\\x8c\\x1a\\x8d\\x89\\x8e\\x88\\x8f\\x1e\\x69\\xb6\\x77\\xcc\\x8d\\xc8\\xb1\"\n\"\\x89\\x93\\x89\\xb3\\x77\\x08\\x7d\\xa5\\x99\\x87\\x9b\\x1b\\xaa\\x9e\\x9f\\xab\\xac\\x78\\xa0\\x6b\\x7c\\x80\\x87\\x7f\\x71\\x1f\\x64\\x79\\x7b\\x86\\x69\\x86\"\n\"\\x08\\xc0\\x8f\\x99\\xa3\\xba\\x1e\\x99\\xa7\\x8f\\x97\\x9b\\x1a\\xae\\x77\\x9f\\x67\\x68\\x75\\x74\\x66\\x7c\\x8e\\x83\\x97\\x76\\x1e\\xa2\\x62\\x8f\\x7b\\x8d\"\n\"\\x4b\\x67\\x8f\\x7f\\x8e\\x65\\x9f\\x08\\x98\\x72\\x7f\\x8f\\x7b\\x1b\\x6a\\x78\\x78\\x69\\x6a\\x9f\\x76\\xa9\\x9c\\x96\\x8e\\x98\\xa3\\x1f\\xb0\\x9f\\x95\\x8e\"\n\"\\xb5\\x8f\\x89\\x38\\x83\\x71\\x6c\\x60\\x08\\x83\\x80\\x86\\x82\\x87\\x1a\\x87\\x8d\\x85\\x8e\\x84\\x1e\\xa5\\x48\\x9d\\x2d\\x8d\\x39\\x90\\xfb\\x24\\x18\\x0e\"\n\"\\x8f\\xf7\\x71\\xf8\\x65\\x15\\x76\\x8c\\x80\\x8f\\x6a\\x9b\\x08\\x98\\x6f\\x79\\x91\\x7b\\x1b\\x6e\\x77\\x77\\x6d\\x6e\\xa0\\x77\\xa8\\x99\\x99\\x8f\\x97\\xa4\"\n\"\\x1f\\xb6\\x9e\\x94\\x8e\\xb2\\x8d\\x89\\x49\\x80\\x6a\\x61\\x47\\xb4\\x47\\x97\\x66\\x8d\\x4c\\x68\\x8d\\x81\\x8e\\x60\\x9e\\x08\\x97\\x6f\\x7d\\x90\\x7c\\x1b\"\n\"\\x6f\\x76\\x76\\x6f\\x6d\\x9f\\x77\\xa9\\x9a\\x9d\\x90\\x99\\xa7\\x1f\\xa7\\x99\\xa7\\x94\\x94\\x89\\x08\\x9d\\x06\\x8a\\x55\\x87\\x7c\\x75\\x5a\\x08\\x7f\\x70\"\n\"\\x88\\x80\\x7c\\x1a\\x6a\\xa0\\x76\\xab\\xab\\xa3\\xa2\\xab\\x9a\\x87\\x97\\x7f\\xa7\\x1e\\x74\\xbe\\x87\\x9d\\x8a\\xba\\xb0\\x88\\x98\\x87\\xb5\\x79\\x08\\x7f\"\n\"\\xa4\\x99\\x87\\x97\\x1b\\xaa\\x9f\\x9e\\xa8\\xaa\\x79\\x9d\\x6d\\x7a\\x7e\\x87\\x7e\\x6f\\x1f\\x79\\x62\\x7e\\x87\\x69\\x1b\\x8c\\xca\\x99\\xba\\xab\\xb9\\x08\"\n\"\\x90\\x90\\x8d\\x90\\x8d\\x1a\\x8d\\x89\\x90\\x86\\x90\\x1e\\x6e\\xb1\\x79\\xc6\\xc5\\x1a\\xb0\\x8a\\x99\\x88\\xb5\\x77\\x08\\x7f\\xa4\\x96\\x88\\x9a\\x1b\\xaa\"\n\"\\x9e\\x9e\\xa9\\xa9\\x77\\x9e\\x6d\\x7e\\x7d\\x87\\x7f\\x72\\x1f\\x60\\x79\\x7f\\x87\\x66\\x88\\x8c\\xb9\\x8f\\x9e\\xa2\\xbf\\x08\\x97\\xa7\\x8f\\x98\\x99\\x1a\"\n\"\\xab\\x73\\xa2\\x6b\\x6b\\x76\\x75\\x6b\\x7c\\x8e\\x80\\x97\\x70\\x1e\\xa1\\x59\\x8f\\x7b\\x8c\\x55\\x08\\x0e\\xfb\\x8a\\x50\\x1d\\xb7\\xf7\\xb9\\xf9\\x1f\\x15\"\n\"\\xbd\\xfd\\xd9\\xf7\\x3f\\xa4\\x06\\x44\\x92\\x87\\x8e\\x8a\\xb5\\x8a\\x95\\x18\\xb1\\x07\\xf8\\xf8\\x07\\xb1\\x07\\x8c\\x95\\x05\\xb2\\x91\\x90\\xbc\\x91\\x1e\"\n\"\\x8f\\x96\\x8c\\x8c\\x96\\x1f\\xa4\\xfb\\xc0\\x07\\xfb\\x2b\\x47\\x4e\\xfb\\x1a\\x32\\xab\\x4a\\xc7\\x68\\x1f\\xa9\\x79\\xa5\\x84\\xbe\\x89\\x08\\xfb\\xda\\x07\"\n\"\\x65\\x07\\x8a\\x81\\x05\\x62\\x85\\x87\\x41\\x84\\x1e\\x72\\xf7\\x43\\x07\\x2d\\xf8\\x70\\x15\\x40\\xa6\\x69\\xc8\\xf4\\x1a\\xbc\\x94\\xb3\\x9b\\xa5\\x1e\\x9c\"\n\"\\xa8\\x9f\\x97\\xba\\x97\\x08\\x0e\\xfb\\x26\\xf7\\x44\\xf8\\x72\\x15\\x3e\\x4b\\x4c\\x3f\\x3b\\xc8\\x4e\\xdb\\xd9\\xc8\\xc8\\xd9\\xda\\x4d\\xc9\\x3e\\x1f\\x0e\"\n\"\\xfb\\x37\\xec\\x6d\\x0a\\x0e\\x8f\\xf7\\xc2\\x6d\\x0a\\xfb\\x97\\x75\\x6f\\x0a\\x8f\\xf7\\xc2\\x85\\x1d\\xfb\\x97\\x75\\xa9\\x0a\\x6b\\x59\\x5b\\xa8\\x6c\\xb8\"\n\"\\x90\\x90\\x67\\x1d\\x7e\\x65\\x69\\x61\\x40\\x57\\x1f\\x0e\\x8f\\xf7\\x17\\x7b\\x1d\\xf7\\x4a\\x79\\x15\\x6f\\x68\\x7b\\x76\\x86\\x84\\x08\\x65\\x56\\x7c\\x71\"\n\"\\x7a\\x1a\\x83\\x8f\\x88\\x93\\x94\\x91\\x8e\\x99\\x9a\\x1e\\x8e\\x8c\\x8d\\x8d\\x8d\\x8d\\xf7\\x5f\\xf7\\x38\\x18\\x8f\\x07\\xfb\\x62\\xf7\\x3a\\x05\\x9a\\x78\"\n\"\\x7f\\x93\\x86\\x1b\\x84\\x86\\x85\\x82\\x77\\xa6\\x61\\xbe\\x4e\\x1f\\x98\\x7c\\x97\\x7b\\x9a\\x75\\x08\\x0e\\xf8\\x8c\\xf7\\x3a\\xf7\\x30\\x15\\x2d\\x1d\\xf7\"\n\"\\xe1\\x16\\x2d\\x1d\\xf7\\xe1\\x16\\x2d\\x1d\\x0e\\xf8\\x8c\\xf8\\xd0\\xf9\\x56\\x15\\x5b\\x06\\x4b\\x58\\x5a\\x70\\x49\\x1b\\x67\\x78\\x92\\xa2\\x6f\\x1f\\xa0\"\n\"\\x71\\x78\\x93\\x71\\x1b\\x22\\x2f\\x27\\xfb\\x05\\x39\\xbf\\x52\\xd5\\xaf\\xb0\\x9b\\xa7\\xa7\\x1f\\xb4\\xb4\\xa8\\xd9\\xcf\\x1a\\x98\\x8a\\x96\\x89\\x9f\\x1e\"\n\"\\x81\\xa4\\x99\\x88\\xa0\\x1b\\xb4\\xab\\x97\\xa9\\xb3\\x1f\\xfc\\x18\\xfd\\x23\\x05\\xbb\\x06\\xd3\\xf9\\x2b\\x15\\x90\\x8f\\x89\\x84\\x95\\x1f\\x96\\x84\\x8e\"\n\"\\x8a\\x92\\x88\\x08\\xa5\\x81\\x91\\x81\\x69\\x1a\\x20\\x4e\\x26\\x4b\\x6a\\x7a\\xa3\\xb7\\xe4\\xc9\\xf7\\x14\\xb4\\x88\\x1e\\xf9\\x42\\xfb\\xc1\\x15\\x21\\x31\"\n\"\\x29\\xfb\\x06\\x36\\xbd\\x55\\xd8\\xb1\\xaf\\x9a\\xa6\\xa5\\x1f\\xb7\\xb9\\xa7\\xd4\\xd1\\x1a\\xd6\\x64\\xb8\\x4b\\x1e\\x9e\\x6a\\x15\\xad\\xa4\\x68\\x5d\\x58\"\n\"\\x76\\x48\\x6e\\x61\\x1f\\x69\\x74\\x72\\x7c\\x6e\\x1b\\x6b\\x7a\\xa2\\xb7\\xbf\\xa5\\xde\\xab\\xb9\\x1f\\xa8\\x9e\\x9e\\x98\\xa0\\x1b\\xfc\\x11\\xac\\x15\\x24\"\n\"\\x2e\\x27\\xfb\\x01\\x35\\xbd\\x53\\xd8\\xb2\\xae\\x9a\\xa6\\xa5\\x1f\\xb8\\xba\\xa7\\xd4\\xd1\\x1a\\xd5\\x64\\xb8\\x4a\\x1e\\x9f\\x6a\\x15\\xad\\xa4\\x69\\x5d\"\n\"\\x57\\x76\\x48\\x6e\\x61\\x1f\\x6a\\x74\\x72\\x7b\\x6e\\x1b\\x69\\x7b\\xa2\\xb9\\xbe\\xa6\\xdc\\xaa\\xb9\\x1f\\xa8\\x9f\\x9e\\x99\\xa0\\x1b\\x0e\\x8f\\xf7\\x8b\"\n\"\\xf7\\x95\\x15\\x42\\x83\\x7d\\x4c\\x64\\x1e\\x2f\\x53\\x6e\\x62\\x46\\x1a\\x27\\xda\\x49\\xf7\\x0d\\xf7\\x02\\xd9\\xc7\\xdf\\xb7\\x6e\\xab\\x63\\x66\\x72\\x71\"\n\"\\x65\\x77\\x90\\x7f\\x9c\\x78\\x1e\\x97\\x7e\\x8e\\x85\\x81\\x1a\\x73\\x73\\x7b\\x67\\x55\\x6c\\xba\\xde\\xc0\\x95\\xac\\xac\\xca\\x1e\\xa3\\xb9\\x93\\xa2\\xa7\"\n\"\\x1a\\x92\\x8b\\x97\\x8a\\x98\\x1e\\x8a\\x99\\x05\\x7c\\xf7\\x88\\x15\\x5b\\x66\\x67\\x5b\\x5c\\xb1\\x65\\xb9\\xb9\\xb2\\xb2\\xb8\\xbb\\x66\\xb0\\x5c\\x1f\\x0e\"\n\"\\xfb\\x37\\xf7\\x8a\\xf8\\xa4\\x28\\x1d\\xfb\\x37\\xe1\\xf8\\xa4\\x32\\x1d\\xfb\\x37\\xf7\\xaa\\xf8\\xa4\\x20\\x0a\\xfb\\x37\\xa5\\xf8\\xb9\\x64\\x0a\\xfb\\x37\"\n\"\\xf7\\xdf\\xf9\\x11\\x22\\x0a\\xfb\\x37\\xf7\\xa6\\x6c\\x0a\\xfb\\x37\\xf7\\x39\\xf9\\x2f\\x2a\\x1d\\xfb\\x37\\xc8\\xf9\\x2f\\x28\\x0a\\xfb\\x37\\xf7\\x3b\\xf9\"\n\"\\x82\\x38\\x1d\\xfb\\x37\\xf7\\x08\\x2b\\x15\\x96\\x83\\x05\\x8e\\x96\\x92\\x8c\\x95\\x1b\\xa8\\x9c\\x7e\\x74\\x70\\x77\\x7d\\x65\\x7b\\x7e\\x8e\\x94\\x73\\x1f\"\n\"\\x85\\x8d\\x2f\\x0a\\xa7\\xcb\\x05\\x61\\x06\\x0e\\xfb\\x37\\x7e\\xf8\\xa4\\x87\\x1d\\xca\\xfb\\x31\\x32\\x1d\\xfb\\x37\\xf7\\x32\\xab\\x15\\x86\\x85\\x8a\\x89\"\n\"\\x83\\x81\\x08\\x62\\x59\\x7e\\x71\\x6d\\x1a\\x5c\\xb7\\x69\\xc9\\x92\\x0a\\x62\\x75\\xa1\\xb5\\x9a\\x8e\\x9d\\x94\\xaa\\x1f\\x8e\\x95\\x8c\\x8e\\x8c\\x92\\x08\"\n\"\\x0e\\xfb\\x37\\xf7\\xe3\\xf9\\x54\\x21\\x0a\\xf8\\x8c\\xf3\\x1d\\xf8\\x8c\\xd0\\x1d\\x57\\x69\\x68\\x08\\x62\\x63\\x50\\x77\\x36\\x1b\\x4f\\x7b\\x96\\xb6\\x1f\"\n\"\\xf7\\x87\\x07\\xf7\\x04\\x84\\xa4\\x71\\x9d\\xb9\\x1d\\xa3\\x99\\x91\\xc3\\xe5\\xc7\\x7a\\x68\\xa7\\x1e\\xa0\\x71\\x95\\x72\\x98\\x4c\\xa4\\x0a\\x82\\x77\\x78\"\n\"\\x6b\\x1e\\x8a\\x88\\x88\\x86\\x88\\x86\\x6b\\x0a\\x7c\\x42\\x87\\x08\\x3b\\xf7\\xd2\\x15\\xf7\\x35\\xf7\\xb6\\x05\\x92\\xfb\\xb6\\x06\\x0e\\xfb\\x58\\xf7\\xb7\"\n\"\\xf8\\x4f\\x15\\x85\\x85\\x05\\x89\\x89\\x8a\\x8b\\x88\\x1b\\x83\\x88\\x8f\\x96\\x1f\\xf7\\x30\\x07\\xbe\\x5a\\xaa\\x3d\\x3c\\x59\\x6e\\x5d\\x72\\x9a\\x7c\\xa6\"\n\"\\xa7\\x9f\\x99\\xa0\\x92\\x88\\x91\\x83\\x93\\x1e\\x84\\x91\\x89\\x90\\x8e\\x1a\\x97\\x9d\\x95\\xa2\\xaf\\x99\\x7c\\x66\\x1e\\x63\\x07\\xfb\\x1b\\x68\\x64\\x72\"\n\"\\x59\\x1a\\x64\\xa9\\x70\\xb7\\xb1\\xa8\\x97\\xa8\\xae\\x1e\\x6d\\x92\\x99\\x80\\xab\\x1b\\xa8\\x9f\\x94\\xa4\\xa3\\x1f\\xfb\\x15\\xad\\x15\\x79\\x7e\\x7d\\x83\"\n\"\\x7b\\x1b\\x78\\x7e\\x9c\\xa2\\xad\\xa4\\xa3\\xbd\\x9a\\x1f\\x0e\\xf7\\x3f\\xf9\\x12\\xf7\\x77\\x15\\x6e\\x06\\x6a\\x3d\\x77\\x6c\\x68\\x6b\\x08\\x66\\x62\\x53\"\n\"\\x79\\x3d\\x1b\\x4e\\x79\\x98\\xb6\\x1f\\xf7\\xba\\x07\\xf7\\x0f\\xd7\\x05\\xc8\\x07\\xfb\\x0f\\x3f\\x05\\xf7\\x09\\x07\\x8d\\xd8\\x99\\x98\\xe0\\x8d\\x08\\xa4\"\n\"\\xfb\\xf1\\x72\\x07\\xcd\\x88\\x9e\\x7b\\x8c\\x57\\x08\\xfb\\x7d\\x07\\x3a\\x5a\\x05\\x4e\\x07\\xdc\\xbc\\x05\\xfb\\x52\\x07\\x8a\\x57\\x7d\\x80\\x44\\x83\\x08\"\n\"\\x72\\xf8\\xd6\\x07\\x0e\\xf7\\xae\\x84\\x1d\\x68\\xca\\xbf\\x7d\\xd3\\x1b\\xf7\\x63\\xf7\\x27\\xf7\\x27\\xf7\\x64\\xcf\\x7b\\xcb\\x6c\\xc2\\x1f\\x75\\xb1\\x78\"\n\"\\xa0\\x5b\\xb3\\x08\\xfc\\x09\\xfc\\x6b\\x15\\x7a\\xc7\\x86\\xb6\\xd5\\x1a\\xf7\\x68\\x99\\x1d\\x0e\\xf8\\x8c\\xfa\\x69\\xf7\\x67\\x15\\x70\\x06\\x6a\\x45\\x76\"\n\"\\x6d\\x67\\x6f\\x08\\x69\\x61\\x5a\\x7d\\x41\\x1b\\x51\\x7d\\x95\\xb1\\x1f\\xf7\\x8e\\x07\\xf5\\x85\\xa9\\x6b\\x9a\\xfb\\x0b\\x08\\xa2\\xf7\\xe6\\x74\\x06\\x71\"\n\"\\xfb\\x13\\x78\\x78\\x21\\x89\\x08\\xf7\\x8d\\x07\\x9f\\x98\\x91\\xb5\\xd4\\xc5\\x80\\x79\\xa9\\x1e\\xb4\\x71\\x9b\\x6b\\x99\\x3c\\x08\\xa5\\xf7\\x5d\\xfc\\x30\"\n\"\\x06\\x89\\x06\\x8a\\x06\\x5b\\x8e\\x78\\x8c\\x05\\x8e\\x55\\x75\\x8c\\x79\\x1b\\xfb\\x5f\\xfb\\x1f\\xfb\\x22\\xfb\\x64\\xfb\\x04\\xb5\\x29\\xd4\\x4f\\x1f\\x5e\"\n\"\\xc2\\xd8\\x73\\xe5\\x1b\\x99\\x9a\\x8c\\x8c\\x99\\x1f\\x8d\\x9d\\xb5\\x8c\\xba\\x1b\\xf8\\x42\\x06\\xfc\\x67\\xf7\\x68\\x15\\x27\\x87\\x6a\\x7a\\x76\\x1e\\x75\"\n\"\\x7a\\x73\\x82\\x5f\\x1b\\x48\\x63\\xa0\\xbb\\x70\\x1f\\x73\\xb5\\x7b\\xe6\\xe6\\x1a\\xf7\\x70\\xc9\\xf7\\x04\\xf7\\x0f\\xaf\\xa6\\x81\\x77\\x98\\x1e\\x9a\\x76\"\n\"\\x8f\\x71\\x43\\x1a\\x0e\\xfb\\x3a\\xf7\\x39\\xf9\\x44\\x15\\x36\\x4d\\x4d\\x37\\x38\\xc9\\x4d\\xde\\xe2\\xc9\\xc7\\xe1\\xde\\x4c\\xc9\\x37\\x1f\\x76\\x04\\xb0\"\n\"\\x97\\x6c\\x27\\x32\\x7f\\x6d\\x65\\x67\\x7e\\xab\\xe4\\xed\\x97\\xaa\\xb1\\x1f\\x0e\\xf9\\x34\\xf7\\x14\\x15\\x5b\\x65\\x67\\x78\\x5a\\x1b\\x3a\\x80\\x0a\\x65\"\n\"\\x65\\x99\\x4a\\x1b\\x21\\x3e\\x56\\x43\\x64\\xa6\\x72\\xb5\\xb3\\xa2\\x9f\\xb0\\x9e\\x87\\x94\\x7e\\x9a\\x1f\\x82\\x95\\x88\\x90\\x92\\x1a\\x9f\\xa6\\x9a\\xb1\"\n\"\\xc3\\xa1\\x74\\x51\\x1e\\x3b\\x07\\xfb\\x15\\x61\\x5f\\x7a\\x69\\x74\\x08\\x65\\x70\\x79\\x6a\\x5f\\x1a\\x44\\xb4\\x66\\xd8\\xcd\\xc5\\xa6\\xc3\\xc3\\x1e\\x91\"\n\"\\x91\\x05\\x4d\\xb1\\xb2\\x75\\xd1\\x1b\\xea\\xc2\\xab\\xe5\\xc6\\x1f\\xfc\\x21\\x6b\\x15\\x72\\x73\\x7d\\x84\\x73\\x1b\\x65\\x78\\xa3\\xba\\xca\\xaa\\xac\\xe3\"\n\"\\xab\\x1f\\xf7\\x1e\\xb0\\x15\\xf7\\x09\\x9d\\xb4\\xbe\\xbb\\x9b\\x6c\\x2d\\x1e\\x6a\\x07\\x0e\\xfb\\x6e\\x29\\x1d\\x0e\\xfb\\x6e\\xf7\\x62\\xf8\\x24\\x15\\xec\"\n\"\\xdb\\x05\\xbd\\x07\\x2a\\x3b\\x05\\xf7\\x76\\x5a\\x1d\\xfb\\x7d\\x07\\x32\\x43\\x05\\x59\\x07\\xe4\\xd3\\x05\\xfb\\x77\\x98\\x0a\\xa3\\x07\\x6b\\x7b\\x9f\\xb3\"\n\"\\x8a\\x1f\\x0e\\x8f\\xe8\\x1d\\x67\\x6e\\x92\\x65\\x1b\\xfb\\x16\\x2a\\x23\\xfb\\x20\\x3b\\xa4\\x52\\xc7\\x53\\x1f\\x3f\\xfb\\x14\\x05\\xba\\x06\\xca\\xf4\\x05\"\n\"\\x78\\xaf\\xaa\\x83\\xb3\\x1b\\xf7\\x16\\xea\\xf2\\xf7\\x20\\xdd\\x71\\xc7\\x4d\\xc2\\x1f\\xfb\\x6b\\xfb\\xb2\\x15\\x8a\\x9f\\x8b\\xa1\\xa7\\x1a\\xf7\\x48\\xaa\"\n\"\\x1d\\x68\\x77\\x9d\\xb8\\x7e\\x1e\\x0e\\xf9\\x38\\xf7\\x11\\x15\\x57\\x5d\\x71\\x7c\\x5d\\x1b\\x3d\\x67\\xc0\\xf7\\x06\\x1f\\x8e\\x07\\x9c\\xf7\\x8d\\x07\\x87\"\n\"\\xd0\\x84\\xac\\x78\\xaf\\x08\\xc6\\x6c\\x53\\xaa\\x41\\x1b\\x59\\x6d\\x80\\x65\\x5a\\x1f\\xae\\x68\\x67\\x99\\x55\\x1b\\xfb\\x18\\x2d\\x25\\xfb\\x22\\xfb\\x24\"\n\"\\xe6\\x28\\xf7\\x18\\xc5\\xb3\\x99\\xad\\xb3\\x1f\\x69\\xa9\\xac\\x7d\\xbf\\x1b\\xdf\\xbc\\xa9\\xe8\\xcc\\x1f\\xfb\\x90\\xf7\\x41\\x15\\xc1\\x07\\xd2\\xa2\\xb0\"\n\"\\xb5\\xb3\\x9c\\x6c\\x40\\x8e\\x1e\\x83\\x8c\\x75\\x8c\\x71\\x1e\\xfb\\x9b\\xfb\\x19\\x15\\x2f\\x77\\x62\\x5d\\x53\\x78\\xc4\\xf7\\x43\\xf7\\x2a\\x9c\\xb9\\xc2\"\n\"\\xbd\\x9e\\x66\\x2b\\x1e\\x0e\\xc7\\x9e\\x16\\xf7\\x52\\xf8\\xde\\x06\\xbd\\xa0\\xa6\\xb2\\xbc\\xa0\\x64\\x2d\\x28\\x7e\\x74\\x52\\x8a\\x1e\\x69\\x07\\xac\\x89\"\n\"\\x9b\\x86\\x9a\\x7f\\x08\\xa5\\x75\\x97\\x59\\x34\\x1a\\xfb\\x19\\x7d\\x64\\x5c\\x82\\x87\\x8c\\x91\\x82\\x1e\\x81\\x92\\x7d\\x69\\x05\\x80\\xa9\\x9b\\x87\\x9d\"\n\"\\x1b\\xf4\\xdf\\xe6\\xf7\\x07\\xc0\\x7a\\xb7\\x6a\\xaa\\x1f\\x6b\\xaa\\x69\\x9c\\x3a\\xa2\\xbc\\x96\\xa1\\x94\\xa5\\x9d\\x08\\xb1\\xa5\\xa0\\xb1\\xb5\\x1a\\xe4\"\n\"\\x36\\xcc\\xfb\\x06\\xfb\\x0d\\x35\\x3e\\x20\\x1e\\xfc\\x38\\x07\\x8a\\x5c\\x83\\x81\\x61\\x85\\x08\\x0e\\xfb\\x58\\xf7\\xa5\\xf7\\xbb\\x8e\\x1d\\x0e\\xd5\\xf8\"\n\"\\x55\\xf7\\x00\\x15\\xe3\\xf7\\xb7\\xfc\\x8c\\x33\\xf8\\x34\\x06\\x0e\\xc7\\xf8\\x6f\\xf8\\x61\\x15\\xfb\\x1f\\xfb\\xfb\\x06\\x79\\x6f\\x72\\x82\\x76\\x1b\\x69\"\n\"\\x74\\xa9\\xb7\\x1f\\xf7\\xcc\\xfb\\x1f\\xfc\\x09\\x07\\x54\\x85\\x61\\x7a\\x4c\\x1e\\x84\\x6e\\x88\\x7c\\x7e\\x1a\\x5a\\xa3\\x6f\\xb4\\xb4\\xa1\\xa6\\xbc\\x9d\"\n\"\\x87\\x9e\\x81\\xad\\x1e\\x7e\\xb4\\x89\\x92\\x87\\xac\\x08\\x72\\xac\\xa7\\x81\\xb4\\x1b\\xb5\\xa4\\x98\\xb2\\xab\\x1f\\x67\\xa1\\xa9\\x7b\\xbc\\x1b\\xb5\\x9f\"\n\"\\x94\\xb3\\xb7\\x1f\\xa3\\x07\\x86\\x82\\x86\\x8a\\x84\\x1b\\x75\\x79\\xa0\\xa5\\x1f\\x0e\\xf8\\x8c\\xf7\\x8f\\xf9\\x20\\x15\\xb9\\x06\\xae\\xa0\\x76\\x60\\x95\"\n\"\\x1f\\xa2\\xe3\\xfb\\xfe\\x33\\xa2\\x06\\xb6\\x95\\xa0\\xa0\\xad\\x1b\\xb9\\xfb\\xc9\\x06\\x60\\x8a\\x8a\\x5a\\x87\\x1e\\x74\\xf7\\x56\\xa2\\x07\\x59\\x8f\\x8a\"\n\"\\x8c\\xb6\\x1a\\xf8\\x35\\x43\\x15\\x98\\x06\\xf7\\x29\\xf7\\xbe\\x05\\xfb\\x76\\x07\\x6d\\x89\\x85\\x85\\x87\\x1e\\x83\\x86\\x87\\x8b\\x6d\\x88\\x08\\x74\\xf7\"\n\"\\x56\\xa2\\x07\\x59\\x8f\\x8a\\x8c\\xb6\\x1a\\xf7\\x9a\\x07\\xb0\\x95\\x93\\xb7\\x8e\\x1e\\xa2\\xfb\\x0a\\x07\\xfb\\x2b\\xfb\\xb5\\xfb\\x22\\xf7\\xb5\\x05\\xfb\"\n\"\\x1f\\x74\\x06\\xa9\\x8a\\xa4\\x79\\x9a\\x6a\\x08\\xfb\\x81\\x07\\x54\\x83\\x80\\x5f\\x88\\x1e\\x74\\xf7\\x19\\xa2\\x07\\x5f\\x8e\\x83\\x96\\xc2\\x1a\\xf7\\x5f\"\n\"\\x07\\x0e\\x57\\x0a\\xf7\\x92\\xf8\\xd1\\x3b\\x1d\\xfc\\x1b\\x89\\x1d\\xf8\\xad\\xfb\\x28\\x15\\x7b\\x06\\x79\\x60\\x84\\x88\\x47\\x8a\\x08\\x35\\x90\\x06\\xe8\"\n\"\\xe2\\x05\\xc1\\xbe\\x9f\\xae\\xb8\\x1a\\xcb\\x59\\xb9\\x46\\x4a\\x5e\\x65\\x37\\x69\\x1e\\xa3\\x06\\xb2\\xa0\\xa0\\x9a\\xad\\x1b\\xb5\\xac\\x6a\\x60\\x51\\x68\"\n\"\\x5b\\xfb\\x29\\xfb\\x29\\x1f\\x7d\\xf7\\xa2\\x07\\x0e\\xd5\\xf7\\x85\\xf7\\xfb\\x15\\xfb\\x64\\x33\\xf7\\x64\\xfb\\x23\\xe3\\xf7\\x23\\xf7\\x64\\xe3\\xfb\\x64\"\n\"\\xf7\\x65\\x33\\x06\\xfb\\x64\\xfc\\xcc\\x15\\xf8\\x8c\\xe3\\xfc\\x8c\\x06\\x0e\\xf7\\x07\\x9b\\xb1\\x0a\\xc3\\x07\\xf7\\x33\\x8c\\xaf\\x91\\xc2\\xac\\x08\\xc5\"\n\"\\xad\\xa9\\xbf\\xcc\\x1a\\xf7\\x0c\\x2e\\xc9\\xfb\\x47\\x1e\\x49\\x97\\x06\\x8d\\xd5\\x93\\x94\\xd9\\x95\\x08\\xa4\\xfb\\xe2\\x72\\x07\\x4e\\x1d\\xf8\\x57\\x15\"\n\"\\xa2\\x9c\\x97\\xad\\xdd\\x4b\\x0a\\x75\\x1e\\x76\\x73\\x6a\\x84\\x44\\x1b\\x0e\\xf7\\x92\\xf9\\x52\\xf7\\x2d\\x93\\x1d\\x91\\xf7\\xfc\\xd6\\x1d\\xfc\\x22\\x89\"\n\"\\x1d\\x0e\\xd5\\xc1\\x0a\\xf7\\x90\\xf7\\xdc\\x15\\x63\\x67\\x67\\x63\\x61\\xae\\x68\\xb5\\xb3\\xaf\\xb0\\xb3\\xb3\\x67\\xaf\\x62\\x1f\\xfc\\x33\\x04\\x62\\x68\"\n\"\\x68\\x63\\x61\\xae\\x67\\xb5\\xb2\\xb0\\xb0\\xb4\\xb3\\x67\\xae\\x62\\x1f\\x0e\\xfb\\xa8\\xcd\\x78\\x15\\xe3\\xf7\\xa9\\x33\\x06\\xf7\\x30\\x04\\xe3\\xf7\\xa9\"\n\"\\x33\\x06\\x0e\\x2b\\xf7\\x5c\\xf9\\x44\\x15\\x3b\\x4c\\x4c\\x3b\\x3c\\xca\\x4b\\xd9\\xdd\\xca\\xc9\\xdc\\xdb\\x4c\\xca\\x3b\\x1f\\x67\\x04\\xc2\\xba\\x5a\\x51\"\n\"\\x50\\x5d\\x5b\\x52\\x54\\x5d\\xbc\\xc5\\xc6\\xb9\\xbb\\xc3\\x1f\\x0e\\xc7\\x97\\x1d\\x4f\\x68\\x74\\x50\\x6e\\x1f\\xf7\\xb1\\xfb\\x56\\x73\\x07\\xb8\\x83\\x94\"\n\"\\x82\\x8c\\x62\\x08\\xfd\\x61\\x79\\x0a\\xfb\\x0e\\x6f\\x4e\\x54\\x69\\x71\\x9f\\xb4\\x78\\x1f\\x0e\\xf7\\x92\\xf8\\xf9\\x3b\\x1d\\xfc\\xf9\\x29\\x80\\x1d\\xf7\"\n\"\\x00\\xe1\\xd0\\xe2\\xbc\\x71\\xaf\\x59\\x9f\\x1e\\x8f\\x07\\xb0\\x9f\\x98\\x9e\\xae\\x1a\\xbe\\x64\\xa9\\x48\\x4a\\x5b\\x6e\\x4d\\x67\\x1e\\xf9\\x24\\xfc\\x50\"\n\"\\x93\\x1d\\x0e\\xfb\\x58\\xf7\\xc0\\xf8\\x26\\x15\\x7b\\x06\\x60\\x79\\x83\\x87\\x48\\x1b\\x2f\\x06\\xee\\xe7\\x05\\xc1\\xbd\\x9f\\xaf\\xb7\\x1a\\xcc\\x5a\\xb9\"\n\"\\x45\\x4a\\x5e\\x65\\x37\\x69\\x1e\\xa3\\x06\\xb2\\xa0\\xa0\\x9a\\xad\\x1b\\xb5\\xac\\x69\\x61\\x51\\x68\\x5b\\xfb\\x29\\xfb\\x29\\x1f\\x7d\\xf7\\xa2\\x07\\x0e\"\n\"\\xf7\\x8f\\xf7\\x63\\xf8\\x96\\x15\\xb8\\x89\\x8c\\x8a\\x62\\x1a\\xfb\\x93\\x07\\x63\\x8a\\x8a\\x5e\\x88\\x1e\\x79\\xf7\\x40\\x9d\\x07\\x5e\\x8e\\x8a\\x8c\\xb3\"\n\"\\x1a\\xf4\\xb0\\x07\\xa0\\x69\\x95\\x7b\\x9d\\x67\\x08\\x4c\\xac\\x99\\x79\\x9b\\x1b\\xdc\\x96\\x06\\x76\\x9f\\x77\\xa4\\x6e\\xb3\\x51\\xdd\\x18\\xc1\\xa1\\xa5\"\n\"\\xad\\xbc\\x1a\\xc6\\x5f\\xb0\\x44\\x1e\\xfb\\x55\\x06\\xf7\\x12\\x75\\x15\\xaf\\x06\\xb4\\x9f\\x71\\x56\\x52\\x75\\x6b\\x63\\x1f\\x68\\x06\\xb4\\xf7\\xf1\\x60\"\n\"\\x0a\\xd5\\xc1\\x0a\\x0e\\x8f\\xf7\\x94\\xf8\\xd2\\x15\\xb4\\x63\\xa5\\x61\\x9e\\x52\\x89\\x88\\x18\\xa9\\x71\\x74\\x96\\x61\\x1b\\xfb\\x13\\x2a\\x22\\xfb\\x1f\"\n\"\\xfb\\x20\\xeb\\x24\\xf7\\x16\\xf7\\x22\\xde\\xf7\\x05\\xf7\\x56\\xcf\\x81\\xc6\\x76\\xbe\\x1f\\x73\\xc8\\x72\\xab\\x4e\\xbd\\xe7\\xba\\x18\\x5a\\xa9\\x31\\x5d\"\n\"\\x59\\xa5\\x5a\\x99\\x4e\\x91\\x19\\x5d\\x72\\xbd\\x82\\xb3\\x79\\xb6\\x6c\\x19\\xfb\\x09\\x50\\xbb\\x6c\\x05\\xf5\\x3f\\x15\\xc4\\x9f\\x55\\xfb\\x30\\xfb\\x37\"\n\"\\x78\\x57\\x51\\x71\\x78\\x96\\xa1\\x7e\\x1f\\x7b\\xa9\\x85\\xb9\\xeb\\x1a\\xf4\\x92\\xbe\\x9c\\xaa\\x1e\\xa1\\x97\\x9d\\x96\\xa5\\x1b\\x0e\\xd5\\xf7\\x73\\xf7\"\n\"\\x91\\x15\\xfb\\x43\\xfb\\x43\\xc9\\x4d\\xf7\\x43\\xf7\\x44\\xf7\\x43\\xfb\\x44\\xc9\\xc9\\xfb\\x44\\xf7\\x43\\xf7\\x44\\xf7\\x43\\x4d\\xc9\\xfb\\x43\\xfb\\x44\"\n\"\\xfb\\x43\\xf7\\x44\\x4d\\x4d\\x05\\x0e\\xfb\\x58\\xaf\\xf8\\xe2\\x80\\x1d\\xf7\\x01\\xe0\\xd0\\xe2\\xbe\\x71\\xad\\x55\\xa1\\x1e\\xb4\\xa1\\x98\\x9d\\xaf\\x1a\"\n\"\\xbe\\x64\\xa9\\x48\\x4a\\x5b\\x6e\\x4d\\x67\\x1e\\x0e\\xf7\\x8f\\xf8\\xa1\\xf7\\x94\\x15\\x4a\\x6b\\x67\\x71\\x53\\x1b\\x3c\\x5f\\xcb\\xf7\\x07\\xf7\\x06\\xb7\"\n\"\\xca\\xda\\xc4\\xac\\x70\\x4d\\x9c\\x1f\\x9e\\xd3\\x06\\x95\\x85\\x90\\x7b\\x91\\x1e\\x99\\x64\\x70\\x90\\x66\\x1b\\xfb\\x1e\\x33\\x3b\\xfb\\x11\\xfb\\x0d\\xde\"\n\"\\x3f\\xf7\\x17\\xa9\\xa7\\x8f\\x95\\xb0\\x1f\\x90\\x8d\\x92\\x8c\\x8b\\x1a\\x9e\\x8f\\x97\\x94\\x95\\x1a\\x9b\\xd5\\x05\\xfb\\x3e\\xf8\\x47\\x60\\x0a\\x26\\x0a\"\n\"\\xfb\\x0e\\xf8\\x8a\\x22\\x1d\\xac\\x9f\\x92\\x95\\xa2\\x1a\\xa5\\x78\\x9d\\x6e\\x77\\x7a\\x82\\x78\\x7b\\x1e\\x0e\\x26\\x0a\\xd2\\xf8\\x8a\\x20\\x0a\\x26\\x0a\"\n\"\\xfb\\x27\\xf9\\x15\\x41\\x0a\\xa7\\xaf\\x4a\\x0a\\x26\\x0a\\xbd\\xf8\\x8a\\x28\\x1d\\x8d\\x1d\\x99\\xb2\\xf0\\x1e\\xf7\\x75\\x06\\xad\\x3c\\x97\\x68\\x7d\\x1d\"\n\"\\x61\\xf9\\x5c\\x15\\x51\\x5a\\x5a\\x53\\x4e\\xba\\x5c\\xc6\\xc7\\xba\\xba\\xc6\\xc5\\x5b\\xbc\\x44\\x1d\\x6f\\x6b\\x6c\\x70\\x71\\x6b\\x6b\\x4c\\x0a\\x0e\\x26\"\n\"\\x0a\\xfb\\x42\\xf8\\x9f\\x15\\xa7\\x8f\\x9f\\x9e\\xa5\\x1b\\x98\\x93\\x88\\x78\\xb5\\x1f\\xa8\\x7e\\x05\\x83\\x9e\\xa5\\x85\\x9e\\x1b\\xc5\\xaf\\xb2\\xe3\\xa2\"\n\"\\x1f\\x60\\x06\\x67\\x7f\\x7d\\x7e\\x70\\x1b\\x7f\\x88\\x8c\\x96\\x72\\x47\\x0a\\x4e\\x66\\x64\\x35\\x79\\x1f\\x0e\\xf8\\x25\\x78\\x15\\xf7\\x09\\x8c\\xd6\\xb1\"\n\"\\xe9\\xf6\\x6d\\xa4\\x18\\x7c\\x0a\\xb5\\x79\\x65\\xb7\\x1e\\xb6\\x65\\xa3\\x68\\xad\\x40\\x37\\x0a\\x52\\x5a\\x96\\x5b\\x1b\\xfb\\x5c\\xfb\\x29\\xfb\\x2d\\xfb\"\n\"\\x62\\xfb\\x50\\xf7\\x11\\xfb\\x22\\xf7\\x4a\\x79\\x1f\\x8e\\x8a\\x68\\x3c\\x96\\x83\\x05\\x8e\\x96\\x93\\x8c\\x94\\x73\\x0a\\xf7\\x3f\\x24\\x0a\\xf7\\x7b\\xc9\"\n\"\\x15\\xc3\\x06\\xf7\\x22\\xe3\\x05\\xaa\\x3c\\x1d\\x7b\\x1e\\x0e\\xf7\\x3f\\x24\\x0a\\xf8\\x3b\\xc9\\x15\\xc4\\x06\\xfb\\x10\\xf7\\x44\\x05\\x30\\xea\\x1d\\xed\"\n\"\\x05\\x0e\\xf7\\x3f\\x24\\x0a\\xf7\\x62\\xf7\\x5d\\x33\\x0a\\xf7\\x3f\\x24\\x0a\\xf8\\x1b\\xc9\\x15\\xfb\\x1d\\x42\\x0a\\x20\\x27\\x0a\\xfb\\x94\\x83\\x0a\\x20\"\n\"\\x27\\x0a\\x4b\\xf9\\x76\\x20\\x0a\\x20\\x27\\x0a\\xfb\\xad\\xfa\\x01\\x33\\x0a\\x20\\x27\\x0a\\x25\\xf9\\x76\\x28\\x1d\\x30\\x1d\\xf7\\x5a\\xf9\\x72\\x92\\x1d\"\n\"\\x7f\\x88\\x8c\\x96\\x73\\x1f\\x63\\x9d\\x05\\x98\\x6e\\x74\\xbd\\x0a\\xf7\\xae\\x26\\x1d\\x31\\xdb\\x32\\x1d\\xf7\\xae\\x26\\x1d\\xf1\\xdb\\x20\\x0a\\xf7\\xae\"\n\"\\x26\\x1d\\xfb\\x07\\xf7\\x6f\\x33\\x0a\\xf7\\xae\\x26\\x1d\\xd1\\xdb\\x28\\x1d\\xf7\\xae\\x26\\x1d\\xfb\\x2a\\xf0\\x92\\x1d\\x80\\x87\\x8c\\x96\\x73\\x47\\x0a\"\n\"\\x4d\\x50\\x0a\\xc7\\x33\\x1d\\x82\\xf8\\x4b\\x21\\x0a\\x24\\x1d\\xfc\\x1c\\xe2\\x22\\x1d\\xab\\x3c\\x1d\\x7a\\x1e\\x0e\\x24\\x1d\\xfb\\x5c\\xe2\\x20\\x0a\\x24\"\n\"\\x1d\\xfc\\x3c\\xf7\\x76\\x41\\x0a\\xa7\\xaf\\x4a\\x0a\\x24\\x1d\\xfb\\x93\\xe2\\x28\\x1d\\x2c\\x0a\\xfc\\x16\\xe2\\x85\\x0a\\x2c\\x0a\\xfc\\x33\\xf7\\x76\\x33\"\n\"\\x0a\\xf7\\x3f\\x37\\x1d\\x22\\xfa\\x26\\x21\\x0a\\x8f\\x23\\x1d\\xfb\\x1f\\xf7\\xaf\\x43\\x0a\\xa5\\x78\\x9d\\x6e\\x77\\x7b\\x45\\x1d\\x8f\\x23\\x1d\\xd0\\xf7\"\n\"\\xaf\\x20\\x0a\\x8f\\x23\\x1d\\xfb\\x2e\\xf8\\x3a\\x28\\x0a\\x8f\\x23\\x1d\\xaf\\xf7\\xaf\\x15\\xfb\\x1c\\x42\\x0a\\x8f\\x23\\x1d\\x56\\xf8\\x8d\\x38\\x1d\\x8f\"\n\"\\x23\\x1d\\xfb\\x4b\\xf7\\xc4\\x15\\xa7\\x8e\\x9f\\x9e\\xa4\\x1b\\x99\\x91\\x89\\x77\\xb8\\x1f\\xa8\\x7e\\x05\\x83\\x9d\\xa5\\x85\\x9f\\x1b\\xc3\\xb1\\xb3\\xe2\"\n\"\\xa2\\x4c\\x1d\\x57\\xf7\\x9d\\x7e\\x15\\xd0\\x95\\xbc\\xaa\\xba\\xca\\x79\\x9d\\x18\\x5a\\x0a\\xfb\\x18\\xd9\\x2e\\xf7\\x0b\\x80\\x1f\\x66\\x38\\x96\\x83\\x05\"\n\"\\x8e\\x96\\x92\\x8c\\x95\\x73\\x0a\\x57\\x25\\x1d\\xfb\\x1f\\xf7\\x8a\\x4f\\x1d\\x57\\x25\\x1d\\xbd\\xf7\\x8a\\x20\\x0a\\x57\\x25\\x1d\\xfb\\x42\\xf8\\x15\\x28\"\n\"\\x0a\\x57\\x25\\x1d\\x99\\xf7\\x8a\\x28\\x1d\\xfb\\x6e\\x29\\x1d\\xfb\\x5f\\xf8\\xa4\\x32\\x1d\\xfb\\x6e\\x29\\x1d\\x80\\xf8\\xa4\\x20\\x0a\\xfb\\x6e\\x29\\x1d\"\n\"\\xfb\\x78\\xf9\\x2f\\x15\\x6a\\x6d\\x6d\\x69\\x67\\xa8\\x6d\\xad\\x4d\\x1d\\xfb\\x6e\\x29\\x1d\\x60\\xf8\\xa4\\x28\\x1d\\xc7\\x2d\\x0a\\xfc\\x25\\xf8\\xb9\\xaf\"\n\"\\x1d\\xc4\\xaf\\xb3\\xe2\\xa3\\x4c\\x1d\\x8f\\x27\\x1d\\x39\\xe1\\x22\\x1d\\xaa\\x3c\\x1d\\x7b\\x1e\\x0e\\x8f\\x27\\x1d\\xf7\\x02\\xe1\\x20\\x0a\\x8f\\x27\\x1d\"\n\"\\x20\\xf7\\x75\\x15\\x6a\\x6d\\x6d\\x69\\x67\\xa7\\x6d\\xae\\x4d\\x1d\\x8f\\x27\\x1d\\xd8\\xe1\\x15\\xfb\\x1c\\x42\\x0a\\x8f\\x27\\x1d\\xfb\\x22\\xf6\\xaf\\x1d\"\n\"\\xc3\\xb1\\xb3\\xe2\\xa2\\x4c\\x1d\\x20\\x2f\\x1d\\xbb\\xf8\\x0e\\x21\\x0a\\xc7\\x23\\x0a\\xfb\\xf4\\xf8\\x90\\x4f\\x1d\\xc7\\x23\\x0a\\xfb\\x2b\\xf8\\x90\\x20\"\n\"\\x0a\\xc7\\x23\\x0a\\xfc\\x0e\\xf9\\x1b\\x28\\x0a\\xc7\\x23\\x0a\\xfb\\x47\\xf8\\x90\\x28\\x1d\\x8f\\x2a\\x0a\\xfb\\xca\\xe6\\x38\\x0a\\x8f\\x2a\\x0a\\xfb\\xd4\"\n\"\\xf7\\x7a\\x28\\x0a\\x57\\x2e\\x0a\\x88\\xf9\\x54\\x21\\x0a\\x3b\\xf7\\xf9\\xf7\\xbc\\x15\\x74\\x8c\\x85\\x91\\xa2\\x1a\\xf7\\x28\\x07\\xc0\\x6a\\xad\\x59\\x6a\"\n\"\\x73\\x7e\\x6d\\x73\\x1e\\xaf\\xfb\\x0b\\x77\\x07\\xa6\\x87\\x8e\\x87\\x8c\\x73\\x08\\xfb\\x42\\x07\\x8a\\x73\\x88\\x87\\x70\\x86\\x08\\x77\\xf7\\x29\\x9f\\x07\"\n\"\\x75\\x8e\\x84\\x92\\xa0\\x1a\\xf7\\x32\\x07\\x8c\\x07\\x90\\x90\\x05\\x9c\\x98\\x99\\x93\\x9a\\x1b\\x9d\\x94\\x7c\\x6c\\x1f\\xfb\\x23\\x07\\x8a\\x75\\x85\\x84\"\n\"\\x77\\x89\\x08\\x77\\xf7\\x25\\x07\\x0e\\xf7\\x1c\\xf7\\x81\\xf8\\x35\\x15\\xf2\\xfb\\xe1\\x06\\x8a\\x5f\\x82\\x7f\\x66\\x87\\x08\\x73\\xf7\\xa0\\xa3\\x07\\x46\"\n\"\\x8d\\x7f\\x96\\x8a\\xcd\\x08\\xf7\\xce\\xe2\\xb7\\x34\\x39\\x1d\\xb0\\xa4\\xa4\\xb0\\xc6\\x51\\xb4\\x36\\x58\\x61\\x7d\\x71\\x6d\\x1e\\xa4\\x73\\x5f\\x9a\\x59\"\n\"\\x1b\\x47\\x57\\x73\\x5f\\x70\\x1f\\x9a\\x0a\\x73\\xf7\\x87\\xa3\\x07\\x63\\x8d\\x85\\x96\\x8a\\xcd\\x08\\xf7\\xfa\\x04\\xf7\\x0e\\x07\\xc2\\x99\\xa1\\xaf\\x9d\"\n\"\\x96\\x84\\x7f\\x86\\x88\\xbe\\x0a\\x70\\x9e\\x76\\xa8\\x85\\x1e\\x8a\\x7a\\x8a\\x7b\\x67\\x1a\\x0e\\xf7\\xfc\\xa6\\xf8\\x61\\x15\\x5f\\xc4\\xfb\\xe1\\x07\\xbb\"\n\"\\x1d\\xf7\\xce\\xf7\\x1e\\xfb\\xe1\\x07\\x8a\\x5f\\x83\\x80\\x65\\x86\\x08\\x73\\xf7\\x7d\\x3a\\x0a\\xf3\\x07\\xa5\\x8a\\x93\\x84\\x71\\x1a\\xfb\\xc2\\x07\\x8c\"\n\"\\x65\\x7e\\x7c\\x68\\x87\\x08\\x73\\xf7\\x7f\\xa3\\x07\\x68\\x8c\\x7d\\x9a\\xb4\\x1a\\xf8\\x1c\\x07\\x39\\x83\\x48\\x86\\x75\\x83\\x1d\\x32\\x50\\x73\\x56\\x65\"\n\"\\x1e\\xbb\\x7c\\x57\\xa8\\x42\\x1b\\x48\\x57\\x73\\x5f\\x70\\x1f\\x76\\x68\\x83\\x62\\x35\\x1a\\xf7\\x1f\\x16\\x39\\x1d\\x95\\x90\\x8c\\x8f\\x97\\x1e\\x88\\x7b\"\n\"\\x8a\\x7f\\x89\\x5e\\x08\\x0e\\xf7\\xfc\\xa5\\xf8\\x61\\x15\\x5f\\xc4\\xfb\\xe1\\x07\\xbb\\x1d\\xf7\\xce\\xf7\\x1e\\xfb\\xe1\\x07\\x8a\\x5f\\x83\\x80\\x65\\x86\"\n\"\\x08\\x73\\xf7\\x7d\\x3a\\x0a\\xf7\\x1e\\xfb\\xe4\\x07\\x68\\x80\\x7a\\x6f\\x87\\x1e\\x83\\x8a\\x05\\x73\\xf7\\x7f\\xa3\\x07\\x7f\\x8c\\x05\\x72\\x8d\\x7f\\x9e\"\n\"\\xae\\x1a\\xf8\\xf5\\x78\\x07\\x5c\\x6d\\x05\\xa1\\x55\\x61\\x94\\x55\\x1b\\x40\\x55\\x73\\x5a\\x69\\x1f\\xbb\\x77\\x5b\\xa4\\x44\\x1b\\x48\\x57\\x73\\x5f\\x70\"\n\"\\x1f\\x76\\x68\\x83\\x62\\x35\\x1a\\xf7\\x1f\\x16\\x39\\x1d\\x95\\x90\\x8c\\x8f\\x97\\x1e\\x88\\x76\\x8a\\x7e\\x89\\x64\\x08\\xf7\\xa9\\x16\\xfb\\x1e\\xc9\\x06\"\n\"\\xf1\\xa0\\xac\\xce\\xa5\\x9b\\x83\\x7e\\x87\\x89\\x85\\x88\\x84\\x1e\\x85\\x80\\x89\\x83\\x84\\x1a\\x7b\\x94\\x7c\\x97\\x87\\x1e\\x0e\\xf7\\x92\\xf7\\x57\\xf9\"\n\"\\x47\\x15\\x7c\\x06\\xfb\\x26\\x48\\x94\\x77\\x05\\x95\\x9c\\x94\\x8e\\x94\\x1b\\x9b\\x92\\x7f\\x71\\x1f\\xfb\\x8f\\x07\\x8c\\x6a\\x84\\x82\\x6d\\x89\\x08\\x73\"\n\"\\x78\\xf7\\x63\\x9e\\x7a\\x06\\x6e\\x8d\\x83\\x94\\x8c\\xac\\x08\\x35\\xfb\\xdc\\xc0\\x0a\\xf3\\xab\\x1d\\x56\\x6c\\x7a\\x71\\x5c\\x1a\\x4a\\xbd\\x5f\\xd7\\xd3\"\n\"\\xbe\\xbe\\xd3\\xb7\\x7b\\xa9\\x5a\\xb7\\x1e\\x6c\\xa3\\x15\\x5c\\xae\\x79\\xa4\\xab\\x1a\\xa4\\x9e\\xa0\\xa1\\xa4\\x9b\\x71\\x62\\x72\\x85\\x73\\x80\\x75\\x1e\"\n\"\\x57\\x41\\x15\\xb8\\x45\\x0a\\xbe\\xb6\\x8f\\x9b\\x9f\\xa7\\x1e\\x0e\\xf7\\x92\\xb4\\xf8\\xda\\x15\\xad\\x9c\\x9d\\x97\\xa9\\x1b\\xae\\xa2\\x72\\x64\\x63\\x6e\"\n\"\\x6f\\x5c\\x86\\x1f\\x78\\x07\\xd1\\x79\\xb1\\x63\\x53\\x1a\\x64\\x76\\x71\\x6c\\x7a\\x78\\x94\\x9b\\x7a\\x1e\\x9f\\x75\\x83\\x8f\\x7b\\x1b\\x7a\\x7d\\x7d\\x79\"\n\"\\x6c\\xad\\x77\\xc0\\xec\\xce\\xc9\\xe4\\xbc\\x75\\xb1\\x62\\xa0\\x1f\\xa9\\xa1\\x99\\xa5\\xad\\x1a\\xbf\\x64\\xaf\\x53\\x6b\\x6a\\x7f\\x77\\x75\\x1e\\x78\\x7a\"\n\"\\x82\\x7c\\x7f\\x66\\x08\\xe0\\xfc\\xdf\\xc0\\x0a\\xf4\\xab\\x1d\\x57\\x6d\\x79\\x70\\x5c\\x1a\\x4a\\xbd\\x5f\\xd7\\xd3\\xbe\\xbe\\xd3\\xb8\\x7b\\xa7\\x5a\\xb8\"\n\"\\x1e\\x6b\\xa3\\x15\\x5c\\xae\\x79\\xa4\\xaa\\x1a\\xa5\\x9d\\xa0\\xa2\\xa5\\x9b\\x71\\x61\\x73\\x85\\x73\\x7f\\x75\\x1e\\x57\\x41\\x15\\xb9\\x45\\x0a\\xbd\\xb7\"\n\"\\x8f\\x9b\\x9e\\xa7\\x1e\\x0e\\xf7\\x92\\xe2\\xf8\\xec\\x15\\xf7\\x26\\x06\\xac\\xdd\\x05\\xfb\\x4c\\x06\\x45\\xfb\\x66\\xcb\\x8a\\xa8\\x87\\xa5\\x80\\x19\\xba\"\n\"\\x78\\xa4\\x6b\\x62\\x1a\\x67\\x76\\x70\\x6e\\x7b\\x7c\\x92\\xa1\\x67\\x1e\\x97\\x78\\x83\\x8e\\x80\\x1b\\x77\\x7c\\x7d\\x78\\x6c\\xb2\\x75\\xc2\\xe3\\xcc\\xcc\"\n\"\\xe4\\xe6\\x43\\xc6\\xfb\\x05\\x8c\\x1f\\xad\\xfc\\xc8\\x15\\xc9\\x06\\xf8\\x5d\\xf9\\x2a\\x05\\x4d\\x06\\xf4\\xfc\\x3f\\x15\\xb5\\xa6\\x9c\\xa6\\xb2\\x1a\\xc2\"\n\"\\x5b\\xb3\\x4a\\x46\\x57\\x5e\\x4f\\x62\\x9d\\x6a\\xb6\\x66\\x1e\\x56\\x6c\\x7a\\x71\\xde\\x1d\\xa8\\x5a\\xb7\\x1e\\x6b\\xa3\\x15\\x5d\\xae\\x79\\xa4\\xaa\\x1a\"\n\"\\xa5\\x9e\\xa0\\xa1\\xa4\\x9b\\x71\\x62\\x72\\x85\\x72\\x7f\\x76\\x1e\\x57\\x41\\x15\\xb9\\x68\\x9e\\x6b\\x64\\x1a\\x69\\x7b\\x76\\x71\\x6b\\x7d\\xa2\\xbe\\xb6\"\n\"\\x8f\\x9b\\x9e\\xa7\\x1e\\x0e\\xf7\\x92\\xf7\\x54\\xf8\\xea\\x15\\x29\\xfb\\xe8\\x05\\xbf\\x06\\xf7\\x10\\xf8\\x3c\\x05\\xfb\\x7c\\x06\\x6f\\xfb\\x12\\x05\\x9f\"\n\"\\x06\\xaa\\x95\\xa0\\x96\\xbb\\x1b\\xfc\\xea\\x04\\xc9\\x06\\xf8\\x5d\\xf9\\x2a\\x05\\x4d\\x06\\xf4\\xfc\\x3f\\x15\\xb5\\xa6\\x9c\\xa7\\xb1\\x1a\\xc2\\x5b\\xb3\"\n\"\\x4a\\x46\\x57\\x5e\\x4f\\x61\\x9d\\x6a\\xb6\\x67\\x1e\\x57\\x6c\\x79\\x71\\xde\\x1d\\xa7\\x5a\\xb8\\x1e\\x6c\\xa3\\x15\\x5a\\xaf\\x7a\\xa3\\xab\\x1a\\xa4\\x9e\"\n\"\\xa0\\xa1\\xa5\\x9b\\x72\\x61\\x71\\x85\\x73\\x80\\x76\\x1e\\x56\\x41\\x15\\xb9\\x45\\x0a\\xbd\\xb7\\x8f\\x9b\\x9e\\xa7\\x1e\\x0e\\xf8\\x8c\\xd0\\x1d\\x58\\x68\"\n\"\\x67\\x08\\x61\\x64\\x50\\x78\\x36\\x1b\\x4f\\x7b\\x96\\xb6\\x1f\\xf7\\x87\\x07\\xf7\\x03\\x84\\xa6\\x71\\x9c\\xb9\\x1d\\x98\\x8d\\x90\\x92\\x8e\\x1e\\x90\\x95\"\n\"\\xa5\\x8f\\xa6\\x1b\\xe3\\xc7\\x79\\x69\\xa7\\x1f\\xa0\\x71\\x95\\x73\\x98\\x4b\\xa4\\x0a\\x83\\x78\\x77\\x6a\\x1e\\x8a\\x8a\\x88\\x85\\x88\\x85\\x6b\\x0a\\x7b\"\n\"\\x42\\x88\\x08\\x3b\\xf7\\xd2\\x15\\xf7\\x35\\xf7\\xb6\\x05\\x92\\xfb\\xb6\\x06\\xb8\\xf8\\x25\\xc3\\x1d\\x7a\\x82\\x78\\x7b\\x1e\\x0e\\x26\\x0a\\xd0\\xf9\\x2d\"\n\"\\x15\\x4b\\x79\\x6e\\x74\\x7b\\x0a\\x91\\xbe\\x08\\x0e\\x5d\\x0a\\x78\\x1d\\x5c\\xf7\\x6c\\x15\\x8d\\x95\\x91\\xae\\x05\\x9d\\xe0\\x8c\\x8f\\x9f\\x1a\\xaa\\x77\"\n\"\\xa1\\x6f\\x70\\x76\\x75\\x6d\\x7e\\x8e\\x75\\x8f\\x77\\x1e\\x93\\x64\\x90\\x74\\x8c\\x84\\x8d\\x82\\x8c\\x85\\x8e\\x7b\\x08\\x0e\\x26\\x0a\\xf7\\x22\\xf8\\xf7\"\n\"\\x22\\x0a\\x5f\\x0a\\xf7\\xa3\\x07\\x69\\x5d\\x82\\x76\\x0a\\xfc\\x88\\xf7\\x80\\x15\\xe9\\xf7\\x87\\xf0\\xfb\\x87\\x05\\x0e\\x8d\\x1d\\x9a\\xb2\\xef\\x1e\\xf7\"\n\"\\x75\\x06\\xac\\x3e\\x98\\x66\\x7d\\x1d\\x63\\xf9\\x3a\\x15\\x51\\x5a\\x5b\\x52\\x4f\\xba\\x5b\\xc6\\xc6\\xbb\\xba\\xc6\\xc6\\x5b\\xbb\\x44\\x1d\\x6f\\x6b\\x6c\"\n\"\\x70\\x71\\x6a\\x6c\\x4c\\x0a\\x24\\xbc\\x15\\xc3\\x06\\xf7\\x22\\xc9\\x05\\xac\\x99\\x92\\x91\\x9c\\x1a\\x9d\\x78\\x97\\x6e\\x78\\x79\\x85\\x7e\\x7b\\x1e\\x0e\"\n\"\\xf7\\x3f\\xa2\\x1d\\xf7\\xec\\x06\\xc5\\xc9\\x9e\\xaa\\xb4\\x1f\\xaf\\xa7\\xa0\\xb7\\xc0\\x1a\\xbe\\x77\\xb3\\x63\\xab\\x1e\\x72\\x9f\\x78\\x93\\x46\\x9e\\x7a\"\n\"\\x1d\\x47\\x1d\\xfc\\x02\\xf8\\xf7\\x85\\x0a\\x47\\x1d\\xfb\\x0a\\xf9\\xa7\\x93\\x0a\\xf7\\x85\\xf9\\x25\\xf7\\x2c\\x59\\x0a\\xfb\\x0b\\xf8\\xf7\\x15\\xfb\\x0f\"\n\"\\xa3\\x1d\\xee\\xf7\\x04\\x28\\x05\\x0e\\xf7\\x85\\xf8\\x26\\xfa\\x00\\x15\\x64\\x6b\\x6c\\x65\\x64\\xaa\\x6c\\xb2\\xb1\\xaa\\xaa\\xb2\\xb0\\x6c\\xab\\x66\\x1f\"\n\"\\xf7\\x93\\xfd\\x68\\x59\\x0a\\x0e\\x6a\\x1d\\x5e\\x0a\\xf7\\xa3\\xf9\\xc9\\x21\\x0a\\x57\\x0a\\xf7\\x3f\\xac\\x16\\xf8\\xee\\x06\\xfb\\xad\\xf9\\x44\\x05\\xfb\"\n\"\\x6b\\xfc\\xe6\\x15\\xf7\\x40\\xf8\\x09\\xf7\\x2f\\xfc\\x09\\x05\\x0e\\xf7\\x3f\\x24\\x0a\\xf8\\x38\\xf7\\x75\\x15\\x4b\\x7a\\x6e\\x74\\x4d\\x1b\\x4b\\x6c\\xa5\"\n\"\\xc8\\x7f\\x1f\\x5f\\x06\\x8e\\xb7\\x0a\\xae\\x0a\\x93\\xa4\\x90\\xbe\\x08\\x0e\\xf7\\x3f\\x24\\x0a\\xf8\\x7a\\xf7\\x82\\x21\\x0a\\xf7\\x3f\\x24\\x0a\\xf7\\xd0\"\n\"\\xf7\\x5d\\x2a\\x1d\\xf7\\x3f\\x24\\x0a\\xf8\\x76\\xf7\\x3f\\x22\\x0a\\xf8\\x91\\xea\\x15\\x8f\\xfb\\x14\\x05\\x83\\x07\\x40\\x8f\\x68\\x53\\x5a\\x1b\\x7a\\x7e\"\n\"\\x92\\x95\\x90\\x8e\\x92\\x91\\x95\\x1f\\x95\\x9b\\x8f\\x95\\x96\\x1a\\xa9\\x71\\xa3\\x6a\\x66\\x72\\x72\\x67\\x50\\xc5\\x62\\xdd\\xd0\\xc3\\xa7\\xbb\\xa5\\x1e\"\n\"\\x9c\\xab\\x96\\xbc\\xb4\\x1a\\x8a\\xf8\\xd4\\x05\\xc4\\x98\\x99\\xcc\\x94\\x1e\\xa4\\xfb\\x6b\\x72\\x07\\xd4\\x84\\x9f\\x76\\x44\\x1a\\xfb\\xc5\\x07\\xfb\\xf1\"\n\"\\xf8\\x41\\x05\\xfb\\x67\\x72\\x06\\x9f\\x9c\\x7c\\x52\\xbb\\x1f\\xfc\\x6e\\x07\\x8a\\x50\\x7b\\x7e\\x44\\x83\\x08\\x72\\xf7\\x77\\xa4\\x07\\x3f\\x93\\x79\\x9e\"\n\"\\x8a\\xd3\\x08\\xf8\\x26\\x07\\x0e\\xf7\\x3f\\xf8\\x5a\\xf8\\x94\\x15\\x71\\x06\\x7c\\xfb\\x06\\x64\\x67\\xfb\\x00\\x8c\\x08\\xf7\\x7c\\x07\\xb1\\x98\\x94\\xbf\"\n\"\\xf7\\x37\\xbc\\x69\\xfb\\x19\\xa4\\x1e\\xa4\\xf7\\x5d\\xfc\\xd5\\x72\\x06\\xce\\x88\\x9e\\x7b\\x8d\\x57\\x08\\xfc\\x78\\x07\\x89\\x56\\x7d\\x7f\\x43\\x85\\x08\"\n\"\\x72\\xf8\\xab\\x07\\x69\\x5d\\x82\\x79\\x6f\\x1a\\x5c\\xb7\\x69\\xc9\\x92\\x0a\\x65\\x72\\xa1\\xae\\x96\\x8b\\x8b\\x9a\\xd0\\x1f\\xad\\xf7\\x43\\x05\\x6f\\x06\"\n\"\\x6c\\x48\\x77\\x6f\\x67\\x6e\\x08\\x66\\x5d\\x55\\x7b\\x3e\\x1b\\x4a\\x79\\x98\\xb6\\x1f\\xf7\\x86\\x07\\xf7\\x01\\xb4\\x64\\xfb\\x08\\x97\\x1f\\xa5\\x06\\x0e\"\n\"\\xf7\\x3f\\x73\\x1d\\x0e\\xf7\\xc3\\xf4\\xf8\\x65\\x68\\x1d\\xdf\\x8c\\x90\\xa0\\x1a\\xa9\\x77\\xa1\\x6f\\x70\\x76\\x75\\x6d\\x7e\\x8e\\x76\\x8f\\x76\\x1e\\x93\"\n\"\\x65\\x92\\x6a\\x90\\x6e\\x08\\xf7\\xe4\\xfb\\x26\\x15\\xa6\\x06\\xb6\\xa5\\x77\\x5a\\xa0\\x1f\\x94\\x75\\x8e\\x88\\x0a\\xc0\\x58\\x94\\x53\\x1d\\xac\\xf7\\x5f\"\n\"\\x05\\x71\\x06\\x75\\xfb\\x03\\x44\\x53\\xfb\\x0a\\x8c\\x08\\x65\\x06\\x5e\\x7c\\x9c\\xc1\\x8d\\x1f\\x0e\\xf7\\xae\\x55\\x0a\\xf8\\x31\\xed\\x35\\x0a\\xf7\\xe0\"\n\"\\xfb\\x27\\x15\\xf7\\x95\\xfb\\x72\\x06\\x25\\x0a\\xf7\\xd0\\x9f\\x58\\x1d\\x9f\\xfb\\xd0\\x77\\x9e\\x06\\xbf\\x89\\x9b\\x78\\x89\\x51\\x08\\xfb\\x61\\xfb\\x95\"\n\"\\xf7\\x61\\x07\\x89\\xc6\\x9a\\x9d\\xc0\\x8d\\x08\\x9e\\x9f\\xfb\\xd0\\x77\\x9e\\x06\\xc0\\x89\\x9a\\xa2\\x0a\\xf7\\xd0\\x9f\\x78\\x20\\x1d\\x0e\\x8f\\xae\\xf7\"\n\"\\x7f\\x15\\xfb\\x3d\\xa7\\xe2\\x31\\xf7\\x1d\\x1b\\xd4\\xc6\\xa6\\xc6\\xbf\\x1f\\xbf\\x07\\x4b\\x6a\\x4a\\x5e\\x4f\\x1b\\x42\\x5c\\xde\\xf7\\x27\\x7f\\x1f\\xe7\"\n\"\\x06\\xa8\\xbd\\x05\\xfb\\x10\\xb0\\x06\\x9b\\xf7\\x39\\x07\\xa8\\xbd\\x05\\xfb\\x55\\x06\\xf7\\x3d\\x99\\xb4\\xd9\\xd7\\x1b\\xb5\\xb5\\x71\\x5f\\xa7\\x1f\\x9f\"\n\"\\x6d\\x95\\x69\\x92\\x56\\x08\\x9e\\xf7\\x73\\x78\\x06\\x6d\\x87\\x7f\\x7b\\x7a\\x1b\\x83\\x83\\x8d\\x8f\\x84\\x1f\\xa8\\x57\\x78\\x91\\x63\\x1b\\x31\\x38\\x50\"\n\"\\x28\\x5b\\x1f\\x78\\x63\\x83\\x71\\x81\\x55\\x08\\x61\\x06\\x6f\\x59\\x05\\xcd\\x71\\x06\\x70\\x65\\x07\\x6f\\x59\\x05\\x0e\\xf7\\x20\\x97\\xf9\\x2a\\x15\\x75\"\n\"\\x07\\xd0\\x86\\x97\\x7a\\x89\\x34\\x08\\xfc\\x24\\x07\\x8d\\x34\\x7f\\x7b\\x46\\x85\\x08\\x75\\xf7\\xd0\\xa1\\x07\\x45\\x91\\x7f\\x9b\\x8d\\xe2\\x08\\xf8\\x31\"\n\"\\x07\\xcb\\xa3\\xa1\\xd0\\xce\\xc0\\x7a\\x6a\\xb0\\x1e\\xaa\\x6f\\xa0\\x6a\\xae\\x3c\\x08\\xa5\\x06\\x64\\xf7\\x72\\x05\\x0e\\xf7\\xae\\x3d\\x0a\\xfb\\x96\\xf9\"\n\"\\x13\\x15\\x4b\\x79\\x6e\\x74\\xb4\\x1d\\xc1\\x1b\\xc2\\xac\\x0a\\xf7\\xbe\\xf9\\x87\\xf7\\xb3\\x6d\\x1d\\xfb\\x89\\xf8\\x70\\x20\\x0a\\xf7\\xae\\x3d\\x0a\\xfc\"\n\"\\x45\\xfc\\xef\\x15\\xf3\\xc6\\xb8\\xc6\\xd9\\x1a\\xca\\x67\\xb5\\x55\\x5e\\x6e\\x6e\\x5e\\x60\\xa5\\x6f\\xb3\\x8f\\x90\\x8b\\x8c\\x90\\x1e\\x8c\\x8d\\x8e\\x8b\"\n\"\\x8c\\x1b\\x95\\x92\\x83\\x80\\x67\\x6d\\x66\\x48\\x5c\\x1f\\x0e\\xf7\\xbe\\xf8\\x27\\xfa\\x04\\x9d\\x0a\\xf7\\xf3\\xfc\\xe5\\x6d\\x1d\\x0e\\xf7\\xae\\xf5\\xf8\"\n\"\\x71\\x15\\xfc\\x11\\x07\\x8a\\x59\\x7b\\x7e\\x47\\x83\\x43\\x1d\\x44\\x92\\x79\\x99\\x8a\\xbd\\x46\\x0a\\x8a\\x59\\x79\\x7d\\x44\\x84\\x08\\x72\\xf7\\xe7\\xa4\"\n\"\\x07\\x46\\x93\\x7a\\x98\\x8a\\xbd\\x08\\xf8\\x11\\xdf\\xb3\\x37\\xca\\x07\\x8c\\xbe\\xa0\\x9c\\xcc\\x8e\\x08\\xa4\\xfb\\xe7\\x72\\x07\\xce\\x88\\xa1\\x7b\\x8c\"\n\"\\x57\\x08\\x4c\\xfb\\x85\\xca\\x07\\x8c\\xbf\\xa0\\x9b\\xa3\\x0a\\x87\\x9e\\x7b\\x8c\\x58\\x08\\x4c\\x32\\x63\\x07\\xf7\\x8f\\x16\\xf7\\x85\\x23\\xfb\\x85\\x06\"\n\"\\x0e\\xf7\\xbe\\xf9\\x8c\\x90\\x1d\\xbf\\xa0\\x9b\\xa3\\x0a\\x86\\x9e\\x7c\\x8c\\x58\\x08\\xfc\\x78\\x07\\x8a\\x59\\x7b\\x7e\\x47\\x83\\x43\\x1d\\x44\\x92\\x79\"\n\"\\x98\\x8a\\xbe\\x46\\x0a\\x89\\x58\\x7a\\x7e\\x44\\x84\\x08\\x72\\xf7\\xe8\\x07\\xfb\\x93\\xf9\\x76\\x20\\x0a\\xf8\\x1d\\xf8\\x06\\xa0\\x15\\x78\\x06\\x56\\x8d\"\n\"\\x7c\\x9d\\x8d\\xc4\\x08\\xf8\\x72\\x07\\x89\\xc7\\x9a\\x9d\\xc0\\x8e\\x08\\x9e\\x9f\\xfb\\xd0\\x77\\x9e\\x06\\xc0\\x88\\x9a\\x79\\x89\\x4f\\x08\\xfc\\x72\\x07\"\n\"\\x8d\\x52\\x7c\\x79\\x56\\x89\\x08\\x78\\x76\\xf7\\xd0\\x06\\xf7\\x18\\xf9\\x25\\x15\\xac\\x06\\xc0\\x88\\x9a\\x79\\x89\\x4e\\x08\\xfc\\x51\\x07\\x46\\x76\\x6c\"\n\"\\x5e\\x6d\\x75\\x98\\x9c\\x90\\x8c\\x8f\\x8d\\x8d\\x1e\\x9f\\xa7\\x8e\\x92\\x9f\\x1a\\xaf\\x6b\\xab\\x66\\x65\\x6c\\x66\\x5e\\x43\\xd8\\x52\\xed\\xd2\\xce\\xa9\"\n\"\\xbc\\xaf\\x1e\\xa3\\xac\\x92\\xa8\\xd3\\x1a\\xf8\\x0f\\x07\\x89\\xc7\\x9a\\x9e\\xc0\\x8e\\x08\\x9b\\x9f\\xfb\\xdf\\x06\\x0e\\x20\\x27\\x0a\\x47\\xfa\\x19\\x15\"\n\"\\x4c\\x7b\\x6d\\x73\\x4d\\x1b\\x4c\\x6b\\xa5\\xc8\\x80\\x1f\\x5e\\x06\\x8e\\xb7\\x0a\\xcf\\x1d\\x90\\xbe\\x08\\x0e\\x20\\x27\\x0a\\xfb\\x45\\xfa\\x01\\x2a\\x1d\"\n\"\\x20\\x27\\x0a\\x80\\xf9\\xe3\\x22\\x0a\\x20\\x86\\x1d\\xf7\\xbf\\x07\\x68\\x5d\\x83\\x9a\\x1d\\xb5\\x9d\\x8e\\x96\\x92\\x96\\x1f\\x0e\\x20\\xf7\\xf2\\x67\\x0a\"\n\"\\x20\\xf7\\xf8\\x9f\\x49\\x1d\\xfb\\x97\\xf9\\xef\\x9d\\x0a\\xf7\\x61\\x16\\x63\\x4e\\x0a\\xb2\\xaa\\xaa\\xb1\\xb1\\x6c\\xab\\x66\\x1f\\x0e\\xa5\\xe9\\x35\\x0a\"\n\"\\xf8\\x38\\xfc\\x51\\x49\\x1d\\x0e\\x20\\xf8\\x06\\xa4\\x15\\x41\\x8f\\x77\\x9a\\x8a\\xbf\\xa1\\x1d\\x8a\\x58\\x78\\x7c\\x42\\x86\\x08\\x72\\xf7\\xf2\\x07\\xfb\"\n\"\\xce\\xf9\\x80\\x15\\xa7\\x8e\\x9f\\x9e\\xa5\\x1b\\x98\\x94\\x88\\x78\\xb5\\x1f\\xa8\\x7e\\x05\\x83\\x9d\\xa6\\xb8\\x0a\\x66\\x7e\\x7d\\x7f\\x70\\x1b\\x7f\\x49\"\n\"\\x0a\\x6f\\x72\\x91\\x77\\x1b\\x4d\\x50\\x0a\\x99\\xf8\\x74\\xf9\\x38\\x15\\xfb\\xf4\\x72\\x06\\xda\\x89\\x9f\\x7d\\x8d\\x54\\x08\\xfc\\xc0\\x07\\x4d\\x79\\x72\"\n\"\\x5d\\x6f\\x7a\\x97\\x9f\\x94\\x8e\\x90\\x94\\x96\\x1e\\x97\\x9a\\x8e\\x93\\x9b\\x1a\\xb3\\x69\\xae\\x64\\x66\\x6a\\x69\\x65\\x62\\xa7\\x5e\\xb2\\x74\\x1e\\x7d\"\n\"\\xa4\\xb3\\x82\\xb3\\x1b\\xf7\\x21\\xd5\\xd6\\xf7\\x24\\xe4\\x1d\\x49\\xf3\\x20\\x0a\\xf7\\xae\\xf7\\xce\\x6b\\x1d\\x0e\\xf7\\xae\\x52\\x0a\\xfc\\x53\\xfb\\xe9\"\n\"\\x15\\xf4\\x36\\x0a\\x94\\x93\\x83\\x80\\x67\\x6d\\x66\\x47\\x5c\\x1f\\x0e\\xf7\\x3f\\x31\\x1d\\xfb\\xec\\xf9\\x76\\xc2\\x1d\\x7b\\x45\\x1d\\xf7\\x71\\xf7\\xc3\"\n\"\\xf8\\x57\\x15\\xf7\\x27\\xfb\\xf4\\x05\\x95\\x73\\x8d\\x83\\x81\\x1a\\x71\\x79\\x80\\x60\\x1e\\x72\\x77\\xf7\\xc2\\x9f\\x82\\x06\\x73\\x8d\\x84\\x91\\x7b\\xaf\"\n\"\\xfb\\x95\\xf8\\xf0\\x18\\x6f\\x06\\xfb\\x61\\xfc\\xb8\\x76\\x4a\\x6d\\x6a\\x64\\x89\\x19\\x77\\xf7\\x65\\x9f\\x75\\x07\\x68\\x70\\x9e\\xa3\\x94\\x8f\\x99\\x92\"\n\"\\x9f\\x1f\\x0e\\xf7\\x3f\\x31\\x1d\\xfb\\x2a\\xf8\\x1a\\x15\\xf3\\x36\\x0a\\x94\\x93\\x82\\x81\\x68\\x6d\\x66\\x47\\x5b\\x1f\\x0e\\xf7\\x3f\\x31\\x1d\\xfb\\xde\"\n\"\\xfb\\xe9\\x15\\xf3\\xb3\\x0a\\x5e\\x60\\xa5\\x6f\\xb4\\x8e\\x90\\x8b\\x8c\\x90\\x1e\\x8c\\x8e\\x8e\\x8b\\x8c\\x1b\\x95\\x92\\x83\\x80\\x67\\x6c\\x66\\x48\\x5c\"\n\"\\x1f\\x0e\\xf7\\x3f\\x31\\x1d\\xfb\\x1f\\x91\\x0a\\xf8\\x54\\x72\\x1d\\x30\\x1d\\xf7\\x9d\\xf9\\x5d\\x2b\\x1d\\x30\\x1d\\xf8\\x96\\xfa\\x0d\\x21\\x0a\\x30\\x1d\"\n\"\\xf7\\xaa\\xfc\\x02\\x15\\xf4\\xb3\\x0a\\x5f\\x5f\\xa5\\x6f\\xb3\\x8f\\x90\\x8b\\x8c\\x90\\x1e\\x8c\\x8e\\x8e\\x8b\\x8c\\x1b\\x95\\x92\\x83\\x80\\x67\\x6d\\x67\"\n\"\\x47\\x5b\\x1f\\x0e\\xf7\\x21\\xf8\\xb5\\x15\\xf8\\x56\\xfc\\xb5\\x05\\xa0\\xf8\\xc8\\x06\\x88\\xc5\\x9a\\x9c\\xbe\\x8e\\x08\\x9c\\x9f\\xfb\\x5d\\x77\\x9e\\x06\"\n\"\\xbf\\x89\\x9a\\x79\\x8a\\x51\\x08\\xfb\\xdc\\x07\\xfb\\xf1\\xf8\\x3e\\x05\\xfb\\x63\\x77\\x06\\xa4\\x98\\x84\\x6f\\xa4\\x1f\\xa1\\x70\\x05\\xfc\\x78\\x07\\x25\"\n\"\\x0a\\xf7\\x61\\x9f\\x79\\x20\\x1d\\x0e\\xf7\\xae\\x26\\x1d\\xf3\\xf7\\x87\\x15\\x4c\\x7b\\x6d\\x73\\x7b\\x0a\\x90\\xbe\\x08\\x0e\\xf7\\xae\\x26\\x1d\\xfb\\x4a\"\n\"\\xdb\\x70\\x0a\\xca\\xfb\\x31\\x15\\xc3\\x06\\xf7\\x21\\xe3\\x05\\xad\\xa0\\x92\\x94\\xa2\\x1a\\xa6\\x78\\x9c\\x6e\\x77\\x7a\\x82\\x78\\x7b\\x1e\\x0e\\xf7\\xae\"\n\"\\x26\\x1d\\xf7\\x36\\xf7\\x51\\x22\\x0a\\xf7\\xc5\\xcb\\x35\\x0a\\xf9\\x6e\\xfc\\x65\\x15\\xab\\xf7\\x4f\\x05\\x71\\x06\\x4e\\x7c\\x76\\x79\\x51\\x1b\\xfb\\x1c\"\n\"\\x06\\xde\\xa8\\xb2\\xa3\\xb6\\xba\\x08\\xb8\\xbd\\xa4\\xca\\xcc\\x1a\\xd5\\x6b\\xd6\\x53\\xc0\\x1e\\xc3\\x50\\x39\\xa7\\xfb\\x01\\x1b\\x25\\x38\\x6f\\x53\\x51\"\n\"\\x1f\\x53\\x57\\x6b\\x3f\\x40\\x1a\\x45\\xa7\\x49\\xbe\\x58\\x1e\\xb4\\x61\\xaf\\x76\\xda\\x70\\x08\\xfb\\x1c\\x06\\x51\\x76\\x9d\\xc8\\x7c\\x1f\\x71\\x06\\xab\"\n\"\\xfb\\x4f\\x05\\xf7\\xa4\\xf5\\x06\\x68\\xa1\\x7a\\x99\\x7a\\xa0\\x08\\x66\\xba\\x75\\xdb\\xe5\\x1a\\xf7\\x3a\\xcb\\xe6\\xf7\\x08\\xf7\\x07\\xcb\\x2f\\xfb\\x39\"\n\"\\x3c\\x79\\x40\\x6f\\x5e\\x1e\\x78\\x6d\\x77\\x79\\x60\\x70\\x08\\x21\\x07\\x0e\\xf7\\xae\\xf8\\x17\\x5c\\x0a\\xf7\\xae\\xcf\\xf8\\x65\\x68\\x1d\\xdf\\x8c\\x90\"\n\"\\xa0\\x1a\\xa9\\x77\\xa1\\x6f\\x70\\x76\\x75\\x6d\\x7e\\x8e\\x76\\x8f\\x76\\x1e\\x93\\x65\\x92\\x6a\\x90\\x6e\\x08\\xf8\\x24\\xf7\\x63\\x15\\x32\\x49\\x73\\x54\"\n\"\\x4a\\x1f\\x41\\x4c\\x66\\x35\\xfb\\x05\\x1a\\xfb\\x61\\xf7\\x1a\\xfb\\x1c\\xf7\\x5e\\xf7\\x58\\xf7\\x1c\\xf7\\x1e\\xf7\\x5d\\xf4\\x6e\\xd9\\x4d\\xcb\\x1e\\xcc\"\n\"\\x4b\\x3c\\xaa\\x24\\x1b\\x8e\\x68\\x15\\xf7\\x00\\xc7\\xfb\\x00\\xfb\\x54\\x23\\x79\\x37\\x67\\x52\\x1f\\x62\\x73\\x5b\\x70\\x5e\\x1b\\x5c\\x5d\\xa7\\xb9\\x71\"\n\"\\x1f\\x6b\\xc1\\x7d\\xd2\\xf4\\x1a\\xf7\\x0f\\x9f\\xd9\\xba\\xc4\\x5f\\x1d\\xf7\\xae\\x84\\x1d\\x67\\xcb\\xbe\\x7e\\xd2\\x1b\\xf7\\x64\\xf7\\x27\\xf7\\x27\\xf7\"\n\"\\x64\\xcf\\x7b\\xcb\\x6c\\xc2\\x1f\\x75\\xb1\\x78\\xa0\\x5b\\xb3\\x08\\xfc\\x09\\xfc\\x6b\\x15\\x7a\\xc7\\x86\\xb5\\xd5\\x1a\\xf7\\x69\\x99\\x1d\\xc1\\xf9\\x14\"\n\"\\xc2\\x1d\\x7a\\x82\\x78\\x7b\\x1e\\x0e\\xf7\\xe1\\xf7\\xeb\\x51\\x0a\\xf7\\xae\\xf9\\x7f\\xf9\\x2a\\x15\\xfd\\x62\\x44\\x0a\\xf8\\x53\\x07\\x89\\xc6\\x9a\\x9d\"\n\"\\xc0\\x8d\\x08\\xf7\\x11\\x06\\xc0\\x89\\x9a\\x79\\x89\\x50\\x08\\xfc\\x53\\x96\\x1d\\x06\\x0e\\xf7\\xb0\\xf8\\x5d\\xf7\\x70\\x15\\xf7\\x2b\\x8e\\xeb\\xf3\\x8a\"\n\"\\xf7\\x33\\x8e\\xd8\\x18\\xb8\\x8c\\x95\\x9f\\xa0\\x1b\\x92\\x91\\x89\\x86\\x96\\x1f\\x93\\x9f\\x05\\xa0\\x64\\x76\\x92\\x6c\\x1b\\x47\\x5f\\x5d\\x40\\x89\\x1f\"\n\"\\x87\\xfb\\x0d\\x8c\\x2c\\x60\\x45\\x4d\\x86\\x19\\xf7\\xc6\\x07\\x88\\xc5\\x9b\\x9e\\xbf\\x8d\\x08\\x94\\x9f\\xfb\\xae\\x77\\x94\\x06\\xbf\\x89\\x9b\\x78\\x89\"\n\"\\x51\\x08\\xfb\\xc6\\x07\\x4e\\x8f\\x5f\\xce\\xe3\\x1a\\x88\\xeb\\x8a\\xae\\x87\\xa9\\x86\\x9f\\x19\\xb6\\x7e\\x60\\xa8\\x57\\x1b\\x6c\\x75\\x84\\x76\\x68\\x1f\"\n\"\\x92\\x77\\x05\\x91\\x99\\x90\\x8c\\x92\\x1b\\x96\\x95\\x83\\x81\\x8f\\x1f\\x8f\\x7e\\x8b\\x87\\x8d\\x5c\\x8d\\x48\\x18\\x8d\\xfb\\x2e\\xed\\x24\\xf7\\x28\\x89\"\n\"\\x08\\xfb\\x10\\x07\\x8d\\x53\\x7b\\x7a\\x57\\x88\\x08\\x78\\x77\\xf7\\xc2\\x9f\\x78\\x06\\x57\\x8e\\x7b\\x9c\\x8e\\xc3\\x08\\x0e\\x34\\x1d\\x90\\xf8\\x1d\\x15\"\n\"\\xc3\\x06\\xf7\\x22\\x59\\x1d\\x34\\x1d\\xf7\\x92\\xf8\\xcd\\x21\\x0a\\x34\\x1d\\x9d\\xfd\\x42\\x71\\x0a\\xf7\\x07\\x58\\x0a\\xc7\\x33\\x1d\\xfb\\x96\\xf7\\x9b\"\n\"\\x2b\\x1d\\xc7\\xf8\\x78\\xf9\\x48\\x15\\x6d\\x06\\x70\\x83\\x85\\x84\\x79\\x1b\\x82\\x7f\\x8e\\x92\\x76\\x1f\\x9c\\x5d\\x6b\\x91\\x64\\x1b\\xfb\\x1c\\x38\\x3e\"\n\"\\xfb\\x13\\x34\\xbf\\x4c\\xf7\\x0b\\x52\\x1f\\xce\\x6b\\x05\\xe3\\x61\\xa3\\x71\\x56\\x1a\\x46\\x5a\\x5f\\x3e\\x50\\x5a\\xa4\\xbc\\x65\\x1e\\x70\\xb0\\x7d\\xac\"\n\"\\x7a\\xd1\\x08\\x6e\\xfb\\x8b\\xa8\\x06\\xa5\\x91\\x93\\x93\\x9b\\x1b\\x93\\x97\\x88\\x84\\xa0\\x1f\\xb6\\x7c\\xa7\\x85\\xaf\\x89\\x69\\x3d\\x18\\x39\\x0a\\x7a\"\n\"\\x80\\x8e\\x94\\x71\\x1f\\x8a\\x89\\x8c\\x8c\\x89\\x1f\\x2f\\x0a\\x9f\\xb9\\xbe\\x8e\\xb4\\x96\\xad\\x9e\\x19\\xca\\xaf\\xb2\\xcf\\xd4\\x1a\\xd6\\x5e\\xd6\\x4a\"\n\"\\xab\\x1e\\xfb\\x27\\xd4\\x05\\x3a\\xb3\\x75\\xa4\\xbb\\x1a\\xc9\\xb5\\xb1\\xcf\\xb8\\xb5\\x78\\x66\\xaf\\x1e\\xad\\x68\\x9b\\x6e\\x9f\\x4a\\x08\\xa7\\x06\\x0e\"\n\"\\xd3\\xf8\\x26\\xf9\\x76\\x15\\xc4\\x06\\xfb\\x0f\\xf7\\x44\\x05\\x2f\\x06\\xfb\\x0d\\xfb\\x44\\x05\\xc3\\x06\\xf7\\x03\\xed\\x05\\xf7\\x56\\xfb\\xfd\\x15\\xf7\"\n\"\\x6d\\x6d\\x07\\x70\\x83\\x85\\x84\\x78\\x1b\\x82\\x80\\x8e\\x92\\x76\\x1f\\x9c\\x5e\\x6a\\x91\\x64\\x1b\\xfb\\x1c\\x38\\x3e\\xfb\\x13\\x34\\xbf\\x4c\\xf7\\x0b\"\n\"\\x52\\x1f\\xce\\x6b\\x05\\xe3\\x61\\xa3\\x71\\x57\\x1a\\x45\\x5a\\x5f\\x3e\\x50\\x5a\\xa4\\xbc\\x65\\x1e\\x70\\xb0\\x7d\\xac\\x7a\\xd1\\x08\\x6e\\xfb\\x8b\\xa8\"\n\"\\x06\\xa5\\x91\\x93\\x93\\x9b\\x1b\\x93\\x96\\x88\\x84\\xa1\\x1f\\x7a\\xbc\\xb0\\x84\\xb7\\x1b\\xf7\\x28\\xef\\xe0\\xf7\\x12\\xd6\\x5d\\xd6\\x4b\\xab\\x1f\\xfb\"\n\"\\x27\\xd4\\x05\\x3a\\xb3\\x75\\xa4\\xbb\\x1a\\xc9\\xb5\\xb1\\xcf\\xb9\\xb4\\x78\\x66\\xaf\\x1e\\xad\\x68\\x9a\\x6e\\xa0\\x4a\\x08\\x0e\\xc7\\x33\\x1d\\xfb\\x89\"\n\"\\xfd\\xc4\\x8a\\x1d\\xf7\\x32\\xf8\\xc4\\xf9\\x2a\\x15\\xfc\\xa2\\x06\\xf7\\x3a\\xfb\\xf3\\xfb\\x3a\\xfb\\xcb\\x05\\xf8\\xa2\\x06\\xbb\\xf7\\x70\\x05\\x6d\\x06\"\n\"\\x56\\xfb\\x10\\x47\\x5d\\xfb\\x11\\x8d\\x08\\xfb\\x05\\x06\\xf7\\x1e\\xf7\\xae\\xfb\\x24\\xf7\\xb4\\x05\\xf7\\x01\\x06\\xf7\\x1b\\x8f\\xcb\\x5a\\x94\\xfb\\x06\"\n\"\\x08\\xa9\\x06\\x0e\\xf7\\x3f\\xf8\\x30\\xf9\\x06\\x15\\xb6\\x06\\xdb\\x8e\\xbc\\x58\\x90\\x30\\x08\\xa8\\xf7\\x43\\xfc\\xcf\\xa5\\x1d\\xf7\\xf1\\x9f\\x6e\\x20\"\n\"\\x1d\\x0e\\xf7\\x3f\\xf7\\x91\\xf7\\xce\\x15\\xfb\\x59\\x07\\x89\\x3f\\x80\\x81\\x37\\x85\\x08\\x72\\xf7\\xf9\\xa4\\x07\\x36\\x8f\\x80\\x96\\x89\\xd8\\x08\\xf7\"\n\"\\x59\\xde\\xba\\x38\\xf7\\xaf\\x95\\x1d\\xfb\\xaf\\x36\\x5c\\x07\\x0e\\xf7\\x3f\\x48\\x1d\\x80\\xfa\\x26\\x21\\x0a\\xf7\\x3f\\xf8\\x04\\x16\\xf7\\x25\\xa4\\x06\"\n\"\\x7e\\x1d\\xf7\\x3e\\x07\\x60\\x2b\\x68\\x0a\\xf7\\xae\\xf7\\xb1\\xf8\\x59\\x15\\xfb\\x7d\\xa9\\x07\\xb9\\x8c\\xa3\\xa2\\xbc\\x1b\\xbb\\xa4\\x74\\x5d\\x1f\\xa9\"\n\"\\xf7\\x7d\\x6d\\x06\\x5c\\x86\\x76\\x77\\x5c\\x1b\\x5b\\x77\\x9e\\xbb\\x85\\x1f\\xd6\\xf7\\x75\\x15\\x31\\x2c\\x65\\x4f\\x4d\\x1f\\x52\\x53\\x67\\x2d\\x2e\\x1a\"\n\"\\x23\\xac\\x33\\xc7\\x4e\\x1e\\x4f\\xc7\\xeb\\x65\\xe7\\x1b\\xdf\\xe5\\xad\\xc2\\xc5\\x1f\\xcd\\xc8\\xb0\\xe8\\xf2\\x1a\\xf2\\x66\\xe9\\x49\\xc7\\x1e\\xc3\\x50\"\n\"\\x33\\xac\\x35\\x1b\\x8a\\x6a\\x15\\xf5\\xcd\\xfb\\x0c\\xfb\\x55\\xfb\\x55\\x49\\xfb\\x0c\\x21\\x22\\x47\\xf7\\x10\\xf7\\x55\\xe3\\x9d\\xdd\\xac\\xc7\\x1f\\xbe\"\n\"\\xa7\\xb6\\xa7\\xbe\\x1b\\x0e\\x24\\x1d\\xfb\\x69\\xf7\\x8e\\x15\\x4b\\x7a\\x6e\\x74\\xa6\\x0a\\x6f\\x08\\x67\\xae\\x0a\\x93\\xa4\\x90\\xbe\\x08\\x0e\\x24\\x1d\"\n\"\\xfc\\x9b\\xe2\\x70\\x0a\\xca\\xfb\\x31\\x15\\xc2\\x06\\xf7\\x23\\x59\\x1d\\x24\\x1d\\xfb\\x43\\xf7\\x58\\x15\\xfb\\xde\\x43\\xf7\\xde\\x06\\x0e\\xf9\\x51\\x95\"\n\"\\x0a\\xfb\\x0b\\x24\\x75\\x0a\\xd5\\x1b\\xc5\\xbe\\x97\\xa5\\xba\\x1f\\x5d\\x51\\x80\\x75\\x6c\\x1a\\x5c\\xb7\\x69\\xc9\\xbd\\xba\\xa8\\xb9\\xa5\\x1e\\x75\\x99\"\n\"\\x86\\x89\\x8a\\x8a\\x82\\x87\\x19\\x81\\x77\\x81\\x88\\x7c\\x1b\\x5f\\x77\\xa2\\xbf\\x9e\\x95\\xb2\\x94\\x9c\\x1f\\xb4\\xd2\\x98\\xb9\\x8d\\xdf\\x08\\xf7\\xd3\"\n\"\\x07\\x8c\\xc7\\x99\\x9b\\xca\\x94\\x08\\x0e\\xf8\\x30\\xf7\\xcc\\x15\\xfb\\x1a\\xf7\\xa3\\x05\\x80\\xa1\\x8a\\x90\\x92\\x1a\\x9b\\x9b\\x94\\xa6\\x1e\\x9b\\x9f\"\n\"\\xfb\\xb5\\x77\\x97\\x06\\xac\\x87\\xa1\\x76\\xa8\\x4e\\xf7\\x30\\xfb\\xc2\\x18\\xfb\\x32\\x07\\x8c\\x31\\x0a\\x6e\\x77\\xf7\\xe5\\x9f\\x6d\\x06\\x56\\x8e\\x7c\"\n\"\\x9c\\x8e\\xc3\\x08\\xf7\\x48\\x07\\xf7\\x1a\\xf7\\xa6\\xb1\\xd6\\x96\\x96\\xb9\\x91\\x19\\x9f\\xfb\\x53\\x77\\x9f\\x07\\xab\\xa0\\x7b\\x72\\x7b\\x85\\x7a\\x7b\"\n\"\\x6a\\x1f\\x0e\\xf8\\x43\\xf7\\xcc\\x15\\xfb\\x1a\\xf7\\xa3\\x05\\x80\\xa1\\x8a\\x90\\x92\\x1a\\x9b\\x9b\\x94\\xa6\\x1e\\x9b\\x9f\\xfb\\xb5\\x77\\x97\\x06\\xac\"\n\"\\x87\\xa1\\xe9\\x1d\\x8c\\x31\\x0a\\x6e\\x77\\xf7\\xe5\\x9f\\x6d\\x06\\x56\\x8e\\x7c\\x9c\\x8e\\xc3\\x08\\xf7\\x48\\x07\\xf7\\x1a\\xf7\\xa6\\xb1\\xd6\\x96\\x96\"\n\"\\xb9\\x91\\x19\\x9f\\xfb\\x53\\x77\\x9f\\x07\\xab\\xa0\\x7b\\x72\\x7b\\x85\\x7a\\x7b\\x6a\\x1f\\xfb\\x8f\\xf7\\xd8\\x15\\x64\\x3b\\x0a\\xb1\\x6b\\xab\\x66\\x1f\"\n\"\\xf7\\x6f\\x16\\x64\\x3b\\x0a\\xb1\\x6b\\xab\\x66\\x1f\\x0e\\xf8\\x05\\xf7\\x13\\x35\\x0a\\xf8\\x71\\xfb\\x2d\\x15\\xfb\\x1a\\xf7\\xa3\\x05\\x81\\xa1\\x89\\x90\"\n\"\\x92\\x1a\\x9b\\x9b\\x94\\xa7\\x1e\\x9a\\x9f\\xfb\\xb4\\x77\\x96\\x06\\xad\\x87\\xa0\\xe9\\x1d\\x8d\\x31\\x0a\\x6e\\x77\\xf7\\xe4\\x9f\\x6e\\x20\\x1d\\xf7\\x48\"\n\"\\x07\\xf7\\x1b\\xf7\\xa6\\xb0\\xd6\\x96\\x96\\xb9\\x91\\x19\\x9f\\xfb\\x52\\x77\\x9f\\x07\\xab\\x9f\\x7b\\x72\\x7a\\x86\\x7c\\x7a\\x69\\x1f\\x0e\\x24\\x1d\\xfb\"\n\"\\xe7\\xf7\\xc9\\x38\\x1d\\xf9\\x52\\x95\\x0a\\xfb\\x0c\\x25\\x75\\x0a\\xd4\\x1b\\xd5\\xd1\\xa1\\xb0\\xb6\\x1f\\xb8\\xb1\\xa5\\xd7\\xe8\\x1a\\xf7\\xd3\\x07\\x8c\"\n\"\\xc7\\x99\\x9b\\xca\\x94\\x08\\xfc\\x59\\xf0\\x15\\xa7\\x8f\\x9f\\x9e\\xa4\\x1b\\x99\\x91\\x89\\x77\\xb7\\xb8\\x1d\\x7d\\x7e\\x6f\\x1b\\x80\\x88\\x8c\\x96\\x72\"\n\"\\x47\\x0a\\x4e\\x66\\x64\\x35\\x79\\x1f\\x0e\\xf8\\x8c\\x2e\\x1d\\xfc\\xb1\\xe2\\x2b\\x1d\\xf8\\x8c\\x2e\\x1d\\xfb\\xfb\\xe2\\x20\\x0a\\xf8\\x8c\\x2e\\x1d\\xfc\"\n\"\\xd4\\xf7\\x76\\x28\\x0a\\xf8\\x8c\\x2e\\x1d\\xfc\\x26\\x9d\\x1d\\xf7\\x49\\xf8\\xe0\\x16\\xac\\xf7\\x5f\\x05\\x71\\x06\\x74\\x43\\x45\\x67\\xfb\\x0a\\x8c\\x08\"\n\"\\x31\\x06\\xfb\\x0a\\x8a\\x44\\xaf\\x74\\xd3\\x08\\x72\\x06\\xac\\xfb\\x5f\\x05\\xf8\\x87\\xf9\\x2a\\x15\\xfc\\x87\\xfb\\x4a\\xa1\\x06\\x95\\xc3\\xbf\\xa9\\xe5\"\n\"\\x8d\\x08\\xf7\\x2b\\x06\\xe5\\x89\\xc0\\x6d\\x94\\x53\\x08\\xa1\\x06\\x27\\x7e\\x15\\x83\\x53\\x6a\\x70\\x4f\\x8a\\x08\\x26\\x06\\x4f\\x8c\\x6a\\xa6\\x83\\xc3\"\n\"\\x08\\x73\\xfb\\x96\\xa3\\x06\\x89\\xbc\\xb7\\xaf\\xc6\\x89\\x08\\xf0\\x06\\xc6\\x8d\\xb7\\x68\\x89\\x59\\x08\\xa3\\xf7\\x96\\x06\\x0e\\x2c\\x0a\\xfb\\x6f\\xe2\"\n\"\\x20\\x0a\\x2c\\x0a\\xfb\\x9b\\x9d\\x1d\\xf7\\x3f\\x37\\x1d\\xfb\\xf7\\x83\\x0a\\xf7\\x3f\\x37\\x1d\\xfb\\xa8\\xfa\\x01\\x2a\\x1d\\xf7\\x3f\\xf7\\x77\\xb3\\x15\"\n\"\\xf8\\x0a\\xf9\\x02\\x05\\xfc\\x84\\x06\\x7d\\xfb\\x50\\x05\\xa4\\x06\\x95\\xef\\xc7\\xbe\\xf3\\x8a\\x08\\xf7\\x0b\\x06\\xfc\\x08\\xfd\\x04\\x05\\xf8\\xd3\\x06\"\n\"\\xa4\\xf7\\x7a\\x05\\x72\\x06\\x77\\xfb\\x13\\x3e\\x49\\xfb\\x12\\x8e\\x08\\x0e\\x8f\\x23\\x1d\\xcc\\xf8\\x52\\x72\\x0a\\xf9\\x34\\xf7\\x14\\x15\\x5b\\x65\\x67\"\n\"\\x78\\x59\\x1b\\x3b\\x80\\x0a\\x66\\x64\\x99\\x4a\\x1b\\x21\\x3e\\x56\\x43\\x64\\xa6\\x72\\xb5\\xb3\\xa2\\x9f\\xb0\\x9e\\x87\\x95\\x7e\\x99\\x1f\\x82\\x95\\x88\"\n\"\\x90\\x92\\x1a\\xa0\\xa6\\x99\\xb1\\xc3\\xa1\\x74\\x51\\x1e\\x3b\\x07\\xfb\\x16\\x61\\x5f\\x7a\\x6a\\x74\\x08\\x65\\x70\\x79\\x6a\\x5e\\x1a\\x45\\xb4\\x66\\xd8\"\n\"\\xcd\\xc3\\xa5\\xc4\\xc5\\x1e\\x91\\x91\\x05\\x4d\\xb1\\xb1\\x75\\xd2\\x1b\\xea\\xc2\\xab\\xe5\\xc6\\x1f\\xfc\\x21\\x6b\\x15\\x72\\x73\\x7d\\x84\\x73\\x1b\\x65\"\n\"\\x78\\xa3\\xbb\\xc9\\xaa\\xac\\xe3\\xab\\x1f\\xf7\\x1e\\xb0\\x15\\xf7\\x0a\\x9d\\xb3\\xbf\\xba\\x9b\\x6b\\x2e\\x1e\\x6a\\x07\\xfb\\xa7\\xf7\\x87\\x43\\x0a\\xa5\"\n\"\\x78\\x9d\\x6e\\x78\\x60\\x1d\\xf8\\x8c\\xf3\\x1d\\x5d\\x0a\\xf7\\x39\\xf8\\xb8\\xf9\\x2a\\x15\\xfc\\x8d\\x77\\x9e\\x06\\xbd\\x1d\\xf7\\xd8\\x06\\xf7\\x2e\\xdf\"\n\"\\xca\\xf7\\x09\\xf7\\x14\\x30\\xd1\\xfb\\x39\\x75\\x84\\x8b\\x88\\x5d\\x1f\\xf7\\x8f\\xf7\\x03\\x07\\xdc\\x8e\\xbb\\x4d\\x0a\\x06\\xfb\\xa6\\xfb\\x2b\\x15\\x8c\"\n\"\\x98\\x98\\x8c\\x95\\x1b\\xde\\xb9\\xb0\\x0a\\xf7\\x3f\\xa2\\x1d\\xf7\\xd8\\x06\\xf7\\x2b\\xe2\\xca\\xf7\\x04\\xbf\\x77\\xb3\\x63\\xaa\\x1f\\x6f\\xa1\\x6f\\x96\"\n\"\\x52\\x99\\x7a\\x1d\\xf7\\x20\\xf8\\xd1\\x7f\\x1d\\x0e\\xf7\\x54\\xf9\\x1d\\xf9\\x2a\\x15\\xfc\\xa4\\x77\\xba\\x06\\xb8\\x94\\x77\\x2a\\xfb\\x71\\x65\\xfb\\x2e\"\n\"\\x40\\x3a\\x1f\\x74\\x76\\x7a\\x83\\x6e\\x1b\\x6c\\x06\\x85\\xfb\\x43\\x05\\xa8\\x06\\x9b\\xf0\\xb6\\xb4\\xe0\\x86\\x08\\xf7\\xbe\\x06\\xea\\x89\\xbb\\x60\\x93\"\n\"\\x2f\\x08\\xa8\\xf7\\x43\\x65\\x06\\x5f\\x82\\x90\\xa8\\x8a\\x1f\\xf8\\x7f\\x07\\x89\\xc5\\x9b\\x9e\\xbf\\x8d\\x08\\x9e\\x06\\xfb\\x7b\\xfc\\xf0\\x15\\xfb\\xb5\"\n\"\\x06\\xe4\\xe8\\xb1\\xf7\\x2c\\x8d\\xf7\\xa1\\x08\\xd3\\xf7\\x34\\x07\\x0e\\xf7\\x3f\\xf7\\xad\\xf7\\xd3\\x15\\xa6\\x06\\xb6\\xa5\\x77\\x5a\\x9f\\x1f\\x94\\x75\"\n\"\\x8f\\x88\\x0a\\xbf\\x58\\x95\\x53\\x1d\\xab\\xf7\\x5f\\x05\\x72\\x06\\x74\\xfb\\x03\\x44\\x53\\xfb\\x09\\x8c\\x08\\x65\\x06\\x5e\\x7c\\x9d\\xc0\\x8d\\x1f\\x0e\"\n\"\\xf7\\x3f\\x73\\x1d\\x54\\xf9\\x83\\x15\\x65\\x3b\\x0a\\xb2\\x6c\\xaa\\x64\\x1f\\xf7\\x6f\\x16\\x65\\x3b\\x0a\\xb2\\x6c\\xaa\\x64\\x1f\\x0e\\xf8\\x81\\xf8\\x3c\"\n\"\\xf7\\xbb\\x15\\xfb\\x5b\\x21\\x1d\\x83\\x77\\xf7\\xba\\x9f\\x83\\x20\\x1d\\xf7\\x5b\\x07\\x3c\\x0a\\x99\\x72\\x91\\x7e\\x8b\\x1d\\x77\\x7d\\x84\\x7e\\x78\\xf2\"\n\"\\x1d\\x89\\xc3\\x9a\\x9d\\xc0\\x8d\\x08\\x93\\x9f\\xfb\\xba\\x77\\x93\\x06\\xc0\\x89\\x9a\\x79\\x8f\\x0a\\xa1\\x9f\\xfb\\x7f\\x77\\x06\\xd2\\xae\\x74\\x2a\\xd9\"\n\"\\x1f\\xcc\\x3a\\xfb\\x65\\xfb\\xf5\\x67\\x4e\\x85\\x85\\x69\\x8a\\x19\\x77\\xf7\\xbb\\x9f\\x73\\x07\\x6e\\x7b\\x93\\x9a\\x92\\x91\\x98\\x99\\xa4\\x1f\\xf7\\x1a\"\n\"\\xf7\\x7e\\x05\\x0e\\xab\\xcf\\xf9\\x38\\x15\\xfb\\x5c\\xa3\\x07\\x92\\xbf\\x93\\xa4\\x9c\\xa3\\x08\\xaa\\xa1\\xad\\x9c\\xb4\\x1b\\xcb\\xad\\x5e\\x38\\x4d\\x77\"\n\"\\x60\\x66\\x7c\\x1f\\x85\\x7d\\x76\\x89\\x68\\x1b\\x81\\x86\\x8b\\x8c\\x82\\x1f\\x63\\x07\\x8d\\x99\\x94\\x8b\\x97\\x1b\\xbb\\xa8\\x82\\x75\\xa0\\x1f\\xa4\\x73\"\n\"\\x97\\x65\\x59\\x1a\\x2b\\x5d\\x53\\x3c\\x3a\\x57\\xbd\\xe9\\x7b\\x1e\\x63\\x85\\x05\\xfb\\x0d\\x99\\xda\\x46\\xf7\\x13\\x1b\\xf7\\x2a\\xf1\\xd8\\xf7\\x05\\xec\"\n\"\\x55\\xc7\\x23\\x9f\\x1f\\xe1\\x9d\\xb8\\xc2\\xa4\\x1d\\x0e\\xf7\\xae\\x6f\\x1d\\x0e\\xf7\\xae\\xf7\\x9e\\x71\\x1d\\xfb\\x78\\xf7\\xad\\x15\\x6b\\x74\\x74\\x6a\"\n\"\\x54\\xc9\\x68\\xee\\xf1\\xca\\xad\\xc3\\xac\\x74\\xa2\\x6a\\x6e\\x74\\x78\\x72\\x86\\x8c\\x84\\x8e\\x7d\\x1f\\x8c\\x87\\x8c\\x88\\x88\\x1a\\x7b\\x6e\\x7d\\x6a\"\n\"\\x6b\\x6e\\x99\\x9b\\x8e\\x8b\\x8f\\x8c\\x8e\\x1e\\x90\\x9b\\x8c\\x8f\\x91\\x1a\\xa4\\x74\\x9e\\x6d\\x1e\\x0e\\xf7\\x79\\x53\\x0a\\x0e\\xf7\\x8d\\xf8\\x0b\\x16\"\n\"\\x8c\\x0a\\x9f\\xfc\\x94\\x6e\\x0a\\xcd\\xa6\\x1e\\xa1\\xc2\\x94\\xc8\\xf6\\x1a\\xf7\\xcd\\xf7\\x36\\xfc\\xa4\\x21\\x1d\\x78\\x06\\x0e\\xf8\\x54\\x72\\x1d\\xf7\"\n\"\\xae\\x55\\x0a\\xf7\\xae\\xf8\\x18\\x5c\\x0a\\xf7\\xae\\xf9\\x81\\xf9\\x2a\\x15\\xfd\\x64\\x44\\x0a\\xf8\\xa4\\xf7\\x96\\xfc\\xa4\\x07\\x25\\x0a\\x8c\\x0a\\x06\"\n\"\\x0e\\xf7\\x07\\x58\\x0a\\xf9\\x09\\xf7\\x46\\x15\\x2f\\x52\\x45\\x5e\\x34\\x1b\\xfb\\x07\\x4a\\xf2\\xf7\\x4c\\xe7\\x9a\\xcc\\xad\\xc1\\x1f\\xc0\\xac\\xbd\\xa8\"\n\"\\xc5\\x1b\\xc0\\xc0\\x74\\x65\\xb0\\x1f\\xa4\\x70\\x97\\x74\\x9a\\x57\\x08\\xa2\\xf7\\x6a\\x74\\x06\\x68\\x85\\x82\\x7f\\x77\\x1b\\x83\\x8b\\x8b\\x9b\\x64\\x1f\"\n\"\\xa3\\x4d\\x6e\\x92\\x59\\x1b\\xfb\\x50\\xfb\\x20\\xfb\\x2a\\xfb\\x5d\\xfb\\x55\\xf7\\x15\\xfb\\x1e\\xf7\\x49\\xf7\\x08\\xf0\\xc3\\xef\\xca\\x1f\\x0e\\xf7\\x3f\"\n\"\\xf8\\x2b\\xf9\\x06\\x15\\xb6\\x06\\xdc\\x8e\\xbb\\x4d\\x0a\\xf7\\x43\\xfc\\xc2\\xa5\\x1d\\xf7\\xe4\\x9f\\x6e\\x20\\x1d\\x0e\\xf7\\x82\\xf8\\x74\\xf9\\x2a\\x15\"\n\"\\x77\\xbd\\x07\\xa7\\x99\\x7f\\x75\\x81\\x88\\x7d\\x85\\x7f\\x1f\\xfb\\x1d\\xfb\\xc0\\xfb\\x24\\xf7\\xce\\x05\\x86\\x97\\x87\\x98\\x92\\x1a\\x9a\\x94\\x94\\x9a\"\n\"\\x1e\\xbd\\x9f\\xfb\\xbc\\x77\\x06\\xac\\x8c\\x9e\\x7d\\x9e\\x67\\xf7\\x7a\\xfc\\x6a\\x18\\x53\\x74\\x75\\x74\\x6f\\x1b\\x77\\x84\\x94\\xa7\\x8a\\x1f\\xb1\\x8a\"\n\"\\x75\\xa2\\x67\\x1b\\x64\\x70\\x70\\x64\\x56\\xb7\\x67\\xcc\\xb2\\xad\\x98\\xa4\\xa5\\x1f\\x9c\\x9c\\x96\\x9c\\xa3\\xbe\\xf7\\x70\\xf8\\x68\\x18\\xa4\\xc1\\x95\"\n\"\\x94\\xad\\x8c\\x08\\x96\\x9f\\x06\\x0e\\xf7\\xff\\xf7\\xfa\\x51\\x0a\\x6a\\x1d\\xf7\\xae\\xa4\\x16\\xf8\\xb7\\x06\\xea\\x89\\xbb\\x5f\\x93\\x30\\x08\\xa8\\xf7\"\n\"\\x43\\x70\\x06\\x56\\x8e\\x7d\\x9c\\x8d\\xc3\\x08\\xf8\\x55\\x07\\x89\\xc5\\x9a\\x9e\\x30\\x0a\\xfc\\xa1\\xfb\\x96\\x4b\\x1d\\xf7\\x82\\xf8\\x62\\xeb\\x15\\x8d\"\n\"\\x53\\x7b\\x7a\\x56\\x88\\x08\\x6b\\x77\\xf7\\xdd\\x9f\\x78\\x06\\x57\\x8e\\x7b\\x9c\\x8e\\xc3\\x08\\xf8\\x67\\x07\\x88\\xc5\\x9b\\x9e\\xbf\\x8d\\x08\\x9e\\x9f\"\n\"\\xfb\\xc8\\x77\\x96\\x06\\xef\\x1d\\x77\\x57\\x6c\\x84\\xa6\\x1d\\x96\\x9f\\xfb\\xc3\\x51\\x1d\\xbc\\x95\\xa6\\xd5\\x1e\\x0e\\xf8\\xee\\xa5\\x16\\xfa\\xaa\\x9f\"\n\"\\x78\\x20\\x1d\\xf8\\x67\\x07\\x89\\xc6\\x9a\\x9d\\x86\\x0a\\x88\\xc5\\x9b\\x9e\\x30\\x0a\\xfc\\xa1\\xfb\\x6f\\x4b\\x1d\\xf8\\xee\\xa5\\x16\\xf9\\xfc\\x06\\xe8\"\n\"\\x8d\\xc0\\x5b\\x91\\x30\\x3f\\x1d\\x56\\x8d\\x7c\\x9c\\x8d\\xc4\\x08\\xf8\\x55\\x07\\x89\\xc6\\x9a\\x9d\\x86\\x0a\\x88\\xc5\\x9b\\x9e\\x30\\x0a\\xfc\\xa1\\xfb\"\n\"\\x6f\\x4b\\x1d\\xf7\\xa1\\xf8\\x1b\\xf8\\xc7\\x15\\x89\\xc5\\x9b\\x9e\\xbf\\x8d\\xc8\\x1d\\xb1\\xfc\\xa6\\x06\\x25\\x0a\\xf7\\xd8\\x06\\xf7\\x2f\\xde\\xca\\xf7\"\n\"\\x09\\xf7\\x14\\x31\\xd1\\xfb\\x3a\\x75\\x84\\x8b\\x88\\x5d\\x1f\\x64\\x04\\x8c\\x98\\x98\\x8c\\x96\\x1b\\xde\\xb8\\xb0\\x0a\\xf8\\x7a\\xf7\\xb3\\xf8\\xc7\\x15\"\n\"\\x89\\xc5\\x9a\\x9e\\x2c\\x1d\\x77\\xf7\\xd8\\x06\\xf7\\x2e\\xdf\\xca\\xf7\\x09\\xf7\\x14\\x30\\xd1\\xfb\\x39\\x75\\x87\\x8b\\x88\\x5a\\x1f\\x64\\x04\\x8d\\x9b\"\n\"\\x94\\x8b\\x96\\x1b\\xde\\xb9\\x53\\x26\\x31\\x61\\x56\\x43\\x64\\x7f\\x99\\xb4\\x1f\\xf9\\x1d\\x42\\x81\\x1d\\xf7\\x39\\xf7\\xa8\\xf8\\xc7\\x15\\x89\\xc5\\x9a\"\n\"\\x9e\\x2c\\x1d\\x77\\xf7\\xd8\\x06\\xf7\\x2e\\xdf\\xca\\xf7\\x09\\xf7\\x14\\x30\\xd1\\xfb\\x39\\x75\\x87\\x8b\\x88\\x5a\\x1f\\x64\\x04\\x8d\\x9b\\x94\\x8b\\x96\"\n\"\\x1b\\xde\\xb9\\x53\\x26\\x31\\x61\\x56\\x43\\x64\\x7f\\x99\\xb4\\x1f\\x0e\\xf7\\x4a\\xbc\\xf9\\x38\\x15\\xfb\\x83\\xa1\\x07\\x94\\xbf\\x94\\xa5\\xa2\\xab\\x08\"\n\"\\xbf\\xaf\\xc6\\xa7\\xd1\\x1b\\xce\\xbb\\x72\\x59\\xad\\x1f\\xac\\x59\\x98\\x5a\\x8d\\x2b\\x08\\xfb\\x02\\x06\\x35\\x8c\\x6c\\xa8\\x86\\xe0\\x08\\x75\\xfb\\xa0\"\n\"\\xa1\\x06\\xe1\\x91\\xaa\\xa9\\xe0\\x1b\\xf7\\x02\\x06\\x8a\\x2a\\x81\\x5a\\x6f\\x5b\\x08\\x4e\\x68\\x54\\x6d\\x3f\\x1b\\x2d\\x4c\\xb4\\xf3\\x46\\x1f\\x68\\x74\"\n\"\\x05\\xfb\\x0f\\xdb\\xd8\\x5c\\xf7\\x0f\\x1b\\xf7\\x61\\xf7\\x25\\xf7\\x20\\xf7\\x59\\xf7\\x5e\\xfb\\x23\\xf7\\x29\\xfb\\x58\\x5b\\x67\\x83\\x78\\x60\\x1f\\x7c\"\n\"\\x69\\x83\\x88\\x7f\\x1b\\x72\\x7c\\x9a\\xaa\\x84\\x1f\\x0e\\xf9\\x0a\\xd2\\x16\\xf7\\xd0\\x9f\\x78\\x20\\x1d\\xf7\\x7e\\xe2\\x07\\xfb\\x62\\x8d\\xf7\\x18\\xfb\"\n\"\\x1a\\xf7\\x5d\\x1b\\xf7\\x5a\\xf7\\x1b\\xf7\\x1e\\xf7\\x5e\\xf2\\x6e\\xda\\x4d\\xcb\\x1f\\xcb\\x4c\\x3a\\xab\\x25\\x1b\\xfb\\x00\\x37\\x64\\x3b\\x49\\x1f\\x61\"\n\"\\x59\\x76\\x57\\x83\\x3d\\x08\\x32\\xf7\\x52\\x06\\x89\\xc5\\x9a\\x9e\\x2c\\x1d\\x06\\xf9\\x20\\xf8\\xfd\\x15\\xf6\\xc8\\xfb\\x00\\xfb\\x54\\xfb\\x58\\x4b\\xfb\"\n\"\\x09\\x20\\x5b\\x5e\\xa7\\xb9\\x70\\x1f\\x6c\\xc1\\x7d\\xd1\\xf4\\x1a\\xf7\\x10\\x9f\\xd8\\xba\\xc5\\x5f\\x1d\\xf8\\x45\\xf7\\xc0\\x15\\xfb\\x60\\x21\\x1d\\x73\"\n\"\\x77\\xf7\\xd5\\x9f\\x78\\x20\\x1d\\xf8\\x6a\\x07\\x89\\xc3\\x9a\\x9d\\xc0\\x8d\\x08\\x9e\\x9f\\xfb\\xe3\\x06\\xfb\\x28\\x34\\x47\\xfb\\x07\\x36\\xb4\\x59\\xeb\"\n\"\\x69\\x1f\\xfb\\x09\\xfb\\x60\\x67\\x4c\\x77\\x78\\x6a\\x87\\x19\\x77\\xf7\\x51\\x07\\xf7\\x3e\\xf7\\xc0\\x05\\xbc\\xb1\\x15\\x8a\\x78\\x76\\x8a\\x80\\x1b\\x5c\"\n\"\\x64\\x98\\xa2\\x77\\x1f\\x78\\xa1\\x80\\xb5\\xbc\\x1a\\xba\\x97\\xae\\xa1\\xa2\\x1e\\xa0\\xa0\\xa9\\x93\\xc0\\x1b\\x92\\xa3\\x8b\\x8a\\x9d\\x1f\\x0e\\xa3\\xf7\"\n\"\\x8b\\xf9\\x05\\x15\\xf7\\xb6\\xf7\\x47\\x6d\\x06\\x86\\x2d\\x59\\x58\\x39\\x8e\\x08\\xfb\\xfb\\x76\\x9e\\x06\\xc1\\x89\\x9b\\x78\\x89\\x50\\x08\\xfc\\x63\\x07\"\n\"\\x8c\\x52\\x7c\\x79\\x55\\x89\\x08\\x78\\x76\\xf7\\xe4\\xa0\\x6a\\x06\\x55\\x8d\\x7c\\x9c\\x8d\\xc5\\x08\\x0e\\xf7\\xc4\\xf8\\x16\\xf9\\x06\\x15\\xcb\\x06\\xdb\"\n\"\\x8e\\xbc\\x4d\\x0a\\xf7\\x43\\xfc\\xc6\\xfb\\x43\\xa8\\x06\\x90\\xe7\\xbb\\xc6\\x1d\\xf7\\x7b\\xf7\\xda\\x06\\xa4\\xbf\\x9e\\x90\\xb1\\x1b\\xb1\\xa0\\x82\\x75\"\n\"\\x9b\\x1f\\x9e\\x71\\x94\\x60\\x4d\\x1a\\x26\\x78\\x4c\\x6d\\x81\\x84\\x92\\x95\\x8f\\x8c\\x90\\x8d\\x90\\x1e\\x91\\x98\\x8c\\x8e\\x94\\x1a\\xa8\\x76\\xa0\\x6d\"\n\"\\x66\\x74\\x73\\x65\\x54\\xb6\\x6b\\xd4\\xf7\\x0f\\xdf\\xe6\\xf7\\x1b\\xf7\\x10\\x3f\\xd2\\xfb\\x1b\\x57\\x65\\x83\\x72\\x48\\x1e\\x0e\\xf7\\x20\\xf8\\xda\\x7f\"\n\"\\x1d\\xfb\\xce\\xf7\\x80\\x15\\xc2\\x06\\xf7\\x1f\\xe1\\x05\\xaa\\x9f\\x93\\x95\\xa1\\x1a\\xa5\\x78\\x9c\\x6f\\x78\\x7a\\x82\\x79\\x7b\\x1e\\x0e\\xf7\\x4a\\xf8\"\n\"\\xff\\xf9\\x38\\x15\\x74\\x06\\x6c\\x85\\x7c\\x7c\\x72\\x1b\\x82\\x7f\\x8e\\x91\\x7e\\x1f\\xa9\\x47\\x75\\x91\\x52\\x1b\\xfb\\x57\\xfb\\x24\\xfb\\x29\\xfb\\x5e\"\n\"\\xfb\\x5a\\xf7\\x25\\xfb\\x1f\\xf7\\x62\\xf7\\x13\\xdc\\xba\\xf7\\x0f\\xdf\\x1f\\x68\\xa2\\x05\\x23\\x42\\x48\\x62\\x29\\x1b\\x43\\x57\\xa4\\xbf\\x68\\x1f\\x6a\"\n\"\\xbd\\x7e\\xbf\\x89\\xf5\\x08\\xf7\\x0e\\x06\\xe0\\xaa\\x6d\\x35\\x90\\x1f\\xa2\\xf7\\xa0\\x74\\x06\\x87\\x36\\x6c\\x6e\\x35\\x8a\\x08\\xfb\\x0e\\x06\\x8e\\xe4\"\n\"\\x95\\xb8\\xa6\\xba\\x08\\xc7\\xad\\xbe\\xa8\\xd4\\x1b\\xcc\\xc2\\x73\\x5e\\xaf\\x1f\\xa7\\x69\\x98\\x6d\\x93\\x52\\x08\\xa2\\x06\\x0e\\xc7\\xf8\\x85\\xf9\\x33\"\n\"\\x15\\x74\\x06\\x6f\\x8a\\x81\\x7e\\x77\\x1b\\x84\\x84\\x8c\\x8e\\x85\\x1f\\xaa\\x39\\x6d\\x92\\x5a\\x1b\\xfb\\x11\\x31\\x3c\\xfb\\x01\\x53\\xa3\\x56\\xb3\\x6b\"\n\"\\x1f\\xac\\x71\\x8c\\x8a\\xf7\\x02\\x61\\xec\\x66\\x8b\\x8b\\xa1\\x7e\\x08\\xaa\\x79\\x9f\\x68\\x67\\x1a\\x4d\\x57\\x61\\x3e\\x49\\x4a\\xa6\\xb6\\x65\\x1e\\x65\"\n\"\\xb8\\x79\\xb2\\x8a\\xb9\\x08\\x71\\xfb\\x82\\xa5\\x06\\xa7\\x93\\x96\\x96\\xa2\\x1b\\x95\\x93\\x89\\x83\\xa0\\x1f\\x75\\xc3\\xb7\\x81\\xb7\\x1b\\xc8\\xca\\x9f\"\n\"\\xad\\xb8\\x1f\\xb6\\xac\\xa3\\xbf\\xc8\\x1a\\xc5\\x75\\xbf\\x63\\xaf\\x1e\\x64\\xad\\x8b\\x8b\\xfb\\x0f\\xb8\\x2f\\xae\\x8b\\x8b\\x75\\x97\\x08\\x6f\\x9b\\x79\"\n\"\\xaa\\xaa\\x1a\\xc3\\xbe\\xb2\\xd6\\xc5\\xc0\\x74\\x60\\xb3\\x1e\\xa7\\x6d\\x98\\x6f\\x94\\x5b\\x08\\xa2\\x06\\x0e\\x20\\x66\\x0a\\x20\\xf7\\xf6\\x9f\\x49\\x1d\"\n\"\\xfb\\x8c\\xf9\\xef\\x15\\xc7\\x1d\\xf7\\x47\\x16\\xc7\\x1d\\x0e\\x8f\\xf7\\x26\\xf9\\x16\\x15\\xac\\x06\\xc0\\x89\\x9a\\x78\\x89\\x50\\x08\\xfc\\x47\\x07\\x47\"\n\"\\x77\\x6d\\x5d\\x6e\\x74\\x98\\x9b\\x8f\\x8c\\x90\\x8d\\x8d\\x1e\\x9f\\xa6\\x8e\\x92\\x9f\\x1a\\xae\\x6b\\xaa\\x66\\x65\\x6c\\x67\\x5f\\x45\\xd8\\x53\\xed\\xd2\"\n\"\\xce\\xa9\\xba\\xaf\\x1e\\xa3\\xab\\x92\\xa8\\xd1\\x1a\\xf8\\x07\\x07\\x89\\xc6\\x9a\\x9e\\xc0\\x8d\\x08\\x9b\\x9f\\xfb\\xdf\\x06\\x0e\\xf8\\x8f\\xf7\\xda\\xf9\"\n\"\\x04\\x15\\xf7\\x29\\xfc\\xa4\\x06\\x25\\x0a\\xf7\\xd8\\x06\\xf7\\x26\\xdb\\xca\\xf7\\x09\\xf7\\x14\\x35\\xd1\\xfb\\x32\\x75\\x80\\x8b\\x88\\x61\\x1f\\xf7\\x50\"\n\"\\x07\\x89\\xc5\\x9a\\x9e\\xc0\\x8d\\x08\\x9e\\x9f\\xfc\\x87\\x6e\\x0a\\xcc\\xa6\\x1e\\xa1\\xc3\\x94\\xc8\\xf6\\x1a\\xf7\\xbb\\xa4\\x15\\x8c\\x99\\x98\\x8c\\x94\"\n\"\\x1b\\xd7\\xb4\\x54\\x25\\x30\\x66\\x57\\x49\\x66\\x7e\\x99\\xb4\\x1f\\x0e\\xf8\\x8e\\xf8\\x92\\xf7\\xd2\\x15\\xfb\\x72\\x07\\x25\\x0a\\xf7\\xd8\\x06\\xf7\\x26\"\n\"\\xda\\xca\\xf7\\x09\\xf7\\x15\\x35\\xd1\\xfb\\x32\\x76\\x86\\x8b\\x87\\x5b\\x1f\\xf7\\x50\\x07\\x89\\xc5\\x9a\\x9e\\x30\\x0a\\xfb\\x61\\xfb\\x89\\x69\\x0a\\xf7\"\n\"\\x72\\x07\\xf8\\x1b\\x9e\\x15\\x8c\\x99\\x97\\x8c\\x95\\x1b\\xd6\\xb5\\x53\\x26\\x2f\\x65\\x57\\x49\\x67\\x7e\\x99\\xb4\\x1f\\x0e\\xf7\\xc4\\xf7\\xf7\\xf9\\x06\"\n\"\\x15\\xcc\\x06\\xdc\\x8e\\xbb\\x59\\x91\\x2f\\x08\\xa8\\xf7\\x43\\xfc\\xc3\\x06\\x86\\xfb\\x43\\x05\\xa8\\x06\\x8f\\xe7\\xbc\\xc6\\x1d\\xf7\\xc8\\x9f\\x80\\x20\"\n\"\\x1d\\xf7\\x65\\x07\\xa5\\xb6\\xad\\x96\\xb6\\x1b\\xcc\\xa0\\x6e\\x30\\x1f\\xfb\\x12\\x21\\x1d\\x80\\x77\\xf7\\xc2\\x9f\\x7e\\x20\\x1d\\xf7\\x2a\\x07\\xef\\x52\"\n\"\\xba\\xfb\\x0e\\x4d\\x5d\\x81\\x6f\\x4a\\x1e\\x0e\\xf7\\x79\\x53\\x0a\\xc0\\xf9\\x07\\x15\\xc2\\x06\\xf7\\x1f\\xe1\\x05\\xac\\xa0\\x92\\x93\\xa2\\x1a\\xa5\\x78\"\n\"\\x9c\\x6f\\x77\\x7a\\x82\\x79\\x7b\\x1e\\x0e\\xf7\\x82\\xf8\\x80\\xf9\\x2a\\x15\\x77\\xbd\\x07\\xa7\\x99\\x7f\\x75\\x81\\x88\\x7d\\x85\\x7f\\x1f\\xfb\\x1d\\xfb\"\n\"\\xc0\\xfb\\x24\\xf7\\xce\\x05\\x86\\x97\\x87\\x98\\x92\\x1a\\x9a\\x94\\x94\\x9a\\x1e\\xbd\\x9f\\xfb\\xbc\\x77\\x06\\xac\\x8c\\x9e\\x7d\\x9e\\x67\\xf7\\x7a\\xfc\"\n\"\\x6a\\x18\\x53\\x74\\x75\\x74\\x6f\\x1b\\x77\\x84\\x94\\xa7\\x8a\\x1f\\xb1\\x8a\\x75\\xa2\\x67\\x1b\\x64\\x70\\x70\\x64\\x56\\xb7\\x67\\xcc\\xb2\\xad\\x98\\xa4\"\n\"\\xa5\\x1f\\x9c\\x9c\\x96\\x9c\\xa3\\xbe\\xf7\\x70\\xf8\\x68\\x18\\xa4\\xc1\\x95\\x94\\xad\\x8c\\x08\\x96\\x9f\\x06\\xfb\\x5f\\xf7\\x05\\x15\\x7b\\x6e\\x7d\\x6a\"\n\"\\x6b\\x6e\\x99\\x9b\\x1e\\x8c\\x95\\x05\\x8f\\x98\\x8c\\x92\\x91\\x1a\\xa4\\x74\\x9e\\x6d\\x6b\\x74\\x74\\x6a\\x54\\xc9\\x68\\xee\\xf2\\xc9\\xad\\xc3\\xac\\x74\"\n\"\\xa2\\x6b\\x6e\\x74\\x78\\x72\\x86\\x8c\\x84\\x8f\\x7d\\x1e\\x0e\\x8f\\xf8\\x5d\\xd6\\x15\\x77\\x7c\\x89\\x89\\x82\\x1b\\x7c\\x85\\x99\\xaf\\x1f\\xf7\\x7b\\x07\"\n\"\\xb4\\x80\\xab\\x77\\x9e\\x1e\\xa0\\x73\\x5e\\x99\\x5b\\x1b\\x25\\x33\\x53\\x4a\\x6a\\xaa\\x6e\\xaf\\xb0\\xaa\\xa4\\xa8\\x96\\x86\\x95\\x7e\\x97\\x1f\\x81\\x96\"\n\"\\x89\\x8f\\x93\\x1a\\x9e\\xa1\\x99\\xaa\\xb3\\x9a\\x76\\x54\\x1e\\x44\\x07\\x56\\x77\\x61\\x78\\x66\\x73\\x08\\x4f\\x66\\x70\\x64\\x59\\x1a\\x57\\xb6\\x62\\xc1\"\n\"\\xb1\\xb8\\xa4\\xb5\\xb2\\x1e\\x5f\\x95\\xa8\\x72\\xb7\\x1b\\xb6\\xb2\\xa4\\xb7\\xa3\\x1f\\xfb\\x51\\xb7\\x15\\x75\\x73\\x7f\\x84\\x7b\\x1b\\x76\\x7e\\x9e\\xa8\"\n\"\\xb9\\xab\\xb5\\xc1\\xa3\\x1f\\x0e\\x8f\\xf8\\x3d\\xf9\\x3b\\x15\\x7c\\x83\\x7e\\x87\\x66\\x1b\\x6b\\x06\\x5c\\x60\\x88\\x86\\x77\\x1f\\x57\\x7e\\x62\\x66\\x6f\"\n\"\\x52\\x08\\x6c\\x49\\x74\\xfb\\x06\\x2e\\x1a\\x32\\xa1\\x41\\xb6\\x57\\x1e\\x62\\xad\\xbf\\x71\\xbb\\x1b\\xbd\\xc5\\xa7\\xb4\\xaf\\x1f\\xb0\\xb5\\x9f\\xc8\\xcf\"\n\"\\x1a\\xf7\\x17\\x35\\xef\\xfb\\x05\\x42\\x55\\x65\\x3c\\x66\\x1e\\x99\\xf7\\x29\\xbd\\xc6\\xf7\\x04\\x8c\\x08\\xa8\\x06\\xe0\\x88\\xbd\\xb4\\x9f\\xe3\\x08\\xfb\"\n\"\\x5a\\xfb\\x95\\x15\\xa1\\xa0\\x79\\x71\\x94\\x1f\\x94\\x6f\\x8f\\x68\\x4b\\x1a\\xfb\\x39\\xa7\\x0a\\xb7\\xc4\\xf8\\x58\\x15\\x77\\x07\\xa8\\x9b\\x75\\x66\\x89\"\n\"\\x1f\\xfb\\xbb\\x07\\x8d\\x67\\x7b\\x76\\x6e\\x8a\\x08\\x77\\xf7\\x78\\x07\\xf7\\x03\\xcb\\xb7\\xd8\\xc4\\x69\\xaf\\x41\\xa0\\x1f\\xc2\\x9b\\xa9\\xae\\xbc\\x1a\"\n\"\\xb3\\x74\\xac\\x62\\xa1\\x1e\\x9b\\x6d\\x6c\\x91\\x59\\x1b\\x66\\xfb\\x82\\x15\\xaf\\x98\\x88\\x83\\x98\\x1f\\xa1\\x7d\\x97\\x6f\\x66\\x1a\\x52\\x73\\x6b\\x60\"\n\"\\x75\\x84\\x92\\xa3\\x1e\\xf7\\xf3\\x04\\xc5\\x89\\xa4\\x73\\x52\\x1a\\x56\\x71\\x6c\\x5f\\x89\\x85\\x8b\\x8c\\x86\\x1e\\x0e\\x61\\xf8\\x14\\xf8\\x58\\x15\\xfb\"\n\"\\xdb\\x76\\x06\\xa8\\x9b\\x75\\x67\\x89\\x1f\\xfb\\xba\\xb6\\x1d\\xf7\\xe4\\xb1\\x07\\xd3\\x8a\\xae\\x67\\x8e\\x40\\x08\\xa0\\x06\\x0e\\x95\\xf8\\x6a\\xb0\\x15\"\n\"\\x7d\\x06\\x6e\\x8c\\x7b\\xa0\\x8d\\xaf\\x08\\xf7\\xaa\\x07\\xb0\\x89\\x9b\\xa0\\xa7\\x1b\\xa0\\xfc\\x04\\x76\\x98\\x07\\xb1\\x96\\x7b\\x52\\xfb\\x2a\\x71\\x26\"\n\"\\x58\\x56\\x1f\\x7d\\x7d\\x80\\x87\\x79\\x1b\\x7c\\x06\\x87\\xfb\\x28\\x05\\x9f\\x06\\x8e\\xd8\\xb0\\xaf\\xd7\\x8a\\x08\\xf7\\x50\\x06\\xd7\\x8c\\xb0\\x68\\x8e\"\n\"\\x3d\\x08\\x9f\\x06\\xfb\\x4a\\xf7\\x29\\x15\\xfb\\x4d\\x06\\xc4\\xcb\\xa3\\xee\\x8d\\xf7\\x41\\x08\\xb5\\xf1\\x07\\x0e\\x57\\xf8\\x24\\xf7\\x7d\\x15\\x89\\xca\"\n\"\\x83\\xaf\\x74\\xb3\\x08\\xc3\\x6b\\x58\\xac\\x56\\x1b\\x56\\x56\\x6c\\x58\\x69\\x1f\\x6c\\x5e\\x7c\\x53\\x47\\x1a\\x3e\\x9f\\x53\\xb4\\x64\\x1e\\x6c\\xaa\\xb7\"\n\"\\x7a\\xb7\\x1b\\xd6\\xca\\xbb\\xdf\\xb0\\x1f\\x72\\x97\\x05\\x5a\\xdf\\x1d\\xb0\\x15\\xee\\x8c\\xa3\\xc1\\xb6\\x1b\\x9e\\x9c\\x7b\\x74\\x92\\x1f\\x92\\x72\\x8b\"\n\"\\x86\\x8d\\x37\\x08\\x0e\\x57\\xf8\\x24\\xf7\\x7c\\x15\\x89\\xc9\\x83\\xaf\\x74\\xb2\\x08\\xc2\\x6a\\x59\\xac\\x56\\x1b\\x56\\x56\\x6c\\x59\\x69\\x1f\\x6c\\x5e\"\n\"\\x7c\\x54\\x48\\x1a\\x3e\\x9f\\x54\\xb4\\x63\\x1e\\x6d\\xaa\\xb7\\x7a\\xb7\\x1b\\xd6\\xcb\\xbb\\xde\\xaf\\x1f\\x72\\x98\\x05\\x59\\xdf\\x1d\\xaf\\x15\\xee\\x8c\"\n\"\\xa3\\xc0\\xb6\\x1b\\x9e\\x9c\\x7b\\x74\\x92\\x1f\\x92\\x72\\x8b\\x86\\x8d\\x38\\x08\\xfb\\x21\\xf8\\x0f\\x15\\x6c\\x71\\x71\\x6c\\x6b\\xa5\\x71\\xab\\xaa\\xa5\"\n\"\\xa5\\xaa\\xab\\x72\\xa5\\x6a\\x1f\\xf7\\x44\\x16\\x6c\\x71\\x71\\x6c\\x6b\\xa5\\x71\\xab\\xaa\\xa5\\xa5\\xaa\\xab\\x72\\xa5\\x6a\\x1f\\x0e\\xf7\\x79\\xf7\\x9b\"\n\"\\x16\\xf7\\x5a\\x9f\\x06\\x72\\x90\\x7e\\x9f\\x8d\\xba\\x0a\\x9c\\x6e\\x8d\\x88\\x85\\x1a\\x82\\x82\\x86\\x7b\\x1e\\x83\\x77\\xf7\\x66\\x9f\\x06\\x73\\x8c\\x8a\"\n\"\\xbf\\x0a\\xc6\\xd2\\x9c\\x95\\xc0\\x8c\\x19\\x9f\\xfb\\x41\\x77\\xa0\\x07\\x9a\\x95\\x84\\x7f\\x82\\x86\\x82\\xba\\x1d\\xfb\\x5a\\x77\\x07\\xa4\\x87\\x98\\x76\"\n\"\\x8a\\x69\\x08\\xfb\\x15\\x07\\xfb\\x10\\xf7\\x1e\\x05\\x7f\\x98\\x86\\xce\\x1d\\x8a\\x9b\\x81\\xc6\\x44\\xb6\\x59\\x18\\xfb\\x25\\xfb\\x7e\\x70\\x5f\\x8a\\x8a\"\n\"\\x73\\x8a\\x19\\x77\\xf7\\x67\\x9f\\x83\\x07\\x7a\\x83\\x90\\x94\\x90\\x90\\x96\\x98\\xa1\\x1f\\xde\\xf7\\x1f\\x9a\\x79\\x05\\xfb\\x06\\x07\\x8c\\x69\\x7f\\x77\"\n\"\\x71\\x86\\x08\\x0e\\x2d\\xc3\\xf7\\xd4\\x15\\xa3\\x06\\xd0\\x91\\xa6\\xad\\xbc\\x1b\\xb3\\xa2\\x6c\\x56\\x4c\\x77\\x76\\x52\\x1f\\x96\\x0a\\x05\\x36\\x9f\\xbd\"\n\"\\x63\\xe0\\x1b\\xf7\\x03\\xd8\\xc0\\xd7\\xcb\\x63\\xb5\\x3f\\x9c\\x1f\\xca\\x9b\\xab\\xb1\\xc2\\x1a\\xcc\\x4d\\xb8\\x30\\x73\\x7b\\x88\\x82\\x6e\\x1e\\x87\\x7e\"\n\"\\x83\\x89\\x84\\x1b\\x7e\\x85\\x91\\x97\\x1f\\x7a\\x06\\x0e\\xdb\\x3f\\x0a\\x0e\\xdb\\x3f\\x0a\\x83\\xf7\\x66\\x15\\x8c\\x88\\x05\\x88\\x07\\x83\\x07\\x75\\x76\"\n\"\\x7d\\x69\\x69\\x76\\x99\\xa1\\x8e\\x8b\\x8d\\x8c\\x8e\\x1e\\x8c\\x9a\\x05\\xa1\\x79\\x9b\\x72\\x71\\x79\\x79\\x70\\x5c\\xc7\\x68\\xda\\xdc\\xc7\\xae\\xba\\xa6\"\n\"\\x79\\x9d\\x72\\x72\\x79\\x7b\\x75\\x1e\\x0e\\xdb\\x54\\x0a\\x0e\\xcc\\xf7\\xe5\\xf8\\x33\\x15\\xfb\\xe4\\x07\\x8d\\x67\\x7c\\x76\\x6e\\x89\\x08\\x77\\xf7\\x66\"\n\"\\xb2\\x0a\\xaf\\x89\\x9b\\xa1\\xa8\\x1b\\xa0\\xfb\\xf5\\x76\\x07\\xb8\\x89\\x91\\x7f\\x36\\x1a\\x43\\x07\\x36\\x88\\x54\\x84\\x6d\\x1e\\x6d\\x85\\x80\\x7a\\x7f\"\n\"\\x1b\\x85\\x88\\x8f\\x90\\x8d\\x8b\\x8b\\x8d\\x95\\x1f\\x8c\\x91\\x8b\\x8b\\x8f\\x1a\\xa8\\x75\\xa0\\x6c\\x6a\\x75\\x74\\x68\\x5d\\xa9\\x6d\\xb9\\xb2\\xa9\\x9e\"\n\"\\xae\\x9c\\x1e\\x9f\\xb4\\x91\\xbc\\xf7\\x10\\x1a\\xf7\\x31\\x07\\x0e\\xf7\\x4d\\xf8\\x4d\\xf8\\x58\\x15\\x29\\xfb\\x9a\\x23\\xf7\\x9a\\x05\\xfb\\x38\\x77\\x06\"\n\"\\xa7\\x8a\\x9b\\x76\\x89\\x66\\x29\\x0a\\x8d\\x67\\x7c\\x76\\x6e\\x89\\x08\\x77\\xf7\\x0c\\x9f\\x07\\x6f\\x8c\\x7b\\xa1\\x8d\\xaf\\x08\\xf7\\xa1\\x07\\xf7\\x1f\"\n\"\\xfb\\xf0\\x05\\x9d\\x06\\xf7\\x15\\xf7\\xec\\x05\\xfb\\x9d\\x07\\x66\\x8d\\x7a\\x75\\x6e\\x1b\\x77\\xf7\\x67\\x9f\\x07\\x6e\\x8d\\x7c\\xa0\\x8d\\xaf\\x08\\xf7\"\n\"\\xba\\x07\\x89\\xaf\\x9b\\xa1\\xa7\\x8c\\x08\\x9f\\x07\\x0e\\xdb\\xf7\\xed\\xf7\\x96\\x15\\xfb\\x06\\xf7\\x07\\x06\\x89\\xae\\x99\\x3e\\x1d\\x89\\x9a\\x76\\x89\"\n\"\\x67\\x29\\x0a\\x8d\\x66\\x7c\\x48\\x0a\\x8e\\x7d\\xa0\\x8d\\xae\\x08\\xf7\\x22\\xf7\\x06\\xfb\\x22\\x07\\x8d\\x68\\x7d\\x76\\x71\\x88\\x08\\x77\\xf7\\x61\\x9f\"\n\"\\x07\\x6f\\x8c\\x7b\\xa1\\x8d\\xaf\\x08\\xf7\\xba\\x07\\x89\\xaf\\x9a\\xa1\\xa8\\x8c\\x08\\x9f\\xfb\\x61\\x77\\x07\\xa5\\x88\\x99\\x76\\x89\\x68\\x08\\x0e\\x8f\"\n\"\\xf7\\x90\\xf8\\x61\\x15\\xfb\\x09\\x35\\x26\\xfb\\x1c\\x47\\xa3\\x4b\\xb5\\x61\\x1f\\x67\\xae\\xc0\\x73\\xb8\\x1b\\xc0\\xc4\\xa6\\xb5\\xb0\\x1f\\xb0\\xb5\\x9f\"\n\"\\xc8\\xcf\\x1a\\xf7\\x18\\x35\\xee\\xfb\\x06\\x1e\\x8a\\x64\\x15\\xa1\\xa0\\x79\\x71\\x94\\x1f\\x95\\x6f\\x8e\\x69\\x4c\\x1a\\xfb\\x3b\\xa7\\x0a\\xdb\\xf7\\x7c\"\n\"\\xf8\\x33\\x15\\xf7\\x04\\xfb\\xe4\\x06\\x8d\\x67\\x7b\\x75\\x6e\\x8a\\x08\\x77\\xf7\\x67\\xb2\\x0a\\xb0\\x89\\x9b\\xa0\\xa8\\x1b\\xa0\\xfc\\x54\\x76\\x07\\xa8\"\n\"\\x9b\\x75\\x67\\x89\\x1f\\xfb\\xba\\x07\\xad\\x0a\\xf7\\x67\\x9f\\x07\\x6e\\x8c\\x7b\\xa1\\x8d\\xaf\\x08\\x0e\\xc7\\xf7\\x86\\xb0\\x15\\x6b\\xa1\\xa5\\x7c\\xaf\"\n\"\\x1b\\xae\\xb0\\x9f\\xac\\xa6\\x1f\\xad\\xb7\\x9b\\xc3\\xda\\x1a\\xf7\\x20\\x4f\\xee\\x37\\x68\\x71\\x7c\\x68\\x6f\\x1e\\xb9\\x74\\x07\\xfb\\x28\\x65\\x05\\x76\"\n\"\\x95\\x07\\xa5\\x85\\x96\\x7a\\x8a\\x6a\\x08\\xfc\\x3e\\x07\\x68\\x8d\\x7a\\x76\\x6f\\x1b\\x83\\x77\\xf7\\x7f\\x9f\\x81\\x06\\x6a\\x89\\x79\\x9f\\x8d\\xb1\\x08\"\n\"\\xf8\\x20\\x04\\xac\\x8c\\x92\\x95\\x9b\\x1e\\x9a\\x95\\x99\\x94\\x99\\x1b\\xae\\x98\\x5e\\xfb\\x0f\\xfb\\x1c\\x81\\x60\\x6b\\x75\\x74\\xa0\\xa7\\x81\\x1f\\x0e\"\n\"\\x57\\xf8\\x12\\xf7\\x11\\x15\\x65\\x6d\\x6c\\x79\\x6a\\x1b\\x47\\x54\\xe8\\xf7\\x06\\xde\\xa8\\xc7\\xb4\\x9f\\x99\\x7c\\x75\\x8c\\x1f\\x8c\\x68\\x8c\\x83\\x95\"\n\"\\x78\\x08\\x71\\x98\\x9e\\x7e\\xa5\\x1b\\xac\\xa4\\xa4\\xad\\xcf\\x47\\xc0\\x34\\xfb\\x08\\x38\\x25\\xfb\\x24\\xfb\\x1b\\xd3\\x31\\xf7\\x01\\xcf\\xc8\\xb3\\xd9\"\n\"\\xba\\x1f\\x0e\\x86\\xf7\\x1d\\x16\\xf7\\x6d\\x9f\\x06\\x6b\\x7b\\x9f\\xb2\\x8d\\x1f\\xf7\\xe4\\x9c\\x07\\xd2\\xae\\x67\\x3f\\x8f\\x1f\\x9f\\x06\\x81\\xf7\\x29\"\n\"\\x05\\xfc\\x23\\x06\\x81\\xfb\\x29\\x05\\x9f\\x06\\xd6\\x8e\\xaf\\xb0\\xd2\\x1b\\x9c\\xfb\\xe4\\x06\\x8c\\x64\\x7c\\x78\\x6b\\x8a\\x08\\x0e\\x8f\\x6e\\x1d\\x0e\"\n\"\\xf7\\x58\\xf8\\x2c\\xf9\\x22\\x15\\xfb\\x3b\\x76\\x06\\xa7\\x9b\\x75\\x68\\x89\\x1f\\xfb\\x33\\x07\\xac\\x6c\\x75\\x96\\x67\\x1b\\x2e\\x49\\x28\\xfb\\x1e\\xfb\"\n\"\\x21\\xca\\x2e\\xe9\\xac\\xa7\\x96\\xa3\\xa9\\x1f\\x20\\x07\\x8d\\x68\\x7b\\x75\\x6f\\x8a\\x08\\x77\\xf7\\x67\\x9f\\x07\\x6d\\x7b\\xa1\\xaf\\x8d\\x1f\\xf6\\x07\"\n\"\\x73\\xaa\\xa6\\x80\\xac\\x1b\\xe9\\xca\\xe9\\xf7\\x20\\xf7\\x1e\\x49\\xee\\x2e\\x68\\x71\\x7e\\x6c\\x6f\\x1f\\x63\\x04\\x9b\\x9f\\x9b\\x92\\x9b\\x1b\\xb9\\xa0\"\n\"\\x58\\xfb\\x08\\xfb\\x15\\x74\\x53\\x56\\x7b\\x7e\\x90\\x97\\x7d\\x1f\\xfb\\x11\\x16\\x7f\\x7d\\x7e\\x86\\x7b\\x1b\\x56\\x74\\xc3\\xf7\\x14\\xf7\\x08\\xa0\\xbf\"\n\"\\xb9\\x9b\\x9c\\x83\\x7c\\x9e\\x1f\\x0e\\x8f\\xf7\\x68\\xf7\\x38\\x15\\xc6\\x2c\\x05\\x96\\x79\\x8e\\x84\\x85\\x1a\\x7d\\x7c\\x85\\x73\\x8d\\x1e\\x8a\\x77\\xf7\"\n\"\\x78\\x9f\\x82\\x06\\x78\\x8c\\x89\\x8c\\x6d\\xba\\xfb\\x10\\xf7\\x59\\x18\\xdd\\xf7\\x02\\xac\\xb8\\x99\\x95\\xb0\\x8c\\x19\\x9f\\xfb\\x25\\x77\\x07\\xa5\\x87\"\n\"\\x93\\x85\\x7c\\x1a\\x82\\x83\\x7a\\x80\\x7d\\x1e\\x55\\x43\\x55\\xe2\\x05\\x81\\x9c\\x88\\x90\\x93\\x1a\\x96\\x94\\x90\\xab\\x8f\\x1e\\x9f\\xfb\\x78\\x77\\x07\"\n\"\\xa7\\x88\\x90\\x86\\xb8\\x44\\xef\\xfb\\x34\\x18\\x39\\xfb\\x02\\x68\\x5b\\x79\\x7f\\x60\\x88\\x19\\x77\\xf7\\x36\\x9f\\x07\\x7e\\x8c\\x84\\x8b\\x89\\x8c\\x08\"\n\"\\x7d\\x8e\\x82\\x94\\x95\\x1a\\x94\\x91\\x98\\x97\\x9c\\x1e\\x0e\\xdb\\xf8\\xa2\\xb0\\x15\\x7f\\x06\\x6d\\x8a\\x7a\\xa0\\x8d\\xb1\\x08\\xf7\\xaa\\x41\\x1d\\xfb\"\n\"\\x62\\xc9\\x1d\\x89\\xad\\x98\\xa0\\xa5\\x8f\\x08\\x9f\\xfb\\x61\\x3d\\x1d\\x67\\x8d\\x7b\\x75\\x6e\\x1b\\x76\\xf7\\xd8\\x07\\xd7\\x8d\\xb2\\x67\\x8e\\x3d\\x08\"\n\"\\x9f\\x06\\x0e\\xcf\\xcd\\xf8\\x44\\x15\\xa4\\x87\\x99\\x76\\x89\\x69\\x08\\x40\\x07\\x3b\\xbb\\x65\\xf1\\xa6\\x9f\\x8e\\x95\\xa9\\x1e\\xfb\\x06\\x07\\x8d\\x67\"\n\"\\x7b\\x75\\x6f\\x8a\\x08\\x85\\x77\\xf7\\x6c\\x9f\\x06\\x87\\x0a\\x9b\\x75\\x89\\x67\\x08\\xfb\\x23\\x07\\x84\\x7e\\x7f\\x88\\x7c\\x1b\\x62\\x76\\xa0\\xb5\\x1f\"\n\"\\xe5\\xe2\\x1d\\x07\\x0e\\xf7\\xf0\\xf8\\xbb\\xf8\\x58\\x15\\x61\\x0a\\xf9\\x31\\xa0\\x07\\x6f\\x7b\\xa0\\xb0\\x8d\\x1f\\xf7\\xba\\x07\\x89\\xb0\\x9a\\x9f\\xa8\"\n\"\\x8d\\x08\\x9f\\x07\\x0e\\xf7\\xf0\\xf9\\x97\\xb0\\x15\\x7f\\x06\\x69\\x7e\\x9e\\xba\\x8d\\x1f\\xf7\\xa2\\x07\\x89\\xb0\\x9a\\x9f\\xa8\\x8d\\x08\\x9f\\xfb\\x61\"\n\"\\x61\\x0a\\xf8\\xb8\\x07\\xd6\\x8c\\xb1\\x67\\x8e\\x3e\\x08\\x9f\\x06\\x0e\\xe2\\xbd\\xf8\\x58\\x15\\x81\\xfb\\x29\\x05\\x9f\\x06\\xd5\\x8e\\xaf\\xb1\\xd1\\x1b\"\n\"\\xfb\\xe5\\xad\\x1d\\x7c\\x7f\\x8b\\x89\\x77\\x1f\\xf7\\x05\\x41\\x1d\\x07\\x5f\\xfb\\x76\\xb1\\x1d\\xf7\\xb1\\xe5\\xf8\\x58\\x15\\x77\\x07\\xa8\\x89\\x9a\\x77\"\n\"\\x89\\x66\\x08\\xfb\\xbb\\x07\\x8d\\x67\\x7c\\x77\\x6e\\x89\\x08\\x77\\xf7\\x77\\x07\\xf7\\x02\\xc7\\xb7\\xdb\\xe4\\x4a\\xbc\\xfb\\x0a\\x7b\\x86\\x8b\\x89\\x71\"\n\"\\xbc\\x1d\\x8f\\x8b\\x90\\xaa\\x0a\\xf8\\x48\\x48\\x15\\x9f\\x07\\x6d\\x8c\\x7b\\xa0\\x8d\\xb0\\x08\\xf7\\xba\\x41\\x1d\\xfb\\x67\\x77\\x07\\xa7\\x8a\\x9b\\x75\"\n\"\\x89\\x67\\x29\\x0a\\x8d\\x67\\x7b\\x75\\x6f\\x8a\\x08\\x77\\x07\\x0e\\xac\\xc2\\xf8\\x58\\x15\\x77\\x07\\xa8\\x89\\x9a\\x77\\x89\\x66\\x08\\xfb\\xbb\\x07\\x8d\"\n\"\\x67\\x7c\\x77\\x6e\\x89\\x08\\x77\\xf7\\x77\\x07\\xf7\\x02\\xc7\\xb7\\xdb\\xe4\\x4a\\xbc\\xfb\\x0a\\x7b\\x86\\x8b\\x89\\x71\\xbc\\x1d\\x8f\\x8b\\x90\\xaa\\x0a\"\n\"\\x0e\\x4b\\xf7\\x19\\xf7\\x70\\x15\\xf7\\x26\\x06\\x89\\x53\\x88\\x75\\x83\\x70\\x08\\x5f\\x7d\\x6a\\x73\\x5d\\x1b\\x51\\x64\\xac\\xcf\\x74\\x1f\\x6d\\x82\\x05\"\n\"\\x29\\xa6\\xc7\\x58\\xe3\\x1b\\xf7\\x0d\\xe4\\xef\\xf7\\x1b\\xf7\\x1a\\x34\\xf1\\xfb\\x07\\x71\\x77\\x86\\x7e\\x6e\\x1f\\x85\\x7e\\x84\\x89\\x82\\x1b\\x7d\\x81\"\n\"\\x93\\x97\\x89\\x1f\\x79\\x06\\x84\\xfb\\x2a\\x05\\xa3\\x06\\xda\\x9e\\xaf\\xb1\\xc1\\x1b\\xaf\\xa7\\x77\\x68\\x99\\x1f\\x96\\x6f\\x8e\\x78\\x8f\\x4c\\x08\\xfb\"\n\"\\x27\\x06\\x0e\\xf7\\xa0\\xf7\\x77\\xf7\\x97\\x15\\xf7\\x06\\x07\\x89\\xaf\\x9a\\xa1\\xa8\\x9c\\x1d\\x6e\\x8d\\x7c\\xa0\\x8d\\xaf\\x08\\xf7\\x21\\xc3\\x07\\x8c\"\n\"\\x5a\\x96\\x63\\xa0\\x66\\x08\\x4c\\xae\\xce\\x62\\xcc\\x1b\\xbf\\xc5\\xa6\\xb5\\xaf\\x1f\\xb0\\xb5\\x9f\\xc8\\xcf\\x1a\\xf7\\x19\\x36\\xed\\xfb\\x07\\x20\\x3e\"\n\"\\x3e\\xfb\\x11\\x7a\\x1e\\xf7\\x5c\\xf7\\x38\\x15\\xa2\\xa0\\x79\\x71\\x94\\x1f\\x94\\x6f\\x8f\\x69\\x4b\\x1a\\xfb\\x3b\\x78\\x52\\x55\\x62\\x79\\xbb\\xf5\\xf7\"\n\"\\x4b\\x9b\\xc4\\xbd\\x1e\\x0e\\xb8\\xf7\\xd5\\xf7\\x5c\\x15\\xfb\\x0d\\x07\\x8d\\x67\\x7c\\x76\\x6e\\x89\\x08\\x77\\xf7\\x65\\x9f\\x07\\x6e\\x8d\\x7c\\x9f\\x8d\"\n\"\\xb0\\x08\\xf7\\xba\\x07\\xaf\\x89\\x9b\\xa1\\xa7\\x1b\\xa0\\xfb\\x83\\x07\\xfb\\x00\\x4a\\x5b\\x3c\\x52\\xac\\x64\\xcb\\x78\\x1f\\x3c\\xfb\\x18\\x72\\x5e\\x7f\"\n\"\\x80\\x77\\x89\\x19\\x77\\xf7\\x26\\x07\\xf7\\x05\\xf7\\x5c\\x05\\xa4\\xf7\\x69\\x15\\xfb\\x46\\x07\\x8a\\x7f\\x85\\x8b\\x85\\x1b\\x47\\x6f\\xa6\\xcc\\xc9\\xa5\"\n\"\\xa4\\xcc\\x1f\\x0e\\x20\\xf7\\x58\\xf8\\x32\\x15\\xf7\\x36\\x06\\x95\\xf7\\x2b\\x05\\x76\\x06\\x88\\x3e\\x67\\x67\\x42\\x8a\\x08\\xfb\\x67\\x76\\x06\\xa9\\x9b\"\n\"\\x75\\x66\\x89\\x1f\\xfb\\xb7\\x5d\\x1d\\x76\\xf7\\x71\\xa0\\x87\\x07\\x6c\\x7b\\xa1\\xb0\\x8d\\x1f\\x0e\\xb4\\xf7\\x69\\xf9\\x22\\x15\\xfb\\x42\\x77\\x92\\x06\"\n\"\\xa8\\x88\\x9a\\x77\\x89\\x68\\x08\\x77\\x48\\x66\\xce\\xfc\\x4d\\x07\\xb7\\x1d\\xf7\\x9a\\x07\\xaf\\xa0\\xa6\\xa3\\x9f\\x1b\\xb4\\x9b\\x3d\\xfb\\x57\\xfb\\x50\"\n\"\\x7a\\x42\\x60\\x84\\x87\\x8f\\x92\\x1f\\x8c\\x95\\x05\\x8d\\x94\\x8c\\x92\\x8f\\x1a\\xa7\\x78\\x9f\\x71\\x6b\\x76\\x75\\x69\\x5f\\xae\\x6f\\xc2\\xf7\\x13\\xde\"\n\"\\xf7\\x24\\xf7\\x72\\xf7\\x3c\\x58\\xef\\x36\\x5e\\x6b\\x7a\\x59\\x5c\\x1e\\xf7\\x11\\xf7\\x21\\xb0\\xfb\\x21\\x07\\x0e\\x61\\xc5\\xf8\\x42\\x15\\x8c\\x06\\x8d\"\n\"\\x06\\x8c\\x06\\x8c\\x06\\xa6\\x8a\\x96\\x7f\\x8a\\x70\\x08\\xfb\\xdd\\x07\\x6f\\x80\\x80\\x71\\x8a\\x1e\\x86\\x76\\xf7\\x6c\\xa0\\x80\\x06\\x71\\x8c\\x80\\x96\"\n\"\\xa7\\x1a\\xf7\\xf2\\x8f\\x07\\x90\\x06\\x90\\x06\\x8f\\x06\\xdc\\xae\\x6c\\x39\\x95\\x1f\\xa2\\x06\\x83\\xf7\\x2d\\x05\\xfb\\xdb\\x06\\xf7\\x11\\xcb\\x15\\xf7\"\n\"\\x2e\\xed\\x05\\xa0\\x99\\x94\\x98\\x9c\\x1a\\x9f\\x7e\\x97\\x75\\x7c\\x83\\x86\\x78\\x78\\x1e\\xfb\\x27\\xfb\\x2a\\x05\\x0e\\x4b\\xf7\\xbf\\xf7\\x70\\x15\\xb0\"\n\"\\xfb\\x27\\x07\\xf7\\x09\\x90\\xa7\\xbb\\xca\\x1b\\xc1\\xae\\x65\\x3c\\x9f\\x1f\\xa3\\x06\\x84\\xf7\\x2a\\x05\\x79\\x06\\x7f\\x89\\x81\\x83\\x7c\\x1b\\x83\\x84\"\n\"\\x8d\\x91\\x7e\\x1f\\x98\\x6e\\x77\\x90\\x71\\x1b\\xfb\\x07\\x34\\x25\\xfb\\x1a\\xfb\\x1b\\xe4\\x27\\xf7\\x0c\\xe4\\xc6\\xbe\\xed\\xa7\\x1f\\x6d\\x94\\x05\\x46\"\n\"\\x73\\x65\\x6b\\x51\\x1b\\x5d\\x6a\\xa3\\xb7\\x7d\\x1f\\x82\\xa6\\x89\\xa2\\x89\\xc2\\x08\\x0e\\x20\\xf7\\xd7\\xf8\\x64\\x15\\x79\\x06\\x79\\x8a\\x81\\x7f\\x7d\"\n\"\\x1b\\x84\\x81\\x8e\\x93\\x75\\x1f\\x97\\x6c\\x80\\x8d\\x76\\x1b\\x3e\\x4e\\x52\\x44\\x52\\xac\\x5b\\xcf\\x64\\x1f\\xde\\x5b\\x8b\\x8b\\x9e\\x79\\x08\\x95\\x81\"\n\"\\x91\\x7d\\x7e\\x1a\\x6d\\x6b\\x71\\x67\\x53\\x51\\xbc\\xcd\\x78\\x1e\\x7b\\x06\\x93\\xfb\\x2a\\x05\\x99\\x06\\xa0\\x93\\x93\\x92\\x9b\\x1b\\x91\\x91\\x8a\\x88\"\n\"\\x91\\x1f\\x78\\xb8\\x9e\\x86\\xa8\\x1b\\xda\\xcc\\xc8\\xd5\\xc7\\x69\\xbb\\x44\\xb3\\x1f\\x30\\xbe\\x8b\\x8b\\x7e\\x97\\x08\\x83\\x94\\x85\\x98\\x98\\x1a\\xa7\"\n\"\\xa6\\xa1\\xae\\xbd\\xbb\\x62\\x47\\xa7\\x1e\\x98\\x06\\x0e\\xfb\\x6e\\xf7\\x62\\xf8\\x58\\x15\\xfb\\x43\\x76\\x91\\x5b\\x1d\\xfb\\xba\\x5d\\x1d\\x85\\x77\\xf7\"\n\"\\x76\\x9f\\x84\\x06\\x6d\\x7b\\xa1\\xb0\\x8d\\x1f\\x45\\xf8\\xd9\\x15\\x65\\x6c\\x6d\\x65\\x65\\xa9\\x6c\\xb1\\xb1\\xa9\\xaa\\xb1\\xb0\\x6c\\xaa\\x67\\x1f\\x0e\"\n\"\\xfb\\x6e\\xf7\\x63\\xf8\\x58\\x15\\xfb\\x43\\x76\\x91\\x5b\\x1d\\xfb\\xba\\x5d\\x1d\\x85\\x77\\xf7\\x76\\x9f\\x84\\x06\\x6d\\x7b\\xa1\\xb0\\x8d\\x1f\\xfb\\x31\"\n\"\\xf8\\xd8\\x15\\x6b\\x6e\\x6d\\x6a\\x67\\xa7\\x6e\\xac\\xaf\\xa6\\xa7\\xae\\xaf\\x6f\\xa8\\x68\\x1f\\xf7\\x45\\x16\\x6b\\x6f\\x6d\\x6a\\x67\\xa6\\x6e\\xad\\xae\"\n\"\\xa7\\xa7\\xae\\xaf\\x6e\\xa8\\x68\\x1f\\x0e\\xfb\\x37\\xf7\\x8f\\xf8\\x58\\x15\\xfb\\x47\\x76\\x95\\x5b\\x1d\\xfb\\xe8\\x07\\x6e\\x07\\x8d\\x6d\\x05\\x8e\\x53\"\n\"\\x8b\\x88\\x83\\x1a\\x70\\x84\\x7b\\x80\\x84\\x87\\x93\\x97\\x8f\\x8b\\x8e\\x8c\\x8e\\x1e\\x8c\\x9c\\x05\\xaa\\x74\\xa3\\x6f\\x6e\\x72\\x70\\x6a\\x5d\\xb7\\x6d\"\n\"\\xd0\\xe1\\xc0\\xbf\\xe2\\x1e\\x40\\xf9\\x47\\x15\\x63\\x6b\\x6c\\x64\\x63\\xaa\\x6b\\xb3\\xb1\\xab\\xab\\xb2\\xb2\\x6c\\xab\\x65\\x1f\\x0e\\xf7\\xb0\\xf7\\xbf\"\n\"\\x16\\xf7\\x77\\x06\\xf7\\x02\\xc7\\xb7\\xdc\\xe3\\x4a\\xbc\\xfb\\x0b\\x7b\\x87\\x8b\\x89\\x71\\x1f\\xf7\\x05\\x07\\xb0\\x89\\x9b\\xa0\\xa8\\x1b\\xa0\\xfb\\xf5\"\n\"\\x76\\x07\\xb8\\x89\\x91\\x7f\\x36\\x1a\\x43\\x07\\x37\\x88\\x53\\x84\\x6d\\x1e\\x6e\\x85\\x80\\x79\\x7f\\x1b\\x85\\x88\\x8f\\x90\\x8d\\x8b\\x8b\\x8d\\x95\\x1f\"\n\"\\x8c\\x91\\x8b\\x8b\\x8f\\x1a\\xa8\\x75\\xa0\\x6c\\x6a\\x75\\x74\\x68\\x5d\\xa9\\x6d\\xb9\\xb2\\xa9\\x9e\\xae\\x9c\\x1e\\x9f\\xb3\\x91\\xbd\\xf7\\x10\\x1a\\xf7\"\n\"\\x31\\xee\\xfb\\xe5\\x07\\x8d\\x67\\x7c\\x77\\x6e\\x89\\x08\\xf7\\x3b\\xf7\\x62\\xb1\\x1d\\xf7\\xc1\\xf7\\xf3\\xf7\\x71\\x15\\xfb\\x23\\xad\\x1d\\x7d\\x84\\x8b\"\n\"\\x89\\x71\\x1f\\xf7\\x05\\xa8\\x0a\\x89\\x9b\\x76\\x89\\x67\\x08\\xfb\\x07\\xfb\\x06\\xf7\\x07\\x07\\x89\\xae\\x99\\x3e\\x1d\\x89\\x9a\\x76\\x89\\x67\\x08\\xfb\"\n\"\\xbb\\x07\\x8d\\x67\\x7c\\x48\\x0a\\x8e\\x7d\\xa0\\x8d\\xad\\x08\\xf7\\x23\\x07\\xf7\\x83\\x90\\x15\\x9c\\x06\\xbc\\xa4\\x6a\\x48\\x50\\x75\\x6b\\x63\\x75\\x84\"\n\"\\x93\\xa3\\x1f\\x0e\\xc7\\xad\\xf8\\x9b\\x15\\xce\\xfc\\x4d\\x06\\xb7\\x1d\\xf7\\x92\\x07\\xbc\\xa5\\x9d\\x9c\\xa6\\x1b\\xa1\\x96\\x76\\x5e\\x1f\\xfb\\x92\\x07\"\n\"\\x8c\\x6a\\x80\\x78\\x71\\x85\\x08\\x77\\xf7\\x5f\\x9f\\x07\\x6e\\x8d\\x7c\\x9f\\x8d\\xaf\\x08\\xf7\\x80\\x07\\xe9\\x63\\xc0\\x43\\x62\\x67\\x74\\x5a\\x63\\x1e\"\n\"\\xf7\\x16\\xf7\\x3e\\xb0\\xfb\\x3e\\xed\\xfb\\x42\\x77\\x92\\x07\\xa8\\x88\\x9a\\x77\\x89\\x68\\x08\\x77\\x48\\x07\\x0e\\xdb\\x54\\x0a\\x89\\xc7\\x15\\xf7\\x2e\"\n\"\\xed\\x05\\xa0\\x98\\x94\\x98\\x9b\\x1a\\x9f\\x7e\\x97\\x76\\x7b\\x82\\x86\\x79\\x79\\x1e\\xfb\\x27\\xfb\\x29\\x05\\x0e\\x8f\\x6e\\x1d\\x7c\\xf7\\x94\\x15\\x8c\"\n\"\\x83\\x8b\\x8a\\x89\\x1a\\x75\\x76\\x7d\\x6a\\x69\\x76\\x99\\xa1\\x1e\\x93\\x07\\x8c\\x92\\x8b\\x8e\\x90\\x1a\\xa0\\x79\\x9c\\x72\\x72\\x79\\x79\\x70\\x5c\\xc7\"\n\"\\x68\\xd9\\xdc\\xc7\\xae\\xba\\xa6\\x79\\x9d\\x72\\x72\\x79\\x7b\\x73\\x1e\\x0e\\xf7\\xae\\xf9\\x82\\x16\\x9f\\x79\\x07\\x56\\x8e\\x7c\\x9d\\x8d\\xc5\\x08\\xf8\"\n\"\\x67\\x07\\x89\\xc3\\x9a\\x9d\\xc0\\x8d\\x08\\x9d\\x9f\\xfb\\xcf\\x66\\x1d\\x79\\x89\\x53\\x08\\xfc\\xa4\\xfb\\x96\\xf8\\xa4\\x07\\x89\\xc3\\x9a\\x9d\\x89\\x0a\"\n\"\\x79\\x89\\x53\\x08\\xfc\\x67\\x07\\x8d\\x51\\x7c\\x79\\x56\\x88\\x08\\x78\\x77\\xf7\\x7b\\x06\\xcc\\x8e\\xb4\\x58\\x93\\x2c\\x08\\x9a\\x06\\x99\\x06\\x93\\xea\"\n\"\\xb4\\xbf\\xcc\\x87\\x08\\x0e\\xdb\\xcb\\xf8\\x58\\x15\\x3d\\x1d\\x67\\x8d\\x7b\\x75\\x6e\\x1b\\x76\\xea\\x07\\xd8\\x8d\\xb2\\x67\\x8e\\x3d\\x08\\x9f\\x06\\x8e\"\n\"\\xd9\\xb2\\xaf\\xd8\\x89\\x08\\xea\\xa0\\x06\\x6e\\x7b\\xa0\\xb0\\x8d\\x1f\\xb9\\x0a\\xfb\\x61\\xc9\\x1d\\x8a\\xad\\x97\\x9f\\xa5\\x90\\x08\\x9f\\x07\\x0e\\x4d\"\n\"\\xad\\xf7\\x6e\\x15\\x8c\\x4d\\x94\\x66\\xa2\\x63\\x08\\x53\\xab\\xbd\\x6a\\xc1\\x1b\\xbf\\xc0\\xaa\\xbe\\xae\\x1f\\xa9\\xb8\\x9a\\xc2\\xd0\\x1a\\xd8\\x77\\xc3\"\n\"\\x62\\xb2\\x1e\\xaa\\x6c\\x60\\x9c\\x5e\\x1b\\x40\\x4b\\x5b\\x37\\x68\\x1f\\xa3\\x7f\\x05\\xbc\\xa3\\xa6\\x9f\\xb5\\x1b\\xcd\\xb7\\x4b\\x23\\x8e\\x1f\\x8d\\x66\"\n\"\\x15\\x28\\x8a\\x74\\x55\\x60\\x1b\\x77\\x7a\\x9b\\xa3\\x85\\x1f\\x84\\xa3\\x8a\\x92\\x8a\\xdd\\x08\\x0e\\xf7\\xe5\\xf9\\x39\\xf9\\x47\\x15\\x48\\x06\\xfc\\x73\"\n\"\\xfd\\x63\\x05\\xcd\\x06\\xec\\xf8\\x5b\\x15\\x6d\\x6e\\x79\\x81\\x72\\x1b\\x4e\\x5f\\xd4\\xf0\\xcb\\x9e\\xb4\\xa9\\x9d\\x94\\x7e\\x6e\\x8f\\x1f\\x5d\\x90\\x9a\"\n\"\\x78\\xac\\x1b\\xa6\\x9d\\x9d\\xa6\\xbc\\x59\\xb1\\x4c\\x2a\\x48\\x3e\\xfb\\x01\\x24\\xca\\x42\\xe2\\xc6\\xb8\\xa9\\xc7\\xad\\x1f\\xf7\\xf1\\x48\\x15\\x2c\\x49\"\n\"\\x40\\xfb\\x00\\x21\\xcd\\x42\\xea\\xec\\xcb\\xd3\\xf7\\x00\\xf6\\x49\\xd6\\x2c\\x1f\\x71\\x04\\xb4\\x98\\x67\\xfb\\x01\\xfb\\x15\\x7f\\x66\\x61\\x66\\x7b\\xaf\"\n\"\\xe0\\xf7\\x2f\\x95\\xae\\xb6\\x1f\\x0e\\xfb\\x0d\\xf7\\x52\\xf7\\x94\\x15\\x8e\\x8e\\x93\\x93\\x99\\x9a\\xc6\\xc9\\x90\\x91\\x9b\\xa1\\x08\\xb9\\xcd\\xa7\\xd4\"\n\"\\xc1\\x1a\\xc6\\x69\\xb3\\x57\\x2b\\x47\\xfb\\x17\\xfb\\xae\\x59\\x1e\\x7c\\x77\\x85\\x83\\x83\\x82\\x08\\x65\\x60\\x8b\\x8b\\x7c\\x1a\\x7c\\x95\\x7a\\x93\\x92\"\n\"\\x9b\\x99\\xa1\\x9e\\x1e\\x8a\\x81\\x8b\\x81\\x87\\x1a\\x65\\x8e\\x68\\x90\\x7b\\x1e\\x5e\\x97\\xa9\\x72\\xb3\\x1b\\xaa\\xa8\\x9c\\xab\\xa2\\x1f\\x9c\\xa3\\x96\"\n\"\\xa6\\xa0\\x1a\\x9a\\x83\\x94\\x7f\\x80\\x85\\x86\\x7a\\x83\\x1e\\x68\\x79\\x84\\x82\\x80\\x1b\\x83\\x86\\x94\\x9b\\xa5\\x93\\xcc\\x99\\xdf\\x1f\\x95\\xd7\\x15\"\n\"\\xf7\\x45\\xa6\\xa5\\xdb\\xac\\x1b\\x98\\x93\\x7e\\x77\\x54\\x59\\x21\\x52\\x4c\\x1f\\x0e\\xf8\\x91\\xf9\\x00\\x7e\\x15\\xf8\\xa4\\x07\\xb0\\x8d\\x9b\\x92\\x9b\"\n\"\\x1e\\x9c\\x92\\x96\\x97\\x95\\x1b\\x91\\x8e\\x88\\x86\\x1f\\x87\\x07\\x89\\x84\\x8b\\x89\\x85\\x1a\\x6d\\xa0\\x76\\xa9\\xab\\xa1\\xa4\\xae\\xb8\\x6a\\xaa\\x5c\"\n\"\\x65\\x6f\\x79\\x68\\x78\\x1e\\x7d\\x70\\x86\\x6d\\x4e\\x1a\\xfb\\xa5\\x07\\xfb\\xcc\\xf8\\x47\\x05\\xfb\\x56\\x71\\x06\\xb2\\x89\\xa1\\x7b\\xa6\\x60\\x08\\xfc\"\n\"\\x3b\\x07\\x46\\x80\\x6c\\x71\\x86\\x87\\x8f\\x90\\x8c\\x8b\\x8d\\x8c\\x8d\\x1e\\x8d\\x92\\x8c\\x8e\\x92\\x1a\\xa7\\x75\\xa0\\x6c\\x6b\\x75\\x71\\x65\\x5a\\xac\"\n\"\\x6b\\xbb\\xb0\\xa8\\x9d\\xae\\x9d\\x1e\\x99\\xa6\\x90\\xa9\\xc7\\x1a\\xf8\\x05\\x07\\xf8\\x18\\xfc\\xaf\\x05\\xf7\\x79\\xf8\\x6f\\x15\\x30\\x49\\x4a\\x30\\x31\"\n\"\\xcc\\x49\\xe5\\xe8\\xcc\\xcb\\xe7\\xe6\\x4a\\xcc\\x30\\x1f\\x8a\\x69\\x15\\xb6\\xa4\\x5e\\x3e\\x3c\\x73\\x60\\x5f\\x60\\x73\\xb7\\xda\\xd7\\xa4\\xb8\\xb5\\x1f\"\n\"\\xfb\\x16\\xfc\\x40\\x15\\xf7\\x9a\\xd0\\xfb\\x9a\\x06\\x0e\\xc9\\xf8\\xb3\\xf8\\x57\\x70\\x1d\\xc9\\xf7\\xbd\\xf8\\xa5\\x15\\x8d\\x93\\x91\\xa7\\x05\\x9a\\xce\"\n\"\\x8c\\x90\\x9b\\x1a\\xa5\\x79\\x9e\\x72\\x73\\x79\\x77\\x71\\x80\\x8d\\x7d\\x8f\\x78\\x1e\\x96\\x60\\x8d\\x80\\x8d\\x81\\x8b\\x89\\x8e\\x7e\\x19\\xf7\\xaf\\x3d\"\n\"\\x70\\x1d\\x8f\\x23\\x1d\\xf7\\x0e\\xf8\\x1c\\x22\\x0a\\xfb\\x37\\xc5\\xf7\\x82\\x15\\xf7\\x42\\xfb\\xe8\\x05\\x7c\\x93\\x95\\x83\\x97\\x1b\\x93\\x90\\x8f\\x92\"\n\"\\x92\\x89\\x93\\x88\\x93\\x1f\\xfb\\x17\\xf7\\xdd\\xf7\\x17\\xf7\\xdd\\x05\\x8e\\x93\\x8d\\x93\\x92\\x1a\\x93\\x86\\x8f\\x83\\x7f\\x83\\x85\\x79\\x81\\x1e\\x0e\"\n\"\\xfb\\x37\\xf7\\xa7\\xf7\\x82\\x15\\xfb\\x42\\xf7\\xe8\\x05\\x9c\\x82\\x82\\x92\\x7f\\x1b\\x83\\x86\\x87\\x83\\x85\\x8d\\x83\\x8e\\x82\\x1f\\xf7\\x17\\xfb\\xdd\"\n\"\\xfb\\x17\\xfb\\xdd\\x05\\x88\\x84\\x89\\x83\\x84\\x1a\\x83\\x90\\x87\\x93\\x97\\x93\\x91\\x9c\\x95\\x1e\\x0e\\x8f\\x76\\x1d\\x91\\x70\\x90\\x7f\\x97\\x7f\\x08\"\n\"\\x67\\x5b\\x81\\x76\\x6f\\x1a\\x5c\\xb8\\x69\\xc8\\xa0\\x0a\\x80\\x88\\x7d\\x1b\\x67\\x6e\\x9f\\xa3\\x9e\\x9a\\x9d\\x9f\\x92\\x1f\\xc5\\x9d\\x90\\x8d\\xaf\\xb2\"\n\"\\x08\\xfb\\x57\\xc4\\x15\\x6c\\x70\\x77\\x7f\\x73\\x1b\\x6d\\x76\\xa6\\xb3\\xc5\\xb5\\xb5\\xdb\\xa0\\x1f\\x0e\\xf8\\x8c\\xf9\\x38\\xf7\\x6b\\x15\\x6b\\x72\\x78\"\n\"\\x7e\\x73\\x1b\\x78\\x7d\\x90\\xa5\\x50\\x1f\\xa7\\x4d\\x6d\\x94\\x6c\\x1b\\x55\\x67\\x73\\x4f\\x69\\x8b\\x0a\\xad\\xa2\\xc8\\xb6\\x1f\\x54\\xf7\\x80\\x15\\x6a\"\n\"\\x72\\x78\\x7e\\x73\\x1b\\x78\\x7e\\x8f\\xa6\\x4f\\x1f\\xa7\\x4d\\x6d\\x94\\x6c\\x1b\\x55\\x67\\x72\\x50\\x69\\x1f\\xc0\\x5d\\x05\\xab\\xa2\\x9c\\x95\\xa8\\x1b\"\n\"\\xaf\\xa8\\x82\\x71\\xba\\x1f\\x72\\xb9\\xa5\\x83\\xac\\x1b\\xb9\\xab\\xa1\\xca\\xb8\\x1f\\x0e\\x8f\\xf8\\x6d\\xcb\\x15\\x81\\x81\\x05\\x88\\x88\\x88\\x8a\\x86\"\n\"\\x1b\\x7d\\x84\\x93\\x9c\\x1f\\xf7\\x99\\x07\\xdf\\x3f\\xc0\\xfb\\x0c\\xfb\\x07\\x3f\\x59\\x3f\\x61\\xa3\\x73\\xb4\\xb3\\xa7\\xa3\\xad\\x99\\x86\\x98\\x7e\\x9b\"\n\"\\x1e\\x82\\x95\\x88\\x91\\x91\\x1a\\xa0\\xa6\\x9b\\xaf\\xc6\\xa4\\x70\\x4e\\x1e\\x42\\x07\\xfb\\x0c\\x67\\x5b\\x77\\x66\\x72\\x08\\x5f\\x6d\\x77\\x69\\x60\\x1a\"\n\"\\x4e\\xb9\\x5e\\xcc\\xc4\\xb9\\x9f\\xbd\\xc2\\x1e\\x58\\x96\\xa1\\x78\\xbc\\x1b\\xb6\\xaa\\x9b\\xb4\\xb1\\x1f\\xfb\\x57\\xc4\\x15\\x6c\\x70\\x77\\x7f\\x73\\x1b\"\n\"\\x6d\\x76\\xa6\\xb3\\xc5\\xb5\\xb5\\xdb\\xa0\\x1f\\x56\\xf8\\x8d\\x15\\x51\\x5a\\x5b\\x52\\x4e\\xba\\x5c\\xc6\\xc7\\xba\\xba\\xc6\\xc6\\x5b\\xbb\\x44\\x1d\\x70\"\n\"\\x6a\\x6c\\x70\\x71\\x6a\\x6c\\x4c\\x0a\\x35\\xcd\\x22\\x1d\\xab\\x9f\\x93\\x95\\xa2\\x1a\\xa5\\x78\\x9d\\x6e\\x78\\x60\\x1d\\xf9\\x03\\xf8\\x37\\x15\\xfc\\xa0\"\n\"\\x06\\xf7\\x66\\xdc\\x74\\xc0\\xfb\\xb2\\xfb\\x14\\x05\\x3e\\x07\\xf7\\xb2\\xfb\\x13\\xa2\\xbf\\xfb\\x66\\xdd\\x05\\xf8\\xa0\\x06\\xfb\\x66\\x39\\xa2\\x57\\xf7\"\n\"\\xb2\\xf7\\x13\\x05\\xd8\\x07\\xfb\\xb2\\xf7\\x14\\x74\\x56\\x05\\x0e\\xf8\\x1b\\xf9\\x66\\x15\\x4b\\xfd\\x03\\x06\\x39\\xf7\\x66\\x57\\x74\\xf7\\x13\\xfb\\xb2\"\n\"\\x05\\xd8\\x06\\xf7\\x14\\xf7\\xb2\\x56\\xa2\\x3a\\xfb\\x66\\x05\\x0e\\xf9\\x66\\xf7\\xf9\\x15\\xcb\\xfd\\x03\\x07\\xf7\\x66\\xdc\\x74\\xc0\\xfb\\xb2\\xfb\\x13\"\n\"\\x05\\x3e\\x07\\xf7\\xb2\\xfb\\x14\\xa2\\xbf\\xfb\\x66\\xdd\\x05\\x0e\\xf7\\xf9\\x04\\xf9\\x03\\x06\\xfb\\x66\\x39\\xa2\\x57\\xf7\\xb2\\xf7\\x14\\x05\\xd8\\x07\"\n\"\\xfb\\xb2\\xf7\\x13\\x74\\x56\\xf7\\x66\\x3a\\x05\\xfd\\x03\\x06\\x0e\\xf8\\x1b\\x16\\xf9\\x03\\x07\\xdc\\xfb\\x66\\xc0\\xa3\\xfb\\x14\\xf7\\xb1\\x05\\x3e\\x06\"\n\"\\xfb\\x13\\xfb\\xb1\\xbf\\x73\\xdd\\xf7\\x66\\x05\\xfd\\x03\\x07\\x0e\\xf7\\xde\\xf9\\x03\\x7a\\x0a\\xa2\\xb4\\x0a\\x74\\x05\\x0e\\xf7\\x5b\\x2c\\x15\\x51\\xf7\"\n\"\\xdb\\xc5\\x07\\xfb\\x58\\xf9\\x42\\x7a\\x0a\\xa3\\xb4\\x0a\\x73\\x05\\x0e\\xaa\\xf7\\x5f\\xb1\\x15\\x69\\xa8\\xa5\\x7d\\xad\\x1b\\xf4\\xe4\\xf6\\xf7\\x13\\xd0\"\n\"\\x72\\xca\\x60\\xaf\\x1f\\x80\\x94\\x7e\\x93\\x6f\\x98\\x08\\xc4\\xae\\xa6\\xb5\\xc2\\x1a\\xd2\\x4e\\xba\\x2f\\x3e\\x45\\x69\\x52\\x65\\x1e\\x71\\x65\\x81\\x61\"\n\"\\x49\\x1a\\xfc\\xfa\\xf7\\x13\\x07\\xf9\\x08\\x04\\xf7\\x13\\xa0\\xc4\\xba\\xac\\xa3\\x65\\x55\\x66\\x87\\x68\\x82\\x6b\\x1e\\x94\\x77\\x82\\x8e\\x7d\\x1b\\x6e\"\n\"\\x77\\x7a\\x73\\x74\\x9a\\x7b\\xa1\\x9e\\x99\\x91\\x9c\\xa0\\x1f\\x9e\\x67\\x92\\x5a\\x2a\\x1a\\x4b\\x86\\x69\\x7d\\x6b\\x1e\\x72\\x80\\x76\\x7a\\x76\\x1b\\x74\"\n\"\\x76\\x9a\\xab\\x76\\x1f\\x0e\\x57\\x36\\x1d\\xfb\\x8c\\xf8\\x49\\x38\\x0a\\x57\\x36\\x1d\\x81\\xf8\\xf9\\x93\\x0a\\x60\\xf8\\x2f\\xf7\\x01\\x15\\x61\\x66\\x71\"\n\"\\x7d\\x62\\x1b\\x34\\x54\\xe1\\xf7\\x1d\\xf2\\xab\\xca\\xbf\\x9b\\x99\\x83\\x80\\x92\\x1f\\x90\\x81\\x8b\\x8b\\x62\\x62\\x1d\\x34\\xfb\\x1d\\x27\\x21\\xfb\\x24\"\n\"\\xfb\\x1f\\xe4\\x29\\xf7\\x11\\xd9\\xc3\\xaa\\xd5\\xc4\\x1f\\x49\\xf8\\x49\\x15\\xc3\\x06\\xfb\\x0e\\x52\\x1d\\x57\\x36\\x1d\\xfb\\x47\\xf8\\xd4\\x2a\\x1d\\x69\"\n\"\\xf8\\x4e\\xf8\\x56\\x15\\xfb\\x17\\x06\\x30\\xfb\\x57\\x05\\xf7\\x26\\x5d\\x5e\\xc6\\x4b\\x1b\\x64\\x70\\x72\\x68\\x6b\\xa2\\x71\\xa8\\x94\\x93\\x8e\\x94\\x97\"\n\"\\x1f\\x94\\x97\\x91\\x8e\\x92\\x1b\\x99\\x99\\x7f\\x75\\x9a\\x1f\\x98\\x76\\x90\\x7c\\xa7\\x31\\xfb\\x55\\xfc\\x0e\\x18\\xf7\\x17\\x06\\xf7\\x0a\\xf7\\x8b\\xb3\"\n\"\\xfb\\x1a\\xc3\\xfb\\x10\\x9f\\x8c\\x19\\x8e\\x8f\\x8d\\x8d\\x8f\\x1f\\xe0\\xbd\\x83\\xa1\\x05\\x87\\x7f\\x86\\x8a\\x81\\x1b\\x50\\x68\\xc2\\xf7\\x49\\x52\\x1f\"\n\"\\x0e\\xf8\\x8c\\xf8\\x8b\\xf9\\x4b\\x15\\xfb\\x5c\\xfb\\x36\\xfb\\x35\\xfb\\x5c\\xfb\\x58\\xf7\\x36\\xfb\\x36\\xf7\\x57\\xf7\\x59\\xf7\\x37\\xf7\\x37\\xf7\\x57\"\n\"\\xf7\\x58\\xfb\\x36\\xf7\\x39\\xfb\\x55\\x1f\\x87\\xfb\\xd0\\x15\\xfb\\x52\\xf7\\x50\\x05\\xb8\\xc2\\xcc\\xa2\\xd1\\x1b\\xd0\\xcc\\x74\\x60\\xc3\\x1f\\xb3\\x63\"\n\"\\x15\\xbb\\x51\\xa2\\x4d\\x42\\x1a\\x43\\x74\\x4b\\x5d\\x53\\x1e\\xfb\\x54\\xf7\\x57\\x05\\xf7\\x2c\\xfb\\x7f\\x15\\x5f\\x54\\x48\\x73\\x45\\x1b\\x45\\x4b\\xa2\"\n\"\\xba\\x50\\x1f\\xf7\\x55\\xf7\\x55\\x05\\xfb\\x7d\\xfb\\x2d\\x15\\x5f\\xc1\\x74\\xcb\\xd1\\x1a\\xd3\\xa2\\xcb\\xba\\xc4\\x1e\\xf7\\x52\\xfb\\x50\\x05\\x0e\\xf8\"\n\"\\x8c\\xf9\\x83\\x16\\x9f\\x07\\x24\\x9f\\x6e\\x99\\x5d\\xbb\\x5c\\xbf\\x7a\\xc0\\x8a\\xeb\\xa0\\x66\\x93\\x7e\\x97\\x7d\\x08\\x5d\\xb2\\xc9\\x6c\\xc0\\x1b\\xe6\"\n\"\\xd2\\xd5\\xe9\\xe5\\x4a\\xd3\\x3a\\x6e\\x84\\x89\\x6e\\x50\\x1f\\xa7\\xb4\\x96\\xaa\\xb0\\x1a\\xe3\\x42\\xd2\\x30\\x2e\\x44\\x45\\x30\\x68\\x92\\x79\\xad\\x55\"\n\"\\x1e\\xa3\\x5a\\x77\\x91\\x6c\\x1b\\x40\\x49\\x3f\\x34\\x2e\\xd4\\x42\\xe7\\xdc\\xcf\\xbd\\xe6\\xb8\\x1f\\x8c\\x7b\\x8b\\x80\\x86\\x1a\\x43\\x65\\x3a\\x55\\x5f\"\n\"\\x1e\\x6b\\x72\\x74\\x82\\x2c\\x77\\x08\\x77\\x07\\x0e\\xf7\\x6b\\xf8\\xab\\x5b\\x0a\\xf7\\x5e\\xae\\x15\\xf3\\x36\\x0a\\x94\\x93\\x83\\x80\\x68\\x6d\\x66\\x47\"\n\"\\x5b\\x1f\\x0e\\xc7\\xf7\\xe4\\xf8\\xb5\\x15\\xfb\\x1a\\x07\\xb9\\x60\\x6d\\x9b\\x5d\\x1b\\xfb\\x02\\x39\\x20\\xfb\\x25\\xfb\\x1d\\xd7\\x29\\xf4\\xc0\\xac\\x9b\"\n\"\\xbd\\xba\\x1f\\x4a\\x07\\xb9\\x98\\xa4\\x90\\xc9\\x92\\xc9\\x93\\x18\\xa2\\x07\\x5e\\x8e\\x7d\\x98\\xb5\\x1a\\xf8\\x50\\xc6\\xb7\\x50\\xe2\\xbb\\x0a\\x86\\x2f\"\n\"\\x5f\\x07\\xe7\\xfc\\x45\\x7e\\x0a\\x0e\\xa2\\xf8\\x46\\xf8\\xea\\x15\\xa8\\x29\\x4f\\x96\\x48\\x1b\\x3f\\x62\\x74\\x62\\x77\\x96\\x78\\xa4\\x77\\x1f\\x9b\\x7e\"\n\"\\x92\\x87\\xcb\\x64\\x51\\x7d\\x6e\\x7b\\x6a\\x67\\x08\\x65\\x60\\x79\\x57\\x49\\x1a\\xfb\\x26\\xe3\\x28\\xf7\\x16\\xf7\\x14\\xe8\\xf2\\xf7\\x21\\xd6\\x6f\\xcc\"\n\"\\x58\\xb9\\x1e\\x6c\\xa7\\x75\\x99\\xfb\\x00\\xcb\\x08\\x4d\\xaf\\x83\\x92\\x99\\x1a\\x97\\x99\\x92\\xa3\\xbe\\xbd\\x7d\\x59\\xf7\\x13\\x1e\\xfb\\x45\\x25\\x15\"\n\"\\xc3\\xa5\\x46\\xfb\\x25\\xfb\\x16\\x6e\\x43\\x58\\x57\\x6e\\xd3\\xf7\\x17\\xf7\\x22\\xa5\\xd2\\xc0\\x1f\\x0e\\xf8\\x8c\\xf7\\x8e\\xf7\\xf1\\x15\\xf0\\xfb\\x11\"\n\"\\xf7\\x10\\xfb\\x45\\xb1\\x40\\xc7\\xf7\\x00\\xf7\\x06\\xf7\\x35\\xf3\\xf7\\x10\\x3a\\xe8\\xfb\\x36\\xf7\\x78\\x68\\xd2\\x54\\x24\\x40\\x21\\xfb\\x26\\xfb\\x4b\"\n\"\\x08\\x0e\\xfb\\x37\\xda\\xf8\\xef\\x9c\\x0a\\xf7\\x45\\xc4\\x1d\\x20\\x62\\x15\\xae\\x06\\x8f\\x9f\\x8e\\x97\\x8d\\x1a\\x9b\\xcd\\x8b\\x8d\\x9a\\x1a\\xa4\\x7a\"\n\"\\x9e\\x73\\x74\\x7a\\x78\\x72\\x7b\\x8b\\x89\\x9b\\x4a\\x1e\\x8d\\x82\\x8c\\x82\\x8d\\x83\\x08\\x0e\\x57\\x25\\x1d\\xae\\xf8\\x2d\\x15\\x4b\\x7a\\x6e\\x74\\x91\"\n\"\\x1d\\x57\\x25\\x1d\\xe8\\xf8\\x3a\\x21\\x0a\\x57\\x25\\x1d\\x3e\\xf8\\x15\\x2a\\x1d\\xf8\\x8c\\xf9\\x93\\xf7\\x6c\\x15\\xc8\\xfc\\x62\\x07\\x91\\xf6\\xc3\\xbd\"\n\"\\xf7\\x01\\x89\\x08\\xf7\\xb7\\xc9\\xfb\\xac\\x5c\\x1d\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x38\\xbc\\x0a\\xc9\\xfb\\xb7\\x06\\xfb\\x01\\x89\\x53\\xbd\\x85\\xf5\\x08\"\n\"\\x0e\\x57\\x25\\x1d\\xe4\\xf7\\xf7\\x22\\x0a\\xc7\\xf7\\x68\\xf8\\x61\\x15\\xfb\\x53\\x73\\x06\\xb7\\x84\\x93\\x82\\x8c\\x60\\x08\\xfb\\xba\\x3a\\x1d\\xa7\\x95\"\n\"\\xb8\\xa9\\xaa\\x1b\\xae\\x9c\\x70\\x53\\x1f\\xfc\\x37\\x07\\x56\\x7d\\x74\\x69\\x78\\x7e\\x92\\x95\\x90\\x8e\\x92\\x91\\x95\\x1e\\x95\\x9a\\x8f\\x97\\x95\\x1a\"\n\"\\xa9\\x71\\xa3\\x6a\\x66\\x72\\x72\\x67\\x50\\xc5\\x62\\xdd\\xd0\\xc0\\xa6\\xbc\\xa7\\x1e\\x9e\\xab\\x93\\xb1\\xc6\\x1a\\xf7\\xde\\x07\\xe1\\x56\\xc2\\x39\\x4f\"\n\"\\x5d\\x6f\\x50\\x66\\x1e\\x0e\\x57\\xf8\\x39\\xf7\\x89\\x15\\x85\\xdf\\x7c\\xba\\x6b\\xb1\\x08\\xb2\\x6b\\x5c\\x9f\\x53\\x1b\\xfb\\x10\\x37\\x28\\xfb\\x26\\xfb\"\n\"\\x25\\xdd\\x2a\\xf7\\x0e\\x8f\\x92\\x8b\\x8c\\x93\\x1f\\x71\\x66\\x84\\x7a\\x72\\x1a\\x5c\\x99\\x0a\\x77\\x81\\x88\\x7b\\x1b\\x61\\x76\\xa2\\xb7\\x9e\\x90\\x94\"\n\"\\x9e\\x98\\x1f\\xb8\\xab\\xa1\\xa1\\xaf\\xc0\\x73\\x99\\x18\\xbe\\x1d\\x86\\xb0\\x15\\xf7\\x0c\\x8e\\x9d\\xb3\\xbc\\x1b\\xba\\x9a\\x69\\xfb\\x03\\x8d\\x1f\\x7c\"\n\"\\x07\\x0e\\x46\\x74\\x1d\\x0e\\x46\\x74\\x1d\\xfb\\x20\\xf8\\x15\\x15\\x8f\\xa1\\x8e\\x97\\x8d\\x1a\\x9b\\xd0\\x8c\\x8e\\x9b\\x1a\\xa4\\x79\\x9f\\x72\\x73\\x79\"\n\"\\x78\\x71\\x7a\\x8c\\x85\\x9b\\x4a\\x1e\\x8e\\x77\\x8e\\x7f\\x8c\\x87\\x08\\x0e\\xf8\\x8c\\xf7\\x9d\\x7e\\x15\\xf8\\x6a\\xd6\\xfc\\x6a\\x06\\xf7\\x1d\\x04\\xf8\"\n\"\\x6a\\xd6\\xfc\\x6a\\x06\\xf7\\x1d\\x04\\xf8\\x6a\\xd6\\xfc\\x6a\\x06\\x0e\\xf3\\xf8\\x9e\\xf7\\x8f\\x15\\x8a\\xd4\\x86\\xae\\x7e\\xb0\\x08\\xda\\x6d\\x42\\xbc\"\n\"\\x30\\x1b\\xfb\\x1a\\x36\\x23\\xfb\\x39\\xfb\\x36\\xdd\\x29\\xf7\\x1c\\xf2\\xd0\\xbf\\xec\\xa7\\x1f\\x62\\x06\\x45\\x6e\\x55\\x68\\x40\\x1b\\x61\\x68\\x97\\xa2\"\n\"\\x73\\x1f\\x7a\\x9c\\x82\\x9c\\x80\\xb2\\x08\\xf3\\x07\\xf7\\xaf\\xae\\x15\\xfb\\xad\\xe8\\x06\\xd5\\xab\\xaf\\xa6\\xcf\\x1b\\xc0\\xb0\\x79\\x62\\xac\\x1f\\x96\"\n\"\\x7d\\x8f\\x83\\x92\\x77\\x08\\x0e\\xd3\\x65\\x0a\\x0e\\xd3\\x65\\x0a\\xa7\\xf8\\xa5\\x15\\xb0\\x06\\x8f\\xa1\\x8e\\x97\\x8d\\x1a\\x9b\\xd0\\x8c\\x8d\\x9b\\x1a\"\n\"\\xa6\\x79\\x9e\\x72\\x73\\x79\\x77\\x71\\x80\\x8d\\x7c\\x8f\\x79\\x1e\\x92\\x6c\\x90\\x79\\x8c\\x86\\x08\\x0e\\xd9\\xf7\\x3c\\xf7\\x83\\x15\\x90\\xe1\\x91\\xab\"\n\"\\xa5\\xe2\\x08\\xa7\\xeb\\x8d\\x95\\xdd\\x1d\\x6f\\x96\\x65\\x1e\\xb2\\xfb\\x17\\x91\\x70\\xc0\\x1d\\xb8\\x66\\xb0\\x5e\\x1f\\xf7\\xae\\xe3\\x15\\x90\\xe1\\x91\"\n\"\\xaa\\xa4\\xe3\\x08\\xa8\\xea\\x8d\\x96\\xdd\\x1d\\x6d\\x96\\x67\\x1e\\xb2\\xfb\\x15\\x91\\x6e\\xc0\\x1d\\xb9\\x67\\xaf\\x5d\\x1f\\x0e\\x43\\xbd\\x16\\xf7\\xd9\"\n\"\\xf8\\xd5\\xfb\\xd9\\x37\\xf7\\x85\\xfb\\x36\\xfb\\x85\\x37\\xf7\\x85\\xfb\\x37\\xfb\\x85\\x06\\x0e\\xf8\\x19\\xf7\\xa7\\x15\\xb3\\x93\\x9c\\x90\\xa4\\x9a\\x08\"\n\"\\xd0\\xb4\\xb4\\xd2\\xd9\\x1a\\xf7\\x0e\\x29\\xed\\xfb\\x0e\\xfb\\x0d\\x29\\x29\\xfb\\x0e\\x3d\\xb4\\x44\\xd0\\x62\\x1e\\xa3\\x7c\\x9c\\x85\\xb3\\x84\\x08\\x3e\"\n\"\\xfb\\x29\\x57\\xf7\\x29\\xfb\\x2c\\xc3\\xf7\\x2c\\xf7\\x28\\xbf\\xfb\\x28\\x07\\x6c\\xf8\\x5e\\x15\\xe7\\xd5\\x43\\x31\\x30\\x42\\x42\\x31\\x31\\x42\\xd4\\xe5\"\n\"\\xe3\\xd4\\xd6\\xe2\\x1f\\x0e\\x8f\\xf7\\xa9\\xab\\x15\\x4b\\xac\\x69\\xf4\\xf7\\x37\\x1a\\xf3\\x9b\\xe6\\xa7\\xc1\\x1e\\xb6\\xa1\\xa7\\x9f\\xb1\\x1b\\xb4\\xb3\"\n\"\\x71\\x5f\\xa5\\x1f\\x9e\\x6b\\x95\\x6a\\x91\\x57\\x08\\xa5\\xf7\\x73\\x74\\x06\\x6c\\x88\\x80\\x7b\\x7c\\x1b\\x83\\x84\\x8d\\x8f\\x84\\x1f\\xa8\\x57\\x77\\x92\"\n\"\\x64\\x1b\\xfb\\x28\\xfb\\x07\\xfb\\x2f\\xfb\\x5b\\x29\\xa4\\x37\\xbc\\x4c\\x1f\\x51\\xb7\\xc9\\x6f\\xdf\\x1b\\xd5\\xbf\\xa5\\xcf\\xc6\\x1f\\x75\\x9e\\x71\\x6c\"\n\"\\x78\\x7a\\x6d\\x7c\\x19\\xf7\\x25\\x07\\x8c\\xb3\\x8f\\x98\\x9f\\xa4\\x08\\x71\\x9a\\x9a\\x81\\xa3\\x1b\\xad\\x9e\\x9f\\xae\\xb1\\x74\\xa4\\x69\\x69\\x77\\x78\"\n\"\\x4d\\x6c\\x1f\\xd1\\xfb\\x18\\x77\\x07\\xa7\\x88\\x91\\x81\\x8d\\x63\\x08\\x0e\\x6f\\x9e\\xf8\\x26\\x15\\x92\\x79\\x05\\x90\\x96\\x90\\x8d\\x92\\x1b\\xa1\\xa8\"\n\"\\x64\\x40\\xab\\x1f\\xa8\\x48\\xae\\xfb\\x01\\x9b\\x3e\\x08\\x70\\x57\\x83\\x6f\\x63\\x1a\\x55\\xa6\\x6b\\xb8\\xb6\\xa5\\xae\\xc5\\xad\\x89\\xa3\\x80\\xcf\\x1e\"\n\"\\x99\\xb0\\x95\\x9e\\xb3\\xd9\\x08\\xcc\\xf7\\x0f\\x9b\\xb4\\xb9\\x1a\\xb7\\x70\\xab\\x68\\x6b\\x6d\\x6d\\x6a\\x7d\\x92\\x79\\x96\\x7c\\x1e\\xa9\\x62\\x8b\\x8b\"\n\"\\x7a\\x1a\\x75\\x75\\x52\\x6a\\x4c\\x1e\\x82\\x7a\\x85\\x7f\\x89\\x87\\x8a\\x89\\x88\\x85\\x88\\x84\\x82\\xcc\\x78\\xd5\\x70\\xda\\x08\\xdc\\x70\\x63\\xc7\\x71\"\n\"\\x1b\\x8a\\x88\\x8a\\x89\\x86\\x1f\\x0e\\x8f\\x32\\x0a\\xf7\\x0a\\xf7\\x8d\\x72\\x0a\\x8f\\x32\\x0a\\xf7\\x10\\xe1\\x20\\x0a\\x8f\\x32\\x0a\\xd8\\xf8\\x05\\x15\"\n\"\\x23\\x50\\x5e\\x50\\x3d\\x1a\\x4c\\xaf\\x61\\xc1\\xb8\\xa8\\xa8\\xb8\\xb6\\x71\\xa7\\x64\\x87\\x86\\x8b\\x8a\\x85\\x1e\\x8a\\x89\\x88\\x8b\\x8a\\x1b\\x81\\x84\"\n\"\\x93\\x96\\xae\\xa9\\xb0\\xce\\xba\\x1f\\x0e\\x99\\xf7\\x94\\xf9\\x2b\\x15\\x6a\\x70\\x71\\x6a\\x6a\\xa5\\x71\\xac\\xac\\xa5\\xa5\\xac\\xab\\x71\\xa6\\x6b\\x1f\"\n\"\\xf7\\x77\\xfb\\x9d\\x15\\xc0\\xfb\\x16\\x07\\x9c\\x60\\x6f\\x90\\x63\\x1b\\xfb\\x0c\\xe6\\x1d\\x9f\\x7e\\xb9\\xd1\\x1d\\x82\\x6a\\x72\\x82\\x0a\\x9f\\x98\\x9b\"\n\"\\xa2\\x96\\x1e\\x90\\x97\\x8b\\x8b\\xcc\\x1b\\xb9\\xa5\\x91\\x9f\\xad\\x1f\\xb8\\xa5\\xa2\\xb3\\xc1\\x1a\\xb3\\x7f\\xa9\\x6f\\xa7\\x1e\\xfb\\x35\\xb7\\x15\\xba\"\n\"\\x9e\\x65\\x2e\\x2e\\x78\\x67\\x5c\\x5b\\x79\\xae\\xe9\\xe9\\x9d\\xb0\\xbb\\x1f\\xdf\\xfc\\x82\\x15\\xc1\\xa5\\x7b\\x69\\x5c\\x55\\x72\\x27\\xee\\x1d\\x0e\\xf8\"\n\"\\x8c\\xf7\\xb7\\x8c\\x15\\xf8\\x3c\\xdf\\xfc\\x3c\\x06\\x9c\\x04\\xf8\\x3c\\xf7\\x6c\\x05\\x9f\\x07\\xfc\\x3c\\xf7\\x84\\x05\\xfb\\x05\\x07\\xf7\\xb0\\xfb\\x34\"\n\"\\xfb\\xb0\\xfb\\x1e\\x05\\x0e\\xc7\\xd0\\xf8\\xb4\\x15\\xfc\\x60\\xd3\\x1d\\x90\\x7e\\x9a\\xb0\\x1a\\xf7\\x9f\\x07\\x8f\\x92\\x95\\x95\\x95\\x1e\\xa1\\xa0\\xa4\"\n\"\\x97\\xa2\\x1b\\xae\\x9c\\x70\\x53\\x1f\\xfb\\x86\\x07\\x8a\\x65\\x7e\\x7b\\x6a\\x88\\x08\\x73\\xf7\\x7f\\xa3\\x07\\x68\\x8c\\x7d\\x9d\\xb4\\x1a\\xa8\\x1d\\xf7\"\n\"\\x29\\xf7\\x12\\xb3\\xfb\\x12\\xe7\\x55\\x1d\\x81\\x56\\x63\\x07\\x0e\\xd3\\xf8\\xaa\\xa3\\x15\\x68\\x8c\\x7c\\x9d\\x8c\\xb4\\x08\\xa8\\x1d\\xf7\\xad\\x55\\x1d\"\n\"\\xfc\\x92\\x3a\\x1d\\x8e\\x92\\x96\\x56\\x1d\\xfb\\x2b\\xf9\\x87\\x15\\xc4\\x06\\xfb\\x0f\\x52\\x1d\\xf8\\x8c\\xf8\\x87\\x6f\\x15\\x9f\\xe5\\xc7\\xf2\\xf7\\x08\"\n\"\\xf7\\x25\\x08\\xeb\\xf7\\x0e\\xab\\xce\\xdb\\x1a\\xdd\\x45\\xcf\\x37\\x5b\\x5f\\x76\\x65\\x6a\\x1e\\x75\\x72\\x81\\x75\\x7e\\x5d\\x7f\\xaf\\x83\\x9d\\x7f\\x9d\"\n\"\\x08\\xbd\\x6a\\x58\\xa8\\x54\\x1b\\x36\\x49\\x47\\x32\\x48\\xa0\\x5e\\xdf\\xfb\\x06\\x1f\\xf7\\x2b\\xfb\\x5e\\xb3\\x47\\xa5\\x24\\x08\\x0e\\xf8\\x8c\\xf7\\x2d\"\n\"\\x16\\xf9\\x50\\xf8\\x25\\x06\\xfb\\xf3\\xf7\\xdc\\xfb\\xf1\\xfb\\xdc\\x05\\xc8\\xfb\\xf2\\x15\\xf7\\xdc\\x07\\xf7\\xb4\\xf7\\xa2\\xf7\\xb6\\xfb\\xa2\\x05\\xfb\"\n\"\\xdc\\x07\\x0e\\xfb\\x6e\\xf7\\x92\\x7d\\x0a\\xf7\\x83\\x07\\x7b\\x6c\\x0a\\xd4\\xf7\\x84\\xf8\\x61\\x15\\xfb\\x47\\x76\\x91\\x06\\xa9\\x9c\\x76\\x65\\x89\\x1f\"\n\"\\xfb\\xc0\\x07\\x66\\x8d\\x7a\\x75\\x6d\\x1b\\x85\\x76\\xf7\\x7b\\xa0\\x84\\x06\\x6d\\x7a\\xa1\\xb0\\x8d\\x1f\\x44\\xf8\\xe5\\x15\\x63\\x6c\\x6c\\x65\\x63\\xaa\"\n\"\\x6c\\xb2\\xb1\\xaa\\xaa\\xb2\\xb1\\x6c\\xab\\x66\\x1f\\xf7\\xd5\\xfb\\x69\\x15\\xfb\\x4b\\x76\\x95\\x06\\xa9\\x9c\\x75\\x66\\x89\\x1f\\xfb\\xef\\x07\\x6e\\x07\"\n\"\\x8d\\x6c\\x05\\x8e\\x52\\x8b\\x88\\x83\\x1a\\x70\\x84\\x7a\\x7f\\x84\\x87\\x93\\x96\\x8f\\x8b\\x8f\\x8c\\x8f\\x1e\\x8c\\x94\\x8c\\x91\\x8d\\x1a\\xaa\\x74\\xa4\"\n\"\\x6e\\x6d\\x71\\x6f\\x6a\\x5b\\xb8\\x6d\\xd1\\xe4\\xc1\\xc0\\xe4\\x1e\\x3d\\xf9\\x55\\x15\\x62\\x6b\\x6b\\x63\\x63\\xab\\x6a\\xb3\\xb3\\xab\\xac\\xb3\\xb2\\x6b\"\n\"\\xac\\x64\\x1f\\x0e\\xfb\\x6e\\x29\\x1d\\xbb\\xf9\\x11\\x22\\x0a\\xf8\\x8c\\xf8\\x88\\xf7\\xa4\\x15\\x60\\xb2\\x87\\x8e\\x78\\x99\\x08\\xa5\\x6a\\x60\\x9b\\x6a\"\n\"\\x1b\\x45\\x51\\x51\\x45\\x45\\xc5\\x51\\xd1\\xad\\xb4\\x9b\\xa5\\xad\\x1f\\x9e\\x99\\x8f\\x8e\\xb6\\xb2\\xb8\\x64\\x8f\\x87\\x9c\\x7e\\x08\\x71\\xae\\xb4\\x7b\"\n\"\\xad\\x1b\\xd1\\xc5\\xc5\\xd1\\xd1\\x51\\xc5\\x45\\x6a\\x60\\x7b\\x71\\x69\\x1f\\x7a\\x7e\\x86\\x87\\x5f\\x64\\x08\\xac\\x6d\\x15\\xbe\\xbe\\xbf\\xa9\\xb3\\x1b\"\n\"\\xb7\\xb0\\x66\\x5f\\x5e\\x66\\x66\\x5f\\x64\\x58\\xa8\\xc0\\x56\\x1f\\x4a\\x16\\x57\\x57\\x57\\x6e\\x64\\x1b\\x5f\\x66\\xb0\\xb7\\xb7\\xb0\\xb0\\xb8\\xb2\\xbe\"\n\"\\x6e\\x57\\xbf\\x1f\\x0e\\xf8\\x8c\\xf8\\x65\\xf7\\x87\\x15\\x43\\x8c\\x63\\x8e\\x51\\x1e\\x8d\\x6d\\x8c\\x6f\\x7a\\x1a\\x6f\\x82\\x78\\x7f\\x88\\x87\\x8f\\x93\"\n\"\\x86\\x1e\\x9f\\x81\\x80\\x93\\x78\\x1b\\x72\\x77\\x78\\x72\\x6c\\xa8\\x74\\xb4\\xb1\\xac\\x9e\\xad\\x9e\\x1f\\xa4\\xb8\\x99\\xf7\\x00\\xf7\\x24\\x1a\\xf7\\xd6\"\n\"\\x07\\xd6\\x8a\\xb0\\x88\\xc6\\x1e\\x89\\xa7\\x8a\\xac\\x96\\x1a\\xa7\\x93\\xa0\\x95\\x8f\\x8d\\x89\\x85\\x8e\\x1e\\x76\\x96\\x9b\\x81\\x9e\\x1b\\xa5\\x9e\\x9e\"\n\"\\xa3\\xac\\x6e\\xa1\\x62\\x65\\x6a\\x77\\x6a\\x78\\x1f\\x72\\x5e\\x7d\\xfb\\x00\\xfb\\x24\\x1a\\x0e\\xf7\\xe3\\xfa\\x25\\x15\\xfd\\x71\\x07\\x8d\\x40\\x8e\\x4f\"\n\"\\x90\\x41\\x08\\x8f\\x60\\x8c\\x79\\x80\\x1a\\x75\\x85\\x81\\x7f\\x84\\x89\\x8c\\x96\\x80\\x1e\\x95\\x82\\x7f\\x90\\x7d\\x1b\\x70\\x76\\x75\\x70\\x6c\\xa7\\x73\"\n\"\\xae\\xe2\\xaa\\xf5\\xf7\\xb7\\x1f\\xf9\\x6a\\x07\\x0e\\xf8\\x2e\\xfb\\x66\\x15\\xf9\\x71\\x07\\x89\\xd6\\x88\\xc7\\x86\\xd5\\x08\\x87\\xb6\\x8a\\x9d\\x96\\x1a\"\n\"\\xa1\\x91\\x95\\x97\\x8f\\x90\\x89\\x88\\x8e\\x1e\\x78\\x9e\\x91\\x88\\x9d\\x1b\\xa6\\xa0\\xa1\\xa6\\xaa\\x6f\\xa3\\x68\\x34\\x6c\\x21\\xfb\\xb8\\x1f\\xfd\\x69\"\n\"\\x07\\x0e\\xf8\\x8c\\xf9\\x64\\x16\\xf7\\x8a\\x07\\xf7\\x1d\\x86\\xad\\x73\\xb4\\x1e\\xca\\x65\\x44\\xb1\\x39\\x1b\\x3f\\x4b\\x6c\\x53\\x62\\x1f\\x6a\\x5e\\x85\"\n\"\\x6b\\xfb\\x29\\x1a\\xfb\\x8a\\xc7\\xf7\\x8d\\x07\\xf0\\x91\\xb6\\x9c\\xaa\\x1e\\xb9\\xa4\\xc2\\xa9\\xc4\\x1b\\xc0\\xbf\\x71\\x61\\xa7\\x1f\\xa0\\x6b\\x91\\x66\"\n\"\\xfb\\x06\\x1a\\xfb\\x8d\\x07\\x0e\\xf8\\x8c\\xf8\\x89\\xf9\\x6e\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\"\n\"\\xf7\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\\xf7\\x37\\xfb\\x5e\\x1f\\xfb\\x01\\xfb\\x63\\x15\\xa9\\xa4\\x72\\x6d\\x6d\\x72\\x72\\x6d\\x6e\\x71\\xa4\\xa8\"\n\"\\xaa\\xa4\\xa4\\xa9\\x1f\\xfb\\x14\\xfb\\x05\\x15\\x96\\x59\\x96\\x75\\xa5\\x6d\\x08\\x54\\xbb\\xc7\\x71\\xdc\\x1b\\xdc\\xc7\\xa5\\xc2\\xbb\\x1f\\xa5\\xa9\\x96\"\n\"\\xa1\\x96\\xbd\\x84\\x36\\x80\\x62\\x6d\\x5e\\x08\\x4c\\x61\\x4b\\x6b\\x38\\x1b\\x3e\\x4f\\xa6\\xc1\\x61\\x1f\\x67\\xba\\x7c\\xb8\\x84\\xe8\\x08\\xf7\\xee\\xf7\"\n\"\\x05\\x15\\xa9\\xa4\\x72\\x6d\\x6d\\x72\\x72\\x6d\\x6e\\x71\\xa4\\xa8\\xaa\\xa4\\xa4\\xa9\\x1f\\x0e\\xfb\\x6e\\xf7\\x93\\x7d\\x0a\\xf7\\x4e\\x07\\x68\\x5d\\x83\"\n\"\\x76\\x0a\\xfb\\x09\\xf9\\x47\\x15\\x60\\x68\\x68\\x61\\x5e\\xac\\x6a\\xb7\\xb7\\xad\\xac\\xb7\\xb7\\x69\\xad\\x60\\x1f\\x0e\\xfb\\x4e\\x7c\\x1d\\x0e\\xfb\\x4e\"\n\"\\x63\\x0a\\xfb\\x18\\xf8\\x85\\x9e\\x0a\\xf7\\x31\\x16\\x6b\\x71\\x72\\x6b\\x6b\\xa5\\x71\\xab\\xaa\\xa5\\xa5\\xab\\xaa\\x71\\xa5\\x6c\\x1f\\x0e\\xfb\\x4e\\x63\"\n\"\\x0a\\xfb\\x3d\\xf8\\x59\\x9c\\x0a\\xf7\\x64\\x16\\x6e\\x73\\x74\\x6e\\x6e\\xa2\\x74\\xa8\\xa8\\xa2\\xa2\\xa8\\xa7\\x74\\xa3\\x6f\\x1f\\x34\\x62\\x15\\x8f\\x9e\"\n\"\\x8d\\x94\\x8c\\x91\\x08\\x9b\\xcf\\x8b\\x8b\\x9a\\x1a\\xa4\\x7a\\x9e\\x73\\x75\\x79\\x78\\x73\\x7b\\x8c\\x86\\x9a\\x4c\\x1e\\x8e\\x78\\x8e\\x80\\x87\\x1a\\x0e\"\n\"\\xfb\\x4e\\x7c\\x1d\\x42\\xf8\\x0f\\x15\\xb1\\x06\\x8f\\xa1\\x8e\\x97\\x8d\\x1a\\x9b\\xcf\\x8c\\x8e\\x9c\\x1a\\xa5\\x78\\x9e\\x73\\x73\\x79\\x77\\x72\\xaf\\x0a\"\n\"\\x0e\\xfb\\x6e\\xf7\\x93\\x63\\x1d\\xb6\\x83\\x94\\x82\\x42\\x1d\\x84\\x83\\x5e\\x81\\x08\\x73\\xf7\\x83\\x07\\xfb\\x98\\xf8\\xb9\\x64\\x1d\\x94\\x88\\x78\\xb5\"\n\"\\x1f\\xa8\\x7e\\x05\\x83\\x9e\\xa4\\x85\\x9e\\x1b\\xc5\\xb0\\xb2\\xe3\\xa2\\xe0\\x1d\\x70\\x1b\\x7f\\x49\\x0a\\x6f\\x72\\x91\\x76\\x1b\\x4e\\x67\\x63\\x36\\x79\"\n\"\\x1f\\x0e\\xfb\\x30\\xf7\\x98\\xf8\\x61\\x15\\xfb\\x5e\\x73\\x06\\xbd\\x88\\x97\\x80\\x8c\\x5e\\x08\\xfc\\x6e\\x07\\x56\\x7c\\x74\\x6a\\xa0\\x1d\\xdc\\xd1\\xe7\"\n\"\\x1d\\xa2\\xf8\\xa2\\x20\\x0a\\xc6\\xf7\\xc9\\xf7\\xbe\\x15\\xbc\\xa6\\xaa\\xae\\x9a\\x1b\\x8f\\x91\\x88\\x88\\x8e\\x1f\\x6c\\xa9\\x93\\x86\\xa2\\x1b\\xa9\\xa3\"\n\"\\xa6\\xad\\xaf\\x74\\x9f\\x62\\x59\\x60\\x6f\\x4e\\x61\\x1f\\x69\\x5a\\x6b\\x59\\x77\\x66\\x08\\xf7\\x75\\x07\\x54\\x1d\\xfb\\xd6\\xf7\\x11\\xf7\\x6c\\x07\\xf7\"\n\"\\x1d\\xfb\\x67\\x05\\x7f\\x93\\x92\\x87\\x96\\x1b\\x91\\x92\\x8d\\x8e\\x92\\x1f\\xf7\\x05\\xc2\\x82\\x9d\\x05\\x84\\x7f\\x85\\x89\\x83\\x1b\\x7d\\x7f\\x95\\xa2\"\n\"\\x7d\\x1f\\x66\\xc4\\x05\\x0e\\xc7\\x6c\\x1d\\xfb\\xc2\\xfd\\x9f\\x8a\\x1d\\xc7\\xf7\\x72\\xf7\\x50\\x15\\x98\\x9a\\xde\\xfb\\x18\\x05\\x9b\\x74\\x8b\\x8b\\x82\"\n\"\\x1a\\x81\\x84\\x86\\x7b\\x89\\x1e\\x7e\\x89\\x05\\x77\\xf7\\x6f\\x9f\\x07\\x71\\x8e\\x86\\x8f\\x72\\xb3\\xfb\\x23\\xf7\\x76\\x18\\xc9\\xd0\\xbc\\xc3\\x93\\x91\"\n\"\\xb6\\x98\\x19\\x9f\\xfb\\x54\\x77\\x07\\xb4\\x85\\x9c\\x80\\x77\\x1a\\x7a\\x7d\\x71\\x75\\x73\\x1e\\x33\\x29\\x05\\xf7\\x72\\xfb\\x47\\x76\\x92\\x07\\xa9\\x8c\"\n\"\\x9b\\x75\\x89\\x67\\x08\\xfb\\xc1\\x07\\x67\\x8d\\x7b\\x75\\x6d\\x1b\\x84\\x77\\xf7\\x77\\x9f\\x87\\x06\\x6d\\x7b\\xa1\\xaf\\x8d\\x1f\\x0e\\xfb\\x6e\\x34\\x0a\"\n\"\\xfb\\x58\\xf9\\x76\\x2b\\x1d\\x86\\xab\\x16\\xf7\\x1f\\x06\\xf7\\x01\\xf7\\x8c\\x99\\x4f\\xa7\\x30\\x9f\\x55\\x19\\x65\\x99\\x94\\x7c\\x94\\x1b\\x8e\\x8f\\x8c\"\n\"\\x8d\\x8e\\x1f\\xd7\\xbd\\x84\\x9b\\x05\\x87\\x7f\\x83\\x89\\x84\\x1b\\x65\\x78\\xa8\\xf7\\x05\\x6a\\x1f\\x3f\\xf7\\x9a\\x72\\xe0\\x89\\x93\\x7a\\xaf\\x19\\xb7\"\n\"\\x78\\x70\\xa1\\x66\\x1b\\x60\\x6e\\x69\\x57\\x62\\x9d\\x71\\xa8\\x9f\\x99\\x98\\xa3\\x8f\\x1f\\xa8\\x90\\x8d\\x8f\\x96\\x1b\\x9f\\x97\\x6f\\xfb\\x09\\xa9\\x1f\"\n\"\\x0e\\x44\\x34\\x0a\\x92\\xf8\\x1a\\x15\\xf3\\x36\\x0a\\x94\\x93\\x83\\x80\\x68\\x6d\\x67\\x47\\x5a\\x1f\\x0e\\xfb\\x6e\\x34\\x0a\\xfb\\x4b\\x40\\x0a\\x27\\xf7\"\n\"\\x92\\x94\\x1d\\xcb\\x91\\x0a\\xf8\\x8c\\xf9\\x5a\\x8c\\x15\\xdf\\xfc\\x3c\\x37\\x07\\xf8\\x3c\\xf8\\xd4\\x15\\xfc\\x3c\\xfb\\x79\\x05\\x77\\x07\\xf8\\x3c\\xfb\"\n\"\\x76\\x05\\xf7\\x05\\x07\\xfb\\xb0\\xf7\\x26\\xf7\\xb0\\xf7\\x2c\\x05\\x0e\\x2e\\x0a\\xf7\\x8a\\xf8\\x24\\x15\\xec\\xdb\\x05\\xbd\\x07\\x2a\\x3b\\x05\\xf7\\x76\"\n\"\\x5a\\x1d\\xfb\\x7d\\x07\\x32\\x43\\x05\\x59\\x07\\xe4\\xd3\\x05\\xfb\\x77\\x98\\x0a\\xa3\\x07\\x6b\\x7b\\x9f\\xb3\\x8a\\x1f\\x0e\\xfb\\x6e\\x8a\\x16\\xf7\\xa4\"\n\"\\xa3\\x06\\x47\\x8c\\x80\\x96\\x8a\\xcc\\x08\\xf8\\x6a\\x07\\xc1\\x99\\xa1\\xae\\x9c\\x96\\x84\\x80\\x86\\x89\\xbe\\x0a\\x6c\\xa4\\x74\\xac\\xb0\\xa3\\xa4\\xaf\"\n\"\\xc5\\x52\\xb3\\x39\\x49\\x58\\x73\\x61\\x70\\x1e\\x76\\x68\\x84\\x64\\x36\\x1a\\x53\\x60\\xc3\\xfb\\xdb\\x06\\x8a\\x60\\x80\\x80\\x5f\\x87\\x08\\x0e\\xf8\\xc1\"\n\"\\xf8\\xe5\\x15\\x43\\xbc\\x9c\\x79\\x9c\\x1b\\x95\\x93\\x92\\x95\\x91\\x8a\\x8f\\x84\\x99\\x1f\\x74\\xb6\\x7a\\xcb\\xb7\\x1a\\xa9\\x89\\x91\\x7e\\x86\\x84\\x88\"\n\"\\x83\\x7e\\x1e\\x78\\x70\\x3d\\x75\\x60\\x1b\\x71\\x8a\\x83\\x86\\x7e\\x1a\\x75\\xad\\x81\\xe2\\x85\\x1e\\x25\\xfb\\x4d\\x05\\x97\\x6c\\x6e\\x91\\x6b\\x1b\\xfb\"\n\"\\x1a\\xfb\\x00\\xfb\\x00\\xfb\\x1a\\xfb\\x19\\xf7\\x00\\xfb\\x00\\xf7\\x1a\\xf7\\x19\\xf7\\x00\\xf7\\x00\\xf7\\x1a\\xd8\\x66\\xd3\\x4c\\xb9\\x1f\\xfb\\x22\\x7b\"\n\"\\x15\\xee\\xdc\\x3b\\x28\\x28\\x3b\\x3a\\x28\\x27\\x3b\\xdb\\xee\\xee\\xdb\\xdc\\xee\\x1f\\x0e\\xfb\\x6b\\xf7\\x0a\\x9f\\x1d\\x0e\\x8f\\xf7\\x81\\xf7\\x43\\x15\"\n\"\\x92\\x7c\\x77\\x8f\\x7a\\x1b\\x4d\\x54\\x56\\x50\\x68\\xa5\\x75\\xb4\\xba\\xb7\\xa2\\xb1\\xa6\\x1f\\x9f\\xa6\\x91\\xa1\\x8d\\xbb\\x08\\xf7\\xb9\\x07\\xc3\\x83\"\n\"\\xb9\\x3f\\x38\\x1a\\x59\\x83\\x65\\x73\\x54\\x1e\\xa6\\x06\\xaf\\xb6\\x9e\\xc2\\xc5\\x1a\\xd6\\x6e\\xd2\\x51\\xd1\\x1e\\x58\\xc8\\x8a\\x8c\\x86\\x92\\x83\\x95\"\n\"\\x19\\xc5\\x5f\\x07\\x0e\\xf8\\x13\\xf8\\x57\\x15\\x9e\\x72\\xa1\\x78\\xa0\\x7f\\xc3\\x6b\\x94\\x85\\x90\\x82\\x08\\x91\\x80\\x8f\\x78\\x76\\x1a\\xfb\\x7c\\x07\"\n\"\\x92\\x7a\\x74\\x8f\\x78\\x1b\\x46\\x4d\\x56\\x4f\\x68\\xa8\\x75\\xb8\\xbe\\xbb\\xa2\\xb1\\xaa\\x1f\\xa0\\xa6\\x92\\xa1\\x8d\\xbc\\x08\\xf8\\x00\\x07\\x8c\\xd3\"\n\"\\x6a\\xd5\\x5d\\xa7\\x54\\xaf\\x6d\\x9f\\x87\\x8f\\x08\\x7e\\x99\\x85\\x9d\\xa2\\x1a\\x98\\x5f\\xfc\\x80\\x07\\x92\\x7b\\x74\\x8f\\x79\\x1b\\x46\\x4f\\x56\\x4f\"\n\"\\x68\\xa7\\x75\\xb7\\xbe\\xbb\\xa2\\xb1\\xa8\\x1f\\xa0\\xa6\\x92\\xa1\\x8d\\xbc\\x08\\x8e\\xf8\\x0a\\x15\\xf7\\x03\\x4f\\xa3\\x67\\x8f\\xfb\\x08\\xfb\\x06\\xc8\"\n\"\\x74\\xae\\x87\\xf7\\x09\\x08\\x0e\\xc7\\x2d\\x0a\\xfb\\xe9\\xf8\\xa4\\x2b\\x1d\\xf7\\x7d\\xa4\\xf8\\x00\\x15\\xbf\\x9b\\xa3\\x98\\xa6\\xa4\\x08\\xb1\\xaf\\xa2\"\n\"\\xbe\\xbf\\x1a\\xcd\\x63\\xbc\\x55\\x5f\\x66\\x66\\x5f\\x63\\xaa\\x69\\xb0\\x9c\\x99\\x90\\x97\\x99\\x1e\\x8c\\x84\\x8b\\x86\\x88\\x1a\\x58\\x67\\x5d\\x48\\x68\"\n\"\\x1e\\xf9\\x43\\xfb\\xff\\x75\\x1d\\x0e\\xc7\\x2d\\x0a\\x2f\\xf9\\x54\\x21\\x0a\\xc7\\x2d\\x0a\\xfb\\xdc\\x40\\x0a\\xf8\\x8c\\xf8\\xa4\\xf7\\x6c\\x15\\xf7\\x83\"\n\"\\xc8\\xfb\\x60\\x06\\xe3\\xf7\\x2f\\x05\\xf7\\x08\\xc9\\x3a\\x06\\xac\\xc6\\x61\\xa3\\x5c\\x38\\x05\\xfb\\x23\\x5c\\x1d\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x37\\xdc\"\n\"\\x69\\x1e\\x6a\\x52\\xb6\\x74\\xb1\\xce\\x05\\x88\\xa4\\x99\\x8a\\xb4\\x1b\\xf7\\xac\\xc9\\xfb\\xb7\\x06\\x77\\x85\\x8b\\x8c\\x81\\x1f\\xab\\xf7\\x2d\\x15\\x3a\"\n\"\\xfb\\x21\\x57\\x9d\\x6c\\xbe\\x88\\xd3\\x19\\xf7\\xb6\\xf7\\x6c\\x15\\x33\\xfb\\x2f\\x05\\xfb\\x5e\\x06\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\x0e\\xf8\\x8c\"\n\"\\xf8\\xd6\\xf7\\xcb\\x15\\xf7\\x42\\xe3\\xfb\\x15\\x06\\xb3\\xdc\\x3d\\xb2\\x4e\\xfb\\x0c\\x05\\xfb\\xa8\\x33\\xf7\\x7c\\x06\\x51\\xfb\\x08\\x05\\xfb\\x42\\x33\"\n\"\\xf7\\x15\\x06\\x63\\x3a\\xd9\\x64\\xc8\\xf7\\x0c\\x05\\xf7\\xa8\\xe3\\xfb\\x7c\\x06\\x0e\\x5a\\xf7\\x5c\\xf8\\x1c\\x15\\xcc\\x76\\x8b\\x8b\\x75\\x1b\\x82\\x88\"\n\"\\x8a\\x87\\x80\\x1f\\x21\\x62\\x91\\x78\\x05\\x8d\\x96\\x8e\\x8c\\x8e\\x1b\\xa1\\x96\\x79\\x3a\\xa4\\x1f\\xeb\\xfb\\xc2\\x05\\xbb\\x06\\xf7\\x18\\xf7\\xac\\x05\"\n\"\\xa4\\xc0\\x94\\xa8\\xa9\\x1a\\xb4\\x72\\xa9\\x69\\x6b\\x6f\\x6f\\x6b\\x7d\\x91\\x7c\\x94\\x80\\x1e\\xab\\x66\\x8b\\x8b\\x79\\x1a\\x6f\\x7b\\x61\\x59\\x24\\x1e\"\n\"\\x0e\\x8f\\x27\\x1d\\xf5\\xf7\\x8d\\x15\\x4c\\x7a\\x6e\\x73\\x91\\x1d\\x8f\\x27\\x1d\\xfb\\x49\\xe1\\x98\\x1d\\xac\\xa0\\x92\\x94\\xed\\x1d\\x7a\\x1e\\x0e\\x8f\"\n\"\\x27\\x1d\\xf7\\x37\\xf7\\x57\\x22\\x0a\\xf7\\x7f\\xf7\\x51\\xf8\\x5d\\x56\\x0a\\xf7\\x7f\\xf8\\x00\\xf8\\xa5\\x15\\xb0\\x06\\x8f\\x9e\\x8d\\x94\\x8c\\x93\\x08\"\n\"\\x9c\\xd1\\x8b\\x8c\\x9b\\x1a\\xa5\\x79\\x9f\\x73\\x72\\x79\\x78\\x71\\xaf\\x0a\\xfb\\x41\\x3b\\x56\\x0a\\x8f\\x79\\x1d\\x0e\\x8f\\x79\\x1d\\x78\\xf7\\x02\\x15\"\n\"\\xb0\\x06\\x8f\\x9e\\x8d\\x94\\x8c\\x93\\x08\\x9c\\xd2\\x8b\\x8b\\x9b\\x1a\\xa6\\x79\\x9e\\x73\\x72\\x79\\x77\\x72\\x7a\\x8c\\x86\\x9b\\x49\\x1e\\x8c\\x81\\x8d\"\n\"\\x82\\x8d\\x82\\x08\\x0e\\xf8\\x77\\x93\\x16\\xfa\\x56\\xd3\\xfe\\x0e\\xfa\\x03\\x43\\x06\\x0e\\x8f\\xe8\\x1d\\x68\\x6d\\x92\\x64\\x1b\\xfb\\x15\\x2a\\x23\\xfb\"\n\"\\x20\\x3b\\xa4\\x52\\xc7\\x53\\x1f\\x3f\\xfb\\x14\\x05\\xba\\x06\\xca\\xf4\\x05\\x78\\xb0\\xa9\\x83\\xb3\\x1b\\xf7\\x16\\xea\\xf2\\xf7\\x20\\xde\\x71\\xc6\\x4d\"\n\"\\xc2\\x1f\\xfb\\x6b\\xfb\\xb2\\x15\\x8a\\xa1\\x8b\\xa1\\xa4\\x1a\\xf7\\x49\\xaa\\x1d\\x67\\x79\\x9d\\xb8\\x7d\\x1e\\x7e\\xf8\\x54\\x4f\\x1d\\x8f\\xf6\\xf9\\x18\"\n\"\\x15\\xa8\\xc9\\x99\\x8f\\xb4\\x1b\\xe8\\xc2\\x31\\xfb\\x2b\\x71\\x8a\\x76\\x87\\x69\\x1f\\xb6\\x51\\x68\\x98\\x58\\x1b\\x5a\\x61\\x7a\\x67\\x67\\x1f\\x5a\\x5b\"\n\"\\x6f\\x49\\x49\\x1a\\xfb\\x02\\xe3\\x33\\xf7\\x01\\xcb\\xc3\\xa5\\xbc\\xb5\\x1e\\xc5\\xd0\\xb2\\xf7\\x1c\\xf7\\x1d\\x1a\\xf7\\x0e\\x60\\xef\\x38\\xd1\\x1e\\xaf\"\n\"\\x60\\x58\\x9d\\x51\\x1b\\x60\\x6c\\x84\\x71\\x44\\x1f\\xf7\\xc6\\xfc\\x2e\\x15\\x7b\\xfb\\x02\\x7d\\x59\\x71\\x5f\\x08\\x61\\x71\\x68\\x73\\x67\\x1b\\x5a\\x6d\"\n\"\\xb9\\xd7\\xf7\\x00\\xc9\\xe2\\xd7\\xad\\xa2\\x7f\\x68\\xb0\\x1f\\x0e\\xf8\\x6d\\xf7\\x11\\x16\\xf7\\xe2\\xa4\\x06\\x3d\\x94\\x83\\x94\\x89\\xd5\\x08\\xf7\\x4e\"\n\"\\x07\\xf7\\x1b\\x8c\\xad\\x8f\\xb7\\x9c\\x08\\xdc\\xaa\\xb7\\xc7\\xd9\\x1a\\xf7\\x08\\x2c\\xcd\\xfb\\x3b\\x1e\\xfb\\xd6\\x72\\x06\\x4e\\x1d\\xf8\\xd9\\x15\\xa2\"\n\"\\x9c\\x97\\xac\\xde\\x4b\\x0a\\x74\\x1e\\x77\\x73\\x6a\\x84\\x44\\x1b\\xf8\\x5c\\x50\\x15\\x54\\xef\\x77\\x06\\x65\\x55\\x77\\x75\\x61\\x67\\x08\\x76\\xaa\\xfb\"\n\"\\x50\\x07\\x63\\xa6\\x72\\xb6\\xb5\\xa3\\x9d\\xc0\\xa5\\x1e\\x76\\x94\\x05\\x72\\x7d\\x85\\x85\\x7e\\x1b\\x7d\\x86\\x93\\xa1\\x1f\\xf7\\x42\\xc2\\x07\\x0e\\xf7\"\n\"\\x14\\xf7\\xf9\\xfb\\x52\\x15\\xf7\\x42\\x07\\xf7\\x1b\\x90\\xed\\xf5\\xf7\\x21\\x1a\\xcc\\x75\\xbf\\x5e\\xb7\\x1e\\xb3\\x61\\x59\\xa1\\x5a\\x1b\\x62\\x66\\x7b\"\n\"\\x70\\x76\\x1f\\x79\\x74\\x83\\x68\\x52\\x1a\\xfb\\xb3\\x07\\x7a\\x90\\x83\\x8f\\x82\\x92\\x08\\x67\\xaa\\x79\\xcb\\xef\\x1a\\xf7\\x1b\\xa3\\xc8\\xc9\\x9f\\x1e\"\n\"\\x9d\\x07\\x54\\x89\\x6b\\x81\\x68\\x72\\x08\\x4d\\x5f\\x67\\x43\\x3c\\x1a\\x43\\xa8\\x48\\xbe\\x5c\\x1e\\xb2\\x69\\xb1\\x7b\\xcc\\x84\\x08\\xfb\\x42\\x07\\xef\"\n\"\\xf8\\x6a\\x15\\xf0\\x90\\xa2\\xa1\\x9c\\x9d\\x7b\\x72\\x98\\x1e\\x9a\\x6c\\x93\\x5f\\x4f\\x1a\\x4d\\x82\\x55\\x7a\\x62\\x1e\\x85\\x7d\\x80\\x7d\\x7b\\x7f\\x81\"\n\"\\x83\\x82\\x87\\x77\\x86\\x08\\x0e\\xbf\\xf8\\x04\\xf7\\xf8\\x15\\x4d\\x6e\\x72\\x64\\x90\\x4e\\x08\\xfb\\x21\\x07\\x77\\x8f\\x7c\\x94\\x75\\x1e\\x73\\x96\\xa3\"\n\"\\x78\\xa0\\x1b\\x8f\\x8e\\x8c\\x8c\\x90\\x1f\\xf7\\x1a\\xbc\\x05\\xb1\\x07\\x80\\x70\\x81\\x88\\x80\\x1b\\x7e\\x80\\x92\\x97\\x85\\x1f\\x84\\x9a\\x8a\\x9c\\xce\"\n\"\\x1a\\xd9\\x07\\x8c\\xc0\\x8f\\x9d\\x9c\\xa2\\x08\\xf2\\xef\\xfc\\x25\\x06\\x45\\x88\\x7d\\x86\\x7a\\x6d\\x4d\\xfb\\x08\\x18\\xba\\x7c\\xae\\xbc\\xab\\x9f\\xc1\"\n\"\\x8f\\x19\\x89\\x54\\x87\\x68\\x83\\x62\\x78\\x37\\x88\\x83\\x68\\x72\\x7e\\x81\\x18\\x76\\x7a\\x84\\x7d\\x73\\x1a\\x6b\\xa5\\x75\\xb2\\xad\\xa3\\x9c\\xad\\x9a\"\n\"\\x1e\\x9d\\xb3\\x98\\xe4\\x8f\\xee\\x8d\\xbd\\x18\\x8c\\x91\\x8b\\x98\\x8c\\x9f\\x08\\x0e\\xf8\\x8c\\xf9\\x45\\xf9\\x55\\x15\\xfd\\x72\\x07\\x54\\x8a\\x78\\x77\"\n\"\\x54\\xd7\\x1d\\xf9\\x3b\\x07\\xc4\\xa0\\xa2\\xc0\\x1e\\x9c\\x9d\\xfd\\x9f\\x79\\x9b\\x06\\xc1\\x9f\\x75\\x51\\x8c\\x1f\\xfd\\x3b\\x07\\x54\\x8a\\x77\\x77\\x55\"\n\"\\xd7\\x1d\\xf9\\x72\\x07\\x0e\\xf8\\x8c\\xf9\\x93\\xc9\\x15\\xfb\\xb7\\x06\\xfb\\x0d\\x57\\xc2\\xf7\\x16\\xf7\\x15\\xbf\\xc3\\xf7\\x0d\\x1f\\xf7\\xb7\\xc9\\xfb\"\n\"\\xac\\x5c\\x1d\\x43\\x2b\\x1a\\xfb\\x07\\xb8\\x37\\xbc\\x0a\\x06\\x0e\\xf8\\x8c\\xf7\\x7d\\xc9\\x15\\x4d\\xf7\\xac\\x07\\xde\\xae\\x92\\xa4\\xb1\\x1f\\xcc\\xb7\"\n\"\\xac\\xd3\\xf2\\x1a\\xf6\\x5c\\xe0\\x3e\\xac\\x1e\\x99\\x69\\x70\\x8f\\x46\\x1b\\xfb\\xac\\x4d\\xf7\\xb7\\x06\\xf7\\x0d\\xbf\\x54\\xfb\\x16\\xfb\\x16\\x57\\x54\"\n\"\\xfb\\x0d\\x1f\\x0e\\xf7\\x54\\xf8\\x32\\xf8\\x55\\x15\\x22\\x06\\x8a\\xfb\\xf9\\x32\\x92\\x6e\\xad\\x90\\xe7\\x19\\xf7\\x1c\\x07\\xc4\\x78\\xb4\\x71\\x87\\x85\"\n\"\\x89\\x89\\x84\\x1e\\x2a\\x63\\x91\\x76\\x05\\x8e\\x94\\x8f\\x8c\\x8f\\x1b\\xa3\\x91\\x79\\x38\\x1f\\x2a\\x07\\x86\\xfb\\x11\\xe4\\x38\\xf7\\x1a\\x8e\\x8a\\xfb\"\n\"\\x3d\\x18\\xf7\\x02\\xf7\\x3e\\x06\\xd0\\x95\\xa6\\x99\\xaf\\xb9\\x08\\xb7\\xc3\\xa3\\xd8\\xe5\\x1a\\xf4\\x67\\xcc\\x50\\x6c\\x76\\x74\\x6b\\x72\\x99\\x76\\xa4\"\n\"\\x80\\x1e\\xab\\x7d\\x8c\\x8a\\x96\\x7e\\x08\\x99\\x7a\\x92\\x78\\x71\\x1a\\x54\\x72\\x56\\x66\\x71\\x1e\\x73\\x7b\\x6d\\x81\\x61\\x86\\x08\\x0e\\xfb\\x37\\xf7\"\n\"\\x89\\xf8\\x06\\x15\\x43\\xbe\\x69\\xb4\\xb1\\x1a\\x97\\x93\\x94\\x96\\x8c\\x8e\\x8b\\x8a\\x8e\\x1e\\x8a\\x90\\x91\\x8b\\x8f\\x1b\\xb6\\xa8\\xaa\\xb9\\xbc\\x6b\"\n\"\\xab\\x5a\\x50\\x63\\x5d\\x47\\x37\\xbb\\x4b\\xf7\\x07\\x49\\x1f\\x0e\\x57\\x35\\x1d\\xfb\\x2d\\xf8\\xa4\\x38\\x0a\\xf8\\x3f\\x68\\x15\\xb6\\x06\\xf7\\x2c\\xfa\"\n\"\\x40\\x3e\\x96\\xfb\\x09\\xfd\\x69\\xfb\\x44\\xf7\\xf8\\xfb\\x4a\\x32\\xac\\x44\\xea\\xba\\x05\\x0e\\x57\\x35\\x1d\\xeb\\xf9\\x54\\x15\\x51\\x06\\xfb\\x03\\x28\"\n\"\\xfb\\x04\\xee\\x05\\x53\\x06\\xf7\\x0e\\xfb\\x44\\x05\\xe7\\x06\\x0e\\x57\\x35\\x1d\\xfb\\x5c\\x40\\x0a\\xf8\\x1d\\xf7\\xac\\xf7\\x00\\x15\\xf7\\x5f\\xf8\\x34\"\n\"\\xe3\\xfc\\x8c\\xfb\\xb7\\x07\\x0e\\xb2\\xf7\\x5f\\xa9\\x15\\x6d\\xa8\\xa1\\x81\\xac\\x1b\\xf6\\xe1\\xf5\\xf7\\x17\\xc0\\x7d\\xbe\\x71\\xb2\\x1f\\xc5\\x64\\x51\"\n\"\\xa8\\x3d\\x1b\\x3c\\x4c\\x66\\x4f\\x72\\x1f\\x7f\\x6d\\x86\\x6b\\x5c\\x1a\\xfc\\x3e\\xf7\\x0e\\x07\\xf8\\x50\\x04\\xf6\\x9c\\xb6\\xb7\\xc4\\xa4\\x4c\\xfb\\x1f\"\n\"\\xfb\\x0a\\x6e\\x45\\x5a\\x74\\x79\\x99\\xaf\\x73\\x1e\\x0e\\x20\\x2f\\x1d\\xfb\\x5d\\xf7\\x5e\\x32\\x1d\\x20\\xf7\\x69\\x7d\\x15\\xe5\\x90\\xc5\\xc6\\xe3\\x1a\"\n\"\\xd2\\x65\\xb6\\x27\\xb5\\x1e\\x47\\xa8\\x6f\\xa4\\xad\\x1a\\xac\\xa7\\xa4\\xb1\\xa6\\xa5\\x80\\x76\\xa1\\x1e\\xa0\\x77\\x96\\x79\\x9a\\x5f\\x08\\xa4\\xf7\\x25\"\n\"\\x75\\x06\\x7c\\x85\\x85\\x86\\x7e\\x1b\\x85\\x82\\x8d\\x90\\x7b\\x1f\\x96\\x6b\\x74\\x8f\\x74\\x1b\\x30\\x49\\x4d\\x37\\x49\\xb4\\x5d\\xf0\\x60\\x1f\\xd0\\x6d\"\n\"\\xa6\\x72\\x6b\\x1a\\x64\\x6d\\x71\\x5e\\x45\\x5d\\xb8\\xe2\\x76\\x1e\\x6f\\xfb\\x39\\xa4\\x06\\xa1\\x96\\x91\\x91\\x94\\x1b\\x90\\x93\\x89\\x87\\x95\\x1f\\x9d\"\n\"\\x83\\x9d\\x87\\xb0\\x83\\x65\\x36\\x18\\x39\\x0a\\x7b\\x7e\\x8e\\x94\\x73\\x1f\\x85\\x8d\\x2f\\x0a\\x0e\\x20\\x2f\\x1d\\x82\\xf7\\x5e\\x20\\x0a\\x20\\x2f\\x1d\"\n\"\\xfb\\x4f\\xfd\\x2f\\x4a\\x1d\\xc3\\xf7\\x07\\x9f\\x1d\\xf7\\x9c\\x16\\xf3\\xf7\\x53\\x05\\xa1\\xb3\\x97\\xaa\\x9e\\x1a\\xa8\\x74\\xa0\\x6b\\x4c\\x63\\x55\\x34\"\n\"\\x8a\\x1e\\x88\\xfb\\x52\\x05\\x0e\\xbb\\xf7\\xa1\\xf8\\x63\\x15\\xfb\\x1e\\x8c\\x31\\x30\\xfb\\x21\\x1a\\xfb\\x26\\xe3\\x28\\xf7\\x16\\xf7\\x13\\xe9\\xf2\\xf7\"\n\"\\x20\\xdb\\x70\\xc6\\x4f\\xbd\\x1e\\xf7\\x2f\\x6b\\x05\\xd7\\x07\\xfb\\xb3\\x6d\\x15\\xc1\\xa5\\x45\\xfb\\x23\\xfb\\x17\\x6e\\x43\\x58\\x56\\x6f\\xd2\\xf7\\x1a\"\n\"\\xf7\\x21\\xa6\\xd1\\xc1\\x1f\\x0e\\xf8\\x8c\\xf8\\x1b\\xf8\\x9a\\xc1\\x1d\\xfb\\x14\\xfb\\x00\\x15\\x92\\x36\\x96\\x62\\xa9\\x5e\\x08\\x4c\\xb5\\xcb\\x6b\\xde\"\n\"\\x1b\\xd8\\xc7\\xa6\\xc1\\xb5\\x1f\\xaf\\xba\\x9a\\xb8\\x92\\xe8\\x80\\x59\\x80\\x75\\x71\\x6d\\x08\\x54\\x5b\\x4f\\x71\\x3a\\x1b\\x3a\\x4f\\xa5\\xc2\\x5b\\x1f\"\n\"\\x71\\xa9\\x80\\xa1\\x80\\xbd\\x08\\xf7\\xee\\xf7\\x00\\xc1\\x1d\\xfb\\x01\\xf7\\x68\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\"\n\"\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\\xf7\\x37\\xfb\\x5e\\x1f\\x89\\x5a\\x15\\xf7\\x45\\xf7\\x21\\xfb\\x20\\xfb\\x44\\xfb\\x43\"\n\"\\xfb\\x21\\xfb\\x21\\xfb\\x43\\xfb\\x41\\xfb\\x23\\xf7\\x21\\xf7\\x3e\\xf7\\x47\\xf7\\x1e\\xf7\\x22\\xf7\\x44\\x1f\\x0e\\xf8\\x8c\\xf7\\xbb\\x16\\xf8\\x77\\xa2\"\n\"\\x06\\xfb\\x35\\x93\\x3f\\xe0\\x8e\\xf7\\x3e\\x08\\x38\\xb7\\xb9\\x6a\\xd4\\x1b\\xd1\\xc5\\xc9\\xd5\\xcf\\x71\\xb4\\x20\\xec\\x1f\\xfb\\x01\\xf0\\x78\\xa6\\x64\"\n\"\\xf7\\x09\\x7b\\x2e\\x51\\x37\\x20\\x34\\x08\\x3a\\x48\\x69\\x53\\x4b\\x1a\\x40\\xc8\\x4d\\xd4\\xb5\\xb4\\x9c\\xa9\\xab\\x1e\\x9e\\x9d\\x96\\x9a\\x9c\\xb0\\x91\"\n\"\\xfb\\x3b\\x34\\x2c\\xfb\\x33\\x8a\\x08\\x0e\\xf8\\x8c\\xf7\\xee\\xf9\\x5b\\x15\\xf7\\x85\\x06\\xf4\\x8a\\xa5\\x75\\x9a\\x26\\x08\\xa2\\x06\\x82\\xf7\\x39\\x05\"\n\"\\xfc\\xaf\\x06\\xf7\\x66\\xfc\\x67\\xfb\\x6e\\xfc\\x2c\\x05\\xf8\\xc8\\x06\\xbc\\xf7\\x66\\x05\\x74\\x06\\x6f\\x3b\\x6c\\x78\\x26\\x8c\\x08\\xfb\\xbc\\x06\\xf7\"\n\"\\x49\\xf7\\xf4\\x05\\x0e\\xf8\\x8c\\xf7\\xcd\\xf8\\x77\\x15\\x6e\\x66\\x7c\\x67\\x85\\x5b\\x08\\xfb\\x05\\x54\\xf7\\x05\\x06\\x8f\\x61\\x9e\\x5b\\xa6\\x6a\\x3b\"\n\"\\x3c\\x18\\xb1\\x65\\xdb\\xdb\\xb1\\x6e\\xb2\\x7b\\xb8\\x86\\x19\\xfb\\x05\\xc1\\xf7\\x05\\x07\\xb7\\x90\\xb9\\x9e\\xab\\xa5\\xdb\\x3b\\x18\\xb0\\xb1\\x3b\\xdb\"\n\"\\xa8\\xae\\x9c\\xb5\\x90\\xb8\\x19\\xf7\\x05\\xc2\\xfb\\x05\\x06\\x86\\xb6\\x79\\xb7\\x70\\xad\\xda\\xda\\x18\\x66\\xb1\\x3b\\x3b\\x69\\xa6\\x62\\x9d\\x5c\\x91\"\n\"\\x19\\xf7\\x04\\x55\\xfb\\x04\\x07\\x60\\x86\\x5f\\x79\\x68\\x6f\\x3b\\xdb\\x18\\x65\\x65\\x05\\xf7\\x9c\\x55\\x15\\xec\\xd8\\x40\\x2d\\x2b\\x3f\\x3e\\x2c\\x2d\"\n\"\\x3e\\xd8\\xea\\xe7\\xd8\\xd9\\xe6\\x1f\\x0e\\x68\\xf8\\x67\\xf8\\x57\\x15\\xfb\\xcb\\x06\\x45\\x88\\x7e\\x86\\x79\\x6d\\x4d\\xfb\\x08\\x18\\xbb\\x7c\\xb5\\xc7\"\n\"\\xad\\x9a\\xe1\\x8a\\x19\\xb7\\x06\\x72\\x7f\\x7a\\x7f\\x7a\\x78\\x7b\\x78\\x89\\x82\\x86\\x51\\x08\\xfb\\x21\\x07\\x77\\x8f\\x7c\\x94\\x75\\x1e\\x72\\x96\\xa3\"\n\"\\x79\\xa0\\x1b\\x8f\\x8e\\x8c\\x8c\\x90\\x1f\\xf7\\x1a\\xbc\\x05\\xb1\\x07\\x80\\x70\\x81\\x88\\x80\\x1b\\x7f\\x7f\\x92\\x97\\x86\\x1f\\x84\\x99\\x89\\x9e\\xcd\"\n\"\\x1a\\xd9\\x07\\x8c\\xc0\\x8f\\x9c\\x9c\\xa3\\x08\\xf7\\x2b\\x06\\x0e\\xfb\\x37\\xf7\\x67\\xf7\\xbd\\x15\\xf7\\x0c\\xe9\\xb7\\x2d\\xf7\\x3d\\x72\\x07\\x4e\\x35\"\n\"\\x63\\x5e\\x4a\\x54\\x08\\x70\\xbf\\xfb\\x0c\\x4f\\x5c\\xc7\\xfb\\x31\\x84\\x0a\\xf7\\x1a\\xe6\\xba\\x07\\x0e\\x6b\\xf7\\xe7\\xf8\\x61\\x15\\xfb\\x13\\xf7\\x3d\"\n\"\\x72\\x06\\x4e\\x35\\x63\\x5e\\x4a\\x54\\x08\\x70\\xbf\\xfb\\xd8\\x84\\x0a\\xf7\\xc1\\xd6\\x07\\x80\\x83\\x95\\x78\\x05\\xf4\\xc7\\xb7\\xc4\\xda\\x1a\\xca\\x67\"\n\"\\xb5\\x55\\x5d\\x6e\\x6e\\x5e\\x60\\xa5\\x6f\\xb3\\x8f\\x90\\x8b\\x8c\\x90\\x1e\\x8c\\x8e\\x8e\\x8b\\x8c\\x1b\\x94\\x93\\x83\\x80\\x79\\x80\\x73\\x7b\\x79\\x1f\"\n\"\\x0e\\xfb\\x37\\xf7\\x62\\x80\\x15\\xc2\\x93\\xb1\\xab\\xac\\xd2\\x72\\x96\\x18\\x69\\x1d\\xf7\\xc1\\xe9\\xb7\\x2d\\xf7\\x3d\\x72\\x07\\x4f\\x36\\x63\\x5e\\x49\"\n\"\\x53\\x08\\x70\\xbf\\xfb\\xd8\\x07\\x8d\\x4e\\xab\\x67\\xc5\\x84\\x64\\x36\\x18\\x97\\xac\\x1d\\x85\\x8d\\x7b\\x66\\x05\\x7e\\xb0\\xa5\\x86\\xad\\x1b\\xdb\\x4f\"\n\"\\x0a\\x7e\\x1f\\x0e\\xa5\\xf7\\x9f\\xf9\\x26\\x15\\x44\\x4c\\x60\\x43\\x68\\x1f\\x76\\x5f\\x7d\\x34\\x2f\\x1a\\xfb\\x2d\\xa4\\x35\\xc7\\x57\\x1e\\x72\\xa7\\xb4\"\n\"\\x7d\\xb4\\x1b\\xb4\\xb3\\x9a\\xa4\\xa6\\x1f\\xcb\\xc7\\xa8\\xe5\\xf7\\x23\\x1a\\xf7\\x29\\x74\\xe0\\x52\\xc4\\x1e\\xa7\\x6f\\x62\\x9b\\x60\\x1b\\x37\\xfb\\xaf\"\n\"\\x15\\x8c\\xf1\\x91\\xca\\x98\\xb1\\x08\\xa5\\x93\\xa3\\x9f\\xa1\\x1b\\xab\\xa4\\x70\\x5d\\x96\\x1f\\x94\\x65\\x90\\x57\\x35\\x1a\\x61\\x04\\x8a\\xfb\\x08\\x88\"\n\"\\x48\\x87\\x6b\\x08\\x4a\\x81\\x76\\x6e\\x66\\x1b\\x6c\\x74\\xa2\\xb8\\x7f\\x1f\\x80\\xb1\\x88\\xbc\\x8a\\xf7\\x2e\\x08\\x0e\\xfb\\x37\\xf7\\x28\\xf8\\x7d\\x15\"\n\"\\xb0\\x06\\x8e\\x99\\x8d\\x98\\x8d\\x94\\x08\\x9c\\xd0\\x8b\\x8d\\x9b\\x1a\\xa5\\x79\\x9f\\x73\\x72\\x79\\x77\\x72\\x7a\\x8c\\x86\\x9b\\x49\\x1e\\x90\\x6f\\x05\"\n\"\\x0e\\xc7\\x23\\x0a\\xfb\\x34\\xf9\\x33\\xa5\\x0a\\x8e\\x54\\x92\\x72\\x9f\\x6e\\x08\\x68\\xcf\\x1d\\x91\\xbe\\x08\\x0e\\xc7\\x23\\x0a\\xfc\\x4a\\xf8\\x90\\x98\"\n\"\\x1d\\xaa\\x3c\\x1d\\x7b\\x1e\\x0e\\xc7\\x23\\x0a\\x2d\\xf8\\xfd\\x22\\x0a\\x8f\\x8e\\xfb\\x4d\\x15\\x34\\xf8\\x7c\\xe2\\x07\\xfc\\x7c\\xf7\\x20\\x15\\x34\\xf8\"\n\"\\x7c\\xe2\\x07\\x0e\\xfb\\x8a\\x0e\\xfb\\x37\\xd5\\x1d\\xf7\\x3f\\x48\\x1d\\xfb\\x8a\\xfb\\xe9\\x4a\\x1d\\xfb\\x37\\x82\\x1d\\xfb\\x61\\xfd\\x8a\\x4a\\x1d\\xfb\"\n\"\\x37\\xf7\\xdf\\xf9\\x11\\x22\\x0a\\xfb\\x8a\\x50\\x1d\\xf7\\x17\\xf7\\xd1\\xf9\\x30\\x15\\x6f\\x06\\xfb\\xa1\\xfd\\x30\\x05\\xf8\\xec\\x06\\xfb\\x5e\\xf1\\x15\"\n\"\\xfb\\x8b\\x06\\x65\\x7f\\x8f\\x99\\x94\\x8f\\x98\\x91\\x9b\\x1f\\xf7\\x14\\xf7\\xcf\\x05\\x0e\\xf7\\xc5\\xf8\\xab\\xf7\\x00\\x15\\xba\\x91\\xa5\\x93\\xa5\\x9a\"\n\"\\x08\\xd0\\xb1\\xb5\\xe2\\xf3\\x1a\\xf7\\x52\\xfb\\x1c\\xf7\\x10\\xfb\\x64\\xfb\\x65\\xfb\\x1c\\xfb\\x10\\xfb\\x52\\x30\\xad\\x39\\xc2\\x61\\x1e\\xaa\\x73\\xaa\"\n\"\\x80\\xc6\\x83\\x91\\x7e\\x18\\x8f\\x6d\\x78\\x8d\\x6c\\x1b\\x61\\x06\\x56\\x8c\\x81\\x94\\x7f\\xc8\\x08\\x4e\\x06\\xb0\\xfb\\x40\\x05\\xf7\\xcc\\xed\\x06\\x5f\"\n\"\\x9b\\x79\\x96\\x77\\xa4\\x08\\x66\\xb9\\x74\\xe5\\xed\\x1a\\xf4\\xa0\\xcf\\xba\\xba\\x1e\\xa6\\xa6\\xb5\\x9b\\xb6\\x1b\\xb6\\xb4\\x7b\\x70\\xa6\\x1f\\xba\\x5b\"\n\"\\xa0\\x48\\x22\\x1a\\x37\\x79\\x36\\x6f\\x5d\\x1e\\x74\\x66\\x77\\x7c\\x56\\x78\\x08\\x29\\xf7\\xcc\\x07\\xb0\\xf7\\x40\\x05\\x4e\\x06\\x7f\\x4f\\x81\\x81\\x56\"\n\"\\x8a\\x08\\x61\\x06\\x6d\\x78\\x89\\x87\\x6c\\x1f\\x0e\\xd2\\xf2\\xf8\\x56\\x15\\xfb\\x6f\\x07\\x8a\\xfb\\x06\\x84\\x3d\\x7a\\x27\\x08\\x85\\x6a\\x89\\x7b\\x7f\"\n\"\\x1a\\x63\\x9f\\x74\\xb0\\xae\\xa5\\xa4\\xac\\x95\\x87\\x9c\\x85\\x9e\\x1e\\x7e\\xaf\\x81\\xad\\x86\\xaa\\x08\\x76\\xa0\\x9f\\x82\\xa5\\x1b\\xb8\\xb1\\xa6\\xc2\"\n\"\\xab\\x1f\\x39\\x07\\xf7\\x49\\xc2\\x86\\x9f\\x05\\x89\\x83\\x86\\x8a\\x87\\x1b\\x74\\x80\\x9f\\xb6\\x1f\\xf7\\xd9\\xfb\\x11\\xfb\\xca\\x07\\x4f\\x77\\x75\\x6f\"\n\"\\x71\\x1b\\x82\\x83\\x90\\x93\\x84\\x1f\\x81\\x99\\x89\\x98\\xc1\\x1a\\xf7\\xc4\\x07\\x0e\\x41\\xf7\\xad\\xf8\\x5d\\x15\\x41\\x4f\\x6d\\x4e\\x5c\\x1f\\x64\\x59\"\n\"\\x75\\x49\\x4a\\x1a\\x4f\\x9f\\x54\\xae\\x67\\x1e\\x70\\xa5\\xaf\\x7f\\xc1\\x1b\\x9c\\x9c\\x8c\\x8d\\x9b\\x1f\\x8e\\x9b\\x99\\x8c\\x92\\x1b\\xa4\\x9a\\x7b\\x6f\"\n\"\\x69\\x77\\x71\\x71\\x82\\x82\\x8e\\x92\\x84\\x1f\\xa3\\x6f\\x84\\x8e\\x75\\x1b\\x69\\x71\\x72\\x6c\\x68\\xac\\x71\\xb6\\xe1\\xd0\\xd6\\xe8\\xce\\x68\\xb7\\x56\"\n\"\\x84\\x7a\\x8a\\x89\\x7b\\x1f\\x89\\x7f\\x7e\\x8a\\x80\\x1b\\x57\\x76\\xb2\\xea\\xf7\\x00\\xab\\xcd\\xc0\\x9e\\x97\\x82\\x75\\x93\\x1f\\x57\\x9f\\x95\\x81\\xad\"\n\"\\x1b\\xaf\\xa3\\xa3\\xb0\\xc1\\x5f\\xaf\\x49\\x1f\\x0e\\xf7\\x3f\\xa2\\xf9\\x12\\x15\\xcd\\x87\\x9d\\x7d\\x8d\\x57\\x08\\xfc\\x6e\\x07\\x89\\x57\\x7d\\x7f\\x45\"\n\"\\x85\\x08\\x73\\xf8\\xd1\\x07\\xb2\\xf7\\x60\\x05\\x70\\x06\\x6c\\x49\\x77\\x6f\\x68\\x6f\\x08\\x67\\x5e\\x56\\x7b\\x40\\x1b\\x4c\\x79\\x97\\xb6\\x1f\\xf7\\x81\"\n\"\\x07\\xf6\\xb3\\x65\\xfb\\x06\\x96\\x1f\\xa5\\xf7\\xe0\\x71\\x06\\x7d\\xfb\\x04\\x64\\x67\\x22\\x8c\\x08\\xf7\\x78\\x07\\xb0\\x97\\x94\\xc1\\xe3\\xc0\\x7f\\x6f\"\n\"\\xaa\\x1e\\xaa\\x70\\x99\\x6d\\x98\\x48\\x08\\xa3\\xf7\\x59\\xfc\\xc9\\x06\\xf8\\x13\\xc8\\x15\\xfb\\x1b\\xf7\\x2e\\x05\\x9d\\x7c\\x78\\x94\\x78\\x1b\\x71\\x77\"\n\"\\x78\\x72\\x78\\x95\\x7e\\xa9\\x78\\xc4\\x0a\\xf7\\xae\\x6f\\x1d\\x59\\xf7\\x29\\x15\\xfb\\x1a\\xf7\\x2e\\x05\\x9d\\x7b\\x79\\x94\\x78\\x1b\\x71\\x77\\x78\\x72\"\n\"\\x78\\x95\\x7d\\xa8\\x79\\xc4\\x0a\\x57\\x77\\x1d\\xa2\\xf7\\x85\\x15\\xfb\\x1a\\xf7\\x2e\\x05\\x9c\\x7c\\x78\\x95\\x78\\x1b\\x71\\x77\\x77\\x73\\x78\\x96\\x7d\"\n\"\\xa7\\xda\\x1d\\xdb\\x3f\\x0a\\xa3\\xf7\\x22\\x15\\xfb\\x1a\\xf7\\x2e\\x05\\x9c\\x7b\\x79\\x95\\x78\\x1b\\x71\\x77\\x77\\x73\\x78\\x95\\x7d\\xa8\\xda\\x1d\\xf7\"\n\"\\x07\\xf7\\x9f\\xf8\\xdb\\x15\\xb0\\x97\\x94\\xbe\\xe4\\xc5\\x7a\\x69\\xa9\\x1e\\xa0\\x72\\x96\\x72\\x99\\x4c\\x08\\xa3\\xf7\\x59\\xfc\\xc0\\x73\\x06\\xcd\\x88\"\n\"\\x9f\\x7c\\x8c\\x57\\x08\\xfb\\x69\\x33\\x6c\\x07\\xe3\\x8a\\x05\\xfb\\x79\\x07\\x89\\x57\\x7d\\x80\\x44\\x84\\x08\\x73\\xf7\\xf5\\xa3\\x07\\x34\\x8e\\x79\\x97\"\n\"\\x89\\xc2\\x08\\xf7\\x78\\x07\\xee\\x89\\xaf\\x66\\x98\\xfb\\x05\\x08\\xa4\\xf7\\xe0\\x72\\x06\\x7a\\xfb\\x04\\x68\\x68\\x2b\\x8c\\x08\\x0e\\x20\\xf7\\x5b\\xf7\"\n\"\\x8c\\x15\\xf7\\x3a\\xb1\\x07\\xd3\\x8a\\xae\\x68\\x8f\\x40\\x08\\x9f\\x06\\x81\\xf7\\x28\\x05\\xfb\\xdb\\x76\\x06\\xa8\\x9b\\x75\\x68\\x89\\x1f\\xfb\\x11\\x54\"\n\"\\x5f\\xc2\\xfb\\x11\\xb6\\x1d\\xf7\\x11\\xe8\\xb7\\x07\\x0e\\xf8\\x8a\\xf8\\x20\\xf7\\xbb\\x15\\xfb\\x5b\\x21\\x1d\\x83\\x77\\xf7\\xba\\x9f\\x83\\x06\\x55\\x8e\"\n\"\\x7d\\x9c\\x8d\\xc3\\x08\\xf7\\x5b\\x07\\x3c\\x0a\\x9a\\x70\\x90\\x81\\xdb\\x1d\\xec\\x8d\\xc0\\x5d\\x91\\x2e\\x08\\xa9\\xf7\\x43\\x71\\x06\\x65\\x8c\\x7c\\x94\"\n\"\\x73\\xb3\\xfb\\x64\\xf7\\xf5\\x18\\xcb\\xdc\\xda\\xec\\xad\\xa1\\xd2\\x8c\\x19\\x9f\\xfb\\x7e\\x77\\xa1\\x07\\xa5\\x9c\\x7f\\x77\\x7e\\x83\\x7d\\x79\\x74\\x1f\"\n\"\\xfb\\x3c\\xfb\\x61\\x05\\xf7\\x67\\x07\\x88\\xc3\\x9a\\x9c\\xc1\\x8e\\x08\\x93\\x9f\\xfb\\xba\\x77\\x93\\x06\\xc0\\x88\\x9a\\x7a\\x8f\\x0a\\xa0\\x9f\\xfb\\x7e\"\n\"\\x77\\x06\\xd3\\x8a\\xac\\x75\\xda\\x2a\\xcb\\x3a\\x18\\xfb\\x64\\xfb\\xf5\\x67\\x4e\\x85\\x85\\x69\\x8a\\x19\\x77\\xf7\\xba\\x9f\\x73\\x07\\x6e\\x7c\\x93\\x9a\"\n\"\\x92\\x90\\x97\\x99\\xa5\\x1f\\xf7\\x1b\\xf7\\x7e\\x05\\x0e\\xf7\\xa0\\xf7\\x8b\\x16\\xf7\\x5a\\x9f\\x06\\x71\\x90\\x7e\\x9f\\x8d\\xad\\x08\\xf7\\x05\\x07\\x9a\"\n\"\\x9e\\xde\\xfb\\x1f\\x05\\x9c\\x6f\\x8d\\x87\\x85\\x1a\\x82\\x83\\x86\\x7a\\x1e\\x82\\x77\\xc8\\x06\\xed\\x8d\\xc0\\x63\\x91\\x40\\x1d\\x65\\x8c\\x7d\\x94\\x72\"\n\"\\xb3\\xfb\\x16\\x9f\\x0a\\x9a\\x95\\x83\\x80\\x8d\\x0a\\xfb\\x5a\\x77\\x07\\xa4\\x86\\x97\\x78\\x8a\\x69\\x08\\xfb\\x16\\x07\\xfb\\x10\\xf7\\x1e\\x05\\x80\\x98\"\n\"\\x85\\xce\\x1d\\x9c\\x7f\\x45\\xc6\\x1f\\xb6\\x5a\\xfb\\x26\\xfb\\x7e\\x71\\x5f\\x89\\x8a\\x74\\x8a\\x19\\x77\\xf7\\x66\\x9f\\x83\\x07\\x7a\\x83\\x90\\x94\\x90\"\n\"\\x8f\\x94\\x9a\\xa3\\x1f\\xde\\xf7\\x1f\\x99\\x78\\x05\\xfb\\x05\\x07\\x8c\\x68\\x7f\\x78\\x72\\x86\\x08\\x0e\\xab\\xf7\\xa5\\x7d\\x15\\xf7\\x1d\\x96\\xe1\\xd4\"\n\"\\xf4\\x1a\\xec\\x55\\xc7\\x23\\x9f\\x1e\\xe1\\x9c\\xb8\\xc3\\xa4\\x1d\\x73\\xfb\\x5c\\xa3\\x06\\x92\\xbf\\x93\\xa4\\x9c\\xa3\\x08\\xaa\\xa1\\xad\\x9c\\xb4\\x1b\"\n\"\\xcb\\xad\\x5e\\x38\\x4d\\x77\\x60\\x66\\x7c\\x1f\\x85\\x7d\\x76\\x89\\x68\\x1b\\x81\\x87\\x8b\\x8c\\x81\\x1f\\x63\\x07\\x8d\\xa0\\x8b\\x8b\\x99\\x1b\\xbb\\xa8\"\n\"\\x82\\x75\\xa0\\x1f\\xa4\\x73\\x97\\x65\\x59\\x1a\\x2b\\x5d\\x53\\x3c\\x3a\\x57\\xbd\\xe9\\x7b\\x1e\\x63\\x85\\x97\\xfb\\x07\\xdb\\x41\\xf7\\x07\\x8a\\x19\\x67\"\n\"\\x3a\\x96\\xac\\x1d\\x88\\x8c\\x8b\\x8b\\x89\\x8c\\x7b\\x66\\x18\\x7e\\xaf\\xa6\\x86\\xac\\xa1\\x0a\\x2d\\xf7\\x6b\\x83\\x15\\xec\\x96\\xc5\\xbb\\xcf\\x1a\\xcb\"\n\"\\x63\\xb5\\x3f\\x9c\\x1e\\xca\\x9c\\xab\\xb0\\xc2\\x1a\\xcc\\x4d\\xb8\\x30\\x73\\x7b\\x88\\x82\\x6e\\x1e\\x87\\x7e\\x83\\x89\\x84\\x1b\\x7e\\x85\\x91\\x97\\x1f\"\n\"\\x7a\\x06\\x84\\xfb\\x21\\x05\\xa3\\x06\\xd0\\x91\\xa6\\xad\\xbc\\x1b\\xb3\\xa2\\x6c\\x56\\x68\\x82\\x71\\x7a\\x7e\\x1f\\x83\\x80\\x7f\\x89\\x6f\\x1b\\x96\\x0a\"\n\"\\x9c\\x3c\\xbb\\x62\\xdb\\x86\\x19\\x64\\x35\\x96\\x83\\x05\\x8e\\x96\\x92\\x8c\\x95\\x1b\\xa8\\x9c\\x7e\\x74\\x70\\x77\\x7d\\x65\\x7b\\x7e\\x8e\\x94\\x73\\x1f\"\n\"\\x85\\x8d\\x7b\\x66\\x05\\x7e\\xaf\\xa6\\x86\\xad\\x1b\\xda\\x4f\\x0a\\x7f\\x1f\\x0e\\xf7\\x6a\\xf7\\x94\\xf7\\xbb\\x15\\x3c\\x0a\\x9a\\x71\\x90\\x80\\xdb\\x1d\"\n\"\\xed\\x8d\\xbf\\x5d\\x92\\x2e\\x3f\\x1d\\x65\\x8c\\x7c\\x95\\x73\\xb2\\xfb\\x64\\xf7\\xf5\\x18\\xcb\\xdc\\xda\\xec\\xad\\xa1\\xd2\\x8c\\x19\\x9f\\xfb\\x7e\\xa7\"\n\"\\x1d\\x9c\\xc0\\x8e\\x08\\x93\\x9f\\xfb\\xc5\\x77\\x9e\\x06\\xc0\\x88\\x9a\\x7a\\x89\\x53\\x08\\xfc\\x6a\\x8e\\x0a\\x0e\\xb1\\x97\\xf8\\x57\\x15\\xb5\\x0a\\x8d\"\n\"\\x66\\x7b\\x48\\x0a\\x90\\x7e\\x9f\\x8d\\xad\\x08\\xf7\\x05\\x07\\x9a\\x9e\\xde\\xfb\\x1f\\x05\\x9c\\x6f\\x8d\\x86\\x86\\x1a\\x82\\x82\\x86\\x7b\\x1e\\x83\\x77\"\n\"\\xc8\\x06\\xed\\x8d\\xc0\\x63\\x91\\x40\\x1d\\x64\\x8c\\x7e\\x94\\x72\\xb3\\xfb\\x17\\x9f\\x0a\\x9b\\x94\\x84\\x7f\\x8d\\x0a\\x07\\x0e\\xf7\\x0b\\xf7\\xa7\\xf8\"\n\"\\x0f\\x15\\x78\\x73\\x05\\xf7\\x66\\x07\\x89\\xc4\\x9a\\x9c\\xbf\\x8e\\x08\\x93\\x9f\\xfb\\xc4\\x77\\x9e\\x06\\xc0\\x88\\x9a\\x7a\\xeb\\x1d\\x56\\x88\\x08\\x78\"\n\"\\x77\\xf7\\xc4\\x9f\\x83\\x06\\x56\\x8e\\x7d\\x9b\\x8d\\xc4\\x08\\xf7\\x5b\\x07\\x9e\\xa5\\x05\\xfb\\x74\\xc9\\xf7\\x0a\\x07\\xd3\\xfb\\x13\\x05\\x98\\x75\\x92\"\n\"\\x7c\\x84\\x1a\\x7c\\x7b\\x82\\x6f\\x1e\\x73\\x77\\xf7\\xba\\x9f\\x06\\x69\\x8c\\x85\\x91\\x67\\xc8\\xfb\\x65\\xf7\\xf5\\x18\\xcc\\xdb\\xda\\xed\\xac\\xa1\\xd3\"\n\"\\x8c\\x19\\x9f\\xfb\\x7e\\x77\\xa0\\x07\\xa6\\x9c\\x7f\\x76\\x7e\\x84\\x7e\\x77\\x73\\x1f\\x35\\x22\\x05\\xf7\\x0c\\x4d\\x07\\x0e\\x62\\xf7\\x5c\\xf7\\x9e\\x15\"\n\"\\x76\\x74\\x05\\xf7\\x16\\x07\\x8a\\xad\\x97\\x9e\\xa5\\x90\\x08\\x9f\\xfb\\x61\\xb5\\x0a\\x66\\x8d\\x7b\\x76\\x6e\\x1b\\x76\\xf7\\x61\\xa0\\x07\\x71\\x8f\\x7e\"\n\"\\x9f\\x8d\\xad\\x08\\xf7\\x06\\x07\\x9a\\x9d\\x91\\x81\\x05\\xfb\\x21\\xb5\\xd2\\x07\\xae\\x50\\x05\\x9b\\x70\\x8e\\x86\\x85\\x1a\\x82\\x82\\x87\\x7a\\x1e\\x84\"\n\"\\x76\\xf7\\x66\\xa0\\x06\\x73\\x89\\x8d\\xb6\\x71\\x1f\\xfb\\x25\\xf7\\x7e\\xb6\\xbd\\x05\\xd1\\xc6\\x9c\\x96\\xc0\\x1b\\x9f\\xfb\\x41\\x77\\x9f\\x07\\x9b\\x94\"\n\"\\x84\\x7f\\x83\\x85\\x80\\x80\\x7f\\x1f\\x4e\\x47\\x05\\xdb\\x61\\x07\\x0e\\xf7\\xdf\\xf7\\x88\\xf9\\x06\\x15\\xfc\\xa6\\x8e\\x0a\\xf7\\x5b\\x07\\x3c\\x0a\\x99\"\n\"\\x73\\x91\\x7d\\x8b\\x1d\\x76\\x7e\\x84\\x7d\\x78\\x75\\x1f\\xfb\\x3c\\xfb\\x61\\x05\\xf7\\x58\\x07\\x89\\xd2\\x97\\x9c\\xc3\\x8e\\xc8\\x1d\\x0e\\xf7\\x25\\xf7\"\n\"\\x3a\\xda\\x15\\x78\\x0a\\x83\\x86\\x7a\\x77\\x0a\\x7e\\x83\\x86\\x82\\x7f\\x7e\\x1f\\xfb\\x10\\xfb\\x1e\\x05\\xf7\\x15\\x07\\x89\\xb0\\x9b\\xa0\\xa9\\x8c\\x08\"\n\"\\x9f\\xfb\\xb4\\x07\\x81\\xfb\\x29\\x05\\x9f\\x06\\xd5\\x8e\\xaf\\xb1\\xd1\\x1b\\x0e\\xf7\\xae\\xf7\\x94\\xf7\\xd1\\x15\\xf7\\x95\\xfb\\x71\\x06\\x25\\x0a\\xf7\"\n\"\\x22\\x06\\xe9\\x8c\\xbf\\x5c\\x91\\x30\\x3f\\x1d\\x56\\x8d\\x7c\\x9c\\x8d\\xc3\\x08\\xf8\\x56\\x07\\x89\\xc5\\x9a\\x9d\\xc0\\x8e\\x08\\x9d\\x9f\\xfb\\xcf\\x77\"\n\"\\x9e\\x06\\xbf\\x88\\x9b\\x79\\x89\\x51\\x08\\xfb\\x62\\xfb\\x95\\xf7\\x62\\x6a\\x0a\\x0e\\xa9\\xf7\\xba\\xf7\\x96\\x15\\xfb\\x06\\xf7\\x07\\x06\\x8a\\xad\\x98\"\n\"\\x3e\\x1d\\x8a\\x9a\\x76\\x89\\x67\\x29\\x0a\\x8d\\x67\\x7c\\x75\\x6e\\x8a\\x08\\x77\\xf7\\x61\\x9f\\x07\\x71\\x8e\\x7e\\xa0\\x8c\\xae\\x08\\xf7\\x22\\xf7\\x06\"\n\"\\xfb\\x22\\x07\\x8d\\x68\\x7d\\x76\\x70\\x88\\x08\\x77\\xcd\\x07\\xee\\x8c\\xbe\\x64\\x91\\x40\\x1d\\x5f\\x8c\\x78\\x9b\\x8d\\xac\\x08\\xf7\\xb1\\x07\\x89\\xaf\"\n\"\\x9b\\xa0\\xa7\\x8c\\x08\\x9f\\xfb\\x62\\x77\\x07\\xa6\\x88\\x98\\x77\\x8a\\x68\\x08\\x0e\\xf8\\x10\\x79\\x15\\x8a\\x97\\x90\\x8b\\x94\\x1b\\xd0\\xc6\\x9d\\xaf\"\n\"\\xc1\\x1f\\xab\\xa1\\xa1\\xa0\\xb8\\xbc\\x6d\\xa4\\x18\\x7c\\x0a\\xb6\\x79\\x65\\xb6\\x1e\\xb6\\x65\\xa2\\x69\\xae\\x3f\\x37\\x0a\\x52\\x5a\\x96\\x5b\\x1b\\xfb\"\n\"\\x5c\\xfb\\x29\\xfb\\x2d\\xfb\\x62\\xfb\\x4b\\xf7\\x05\\xfb\\x1a\\xf7\\x46\\x6e\\x1f\\x66\\x39\\x68\\x0a\\x57\\xf7\\x85\\x7d\\x15\\xda\\x8e\\xc6\\xab\\xbe\\xd1\"\n\"\\x79\\x9d\\x18\\x5a\\x0a\\xfb\\x0f\\xd0\\x30\\xf6\\x77\\x1f\\x65\\x36\\x39\\x0a\\x7a\\x7e\\x8e\\x94\\x73\\x1f\\x88\\x8c\\x8b\\x8b\\x89\\x8c\\x7b\\x66\\x18\\x7e\"\n\"\\xaf\\xa5\\x86\\xad\\xa1\\x0a\\xf9\\x48\\xf9\\x2a\\x15\\xfb\\x6c\\x72\\x06\\xcc\\x87\\x9c\\x83\\x6e\\x1a\\x78\\x7d\\x6a\\x73\\x62\\x1e\\xfb\\x00\\xfb\\x49\\xfb\"\n\"\\x0a\\xf7\\x77\\x89\\x8f\\x89\\x8f\\x88\\x8f\\x19\\x7e\\xa2\\x87\\x97\\x96\\x1a\\xa1\\x9a\\x93\\xb3\\x1e\\xa4\\xa4\\xfb\\xdc\\x72\\x06\\xab\\x89\\xa6\\x79\\x9e\"\n\"\\x6a\\xf7\\x47\\xfb\\xd9\\x18\\xfb\\x24\\x07\\x89\\x42\\x80\\x80\\x3d\\x84\\x08\\x73\\xf7\\xe8\\xa3\\x07\\x3d\\x92\\x81\\x95\\x89\\xd5\\x08\\xf7\\x48\\x07\\xf7\"\n\"\\x4f\\xf7\\xc4\\x9a\\xa2\\x9d\\x96\\xad\\x8f\\x19\\x0e\\x60\\xf7\\xa7\\xf7\\x32\\x15\\x52\\xf7\\x3c\\x05\\x79\\xc8\\x8b\\x8b\\x97\\x90\\x0a\\xfb\\x57\\x07\\x8a\"\n\"\\x60\\x83\\x82\\x60\\x84\\x08\\x73\\xf7\\x7d\\xa3\\x07\\x68\\x8f\\x7e\\x9a\\xb0\\x1a\\xf7\\x67\\x07\\xc4\\xf7\\x5f\\xaa\\xf3\\x9a\\xa2\\xd4\\x1d\\x8b\\x8b\\x7a\"\n\"\\x52\\x1f\\x0e\\xf8\\x4a\\xf7\\x7b\\x15\\xcb\\x07\\xf7\\x4e\\xf7\\xc4\\x9a\\xa2\\x9d\\x96\\xad\\x8f\\x19\\xa4\\xfb\\x6b\\x72\\x07\\xcc\\x87\\x9c\\x83\\x6e\\x1a\"\n\"\\x78\\x7d\\x6b\\x72\\x61\\x1e\\xfb\\x00\\xfb\\x49\\xfb\\x0a\\xf7\\x77\\x8a\\x8e\\x05\\x77\\xaf\\x89\\x92\\x97\\x1a\\xa1\\x9a\\x93\\xb2\\x1e\\xa4\\xa4\\xfb\\xdb\"\n\"\\x72\\x06\\xab\\x8a\\xa6\\x78\\x9e\\x6a\\xf7\\x47\\xfb\\xd9\\x18\\x6f\\x39\\x61\\xdd\\x41\\x07\\x89\\x42\\x80\\x80\\x3d\\x84\\x08\\x73\\xf7\\xe7\\xa3\\x07\\x3d\"\n\"\\x92\\x81\\x95\\x8a\\xd5\\x08\\xd5\\xde\\xb5\\x07\\x0e\\x60\\xf7\\xbf\\x91\\x15\\xeb\\x07\\xc4\\xf7\\x5f\\xab\\xf4\\x99\\xa1\\xd4\\x1d\\x8a\\x89\\x7b\\x54\\x1f\"\n\"\\x5b\\xfb\\x3b\\x52\\xf7\\x3d\\x05\\x79\\xc8\\x8b\\x8b\\x96\\x90\\x0a\\x38\\x3f\\x58\\xd7\\x4e\\x07\\x8a\\x60\\x83\\x82\\x60\\x84\\x08\\x73\\xf7\\x7d\\xa3\\x07\"\n\"\\x67\\x8f\\x7f\\x9a\\xb0\\x1a\\xcb\\xdc\\xbe\\x07\\x0e\\xf7\\x4d\\xf7\\xae\\xf7\\x97\\x15\\xee\\xfb\\x49\\x05\\x91\\x80\\x8f\\x80\\x82\\x1a\\x7b\\x7b\\x80\\x71\"\n\"\\x1e\\x7c\\x77\\xf7\\x12\\x06\\xec\\x8e\\xc1\\x5c\\x91\\x2e\\x3f\\x1d\\x5d\\x8c\\x7c\\x98\\x5b\\xdd\\xfb\\x22\\xf7\\x91\\x18\\xea\\xf7\\x1e\\xcc\\xe7\\xa2\\x9d\"\n\"\\xc9\\x92\\x19\\x9f\\xfb\\x74\\x77\\x97\\x07\\xaa\\xa3\\x77\\x72\\x7a\\x83\\x79\\x7b\\x73\\x1f\\x37\\xfb\\x0b\\x3b\\xf7\\x26\\x05\\x7c\\xa8\\x87\\x95\\x94\\x1a\"\n\"\\x9c\\x9c\\x97\\xa4\\x1e\\x9b\\x9f\\xfb\\xc0\\x77\\x06\\xbd\\x88\\xa7\\x6f\\xc4\\x23\\xf7\\x0c\\xfb\\x6b\\x18\\xfb\\x05\\xfb\\x37\\x05\\x3e\\x55\\x65\\x6b\\x63\"\n\"\\x1b\\x81\\x77\\xf7\\x79\\x9f\\x78\\x06\\x65\\x75\\x9a\\xa4\\x98\\x91\\x9a\\x9a\\xa1\\x1f\\x0e\\x73\\xf7\\x60\\xf7\\x38\\x15\\xc5\\x2c\\x05\\x95\\x7b\\x8f\\x82\"\n\"\\x85\\x1a\\x7d\\x7c\\x85\\x74\\x8d\\x1e\\x8a\\x77\\xd2\\x06\\xee\\x8c\\xbe\\x64\\x92\\x40\\x1d\\x65\\x8c\\x7d\\x94\\x72\\xb3\\xfb\\x03\\xf7\\x45\\x18\\xdd\\xf7\"\n\"\\x02\\xac\\xb9\\x98\\x94\\xb1\\x8c\\x19\\x9f\\xfb\\x25\\x77\\x07\\xa6\\x86\\x93\\x86\\x7c\\x1a\\x82\\x83\\x7b\\x80\\x7c\\x1e\\x54\\x43\\x55\\xe2\\x05\\x82\\x9a\"\n\"\\x88\\x93\\x92\\x1a\\x96\\x94\\x90\\xab\\x8f\\x1e\\x9f\\xfb\\x78\\x77\\x07\\xa7\\x88\\x90\\x86\\xb7\\x44\\xf0\\xfb\\x34\\x18\\x39\\xfb\\x01\\x68\\x5b\\x78\\x7f\"\n\"\\x61\\x88\\x19\\x77\\xf7\\x35\\x9f\\x07\\x7f\\x8c\\x83\\x8b\\x89\\x8c\\x08\\x7d\\x8e\\x82\\x93\\x95\\x1a\\x95\\x91\\x97\\x98\\x9d\\x1e\\x0e\\xf7\\x82\\xf9\\x48\"\n\"\\xf9\\x16\\x15\\x9f\\xfb\\xc8\\x77\\x96\\x07\\xc0\\x89\\x9b\\x78\\x89\\x51\\x08\\xfb\\x6c\\x07\\x77\\x57\\x6c\\x84\\xa6\\x1d\\x96\\x9f\\xfb\\xc3\\x51\\x1d\\xbc\"\n\"\\x95\\xa6\\xd5\\x1e\\xfb\\x65\\x07\\x8d\\x53\\x7b\\x7a\\x56\\x88\\x08\\x6b\\x77\\xf7\\x4a\\x06\\xd2\\x83\\xb5\\x5a\\x90\\x3d\\x08\\xa8\\xf7\\x1b\\x06\\x9f\\x71\"\n\"\\x07\\x5a\\x8e\\x7e\\x97\\x8f\\xb4\\x08\\xf8\\x7b\\x07\\x88\\xc5\\x9b\\x9e\\xbf\\x8d\\x08\\x0e\\xcf\\xf8\\x86\\xf8\\x58\\x15\\xfb\\x66\\x77\\x06\\xa8\\x8a\\x9a\"\n\"\\x75\\x89\\x67\\x08\\xfb\\x23\\x07\\x84\\x7e\\x7f\\x88\\x7c\\x1b\\x62\\x76\\xa0\\xb6\\x1f\\xe4\\xe2\\x1d\\x77\\x07\\xa4\\x87\\x99\\x76\\x89\\x69\\x08\\x41\\x07\"\n\"\\x3a\\xbb\\x65\\xf1\\xa6\\x9e\\x8e\\x96\\xaa\\x1e\\xfb\\x07\\x07\\x8d\\x67\\x7c\\x76\\x6e\\x8a\\x08\\x85\\x76\\xdb\\x06\\xcc\\x84\\xb4\\x60\\x8f\\x4a\\x08\\xa8\"\n\"\\xf7\\x1d\\x71\\x06\\x79\\x8c\\x8a\\x8e\\x8a\\xad\\x08\\xf7\\xcd\\x07\\x89\\xb0\\x9b\\xa0\\xa8\\x8c\\x08\\x0e\\xf7\\x51\\xf8\\x00\\xf7\\xaf\\x15\\xa8\\x94\\x95\"\n\"\\x8e\\xa5\\x95\\x08\\xfb\\x65\\x21\\x1d\\x6b\\x77\\xf7\\xdd\\x9f\\xd2\\x1d\\x9d\\xc0\\x8e\\x08\\x9e\\x9f\\xfb\\xc8\\x77\\x96\\x06\\xc0\\x88\\x9a\\x79\\x89\\x51\"\n\"\\x08\\xfb\\x6c\\x07\\x77\\x82\\x71\\x82\\x78\\x87\\x08\\xf7\\x73\\x40\\xfb\\x77\\x07\\x5a\\x96\\x79\\xa7\\x8d\\xcd\\x08\\xf7\\x1d\\x07\\x89\\xc5\\x9a\\x9d\\xc1\"\n\"\\x8e\\x08\\x95\\x9f\\xfb\\xc2\\x77\\x98\\x06\\xc0\\x89\\x9a\\x78\\x89\\x51\\x08\\xfb\\x28\\x07\\x27\\xc4\\x5b\\xf7\\x0c\\x9a\\x93\\x8c\\x8c\\x96\\x1e\\xfb\\x21\"\n\"\\xd6\\x07\\x0e\\x6a\\xf7\\x5a\\xf7\\x75\\x15\\x78\\x94\\x81\\xa0\\xa7\\x1a\\xe5\\x07\\x89\\xad\\x98\\x9f\\xa5\\x8f\\x08\\x9f\\xfb\\x5b\\x77\\x07\\xa5\\x87\\x98\"\n\"\\x77\\x89\\x69\\x08\\x40\\x07\\x39\\xb9\\x68\\xf7\\x00\\x8a\\x1e\\x20\\xb8\\xf7\\x05\\x07\\x91\\x8c\\x96\\x8e\\x95\\x8e\\x08\\xfb\\x06\\x07\\x8d\\x67\\x7c\\x75\"\n\"\\x6e\\x8a\\x08\\x85\\x77\\xf7\\x6c\\x9f\\x06\\xc2\\x0a\\x89\\xaf\\xec\\x1d\\xa8\\x8a\\x9a\\x76\\x89\\x67\\x08\\xfb\\x23\\x07\\x82\\x86\\x84\\x89\\x80\\x89\\x08\"\n\"\\xf7\\x1f\\x5e\\x07\\x0e\\xf7\\x51\\xf7\\x94\\xf8\\xca\\x15\\x89\\xc3\\x9a\\x9c\\xc0\\x8e\\x08\\xab\\x9f\\xfb\\xdd\\x77\\x9e\\x06\\xc0\\x88\\x9a\\x7a\\x89\\x53\"\n\"\\x08\\xfc\\x67\\x07\\x8d\\x51\\x7b\\x78\\x57\\x89\\x08\\x78\\x77\\xf7\\xc7\\x9f\\x81\\x06\\x56\\x8d\\x7c\\x9e\\x8d\\xc5\\x08\\xf7\\x6c\\x07\\x9f\\xc0\\xa7\\x92\"\n\"\\xac\\x1b\\xad\\xa4\\x80\\x77\\x9a\\x1f\\x97\\x7b\\x8f\\x78\\x62\\x1a\\xfb\\x1c\\x07\\x8d\\x51\\x7c\\x78\\x56\\x89\\x08\\x80\\x77\\xf7\\xc2\\x9f\\x7e\\x06\\x56\"\n\"\\x8d\\x7c\\x9e\\x8d\\xc5\\x08\\xf7\\x27\\x07\\xed\\x52\\xbd\\xfb\\x05\\x4f\\x65\\x83\\x6e\\x39\\x1e\\x0e\\xc7\\xf8\\xa4\\xa2\\x15\\x69\\x8d\\x7d\\x9c\\xb3\\x1a\"\n\"\\xf7\\x87\\x07\\xdf\\x57\\xc1\\x3b\\x57\\x67\\x78\\x52\\x58\\x1e\\xf7\\xa7\\xfb\\x50\\x73\\x07\\xb7\\x83\\x92\\x84\\x8c\\x62\\x08\\xfc\\x88\\x07\\x8a\\x61\\x83\"\n\"\\x82\\x60\\x83\\x08\\x74\\xf7\\x80\\xa2\\x07\\x68\\x90\\x7e\\x9a\\xaf\\x1a\\xf7\\x9a\\x07\\x8e\\x92\\x95\\x94\\x95\\x1e\\xa1\\xa1\\xa3\\x97\\xa1\\x1b\\xad\\x9c\"\n\"\\x70\\x54\\x1f\\xfb\\x81\\x07\\x8a\\x66\\x7e\\x7c\\x6b\\x87\\x08\\x74\\xf7\\x7a\\x07\\x0e\\x20\\x66\\x0a\\xf7\\x82\\xf8\\x62\\xd7\\x15\\x8e\\x62\\x7e\\x7f\\x5a\"\n\"\\x88\\x08\\x71\\xfb\\x2f\\xa8\\x06\\x8f\\xd8\\xb6\\xbd\\xd2\\x93\\x08\\xf7\\x49\\x9f\\x6c\\x06\\x56\\x8e\\x7b\\x9c\\x8e\\xc3\\x08\\xf8\\x67\\x07\\x88\\xc5\\x9b\"\n\"\\x9e\\xbf\\x8d\\x08\\x9e\\x9f\\xfb\\xc8\\x77\\x96\\x06\\xef\\x1d\\x78\\x58\\x6b\\x83\\x6a\\x1b\\x69\\x72\\x95\\xa0\\x7c\\x1f\\x7f\\x9b\\x88\\x9d\\xb4\\x1a\\xf7\"\n\"\\x1d\\x07\\x88\\xc5\\x9b\\x9e\\xc0\\x8d\\x08\\x95\\x9f\\xfb\\xc2\\x51\\x1d\\xbb\\x95\\xa6\\xd6\\x1e\\x0e\\xcf\\xf7\\xde\\xc7\\x15\\x8a\\x69\\x8a\\x88\\x78\\x8a\"\n\"\\x08\\x71\\xfb\\x1d\\xa8\\x06\\x8f\\xcb\\xb5\\xb7\\xcc\\x92\\x08\\xdb\\xa0\\x85\\x06\\x6e\\x8c\\x7c\\xa0\\x8d\\xaf\\x08\\xb9\\x0a\\xfb\\x67\\x77\\x07\\xa8\\x8a\"\n\"\\x9b\\x75\\x89\\x67\\x08\\xfb\\x23\\x07\\x84\\x7d\\x80\\x88\\x7b\\x1b\\x62\\x77\\xa0\\xb6\\x1f\\xe4\\x07\\x89\\xae\\x98\\x9f\\xa6\\x8f\\x08\\x9f\\xfb\\x5c\\x77\"\n\"\\x07\\xa4\\x87\\x99\\x76\\x89\\x69\\x08\\x41\\x07\\x3a\\xbb\\x65\\xf1\\xa6\\x9e\\x8e\\x96\\xaa\\x1e\\x0e\\xf7\\xae\\xb4\\xf7\\xba\\x15\\x8f\\x51\\x91\\x6e\\x9f\"\n\"\\x62\\x08\\xfb\\x0c\\xc4\\xf5\\x4b\\xf7\\x1f\\x1b\\xe2\\xe1\\xa7\\xbe\\xcd\\x1f\\xdd\\xc8\\xb6\\xe6\\xf7\\x03\\x1a\\xed\\x69\\xe0\\x4b\\xc9\\x1e\\xce\\x45\\x28\"\n\"\\xb3\\x28\\x1b\\x35\\x38\\x6c\\x55\\x51\\x1f\\x62\\x65\\x76\\x65\\x72\\x39\\xf7\\x10\\x81\\x18\\x9c\\xd1\\x9d\\xbe\\x9f\\xa7\\x08\\xb8\\xab\\xb9\\xa3\\xbe\\x1b\"\n\"\\xb6\\xb4\\x7a\\x68\\xb0\\x1f\\xc0\\x5a\\xaa\\x28\\xfb\\x0a\\x1a\\x81\\x8b\\x82\\x8a\\x81\\x1e\\x87\\x61\\x15\\x85\\x39\\x5f\\x2a\\x61\\x70\\x08\\x78\\x6d\\x69\"\n\"\\x81\\x6a\\x1b\\x2a\\x54\\xd8\\xf7\\x32\\x7b\\x1f\\x0e\\xf9\\x3e\\xa3\\x15\\x60\\x80\\x99\\xf7\\x0f\\x56\\x1f\\xfb\\x6e\\xf8\\x97\\x05\\x6f\\x06\\xfb\\x6d\\xfc\"\n\"\\xad\\x66\\x2f\\x7f\\x7d\\x5c\\x82\\x19\\x73\\xf7\\x5b\\xa3\\x07\\x51\\x8f\\x75\\x96\\xa5\\x1a\\x98\\x93\\xa6\\x9f\\xbc\\x1e\\x9a\\xb2\\x05\\xf7\\x70\\x06\\xad\"\n\"\\x3b\\x96\\x6b\\x75\\x1a\\x77\\x7e\\x82\\x69\\x88\\x1e\\x86\\x7f\\x8a\\x89\\x7d\\x1f\\x73\\xf7\\xd1\\x07\\xfc\\x7e\\xf7\\x7b\\x15\\xe7\\xf7\\x82\\xee\\xfb\\x82\"\n\"\\x05\\xce\\xf9\\x22\\x15\\x4c\\x7a\\x6e\\x74\\x4e\\x1b\\x4d\\x6d\\xe5\\x1d\\x6f\\x08\\x67\\xa4\\xb3\\x79\\xc0\\x1b\\xc1\\xb3\\x9f\\xb3\\xa5\\x1f\\x9b\\xa5\\x92\"\n\"\\xa3\\x91\\xbd\\x08\\x0e\\x8f\\xf8\\x69\\xca\\x15\\x81\\x81\\x05\\x88\\x88\\x89\\x8a\\x86\\x1b\\x7d\\x84\\x93\\x9b\\x1f\\xf7\\x94\\x07\\xde\\x41\\xbe\\xfb\\x0c\"\n\"\\xfb\\x03\\x41\\x59\\x42\\x62\\xa2\\x73\\xb3\\xb3\\xa6\\xa2\\xad\\x99\\x86\\x97\\x7e\\x9b\\x1e\\x83\\x95\\x88\\x91\\x91\\x1a\\x9f\\xa6\\x9b\\xae\\xc4\\xa4\\x71\"\n\"\\x4f\\x1e\\x43\\x07\\xfb\\x0a\\x67\\x5c\\x79\\x67\\x72\\x08\\x60\\x6d\\x77\\x6a\\x61\\x1a\\x4f\\xb8\\x5f\\xcb\\xc3\\xb8\\x9f\\xbc\\xc1\\x1e\\x59\\x95\\xa1\\x78\"\n\"\\xbb\\x1b\\xb6\\xa9\\x9a\\xb4\\xb0\\x1f\\xfb\\x53\\xc3\\x15\\x6c\\x70\\x78\\x80\\x73\\x1b\\x6d\\x77\\xa6\\xb2\\xc3\\xb4\\xb4\\xda\\xa0\\x1f\\xbd\\xf8\\x48\\x15\"\n\"\\x4c\\x7a\\x6f\\x74\\x4e\\x1b\\x4d\\x6c\\xe5\\x1d\\x6e\\x08\\x68\\xa4\\xb3\\x79\\xc0\\x1b\\xc2\\xb2\\x9f\\xb3\\xa5\\xc3\\x0a\\xf7\\xae\\xf8\\x1c\\xf9\\x38\\x15\"\n\"\\xfb\\x61\\xfb\\x25\\xfb\\x24\\xfb\\x61\\xfb\\x5e\\xf7\\x24\\xfb\\x24\\xf7\\x5e\\xf7\\x5f\\xf7\\x24\\xf7\\x24\\xf7\\x5f\\xf7\\x5c\\xfb\\x25\\xf7\\x28\\xfb\\x5a\"\n\"\\x1f\\xfb\\x44\\xfb\\xd8\\x15\\xf7\\x54\\x93\\xc6\\xef\\xf4\\x1b\\xcd\\xbb\\x64\\x3c\\xa9\\x1f\\x9b\\x63\\x93\\x5a\\x90\\x36\\x08\\x50\\x04\\x86\\x33\\x83\\x5f\"\n\"\\x79\\x5f\\x08\\x46\\x6e\\x5c\\x68\\x49\\x1b\\xfb\\x00\\x52\\xe7\\xf7\\x50\\x84\\x1f\\x0e\\x8f\\xf7\\x8f\\xf8\\x63\\x15\\xfb\\x11\\x2b\\x24\\xfb\\x19\\xfb\\x20\"\n\"\\xe7\\x26\\xf7\\x15\\xf7\\x13\\xe8\\xf0\\xf7\\x1e\\xf7\\x1d\\x2d\\xf0\\xfb\\x12\\x1f\\xd8\\xfb\\x90\\x15\\xfb\\x2c\\x87\\x7b\\x60\\x52\\x1b\\x52\\x77\\xbd\\xf7\"\n\"\\x25\\x1f\\xb9\\x04\\x8e\\x07\\xf7\\x14\\x8e\\x9f\\xb8\\xc2\\x1b\\xa8\\x9d\\x7d\\x6a\\x98\\x1f\\x93\\x76\\x8f\\x66\\x8e\\x44\\x08\\x0e\\xf7\\x1f\\xa1\\xf9\\x12\"\n\"\\x15\\xcd\\x87\\x9d\\x7d\\x8d\\x57\\x08\\xfc\\x6e\\x07\\x89\\x57\\x7d\\x7f\\x45\\x85\\x08\\x73\\xf8\\xd1\\x07\\xb2\\xf7\\x60\\x05\\x70\\x06\\x6c\\x49\\x77\\x6f\"\n\"\\x68\\x6f\\x08\\x67\\x5e\\x56\\x7b\\x40\\x1b\\x4c\\x79\\x97\\xb6\\x1f\\xf7\\x81\\x07\\xf6\\xb3\\x65\\xfb\\x06\\x96\\x1f\\xa5\\xf7\\xe0\\x71\\x06\\x7d\\xfb\\x04\"\n\"\\x64\\x67\\x22\\x8c\\x08\\xf7\\x78\\x07\\xb0\\x97\\x94\\xc1\\xe3\\xc0\\x7f\\x6f\\xaa\\x1e\\xaa\\x70\\x99\\x6d\\x98\\x48\\x08\\xa3\\xf7\\x59\\xfc\\xc9\\x06\\xf8\"\n\"\\x13\\xf7\\x73\\x94\\x0a\\x6f\\x08\\x67\\x97\\x0a\\x57\\x77\\x1d\\xb1\\xf8\\x24\\x94\\x0a\\x6e\\x08\\x68\\x97\\x0a\\x8f\\xf8\\x88\\xf9\\x85\\x15\\xd0\\xfc\\x88\"\n\"\\x46\\x07\\x0e\\xf8\\x8c\\xad\\x89\\x15\\x92\\x06\\xd5\\x06\\xf7\\x44\\xcd\\x97\\xb7\\xcc\\x1f\\xf1\\xd0\\xd5\\xf7\\x36\\xf7\\x2f\\x1a\\xea\\x6d\\xde\\x5b\\xb1\"\n\"\\x1e\\xa7\\x67\\x5a\\x98\\x4a\\x1b\\xfb\\x2b\\x20\\x56\\x2e\\x69\\x1f\\x7d\\x66\\x87\\x73\\x8a\\x49\\xd9\\xb1\\x18\\x94\\x07\\x8a\\xea\\xb0\\xb7\\xe6\\x99\\x3d\"\n\"\\xfc\\x3e\\x18\\x7a\\x40\\x72\\x5c\\x6d\\x81\\x74\\x8c\\x18\\xe5\\x16\\x8f\\x8e\\xc2\\xb9\\x9e\\xb6\\xa1\\xf7\\x13\\x19\\xc7\\xf7\\xec\\x05\\x92\\x06\\x8e\\x06\"\n\"\\xb4\\x96\\x8a\\x87\\x98\\x1f\\xc4\\x76\\xa9\\x49\\x26\\x1a\\xfb\\x66\\x2c\\xfb\\x29\\xfb\\x1e\\x84\\x1e\\xf7\\x8d\\xfb\\x99\\x15\\xda\\x06\\xb1\\xf7\\x62\\x05\"\n\"\\x7b\\xb2\\x8e\\x8a\\xa1\\x1b\\xf7\\x14\\xf7\\x01\\xf7\\x39\\xf7\\x53\\xf7\\x00\\x5e\\xc3\\x36\\x57\\x5e\\x75\\x62\\x6a\\x1f\\x66\\x5d\\x76\\x50\\x73\\xfb\\x18\"\n\"\\x08\\xea\\xe6\\x15\\xe6\\x9b\\xb0\\xc0\\xb9\\x1b\\xb4\\xa1\\x61\\x3c\\xfb\\x2a\\x52\\xfb\\x0b\\x43\\x6e\\x75\\x96\\xa5\\x77\\x1f\\x0e\\xf7\\x07\\xf7\\x97\\x16\"\n\"\\x7c\\xf7\\x2f\\x05\\x59\\xb8\\x6b\\xe3\\xe8\\x1a\\xc2\\x96\\xc5\\x9f\\xbd\\x1e\\xca\\xa4\\xb4\\xae\\xbd\\x1b\\xda\\xca\\xfb\\x08\\xfb\\x25\\x2e\\x6b\\x33\\x59\"\n\"\\x5e\\x1f\\x7c\\xfb\\x2f\\x05\\xf7\\x80\\xf7\\x2d\\x78\\x06\\x84\\x5e\\x7b\\x7a\\x6a\\x8a\\x08\\xfb\\x0a\\x06\\x8e\\xb1\\x05\\xf2\\xb9\\xc7\\xe8\\xf7\\x07\\x1a\"\n\"\\xbb\\x7f\\xbe\\x75\\xba\\x1e\\xef\\x5d\\x38\\xc5\\x2d\\x1b\\x2e\\x38\\x51\\x27\\x5d\\x1f\\x75\\x5c\\x7f\\x58\\x5b\\x1a\\xfb\\x08\\xc7\\x2f\\xf2\\x5d\\x1e\\x8e\"\n\"\\x65\\x05\\xfb\\x0a\\x06\\x6a\\x8c\\x7c\\x9b\\x83\\xb9\\x08\\x78\\xfb\\x2d\\x06\\x0e\\xfb\\xdd\\xf7\\xa5\\x3b\\x1d\\x0e\\xfb\\x8a\\x50\\x1d\\xf8\\x8c\\xf8\\xa9\"\n\"\\xf8\\x95\\x15\\x49\\x06\\xfb\\x74\\xfc\\x95\\x05\\xdb\\x06\\xf7\\x45\\xf8\\x2d\\xf7\\x45\\xfc\\x2d\\x05\\xdb\\x06\\x0e\\xf8\\x8c\\xf8\\xa9\\x16\\xf7\\x74\\xf8\"\n\"\\x95\\x05\\x3b\\x06\\xfb\\x45\\xfc\\x2d\\xfb\\x45\\xf8\\x2d\\x05\\x3b\\x06\\xf7\\x74\\xfc\\x95\\x05\\x0e\\xf8\\x8c\\xf8\\x8c\\xf9\\x60\\x15\\xfb\\x60\\xfb\\x34\"\n\"\\xfb\\x32\\xfb\\x5f\\xfb\\x5b\\xf7\\x34\\xfb\\x33\\xf7\\x5d\\xf7\\x5b\\xf7\\x34\\xf7\\x34\\xf7\\x5c\\xf7\\x59\\xfb\\x34\\xf7\\x36\\xfb\\x58\\x1f\\xa4\\x52\\x15\"\n\"\\xf7\\x23\\x7e\\xf7\\x06\\xfb\\x06\\x99\\xfb\\x25\\x08\\xfb\\xa3\\x06\\xf7\\xa4\\x52\\x15\\x82\\xfb\\x22\\xfb\\x0d\\xfb\\x0f\\xfb\\x22\\x80\\x08\\xf7\\xa8\\x07\"\n\"\\x53\\xfb\\xa8\\x15\\xfb\\x27\\x99\\xfb\\x05\\xf7\\x05\\x7d\\xf7\\x29\\x08\\xf7\\xa6\\x06\\xfb\\xa6\\xc4\\x15\\x99\\xf7\\x24\\xf7\\x07\\xf7\\x06\\xf7\\x25\\x99\"\n\"\\x08\\xfb\\xa4\\x07\\x0e\\xf7\\x11\\xf7\\x10\\x15\\xf8\\x67\\xf8\\x67\\xfc\\x67\\x06\\xb3\\xfc\\x3f\\x15\\xf8\\x17\\xf8\\x17\\xfc\\x17\\x07\\x0e\\xf8\\x8c\\xf9\"\n\"\\x64\\xf8\\xc3\\x15\\x4f\\xfb\\x8d\\x06\\x26\\x86\\x62\\x7c\\x6e\\x1e\\x5b\\x72\\x53\\x6b\\x50\\x1b\\x57\\x58\\xa4\\xb3\\x6f\\x1f\\x74\\xac\\x85\\xb4\\xf7\\x04\"\n\"\\x1a\\xf7\\x8d\\x4f\\xfb\\x8a\\x07\\xfb\\x1d\\x90\\x69\\xa3\\x63\\x1e\\x4a\\xb1\\xd1\\x66\\xde\\x1b\\xd7\\xcb\\xaa\\xc3\\xb4\\x1f\\xac\\xb8\\x91\\xab\\xf7\\x29\"\n\"\\x1a\\x0e\\xec\\xf8\\x27\\xf8\\x1c\\x15\\xfb\\x69\\x06\\x41\\xf7\\x4d\\x05\\x2d\\x06\\xf7\\x7d\\xfc\\xd5\\x05\\xde\\x06\\xf7\\x7d\\xf8\\xd5\\x05\\x2d\\x06\\x22\"\n\"\\xfb\\x9d\\x15\\x3f\\xfb\\x48\\x40\\xf7\\x48\\x05\\x0e\\xc7\\x62\\x0a\\x30\\x07\\x7f\\x77\\x87\\x7c\\x78\\x1a\\x5d\\x99\\x0a\\x76\\x82\\x88\\x7b\\x1b\\x63\\x74\"\n\"\\xa1\\xb1\\xab\\xa2\\xa0\\xb4\\x8f\\x1f\\xc9\\x92\\x05\\x0e\\xa2\\x3e\\x0a\\x0e\\xa2\\xf7\\x4d\\xf9\\x1b\\x9e\\x0a\\xf7\\x44\\x16\\x6b\\x71\\x71\\x6c\\x6b\\xa5\"\n\"\\x71\\xaa\\xab\\xa5\\xa5\\xab\\xaa\\x71\\xa5\\x6c\\x1f\\xfb\\xbe\\xfb\\x95\\x15\\x8d\\x95\\x96\\x8c\\x91\\x1b\\x93\\x92\\x88\\x86\\x8f\\x1f\\x94\\x81\\x8b\\x8a\"\n\"\\x8c\\x2a\\x08\\xfb\\x0d\\x07\\x6d\\x8e\\x73\\x91\\x75\\x1e\\x53\\x9a\\xbc\\x69\\xcd\\x1b\\xf7\\x08\\xd8\\xf6\\xf7\\x35\\xd3\\x7d\\xcf\\x75\\xa8\\x1f\\x9f\\x7c\"\n\"\\x78\\x95\\x73\\x1b\\x66\\x73\\x73\\x67\\x6c\\x9e\\x74\\xac\\x7f\\x1f\\xa8\\x82\\x8e\\x89\\x93\\x83\\x08\\x98\\x7d\\x92\\x71\\x65\\x1a\\x29\\x61\\x46\\x50\\x5f\"\n\"\\x79\\xac\\xd8\\x1e\\xf7\\x58\\x07\\xb8\\x6f\\xb2\\x6a\\x84\\x87\\x8a\\x8a\\x87\\x1e\\xfb\\x04\\x5d\\x05\\x0e\\xa2\\x3e\\x0a\\xf6\\xf7\\x56\\x15\\x6d\\x74\\x74\"\n\"\\x6e\\x6e\\xa2\\x74\\xa8\\xa8\\xa2\\xa2\\xa8\\xa7\\x74\\xa3\\x6f\\x1f\\xf7\\x6c\\xc4\\x1d\\xfb\\x13\\x62\\x15\\xaf\\x06\\x8e\\x9c\\x8d\\x93\\x8d\\x94\\x08\\x99\"\n\"\\xcb\\x8c\\x8f\\x9b\\x1a\\xa3\\x7a\\x9e\\x74\\x74\\x7a\\x78\\x73\\x7b\\x8c\\x86\\x9a\\x4c\\x1e\\x8c\\x82\\x8d\\x82\\x8d\\x83\\x08\\x0e\\xa2\\x3e\\x0a\\xf7\\x7e\"\n\"\\xf7\\x0c\\x15\\x90\\xa2\\x8d\\x97\\x8c\\x1a\\x9b\\xcf\\x8c\\x8f\\x9b\\x1a\\xa4\\x79\\x9f\\x72\\x73\\x79\\x77\\x72\\x7f\\x8d\\x7c\\x8f\\x79\\x1e\\x91\\x71\\x8f\"\n\"\\x7d\\x8d\\x81\\x8c\\x87\\x19\\x8d\\x81\\x8b\\x89\\x8e\\x7e\\x08\\x0e\\xc7\\x23\\x0a\\xfb\\x96\\xf9\\x6e\\x38\\x1d\\xc7\\x23\\x0a\\xfc\\x25\\xf8\\xa5\\x64\\x0a\"\n\"\\x2b\\x0a\\xfc\\x1d\\xe6\\x2b\\x1d\\x2b\\x0a\\xfb\\x69\\xe6\\x20\\x0a\\x2b\\x0a\\xfc\\x49\\xf7\\x7a\\x15\\x6a\\x6d\\x6d\\x69\\x67\\xa7\\x6d\\xae\\xaf\\xa7\\xa7\"\n\"\\xaf\\xaf\\x6e\\xa9\\x68\\x1f\\xf7\\x64\\x16\\x6b\\x6e\\x6d\\x69\\x66\\xa6\\x6e\\xae\\xaf\\xa8\\xa7\\xaf\\xaf\\x6d\\xa9\\x67\\x1f\\x0e\\x2b\\x0a\\xfb\\x9b\\xe6\"\n\"\\x28\\x1d\\x59\\xf7\\x28\\xf9\\x6b\\x15\\x54\\x5f\\x05\\x85\\x87\\x87\\x84\\x85\\x1a\\x7b\\xa7\\x73\\xc7\\x68\\x1e\\x57\\x69\\x70\\x61\\x5c\\x1a\\x5e\\xa5\\x66\"\n\"\\xbe\\x70\\x1e\\x33\\x4b\\x6b\\x58\\x3e\\x1a\\x25\\xd1\\x46\\xf1\\x99\\xa4\\x8d\\x8f\\xa2\\x1e\\x8f\\xa5\\x95\\x8c\\x95\\x1b\\xad\\x9c\\x79\\x67\\x6c\\x79\\x76\"\n\"\\x71\\x7e\\x87\\x8c\\x9a\\x74\\x1f\\x94\\x7c\\x7f\\x8f\\x7b\\x1b\\x67\\x71\\x74\\x6c\\x6b\\xa8\\x75\\xb6\\xe4\\xd1\\xd4\\xe8\\xd6\\x62\\xb9\\x47\\x82\\x79\\x89\"\n\"\\x89\\x7c\\x1f\\x89\\x7d\\x7b\\x8a\\x84\\x1b\\x5b\\x6d\\xb3\\xcc\\xbc\\x96\\xaa\\xb1\\xc3\\x1f\\x77\\xbd\\xaa\\x83\\xad\\x1b\\xc4\\xb4\\xa9\\xb7\\xac\\x71\\x9f\"\n\"\\x62\\x5e\\x58\\x78\\x68\\x5b\\x1f\\x78\\xa7\\x84\\xa1\\xac\\x1a\\xae\\x91\\xa2\\x9e\\xb2\\x1e\\x7b\\xac\\xa5\\x85\\xb7\\x1b\\xcf\\xb2\\xa1\\xb2\\xac\\x72\\x9e\"\n\"\\x5e\\x5d\\x5b\\x7c\\x6b\\x54\\x1f\\x68\\xa6\\x7d\\x9f\\xa1\\x1a\\x97\\x8f\\x92\\x98\\x99\\x1e\\x0e\\x8f\\x2a\\x0a\\xfb\\x04\\xe6\\x20\\x0a\\x8f\\x2a\\x0a\\xfb\"\n\"\\x2d\\xe6\\x15\\xfb\\x1d\\xf7\\x31\\x05\\x9d\\x7c\\x77\\x95\\x78\\xb6\\x0a\\x7d\\xa8\\x79\\x46\\x1d\\x57\\x2e\\x0a\\xfb\\x9a\\xf8\\xa4\\x38\\x0a\\x57\\x2e\\x0a\"\n\"\\xfb\\x4b\\xf9\\x2f\\x2a\\x1d\\x38\\xf7\\x0f\\xf9\\x4a\\x15\\x53\\x5a\\x05\\x86\\x88\\x89\\x86\\x87\\x1a\\x72\\xb6\\x68\\xd3\\x67\\x1e\\x5c\\x4d\\x76\\x6d\\x77\"\n\"\\x62\\x08\\x6a\\x4b\\x7a\\x46\\x47\\x1a\\x46\\x9c\\x50\\xaa\\x67\\x1e\\x6c\\xa5\\xb6\\x7b\\xc6\\x1b\\x9f\\xa7\\x8d\\x8e\\xa4\\x1f\\x8c\\x96\\x98\\x8c\\x8e\\x1b\"\n\"\\xa9\\x9c\\x7c\\x71\\x6b\\x74\\x72\\x6f\\x7d\\x7b\\x90\\x92\\x7e\\x1f\\x9f\\x6a\\x83\\x8e\\x78\\x1b\\x67\\x71\\x74\\x6a\\x65\\xab\\x73\\xbf\\xeb\\xd9\\xd7\\xea\"\n\"\\xd5\\x67\\xb3\\x49\\x84\\x7d\\x8a\\x8a\\x7f\\x1f\\x6e\\x8a\\x05\\x50\\x6e\\xb3\\xdd\\xef\\x9f\\xe2\\xbd\\xf7\\x01\\x1f\\x84\\xa5\\x9a\\x89\\xa1\\x1b\\xd2\\xb8\"\n\"\\xa9\\xbb\\xac\\x73\\xa2\\x67\\x5e\\x60\\x72\\x53\\x56\\x1f\\x5c\\xad\\x76\\xa6\\xa5\\x1a\\x96\\x8f\\x94\\x97\\x97\\x1e\\x0e\\x78\\x9e\\xf8\\x61\\x97\\xf7\\x5f\"\n\"\\x9a\\x06\\xac\\x0a\\xf7\\x1e\\x0b\\xa8\\x8f\\x90\\x90\\x90\\x8f\\x8f\\x92\\x8e\\x92\\x90\\xe5\\x0c\\x0c\\xb6\\x9d\\x92\\xa4\\x93\\xa4\\x97\\x95\\x94\\x8f\\x90\"\n\"\\x97\\x0c\\x0d\\xf9\\x66\\x14\\xf8\\x84\\x15\\xbd\\x13\\x00\\xa5\\x02\\x00\\x01\\x00\\x08\\x00\\x0c\\x00\\x14\\x00\\x22\\x00\\x78\\x00\\x7e\\x00\\x86\\x00\\x8c\"\n\"\\x00\\x97\\x00\\x9c\\x01\\x10\\x01\\x8c\\x01\\xf3\\x01\\xf9\\x02\\x2f\\x02\\x3e\\x02\\x45\\x02\\x4c\\x02\\xa3\\x02\\xa9\\x02\\xae\\x02\\xcd\\x02\\xd4\\x02\\xe8\"\n\"\\x02\\xeb\\x02\\xfd\\x03\\x09\\x03\\x10\\x03\\x18\\x03\\x49\\x03\\xb3\\x03\\xe4\\x03\\xe8\\x03\\xf4\\x04\\x03\\x04\\x0c\\x04\\x1f\\x04\\x2c\\x04\\x35\\x04\\x40\"\n\"\\x04\\x4b\\x04\\x55\\x04\\x5b\\x04\\x64\\x04\\x6d\\x04\\x73\\x04\\x7b\\x04\\x87\\x04\\x8d\\x05\\x1e\\x05\\x95\\x05\\x9a\\x05\\xaf\\x05\\xe0\\x06\\x49\\x06\\x8b\"\n\"\\x06\\xe8\\x07\\x1c\\x07\\x40\\x07\\x77\\x07\\xc6\\x07\\xc9\\x07\\xf3\\x08\\x20\\x08\\x66\\x08\\xa2\\x08\\xe3\\x09\\x20\\x09\\x3c\\x09\\x67\\x09\\x6b\\x09\\x6e\"\n\"\\x09\\x7b\\x09\\x80\\x09\\x8f\\x09\\xbd\\x09\\xcf\\x09\\xd4\\x0a\\x01\\x0a\\x04\\x0a\\x0c\\x0a\\x10\\x0a\\x22\\x0a\\x36\\x0a\\x60\\x0a\\x89\\x0a\\x93\\x0a\\xb0\"\n\"\\x0a\\xc5\\x0a\\xe7\\x0b\\x09\\x0b\\x18\\x0b\\x21\\x0b\\x29\\x0b\\x47\\x0b\\x64\\x0b\\x81\\x0b\\x9d\\x0b\\xb9\\x0b\\xc0\\x0b\\xd1\\x0b\\xde\\x0b\\xe8\\x0b\\xf5\"\n\"\\x0c\\x0e\\x0c\\x1c\\x0c\\x34\\x0c\\x4c\\x0c\\x51\\x0c\\x68\\x0c\\x72\\x0c\\x89\\x0c\\xa0\\x0c\\xb5\\x0c\\xbc\\x0c\\xc0\\x0c\\xd5\\x0c\\xea\\x0c\\xff\\x0d\\x0b\"\n\"\\x0d\\x17\\x0d\\x1d\\x0d\\x2b\\x0d\\x3d\\x0d\\x50\\x0d\\x5e\\x0d\\x71\\x0d\\x84\\x0d\\x88\\x0d\\x98\\x0d\\xa3\\x0d\\xad\\x0d\\xbd\\x0d\\xc5\\x0d\\xd5\\x0d\\xe3\"\n\"\\x0d\\xea\\x0d\\xf9\\x0e\\x08\\x0e\\x17\\x0e\\x1a\\x0e\\x23\\x0e\\x31\\x0e\\x3f\\x0e\\x4b\\x0e\\x58\\x0e\\x5d\\x0e\\x6a\\x0e\\x77\\x0e\\x82\\x0e\\x8a\\x0e\\x92\"\n\"\\x0e\\x9e\\x0e\\xaa\\x0e\\xb6\\x0e\\xc2\\x0e\\xce\\x0e\\xd4\\x0e\\xdf\\x0e\\xea\\x0e\\xf5\\x0f\\x00\\x0f\\x0b\\x0f\\x14\\x0f\\x1a\\x15\\xc4\\x06\\xfb\\x0f\\x52\"\n\"\\x1d\\x15\\x52\\xbf\\x1d\\x15\\xfb\\xde\\x43\\xf7\\xde\\x06\\x0e\\x62\\x0a\\x4a\\x07\\xb6\\x9a\\xa3\\x8f\\xcc\\x92\\xc9\\x92\\x18\\x0b\\x9b\\xf9\\x1f\\x15\\xce\"\n\"\\x88\\x9e\\x7b\\x8d\\x57\\xdc\\x1d\\xf8\\xdd\\x07\\xb3\\xf7\\x64\\x05\\x6f\\x06\\x6c\\x48\\x77\\x6f\\x67\\x6e\\x08\\x66\\x5d\\x55\\x7b\\x3e\\x1b\\x4a\\x79\\x98\"\n\"\\xb6\\x1f\\xf7\\x86\\x07\\xf7\\x01\\xb4\\x64\\xfb\\x08\\x97\\x1f\\xa5\\xf7\\xe6\\x71\\x06\\x7c\\xfb\\x06\\x64\\x67\\xfb\\x00\\x8c\\x08\\xf7\\x7c\\x07\\xb1\\x98\"\n\"\\x94\\xbf\\xf7\\x37\\xbc\\x69\\xfb\\x19\\xa4\\x1e\\xa4\\xf7\\x5d\\xfc\\xd5\\x06\\x0b\\x8d\\x31\\x0a\\x78\\x77\\x0b\\x5f\\x0a\\xf7\\xd8\\x07\\xb2\\x1d\\x0b\\x86\"\n\"\\x1d\\xf7\\xf2\\x07\\x0b\\x15\\x6a\\x6d\\x6d\\x69\\x67\\xa7\\x6d\\xae\\x4d\\x1d\\x08\\xfb\\xba\\x07\\x0b\\xf8\\x74\\xd8\\x1d\\x80\\x89\\x82\\x82\\x72\\x1e\\x47\"\n\"\\xfb\\x54\\x43\\xf7\\x4d\\x05\\x77\\xbe\\x8b\\x8b\\x93\\x1a\\x9a\\x97\\x92\\xa4\\x8e\\x1e\\x9b\\x8c\\x05\\xa3\\xfb\\x8e\\x73\\x07\\xa2\\x88\\x91\\x88\\x91\\x82\"\n\"\\x8e\\x8a\\xb9\\x29\\x9b\\x62\\xf7\\x0c\\xfb\\xbb\\x18\\x79\\x56\\x05\\x59\\x7a\\x72\\x6b\\x73\\x1b\\x82\\x83\\x93\\x94\\x8c\\x8b\\x8d\\x8c\\x8e\\x1f\\x8c\\x90\"\n\"\\x8c\\x90\\x8f\\x1a\\xa8\\x74\\x9f\\x68\\x65\\x71\\x71\\x65\\x5c\\xb3\\x6b\\xc4\\xad\\xa8\\x96\\xa1\\xa0\\x1e\\xa0\\xa2\\x9f\\xb3\\xae\\xe9\\xf7\\x29\\xf8\\x21\"\n\"\\x18\\x9c\\xb5\\x95\\x95\\xaa\\x8e\\x08\\x0b\\xf9\\x57\\xf8\\x61\\x15\\xfb\\x1b\\x73\\x06\\xb0\\x87\\x96\\x83\\x74\\x1a\\x7e\\x7e\\x65\\x6c\\x3e\\x1e\\x7d\\x67\"\n\"\\x83\\x75\\x7e\\x67\\x80\\xb6\\x86\\x9e\\x79\\xcc\\x08\\x78\\xcb\\x83\\xab\\x95\\x1a\\x9b\\x95\\x90\\xb1\\x8e\\x1e\\xa3\\xfb\\x7e\\x73\\x07\\xb2\\x87\\x8c\\x8a\"\n\"\\x9e\\x49\\x8c\\x88\\x8d\\x83\\x8e\\x83\\x47\\xfb\\x3f\\x18\\x73\\xcb\\x67\\xe8\\x05\\x78\\xbd\\x86\\x9a\\x96\\x1a\\x9c\\x95\\x92\\xa7\\x8f\\x1e\\xa3\\xfb\\x72\"\n\"\\x73\\x07\\xa5\\x86\\x8f\\x85\\xa6\\x49\\xf7\\x28\\xfc\\x0a\\x18\\xa3\\x06\\xf7\\x11\\xf7\\xca\\xf1\\xfb\\xca\\x05\\xa2\\x06\\xf7\\x2f\\xf8\\x25\\x9a\\xb0\\x93\"\n\"\\x93\\xa6\\x90\\x19\\x0b\\xf9\\x4f\\xf9\\x38\\x15\\xfb\\x70\\x72\\x06\\xcf\\x86\\x9b\\x83\\x6e\\x1a\\x77\\x7e\\x6b\\x71\\x60\\x1e\\xfb\\x03\\xfb\\x4d\\xfb\\x0c\"\n\"\\xf7\\x7c\\x88\\x90\\x8a\\x8d\\x89\\x90\\x19\\x7d\\xa2\\x87\\x97\\x97\\x1a\\xa1\\x9a\\x93\\xb4\\x1e\\xa4\\x8c\\x05\\xa4\\xfb\\xe3\\x72\\x07\\xad\\x89\\xa5\\x78\"\n\"\\x9f\\x69\\xf7\\x4b\\xfb\\xe0\\x18\\xfb\\x27\\x07\\x89\\x40\\x80\\x81\\x3b\\x84\\x08\\x72\\xf7\\xef\\xa4\\x07\\x3b\\x92\\x81\\x95\\x89\\xd6\\x08\\xf7\\x4c\\x07\"\n\"\\xf7\\x53\\xf7\\xcb\\x9a\\xa2\\x9e\\x96\\xad\\x90\\x19\\x0b\\xf8\\xaf\\xa3\\x75\\x1d\\x0b\\xf8\\x38\\xf7\\x34\\x15\\x6f\\x06\\x83\\x6d\\x82\\x79\\x7b\\x74\\x68\"\n\"\\x5d\\x73\\x81\\x35\\x8a\\x08\\x6e\\x06\\xf7\\x7b\\xf8\\x27\\x05\\xa5\\xfc\\x07\\x07\\x84\\xfb\\x22\\x05\\xa5\\x06\\xa4\\xea\\xa5\\x9b\\xf7\\x20\\x8a\\xfb\\x7e\"\n\"\\xfc\\x28\\x18\\x72\\xf8\\x13\\x07\\x0b\\x7b\\x66\\x05\\x7e\\xaf\\xa6\\x86\\xac\\x1b\\xdb\\x4f\\x0a\\x7f\\x1f\\x0b\\x89\\x0a\\x78\\x89\\x51\\x08\\x0b\\x53\\x7c\"\n\"\\x7a\\x56\\x88\\x08\\x0b\\xf8\\x76\\xf8\\x22\\x15\\xc0\\xfb\\x16\\x07\\x9b\\x5f\\x6f\\x91\\x63\\x1b\\xfb\\x0b\\xe6\\x1d\\x9e\\x7e\\xba\\xd1\\x1d\\x83\\x6a\\x71\"\n\"\\x82\\x0a\\xaa\\xa7\\xa0\\xb3\\xe7\\x8f\\x8b\\x9a\\xac\\x1e\\xc7\\xa5\\xa9\\xb6\\xc9\\x1a\\xb3\\x7f\\xa9\\x6f\\xa7\\x1e\\x3e\\xfc\\x56\\x15\\xc1\\xa5\\x7b\\x69\"\n\"\\x5d\\x54\\x71\\x28\\xee\\x1d\\xe4\\xf8\\x82\\x15\\xba\\x9e\\x65\\x2e\\x2e\\x79\\x67\\x5b\\x5b\\x79\\xae\\xe9\\xe9\\x9d\\xb0\\xbb\\x1f\\x0b\\x41\\x0a\\xa8\\xae\"\n\"\\x4a\\x0a\\xf7\\x93\\x94\\x1d\\x0b\\xf8\\x65\\x68\\x1d\\xdf\\x8c\\x90\\xa0\\x1a\\xa9\\x77\\xa1\\x6f\\x70\\x76\\x75\\x6d\\x7e\\x8e\\x76\\x8f\\x76\\x1e\\x93\\x65\"\n\"\\x92\\x6a\\x90\\x6e\\x08\\x0b\\xc6\\xb8\\xc6\\xd9\\x57\\x1d\\x0b\\x08\\xa4\\xf7\\x7e\\x70\\x06\\x67\\x7c\\x82\\x81\\x76\\x1b\\x82\\x7d\\x8f\\x95\\x75\\x1f\\xa3\"\n\"\\x0b\\xa9\\x1d\\x0e\\x96\\x83\\x05\\x8e\\x96\\x92\\x8c\\x95\\x1b\\xa8\\x9c\\x7e\\x74\\x70\\x77\\x7d\\x65\\x0b\\xa3\\x07\\x68\\x8f\\x7e\\x9b\\x8c\\xb0\\x08\\xf7\"\n\"\\xe4\\x0b\\x4e\\x0a\\xb1\\xab\\xaa\\xb1\\x0b\\x9f\\xa6\\xf7\\x1a\\xfb\\x7e\\x05\\x0b\\xf9\\x87\\xf7\\xb3\\x9e\\x1d\\xe1\\xf7\\x0c\\x1a\\xf7\\x66\\xca\\xf7\\x02\"\n\"\\xf7\\x0d\\xba\\xb6\\x79\\x65\\xb6\\x1e\\xb6\\x65\\xa3\\x68\\xad\\x40\\x37\\x0a\\x52\\x5a\\x96\\x5b\\x1b\\xfb\\x5c\\xfb\\x29\\xfb\\x2d\\xfb\\x63\\xfb\\x62\\x88\"\n\"\\x1d\\x0b\\xca\\xf8\\x1a\\x15\\x8d\\x95\\x96\\x8c\\x91\\x1b\\x93\\x92\\x88\\x86\\x8f\\x1f\\x94\\x81\\x8b\\x8a\\x8c\\x2a\\x08\\xfb\\x0d\\x07\\x6d\\x8e\\x73\\x91\"\n\"\\x75\\x1e\\x53\\x9a\\xbc\\x69\\xcd\\x1b\\xf7\\x08\\xd8\\xf6\\xf7\\x35\\xd3\\x7d\\xcf\\x75\\xa8\\x1f\\x9f\\x7c\\x78\\x95\\x73\\x1b\\x66\\x73\\x73\\x67\\x6c\\x9e\"\n\"\\x74\\xac\\x7f\\x1f\\xa8\\x82\\x8e\\x89\\x93\\x83\\x08\\x98\\x7d\\x92\\x71\\x65\\x1a\\x29\\x61\\x46\\x50\\x5f\\x79\\xac\\xd8\\x1e\\xf7\\x58\\x07\\xb8\\x6f\\xb2\"\n\"\\x6a\\x84\\x87\\x8a\\x8a\\x87\\x1e\\xfb\\x04\\x5d\\x05\\x0b\\xf7\\x76\\xf7\\x2c\\x15\\xf7\\x71\\x07\\x89\\xaf\\x9b\\xa1\\xa7\\x9c\\x1d\\x70\\x8c\\x7b\\xa0\\x8c\"\n\"\\xab\\xf7\\x10\\xf7\\x75\\x18\\xfb\\x70\\x07\\x8d\\x67\\x7b\\x75\\x6f\\x8a\\x08\\x77\\xf7\\x66\\x9f\\x07\\x87\\x0a\\x9a\\x76\\x8a\\x68\\x08\\x0b\\xfb\\xe9\\x71\"\n\"\\x0a\\x15\\x6a\\x6d\\x6c\\x6a\\x66\\xa7\\x6e\\xae\\xb0\\x1d\\x0b\\xf7\\x31\\x05\\x9d\\x7b\\x78\\x95\\x78\\xb6\\x0a\\x7d\\xa8\\x79\\x46\\x1d\\x22\\x1d\\xac\\xa0\"\n\"\\x92\\x94\\xa2\\x1a\\x0b\\x66\\x1d\\x78\\x89\\x51\\x08\\xfc\\x67\\x21\\x1d\\x78\\x77\\xf7\\xd0\\x9f\\x78\\x20\\x1d\\x0b\\x67\\x9e\\x6c\\x64\\x1a\\x69\\x7b\\x76\"\n\"\\x71\\x6b\\x7d\\xa2\\x0b\\x08\\xf7\\x7a\\xf7\\x85\\xfb\\x7a\\x07\\x0b\\x1f\\x63\\x9d\\x05\\x98\\x6f\\x73\\x91\\x76\\x1b\\x0b\\x76\\x6e\\x8a\\x08\\x77\\xf7\\x61\"\n\"\\x9f\\x07\\x71\\x0b\\x89\\x8c\\x96\\x72\\x1f\\x63\\x9d\\x05\\x98\\x0b\\xaf\\x6d\\xa9\\x68\\x1f\\x0e\\xac\\x5f\\xfb\\x00\\x4c\\x7f\\x65\\x71\\x0b\\x71\\xa5\\xab\"\n\"\\xab\\xa6\\xa6\\xaa\\x1f\\x0b\\x59\\x90\\x2f\\x08\\xa8\\x0b\\x6c\\x6c\\x65\\x64\\xaa\\x6c\\xb1\\x0b\\xbd\\xad\\xc2\\xb7\\x6a\\xa5\\x54\\x7e\\x83\\x8a\\x87\\x0b\"\n\"\\x67\\x64\\x35\\x79\\x1f\\x0e\\xd0\\x15\\x81\\x07\\x8d\\x59\\x7a\\x79\\x59\\x8a\\x08\\x73\\x77\\xf7\\xd6\\x9f\\x72\\x06\\x59\\x8c\\x7b\\x9d\\x8c\\xbd\\x08\\x95\"\n\"\\x97\\x07\\xc8\\xc6\\x97\\xa0\\xb7\\x1f\\xdd\\xb2\\xc2\\xe6\\xee\\x1a\\xf7\\x06\\x47\\xeb\\x20\\xad\\x1e\\x6c\\x95\\x7a\\x8d\\x43\\x90\\x79\\x8c\\x18\\x96\\x07\"\n\"\\x8a\\xbc\\x9b\\x9d\\xbd\\x8d\\x08\\xa4\\x9f\\xfb\\xd6\\x77\\xa3\\x06\\xbd\\x89\\x9c\\x79\\x89\\x5a\\x08\\x80\\x07\\x61\\x88\\x48\\x87\\x70\\x84\\x63\\x78\\x19\"\n\"\\x37\\x61\\x56\\x33\\x28\\x1a\\x28\\xc2\\x30\\xdd\\x64\\x1e\\x75\\xb8\\xc5\\x80\\xc9\\x1b\\xf7\\x2e\\xf8\\x7b\\x15\\xf1\\x85\\xc2\\x3c\\xfb\\x20\\x1a\\xfb\\x1f\"\n\"\\x54\\x3c\\x25\\x85\\x1e\\xfb\\x23\\x16\\x25\\x91\\x54\\xda\\xf7\\x1f\\x1a\\xf7\\x20\\xc3\\xda\\xf0\\x91\\x1e\\x0e\\xf9\\x95\\xa4\\x15\\x72\\x8c\\x80\\x90\\x7e\"\n\"\\x9a\\xfb\\xc5\\xf8\\x0e\\x18\\xf7\\x50\\xf7\\x56\\xaf\\xa4\\xec\\x93\\x08\\xa4\\xfb\\xb5\\x72\\x07\\xda\\x85\\x91\\x88\\x73\\x1a\\x7b\\x86\\x83\\x6c\\x6c\\x1e\"\n\"\\xfb\\x6d\\xfb\\x6e\\x05\\xf7\\x6a\\x07\\x8d\\xd4\\x9a\\x9a\\xd3\\x8f\\x08\\xa4\\xfb\\xe6\\x72\\x07\\xce\\x88\\x9e\\x7c\\x8c\\x56\\x08\\xfc\\x78\\x07\\x8a\\x57\"\n\"\\x7b\\x7e\\x45\\x85\\x43\\x1d\\x45\\x93\\x7a\\x98\\x8a\\xbd\\x08\\xf7\\x58\\x07\\xa6\\xa4\\xf7\\x4a\\xfb\\x77\\x05\\x9e\\x73\\x90\\x82\\x80\\x1a\\x7e\\x7d\\x86\"\n\"\\x6a\\x89\\x1e\\x86\\x7e\\x8b\\x8a\\x7d\\x1f\\x72\\xf7\\xe4\\x07\\x0b\\xf7\\xb4\\x6b\\x1d\\x0b\\xc4\\xf8\\x58\\x15\\x3d\\x1d\\x78\\x0a\\x82\\x86\\x7b\\x77\\x0a\"\n\"\\x7f\\x83\\x86\\x81\\xba\\x1d\\x07\\x0b\\xf7\\x9a\\xf7\\xd2\\x15\\xf7\\x95\\xfb\\x72\\x06\\x25\\x0a\\xf7\\xcf\\x9f\\x79\\x20\\x1d\\xf8\\x67\\x07\\x88\\xc5\\x9b\"\n\"\\x9e\\xc0\\x8d\\x08\\x9d\\x9f\\xfb\\xcf\\x77\\x9e\\x06\\xbf\\x89\\x9b\\x78\\x89\\x51\\x08\\xfb\\x61\\xfb\\x95\\x69\\x0a\\x0e\\x15\\x45\\x4a\\x62\\x2d\\x2a\\x1a\"\n\"\\xfb\\x0f\\xce\\x33\\xe7\\xc6\\xb4\\xa8\\xd3\\xb5\\x1e\\x45\\xa8\\xb0\\x6c\\xbf\\x1b\\xe7\\xcb\\xf2\\xf7\\x27\\xf7\\x11\\x5a\\xe7\\x48\\x68\\x73\\x74\\x6b\\x6a\"\n\"\\x9e\\x76\\xae\\x85\\x1f\\xb3\\x84\\x8c\\x8a\\x98\\x7e\\x08\\x9a\\x7a\\x92\\x6f\\x5e\\x1a\\x26\\x5e\\x4b\\x43\\x66\\x70\\x9c\\xb1\\x74\\x1e\\xa6\\xc6\\x97\\xb9\"\n\"\\xb6\\x1a\\xbb\\x74\\xaa\\x67\\x65\\x73\\x6b\\x59\\x5e\\x98\\x55\\xa2\\x5b\\x1e\\x68\\x78\\x6e\\x76\\x6b\\x1b\\x52\\x6d\\xc6\\xf7\\x07\\xd7\\x96\\xc9\\xa4\\xca\"\n\"\\x1f\\x0e\\x91\\xf7\\xda\\x15\\xe6\\xfb\\x7f\\x06\\x5f\\x70\\x75\\x53\\x1e\\x72\\xf7\\xd0\\x07\\x7f\\x0a\\xfb\\x67\\x30\\x07\\xf8\\x03\\x16\\xfb\\x06\\xf7\\x72\"\n\"\\x06\\x9c\\x8c\\x93\\x8f\\x90\\x1e\\x96\\x93\\x9e\\x91\\xa7\\x1b\\xd2\\xbe\\x6a\\x46\\xad\\x1f\\xa6\\x56\\x99\\x43\\x36\\x1a\\x2c\\x77\\x35\\xab\\x0a\\xf7\\x7d\"\n\"\\xf7\\x06\\x07\\x0e\\xf7\\x97\\xf7\\xc2\\x15\\x8a\\xa3\\x9f\\x8b\\x9a\\x1b\\xe2\\xc0\\x95\\xa4\\xba\\x1f\\xc0\\xa8\\xaa\\xc1\\xcb\\x1a\\xce\\x6a\\xc1\\x50\\xaa\"\n\"\\x1e\\x9f\\x63\\x69\\x92\\x49\\x1b\\xfb\\xdd\\x77\\x9f\\x06\\xbf\\x88\\x9a\\x7a\\x89\\x53\\x08\\xfc\\x6a\\x07\\x8c\\x31\\x0a\\x79\\x77\\xf7\\xdd\\x9f\\x6b\\x20\"\n\"\\x1d\\xf8\\xa3\\x04\\x8c\\x9f\\x9d\\x8b\\x9a\\x1b\\xab\\xa5\\x85\\x80\\x9b\\x1f\\xa6\\x78\\x9b\\x5d\\x4f\\x1a\\x27\\x66\\x62\\x31\\x80\\x7b\\x8b\\x8c\\x7b\\x1e\"\n\"\\x0e\\x15\\x81\\x0a\\xca\\xf7\\x02\\xf7\\x0d\\xba\\xb6\\x79\\x65\\xb6\\x1e\\xb6\\x65\\xa2\\x69\\xae\\x3f\\x37\\x0a\\x51\\x5b\\x96\\x5b\\x1b\\xfb\\x5c\\xfb\\x29\"\n\"\\xfb\\x2d\\xfb\\x62\\xfb\\x62\\xf7\\x26\\xfb\\x25\\xf7\\x64\\xf7\\x07\\xcf\\xae\\xf7\\x03\\xf0\\x1f\\x0b\\x61\\x66\\x71\\x7d\\x62\\x1b\\x34\\x54\\xe2\\xf7\\x1c\"\n\"\\xf2\\xab\\xca\\xbf\\x9b\\x9a\\x83\\x80\\x91\\x1f\\x90\\x82\\x8b\\x8b\\x61\\x62\\x1d\\x33\\xfb\\x1c\\x27\\x21\\xfb\\x24\\x0b\\xb6\\x15\\x5e\\x8e\\x7d\\x98\\xb5\"\n\"\\x1a\\xf8\\xd3\\xbb\\x0a\\xfb\\x4b\\x07\\xb9\\x60\\x6d\\x9b\\x5d\\x1b\\xfb\\x02\\x39\\x20\\xfb\\x25\\xfb\\x1d\\xd7\\x29\\xf4\\xc0\\xac\\x9b\\xbd\\xba\\x1f\\x4a\"\n\"\\x07\\xb9\\x98\\xa4\\x90\\xc9\\x92\\xc9\\x93\\x18\\xfb\\x5a\\xe7\\x7e\\x0a\\x0b\\xf9\\x34\\x15\\x33\\x49\\x73\\x54\\x4a\\x1f\\x41\\x4c\\x66\\x34\\xfb\\x04\\x1a\"\n\"\\xfb\\x61\\xf7\\x1a\\xfb\\x1c\\xf7\\x5d\\xf7\\x58\\xf7\\x1c\\xf7\\x1e\\xf7\\x5b\\xf5\\x6e\\xda\\x4d\\xcb\\x1e\\xcc\\x4b\\x3d\\xaa\\x23\\x1b\\x8f\\x68\\x15\\xf6\"\n\"\\xc7\\xfb\\x00\\xfb\\x54\\xfb\\x58\\x4b\\xfb\\x09\\x20\\x5c\\x5e\\xa7\\xb9\\x70\\x1f\\x6c\\xc1\\x7d\\xd1\\xf4\\x1a\\xf7\\x10\\x9f\\xd9\\xba\\xc4\\x5f\\x1d\\x78\"\n\"\\x1d\\x0e\\x99\\x16\\xf7\\xd0\\x06\\x7f\\x0a\\xfc\\x81\\x07\\x5f\\x70\\x75\\x53\\x1e\\xf7\\x89\\xf8\\xda\\x15\\xa2\\x9f\\x97\\xb2\\xd3\\xbd\\x6a\\x46\\xae\\x1e\"\n\"\\xa6\\x57\\x99\\x42\\x36\\x1a\\x2d\\x77\\x34\\xab\\x0a\\x0b\\xf9\\x45\\xa4\\x15\\x5f\\x80\\x99\\xf7\\x11\\x55\\x9b\\x1d\\x98\\x92\\xa3\\xa1\\xc1\\x1e\\x9a\\xb3\"\n\"\\x05\\xf7\\x75\\x06\\xad\\x3c\\x97\\x68\\x75\\x1a\\x75\\x7e\\x82\\x68\\x89\\x1e\\x86\\x8a\\x7e\\x8a\\x7d\\x8a\\x08\\x72\\x0b\\x15\\xfb\\x58\\xfb\\x2c\\xfb\\x2f\"\n\"\\xfb\\x5d\\xfb\\x59\\xf7\\x2c\\xfb\\x31\\xf7\\x53\\xf7\\x5e\\xf7\\x2a\\xf7\\x2b\\xf7\\x61\\xf7\\x5b\\xfb\\x2b\\xf7\\x2f\\xfb\\x58\\x1f\\x57\\x04\\xf7\\x2d\\xf7\"\n\"\\x0f\\xfb\\x1b\\xfb\\x3c\\xfb\\x3f\\xfb\\x0e\\xfb\\x18\\xfb\\x32\\xfb\\x2a\\xfb\\x0f\\xf7\\x1c\\xf7\\x3a\\xf7\\x3d\\xf7\\x0f\\xf7\\x1b\\xf7\\x2e\\x1f\\x0e\\x77\"\n\"\\x07\\xa5\\x87\\x99\\x77\\x89\\x68\\x08\\xfb\\xe4\\x22\\xf7\\xe4\\x07\\x8a\\xae\\x98\\x9f\\xa5\\x8f\\x08\\x9f\\xfb\\x5d\\x77\\x07\\xa5\\x87\\x99\\x77\\x89\\x68\"\n\"\\x08\\xfb\\xe4\\x22\\xf7\\xe4\\x07\\x89\\xae\\x99\\x3e\\x1d\\x89\\x9a\\x77\\x89\\x66\\x29\\x0a\\x67\\x8d\\x7b\\x75\\x6f\\x1b\\x76\\x0b\\xf8\\xad\\xb6\\x15\\x60\"\n\"\\x8d\\x7f\\x98\\x8a\\xb6\\x08\\xf7\\xfc\\xfb\\x5d\\x73\\x07\\xbc\\x88\\x97\\x7f\\x8c\\x5f\\x08\\xfb\\xaf\\x07\\x6a\\x6a\\x77\\x80\\x6e\\x1b\\x62\\x7c\\x9f\\xbe\"\n\"\\x1f\\xf7\\xe7\\xfb\\x50\\x73\\x07\\xb4\\x83\\x92\\x82\\x8c\\x61\\x08\\xfb\\x90\\x07\\x33\\xbd\\x57\\xde\\xbf\\xae\\x9b\\xbd\\xc5\\x1e\\x0b\\xf7\\x65\\xf8\\x5d\"\n\"\\x15\\xfb\\x49\\x54\\x90\\x77\\x05\\x8e\\x93\\x90\\x8c\\x8f\\x1b\\xa2\\x96\\x77\\x5f\\x1f\\xfb\\x6e\\x07\\x57\\x8d\\x7f\\x9a\\x73\\x1e\\x7a\\x95\\x96\\x82\\x94\"\n\"\\x1b\\x90\\x92\\x8d\\x8e\\x94\\x1f\\xf7\\x11\\xbd\\x84\\xa1\\x05\\x85\\x7c\\x82\\x89\\x84\\x1b\\x71\\x87\\x96\\xdb\\x1f\\x0b\\x64\\x1d\\x92\\x89\\x77\\xb7\\x1f\"\n\"\\xa8\\x7e\\x05\\x83\\x9d\\xa6\\xb8\\x0a\\x67\\x7e\\x7d\\x7e\\x70\\x1b\\x7f\\x49\\x0a\\x6e\\x74\\xbd\\x0a\\xf7\\x81\\xf7\\xbe\\x15\\xcd\\xa4\\xa0\\xa7\\xa3\\x1b\"\n\"\\xa3\\x95\\x76\\x5c\\x1f\\xfc\\x87\\xf7\\x11\\xf8\\x90\\x07\\xd2\\x5c\\xc0\\x4d\\x5b\\x67\\x6e\\x45\\x67\\x1e\\xee\\x07\\x54\\x1d\\xfb\\xd6\\xf7\\x11\\x07\\x0b\"\n\"\\xf7\\xf4\\x67\\x0a\\x9f\\x81\\x1d\\x39\\x0a\\x7b\\x7d\\x8e\\x94\\x74\\x1f\\x85\\x8d\\x2f\\x0a\\x0e\\xf7\\x61\\x6a\\x0a\\x0b\\x07\\x89\\xc6\\x9a\\x9d\\xc0\\x8d\"\n\"\\x08\\x9e\\x9f\\xfb\\xd0\\x44\\x0a\\x0b\\xfb\\x69\\xfc\\x19\\x18\\x4b\\xfb\\x05\\x84\\x82\\x64\\x85\\x08\\x72\\xf7\\x62\\xa4\\x07\\x7a\\x8d\\x05\\x57\\x91\\x7d\"\n\"\\x94\\xa7\\x1a\\x97\\x8f\\x97\\x96\\xa0\\x1e\\xef\\xf7\\x50\\x05\\xf7\\x52\\xfb\\x4c\\x06\\x8a\\x40\\x7d\\x0b\\xf9\\x47\\x15\\x4c\\x7a\\x6e\\x73\\xa6\\x0a\\x6e\"\n\"\\x08\\x68\\xa4\\xb4\\x78\\xc1\\xca\\x1d\\xfb\\x48\\x8c\\x1d\\x0b\\x77\\xa6\\x06\\xae\\x8a\\xa0\\x74\\x65\\x1a\\xfb\\x91\\x07\\xfb\\x50\\x6e\\x2e\\x52\\x7b\\x82\"\n\"\\x94\\x9a\\x8f\\x8b\\x8f\\x8c\\x8f\\x1e\\x96\\x07\\xa9\\x73\\xa1\\x69\\x65\\x74\\x72\\x62\\x54\\xb4\\x66\\xc7\\xc6\\xba\\xae\\x0b\\x8c\\x1d\\x0e\\x15\\xc3\\x06\"\n\"\\xf7\\x22\\xc5\\x1d\\x0b\\x15\\xf4\\x8f\\x1d\\xa5\\x0a\\x8d\\x54\\x92\\x72\\xa0\\x6e\\x08\\x68\\xa5\\xb4\\x78\\xc0\\x1b\\xc3\\xac\\x0a\\x1b\\xa8\\x9c\\x7e\\x74\"\n\"\\x70\\x77\\x7d\\x65\\x7b\\x7f\\x8e\\x94\\x72\\x1f\\x85\\x8d\\x2f\\x0a\\x0e\\x15\\xa7\\xae\\x9b\\xa0\\x90\\x92\\x08\\xb1\\xc0\\x9a\\xa5\\x9c\\x1a\\x92\\x87\\x8f\"\n\"\\x83\\x83\\x83\\x87\\x7e\\x7c\\x1e\\x8a\\x8a\\x89\\x89\\x88\\x89\\xfb\\x5f\\xfb\\x38\\x18\\x87\\x07\\xf7\\x62\\xfb\\x3a\\x0b\\x5f\\xc6\\xf7\\x1c\\x1e\\xf7\\xe2\"\n\"\\x07\\x8d\\xd8\\x99\\x98\\xdc\\x8d\\x08\\xa4\\xfb\\xe6\\x72\\x07\\xd0\\x85\\x96\\x7e\\x8d\\x42\\x08\\xfb\\xe2\\x07\\x29\\xa0\\x5a\\xc8\\x5f\\x1e\\x68\\xbb\\xcb\"\n\"\\x79\\x0b\\x9a\\x1d\\xb6\\x9d\\x8e\\x96\\x94\\x95\\x1f\\x0b\\x1e\\x83\\x77\\xf7\\x67\\x9f\\x06\\x73\\x8c\\x89\\xbf\\x0a\\xc7\\xd2\\x9b\\x95\\xc1\\x8c\\x19\\x9f\"\n\"\\xfb\\x41\\x77\\x9f\\x07\\x9b\\x94\\x84\\x0b\\xad\\x0a\\xf7\\x60\\x9f\\x07\\x72\\x90\\x7f\\x9f\\x8c\\xba\\x0a\\x99\\x74\\x90\\x81\\x86\\x1a\\x82\\x0b\\x07\\x8a\"\n\"\\x61\\x83\\x83\\x5c\\x83\\x08\\x73\\xf7\\xa5\\x07\\x3d\\xf8\\xbb\\x15\\x92\\x94\\x9b\\x97\\x98\\x1e\\xa1\\x9f\\xa2\\x97\\xa1\\x1b\\xbf\\xa3\\x4f\\xfb\\x17\\x0b\"\n\"\\x15\\xfc\\xa0\\x07\\x3a\\xf7\\x66\\x56\\x74\\xf7\\x13\\xfb\\xb2\\x05\\xd8\\x06\\xf7\\x14\\xf7\\xb2\\x56\\xa2\\x3a\\xfb\\x66\\x05\\xf8\\xa0\\x07\\xdc\\xfb\\x66\"\n\"\\xc0\\x0b\\xb4\\x1d\\xc0\\x1b\\xc3\\xb4\\x9f\\xb4\\xa5\\x1f\\x9c\\xa6\\x92\\xa3\\x0b\\x81\\x0a\\xcb\\xf7\\x02\\xf7\\x0c\\xba\\x0b\\x63\\x1d\\xb7\\x83\\x93\\xcb\"\n\"\\x1d\\x0b\\x15\\x85\\x81\\x7a\\x7f\\x7e\\x1e\\x74\\x77\\x76\\x80\\x75\\x1b\\x56\\x72\\xc6\\xf7\\x14\\xf7\\x15\\xa6\\xc6\\xc5\\xac\\xaa\\x73\\x65\\x99\\x1f\\x0b\"\n\"\\xf7\\x6c\\xf7\\x24\\xf7\\x1e\\xf7\\x63\\xf7\\x62\\xfb\\x1f\\xf7\\x11\\xfb\\x7c\\x1f\\xfb\\xc5\\x72\\x06\\xca\\x86\\x9e\\x7c\\x8c\\x5c\\x08\\x0b\\x69\\xbc\\xf7\"\n\"\\x07\\x1f\\xa2\\xf7\\x92\\x07\\xc9\\x86\\xa9\\x7a\\xae\\x1e\\xc9\\x6d\\x4e\\xaf\\x41\\x1b\\x56\\x66\\x7c\\x67\\x66\\x1f\\xb0\\x0b\\x50\\x4d\\x6b\\x73\\x5a\\x78\"\n\"\\x08\\x7f\\x6e\\x6a\\x85\\x6f\\x1b\\x49\\x4c\\xae\\xbf\\x6e\\x1f\\x6e\\xc0\\x7d\\xd2\\xf0\\x1a\\xf7\\x63\\x0b\\x62\\x1a\\x51\\xd6\\x69\\xf7\\x12\\xf7\\x3b\\xe2\"\n\"\\xbf\\xee\\xd8\\x51\\xb6\\x21\\x8d\\x1e\\x4a\\x8c\\x05\\x36\\x8c\\x7c\\x90\\xa7\\x1a\\x0b\\xf9\\x76\\xc3\\x1d\\x7b\\x45\\x1d\\x07\\x4a\\xb6\\x63\\xd0\\xce\\xb3\"\n\"\\xa9\\xdd\\xb4\\x1e\\x72\\x96\\x05\\x69\\x1d\\x0b\\x43\\x0a\\xa5\\x78\\x9d\\x6e\\x77\\x7a\\x82\\x78\\x7a\\x1e\\x0e\\x30\\x0a\\xfc\\xa1\\xfb\\x6f\\xf8\\xa1\\x07\"\n\"\\x0b\\x6e\\x8c\\x7b\\xa0\\x8d\\xb0\\x08\\xf7\\xba\\xa8\\x0a\\x8a\\x0b\\x79\\x72\\x1a\\x83\\xa2\\xf7\\xd7\\x74\\x07\\x82\\x2c\\x6a\\x5d\\x4f\\x89\\x08\\x70\\xf7\"\n\"\\xa3\\xf7\\x06\\x06\\xe5\\x88\\x0b\\xc0\\x8d\\x08\\x9e\\x9f\\xfb\\xd0\\x77\\x9e\\x06\\xbf\\x89\\x9b\\x0b\\x83\\x94\\x91\\x89\\x91\\x1b\\x92\\x8f\\x91\\x94\\x9f\"\n\"\\x70\\xb6\\x58\\xc6\\x1f\\x7d\\x9c\\x7f\\x9b\\x7d\\xa0\\x08\\x0b\\x1f\\xc0\\x5c\\x05\\xac\\xa2\\x9c\\x95\\xa8\\x1b\\xae\\xaa\\x82\\x71\\xb9\\x1f\\x72\\xb9\\xa5\"\n\"\\x83\\xac\\x1b\\xb9\\x0b\\xf7\\xd0\\xb3\\x1d\\x0b\\x83\\x86\\x81\\x7f\\x7e\\x1f\\xfb\\x11\\xfb\\x1e\\x05\\xf7\\x16\\x07\\x8a\\xad\\x97\\x9e\\xa5\\x90\\x08\\x9f\"\n\"\\x0b\\x07\\x25\\x0a\\xf7\\xc5\\x9f\\x83\\x20\\x1d\\x0b\\x89\\x53\\x08\\xfb\\x67\\x07\\xfb\\x3c\\xf7\\x61\\x05\\x78\\xa2\\x84\\x98\\x99\\x1a\\x9f\\x9b\\x97\\xa6\"\n\"\\x1e\\x0b\\x1a\\x9f\\x96\\x97\\x9d\\x1e\\x95\\x9f\\xfb\\x74\\x77\\x06\\xa6\\xa7\\x60\\x37\\xa7\\x1f\\xcf\\xfb\\x6b\\x05\\x0b\\xf8\\x35\\x15\\x5d\\x65\\x65\\x5d\"\n\"\\x5b\\xaf\\x66\\xba\\xbc\\xb0\\xaf\\xba\\xba\\x65\\xb2\\x5c\\x1f\\x0e\\xa0\\x0a\\x81\\x88\\x7b\\x1b\\x0b\\x15\\x53\\xbf\\x1d\\x15\\x4c\\x7b\\x6e\\x74\\x4e\\x1b\"\n\"\\x4d\\x6c\\xa4\\xc8\\x80\\x1f\\x60\\x06\\x8d\\x55\\x92\\x73\\xa0\\x0b\\xf9\\x38\\x15\\xfb\\x70\\x72\\x06\\xd8\\x86\\xa0\\x76\\x42\\x1a\\xfb\\xc5\\x07\\xfb\\x28\"\n\"\\x53\\x46\\x0b\\x6a\\x66\\xac\\x06\\xc7\\xa8\\x6e\\x50\\x52\\x69\\x68\\x55\\x5f\\x6d\\xa6\\xc6\\x76\\x1f\\x70\\x82\\x0b\\xa4\\xb3\\x79\\xbf\\x1b\\xc2\\xb3\\x9f\"\n\"\\xb3\\xa4\\xc3\\x0a\\x07\\x8a\\x65\\x79\\x76\\x6b\\x8a\\x08\\x73\\xf7\\x83\\x0b\\xb8\\x69\\xc8\\x5e\\x1d\\x0b\\x76\\x68\\x83\\x62\\x35\\x1a\\x65\\x1d\\x80\\x7f\"\n\"\\x5e\\x87\\x08\\x0b\\x5d\\x65\\x65\\x5e\\x5a\\xaf\\x66\\xbb\\xba\\xb1\\xb1\\xb9\\xba\\x65\\xb1\\x5c\\x1f\\x0e\\x15\\x6e\\x73\\x74\\x6e\\x6e\\xa2\\x74\\xa8\\xa8\"\n\"\\xa2\\xa2\\xa8\\xa7\\x74\\xa3\\x6f\\x1f\\x0b\\x15\\x63\\x4e\\x0a\\xb2\\xaa\\xaa\\xb1\\xb1\\x6c\\xab\\x66\\x1f\\x0b\\x15\\x6b\\x71\\x72\\x6b\\x6b\\xa5\\x71\\xab\"\n\"\\xaa\\xa5\\xa5\\xab\\xaa\\x71\\xa5\\x6c\\x1f\\x0b\\xf7\\x68\\x18\\xb6\\xbc\\x05\\xd2\\xc6\\x9c\\x96\\xc0\\x1b\\x9f\\xfb\\x41\\x77\\xa0\\x07\\x0b\\x5e\\x1d\\x77\"\n\"\\x0b\\x1b\\xdb\\xbd\\xad\\xc2\\xb7\\x6a\\xa5\\x54\\x7d\\x84\\x8a\\x87\\x7f\\x1f\\x0e\\x78\\x89\\x51\\x08\\xfc\\x67\\x21\\x1d\\x78\\x77\\x0b\\xcf\\x8e\\x08\\xa4\"\n\"\\xfb\\xe5\\x72\\x07\\xcc\\x0b\\x08\\xa4\\xf7\\x5d\\xfd\\x0e\\x75\\x06\\xce\\x87\\x9f\\x82\\x73\\x1a\\x81\\x0b\\x15\\x4b\\x79\\x6e\\x74\\xf0\\x1d\\x0b\\x4d\\x1b\"\n\"\\x4b\\x6c\\xa5\\xc8\\x7f\\x1f\\x5f\\x06\\x8e\\x54\\x92\\x72\\xa0\\x0b\\x79\\x52\\x55\\x62\\x79\\xbb\\xf4\\xf7\\x4b\\x9b\\xc4\\xbd\\x1e\\x0e\\x07\\x89\\xb0\\xec\"\n\"\\x1d\\xa7\\x0b\\x15\\xf7\\x08\\xce\\xbd\\xcd\\xe1\\x1a\\xd0\\x62\\xba\\x4f\\x59\\x6a\\x0b\\x1b\\xbd\\xa3\\x6a\\x47\\x50\\x75\\x6b\\x63\\x75\\x84\\x93\\xa3\\x1f\"\n\"\\x0b\\x6b\\x5e\\x1e\\x5d\\x69\\x5b\\x74\\x4a\\x1b\\x5e\\x7e\\x98\\xb8\\x1f\\x0b\\xb4\\xd9\\x1d\\x8d\\x66\\x7b\\x76\\x6e\\x8a\\x08\\x77\\x0b\\xa4\\xb5\\x78\\xc0\"\n\"\\x1b\\xc3\\xb3\\x9f\\xb4\\xa5\\x1f\\x9c\\xa5\\x0b\\x7a\\x8c\\x86\\x9a\\x49\\x1e\\x8d\\x81\\x8d\\x82\\x8d\\x82\\x08\\x0b\\x54\\x25\\x31\\x61\\x56\\x43\\x65\\x7e\"\n\"\\x99\\xb4\\x1f\\x0e\\x16\\xf7\\xe2\\xa4\\x06\\x3d\\x94\\x83\\x94\\x89\\xd5\\x08\\x0b\\x9f\\x07\\xc2\\x0a\\x0b\\xc6\\xb8\\xc6\\xd9\\x1a\\xca\\x67\\xb5\\x55\\x5d\"\n\"\\x6e\\x6e\\x0b\\xfb\\x14\\xf7\\xb2\\x05\\x3e\\x06\\xfb\\x13\\xfb\\xb2\\xc0\\x0b\\x77\\x07\\xa8\\x8a\\x9b\\x76\\x89\\x67\\x29\\x0a\\x0b\\x1b\\x71\\x76\\x77\\x72\"\n\"\\x77\\x96\\x0b\\x54\\x92\\x72\\xa0\\x6f\\x08\\x67\\x0b\\x85\\x9e\\x1b\\xc4\\xb0\\xb3\\xe2\\xa2\\x1f\\x60\\x06\\x0b\\xf7\\xba\\x07\\x89\\xb0\\x9b\\xa0\\xa8\\x8c\"\n\"\\x08\\x9f\\x0b\\xad\\x08\\xf7\\x06\\x07\\x99\\x9d\\xde\\xfb\\x1f\\x05\\x0b\\xfb\\x6b\\x73\\x07\\xcc\\x87\\x95\\x84\\x8c\\x5c\\x08\\x0b\\xda\\x69\\x1e\\x7d\\xad\"\n\"\\xa6\\x87\\xd0\\x1b\\xf7\\xac\\x0b\\x91\\x76\\x1b\\x4d\\x50\\x0a\\x85\\x85\\x81\\x1e\\x82\\x7c\\x87\\x81\\x80\\x1a\\x0b\\x8c\\x71\\xb7\\xfb\\x26\\xf7\\x7e\\x18\"\n\"\\xb6\\xbd\\x0b\\x15\\xc8\\x06\\xf8\\x5e\\xf9\\x2a\\x05\\x4d\\x06\\x0b\\xf8\\xad\\xf7\\x65\\x15\\xe3\\xfc\\x8c\\x33\\x07\\x0b\\x6e\\x8c\\x7b\\xa0\\x8d\\xb0\\x08\"\n\"\\xf7\\xba\\x07\\x0b\\x1f\\x9c\\xa5\\x92\\xa3\\x90\\xbd\\x08\\x0e\\x1f\\xf7\\x1f\\x35\\x05\\x0e\", 50579\n};\n"
  },
  {
    "path": "src/fonts/NimbusRoman-BoldItalic.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusRoman_BoldItalic_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x17\\x4e\\x69\\x6d\\x62\\x75\\x73\\x52\\x6f\\x6d\\x61\\x6e\\x2d\\x42\\x6f\\x6c\\x64\\x49\\x74\\x61\\x6c\\x69\\x63\\x00\"\n\"\\x01\\x01\\x01\\x3e\\xf9\\xbc\\x00\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xc0\\x03\\xf8\\x14\\x04\\x1e\\xe1\\x5a\\x30\\x00\\x00\\x19\\xff\\x0c\"\n\"\\x02\\xfb\\x01\\x0c\\x03\\xd0\\x0c\\x04\\xfb\\x5c\\xfb\\xd8\\x1c\\x04\\x82\\xfa\\x60\\x05\\x1c\\x2a\\xe5\\x0f\\x1c\\x2a\\xf8\\x11\\xaf\\x1d\\x00\\x00\\xc5\\xbc\"\n\"\\x12\\x01\\xa6\\x02\\x00\\x01\\x00\\x08\\x00\\x0e\\x00\\x13\\x00\\x1d\\x00\\x24\\x00\\x2b\\x00\\x35\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\"\n\"\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x74\\x00\\x7a\\x00\\x84\\x00\\x8b\\x00\\x8e\\x00\\x95\\x00\\x9c\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\"\n\"\\x00\\xcd\\x00\\xd9\\x00\\xe3\\x00\\xe7\\x00\\xf2\\x00\\xf4\\x00\\xfa\\x01\\x04\\x01\\x0b\\x01\\x12\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\"\n\"\\x01\\x4d\\x01\\x53\\x01\\x59\\x01\\x5f\\x01\\x6b\\x01\\x6f\\x01\\x71\\x01\\x77\\x01\\x7d\\x01\\x89\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\"\n\"\\x01\\xc2\\x01\\xcd\\x01\\xd0\\x01\\xd2\\x01\\xd5\\x01\\xdb\\x01\\xe1\\x01\\xed\\x01\\xf0\\x01\\xf6\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\"\n\"\\x02\\x27\\x02\\x33\\x02\\x38\\x02\\x3e\\x02\\x4b\\x02\\x52\\x02\\x59\\x02\\x60\\x02\\x6f\\x02\\x7b\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\"\n\"\\x02\\xa8\\x02\\xb3\\x02\\xb9\\x02\\xbf\\x02\\xc9\\x02\\xcd\\x02\\xd3\\x02\\xda\\x02\\xe3\\x02\\xec\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\"\n\"\\x03\\x2b\\x03\\x34\\x03\\x3d\\x03\\x46\\x03\\x4f\\x03\\x58\\x03\\x61\\x03\\x6a\\x03\\x73\\x03\\x7c\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\"\n\"\\x03\\xbb\\x03\\xc4\\x03\\xcd\\x03\\xd6\\x03\\xdf\\x03\\xe8\\x03\\xf1\\x03\\xfa\\x04\\x03\\x04\\x0c\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\"\n\"\\x04\\x4b\\x04\\x54\\x04\\x5d\\x04\\x66\\x04\\x6f\\x04\\x78\\x04\\x81\\x04\\x8a\\x04\\x93\\x04\\x9c\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\"\n\"\\x04\\xdb\\x04\\xe4\\x04\\xed\\x04\\xf6\\x04\\xff\\x05\\x08\\x05\\x11\\x05\\x1a\\x05\\x23\\x05\\x2c\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\"\n\"\\x05\\x6b\\x05\\x74\\x05\\x7d\\x05\\x86\\x05\\x8f\\x05\\x98\\x05\\xa1\\x05\\xaa\\x05\\xb3\\x05\\xbc\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\"\n\"\\x05\\xfb\\x06\\x04\\x06\\x0d\\x06\\x16\\x06\\x1f\\x06\\x28\\x06\\x31\\x06\\x3a\\x06\\x43\\x06\\x4c\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\"\n\"\\x06\\x85\\x06\\x90\\x06\\x9a\\x06\\xa3\\x06\\xac\\x06\\xb5\\x06\\xbf\\x06\\xc6\\x06\\xcf\\x06\\xdb\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\"\n\"\\x07\\x11\\x07\\x15\\x07\\x1b\\x07\\x21\\x07\\x26\\x07\\x2d\\x07\\x3a\\x07\\x40\\x07\\x46\\x07\\x50\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\"\n\"\\x07\\x86\\x07\\x8f\\x07\\x92\\x07\\x9a\\x07\\xa3\\x07\\xae\\x07\\xb4\\x07\\xb9\\x07\\xbe\\x07\\xc4\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\"\n\"\\x08\\x05\\x08\\x0a\\x08\\x10\\x08\\x12\\x08\\x19\\x08\\x21\\x08\\x29\\x08\\x33\\x08\\x3d\\x08\\x49\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\"\n\"\\x08\\x8c\\x08\\x97\\x08\\x9c\\x08\\xa8\\x08\\xb4\\x08\\xba\\x08\\xc0\\x08\\xc6\\x08\\xd2\\x08\\xd6\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\"\n\"\\x09\\x0b\\x09\\x11\\x09\\x1c\\x09\\x22\\x09\\x2e\\x09\\x38\\x09\\x40\\x09\\x42\\x09\\x48\\x09\\x55\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\"\n\"\\x09\\x93\\x09\\x9e\\x09\\xa4\\x09\\xa7\\x09\\xa9\\x09\\xb0\\x09\\xbc\\x09\\xca\\x09\\xcd\\x09\\xda\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\"\n\"\\x0a\\x0f\\x0a\\x17\\x0a\\x22\\x0a\\x2e\\x0a\\x34\\x0a\\x39\\x0a\\x42\\x0a\\x47\\x0a\\x50\\x0a\\x53\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\"\n\"\\x0a\\x7c\\x0a\\x89\\x0a\\x90\\x0a\\x9d\\x0a\\xa4\\x0a\\xab\\x0a\\xb2\\x0a\\xb9\\x0a\\xc0\\x0a\\xc7\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\"\n\"\\x0a\\xf8\\x0a\\xff\\x0b\\x06\\x0b\\x0d\\x0b\\x14\\x0b\\x1b\\x0b\\x22\\x0b\\x29\\x0b\\x30\\x0b\\x37\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\"\n\"\\x0b\\x68\\x0b\\x6f\\x0b\\x76\\x0b\\x7d\\x0b\\x84\\x0b\\x8b\\x0b\\x92\\x0b\\x99\\x0b\\xa0\\x0b\\xa7\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\"\n\"\\x0b\\xd8\\x0b\\xdf\\x0b\\xe6\\x0b\\xed\\x0b\\xf4\\x0b\\xfb\\x0c\\x02\\x0c\\x09\\x0c\\x10\\x0c\\x17\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\"\n\"\\x0c\\x48\\x0c\\x4d\\x0c\\x56\\x0c\\x5d\\x0c\\x64\\x0c\\x73\\x0c\\x87\\x0c\\x93\\x0c\\x98\\x0c\\x9e\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\"\n\"\\x0c\\xd1\\x0c\\xd7\\x0c\\xe1\\x0c\\xe5\\x0c\\xe9\\x0d\\x1f\\x0d\\x5f\\x0d\\x77\\x0d\\x83\\x41\\x45\\x61\\x63\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\"\n\"\\x6c\\x70\\x68\\x61\\x41\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x41\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x41\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\"\n\"\\x67\\x61\\x63\\x75\\x74\\x65\\x42\\x65\\x74\\x61\\x43\\x61\\x63\\x75\\x74\\x65\\x43\\x63\\x61\\x72\\x6f\\x6e\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\"\n\"\\x78\\x43\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x43\\x68\\x69\\x44\\x63\\x61\\x72\\x6f\\x6e\\x44\\x63\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\"\n\"\\x62\\x72\\x65\\x76\\x65\\x45\\x63\\x61\\x72\\x6f\\x6e\\x45\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x45\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\"\n\"\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\"\n\"\\x6f\\x6e\\x6f\\x73\\x45\\x75\\x72\\x6f\\x47\\x61\\x6d\\x6d\\x61\\x47\\x62\\x72\\x65\\x76\\x65\\x47\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\"\n\"\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x47\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x48\\x62\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\"\n\"\\x6c\\x65\\x78\\x49\\x4a\\x49\\x62\\x72\\x65\\x76\\x65\\x49\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x49\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\"\n\"\\x6e\\x65\\x6b\\x49\\x6f\\x74\\x61\\x49\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x49\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\"\n\"\\x64\\x65\\x4a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x4b\\x61\\x70\\x70\\x61\\x4b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\"\n\"\\x63\\x75\\x74\\x65\\x4c\\x61\\x6d\\x62\\x64\\x61\\x4c\\x63\\x61\\x72\\x6f\\x6e\\x4c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\"\n\"\\x4d\\x75\\x4e\\x61\\x63\\x75\\x74\\x65\\x4e\\x63\\x61\\x72\\x6f\\x6e\\x4e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\"\n\"\\x76\\x65\\x4f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x4f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\"\n\"\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\"\n\"\\x69\\x50\\x69\\x50\\x73\\x69\\x52\\x61\\x63\\x75\\x74\\x65\\x52\\x63\\x61\\x72\\x6f\\x6e\\x52\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\"\n\"\\x6f\\x53\\x61\\x63\\x75\\x74\\x65\\x53\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x53\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\"\n\"\\x61\\x63\\x63\\x65\\x6e\\x74\\x53\\x69\\x67\\x6d\\x61\\x54\\x61\\x75\\x54\\x62\\x61\\x72\\x54\\x63\\x61\\x72\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\"\n\"\\x63\\x65\\x6e\\x74\\x54\\x68\\x65\\x74\\x61\\x55\\x62\\x72\\x65\\x76\\x65\\x55\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\"\n\"\\x72\\x6f\\x6e\\x55\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\"\n\"\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x55\\x72\\x69\\x6e\\x67\\x55\\x74\\x69\\x6c\\x64\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\"\n\"\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x57\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x57\\x67\\x72\\x61\\x76\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\"\n\"\\x66\\x6c\\x65\\x78\\x59\\x67\\x72\\x61\\x76\\x65\\x5a\\x61\\x63\\x75\\x74\\x65\\x5a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\"\n\"\\x72\\x65\\x76\\x65\\x61\\x65\\x61\\x63\\x75\\x74\\x65\\x61\\x66\\x69\\x69\\x30\\x30\\x32\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x31\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\"\n\"\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x32\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x33\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x33\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x34\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x34\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x35\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\"\n\"\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x35\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x36\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x37\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x37\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x38\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x38\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\"\n\"\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x39\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x39\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x31\\x30\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x31\\x30\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x31\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\"\n\"\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x38\\x34\\x36\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x34\\x38\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\"\n\"\\x69\\x36\\x31\\x33\\x35\\x32\\x61\\x6c\\x70\\x68\\x61\\x61\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x61\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\"\n\"\\x65\\x6c\\x65\\x66\\x74\\x61\\x6e\\x67\\x6c\\x65\\x72\\x69\\x67\\x68\\x74\\x61\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\"\n\"\\x6c\\x61\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x61\\x72\\x72\\x6f\\x77\\x62\\x6f\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\"\n\"\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\\x77\\x72\\x69\\x67\\x68\\x74\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\"\n\"\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x62\\x73\\x65\\x62\\x65\\x74\\x61\\x63\\x61\\x63\\x75\\x74\\x65\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\"\n\"\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x63\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x63\\x68\\x69\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\"\n\"\\x6c\\x79\\x63\\x6c\\x75\\x62\\x64\\x63\\x61\\x72\\x6f\\x6e\\x64\\x63\\x72\\x6f\\x61\\x74\\x64\\x65\\x6c\\x74\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\"\n\"\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x62\\x72\\x65\\x76\\x65\\x65\\x63\\x61\\x72\\x6f\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\"\n\"\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x65\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x65\\x6e\\x67\\x65\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\"\n\"\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x71\\x75\\x69\\x76\\x61\\x6c\\x65\\x6e\\x63\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\"\n\"\\x65\\x74\\x61\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x78\\x63\\x6c\\x61\\x6d\\x64\\x62\\x6c\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\"\n\"\\x65\\x6d\\x61\\x6c\\x65\\x66\\x72\\x61\\x6e\\x63\\x67\\x61\\x6d\\x6d\\x61\\x67\\x62\\x72\\x65\\x76\\x65\\x67\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\"\n\"\\x67\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\"\n\"\\x61\\x6c\\x68\\x62\\x61\\x72\\x68\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x68\\x65\\x61\\x72\\x74\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\"\n\"\\x65\\x69\\x6a\\x69\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x69\\x6e\\x66\\x69\\x6e\\x69\\x74\\x79\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\"\n\"\\x61\\x6c\\x62\\x74\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x74\\x70\\x69\\x6e\\x74\\x65\\x72\\x73\\x65\\x63\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\"\n\"\\x6c\\x65\\x66\\x61\\x63\\x65\\x69\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x69\\x6f\\x74\\x61\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\"\n\"\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\"\n\"\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x6b\\x61\\x70\\x70\\x61\\x6b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\"\n\"\\x61\\x6e\\x64\\x69\\x63\\x6c\\x61\\x63\\x75\\x74\\x65\\x6c\\x61\\x6d\\x62\\x64\\x61\\x6c\\x63\\x61\\x72\\x6f\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\"\n\"\\x65\\x6e\\x74\\x6c\\x64\\x6f\\x74\\x6c\\x65\\x73\\x73\\x65\\x71\\x75\\x61\\x6c\\x6c\\x69\\x72\\x61\\x6c\\x6f\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\"\n\"\\x75\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\"\n\"\\x74\\x65\\x6e\\x61\\x70\\x6f\\x73\\x74\\x72\\x6f\\x70\\x68\\x65\\x6e\\x63\\x61\\x72\\x6f\\x6e\\x6e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\"\n\"\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x71\\x75\\x61\\x6c\\x6e\\x75\\x6f\\x62\\x72\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\"\n\"\\x75\\x6d\\x6c\\x61\\x75\\x74\\x6f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x65\\x67\\x61\\x6f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\"\n\"\\x72\\x6f\\x6e\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x72\\x74\\x68\\x6f\\x67\\x6f\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\"\n\"\\x63\\x75\\x74\\x65\\x70\\x61\\x72\\x74\\x69\\x61\\x6c\\x64\\x69\\x66\\x66\\x70\\x65\\x73\\x65\\x74\\x61\\x70\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\"\n\"\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x62\\x73\\x65\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\"\n\"\\x6f\\x74\\x65\\x72\\x65\\x76\\x65\\x72\\x73\\x65\\x64\\x72\\x61\\x63\\x75\\x74\\x65\\x72\\x61\\x64\\x69\\x63\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\"\n\"\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x72\\x65\\x76\\x6c\\x6f\\x67\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\"\n\"\\x73\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x73\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x73\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\"\n\"\\x65\\x63\\x6f\\x6e\\x64\\x73\\x69\\x67\\x6d\\x61\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x73\\x70\\x61\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\"\n\"\\x6e\\x73\\x75\\x6e\\x74\\x61\\x75\\x74\\x62\\x61\\x72\\x74\\x63\\x61\\x72\\x6f\\x6e\\x74\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\"\n\"\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x62\\x72\\x65\\x76\\x65\\x75\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\"\n\"\\x6e\\x75\\x6e\\x64\\x65\\x72\\x73\\x63\\x6f\\x72\\x65\\x64\\x62\\x6c\\x75\\x6e\\x69\\x30\\x30\\x41\\x30\\x75\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\"\n\"\\x32\\x31\\x41\\x75\\x6e\\x69\\x30\\x32\\x31\\x42\\x75\\x6e\\x69\\x30\\x32\\x43\\x39\\x75\\x6e\\x69\\x30\\x33\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\"\n\"\\x6e\\x69\\x30\\x33\\x41\\x39\\x75\\x6e\\x69\\x30\\x33\\x42\\x43\\x75\\x6e\\x69\\x30\\x33\\x43\\x32\\x75\\x6e\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x30\\x44\\x75\\x6e\\x69\\x30\\x34\\x35\\x30\\x75\\x6e\\x69\\x30\\x34\\x35\\x44\\x75\\x6e\\x69\\x30\\x34\\x39\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x39\\x36\\x75\\x6e\\x69\\x30\\x34\\x39\\x37\\x75\\x6e\\x69\\x30\\x34\\x39\\x38\\x75\\x6e\\x69\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\"\n\"\\x41\\x75\\x6e\\x69\\x30\\x34\\x39\\x42\\x75\\x6e\\x69\\x30\\x34\\x39\\x43\\x75\\x6e\\x69\\x30\\x34\\x39\\x44\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x41\\x31\\x75\\x6e\\x69\\x30\\x34\\x41\\x32\\x75\\x6e\\x69\\x30\\x34\\x41\\x33\\x75\\x6e\\x69\\x30\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x41\\x45\\x75\\x6e\\x69\\x30\\x34\\x41\\x46\\x75\\x6e\\x69\\x30\\x34\\x42\\x30\\x75\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x42\\x32\\x75\\x6e\\x69\\x30\\x34\\x42\\x33\\x75\\x6e\\x69\\x30\\x34\\x42\\x36\\x75\\x6e\\x69\\x30\\x34\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x42\\x39\\x75\\x6e\\x69\\x30\\x34\\x42\\x41\\x75\\x6e\\x69\\x30\\x34\\x42\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x43\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x43\\x75\\x6e\\x69\\x30\\x34\\x44\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x45\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x39\\x75\\x6e\\x69\\x30\\x34\\x45\\x45\\x75\\x6e\\x69\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\"\n\"\\x45\\x75\\x6e\\x69\\x32\\x30\\x41\\x46\\x75\\x6e\\x69\\x32\\x31\\x32\\x36\\x75\\x6e\\x69\\x32\\x32\\x31\\x35\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\"\n\"\\x32\\x32\\x32\\x37\\x75\\x6e\\x69\\x32\\x32\\x32\\x38\\x75\\x6e\\x69\\x32\\x32\\x39\\x35\\x75\\x6e\\x69\\x32\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\"\n\"\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x75\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\"\n\"\\x65\\x73\\x69\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\"\n\"\\x6f\\x6e\\x6f\\x73\\x75\\x72\\x69\\x6e\\x67\\x75\\x74\\x69\\x6c\\x64\\x65\\x77\\x61\\x63\\x75\\x74\\x65\\x77\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\"\n\"\\x77\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x77\\x67\\x72\\x61\\x76\\x65\\x78\\x69\\x79\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\"\n\"\\x76\\x65\\x7a\\x61\\x63\\x75\\x74\\x65\\x7a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x7a\\x65\\x74\\x61\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\"\n\"\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\"\n\"\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\"\n\"\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\"\n\"\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x52\\x6f\\x6d\\x61\\x6e\\x20\\x42\\x6f\\x6c\"\n\"\\x64\\x20\\x49\\x74\\x61\\x6c\\x69\\x63\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x52\\x6f\\x6d\\x61\\x6e\\x00\\xd9\\x02\\x00\\x01\\x00\\x06\\x00\\x0b\\x00\\x0f\\x00\"\n\"\\x16\\x00\\xa0\\x00\\xae\\x01\\x05\\x01\\x33\\x01\\x38\\x01\\x3e\\x01\\x51\\x01\\x5a\\x01\\x64\\x01\\x76\\x01\\x7c\\x01\\x84\\x01\\xe9\\x02\\x5f\\x02\\xcc\\x03\"\n\"\\x31\\x03\\x94\\x03\\xb6\\x03\\xd8\\x03\\xe3\\x03\\xe6\\x03\\xf1\\x03\\xfd\\x04\\x7d\\x04\\xf5\\x05\\x53\\x05\\x6d\\x05\\xa1\\x05\\xc4\\x05\\xe1\\x06\\x06\\x06\"\n\"\\x14\\x06\\x25\\x06\\x2a\\x06\\x38\\x06\\x4d\\x06\\x5b\\x06\\x70\\x06\\x78\\x06\\x80\\x06\\x86\\x06\\x8e\\x06\\xca\\x06\\xfd\\x07\\x38\\x07\\x47\\x07\\x4c\\x07\"\n\"\\x51\\x07\\x61\\x07\\x82\\x07\\x9d\\x07\\xb0\\x07\\xc2\\x07\\xc9\\x07\\xce\\x07\\xdf\\x07\\xe9\\x08\\x00\\x08\\x0d\\x08\\x1f\\x08\\x33\\x08\\x36\\x08\\x41\\x08\"\n\"\\x52\\x08\\x5c\\x08\\x61\\x08\\x6a\\x08\\x73\\x08\\x80\\x08\\x8a\\x08\\x92\\x08\\x9a\\x08\\xa2\\x08\\xad\\x09\\x66\\x09\\xe6\\x0a\\x6d\\x0a\\xf1\\x0b\\x12\\x0b\"\n\"\\x3b\\x0b\\xac\\x0c\\x0b\\x0c\\x6c\\x0c\\x76\\x0c\\xd1\\x0c\\xd4\\x0d\\x27\\x0d\\x7c\\x0d\\xd0\\x0e\\x06\\x0e\\x25\\x0e\\x31\\x0e\\x50\\x0e\\x96\\x0e\\xcd\\x0f\"\n\"\\x01\\x0f\\x07\\x0f\\x45\\x0f\\x6d\\x0f\\xac\\x0f\\xe9\\x10\\x13\\x10\\x4c\\x10\\x5f\\x10\\x89\\x10\\x9c\\x10\\xb5\\x10\\xc6\\x10\\xf1\\x11\\x1b\\x11\\x42\\x11\"\n\"\\x6a\\x11\\x85\\x11\\x9a\\x11\\xbe\\x11\\xcb\\x11\\xd8\\x11\\xfb\\x12\\x0e\\x12\\x30\\x12\\x52\\x12\\x74\\x12\\x8b\\x12\\xab\\x12\\xc8\\x12\\xe7\\x12\\xef\\x12\"\n\"\\xfc\\x13\\x17\\x13\\x28\\x13\\x45\\x13\\x60\\x13\\x68\\x13\\x7d\\x13\\x98\\x13\\xa8\\x13\\xb3\\x13\\xbe\\x13\\xd5\\x13\\xe0\\x13\\xf8\\x14\\x0a\\x14\\x23\\x14\"\n\"\\x3c\\x14\\x54\\x14\\x5c\\x14\\x6e\\x14\\x7b\\x14\\x8d\\x14\\xa3\\x14\\xb8\\x14\\xc0\\x14\\xd5\\x14\\xe8\\x14\\xec\\x14\\xf5\\x15\\x08\\x15\\x1b\\x15\\x2e\\x15\"\n\"\\x41\\x15\\x49\\x15\\x5b\\x15\\x6a\\x15\\x7c\\x15\\x8c\\x15\\x9c\\x15\\xab\\x15\\xbc\\x15\\xcb\\x15\\xdc\\x15\\xed\\x15\\xfc\\x16\\x06\\x16\\x10\\x16\\x20\\x16\"\n\"\\x30\\x16\\x40\\x16\\x50\\x16\\x60\\x16\\x6f\\x16\\x7e\\x16\\x8d\\x16\\x9c\\x16\\xab\\x16\\xb0\\x16\\xbe\\x16\\xcc\\x16\\xda\\x16\\xe8\\x16\\xf5\\x17\\x02\\x17\"\n\"\\x0f\\x17\\x1c\\x17\\x29\\x17\\x36\\x17\\x43\\x17\\x4e\\x17\\x59\\x17\\x65\\x17\\x71\\x17\\x7c\\x17\\x88\\x17\\x94\\x17\\xa0\\x17\\xa8\\x17\\xb0\\x17\\xbb\\x17\"\n\"\\xc6\\x17\\xd1\\x17\\xdc\\x17\\xe7\\x17\\xf2\\x17\\xfb\\x06\\x85\\x75\\x05\\x0b\\x06\\x91\\xa1\\x05\\x0b\\x91\\xa1\\x05\\x0b\\x63\\x1d\\xf7\\x17\\xea\\x05\\x0e\"\n\"\\xf8\\xde\\xf7\\x56\\x15\\x72\\x90\\x68\\x52\\x76\\x72\\x64\\x70\\x19\\x64\\x53\\x47\\x78\\x35\\x1b\\x60\\x79\\x95\\xa3\\x92\\x8d\\x96\\x91\\x9f\\x1f\\x8d\\x8f\"\n\"\\x8c\\x92\\x8d\\x93\\x8d\\x91\\x18\\xc3\\xf7\\x65\\x05\\xf7\\x06\\x89\\xa9\\x78\\x47\\x1a\\x7d\\x8a\\x7f\\x88\\x78\\x1e\\xa7\\x86\\xd5\\xf7\\xa5\\x6f\\x8f\\x5c\"\n\"\\x2d\\x71\\x7e\\xfb\\x18\\x8c\\x19\\xc8\\xf7\\x73\\x05\\xae\\x95\\x97\\x94\\xb4\\x1b\\xd3\\xc2\\x7c\\x70\\xa6\\x1f\\xa2\\x73\\x92\\x72\\x4d\\x1a\\xa6\\x86\\xb6\"\n\"\\xf7\\x52\\x05\\xfc\\xb0\\x72\\x06\\xae\\x85\\xa0\\x87\\x92\\x87\\x08\\x91\\x87\\x8f\\x82\\x80\\x1a\\x7d\\x87\\x73\\x85\\x75\\x1e\\xfb\\x0f\\xfc\\x55\\x7b\\x56\"\n\"\\x7f\\x80\\x57\\x83\\x19\\x72\\xf8\\xbe\\x07\\x0b\\x88\\x1d\\x66\\xa9\\x6e\\xb0\\xba\\xb9\\xb2\\xe2\\xc5\\x90\\x1d\\x0b\\xf8\\x55\\xf9\\x41\\x15\\x42\\x41\\x71\"\n\"\\x59\\x47\\x1f\\xfb\\x0d\\x33\\x35\\xfb\\x35\\xfb\\x1f\\x1a\\xfb\\x23\\xea\\x2b\\xf7\\x21\\xda\\xd7\\xa5\\xbc\\xce\\x1e\\xf7\\x10\\xe7\\xdd\\xf7\\x33\\xf7\\x26\"\n\"\\x1a\\xf7\\x19\\x24\\xed\\xfb\\x1f\\x1e\\x88\\x69\\x15\\xc7\\xb4\\x5b\\x44\\xfb\\x0d\\x4d\\xfb\\x5c\\x48\\x29\\x1f\\x48\\x5d\\x5e\\x6d\\x55\\x1b\\x4c\\x64\\xba\"\n\"\\xd5\\xf1\\xbe\\xf7\\x4c\\xc2\\xec\\x1f\\xe5\\xbe\\xc0\\xb4\\xcc\\x1b\\x0b\\xf8\\xe5\\xa4\\x15\\xcd\\x1d\\x6b\\x5a\\x7c\\x7e\\x67\\x83\\x19\\x72\\xf7\\x58\\xa4\"\n\"\\x07\\x5d\\x78\\x96\\xa3\\x99\\x90\\x9a\\x95\\x9c\\x1f\\xc6\\xf1\\x05\\xf7\\x6b\\x06\\xde\\x1d\\xf7\\xc4\\x07\\xfc\\x44\\xf7\\x8c\\xd0\\x1d\\x0b\\x06\\x90\\xa1\"\n\"\\x05\\x0b\\x15\\x2b\\x1d\\x2d\\x1d\\x0e\\x15\\x68\\x6e\\x6d\\x67\\x69\\xa9\\x6d\\xad\\xaf\\xa9\\xa8\\xae\\xaf\\x6d\\xa9\\x67\\x1f\\x0e\\xf7\\x2c\\xe2\\x05\\xa9\"\n\"\\x9c\\x94\\x96\\x0b\\x59\\x1d\\x51\\x7e\\x4b\\x82\\x3b\\x97\\x1d\\x0b\\x9e\\x1a\\xa5\\x75\\xa0\\x71\\x79\\x7a\\x7f\\x65\\x68\\x1e\\xfb\\x0e\\xfb\\x17\\x05\\x0b\"\n\"\\x4a\\x1d\\x97\\x21\\x1d\\x0b\\x7f\\x5e\\x79\\x79\\x68\\x88\\x19\\x0b\\xf8\\x6b\\xf7\\x1b\\xe1\\x1d\\x91\\xa0\\x9e\\xc3\\x1f\\xaf\\xf7\\x01\\x05\\x9b\\xba\\x95\"\n\"\\xb7\\xa3\\x1a\\xbc\\x71\\xa5\\x5c\\x66\\x67\\x7c\\x71\\x70\\x1e\\x66\\x68\\x78\\x73\\x48\\x28\\xcb\\xf7\\x5a\\x18\\x4b\\x7d\\x3b\\x6b\\x1d\\x97\\x85\\x78\\x7f\"\n\"\\x7d\\x55\\x6b\\xfb\\x04\\x1f\\x74\\x39\\x84\\x71\\x71\\x2b\\x08\\xf7\\x0d\\x06\\xba\\xf7\\x41\\xb0\\xe2\\xc8\\xdc\\x08\\xa6\\x9f\\xaa\\xa1\\x9d\\x1b\\x98\\x97\"\n\"\\x81\\x80\\x88\\x89\\x83\\x88\\x81\\x1f\\x54\\xfb\\x3a\\x05\\x7b\\x5b\\x7f\\x52\\xe7\\x1d\\x0b\\x99\\xf8\\x2f\\x15\\x9d\\x90\\x8a\\x87\\x92\\x1f\\x9c\\x82\\x9b\"\n\"\\x61\\x9a\\x44\\x08\\xac\\xfb\\x36\\x9c\\x2c\\x6c\\x1a\\x74\\x82\\x73\\x79\\x72\\x1e\\x6f\\x76\\x70\\x76\\x7a\\x1b\\x84\\x79\\x92\\x92\\x82\\x1f\\x97\\x7a\\x72\"\n\"\\x94\\x79\\x1b\\x71\\x73\\x71\\x6e\\x69\\xa6\\x71\\xae\\xc2\\xcc\\xb2\\xce\\xc2\\x1f\\xf7\\x16\\xf7\\x33\\xf7\\x0b\\xf7\\x81\\xf0\\x1a\\xad\\x6e\\xa9\\x6a\\x6c\"\n\"\\x71\\x70\\x6d\\x72\\x92\\x7f\\xa3\\x79\\x1e\\x9e\\x7d\\x90\\x83\\x7e\\x1a\\x6c\\x7a\\x63\\x45\\xfb\\x1a\\x1e\\x7f\\xd6\\x75\\xf7\\x0b\\x71\\xf7\\x03\\x79\\xba\"\n\"\\x19\\x5a\\x7f\\x67\\x85\\x4b\\x85\\x08\\x0b\\x9b\\xf8\\x2b\\x15\\xa4\\x94\\x8a\\x84\\x93\\x1f\\x9f\\x79\\x99\\x2e\\x8e\\xfb\\x1e\\x8d\\x3d\\x18\\x87\\x8b\\x8a\"\n\"\\x8a\\x68\\x1e\\x8a\\x5e\\x05\\xa6\\x06\\xc4\\xe1\\xc4\\xeb\\x94\\x9a\\xba\\xe3\\x19\\xa2\\xfb\\xb1\\x05\\xa6\\x06\\xf7\\x4d\\xf7\\x58\\xe2\\xf7\\x19\\xdf\\x1a\"\n\"\\xac\\x6f\\xa8\\x6a\\x6d\\x71\\x6f\\x6b\\x7c\\x91\\x7e\\x9a\\x76\\x1e\\x99\\x79\\x91\\x7d\\x81\\x1a\\x6d\\x6c\\x5c\\x33\\x23\\x1e\\x6b\\xf7\\xe0\\x05\\x70\\x06\"\n\"\\x37\\xfb\\x25\\x7b\\x6e\\x53\\x26\\x88\\xf7\\x11\\x84\\xcb\\x74\\xe1\\x5d\\x82\\x76\\x87\\x33\\x7c\\x08\\x0b\\xf9\\x39\\xf9\\x41\\x15\\x6d\\x06\\x75\\x7e\\x81\"\n\"\\x84\\x7c\\x1b\\x83\\x7c\\x8e\\x90\\x7c\\x1f\\x99\\x5e\\x5e\\x92\\x62\\x1b\\xfb\\x73\\xfb\\x4d\\xfb\\x5d\\xfb\\x87\\xfb\\x2f\\xf7\\x01\\x23\\xf7\\x37\\xd2\\xcd\"\n\"\\xa1\\xb6\\xc4\\x1f\\xa8\\xa1\\x9c\\x9d\\xab\\xb7\\x6d\\xa1\\x18\\x59\\x50\\x6f\\x74\\x61\\x79\\x08\\x7f\\x6f\\x6c\\x85\\x6c\\x1b\\x2d\\x53\\xcc\\xf7\\x01\\xf7\"\n\"\\x25\\xd3\\xf7\\x42\\xe6\\xd7\\x1f\\xaa\\xb0\\xb2\\x9a\\xb4\\x1b\\xdc\\xbd\\x4f\\x29\\x7e\\x8a\\x83\\x89\\x7d\\x1f\\xab\\x85\\x05\\x0b\\x98\\xf7\\xbb\\x15\\xa7\"\n\"\\x88\\x9b\\xb7\\x9b\\x9b\\xaa\\x8c\\x19\\xf7\\x25\\x06\\xfb\\xb8\\xfb\\xf6\\xa4\\x75\\x96\\x93\\x05\\x92\\x95\\x90\\x8f\\x8c\\x1b\\x92\\x95\\x90\\x8d\\x94\\x1b\"\n\"\\x9f\\x9e\\x82\\x73\\xae\\x1f\\x67\\xc0\\xb0\\x7d\\xb4\\x1b\\xc8\\xba\\xb2\\xbf\\xa7\\x72\\xa3\\x6f\\x70\\x74\\x73\\x6f\\x80\\x8e\\x82\\x95\\x80\\x1f\\x90\\x84\"\n\"\\x8d\\x87\\x87\\x1a\\x82\\x82\\x84\\x7e\\x79\\x7f\\x97\\xae\\x7a\\x1e\\x6b\\xc8\\x73\\xa3\\x58\\xa0\\xf7\\xad\\xf7\\xe3\\x18\\x95\\xfb\\xcc\\x07\\x0b\\x15\\xf4\"\n\"\\xb9\\xce\\xd8\\xd4\\x1a\\xc0\\x6c\\xae\\x5e\\x66\\x70\\x6f\\x65\\x73\\x94\\x7d\\xa6\\x78\\x1e\\xa0\\x7e\\x91\\x82\\x7e\\x1a\\x6b\\x68\\x68\\x44\\x65\\x1e\\x0e\"\n\"\\x69\\xa9\\x6d\\xad\\xaf\\xa9\\xa8\\xae\\xaf\\x6d\\xa9\\x67\\x1f\\xf7\\x68\\x16\\x68\\x6e\\x6d\\x67\\x69\\xa9\\x6d\\xad\\xaf\\xa9\\xa8\\xae\\xaf\\x6d\\xa9\\x67\"\n\"\\x1f\\x0e\\x15\\xfb\\x03\\xf7\\x27\\x05\\xa1\\x7b\\x76\\x58\\x1d\\x2d\\x1d\\x0e\\xec\\xe4\\xf7\\x05\\xbe\\x70\\xbd\\x5e\\xab\\x1f\\x0b\\xfb\\x17\\xfc\\x7f\\x7f\"\n\"\\x5e\\x79\\x79\\x68\\x88\\x19\\x0b\\xf7\\x03\\xf9\\x18\\x15\\xab\\x86\\x99\\x89\\x95\\x88\\x92\\x87\\x19\\x91\\x87\\x8f\\x82\\x81\\x1a\\x7f\\x86\\x6c\\x86\\x79\"\n\"\\x1e\\xfb\\x0f\\xfc\\x55\\x7b\\x57\\x7c\\x7d\\x5a\\x85\\x19\\x72\\xf7\\xbc\\xa4\\x07\\x51\\x8f\\x7d\\x93\\xa9\\x1a\\x99\\x90\\xa4\\x94\\xab\\x1e\\xc2\\xf7\\x55\"\n\"\\x05\\xa8\\x06\\xf6\\xfb\\xdf\\x05\\xf7\\x5e\\xa4\\x06\\x52\\x90\\x82\\x93\\x75\\xc6\\x38\\xf7\\x8a\\x18\\xc2\\x96\\xa4\\x95\\xab\\xa0\\x08\\xbe\\xad\\xa8\\xbe\"\n\"\\xc2\\x1a\\xec\\x3e\\xba\\xfb\\x33\\x1e\\xfb\\xa8\\x06\\xf7\\x72\\x3f\\x15\\xaf\\x94\\x94\\x93\\xaa\\x1b\\xc4\\xac\\x69\\x4e\\x49\\x6f\\x4e\\x5f\\x70\\x1f\\x71\"\n\"\\x7a\\x64\\x84\\x4d\\x8a\\x08\\x0b\\xc8\\xf7\\xb7\\x15\\xc6\\xa8\\xa1\\xa8\\x9b\\x1b\\x94\\x8f\\x86\\x82\\x80\\x89\\x80\\x80\\x63\\x1f\\x68\\xfb\\x16\\x85\\x6e\"\n\"\\x67\\x1a\\x46\\xbc\\x5c\\xd3\\xd8\\xc9\\xbb\\xea\\xb8\\x1e\\xab\\xd0\\xa0\\xde\\xc7\\x1a\\xce\\x73\\xb2\\x62\\x6b\\x74\\x70\\x67\\x79\\x91\\x7b\\x97\\x7c\\x1e\"\n\"\\x9e\\x73\\x8b\\x8b\\x8f\\x83\\x08\\x94\\x74\\x90\\x75\\x76\\x1a\\x64\\x79\\x54\\x6e\\x5d\\x1e\\x5f\\x71\\x6b\\x74\\x6c\\x1b\\x6e\\x76\\xa4\\xac\\x98\\x8f\\xa1\"\n\"\\x91\\xa3\\x1f\\xba\\xf7\\x4a\\x05\\x90\\xa2\\x8e\\x9d\\x9b\\x1a\\xb0\\x75\\xa3\\x68\\x65\\x5d\\x71\\x64\\x6c\\x1e\\x79\\x74\\x80\\x78\\x79\\x62\\x08\\x0b\\xf7\"\n\"\\xe1\\xf8\\x61\\x15\\x6e\\x06\\x78\\x80\\x88\\x89\\x7c\\x1b\\x81\\x83\\x8d\\x92\\x79\\x1f\\x95\\x72\\x7f\\x8e\\x76\\x1b\\x3a\\x56\\x5a\\x3e\\x55\\x99\\x6f\\xcd\"\n\"\\x3c\\x1f\\xb1\\x5e\\x9d\\x69\\x72\\x1a\\x6d\\x72\\x73\\x6b\\x74\\x76\\x96\\x9f\\x7b\\x5d\\x1d\\x92\\x96\\x88\\x86\\x98\\x1f\\x83\\xa3\\x9d\\x87\\xa0\\x1b\\xe0\"\n\"\\xca\\xc4\\xd6\\xb8\\x72\\xbc\\x53\\xcc\\x1f\\x65\\xb8\\x79\\xa9\\xa2\\x1a\\xab\\xa0\\xa0\\xab\\xb9\\xa6\\x67\\x38\\x9a\\x1e\\xa6\\x89\\x05\\x0b\\xf7\\xd2\\x89\"\n\"\\x1d\\xfb\\x37\\xfb\\x35\\x32\\xc9\\x4d\\xe6\\xb7\\xb6\\x9b\\xa8\\xad\\x1e\\xa5\\xa1\\x9b\\x9e\\xae\\xbd\\x08\\x0b\\xf8\\xbe\\xf7\\x56\\x15\\x70\\x90\\x3b\\xfb\"\n\"\\x10\\x3e\\x61\\xfb\\x24\\x8d\\x19\\x45\\x06\\xf8\\x46\\xf8\\xf1\\x05\\xa8\\xfc\\x68\\x07\\x52\\xfb\\x46\\xa7\\x87\\xd4\\xf5\\xce\\xb2\\xf7\\x04\\x8d\\x19\\xd9\"\n\"\\x06\\xfc\\x46\\xfc\\xf1\\x05\\x6e\\xf8\\x8e\\x07\\x0b\\x15\\xf7\\x08\\xbe\\xd6\\xe1\\xdc\\x1a\\xc6\\x69\\xb2\\x58\\x62\\x6d\\x6c\\x61\\x70\\x95\\x7b\\xa9\\x77\"\n\"\\x1e\\xa2\\x7c\\x92\\x81\\x7d\\x1a\\x67\\x64\\x64\\x3c\\x61\\x1e\\x0e\\xf8\\x1c\\x15\\x99\\xaa\\x93\\x9c\\x8f\\x92\\x47\\x1d\\x85\\x6c\\x87\\x50\\x87\\x50\\x89\"\n\"\\x69\\x8a\\x82\\x8a\\x7a\\x8a\\x87\\x89\\x73\\x08\\x0b\\x08\\xfb\\x28\\x6c\\x78\\x62\\x63\\x1b\\x81\\x83\\x90\\x91\\x8d\\x8d\\x8e\\x8d\\x8f\\x1f\\x93\\x97\\x8f\"\n\"\\x96\\x96\\x1a\\xa3\\x73\\xa3\\x71\\x70\\x73\\x72\\x6e\\x5b\\xb2\\x6c\\xc7\\x0b\\xb6\\x1d\\x79\\x79\\x69\\x88\\x19\\x83\\x20\\x1d\\xf7\\xa5\\x06\\x0b\\x15\\xf3\"\n\"\\xb9\\xcf\\xd8\\xd4\\x1a\\xc0\\x6c\\x60\\x1d\\x68\\x68\\x44\\x65\\x1e\\x0e\\x49\\x1d\\xac\\x61\\x1d\\x9d\\xd2\\x05\\xee\\xa4\\xa9\\xbd\\xaf\\x5e\\x1d\\x7f\\x66\"\n\"\\x1d\\x0b\\x08\\xc8\\xf7\\x10\\x90\\x96\\xad\\x1a\\xac\\x73\\xa2\\x69\\x75\\x73\\x80\\x7a\\x7f\\x1e\\x7f\\x7c\\x0b\\x71\\x85\\x74\\x05\\x8c\\x8f\\x90\\x8b\\x8d\"\n\"\\x1b\\xa0\\x99\\x7c\\x0b\\x1b\\xa9\\x9c\\x7e\\x74\\x72\\x75\\x7b\\x69\\x75\\x7a\\x8f\\x98\\x6f\\x1f\\x75\\x6a\\x05\\x79\\xb6\\x0b\\x97\\xb8\\x9d\\x9d\\xad\\x8e\"\n\"\\x19\\x0b\\x67\\x1e\\xfb\\x0e\\xfb\\x17\\x05\\x0e\\x91\\xa1\\x05\\x6f\\x06\\x0b\\x8b\\x87\\x89\\x85\\x1e\\xfb\\x17\\x0b\\xf7\\x4f\\x15\\xf2\\xf8\\x17\\x2e\\x1d\"\n\"\\xfb\\xa3\\x52\\x1d\\x8f\\x99\\xf7\\xe8\\xf8\\x24\\xfb\\x01\\xfc\\x2d\\x2f\\x1d\\x84\\x20\\x1d\\xf7\\xa5\\x21\\x1d\\x6e\\x06\\x71\\x8c\\x7a\\x9b\\xa5\\x1a\\x8f\"\n\"\\x8c\\x92\\x8d\\x92\\xf1\\x1d\\x9c\\x9d\\xae\\x5f\\x1d\\x70\\x1a\\x86\\x8a\\x86\\x89\\x81\\x1e\\x0b\\x7b\\x57\\x7d\\x7e\\x59\\x84\\x19\\x72\\xf7\\xbc\\xa4\\x07\"\n\"\\x4c\\x90\\x81\\x91\\xab\\x1a\\x9a\\x8f\\x9d\\x94\\xaa\\x1e\\x8d\\x92\\x8c\\x90\\x8c\\x8f\\xbd\\xf7\\x49\\x18\\xf7\\x83\\x06\\x4b\\xfb\\x7c\\x7d\\x55\\x77\\x7d\"\n\"\\x48\\x87\\x19\\x72\\xf7\\xd1\\x0b\\x05\\xf7\\x0d\\x06\\xbe\\xf7\\x46\\xa0\\xbd\\xbd\\xd4\\x08\\xc7\\xb5\\xac\\xa8\\xa5\\x1b\\x97\\x95\\x81\\x80\\x85\\x89\\x83\"\n\"\\x88\\x82\\x1f\\x89\\x83\\x87\\x80\\x86\\x7d\\x87\\x7e\\x87\\x80\\x88\\x82\\x08\\x5b\\xfb\\x20\\x7e\\x59\\x62\\x1a\\x69\\xa6\\x73\\xb2\\xc8\\xb3\\xac\\xf2\\xcd\"\n\"\\x1e\\x0b\\x7f\\x1d\\xf7\\x82\\x16\\xf7\\x2c\\xe2\\x05\\xaa\\x9d\\x93\\x95\\x38\\x1d\\x06\\x86\\x53\\x1d\\x0b\\x43\\x1d\\xc6\\x1d\\x0b\\x8c\\x96\\x49\\x1d\\xab\"\n\"\\x84\\xb0\\x1b\\xd2\\xc0\\xb0\\xbd\\xb5\\x65\\xa9\\x0b\\x15\\xf7\\x74\\x9e\\x06\\x5a\\x81\\x8f\\xa1\\x94\\x8d\\x98\\x8f\\x97\\x1f\\xef\\xf7\\xde\\x4a\\x7e\\x61\"\n\"\\x83\\x45\\x81\\x19\\x89\\x76\\x05\\x8d\\xa3\\x9a\\x8c\\x0b\\xa4\\xfb\\xbe\\x72\\x07\\xab\\x86\\x99\\x89\\x95\\x88\\x92\\x87\\x19\\x91\\x87\\x8f\\x82\\x81\\x1a\"\n\"\\x7f\\x86\\x6c\\x86\\x79\\x1e\\x0b\\x15\\x68\\x6c\\x6c\\x69\\x64\\xa8\\x6d\\xb0\\xb1\\xaa\\xa8\\xb0\\xb0\\x6c\\xaa\\x65\\x1f\\x0e\\x97\\x78\\x1b\\x73\\x76\\x76\"\n\"\\x73\\x7b\\x97\\x7b\\xa1\\x7c\\x1f\\xf7\\x19\\x32\\x05\\x0e\\xf7\\x6c\\xf7\\x21\\xb4\\x1d\\x0b\\x5f\\x9f\\xb3\\x69\\x1d\\x1b\\x52\\x5d\\x5d\\x43\\x7e\\x1f\\xb3\"\n\"\\x06\\xab\\x98\\x98\\x96\\xa1\\xaf\\x1d\\x0b\\x08\\x92\\x87\\x8f\\x82\\x7f\\x1a\\x7f\\x87\\x0b\\x1e\\x77\\xa4\\x83\\xa2\\x83\\xc1\\x70\\x8e\\x18\\x75\\xfb\\x3a\"\n\"\\x05\\xa6\\x06\\x97\\x8f\\x97\\x93\\x98\\x1b\\x0b\\x1b\\x95\\x92\\x86\\x83\\x88\\x8a\\x89\\x87\\x85\\x1f\\x83\\x0b\\x8e\\x19\\x97\\x21\\x1d\\xfb\\xa3\\x06\\x86\"\n\"\\x75\\x05\\xa0\\x06\\xa6\\x8a\\x9b\\x7b\\x0b\\xae\\x5d\\x66\\x70\\x6f\\x65\\x73\\x94\\x7d\\xa6\\x78\\x1e\\xa0\\x7e\\x91\\x82\\x7e\\x1a\\x6b\\x0b\\xc5\\x1d\\x0e\"\n\"\\x06\\x38\\x68\\x84\\x72\\x66\\x1f\\x4a\\x60\\x69\\x0b\\x15\\xbe\\x06\\x35\\xf7\\x42\\x05\\x3a\\x06\\xfb\\x34\\xfb\\x42\\x05\\xc4\\x06\\x0b\\x98\\x80\\x74\\x82\"\n\"\\x89\\x7f\\x85\\x76\\x1f\\x0b\\xdd\\x1d\\x71\\x79\\x0b\\x88\\x82\\x81\\x1a\\x6f\\xa0\\x76\\xa7\\x0b\\x83\\x20\\x1d\\xf7\\xa5\\x06\\x4c\\x1d\\x0b\\x1e\\x75\\x99\"\n\"\\x86\\x89\\x8a\\x8a\\x83\\x87\\x19\\x81\\x77\\x0b\\x75\\xc9\\x1b\\xec\\xcb\\xc5\\xf3\\x9d\\x1f\\x0e\\x7e\\x1b\\x84\\x86\\x91\\x92\\x8f\\x0b\\x80\\x53\\x89\\x08\"\n\"\\x70\\x07\\xb5\\x0b\\x61\\x3c\\x6d\\x08\\x68\\xbe\\x07\\x0b\\x74\\x1b\\x7f\\x7b\\x90\\x96\\x71\\x1f\\x9d\\x62\\x0b\\x15\\xfb\\x03\\x06\\xa3\\x69\\x6d\\x94\\x5d\"\n\"\\x1b\\xfb\\x0f\\x28\\x3a\\x26\\x58\\xa5\\x67\\xc1\\x74\\x1f\\x39\\x5d\\x7d\\x7d\\x66\\x1a\\x6b\\x9d\\x78\\xb7\\x7c\\x1e\\x4d\\x7c\\x77\\x83\\x73\\x78\\x08\\x7b\"\n\"\\x7d\\x80\\x73\\x73\\x1a\\x4a\\xd4\\x62\\xf7\\x07\\xf7\\x21\\xed\\xc9\\xe3\\xc8\\x63\\xac\\xfb\\x01\\xaa\\x1e\\x56\\x9a\\x05\\x6b\\x94\\x78\\x99\\x9a\\x1a\\x9b\"\n\"\\x9a\\x9f\\x98\\x90\\x92\\x8a\\x88\\x93\\x1e\\x88\\x96\\x93\\x8a\\x97\\x1b\\xb7\\xb8\\x97\\xa1\\xb1\\x1f\\xc5\\xac\\xaa\\xbe\\xc8\\x1a\\x9a\\x89\\x95\\x87\\x9b\"\n\"\\x1e\\xce\\x06\\xfb\\xff\\xfc\\x0f\\x15\\x97\\x8a\\xd7\\x71\\xa1\\x81\\x08\\xa7\\x7d\\x98\\x7a\\x71\\x1a\\x5f\\x5f\\x72\\x3f\\x4a\\x5d\\xab\\xb9\\x9f\\x94\\x9b\"\n\"\\xa0\\x9f\\x1e\\x97\\x97\\xaa\\x9d\\x92\\x8a\\x08\\xf7\\x20\\xf8\\x49\\x15\\xa5\\x9e\\x73\\x68\\x69\\x7f\\x59\\x7a\\x67\\x1f\\x5d\\x75\\x72\\x75\\x6c\\x1b\\x70\"\n\"\\x7c\\xa0\\xb1\\xb3\\x9c\\xc8\\xa0\\xb1\\x1f\\xac\\x9e\\xa0\\x9b\\xa5\\x1b\\x0b\\xf7\\x4a\\xf9\\x2a\\x15\\x85\\x75\\x05\\xa7\\x06\\xa5\\x9c\\x7a\\x71\\x85\\x8a\"\n\"\\x85\\x8a\\x85\\x1f\\x3a\\x1d\\x7c\\x20\\x1d\\xf7\\xd6\\x06\\xbb\\xbe\\x9a\\xa4\\xaf\\x1f\\xbd\\xaf\\xae\\xcc\\xc5\\x1a\\xb2\\x77\\xb4\\x6c\\xa6\\x1e\\x71\\xa0\"\n\"\\x76\\x96\\x59\\x9a\\xbd\\x90\\xa7\\x94\\xb2\\xa4\\x08\\xc1\\xae\\xa7\\xb8\\xc1\\x1a\\xe3\\x47\\xbb\\xfb\\x12\\x1e\\xfb\\x0b\\xfb\\xdf\\x15\\xb1\\x9e\\x88\\x82\"\n\"\\x9b\\x1f\\xaa\\x7c\\xa0\\x64\\x61\\x1a\\x60\\x7c\\x58\\x74\\x6b\\x1e\\x61\\x6f\\x61\\x76\\x57\\x1b\\x7d\\x81\\x8c\\x8f\\x78\\x1f\\xf7\\x30\\xf8\\xe0\\x15\\xd2\"\n\"\\xaa\\x70\\x4e\\x47\\x6a\\x4c\\x5b\\x71\\x1f\\x7e\\x72\\x76\\x87\\x5f\\x1b\\x0e\\xf8\\xfb\\xf7\\x54\\x15\\x72\\x90\\x69\\x53\\x76\\x72\\x64\\x70\\x19\\x64\\x54\"\n\"\\x48\\x79\\x36\\x1b\\x5f\\x7a\\x95\\xa4\\x91\\x8e\\x96\\x90\\x9e\\x1f\\x8d\\x91\\x8c\\x90\\x8f\\x99\\xc1\\xf7\\x63\\x18\\xf7\\x06\\x89\\xa8\\x78\\x46\\x1a\\x7e\"\n\"\\x8a\\x80\\x89\\x78\\x1e\\xa6\\x86\\xd3\\xf7\\xa2\\x6f\\x8f\\x5d\\x2e\\x72\\x7e\\xfb\\x17\\x8c\\x19\\xc6\\xf7\\x71\\x05\\xae\\x95\\x97\\x94\\xb3\\x1b\\xd3\\xc1\"\n\"\\x7c\\x70\\xa6\\x1f\\xa2\\x74\\x92\\x72\\x4d\\x1a\\xa6\\x86\\xb4\\xf7\\x50\\x05\\xfc\\xaa\\x73\\x06\\xbf\\x83\\x8b\\x8b\\x96\\x85\\x08\\x91\\x87\\x8f\\x82\\x81\"\n\"\\x1a\\x7d\\x87\\x73\\x85\\x75\\x1e\\xfb\\x0b\\xfc\\x51\\x7b\\x57\\x7f\\x80\\x58\\x83\\x19\\x72\\xf8\\xb8\\x07\\x0b\\x1e\\x8a\\x82\\x8a\\x80\\xa4\\x86\\xd4\\xf7\"\n\"\\xa5\\x71\\x8f\\x67\\x38\\x63\\x73\\x28\\x8c\\x19\\x82\\x06\\x81\\x06\\xcc\\xf7\\x7f\\x05\\xa6\\x92\\x95\\x90\\xb5\\x1b\\xf3\\xc1\\x65\\x40\\x8f\\x1f\\x8d\\x63\"\n\"\\xa3\\x86\\xb8\\xf7\\x52\\x05\\xfc\\xe1\\x74\\x06\\xcc\\x87\\x9b\\x86\\x78\\x1a\\x80\\x83\\x7a\\x7f\\x7b\\x1e\\xfc\\x02\\xfc\\x6c\\x63\\x58\\x7f\\x7d\\x85\\x88\"\n\"\\x19\\x83\\x86\\x85\\x89\\x7b\\x89\\x08\\x72\\xf7\\x57\\xa4\\x07\\x5b\\x8f\\x7b\\x93\\xa1\\x1a\\x97\\x90\\x99\\x95\\x98\\x1e\\xf7\\x06\\xf7\\x31\\x05\\xf7\\x54\"\n\"\\x06\\x5d\\xfb\\x33\\x7b\\x55\\x81\\x82\\x57\\x83\\x19\\x64\\xf7\\xa1\\x15\\xf7\\x91\\xf7\\xe1\\x05\\x97\\x06\\x2f\\xfb\\xe1\\x05\\x0b\\xf8\\x88\\xf8\\x50\\x15\"\n\"\\x77\\x1d\\xc4\\xbf\\xb8\\xde\\xb2\\x1e\\x77\\x93\\x05\\x5e\\x76\\x79\\x71\\x7f\\x1b\\x87\\x88\\x8f\\x90\\x90\\x8c\\x91\\x90\\x9c\\x1f\\x0b\\x8f\\x1d\\x91\\xac\"\n\"\\x8f\\x9b\\x1e\\xc1\\xf7\\x5b\\x05\\x87\\xae\\x9e\\xd2\\x1d\\xfb\\xb3\\x06\\xf7\\x70\\x3f\\x15\\x92\\xa3\\x8b\\x8b\\x8f\\x91\\x08\\x95\\x94\\x96\\x8f\\x9f\\x1b\"\n\"\\xbf\\xaa\\xbc\\x1d\\x0b\\xf7\\x7d\\xf7\\x6a\\x15\\x84\\xf7\\x1a\\x81\\xbc\\x68\\xc4\\xfb\\x19\\x6d\\x18\\x84\\x71\\x05\\x98\\x06\\xa7\\x9c\\x78\\x66\\x90\\x1f\"\n\"\\x92\\x5b\\x9c\\xfb\\x7a\\x8c\\x50\\x08\\x5f\\x07\\x8c\\x87\\x8b\\x83\\x81\\x1a\\x75\\x78\\x7e\\x82\\x81\\x1b\\x84\\x82\\x90\\x9a\\x77\\x1f\\x9e\\x71\\x7b\\x92\"\n\"\\x7a\\x1b\\x6e\\x75\\x72\\x6a\\x64\\xaa\\x6f\\xb6\\xc4\\xbd\\xb7\\xf7\\x2b\\xf7\\x05\\x1f\\xf7\\x19\\xf7\\x46\\xc9\\xf7\\x05\\xca\\x1a\\xb4\\x6b\\xaf\\x67\\x6e\"\n\"\\x74\\x71\\x6b\\x74\\x92\\x80\\xa5\\x7c\\x1e\\x9f\\x80\\x93\\x80\\x7d\\x1a\\x66\\x4e\\x20\\x46\\x39\\x1e\\x0b\\xf7\\x29\\xf7\\x50\\x15\\xb2\\xa6\\x05\\xfb\\x3e\"\n\"\\xab\\xa8\\x56\\xc9\\x1b\\xbd\\xae\\xab\\xe7\\xbe\\x1f\\x75\\x96\\x05\\x5b\\x70\\x7b\\x7b\\x78\\x1b\\x6f\\x7f\\xaf\\xf7\\x56\\x65\\x1f\\xca\\xc2\\xcf\\xc5\\xa1\"\n\"\\x98\\xb8\\x90\\x19\\xa4\\xfb\\x63\\x72\\x07\\xb2\\x89\\x97\\x86\\x7b\\x1a\\x71\\x65\\x66\\xfb\\x12\\x29\\x1e\\xf7\\x0f\\xf8\\x5f\\x3f\\x7d\\x57\\x83\\x3b\\x83\"\n\"\\x19\\x70\\x07\\x8c\\x93\\x94\\x8b\\x8f\\x1b\\xa8\\x64\\x1d\\xfb\\x30\\xfc\\xcb\\x05\\xf7\\x0e\\x06\\x0b\\xf8\\x04\\xf7\\x0e\\x15\\x71\\x70\\x87\\x88\\x80\\x81\"\n\"\\x08\\x7b\\x76\\x6e\\x81\\x70\\x1b\\x51\\x6c\\xb2\\xd5\\x1f\\xa1\\x07\\xcd\\x8c\\xb0\\x94\\xb9\\xa4\\x08\\xce\\xb0\\xb5\\xc3\\xc2\\x1a\\xbf\\x69\\xa8\\x50\\xfb\"\n\"\\x2a\\xfb\\x14\\xfb\\x23\\xfb\\x3c\\x60\\x96\\x66\\xa0\\x72\\x1e\\x6e\\xa4\\xb9\\x77\\xb7\\x1b\\xcc\\xc8\\xb1\\xd9\\xc8\\x1f\\xfb\\x6f\\xf5\\x15\\xf7\\x00\\x9d\"\n\"\\xc9\\xf4\\xb8\\x1b\\x9d\\x98\\x7b\\x74\\x64\\x77\\x54\\x72\\x6f\\x1f\\x70\\x6c\\x65\\x79\\x5d\\x88\\x08\\x0b\\x82\\x1d\\xb9\\xab\\xa5\\xf1\\xd9\\x9a\\x1d\\x0b\"\n\"\\x15\\xfb\\xb3\\x71\\x06\\xb6\\x87\\x93\\x89\\x96\\x85\\x08\\x91\\x87\\x91\\x80\\x82\\x1a\\x71\\x87\\x78\\x70\\x30\\x1e\\x74\\x3f\\x8b\\x8b\\x87\\x85\\x08\\x7a\"\n\"\\x7d\\x62\\x7e\\x64\\x1b\\x21\\x51\\xcd\\xf7\\x0e\\xf7\\x29\\xcf\\xf7\\x3b\\xe6\\xd8\\x1f\\xab\\xb1\\xb6\\x9b\\xb8\\x1b\\xba\\xb2\\x78\\x6b\\xa1\\x1f\\xa1\\x6a\"\n\"\\x92\\x6e\\x8d\\x47\\xa8\\x87\\x18\\xbe\\xf7\\x71\\x05\\x6c\\x06\\x75\\x80\\x80\\x83\\x77\\x1b\\x82\\x83\\x8d\\x92\\x78\\x1f\\x9a\\x0b\\x7a\\x1d\\x0e\\xf7\\xfc\"\n\"\\xf7\\x64\\x15\\x84\\xfb\\x0b\\x87\\x5f\\x77\\x75\\x64\\x8a\\x19\\x84\\x20\\x1d\\xf7\\x93\\x21\\x1d\\x7f\\x06\\x71\\x7e\\x9e\\xb1\\x1f\\x95\\x07\\xa7\\xf8\\xd1\"\n\"\\x05\\x72\\x06\\xfc\\x36\\xfc\\xc0\\x61\\x52\\x71\\x73\\x77\\x88\\x19\\x85\\x75\\x05\\xf7\\x42\\x28\\x1d\\x7c\\x06\\x73\\x7a\\x99\\xa0\\x9a\\x90\\x98\\x9b\\xa0\"\n\"\\x1f\\xd6\\xf1\\x05\\xf7\\x3a\\xb5\\x15\\xfb\\x1c\\x06\\xf7\\x26\\xf7\\x5c\\x05\\x0b\\xf7\\xef\\xf7\\x20\\x15\\x47\\x5d\\x6f\\x75\\x61\\x1b\\x61\\x75\\xa7\\xc2\"\n\"\\x9c\\x8c\\x96\\x8f\\x9e\\x1f\\xf2\\x9f\\xbd\\xa1\\xbb\\xb8\\x08\\xad\\xab\\x9e\\xb0\\xad\\x1a\\xbe\\x5f\\xaf\\x4f\\xfb\\x23\\xfb\\x21\\xfb\\x34\\xfb\\x37\\x36\"\n\"\\xcb\\x4d\\xe2\\xd6\\xc0\\xb1\\xee\\xc6\\x1e\\xfb\\x59\\xe3\\x15\\xf7\\x1d\\xae\\xb8\\xd6\\xbb\\x1b\\x9e\\x94\\x80\\x74\\x5f\\x7a\\x61\\x6c\\x6b\\x1f\\x70\\x6f\"\n\"\\x73\\x7d\\x52\\x79\\x08\\x0b\\xf7\\xf8\\x15\\xac\\xae\\xa9\\x9a\\xab\\x1b\\xad\\xa0\\x75\\x66\\x72\\x82\\x72\\x7b\\x7e\\x1f\\x7c\\x7d\\x76\\x7f\\x55\\x72\\x42\"\n\"\\x68\\x89\\x89\\x74\\x79\\x08\\x78\\x7b\\x81\\x73\\x6f\\x1a\\x44\\xbf\\x5c\\xd8\\xcb\\xb7\\xa4\\xd3\\xcc\\x1e\\x79\\x9e\\x05\\x60\\x62\\x6a\\x78\\x65\\x1b\\x67\"\n\"\\x74\\xa7\\xb6\\xbb\\xa4\\xa6\\xd9\\xaf\\x1f\\xe9\\xb7\\xa7\\xa9\\xc3\\x1a\\xc8\\x62\\xb1\\x4a\\x52\\x6a\\x7a\\x4a\\x46\\x1e\\x0b\\x97\\xb8\\x9d\\x9d\\xae\\x8e\"\n\"\\x19\\x97\\x28\\x1d\\xfb\\xa2\\x20\\x1d\\xa1\\x06\\xa5\\x8a\\x9c\\x7b\\x71\\x1a\\x86\\x8a\\x84\\x89\\x85\\x1e\\xfb\\x24\\xfc\\xb2\\x05\\xfb\\x68\\x06\\xf7\\x22\"\n\"\\xf8\\xad\\xae\\x1d\\x85\\x8a\\x85\\x8a\\x85\\x1e\\xfb\\x25\\xfc\\xb2\\x05\\x0b\\xf7\\xb6\\xa1\\x15\\x6f\\x06\\x71\\x8c\\x7a\\x9b\\xa4\\x1a\\x94\\x8b\\x8e\\x8d\"\n\"\\x92\\x1e\\xf7\\x17\\xf8\\x7f\\x2e\\x1d\\xfb\\xa3\\x06\\x86\\x43\\x1d\\x0e\\x15\\xf7\\x2c\\xe2\\x05\\xaa\\x9d\\x93\\x95\\x2d\\x1d\\x0b\\xf7\\xb6\\xa1\\x15\\x6f\"\n\"\\x06\\x71\\x8c\\x7a\\x9b\\xa4\\x1a\\x94\\x8b\\x8e\\x8d\\x92\\x1e\\xf7\\x17\\xf8\\x7f\\x2e\\x1d\\xfb\\xa2\\x06\\x85\\x43\\x1d\\x0b\\x15\\xfb\\x54\\xfb\\x2c\\xfb\"\n\"\\x30\\xfb\\x59\\xfb\\x55\\xf7\\x2c\\xfb\\x31\\xf7\\x4f\\xf7\\x5b\\xf7\\x2a\\xf7\\x2c\\xf7\\x5c\\xf7\\x58\\xfb\\x2c\\xf7\\x2f\\xfb\\x54\\x1f\\x5d\\x04\\xf7\\x2f\"\n\"\\xf7\\x14\\xfb\\x1f\\xfb\\x3a\\xfb\\x3e\\xfb\\x13\\xfb\\x1c\\xfb\\x34\\xfb\\x2b\\xfb\\x14\\xf7\\x20\\xf7\\x39\\xf7\\x3c\\xf7\\x14\\xf7\\x1e\\xf7\\x2f\\x1f\\x0e\"\n\"\\xfb\\x0a\\x06\\x58\\xfb\\x56\\x77\\x53\\x7f\\x73\\x71\\x63\\x19\\x5d\\x6d\\x7e\\x7f\\x7a\\x1b\\x83\\x86\\x91\\x96\\x93\\x8d\\x95\\x8d\\x96\\x1f\\xe4\\xf7\\xe8\"\n\"\\xfb\\x49\\xce\\x1d\\x83\\x89\\x82\\x1f\\x4e\\xfb\\x7b\\x05\\x86\\x76\\x87\\x72\\x7a\\x1a\\x66\\xa7\\x6f\\xb0\\x0b\\xc4\\x1d\\x47\\xfb\\x82\\x05\\x7c\\x57\\x82\"\n\"\\x60\\x79\\x1a\\x64\\xa7\\x71\\xb5\\xc7\\xb3\\xac\\xf2\\xcd\\x1e\\x75\\x99\\x05\\x56\\x69\\x71\\x70\\x7b\\x1b\\x83\\x83\\x92\\x93\\x9d\\x9d\\xd1\\xaf\\xf7\\x10\"\n\"\\x1f\\x93\\xaa\\x92\\xa3\\x9d\\xcb\\x08\\xde\\x06\\x0e\\x86\\x1d\\xf7\\xbc\\x07\\x0b\\x6f\\x1e\\x7e\\x20\\x1d\\xf7\\x9d\\x06\\x91\\xa1\\x64\\x8e\\x7d\\x9d\\x69\"\n\"\\xea\\x19\\x3c\\xf7\\x7e\\xf7\\x0a\\xf7\\x17\\xe9\\xf3\\xaf\\xa9\\xab\\x8e\\x19\\x22\\x1d\\xfb\\x54\\x20\\x1d\\x96\\x06\\xa1\\x99\\x7e\\x74\\x77\\x85\\x7f\\x70\"\n\"\\x6d\\x1f\\xfb\\x08\\xfb\\x16\\x5d\\xf7\\x1e\\x05\\x82\\xa5\\x89\\x94\\x0b\\xa4\\x15\\x52\\x8e\\x7c\\x94\\xa7\\x1a\\x9b\\x8f\\xa0\\x99\\xbd\\x1e\\xf7\\x06\\xf8\"\n\"\\x38\\x9b\\xc0\\x9a\\x98\\xbe\\x91\\x19\\x56\\x1d\\xfb\\x0f\\xfc\\x55\\x7b\\x57\\x7c\\x7d\\x5a\\x85\\x19\\x72\\x0b\\xf7\\x77\\x15\\x78\\x76\\x82\\x81\\x7a\\x79\"\n\"\\x08\\x44\\x42\\x6d\\x63\\x76\\x1a\\x84\\x91\\x86\\x92\\x94\\x98\\x94\\x9d\\x9e\\x1e\\x98\\x97\\x95\\x93\\xa3\\x9d\\xf7\\x3e\\xf7\\x10\\x18\\x94\\x07\\x30\\xe7\"\n\"\\x5e\\xb9\\x6b\\xb0\\x08\\x93\\x84\\x88\\x8d\\x86\\x1b\\x82\\x85\\x84\\x83\\x7c\\x94\\x71\\xa3\\x5a\\x1f\\x0b\\xf8\\x46\\xf7\\x13\\x15\\x53\\x62\\x7c\\x7d\\x7b\"\n\"\\x1b\\x84\\x86\\x91\\x94\\xa4\\x95\\xb5\\xa3\\xdc\\x1f\\xd2\\xf7\\x80\\xfb\\x03\\x84\\x79\\x50\\x05\\xbe\\x82\\x75\\xa0\\x60\\x1b\\xfb\\x0f\\xfb\\x2a\\xfb\\x54\"\n\"\\xfb\\x30\\x3f\\xb6\\x58\\xcc\\xc8\\xb8\\xaf\\xeb\\xc5\\x1f\\x7f\\x62\\x89\\x7f\\x7d\\x1a\\x0b\\xf7\\x21\\x15\\x48\\x5b\\x6c\\x74\\x60\\x1b\\x5f\\x6e\\xaf\\xc0\"\n\"\\xca\\xa5\\xe5\\xaf\\xcc\\x1f\\xba\\xa6\\xa7\\xa3\\xaa\\x1b\\x97\\x95\\x84\\x81\\x87\\x89\\x85\\x85\\x82\\x1f\\x82\\x7c\\x87\\x7f\\xbf\\x1d\\x0b\\xf7\\x29\\x15\"\n\"\\x5e\\x06\\xd9\\xf7\\x99\\x05\\x5d\\x06\\xfb\\xaa\\xfb\\x93\\x7b\\x48\\x05\\xf7\\x33\\x06\\x70\\x33\\x05\\xe1\\x06\\xa7\\xe3\\x05\\xb7\\x06\\xfb\\x8a\\xc8\\x15\"\n\"\\xf7\\x4c\\xf7\\x3e\\x57\\xfb\\x3e\\x05\\xd3\\xf8\\xaa\\x15\\x51\\x06\\xfc\\x47\\xfd\\x4d\\x05\\xc5\\x06\\x0b\\x15\\x6b\\x7c\\x7e\\x81\\x6d\\x1d\\x6c\\x93\\x72\"\n\"\\x5b\\x1d\\x81\\xa5\\x97\\x88\\xf7\\x01\\x1d\\xfb\\x4a\\xce\\x1d\\x81\\x89\\x84\\x1f\\x75\\x39\\x05\\x85\\x73\\x88\\x7b\\x7b\\x1a\\x61\\xa4\\x70\\xb3\\xc0\\xb1\"\n\"\\xa7\\xec\\xd8\\x1e\\x5e\\xfb\\x3f\\x05\\x86\\x7a\\x89\\x7b\\x7e\\x1a\\x68\\xa6\\x72\\xb2\\x0b\\xf7\\x23\\xf8\\xad\\x98\\x1d\\xfc\\x80\\x7f\\x5e\\x7a\\x7a\\x68\"\n\"\\x88\\x19\\x83\\x20\\x1d\\x0b\\x15\\x6c\\x7c\\x7e\\x80\\x74\\x1b\\x80\\x7a\\x90\\x96\\x71\\x1f\\x9d\\x62\\x6b\\x93\\x73\\x5b\\x1d\\x80\\xa6\\x96\\x89\\x0b\\xf9\"\n\"\\x18\\x15\\x9f\\x1d\\xf7\\xba\\xa4\\x07\\x53\\x8e\\x7b\\x94\\xa6\\x1a\\x95\\x0b\\x1e\\xfb\\x51\\xf7\\xc8\\x15\\xa1\\x8a\\x9a\\x78\\x70\\x1a\\x4f\\x69\\xfb\\x03\"\n\"\\x65\\x46\\x1e\\x5a\\x70\\x6d\\x71\\x70\\x1b\\x71\\x78\\xa2\\xaa\\xbf\\xac\\xef\\xb4\\xd5\\x1f\\xa9\\xc0\\xac\\xaa\\xa6\\x89\\x08\\x0b\\x05\\xa3\\x73\\x78\\x94\"\n\"\\x6e\\x1b\\xfb\\x0e\\xfb\\x2a\\xfb\\x55\\xfb\\x31\\x42\\xb8\\x57\\xc8\\xcb\\xb8\\xaf\\xea\\xc4\\x1f\\x82\\x64\\x89\\x7e\\x7b\\x1a\\x65\\xa1\\x74\\xb1\\xbc\\xb8\"\n\"\\xb1\\xe3\\xc2\\x1e\\x0b\\x15\\x68\\x6e\\x6d\\x67\\x69\\xa9\\x6d\\xad\\xaf\\xa9\\xa8\\xae\\xaf\\x6d\\xa9\\x67\\x1f\\xf7\\x68\\x16\\x68\\x6e\\x6e\\x66\\x69\\xa9\"\n\"\\x6d\\xad\\xaf\\xa9\\xa8\\xae\\xaf\\x6d\\xa9\\x67\\x1f\\x0e\\x15\\xa1\\x8a\\x9a\\x77\\x6f\\x1a\\x5e\\x60\\xfb\\x14\\x68\\x4a\\x1e\\x5a\\x6f\\x6f\\x72\\x6d\\x1b\"\n\"\\x72\\x79\\xa7\\xae\\x8d\\x1f\\x8e\\xc1\\xaa\\xe7\\xaf\\xcc\\xab\\xc4\\xaf\\xab\\xa9\\x89\\x08\\x0b\\x06\\xeb\\x1d\\x84\\x8a\\x86\\x8a\\x85\\x1e\\xfb\\x17\\xfc\"\n\"\\x7f\\x7f\\x5e\\x79\\x79\\x69\\x88\\x19\\x83\\x20\\x1d\\xf7\\xa5\\x06\\x0b\\xa2\\x1d\\x85\\x20\\x1d\\xf8\\x71\\x06\\xc9\\xf7\\x3a\\x05\\x79\\x06\\x37\\x38\\x2f\"\n\"\\x5c\\x3c\\x1b\\x0b\\x15\\x7b\\x06\\x73\\x66\\x7d\\x84\\x57\\x8a\\x08\\x32\\x06\\xf7\\x11\\xf0\\x05\\xce\\xc1\\xa4\\xb1\\xbb\\x1a\\xc3\\x5c\\xb6\\x4e\\x4d\\x5d\"\n\"\\x6c\\x48\\x67\\x1e\\x9d\\x80\\x05\\x0b\\xb2\\x1d\\x65\\xa7\\x72\\xb4\\xc7\\xb0\\xa9\\xf5\\xd1\\x1e\\x0b\\x97\\xb8\\x9d\\x9d\\xad\\x5f\\x1d\\x71\\x1a\\x83\\x4d\"\n\"\\x1d\\x0b\\x45\\x79\\x68\\x4e\\x1f\\xfb\\x18\\x3e\\x34\\xfb\\x2b\\xfb\\x2d\\x1a\\xfb\\x34\\xf7\\x0c\\xfb\\x01\\xf7\\x44\\xd9\\xee\\x9e\\xa6\\xc4\\x1e\\xa7\\x98\"\n\"\\xbb\\xf7\\x49\\x9e\\x0b\\x1e\\x86\\x7b\\x88\\x7f\\x88\\x83\\x08\\x85\\x77\\x88\\x7a\\x7f\\x1a\\x72\\xa2\\x79\\xa9\\x0b\\x15\\xfc\\xa0\\x07\\x3a\\xf7\\x66\\x56\"\n\"\\x74\\xf7\\x13\\xfb\\xb2\\x05\\xd8\\x06\\xf7\\x14\\xf7\\xb2\\x56\\xa2\\x3a\\xfb\\x66\\x05\\xf8\\xa0\\x07\\xdc\\xfb\\x66\\xc0\\x0b\\xf7\\x52\\xf7\\x9c\\xad\\xb9\"\n\"\\x9d\\x99\\xb2\\x93\\x19\\xa4\\xfb\\x64\\x72\\x07\\xc0\\x8a\\x99\\x81\\x68\\x1a\\x7a\\x85\\x7e\\x77\\x6e\\x1e\\xfb\\x15\\xfb\\x4c\\x78\\x0b\\xbd\\xb0\\xe8\\xc3\"\n\"\\x1f\\x93\\x5d\\x93\\x77\\x9c\\x76\\x08\\x6f\\xa1\\xb3\\x7b\\xbb\\x1b\\xdf\\xce\\xba\\xe3\\xb6\\x1f\\x6f\\x9c\\x05\\x50\\x69\\x61\\x6d\\x5b\\x1b\\x0b\\x07\\x69\"\n\"\\x5d\\x82\\x79\\x6f\\x1a\\x5c\\xb8\\x69\\xc8\\xbe\\xba\\xa8\\xb9\\xa4\\x68\\x1d\\x81\\x88\\x7b\\x1b\\x0b\\xae\\x86\\xa0\\x86\\x92\\x87\\x08\\x91\\x87\\x8f\\x82\"\n\"\\x81\\x1a\\x7c\\x87\\x73\\x85\\x75\\x1e\\xfb\\x0f\\xfc\\x55\\x7b\\x56\\x7f\\x80\\x57\\x83\\x19\\x72\\x0b\\x7e\\x5e\\x79\\x79\\x68\\x88\\x19\\x81\\x20\\x1d\\xf7\"\n\"\\xac\\x06\\x92\\xa1\\x05\\x6b\\x06\\x71\\x7a\\x9c\\xa3\\x90\\x8c\\x93\\x8d\\x92\\x1f\\x0b\\xf7\\xb0\\xf8\\x62\\x15\\xfb\\x28\\xfb\\x1f\\xfb\\x33\\xfb\\x3c\\x36\"\n\"\\xce\\x4c\\xe7\\xf7\\x29\\xf7\\x1c\\xf7\\x2f\\xf7\\x3d\\xe3\\x4a\\xca\\x2f\\x1f\\x0b\\x8a\\x86\\x8a\\x85\\x1e\\x3a\\x1d\\x0b\\x06\\xbf\\xa8\\x74\\x61\\x84\\x8b\"\n\"\\x89\\x88\\x73\\xc2\\x1d\\x0b\\xfb\\x38\\x05\\xa2\\x06\\xb5\\xd7\\xca\\xb5\\xda\\x8f\\xfb\\x22\\xfc\\xa8\\x18\\x7f\\x5e\\x79\\x79\\x68\\x88\\x08\\x62\\x20\\x1d\"\n\"\\x0b\\xd9\\x1d\\xf7\\x20\\xf8\\x8e\\xe9\\x8a\\xb2\\x60\\x90\\xfb\\x03\\x19\\xa6\\x89\\x0b\\x6c\\x63\\x63\\x79\\x88\\x8d\\xa7\\x76\\x1e\\x9e\\x7e\\x7d\\x94\\x7b\"\n\"\\x1b\\x75\\x7c\\x7a\\x73\\x6b\\xab\\x79\\xc1\\xf4\\xe1\\xd2\\xe2\\xb2\\x0b\\x7c\\x4f\\x71\\x6b\\x66\\x86\\x19\\x85\\x75\\x05\\xf7\\x44\\x21\\x1d\\x60\\x8f\\x73\"\n\"\\xa0\\xab\\x1a\\x94\\x8d\\x97\\x8f\\x99\\x1e\\x0b\\x15\\x65\\x1d\\x7b\\x80\\x64\\x4b\\x1d\\x15\\xf7\\x2c\\xe2\\x05\\xaa\\x9d\\x93\\x95\\x9e\\x1a\\xa5\\x75\\xa0\"\n\"\\x71\\x79\\x7b\\x80\\x64\\x4b\\x1d\\x15\\xfb\\x03\\xf7\\x27\\x05\\xa1\\x7a\\x77\\x97\\x78\\x1b\\x73\\x76\\x76\\x73\\x7b\\x97\\x7a\\xa1\\x7d\\x1f\\xf7\\x19\\x32\"\n\"\\x05\\x0e\\x9b\\xc2\\x9f\\x9a\\xcc\\x8d\\x19\\xa4\\xfb\\xd1\\x72\\x07\\xae\\x85\\xa0\\x0b\\xf7\\x2c\\xe2\\x05\\xa9\\x9d\\x94\\x95\\x2d\\x1d\\x0e\\xc1\\x1d\\x86\"\n\"\\x89\\x1a\\x26\\xb7\\x5b\\xe9\\xeb\\x0b\\x98\\xb8\\x9c\\x9d\\xae\\x8e\\x19\\x97\\x21\\x1d\\xfb\\xa3\\x20\\x1d\\xa1\\x06\\xa6\\x8a\\x9b\\x7b\\x71\\x1a\\x0b\\x1b\"\n\"\\x96\\x99\\x88\\x86\\x98\\x1f\\xc6\\x74\\x05\\x0b\\x06\\xe7\\x8e\\xca\\x5e\\x91\\x40\\x08\\x9d\\x06\\xb4\\xf7\\x2e\\x05\\xfc\\x6f\\x20\\x1d\\xa4\\x06\\xa5\\x8a\"\n\"\\x9c\\x0b\\x72\\x1b\\x52\\x5e\\x5d\\x43\\x7e\\x1f\\xb3\\x06\\xab\\x98\\x97\\x96\\xa2\\xaf\\x1d\\x0b\\x85\\x19\\x70\\x07\\xb7\\x9a\\x84\\x75\\x83\\x88\\x7c\\x87\"\n\"\\x7a\\x1f\\x51\\xfb\\x6b\\x05\\x83\\x6e\\x86\\x71\\x7d\\x1a\\x0b\\x6f\\x6e\\x67\\x58\\xc2\\x6d\\xe7\\xf6\\xd2\\xb3\\xc7\\xa8\\x79\\x9c\\x6d\\x6b\\x71\\x76\\x70\"\n\"\\x89\\x8b\\x88\\x8c\\x86\\x0b\\x15\\x7d\\x77\\x05\\x64\\x71\\x74\\x76\\x7c\\x1b\\x83\\x84\\x92\\x93\\x94\\x90\\xa5\\x8f\\x9c\\x1f\\xe6\\xf7\\xe2\\x0b\\xc6\\x1d\"\n\"\\xf7\\x24\\xf8\\xb1\\x05\\x0b\\x75\\x05\\xa0\\x06\\xa6\\x8a\\x9b\\x7b\\x71\\x1a\\x83\\x4d\\x1d\\xfc\\x7f\\x7f\\x5e\\x0b\\x6e\\x1a\\x62\\xa0\\x78\\xb7\\xc7\\xbc\"\n\"\\xb3\\xe4\\xbf\\x1e\\x0b\\x1a\\xb0\\x9e\\x9c\\xb2\\x1e\\x9d\\x21\\x1d\\xfb\\xb6\\x20\\x1d\\x98\\x06\\xb2\\x9c\\x0b\\x68\\x1e\\xe1\\xb2\\x15\\x62\\xb0\\x80\\x9d\"\n\"\\xa5\\x1a\\xa9\\x9f\\xa0\\xa7\\xa7\\x9c\\x77\\x6a\\x6c\\x7f\\x0b\\x88\\x08\\x76\\xf7\\x46\\xa0\\x07\\x6c\\x8e\\x88\\x8c\\x83\\x8f\\x08\\x85\\x8f\\x89\\x92\\xac\"\n\"\\x1a\\x0b\\xd6\\x1d\\xc2\\xd0\\xb0\\x79\\xb0\\x0b\\x6a\\x51\\x67\\x82\\x5e\\x7d\\x6c\\x1f\\x50\\x71\\x67\\x74\\x44\\x1b\\x7e\\x7f\\x8c\\x8c\\x7a\\x1f\\x0b\\x15\"\n\"\\x68\\x6e\\x6e\\x66\\x69\\xa9\\x6d\\xad\\xaf\\xa9\\xa8\\xae\\xaf\\x6d\\xa9\\x67\\x1f\\x0e\\x16\\xc7\\x1d\\x0e\\x7f\\x1a\\x6d\\xa3\\x75\\xad\\xe3\\x1d\\x0b\\x15\"\n\"\\x70\\x74\\x74\\x71\\x6f\\xa2\\x74\\xa6\\xa6\\xa2\\xa2\\xa6\\xa6\\x74\\xa2\\x70\\x1f\\x0b\\x15\\x49\\x6c\\x68\\x73\\x4a\\x1b\\x4b\\x6a\\xa8\\xc8\\x86\\x1f\\x60\"\n\"\\x06\\x8a\\x85\\x8b\\x0b\\x1f\\xa0\\x06\\xc8\\xf7\\x7a\\x05\\x76\\x06\\x6f\\x4b\\x58\\x6a\\x44\\x8c\\x08\\x61\\x06\\x0b\\x79\\x53\\x7d\\x81\\x46\\x86\\x19\\x72\"\n\"\\xf7\\xd6\\xa4\\x07\\x4a\\x8e\\x7f\\x92\\xb0\\x1a\\x0b\\xf0\\x1d\\x55\\x3b\\x59\\x6c\\x1d\\x0b\\x84\\xaf\\x1b\\xd2\\xc0\\xb0\\xbd\\xb5\\x65\\xa9\\x57\\x81\\x85\"\n\"\\x8a\\x89\\x81\\x1f\\x0b\\x4c\\x1d\\x71\\x8c\\x7a\\x9b\\xa4\\x1a\\x94\\x8b\\x8e\\x8d\\x92\\x1e\\x0b\\x68\\x6f\\x6e\\x67\\x69\\xa9\\x6d\\xad\\xae\\xa9\\xa8\\xad\"\n\"\\xaf\\x6d\\xa9\\x67\\x1f\\x0b\\x85\\x1f\\x60\\x80\\x06\\x26\\xb7\\x5b\\xe8\\xea\\xcb\\xc5\\xf1\\x9c\\x1e\\x0e\\xf7\\xa3\\xf7\\xae\\x15\\xfb\\x89\\x06\\x73\\xfb\"\n\"\\x08\\x05\\xf7\\x8a\\x06\\x0e\\x21\\x1d\\x68\\x06\\x71\\x7a\\x9c\\xa4\\x92\\x8c\\x90\\x8c\\x92\\x1f\\x0b\\x08\\x63\\x9b\\xa5\\x77\\xad\\x1b\\xb8\\xa7\\xa6\\xec\"\n\"\\xc1\\x1f\\x78\\x98\\x05\\x0b\\xad\\x8e\\x08\\x97\\x21\\x1d\\xfb\\xee\\xfc\\xef\\x15\\x42\\x96\\x67\\x0b\\x49\\x90\\x86\\x90\\x7e\\xd7\\x2b\\xf8\\xd0\\x18\\x72\"\n\"\\x06\\xfc\\x08\\xfc\\xe0\\x0b\\x71\\x85\\x74\\x05\\x8c\\x8f\\x8f\\x8b\\x8e\\x1b\\x9f\\x99\\x7c\\x75\\x84\\x8a\\x0b\\xf7\\xd8\\xf9\\x3f\\x15\\x51\\x06\\xfc\\x47\"\n\"\\xfd\\x4d\\x05\\xc5\\x06\\x0e\\x15\\xf7\\x28\\xf7\\x87\\xb0\\xfb\\x87\\x05\\x0b\\x1f\\xc5\\xf7\\x46\\x05\\x9f\\xc9\\x95\\xb4\\x0b\\x8a\\xa6\\x1b\\xf7\\x3a\\xf6\"\n\"\\xd8\\xf7\\x0c\\xf0\\x41\\xc1\\xfb\\x1f\\x1f\\x0b\\x1b\\x53\\x65\\xbe\\xd7\\xf7\\x02\\xbb\\xf7\\x42\\xc3\\xe9\\x1f\\xca\\xb0\\x0b\\x1e\\x90\\x7f\\x8c\\x86\\x83\"\n\"\\x1a\\x71\\x7e\\x7a\\x70\\x82\\x1e\\x96\\x73\\x0b\\xa4\\x15\\x54\\x8d\\x79\\x95\\xa8\\x1a\\x9a\\x8f\\x9f\\x9a\\xbf\\x1e\\x8d\\x0b\\xf7\\x76\\x15\\x41\\x6e\\x6a\"\n\"\\x68\\x58\\x1a\\x52\\xbe\\x62\\xd3\\xdb\\xc9\\x0b\\x15\\xfb\\x03\\xf7\\x26\\x05\\xa0\\x7b\\x76\\x97\\x78\\x1b\\x74\\x76\\x0b\\x98\\xd2\\xa0\\xcb\\x1f\\xd8\\xa6\"\n\"\\xa3\\xaa\\xaf\\x1b\\xb0\\x9d\\x6d\\x0b\\xa4\\x06\\x44\\x8e\\x7f\\x91\\xab\\x1a\\x9a\\x8f\\xa0\\x92\\xa5\\x1e\\x0b\\x6f\\x06\\x70\\x8c\\x7a\\x9b\\xa4\\x1a\\x90\"\n\"\\x8c\\x92\\x8d\\x92\\x1e\\x0b\\x74\\x6e\\x1b\\x6f\\x78\\xa7\\xb3\\xb9\\xa8\\xf7\\x12\\xa8\\xd7\\x1f\\x0b\\x08\\x83\\x20\\x1d\\x0b\\xf7\\x2c\\xe2\\x05\\xa9\\x9c\"\n\"\\x94\\x96\\x9e\\x1a\\xa5\\x75\\xa0\\x0b\\x95\\x41\\x90\\x62\\x81\\x1a\\x62\\x7c\\x80\\x4b\\x85\\x1e\\x72\\x0b\\x9a\\x93\\xc2\\x8c\\x1e\\xa4\\xfb\\xaf\\x72\\x07\"\n\"\\xbe\\x84\\x8e\\x0b\\xf7\\x21\\x15\\x50\\x63\\x77\\x76\\x79\\x1b\\x83\\x84\\x92\\x93\\x0b\\x15\\x4d\\x63\\x7e\\x7d\\x7a\\x1b\\x83\\x85\\x92\\x95\\x95\\x0b\\xf9\"\n\"\\x0d\\xf9\\x90\\x15\\x5a\\x06\\x56\\x2f\\x05\\x95\\x6b\\x0b\\xb0\\xa4\\xa7\\xb5\\xc1\\x5e\\xaf\\x48\\xfb\\x21\\xfb\\x24\\x0b\\xd1\\x80\\x8e\\x89\\x6e\\x1a\\x81\"\n\"\\x88\\x7b\\x82\\x6a\\x1e\\x0b\\x63\\x1b\\x7e\\x86\\x92\\x9d\\x97\\x8b\\x8c\\x92\\xa1\\x1f\\x0b\\xfb\\x14\\xf7\\xb2\\x05\\x3e\\x06\\xfb\\x13\\xfb\\xb2\\xc0\\x0b\"\n\"\\x71\\x1a\\x65\\xa4\\x75\\xb6\\xc7\\xb4\\xad\\xec\\xc5\\x1e\\x0b\\x18\\xf7\\x15\\x06\\x94\\xae\\x05\\xfb\\x15\\x06\\x0e\\x7a\\x7f\\x66\\x69\\x1e\\xfb\\x0c\\xfb\"\n\"\\x16\\x05\\x0e\\x06\\x36\\xfb\\x66\\x05\\xd9\\x06\\xe0\\xf7\\x66\\x05\\x0b\\x86\\x75\\x05\\xa0\\x06\\xa6\\x8a\\x9b\\x7b\\x71\\x1a\\x0b\\x22\\x1d\\x6e\\x06\\x71\"\n\"\\x8c\\x7a\\x9b\\xa4\\x1a\\x0b\\x15\\x53\\x06\\xfb\\x1b\\x2a\\x30\\xec\\x05\\x59\\x06\\x0b\\x1b\\x80\\x7f\\x92\\x90\\x8e\\x8c\\x8c\\x8f\\x91\\x1f\\x0b\\xda\\x69\"\n\"\\x1e\\x7d\\xad\\xa6\\x87\\xd0\\x1b\\xf7\\xac\\x0b\\x06\\xb2\\xf7\\x25\\x05\\x68\\x06\\x0b\\x1e\\xf7\\x17\\xf8\\x7f\\x97\\xb8\\x0b\\x89\\x83\\x1f\\x28\\xfb\\xf5\"\n\"\\x05\\xf7\\x0a\\x06\\x0b\\x1b\\x53\\x65\\xbe\\xd6\\xf7\\x02\\xbb\\xf7\\x41\\x0b\\x9d\\x75\\x67\\x47\\x6d\\xfb\\x15\\x6a\\x44\\x1f\\x0b\\x69\\x71\\x70\\x69\\x68\"\n\"\\xa6\\x6e\\xad\\xac\\xa5\\x0b\\x6b\\x77\\x77\\x83\\x7e\\x80\\x1e\\x81\\x7f\\x87\\x0b\\x71\\x84\\x74\\x05\\x96\\x06\\x9f\\x99\\x7c\\x76\\x0b\\x9d\\x1b\\xc8\\xae\"\n\"\\xae\\xdf\\xa1\\x1f\\x0e\\x01\\x00\\x01\\xe3\\x01\\x05\\x00\\x01\\x0a\\x02\\x01\\x40\\x03\\x01\\x87\\xff\\x02\\x87\\xa0\\x02\\x8e\\x02\\x00\\x01\\x00\\x04\\x00\"\n\"\\x07\\x00\\x4b\\x00\\x72\\x00\\xb2\\x01\\x48\\x02\\x0e\\x02\\xb3\\x02\\xbb\\x02\\xf4\\x03\\x2e\\x04\\x1e\\x04\\x38\\x04\\x3f\\x04\\x43\\x04\\x5b\\x04\\x6f\\x04\"\n\"\\xc9\\x05\\x06\\x05\\x4f\\x05\\xb6\\x05\\xe8\\x06\\x36\\x06\\x94\\x06\\xb6\\x07\\x22\\x07\\x8b\\x07\\x9a\\x07\\xab\\x07\\xc8\\x07\\xde\\x07\\xf9\\x08\\x44\\x08\"\n\"\\xf6\\x08\\xfa\\x09\\x8a\\x09\\x8e\\x09\\x92\\x09\\x96\\x09\\xe6\\x09\\xea\\x0a\\x20\\x0a\\x25\\x0a\\x30\\x0a\\x34\\x0a\\x38\\x0a\\xb0\\x0a\\xb4\\x0a\\xb8\\x0a\"\n\"\\xbe\\x0b\\x75\\x0b\\x79\\x0b\\x7d\\x0b\\x81\\x0b\\x85\\x0b\\xd4\\x0b\\xd9\\x0c\\x71\\x0c\\x75\\x0c\\x79\\x0c\\xa5\\x0c\\xb8\\x0c\\xe3\\x0d\\x01\\x0d\\x0c\\x0d\"\n\"\\x13\\x0d\\x16\\x0d\\x7b\\x0d\\x80\\x0d\\x83\\x0d\\x88\\x0d\\xd0\\x0d\\xd3\\x0d\\xdf\\x0d\\xe8\\x0e\\x17\\x0e\\x1a\\x0e\\x1f\\x0e\\xd6\\x0e\\xda\\x0e\\xdd\\x0f\"\n\"\\x60\\x0f\\xda\\x0f\\xdf\\x0f\\xe4\\x0f\\xee\\x0f\\xf2\\x10\\x4a\\x10\\x4e\\x10\\xd9\\x10\\xde\\x10\\xe3\\x11\\x47\\x11\\x53\\x11\\xb7\\x11\\xf1\\x12\\x36\\x12\"\n\"\\xa7\\x13\\x4d\\x13\\x51\\x13\\xda\\x14\\x58\\x15\\x0d\\x15\\x71\\x15\\x78\\x15\\xa2\\x15\\xe6\\x15\\xed\\x15\\xf4\\x16\\x9c\\x17\\x46\\x17\\x55\\x17\\xf5\\x18\"\n\"\\xf6\\x18\\xfe\\x19\\x73\\x19\\x8c\\x19\\x93\\x19\\xc3\\x19\\xd2\\x1a\\x16\\x1a\\x2a\\x1b\\x21\\x1b\\x6f\\x1b\\x77\\x1b\\x7f\\x1b\\x87\\x1b\\x8f\\x1b\\x97\\x1b\"\n\"\\xb0\\x1b\\xb8\\x1b\\xc0\\x1b\\xc8\\x1b\\xe0\\x1b\\xf0\\x1c\\x12\\x1c\\x1a\\x1c\\x1e\\x1c\\x3f\\x1c\\xad\\x1c\\xe4\\x1d\\x03\\x1d\\xd3\\x1e\\x16\\x1e\\x98\\x1e\"\n\"\\x9d\\x1e\\xab\\x1e\\xae\\x1f\\x55\\x1f\\xfe\\x20\\x22\\x20\\x32\\x20\\xae\\x21\\x31\\x21\\x34\\x21\\x80\\x21\\xa5\\x21\\xdf\\x22\\x00\\x22\\x1e\\x22\\x31\\x22\"\n\"\\x5d\\x22\\xe4\\x23\\x0c\\x23\\x30\\x23\\xa5\\x23\\xb1\\x24\\x1a\\x24\\x46\\x24\\x6c\\x24\\xb8\\x24\\xc0\\x24\\xd1\\x24\\xd9\\x24\\xeb\\x24\\xf3\\x24\\xfc\\x25\"\n\"\\x2e\\x25\\x37\\x25\\x3f\\x25\\x4d\\x25\\x55\\x25\\x5e\\x25\\x67\\x25\\x70\\x25\\x79\\x25\\x81\\x25\\x88\\x25\\x90\\x25\\x98\\x25\\xb8\\x25\\xce\\x25\\xd7\\x25\"\n\"\\xe0\\x25\\xf0\\x25\\xf9\\x26\\x0a\\x26\\x13\\x26\\x21\\x26\\x30\\x26\\x36\\x26\\x50\\x26\\x57\\x26\\x67\\x26\\x6e\\x26\\x95\\x26\\xec\\x26\\xf5\\x26\\xff\\x27\"\n\"\\x08\\x27\\x12\\x27\\x1b\\x27\\x2e\\x27\\x38\\x27\\x41\\x27\\x49\\x27\\x52\\x27\\x61\\x27\\x68\\x27\\x87\\x27\\x98\\x27\\xa2\\x27\\xab\\x27\\xb3\\x27\\xbc\\x27\"\n\"\\xc4\\x27\\xcd\\x27\\xd7\\x27\\xe1\\x28\\x54\\x29\\x00\\x29\\xef\\x2a\\xe8\\x2b\\x60\\x2c\\x04\\x2c\\x9c\\x2d\\x01\\x2d\\x2b\\x2d\\x41\\x2d\\x44\\x2d\\x60\\x2d\"\n\"\\x69\\x2d\\xc1\\x2e\\x34\\x2e\\x37\\x2e\\x40\\x2e\\x48\\x2e\\x58\\x2e\\x61\\x2e\\x98\\x2e\\xb1\\x2e\\xb4\\x2e\\xce\\x2e\\xd6\\x2e\\xde\\x2e\\xe7\\x2e\\xef\\x2f\"\n\"\\x4b\\x2f\\xdf\\x30\\x0a\\x30\\x76\\x30\\x81\\x30\\xf1\\x31\\x7b\\x31\\xd0\\x31\\xd9\\x31\\xf5\\x31\\xfe\\x32\\x07\\x32\\x8d\\x32\\xc7\\x33\\x4d\\x33\\x66\\x33\"\n\"\\x6f\\x33\\x79\\x33\\x8e\\x33\\x93\\x33\\xa9\\x33\\xc4\\x33\\xed\\x33\\xfd\\x34\\x5b\\x34\\x64\\x34\\x6d\\x34\\xb0\\x34\\xc7\\x34\\xd0\\x34\\xd8\\x34\\xef\\x34\"\n\"\\xf7\\x35\\x10\\x35\\x19\\x35\\x5d\\x35\\x7b\\x35\\x83\\x35\\x95\\x36\\x12\\x36\\x5c\\x36\\xa9\\x36\\xe6\\x37\\x6f\\x37\\x9b\\x38\\x5b\\x38\\x63\\x38\\x6c\\x38\"\n\"\\x75\\x38\\xbb\\x38\\xc4\\x39\\x64\\x39\\xd0\\x39\\xd8\\x3a\\x22\\x3a\\x48\\x3a\\x93\\x3a\\x9b\\x3a\\xcd\\x3b\\x66\\x3b\\x7d\\x3b\\x85\\x3b\\x8e\\x3c\\x26\\x3c\"\n\"\\x2a\\x3c\\x4e\\x3c\\xad\\x3c\\xb6\\x3c\\xdb\\x3c\\xe5\\x3c\\xf6\\x3d\\x05\\x3d\\x23\\x3d\\x9f\\x3d\\xa8\\x3d\\xb1\\x3d\\xba\\x3d\\xc3\\x3d\\xf8\\x3e\\x00\\x3e\"\n\"\\x89\\x3e\\x8d\\x3e\\x90\\x3e\\xd5\\x3e\\xd8\\x3e\\xdc\\x3f\\x4d\\x3f\\x68\\x3f\\x8b\\x40\\x65\\x40\\xe1\\x40\\xe8\\x41\\x17\\x41\\x6f\\x41\\xcd\\x41\\xe7\\x41\"\n\"\\xf0\\x42\\x3f\\x42\\x67\\x42\\xb3\\x43\\x0c\\x43\\x32\\x43\\xaf\\x44\\x38\\x44\\x6f\\x44\\xa2\\x44\\xce\\x44\\xf8\\x45\\x45\\x45\\x88\\x45\\xd5\\x46\\x01\\x46\"\n\"\\x8e\\x46\\xeb\\x47\\x57\\x47\\x9c\\x48\\x0f\\x48\\x28\\x48\\xb6\\x49\\x42\\x49\\x46\\x49\\x6a\\x49\\xb6\\x4a\\x44\\x4a\\xce\\x4b\\x30\\x4b\\x98\\x4c\\x36\\x4c\"\n\"\\xab\\x4c\\xfd\\x4d\\x60\\x4d\\x66\\x4d\\xd2\\x4d\\xd7\\x4d\\xf1\\x4e\\x9c\\x4f\\x0f\\x4f\\x13\\x4f\\x6c\\x4f\\x71\\x4f\\xdb\\x50\\x59\\x50\\xad\\x50\\xd3\\x51\"\n\"\\x4d\\x51\\xca\\x52\\x16\\x52\\xb5\\x52\\xba\\x53\\x7f\\x54\\x12\\x54\\x54\\x54\\x87\\x55\\x35\\x56\\x05\\x56\\x98\\x57\\x21\\x57\\x73\\x57\\xd6\\x58\\x2e\\x58\"\n\"\\xbb\\x59\\x07\\x59\\x91\\x59\\xb6\\x5a\\x10\\x5a\\x84\\x5a\\xe0\\x5b\\x43\\x5b\\xac\\x5c\\x2d\\x5c\\x91\\x5d\\x1e\\x5d\\x41\\x5d\\x83\\x5d\\xc8\\x5e\\x11\\x5e\"\n\"\\x5a\\x5e\\xf9\\x5f\\x84\\x60\\x35\\x60\\x76\\x60\\xdb\\x60\\xec\\x61\\x21\\x61\\x57\\x61\\x9e\\x62\\x10\\x62\\x87\\x62\\xbd\\x62\\xde\\x62\\xff\\x63\\x20\\x63\"\n\"\\x41\\x63\\x4e\\x63\\x64\\x63\\xe6\\x63\\xf2\\x63\\xfc\\x64\\x24\\x64\\x2d\\x64\\x83\\x65\\x01\\x65\\x7f\\x65\\xa7\\x65\\xe9\\x66\\x6c\\x66\\x9b\\x66\\xf0\\x67\"\n\"\\x13\\x67\\x1d\\x67\\x27\\x67\\x57\\x67\\x61\\x67\\xc1\\x68\\x01\\x68\\x06\\x68\\x36\\x68\\x56\\x68\\xa7\\x68\\xab\\x68\\xd6\\x69\\x2d\\x69\\x47\\x69\\x9a\\x6a\"\n\"\\x2d\\x6a\\xa4\\x6a\\xac\\x6a\\xbe\\x6a\\xe6\\x6b\\x05\\x6b\\x2e\\x6b\\x88\\x6b\\xd4\\x6c\\x1b\\x6c\\x42\\x6c\\x51\\x6d\\x13\\x6d\\x1d\\x6d\\x95\\x6e\\x04\\x6e\"\n\"\\x42\\x6e\\x80\\x6e\\xc5\\x6f\\x52\\x6f\\x81\\x6f\\x86\\x6f\\x9b\\x6f\\xe4\\x70\\x0b\\x70\\x21\\x70\\x59\\x70\\xd2\\x70\\xd9\\x71\\x3e\\x71\\x47\\x71\\xa1\\x71\"\n\"\\xb4\\x71\\xea\\x71\\xf9\\x72\\x24\\x72\\x33\\x72\\xa1\\x73\\x17\\x73\\x37\\x73\\x81\\x74\\x04\\x74\\x0d\\x74\\xa0\\x74\\xa8\\x74\\xb1\\x75\\x18\\x75\\x4c\\x75\"\n\"\\xa8\\x75\\xb6\\x75\\xd1\\x75\\xe2\\x75\\xe9\\x76\\x16\\x76\\x19\\x76\\x45\\x76\\x53\\x76\\x5c\\x76\\xd3\\x77\\x1f\\x77\\xa1\\x78\\x22\\x78\\x6c\\x78\\x94\\x78\"\n\"\\xca\\x79\\x4f\\x79\\x86\\x79\\x8f\\x79\\xad\\x79\\xb7\\x79\\xe8\\x79\\xfa\\x7a\\x4f\\x7a\\x58\\x7a\\x92\\x7a\\x9b\\x7a\\xc7\\x7b\\x07\\x7b\\x61\\x7b\\xf2\\x7c\"\n\"\\x4e\\x7c\\x8a\\x7d\\x0e\\x7d\\x69\\x7d\\x99\\x7d\\xc6\\x7e\\x0e\\x7e\\x73\\x7e\\x9d\\x7e\\xb9\\x7e\\xc2\\x7e\\xca\\x7e\\xdd\\x7e\\xe0\\x7e\\xe4\\x7e\\xed\\x7f\"\n\"\\x16\\x7f\\x1e\\x7f\\x26\\x7f\\x53\\x7f\\xf6\\x80\\x8f\\x81\\x1e\\x81\\x26\\x81\\x46\\x81\\x59\\x81\\x61\\x81\\xd1\\x82\\x2d\\x83\\x13\\x83\\xdc\\x84\\x77\\x84\"\n\"\\xff\\x85\\x75\\x85\\xf5\\x86\\x68\\x86\\xec\\x87\\x59\\x87\\xd0\\x88\\x45\\x88\\xa0\\x88\\xd1\\x89\\x27\\x89\\x4b\\x89\\x7c\\x89\\xb3\\x89\\xf6\\x8a\\x83\\x8b\"\n\"\\x16\\x8b\\x89\\x8b\\xd0\\x8c\\x63\\x8c\\xea\\x8d\\x65\\x8d\\x71\\x8d\\x75\\x8d\\xbb\\x8e\\x55\\x8e\\xc5\\x8f\\x34\\x8f\\xcc\\x90\\x2b\\x90\\x58\\x90\\x6b\\x90\"\n\"\\x80\\x90\\x8b\\x91\\x43\\x91\\xbc\\x91\\xc0\\x91\\xc8\\x91\\xe4\\x92\\x01\\x92\\x71\\x92\\x8a\\x92\\xcf\\x92\\xf8\\x93\\x3b\\x93\\x40\\x93\\x4f\\x93\\x9d\\x93\"\n\"\\xc7\\x93\\xd0\\x94\\x09\\x94\\x11\\x94\\x19\\x94\\x27\\x94\\x2f\\x94\\xed\\x94\\xf6\\x94\\xff\\x95\\x0b\\x95\\x15\\x95\\xa4\\xfc\\x27\\x0e\\xfc\\x27\\x0e\\xfb\"\n\"\\x9c\\xf7\\x58\\xf7\\x60\\x15\\xb5\\xf7\\x00\\xb7\\xed\\xc4\\xf7\\x04\\x08\\xa5\\xb9\\x90\\x9b\\xa6\\x1a\\xb7\\x6f\\xa8\\x62\\x6c\\x73\\x7a\\x6e\\x7d\\x1e\\x83\"\n\"\\x79\\x89\\x80\\x89\\x60\\x86\\x3c\\x79\\xfb\\x0b\\x6d\\xfb\\x30\\x08\\x71\\x3a\\x15\\x61\\x6b\\x6b\\x61\\x62\\xaa\\x6e\\xb5\\xb5\\xac\\xaa\\xb2\\xb2\\x68\\xae\"\n\"\\x64\\x1f\\x0e\\x29\\xf7\\x45\\x83\\x0a\\xf7\\xc1\\x16\\xdd\\xf7\\x4e\\x8c\\x8c\\x8d\\x90\\x8e\\x93\\x19\\x95\\xa1\\x8c\\x8e\\x98\\x1a\\xa6\\x77\\xa1\\x72\\x64\"\n\"\\x66\\x68\\x65\\x88\\x1e\\x7b\\xfb\\x6a\\x05\\x0e\\xf8\\x55\\xf7\\xaf\\x15\\x34\\x06\\xc1\\xf7\\x1a\\x05\\xec\\x06\\x9f\\xd4\\x05\\x33\\xbe\\x0a\\xfb\\x05\\xbe\"\n\"\\x0a\\x22\\x06\\x77\\x42\\x05\\xeb\\x06\\x55\\xfb\\x1a\\x05\\x21\\x06\\x77\\x42\\x05\\xeb\\xea\\x1d\\xf7\\x05\\xea\\x1d\\xec\\x06\\x30\\xf7\\x63\\x15\\x55\\xfb\"\n\"\\x1a\\x05\\xfb\\x05\\x06\\xc1\\xf7\\x1a\\x05\\x0e\\xf8\\x85\\xf8\\xea\\x15\\x79\\x99\\x66\\xa3\\x5b\\x9f\\x6a\\x90\\x19\\x9f\\xd3\\x05\\x59\\x06\\x79\\x4a\\x05\"\n\"\\x8d\\x77\\x83\\x8b\\x81\\x1b\\xfb\\x04\\x37\\x3d\\x23\\x47\\xa5\\x67\\xf5\\x3a\\x1f\\x41\\xfb\\x99\\x45\\xab\\x77\\xb3\\x88\\xf7\\x00\\x19\\x75\\x91\\x61\\xfb\"\n\"\\x22\\xc0\\x5c\\xaa\\x7a\\xca\\x7c\\x19\\x6e\\x20\\x05\\xbf\\x06\\xa7\\xf0\\xa2\\x8a\\x05\\xf7\\x0f\\x86\\xf7\\x00\\xe9\\xf7\\x04\\x1a\\xd2\\x70\\xb4\\xfb\\x05\"\n\"\\xec\\x1e\\xc6\\xf7\\x6b\\x05\\xc7\\x77\\xa3\\x67\\x46\\x1a\\x85\\x8b\\x7e\\x8a\\x80\\x1e\\xa0\\x86\\x05\\xfb\\x63\\x6e\\x15\\x56\\xb3\\x7a\\xa5\\xb3\\x1a\\xc5\"\n\"\\xb6\\xb0\\xce\\x91\\x8f\\x8b\\x89\\x90\\x1e\\x59\\xfb\\xfd\\x15\\xc2\\x5f\\x9a\\x71\\x5c\\x1a\\x53\\x6e\\x5f\\x5c\\x79\\x1e\\x85\\x7a\\x83\\x8a\\x67\\x1b\\x0e\"\n\"\\xf7\\x48\\xf9\\x38\\xf8\\x0c\\x15\\x5a\\x5e\\x77\\x64\\x60\\x1f\\x55\\x57\\x68\\x42\\x4b\\x1a\\x38\\xc0\\x54\\xdb\\xb8\\xb9\\x9f\\xad\\xab\\x1e\\xc1\\xc4\\xac\"\n\"\\xdd\\xd8\\x1a\\xd1\\x5c\\xb9\\x45\\x1e\\xab\\x58\\x15\\xa9\\x89\\xa0\\x6f\\x64\\x1a\\x61\\x7d\\x5d\\x70\\x5a\\x1e\\x55\\x6d\\x68\\x6e\\x67\\x1b\\x6d\\x75\\xa4\"\n\"\\xab\\x8d\\x1f\\x8e\\xb7\\xad\\xe7\\xaa\\xb7\\xa2\\xae\\xa5\\x9d\\xa3\\x8a\\x08\\xfc\\x96\\xfb\\xe1\\x15\\xc3\\x06\\xf8\\x1e\\xf9\\x50\\x05\\x64\\x06\\x5a\\x51\"\n\"\\x5b\\x77\\x4c\\x1b\\x61\\x71\\x93\\x9f\\x6f\\x1f\\xa0\\x6e\\x78\\x92\\x6e\\x1b\\xfb\\x05\\xfb\\x03\\xfb\\x0f\\xfb\\x11\\x3b\\xc0\\x52\\xd6\\xc8\\xc0\\xaa\\xc4\"\n\"\\xb2\\x1f\\xb6\\xc9\\x9c\\xc4\\x8c\\xe4\\x08\\x87\\xa1\\x95\\x8a\\x96\\x1b\\xb0\\xb2\\x94\\x9d\\xb6\\x1f\\xfb\\x94\\x9e\\x15\\x91\\x8d\\x89\\x85\\x92\\x1f\\x93\"\n\"\\x83\\x8c\\x8b\\x92\\x88\\x08\\xa7\\x80\\x8c\\x89\\x75\\x1a\\xfb\\x06\\x40\\xfb\\x0f\\x45\\x6e\\x76\\xa2\\xaa\\x8d\\x1e\\x8e\\xba\\xad\\xe6\\xac\\xbc\\xa1\\xac\"\n\"\\xa3\\x9e\\x9c\\x89\\x08\\x0e\\xf7\\x11\\xf9\\x35\\xf0\\x15\\x6e\\x6e\\x76\\x80\\x70\\x1b\\x64\\x6b\\xa0\\xbe\\x64\\x1f\\xf7\\x1d\\xf7\\x4d\\x91\\x91\\xc9\\x97\"\n\"\\x08\\xa4\\xfb\\x68\\x72\\x07\\xb5\\x84\\x99\\x82\\x75\\x1a\\x6f\\x7a\\x6e\\x52\\x43\\x1e\\x62\\xcd\\x6a\\xe2\\x7f\\xd5\\x08\\xf7\\x11\\xbd\\xc4\\xc2\\xce\\x1a\"\n\"\\xce\\x51\\xba\\x3b\\xfb\\x02\\x40\\x38\\xfb\\x0f\\x72\\x8e\\x75\\x93\\x5e\\x1e\\xfb\\x08\\x59\\x6b\\x79\\x68\\x67\\x08\\x67\\x65\\x76\\x5b\\x5d\\x1a\\x28\\xd9\"\n\"\\x47\\xf7\\x07\\xd1\\xc3\\x9d\\xb8\\xcd\\x1e\\x5f\\xb8\\xb4\\x79\\xc0\\x1b\\xcd\\xb6\\xa3\\xd5\\xc8\\x1f\\xfc\\x52\\xf7\\x9b\\x15\\xa5\\xfb\\x03\\xa6\\x4a\\xc3\"\n\"\\x34\\x08\\x76\\x63\\x71\\x84\\x6c\\x1b\\x42\\x55\\xc6\\xda\\xd1\\xaa\\xb4\\xdf\\xb5\\x1f\\xf7\\x05\\xe6\\x15\\x82\\xc5\\x89\\x98\\xa4\\x1a\\xd8\\xa4\\xb5\\xb8\"\n\"\\xac\\x9e\\x72\\x61\\x4f\\x6b\\x60\\x3c\\x5e\\x1e\\x0e\\xfb\\xd4\\xf7\\x03\\xf8\\x05\\x40\\x1d\\xfb\\xd4\\xf7\\xda\\xf9\\x41\\x15\\xfb\\x2c\\xfb\\x04\\x4f\\x4a\"\n\"\\x5d\\x23\\x08\\x70\\x4f\\x7e\\x4a\\x43\\x1a\\xfb\\x1d\\xb4\\xfb\\x03\\xf0\\xfb\\x1e\\x1e\\xa2\\x9a\\x05\\x54\\xec\\x7b\\xc8\\xf7\\x08\\x1a\\xf7\\x14\\xa4\\xf7\"\n\"\\x15\\xb6\\xeb\\x1e\\xaf\\xdb\\xb0\\xbb\\xdc\\xd5\\x08\\x0e\\xfb\\xd4\\x70\\xfb\\x47\\x15\\xf7\\x0a\\xdf\\xbd\\xbc\\xbe\\xda\\x08\\xc0\\xdc\\xa5\\xe3\\xec\\x1a\"\n\"\\xd5\\x7b\\xd9\\x6c\\xd5\\x1e\\x74\\xc2\\x76\\xad\\x57\\xd2\\x74\\x7c\\x18\\xc1\\x31\\x9d\\x48\\xfb\\x06\\x1a\\xfb\\x19\\x6b\\xfb\\x2c\\x59\\x27\\x1e\\x6b\\x4b\"\n\"\\x6c\\x64\\x3f\\x45\\x08\\x0e\\xf7\\x91\\xf8\\x76\\x15\\x80\\x91\\x6e\\x9c\\x7f\\x98\\x73\\xb0\\x19\\xae\\x75\\x7a\\x98\\x73\\x1b\\x72\\x73\\x71\\x6f\\x7a\\x94\"\n\"\\x7e\\x9c\\x80\\x1f\\x82\\x99\\x95\\x89\\xa8\\x1b\\xb7\\x8a\\x98\\x88\\xac\\x78\\x96\\x85\\x18\\x80\\x85\\x6a\\x79\\x7f\\x88\\x5e\\x89\\x19\\x6e\\x7f\\x88\\x84\"\n\"\\x7f\\x1f\\x7b\\x82\\x81\\x7b\\x7b\\x1a\\x6e\\xa2\\x72\\xa6\\xa4\\x9b\\x97\\xaf\\xa0\\x1e\\xa0\\xaf\\x96\\x95\\xac\\x9f\\x96\\x91\\x18\\x7f\\x07\\x88\\x5f\\x89\"\n\"\\x83\\x76\\x66\\x08\\x7f\\x75\\x86\\x7e\\x7d\\x1a\\x6b\\x9f\\x77\\xaa\\xa9\\x9f\\x9f\\xab\\x9a\\x87\\x97\\x7e\\xa1\\x1e\\x76\\xb0\\x89\\x93\\x88\\xb7\\x08\\x97\"\n\"\\x07\\x96\\x85\\xac\\x77\\x96\\x81\\xa0\\x67\\x19\\x67\\xa0\\x9b\\x7f\\xa4\\x1b\\xa6\\xa2\\xa4\\xa8\\x9b\\x81\\x9b\\x7b\\x94\\x1f\\x92\\x7f\\x7f\\x8e\\x6e\\x1b\"\n\"\\x5e\\x8d\\x7f\\x8e\\x6a\\x9d\\x80\\x91\\x18\\x96\\x91\\xac\\x9e\\x98\\x8e\\xb7\\x8c\\x19\\xa8\\x95\\x8d\\x94\\x99\\x1f\\x9c\\x96\\x94\\x98\\x9c\\x1a\\xa7\\x73\"\n\"\\xa5\\x72\\x73\\x7a\\x7e\\x68\\x75\\x1e\\x73\\x66\\x7f\\x7e\\x6e\\x7a\\x80\\x85\\x18\\x97\\x07\\x8e\\xb8\\x8d\\x93\\xa0\\xb0\\x08\\x98\\xa1\\x8f\\x96\\x9b\\x1a\"\n\"\\xab\\x77\\x9f\\x6d\\x6c\\x77\\x76\\x6c\\x7c\\x8f\\x7f\\x98\\x75\\x1e\\xa0\\x66\\x8d\\x83\\x8e\\x5e\\x08\\x0e\\x38\\xf7\\x85\\xf7\\xbd\\x15\\xfb\\x64\\x33\\xf7\"\n\"\\x64\\xfb\\x65\\xe3\\xf7\\x65\\xf7\\x64\\xe3\\xfb\\x64\\xf7\\x65\\x33\\x06\\x0e\\xfc\\x27\\x5c\\xfb\\x4a\\x40\\x1d\\xfb\\xd4\\xc9\\x1d\\xfc\\x27\\xcd\\xf7\\x1b\"\n\"\\x15\\x60\\x6b\\x6b\\x60\\x62\\xab\\x6b\\xb4\\xb5\\xac\\xab\\xb5\\xb4\\x6a\\xac\\x63\\x1f\\x0e\\xfc\\x0b\\xf7\\x93\\xf9\\x41\\x15\\xfb\\xd3\\xfd\\x53\\x05\\xe2\"\n\"\\x06\\xf7\\xd3\\xf9\\x53\\x05\\x0e\\xf7\\xdb\\xf9\\x3f\\x15\\x54\\x54\\x71\\x5d\\x5e\\x1f\\x2e\\x2b\\x4d\\xfb\\x35\\xfb\\x28\\x1a\\xfb\\x19\\xca\\x34\\xec\\xb5\"\n\"\\xb3\\x99\\xa8\\xb2\\x1e\\xef\\xd6\\xda\\xf7\\x49\\xf7\\x31\\x1a\\xf7\\x26\\x50\\xea\\x30\\x1e\\x89\\x6e\\x15\\xaa\\x9d\\x70\\x5e\\x78\\x87\\x6b\\x84\\x66\\x1f\"\n\"\\x79\\x35\\x59\\xfb\\x55\\x75\\x49\\x08\\x2b\\x6a\\x6e\\x65\\x62\\x1b\\x6d\\x77\\xa5\\xb3\\xcb\\xc3\\xf7\\x7e\\xba\\xf7\\x17\\x1f\\xf3\\xb0\\xa7\\xb3\\xb0\\x1b\"\n\"\\x0e\\x90\\x16\\xf7\\xed\\xa2\\x06\\x3c\\x8c\\x79\\x93\\xb0\\x1a\\x95\\x8c\\x8e\\x96\\xb4\\x1e\\xf7\\x2e\\xf8\\xc4\\x30\\x75\\x4c\\x7f\\xfb\\x08\\x79\\x19\\x89\"\n\"\\x74\\x05\\x8f\\xa5\\x9c\\x8c\\xa0\\x1b\\xa9\\x9a\\x80\\x75\\x85\\x89\\x82\\x89\\x82\\x1f\\xfb\\x14\\xfc\\x5f\\x05\\x54\\x7a\\x6d\\x78\\x43\\x1b\\x0e\\xf8\\x37\"\n\"\\xf7\\x53\\x15\\x72\\x06\\x66\\x49\\x76\\x7f\\x3a\\x89\\x08\\xfb\\x29\\x06\\xf7\\x58\\xf7\\x3b\\x05\\xea\\xdc\\xbc\\xdc\\xd6\\x1a\\xe9\\x43\\xd5\\x2f\\x56\\x5b\"\n\"\\x77\\x63\\x5f\\x1e\\x6e\\x71\\x7b\\x73\\x6f\\x55\\xa1\\x7f\\x18\\xc6\\xb3\\xb4\\xa6\\xbf\\x1b\\xc6\\xad\\x62\\x46\\x2f\\x4e\\x31\\xfb\\x50\\xfb\\x4f\\x1f\\x31\"\n\"\\x31\\x05\\x73\\xf8\\x03\\x07\\x0e\\xf7\\x14\\xf7\\xef\\x15\\xb5\\x89\\x9e\\x87\\xa3\\x7f\\x08\\xba\\x72\\xa4\\x5b\\x48\\x1a\\x31\\x5a\\x43\\x4e\\x7b\\x7b\\x91\"\n\"\\x93\\x83\\x1e\\x89\\x8d\\x85\\x95\\x7a\\xa3\\x08\\xae\\x74\\x7b\\x96\\x71\\x1b\\x66\\x74\\x75\\x69\\x5a\\xbe\\x6c\\xdd\\xf7\\x35\\xf7\\x15\\xf7\\x09\\xf7\\x26\"\n\"\\xcd\\x77\\xb1\\x52\\xb6\\x1f\\x97\\x91\\x05\\xd3\\xb0\\xae\\xba\\xc7\\x1a\\xd9\\x4b\\xc5\\x36\\x3a\\x4e\\x63\\x2e\\x4d\\x1e\\xa0\\x7e\\x05\\xc4\\xb5\\xa6\\x9d\"\n\"\\xba\\x1b\\xc0\\xad\\x68\\x54\\x3e\\x4f\\x5a\\xfb\\x15\\x70\\x1f\\x0e\\xf8\\x59\\xf7\\x8c\\x15\\x46\\x06\\xf7\\x0b\\xf8\\x47\\x05\\x4c\\x06\\xfc\\x3f\\xfc\\x40\"\n\"\\x6f\\x22\\x05\\xf7\\x88\\x06\\x62\\xfb\\x2a\\x05\\xf7\\x14\\x06\\xb5\\xf7\\x2a\\x05\\xcf\\x06\\xfc\\x09\\xed\\x15\\xf7\\xae\\xf7\\xac\\x3c\\xfb\\xac\\x05\\x0e\"\n\"\\xf7\\x59\\xf8\\xc4\\x15\\xf7\\x92\\x06\\xaf\\xf7\\x01\\x05\\xfb\\xaf\\x06\\xfb\\x17\\xfb\\xbd\\xce\\x88\\xaa\\x84\\xb1\\x77\\x19\\xc9\\x6b\\xaf\\x52\\x4b\\x1a\"\n\"\\x35\\x4c\\x3f\\x44\\x75\\x80\\x94\\xad\\x76\\x1e\\xb3\\x73\\x7a\\x98\\x6d\\x1b\\x68\\x73\\x74\\x69\\x5c\\xbf\\x6b\\xda\\xf7\\x39\\xf7\\x13\\xf7\\x07\\xf7\\x29\"\n\"\\xd8\\x69\\xcc\\x4d\\xb3\\x1f\\x69\\xa2\\x70\\x94\\x2f\\x9e\\x08\\x0e\\xf8\\x8b\\xf9\\x3b\\x15\\xfb\\x1a\\x72\\x4b\\x71\\x3a\\x50\\x08\\xfb\\x12\\x2d\\x40\\xfb\"\n\"\\x1f\\xfb\\x21\\x1a\\xfb\\x18\\xcc\\x3d\\xf7\\x01\\xf7\\x1d\\xf7\\x01\\xf7\\x0a\\xf7\\x28\\xf5\\x52\\xcc\\x2e\\x77\\x7e\\x88\\x81\\x6e\\x1e\\xc9\\xf7\\x0f\\xdc\"\n\"\\xd2\\xf7\\x1b\\xbf\\x08\\xfb\\x96\\xfb\\xa5\\x15\\xba\\xa0\\x76\\x5d\\x4c\\x68\\xfb\\x19\\x6a\\x4c\\x1f\\x73\\x7e\\x75\\x7c\\x71\\x1b\\x66\\x79\\xa4\\xc0\\xc1\"\n\"\\xa0\\xe3\\xac\\xde\\x1f\\xc0\\xa0\\x93\\x94\\xac\\x1b\\x0e\\xde\\xf8\\x73\\x15\\xaf\\xcb\\xa5\\x97\\xf5\\x8c\\x08\\xf7\\x19\\x06\\xfb\\xe0\\xfc\\xc0\\x05\\xe7\"\n\"\\x06\\xf8\\x11\\xf9\\x31\\x05\\xfc\\x11\\x06\\x34\\xfb\\x52\\x05\\x0e\\xf7\\xe1\\xf8\\x11\\x15\\xf3\\xb7\\xb2\\xb7\\xd2\\x1a\\xae\\x7f\\xaa\\x75\\xa1\\x1e\\xad\"\n\"\\x69\\x55\\xa0\\x55\\x1b\\xfb\\x02\\x3a\\x3d\\x21\\x51\\x9d\\x66\\xc3\\x50\\x1f\\x86\\x07\\xfb\\x10\\x5f\\x53\\x51\\x36\\x1a\\x28\\xda\\x48\\xf7\\x07\\xf7\\x14\"\n\"\\xe9\\xe2\\xf7\\x0b\\xcb\\x73\\xbf\\x4d\\xce\\x1e\\xfb\\x10\\x54\\x15\\xe1\\x25\\x96\\x77\\x57\\x1a\\x3f\\x5e\\x55\\x4d\\x4d\\x66\\xba\\xd8\\xd6\\xa9\\xbd\\xda\"\n\"\\xc2\\x1e\\xf0\\xdd\\x15\\x46\\xcc\\x76\\xaf\\xbc\\x1a\\xc3\\xad\\xb4\\xbb\\xbc\\xab\\x61\\x4b\\x58\\x7c\\x6d\\x51\\x4f\\x1e\\x0e\\x85\\x81\\x15\\xf7\\x1b\\xa4\"\n\"\\xcb\\xa4\\xdb\\xc6\\x08\\xf7\\x11\\xe7\\xd8\\xf7\\x23\\xf7\\x22\\x1a\\xcd\\x76\\xc7\\x66\\xb0\\x1e\\xa8\\x6e\\x64\\x9a\\x59\\x1b\\xfb\\x1e\\xfb\\x00\\xfb\\x0b\"\n\"\\xfb\\x2c\\x27\\xc8\\x48\\xe5\\xa1\\x98\\x8e\\x96\\xa5\\x1f\\x4e\\xfb\\x11\\x2d\\x39\\xfb\\x0e\\x66\\x08\\xf7\\xda\\xf9\\x10\\x15\\xac\\x9b\\x74\\x5d\\x75\\x87\"\n\"\\x67\\x85\\x6a\\x1f\\x83\\x62\\x8b\\x8b\\x72\\x42\\x08\\x3c\\x70\\x83\\x81\\x61\\x1b\\x60\\x74\\xa2\\xb4\\xcb\\xa7\\xf7\\x04\\xa9\\xc8\\x1f\\xb4\\xa0\\xa6\\xa0\"\n\"\\xaa\\x1b\\x0e\\xfb\\xd4\\xed\\xf7\\x1b\\x15\\x28\\x0a\\xe8\\xf7\\xd8\\x15\\x28\\x0a\\x0e\\xfb\\xd4\\x7f\\xfb\\x4b\\x44\\x0a\\x64\\x3c\\x61\\x1e\\xf7\\x6c\\xf8\"\n\"\\xfe\\x2b\\x0a\\x38\\xf8\\xbd\\xf8\\xed\\x15\\xfc\\x85\\xfb\\xa4\\x86\\x78\\xf7\\xf0\\xfb\\xb0\\xad\\xf7\\x16\\xfb\\x7f\\xf7\\x54\\xf7\\xe5\\xf7\\x4e\\x05\\x0e\"\n\"\\x38\\xf8\\xad\\xf8\\x23\\x15\\xfc\\x8c\\x33\\xf8\\x8c\\x06\\xfb\\x08\\x04\\xfc\\x8c\\x33\\xf8\\x8c\\x06\\x0e\\x38\\x94\\xa5\\x15\\xf8\\x84\\xf7\\xa4\\x91\\x9f\"\n\"\\xfb\\xf0\\xf7\\xaf\\x68\\xfb\\x16\\xf7\\x80\\xfb\\x53\\xfb\\xe5\\xfb\\x4f\\x05\\x0e\\xf7\\x58\\xf7\\x64\\x15\\xa7\\xd1\\x9b\\xa2\\xb1\\xa4\\xcd\\xb6\\x18\\xe5\"\n\"\\xc5\\xaf\\xbd\\xca\\x1a\\xe1\\x45\\xc5\\x21\\x26\\x41\\x55\\x40\\x65\\xa5\\x6e\\xae\\xad\\xa6\\xa6\\xac\\x9a\\x86\\x98\\x7e\\x9c\\x1e\\x83\\x95\\x88\\x91\\x91\"\n\"\\x1a\\x9f\\xa9\\x9d\\xab\\xb6\\xa5\\x6d\\x5a\\x5b\\x77\\x5d\\x5f\\x54\\x1e\\x62\\x58\\x5d\\x51\\x76\\x5d\\x87\\x54\\x19\\x7e\\x3b\\x2b\\x0a\\xf7\\x47\\xf8\\xb5\"\n\"\\xf8\\x63\\x15\\xb5\\x75\\x7d\\x95\\x67\\x1b\\x60\\x60\\x78\\x6a\\x6b\\x1f\\x58\\x55\\x6b\\x3c\\x42\\x1a\\x4b\\xb4\\x59\\xbf\\xb6\\xba\\xa7\\xb9\\xae\\x1e\\x62\"\n\"\\x8d\\xb5\\x69\\xbc\\x1b\\xf0\\xe1\\xf7\\x05\\xf7\\x18\\xf7\\x3c\\xfb\\x25\\xf7\\x16\\xfb\\x51\\xfb\\x64\\xfb\\x39\\xfb\\x32\\xfb\\x5b\\xfb\\x57\\xf7\\x38\\xfb\"\n\"\\x2b\\xf7\\x68\\xd4\\xbe\\x99\\xb8\\xec\\x1f\\x7e\\xae\\x05\\x67\\x3d\\x59\\x7f\\x45\\x1b\\xfb\\x40\\xfb\\x0f\\xf7\\x0f\\xf7\\x3f\\xf7\\x51\\xf7\\x0a\\xf7\\x1b\"\n\"\\xf7\\x39\\xf7\\x31\\xf7\\x16\\xfb\\x0d\\xfb\\x26\\x59\\x79\\x50\\x6e\\x63\\x1f\\x69\\x74\\x70\\x7a\\x6d\\x1b\\x73\\x7e\\x9b\\xa8\\x94\\x8b\\x90\\x8d\\x91\\x1f\"\n\"\\xcc\\xf7\\x95\\x05\\x44\\x06\\x45\\x69\\x15\\xa8\\x89\\x9a\\x74\\x89\\x63\\x89\\x5f\\x7b\\x50\\x75\\x61\\x08\\x61\\x75\\x6d\\x72\\x6e\\x1b\\x67\\x74\\xac\\xbf\"\n\"\\xc0\\x9e\\xbf\\xab\\xb0\\x1f\\xa7\\xab\\xad\\x9f\\xa4\\x89\\x08\\x0e\\x99\\x27\\x1d\\x0e\\x99\\xf7\\x08\\xf9\\x18\\x15\\xaf\\x89\\x94\\x89\\x97\\x84\\x08\\x94\"\n\"\\x86\\x92\\x7e\\x7f\\x1a\\x81\\x87\\x75\\x84\\x72\\x1e\\xfb\\x0e\\xfc\\x55\\x7b\\x58\\x7b\\x7c\\x5b\\x85\\x19\\x72\\xf7\\xc1\\x07\\xf7\\x4b\\xf7\\x04\\xd9\\xf7\"\n\"\\x13\\xda\\x68\\xb1\\x25\\xac\\x1f\\xd7\\x9e\\xaa\\x99\\xae\\xa8\\x08\\xa9\\xa4\\x9c\\xb3\\xb4\\x1a\\xeb\\x3a\\xbd\\xfb\\x2f\\x1e\\xfb\\xa4\\x06\\xf7\\x2d\\xfb\"\n\"\\xdf\\x15\\xcd\\x89\\xa9\\x85\\x9f\\x7a\\x08\\xa2\\x78\\x96\\x6f\\x66\\x1a\\x50\\x74\\x4d\\x67\\x67\\x1e\\x70\\x70\\x69\\x7e\\x5f\\x1b\\x64\\x79\\x95\\xa2\\x93\"\n\"\\x8c\\x92\\x8f\\x99\\x1f\\xf7\\x1b\\xf8\\x87\\x15\\xaf\\x95\\x95\\x93\\xab\\x1b\\xc5\\xa8\\x69\\x46\\x4c\\x76\\x5c\\x63\\x71\\x1f\\x6c\\x77\\x69\\x84\\x41\\x88\"\n\"\\x08\\x0e\\x99\\x33\\x1d\\x0e\\xd0\\x65\\x0a\\x0e\\x99\\x24\\x1d\\x0e\\x99\\xf8\\x97\\xf8\\x6c\\x15\\x6f\\x8f\\x5c\\x2d\\x77\\x80\\xfb\\x17\\x8a\\x19\\xc8\\xf7\"\n\"\\x73\\xb1\\x0a\\x74\\x91\\x70\\x53\\x1a\\xa6\\x86\\xb6\\xf7\\x52\\x05\\xfc\\xa9\\x72\\x06\\x9f\\x1d\\xf7\\xbb\\xa4\\x07\\x53\\x8f\\x7c\\x94\\xaa\\x1a\\x97\\x8e\"\n\"\\x9a\\x93\\xa5\\x1e\\x8d\\x92\\x8c\\x90\\x8c\\x8e\\xc1\\xf7\\x5d\\x18\\xf6\\x89\\xa9\\x77\\x47\\x1a\\x7d\\x8a\\x80\\x88\\x78\\x1e\\xa7\\x86\\x05\\x0e\\xd0\\x35\"\n\"\\x0a\\x0e\\xf7\\x11\\xf9\\x25\\xd5\\x1d\\x92\\x8c\\x90\\x8e\\x95\\xf7\\x01\\xf8\\x21\\x18\\x9b\\xc0\\x99\\x97\\xbe\\x92\\x08\\x56\\x1d\\x5c\\xfb\\x41\\x05\\xfb\"\n\"\\x83\\x06\\xc1\\xf7\\x5b\\xab\\x1d\\x86\\x91\\x87\\x5c\\x1d\\x78\\x84\\x70\\x1e\\xfb\\x0e\\xfc\\x55\\x4f\\x1d\\x07\\x0e\\xfb\\x9c\\x27\\x0a\\x0e\\xf8\\xa0\\x6a\"\n\"\\x0a\\xc0\\x9a\\x98\\xbc\\x91\\x19\\x0e\\x99\\x58\\x0a\\x0e\\x61\\x2f\\x0a\\x0e\\xf7\\x80\\xfa\\x29\\xf9\\x31\\x15\\xfb\\x68\\x06\\xfb\\xca\\xfc\\x74\\x55\\xf8\"\n\"\\x74\\x05\\xfb\\x71\\x72\\x06\\xca\\x88\\x94\\x87\\x6f\\x1a\\x7d\\x87\\x79\\x84\\x71\\x1e\\xfb\\x01\\xfc\\x09\\x63\\xfb\\x16\\x84\\x80\\x55\\x7f\\x19\\x72\\xf7\"\n\"\\x63\\xa4\\x07\\x4b\\x93\\x7b\\x97\\xb4\\x1a\\x9c\\x90\\xa4\\x99\\xbd\\x1e\\xf0\\xf8\\x05\\xce\\xfc\\xc3\\x05\\xa7\\x06\\xf8\\x0b\\xf8\\xd1\\xfb\\x11\\xfc\\x64\"\n\"\\x7b\\x55\\x78\\x7d\\x4a\\x87\\x19\\x72\\xf7\\xcc\\xa4\\x07\\x51\\x8e\\x7d\\x93\\xab\\x1a\\x96\\x8d\\x96\\x91\\xa2\\x1e\\x8c\\x90\\x8c\\x90\\xf7\\x0f\\xf8\\x55\"\n\"\\x9a\\xbf\\x9a\\x99\\xbe\\x91\\x19\\x0e\\xd0\\x2e\\x0a\\x0e\\xd0\\x26\\x1d\\x0e\\x61\\xf7\\x05\\x73\\x1d\\x0e\\xd0\\xf9\\x0e\\x63\\x15\\x4f\\x51\\x67\\x79\\x4e\"\n\"\\x1b\\x70\\x77\\x8f\\x96\\x67\\x1f\\x61\\x98\\x72\\x93\\x63\\x92\\x5e\\x8e\\x19\\x6c\\x8d\\x84\\x8d\\x8f\\x1a\\x8b\\x8c\\x8d\\x8c\\x8c\\x1e\\x92\\x92\\x95\\x96\"\n\"\\x95\\x95\\x9c\\x9b\\x19\\xf7\\x16\\x93\\xc2\\x9f\\xd8\\xd0\\x08\\xf7\\x02\\xee\\xce\\xf7\\x20\\xf7\\x19\\x1a\\xf7\\x1b\\x25\\xed\\xfb\\x20\\xfb\\x6c\\xfb\\x62\"\n\"\\xfb\\x7b\\xfb\\x86\\x49\\xa4\\x4f\\xb8\\x61\\x1e\\xa5\\x72\\x98\\x84\\xc0\\x78\\x93\\x88\\x8e\\x89\\x8e\\x87\\x89\\x88\\x8a\\x89\\x89\\x89\\x8a\\x8a\\x86\\x87\"\n\"\\x83\\x84\\xfb\\x30\\xfb\\x16\\x18\\x99\\x73\\x05\\xa1\\xc3\\xa5\\x91\\xab\\x1b\\xa8\\xa2\\x86\\x7b\\xbf\\x1f\\x77\\xc9\\xac\\x85\\xb4\\x1b\\xf7\\x01\\xd0\\xb2\"\n\"\\xf7\\x02\\xdc\\x1f\\xfb\\x65\\xf9\\x5a\\x15\\xc7\\xb4\\x5b\\x44\\xfb\\x0d\\x4e\\xfb\\x5b\\x47\\x29\\x1f\\x48\\x5d\\x5e\\x6d\\x55\\x1b\\x4c\\x64\\xb9\\xd4\\xf2\"\n\"\\xbe\\xf7\\x4c\\xc2\\xec\\x1f\\xe5\\xbe\\xc0\\xb4\\xcc\\x1b\\x0e\\x99\\x3b\\x1d\\x0e\\x2a\\x36\\x0a\\x0e\\x61\\x43\\x0a\\x0e\\xd0\\x21\\x0a\\x0e\\x99\\xf9\\x5f\"\n\"\\xf9\\x31\\x15\\xfb\\x54\\x72\\x06\\xb8\\x87\\x8b\\x8b\\x94\\x85\\x08\\x92\\x87\\x8f\\x82\\x82\\x1a\\x74\\x77\\x60\\x64\\x4d\\x1e\\xfb\\x52\\xfb\\xc2\\x58\\xf8\"\n\"\\x25\\x05\\x8a\\x91\\x8b\\x8f\\x91\\x1a\\xad\\x93\\x90\\xcf\\x91\\x1e\\xa4\\xfb\\xbe\\x72\\x07\\xc9\\x91\\x81\\xfb\\x23\\xa1\\x1f\\xd7\\xfc\\x91\\x05\\xab\\x06\"\n\"\\xf8\\x1d\\xf9\\x02\\x98\\x9e\\x9d\\x97\\xa7\\x94\\x19\\x0e\\xf7\\x80\\x2c\\x0a\\x0e\\x99\\xf8\\xde\\xa4\\x15\\x43\\x93\\x7c\\x99\\x6e\\xe9\\x41\\xf7\\x81\\x18\"\n\"\\xf7\\x5b\\xf7\\x61\\xb7\\xb7\\x9f\\x97\\xae\\x90\\x19\\xa4\\xfb\\x5f\\x72\\x07\\xa5\\x88\\x9b\\x88\\x90\\x88\\x08\\x90\\x88\\x8e\\x84\\x84\\x1a\\x79\\x78\\x71\"\n\"\\x58\\x55\\x1e\\x2d\\x28\\x81\\xac\\x88\\x97\\x87\\x95\\x19\\x74\\xd3\\x80\\xb5\\x9a\\x1a\\xa2\\x96\\x94\\xac\\x8f\\x1e\\x8f\\x97\\x8c\\x8d\\x99\\x1f\\xa4\\xfb\"\n\"\\xc5\\x72\\x07\\xc7\\x85\\x9b\\x80\\x9a\\x5d\\xdf\\xfb\\xa4\\x18\\x71\\x6f\\x86\\x86\\x66\\x62\\xfb\\x32\\xfb\\x42\\x6c\\x6f\\x61\\x83\\x08\\x72\\xf7\\x6a\\xa4\"\n\"\\x07\\x5e\\x8f\\x77\\x98\\xa2\\x1a\\x98\\x93\\x98\\xa1\\xa4\\x1e\\xf7\\x1a\\xf7\\x28\\x8f\\x7c\\x8d\\x84\\x98\\x65\\x19\\xa6\\x3e\\x96\\x61\\x75\\x1a\\x71\\x7d\"\n\"\\x84\\x55\\x86\\x1e\\x72\\xf7\\xc8\\x07\\x0e\\x61\\x2d\\x0a\\x0e\\x61\\x3f\\x1d\\x0e\\xfb\\xd4\\xf7\\xf7\\xf9\\x13\\x15\\x92\\xae\\x05\\xfb\\x5c\\x06\\xfb\\x5b\"\n\"\\xfd\\xd5\\x05\\xf7\\x6f\\x06\\x92\\xae\\x05\\x3d\\x06\\x73\\x81\\x92\\x9c\\x8a\\x1f\\xf7\\x32\\xf9\\x38\\x9a\\xc9\\x8b\\x8b\\xb0\\x8c\\x19\\x0e\\xfc\\x0b\\x8a\"\n\"\\xf9\\x41\\x15\\xf7\\x58\\xfd\\x53\\x05\\xdf\\x06\\xfb\\x57\\xf9\\x53\\x05\\x0e\\xfb\\xd4\\x5a\\xfb\\x0e\\x15\\x84\\x68\\x05\\xf7\\x5b\\x06\\xf7\\x5c\\xf9\\xd3\"\n\"\\x05\\xfb\\x70\\x06\\x84\\x68\\x05\\xd9\\x06\\xa3\\x95\\x84\\x7b\\x8c\\x1f\\xfb\\x32\\xfd\\x39\\x7c\\x4f\\x8b\\x8b\\x66\\x8a\\x19\\x0e\\x38\\xf7\\x4d\\xf7\\xc7\"\n\"\\x15\\xf7\\x15\\xf7\\xa7\\xf7\\x18\\xfb\\xa7\\x05\\xe5\\x06\\xfb\\x4a\\xf8\\x05\\x05\\x3a\\x06\\xfb\\x46\\xfc\\x05\\x05\\x0e\\xf8\\x6c\\xfb\\x23\\x15\\xd0\\xfc\"\n\"\\x85\\x46\\x07\\x0e\\xfb\\xd4\\xf7\\xd3\\x80\\x0a\\x0e\\x25\\x1d\\x0e\\xd7\\xf9\\x16\\x15\\xbc\\x99\\x84\\x74\\x7e\\x7e\\x58\\x71\\x2e\\x1f\\x2d\\xfb\\xdb\\x05\"\n\"\\x81\\x67\\x81\\x63\\x86\\x1a\\x6f\\xd3\\x6b\\xcd\\xf7\\x37\\xf7\\x31\\xf7\\x40\\xf7\\x47\\xd4\\x5d\\xbe\\x49\\x58\\x67\\x74\\x47\\x58\\x1e\\xe5\\xf7\\xdc\\x44\"\n\"\\x7e\\x59\\x83\\x34\\x82\\x19\\xf7\\x5b\\xfb\\xa7\\x15\\xa8\\x9a\\x74\\x5d\\x50\\x70\\x2e\\x67\\x4d\\x1f\\x4e\\x69\\x64\\x6d\\x60\\x1b\\x79\\x7e\\x96\\x9b\\x96\"\n\"\\x9b\\xd4\\x96\\xb2\\x1f\\x97\\xb7\\x9f\\xc4\\x9b\\xaf\\x08\\xc4\\xa5\\xaa\\xa9\\xad\\x1b\\x0e\\xfb\\x65\\x3e\\x1d\\x0e\\x59\\x0a\\x0e\\xfb\\x65\\x22\\x0a\\x0e\"\n\"\\xfb\\xd4\\xf7\\xdc\\xf8\\x55\\x15\\x2f\\x06\\x46\\x1d\\xa9\\xa0\\xa1\\xaa\\xbc\\x65\\xaa\\x4e\\x57\\x5a\\x75\\x64\\x68\\x1e\\x61\\x5d\\x78\\x62\\x6e\\x26\\x08\"\n\"\\x42\\x06\\x82\\x61\\x05\\xd4\\x06\\x5b\\xfb\\x66\\x68\\xfb\\x32\\x86\\x73\\x42\\x1d\\xb5\\xb0\\x99\\xa8\\xaa\\x1e\\xb3\\xaf\\xa6\\xc0\\xac\\xf2\\xa3\\xda\\x96\"\n\"\\xb9\\xc1\\xf7\\x90\\x08\\xe5\\x06\\x0e\\x3f\\x0a\\x0e\\x2a\\xf8\\x70\\xf7\\x22\\x15\\x4d\\x60\\x78\\x76\\x5a\\x0a\\xfc\\x0b\\x2c\\x1d\\x5f\\xf8\\xc1\\x57\\x1d\"\n\"\\xfc\\x0b\\xaa\\xf8\\x2b\\x15\\xbe\\x96\\x86\\x71\\x7e\\x87\\x74\\x83\\x6d\\x1f\\x2f\\xfb\\xf7\\x81\\x0a\\xca\\xef\\xd0\\xd7\\xf7\\x2f\\xb3\\x1e\\xf7\\x06\\xf8\"\n\"\\x4a\\x4f\\x7e\\x65\\x86\\xfb\\x02\\x81\\x19\\xf7\\x47\\xf7\\x8e\\x57\\x1d\\x75\\x1d\\x0e\\xfc\\x0b\\x41\\x0a\\x0e\\xf7\\x11\\xad\\xf8\\x2b\\x15\\x93\\x06\\xa7\"\n\"\\x8c\\x9d\\x81\\x7a\\x1a\\x7d\\x83\\x6c\\x70\\x29\\x1e\\x48\\xfb\\x82\\x05\\xf7\\x0d\\x06\\xc0\\xf7\\x52\\xb1\\xe1\\xc3\\xce\\x08\\xa5\\xa2\\xa7\\x9f\\x99\\x1b\"\n\"\\x95\\x93\\x81\\x7e\\x7b\\x7f\\x60\\x6a\\x27\\x1f\\x4a\\xfb\\x63\\x05\\xf7\\x0c\\x06\\xc5\\xf7\\x52\\x92\\x9f\\xaf\\xca\\x08\\xd5\\xb5\\xb3\\xb5\\xa9\\x1b\\x97\"\n\"\\x96\\x81\\x80\\x85\\x88\\x80\\x87\\x7e\\x1f\\x5e\\xfb\\x17\\x05\\x76\\x4c\\x7c\\x4d\\x6f\\x1a\\x62\\xa3\\x75\\xb6\\xc9\\xb3\\xac\\xed\\xc5\\x1e\\x75\\x98\\x79\"\n\"\\x70\\x81\\x7d\\x8a\\x8a\\x19\\x72\\x78\\x80\\x82\\x81\\x1b\\x82\\x84\\x91\\x93\\x96\\x8b\\x8b\\xa0\\xce\\x1f\\xb8\\xf7\\x19\\x05\\x9a\\xb6\\x93\\xb1\\xa5\\x1a\"\n\"\\xb4\\x6a\\xa9\\x5f\\x47\\x5c\\x62\\xfb\\x16\\x38\\x1e\\x9f\\xbe\\x91\\xa3\\xa7\\x1a\\xb6\\x72\\xa4\\x61\\x6f\\x6d\\x80\\x74\\x6f\\x1e\\x66\\x70\\x6d\\x64\\x4a\"\n\"\\x27\\xcb\\xf7\\x5b\\x18\\x4e\\x7d\\x71\\x87\\xfb\\x05\\x82\\x08\\x0e\\x2a\\x30\\x1d\\x0e\\x23\\x0a\\x0e\\xa2\\xf8\\x2b\\x15\\xb8\\x89\\x94\\x87\\x78\\x1a\\x82\"\n\"\\x83\\x66\\x7d\\x57\\x1e\\x27\\xfc\\x18\\x78\\x49\\x83\\x82\\x5b\\x8c\\x19\\x70\\xf7\\x8d\\xa6\\x07\\x59\\x8c\\x7c\\x92\\xa3\\x1a\\x98\\x92\\xab\\x9e\\xd0\\x1e\"\n\"\\x92\\xa3\\x8b\\x8d\\x8f\\x9a\\x08\\x79\\xae\\x97\\x87\\xa0\\x1b\\xf7\\x1c\\xf7\\x21\\xf7\\x48\\xf7\\x42\\xd5\\x61\\xba\\x49\\x52\\x5f\\x6b\\x38\\x50\\x1f\\xb1\"\n\"\\xf7\\x07\\x25\\x7b\\x64\\x85\\x57\\x85\\x19\\xf7\\x97\\x60\\x15\\xa5\\x89\\x9a\\x75\\x89\\x6a\\x87\\x4a\\x6b\\x27\\x67\\x4a\\x08\\x55\\x6c\\x6b\\x6f\\x69\\x1b\"\n\"\\x75\\x7a\\x9b\\x9f\\x9b\\x93\\xad\\xa5\\xe2\\x1f\\xa3\\xdc\\x96\\xa8\\x9b\\xa3\\xa4\\xb2\\xac\\xa4\\xa5\\x89\\x08\\x0e\\xf8\\x07\\xfb\\x46\\x15\\x7d\\x06\\x67\"\n\"\\x7c\\x93\\x9f\\x9d\\xb0\\xf7\\x1d\\xb6\\xf7\\x20\\x1f\\xa2\\xd6\\x9e\\xd1\\xb6\\xf7\\x33\\x08\\xfb\\x01\\x06\\x7c\\x50\\x86\\xa7\\x88\\x96\\x82\\x96\\x19\\x99\"\n\"\\x81\\x76\\x93\\x74\\x1b\\x3f\\x33\\x48\\x24\\x50\\x1f\\x68\\x4e\\x7a\\x50\\x54\\x1a\\x3a\\xb2\\x5a\\xcc\\xc7\\xb3\\xa8\\xdd\\xbf\\x1e\\x4c\\xfb\\x69\\x7a\\x57\"\n\"\\x80\\x83\\x4d\\x88\\x19\\x70\\xf7\\x9f\\x07\\x3a\\xf9\\x04\\x15\\xa1\\x8a\\x98\\x78\\x6f\\x1a\\x56\\x66\\xfb\\x0f\\x68\\x4d\\x1e\\x59\\x6e\\x6f\\x73\\x6c\\x1b\"\n\"\\x71\\x7e\\x9e\\xb1\\xc3\\xa7\\xe5\\xb4\\xd3\\x1f\\xab\\xc3\\xae\\xaa\\xa7\\x89\\x08\\x0e\\xfb\\x9c\\x40\\x0a\\x0e\\xfb\\x9c\\x3d\\x1d\\x0e\\xfc\\x0b\\xf7\\xad\"\n\"\\xf8\\x55\\x15\\x43\\x83\\x1d\\x2a\\x26\\x0a\\x0e\\xfb\\x65\\x9b\\xf8\\x2b\\x15\\xaa\\x94\\x88\\x7e\\x92\\x1f\\x9b\\x6b\\x96\\x34\\xfb\\x00\\x1a\\x87\\x8b\\x7a\"\n\"\\x8a\\x77\\x1e\\x87\\xfb\\x1c\\x05\\xa5\\x06\\xf7\\x13\\xf7\\x0d\\xba\\xc0\\xc2\\xdc\\x08\\xb3\\xc4\\xa0\\xc1\\xb5\\x1a\\xae\\x6e\\xab\\x6b\\x6d\\x71\\x70\\x6c\"\n\"\\x7a\\x91\\x7d\\x9d\\x77\\x1e\\x9a\\x7b\\x90\\x81\\x80\\x1a\\x68\\x70\\x63\\x28\\xfb\\x05\\x1e\\x87\\xf7\\x58\\x85\\xc5\\x76\\xdb\\x59\\x7f\\x74\\x87\\x39\\x7f\"\n\"\\x08\\x0e\\x99\\x32\\x1d\\x0e\\xf8\\x24\\xf7\\x0f\\x15\\x59\\x64\\x81\\x82\\x79\\x1b\\x78\\x81\\x99\\xb2\\x83\\x1f\\x6b\\xf7\\x30\\x8e\\x8f\\x8c\\x8d\\x90\\x92\"\n\"\\x19\\xc5\\xae\\xa4\\xa3\\xa2\\x1b\\x91\\x92\\x88\\x85\\x97\\x1f\\x82\\x99\\x92\\x89\\x96\\x1b\\xa9\\xa5\\xa3\\xa8\\xab\\x70\\xa8\\x6c\\x5c\\x6c\\x70\\xfb\\x03\"\n\"\\x3b\\x1f\\x79\\xe2\\x83\\xa3\\x78\\xa6\\xfb\\x3b\\x73\\x18\\x70\\x07\\x8d\\x9d\\x92\\x8b\\x95\\x1b\\xab\\x99\\x79\\x5a\\x95\\x1f\\xa9\\xfb\\x2e\\x5f\\x45\\x05\"\n\"\\x6a\\x77\\x81\\x83\\x79\\x1b\\x85\\x86\\x8d\\x91\\x81\\x1f\\x94\\x7b\\x80\\x8f\\x7e\\x1b\\x6c\\x73\\x73\\x6b\\x68\\xa5\\x73\\xb1\\xbd\\xa1\\x9f\\xeb\\xc6\\x1f\"\n\"\\xa3\\xb2\\x05\\xfb\\x07\\xa1\\xa4\\x63\\xbd\\x1b\\xbb\\xb5\\xad\\xe3\\xc8\\x1f\\x0e\\xfb\\x65\\x31\\x1d\\x0e\\xfb\\x9c\\x34\\x1d\\x0e\\xfb\\xc5\\xf8\\x48\\xf9\"\n\"\\x42\\x15\\xfb\\x33\\x51\\x6a\\xfb\\x01\\x6c\\x1f\\x5d\\xfb\\x47\\x77\\x43\\x6f\\x73\\x32\\x77\\x19\\xc9\\x7b\\xa1\\x78\\x68\\x1a\\x73\\x81\\x5f\\x7b\\x5b\\x1e\"\n\"\\x78\\x53\\x7b\\x42\\x6d\\x1a\\x71\\x93\\x78\\x9c\\x7c\\x1e\\xa4\\x76\\xb2\\x83\\xe8\\x89\\x8e\\x97\\x18\\x50\\x96\\x75\\xa0\\xb9\\x1a\\xa5\\x96\\xbd\\x9e\\xcb\"\n\"\\x1e\\x9e\\xc7\\x95\\xba\\xa2\\x1a\\xb5\\x79\\x99\\x41\\x9f\\x1e\\xed\\x9e\\xa9\\xa5\\xa2\\xe0\\xb8\\xf7\\x3f\\x18\\x9f\\xd7\\xaf\\xac\\xdd\\x9a\\x08\\x0e\\xfc\"\n\"\\x45\\xcd\\xfb\\x8e\\x15\\xe3\\xfa\\x7a\\x33\\x06\\x0e\\xfb\\xc5\\xfb\\x15\\xfb\\x4f\\x15\\xf7\\x33\\xc5\\xac\\xf7\\x01\\xaa\\x1f\\xb9\\xf7\\x47\\x9f\\xd3\\xa7\"\n\"\\xa4\\xe4\\x9e\\x19\\x4e\\x9b\\x74\\x9e\\xae\\x1a\\xa3\\x95\\xb7\\x9b\\xbb\\x1e\\x9e\\xc4\\x9b\\xd5\\xaa\\x1a\\xa2\\x83\\x9e\\x7a\\x9a\\x1e\\x72\\xa0\\x64\\x93\"\n\"\\x2e\\x8d\\x88\\x7f\\x18\\xc5\\x81\\xa2\\x74\\x5f\\x1a\\x71\\x81\\x5e\\x76\\x45\\x1e\\x78\\x49\\x82\\x62\\x74\\x1a\\x61\\x9c\\x7d\\xd6\\x77\\x1e\\x29\\x78\\x6d\"\n\"\\x71\\x74\\x36\\x5e\\xfb\\x3f\\x18\\x77\\x3f\\x67\\x6a\\x39\\x7c\\x08\\x0e\\x38\\xf8\\x63\\xf7\\xce\\x15\\x6a\\x72\\x78\\x7f\\x74\\x1b\\x78\\x7c\\x90\\xa1\\x5a\"\n\"\\x1f\\xad\\x3c\\x75\\x92\\x66\\x1b\\x58\\x65\\x71\\x51\\x6a\\x1f\\xc1\\x5c\\x05\\xab\\xa3\\x9b\\x95\\xa9\\x1b\\xae\\xaa\\x81\\x72\\xba\\x1f\\x72\\xba\\xa4\\x83\"\n\"\\xad\\x1b\\xba\\xa9\\xa0\\xcb\\xba\\x1f\\x0e\\xfb\\x9c\\xf7\\x55\\xf7\\xa7\\x15\\x60\\xfb\\x02\\x60\\x2b\\x52\\xfb\\x04\\x08\\x71\\x5c\\x86\\x7c\\x71\\x1a\\x5e\"\n\"\\xa6\\x6e\\xb5\\xaa\\xa3\\x9c\\xa8\\x99\\x1e\\x93\\x9d\\x8d\\x98\\x8d\\xb4\\x8f\\xd7\\x9e\\xf7\\x11\\xa9\\xf7\\x2d\\x08\\xa6\\xf7\\x75\\x15\\x61\\x6a\\x6c\\x64\"\n\"\\x64\\xae\\x68\\xb2\\xb5\\xab\\xab\\xb5\\xb3\\x6c\\xa9\\x61\\x1f\\x0e\\xf8\\x43\\xf8\\xd4\\x15\\x68\\x06\\x62\\xfb\\x09\\x05\\x8d\\x7f\\x84\\x8c\\x82\\x1b\\xfb\"\n\"\\x22\\xfb\\x23\\xfb\\x36\\xfb\\x36\\x31\\xc1\\x54\\xe9\\x85\\x1f\\x5d\\xfb\\x16\\x05\\xad\\x06\\xba\\xf7\\x19\\xce\\x98\\xb0\\xa9\\xca\\xe5\\x19\\x70\\x9d\\x62\"\n\"\\x4f\\x68\\x70\\x61\\x89\\x19\\xe7\\xf7\\x99\\x05\\x83\\x95\\x96\\x88\\x99\\x1b\\xb0\\xa7\\xa8\\xb2\\xad\\x7b\\xa4\\x66\\x9f\\x1f\\xfb\\x40\\xfc\\x1c\\x15\\x77\"\n\"\\x96\\x84\\x93\\x84\\x9b\\x08\\x84\\x9b\\x87\\xa0\\x9d\\x1a\\xc5\\xa5\\xe2\\xaf\\xcb\\x1e\\xbd\\xa7\\xa6\\xa2\\xaa\\x1b\\x98\\x97\\x83\\x83\\x88\\x1f\\x0e\\xf8\"\n\"\\x1e\\xf8\\x06\\x15\\xfb\\x06\\x06\\xb2\\xf7\\x5e\\x05\\xbd\\x95\\xa0\\xa6\\xa8\\x1b\\x99\\x95\\x82\\x7f\\x86\\x8a\\x84\\x89\\x84\\x1f\\x89\\x7f\\x89\\x7f\\x81\"\n\"\\x1a\\x6e\\xa2\\x75\\xa9\\xae\\xa5\\xa8\\xb2\\xbf\\x5d\\xb2\\x4c\\x52\\x55\\x70\\x5a\\x61\\x1e\\x5a\\x54\\x73\\x51\\x72\\xfb\\x10\\x08\\x22\\x06\\x81\\x4f\\x05\"\n\"\\xf7\\x01\\x06\\x81\\x37\\x89\\x80\\x84\\x48\\x08\\x96\\x71\\x7d\\x8e\\x76\\x1b\\x52\\x64\\x68\\x57\\x58\\xb0\\x68\\xc0\\xb6\\xa7\\x9c\\xb6\\xa6\\x1f\\x5e\\xbe\"\n\"\\xad\\x7b\\xb5\\x1b\\xb5\\xb3\\x9f\\xae\\xa4\\x1f\\xa0\\xa7\\x96\\xa6\\x97\\xc4\\x08\\x72\\x06\\x5a\\x75\\x77\\x7d\\x5b\\x1b\\x6a\\x6a\\x94\\xa2\\x50\\x1f\\x96\"\n\"\\x9c\\xa5\\xb6\\xa4\\xcf\\x98\\xc5\\x19\\xf7\\x07\\x06\\xfb\\xa3\\xfb\\x70\\x15\\x5a\\x80\\x79\\x75\\x6d\\x1b\\x6a\\x74\\xa0\\xa9\\xa9\\x9f\\x9f\\xaa\\xa1\\x9d\"\n\"\\x83\\x75\\xa3\\x1f\\x0e\\xfc\\x7a\\xcf\\x1d\\xf8\\x8c\\xf7\\xea\\x15\\xfb\\x1b\\x06\\xf7\\x3a\\xf7\\x7d\\xad\\xb9\\x9e\\x9a\\xb3\\x93\\x19\\xa4\\xfb\\x5c\\x72\"\n\"\\x07\\xc2\\x89\\x9a\\x82\\x68\\x1a\\x79\\x85\\x7e\\x77\\x6e\\x1e\\xfb\\x1b\\xfb\\x56\\x3b\\xf7\\x80\\x05\\x87\\x97\\x89\\x96\\x94\\x1a\\xa2\\x9d\\x92\\xc4\\x8d\"\n\"\\x1e\\xa4\\xfb\\xac\\x72\\x07\\xc2\\x85\\x92\\x85\\x9f\\x58\\xda\\xfb\\x83\\x18\\xfb\\x11\\x06\\x7d\\x59\\x05\\xf7\\x22\\x06\\x75\\x3d\\x05\\xfb\\x21\\x06\\x7d\"\n\"\\x59\\x05\\xf7\\x21\\x06\\x78\\x48\\x79\\x52\\x7d\\x81\\x3e\\x86\\x19\\x72\\xf7\\xd6\\xa4\\x07\\x48\\x8e\\x7d\\x92\\xac\\x1a\\x9e\\x8f\\xa1\\x97\\xb7\\x1e\\x8e\"\n\"\\x96\\x05\\xf7\\x2c\\x06\\x99\\xbd\\x05\\xfb\\x2c\\x06\\xa0\\xd9\\x05\\xf7\\x2a\\x06\\x0e\\xf8\\x4f\\xf8\\x4c\\x15\\xfb\\x0a\\x06\\xa1\\xf7\\x16\\x94\\xb1\\x9d\"\n\"\\xab\\x08\\xa3\\x99\\x9e\\x98\\xa0\\x1b\\x9a\\x95\\x85\\x82\\x87\\x88\\x88\\x85\\x85\\x1f\\x7d\\x7e\\x85\\x80\\x7b\\x1a\\x6d\\xa0\\x77\\xab\\xaf\\xa3\\xa3\\xb0\"\n\"\\xbd\\x5c\\xb0\\x4c\\xfb\\x02\\x34\\x28\\xfb\\x3c\\x66\\x1e\\x20\\x06\\x83\\x5f\\x05\\xf4\\x06\\x45\\xfc\\x00\\x7e\\x49\\x74\\x4f\\x77\\x77\\x19\\x82\\x81\\x81\"\n\"\\x87\\x7a\\x1b\\x7a\\x83\\x8f\\x94\\x90\\x8d\\x8f\\x93\\x93\\x1f\\x97\\x99\\x91\\x97\\x97\\x1a\\xa7\\x74\\xa1\\x6d\\x6a\\x73\\x72\\x68\\x57\\xb7\\x68\\xcd\\xf7\"\n\"\\x1a\\xe2\\xf7\\x15\\xf7\\xa1\\xba\\x1e\\xa6\\xf7\\x2e\\x05\\xf7\\x08\\x06\\x0e\\xf7\\xb4\\xf7\\x11\\x15\\x88\\x97\\x92\\x8a\\x96\\x1b\\xcb\\xc0\\xc2\\xce\\xba\"\n\"\\x76\\xbe\\x64\\xb8\\x1f\\x46\\xdc\\x05\\x58\\xc7\\x7a\\xaa\\xab\\x1a\\xb6\\xaf\\xa9\\xbd\\xa9\\xa7\\x7e\\x7c\\x86\\x87\\x86\\x81\\x84\\x1e\\x7b\\x7e\\x85\\x81\"\n\"\\x7c\\x1a\\x6d\\xa4\\x73\\xa9\\xad\\xa3\\xa5\\xae\\xc4\\x52\\xb4\\x3c\\x2f\\x4c\\x54\\x3c\\x5f\\x9e\\x5e\\xaf\\x63\\x1e\\x89\\x88\\x05\\x8e\\x7e\\x74\\x8e\\x7e\"\n\"\\x1b\\x51\\x5d\\x53\\x45\\x60\\x9b\\x65\\xae\\x60\\x1f\\xcd\\x3b\\x05\\xd2\\x35\\x97\\x77\\x6a\\x1a\\x5e\\x68\\x6c\\x58\\x69\\x6a\\x99\\x9a\\x90\\x8e\\x90\\x95\"\n\"\\x93\\x1e\\x9b\\x99\\x91\\x96\\x9f\\x1a\\xa8\\x74\\xa0\\x6a\\x69\\x73\\x72\\x68\\x50\\xca\\x5d\\xdd\\xe7\\xd3\\xc6\\xd6\\xb5\\x7b\\xad\\x60\\xc1\\x1e\\x30\\xf7\"\n\"\\xab\\x15\\xc5\\xf7\\x03\\xfb\\x13\\x48\\x6c\\x70\\x70\\x6b\\x75\\x7b\\x93\\xa2\\x73\\x1f\\x74\\xa0\\x6f\\xac\\x73\\xac\\x08\\x7a\\xa4\\x7f\\xa9\\xa0\\x1a\\xac\"\n\"\\xa3\\xa4\\xab\\x1e\\x0e\\xad\\xd5\\x15\\xb9\\x5c\\xd8\\xda\\x05\\x75\\xad\\xa7\\x83\\xae\\x1b\\xaf\\xa8\\x94\\xa0\\xac\\x1f\\xd8\\x3c\\xba\\xba\\x3c\\xd9\\x05\"\n\"\\xa0\\xa8\\x94\\xa8\\xb1\\x1a\\xb0\\x83\\xa5\\x75\\xae\\x1e\\xda\\xd9\\x5c\\xb8\\x3e\\x3e\\x05\\x9f\\x6b\\x6f\\x93\\x66\\x1b\\x66\\x6f\\x83\\x77\\x6a\\x1f\\x3e\"\n\"\\xd8\\x5d\\x5e\\xd9\\x3d\\x05\\x77\\x6b\\x82\\x6e\\x66\\x1a\\x66\\x94\\x6f\\x9f\\x6c\\x1e\\xf7\\x23\\xf7\\x5e\\x15\\xc4\\xb8\\x5c\\x4f\\x51\\x5c\\x5c\\x54\\x52\"\n\"\\x5e\\xba\\xc6\\xc7\\xb8\\xb9\\xc4\\x1f\\x0e\\xfc\\x0b\\xf7\\x3d\\x83\\x0a\\x0e\\xf7\\x88\\x80\\x0a\\xf7\\x87\\xa3\\x15\\xfb\\x08\\x58\\x40\\x36\\x39\\x1a\\x50\"\n\"\\xad\\x64\\xbe\\xb4\\xa9\\xaa\\xb5\\xa6\\x81\\x9b\\x6c\\x9f\\x1e\\x75\\x9a\\x84\\x95\\x9a\\x1a\\xae\\xb2\\xb2\\xda\\xb5\\x1e\\x0e\\xf7\\x1d\\x74\\x0a\\xf7\\x25\"\n\"\\xde\\x15\\x9e\\xa0\\x94\\x94\\x9c\\x9e\\x08\\xd1\\xd3\\xaa\\xb4\\xa0\\x1a\\x91\\x85\\x91\\x84\\x83\\x7d\\x82\\x78\\x78\\x1e\\x7e\\x7f\\x81\\x83\\x73\\x7a\\xfb\"\n\"\\x3e\\xfb\\x10\\x18\\x82\\x07\\xe0\\x35\\xc6\\x4d\\xa3\\x70\\x08\\x83\\x92\\x8e\\x89\\x90\\x1b\\x94\\x91\\x92\\x93\\x9a\\x81\\xa6\\x74\\xbb\\x1f\\x0e\\xfb\\xd4\"\n\"\\xf7\\x31\\x74\\x0a\\x0e\\xfb\\xd4\\xf7\\x30\\x87\\x1d\\x0e\\x2a\\x9c\\xf8\\x2b\\x15\\xd6\\x06\\x2f\\xfc\\x2f\\x05\\xfb\\x21\\x6c\\x7c\\x71\\x5f\\x1b\\x7f\\x86\"\n\"\\x8e\\x91\\x8f\\x8d\\x8e\\x90\\x91\\x1f\\x94\\x95\\x8e\\x91\\x96\\x1a\\xa7\\x75\\xa0\\x6e\\x6e\\x77\\x75\\x6b\\x5e\\xb4\\x6a\\xc3\\xbc\\xbc\\xa4\\xb5\\xac\\x1e\"\n\"\\xaa\\xb2\\xac\\xd0\\x98\\xbf\\xc1\\x0a\\x7d\\x54\\x89\\x82\\x7a\\x1a\\x61\\xa5\\x73\\xb8\\xc7\\xb1\\xaa\\xf4\\xd0\\x1e\\x75\\x98\\x05\\x52\\x63\\x75\\x75\\x7c\"\n\"\\x1b\\x83\\x83\\x93\\x93\\x96\\x93\\xae\\x98\\xbc\\x1f\\x8c\\x8f\\xd4\\xf7\\xaf\\x47\\x86\\x7d\\x8a\\x42\\x87\\x19\\xfb\\x0a\\x06\\xac\\xf7\\x0b\\x97\\xa8\\xab\"\n\"\\xb2\\x08\\xa2\\x9e\\xad\\x99\\xb0\\x1b\\x9c\\x94\\x86\\x80\\x87\\x89\\x87\\x86\\x84\\x1f\\x80\\x7f\\x87\\x80\\x7e\\x1a\\x6c\\xa4\\x73\\xac\\xac\\xa3\\xa3\\xac\"\n\"\\xc3\\x51\\xb2\\x37\\x4b\\x4d\\x73\\x63\\x65\\x1e\\x62\\x5f\\x76\\x63\\x67\\x21\\x08\\x3f\\x06\\x0e\\x2a\\x9f\\xf8\\x2b\\x15\\xd5\\x06\\x2f\\xfc\\x26\\x05\\xfb\"\n\"\\x24\\x6a\\x7c\\x6c\\x68\\x1b\\x7e\\x82\\x90\\x92\\x8e\\x8d\\x8f\\x8f\\x91\\x1f\\x92\\x95\\x8e\\x93\\x95\\x1a\\xa7\\x78\\x9d\\x6f\\x6a\\x78\\x77\\x6a\\x5b\\xb2\"\n\"\\x6a\\xc5\\xf2\\xd5\\xea\\xf7\\x53\\xb9\\x1e\\xda\\xf7\\xda\\x05\\xf7\\x27\\x06\\x3c\\xfb\\xd5\\x05\\x88\\x7e\\x89\\x7e\\x80\\x1a\\x69\\xa9\\x73\\xb5\\xc6\\xaf\"\n\"\\xa9\\xf4\\xcf\\x1e\\x77\\x96\\x05\\x56\\x68\\x74\\x75\\x79\\x1b\\x82\\x83\\x93\\x94\\x8f\\x8b\\x8c\\x8f\\x9a\\x1f\\xf7\\x2b\\xf8\\xee\\x28\\x7f\\x05\\x9a\\x3d\"\n\"\\x8b\\x8b\\x75\\x1b\\x4c\\x50\\x73\\x64\\x68\\x1f\\x63\\x60\\x78\\x63\\x69\\xfb\\x01\\x08\\x41\\x06\\xf7\\xea\\x16\\xfb\\x2b\\x06\\xa0\\xe5\\x9a\\xb5\\xa0\\xae\"\n\"\\x08\\xb1\\xa3\\xaa\\xa0\\xac\\x1b\\x9d\\x9d\\x82\\x81\\x89\\x8a\\x8a\\x86\\x83\\x1f\\x7f\\x7a\\x88\\x83\\x7e\\x1a\\x7b\\x91\\x7f\\x9a\\x80\\x1e\\x0e\\xf8\\x71\"\n\"\\xf7\\xa1\\x15\\xfc\\x88\\x06\\x7a\\x30\\x05\\xf8\\x88\\x06\\x0e\\xf7\\x47\\xfb\\x25\\x15\\x9b\\xc4\\x8f\\x98\\x9a\\xca\\xad\\xf7\\x20\\xaf\\xe7\\xb2\\xbc\\x08\"\n\"\\x78\\xbb\\x84\\xac\\xb0\\x1a\\x9d\\x8d\\x9a\\x8f\\xa2\\x1e\\xaf\\x98\\x88\\x76\\xb1\\x1f\\x7e\\xa1\\x97\\x87\\x97\\x1b\\xad\\xa3\\xa0\\xaa\\xab\\x76\\x9f\\x6a\"\n\"\\x7c\\x81\\x88\\x7e\\x72\\x1f\\x66\\x79\\x7d\\x87\\x6c\\x8a\\x93\\xb0\\x92\\x9e\\x99\\x9d\\x9a\\x9e\\x18\\xa2\\xa8\\x94\\x9f\\xa1\\x1a\\xaa\\x73\\xa2\\x6b\\x68\"\n\"\\x76\\x74\\x65\\x7b\\x8e\\x7c\\x92\\x70\\x1e\\x92\\x75\\x8d\\x7f\\x80\\x1a\\x7a\\x88\\x7b\\x85\\x76\\x1e\\x6b\\x7f\\x8e\\x9e\\x64\\x1f\\x98\\x70\\x7e\\x8f\\x7b\"\n\"\\x1b\\x6b\\x77\\x77\\x6c\\x6c\\x9f\\x77\\xaa\\x9f\\x99\\x8f\\x9a\\xa6\\x1f\\xae\\x9d\\x90\\x8c\\xae\\x8c\\x82\\x4e\\x69\\x4a\\x5f\\x64\\x08\\x90\\x69\\x8c\\x77\"\n\"\\x73\\x1a\\x5a\\x85\\x3b\\x84\\x60\\x1e\\x6f\\xfb\\x41\\x05\\x0e\\xf7\\xa0\\xf8\\x6b\\x15\\x74\\x76\\x91\\x9a\\x6b\\x1f\\x97\\x73\\x7f\\x8f\\x7d\\x1b\\x6c\\x76\"\n\"\\x77\\x6e\\x6e\\x9d\\x79\\xad\\x89\\x1f\\x9b\\x8c\\x90\\x8c\\xa5\\x98\\x08\\x9e\\xb1\\x9d\\x90\\xab\\x1b\\x73\\x2b\\x7a\\x69\\x59\\x5d\\x08\\x9f\\x68\\x8f\\x79\"\n\"\\x57\\x1a\\x69\\x8a\\x7f\\x85\\x73\\x1e\\x65\\x8e\\x82\\x8e\\x61\\x9e\\x08\\x96\\x72\\x7d\\x90\\x7e\\x1b\\x6e\\x74\\x74\\x6e\\x70\\xa1\\x77\\xa7\\x96\\x98\\x8e\"\n\"\\x95\\xa2\\x1f\\xb5\\x9b\\x96\\x8e\\xb3\\x8f\\x7c\\x5a\\x85\\x80\\x6e\\x61\\x08\\x76\\x6e\\x84\\x7c\\x79\\x1a\\x6d\\xa2\\x76\\xaa\\xae\\x9e\\xa0\\xb2\\x95\\x89\"\n\"\\x95\\x87\\xa0\\x1e\\x85\\xa4\\x89\\x97\\xa0\\x1a\\xa2\\x8c\\x97\\x90\\x9f\\x1e\\xb0\\x97\\x88\\x79\\xb3\\x1f\\x7f\\xa3\\x97\\x87\\x98\\x1b\\xab\\xa0\\x9e\\xa9\"\n\"\\xa9\\x78\\x9c\\x6a\\x8d\\x1f\\x7b\\x86\\x89\\x7e\\x71\\x1f\\x65\\x79\\x79\\x86\\x6b\\x8a\\xa3\\xeb\\x9c\\xad\\xbd\\xb9\\x08\\x77\\xaf\\x87\\x9b\\xc2\\x1a\\xac\"\n\"\\x8c\\x97\\x91\\xa2\\x1e\\xb1\\x88\\x94\\x89\\xb5\\x77\\x08\\x7f\\xa4\\x99\\x87\\x98\\x1b\\xa8\\xa2\\xa2\\xa8\\xa6\\x75\\x9f\\x6f\\x80\\x7e\\x87\\x82\\x74\\x1f\"\n\"\\x61\\x7b\\x80\\x88\\x63\\x87\\x9a\\xbc\\x91\\x96\\xa8\\xb5\\x08\\xa0\\xa8\\x92\\x9a\\x9d\\x1a\\xa8\\x74\\xa1\\x6c\\x68\\x78\\x76\\x65\\x80\\x8c\\x81\\x90\\x77\"\n\"\\x1e\\x91\\x71\\x8d\\x7f\\x76\\x1a\\x75\\x8a\\x7f\\x86\\x76\\x1e\\x0e\\xfc\\x27\\xf7\\x12\\xf8\\x29\\x2b\\x0a\\xf7\\xde\\xf9\\x18\\x15\\xc2\\x06\\xfb\\x6d\\xfd\"\n\"\\xd9\\x05\\xf7\\x3f\\x06\\x92\\xa4\\x05\\x50\\x90\\x7d\\x90\\x9c\\x1a\\x93\\xb3\\x8f\\x9c\\x8f\\x9b\\xf7\\x3d\\xf9\\x1d\\x18\\x99\\xc1\\x8e\\x8d\\xdc\\x92\\x91\"\n\"\\xa4\\x18\\xfb\\xbb\\x06\\x32\\x4a\\x75\\x5f\\x62\\x1f\\x60\\x5d\\x6a\\x2e\\x3f\\x1a\\x5e\\x9c\\x64\\xa9\\x76\\x1e\\xa4\\x7a\\xa2\\x85\\xbd\\x89\\x36\\xfb\\xda\"\n\"\\x18\\x7b\\x4d\\x86\\x7d\\x83\\x85\\x80\\x81\\x7a\\x87\\x5a\\x87\\x84\\x72\\x18\\xf7\\x3e\\x06\\xad\\xf8\\x70\\x15\\x5d\\x9f\\x71\\xb2\\xbf\\x1a\\xc1\\x9f\\xd1\"\n\"\\xa7\\xb9\\x1e\\xa8\\xba\\xa5\\x9c\\xca\\x9b\\x08\\x0e\\xfb\\xc3\\xf7\\x46\\xf8\\x8e\\x15\\x35\\x49\\x49\\x36\\x35\\xcf\\x47\\xe0\\xde\\xd0\\xce\\xdd\\xe2\\x48\"\n\"\\xd0\\x35\\x1f\\x0e\\xfb\\xd4\\x93\\xfb\\x4a\\x40\\x1d\\xf7\\x68\\xfb\\x4a\\x44\\x0a\\x65\\x3c\\x60\\x1e\\xfb\\x87\\x73\\x15\\xf7\\x08\\xbe\\xd6\\xe1\\xdc\\x1a\"\n\"\\xc6\\x69\\xb2\\x58\\x62\\x6d\\x6c\\x61\\x70\\x95\\x7b\\xa9\\x77\\x1e\\xa2\\x7c\\x92\\x81\\x7d\\x1a\\x67\\x64\\x64\\x3c\\x61\\x1e\\x0e\\xf7\\xd6\\xf8\\x05\\x44\"\n\"\\x0a\\x64\\x3c\\x61\\x1e\\xfb\\x87\\x73\\x40\\x1d\\xf7\\xeb\\x87\\x1d\\xfb\\x25\\x38\\x15\\x78\\x76\\x82\\x81\\x7a\\x79\\x08\\x44\\x42\\x6d\\x63\\x76\\x1a\\x84\"\n\"\\x91\\x86\\x92\\x94\\x98\\x94\\x9d\\x9e\\x1e\\x98\\x97\\x95\\x93\\xa3\\x9d\\xf7\\x3e\\xf7\\x10\\x18\\x94\\x07\\x30\\xe7\\x5e\\xb9\\x6b\\xb0\\x08\\x93\\x84\\x88\"\n\"\\x8d\\x86\\x1b\\x82\\x85\\x84\\x83\\x7c\\x94\\x71\\xa3\\x5a\\x1f\\x0e\\xf7\\xef\\xf7\\x07\\xf7\\x1b\\x15\\x28\\x0a\\xf7\\xe0\\x16\\x28\\x0a\\xf7\\xe0\\x16\\x28\"\n\"\\x0a\\x0e\\xf7\\xef\\xe1\\x6e\\x15\\xbb\\x06\\xf8\\x4a\\xf9\\x73\\x05\\x5b\\x06\\x4b\\x58\\x5a\\x70\\x49\\x1b\\x66\\x79\\x92\\xa2\\x6f\\x1f\\xa0\\x72\\x77\\x93\"\n\"\\x71\\x1b\\x20\\x31\\x28\\xfb\\x09\\x3c\\xbf\\x52\\xd4\\xb0\\xb0\\x9b\\xa7\\xa7\\x1f\\xb4\\xb5\\xa8\\xd8\\xd0\\x1a\\x98\\x8a\\x96\\x89\\x9e\\x1e\\x81\\xa3\\x9a\"\n\"\\x88\\xa0\\x1b\\xb4\\xab\\x97\\xa9\\xb3\\x1f\\xfb\\xa0\\x93\\x15\\x92\\x8f\\x88\\x82\\x98\\x1f\\x97\\x83\\x8e\\x89\\x96\\x88\\x95\\x88\\x8f\\x89\\x8c\\x88\\x08\"\n\"\\x8e\\x84\\x8f\\x71\\x7e\\x1a\\x25\\x4d\\x26\\x4c\\x6a\\x7a\\xa3\\xb7\\xe4\\xc9\\xf7\\x14\\xb4\\x88\\x1e\\xf7\\xd7\\xfb\\xc1\\x15\\x25\\x2e\\x28\\xfb\\x02\\x34\"\n\"\\xbd\\x54\\xd9\\xb1\\xaf\\x9a\\xa6\\xa4\\x1f\\xb8\\xba\\xa7\\xd4\\xd1\\x1a\\xd5\\x64\\xb8\\x49\\x1e\\xa0\\x6a\\x15\\xad\\xa4\\x68\\x5e\\x57\\x76\\x48\\x6e\\x61\"\n\"\\x1f\\x69\\x74\\x73\\x7c\\x6d\\x1b\\x6a\\x7b\\xa1\\xb9\\xbf\\xa5\\xdd\\xab\\xb9\\x1f\\xa8\\x9f\\x9e\\x98\\x9f\\x1b\\xf7\\xe9\\xac\\x15\\x25\\x2e\\x27\\xfb\\x01\"\n\"\\x35\\xbd\\x53\\xd8\\xb2\\xae\\x9a\\xa6\\xa5\\x1f\\xb8\\xba\\xa7\\xd4\\xd1\\x1a\\xd5\\x64\\xb8\\x49\\x1e\\xa0\\x6a\\x15\\xad\\xa4\\x68\\x5e\\x57\\x76\\x48\\x6e\"\n\"\\x61\\x1f\\x6a\\x74\\x73\\x7b\\x6d\\x1b\\x6a\\x7b\\xa1\\xb9\\xbf\\xa6\\xdd\\xaa\\xb9\\x1f\\xa8\\x9f\\x9e\\x98\\x9f\\x1b\\x0e\\xf7\\xc4\\xf7\\xa3\\x15\\x6f\\x45\"\n\"\\x7b\\x74\\x65\\x72\\x49\\x60\\x18\\x31\\x51\\x67\\x59\\x4c\\x1a\\x35\\xd1\\x51\\xf5\\xf0\\xd5\\xc1\\xd6\\xb1\\x70\\xa8\\x69\\x69\\x70\\x71\\x69\\x7c\\x90\\x7e\"\n\"\\x98\\x7a\\x1e\\x93\\x81\\x8e\\x85\\x85\\x1a\\x78\\x6d\\x78\\x6b\\x60\\x71\\xa9\\xbd\\xba\\x9e\\xb9\\xb8\\xc2\\x1e\\xb4\\xbe\\xb9\\xc5\\x9f\\xb9\\x90\\xc2\\x19\"\n\"\\x9a\\xf7\\x78\\x15\\x28\\x0a\\x0e\\xfb\\xd4\\xf7\\xbd\\xf8\\x98\\x37\\x1d\\xfb\\xd4\\xf7\\x50\\xf8\\x98\\x29\\x1d\\xfb\\xd4\\xf7\\xd0\\xf8\\x98\\x23\\x1d\\xfb\"\n\"\\xd4\\xf8\\x02\\xf9\\x23\\x75\\x0a\\xfb\\xd4\\xf8\\x1d\\xf9\\x03\\x25\\x0a\\xfb\\xd4\\xf7\\xf0\\xf9\\x3a\\x15\\x49\\x6b\\x69\\x57\\x0a\\x7e\\x06\\x26\\xb7\\x5b\"\n\"\\xe8\\xec\\xcb\\xc5\\xf3\\x9d\\x1e\\x0e\\xfb\\xd4\\xf7\\x77\\xf9\\x23\\x2a\\x1d\\xfb\\xd4\\xf7\\x0b\\xf9\\x23\\x24\\x0a\\xfb\\xd4\\xf7\\x7e\\xf9\\x86\\x30\\x0a\"\n\"\\xfb\\xd4\\x72\\x2f\\x15\\x98\\x7f\\x05\\x8e\\x97\\x92\\x8c\\x96\\x49\\x1d\\xac\\xc5\\x1d\\xb8\\xce\\x05\\x5f\\x06\\x0e\\xfb\\xd4\\xf7\\x0a\\xf8\\x98\\x15\\x2b\"\n\"\\x1d\\x2d\\x1d\\xf7\\x82\\x16\\x90\\x0a\\xfb\\xd4\\xa7\\xab\\x15\\x87\\x85\\x89\\x89\\x83\\x81\\x08\\x62\\x59\\x7e\\x70\\x6e\\x31\\x0a\\xb5\\x9a\\x8e\\x9d\\x94\"\n\"\\xaa\\x1f\\x8e\\x95\\x8c\\x8e\\x8c\\x92\\x08\\x0e\\xfb\\xd4\\xf8\\x2f\\xf9\\x46\\x20\\x0a\\xf7\\xef\\xa9\\x0a\\xf7\\xb7\\x99\\x0a\\x61\\x7b\\x96\\xa5\\x91\\x8d\"\n\"\\x95\\x8e\\x97\\x1f\\xca\\xf7\\x85\\x05\\xf7\\x02\\x84\\xa2\\x7c\\x4b\\x1a\\x83\\x8b\\x85\\x8a\\x7d\\x71\\x1d\\x0e\\xfc\\x17\\xf7\\xcd\\xf8\\x78\\x15\\x88\\x88\"\n\"\\x8b\\x8b\\x89\\x88\\x08\\x74\\x78\\x7c\\x7e\\x84\\x1b\\x88\\x89\\x8e\\x91\\x9b\\x91\\xa4\\x9b\\xbb\\x1f\\xb9\\xf7\\x20\\x3f\\x87\\x80\\x68\\x05\\xaa\\x84\\x7d\"\n\"\\x98\\x71\\x1b\\x38\\x2a\\xfb\\x05\\x2b\\x5e\\xa7\\x6c\\xb5\\xb7\\xa8\\xa2\\xcc\\xb0\\x1f\\x81\\x69\\x8a\\x85\\x80\\x1a\\x77\\x9f\\x79\\xa3\\xa9\\xa8\\xa2\\xc0\"\n\"\\xb1\\x1e\\xfb\\x14\\xf7\\x4b\\x15\\x97\\x8a\\x93\\x7f\\x7c\\x1a\\x6d\\x79\\x4f\\x76\\x65\\x1e\\x67\\x77\\x75\\x76\\x78\\x1b\\x7e\\x80\\x98\\x9a\\xcd\\xd0\\xf7\"\n\"\\x0f\\xae\\x87\\x1f\\x0e\\x61\\x86\\x0a\\xcd\\xf7\\x88\\xf7\\x28\\xde\\xa0\\xd1\\xfb\\x2a\\x3a\\xb7\\xf7\\x36\\x9b\\xc2\\x9e\\x98\\xcd\\x8f\\x19\\xa4\\xfb\\xd1\"\n\"\\x72\\x07\\x9c\\x0a\\x54\\xfb\\x5d\\x27\\x56\\x75\\x45\\xf3\\xc3\\x59\\xfb\\x49\\x7b\\x57\\x7d\\x7e\\x59\\x84\\x19\\x72\\xf8\\xbd\\x07\\x0e\\xd0\\xe2\\x1d\\x77\"\n\"\\x8e\\x6d\\x1b\\xfb\\x6c\\xfb\\x62\\xfb\\x7b\\xfb\\x86\\x67\\x0a\\x75\\x90\\x75\\xb3\\x0a\\x55\\x1b\\x71\\x78\\x91\\x9b\\x77\\x1f\\x0e\\xf7\\xb7\\xfa\\x46\\xf9\"\n\"\\x31\\x15\\xfb\\xe3\\x06\\x7b\\x6d\\x8d\\x8e\\x5e\\x1f\\x8e\\x6c\\x82\\x8b\\x7b\\x1b\\xfb\\x00\\x49\\x77\\x54\\x42\\x1f\\xfb\\x0a\\x32\\x3f\\xfb\\x28\\xfb\\x21\"\n\"\\x1a\\x30\\xaf\\x46\\xce\\x64\\x1e\\xb3\\x73\\xca\\x7f\\xcc\\x8e\\xf7\\x2e\\x92\\x18\\xa1\\x06\\x90\\x94\\x8b\\x8c\\x95\\x1f\\xa7\\x06\\xf7\\xbc\\x06\\xc7\\xf7\"\n\"\\x56\\x70\\x90\\x05\\xfb\\x0d\\x46\\x44\\x5d\\xfb\\x09\\x1b\\x57\\x76\\x95\\xa3\\x91\\x8d\\x95\\x8d\\x94\\x1f\\xcb\\xf7\\x89\\xd6\\x84\\x9f\\x86\\x9a\\x7e\\x19\"\n\"\\x98\\x7f\\x92\\x7a\\x78\\x1a\\x82\\x8a\\x7c\\x89\\x7a\\x1e\\x88\\x8b\\x84\\x8a\\x82\\x1e\\xa6\\x86\\xd3\\xf7\\xa4\\x70\\x8e\\x6b\\x3e\\x61\\x70\\x31\\x8c\\x19\"\n\"\\x87\\x06\\x76\\x06\\xc8\\xf7\\x70\\x05\\xb4\\x96\\x92\\x91\\xad\\x1b\\xbf\\xbe\\x7f\\x79\\xa3\\x1f\\xa4\\x77\\x98\\x6e\\x66\\x1a\\x7c\\x8b\\x83\\x8a\\x7d\\x1e\"\n\"\\xa4\\x85\\x05\\xfc\\x90\\xfb\\xf7\\x15\\x44\\x77\\x6e\\x70\\x51\\x1b\\x42\\x5b\\xc0\\xdb\\xf7\\x0a\\xc1\\xf7\\x46\\xca\\xe6\\x1f\\xcf\\xbb\\xbd\\xab\\xc7\\x1b\"\n\"\\xba\\xa5\\x75\\x63\\x7b\\x87\\x71\\x83\\x70\\x1f\\x0e\\xfb\\xf5\\xf7\\x87\\xf9\\x41\\x15\\x2b\\x30\\x2b\\x27\\x57\\xb8\\x66\\xc8\\xe7\\xe3\\xe3\\xee\\x90\\x1f\"\n\"\\xc4\\x8e\\x60\\xb4\\x4b\\x1b\\x89\\x77\\x15\\x9c\\x8a\\x94\\x7d\\x8a\\x74\\x89\\x60\\x7b\\x4f\\x78\\x62\\x08\\x60\\x76\\x78\\x77\\x73\\x1b\\x79\\x81\\x98\\xa1\"\n\"\\xb7\\xa0\\xd9\\xa2\\xb3\\x1f\\x9d\\xab\\xa1\\x9c\\x9f\\x8a\\x08\\x0e\\xd0\\xf7\\xf4\\xf8\\x20\\x15\\xbd\\x79\\x77\\x9b\\x5f\\x1b\\xfb\\x12\\xfb\\x29\\xfb\\x55\"\n\"\\xfb\\x37\\x47\\xbb\\x59\\xcd\\xce\\x9d\\x1d\\x62\\x72\\xab\\xc0\\x9a\\x8c\\x96\\x8f\\x9f\\x1f\\xb2\\x94\\x05\\xf7\\x25\\xac\\xde\\xce\\xdd\\x1a\\xc2\\x66\\xab\"\n\"\\x4d\\x59\\x6f\\x7c\\x59\\x60\\x1e\\x9f\\xcc\\x24\\x86\\x05\\x36\\x68\\x15\\xa7\\x9f\\x73\\x6b\\x55\\x6b\\x23\\x64\\x47\\x1f\\x55\\x6e\\x6d\\x72\\x69\\x1b\\x6d\"\n\"\\x77\\xa5\\xb3\\x8d\\x1f\\x8e\\xc5\\xa5\\xde\\xb1\\xce\\x08\\xc6\\xac\\xab\\xa7\\xab\\x1b\\xf7\\x19\\xfb\\x50\\x15\\xf7\\x1a\\xb2\\xb6\\xcb\\xbd\\x1b\\xa2\\x95\"\n\"\\x7f\\x6f\\x51\\x6d\\x5b\\x50\\x66\\x1f\\x6c\\x77\\x75\\x83\\x6f\\x87\\x08\\x0e\\xfc\\x0b\\x2c\\x1d\\x0e\\xfc\\x0b\\xf7\\x6c\\xf7\\x21\\x73\\x0a\\xfb\\x42\\x7e\"\n\"\\x54\\xb4\\x0a\\x5e\\x0a\\x0e\\xd0\\xf8\\xe3\\xf7\\x1f\\x15\\x46\\x5e\\x70\\x77\\x5d\\x1b\\x60\\x73\\xa6\\xbe\\x9b\\x8d\\x98\\x91\\xa6\\x1f\\xf2\\xa2\\xa4\\x94\"\n\"\\xb8\\xa8\\x08\\xc4\\xb0\\xa9\\xb7\\xb9\\x1a\\xc3\\x60\\xad\\x46\\x57\\x69\\x7d\\x5b\\x4f\\x1e\\xb8\\x6b\\x6c\\x9c\\x56\\x1b\\x2a\\x2d\\x4e\\x27\\x51\\x1f\\x6e\"\n\"\\x57\\x7b\\x55\\x58\\x1a\\x2e\\xcc\\x4b\\xea\\xc6\\xb9\\x9d\\xb2\\xb6\\x1e\\x62\\xb2\\xab\\x7b\\xb9\\x1b\\xb8\\xb5\\x9a\\xa9\\xad\\x1f\\xa3\\x9f\\x9c\\xa2\\xa5\"\n\"\\xbc\\x08\\xfb\\x5a\\xe9\\x15\\xbf\\xf7\\x23\\x94\\x9e\\xaa\\xaf\\x08\\x95\\x94\\x98\\x91\\x99\\x1b\\xa2\\x99\\x7c\\x72\\x72\\x81\\x6b\\x7c\\x73\\x1f\\x6e\\x5c\"\n\"\\x68\\x73\\x3f\\x75\\x08\\xfb\\x1f\\xf7\\x6b\\x15\\xaf\\x9e\\x72\\x5a\\x57\\x69\\xfb\\x1a\\x6d\\x4c\\x1f\\x4a\\x6c\\x6e\\x6e\\x67\\x1b\\x69\\x78\\xa8\\xbf\\xb6\"\n\"\\x97\\xc4\\xa2\\xcf\\x1f\\xf7\\x0c\\xb3\\xae\\xbb\\xbb\\x1b\\x0e\\xf7\\x85\\xf8\\x14\\x15\\xa7\\x87\\x97\\x88\\x95\\x83\\x08\\x9a\\x80\\x94\\x72\\x6d\\x1a\\x4b\"\n\"\\x76\\x25\\x73\\x57\\x1e\\x64\\x79\\x77\\x78\\x74\\x1b\\x7b\\x78\\x93\\x95\\x83\\x1f\\x87\\x90\\x77\\x68\\x05\\x7b\\xa2\\x9f\\x85\\xa9\\x1b\\xf7\\x08\\xf3\\xf7\"\n\"\\x10\\xf7\\x1e\\xb6\\x7c\\xae\\x6f\\xa3\\x1f\\x73\\xa0\\x74\\x95\\x55\\x96\\xd9\\xa8\\xa8\\x9b\\xad\\xab\\x08\\xa5\\xa4\\x9a\\xaf\\xb0\\x1a\\xd7\\x4e\\xc2\\x36\"\n\"\\xfb\\x0e\\x35\\x23\\xfb\\x5a\\x60\\x1e\\x2f\\xfc\\x3b\\x7d\\x4c\\x7a\\x5b\\x7b\\x76\\x19\\x7e\\x81\\x81\\x87\\x78\\x1b\\x7f\\x87\\x8e\\x93\\x90\\x8c\\x8d\\x90\"\n\"\\x90\\x1f\\x94\\x94\\x8d\\x92\\x9a\\x1a\\xa7\\x79\\x9c\\x6d\\x6c\\x77\\x76\\x6b\\x5d\\xb2\\x6c\\xc5\\xf4\\xd7\\xf0\\xf7\\x5d\\xb8\\x1e\\xe6\\xf8\\x2b\\x05\\xf7\"\n\"\\x09\\xa5\\xa9\\xbc\\xb9\\x1b\\xaa\\x9a\\x78\\x63\\xfb\\x00\\x61\\x33\\x57\\x1f\\x87\\x06\\x7b\\x8c\\x05\\x0e\\xfb\\xf5\\xa9\\xf7\\xa6\\x55\\x1d\\x90\\x1b\\x99\"\n\"\\x93\\x84\\x7d\\x8e\\x1f\\x8c\\x86\\x67\\xfb\\x0c\\x72\\x42\\x85\\x78\\x85\\x79\\x8a\\x86\\x08\\x49\\x7a\\x7c\\x7d\\x53\\x1b\\x0e\\x5c\\xf8\\x67\\xf7\\x00\\x15\"\n\"\\xe3\\xf7\\xb7\\xfc\\x8c\\x33\\xf8\\x34\\x06\\x0e\\x3e\\xf8\\xb6\\xf8\\x55\\x15\\xfb\\x1b\\x06\\x59\\xfb\\x38\\x05\\xfb\\x01\\x69\\x42\\x21\\x60\\x1b\\x7f\\x84\"\n\"\\x94\\x9b\\x98\\x8d\\x9a\\x8f\\x99\\x1f\\xe7\\xf7\\xcc\\x05\\xfb\\x1b\\x06\\xfb\\x01\\xfc\\x0b\\x79\\x5a\\x85\\x7b\\x78\\x5e\\x19\\x73\\x51\\x85\\x74\\x6e\\x1a\"\n\"\\x64\\x9d\\x75\\xac\\xa9\\xa7\\x9e\\xa9\\x98\\x1e\\x91\\x98\\x8c\\x94\\xa6\\x1a\\xb7\\x93\\xb9\\x99\\xb6\\x1e\\x78\\xa4\\x98\\x86\\xa3\\x1b\\xba\\xaa\\xa7\\xe5\"\n\"\\xbf\\x1f\\x82\\x66\\x89\\x7f\\x78\\x1a\\x67\\xa6\\x70\\xaf\\xc4\\xad\\xa6\\xf3\\xd7\\x1e\\x75\\x9b\\x05\\x63\\x72\\x75\\x75\\x7c\\x1b\\x84\\x86\\x91\\x93\\x93\"\n\"\\x8d\\x94\\x8e\\x95\\x1f\\x0e\\xf7\\xef\\xf7\\x8a\\xf9\\x1b\\x15\\xbc\\x06\\xad\\xa1\\x76\\x5e\\x95\\x1f\\xa0\\xe3\\xfb\\xf2\\x33\\xa0\\x06\\xb7\\x95\\xa0\\xa1\"\n\"\\xae\\x1b\\xbc\\xfb\\xc9\\x06\\x6a\\x89\\x84\\x85\\x87\\x1e\\x83\\x87\\x88\\x8a\\x6c\\xba\\x1d\\xf8\\x3c\\x40\\x15\\x96\\x06\\xf7\\x2d\\xf7\\xc8\\x05\\xfb\\x7d\"\n\"\\x07\\x69\\x89\\x85\\x85\\x87\\x1e\\x83\\x87\\x89\\x8a\\x6b\\xba\\x1d\\xf7\\x95\\x07\\xb1\\x99\\x98\\xb5\\x8e\\x1e\\x9f\\xfb\\x01\\x07\\xfb\\x31\\xfb\\xc2\\xfb\"\n\"\\x2a\\xf7\\xc2\\x05\\xfb\\x13\\x77\\x06\\xaa\\x89\\xa4\\x79\\x99\\x6b\\x08\\xfb\\x88\\x07\\x8a\\x57\\x83\\x80\\x60\\x87\\x08\\x76\\xf7\\x17\\xa0\\x07\\x60\\x8f\"\n\"\\x83\\x96\\x8a\\xbf\\x08\\xf7\\x6c\\x07\\x0e\\xd0\\x5c\\x0a\\xec\\xf8\\xfa\\xf9\\x3f\\x15\\x51\\x06\\xfc\\x47\\xfd\\x4d\\x05\\xc5\\x06\\xf8\\x9e\\xf7\\x14\\x96\"\n\"\\x1d\\xaf\\xab\\x9f\\x97\\xa9\\x1b\\xb0\\xa1\\x72\\x62\\x6b\\x78\\x6a\\x58\\x53\\x1f\\x6e\\x6b\\x78\\x79\\x27\\x2c\\x08\\x7b\\xf7\\x82\\x07\\xfd\\x27\\xf7\\xa6\"\n\"\\x55\\x1d\\x8f\\x1b\\x99\\x97\\x81\\x80\\x80\\x6c\\x24\\x6e\\x36\\x1f\\x7e\\x62\\x05\\x49\\x7a\\x7c\\x7d\\x53\\x1b\\x0e\\x38\\xf7\\x85\\xf7\\xfb\\x15\\xfb\\x64\"\n\"\\x33\\xf7\\x64\\xfb\\x23\\xe3\\xf7\\x23\\xf7\\x64\\xe3\\xfb\\x64\\xf7\\x65\\x33\\x06\\xfb\\x64\\xfc\\xcc\\x15\\xf8\\x8c\\xe3\\xfc\\x8c\\x06\\x0e\\x61\\xf7\\x05\"\n\"\\x8f\\x1d\\x8e\\x9a\\x92\\xad\\x1e\\x99\\xcb\\x05\\x87\\xaf\\x9d\\xd2\\x1d\\x5b\\x06\\x98\\xb1\\x9f\\xc4\\x93\\x92\\xc0\\x93\\x19\\x8c\\xa4\\x05\\xfb\\xba\\x06\"\n\"\\xf7\\x48\\xfb\\x67\\x15\\x92\\xa4\\x8b\\x8b\\x8f\\x90\\x08\\x95\\x95\\x95\\x8f\\x9e\\x1b\\xc1\\xa9\\xbc\\x1d\\x0e\\xec\\xf9\\x44\\x8a\\x1d\\xfb\\x4f\\xf7\\xb4\"\n\"\\x55\\x1d\\x8f\\x1b\\x99\\x97\\x81\\x80\\x80\\x6c\\x24\\x6e\\x36\\x1f\\x7e\\x62\\x05\\x49\\x7a\\x7c\\x7d\\x53\\x1b\\x0e\\x38\\xf8\\xad\\xf7\\x65\\x15\\xe3\\xfc\"\n\"\\x8c\\x33\\x07\\xf7\\x91\\x31\\x15\\x28\\x0a\\xf8\\x34\\x04\\x60\\x6b\\xc7\\x0a\\xb4\\x6a\\xac\\x63\\x1f\\x0e\\xfc\\x45\\xec\\x78\\x15\\xe2\\xf7\\xa6\\x34\\x06\"\n\"\\xf7\\x2f\\x04\\xe2\\xf7\\xa6\\x34\\x06\\x0e\\xfb\\x91\\xf7\\x76\\xf9\\x3f\\x15\\x3b\\x4c\\x4c\\x3b\\x3c\\xca\\x4b\\xd9\\xdd\\xca\\xc9\\xdc\\xdb\\x4c\\xca\\x3b\"\n\"\\x1f\\x67\\x04\\xc2\\xba\\x5a\\x51\\x50\\x5d\\x5b\\x52\\x54\\x5d\\xbc\\xc5\\xc6\\xb9\\xbb\\xc3\\x1f\\x0e\\xf7\\x15\\xfb\\x46\\x15\\x59\\x8c\\x7c\\x92\\xa3\\x1a\"\n\"\\x98\\x92\\xab\\x9e\\xd0\\x1e\\x92\\xa3\\x8b\\x8d\\x8f\\x9a\\x08\\x79\\xae\\x97\\x87\\xa0\\x1b\\xf7\\x1c\\xf7\\x21\\xf7\\x48\\xf7\\x42\\xd5\\x61\\xba\\x4a\\x52\"\n\"\\x60\\x6d\\x3f\\x58\\x1f\\x88\\x8e\\xea\\xf7\\xe8\\x45\\x7e\\x5a\\x83\\x34\\x82\\x19\\x70\\x07\\xbc\\x99\\x84\\x74\\x84\\x87\\x78\\x7e\\x5a\\x1f\\xfb\\x36\\xfd\"\n\"\\x0a\\x79\\x41\\x80\\x7f\\x5a\\x8c\\x19\\x70\\xf7\\x8d\\x07\\xf7\\x2d\\xf8\\xe8\\x15\\xa5\\x89\\x9a\\x75\\x89\\x6a\\x87\\x4a\\x6b\\x27\\x67\\x4a\\x08\\x55\\x6c\"\n\"\\x6b\\x6f\\x69\\x1b\\x75\\x7a\\x9b\\x9f\\x9b\\x93\\xad\\xa5\\xe2\\x1f\\xa3\\xdc\\x96\\xa8\\x9b\\xa3\\xa4\\xb2\\xac\\xa4\\xa5\\x89\\x08\\x0e\\xec\\xf9\\x49\\x8a\"\n\"\\x1d\\x28\\xf8\\x83\\x15\\xcf\\x88\\xab\\x6d\\x50\\x1a\\x58\\xa6\\x1d\\x7e\\xa2\\x64\\xa5\\x1f\\x92\\x8f\\x05\\xc5\\xac\\x99\\x9c\\xb0\\x1a\\xb9\\x60\\xae\\x53\"\n\"\\x56\\x63\\x95\\x0a\\xfb\\xf5\\xf7\\xb7\\xf8\\x18\\x96\\x1d\\xae\\xaa\\xa0\\x98\\xa9\\x1b\\xb0\\xa1\\x72\\x62\\x6b\\x78\\x6a\\x58\\x53\\x1f\\x6e\\x6b\\x78\\x78\"\n\"\\x27\\x2d\\x08\\x7b\\xf7\\x82\\x07\\x0e\\xe9\\xf7\\x66\\xf8\\x93\\x15\\xaa\\x87\\x8c\\x8b\\x93\\x87\\x08\\x91\\x87\\x8c\\x86\\x6d\\x1a\\xfb\\x8d\\x07\\x6d\\x89\"\n\"\\x84\\x86\\x88\\x1e\\x83\\x87\\x8a\\x8b\\x6c\\x87\\x08\\x7b\\xf7\\x3a\\x9b\\x07\\x6d\\x8e\\x89\\x8c\\x83\\x8f\\x08\\x85\\x8f\\x89\\x91\\xa9\\x1a\\xf1\\xb7\\x07\"\n\"\\xa2\\x68\\x96\\x78\\x9d\\x6c\\xaf\\x4b\\x99\\x7b\\x9d\\x8a\\x08\\xd1\\x96\\x06\\x77\\x9b\\x74\\xa5\\x6c\\xb5\\x50\\xdd\\x18\\xc1\\x9f\\xa6\\xae\\xbc\\x1a\\xc6\"\n\"\\x5e\\xaf\\x43\\x1e\\xfb\\x4b\\x06\\xf7\\x0a\\x76\\x15\\xb3\\x06\\xb9\\xa2\\x71\\x57\\x51\\x72\\x6a\\x60\\x1f\\x62\\x06\\xb9\\xf7\\xf0\\x81\\x1d\\x5c\\xf8\\xbf\"\n\"\\xf7\\x65\\x15\\xe3\\xfc\\x8c\\x33\\x07\\x0e\\xf7\\xaf\\xf8\\xd2\\x15\\xb2\\x59\\x9e\\x5d\\x8f\\x55\\x89\\x87\\x18\\xa9\\x78\\x76\\x97\\x6c\\x1b\\xfb\\x1e\\xfb\"\n\"\\x1d\\xfb\\x37\\xfb\\x39\\x37\\xcf\\x4c\\xe5\\xf7\\x2f\\xf7\\x17\\xf7\\x44\\xf7\\x65\\xe6\\x70\\xcd\\x48\\xda\\x1f\\xf6\\xc3\\x69\\xab\\x20\\x52\\x60\\xae\\x63\"\n\"\\x9d\\x5a\\x92\\x19\\x5f\\x70\\xb3\\x84\\xaf\\x76\\xb3\\x66\\x19\\xfb\\x0e\\x4b\\xac\\x6c\\x05\\xf7\\x04\\x3c\\x15\\xa7\\xf4\\x1d\\x4c\\x6e\\x6d\\x6f\\x68\\x1b\"\n\"\\x6a\\x7b\\xa2\\xba\\xd5\\xb0\\xf7\\x20\\xaf\\xcc\\x1f\\xb9\\xa5\\xa7\\xa1\\xac\\x1b\\x0e\\x38\\xf7\\x73\\xf7\\x91\\x15\\xfb\\x43\\xfb\\x43\\xc9\\x4d\\xf7\\x43\"\n\"\\xf7\\x44\\xf7\\x43\\xfb\\x44\\xc9\\xc9\\xfb\\x44\\xf7\\x43\\xf7\\x44\\xf7\\x43\\x4d\\xc9\\xfb\\x43\\xfb\\x44\\xfb\\x43\\xf7\\x44\\x4d\\x4d\\x05\\x0e\\xfb\\xf5\"\n\"\\xf7\\x02\\xf8\\x75\\x15\\xce\\x88\\xac\\x6d\\x51\\x1a\\x57\\xa6\\x1d\\x7d\\xa2\\x65\\xa5\\x1f\\x92\\x8f\\x05\\xc5\\xad\\x99\\x9b\\xb0\\x1a\\xb9\\x60\\xae\\x53\"\n\"\\x55\\x64\\x95\\x0a\\xe9\\xf8\\xa2\\xf7\\x8e\\x15\\x4e\\x6f\\x66\\x71\\x51\\x1b\\x33\\x59\\xcb\\xf7\\x07\\xf7\\x04\\xbc\\xcb\\xe1\\xc8\\xaf\\x6e\\x4e\\x98\\x1f\"\n\"\\x9c\\xd2\\x06\\x94\\x84\\x91\\x7c\\x91\\x1e\\x98\\x67\\x70\\x90\\x66\\x1b\\xfb\\x1c\\x32\\x3b\\xfb\\x0f\\xfb\\x0e\\xdd\\x42\\xf7\\x1b\\xac\\xc3\\x96\\x98\\xa8\"\n\"\\x1f\\x94\\x8e\\x8c\\x8c\\x8d\\x95\\x9c\\xd3\\x18\\xfb\\x3e\\xf8\\x47\\x81\\x1d\\x99\\x27\\x1d\\xa7\\xf8\\x6f\\x8d\\x0a\\x99\\x27\\x1d\\xf7\\x33\\xf8\\x6f\\x15\"\n\"\\xbe\\x06\\x35\\xf7\\x42\\x05\\x3a\\x2a\\x0a\\x99\\x27\\x1d\\x5b\\xf8\\xfa\\x24\\x0a\\x99\\x27\\x1d\\xf7\\x0f\\xf8\\x6f\\x15\\xfb\\x03\\xf7\\x27\\x05\\xa1\\x7b\"\n\"\\x76\\x58\\x1d\\x99\\x27\\x1d\\xca\\xf9\\x51\\x30\\x0a\\x99\\x27\\x1d\\xf7\\x56\\xf8\\xfa\\x8b\\x1d\\x99\\xf7\\x85\\x7f\\x15\\x87\\xa1\\x9f\\x89\\xa0\\x1b\\xd2\"\n\"\\xcd\\xa1\\xb6\\xc4\\x1f\\xa8\\xa1\\x9c\\x9d\\xab\\xb7\\x6d\\xa1\\x18\\x59\\x50\\x6f\\x74\\x61\\x79\\x08\\x6e\\x0a\\xfb\\x0b\\xc9\\x33\\xf7\\x01\\x67\\x1f\\x4e\"\n\"\\x31\\x3e\\x0a\\x92\\x7b\\x0a\\x99\\x24\\x1d\\xfb\\x2d\\xf9\\x67\\x8c\\x0a\\x99\\x24\\x1d\\x73\\xf9\\x67\\x23\\x1d\\x99\\x24\\x1d\\xfb\\x77\\xf9\\xf2\\x15\\x68\"\n\"\\x6e\\x6e\\x66\\x36\\x1d\\x99\\x24\\x1d\\x58\\xf9\\x67\\x37\\x1d\\xfb\\x9c\\x27\\x0a\\x5b\\xf9\\x6a\\xa8\\x1d\\xfb\\x9c\\x27\\x0a\\xf4\\xf9\\x67\\x23\\x1d\\xfb\"\n\"\\x9c\\x27\\x0a\\x2a\\xf9\\xf2\\x24\\x0a\\xfb\\x9c\\x27\\x0a\\xe9\\xf9\\x67\\x37\\x1d\\xd0\\x2e\\x0a\\xd9\\xf9\\x26\\x8b\\x1d\\xd0\\x26\\x1d\\x7e\\xd3\\x8d\\x0a\"\n\"\\xd0\\x26\\x1d\\xf7\\x0f\\xd3\\x23\\x1d\\xd0\\x26\\x1d\\x2b\\xf7\\x67\\x24\\x0a\\xd0\\x26\\x1d\\xeb\\xd3\\x15\\xfb\\x03\\xf7\\x27\\x05\\xa1\\x7b\\x76\\x97\\x78\"\n\"\\x1b\\x73\\x76\\x76\\x73\\x7c\\x97\\x7a\\xa1\\x7c\\x1f\\xf7\\x19\\x32\\x05\\x0e\\xd0\\x26\\x1d\\xf7\\x2f\\xf7\\x67\\x7a\\x0a\\x81\\xa5\\x97\\x88\\x9d\\x1b\\xc7\"\n\"\\xae\\xae\\xdf\\xa2\\x1f\\x0e\\x2a\\x36\\x0a\\xf8\\x79\\xf9\\x47\\x20\\x0a\\xd0\\x21\\x0a\\xfb\\xe3\\xda\\x15\\x76\\x0a\\xd0\\x21\\x0a\\xfb\\x41\\xda\\x15\\xbe\"\n\"\\x06\\x35\\xf7\\x42\\x05\\x3a\\x2a\\x0a\\xd0\\x21\\x0a\\xfc\\x1a\\xf7\\x6e\\x24\\x0a\\xd0\\x21\\x0a\\xfb\\x55\\xda\\x15\\xfb\\x03\\xf7\\x27\\x05\\xa1\\x7a\\x77\"\n\"\\x58\\x1d\\x61\\x2d\\x0a\\xf7\\x60\\xf7\\x22\\x29\\x0a\\x61\\x2d\\x0a\\xf7\\x2b\\xf7\\xad\\x15\\x68\\x6e\\x6d\\x67\\x36\\x1d\\x61\\x3f\\x1d\\xc3\\xfa\\x15\\xed\"\n\"\\x1d\\xe2\\xfb\\x42\\x05\\xde\\x06\\x0e\\x25\\x1d\\x91\\xeb\\x29\\x1d\\x25\\x1d\\xf7\\x1a\\xeb\\x15\\xbe\\x06\\x35\\xf7\\x42\\x05\\x39\\x06\\xfb\\x33\\xfb\\x42\"\n\"\\x05\\xc4\\x06\\xf7\\x17\\xea\\x05\\x0e\\x25\\x1d\\x42\\xf7\\x7f\\x92\\x1d\\x25\\x1d\\xf7\\x07\\xeb\\xa2\\x0a\\x7a\\xa1\\x7d\\x1f\\xf7\\x18\\x32\\x05\\x0e\\x25\"\n\"\\x1d\\xbf\\xf7\\xe2\\x30\\x0a\\x25\\x1d\\xf7\\x4c\\xf7\\x7f\\x15\\x6c\\x7c\\x7e\\x80\\x74\\x1b\\x80\\x7b\\x90\\x96\\x70\\x1f\\x9d\\x62\\x6b\\x93\\x73\\x5b\\x1d\"\n\"\\x80\\xa6\\x96\\x89\\x9e\\x1b\\xc7\\xad\\xae\\xdf\\xa2\\x1f\\x0e\\xfb\\x65\\xf7\\x16\\x7f\\x15\\x8a\\x92\\x90\\x8b\\x91\\x1b\\xb7\\xb7\\x9b\\xa8\\xac\\x1f\\xa5\"\n\"\\xa1\\x9b\\x9e\\xae\\xbd\\x6f\\x9d\\x18\\x48\\x5b\\x6c\\x74\\x60\\x1b\\x5f\\x6e\\xaf\\xc0\\xca\\xa5\\xe5\\xaf\\xcc\\x1f\\xba\\xa6\\xa7\\xa3\\xaa\\x1b\\x97\\x95\"\n\"\\x84\\x81\\x87\\x89\\x85\\x85\\x82\\x1f\\x82\\x7b\\x87\\x80\\xbf\\x1d\\xfb\\x38\\xfb\\x34\\x47\\xae\\x57\\xc8\\x75\\x1e\\x4f\\x33\\x98\\x7f\\x05\\x8e\\x97\\x92\"\n\"\\x8c\\x96\\x45\\x1d\\xfb\\x65\\x22\\x0a\\xeb\\xf7\\xc2\\x29\\x1d\\xfb\\x65\\x22\\x0a\\xf7\\x74\\xf7\\xc2\\x23\\x1d\\xfb\\x65\\x22\\x0a\\x9c\\xf8\\x4d\\x24\\x0a\"\n\"\\xfb\\x65\\x22\\x0a\\xf7\\x6f\\xf7\\xc2\\xaa\\x1d\\xfc\\x0b\\x70\\x0a\\x3e\\xf8\\x19\\x29\\x1d\\xfc\\x0b\\xf7\\xa6\\xf8\\x98\\x48\\x0a\\xa9\\xfc\\x6a\\xb4\\x1d\"\n\"\\x51\\x7e\\x4c\\x7f\\x0a\\x0e\\xfc\\x0b\\x70\\x0a\\xfb\\x30\\xf8\\xa4\\x24\\x0a\\xfc\\x0b\\x2c\\x1d\\xa1\\xf8\\x19\\x37\\x1d\\x2a\\x30\\x1d\\x6d\\xf8\\xa9\\x75\"\n\"\\x0a\\x23\\x0a\\x88\\xde\\x15\\x2b\\x1d\\x38\\x1d\\x23\\x0a\\xf7\\x11\\xde\\x15\\xbe\\x06\\x35\\xf7\\x42\\x05\\x3a\\x2a\\x0a\\x23\\x0a\\x34\\xf7\\x72\\x24\\x0a\"\n\"\\x23\\x0a\\xf5\\xde\\x15\\xfb\\x03\\xf7\\x27\\x05\\xa1\\x7a\\x77\\x97\\x78\\x1b\\x73\\x76\\x76\\x73\\x7b\\x97\\x7a\\xa1\\x7d\\x1f\\xf7\\x19\\x32\\x05\\x0e\\x23\"\n\"\\x0a\\xf7\\x43\\xf7\\x72\\x8e\\x1d\\x9e\\x1b\\xc7\\xad\\xae\\xdf\\xa2\\x1f\\x0e\\xfb\\x9c\\x3d\\x1d\\xf7\\x15\\xf8\\x12\\x20\\x0a\\x2a\\x26\\x0a\\xfb\\x54\\xf8\"\n\"\\x20\\x29\\x0a\\x2a\\x26\\x0a\\x47\\xf8\\x20\\x23\\x1d\\x2a\\x26\\x0a\\xfb\\xa8\\xf8\\xab\\x92\\x1d\\x2a\\x26\\x0a\\x38\\xf8\\x20\\xaa\\x1d\\xfb\\x65\\x31\\x1d\"\n\"\\xf7\\x7a\\xd9\\x29\\x0a\\xfb\\x65\\x31\\x1d\\xf7\\x26\\xf7\\x6d\\x24\\x0a\\xfb\\x9c\\x34\\x1d\\xf8\\x04\\xf7\\x85\\x20\\x0a\\xfb\\xae\\xf7\\xbf\\xf7\\xfa\\x15\"\n\"\\x66\\x73\\x82\\x82\\x83\\x1b\\x88\\x89\\x8e\\x8f\\x90\\x8d\\x91\\x98\\xb3\\x1f\\xa1\\xca\\x05\\x94\\xa9\\x91\\xa4\\x9a\\x1a\\xa9\\x7a\\x9c\\x6e\\x61\\x71\\x76\"\n\"\\x3d\\x55\\x1e\\xac\\xef\\x5e\\x81\\x5d\\x85\\x67\\x8a\\x19\\x74\\x93\\x07\\x9d\\x91\\x88\\x83\\x83\\x86\\x79\\x65\\xfb\\x1b\\x1f\\x7f\\x5e\\x85\\x74\\x05\\xd9\"\n\"\\x06\\xa1\\xdb\\x94\\xa3\\x9f\\xb3\\x08\\xc1\\xa5\\xa7\\xab\\x9e\\x1b\\x90\\x91\\x86\\x87\\x88\\x8a\\x87\\x8a\\x87\\x1f\\x6a\\x29\\x05\\x81\\x6c\\x84\\x6b\\x7c\"\n\"\\x1a\\x73\\x9c\\x7c\\xa5\\xb1\\xa4\\xa0\\xc7\\xaf\\x1e\\x0e\\x75\\xf8\\xe7\\xf8\\x55\\x15\\x2f\\x06\\x46\\x1d\\xa9\\xa0\\xa1\\xaa\\xbc\\x65\\xaa\\x4e\\x57\\x5a\"\n\"\\x76\\x63\\x68\\x1e\\x61\\x5d\\x77\\x62\\x6f\\x26\\x08\\x42\\x06\\x82\\x61\\x05\\xd4\\x06\\x36\\xfc\\x0e\\x8b\\x8b\\x88\\x7d\\x08\\xfb\\x28\\x6c\\x78\\x62\\x63\"\n\"\\x1b\\x81\\x83\\x90\\x91\\x8d\\x8c\\x8e\\x8e\\x8f\\x1f\\x93\\x97\\x8f\\x96\\x96\\x1a\\xa3\\x73\\xa3\\x71\\x70\\x73\\x72\\x6e\\x5b\\xb2\\x6c\\xc7\\xb5\\xb0\\x99\"\n\"\\xa8\\xaa\\x1e\\xb2\\xaf\\xa7\\xc0\\xab\\xf2\\xa4\\xda\\x96\\xb9\\xc1\\xf7\\x90\\x08\\xe5\\x06\\xfb\\x74\\xb5\\x15\\x2f\\x06\\x46\\x1d\\xa9\\xa0\\xa1\\xaa\\xbc\"\n\"\\x65\\xaa\\x4e\\x57\\x5a\\x75\\x64\\x68\\x1e\\x61\\x5d\\x78\\x62\\x6e\\x26\\x08\\x42\\x06\\x82\\x61\\x05\\xd4\\x06\\x5b\\xfb\\x66\\x68\\xfb\\x32\\x86\\x73\\x42\"\n\"\\x1d\\xb5\\xb0\\x99\\xa8\\xaa\\x1e\\xb3\\xaf\\xa6\\xc0\\xac\\xf2\\xa3\\xda\\x96\\xb9\\xc1\\xf7\\x90\\x08\\xe5\\x06\\x0e\\xf7\\x69\\xf8\\x67\\xf9\\x00\\x15\\xba\"\n\"\\x64\\xaa\\x4f\\x57\\x5a\\x75\\x64\\x68\\x1e\\x61\\x5d\\x78\\x62\\x6e\\x26\\x08\\x42\\x06\\x82\\x61\\x05\\xd4\\x06\\x56\\xfb\\x7f\\x6e\\xfb\\x12\\x85\\x6c\\x42\"\n\"\\x1d\\xc9\\xbe\\xaa\\xc9\\xb1\\x1e\\x89\\x85\\x8b\\x87\\x85\\x1a\\x5f\\xb4\\x6a\\xc3\\xbc\\xbc\\xa4\\xb5\\xac\\x1e\\xaa\\xb2\\xac\\xd1\\x98\\xbe\\xc1\\x0a\\x7e\"\n\"\\x58\\x88\\x7d\\x7a\\x1a\\x62\\xa6\\x73\\xb7\\xc7\\xb1\\xaa\\xf4\\xd0\\x1e\\x75\\x98\\x05\\x53\\x64\\x74\\x74\\x7b\\x1b\\x84\\x83\\x93\\x93\\x96\\x93\\xae\\x98\"\n\"\\xbc\\x1f\\x8c\\x8f\\xd4\\xf7\\xaf\\x49\\x86\\x7b\\x8a\\x42\\x87\\x19\\xfb\\x0a\\x06\\xac\\xf7\\x0b\\x97\\xa8\\xab\\xb2\\x08\\xa2\\x9e\\xad\\x99\\xb0\\x1b\\x9c\"\n\"\\x94\\x86\\x80\\x86\\x8a\\x88\\x85\\x84\\x1f\\x80\\x7f\\x87\\x80\\x7e\\x1a\\x6c\\xa4\\x73\\xac\\xac\\xa3\\xa3\\xac\\xc3\\x51\\xb2\\x37\\x3d\\x49\\x6b\\x51\\x61\"\n\"\\x1e\\xfb\\x66\\xfb\\x38\\x15\\x46\\x1d\\x94\\x92\\x8d\\x8f\\x93\\x1e\\x7c\\x71\\x82\\x73\\x72\\x43\\x08\\x80\\x61\\x15\\x2f\\xfc\\x2f\\x05\\xfb\\x20\\x6c\\x7c\"\n\"\\x70\\x5f\\x1b\\x7f\\x86\\x8e\\x91\\x8f\\x8d\\x8e\\x90\\x91\\x1f\\x94\\x95\\x8e\\x91\\x96\\x1a\\xa7\\x75\\xa0\\x6e\\x7f\\x80\\x87\\x83\\x82\\x1e\\xba\\xf7\\x01\"\n\"\\xa7\\xf0\\xc5\\xf7\\xae\\x08\\x0e\\xf7\\x67\\xce\\xf8\\x55\\x15\\x82\\x61\\x05\\xd4\\x06\\x56\\xfb\\x7f\\x6e\\xfb\\x12\\x85\\x6c\\x42\\x1d\\xcd\\xb3\\xa5\\xd3\"\n\"\\xbb\\x1e\\x89\\x84\\x8b\\x87\\x85\\x1a\\x5b\\xb2\\x6a\\xc5\\xf2\\xd4\\xea\\xf7\\x53\\xba\\x1e\\xda\\xf7\\xda\\x05\\xf7\\x27\\x06\\x3c\\xfb\\xd5\\x05\\x88\\x7e\"\n\"\\x89\\x7f\\x7f\\x1a\\x69\\xa8\\x73\\xb6\\xc6\\xaf\\xa9\\xf4\\xcf\\x1e\\x77\\x96\\x05\\x56\\x67\\x75\\x75\\x79\\x1b\\x82\\x83\\x93\\x94\\x8e\\x8c\\x92\\x8e\\x95\"\n\"\\x1f\\xf7\\x2b\\xf8\\xee\\x28\\x7f\\x05\\x9a\\x3d\\x8b\\x8b\\x75\\x1b\\x40\\x51\\x6f\\x52\\x60\\x1f\\xbc\\x8a\\x66\\xa9\\x4e\\x1b\\x57\\x5a\\x76\\x63\\x68\\x1f\"\n\"\\x61\\x5d\\x78\\x62\\x6e\\x26\\x08\\xf7\\x07\\x16\\x9d\\xd2\\x05\\xee\\xa4\\xa9\\xbd\\xaf\\x5e\\x1d\\x7f\\x66\\x1d\\x93\\x91\\x8c\\x8e\\x92\\x1e\\x7f\\x75\\x83\"\n\"\\x74\\x73\\x40\\x08\\x81\\x61\\x15\\x2f\\xfc\\x26\\x05\\xfb\\x24\\x6a\\x7c\\x6c\\x68\\x1b\\x7d\\x83\\x90\\x92\\x8f\\x8c\\x8e\\x90\\x91\\x1f\\x92\\x95\\x8e\\x93\"\n\"\\x95\\x1a\\xa7\\x78\\x9d\\x6f\\x7c\\x7f\\x87\\x82\\x80\\x1e\\xbc\\xf7\\x03\\xa1\\xdd\\xc9\\xf7\\xbe\\x08\\xf8\\x2f\\xb5\\x15\\xfb\\x2b\\x06\\xa0\\xe5\\x9a\\xb5\"\n\"\\xa0\\xae\\x08\\xb1\\xa3\\xaa\\xa0\\xac\\x1b\\x9d\\x9d\\x82\\x81\\x89\\x8a\\x8a\\x86\\x83\\x1f\\x80\\x7b\\x87\\x82\\x7e\\x1a\\x7b\\x91\\x7f\\x9a\\x80\\x1e\\x0e\"\n\"\\xec\\xa4\\xf7\\xa3\\x15\\xf7\\x72\\x9e\\x06\\x59\\x82\\x8f\\xa0\\x94\\x8d\\x98\\x8f\\x97\\x1f\\xec\\xf7\\xdb\\x45\\x7d\\x6a\\x85\\x43\\x80\\x19\\x89\\x77\\x05\"\n\"\\x8c\\xa4\\x99\\x8c\\x8f\\x1b\\x99\\x97\\x81\\x80\\x81\\x6c\\x23\\x70\\x39\\x1f\\x85\\x78\\x85\\x7a\\x8a\\x85\\x08\\x4b\\x7b\\x7c\\x7d\\x53\\x1b\\xf8\\xf3\\xf8\"\n\"\\x16\\x15\\x52\\x06\\xfc\\x3f\\xfd\\x46\\x05\\xc4\\x06\\xf7\\xe6\\xbb\\x1d\\x69\\xbb\\x0a\\x42\\x56\\x5d\\x4c\\x6c\\x95\\x74\\xaa\\xb9\\x1d\\x73\\x6e\\x73\\x1e\"\n\"\\x4c\\x4f\\x15\\xb2\\x63\\x9b\\x6f\\x6d\\x1a\\x64\\x71\\x6f\\x69\\x67\\x76\\xa3\\xb4\\xb5\\x9f\\xab\\xb5\\xa5\\x1e\\x0e\\xec\\xf7\\x17\\xf8\\x72\\x15\\xce\\x88\"\n\"\\xab\\x6e\\x51\\x1a\\x59\\x6d\\x64\\x64\\x79\\x88\\x8d\\xa7\\x77\\x1e\\x9d\\x7d\\x7e\\x94\\x7b\\x1b\\x76\\x7c\\x7a\\x74\\x6c\\xaa\\x79\\xc0\\xf2\\xdf\\xd0\\xe0\"\n\"\\xb1\\x7e\\xa2\\x64\\xa5\\x1f\\x92\\x8f\\x05\\xc3\\xaa\\x99\\x9d\\xae\\x1a\\xb9\\x61\\xad\\x53\\x57\\x64\\x74\\x54\\x65\\x1e\\x99\\x7e\\x05\\xaa\\xa6\\x9d\\x95\"\n\"\\xa7\\x1b\\xac\\xa0\\x77\\x6c\\x61\\x65\\x71\\x3b\\x7c\\x1f\\xf8\\x87\\xf7\\x4c\\x15\\x52\\x06\\xfc\\x3f\\xfd\\x46\\x05\\xc5\\x06\\xf7\\xe5\\xf7\\x76\\x15\\x42\"\n\"\\x6f\\x69\\x67\\x58\\x1a\\x52\\xbe\\x62\\xd3\\xdb\\xc9\\xc2\\xd0\\xb0\\x79\\xb0\\x6a\\xab\\x1e\\xcb\\xa8\\xa1\\xa2\\xb4\\x1a\\xbf\\x5f\\xaf\\x4b\\x42\\x56\\x5d\"\n\"\\x4c\\x6c\\x96\\x74\\xa9\\xb9\\x1d\\x74\\x6e\\x72\\x1e\\x4c\\x4f\\x15\\xb1\\x65\\x9c\\x6d\\x6d\\x1a\\x65\\x71\\x6e\\x69\\x67\\x76\\x50\\x0a\\xec\\xea\\xf8\\x94\"\n\"\\x15\\x8c\\x92\\x90\\x8b\\x8e\\x1b\\xcc\\xb9\\x5c\\x49\\x5c\\x73\\x63\\x6e\\x81\\x7b\\x91\\x94\\x7d\\x1f\\x9e\\x6f\\x89\\x8c\\x7f\\x1b\\x7a\\x7c\\x7d\\x7b\\x73\"\n\"\\xa5\\x7a\\xaf\\xec\\xd5\\xd7\\xed\\xb6\\x7a\\xaa\\x65\\xa5\\x1f\\x74\\x9b\\x79\\x91\\x69\\x8e\\x9d\\xae\\x18\\xf7\\x1b\\x06\\x9e\\xce\\x05\\xfb\\x2e\\x06\\xf8\"\n\"\\x51\\x89\\x15\\x52\\x06\\xfc\\x3f\\xfd\\x46\\x05\\xc5\\x06\\xf7\\xe5\\xd6\\x1d\\xc1\\xd1\\xb0\\x79\\xb0\\x6a\\xab\\x1e\\xcc\\xa8\\xa1\\xa2\\xb4\\x1a\\xbf\\x5f\"\n\"\\xaf\\x4a\\x42\\x56\\x5d\\x4c\\x6c\\x95\\x75\\xaa\\x67\\x1e\\xe1\\xb2\\x15\\x61\\xb1\\x81\\x9b\\xa6\\x1a\\xa9\\x9f\\xa0\\xa7\\xa8\\x9c\\x77\\x6a\\x6c\\x7e\\x72\"\n\"\\x6e\\x74\\x1e\\x4c\\x4f\\x15\\xb1\\x65\\x9c\\x6d\\x6d\\x1a\\x64\\x72\\x6f\\x68\\x68\\x75\\x50\\x0a\\xec\\xf7\\xb8\\xf8\\xf2\\x15\\xfb\\x58\\xfb\\xd7\\xa9\\x7b\"\n\"\\xf7\\x8a\\xf8\\x2d\\x05\\xfb\\x74\\x06\\x57\\x25\\x05\\xa0\\x06\\xa3\\x97\\xa1\\x93\\xc1\\x1b\\xf8\\x10\\xd1\\x15\\x52\\x06\\xfc\\x3f\\xfd\\x46\\x05\\xc4\\x06\"\n\"\\xf8\\x02\\xbb\\x1d\\x6a\\xbb\\x0a\\x41\\x56\\x5d\\x4c\\x6c\\x96\\x74\\xa9\\x68\\x1e\\xe1\\xb2\\x15\\x61\\xb1\\x81\\x9b\\xa7\\x1a\\xa8\\x9f\\xa0\\xa7\\xa8\\x9c\"\n\"\\x77\\x6a\\x6c\\x7f\\x73\\x6d\\x73\\x1e\\x4c\\x4f\\x15\\xb1\\x64\\x9c\\x6e\\x6d\\x1a\\x64\\x71\\x6f\\x69\\x67\\x76\\x50\\x0a\\xf7\\xb7\\x99\\x0a\\x62\\x7a\\x96\"\n\"\\xa5\\x92\\x8c\\x93\\x8e\\x96\\x1f\\x8c\\x8d\\xca\\xf7\\x85\\x05\\xf7\\x02\\x84\\xa2\\x7c\\x4b\\x1a\\x83\\x8b\\x82\\x8a\\x80\\x71\\x1d\\xf7\\x48\\xf8\\x4d\\xa6\"\n\"\\x0a\\x4d\\x0a\\x99\\x27\\x1d\\xf7\\x55\\xf9\\x14\\x15\\x49\\x6c\\x68\\x57\\x0a\\x06\\x57\\x8e\\x79\\x97\\x71\\x1e\\x5a\\x1d\\x99\\x79\\x1d\\x99\\x7a\\x1d\\xfb\"\n\"\\x35\\x51\\x15\\x99\\xa9\\x92\\x9c\\x90\\x93\\x47\\x1d\\x84\\x6c\\x88\\x51\\x0a\\x89\\x7a\\x8b\\x87\\x89\\x73\\x08\\x0e\\x99\\x27\\x1d\\xf7\\x88\\xf8\\xdd\\x25\"\n\"\\x0a\\x99\\xf7\\xf5\\xf7\\x64\\x15\\x95\\x41\\x90\\x62\\x81\\x1a\\x62\\x7c\\x80\\x4b\\x85\\x1e\\x72\\xf7\\x92\\x9e\\x1d\\x62\\x75\\xa1\\xb6\\x9a\\x8d\\x95\\x92\"\n\"\\x99\\x1f\\xa4\\x07\\x49\\x90\\x86\\x90\\x7e\\xd7\\x2b\\xf8\\xd0\\x18\\x72\\x06\\xfc\\x08\\xfc\\xe0\\x6b\\x5a\\x7c\\x7e\\x67\\x83\\x19\\x72\\xf7\\x58\\xa4\\x07\"\n\"\\x5d\\x78\\x96\\xa3\\x99\\x90\\x9a\\x95\\x9c\\x1f\\xc6\\xf1\\x05\\xa2\\xb3\\x15\\xf7\\x28\\xf7\\x87\\xb0\\xfb\\x87\\x05\\x0e\\x99\\xf8\\xe5\\xa4\\x15\\xcd\\x1d\"\n\"\\x6a\\x59\\x7d\\x7f\\x67\\x83\\x19\\x72\\xf7\\x58\\xa4\\x07\\x5d\\x78\\x96\\xa3\\x99\\x90\\x9a\\x95\\x9c\\x1f\\xc6\\xf1\\x05\\xf7\\x6b\\x06\\xde\\x1d\\xf7\\xc4\"\n\"\\x07\\xfc\\x44\\xf7\\x8c\\xd0\\x1d\\xcb\\xf8\\xe7\\x15\\x51\\x5a\\x69\\x64\\x60\\xba\\x69\\xc6\\xc7\\xba\\xad\\xb5\\xb3\\x5b\\xad\\x51\\x1f\\x89\\x69\\x15\\xac\"\n\"\\xa6\\x78\\x74\\x75\\x6f\\x79\\x6b\\x6c\\x71\\x9e\\xa0\\xa2\\xa5\\x9e\\xaa\\x1f\\x60\\xaf\\x15\\xf7\\x2c\\xc8\\x05\\xa9\\x97\\x94\\x93\\x98\\x1a\\x9d\\x75\\x9a\"\n\"\\x71\\x79\\x7c\\x83\\x70\\x66\\x1e\\xfb\\x0e\\x2f\\x05\\x0e\\x99\\x6f\\x1d\\x99\\x33\\x1d\\xfb\\x67\\xf7\\xa7\\xa9\\x1d\\x99\\x33\\x1d\\x97\\xf8\\x55\\x20\\x0a\"\n\"\\xa0\\x33\\x1d\\x44\\xf7\\xa7\\x15\\xbf\\x06\\x35\\xf7\\x42\\x05\\x39\\x2a\\x0a\\x99\\x33\\x1d\\xfb\\x46\\xf8\\x32\\xbd\\x1d\\x99\\xaf\\x0a\\x6e\\x77\\x77\\x85\"\n\"\\x1d\\x97\\x1a\\xa3\\x9a\\x9e\\x9f\\x1e\\x99\\x28\\x1d\\xfb\\x9b\\x4b\\x0a\\xe3\\xfb\\x92\\x18\\xfb\\x33\\xfb\\x43\\x54\\x4c\\x60\\x69\\x67\\x82\\x33\\x0a\\xf7\"\n\"\\x61\\x21\\x1d\\x7e\\x06\\x6a\\x79\\x97\\xa2\\x9b\\x94\\x9c\\xa3\\xa6\\x1f\\x0e\\xd0\\x65\\x0a\\xf8\\x34\\xf9\\x9a\\x15\\x53\\x06\\xfb\\x1b\\x2a\\x2f\\xec\\x05\"\n\"\\x5a\\x06\\xe3\\xfb\\x42\\x05\\xdd\\x06\\x0e\\xd0\\x5c\\x0a\\x99\\xac\\x16\\xf8\\xee\\x06\\xfb\\xad\\xf9\\x44\\x05\\xfb\\x6b\\xfc\\xe6\\x15\\xf7\\x40\\xf8\\x09\"\n\"\\xf7\\x2f\\xfc\\x09\\x05\\x0e\\x99\\x24\\x1d\\x98\\xfa\\x0c\\x38\\x0a\\x99\\x24\\x1d\\xbe\\xfa\\x18\\x20\\x0a\\x99\\x24\\x1d\\xfb\\x19\\xf9\\xf5\\x2a\\x1d\\x99\"\n\"\\x24\\x1d\\xc0\\xf9\\xd5\\x25\\x0a\\xd0\\xf8\\x4d\\xc8\\x15\\x72\\x3c\\x05\\x37\\x6f\\x57\\x41\\x6c\\x1b\\x80\\x7f\\x92\\x90\\x8e\\x8c\\x8c\\x8f\\x91\\x1f\\x92\"\n\"\\x96\\x8e\\xad\\x0a\\xee\\xcd\\xd4\\xf7\\x31\\xb8\\x1e\\xf7\\x18\\xf8\\x68\\x8a\\x0a\\xfb\\x6b\\xf8\\x65\\x05\\xfb\\x57\\x72\\x06\\xc2\\x86\\x94\\x85\\x9e\\x5f\"\n\"\\xfb\\x0c\\xfc\\x2f\\x18\\x64\\xfb\\x17\\x84\\x80\\x54\\x80\\x08\\x72\\xf7\\x64\\xa4\\x07\\x50\\x90\\x76\\x9a\\xb2\\x1a\\x9e\\x91\\xac\\x97\\xb5\\x1e\\xee\\xf7\"\n\"\\xf8\\x05\\x0e\\x99\\xf8\\xde\\xf7\\x56\\x15\\x72\\x90\\x68\\x52\\x76\\x72\\x64\\x70\\x19\\x64\\x53\\x47\\x78\\x35\\x1b\\x60\\x79\\x95\\xa3\\x92\\x8d\\x96\\x91\"\n\"\\x9f\\x1f\\x8d\\x8f\\x8c\\x92\\x8d\\x93\\x8d\\x91\\x18\\xc3\\xf7\\x65\\x05\\xf7\\x06\\x89\\xa9\\x78\\x47\\x1a\\x7d\\x8a\\x7f\\x88\\x78\\x1e\\xa7\\x86\\xd5\\xf7\"\n\"\\xa5\\x6f\\x8f\\x5c\\x2d\\x71\\x7e\\xfb\\x18\\x8c\\x19\\xc8\\xf7\\x73\\x05\\xae\\x95\\x97\\x94\\xb4\\x1b\\xd3\\xc2\\x7c\\x70\\xa6\\x1f\\xa2\\x73\\x92\\x72\\x4d\"\n\"\\x1a\\xa6\\x86\\xb6\\xf7\\x52\\x05\\xfc\\xb0\\x72\\x06\\xae\\x85\\xa0\\x87\\xc4\\x0a\\x80\\x1a\\x7d\\x87\\x73\\x85\\x75\\x1e\\xfb\\x0f\\xfc\\x55\\x7b\\x56\\x7f\"\n\"\\x80\\x57\\x83\\x19\\x72\\xf8\\x90\\x07\\x69\\x5e\\x82\\x78\\x6f\\x31\\x0a\\xb4\\x9e\\x8f\\x9e\\x98\\xb7\\x1f\\x0e\\x99\\xf7\\xd2\\xf7\\xdf\\x15\\xca\\x06\\xbf\"\n\"\\xa8\\x73\\x62\\x83\\x8b\\x89\\x88\\x74\\xc2\\x1d\\xcf\\xf7\\x96\\x05\\xbe\\xb0\\x1d\\x7a\\x72\\x1a\\x84\\x95\\x1d\\x67\\x75\\x9a\\xa3\\x93\\x8d\\x97\\x8e\\x98\"\n\"\\x1f\\x0e\\xf7\\x10\\xf7\\x30\\x41\\x1d\\xf7\\xe8\\x4e\\x15\\xca\\x06\\xbf\\xa8\\x73\\x61\\x84\\x8b\\x87\\x88\\x76\\x1f\\xa0\\x06\\xc8\\xf7\\x7a\\x05\\x76\\x06\"\n\"\\x4a\\x6e\\x5a\\x6c\\x43\\x1b\\x61\\x06\\xd0\\xf7\\x96\\x05\\xbd\\x06\\xe7\\x8e\\xca\\x5e\\x91\\x40\\x08\\x9d\\x06\\xb4\\xf7\\x2e\\x05\\xfc\\x6f\\x06\\x86\\x75\"\n\"\\x05\\xa3\\x06\\xa5\\x8a\\x9c\\x7b\\x70\\x1a\\x84\\x8a\\x87\\xbf\\x0a\\x69\\x88\\x19\\x84\\x20\\x1d\\xf8\\x71\\x06\\xca\\xf7\\x3a\\x05\\x78\\x06\\x37\\x37\\x30\"\n\"\\x5c\\x3c\\x1b\\x67\\x75\\x9a\\xa3\\x93\\x8d\\x96\\x8f\\x99\\x1f\\x0e\\xf7\\x11\\x64\\x0a\\xfb\\xbc\\x06\\x85\\x53\\x1d\\x0e\\xf7\\x86\\xf7\\x21\\xf8\\x1c\\x15\"\n\"\\x99\\xaa\\x93\\x9c\\x8f\\x92\\x47\\x1d\\x85\\x6c\\x87\\x51\\x0a\\x8a\\x7a\\x8a\\x87\\x89\\x73\\x08\\xf7\\xe6\\x44\\x15\\xf7\\x7a\\x06\\x4d\\xfb\\x7d\\x34\\x0a\"\n\"\\x66\\x20\\x1d\\xf7\\xbf\\x21\\x1d\\x72\\x06\\x71\\x8c\\x7a\\x9b\\xa5\\x1a\\x91\\x8c\\x91\\x8c\\x91\\x53\\x0a\\xae\\x8e\\x19\\x97\\x21\\x1d\\xfb\\xa8\\x20\\x1d\"\n\"\\xa5\\x06\\xa5\\x9c\\x7a\\x72\\x83\\x8a\\x86\\x8a\\x85\\x1f\\x51\\xfb\\x6d\\x05\\xfb\\x7a\\x06\\xc4\\xf7\\x68\\x97\\xb8\\x9c\\x9d\\xae\\x8e\\x19\\xb2\\x28\\x1d\"\n\"\\xfb\\xbd\\x94\\x1d\\x22\\x1d\\xda\\x1d\\x0e\\xf7\\xb5\\xf8\\x2d\\x15\\x8c\\x8e\\x05\\xf7\\x24\\xc3\\xde\\xe8\\xd2\\x1b\\xc7\\xb1\\x50\\x2e\\x1f\\x80\\x9e\\x07\"\n\"\\xbc\\xf7\\x5e\\x05\\x78\\x06\\x7a\\x82\\x81\\x84\\x7d\\x1b\\x84\\x81\\x8d\\x8f\\x81\\x1f\\x9b\\x59\\x7e\\x8e\\x6e\\x1b\\xfb\\x17\\xfb\\x25\\xfb\\x0d\\xfb\\x33\"\n\"\\x51\\x1f\\x5e\\x06\\x6a\\x59\\x05\\xcb\\x06\\x85\\x78\\x87\\x7b\\x88\\x79\\x08\\x5b\\x06\\x6a\\x59\\x05\\xd9\\x06\\x8a\\x86\\x8b\\x84\\x8b\\x1a\\xfb\\x31\\xd3\"\n\"\\x2f\\xf7\\x0d\\xdf\\xce\\xac\\xca\\xb5\\x1e\\x98\\xb5\\x05\\x4a\\x5b\\x54\\x6c\\x4a\\x1b\\x43\\x62\\xc4\\xef\\xa0\\x8c\\x9d\\x8f\\xa2\\x1f\\xf7\\x01\\x06\\xac\"\n\"\\xbd\\x05\\xfb\\x1b\\x06\\x8f\\x9d\\x91\\xa1\\x90\\x98\\x08\\xf7\\x3b\\x06\\xac\\xbd\\x05\\x0e\\x5a\\xf7\\x8c\\xa5\\x15\\x57\\x8d\\x79\\x96\\xa6\\x1a\\x9a\\x8e\"\n\"\\x9d\\x97\\xb8\\x1e\\xe6\\xf8\\x07\\x99\\xc3\\x92\\xa0\\x95\\x98\\x19\\x98\\x94\\xa4\\x91\\xb9\\x1b\\xda\\xb5\\x7f\\x6b\\xaa\\x1f\\xa9\\x6d\\x96\\x6c\\x8e\\x51\"\n\"\\xa7\\x92\\x18\\xbb\\xf7\\x56\\x05\\xfc\\xdf\\x06\\x8c\\x71\\x05\\xc0\\x88\\x9d\\x81\\x6f\\x1a\\x7d\\x8a\\x86\\x82\\x68\\x1e\\x2a\\xfc\\x1e\\x72\\x25\\x7f\\x7b\"\n\"\\x56\\x88\\x19\\x71\\xf7\\xba\\x07\\x0e\\xd0\\x35\\x0a\\xfb\\x0f\\xf8\\xdc\\x38\\x0a\\xd8\\xf8\\xe6\\xf9\\x67\\x48\\x0a\\xf7\\x5c\\xfc\\x7c\\x78\\x1d\\x5f\\x69\"\n\"\\x91\\x5e\\x1b\\x3d\\x99\\x1d\\xd2\\x92\\x91\\xc0\\x90\\x19\\x0e\\xd0\\x35\\x0a\\xfc\\xbe\\xfd\\x08\\x35\\x1d\\xd0\\x35\\x0a\\xfb\\x81\\xf8\\xc5\\xbd\\x1d\\xf7\"\n\"\\x11\\xf7\\x34\\xf8\\x72\\x15\\x23\\xfc\\x11\\x4f\\x1d\\xa4\\x07\\x54\\x8d\\x79\\x95\\xa8\\x1a\\x9a\\x8f\\x9f\\x9a\\xbf\\x1e\\x91\\xa1\\xde\\xf7\\xc3\\x05\\xca\"\n\"\\x06\\x97\\xb7\\x05\\x4c\\x06\\x99\\xbd\\x9b\\xc0\\x99\\x97\\xbe\\x92\\x19\\xa4\\xfb\\xbe\\x72\\x07\\xab\\x86\\x99\\x8a\\x95\\x87\\x92\\x87\\x19\\x91\\x87\\x8f\"\n\"\\x83\\x80\\x1a\\x7f\\x86\\x6c\\x86\\x79\\x1e\\x84\\x73\\x05\\xfb\\x83\\x06\\x99\\xbd\\x9b\\xc2\\x9f\\x9a\\xcc\\x8d\\x19\\xa4\\xfb\\xd1\\x72\\x07\\xae\\x85\\xa0\"\n\"\\x87\\x91\\x86\\x08\\x92\\x87\\x8f\\x82\\x7f\\x1a\\x7f\\x87\\x79\\x84\\x6f\\x1e\\x84\\x73\\x05\\x4b\\x06\\x7e\\x5f\\x05\\xf7\\x68\\x16\\xf7\\x84\\x06\\x6e\\x22\"\n\"\\x05\\xfb\\x83\\x06\\x0e\\xf7\\x19\\xf9\\x26\\xd5\\x1d\\x91\\x8d\\x93\\x8d\\x93\\xf7\\x01\\xf8\\x21\\x18\\x9b\\xc0\\x99\\x97\\xbe\\x92\\x08\\x56\\x1d\\x5c\\xfb\"\n\"\\x41\\x05\\xfb\\x83\\x06\\xc1\\xf7\\x5b\\xab\\x1d\\x86\\x91\\x87\\x5c\\x1d\\x78\\x84\\x70\\x1e\\xfb\\x0e\\xfc\\x55\\x4f\\x1d\\x07\\x66\\xf9\\x67\\x23\\x1d\\xf7\"\n\"\\x63\\xf7\\xda\\xa1\\x15\\x6f\\x06\\x71\\x8c\\x7a\\x9b\\xa3\\x1a\\x92\\x8c\\x91\\x8d\\x92\\x1e\\xf7\\x21\\xf8\\x7f\\x98\\xb8\\x9d\\x9d\\xae\\x8e\\x19\\x97\\x06\"\n\"\\x92\\xa1\\x05\\xfb\\xa6\\x96\\x0a\\x7a\\x79\\x67\\x88\\x19\\x83\\x20\\x1d\\xf7\\xa8\\x06\\xf7\\xab\\xf9\\x14\\x15\\xa9\\x06\\xa4\\x9c\\x7a\\x73\\x83\\x8a\\x86\"\n\"\\x89\\x84\\x1f\\xfb\\x24\\xfc\\x8a\\x05\\x6a\\x82\\x80\\x7d\\x7a\\x1b\\x80\\x82\\x93\\x95\\x90\\x8d\\x91\\x8e\\x8f\\x1f\\x9d\\xa4\\x8e\\x92\\x9e\\x1a\\xaa\\x76\"\n\"\\x9f\\x6b\\x66\\x6f\\x6a\\x60\\x53\\xb9\\x61\\xca\\xe7\\xd7\\xce\\xf7\\x00\\xaa\\x1e\\xf7\\x09\\xf8\\x2c\\x98\\xb8\\x9e\\x9d\\xae\\x8e\\x19\\x92\\x06\\x92\\xa1\"\n\"\\x05\\xfb\\xa8\\x06\\x0e\\xfb\\x9c\\x27\\x0a\\xf7\\x2a\\xfa\\x0c\\x15\\x49\\x6c\\x67\\xc2\\x0a\\x56\\x8d\\x7a\\x97\\x71\\x1e\\x5f\\xa0\\xb3\\x69\\x1d\\xfb\\x9c\"\n\"\\x27\\x0a\\x82\\xf9\\xf5\\x2a\\x1d\\xfb\\x9c\\x27\\x0a\\xf7\\x59\\xf9\\xd5\\x25\\x0a\\xfb\\x9c\\xf7\\x9c\\x86\\x1d\\xf7\\x7f\\x9e\\x1d\\x64\\x73\\xa1\\xb0\\x9d\"\n\"\\x92\\x9b\\x98\\x96\\x1f\\x0e\\xfb\\x9c\\x80\\x1d\\x0e\\xfb\\x9c\\x80\\x1d\\x56\\xf9\\xd2\\x15\\x68\\xb2\\x0a\\x6a\\x1f\\xf7\\x57\\x16\\x69\\xb2\\x0a\\x69\\x1f\"\n\"\\x0e\\xfb\\x27\\xf7\\x14\\x41\\x1d\\xf7\\xec\\xfc\\x06\\x15\\xda\\x1d\\xf7\\x17\\xf8\\x7f\\x97\\xb8\\x9c\\x32\\x0a\\xfb\\xa3\\x94\\x1d\\x0e\\xfb\\x9c\\xf7\\x9d\"\n\"\\x84\\x1d\\xf7\\x49\\xf9\\xec\\x15\\x6b\\x7c\\x7e\\x81\\x74\\x1b\\x7f\\x7b\\x90\\x96\\x71\\x1f\\x9c\\x62\\x6b\\x94\\x92\\x0a\\xa4\\x98\\x88\\x9d\\x1b\\xc7\\xaf\"\n\"\\xaf\\xde\\xa1\\x1f\\x0e\\xfb\\x28\\xf8\\xa3\\x6a\\x0a\\xbf\\x9a\\x99\\xbc\\x91\\x19\\x7d\\xf1\\x23\\x1d\\x99\\xf7\\xc6\\xf7\\xf5\\x15\\xdc\\xfb\\x97\\x05\\x91\"\n\"\\x7b\\x8c\\x84\\x82\\x1a\\x73\\x7b\\x7b\\x73\\x1e\\x7f\\x20\\x1d\\xf7\\x93\\x4f\\x0a\\xfb\\x03\\xf7\\xdc\\xf7\\x38\\xf7\\x2d\\xc3\\xb8\\xb2\\x9d\\xba\\x90\\x19\"\n\"\\x90\\x3b\\x0a\\x9c\\x98\\x7c\\x78\\x77\\x7b\\x6f\\x71\\x73\\x1f\\xfb\\x4e\\xfb\\x43\\xc4\\xf7\\x6b\\x97\\xb8\\x9d\\x9d\\xad\\x8e\\x19\\xa1\\x21\\x1d\\xfb\\xb1\"\n\"\\x45\\x0a\\xf7\\xa5\\x21\\x1d\\x6c\\x06\\x70\\x7b\\x9c\\xa5\\x93\\x8b\\x8f\\x8d\\x91\\x1f\\x0e\\x99\\x58\\x0a\\xfc\\x3c\\xfc\\x14\\x39\\x0a\\x61\\x2f\\x0a\\xfb\"\n\"\\x60\\xf9\\x6a\\xa9\\x1d\\x99\\xf8\\x09\\xf8\\x56\\x15\\x77\\xfb\\xfc\\x87\\x5e\\x77\\x75\\x64\\x8a\\x19\\x84\\x20\\x1d\\xf7\\x93\\x21\\x1d\\x7f\\x06\\x71\\x7e\"\n\"\\x9f\\xb0\\x1f\\x96\\x07\\xa7\\xf8\\xd0\\x05\\x72\\x06\\xfc\\x36\\xfc\\xc0\\x60\\x52\\x72\\x73\\x77\\x88\\x33\\x0a\\xf7\\x42\\x28\\x1d\\x7c\\x06\\x73\\x7a\\x99\"\n\"\\xa0\\x9a\\x90\\x98\\x9b\\xa0\\x1f\\x0e\\x61\\x2f\\x0a\\x57\\xf8\\x25\\x15\\xf4\\xb9\\xce\\xd8\\xd4\\x1a\\xc0\\x6d\\x60\\x1d\\x67\\x68\\x44\\x65\\x1e\\x0e\\x61\"\n\"\\x2f\\x0a\\xfc\\x46\\xfb\\xd8\\x39\\x0a\\x61\\x2f\\x0a\\x44\\xf8\\x2c\\x2b\\x0a\\xf7\\x80\\x69\\x0a\\xf7\\xaf\\x06\\x9b\\x0a\\x97\\xb8\\x9e\\x9d\\xad\\x8e\\x19\"\n\"\\x9d\\x21\\x1d\\xfb\\x53\\x06\\x0e\\xd0\\x2e\\x0a\\x29\\xf8\\x9e\\x29\\x0a\\xd0\\x2e\\x0a\\xf7\\x11\\xf9\\x4c\\x15\\x53\\x06\\xfb\\x1c\\x2a\\x31\\xec\\x05\\x59\"\n\"\\x06\\xe3\\xfb\\x42\\x05\\xdd\\x06\\x0e\\xd0\\x2e\\x0a\\xfc\\x05\\xfc\\xa4\\x35\\x1d\\xd0\\xf8\\xbc\\xf7\\x67\\x15\\xfb\\x62\\xf8\\x57\\x05\\xfb\\x50\\x06\\x85\"\n\"\\x75\\xae\\x8a\\x9f\\x81\\x9e\\x70\\x19\\xfb\\x14\\xfc\\x77\\xa7\\x1d\\xf7\\x0b\\xf8\\x54\\xf7\\x97\\xfc\\xc6\\x05\\x9f\\x06\\xf7\\x22\\xf8\\xa8\\xa2\\xe0\\x99\"\n\"\\x9d\\xb7\\x90\\x19\\x22\\x1d\\xfb\\x3b\\x20\\x1d\\xb5\\x9e\\x7e\\x71\\x7e\\x89\\x7c\\x86\\x7b\\x1f\\x0e\\xd0\\x26\\x1d\\xf7\\x2d\\xf7\\x81\\x15\\x49\\x6c\\x67\"\n\"\\x73\\x4a\\x1b\\x4b\\x6b\\xa8\\xc8\\x85\\x1f\\x60\\x06\\x56\\x8e\\x7a\\x97\\x71\\x1e\\x5a\\x1d\\xd0\\x26\\x1d\\xfb\\x19\\xd6\\x51\\x1d\\xd0\\x26\\x1d\\xf7\\x4a\"\n\"\\xf7\\x4a\\x15\\xfb\\xd9\\x06\\x7a\\x45\\x05\\xf7\\xda\\x06\\x0e\\xf7\\x18\\xf7\\x11\\x41\\x1d\\xbc\\xfb\\x6f\\x15\\x7e\\xfb\\x41\\x05\\xf7\\x7e\\x06\\xa3\\xe5\"\n\"\\x05\\x6f\\xc0\\x84\\xa9\\xca\\x1a\\xd0\\x99\\xd8\\xa7\\xe1\\x1e\\xf7\\x06\\xb0\\xbb\\xbc\\xd7\\x1b\\xce\\xb5\\x5d\\x42\\x49\\x73\\x29\\x66\\x36\\x1f\\x69\\x3b\"\n\"\\x70\\x60\\x5d\\x59\\x73\\x31\\x18\\xf7\\x83\\x06\\xd6\\xf7\\x41\\x05\\x79\\x06\\x5c\\x49\\x6b\\x7a\\x3b\\x89\\x08\\x36\\x06\\xbe\\xa3\\xac\\xa1\\xb9\\xb3\\x08\"\n\"\\xef\\xe4\\xbc\\xe8\\xef\\x1a\\xf7\\x18\\x30\\xdf\\xfb\\x22\\x44\\x46\\x77\\x66\\x55\\x1e\\x2c\\x4d\\x4a\\xfb\\x0e\\xfb\\x06\\x1a\\x2d\\xbb\\x3d\\xe8\\x52\\x1e\"\n\"\\x49\\x06\\x4a\\x89\\x59\\xac\\x7c\\xc1\\x08\\x0e\\xd0\\xf8\\x70\\xf9\\x34\\x15\\x3a\\x2f\\x67\\x54\\x4b\\x1f\\x25\\x32\\x4a\\xfb\\x23\\xfb\\x17\\x1a\\x4b\\xa1\"\n\"\\x4e\\xb1\\x62\\x1e\\x64\\xae\\xc6\\x75\\xcc\\x1b\\xf7\\x6b\\xf7\\x56\\xf7\\x6b\\xf7\\x82\\xf7\\x21\\x35\\xe2\\xfb\\x1e\\x1f\\x7e\\x63\\x15\\xc4\\xb0\\x5a\\x3e\"\n\"\\xfb\\x09\\x55\\xfb\\x4c\\x4d\\x2c\\x1f\\x5a\\x6b\\x57\\x6c\\x5a\\xd3\\x1d\\xbe\\xad\\xc4\\x1b\\x0e\\xd9\\xf4\\x41\\x1d\\xf8\\x7d\\xf7\\xac\\x15\\x3b\\x2e\\x67\"\n\"\\x54\\x4b\\x1f\\x26\\x32\\x49\\xfb\\x22\\xfb\\x18\\x1a\\x4b\\xa1\\x4e\\xb1\\x62\\x1e\\x64\\xae\\xc6\\x75\\xcd\\x1b\\xf7\\x6b\\xf7\\x56\\xf7\\x6b\\xf7\\x81\\xf7\"\n\"\\x22\\x35\\xe2\\xfb\\x1f\\x1f\\x7e\\x63\\x15\\xc5\\xb0\\x5a\\x3f\\xfb\\x09\\x55\\xfb\\x4c\\x4c\\x2b\\x1f\\x5a\\x6b\\x58\\x6c\\x59\\xd3\\x1d\\xbf\\xad\\xc3\\x1b\"\n\"\\x0e\\xd0\\xe2\\x1d\\x76\\x8e\\x6d\\x1b\\xfb\\x6a\\xfb\\x63\\xfb\\x7c\\xfb\\x85\\x67\\x0a\\x74\\x90\\x76\\xb3\\x0a\\x56\\x1b\\x70\\x79\\x91\\x9b\\x76\\x1f\\xf7\"\n\"\\x8c\\xf9\\x4b\\x15\\xf7\\x2c\\xe2\\x05\\xa9\\x9d\\x94\\x95\\x9e\\x1a\\xa5\\x75\\xa0\\x70\\x7a\\x7a\\x7f\\x65\\x68\\x1e\\xfb\\x0e\\xfb\\x17\\x05\\x0e\\xf7\\x1c\"\n\"\\xf8\\x0e\\xf9\\x48\\x15\\x55\\x0a\\x9d\\x7b\\x73\\x1a\\x86\\x8a\\x83\\x89\\x83\\x1e\\x36\\x88\\x57\\x84\\x62\\x7d\\x08\\xfb\\x19\\x5d\\x3f\\xa7\\x0a\\x7d\\x5b\"\n\"\\x7c\\x7b\\x67\\x87\\xdc\\x1d\\xf7\\x9f\\x21\\x1d\\x6e\\x06\\x72\\x8c\\x79\\x9b\\xa2\\x1a\\x92\\x8d\\x94\\x8d\\x95\\x1e\\xe1\\x8e\\xb3\\x90\\xb9\\x9b\\x08\\xf7\"\n\"\\x18\\xb7\\xd8\\xf5\\xf7\\x1c\\x1a\\xf7\\x1e\\x34\\xe3\\xfb\\x28\\x97\\x1e\\x97\\xb7\\x9d\\x9c\\xcc\\x1d\\xbd\\xe5\\x1a\\xf7\\x03\\xba\\xf7\\x0f\\xcc\\xc5\\x1e\"\n\"\\xac\\xa9\\xa9\\x95\\xcb\\x90\\x08\\xf7\\x12\\x16\\xb5\\x81\\x97\\x85\\x9b\\x74\\x08\\xa1\\x6d\\x95\\x66\\x5a\\x1a\\xfb\\x02\\x5e\\xfb\\x09\\x4b\\x51\\x1e\\x64\"\n\"\\x69\\x6e\\x7f\\x54\\x88\\x08\\x0e\\xf7\\x11\\xf9\\xbf\\xf9\\x2a\\x15\\xfd\\x0e\\x06\\x85\\x53\\x1d\\xf7\\x12\\xf8\\x6e\\x98\\xb8\\x9c\\x9d\\xae\\x8e\\x19\\xf7\"\n\"\\x12\\x06\\xa5\\x9c\\x7a\\x71\\x85\\x8a\\x85\\x8a\\x85\\x1f\\xfb\\x13\\xfc\\x6e\\x79\\x0a\\x0e\\xf7\\x27\\xfa\\x18\\xf9\\x1c\\x15\\xa0\\x62\\x74\\x92\\x6b\\x1b\"\n\"\\x69\\x72\\x81\\x76\\x78\\x1f\\x76\\x73\\x7f\\x6c\\x74\\x2f\\x68\\xfb\\x2e\\x53\\x46\\xfb\\x03\\x74\\xe1\\xf7\\xd6\\x18\\x97\\xb8\\x9d\\x9d\\xae\\x8e\\x08\\x97\"\n\"\\x21\\x1d\\xfb\\xa3\\x20\\x1d\\xa1\\x06\\xac\\x8a\\x9f\\x7b\\x71\\x1a\\x86\\x8a\\x85\\x89\\x84\\x1e\\x35\\xfb\\xd8\\x71\\x91\\x80\\x90\\x7f\\x94\\x19\\x6e\\xa1\"\n\"\\x7a\\xb1\\xb6\\x1a\\xa4\\x91\\xaf\\x97\\xb9\\x1e\\xa2\\xe3\\x8c\\x8f\\xa3\\x1a\\xb9\\x6f\\xa7\\x5e\\x6d\\x73\\x85\\x74\\x58\\x1e\\x8e\\x71\\x05\\x8f\\x98\\x90\"\n\"\\x8c\\x92\\x1b\\x9b\\x94\\x80\\x78\\x81\\x8a\\x85\\x86\\x77\\x1f\\x7b\\x50\\x05\\x83\\x6c\\x87\\x73\\x76\\x1a\\x5c\\x9d\\x5a\\xa9\\x66\\x1e\\xaf\\x5e\\xb2\\x7a\"\n\"\\xdb\\x84\\x68\\xfb\\x1a\\x18\\x7e\\x5f\\x74\\x78\\x64\\x88\\x08\\x76\\x06\\x85\\x75\\x05\\xf7\\xb9\\xca\\x1d\\xb0\\xf7\\x1c\\xf7\\x54\\x9e\\xf7\\x00\\xdd\\xac\"\n\"\\xf7\\x30\\x19\\x9b\\xc8\\x05\\xd9\\xa0\\x94\\x9a\\xa3\\x1b\\x92\\x91\\x89\\x86\\x98\\x1f\\x0e\\x99\\x3b\\x1d\\xdd\\xf7\\xff\\xa8\\x1d\\x99\\x3b\\x1d\\xf7\\xc5\"\n\"\\xf8\\xad\\x20\\x0a\\x99\\x3b\\x1d\\xfb\\x28\\xfd\\x43\\x39\\x0a\\x61\\x97\\x0a\\xfb\\x8b\\x20\\x1d\\xa6\\x06\\xa5\\x9c\\x7a\\x71\\x84\\x8a\\x86\\x8a\\x85\\x1f\"\n\"\\x3a\\x1d\\x87\\x20\\x1d\\xf7\\xac\\x21\\x1d\\x64\\x06\\x71\\x7a\\x9c\\xa5\\x8f\\x8c\\x93\\x8d\\x91\\x1f\\xf7\\x24\\xf8\\xb1\\x15\\xcb\\x88\\xac\\x6a\\x50\\x1a\"\n\"\\x67\\x7d\\x55\\x78\\x67\\x1e\\x5c\\x72\\x6e\\x79\\x5a\\x1b\\x7f\\x83\\x8c\\x8f\\x7b\\x1f\\x0e\\x2a\\x36\\x0a\\xf7\\x9a\\xf8\\x9c\\x29\\x0a\\x2a\\xf7\\x5e\\x7b\"\n\"\\x15\\x89\\x9a\\x91\\x8b\\x98\\x1b\\xd0\\xcb\\x9f\\xad\\xb0\\x1f\\xb2\\xaf\\xa2\\xc1\\xc5\\x1a\\xe3\\x5e\\xcd\\xfb\\x0f\\xe8\\x1e\\x4d\\xba\\x7c\\xa1\\xb8\\x1a\"\n\"\\xcc\\xb3\\xb3\\xcb\\xdb\\xb1\\x5a\\xfb\\x09\\x99\\x1e\\xa6\\x87\\xb3\\xf7\\x5d\\x05\\x6d\\x06\\x79\\x82\\x7d\\x83\\x76\\x1b\\x80\\x7c\\x8e\\x93\\x72\\x1f\\x99\"\n\"\\x62\\x6f\\x90\\x6e\\x1b\\xfb\\x06\\x34\\x37\\xfb\\x02\\x71\\x90\\x74\\x93\\x7a\\x1f\\xa1\\x61\\xb4\\x5f\\xc3\\x5f\\x08\\xda\\x4f\\xad\\x5d\\x5c\\x1a\\x75\\x84\"\n\"\\x72\\x7f\\x76\\x1e\\x64\\x74\\x69\\x78\\x59\\x1b\\x57\\x5e\\xa3\\xb6\\x71\\x1f\\x78\\xaa\\x83\\xa9\\x87\\xc7\\x6e\\x8d\\x18\\x67\\xfb\\x74\\x05\\xa9\\x06\\xa8\"\n\"\\x97\\x92\\x91\\x9e\\x1b\\x95\\x98\\x88\\x83\\xa2\\x1f\\x9c\\x85\\x99\\x87\\x9b\\x86\\x53\\x38\\x18\\x98\\x7f\\x05\\x8e\\x96\\x93\\x7b\\x0a\\x30\\xf8\\x61\\xf9\"\n\"\\x67\\x48\\x0a\\xfc\\x06\\xfd\\xd8\\x89\\x0a\\x5d\\xce\\xfb\\x0e\\xe7\\x1f\\xab\\x0a\\xcc\\xda\\xb2\\x5a\\xfb\\x09\\x98\\x1e\\xa6\\x87\\xb3\\xf7\\x5d\\x05\\x6d\"\n\"\\x06\\x79\\x82\\x7d\\x83\\x76\\x1b\\x80\\x7d\\x8e\\x93\\x71\\x1f\\x99\\x62\\x6f\\x90\\x6e\\x1b\\xfb\\x06\\x34\\x37\\xfb\\x02\\x71\\x90\\x74\\x93\\x7a\\x1f\\xa1\"\n\"\\x61\\xb4\\x5f\\xc3\\x5f\\x08\\xda\\x4f\\xad\\x5d\\x5c\\x1a\\x75\\x84\\x72\\x7f\\x76\\x1e\\x64\\x74\\x69\\x78\\x59\\x1b\\x57\\x5e\\xa3\\xb6\\x71\\x1f\\x78\\xaa\"\n\"\\x83\\xa9\\x87\\xc7\\x6e\\x8d\\x18\\x0e\\x2a\\x36\\x0a\\xaa\\xfc\\xa6\\x35\\x1d\\x69\\xf8\\xfe\\xf9\\x2b\\x15\\xfc\\xb1\\x06\\xf7\\x1e\\xfb\\xf3\\xfb\\xcf\\xfb\"\n\"\\xcc\\x05\\xf8\\xd1\\x06\\xf0\\xf7\\x52\\x05\\x4d\\x06\\x67\\x3e\\x80\\x82\\x43\\x89\\x08\\xfb\\x79\\x06\\x76\\x82\\x8f\\x93\\x95\\x92\\x95\\xa7\\xa7\\x1f\\xf7\"\n\"\\x5d\\xf7\\x60\\x2e\\xf7\\x86\\x05\\xf7\\x4c\\x06\\xb4\\xaa\\x6c\\x63\\x88\\x8b\\x87\\x8a\\x84\\x1f\\x8a\\x76\\x05\\xc6\\x06\\x0e\\x61\\xf8\\x6f\\xf9\\x00\\x15\"\n\"\\xad\\x89\\x9a\\x86\\x9e\\x7d\\x08\\xa4\\x78\\x9a\\x6f\\x6e\\x1a\\x85\\x8a\\x82\\x8a\\x81\\x1e\\xa5\\x06\\xb6\\xf7\\x38\\x05\\xfc\\x6a\\x06\\x5f\\x42\\x0a\\x0e\"\n\"\\x61\\xf8\\x07\\xf7\\xf6\\x15\\xd9\\xf7\\xac\\xe9\\x8a\\xb2\\x60\\x90\\xfb\\x03\\x19\\xa6\\x89\\xaf\\xf7\\x54\\x05\\xfc\\xbb\\x06\\x65\\xfb\\x3f\\xa4\\x84\\xbf\"\n\"\\xef\\xca\\xb5\\xf1\\x8c\\x19\\x3e\\xfb\\xac\\x05\\x31\\x06\\x7e\\x55\\x05\\xe3\\x06\\x53\\xfb\\x5f\\x05\\x58\\x7d\\x71\\x76\\x58\\x1b\\x7d\\x72\\xf7\\xdf\\xd9\"\n\"\\x1d\\xba\\xf7\\x40\\x05\\xe8\\x06\\x97\\xc1\\x05\\x0e\\x61\\x43\\x0a\\x7d\\xf8\\x3b\\x20\\x0a\\x61\\xf7\\x85\\x16\\xf7\\x20\\xa5\\x1d\\xaf\\xf7\\x54\\x05\\x8b\"\n\"\\x0a\\xf7\\x27\\x06\\x4c\\x2f\\x98\\x7f\\x05\\x8e\\x97\\x92\\x8c\\x97\\x1b\\xa8\\x9c\\x7e\\x74\\x72\\x75\\x7b\\x69\\x75\\x7b\\x8f\\x98\\x6e\\x1f\\x75\\x6a\\x05\"\n\"\\x79\\xb7\\xab\\x61\\x1d\\xf7\\x02\\xf7\\xc1\\xf8\\x62\\x15\\x52\\xfb\\x7e\\x05\\xa8\\x06\\xc0\\x99\\xa2\\x9d\\xbf\\x1b\\xaf\\xa3\\x79\\x70\\x86\\x8a\\x87\\x88\"\n\"\\x7a\\x1f\\xa8\\x06\\xc5\\xf7\\x7e\\x05\\x6e\\x06\\x58\\x78\\x77\\x7c\\x5b\\x1b\\x64\\x76\\x9a\\xa8\\x91\\x8b\\x8f\\x8d\\x97\\x1f\\xf7\\x0e\\xf7\\x6d\\x15\\x4d\"\n\"\\x4b\\x7e\\x74\\x55\\x1f\\x4f\\x71\\x59\\x61\\x5a\\x4a\\x08\\x4a\\x37\\x6b\\x31\\x2d\\x1a\\xfb\\x34\\xf1\\x28\\xf7\\x39\\xf7\\x17\\xf7\\x0d\\xbb\\xd9\\xcd\\x1e\"\n\"\\xd4\\xe0\\xbd\\xf7\\x15\\xee\\x1a\\xf7\\x32\\x22\\xee\\xfb\\x3b\\x1e\\x8c\\x6a\\x15\\xb2\\xac\\x7d\\x73\\x9d\\x1f\\xa0\\x6e\\x98\\x5e\\x5d\\x1a\\xfb\\x30\\x38\"\n\"\\xfb\\x6e\\x38\\x4d\\x1e\\x76\\x6f\\x57\\x7c\\x61\\x1b\\x37\\x61\\xbe\\xf2\\xf7\\x21\\xc7\\xf7\\x46\\xdc\\xeb\\x1f\\xb2\\xab\\xc2\\xa1\\xc9\\x1b\\x0e\\xd8\\x21\"\n\"\\x0a\\xfb\\x09\\xf7\\x8f\\xc1\\x1d\\x85\\x8a\\x1a\\x26\\xb7\\x5b\\xe8\\xec\\xcc\\xc6\\xf2\\x9c\\x1e\\x0e\\xd0\\x21\\x0a\\xfc\\x1b\\xdd\\x51\\x1d\\xd0\\x21\\x0a\"\n\"\\xfb\\x08\\xf7\\x51\\x25\\x0a\\xd0\\xf8\\xac\\xf9\\x31\\x15\\x72\\x07\\xc4\\x86\\xa2\\x7b\\x67\\x1a\\x7a\\x84\\x67\\x7f\\x60\\x1e\\x51\\xfb\\x65\\x70\\x29\\x75\"\n\"\\x59\\x6d\\x67\\x19\\x63\\x69\\x5f\\x77\\x54\\x1b\\x3f\\x5d\\xb1\\xca\\xa7\\x8d\\x95\\xa5\\xea\\x1f\\xdd\\xf7\\xc0\\x9c\\xc4\\x9a\\x97\\xc9\\x8e\\x19\\xa4\\xfb\"\n\"\\xcb\\x72\\x07\\xd0\\x81\\x8f\\x89\\x70\\x1a\\x7f\\x85\\x6c\\x82\\x6a\\x1e\\x54\\xfb\\x62\\x05\\x74\\x39\\x80\\x4f\\x6a\\x1a\\x29\\xe7\\x47\\xf7\\x16\\xc0\\xb7\"\n\"\\x95\\xa0\\xb5\\x1e\\x61\\x57\\x80\\x74\\x6d\\x1a\\x5c\\xb8\\x69\\xc8\\xbd\\xba\\xa8\\xb9\\xa5\\x68\\x1d\\x80\\x88\\x7c\\x1b\\x63\\x74\\xa1\\xb3\\xb0\\x96\\xb4\"\n\"\\x9d\\xa5\\x1f\\xa4\\xb1\\x9b\\xa3\\x90\\x96\\x95\\xa1\\x97\\xaf\\x9f\\xd1\\xcd\\xf7\\x78\\x18\\xb3\\xf7\\x18\\x92\\x95\\xc2\\x96\\x08\\xa4\\x07\\x0e\\x61\\x60\"\n\"\\x0a\\x0e\\x61\\x60\\x0a\\xfb\\x58\\xf7\\xb0\\x15\\x69\\x6f\\x70\\x68\\x68\\xa8\\x6e\\xae\\xad\\xa6\\xa7\\xad\\xae\\x6e\\xa8\\x69\\x1f\\xf7\\x59\\x16\\x68\\xbc\"\n\"\\x0a\\x6f\\xa8\\x69\\x1f\\x0e\\xec\\xf7\\x03\\xf8\\x1c\\x15\\x99\\xaa\\x93\\x9c\\x8f\\x92\\x47\\x1d\\x85\\x6c\\x87\\x51\\x0a\\x8a\\x7a\\x8a\\x87\\x89\\x73\\x08\"\n\"\\xf8\\x5e\\x53\\x15\\x4c\\xf7\\x71\\x05\\x89\\x95\\x89\\x96\\x93\\xb8\\x1d\\x76\\x42\\xa0\\x1f\\xce\\xfb\\x91\\x55\\xfb\\x61\\x2f\\x1d\\x6b\\x06\\x86\\x75\\x05\"\n\"\\xf7\\xc5\\xca\\x1d\\xc2\\xf7\\x60\\xf7\\x68\\xf7\\xad\\xad\\xb6\\xa4\\xa1\\xa2\\x92\\x19\\x22\\x1d\\xfb\\x52\\x20\\x1d\\x9e\\x06\\xa5\\xa2\\x78\\x74\\x7b\\x84\"\n\"\\x78\\x7e\\x7a\\x1f\\x0e\\xd0\\x21\\x0a\\xfb\\xcf\\xf7\\xd4\\x30\\x0a\\xd0\\x21\\x0a\\x20\\xf7\\x6b\\x15\\x6b\\x7c\\x7e\\x81\\x74\\x1b\\x7f\\x7c\\x90\\x96\\x70\"\n\"\\x1f\\x9c\\x63\\x6a\\x94\\x92\\x0a\\xa6\\x96\\x88\\x9e\\x1b\\xc7\\xae\\xaf\\xde\\xa1\\x1f\\x0e\\xf7\\x80\\x2c\\x0a\\xfb\\xf8\\xdc\\x15\\x76\\x0a\\xf7\\x80\\x2c\"\n\"\\x0a\\xfb\\xb9\\xdc\\x15\\xbe\\x06\\x35\\xf7\\x42\\x05\\x3a\\x2a\\x0a\\xf7\\x80\\x2c\\x0a\\xfc\\x8b\\xf7\\x70\\x15\\x68\\x6e\\x6e\\x66\\x36\\x1d\\xf7\\x80\\x2c\"\n\"\\x0a\\xfc\\x03\\xdc\\x15\\xfb\\x03\\xf7\\x27\\x05\\xa1\\x7b\\x77\\x97\\x77\\x1b\\x73\\x76\\x76\\x73\\x3d\\x0a\\xf7\\x19\\x32\\x05\\x0e\\x91\\xf8\\x6d\\xf7\\x73\"\n\"\\x15\\xcb\\xf7\\x84\\x05\\x76\\x06\\x57\\x78\\x6a\\x71\\x5c\\x1b\\x40\\x06\\x54\\x6d\\x9f\\xb0\\x8f\\x8b\\x8f\\x8c\\x98\\x1f\\x76\\x06\\x4b\\xfb\\x84\\x05\\xa0\"\n\"\\x06\\x9e\\xbf\\xac\\xa6\\xba\\x8a\\x08\\xd7\\x06\\xc1\\xa9\\x77\\x66\\x86\\x8b\\x87\\x8a\\x7f\\x1f\\xf7\\x06\\x65\\x15\\x5e\\x55\\x4c\\x65\\x60\\x8c\\x08\\xfb\"\n\"\\x62\\x06\\x57\\x8a\\x57\\xb0\\x73\\xc2\\x08\\x79\\x06\\x79\\xfb\\x4d\\x05\\xf8\\x5e\\x06\\xdc\\xf7\\x4d\\x05\\xe6\\xf8\\x71\\x15\\xfc\\x6e\\x06\\x5f\\xfb\\x3b\"\n\"\\x05\\x9d\\x06\\xa7\\xbc\\xbe\\xa9\\xc1\\x89\\x08\\xf7\\x4e\\x06\\xce\\x8d\\xb9\\x6e\\x91\\x59\\x08\\x9d\\x06\\x0e\\x61\\x2d\\x0a\\xf7\\xf8\\xf7\\x25\\x23\\x1d\"\n\"\\x61\\x2d\\x0a\\xf7\\xb7\\xf7\\x25\\x8e\\x0a\\x61\\x3f\\x1d\\xfb\\x3c\\xf9\\x6a\\x29\\x1d\\x61\\x3f\\x1d\\xfb\\x15\\xf9\\xf5\\x2a\\x1d\\x61\\xf8\\xbd\\xf7\\x4a\"\n\"\\x15\\x72\\x06\\x20\\xfb\\x01\\x4d\\x6b\\x20\\x89\\x08\\x3c\\x06\\xf8\\x76\\xf8\\xed\\x05\\xa1\\xfc\\x85\\x07\\x56\\xfb\\x30\\x05\\xac\\x06\\xb8\\xdb\\xd5\\xb1\"\n\"\\xf6\\x8a\\x08\\xf1\\x06\\xfc\\x72\\xfc\\xed\\x85\\x75\\x05\\xf8\\x90\\x06\\x0e\\x25\\x1d\\xf7\\x3a\\xf7\\x96\\x38\\x0a\\xd0\\xf7\\xf4\\xf8\\x20\\x15\\xbd\\x79\"\n\"\\x77\\x9b\\x60\\x1b\\xfb\\x13\\xfb\\x29\\xfb\\x54\\xfb\\x38\\x47\\xbb\\x59\\xcc\\xcf\\x9d\\x1d\\x63\\x71\\xab\\xbf\\x9a\\x8c\\x97\\x8f\\x9f\\x1f\\xb2\\x94\\x05\"\n\"\\xf7\\x25\\xac\\xde\\xce\\xdd\\x1a\\xc2\\x66\\xab\\x4d\\x59\\x6f\\x7c\\x59\\x60\\x1e\\x9f\\xcc\\x24\\x86\\x05\\x36\\x68\\x15\\xa7\\x9f\\x73\\x6b\\x55\\x6b\\x23\"\n\"\\x64\\x47\\x1f\\x55\\x6e\\x6d\\x72\\x69\\x1b\\x6d\\x77\\xa5\\xb3\\x8d\\x1f\\x8e\\xc5\\xa5\\xde\\xb1\\xce\\x08\\xc6\\xac\\xab\\xa7\\xab\\x1b\\xf7\\x19\\xfb\\x50\"\n\"\\x15\\xf7\\x1a\\xb2\\xb6\\xcb\\xbd\\x1b\\xa2\\x95\\x7e\\x70\\x51\\x6d\\x5b\\x50\\x66\\x1f\\x6c\\x78\\x75\\x82\\x6f\\x87\\x08\\x82\\xf7\\xc2\\xa6\\x0a\\x93\\x0a\"\n\"\\x0e\\xf7\\xef\\xa9\\x0a\\x99\\x79\\x1d\\x79\\xf8\\x19\\xf9\\x04\\x15\\xae\\x06\\xec\\x8c\\xbc\\x63\\x96\\x35\\x08\\x9e\\x06\\xb7\\xf7\\x37\\x05\\xfc\\x5f\\x20\"\n\"\\x1d\\xa7\\x06\\xa5\\x8a\\x9c\\x7a\\x72\\x1a\\x85\\x8a\\x85\\xbf\\x0a\\x68\\x88\\x19\\x7c\\x20\\x1d\\xf7\\xd6\\x06\\xf7\\x0f\\x39\\x1d\\x65\\xa6\\x69\\x92\\x20\"\n\"\\x8e\\x08\\x80\\x62\\x15\\xaf\\x9f\\x88\\x82\\x9c\\x94\\x0a\\x0e\\x99\\x6f\\x1d\\x5a\\x6c\\x0a\\x0e\\xa9\\xf7\\x69\\xf9\\x2a\\x15\\x85\\x75\\x05\\x99\\x06\\xb6\"\n\"\\x9c\\x7c\\x65\\x6e\\x83\\x61\\x7a\\x47\\x1f\\x6a\\xfb\\x13\\x67\\x2d\\x5d\\x3d\\x08\\x3b\\x5d\\x5e\\x69\\x50\\x1b\\x76\\x06\\x54\\xfb\\x60\\x05\\xa4\\x06\\xd6\"\n\"\\xf7\\x11\\xd0\\xb9\\xf7\\x04\\x89\\x08\\xf7\\x2d\\x06\\xf7\\x04\\xbb\\x5f\\x25\\x88\\x8b\\x81\\x8a\\x81\\x1f\\xa4\\x06\\xc1\\xf7\\x60\\x05\\x50\\x06\\x75\\x83\"\n\"\\x90\\x9a\\x8f\\x8b\\x8b\\x8f\\x98\\x1f\\xf7\\x19\\xf8\\x8a\\xaa\\x0a\\x22\\x1d\\xfb\\xfb\\xfd\\x05\\x15\\xfb\\x87\\x06\\xdf\\xd8\\xe4\\xf7\\x7c\\xbe\\xf7\\xaa\"\n\"\\x08\\xf7\\x43\\x06\\x0e\\x99\\xf7\\xd3\\xf7\\xdf\\x15\\xc9\\xa3\\x1d\\xd0\\xf7\\x96\\x05\\xbd\\x72\\x0a\\x68\\x75\\x9a\\xa3\\x94\\x8d\\x96\\x8e\\x98\\x1f\\x0e\"\n\"\\x99\\xf7\\xd2\\xf7\\xdf\\x15\\xca\\xa3\\x1d\\xcf\\xf7\\x96\\x05\\xbe\\x72\\x0a\\x67\\x75\\x9a\\xa3\\x93\\x8d\\x97\\x8e\\x98\\x1f\\xe5\\xf9\\x7e\\xa1\\x0a\\xf7\"\n\"\\x66\\xbe\\x1d\\xf7\\x9d\\xf8\\xd0\\xf7\\xce\\x15\\xd8\\xfb\\x74\\x05\\x8f\\x7f\\x8d\\x7f\\x80\\x1a\\x76\\x7a\\x7f\\x6c\\x1e\\x86\\x75\\x05\\xf7\\x8a\\x06\\x91\"\n\"\\xa1\\x62\\x8c\\x79\\xa1\\x74\\xd9\\x19\\x2c\\xf7\\xa4\\xca\\xc3\\xa6\\xa3\\xba\\xb8\\x19\\xf7\\x01\\xf2\\x9a\\x95\\xc8\\x92\\x90\\xa1\\x18\\xfb\\x75\\x06\\x86\"\n\"\\x75\\x05\\x96\\x06\\x9d\\x97\\x7e\\x76\\x5b\\x39\\x37\\xfb\\x2f\\xfb\\x01\\x1f\\x80\\x06\\xc3\\xf7\\x65\\x98\\xbc\\xa1\\x9d\\xb5\\x8a\\x19\\x22\\x1d\\xfb\\x96\"\n\"\\x20\\x1d\\x9a\\x06\\xab\\x9d\\x7d\\x70\\x83\\x8a\\x83\\x86\\x7b\\x1f\\x52\\xfb\\x6a\\x05\\x81\\x06\\x3e\\xf7\\x00\\x5f\\xe0\\xb5\\x1a\\xa9\\xa4\\xa1\\xad\\x1e\"\n\"\\x92\\x21\\x1d\\xfb\\x85\\x06\\x86\\x75\\x05\\x96\\x06\\xc7\\x89\\xa9\\x6e\\xcf\\xfb\\x0b\\xa0\\x67\\x96\\x79\\x9e\\x6d\\xfb\\xc4\\xfb\\xdf\\x18\\x6e\\x6c\\x6c\"\n\"\\x7a\\x68\\x86\\x84\\x75\\x18\\xf7\\xa0\\x21\\x1d\\x71\\x8c\\x84\\x8f\\x9c\\x1a\\x95\\x90\\x95\\x98\\x99\\x1e\\xf7\\x69\\xf7\\x80\\x05\\x94\\x06\\x4f\\xfb\\x76\"\n\"\\x7e\\x5b\\x78\\x7a\\x63\\x8a\\x33\\x0a\\xf7\\x98\\x21\\x1d\\x7b\\x06\\x65\\x79\\x98\\xa7\\x93\\x8d\\x97\\x92\\xa5\\x1f\\xc2\\xf7\\x61\\x05\\x0e\\xfb\\x24\\xf7\"\n\"\\x57\\xf7\\xea\\x15\\x9f\\x06\\xd6\\xb0\\x67\\x43\\xfb\\x00\\x47\\x38\\x33\\x4a\\x59\\xb3\\xde\\x61\\x1f\\x6e\\x7e\\x9f\\x59\\x97\\x75\\xa4\\x71\\x19\\x5e\\xb5\"\n\"\\xc2\\x74\\xcf\\x1b\\xf7\\x24\\xf7\\x04\\xf1\\xf7\\x15\\xba\\x7b\\xb0\\x6e\\xa4\\x1f\\x78\\x9a\\x7a\\x92\\x5e\\x95\\xc1\\x93\\xa4\\x94\\xa8\\xa0\\x08\\xb6\\xaa\"\n\"\\xa4\\xbe\\xc2\\x1a\\xe0\\x4a\\xc3\\x27\\x70\\x69\\x86\\x84\\x72\\x1e\\x83\\x70\\x8b\\x8b\\x82\\x1b\\x7c\\x84\\x90\\x9a\\x88\\x1f\\x77\\x06\\x61\\xfb\\x43\\x05\"\n\"\\x9e\\x06\\xe8\\xbe\\xbf\\xb8\\xc3\\x1b\\xb5\\xa0\\x6f\\x52\\x49\\x74\\x56\\x62\\x6f\\x1f\\x77\\x6d\\x70\\x84\\x53\\x1b\\x0e\\xf7\\x11\\xf7\\x9b\\x4e\\x1d\\x0e\"\n\"\\xf7\\x11\\xf7\\x99\\x4e\\x1d\\xfb\\x41\\xf7\\xb5\\x15\\x67\\xb3\\x1d\\x1f\\x8c\\x87\\x8b\\x86\\x89\\x1a\\x73\\x6f\\x7a\\x65\\x6c\\x71\\x98\\x9a\\x8f\\x8c\\x8f\"\n\"\\x8f\\x94\\x1e\\x91\\x99\\x8d\\x92\\x92\\x1a\\xa0\\x77\\x9b\\x70\\x1e\\x0e\\xa4\\xf7\\xcc\\xf7\\xf5\\x15\\xdc\\xfb\\x97\\x05\\x8f\\x7f\\x8d\\x80\\x82\\x1a\\x73\"\n\"\\x7b\\x7b\\x74\\x49\\x0a\\xfb\\x04\\xf7\\xdc\\xf7\\x39\\xf7\\x2d\\xc3\\xb8\\xb2\\x9e\\xb9\\x8f\\x19\\x91\\x3b\\x0a\\x9b\\x98\\x7c\\x79\\x76\\x7b\\x6f\\x72\\x73\"\n\"\\x1f\\xfb\\x4f\\xfb\\x43\\xc4\\xf7\\x6b\\x98\\xb8\\x9c\\x9d\\xae\\x8e\\x19\\xa1\\x28\\x1d\\xfb\\xb5\\x45\\x0a\\xf7\\xa9\\x21\\x1d\\x6c\\x06\\x71\\x7a\\x9c\\xa4\"\n\"\\x91\\x8c\\x91\\x8d\\x92\\x1f\\x0e\\xac\\xf8\\x94\\xf9\\x04\\x15\\xfb\\x23\\xfc\\xac\\x34\\x0a\\x67\\x1d\\x70\\x8c\\x7b\\x9b\\xa5\\x1a\\x93\\x8b\\x8f\\x8d\\x91\"\n\"\\x1e\\xf7\\x17\\xf8\\x7f\\x2e\\x1d\\xfc\\x7b\\x06\\x84\\x75\\x05\\x99\\x06\\xaf\\xa5\\x73\\x6b\\x7c\\x8a\\x84\\x80\\x61\\x1f\\x73\\x2f\\x05\\xfb\\x9f\\x45\\x5a\"\n\"\\xfb\\x06\\x60\\x1b\\x82\\x84\\x91\\x95\\x8a\\x1f\\xbb\\x88\\x7b\\x9e\\x66\\x1b\\x67\\x72\\x71\\x65\\x5c\\xad\\x6d\\xc1\\xf7\\x04\\xb7\\xd8\\xf7\\xfe\\xec\\x1f\"\n\"\\xbf\\xf7\\x58\\x05\\x0e\\xf7\\x80\\x69\\x0a\\xf7\\xb6\\x06\\xec\\x1d\\x93\\x8c\\x8f\\x8c\\x92\\x53\\x0a\\xae\\x8e\\x19\\x9c\\x21\\x1d\\xfb\\x59\\x06\\x0e\\xf7\"\n\"\\x11\\x64\\x0a\\xfb\\xbd\\x52\\x1d\\x0e\\xd0\\xf8\\x6e\\xf9\\x31\\x15\\x3b\\x2f\\x68\\x53\\x4b\\x1f\\x26\\x33\\x49\\xfb\\x22\\xfb\\x17\\x1a\\x4c\\xa1\\x4e\\xb1\"\n\"\\x61\\x1e\\x65\\xae\\xc6\\x75\\xcd\\x1b\\xf7\\x6a\\xf7\\x56\\xf7\\x6a\\xf7\\x80\\xf7\\x22\\x36\\xe1\\xfb\\x20\\x1f\\x7f\\x63\\x15\\xc4\\xb0\\x5a\\x3f\\xfb\\x09\"\n\"\\x55\\xfb\\x4b\\x4d\\x2c\\x1f\\x5b\\x6b\\x57\\x6c\\x5a\\xf3\\x1d\\xc2\\xe8\\x1f\\xca\\xb1\\xbe\\xad\\xc4\\x1b\\x0e\\xf7\\x11\\xf7\\x4c\\xf9\\x2a\\x15\\x82\\x0a\"\n\"\\xf7\\xa5\\x06\\xb5\\x1d\\xf7\\x78\\x06\\xfb\\x22\\xfc\\xac\\x7e\\x4e\\x0a\\xf7\\xa6\\x21\\x1d\\x6e\\xb6\\x0a\\xf7\\x16\\xf8\\x7f\\xaa\\x0a\\x22\\x1d\\x0e\\x61\"\n\"\\x97\\x0a\\xfb\\x8c\\x06\\x86\\x75\\x05\\xa6\\x06\\xa6\\x9b\\x7a\\x71\\x84\\x8a\\x86\\x8a\\x85\\x1f\\xfb\\x17\\xfc\\x7f\\x2f\\x1d\\x87\\x20\\x1d\\xf7\\xac\\x21\"\n\"\\x1d\\x64\\x06\\x71\\x7a\\x9c\\xa5\\x8f\\x8c\\x92\\x8d\\x92\\x1f\\xf7\\x24\\xf8\\xb1\\x15\\xcb\\x88\\xac\\x6b\\x4f\\x1a\\x66\\x7d\\x57\\x78\\x66\\x1e\\x5d\\x72\"\n\"\\x6e\\x78\\x5a\\x1b\\x7f\\x83\\x8c\\x8f\\x7b\\x1f\\x0e\\x99\\xf8\\xcf\\xf7\\x1f\\x15\\x48\\x5c\\x49\\x67\\x42\\x1b\\x23\\x4c\\xd3\\xf7\\x0e\\xf7\\x6d\\xf7\\x19\"\n\"\\xf7\\x55\\xf7\\x28\\xd9\\xc1\\x53\\x3a\\x88\\x8b\\x81\\x8a\\x84\\x1f\\x9d\\x06\\xbe\\xf7\\x54\\x05\\x79\\x06\\x7a\\x84\\x7f\\x83\\x78\\x1b\\x7f\\x84\\x8c\\x97\"\n\"\\x5d\\x1f\\x93\\x68\\x73\\x8f\\x75\\x1b\\xfb\\x0a\\xfb\\x17\\x4b\\x2b\\x3b\\x1f\\x51\\x45\\x6e\\x3b\\x31\\x1a\\xfb\\x3c\\xf2\\xfb\\x09\\xf7\\x2a\\xf6\\xde\\xb9\"\n\"\\xe7\\xc7\\x1e\\x0e\\x61\\xf8\\x6f\\xf9\\x00\\x15\\xad\\x89\\x9a\\x86\\x9f\\x7d\\x08\\xa3\\x78\\x9a\\x6f\\x6e\\x1a\\x85\\x8a\\x82\\x8a\\x81\\x1e\\xa5\\x06\\xb6\"\n\"\\xf7\\x38\\x05\\xfc\\x6a\\x06\\x5f\\x42\\x0a\\x0e\\xb6\\xf8\\x43\\xf7\\xb0\\x15\\x45\\xf7\\xa5\\x05\\x88\\x94\\x88\\xa3\\x93\\x1a\\xa6\\xa0\\x9a\\xb2\\x1e\\x92\"\n\"\\x06\\x92\\xa1\\x05\\xfb\\xab\\x06\\x85\\x75\\xbf\\x86\\x98\\x7a\\xa3\\x2a\\x19\\xf2\\xfc\\x0c\\x6b\\x5a\\x79\\x77\\x6f\\x77\\x19\\x80\\x7c\\x7e\\x85\\x85\\x1b\"\n\"\\x82\\x85\\x90\\x94\\x90\\x8b\\x8c\\x90\\x97\\x1f\\x8d\\x92\\x8c\\x90\\x90\\x1a\\xa9\\x6f\\xa3\\x67\\x63\\x6f\\x6e\\x61\\x58\\xae\\x6d\\xc8\\xbe\\xb5\\x9d\\xb4\"\n\"\\xb2\\x1e\\xa8\\xa8\\x9a\\x9e\\xd0\\xf0\\xf7\\x7e\\xf7\\xeb\\x18\\xbd\\xd2\\xab\\xa6\\xb4\\x8c\\x92\\xa1\\x18\\xfb\\x68\\x20\\x1d\\x97\\x06\\xa3\\x9a\\x7c\\x73\"\n\"\\x74\\x7f\\x6d\\x78\\x6e\\x1f\\x0e\\xf7\\x59\\xf8\\x2b\\xf9\\x48\\x15\\x55\\x0a\\x9d\\x7b\\x73\\x1a\\x86\\x8a\\x83\\x89\\x83\\x1e\\x36\\x88\\x57\\x84\\x63\\x7d\"\n\"\\x08\\xfb\\x19\\x5d\\x3e\\xa7\\x0a\\x7e\\x5b\\x7b\\x7b\\x67\\x87\\xdc\\x1d\\xf7\\x9f\\x21\\x1d\\x6e\\x06\\x72\\x8c\\x79\\x9b\\xa3\\x1a\\x91\\x8d\\x94\\x8d\\x95\"\n\"\\x1e\\xe1\\x8e\\xb3\\x90\\xb9\\x9b\\x08\\xf7\\x18\\xb7\\xd8\\xf5\\xf7\\x1c\\x1a\\xf7\\x1e\\x34\\xe3\\xfb\\x28\\x97\\x1e\\x97\\xb6\\x9d\\x9d\\xcc\\x1d\\xbc\\xe6\"\n\"\\x1a\\xf7\\x03\\xba\\xf7\\x10\\xcc\\xc4\\x1e\\xac\\xa9\\xa9\\x95\\xcb\\x90\\x08\\xf7\\x12\\x16\\xb5\\x81\\x97\\x85\\x9b\\x74\\x08\\xa1\\x6d\\x95\\x66\\x5a\\x1a\"\n\"\\xfb\\x02\\x5e\\xfb\\x09\\x4b\\x51\\x1e\\x65\\x69\\x6d\\x7f\\x54\\x88\\x08\\x0e\\x99\\xaf\\x0a\\x6f\\x77\\x76\\x85\\x1d\\x96\\x1a\\xa4\\x9a\\x9e\\x9f\\x1e\\x99\"\n\"\\x28\\x1d\\xfb\\x9b\\x4b\\x0a\\xe3\\xfb\\x92\\x18\\xfb\\x33\\xfb\\x43\\x54\\x4c\\x60\\x69\\x67\\x82\\x33\\x0a\\xf7\\x61\\x21\\x1d\\x7e\\x06\\x6a\\x79\\x97\\xa2\"\n\"\\x9b\\x94\\x9c\\xa3\\xa6\\x1f\\x0e\\xf7\\x11\\xf7\\x74\\xb0\\x15\\x8d\\x1d\\xf8\\x34\\x06\\xf7\\x04\\xbb\\x5f\\x25\\x1f\\x74\\xa3\\x07\\xc1\\xf7\\x60\\x05\\x50\"\n\"\\x06\\x75\\x84\\x8f\\x9b\\x8f\\x8c\\x91\\x8d\\x92\\x1f\\xf7\\x19\\xf8\\x8a\\x98\\xb8\\x9c\\x47\\x0a\\xfb\\x24\\xfc\\xb2\\x05\\x0e\\xea\\xf8\\x49\\xe3\\x15\\x7f\"\n\"\\x5e\\x7a\\x79\\x68\\x88\\x08\\x67\\x1d\\x71\\x8c\\x7a\\x9b\\xa4\\x1a\\x93\\x8c\\x8f\\x8c\\x92\\x53\\x0a\\xae\\x8e\\x19\\x97\\x06\\x68\\x0a\\xc0\\x64\\xec\\xc2\"\n\"\\xb3\\x93\\xa5\\xd4\\x1e\\x0e\\xf8\\x6d\\xf7\\x7b\\xb0\\x15\\xf7\\x23\\xf8\\xad\\x98\\x1d\\xfc\\x80\\x7f\\x5e\\x7a\\x7a\\x3c\\x0a\\xfa\\x58\\x06\\x4c\\x1d\\x70\"\n\"\\x7b\\x9c\\xa5\\x91\\x8c\\x90\\x8c\\x91\\x1f\\xf7\\x17\\xf8\\x80\\x7d\\x1d\\x0e\\xf8\\x6d\\xf7\\x54\\xf9\\x2a\\x15\\x86\\x75\\x05\\xa0\\x06\\xa6\\x8a\\x9b\\x7b\"\n\"\\x71\\x1a\\x83\\x4d\\x1d\\xfc\\x80\\x7f\\x5e\\x7a\\x7a\\x3c\\x0a\\xf9\\x7e\\x06\\xf7\\x04\\xba\\x5f\\x21\\x89\\x8b\\x83\\x8a\\x82\\x1f\\xa4\\x06\\xc2\\xf7\\x60\"\n\"\\x05\\x49\\x06\\x7b\\x84\\x91\\x96\\x91\\x8c\\x8e\\x8e\\x99\\x1f\\xf7\\x19\\xf8\\x87\\x7d\\x1d\\xfb\\x68\\x06\\xf7\\x23\\xf8\\xad\\x2e\\x1d\\x0e\\xf6\\xf7\\x61\"\n\"\\xf9\\x2a\\x15\\x60\\xfb\\x36\\x05\\x9e\\x06\\xbd\\xe4\\xbd\\xad\\xe0\\x8d\\xfb\\x23\\xfc\\xad\\x18\\x7f\\x5e\\x79\\x79\\x68\\x88\\x08\\x7c\\x20\\x1d\\xf7\\xd6\"\n\"\\x06\\xf7\\x0f\\x39\\x1d\\x65\\xa6\\x69\\x92\\x20\\x8e\\xc0\\xf7\\x5e\\x18\\x98\\xb8\\x9c\\x9d\\xae\\x8e\\x08\\x97\\x21\\x1d\\xfb\\x27\\xfb\\xdf\\x46\\x0a\\x0e\"\n\"\\xf7\\xd0\\xf8\\x4c\\xf9\\x2a\\x15\\xfb\\xa5\\x06\\x71\\x0a\\xf7\\x0f\\x39\\x1d\\x65\\xa6\\x69\\x92\\x20\\x8e\\xc0\\xf7\\x5e\\x18\\x91\\x9b\\x94\\xaa\\x9e\\x9b\"\n\"\\xaa\\x8e\\x19\\x97\\x06\\xfb\\x21\\xfb\\xc9\\x46\\x0a\\xf9\\x16\\x7a\\x15\\x6e\\x06\\x71\\x8c\\x7a\\x9b\\xa5\\x1a\\x90\\x8c\\x92\\x8d\\x91\\x1e\\xf7\\x16\\xf8\"\n\"\\x7f\\xae\\x1d\\x84\\xa2\\x1d\\x84\\x20\\x1d\\xf7\\xa5\\x06\\x0e\\x78\\xf8\\x50\\xf9\\x2a\\x15\\xfb\\xa5\\x06\\x71\\x0a\\xf7\\x0f\\x39\\x1d\\x66\\xa5\\x6b\\x92\"\n\"\\xfb\\x02\\x8f\\xc0\\xf7\\x5e\\x18\\x91\\x9b\\x94\\xaa\\x9e\\x9b\\xaa\\x8e\\x19\\x97\\x06\\xfb\\x21\\xfb\\xc9\\x46\\x0a\\x0e\\x89\\xf8\\x5b\\xf7\\xd8\\x15\\x70\"\n\"\\xfb\\x01\\x79\\x5c\\x62\\x50\\x08\\x56\\x66\\x5c\\x6f\\x55\\x1b\\x5d\\x5c\\xa0\\xaf\\x66\\x1f\\x72\\xa4\\x7b\\xa1\\x71\\xbe\\x74\\x80\\x18\\xa5\\x4a\\x9b\\x6f\"\n\"\\xa6\\x6e\\x08\\x5f\\xb4\\xbb\\x78\\xcf\\x1b\\xf7\\x68\\xf7\\x44\\xf7\\x5b\\xf7\\x84\\xda\\x77\\xc8\\x63\\xb6\\x1f\\xb5\\x64\\x52\\x9f\\x3a\\x1b\\x69\\x6d\\x88\"\n\"\\x83\\x62\\x1f\\x86\\x73\\x82\\x8a\\x82\\x1b\\x7b\\x85\\x8f\\x9c\\x86\\x1f\\x77\\x06\\x5f\\xfb\\x5c\\x05\\xa0\\x06\\xa9\\xc0\\x9c\\xa1\\xaa\\xa6\\x08\\xaf\\xb3\"\n\"\\xb7\\x9d\\xb8\\x1b\\xd1\\xaf\\x5b\\x2c\\x64\\x87\\x6f\\x7d\\x4f\\x1f\\x3c\\x06\\x40\\x77\\x9f\\xd6\\x88\\x1f\\x77\\x06\\x54\\xfb\\x7f\\x05\\x9f\\x06\\xab\\xd5\"\n\"\\xb4\\xa9\\xd0\\x8a\\x08\\x0e\\xf8\\x27\\xf8\\x34\\xf7\\xd5\\x15\\x82\\x67\\x87\\x6e\\x6b\\x1a\\xfb\\x25\\xdf\\x33\\xf7\\x1e\\xf7\\x68\\xf7\\x57\\xf7\\x6b\\xf7\"\n\"\\x7f\\xf7\\x21\\x35\\xe2\\xfb\\x1f\\x21\\xfb\\x00\\x55\\x2f\\x40\\x1e\\x64\\x5b\\x6a\\x51\\x79\\x54\\x08\\xfb\\x12\\x4a\\x0a\\xfb\\xbd\\x52\\x1d\\xca\\xf7\\x82\"\n\"\\x05\\xf8\\x8b\\xf7\\xc8\\x15\\xc5\\xb0\\x5a\\x3e\\xfb\\x08\\x55\\xfb\\x49\\x4c\\x2b\\x1f\\x5a\\x6c\\x57\\x6c\\x59\\xf3\\x1d\\xc3\\xe8\\x1f\\xca\\xb0\\xbf\\xad\"\n\"\\xc3\\x1b\\x0e\\xaf\\xf8\\xce\\x16\\x9b\\x0a\\x98\\xb8\\x9c\\x32\\x0a\\xfb\\x9f\\x06\\xfb\\x40\\x22\\x3f\\xfb\\x11\\x65\\x97\\x69\\xa0\\x73\\x1f\\x9f\\x74\\xa0\"\n\"\\x7e\\xbf\\x75\\x44\\x7c\\x81\\x85\\x5d\\x4a\\x27\\xfb\\x20\\x18\\x6b\\x5f\\x76\\x7d\\x67\\x8a\\x08\\x87\\x06\\x84\\x75\\x05\\xf7\\x54\\x06\\xf7\\x51\\xf7\\x9e\"\n\"\\x05\\xa3\\x9c\\x9b\\x94\\xa4\\x1b\\x8f\\x8f\\x8b\\x8a\\x94\\x1f\\x53\\xfb\\x66\\x2f\\x1d\\x84\\x20\\x1d\\xf7\\x25\\xf7\\xe9\\x15\\x89\\x81\\x87\\x8a\\x84\\x1b\"\n\"\\x51\\x63\\xbb\\xd1\\xe5\\xd0\\xd8\\xdb\\x97\\x95\\x89\\x86\\xa0\\x1f\\x0e\\xfb\\x4b\\xf7\\x5c\\xf9\\x2a\\x15\\x86\\x75\\x05\\xa1\\x06\\xa5\\x8a\\x9c\\x7a\\x71\"\n\"\\x1a\\x84\\x8a\\x86\\x8a\\x85\\x1e\\xfb\\x14\\xfc\\x7d\\x7e\\x5d\\x7a\\x7a\\x68\\x87\\x19\\xac\\x0a\\x7a\\x9c\\xa4\\x1a\\x94\\x8b\\x8e\\x8d\\x92\\x1e\\xf7\\x21\"\n\"\\xf8\\xb0\\x05\\xf7\\x96\\x06\\xae\\xf7\\x1c\\x05\\x74\\x06\\x6c\\x45\\x5c\\x6c\\x43\\x8e\\x08\\x0e\\xf7\\x39\\xf8\\x7f\\xf9\\x00\\x15\\xc3\\x06\\xb2\\xa3\\x85\"\n\"\\x7b\\xa0\\x1f\\xa4\\x7a\\x9a\\x6e\\x6e\\x1a\\x84\\x8a\\x83\\x8a\\x81\\x1e\\xa5\\x06\\xb6\\xf7\\x38\\x05\\xfc\\xb2\\x06\\x5f\\xa4\\x1d\\xf7\\x71\\x06\\xde\\xf7\"\n\"\\xc9\\x05\\x94\\xb1\\xa7\\x8f\\xa8\\x1b\\xc8\\xaa\\x6b\\x4b\\x5d\\x80\\x5a\\x77\\x5e\\x1f\\x66\\x7a\\x76\\x78\\x72\\x1b\\x7f\\x84\\x92\\x96\\x92\\x8c\\x8e\\x92\"\n\"\\x91\\x1f\\x95\\x97\\x8f\\x95\\x99\\x1a\\xac\\x75\\xa0\\x69\\x67\\x73\\x71\\x63\\x52\\xbb\\x65\\xd2\\xf7\\x13\\xf3\\xf7\\x02\\xf7\\x19\\xe3\\x4a\\xc0\\xfb\\x02\"\n\"\\x5d\\x64\\x85\\x7d\\x51\\x1e\\x0e\\x5a\\x6c\\x0a\\xf8\\x1e\\xf9\\x5f\\x15\\xf7\\x29\\xe1\\x05\\xaa\\x9c\\x93\\x96\\x9e\\x1a\\xa4\\x75\\xa0\\x71\\x79\\xe9\\x1d\"\n\"\\x8f\\xf9\\x47\\xf9\\x37\\x15\\x77\\x06\\x79\\x84\\x7c\\x81\\x76\\x1b\\x82\\x84\\x8d\\x92\\x7a\\x1f\\x98\\x69\\x67\\x91\\x62\\x1b\\xfb\\x01\\xfb\\x07\\x58\\x38\"\n\"\\x3b\\x1f\\x42\\x40\\x64\\x2b\\x25\\x1a\\xfb\\x3d\\xf0\\xfb\\x02\\xf7\\x31\\xd3\\xca\\xa1\\xb5\\xc1\\x1e\\xa7\\xa2\\x9c\\x9e\\xa9\\xb8\\x78\\x9a\\x18\\x69\\x5b\"\n\"\\x77\\x78\\x67\\x76\\x08\\x78\\x69\\x67\\x81\\x66\\x1b\\x24\\x4c\\xd8\\xf7\\x13\\xa4\\x8d\\x9b\\x91\\xaf\\x1f\\xe7\\x06\\xcc\\x8d\\xa6\\x71\\x8d\\x4a\\x8c\\x7f\"\n\"\\x18\\x9e\\x06\\xc9\\xf7\\x7e\\x05\\x78\\x06\\x48\\x66\\x5c\\x6e\\x45\\x1b\\x35\\x06\\xa7\\xeb\\x9f\\xb4\\xb5\\xbd\\x08\\xc7\\xbe\\xc9\\xad\\xc6\\x1b\\xb3\\xab\"\n\"\\x7a\\x6a\\xa3\\x1f\\xa1\\x6d\\x93\\x6f\\x90\\x55\\x08\\x9f\\x06\\x0e\\x2a\\xf8\\xd0\\xf9\\x30\\x15\\x76\\x06\\x77\\x83\\x7b\\x82\\x70\\x1b\\x84\\x7f\\x8d\\x8e\"\n\"\\x7e\\x1f\\x9d\\x46\\x63\\x92\\x6b\\x1b\\xfb\\x03\\x3d\\x42\\x22\\x49\\xac\\x51\\xd6\\x45\\x1f\\xc0\\x5b\\x97\\x7f\\x94\\x7f\\x08\\x9e\\x72\\x94\\x71\\x72\\x1a\"\n\"\\x4c\\x52\\x52\\x4b\\x68\\x60\\xa0\\xa8\\x73\\x1e\\x70\\xab\\x77\\xc2\\xb6\\x1a\\x91\\x8c\\x95\\x8c\\x98\\x1e\\x72\\x06\\x59\\xfb\\x88\\x05\\xa4\\x06\\x9f\\x97\"\n\"\\x97\\x92\\xa0\\x1b\\x94\\x94\\x8a\\x89\\x93\\x1f\\x75\\xe3\\xa0\\x87\\xb4\\x1b\\xf7\\x14\\xef\\xe0\\xf7\\x01\\xc9\\x70\\xb9\\x3b\\xd4\\x1f\\x58\\xb9\\x7e\\x99\"\n\"\\x80\\x9a\\x08\\x75\\xa8\\x80\\xa9\\xa7\\x1a\\xc6\\xb3\\xb7\\xc2\\xda\\xcc\\x43\\x32\\x87\\x8b\\x85\\x8a\\x84\\x1e\\xa2\\x06\\x0e\\xfb\\x9c\\x7e\\x1d\\xfb\\x9c\"\n\"\\xf7\\xb6\\xa1\\x15\\x6f\\x54\\x0a\\x94\\x8b\\x8e\\x8d\\x92\\x1e\\xf7\\x17\\xf8\\x7f\\x2e\\x1d\\xfb\\xa3\\x06\\x86\\x43\\x1d\\x4b\\xf9\\xe9\\xa1\\x0a\\xf7\\x65\"\n\"\\xbe\\x1d\\xf7\\x6a\\xf9\\x14\\x15\\xa9\\x06\\xa5\\x9c\\x7a\\x71\\x86\\x8a\\x84\\x89\\x85\\x1f\\xfb\\x19\\xfc\\x8a\\x05\\x6a\\x82\\x80\\x7d\\x7b\\x1b\\x80\\x82\"\n\"\\x93\\x95\\x91\\x8d\\x90\\x8e\\x8f\\x1f\\x9b\\xa3\\x8e\\x92\\x9e\\x1a\\xab\\x76\\x9f\\x6a\\x68\\x70\\x6b\\x61\\x52\\xba\\x60\\xca\\xe5\\xd6\\xce\\xf7\\x00\\xa7\"\n\"\\x1e\\xf7\\x01\\xf8\\x2c\\x4a\\x1d\\x93\\x21\\x1d\\xfb\\xa5\\x06\\x0e\\xf7\\x93\\xf8\\x8b\\xf9\\x04\\x15\\xfb\\x23\\xfc\\xac\\x34\\x0a\\x7b\\x20\\x1d\\xf7\\xd7\"\n\"\\x06\\xf7\\x0e\\x39\\x1d\\x65\\xa6\\x69\\x92\\x20\\x8e\\xc1\\xf7\\x5e\\x18\\x91\\x9b\\x93\\xaa\\x9f\\x9b\\xa9\\x8e\\x19\\x97\\x21\\x1d\\xfc\\x77\\x06\\x84\\x75\"\n\"\\x05\\x99\\x06\\xaf\\xa5\\x73\\x6a\\x7e\\x89\\x80\\x81\\x64\\x1f\\x73\\x2f\\x05\\xfb\\xa1\\x44\\x5c\\xfb\\x04\\x5e\\x1b\\x81\\x85\\x92\\x9b\\x8a\\x1f\\xb2\\x8a\"\n\"\\x77\\xa1\\x69\\x1b\\x67\\x72\\x71\\x65\\x5c\\xad\\x6c\\xc1\\xf7\\x04\\xb7\\xd8\\xf7\\xfe\\xec\\x1f\\xbf\\xf7\\x58\\x05\\xf7\\x62\\xfb\\xb9\\x15\\xaf\\x9f\\x88\"\n\"\\x82\\x9c\\x1f\\xaa\\x7c\\xa0\\x64\\x61\\x1a\\x61\\x7b\\x57\\x75\\x6b\\x1e\\x61\\x6f\\x61\\x76\\x57\\x1b\\x7d\\x82\\x8c\\x8f\\x77\\x1f\\x0e\\xf7\\xd7\\xf9\\xbe\"\n\"\\xf9\\x2a\\x15\\xfb\\xa3\\x20\\x1d\\xa5\\x06\\xa6\\x9b\\x7a\\x71\\x83\\x8b\\x87\\x89\\x85\\x1f\\x51\\xfb\\x6d\\x05\\xfb\\x7a\\x4a\\x0a\\xfb\\xbd\\x06\\x86\\xb6\"\n\"\\x1d\\x7a\\x79\\x68\\x88\\x19\\x67\\x1d\\x71\\x8c\\x7a\\x9c\\xa4\\x1a\\x93\\x8b\\x8f\\x8d\\x91\\x1e\\xca\\xf7\\x82\\x05\\xf7\\x7a\\x06\\x4d\\xfb\\x7d\\x34\\x0a\"\n\"\\x67\\x20\\x1d\\xf7\\xeb\\x06\\xf7\\x0d\\xed\\xe4\\xf7\\x04\\xbb\\x6f\\xbb\\x5d\\xa9\\x1f\\x65\\xa4\\x69\\x92\\xfb\\x00\\x8e\\xc4\\xf7\\x68\\x18\\x91\\x9b\\x94\"\n\"\\xaa\\x9d\\x9b\\xaa\\x8e\\x19\\x97\\x06\\xfb\\x24\\xfb\\xd2\\x15\\x9a\\x06\\xd1\\xb5\\x64\\x49\\x64\\x7c\\x59\\x75\\x6c\\x1f\\x61\\x6f\\x61\\x76\\x57\\x1b\\x7d\"\n\"\\x82\\x8c\\x8f\\x77\\x1f\\x0e\\xf7\\x32\\xf8\\x5f\\xf9\\x00\\x15\\xc9\\x06\\xb0\\xa0\\x85\\x7c\\x9f\\x1f\\xa4\\x79\\x9a\\x6e\\x6e\\x1a\\x84\\x8a\\x83\\x8a\\x81\"\n\"\\x1e\\xa3\\x06\\xb6\\xf7\\x38\\x05\\xfc\\x96\\x06\\x45\\x42\\x0a\\xc8\\xf7\\x76\\x05\\x96\\xbf\\xa6\\x8f\\xab\\x1b\\xbf\\xa8\\x77\\x67\\x7c\\x89\\x81\\x7d\\x58\"\n\"\\x1f\\x70\\x23\\x7e\\x4e\\x0a\\xf7\\xa6\\x28\\x1d\\x6f\\x54\\x0a\\x92\\x8c\\x91\\x8c\\x91\\x1e\\xad\\xf7\\x13\\x05\\x91\\xa2\\x8e\\x9f\\x9e\\x1a\\xd0\\x53\\xb0\"\n\"\\x20\\x5c\\x6b\\x86\\x7a\\x46\\x1e\\x0e\\xa4\\xf7\\xcc\\xf7\\xf5\\x15\\xdc\\xfb\\x97\\x05\\x91\\x7b\\x8c\\x84\\x82\\x1a\\x73\\x7b\\x7b\\x73\\x49\\x0a\\xfb\\x03\"\n\"\\xf7\\xdc\\xf7\\x38\\xf7\\x2d\\xc3\\xb8\\xb2\\x9d\\xba\\x90\\x19\\x90\\x3b\\x0a\\x9c\\x98\\x7c\\x78\\x77\\x7b\\x6f\\x71\\x73\\x1f\\xfb\\x4e\\xfb\\x43\\xc4\\xf7\"\n\"\\x6b\\x4a\\x1d\\xa1\\x21\\x1d\\xfb\\xb1\\x45\\x0a\\xf7\\xa5\\x21\\x1d\\x6c\\x06\\x71\\x7a\\x9c\\xa5\\x93\\x8b\\x8f\\x8d\\x91\\x1f\\xf7\\x92\\xf9\\x0c\\x15\\xf7\"\n\"\\x2a\\xe1\\x05\\xa8\\x9c\\x94\\x96\\x9e\\x1a\\xa4\\x75\\xa0\\x71\\x7a\\xe9\\x1d\\xb6\\xf8\\xd2\\xf9\\xb0\\x15\\x73\\x6f\\x7a\\x65\\x6d\\x71\\x98\\x9a\\x8f\\x8c\"\n\"\\x8d\\x8f\\x96\\x1e\\x90\\x97\\x8d\\x94\\x92\\x1a\\xa0\\x77\\x9b\\x70\\x68\\xb3\\x1d\\x1e\\xfb\\x23\\xfc\\x9f\\x15\\x45\\xf7\\xa5\\x05\\x88\\x94\\x88\\xa3\\x93\"\n\"\\x1a\\xa6\\xa0\\x9a\\xb2\\x1e\\x92\\x06\\x92\\xa1\\x05\\xfb\\xab\\x06\\x85\\x75\\xbf\\x86\\x98\\x7a\\xa3\\x2a\\x19\\xf2\\xfc\\x0c\\x6b\\x5a\\x79\\x77\\x6f\\x77\"\n\"\\x19\\x80\\x7c\\x7e\\x85\\x85\\x1b\\x82\\x85\\x90\\x94\\x90\\x8b\\x8c\\x90\\x97\\x1f\\x8d\\x92\\x8c\\x90\\x90\\x1a\\xa9\\x6f\\xa3\\x67\\x63\\x6f\\x6e\\x61\\x58\"\n\"\\xae\\x6d\\xc8\\xbe\\xb5\\x9d\\xb4\\xb2\\x1e\\xa8\\xa8\\x9a\\x9e\\xd0\\xf0\\xf7\\x7e\\xf7\\xeb\\x18\\xbd\\xd2\\xab\\xa6\\xb4\\x8c\\x92\\xa1\\x18\\xfb\\x68\\x20\"\n\"\\x1d\\x97\\x06\\xa3\\x9a\\x7c\\x73\\x74\\x7f\\x6d\\x78\\x6e\\x1f\\x0e\\xf8\\x57\\xf8\\x50\\x15\\xfb\\x09\\x06\\x7c\\x55\\x05\\xb9\\x84\\x7a\\x9e\\x68\\x1b\\x61\"\n\"\\x5f\\x6f\\x55\\x5f\\x1f\\x50\\x43\\x68\\x2b\\x2f\\x1a\\x45\\xae\\x56\\xba\\xb9\\xac\\xad\\xf3\\xc1\\x1e\\x84\\x6c\\x89\\x7a\\x74\\x1a\\x5d\\x9f\\x76\\xb9\\xa8\"\n\"\\xaa\\x97\\xa0\\xa2\\x1e\\x9f\\x9d\\x99\\xa0\\xa3\\xb8\\x79\\x97\\x18\\x5d\\x73\\x79\\x78\\x78\\x1b\\x83\\x85\\x92\\x94\\x94\\x8d\\x95\\x93\\xa9\\x1f\\x30\\xf7\"\n\"\\xc4\\x15\\x9c\\x98\\x76\\x6e\\x56\\x7b\\x52\\x6a\\x44\\x1f\\x39\\x65\\x75\\x6d\\x74\\x1b\\x79\\x81\\x9d\\xaa\\xb5\\xa8\\xf4\\xa8\\xca\\x1f\\xc5\\xa6\\xa1\\xa5\"\n\"\\xa2\\x1b\\x0e\\xfb\\x2e\\xf7\\x3b\\xf8\\x0c\\x15\\xbe\\xf7\\x0d\\xa4\\xa2\\xde\\x90\\xf7\\x1a\\x8e\\xb6\\xaa\\xad\\xf7\\x0c\\x08\\x71\\x06\\x7e\\x6c\\x81\\x86\"\n\"\\x5b\\x8a\\x67\\x8c\\x6d\\x89\\x76\\x87\\x47\\x80\\x51\\x58\\x53\\x29\\x08\\x55\\x2b\\x60\\xfb\\x29\\x2b\\x1a\\x36\\xc3\\x4e\\xdb\\xb8\\xba\\x9f\\xb1\\xbb\\x1e\"\n\"\\xd6\\xc7\\xb9\\xec\\xeb\\x1a\\xe5\\x56\\xcb\\x40\\x4c\\x56\\x71\\x4f\\x4c\\x1e\\xf7\\x33\\xbf\\x7e\\x0a\\xfb\\x62\\xf7\\xb1\\xf7\\x82\\x15\\xbc\\x9c\\x9b\\x92\"\n\"\\x9d\\x97\\x08\\xb3\\xa5\\xa1\\xad\\xb0\\x1a\\xc0\\x62\\xaa\\x45\\xfb\\x29\\xfb\\x12\\xfb\\x20\\xfb\\x3a\\x2a\\xc9\\x4d\\xec\\xee\\xde\\xd4\\xe2\\xc4\\x68\\xaa\"\n\"\\x4a\\x1e\\x20\\x16\\xf7\\x15\\xb4\\xad\\xc0\\xb7\\x1b\\xa0\\x99\\x7b\\x72\\x6f\\x7c\\x6e\\x6f\\x72\\x1f\\x71\\x73\\x71\\x7e\\x50\\x75\\x08\\x82\\x6a\\x15\\x96\"\n\"\\xa7\\x98\\x8e\\x9b\\x1b\\xa7\\x99\\x7a\\x69\\x39\\x6b\\x4b\\x62\\x70\\x7b\\xa2\\xb1\\xa8\\x8f\\xa7\\x98\\xcc\\x1f\\x0e\\xfb\\xb0\\xf5\\x7c\\x1d\\x0e\\xfb\\x31\"\n\"\\xf7\\x3e\\xf9\\x13\\x15\\x94\\xa7\\x9e\\x8f\\xa1\\x1b\\xde\\xbd\\x44\\xfb\\x0a\\x7b\\x8a\\x7f\\x89\\x71\\x1f\\xac\\x7c\\x78\\x98\\x68\\x1b\\xfb\\x10\\xfb\\x06\"\n\"\\xfb\\x20\\xfb\\x2b\\xfb\\x01\\xbd\\x4a\\xdf\\xc4\\xc3\\xa6\\xb8\\xb4\\x1f\\xd4\\xde\\xb6\\xf7\\x12\\xf7\\x17\\x1a\\xf7\\x43\\x40\\xf3\\xfb\\x13\\x6f\\x74\\x88\"\n\"\\x82\\x68\\x1e\\xf7\\x11\\xfb\\x8c\\x15\\xa5\\x9a\\x78\\x68\\x4e\\x70\\xfb\\x08\\x6a\\x39\\x1f\\x51\\x73\\x73\\x72\\x6a\\x1b\\x71\\x7c\\xa1\\xb0\\xbc\\x9d\\xdd\"\n\"\\xab\\xeb\\x1f\\xd8\\xa5\\xa6\\xac\\xb1\\x1b\\x0e\\xfb\\x65\\x76\\x1d\\x0e\\xfb\\x65\\x76\\x1d\\xab\\xf8\\x54\\x15\\x3a\\x0a\\xaf\\x6d\\xaa\\x67\\x1f\\xf7\\x66\"\n\"\\x16\\x3a\\x0a\\xb0\\x6d\\xa9\\x67\\x1f\\x0e\\xf7\\xbf\\xf8\\x6d\\x16\\xa3\\xe5\\xba\\xe0\\xe0\\xf4\\x08\\x69\\x4a\\x80\\x67\\x5c\\x1a\\x35\\xb5\\x53\\xcb\\xc8\"\n\"\\xb9\\xad\\xe2\\xc4\\x1e\\x7b\\x96\\x05\\x59\\x63\\x72\\x78\\x70\\x1b\\x68\\x74\\xb2\\xc8\\xf7\\x0f\\xcb\\xf7\\x27\\xc1\\x98\\x95\\x84\\x81\\x84\\x88\\x88\\x7b\"\n\"\\x80\\x1f\\x7e\\x83\\x86\\x81\\x7d\\x1a\\x70\\x9e\\x79\\xa6\\xad\\xa3\\xa6\\xb1\\xb9\\x65\\xaf\\x59\\x45\\x32\\x39\\xfb\\x40\\xfb\\x08\\x1e\\xcb\\xf7\\x87\\x05\"\n\"\\x26\\x06\\x75\\x36\\x5e\\x3a\\x37\\x23\\x08\\xa9\\xcd\\x94\\xaa\\xb6\\x1a\\xdf\\x5f\\xc4\\x4c\\x4f\\x5e\\x69\\x35\\x52\\x1e\\x9a\\x80\\x05\\xb9\\xac\\xa9\\xa2\"\n\"\\xa7\\x1b\\xaf\\xa2\\x64\\x4f\\xfb\\x0a\\x4c\\xfb\\x2e\\x5a\\x80\\x80\\x95\\x95\\x90\\x8e\\x8f\\x92\\x90\\x1f\\x99\\x95\\x90\\x95\\x9c\\x1a\\xa5\\x78\\x9e\\x71\"\n\"\\x6a\\x72\\x6e\\x66\\x5d\\xb1\\x67\\xbc\\xd5\\xeb\\xe4\\xf7\\x3d\\xf6\\x1e\\x49\\xfb\\x8c\\x05\\x0e\\xfb\\x9b\\xf7\\x1e\\xf7\\x77\\x15\\x8c\\x96\\x90\\x8b\\x95\"\n\"\\x1b\\xb7\\x99\\x7e\\x65\\x41\\x64\\x54\\x57\\x65\\x70\\x9e\\xbc\\x6b\\x1f\\x76\\x7e\\x05\\x3b\\xae\\xba\\x6a\\xd9\\x1b\\xea\\xd0\\xcb\\xe2\\xc7\\x6d\\xaa\\x47\"\n\"\\x96\\x1f\\xe7\\x9a\\xb1\\xac\\xcd\\x1a\\xcc\\x5d\\xac\\x2f\\x61\\x6a\\x84\\x7d\\x70\\x1e\\x67\\x77\\x75\\x6b\\x6c\\x1a\\x6e\\x9e\\x78\\xa6\\xa4\\xa0\\x9d\\xa1\"\n\"\\x94\\x88\\x94\\x84\\x94\\x1e\\x7f\\x99\\x8a\\x8d\\x92\\x1a\\x9c\\xab\\x99\\xaf\\xb6\\xa0\\x78\\x67\\x67\\x7b\\x66\\x73\\x79\\x1e\\x80\\x7d\\x77\\x85\\x71\\x1b\"\n\"\\x83\\x86\\x8b\\x8d\\x80\\x1f\\x0e\\x2a\\x72\\x1d\\x0e\\x2a\\xf8\\x2d\\xf8\\xf6\\x15\\x8c\\x87\\x8b\\x88\\x88\\x1a\\x77\\x70\\x7c\\x68\\x6f\\x76\\x96\\x9a\\x8e\"\n\"\\x8d\\x91\\x8c\\x8f\\x1e\\x93\\x9a\\x8b\\x8b\\x93\\x1a\\x9f\\x7b\\x98\\x73\\x6c\\x74\\x73\\x6c\\x5e\\xb9\\x71\\xda\\xe6\\xc7\\xad\\xbf\\xa4\\x7c\\x9a\\x73\\x72\"\n\"\\x78\\x79\\x74\\x1e\\xe6\\xfb\\x43\\x15\\x77\\x1d\\xc4\\xbf\\xb8\\xde\\xb2\\x1e\\x77\\x93\\x05\\x5e\\x76\\x79\\x71\\x7f\\x1b\\x87\\x88\\x8f\\x90\\x90\\x8c\\x91\"\n\"\\x90\\x9c\\x1f\\x0e\\xfb\\x26\\x5b\\x0a\\x0e\\xfb\\x20\\xf8\\x58\\xf8\\x50\\x15\\x46\\x06\\xfb\\x12\\x8c\\x46\\x32\\x52\\xfb\\x83\\x08\\x62\\x83\\x85\\x80\\x80\"\n\"\\x1b\\x85\\x88\\x8e\\x94\\x87\\x1f\\x9e\\x81\\x7f\\x93\\x77\\x1b\\x6d\\x77\\x76\\x6b\\x66\\xa5\\x73\\xb2\\xa3\\xa1\\x94\\x9c\\x97\\x1f\\x9c\\xa0\\x95\\xa5\\xa8\"\n\"\\xed\\x08\\xf7\\x32\\xb8\\xac\\xc2\\xba\\x1b\\x95\\x06\\x43\\xfb\\xa7\\x05\\x86\\x76\\x89\\x7e\\x7d\\x1a\\x68\\xa6\\x71\\xb2\\xbc\\xb4\\xad\\xd9\\xb8\\x1e\\x7a\"\n\"\\x96\\x05\\x66\\x77\\x7a\\x7a\\x7b\\x1b\\x83\\x87\\x8f\\x93\\x90\\x8d\\x93\\x8e\\x9a\\x1f\\x0e\\xab\\xf8\\x87\\xf7\\xed\\x15\\x4b\\xfb\\x8c\\x05\\x85\\x76\\x89\"\n\"\\x7d\\x7f\\x1a\\x68\\xa6\\x72\\xb1\\xbd\\xb4\\xac\\xd9\\xb9\\x1e\\x79\\x96\\x05\\x66\\x77\\x79\\x79\\x7c\\x1b\\x83\\x87\\x8f\\x94\\x8f\\x8d\\x93\\x8e\\x9a\\x1f\"\n\"\\xe7\\xf7\\xef\\x05\\xfb\\x14\\x06\\xfb\\x39\\xfb\\x9e\\x69\\xf7\\xac\\xfb\\x57\\x6e\\x85\\x75\\x05\\x92\\x06\\xa5\\x99\\x7e\\x72\\x83\\x8a\\x82\\x89\\x84\\x1f\"\n\"\\x54\\xfb\\x63\\x7d\\x55\\x05\\x7f\\x87\\x85\\x85\\x83\\x1b\\x86\\x88\\x8e\\x95\\x87\\x1f\\x9d\\x83\\x7f\\x93\\x77\\x1b\\x6c\\x76\\x76\\x6a\\x66\\xa4\\x73\\xb2\"\n\"\\xc2\\xa3\\xab\\xf7\\x08\\xa9\\x1f\\xcc\\xf7\\x8a\\xba\\xfc\\x1d\\x05\\xa3\\x06\\x0e\\x29\\xf7\\x85\\xf7\\x94\\x15\\xc0\\xf7\\x5e\\xfb\\x4a\\x48\\x1d\\x75\\x84\"\n\"\\x8a\\x84\\x88\\x81\\x1f\\x30\\xfb\\xf1\\x05\\xf7\\x09\\x06\\xc6\\xf7\\x73\\x05\\xf6\\x06\\x6a\\xfb\\x12\\x05\\x88\\x80\\x89\\x79\\x7d\\x1a\\x63\\xa3\\x73\\xb3\"\n\"\\xbc\\xb7\\xaf\\xd6\\xb6\\x1e\\x79\\x95\\x05\\x63\\x73\\x7d\\x7d\\x7d\\x1b\\x84\\x85\\x90\\x93\\x8d\\x8b\\x8c\\x90\\xa3\\x1f\\xe6\\xf7\\xef\\x05\\xfb\\x09\\x06\"\n\"\\x59\\xfb\\x50\\x05\\x0e\\xf7\\xd8\\xf8\\x5b\\x15\\xfb\\x1f\\xfb\\x16\\xfb\\x2b\\xfb\\x36\\x30\\xc1\\x4e\\xdc\\xb1\\xb1\\x98\\xa6\\xb4\\x1f\\xe4\\xc7\\xc3\\xf2\"\n\"\\xf6\\x1a\\xe5\\x55\\xcc\\x41\\x1e\\x77\\x69\\x7e\\x0a\\x2a\\xf7\\x3b\\x16\\xba\\xf7\\x47\\x94\\xaf\\xa8\\xc5\\xb1\\xc5\\x19\\xa2\\x9a\\x9b\\x98\\x98\\x1b\\x95\"\n\"\\x91\\x84\\x80\\x7e\\x8b\\x8b\\x82\\x68\\x1f\\x5a\\xfb\\x51\\x05\\x81\\x64\\x8b\\x8a\\x7c\\x1a\\x64\\xa5\\x6f\\xae\\xa5\\xaa\\x97\\x9e\\xa1\\x1e\\xa1\\x9e\\x98\"\n\"\\x9e\\xa4\\xbb\\x76\\x98\\x18\\x5c\\x72\\x82\\x80\\x7d\\x1b\\x84\\x87\\x8f\\x93\\x91\\x8c\\x93\\x8e\\x94\\x1f\\xc6\\xf7\\x78\\x05\\x91\\xa3\\x8e\\x9b\\x9b\\x1a\"\n\"\\xb8\\x71\\xa8\\x63\\x53\\x54\\x53\\xfb\\x04\\x54\\x1e\\xb7\\xf7\\x3f\\xfb\\x49\\x72\\x85\\x74\\x05\\x96\\x06\\xa0\\x99\\x7c\\x75\\x84\\x8a\\x85\\x88\\x81\\x1f\"\n\"\\x30\\xfb\\xf2\\x05\\x0e\\xf7\\x33\\x8a\\x15\\x84\\xa0\\x94\\x89\\x9a\\x1b\\xc1\\xc9\\xab\\xc2\\xbb\\x1f\\xc2\\xc8\\xac\\xe6\\xe4\\x1a\\xdf\\x67\\xc0\\x53\\x71\"\n\"\\x7a\\x83\\x6d\\x66\\x1e\\x86\\x86\\x83\\x85\\x84\\x85\\x97\\xb7\\x18\\x72\\x06\\xfb\\x33\\x6d\\x85\\x76\\x05\\xab\\x98\\x80\\x6d\\x82\\x8a\\x83\\x86\\x79\\x1f\"\n\"\\x22\\xfc\\x25\\x05\\x5f\\x7e\\x75\\x73\\x6c\\x1b\\x81\\x06\\x86\\x78\\x05\\xf7\\x8d\\x06\\x8f\\x9e\\x05\\x87\\x06\\x71\\x72\\xa3\\xa5\\x96\\x8c\\x94\\x8e\\x95\"\n\"\\x1f\\xf6\\xf8\\x2d\\x15\\xa7\\x98\\x9c\\x98\\xa3\\x1b\\xa5\\x9c\\x6f\\x5e\\x50\\x79\\x3b\\x70\\x4f\\x1f\\x4d\\x6f\\x6e\\x6d\\x6a\\x1b\\x7b\\x82\\x92\\xa0\\x7d\"\n\"\\x1f\\x0e\\xfb\\x65\\xf7\\xf9\\xf7\\x0d\\x15\\x5c\\x6b\\x69\\x75\\x61\\x1b\\x4f\\x6b\\xb3\\xd5\\xca\\xa8\\xe4\\xb1\\xc3\\x1f\\xac\\xa1\\xb0\\xa0\\xab\\x1b\\x9e\"\n\"\\x9b\\x82\\x81\\x87\\x88\\x86\\x86\\x87\\x1f\\x6f\\x76\\x85\\x81\\x75\\x1a\\x70\\x9f\\x75\\xa4\\xac\\xa9\\xaf\\xb2\\xbd\\x61\\xaf\\x53\\xfb\\x14\\xfb\\x24\\xfb\"\n\"\\x3b\\xfb\\x27\\x32\\xc4\\x4d\\xdd\\xd2\\xca\\xb1\\xda\\xc4\\x1e\\x0e\\xf7\\x11\\xf7\\x2e\\x16\\xb4\\xf7\\x2e\\x92\\xa7\\xb4\\xe4\\x9d\\xa6\\x19\\xb6\\xa8\\xaa\"\n\"\\xa6\\x9f\\x1b\\x95\\x92\\x83\\x7f\\x82\\x88\\x7b\\x87\\x7d\\x1f\\x35\\xfb\\xc9\\x05\\xf7\\x0b\\x06\\xab\\xf7\\x0e\\x05\\xf7\\x1e\\xaf\\xd0\\xf7\\x03\\xbd\\x1b\"\n\"\\x93\\x93\\x83\\x82\\x84\\x8b\\x89\\x85\\x71\\x1f\\x4d\\xfb\\x7f\\x05\\x88\\x7e\\x89\\x7e\\x81\\x1a\\x6a\\xa6\\x72\\xaf\\xba\\xb3\\xaa\\xd6\\xbb\\x1e\\x7c\\x97\"\n\"\\x05\\x65\\x73\\x7b\\x7b\\x7e\\x1b\\x83\\x87\\x90\\x95\\x91\\x8b\\x8b\\x8f\\x9b\\x1f\\xc7\\xf7\\x78\\x05\\x91\\xa1\\x8e\\xa3\\x9e\\x1a\\xb5\\x71\\xa8\\x65\\x4e\"\n\"\\x4d\\x4f\\xfb\\x0d\\x4d\\x1e\\x95\\xb7\\x91\\xb4\\xab\\x1a\\xb0\\x74\\xa6\\x6c\\x5f\\x5d\\x6d\\x54\\x63\\x1e\\x74\\x6c\\x80\\x79\\x6d\\x56\\xbd\\xf7\\x52\\x18\"\n\"\\xfb\\x4a\\x4c\\x0a\\x85\\x88\\x81\\x1f\\x30\\xfb\\xf2\\x05\\x0e\\xfb\\x65\\x74\\x1d\\x0e\\xca\\xf8\\xad\\xf9\\x3b\\x15\\xfb\\x4c\\x6e\\x85\\x75\\x05\\x91\\x06\"\n\"\\xa5\\x9a\\x7e\\x73\\x84\\x8a\\x82\\x88\\x83\\x1f\\x63\\xfb\\x2e\\x05\\xaa\\x74\\x75\\x96\\x69\\x1b\\xfb\\x05\\xfb\\x09\\xfb\\x29\\xfb\\x24\\x5d\\x96\\x5e\\x9e\"\n\"\\x6c\\x1f\\x69\\xa1\\xa7\\x7b\\xb3\\x1b\\xaf\\xa6\\x94\\x9f\\xa2\\x1f\\x8f\\x06\\x72\\x2d\\x05\\x48\\x78\\x79\\x7b\\x57\\x1b\\x82\\x06\\x85\\x76\\x05\\xf7\\xa1\"\n\"\\x06\\x91\\xa0\\x05\\x5d\\x7b\\x95\\xa8\\x98\\x8c\\x8e\\x92\\xa7\\x1f\\xa5\\xef\\x05\\x72\\xa4\\xa2\\x81\\xac\\x1b\\xf7\\x07\\xf7\\x06\\xf7\\x25\\xf7\\x26\\xf4\"\n\"\\x5b\\xd0\\x41\\x6a\\x73\\x82\\x74\\x70\\x1f\\x88\\x06\\xfb\\x46\\x79\\x15\\xa6\\x9a\\x77\\x6a\\x64\\x6e\\xfb\\x0e\\x72\\x47\\x1f\\x4d\\x74\\x73\\x70\\x6b\\x1b\"\n\"\\x6f\\x79\\x9f\\xac\\xb9\\xa5\\xf7\\x08\\xa5\\xce\\x1f\\xcb\\xa3\\xa3\\xa4\\xb0\\x1b\\xf7\\x79\\x16\\xa8\\x9b\\x77\\x67\\x57\\x72\\xfb\\x02\\x70\\x49\\x1f\\x4b\"\n\"\\x70\\x75\\x74\\x68\\x1b\\x70\\x7b\\x9f\\xac\\xb4\\xa6\\xf7\\x07\\xa6\\xd3\\x1f\\xcb\\xa3\\xa2\\xa5\\xac\\x1b\\x0e\\xf8\\x34\\xf7\\x0a\\x15\\x6c\\x7a\\x77\\x77\"\n\"\\x7c\\x1b\\x7f\\x7e\\x95\\x9a\\x83\\x1f\\x81\\xa0\\x85\\x9f\\x70\\xf0\\x83\\xa8\\x18\\xaa\\xc7\\x8b\\x8b\\x94\\x9a\\x08\\x9d\\x96\\x97\\x93\\x9c\\x1b\\x90\\x91\"\n\"\\x8a\\x8a\\x8f\\x1f\\x82\\xa8\\x8b\\x8b\\x96\\x1b\\xa7\\xa1\\xa3\\xa8\\xa9\\x71\\xa2\\x69\\x69\\x68\\x70\\x5e\\x73\\x1f\\x5f\\x38\\x81\\xb8\\x86\\x9c\\x6b\\xea\"\n\"\\x19\\xfb\\x2f\\x6b\\x85\\x75\\x05\\x8d\\x94\\x94\\x8c\\x91\\x1b\\xa6\\xa2\\x6f\\x59\\x97\\x1f\\xaf\\xfb\\x26\\x61\\x41\\x05\\x76\\x7f\\x7e\\x80\\x7e\\x1b\\x85\"\n\"\\x85\\x8c\\x8e\\x86\\x1f\\x99\\x72\\x88\\x8c\\x7e\\x1b\\x6c\\x75\\x74\\x6b\\x6a\\xa0\\x76\\xae\\xad\\xb7\\xab\\xb8\\xa5\\x1f\\xb8\\xd9\\x05\\xfb\\x10\\xa9\\xa0\"\n\"\\x6c\\xc5\\x1b\\xbb\\xb1\\xac\\xdd\\xb9\\x1f\\x0e\\x2a\\xf8\\x68\\x66\\x0a\\xb9\\xab\\xa5\\xf1\\xd9\\x9a\\x1d\\xa9\\xa2\\x95\\xa4\\xaa\\x1e\\x79\\x6a\\x85\\x7b\"\n\"\\x76\\x1a\\x80\\x8d\\x84\\x90\\x7d\\x1e\\x90\\x7f\\x8c\\x86\\x83\\x1a\\x71\\x7e\\x7a\\x6f\\x82\\x1e\\x96\\x73\\xab\\xb9\\x0a\\x99\\x87\\x96\\x7e\\xa0\\x1e\\x7e\"\n\"\\x9e\\x87\\x95\\x93\\x1a\\x9b\\x90\\x97\\xad\\xcd\\x1e\\x0e\\xfb\\x14\\xf7\\xab\\xf8\\x5e\\x15\\x8c\\x1d\\xbc\\xb3\\xab\\xd9\\xb9\\x1e\\x79\\x95\\x05\\x68\\x78\"\n\"\\x79\\x78\\x7c\\x1b\\x82\\x88\\x8f\\x95\\x92\\x8b\\x8c\\x90\\x9d\\x1f\\xe7\\xf7\\xf0\\x05\\xfb\\x0a\\x06\\x7e\\x59\\x05\\x36\\x74\\x51\\x3e\\xe5\\x1d\\x0e\\xf7\"\n\"\\x48\\xf9\\x67\\xf7\\x05\\x15\\x67\\x77\\x7a\\x79\\x7c\\x1b\\x82\\x88\\x8f\\x94\\x91\\x8c\\x91\\x8f\\x99\\x1f\\xe6\\xf7\\xee\\x05\\xfb\\x0a\\x06\\x6b\\xfb\\x0e\"\n\"\\x78\\x45\\x5d\\x2a\\x62\\x54\\x19\\x7c\\x80\\x7e\\x82\\x81\\x1b\\x83\\x85\\x92\\x94\\x90\\x8d\\x95\\x8e\\x94\\x1f\\x8c\\x8e\\x8d\\x92\\x8d\\x95\\xdc\\xf7\\xc8\"\n\"\\x18\\xfb\\x09\\x06\\x6a\\xfb\\x0e\\x79\\x46\\x5e\\x2d\\x5e\\x50\\x19\\x7c\\x80\\x7f\\x82\\x81\\x1b\\x83\\x87\\x91\\x96\\x93\\x8b\\x8d\\x94\\xac\\x1f\\xdf\\xf7\"\n\"\\xd6\\xfb\\x4a\\x71\\x85\\x74\\x05\\x8c\\x90\\x8f\\x8b\\x8d\\x1b\\xa0\\x99\\x7c\\x75\\x84\\x8a\\x83\\x89\\x82\\x1f\\x55\\xfb\\x5f\\x05\\x81\\x63\\x88\\x7a\\x77\"\n\"\\x1a\\x5c\\xa6\\x6b\\xb2\\xbd\\xb6\\xb3\\xf5\\xcc\\x1e\\x7f\\x61\\x87\\x79\\x77\\x1a\\x63\\xa5\\x71\\xb3\\xc2\\xb5\\xb1\\xf7\\x00\\xcd\\x1e\\x7d\\x5a\\x88\\x7a\"\n\"\\x78\\x1a\\x68\\xa6\\x71\\xb1\\xbd\\xb3\\xac\\xda\\xb9\\x1e\\x0e\\xf7\\x48\\xf7\\xd4\\xf8\\x5e\\x15\\xfb\\x4a\\x48\\x1d\\x76\\x84\\x8a\\x83\\x88\\x81\\x1f\\x56\"\n\"\\xfb\\x60\\x05\\x80\\x60\\x88\\x7d\\x77\\x1a\\x5d\\xa6\\x6b\\xb1\\xbf\\xb8\\xb4\\xf4\\xcb\\x1e\\x7e\\x62\\x87\\x76\\x79\\x1a\\x63\\xa5\\x71\\xb3\\xc3\\xbb\\xb5\"\n\"\\xf3\\xc8\\x1e\\x7d\\x59\\x88\\x7a\\x79\\x1a\\x67\\xa7\\x72\\xb2\\xa7\\x9b\\x92\\xaa\\xb1\\x1e\\x71\\x5d\\x89\\x85\\x74\\x1a\\x82\\x8d\\x83\\x90\\x7e\\x1e\\x90\"\n\"\\x7f\\x8c\\x87\\x83\\x1a\\x70\\x7e\\x7a\\x70\\x82\\x1e\\x96\\x73\\xab\\x9a\\x98\\x94\\x9c\\x9c\\x19\\xa3\\xa3\\x98\\xa8\\xa4\\x1a\\x99\\x85\\x9a\\x81\\x9c\\x1e\"\n\"\\x7d\\xa0\\x88\\x92\\x96\\x1a\\x9d\\x94\\xa0\\xa2\\xaf\\x1e\\x7a\\x96\\x05\\x66\\x77\\x79\\x78\\x7d\\x1b\\x82\\x87\\x90\\x95\\x91\\x8c\\x8f\\x8f\\x9a\\x1f\\xe6\"\n\"\\xf7\\xf0\\x05\\xfb\\x0b\\x06\\x6b\\xfb\\x0d\\x78\\x44\\x5d\\x2a\\x61\\x52\\x19\\x7c\\x80\\x7e\\x82\\x81\\x1b\\x83\\x85\\x92\\x95\\x8f\\x8b\\x8b\\x95\\xb4\\x1f\"\n\"\\xdc\\xf7\\xc8\\x05\\xfb\\x0a\\x06\\x6a\\xfb\\x0d\\x05\\x22\\x70\\x39\\xfb\\x24\\x6a\\x1b\\x83\\x87\\x91\\x96\\x94\\x8d\\x98\\x92\\xa2\\x1f\\x0e\\xfb\\x12\\xf8\"\n\"\\x0a\\xf8\\x59\\x15\\x7e\\x78\\x81\\x87\\x7a\\x1b\\x79\\x76\\x8f\\x98\\x5f\\x1f\\x94\\x6b\\x81\\x8d\\x79\\x1b\\x69\\x6e\\x80\\x74\\x71\\x1f\\x7f\\x81\\x89\\x89\"\n\"\\x6f\\x6e\\x9d\\x78\\x18\\xa3\\x9d\\x99\\x93\\x9f\\x1b\\x93\\x96\\x89\\x87\\x94\\x1f\\x7f\\xad\\x8f\\x8a\\x99\\x1b\\x9c\\x93\\x8d\\x9a\\xb5\\x1f\\x90\\x8d\\x97\"\n\"\\x8f\\x99\\x90\\x41\\x5a\\x6b\\x6f\\x6e\\x65\\x08\\x67\\x5b\\x74\\x4d\\x59\\x1a\\x64\\x9a\\x61\\xa4\\x6f\\x1e\\x73\\xa1\\xad\\x7e\\xb2\\x1b\\xf7\\x07\\xe6\\xdc\"\n\"\\xf2\\xd4\\x64\\xb9\\x4e\\x73\\x77\\x86\\x7d\\x66\\x1f\\xa0\\xc7\\xb7\\xc9\\xc0\\xb5\\x08\\xfb\\x17\\xfb\\x59\\x15\\x93\\xa0\\x94\\x8d\\x95\\x1b\\xa7\\x9e\\x70\"\n\"\\x62\\x36\\x5e\\x3d\\x5b\\x74\\x7e\\x9f\\xac\\xb2\\x97\\xbc\\xa9\\xdb\\x1f\\x0e\\xb4\\xf7\\xb8\\xf8\\x5e\\x15\\xfb\\x4a\\x72\\x84\\x74\\x05\\x96\\x06\\xa0\\x98\"\n\"\\x7d\\x76\\x84\\x8a\\x85\\x87\\x7f\\x1f\\x55\\xfb\\x4c\\x05\\x86\\x7c\\x87\\x6d\\x7b\\x1a\\x47\\xc0\\x5c\\xd9\\xf7\\x08\\xe9\\xe2\\xf6\\xd0\\x67\\xb5\\x4f\\x72\"\n\"\\x84\\x89\\x79\\x55\\x1e\\x81\\x6b\\x15\\x91\\xa0\\x96\\x8e\\x94\\x1b\\xa4\\x9b\\x77\\x6a\\x65\\x7d\\x58\\x77\\x68\\x1f\\x68\\x77\\x76\\x79\\x74\\x1b\\x78\\x7c\"\n\"\\x9c\\xa0\\x95\\x8d\\x95\\x91\\xa1\\x1f\\xf7\\xfd\\xf7\\xea\\x15\\x31\\xfb\\xed\\x05\\x86\\x78\\x89\\x7c\\x7d\\x1a\\x68\\xa6\\x71\\xb2\\xbc\\xb4\\xac\\xda\\xb8\"\n\"\\x1e\\x79\\x96\\x05\\x67\\x78\\x7a\\x79\\x7b\\x1b\\x83\\x87\\x8f\\x93\\x91\\x8d\\x94\\x8e\\x98\\x1f\\xe6\\xf7\\xed\\x05\\x0e\\xfb\\x58\\xf7\\xa5\\xf8\\x5e\\x15\"\n\"\\xfb\\x4a\\x72\\x85\\x74\\x05\\x96\\x06\\xa0\\x99\\x7c\\x75\\x84\\x8a\\x87\\x88\\x7f\\x1f\\x5b\\xfb\\x4c\\x05\\x87\\x7d\\x88\\x70\\x7b\\x1a\\x45\\xc3\\x5a\\xda\"\n\"\\xf7\\x06\\xe5\\xde\\xf4\\xd4\\x64\\xb7\\x4b\\x73\\x85\\x89\\x79\\x56\\x1e\\x82\\x6b\\x15\\x91\\x9f\\x98\\x8e\\x94\\x1b\\xa6\\x9b\\x75\\x67\\x35\\x5c\\x35\\x5c\"\n\"\\x78\\x7b\\x9d\\xa1\\x95\\x8b\\x8b\\x93\\xa9\\x1f\\x0e\\xfb\\x82\\x89\\xe8\\x15\\x9f\\x68\\x96\\x7c\\x9c\\x7c\\x08\\x72\\xa6\\xaf\\x7e\\xb1\\x1b\\xf7\\x18\\xf7\"\n\"\\x05\\xf7\\x18\\xf7\\x30\\xc2\\x7d\\xbc\\x71\\xaa\\x1f\\xa6\\x75\\x64\\x9a\\x5a\\x1b\\x25\\x43\\x5e\\x4c\\x6f\\x9e\\x78\\xa6\\xa4\\x9f\\x9e\\xa1\\x94\\x88\\x94\"\n\"\\x84\\x93\\x1f\\x7f\\x9a\\x8a\\x8c\\x92\\x1a\\x9d\\xb1\\x9b\\xb6\\xbc\\xa1\\x76\\x5e\\x71\\x86\\x6e\\x80\\x59\\x1e\\xfb\\x1a\\x06\\x82\\x6b\\x05\\xf7\\x1b\\x06\"\n\"\\xfb\\x26\\x69\\x69\\x55\\x50\\x1b\\x5b\\x64\\xa8\\xc3\\x6f\\x1f\\x0e\\xd8\\xf7\\x40\\x16\\xc6\\xf7\\x73\\x05\\xd5\\x06\\x83\\x6b\\x88\\x76\\x71\\x1a\\x2d\\xc0\"\n\"\\x4f\\xdf\\xaf\\xb2\\x98\\xa6\\xb3\\x1e\\xe4\\xc6\\xc3\\xf3\\xf4\\x1a\\xe8\\x56\\xcb\\x40\\x25\\x28\\x3c\\xfb\\x0c\\x5d\\x1e\\x3e\\x06\\xc0\\xf7\\x5e\\xfb\\x4a\"\n\"\\x4c\\x0a\\x84\\x88\\x82\\x1f\\x30\\xfb\\xf2\\x05\\xf8\\x7c\\xf8\\x39\\x15\\xa5\\x9b\\x76\\x68\\x4b\\x6c\\xfb\\x15\\x69\\x3a\\x1f\\x5c\\x77\\x72\\xdb\\x1d\\xc1\"\n\"\\x9f\\xaa\\xa9\\xae\\x1b\\x0e\\xfb\\x1e\\xf8\\x4f\\xf7\\x06\\x15\\x61\\x72\\x7f\\x7f\\x7e\\x1b\\x82\\x86\\x90\\x94\\x90\\x8c\\x8e\\x8d\\x96\\x1f\\x8c\\x8f\\x05\"\n\"\\x8c\\x8d\\x8b\\x8d\\x8c\\x1a\\xe5\\xf7\\xea\\x05\\xfb\\x5b\\x06\\x28\\x4c\\x59\\x3d\\x6e\\x95\\x71\\x9d\\x79\\x1f\\x9b\\x7c\\x9c\\x84\\xb3\\x80\\x3f\\x83\\x6e\"\n\"\\x73\\x64\\x35\\x08\\x61\\x78\\x80\\x7f\\x7a\\x1b\\x7d\\x80\\x97\\xa0\\x84\\x1f\\x76\\x82\\x05\\x54\\xa3\\xa0\\x7a\\xb8\\x1b\\xcb\\xb5\\xaf\\xd9\\xa7\\x1f\\xa7\"\n\"\\xe2\\x9e\\x9f\\xc2\\x8a\\x6e\\xfb\\x00\\x18\\x87\\x7a\\x88\\x78\\x7e\\x1a\\x66\\xa7\\x71\\xb1\\xbd\\xb4\\xad\\xd9\\xb7\\x1e\\xfb\\x31\\xf7\\x1f\\x15\\x89\\x81\"\n\"\\x87\\x8b\\x85\\x1b\\x66\\x74\\xa6\\xb8\\xc8\\xb3\\xb3\\xc9\\x92\\x90\\x8b\\x89\\x95\\x1f\\x0e\\xfb\\xb0\\xf7\\x93\\xf8\\x2e\\x15\\xf7\\x3d\\x06\\xa7\\xed\\x05\"\n\"\\x78\\x06\\x73\\x5d\\x6f\\x7b\\x51\\x8a\\x08\\xfb\\x79\\x06\\x85\\x77\\x05\\x99\\x06\\x9d\\x97\\x81\\x7c\\x88\\x8a\\x87\\x8a\\x88\\x1f\\x2e\\xfb\\xdf\\x84\\x70\"\n\"\\x7f\\x81\\x74\\x89\\x19\\x86\\x06\\x85\\x77\\x05\\xf7\\x68\\x06\\x91\\x9f\\x05\\x78\\x06\\x79\\x7e\\x96\\x9a\\x8c\\x1f\\x8e\\x8c\\x8e\\x8c\\x8f\\x1e\\x0e\\xfb\"\n\"\\x16\\xf7\\xf1\\xf9\\x3b\\x15\\xfb\\x4d\\x6e\\x86\\x75\\x05\\x91\\x06\\xa3\\x9b\\x7d\\x75\\x80\\x8a\\x85\\x83\\x6e\\x1f\\x49\\x06\\x82\\x68\\x05\\xcd\\x06\\xfb\"\n\"\\x1a\\xfc\\x93\\x05\\xf7\\x09\\x06\\xb1\\xf7\\x23\\x9a\\xc2\\xb9\\xe7\\xb2\\xbc\\x19\\x9b\\x98\\x9c\\x96\\x95\\x1b\\x95\\x91\\x81\\x7d\\x55\\x5a\\xfb\\x72\\x64\"\n\"\\xfb\\x0c\\x1f\\x44\\x74\\x7b\\x70\\x78\\x1b\\x84\\x88\\x8d\\x90\\x8e\\x8c\\x8d\\x8e\\x91\\x1f\\x8f\\x92\\x8d\\x8f\\x91\\x1a\\xa2\\x78\\x9e\\x73\\x70\\x78\\x78\"\n\"\\x6f\\x67\\xa9\\x73\\xb9\\xc8\\xc0\\xb4\\xdf\\xbb\\x1e\\xc9\\xf7\\x03\\xc6\\xf7\\x61\\xf7\\x00\\x1a\\xc3\\x75\\xab\\x63\\x68\\x68\\x78\\x66\\x68\\x1e\\x75\\x74\"\n\"\\x7e\\x77\\x63\\x48\\xc6\\xf7\\x72\\xe8\\x1d\\xfb\\x98\\xf7\\x0a\\x7c\\x1d\\xf7\\x2d\\xf7\\x26\\x15\\xf7\\x2a\\xe3\\x05\\xa8\\x9c\\x94\\x96\\x9e\\x1a\\xa4\\x75\"\n\"\\xa1\\x72\\x79\\x7b\\x80\\x64\\x67\\x1e\\xfb\\x0c\\xfb\\x18\\x05\\x0e\\xfb\\x82\\xf7\\x3a\\xf7\\x91\\x15\\xf7\\x05\\xad\\xba\\xc3\\xc7\\x1b\\x9e\\x9a\\x82\\x81\"\n\"\\x87\\x88\\x86\\x86\\x88\\x1f\\x70\\x76\\x85\\x81\\x75\\x1a\\x71\\x9f\\x75\\xa4\\xab\\xa8\\xae\\xb1\\xc2\\x62\\xb0\\x4c\\x4d\\x56\\x71\\x55\\x5a\\x1e\\x50\\x49\"\n\"\\x66\\x30\\x3d\\x1a\\x32\\xc3\\x4e\\xdc\\xd2\\xcb\\xb3\\xd9\\xc2\\x1e\\x76\\x96\\x05\\x5d\\x6b\\x6a\\x75\\x62\\x1b\\x50\\x6c\\xb3\\xd6\\x9d\\x8c\\x99\\x90\\xa2\"\n\"\\x1f\\xf7\\x24\\x06\\x93\\xab\\x05\\x0e\\xfb\\x9c\\xf7\\xfd\\xf8\\x5c\\x15\\x6e\\x06\\x79\\x80\\x88\\x89\\x7d\\x1b\\x80\\x83\\x8d\\x92\\x7a\\x1f\\x94\\x72\\x7e\"\n\"\\x8e\\x77\\x1b\\x3b\\x57\\x5a\\x41\\x55\\x9a\\x6d\\xcc\\x3e\\x1f\\xb1\\x5f\\x9d\\x69\\x72\\x1a\\x6e\\x72\\x73\\x6c\\x75\\x75\\x96\\x9f\\x7b\\x1e\\x78\\xa4\\x83\"\n\"\\xa1\\x83\\xc0\\x70\\x8e\\x18\\x76\\xfb\\x38\\x05\\xa6\\x06\\x97\\x8f\\x96\\x93\\x98\\x1b\\x92\\x96\\x88\\x86\\x98\\x1f\\x83\\xa3\\x9d\\x87\\xa0\\x1b\\xde\\xc9\"\n\"\\xc3\\xd5\\xb8\\x72\\xbc\\x53\\xcb\\x1f\\x64\\xb7\\x7a\\xa9\\xa2\\x1a\\xab\\x9f\\x9f\\xab\\xb8\\xa6\\x67\\x3a\\x9b\\x1e\\xa6\\x89\\x05\\x0e\\xfc\\x0b\\xf7\\x7b\"\n\"\\xf7\\x0b\\x15\\x5e\\x6b\\x77\\x78\\x6a\\x1d\\x8b\\x8b\\x90\\x9b\\x1f\\xf3\\xf7\\xf9\\xfb\\x50\\x70\\x85\\x73\\x05\\x8d\\x92\\x92\\x8c\\x8f\\x1b\\x9c\\x9a\\x7d\"\n\"\\x7d\\x83\\x87\\x74\\x87\\x7e\\x1f\\x4d\\xfb\\x63\\x05\\x85\\x78\\x88\\x78\\x7b\\x1a\\x5d\\xa6\\x70\\xb6\\xa6\\xa0\\x95\\xa9\\xac\\x1e\\xa2\\x9f\\x97\\x9b\\xa2\"\n\"\\xb1\\x08\\x77\\xf8\\xd0\\x15\\x65\\x6c\\x6c\\x64\\x63\\xaa\\x6a\\xb3\\xb1\\xa9\\xaa\\xb2\\xb2\\x6b\\xad\\x65\\x1f\\x0e\\xfc\\x0b\\xf7\\x7c\\xf7\\x0c\\x15\\x60\"\n\"\\x6c\\x76\\x76\\x7d\\x1b\\x84\\x86\\x91\\x92\\x8f\\x8c\\x90\\x8e\\x96\\x1f\\xf7\\x00\\xf8\\x05\\xfb\\x54\\x69\\x85\\x74\\x05\\x8c\\x92\\x91\\x8c\\x90\\x1b\\x9c\"\n\"\\x9b\\x7d\\x7d\\x83\\x87\\x76\\x86\\x7c\\x1f\\x4c\\xfb\\x67\\x05\\x85\\x78\\x88\\x79\\x79\\x1a\\x5c\\xa6\\x6f\\xb7\\xa6\\xa1\\x96\\xa9\\xac\\x1e\\xa2\\x9f\\x98\"\n\"\\x9b\\xa2\\xb2\\x08\\xfb\\x2e\\xf8\\xbe\\x15\\x3a\\x0a\\xaf\\x6d\\xaa\\x67\\x1f\\xf7\\x66\\x16\\x3a\\x0a\\xb0\\x6d\\xa9\\x67\\x1f\\x0e\\xfc\\x0b\\xf7\\x9c\\xf8\"\n\"\\x51\\x15\\xfb\\x4f\\x69\\x86\\x74\\x05\\x9a\\x95\\x8a\\x8a\\x8e\\x1f\\x9a\\x86\\x95\\x7e\\x7b\\x1a\\x82\\x89\\x7e\\x87\\x7b\\x1e\\x42\\xfb\\xc5\\x05\\xfb\\x07\"\n\"\\x6f\\x76\\x5c\\x73\\x1b\\x85\\x84\\x91\\x8f\\x8f\\x8d\\x90\\x90\\x90\\x1f\\x92\\x94\\x8e\\x91\\x92\\x1a\\x9d\\x79\\x9a\\x75\\x70\\x77\\x77\\x71\\x6e\\xaa\\x75\"\n\"\\xb5\\xb3\\xbd\\xa1\\xa9\\xa9\\x1e\\xb1\\xb2\\xa9\\xcb\\xa0\\xe0\\x08\\xb6\\xf8\\xf0\\x15\\x66\\x6e\\x6e\\x65\\x64\\xa9\\x6c\\xb1\\xaf\\xa8\\xa9\\xb0\\xb1\\x6c\"\n\"\\xab\\x67\\x1f\\x0e\\x91\\xf8\\x49\\xf8\\x50\\x15\\x46\\x06\\xfb\\x0e\\x8c\\x42\\x2c\\x51\\xfb\\x7d\\x08\\x59\\x7f\\x8a\\x89\\x80\\x1b\\x85\\x88\\x8e\\x94\\x87\"\n\"\\x1f\\x9e\\x81\\x7f\\x93\\x77\\x1b\\x6d\\x77\\x76\\x6b\\x66\\xa5\\x73\\xb2\\xa3\\xa1\\x94\\x9c\\x97\\x1f\\x9c\\xa0\\x95\\xa5\\xa8\\xed\\x08\\xf7\\x32\\xb8\\xac\"\n\"\\xc2\\xba\\x1b\\x95\\x06\\x55\\xfb\\x67\\x05\\x87\\x79\\x88\\x77\\x7a\\x1a\\x44\\xc1\\x5c\\xdc\\xf7\\x06\\xe5\\xdd\\xf2\\xd3\\x64\\xb8\\x4d\\x77\\x7f\\x89\\x80\"\n\"\\x6a\\x1e\\x87\\x8a\\x84\\x88\\x82\\x89\\x08\\x83\\x6a\\x15\\x92\\xa1\\x94\\x8d\\x95\\x1b\\xa6\\x9a\\x76\\x67\\x36\\x5c\\x34\\x5d\\x77\\x7c\\x9c\\xa4\\x95\\x8b\"\n\"\\x8b\\x93\\xa7\\x1f\\x0e\\xc7\\xf7\\x85\\xf7\\xa0\\x15\\xbc\\xf7\\x52\\xfb\\x4a\\x48\\x1d\\x75\\x84\\x8a\\x84\\x88\\x81\\x1f\\x30\\xfb\\xf1\\x05\\xf7\\x09\\x06\"\n\"\\xc9\\xf7\\x80\\xf5\\x8e\\x78\\x42\\x05\\x88\\x7f\\x87\\x6c\\x7c\\x1a\\x46\\xc3\\x5a\\xda\\xf7\\x02\\xe7\\xdd\\xed\\xd2\\x63\\xb4\\x47\\x78\\x80\\x8a\\x85\\x5d\"\n\"\\x1e\\xb7\\xf7\\x3d\\x05\\xfb\\x09\\x06\\x5e\\xfb\\x40\\x05\\xf7\\x01\\x6e\\x15\\x8f\\xa1\\x93\\x8c\\x93\\x1b\\xa8\\x9b\\x76\\x64\\x39\\x5d\\x37\\x5e\\x77\\x7c\"\n\"\\x9c\\xa3\\x94\\x8d\\x98\\x90\\x9c\\x1f\\x0e\\x2a\\xf7\\xef\\xf9\\x3b\\x15\\xfb\\x4d\\x6e\\x86\\x75\\x05\\x91\\x06\\xa3\\x9b\\x7d\\x75\\x80\\x8a\\x85\\x83\\x6e\"\n\"\\x1f\\x49\\x06\\x82\\x68\\x05\\xcd\\x06\\xfb\\x1a\\xfc\\x93\\x05\\xf7\\x09\\x06\\xb1\\xf7\\x23\\x9b\\xc6\\xb7\\xe2\\xb2\\xbc\\x19\\x9c\\x99\\x9c\\x96\\x97\\x1b\"\n\"\\x94\\x90\\x85\\x81\\x85\\x8b\\x8b\\x85\\x74\\x1f\\x51\\xfb\\x75\\x05\\x86\\x76\\x89\\x7f\\x7e\\x1a\\x68\\xa7\\x72\\xb2\\xbc\\xb6\\xae\\xd6\\xb5\\x1e\\x79\\x95\"\n\"\\x05\\x62\\x72\\x7f\\x7f\\x7c\\x1b\\x83\\x86\\x90\\x93\\x90\\x8c\\x91\\x8e\\x92\\x1f\\x8c\\x8e\\x8c\\x8f\\x8c\\x1a\\xc9\\xf7\\x7e\\x05\\x90\\xa0\\x8e\\xa0\\x9c\"\n\"\\x1a\\xb5\\x75\\xa3\\x64\\x68\\x69\\x79\\x66\\x68\\x1e\\x75\\x73\\x7d\\x78\\x63\\x46\\xc6\\xf7\\x73\\xe8\\x1d\\xfb\\x26\\x5b\\x0a\\xf7\\x14\\xf7\\xa7\\x15\\xf7\"\n\"\\x2a\\xe3\\x05\\xaa\\x9c\\x93\\x96\\x9e\\x1a\\xa4\\x75\\xa1\\x72\\x78\\x7b\\x7f\\x65\\x68\\x1e\\xfb\\x0c\\xfb\\x18\\x05\\x0e\\xfb\\x65\\x74\\x1d\\x57\\xf8\\xd2\"\n\"\\x15\\x6c\\x74\\x73\\x6c\\x5e\\xb9\\x71\\xda\\xe7\\xc7\\xad\\xc0\\xa3\\x7c\\x9a\\x72\\x72\\x78\\x79\\x74\\x89\\x8b\\x88\\x8c\\x87\\x1f\\x8c\\x87\\x8b\\x87\\x89\"\n\"\\x1a\\x77\\x70\\x7c\\x68\\x6e\\x76\\x96\\x9a\\x8f\\x8c\\x90\\x8d\\x8f\\x1e\\x93\\x9b\\x8b\\x8b\\x92\\x1a\\x9e\\x7b\\x99\\x73\\x1e\\x0e\\xf7\\x11\\xf9\\x29\\x16\"\n\"\\x4c\\x1d\\x70\\x7b\\x9c\\xa5\\x93\\x8b\\x8e\\x8d\\x91\\x1f\\xf7\\x17\\xf8\\x80\\x97\\xb8\\x9d\\x9d\\xad\\x5f\\x1d\\x71\\x1a\\x83\\x8a\\x87\\x8a\\x85\\x1e\\xfb\"\n\"\\x24\\xfc\\xb2\\x05\\xfb\\x79\\x06\\x8d\\x1d\\xf7\\x36\\x06\\xca\\x8a\\xa9\\x5c\\x8c\\x29\\x8c\\x6e\\x18\\x9e\\x06\\xb5\\xf7\\x10\\xb9\\xbc\\xdb\\x8d\\x08\\x0e\"\n\"\\x2a\\xf8\\x6a\\x66\\x0a\\xa5\\x9d\\x93\\xa2\\xa9\\x1e\\x7b\\x6f\\x85\\x7a\\x76\\x1a\\x80\\x8d\\x84\\x90\\x7d\\xd4\\x1d\\x05\\xc9\\xa9\\xb0\\xb7\\xb8\\x1a\\x99\"\n\"\\x87\\x95\\x7e\\xa1\\x1e\\x81\\x9d\\x85\\x99\\x96\\x1a\\x9e\\x93\\x98\\xb9\\xc3\\x1e\\x86\\x7b\\x88\\x7f\\x88\\x83\\x08\\x85\\x77\\x88\\x7a\\x7f\\x1a\\x72\\xa2\"\n\"\\x79\\xa9\\xc4\\xbf\\xb8\\xde\\xb2\\x1e\\x0e\\xfb\\x61\\xc5\\xf7\\x6e\\x15\\x81\\x65\\x88\\x77\\x72\\x1a\\x35\\xbb\\x50\\xd1\\xf7\\x1c\\xf7\\x1c\\xf7\\x3e\\xf7\"\n\"\\x3e\\xda\\x55\\xc0\\x3b\\x3e\\x3f\\x5b\\x36\\x4f\\x1e\\xa0\\x7f\\x05\\xbd\\xb1\\xac\\x9f\\xb6\\x1b\\xbc\\xa7\\x66\\x49\\x76\\x89\\x7d\\x83\\x6c\\x1f\\x83\\x66\"\n\"\\x15\\x27\\x6f\\x64\\x55\\x60\\x1b\\x77\\x7e\\x9b\\xa3\\xa4\\x8c\\x8f\\xa1\\xe0\\x1f\\x0e\\xf7\\x48\\xf9\\x97\\xf9\\x40\\x15\\x4f\\x06\\xfc\\xf9\\xfd\\x5b\\x05\"\n\"\\xc6\\x06\\xf7\\x4a\\xf8\\x54\\x15\\x68\\x68\\x6a\\x7b\\x67\\x1b\\x61\\x70\\xad\\xbd\\xbb\\x9a\\xbc\\xa6\\xb7\\x1f\\xb8\\xa6\\xab\\xa2\\xae\\x1b\\x99\\x96\\x84\"\n\"\\x81\\x86\\x87\\x85\\x84\\x86\\x1f\\x7b\\x7f\\x84\\x80\\x7c\\x1a\\x75\\x9c\\x7b\\xa2\\xa8\\xa3\\xa7\\xab\\xb4\\x6b\\xa4\\x56\\xfb\\x09\\xfb\\x07\\xfb\\x0e\\xfb\"\n\"\\x11\\x44\\xb5\\x60\\xd1\\xcb\\xbf\\xa8\\xca\\xc1\\x1e\\xf7\\xf4\\x4f\\x15\\xfb\\x0d\\xfb\\x07\\xfb\\x10\\xfb\\x16\\x49\\xb5\\x62\\xcf\\xc8\\xc2\\xa6\\xc1\\xbb\"\n\"\\x1f\\xb9\\xbf\\xa4\\xc7\\xc6\\x1a\\xcd\\x60\\xb6\\x49\\x1e\\x7b\\x77\\x15\\x9f\\x97\\x7a\\x71\\x49\\x70\\x2d\\x63\\x45\\x1f\\x6a\\x79\\x79\\x7c\\x79\\x1b\\x74\"\n\"\\x7d\\x9c\\xa7\\xcf\\xb4\\xf7\\x15\\xb3\\xc0\\x1f\\x9e\\x98\\x98\\x92\\x9e\\x1b\\x0e\\xfb\\x76\\xf7\\x87\\xf7\\x96\\x15\\xd1\\xd4\\x9e\\xa1\\x9e\\xa6\\x08\\xb7\"\n\"\\xcd\\xa6\\xd3\\xc1\\x1a\\xc4\\x6b\\xb0\\x5b\\x2e\\x49\\xfb\\x17\\xfb\\xaf\\x58\\x1e\\x7f\\x7b\\x7f\\x7d\\x86\\x85\\x08\\x63\\x5f\\x8b\\x8b\\x7e\\x1a\\x7e\\x94\"\n\"\\x7c\\x93\\x92\\x9e\\x9c\\xa0\\x9e\\x1e\\x89\\x74\\x8b\\x7b\\x76\\x1a\\x62\\x8e\\x78\\x93\\x77\\x1e\\x6c\\x98\\xa6\\x78\\xac\\x1b\\xaa\\xa7\\x9d\\xac\\xa3\\x1f\"\n\"\\x9a\\xa2\\x95\\xa4\\x9d\\x1a\\x99\\x84\\x93\\x7f\\x82\\x85\\x86\\x7b\\x83\\x1e\\x67\\x79\\x82\\x80\\x7e\\x1b\\x82\\x86\\x94\\x9b\\xa5\\x93\\xc9\\x9b\\xea\\x1f\"\n\"\\x95\\xd1\\x15\\xf7\\x5b\\xab\\xa3\\xd3\\xae\\x1b\\x98\\x94\\x7e\\x77\\x73\\x7d\\x5a\\x79\\x63\\x1f\\x76\\x5b\\x73\\x67\\x67\\x62\\x08\\x0e\\xf7\\x9a\\xf8\\x09\"\n\"\\xf9\\x2a\\x15\\xfb\\x56\\x20\\x1d\\x96\\x06\\xaa\\x8a\\x9d\\x7c\\x99\\x67\\xfb\\x0c\\xfc\\x55\\x18\\x55\\x7d\\x6f\\x68\\x6f\\x1b\\x80\\x86\\x93\\x9d\\xae\\x7a\"\n\"\\x9d\\x69\\x67\\x74\\x72\\x64\\x5d\\xae\\x6b\\xbf\\xd5\\xb8\\xbb\\xf7\\x01\\xa8\\x1f\\xf7\\x02\\xf8\\x2d\\xf7\\x61\\xfc\\xbd\\x05\\xa0\\x06\\xf7\\x1f\\xf8\\x9f\"\n\"\\x05\\xc2\\x9a\\xa4\\xad\\xa5\\x1b\\x96\\x90\\x85\\x7b\\x8d\\x1f\\x69\\x8f\\x9b\\x7b\\xac\\x1b\\xad\\xa0\\xa1\\xae\\xba\\x69\\xaa\\x57\\x42\\x60\\x5d\\xfb\\x03\"\n\"\\x6e\\x1f\\x41\\xfb\\xac\\x05\\x98\\xfb\\x82\\x15\\xf7\\x97\\x06\\x9e\\xd0\\x05\\xfb\\x97\\x06\\xf7\\x69\\xf8\\x1d\\x15\\x2f\\x3f\\x3a\\x29\\x3b\\xbb\\x56\\xd2\"\n\"\\xed\\xda\\xdc\\xee\\xdc\\x5a\\xbe\\x3c\\x1f\\x92\\x6b\\x15\\xa3\\x97\\x77\\x62\\x5c\\x7e\\x50\\x79\\x69\\x1f\\x6b\\x7a\\x78\\x7d\\x74\\x1b\\x73\\x7e\\xa0\\xb0\"\n\"\\xb9\\x98\\xc6\\x9e\\xaf\\x1f\\xab\\x9c\\x9e\\x9b\\xa2\\x1b\\x0e\\x27\\xf8\\x17\\xf8\\x50\\x15\\x6b\\x3c\\x05\\xc9\\x80\\x70\\xa5\\x57\\x1b\\x60\\x58\\x6f\\x5d\"\n\"\\x61\\x1f\\x56\\x52\\x6c\\x38\\x3c\\x91\\x0a\\xc0\\xe7\\xaf\\x1f\\x78\\x97\\x05\\x48\\x69\\x7a\\x77\\x75\\x1b\\x7b\\x88\\x96\\xd2\\x88\\x1f\\xf7\\x15\\xf7\\xc0\"\n\"\\x05\\xfb\\x6f\\xfb\\x9f\\xb8\\x0a\\xc6\\xd8\\x1d\\x42\\x94\\x1f\\x0e\\x27\\xf8\\x19\\xf8\\x51\\x15\\x6b\\x3c\\x05\\xc9\\x7f\\x72\\xa4\\x56\\x1b\\x5f\\x59\\x70\"\n\"\\x5c\\x61\\x1f\\x56\\x52\\x6c\\x39\\x3b\\x91\\x0a\\xc1\\xe7\\xaf\\x1f\\x78\\x96\\x05\\x48\\x69\\x7a\\x77\\x75\\x1b\\x7b\\x88\\x96\\xd2\\x88\\x1f\\xf7\\x15\\xf7\"\n\"\\xc1\\x05\\xfb\\x6f\\xfb\\xa0\\xb8\\x0a\\xc7\\xd8\\x1d\\x41\\x94\\x1f\\x99\\xf7\\x69\\x15\\x90\\x94\\x9b\\xac\\x05\\xbc\\xe7\\x8e\\x93\\xa4\\x1a\\xa7\\x75\\x9d\"\n\"\\xf6\\x1d\\x73\\x8a\\x5f\\x08\\x8a\\x60\\x8a\\x71\\x82\\x1a\\x84\\x8a\\x7f\\x8a\\x7c\\x1e\\x0e\\x25\\x1d\\xf7\\x67\\xf7\\x5f\\x15\\xfb\\xd9\\x06\\x7a\\x45\\x05\"\n\"\\xf7\\xd9\\x06\\x0e\\xfb\\xd4\\xc5\\xf7\\x82\\x15\\xf7\\x42\\xfb\\xe8\\x05\\x7c\\x93\\x95\\x83\\x97\\x1b\\x93\\x90\\x8f\\x92\\x92\\x89\\x93\\x88\\x93\\x1f\\xfb\"\n\"\\x17\\xf7\\xdd\\xf7\\x17\\xf7\\xdd\\x05\\x8e\\x93\\x8d\\x93\\x92\\x1a\\x93\\x86\\x8f\\x83\\x7f\\x83\\x85\\x79\\x81\\x1e\\x0e\\xfb\\xd4\\xf7\\xa7\\xf7\\x82\\x15\"\n\"\\xfb\\x42\\xf7\\xe8\\x05\\x9c\\x82\\x82\\x92\\x7f\\x1b\\x83\\x86\\x87\\x83\\x85\\x8d\\x83\\x8e\\x82\\x1f\\xf7\\x17\\xfb\\xdd\\xfb\\x17\\xfb\\xdd\\x05\\x88\\x84\"\n\"\\x89\\x83\\x84\\x1a\\x83\\x90\\x87\\x93\\x97\\x93\\x91\\x9c\\x95\\x1e\\x0e\\x88\\x1d\\x65\\xa4\\x73\\xb4\\x87\\x1e\\x72\\x66\\x84\\x7b\\x72\\x31\\x0a\\xb3\\xa3\"\n\"\\x92\\x9a\\xa7\\xa9\\x1f\\xa8\\xac\\x96\\x99\\xa4\\xb1\\x08\\xfb\\x51\\xf7\\xc8\\x15\\xa1\\x8a\\x9a\\x78\\x70\\x1a\\x4f\\x69\\xfb\\x03\\x65\\x46\\x1e\\x5a\\x70\"\n\"\\x6d\\x71\\x70\\x1b\\x71\\x78\\xa2\\xaa\\xbf\\xac\\xef\\xb4\\xd5\\x1f\\xa9\\xc0\\xac\\xaa\\xa6\\x89\\x08\\x0e\\xf7\\xef\\xf9\\x38\\xf7\\x6b\\x15\\x6b\\x72\\x78\"\n\"\\x7e\\x73\\x1b\\x79\\x7c\\x90\\xa1\\x5a\\x1f\\xad\\x3f\\x73\\x92\\x67\\x1b\\x58\\x66\\x71\\x51\\x6a\\x1f\\xc0\\x5c\\x05\\xac\\xa3\\x9b\\x95\\xa8\\x1b\\xae\\xaa\"\n\"\\x82\\x71\\xb9\\x1f\\x72\\xba\\xa4\\x83\\xac\\x1b\\xb9\\xab\\xa1\\xc9\\xb8\\x1f\\x54\\xf7\\x80\\x15\\x6a\\x72\\x78\\x7e\\x73\\x1b\\x79\\x7d\\x8f\\xa2\\x59\\x1f\"\n\"\\xad\\x3f\\x73\\x92\\x67\\x1b\\x59\\x65\\x71\\x51\\x6a\\x1f\\xc0\\x5d\\x05\\xab\\xa3\\x9b\\x95\\xa8\\x1b\\xaf\\xa9\\x82\\x71\\xb9\\x1f\\x72\\xb9\\xa5\\x83\\xac\"\n\"\\x1b\\xb9\\xab\\xa1\\xca\\xb8\\x1f\\x0e\\xf8\\x46\\xf7\\x13\\x15\\x54\\x62\\x7c\\x7c\\x7b\\x1b\\x84\\x86\\x91\\x94\\xa4\\x94\\xb4\\xa4\\xdd\\x1f\\xd2\\xf7\\x80\"\n\"\\xfb\\x03\\x84\\x79\\x50\\x05\\xbe\\x82\\x75\\xa0\\x60\\x1b\\xfb\\x0f\\xfb\\x2a\\xfb\\x54\\xfb\\x30\\x3f\\xb6\\x58\\xcc\\xc8\\xb8\\xaf\\xeb\\xc5\\x1f\\x7f\\x62\"\n\"\\x89\\x7f\\x7d\\x1a\\x66\\xa9\\x6e\\xb0\\xba\\xba\\xb2\\xe2\\xc4\\x90\\x1d\\xbd\\xf7\\xd8\\x15\\x51\\x5a\\x5b\\x52\\x4f\\xba\\x5b\\xc6\\xc6\\xbb\\xbb\\xc6\\xc5\"\n\"\\x5b\\xbb\\x51\\x1f\\x89\\x5b\\x15\\xac\\xa6\\x70\\x6a\\x6c\\x6f\\x71\\x6b\\x6c\\x71\\xa5\\xab\\xab\\xa5\\xa6\\xaa\\x1f\\x87\\xcd\\x15\\x2b\\x1d\\x38\\x1d\\xd0\"\n\"\\xf9\\x03\\xf8\\x37\\x15\\xfc\\xa0\\x06\\xf7\\x66\\xdc\\x74\\xc0\\xfb\\xb2\\xfb\\x14\\x05\\x3e\\x07\\xf7\\xb2\\xfb\\x13\\xa2\\xbf\\xfb\\x66\\xdd\\x05\\xf8\\xa0\"\n\"\\x06\\xfb\\x66\\x39\\xa2\\x57\\xf7\\xb2\\xf7\\x13\\x05\\xd8\\x07\\xfb\\xb2\\xf7\\x14\\x74\\x56\\x05\\x0e\\xd0\\xf8\\x1b\\xf9\\x66\\x15\\x4b\\xfd\\x03\\x06\\x39\"\n\"\\xf7\\x66\\x57\\x74\\xf7\\x13\\xfb\\xb2\\x05\\xd8\\x06\\xf7\\x14\\xf7\\xb2\\x56\\xa2\\x3a\\xfb\\x66\\x05\\x0e\\xd0\\xf9\\x66\\xf7\\xf9\\x15\\xcb\\xfd\\x03\\x07\"\n\"\\xf7\\x66\\xdc\\x74\\xc0\\xfb\\xb2\\xfb\\x13\\x05\\x3e\\x07\\xf7\\xb2\\xfb\\x14\\xa2\\xbf\\xfb\\x66\\xdd\\x05\\x0e\\xd0\\xf7\\xf9\\x04\\xf9\\x03\\x06\\xfb\\x66\"\n\"\\x39\\xa2\\x57\\xf7\\xb2\\xf7\\x14\\x05\\xd8\\x07\\xfb\\xb2\\xf7\\x13\\x74\\x56\\xf7\\x66\\x3a\\x05\\xfd\\x03\\x06\\x0e\\xd0\\xf8\\x1b\\x16\\xf9\\x03\\x07\\xdc\"\n\"\\xfb\\x66\\xc0\\xa3\\xfb\\x14\\xf7\\xb1\\x05\\x3e\\x06\\xfb\\x13\\xfb\\xb1\\xbf\\x73\\xdd\\xf7\\x66\\x05\\xfd\\x03\\x07\\x0e\\xd0\\xf7\\xde\\xf9\\x03\\x9b\\x1d\"\n\"\\xa2\\xe6\\x1d\\x74\\x05\\x0e\\xd0\\xf7\\x5b\\x2c\\x15\\x51\\xf7\\xdb\\xc5\\x07\\xfb\\x58\\xf9\\x42\\x9b\\x1d\\xa3\\xe6\\x1d\\x73\\x05\\x0e\\xfb\\x21\\x70\\xfb\"\n\"\\x45\\x15\\xf7\\x05\\x06\\xc5\\xf7\\x75\\x05\\x60\\xa7\\x9f\\x7e\\xad\\x1b\\xf7\\x07\\xf7\\x05\\xf7\\x1b\\xf7\\x1c\\xd1\\x72\\xb9\\x52\\xb1\\x1f\\xdf\\xbc\\xb1\"\n\"\\xbb\\xc6\\x1a\\xcd\\x5a\\xb5\\x3d\\x59\\x5d\\x7c\\x6f\\x66\\x1e\\x60\\x69\\x6c\\x50\\x71\\x28\\x08\\xf7\\x03\\x80\\x15\\xb4\\xf7\\x33\\x91\\x99\\xb0\\xa7\\x08\"\n\"\\x92\\x94\\x96\\x8f\\x95\\x1b\\xa3\\x9a\\x72\\x65\\x5e\\x7e\\x5b\\x6c\\x4c\\x1f\\x95\\x73\\x80\\x8e\\x7c\\x1b\\x73\\x77\\x7b\\x76\\x7b\\x99\\x7e\\x9c\\x9a\\x99\"\n\"\\x91\\x9e\\xa6\\x1f\\x8c\\x7a\\x8b\\x83\\x83\\x1a\\x3d\\x64\\xfb\\x36\\x6b\\x57\\x1e\\x6f\\x7a\\x77\\x7c\\x75\\x1b\\x71\\x7c\\x97\\xb6\\x74\\x1f\\x0e\\xfb\\x65\"\n\"\\x3e\\x1d\\x2e\\xf8\\x1d\\x15\\x2b\\x1d\\x38\\x1d\\xfb\\x65\\x3e\\x1d\\xf7\\x0e\\xf8\\xcb\\x20\\x0a\\xfb\\x61\\xf7\\xd4\\x89\\x1d\\xfb\\x38\\xfb\\x34\\x32\\xc9\"\n\"\\x4d\\xe6\\xb7\\xb6\\x9b\\xa8\\xad\\x1e\\xa5\\xa1\\x9b\\x9e\\xae\\xbd\\x08\\xcc\\xf8\\x1d\\x15\\xbe\\x06\\x35\\xf7\\x42\\x05\\x3a\\x2a\\x0a\\xfb\\x65\\x3e\\x1d\"\n\"\\x60\\xf8\\xa8\\x2a\\x1d\\xfb\\x50\\xf8\\x61\\xf8\\x51\\x15\\x20\\x06\\xfb\\x26\\xfb\\x73\\x05\\xf7\\x4f\\x82\\x7a\\xb7\\x48\\x1b\\x68\\x77\\x7a\\x6d\\x6f\\x9a\"\n\"\\x7a\\xa8\\x83\\x1f\\xc6\\x80\\x91\\x7f\\x94\\xfb\\x27\\xfb\\x8c\\xfb\\xfd\\x18\\xf7\\x02\\x06\\xf7\\x37\\xf7\\x8b\\x8c\\x54\\x8f\\x57\\x93\\x57\\x19\\x44\\x95\"\n\"\\x9c\\x6c\\xa9\\x1b\\xb0\\xb6\\xc5\\xe8\\xab\\x1f\\x76\\x93\\x05\\x52\\x74\\x77\\x72\\x71\\x1b\\x63\\x7b\\xcb\\xf7\\x39\\x87\\x1f\\x0e\\xf7\\xef\\xf8\\x8b\\xf9\"\n\"\\x4b\\x15\\xfb\\x5c\\xfb\\x36\\xfb\\x35\\xfb\\x5c\\xfb\\x58\\xf7\\x36\\xfb\\x36\\xf7\\x57\\xf7\\x59\\xf7\\x37\\xf7\\x37\\xf7\\x57\\xf7\\x58\\xfb\\x36\\xf7\\x39\"\n\"\\xfb\\x55\\x1f\\x87\\xfb\\xd0\\x15\\xfb\\x52\\xf7\\x50\\x05\\xb8\\xc2\\xcc\\xa2\\xd1\\x1b\\xd0\\xcb\\x75\\x5f\\xc4\\x1f\\xb3\\x63\\x15\\xbb\\x51\\xa2\\x4d\\x42\"\n\"\\x1a\\x43\\x74\\x4b\\x5d\\x53\\x1e\\xfb\\x54\\xf7\\x57\\x05\\xf7\\x2c\\xfb\\x7f\\x15\\x5f\\x54\\x48\\x73\\x45\\x1b\\x45\\x4b\\xa2\\xba\\x50\\x1f\\xf7\\x55\\xf7\"\n\"\\x55\\x05\\xfb\\x7d\\xfb\\x2d\\x15\\x5f\\xc1\\x74\\xcb\\xd1\\x1a\\xd3\\xa2\\xcb\\xba\\xc4\\x1e\\xf7\\x52\\xfb\\x50\\x05\\x0e\\xf7\\xef\\xf9\\x83\\x16\\x9f\\x07\"\n\"\\x84\\x8d\\x74\\x90\\x3e\\x9e\\x8b\\x8c\\x70\\x9c\\x19\\x45\\xbb\\x64\\xd8\\xe4\\x1a\\x94\\x07\\x9b\\x07\\x9f\\x67\\x94\\x7e\\x97\\x7c\\x08\\x5c\\xb1\\xc8\\x6d\"\n\"\\xc1\\x1b\\xe6\\xd3\\xd5\\xe8\\xe7\\x4a\\xd2\\x39\\x71\\x80\\x88\\x79\\x67\\x1f\\x88\\x8a\\x82\\x86\\x82\\x87\\x08\\xa8\\xb7\\x95\\xa5\\xb0\\x1a\\xe5\\x43\\xd2\"\n\"\\x2f\\x2e\\x44\\x45\\x31\\x67\\x92\\x78\\xad\\x56\\x1e\\xa3\\x58\\x78\\x91\\x70\\x1b\\x3d\\x49\\x40\\x33\\x2d\\xd3\\x43\\xe9\\xdb\\xd1\\xbe\\xe5\\xb6\\x1f\\x8c\"\n\"\\x72\\x05\\x83\\x07\\x54\\x71\\x45\\x65\\x5f\\x1e\\x5c\\x5a\\x8a\\x8a\\xfb\\x0e\\x6e\\x83\\x89\\x18\\x77\\x07\\x0e\\x70\\x59\\x0a\\xf7\\x77\\x78\\x15\\xf4\\xb9\"\n\"\\xce\\xd8\\xd4\\x1a\\xc0\\x6c\\xae\\x5e\\x66\\x70\\x6f\\x65\\x73\\x94\\x7d\\xa6\\x78\\x1e\\x9f\\x7e\\x92\\x82\\x7e\\x1a\\x6b\\x68\\x68\\x43\\x65\\x1e\\x0e\\xf7\"\n\"\\xec\\xf8\\x95\\x15\\x75\\x37\\x91\\x1d\\x75\\x9b\\x05\\xa3\\x0a\\xc7\\xf7\\x6f\\x05\\xcd\\x06\\x93\\xaa\\x05\\x49\\x06\\xb6\\xf7\\x2f\\x4f\\x7d\\x5b\\x85\\x26\"\n\"\\x82\\x19\\x70\\xa0\\x07\\xa5\\x9a\\x81\\x79\\x84\\x8a\\x85\\x83\\x6e\\x1f\\x8a\\x87\\x88\\x7f\\x87\\x7e\\x08\\xfb\\x1e\\x06\\x82\\x6c\\x05\\xcc\\x2e\\x93\\x1d\"\n\"\\x0e\\xfb\\x21\\xf7\\xa5\\xf8\\xb4\\x15\\x6a\\xa4\\x7a\\xa3\\xa2\\x1a\\x9d\\x98\\x95\\xa5\\xb4\\xce\\x74\\x5d\\xe8\\x1e\\x9a\\xc9\\x05\\xa7\\x3e\\x47\\x97\\x43\"\n\"\\x1b\\x59\\x6b\\x80\\x74\\x75\\x1f\\x7e\\x7b\\x81\\x73\\x78\\x1a\\x69\\xa1\\x6e\\xd7\\x49\\x1e\\x46\\x73\\x6a\\x76\\x67\\x5d\\x08\\x5d\\x4f\\x6f\\x3d\\x42\\x1a\"\n\"\\x27\\xcc\\x4a\\xee\\xe4\\xe2\\xbb\\xd7\\xbb\\x1e\\xac\\xbf\\xa3\\xd4\\xbc\\x1a\\xc3\\x70\\xc4\\x56\\xc2\\x1e\\x7b\\x9b\\x75\\x9e\\x7e\\x95\\x08\\x49\\x3c\\x15\"\n\"\\xc6\\x52\\xa2\\x64\\x5b\\x1a\\x46\\x6c\\x2d\\x62\\x53\\x1e\\x75\\x7b\\x70\\x7d\\x71\\x1b\\x5f\\x6e\\xae\\xc0\\xc0\\x9b\\xd8\\xa4\\xcb\\x1f\\xa6\\xcf\\xa1\\xa8\"\n\"\\xb5\\x9f\\x08\\x0e\\xf7\\xef\\xf8\\x95\\xf9\\x89\\x15\\x42\\xfb\\x13\\x4d\\x33\\xfb\\x21\\xfb\\x45\\xf0\\xfb\\x0f\\xf7\\x35\\xfb\\x78\\x99\\x61\\xde\\xf7\\x20\"\n\"\\xdf\\xf7\\x0b\\xf7\\x03\\xf7\\x1a\\xfb\\x0b\\xf7\\x26\\x2a\\xf7\\x1d\\x4d\\xf7\\x01\\x08\\x0e\\xfb\\xd4\\xf7\\x7e\\xf8\\xd5\\x15\\xa8\\x06\\x90\\x93\\x8f\\x92\"\n\"\\x92\\x97\\x08\\xb1\\xc6\\x8d\\x8e\\x9d\\x1a\\x9d\\x7a\\x98\\x73\\x7b\\x7c\\x85\\x83\\x83\\x1e\\x83\\x82\\x8b\\x8a\\x89\\x66\\x8f\\x5e\\x18\\x8c\\x72\\x05\\x41\"\n\"\\x85\\x15\\x6d\\x73\\x74\\x6d\\x6c\\xa4\\x72\\xa9\\xa8\\xa3\\xa3\\xa9\\xa9\\x72\\xa4\\x6e\\x1f\\xf7\\x39\\x16\\x6d\\x73\\x74\\x6d\\x6c\\xa4\\x72\\xa9\\xa8\\xa3\"\n\"\\xa3\\xa9\\xa9\\x72\\xa4\\x6e\\x1f\\x0e\\xfb\\x65\\x22\\x0a\\xf7\\xa0\\xf8\\x64\\x15\\x49\\x6c\\x68\\x73\\x4a\\x1b\\x4b\\x6a\\xa8\\xc8\\x85\\x1f\\x60\\x7e\\x06\"\n\"\\x26\\xb7\\x5b\\xe8\\xec\\xcb\\xc5\\xf3\\x9d\\x1e\\x0e\\xfb\\x65\\x22\\x0a\\xf7\\xd3\\xf8\\x70\\x20\\x0a\\xfb\\x65\\x22\\x0a\\xf7\\x1b\\xf8\\x4d\\x2a\\x1d\\xf7\"\n\"\\xef\\xf9\\x93\\xf7\\x6c\\x15\\xc8\\xfc\\x62\\x07\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\xf7\\xb7\\xc9\\xfb\\xac\\x62\\x1d\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x38\"\n\"\\xef\\x1d\\xc9\\xfb\\xb7\\x06\\xfb\\x01\\x89\\x53\\xbd\\x85\\xf5\\x08\\x0e\\xfb\\x65\\x22\\x0a\\xf7\\xc1\\xf8\\x2d\\x25\\x0a\\xfb\\x11\\xf7\\x8c\\xf8\\x61\\x15\"\n\"\\x4b\\x7d\\x3b\\x6b\\x1d\\x97\\x85\\x78\\x7f\\x7d\\x55\\x6b\\xfb\\x04\\x1f\\x74\\x39\\x84\\x71\\x71\\x2b\\x08\\xf7\\x0d\\x06\\xb0\\xf7\\x1e\\xa7\\xd4\\xb5\\xd6\"\n\"\\x08\\xc9\\xae\\xb7\\xb5\\xa7\\x1b\\x98\\x95\\x83\\x81\\x83\\x8a\\x83\\x89\\x83\\x1f\\x26\\xfc\\x1d\\x81\\x0a\\xc9\\xc1\\xbd\\xa3\\xb4\\xa9\\x1e\\xaa\\xb5\\xa8\"\n\"\\xcb\\x9b\\xc7\\xcb\\xf7\\x8c\\x18\\x9e\\xd4\\x92\\xab\\x9b\\x1a\\xb6\\x6f\\xa5\\x5d\\x40\\x50\\x55\\xfb\\x21\\x3c\\x1e\\x0e\\xfb\\x65\\x78\\x0a\\xe3\\x9f\\x9b\"\n\"\\x8e\\x92\\xa2\\x1e\\x6a\\x60\\x83\\x78\\x70\\x77\\x0a\\x61\\x76\\xa1\\xb8\\xae\\x92\\x9c\\xa9\\xb0\\x1f\\x9d\\xa1\\x95\\x9a\\xa1\\xaf\\x08\\xfb\\x5a\\xe4\\x15\"\n\"\\xf7\\x1f\\xaf\\xb9\\xd7\\xbb\\x1b\\x9e\\x94\\x80\\x74\\x5f\\x7a\\x60\\x6b\\x6a\\x1f\\x70\\x6e\\x72\\x7d\\x52\\x79\\x08\\x0e\\xfb\\x87\\x61\\x0a\\x0e\\xfb\\x87\"\n\"\\x61\\x0a\\xfb\\x00\\xf8\\x10\\x15\\xbe\\x06\\x8f\\x93\\x92\\x99\\x94\\x9f\\x08\\xbc\\xe7\\x8e\\x93\\xa5\\x1a\\xa6\\x75\\x9d\\x6b\\x77\\x77\\x83\\x7e\\x80\\x1e\"\n\"\\x82\\x7f\\x86\\x73\\x8a\\x5f\\x8a\\x60\\x8b\\x72\\x8a\\x81\\x08\\x0e\\xf7\\xef\\xf7\\x8c\\xf7\\x63\\x15\\xf8\\x8c\\xe5\\xfc\\x8c\\x06\\xfb\\x94\\x04\\xf8\\x8c\"\n\"\\xe5\\xfc\\x8c\\x06\\xf7\\x86\\x04\\xf8\\x8c\\xe5\\xfc\\x8c\\x06\\x0e\\x56\\xf8\\x96\\xf7\\x8e\\x15\\x8a\\xd3\\x86\\xae\\x7d\\xb0\\x08\\xda\\x6d\\x41\\xbc\\x31\"\n\"\\x1b\\xfb\\x1b\\x35\\x23\\xfb\\x38\\xfb\\x36\\xdd\\x29\\xf7\\x1d\\xf2\\xd1\\xbe\\xec\\xa7\\x1f\\x62\\x06\\x46\\x6d\\x56\\x68\\x40\\x1b\\x60\\x68\\x97\\xa2\\x73\"\n\"\\x1f\\x7a\\x9b\\x82\\x9c\\x80\\xb2\\x08\\xf4\\x07\\xf7\\xb0\\xae\\x15\\xfb\\xae\\xe8\\x06\\xd5\\xac\\xaf\\xa5\\xce\\x1b\\xd2\\xc0\\x66\\x4c\\xa1\\x1f\\x0e\\x23\"\n\"\\x62\\x0a\\x0e\\x23\\x62\\x0a\\xf7\\x9a\\xf7\\x76\\x15\\xbe\\x06\\x8e\\x91\\x8b\\x8c\\x9d\\xae\\x08\\xbb\\xe6\\x8f\\x94\\xa4\\x1a\\xa7\\x75\\x9d\\x6b\\x77\\x77\"\n\"\\x83\\x7e\\x80\\x1e\\x81\\x7f\\x86\\x75\\x8a\\x5d\\x8a\\x3d\\x18\\x0e\\x3c\\xf7\\x1c\\xf7\\x55\\x15\\xa5\\xd1\\xb2\\xe0\\xd8\\xf7\\x30\\x08\\xa8\\xc3\\x92\\x9d\"\n\"\\xa2\\x1a\\xb1\\x6c\\xa7\\x61\\x73\\x77\\x81\\x79\\x7e\\x1e\\x7d\\x77\\x85\\x78\\x86\\x57\\x75\\xfb\\x4f\\x7f\\x3b\\x78\\x3b\\x08\\x78\\xa0\\x0a\\xf8\\x4a\\xc5\"\n\"\\x15\\xa5\\xd1\\xb3\\xe3\\xd8\\xf7\\x2d\\x08\\xa7\\xc2\\x92\\x9e\\xa2\\x1a\\xb1\\x6c\\xa7\\x61\\x58\\x75\\x6b\\x34\\x82\\x1e\\x76\\xfb\\x4d\\x7e\\x36\\x77\\x3e\"\n\"\\x08\\x79\\xa0\\x0a\\x0e\\xfb\\x79\\xbd\\x16\\xf7\\xd9\\xf8\\xd5\\xfb\\xd9\\x37\\xf7\\x85\\xfb\\x36\\xfb\\x85\\x37\\xf7\\x85\\xfb\\x37\\xfb\\x85\\x06\\x0e\\xd0\"\n\"\\xf8\\x19\\xf7\\xa7\\x15\\xb3\\x93\\x9c\\x90\\xa4\\x9a\\x08\\xd0\\xb4\\xb4\\xd2\\xd9\\x1a\\xf7\\x0e\\x29\\xed\\xfb\\x0e\\xfb\\x0d\\x29\\x29\\xfb\\x0e\\x3d\\xb4\"\n\"\\x44\\xd0\\x62\\x1e\\xa3\\x7c\\x9c\\x85\\xb3\\x84\\x08\\x3e\\xfb\\x29\\x57\\xf7\\x29\\xfb\\x2c\\xc3\\xf7\\x2c\\xf7\\x28\\xbf\\xfb\\x28\\x07\\x6c\\xf8\\x5e\\x15\"\n\"\\xe7\\xd5\\x43\\x31\\x30\\x42\\x42\\x31\\x31\\x42\\xd4\\xe5\\xe3\\xd4\\xd6\\xe2\\x1f\\x0e\\xf7\\x76\\xb1\\x15\\x6d\\xa1\\x7e\\xac\\xc5\\x1a\\xd5\\xa6\\xf7\\x0d\"\n\"\\xb0\\xeb\\x1e\\xf7\\x1b\\xc0\\xc8\\xcf\\xce\\x1b\\xc5\\xb1\\x58\\x3b\\x79\\x8a\\x7e\\x87\\x72\\x1f\\xa6\\x06\\xc6\\xf7\\x73\\x05\\x75\\x06\\x6c\\x7e\\x7d\\x7c\"\n\"\\x7b\\x1b\\x83\\x84\\x8d\\x8f\\x84\\x1f\\xa8\\x5b\\x78\\x91\\x62\\x1b\\xfb\\x4b\\xfb\\x4c\\xfb\\x7f\\xfb\\x80\\x44\\xa0\\x4e\\xb1\\x66\\x1f\\x6d\\xaa\\xb7\\x7c\"\n\"\\xc8\\x1b\\xd5\\xc8\\xa4\\xca\\xda\\x1f\\x75\\xa4\\x68\\x6d\\x70\\x7a\\x68\\x7d\\x19\\xb2\\xf7\\x23\\x97\\xb4\\x92\\x97\\xa5\\xa4\\x19\\x71\\x94\\x97\\x81\\xa4\"\n\"\\x1b\\xb3\\xa9\\xac\\xb7\\xa5\\x7b\\x9a\\x6f\\x6a\\x6c\\x73\\x52\\x62\\x1f\\x9d\\xd1\\x05\\xfb\\x18\\x06\\x85\\x77\\x05\\xa1\\x87\\x8f\\x87\\x7c\\x1a\\x81\\x8a\"\n\"\\x81\\x88\\x81\\x1e\\x0e\\xfb\\x81\\xac\\xf7\\xb8\\x15\\xbb\\x9e\\xaa\\xb3\\x9d\\x1b\\x92\\x90\\x87\\x84\\x8f\\x1f\\x95\\x76\\x92\\x4c\\x4d\\x1a\\x4f\\x89\\x6d\"\n\"\\x83\\x27\\x1e\\x52\\x3f\\x75\\x5c\\x5b\\x1a\\x68\\x9d\\x78\\xaa\\xa0\\x9c\\x94\\x9f\\x9d\\x1e\\xa5\\xa8\\x98\\xb1\\xa3\\xf7\\x0b\\xdd\\xea\\xb8\\xbe\\x91\\x92\"\n\"\\x08\\xd2\\xe3\\xa9\\xca\\xc4\\x1a\\xb3\\x74\\xa8\\x6c\\x6d\\x71\\x6f\\x6b\\x80\\x8d\\x7f\\x8f\\x7f\\x1e\\x97\\x67\\x8c\\x86\\x78\\x1a\\x70\\x80\\x70\\x6f\\x63\"\n\"\\x1e\\x7f\\x7b\\x8b\\x8b\\x50\\x41\\x71\\x6b\\x18\\x98\\xdb\\x91\\xc7\\xca\\x1a\\xf7\\x04\\x70\\xc3\\x54\\x56\\x55\\x52\\x2d\\x67\\x1e\\x0e\\x3f\\x0a\\xf7\\x45\"\n\"\\xf7\\x8b\\x38\\x0a\\xfb\\x28\\xf8\\x71\\xf8\\x41\\x6e\\x1d\\xf7\\x1e\\xe0\\x63\\x1d\\xf7\\x16\\xea\\x05\\x0e\\x3f\\x0a\\xf7\\x17\\xf7\\xe2\\x15\\x22\\x5d\\x48\"\n\"\\x3e\\x42\\x1a\\x56\\xaa\\x68\\xb8\\xb0\\xa6\\xa7\\xb0\\xa4\\x82\\x99\\x70\\x9e\\x1e\\x76\\x98\\x85\\x94\\x98\\x1a\\xab\\xaf\\xae\\xd1\\xb0\\x1e\\x0e\\xfb\\x28\"\n\"\\xf7\\xb8\\xf9\\x2e\\x15\\x69\\x70\\x6f\\x67\\x68\\xa6\\x6e\\xac\\xad\\xa6\\xa8\\xae\\xae\\x70\\xa8\\x6a\\x1f\\xf7\\x4c\\xfb\\x81\\x6e\\x1d\\x0e\\xf7\\xef\\xf7\"\n\"\\x73\\x8c\\x15\\xf8\\x3c\\x06\\xa1\\xdf\\x05\\xfc\\x3b\\x06\\x8f\\x9c\\x15\\xf8\\x76\\xf7\\x6c\\x90\\x9f\\xfb\\xfc\\xf7\\x84\\x6d\\xfb\\x05\\xf7\\x85\\xfb\\x34\"\n\"\\xfb\\xd5\\xfb\\x1e\\x05\\x0e\\x2a\\xf7\\x10\\xf8\\x8b\\x15\\xfb\\x1d\\xfc\\x8b\\x50\\x1d\\x75\\x9a\\x05\\x4d\\x60\\x78\\x76\\x7e\\x1b\\x83\\x82\\x94\\x92\\x8d\"\n\"\\x8c\\x8f\\x8d\\x91\\xd1\\x1d\\x9f\\x1a\\xb9\\x6f\\xa7\\x5b\\x67\\x6d\\x7f\\x6d\\x68\\x56\\x0a\\xc3\\xf7\\x70\\x18\\xf7\\x1b\\x06\\x97\\xb3\\x05\\xfb\\x1c\\x06\"\n\"\\xb3\\xf7\\x30\\x3d\\x7b\\x59\\x84\\x3b\\x84\\x19\\x70\\xa1\\x07\\xa7\\x98\\x80\\x75\\x81\\x89\\x80\\x85\\x76\\x1f\\x85\\x73\\x05\\x4b\\x06\\x7f\\x63\\x05\\x0e\"\n\"\\x30\\xf8\\x73\\xf7\\x22\\x15\\x4e\\x60\\x78\\x75\\x7e\\x1b\\x83\\x82\\x94\\x92\\x8e\\x8b\\x8d\\x8e\\x92\\x1f\\xc5\\xf7\\x46\\x05\\x9f\\xc9\\x95\\xb4\\x9e\\x1a\"\n\"\\xba\\x6e\\xa7\\x5c\\x67\\x6e\\x7f\\x6d\\x67\\x56\\x0a\\xf6\\xf8\\x34\\x18\\x3d\\x7c\\x59\\x83\\x3b\\x84\\x08\\x70\\x07\\x8c\\x93\\x94\\x8b\\x90\\x1b\\xa7\\x64\"\n\"\\x1d\\xfb\\x2e\\xfc\\xcb\\x50\\x1d\\x59\\xf8\\xff\\x23\\x1d\\xf7\\xef\\xf8\\x87\\x6f\\x15\\x9c\\xde\\xc7\\xf3\\xf7\\x0b\\xf7\\x2b\\xb4\\xc0\\x9b\\xa0\\x9a\\xa3\"\n\"\\x08\\xb1\\xca\\x9d\\xc2\\xc1\\x1a\\xdc\\x44\\xcf\\x37\\x5b\\x5f\\x76\\x65\\x6a\\x1e\\x76\\x72\\x81\\x75\\x7e\\x5d\\x08\\xf2\\x67\\x56\\xbb\\x3a\\x1b\\x36\\x48\"\n\"\\x46\\x34\\x4a\\xa3\\x56\\xdc\\xfb\\x01\\x1f\\xf7\\x2c\\xfb\\x5f\\xb2\\x48\\xa5\\x24\\x08\\x0e\\xf7\\xef\\xf7\\x2d\\x16\\xf9\\x50\\xf8\\x25\\x06\\xfb\\xf3\\xf7\"\n\"\\xdc\\xfb\\xf1\\xfb\\xdc\\x05\\xc8\\xfb\\xf2\\x15\\xf7\\xdc\\x07\\xf7\\xb4\\xf7\\xa2\\xf7\\xb6\\xfb\\xa2\\x05\\xfb\\xdc\\x07\\x0e\\xfc\\x0b\\x2c\\x1d\\xc8\\xf8\"\n\"\\xbb\\xad\\x1d\\xcb\\xc5\\xf3\\x9d\\x1e\\x0e\\x26\\xf7\\x85\\xf7\\x10\\x15\\x5a\\x68\\x79\\x79\\x6a\\x1d\\x8d\\x94\\x8d\\x93\\x1f\\xf7\\x04\\xf8\\x07\\xfb\\x52\"\n\"\\x6f\\x84\\x73\\x05\\x8c\\x93\\x92\\x8c\\x8f\\x1b\\x9c\\x9a\\x7d\\x7c\\x83\\x87\\x79\\x85\\x78\\x1f\\x49\\xfb\\x6c\\x05\\x84\\x76\\x88\\x78\\x79\\x1a\\x5d\\xa5\"\n\"\\x6f\\xb6\\xa6\\xa1\\x96\\xaa\\xad\\x1e\\xa2\\x9f\\x97\\x9b\\xa4\\xb4\\x08\\x82\\xf8\\xe6\\x15\\x63\\x6b\\x6a\\x62\\x61\\xaa\\x6a\\xb3\\xb2\\xaa\\xac\\xb4\\xb4\"\n\"\\x6c\\xad\\x65\\x1f\\xf7\\xaf\\xfb\\x85\\x15\\xfb\\x50\\x68\\x84\\x73\\x05\\x9c\\x94\\x8a\\x8a\\x8e\\x1f\\x9b\\x86\\x94\\x7e\\x7a\\x1a\\x82\\x89\\x80\\x86\\x77\"\n\"\\x1e\\x3c\\xfb\\xd0\\x05\\xfb\\x0e\\x6c\\x76\\x5c\\x73\\x1b\\x85\\x84\\x91\\x90\\x8e\\x8d\\x90\\x90\\x91\\x1f\\x92\\x94\\x8e\\x92\\x92\\x1a\\x9d\\x79\\x9b\\x76\"\n\"\\x6f\\x76\\x76\\x6f\\x6d\\xaa\\x75\\xb4\\xb5\\xbd\\xa2\\xaa\\xaa\\x1e\\xb1\\xb4\\xab\\xce\\xa2\\xe3\\x08\\xc2\\xf9\\x07\\x15\\x65\\x6d\\x6c\\x64\\x63\\xa9\\x6b\"\n\"\\xb0\\xb0\\xa9\\xab\\xb2\\xb2\\x6d\\xab\\x67\\x1f\\x0e\\xfc\\x0b\\x2c\\x1d\\xf7\\x14\\xf8\\x84\\x25\\x0a\\xf7\\xef\\xf8\\x88\\xf7\\xa4\\x15\\x60\\xb2\\x87\\x8e\"\n\"\\x78\\x99\\x08\\xa5\\x6a\\x60\\x9b\\x6a\\x1b\\x45\\x51\\x51\\x45\\x45\\xc5\\x51\\xd1\\xad\\xb4\\x9b\\xa5\\xad\\x1f\\x9e\\x99\\x8f\\x8e\\xb6\\xb2\\xb8\\x64\\x8f\"\n\"\\x87\\x9c\\x7e\\x08\\x71\\xae\\xb4\\x7b\\xad\\x1b\\xd1\\xc5\\xc5\\xd1\\xd1\\x51\\xc5\\x45\\x6a\\x60\\x7b\\x71\\x69\\x1f\\x7a\\x7e\\x86\\x87\\x5f\\x64\\x08\\xac\"\n\"\\x6d\\x15\\xbe\\xbe\\xbf\\xa9\\xb3\\x1b\\xb7\\xb0\\x66\\x5f\\x5e\\x66\\x66\\x5f\\x64\\x58\\xa8\\xc0\\x56\\x1f\\x4a\\x16\\x57\\x57\\x57\\x6e\\x64\\x1b\\x5f\\x66\"\n\"\\xb0\\xb7\\xb7\\xb0\\xb0\\xb8\\xb2\\xbe\\x6e\\x57\\xbf\\x1f\\x0e\\xf7\\xef\\xf8\\x65\\xf7\\x87\\x15\\x43\\x8c\\x63\\x8e\\x51\\x1e\\x8d\\x6d\\x8c\\x6f\\x7a\\x1a\"\n\"\\x6f\\x82\\x78\\x7f\\x88\\x87\\x8f\\x93\\x86\\x1e\\x9f\\x81\\x80\\x93\\x78\\x1b\\x72\\x77\\x78\\x72\\x6c\\xa8\\x74\\xb4\\xb1\\xac\\x9e\\xad\\x9e\\x1f\\xa4\\xb8\"\n\"\\x99\\xf7\\x00\\xf7\\x24\\x1a\\xf7\\xd6\\x07\\xd6\\x8a\\xb0\\x88\\xc6\\x1e\\x89\\xa7\\x8a\\xac\\x96\\x1a\\xa7\\x93\\xa0\\x95\\x8f\\x8d\\x89\\x84\\x8f\\x1e\\x78\"\n\"\\x95\\x9b\\x80\\x9e\\x1b\\xa5\\x9e\\x9e\\xa3\\xac\\x6e\\xa1\\x62\\x65\\x6a\\x77\\x6a\\x78\\x1f\\x72\\x5e\\x7d\\xfb\\x00\\xfb\\x24\\x1a\\x0e\\xd0\\xf7\\xe7\\xf9\"\n\"\\xb4\\x15\\xfc\\xfb\\x07\\x60\\x8f\\x4e\\x95\\x23\\x1e\\x8f\\x61\\x8d\\x75\\x7f\\x1a\\x79\\x85\\x81\\x7f\\x85\\x89\\x8c\\x96\\x80\\x1e\\x94\\x81\\x80\\x90\\x7d\"\n\"\\x1b\\x71\\x75\\x75\\x70\\x6c\\xa7\\x73\\xae\\xb7\\xaa\\xaa\\xc5\\x99\\x1f\\x9b\\xcb\\x90\\xd4\\xf7\\x41\\x1a\\xf8\\xf2\\x07\\x0e\\xd0\\xf8\\x30\\xfb\\x61\\x15\"\n\"\\xf8\\xfa\\x07\\xb7\\x87\\xc8\\x81\\xf3\\x1e\\x87\\xb5\\x89\\xa1\\x97\\x1a\\x9d\\x91\\x95\\x97\\x91\\x8d\\x8a\\x80\\x96\\x1e\\x82\\x95\\x96\\x86\\x99\\x1b\\xa5\"\n\"\\xa1\\xa1\\xa6\\xaa\\x6f\\xa3\\x68\\x5f\\x6c\\x6c\\x51\\x7d\\x1f\\x7b\\x4b\\x86\\x42\\xfb\\x41\\x1a\\xfc\\xf2\\x07\\x0e\\xf7\\xef\\xf9\\x64\\x16\\xf7\\x8a\\x07\"\n\"\\xf7\\x1d\\x86\\xad\\x73\\xb4\\x1e\\xca\\x65\\x44\\xb1\\x39\\x1b\\x3f\\x4b\\x6c\\x53\\x62\\x1f\\x6a\\x5e\\x85\\x6b\\xfb\\x29\\x1a\\xfb\\x8a\\xc7\\xf7\\x8d\\x07\"\n\"\\xf0\\x91\\xb6\\x9c\\xaa\\x1e\\xb9\\xa4\\xc2\\xa9\\xc4\\x1b\\xc0\\xbf\\x71\\x61\\xa7\\x1f\\xa0\\x6b\\x91\\x66\\xfb\\x06\\x1a\\xfb\\x8d\\x07\\x0e\\xf7\\xef\\xf8\"\n\"\\x89\\xf9\\x6e\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\"\n\"\\xf7\\x37\\xfb\\x5e\\x1f\\xfb\\x01\\xfb\\x63\\x15\\xa9\\xa4\\x72\\x6d\\x6d\\x72\\x72\\x6d\\x6e\\x71\\xa4\\xa8\\xaa\\xa4\\xa4\\xa9\\x1f\\xfb\\x14\\xfb\\x05\\x15\"\n\"\\x96\\x59\\x96\\x75\\xa5\\x6d\\x08\\x54\\xbb\\xc7\\x71\\xdc\\x1b\\xdc\\xc7\\xa5\\xc2\\xbb\\x1f\\xa5\\xa9\\x96\\xa1\\x96\\xbd\\x84\\x36\\x80\\x62\\x6d\\x5e\\x08\"\n\"\\x4c\\x61\\x4b\\x6b\\x38\\x1b\\x3e\\x4f\\xa6\\xc1\\x61\\x1f\\x67\\xba\\x7c\\xb8\\x84\\xe8\\x08\\xf7\\xee\\xf7\\x05\\x15\\xa9\\xa4\\x72\\x6d\\x6d\\x72\\x72\\x6d\"\n\"\\x6e\\x71\\xa4\\xa8\\xaa\\xa4\\xa4\\xa9\\x1f\\x0e\\xfc\\x0b\\x59\\x1d\\x51\\x7e\\x4b\\x82\\x3b\\xb2\\x1d\\x66\\xa7\\x71\\xb2\\x8e\\x93\\x8b\\x8c\\x91\\x1e\\x6e\"\n\"\\x63\\x83\\x79\\x71\\x31\\x0a\\xb5\\xad\\x93\\x9b\\xaf\\xb0\\x1f\\xa3\\xa4\\x95\\x99\\xa6\\xb4\\x08\\x5f\\xf8\\xc1\\x57\\x1d\\xfc\\x0b\\x37\\x0a\\x0e\\xfc\\x0b\"\n\"\\x37\\x0a\\x30\\xf8\\xb3\\x15\\xf5\\x1d\\xa7\\xac\\xae\\x6f\\xa8\\x6b\\x1f\\xf7\\x1f\\x9e\\x0a\\xfc\\x0b\\x37\\x0a\\x5c\\xf8\\x7c\\x15\\xa8\\x06\\x8f\\x91\\x97\"\n\"\\xa1\\x05\\xb1\\xc7\\x8d\\x8f\\x9e\\x1a\\x9e\\x7a\\x98\\x73\\x7c\\x7c\\x85\\x82\\x83\\x1e\\x84\\x83\\x87\\x78\\x8c\\x75\\x8f\\x5d\\x18\\x71\\x07\\x3c\\x86\\x15\"\n\"\\x9a\\x0a\\xaa\\x72\\xa5\\x6e\\x1f\\xf7\\x4d\\x16\\x6d\\x73\\x73\\x6c\\x6b\\xa4\\x71\\xa9\\xa8\\xa3\\xa4\\xa9\\xaa\\x72\\xa6\\x6e\\x1f\\x0e\\xfc\\x0b\\x37\\x0a\"\n\"\\x43\\xf8\\x32\\x15\\xbe\\x06\\x93\\x9a\\x92\\x99\\x91\\x98\\x08\\xbb\\xe6\\x8f\\x94\\xa4\\x1a\\xa6\\x75\\x9e\\xf6\\x1d\\x74\\x8a\\x5e\\x08\\x8a\\x60\\x8a\\x72\"\n\"\\x81\\x1a\\x0e\\xfc\\x0b\\x2c\\x1d\\xef\\xf8\\xa4\\x7a\\x0a\\x80\\xa6\\x95\\x89\\x9e\\x1b\\xc7\\xae\\xae\\xdf\\xa2\\x1f\\x0e\\xfc\\x08\\xab\\xf8\\x2b\\x15\\xbe\"\n\"\\x96\\x86\\x71\\x7e\\x87\\x74\\x83\\x6d\\x1f\\x2f\\xfb\\xf7\\x05\\x26\\x71\\x7a\\x6d\\x6e\\xee\\x1d\\x93\\x96\\x8d\\xad\\x0a\\xef\\xcf\\xd7\\xf7\\x2f\\xb4\\x1e\"\n\"\\xf7\\x06\\xf8\\x4a\\x4f\\x7e\\x65\\x86\\xfb\\x02\\x81\\x19\\xf7\\x79\\xdd\\x23\\x1d\\xfb\\x0f\\xf7\\xbb\\xf7\\xb4\\x15\\xbf\\xbf\\xaa\\xa1\\xa0\\x1b\\x8c\\x9b\"\n\"\\x88\\x85\\xa2\\x1f\\x8a\\x92\\x94\\x8a\\x96\\x1b\\xb8\\xa5\\xa1\\xaf\\xa6\\x77\\x9c\\x69\\x6b\\x6c\\x7f\\x6f\\x66\\x1f\\x6b\\x73\\x85\\x86\\xfb\\x1b\\xfb\\x25\"\n\"\\xc2\\xf7\\x6a\\x18\\xfb\\x45\\x6f\\x84\\x73\\x05\\x8c\\x93\\x91\\x8c\\x90\\x1b\\x9c\\x9a\\x7d\\x7c\\x83\\x8b\\x8b\\x82\\x68\\x1f\\x36\\xfb\\xdf\\x05\\xf7\\x03\"\n\"\\x06\\xc6\\xf7\\x7c\\xd4\\xfb\\x44\\x05\\x5f\\x9d\\xa0\\x7a\\xb0\\x1b\\xa9\\xa4\\x97\\xa1\\x9d\\x1f\\x9a\\x9d\\x92\\x97\\xa4\\xbe\\x78\\x97\\x18\\x5f\\x74\\x81\"\n\"\\x80\\x77\\x1b\\x7c\\x84\\x94\\xb9\\x78\\x1f\\x0e\\x75\\x1d\\x51\\xfb\\xd8\\x35\\x1d\\xf7\\x41\\xf7\\x42\\x15\\xce\\xc4\\xb2\\xfb\\x41\\x05\\x60\\x94\\xa0\\x77\"\n\"\\xae\\x1b\\xbb\\xb9\\xb9\\xdf\\xb1\\x1f\\x72\\x06\\x62\\x78\\x80\\x7f\\x7b\\x1b\\x7e\\x83\\x99\\xb2\\x83\\x1f\\x60\\xf7\\x4e\\xd1\\xc7\\xb5\\xb2\\xb2\\xa0\\xa6\"\n\"\\x8a\\x19\\x91\\x9f\\x05\\xfb\\x5b\\x06\\x86\\x77\\x05\\xb3\\x87\\x95\\x84\\x77\\x1a\\x7c\\x81\\x7a\\x7b\\x7c\\x1e\\xfb\\x2b\\xfb\\x19\\xda\\xf7\\x8c\\xfb\\x47\"\n\"\\x71\\x85\\x73\\x05\\xa7\\x98\\x81\\x73\\x82\\x89\\x7e\\x87\\x7f\\x1f\\x23\\xfb\\xf1\\x05\\xf7\\x07\\x06\\x0e\\xfc\\x0b\\x41\\x0a\\x66\\xf8\\xeb\\x8c\\x0a\\xfb\"\n\"\\x65\\x61\\x16\\xf7\\x19\\x06\\xf7\\x39\\xf7\\x93\\x05\\x80\\x4d\\x87\\x5b\\x53\\x1a\\x67\\x8d\\x78\\x91\\x7f\\x1e\\x77\\x93\\x99\\x81\\x9d\\x1b\\xb2\\xb7\\xbd\"\n\"\\xd8\\xa8\\x1f\\x7a\\x93\\x05\\x60\\x6d\\x7f\\x81\\x76\\x1b\\x73\\x80\\x9c\\xaf\\xd5\\x9b\\xf7\\x68\\x9a\\xf7\\x09\\x1f\\x8e\\xa4\\x8d\\xa3\\x97\\x1a\\xbd\\x72\"\n\"\\xa8\\x60\\x65\\x74\\x72\\x62\\x76\\x94\\x7a\\x9f\\x7a\\x1e\\xb3\\x6a\\x92\\x7f\\x69\\x1a\\x83\\x8b\\x82\\x8a\\x81\\x1e\\x0e\\xfb\\x8b\\x41\\x0a\\xca\\xf7\\xa6\"\n\"\\x15\\xf4\\xb9\\xce\\x98\\x0a\\x67\\x68\\x45\\x65\\x1e\\x0e\\xfc\\x0b\\xf7\\x6b\\xe0\\x1d\\x98\\x92\\xa9\\x9a\\xc4\\xae\\x0a\\x96\\x8e\\x8b\\x92\\x1b\\xa6\\x9a\"\n\"\\x81\\x79\\x7d\\x7d\\x4e\\x78\\x48\\x1f\\x40\\xfb\\x9c\\x05\\x76\\x3e\\x7e\\x51\\x74\\x1a\\x67\\xa6\\x73\\xb4\\xc8\\xb1\\xaa\\xf4\\xd0\\x1e\\xfb\\xc7\\xfc\\x57\"\n\"\\x44\\x1d\\xfb\\xa6\\xf7\\x6e\\x6f\\x0a\\xe6\\xf7\\xad\\x15\\x61\\x6a\\xb0\\x0a\\x0e\\xf7\\xef\\xf9\\x0b\\x8c\\x15\\xa1\\xdf\\x05\\xfc\\x3b\\x06\\x74\\x37\\x05\"\n\"\\xf8\\xd6\\xf8\\xd4\\x15\\xfc\\x79\\xfb\\x79\\x86\\x77\\xf7\\xff\\xfb\\x76\\xa9\\xf7\\x05\\xfb\\x88\\xf7\\x26\\xf7\\xd8\\xf7\\x2c\\x05\\x0e\\x99\\x34\\x1d\\xf8\"\n\"\\xb9\\xfb\\xc8\\x73\\x0a\\xfb\\x44\\x7e\\x56\\xb4\\x0a\\xfb\\xd4\\xf7\\x22\\xf8\\x26\\x15\\x5c\\xfb\\x69\\x6c\\xfb\\x1f\\x84\\x68\\x08\\xfb\\x25\\x6e\\x77\\x61\"\n\"\\x64\\x1b\\x81\\x83\\x90\\x91\\x8d\\x8c\\x8e\\x8e\\x8f\\x1f\\x93\\x96\\x8f\\x96\\x96\\x1a\\xa3\\x73\\xa3\\x72\\x70\\x73\\x72\\x6f\\x5b\\xb2\\x6c\\xc6\\xc0\\xb6\"\n\"\\xa1\\xb6\\xad\\x1e\\xb8\\xc4\\xb3\\xf7\\x03\\xac\\xf7\\x31\\xdb\\xf8\\x12\\x8d\\x94\\xa5\\xb7\\x08\\xa6\\x9b\\x9c\\x98\\x9d\\x5e\\x1d\\x80\\x66\\x1d\\xa8\\xa0\"\n\"\\xa1\\xaa\\xbb\\x65\\xaa\\x4f\\x57\\x5b\\x76\\x64\\x68\\x1e\\x62\\x5d\\x77\\x62\\x70\\x27\\x08\\x43\\x06\\x82\\x61\\x05\\x0e\\xd0\\xf8\\xc1\\xf8\\xe5\\x15\\x43\"\n\"\\xbc\\x9c\\x79\\x9c\\x1b\\x95\\x93\\x92\\x95\\x91\\x8a\\x8f\\x84\\x99\\x1f\\x74\\xb6\\x7a\\xcb\\xb7\\x1a\\xa9\\x89\\x91\\x7e\\x86\\x84\\x88\\x83\\x7e\\x1e\\x78\"\n\"\\x70\\x3d\\x75\\x60\\x1b\\x71\\x8a\\x83\\x86\\x7e\\x1a\\x75\\xad\\x81\\xe2\\x85\\x1e\\x25\\xfb\\x4d\\x05\\x97\\x6c\\x6e\\x91\\x6b\\x1b\\xfb\\x1a\\xfb\\x00\\xfb\"\n\"\\x00\\xfb\\x1a\\xfb\\x19\\xf7\\x00\\xfb\\x00\\xf7\\x1a\\xf7\\x19\\xf7\\x00\\xf7\\x00\\xf7\\x1a\\xd8\\x66\\xd3\\x4c\\xb9\\x1f\\xfb\\x22\\x7b\\x15\\xee\\xdc\\x3b\"\n\"\\x28\\x28\\x3b\\x3a\\x28\\x27\\x3b\\xdb\\xee\\xee\\xdb\\xdc\\xee\\x1f\\x0e\\xfc\\x08\\xf7\\x48\\xf7\\xf8\\x15\\xf2\\xf7\\x51\\x05\\xa0\\xb3\\x97\\xaa\\x9e\\x1a\"\n\"\\xa7\\x74\\xa0\\x6c\\x4c\\x64\\x56\\x35\\x89\\x1e\\x89\\xfb\\x51\\x05\\x0e\\xf7\\x81\\xf7\\x43\\x15\\x92\\x7c\\x77\\x8f\\x7a\\x1b\\x4d\\x54\\x56\\x50\\x68\\xa5\"\n\"\\x75\\xb4\\xba\\xb7\\xa2\\xb1\\xa6\\x1f\\x9f\\xa6\\x91\\xa1\\x8d\\xbb\\x08\\xf7\\xb9\\x07\\xc3\\x83\\xb9\\x3f\\x38\\x1a\\x59\\x83\\x65\\x73\\x54\\x1e\\xa6\\x06\"\n\"\\xaf\\xb6\\x9e\\xc2\\xc5\\x1a\\xd6\\x6e\\xd2\\x51\\xd1\\x1e\\x58\\xc8\\x8a\\x8c\\x86\\x92\\x83\\x95\\x19\\xc5\\x5f\\x07\\x0e\\xd0\\xf8\\x13\\xf8\\x57\\x15\\x9e\"\n\"\\x72\\xa1\\x78\\xa0\\x7f\\xc3\\x6b\\x94\\x85\\x90\\x82\\x08\\x91\\x80\\x8f\\x78\\x76\\x1a\\xfb\\x7c\\x07\\x92\\x7a\\x74\\x8f\\x78\\x1b\\x46\\x4d\\x56\\x4f\\x68\"\n\"\\xa8\\x75\\xb8\\xbe\\xbb\\xa2\\xb1\\xaa\\x1f\\xa0\\xa6\\x92\\xa1\\x8d\\xbc\\x08\\xf8\\x00\\x07\\x8c\\xd3\\x6a\\xd5\\x5d\\xa7\\x54\\xaf\\x6d\\x9f\\x87\\x8f\\x08\"\n\"\\x7e\\x99\\x85\\x9d\\xa2\\x1a\\x98\\x5f\\xfc\\x80\\x07\\x92\\x7b\\x74\\x8f\\x79\\x1b\\x46\\x4f\\x56\\x4f\\x68\\xa7\\x75\\xb7\\xbe\\xbb\\xa2\\xb1\\xa8\\x1f\\xa0\"\n\"\\xa6\\x92\\xa1\\x8d\\xbc\\x08\\x8e\\xf8\\x0a\\x15\\xf7\\x03\\x4f\\xa3\\x67\\x8f\\xfb\\x08\\xfb\\x06\\xc8\\x74\\xae\\x87\\xf7\\x09\\x08\\x0e\\x2a\\x30\\x1d\\xfb\"\n\"\\x55\\xf8\\x1e\\x29\\x0a\\xb9\\xe1\\xf8\\x5d\\x15\\xc5\\x9f\\xa6\\x9a\\xa8\\xa4\\x08\\xb4\\xad\\xa0\\xb3\\xb5\\x1a\\xba\\x6e\\xac\\x63\\x67\\x6e\\x6d\\x67\\x78\"\n\"\\x92\\x7a\\x9a\\x79\\x1e\\x9b\\x78\\x8f\\x84\\x82\\x1a\\x6e\\x6a\\x70\\x4f\\x75\\x1e\\xf8\\xb6\\xfb\\xed\\xe1\\x1d\\x90\\x9c\\x9f\\xc7\\x1f\\xb0\\xf7\\x01\\x05\"\n\"\\x9a\\xb8\\x95\\xb9\\xa3\\x1a\\xbc\\x71\\xa5\\x5c\\x66\\x67\\x7c\\x71\\x70\\x1e\\x66\\x68\\x78\\x73\\x49\\x28\\xca\\xf7\\x5a\\x18\\x4c\\x7d\\x3a\\x6b\\x1d\\x8a\"\n\"\\x97\\x86\\x78\\x1a\\x7f\\x7d\\x54\\x6c\\xfb\\x03\\x1e\\x72\\x32\\x85\\x78\\x71\\x2b\\x08\\xf7\\x0d\\x06\\xba\\xf7\\x41\\xb0\\xe2\\xc8\\xdc\\x08\\xa6\\x9f\\xaa\"\n\"\\xa1\\x9d\\x1b\\x98\\x97\\x81\\x80\\x87\\x89\\x83\\x88\\x82\\x1f\\x54\\xfb\\x3a\\x05\\x7b\\x59\\x7f\\x54\\xe7\\x1d\\x0e\\x2a\\x30\\x1d\\xa9\\xf8\\xcc\\x20\\x0a\"\n\"\\x2a\\x30\\x1d\\xfc\\x3c\\xfc\\x52\\x35\\x1d\\xf7\\xef\\xf8\\xa4\\xf7\\x6c\\x15\\xf7\\x83\\xc8\\xfb\\x60\\x06\\xe3\\xf7\\x2f\\x05\\xf7\\x08\\xc9\\x3a\\x06\\xac\"\n\"\\xc6\\x61\\xa3\\x5c\\x38\\x05\\xfb\\x23\\x62\\x1d\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x37\\xdc\\x69\\x1e\\x6a\\x52\\xb6\\x74\\xb1\\xce\\x05\\x88\\xa4\\x99\\x8a\\xb4\"\n\"\\x1b\\xf7\\xac\\xc9\\xfb\\xb7\\x06\\x77\\x85\\x8b\\x8c\\x81\\x1f\\xab\\xf7\\x2d\\x15\\x3a\\xfb\\x21\\x57\\x9d\\x6c\\xbe\\x88\\xd3\\x19\\xf7\\xb6\\xf7\\x6c\\x15\"\n\"\\x33\\xfb\\x2f\\x05\\xfb\\x5e\\x06\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\x0e\\xf7\\xef\\xf8\\xd6\\xf7\\xcb\\x15\\xf7\\x42\\xe3\\xfb\\x15\\x06\\xb3\\xdc\\x3d\"\n\"\\xb2\\x4e\\xfb\\x0c\\x05\\xfb\\xa8\\x33\\xf7\\x7c\\x06\\x51\\xfb\\x08\\x05\\xfb\\x42\\x33\\xf7\\x15\\x06\\x63\\x3a\\xd9\\x64\\xc8\\xf7\\x0c\\x05\\xf7\\xa8\\xe3\"\n\"\\xfb\\x7c\\x06\\x0e\\xfb\\x65\\xd1\\xf7\\xbe\\x15\\xbd\\x99\\xa3\\xb1\\x9c\\x1b\\x9b\\x90\\x52\\xfb\\x52\\x53\\x89\\x6e\\x82\\x55\\x1f\\xab\\x84\\x9c\\x9f\\x92\"\n\"\\x92\\xa7\\xa5\\x19\\xf7\\x24\\xf7\\x1c\\xd3\\xf7\\x02\\xde\\x1a\\xb5\\x6d\\xaf\\x67\\x71\\x75\\x72\\x6d\\x76\\x90\\x7f\\xa0\\x6e\\x1e\\x97\\x7a\\x91\\x7b\\x7d\"\n\"\\x1a\\x64\\x6c\\x5c\\x3c\\x39\\x1e\\x8c\\xd1\\x8b\\x95\\x9a\\x1a\\xc6\\x88\\xbc\\x86\\xb0\\x1e\\xc5\\x82\\x6e\\xad\\x61\\x1b\\x55\\x5a\\x54\\x35\\x76\\x1f\\x0e\"\n\"\\x23\\x0a\\xf7\\x2b\\xf7\\x89\\xad\\x1d\\xcc\\xc5\\xf3\\x9c\\x1e\\x0e\\x23\\x0a\\x42\\xde\\x15\\xf7\\x2b\\xe2\\x05\\xa9\\x9c\\x94\\x96\\x9e\\x1a\\xa5\\x76\\xa0\"\n\"\\x70\\x7a\\x93\\x0a\\xf7\\x82\\x16\\xac\\x1d\\x23\\x0a\\xf7\\x5e\\xf7\\x52\\x15\\xfb\\xd9\\x06\\x7a\\x45\\x05\\xf7\\xda\\x06\\x0e\\xd1\\xf7\\x93\\xf8\\x57\\x5f\"\n\"\\x0a\\xd1\\xf8\\x24\\xf8\\x9e\\x15\\xbf\\x06\\x8e\\x93\\x92\\x99\\x95\\x9f\\x08\\xbb\\xe6\\x8f\\x94\\xa4\\x1a\\xa7\\x75\\x9d\\x6b\\x73\\x75\\x80\\x7a\\x81\\x1e\"\n\"\\x83\\x7d\\x8a\\x7c\\x89\\x21\\x89\\x64\\x18\\xfb\\x26\\x39\\x5f\\x0a\\x6d\\x0a\\x0e\\x6d\\x0a\\x83\\xf2\\x15\\xbe\\x06\\x8f\\x94\\x9c\\xac\\x05\\xbc\\xe8\\x8e\"\n\"\\x92\\xa4\\x1a\\xa6\\x75\\x9e\\x6b\\x77\\x76\\x83\\x7e\\x81\\x1e\\x81\\x7f\\x86\\x74\\x8a\\x5e\\x8a\\x4d\\x18\\x86\\x8a\\x7e\\x8a\\x76\\x1e\\x0e\\xf7\\xda\\x93\"\n\"\\x16\\xfa\\x56\\xd3\\xfe\\x0e\\xfa\\x03\\x43\\x06\\x0e\\x5e\\x0a\\xf7\\x23\\xf8\\x76\\x15\\xac\\x1d\\xf6\\xf9\\x18\\x15\\xa6\\xc3\\xa1\\x91\\xb3\\x1b\\xa0\\xa3\"\n\"\\x85\\x81\\x9c\\x1f\\xc0\\x6b\\xab\\x39\\x20\\x1a\\x6e\\x8a\\x75\\x87\\x69\\x1e\\xb5\\x52\\x67\\x99\\x58\\x1b\\x5a\\x62\\x7a\\x67\\x66\\x1f\\x5a\\x5b\\x6f\\x49\"\n\"\\x49\\x1a\\xfb\\x02\\xe3\\x33\\xf7\\x01\\xcb\\xc3\\xa5\\xbc\\xb5\\x1e\\xc6\\xd0\\xb1\\xf7\\x1c\\xf7\\x1f\\x1a\\xf7\\x0c\\x5f\\xf0\\x39\\xd0\\x1e\\xaf\\x60\\x58\"\n\"\\x9d\\x51\\x1b\\x60\\x6d\\x84\\x71\\x43\\x1f\\xf7\\xc6\\xfc\\x2e\\x15\\x7b\\xfb\\x02\\x7d\\x58\\x71\\x60\\x08\\x61\\x70\\x69\\x73\\x67\\x1b\\x59\\x6e\\xb9\\xd8\"\n\"\\xf6\\xc9\\xe2\\xd7\\xad\\xa3\\x7f\\x68\\xaf\\x1f\\x0e\\xf7\\x75\\xf7\\x55\\x73\\x1d\\xf8\\x49\\x6f\\x15\\x59\\x06\\xa7\\xf2\\x05\\x6b\\x06\\x63\\x50\\x69\\x6f\"\n\"\\x51\\x75\\x08\\x6b\\xae\\x07\\x5c\\xfb\\x37\\x05\\x80\\x63\\x85\\x6f\\x7e\\x1a\\x6d\\xa1\\x77\\xab\\xb8\\xa5\\xa0\\xdb\\xbf\\x1e\\x75\\x99\\x05\\x67\\x73\\x77\"\n\"\\x75\\x81\\x1b\\x88\\x87\\x8e\\x8f\\x98\\x99\\xc0\\xa3\\xde\\x1f\\x92\\xa3\\x90\\x9a\\x96\\xb5\\x08\\xc7\\x06\\x0e\\x47\\xf7\\x6b\\xfb\\x52\\x15\\xb6\\xf7\\x42\"\n\"\\xcd\\x8e\\xc7\\xa5\\xc0\\xbc\\x19\\xcd\\xc9\\xb7\\xea\\xdb\\x1a\\xe4\\x4a\\xd2\\x39\\x65\\x65\\x7b\\x70\\x70\\x1e\\x75\\x74\\x7a\\x68\\x7d\\x52\\x44\\xfb\\xb3\"\n\"\\x18\\x81\\x8e\\x84\\x8e\\x87\\x8f\\x08\\x7b\\x96\\x80\\xa8\\xac\\x1a\\xde\\xb0\\xf7\\x1d\\xb1\\xc7\\x1e\\xa1\\xae\\xa1\\x9d\\xac\\x96\\x8f\\x9d\\x18\\x48\\x88\"\n\"\\x5b\\x77\\x58\\x5b\\x08\\x49\\x4e\\x64\\x36\\x38\\x1a\\x4c\\xa4\\x55\\xb5\\x6e\\x1e\\xa4\\x7a\\xa0\\x84\\xb5\\x86\\x60\\xfb\\x42\\x18\\xf7\\x66\\xf8\\x6a\\x15\"\n\"\\xef\\xa4\\x96\\xa3\\x9f\\x1b\\xa1\\x9b\\x6c\\x64\\x34\\x5a\\xfb\\x29\\x5f\\x5e\\x1f\\x75\\x75\\x7c\\x82\\x6d\\x83\\x08\\x0e\\x20\\xf8\\xda\\xf8\\x50\\x15\\xfc\"\n\"\\x18\\x06\\x45\\x7e\\x86\\x5f\\x63\\x1f\\x3e\\x30\\xb3\\x7a\\xae\\xb8\\xaf\\x9c\\xcc\\x8d\\x19\\x7d\\x57\\x7f\\x68\\x79\\x62\\x65\\x39\\x86\\x84\\x63\\x72\\x7b\"\n\"\\x80\\x18\\x6f\\x78\\x7d\\x73\\x6f\\x1a\\x75\\xa2\\x7a\\xab\\xb5\\xab\\xa8\\xc8\\xa8\\x1e\\xab\\xce\\x8b\\x8b\\xc7\\xf7\\x63\\x08\\xf7\\x3b\\x06\\x4f\\x74\\x68\"\n\"\\x63\\x7a\\x4a\\x6b\\xfb\\x18\\x18\\x87\\x7c\\x89\\x7d\\x83\\x1a\\x6e\\xa7\\x65\\xa0\\x8e\\x91\\x8d\\x8e\\x92\\x1e\\xf7\\x0a\\xba\\x94\\xaf\\x05\\x82\\x73\\x82\"\n\"\\x88\\x7f\\x1b\\x7c\\x84\\x95\\xa0\\x99\\x8b\\x8c\\x92\\xa8\\x1f\\xad\\xf7\\x20\\x94\\xae\\x90\\x95\\xa2\\xa7\\x19\\xf3\\x06\\x0e\\xf7\\xef\\xf9\\x45\\xf9\\x55\"\n\"\\x15\\xfd\\x72\\x07\\x54\\x8a\\x78\\x77\\x54\\x1b\\x7b\\x78\\xf7\\xb8\\x9e\\x7a\\x06\\x55\\x77\\x9f\\xc2\\x1f\\xf9\\x3b\\x07\\xc4\\xa0\\xa2\\xc0\\x1e\\x9c\\x9d\"\n\"\\xfd\\x9f\\x79\\x9b\\x06\\xc1\\x9f\\x75\\x51\\x8c\\x1f\\xfd\\x3b\\x07\\x54\\x8a\\x77\\x77\\x55\\x1b\\x7b\\x78\\xf7\\xb8\\x9e\\x7a\\x06\\x55\\x77\\x9f\\xc2\\x1f\"\n\"\\xf9\\x72\\x07\\x0e\\xf7\\xef\\xf9\\x93\\xc9\\x15\\xfb\\xb7\\x06\\xfb\\x0d\\x57\\xc2\\xf7\\x16\\xf7\\x15\\xbf\\xc3\\xf7\\x0d\\x1f\\xf7\\xb7\\xc9\\xfb\\xac\\x62\"\n\"\\x1d\\x43\\x2b\\x1a\\xfb\\x07\\xb8\\x37\\xef\\x1d\\x06\\x0e\\xf7\\xef\\xf7\\x7d\\xc9\\x15\\x4d\\xf7\\xac\\x07\\xde\\xae\\x92\\xa4\\xb1\\x1f\\xcc\\xb7\\xac\\xd3\"\n\"\\xf2\\x1a\\xf6\\x5c\\xe0\\x3e\\xac\\x1e\\x99\\x69\\x70\\x8f\\x46\\x1b\\xfb\\xac\\x4d\\xf7\\xb7\\x06\\xf7\\x0d\\xbf\\x54\\xfb\\x16\\xfb\\x16\\x57\\x54\\xfb\\x0d\"\n\"\\x1f\\x0e\\x9a\\xbf\\xf7\\xb8\\x15\\xbf\\xa4\\xa8\\xaf\\x9d\\x1b\\x91\\x8f\\x85\\x83\\x84\\x8b\\x8b\\x82\\x69\\x1f\\x83\\x6a\\x05\\x73\\x2c\\x86\\x71\\x6d\\x1a\"\n\"\\x37\\xcf\\x52\\xee\\x1e\\x5d\\xfb\\x46\\x05\\xf7\\x02\\x06\\xb2\\xf7\\x41\\xe5\\x97\\xbf\\xa8\\xba\\xca\\x19\\xbf\\xd1\\xae\\xf7\\x00\\xe8\\x1a\\xc0\\x75\\xa9\"\n\"\\x65\\x6b\\x73\\x71\\x68\\x77\\x91\\x7b\\x9a\\x72\\x1e\\x9f\\x6a\\x8f\\x7e\\x71\\x1a\\x64\\x7b\\x58\\x71\\x62\\x1e\\x64\\x4c\\x65\\x72\\x3d\\x7d\\xea\\xf8\\x37\"\n\"\\x18\\x2f\\x06\\x21\\xfc\\x32\\x05\\x5f\\x8c\\x71\\xae\\xc2\\x1a\\xa4\\x91\\xa8\\x9d\\xd3\\x1e\\xa1\\xe1\\x05\\x92\\xa5\\x8e\\x9d\\x9a\\x1a\\xaf\\x73\\xa3\\x67\"\n\"\\x53\\x50\\x53\\x2f\\x61\\x1e\\x0e\\xfb\\xd4\\xf7\\x86\\xf7\\xf7\\x15\\x72\\xc1\\x81\\xae\\xaa\\x1a\\xb6\\x9b\\x9a\\xb5\\x89\\x1e\\xa6\\x89\\x9e\\x8f\\x96\\x95\"\n\"\\x08\\x9d\\x9b\\x95\\xa0\\xa1\\x1a\\xb2\\x68\\xab\\x5f\\x70\\x73\\x7d\\x70\\x75\\x1e\\x74\\x6d\\x82\\x6c\\x5d\\x1a\\x4c\\x9b\\x54\\xae\\x4c\\x1e\\x0e\\xfb\\x9c\"\n\"\\x40\\x0a\\xf7\\x51\\xdd\\x29\\x1d\\xd0\\xf8\\x3f\\x68\\x15\\xb6\\x06\\xf7\\x2c\\xfa\\x40\\x3e\\x96\\xfb\\x09\\xfd\\x69\\xfb\\x44\\xf7\\xf8\\xfb\\x4a\\x32\\xac\"\n\"\\x44\\xea\\xba\\x05\\x0e\\xfb\\x9c\\x40\\x0a\\xf8\\x30\\xf7\\x94\\x20\\x0a\\xfb\\x9c\\xc0\\x0a\\x6d\\xfb\\x05\\x43\\xfb\\x88\\x1e\\xf7\\x0d\\x06\\xb9\\xf7\\x26\"\n\"\\x9d\\xa8\\x0a\\x91\\x1f\\x7a\\x9a\\x98\\x83\\x9c\\x1b\\xac\\xa4\\xaa\\xb5\\xb3\\x74\\xa5\\x69\\x58\\x63\\x59\\xfb\\x33\\x3b\\xba\\x0a\\x29\\xfd\\x8a\\x44\\x1d\"\n\"\\xf7\\x80\\xf7\\xac\\xf7\\x00\\x15\\xf7\\x5f\\xf8\\x34\\xe3\\xfc\\x8c\\xfb\\xb7\\x07\\x0e\\xfb\\x1e\\x7c\\xfb\\x46\\x15\\xf7\\x03\\x06\\xc3\\xf7\\x6f\\x05\\x6a\"\n\"\\x9b\\xa6\\x7b\\xb0\\x1b\\xf5\\xf7\\x05\\xf7\\x2a\\xf7\\x22\\xf1\\x52\\xce\\x34\\x5a\\x58\\x78\\x6a\\x66\\x1f\\x63\\x67\\x7e\\x6c\\x6a\\xfb\\x12\\x08\\xf7\\x19\"\n\"\\xdd\\x15\\x99\\xc4\\x95\\xa8\\x95\\x9a\\x08\\x9d\\x98\\x9a\\x95\\x9d\\x1b\\xa5\\x99\\x71\\x5d\\x2d\\x68\\xfb\\x19\\x63\\x4f\\x1f\\x7a\\x7f\\x79\\x80\\x7a\\x1b\"\n\"\\x75\\x7d\\x98\\xad\\x7a\\x1f\\x0e\\xfb\\x9c\\x3d\\x1d\\x2d\\xf7\\x64\\x29\\x1d\\xfb\\x9c\\xf7\\x06\\x7f\\x15\\x8a\\x93\\x92\\x8b\\x8f\\x1b\\xde\\x9d\\x0a\\xa6\"\n\"\\x67\\x38\\x9a\\x1e\\xa6\\x89\\xa2\\xf7\\x2d\\x05\\x7d\\x0a\\x76\\x96\\x9f\\x7b\\x5d\\x1d\\x91\\x97\\x88\\x86\\x98\\x1f\\x8c\\x8e\\x8a\\x8a\\x8e\\x1f\\x4f\\x32\"\n\"\\x98\\x7f\\x05\\x8e\\x97\\x92\\x8c\\x96\\x45\\x1d\\xfb\\x9c\\x3d\\x1d\\xad\\xf7\\x64\\x23\\x1d\\xfb\\x9c\\xf7\\xe1\\xf8\\x61\\x15\\x7d\\x0a\\x75\\x96\\x9f\\x7c\"\n\"\\x5d\\x1d\\x92\\x96\\x88\\x86\\x98\\x1f\\x83\\xa3\\x9d\\x87\\xa0\\x1b\\xe0\\x9d\\x0a\\xa5\\x67\\x38\\x9b\\x1e\\xa6\\x89\\x05\\xfb\\xd8\\xfd\\x0c\\x44\\x1d\\x26\"\n\"\\xf8\\x3d\\xf7\\xf8\\x15\\xf1\\xf7\\x51\\x05\\xab\\xc8\\x8e\\x92\\x9f\\x1a\\xa9\\x75\\xa0\\x6c\\x6f\\x6e\\x7d\\x73\\x76\\x1e\\x78\\x74\\x85\\x72\\x8a\\x56\\x87\"\n\"\\xfb\\x51\\x18\\xfb\\x6a\\x16\\xf2\\xf7\\x51\\x05\\xa1\\xb4\\x97\\xaa\\x9d\\x1a\\xa7\\x74\\xa0\\x6b\\x4d\\x63\\x55\\x37\\x8a\\x1e\\x88\\xfb\\x52\\x05\\x0e\\xfb\"\n\"\\x06\\xf8\\xd3\\xf8\\x50\\x15\\xfb\\x6f\\x06\\xfb\\x00\\x5c\\x7e\\x60\\x53\\x1f\\x44\\x53\\x5c\\x2d\\x33\\x1a\\x29\\xcd\\x4b\\xee\\xf7\\x27\\xf7\\x14\\xf7\\x06\"\n\"\\xf7\\x17\\xb0\\x7e\\xad\\x76\\xa0\\x1e\\x7e\\x97\\x7e\\x91\\x71\\x94\\x08\\xf7\\x40\\x06\\xfb\\x6d\\x16\\x97\\x74\\x8e\\x7e\\x72\\x1a\\x56\\x77\\x38\\x71\\x53\"\n\"\\x1e\\x55\\x72\\x6f\\x73\\x64\\x1b\\x60\\x70\\xa9\\xbc\\xdb\\xac\\xf7\\x00\\xae\\xac\\x1f\\xa2\\xa4\\xa4\\x93\\xbe\\x1b\\x0e\\xf7\\xef\\xf8\\x1b\\xf8\\x9a\\xc0\"\n\"\\x1d\\xfb\\x14\\xfb\\x00\\x15\\x92\\x36\\x96\\x62\\xa9\\x5e\\x08\\x4c\\xb5\\xcb\\x6b\\xde\\x1b\\xd8\\xc7\\xa6\\xc1\\xb5\\x1f\\xaf\\xba\\x9a\\xb8\\x92\\xe8\\x80\"\n\"\\x59\\x80\\x75\\x71\\x6d\\x08\\x54\\x5b\\x4f\\x71\\x3a\\x1b\\x3a\\x4f\\xa5\\xc2\\x5b\\x1f\\x71\\xa9\\x80\\xa1\\x80\\xbd\\x08\\xf7\\xee\\xf7\\x00\\xc0\\x1d\\xfb\"\n\"\\x01\\xf7\\x68\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\"\n\"\\xf7\\x37\\xfb\\x5e\\x1f\\x89\\x5a\\x15\\xf7\\x45\\xf7\\x21\\xfb\\x20\\xfb\\x44\\xfb\\x43\\xfb\\x21\\xfb\\x21\\xfb\\x43\\xfb\\x41\\xfb\\x23\\xf7\\x21\\xf7\\x3e\"\n\"\\xf7\\x47\\xf7\\x1e\\xf7\\x22\\xf7\\x44\\x1f\\x0e\\xf7\\xef\\xf8\\xab\\xf7\\x99\\x15\\x7f\\x07\\x44\\x6b\\x45\\x5a\\x66\\x1e\\x6c\\x62\\x56\\x7a\\x57\\x1b\\x7e\"\n\"\\x74\\xf8\\x77\\xa2\\x06\\xfb\\x32\\x91\\x3c\\xe3\\x8e\\xf7\\x3d\\x08\\x35\\xb9\\xb6\\x6d\\xda\\x1b\\xcd\\xc4\\xca\\xd4\\xd0\\x73\\xb0\\xfb\\x01\\xef\\x1f\\xfb\"\n\"\\x02\\xf1\\x7a\\xa5\\x63\\xf7\\x09\\x7c\\x30\\x4d\\x30\\x23\\x39\\x08\\x3c\\x49\\x67\\x51\\x4c\\x1a\\x40\\xc8\\x4d\\xd4\\xb4\\xb4\\x9c\\xa9\\xac\\x1e\\x9e\\x9d\"\n\"\\x96\\x9a\\x9c\\xb0\\x08\\x0e\\xf7\\xef\\xf7\\xee\\xf9\\x5b\\x15\\xf7\\x85\\x06\\xf4\\x8a\\xa5\\x75\\x9a\\x26\\x08\\xa2\\x06\\x82\\xf7\\x39\\x05\\xfc\\xaf\\x06\"\n\"\\xf7\\x66\\xfc\\x67\\xfb\\x6e\\xfc\\x2c\\x05\\xf8\\xc8\\x06\\xbc\\xf7\\x66\\x05\\x74\\x06\\x6f\\x3b\\x6c\\x78\\x26\\x8c\\x08\\xfb\\xbc\\x06\\xf7\\x49\\xf7\\xf4\"\n\"\\x05\\x0e\\xf7\\xef\\xf7\\xcd\\xf8\\x77\\x15\\x6e\\x66\\x7c\\x67\\x85\\x5b\\x08\\xfb\\x05\\x54\\xf7\\x05\\x06\\x8f\\x61\\x9e\\x5b\\xa6\\x6a\\x3b\\x3c\\x18\\xb1\"\n\"\\x65\\xdb\\xdb\\xb1\\x6e\\xb2\\x7b\\xb8\\x86\\x19\\xfb\\x05\\xc1\\xf7\\x05\\x07\\xb7\\x90\\xb9\\x9e\\xab\\xa5\\xdb\\x3b\\x18\\xb0\\xb1\\x3b\\xdb\\xa8\\xae\\x9c\"\n\"\\xb5\\x90\\xb8\\x19\\xf7\\x05\\xc2\\xfb\\x05\\x06\\x86\\xb6\\x79\\xb7\\x70\\xad\\xda\\xda\\x18\\x66\\xb1\\x3b\\x3b\\x6c\\xa5\\x5f\\x9e\\x5c\\x91\\x19\\xf7\\x04\"\n\"\\x55\\xfb\\x04\\x07\\x60\\x86\\x5c\\x78\\x6b\\x70\\x3b\\xdb\\x18\\x65\\x65\\x05\\xf7\\x9c\\x55\\x15\\xec\\xd8\\x40\\x2d\\x2b\\x3f\\x3e\\x2c\\x2d\\x3e\\xd8\\xea\"\n\"\\xe7\\xd8\\xd9\\xe6\\x1f\\x0e\\xfb\\x65\\xf8\\x70\\xf8\\x50\\x15\\xfb\\xbc\\x06\\x49\\x7b\\x85\\x6d\\x73\\x1f\\x34\\xfb\\x07\\xb5\\x7c\\xb8\\xc5\\xb2\\x9c\\xe4\"\n\"\\x8a\\x19\\xbb\\x06\\x50\\x78\\x66\\x62\\x78\\x47\\x6a\\xfb\\x1c\\x18\\x89\\x82\\x89\\x7e\\x82\\x1a\\x69\\xa5\\x68\\xa5\\x8f\\x8e\\x8c\\x8c\\x8f\\x1e\\xf7\\x12\"\n\"\\xbc\\x94\\xb1\\x05\\x80\\x6e\\x7f\\x88\\x7e\\x1b\\x7d\\x85\\x91\\x9a\\x9b\\x91\\xaa\\x97\\xbd\\x1f\\x9c\\xd3\\x9a\\xc5\\x93\\x9d\\xa1\\xa2\\x19\\xf7\\x2b\\x06\"\n\"\\x0e\\xfc\\x0b\\xf7\\x3a\\xf7\\xba\\x15\\x91\\x9e\\x94\\xad\\x8c\\x8d\\x9b\\xc5\\x19\\xde\\xb5\\x43\\xc4\\x1d\\x6b\\xfb\\x05\\x05\\x5e\\x06\\x7d\\x55\\x05\\xb6\"\n\"\\x06\\x77\\x44\\x85\\x0a\\x9c\\x98\\xbe\\xa6\\xeb\\x1f\\xe0\\x06\\x98\\xc1\\x05\\x0e\\xfb\\x9e\\xf7\\xb7\\xf8\\x42\\x15\\x91\\x7b\\x05\\xea\\xc3\\xba\\xc9\\xcc\"\n\"\\x1a\\xc0\\x6c\\xae\\x5d\\x66\\x70\\x6f\\x65\\x73\\x94\\x7c\\xa6\\x79\\x1e\\xa0\\x7e\\x91\\x82\\x7e\\x1a\\x74\\x73\\x6c\\x66\\x73\\x1e\\x30\\x83\\x1d\\xfc\\x0b\"\n\"\\xdd\\x84\\x15\\xbd\\x95\\xb2\\xaf\\xc1\\xe3\\x75\\x99\\x18\\x57\\x6a\\x70\\x6f\\x7b\\x1b\\x83\\x83\\x92\\x93\\x9e\\x9e\\xd7\\xae\\xf7\\x09\\x1f\\x96\\xb1\\x90\"\n\"\\x9f\\x9c\\xc8\\x08\\xde\\xb5\\xb5\\x0a\\x56\\x3b\\x58\\x6c\\x1d\\x47\\xfb\\x82\\x05\\x7c\\x57\\x82\\x60\\x79\\x1a\\x6b\\x9e\\x73\\xa9\\x84\\x1e\\x51\\x36\\x3e\"\n\"\\x0a\\x93\\x8c\\x95\\x45\\x1d\\xfb\\x1a\\xf7\\xf9\\xf9\\x32\\x15\\x21\\x3d\\x3b\\xfb\\x35\\x57\\x1f\\x6f\\x33\\x75\\xfb\\x07\\x4f\\x1a\\xfb\\x05\\xbb\\x4e\\xe5\"\n\"\\xe2\\xd8\\xc5\\xed\\xb6\\x1e\\xb9\\xf3\\xaf\\xf7\\x30\\xe8\\x1a\\xbc\\x7f\\xb9\\x76\\xa7\\x1e\\xac\\x73\\x6d\\x98\\x55\\x1b\\x8f\\xfb\\xe2\\x15\\x6e\\xfb\\x0c\"\n\"\\x79\\x4d\\x76\\x57\\x08\\x5c\\x78\\x6f\\x6f\\x6d\\x1b\\x70\\x7a\\xa3\\xb4\\xc1\\x93\\xb8\\xac\\xf7\\x25\\x1f\\x94\\xb0\\x15\\xf7\\x61\\xbd\\xa8\\xc6\\xc0\\x1b\"\n\"\\xa6\\x9a\\x74\\x60\\x55\\x84\\x5e\\x75\\x28\\x1f\\x0e\\xfb\\xd4\\xf7\\x61\\xf8\\x66\\x15\\xbe\\x06\\x97\\xa3\\x92\\x99\\x8d\\x8d\\x08\\xbb\\xe4\\x8f\\x93\\xa4\"\n\"\\x1a\\xa5\\x75\\x9d\\x6b\\x77\\x77\\x83\\x7f\\x80\\x1e\\x81\\x80\\x86\\x73\\x8a\\x60\\x8a\\x40\\x18\\x0e\\x30\\xf8\\x6c\\xf7\\x19\\x5d\\x0a\\x72\\xf8\\xc2\\x15\"\n\"\\x49\\x6b\\x69\\x57\\x0a\\x06\\x55\\x8d\\x7c\\x98\\x70\\x1e\\x5f\\x9e\\xb4\\x69\\x1d\\x2a\\x26\\x0a\\xfb\\x9a\\xf8\\x20\\x51\\x1d\\x2a\\x26\\x0a\\x98\\xf8\\x8b\"\n\"\\x25\\x0a\\xfb\\x5f\\x04\\x34\\xf8\\x88\\xe2\\x07\\xfc\\x88\\xf7\\x32\\x15\\x34\\xf8\\x88\\xe2\\x07\\x0e\\xfc\\x27\\x0e\\xfb\\xd4\\xc9\\x1d\\x61\\x43\\x0a\\xfc\"\n\"\\x99\\xfd\\xb5\\x39\\x0a\\xfc\\x0b\\xf7\\xad\\xf8\\x55\\x15\\xb5\\x0a\\x56\\x3b\\x58\\x6c\\x1d\\x47\\xfb\\x82\\x85\\x0a\\x9e\\x9d\\xd4\\xaf\\xf7\\x0c\\x1f\\x94\"\n\"\\xad\\x92\\xa3\\x9c\\xc8\\x08\\xde\\x06\\xfb\\xf2\\xfd\\x6f\\x44\\x1d\\xfb\\xd4\\xf8\\x1d\\xf9\\x03\\x25\\x0a\\xfc\\x27\\xf7\\x12\\xf8\\x29\\x2b\\x0a\\x71\\x74\"\n\"\\x16\\xf8\\x8e\\x06\\xa5\\xf9\\x2a\\x05\\x70\\x06\\xfb\\x15\\xfc\\xed\\x15\\xfb\\x2e\\x06\\x53\\x8c\\x8b\\x8b\\x80\\x8f\\x08\\x81\\x8e\\x85\\x93\\x94\\x1a\\x97\"\n\"\\x9a\\xa5\\xac\\xb8\\x1e\\xf7\\x62\\xf7\\xab\\x05\\x0e\\xe8\\xf9\\x58\\xf7\\x44\\x15\\x4d\\x06\\x70\\x4d\\x7e\\x81\\x55\\x8a\\x08\\x61\\x06\\x6c\\x77\\x89\\x87\"\n\"\\x6b\\x1f\\x95\\x98\\xdd\\x97\\xb8\\xa1\\xb7\\xbc\\x19\\xca\\xd3\\xb5\\xf4\\xe2\\x1a\\xbb\\x79\\xbe\\x6d\\xb0\\x1e\\xc6\\x5d\\x40\\xa6\\xfb\\x07\\x1b\\xfb\\x2a\"\n\"\\xfb\\x05\\x54\\xfb\\x02\\x42\\x1f\\x63\\x4f\\x74\\x41\\x43\\x1a\\x4a\\x9e\\x53\\xad\\x67\\x1e\\xa0\\x75\\x9e\\x81\\xb5\\x82\\x8e\\x7e\\x18\\x8f\\x6d\\x79\\x8d\"\n\"\\x6b\\x1b\\x61\\x06\\x61\\x7a\\x9d\\xb4\\x8d\\x1f\\x8d\\x8b\\x91\\x8a\\x91\\x1e\\x4e\\x06\\x84\\xfb\\x44\\x05\\xf7\\xcf\\x06\\xa4\\xef\\x05\\x4b\\xba\\x77\\xb2\"\n\"\\xde\\x1a\\xda\\x9d\\xd8\\xaf\\xd8\\x1e\\xf4\\xbc\\xbd\\xb2\\xe2\\x1b\\xba\\xba\\x7a\\x72\\xa4\\x1f\\x9f\\x77\\x97\\x67\\x64\\x1a\\x33\\x69\\xfb\\x08\\x57\\x32\"\n\"\\x1e\\x66\\x4b\\x69\\x70\\x42\\x72\\x72\\x27\\x18\\xf7\\xcf\\x06\\x0e\\x2a\\xf8\\x51\\xf7\\x15\\x15\\x5e\\x76\\x79\\x72\\x81\\x1b\\x86\\x88\\x8f\\x90\\x8f\\x8c\"\n\"\\x91\\x90\\x9c\\x1f\\xe5\\xf7\\xf1\\x05\\xfb\\x06\\x06\\x59\\xfb\\x54\\x77\\x55\\x80\\x75\\x6f\\x60\\x19\\x5f\\x6e\\x7e\\x7e\\x7a\\x1b\\x81\\x86\\x91\\x98\\x92\"\n\"\\x8b\\x8b\\x91\\x9e\\x1f\\xde\\xf7\\xd7\\x05\\xfb\\x06\\x06\\x49\\xfb\\x92\\x81\\x66\\x81\\x65\\x82\\x66\\x19\\x81\\x67\\x84\\x73\\x86\\x7f\\x89\\x86\\x84\\x7c\"\n\"\\x81\\x75\\x08\\x76\\x5f\\x83\\x6f\\x70\\x1a\\x6a\\xa1\\x74\\xaa\\xaa\\xa4\\xa2\\xa8\\x95\\x8a\\x98\\x88\\x98\\x1e\\x85\\xac\\x89\\xa0\\xaa\\x1a\\x97\\x8b\\x93\"\n\"\\x8d\\x9c\\x1e\\x77\\x97\\x95\\x84\\x9d\\x1b\\xb5\\xac\\xa7\\xf0\\xd6\\x1f\\x87\\x7b\\x88\\x7f\\x88\\x83\\x08\\x85\\x77\\x88\\x79\\x7f\\x1a\\x72\\xa1\\x79\\xaa\"\n\"\\xc3\\xbd\\xb8\\xdf\\xb2\\x1e\\x0e\\xfb\\x63\\xf8\\x5a\\xf8\\x95\\x15\\x55\\x73\\x75\\x77\\x66\\x1b\\x84\\x81\\x8c\\x8d\\x7f\\x1f\\x8e\\x7a\\x7e\\x8c\\x81\\x1b\"\n\"\\x51\\x51\\x68\\x42\\x4e\\x1f\\x4b\\x40\\x73\\x54\\x47\\x1a\\x30\\xbb\\x54\\xdb\\x98\\x90\\x8c\\x8f\\x9f\\x1e\\x8e\\x9d\\x97\\x8d\\x95\\x1b\\xa4\\x99\\x7c\\x73\"\n\"\\x66\\x6d\\x6c\\x68\\x7e\\x7b\\x8f\\x93\\x7f\\x1f\\x9d\\x6d\\x84\\x8e\\x79\\x1b\\x64\\x72\\x72\\x65\\x66\\xa6\\x75\\xb7\\xf4\\xf6\\xf5\\xf4\\xbf\\x71\\xa6\\x59\"\n\"\\x7f\\x84\\x8a\\x88\\x74\\x1f\\x89\\x80\\x82\\x8a\\x82\\x1b\\x67\\x7b\\xa0\\xba\\xbf\\x95\\xd1\\x98\\xad\\x1f\\xae\\x99\\x9b\\x95\\xba\\x1b\\x98\\xa1\\x8a\\x89\"\n\"\\x9b\\x1f\\x87\\xa6\\xa5\\x89\\x94\\x1b\\xb0\\xa6\\x9d\\xb0\\x9f\\x1f\\x99\\xa4\\x92\\xa0\\x9a\\xc2\\x08\\x0e\\x99\\x70\\x1d\\x57\\xf9\\x5f\\x8f\\x0a\\xf7\\x11\"\n\"\\xf7\\x9b\\x4e\\x1d\\x5d\\xf7\\x1f\\x15\\xfb\\x03\\xf7\\x26\\x05\\xa0\\x7b\\x77\\x97\\x78\\x1b\\x73\\x76\\x76\\x74\\x3d\\x0a\\xf7\\x19\\x33\\x05\\x0e\\xfb\\x65\"\n\"\\x7b\\x1d\\xf7\\x6b\\xf7\\xbf\\xd7\\x1d\\x76\\x74\\x3d\\x0a\\xf7\\x18\\x33\\x05\\x0e\\x2a\\x72\\x1d\\x89\\xf8\\x37\\x8f\\x0a\\x99\\xf7\\x22\\xf8\\x02\\x15\\x33\"\n\"\\x06\\x82\\x6c\\x05\\xe3\\x06\\x49\\xfb\\x83\\x7b\\x56\\x7f\\x80\\x57\\x84\\x19\\x72\\xf7\\xbb\\xa4\\x07\\x52\\x8f\\x7d\\x94\\xaa\\x1a\\x96\\x8e\\x9a\\x93\\xa5\"\n\"\\x1e\\x8d\\x91\\x8c\\x91\\x8c\\x8d\\xc1\\xf7\\x5b\\x18\\xf6\\x89\\xa9\\x78\\x47\\x1a\\x7d\\x8a\\x80\\x88\\x79\\x1e\\xa7\\x86\\xd5\\xf7\\xa2\\x6f\\x8f\\x5d\\x2e\"\n\"\\x75\\x80\\xfb\\x16\\x8a\\x19\\xc8\\xf7\\x70\\xb1\\x0a\\x75\\x91\\x71\\x53\\x1a\\xa6\\x86\\xb6\\xf7\\x50\\x05\\xfc\\xa9\\x72\\x06\\xae\\x86\\xa0\\x86\\xc4\\x0a\"\n\"\\x81\\x1a\\x7c\\x87\\x74\\x85\\x75\\x1e\\x0e\\xfb\\xac\\xf7\\xc3\\xf7\\x96\\x15\\xb5\\xa5\\x9e\\xa9\\xb4\\x1a\\xc7\\x63\\xb0\\x4a\\x51\\x6a\\x7a\\x4a\\x44\\x1e\"\n\"\\x9b\\x7a\\x05\\xac\\xaf\\xaa\\x9a\\xac\\x1b\\xad\\x9f\\x76\\x67\\x63\\x7b\\x74\\x61\\x74\\x1f\\xfb\\x41\\x06\\x7f\\x60\\x05\\xeb\\x06\\x3c\\x67\\x74\\x72\\x5a\"\n\"\\x1a\\x46\\xbe\\x5d\\xd8\\xcc\\xb7\\xa3\\xd3\\xce\\x1e\\x7a\\x9e\\x05\\x61\\x61\\x69\\x78\\x65\\x1b\\x68\\x74\\xa6\\xb5\\xb8\\x9f\\xa3\\xcc\\xac\\x1f\\xf7\\x24\"\n\"\\x06\\x97\\xb6\\x05\\x0e\\xf7\\xa6\\xf8\\xdb\\xf7\\xce\\x15\\xd4\\xfb\\x74\\x05\\x8f\\x82\\x8d\\x7c\\x82\\x1a\\x74\\x7a\\x7f\\x6c\\x1e\\x84\\x75\\x05\\xd9\\x06\"\n\"\\xe2\\xb2\\x6d\\x47\\x7f\\x8a\\x82\\x87\\x79\\x1f\\xa8\\x06\\xbc\\xf7\\x43\\x05\\x71\\x06\\x65\\x8c\\x7e\\x94\\x7e\\xb3\\x24\\xf7\\xc7\\x18\\xcc\\xc4\\xa9\\xa5\"\n\"\\xb8\\xb5\\xf7\\x05\\xf2\\x9a\\x95\\xc8\\x92\\x91\\xa1\\x18\\xfb\\x77\\x20\\x1d\\x96\\x06\\x9e\\x96\\x7e\\x77\\x5b\\x38\\x38\\xfb\\x35\\xfb\\x03\\x1f\\x80\\x06\"\n\"\\xc8\\xf7\\x65\\x99\\xbc\\xa1\\x9d\\xb5\\x8a\\x19\\x22\\x1d\\xfb\\x98\\x20\\x1d\\x9a\\x06\\xab\\x9d\\x7d\\x71\\x82\\x8a\\x88\\x85\\x76\\x1f\\x4e\\xfb\\x6a\\x05\"\n\"\\x81\\x06\\x44\\xee\\x5c\\xe8\\xb5\\x1a\\xaa\\xa4\\xa1\\xae\\x1e\\x92\\x21\\x1d\\xfb\\x87\\x20\\x1d\\x97\\x06\\xc7\\x89\\xa9\\x6e\\xce\\xfb\\x0b\\xa0\\x66\\x95\"\n\"\\x7a\\x9e\\x6d\\xfb\\xce\\xfb\\xdf\\x18\\x6e\\x6c\\x6b\\x7a\\x67\\x86\\x84\\x75\\x18\\xf7\\xa3\\x06\\x22\\x1d\\x71\\x8c\\x84\\x8f\\x9c\\x1a\\x95\\x90\\x94\\x99\"\n\"\\x9a\\x1e\\xf7\\x6f\\xf7\\x80\\x05\\x95\\x06\\x4a\\xfb\\x76\\x7c\\x5b\\x79\\x7a\\x62\\x8a\\x19\\x84\\x75\\x05\\xf7\\x9b\\x21\\x1d\\x7b\\x06\\x66\\x79\\x98\\xa6\"\n\"\\x94\\x8d\\x96\\x93\\xa6\\x1f\\xc6\\xf7\\x61\\x05\\x0e\\xf7\\x93\\xf8\\x50\\x16\\xa4\\xe6\\xbe\\xe3\\xe2\\xf3\\x08\\x67\\x4a\\x7f\\x63\\x5b\\x1a\\x6b\\x92\\x6a\"\n\"\\x99\\x71\\x1e\\x99\\x70\\x99\\x83\\xbb\\x86\\xa7\\x88\\x92\\x88\\x96\\x7c\\x08\\x9b\\x77\\x93\\x6f\\x6b\\x1a\\x7f\\x8a\\x82\\x87\\x78\\x1e\\xa9\\x06\\xbb\\xf7\"\n\"\\x48\\x05\\x71\\x06\\x71\\x6a\\x93\\x95\\x7c\\x1f\\x75\\x9a\\x7e\\xad\\xb8\\x1a\\xf7\\x0f\\xd0\\xf7\\x2e\\xc3\\x97\\x95\\x84\\x81\\x84\\x88\\x88\\x7a\\x80\\x1e\"\n\"\\x7f\\x83\\x85\\x81\\x7c\\x1a\\x71\\x9e\\x79\\xa5\\xae\\xa4\\xa7\\xb2\\xb8\\x65\\xae\\x5a\\x44\\x30\\x39\\xfb\\x42\\xfb\\x0d\\x1e\\xd0\\xf7\\x85\\x05\\x25\\x06\"\n\"\\x65\\x22\\x6c\\x56\\x33\\xfb\\x02\\x08\\xac\\xcf\\x94\\xab\\xb8\\x1a\\xdd\\x60\\xc3\\x4c\\x4f\\x5c\\x69\\x35\\x50\\x1e\\x9b\\x7f\\x05\\xba\\xad\\xa9\\xa1\\xa9\"\n\"\\x1b\\xad\\xa2\\x65\\x53\\xfb\\x0a\\x47\\xfb\\x35\\x58\\x80\\x80\\x95\\x95\\x90\\x8e\\x8f\\x92\\x90\\x1f\\x9b\\x96\\x90\\x94\\x9c\\x1a\\xa6\\x79\\x9d\\x70\\x69\"\n\"\\x71\\x6d\\x65\\x5e\\xb1\\x67\\xbb\\xd7\\xec\\xe4\\xf7\\x3f\\xf7\\x04\\x1e\\x44\\xfb\\x8e\\x05\\x0e\\xfb\\x24\\xf7\\x5f\\x7f\\x15\\x8a\\x90\\x8e\\x8b\\x8c\\x1b\"\n\"\\xf7\\x1f\\xf7\\x04\\xf3\\xf7\\x13\\xba\\x7b\\xb0\\x6e\\xa3\\x1f\\x78\\x9b\\x7a\\x92\\x5e\\x95\\xc1\\x93\\xa4\\x94\\xa8\\xa0\\x08\\xb6\\xaa\\xa4\\xbe\\xc2\\x1a\"\n\"\\xe0\\x4a\\xc3\\x27\\x70\\x69\\x86\\x84\\x72\\x1e\\x83\\x70\\x8b\\x8b\\x82\\x1b\\x7c\\x84\\x90\\x9a\\x88\\x1f\\x77\\x06\\x61\\xfb\\x43\\x05\\x9e\\x06\\xe8\\xbe\"\n\"\\xbf\\xb8\\xc3\\x1b\\xb5\\xa0\\x6f\\x52\\x49\\x74\\x56\\x62\\x6f\\x1f\\x77\\x6d\\x70\\x84\\x53\\x1b\\x83\\x66\\x05\\x9f\\x06\\xd6\\xb0\\x67\\x43\\xfb\\x00\\x47\"\n\"\\x38\\x33\\x4a\\x59\\xb3\\xde\\x61\\x1f\\x6e\\x7e\\xac\\x2e\\xc7\\x55\\xdf\\x7c\\x19\\x52\\x38\\x3e\\x0a\\x92\\x8c\\x97\\x1b\\xa8\\x9c\\x7e\\x74\\x72\\x75\\x7b\"\n\"\\x69\\x75\\x7a\\x8f\\x98\\x6f\\x1f\\x75\\x6a\\x05\\x79\\xb7\\xab\\x61\\x1d\\xfb\\x9b\\xf7\\x48\\x81\\x15\\xe7\\x8e\\xcc\\xca\\xe0\\x1a\\xc7\\x6d\\xaa\\x47\\x96\"\n\"\\x1e\\xe7\\x9a\\xb1\\xac\\xcd\\x1a\\xcc\\x5d\\xac\\x2f\\x61\\x6a\\x84\\x7d\\x70\\x1e\\x67\\x77\\x75\\x6b\\x6c\\x1a\\x6e\\x9e\\x78\\xa6\\xa4\\xa0\\x9d\\xa1\\x94\"\n\"\\x88\\x94\\x84\\x94\\x1e\\x7f\\x99\\x8a\\x8d\\x92\\x1a\\x9c\\xab\\x99\\xaf\\xb6\\xa0\\x78\\x67\\x67\\x7b\\x66\\x73\\x79\\x1e\\x80\\x7d\\x77\\x85\\x71\\x1b\\x83\"\n\"\\x86\\x8b\\x8d\\x80\\x1f\\x81\\x67\\x05\\x8c\\x96\\x90\\x8b\\x95\\x1b\\xb7\\x99\\x7e\\x65\\x41\\x64\\x54\\x57\\x65\\x70\\x9e\\xbc\\x6b\\x1f\\x76\\x7e\\xa4\\x4c\"\n\"\\xb4\\x67\\xc6\\x80\\x19\\x51\\x36\\x98\\x7f\\x05\\x8e\\x97\\x92\\x54\\x1d\\x57\\x81\\x85\\x8a\\x89\\x81\\x1f\\x0e\\xab\\xf7\\xd5\\xf7\\xf5\\x15\\xd8\\xfb\\x97\"\n\"\\x05\\x8f\\x7f\\x8d\\x81\\x82\\x1a\\x73\\x7a\\x7a\\x74\\x1e\\x7e\\x20\\x1d\\xde\\x06\\xe2\\xb2\\x6d\\x47\\x80\\x8a\\x82\\x87\\x78\\x1f\\xa8\\x06\\xbc\\xf7\\x43\"\n\"\\x05\\x71\\x06\\x65\\x7e\\x95\\xb2\\x7e\\x1f\\xfb\\x00\\xf7\\xe0\\xf7\\x3d\\xf7\\x2d\\xc3\\xb7\\xb4\\x9f\\xba\\x8f\\x19\\x22\\x1d\\xfb\\x75\\x20\\x1d\\x97\\x06\"\n\"\\x9b\\x98\\x7c\\x79\\x77\\x7a\\x6f\\x70\\x72\\x1f\\xfb\\x53\\xfb\\x43\\xc8\\xf7\\x6b\\x98\\xb8\\x9e\\x9d\\xae\\x8e\\x19\\xa1\\x21\\x1d\\xfb\\xb9\\x52\\x0a\\x73\"\n\"\\x84\\x8a\\x85\\x89\\x84\\x1f\\xfb\\x21\\xfc\\x7f\\xa0\\x1d\\x0e\\xfb\\x21\\xf7\\xb6\\xf8\\x63\\x15\\xfb\\x4d\\x71\\x84\\x74\\x05\\x8c\\x8f\\x90\\x8b\\x8d\\x1b\"\n\"\\x9f\\x99\\x7c\\x76\\x83\\x8a\\x81\\xa5\\x0a\\xa1\\x8a\\x96\\x78\\x8f\\x5a\\x91\\x28\\xa1\\x5c\\xb9\\x83\\x9e\\x86\\x94\\x87\\x93\\x84\\x08\\x9b\\x7d\\x95\\x6f\"\n\"\\x6d\\x1a\\x83\\x8b\\x86\\x89\\x7f\\x1e\\xa8\\x06\\xb9\\xf7\\x38\\x05\\x71\\x06\\x62\\x8c\\x6f\\xa4\\x89\\xaf\\x7f\\xef\\x7b\\xa3\\x4f\\x8e\\xb3\\x94\\x9f\\x9e\"\n\"\\xa8\\xc7\\x95\\xa0\\x18\\xa6\\x98\\x96\\x96\\x97\\x1b\\x91\\x8f\\x88\\x82\\x8f\\x1f\\x78\\x95\\x92\\x85\\x9d\\x1b\\xa8\\x9f\\xa3\\xae\\xaf\\x76\\x9f\\x66\\x5e\"\n\"\\x7b\\x7a\\xfb\\x00\\x51\\x1f\\x4c\\x6a\\x6b\\x73\\x57\\x1b\\x0e\\xab\\xf7\\xf9\\xf8\\x1b\\x15\\x69\\x6c\\xc8\\xf7\\x6b\\x98\\xb7\\x9e\\x9d\\xae\\x8e\\x19\\xa1\"\n\"\\x21\\x1d\\xfb\\xb9\\x52\\x0a\\x73\\x84\\x8a\\x85\\x89\\x85\\x1f\\xfb\\x21\\xfc\\x80\\xa0\\x1d\\xd9\\xf7\\xa2\\x98\\x5e\\x53\\xfb\\x5f\\x05\\xbd\\x06\\xab\\xf7\"\n\"\\x09\\xb1\\xfb\\x14\\x05\\x8f\\x7f\\x8d\\x81\\x82\\x1a\\x73\\x7a\\x7a\\x74\\x1e\\x7e\\x20\\x1d\\xf7\\x96\\x4f\\x0a\\x21\\xf7\\xdd\\xf7\\x3d\\xf7\\x2c\\xc3\\xb8\"\n\"\\xb4\\x9e\\xba\\x8f\\x19\\x22\\x1d\\xfb\\x75\\x20\\x1d\\x97\\x06\\x9b\\x98\\x7c\\x7a\\x76\\x7a\\x6f\\x70\\x72\\x1f\\x32\\x3a\\xad\\xf7\\x0e\\x05\\x59\\x06\\x0e\"\n\"\\xfb\\x21\\xf7\\x8f\\xf7\\x8c\\x15\\x8a\\x85\\x86\\x8b\\x80\\x1b\\xc8\\xf7\\x6c\\xfb\\x4d\\xf7\\x00\\x1d\\x83\\x8a\\x82\\xa5\\x0a\\x8f\\x8f\\x8a\\x89\\x8f\\x1f\"\n\"\\x61\\xfb\\x2e\\x05\\xbd\\x06\\x9d\\xcd\\x05\\x2c\\x95\\xa6\\x62\\xc1\\x1b\\xb8\\xa7\\xa5\\xee\\xc5\\x1f\\x78\\x99\\x05\\x5d\\x73\\x78\\x78\\x77\\x1b\\x7b\\x82\"\n\"\\x98\\xa9\\x87\\x1f\\x80\\xea\\x7b\\xa5\\x57\\x90\\x89\\x8c\\x18\\x8c\\x8d\\xad\\x94\\x9f\\xa0\\xa6\\xc3\\x19\\xbe\\xa4\\x91\\x93\\x9a\\x1b\\x91\\x8f\\x88\\x82\"\n\"\\x8f\\x1f\\x78\\x95\\x93\\x85\\x9c\\x1b\\xa8\\x9f\\xa3\\xae\\xaf\\x76\\x9f\\x65\\x5f\\x7b\\x7a\\xfb\\x00\\x51\\x1f\\x7b\\x6d\\x84\\x82\\x7e\\x7c\\xab\\xf7\\x0c\"\n\"\\x18\\x59\\x06\\x0e\\xe3\\xf7\\xf9\\xf9\\x05\\x15\\xfb\\x23\\xfc\\xad\\x2f\\x1d\\x82\\x20\\x1d\\xf7\\xa9\\x21\\x1d\\x6c\\x06\\x71\\x7a\\x9c\\xa4\\x91\\x8c\\x91\"\n\"\\x8d\\x92\\x1f\\xd3\\xf7\\xa2\\xdc\\xfb\\x97\\x05\\x8f\\x7f\\x8d\\x80\\x82\\x1a\\x73\\x7b\\x7b\\x74\\x49\\x0a\\xfb\\x04\\xf7\\xdc\\xf7\\x39\\xf7\\x2d\\xc3\\xb8\"\n\"\\xb2\\x9e\\xb9\\x8f\\x19\\x91\\x3b\\x0a\\x9b\\x98\\x7c\\x79\\x76\\x7b\\x6f\\x72\\x73\\x1f\\xfb\\x4f\\xfb\\x43\\xc4\\xf7\\x6b\\x98\\xb8\\x9c\\x32\\x0a\\xfb\\xfb\"\n\"\\x06\\x60\\xfb\\x36\\x05\\x9e\\x06\\xb4\\xd6\\xb7\\xb0\\xc9\\x95\\xa7\\x8d\\x18\\x0e\\xfb\\x26\\xf7\\xac\\xf8\\x5e\\x15\\xfb\\x84\\x8a\\x5c\\xfb\\x28\\x05\\x9f\"\n\"\\x06\\xa8\\xcd\\xb5\\xac\\xce\\x92\\xfb\\x01\\xfc\\x33\\x18\\xf7\\x09\\x06\\xc3\\xf7\\x6b\\x05\\x94\\x06\\xa1\\x8a\\x96\\x79\\x90\\x5a\\x91\\x51\\x8e\\x7b\\x94\"\n\"\\x74\\xcb\\x1d\\x5e\\x74\\x79\\x79\\x77\\x1b\\x7b\\x82\\x98\\xa9\\x87\\x1f\\x7e\\xec\\x79\\xa4\\x50\\x8e\\xb7\\x95\\x9c\\x9e\\xaf\\xd9\\x08\\xa6\\x98\\x94\\x96\"\n\"\\x97\\x1b\\x92\\x8f\\x87\\x83\\x8f\\x1f\\x77\\x94\\x93\\x86\\x9c\\x1b\\xa8\\x9e\\xa2\\xae\\xaf\\x76\\xa0\\x65\\x5f\\x7d\\x7c\\xfb\\x01\\x52\\x1f\\x4c\\x6b\\x6c\"\n\"\\x73\\x57\\x1b\\xac\\xf7\\x0e\\x05\\x0e\\xf7\\x19\\xf7\\xc6\\xf7\\xd5\\x15\\xf7\\x7c\\x06\\x48\\xfb\\x7d\\xc3\\x0a\\x66\\x20\\x1d\\xf7\\x10\\x06\\xe2\\xb1\\x6d\"\n\"\\x48\\x7e\\x8a\\x83\\x87\\x78\\x1f\\xa9\\x06\\xbb\\xf7\\x43\\x05\\x71\\x06\\x69\\x75\\x98\\x9f\\x8c\\x1f\\x8f\\x8c\\x8f\\x8c\\x8f\\x1e\\xf7\\x21\\xf8\\x7f\\x98\"\n\"\\xb8\\x9d\\x9d\\xae\\x8e\\x19\\x98\\x21\\x1d\\xfb\\xab\\x20\\x1d\\xa5\\x06\\xa5\\x9c\\x7a\\x73\\x83\\x8a\\x86\\x89\\x84\\x1f\\x4d\\xfb\\x6d\\x05\\xfb\\x7c\\x06\"\n\"\\xc8\\xf7\\x68\\x98\\xb8\\x9d\\x9d\\xae\\x8e\\x19\\xb2\\x21\\x1d\\xfb\\xc0\\x96\\x0a\\x79\\x79\\x3c\\x0a\\xf7\\xa8\\x21\\x1d\\x6f\\xb6\\x0a\\x0e\\x2f\\xf7\\x8c\"\n\"\\xf7\\x97\\x15\\xc4\\xf7\\x60\\xfb\\x4c\\xf7\\x00\\x1d\\x84\\x8a\\x81\\xf2\\x1d\\xca\\xf7\\x76\\x05\\xf7\\x01\\x06\\x67\\xfb\\x14\\x05\\x87\\x7d\\x89\\x7a\\x7c\"\n\"\\x1a\\x63\\x9e\\x79\\xb9\\x87\\x1e\\xa1\\x89\\x9a\\x86\\x93\\x84\\x08\\x97\\x80\\x93\\x74\\x72\\x1a\\x82\\x8a\\x84\\x89\\x7d\\x1e\\xa8\\x06\\xb6\\xf7\\x34\\x05\"\n\"\\x71\\x06\\x6d\\x74\\x97\\x9a\\x91\\x8d\\x94\\x8d\\x94\\x1f\\xee\\xf7\\xee\\x05\\xfb\\x0b\\x06\\x56\\xfb\\x4d\\x05\\x0e\\x99\\xf7\\xc1\\x79\\x15\\xf7\\x06\\xea\"\n\"\\xbf\\xec\\xcd\\x1f\\x6d\\xa1\\x59\\x50\\x6f\\x74\\x61\\x79\\x19\\x6e\\x0a\\xfb\\x1f\\xdd\\x2e\\xf7\\x25\\x73\\x1f\\x57\\x3e\\x98\\x7f\\x05\\x8e\\x96\\x93\\x54\"\n\"\\x1d\\x56\\x81\\x85\\x8a\\x89\\x82\\x1f\\x0e\\xfb\\x65\\xf7\\x20\\x7e\\x15\\x94\\x06\\xb6\\xb7\\x9b\\xa8\\xac\\x1f\\xa5\\xa1\\x9b\\x9e\\xae\\xbd\\x6f\\x9d\\x18\"\n\"\\x48\\x5b\\x6c\\x74\\x60\\x1b\\x5f\\x6e\\xaf\\xc1\\xc9\\xa5\\xe6\\xaf\\xcb\\x1f\\xba\\xa6\\xa8\\xa3\\xa9\\x1b\\x97\\x95\\x84\\x81\\x86\\x89\\x86\\x85\\x82\\x1f\"\n\"\\x82\\x7c\\x87\\x7f\\x7f\\x1a\\x6d\\xa4\\x75\\xac\\xe3\\x1d\\xfb\\x37\\xfb\\x35\\x44\\xb2\\x54\\xcd\\x78\\x1e\\x51\\x36\\x3e\\x0a\\x92\\x8c\\x96\\x45\\x1d\\x61\"\n\"\\xf7\\x7e\\xf7\\xca\\x15\\x4f\\xfb\\x6a\\xc3\\x1d\\x97\\x8c\\x92\\x92\\xa4\\x1e\\xbf\\xf7\\x51\\x9c\\x1d\\xc4\\x83\\xa3\\x7a\\xc1\\x19\\x74\\xcc\\x81\\xae\\x9f\"\n\"\\x0a\\x08\\x0e\\xfb\\x61\\xf7\\x81\\xf7\\x30\\x15\\x7f\\xf7\\x39\\x88\\x0a\\x55\\xfb\\x53\\x7f\\x61\\x7f\\x81\\x5e\\x84\\x19\\x85\\x74\\x05\\xf7\\x7f\\x06\\x92\"\n\"\\xa2\\x05\\x71\\x8f\\x80\\x94\\x9d\\x1a\\x92\\x8c\\x94\\x8e\\x94\\x1e\\xc5\\xf7\\x63\\x84\\x0a\\x0e\\x61\\xf7\\xfa\\xf7\\x7c\\x15\\x9f\\xd4\\x9c\\x1d\\xc7\\x81\"\n\"\\xa9\\x7c\\xb8\\x19\\x74\\xcb\\x81\\xaf\\x9f\\x0a\\xe3\\xfb\\x9d\\x18\\x75\\x3d\\x05\\x2f\\x06\\x7f\\x61\\x05\\xe7\\x06\\x71\\x2d\\xc3\\x1d\\x98\\x8c\\x91\\x92\"\n\"\\xa4\\x1e\\x9f\\xd5\\x05\\xef\\x06\\x96\\xb5\\x05\\x0e\\xfb\\x61\\xf7\\x6f\\x90\\x15\\xa6\\xea\\x84\\x0a\\x2c\\xfb\\x39\\x7f\\xf7\\x3a\\x88\\x0a\\x74\\x39\\x05\"\n\"\\x3e\\x06\\x7d\\x59\\x05\\xd8\\x06\\x7a\\x4f\\x7e\\x62\\x81\\x81\\x5d\\x84\\x19\\x85\\x74\\x05\\xf7\\x7f\\x06\\x92\\xa2\\x05\\x71\\x8f\\x80\\x94\\x9d\\x1a\\x92\"\n\"\\x8c\\x94\\x8e\\x93\\x1e\\x9c\\xca\\x05\\xdd\\x06\\x99\\xbd\\x05\\x0e\\xa0\\xf7\\xe1\\xf7\\x9b\\x15\\xc0\\xfb\\x34\\x05\\x8f\\x81\\x8c\\x82\\x7f\\x1a\\x6e\\x76\"\n\"\\x76\\x6f\\x1e\\x7e\\x20\\x1d\\xea\\x06\\xe1\\xb3\\x6c\\x48\\x80\\x8a\\x82\\x87\\x77\\x1f\\xa8\\x06\\xbc\\xf7\\x44\\x05\\x71\\x06\\x65\\x7e\\x95\\xb2\\x7e\\x1f\"\n\"\\x2f\\xf7\\xb1\\xf7\\x0e\\xf7\\x17\\xea\\xf2\\xb2\\xaa\\xab\\x8e\\x19\\x22\\x1d\\xfb\\x56\\x20\\x1d\\x95\\x06\\xa1\\x99\\x7e\\x75\\x77\\x83\\x7c\\x71\\x6f\\x1f\"\n\"\\xfb\\x0c\\xfb\\x16\\x60\\xf7\\x1e\\x05\\x81\\xa7\\x8a\\x92\\x95\\x1a\\xa5\\x9b\\x9e\\xa0\\x1e\\x98\\x21\\x1d\\xfb\\x9e\\x4b\\x0a\\xde\\xfb\\x92\\x18\\xfb\\x37\"\n\"\\xfb\\x43\\x52\\x4c\\x5f\\x69\\x66\\x82\\x33\\x0a\\xf7\\x63\\x21\\x1d\\x7e\\x06\\x6b\\x79\\x97\\xa2\\x9a\\x96\\x9e\\xa2\\xa5\\x1f\\x0e\\xfb\\x28\\xf8\\x38\\xbf\"\n\"\\x15\\x71\\x06\\x54\\x8d\\x8a\\x8d\\x5f\\xf7\\x45\\x84\\xa8\\x18\\xea\\xbe\\x8f\\x8f\\xa5\\x1b\\x93\\x92\\x8a\\x87\\x97\\x1f\\x87\\x99\\x91\\x8a\\x95\\x1b\\xa7\"\n\"\\xa2\\xa3\\xa8\\xa9\\x71\\xa1\\x69\\x69\\x68\\x70\\x5e\\x72\\x1f\\x5c\\x39\\x81\\xbb\\x88\\x98\\x6c\\xea\\x19\\xfb\\x31\\x6b\\x84\\x75\\x05\\x8d\\x95\\x93\\x8c\"\n\"\\x91\\x1b\\xa7\\xa1\\x6f\\x5a\\x97\\x1f\\xac\\xfb\\x26\\x60\\x43\\x05\\x74\\x7d\\x7f\\x81\\x7e\\x1b\\x83\\x86\\x8d\\x92\\x7f\\x1f\\x92\\x7d\\x83\\x8e\\x7f\\x1b\"\n\"\\x6c\\x74\\x74\\x6b\\x6a\\xa0\\x77\\xad\\xae\\xb7\\xab\\xb8\\xa7\\x1f\\xba\\xd8\\xa3\\xfb\\x03\\x9f\\x69\\xb9\\x85\\x19\\xa4\\x86\\x90\\x8a\\x91\\x87\\x08\\x9a\"\n\"\\x83\\x95\\x73\\x70\\x1a\\x82\\x8a\\x85\\x88\\x7d\\x1e\\xa9\\x06\\x0e\\xea\\xf9\\x9d\\xf9\\x14\\x15\\x90\\xa1\\x05\\xfb\\xa2\\xb7\\x0a\\x87\\x8a\\x83\\x89\\x85\"\n\"\\x1e\\x4c\\xfb\\x81\\x05\\x76\\x5a\\x6a\\x83\\x63\\x1b\\x5a\\x70\\x9f\\xaf\\x9b\\x8e\\x9b\\x97\\xb6\\x1f\\xad\\xf7\\x16\\x97\\xb8\\x9d\\x47\\x0a\\x63\\xfb\\x2d\"\n\"\\x05\\x84\\x71\\x88\\x7b\\x7b\\x1a\\x46\\xc1\\x64\\xeb\\xc2\\xb3\\x93\\xa5\\xd4\\x1e\\x54\\xfb\\x62\\x7f\\x4e\\x0a\\xe6\\x06\\xde\\xb3\\x6b\\x49\\x80\\x8a\\x82\"\n\"\\x87\\x77\\x1f\\xa9\\x06\\xb6\\xf7\\x36\\x05\\x71\\x06\\x6c\\x75\\x97\\x9c\\x90\\x8c\\x90\\x8c\\x91\\x1f\\xf7\\x1c\\xf8\\x8d\\x97\\xb8\\x9d\\x9d\\xae\\x8e\\x19\"\n\"\\x0e\\xfb\\x14\\xf8\\x78\\xef\\x15\\x79\\x95\\x05\\x67\\x77\\x7a\\x79\\x7b\\x1b\\x84\\x87\\x90\\x94\\x91\\x8c\\x90\\x8f\\x9a\\x1f\\xe7\\xf7\\xf0\\x05\\xfb\\x0a\"\n\"\\x06\\x7e\\x59\\x05\\x37\\x74\\x51\\x3d\\xe5\\x1d\\xb6\\xf7\\x3a\\x8c\\x1d\\x97\\x94\\x8d\\x8f\\x97\\x1e\\x93\\x76\\x8f\\x75\\x7b\\x1a\\x84\\x8a\\x84\\x89\\x7e\"\n\"\\x1e\\xa8\\x06\\xb8\\xf7\\x33\\x05\\x0e\\xf2\\xf8\\x32\\xf7\\xa1\\x15\\xa8\\x91\\x9c\\x90\\xb5\\x9a\\x4f\\xfb\\x63\\x18\\x7e\\x5e\\x79\\x79\\x68\\x88\\x08\\xac\"\n\"\\x0a\\x7b\\x9b\\xa4\\x1a\\x93\\x8c\\x8f\\x8c\\x92\\x1e\\xf7\\x21\\xf8\\x80\\x99\\xb7\\x9d\\x32\\x0a\\xfb\\xa5\\x06\\x84\\x75\\x05\\xa1\\x06\\xa5\\x9c\\x7a\\x73\"\n\"\\x84\\x8a\\x85\\x89\\x85\\x1f\\x47\\xfb\\x82\\x6a\\x7d\\x71\\x83\\x6f\\x86\\x19\\xcb\\xf7\\x7b\\x05\\x4c\\x06\\x4a\\xfb\\x7b\\x05\\x69\\x93\\x7c\\x9b\\xa8\\x1a\"\n\"\\x9c\\x8d\\x92\\x9a\\xc0\\x1e\\xb0\\xf7\\x16\\x98\\xb7\\x9d\\x9d\\xae\\x8e\\x19\\x98\\x21\\x1d\\xfb\\xa6\\x20\\x1d\\xa1\\x06\\xa5\\x9c\\x7b\\x72\\x86\\x8a\\x83\"\n\"\\x89\\x85\\x1f\\x5f\\xfb\\x2d\\x05\\x83\\x6e\\x88\\x7c\\x7a\\x1a\\x47\\xc0\\x65\\xec\\x1e\\x9d\\x06\\x62\\xfb\\x26\\x05\\xca\\x06\\x0e\\xfb\\x0f\\xf7\\x96\\xf7\"\n\"\\x7f\\x15\\x87\\x06\\x7e\\x86\\x92\\x9b\\x98\\x8b\\x8c\\x92\\xa3\\x1f\\xb9\\xf7\\x3b\\xfb\\x4c\\x71\\x85\\x74\\x05\\x96\\x06\\x9f\\x99\\x7d\\x76\\x83\\x8a\\x81\"\n\"\\x88\\x83\\x1f\\x74\\x38\\x05\\x82\\x6e\\x89\\x7d\\x7b\\x1a\\x63\\xa5\\x70\\xb1\\xa3\\xa4\\x93\\x98\\x9f\\x1e\\x75\\x38\\x05\\xb8\\x06\\xb0\\xf7\\x1b\\x95\\x96\"\n\"\\x96\\x98\\xa2\\xa8\\x19\\x5a\\xfb\\x41\\x05\\x85\\x74\\x89\\x80\\x7d\\x1a\\x68\\xa6\\x73\\xb2\\xbc\\xb4\\xab\\xda\\xbb\\x1e\\x7a\\x96\\x05\\x66\\x76\\x79\\x79\"\n\"\\x7c\\x1b\\x82\\x88\\x8f\\x94\\x93\\x8b\\x8c\\x91\\x9d\\x1f\\xee\\xf7\\xef\\x05\\xfb\\x0c\\x06\\x7d\\x5d\\x7b\\x59\\x7a\\x69\\x6c\\x63\\x19\\xa6\\xef\\x05\\x5d\"\n\"\\x06\\x0e\\xa2\\xf7\\xd5\\xf8\\xd2\\x15\\x99\\xb9\\x9c\\x9c\\xae\\x8e\\x08\\x93\\x06\\x92\\xa1\\x05\\xfb\\xa8\\x06\\x84\\x75\\x05\\xa8\\x06\\xa5\\x9c\\x7a\\x72\"\n\"\\x86\\x8a\\x84\\x89\\x84\\x1f\\xfb\\x21\\xfc\\x7f\\x7e\\x5e\\x78\\x79\\x68\\x88\\x19\\x7f\\x06\\x85\\xbd\\x0a\\x7a\\x9b\\xa3\\x1a\\x91\\x8c\\x92\\x8d\\x92\\x1e\"\n\"\\xcf\\xf7\\x81\\x05\\xa0\\xbd\\xad\\x93\\xb3\\x1b\\xbc\\xa6\\x78\\x67\\x7a\\x89\\x83\\x7d\\x58\\x1f\\x65\\xfb\\x16\\xc3\\x0a\\x7f\\x06\\x84\\xbd\\x0a\\x7b\\x9b\"\n\"\\xa3\\x1a\\x94\\x8c\\x8f\\x8c\\x92\\x1e\\xb7\\xf7\\x2d\\x05\\x93\\xa5\\x8e\\x9c\\x9c\\x1a\\xcf\\x56\\xb1\\x2b\\x53\\x5e\\x82\\x72\\x45\\x1e\\x0e\\x2a\\xf8\\x70\"\n\"\\xf7\\x22\\x15\\x4c\\x5f\\x79\\x77\\x5a\\x0a\\xfb\\x9c\\x7e\\x1d\\xea\\xf8\\x46\\xd7\\x15\\x83\\x61\\x7d\\x80\\x58\\x88\\x08\\x71\\x06\\x65\\xfb\\x2f\\x05\\xa8\"\n\"\\x06\\xa2\\xd9\\xc3\\xbc\\xd3\\x93\\x08\\xf7\\x3d\\x06\\x90\\x9f\\x05\\x6b\\x06\\x68\\x78\\x98\\xa3\\x93\\x8e\\x9a\\x8f\\x9b\\x1f\\xf7\\x14\\xf8\\x72\\x97\\xb8\"\n\"\\x9d\\x9d\\xae\\x8e\\x19\\x97\\x06\\x68\\x0a\\xc1\\x64\\xeb\\xc2\\xb3\\x93\\xa5\\xd4\\x1e\\x0e\\xfb\\x2e\\xf8\\x5e\\xf7\\x12\\x15\\x5e\\x77\\x79\\x71\\x7f\\x1b\"\n\"\\x87\\x88\\x8f\\x90\\x90\\x8d\\x96\\x8e\\x97\\x1f\\xe7\\xf7\\xf4\\x05\\xfb\\x0f\\x06\\x7d\\x5f\\x77\\x53\\x7f\\x73\\x71\\x64\\x19\\x5d\\x6d\\x7e\\x7f\\x7a\\x1b\"\n\"\\x83\\x86\\x91\\x96\\x92\\x8d\\x96\\x8d\\x95\\x1f\\xbe\\xf7\\x52\\xfb\\x49\\x48\\x1d\\x76\\x83\\x8a\\x84\\x88\\x81\\x1f\\x74\\x3a\\x05\\x86\\x7a\\x87\\x6d\\x7b\"\n\"\\x1a\\x66\\xa7\\x6f\\xb0\\xb9\\xab\\xa5\\xf1\\xd9\\x1e\\x5b\\xfb\\x4e\\x05\\x88\\x81\\x8a\\x80\\x7e\\x1a\\x87\\x8b\\x86\\x8c\\x83\\x1e\\x74\\x69\\x05\\x78\\x6b\"\n\"\\x85\\x7b\\x76\\x1a\\x80\\x8d\\x83\\x90\\x7e\\xd4\\x1d\\xaa\\xb9\\x0a\\x98\\x87\\x95\\x80\\x9e\\x1e\\x80\\x9d\\x87\\x94\\x93\\x1a\\x90\\x8c\\x90\\x8e\\x92\\x1e\"\n\"\\x80\\x92\\x9b\\x84\\xa0\\x1b\\xc4\\xb6\\xb0\\xe6\\xba\\x1f\\x0e\\xd0\\xc9\\xf7\\xba\\x15\\x84\\x67\\x89\\x78\\x77\\x1a\\x6e\\x90\\x6d\\x93\\x70\\x1e\\x29\\xaa\"\n\"\\xd7\\x56\\xf7\\x01\\x1b\\xf7\\x83\\xf7\\x5b\\xf7\\x5e\\xf7\\x86\\xf7\\x27\\x20\\xf2\\xfb\\x2d\\x3b\\x3a\\x6d\\x53\\x47\\x1f\\x5c\\x66\\x70\\x66\\x5d\\x38\\xf7\"\n\"\\x04\\x81\\x18\\xad\\xd3\\xa8\\xbd\\xa4\\xa6\\x08\\xb8\\xb4\\xbb\\xa3\\xbb\\x1b\\xa5\\xa5\\x82\\x7b\\x9e\\x1f\\xb1\\x6b\\x9c\\x60\\x47\\x1a\\x50\\x81\\x49\\x7a\"\n\"\\x55\\x1e\\x7c\\x61\\x15\\x7b\\x5b\\x70\\x57\\x6c\\x60\\x08\\x4d\\x5f\\x57\\x6d\\x4a\\x1b\\x46\\x6c\\xb8\\xed\\xa4\\x8e\\xac\\x90\\xad\\x1f\\x0e\\x99\\xf9\\x02\"\n\"\\xa4\\x15\\x49\\x90\\x87\\x8f\\x7e\\xd7\\x28\\xf8\\xca\\x18\\x73\\x06\\xfc\\x01\\xfc\\xda\\x6b\\x5a\\x7c\\x7f\\x68\\x83\\x19\\x72\\xf7\\x56\\xa4\\x07\\x5d\\x78\"\n\"\\x95\\xa4\\x98\\x8f\\x99\\x96\\x9d\\x1f\\xc5\\xf0\\x05\\xf7\\x69\\x06\\x95\\x41\\x90\\x62\\x83\\x1a\\x61\\x7d\\x80\\x4b\\x86\\x1e\\x72\\xf7\\xc1\\x07\\xfc\\x41\"\n\"\\xf7\\x8a\\x15\\xf7\\x25\\xf7\\x84\\xb2\\xfb\\x84\\x05\\xf7\\x56\\xf9\\x14\\x15\\x49\\x6b\\x6a\\x74\\x4a\\x1b\\x4b\\x6a\\xa8\\xc7\\x86\\x1f\\x61\\x06\\xfb\\x05\"\n\"\\x8a\\xb4\\x5c\\xeb\\x1b\\xeb\\xca\\xc4\\xf2\\x9c\\x1f\\x0e\\xfb\\x2e\\xf8\\x63\\xf7\\x12\\x15\\x54\\x63\\x7c\\x7c\\x7c\\x1b\\x83\\x87\\x90\\x95\\xa5\\x94\\xb6\"\n\"\\xa2\\xd9\\x1f\\xd0\\xf7\\x7d\\xfb\\x02\\x84\\x7a\\x51\\x05\\xbd\\x82\\x75\\xa0\\x60\\x1b\\xfb\\x0d\\xfb\\x27\\xfb\\x51\\xfb\\x2f\\x40\\xb6\\x58\\xcb\\xc8\\xb8\"\n\"\\xaf\\xea\\xc3\\x1f\\x81\\x64\\x88\\x7e\\x7d\\x1a\\x66\\xa8\\x6e\\xb0\\xba\\xb9\\xb2\\xe1\\xc3\\x1e\\xfb\\x51\\xf7\\xc4\\x15\\xa1\\x89\\x9a\\x79\\x70\\x1a\\x50\"\n\"\\x6b\\xfb\\x02\\x65\\x47\\x1e\\x5b\\x71\\x6e\\x71\\x6f\\x1b\\x72\\x78\\xa2\\xaa\\xbf\\xaa\\xed\\xb4\\xd4\\x1f\\xa8\\xbf\\xac\\xaa\\xa5\\x89\\x08\\xf7\\x16\\xf7\"\n\"\\x8c\\x15\\x4a\\x6c\\x68\\x73\\x4b\\x1b\\x4b\\x6b\\xa7\\xc8\\x85\\x1f\\x61\\x06\\x8d\\x48\\x8b\\x8b\\x98\\x6f\\x08\\x60\\x9f\\xb3\\x75\\xc9\\x1b\\xea\\xca\\xc4\"\n\"\\xf2\\x9c\\x1f\\x0e\\xd0\\xf8\\x5c\\xf9\\x3d\\x15\\x42\\x41\\x71\\x5a\\x47\\x1f\\xfb\\x0d\\x33\\x35\\xfb\\x35\\xfb\\x1d\\x1a\\xfb\\x23\\xea\\x2c\\xf7\\x22\\xd9\"\n\"\\xd7\\xa5\\xbc\\xce\\x1e\\xf7\\x10\\xe6\\xdd\\xf7\\x32\\xf7\\x25\\x1a\\xf7\\x18\\x24\\xed\\xfb\\x1f\\x1e\\xd1\\xfb\\xdf\\x15\\xfb\\xc9\\x06\\xf7\\x54\\xc3\\xde\"\n\"\\xf4\\xea\\x1b\\xca\\xb3\\x5d\\x42\\x58\\x89\\x7d\\x71\\xfb\\x02\\x1f\\x7b\\x52\\x15\\xfb\\x4a\\x51\\x3a\\x29\\x30\\x1b\\x4c\\x64\\xb9\\xd5\\xb8\\x92\\xbb\\x9c\"\n\"\\xce\\x1f\\x0e\\xa1\\x1d\\xfb\\x1e\\xfb\\x63\\x15\\xf7\\x07\\xaa\\xb9\\xca\\xbf\\x1b\\xa8\\x9d\\x75\\x67\\x69\\x86\\x69\\x80\\x57\\x1f\\x80\\x60\\x15\\xfb\\x17\"\n\"\\x67\\x60\\x4a\\x58\\x1b\\x6d\\x78\\xa2\\xb2\\xb0\\x92\\xb9\\x97\\xbe\\x1f\\x0e\\x99\\x70\\x1d\\x8d\\xfa\\x0a\\x15\\x49\\x6c\\x69\\x74\\x4a\\x1b\\x4c\\x6b\\xa8\"\n\"\\xc7\\xc8\\x1d\\xfb\\x65\\x7b\\x1d\\xf7\\xba\\xf8\\x5f\\x15\\x4a\\x6d\\x68\\x73\\x4b\\x1b\\x4b\\x6b\\xa7\\xc8\\xc8\\x1d\\xf9\\x6e\\xf9\\x82\\x15\\xd0\\xfc\\x85\"\n\"\\x46\\x07\\x0e\\xf7\\xef\\xad\\x89\\x15\\x92\\x06\\xd5\\x06\\xf7\\x44\\xcd\\x97\\xb7\\xcc\\x1f\\xf1\\xd0\\xd5\\xf7\\x36\\xf7\\x2f\\x1a\\xea\\x6d\\xde\\x5b\\xb1\"\n\"\\x1e\\xa7\\x67\\x5a\\x98\\x4a\\x1b\\xfb\\x2b\\x20\\x56\\x2e\\x69\\x1f\\x7d\\x66\\x87\\x73\\x8a\\x49\\xd9\\xb1\\x18\\x94\\x07\\x8a\\xea\\xb0\\xb7\\xe6\\x99\\x3d\"\n\"\\xfc\\x3e\\x18\\x7a\\x40\\x72\\x5c\\x6d\\x81\\x74\\x8c\\x18\\xe5\\x16\\x8f\\x8e\\xc2\\xb9\\x9e\\xb6\\xa1\\xf7\\x13\\x19\\xc7\\xf7\\xec\\x05\\x92\\x06\\x8e\\x06\"\n\"\\xb4\\x96\\x8a\\x87\\x98\\x1f\\xc4\\x76\\xa9\\x49\\x26\\x1a\\xfb\\x66\\x2c\\xfb\\x29\\xfb\\x1e\\x84\\x1e\\xf7\\x8d\\xfb\\x99\\x15\\xda\\x06\\xb1\\xf7\\x62\\x05\"\n\"\\x7b\\xb2\\x8e\\x8a\\xa1\\x1b\\xf7\\x14\\xf7\\x01\\xf7\\x39\\xf7\\x53\\xf7\\x00\\x5e\\xc3\\x36\\x57\\x5e\\x75\\x62\\x6a\\x1f\\x66\\x5d\\x76\\x50\\x73\\xfb\\x18\"\n\"\\x08\\xea\\xe6\\x15\\xe6\\x9b\\xb0\\xc0\\xb9\\x1b\\xb4\\xa1\\x61\\x3c\\xfb\\x2a\\x52\\xfb\\x0b\\x43\\x6e\\x75\\x96\\xa5\\x77\\x1f\\x0e\\x61\\xf7\\x97\\x16\\x7c\"\n\"\\xf7\\x2f\\x05\\x49\\xb7\\x62\\xe4\\xea\\x1a\\xc0\\x98\\xc6\\xa2\\xbc\\x1e\\xc9\\xa9\\xbc\\xaf\\xc3\\x1b\\xc3\\xbc\\x67\\x4d\\xa9\\x1f\\xa2\\x5a\\x98\\x50\\x56\"\n\"\\x1a\\x2c\\x61\\x32\\x4a\\x5f\\x1e\\x7c\\xfb\\x2f\\x05\\xf7\\x88\\xf7\\x2d\\x77\\x06\\x5e\\x84\\x7b\\x79\\x68\\x1b\\xfb\\x0d\\x06\\x8d\\xb1\\x05\\xf6\\xb8\\xc9\"\n\"\\xe8\\xf7\\x08\\x1a\\xbb\\x7f\\xbe\\x74\\xba\\x1e\\xef\\x5b\\x36\\xc5\\x2a\\x1b\\x2a\\x36\\x51\\x27\\x5b\\x1f\\x74\\x5c\\x7f\\x58\\x5b\\x1a\\xfb\\x08\\xc9\\x2e\"\n\"\\xf6\\x5e\\x1e\\x8e\\x65\\x05\\xfb\\x0e\\x06\\x68\\x7b\\x9d\\xb8\\x84\\x1f\\x77\\xfb\\x2d\\x06\\x0e\\xfc\\x7a\\xcf\\x1d\\xfc\\x27\\xf7\\x12\\xf8\\x29\\x2b\\x0a\"\n\"\\xf7\\xef\\xf8\\xa9\\xf8\\x95\\x15\\x49\\x06\\xfb\\x74\\xfc\\x95\\x05\\xdb\\x06\\xf7\\x45\\xf8\\x2d\\xf7\\x45\\xfc\\x2d\\x05\\xdb\\x06\\x0e\\xf7\\xef\\xf8\\xa9\"\n\"\\x16\\xf7\\x74\\xf8\\x95\\x05\\x3b\\x06\\xfb\\x45\\xfc\\x2d\\xfb\\x45\\xf8\\x2d\\x05\\x3b\\x06\\xf7\\x74\\xfc\\x95\\x05\\x0e\\xf7\\xef\\xf8\\x8c\\xf9\\x60\\x15\"\n\"\\xfb\\x60\\xfb\\x34\\xfb\\x32\\xfb\\x5f\\xfb\\x5b\\xf7\\x34\\xfb\\x33\\xf7\\x5d\\xf7\\x5b\\xf7\\x34\\xf7\\x34\\xf7\\x5c\\xf7\\x59\\xfb\\x34\\xf7\\x36\\xfb\\x58\"\n\"\\x1f\\xa4\\x52\\x15\\xf7\\x23\\x7e\\xf7\\x06\\xfb\\x06\\x99\\xfb\\x25\\x08\\xfb\\xa3\\x06\\xf7\\xa4\\x52\\x15\\x82\\xfb\\x22\\xfb\\x0d\\xfb\\x0f\\xfb\\x22\\x80\"\n\"\\x08\\xf7\\xa8\\x07\\x53\\xfb\\xa8\\x15\\xfb\\x27\\x99\\xfb\\x05\\xf7\\x05\\x7d\\xf7\\x29\\x08\\xf7\\xa6\\x06\\xfb\\xa6\\xc4\\x15\\x99\\xf7\\x24\\xf7\\x07\\xf7\"\n\"\\x06\\xf7\\x25\\x99\\x08\\xfb\\xa4\\x07\\x0e\\xd0\\xf7\\x11\\xf7\\x10\\x15\\xf8\\x67\\xf8\\x67\\xfc\\x67\\x06\\xb3\\xfc\\x3f\\x15\\xf8\\x17\\xf8\\x17\\xfc\\x17\"\n\"\\x07\\x0e\\xf7\\xef\\xf9\\x64\\xf8\\xc3\\x15\\x4f\\xfb\\x8d\\x06\\x26\\x86\\x62\\x7c\\x6e\\x1e\\x5b\\x72\\x53\\x6b\\x50\\x1b\\x57\\x58\\xa4\\xb3\\x6f\\x1f\\x74\"\n\"\\xac\\x85\\xb4\\xf7\\x04\\x1a\\xf7\\x8d\\x4f\\xfb\\x8a\\x07\\xfb\\x1d\\x90\\x69\\xa3\\x63\\x1e\\x4a\\xb1\\xd1\\x66\\xde\\x1b\\xd7\\xcb\\xaa\\xc3\\xb4\\x1f\\xac\"\n\"\\xb8\\x91\\xab\\xf7\\x29\\x1a\\x0e\\x4f\\xf8\\x27\\xf8\\x1c\\x15\\xfb\\x69\\x06\\x41\\xf7\\x4d\\x05\\x2d\\x06\\xf7\\x7d\\xfc\\xd5\\x05\\xde\\x06\\xf7\\x7d\\xf8\"\n\"\\xd5\\x05\\x2d\\x06\\x22\\xfb\\x9d\\x15\\x3f\\xfb\\x48\\x40\\xf7\\x48\\x05\\x0e\\x2a\\xf8\\x06\\xf8\\x55\\x15\\x6b\\x0a\\x54\\x85\\x71\\x6e\\x1a\\x62\\xa0\\x78\"\n\"\\xb8\\x97\\x92\\x8c\\x8f\\x9b\\x1e\\x6b\\x60\\x83\\x79\\x70\\x31\\x0a\\xb4\\xb1\\x94\\xa1\\xaa\\xb3\\x1f\\x9d\\xa1\\x92\\x96\\x9b\\xa7\\x76\\x98\\x18\\x55\\x68\"\n\"\\x77\\x77\\x7a\\x1b\\x83\\x85\\x92\\x95\\x97\\x96\\xbb\\x99\\xb8\\x1f\\xd9\\xf7\\xa0\\x05\\x0e\\xfb\\x37\\x3c\\x1d\\x0e\\xfb\\x37\\x3c\\x1d\\xf7\\x67\\xf7\\xee\"\n\"\\x15\\xa4\\x0a\\xf7\\x3a\\x9e\\x0a\\xfb\\x37\\x3c\\x1d\\xf7\\x93\\xf7\\xb7\\x15\\xa8\\x06\\x8f\\x91\\x8f\\x92\\x8f\\x92\\x8f\\x93\\x19\\xb1\\xc7\\x8d\\x8f\\x9e\"\n\"\\x1a\\x9e\\x7a\\x98\\x73\\x7c\\x7c\\x85\\x82\\x83\\x1e\\x83\\x82\\x8b\\x8a\\x89\\x65\\x8f\\x5c\\x18\\x71\\x07\\x3c\\x86\\x15\\x9a\\x0a\\xaa\\x72\\xa5\\x6e\\x1f\"\n\"\\xf7\\x4d\\x16\\x6d\\x73\\x73\\x6c\\x6b\\xa4\\x71\\xa9\\xa8\\xa3\\xa4\\xaa\\xa9\\x72\\xa6\\x6e\\x1f\\x0e\\xfb\\x37\\x3c\\x1d\\xf7\\x85\\xf7\\x6d\\x15\\xbe\\x06\"\n\"\\x8f\\x94\\x9b\\xac\\x05\\xbc\\xe6\\x8f\\x94\\xa5\\x1a\\xa5\\x75\\x9e\\x6b\\x73\\x74\\x80\\x7a\\x82\\x1e\\x82\\x7d\\x8a\\x7c\\x89\\x21\\x89\\x64\\x18\\x0e\\x2a\"\n\"\\x26\\x0a\\xfb\\x26\\xf9\\x0e\\x30\\x0a\\x2a\\xf8\\x7a\\xf9\\x23\\x15\\x6c\\x7c\\x7e\\x80\\x6d\\x1d\\x6b\\x93\\x72\\x1b\\x52\\x5f\\x5e\\x42\\x7d\\x1f\\xb3\\x06\"\n\"\\xab\\x98\\x97\\x96\\xa2\\x1b\\x96\\x99\\x88\\x86\\x98\\x1f\\xc6\\x74\\x05\\x80\\xa6\\x95\\x89\\x9e\\x1b\\xc8\\xad\\xae\\xdf\\xa2\\x1f\\x54\\xfc\\x9e\\x5d\\x0a\"\n\"\\x0e\\x99\\x32\\x1d\\xf8\\x0c\\xdd\\x29\\x0a\\x99\\x32\\x1d\\xf8\\x66\\xdd\\x23\\x1d\\x99\\x32\\x1d\\xf7\\x90\\xf7\\x71\\x15\\x68\\x6e\\x6d\\x67\\x36\\x1d\\x99\"\n\"\\x32\\x1d\\xf8\\x06\\xdd\\x8e\\x0a\\xfb\\x60\\xf7\\xa7\\xf9\\x69\\x15\\x40\\x71\\x64\\x6c\\x6a\\x1a\\x74\\x9e\\x7a\\xc0\\x73\\x1e\\x76\\x7e\\x80\\x83\\x81\\x81\"\n\"\\x08\\x71\\x70\\x79\\x67\\x70\\x1a\\x6a\\x9b\\x72\\xb2\\x71\\x1e\\x68\\x79\\x7b\\x81\\x72\\x74\\x08\\x4d\\x52\\x6a\\x49\\x48\\x1a\\x3b\\xc3\\x58\\xe2\\x9a\\x9f\"\n\"\\x8d\\x8f\\xa2\\x1e\\x8e\\x99\\x98\\x8c\\x93\\x1b\\xa3\\x99\\x7d\\x73\\x68\\x6d\\x6d\\x68\\x7d\\x7c\\x8f\\x92\\x7f\\x1f\\x9c\\x6d\\x83\\x8e\\x79\\x1b\\x64\\x72\"\n\"\\x73\\x66\\x67\\xa6\\x76\\xb7\\xf5\\xf6\\xf2\\xf1\\xbc\\x71\\xa6\\x5d\\x80\\x79\\x89\\x89\\x7a\\x1f\\x89\\x7b\\x7c\\x89\\x82\\x1b\\x58\\x78\\x9d\\xba\\xd1\\xac\"\n\"\\xd1\\xc6\\xc2\\x1f\\x71\\xbe\\xa4\\x83\\xaf\\x1b\\xc6\\xae\\xa0\\xaf\\xaa\\x73\\x9d\\x62\\x61\\x6a\\x82\\x73\\x56\\x1f\\x82\\xa5\\x89\\x98\\x9c\\x1a\\xb2\\x95\"\n\"\\xae\\xa1\\xb5\\x1e\\x76\\xbf\\xa8\\x85\\xb4\\x1b\\xd2\\xba\\xa5\\xb2\\xaa\\x70\\x9d\\x5c\\x50\\x62\\x7e\\x61\\x45\\x1f\\x74\\x9a\\x80\\x9d\\x9f\\x1a\\xa2\\x9e\"\n\"\\x9f\\xb3\\x9d\\x1e\\x0e\\xfb\\x65\\x31\\x1d\\xf7\\xe8\\xd9\\x23\\x1d\\xfb\\x65\\x31\\x1d\\xf7\\x7c\\xd9\\x37\\x1d\\xfb\\x9c\\x34\\x1d\\xf7\\x34\\xce\\x15\\x2b\"\n\"\\x1d\\x38\\x1d\\xfb\\x9c\\x34\\x1d\\xf7\\x5b\\xf7\\x62\\x2a\\x1d\\xfb\\x68\\xf7\\xb0\\xf9\\x68\\x15\\x41\\x6f\\x5d\\x66\\x6b\\x1a\\x71\\xa6\\x6f\\xba\\x74\\x1e\"\n\"\\xfb\\x09\\x20\\x3e\\xfb\\x3a\\xfb\\x27\\x1a\\x2d\\xb3\\x61\\xe2\\x9b\\x97\\x8c\\x8d\\x93\\x1e\\x91\\xa8\\x90\\x8c\\x98\\x1b\\xa6\\x99\\x7e\\x72\\x68\\x6d\\x6d\"\n\"\\x68\\x7d\\x7c\\x8f\\x92\\x7f\\x1f\\x9c\\x6d\\x83\\x8e\\x79\\x1b\\x64\\x72\\x73\\x66\\x67\\xa6\\x76\\xb7\\xf5\\xf6\\xf2\\xf1\\xbc\\x71\\xa6\\x5c\\x7f\\x7a\\x89\"\n\"\\x89\\x7c\\x1f\\x89\\x7d\\x7e\\x89\\x85\\x1b\\x6b\\x79\\x9e\\xac\\xc4\\x9e\\xf7\\x03\\x9f\\xcd\\x1f\\x9e\\xc6\\xa4\\xc1\\xac\\xc1\\x08\\x7f\\xac\\x99\\x88\\xb1\"\n\"\\x1b\\xe2\\xc6\\xaa\\xb7\\xa9\\x73\\x9e\\x65\\x54\\x55\\x74\\x54\\x45\\x1f\\x74\\xa1\\x82\\x9c\\xa2\\x1a\\xa8\\x98\\x9a\\xbc\\xa8\\x1e\\x0e\\x79\\x9d\\xf8\\x55\"\n\"\\x98\\xf7\\x63\\x9b\\x06\\xac\\x0a\\xf7\\x0a\\x0b\\xa2\\x91\\x8f\\x8f\\x8f\\x8f\\x8f\\x92\\x92\\x8f\\x90\\x90\\x0c\\x0c\\xf8\\x88\\x14\\xf9\\x21\\x15\\xaf\\x13\"\n\"\\x00\\xa8\\x02\\x00\\x01\\x00\\x0a\\x00\\x7d\\x00\\xa3\\x00\\xc3\\x00\\xca\\x00\\xd5\\x00\\xe1\\x00\\xe6\\x00\\xeb\\x00\\xee\\x00\\xfb\\x00\\xff\\x01\\x6f\\x01\"\n\"\\xc7\\x02\\x06\\x02\\x2a\\x02\\x51\\x02\\x57\\x02\\x5f\\x02\\x64\\x02\\x6c\\x02\\x81\\x02\\xe4\\x03\\x29\\x03\\x38\\x03\\x44\\x03\\x51\\x03\\x5a\\x03\\x61\\x03\"\n\"\\x68\\x03\\x6e\\x04\\x2b\\x04\\x56\\x04\\x5b\\x04\\x6e\\x04\\x7b\\x04\\x9a\\x04\\xa9\\x04\\xb2\\x04\\xc9\\x04\\xd0\\x04\\xd9\\x04\\xe3\\x04\\xee\\x04\\xfb\\x05\"\n\"\\x00\\x05\\x06\\x05\\x11\\x05\\x1a\\x05\\x22\\x05\\x2a\\x05\\x2f\\x05\\x37\\x05\\x3f\\x05\\x47\\x05\\x52\\x05\\xd9\\x06\\x03\\x06\\x3a\\x06\\xa3\\x06\\xcd\\x06\"\n\"\\xd5\\x07\\x48\\x07\\xb8\\x08\\x08\\x08\\x73\\x08\\xdd\\x08\\xf8\\x09\\x20\\x09\\x34\\x09\\x4e\\x09\\xa9\\x09\\xde\\x0a\\x16\\x0a\\x66\\x0a\\xb4\\x0a\\xce\\x0b\"\n\"\\x16\\x0b\\x5c\\x0b\\x89\\x0b\\x91\\x0b\\xa9\\x0b\\xb2\\x0b\\xea\\x0c\\x29\\x0c\\x2e\\x0c\\x39\\x0c\\x4a\\x0c\\x7c\\x0c\\xa1\\x0c\\xad\\x0c\\xb7\\x0c\\xe1\\x0d\"\n\"\\x0b\\x0d\\x23\\x0d\\x28\\x0d\\x4d\\x0d\\x67\\x0d\\x82\\x0d\\xa4\\x0d\\xc5\\x0d\\xe4\\x0e\\x03\\x0e\\x21\\x0e\\x3e\\x0e\\x5b\\x0e\\x78\\x0e\\x95\\x0e\\x98\\x0e\"\n\"\\x9f\\x0e\\xaa\\x0e\\xb5\\x0e\\xb9\\x0e\\xd4\\x0e\\xd8\\x0e\\xe3\\x0e\\xfd\\x0f\\x15\\x0f\\x29\\x0f\\x42\\x0f\\x4a\\x0f\\x63\\x0f\\x70\\x0f\\x7d\\x0f\\x93\\x0f\"\n\"\\xa8\\x0f\\xac\\x0f\\xb5\\x0f\\xc9\\x0f\\xcd\\x0f\\xe0\\x0f\\xf2\\x0f\\xfc\\x10\\x05\\x10\\x10\\x10\\x21\\x10\\x32\\x10\\x41\\x10\\x4b\\x10\\x55\\x10\\x61\\x10\"\n\"\\x71\\x10\\x79\\x10\\x89\\x10\\x91\\x10\\xa0\\x10\\xa5\\x10\\xb4\\x10\\xc1\\x10\\xc5\\x10\\xce\\x10\\xd9\\x10\\xe6\\x10\\xf3\\x11\\x00\\x11\\x0d\\x11\\x1a\\x11\"\n\"\\x25\\x11\\x31\\x11\\x35\\x11\\x41\\x11\\x4d\\x11\\x59\\x11\\x61\\x11\\x69\\x11\\x74\\x11\\x7f\\x11\\x8a\\xed\\x1d\\xe3\\xfb\\x42\\x05\\xdd\\x06\\x0e\\xf9\\x7c\"\n\"\\xf9\\x31\\x15\\xfb\\x64\\x72\\x06\\xc4\\x86\\xa2\\x7b\\x67\\x1a\\x7a\\x84\\x67\\x7f\\x60\\x1e\\x51\\xfb\\x65\\x70\\x29\\x75\\x59\\x6d\\x67\\x19\\x63\\x69\\x5f\"\n\"\\x77\\x54\\x1b\\x3f\\x5d\\xb1\\xca\\xa7\\x8d\\x95\\xa5\\xea\\x1f\\xdd\\xf7\\xc0\\x9c\\xc4\\x9a\\x97\\xc9\\x8e\\x19\\xa4\\xfb\\xcb\\x72\\x07\\xd0\\x81\\x8f\\x89\"\n\"\\x70\\x1a\\x7f\\x85\\x6c\\x82\\x6a\\x1e\\x54\\xfb\\x62\\x05\\x74\\x39\\x80\\x4f\\x6a\\x1a\\x29\\xe7\\x47\\xf7\\x17\\xe0\\xce\\xa6\\xc0\\xb8\\x1e\\xad\\xb2\\xa2\"\n\"\\xc0\\xab\\xf7\\x01\\xcd\\xf7\\x78\\x18\\xb3\\xf7\\x18\\x92\\x95\\xc2\\x96\\x08\\x0b\\x78\\x0a\\xe2\\xd8\\xc0\\xb2\\xee\\xc7\\x1e\\xfb\\x5a\\xe4\\x15\\xf7\\x1f\"\n\"\\xaf\\xb9\\xd7\\xbb\\x1b\\x9e\\x94\\x80\\x74\\x5f\\x7a\\x60\\x6b\\x6a\\x1f\\x70\\x6e\\x72\\x7d\\x52\\x79\\x08\\x0b\\xa1\\x1d\\x82\\x6e\\x15\\xa8\\xf4\\x1d\\x4d\"\n\"\\x6e\\x6d\\x6e\\x68\\x1b\\x6d\\x78\\xa2\\xb2\\xda\\xb0\\xf7\\x25\\xae\\xc9\\x1f\\xb9\\xa5\\xa8\\xa2\\xab\\x1b\\x0b\\x15\\x68\\x6e\\x6d\\x67\\x36\\x1d\\x15\\xfb\"\n\"\\xd9\\x06\\x7a\\x45\\x05\\xf7\\xda\\x06\\x0e\\xf8\\x6b\\xf7\\x19\\x63\\x0a\\x54\\x85\\x71\\xb7\\x1d\\x0b\\xf7\\x9c\\x84\\x1d\\x0b\\x60\\x6b\\xb0\\x0a\\x0b\\x7f\"\n\"\\x1d\\x0e\\x06\\xfb\\x34\\xfb\\x42\\x05\\xc4\\x06\\xf7\\x17\\xea\\x05\\x0e\\x15\\x28\\x0a\\x0e\\xfa\\x40\\xf9\\x31\\x15\\xfb\\x4f\\x72\\x06\\xc3\\x87\\x92\\x86\"\n\"\\x67\\x1a\\x7f\\x89\\x83\\x7e\\x71\\x1e\\xfb\\x30\\xfb\\xdb\\x6a\\xf7\\xbb\\x05\\x85\\xc0\\x8b\\x8b\\x97\\x1a\\xb6\\x95\\x95\\xc0\\x90\\x1e\\xa4\\xfb\\xa1\\x73\"\n\"\\x07\\xc7\\x83\\x95\\x7d\\x8c\\x35\\xfb\\x2a\\xfb\\xcb\\x18\\x64\\xf7\\xf1\\x05\\x8a\\x90\\x8b\\x92\\x8f\\x1a\\xaf\\x98\\x96\\xbb\\x91\\x1e\\xa4\\xfb\\xa9\\x73\"\n\"\\x07\\xcb\\x80\\x8e\\x89\\x95\\x44\\xd9\\xfc\\xd7\\x18\\xa8\\x06\\xf7\\x7d\\xf8\\x7d\\xc6\\xfc\\x7d\\x05\\xa8\\x06\\xf7\\xb2\\xf8\\xe2\\xa7\\xc2\\x99\\x97\\xb5\"\n\"\\x91\\x19\\x0b\\xf7\\x7e\\xf7\\xcd\\x15\\x4f\\xfb\\x6c\\x79\\x52\\x7d\\x81\\x46\\x86\\x19\\x72\\xf7\\xd6\\xa4\\x07\\x4a\\x8e\\x7f\\x92\\xb0\\x1a\\x98\\x8c\\x92\"\n\"\\x92\\xa4\\x1e\\xbf\\xf7\\x53\\xf7\\x52\\xf7\\x9f\\xad\\xb9\\x9e\\x9a\\xb1\\x93\\x19\\xa4\\xfb\\x64\\x72\\x07\\xc0\\x89\\x99\\x82\\x68\\x1a\\x79\\x86\\x7f\\x76\"\n\"\\x6d\\x1e\\xfb\\x15\\xfb\\x4e\\x79\\xc2\\x81\\xa9\\x7b\\xbe\\x19\\x74\\xcc\\x81\\xaf\\x9d\\x1a\\xa7\\xdf\\x1d\\x88\\x9e\\x56\\x08\\x0b\\xf7\\xc6\\xf9\\x31\\x15\"\n\"\\xfb\\x57\\x72\\x06\\xc2\\x86\\x94\\x85\\x9e\\x5f\\xfb\\x0c\\xfc\\x2f\\x18\\x64\\xfb\\x17\\x84\\x80\\x54\\x80\\x08\\x72\\xf7\\x64\\xa4\\x07\\x50\\x90\\x76\\x9a\"\n\"\\xb2\\x1a\\x9e\\x91\\xac\\x97\\xb5\\x1e\\xee\\xf7\\xf8\\xf7\\x95\\xfc\\xb9\\x05\\xa7\\x06\\xf7\\x23\\xf8\\x8e\\x8a\\x0a\\x05\\x0b\\x86\\x0a\\xf7\\x15\\xf8\\x72\"\n\"\\x9b\\xc2\\x9e\\x98\\xcd\\x8f\\x19\\xa4\\xfb\\xd1\\x72\\x07\\x9c\\x0a\\xfb\\x0f\\xfc\\x55\\x7b\\x57\\x7c\\x7d\\x5a\\x85\\x19\\x72\\xf8\\xbd\\x07\\x0b\\x15\\x51\"\n\"\\x5a\\x5b\\x52\\x4f\\xba\\x5b\\xc6\\xc6\\xbb\\xbb\\xc6\\xc5\\x5b\\xbb\\x51\\x1f\\x89\\x5b\\x15\\xac\\xa6\\x70\\x6a\\x6c\\x70\\x71\\x6a\\x6c\\x71\\xa5\\xab\\xab\"\n\"\\xa5\\xa6\\xaa\\x1f\\x0e\\x77\\x0a\\x62\\x75\\xa1\\x0b\\x9d\\xae\\x8e\\x19\\x97\\x21\\x1d\\x0b\\x19\\x85\\x75\\x05\\x0b\\x7f\\x5e\\x79\\x79\\x69\\x88\\x19\\x0b\"\n\"\\xf9\\x56\\xf7\\xde\\x78\\x1d\\x60\\x68\\x91\\x5d\\x1b\\x3e\\x99\\x1d\\xd1\\x92\\x93\\xc0\\x8f\\x19\\x0b\\x8d\\x79\\x89\\x0a\\x5e\\xcd\\xfb\\x0f\\xe8\\x1f\\xab\"\n\"\\x0a\\xcb\\xdb\\xb1\\x5a\\xfb\\x09\\x99\\x1e\\xa6\\x87\\xb3\\xf7\\x5d\\x05\\x6d\\x06\\x79\\x82\\x7d\\x83\\x76\\x1b\\x80\\x7c\\x8e\\x93\\x72\\x1f\\x99\\x62\\x6f\"\n\"\\x90\\x6e\\x1b\\xfb\\x06\\x34\\x37\\xfb\\x02\\x71\\x90\\x74\\x93\\x7a\\x1f\\xa1\\x61\\xb4\\x5f\\xc3\\x5f\\x08\\xda\\x4f\\xad\\x5d\\x5c\\x1a\\x75\\x84\\x72\\x7f\"\n\"\\x76\\x1e\\x64\\x74\\x69\\x78\\x59\\x1b\\x57\\x5e\\xa3\\xb6\\x71\\x1f\\x78\\xaa\\x83\\xa9\\x87\\xc7\\x6e\\x8d\\x18\\x0b\\xf7\\x7b\\xf7\\x0f\\x15\\x5c\\x6a\\x78\"\n\"\\x78\\x6a\\x1d\\x8c\\x8f\\x8f\\x98\\x1f\\xf3\\xf7\\xfe\\xfb\\x50\\x70\\x85\\x73\\x05\\x8c\\x92\\x92\\x8c\\x90\\x1b\\x9b\\x9a\\x7d\\x7d\\x83\\x87\\x75\\x87\\x7d\"\n\"\\x1f\\x4d\\xfb\\x67\\x05\\x85\\x77\\x88\\x79\\x7b\\x1a\\x5c\\xa5\\x6f\\xb7\\xa6\\xa0\\x96\\xa8\\xac\\x1e\\xa1\\x9f\\x96\\x9a\\xa4\\xb4\\x08\\x0b\\x15\\x49\\x6b\"\n\"\\x68\\xc2\\x0a\\x8d\\x47\\x8b\\x8b\\x98\\x6f\\x08\\x5a\\x1d\\x15\\xf4\\xb9\\xce\\x98\\x0a\\x68\\x68\\x44\\x65\\x1e\\x0e\\x68\\x6f\\x6d\\x67\\x69\\xa9\\x6c\\xac\"\n\"\\xaf\\xa9\\xa8\\xae\\x0b\\xa1\\x05\\xfb\\x73\\x20\\x1d\\x97\\x06\\x0b\\x68\\x88\\x19\\x83\\x20\\x1d\\x0b\\x7b\\x97\\x7b\\xa1\\x7c\\x1f\\x0b\\x98\\x7f\\x05\\x8e\"\n\"\\x97\\x0b\\xf8\\x72\\xf8\\x41\\x15\\xfb\\x03\\x06\\xa3\\x69\\x6d\\x94\\x5d\\x1b\\xfb\\x0f\\x28\\x3a\\x26\\x58\\xa5\\x67\\xc1\\x74\\x1f\\x39\\x5d\\x7d\\x7d\\x66\"\n\"\\x1a\\x6b\\x9d\\x78\\xb7\\x7c\\x1e\\x4d\\x7c\\x77\\x83\\x73\\x78\\x08\\x7b\\x7d\\x80\\x73\\x73\\x1a\\x4a\\xd4\\x62\\xf7\\x07\\xf7\\x21\\xed\\xc9\\xe3\\xc8\\x63\"\n\"\\xac\\xfb\\x01\\xaa\\x1e\\x56\\x9a\\x05\\x6b\\x94\\x78\\x99\\x9a\\x1a\\x9b\\x9a\\x9f\\x98\\x90\\x92\\x8a\\x88\\x93\\x1e\\x88\\x96\\x93\\x8a\\x97\\x1b\\xb7\\xb8\"\n\"\\x97\\xa1\\xb1\\x1f\\xc5\\xac\\xaa\\xbe\\xc7\\x1a\\x9b\\x89\\x95\\x87\\x9b\\x1e\\xce\\x06\\xfb\\xff\\xfc\\x0f\\x15\\x97\\x8a\\xd7\\x71\\xa1\\x81\\x08\\xa7\\x7d\"\n\"\\x98\\x7a\\x71\\x1a\\x5f\\x5f\\x72\\x3f\\x4a\\x5d\\xab\\xb9\\x9f\\x94\\x9b\\xa0\\x9f\\x1e\\x97\\x97\\xaa\\x9d\\x92\\x8a\\x08\\xf7\\x20\\xf8\\x49\\x15\\xa5\\x9e\"\n\"\\x73\\x68\\x69\\x7f\\x59\\x7a\\x67\\x1f\\x5d\\x75\\x72\\x75\\x6c\\x1b\\x70\\x7c\\xa0\\xb1\\xb3\\x9c\\xc8\\xa0\\xb1\\x1f\\xac\\x9e\\xa0\\x9b\\xa5\\x1b\\x0b\\xc0\"\n\"\\x0a\\x6b\\xfb\\x0b\\x45\\xfb\\x82\\x1e\\xf7\\x0d\\x06\\xba\\xf7\\x26\\x9c\\xa8\\x0a\\x92\\x1f\\x7a\\x99\\x98\\x83\\x9c\\x1b\\xac\\xa4\\xaa\\xb5\\xb3\\x75\\xa5\"\n\"\\x68\\x58\\x62\\x59\\xfb\\x33\\x3c\\xba\\x0a\\x0b\\xf7\\x6c\\x6f\\x0a\\x0b\\xa4\\x1d\\xf7\\xd7\\x21\\x1d\\x5e\\x06\\x71\\x7a\\x9c\\xa4\\x92\\x8c\\x90\\x8c\\x92\"\n\"\\x1f\\x0b\\xf9\\x1e\\xf9\\x31\\x15\\x8b\\x0a\\xf7\\xdf\\xa5\\x1d\\x05\\x0b\\x15\\xf7\\x08\\xbe\\xd6\\xe1\\xdc\\x1a\\xc6\\x69\\xb2\\x58\\x62\\x6d\\x6c\\x61\\x70\"\n\"\\x95\\x7b\\xa9\\x77\\x1e\\xa2\\x7c\\x92\\x81\\x7d\\x1a\\x67\\x64\\x0b\\x52\\x0a\\x72\\x84\\x8a\\x86\\x8a\\x84\\x1f\\x3a\\x1d\\x82\\x20\\x1d\\x0b\\x15\\xb1\\x9e\"\n\"\\x88\\x82\\x9b\\x94\\x0a\\x0b\\x32\\x0a\\xfb\\xa3\\x06\\x85\\x75\\x05\\xa1\\x06\\xa5\\x8a\\x9c\\x7b\\x71\\x1a\\x86\\x8a\\x84\\x89\\x85\\x1e\\x0b\\x63\\x1d\\xf7\"\n\"\\x17\\xea\\x05\\x0b\\x1e\\x7f\\x20\\x1d\\xf7\\x93\\x4f\\x0a\\x0b\\x06\\xc4\\xf7\\x68\\x4a\\x1d\\xb2\\x28\\x1d\\x0b\\x20\\x1d\\x98\\x06\\xae\\x86\\xa2\\x71\\x9a\"\n\"\\x57\\x0b\\x72\\x85\\x74\\x05\\x96\\x06\\xa0\\x99\\x7c\\x75\\x84\\x8a\\x0b\\x7b\\x7f\\x65\\x4b\\x1d\\x5e\\x7a\\x79\\x3c\\x0a\\x0b\\x06\\x91\\xa1\\x6c\\x89\\x76\"\n\"\\x9f\\x75\\xbe\\x19\\x0b\\xa3\\xb3\\xb7\\x9e\\xaa\\xb6\\xa5\\x1e\\x0e\\x50\\x87\\x50\\x89\\x69\\x8a\\x82\\x0b\\x20\\x1d\\xaa\\x06\\xa5\\x9c\\x7a\\x0b\\xf1\\x1d\"\n\"\\x9d\\x9d\\x0b\\x06\\x71\\x8c\\x7a\\x9b\\xa4\\x1a\\x0b\\x85\\x75\\x05\\xa1\\x06\\xa4\\x8a\\x0b\\x1e\\x6c\\x70\\x73\\x6e\\x53\\x3a\\x0b\\x73\\x49\\x1b\\x4b\\x6b\"\n\"\\xa8\\xc8\\x85\\x1f\\x60\\x0b\\xf8\\x1c\\xf8\\x22\\x15\\xf7\\x6c\\xf7\\x5a\\xb6\\xb2\\x93\\x8e\\xb6\\x91\\x19\\xa4\\xfb\\x67\\x72\\x07\\xbd\\x85\\x91\\x88\\x79\"\n\"\\x1a\\x78\\x77\\x71\\x52\\x56\\x1e\\x3f\\x44\\x74\\x77\\x29\\x37\\xc9\\xf7\\x78\\x18\\x9a\\xbf\\x9f\\x9b\\xc6\\x8f\\x08\\xa4\\xfb\\xca\\x72\\x07\\xae\\x85\\xa0\"\n\"\\x86\\x91\\x87\\x5c\\x1d\\x78\\x84\\x70\\x1e\\xfb\\x0e\\xfc\\x55\\x7b\\x56\\x7c\\x7e\\x5a\\x85\\x19\\x72\\xf7\\xb5\\xa4\\x07\\x57\\x8f\\x7d\\x94\\xac\\x1a\\x91\"\n\"\\x8c\\x91\\x8c\\x90\\x1e\\xcd\\xf7\\x8d\\xf7\\x06\\xfb\\x86\\x05\\x95\\x76\\x8e\\x80\\x80\\x1a\\x7d\\x7f\\x83\\x71\\x89\\x1e\\x87\\x8a\\x80\\x8a\\x7f\\x8a\\x08\"\n\"\\x72\\xf7\\xac\\xa4\\x07\\x65\\x8f\\x7d\\x92\\x80\\xa3\\x08\\x0b\\xf8\\x3f\\xf7\\x17\\x15\\xa3\\x0a\\xf7\\x03\\xf8\\x29\\x4f\\x7d\\x5b\\x84\\x26\\x83\\x19\\x70\"\n\"\\xa0\\x07\\xa5\\x9a\\x81\\x79\\x82\\x86\\x75\\x73\\x34\\x1f\\x79\\x47\\x91\\x1d\\xfb\\x46\\xf7\\xc5\\x93\\x1d\\x0b\\x7e\\x1b\\x83\\x82\\x94\\x92\\x8d\\x8c\\x8f\"\n\"\\x8d\\x91\\xd1\\x1d\\x9e\\x1a\\xba\\x6e\\xa7\\x5c\\x67\\x6e\\x7f\\x6d\\x67\\x56\\x0a\\xf6\\xf8\\x34\\x18\\x3d\\x7c\\x59\\x83\\x3b\\x84\\x08\\x70\\x07\\x8c\\x93\"\n\"\\x94\\x8b\\x90\\x1b\\xa7\\x64\\x1d\\xfb\\x2e\\xfc\\xcb\\x50\\x1d\\x0e\\xf7\\xac\\xf8\\x5e\\x15\\xfb\\x4b\\x4c\\x0a\\x85\\x88\\x81\\x1f\\x30\\xfb\\xf2\\x05\\xf7\"\n\"\\x09\\x06\\xc3\\xf7\\x6b\\x05\\x94\\x06\\xa1\\x8a\\x96\\x79\\x90\\x5a\\x91\\x50\\x8d\\x7d\\x95\\x73\\xcb\\x1d\\x5f\\x74\\x79\\x78\\x77\\x1b\\x7b\\x83\\x98\\xa9\"\n\"\\x86\\x1f\\x7e\\xec\\x79\\xa4\\x50\\x8e\\xb7\\x95\\x9c\\x9e\\xaf\\xd9\\x08\\xa6\\x97\\x95\\x96\\x97\\x1b\\x92\\x8f\\x88\\x82\\x8f\\x1f\\x78\\x94\\x93\\x85\\x9c\"\n\"\\x1b\\xa8\\x9e\\xa2\\xae\\xaf\\x76\\xa0\\x65\\x5f\\x7c\\x7b\\xfb\\x00\\x53\\x1f\\x4c\\x6c\\x6b\\x73\\x57\\x1b\\x0b\\xf7\\x10\\xf8\\x09\\x15\\x25\\x06\\x7f\\x5f\"\n\"\\x05\\xf1\\x06\\x4c\\xfb\\x7c\\x87\\x0a\\x72\\x06\\xe4\\x1d\\xf1\\xfb\\x3e\\x15\\xc8\\xf7\\x77\\x05\\x7c\\x0a\\xc2\\xf7\\x5f\\x05\\xf7\\x0e\\x06\\x97\\xb7\\x05\"\n\"\\x0e\\x63\\x0a\\x53\\x85\\x72\\xb7\\x1d\\x0b\\xf8\\x3c\\xf8\\xc4\\x15\\x66\\x06\\x50\\x23\\x05\\x90\\x79\\x81\\x8c\\x7d\\x1b\\xfb\\x2a\\xfb\\x1f\\xfb\\x32\\xfb\"\n\"\\x3e\\x52\\xa3\\x63\\xc0\\x6d\\x1f\\x43\\xfb\\x12\\x05\\xb3\\x06\\xcb\\xf7\\x06\\x05\\x85\\x9f\\x98\\x89\\x9d\\x1b\\xf7\\x28\\xf7\\x1c\\xf7\\x2f\\xf7\\x3d\\xcb\"\n\"\\x72\\xb4\\x52\\xa7\\x1f\\xfb\\x87\\xfc\\x02\\x15\\x93\\x07\\xd5\\xb0\\xf7\\x20\\xaf\\xcc\\x1e\\xb8\\xa4\\xa8\\xa2\\xab\\x1b\\x98\\x94\\x87\\x81\\x95\\x1f\\x99\"\n\"\\x61\\x15\\x8c\\x89\\x8b\\x8a\\x89\\x1a\\x4f\\x70\\xfb\\x0a\\x6e\\x46\\x1e\\x3f\\x6c\\x6c\\x6a\\x64\\x1b\\x7b\\x80\\x90\\x98\\x81\\x1f\\x0b\\x15\\x60\\x6b\\x74\"\n\"\\x76\\x72\\x6e\\x08\\x57\\x4f\\x6e\\x3f\\x3f\\x1a\\x26\\xbd\\x4b\\xd9\\xba\\xb1\\xa1\\xc1\\xbb\\x1e\\x50\\xa7\\xa0\\x7a\\xb5\\x1b\\xf2\\xea\\xf7\\x35\\xf7\\x41\"\n\"\\xda\\x6e\\xbb\\x5c\\x6c\\x73\\x72\\x6b\\x79\\x92\\x77\\x96\\x7e\\x1f\\xad\\x65\\x8b\\x8b\\x90\\x83\\x08\\x98\\x78\\x91\\x75\\x74\\x1a\\x2b\\x3d\\xfb\\x05\\x4a\"\n\"\\x70\\x78\\x9f\\xbc\\x78\\x1e\\xc6\\xdc\\xa2\\xc0\\xc2\\x1a\\xb4\\x78\\xa6\\x6e\\x5b\\x68\\x50\\x39\\x6c\\x8d\\x73\\x93\\x59\\x1e\\x59\\x63\\x70\\x76\\x72\\x1b\"\n\"\\x71\\x78\\xb0\\xbd\\xe5\\xb9\\xf7\\x21\\xc3\\xe0\\x1f\\x0e\\xf8\\x20\\xf7\\xe4\\x15\\x4c\\xf7\\x71\\x05\\x89\\x95\\x89\\x95\\x94\\xb8\\x1d\\x77\\x41\\xa0\\x1f\"\n\"\\xce\\xfb\\x91\\x55\\xfb\\x61\\x2f\\x1d\\x6b\\x20\\x1d\\xf7\\xc6\\x21\\x1d\\x68\\x06\\x71\\x7a\\x9c\\xa5\\x92\\x8c\\x90\\x8c\\x91\\x1f\\xc2\\xf7\\x60\\xf7\\x68\"\n\"\\xf7\\xad\\xac\\xb5\\xa5\\xa2\\xa2\\x92\\x19\\x22\\x1d\\xfb\\x52\\x20\\x1d\\x9d\\x06\\xa6\\xa2\\x78\\x74\\x7b\\x84\\x78\\x7e\\x7a\\x1f\\x0b\\xf7\\xe6\\xf7\\x2d\"\n\"\\x15\\x46\\x67\\x5f\\x69\\x55\\x1b\\x5e\\x6c\\xad\\xbd\\xaa\\x95\\xa5\\xa3\\xae\\x1f\\x75\\xad\\x9d\\x85\\xa6\\x1b\\xb0\\xa7\\x9e\\xa4\\xa0\\x75\\x9b\\x6e\\x7b\"\n\"\\x79\\x87\\x7f\\x5c\\x1f\\x8a\\x94\\x8b\\x93\\x8f\\x1a\\xd3\\xb5\\xca\\xbb\\x99\\x95\\x81\\x7d\\x8a\\x8b\\x89\\x8a\\x8a\\x1e\\x88\\x7d\\x8b\\x8b\\x88\\x1a\\x72\"\n\"\\xa6\\x73\\xa9\\xa8\\xa1\\xa1\\xa9\\xba\\x5d\\xa8\\x42\\xfb\\x02\\x3b\\x59\\x46\\x69\\x9a\\x72\\xaf\\x71\\x1e\\x3a\\x6e\\x65\\x5f\\x4d\\x1a\\x43\\xc8\\x59\\xe1\"\n\"\\xe8\\xc7\\xb9\\xf3\\xb7\\x1e\\x0b\\xce\\xf7\\xb2\\x15\\xc5\\xa7\\xa2\\xaa\\x9c\\x1b\\x94\\x90\\x84\\x7e\\x81\\x88\\x7c\\x83\\x6d\\x1f\\x3a\\xfb\\xc0\\x05\\xf7\"\n\"\\x0a\\x06\\xba\\xf7\\x4a\\x93\\xa9\\xac\\xcd\\xab\\xbd\\x19\\xa3\\x9a\\x9b\\x98\\x97\\x1b\\x95\\x91\\x84\\x7f\\x80\\x89\\x7e\\x84\\x70\\x1f\\xfb\\x0e\\xfc\\x6d\"\n\"\\x05\\xf7\\x08\\x06\\xf7\\x14\\xf8\\x86\\x05\\x91\\xa0\\x8e\\xa1\\x9c\\x1a\\xb7\\x71\\xa8\\x65\\x6d\\x6f\\x7b\\x66\\x6a\\x1e\\x70\\x6d\\x7a\\x6f\\x6c\\x4c\\x08\"\n\"\\xa3\\xef\\x8b\\x8b\\x9b\\x1a\\xac\\x72\\xa4\\x68\\x50\\x53\\x54\\x25\\x5e\\x1e\\x0b\\x15\\x55\\x68\\x77\\x77\\x7a\\x1b\\x83\\x85\\x92\\x95\\x97\\x96\\xbb\\x99\"\n\"\\xb8\\x1f\\xd9\\xf7\\xa0\\x05\\xfb\\x0a\\x06\\x6b\\x0a\\x0b\\xf7\\xbd\\xf7\\xd5\\x15\\xf7\\x7a\\x06\\x4d\\xfb\\x7d\\x79\\x0a\\x22\\x1d\\xfb\\xa8\\x20\\x1d\\xa5\"\n\"\\x06\\xa6\\x9b\\x7a\\x71\\x83\\x8b\\x87\\x89\\x85\\x1f\\x51\\xfb\\x6d\\x05\\xfb\\x7a\\x4a\\x0a\\x0b\\xe9\\xf9\\x18\\x15\\xe4\\x1d\\xfb\\x0d\\xfc\\x52\\x87\\x0a\"\n\"\\x06\\xf7\\x74\\x46\\x15\\x7c\\x0a\\x0b\\xf7\\x12\\x15\\x5e\\x76\\x79\\x71\\x7f\\x1b\\x87\\x88\\x8f\\x90\\x90\\x8c\\x91\\x90\\x9c\\x1f\\xe7\\xf7\\xf4\\x05\\x82\"\n\"\\x1d\\x0b\\x51\\x9f\\x55\\xaf\\x61\\x1f\\x9c\\x78\\x98\\x81\\xaa\\x79\\x3c\\xfb\\x1c\\x18\\xbb\\x06\\xd1\\xf7\\x0c\\x05\\x81\\xaa\\xa0\\x88\\xaa\\x1b\\xd7\\xd6\"\n\"\\xa5\\xbc\\xce\\x1f\\xf7\\x10\\xe7\\xde\\xf7\\x32\\xf7\\x26\\x1a\\xbe\\x7a\\xc0\\x6d\\xb1\\x1e\\x78\\xa4\\x7b\\x99\\x64\\xa1\\x08\\xfc\\x18\\xfc\\xd7\\x15\\x84\"\n\"\\x9f\\x87\\xa1\\xa1\\x1a\\xf1\\xbc\\xf7\\x43\\xc5\\xf2\\x1e\\xe2\\xbc\\xc2\\xb6\\xc8\\x1b\\xa4\\x9e\\x85\\x7c\\x9e\\x1f\\xa6\\x66\\x15\\x94\\x0b\\x90\\xa1\\x05\"\n\"\\xfb\\xa2\\xb7\\x0a\\x87\\x8a\\x83\\x89\\x85\\x1e\\x4c\\xfb\\x81\\x05\\x76\\x5a\\x6a\\x83\\x63\\x1b\\x5a\\x70\\x9f\\xaf\\x9b\\x8e\\x9b\\x97\\xb6\\x1f\\xad\\xf7\"\n\"\\x16\\x97\\xb8\\x9d\\x47\\x0a\\x63\\xfb\\x2d\\x05\\x84\\x71\\x88\\x7b\\x7b\\x1a\\x46\\x0b\\xf8\\x36\\xf7\\x4c\\x15\\x4f\\xf8\\x72\\x05\\xfb\\x6c\\x06\\x86\\x75\"\n\"\\xbf\\x85\\x96\\x87\\x9b\\x76\\x19\\xfb\\x16\\xfc\\x7e\\xa7\\x1d\\xf7\\x0d\\xf8\\x5e\\xd4\\xfc\\xd0\\x05\\x9c\\x06\\xf8\\x18\\xf8\\xd0\\xfb\\x15\\xfc\\x78\\x7f\"\n\"\\x5f\\x78\\x78\\x68\\x88\\x19\\x74\\x20\\x1d\\x0b\\xf9\\x31\\x15\\xfb\\xbd\\x72\\x06\\xae\\x85\\xa0\\x86\\x91\\x87\\x08\\x91\\x88\\x90\\x81\\x82\\x1a\\x7f\\x87\"\n\"\\x74\\x84\\x71\\x1e\\xfb\\x06\\xfc\\x44\\x05\\xfb\\x29\\x64\\x7c\\x6f\\x67\\x1b\\x78\\x83\\x91\\x97\\x92\\x8d\\x90\\x93\\x94\\x1f\\x96\\x98\\x8d\\x91\\x99\\x1a\"\n\"\\xaf\\x6f\\xa6\\x68\\x67\\x6f\\x6d\\x63\\x50\\xcb\\x61\\xe3\\xf7\\x00\\xcd\\xc8\\xf7\\x17\\xae\\x1e\\xf7\\x14\\xf8\\x73\\x9c\\x0b\\x53\\xfb\\x56\\x6f\\x4a\\x51\"\n\"\\x43\\x08\\x65\\x6c\\x75\\x7a\\x77\\x1b\\x7d\\x84\\x93\\x9c\\x9a\\x8c\\x91\\x99\\xb8\\x1f\\xe9\\xf7\\xc8\\x05\\x86\\x81\\x89\\x88\\x7e\\x1f\\x4d\\x80\\x40\\x81\"\n\"\\x5f\\x89\\x08\\x70\\x07\\xb9\\x88\\x95\\x86\\x77\\x1a\\x7b\\x86\\x6f\\x82\\x6e\\x1e\\x63\\xfb\\x19\\x05\\x7d\\x59\\x84\\x6a\\x72\\x1a\\x5a\\xa4\\x72\\xbd\\xce\"\n\"\\xa9\\xa5\\xf7\\x24\\xf2\\x1e\\x79\\x0b\\xf7\\xd9\\x16\\xb5\\x1d\\xb9\\x06\\xeb\\x8c\\xbc\\x63\\x96\\x35\\x08\\x9f\\x06\\xb7\\xf7\\x37\\x05\\xfc\\x68\\x06\\x82\"\n\"\\x0a\\x0b\\xf7\\xcd\\xf8\\x59\\x15\\xfb\\x1b\\xfb\\x14\\xfb\\x2a\\xfb\\x33\\x30\\xc0\\x4e\\xdc\\xb1\\xaf\\x98\\xa6\\xb4\\x1f\\xe2\\xc6\\xc2\\xf1\\xf5\\x1a\\xe5\"\n\"\\x56\\xcb\\x40\\x1e\\x79\\x69\\x15\\xa5\\x9b\\x76\\x68\\x4c\\x6d\\xfb\\x14\\x69\\x3b\\x1f\\x5d\\x77\\x73\\x74\\x6d\\x1b\\x70\\x78\\xa7\\xb3\\xb9\\xa7\\xf7\\x0f\"\n\"\\xa8\\xd7\\x1f\\xc0\\x9e\\xaa\\xa9\\xae\\x1b\\x0b\\x7f\\x6f\\x6c\\x85\\x6c\\x1b\\x2d\\x53\\xcc\\xf7\\x01\\xf7\\x25\\xd3\\xf7\\x42\\xe6\\xd7\\x1f\\xaa\\xb0\\xb2\"\n\"\\x9a\\xb4\\x1b\\xdc\\xbd\\x4f\\x29\\x7e\\x8a\\x83\\x89\\x7d\\x1f\\xab\\x85\\xbe\\xf7\\x7e\\x05\\x6d\\x06\\x75\\x7e\\x81\\x84\\x7c\\x1b\\x83\\x7c\\x8e\\x90\\x7c\"\n\"\\x1f\\x99\\x5e\\x5e\\x92\\x62\\x1b\\xfb\\x73\\xfb\\x4d\\xfb\\x5d\\xfb\\x87\\x0b\\xe0\\x1d\\x99\\x92\\xab\\x9a\\xc1\\xae\\x0a\\x95\\x8e\\x8b\\x93\\x1b\\xa6\\x9a\"\n\"\\x81\\x79\\x7d\\x7d\\x50\\x78\\x46\\x1f\\x40\\xfb\\x9c\\x05\\x76\\x3f\\x7e\\x51\\x73\\x1a\\x67\\xa6\\x73\\xb4\\xc8\\xb1\\xaa\\xf4\\xd0\\x1e\\x0b\\x59\\x1d\\x50\"\n\"\\x7e\\x4d\\x7f\\x0a\\x0b\\x85\\x75\\x05\\xa7\\x06\\xa5\\x9c\\x7a\\x71\\x85\\x8a\\x85\\x8a\\x85\\x1f\\x3a\\x1d\\x7c\\x20\\x1d\\xf7\\xd6\\x06\\x0b\\xb0\\x1d\\x7b\"\n\"\\x70\\x1a\\x85\\x95\\x1d\\x0b\\x15\\x50\\x63\\x77\\x76\\x79\\x1b\\x83\\x84\\x92\\x93\\x99\\x93\\xad\\x99\\xbf\\x1f\\xbe\\xf7\\x4b\\xe1\\xba\\x9e\\xcf\\x35\\x5c\"\n\"\\xd6\\xf7\\xa4\\xc6\\x0a\\x94\\x8f\\x8b\\x91\\x1b\\xa8\\x9a\\x81\\x79\\x7a\\x7c\\x51\\x5e\\xfb\\x35\\x1f\\x3d\\x60\\x78\\x45\\xd8\\xb6\\x05\\x5a\\x0b\\xf7\\x70\"\n\"\\x15\\x9e\\xa0\\x94\\x95\\x9c\\x9d\\x08\\xd1\\xd3\\xaa\\xb4\\xa0\\x1a\\x91\\x85\\x91\\x84\\x83\\x7d\\x82\\x78\\x78\\x1e\\x7e\\x7f\\x81\\x83\\x73\\x7a\\xfb\\x3e\"\n\"\\xfb\\x10\\x18\\x82\\x07\\xe0\\x35\\xc6\\x4d\\xa3\\x70\\x08\\x83\\x92\\x8e\\x89\\x90\\x1b\\x94\\x91\\x92\\x93\\x9a\\x81\\xa6\\x74\\xbb\\x1f\\x0b\\x8e\\x1d\\xf7\"\n\"\\x01\\x1d\\xf7\\x2c\\xe2\\x05\\xaa\\x9d\\x93\\x95\\x2d\\x1d\\x0e\\x1a\\x5c\\xb8\\x69\\xc8\\xbe\\xba\\xa8\\xb9\\xa4\\x68\\x1d\\x81\\x88\\x7b\\x1b\\x0b\\xf7\\xd1\"\n\"\\xf7\\x22\\x15\\x46\\x5d\\x6e\\x75\\x60\\x1b\\x61\\x75\\xa7\\xc1\\x9b\\x8d\\x98\\x8f\\x9f\\x1f\\xf3\\x9f\\xbc\\xa1\\xbd\\xb9\\x08\\xae\\xab\\x9e\\xb0\\xaf\\x1a\"\n\"\\xbe\\x5f\\xaf\\x4e\\xfb\\x25\\xfb\\x23\\xfb\\x37\\xfb\\x39\\x36\\xcb\\x4d\\x0b\\x34\\x0a\\x67\\x20\\x1d\\xf7\\xbe\\x21\\x1d\\x72\\x06\\x70\\x8c\\x7b\\x9b\\xa5\"\n\"\\x1a\\x90\\x8c\\x92\\x8d\\x91\\x1e\\xf7\\x16\\xf8\\x7f\\x98\\xb8\\x9c\\x9d\\xae\\x8e\\x19\\x97\\x06\\x0b\\x15\\x6c\\x7c\\x7e\\x80\\x6d\\x1d\\x6b\\x93\\xb1\\x1d\"\n\"\\x0b\\x54\\x1d\\x56\\x82\\x85\\x8a\\x89\\x81\\x1f\\x0e\\xa6\\x92\\x9b\\x96\\xaa\\x1b\\xf7\\x04\\xc1\\x50\\xfb\\x0d\\xfb\\x07\\x69\\xfb\\x0b\\x55\\x3e\\x1f\\x3e\"\n\"\\x56\\x44\\x67\\x2c\\x1b\\x65\\x7b\\x95\\xa3\\x97\\x8e\\x9a\\x94\\xa6\\x1f\\x8d\\x8c\\x8d\\x8b\\x1e\\x0b\\x6e\\x06\\x78\\x80\\x88\\x89\\x7c\\x1b\\x81\\x83\\x8d\"\n\"\\x92\\x79\\x1f\\x95\\x72\\x7f\\x8e\\x76\\x1b\\x3a\\x56\\x5a\\x3e\\x55\\x99\\x6f\\xcd\\x3c\\x1f\\xb1\\x5e\\x9d\\x69\\x72\\x1a\\x6d\\x72\\x73\\x6b\\x74\\x0b\\x15\"\n\"\\xa5\\x9b\\x75\\x69\\x4c\\x6b\\xfb\\x19\\x6a\\x3d\\x1f\\x5c\\x76\\x73\\xdb\\x1d\\xc0\\x9e\\xab\\xaa\\xae\\x1b\\x0e\\x82\\x3a\\x97\\x1d\\x0b\\xf9\\x41\\x15\\xfb\"\n\"\\x08\\x58\\x40\\x36\\x39\\x1a\\x50\\xad\\x64\\xbe\\xb4\\xa9\\xaa\\xb5\\xa6\\x81\\x9b\\x6c\\x9f\\x1e\\x75\\x9a\\x84\\x95\\x9a\\x1a\\xae\\xb2\\xb2\\xda\\xb5\\x1e\"\n\"\\x0b\\x05\\x27\\x71\\x7a\\x6c\\x6e\\xee\\x1d\\x93\\x96\\x8d\\x92\\x95\\x1a\\xa6\\x75\\xa1\\x70\\x70\\x75\\x73\\x6e\\x5d\\xb5\\x6c\\x0b\\x86\\x75\\x05\\xa0\\x06\"\n\"\\xa5\\x8a\\x9c\\x7a\\x71\\x1a\\x84\\x4d\\x1d\\xfc\\x7f\\x7f\\x5e\\x7a\\x79\\x68\\x88\\x19\\x83\\x20\\x1d\\x0b\\xf8\\x22\\x15\\xdd\\xf7\\x4e\\x8c\\x8c\\x8d\\x90\"\n\"\\x8e\\x93\\x19\\x95\\xa1\\x8c\\x8e\\x98\\x1a\\xa6\\x77\\xa1\\x72\\x64\\x66\\x68\\x65\\x88\\x1e\\x7b\\xfb\\x6a\\x05\\x0b\\xf7\\x05\\xf7\\x5c\\xc7\\xf2\\xa1\\xa2\"\n\"\\xaf\\x89\\x19\\x91\\x9f\\x05\\xfb\\x26\\x06\\x85\\x77\\x05\\x97\\x06\\x9b\\x95\\x83\\x7d\\x7c\\x86\\x80\\x6b\\x53\\x1f\\x0b\\x05\\x7c\\x57\\x82\\x60\\x79\\x1a\"\n\"\\x64\\xa7\\x71\\xb5\\xc7\\xb3\\xac\\xf2\\xcd\\x1e\\x75\\x99\\x05\\x56\\x69\\x71\\x70\\x7b\\x1b\\x83\\x83\\x92\\x93\\x0b\\xf8\\xe2\\xf7\\x56\\x15\\x73\\x90\\x69\"\n\"\\x53\\x75\\x72\\x64\\x6f\\x19\\x65\\x55\\x44\\x77\\x39\\x1b\\x5e\\x78\\x94\\xa0\\x93\\x8d\\x98\\x8e\\x96\\x1f\\x0b\\x7c\\x58\\x7a\\x7c\\x5b\\x85\\x19\\x72\\xf7\"\n\"\\xb2\\x07\\xf7\\x94\\xf7\\x51\\xf7\\x3d\\xf7\\x77\\xf7\\x3f\\xfb\\x04\\xf1\\xfb\\x51\\x1f\\xfb\\xb6\\x0b\\x8a\\xba\\x05\\xaf\\x9a\\x9f\\xa5\\x1e\\x95\\x06\\x90\"\n\"\\x9f\\x05\\xfb\\x76\\x06\\x86\\x77\\x05\\xa6\\x9b\\x62\\x37\\x91\\x1f\\x95\\xfb\\x68\\x0b\\x15\\xa9\\x06\\xa8\\x97\\x92\\x91\\x9e\\x1b\\x95\\x98\\x88\\x83\\xa2\"\n\"\\x1f\\x7a\\xbc\\xad\\x84\\xb3\\x1b\\xf7\\x20\\xe4\\xda\\xf7\\x0f\\xe3\\x0b\\xb1\\xf7\\x17\\x91\\x94\\xc5\\x98\\x19\\xa4\\xfb\\x65\\x72\\x07\\xc6\\x86\\xa0\\x7b\"\n\"\\x65\\x1a\\x78\\x84\\x69\\x80\\x62\\x1e\\x3b\\xfb\\xb3\\x0b\\xfc\\xbb\\x06\\x65\\xfb\\x3f\\xa4\\x84\\xbe\\xef\\xcb\\xb5\\xf1\\x8c\\x19\\xfb\\x28\\xfc\\xad\\x05\"\n\"\\x58\\x7d\\x71\\x76\\x58\\x1b\\x7d\\x72\\x0b\\x15\\x90\\x0a\\x15\\xdd\\x1d\\x72\\x78\\x4d\\x0a\\xa2\\x0a\\x7b\\xa1\\x7c\\x1f\\xf7\\x19\\x32\\x05\\x0e\\xd7\\x1d\"\n\"\\x77\\x73\\x3d\\x0a\\xf7\\x18\\x33\\x05\\x0e\\x65\\x1d\\x4d\\x0a\\x1a\\x24\\xbd\\x4a\\xdb\\xcd\\xbd\\xac\\xda\\xc3\\x1e\\x8d\\x4a\\x8b\\x8b\\x8d\\x7f\\x08\\x74\"\n\"\\x90\\x93\\x7f\\x97\\x1b\\xae\\xb4\\x0b\\xb1\\x1d\\x81\\x0b\\x7a\\x7f\\x65\\x68\\x1e\\xfb\\x0e\\xfb\\x17\\x05\\x0b\\x1f\\xaa\\x7c\\xa0\\x64\\x61\\x1a\\x60\\x7c\"\n\"\\x58\\x74\\x6b\\x1e\\x61\\x6f\\x61\\x76\\x57\\x1b\\x7d\\x81\\x8c\\x8f\\x78\\x1f\\x0b\\x73\\x53\\x63\\x1e\\x99\\x7e\\x05\\xab\\xa7\\x9e\\x95\\xa7\\x1b\\xad\\xa0\"\n\"\\x77\\x6b\\x60\\x64\\x70\\x39\\x7c\\x1f\\x0e\\x06\\x55\\x0a\\x9c\\x7b\\x73\\x1a\\x82\\x8b\\x87\\x89\\x84\\x1e\\xfb\\x21\\xfc\\x7f\\x7d\\x5e\\x0b\\xf7\\xba\\xf7\"\n\"\\xc3\\x15\\x87\\xaf\\x9b\\x8a\\xa2\\x1b\\xf7\\x25\\xf7\\x00\\xe2\\xf7\\x08\\xec\\x3b\\xcb\\xfb\\x0e\\x1f\\x0b\\xd8\\xd4\\x1a\\xc0\\x6c\\x60\\x1d\\x0b\\xf7\\x9c\"\n\"\\x16\\xf8\\xa3\\x06\\xc6\\xf7\\x58\\x71\\x8e\\x61\\x48\\x72\\x6f\\x66\\x71\\x19\\x6d\\x60\\x4c\\x7b\\x44\\x1b\\x0b\\x6d\\x73\\x73\\x6c\\x6b\\xa4\\x71\\xa9\\xa8\"\n\"\\xa3\\xa4\\xaa\\x0b\\xec\\x1d\\x90\\x8c\\x92\\x8d\\x92\\x1e\\xf7\\x16\\xf8\\x7f\\x0b\\xab\\x86\\x99\\x89\\x95\\x88\\x92\\x87\\x19\\x91\\x87\\x8f\\x82\\x81\\x1a\"\n\"\\x7f\\x86\\x6c\\x86\\x79\\x1e\\x0b\\xca\\xc4\\xd6\\xb8\\x72\\xbc\\x53\\xcc\\x1f\\x65\\xb8\\x79\\xa9\\xa2\\x1a\\xab\\xa0\\xa0\\xab\\xb9\\x0b\\x16\\xa4\\x0a\\x0e\"\n\"\\x9d\\x1a\\xa6\\xdf\\x1d\\x89\\x9e\\x56\\x0b\\x49\\x15\\x62\\x6a\\x6a\\x63\\x62\\xac\\x6a\\xb4\\xb3\\xac\\xac\\xb3\\xb4\\x6a\\xac\\x63\\x1f\\x0b\\x15\\xc7\\x1d\"\n\"\\x0b\\x15\\xfb\\x03\\xf7\\x27\\x05\\xa1\\x7a\\x77\\x97\\x78\\x1b\\x73\\x76\\x76\\x73\\x7b\\x97\\x0b\\x5e\\x6f\\x73\\x70\\x7c\\x1b\\x85\\x86\\x91\\x91\\x94\\xa1\"\n\"\\xe2\\xae\\xf7\\x13\\x1f\\x0b\\xf5\\x1d\\xa6\\xad\\xae\\x6f\\xa8\\x6b\\x1f\\x0b\\xf2\\x1d\\xc8\\xf7\\x6d\\x05\\x94\\x06\\x0b\\x15\\x2b\\x1d\\x9f\\x1a\\xa4\\x75\"\n\"\\xa0\\x71\\x79\\x0b\\x22\\xfb\\x1c\\x1a\\x2b\\xb2\\x46\\xd8\\x62\\x1e\\xb0\\x77\\xa6\\x85\\xc8\\x86\\x0b\\xc2\\x92\\x9d\\x9c\\xae\\x19\\xc7\\xa8\\xaf\\xba\\x9c\"\n\"\\x1b\\x8f\\x91\\x87\\x82\\x0b\\xfa\\x65\\xf7\\xa1\\x15\\xfe\\x7c\\x06\\x7a\\x30\\x05\\xfa\\x7c\\x06\\x0e\\x97\\xb8\\x9d\\x9d\\xae\\x8e\\x19\\x97\\x06\\x0b\\x4d\"\n\"\\xba\\x7c\\xa1\\xb8\\x1a\\xcc\\xb3\\xb3\\x0b\\x83\\x20\\x1d\\xf7\\xa8\\x21\\x1d\\x6e\\x06\\x71\\x8c\\x0b\\x92\\x95\\x1a\\xa6\\x75\\xa1\\x70\\x70\\x75\\x73\\x6e\"\n\"\\x5d\\xb5\\x6c\\xca\\x0b\\x1f\\xf7\\x25\\xf8\\x9f\\xc6\\x0a\\x0b\\xf7\\xd9\\xf7\\x9b\\x15\\xc3\\xfb\\x34\\x05\\x8e\\x80\\x8d\\x81\\x80\\x1a\\x0b\\xc7\\x0a\\xb3\"\n\"\\x6a\\xad\\x63\\x1f\\x0b\\x05\\xae\\x95\\x97\\x94\\xb4\\x1b\\xd4\\xbe\\x7b\\x6c\\xa6\\x1f\\x9f\\x0b\\xbc\\x0a\\x6e\\xa8\\x0b\\x75\\x1a\\xfb\\x08\\x4c\\xfb\\x5f\"\n\"\\x49\\x2c\\x1e\\x49\\x5d\\x5e\\x6c\\x0b\\x70\\x1a\\x64\\xa4\\x74\\xb6\\xc8\\xb1\\xaa\\xf4\\xd0\\x1e\\x0e\\x43\\xf0\\x1d\\x0b\\x54\\x0a\\x91\\x8c\\x91\\x8d\\x92\"\n\"\\x1e\\x0b\\x20\\x1d\\xa1\\x06\\xa6\\x8a\\x9b\\x7b\\x71\\x1a\\x0b\\x15\\xfb\\x07\\x5d\\x73\\x67\\x6d\\x1b\\x76\\x7f\\xaa\\xc0\\x0b\\x9a\\x98\\x94\\x9d\\x9d\\x19\"\n\"\\xa3\\xa4\\x98\\xa6\\xa4\\x1a\\x0b\\x1f\\xcd\\xf7\\x65\\x4c\\x7c\\x7f\\x89\\xfb\\x11\\x80\\x19\\x0b\\xab\\x1e\\xcc\\xa8\\xa1\\xa2\\xb5\\x1a\\xbe\\x5f\\xaf\\x4b\"\n\"\\x0b\\x6f\\x70\\x68\\x68\\xa8\\x6e\\xae\\xad\\xa6\\xa6\\xae\\xae\\x0b\\x75\\x05\\xf7\\xa6\\x21\\x1d\\x75\\x06\\x71\\x8c\\x0b\\x06\\xe1\\xf7\\x66\\x05\\x3e\\x06\"\n\"\\x34\\xfb\\x66\\x05\\x0b\\x8a\\xc5\\x0a\\x0b\\xa6\\xf8\\x2b\\x15\\xb8\\x89\\x94\\x87\\x78\\x1a\\x72\\x0b\\xe9\\xf8\\x15\\x18\\xf7\\x2a\\x06\\x46\\xfb\\xa1\\x05\"\n\"\\x0b\\x73\\x4a\\x1b\\x4b\\x6a\\xa8\\xc8\\x86\\x1f\\x60\\x06\\x0b\\x7e\\x5e\\x79\\x79\\x68\\x88\\x19\\x0b\\x92\\x87\\x08\\x91\\x87\\x8f\\x82\\x0b\\x85\\x1e\\xfb\"\n\"\\x17\\xfc\\x7f\\x7f\\x5e\\x79\\x79\\x0b\\x33\\x7a\\x5c\\x84\\x41\\x85\\x19\\x70\\x07\\x8c\\x0b\\x6b\\x61\\x61\\xaa\\x6b\\xb5\\xb5\\xac\\xab\\xb5\\x0b\", 55486\n};\n"
  },
  {
    "path": "src/fonts/NimbusRoman-Italic.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusRoman_Italic_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x13\\x4e\\x69\\x6d\\x62\\x75\\x73\\x52\\x6f\\x6d\\x61\\x6e\\x2d\\x49\\x74\\x61\\x6c\\x69\\x63\\x00\\x01\\x01\\x01\\x35\"\n\"\\xf9\\xbc\\x00\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xc0\\x03\\xf8\\x18\\x04\\x1e\\xe1\\x5a\\x5f\\x0c\\x02\\x22\\x0c\\x03\\xfb\\x3d\\xfb\\xa2\"\n\"\\xfa\\xd1\\xfa\\x4b\\x05\\x1c\\x2a\\xcd\\x0f\\x1c\\x2a\\xe0\\x11\\xae\\x1d\\x00\\x00\\xc6\\xbf\\x12\\x01\\xa6\\x02\\x00\\x01\\x00\\x08\\x00\\x0e\\x00\\x13\\x00\"\n\"\\x1d\\x00\\x24\\x00\\x2b\\x00\\x35\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x74\\x00\\x7a\\x00\\x84\\x00\"\n\"\\x8b\\x00\\x8e\\x00\\x95\\x00\\x9c\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\\x00\\xcd\\x00\\xd9\\x00\\xe3\\x00\\xe7\\x00\\xf2\\x00\\xf4\\x00\"\n\"\\xfa\\x01\\x04\\x01\\x0b\\x01\\x12\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\\x01\\x4d\\x01\\x53\\x01\\x59\\x01\\x5f\\x01\\x6b\\x01\\x6f\\x01\"\n\"\\x71\\x01\\x77\\x01\\x7d\\x01\\x89\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\\x01\\xc2\\x01\\xcd\\x01\\xd0\\x01\\xd2\\x01\\xd5\\x01\\xdb\\x01\"\n\"\\xe1\\x01\\xed\\x01\\xf0\\x01\\xf6\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\\x02\\x27\\x02\\x33\\x02\\x38\\x02\\x3e\\x02\\x4b\\x02\\x52\\x02\"\n\"\\x59\\x02\\x60\\x02\\x6f\\x02\\x7b\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\\x02\\xa8\\x02\\xb3\\x02\\xb9\\x02\\xbf\\x02\\xc9\\x02\\xcd\\x02\"\n\"\\xd3\\x02\\xda\\x02\\xe3\\x02\\xec\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\\x03\\x2b\\x03\\x34\\x03\\x3d\\x03\\x46\\x03\\x4f\\x03\\x58\\x03\"\n\"\\x61\\x03\\x6a\\x03\\x73\\x03\\x7c\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\\x03\\xbb\\x03\\xc4\\x03\\xcd\\x03\\xd6\\x03\\xdf\\x03\\xe8\\x03\"\n\"\\xf1\\x03\\xfa\\x04\\x03\\x04\\x0c\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\\x04\\x4b\\x04\\x54\\x04\\x5d\\x04\\x66\\x04\\x6f\\x04\\x78\\x04\"\n\"\\x81\\x04\\x8a\\x04\\x93\\x04\\x9c\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\\xed\\x04\\xf6\\x04\\xff\\x05\\x08\\x05\"\n\"\\x11\\x05\\x1a\\x05\\x23\\x05\\x2c\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\\x05\\x6b\\x05\\x74\\x05\\x7d\\x05\\x86\\x05\\x8f\\x05\\x98\\x05\"\n\"\\xa1\\x05\\xaa\\x05\\xb3\\x05\\xbc\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\\x05\\xfb\\x06\\x04\\x06\\x0d\\x06\\x16\\x06\\x1f\\x06\\x28\\x06\"\n\"\\x31\\x06\\x3a\\x06\\x43\\x06\\x4c\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\\x06\\x85\\x06\\x90\\x06\\x9a\\x06\\xa3\\x06\\xac\\x06\\xb5\\x06\"\n\"\\xbf\\x06\\xc6\\x06\\xcf\\x06\\xdb\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\\x07\\x11\\x07\\x15\\x07\\x1b\\x07\\x21\\x07\\x26\\x07\\x2d\\x07\"\n\"\\x3a\\x07\\x40\\x07\\x46\\x07\\x50\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\\x07\\x86\\x07\\x8f\\x07\\x92\\x07\\x9a\\x07\\xa3\\x07\\xae\\x07\"\n\"\\xb4\\x07\\xb9\\x07\\xbe\\x07\\xc4\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\\x08\\x05\\x08\\x0a\\x08\\x10\\x08\\x12\\x08\\x19\\x08\\x21\\x08\"\n\"\\x29\\x08\\x33\\x08\\x3d\\x08\\x49\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\\x08\\x8c\\x08\\x97\\x08\\x9c\\x08\\xa8\\x08\\xb4\\x08\\xba\\x08\"\n\"\\xc0\\x08\\xc6\\x08\\xd2\\x08\\xd6\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\\x09\\x0b\\x09\\x11\\x09\\x1c\\x09\\x22\\x09\\x2e\\x09\\x38\\x09\"\n\"\\x40\\x09\\x42\\x09\\x48\\x09\\x55\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\\x09\\x93\\x09\\x9e\\x09\\xa4\\x09\\xa7\\x09\\xa9\\x09\\xb0\\x09\"\n\"\\xbc\\x09\\xca\\x09\\xcd\\x09\\xda\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\\x0a\\x0f\\x0a\\x17\\x0a\\x22\\x0a\\x2e\\x0a\\x34\\x0a\\x39\\x0a\"\n\"\\x42\\x0a\\x47\\x0a\\x50\\x0a\\x53\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\\x0a\\x7c\\x0a\\x89\\x0a\\x90\\x0a\\x9d\\x0a\\xa4\\x0a\\xab\\x0a\"\n\"\\xb2\\x0a\\xb9\\x0a\\xc0\\x0a\\xc7\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\\x0a\\xf8\\x0a\\xff\\x0b\\x06\\x0b\\x0d\\x0b\\x14\\x0b\\x1b\\x0b\"\n\"\\x22\\x0b\\x29\\x0b\\x30\\x0b\\x37\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\\x0b\\x68\\x0b\\x6f\\x0b\\x76\\x0b\\x7d\\x0b\\x84\\x0b\\x8b\\x0b\"\n\"\\x92\\x0b\\x99\\x0b\\xa0\\x0b\\xa7\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\\x0b\\xd8\\x0b\\xdf\\x0b\\xe6\\x0b\\xed\\x0b\\xf4\\x0b\\xfb\\x0c\"\n\"\\x02\\x0c\\x09\\x0c\\x10\\x0c\\x17\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\\x0c\\x48\\x0c\\x4d\\x0c\\x56\\x0c\\x5d\\x0c\\x64\\x0c\\x73\\x0c\"\n\"\\x87\\x0c\\x93\\x0c\\x98\\x0c\\x9e\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\\x0c\\xd1\\x0c\\xd7\\x0c\\xe1\\x0c\\xe5\\x0c\\xe9\\x0d\\x1f\\x0d\"\n\"\\x5f\\x0d\\x72\\x0d\\x7e\\x41\\x45\\x61\\x63\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\\x6c\\x70\\x68\\x61\\x41\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\"\n\"\\x73\\x41\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x41\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x42\\x65\\x74\\x61\\x43\\x61\\x63\"\n\"\\x75\\x74\\x65\\x43\\x63\\x61\\x72\\x6f\\x6e\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x43\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x43\\x68\"\n\"\\x69\\x44\\x63\\x61\\x72\\x6f\\x6e\\x44\\x63\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\\x62\\x72\\x65\\x76\\x65\\x45\\x63\\x61\\x72\\x6f\\x6e\\x45\\x64\"\n\"\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x45\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\"\n\"\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x75\\x72\\x6f\\x47\\x61\\x6d\\x6d\\x61\"\n\"\\x47\\x62\\x72\\x65\\x76\\x65\\x47\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x47\\x64\\x6f\"\n\"\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x48\\x62\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x49\\x4a\\x49\\x62\\x72\\x65\\x76\\x65\\x49\\x64\"\n\"\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x49\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x49\\x6f\\x74\\x61\\x49\\x6f\\x74\\x61\\x64\\x69\"\n\"\\x65\\x72\\x65\\x73\\x69\\x73\\x49\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\\x64\\x65\\x4a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\"\n\"\\x4b\\x61\\x70\\x70\\x61\\x4b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\\x63\\x75\\x74\\x65\\x4c\\x61\\x6d\\x62\\x64\\x61\\x4c\\x63\\x61\"\n\"\\x72\\x6f\\x6e\\x4c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\\x4d\\x75\\x4e\\x61\\x63\\x75\\x74\\x65\\x4e\\x63\\x61\\x72\\x6f\"\n\"\\x6e\\x4e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\\x76\\x65\\x4f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\"\n\"\\x75\\x74\\x4f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x69\\x63\\x72\\x6f\"\n\"\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\\x69\\x50\\x69\\x50\\x73\\x69\\x52\\x61\\x63\\x75\\x74\\x65\\x52\"\n\"\\x63\\x61\\x72\\x6f\\x6e\\x52\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\\x6f\\x53\\x61\\x63\\x75\\x74\\x65\\x53\\x63\\x65\\x64\\x69\\x6c\"\n\"\\x6c\\x61\\x53\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x53\\x69\\x67\\x6d\\x61\\x54\\x61\"\n\"\\x75\\x54\\x62\\x61\\x72\\x54\\x63\\x61\\x72\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x54\\x68\\x65\\x74\\x61\\x55\\x62\\x72\\x65\"\n\"\\x76\\x65\\x55\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x55\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x55\\x70\\x73\"\n\"\\x69\\x6c\\x6f\\x6e\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x55\"\n\"\\x72\\x69\\x6e\\x67\\x55\\x74\\x69\\x6c\\x64\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x57\\x64\\x69\\x65\\x72\"\n\"\\x65\\x73\\x69\\x73\\x57\\x67\\x72\\x61\\x76\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x59\\x67\\x72\\x61\\x76\\x65\\x5a\\x61\\x63\"\n\"\\x75\\x74\\x65\\x5a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\\x72\\x65\\x76\\x65\\x61\\x65\\x61\\x63\\x75\\x74\\x65\\x61\\x66\"\n\"\\x69\\x69\\x30\\x30\\x32\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x31\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x32\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x32\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\"\n\"\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x39\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x33\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x33\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x36\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x33\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x30\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x33\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x34\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x37\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x34\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x35\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x34\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x35\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\"\n\"\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x31\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x36\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x37\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x30\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x37\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x34\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x37\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x37\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x31\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x38\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x38\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x38\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x38\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\"\n\"\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x35\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x39\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x39\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x32\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x31\\x30\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x36\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x39\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x31\\x31\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x38\\x34\\x36\\x61\\x66\"\n\"\\x69\\x69\\x36\\x31\\x32\\x34\\x38\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\\x69\\x36\\x31\\x33\\x35\\x32\\x61\\x6c\\x70\\x68\\x61\\x61\\x6c\"\n\"\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x61\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\\x61\\x6e\\x67\\x6c\\x65\\x72\\x69\\x67\"\n\"\\x68\\x74\\x61\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x61\\x72\"\n\"\\x72\\x6f\\x77\\x62\\x6f\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\\x77\\x72\\x69\"\n\"\\x67\\x68\\x74\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x62\\x73\\x65\\x62\"\n\"\\x65\\x74\\x61\\x63\\x61\\x63\\x75\\x74\\x65\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x63\\x64\\x6f\\x74\\x61\\x63\"\n\"\\x63\\x65\\x6e\\x74\\x63\\x68\\x69\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\\x63\\x6c\\x75\\x62\\x64\\x63\\x61\\x72\\x6f\\x6e\\x64\"\n\"\\x63\\x72\\x6f\\x61\\x74\\x64\\x65\\x6c\\x74\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x62\"\n\"\\x72\\x65\\x76\\x65\\x65\\x63\\x61\\x72\\x6f\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x65\\x6d\\x61\\x63\\x72\"\n\"\\x6f\\x6e\\x65\\x6e\\x67\\x65\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x65\"\n\"\\x71\\x75\\x69\\x76\\x61\\x6c\\x65\\x6e\\x63\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\\x65\\x74\\x61\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x78\"\n\"\\x63\\x6c\\x61\\x6d\\x64\\x62\\x6c\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\\x65\\x6d\\x61\\x6c\\x65\\x66\\x72\\x61\\x6e\\x63\\x67\\x61\\x6d\"\n\"\\x6d\\x61\\x67\\x62\\x72\\x65\\x76\\x65\\x67\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x67\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\"\n\"\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x68\\x62\\x61\\x72\\x68\\x63\\x69\\x72\\x63\\x75\\x6d\"\n\"\\x66\\x6c\\x65\\x78\\x68\\x65\\x61\\x72\\x74\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\\x65\\x69\\x6a\\x69\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x69\\x6e\\x66\"\n\"\\x69\\x6e\\x69\\x74\\x79\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x74\"\n\"\\x70\\x69\\x6e\\x74\\x65\\x72\\x73\\x65\\x63\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x69\\x6f\\x67\\x6f\\x6e\\x65\\x6b\"\n\"\\x69\\x6f\\x74\\x61\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\"\n\"\\x73\\x69\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x6b\\x61\\x70\\x70\\x61\"\n\"\\x6b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\\x61\\x6e\\x64\\x69\\x63\\x6c\\x61\\x63\\x75\\x74\\x65\\x6c\\x61\"\n\"\\x6d\\x62\\x64\\x61\\x6c\\x63\\x61\\x72\\x6f\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6c\\x64\\x6f\\x74\\x6c\\x65\\x73\\x73\\x65\\x71\"\n\"\\x75\\x61\\x6c\\x6c\\x69\\x72\\x61\\x6c\\x6f\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\"\n\"\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\\x74\\x65\\x6e\\x61\\x70\\x6f\\x73\\x74\\x72\\x6f\\x70\\x68\\x65\"\n\"\\x6e\\x63\\x61\\x72\\x6f\\x6e\\x6e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\"\n\"\\x71\\x75\\x61\\x6c\\x6e\\x75\\x6f\\x62\\x72\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x6f\\x6d\\x61\\x63\\x72\\x6f\\x6e\"\n\"\\x6f\\x6d\\x65\\x67\\x61\\x6f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\"\n\"\\x6f\\x73\\x6f\\x72\\x74\\x68\\x6f\\x67\\x6f\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x70\\x61\\x72\\x74\\x69\\x61\\x6c\\x64\\x69\"\n\"\\x66\\x66\\x70\\x65\\x73\\x65\\x74\\x61\\x70\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x62\\x73\\x65\\x74\"\n\"\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\\x6f\\x74\\x65\\x72\\x65\\x76\\x65\\x72\\x73\\x65\\x64\\x72\\x61\"\n\"\\x63\\x75\\x74\\x65\\x72\\x61\\x64\\x69\\x63\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x72\\x65\\x76\"\n\"\\x6c\\x6f\\x67\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\\x73\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x73\\x63\\x69\\x72\\x63\"\n\"\\x75\\x6d\\x66\\x6c\\x65\\x78\\x73\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\\x65\\x63\\x6f\\x6e\\x64\\x73\\x69\\x67\\x6d\\x61\\x73\\x6d\\x69\"\n\"\\x6c\\x65\\x66\\x61\\x63\\x65\\x73\\x70\\x61\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x73\\x75\\x6e\\x74\\x61\\x75\\x74\\x62\\x61\\x72\\x74\\x63\"\n\"\\x61\\x72\\x6f\\x6e\\x74\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x62\\x72\\x65\\x76\\x65\"\n\"\\x75\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x75\\x6e\\x64\\x65\\x72\\x73\\x63\\x6f\\x72\\x65\\x64\\x62\"\n\"\\x6c\\x75\\x6e\\x69\\x30\\x30\\x41\\x30\\x75\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\\x32\\x31\\x41\\x75\\x6e\\x69\\x30\\x32\\x31\\x42\\x75\\x6e\\x69\"\n\"\\x30\\x32\\x43\\x39\\x75\\x6e\\x69\\x30\\x33\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\\x6e\\x69\\x30\\x33\\x41\\x39\\x75\\x6e\\x69\\x30\\x33\\x42\\x43\"\n\"\\x75\\x6e\\x69\\x30\\x33\\x43\\x32\\x75\\x6e\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\\x30\\x44\\x75\\x6e\\x69\\x30\\x34\\x35\\x30\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x35\\x44\\x75\\x6e\\x69\\x30\\x34\\x39\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\\x69\\x30\\x34\\x39\\x36\\x75\\x6e\\x69\\x30\\x34\\x39\\x37\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x39\\x38\\x75\\x6e\\x69\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\\x41\\x75\\x6e\\x69\\x30\\x34\\x39\\x42\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x39\\x43\\x75\\x6e\\x69\\x30\\x34\\x39\\x44\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\\x30\\x34\\x41\\x31\\x75\\x6e\\x69\\x30\\x34\\x41\\x32\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x41\\x33\\x75\\x6e\\x69\\x30\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\\x75\\x6e\\x69\\x30\\x34\\x41\\x45\\x75\\x6e\\x69\\x30\\x34\\x41\"\n\"\\x46\\x75\\x6e\\x69\\x30\\x34\\x42\\x30\\x75\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\\x34\\x42\\x32\\x75\\x6e\\x69\\x30\\x34\\x42\\x33\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x42\\x36\\x75\\x6e\\x69\\x30\\x34\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\\x6e\\x69\\x30\\x34\\x42\\x39\\x75\\x6e\\x69\\x30\\x34\\x42\\x41\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x42\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\\x43\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x43\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x44\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\\x69\\x30\\x34\\x45\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x39\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x45\\x45\\x75\\x6e\\x69\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\\x45\\x75\\x6e\\x69\\x32\\x30\\x41\\x46\\x75\\x6e\\x69\\x32\\x31\"\n\"\\x32\\x36\\x75\\x6e\\x69\\x32\\x32\\x31\\x35\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\\x32\\x32\\x32\\x37\\x75\\x6e\\x69\\x32\\x32\\x32\\x38\\x75\\x6e\"\n\"\\x69\\x32\\x32\\x39\\x35\\x75\\x6e\\x69\\x32\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x75\\x6f\\x67\\x6f\\x6e\\x65\"\n\"\\x6b\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\"\n\"\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x72\\x69\\x6e\\x67\\x75\\x74\\x69\\x6c\"\n\"\\x64\\x65\\x77\\x61\\x63\\x75\\x74\\x65\\x77\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x77\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x77\\x67\\x72\\x61\"\n\"\\x76\\x65\\x78\\x69\\x79\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\\x76\\x65\\x7a\\x61\\x63\\x75\\x74\\x65\\x7a\\x64\\x6f\\x74\\x61\"\n\"\\x63\\x63\\x65\\x6e\\x74\\x7a\\x65\\x74\\x61\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\"\n\"\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\"\n\"\\x65\\x6e\\x74\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\"\n\"\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\"\n\"\\x65\\x6e\\x74\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x52\\x6f\\x6d\\x61\\x6e\\x20\\x49\\x74\\x61\\x6c\\x69\\x63\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x52\\x6f\\x6d\"\n\"\\x61\\x6e\\x00\\xdd\\x02\\x00\\x01\\x00\\x06\\x00\\x0b\\x00\\x10\\x00\\x13\\x00\\x1b\\x00\\x20\\x00\\x67\\x00\\xf3\\x01\\x45\\x01\\x4a\\x01\\x53\\x01\\x80\\x01\"\n\"\\x8d\\x01\\x94\\x01\\x9a\\x01\\xa1\\x01\\xb8\\x02\\x43\\x02\\x86\\x02\\x9b\\x02\\xa6\\x02\\xaf\\x02\\xb8\\x02\\xbd\\x02\\xcb\\x02\\xd0\\x03\\x4c\\x03\\xb9\\x04\"\n\"\\x02\\x04\\x0a\\x04\\x24\\x04\\x40\\x04\\x55\\x04\\x62\\x04\\x74\\x04\\x81\\x04\\x8b\\x04\\x95\\x04\\x9d\\x04\\xa2\\x04\\xaa\\x04\\xb0\\x04\\xba\\x04\\xc1\\x04\"\n\"\\xc8\\x04\\xd0\\x05\\x27\\x05\\x39\\x05\\x7a\\x05\\xb5\\x05\\xc0\\x05\\xc6\\x05\\xca\\x05\\xdb\\x05\\xed\\x05\\xfc\\x06\\x05\\x06\\x18\\x06\\x24\\x06\\x32\\x06\"\n\"\\x42\\x06\\x4e\\x06\\x57\\x06\\x68\\x06\\x70\\x06\\x7a\\x06\\x84\\x06\\x93\\x06\\x9c\\x06\\xa3\\x06\\xac\\x06\\xb9\\x06\\xc1\\x06\\xc9\\x06\\xd4\\x06\\xdf\\x07\"\n\"\\x8b\\x08\\x35\\x08\\x89\\x09\\x22\\x09\\xaa\\x0a\\x28\\x0a\\x9a\\x0a\\xf6\\x0a\\xfd\\x0b\\x68\\x0b\\x9e\\x0b\\xcb\\x0c\\x22\\x0c\\x6c\\x0c\\xca\\x0c\\xe1\\x0d\"\n\"\\x39\\x0d\\x60\\x0d\\xb3\\x0d\\xdc\\x0e\\x28\\x0e\\x34\\x0e\\x77\\x0e\\xa3\\x0e\\xe8\\x0f\\x28\\x0f\\x65\\x0f\\xa3\\x0f\\xc0\\x0f\\xf5\\x10\\x25\\x10\\x50\\x10\"\n\"\\x5d\\x10\\x8a\\x10\\xa0\\x10\\xca\\x10\\xf0\\x11\\x10\\x11\\x1a\\x11\\x41\\x11\\x67\\x11\\x8a\\x11\\xa0\\x11\\xa6\\x11\\xb9\\x11\\xdb\\x11\\xfb\\x12\\x1c\\x12\"\n\"\\x3d\\x12\\x45\\x12\\x65\\x12\\x85\\x12\\xa4\\x12\\xaf\\x12\\xcd\\x12\\xe1\\x12\\xef\\x13\\x0a\\x13\\x26\\x13\\x29\\x13\\x42\\x13\\x4b\\x13\\x50\\x13\\x5a\\x13\"\n\"\\x72\\x13\\x76\\x13\\x8f\\x13\\xa7\\x13\\xb1\\x13\\xbe\\x13\\xd6\\x13\\xe8\\x13\\xfe\\x14\\x14\\x14\\x28\\x14\\x3e\\x14\\x51\\x14\\x64\\x14\\x78\\x14\\x8c\\x14\"\n\"\\xa0\\x14\\xb4\\x14\\xbd\\x14\\xd0\\x14\\xd8\\x14\\xeb\\x14\\xf7\\x15\\x09\\x15\\x1b\\x15\\x2d\\x15\\x3f\\x15\\x51\\x15\\x63\\x15\\x74\\x15\\x85\\x15\\x96\\x15\"\n\"\\xa7\\x15\\xb6\\x15\\xc5\\x15\\xd4\\x15\\xe2\\x15\\xf2\\x16\\x02\\x16\\x10\\x16\\x20\\x16\\x2e\\x16\\x36\\x16\\x45\\x16\\x52\\x16\\x60\\x16\\x6e\\x16\\x7c\\x16\"\n\"\\x8a\\x16\\x98\\x16\\xa6\\x16\\xb4\\x16\\xc0\\x16\\xc4\\x16\\xd1\\x16\\xde\\x16\\xeb\\x16\\xf0\\x16\\xfd\\x17\\x0a\\x17\\x0f\\x17\\x1c\\x17\\x29\\x17\\x34\\x17\"\n\"\\x40\\x17\\x4c\\x17\\x58\\x17\\x64\\x17\\x6e\\x17\\x79\\x17\\x84\\x17\\x8f\\x17\\x9a\\x17\\xa5\\x17\\xb0\\x17\\xbb\\x17\\xc6\\x17\\xd1\\x17\\xdc\\x17\\xe7\\x17\"\n\"\\xed\\x19\\x86\\x79\\x05\\x0b\\x1b\\x90\\x9d\\x05\\x0b\\x06\\x86\\x79\\x05\\x0b\\x81\\x1d\\x0e\\x15\\x6f\\x75\\x76\\x70\\x5b\\x1d\\x0b\\x06\\x87\\x79\\x05\\x0b\"\n\"\\xf8\\xc8\\x9b\\x15\\x52\\x90\\x85\\x93\\x7e\\xd4\\x2d\\xf8\\xca\\x18\\x71\\x06\\xfb\\xb6\\xfc\\x88\\x3c\\xfb\\x19\\x81\\x80\\x63\\x83\\x19\\x7b\\xf7\\x4f\\x9b\"\n\"\\x07\\x58\\x90\\x83\\x90\\xa4\\x1a\\x9e\\x8e\\x94\\x9c\\xad\\x1e\\xc4\\xf7\\x05\\x05\\xf7\\x70\\x06\\xc7\\x1d\\xf7\\x8a\\x07\\xfc\\x19\\xf7\\x9a\\x15\\xf7\\x2a\"\n\"\\xf7\\x98\\xb7\\xfb\\x98\\x05\\x0b\\xf9\\x0e\\xf9\\x21\\x15\\xfc\\x85\\x7b\\x06\\xc9\\x85\\x9a\\x83\\x70\\x1a\\x7f\\x85\\x6a\\x86\\x78\\x1e\\xfb\\x0f\\xfc\\x4e\"\n\"\\x7a\\x52\\x83\\x84\\x53\\x81\\x19\\x7b\\xf8\\x8f\\x07\\xc9\\xf7\\x36\\x7b\\x93\\x5c\\x4a\\x71\\x72\\x60\\x77\\x19\\x7a\\x66\\x47\\x81\\x3f\\x1b\\x53\\x74\\x95\"\n\"\\xa3\\x97\\x97\\xba\\xa3\\xe2\\x1f\\xab\\xf7\\x07\\x05\\x8a\\x9b\\x9a\\x8a\\x9b\\x1b\\xb9\\x8a\\xa7\\x8a\\xa3\\x86\\x92\\x85\\x19\\x94\\x84\\x8d\\x84\\x77\\x1a\"\n\"\\x79\\x89\\x7f\\x86\\x75\\x1e\\x9f\\x86\\xcf\\xf7\\x7c\\x79\\x8f\\x65\\x36\\x81\\x84\\x31\\x88\\x19\\x7f\\x6b\\x8a\\x8a\\x68\\x1f\\xcd\\xf7\\x7d\\x05\\xa2\\x91\"\n\"\\x95\\x8e\\xc5\\x1b\\xf7\\x30\\xae\\x7e\\x4f\\x7e\\x8a\\x7c\\x8a\\x7a\\x1f\\xa0\\x89\\x05\\x0b\\xf7\\xfa\\xf7\\x01\\x15\\x50\\x43\\x6c\\x7b\\x5f\\x1b\\x53\\x66\"\n\"\\xaf\\xc2\\x9a\\x8d\\x99\\x93\\xab\\x1f\\xa7\\x8f\\x05\\xf7\\x2a\\xa0\\xf5\\xd7\\xe1\\x1a\\xb5\\x6d\\xa5\\x59\\xfb\\x24\\xfb\\x31\\xfb\\x38\\xfb\\x2b\\x3a\\xc1\"\n\"\\x53\\xd9\\xd2\\xd8\\xb4\\xce\\xc6\\x1e\\xfb\\x6e\\xf7\\x2f\\x15\\xe4\\xad\\xd5\\xd8\\xbe\\x1b\\xa0\\x99\\x7c\\x73\\x6c\\x78\\x67\\x6c\\x6d\\x1f\\x66\\x68\\x65\"\n\"\\x79\\x35\\x76\\x08\\x0b\\x15\\xfb\\xc1\\x46\\x1d\\x78\\x1d\\xfb\\x00\\x7c\\x48\\xea\\x1d\\x0b\\x9c\\x1d\\xd7\\x1a\\xde\\x51\\xc4\\x36\\x1e\\x7f\\x76\\x15\\xb6\"\n\"\\xa7\\x66\\x52\\x41\\x6b\\x28\\x5e\\x4a\\x1f\\x56\\x66\\x65\\x72\\x60\\x1b\\x5c\\x6c\\xaf\\xc2\\xd5\\xa8\\xe3\\xbc\\xd2\\x1f\\xc4\\xb2\\xb5\\xa8\\xb6\\x1b\\x0b\"\n\"\\x83\\x16\\xf7\\x88\\x9b\\x06\\xae\\x1d\\xfb\\x8b\\xab\\x1d\\x0b\\x8c\\x8d\\x8e\\x90\\x1f\\x8f\\x0b\\x9d\\x05\\xfb\\xa0\\x06\\x0b\\xf7\\x72\\xf7\\x06\\x7f\\x1d\"\n\"\\x0b\\x15\\xdf\\xba\\xb9\\xc3\\xc3\\x1a\\xb3\\x72\\xaa\\x6a\\x6e\\x75\\x77\\x71\\x78\\x38\\x1d\\x70\\x56\\x68\\x1e\\x0e\\x9a\\xf8\\x24\\x15\\x8e\\x97\\x93\\x8c\"\n\"\\x96\\x1b\\xb4\\x9e\\x7b\\x55\\x9f\\x1f\\xa6\\x41\\xbf\\xfb\\x6a\\x65\\x1a\\x7b\\x84\\x7b\\x7d\\x78\\x1e\\x6f\\x66\\x74\\x6f\\x7f\\x7e\\x08\\x75\\x76\\x80\\x83\"\n\"\\x7e\\x1b\\x84\\x85\\x8e\\x93\\x80\\x1f\\x97\\x7c\\x81\\x90\\x7f\\x1b\\x75\\x7a\\x7a\\x75\\x71\\xa0\\x79\\xa9\\xcb\\xf7\\x16\\xf7\\x29\\xf7\\x5b\\xf7\\x01\\x1f\"\n\"\\xcf\\xf7\\x0f\\xa7\\xd3\\xbc\\x1a\\xa9\\x72\\xa4\\x6d\\x74\\x7b\\x7c\\x75\\x7b\\x93\\x81\\x9f\\x7e\\x1e\\x9e\\x80\\x92\\x82\\x7d\\x1a\\x63\\x67\\x3e\\x35\\xfb\"\n\"\\x22\\x1e\\x77\\xf7\\x08\\x05\\xe4\\x7c\\x53\\xf7\\x38\\x7c\\x1b\\x87\\x06\\x8a\\x89\\x88\\x8b\\x87\\x1b\\x83\\x8a\\x66\\x85\\x56\\x81\\x86\\x8a\\x7e\\x88\\x7d\"\n\"\\x89\\x08\\x0b\\xf8\\x60\\xf7\\x09\\x15\\x47\\x55\\x7f\\x80\\x7b\\x1b\\x82\\x84\\x92\\x94\\x93\\x8f\\x9e\\x95\\xaf\\x1f\\xc4\\xf7\\x62\\x05\\x90\\xa0\\x8f\\xa1\"\n\"\\x99\\x1a\\xb0\\xf7\\x04\\x1d\\xce\\xf7\\x6e\\x8a\\x1d\\x7f\\x85\\x6a\\x83\\x6c\\x1f\\x5f\\xfb\\x39\\x05\\x7e\\x57\\x88\\x7e\\x81\\x1a\\x65\\x99\\x7b\\xac\\xb8\"\n\"\\xa4\\x9f\\xe8\\xd1\\x1e\\x0b\\x37\\x1d\\xc3\\xc3\\x1a\\xb3\\x72\\xaa\\x6a\\x6e\\x75\\x77\\x71\\x78\\x38\\x1d\\x70\\x56\\x68\\x1e\\x0e\\x1b\\x90\\x9d\\x05\\xfb\"\n\"\\xa4\\x06\\x86\\x79\\x05\\x0b\\x8d\\x8e\\x82\\x1f\\x7b\\x91\\x81\\x99\\x0b\\xa5\\xa3\\xa9\\xaa\\x71\\xa5\\x6d\\x1f\\x0b\\x15\\xe0\\xba\\xb8\\x0b\\x91\\x81\\x9e\"\n\"\\x7a\\x1e\\x9a\\x7d\\x90\\x83\\x81\\x1a\\x70\\x75\\x0b\\xf8\\x6c\\x6d\\x1d\\x0b\\xf8\\xcb\\x9b\\x15\\x5f\\x8e\\x77\\x9c\\x78\\xbf\\x2e\\xf7\\x89\\x18\\xd8\\x9c\"\n\"\\xac\\x99\\xaf\\xab\\x08\\xac\\xa8\\x9d\\xb2\\xb8\\x1a\\xe8\\x41\\xbe\\xfb\\x1a\\x1e\\xfb\\x8c\\x7b\\x06\\xb5\\x85\\x90\\x8a\\x95\\x84\\x08\\x93\\x86\\x91\\x7f\"\n\"\\x80\\x1a\\x7f\\x86\\x73\\x84\\x70\\x1e\\xfb\\x0f\\xfc\\x4e\\x79\\x50\\x84\\x85\\x53\\x82\\x19\\x7b\\xf7\\x88\\x9b\\x07\\x4d\\x93\\x85\\x8f\\xae\\x1a\\x95\\x8d\"\n\"\\x95\\x95\\xb0\\x1e\\xc3\\xf7\\x65\\xcc\\x86\\xf7\\x0f\\xfb\\xd8\\x05\\xf7\\x28\\x06\\xfb\\x97\\xf8\\xe7\\x15\\xa0\\x91\\x98\\x92\\xab\\x1b\\xde\\xb4\\x66\\x3f\"\n\"\\x29\\x4b\\x58\\xfb\\x11\\x79\\x83\\x8c\\x8f\\x72\\x1f\\x0b\\xbc\\xf7\\xbd\\x15\\xbc\\xa2\\xb1\\xb8\\x9f\\x1b\\x93\\x91\\x84\\x80\\x84\\x89\\x84\\x86\\x77\\x1f\"\n\"\\x60\\xfb\\x36\\x05\\x83\\x6e\\x87\\x70\\x75\\x1a\\x4c\\xbc\\x5d\\xce\\xd0\\xcd\\xbd\\xde\\xb5\\x1e\\xad\\xcf\\xa4\\xee\\xd1\\x1a\\xbc\\x74\\xae\\x69\\x73\\x77\"\n\"\\x77\\x71\\x7a\\x90\\x80\\x9e\\x6f\\x1e\\xa4\\x68\\x92\\x78\\x6e\\x1a\\x63\\x78\\x50\\x6d\\x58\\x1e\\x50\\x68\\x5d\\x68\\x61\\x1b\\x68\\x74\\xa9\\xb7\\x9f\\x92\"\n\"\\xb3\\x96\\xb5\\x1f\\xb3\\xf7\\x28\\x05\\x8e\\x97\\x8f\\xa5\\x96\\x1a\\xab\\x77\\xa3\\x70\\x5b\\x58\\x5a\\x31\\x5f\\x1e\\x0b\\xf7\\xf2\\xf5\\x15\\x50\\x54\\x64\"\n\"\\x75\\x5a\\x1b\\x52\\x69\\xb5\\xd3\\xe0\\xae\\xe5\\xc3\\xc5\\x1f\\xa9\\xa8\\xb3\\x9d\\xb3\\x1b\\xa2\\x99\\x83\\x7f\\x86\\x89\\x86\\x87\\x82\\x1f\\x84\\x7e\\x89\"\n\"\\x85\\x81\\x1a\\x73\\x9a\\x7d\\xa3\\xa7\\x9f\\x9e\\xa6\\xba\\x5f\\xad\\x4e\\xfb\\x2a\\xfb\\x20\\xfb\\x26\\xfb\\x30\\x2c\\xc1\\x54\\xe8\\xd6\\xc0\\xa9\\xd8\\xc8\"\n\"\\x1e\\x0b\\x84\\x1d\\xad\\xa7\\xec\\xcc\\x1e\\x0b\\x15\\x4c\\x72\\x5b\\x67\\x4d\\x1b\\x4b\\x64\\xaf\\xca\\x86\\x1f\\x6e\\x06\\xfb\\x00\\x8c\\xb4\\x59\\xe3\\x1b\"\n\"\\xc1\\xb9\\x5a\\x1d\\x05\\xd4\\x9e\\x9d\\x99\\xd4\\x34\\x1d\\xa3\\x98\\x8a\\x87\\x94\\x1f\\x9b\\x85\\x95\\x7d\\x7b\\x1a\\x7e\\x89\\x7e\\x87\\x7d\\x55\\x1d\\x0b\"\n\"\\x37\\x1d\\xc2\\xc4\\x1a\\xb3\\x72\\xaa\\x6a\\x6e\\x75\\x77\\x71\\x78\\x38\\x1d\\x71\\x56\\x67\\x1e\\x0e\\x7c\\x1b\\x77\\x7c\\x7c\\x78\\x7f\\x91\\x81\\x98\\x81\"\n\"\\x1f\\x0e\\x6f\\x75\\x76\\x70\\x70\\xa2\\x74\\xa7\\xa6\\xa1\\xa0\\xa6\\xa6\\x74\\xa2\\x70\\x1f\\x0b\\x1f\\x86\\x83\\x8a\\x86\\x83\\x1a\\x73\\x9a\\x7b\\xa1\\xa2\"\n\"\\x0b\\x1b\\xd1\\xbc\\xaf\\xbd\\xb5\\x6b\\xa5\\x59\\x0b\\x3b\\x06\\xa7\\xf2\\x05\\x8c\\x8d\\x8b\\x8d\\x0b\\x06\\x80\\x58\\x05\\xf7\\xc1\\x06\\x0e\\x8a\\x89\\x82\"\n\"\\x1f\\x0e\\x08\\x91\\x88\\x8f\\x83\\x83\\x1a\\x0b\\x7a\\x4e\\x8a\\x20\\x1d\\x0b\\x1b\\xa6\\x9e\\x79\\x71\\x71\\x78\\x7c\\x69\\x0b\\x1e\\xf7\\x0e\\xf8\\x5d\\x05\"\n\"\\x0b\\x79\\x05\\xc2\\x8a\\x9c\\x81\\x0b\\x1a\\x80\\x89\\x7c\\x87\\x7d\\x1e\\x0b\\xf8\\xd2\\xf8\\x8d\\x15\\x20\\xfc\\x24\\x79\\x46\\x78\\x7a\\x4e\\xf3\\x1d\\x05\"\n\"\\x54\\x8c\\x7a\\x96\\xaa\\x1a\\x96\\x8d\\x97\\x8f\\x9b\\x1e\\xf7\\x0f\\xf8\\x5d\\x05\\xd3\\x9d\\x9e\\x9a\\xd4\\x21\\x1d\\xfb\\xa4\\x06\\x86\\x67\\x1d\\x78\\x1a\"\n\"\\x85\\x8b\\x87\\x89\\x81\\x1e\\xfc\\x13\\xfc\\x2f\\xf3\\xf8\\x18\\x05\\xd4\\x9e\\x9d\\x99\\xd4\\x21\\x1d\\xfb\\xa4\\x66\\x1d\\x7c\\x87\\x7f\\x9d\\x1d\\x9c\\x1a\"\n\"\\x96\\x8d\\x97\\x8e\\x98\\x1e\\x0b\\xa0\\x1d\\x43\\xfb\\xa7\\x89\\x82\\x8a\\x87\\x93\\x1d\\xe3\\xf7\\xe1\\x05\\xdf\\x06\\x0b\\xf9\\x0d\\xf9\\x21\\x15\\xfc\\xa8\"\n\"\\x06\\x61\\xfb\\x2e\\x9d\\x87\\xc0\\xf7\\x00\\xac\\x9c\\xf7\\x2c\\x89\\x19\\xfb\\x24\\xfc\\xa4\\x64\\x1d\\xf7\\xb6\\x9b\\x07\\x35\\x92\\x87\\x8d\\xb0\\x1a\\x97\"\n\"\\x8d\\x95\\x95\\xaf\\x1e\\xf7\\x1f\\xf8\\x86\\x05\\xc2\\x06\\xd3\\xab\\x72\\x53\\x7e\\x8a\\x7c\\x89\\x7a\\x1f\\x9c\\x89\\x05\\x0b\\x79\\x51\\x84\\x85\\x53\\x81\"\n\"\\x19\\x7b\\xf7\\x8a\\x9b\\x07\\x4f\\x93\\x80\\x92\\xa8\\x1a\\x92\\x8c\\x93\\x8d\\x92\\x1e\\xcd\\xf7\\x88\\x05\\xf7\\xb1\\x06\\x4a\\xfb\\x80\\x7b\\x57\\x77\\x7c\"\n\"\\x4a\\x84\\x19\\x7b\\xf7\\xa5\\x9b\\x07\\x4a\\x91\\x7e\\x93\\xa8\\x1a\\x94\\x8c\\x91\\x8d\\x93\\x1e\\x0b\\x15\\x6a\\x80\\x7e\\x8e\\x1d\\xaf\\xcf\\x99\\x1f\\x0e\"\n\"\\x98\\x1d\\xf7\\x46\\xb9\\x1d\\x88\\x1d\\xb9\\x0b\\x1e\\xfb\\x0e\\xfc\\x5e\\x7a\\x47\\x77\\x79\\x4e\\x8a\\x20\\x1d\\xf7\\x97\\x06\\x0b\\x15\\xae\\x06\\xf7\\x3f\"\n\"\\xf5\\x05\\x97\\x92\\x90\\x94\\x97\\x1a\\xa0\\x7b\\x9a\\xd6\\x1d\\x8d\\x95\\x4a\\x1d\\x76\\x79\\x8f\\x96\\x6e\\x1f\\x7a\\x6e\\x05\\x7b\\x0b\\xf1\\x1d\\xfb\\xa3\"\n\"\\x06\\x86\\x4c\\x1d\\x0b\\x16\\x72\\x77\\x78\\x73\\x72\\xa0\\x76\\xa4\\xa4\\x9e\\x9e\\xa3\\xa4\\x76\\xa0\\x73\\x1f\\x0e\\xa3\\xb7\\xac\\x1f\\x9f\\xa6\\x94\\xa0\"\n\"\\x94\\xb5\\x08\\x0e\\x6f\\xa0\\x75\\xa7\\xa6\\xa1\\xa1\\xa6\\xa4\\x74\\xa3\\x72\\x1f\\x0b\\xf7\\x01\\x1d\\xa2\\xad\\x7c\\xb8\\x1b\\xc0\\xba\\xa3\\xb7\\xac\\x1f\"\n\"\\x9f\\x0b\\xbf\\xd4\\xb4\\x7e\\xa0\\x56\\xba\\x1e\\x72\\xa1\\x15\\x0b\\x8d\\x08\\x48\\x06\\xd1\\xf7\\x97\\x05\\x0b\\x15\\xae\\x06\\xf7\\x3f\\xf5\\x05\\x97\\x92\"\n\"\\x90\\x94\\x97\\x1a\\x9f\\x7b\\x9b\\x0b\\x4e\\x8a\\x20\\x1d\\xf7\\x93\\x06\\x0b\\x58\\x62\\x4e\\x6b\\x97\\x76\\xb3\\x67\\x1e\\x0b\\x69\\x73\\x08\\x69\\x5c\\x4c\"\n\"\\x78\\x47\\x1b\\x0b\\x06\\x7b\\x83\\x81\\x85\\x77\\x1b\\x82\\x80\\x8d\\x90\\x76\\x1f\\x96\\x0b\\x7b\\x56\\x73\\x7b\\x49\\x86\\x19\\x7b\\x0b\\x81\\x83\\x88\\x84\"\n\"\\x85\\x1e\\x0b\\x06\\x86\\x4c\\x1d\\x6a\\x1a\\x81\\x89\\x0b\\x79\\x05\\xa7\\x92\\x8a\\x87\\x96\\x1f\\x9b\\x86\\x95\\x7c\\x0b\\x1f\\x7b\\x91\\x81\\x99\\x9c\\x1a\"\n\"\\x0b\\xf9\\x21\\x15\\xfb\\x5b\\x7b\\x06\\x0b\\x81\\x82\\x1b\\x83\\x83\\x92\\x93\\x95\\x8e\\x9b\\x0b\\x1f\\xa8\\x06\\xab\\x95\\x9b\\x9a\\xa4\\x1b\\x9c\\x0b\\xf9\"\n\"\\x2d\\x15\\x92\\xa6\\x05\\xfb\\xaa\\x06\\x84\\x70\\x05\\x97\\x06\\xb9\\x9c\\x80\\x6b\\x80\\x8a\\x83\\x86\\x7a\\x1f\\x27\\x87\\x51\\x7d\\x50\\x68\\x08\\x2e\\x55\"\n\"\\x4b\\xfb\\x00\\x23\\x1a\\x4a\\xa7\\x58\\xbf\\x6e\\x1e\\xb5\\x73\\xb9\\x82\\xd9\\x8a\\x88\\x7e\\x18\\x7b\\x50\\x74\\x79\\x4f\\x8a\\x08\\x80\\x06\\x84\\x70\\x05\"\n\"\\xf7\\xaa\\x06\\x92\\xa6\\x05\\x80\\x06\\x5c\\x79\\x96\\xab\\x96\\x8b\\x8c\\x91\\xa2\\x1f\\x8e\\x98\\xf7\\x12\\x94\\xc4\\x9c\\xcb\\xbb\\x19\\xda\\xc6\\xbf\\xf0\"\n\"\\xed\\x1a\\xc6\\x71\\xba\\x5d\\xa5\\x1e\\x63\\xa1\\x5b\\x94\\x32\\x8e\\x08\\xc5\\x97\\xa5\\xa0\\xc7\\x1b\\xfb\\xd1\\xfc\\xb6\\x15\\x5f\\x8d\\x78\\x90\\x71\\x97\"\n\"\\x08\\x5e\\xa1\\x79\\xab\\xc4\\x1a\\xe7\\xb3\\xef\\xc3\\xbe\\x1e\\xb7\\xb1\\xbe\\x9e\\xd5\\x92\\x08\\xee\\x8d\\x15\\xf5\\x80\\xba\\x61\\x37\\x1a\\x46\\x6e\\x36\"\n\"\\x63\\x57\\x1e\\x5b\\x4e\\x59\\x73\\x28\\x80\\x08\\x0e\\xf8\\x29\\x15\\x4e\\x06\\x88\\x86\\x8d\\x91\\x83\\x1f\\x9d\\x70\\x6a\\x95\\x65\\x1b\\xfb\\x03\\x31\\x3e\"\n\"\\x2d\\x57\\xa0\\x6d\\xc5\\x71\\x1f\\x50\\x63\\x79\\x77\\x73\\x1a\\x7e\\x93\\x7f\\x9e\\x7d\\x1e\\x28\\x4a\\x79\\x77\\x5d\\x1a\\x46\\xcd\\x5e\\xf0\\xf7\\x12\\xdf\"\n\"\\xc6\\xe2\\xca\\x5c\\xb6\\x2b\\xa5\\x1e\\x5f\\x96\\x71\\x9b\\x9a\\x1a\\x9a\\xa2\\xa5\\x98\\x8d\\x8d\\x8b\\x8a\\x8e\\x1e\\x89\\x94\\x96\\x8a\\x96\\x1b\\xe7\\xe8\"\n\"\\xdc\\xd9\\x9c\\x88\\x9c\\x85\\xa1\\x1f\\xbd\\x06\\xfb\\xd8\\xfb\\xe6\\x15\\x8c\\x8d\\x8a\\x8a\\x8d\\x1f\\x8e\\x8a\\x95\\x88\\x9b\\x86\\x08\\xf6\\x69\\xaf\\x70\"\n\"\\x5d\\x1a\\x55\\x51\\x63\\x3e\\x3b\\x5c\\xb1\\xcb\\xa3\\x91\\x9c\\x9b\\x9e\\x1e\\x9d\\x99\\xb4\\xab\\x93\\x1b\\xf7\\x28\\xf8\\x1b\\x15\\xb0\\x9e\\x73\\x5c\\x67\"\n\"\\x7f\\x60\\x78\\x69\\x1f\\x62\\x75\\x6c\\x75\\x69\\x1b\\x65\\x75\\xa7\\xba\\xe7\\xc4\\xdb\\xcc\\x1f\\x0b\\x15\\xf7\\xa1\\x06\\x4f\\xfb\\x75\\x79\\x45\\x78\\x7b\"\n\"\\x49\\x8a\\x20\\x1d\\xf7\\x9e\\x06\\x90\\x9d\\x05\\x73\\x7d\\x35\\x1d\\x9c\\x1a\\x98\\x8d\\x97\\x8f\\x9a\\x4b\\x1d\\xd3\\x9e\\x9d\\x9a\\xd0\\x1b\\x90\\x2e\\x1d\"\n\"\\x86\\x79\\x05\\xc0\\x9e\\x80\\x6d\\x7e\\x89\\x7e\\x87\\x7d\\x1f\\x57\\xfb\\x58\\x05\\xfb\\xa1\\x06\\xbe\\xf7\\x52\\x3f\\x1d\\x90\\x9d\\x05\\x73\\x7e\\x35\\x1d\"\n\"\\x9b\\x1a\\x95\\x8d\\x9b\\x8f\\x9a\\x1e\\x0e\\xf9\\x66\\xf9\\x21\\x15\\xfb\\x72\\x7b\\x06\\x97\\x8a\\x94\\x8a\\x91\\x8a\\x97\\x8a\\x95\\x89\\x91\\x87\\x08\\x8e\"\n\"\\x89\\x8e\\x86\\x86\\x1a\\x73\\x54\\x55\\x32\\x4d\\x1e\\xfb\\x2c\\x21\\xc0\\xf7\\x56\\x9a\\xbd\\xa6\\x9f\\xc6\\x8f\\x19\\x9b\\xfb\\xa5\\x7b\\x07\\xca\\x85\\x99\"\n\"\\x83\\x6e\\x1a\\x7c\\x88\\x77\\x83\\x70\\x1e\\xfb\\x0f\\xfc\\x4e\\x79\\x4f\\x86\\x86\\x50\\x82\\x19\\x7b\\xf7\\x8c\\x9b\\x07\\x4c\\x92\\x82\\x91\\xaa\\x1a\\x96\"\n\"\\x8c\\x92\\x92\\xa0\\x1e\\x8d\\x91\\x8d\\x92\\x8d\\x93\\xc9\\xf7\\x78\\x18\\xf7\\x0d\\xfb\\x64\\x05\\xa3\\x62\\x99\\x68\\x78\\x1a\\x7c\\x7d\\x83\\x6b\\x88\\x1e\"\n\"\\x86\\x80\\x8a\\x89\\x7e\\x1f\\x7b\\xf7\\xa7\\x9b\\x07\\x4c\\x91\\x85\\x8e\\x6f\\xba\\xfb\\x42\\xf7\\xc3\\x18\\xf7\\xc0\\xf7\\x76\\xa7\\xa0\\xa2\\x96\\xa3\\x8f\"\n\"\\x19\\x0b\\xf8\\x40\\xf8\\xbe\\x15\\x69\\x06\\x54\\xfb\\x06\\x05\\x8c\\x83\\x87\\x8b\\x83\\x1b\\xfb\\x21\\xfb\\x2a\\xfb\\x34\\xfb\\x2b\\x64\\x98\\x67\\xa3\\x72\"\n\"\\x1f\\x9a\\x7b\\x98\\x83\\xaa\\x81\\x4b\\xfb\\x17\\x18\\xae\\x06\\xc8\\xf7\\x12\\x05\\x8a\\x91\\x91\\x8a\\x93\\x1b\\xc9\\xc7\\xa6\\xbf\\xc4\\x1f\\xd1\\xcc\\xb7\"\n\"\\xe4\\xd6\\x1a\\xa7\\x83\\xab\\x7e\\xa1\\x1e\\x79\\xa9\\x78\\x99\\x62\\x97\\x08\\xfb\\x7a\\xfc\\x2a\\x15\\x78\\x9e\\x82\\xa0\\xa7\\x1a\\xea\\xb8\\xf7\\x04\\xcd\"\n\"\\xd1\\x1e\\xa8\\xa6\\xae\\x9c\\xac\\x1b\\x8e\\x8d\\x8a\\x8a\\x90\\x1f\\xa8\\x7f\\x15\\x9e\\x76\\x94\\x72\\x68\\x1a\\x41\\x6b\\x28\\x5e\\x4a\\x1e\\x56\\x66\\x66\"\n\"\\x73\\x5e\\x1b\\x82\\x86\\x8c\\x8e\\x83\\x1f\\x0b\\xf8\\x65\\xf7\\x09\\x15\\x48\\x55\\x7f\\x7f\\x7b\\x1b\\x82\\x84\\x93\\x95\\x96\\x9b\\xc9\\x9c\\xbf\\x1f\\xa8\"\n\"\\xe8\\x9e\\xd6\\xa4\\x1a\\xb3\\x70\\xa6\\x64\\x4a\\x44\\x4a\\xfb\\x26\\x2e\\x1e\\xf7\\x0c\\xf8\\x54\\x86\\x90\\x4f\\x7d\\x64\\x85\\x51\\x84\\x19\\x7b\\x07\\xa5\"\n\"\\x8c\\x05\\xa2\\x8c\\x9d\\x80\\x7c\\x1a\\x7d\\x86\\x73\\x82\\x6e\\x1e\\x8a\\x89\\x87\\x7d\\x86\\x76\\xfb\\x1b\\xfc\\x94\\x18\\xd6\\x06\\xb3\\xf7\\x2e\\x98\\xad\"\n\"\\xb3\\xc8\\x08\\xda\\xbf\\xcf\\xc9\\xae\\x1b\\x9a\\x98\\x7f\\x7e\\x87\\x88\\x7e\\x87\\x7b\\x1f\\x54\\xfb\\x63\\x05\\x7e\\x5a\\x84\\x6c\\x7f\\x1a\\x71\\x9c\\x7b\"\n\"\\xa7\\xbd\\xae\\xa6\\xe2\\xc7\\x1e\\x0e\\xf8\\x32\\xf7\\x01\\x15\\x4d\\x67\\x85\\x85\\x79\\x1b\\x76\\x76\\xac\\xeb\\x64\\x1f\\x86\\x98\\x7c\\xaf\\x7a\\xb2\\xf7\"\n\"\\x28\\xf7\\x17\\xa8\\x9f\\xbb\\x8e\\x08\\x9b\\xfb\\x4b\\x7b\\x07\\xb6\\x8a\\x97\\x87\\x7e\\x1a\\x77\\x59\\x5b\\x2e\\x43\\x1e\\x7c\\x80\\x7d\\x80\\x7d\\x80\\xf7\"\n\"\\x0c\\xf8\\x5d\\x18\\xe1\\x1d\\x8c\\x9d\\x84\\x8c\\x78\\x89\\x7a\\x84\\x70\\x7e\\x5d\\x87\\x7d\\x88\\x80\\x89\\x83\\x89\\x82\\x18\\xfb\\x13\\xfc\\x77\\x05\\xd6\"\n\"\\x06\\xbb\\xf7\\x48\\xb5\\xab\\x9b\\x5f\\xa5\\x4d\\x9d\\x68\\x19\\x4c\\xab\\x9d\\x78\\xa8\\x1b\\xb3\\xa4\\xa4\\xdf\\xb9\\x1f\\x0b\\xf8\\x61\\xf7\\x09\\x15\\x49\"\n\"\\x56\\x7d\\x7e\\x7b\\x1b\\x84\\x87\\x91\\x96\\x91\\x8b\\x8b\\x9e\\xd3\\x1f\\xda\\xf7\\xbf\\x05\\x41\\x06\\x55\\xfb\\x28\\x80\\x73\\x5e\\x43\\xf2\\x1d\\x9b\\x8e\"\n\"\\x8b\\x8d\\x8c\\x8e\\x1f\\xe6\\xf7\\xff\\x88\\x8d\\x50\\x7d\\x67\\x85\\x54\\x84\\x19\\x7d\\x07\\xb1\\x8d\\x8a\\x86\\x94\\x1f\\x91\\x89\\x90\\x82\\x84\\x1a\\x83\"\n\"\\x86\\x72\\x82\\x69\\x1e\\x66\\xfb\\x22\\x05\\x78\\x42\\x85\\x6b\\xd4\\x1d\\xfb\\x02\\x7c\\x4a\\xea\\x1d\\x0b\\xf7\\x72\\xf8\\x51\\x76\\x1d\\x0b\\xf8\\x08\\xf7\"\n\"\\xcb\\x15\\xf7\\x38\\xf7\\x76\\x05\\xd5\\xc0\\xb9\\xac\\xbf\\x1b\\x91\\x9d\\x05\\xfb\\x73\\x06\\x85\\x79\\x05\\x9c\\x06\\xac\\x9e\\x81\\x79\\x80\\x86\\x80\\x7b\"\n\"\\x74\\x1f\\xfb\\x2b\\xfb\\x6a\\x4c\\xf7\\x6a\\x05\\x84\\xa1\\x8a\\x90\\x92\\x1a\\xa6\\xa0\\x97\\xb6\\x1e\\xa0\\x06\\x8f\\x9d\\x05\\xfb\\xae\\x06\\x85\\x79\\x05\"\n\"\\xa0\\x06\\xb8\\x8d\\xa5\\x75\\x9b\\xe9\\x1d\\x40\\x8c\\x19\\x85\\x79\\x05\\xf7\\xb5\\x06\\x90\\x9d\\x05\\x72\\x7a\\x8c\\x8d\\x82\\x1f\\x76\\x90\\x7f\\x99\\x9f\"\n\"\\x1a\\x97\\x8d\\x98\\x8f\\x9a\\x1e\\x0b\\x15\\x5a\\x7f\\x52\\x81\\x61\\x89\\x86\\x78\\x18\\x8e\\x9b\\x93\\x8c\\x94\\x1b\\x9e\\x93\\x84\\x79\\x81\\x89\\x80\\x86\"\n\"\\x77\\x1f\\x51\\xfb\\x6d\\x05\\x82\\x6a\\x89\\x7f\\x79\\x1a\\x62\\xa2\\x6d\\xab\\xc6\\xd8\\xd1\\xf7\\x15\\xdf\\x1e\\x6d\\xfb\\x01\\x05\\x85\\x1d\\x0b\\x4b\\x1d\"\n\"\\x8b\\x1d\\xb5\\x92\\x8c\\x94\\x8c\\x90\\x1f\\xb1\\xf7\\x21\\x58\\x1d\\x6a\\x1a\\x81\\x89\\x7f\\x87\\x7c\\x1e\\x69\\xfb\\x12\\x05\\x86\\x76\\x89\\x80\\x7d\\x1a\"\n\"\\x4a\\xbe\\x67\\xe8\\xc1\\xc1\\x93\\x9e\\xce\\x1e\\x0b\\xf8\\x61\\xf7\\x09\\x15\\x49\\x56\\x7d\\x7e\\x7b\\x1b\\x84\\x87\\x91\\x96\\x91\\x8b\\x8b\\x9e\\xd3\\x1f\"\n\"\\xda\\xf7\\xbf\\x05\\x41\\x06\\x55\\xfb\\x28\\x80\\x72\\x5e\\x44\\xf2\\x1d\\x9a\\x8e\\x8b\\x8e\\x8c\\x8e\\x1f\\xe6\\xf7\\xff\\x88\\x8d\\x51\\x7d\\x66\\x85\\x54\"\n\"\\x84\\x19\\x7d\\x07\\xb3\\x8a\\x8b\\x8b\\x95\\x86\\x08\\x90\\x89\\x90\\x82\\x84\\x1a\\x82\\x86\\x73\\x82\\x69\\x1e\\x66\\xfb\\x22\\x05\\x78\\x41\\x85\\x6c\\xd4\"\n\"\\x1d\\x0b\\xf7\\x16\\xf9\\x11\\x15\\xca\\x85\\x99\\x83\\x70\\x1a\\x7c\\x87\\x73\\x84\\x72\\x1e\\xfb\\x0f\\xfc\\x4e\\x79\\x51\\x84\\x99\\x1d\\x06\\xf7\\x4b\\x50\"\n\"\\x15\\xa1\\x91\\x9a\\x92\\xb3\\x1b\\xc4\\xbd\\x7e\\x73\\xab\\x1f\\xbc\\x68\\xa6\\x4b\\x3d\\x1a\\xfb\\x02\\x61\\xfb\\x03\\x47\\x47\\x1e\\x4f\\x50\\x3a\\x6d\\x23\"\n\"\\x1b\\x5d\\x78\\x96\\xa5\\x98\\x90\\x9f\\x9c\\xc9\\x1f\\x0b\\xf7\\x6e\\xf8\\x51\\x15\\x59\\x7f\\x53\\x82\\x62\\x88\\x86\\x78\\x18\\x8e\\x9b\\x92\\x8c\\x94\\x1b\"\n\"\\x9e\\x93\\x84\\x7a\\x80\\x89\\x7f\\x86\\x78\\x1f\\x30\\xfb\\xe8\\x05\\xd3\\x06\\xc5\\xf7\\x6c\\x05\\x98\\x8c\\x91\\x8c\\x8b\\x1a\\x98\\x96\\x85\\x80\\x92\\x1f\"\n\"\\x93\\x81\\x8d\\x85\\x98\\x5e\\x08\\xfb\\x03\\xac\\xa7\\x63\\xb9\\x1b\\xb3\\xad\\xad\\xec\\xc4\\x1f\\x7b\\x94\\x05\\x55\\x69\\x75\\x78\\x6f\\x1b\\x74\\x81\\x98\"\n\"\\xc1\\x7b\\x1f\\x77\\xd4\\x73\\xab\\x63\\x92\\x0b\\x15\\x86\\xfb\\x09\\x82\\x1d\\xeb\\xf7\\x1e\\x05\\xf7\\x48\\xaf\\x15\\xfb\\x2f\\x06\\xf7\\x39\\xf7\\x80\\x05\"\n\"\\x0e\\xb3\\xf7\\x5b\\x05\\x74\\x06\\x76\\x7d\\x82\\x86\\x75\\x1b\\x7e\\x7f\\x8e\\x93\\x76\\x1f\\x94\\x76\\x6a\\x90\\x6c\\x1b\\x23\\x41\\x46\\x29\\x55\\x9a\\x6e\"\n\"\\xc7\\x4b\\x1f\\x90\\x87\\x9c\\x78\\x9c\\x78\\x9b\\x7a\\x9a\\x7b\\x93\\x82\\x08\\xba\\x5a\\x98\\x71\\x60\\x1a\\x40\\x54\\x51\\x41\\x37\\x4d\\xd2\\xed\\x92\\x8b\"\n\"\\x8f\\x8d\\x94\\x1e\\x77\\x8d\\x69\\xfb\\x73\\x05\\x9d\\x06\\xa2\\x92\\x96\\x95\\x9f\\x1b\\x96\\x9a\\x87\\x82\\xa5\\x1f\\x0b\\xf8\\x65\\x15\\xb0\\xf7\\x5b\\x05\"\n\"\\x76\\x63\\x1d\\x5f\\x63\\x91\\x6a\\x1b\\xfb\\x6a\\xfb\\x54\\xfb\\x5c\\xfb\\x73\\xfb\\x2d\\xf7\\x00\\xfb\\x00\\xf7\\x2d\\xf2\\xdb\\xb6\\xf5\\xe5\\x94\\x1d\\x0b\"\n\"\\xf8\\x07\\xf7\\x03\\x15\\x4f\\x42\\x6b\\x7b\\x5f\\x1b\\x52\\x66\\xaf\\xc2\\x9b\\x8d\\x94\\x94\\xb1\\x1f\\xa7\\x8f\\x05\\xf7\\x2d\\xa0\\xf7\\x00\\xd9\\xe2\\x1a\"\n\"\\xb5\\x6d\\xa5\\x59\\xfb\\x27\\xfb\\x35\\xfb\\x3c\\xfb\\x2d\\x3a\\xc1\\x53\\xda\\xd2\\xda\\xb4\\xcf\\xc7\\x1e\\xfb\\x6f\\xf7\\x32\\x15\\xe5\\xae\\xd7\\xd9\\xbe\"\n\"\\x1b\\xa0\\x99\\x7c\\x74\\x6b\\x78\\x65\\x6b\\x6d\\x1f\\x65\\x67\\x65\\x7a\\x33\\x75\\x08\\x0b\\x15\\x72\\x6a\\x85\\x83\\x81\\x81\\x08\\x7a\\x7a\\x7c\\x6a\\x1d\"\n\"\\x92\\x9d\\x1f\\x90\\x9d\\x8c\\x8d\\x05\\x8d\\x07\\x9e\\x1d\\x4f\\x85\\x6e\\x77\\x1a\\x66\\x9b\\x77\\xa9\\xba\\xaf\\xa9\\xdf\\xc4\\x1e\\x0b\\x1a\\x7f\\x89\\x88\"\n\"\\x6d\\x65\\x1e\\xfc\\x05\\xfc\\x65\\x5b\\x4f\\x7f\\x81\\x73\\x85\\x19\\x7b\\xf7\\x4f\\x9b\\x07\\x56\\x91\\x80\\x90\\x9f\\x1a\\xa2\\xb2\\xc8\\xc8\\xd4\\x1e\\x8f\"\n\"\\x8f\\x95\\x97\\x96\\x99\\x08\\xf7\\x52\\x06\\x5a\\xfb\\x3e\\x7f\\x66\\x84\\x86\\x4e\\x85\\x19\\x7b\\xf8\\x86\\x07\\xcb\\xf7\\x38\\x05\\xfc\\xe7\\xf6\\x15\\xf7\"\n\"\\xa0\\xf7\\xea\\x2c\\xfb\\xea\\x05\\x0b\\x24\\x1d\\xf7\\x5c\\x16\\x6f\\x75\\x76\\x70\\x5b\\x1d\\x0b\\x05\\x4f\\x88\\x80\\x7e\\x5c\\x1b\\x74\\x25\\x1d\\xf7\\x9c\"\n\"\\x06\\x90\\x9d\\x05\\x74\\x06\\x5a\\x7c\\x97\\xb3\\x90\\x8b\\x8b\\x8c\\xa8\\x1f\\xa2\\xf8\\xc2\\x05\\x7a\\x06\\xfc\\x2a\\xfc\\xcf\\x5c\\x4c\\x7c\\x80\\x68\\x8c\"\n\"\\x19\\x80\\x22\\x1d\\xf7\\x5a\\x06\\x8f\\x9d\\x05\\x78\\x06\\x6d\\x7c\\x94\\x9d\\x91\\x8f\\x95\\x91\\x94\\x1f\\x0b\\xf7\\xca\\xf8\\x50\\x15\\xfb\\x14\\xfb\\x12\"\n\"\\xfb\\x23\\xfb\\x26\\x28\\xf7\\x02\\x1d\\xc4\\xb1\\xdd\\xdd\\x1a\\xec\\x51\\xd0\\x3b\\x1e\\x82\\x72\\xb5\\x1d\\xd6\\xa5\\xe8\\xb3\\xc9\\x1f\\xbb\\xa9\\xb0\\xa5\"\n\"\\xb2\\x1b\\x0b\\xf7\\x0f\\x15\\x38\\x4a\\x83\\x83\\x75\\x1b\\x81\\x86\\x91\\x97\\x93\\x8e\\x98\\x90\\x9d\\x1f\\x8c\\x8f\\x8c\\x8e\\x8c\\x1a\\x8d\\x07\\xf7\\x2b\"\n\"\\xf8\\xd7\\x86\\x90\\x4f\\x7d\\x65\\x85\\x51\\x84\\x19\\x7b\\x07\\xbb\\x9f\\x85\\x7a\\x87\\x8a\\x85\\x89\\x83\\x1f\\xfb\\x1e\\xfc\\xa4\\x05\\x88\\x81\\x8a\\x82\"\n\"\\x84\\x1a\\x66\\x9c\\x78\\xab\\xbf\\x0b\\x87\\x7a\\x88\\x79\\x7e\\x1a\\x72\\x99\\x7a\\xa1\\xae\\xb7\\xae\\xd3\\xc4\\x1e\\x7d\\x97\\x05\\x68\\x6f\\x76\\x79\\x7e\"\n\"\\x1b\\x83\\x86\\x93\\x97\\x92\\x8c\\x93\\x8d\\x92\\x1f\\xe3\\xf7\\xe5\\x05\\x43\\x06\\x75\\x3d\\x05\\xfb\\x24\\x62\\xfb\\x05\\xfb\\x31\\x4c\\x1b\\x7b\\x82\\x97\"\n\"\\x9f\\x93\\x8c\\x92\\x8f\\x99\\x1f\\x0b\\xf7\\x23\\xfb\\x8d\\x05\\x96\\x78\\x91\\x7a\\x7f\\x1a\\x76\\x7b\\x82\\x5e\\x87\\x1e\\x85\\x79\\x05\\xf7\\xa1\\x06\\x91\"\n\"\\x9d\\x4c\\x8a\\x6d\\xa2\\x59\\xe5\\x19\\xfb\\x21\\xf7\\x93\\xf7\\x9c\\xf7\\x6b\\xb6\\xac\\xa4\\x95\\xb3\\x8c\\x19\\x91\\x9d\\x05\\xfb\\x5d\\x22\\x1d\\xb0\\x8c\"\n\"\\x98\\x86\\x7e\\x1a\\x0b\\x91\\xa3\\x9a\\x08\\xab\\xa0\\x9d\\xa9\\xaf\\x1a\\xca\\x57\\xaf\\x32\\x52\\x63\\x7e\\x70\\x6e\\x1e\\x79\\x79\\x7f\\x73\\x77\\x1a\\x70\"\n\"\\x9d\\x77\\xa3\\xa1\\x9f\\x9d\\x9f\\x93\\x86\\x94\\x82\\x94\\x1e\\x80\\x96\\x89\\x8f\\x93\\x1a\\xa0\\xae\\x9b\\xbb\\xc2\\xa9\\x72\\x5d\\x4e\\x58\\x64\\x3a\\x1e\"\n\"\\x79\\x06\\x0b\\x1b\\x7f\\x85\\x8f\\x92\\x8f\\x8c\\x8d\\x8f\\x90\\x1f\\x91\\x93\\x8d\\x90\\x93\\x1a\\xa0\\x79\\x9b\\x74\\x74\\x7a\\x79\\x73\\x67\\xac\\x72\\x0b\"\n\"\\xbf\\x78\\xb5\\x67\\xa6\\x1f\\x79\\x98\\x7c\\x92\\x68\\x95\\xc3\\x99\\xa4\\x95\\xa8\\xa2\\x08\\xb5\\xab\\xa0\\xb6\\xbe\\x1a\\xe1\\x49\\xc4\\x27\\x68\\x7c\\x88\"\n\"\\x7a\\x59\\x1e\\x86\\x7b\\x82\\x89\\x84\\x1b\\x7c\\x83\\x94\\x9d\\x1f\\x7b\\x06\\x64\\xfb\\x4e\\x05\\x0b\\x88\\x8d\\x56\\x80\\x75\\x87\\x34\\x7b\\x19\\x7b\\x07\"\n\"\\xbe\\x8a\\x98\\x85\\x77\\x1a\\x85\\x8a\\x85\\x8a\\x86\\x1e\\x2b\\xfb\\xf2\\x05\\xd6\\x06\\xba\\xf7\\x32\\x94\\xa1\\xb7\\xcf\\x08\\xe7\\xc7\\xbe\\xbd\\xb0\\x1b\"\n\"\\x9a\\x94\\x80\\x79\\x0b\\xd4\\x9e\\x9d\\x99\\xd5\\x21\\x1d\\xfb\\xa5\\x25\\x1d\\xa6\\x93\\x8a\\x87\\x96\\x1f\\x9b\\x86\\x95\\x7c\\x79\\x1a\\x80\\x89\\x7f\\x87\"\n\"\\x7c\\x1e\\x54\\xfb\\x65\\x05\\x7b\\x57\\x61\\x84\\x61\\x1b\\x4a\\x6a\\xa1\\x0b\\x96\\x1d\\xfc\\x5f\\x7a\\x47\\x78\\x7a\\x4d\\x8a\\x20\\x1d\\x0b\\xf9\\x5c\\xf7\"\n\"\\x27\\x15\\x54\\x06\\xda\\xf7\\x97\\x05\\x67\\x06\\xfb\\xa3\\xfb\\x97\\x7e\\x61\\x05\\xf7\\x3c\\x06\\x6b\\x22\\x05\\xca\\x06\\xa9\\xf3\\x05\\xc5\\x06\\x59\\xf7\"\n\"\\x79\\x15\\x4f\\xfb\\x4e\\x05\\xfb\\x15\\x06\\x0b\\xc9\\x1d\\x6f\\x6e\\x3e\\x77\\x6b\\x1d\\xa5\\x83\\x76\\xbf\\x1f\\x81\\xa5\\x9d\\x86\\x98\\x1b\\xbb\\xac\\x0b\"\n\"\\x05\\xb5\\x83\\x79\\x9b\\x64\\x1b\\xfb\\x16\\xfb\\x36\\xfb\\x50\\xfb\\x2a\\x44\\xb3\\x60\\xcc\\xcf\\xb7\\xab\\xef\\xcf\\x1f\\x80\\x58\\x89\\x7c\\x74\\x1a\\x70\"\n\"\\x9c\\x79\\xa4\\xb5\\xc0\\xb4\\xd4\\xbe\\x1e\\x0b\\x61\\x1b\\x7f\\x83\\x92\\x94\\x8f\\x2d\\x1d\\x91\\x8c\\x8f\\x91\\x1a\\xa0\\x79\\x9c\\x76\\x76\\x7b\\x79\\x74\"\n\"\\x68\\xad\\x71\\xb8\\xe4\\xd0\\xed\\xf7\\x4d\\xb5\\x1e\\xd3\\xf7\\xd4\\x05\\x0b\\x06\\xbe\\xf7\\x52\\x05\\xd4\\x9e\\x9d\\x99\\xd4\\x34\\x1d\\xc2\\x8a\\x9c\\x81\"\n\"\\x6b\\x1a\\x81\\x89\\x7b\\x87\\x7f\\x1e\\xfb\\x0e\\xfc\\x5e\\x7a\\x47\\x77\\x0b\\x9c\\x1d\\xd6\\x1a\\xdf\\x51\\xc4\\x36\\x1e\\x0b\\x88\\x83\\x19\\x81\\x6a\\x84\"\n\"\\x6c\\x81\\x1a\\x76\\xa0\\x7b\\xa6\\xb9\\xac\\xa7\\xe8\\xca\\x1e\\x7e\\x92\\x05\\x4c\\x5a\\x7b\\x7b\\x7b\\x1b\\x82\\x85\\x92\\x98\\x8c\\x8b\\x8b\\x8c\\x8f\\x1f\"\n\"\\x0b\\x1f\\x7a\\x99\\x05\\x33\\x31\\x51\\x6d\\x39\\x1b\\xfb\\x03\\x4b\\xd6\\xf7\\x16\\xf7\\x0b\\xbb\\xf7\\x0d\\xd9\\xdc\\x1f\\xbc\\xbb\\xca\\xa7\\xcd\\x1b\\xe7\"\n\"\\xbe\\x55\\xfb\\x00\\x95\\x1f\\x0b\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\\xf7\\x5f\"\n\"\\xf7\\x5e\\xfb\\x37\\xf7\\x37\\xfb\\x5e\\x1f\\x0b\\xf7\\x21\\xf8\\x9d\\x05\\xd4\\x9e\\x9c\\x99\\xd5\\x21\\x1d\\xfb\\xa3\\x06\\x85\\x79\\x05\\xc2\\xda\\x1d\\x0b\"\n\"\\xc8\\x1d\\x6d\\x67\\xd5\\x1d\\x15\\x6b\\x72\\x73\\x6d\\x6b\\xa5\\x71\\xab\\xaa\\xa4\\xa3\\xaa\\xaa\\x71\\xa5\\x6c\\x1f\\x0b\\x85\\x53\\x81\\x19\\x7b\\xf7\\x91\"\n\"\\x07\\xf7\\x09\\xf6\\xaa\\xc3\\xd8\\x1f\\xec\\xd2\\xc4\\xf7\\x02\\xf7\\x08\\x1a\\xf7\\x38\\xfb\\x06\\xf4\\xfb\\x46\\x1e\\xfb\\xaa\\x0b\\x37\\x1d\\xc2\\xc4\\x1a\"\n\"\\xb3\\x72\\xaa\\x6a\\x6e\\x75\\x77\\x71\\x79\\x91\\x80\\x9e\\x7a\\x1e\\x9a\\x7d\\x90\\x83\\x80\\x1a\\x71\\x74\\x6f\\x57\\x69\\x1e\\x0b\\x1b\\xf7\\x07\\xe2\\xe1\"\n\"\\xf7\\x06\\xcc\\x75\\xb1\\x30\\xe7\\x1f\\x31\\xe6\\x82\\x99\\xbc\\x1a\\xca\\xb5\\xb2\\xce\\xb2\\xa9\\x7e\\x73\\xa0\\x1e\\xa1\\x72\\x93\\x0b\\xf7\\xd9\\xf8\\x4d\"\n\"\\x15\\x60\\x64\\x80\\x75\\x62\\x1f\\x24\\x51\\x43\\xfb\\x07\\x21\\x1a\\x34\\xc3\\x56\\xe6\\xcd\\xcb\\xa8\\xc5\\xc5\\x1e\\xcd\\xcc\\xb3\\xdf\\x0b\\x55\\x1d\\x90\"\n\"\\x9d\\x6f\\xf4\\x1d\\x0b\\xe3\\xf7\\xd6\\x88\\x8d\\x25\\x78\\x78\\x88\\x64\\x88\\x19\\x7b\\x07\\xc1\\x8a\\x94\\x88\\x77\\x1a\\x83\\x88\\x7a\\x85\\x78\\x1e\\x5b\"\n\"\\xfb\\x45\\x05\\x7b\\x0b\\x7a\\x54\\x75\\x7c\\x49\\x86\\x19\\x7b\\xf7\\xb5\\x9b\\x07\\x8d\\x7b\\x7f\\x8c\\x83\\x1b\\x7a\\x8c\\x7d\\x8e\\x81\\x91\\x08\\x84\\x8f\"\n\"\\x86\\x95\\x99\\x1a\\x0b\\x89\\x8e\\x85\\x85\\x88\\x8a\\x83\\x85\\x1e\\x64\\x59\\x4d\\x58\\x6b\\x82\\x08\\x72\\x83\\x84\\x85\\x80\\x1a\\x8a\\x8b\\x89\\x8c\\x88\"\n\"\\x1e\\xd5\\x06\\x0b\\x67\\x4e\\x1b\\x4b\\x63\\xb0\\xc9\\x87\\x5c\\x1d\\x0b\\x1a\\x7c\\x87\\x79\\x7e\\x5c\\x1e\\xfb\\x0a\\xfc\\x3d\\x79\\x4f\\x84\\x85\\x52\\x83\"\n\"\\x19\\x7b\\xf7\\x89\\x9b\\x07\\x4c\\x94\\x86\\x8e\\xae\\x1a\\x0b\\x6b\\x1d\\xa5\\x83\\x76\\xbf\\x1f\\x81\\xa5\\x9d\\x86\\x98\\x1b\\xbb\\xac\\xaf\\xcf\\x99\\x1f\"\n\"\\x0e\\x15\\x55\\x5e\\x5e\\x55\\xc8\\x1d\\x6e\\x66\\x66\\x6e\\x6f\\x65\\x0b\\xb5\\xac\\xa4\\x95\\xb3\\x8c\\x19\\x91\\x9d\\x05\\xfb\\x5a\\x22\\x1d\\xae\\x8c\\x98\"\n\"\\x86\\x7e\\x1a\\x83\\x87\\x86\\x7a\\x7d\\x1e\\x0b\\xc2\\xf7\\x53\\x9f\\xd1\\x9e\\x9b\\xcb\\x8c\\x19\\x90\\x9d\\x05\\xfb\\x9b\\x06\\x86\\x79\\x05\\xc3\\x8a\\x9c\"\n\"\\x82\\x6c\\x1a\\x80\\x89\\x0b\\xaa\\x1d\\x0e\\xaf\\x1b\\xb6\\xae\\x6d\\x66\\x6b\\x6c\\x5d\\x4d\\x4e\\x1f\\xfb\\x19\\xfb\\x16\\x05\\x79\\xf7\\x7b\\x07\\xac\\xda\"\n\"\\x05\\x0e\\xbd\\x1d\\x7b\\x69\\xfb\\x0f\\x7e\\x1e\\x0b\\xf8\\x82\\xb0\\x1d\\x0b\\x7b\\x07\\xc6\\x83\\x96\\x84\\x6f\\xc1\\x1d\\x0b\\x15\\xae\\x06\\xf7\\x3f\\xf5\"\n\"\\x05\\x97\\x93\\x90\\x93\\x97\\x1a\\x9f\\x7b\\x9b\\x76\\x82\\x82\\x87\\x85\\x84\\x1e\\x0e\\x5f\\x1d\\xd6\\x1d\\x52\\x92\\x80\\x91\\xa7\\x1a\\x9f\\x8d\\x95\\x94\"\n\"\\xac\\x1e\\xf7\\x0f\\xf8\\x4f\\x9d\\xc5\\x92\\x91\\xc4\\x95\\x19\\x9b\\x0b\\x15\\xae\\x06\\xf7\\x3f\\xf5\\x05\\x97\\x93\\x90\\x93\\x97\\x1a\\x9f\\x7b\\x9b\\x76\"\n\"\\x82\\x82\\x87\\x85\\x85\\x1e\\x0b\\x5f\\x1d\\x77\\x81\\x82\\x87\\x85\\x85\\x1e\\x0b\\x1a\\x58\\xb6\\x60\\xbf\\xde\\x1d\\x6b\\x1b\\x67\\x74\\xa0\\x0b\\xf8\\x83\"\n\"\\xf7\\x1a\\x15\\x50\\x68\\x70\\x72\\x6f\\x1b\\x76\\x80\\xa2\\xb9\\x91\\x8b\\x92\\x8c\\x95\\x1f\\xf7\\x09\\x0b\\x06\\xf7\\x3f\\xf5\\x05\\x97\\x93\\x90\\x93\\x97\"\n\"\\x1a\\xa0\\x7b\\x9a\\x76\\x65\\x1d\\x0b\\x15\\xae\\x06\\xf7\\x3f\\xf5\\x05\\x97\\x93\\x90\\x93\\x97\\x1a\\x9f\\x7b\\x9b\\x76\\x81\\x83\\x88\\x84\\x0b\\x15\\xb4\"\n\"\\xa8\\x61\\x51\\x4a\\x73\\x32\\x68\\x4a\\x1f\\x52\\x6c\\x66\\x6e\\x61\\x1b\\x5e\\x6f\\xb1\\xca\\x0b\\x1e\\xfb\\x17\\xfc\\x5e\\x78\\x46\\x78\\x7a\\x4c\\x8a\\x20\"\n\"\\x1d\\xf7\\x9c\\x06\\x91\\x9d\\x05\\x0b\\xf8\\xe0\\xf7\\x05\\x15\\x53\\x4f\\x64\\x76\\x60\\x1b\\x5c\\x74\\xad\\xcf\\xa1\\x8c\\x93\\x92\\xa9\\x1f\\x0b\\x15\\x6f\"\n\"\\x74\\x75\\x70\\x6e\\xa3\\x74\\xa8\\xa7\\xa1\\xa1\\xa6\\xa7\\x73\\xa3\\x6f\\x1f\\x0e\\x16\\x6b\\x72\\x73\\x6d\\x6b\\xa5\\x71\\xab\\xaa\\xa4\\xa3\\xaa\\xaa\\x71\"\n\"\\xa5\\x6c\\x1f\\x0e\\x06\\xcb\\xa9\\x83\\x74\\xa1\\x1f\\x9a\\x7c\\x95\\x6c\\x6a\\x1a\\x7d\\x8a\\x79\\x8a\\x77\\x1e\\x0b\\x15\\xae\\x06\\xf7\\x3e\\xf5\\x05\\x98\"\n\"\\x93\\x90\\x93\\x97\\x1a\\x9f\\x7b\\x9b\\x76\\x82\\x82\\x0b\\x15\\x4b\\x72\\x5a\\x67\\x4c\\x1b\\x4b\\x62\\xb0\\xca\\x86\\x1f\\x6e\\x06\\x8c\\x51\\x93\\x6c\\x0b\"\n\"\\xf8\\x56\\x15\\xbc\\x06\\xa4\\xc2\\x05\\xa7\\xc6\\x9a\\xba\\xa3\\x1a\\xa3\\x7f\\x98\\x75\\x5b\\x0b\\x15\\x67\\x06\\xfb\\x23\\x22\\x32\\xeb\\x1d\\x15\\x6f\\x74\"\n\"\\x75\\x6f\\x6f\\xa2\\x74\\xa7\\xa6\\xa2\\xa2\\xa7\\xa6\\x74\\xa2\\x70\\x1f\\x0b\\x15\\x5a\\x06\\xfb\\x31\\xdb\\x1d\\x0b\\x1a\\x7c\\x88\\x77\\x83\\x70\\x1e\\xfb\"\n\"\\x0f\\xfc\\x4e\\x79\\x51\\x84\\x85\\x53\\x81\\x19\\x0b\\x8c\\x8f\\x81\\x68\\x1d\\x98\\x8d\\x97\\x8f\\x9a\\x1e\\x0e\\x8c\\x93\\x1b\\xa1\\x98\\x81\\x79\\x7d\\x8b\"\n\"\\x8b\\x7b\\x47\\x1f\\x3a\\xfb\\xb8\\x05\\x0b\\x15\\xae\\x06\\xf7\\x3f\\xf5\\x05\\x97\\x93\\x90\\x93\\x97\\x1a\\xa0\\x7b\\x9a\\x76\\x0b\\x15\\x4c\\x72\\x5a\\x67\"\n\"\\x4d\\x1b\\x4c\\x63\\xaf\\xca\\x87\\x1f\\x6e\\x06\\xfb\\x00\\x0b\\x1f\\x9c\\x06\\xba\\xf7\\x42\\x05\\xfc\\xb4\\x06\\x5c\\xfb\\x42\\x05\\x9e\\x06\\x9f\\x0b\\x9f\"\n\"\\xfb\\x17\\x05\\x8c\\x82\\x8c\\x82\\x83\\x1a\\x65\\x7d\\x82\\x4b\\x85\\x1e\\x7b\\x0b\\x53\\xb6\\x5f\\xc4\\xc2\\xb8\\xb8\\xc1\\xc2\\x5e\\xb8\\x53\\x1f\\x69\\x04\"\n\"\\xb0\\xa9\\x0b\\x80\\x70\\x1b\\x7c\\x7a\\x90\\x99\\x6d\\x1f\\x9c\\x65\\x71\\x92\\x75\\x1b\\x57\\x0b\\x96\\x48\\x1b\\x57\\x63\\x15\\x8e\\x9a\\x92\\x8c\\x99\\x1b\"\n\"\\xd7\\xb6\\x66\\x4b\\x0b\\x1f\\x90\\x84\\x85\\x8d\\x82\\x1b\\x72\\x7a\\x7b\\x75\\x73\\x9f\\x7c\\xab\\xaa\\x0b\\x62\\xb0\\xca\\x86\\x1f\\x6e\\x06\\x8c\\x52\\x93\"\n\"\\x6b\\x9f\\x71\\x08\\x6d\\xa2\\x0b\\x7a\\x46\\x77\\x7a\\x4c\\x8a\\x20\\x1d\\xf7\\xa0\\x06\\x91\\x9d\\x05\\x0b\\x90\\x93\\x98\\x1a\\x9f\\x7b\\x9b\\x76\\x81\\x83\"\n\"\\x88\\x84\\x84\\x1e\\x0e\\xfa\\x12\\xf7\\x87\\x15\\xfe\\x10\\x06\\x83\\x5d\\x05\\xfa\\x10\\x06\\x0e\\x87\\x7a\\x1f\\x9c\\x06\\xb6\\xf7\\x32\\x05\\xfc\\x75\\x25\"\n\"\\x1d\\x0b\\x15\\x8c\\x7f\\x8b\\x8b\\x88\\x1a\\x75\\x69\\x78\\x64\\x6c\\x6e\\x9a\\x9b\\x0b\\xf7\\xc6\\xf7\\x9e\\x15\\xbc\\xfb\\x47\\x05\\x8d\\x81\\x8d\\x80\\x85\"\n\"\\x1a\\x0b\\x46\\x78\\x7a\\x4c\\x8a\\x20\\x1d\\xf7\\x63\\x06\\x90\\x9d\\x05\\x0b\\x79\\x1a\\x66\\x9d\\x79\\xae\\xd2\\xc0\\xc1\\xf7\\x55\\xf7\\x07\\x1e\\x6d\\x0b\"\n\"\\x66\\x6e\\x6f\\x65\\x66\\x6f\\xa8\\xb0\\xae\\xa9\\xa9\\xae\\x1f\\x0e\\x76\\x82\\x83\\x88\\x84\\x84\\x1e\\x0e\\x1a\\x4a\\x74\\x5d\\x5f\\x71\\x1e\\x7a\\x6c\\x64\"\n\"\\x83\\x4d\\x1b\\x79\\x0b\\xf8\\x77\\x15\\x58\\x06\\xfc\\x43\\xfd\\x4b\\x05\\xbf\\x06\\x0e\\x05\\xb2\\xa5\\x9c\\x97\\xaa\\x1b\\xa0\\xa0\\x86\\x82\\x9c\\x1f\\x0b\"\n\"\\x8a\\x9c\\x81\\x6a\\x1a\\x81\\x89\\x7c\\x87\\x7f\\x1e\\xfb\\x0e\\x0b\\xfb\\x3d\\x05\\xb2\\x06\\xf7\\x1d\\xf3\\xdd\\x23\\x05\\xaf\\x06\\x0b\\x1a\\x80\\x07\\x8c\"\n\"\\x78\\x8b\\x86\\x87\\x1a\\x74\\x83\\x81\\x68\\x0b\\x1f\\xbd\\xb0\\xa8\\xc2\\xc6\\x1a\\xeb\\x40\\xc0\\xfb\\x1c\\x1e\\x0b\\xbc\\xb4\\xa4\\xbf\\xae\\x1e\\x7a\\x9d\"\n\"\\x05\\x74\\x70\\x73\\x82\\x0b\\x6e\\x1a\\x7c\\x87\\x72\\x84\\x73\\x1e\\xfb\\x0f\\xfc\\x4e\\x79\\x0b\\x1a\\xa0\\x81\\x96\\x78\\x62\\x7e\\x6f\\x21\\x80\\x1e\\x0e\"\n\"\\xed\\x1d\\xbc\\x0b\\x8d\\x90\\x81\\x1f\\x7f\\x91\\x83\\x98\\x9a\\x1a\\x95\\x8e\\x0b\\x19\\x86\\x79\\x05\\xf7\\x97\\x06\\x90\\x9d\\x70\\x8c\\x83\\x0b\\x1e\\xf7\"\n\"\\x1f\\xf8\\x9b\\x15\\x8f\\xa2\\x97\\x8c\\x98\\x1b\\x0b\\xf8\\xa5\\xf6\\x1d\\x0b\\xbc\\xf7\\x28\\xc8\\xe2\\x1f\\xdc\\xc3\\xc8\\xb1\\xd4\\x1b\\x0b\\x4c\\x54\\x81\"\n\"\\x83\\x7a\\x1b\\x81\\x83\\x93\\x97\\x9b\\xaa\\x0b\\xf9\\x38\\xf6\\x1d\\x0b\\x56\\xd9\\xfb\\x8e\\x18\\x51\\xfb\\x6c\\x78\\x42\\x78\\x7c\\x0b\\x75\\x1a\\x6c\\x9d\"\n\"\\x7a\\xa9\\xba\\xa1\\x9e\\xed\\xd0\\x1e\\x0b\\xf4\\x05\\x66\\x06\\xeb\\xfb\\x3d\\x05\\xb9\\x06\\x0e\\x06\\x85\\x70\\x7d\\x45\\x75\\xfb\\x05\\x68\\xfb\\x46\\x0b\"\n\"\\x86\\x90\\x4e\\x7d\\x65\\x85\\x52\\x84\\x19\\x7b\\x07\\x0b\\x1f\\x7e\\xa4\\x9d\\x87\\xa2\\x1b\\xf7\\x26\\xf7\\x2e\\x0b\\xa9\\x78\\xa0\\x6f\\x74\\x70\\x7c\\x70\"\n\"\\x71\\x1f\\x62\\x0b\\x77\\x7a\\x4e\\x8a\\x20\\x1d\\xf7\\x96\\x06\\x0b\\x05\\xd4\\x9e\\x9d\\x99\\xd5\\x1b\\x8f\\x9d\\x05\\x0b\\x08\\x2c\\x4f\\x5a\\x58\\x6b\\x1b\"\n\"\\x7e\\x83\\x95\\x0b\\x8a\\x19\\x86\\x79\\x05\\xf7\\x97\\x06\\x90\\x9d\\x0b\\x8c\\x84\\x8b\\x80\\x8f\\x19\\x7b\\x90\\x81\\x9a\\x0b\\x8e\\x9b\\x92\\x8c\\x95\\x1b\"\n\"\\x9d\\x93\\x84\\x7c\\x0b\\x15\\x58\\x06\\xfc\\x5b\\xfd\\x42\\x05\\xbe\\x06\\x0b\\x1b\\x57\\x6f\\x6e\\x3e\\x77\\x1f\\xa8\\x06\\xab\\x0b\\x1f\\x6e\\x06\\x52\\x93\"\n\"\\x6c\\x9f\\x71\\x1e\\x6e\\x0b\\xc3\\x48\\xdc\\xbc\\xc0\\xa2\\xb8\\xbe\\x1f\\xcb\\x0b\\xf8\\xe2\\xf7\\x70\\x15\\xcd\\xfc\\x8c\\x49\\x07\\x0b\\x70\\xa3\\x64\\x4b\"\n\"\\x4c\\x4e\\xfb\\x33\\x24\\x1e\\x0b\\x82\\x88\\x84\\x85\\x1e\\x0e\\x01\\x00\\x01\\xe3\\x01\\x05\\x00\\x01\\x0a\\x02\\x01\\x40\\x03\\x01\\x87\\xff\\x02\\x87\\xa0\"\n\"\\x02\\x8e\\x02\\x00\\x01\\x00\\x04\\x00\\x07\\x00\\x44\\x00\\x7f\\x00\\xbf\\x01\\x53\\x02\\x12\\x02\\xcb\\x02\\xd0\\x03\\x0c\\x03\\x48\\x04\\x19\\x04\\x2b\\x04\"\n\"\\x32\\x04\\x36\\x04\\x3d\\x04\\x51\\x04\\x9e\\x04\\xf1\\x05\\x45\\x05\\xb5\\x05\\xe9\\x06\\x39\\x06\\x99\\x06\\xbd\\x07\\x26\\x07\\x88\\x07\\xa3\\x07\\xb0\\x07\"\n\"\\xcc\\x07\\xe2\\x07\\xfc\\x08\\x57\\x09\\x04\\x09\\x08\\x09\\x82\\x09\\x86\\x09\\x8a\\x09\\x8e\\x09\\xfe\\x0a\\x02\\x0a\\x32\\x0a\\x37\\x0a\\x3c\\x0a\\x40\\x0a\"\n\"\\x44\\x0a\\xbf\\x0a\\xc3\\x0a\\xc7\\x0a\\xcd\\x0b\\x5f\\x0b\\x63\\x0b\\x66\\x0b\\x6a\\x0b\\x6e\\x0b\\xb5\\x0b\\xba\\x0c\\x4f\\x0c\\x53\\x0c\\x57\\x0c\\x87\\x0c\"\n\"\\x9a\\x0c\\xc9\\x0c\\xe7\\x0c\\xf2\\x0c\\xfb\\x0c\\xfe\\x0d\\x6e\\x0d\\x73\\x0d\\x76\\x0d\\x7b\\x0d\\xd5\\x0d\\xd8\\x0d\\xda\\x0d\\xe3\\x0e\\x1c\\x0e\\x21\\x0e\"\n\"\\x28\\x0e\\xf6\\x0e\\xf9\\x0e\\xfc\\x0f\\x71\\x0f\\xdc\\x0f\\xe1\\x0f\\xe6\\x0f\\xf5\\x0f\\xf8\\x10\\x5b\\x10\\x5f\\x11\\x08\\x11\\x0d\\x11\\x12\\x11\\x6f\\x11\"\n\"\\x7b\\x11\\xdf\\x12\\x1d\\x12\\x5b\\x12\\xdd\\x13\\x71\\x13\\x75\\x14\\x0d\\x14\\x91\\x15\\x3f\\x15\\xa3\\x15\\xc3\\x15\\xe5\\x16\\x42\\x16\\x56\\x16\\xab\\x17\"\n\"\\x50\\x17\\xfa\\x18\\x09\\x18\\xad\\x19\\xb5\\x19\\xb9\\x1a\\x42\\x1a\\x5b\\x1a\\x62\\x1a\\x7a\\x1a\\x9c\\x1b\\x40\\x1b\\x64\\x1c\\x61\\x1c\\xbd\\x1c\\xc5\\x1c\"\n\"\\xcb\\x1c\\xd3\\x1c\\xe4\\x1c\\xec\\x1c\\xf4\\x1c\\xfd\\x1d\\x05\\x1d\\x12\\x1d\\x3b\\x1d\\x45\\x1d\\x6e\\x1d\\x76\\x1d\\x7a\\x1d\\x94\\x1d\\xf9\\x1e\\x4b\\x1e\"\n\"\\x6c\\x1f\\x1a\\x1f\\x52\\x1f\\x63\\x1f\\x68\\x1f\\xb2\\x1f\\xb5\\x20\\x5c\\x21\\x14\\x21\\x66\\x21\\x76\\x21\\xef\\x22\\x85\\x22\\x88\\x22\\xf8\\x23\\x12\\x23\"\n\"\\x62\\x23\\xa0\\x23\\xaf\\x23\\xc5\\x23\\xf1\\x24\\x6f\\x24\\xc4\\x24\\xfb\\x25\\xbb\\x25\\xc0\\x26\\x26\\x26\\x52\\x26\\xa3\\x27\\x39\\x27\\x41\\x27\\x49\\x27\"\n\"\\x51\\x27\\x59\\x27\\x66\\x27\\x97\\x27\\xd9\\x27\\xe2\\x27\\xeb\\x27\\xf4\\x27\\xfd\\x28\\x07\\x28\\x11\\x28\\x30\\x28\\x3a\\x28\\x6b\\x28\\x72\\x28\\x7f\\x28\"\n\"\\x8e\\x28\\x95\\x28\\xc9\\x28\\xd0\\x28\\xdf\\x28\\xe8\\x28\\xf1\\x28\\xf9\\x29\\x17\\x29\\x20\\x29\\x28\\x29\\x2e\\x29\\x35\\x29\\x3c\\x29\\x42\\x29\\x68\\x29\"\n\"\\x70\\x29\\xca\\x29\\xd3\\x29\\xdd\\x29\\xe6\\x29\\xfc\\x2a\\x1b\\x2a\\x24\\x2a\\x31\\x2a\\x3a\\x2a\\x41\\x2a\\x62\\x2a\\x69\\x2a\\x70\\x2a\\x76\\x2a\\x7e\\x2a\"\n\"\\x88\\x2a\\x90\\x2a\\x98\\x2a\\xa0\\x2a\\xa8\\x2a\\xb1\\x2a\\xbb\\x2a\\xc5\\x2b\\x3e\\x2b\\xb0\\x2c\\x99\\x2d\\x5a\\x2d\\xf5\\x2e\\x99\\x2f\\x24\\x2f\\xaf\\x2f\"\n\"\\xc7\\x2f\\xdc\\x2f\\xe3\\x2f\\xf4\\x2f\\xfd\\x30\\x66\\x30\\xab\\x30\\xf0\\x30\\xf9\\x31\\x01\\x31\\x0b\\x31\\x16\\x31\\x95\\x31\\x9e\\x31\\xa1\\x31\\xbb\\x31\"\n\"\\xd6\\x31\\xde\\x31\\xe8\\x31\\xf0\\x32\\x6a\\x33\\x0d\\x33\\x53\\x33\\xbe\\x33\\xc1\\x33\\xe3\\x34\\x6a\\x34\\x6d\\x34\\x85\\x34\\x8e\\x34\\x97\\x34\\xa1\\x34\"\n\"\\xfd\\x35\\x33\\x35\\xc7\\x35\\xdc\\x35\\xe7\\x35\\xf1\\x36\\x34\\x36\\x38\\x36\\x4b\\x36\\x75\\x36\\xa1\\x36\\xaa\\x37\\x06\\x37\\x0f\\x37\\x18\\x37\\x24\\x37\"\n\"\\x39\\x37\\x42\\x37\\x4a\\x37\\xa9\\x37\\xb1\\x37\\xb9\\x37\\xc2\\x38\\x1b\\x38\\x2f\\x38\\x3b\\x38\\x47\\x38\\xdd\\x39\\x29\\x39\\x78\\x39\\x9e\\x39\\xa3\\x3a\"\n\"\\x03\\x3a\\xc5\\x3a\\xcd\\x3a\\xd6\\x3a\\xde\\x3b\\x40\\x3b\\x48\\x3b\\x7f\\x3b\\x8e\\x3b\\x96\\x3b\\xdd\\x3c\\x29\\x3c\\x76\\x3c\\x7e\\x3c\\xd3\\x3d\\x77\\x3d\"\n\"\\x80\\x3d\\x92\\x3d\\x9e\\x3d\\xfc\\x3e\\x00\\x3e\\x08\\x3e\\x6f\\x3e\\x7d\\x3e\\xad\\x3e\\xb6\\x3e\\xc0\\x3e\\xca\\x3e\\xd3\\x3f\\x5a\\x3f\\x63\\x3f\\x77\\x3f\"\n\"\\x91\\x3f\\x9b\\x3f\\xd0\\x3f\\xde\\x3f\\xf2\\x3f\\xf6\\x40\\x52\\x40\\xa2\\x40\\xef\\x40\\xf2\\x41\\x71\\x41\\x75\\x41\\x7e\\x42\\x6e\\x42\\xb8\\x42\\xbc\\x42\"\n\"\\xf3\\x42\\xf7\\x43\\x58\\x43\\xc0\\x43\\xc3\\x44\\x17\\x44\\x48\\x44\\xae\\x44\\xf4\\x45\\x36\\x45\\x3d\\x45\\x43\\x45\\xc2\\x46\\x11\\x46\\x31\\x46\\x7d\\x46\"\n\"\\xd5\\x47\\x26\\x47\\x5d\\x47\\x68\\x47\\xeb\\x48\\x68\\x48\\xd6\\x49\\x1a\\x49\\x89\\x49\\xa8\\x4a\\x35\\x4a\\xbb\\x4a\\xbf\\x4a\\xec\\x4b\\x49\\x4b\\xcf\\x4c\"\n\"\\x52\\x4c\\xd9\\x4c\\xec\\x4d\\x26\\x4d\\x99\\x4e\\x0f\\x4e\\x7a\\x4e\\xda\\x4f\\x3f\\x4f\\x46\\x4f\\x53\\x50\\x0e\\x50\\x3e\\x50\\x41\\x50\\x86\\x50\\x9b\\x50\"\n\"\\xfd\\x51\\x8c\\x51\\xda\\x52\\x06\\x52\\x73\\x52\\xea\\x53\\x30\\x53\\xe5\\x53\\xea\\x54\\xa0\\x55\\x2f\\x55\\xb2\\x56\\x29\\x56\\xbd\\x57\\x8a\\x58\\x09\\x58\"\n\"\\x88\\x58\\xd4\\x59\\x31\\x59\\xa3\\x5a\\x27\\x5a\\x77\\x5b\\x0c\\x5b\\x7e\\x5b\\xdc\\x5c\\x48\\x5c\\x89\\x5c\\xd2\\x5d\\x25\\x5d\\x91\\x5d\\xfe\\x5e\\x9d\\x5e\"\n\"\\xc3\\x5f\\x00\\x5f\\x61\\x5f\\xb4\\x60\\x06\\x60\\x98\\x61\\x1b\\x61\\xc9\\x61\\xfd\\x62\\x40\\x62\\x48\\x62\\x7d\\x62\\xb3\\x62\\xed\\x63\\x33\\x63\\x5d\\x63\"\n\"\\x93\\x63\\xb4\\x63\\xd5\\x63\\xf6\\x64\\x17\\x64\\x24\\x64\\x3a\\x64\\xb7\\x64\\xc1\\x64\\xcb\\x65\\x06\\x65\\x10\\x65\\x65\\x65\\xe3\\x66\\x61\\x66\\x76\\x66\"\n\"\\xc0\\x67\\x34\\x67\\x63\\x67\\x88\\x67\\x9b\\x67\\xa5\\x67\\xb0\\x67\\xda\\x67\\xe4\\x68\\x1b\\x68\\x95\\x68\\x9a\\x68\\xb9\\x68\\xda\\x69\\x2b\\x69\\x30\\x69\"\n\"\\x44\\x69\\xc7\\x69\\xe1\\x6a\\x34\\x6a\\xca\\x6b\\x4e\\x6b\\x67\\x6b\\x72\\x6b\\x91\\x6b\\x99\\x6b\\xc0\\x6b\\xfa\\x6c\\x27\\x6c\\x6e\\x6c\\x95\\x6c\\xd2\\x6d\"\n\"\\x66\\x6d\\x70\\x6d\\xe8\\x6e\\x55\\x6e\\x93\\x6e\\xd1\\x6f\\x16\\x6f\\x63\\x6f\\xa3\\x6f\\xa8\\x6f\\xb8\\x6f\\xe0\\x6f\\xfe\\x70\\x4f\\x70\\x8e\\x71\\x05\\x71\"\n\"\\x0f\\x71\\x85\\x71\\xa2\\x71\\xfc\\x72\\x14\\x72\\x25\\x72\\x30\\x72\\x59\\x72\\xa2\\x73\\x10\\x73\\x86\\x73\\xab\\x73\\xf5\\x74\\x78\\x74\\x85\\x75\\x24\\x75\"\n\"\\x2b\\x75\\x33\\x75\\x94\\x75\\xc8\\x76\\x2e\\x76\\x36\\x76\\x42\\x76\\x4a\\x76\\xb5\\x77\\x39\\x77\\x3c\\x77\\x57\\x77\\x65\\x77\\x6c\\x77\\xd7\\x78\\x43\\x78\"\n\"\\xbd\\x79\\x46\\x79\\x7a\\x79\\xa2\\x79\\xd8\\x7a\\x6c\\x7a\\x9c\\x7a\\xa4\\x7a\\xc0\\x7a\\xca\\x7b\\x0f\\x7b\\x21\\x7b\\x6c\\x7b\\x76\\x7b\\xa1\\x7b\\xab\\x7b\"\n\"\\xb4\\x7b\\xfb\\x7c\\x51\\x7c\\xe2\\x7d\\x3e\\x7d\\x7a\\x7d\\xfe\\x7e\\x5b\\x7e\\x8e\\x7e\\xa8\\x7f\\x0d\\x7f\\x73\\x7f\\x90\\x7f\\xa5\\x7f\\xb7\\x7f\\xc1\\x7f\"\n\"\\xdc\\x7f\\xdf\\x7f\\xe3\\x7f\\xec\\x80\\x00\\x80\\x08\\x80\\x0c\\x80\\x32\\x80\\xc9\\x81\\x57\\x81\\xcc\\x81\\xec\\x82\\x0c\\x82\\x2d\\x82\\x4c\\x82\\xce\\x83\"\n\"\\x3c\\x84\\x25\\x84\\xee\\x85\\x49\\x85\\x8a\\x85\\xd1\\x86\\x59\\x86\\xb4\\x87\\x5b\\x87\\x8f\\x88\\x15\\x88\\x9e\\x88\\xff\\x89\\x65\\x89\\xc1\\x8a\\x1d\\x8a\"\n\"\\x95\\x8a\\xff\\x8b\\x8c\\x8c\\x39\\x8c\\xcb\\x8c\\xfe\\x8d\\x3d\\x8d\\xd0\\x8e\\x5e\\x8e\\xe0\\x8e\\xe2\\x8e\\xe6\\x8f\\x47\\x8f\\x87\\x8f\\xfd\\x90\\x73\\x91\"\n\"\\x0c\\x91\\x65\\x91\\x95\\x91\\xad\\x91\\xc4\\x91\\xcf\\x92\\x87\\x93\\x00\\x93\\x04\\x93\\x08\\x93\\x24\\x93\\x41\\x93\\xb1\\x93\\xca\\x94\\x0f\\x94\\x38\\x94\"\n\"\\x5c\\x94\\x61\\x94\\x6c\\x94\\x9a\\x94\\xb9\\x94\\xd9\\x94\\xfc\\x95\\x0b\\x95\\x14\\x95\\x1d\\x95\\x36\\x95\\xfd\\x96\\x07\\x96\\x10\\x96\\x1a\\x96\\x25\\x96\"\n\"\\xbf\\xfc\\x2e\\x0e\\xfc\\x2e\\x0e\\xfb\\xdb\\xf7\\x1d\\xf7\\x45\\x15\\xc3\\xf7\\x2d\\xa5\\xca\\xb8\\xef\\x08\\xa7\\xc9\\x95\\xaa\\xa9\\x1a\\xad\\x7d\\x9c\\x71\"\n\"\\x66\\x78\\x6a\\x38\\x7d\\x1e\\x74\\xfb\\x22\\x83\\x66\\x62\\xfb\\x53\\x08\\x6e\\x34\\x15\\x70\\x72\\x73\\x70\\x6c\\xa1\\x74\\xa8\\xaa\\xa4\\xa2\\xa8\\xa7\\x72\"\n\"\\xa4\\x6d\\x1f\\x0e\\xfb\\x84\\xf7\\xec\\xf8\\x39\\x15\\xc6\\xf7\\x14\\xa8\\xd3\\x9b\\x1a\\x9b\\x7d\\x98\\x7a\\x73\\x71\\x78\\x75\\x86\\x1e\\x85\\x73\\x82\\x3d\"\n\"\\x83\\x25\\x08\\xfb\\x32\\x16\\xc6\\xf7\\x13\\xa8\\xd4\\x9b\\x1a\\x9b\\x7d\\x98\\x7a\\x73\\x71\\x78\\x75\\x86\\x1e\\x85\\x72\\x82\\x3e\\x83\\x25\\x08\\x0e\\xf8\"\n\"\\x65\\xf7\\x9f\\x15\\x2c\\x06\\xc1\\xf7\\x23\\x05\\xf4\\x06\\x96\\xc1\\x05\\x2b\\xc7\\x0a\\xfb\\x16\\xc7\\x0a\\x22\\x06\\x80\\x55\\x05\\xeb\\x06\\x55\\xfb\\x23\"\n\"\\x05\\x22\\x06\\x80\\x55\\x05\\xea\\xc8\\x0a\\xf7\\x16\\xc8\\x0a\\xf4\\x06\\x30\\xf7\\x59\\x15\\x55\\xfb\\x23\\x05\\xfb\\x16\\x06\\xc1\\xf7\\x23\\x05\\x0e\\xf8\"\n\"\\x85\\xf8\\xf8\\x15\\x6b\\xa2\\x60\\x9d\\x5d\\x95\\x9b\\xcf\\x18\\x69\\x06\\x7a\\x4c\\x05\\x3c\\x75\\x86\\x73\\x61\\x1f\\x5c\\x70\\x6f\\x5d\\x56\\x1a\\x66\\x97\"\n\"\\x6d\\xa8\\x67\\x1e\\xa1\\x70\\x9f\\x79\\xbf\\x67\\x46\\xfb\\xbd\\x18\\x3d\\x9e\\x71\\xb0\\x80\\xf4\\x7b\\x88\\x18\\x70\\xfb\\x0f\\xaf\\x6d\\xbf\\x74\\xc9\\x7f\"\n\"\\x19\\x75\\x30\\x05\\xae\\x06\\xa0\\xe4\\xd4\\x8e\\xad\\x92\\xb2\\x9f\\x19\\xc6\\xa9\\xae\\xc7\\xd1\\x1a\\xda\\x72\\xaf\\xfb\\x09\\xe6\\x1e\\xc3\\xf7\\x81\\xc8\"\n\"\\x73\\xa2\\x68\\x8c\\x41\\x19\\x9a\\x89\\x05\\xfb\\x4f\\x3d\\x15\\x4d\\xb8\\x78\\xa6\\xb9\\x1a\\xb8\\xa3\\xae\\xb6\\x9a\\x1e\\x92\\x9e\\x8f\\x8c\\xb8\\x1b\\x5c\"\n\"\\xfb\\xe3\\x15\\x91\\x86\\x05\\xcf\\x53\\x9c\\x6e\\x56\\x1a\\x37\\x57\\x5d\\x20\\x83\\x1e\\x0e\\xf7\\x41\\xf9\\x3f\\xf8\\x07\\x15\\x21\\xfb\\x01\\xfb\\x0b\\xfb\"\n\"\\x09\\x36\\xb7\\x59\\xd7\\xb7\\xb3\\x9d\\xac\\xab\\x1f\\xc1\\xc4\\xab\\xd9\\xd8\\x1a\\xcf\\x63\\xb3\\x48\\x1e\\x96\\x6b\\x15\\xb2\\xab\\x67\\x5f\\x4c\\x6b\\x3e\"\n\"\\x5b\\x58\\x1f\\x73\\x75\\x6e\\x7d\\x6e\\x1b\\x62\\x77\\xa3\\xba\\xbb\\xa8\\xdd\\xad\\xbc\\x1f\\xb4\\xa6\\xa7\\x9d\\xab\\x1b\\x62\\xf7\\xe5\\x15\\x63\\x06\\x59\"\n\"\\x59\\x60\\x79\\x47\\x1b\\x6a\\x74\\x91\\x96\\x7e\\x1f\\x79\\x9b\\x05\\x98\\x7d\\x70\\x93\\x70\\x1b\\xfb\\x02\\xfb\\x00\\xfb\\x0c\\xfb\\x0f\\x42\\xbf\\x52\\xce\"\n\"\\xbf\\xba\\xa5\\xbb\\xb1\\x1f\\xb2\\xbd\\xa8\\xd6\\xbf\\x1a\\x97\\x89\\x9b\\x87\\x9e\\x1e\\x8e\\x8b\\x8b\\x8a\\x8e\\x1e\\x83\\xa0\\x98\\x89\\xa6\\x1b\\xba\\xa2\"\n\"\\x91\\xa3\\xb6\\x1f\\xfb\\xf2\\xfd\\x06\\x05\\xba\\x06\\xf0\\xf8\\xf9\\x15\\x92\\x76\\x8d\\x7e\\x7a\\x1a\\xfb\\x06\\x3a\\xfb\\x04\\x39\\x66\\x75\\xa3\\xb2\\xf6\"\n\"\\xdd\\xf7\\x1f\\xcb\\x90\\x8e\\x89\\x85\\x92\\x1e\\x9a\\x7f\\x95\\x86\\xa6\\x84\\x08\\x0e\\xf7\\x0a\\xf8\\xa6\\xf7\\xf2\\x15\\x78\\x07\\xb3\\x88\\x95\\x84\\x75\"\n\"\\x1a\\x68\\x7b\\x6f\\x4c\\x3f\\x1e\\x6b\\xbc\\x6c\\xe0\\x73\\xf2\\xca\\xab\\xa8\\x9d\\xa6\\xa3\\x08\\xae\\xab\\x9d\\xae\\xad\\x1a\\xc0\\x5f\\xb4\\x51\\x2d\\x49\"\n\"\\x36\\xfb\\x0d\\x80\\x8c\\x7e\\x8e\\x70\\x1e\\x86\\x8d\\x7f\\x8c\\x7d\\x1e\\x23\\x5e\\x5f\\x73\\x68\\x6e\\x08\\x5b\\x63\\x73\\x5d\\x55\\x1a\\x2a\\xd2\\x4e\\xf7\"\n\"\\x03\\xcb\\xaa\\x98\\xcd\\xf3\\x1e\\x52\\xb8\\xb2\\x75\\xc0\\x1b\\xbd\\xaf\\x9e\\xbc\\xb6\\x1f\\x80\\x96\\x05\\x74\\x6e\\x79\\x84\\x74\\x1b\\x5c\\x68\\xa6\\xce\"\n\"\\x63\\x1f\\xc2\\xd7\\x9a\\xa1\\xa9\\xb5\\x9d\\xa5\\x96\\x99\\x96\\x95\\x9a\\x96\\x96\\x8f\\xa8\\x8e\\x08\\x9c\\x07\\xfc\\x12\\x86\\x15\\xaf\\xfb\\x13\\xae\\x36\"\n\"\\xad\\x60\\x08\\x64\\x5c\\x60\\x7a\\x59\\x1b\\x42\\x54\\xc3\\xd5\\xd3\\xcc\\xd3\\xed\\xb0\\x1f\\xd8\\xde\\x15\\x87\\xa9\\x8a\\x9f\\xa5\\x1a\\xe5\\xa0\\xb3\\xbb\"\n\"\\xa9\\x98\\x7a\\x63\\x4a\\x75\\x6c\\x36\\x56\\x1e\\x0e\\xfb\\xdb\\x80\\x0a\\x0e\\xfb\\xdb\\xf7\\x33\\xfb\\x43\\x15\\x66\\xf1\\x80\\xc8\\xec\\x1a\\xf7\\x0d\\xa7\"\n\"\\xf7\\x23\\xba\\xf7\\x03\\x1e\\xac\\xda\\xaa\\xba\\xcc\\xcf\\x7e\\x9a\\x18\\xfb\\x16\\xfb\\x0a\\x58\\x49\\x61\\x23\\x08\\x71\\x4c\\x80\\x4e\\x3e\\x1a\\x3e\\x97\"\n\"\\x40\\xa1\\x46\\x1e\\x99\\x61\\x9a\\x6b\\xaf\\x49\\x08\\x0e\\xfb\\xdb\\xa8\\xfb\\x48\\x15\\xf7\\x10\\xf7\\x00\\xbe\\xcc\\xb8\\xf7\\x00\\x08\\xa7\\xcd\\x97\\xca\"\n\"\\xd6\\x1a\\xc4\\x83\\xca\\x7d\\xc7\\x1e\\x7a\\xcf\\x7c\\xaf\\x5e\\xdb\\x78\\x86\\x18\\xad\\x3a\\x9a\\x3a\\x27\\x1a\\xfb\\x13\\x69\\xfb\\x35\\x59\\xfb\\x00\\x1e\"\n\"\\x6e\\x4a\\x6d\\x61\\x4e\\x4b\\x08\\x0e\\xf7\\xd3\\xf8\\x88\\x15\\xa0\\x8f\\x9e\\x97\\xb0\\x1e\\x93\\xa5\\x8e\\x98\\x96\\x1a\\xa2\\x7d\\x9b\\x75\\x75\\x7e\\x7c\"\n\"\\x72\\x82\\x8d\\x82\\x91\\x77\\x1e\\x99\\x5e\\x8f\\x73\\x60\\x1a\\x64\\xa2\\x77\\x9b\\x6b\\xaf\\x08\\xa2\\x77\\x80\\x92\\x7b\\x1b\\x77\\x7c\\x7c\\x77\\x70\\x9a\"\n\"\\x80\\xb9\\x83\\x1f\\xb0\\x85\\xaa\\x80\\xa4\\x7c\\x97\\x84\\x18\\x60\\x71\\x7a\\x84\\x5c\\x83\\x08\\x61\\x84\\x7a\\x7e\\x73\\x1a\\x77\\x9b\\x7b\\x9e\\x9c\\x9b\"\n\"\\x95\\xa0\\x9c\\x1e\\xa7\\xae\\x97\\x96\\xab\\x9e\\x94\\x90\\x8e\\x8d\\x8e\\x8e\\x08\\x8d\\x7b\\x8b\\x86\\x83\\x1a\\x75\\x85\\x72\\x7e\\x67\\x1e\\x84\\x76\\x88\"\n\"\\x80\\x82\\x1a\\x75\\x9a\\x7b\\x9f\\xa2\\x9b\\x9b\\xa3\\x94\\x89\\x92\\x85\\x9d\\x1e\\x7c\\xb5\\x87\\xa1\\x8a\\xc0\\x92\\x87\\x18\\xac\\x78\\xa2\\x77\\xa5\\x6a\"\n\"\\x08\\x74\\x9e\\x97\\x83\\x9a\\x1b\\xa1\\x9b\\x9c\\xa1\\xa2\\x7a\\x97\\x5f\\x92\\x1f\\x6f\\x90\\x74\\x92\\x7c\\x93\\x66\\x9e\\x18\\xb6\\xa6\\x9c\\x92\\xba\\x93\"\n\"\\x08\\xb5\\x92\\x9a\\x96\\xa5\\x1a\\xa1\\x7c\\x9a\\x74\\x7e\\x83\\x87\\x7a\\x7d\\x1e\\x55\\x52\\x89\\x89\\x5f\\x6e\\x08\\x0e\\x9a\\xf7\\xc5\\xf7\\xb2\\x15\\xfb\"\n\"\\x6f\\x49\\xf7\\x6f\\xfb\\x70\\xcd\\xf7\\x70\\xcb\\x0a\\xfc\\x2e\\x90\\xfb\\x15\\x33\\x1d\\xfb\\xdb\\xab\\x0a\\xfc\\x2e\\xdd\\xef\\x4c\\x0a\\x0e\\xfc\\x12\\xf7\"\n\"\\xcd\\xf9\\x2e\\x15\\xfc\\x0e\\xfd\\x40\\x05\\xd4\\x06\\xf8\\x0e\\xf9\\x40\\x05\\x0e\\xf7\\xe9\\xf9\\x38\\x15\\xfb\\x31\\xfb\\x2c\\xfb\\x78\\xfb\\x7f\\xfb\\x18\"\n\"\\xcb\\x33\\xec\\xb6\\xb5\\x9a\\xaa\\xb5\\x1f\\xf0\\xd5\\xd7\\xf7\\x3a\\xf7\\x24\\x1a\\xf7\\x32\\x50\\xea\\x2a\\x1e\\x85\\x6f\\x15\\xc0\\xa9\\x5d\\x3b\\xfb\\x1a\"\n\"\\x63\\xfb\\x39\\x52\\x25\\x1f\\x49\\x65\\x62\\x69\\x5d\\x1b\\x56\\x6b\\xbd\\xe0\\xf6\\xbe\\xf7\\x59\\xbf\\xe8\\x1f\\xcb\\xb0\\xb1\\xaa\\xb9\\x1b\\x0e\\xbc\\x16\"\n\"\\xf7\\xab\\x9a\\x7a\\x06\\x5a\\x77\\x94\\xa2\\x94\\x8e\\x9a\\x94\\xa7\\x1f\\x8d\\x92\\x8c\\x90\\x8e\\x95\\xf7\\x23\\xf8\\x9b\\x18\\x90\\x9d\\x8c\\x91\\x90\\x1a\"\n\"\\x8f\\x89\\x8e\\x88\\x1e\\x8b\\x6f\\x86\\x55\\x80\\x1e\\x31\\x79\\x89\\x8a\\x84\\x8a\\x7f\\x89\\x19\\x7c\\x07\\xc4\\x8d\\x05\\xa2\\x8c\\x9a\\x7f\\x77\\x1a\\x84\"\n\"\\x89\\x84\\x86\\x77\\x1e\\xfb\\x1e\\xfc\\x80\\x7f\\x66\\x76\\x81\\x3c\\x84\\x19\\x0e\\xf8\\x24\\xf7\\x1f\\x15\\x74\\x5a\\x77\\x7f\\x53\\x89\\x08\\xfb\\x52\\x90\"\n\"\\x06\\xf7\\x54\\xf7\\x54\\x05\\xf7\\x09\\xf7\\x09\\xab\\xbd\\xce\\x1a\\xea\\x44\\xd5\\x30\\x67\\x66\\x82\\x7a\\x6d\\x1e\\x58\\x6f\\x70\\x69\\x6e\\x43\\xa0\\x84\"\n\"\\x18\\xcc\\xb0\\xb6\\xa8\\xc7\\x1b\\xd3\\xc0\\x57\\x45\\x76\\x88\\x78\\x85\\x7e\\x1f\\x73\\x55\\x5d\\x4c\\x4a\\x45\\xfb\\x66\\xfb\\x74\\x18\\x7a\\xf7\\xf7\\x07\"\n\"\\xbd\\xf7\\x18\\x05\\x0e\\xf7\\x46\\xf8\\xcb\\x15\\xba\\xae\\xad\\x9f\\xb5\\x1b\\xc1\\xae\\x67\\x54\\x61\\x76\\x67\\x60\\x6e\\x1f\\x60\\x6e\\x60\\x7c\\x32\\x7c\"\n\"\\x8c\\x7b\\x18\\xc3\\x95\\x8a\\x82\\xa5\\x1f\\xc8\\x74\\xab\\x55\\x3b\\x1a\\x68\\x83\\x67\\x7d\\x73\\x1e\\x63\\x74\\x5e\\x6f\\x62\\x1b\\x78\\x75\\x95\\xa1\\x6d\"\n\"\\x1f\\xa0\\x6e\\x7b\\x92\\x78\\x1b\\x6f\\x7b\\x7d\\x72\\x65\\xb3\\x76\\xd3\\xc3\\xbf\\x98\\xa3\\xb4\\x1f\\xda\\xb9\\xbd\\xdf\\xe4\\x1a\\xd4\\x6e\\xb8\\x49\\xaa\"\n\"\\x1e\\x8e\\x07\\xf7\\x0c\\xba\\xae\\xac\\xcf\\x1a\\xd4\\x50\\xc1\\x3a\\x46\\x4d\\x64\\x4a\\x6b\\x1e\\x0e\\xf8\\x59\\xf7\\x85\\x15\\x2c\\x06\\xf7\\x0d\\xf8\\x47\"\n\"\\x05\\x62\\x06\\xfc\\x35\\xfc\\x43\\x77\\x48\\x05\\xf7\\x9a\\x06\\x5a\\xfb\\x46\\x05\\xda\\x06\\xb9\\xf7\\x44\\x05\\xef\\x06\\xfb\\x36\\xcc\\x15\\xfb\\x68\\x8f\"\n\"\\x06\\xf7\\xc4\\xf7\\xd2\\x05\\x8f\\x06\\x0e\\xf7\\x82\\xf8\\xe7\\x15\\xf7\\x7a\\x06\\xa2\\xd2\\x05\\xfb\\x94\\x06\\x23\\xfb\\x6e\\x05\\x7c\\x07\\xec\\x76\\xac\"\n\"\\x7f\\xaf\\x6e\\x08\\xab\\x71\\xa0\\x59\\x56\\x1a\\xfb\\x01\\x3a\\x29\\x31\\x76\\x79\\x93\\xa0\\x6e\\x1e\\x9e\\x72\\x7c\\x92\\x7b\\x1b\\x74\\x7a\\x7a\\x74\\x67\"\n\"\\xb2\\x76\\xce\\xf7\\x39\\xf7\\x19\\xf7\\x14\\xf7\\x33\\xc9\\x74\\xc0\\x60\\xb4\\x1f\\x65\\xae\\x68\\x9b\\x3a\\x9f\\x08\\x0e\\xf8\\x9c\\xf9\\x42\\x15\\xfb\\x1a\"\n\"\\x7b\\x48\\x73\\x35\\x4c\\x08\\xfb\\x12\\x2d\\x3e\\xfb\\x22\\xfb\\x23\\x1a\\xfb\\x14\\xd3\\x38\\xf7\\x03\\xf7\\x1a\\xf7\\x06\\xf7\\x13\\xf7\\x2b\\xf1\\x44\\xd5\"\n\"\\x28\\x6f\\x6a\\x83\\x7e\\x70\\x1e\\x87\\x8d\\xd0\\xf7\\x13\\xf7\\x1c\\xf0\\xf7\\x09\\x99\\x19\\xfb\\x9a\\xfb\\x97\\x15\\xd0\\xb7\\x59\\x3e\\x47\\x73\\x3c\\x66\"\n\"\\x57\\x1f\\x5e\\x6d\\x68\\x76\\x60\\x1b\\x4e\\x67\\xbc\\xdd\\xcf\\x9f\\xde\\xa5\\xb7\\x1f\\xb9\\xa6\\xac\\x9f\\xba\\x1b\\x0e\\xf8\\xad\\xf9\\x24\\x15\\x85\\x95\"\n\"\\x05\\xfc\\x0b\\x06\\x3a\\xfb\\x1c\\x99\\x82\\xb9\\xc3\\xa7\\x9a\\xc6\\x8c\\x19\\xf7\\x72\\x06\\x8d\\x88\\xfc\\x03\\xfc\\xea\\x05\\xd1\\x06\\x0e\\xf7\\xdd\\xf8\"\n\"\\x12\\x15\\xf7\\x0b\\xb2\\xb8\\xb6\\xd2\\x1a\\xde\\x42\\xc5\\x25\\x20\\x42\\x4e\\x32\\x55\\x9f\\x64\\xce\\x42\\x1e\\xfb\\x12\\x63\\x46\\x44\\x33\\x1a\\x70\\x93\"\n\"\\x6d\\x9a\\x72\\x1e\\x52\\xac\\xc7\\x6e\\xde\\x1b\\xf7\\x10\\xe6\\xd8\\xf2\\xce\\x6d\\xc1\\x36\\xe3\\x1f\\x39\\x65\\x15\\xf7\\x02\\xfb\\x06\\x97\\x79\\x52\\x1a\"\n\"\\x3a\\x52\\x50\\x3c\\x3c\\x53\\xc5\\xdd\\xde\\xc1\\xd0\\xea\\xb0\\x1e\\xcb\\xc2\\x15\\x3d\\xd5\\x7a\\xa4\\xb5\\x1a\\xd1\\xb1\\xb6\\xcb\\xcb\\xb6\\x5c\\x44\\x4c\"\n\"\\x70\\x6b\\x34\\x62\\x1e\\x0e\\xa2\\x7a\\x15\\xf7\\x1b\\xa2\\xce\\xa6\\xde\\xcc\\x08\\xf7\\x08\\xe7\\xcf\\xf7\\x19\\xf7\\x1b\\x1a\\xf7\\x18\\x43\\xe1\\xfb\\x01\"\n\"\\xfb\\x12\\xfb\\x08\\xfb\\x14\\xfb\\x20\\x22\\xc9\\x41\\xe3\\xb4\\xae\\x97\\xac\\xc0\\x1e\\x8f\\x89\\x7a\\x5d\\x59\\x4a\\x4e\\x53\\x19\\x42\\x4e\\x5a\\x71\\x3c\"\n\"\\x7a\\x08\\xf7\\xbb\\xf9\\x1d\\x15\\xc9\\xb0\\x5a\\x38\\x3d\\x72\\x2e\\x6d\\x6e\\x1f\\x71\\x71\\x62\\x7a\\x65\\x1b\\x4b\\x67\\xbd\\xe4\\xd5\\xa8\\xdb\\xb6\\xb7\"\n\"\\x1f\\xa4\\xa3\\xaa\\x98\\xad\\x1b\\x0e\\xfb\\xdb\\xf5\\xef\\x15\\x6c\\x72\\x71\\x6c\\x6e\\xa4\\x72\\xa8\\xab\\xa4\\xa3\\xa9\\xaa\\x72\\xa5\\x6d\\x1f\\xee\\xf7\"\n\"\\xe9\\x9c\\x0a\\xfb\\xdb\\xaf\\xfb\\x15\\x69\\x0a\\xf7\\x46\\xf8\\xbd\\x9c\\x0a\\x9a\\xf9\\x01\\xf8\\xe8\\x15\\xfc\\x79\\xfb\\x9c\\x89\\x85\\xf7\\xe3\\xfb\\xa8\"\n\"\\xa8\\xf3\\xfb\\x8d\\xf7\\x60\\xf7\\xfd\\xf7\\x5b\\x05\\x0e\\x9a\\xf8\\xe2\\xf8\\x16\\x15\\xfc\\x8c\\x49\\xf8\\x8c\\x06\\xfb\\x1a\\x04\\xfc\\x8c\\x49\\xf8\\x8c\"\n\"\\x06\\x0e\\x9a\\xe9\\xbd\\x15\\xf8\\x79\\xf7\\x9c\\x8d\\x92\\xfb\\xe4\\xf7\\xa7\\x6f\\x24\\xf7\\x8d\\xfb\\x61\\xfb\\xfd\\xfb\\x5b\\x05\\x0e\\xf7\\x6c\\xf7\\x42\"\n\"\\x15\\x92\\xa8\\x99\\xc3\\xa8\\xb1\\xd3\\xc4\\x19\\xf7\\x06\\xe8\\x9f\\xa6\\xc8\\x1a\\xd9\\x51\\xbe\\x31\\x39\\x51\\x5e\\x4b\\x6d\\x9a\\x79\\xa4\\xa2\\x9b\\x9a\"\n\"\\x9f\\x93\\x89\\x91\\x86\\x96\\x1e\\x85\\x98\\x89\\x91\\x93\\x1a\\xa9\\xa5\\x9d\\xb7\\xbe\\xa8\\x6d\\x54\\x57\\x75\\x61\\x4a\\x44\\x1e\\x38\\x2c\\x7f\\x75\\x7a\"\n\"\\x28\\x08\\x7d\\x36\\x15\\x6d\\x74\\x74\\x6e\\x6e\\xa2\\x75\\xa9\\xa7\\xa4\\xa3\\xa6\\xa8\\x73\\xa2\\x6e\\x1f\\x0e\\xf7\\x98\\xf8\\xdf\\xf8\\x55\\x15\\xb3\\x76\"\n\"\\x7c\\x96\\x68\\x1b\\x61\\x62\\x79\\x6b\\x6d\\x1f\\x58\\x57\\x6c\\x3e\\x44\\x1a\\x4c\\xb2\\x5b\\xbd\\xb5\\xb8\\xa5\\xb8\\xaf\\x1e\\x60\\x91\\xaf\\x6e\\xba\\x1b\"\n\"\\xee\\xe0\\xf7\\x02\\xf7\\x14\\xf7\\x37\\xfb\\x22\\xf7\\x13\\xfb\\x4c\\xfb\\x5e\\xfb\\x34\\xfb\\x2e\\xfb\\x56\\xfb\\x51\\xf7\\x33\\xfb\\x27\\xf7\\x62\\xd2\\xbd\"\n\"\\x98\\xb7\\xe9\\x1f\\x7f\\xa8\\x05\\x68\\x3e\\x5a\\x7f\\x49\\x1b\\xfb\\x40\\xfb\\x0d\\xf7\\x0d\\xf7\\x3f\\xf7\\x50\\xf7\\x09\\xf7\\x1a\\xf7\\x37\\xf7\\x30\\xf7\"\n\"\\x15\\xfb\\x0e\\xfb\\x26\\x4f\\x72\\x4a\\x66\\x63\\x1f\\x77\\x78\\x72\\x80\\x72\\x1b\\x73\\x7e\\x9a\\xa6\\x90\\x8c\\x94\\x8d\\x92\\x1f\\xcc\\xf7\\x90\\x05\\x46\"\n\"\\x06\\x48\\x6d\\x15\\xa7\\x89\\x99\\x74\\x89\\x66\\x08\\xfb\\x05\\x85\\x53\\x27\\x52\\x1b\\x66\\x75\\xab\\xbf\\xc1\\x9d\\xbc\\xac\\xb1\\x1f\\xa7\\xab\\xae\\x9f\"\n\"\\xa3\\x89\\x08\\x0e\\x5a\\x26\\x1d\\x0e\\x5a\\x83\\x16\\xf7\\xae\\x06\\xf7\\x31\\xf7\\x00\\xdc\\xf7\\x0b\\xd4\\x6c\\xb0\\x2c\\xb4\\x1f\\xd2\\x9c\\xa8\\x97\\xab\"\n\"\\xa7\\x08\\xa7\\xa3\\x9a\\xad\\xb3\\x1a\\xea\\x44\\xbf\\xfb\\x15\\x1e\\xfb\\x96\\x7b\\x06\\xca\\x86\\x99\\x84\\xdf\\x1d\\x51\\x84\\x85\\x53\\x81\\x19\\xf7\\x8a\"\n\"\\xf7\\xcf\\x15\\xcb\\xb6\\x87\\x83\\x9f\\x1f\\xb4\\x7a\\xa4\\x60\\x54\\x1a\\xfb\\x00\\x41\\x49\\xfb\\x0e\\x61\\x75\\x99\\xa7\\x98\\x97\\xbb\\xa2\\xda\\x1e\\x98\"\n\"\\xb6\\x93\\xa9\\x96\\xb9\\x08\\xd6\\xf7\\x9c\\x15\\xa1\\x91\\x97\\x91\\xb2\\x1b\\xdc\\xaf\\x69\\x41\\x52\\x73\\x5e\\x60\\x73\\x1f\\x69\\x78\\x5a\\x83\\x32\\x8c\"\n\"\\x08\\x0e\\x92\\x38\\x0a\\x0e\\xc9\\x79\\x1d\\x0e\\x5a\\x27\\x1d\\x0e\\x5a\\xf9\\x19\\x22\\x0a\\xfc\\x86\\x7b\\x06\\xcc\\x85\\x97\\x85\\xdf\\x1d\\x4f\\x84\\x85\"\n\"\\x52\\x83\\x19\\x7b\\xf7\\x90\\x9b\\x07\\x51\\x8e\\x79\\x96\\xa9\\x1a\\x94\\x8d\\x97\\x92\\xa3\\x1e\\xc9\\xf7\\x73\\x05\\x89\\xb0\\xa1\\x8a\\xa1\\x1b\\xb2\\x92\"\n\"\\x8a\\x87\\x94\\x1f\\x9a\\x83\\x92\\x7e\\x77\\x1a\\x7b\\x89\\x7f\\x85\\x6c\\x1e\\x9c\\x86\\xd7\\xf7\\x7e\\x79\\x90\\x5e\\x31\\x88\\x8a\\xfb\\x3c\\x89\\x19\\xcd\"\n\"\\xf7\\x7d\\x05\\x9f\\x91\\x99\\x91\\xb4\\x1b\\xf7\\x3d\\xae\\x7e\\x4b\\x84\\x8b\\x86\\x8a\\x81\\x1f\\x8a\\x82\\x8b\\x89\\x8a\\x83\\xa0\\x89\\x18\\x0e\\xc9\\x2e\"\n\"\\x0a\\x0e\\xc9\\xf9\\x93\\x22\\x0a\\xfb\\x8b\\x7b\\x06\\xc5\\x84\\x97\\x83\\x6f\\x57\\x0a\\x5d\\xfb\\x38\\x05\\xfb\\xb1\\x06\\xc1\\xf7\\x57\\x4a\\x0a\\x88\\x77\"\n\"\\x83\\x70\\xb7\\x0a\\x51\\x1d\\xf7\\x18\\xf8\\x75\\x9c\\xc5\\x93\\x91\\xc4\\x95\\x19\\x0e\\xfb\\xdb\\x2c\\x1d\\x0e\\xfb\\x6c\\x6e\\x0a\\x0e\\x92\\x6f\\x1d\\x0e\"\n\"\\x23\\x34\\x0a\\x0e\\xf7\\x41\\xf9\\xfd\\x22\\x0a\\xfb\\x3b\\x06\\xfb\\xe4\\xfc\\x81\\x54\\xf8\\x81\\x05\\xfb\\x49\\x7b\\x06\\xbd\\x88\\xa3\\x80\\x74\\x1a\\x83\"\n\"\\x87\\x7c\\x85\\x79\\x1e\\x89\\x87\\x88\\x81\\x87\\x7b\\x88\\x80\\x18\\x21\\xfc\\x08\\x6c\\x23\\x7c\\x77\\x57\\x85\\x19\\x7b\\xf7\\x5a\\x9b\\x07\\x58\\x8f\\x77\"\n\"\\x97\\xa7\\x1a\\x96\\x8f\\xa3\\x90\\x9d\\x1e\\xf7\\x0a\\xf8\\x45\\xc8\\xfc\\xb6\\x05\\x9c\\x06\\xf8\\x0d\\xf8\\xc5\\xfb\\x15\\xfc\\x6a\\x7b\\x56\\x77\\x7c\\x4a\"\n\"\\x84\\x19\\x7b\\xf7\\xa5\\x9b\\x07\\x47\\x91\\x82\\x91\\xaa\\x1a\\x9c\\x8d\\x98\\x94\\xaa\\x1e\\xf7\\x0f\\xf8\\x4f\\x9d\\xc7\\x90\\x90\\xc6\\x94\\x19\\x0e\\x92\"\n\"\\x32\\x0a\\x0e\\xc9\\x26\\x0a\\x0e\\x5a\\xf7\\x26\\x62\\x0a\\x0e\\xc9\\xf7\\xab\\x7b\\x15\\xd8\\x90\\xb1\\x95\\xc3\\xaa\\x08\\xf7\\x28\\xde\\xf0\\xf7\\x36\\xf7\"\n\"\\x32\\x1a\\xf7\\x1b\\x2b\\xed\\xfb\\x18\\x3a\\x30\\x62\\x43\\x3c\\x1e\\x26\\x2e\\x50\\xfb\\x0d\\xfb\\x0a\\x1a\\x39\\xa9\\x47\\xc1\\x61\\x1e\\xa6\\x76\\xa0\\x81\"\n\"\\xb7\\x81\\x2f\\x3a\\x82\\x84\\x3f\\x55\\x95\\x7c\\x18\\xa0\\xb1\\xb0\\x95\\xb3\\x1b\\x9f\\xa8\\x86\\x7e\\xb7\\x1f\\x7a\\xc8\\xc0\\x82\\xb1\\x1b\\xc2\\xd1\\xa5\"\n\"\\xb2\\xbe\\x1f\\xa3\\x9e\\x98\\x99\\xa5\\xae\\x7c\\x96\\x18\\x51\\x53\\x62\\x79\\x43\\x1b\\x6d\\x67\\x91\\x9b\\x52\\x1f\\x55\\x99\\x67\\x92\\x76\\x8a\\x72\\x8a\"\n\"\\x18\\xf7\\x84\\xf9\\x56\\x15\\xdb\\xbc\\x51\\x2c\\x21\\x5c\\xfb\\x26\\x4b\\x2e\\x1f\\x3b\\x54\\x4d\\x65\\x42\\x1b\\x39\\x5d\\xc7\\xf5\\xeb\\xe6\\x1d\\x0e\\x5a\"\n\"\\x3a\\x1d\\x0e\\x37\\x0a\\x0e\\x23\\x50\\x1d\\x0e\\xc9\\x27\\x0a\\x0e\\x5a\\xf9\\x44\\x22\\x0a\\xfb\\x4e\\x7b\\x06\\xb8\\x86\\x9d\\x81\\x78\\x1a\\x78\\x78\\x61\"\n\"\\x6a\\x51\\x1e\\xfb\\x62\\xfb\\xf8\\x49\\xf8\\x4f\\x05\\x8a\\x90\\x8b\\x8f\\x91\\x1a\\xad\\x99\\x94\\xca\\x93\\x1e\\x9b\\xfb\\x85\\x7b\\x07\\xc3\\x84\\x8d\\x89\"\n\"\\xa0\\xfb\\x12\\xe0\\xfc\\x9c\\x18\\x9e\\x06\\xf8\\x09\\xf8\\xfb\\x9c\\xa6\\x9b\\x97\\xa2\\x8c\\x19\\x0e\\xf7\\x41\\x30\\x0a\\x0e\\x5a\\xf9\\x23\\x22\\x0a\\xfb\"\n\"\\x64\\x7b\\x06\\xbc\\x85\\x97\\x84\\x74\\x1a\\x7e\\x85\\x7f\\x7d\\x7b\\x1e\\xfb\\x25\\xfb\\x3b\\x50\\xf7\\x27\\x05\\x81\\xa5\\x86\\x9c\\x98\\x1a\\xa4\\x9b\\x94\"\n\"\\xc2\\x92\\x1e\\x9b\\xfb\\x9c\\x7b\\x07\\xc5\\x86\\x9a\\x81\\x9e\\x5d\\xf5\\xfb\\x9b\\x18\\x7a\\x78\\x7a\\x77\\x7b\\x78\\x76\\x73\\x77\\x73\\x77\\x74\\x82\\x80\"\n\"\\x81\\x80\\x82\\x81\\x5b\\x53\\x6d\\x6b\\x79\\x7d\\x72\\x77\\x7a\\x82\\x71\\x86\\x08\\x7b\\xf7\\x6a\\x9b\\x07\\x5b\\x7a\\x94\\xa4\\x9a\\x92\\x9b\\x99\\x9b\\x1f\"\n\"\\xf7\\x2b\\xf7\\x40\\xce\\xfb\\x39\\x05\\x92\\x79\\x8f\\x7b\\x7c\\x1a\\x6e\\x81\\x86\\x49\\x86\\x1e\\x7b\\xf7\\xa5\\x9b\\x07\\x45\\x93\\x82\\x91\\x72\\xc7\\x25\"\n\"\\xf7\\x96\\x18\\xf7\\x3d\\xf7\\x56\\xbf\\xc5\\xa9\\xa2\\xb6\\x99\\x19\\x0e\\x23\\x2f\\x0a\\x0e\\x23\\x39\\x0a\\x0e\\xfb\\xa3\\xf8\\x14\\xf9\\x10\\x15\\x92\\xa6\"\n\"\\x05\\xfb\\x41\\x06\\xfb\\x59\\xfd\\xc4\\x05\\xf7\\x50\\x06\\x92\\xa6\\x05\\x53\\x06\\x6b\\x7a\\x94\\x9e\\x90\\x8b\\x8b\\x8f\\x9b\\x1f\\xf7\\x34\\xf9\\x3a\\x92\"\n\"\\xa6\\x95\\x92\\xa9\\x8c\\x19\\x0e\\xfc\\x12\\x62\\xf9\\x2e\\x15\\xf7\\xb5\\xfd\\x40\\x05\\xd2\\x06\\xfb\\xb4\\xf9\\x40\\x05\\x0e\\xfb\\xa3\\x9e\\xfb\\x12\\x15\"\n\"\\x84\\x70\\x05\\xf7\\x41\\x06\\xf7\\x59\\xf9\\xc4\\x05\\xfb\\x51\\x06\\x84\\x70\\x05\\xc4\\x06\\xac\\x9b\\x82\\x79\\x86\\x8b\\x8b\\x87\\x7b\\x1f\\xfb\\x35\\xfd\"\n\"\\x3a\\x85\\x70\\x82\\x83\\x6c\\x8a\\x19\\x0e\\xfb\\x82\\xea\\xf7\\xc3\\x15\\xf7\\x23\\xf7\\xb9\\xf7\\x28\\xfb\\xb9\\x05\\xbf\\x06\\xfb\\x43\\xf7\\xef\\x05\\x58\"\n\"\\x06\\xfb\\x3d\\xfb\\xef\\x05\\x0e\\xf8\\x6a\\xfb\\x16\\x15\\xbd\\xfc\\x84\\x59\\x07\\x0e\\xfb\\xdb\\xf7\\xc1\\xf9\\x2e\\x73\\x0a\\x0e\\x25\\x0a\\x0e\\xf7\\x02\"\n\"\\xf9\\x17\\x15\\xc7\\x89\\x90\\x88\\x75\\x1a\\x82\\x89\\x80\\x84\\x74\\x1e\\x89\\x85\\x89\\x84\\x8a\\x85\\x89\\x84\\x18\\xfb\\x1c\\xfc\\x89\\x05\\x87\\x07\\x74\"\n\"\\xd7\\x6d\\xc4\\xf7\\x2b\\xf7\\x3a\\xf7\\x42\\xf7\\x32\\xd1\\x5a\\xbd\\x48\\x45\\x57\\x62\\xfb\\x02\\x44\\x1e\\xbe\\xf7\\x4f\\x93\\xa7\\xb8\\xf7\\x41\\x86\\x90\"\n\"\\x18\\x58\\x82\\x6e\\x86\\x42\\x82\\x08\\xf7\\x64\\xfb\\xa0\\x15\\xb7\\xa5\\x6a\\x56\\x49\\x59\\x20\\x4f\\x4d\\x1f\\x65\\x66\\x60\\x76\\x60\\x1b\\x6c\\x7c\\x96\"\n\"\\xa2\\xc7\\xa9\\xeb\\xb5\\xd6\\x1f\\xd8\\xb7\\xb8\\xb1\\xbb\\x1b\\x0e\\xfb\\x6c\\x3c\\x1d\\x0e\\x5c\\x0a\\x0e\\xfb\\x6c\\x28\\x1d\\x0e\\xfc\\x12\\xae\\xf8\\x20\"\n\"\\x15\\xe5\\x06\\x33\\xfc\\x38\\x05\\x20\\x75\\x6a\\x54\\x61\\x1b\\x7f\\x83\\x92\\x94\\x8f\\x2d\\x1d\\x91\\x8c\\x8f\\x91\\x52\\x0a\\x79\\x74\\x68\\xad\\x71\\xb8\"\n\"\\xe4\\xd0\\xed\\xf7\\x4d\\x40\\x0a\\xf7\\x01\\x06\\x91\\xab\\x05\\xfb\\x00\\x06\\xf7\\x32\\xa8\\xb0\\xd1\\xc3\\x1b\\x99\\x93\\x36\\x0a\\x87\\x43\\x1d\\x9e\\x9d\"\n\"\\xa1\\xb1\\x66\\xa6\\x59\\x5b\\x64\\x75\\x5d\\x67\\x1e\\x6d\\x63\\x77\\x5d\\x6d\\x2b\\x08\\x2f\\x06\\x0e\\x39\\x1d\\x0e\\x71\\x1d\\xfc\\x12\\x2f\\x1d\\x76\\xf8\"\n\"\\xbb\\x45\\x0a\\xfc\\x12\\xf7\\x8a\\xf8\\x4b\\x15\\x88\\x8d\\x36\\x7c\\x56\\x83\\x6b\\x89\\x19\\x7b\\x07\\xa6\\x8c\\x05\\x92\\x06\\xa7\\x97\\x81\\x75\\x81\\x86\"\n\"\\x71\\x80\\x5f\\x1f\\x43\\xfb\\xb8\\x05\\xfb\\x1e\\x69\\x74\\x60\\x63\\x54\\x1d\\xe2\\xc7\\xd6\\xf7\\x34\\xb3\\x1e\\xdf\\xf9\\x06\\x45\\x0a\\xfb\\x6c\\x72\\x1d\"\n\"\\x0e\\xfc\\x12\\xf7\\x78\\x3d\\x1d\\x0e\\xc9\\xf9\\x45\\xf7\\x09\\x15\\x87\\x86\\x86\\x86\\x87\\x85\\x7a\\x77\\x82\\x80\\x8a\\x8a\\x08\\x73\\x75\\x81\\x84\\x7d\"\n\"\\x1b\\x83\\x87\\x90\\x96\\x8f\\x8f\\x9c\\x91\\xa3\\x1f\\xcf\\xf7\\x8f\\x05\\x8c\\x90\\x8d\\x9b\\x92\\x1a\\xaf\\x72\\xa6\\x6a\\x77\\x77\\x84\\x7c\\x73\\x1e\\x5a\"\n\"\\x6b\\x62\\x5b\\x46\\xfb\\x02\\x08\\xa5\\xd9\\x99\\xc2\\x9e\\x1a\\xaf\\x74\\xa3\\x69\\x4e\\x45\\x49\\xfb\\x25\\x2f\\x1e\\xc5\\xf7\\x65\\x88\\x8d\\x55\\x80\\x76\"\n\"\\x87\\x36\\x7b\\x19\\x7b\\x07\\xb9\\x8a\\x8b\\x8b\\x94\\x86\\x08\\x90\\x89\\x8f\\x84\\x84\\x1a\\x7f\\x73\\x2f\\x68\\xfb\\x11\\x1e\\x75\\x3f\\x87\\x7b\\x7e\\x58\"\n\"\\x08\\xd6\\x06\\xbb\\xf7\\x32\\x9a\\xb1\\xad\\xbf\\x08\\xe1\\xc4\\xc6\\xc2\\xad\\x1b\\x98\\x92\\x82\\x7b\\x7e\\x6d\\xfb\\x0a\\x63\\xfb\\x21\\x1f\\x83\\x6e\\x87\"\n\"\\x7d\\x7e\\x5a\\x08\\xd6\\x06\\xb3\\xf7\\x30\\x9f\\xbe\\xbe\\xd1\\x08\\xcf\\xbc\\xbd\\xb7\\xa8\\x1b\\x96\\x94\\x82\\x7f\\x86\\x89\\x81\\x86\\x77\\x1f\\x51\\xfb\"\n\"\\x7a\\x05\\x81\\x64\\x88\\x7a\\x81\\x1a\\x6d\\x99\\x7b\\xa5\\xba\\xb7\\xac\\xd5\\xc0\\x1e\\x90\\x92\\x05\\x0e\\x32\\x1d\\x0e\\x2b\\x1d\\x0e\\xc3\\xf8\\x27\\x15\"\n\"\\xa2\\x8c\\x05\\xa1\\x8c\\x9f\\x7e\\x7b\\x1a\\x7f\\x68\\xfb\\x1f\\x67\\xfb\\x18\\x1e\\x74\\x36\\x77\\x40\\x7c\\x4c\\xcc\\x0a\\x9a\\x07\\x5c\\x7a\\x93\\xa1\\x99\"\n\"\\x9c\\xd7\\x9f\\xd7\\xee\\x1d\\xf7\\x3b\\xf7\\x34\\xd9\\x5f\\xba\\x44\\x4a\\x5b\\x6b\\x39\\x51\\x1f\\xa8\\xf0\\x05\\x8c\\x90\\x8c\\x8e\\x8b\\x1a\\x8e\\x89\\x8d\"\n\"\\x88\\x1e\\x8a\\x06\\xfb\\x2e\\x75\\x05\\xf7\\x9b\\x76\\x15\\xb6\\x89\\x9e\\x71\\x52\\x1a\\x47\\x6e\\x36\\x60\\x4d\\x1e\\x4f\\x61\\x5b\\x6d\\x57\\x1b\\x6f\\x77\"\n\"\\x9a\\xa1\\xad\\xae\\xf7\\x16\\xa9\\xd6\\x1f\\xa6\\xcf\\xc5\\xbc\\xbd\\x88\\x08\\x0e\\xf8\\x1b\\xfb\\x53\\x15\\x79\\x06\\x67\\x76\\x95\\x9e\\x8c\\x1f\\x8e\\x8c\"\n\"\\x8f\\x8c\\x8f\\x1e\\xf7\\x38\\xf8\\xd5\\x05\\x42\\x06\\x7c\\x5c\\x05\\xb9\\x7b\\x77\\x9b\\x62\\x1b\\xfb\\x18\\xfb\\x35\\xfb\\x4c\\xfb\\x2c\\x44\\xb2\\x5e\\xca\"\n\"\\xd2\\xb9\\xaf\\xf7\\x14\\xe4\\x1f\\x32\\xfb\\xb9\\x7e\\x63\\x7b\\x82\\x4a\\x87\\x19\\x7b\\xf7\\x85\\x07\\x45\\xf9\\x08\\x15\\xac\\xa5\\x70\\x6a\\x37\\x47\\xfb\"\n\"\\x22\\x47\\x52\\x1f\\x75\\x71\\x70\\x7f\\x73\\x1b\\x68\\x76\\xa9\\xba\\xd5\\xbf\\xf7\\x02\\xcc\\xce\\x1f\\xaa\\xaa\\xac\\x9d\\xa8\\x1b\\x0e\\xfb\\xa3\\x41\\x0a\"\n\"\\x0e\\xfb\\xa3\\x31\\x0a\\x0e\\xfc\\x12\\xf7\\xbc\\xf8\\x40\\x15\\x45\\x1d\\x8d\\x1a\\x91\\x4f\\x1d\\x0e\\x2a\\x1d\\x0e\\xfb\\x6c\\xa0\\xf8\\x27\\x15\\x8c\\x96\"\n\"\\x93\\x8b\\x96\\x1b\\xb2\\x95\\x7a\\x2f\\x99\\x1f\\x96\\x45\\x96\\xfb\\x27\\x4e\\x1a\\x6e\\x8c\\x85\\x93\\xa4\\xe6\\xf1\\xf7\\x26\\xf3\\x1e\\xae\\xbd\\xa5\\xcb\"\n\"\\xb1\\x1a\\xab\\x71\\xa6\\x6d\\x74\\x7d\\x7e\\x76\\x7b\\x91\\x7f\\x9d\\x7b\\x1e\\x98\\x7f\\x90\\x83\\x81\\x1a\\x5c\\x4a\\xfb\\x02\\x43\\x41\\x1e\\x6c\\x6b\\x84\"\n\"\\xf7\\x21\\x85\\xbf\\x7e\\xd5\\x19\\xf1\\x77\\x8b\\x8d\\x82\\x1b\\x86\\x84\\x8a\\x88\\x83\\x1f\\x7b\\x87\\x4d\\x7f\\x6a\\x86\\x08\\x0e\\x92\\x2d\\x0a\\x0e\\xfb\"\n\"\\x6c\\xf8\\x26\\xf7\\x03\\x15\\x83\\x82\\x86\\x85\\x82\\x7f\\x08\\x6d\\x74\\x7f\\x81\\x7f\\x1b\\x7d\\x82\\x98\\xa7\\x84\\x1f\\x88\\x96\\x8b\\x8d\\x8a\\x8e\\x08\"\n\"\\x72\\xf1\\x80\\xb9\\x9a\\x1a\\xd9\\xb8\\xae\\xb6\\x9d\\x1b\\x91\\x94\\x88\\x86\\x94\\x1f\\x84\\x97\\x92\\x89\\x94\\x1b\\x9f\\x99\\x9a\\xa0\\xa1\\x7a\\x9a\\x73\"\n\"\\x5f\\x66\\x67\\x20\\x45\\x1f\\x80\\xc2\\x05\\xcf\\x7d\\x80\\x9f\\x70\\x1b\\x74\\x6b\\x83\\x76\\x4d\\x1f\\x85\\x89\\x8b\\x8b\\x86\\x89\\x8f\\x7c\\x18\\x95\\xb2\"\n\"\\x92\\x8c\\x95\\x1b\\xa4\\x91\\x82\\x4f\\x99\\x1f\\xa8\\xfb\\x0f\\x39\\xfb\\x09\\x05\\x6d\\x76\\x78\\x79\\x80\\x1b\\x85\\x81\\x8e\\x91\\x81\\x1f\\x92\\x7e\\x81\"\n\"\\x8e\\x82\\x1b\\x77\\x7d\\x7c\\x77\\x71\\x9e\\x7b\\xaa\\xaa\\x97\\x94\\xc7\\xbd\\x1f\\xa6\\xac\\xa1\\xa9\\xb4\\xc2\\xa9\\xfb\\x0c\\x18\\x57\\x98\\x98\\x7c\\xab\"\n\"\\x1b\\xb1\\xa5\\xa3\\xe5\\xc5\\x1f\\x0e\\xfb\\x6c\\x31\\x1d\\x0e\\xfb\\xa3\\x33\\x0a\\x0e\\xfb\\x98\\xf8\\x2b\\xf9\\x43\\x15\\xfb\\x05\\x5e\\x69\\x21\\x6c\\x1f\"\n\"\\x5b\\xfb\\x46\\x78\\x42\\x75\\x73\\x4b\\x7a\\x19\\xb2\\x7d\\x98\\x7d\\x6e\\x1a\\x73\\x7f\\x55\\x75\\x40\\x1e\\x75\\x40\\x81\\x5d\\x74\\x1a\\x54\\xac\\x77\\xe7\"\n\"\\x88\\x1e\\x8e\\x96\\x05\\x65\\x96\\x7c\\x9d\\xb0\\x1a\\x9b\\x91\\xa4\\x9b\\xc8\\x1e\\xa5\\xe8\\x9d\\xda\\x9d\\x1a\\xa6\\x7b\\x9e\\x64\\x9c\\x1e\\xcc\\x9c\\xa5\"\n\"\\xa8\\xa1\\xde\\xb8\\xf7\\x3c\\x18\\xa0\\xda\\xa5\\xa8\\xc9\\x9b\\x08\\x0e\\xfc\\x15\\xce\\xfb\\x8d\\x15\\xcd\\xfa\\x7a\\x49\\x06\\x0e\\xfb\\x98\\xf7\\x71\\xf9\"\n\"\\x38\\x15\\xb1\\x80\\x9a\\x78\\x66\\x1a\\x7d\\x84\\x6e\\x7c\\x51\\x1e\\x89\\x83\\x8b\\x8b\\x82\\x6a\\x08\\x6a\\xfb\\x15\\x8b\\x8b\\x77\\x1a\\x6f\\x9b\\x79\\xb2\"\n\"\\x7a\\x1e\\x49\\x7a\\x73\\x6f\\x74\\x37\\x5e\\xfb\\x3c\\x18\\x76\\x3c\\x71\\x6e\\x4d\\x7b\\x88\\x80\\x18\\xf7\\x05\\xb8\\xad\\xf5\\xaa\\x1f\\xbb\\xf7\\x46\\x9e\"\n\"\\xd4\\xa1\\xa3\\xcb\\x9c\\x19\\x64\\x99\\x7e\\x99\\xa8\\x1a\\xa3\\x97\\xc0\\xa1\\xd7\\x1e\\xa1\\xd6\\x95\\xb9\\xa2\\x1a\\xc2\\x6a\\x9f\\x2f\\x8e\\x1e\\x0e\\xfb\"\n\"\\x0b\\xf8\\x94\\xf7\\xa8\\x15\\x55\\xab\\x05\\x64\\x73\\x7a\\x7f\\x6c\\x1b\\x76\\x77\\x90\\x94\\x7a\\x1f\\xba\\x32\\x79\\x91\\x5f\\x1b\\x5d\\x6f\\x77\\x4b\\x5d\"\n\"\\x1f\\xc1\\x6c\\x05\\xb1\\xa4\\x9c\\x97\\xa9\\x1b\\xa0\\x9f\\x86\\x82\\x9c\\x1f\\x5c\\xe4\\x9d\\x85\\xb7\\x1b\\xb1\\xaf\\xa0\\xb3\\xa8\\x1f\\x0e\\xfb\\xa3\\xf7\"\n\"\\x74\\xf7\\xb1\\x15\\x56\\xfb\\x24\\x67\\x31\\x65\\x39\\x08\\x6e\\x4d\\x82\\x6d\\x6b\\x1a\\x6a\\x99\\x7a\\xa5\\xaf\\x9f\\xac\\xde\\x99\\x1e\\x9e\\xf7\\x0a\\x9b\"\n\"\\xe1\\xb0\\xf7\\x3a\\x08\\xa9\\xf7\\x54\\x15\\x6c\\x72\\x74\\x6e\\x6e\\xa4\\x73\\xa9\\xa6\\xa4\\xa3\\xa6\\xaa\\x75\\xa2\\x6e\\x1f\\x0e\\xf8\\x32\\xf8\\xc4\\x15\"\n\"\\x6d\\x06\\x61\\xfb\\x0c\\x57\\x83\\x72\\x82\\x66\\x73\\x19\\x2e\\x50\\x51\\x28\\x26\\x1a\\x55\\x9e\\x5f\\xac\\x72\\x1e\\x9a\\x7f\\x99\\x85\\xa6\\x85\\x5b\\xfb\"\n\"\\x1c\\x18\\xaa\\x06\\xba\\xf7\\x19\\x05\\x8a\\x90\\x8c\\x8b\\x90\\x1b\\xd4\\xc1\\xaa\\xd7\\xc7\\x1f\\x7b\\x95\\x05\\x4f\\x53\\x65\\x76\\x58\\x1b\\x81\\x85\\x8c\"\n\"\\x8e\\x83\\x1f\\xf7\\x1d\\xf8\\x1b\\x05\\xa3\\x8a\\x96\\x84\\x7e\\x1a\\x87\\x89\\x86\\x87\\x82\\x1e\\xb8\\x0a\\xa6\\xa1\\x7f\\xa1\\x79\\x99\\x1e\\x78\\x99\\x7b\"\n\"\\x90\\x68\\x8e\\x08\\xfb\\x3e\\xfc\\x23\\x15\\x70\\xa2\\x7f\\xa9\\xb8\\x1a\\xcb\\xa0\\xd3\\xae\\xc0\\x1e\\xae\\xbf\\xa8\\xa1\\xbe\\x9a\\x08\\x0e\\xf8\\x20\\xf7\"\n\"\\xd3\\x15\\x92\\xb5\\x05\\xfb\\x0f\\x06\\xf7\\x76\\xb5\\xa2\\xc1\\xc4\\x1b\\xa3\\x97\\x7e\\x6c\\x8f\\x1f\\x68\\x90\\x92\\x82\\xa3\\x1b\\xa4\\x99\\x99\\xa6\\xb8\"\n\"\\x65\\xaa\\x54\\x55\\x59\\x70\\x5a\\x65\\x1f\\x59\\x4b\\x76\\x53\\x77\\xfb\\x05\\x08\\xfb\\x02\\x06\\x82\\x61\\x05\\xf7\\x05\\x06\\x72\\xfb\\x60\\x05\\x96\\x63\"\n\"\\x8a\\x8b\\x7c\\x1b\\x53\\x65\\x6f\\x63\\x64\\xa5\\x72\\xb2\\xae\\xa1\\x9a\\xbb\\xb2\\x1f\\x59\\xcb\\xaa\\x7e\\xbc\\x1b\\xce\\xbd\\xad\\xca\\xa4\\x1f\\x80\\x94\"\n\"\\x81\\x84\\x05\\x77\\x6f\\x75\\x84\\x6e\\x1b\\x60\\x5e\\x96\\xa6\\x43\\x1f\\xb4\\xe4\\x91\\x9b\\xa5\\xf7\\x02\\x08\\xfb\\x10\\xfb\\x8a\\x15\\x69\\x7f\\x6e\\x74\"\n\"\\x6d\\x1b\\x73\\x78\\x9b\\xa0\\xa6\\xa1\\x9d\\xaa\\xa0\\x97\\x86\\x77\\xa7\\x1f\\x0e\\xfc\\x81\\xac\\x0a\\xf8\\x5c\\xf7\\x4a\\x15\\x97\\xb3\\x05\\xfb\\x48\\x06\"\n\"\\xa3\\xdd\\x91\\x93\\x05\\xf7\\x3e\\x06\\x97\\xb3\\x05\\xfb\\x2b\\x06\\xf7\\x49\\xf7\\x74\\xab\\xb3\\x94\\x92\\xab\\x99\\x19\\x9b\\xfb\\x51\\x7b\\x07\\xbc\\x85\"\n\"\\x8b\\x8b\\x95\\x85\\x48\\x1d\\x6f\\x5b\\x48\\xfb\\x06\\xfb\\x17\\x1e\\x86\\x85\\x84\\x84\\x88\\x86\\x7e\\x7c\\x18\\x7e\\xb8\\x89\\x95\\x7d\\xb8\\x08\\x6f\\xeb\"\n\"\\x80\\xb5\\x9b\\x1a\\xa4\\x96\\x90\\xcb\\x91\\x1e\\x9b\\xfb\\x83\\x7b\\x07\\xce\\x82\\x8f\\x88\\x9c\\x55\\xca\\xfb\\x6f\\x18\\xfb\\x20\\x06\\x7f\\x63\\x05\\xf7\"\n\"\\x37\\x06\\x8e\\x81\\x74\\x3b\\x05\\xfb\\x38\\x06\\x7f\\x63\\x05\\xf7\\x39\\x06\\x70\\x2f\\x7a\\x58\\x6e\\x78\\x4c\\x87\\x19\\x87\\x7b\\x05\\xf7\\xb1\\x9b\\x06\"\n\"\\x35\\x92\\x85\\x8e\\xaa\\x1a\\xa1\\x91\\xa2\\xa4\\xdb\\x1e\\x0e\\xf8\\x56\\xf8\\x30\\x15\\xfb\\x12\\x06\\x9d\\xf7\\x1f\\x92\\xae\\x9c\\xaa\\x08\\xa3\\x97\\x9d\"\n\"\\x97\\xa1\\x1b\\x97\\x94\\x86\\x82\\x88\\x89\\x87\\x87\\x84\\x1f\\x86\\x82\\x89\\x86\\x85\\x1a\\x76\\x9e\\x79\\xa1\\xa2\\x9c\\x9e\\xa7\\xb3\\x68\\xa8\\x5c\\x63\"\n\"\\x66\\x78\\x65\\x6d\\x1e\\x65\\x5b\\x77\\x56\\x78\\xfb\\x04\\x08\\xfb\\x01\\x06\\x84\\x6d\\x05\\xf7\\x04\\x06\\x64\\xfb\\xeb\\x7f\\x25\\x81\\x5e\\x7a\\x71\\x19\"\n\"\\x7c\\x81\\x7b\\x81\\x7a\\x1b\\x7f\\x82\\x92\\x94\\x90\\x8d\\x8f\\x8f\\x92\\x1f\\x91\\x94\\x8d\\x92\\x91\\x1a\\xa0\\x79\\x9c\\x75\\x71\\x79\\x77\\x6e\\x64\\xab\"\n\"\\x70\\xba\\xe1\\xce\\xee\\xf7\\x36\\xa1\\x1e\\xb5\\xf7\\xc3\\x05\\xf7\\x0e\\x06\\x0e\\xf7\\x8d\\xf8\\x22\\x15\\x92\\x79\\x7a\\x8f\\x79\\x1b\\x51\\x5b\\x54\\x47\"\n\"\\x5c\\xa3\\x57\\xba\\x55\\x1f\\xd7\\x34\\x05\\xb1\\x5f\\x97\\x74\\x6d\\x1a\\x56\\x61\\x66\\x4f\\x66\\x69\\x9c\\x9f\\x91\\x8f\\x90\\x96\\x91\\x1e\\x9f\\x98\\x92\"\n\"\\x96\\xa1\\x1a\\xa6\\x7a\\x9b\\x6d\\x68\\x76\\x76\\x68\\x4e\\xc7\\x5c\\xd7\\xe4\\xce\\xc6\\xd9\\xb3\\x81\\xa1\\x56\\xce\\x1e\\x8d\\x8e\\x05\\x85\\x97\\x92\\x8a\"\n\"\\x99\\x1b\\xd2\\xba\\xbd\\xd7\\xb4\\x7c\\xb4\\x71\\xab\\x1f\\xfb\\x0f\\xf7\\x2a\\x05\\x7a\\xa0\\x82\\xa4\\xa5\\x1a\\xbe\\xae\\xab\\xc4\\xad\\xa5\\x7d\\x7a\\x85\"\n\"\\x87\\x86\\x82\\x83\\x1e\\x7c\\x7e\\x85\\x80\\x7d\\x1a\\x71\\x9e\\x78\\xa6\\xab\\x9f\\xa0\\xad\\xc5\\x55\\xb4\\x3f\\x35\\x4e\\x57\\x42\\x5f\\x9b\\x69\\xbe\\x4d\"\n\"\\x1e\\x65\\x7e\\x15\\xac\\xae\\x72\\x58\\xb2\\x1f\\xb6\\x52\\x99\\x6e\\x69\\x1a\\x64\\x6e\\x6b\\x67\\x51\\x20\\xf7\\x16\\xd2\\xb0\\xa8\\xa8\\xb0\\x1e\\x0e\\xb0\"\n\"\\xdd\\x15\\xb3\\x63\\xd8\\xda\\x05\\x74\\xac\\xaa\\x81\\xb0\\x1b\\xb1\\xaa\\x95\\xa2\\xaa\\x1f\\xda\\x3c\\xb1\\xb3\\x3e\\xd8\\x05\\xa2\\xae\\x94\\xa8\\xb1\\x1a\"\n\"\\xb1\\x82\\xa8\\x74\\xac\\x1e\\xd8\\xd9\\x65\\xb2\\x3c\\x3e\\x05\\xa0\\x6d\\x6c\\x95\\x65\\x1b\\x65\\x6d\\x82\\x75\\x69\\x1f\\x3e\\xd8\\x63\\x64\\xd9\\x3d\\x05\"\n\"\\x75\\x6b\\x81\\x6d\\x64\\x1a\\x65\\x94\\x6e\\xa2\\x69\\x1e\\xf7\\x23\\xf7\\x72\\x15\\xca\\xbf\\x54\\x49\\x48\\x57\\x55\\x4a\\x49\\x56\\xc1\\xcf\\xce\\xc0\\xc0\"\n\"\\xcf\\x1f\\x0e\\xfc\\x52\\xf7\\x2d\\xf8\\x39\\x15\\xc6\\xf7\\x13\\xa8\\xd4\\x9b\\x1a\\x9b\\x7d\\x98\\x79\\x73\\x72\\x78\\x75\\x86\\x1e\\x85\\x73\\x82\\x3d\\x83\"\n\"\\x25\\x08\\x0e\\x23\\xf7\\xbc\\xf9\\x2e\\x73\\x0a\\xf7\\x5c\\x9c\\x15\\x36\\x5c\\x5e\\x54\\x52\\x1a\\x63\\xa4\\x6c\\xab\\xa9\\xa1\\x9f\\xa6\\x9c\\xbf\\x0a\\xa1\"\n\"\\xa5\\xc0\\xae\\x1e\\x0e\\xc0\\xf7\\x6c\\x60\\x0a\\x71\\x77\\x52\\x4b\\x1e\\x71\\x74\\x80\\x83\\x31\\x45\\x08\\xf7\\x36\\x82\\x15\\x97\\x79\\xa1\\x70\\xac\\x64\"\n\"\\x94\\x81\\x92\\x82\\x90\\x83\\x08\\x63\\xa6\\xa4\\x6f\\x94\\x1b\\x8f\\x8e\\x8e\\x8f\\x95\\x72\\xc2\\x66\\xcf\\x1f\\x88\\x90\\x83\\x9c\\x82\\x9d\\xa6\\xa9\\xa1\"\n\"\\xa2\\x9b\\x99\\x98\\x97\\x98\\x98\\x98\\x98\\x08\\xaf\\xb1\\x9b\\xa2\\x98\\x1a\\x8f\\x88\\x8e\\x88\\x84\\x72\\x77\\x52\\x4a\\x1e\\x71\\x74\\x80\\x83\\x31\\x45\"\n\"\\x08\\x0e\\xfb\\xdb\\xbe\\xf7\\x6c\\x60\\x0a\\x71\\x77\\x52\\x4b\\x1e\\x71\\x74\\x80\\x83\\x31\\x45\\x08\\x0e\\xfb\\xdb\\xf7\\xae\\xf7\\x74\\x15\\x7f\\x9d\\x75\"\n\"\\xa6\\x6a\\xb2\\x82\\x95\\x84\\x94\\x86\\x93\\x08\\xb3\\x70\\x72\\xa7\\x82\\x1b\\x87\\x88\\x88\\x87\\x81\\xa5\\x54\\xaf\\x47\\x1f\\x8e\\x86\\x93\\x7a\\x94\\x79\"\n\"\\x70\\x6d\\x75\\x74\\x7b\\x7d\\x7e\\x7f\\x7e\\x7e\\x7e\\x7e\\x08\\x67\\x65\\x7b\\x74\\x7e\\x1a\\x87\\x8e\\x88\\x8e\\x92\\xa2\\x9d\\xc6\\xce\\x1e\\xa5\\xa2\\x93\"\n\"\\x91\\xc4\\xb8\\x97\\x93\\x97\\x95\\x97\\x94\\x08\\x0e\\xf7\\x18\\xf8\\x20\\x15\\x85\\x7b\\x76\\x29\\x63\\xfb\\x58\\x6d\\xfb\\x28\\x7f\\x5e\\x7a\\x6b\\x08\\x6c\"\n\"\\x79\\x7a\\x7e\\x72\\x1b\\x7c\\x86\\x8e\\x95\\x8e\\x8c\\x8e\\x8e\\x90\\x1f\\x8f\\x92\\x8c\\x8f\\x90\\x1a\\xa0\\x79\\x9c\\x76\\x97\\x0a\\x90\\x88\\x84\\x87\\x8a\"\n\"\\x89\\x80\\x61\\x1f\\x50\\xfb\\x68\\x7c\\x4e\\x88\\x0a\\x93\\xad\\xf7\\x15\\xb1\\xf7\\x1e\\x1f\\x94\\xac\\x93\\xa8\\x90\\x9c\\x8c\\x8f\\x18\\x8f\\x9b\\x8c\\x92\"\n\"\\x90\\x1a\\x86\\x8e\\x05\\x87\\x87\\x8b\\x89\\x81\\x1f\\x87\\x72\\x70\\x89\\x6e\\x1b\\xfb\\x2a\\x06\\xa9\\xf4\\x9a\\xb3\\x9f\\xaa\\x08\\xb1\\xa4\\xa9\\x9c\\xb4\"\n\"\\x1b\\xa0\\x98\\x85\\x81\\x88\\x8a\\x89\\x88\\x87\\x1f\\x84\\x84\\x89\\x86\\x80\\x1a\\x72\\x9b\\x7a\\xa4\\xa4\\x9c\\x9c\\xa4\\xb5\\x61\\xa7\\x4e\\x53\\x54\\x73\"\n\"\\x64\\x68\\x1e\\x61\\x5c\\x77\\x62\\x6c\\x25\\x08\\x34\\x06\\x84\\x6b\\x05\\x0e\\xf8\\x0b\\xf8\\x20\\x15\\x83\\x64\\x88\\x7e\\x75\\x39\\x08\\x69\\xfb\\x17\\x7e\"\n\"\\x4c\\x70\\x1a\\x6c\\x9e\\x78\\xa8\\xb5\\xa9\\xa3\\xdc\\xc7\\x1e\\x7b\\x94\\x05\\x57\\x5e\\x78\\x7a\\x7d\\x1b\\x85\\x86\\x90\\x91\\x9b\\xe1\\xf8\\x00\\xb4\\xf7\"\n\"\\x32\\x1f\\x9c\\xca\\x8f\\x9d\\x92\\x8b\\x0a\\x76\\x75\\x8d\\x79\\x1b\\x53\\x53\\x72\\x61\\x64\\x1f\\x60\\x5c\\x76\\x62\\x6d\\x28\\x08\\x30\\x06\\x85\\x6b\\x05\"\n\"\\xe4\\xec\\x1d\\x6d\\xfb\\x06\\x79\\x6c\\x08\\x6c\\x78\\x7c\\x80\\x72\\x1b\\x7d\\x85\\x8f\\x94\\x8e\\x2d\\x1d\\x92\\x8c\\x90\\x90\\x1a\\x9f\\x79\\x9c\\x75\\x77\"\n\"\\x7b\\x7a\\x74\\x67\\xab\\x71\\xb9\\xe5\\xd2\\xf0\\xf7\\x51\\xb5\\x1e\\xd0\\xf7\\xca\\x05\\x92\\xab\\x15\\x90\\x9f\\x05\\xf7\\x26\\xb0\\xbc\\xcd\\xd3\\xc9\\x0a\"\n\"\\x85\\x83\\x89\\x85\\x84\\x1a\\x86\\x8c\\x86\\x8f\\x84\\x1e\\x8f\\x84\\x8d\\x85\\x8a\\x88\\x8a\\x88\\x18\\x67\\xfb\\x24\\x05\\x0e\\xf8\\x8d\\xf7\\x87\\x15\\xfc\"\n\"\\x8b\\x06\\x83\\x5d\\x05\\xf8\\x8b\\x06\\x0e\\xf7\\x47\\xfb\\x33\\x15\\xbb\\xf7\\x66\\x9c\\xd2\\xb1\\xec\\xa5\\xb2\\x19\\x7e\\xa2\\x88\\x9e\\xb6\\x1a\\xab\\x8d\"\n\"\\x9b\\x92\\xae\\x1e\\xb7\\xa0\\x87\\x7a\\xb3\\x1f\\x83\\x9e\\x93\\x89\\x96\\x1b\\xa7\\x9b\\x9a\\xa6\\xa6\\x7c\\x98\\x6b\\x7c\\x82\\x89\\x81\\x74\\x1f\\x66\\x7c\"\n\"\\x80\\x89\\x61\\x8a\\x96\\xbb\\x92\\x9e\\xa8\\xba\\x08\\x9e\\xa7\\x90\\x99\\x9d\\x1a\\xa8\\x7c\\x9b\\x70\\x6c\\x7b\\x77\\x66\\x81\\x8c\\x83\\x8e\\x7a\\x1e\\x8f\"\n\"\\x78\\x8c\\x80\\x80\\x1a\\x74\\x89\\x78\\x83\\x5f\\x1e\\x61\\x8c\\x80\\x8d\\x66\\x9a\\x08\\x94\\x75\\x81\\x8e\\x7d\\x1b\\x6a\\x7c\\x7e\\x70\\x70\\x9b\\x7c\\xa7\"\n\"\\x96\\x93\\x8d\\x94\\x9f\\x1f\\x9b\\xb2\\x9b\\x8f\\xb4\\x1b\\x7e\\x41\\x75\\x5c\\x64\\x60\\x08\\x86\\x8b\\x85\\x8d\\x7b\\x1e\\x8d\\x78\\x8c\\x7f\\x81\\x1a\\x56\"\n\"\\x7e\\x2e\\x76\\x21\\x1e\\x88\\x7c\\x83\\x63\\x82\\x5d\\x08\\x0e\\xf7\\xae\\xf8\\x3f\\x15\\x78\\x37\\x77\\x60\\x66\\x67\\x08\\x8c\\x87\\x8c\\x88\\x89\\x1a\\x96\"\n\"\\x65\\x8e\\x7b\\x78\\x1a\\x75\\x87\\x6c\\x84\\x6a\\x1e\\x71\\x06\\x78\\x7e\\x8e\\x99\\x6b\\x1f\\x95\\x73\\x7d\\x8f\\x7e\\x1b\\x6f\\x77\\x7a\\x72\\x73\\x9d\\x7b\"\n\"\\xa6\\x99\\x95\\x8d\\x95\\xa4\\x1f\\xb2\\x9a\\x98\\x8d\\xb2\\x8c\\x84\\x5f\\x84\\x7a\\x6e\\x5c\\x08\\x77\\x6d\\x85\\x7b\\x79\\x1a\\x6f\\x9b\\x79\\xa4\\xa5\\xa1\"\n\"\\xa4\\xa8\\x91\\x8a\\x94\\x89\\x96\\x1e\\x87\\xa2\\x89\\x9f\\x9e\\x1a\\xa3\\x8e\\x9f\\x92\\xab\\x1e\\xb2\\x8a\\x97\\x89\\xb3\\x7c\\x08\\x82\\xa3\\x96\\x88\\x97\"\n\"\\x1b\\xa8\\x9d\\x9b\\xa3\\xa3\\x77\\x9d\\x6f\\x7e\\x7d\\x87\\x81\\x73\\x1f\\x7e\\x6b\\x7e\\x87\\x78\\x1b\\x78\\x06\\x9e\\xdf\\x9f\\xb6\\xb0\\xaf\\x08\\x7f\\xb5\"\n\"\\x87\\x9e\\xa1\\x1a\\xa1\\x8f\\xaa\\x92\\xab\\x1e\\xa5\\x06\\x9d\\x99\\x88\\x7d\\xab\\x1f\\x81\\xa3\\x98\\x87\\x99\\x1b\\xa7\\x9f\\x9c\\xa4\\xa3\\x79\\x9b\\x70\"\n\"\\x7d\\x81\\x88\\x82\\x72\\x1f\\x63\\x7c\\x7f\\x89\\x64\\x8a\\x92\\xb7\\x92\\x9d\\xa8\\xba\\x08\\x9f\\xa9\\x91\\x9b\\x9d\\x1a\\xa6\\x7a\\x9d\\x73\\x71\\x75\\x72\"\n\"\\x6e\\x85\\x8c\\x82\\x8d\\x80\\x1e\\x8f\\x74\\x8d\\x76\\x7a\\x1a\\x75\\x89\\x78\\x84\\x67\\x1e\\x64\\x8c\\x7f\\x8d\\x63\\x9a\\x08\\x94\\x73\\x80\\x8e\\x7e\\x1b\"\n\"\\x6f\\x79\\x7b\\x73\\x72\\x9f\\x7a\\xa7\\x99\\x98\\x8f\\x95\\xa3\\x1f\\x99\\xab\\x99\\x8e\\x9d\\x1b\\x0e\\xfc\\x2e\\x46\\x0a\\xfb\\x1d\\xf8\\xfc\\x22\\x0a\\xfb\"\n\"\\x95\\x06\\x25\\x4e\\x75\\x55\\x5e\\x1f\\x67\\x60\\x74\\x47\\x4c\\x1a\\x64\\x9b\\x6b\\xa8\\x76\\x1e\\xa7\\x78\\xa4\\x84\\xc2\\x89\\x7f\\x5f\\x84\\x74\\x80\\x5e\"\n\"\\x47\\xfb\\x94\\x8b\\x8b\\x7e\\x87\\x7f\\x85\\x7b\\x88\\x5d\\x87\\x86\\x76\\x18\\xf7\\x28\\x06\\xf7\\x5c\\xf9\\x87\\x05\\xc5\\x06\\xfb\\x5c\\xfd\\x87\\x05\\xf7\"\n\"\\x28\\x06\\x90\\xa0\\x05\\x4c\\x92\\x82\\x8e\\x9b\\x1a\\x97\\x8d\\x96\\x94\\xa6\\x1e\\x8d\\x92\\x8d\\x92\\x8c\\x1a\\xf7\\x30\\xf8\\xdd\\x99\\xbb\\x92\\x90\\xd7\"\n\"\\x90\\x19\\xfb\\xf7\\xfb\\xdc\\x15\\x6f\\x8e\\x7e\\x8f\\x7f\\x97\\x08\\x76\\x9e\\x7f\\xaa\\xac\\x1a\\xc9\\xa7\\xd7\\xb1\\xb4\\x1e\\xa7\\xaa\\xa7\\x98\\xb6\\x8e\"\n\"\\x08\\x0e\\xfb\\xca\\xf7\\x5d\\xf8\\x5a\\x15\\x42\\x51\\x51\\x42\\x40\\xc7\\x4f\\xd5\\xd3\\xc7\\xc6\\xd2\\xd8\\x50\\xc6\\x3f\\x1f\\x0e\\xfb\\xdb\\xc0\\xfb\\x15\"\n\"\\x33\\x1d\\x23\\xcd\\xfb\\x15\\x69\\x0a\\xf7\\x6e\\x7a\\x37\\x1d\\xc3\\xc3\\x3e\\x0a\\x70\\x79\\x38\\x1d\\x70\\x56\\x68\\x1e\\x0e\\x23\\x80\\x0a\\xf7\\x6e\\x7a\"\n\"\\x15\\xe0\\xba\\xb8\\xc2\\xc4\\x3e\\x0a\\x70\\x79\\x91\\x81\\x9e\\x7a\\x1e\\x9a\\x7d\\x90\\x83\\x80\\x1a\\x71\\x74\\x6f\\x57\\x69\\x1e\\x0e\\xf8\\x53\\xf7\\x74\"\n\"\\x15\\x7f\\x9d\\x75\\xa6\\x6a\\xb2\\x82\\x96\\x84\\x93\\x86\\x93\\x08\\xb4\\x70\\x72\\xa6\\x82\\x1b\\x87\\x88\\x88\\x87\\x81\\xa5\\x54\\xaf\\x47\\x1f\\x8e\\x86\"\n\"\\x93\\x7a\\x94\\x79\\x70\\x6d\\x75\\x74\\x7b\\x7d\\x7e\\x7f\\x7e\\x7e\\x7e\\x7e\\x08\\x67\\x65\\x7b\\x74\\x7e\\x1a\\x87\\x8e\\x88\\x8e\\x92\\xa2\\x9d\\xc6\\xce\"\n\"\\x1e\\xa5\\xa2\\x93\\x91\\xc4\\xb8\\x97\\x93\\x97\\x95\\x97\\x94\\x08\\xfb\\x36\\x94\\x15\\x7f\\x9d\\x75\\xa6\\x6a\\xb2\\x82\\x95\\x84\\x94\\x86\\x93\\x08\\xb3\"\n\"\\x70\\x72\\xa7\\x82\\x1b\\x87\\x88\\x88\\x87\\x81\\xa5\\x54\\xaf\\x47\\x1f\\x8e\\x86\\x93\\x7a\\x94\\x79\\x70\\x6d\\x75\\x74\\x7b\\x7d\\x7e\\x7f\\x7e\\x7e\\x7e\"\n\"\\x7e\\x08\\x67\\x65\\x7b\\x74\\x7e\\x1a\\x87\\x8e\\x88\\x8e\\x92\\xa2\\x9d\\xc6\\xce\\x1e\\xa5\\xa2\\x93\\x91\\xc4\\xb8\\x97\\x93\\x97\\x95\\x97\\x94\\x08\\x0e\"\n\"\\xf7\\x79\\xf7\\x04\\xef\\x4c\\x0a\\xf7\\xbd\\x16\\x6d\\x72\\x72\\x6b\\x6e\\xa4\\x72\\xa7\\xab\\x36\\x1d\\xf7\\xbd\\x16\\x6c\\x73\\x72\\x6b\\x6e\\xa4\\x72\\xa7\"\n\"\\xab\\x36\\x1d\\x0e\\xf7\\xe8\\xf8\\xde\\xf9\\x56\\x15\\x5f\\x06\\x35\\x33\\x79\\x80\\x56\\x1b\\x5d\\x77\\x93\\xaa\\x66\\x1f\\xa1\\x6f\\x7f\\x91\\x75\\x1b\\x26\"\n\"\\x2f\\x26\\xfb\\x04\\x3e\\xbf\\x4f\\xce\\xe4\\xd8\\xf7\\x02\\xf7\\x13\\x96\\x8b\\x8f\\x88\\x97\\x1f\\x8a\\x92\\x05\\x7e\\xb4\\x8f\\x8a\\x9f\\x1b\\xc8\\xac\\x99\"\n\"\\xb7\\xb0\\x1f\\xfc\\x1d\\xfd\\x27\\x05\\xb9\\x06\\xc4\\xf9\\x30\\x15\\x8f\\x8a\\x90\\x88\\x93\\x83\\x96\\x80\\x8f\\x88\\x92\\x88\\x08\\xaa\\x7b\\x8f\\x86\\x69\"\n\"\\x1a\\xfb\\x07\\x4e\\x29\\x44\\x66\\x74\\xaa\\xba\\x8d\\x1e\\x8e\\xcb\\xa6\\xd3\\xb0\\xb7\\x9b\\x9f\\xa5\\x9f\\x92\\x8a\\x08\\xf7\\xed\\xfb\\xd4\\x15\\x29\\x2e\"\n\"\\x26\\xfb\\x00\\x65\\x94\\x6e\\x9d\\x72\\x1f\\x6e\\xa1\\xb1\\x78\\xad\\x1b\\xe1\\xd8\\xf7\\x01\\xf7\\x0e\\xd6\\x69\\xb6\\x50\\x1f\\x94\\x6f\\x15\\xae\\xa5\\x66\"\n\"\\x58\\x59\\x78\\x4e\\x6e\\x61\\x1f\\x68\\x72\\x6e\\x79\\x6a\\x1b\\x6a\\x76\\xa7\\xb7\\xb7\\x9d\\xcb\\xa4\\xb8\\x1f\\xb9\\xa6\\xa7\\xa2\\xa9\\x1b\\xf7\\xf3\\xa7\"\n\"\\x15\\x29\\x2e\\x26\\xfb\\x00\\x64\\x94\\x6f\\x9d\\x72\\x1f\\x6e\\xa1\\xb1\\x78\\xad\\x1b\\xe1\\xd8\\xf7\\x01\\xf7\\x0e\\xd6\\x69\\xb6\\x50\\x1f\\x94\\x6f\\x15\"\n\"\\xae\\xa5\\x66\\x58\\x58\\x78\\x4f\\x6e\\x61\\x1f\\x68\\x73\\x6e\\x79\\x69\\x1b\\x6b\\x75\\xa7\\xb3\\xd1\\xab\\xe0\\xb7\\xba\\x1f\\x9a\\x99\\x9f\\x94\\x9d\\x1b\"\n\"\\x0e\\xf7\\xb0\\xf7\\xb1\\x15\\x84\\x6e\\x7d\\x53\\x6d\\x65\\x44\\x52\\x19\\xfb\\x06\\x2e\\x77\\x70\\x4e\\x1a\\x3d\\xc5\\x58\\xe4\\xde\\xc5\\xb8\\xcb\\xa9\\x7c\"\n\"\\x9d\\x72\\x74\\x7b\\x7d\\x75\\x84\\x8d\\x85\\x90\\x80\\x1e\\x91\\x7e\\x8d\\x85\\x83\\x1a\\x6d\\x70\\x79\\x60\\x58\\x6e\\xa9\\xc1\\xc0\\xa1\\xb5\\xcc\\xd2\\x1e\"\n\"\\xde\\xea\\x96\\xa1\\x9d\\xee\\x08\\x99\\xf7\\x50\\x15\\x6e\\x73\\x73\\x70\\x6e\\xa3\\x74\\xa8\\xa9\\xa2\\xa2\\xa8\\xa8\\x74\\xa1\\x6d\\x1f\\x0e\\xfb\\xdb\\xf7\"\n\"\\xac\\xf8\\x80\\x28\\x0a\\xfb\\xdb\\xf7\\x48\\xa7\\x1d\\xfb\\xdb\\xf7\\xbd\\xf9\\x29\\x20\\x0a\\xfb\\xdb\\xf8\\x23\\xf9\\x04\\x15\\x6a\\x7f\\x7f\\x8e\\x1d\\xb0\"\n\"\\xce\\x99\\x1f\\x0e\\xfb\\xdb\\xf8\\x2f\\xf8\\xdb\\x29\\x1d\\xfb\\xdb\\xf8\\x19\\xf9\\x1e\\x3e\\x1d\\xfb\\xdb\\xf7\\x95\\xf8\\xf2\\x24\\x1d\\x0e\\xfb\\xdb\\xf7\"\n\"\\x31\\xf8\\xf2\\x23\\x1d\\xfb\\xdb\\xf7\\x92\\xf9\\x57\\xa4\\x1d\\x66\\x6f\\x58\\x0a\\x0e\\xfb\\xdb\\xa0\\x2b\\x15\\x94\\x83\\x05\\x90\\x99\\x93\\x8d\\x95\\x1b\"\n\"\\xa6\\x9e\\x79\\x71\\x71\\x78\\x7c\\x69\\x76\\x7a\\x8f\\x96\\x6d\\x3c\\x0a\\x82\\x85\\x8a\\x89\\x81\\x1f\\xb7\\xcd\\x05\\x65\\x06\\x0e\\xfb\\xdb\\xe8\\xaa\\x1d\"\n\"\\x93\\xfb\\x34\\x2b\\x0a\\xfb\\xdb\\xf7\\x4b\\x41\\x15\\x75\\x70\\x73\\x81\\x6b\\x1b\\x68\\x73\\xa0\\xa9\\xa9\\x95\\xa9\\xa2\\xae\\x1f\\x73\\x06\\x59\\x65\\x77\"\n\"\\x6b\\x5f\\x1a\\x57\\xb6\\x60\\xbf\\xbc\\xb4\\xa5\\xbe\\xae\\x1e\\x0e\\xfb\\xdb\\xf8\\x3e\\xf9\\x29\\x21\\x0a\\xf7\\x79\\xcf\\x1d\\xf7\\x79\\x81\\x0a\\x7d\\x89\"\n\"\\x7d\\x87\\x73\\x78\\x0a\\xaa\\x88\\x9d\\x88\\x91\\x87\\x08\\x91\\x88\\x8e\\x84\\x83\\x80\\x1d\\x0e\\xfc\\x14\\xf7\\xbf\\xf9\\x35\\x15\\x89\\x89\\x84\\x6d\\x05\"\n\"\\xa3\\x86\\x77\\x96\\x69\\x1b\\x33\\x26\\x20\\x2e\\x5f\\xa9\\x71\\xbb\\xbc\\xa6\\x9e\\xcf\\xbd\\x1f\\x7d\\x68\\x88\\x81\\x7a\\x1a\\x7c\\x97\\x81\\x9e\\xa5\\x99\"\n\"\\x96\\xc2\\xbd\\x1e\\x84\\x95\\x05\\x6d\\x6e\\x81\\x82\\x85\\x1b\\x89\\x89\\x8e\\x8e\\x9a\\x9c\\xcd\\xb4\\xf7\\x25\\x1f\\x25\\x7a\\x15\\x96\\x8a\\x93\\x7b\\x76\"\n\"\\x1a\\x6c\\x76\\x56\\x70\\x63\\x1e\\x67\\x71\\x70\\x77\\x73\\x1b\\x7c\\x7d\\x9e\\xa0\\xd5\\xde\\xf7\\x02\\xbf\\x85\\x1f\\x0e\\x23\\xf8\\xaf\\xf7\\x4d\\x15\\x68\"\n\"\\x43\\x70\\x6b\\x5f\\x75\\x08\\x7a\\x68\\x62\\x85\\x37\\x1b\\x3c\\x71\\x93\\xa5\\x96\\x96\\xb7\\xa6\\xe8\\x1f\\x93\\xa8\\x90\\x9f\\xa0\\xd5\\xf7\\x22\\xde\\x18\"\n\"\\x99\\xbc\\xfb\\x23\\x36\\xbc\\xf7\\x43\\x4a\\x0a\\x87\\x77\\x84\\x70\\x1e\\x53\\xfb\\x5c\\x28\\x50\\x7e\\x5b\\xee\\xc6\\x55\\xfb\\x56\\x79\\x51\\x84\\x85\\x53\"\n\"\\x81\\x19\\x7b\\xf8\\x91\\x07\\xc5\\xf7\\x47\\x05\\x0e\\xc9\\xc3\\x0a\\x6d\\x91\\x67\\x6a\\x0a\\x6e\\x92\\x6c\\x64\\x1a\\x24\\x5b\\xfb\\x29\\x4b\\x30\\x1e\\x3c\"\n\"\\x55\\x4d\\x65\\x44\\x1b\\x69\\x74\\x93\\xa0\\x74\\x1f\\x0e\\xf7\\xb0\\xfa\\x58\\x22\\x0a\\xfc\\x05\\x06\\xfb\\x2c\\x98\\x05\\xfb\\x64\\xfb\\x4e\\xfb\\x65\\xfb\"\n\"\\x7c\\xfb\\x1a\\xec\\x28\\xf7\\x16\\xa4\\x9b\\x8c\\x8e\\xc8\\x1f\\x8e\\xbf\\xa3\\x8c\\xad\\x1b\\xf7\\xee\\x06\\xcc\\xf7\\x3a\\x7b\\x91\\x05\\xfb\\x02\\x3b\\x50\"\n\"\\x6e\\xfb\\x25\\x1b\\x52\\x79\\x94\\xa6\\x94\\x8e\\x9b\\x93\\xa9\\x1f\\x8c\\x8d\\x8c\\x8e\\x8d\\x1a\\x8d\\x92\\xbf\\xf7\\x52\\xc9\\x88\\xda\\x88\\x9a\\x82\\x8c\"\n\"\\x5c\\x19\\x89\\x7b\\x87\\x71\\x9f\\x89\\xcd\\xf7\\x7a\\x79\\x8f\\x63\\x31\\x7e\\x85\\xfb\\x31\\x8c\\x19\\xcb\\xf7\\x77\\x91\\xa3\\x94\\x92\\xa1\\x8c\\x19\\xeb\"\n\"\\x06\\xf5\\x88\\x9b\\x7c\\x89\\x28\\x08\\x9b\\x06\\xfc\\x6f\\xfb\\xc4\\x15\\x76\\x3f\\x7e\\x6c\\x73\\x6e\\x08\\x72\\x77\\x67\\x7d\\x60\\x1b\\x2b\\x5b\\xc7\\xf7\"\n\"\\x0a\\xf7\\x24\\xce\\xf7\\x34\\xe7\\xd8\\x1f\\xad\\xb3\\xb8\\x9c\\xba\\x1b\\xc8\\xb5\\x6a\\x5d\\x7d\\x8b\\x8b\\x77\\x41\\x1f\\x0e\\xfb\\xf2\\xf7\\x9d\\xf9\\x38\"\n\"\\x15\\x26\\x2a\\x30\\x2b\\x59\\xb1\\x6a\\xc6\\xed\\xef\\xe9\\xe7\\xbc\\x63\\xae\\x52\\x1f\\x84\\x75\\x15\\xa0\\x8a\\x95\\x7c\\x6c\\x1a\\x57\\x71\\x4a\\x67\\x65\"\n\"\\x1e\\x7d\\x7e\\x78\\x83\\x7a\\x1b\\x74\\x7c\\x9d\\xa7\\xe0\\xcb\\xec\\xc1\\x87\\x1f\\x0e\\x92\\xb7\\x1d\\xf7\\x00\\xaa\\xbb\\x9d\\xb0\\x71\\x0a\\x6e\\x1a\\x35\"\n\"\\x74\\x0a\\x0e\\xfc\\x12\\x2f\\x1d\\x0e\\xfc\\x12\\xf7\\x65\\xf8\\x2e\\x15\\xd1\\xf7\\xa0\\xed\\x1d\\xbd\\x9d\\x84\\x7a\\x82\\x79\\x43\\x5c\\xfb\\x43\\x1f\\x43\"\n\"\\x67\\x7f\\x5d\\xd3\\xaf\\x82\\x69\\x84\\x71\\x86\\x7b\\x19\\x76\\x41\\x05\\x78\\x45\\x84\\x6c\\x79\\x1a\\x66\\x9b\\x78\\xac\\xbf\\xad\\xa7\\xec\\xcc\\x1e\\x7e\"\n\"\\x94\\x05\\x38\\x49\\x83\\x83\\x76\\x1b\\x81\\x86\\x91\\x98\\x93\\x8d\\x97\\x90\\x9b\\x0a\\x70\\x1d\\x0e\\x92\\xf8\\xe5\\xf4\\x15\\x4f\\x3d\\x6e\\x7c\\x65\\x1b\"\n\"\\x5e\\x6d\\xad\\xbe\\xa0\\x90\\xac\\x90\\x9b\\x1f\\x8f\\x97\\x93\\x8f\\xa3\\x8d\\xb6\\x8f\\xd5\\xa8\\xb4\\xa7\\x08\\xb6\\xaa\\xa5\\xb3\\xb2\\x1a\\xb5\\x6d\\xa4\"\n\"\\x58\\x54\\x68\\x79\\x4d\\x46\\x1e\\xbd\\x79\\x62\\xa9\\x56\\x1b\\xfb\\x15\\xfb\\x25\\xfb\\x36\\xfb\\x24\\x36\\xc8\\x4e\\xdf\\xbf\\xae\\x9c\\xbd\\xbe\\x1f\\x5d\"\n\"\\xa3\\xae\\x75\\xb8\\x1b\\xca\\xc6\\xab\\xd5\\xd6\\x1f\\xfb\\xd4\\xf7\\xd8\\x15\\xaf\\xa2\\x71\\x63\\x69\\x7f\\x50\\x76\\x45\\x1f\\x7a\\x50\\x7c\\x69\\x76\\x6d\"\n\"\\x08\\x64\\x70\\x70\\x79\\x6a\\x1b\\x62\\x71\\xad\\xc4\\xed\\xb7\\xf7\\x08\\xcb\\xd0\\x1f\\xa2\\xa1\\xa3\\x97\\xa6\\x1b\\xf7\\x00\\xfb\\x5f\\x15\\xa5\\xdf\\x9e\"\n\"\\xaf\\xb2\\xb5\\x08\\xa4\\xa2\\xa4\\x99\\xa1\\x1b\\xa0\\x98\\x7c\\x74\\x69\\x77\\x66\\x6a\\x6d\\x1f\\x6c\\x70\\x7a\\x83\\x34\\x70\\x08\\x0e\\xf7\\xde\\xf8\\x14\"\n\"\\x15\\x93\\x8e\\x05\\xf7\\x04\\xb6\\xb6\\xb8\\xd4\\x1a\\xda\\x53\\xbf\\x38\\xfb\\x11\\x3f\\xfb\\x00\\xfb\\x94\\x51\\x1e\\x43\\xfb\\xd3\\x05\\xfb\\x1b\\x6d\\x70\"\n\"\\x5f\\x59\\x1b\\x81\\x84\\x8e\\x90\\x8e\\x8c\\x8e\\x8e\\x8f\\x1f\\x90\\x94\\x8e\\x95\\x92\\x1a\\xa0\\x7a\\x9a\\x74\\x73\\x7c\\x7b\\x71\\x66\\xaa\\x72\\xb9\\xdc\"\n\"\\xd0\\xdc\\xf7\\x1e\\xaf\\x1e\\xf7\\x03\\xf8\\x3e\\x05\\xf7\\x24\\xb1\\xbb\\xd5\\xc6\\x1b\\xb3\\xa1\\x6f\\x58\\x54\\x7b\\x56\\x71\\x6e\\x1f\\x70\\x73\\x66\\x7b\"\n\"\\x6a\\x1b\\x7e\\x87\\x88\\x81\\x81\\x91\\x87\\x9f\\x8a\\x1f\\xc2\\x89\\xa5\\x68\\x45\\x1a\\x47\\x78\\x3b\\x6f\\x58\\x1e\\x68\\x77\\x73\\x78\\x70\\x1b\\x81\\x83\"\n\"\\x91\\x92\\x8d\\x8d\\x90\\x8d\\x8f\\x1f\\x91\\x95\\x8d\\x93\\x94\\x1a\\xa3\\x7c\\x9b\\x74\\x70\\x7a\\x79\\x6e\\x64\\xab\\x70\\xbb\\xb9\\xbc\\xa0\\xaf\\xad\\x1e\"\n\"\\xbe\\xc0\\xac\\xd9\\xd0\\x1a\\xb9\\x73\\xba\\x68\\xa2\\x1e\\x78\\x97\\x7c\\x90\\x6c\\x8f\\x08\\x0e\\xfb\\xfc\\xf7\\x74\\xf7\\xb3\\x15\\x65\\x8c\\x80\\x8f\\x9a\"\n\"\\x1a\\x94\\x91\\xa2\\x98\\xb5\\x1e\\xe2\\xf7\\xa6\\x05\\x8d\\x92\\x8c\\x91\\x8e\\x1a\\x8e\\x89\\x8d\\x88\\x1e\\x88\\x06\\x88\\x8a\\x05\\x82\\x78\\x87\\x86\\x71\"\n\"\\x1f\\x73\\x86\\x7a\\x89\\x6d\\x86\\x08\\x78\\x07\\xad\\x8c\\x05\\x98\\x93\\x85\\x7f\\x87\\x8a\\x84\\x87\\x81\\x1f\\x31\\xfb\\xb1\\x85\\x7c\\x7f\\x86\\x5c\\x86\"\n\"\\x19\\x7b\\xf7\\x49\\x07\\x0e\\x9a\\xf8\\xa0\\xf7\\x00\\x15\\xcd\\xf7\\xaa\\xfc\\x8c\\x49\\xf8\\x4a\\x06\\x0e\\xf8\\x79\\xf8\\x40\\x15\\x33\\x06\\x35\\xfb\\xcd\"\n\"\\x05\\x5d\\x65\\x5f\\x73\\x5f\\x1b\\x63\\x72\\xa4\\xb4\\x94\\x8d\\x9b\\x8d\\x93\\x1f\\xda\\xf7\\xb0\\x05\\x33\\x06\\x26\\xfc\\x0a\\x84\\x6f\\x7f\\x6c\\x78\\x62\"\n\"\\x19\\x69\\x4e\\x82\\x71\\x68\\x1a\\x6f\\x95\\x7e\\xa2\\xbd\\xa5\\xca\\xf7\\x0e\\x8c\\x1e\\xb7\\x8c\\x98\\x8f\\xac\\x1e\\x95\\x6b\\x94\\x7d\\x9e\\x7e\\x08\\x81\"\n\"\\x9b\\xa1\\x84\\xa1\\x1b\\xc2\\xbc\\xa6\\xca\\xc2\\x1f\\x87\\x7c\\x8a\\x82\\x80\\x1a\\x66\\x9d\\x79\\xaf\\xb3\\xa4\\x98\\xb7\\xb8\\x1e\\x8e\\x94\\x05\\x77\\x71\"\n\"\\x7d\\x85\\x7a\\x1b\\x7b\\x82\\x94\\x9c\\x94\\x8c\\x8f\\x92\\xa2\\x1f\\x0e\\xf7\\xd4\\xf7\\xda\\xf9\\x0d\\x15\\xbd\\x06\\xae\\x8a\\x9f\\x77\\x97\\x5c\\x08\\x9f\"\n\"\\xe3\\xfb\\xed\\x33\\x9f\\x06\\x97\\xba\\x9f\\x9f\\xaf\\x8c\\x08\\xbc\\xfb\\xca\\x06\\x68\\x89\\x85\\x85\\x87\\x1e\\x83\\x86\\x8b\\x8b\\x69\\x87\\x08\\x77\\xf7\"\n\"\\x3f\\x9f\\x07\\x69\\x8f\\x8b\\xce\\x0a\\xf8\\x3f\\x3f\\x15\\x96\\x06\\xf7\\x2e\\xf7\\xcc\\x05\\xfb\\x80\\x07\\x69\\x8a\\x88\\x87\\x86\\x1e\\x85\\x84\\x87\\x8a\"\n\"\\x69\\x87\\x08\\x77\\xf7\\x3e\\x9f\\x07\\x6a\\x8f\\x8a\\xce\\x0a\\xf7\\x93\\x07\\xb2\\x99\\x98\\xb5\\x8e\\x1e\\x9f\\x24\\x07\\xfb\\x34\\xfb\\xc9\\xfb\\x2e\\xf7\"\n\"\\xc9\\x05\\xfb\\x0d\\x77\\x06\\xa9\\x8a\\xa5\\x78\\x98\\x6d\\x08\\xfb\\x8d\\x07\\x5b\\x81\\x7e\\x61\\x87\\x1e\\x77\\xf7\\x17\\x9f\\x07\\x60\\x8f\\x81\\x97\\xbc\"\n\"\\x1a\\xf7\\x73\\x07\\x0e\\xc9\\x5f\\x0a\\xe5\\xf9\\x0f\\xe8\\x1d\\xae\\x98\\x0a\\x92\\x8e\\x1a\\x8e\\x89\\x8d\\x88\\x85\\x73\\x87\\x85\\x6d\\x1e\\x70\\x86\\x79\"\n\"\\x88\\x72\\x87\\x08\\x78\\x07\\xaa\\x8c\\x05\\x91\\x06\\x96\\x92\\x84\\x80\\x86\\x8b\\x8b\\x86\\x7b\\x1f\\x31\\xfb\\xb1\\x85\\x7c\\x7f\\x86\\x5c\\x86\\x19\\x7b\"\n\"\\xf7\\x49\\x07\\xf8\\x84\\xfb\\x4c\\x15\\x7c\\x70\\x7f\\x85\\x65\\x8a\\x08\\xfb\\x00\\x06\\x89\\x90\\xf7\\x06\\xf7\\x02\\x05\\xe2\\xe0\\x97\\x9b\\xae\\x1a\\xc3\"\n\"\\x59\\xb9\\x4f\\x69\\x6a\\x7f\\x75\\x71\\x1e\\x78\\x7c\\x81\\x7c\\x7d\\x6a\\x98\\x83\\x18\\xb1\\xa7\\xa5\\x9a\\xa8\\x1d\\x9a\\xe1\\x16\\xf8\\x8c\\xcd\\xfc\\x8c\"\n\"\\x06\\xf7\\x6f\\xf7\\xae\\x15\\xfb\\x6f\\x49\\xf7\\x6f\\xfb\\x34\\xcd\\xf7\\x34\\xcb\\x0a\\x5a\\xf7\\x26\\xf9\\x11\\x15\\xc4\\x84\\x99\\x83\\x70\\xa2\\x1d\\x97\"\n\"\\x8d\\x95\\x95\\xae\\x1e\\x9c\\xc7\\x05\\x83\\xa4\\xa1\\x89\\xb5\\x1b\\xdf\\xcf\\x9c\\xaa\\xb6\\xdd\\x1d\\x53\\x06\\x9f\\xd8\\x94\\xa7\\x98\\x94\\xb3\\x90\\x19\"\n\"\\x9b\\xfb\\x82\\x07\\xf7\\x20\\xfb\\x56\\x15\\xa0\\x91\\x97\\x93\\xa7\\x1b\\xb2\\xb1\\x82\\x7c\\x9f\\x1f\\xa5\\x78\\x96\\x6e\\x5b\\xd7\\x1d\\x87\\x8b\\x90\\x6d\"\n\"\\x1f\\x0e\\xe5\\x8d\\x1d\\xf7\\x4d\\xe5\\x1d\\x9f\\x98\\x0a\\x91\\x8f\\x1a\\x8e\\x89\\x8d\\x88\\x85\\x73\\x87\\x85\\x6d\\x1e\\x74\\x87\\x77\\x87\\x70\\x87\\x08\"\n\"\\x78\\x07\\xa9\\x8c\\x05\\x92\\x06\\x96\\x92\\x84\\x80\\x87\\x8a\\x88\\x87\\x7d\\x1f\\x31\\xfb\\xb1\\x85\\x7c\\x7f\\x86\\x5c\\x86\\x19\\x7b\\xf7\\x49\\x07\\x0e\"\n\"\\x9a\\xf7\\x03\\x1d\\xf7\\x90\\xfb\\x0c\\x4c\\x0a\\xf8\\x35\\x04\\xa1\\x0a\\xfc\\x15\\xf7\\x0b\\xfb\\x2d\\x15\\xcc\\xf8\\x05\\x4a\\x06\\xcc\\xf8\\x57\\x15\\x4a\"\n\"\\xfb\\xfa\\xcc\\x06\\x0e\\xfb\\x98\\xf7\\x88\\xf9\\x38\\x15\\x3b\\x4c\\x4c\\x3b\\x3c\\xca\\x4b\\xd9\\xdd\\xca\\xc9\\xdc\\xdb\\x4c\\xca\\x3b\\x1f\\x69\\x04\\xc4\"\n\"\\xba\\x59\\x50\\x4f\\x5c\\x5a\\x51\\x53\\x5c\\xbd\\xc6\\xc7\\xba\\xbc\\xc4\\x1f\\x0e\\xf7\\x16\\xfb\\x52\\x15\\x5c\\x7a\\x93\\xa2\\x99\\x9b\\xd1\\xa0\\xdc\\xee\"\n\"\\x1d\\xf7\\x3c\\xf7\\x32\\xda\\x60\\xba\\x42\\x4c\\x56\\x68\\x42\\x5d\\x1f\\x89\\x8d\\x95\\xac\\x9b\\xc7\\xcc\\xf7\\x8e\\x19\\x86\\x90\\x59\\x82\\x6e\\x86\\x42\"\n\"\\x82\\x19\\x7a\\x07\\xc7\\x89\\x90\\x88\\x75\\x1a\\x82\\x89\\x80\\x84\\x74\\x1e\\x89\\x85\\x8a\\x85\\x89\\x84\\x84\\x70\\x80\\x62\\x59\\xfb\\x4a\\x60\\xfb\\x35\"\n\"\\x4c\\xfb\\x85\\x83\\x6b\\xcc\\x0a\\x07\\xf7\\x4f\\xf8\\xef\\x15\\xb5\\x9f\\x6f\\x52\\x47\\x6e\\x36\\x60\\x4d\\x1f\\x50\\x61\\x5b\\x6c\\x57\\x1b\\x6f\\x77\\x9a\"\n\"\\xa1\\xad\\xae\\xf7\\x16\\xa9\\xd6\\x1f\\xcf\\xa6\\xc1\\xb9\\xc1\\x1b\\x0e\\xe5\\x8d\\x1d\\xf7\\x4e\\xe5\\x1d\\x49\\xf8\\xfe\\x9e\\x0a\\xaa\\x8d\\x8b\\x88\\x98\"\n\"\\x1f\\xb5\\x80\\xa4\\x68\\x5b\\x1a\\x56\\x67\\x63\\x5b\\x7f\\x7f\\x90\\x99\\x78\\x1e\\x96\\x7a\\x7e\\x91\\x83\\x1b\\x7a\\x7e\\x7f\\x7b\\x72\\xa4\\x7d\\xbb\\xf7\"\n\"\\x00\\xd8\\xcc\\xe7\\xa5\\x84\\x9f\\x7d\\x9b\\x1f\\x82\\x95\\x8a\\x8b\\x6f\\x99\\x87\\x8d\\x18\\xd8\\xa6\\xa3\\xa0\\xb2\\x1a\\xb6\\x62\\xac\\x56\\x5d\\x63\\x74\"\n\"\\x65\\x77\\x1e\\x0e\\xfb\\xfc\\xf7\\xb2\\xf7\\xfa\\x15\\x7c\\x70\\x7f\\x85\\x65\\x8a\\x08\\xfb\\x00\\x06\\x89\\x90\\xf7\\x06\\xf7\\x02\\x05\\xe2\\xdf\\x97\\x9c\"\n\"\\xae\\x1a\\xc3\\x59\\xb8\\x4e\\x69\\x6a\\x7f\\x76\\x72\\x1e\\x78\\x7b\\x81\\x7d\\x7d\\x6a\\x98\\x83\\x18\\xb2\\xa9\\xa3\\x99\\xa8\\x1d\\xef\\xf7\\x71\\xf8\\x84\"\n\"\\x15\\x94\\x8a\\x93\\x8a\\x92\\x8a\\x92\\x8a\\x91\\x8a\\x8e\\x88\\x08\\x91\\x88\\x8d\\x85\\x6c\\x1a\\xfb\\x83\\x07\\x6d\\x89\\x84\\x85\\x88\\x1e\\x84\\x87\\x89\"\n\"\\x8a\\x6c\\x88\\x08\\x7c\\xf7\\x34\\x9a\\x07\\x6b\\x8e\\x8a\\x8c\\x83\\x8f\\x08\\x85\\x8e\\x8a\\x91\\xaa\\x1a\\xed\\xba\\x07\\xa3\\x67\\x95\\x7b\\x9c\\x6d\\xb0\"\n\"\\x4c\\x99\\x7c\\x9d\\x8a\\x08\\xca\\x94\\x06\\x77\\x9b\\x73\\xa5\\x6c\\xb5\\x52\\xd9\\x18\\xbf\\xa0\\xa6\\xae\\xba\\x1a\\xc3\\x5f\\xae\\x45\\x1e\\xfb\\x43\\x06\"\n\"\\xf7\\x04\\x78\\x15\\xb4\\x06\\xb9\\xa2\\x71\\x57\\x52\\x73\\x6b\\x5f\\x1f\\x61\\x06\\xba\\xf7\\xe9\\x15\\xfb\\x50\\xfb\\x2b\\xfb\\x2d\\xfb\\x52\\xfb\\x53\\xf7\"\n\"\\x2a\\xfb\\x2a\\xf7\\x53\\xf7\\x4e\\xf7\\x2b\\xf7\\x2a\\xf7\\x4f\\xf7\\x59\\xfb\\x26\\xf7\\x2a\\xfb\\x55\\x1f\\x8c\\x61\\x15\\xf7\\x31\\xf7\\x12\\xfb\\x1c\\xfb\"\n\"\\x3d\\xfb\\x33\\xfb\\x16\\xfb\\x1c\\xfb\\x2d\\xfb\\x2f\\xfb\\x16\\xf7\\x1c\\xf7\\x37\\xf7\\x38\\xf7\\x16\\xf7\\x1d\\xf7\\x2f\\x1f\\x0e\\x9a\\xf7\\x03\\x1d\\x0e\"\n\"\\xf7\\xd8\\xf8\\xcb\\x15\\xb3\\x57\\xa1\\x57\\x95\\x45\\x89\\x8a\\x18\\xab\\x7a\\x6e\\x9c\\x65\\x1b\\xfb\\x1e\\xfb\\x25\\xfb\\x34\\xfb\\x2c\\x34\\xc3\\x56\\xe6\"\n\"\\xf7\\x31\\xf7\\x1c\\xf7\\x3f\\xf7\\x5b\\xe8\\x72\\xce\\x4e\\xd4\\x1f\\xf0\\xb8\\x6b\\xa7\\x28\\x60\\x63\\xac\\x66\\x9d\\x5e\\x95\\x19\\x68\\x7a\\xb5\\x7a\\xa5\"\n\"\\x7a\\xae\\x6a\\x19\\xfb\\x0f\\x55\\xac\\x6e\\x05\\xf5\\x2b\\x15\\xb6\\xa7\\x66\\x52\\x42\\x6a\\x27\\x5e\\x4a\\x1f\\x56\\x67\\xd4\\x0a\\xe3\\xbc\\xd2\\x1f\\xc4\"\n\"\\xb2\\xb5\\xa8\\xb6\\x1b\\x0e\\x9a\\xf7\\xb5\\xf7\\x91\\x15\\xfb\\x58\\xfb\\x59\\xbb\\x5b\\xf7\\x58\\xf7\\x59\\xf7\\x59\\xfb\\x59\\xbb\\xbb\\xfb\\x59\\xf7\\x59\"\n\"\\xf7\\x59\\xf7\\x58\\x5b\\xbb\\xfb\\x59\\xfb\\x59\\xfb\\x58\\xf7\\x59\\x5b\\x5b\\x05\\x0e\\xfb\\xfc\\xf7\\x29\\xf8\\xf4\\x9e\\x0a\\xa8\\x90\\x8b\\x88\\x97\\x1f\"\n\"\\xb5\\x80\\xa4\\x68\\x5b\\x1a\\x56\\x67\\x63\\x5b\\x7f\\x7f\\x90\\x99\\x78\\x1e\\x96\\x7a\\x7e\\x91\\x83\\x1b\\x7a\\x7e\\x7f\\x7b\\x72\\xa4\\x7d\\xbb\\xf7\\x00\"\n\"\\xd8\\xcc\\xe7\\xa5\\x84\\x9f\\x7d\\x9b\\x1f\\x82\\x94\\x8a\\x8c\\x6f\\x99\\x87\\x8d\\x18\\xd8\\xa6\\xa3\\xa0\\xb2\\x1a\\xb6\\x62\\xac\\x55\\x5e\\x63\\x74\\x65\"\n\"\\x77\\x1e\\x0e\\xef\\xf8\\xa5\\xf7\\x84\\x15\\x50\\x6f\\x68\\x72\\x52\\x1b\\x31\\x58\\xca\\xf7\\x04\\xf7\\x03\\xbc\\xc8\\xe4\\xc9\\xae\\x6e\\x50\\x95\\x1f\\x9b\"\n\"\\xd0\\x06\\x94\\x84\\x92\\x7d\\x90\\x1e\\x87\\x8c\\x86\\x8d\\x05\\x95\\x6b\\x71\\x90\\x6b\\x1b\\xfb\\x15\\x32\\x39\\xfb\\x0a\\xfb\\x06\\xdc\\x42\\xf7\\x12\\xb1\"\n\"\\xa5\\x8f\\x9a\\xbc\\x1f\\x99\\x8f\\x8e\\x8d\\x8d\\x96\\x9a\\xcf\\x18\\xfb\\x39\\xf8\\x3e\\x15\\xfb\\x50\\xfb\\x2b\\xfb\\x2d\\xfb\\x52\\xfb\\x53\\xf7\\x2a\\xfb\"\n\"\\x2a\\xf7\\x53\\xf7\\x4e\\xf7\\x2b\\xf7\\x2a\\xf7\\x4f\\xf7\\x59\\xfb\\x26\\xf7\\x2a\\xfb\\x55\\x1f\\x8c\\x61\\x15\\xf7\\x31\\xf7\\x12\\xfb\\x1c\\xfb\\x3d\\xfb\"\n\"\\x33\\xfb\\x16\\xfb\\x1c\\xfb\\x2d\\xfb\\x2f\\xfb\\x16\\xf7\\x1c\\xf7\\x37\\xf7\\x38\\xf7\\x16\\xf7\\x1d\\xf7\\x2f\\x1f\\x0e\\x5a\\x26\\x1d\\x59\\xf8\\x50\\xad\"\n\"\\x1d\\x5a\\x26\\x1d\\xd3\\xf8\\xf7\\x20\\x0a\\x5a\\x26\\x1d\\x42\\xf8\\xc0\\x23\\x1d\\x5a\\x26\\x1d\\xc7\\xf8\\x4e\\x28\\x0a\\x5a\\x26\\x1d\\x9e\\xf9\\x16\\x15\"\n\"\\x55\\x5e\\x5e\\x55\\x97\\x1d\\x5a\\x26\\x1d\\xf7\\x3d\\xf8\\xd2\\x15\\x6a\\x80\\x7e\\x80\\x70\\x1b\\x7c\\x7a\\x3f\\x0a\\x72\\x92\\x74\\x1b\\x57\\x6f\\x6e\\x3e\"\n\"\\x77\\x1f\\xa8\\x06\\xab\\x95\\x9b\\x9a\\xa4\\x1b\\x9c\\xa3\\x84\\x75\\xc1\\x1f\\x81\\xa5\\x9e\\x86\\x97\\xb2\\x0a\\x92\\xf7\\xa9\\x7d\\x15\\x88\\x9d\\x9b\\x8a\"\n\"\\x9b\\x1b\\xf2\\xdb\\xb6\\xf5\\xe5\\x94\\x1d\\x9d\\x88\\xb0\\xf7\\x5b\\x05\\x76\\x63\\x1d\\x5f\\x63\\x91\\x6a\\x1b\\xfb\\x6a\\xfb\\x54\\xfb\\x5c\\xfb\\x73\\xfb\"\n\"\\x0e\\xd0\\x2c\\xf7\\x01\\x6b\\x1f\\x53\\x31\\x2a\\x0a\\x99\\x93\\x57\\x1d\\xb5\\xa1\\x86\\xa8\\x44\\x1d\\x82\\x85\\x2c\\x0a\\x5a\\x27\\x1d\\xfb\\x9b\\xf7\\x62\"\n\"\\x56\\x1d\\x5a\\x27\\x1d\\xfb\\x18\\xf8\\x09\\x20\\x0a\\x5a\\x27\\x1d\\xfb\\xb2\\xf7\\xd2\\x23\\x1d\\x5a\\x27\\x1d\\xfb\\x42\\xf7\\x60\\x3a\\x0a\\xfb\\xdb\\x2c\"\n\"\\x1d\\xf7\\x50\\xf9\\x46\\xad\\x1d\\xfb\\xdb\\x2c\\x1d\\xf7\\xed\\xf9\\xed\\x20\\x0a\\xfb\\xdb\\x2c\\x1d\\xf7\\x57\\xf9\\xb6\\x24\\x1d\\xf7\\x5c\\x16\\x6f\\x75\"\n\"\\x75\\x71\\x6f\\xa0\\x75\\xa7\\xa6\\xa1\\xa1\\xa6\\xa4\\x74\\xa3\\x72\\x1f\\x0e\\xfb\\xdb\\x2c\\x1d\\xf7\\xde\\xf9\\x44\\x3a\\x0a\\x92\\x32\\x0a\\xfb\\x20\\xf7\"\n\"\\x5b\\x15\\x6a\\x80\\x7e\\x80\\x70\\x1b\\x7c\\x7a\\x3f\\x0a\\x72\\x92\\x74\\x1b\\x57\\x6f\\x6e\\x3e\\x77\\x1f\\xa8\\x06\\xab\\x95\\x9b\\x9a\\xa4\\x1b\\x9c\\xa3\"\n\"\\x84\\x75\\xc1\\x1f\\x81\\xa5\\x9e\\x86\\x97\\xb2\\x0a\\xc9\\x26\\x0a\\x3f\\x95\\x0a\\x0e\\xc9\\x26\\x0a\\xc0\\xf7\\x84\\x15\\x59\\x06\\xfb\\x30\\xb1\\x0a\\xc9\"\n\"\\x26\\x0a\\x30\\xf7\\x4d\\x15\\x4d\\x0a\\xf7\\x5c\\x16\\x4d\\x0a\\x0e\\xc9\\x26\\x0a\\xb2\\xd2\\x3a\\x0a\\xc9\\x26\\x0a\\xf7\\x1f\\xf7\\x5f\\x15\\x6a\\x80\\x7e\"\n\"\\x80\\x70\\x1b\\x7c\\x7a\\x90\\x99\\x6d\\x1f\\x9c\\x65\\x72\\x92\\x74\\xf7\\x00\\x1d\\x95\\x9b\\x9a\\xa4\\x1b\\x9c\\xa3\\x84\\x75\\xc1\\x1f\\x81\\xa5\\x9e\\x86\"\n\"\\x98\\x1b\\xba\\xac\\xb0\\xce\\x99\\x1f\\x0e\\x37\\x0a\\xd1\\xf8\\x26\\x21\\x0a\\xc9\\x27\\x0a\\xfb\\xf9\\xd0\\xc4\\x1d\\x82\\x82\\x88\\x84\\x85\\x1e\\x0e\\xc9\"\n\"\\x27\\x0a\\xfb\\x81\\xf7\\x80\\x20\\x0a\\xc9\\x27\\x0a\\xfc\\x07\\xf7\\x49\\x23\\x1d\\xc9\\x27\\x0a\\xfb\\x92\\xce\\x3a\\x0a\\x23\\x2f\\x0a\\xf7\\x72\\xc0\\x15\"\n\"\\xae\\x06\\xf7\\x3f\\xf5\\x05\\x97\\x93\\x90\\x93\\x97\\x1a\\xa0\\x7b\\x9a\\x76\\x81\\x83\\x88\\x84\\x85\\x1e\\x0e\\x23\\x2f\\x0a\\xf7\\x59\\xf7\\x39\\x23\\x1d\"\n\"\\x23\\x39\\x0a\\x51\\xf7\\x7e\\x21\\x0a\\x25\\x0a\\x5e\\xd6\\x3b\\x0a\\x25\\x0a\\xd3\\xf7\\x86\\x20\\x0a\\x25\\x0a\\x47\\xf7\\x4f\\x23\\x1d\\x25\\x0a\\xc2\\xd4\"\n\"\\x28\\x0a\\x25\\x0a\\xa8\\xf7\\xb4\\x15\\x55\\x5e\\x5e\\x55\\x53\\xb6\\x5f\\xc3\\xc2\\xb8\\xb8\\xc1\\xc2\\x5e\\xb8\\x54\\x1f\\x69\\x04\\xaf\\xa9\\x6e\\x66\\x66\"\n\"\\x6e\\x6f\\x65\\x67\\x6f\\x58\\x0a\\x0e\\x25\\x0a\\xf7\\x42\\xf7\\x61\\x52\\x1d\\xfb\\x6c\\xf7\\x3c\\x80\\x15\\x93\\x06\\xd7\\xc0\\xa9\\xd8\\xc8\\x1f\\x7b\\x95\"\n\"\\x05\\x50\\x54\\x64\\x75\\x5a\\x1b\\x52\\x69\\xb5\\xd3\\xe0\\xae\\xe5\\xc3\\xc5\\x1f\\xa9\\xa8\\xb3\\x9d\\xb3\\x1b\\xa2\\x99\\x83\\x7f\\x86\\x89\\x86\\x87\\x82\"\n\"\\x1f\\x84\\x7e\\x89\\x85\\x81\\x1a\\x73\\x9a\\x7d\\xa3\\xa7\\x9f\\x9e\\xa5\\xbb\\x51\\x0a\\x3c\\xaf\\x59\\xce\\x7b\\x1e\\x53\\x31\\x2a\\x0a\\x99\\x93\\x57\\x1d\"\n\"\\xb4\\xa2\\x86\\xa8\\x44\\x1d\\x82\\x85\\x2c\\x0a\\xfb\\x6c\\x28\\x1d\\xf0\\xf7\\xb2\\x2b\\x0a\\xfb\\x6c\\x28\\x1d\\xf7\\x6e\\xf8\\x59\\x20\\x0a\\xfb\\x6c\\x28\"\n\"\\x1d\\xcf\\xf8\\x22\\x23\\x1d\\xfb\\x6c\\x28\\x1d\\xf7\\x5c\\xf7\\xb0\\x15\\xab\\x06\\xfb\\x08\\xf7\\x29\\x05\\x9b\\x7e\\x80\\x92\\x41\\x1d\\xfc\\x12\\x2f\\x1d\"\n\"\\x25\\xf8\\x1b\\x15\\xae\\x06\\xf7\\x3f\\xf5\\x05\\x97\\x92\\x90\\x94\\x97\\x1a\\x9f\\x7b\\x9b\\x77\\x81\\x82\\x87\\x85\\x85\\x1e\\x0e\\xfc\\x12\\x2f\\x1d\\x90\"\n\"\\xf8\\xc2\\x20\\x0a\\xfc\\x12\\xf4\\xf8\\xf2\\x81\\x1d\\x38\\xfc\\x80\\x7f\\x1d\\x0e\\xfc\\x12\\x2f\\x1d\\x9d\\xf8\\x19\\x28\\x0a\\x32\\x1d\\x71\\xf8\\x9c\\x52\"\n\"\\x1d\\x92\\x1d\\x7f\\x76\\x15\\xb6\\xa7\\x66\\x52\\x42\\x6b\\x27\\x5e\\x4a\\x1f\\x56\\x66\\xd4\\x0a\\xe2\\xbc\\xd3\\x1f\\xc4\\xb2\\xb5\\xa8\\xb6\\x1b\\x5a\\xd5\"\n\"\\x2b\\x0a\\x2b\\x1d\\xc4\\xf7\\x85\\x20\\x0a\\x2b\\x1d\\x43\\xf7\\x4e\\x23\\x1d\\x2b\\x1d\\xbe\\xd3\\x28\\x0a\\x2b\\x1d\\xf7\\x2f\\xf7\\x60\\x52\\x1d\\xfb\\xa3\"\n\"\\x31\\x0a\\xf8\\x26\\xf8\\x97\\x21\\x0a\\x73\\x1d\\xfb\\x71\\xf8\\x16\\x3b\\x0a\\x2a\\x1d\\xfb\\x0b\\xf8\\xbd\\x20\\x0a\\x73\\x1d\\xfb\\x88\\xf8\\x86\\x23\\x1d\"\n\"\\x2a\\x1d\\xfb\\x03\\xf8\\x14\\x28\\x0a\\xfb\\x6c\\x31\\x1d\\xf7\\x71\\xd8\\xac\\x1d\\xfb\\x6c\\x31\\x1d\\xf7\\x46\\xf7\\x51\\x23\\x1d\\xfb\\xa3\\x33\\x0a\\xf8\"\n\"\\x05\\xf7\\xf0\\x21\\x0a\\xfb\\xed\\xf7\\xa5\\xf7\\xf0\\x15\\x86\\x85\\x86\\x85\\x87\\x85\\x08\\x77\\x7b\\x80\\x81\\x84\\x1b\\x88\\x88\\x8e\\x8e\\x8f\\x8b\\x8b\"\n\"\\x93\\xab\\x1f\\xad\\xf7\\x0e\\x05\\x8e\\x98\\x8d\\x97\\x95\\x1a\\xa2\\x7a\\x9b\\x72\\x67\\x66\\x6a\\x3c\\x56\\x1e\\xad\\xf7\\x01\\x86\\x8e\\x72\\x86\\x6c\\x85\"\n\"\\x5f\\x83\\x19\\x7c\\x07\\xab\\x8a\\x91\\x89\\x81\\x1a\\x8a\\x82\\x51\\xfb\\x67\\x05\\xbe\\x06\\xa6\\xe5\\x8e\\x93\\x9a\\xa6\\x08\\xc9\\xaf\\xb3\\xb6\\xa2\\x1b\"\n\"\\x92\\x8f\\x86\\x82\\x85\\x88\\x79\\x85\\x77\\x1f\\x72\\x2a\\x05\\x82\\x6a\\x8a\\x85\\x86\\x1a\\x72\\x95\\x80\\xa0\\xa8\\x98\\x95\\xc7\\xb8\\x1e\\x0e\\x2d\\xf7\"\n\"\\x88\\xf8\\x40\\x15\\xf7\\x32\\xa8\\xb0\\xd1\\xc3\\x1b\\x99\\x93\\x36\\x0a\\x87\\x43\\x1d\\x9e\\x9d\\xa1\\xb1\\x66\\xa6\\x59\\x5b\\x64\\x75\\x5d\\x67\\x1e\\x6d\"\n\"\\x63\\x77\\x5d\\x6d\\x2b\\x08\\x2f\\x06\\x84\\x6b\\x05\\xe5\\x06\\x33\\xfc\\x38\\x05\\x20\\x75\\x6a\\x54\\x61\\x1b\\x7f\\x83\\x92\\x94\\x8f\\x2d\\x1d\\x91\\x8c\"\n\"\\x8f\\x91\\x52\\x0a\\x79\\x74\\x68\\xad\\x71\\xb8\\xe4\\xd0\\xed\\xf7\\x4d\\x40\\x0a\\xf7\\x2f\\x06\\x33\\xfc\\x38\\x05\\xfb\\x00\\x74\\x6b\\x55\\x90\\x1d\\xf7\"\n\"\\x01\\x06\\x91\\xab\\x05\\xfb\\x00\\x06\\x7a\\x0a\\x76\\x5d\\x6e\\x2b\\x08\\x0e\\xf7\\x0a\\xf7\\x76\\xf8\\x40\\x15\\xf7\\x32\\xa8\\xb0\\xd1\\xc3\\x1b\\x99\\x93\"\n\"\\x36\\x0a\\x87\\x43\\x1d\\x9e\\x9d\\xa1\\xb1\\x66\\xa6\\x59\\x5b\\x64\\x75\\x5d\\x67\\x1e\\x6d\\x63\\x77\\x5d\\x6d\\x2b\\x08\\x2f\\x06\\x84\\x6b\\x05\\xe5\\x06\"\n\"\\x33\\xfc\\x38\\x05\\x20\\x75\\x6a\\x54\\x61\\x1b\\x7f\\x83\\x92\\x94\\x8f\\x2d\\x1d\\x91\\x8c\\x8f\\x91\\x52\\x0a\\x79\\x74\\x68\\xad\\x71\\xb8\\xe4\\xd0\\xed\"\n\"\\xf7\\x4d\\x40\\x0a\\xf7\\x45\\x06\\x86\\x7e\\x5f\\xfb\\x64\\x6d\\xfb\\x2a\\x08\\xfb\\x2e\\x6d\\x6f\\x55\\x5a\\x1b\\x7c\\x86\\x8e\\x95\\x8e\\x8c\\x8e\\x8e\\x90\"\n\"\\x1f\\x8f\\x91\\x8c\\x90\\x90\\x1a\\xa0\\x7a\\x9c\\x75\\x97\\x0a\\x91\\x88\\x84\\x87\\x8b\\x8b\\x7f\\x5f\\x1f\\x4d\\xfb\\x70\\x7e\\x56\\x88\\x0a\\x91\\xdf\\xf7\"\n\"\\xcd\\x97\\xb2\\x1f\\x8e\\x97\\x8d\\x94\\x8f\\x1a\\x8b\\x8b\\x8c\\x8a\\x8d\\x1e\\x86\\x8e\\x05\\x87\\x87\\x8b\\x89\\x81\\x1f\\x87\\x72\\x70\\x89\\x6e\\x1b\\xfb\"\n\"\\x2a\\x06\\xa9\\xf4\\x9a\\xb3\\xa0\\xaa\\x08\\xb1\\xa4\\xa8\\x9c\\xb4\\x1b\\xa0\\x98\\x85\\x81\\x88\\x8a\\x89\\x88\\x87\\x1f\\x84\\x84\\x89\\x86\\x80\\x1a\\x72\"\n\"\\x9b\\x7a\\xa4\\xa4\\x9c\\x9c\\xa4\\xb5\\x61\\xa7\\x4e\\x53\\x54\\x73\\x64\\x68\\x1e\\x61\\x5c\\x77\\x62\\x6c\\x25\\x08\\x0e\\xf7\\x12\\xf7\\x7a\\xf8\\x40\\x15\"\n\"\\x7a\\x0a\\x77\\x5d\\x6d\\x2b\\x08\\x2f\\x06\\x84\\x6b\\x05\\xe5\\x06\\x33\\xfc\\x38\\x05\\x20\\x75\\x6a\\x54\\x90\\x1d\\xf7\\x43\\xec\\x1d\\x6e\\xfb\\x06\\x78\"\n\"\\x6c\\x08\\x6c\\x78\\x7c\\x80\\x72\\x1b\\x7d\\x85\\x8f\\x94\\x8e\\x2d\\x1d\\x92\\x8c\\x90\\x90\\x1a\\x9f\\x79\\x9c\\x75\\x77\\x7b\\x7a\\x74\\x66\\xab\\x72\\xb9\"\n\"\\xe6\\xd1\\xf0\\xf7\\x51\\xb5\\x1e\\xd1\\xf7\\xca\\x05\\xf7\\x3a\\x06\\x82\\x64\\x88\\x7f\\x76\\x38\\x08\\x69\\xfb\\x17\\x7e\\x4d\\x6f\\x1a\\x6d\\x9e\\x77\\xa7\"\n\"\\xb6\\xa9\\xa3\\xdc\\xc7\\x1e\\x7b\\x94\\x05\\x55\\x5d\\x79\\x7c\\x7d\\x1b\\x85\\x86\\x90\\x91\\x9b\\xe3\\xf8\\x0b\\xb2\\xf7\\x27\\x1f\\x9a\\xc7\\x90\\x9f\\x93\"\n\"\\x8b\\x0a\\x75\\x76\\x8d\\x7a\\x1b\\x52\\x53\\x72\\x61\\x64\\x1f\\x60\\x5c\\x77\\x62\\x6c\\x28\\x08\\xda\\x16\\x90\\x9f\\x05\\xf7\\x26\\xaf\\xbc\\xcd\\xd4\\xc9\"\n\"\\x0a\\x86\\x83\\x88\\x84\\x85\\x1a\\x87\\x8c\\x86\\x8f\\x83\\x1e\\x8d\\x85\\x8d\\x85\\x87\\x1a\\x88\\x07\\x67\\xfb\\x24\\x05\\x0e\\xe5\\xf7\\x85\\xf7\\xb7\\x15\"\n\"\\x64\\x8c\\x80\\x8f\\x9d\\x1a\\x93\\x91\\xa6\\x95\\xb0\\x1e\\xd6\\xf7\\xaa\\x05\\x8c\\x91\\x8c\\x90\\x8f\\x1a\\x8f\\x89\\x8d\\x88\\x86\\x72\\x87\\x85\\x6c\\x1e\"\n\"\\x6b\\x85\\x7c\\x88\\x74\\x88\\x8c\\x78\\x18\\xab\\x8c\\x05\\x91\\x06\\x96\\x92\\x83\\x7f\\x86\\x8a\\x87\\x88\\x80\\x1f\\x3d\\xfb\\xb4\\x86\\x7b\\x7e\\x86\\x5c\"\n\"\\x86\\x19\\x8c\\x7b\\x05\\xf7\\x4b\\x06\\xf8\\x28\\x5d\\x15\\xd0\\xa2\\xa6\\xa7\\xba\\x1a\\xc0\\x5e\\xaf\\x48\\x3f\\x61\\x1d\\x2f\\x68\\x6d\\x6c\\x4f\\x1a\\x4b\"\n\"\\xbd\\x63\\xdd\\xe1\\xc8\\x5d\\x1d\\x5e\\xb4\\x82\\x97\\xa4\\x1a\\xad\\xa4\\xa1\\xb0\\xaf\\xa3\\x74\\x67\\x6b\\x74\\x72\\x5e\\x79\\x1e\\x62\\x5a\\x15\\xc5\\x58\"\n\"\\x95\\x7c\\x69\\x1a\\x5d\\x6b\\x6d\\x5c\\x5b\\x6d\\xa7\\xb7\\xba\\xa6\\xab\\xc9\\xa4\\x1e\\xb8\\xd8\\x1d\\xe5\\xf7\\x15\\xf8\\xfd\\x15\\xa7\\xaa\\x9b\\x93\\xa5\"\n\"\\x1b\\xa8\\xa1\\x74\\x6d\\x5d\\x5b\\x6c\\x27\\x79\\x1f\\x82\\x98\\x07\\xcc\\xb1\\x66\\x4c\\x56\\x67\\x63\\x5a\\x80\\x7e\\x90\\x99\\x78\\x1f\\x97\\x7a\\x7e\\x91\"\n\"\\x82\\x1b\\x7a\\x7e\\x7f\\x7a\\x72\\xa5\\x7d\\xbb\\xf7\\x01\\xd8\\xcc\\xe8\\xa6\\x84\\x9f\\x7c\\x9b\\x1f\\x82\\x95\\x8a\\x8c\\x6f\\x99\\x87\\x8d\\x18\\xd8\\xa7\"\n\"\\xa3\\xa0\\xb2\\x1a\\xb7\\x61\\xad\\x55\\x5d\\x63\\x74\\x64\\x76\\x1e\\xf8\\xa4\\xfc\\x1f\\x15\\xcf\\xa2\\xa7\\xa7\\xba\\x1a\\xc0\\x5e\\xaf\\x48\\x3f\\x61\\x1d\"\n\"\\x2f\\x68\\x6d\\x6c\\x4f\\x1a\\x4a\\xbd\\x64\\xdd\\xe1\\xc8\\x5d\\x1d\\x5f\\xb2\\x81\\x99\\xa4\\x1a\\xad\\xa4\\xa1\\xb0\\xaf\\xa3\\x74\\x67\\x6b\\x74\\x72\\x5e\"\n\"\\x79\\x1e\\x61\\x5a\\x15\\xc2\\x5d\\x99\\x76\\xaa\\x0a\\xc0\\xf8\\x77\\x15\\x57\\x06\\xfc\\x42\\xfd\\x4b\\x05\\xbf\\x06\\x0e\\xe5\\xf7\\x66\\xf9\\x0a\\x15\\xf7\"\n\"\\x1c\\x06\\x9b\\xc2\\x05\\xfb\\x32\\x06\\x4c\\xfb\\x17\\x05\\x7f\\x07\\xb2\\x82\\x98\\x88\\x9a\\x85\\x08\\xb6\\x79\\x9f\\x6e\\x5d\\x1a\\x4c\\x5d\\x53\\x57\\x7f\"\n\"\\x81\\x8f\\x98\\x7b\\x1e\\x97\\x7c\\x81\\x8f\\x81\\x1b\\x7b\\x80\\x80\\x7b\\x74\\xa3\\x7d\\xb5\\xee\\xdb\\xd8\\xeb\\xb0\\x7d\\xac\\x71\\xa3\\x1f\\x75\\xa0\\x77\"\n\"\\x95\\x5d\\x96\\x08\\xf8\\x5d\\xfb\\xfd\\x15\\xcf\\xa2\\xa7\\xa7\\xb9\\x1a\\xc1\\x5e\\xaf\\x48\\x3e\\x61\\x1d\\x30\\x68\\x6d\\x6c\\x4f\\x1a\\x4b\\xbd\\x63\\xdd\"\n\"\\xe0\\xc9\\x5d\\x1d\\x5f\\xb1\\x80\\x9b\\xa3\\x1a\\xad\\xa4\\xa1\\xb1\\xaf\\xa3\\x74\\x67\\x6b\\x75\\x72\\x5d\\x79\\x1e\\x61\\x5a\\x15\\xc2\\x5c\\x99\\x77\\xaa\"\n\"\\x0a\\xbd\\xd8\\x1d\\xe5\\xf7\\xd1\\xf8\\xf9\\x15\\xfb\\x55\\xfb\\xe6\\xac\\x7b\\xf7\\x79\\xf8\\x27\\x05\\xfb\\x62\\x06\\x53\\x2c\\x05\\xa1\\x06\\xa6\\xb5\\x92\"\n\"\\x8e\\xb8\\x8c\\x08\\xf8\\x2b\\xbc\\x15\\xfc\\x81\\xfd\\x2a\\x05\\xb9\\x06\\xf8\\x81\\xf9\\x2a\\x05\\x67\\xfc\\x51\\x15\\xcb\\xa4\\xa9\\xac\\xb7\\x1a\\xba\\x61\"\n\"\\xae\\x53\\x4d\\x55\\x5e\\x56\\x6f\\x98\\x71\\xac\\x67\\x1e\\x40\\x6d\\x66\\x62\\x54\\x1a\\x56\\xb9\\x63\\xc9\\xcf\\xc9\\xc4\\xc9\\xae\\x7b\\xab\\x67\\xb0\\x1e\"\n\"\\x7c\\x9a\\x15\\x62\\xb5\\x80\\x9e\\xa6\\x1a\\xae\\xa1\\xa0\\xae\\xaf\\xa2\\x76\\x69\\x64\\x78\\x72\\x5e\\x72\\x1e\\x61\\x67\\x15\\xb9\\x5e\\x99\\x73\\x6c\\x1a\"\n\"\\x60\\x67\\x68\\x5f\\x64\\x73\\xa4\\xb4\\xbb\\xa8\\xb2\\xc1\\xa4\\x1e\\x0e\\xf7\\x79\\x81\\x0a\\x7c\\x89\\x7d\\x87\\x74\\x78\\x0a\\xc6\\x86\\x90\\x88\\x77\\x80\"\n\"\\x1d\\xf7\\x37\\xf8\\x35\\x94\\x0a\\x5a\\x26\\x1d\\xf7\\x33\\xf8\\xec\\x15\\x4c\\x72\\x5a\\x67\\x4e\\x1b\\x4b\\x64\\xaf\\xca\\x86\\x75\\x0a\\x5a\\xf8\\x07\\xf7\"\n\"\\x64\\x7b\\x1d\\x5a\\xf7\\x48\\xbd\\x1d\\x7a\\x68\\xfb\\x0e\\x7f\\x1e\\xf7\\x4d\\xfb\\xc7\\x7b\\x1d\\x5a\\x26\\x1d\\xf7\\x49\\xf8\\xa9\\x29\\x1d\\x5a\\xf8\\x0a\"\n\"\\xf7\\x76\\x15\\xc7\\x1d\\xf7\\x59\\x07\\x75\\x6d\\x85\\x7b\\x70\\x1a\\x56\\xb5\\x60\\xc0\\xbc\\xb4\\xa5\\xbe\\xae\\x1e\\x7a\\x9d\\x05\\x74\\x70\\x73\\x82\\x6b\"\n\"\\x1b\\x66\\x75\\xa0\\xaf\\xa1\\x90\\x9b\\x96\\x96\\x1f\\x9b\\x07\\x52\\x90\\x85\\x93\\x7e\\xd4\\x2d\\xf8\\xca\\x18\\x71\\x06\\xfb\\xb6\\xfc\\x88\\x3c\\xfb\\x19\"\n\"\\x81\\x80\\x63\\x83\\x19\\x7b\\xf7\\x4f\\x9b\\x07\\x58\\x90\\x83\\x90\\xa4\\x1a\\x9e\\x8e\\x94\\x9c\\xad\\x1e\\xc4\\xf7\\x05\\x05\\xa0\\xaf\\x15\\xf7\\x2a\\xf7\"\n\"\\x98\\xb7\\xfb\\x98\\x05\\x0e\\x5a\\x26\\x1d\\x9e\\xf8\\xc8\\x15\\x55\\x5e\\x6c\\x65\\x63\\xb6\\x6c\\xc4\\xc1\\xb9\\xab\\xb0\\xb2\\x5e\\xab\\x53\\x1f\\x73\\x04\"\n\"\\xb1\\xa8\\x76\\x71\\x72\\x6e\\x77\\x65\\x67\\x6e\\x9f\\xa5\\xa4\\xa9\\xa0\\xae\\x1f\\x3a\\xa9\\x15\\xae\\x06\\xf7\\x3f\\xd5\\x05\\x97\\x91\\x90\\x90\\x94\\x1a\"\n\"\\x99\\x7b\\x96\\x76\\x81\\x83\\x89\\x86\\x85\\x1e\\x0e\\x5a\\xf7\\x3e\\x23\\x0a\\x86\\x7a\\x05\\xc4\\x8a\\x9f\\x81\\x6c\\x4d\\x1d\\xfb\\x0f\\xfc\\x5e\\x79\\x45\"\n\"\\x78\\x7b\\x49\\x8a\\x19\\x7d\\x0a\\x75\\xb7\\x6c\\xa3\\x1e\\xa4\\x6b\\x5c\\xca\\x1d\\x2c\\x46\\x4b\\x22\\x7f\\x79\\x8c\\x8c\\x78\\x1f\\x82\\x68\\x15\\xa3\\x06\"\n\"\\xf0\\xba\\x66\\x3b\\x22\\x3f\\x42\\xfb\\x03\\x76\\x7e\\x8d\\x91\\x6f\\x1f\\x0e\\x92\\x38\\x0a\\xfb\\x6d\\xf7\\x82\\x93\\x0a\\x92\\x38\\x0a\\xa8\\xf8\\x29\\x21\"\n\"\\x0a\\x92\\xf9\\x1f\\x7d\\x1d\\x33\\xf8\\x29\\x20\\x0a\\x92\\x38\\x0a\\xfb\\x23\\xf7\\xf2\\x15\\x4d\\x0a\\x0e\\x5a\\xd2\\x1d\\x70\\x76\\x7c\\x67\\x1e\\x7a\\x06\"\n\"\\x85\\x79\\x05\\xf7\\x93\\x29\\x0a\\x7e\\x06\\x5c\\x8d\\x7b\\x9e\\x74\\xdf\\x4c\\xf7\\x7c\\x18\\xf7\\x33\\xf7\\x53\\xca\\xd6\\xab\\xa0\\xc9\\x8d\\x19\\x90\\x9d\"\n\"\\x05\\xfb\\x5d\\x06\\x85\\x79\\x05\\x96\\x06\\xa3\\x94\\x85\\x7b\\x80\\x87\\x83\\x76\\x72\\x1f\\xfb\\x26\\xfb\\x46\\x60\\xf7\\x39\\x05\\x88\\x95\\x88\\xa3\\x93\"\n\"\\x1a\\xa3\\x9f\\x98\\xae\\x1e\\x9a\\x06\\x91\\x2e\\x1d\\x85\\x79\\x05\\x9d\\x06\\xbd\\x8a\\x9d\\x7a\\xa1\\x48\\xd0\\xfb\\x8d\\x18\\xfb\\x38\\xfb\\x5a\\x05\\x56\"\n\"\\x61\\x4c\\x62\\x67\\x1b\\x85\\x55\\x0a\\x76\\x06\\x6c\\x7b\\x93\\x9a\\x93\\x8f\\x93\\x99\\x9c\\x1f\\x0e\\xc9\\x79\\x1d\\xf8\\x41\\xf9\\x5b\\x21\\x0a\\xc9\\x5f\"\n\"\\x0a\\x92\\xac\\x16\\xf8\\xee\\x06\\xfb\\xad\\xf9\\x44\\x05\\xfb\\x8e\\xfd\\x11\\x15\\xf7\\x69\\xf8\\x5e\\xf7\\x51\\xfc\\x5e\\x05\\x0e\\x5a\\x27\\x1d\\x5c\\xf7\"\n\"\\xfe\\x15\\x4c\\x73\\x59\\x67\\x4e\\x1b\\x4b\\x63\\xb0\\xc9\\x87\\x5c\\x1d\\xa5\\x94\\xa0\\x94\\xb6\\x08\\x0e\\x5a\\x27\\x1d\\x8d\\xf8\\x09\\x21\\x0a\\x5a\\x27\"\n\"\\x1d\\xfb\\x3b\\xf7\\xd2\\x24\\x1d\\x0e\\x5a\\x27\\x1d\\x7e\\xf7\\xbb\\x29\\x1d\\x91\\xf8\\x44\\xc1\\x15\\x63\\xfb\\x0a\\x7a\\x5b\\x7f\\x71\\x08\\x6d\\x7e\\x77\"\n\"\\x7b\\x76\\x54\\x1d\\xb5\\xb1\\x9e\\xae\\xa7\\x1e\\xa7\\xae\\xa4\\xbf\\x9a\\xbe\\xf7\\x24\\xf8\\x8b\\x18\\xb0\\xf7\\x16\\x8f\\x90\\xca\\x99\\x08\\x9b\\xfb\\x5b\"\n\"\\x7b\\x07\\xc4\\x86\\x98\\x81\\x67\\x1a\\x7f\\x89\\x80\\x84\\x76\\x1e\\x8a\\x88\\x8a\\x87\\x8a\\x1a\\x25\\xfc\\x10\\xfb\\x64\\xf8\\x87\\x05\\xfb\\x35\\x7b\\x06\"\n\"\\xba\\x87\\x9f\\x7e\\x9e\\x64\\xfb\\x0b\\xfc\\x35\\x18\\x65\\xfb\\x14\\x83\\x7f\\x52\\x83\\x08\\x7b\\xf7\\x5a\\x9b\\x07\\x57\\x8f\\x79\\x96\\xa7\\x1a\\x98\\x8e\"\n\"\\x9f\\x91\\xa0\\x1e\\xf7\\x06\\xf8\\x3a\\x05\\x0e\\x5a\\xf8\\xcc\\xf7\\x36\\x15\\x7b\\x93\\x5c\\x4a\\x71\\x72\\x60\\x77\\x19\\x7a\\x66\\x47\\x81\\x3f\\x1b\\x53\"\n\"\\x74\\x95\\xa3\\x97\\x97\\xba\\xa3\\xe2\\x1f\\xab\\xf7\\x07\\x05\\x8a\\x9b\\x9a\\x8a\\x9b\\x1b\\xb9\\x8a\\xa7\\x8a\\xa3\\x86\\x92\\x85\\x19\\x94\\x84\\x8d\\x84\"\n\"\\x77\\x1a\\x79\\x89\\x7f\\x86\\x75\\x1e\\x9f\\x86\\xcf\\xf7\\x7c\\x79\\x8f\\x65\\x36\\x81\\x84\\x31\\x88\\x19\\x7f\\x6b\\x8a\\x8a\\x68\\x1f\\xcd\\xf7\\x7d\\x05\"\n\"\\xa2\\x91\\x95\\x8e\\xc5\\x1b\\xf7\\x30\\xae\\x7e\\x4f\\x7e\\x8a\\x7c\\x8a\\x7a\\x1f\\xa0\\x89\\xaa\\xf7\\x2d\\x05\\xfc\\x85\\x7b\\x06\\xc9\\x85\\x9a\\x83\\x70\"\n\"\\x1a\\x7f\\x85\\x6a\\x86\\x78\\x1e\\xfb\\x0f\\xfc\\x4e\\x7a\\x52\\x83\\x84\\x53\\x81\\x19\\x7b\\xf8\\x60\\x07\\x76\\x70\\x84\\x79\\x6f\\x1a\\x56\\xb5\\x60\\xc0\"\n\"\\xb0\\x0a\\x69\\x72\\xa0\\xa8\\x98\\x90\\x9f\\x94\\xa2\\x1f\\x0e\\x5a\\xf7\\x9d\\xf7\\xdf\\x9a\\x0a\\x75\\x3d\\x6a\\x73\\x3d\\x5e\\x1d\\xf3\\x06\\xf1\\xb2\\x73\"\n\"\\x4d\\x7f\\x8a\\x84\\xd0\\x1d\\xa0\\x9c\\x8a\\x89\\x93\\x1f\\xa0\\x86\\x97\\x7d\\x78\\xba\\x0a\\x78\\x79\\x50\\x89\\x20\\x1d\\xf8\\x83\\x06\\xc7\\xf7\\x50\\x05\"\n\"\\x7b\\x06\\x75\\x5a\\x77\\x72\\x62\\x1d\\x35\\x7e\\x8f\\xa3\\x92\\x8c\\x91\\x8f\\x99\\x1f\\x0e\\x9e\\xe3\\xf8\\x56\\x15\\xbc\\x06\\xa4\\xc2\\x05\\xa6\\xc5\\x9b\"\n\"\\xbb\\xa3\\x1a\\xa3\\x7f\\x98\\x75\\x5c\\x79\\x68\\xfb\\x0e\\x7f\\x1e\\xf7\\x90\\xfb\\x4c\\x9a\\x0a\\x74\\x3d\\x6b\\x73\\x3d\\x5e\\x1d\\xf3\\x06\\xf1\\xb2\\x73\"\n\"\\x4d\\x80\\x8a\\x83\\xd0\\x1d\\x9f\\x9d\\x8a\\x89\\x93\\x1f\\xa0\\x86\\x97\\x7d\\x78\\x1a\\x7f\\x89\\x7d\\x87\\x7d\\x1e\\xfb\\x0e\\xfc\\x5e\\x7a\\x48\\x77\\x79\"\n\"\\x51\\x89\\x20\\x1d\\xf8\\x83\\x06\\xc7\\xf7\\x50\\x05\\x7b\\x06\\x74\\x5a\\x78\\x72\\x62\\x1d\\x35\\x7e\\x8f\\xa3\\x92\\x8c\\x91\\x8f\\x99\\x1f\\x0e\\xc9\\x59\"\n\"\\x0a\\xf7\\x18\\xda\\xf8\\x56\\x15\\xbc\\x06\\xa5\\xc2\\x05\\xa5\\xc3\\x9b\\xbd\\xa3\\x1a\\xa3\\x7f\\x98\\x76\\x5b\\x7a\\x69\\xfb\\x0f\\x7f\\x1e\\xf7\\x91\\xfb\"\n\"\\x4d\\x6e\\x1d\\xf7\\x9b\\xf8\\x29\\x15\\xf7\\x2c\\xbe\\xf0\\xf5\\xe7\\x1b\\xc8\\xad\\x5e\\x39\\x77\\x8a\\x7d\\x87\\x77\\x1f\\x9d\\x06\\xc0\\xf7\\x67\\x05\\x78\"\n\"\\x06\\x79\\x81\\x7e\\x80\\x80\\x1b\\x85\\x84\\x8d\\x90\\x7e\\x1f\\x9f\\x5a\\x81\\x8d\\x6c\\x1b\\xfb\\x13\\xfb\\x21\\xfb\\x0f\\xfb\\x39\\x4c\\x1f\\x59\\x06\\x6c\"\n\"\\x62\\x05\\xce\\x06\\x86\\x7a\\x87\\x78\\x86\\x6f\\x08\\x57\\x06\\x6c\\x62\\x05\\xda\\x7b\\x06\\xfb\\x24\\xdd\\x28\\xf7\\x0a\\xce\\xbd\\xa1\\xbb\\xb5\\x1e\\x9c\"\n\"\\xbc\\x05\\x4f\\x5a\\x5f\\x72\\x54\\x1b\\x38\\x57\\xd5\\xf7\\x0a\\x96\\x8b\\x93\\x8c\\x99\\x1f\\xf7\\x22\\x06\\xa9\\xb4\\x05\\xfb\\x3b\\x06\\x90\\xa4\\x8f\\x9e\"\n\"\\x91\\x9f\\x08\\xf7\\x5e\\x06\\xa9\\xb4\\x05\\x0e\\x30\\x6b\\x0a\\xc9\\x2e\\x0a\\x68\\xf8\\x21\\x15\\x4c\\x72\\x90\\x0a\\xb9\\xa3\\xb7\\xad\\x1f\\x9f\\xa6\\x93\"\n\"\\xa0\\x95\\xb5\\x08\\x0e\\xbf\\x2e\\x0a\\xfb\\x01\\xf8\\x2c\\x20\\x0a\\xc9\\x2e\\x0a\\xfc\\x55\\xfd\\x73\\x30\\x1d\\xc9\\x2e\\x0a\\xfb\\x5c\\xf7\\xf5\\x24\\x1d\"\n\"\\x0e\\xc9\\xf9\\x36\\xf8\\x9e\\x15\\x96\\xb4\\x9c\\xc5\\x92\\x91\\xc5\\x95\\x19\\x9b\\xfb\\x8b\\x7b\\x07\\xc6\\x83\\x96\\x84\\x6f\\x1a\\x7b\\x87\\x77\\x84\\x71\"\n\"\\x1e\\x88\\x81\\x05\\xfb\\xb1\\x06\\x96\\xb4\\x9b\\xbe\\xa4\\xaf\\x0a\\x7b\\x87\\x77\\x84\\x71\\x1e\\x88\\x81\\x05\\x3f\\x06\\x81\\x6d\\x05\\xd9\\x06\\xfb\\x04\"\n\"\\xfc\\x26\\x51\\x1d\\xf7\\x05\\xf8\\x2e\\x05\\xd8\\x06\\x94\\xa9\\x05\\xfc\\x6a\\x6d\\x15\\xf7\\xb2\\x06\\x68\\xfb\\x10\\x05\\xfb\\xb1\\x06\\x0e\\xbf\\xf8\\xbb\"\n\"\\xf9\\xfd\\xc0\\x1d\\xf7\\x15\\x58\\x15\\xfb\\x8b\\x7b\\x06\\xc5\\x84\\x97\\x83\\x6f\\x57\\x0a\\x5d\\xfb\\x38\\x05\\xfb\\xb1\\x06\\xc1\\xf7\\x57\\x4a\\x0a\\x88\"\n\"\\x77\\x83\\x70\\xb7\\x0a\\x51\\x1d\\xf7\\x18\\xf8\\x75\\x9c\\xc5\\x93\\x91\\xc4\\x95\\x19\\x0e\\xe5\\xf7\\x91\\x9d\\x15\\x73\\x7f\\x8d\\x8e\\x82\\x1f\\x7b\\x91\"\n\"\\x82\\x98\\x9c\\x1a\\x95\\x8e\\x9b\\x8f\\x9a\\x1e\\xf7\\x17\\xf8\\x5d\\x9f\\xd4\\x9e\\x9a\\xd3\\x8a\\x19\\x90\\x2e\\x1d\\x86\\x79\\x05\\xa2\\x98\\x8a\\x87\\x94\"\n\"\\x1f\\x9b\\x85\\x94\\x7e\\x7a\\x1a\\x81\\x88\\x7b\\x87\\x7d\\x1e\\xfb\\x17\\xfc\\x5e\\x78\\x46\\x78\\x7a\\x60\\x1d\\xf7\\xc9\\xf9\\x18\\x15\\xc6\\x8c\\x9e\\x80\"\n\"\\x6c\\x4d\\x1d\\xfb\\x14\\xfc\\x52\\x05\\x53\\x7b\\x6d\\x68\\x6c\\x1b\\x7a\\x7f\\x94\\x99\\x95\\x8d\\x8f\\x97\\x96\\x1f\\x95\\x96\\x8f\\x94\\x97\\x1a\\xa4\\x77\"\n\"\\x9f\\x71\\x68\\x6f\\x6b\\x64\\x57\\xb6\\x64\\xc6\\xb7\\xbb\\xa2\\xb1\\xb1\\x1e\\xa8\\xa9\\xa5\\xbd\\x9c\\xc6\\xf5\\xf8\\x04\\x18\\x9b\\xcb\\xa1\\xa0\\xbc\\x8d\"\n\"\\x90\\x9d\\x18\\xfb\\x91\\x06\\x0e\\xfb\\xdb\\x2c\\x1d\\xf8\\x49\\xf9\\xe2\\x15\\x4c\\x72\\x5a\\xa1\\x1d\\xa6\\x94\\xa0\\x94\\xb5\\x08\\x0e\\xfb\\xdb\\x2c\\x1d\"\n\"\\xf7\\xc5\\xf9\\xb6\\x24\\x1d\\x0e\\xfb\\xdb\\x2c\\x1d\\xf8\\x55\\xf9\\x9f\\x29\\x1d\\xfb\\xdb\\xf7\\x1d\\x22\\x0a\\x7b\\x07\\xc6\\x83\\x96\\x84\\x6f\\x9f\\x0a\"\n\"\\xf7\\x56\\x07\\x75\\x6c\\x86\\x7c\\x70\\x1a\\x56\\xa9\\x0a\\x6b\\x1b\\x66\\x75\\xa0\\xaf\\x9f\\x90\\x9a\\x96\\x99\\x1f\\x9b\\x07\\x52\\x92\\x80\\x91\\xa7\\x1a\"\n\"\\x9f\\x8d\\x95\\x94\\xac\\x1e\\xf7\\x0f\\xf8\\x4f\\x9d\\xc5\\x92\\x91\\xc4\\x95\\x19\\x9b\\x07\\x0e\\xfb\\xdb\\x42\\x0a\\xfb\\xdb\\xf7\\x8e\\x9d\\x15\\x35\\x0a\"\n\"\\xf7\\x0f\\xf8\\x5d\\x3f\\x1d\\x6d\\xf9\\xd2\\x53\\x1d\\xfb\\x96\\xce\\xf8\\x56\\x15\\xbc\\x06\\xa5\\xc2\\x05\\xa5\\xc3\\x9b\\xbd\\xa3\\x1a\\xa3\\x7f\\x98\\x76\"\n\"\\x5b\\x7a\\x69\\xfb\\x0f\\x7f\\x1e\\xf7\\x95\\xfc\\x85\\x15\\x35\\x0a\\xf7\\x0f\\xf8\\x5d\\x3f\\x1d\\x0e\\xfb\\xdb\\x81\\x16\\xf7\\x88\\x9b\\x06\\xae\\x1d\\xfb\"\n\"\\x8b\\xab\\x1d\\xf8\\x44\\xf9\\xbf\\x15\\x6a\\x80\\x7e\\x80\\x70\\x1b\\x7c\\x7b\\x90\\x99\\x6c\\x1f\\x9c\\x66\\x71\\x92\\x74\\x1b\\x57\\x70\\x6e\\x3e\\x76\\xa3\"\n\"\\x1d\\xfb\\x72\\x6e\\x0a\\x58\\xf7\\x87\\x20\\x0a\\x92\\xf7\\xa0\\xf7\\xf1\\x15\\xf7\\x23\\xfb\\x8d\\x05\\x96\\x78\\x91\\x7a\\x7f\\x1a\\x76\\x78\\x81\\x61\\x88\"\n\"\\x1e\\x85\\x79\\x05\\xf7\\xa1\\x06\\x91\\x9d\\x4c\\x89\\x6d\\xa3\\x59\\xe5\\x19\\xfb\\x21\\xf7\\x93\\xf7\\x9c\\xf7\\x6b\\xb6\\xac\\xa4\\x95\\xb3\\x8c\\x19\\x91\"\n\"\\x9d\\x05\\xfb\\x5d\\x22\\x1d\\xb9\\x88\\x8f\\x89\\x7e\\x1a\\x83\\x8a\\x89\\x77\\x91\\x0a\\xc3\\x9f\\x80\\x6d\\x80\\x89\\x7c\\x87\\x7d\\x1f\\xfb\\x0f\\xfc\\x5e\"\n\"\\xcd\\x1d\\x70\\x7b\\xc2\\x1d\\x92\\x6f\\x1d\\xfc\\xaf\\xfe\\x1f\\x40\\x1d\\x23\\x34\\x0a\\xfb\\x03\\xd0\\x96\\x0a\\x0e\\x53\\xf8\\x0e\\xf8\\x74\\x15\\x7b\\xfc\"\n\"\\x19\\x82\\x1d\\x0e\\x23\\x34\\x0a\\xca\\xfb\\x5d\\x15\\xdf\\xba\\xb9\\xc3\\xc3\\x48\\x0a\\x70\\x74\\x70\\x57\\x69\\x1e\\x0e\\x23\\x34\\x0a\\xfb\\xa8\\xfe\\x1f\"\n\"\\x30\\x1d\\x23\\x34\\x0a\\x93\\xfb\\x98\\x49\\x0a\\xf7\\x41\\xae\\x0a\\x88\\x93\\x8a\\x96\\x86\\x19\\x9a\\x84\\x95\\x82\\x83\\x1a\\x89\\x8a\\x87\\x8a\\x87\\x1e\"\n\"\\xfb\\x19\\xfc\\x84\\x7a\\xd3\\x1d\\x70\\x7c\\xb6\\x0a\\x9b\\x1a\\x96\\x8d\\x9a\\x8f\\x9a\\x1e\\xf7\\x10\\xf8\\x62\\xc8\\xfc\\xc6\\x05\\x9d\\x06\\xf7\\xfb\\xf8\"\n\"\\xaf\\xfb\\x0e\\xfc\\x46\\x78\\x46\\x78\\x7a\\x4b\\x8a\\x20\\x1d\\xf7\\x9f\\x24\\x0a\\x72\\x7d\\x35\\x1d\\x9b\\x1a\\x98\\x8d\\x98\\x8f\\x9a\\x4b\\x1d\\xd3\\x9e\"\n\"\\x9d\\x9a\\xd0\\x21\\x1d\\xfb\\x39\\x06\\x0e\\x92\\x32\\x0a\\xfb\\xe8\\xd0\\x93\\x0a\\x92\\x32\\x0a\\x2d\\xf7\\x80\\x21\\x0a\\x92\\x32\\x0a\\xfc\\xb4\\xfe\\x1f\"\n\"\\x40\\x1d\\x92\\xf7\\x97\\xf8\\xb0\\x15\\xf7\\x69\\xfc\\xb8\\x05\\x9a\\x06\\xf7\\x2b\\xf8\\xc9\\x9d\\xd0\\x9d\\x9b\\xcb\\x8d\\x19\\x8f\\x9d\\x05\\xfb\\x62\\x22\"\n\"\\x1d\\xa4\\x9a\\x89\\x88\\x94\\x1f\\x9b\\x85\\x95\\x7d\\x7a\\x1a\\x81\\x89\\x7c\\x87\\x7c\\x1e\\x24\\xfc\\x13\\xfb\\x4f\\xf8\\x77\\x05\\xfb\\x44\\x06\\x86\\x7a\"\n\"\\x05\\x9f\\x06\\xb5\\xa2\\x7e\\x69\\xa1\\x1f\\xfb\\x18\\xfc\\x81\\x79\\x45\\x78\\x7b\\x4b\\x8a\\x19\\x86\\x55\\x0a\\x70\\x7c\\xc2\\x1d\\xc9\\x26\\x0a\\xf7\\x34\"\n\"\\xf7\\x79\\x15\\x4c\\x72\\x5a\\xa1\\x1d\\xa5\\x94\\xa0\\x94\\xb6\\x08\\x0e\\xc9\\x26\\x0a\\xfb\\x45\\x95\\x0a\\x93\\xfb\\x34\\x92\\x0a\\xc9\\x26\\x0a\\xf7\\x48\"\n\"\\xf7\\x36\\x15\\xfb\\xc0\\x46\\x1d\\xcd\\xdf\\xf8\\x56\\x15\\xbc\\x06\\xa4\\xc2\\x05\\xa7\\xc6\\x9a\\xba\\xa3\\x1a\\xa3\\x7f\\x98\\x75\\x5c\\x79\\x68\\xfb\\x0e\"\n\"\\x7f\\x1e\\xf8\\xd9\\xfb\\xf4\\x15\\x74\\x4d\\x6f\\x75\\x55\\x88\\x08\\xfb\\x03\\x06\\xcc\\xb0\\xb1\\xa7\\xb2\\xb3\\x08\\xdf\\xe2\\xb7\\xea\\xea\\x1a\\xf7\\x19\"\n\"\\x3a\\xdc\\xfb\\x19\\x30\\x3f\\x6d\\x4d\\x4a\\x1e\\x3e\\x42\\x5f\\x2b\\x29\\x1a\\x2a\\xb2\\x3d\\xdc\\x4d\\x1e\\xfb\\x0b\\x06\\x60\\x7b\\x98\\xae\\x95\\x8c\\x93\"\n\"\\x8d\\xa0\\x1f\\x77\\x84\\x7b\\xfb\\x30\\x05\\xf7\\x76\\x06\\x9e\\xd1\\x05\\x64\\xb6\\x7c\\xb8\\xd5\\x1a\\xd8\\xa2\\xf7\\x01\\xac\\xda\\x1e\\xe2\\xb0\\xd1\\xc1\"\n\"\\xd7\\x1b\\xd7\\xbb\\x57\\x39\\x34\\x6e\\x21\\x5b\\x33\\x1f\\x68\\x4c\\x6d\\x66\\x4e\\x56\\x78\\x45\\x18\\xf7\\x77\\x06\\xcf\\xf7\\x31\\x05\\x0e\\xc9\\xf8\\x6b\"\n\"\\xf9\\x34\\x15\\x38\\x30\\x5f\\x40\\x46\\x1f\\x34\\x2e\\x57\\xfb\\x0f\\xfb\\x04\\x1a\\xfb\\x24\\xe2\\x30\\xf7\\x1d\\xe1\\xd2\\xc2\\x0a\\xf7\\x23\\x32\\xea\\xfb\"\n\"\\x1a\\x1e\\x85\\x66\\x15\\xda\\xba\\x50\\x28\\x32\\x68\\xfb\\x0d\\x55\\x25\\x1f\\x33\\x5c\\x47\\x56\\x47\\x1b\\x3f\\x59\\xc9\\xe8\\xf7\\x05\\xc3\\xf7\\x35\\xd4\"\n\"\\xee\\x1f\\xbf\\xb1\\xc1\\xaa\\xbe\\x1b\\x0e\\xc9\\xe0\\xa9\\x1d\\xf8\\x32\\xf7\\x31\\x15\\x37\\x30\\x5f\\x40\\x46\\x1f\\x34\\x2d\\x57\\xfb\\x0e\\xfb\\x05\\x1a\"\n\"\\xfb\\x23\\xe2\\x30\\xf7\\x1e\\xe0\\xd3\\xc2\\x0a\\xf7\\x22\\x31\\xeb\\xfb\\x19\\x1e\\x85\\x66\\x15\\xda\\xba\\x51\\x27\\x32\\x68\\xfb\\x0e\\x55\\x26\\x1f\\x33\"\n\"\\x5b\\x47\\x56\\x48\\x1b\\x3e\\x59\\xc9\\xe9\\xf7\\x04\\xc3\\xf7\\x35\\xd4\\xee\\x1f\\xbf\\xb1\\xc2\\xaa\\xbe\\x1b\\x0e\\xc9\\xc3\\x0a\\x6e\\x91\\x66\\x6a\\x0a\"\n\"\\x6d\\x92\\x6e\\x63\\x1a\\x24\\x5b\\xfb\\x28\\x4b\\x2f\\x1e\\x3c\\x54\\x4e\\x65\\x44\\x1b\\x69\\x74\\x93\\xa0\\x74\\x1f\\xf7\\x70\\xf9\\x26\\x56\\x1d\\xf0\\xf9\"\n\"\\x10\\x6c\\x1d\\xc9\\xf9\\xb3\\x23\\x0a\\xfd\\x12\\x22\\x1d\\xa3\\x98\\x89\\x88\\x94\\x1f\\x9b\\x85\\x95\\x7d\\x7a\\x1a\\x7e\\x89\\x7f\\x87\\x7c\\x1e\\xfb\\x0e\"\n\"\\xfc\\x5d\\x4b\\x0a\\x90\\x9d\\x05\\x35\\x0a\\xf7\\x0a\\xf8\\x4a\\x9d\\xd3\\x9f\\x9b\\xd3\\x8a\\x19\\xea\\x06\\xbe\\xa0\\x7e\\x6e\\x81\\x89\\x7d\\x86\\x7b\\x1f\"\n\"\\xfb\\x09\\xfc\\x4a\\x7a\\x46\\x78\\x7a\\xc4\\x0a\\x74\\x7e\\x8d\\x8e\\x82\\x68\\x1d\\x98\\x8d\\x97\\x8f\\x9a\\x1e\\xf7\\x0e\\xf8\\x5d\\x05\\xd4\\x9e\\x9e\\x99\"\n\"\\xd4\\x1b\\x0e\\xb6\\xf9\\xc8\\xf9\\x1a\\x15\\xa0\\x61\\x79\\x90\\x75\\x1b\\x5c\\x6c\\x69\\x41\\x74\\x1f\\x6a\\x20\\x67\\xfb\\x02\\x55\\x56\\x27\\x76\\x19\\xd7\"\n\"\\xf7\\xb0\\x9e\\xd4\\x9d\\x9a\\xd5\\x8a\\x19\\x8f\\x2e\\x1d\\x87\\x79\\x05\\xa2\\x99\\x8a\\x87\\x94\\x1f\\x9b\\x85\\x95\\x7d\\x7a\\x1a\\x82\\x89\\x7b\\x87\\x7d\"\n\"\\x1e\\x3d\\xfb\\xb6\\x05\\x41\\x9b\\x6f\\xaa\\xce\\x1a\\xa4\\x8e\\xa8\\x90\\xa1\\x1e\\x9e\\xdf\\x05\\x8f\\x9d\\x8d\\x9f\\x98\\x1a\\xb6\\x71\\xaa\\x66\\x73\\x69\"\n\"\\x7f\\x7a\\x70\\x1e\\x92\\x76\\x05\\x91\\x98\\x90\\x8c\\x94\\x1b\\x99\\x92\\x84\\x7d\\x84\\x8a\\x86\\x85\\x6b\\x1f\\x7a\\x3d\\x05\\x86\\x73\\x89\\x77\\x77\\x1a\"\n\"\\x4a\\xb7\\x4c\\xcd\\x6e\\x1e\\xa1\\x81\\x9f\\x86\\xad\\x86\\x65\\xfb\\x20\\x18\\x7a\\x47\\x78\\x79\\x4d\\x8a\\x86\\x79\\x18\\xf7\\x93\\x24\\x0a\\x74\\x7e\\x35\"\n\"\\x1d\\x9b\\x1a\\x99\\x8d\\x97\\x8f\\x9a\\x1e\\xb1\\xf7\\x25\\xf7\\x3d\\x9c\\xed\\xd4\\xb0\\xf7\\x1e\\x19\\xa2\\xdf\\x05\\xbf\\x99\\x9a\\xa1\\xa2\\x1b\\x93\\x91\"\n\"\\x8a\\x86\\x98\\x1f\\x0e\\x5a\\x3a\\x1d\\xd7\\xf7\\xe8\\x56\\x1d\\x5a\\x3a\\x1d\\xf7\\xd6\\xf8\\x8f\\x21\\x0a\\x5a\\x3a\\x1d\\x33\\xfd\\x10\\x40\\x1d\\x5a\\xf7\"\n\"\\xb9\\xf7\\xd8\\x15\\x81\\xb2\\x9b\\x88\\xaa\\x1b\\xf7\\x26\\xef\\xdc\\xf7\\x0a\\xe9\\x3c\\xc5\\xfb\\x14\\x1f\\xfb\\x73\\x22\\x1d\\xa4\\x9a\\x8a\\x87\\x95\\x1f\"\n\"\\x9b\\x85\\x95\\x7d\\x7b\\x1a\\x80\\x89\\x7c\\x87\\x7d\\x1e\\xfb\\x0f\\xfc\\x5e\\x7a\\x45\\x78\\x7b\\x4a\\x8a\\x20\\x1d\\xf7\\xa3\\x24\\x0a\\x6f\\x7a\\xb6\\x0a\"\n\"\\x9c\\x1a\\x94\\x8d\\x9b\\x8f\\x9a\\xe4\\x1d\\xcd\\xb3\\x61\\x47\\x5d\\x74\\x56\\x6a\\x6d\\x1f\\x72\\x6f\\x63\\x7d\\x61\\x1b\\x77\\x7e\\x8d\\x92\\x72\\x1f\\x0e\"\n\"\\x37\\x0a\\xfb\\x4e\\xf7\\x7f\\x92\\x0a\\xf7\\x55\\x7c\\x15\\x89\\x9b\\x93\\x8a\\x97\\x9b\\x1d\\x6a\\x8d\\x48\\x9d\\x88\\x18\\x7c\\x1d\\x9a\\x85\\x92\\x89\\x98\"\n\"\\x87\\x54\\x32\\x18\\x94\\x83\\x05\\x90\\x98\\x93\\x8d\\x96\\x4a\\x1d\\x75\\x7b\\x8f\\x96\\x6d\\xc1\\x0a\\xaf\\xbd\\xb5\\x6b\\xa5\\x59\\x81\\x85\\x47\\x1d\\xfb\"\n\"\\x3b\\xf8\\x6a\\x5d\\x0a\\x69\\x8d\\x49\\x08\\x6b\\xf8\\x26\\x20\\x0a\\x37\\x0a\\xfb\\xf3\\xfd\\x79\\x30\\x1d\\x49\\xf8\\xdd\\xf9\\x2b\\x15\\xfc\\x73\\x06\\xf7\"\n\"\\x12\\xfb\\xf0\\xfb\\xd2\\xfb\\xcf\\x05\\xf8\\x9a\\x06\\xef\\xf7\\x3f\\x6f\\x94\\x05\\x39\\x5a\\x69\\x7a\\xfb\\x09\\x1b\\xfb\\x4f\\x06\\x6e\\x81\\x8f\\x95\\x92\"\n\"\\x9e\\xa4\\xa6\\xa6\\x1f\\xf7\\x61\\xf7\\x63\\x2a\\xf7\\x9d\\x05\\xf7\\x39\\x06\\xee\\xa9\\x7a\\x51\\x7f\\x8a\\x7c\\x8a\\x7b\\x1f\\xab\\x06\\x0e\\x23\\xf8\\x47\"\n\"\\xf9\\x02\\x15\\xec\\x06\\xc1\\xa6\\x74\\x5c\\x78\\x89\\x78\\x86\\x71\\x1f\\x9c\\x06\\xb9\\xf7\\x42\\x05\\xfc\\xb3\\x06\\x5c\\xfb\\x42\\x05\\x9e\\x06\\x9e\\xe6\"\n\"\\xc8\\xb9\\xed\\x88\\x08\\xca\\x06\\xfb\\x1e\\xfc\\x99\\x05\\x42\\x78\\x78\\x7d\\x41\\x1b\\x87\\x79\\x05\\xf7\\xb6\\x24\\x0a\\x81\\x06\\x6e\\x7b\\x8d\\x8e\\x81\"\n\"\\x68\\x1d\\x95\\x8d\\x9a\\x8f\\x9a\\x1e\\x0e\\x23\\xf7\\xed\\xf7\\xff\\x15\\xd2\\xf7\\x93\\x05\\xc2\\x06\\xd3\\xab\\x72\\x53\\x7e\\x8a\\x7c\\x89\\x7a\\x1f\\x9c\"\n\"\\x89\\xb7\\xf7\\x37\\x05\\xfc\\xa8\\x06\\x61\\xfb\\x2e\\x9d\\x87\\xc0\\xf7\\x00\\xac\\x9c\\xf7\\x2c\\x89\\x19\\x45\\xfb\\x93\\x05\\x2a\\x06\\x83\\x68\\x05\\xeb\"\n\"\\x06\\x4a\\xfb\\x82\\x64\\x1d\\xf7\\xb6\\x9b\\x07\\x99\\x0a\\xc5\\xf7\\x64\\x05\\xf5\\x06\\x93\\xae\\x05\\x0e\\x23\\x50\\x1d\\x76\\xf8\\x13\\xbe\\x1d\\x23\\xf7\"\n\"\\x74\\x16\\xf7\\x17\\x9b\\x06\\x99\\x0a\\xf7\\x1f\\xf8\\x86\\x05\\xc2\\x06\\xd3\\xab\\x72\\x53\\x7e\\x8a\\x7c\\x89\\x7a\\x1f\\x9c\\x89\\xb7\\xf7\\x37\\x05\\xfc\"\n\"\\xa8\\x06\\x61\\xfb\\x2e\\x9d\\x87\\xc0\\xf7\\x00\\xac\\x9c\\xf7\\x2c\\x89\\x19\\xfb\\x24\\xfc\\xa4\\x64\\x1d\\xf7\\x0d\\x07\\x50\\x2c\\x2a\\x0a\\x99\\x93\\x8d\"\n\"\\x95\\x4f\\x0a\\x7a\\x8f\\x96\\x6d\\xc1\\x0a\\xae\\xbe\\xb5\\x6b\\xa5\\x59\\x82\\x85\\x2c\\x0a\\xc9\\xf8\\xb6\\xf8\\x5d\\x15\\x7a\\x06\\x4f\\x76\\x77\\x7e\\x49\"\n\"\\x1b\\x69\\x06\\x58\\x77\\x97\\xa8\\x93\\x8c\\x97\\x8d\\x97\\x1f\\x7a\\x06\\x53\\xfb\\x6d\\x05\\x9c\\x06\\xa0\\xc8\\x9c\\x97\\xd2\\x8c\\x08\\xab\\x06\\xc1\\x9d\"\n\"\\x81\\x6e\\x83\\x8a\\x7d\\x88\\x7e\\x1f\\x9c\\x06\\x87\\xf8\\x49\\x15\\xfb\\x0c\\xfb\\x07\\x5b\\x39\\x3e\\x1f\\x3d\\x37\\x58\\xfb\\x15\\xfb\\x09\\x1a\\xfb\\x29\"\n\"\\xe8\\x36\\xf7\\x38\\xf7\\x0c\\xf7\\x01\\xb9\\xde\\xd8\\x1e\\xdc\\xe2\\xbe\\xf7\\x16\\xf7\\x09\\x1a\\xd6\\x72\\xc7\\x5c\\xb1\\x1e\\xb0\\x5d\\x49\\xa0\\x45\\x1b\"\n\"\\x85\\x6a\\x15\\xac\\xb1\\x81\\x7c\\xa3\\x1f\\xb3\\x72\\xa0\\x5a\\x48\\x1a\\x24\\x65\\xfb\\x14\\x51\\x2c\\x1e\\x33\\x56\\x39\\x5b\\x29\\x1b\\x67\\x66\\x94\\x9c\"\n\"\\x70\\x1f\\x65\\xa2\\x77\\xb9\\xc9\\x1a\\xf7\\x0d\\xbf\\xf7\\x34\\xcd\\xdf\\x1e\\xd0\\xc2\\xd5\\xb0\\xdf\\x1b\\x0e\\xbf\\x63\\x0a\\xfb\\x1d\\xf7\\x77\\x3e\\x1d\"\n\"\\xc9\\x27\\x0a\\xfc\\x49\\xd0\\xb4\\x1d\\x85\\x1e\\x92\\xfb\\x34\\x15\\xaf\\xb3\\x1d\\x0e\\xc9\\x27\\x0a\\xfb\\x0b\\xf7\\x32\\x15\\xfb\\xc1\\x46\\x1d\\xc9\\xf8\"\n\"\\xca\\x22\\x0a\\x7b\\x07\\xc0\\x86\\x9d\\x80\\x6d\\x1a\\x7b\\x71\\x27\\x5b\\xfb\\x3f\\x1e\\x7e\\x5a\\x05\\xfb\\x38\\x5f\\x4b\\x47\\xfb\\x02\\x1b\\x38\\x52\\xba\"\n\"\\xd2\\xae\\xa7\\xf7\\x00\\xd6\\xf7\\x9a\\x1f\\x9f\\xd0\\x9b\\x99\\xd0\\x93\\x44\\x0a\\xf7\\x12\\xba\\xb1\\x93\\x9f\\xb2\\x1e\\x72\\x6f\\x81\\x71\\x6c\\xb1\\x1d\"\n\"\\xac\\xaa\\x94\\xa2\\xb3\\xce\\x1f\\xaa\\xc0\\x99\\xa9\\x9a\\xbe\\xde\\xf7\\xb1\\x18\\xb1\\xf7\\x16\\x8f\\x90\\xc9\\x99\\x08\\x9b\\x07\\x0e\\x23\\x75\\x1d\\x0e\"\n\"\\x23\\x75\\x1d\\xa5\\xf9\\x6e\\x53\\x1d\\x8b\\xd2\\xa9\\x1d\\xf8\\x36\\xfb\\x60\\x15\\xf7\\x37\\xf7\\x76\\x05\\xd5\\xc0\\xb9\\xac\\xc0\\x21\\x1d\\xfb\\x72\\x06\"\n\"\\x85\\x79\\x05\\x9b\\x06\\xad\\x9e\\x81\\x79\\x80\\x86\\x81\\x7a\\x73\\x1f\\xfb\\x2a\\xfb\\x6a\\x4b\\xf7\\x6a\\x05\\x86\\x9d\\x89\\x94\\x92\\x1a\\xa6\\xa0\\x97\"\n\"\\xb6\\x1e\\xa0\\x06\\x8f\\x9d\\x05\\xfb\\xaf\\x22\\x1d\\xa0\\x06\\xb7\\x8d\\xa5\\x75\\x9c\\xe9\\x1d\\x3f\\x8c\\x20\\x1d\\xf7\\xb4\\x29\\x0a\\x72\\x7a\\x8c\\x8d\"\n\"\\x82\\x1f\\x77\\x90\\x7e\\x99\\x9f\\x1a\\x98\\x8d\\x97\\x8f\\x9a\\x1e\\x0e\\xc9\\x27\\x0a\\xfb\\xa8\\xf7\\xae\\x15\\x55\\x5e\\x5e\\x55\\x97\\x1d\\xc9\\x63\\x0a\"\n\"\\xfb\\x14\\xf7\\x58\\x15\\x69\\x7f\\x7f\\x80\\x6f\\x1b\\x7c\\x7b\\x3f\\x0a\\x71\\x93\\x75\\xf7\\x00\\x1d\\x94\\x9b\\x9a\\xa4\\x1b\\x9d\\xa3\\x84\\x75\\xc0\\x1f\"\n\"\\x80\\xa6\\x9d\\x86\\x98\\x1b\\xba\\xad\\xb0\\xcf\\x99\\x1f\\x0e\\xf7\\x41\\x30\\x0a\\xfc\\x54\\xd0\\x94\\x0a\\xf7\\x41\\x30\\x0a\\xfb\\xf2\\xf7\\x80\\x20\\x0a\"\n\"\\xf7\\x41\\x30\\x0a\\xfc\\x8d\\xf7\\x49\\x23\\x1d\\xf7\\x41\\x30\\x0a\\xfc\\x15\\xce\\x28\\x0a\\x76\\xf8\\xc7\\xf7\\x50\\x15\\x7b\\x06\\x66\\x32\\x5c\\x69\\x30\"\n\"\\x8a\\x08\\x2f\\x06\\x30\\x06\\x3e\\x69\\xa7\\xca\\x94\\x8c\\x93\\x8c\\x9b\\x1f\\x7b\\x06\\x59\\xfb\\x50\\x05\\xf8\\x87\\x06\\xf7\\x33\\x23\\x0a\\xfc\\x67\\x06\"\n\"\\x5d\\xfb\\x3f\\x05\\x9c\\x06\\xa5\\xda\\xb2\\xa4\\xed\\x89\\x08\\xf7\\x36\\x06\\xe1\\xa5\\x7c\\x57\\x81\\x8a\\x83\\x88\\x7a\\x1f\\x9c\\x06\\x36\\x73\\x15\\x7a\"\n\"\\x06\\x78\\x4a\\x6b\\x77\\x3d\\x8d\\x08\\x52\\x06\\x5c\\x7c\\x8e\\x98\\x7d\\x1f\\x82\\x93\\x87\\x95\\x98\\x1a\\x94\\x8c\\x94\\x8f\\x9d\\x1e\\x79\\x06\\x4b\\xfb\"\n\"\\x85\\x05\\x9c\\x06\\x9d\\xd0\\xa5\\x9e\\xd6\\x8c\\x08\\xdc\\x06\\xc3\\xa1\\x7e\\x6a\\x7f\\x8a\\x82\\x85\\x75\\x1f\\x9c\\x06\\x0e\\x23\\x2f\\x0a\\xf7\\xf2\\xf7\"\n\"\\x70\\x20\\x0a\\x23\\x2f\\x0a\\xf7\\xba\\xbe\\x15\\xaa\\x06\\xfb\\x08\\xf7\\x29\\x05\\x9c\\x7e\\x80\\x91\\x41\\x1d\\x23\\x39\\x0a\\xfb\\xce\\xce\\x15\\xae\\x06\"\n\"\\xf7\\x3f\\xf5\\x05\\x96\\x92\\x90\\x93\\x98\\x1a\\xa0\\x7b\\x9a\\x77\\x65\\x1d\\x0e\\x23\\x39\\x0a\\xfb\\x81\\xf7\\x47\\x24\\x1d\\x0e\\x23\\xf7\\x29\\xb2\\x15\"\n\"\\xf8\\x6f\\xf9\\x03\\x05\\xfc\\x81\\x06\\x57\\xfb\\x30\\x05\\xa4\\x06\\xa9\\xec\\xb8\\xa2\\xf7\\x31\\x89\\x08\\xf7\\x16\\x06\\xfc\\x6f\\xfd\\x04\\x05\\xf8\\x8b\"\n\"\\x06\\xc2\\xf7\\x46\\x05\\x76\\x06\\x6a\\x20\\x4c\\x6a\\xfb\\x43\\x8c\\x08\\x0e\\x25\\x0a\\xf7\\x37\\xf7\\x7b\\x15\\x4c\\x73\\x90\\x0a\\xba\\x5a\\x1d\\x92\\xb7\"\n\"\\x1d\\xf6\\xaa\\xbb\\x9d\\xb1\\x71\\x0a\\x6d\\x1a\\x36\\x74\\x0a\\x7d\\xf7\\xa3\\x3b\\x0a\\xf7\\x79\\xcf\\x1d\\x5a\\xf8\\x07\\xf7\\x64\\x15\\x86\\xfb\\x09\\x05\"\n\"\\x50\\x88\\x80\\x7d\\x5c\\x1b\\x74\\x25\\x1d\\xf7\\x9c\\x06\\x90\\x9d\\x05\\x73\\x06\\x5b\\x7c\\x97\\xb4\\x92\\x8b\\x8b\\x8c\\xa5\\x1f\\xa2\\xf8\\xc2\\x05\\x7a\"\n\"\\x06\\xfc\\x2a\\xfc\\xcf\\x5d\\x4d\\x7b\\x7f\\x68\\x8c\\x19\\x7f\\x25\\x1d\\xf7\\x5a\\x06\\x8f\\x9d\\x05\\x77\\x06\\x6e\\x7c\\x94\\x9d\\x91\\x8f\\x95\\x91\\x94\"\n\"\\x1f\\xeb\\xf7\\x1e\\x05\\xf7\\x48\\xaf\\x15\\xfb\\x2f\\x06\\xf7\\x39\\xf7\\x80\\x05\\x0e\\x45\\xf8\\xea\\x23\\x0a\\xfc\\x4b\\x66\\x1d\\x7e\\xa4\\x0a\\xf7\\xa4\"\n\"\\x06\\xf7\\x37\\xf7\\x03\\xdf\\xf7\\x0f\\xf7\\x00\\x37\\xcd\\xfb\\x1c\\x79\\x80\\x8a\\x88\\x73\\x1f\\xcd\\xf7\\x8d\\x05\\xf7\\x14\\x06\\xbf\\xa6\\x72\\x5b\\x76\"\n\"\\x89\\x79\\x86\\x71\\x1f\\x9c\\x06\\xfb\\xba\\xfb\\x2b\\x15\\x91\\xa0\\x95\\x8c\\x9d\\x1b\\xe1\\xb8\\x5c\\x32\\x22\\x43\\x49\\xfb\\x08\\x72\\x7d\\x8e\\x95\\x6d\"\n\"\\x1f\\x0e\\x5a\\xf7\\x3e\\x23\\x0a\\x86\\x7a\\xaa\\x8a\\x94\\x8a\\x96\\x87\\x19\\x9b\\x86\\x95\\x7d\\x7a\\x4d\\x1d\\xfb\\x0f\\xfc\\x5e\\x05\\x45\\x79\\x78\\x7a\"\n\"\\x49\\x1b\\x7d\\x0a\\x76\\xb7\\x6b\\xa3\\x1e\\xa4\\x6a\\x5d\\xca\\x1d\\x2a\\x46\\x4d\\xfb\\x01\\x7f\\x81\\x8b\\x8d\\x74\\x1f\\x82\\x68\\x15\\xaa\\x8c\\x05\\xe7\"\n\"\\xbb\\x63\\x3f\\x20\\x3f\\x42\\xfb\\x02\\x76\\x7e\\x8d\\x91\\x6f\\x1f\\x0e\\x30\\x6b\\x0a\\x73\\xf9\\x60\\x23\\x0a\\xfc\\x8f\\x25\\x1d\\x9b\\x06\\xb9\\xa0\\x7d\"\n\"\\x6a\\x6a\\x7d\\x40\\x73\\x2e\\x1f\\x65\\xfb\\x28\\x62\\x33\\x47\\x40\\x08\\x5e\\x62\\x78\\x82\\x58\\x1b\\x73\\x06\\x59\\xfb\\x4f\\x05\\x9d\\x06\\xf7\\x15\\xb8\"\n\"\\xa8\\xa6\\xeb\\x1b\\xf7\\xe4\\x06\\xbd\\xa1\\x75\\x5a\\x78\\x8a\\x80\\x83\\x65\\x1f\\x8a\\x88\\x8a\\x85\\x8a\\x83\\x08\\x9d\\x06\\xbf\\xf7\\x4f\\x05\\x56\\x06\"\n\"\\x69\\x7d\\x94\\xa0\\x92\\x8c\\x93\\x8e\\x94\\x1f\\xf7\\x13\\xf8\\x6f\\x05\\xd1\\x9d\\x9e\\x99\\xd3\\x1b\\xfb\\x50\\x79\\x15\\xfb\\x32\\xfc\\xe2\\x05\\xfb\\x98\"\n\"\\x06\\xe6\\xd6\\xc9\\xf7\\x12\\xb5\\xf7\\x52\\x9e\\xe6\\x99\\xcd\\x95\\xb5\\x08\\x0e\\x5a\\x5e\\x0a\\x0e\\x5a\\x5e\\x0a\\xf7\\x25\\xf9\\x76\\x53\\x1d\\xf7\\x94\"\n\"\\xf8\\x57\\xf7\\xfa\\x15\\x7f\\x06\\x2f\\xf3\\x4c\\xf4\\xbe\\x1a\\x9d\\x99\\x93\\xa9\\x1e\\x9c\\x24\\x0a\\xfb\\x55\\x06\\x86\\x79\\xb4\\x87\\x9d\\x78\\xc9\\x27\"\n\"\\x19\\xb1\\x4d\\x9a\\x75\\xb3\\x54\\xfb\\xb9\\xfb\\xaf\\x18\\x58\\x5b\\x71\\x7a\\x5c\\x7b\\x86\\x79\\x18\\xf7\\x7c\\x06\\x8f\\x9d\\x05\\x70\\x8e\\x84\\x90\\x99\"\n\"\\x1a\\x93\\x8f\\x90\\x98\\x97\\x1e\\x9b\\x9a\\xf7\\x8b\\xf7\\x89\\x05\\x9d\\x06\\x57\\xfb\\x70\\x7c\\x46\\x79\\x7b\\x4d\\x89\\x19\\x87\\x79\\x05\\xf7\\x97\\x06\"\n\"\\x8f\\x9d\\x69\\x8c\\x80\\x8d\\x81\\x92\\x19\\x7f\\x93\\x85\\x97\\x9c\\x1a\\x95\\x8c\\x93\\x8f\\x9c\\x1e\\xbf\\xf7\\x75\\x05\\x9e\\x06\\xf7\\x06\\xfb\\x84\\x05\"\n\"\\x99\\x6e\\x8b\\x8b\\x83\\x1a\\x7a\\x78\\x7e\\x6e\\x1e\\x87\\x79\\x05\\xf7\\x7b\\x06\\x90\\x9d\\x69\\x8a\\x6c\\xa1\\x76\\xb4\\x19\\xfb\\x28\\xf7\\xb8\\xd9\\xc9\"\n\"\\xa9\\xa4\\xd2\\xc9\\x19\\xf7\\x05\\xed\\xaa\\xa0\\xb6\\x8f\\x90\\x9d\\x18\\xfb\\x56\\x22\\x1d\\x9d\\x06\\xa1\\x96\\x87\\x81\\x78\\x74\\x73\\x2b\\x3c\\x1f\\x73\"\n\"\\x77\\x69\\x6e\\x6d\\x71\\x32\\x40\\x18\\x7b\\x06\\xb9\\xf7\\x5b\\x05\\xd4\\x9c\\x9c\\x99\\xd5\\x1b\\x8f\\x9d\\x05\\xfb\\xa4\\x25\\x1d\\xa6\\x93\\x8a\\x87\\x96\"\n\"\\x1f\\x9c\\x85\\x95\\x7c\\x77\\x1a\\x81\\x89\\x7d\\x89\\x80\\x1e\\x0e\\xfb\\x39\\xf7\\x28\\xf8\\x74\\x15\\xec\\xa7\\xbd\\xbb\\xd2\\x1b\\xcc\\xb7\\x5d\\x48\\x37\"\n\"\\x42\\x52\\x20\\x81\\x84\\x8b\\x8d\\x7b\\x1f\\x7f\\x66\\x05\\x8c\\x97\\x90\\x8b\\x94\\x1b\\xe8\\xc0\\x5d\\x3d\\x29\\x43\\x44\\x29\\x3f\\x58\\xb0\\xdb\\x68\\x1f\"\n\"\\x73\\x82\\x9e\\x5a\\x97\\x76\\xa2\\x71\\x19\\x5f\\xb5\\xc0\\x75\\xd0\\x1b\\xf7\\x1f\\xf2\\xe4\\xf7\\x0c\\x89\\x1d\\x0e\\xc9\\x4e\\x1d\\x0e\\xc9\\x4e\\x1d\\xf8\"\n\"\\x0e\\xf9\\x53\\xd1\\x1d\\x8e\\x8d\\x91\\x8e\\x91\\x1e\\x95\\x9d\\x8d\\x90\\x94\\x1a\\xa0\\x7b\\x99\\x73\\x6b\\x75\\x74\\x69\\x58\\xbf\\x6a\\xda\\xc7\\xbd\\x9d\"\n\"\\xac\\xaa\\x1e\\x9a\\x9c\\x95\\xa0\\x9b\\x1a\\xa1\\x7a\\x99\\x72\\x6f\\x79\\x78\\x6c\\x1e\\x0e\\x8f\\x5a\\x0a\\x0e\\x9c\\xf8\\xbf\\xf9\\x06\\x15\\xfb\\x20\\xfc\"\n\"\\x9d\\x79\\x46\\x78\\x7b\\x4e\\x89\\x20\\x1d\\xf7\\x96\\x06\\x90\\xb5\\x0a\\xf7\\x0e\\xf8\\x5e\\x05\\xd3\\x9e\\x9d\\x99\\xd5\\x21\\x1d\\xfc\\x85\\x25\\x1d\\x94\"\n\"\\x06\\xb9\\xa5\\x7c\\x70\\x68\\x5c\\xfb\\x3f\\x5e\\xfb\\x13\\x1f\\xfb\\x14\\x5d\\x5d\\x42\\x68\\x1b\\x82\\x84\\x8e\\x93\\x7e\\x1f\\x99\\x74\\x83\\x8e\\x7b\\x1b\"\n\"\\x6b\\x76\\x78\\x6e\\x67\\xa7\\x75\\xb9\\xd5\\xc0\\xbd\\xf7\\x0d\\xc3\\x1f\\xba\\xf0\\xac\\xf4\\xcd\\xf7\\x97\\x08\\x0e\\xf7\\x41\\xae\\x0a\\x89\\x93\\x89\\x96\"\n\"\\x86\\x19\\x9a\\x84\\x95\\x82\\x83\\x1a\\x8a\\x82\\x05\\x88\\x84\\x8a\\x85\\x8a\\x1a\\xfb\\x15\\xfc\\x77\\x79\\xd3\\x1d\\x69\\x7e\\x8d\\x90\\x81\\x1f\\x7e\\x91\"\n\"\\x83\\x99\\x9b\\x1a\\x96\\x8d\\x95\\x8f\\x9d\\x1e\\xf7\\x10\\xf8\\x62\\xc8\\xfc\\xc6\\x05\\x9d\\x06\\xf7\\xf3\\xf8\\xa0\\xfb\\x04\\xfc\\x37\\x78\\x46\\x77\\x7a\"\n\"\\x4a\\x8a\\x20\\x1d\\xf7\\x9f\\x24\\x0a\\x53\\x8c\\x79\\x95\\xab\\x1a\\x95\\x8d\\x9a\\x8f\\x99\\x4b\\x1d\\xd2\\x9d\\x9f\\x9b\\xcf\\x21\\x1d\\xfb\\x39\\x06\\x0e\"\n\"\\xc9\\x59\\x0a\\xc9\\xf8\\x6a\\xf9\\x33\\x15\\x37\\x31\\x5f\\x42\\x46\\x1f\\x37\\x31\\x55\\xfb\\x11\\x21\\x1a\\xfb\\x2e\\xe0\\x32\\xf7\\x25\\xdb\\xd5\\xab\\xc6\"\n\"\\xc7\\x1e\\xec\\xec\\xcb\\xf7\\x1f\\xf7\\x08\\x1a\\xf7\\x23\\x31\\xea\\xfb\\x1a\\x1e\\x85\\x65\\x15\\xdb\\xba\\x50\\x28\\x35\\x68\\xfb\\x0d\\x56\\x26\\x1f\\x33\"\n\"\\x5c\\x46\\x55\\x49\\x1b\\x3a\\x5b\\xc8\\xf2\\xf3\\xc5\\xf7\\x37\\xd1\\xea\\x1f\\xbe\\xb1\\xc1\\xaa\\xbf\\x1b\\x0e\\xc9\\xf7\\xdd\\xf9\\x06\\x15\\xf7\\xa7\\x06\"\n\"\\xfb\\x20\\xfc\\x9d\\x7a\\x46\\xf0\\x1d\\x91\\x9d\\x05\\x54\\x8c\\x7a\\x96\\xaa\\x1a\\x96\\x8d\\x95\\x8f\\x9d\\x1e\\xf7\\x0f\\xf8\\x5e\\x05\\xd3\\x9e\\x9d\\x99\"\n\"\\xd4\\x21\\x1d\\xfd\\x17\\x76\\x0a\\x0e\\x5a\\xf7\\xa1\\xf7\\xd8\\x15\\x81\\xb1\\x9c\\x88\\xaa\\x1b\\xf7\\x25\\xef\\xdc\\xf7\\x0a\\xc3\\x6b\\xbb\\x56\\xa4\\x1f\"\n\"\\x9d\\x66\\x6b\\x90\\x42\\x1b\\xfb\\x5f\\x22\\x1d\\xa9\\x94\\x8a\\x87\\x96\\x1f\\x9b\\x86\\x95\\x7c\\x79\\x1a\\x80\\x89\\x80\\x87\\x7b\\x1e\\xfb\\x0f\\xfc\\x5e\"\n\"\\x7a\\x45\\x77\\x7b\\x4b\\x8a\\x20\\x1d\\xf7\\xa2\\x29\\x0a\\x6a\\x82\\x8c\\x8f\\x7f\\x1f\\x7b\\x91\\x81\\x99\\x9e\\x1a\\x95\\x8d\\x9a\\x8f\\x98\\xe4\\x1d\\xc9\"\n\"\\xb5\\x60\\x4a\\x2a\\x44\\x42\\x2d\\x77\\x7e\\x8d\\x92\\x72\\x1f\\x0e\\x92\\xf9\\x30\\xf8\\x6c\\x15\\xaf\\xf7\\x5d\\x05\\x75\\x63\\x1d\\x5d\\x64\\x91\\x69\\x1b\"\n\"\\xfb\\x6c\\xfb\\x54\\xfb\\x5d\\xfb\\x74\\xfb\\x31\\xf7\\x03\\xfb\\x03\\xf7\\x31\\xf3\\xdb\\xb7\\xf6\\xe6\\x1f\\x79\\x99\\x05\\x31\\x30\\x52\\x6e\\x37\\x1b\\xfb\"\n\"\\x06\\x4a\\xd9\\xf7\\x1a\\xf7\\x0b\\xba\\xad\\x0a\\xce\\x1b\\xe9\\xbf\\x54\\xfb\\x00\\x96\\x1f\\x0e\\x23\\xf8\\x49\\xf9\\x06\\x15\\xe5\\x06\\xc5\\xa7\\x75\\x5c\"\n\"\\x75\\x89\\x77\\x86\\x70\\xc6\\x1d\\xe9\\xc8\\xba\\xed\\x88\\x08\\xcb\\x06\\xfb\\x20\\xfc\\x9d\\x05\\x42\\x78\\x79\\x7d\\x41\\x1b\\x86\\x79\\x05\\xf7\\xb7\\x06\"\n\"\\x8f\\x9d\\x05\\x6f\\x82\\x8b\\x8c\\x83\\x1f\\x6d\\x8f\\x7c\\x98\\xa3\\x1a\\x96\\x8d\\x97\\x8f\\x9c\\x1e\\x0e\\x98\\xf7\\x23\\xf9\\x2a\\x61\\x0a\\xf7\\x24\\xf9\"\n\"\\x26\\x6c\\x1d\\x5a\\xd2\\x1d\\x71\\x76\\x7b\\x67\\x1e\\x7a\\x06\\x85\\x79\\x05\\xf7\\x93\\x29\\x0a\\x7d\\x06\\x5d\\x8d\\x7b\\x9e\\x74\\xdf\\x4c\\xf7\\x7c\\x18\"\n\"\\xf7\\x33\\xf7\\x53\\xca\\xd6\\xab\\x9f\\xc9\\x8e\\x19\\x90\\x9d\\x05\\xfb\\x5d\\x06\\x85\\x79\\x05\\x96\\x06\\xa3\\x94\\x85\\x7b\\x7f\\x85\\x80\\x7a\\x76\\x1f\"\n\"\\xfb\\x28\\xfb\\x46\\x60\\xf7\\x39\\x05\\x89\\x95\\x87\\xa4\\x93\\x1a\\xa2\\x9f\\x98\\xae\\x1e\\x9a\\x06\\x91\\x2e\\x1d\\x85\\x79\\x05\\x9d\\x06\\xbd\\x8a\\x9d\"\n\"\\x7a\\xa1\\x48\\xd0\\xfb\\x8d\\x18\\xfb\\x38\\xfb\\x5a\\x05\\x56\\x61\\x4c\\x62\\x67\\x1b\\x85\\x55\\x0a\\x76\\x06\\x6c\\x7b\\x93\\x9a\\x93\\x8f\\x92\\x99\\x9d\"\n\"\\x1f\\x0e\\xc9\\xf8\\xa3\\x23\\x0a\\x87\\x67\\x1d\\x78\\x1a\\x80\\x89\\x82\\x87\\x7a\\x1e\\xfb\\x21\\xfc\\xa3\\x05\\xfb\\xa7\\x06\\x96\\x1d\\xfc\\x60\\x7a\\x48\"\n\"\\x77\\x49\\x1d\\xf8\\x90\\x06\\xb5\\x94\\x8a\\x82\\x9a\\x1f\\x9d\\x81\\x94\\x78\\x6e\\x1a\\x70\\x87\\x72\\x82\\x67\\x1e\\x9d\\x06\\xc0\\xf7\\x4f\\x05\\x48\\x06\"\n\"\\x77\\x80\\x96\\x9e\\x93\\x8d\\x95\\x90\\x9e\\x1f\\xf7\\x0f\\xf8\\x5f\\xf1\\x1d\\x0e\\xa8\\xf8\\x42\\xf4\\x15\\x79\\x47\\x78\\x79\\x4c\\x8a\\x86\\x79\\x18\\xf7\"\n\"\\x97\\x06\\x90\\x9d\\x70\\xf4\\x1d\\x9d\\x1a\\x96\\x8d\\x98\\x8f\\x9a\\x77\\x1d\\x0e\\xf8\\x13\\xf7\\x6b\\xaf\\x15\\x8c\\x1d\\xf9\\xfc\\xb3\\x0a\\x9c\\x1a\\x96\"\n\"\\x8d\\x99\\x8f\\x99\\x1e\\xf7\\x0e\\xf8\\x5e\\x05\\xd4\\x9e\\x9d\\x99\\xd5\\x34\\x1d\\xc1\\x8a\\x9d\\x81\\x6b\\x1a\\x80\\x89\\x7f\\x87\\x7c\\x1e\\xfb\\x21\\xfc\"\n\"\\xa3\\x05\\xfb\\x67\\x06\\xf7\\x20\\xf8\\x9d\\x05\\xd4\\x9e\\x9d\\x8a\\x0a\\x6b\\x1a\\x7f\\x89\\x80\\x87\\x7c\\x1e\\xfb\\x21\\xfc\\xa3\\x05\\x0e\\xf8\\x13\\xfa\"\n\"\\x08\\xfb\\x30\\x15\\xc0\\xf7\\x4f\\x05\\x56\\x06\\x68\\x81\\x91\\xa1\\x92\\x8d\\x95\\x8e\\x97\\x1f\\xf7\\x11\\xf8\\x69\\x05\\xa0\\x0a\\x6b\\x1a\\x7e\\x8a\\x88\"\n\"\\x85\\x75\\x1e\\xfb\\x20\\xfc\\xa3\\x05\\xfb\\x67\\x06\\xf7\\x20\\xf8\\x9d\\x05\\xd4\\x9e\\x9d\\x8a\\x0a\\x6b\\x1a\\x7f\\x89\\x80\\x87\\x7c\\x1e\\xfb\\x21\\xfc\"\n\"\\xa3\\x05\\xfb\\x67\\x06\\x8c\\x1d\\xf9\\x98\\x06\\xbb\\xa3\\x75\\x60\\x70\\x87\\x6d\\x82\\x69\\x1f\\x0e\\x9b\\xf8\\x9a\\x23\\x0a\\xfc\\x14\\x06\\x61\\xfb\\x36\"\n\"\\x05\\x9b\\x06\\xe1\\xa9\\xbb\\xb3\\xd6\\x1b\\xcb\\x06\\xfb\\x20\\xfc\\x9e\\x7a\\x47\\xf0\\x1d\\xdf\\xc9\\x98\\xa8\\xbc\\x1f\\xca\\xb1\\xaf\\xc7\\xc5\\x0a\\x76\"\n\"\\x1e\\xba\\xf7\\x45\\x05\\xd3\\x9e\\x9c\\x99\\xd5\\x1b\\xfb\\x3b\\xfb\\xc0\\x15\\x8c\\x98\\x93\\x8c\\x97\\x1b\\xef\\xbe\\x60\\x35\\x20\\x38\\x42\\xfb\\x0c\\x77\"\n\"\\x7e\\x8c\\x90\\x6f\\x1f\\x0e\\xf7\\x68\\xf7\\xd0\\x70\\x0a\\x93\\x8c\\x96\\xa8\\x0a\\xf8\\xf4\\x72\\x15\\x54\\x8c\\x7a\\x96\\xaa\\x1a\\x95\\x8d\\x98\\x8f\\x9b\"\n\"\\x1e\\xf7\\x0f\\xf8\\x5d\\x05\\xd4\\x9d\\x9e\\x99\\xd4\\x21\\x1d\\xfb\\xa4\\x06\\x86\\x67\\x1d\\x7a\\x1a\\x80\\x89\\x7b\\x87\\x7f\\x55\\x1d\\x0e\\x45\\xf7\\xcd\"\n\"\\x70\\x0a\\x92\\x8c\\x97\\xa8\\x0a\\x0e\\x86\\xf7\\x3d\\xf8\\x6d\\x15\\x9d\\x06\\xa3\\xc0\\x99\\xa2\\xa4\\xa4\\x08\\xb2\\xb2\\xbb\\xa0\\xc0\\x1b\\xe7\\xc0\\x4d\"\n\"\\xfb\\x00\\x67\\x87\\x71\\x82\\x66\\x1f\\xfb\\x1b\\x06\\x50\\x79\\x96\\xb2\\x97\\x8d\\x95\\x90\\xa2\\x1f\\x79\\x06\\x4f\\xfb\\x7e\\x05\\x9b\\x06\\x99\\xd5\\xb9\"\n\"\\xab\\xe5\\x8a\\x08\\xf6\\x06\\x66\\x23\\x72\\x5e\\x5a\\x54\\x08\\x52\\x59\\x4f\\x6d\\x4d\\x1b\\x3b\\x55\\xb8\\xea\\x67\\x1f\\x72\\x81\\x9f\\x50\\x99\\x72\\xa5\"\n\"\\x6d\\x19\\x60\\xb2\\xbe\\x74\\xc6\\x1b\\xf7\\x5d\\xf7\\x50\\xf7\\x6a\\xf7\\x79\\xf7\\x23\\x35\\xe9\\xfb\\x15\\x5f\\x6d\\x84\\x76\\x50\\x1f\\x87\\x7f\\x7f\\x88\"\n\"\\x83\\x1b\\x7e\\x82\\x96\\x99\\x1f\\x95\\x7b\\x07\\x0e\\xf8\\x08\\xf8\\x39\\xf7\\xdf\\x15\\x80\\x63\\x87\\x6c\\x6a\\x1a\\xfb\\x26\\xe2\\x30\\xf7\\x1e\\xf2\\xdf\"\n\"\\xb7\\xea\\xd6\\x1e\\xd5\\xe8\\xb7\\xf7\\x04\\xea\\x1a\\xf7\\x1f\\x32\\xec\\xfb\\x15\\xfb\\x2c\\xfb\\x24\\xfb\\x0b\\xfb\\x47\\x4a\\x1e\\xfb\\x27\\x91\\x1d\\x79\"\n\"\\x4e\\x8a\\xe3\\x1d\\x8b\\x80\\x8f\\x19\\x7b\\x91\\x81\\x99\\x9c\\x1a\\x97\\x8c\\x94\\x90\\x9e\\x1e\\xc9\\xf7\\x7b\\x05\\xf8\\x8f\\xf7\\xbd\\x15\\xda\\xba\\x50\"\n\"\\x2a\\x4b\\x7b\\x43\\x6a\\x37\\x1f\\xfb\\x2a\\x51\\x3e\\x3d\\x31\\x1b\\x6a\\x6b\\x9a\\xa3\\x75\\x1f\\x70\\xa9\\x80\\xb0\\xc5\\x1a\\xdb\\xaf\\xf7\\x0c\\xbf\\xeb\"\n\"\\x1e\\xed\\xc1\\xc6\\xb9\\xd3\\x1b\\x0e\\x88\\xf8\\x5a\\xf7\\xbc\\x15\\x58\\xfb\\x53\\x4b\\x0a\\x8f\\xb5\\x0a\\xf7\\x0f\\xf8\\x5e\\x05\\xd3\\x9d\\x9d\\x99\\xd5\"\n\"\\x21\\x1d\\xfb\\xad\\x06\\x34\\x5c\\x80\\x6d\\x5c\\x1f\\x51\\x65\\x69\\x4c\\x46\\x1a\\x5e\\x9a\\x66\\xa6\\x72\\x1e\\xa3\\x76\\xa3\\x82\\xc0\\x84\\x55\\x7e\\x80\"\n\"\\x84\\x4d\\x48\\x27\\x21\\x18\\x4b\\x49\\x67\\x73\\x5b\\x85\\x86\\x79\\x18\\xf7\\x34\\x06\\xf7\\x79\\xf7\\x8a\\xb1\\xb6\\x90\\x8e\\xb0\\x8f\\x19\\xbe\\xb4\\x15\"\n\"\\x87\\x70\\x7e\\x8a\\x7b\\x1b\\x3b\\x60\\xb7\\xdb\\xf4\\xd1\\xcb\\xf7\\x05\\x9e\\x9a\\x8a\\x89\\xb1\\x1f\\x0e\\xfb\\x70\\xf7\\x48\\x23\\x0a\\x86\\x79\\x05\\xc1\"\n\"\\x8a\\x9c\\x81\\x6c\\x1a\\x80\\x89\\x7f\\x87\\x7c\\x1e\\xfb\\x10\\xfc\\x61\\x79\\x48\\x79\\x7a\\x60\\x1d\\x90\\x9d\\x05\\x56\\x8c\\x7a\\x95\\xab\\x1a\\x95\\x8d\"\n\"\\x99\\x8f\\x98\\x1e\\xf7\\x22\\xf8\\xa4\\x05\\xf7\\x8a\\x06\\xae\\xf7\\x17\\x05\\x7a\\x06\\x78\\x44\\x71\\x75\\x47\\x89\\x08\\x0e\\xf7\\x1d\\xf8\\x6e\\xf9\\x06\"\n\"\\x15\\xf7\\x10\\x06\\xbf\\xa6\\x73\\x5f\\x75\\x89\\x75\\x86\\x71\\xc6\\x1d\\xe8\\xc9\\xbb\\xec\\x88\\x08\\xb0\\x06\\xfb\\x20\\xfc\\x9d\\x05\\x42\\x79\\x78\\x7d\"\n\"\\x41\\x1b\\x86\\x79\\x05\\xf7\\x4d\\x06\\xe4\\xf7\\xdf\\x05\\x91\\xc1\\xad\\x8d\\xa8\\x1b\\xd2\\xaf\\x64\\x3e\\xfb\\x03\\x4a\\x23\\x46\\x7b\\x7f\\x93\\x97\\x8d\"\n\"\\x8b\\x8d\\x8c\\x8d\\x1f\\x94\\x9d\\x8c\\x8f\\x95\\x1a\\xa2\\x79\\x9b\\x70\\x6b\\x76\\x73\\x67\\x5e\\xad\\x74\\xce\\xf7\\x21\\xf7\\x03\\xf5\\xf7\\x1b\\xf0\\x48\"\n\"\\xca\\x20\\x63\\x5d\\x87\\x82\\x51\\x1e\\x0e\\x30\\xf7\\xed\\x6c\\x0a\\xf7\\x3a\\xf8\\xfc\\x15\\xaf\\x06\\xf7\\x40\\xf7\\x00\\x05\\x97\\x92\\x90\\x93\\x98\\x1a\"\n\"\\x9f\\x7b\\x9b\\x76\\x81\\xf7\\x05\\x1d\\x94\\xf9\\x2c\\xf9\\x33\\x15\\x75\\x7c\\x83\\x86\\x7a\\x1b\\x81\\x82\\x8d\\x91\\x7a\\x1f\\x9a\\x62\\x74\\x8f\\x66\\x1b\"\n\"\\xfb\\x6b\\xfb\\x4c\\xfb\\x49\\xfb\\x68\\xfb\\x40\\xf2\\xfb\\x08\\xf7\\x2b\\xce\\xc6\\xa0\\xb5\\xbe\\x1f\\xa8\\xa4\\x9b\\x9f\\xaa\\xbb\\x79\\x98\\x18\\x39\\x4d\"\n\"\\x4b\\x66\\x3a\\x1b\\xfb\\x02\\x4c\\xde\\xf7\\x26\\xa1\\x8c\\x99\\x90\\xab\\x1f\\xf7\\x3b\\x06\\xb5\\x93\\x8a\\x84\\x97\\x1f\\x99\\x83\\x92\\x7c\\x77\\x1a\\x7a\"\n\"\\x89\\x7d\\x83\\x6c\\x1e\\x9b\\x06\\xcc\\xf7\\x89\\x05\\x7b\\x06\\x76\\x42\\x6c\\x72\\x48\\x8d\\x08\\xfb\\x45\\x06\\x9f\\xc9\\x94\\xa1\\x9e\\xa9\\x08\\xe6\\xc3\"\n\"\\xe0\\xc2\\xe0\\x1b\\xdd\\xc2\\x57\\x3d\\x83\\x8b\\x81\\x8a\\x80\\x1f\\x9c\\x06\\xb5\\xf7\\x59\\x05\\x0e\\xf8\\x77\\xf8\\x6f\\x15\\xb1\\xf7\\x5d\\x05\\x74\\x06\"\n\"\\x76\\x7d\\x82\\x86\\x74\\x1b\\x7e\\x81\\x8e\\x94\\x74\\x1f\\x94\\x75\\x6a\\x90\\x6b\\x1b\\x23\\x41\\x46\\x29\\x53\\x9a\\x6d\\xca\\x4a\\x1f\\x93\\x83\\x99\\x7b\"\n\"\\x9d\\x78\\xa4\\x70\\x95\\x80\\x8f\\x87\\x08\\xbc\\x58\\x98\\x71\\x5f\\x1a\\x3e\\x54\\x52\\x41\\x35\\x4b\\xd4\\xec\\x92\\x8b\\x90\\x8d\\x94\\x1e\\x76\\x8d\\x6b\"\n\"\\xfb\\x76\\x05\\x9d\\x06\\xa2\\x92\\x96\\x95\\xa0\\x1b\\x96\\x99\\x87\\x82\\xa6\\x1f\\x7a\\xba\\xa6\\x85\\xab\\x1b\\xf7\\x08\\xe2\\xe1\\xf7\\x07\\xce\\x74\\xb2\"\n\"\\x2e\\xe8\\x1f\\x2e\\xe8\\x82\\x99\\xbe\\x1a\\xca\\xb5\\xb2\\xd0\\xb1\\xaa\\x7e\\x73\\xa0\\x1e\\xa1\\x71\\x94\\x69\\x8d\\x48\\x08\\x0e\\xfb\\xdb\\x42\\x0a\\xfb\"\n\"\\xdb\\xf7\\x8e\\x9d\\x15\\x35\\x0a\\xf7\\x0f\\xf8\\x5d\\x05\\xd4\\x9e\\x9d\\x99\\xd4\\x34\\x1d\\xc0\\x9e\\x80\\x6d\\x7e\\x89\\x7e\\x87\\x7d\\x1f\\xfb\\x0e\\xfc\"\n\"\\x5e\\x4b\\x0a\\x6d\\xf9\\xd2\\x98\\x1d\\xf7\\x42\\xb9\\x1d\\xfb\\x6c\\xf7\\x7f\\xf9\\x18\\x15\\xa1\\x9c\\x8a\\x89\\x93\\x1f\\xa0\\x86\\x97\\x7d\\x78\\x1a\\x7d\"\n\"\\x89\\x7f\\x87\\x7d\\x1e\\xfb\\x0b\\xfc\\x52\\x05\\x53\\x7c\\x6e\\x68\\x6c\\x1b\\x79\\x7f\\x95\\x99\\x94\\x8d\\x8f\\x96\\x96\\x1f\\x95\\x96\\x8f\\x93\\x97\\x1a\"\n\"\\xa5\\x76\\x9f\\x71\\x68\\x6f\\x6c\\x64\\x57\\xb8\\x63\\xc8\\xb7\\xbc\\xa2\\xb1\\xb0\\x1e\\xa8\\xa9\\xa4\\xbc\\x9a\\xc7\\xee\\xf8\\x04\\x18\\x9b\\xcb\\xa0\\xa0\"\n\"\\xbc\\x8d\\x90\\x9d\\x18\\xfb\\x95\\x06\\x0e\\xf7\\x9f\\xf9\\x89\\x23\\x0a\\xfc\\x85\\x25\\x1d\\x94\\x06\\xba\\xa4\\x7d\\x70\\x5f\\x41\\xfb\\x8e\\x61\\x26\\x1f\"\n\"\\x2a\\x61\\x6c\\x60\\x6c\\x1b\\x83\\x84\\x8e\\x93\\x7e\\x1f\\x99\\x74\\x83\\x8e\\x7b\\x1b\\x6b\\x76\\x78\\x6e\\x67\\xa7\\x75\\xb9\\xc6\\xbe\\xb0\\xd3\\xb4\\x1f\"\n\"\\xc8\\xf6\\xb5\\xf7\\x10\\xd6\\xf7\\xbc\\x08\\xf7\\x3f\\x06\\xfb\\x1f\\xfc\\x9d\\xbd\\x0a\\xee\\xc3\\x97\\xaa\\xc0\\x1f\\xca\\xb1\\xaf\\xc7\\xce\\x1a\\xf7\\x02\"\n\"\\x33\\xce\\xfb\\x23\\x7b\\x81\\x8a\\x89\\x75\\x1e\\xbb\\xf7\\x45\\x05\\xd3\\x9e\\x9c\\x98\\xd5\\x1b\\xfb\\x3c\\xfb\\xbf\\x15\\x8d\\x98\\x91\\x8b\\x9c\\x1b\\xed\"\n\"\\xbe\\x5f\\x36\\x20\\x38\\x42\\xfb\\x0e\\x78\\x7d\\x8d\\x8f\\x71\\x1f\\x0e\\xf7\\x99\\xf8\\x99\\xf8\\x03\\x15\\xfb\\xa0\\x91\\x1d\\x7a\\x4e\\x89\\xe3\\x1d\\x8c\"\n\"\\x80\\x8e\\x19\\x7b\\x91\\x81\\x99\\x9d\\x1a\\x97\\x8d\\x94\\x8f\\x9d\\x1e\\xc9\\xf7\\x7b\\x05\\xf7\\xa3\\x06\\x4d\\xfb\\x76\\xbd\\x0a\\xef\\xc1\\x96\\xab\\xc1\"\n\"\\x1f\\xc8\\xb0\\xb0\\xc6\\xc9\\x1a\\xd9\\x57\\xc4\\x30\\xa0\\x1e\\x94\\x65\\x81\\x8c\\x31\\x1b\\xbe\\xf7\\x52\\x05\\xd4\\x9e\\x9d\\x99\\xd4\\x21\\x1d\\xfb\\xa3\"\n\"\\x06\\x84\\x79\\x05\\xa7\\x93\\x8a\\x87\\x96\\x1f\\x9c\\x86\\x95\\x7c\\x79\\x1a\\x7f\\x8a\\x84\\x86\\x78\\x1e\\xad\\xfb\\x7b\\x15\\xcf\\x9a\\x89\\x81\\xaa\\x1f\"\n\"\\xb8\\x7d\\xa7\\x60\\x55\\x1a\\x28\\x36\\x43\\xfb\\x09\\x77\\x7e\\x8c\\x90\\x6f\\x1e\\x0e\\xf7\\x1f\\xf8\\x56\\xf9\\x06\\x15\\xf7\\x06\\x06\\xd9\\xa6\\x79\\x55\"\n\"\\x7e\\x8a\\x82\\x88\\x77\\x1f\\x9a\\x06\\xb3\\xf7\\x2a\\x05\\xfc\\xbe\\x06\\x63\\xfb\\x2a\\x05\\x9a\\x06\\x9a\\xd3\\xc2\\xb4\\xde\\x8c\\x08\\xc7\\x06\\xfb\\x20\"\n\"\\xfc\\x9d\\x7a\\x47\\x78\\x79\\x4d\\x8a\\x20\\x1d\\xf7\\x96\\x06\\x8f\\x9d\\x05\\x56\\x8c\\x7a\\x96\\xab\\x1a\\x95\\x8d\\x95\\x90\\x9d\\x1e\\xc9\\xf7\\x77\\x05\"\n\"\\x8e\\xae\\xb1\\x8c\\xaa\\x1b\\xd9\\xac\\x73\\x50\\x7c\\x8a\\x83\\x84\\x71\\x1f\\x71\\x2d\\x7a\\x47\\x78\\x79\\xc4\\x0a\\x55\\x8c\\x7a\\x96\\xab\\x1a\\x96\\x8d\"\n\"\\x9c\\x8e\\x95\\x1e\\xa0\\xd5\\x05\\x95\\xb0\\x8f\\xa1\\x9f\\x1a\\xdf\\x50\\xae\\xfb\\x22\\x6d\\x75\\x8a\\x88\\x5a\\x1e\\x0e\\x8f\\x5a\\x0a\\xf7\\x85\\xf8\\xfc\"\n\"\\x15\\xae\\x06\\xf7\\x40\\xf7\\x00\\x05\\x97\\x92\\xce\\x1d\\x98\\xf8\\xe3\\xf9\\xb3\\xd1\\x1d\\x8f\\x8d\\x90\\x8e\\x91\\x1e\\x95\\x9d\\x8d\\x90\\x94\\x1a\\xa0\"\n\"\\x7b\\x99\\x73\\x6b\\x75\\x74\\x6a\\x57\\xbf\\x6a\\xda\\xc7\\xbd\\x9d\\xac\\xaa\\x1e\\x9a\\x9c\\x95\\xa0\\x9b\\x1a\\xa1\\x7a\\x99\\x71\\x70\\x79\\x78\\x6c\\x1e\"\n\"\\xfc\\x4c\\xfb\\x24\\x61\\x0a\\xf8\\x4e\\xf2\\x15\\x62\\x6f\\x72\\x74\\x79\\x1b\\x83\\x86\\x90\\x92\\x90\\x8c\\x91\\x90\\x9d\\x1f\\x90\\x9a\\xe6\\xf7\\xea\\x3f\"\n\"\\x81\\x7d\\x56\\x05\\xb7\\x81\\x71\\xa3\\x65\\x1b\\xfb\\x0a\\xfb\\x29\\xfb\\x52\\xfb\\x29\\x46\\xaf\\x5e\\xc0\\xa8\\xb1\\x9a\\xa2\\xab\\x1f\\xa8\\xa0\\x9e\\x9f\"\n\"\\xb0\\xbe\\x87\\x7b\\x8b\\x8b\\x86\\x79\\x08\\x82\\x68\\x8a\\x88\\x7f\\x1a\\x6f\\x9b\\x79\\xa6\\xb3\\xb3\\xaa\\xd1\\xbc\\x1e\\xfb\\x31\\xf7\\xd6\\x15\\xac\\xa0\"\n\"\\x73\\x64\\xfb\\x1c\\x21\\xfb\\x39\\x34\\x69\\x78\\xa4\\xb9\\xc6\\xa7\\xd7\\xbf\\xd6\\x1f\\xc2\\xb0\\xb0\\xa7\\xb1\\x1b\\x0e\\xfb\\x31\\xf8\\x9c\\xf9\\x35\\x15\"\n\"\\x75\\x86\\x81\\x84\\x70\\x1b\\x86\\x80\\x8b\\x8c\\x81\\x1f\\x8c\\x7e\\x81\\x8b\\x82\\x1b\\x36\\x47\\x6a\\x42\\x50\\x1f\\x41\\x33\\x47\\xfb\\x4d\\xfb\\x03\\x1a\"\n\"\\x26\\xbf\\x49\\xdc\\xbc\\xbf\\xa3\\xb7\\xbe\\x1e\\xcb\\xc3\\xb1\\xdd\\xdd\\x1a\\xec\\x51\\xcf\\x3a\\x4d\\x4e\\x66\\x46\\x55\\x1e\\xcb\\xf7\\x39\\xc4\\xc1\\xf7\"\n\"\\x08\\x8f\\xef\\x90\\xb0\\xa5\\xa4\\xde\\x08\\xfb\\x7a\\xfb\\x94\\x15\\xb4\\xa8\\x61\\x51\\x4a\\x73\\x32\\x68\\x4a\\x1f\\x52\\x6d\\x66\\x6e\\x61\\x1b\\x5e\\x6f\"\n\"\\xb2\\xca\\xe2\\xa2\\xe1\\xb0\\xc3\\x1f\\xbc\\xac\\xb1\\xa4\\xb3\\x1b\\x0e\\xfb\\x76\\xf7\\x96\\xf7\\x7a\\x15\\xd4\\x9f\\xa8\\x97\\xa3\\x9f\\x08\\xa7\\xa1\\x9b\"\n\"\\xa8\\xa6\\x1a\\xbc\\x5f\\xac\\x49\\xfb\\x28\\xfb\\x18\\xfb\\x21\\xfb\\x32\\x27\\xbf\\x55\\xeb\\xf5\\xdc\\xcc\\xe0\\xc7\\x64\\xaa\\x3f\\x1e\\xfb\\x0b\\x89\\x15\"\n\"\\xa5\\xd4\\x9b\\xa9\\xaa\\xad\\x08\\xac\\xaa\\xad\\x9d\\xac\\x1b\\xa7\\x9d\\x7a\\x70\\x71\\x7d\\x73\\x6d\\x72\\x1f\\x62\\x69\\x60\\x7a\\x32\\x79\\x08\\x82\\x6a\"\n\"\\x15\\x97\\xba\\xa0\\x8e\\xa2\\x1b\\xb8\\xa3\\x74\\x5f\\x42\\x5e\\x53\\x50\\x60\\x74\\xac\\xc7\\xa7\\x8e\\xa4\\x92\\xae\\x1f\\x0e\\xfb\\xa2\\xf7\\x09\\xf7\\xee\"\n\"\\x15\\xb3\\xb4\\xae\\x9d\\xae\\x1b\\xae\\xa4\\x72\\x68\\x5f\\x70\\x6d\\x42\\x69\\x1f\\x3f\\x67\\x7d\\x83\\x73\\x77\\x08\\x74\\x78\\x7e\\x6f\\x6b\\x1a\\x4a\\xb9\"\n\"\\x60\\xd1\\xc3\\xa9\\x9c\\xd8\\xd6\\x1e\\x7f\\x97\\x05\\x5d\\x5d\\x64\\x76\\x61\\x1b\\x5e\\x70\\xa8\\xba\\xbb\\xa9\\xae\\xcd\\xaa\\x1f\\xee\\xb8\\x8b\\x8b\\xa5\"\n\"\\xa1\\x08\\xa0\\x9d\\x96\\xa4\\xa8\\x1a\\xc0\\x61\\xaf\\x4e\\x6c\\x6b\\x81\\x79\\x72\\x1e\\x7c\\x80\\x81\\x83\\x66\\x67\\x08\\x0e\\xfb\\x2e\\xf7\\x4a\\xf9\\x0c\"\n\"\\x15\\x96\\xac\\xa6\\x90\\xa7\\x1b\\xde\\xc1\\x3f\\xfb\\x0a\\x77\\x8a\\x7d\\x87\\x73\\x1f\\xab\\x74\\x6e\\x99\\x60\\x1b\\xfb\\x18\\xfb\\x0c\\xfb\\x1a\\xfb\\x27\"\n\"\\x21\\xc5\\x49\\xe7\\xd7\\xcb\\xb1\\xd5\\xbd\\x1f\\xc0\\xd9\\xaa\\xf7\\x0a\\xf7\\x0a\\x1a\\xf7\\x3b\\x45\\xe3\\xfb\\x17\\x69\\x71\\x87\\x7f\\x60\\x1e\\xf7\\x25\"\n\"\\xfb\\x81\\x15\\xb5\\xa3\\x66\\x4b\\x48\\x75\\x3a\\x6a\\x51\\x1f\\x4a\\x65\\x61\\x6b\\x5d\\x1b\\x5c\\x73\\xaf\\xd1\\xf7\\x24\\xeb\\xf7\\x2e\\xe5\\x1f\\x0e\\xfb\"\n\"\\x6c\\xf7\\xfe\\xf3\\x6d\\x0a\\xfb\\x6c\\xf7\\x9c\\xf8\\xf3\\x7f\\x0a\\x53\\xfc\\x8b\\x6d\\x0a\\xf7\\xa2\\xf8\\x82\\xf8\\x46\\x15\\x76\\x42\\x58\\x34\\x31\\xfb\"\n\"\\x08\\x08\\x9f\\xc6\\x91\\xa9\\xb6\\x1a\\xe9\\x60\\xc8\\x48\\x4d\\x56\\x68\\x3d\\x51\\x1e\\x99\\x81\\x05\\xc1\\xb3\\xb1\\xa5\\xb2\\x1b\\xb8\\xa8\\x5e\\x45\\x53\"\n\"\\x79\\x45\\x6f\\x51\\x1f\\x4e\\x6d\\x6b\\x6d\\x69\\x1b\\x76\\x7b\\x95\\x98\\x94\\x8d\\x8d\\x9c\\x9a\\x1f\\x96\\x94\\x91\\x96\\x96\\x1a\\xa2\\x7b\\x9c\\x75\\x6d\"\n\"\\x75\\x71\\x67\\x5c\\xaf\\x69\\xbe\\xe8\\xef\\xe9\\xf7\\x61\\xf7\\x11\\x1e\\x40\\xfb\\xb4\\x05\\xcd\\x06\\x9e\\xd0\\xc6\\xf0\\xdd\\xf0\\x08\\x77\\x4a\\x86\\x72\"\n\"\\x65\\x1a\\x2a\\xb5\\x52\\xd1\\xaf\\xaf\\x98\\xa5\\xac\\x1e\\x9f\\x9a\\x97\\x98\\xad\\xb6\\x7e\\x95\\x18\\x5d\\x63\\x66\\x75\\x62\\x1b\\x5d\\x6e\\xb5\\xcd\\xf7\"\n\"\\x12\\xd9\\xf7\\x26\\xce\\x9d\\x9a\\x80\\x7e\\x82\\x87\\x85\\x7f\\x81\\x1f\\x7e\\x80\\x87\\x83\\x7d\\x1a\\x73\\x9a\\x7b\\xa2\\xa8\\xa2\\xa7\\xaf\\xb9\\x66\\xb0\"\n\"\\x5c\\x2f\\x2d\\x33\\xfb\\x6d\\xfb\\x1e\\x1e\\xd9\\xf7\\xb9\\x05\\x0e\\xfb\\xa2\\xf7\\x19\\xf7\\x6d\\x15\\xa2\\x06\\xd1\\xa9\\x76\\x59\\x44\\x5b\\x5b\\x45\\x53\"\n\"\\x66\\xa3\\xc5\\x69\\x1f\\x7b\\x83\\x05\\x3d\\xab\\xbd\\x69\\xdd\\x1b\\xef\\xd9\\xc8\\xd8\\xc3\\x67\\xad\\x3c\\x9a\\x1f\\xb8\\x8e\\xa1\\x87\\x1d\\x0e\\x74\\x1d\"\n\"\\x0e\\xf8\\x50\\xf9\\x24\\x15\\x71\\x7b\\x7a\\x6f\\x89\\x8b\\x88\\x8c\\x89\\x1f\\x8c\\x81\\x8b\\x8b\\x88\\x1a\\x77\\x6c\\x7a\\x68\\x6e\\x71\\x98\\x9a\\x8f\\x8d\"\n\"\\x90\\x8d\\x90\\x1e\\x94\\x9a\\x8d\\x91\\x94\\x1a\\x9d\\x7c\\x98\\x76\\x6e\\x78\\x76\\x6c\\x5d\\xba\\x6d\\xd3\\xdb\\xd0\\xb7\\xbe\\x9e\\x7c\\x98\\x74\\x1e\\xfb\"\n\"\\x72\\xfb\\x67\\x76\\x1d\\x0e\\xfb\\x54\\x7a\\x1d\\xa6\\x95\\xa8\\xaa\\xa8\\xba\\xa2\\xb5\\xc0\\x0a\\x93\\x88\\x87\\x8e\\x8d\\x0a\\x0e\\xfb\\x74\\xf8\\x17\\xf2\"\n\"\\x15\\x68\\x6f\\x75\\x79\\x7e\\x1b\\x82\\x84\\x91\\x94\\x91\\x8b\\x8b\\x93\\xa7\\x1f\\xe4\\xf7\\xe3\\x05\\x39\\x06\\x3b\\x87\\x80\\x87\\x67\\x66\\x6d\\x69\\x79\"\n\"\\x5f\\x6d\\xfb\\x02\\x08\\xfb\\x13\\x68\\x80\\x74\\x6e\\x1b\\x82\\x8a\\x8c\\x92\\x80\\xcb\\x1d\\xa3\\x97\\xa5\\x9e\\x1f\\x9f\\xa4\\x99\\xb2\\xa8\\xf1\\xb9\\xf7\"\n\"\\x3d\\xab\\xb7\\xd4\\x89\\x08\\xa6\\x06\\x32\\xfb\\xdf\\x05\\x85\\x74\\x8a\\x83\\x7f\\x1a\\x71\\x98\\x7c\\xa2\\xb0\\xb4\\xaa\\xd2\\xc5\\x1e\\x0e\\x75\\xf8\\x80\"\n\"\\xf8\\x46\\x15\\xfb\\x4d\\xfb\\xcb\\x6e\\xf7\\xd9\\x45\\x7b\\x79\\x88\\x46\\x83\\x19\\x86\\x78\\x05\\x8e\\x96\\x92\\x8c\\x94\\x1b\\xa0\\x98\\x83\\x7e\\x87\\x8a\"\n\"\\x85\\x89\\x83\\x1f\\x49\\xfb\\x88\\x05\\x59\\x7e\\x80\\x7c\\x76\\x1b\\x85\\x87\\x8c\\x90\\x83\\x1f\\x92\\x81\\x84\\x8d\\x81\\x1b\\x73\\x7b\\x7c\\x74\\x6f\\xa0\"\n\"\\x79\\xab\\xa9\\xa3\\x99\\xa6\\x9e\\x1f\\x97\\x9d\\x94\\xa1\\x99\\xc0\\xd3\\xf7\\x9d\\x18\\xa9\\xfc\\x22\\x05\\x9d\\x06\\xf7\\x87\\xf8\\x22\\x38\\xfb\\xc9\\x05\"\n\"\\x87\\x7a\\x88\\x7a\\x7d\\x1a\\x71\\x98\\x7b\\xa1\\xa7\\xac\\xa0\\xb2\\xad\\x1e\\xa7\\xac\\x98\\x99\\x7c\\x97\\x05\\x67\\x6e\\x76\\x7a\\x7e\\x1b\\x83\\x86\\x91\"\n\"\\x95\\x91\\x8c\\x8d\\x91\\xa4\\x1f\\xe2\\xf7\\xde\\x05\\x0e\\xfb\\x38\\xf7\\x47\\xf7\\x93\\x15\\xbe\\xf7\\x52\\x5a\\x7f\\x52\\x81\\x62\\x89\\x19\\x86\\x78\\x05\"\n\"\\x47\\x0a\\xc7\\xf7\\x73\\xf7\\x33\\x90\\x63\\xfb\\x29\\x05\\x88\\x7f\\x87\\x71\\x80\\x1a\\x73\\x9a\\x7a\\xa0\\xb0\\xb0\\xa9\\xd9\\xc8\\x1e\\x7e\\x96\\x05\\x61\"\n\"\\x6b\\x7d\\x80\\x7a\\x1b\\x81\\x84\\x91\\x93\\x90\\x8b\\x8b\\x93\\xa9\\x1f\\xe3\\xf7\\xde\\x05\\x42\\x06\\x5d\\xfb\\x43\\x05\\x0e\\xf7\\xc9\\xf8\\x4e\\x15\\xfb\"\n\"\\x14\\xfb\\x12\\xfb\\x22\\xfb\\x26\\x29\\xf7\\x02\\x1d\\xc3\\xb1\\xdd\\xdd\\x1a\\xeb\\x51\\xd0\\x3b\\x1e\\x82\\x74\\xb5\\x1d\\xd7\\xa5\\xe6\\xb3\\xca\\x1f\\xbb\"\n\"\\xa9\\xb0\\xa5\\xb2\\x1b\\x0e\\xf7\\x70\\xf8\\x51\\x15\\x59\\x7f\\x53\\x82\\x62\\x88\\x86\\x78\\x18\\x47\\x0a\\xa9\\xf7\\x01\\x95\\xb2\\x9c\\xaf\\xa4\\xb0\\x19\"\n\"\\xf1\\xd0\\xc5\\xc7\\xa9\\x1b\\x9a\\x94\\x7c\\x6f\\x80\\x8a\\x82\\x86\\x7a\\x1f\\x4f\\xfb\\x74\\x89\\x7c\\x05\\x88\\x7c\\x8b\\x8a\\x7e\\x1a\\x6c\\x96\\x7c\\xa2\"\n\"\\xae\\xad\\xa7\\xdb\\xcd\\x1e\\x7e\\x97\\x05\\x64\\x6e\\x79\\x7c\\x7a\\x1b\\x82\\x86\\x91\\x97\\x8a\\x1f\\x91\\x07\\xca\\xf7\\x7f\\x05\\x93\\xa8\\x8e\\x9f\\x9e\"\n\"\\x1a\\xb5\\x79\\xa4\\x6b\\x70\\x66\\x7a\\x71\\x6f\\x1e\\x64\\x68\\x7b\\x78\\x3e\\x2c\\x08\\x0e\\xf7\\x15\\x92\\x15\\x7e\\xa3\\x9c\\x86\\xa4\\x1b\\xf7\\x11\\xf7\"\n\"\\x16\\xf7\\x36\\xf7\\x30\\xdc\\x63\\xc1\\x50\\x5b\\x66\\x70\\x43\\x5b\\x1f\\xa5\\xed\\x67\\x84\\x67\\x86\\x49\\x81\\x19\\x86\\x78\\x05\\x8f\\x9a\\x90\\x8c\\x92\"\n\"\\x1b\\x9b\\x94\\x80\\x78\\x83\\x8a\\x84\\x86\\x7a\\x1f\\x21\\xfc\\x22\\x75\\x36\\x86\\x84\\x6a\\x8a\\x19\\x71\\x22\\x1d\\xf7\\x69\\x24\\x0a\\x67\\x06\\x71\\x80\"\n\"\\x90\\x99\\x93\\x8e\\x9d\\x8f\\x99\\x1f\\xe0\\xf7\\xcb\\x15\\x9d\\xcf\\x96\\xa4\\xa3\\xa8\\x08\\xa9\\xa3\\xa9\\x9d\\xa4\\x1b\\xac\\x9e\\x68\\x50\\xfb\\x1e\\x30\"\n\"\\xfb\\x29\\x37\\x71\\x77\\x95\\x9f\\x80\\x1f\\x0e\\xfb\\x6c\\xf7\\xfa\\xf7\\x01\\x15\\x5a\\x68\\x5e\\x6f\\x5d\\x1b\\x54\\x65\\xb9\\xce\\xf7\\x1b\\xe6\\xf7\\x20\"\n\"\\xe2\\x9f\\x9d\\x7d\\x7c\\x84\\x8a\\x89\\x7e\\x7e\\x1f\\x81\\x80\\x86\\x80\\x7f\\x1a\\x77\\x9b\\x7d\\xa2\\xa5\\xa0\\xa7\\xae\\xb6\\x62\\xae\\x58\\xfb\\x16\\xfb\"\n\"\\x17\\xfb\\x2a\\xfb\\x2b\\x30\\xc1\\x4e\\xdc\\xce\\xcc\\xb2\\xd1\\xbb\\x1e\\x0e\\xc9\\xf7\\x66\\xf8\\x55\\x15\\x52\\x80\\x7b\\x89\\x4e\\x85\\x85\\x78\\x18\\x8d\"\n\"\\x99\\x94\\x8c\\x8f\\x1b\\x97\\x95\\x81\\x80\\x85\\x89\\x7f\\x88\\x82\\x1f\\x2b\\xfc\\x02\\x05\\xd3\\x06\\xa9\\xf7\\x00\\x9c\\xc6\\xa4\\xba\\xbf\\xd0\\x19\\xd0\"\n\"\\xbf\\xb3\\xac\\xa8\\x1b\\x9a\\x94\\x80\\x78\\x83\\x8a\\x85\\x87\\x7d\\x1f\\x34\\xfb\\xdb\\x05\\xd3\\x06\\xa8\\xf7\\x00\\x9a\\xc3\\xa3\\xb8\\xbc\\xcc\\x19\\xe0\"\n\"\\xcb\\xa9\\xa6\\xaa\\x1b\\x9a\\x97\\x7e\\x79\\x84\\x8a\\x88\\x87\\x79\\x1f\\x45\\xfb\\x9c\\x05\\x85\\x75\\x8b\\x8b\\x83\\x1a\\x71\\x9c\\x79\\xa4\\xb5\\xb4\\xaa\"\n\"\\xcb\\xb8\\x1e\\x7e\\x97\\x05\\x6a\\x72\\x6f\\x74\\x7c\\x1b\\x84\\x86\\x91\\x92\\x90\\x8b\\x8c\\x90\\x99\\x1f\\xc8\\xf7\\x7c\\x05\\x93\\xa9\\x8f\\xa5\\x9e\\x1a\"\n\"\\xb0\\x75\\xa4\\x6a\\x66\\x64\\x75\\x5d\\x5f\\x1e\\x70\\x6e\\x75\\x6f\\x53\\x3b\\xa3\\xe5\\x18\\x95\\xad\\x8c\\x93\\x98\\x1a\\xac\\x72\\xa6\\x6b\\x4d\\x47\\x4b\"\n\"\\xfb\\x2b\\x28\\x1e\\x0e\\xfb\\x6c\\x64\\x0a\\x0e\\xbd\\xf7\\x8d\\x54\\x15\\x74\\x35\\x88\\x86\\x69\\x89\\x08\\x71\\x22\\x1d\\xf7\\x6a\\x06\\x8f\\x9d\\x05\\x70\"\n\"\\x06\\x67\\x82\\x8f\\x9d\\x90\\x8c\\x90\\x8f\\x99\\x1f\\xa8\\xf7\\x01\\x05\\x7d\\xa4\\x9b\\x87\\xa2\\x1b\\xf7\\x12\\xf7\\x16\\xf7\\x36\\xf7\\x30\\xda\\x5b\\xc3\"\n\"\\x48\\x67\\x70\\x80\\x6f\\x67\\x1f\\xd4\\xf7\\xa4\\x67\\x86\\x43\\x7f\\x8b\\x8b\\x6b\\x87\\x19\\x86\\x78\\x05\\x8f\\x9a\\x90\\x8c\\x93\\x1b\\x9a\\x93\\x81\\x78\"\n\"\\x81\\x89\\x7f\\x88\\x80\\x1f\\x5d\\xfb\\x43\\x05\\xa8\\x6d\\x75\\x95\\x6a\\x1b\\xfb\\x03\\xfb\\x08\\xfb\\x2b\\xfb\\x26\\x2f\\xc0\\x4b\\xd8\\xa2\\x9e\\x8f\\x99\"\n\"\\xad\\x1f\\x94\\xad\\x15\\x76\\x6f\\x74\\x82\\x72\\x1b\\x65\\x74\\xb3\\xce\\xf7\\x20\\xdb\\xf7\\x31\\xd1\\xae\\xa9\\x6c\\x68\\x82\\x89\\x7c\\x86\\x7c\\x1f\\xd4\"\n\"\\x8a\\x15\\x95\\xb4\\x96\\xa0\\x9b\\x99\\x08\\x9a\\x9c\\xa4\\x94\\xa0\\x1b\\xb1\\x9f\\x66\\x46\\xfb\\x23\\x33\\xfb\\x29\\x36\\x73\\x7a\\x94\\xa0\\x7b\\x1f\\x0e\"\n\"\\xfb\\x6c\\xf7\\x63\\xf7\\x52\\x15\\xb4\\xfb\\x15\\x05\\x5a\\x9b\\xa0\\x74\\xa6\\x1b\\xac\\xaa\\xa8\\xd8\\xba\\x1f\\x7d\\x9c\\x05\\x5a\\x6d\\x79\\x78\\x7b\\x1b\"\n\"\\x7f\\x7f\\x9e\\xb6\\x7d\\x1f\\x55\\xf7\\x30\\x05\\xe5\\xc7\\xa3\\xa3\\xa9\\x1b\\x91\\x91\\x8a\\x87\\x99\\x1f\\x87\\x98\\x91\\x8a\\x90\\x1b\\x9e\\x98\\x99\\x9f\"\n\"\\xa4\\x7a\\x9c\\x73\\x72\\x72\\x7d\\x6d\\x6e\\x1f\\x7a\\x78\\x8b\\x8b\\x46\\x2e\\x63\\xf7\\x07\\x7d\\xa4\\x6f\\x9a\\xfb\\x13\\x6f\\x18\\x86\\x7a\\x05\\x90\\xa0\"\n\"\\x95\\x8d\\x96\\x1b\\xbc\\xa6\\x63\\xfb\\x25\\xbf\\x1f\\x4e\\x2f\\x05\\x50\\x65\\x72\\x70\\x7a\\x1b\\x85\\x87\\x8d\\x98\\x7d\\x1f\\x93\\x82\\x83\\x8e\\x82\\x1b\"\n\"\\x78\\x7d\\x7c\\x77\\x72\\x9e\\x7a\\xa6\\xaf\\xae\\xa8\\xc8\\xb4\\x1f\\x0e\\xf8\\x58\\xf7\\x00\\x15\\x66\\x6f\\x78\\x7b\\x7b\\x1b\\x83\\x85\\x92\\x95\\x91\\x8b\"\n\"\\x8c\\x90\\x9d\\xd2\\x0a\\xfb\\x24\\x62\\xfb\\x05\\xfb\\x31\\x4b\\x1b\\x7b\\x82\\x97\\x9f\\x93\\x8b\\x8b\\x91\\xa0\\x1f\\xe3\\xf7\\xdd\\x5a\\x7f\\x52\\x82\\x61\"\n\"\\x88\\x89\\x0a\\x61\\xa2\\x6e\\xaa\\xc7\\xd8\\xd1\\xf7\\x15\\xdf\\x1e\\x6d\\xfb\\x01\\x05\\x87\\x7a\\x88\\x79\\x7e\\x1a\\x72\\x99\\x7a\\xa1\\xa6\\x9b\\x95\\xbd\"\n\"\\xbe\\x1e\\x6d\\x56\\x83\\x75\\x6d\\x1a\\x80\\x07\\x8c\\x79\\x8b\\x88\\x85\\x1a\\x73\\x84\\x81\\x66\\x75\\x1e\\x96\\x7e\\x05\\xcd\\xb0\\xa3\\xa6\\xb1\\x1a\\x94\"\n\"\\x8a\\x92\\x87\\x9c\\x1e\\x86\\x9e\\x89\\x99\\x9a\\x1a\\xa5\\x91\\x99\\xa6\\xb0\\x1e\\x0e\\xfb\\x4b\\xf7\\xa1\\xc5\\x15\\x89\\x83\\x89\\x7c\\x83\\x1a\\x76\\x9e\"\n\"\\x7a\\xa2\\xb1\\xb0\\xa8\\xd4\\xc4\\x1e\\x7e\\x96\\x05\\x5d\\x68\\x77\\x79\\x7b\\x1b\\x84\\x85\\x91\\x92\\x92\\x8b\\x8c\\x92\\xa5\\x1f\\xe8\\xf7\\xf1\\x05\\x43\"\n\"\\x06\\xfb\\x00\\x74\\x2e\\xfb\\x04\\x48\\x1b\\x7a\\x83\\x94\\x9d\\x92\\x8b\\x8d\\x8f\\x97\\x1f\\xbc\\xf7\\x4b\\x5a\\x7f\\x56\\x81\\x5e\\x88\\x20\\x1d\\x8e\\x9b\"\n\"\\x93\\x8c\\x94\\x1b\\x9e\\x93\\x84\\x7a\\x80\\x89\\x82\\x85\\x75\\x1f\\x76\\x3d\\x05\\x88\\x7e\\x87\\x71\\x7f\\x1a\\x68\\xa1\\x73\\xad\\xaa\\xad\\x99\\xa6\\xae\"\n\"\\x1e\\xad\\xa5\\x9e\\xa1\\xaf\\xc0\\x08\\x0e\\xea\\xf7\\x8d\\xf8\\x51\\x15\\x59\\x7f\\x54\\x4e\\x0a\\x79\\x81\\x89\\x81\\x86\\x76\\x1f\\x51\\xfb\\x6d\\x05\\x82\"\n\"\\x6a\\x8a\\x83\\x78\\x1a\\x5e\\x9f\\x6e\\xab\\xbe\\xc7\\xc5\\xf7\\x19\\xe4\\x1e\\x7d\\x52\\x05\\x82\\x6c\\x89\\x7d\\x7b\\x1a\\x61\\xa3\\x6c\\xaa\\xbf\\xcc\\xc9\"\n\"\\xf7\\x15\\xe0\\x1e\\x6f\\x26\\x05\\x87\\x7a\\x88\\x77\\x7f\\x1a\\x72\\x99\\x7b\\xa1\\xb3\\xbb\\xb2\\xd0\\xba\\x1e\\x7e\\x96\\x05\\x67\\x70\\x77\\x7a\\x7b\\x1b\"\n\"\\x83\\x85\\x91\\x93\\x90\\x8d\\x97\\x8e\\x96\\xd2\\x0a\\xfb\\x25\\x63\\x23\\xfb\\x30\\x53\\x1b\\x7b\\x83\\x98\\xa3\\x95\\x8c\\x96\\x8c\\x8e\\x1f\\xe0\\xf7\\xd2\"\n\"\\x05\\x43\\x06\\x78\\x3d\\x7f\\x59\\x65\\x38\\x67\\x53\\x19\\x43\\x5c\\x62\\x63\\x6e\\x1b\\x7c\\x82\\x96\\x9e\\x94\\x8b\\x8b\\x91\\xa1\\x1f\\x0e\\xea\\xf7\\x8a\"\n\"\\xf8\\x51\\x15\\x59\\x7f\\x54\\x4e\\x0a\\x79\\x81\\x89\\x82\\x86\\x75\\x1f\\x51\\xfb\\x6d\\x05\\x83\\x6d\\x89\\x7f\\x77\\x1a\\x5f\\x9f\\x6f\\xab\\xbd\\xc8\\xc4\"\n\"\\xf7\\x19\\xe4\\x1e\\x7d\\x53\\x05\\x83\\x6e\\x88\\x79\\x7b\\x1a\\x63\\xa3\\x6c\\xaa\\xbd\\xce\\xca\\xf7\\x0c\\xda\\x1e\\x72\\x2e\\x05\\x86\\x79\\x88\\x79\\x7f\"\n\"\\x1a\\x72\\x9b\\x7a\\xa2\\xa6\\xa0\\x98\\xb6\\xb8\\x1e\\x70\\x5e\\x82\\x72\\x68\\x1a\\x8c\\x72\\x05\\x8c\\x85\\x8b\\x86\\x89\\x1a\\x78\\x81\\x7f\\x69\\x76\\x1e\"\n\"\\x96\\x7e\\x05\\xce\\xb0\\xa2\\xa6\\xb1\\x1a\\x94\\x8a\\x93\\x87\\x9b\\x1e\\x86\\x9e\\x89\\x99\\x99\\x1a\\xa6\\x95\\xa3\\xa0\\xa6\\x1e\\x7e\\x96\\x05\\x66\\x70\"\n\"\\x78\\x7b\\x7b\\x1b\\x82\\x86\\x91\\x95\\x93\\x8d\\x97\\x8e\\x98\\x1f\\xe3\\xf7\\xde\\x05\\x43\\x06\\x76\\x3d\\x05\\xfb\\x1d\\x66\\xfb\\x02\\xfb\\x38\\x55\\x1b\"\n\"\\x7c\\x80\\x98\\x9d\\x94\\x8d\\x98\\x8d\\x93\\x1f\\xe0\\xf7\\xd2\\x05\\x43\\x06\\x78\\x3d\\x7f\\x59\\x65\\x38\\x67\\x53\\x19\\x43\\x5d\\x61\\x63\\x6e\\x1b\\x7c\"\n\"\\x82\\x96\\x9e\\x94\\x8b\\x8c\\x91\\xa0\\x1f\\x0e\\xfb\\x21\\xf7\\xf7\\xf8\\x52\\x15\\x7f\\x79\\x79\\x85\\x76\\x1b\\x7f\\x85\\x8c\\x92\\x76\\x1f\\x94\\x6d\\x73\"\n\"\\x90\\x79\\x1b\\x5e\\x6a\\x78\\x52\\x59\\x1f\\x97\\x81\\x05\\xa5\\xa2\\xa2\\x98\\x9f\\x1b\\x93\\x93\\x89\\x84\\xa1\\x1f\\x85\\xa0\\x95\\x89\\x9b\\x1b\\xa4\\x8c\"\n\"\\x8c\\xac\\xe1\\x1f\\x44\\x58\\x76\\x79\\x70\\x6e\\x08\\x4a\\x47\\x69\\x47\\x4f\\x1a\\x39\\xbd\\x54\\xd6\\xf7\\x00\\xe6\\xdc\\xeb\\xd4\\x5d\\xbc\\x47\\x6a\\x72\"\n\"\\x83\\x72\\x63\\x1e\\xb1\\xce\\xbb\\xc9\\xc1\\xbe\\x08\\xfb\\x2c\\xfb\\x6e\\x15\\xa2\\xab\\xa6\\x95\\xa4\\x1b\\xb7\\xa5\\x6b\\x56\\x3b\\x52\\x47\\x49\\x65\\x74\"\n\"\\xac\\xc2\\xb0\\x93\\xa7\\xa1\\xba\\x1f\\x0e\\x9c\\xf8\\xee\\xf3\\x15\\x60\\x59\\x7a\\x7c\\x80\\x8a\\x08\\x84\\x84\\x92\\x92\\x8f\\x8b\\x8b\\x8e\\x95\\x1f\\xed\"\n\"\\xf8\\x04\\x05\\x43\\x06\\x27\\xfc\\x0c\\x05\\x86\\x7a\\x8a\\x85\\x83\\x1a\\x76\\x9f\\x7a\\xa2\\xab\\xb6\\xac\\xd0\\xc5\\x1e\\xfc\\x03\\xf7\\xf6\\x15\\x58\\x7f\"\n\"\\x55\\x82\\x60\\x88\\x85\\x78\\x18\\x8e\\x9b\\xd0\\x0a\\x80\\x84\\x75\\x1f\\x56\\xfb\\x43\\x05\\x85\\x78\\x86\\x6a\\x7a\\x1a\\x4a\\xb7\\x61\\xd0\\xf7\\x06\\xeb\"\n\"\\xe0\\xef\\xd2\\x5f\\xb9\\x46\\x6a\\x72\\x83\\x72\\x62\\x1e\\x7e\\x61\\x15\\xa7\\xb2\\xa0\\x94\\xa3\\x1b\\xb1\\xa1\\x6d\\x58\\x38\\x53\\x43\\x4a\\x69\\x76\\xa4\"\n\"\\xb5\\xa0\\x8c\\x91\\x97\\xb3\\x1f\\x0e\\xfb\\x61\\xf7\\x7c\\xf8\\x51\\x15\\x58\\x7f\\x55\\x4e\\x0a\\x7a\\x7f\\x89\\x81\\x86\\x77\\x1f\\x5c\\xfb\\x43\\x05\\x86\"\n\"\\x79\\x87\\x6e\\x79\\x1a\\x48\\xba\\x5f\\xd2\\xf7\\x03\\xe7\\xdc\\xee\\xd4\\x5c\\xbc\\x45\\x69\\x74\\x83\\x72\\x62\\x1e\\x80\\x61\\x15\\xa7\\xb1\\x9f\\x94\\xa3\"\n\"\\x1b\\xb3\\xa3\\x6a\\x53\\x3c\\x55\\x47\\x4c\\x68\\x75\\xa6\\xb8\\x9d\\x8d\\x9a\\x93\\xa8\\x1f\\x0e\\xfb\\x6f\\xf7\\x2c\\xf7\\x8c\\x15\\x83\\x6d\\x05\\xf7\\x36\"\n\"\\x06\\x81\\x5d\\x81\\x6f\\x7c\\x6f\\x08\\x53\\x6d\\x5d\\x6b\\x57\\x1b\\x5b\\x6b\\xa3\\xc5\\x6f\\x1f\\x7b\\x84\\x05\\x3d\\xa7\\xb9\\x67\\xd0\\x1b\\xf7\\x12\\xf7\"\n\"\\x04\\xf7\\x17\\xf7\\x26\\xf7\\x01\\x48\\xd4\\x27\\x36\\x43\\x5a\\x51\\x71\\x9d\\x76\\xa2\\xa0\\x9d\\x9c\\xa0\\x93\\x87\\x93\\x83\\x94\\x1f\\x82\\x95\\x89\\x8e\"\n\"\\x93\\x1a\\xa1\\xb0\\x9e\\xb8\\xc8\\xb0\\x5b\\x3c\\x7c\\x8a\\x80\\x89\\x79\\x1e\\x0e\\xb8\\xf7\\x4d\\xf7\\x6e\\x15\\xeb\\x06\\x85\\x70\\x89\\x7c\\x76\\x1a\\x27\"\n\"\\xc2\\x49\\xdf\\xba\\xc1\\xa3\\xb7\\xbd\\x1e\\xcb\\xc3\\xb1\\xdd\\xdd\\x1a\\xeb\\x51\\xd0\\x3a\\x2c\\x29\\x3a\\xfb\\x04\\x61\\x1e\\x2a\\x06\\xbf\\xf7\\x58\\x59\"\n\"\\x7f\\x55\\x82\\x60\\x87\\x20\\x1d\\x8d\\x9b\\x91\\x8c\\x95\\x1b\\x9e\\x93\\x84\\x7a\\x80\\x89\\x80\\x86\\x78\\x1f\\x30\\xfb\\xe8\\x05\\xd3\\x06\\xf8\\x1b\\xf8\"\n\"\\x37\\x15\\xb4\\xa8\\x61\\x50\\x4a\\x73\\x33\\x68\\x4a\\x1f\\x52\\x6d\\x65\\x6e\\x61\\x1b\\x5e\\x6f\\xb2\\xc9\\xd6\\xa5\\xe7\\xb3\\xc9\\x1f\\xbc\\xaa\\xaf\\xa5\"\n\"\\xb2\\x1b\\x0e\\xfb\\x57\\xf8\\x35\\xf7\\x00\\x15\\x5f\\x66\\x81\\x82\\x7d\\x1b\\x80\\x86\\x91\\x97\\x93\\x8d\\x97\\x8e\\x96\\x1f\\xe3\\xf7\\xdc\\x05\\x8d\\x5c\"\n\"\\x4b\\x8c\\x79\\x1b\\xfb\\x1f\\x3f\\x5f\\x3c\\x4b\\xb5\\x6c\\xe9\\x85\\x1f\\x35\\x7d\\x6e\\x74\\x62\\x31\\x08\\x5a\\x74\\x82\\x7f\\x79\\x1b\\x7c\\x7e\\x95\\xa0\"\n\"\\x80\\x1f\\x7b\\x82\\x05\\x63\\xa0\\x9f\\x7b\\xa7\\x1b\\xb8\\xb9\\xb2\\xd4\\xb4\\x1f\\xba\\xe2\\x9e\\x9a\\xd2\\x93\\x67\\xfb\\x18\\x18\\x87\\x7b\\x88\\x78\\x7e\"\n\"\\x1a\\x71\\x99\\x7b\\xa1\\xb1\\xa0\\x9c\\xe6\\xd7\\x1e\\xfb\\x0e\\xf7\\x1e\\x15\\x89\\x6c\\x88\\x8b\\x81\\x1b\\x86\\x06\\x52\\x68\\xa8\\xbb\\xc9\\xc2\\xb4\\xde\"\n\"\\x9b\\x9a\\x8a\\x8a\\x9e\\x1f\\x0e\\xfb\\xed\\xf7\\x60\\xf8\\x2f\\x15\\xf7\\x46\\x06\\xa3\\xe0\\x05\\x7d\\x06\\x7a\\x5d\\x73\\x7a\\x5f\\x8c\\x08\\xfb\\x74\\x06\"\n\"\\x88\\x7e\\x05\\xaf\\x8a\\x95\\x85\\x78\\x1a\\x84\\x8b\\x88\\x86\\x7d\\x1e\\x30\\xfb\\xce\\x05\\x87\\x7d\\x89\\x7f\\x83\\x1a\\x77\\x9f\\x7a\\xa1\\xaa\\xb6\\xac\"\n\"\\xc9\\xbf\\x1e\\x84\\xa0\\x05\\x58\\x63\\x7c\\x7d\\x7c\\x1b\\x84\\x84\\x91\\x93\\x8f\\x8c\\x8f\\x8c\\x90\\x1f\\x0e\\xfb\\x49\\xf7\\x80\\xf8\\xac\\x15\\xb0\\xf7\"\n\"\\x15\\x4d\\x81\\x81\\x8a\\x4c\\x85\\x19\\x85\\x77\\x05\\x8d\\x9a\\x95\\x8c\\x8d\\x1b\\x97\\x97\\x81\\x81\\x84\\x87\\x77\\x83\\x6f\\x1f\\x85\\x77\\x05\\x30\\x06\"\n\"\\x83\\x6d\\x05\\xe6\\x06\\xfb\\x21\\xfc\\x8e\\x05\\xd2\\x06\\x99\\xbb\\xaa\\xf4\\x93\\x9d\\xb2\\xc7\\x19\\xeb\\xc9\\xc2\\xc1\\xae\\x1b\\xa2\\x9c\\x6d\\x62\\x35\"\n\"\\x5b\\xfb\\x47\\x59\\x29\\x1f\\x46\\x68\\x68\\x6a\\x65\\x1b\\x83\\x86\\x8f\\x91\\x8e\\x8c\\x8d\\x90\\x8e\\x1f\\x92\\x92\\x8e\\x91\\x95\\x1a\\x9f\\x7a\\x9b\\x75\"\n\"\\x73\\x79\\x77\\x70\\x68\\xa7\\x76\\xb8\\xcf\\xc6\\xb7\\xe5\\xc1\\x1e\\xcb\\xf7\\x00\\xb8\\xf7\\x27\\xf3\\x1a\\xd9\\x70\\xb9\\x5f\\x4e\\x38\\x41\\xfb\\x17\\x33\"\n\"\\x1e\\xdb\\xf7\\xa7\\x05\\xf7\\x28\\x06\\x94\\xa9\\x05\\x0e\\xfb\\xaf\\xf7\\x02\\xf7\\xf1\\x15\\xb4\\xb4\\xae\\x9d\\xae\\x1b\\xae\\xa4\\x72\\x67\\x5f\\x70\\x6d\"\n\"\\x42\\x68\\x1f\\x41\\x68\\x7a\\x82\\x74\\x77\\x08\\x74\\x77\\x7e\\x6f\\x6b\\x1a\\x48\\xb8\\x61\\xd3\\xc8\\xb6\\xa5\\xd1\\xc2\\x1e\\x80\\x96\\x05\\x5c\\x5d\\x64\"\n\"\\x77\\x61\\x1b\\x5e\\x70\\xa8\\xba\\xbc\\xa9\\xae\\xcd\\xaa\\x1f\\xee\\xb8\\x8b\\x8b\\xa5\\xa2\\x08\\xa0\\x9d\\x96\\xa4\\xa8\\x1a\\xc1\\x61\\xaf\\x4e\\x55\\x66\"\n\"\\x76\\x4b\\x52\\x1e\\xf7\\x10\\xf7\\x24\\x15\\xae\\x06\\xf7\\x41\\xf7\\x01\\x05\\x97\\x92\\x90\\x93\\x98\\x1a\\xa0\\x7b\\x9b\\x75\\x82\\xf7\\x05\\x1d\\xfb\\x74\"\n\"\\xf7\\x28\\xf7\\x84\\x15\\xf7\\x03\\xaf\\xc9\\xcf\\xcc\\x1b\\x9f\\x9d\\x7d\\x7c\\x84\\x8a\\x89\\x7e\\x7e\\x1f\\x81\\x80\\x86\\x80\\x7e\\x1a\\x79\\x9b\\x7c\\x9e\"\n\"\\xa7\\xa2\\xa8\\xae\\xb6\\x62\\xae\\x58\\xfb\\x15\\xfb\\x18\\xfb\\x2b\\xfb\\x29\\x5b\\x98\\x64\\xa3\\x72\\x1e\\x72\\xa3\\xb0\\x7a\\xab\\x1b\\xcd\\xd6\\xb8\\xce\"\n\"\\xb9\\x1f\\x79\\x94\\x05\\x59\\x68\\x5e\\x70\\x5d\\x1b\\x54\\x65\\xb9\\xcf\\x9f\\x8d\\x9c\\x90\\xa6\\x1f\\xf7\\x35\\x06\\x93\\xa9\\x05\\x0e\\xfb\\xa3\\xf7\\xec\"\n\"\\xf8\\x4b\\x15\\x7d\\x06\\x7d\\x81\\x81\\x84\\x82\\x1b\\x87\\x84\\x8d\\x8f\\x83\\x1f\\x98\\x71\\x75\\x91\\x74\\x1b\\x4f\\x5a\\x5a\\x4f\\x5f\\x99\\x70\\xc2\\x4b\"\n\"\\x1f\\xb5\\x5c\\x9c\\x6c\\x6d\\x1a\\x5f\\x67\\x67\\x60\\x56\\x65\\xbf\\xd7\\x87\\x1e\\x7b\\x06\\x73\\xfb\\x2b\\x05\\x9e\\x06\\x9a\\x94\\x91\\x90\\x98\\x1b\\x91\"\n\"\\x92\\x8a\\x89\\x92\\x1f\\x7b\\xba\\x95\\x89\\xa4\\x1b\\xd6\\xc5\\xc2\\xd2\\xb8\\x7b\\xa9\\x51\\xce\\x1f\\x5b\\xc1\\x7f\\xa0\\xa8\\x1a\\xac\\xa3\\xa4\\xac\\xc1\"\n\"\\xab\\x5e\\x40\\x8a\\x1e\\x9b\\x06\\x0e\\xfc\\x12\\xf7\\x6b\\xf2\\x15\\x66\\x71\\x6e\\x6f\\x7c\\x1b\\x83\\x84\\x92\\x92\\x8e\\x8c\\x90\\x8c\\x90\\x1f\\xf1\\xf8\"\n\"\\x10\\x56\\x7e\\x5d\\x83\\x5a\\x87\\x20\\x1d\\x8d\\x9b\\x93\\x8c\\x94\\x50\\x0a\\x3f\\xfb\\xae\\x05\\x88\\x7d\\x89\\x80\\x82\\x1a\\x77\\x9f\\x79\\xa3\\xa9\\xb6\"\n\"\\xac\\xca\\xbf\\x1e\\x86\\xf8\\xa7\\xb8\\x1d\\xfc\\x12\\xf7\\x6b\\xf2\\x15\\x5c\\x65\\x77\\x79\\x7f\\x1b\\x83\\x84\\x91\\x93\\x8e\\x8c\\x90\\x8c\\x90\\x1f\\xf1\"\n\"\\xf8\\x10\\x56\\x7e\\x5d\\x83\\x5a\\x87\\x20\\x1d\\x8d\\x9b\\x92\\x8c\\x95\\x50\\x0a\\x40\\xfb\\xae\\x05\\x88\\x82\\x8a\\x82\\x82\\x1a\\x70\\x9c\\x79\\xa3\\xaf\"\n\"\\xb0\\xa9\\xd6\\xc6\\x1e\\xfb\\x03\\xf8\\x9f\\x15\\xa6\\x0a\\xf7\\x34\\x16\\xa6\\x0a\\x0e\\xfc\\x12\\xe8\\xf8\\x23\\x15\\x8d\\x9a\\x90\\x8b\\x93\\x1b\\x9d\\x97\"\n\"\\x81\\x7b\\x85\\x89\\x81\\x88\\x81\\x1f\\x2b\\xfb\\xfc\\x78\\x43\\x85\\x7d\\x79\\x72\\x19\\x78\\x7c\\x74\\x7e\\x76\\x1b\\x80\\x84\\x8f\\x94\\x84\\x1f\\x9b\\x94\"\n\"\\x94\\x9b\\x9c\\x7d\\x97\\x77\\x75\\x7a\\x7b\\x76\\x70\\xaa\\x77\\xb5\\xde\\xcf\\xd7\\xf7\\x18\\xaf\\x1f\\xf6\\xf8\\x24\\x54\\x80\\x64\\x85\\x58\\x87\\x19\\xf7\"\n\"\\x14\\xf7\\x59\\xb8\\x1d\\x9e\\xf8\\x35\\xf8\\x46\\x15\\x39\\x06\\x26\\x91\\x4b\\x43\\x63\\xfb\\x3b\\x08\\xfb\\x0a\\x6c\\x7b\\x6a\\x6f\\x1b\\x82\\x89\\x8c\\x93\"\n\"\\x81\\xcb\\x1d\\xa1\\x97\\xa5\\x9f\\x1f\\x9c\\xa1\\x9c\\xba\\xa7\\xed\\xba\\xf7\\x3d\\xab\\xb8\\xd5\\x88\\x08\\xa6\\x06\\x4a\\xfb\\x89\\x05\\x85\\x71\\x89\\x7e\"\n\"\\x77\\x1a\\x44\\xb6\\x62\\xd6\\xf7\\x03\\xe8\\xdb\\xeb\\xd3\\x5c\\xbc\\x45\\x6a\\x71\\x83\\x72\\x63\\x1e\\x7f\\x61\\x15\\xa7\\xb0\\xa0\\x94\\xa4\\x1b\\xb4\\xa2\"\n\"\\x6b\\x55\\x3b\\x56\\x49\\x4c\\x69\\x73\\xa6\\xb0\\x9d\\x8f\\xa5\\x91\\xa1\\x1f\\x0e\\xbf\\xf7\\x4e\\xf7\\x73\\x15\\xf7\\x37\\x90\\x7a\\x4c\\x05\\x86\\x78\\x87\"\n\"\\x6f\\x79\\x1a\\x48\\xba\\x5f\\xd2\\xf5\\xea\\xda\\xe3\\xb2\\x78\\xae\\x6b\\x9e\\x1e\\x98\\x76\\x71\\x90\\x62\\x1b\\x75\\x7a\\x8a\\x87\\x69\\x1f\\xb8\\xf7\\x40\"\n\"\\x05\\x44\\x06\\x5c\\xfb\\x44\\xfb\\x37\\x88\\xbe\\xf7\\x52\\x5a\\x7f\\x52\\x81\\x62\\x89\\x19\\x86\\x78\\x05\\x47\\x0a\\xf7\\xba\\xf7\\x79\\x15\\x8c\\x98\\x99\"\n\"\\x8b\\x8e\\x1b\\xb8\\x9b\\x89\\x86\\x97\\x1f\\xa3\\x7f\\x99\\x71\\x68\\x1a\\x46\\x55\\x4b\\x50\\x66\\x76\\xa6\\xba\\x9d\\x8c\\x91\\x94\\xaf\\x1e\\x0e\\xef\\x16\"\n\"\\x99\\xc1\\xad\\xf7\\x0d\\x98\\xa7\\xc6\\xd9\\x19\\xd2\\xc1\\xb4\\xae\\xaa\\x1b\\x98\\x95\\x80\\x7a\\x81\\x88\\x78\\x86\\x7a\\x1f\\x4c\\xfb\\x83\\x05\\x83\\x70\"\n\"\\x8b\\x8a\\x7e\\x1a\\x71\\x9c\\x79\\xa4\\xab\\xac\\xa3\\xc8\\xbd\\x1e\\x94\\x97\\x7e\\x96\\x05\\x66\\x6f\\x72\\x74\\x7f\\x1b\\x84\\x84\\x93\\x93\\x8f\\x8d\\x98\"\n\"\\x8c\\x8f\\x1f\\xcb\\xf7\\x7e\\x05\\x92\\xa7\\x90\\xa7\\x9d\\x1a\\xad\\x74\\xa3\\x6a\\x6b\\x6e\\x7b\\x5f\\x5c\\x1e\\x68\\x6b\\x83\\x80\\x43\\x28\\xd7\\xf7\\xa5\"\n\"\\x18\\xf7\\x2a\\x06\\x94\\xa9\\x05\\xfb\\x2a\\x06\\xac\\xf7\\x0f\\x53\\x82\\x7b\\x89\\x4c\\x84\\x19\\x85\\x78\\x05\\x8d\\x9a\\x95\\x8c\\x8e\\x1b\\x98\\x96\\x81\"\n\"\\x80\\x86\\x8a\\x85\\x89\\x84\\x1f\\x89\\x84\\x89\\x85\\x88\\x1a\\x82\\x69\\x05\\x33\\x06\\x82\\x6d\\x05\\xe3\\x06\\xfb\\x22\\xfc\\x93\\x05\\x0e\\xfb\\x54\\x7a\"\n\"\\x1d\\xab\\x9a\\x97\\x97\\xb0\\xc8\\x08\\xc3\\xae\\x95\\x95\\x9d\\x1b\\x92\\x92\\x88\\x87\\x8f\\x8d\\x0a\\xe9\\xf7\\x95\\x15\\xae\\x06\\xf7\\x41\\xf6\\x05\\x96\"\n\"\\x93\\xce\\x1d\\xfb\\x6c\\x64\\x0a\\xf7\\x10\\xf8\\xaa\\x15\\x8c\\x82\\x8b\\x8b\\x87\\x1a\\x77\\x6d\\x7a\\x68\\x6e\\x71\\x98\\x9a\\x8f\\x8d\\x90\\x8d\\x90\\x1e\"\n\"\\x94\\x9a\\x8d\\x91\\x94\\x1a\\x9d\\x7c\\x98\\x76\\x6e\\x77\\x76\\x6d\\x5c\\xb9\\x6d\\xd4\\xdb\\xd0\\xb7\\xbe\\x9e\\x7c\\x98\\x74\\x72\\x7b\\x7a\\x6f\\x1e\\x0e\"\n\"\\xc9\\xf7\\x47\\xb0\\x15\\xf7\\x21\\xf8\\x9c\\x05\\xd4\\x9e\\x9c\\x99\\xd5\\x21\\x1d\\xfb\\xa2\\x06\\x83\\x79\\x05\\xc3\\xda\\x1d\\xfc\\x5f\\x7a\\x47\\x77\\x49\"\n\"\\x1d\\xf7\\x41\\x06\\xb6\\x94\\x8a\\x83\\x98\\x1f\\x9d\\x81\\x94\\x75\\x6c\\x1a\\x70\\x87\\x70\\x7e\\x5a\\x1e\\x9d\\x06\\xbc\\xf7\\x26\\xb0\\xac\\xf7\\x03\\x87\"\n\"\\x08\\xf7\\x35\\xb3\\x0a\\x9d\\x1a\\x96\\x8d\\x98\\x8f\\x99\\x1e\\xf7\\x0e\\xf8\\x5e\\x58\\x1d\\x6b\\x1a\\x7f\\x89\\x81\\x87\\x7b\\x1e\\xfb\\x20\\xfc\\xa2\\x05\"\n\"\\x0e\\xf7\\x32\\x37\\x15\\x8c\\x78\\x8b\\x86\\x87\\x1a\\x74\\x83\\x81\\x68\\x76\\x1e\\x96\\x7d\\x05\\xce\\xb2\\xa1\\xa4\\xb2\\x1a\\x95\\x8a\\x8e\\x87\\x9f\\x1e\"\n\"\\x87\\x9a\\x89\\x97\\x92\\x1a\\xa0\\xa7\\xc3\\xa7\\xac\\x1e\\x9e\\xa0\\x98\\x9e\\xab\\xbb\\x6d\\xfb\\x01\\x18\\x85\\x1d\\xe3\\xf7\\xdd\\x5a\\x7f\\x52\\x81\\x61\"\n\"\\x89\\x89\\x0a\\x62\\xa2\\x6d\\xab\\xa8\\xab\\x9c\\xaf\\xb5\\x1e\\x65\\x57\\x7f\\x70\\x67\\x1a\\x0e\\xfb\\x88\\xe8\\xf7\\x94\\x15\\xd3\\xc0\\xc1\\xae\\xc3\\x1b\"\n\"\\xc0\\xad\\x5d\\x43\\x73\\x89\\x7b\\x83\\x6b\\x1f\\xfb\\x9a\\x06\\x84\\x6e\\x89\\x7d\\x79\\x1a\\x42\\xb7\\x5e\\xd1\\xf7\\x13\\xf7\\x0e\\xf7\\x29\\xf7\\x2d\\xe3\"\n\"\\x5c\\xc4\\x41\\x57\\x54\\x71\\x5d\\x5e\\x1e\\x74\\x73\\x78\\x6f\\x6c\\x56\\x08\\xf7\\x87\\xfb\\x15\\x15\\x4b\\x72\\x62\\x67\\x5a\\x1b\\x6a\\x75\\xa4\\xb1\\x95\"\n\"\\x8c\\x94\\x8f\\x9d\\x1f\\x0e\\xf7\\x41\\xf7\\xef\\xf8\\x38\\x15\\x59\\x5b\\x6b\\x7a\\x61\\x1b\\x59\\x6d\\xaa\\xc1\\xf6\\xde\\xf6\\xde\\xa1\\x9a\\x83\\x7e\\x85\"\n\"\\x88\\x87\\x83\\x82\\x1f\\x7f\\x7f\\x87\\x83\\x82\\x1a\\x7d\\x97\\x7f\\x9a\\xa1\\x9d\\xa2\\xa7\\xb0\\x6d\\xa2\\x58\\xfb\\x05\\xfb\\x04\\xfb\\x09\\xfb\\x0a\\x44\"\n\"\\xb5\\x60\\xd0\\xc8\\xbb\\xa5\\xcc\\xc3\\x1e\\xf8\\x49\\xf7\\x96\\x15\\x5e\\x06\\xfd\\x47\\xfd\\x4a\\x05\\xb9\\x06\\xf8\\xda\\xf8\\x02\\x15\\xfb\\x04\\xfb\\x00\"\n\"\\xfb\\x06\\xfb\\x09\\x46\\xbb\\x5a\\xce\\xf7\\x05\\xf4\\xf7\\x03\\xf7\\x0b\\xd2\\x5d\\xbb\\x48\\x1f\\x81\\x78\\x15\\xb1\\xa1\\x6f\\x5c\\x58\\x7b\\x53\\x6d\\x59\"\n\"\\x1f\\x56\\x6c\\x6a\\x71\\x67\\x1b\\x66\\x72\\xa9\\xb9\\xbd\\x9b\\xc1\\xa9\\xbf\\x1f\\xc0\\xab\\xac\\xa5\\xb0\\x1b\\x0e\\xfb\\x87\\xf7\\x86\\xf7\\x9b\\x15\\xc4\"\n\"\\xc6\\xad\\xb4\\xa2\\xb1\\x08\\xb2\\xcb\\xa3\\xd1\\xc0\\x1a\\xbd\\x72\\xab\\x63\\x39\\x4f\\xfb\\x13\\xfb\\xb6\\x54\\x1e\\x76\\x72\\x76\\x75\\x7e\\x7f\\x08\\x7d\"\n\"\\x7e\\x86\\x84\\x84\\x1a\\x83\\x92\\x81\\x91\\x92\\xa5\\xa1\\xa1\\xa0\\x1e\\x84\\x44\\x89\\x74\\x72\\x1a\\x51\\xa4\\x6a\\xb8\\xab\\xa5\\x9e\\xb1\\xa2\\x1e\\x98\"\n\"\\x9f\\x92\\x9e\\x97\\x1a\\x94\\x86\\x91\\x82\\x83\\x86\\x86\\x7e\\x85\\x1e\\x64\\x78\\x7e\\x7d\\x7a\\x1b\\x80\\x85\\x94\\x9b\\xa4\\x9a\\xf3\\x99\\xd5\\x1f\\x94\"\n\"\\xc2\\x15\\xf7\\x79\\xb1\\xa6\\xd9\\xb2\\x1b\\x9a\\x95\\x7c\\x75\\x70\\x81\\x5e\\x7c\\x65\\x1f\\x74\\x51\\x6f\\x5f\\x56\\x51\\x08\\x0e\\xf7\\xaf\\xf7\\x1f\\x23\"\n\"\\x0a\\x85\\x79\\x05\\x9b\\x06\\xb4\\xa1\\x7e\\x67\\x9d\\x1f\\xfb\\x0f\\xfc\\x63\\x05\\x56\\x7d\\x7c\\x76\\x77\\x1b\\x84\\x83\\x8e\\x90\\x84\\x1f\\x9a\\x77\\x7e\"\n\"\\x91\\x7a\\x1b\\x70\\x76\\x76\\x6f\\x6d\\xa6\\x79\\xb9\\xbb\\xaa\\x9d\\xb5\\xa4\\x1f\\x94\\x9a\\x96\\xa8\\x95\\xb1\\xf7\\x01\\xf8\\x33\\x18\\xf7\\x7a\\xfc\\xb7\"\n\"\\x05\\x9e\\x06\\xf7\\x21\\xf8\\xa6\\x05\\xc0\\x99\\x99\\x9d\\xa4\\x1b\\x94\\x91\\x89\\x84\\x9a\\x1f\\x86\\x97\\x92\\x89\\x94\\x1b\\xa8\\xa1\\x9c\\xa2\\xa7\\x70\"\n\"\\x9e\\x62\\x48\\x67\\x64\\x24\\x70\\x1f\\x2d\\xfb\\xf3\\xfb\\x59\\xf8\\x77\\x05\\xf7\\x9b\\xfd\\x2a\\x15\\xf7\\x95\\x06\\x9b\\xc9\\x05\\xfb\\x95\\x06\\xf7\\x71\"\n\"\\xf8\\x46\\x15\\x2f\\x3b\\x30\\x21\\x34\\xba\\x4d\\xcf\\xe8\\xdb\\xe5\\xf4\\xe4\\x5b\\xc9\\x47\\x1f\\x87\\x6f\\x15\\xb2\\xa1\\x66\\x4c\\x24\\x59\\x34\\x4f\\x66\"\n\"\\x74\\xb1\\xcb\\xef\\xbe\\xe3\\xc5\\x1f\\x0e\\xfb\\x1b\\xb2\\x1d\\xf7\\xb6\\x05\\x35\\x06\\x6c\\x36\\x05\\xcc\\x83\\x6b\\xaa\\x53\\x1b\\x59\\x55\\x6e\\x55\\x58\"\n\"\\x1f\\x55\\x51\\x6d\\x43\\x41\\x1a\\x28\\x7e\\x0a\\xc2\\x9a\\xd0\\xa4\\xc9\\x1f\\xdc\\xad\\xb7\\xb6\\xbc\\x1b\\xb8\\xa1\\x67\\x3d\\x8d\\x1f\\x0e\\xfb\\x1b\\xb2\"\n\"\\x1d\\xf7\\xb8\\x05\\x35\\x06\\x6c\\x35\\x05\\xcc\\x83\\x6b\\xaa\\x53\\x1b\\x58\\x56\\x6e\\x55\\x58\\x1f\\x55\\x50\\x6d\\x44\\x41\\x1a\\x27\\x7e\\x0a\\xc3\\x9a\"\n\"\\xd0\\xa4\\xc8\\x1f\\xdd\\xad\\xb7\\xb6\\xbc\\x1b\\xb8\\xa1\\x67\\x3c\\x8d\\x1f\\x5f\\xf7\\x49\\x15\\xb5\\x06\\xa1\\xba\\x05\\xa1\\xba\\x99\\xb7\\x9f\\xe0\\x1d\"\n\"\\x25\\x0a\\xf7\\x4e\\xf7\\x38\\x29\\x1d\\xfb\\xdb\\xc5\\xf7\\x82\\x15\\xf7\\x42\\xfb\\xe8\\x05\\x7c\\x93\\x95\\x83\\x97\\x1b\\x93\\x90\\x8f\\x92\\x92\\x89\\x93\"\n\"\\x88\\x93\\x1f\\xfb\\x17\\xf7\\xdd\\xf7\\x17\\xf7\\xdd\\x05\\x8e\\x93\\x8d\\x93\\x92\\x1a\\x93\\x86\\x8f\\x83\\x7f\\x83\\x85\\x79\\x81\\x1e\\x0e\\xfb\\xdb\\xf7\"\n\"\\xa7\\xf7\\x82\\x15\\xfb\\x42\\xf7\\xe8\\x05\\x9c\\x82\\x82\\x92\\x7f\\x1b\\x83\\x86\\x87\\x83\\x85\\x8d\\x83\\x8e\\x82\\x1f\\xf7\\x17\\xfb\\xdd\\xfb\\x17\\xfb\"\n\"\\xdd\\x05\\x88\\x84\\x89\\x83\\x84\\x1a\\x83\\x90\\x87\\x93\\x97\\x93\\x91\\x9c\\x95\\x1e\\x0e\\xf8\\x64\\xf7\\x02\\x15\\x6f\\x6f\\x05\\x6b\\x6b\\x80\\x53\\x0a\"\n\"\\xf7\\x40\\xba\\xf7\\x3f\\x77\\x0a\\x7b\\x8d\\x84\\x92\\x83\\x1e\\x78\\x71\\x84\\x76\\x6f\\x1a\\x58\\xb6\\x60\\xbf\\xb0\\x0a\\x67\\x74\\xa0\\xac\\xa3\\x92\\x96\"\n\"\\xa3\\x98\\x1f\\xa6\\x9a\\xa8\\xa8\\xbb\\xc7\\x08\\x7b\\x0a\\x0e\\xf7\\xe8\\xf9\\x3a\\xf7\\x6c\\xb9\\x0a\\xba\\x32\\x79\\x92\\x5e\\x1b\\x5d\\x6c\\x76\\x4b\\x5d\"\n\"\\x1f\\xc1\\x6b\\xd9\\x1d\\x5b\\xe4\\x9d\\x85\\xb8\\x1b\\xb9\\xaa\\xa0\\xcc\\xb9\\x1f\\x55\\xf7\\x61\\xb9\\x0a\\xbb\\x32\\x79\\x91\\x5e\\x1b\\x5d\\x6d\\x76\\x4a\"\n\"\\x5c\\x1f\\xc1\\x6c\\xd9\\x1d\\x5c\\xe4\\x9d\\x84\\xb8\\x1b\\xb9\\xad\\xa3\\xc8\\xb6\\x1f\\x0e\\xf8\\x64\\xf7\\x02\\x15\\x7b\\x7c\\x84\\x83\\x86\\x86\\x08\\x6b\"\n\"\\x6c\\x7f\\x53\\x0a\\xf7\\x3f\\xba\\xf7\\x40\\x68\\x0a\\xb6\\xf7\\xb4\\xa4\\x1d\\x67\\x6e\\x58\\x0a\\x6a\\xc9\\xbb\\x1d\\x88\\x84\\x85\\x1e\\x0e\\xc9\\xf9\\x03\"\n\"\\xf8\\x37\\x15\\xfc\\xa0\\x06\\xf7\\x66\\xdc\\x74\\xc0\\xfb\\xb2\\xfb\\x14\\x05\\x3e\\x07\\xf7\\xb2\\xfb\\x13\\xa2\\xbf\\xfb\\x66\\xdd\\x05\\xf8\\xa0\\x06\\xfb\"\n\"\\x66\\x39\\xa2\\x57\\xf7\\xb2\\xf7\\x13\\x05\\xd8\\x07\\xfb\\xb2\\xf7\\x14\\x74\\x56\\x05\\x0e\\xc9\\xf8\\x1b\\xf9\\x66\\x15\\x4b\\xfd\\x03\\x06\\x39\\xf7\\x66\"\n\"\\x57\\x74\\xf7\\x13\\xfb\\xb2\\x05\\xd8\\x06\\xf7\\x14\\xf7\\xb2\\x56\\xa2\\x3a\\xfb\\x66\\x05\\x0e\\xc9\\xf9\\x66\\xf7\\xf9\\x15\\xcb\\xfd\\x03\\x07\\xf7\\x66\"\n\"\\xdc\\x74\\xc0\\xfb\\xb2\\xfb\\x13\\x05\\x3e\\x07\\xf7\\xb2\\xfb\\x14\\xa2\\xbf\\xfb\\x66\\xdd\\x05\\x0e\\xc9\\xf7\\xf9\\x04\\xf9\\x03\\x06\\xfb\\x66\\x39\\xa2\"\n\"\\x57\\xf7\\xb2\\xf7\\x14\\x05\\xd8\\x07\\xfb\\xb2\\xf7\\x13\\x74\\x56\\xf7\\x66\\x3a\\x05\\xfd\\x03\\x06\\x0e\\xc9\\xf8\\x1b\\x16\\xf9\\x03\\x07\\xdc\\xfb\\x66\"\n\"\\xc0\\xa3\\xfb\\x14\\xf7\\xb1\\x05\\x3e\\x06\\xfb\\x13\\xfb\\xb1\\xbf\\x73\\xdd\\xf7\\x66\\x05\\xfd\\x03\\x07\\x0e\\xc9\\xf7\\xde\\xf9\\x03\\x83\\x0a\\xa2\\xc6\"\n\"\\x0a\\x74\\x05\\x0e\\xc9\\xf7\\x5b\\x2c\\x15\\x51\\xf7\\xdb\\xc5\\x07\\xfb\\x58\\xf9\\x42\\x83\\x0a\\xa3\\xc6\\x0a\\x73\\x05\\x0e\\xfb\\x36\\x75\\xfb\\x40\\x15\"\n\"\\xda\\x06\\xc5\\xf7\\x6b\\x05\\x66\\xa6\\xa8\\x7b\\xb3\\x1b\\xf7\\x0e\\xf7\\x0a\\xf7\\x11\\xf7\\x15\\xcf\\x72\\xc0\\x5b\\xae\\x1f\\xd4\\xb1\\xb6\\xc3\\xc4\\x1a\"\n\"\\xcb\\x57\\xb7\\x40\\x4a\\x50\\x6e\\x58\\x63\\x1e\\x72\\x6b\\x77\\x5c\\x78\\x44\\x08\\xda\\x16\\x99\\xbf\\x9c\\xc0\\x95\\xa1\\x08\\xbe\\xa3\\xae\\xa7\\xb4\\x1b\"\n\"\\xb0\\xa3\\x6e\\x5e\\x57\\x75\\x57\\x63\\x61\\x1f\\x99\\x71\\x7b\\x8f\\x78\\x1b\\x70\\x78\\x7e\\x79\\x78\\x9d\\x7f\\xa8\\x9b\\x99\\x8e\\x93\\xa0\\x1f\\x9a\\x71\"\n\"\\x90\\x72\\x64\\x1a\\x54\\x76\\x38\\x6f\\x57\\x1e\\x55\\x6f\\x5f\\x6a\\x60\\x1b\\x6d\\x72\\x9d\\xb4\\x70\\x1f\\x0e\\xfb\\x6c\\x3c\\x1d\\xfb\\x17\\xf8\\x22\\x2b\"\n\"\\x0a\\xfb\\x6c\\x3c\\x1d\\xf7\\x0a\\xf8\\xc9\\x21\\x0a\\xfb\\x72\\xf7\\xf0\\xf5\\x15\\x50\\x54\\x64\\x75\\x5a\\x1b\\x52\\x69\\xb5\\xd3\\xe0\\xae\\xe5\\xc3\\xc5\"\n\"\\x1f\\xa9\\xa8\\xb3\\x9d\\xb3\\x1b\\xa2\\x99\\x83\\x7f\\x86\\x89\\x86\\x87\\x82\\x1f\\xb8\\x0a\\xa6\\xba\\x51\\x0a\\x2c\\xc1\\x54\\xe8\\xd6\\xc0\\xa9\\xd8\\xc8\"\n\"\\x1e\\x92\\xf8\\xc9\\x20\\x0a\\xfb\\x6c\\x3c\\x1d\\x6a\\xf8\\x92\\x24\\x1d\\x0e\\xfb\\x70\\xf8\\x53\\xf8\\x46\\x15\\x38\\x06\\xfb\\x31\\xfb\\x7a\\x05\\xf7\\x5d\"\n\"\\x80\\x7c\\xb2\\x4b\\x1b\\x6a\\x75\\x7a\\x71\\x75\\x99\\x7e\\xa8\\x86\\x1f\\xc4\\x86\\x92\\x77\\x95\\xfb\\x3a\\xfb\\x8b\\xfb\\xea\\x18\\xe0\\x06\\xf7\\x3c\\xf7\"\n\"\\x85\\x8c\\x59\\x90\\x58\\x93\\x55\\x19\\x46\\x95\\x9c\\x6d\\xaa\\x1b\\xb0\\xb8\\xc4\\xe3\\xa9\\x1f\\x7e\\x92\\x05\\x52\\x72\\x74\\x73\\x6e\\x1b\\x61\\x7a\\xc7\"\n\"\\xf7\\x36\\x86\\x1f\\x0e\\xf7\\xe8\\xf8\\x8b\\xf9\\x4b\\x15\\xfb\\x5c\\xfb\\x36\\xfb\\x35\\xfb\\x5c\\xfb\\x58\\xf7\\x36\\xfb\\x36\\xf7\\x57\\xf7\\x59\\xf7\\x37\"\n\"\\xf7\\x37\\xf7\\x57\\xf7\\x58\\xfb\\x36\\xf7\\x39\\xfb\\x55\\x1f\\x87\\xfb\\xd0\\x15\\xfb\\x52\\xf7\\x50\\x05\\xb8\\xc2\\xcc\\xa2\\xd1\\x1b\\xd0\\xcc\\x74\\x60\"\n\"\\xc3\\x1f\\xb3\\x63\\x15\\xbb\\x51\\xa2\\x4d\\x42\\x1a\\x43\\x74\\x4b\\x5d\\x53\\x1e\\xfb\\x54\\xf7\\x57\\x05\\xf7\\x2c\\xfb\\x7f\\x15\\x5f\\x54\\x48\\x73\\x45\"\n\"\\x1b\\x45\\x4b\\xa2\\xba\\x50\\x1f\\xf7\\x55\\xf7\\x55\\x05\\xfb\\x7d\\xfb\\x2d\\x15\\x5f\\xc1\\x74\\xcb\\xd1\\x1a\\xd3\\xa2\\xcb\\xba\\xc4\\x1e\\xf7\\x52\\xfb\"\n\"\\x50\\x05\\x0e\\xf7\\xe8\\xf9\\x83\\x16\\x9f\\x07\\x84\\x8d\\x74\\x90\\x3e\\x9e\\x8b\\x8c\\x70\\x9c\\x19\\x45\\xbb\\x64\\xd8\\xe4\\x1a\\x94\\x07\\x9b\\x07\\x9f\"\n\"\\x67\\x94\\x7e\\x97\\x7c\\x08\\x5c\\xb1\\xc8\\x6d\\xc1\\x1b\\xe6\\xd3\\xd5\\xe8\\xe7\\x4a\\xd2\\x39\\x71\\x80\\x88\\x79\\x67\\x1f\\x88\\x8a\\x82\\x86\\x82\\x87\"\n\"\\x08\\xa8\\xb7\\x95\\xa5\\xb0\\x1a\\xe5\\x43\\xd2\\x2f\\x2e\\x44\\x45\\x31\\x67\\x92\\x78\\xad\\x56\\x1e\\xa3\\x58\\x78\\x91\\x70\\x1b\\x3d\\x49\\x40\\x33\\x2d\"\n\"\\xd3\\x43\\xe9\\xdb\\xd1\\xbe\\xe5\\xb6\\x1f\\x8c\\x72\\x05\\x83\\x07\\x54\\x71\\x45\\x65\\x5f\\x1e\\x5c\\x5a\\x8a\\x8a\\xfb\\x0e\\x6e\\x83\\x89\\x18\\x77\\x07\"\n\"\\x0e\\x3f\\x5c\\x0a\\xf7\\x84\\x9d\\x15\\xe0\\xba\\xb8\\xc3\\xc3\\x48\\x0a\\x70\\x74\\x70\\x57\\x69\\x1e\\x0e\\xf8\\x33\\xf8\\xb4\\x15\\x60\\xfb\\x35\\x8f\\x1d\"\n\"\\x7f\\x95\\x05\\xe7\\x1d\\xf7\\x0b\\xad\\xf7\\x03\\x1f\\x9b\\xc3\\x9c\\xc9\\xa3\\xe7\\x92\\xa7\\x18\\xc5\\x06\\x93\\xae\\x05\\x52\\x06\\xa5\\xee\\x86\\x90\\x57\"\n\"\\x80\\x67\\x86\\x4a\\x84\\x19\\x7a\\x07\\xc2\\x89\\x92\\x88\\x75\\x1a\\x81\\x8a\\x83\\x86\\x78\\x1e\\xfb\\x3c\\x06\\x83\\x68\\x05\\xc9\\xfb\\x12\\x87\\x0a\\x0e\"\n\"\\xfb\\x57\\xf8\\x68\\xf8\\xfd\\x15\\xb1\\x48\\x3a\\xa1\\x47\\x1b\\x46\\x63\\x6d\\x56\\x70\\x9b\\x71\\xaa\\x72\\x1f\\xcc\\x58\\x44\\x75\\x63\\x73\\x63\\x60\\x19\"\n\"\\x52\\x4c\\x69\\x37\\x3e\\x1a\\x2a\\xc9\\x4d\\xeb\\xf7\\x30\\xf7\\x1b\\xf7\\x29\\xf7\\x40\\xcf\\x71\\xbb\\x52\\xb1\\x1e\\xfb\\x27\\xee\\x05\\x5e\\xa9\\x8a\\x8c\"\n\"\\x97\\x1a\\x99\\x98\\x93\\xa3\\xc9\\xf1\\x64\\x5b\\xca\\x1e\\xfb\\x37\\x29\\x15\\xcd\\x5e\\xa4\\x61\\x4d\\x1a\\x4d\\x73\\x42\\x64\\x50\\x1e\\x54\\x66\\x5f\\x6f\"\n\"\\x5a\\x1b\\x51\\x6d\\xb3\\xd9\\xd1\\x9f\\xd4\\xaf\\xc5\\x1f\\xac\\xc1\\xac\\xa5\\xcf\\xa6\\x08\\x0e\\xf7\\xe8\\xf8\\x95\\xf9\\x89\\x15\\x42\\xfb\\x13\\x4d\\x33\"\n\"\\xfb\\x21\\xfb\\x45\\xf0\\xfb\\x0f\\xf7\\x35\\xfb\\x78\\x99\\x61\\xde\\xf7\\x20\\xdf\\xf7\\x0b\\xf7\\x03\\xf7\\x1a\\xfb\\x0b\\xf7\\x26\\x2a\\xf7\\x1d\\x4d\\xf7\"\n\"\\x01\\x08\\x0e\\xfb\\xdb\\xf7\\x84\\xf8\\xc1\\x15\\xad\\x06\\x9b\\xac\\x05\\x9c\\xae\\x94\\xa5\\x9b\\x1a\\x9a\\x83\\x93\\x7b\\x6a\\x81\\x77\\x41\\x85\\x1e\\x4b\"\n\"\\x70\\x15\\x86\\x0a\\xf7\\x2e\\x59\\x1d\\xfb\\x6c\\x28\\x1d\\xf7\\xc4\\xf8\\x4e\\xc5\\x1d\\x8c\\xb4\\x59\\xe3\\x1b\\xc0\\xba\\x5a\\x1d\\xfb\\x6c\\x28\\x1d\\xf7\"\n\"\\xef\\xf8\\x59\\x21\\x0a\\xfb\\x6c\\x28\\x1d\\xf7\\x46\\xf8\\x22\\x24\\x1d\\x0e\\xf7\\xe8\\xf9\\x93\\xf7\\x6c\\x15\\xc8\\xfc\\x62\\x07\\x91\\xf6\\xc3\\xbd\\xf7\"\n\"\\x01\\x89\\x08\\xf7\\xb7\\xc9\\xfb\\xac\\xa7\\x0a\\x38\\xca\\x0a\\xc9\\xfb\\xb7\\x06\\xfb\\x01\\x89\\x53\\xbd\\x85\\xf5\\x08\\x0e\\xfb\\x6c\\x28\\x1d\\xf7\\xe0\"\n\"\\xf8\\x0b\\x29\\x1d\\xfb\\x67\\xf7\\x62\\xf8\\x4b\\x15\\x8a\\x1d\\x80\\x85\\x6a\\x84\\x6f\\x1f\\x3f\\xfb\\xb8\\x05\\xfb\\x23\\x67\\x76\\x65\\x63\\x88\\x1d\\xba\"\n\"\\xb4\\xae\\x9d\\xaf\\xaa\\x1e\\xac\\xb2\\xa0\\xbb\\xa4\\xe9\\xd9\\xf7\\xbb\\x18\\x90\\xa1\\x8f\\xa1\\x99\\x1a\\xaf\\xf7\\x04\\x1d\\x0e\\xfb\\x6c\\xf7\\xfa\\xf7\"\n\"\\x01\\x15\\x50\\x43\\x6c\\x7b\\x5f\\x1b\\x53\\x66\\xaf\\xc2\\x9a\\x8d\\x99\\x93\\xab\\x1f\\xa7\\x8f\\x05\\xf7\\x2a\\xa0\\xf5\\xd7\\xe1\\x1a\\xb5\\x6d\\xa5\\x59\"\n\"\\xfb\\x24\\xfb\\x31\\xfb\\x38\\xfb\\x2b\\x3a\\xc1\\x53\\xda\\xae\\xa6\\x92\\x9d\\xaf\\x1e\\x70\\x6d\\x80\\x71\\x6a\\x1a\\x58\\xb6\\x60\\xbf\\xbc\\xb4\\xa4\\xbf\"\n\"\\xae\\x1e\\x7a\\x9d\\x05\\x75\\x70\\x73\\x81\\x6b\\x1b\\x68\\x73\\xa0\\xab\\xb7\\x9b\\xa9\\xc0\\xc6\\x1f\\x9b\\x9c\\x05\\xfb\\x6e\\xf7\\x2f\\x15\\xe4\\xad\\xd5\"\n\"\\xd8\\xbe\\x1b\\xa0\\x99\\x7c\\x73\\x6c\\x78\\x67\\x6c\\x6d\\x1f\\x66\\x68\\x65\\x79\\x35\\x76\\x08\\x0e\\xfb\\x9e\\x65\\x0a\\x0e\\xfb\\x9e\\x65\\x0a\\xfb\\x03\"\n\"\\xf7\\xeb\\x15\\xb5\\x06\\xa0\\xba\\x05\\xa3\\xbe\\x98\\xb3\\x9f\\x1a\\xa0\\x81\\x96\\x78\\x62\\x7d\\x6e\\x22\\x80\\x1e\\x0e\\xf7\\xe8\\xf7\\x8c\\xf7\\xb7\\x15\"\n\"\\x4c\\xf8\\x8c\\xca\\x07\\xfc\\x8c\\xf7\\x21\\x15\\x4c\\xf8\\x8c\\xca\\x07\\xfc\\x8c\\xfb\\xad\\x15\\x4c\\xf8\\x8c\\xca\\x07\\x0e\\x4f\\xf8\\x9b\\xf7\\x8e\\x15\"\n\"\\x8a\\xd3\\x87\\xae\\x7d\\xb0\\x08\\xdb\\x6e\\x44\\xbb\\x34\\x1b\\xfb\\x16\\x39\\x23\\xfb\\x37\\xfb\\x37\\xda\\x29\\xf7\\x18\\xee\\xcf\\xbf\\xeb\\xa5\\x1f\\x64\"\n\"\\x06\\x46\\x6e\\x58\\x68\\x42\\x1b\\x62\\x69\\x97\\xa2\\x74\\x1f\\x7a\\x9b\\x83\\x9c\\x80\\xb2\\x08\\xf4\\x07\\xf7\\xa6\\xae\\x15\\xfb\\xa4\\xe8\\x06\\xd5\\xab\"\n\"\\xad\\xa5\\xcd\\x1b\\xce\\xc0\\x66\\x4c\\x9f\\x1f\\x0e\\xfb\\x38\\x67\\x0a\\x0e\\xfb\\x38\\x67\\x0a\\xc2\\xf9\\x22\\x15\\xb5\\x06\\xa1\\xba\\x05\\xa1\\xbb\\x99\"\n\"\\xb6\\x9f\\xe0\\x1d\\xfb\\x20\\xdc\\xf7\\x46\\x15\\x9a\\x87\\x05\\x8f\\x94\\x8d\\x91\\x8c\\x1a\\xa2\\xc7\\x8f\\x96\\x93\\xa0\\x9f\\xba\\x19\\xc0\\xf7\\x13\\x05\"\n\"\\xaa\\xd5\\x9f\\xcf\\xa8\\x1a\\xa5\\x7e\\x99\\x72\\x66\\x7a\\x69\\xfb\\x0a\\x75\\x1e\\x35\\xfc\\x3a\\x15\\x6f\\x75\\x75\\x6f\\x70\\xa2\\x74\\xa6\\xa6\\xa2\\xa1\"\n\"\\xa6\\xa8\\x75\\xa1\\x6f\\x1f\\xf7\\xf5\\xe0\\x15\\x9a\\x87\\x05\\x8d\\x91\\x8f\\x94\\x8c\\x1a\\xa2\\xc7\\x8e\\x95\\x9c\\xb4\\x97\\xa7\\x19\\xc0\\xf7\\x13\\x05\"\n\"\\xa9\\xd5\\xa0\\xcf\\xa8\\x1a\\xa5\\x7d\\x99\\x73\\x66\\x7a\\x69\\xfb\\x0a\\x75\\x1e\\x35\\xfc\\x3a\\x15\\x6f\\x75\\x75\\x6f\\x70\\xa2\\x74\\xa6\\xa6\\xa2\\xa1\"\n\"\\xa6\\xa8\\x75\\xa1\\x6f\\x1f\\x0e\\xfb\\x80\\xbd\\x16\\xf7\\xd9\\xf8\\xd5\\xfb\\xd9\\x37\\xf7\\x85\\xfb\\x36\\xfb\\x85\\x37\\xf7\\x85\\xfb\\x37\\xfb\\x85\\x06\"\n\"\\x0e\\xc9\\xf8\\x19\\xf7\\xa7\\x15\\xb3\\x93\\x9c\\x90\\xa4\\x9a\\x08\\xd0\\xb3\\xb4\\xd2\\xda\\x1a\\xf7\\x0d\\x29\\xed\\xfb\\x0e\\xfb\\x0d\\x29\\x29\\xfb\\x0d\"\n\"\\x3c\\xb4\\x45\\xd0\\x62\\x1e\\xa3\\x7c\\x9c\\x85\\xb3\\x84\\x08\\x3e\\xfb\\x29\\x57\\xf7\\x29\\xfb\\x2c\\xc3\\xf7\\x2c\\xf7\\x28\\xbf\\xfb\\x28\\x07\\x6c\\xf8\"\n\"\\x5d\\x15\\xe7\\xd5\\x43\\x32\\x30\\x42\\x42\\x31\\x31\\x42\\xd4\\xe5\\xe3\\xd4\\xd5\\xe2\\x1f\\x0e\\xf7\\x80\\xa3\\x15\\x4e\\x96\\x6a\\xc0\\xe4\\x1a\\xed\\xc2\"\n\"\\xf7\\x44\\xc5\\xe7\\x1e\\xcd\\xb5\\xc5\\xb4\\xbe\\x1b\\xc6\\xb6\\x53\\x3d\\x77\\x8a\\x79\\x87\\x73\\x1f\\xa4\\x06\\xb6\\xf7\\x73\\x05\\x76\\x06\\x6c\\x7e\\x81\"\n\"\\x7e\\x80\\x1b\\x88\\x85\\x8e\\x90\\x85\\x1f\\xa2\\x6c\\x66\\x97\\x69\\x1b\\x34\\x31\\x50\\x23\\x44\\x1f\\x4d\\x32\\x66\\xfb\\x06\\x27\\x1a\\xfb\\x1e\\xce\\x37\"\n\"\\xf7\\x01\\xd4\\xd3\\xaa\\xc4\\xc7\\x1e\\x7a\\x9d\\x63\\x69\\x6f\\x7a\\x65\\x7f\\x19\\xbb\\xf7\\x48\\xaa\\xb7\\x9d\\x9c\\xa3\\x91\\x19\\x78\\x95\\x93\\x85\\x9b\"\n\"\\x1b\\xa3\\x9c\\x9c\\xa1\\x9e\\x7f\\x96\\x76\\x6b\\x71\\x7a\\x57\\x5d\\x1f\\x9e\\xce\\x81\\x8e\\xfb\\x05\\x64\\x86\\x79\\x05\\x8e\\x9a\\x8f\\x8c\\x90\\x1b\\x94\"\n\"\\x8f\\x87\\x82\\x86\\x89\\x82\\x87\\x7c\\x1f\\x0e\\xfb\\x9e\\xf7\\x52\\xcb\\x15\\x9c\\xda\\x92\\xc5\\xc7\\x1a\\xf7\\x04\\x69\\xd2\\x57\\x62\\x5a\\x57\\x37\\x64\"\n\"\\x1e\\x98\\x80\\x05\\xc5\\xab\\xaa\\xaf\\x9c\\x1b\\x96\\x9b\\x78\\x73\\x92\\x1f\\x96\\x6a\\x90\\x5b\\x45\\x1a\\x4e\\x87\\x51\\x84\\x5f\\x1e\\x64\\x55\\x84\\x81\"\n\"\\x7f\\x72\\x08\\x7c\\x6c\\x80\\x68\\x78\\x1a\\x74\\x9a\\x7b\\x9f\\xa0\\x9f\\x9d\\xad\\x9c\\x1e\\x99\\xa8\\x94\\xa8\\xa1\\xe8\\xa7\\xab\\x9a\\x9b\\xaa\\xaa\\xe4\"\n\"\\xe2\\x95\\x97\\xa8\\xb3\\x08\\xab\\xb9\\x9e\\xbf\\xb3\\x1a\\xb1\\x76\\xa5\\x6d\\x70\\x76\\x76\\x70\\x7d\\x8d\\x85\\x98\\x6b\\x1e\\x93\\x79\\x8e\\x7f\\x7d\\x1a\"\n\"\\x79\\x87\\x7c\\x81\\x7a\\x1e\\x79\\x69\\x84\\x84\\x52\\x51\\x08\\x0e\\x39\\x1d\\xf7\\x45\\xf7\\x7b\\xc5\\x1d\\xb5\\x59\\xe3\\xc0\\xba\\xa3\\xb7\\xac\\x1e\\x9f\"\n\"\\xa6\\x94\\xa0\\x94\\xb5\\x08\\x0e\\xfb\\x3b\\xf8\\x69\\x6d\\x1d\\xdb\\xf7\\x86\\x20\\x0a\\x39\\x1d\\xf2\\xf7\\xb3\\xcf\\x0a\\xac\\xa8\\xa1\\x9f\\xa5\\x9d\\x85\"\n\"\\x96\\x78\\x9c\\x1e\\x7c\\x99\\x86\\x93\\x96\\x1a\\xa6\\xa2\\xa5\\xbf\\xae\\x1e\\x0e\\x39\\x1d\\x93\\xf7\\x4f\\x24\\x1d\\x0e\\xf7\\xe8\\xf7\\x90\\x16\\xf8\\x30\"\n\"\\x06\\x9d\\xcd\\x05\\xfc\\x30\\x06\\x92\\xa5\\x15\\xf8\\x72\\xf7\\x81\\x8d\\x91\\xfb\\xeb\\xf7\\x8c\\x71\\x2e\\xf7\\x93\\xfb\\x4c\\xfb\\xf6\\xfb\\x42\\x05\\x0e\"\n\"\\xf7\\x2f\\xf8\\x97\\x15\\x8a\\x88\\xfb\\x1b\\xfc\\x94\\x05\\x79\\x0a\\x7e\\x97\\x05\\x84\\x0a\\xd7\\xf7\\xb1\\x05\\xf7\\x25\\x06\\x92\\xac\\x05\\xfb\\x23\\x06\"\n\"\\xae\\xf7\\x16\\xb4\\x0a\\xa1\\x8c\\x9e\\x7f\\x7d\\x1a\\x7e\\x86\\x74\\x83\\x6f\\x1e\\x89\\x87\\x05\\x57\\x06\\x84\\x6a\\x05\\x0e\\xfb\\x3b\\xf8\\x66\\xf7\\x09\"\n\"\\x15\\x84\\x0a\\xf7\\x0c\\xf8\\x54\\xb4\\x0a\\xa2\\x8c\\x9d\\x80\\x7c\\x1a\\x7d\\x86\\x73\\x82\\x6e\\x1e\\x8a\\x89\\x87\\x7d\\x86\\x76\\xfb\\x1b\\xfc\\x94\\x18\"\n\"\\x79\\x0a\\x3d\\xf9\\x9b\\x20\\x0a\\xf7\\xe8\\xf8\\x87\\x6f\\x15\\x9c\\xde\\xc7\\xf3\\xf7\\x0b\\xf7\\x2b\\xb4\\xc0\\x9b\\xa0\\x9a\\xa3\\x08\\xb1\\xca\\x9d\\xc2\"\n\"\\xc1\\x1a\\xdc\\x44\\xcf\\x37\\x5b\\x5f\\x76\\x65\\x6a\\x1e\\x76\\x72\\x81\\x75\\x7e\\x5d\\x08\\xf2\\x67\\x56\\xbb\\x3a\\x1b\\x36\\x48\\x46\\x34\\x4a\\xa3\\x56\"\n\"\\xdc\\xfb\\x01\\x1f\\xf7\\x2c\\xfb\\x5f\\xb2\\x48\\xa5\\x24\\x08\\x0e\\xf7\\xe8\\xf7\\x2d\\x16\\xf9\\x50\\xf8\\x25\\x06\\xfb\\xf3\\xf7\\xdc\\xfb\\xf1\\xfb\\xdc\"\n\"\\x05\\xc8\\xfb\\xf2\\x15\\xf7\\xdc\\x07\\xf7\\xb4\\xf7\\xa2\\xf7\\xb6\\xfb\\xa2\\x05\\xfb\\xdc\\x07\\x0e\\xfc\\x12\\x8f\\x0a\\x92\\x9d\\x1f\\x8c\\x90\\x8d\\x91\"\n\"\\x8d\\x92\\x08\\x8d\\x07\\x8c\\x8d\\xe3\\xf7\\xd6\\x88\\x8d\\x25\\x78\\x78\\x88\\x64\\xa3\\x0a\\x83\\x88\\x7a\\x85\\x78\\x1e\\x5b\\xfb\\x45\\x05\\x7b\\x4f\\x85\"\n\"\\x6e\\x77\\x1a\\x66\\x9b\\x77\\xa9\\xba\\xaf\\xa9\\xdf\\xc4\\x1e\\xdb\\xf8\\xb7\\x3e\\x1d\\xf7\\x66\\xf2\\x15\\x66\\x72\\x6d\\x6f\\x7c\\x1b\\x84\\x84\\x91\\x93\"\n\"\\x8f\\x8c\\x8f\\x8c\\x90\\x1f\\xf7\\x01\\xf8\\x10\\x57\\x7e\\x5d\\x83\\x5b\\x87\\x20\\x1d\\x8d\\x9a\\xd0\\x0a\\x7e\\x85\\x78\\x1f\\x3a\\xfb\\xae\\x05\\x87\\x7d\"\n\"\\x89\\x7f\\x83\\x1a\\x77\\x9f\\x79\\xa1\\xa9\\xb6\\xac\\xca\\xc0\\x1e\\x92\\xf8\\xa7\\xbf\\x1d\\xf3\\xfb\\x6a\\x15\\x8d\\x9a\\x90\\x8b\\x93\\x1b\\x9d\\x96\\x81\"\n\"\\x7c\\x85\\x8a\\x84\\x86\\x7d\\x1f\\x24\\xfb\\xfc\\x77\\x43\\x85\\x7d\\x78\\x72\\x19\\x78\\x7c\\x75\\x7e\\x76\\x1b\\x7f\\x84\\x8f\\x94\\x85\\x1f\\x9b\\x94\\x94\"\n\"\\x9b\\x9d\\x7e\\x96\\x77\\x75\\x7a\\x7b\\x75\\x70\\xa9\\x78\\xb3\\xde\\xd0\\xd7\\xf7\\x18\\xb1\\x1f\\xf7\\x07\\xf8\\x24\\x54\\x80\\x65\\x85\\x58\\x87\\x19\\xf7\"\n\"\\x17\\xf7\\x59\\xbf\\x1d\\x0e\\xfc\\x12\\x2f\\x1d\\xf7\\x29\\xf8\\x74\\x29\\x1d\\xf7\\xe8\\xf8\\x88\\xf7\\xa4\\x15\\x60\\xb2\\x87\\x8e\\x78\\x99\\x08\\xa5\\x6a\"\n\"\\x60\\x9b\\x6a\\x1b\\x45\\x51\\x51\\x45\\x45\\xc5\\x51\\xd1\\xad\\xb4\\x9b\\xa5\\xad\\x1f\\x9e\\x99\\x8f\\x8e\\xb6\\xb2\\xb8\\x64\\x8f\\x87\\x9c\\x7e\\x08\\x71\"\n\"\\xae\\xb4\\x7b\\xad\\x1b\\xd1\\xc5\\xc5\\xd1\\xd1\\x51\\xc5\\x45\\x6a\\x60\\x7b\\x71\\x69\\x1f\\x7a\\x7e\\x86\\x87\\x5f\\x64\\x08\\xac\\x6d\\x15\\xbe\\xbe\\xbf\"\n\"\\xa9\\xb3\\x1b\\xb7\\xb0\\x66\\x5f\\x5e\\x66\\x66\\x5f\\x64\\x58\\xa8\\xc0\\x56\\x1f\\x4a\\x16\\x57\\x57\\x57\\x6e\\x64\\x1b\\x5f\\x66\\xb0\\xb7\\xb7\\xb0\\xb0\"\n\"\\xb8\\xb2\\xbe\\x6e\\x57\\xbf\\x1f\\x0e\\xf7\\xe8\\xf8\\xb3\\xf8\\xd4\\x15\\xd5\\x8a\\xb1\\x88\\xc5\\x1e\\x89\\xa7\\x8a\\xaa\\x98\\x1a\\xb0\\x96\\xa2\\x9d\\x90\"\n\"\\x91\\x88\\x88\\x8d\\x1e\\x6f\\x9c\\x92\\x86\\x9d\\x1b\\x9e\\x9a\\x99\\x9d\\xa6\\x73\\x9d\\x68\\x68\\x6e\\x7a\\x6d\\x7a\\x1f\\x73\\x5f\\x7d\\x20\\xfb\\x21\\x1a\"\n\"\\xfb\\xed\\x07\\x43\\x8c\\x65\\x8e\\x50\\x1e\\x8d\\x6d\\x8c\\x6f\\x79\\x1a\\x69\\x7f\\x74\\x78\\x83\\x85\\x90\\x98\\x84\\x1e\\x9c\\x81\\x84\\x90\\x7d\\x1b\\x77\"\n\"\\x7c\\x7c\\x79\\x71\\xa3\\x79\\xae\\xae\\xa8\\x9c\\xa9\\x9c\\x1f\\xa3\\xb7\\x99\\xf6\\xf7\\x21\\x1a\\x0e\\xc9\\xf7\\xe7\\xf9\\xb4\\x15\\xfc\\xfb\\x07\\x60\\x8f\"\n\"\\x4e\\x95\\x23\\x1e\\x8f\\x61\\x8d\\x75\\x7f\\x1a\\x79\\x85\\x81\\x7f\\x85\\x89\\x8c\\x96\\x80\\x1e\\x94\\x81\\x80\\x90\\x7d\\x1b\\x71\\x75\\x75\\x70\\x6c\\xa7\"\n\"\\x73\\xae\\xb7\\xaa\\xaa\\xc5\\x99\\x1f\\x9b\\xcb\\x90\\xd4\\xf7\\x41\\x1a\\xf8\\xf2\\x07\\x0e\\xc9\\xf8\\x30\\xfb\\x61\\x15\\xf8\\xfa\\x07\\xb7\\x87\\xc8\\x81\"\n\"\\xf3\\x1e\\x87\\xb5\\x89\\xa1\\x97\\x1a\\x9d\\x91\\x95\\x97\\x91\\x8d\\x8a\\x80\\x96\\x1e\\x82\\x95\\x96\\x86\\x99\\x1b\\xa5\\xa1\\xa1\\xa6\\xaa\\x6f\\xa3\\x68\"\n\"\\x5f\\x6c\\x6c\\x51\\x7d\\x1f\\x7b\\x4b\\x86\\x42\\xfb\\x41\\x1a\\xfc\\xf2\\x07\\x0e\\xf7\\xe8\\xf9\\x64\\x16\\xf7\\x8a\\x07\\xf7\\x1d\\x86\\xad\\x73\\xb4\\x1e\"\n\"\\xca\\x65\\x44\\xb1\\x39\\x1b\\x3f\\x4b\\x6c\\x53\\x62\\x1f\\x6a\\x5e\\x85\\x6b\\xfb\\x29\\x1a\\xfb\\x8a\\xc7\\xf7\\x8d\\x07\\xf0\\x91\\xb6\\x9c\\xaa\\x1e\\xb9\"\n\"\\xa4\\xc2\\xa9\\xc4\\x1b\\xc0\\xbf\\x71\\x61\\xa7\\x1f\\xa0\\x6b\\x91\\x66\\xfb\\x06\\x1a\\xfb\\x8d\\x07\\x0e\\xf7\\xe8\\xf8\\x89\\xf9\\x6e\\x95\\x1d\\xfb\\x01\"\n\"\\xfb\\x63\\xa2\\x0a\\xfb\\x14\\xfb\\x05\\x15\\x97\\x59\\x95\\x75\\xa5\\x6d\\x08\\x54\\xbb\\xc7\\x71\\xdc\\x1b\\xdc\\xc7\\xa5\\xc2\\xbb\\x1f\\xa5\\xa9\\x95\\xa1\"\n\"\\x97\\xbd\\x84\\x36\\x80\\x62\\x6d\\x5e\\x08\\x4c\\x61\\x4b\\x6b\\x38\\x1b\\x3e\\x4f\\xa6\\xc1\\x61\\x1f\\x67\\xba\\x7c\\xb8\\x84\\xe8\\x08\\xf7\\xee\\xf7\\x05\"\n\"\\xa2\\x0a\\x0e\\xfc\\x12\\xbc\\x0a\\x79\\x7d\\x6a\\x1d\\x92\\x9d\\x1f\\x90\\x9d\\x8c\\x8d\\x05\\x8d\\x07\\x9e\\x1d\\x50\\x85\\x6d\\x77\\x1a\\x6c\\x94\\x7b\\xa1\"\n\"\\x83\\x1e\\x7a\\x74\\x86\\x7b\\x73\\x1a\\x55\\xa9\\x0a\\x6c\\x1b\\x65\\x75\\xa0\\xae\\xa6\\x90\\x92\\xae\\xa8\\x1f\\xa7\\xa2\\x9b\\x9e\\xab\\xbb\\x08\\x76\\xf8\"\n\"\\xbb\\x45\\x0a\\xfc\\x12\\x43\\x0a\\x0e\\xfc\\x12\\x43\\x0a\\x45\\xf8\\x9d\\x15\\x42\\x1d\\xf7\\x21\\x16\\x42\\x1d\\x0e\\xfc\\x12\\xf7\\x66\\x72\\x0a\\x76\\xf8\"\n\"\\x6b\\x15\\xad\\x06\\x9b\\xac\\x05\\x9b\\xac\\x95\\xa8\\x9a\\x1a\\x9a\\x82\\x93\\x7c\\x6b\\x80\\x76\\x42\\x85\\x1e\\x41\\x70\\x15\\x86\\x0a\\xf7\\x43\\x59\\x1d\"\n\"\\xfc\\x12\\x43\\x0a\\x68\\xf8\\x20\\x15\\xb5\\x06\\xa1\\xba\\x05\\xa0\\xba\\x9a\\xb8\\x9e\\x1a\\xa0\\x81\\x96\\x78\\x62\\x7e\\x6f\\x21\\x80\\x1e\\x0e\\xfc\\x12\"\n\"\\x8f\\x0a\\x91\\x9d\\x1f\\x8c\\x8d\\x8d\\x93\\x8e\\x93\\x08\\x8d\\x07\\x8c\\x8d\\xe3\\xf7\\xd6\\x88\\x8d\\x25\\x78\\x77\\x88\\x65\\xa3\\x0a\\x84\\x88\\x7a\\x85\"\n\"\\x77\\x1e\\x5b\\xfb\\x45\\x05\\x7c\\x53\\x84\\x6a\\x77\\x1a\\x66\\x9b\\x77\\xa9\\xb9\\xb0\\xa9\\xdf\\xc4\\x1e\\xe7\\xf8\\x9d\\x15\\x6a\\x7f\\x7f\\x80\\x70\\x1b\"\n\"\\x7c\\x7a\\x3f\\x0a\\x71\\x92\\x75\\x1b\\x57\\x70\\x6e\\x3e\\x76\\xa3\\x1d\\xfc\\x16\\xf7\\x88\\xf8\\x4b\\x15\\x88\\x8d\\x36\\x7c\\x56\\x83\\x6b\\x89\\x19\\x7b\"\n\"\\x07\\xa6\\x8c\\x05\\x92\\x06\\xa7\\x97\\x81\\x75\\x81\\x86\\x71\\x80\\x5f\\x1f\\x43\\xfb\\xb8\\x05\\xfb\\x1e\\x69\\x74\\x60\\x63\\x54\\x1d\\xe2\\xc7\\xd6\\xf7\"\n\"\\x34\\xb3\\x1e\\xf7\\x02\\xf9\\x0d\\x15\\x5a\\x06\\xfb\\x31\\xb1\\x0a\\xfb\\x48\\xf7\\x78\\xf7\\x98\\x15\\xa3\\x9e\\xa3\\x9e\\xa2\\x9f\\xaf\\xa8\\x97\\x8f\\xba\"\n\"\\x8c\\x08\\xb0\\x93\\x8c\\x91\\x9a\\x1f\\x9d\\x93\\x96\\x9d\\x9f\\x1a\\xa3\\x7a\\x9a\\x71\\x62\\x74\\x7b\\xfb\\x08\\xfb\\x14\\x1e\\x77\\x78\\x63\\x67\\x7a\\x7c\"\n\"\\xc2\\xf7\\x5f\\x18\\x50\\x7d\\x61\\x84\\x5b\\x87\\x86\\x78\\x18\\x3d\\x0a\\x7a\\x80\\x89\\x82\\x86\\x76\\x1f\\x30\\xfb\\xe8\\x05\\xd4\\x06\\xca\\xf7\\x81\\xe9\"\n\"\\xfb\\x5a\\x05\\x68\\x9c\\x9e\\x7b\\xa3\\x1b\\x9f\\xa4\\x98\\xa0\\x9d\\x1f\\xa0\\xa2\\x96\\x9e\\xa4\\xbe\\x7c\\x93\\x18\\x5a\\x74\\x6e\\x68\\x78\\x1b\\x7b\\x7a\"\n\"\\x9e\\xb4\\x78\\x1f\\x0e\\xfb\\x6c\\x72\\x1d\\xfb\\xfa\\xfc\\x04\\x30\\x1d\\xfb\\x6c\\xf7\\x0e\\xf7\\x44\\x15\\xcb\\xc2\\xcf\\xfb\\x53\\x05\\x68\\x97\\x9d\\x7a\"\n\"\\xa2\\x1b\\x9e\\xa4\\x98\\xa0\\x9e\\x1f\\xa0\\xa3\\x98\\x9d\\xa8\\xbe\\x7d\\x93\\x18\\x59\\x72\\x6c\\x69\\x79\\x1b\\x7c\\x7d\\x9f\\xb3\\x7c\\x1f\\x4c\\xf7\\x42\"\n\"\\xf7\\x07\\xf1\\xcd\\xb3\\xc3\\x8d\\x19\\x8f\\x9a\\x05\\xfb\\x45\\x06\\x87\\x7c\\x05\\xad\\x8a\\x92\\x88\\x80\\x1a\\x7f\\x8b\\x8b\\x41\\x4c\\x1e\\xfb\\x18\\xfb\"\n\"\\x06\\xce\\xf7\\x7e\\x4b\\x7e\\x82\\x89\\x4a\\x84\\x19\\x85\\x78\\x05\\x8e\\xa1\\x8b\\x8b\\x91\\x1b\\x97\\x96\\x82\\x80\\x86\\x89\\x80\\x87\\x7e\\x1f\\x2a\\xfb\"\n\"\\xfc\\x05\\xce\\x06\\x0e\\xfc\\x12\\xf7\\x78\\x3d\\x1d\\x33\\xf8\\xe4\\x15\\xae\\x06\\xf7\\x3e\\xf5\\x05\\x98\\x93\\x90\\x93\\x97\\x1a\\xa0\\x7b\\x9a\\x76\\x65\"\n\"\\x1d\\x0e\\xfb\\x77\\xf7\\x9a\\xf7\\xc0\\x15\\x7b\\xfb\\x1c\\x05\\x84\\x50\\x87\\x67\\x7f\\x1a\\x5f\\x9a\\x74\\xa7\\xb2\\xb7\\xb8\\xdb\\xb1\\x1e\\x7a\\x95\\x05\"\n\"\\x56\\x6d\\x7a\\x7c\\x72\\x1b\\x74\\x7f\\x9e\\xaf\\x9f\\x8c\\x9c\\x8f\\xb1\\x1f\\xaf\\xf7\\xed\\x05\\x8e\\xa2\\x8c\\x9f\\x94\\x1a\\xbc\\x74\\xa6\\x62\\x6b\\x77\"\n\"\\x79\\x6d\\x78\\x93\\x7d\\x9d\\x82\\x1e\\xb7\\x73\\x91\\x82\\x5f\\x1a\\x74\\x89\\x75\\x87\\x6f\\x1e\\xfb\\xd3\\xfc\\x38\\x05\\xdf\\x06\\x0e\\xfb\\xe8\\xf7\\x7a\"\n\"\\x3d\\x1d\\xbf\\xf7\\xd6\\x15\\xe0\\xba\\xb8\\xc2\\xc4\\x48\\x0a\\x71\\x74\\x70\\x57\\x68\\x1e\\x0e\\xfc\\x12\\xf7\\x78\\x84\\x1d\\xae\\xa8\\xeb\\xcb\\x1e\\xfb\"\n\"\\x91\\xfc\\x14\\x33\\x1d\\xfc\\x17\\xf7\\x5f\\x3d\\x1d\\xd9\\xf7\\x9b\\x49\\x0a\\xf7\\xe8\\xf9\\x18\\x16\\x9d\\xcd\\x05\\xfc\\x30\\x06\\x79\\x49\\x05\\xf8\\xd1\"\n\"\\xf8\\xdb\\x15\\xfc\\x71\\xfb\\x81\\x89\\x85\\xf7\\xeb\\xfb\\x8c\\xa5\\xe8\\xfb\\x93\\xf7\\x4c\\xf7\\xf6\\xf7\\x42\\x05\\x0e\\x92\\x33\\x0a\\xf8\\xa9\\xec\\x15\"\n\"\\xd1\\xf7\\xa0\\xe1\\x1d\\x9e\\x84\\x7a\\x82\\x79\\x43\\x5c\\xfb\\x43\\x1f\\x43\\x67\\x7f\\x5d\\xd3\\xaf\\x82\\x69\\x84\\x71\\x86\\x7b\\x19\\x76\\x41\\x05\\x78\"\n\"\\x45\\x84\\x6c\\x79\\x1a\\x66\\x9b\\x78\\xac\\xbf\\xad\\xa7\\xec\\xcc\\x1e\\x7e\\x94\\x05\\x37\\x49\\x84\\x84\\x75\\x1b\\x81\\x86\\x91\\x97\\x93\\x8e\\x98\\x8f\"\n\"\\x9b\\x0a\\xfc\\x12\\xc0\\xf8\\x26\\x15\\xe6\\x06\\x2f\\xfc\\x3e\\x05\\xfb\\x02\\x73\\x6a\\x54\\x60\\x1b\\x7f\\x83\\x92\\x95\\x8e\\x2d\\x1d\\x92\\x8c\\x8f\\x91\"\n\"\\x1a\\xa1\\x79\\x9c\\x75\\x76\\x7b\\x78\\x73\\x69\\xae\\x70\\xb7\\xe5\\xd4\\xf1\\xf7\\x4d\\xb5\\x1e\\xed\\xf8\\x41\\x8b\\x8b\\x94\\xa6\\x9a\\xbc\\x98\\xa7\\x9b\"\n\"\\xa1\\x08\\xa1\\x9c\\x9e\\x96\\xa1\\x1b\\x98\\x94\\x36\\x0a\\x86\\x1f\\x86\\x83\\x8a\\x86\\x83\\x1a\\x73\\x9a\\x7b\\xa1\\xa2\\x9f\\x9e\\xa1\\xb1\\x66\\xa6\\x59\"\n\"\\x5a\\x63\\x75\\x5c\\x66\\x1e\\x6d\\x63\\x76\\x5d\\x6c\\x29\\x08\\x2d\\x06\\x0e\\xc9\\xf8\\xc1\\xf8\\xe5\\x15\\x44\\xbc\\x9c\\x78\\x9c\\x1b\\x95\\x93\\x92\\x95\"\n\"\\x91\\x8a\\x8f\\x84\\x99\\x1f\\x74\\xb6\\x7a\\xcb\\xb7\\x1a\\xa9\\x89\\x91\\x7e\\x86\\x84\\x88\\x83\\x7e\\x1e\\x77\\x70\\x3d\\x76\\x60\\x1b\\x71\\x8a\\x83\\x86\"\n\"\\x7e\\x1a\\x75\\xad\\x81\\xe2\\x85\\x1e\\x25\\xfb\\x4d\\x05\\x97\\x6c\\x6e\\x91\\x6b\\x1b\\xfb\\x1a\\xfb\\x00\\xfb\\x00\\xfb\\x1a\\xfb\\x19\\xf7\\x00\\xfb\\x00\"\n\"\\xf7\\x1a\\xf7\\x19\\xf7\\x00\\xf7\\x00\\xf7\\x1a\\xd8\\x66\\xd3\\x4c\\xb9\\x1f\\xfb\\x22\\x7b\\x15\\xee\\xdc\\x3b\\x28\\x28\\x3b\\x3a\\x28\\x27\\x3b\\xdb\\xee\"\n\"\\xee\\xdb\\xdc\\xee\\x1f\\x0e\\xfc\\x4d\\xf7\\x17\\xf8\\x17\\x15\\xa0\\x06\\xce\\xf7\\x22\\x05\\xad\\xd5\\x91\\x9a\\x9b\\x1a\\x9f\\x7c\\x99\\x74\\x77\\x79\\x81\"\n\"\\x7a\\x80\\x1e\\x7d\\x77\\x86\\x75\\x84\\x45\\x08\\x0e\\xf7\\x81\\xf7\\x43\\x15\\x92\\x7c\\x76\\x8f\\x7b\\x1b\\x4d\\x54\\x56\\x50\\x68\\xa5\\x75\\xb4\\xba\\xb7\"\n\"\\xa2\\xb1\\xa6\\x1f\\x9f\\xa6\\x91\\xa1\\x8d\\xbb\\x08\\xf7\\xb9\\x07\\xc3\\x83\\xb9\\x40\\x37\\x1a\\x59\\x83\\x65\\x73\\x54\\x1e\\xa6\\x06\\xaf\\xb6\\x9e\\xc2\"\n\"\\xc5\\x1a\\xd7\\x6e\\xd1\\x51\\xd2\\x1e\\x58\\xc7\\x8a\\x8d\\x86\\x91\\x83\\x95\\x19\\xc5\\x5f\\x07\\x0e\\xc9\\xf8\\x13\\xf8\\x57\\x15\\x9e\\x72\\xa1\\x78\\xa0\"\n\"\\x7f\\xc3\\x6b\\x94\\x85\\x90\\x82\\x08\\x91\\x80\\x8f\\x78\\x76\\x1a\\xfb\\x7c\\x07\\x92\\x7a\\x74\\x8f\\x78\\x1b\\x46\\x4d\\x56\\x4f\\x68\\xa8\\x75\\xb8\\xbe\"\n\"\\xbb\\xa2\\xb1\\xaa\\x1f\\xa0\\xa6\\x92\\xa1\\x8d\\xbc\\x08\\xf8\\x00\\x07\\x8c\\xd3\\x6a\\xd5\\x5d\\xa7\\x54\\xaf\\x6d\\x9f\\x87\\x8f\\x08\\x7e\\x99\\x85\\x9d\"\n\"\\xa2\\x1a\\x98\\x5f\\xfc\\x80\\x07\\x92\\x7b\\x74\\x8f\\x79\\x1b\\x46\\x4f\\x56\\x4f\\x68\\xa7\\x75\\xb7\\xbe\\xbb\\xa2\\xb1\\xa8\\x1f\\xa0\\xa6\\x92\\xa1\\x8d\"\n\"\\xbc\\x08\\x8e\\xf8\\x0a\\x15\\xf7\\x03\\x4f\\xa3\\x67\\x8f\\xfb\\x08\\xfb\\x06\\xc8\\x74\\xae\\x87\\xf7\\x09\\x08\\x0e\\x32\\x1d\\xfb\\x66\\xf8\\x1a\\xbb\\x1d\"\n\"\\x87\\x85\\x85\\x1e\\x0e\\x38\\xca\\xf8\\x7d\\x15\\xd0\\xab\\xb6\\xbe\\xbe\\x1a\\xa7\\x76\\xa3\\x72\\x74\\x77\\x76\\x73\\x81\\x8f\\x82\\x93\\x84\\x1e\\x99\\x7e\"\n\"\\x8e\\x86\\x81\\x1a\\x73\\x74\\x75\\x5c\\x77\\x1e\\xf7\\x8c\\x49\\x15\\x4d\\x83\\x81\\x8a\\x4b\\x86\\x85\\x78\\x18\\x8e\\xa0\\x8b\\x8b\\x92\\x1b\\x97\\x96\\x82\"\n\"\\x80\\x84\\x88\\x7d\\x85\\x77\\x1f\\x21\\xfb\\xf5\\x05\\xd3\\x06\\xac\\xf7\\x06\\x9b\\xc3\\xa5\\xb8\\xbe\\xcb\\x19\\xd6\\xc6\\xaf\\xa9\\xa8\\x1b\\x99\\x96\\x7e\"\n\"\\x7a\\x80\\x88\\x7e\\x85\\x76\\x1f\\x3e\\xfb\\x8e\\x05\\x87\\x80\\x89\\x7f\\x84\\x1a\\x73\\x9c\\x7b\\xa4\\xb1\\xb6\\xab\\xca\\xba\\x1e\\x82\\x94\\x05\\x67\\x6e\"\n\"\\x72\\x76\\x7d\\x1b\\x84\\x85\\x91\\x93\\x8f\\x8d\\x93\\x8d\\x95\\x1f\\xd3\\xf7\\x8d\\x05\\x90\\x9d\\x8e\\x9f\\x9d\\x1a\\xb2\\x77\\xa2\\x6a\\x4f\\x4b\\x51\\xfb\"\n\"\\x26\\x25\\x1e\\x0e\\x32\\x1d\\xaf\\xf8\\xc1\\xbe\\x1d\\x32\\x1d\\xfc\\x0b\\xfc\\x0a\\x30\\x1d\\xf7\\xe8\\xf8\\xa4\\xf7\\x6c\\x15\\xf7\\x83\\xc8\\xfb\\x60\\x06\"\n\"\\xe3\\xf7\\x2f\\x05\\xf7\\x08\\xc9\\x3a\\x06\\xac\\xc6\\x61\\xa3\\x5c\\x38\\x05\\xfb\\x23\\xa7\\x0a\\x37\\xdc\\x69\\x1e\\x6a\\x52\\xb6\\x74\\xb1\\xce\\x05\\x88\"\n\"\\xa4\\x99\\x8a\\xb4\\x1b\\xf7\\xac\\xc9\\xfb\\xb7\\x06\\x77\\x85\\x8b\\x8c\\x81\\x1f\\xab\\xf7\\x2d\\x15\\x3a\\xfb\\x21\\x57\\x9d\\x6c\\xbe\\x88\\xd3\\x19\\xf7\"\n\"\\xb6\\xf7\\x6c\\x15\\x33\\xfb\\x2f\\x05\\xfb\\x5e\\x06\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\x0e\\xf7\\xe8\\xf8\\xcf\\xf7\\xd4\\x15\\xf7\\x49\\xcd\\xfb\\x28\"\n\"\\x06\\xba\\xe8\\x50\\xa9\\x4d\\xfb\\x0f\\x05\\xfb\\xae\\x49\\xf7\\x8d\\x06\\x47\\xfb\\x1a\\x05\\xfb\\x49\\x49\\xf7\\x28\\x06\\x5c\\x2e\\xc6\\x6d\\xc9\\xf7\\x0f\"\n\"\\x05\\xf7\\xae\\xcd\\xfb\\x8d\\x06\\x0e\\xfb\\x6c\\xf7\\x8f\\xf7\\x51\\x15\\x8a\\xc6\\x87\\xbd\\x84\\xb2\\x08\\xd2\\x7d\\x72\\xaf\\x65\\x1b\\x5b\\x61\\x54\\x38\"\n\"\\x7e\\x1f\\x9b\\x85\\x05\\xbe\\x96\\xa4\\xb3\\xa0\\x1b\\x9b\\x93\\x7d\\x68\\x92\\x1f\\x96\\x52\\x96\\xfb\\x0e\\x4d\\x1a\\x51\\x8a\\x72\\x88\\x69\\x1e\\xa0\\x06\"\n\"\\x98\\x9c\\x8b\\x8b\\xa7\\xae\\xcd\\xde\\x93\\x97\\xaf\\xc8\\x08\\xb8\\xdb\\xa4\\xcb\\xb5\\x1a\\xb0\\x73\\xa8\\x6d\\x74\\x78\\x79\\x73\\x7c\\x93\\x7c\\x9a\\x83\"\n\"\\x1e\\x9e\\x7f\\x8f\\x86\\x7c\\x1a\\x54\\x5c\\x2c\\x40\\x2a\\x1e\\x0e\\x2b\\x1d\\xf7\\x36\\xf7\\x7a\\x3e\\x1d\\x2b\\x1d\\xfb\\x1c\\xd5\\xaf\\x1d\\x93\\xfb\\x34\"\n\"\\xac\\x1d\\x2b\\x1d\\xf7\\x4a\\xf7\\x37\\x29\\x1d\\xb9\\xf7\\x7c\\xf8\\x4c\\x15\\xfb\\x0c\\x32\\x58\\x35\\xfb\\x02\\x1a\\x2b\\xc0\\x46\\xd3\\xbf\\xbc\\xac\\xcd\"\n\"\\xbc\\x1e\\x4b\\x9a\\xad\\x68\\xbc\\x1b\\xf7\\x02\\xf4\\xf7\\x36\\xf7\\x40\\xcf\\x6a\\xbf\\x61\\x74\\x77\\x78\\x74\\x7b\\x93\\x7c\\x9c\\x7b\\x1f\\xb6\\x63\\x92\"\n\"\\x7e\\x61\\x1a\\xfb\\x09\\x33\\xfb\\x14\\x3c\\x63\\x6f\\xad\\xd0\\x7d\\x1e\\xc1\\xe6\\x9d\\xb8\\xb9\\x1a\\xa6\\x80\\x9a\\x77\\x5e\\x6e\\x4b\\x28\\x78\\x8c\\x7d\"\n\"\\x8e\\x6e\\x1e\\x4c\\x5f\\x58\\x64\\x65\\x1b\\x65\\x74\\xae\\xc4\\xee\\xc0\\xf7\\x2a\\xc7\\xd2\\x1f\\x0e\\xb1\\xf8\\x22\\xf8\\x76\\x15\\xb5\\x06\\xa0\\xba\\x05\"\n\"\\xa3\\xbe\\x98\\xb3\\xa0\\x1a\\x9f\\x81\\x96\\x78\\x62\\x7d\\x6e\\x22\\x80\\x1e\\xfb\\x43\\x29\\x15\\xfb\\x0c\\x32\\x58\\x36\\xfb\\x03\\x1a\\x2b\\xc0\\x46\\xd3\"\n\"\\xbf\\xbd\\xac\\xcd\\xbb\\x1e\\x4b\\x9a\\xad\\x68\\xbc\\x1b\\xf7\\x02\\xf4\\xf7\\x36\\xf7\\x40\\xcf\\x6a\\xbf\\x61\\x74\\x77\\x78\\x74\\x7c\\x94\\x7b\\x9b\\x7b\"\n\"\\x1f\\xb7\\x63\\x92\\x7d\\x61\\x1a\\xfb\\x08\\x33\\xfb\\x14\\x3b\\x63\\x70\\xad\\xd0\\x7c\\x1e\\xc1\\xe6\\x9d\\xb8\\xb9\\x1a\\xa6\\x80\\x9a\\x76\\x5f\\x6e\\x4a\"\n\"\\x29\\x77\\x8c\\x7d\\x8e\\x6f\\x1e\\x4c\\x5f\\x59\\x64\\x64\\x1b\\x65\\x74\\xae\\xc4\\xee\\xc0\\xf7\\x29\\xc7\\xd3\\x1f\\x0e\\x83\\x1d\\x0e\\x83\\x1d\\x8a\\xca\"\n\"\\x15\\xb5\\x06\\xa1\\xba\\x05\\xa1\\xbc\\x99\\xb5\\x9f\\x1a\\xa0\\x81\\x96\\x78\\x62\\x7d\\x6f\\x21\\x81\\x1e\\x0e\\xf7\\xd3\\x93\\x16\\xfa\\x56\\xd3\\xfe\\x0e\"\n\"\\xfa\\x03\\x43\\x06\\x0e\\x70\\x1d\\xc9\\xf8\\x74\\x3b\\x0a\\xf7\\x03\\xf9\\x36\\x15\\xa2\\xb9\\xaa\\x94\\xb1\\x1b\\xed\\xc6\\x2a\\xfb\\x35\\x6d\\x89\\x73\\x86\"\n\"\\x5b\\x1f\\xbe\\x4b\\x67\\x9a\\x58\\x1b\\x5b\\x65\\x7a\\x68\\x68\\x1f\\x5c\\x5c\\x70\\x4a\\x4a\\x1a\\x20\\xde\\x35\\xf3\\xc8\\xc1\\xa5\\xbb\\xb3\\x1e\\xc3\\xd0\"\n\"\\xb1\\xf7\\x1d\\xf7\\x1e\\x1a\\xf7\\x57\\xfb\\x08\\xf7\\x2a\\xfb\\x2b\\x64\\x68\\x83\\x77\\x54\\x1e\\xf7\\xc0\\xfc\\x31\\x15\\x7a\\xfb\\x0a\\x7d\\x55\\x6f\\x5d\"\n\"\\x08\\x5c\\x6f\\x65\\x71\\x64\\x1b\\x54\\x69\\xbe\\xe0\\xf7\\x08\\xcd\\xe9\\xdd\\xb0\\xa5\\x7e\\x61\\xb5\\x1f\\x0e\\xf7\\x82\\xf7\\x79\\x62\\x0a\\xf8\\x51\\x67\"\n\"\\x15\\x53\\x06\\x9d\\xcf\\x05\\x8c\\x8d\\x8b\\x8d\\x8c\\x1a\\x92\\x8c\\x87\\x8f\\x85\\x1b\\x83\\x8b\\x8b\\x83\\x85\\x1f\\x6c\\x64\\x68\\x6f\\x70\\x82\\x08\\x77\"\n\"\\x83\\x86\\x86\\x82\\x1a\\x88\\x8b\\x89\\x8c\\x87\\x1e\\xbe\\x06\\x59\\xfb\\x51\\x89\\x82\\x05\\x8a\\x8a\\x89\\x8a\\x88\\x1e\\x84\\x72\\x86\\x76\\x83\\x1a\\x7a\"\n\"\\x9c\\x7e\\xa0\\xae\\xa1\\x9e\\xd3\\xbc\\x1e\\x7b\\x94\\x05\\x5c\\x67\\x80\\x81\\x82\\x1b\\x87\\x88\\x8f\\x8f\\x8c\\x8b\\x8d\\x8c\\x8d\\x1f\\xc8\\xf7\\x7c\\x05\"\n\"\\xc7\\x06\\x0e\\x20\\xf7\\xad\\xf8\\x52\\x15\\x4f\\x86\\x61\\x79\\x5e\\x63\\x08\\x4e\\x54\\x65\\x35\\x35\\x1a\\x2b\\xbf\\x52\\xed\\x7f\\x1e\\x5b\\xfb\\x54\\x05\"\n\"\\xc7\\x06\\xbc\\xf7\\x54\\xda\\x94\\xbd\\xa2\\xbf\\xbc\\x19\\xc9\\xc7\\xb3\\xe3\\xd9\\x1a\\xdf\\x54\\xcb\\x43\\x68\\x68\\x7b\\x6e\\x72\\x1e\\x78\\x76\\x7e\\x6e\"\n\"\\x7c\\x4e\\x47\\xfb\\xa4\\x18\\x54\\x9e\\x75\\xac\\xcb\\x1a\\xe2\\xb0\\xf7\\x02\\xb8\\xbc\\x1e\\xa3\\xa5\\x9f\\x97\\xaf\\x96\\x08\\xb8\\xfb\\x1a\\x15\\x97\\xbb\"\n\"\\x90\\x9a\\x93\\x96\\x08\\x9a\\x96\\x99\\x93\\x9a\\x1b\\xb0\\xa7\\x5f\\x4f\\x3e\\x6a\\x31\\x5d\\x5e\\x1f\\x6a\\x6a\\x6c\\x7c\\x52\\x81\\x08\\x0e\\xfb\\x33\\xf8\"\n\"\\xd1\\xf8\\x46\\x15\\xfc\\x18\\x06\\x5d\\x81\\x88\\x75\\x6b\\x1f\\x27\\x45\\x96\\x77\\xd0\\xb0\\xab\\x94\\xcf\\x8a\\x19\\x40\\xfb\\x61\\x86\\x80\\x5d\\x63\\x69\"\n\"\\x72\\x8b\\x8b\\x82\\x81\\x08\\x7d\\x7c\\x83\\x79\\x7b\\x1a\\x77\\x97\\x80\\xa2\\xae\\xa5\\x9f\\xb9\\xa3\\x1e\\x9c\\xad\\xa3\\xcd\\x9f\\xd0\\x93\\xa7\\x91\\x9e\"\n\"\\x8d\\x91\\xa6\\xde\\x18\\xf7\\x5d\\x06\\x56\\x63\\x74\\x6b\\x7b\\x51\\x69\\xfb\\x1c\\x18\\x82\\x69\\x8a\\x85\\x7e\\x1a\\x71\\x97\\x71\\x97\\x8d\\x8d\\x8c\\x8f\"\n\"\\x97\\x1e\\xf7\\x09\\xb9\\x8c\\x9f\\x05\\x7d\\x62\\x8b\\x8b\\x83\\x1b\\x7c\\x7d\\x99\\x99\\x90\\x8b\\x8b\\x95\\xb3\\x1f\\xa8\\xf7\\x04\\xa0\\xe3\\x8f\\x96\\x9e\"\n\"\\xa9\\x19\\xf7\\x09\\x06\\x0e\\xf7\\xe8\\xf9\\x45\\xf9\\x55\\x15\\xfd\\x72\\x07\\x54\\x8a\\x78\\x77\\x54\\xbb\\x0a\\xf9\\x3b\\x07\\xc4\\xa0\\xa2\\xc0\\x1e\\x9c\"\n\"\\x9d\\xfd\\x9f\\x79\\x9b\\x06\\xc1\\x9f\\x75\\x51\\x8c\\x1f\\xfd\\x3b\\x07\\x54\\x8a\\x77\\x77\\x55\\xbb\\x0a\\xf9\\x72\\x07\\x0e\\xf7\\xe8\\xf9\\x93\\xc9\\x15\"\n\"\\xfb\\xb7\\x06\\xfb\\x0d\\x57\\xc2\\xf7\\x16\\xf7\\x15\\xbf\\xc3\\xf7\\x0d\\x1f\\xf7\\xb7\\xc9\\xfb\\xac\\xcd\\x0a\\x43\\x2b\\x1a\\xfb\\x07\\xb8\\x37\\xca\\x0a\"\n\"\\x06\\x0e\\xf7\\xe8\\xf7\\x7d\\xc9\\x15\\x4d\\xf7\\xac\\x07\\xde\\xae\\x92\\xa4\\xb1\\x1f\\xcc\\xb7\\xac\\xd3\\xf2\\x1a\\xf6\\x5c\\xe0\\x3e\\xac\\x1e\\x99\\x69\"\n\"\\x70\\x8f\\x46\\x1b\\xfb\\xac\\x4d\\xf7\\xb7\\x06\\xf7\\x0d\\xbf\\x54\\xfb\\x16\\xfb\\x16\\x57\\x54\\xfb\\x0d\\x1f\\x0e\\x64\\xf8\\x47\\xf8\\x46\\x15\\x43\\x06\"\n\"\\xfb\\x03\\xfc\\x33\\x05\\x55\\x92\\x6e\\xa8\\xbb\\x1a\\xa2\\x91\\xb1\\x93\\xa8\\x1e\\xb1\\xf7\\x23\\x05\\x90\\x9e\\x8e\\x9e\\x99\\x1a\\xaa\\x78\\xa4\\x72\\x6d\"\n\"\\x67\\x77\\x6b\\x6e\\x1e\\x78\\x76\\x7f\\x78\\x74\\x5f\\x9a\\x84\\x18\\xc5\\xaa\\xac\\xaf\\xa3\\x1b\\x94\\x90\\x85\\x80\\x84\\x8a\\x86\\x85\\x75\\x1f\\x6a\\xfb\"\n\"\\x0f\\x05\\x81\\x66\\x86\\x6d\\x77\\x1a\\x62\\x9b\\x6a\\xab\\x70\\x1e\\xa8\\x73\\xa2\\x83\\xbb\\x86\\x5e\\xfb\\x3c\\x18\\xd3\\x06\\xb7\\xf7\\x39\\xe6\\x93\\xc7\"\n\"\\xad\\xbe\\xd2\\x19\\xb6\\xc7\\xad\\xf4\\xd5\\x1a\\xc7\\x75\\xb2\\x68\\x72\\x75\\x74\\x72\\x7d\\x91\\x7b\\x97\\x7c\\x1e\\xae\\x5c\\x8f\\x83\\x69\\x1a\\x58\\x6f\"\n\"\\x46\\x64\\x5e\\x1e\\x62\\x5b\\x5e\\x75\\x43\\x81\\x08\\x0e\\xfb\\xdb\\xf7\\xe0\\xf8\\x58\\x15\\x61\\xad\\x79\\xa8\\xad\\x1a\\x99\\x92\\x94\\x96\\x8c\\x8c\\x8b\"\n\"\\x8a\\x8d\\x1e\\x89\\x94\\x8f\\x8a\\x94\\x1b\\xb5\\xa8\\xa6\\xb1\\xa5\\x79\\x9c\\x6e\\x53\\x5c\\x56\\x4b\\x5a\\xab\\x59\\xbd\\x70\\x1f\\x0e\\xfb\\xa3\\x41\\x0a\"\n\"\\xf7\\x37\\xa7\\x1d\\xc9\\xf8\\x5b\\x4a\\x15\\xf7\\x32\\xfa\\x68\\x53\\x94\\xfb\\x0f\\xfd\\x95\\xfb\\x4e\\xf8\\x0d\\xfb\\x37\\x3c\\xa3\\x58\\xea\\xba\\x05\\x0e\"\n\"\\xfb\\xa3\\x41\\x0a\\xf8\\x2d\\xf9\\x29\\x21\\x0a\\xfb\\xa3\\xf7\\x0d\\x16\\xbf\\xf7\\x3e\\x9c\\xb6\\xb9\\xd7\\x08\\xc4\\xad\\xa6\\xa9\\x9c\\x1b\\x92\\x8f\\x87\"\n\"\\x81\\x90\\x1f\\x7a\\x93\\x93\\x86\\x9f\\x1b\\xa9\\x9b\\x9c\\xac\\xef\\x1d\\x61\\x62\\x4f\\x7c\\x64\\x7c\\x67\\x18\\xc1\\xf7\\x6d\\x88\\x8d\\x42\\x7e\\x80\\x89\"\n\"\\x44\\x7f\\x19\\x7a\\x07\\x8f\\xa0\\x90\\xc3\\x1d\\x60\\xfb\\xa2\\x33\\x1d\\xf7\\x79\\xf7\\x97\\xf7\\x00\\x15\\xf7\\x68\\xf8\\x4a\\xcd\\xfc\\x8c\\xfb\\xaa\\x07\"\n\"\\x0e\\xfb\\x48\\x75\\xfb\\x40\\x15\\xda\\x06\\xc3\\xf7\\x65\\x05\\x67\\xab\\xa0\\x80\\xb0\\x1b\\xf7\\x0e\\xf7\\x0b\\xf7\\x22\\xf7\\x26\\xee\\x53\\xce\\x38\\x59\"\n\"\\x57\\x76\\x66\\x63\\x1f\\x67\\x6a\\x78\\x64\\x74\\x34\\x08\\xe8\\xbe\\x15\\xe3\\xa2\\xb8\\xc0\\xbe\\x1b\\xb4\\xa4\\x6a\\x52\\x4a\\x75\\x2d\\x6e\\x4f\\x1f\\x4d\"\n\"\\x6d\\x61\\x6a\\x5b\\x1b\\x6e\\x77\\x99\\xaf\\x75\\x1f\\x0e\\xfb\\xa3\\x31\\x0a\\xf7\\x30\\xf7\\xf0\\x2b\\x0a\\xfb\\xa3\\xf7\\x21\\x81\\x15\\x8a\\x93\\x8e\\x8b\"\n\"\\x92\\x1b\\xe0\\x6f\\x0a\\x7b\\x06\\x77\\xfb\\x33\\x05\\x9b\\x06\\x9c\\x94\\x8f\\x8f\\x96\\x1b\\x98\\x94\\x89\\x83\\xa9\\x1f\\x50\\x2d\\x7c\\x0a\\x82\\x85\\x2c\"\n\"\\x0a\\xfb\\xa3\\x31\\x0a\\xf7\\xa5\\xf8\\x97\\x20\\x0a\\xfb\\xa3\\x31\\x0a\\x83\\xfc\\x34\\x40\\x1d\\xfb\\x87\\xf7\\xd6\\xf8\\x17\\x15\\xa1\\x06\\xcf\\xf7\\x21\"\n\"\\x05\\x9f\\xb5\\x9c\\xbb\\x9c\\x1a\\x9f\\x7d\\x98\\x75\\x76\\x75\\x7f\\x7a\\x81\\x1e\\x7e\\x76\\x87\\x77\\x84\\x44\\x08\\xfb\\x53\\xfb\\x20\\x15\\xa0\\x06\\xce\"\n\"\\xf7\\x22\\x05\\xae\\xd6\\x90\\x98\\x9c\\x1a\\x9f\\x7c\\x99\\x75\\x78\\x78\\x81\\x7a\\x7f\\x1e\\x7d\\x77\\x86\\x76\\x84\\x44\\x08\\x0e\\xfb\\x3b\\xf8\\xd0\\xf8\"\n\"\\x46\\x15\\xfb\\x85\\x06\\x22\\x55\\x76\\x48\\x4d\\x1f\\x55\\x52\\x6a\\x3b\\x44\\x1a\\x33\\xca\\x52\\xed\\xd1\\xce\\xa7\\xbd\\xbc\\x1e\\xbf\\xc0\\xa8\\xcc\\xca\"\n\"\\x1a\\xc7\\x73\\xb0\\x59\\x9e\\x1e\\xaa\\x89\\xc4\\x88\\xcb\\x88\\xa3\\x8a\\x05\\xfb\\x64\\x90\\x15\\x9e\\x69\\x90\\x78\\x64\\x1a\\xfb\\x1d\\x3d\\xfb\\x07\\x2e\"\n\"\\x51\\x68\\xb6\\xd2\\xc0\\x9d\\xc3\\xa9\\xb5\\x1e\\xc2\\xb4\\xba\\xa3\\xd5\\x1b\\x0e\\xf7\\xe8\\xf8\\x1b\\xf8\\x9a\\x15\\x70\\x74\\x74\\x71\\x6f\\xa2\\x74\\xa6\"\n\"\\xa6\\xa2\\xa2\\xa6\\xa6\\x74\\xa2\\x70\\x1f\\xfb\\x14\\xfb\\x00\\x15\\x92\\x36\\x96\\x62\\xa9\\x5e\\x08\\x4c\\xb5\\xcb\\x6b\\xde\\x1b\\xd8\\xc7\\xa6\\xc1\\xb5\"\n\"\\x1f\\xaf\\xba\\x9a\\xb8\\x92\\xe8\\x80\\x59\\x80\\x75\\x71\\x6d\\x08\\x54\\x5b\\x4f\\x71\\x3a\\x1b\\x3a\\x4f\\xa5\\xc2\\x5b\\x1f\\x71\\xa9\\x80\\xa1\\x80\\xbd\"\n\"\\x08\\xf7\\xee\\xf7\\x00\\x15\\x70\\x74\\x74\\x71\\x6f\\xa2\\x74\\xa6\\xa6\\xa2\\xa2\\xa6\\xa6\\x74\\xa2\\x70\\x1f\\xfb\\x01\\xf7\\x68\\x95\\x1d\\x89\\x5a\\x15\"\n\"\\xf7\\x45\\xf7\\x21\\xfb\\x20\\xfb\\x44\\xfb\\x43\\xfb\\x21\\xfb\\x21\\xfb\\x43\\xfb\\x41\\xfb\\x23\\xf7\\x21\\xf7\\x3e\\xf7\\x47\\xf7\\x1e\\xf7\\x22\\xf7\\x44\"\n\"\\x1f\\x0e\\xf7\\xe8\\xf8\\xab\\xf7\\x99\\x15\\x7f\\x07\\x44\\x6b\\x45\\x5a\\x66\\x1e\\x6c\\x62\\x56\\x7a\\x57\\x1b\\x7e\\x74\\xf8\\x77\\xa2\\x06\\xfb\\x32\\x91\"\n\"\\x3c\\xe3\\x8e\\xf7\\x3d\\x08\\x35\\xb9\\xb6\\x6d\\xda\\x1b\\xcd\\xc4\\xca\\xd4\\xd0\\x73\\xb0\\xfb\\x01\\xef\\x1f\\xfb\\x02\\xf1\\x7a\\xa5\\x63\\xf7\\x09\\x7c\"\n\"\\x30\\x4d\\x30\\x23\\x39\\x08\\x3c\\x49\\x67\\x51\\x4c\\x1a\\x40\\xc8\\x4d\\xd4\\xb4\\xb4\\x9c\\xa9\\xac\\x1e\\x9e\\x9d\\x96\\x9a\\x9c\\xb0\\x08\\x0e\\xf7\\xe8\"\n\"\\xf7\\xee\\xf9\\x5b\\x15\\xf7\\x85\\x06\\xf4\\x8a\\xa5\\x75\\x9a\\x26\\x08\\xa2\\x06\\x82\\xf7\\x39\\x05\\xfc\\xaf\\x06\\xf7\\x66\\xfc\\x67\\xfb\\x6e\\xfc\\x2c\"\n\"\\x05\\xf8\\xc8\\x06\\xbc\\xf7\\x66\\x05\\x74\\x06\\x6f\\x3b\\x6c\\x78\\x26\\x8c\\x08\\xfb\\xbc\\x06\\xf7\\x49\\xf7\\xf4\\x05\\x0e\\xf7\\xe8\\xf7\\xcd\\xf8\\x77\"\n\"\\x15\\x6e\\x66\\x7c\\x67\\x85\\x5b\\x08\\xfb\\x05\\x54\\xf7\\x05\\x06\\x8f\\x61\\x9e\\x5b\\xa6\\x6a\\x3b\\x3c\\x18\\xb1\\x65\\xdb\\xdb\\xb1\\x6e\\xb2\\x7b\\xb8\"\n\"\\x86\\x19\\xfb\\x05\\xc1\\xf7\\x05\\x07\\xb7\\x90\\xb9\\x9e\\xab\\xa5\\xdb\\x3b\\x18\\xb0\\xb1\\x3b\\xdb\\xa8\\xae\\x9c\\xb5\\x90\\xb8\\x19\\xf7\\x05\\xc2\\xfb\"\n\"\\x05\\x06\\x86\\xb6\\x79\\xb7\\x70\\xad\\xda\\xda\\x18\\x66\\xb1\\x3b\\x3b\\x69\\xa6\\x62\\x9c\\x5c\\x92\\x19\\xf7\\x04\\x55\\xfb\\x04\\x07\\x60\\x86\\x5f\\x79\"\n\"\\x68\\x6f\\x3b\\xdb\\x18\\x65\\x65\\x05\\xf7\\x9c\\x55\\x15\\xec\\xd8\\x40\\x2d\\x2b\\x3f\\x3e\\x2c\\x2d\\x3e\\xd8\\xea\\xe7\\xd8\\xd9\\xe6\\x1f\\x0e\\xfb\\xc2\"\n\"\\xf8\\x50\\xf8\\x46\\x15\\xfb\\xa7\\x06\\x60\\x7a\\x86\\x75\\x6f\\x1f\\x27\\x3d\\x99\\x75\\xd6\\xba\\xa7\\x94\\xdc\\x8c\\x19\\xb4\\x06\\x4e\\x59\\x7c\\x76\\x79\"\n\"\\x4d\\x64\\xfb\\x2c\\x18\\x85\\x75\\x8a\\x84\\x83\\x1a\\x73\\x99\\x71\\x97\\x8c\\x1e\\x8e\\x8f\\x8c\\x8e\\x91\\x1f\\xf7\\x0f\\xba\\x90\\xa1\\x05\\x81\\x71\\x72\"\n\"\\x84\\x7d\\x1b\\x7d\\x85\\x92\\x9a\\x94\\x8b\\x8b\\x96\\xb7\\x1f\\xb1\\xf7\\x27\\x98\\xbc\\x91\\x9a\\x9d\\xa8\\x19\\xf7\\x46\\x06\\x0e\\xfc\\x12\\xf7\\x4a\\xf7\"\n\"\\xc0\\x15\\xa4\\xeb\\x05\\xdf\\x06\\x90\\xab\\x05\\x45\\x1d\\x8c\\x1a\\x92\\xa0\\x1d\\x72\\x2b\\x05\\x38\\x06\\x83\\x68\\x05\\xdd\\x06\\x65\\xfb\\x24\\x89\\x81\"\n\"\\x8a\\x88\\x93\\x1d\\xc0\\xf7\\x5e\\x05\\xf3\\x06\\x92\\xae\\x05\\x0e\\xfb\\xe2\\xf7\\xbd\\xf8\\x40\\x15\\x3b\\x06\\xa7\\xf2\\x05\\x8c\\x8d\\x8b\\x8d\\x8d\\x1a\"\n\"\\x91\\x4f\\x1d\\x85\\xb3\\x9a\\x1d\\x0e\\xfc\\x12\\xf0\\x81\\x15\\xb3\\x93\\xab\\xa9\\xc1\\xdd\\x7e\\x92\\x18\\x4b\\x59\\x7c\\x7c\\x7b\\x1b\\x82\\x85\\x92\\x98\"\n\"\\x8c\\x8b\\x8b\\x8c\\x8f\\x1f\\xe3\\xf7\\xe1\\x05\\xdf\\x06\\x90\\xab\\x05\\x45\\x1d\\x8d\\x1a\\x91\\x89\\x8e\\x85\\x85\\x88\\x8a\\x83\\x85\\x1e\\x63\\x57\\x4f\"\n\"\\x5a\\x6b\\x82\\x08\\x72\\x83\\x84\\x85\\x81\\x1a\\x84\\xd5\\x07\\x43\\xfb\\xa7\\x89\\x82\\x05\\x8a\\x89\\x86\\x89\\x85\\x1e\\x82\\x6c\\x83\\x6b\\x80\\x1a\\x7c\"\n\"\\x95\\x7f\\x9c\\x85\\x1e\\x54\\x32\\x7c\\x0a\\x81\\x86\\x2c\\x0a\\xfb\\x3d\\xf7\\xf6\\xf9\\x27\\x15\\x33\\x39\\x3f\\xfb\\x0f\\x5d\\x1f\\x66\\x25\\x6e\\xfb\\x16\"\n\"\\x47\\x1a\\xfb\\x01\\xb8\\x4e\\xda\\xdc\\xd7\\xca\\xf4\\xb8\\x1e\\xb8\\xf2\\xae\\xf7\\x2c\\xe4\\x1a\\xea\\x5a\\xc9\\x40\\x1e\\xfb\\x3b\\xfb\\xba\\x15\\xad\\xf7\"\n\"\\x0f\\x9c\\xba\\xa7\\xba\\x08\\xb0\\xa1\\xa9\\xa0\\xa9\\x1b\\xb3\\xa4\\x6b\\x59\\x62\\x83\\x58\\x74\\x26\\x1f\\x86\\x71\\x15\\x6e\\xfb\\x07\\x76\\x47\\x77\\x5e\"\n\"\\x08\\x47\\x6e\\x68\\x69\\x62\\x1b\\x63\\x71\\xab\\xbd\\xbc\\x9a\\xde\\xa9\\xf7\\x08\\x1f\\x0e\\xfb\\xdb\\xf7\\x6c\\xf8\\x76\\x15\\xb5\\x06\\xa1\\xba\\x05\\xa2\"\n\"\\xbe\\x98\\xb3\\x9f\\x1a\\xa0\\x81\\x96\\x78\\x62\\x7d\\x6e\\x22\\x81\\x1e\\x0e\\xfb\\x3b\\x2a\\x1d\\x6d\\xf8\\xb2\\x15\\x4c\\x72\\x5a\\x67\\x4e\\x1b\\x4b\\x63\"\n\"\\xaf\\xca\\x87\\x75\\x0a\\x2a\\x1d\\xfb\\xbe\\xf8\\x16\\xaf\\x1d\\x92\\xfb\\x34\\x15\\xaf\\x9d\\x0a\\x85\\x1e\\x0e\\x2a\\x1d\\x9f\\xf8\\x6f\\x15\\xfb\\xc1\\x46\"\n\"\\x1d\\xaf\\x32\\x15\\x7e\\x60\\x05\\xf8\\x8e\\x06\\x98\\xb6\\x05\\xfc\\xae\\xfb\\x09\\x15\\x7e\\x60\\x05\\xf8\\x8e\\x06\\x98\\xb6\\x05\\x0e\\xfc\\x2e\\x0e\\xfb\"\n\"\\xdb\\xab\\x0a\\x23\\x50\\x1d\\xfc\\x76\\xfd\\x8c\\x30\\x1d\\xfc\\x12\\xf7\\xbc\\xf8\\x40\\x15\\x45\\x1d\\x8c\\x1a\\x92\\x4f\\x1d\\xfb\\xc3\\xfd\\x2e\\x33\\x1d\"\n\"\\xfb\\xdb\\xf8\\x2f\\xf8\\xdb\\x29\\x1d\\xfc\\x2e\\x46\\x0a\\x42\\xf8\\x60\\x16\\x97\\xf9\\x2a\\x05\\x78\\x06\\xfc\\x8d\\xfd\\x2a\\x05\\xf8\\x34\\xb4\\x15\\xfb\"\n\"\\x97\\x06\\x71\\x7c\\x92\\x98\\x93\\x95\\x9e\\x97\\x9c\\x1f\\xf7\\xb6\\xf8\\x15\\x05\\x0e\\xca\\xf9\\x58\\xf7\\x37\\x15\\x6d\\x06\\x65\\x4b\\x75\\x7c\\x4c\\x88\"\n\"\\x08\\x57\\x06\\x78\\x83\\x8a\\x89\\x75\\x1f\\x90\\x8e\\x91\\x8e\\x91\\x8e\\xb8\\xa2\\x18\\xc8\\xab\\x9b\\x97\\xb1\\xb8\\x08\\xcc\\xd7\\xae\\xe5\\xe4\\x1a\\xd3\"\n\"\\x74\\xc5\\x62\\xae\\x1e\\xaf\\x5f\\x48\\xa1\\x45\\x1b\\xfb\\x0a\\xfb\\x06\\x57\\x33\\x41\\x1f\\x4a\\x3f\\x67\\x2c\\x2f\\x1a\\x2e\\xb0\\x50\\xe2\\x5f\\x1e\\x8d\"\n\"\\x79\\x7e\\x8c\\x83\\x1b\\x59\\x06\\x45\\x7b\\x9a\\xce\\x89\\x1f\\x6d\\x06\\x82\\xfb\\x37\\x05\\xf7\\xa2\\x06\\xa0\\xd9\\x68\\x9b\\x7d\\x97\\x7d\\xa0\\x19\\x76\"\n\"\\xaa\\x80\\xb4\\xb6\\x1a\\xdf\\xa5\\xe9\\xb6\\xd3\\x1e\\xee\\xc6\\xda\\xc0\\xe3\\x1b\\xeb\\xc0\\x52\\x24\\x2f\\x65\\xfb\\x05\\x52\\x38\\x1f\\x62\\x51\\x61\\x6a\"\n\"\\x49\\x70\\x77\\x3d\\x18\\xf7\\xa2\\x06\\x0e\\xfb\\x32\\xf7\\x27\\xf8\\x46\\x15\\x46\\xfb\\x97\\x7e\\x59\\x6e\\x32\\x78\\x5b\\x19\\x67\\x30\\x88\\x80\\x76\\x1a\"\n\"\\x72\\x9d\\x79\\xa4\\xa9\\x9a\\xa2\\xb9\\x92\\x8b\\x95\\x8a\\x96\\x1e\\x8a\\x9f\\x8a\\x9a\\x92\\x1a\\x98\\x8c\\x96\\x8d\\xa2\\x1e\\x7c\\x97\\x96\\x85\\x9c\\x1b\"\n\"\\xa8\\xad\\x9e\\xb1\\xb3\\x1f\\xb0\\xaf\\xa7\\xaf\\xc0\\xde\\x68\\xfb\\x17\\x18\\x86\\x7a\\x89\\x7c\\x80\\x1a\\x75\\x9b\\x7b\\xa0\\xaf\\xbd\\xae\\xbf\\xb1\\x1e\"\n\"\\x81\\x95\\x05\\x6b\\x6e\\x76\\x7b\\x7e\\x1b\\x84\\x87\\x91\\x94\\x92\\x90\\xa4\\x91\\xa0\\x1f\\xe2\\xf7\\xde\\x05\\x44\\x06\\x75\\x34\\x73\\x31\\x7a\\x67\\x54\"\n\"\\x3f\\x19\\x49\\x5b\\x65\\x69\\x6f\\x1b\\x76\\x80\\x95\\x9f\\x95\\x8b\\x8c\\x92\\xa3\\x1f\\xe1\\xf7\\xd8\\x05\\x0e\\xfb\\x92\\xf7\\xed\\xf8\\x50\\x15\\xfb\\x2e\"\n\"\\xfb\\x27\\xfb\\x30\\xfb\\x39\\x36\\xb4\\x62\\xe1\\x94\\x95\\x8b\\x8c\\x92\\x1f\\x8f\\xac\\x8b\\x8b\\x95\\x1b\\xa9\\x99\\x81\\x77\\x6b\\x68\\x6a\\x6b\\x81\\x81\"\n\"\\x8d\\x90\\x7f\\x1f\\x92\\x75\\x89\\x8c\\x80\\x1b\\x70\\x78\\x7b\\x74\\x73\\xa0\\x7c\\xaa\\xd8\\xe7\\xe1\\xd3\\xb6\\x70\\xa7\\x61\\x83\\x82\\x8a\\x8a\\x82\\x1f\"\n\"\\x87\\x6a\\x8b\\x8b\\x7d\\x1b\\x5a\\x78\\x9d\\xba\\xbd\\x9d\\xcf\\xa7\\xc6\\x1f\\xc1\\xa5\\xb0\\xa9\\xb2\\x1b\\x9d\\x9f\\x83\\x7a\\xa3\\x1f\\x79\\xa4\\x94\\x87\"\n\"\\x99\\x1b\\xa5\\xa0\\xa0\\xa4\\xab\\x6d\\x9f\\x5e\\x1f\\x0e\\x5a\\x5b\\x0a\\xfb\\x13\\xf7\\x63\\x15\\xab\\x06\\xfb\\x0b\\xf7\\x2b\\x05\\x9b\\x7e\\x7f\\x92\\x7c\"\n\"\\x1b\\x77\\x7c\\x7c\\x78\\x7e\\x91\\x82\\x98\\x80\\x1f\\x0e\\xc9\\x4e\\x1d\\xf7\\xd1\\xf8\\xfe\\x15\\xaa\\x06\\xfb\\x0b\\xf7\\x2b\\x05\\x9b\\x7e\\x7f\\x92\\x7c\"\n\"\\x1b\\x77\\x7c\\x7c\\x78\\x7e\\x91\\x82\\x99\\x80\\x1f\\x0e\\xfb\\x6c\\x7e\\x1d\\xf7\\x62\\xf7\\xb4\\x15\\xaa\\x06\\xfb\\x08\\xf7\\x2b\\x05\\x9b\\x7e\\x80\\x92\"\n\"\\x7c\\x1b\\x76\\x7c\\x7c\\x77\\x7f\\x90\\x82\\x99\\x80\\x1f\\x0e\\x74\\x1d\\xf7\\x6d\\xf8\\x13\\x15\\xab\\x06\\xfb\\x0b\\xf7\\x2b\\x05\\x9b\\x7e\\x80\\x92\\x7b\"\n\"\\x1b\\x77\\x7c\\x7d\\x77\\x7e\\x91\\x82\\x98\\x80\\x1f\\x0e\\x5a\\xf7\\xde\\xf8\\xee\\x15\\xa0\\x91\\x99\\x91\\xb4\\x1b\\xf7\\x3e\\xad\\x7e\\x49\\x1f\\x80\\x07\"\n\"\\x8a\\x80\\x8a\\x87\\x8a\\x7c\\xa0\\x89\\xab\\xf7\\x2f\\x05\\xfc\\x86\\x7b\\x06\\xba\\x87\\x8f\\x8a\\x97\\x84\\x08\\x94\\x86\\x90\\x80\\x7e\\x1a\\x7b\\x87\\x72\"\n\"\\x84\\x72\\x1e\\x5b\\xfb\\x41\\x26\\x8a\\x82\\x6b\\x05\\xf0\\x06\\x49\\xfb\\x86\\x79\\x4e\\x84\\x85\\x52\\x83\\x19\\x7b\\xf7\\x90\\x9b\\x07\\x51\\x8f\\x79\\x95\"\n\"\\xaa\\x1a\\x94\\x8d\\x98\\x92\\xa2\\x1e\\xc9\\xf7\\x77\\xf4\\x88\\x9b\\x8b\\x98\\x86\\x19\\x9a\\x86\\x94\\x7a\\x77\\x1a\\x7a\\x89\\x7f\\x85\\x6c\\x1e\\x9c\\x86\"\n\"\\xd7\\xf7\\x81\\x79\\x90\\x5e\\x30\\x89\\x8a\\xfb\\x3c\\x89\\x19\\x0e\\xfb\\xa7\\xf7\\x91\\xf7\\x86\\x15\\x8f\\x8d\\x8f\\x8d\\x05\\xca\\xa7\\xa9\\xaf\\xbc\\x1a\"\n\"\\xbf\\x63\\xae\\x4f\\x6d\\x6b\\x81\\x79\\x72\\x1e\\x7b\\x80\\x82\\x83\\x66\\x67\\x97\\x7d\\x18\\xb4\\xb5\\xad\\x9d\\xae\\x1b\\xac\\xa3\\x73\\x68\\x6e\\x7b\\x6e\"\n\"\\x72\\x79\\x1f\\x7f\\x82\\x7b\\x82\\x73\\x7e\\x08\\xfb\\x2e\\x06\\x82\\x68\\x05\\xe7\\x06\\x4f\\x6e\\x6f\\x66\\x59\\x1a\\x4b\\xb7\\x61\\xce\\xc3\\xa8\\x9c\\xd9\"\n\"\\xd8\\x1e\\x7f\\x97\\x05\\x5d\\x5d\\x64\\x76\\x61\\x1b\\x60\\x71\\xa7\\xb9\\xb8\\xa7\\xb0\\xc0\\xa5\\x1f\\xf7\\x34\\x06\\x94\\xae\\x05\\x0e\\xf7\\x87\\xf8\\x52\"\n\"\\xf7\\xfa\\x15\\x7f\\x06\\x35\\xf1\\x4f\\xf5\\xbc\\x1a\\x9f\\x98\\x94\\xaa\\x1e\\x9c\\x24\\x0a\\xfb\\x53\\x06\\x86\\x79\\xb2\\x87\\x9e\\x78\\xc5\\x27\\x19\\xae\"\n\"\\x4f\\x9b\\x73\\xb1\\x54\\xfb\\xbc\\xfb\\xaf\\x18\\x59\\x5c\\x70\\x79\\x5c\\x7b\\x86\\x79\\x18\\xf7\\x78\\x06\\x90\\x9d\\x05\\x71\\x8e\\x84\\x8f\\x99\\x1a\\x93\"\n\"\\x8f\\x91\\x99\\x97\\x1e\\x8d\\x8e\\x91\\x90\\x92\\x92\\xf7\\x8e\\xf7\\x89\\x18\\x9c\\x06\\x54\\xfb\\x70\\x7a\\x46\\x79\\x49\\x1d\\xf7\\x94\\x06\\x8f\\x9d\\x05\"\n\"\\x54\\x8c\\x7b\\x96\\xad\\x1a\\x95\\x8c\\x92\\x90\\x9e\\x1e\\xc4\\xf7\\x75\\x05\\x9c\\x06\\xf7\\x00\\xfb\\x84\\x05\\x98\\x6f\\x8b\\x8b\\x83\\x1a\\x79\\x78\\x7e\"\n\"\\x6e\\x1e\\x86\\x79\\x05\\xbf\\xba\\x1d\\x9d\\x06\\xb7\\xf7\\x55\\x45\\x8a\\x7b\\x97\\x61\\xe4\\x19\\xfb\\x06\\xf7\\x85\\xd9\\xc9\\xa8\\xa3\\xd4\\xca\\x19\\xf7\"\n\"\\x06\\xee\\xaa\\x9f\\xb5\\x8f\\x90\\x9d\\x18\\xfb\\x53\\x22\\x1d\\x9c\\x06\\xa1\\x96\\x87\\x82\\x77\\x73\\x73\\x2b\\x3c\\x1f\\x74\\x79\\x65\\x6b\\x6f\\x72\\x6d\"\n\"\\x72\\x6e\\x72\\x6c\\x72\\x08\\x7c\\x06\\xbd\\xf7\\x5b\\x05\\xd4\\x9d\\x9c\\x99\\xd4\\x1b\\x8f\\x2e\\x1d\\x87\\x79\\x05\\xc1\\x8a\\x9c\\x81\\x69\\x1a\\x82\\x89\"\n\"\\x7c\\x88\\x7f\\x1e\\x0e\\xf7\\x59\\xf8\\x81\\xf8\\x46\\x15\\x81\\x50\\x4e\\x25\\x2c\\xfb\\x09\\x08\\xa1\\xc8\\x92\\xaa\\xb7\\x1a\\xe5\\x62\\xc4\\x4b\\x4e\\x56\"\n\"\\x69\\x3e\\x50\\x1e\\x98\\x81\\x05\\xc0\\xb4\\xb2\\xa5\\xb1\\x1b\\xb5\\xa7\\x60\\x4b\\x53\\x78\\x42\\x6c\\x50\\x1f\\x4e\\x6c\\x6c\\x6e\\x69\\x1b\\x77\\x7b\\x95\"\n\"\\x98\\x93\\x8d\\x8e\\x9c\\x99\\x1f\\x97\\x94\\x90\\x96\\x97\\x1a\\xa1\\x7c\\x9b\\x75\\x6e\\x74\\x70\\x67\\x5e\\xad\\x6a\\xbc\\xe8\\xef\\xe6\\xf7\\x60\\xf7\\x15\"\n\"\\x1e\\x3a\\xfb\\xb0\\x05\\xcc\\x06\\xa1\\xd1\\xc4\\xe9\\xe0\\xf3\\x08\\x76\\x49\\x85\\x6f\\x64\\x1a\\x5a\\x99\\x5c\\x9f\\x78\\x1e\\x94\\x82\\x93\\x88\\xa0\\x85\"\n\"\\x08\\xba\\x80\\xa2\\x69\\x51\\x1a\\x7b\\x8b\\x7c\\x89\\x79\\x1e\\x9d\\x06\\xb8\\xf7\\x52\\x05\\x63\\x77\\x8d\\x90\\x7b\\x1f\\x69\\x96\\x7a\\xaa\\xbd\\x1a\\xf7\"\n\"\\x12\\xdc\\xf7\\x29\\xcf\\x9d\\x99\\x80\\x7f\\x82\\x87\\x85\\x7e\\x81\\x1e\\x7e\\x80\\x87\\x83\\x7d\\x1a\\x74\\x9a\\x7c\\xa0\\xa9\\xa2\\xa8\\xaf\\xb7\\x67\\xae\"\n\"\\x5f\\x2f\\x2c\\x34\\xfb\\x69\\xfb\\x20\\x1e\\xde\\xf7\\xbb\\x05\\x0e\\xfb\\x39\\xf7\\x65\\x81\\x15\\x93\\x06\\xf7\\x1d\\xf2\\xe5\\xf7\\x0b\\x89\\x1d\\x9c\\x06\"\n\"\\xec\\xa7\\xbd\\xbb\\xd2\\x1b\\xcc\\xb7\\x5d\\x48\\x37\\x42\\x52\\x20\\x81\\x84\\x8b\\x8d\\x7b\\x1f\\x7f\\x66\\x05\\x8c\\x97\\x90\\x8b\\x94\\x1b\\xe8\\xc0\\x5d\"\n\"\\x3d\\x29\\x43\\x44\\x29\\x3f\\x58\\xb0\\xdb\\x68\\x1f\\x73\\x82\\xaa\\x2f\\xc8\\x54\\xdf\\x7f\\x19\\x54\\x32\\x2a\\x0a\\x98\\x93\\x8d\\x96\\x4a\\x1d\\x75\\x7a\"\n\"\\x8f\\x96\\x6e\\x3c\\x0a\\x82\\x84\\x47\\x1d\\xfb\\xa2\\xf7\\x31\\x80\\x15\\xf0\\x8a\\xda\\xc8\\xd9\\x1a\\xc3\\x67\\xac\\x3c\\x9b\\x1e\\xb9\\x8e\\xa0\\x87\\x1d\"\n\"\\x83\\x6e\\x05\\xa2\\x06\\xd1\\xa9\\x76\\x59\\x43\\x5b\\x5b\\x45\\x53\\x66\\xa3\\xc6\\x69\\x1f\\x7b\\x83\\xa1\\x4e\\xb7\\x65\\xc7\\x81\\x19\\x54\\x33\\x2a\\x0a\"\n\"\\x98\\x93\\x8d\\x96\\x85\\x0a\\x81\\x86\\x2c\\x0a\\x86\\xf7\\x97\\xf7\\xf1\\x15\\xf7\\x1c\\xfb\\x8d\\x05\\x96\\x76\\x90\\x7d\\x7f\\x1a\\x75\\x7a\\x82\\x5e\\x87\"\n\"\\x1e\\x85\\x79\\x05\\xc9\\xba\\x1d\\x9c\\x06\\xb8\\xf7\\x55\\x44\\x8a\\x81\\x93\\x5a\\xe7\\x19\\xfb\\x19\\xf7\\x93\\xf7\\x9e\\xf7\\x6b\\xa5\\x1d\\xfb\\xad\\xfb\"\n\"\\x7e\\xa6\\x1d\\x7c\\x86\\x7d\\xb6\\x1d\\x68\\x7f\\xe2\\x1d\\x9a\\x8f\\x9b\\x1e\\x0e\\xfb\\x5b\\xf7\\x6f\\xf8\\x4b\\x15\\x5c\\x7f\\x52\\x82\\x61\\x88\\x85\\x78\"\n\"\\x18\\xf5\\x1d\\x81\\x89\\x81\\x85\\x74\\x1f\\x29\\xfb\\xe3\\x05\\xd2\\x06\\xc9\\xf7\\x69\\x05\\x8c\\x97\\x91\\x8c\\x8e\\x1b\\x96\\x95\\x85\\x80\\x93\\x1f\\x91\"\n\"\\x82\\x8d\\x85\\x98\\x5e\\xa6\\x2a\\x99\\x71\\xae\\x77\\x08\\xac\\x76\\x95\\x77\\x61\\x1a\\x7f\\x8a\\x77\\x8a\\x77\\x1e\\x9d\\x06\\xb8\\xf7\\x52\\x45\\x8c\\x86\"\n\"\\x8f\\x79\\xcd\\x19\\x78\\xd3\\x74\\xab\\x65\\x92\\xa8\\x96\\xae\\xb1\\xab\\xc3\\x08\\xb0\\x9f\\x96\\x95\\x9e\\x1b\\x93\\x91\\x88\\x84\\x91\\x1f\\x81\\x94\\x93\"\n\"\\x87\\x98\\x1b\\xa7\\x9d\\x9a\\xa3\\xa6\\x75\\x9c\\x69\\x61\\x71\\x76\\x49\\x63\\x1f\\x5a\\x39\\x69\\x71\\x4a\\x83\\x08\\x0e\\x86\\xf7\\xbc\\xf8\\x1c\\x15\\x6c\"\n\"\\x71\\xa6\\x1d\\x7d\\x86\\x7c\\xb6\\x1d\\x69\\x7e\\xe2\\x1d\\x9b\\x8f\\x9a\\x1e\\xd1\\xf7\\x8d\\x9b\\x6e\\x4c\\xfb\\x6f\\x05\\xcb\\x06\\xb4\\xf7\\x23\\xd9\\xfb\"\n\"\\x24\\x05\\x96\\x77\\x90\\x7c\\x7f\\x1a\\x76\\x7a\\x81\\x5e\\x87\\x1e\\x85\\x79\\x05\\xf7\\x9e\\x06\\x91\\x9d\\x4c\\x8a\\x6e\\xa2\\x5c\\xe5\\x19\\xfb\\x10\\xf7\"\n\"\\x81\\x95\\xac\\xf7\\x8b\\xf7\\x5c\\xa5\\x1d\\xfb\\x3b\\xfb\\x1f\\xab\\xf7\\x04\\x05\\x4c\\x06\\x0e\\xfb\\x5b\\xf7\\x5d\\xf7\\x8d\\x15\\x7e\\x86\\x81\\x89\\x7a\"\n\"\\x89\\xc5\\xf7\\x5b\\x18\\x59\\x7f\\x55\\x82\\x61\\x88\\x85\\x78\\x18\\x8d\\x9b\\x92\\x8c\\x94\\x1b\\x9e\\x93\\x84\\x7c\\x81\\x89\\x82\\x85\\x74\\x1f\\x29\\xfb\"\n\"\\xe3\\x05\\xd2\\x06\\xc9\\xf7\\x69\\x05\\x8c\\x96\\x92\\x8c\\x8c\\x1b\\x92\\x8f\\x8a\\x87\\x92\\x1f\\x60\\xfb\\x29\\x05\\xaf\\x06\\xab\\xf7\\x00\\x05\\x89\\x07\"\n\"\\xa2\\x3a\\x92\\x75\\x9a\\x6f\\x08\\x6e\\x9a\\xa3\\x79\\xa5\\x1b\\xb3\\xae\\xad\\xeb\\xc4\\x1f\\x7c\\x94\\x05\\x55\\x68\\x76\\x78\\x6f\\x1b\\x74\\x82\\x98\\xc0\"\n\"\\x7c\\x1f\\x79\\xd2\\x74\\xab\\x66\\x92\\x08\\x8d\\x07\\xa4\\x95\\xa9\\xaa\\xa7\\xb8\\xa3\\xb4\\xc0\\x0a\\x92\\x88\\x87\\x8f\\x1f\\x7d\\x98\\x91\\x88\\x99\\x1b\"\n\"\\xa7\\x9d\\x9a\\xa3\\xa6\\x75\\x9c\\x69\\x61\\x72\\x76\\x49\\x62\\x1f\\x73\\x62\\x78\\x74\\x76\\x78\\xad\\xf7\\x0b\\x18\\x66\\x06\\x0e\\x8f\\xf7\\x9f\\xf8\\x02\"\n\"\\x15\\xbd\\xf7\\x54\\x05\\xd3\\x9e\\x9d\\x99\\xd5\\x21\\x1d\\xfc\\x14\\x06\\x61\\xfb\\x36\\x05\\x9a\\x06\\xe1\\xaa\\xbb\\xb3\\xd5\\x1b\\xcc\\x06\\xfb\\x20\\xfc\"\n\"\\x9d\\x82\\x0a\\xcd\\xf7\\x8d\\x86\\x1d\\x83\\x89\\x88\\x78\\x7b\\x1e\\x0e\\x4d\\xf7\\xf0\\xf8\\x54\\x15\\xfb\\x83\\x06\\x6d\\xfb\\x05\\x05\\x9a\\x06\\xbf\\xa5\"\n\"\\xb7\\xa4\\xcc\\x1b\\xb1\\x06\\x8a\\x88\\x78\\x46\\x30\\xfb\\xe8\\x05\\xd4\\x06\\xc4\\xf7\\x6c\\x05\\x8c\\x98\\x91\\x8c\\x8c\\x1b\\xa0\\x99\\x7c\\x6a\\x95\\x1f\"\n\"\\xa3\\x39\\x93\\x74\\x9b\\x6f\\x08\\x6d\\x9b\\xa4\\x79\\xa5\\x1b\\xb3\\xad\\xad\\xec\\xc4\\x1f\\x7c\\x94\\x05\\x56\\x69\\x75\\x77\\x6f\\x1b\\x73\\x82\\x98\\xc1\"\n\"\\x7a\\x1f\\x77\\xd4\\x73\\xab\\x63\\x92\\xa7\\x96\\xa7\\xa8\\xa8\\xbb\\xa2\\xb5\\x8b\\x8b\\x8f\\x8f\\x08\\x98\\x95\\x96\\x92\\x97\\x1b\\x91\\x93\\x88\\x87\\x8f\"\n\"\\xd1\\x0a\\xa2\\xa7\\x75\\x9c\\x66\\x61\\x72\\x76\\x49\\x63\\x1f\\x5b\\x38\\x6a\\x71\\x49\\x83\\x08\\x0e\\xbf\\xf7\\x90\\xf7\\xdf\\x15\\xf7\\x9f\\x06\\x49\\xfb\"\n\"\\x76\\x78\\x45\\x78\\x7b\\x49\\x8a\\x20\\x1d\\xe3\\x06\\xee\\xb4\\x6a\\x3a\\x7e\\x8a\\x7a\\x8a\\x78\\x1f\\x9d\\x06\\xb8\\xf7\\x55\\x05\\x4a\\x8c\\x75\\x96\\xac\"\n\"\\x1a\\x99\\x8e\\x9f\\x92\\xa2\\x1e\\xf7\\x0e\\xf8\\x3d\\x05\\xd2\\x9f\\x9e\\x9b\\xcf\\x21\\x1d\\xfb\\x9b\\x06\\x83\\x4c\\x1d\\x6c\\x1a\\x80\\x89\\x7d\\x87\\x7d\"\n\"\\x1e\\x51\\xfb\\x58\\x05\\xfb\\x9c\\x06\\xc1\\xf7\\x52\\x05\\xd4\\x9f\\x9e\\x99\\xd3\\x1b\\x90\\x2e\\x1d\\x86\\x79\\x05\\xc0\\x8a\\x9c\\x81\\x6d\\x1a\\x80\\x89\"\n\"\\x7d\\x86\\x7c\\x1e\\xfb\\x17\\xfc\\x5e\\x78\\x47\\x78\\x79\\x60\\x1d\\x91\\x9d\\x05\\x56\\x8c\\x7a\\x95\\xaa\\x1a\\x96\\x8d\\x96\\x90\\x9d\\x1e\\x0e\\xfb\\x3f\"\n\"\\xf7\\x48\\xf7\\x93\\x15\\xc2\\xf7\\x52\\x5b\\x7f\\x51\\x81\\x63\\x89\\x19\\x85\\x78\\x05\\xf5\\x1d\\x80\\x89\\x81\\x85\\x74\\x1f\\x29\\xfb\\xe8\\x05\\xd2\\x06\"\n\"\\xcb\\xf7\\x73\\xf7\\x31\\x90\\x60\\xfb\\x29\\x05\\x88\\x80\\x87\\x6e\\x7f\\x1a\\x74\\x93\\x82\\xaa\\x81\\x1e\\xac\\x80\\x98\\x77\\x61\\x1a\\x7d\\x8a\\x76\\x8a\"\n\"\\x77\\x1e\\x9d\\x06\\xb8\\xf7\\x54\\x05\\x58\\x8c\\x7a\\x90\\x99\\x1a\\x90\\x8b\\x8c\\x92\\xa8\\x1e\\xea\\xf7\\xde\\x05\\x44\\x06\\x59\\xfb\\x43\\x05\\x0e\\x92\"\n\"\\xf7\\xcf\\x79\\x15\\x97\\x06\\xf2\\xda\\xb6\\xf5\\xe6\\x1f\\x7a\\x99\\x05\\x33\\x31\\x51\\x6d\\x39\\x1b\\xfb\\x03\\x4b\\xd6\\xf7\\x16\\xf7\\x0b\\xbb\\xad\\x0a\"\n\"\\xcd\\x1b\\xe7\\xbe\\x55\\xfb\\x00\\x95\\x1f\\x9d\\x88\\xb0\\xf7\\x5b\\x05\\x76\\x06\\x7b\\x83\\x81\\x85\\x77\\x1b\\x82\\x80\\x8d\\x90\\x76\\x1f\\x96\\x5f\\x63\"\n\"\\x91\\x6a\\x1b\\xfb\\x6a\\xfb\\x54\\xfb\\x5c\\xfb\\x73\\xfb\\x1b\\xdf\\x25\\xf7\\x16\\x77\\x1f\\x58\\x39\\x2a\\x0a\\x98\\x94\\x57\\x1d\\xb4\\xa2\\x86\\xa8\\x44\"\n\"\\x1d\\x82\\x84\\x47\\x1d\\xfb\\x6c\\xf7\\x4e\\x80\\x15\\xd1\\x8e\\xc3\\xac\\xc1\\xd2\\x7b\\x95\\x18\\x50\\x54\\x64\\x75\\x5a\\x1b\\x52\\x69\\xb5\\xd3\\xe0\\xae\"\n\"\\xe5\\xc3\\xc5\\x1f\\xa9\\xa8\\xb3\\x9d\\xb3\\x1b\\xa2\\x99\\x83\\x7f\\x86\\x89\\x86\\x87\\x82\\x1f\\x84\\x7e\\x89\\x85\\x81\\x1a\\x73\\x9a\\x7d\\xa3\\xa7\\x9f\"\n\"\\x9e\\xa6\\xba\\x51\\x0a\\x36\\xb4\\x58\\xd9\\x7f\\x1e\\x55\\x34\\x94\\x83\\x05\\x90\\x98\\x93\\x8d\\x96\\x4f\\x0a\\x79\\x8f\\x96\\x6e\\x3c\\x0a\\x81\\x85\\x47\"\n\"\\x1d\\x23\\xe6\\xf9\\x1a\\x15\\xc3\\x83\\x8e\\x88\\x9c\\x53\\xd8\\xfb\\xa5\\x18\\x4e\\xfb\\x6b\\x9f\\x1d\\xa0\\x92\\xaa\\xa3\\xda\\x1e\\x8e\\x93\\x8d\\x93\\x8c\"\n\"\\x8f\\xa8\\xf1\\x18\\xf7\\x6f\\xf7\\xa6\\xab\\xb3\\x93\\x92\\xa9\\x9a\\x19\\x9b\\xfb\\x51\\x7b\\x07\\xbb\\x85\\x8b\\x8b\\x96\\x85\\x48\\x1d\\x6f\\x5d\\x49\\x23\"\n\"\\xfb\\x0f\\x1e\\x7a\\x77\\x85\\x83\\x7c\\x79\\x7f\\xb8\\x86\\x9c\\x7d\\xbd\\x08\\x72\\xe2\\x56\\x0a\\x91\\xc7\\x91\\x1e\\x9b\\xfb\\x83\\x07\\x0e\\xfb\\x72\\xf7\"\n\"\\x2c\\xb9\\x15\\x62\\xfb\\x2b\\x77\\x47\\x83\\x83\\x54\\x84\\x19\\x87\\x7d\\x05\\xf7\\x55\\x06\\x8e\\x99\\x05\\x64\\x8f\\x81\\x92\\xa2\\x1a\\x97\\x8e\\x9d\\x90\"\n\"\\x9e\\x1e\\xb7\\xf7\\x37\\xf7\\x44\\xf7\\xa5\\xb6\\xd0\\x95\\x95\\xaa\\x92\\x19\\x94\\x8c\\x90\\x9b\\x05\\xfb\\x1a\\x06\\x86\\x7b\\x05\\x90\\x06\\x9f\\x94\\x86\"\n\"\\x7d\\x7f\\x80\\x75\\x72\\x62\\x1f\\xfb\\x18\\xfb\\x65\\x75\\xf7\\x69\\x05\\x89\\xa4\\x8a\\x95\\x95\\x1a\\xa8\\x9b\\x9b\\xa9\\x1e\\x92\\x06\\x90\\x9b\\x05\\xfb\"\n\"\\x4c\\x06\\x87\\x7b\\x99\\x8a\\x96\\x8a\\x95\\x86\\x8f\\x84\\x19\\x90\\x84\\x90\\x6d\\x95\\x34\\x08\\x0e\\x23\\xf7\\xd7\\xf7\\x7f\\x15\\xa0\\xd6\\xf7\\x6f\\xf7\"\n\"\\xa6\\xab\\xb3\\x93\\x92\\xa9\\x9a\\x19\\x9b\\xfb\\x51\\x7b\\x07\\xbb\\x85\\x8b\\x8b\\x96\\x85\\x48\\x1d\\x6f\\x5d\\x48\\x23\\xfb\\x0e\\x1e\\x7a\\x77\\x85\\x83\"\n\"\\x7c\\x79\\x7f\\xb8\\x86\\x9c\\x7d\\xbd\\x08\\x72\\xe2\\x56\\x0a\\x91\\xc7\\x91\\x1e\\x9b\\xfb\\x83\\x7b\\x07\\xc3\\x83\\x8e\\x88\\x9c\\x53\\xd8\\xfb\\xa5\\x18\"\n\"\\x77\\x44\\x05\\x26\\x06\\x82\\x69\\x05\\xef\\x06\\x6c\\xfb\\x02\\x9f\\x1d\\xa1\\x92\\xa7\\xa6\\xe5\\x1e\\x8c\\x8f\\x05\\xf7\\x03\\x06\\x94\\xad\\x05\\x0e\\xfb\"\n\"\\x72\\xf7\\x62\\x87\\x15\\x9c\\xc9\\xf7\\x44\\xf7\\xa5\\xb7\\xd0\\x94\\x95\\xaa\\x92\\x19\\x94\\x8c\\x90\\x9b\\x05\\xfb\\x1a\\x06\\x87\\x7b\\x05\\x8f\\x06\\x9f\"\n\"\\x94\\x86\\x7d\\x7f\\x80\\x73\\x72\\x64\\x1f\\xfb\\x18\\xfb\\x65\\x75\\xf7\\x69\\x05\\x88\\xaa\\x8b\\x90\\x94\\x1a\\xa8\\x9b\\x9b\\xa9\\x1e\\x92\\x06\\x90\\x9b\"\n\"\\x05\\xfb\\x4b\\x06\\x86\\x7b\\x99\\x8a\\x96\\x8a\\x95\\x86\\x8f\\x84\\x19\\x91\\x84\\x90\\x6d\\x94\\x34\\xa3\\xfb\\x7e\\x18\\x7e\\x59\\x05\\xfb\\x01\\x06\\x82\"\n\"\\x63\\x05\\xf6\\x06\\x7a\\x4e\\x77\\x47\\x83\\x83\\x54\\x84\\x19\\x87\\x7d\\x05\\xf7\\x55\\x06\\x8f\\x99\\x05\\x63\\x8f\\x81\\x92\\xa2\\x1a\\x97\\x8e\\x9d\\x90\"\n\"\\x9e\\x1e\\x9c\\xc8\\x05\\xf7\\x02\\x06\\x94\\xb3\\x05\\x0e\\x51\\xf7\\xc2\\xf7\\x9e\\x15\\xb6\\xfb\\x47\\x05\\x8e\\x81\\x8c\\x82\\x84\\x1a\\x70\\x76\\x7b\\x67\"\n\"\\x1e\\x7a\\x06\\x85\\x79\\x05\\xda\\x06\\xcc\\xa8\\x84\\x74\\xa1\\x1f\\x9a\\x7b\\x95\\x6c\\x6a\\x1a\\x7b\\x8a\\x7b\\x8a\\x78\\x1e\\x9d\\x06\\xb8\\xf7\\x54\\x05\"\n\"\\x62\\x79\\x8f\\x94\\x80\\x1f\\x6d\\xa3\\x82\\x99\\x82\\xb4\\x51\\xf7\\x7c\\x18\\xf7\\x36\\xf7\\x53\\xcb\\xd7\\xab\\x9e\\xc8\\x8e\\x19\\x91\\x9d\\x05\\xfb\\x5b\"\n\"\\x06\\x85\\x79\\x05\\x95\\x06\\xa2\\x94\\x85\\x7c\\x7f\\x84\\x7e\\x7b\\x77\\x1f\\xfb\\x2a\\xfb\\x46\\x64\\xf7\\x39\\x05\\x89\\x96\\x88\\xa1\\x94\\x1a\\xa3\\x9f\"\n\"\\x98\\xae\\x1e\\x9b\\x06\\x91\\x9d\\x05\\xfb\\x9d\\x06\\x85\\x79\\x05\\x9c\\x06\\xbd\\x8a\\x9c\\x7a\\x9f\\x48\\xca\\xfb\\x8d\\x18\\xfb\\x3b\\xfb\\x5a\\x05\\x56\"\n\"\\x60\\x4d\\x62\\x67\\x1b\\x85\\x79\\x05\\xf7\\x62\\x29\\x0a\\x76\\x06\\x6e\\x7b\\x92\\x9a\\x94\\x8f\\x92\\x99\\x9d\\x1f\\x0e\\xfb\\x72\\xf7\\x5e\\xf7\\x52\\x15\"\n\"\\xb1\\xfb\\x15\\x99\\x61\\x98\\x77\\x9a\\x88\\x19\\xae\\x80\\x9a\\x6d\\x50\\x1a\\x7f\\x8a\\x7a\\x8a\\x79\\x1e\\x9d\\x06\\xb8\\xf7\\x54\\x42\\x8d\\x86\\x8e\\x79\"\n\"\\xcb\\x19\\x5c\\xf7\\x2c\\x05\\xe5\\xc7\\xa4\\xa3\\xa8\\x1b\\x91\\x92\\x8a\\x87\\x98\\x1f\\x87\\x99\\x8f\\x8a\\x91\\x1b\\x9d\\x99\\x9a\\x9f\\xa3\\x7b\\x9c\\x73\"\n\"\\x72\\x73\\x7d\\x6d\\x6e\\x1f\\x79\\x78\\x8b\\x8b\\x45\\x2e\\x66\\xf7\\x07\\x7f\\xa4\\x6f\\x9a\\xfb\\x12\\x6f\\x18\\x86\\x7a\\x05\\x90\\xa0\\x94\\x8d\\x96\\x1b\"\n\"\\xbb\\xa6\\x63\\xfb\\x25\\xba\\x1f\\x4d\\x2f\\x05\\x50\\x64\\x71\\x70\\x7b\\x1b\\x85\\x87\\x8d\\x98\\x7e\\x1f\\x93\\x82\\x83\\x8e\\x83\\x1b\\x77\\x7d\\x7c\\x76\"\n\"\\x72\\x9d\\x7b\\xa6\\xae\\xae\\xa7\\xc9\\xb5\\x1f\\x0e\\xa8\\xf8\\xfb\\xac\\x15\\x67\\x80\\x8d\\x90\\x7e\\x1f\\x7b\\x91\\x78\\xa1\\x98\\x1a\\x8e\\x8c\\x91\\x8e\"\n\"\\x95\\x77\\x1d\\x54\\xfb\\x68\\x79\\x47\\x78\\x79\\x4c\\x8a\\x20\\x1d\\xf7\\x14\\x06\\xcc\\xaf\\x64\\x46\\x7b\\x8a\\x7b\\x8a\\x77\\x1f\\x9d\\x06\\x0e\\xfb\\x52\"\n\"\\x66\\x0a\\x83\\x89\\x7c\\x83\\x1a\\x76\\x9e\\x7a\\xa2\\x9b\\x98\\x8f\\x97\\x9d\\x1e\\x7b\\x70\\x83\\x72\\x71\\xdc\\x1d\\x76\\x1e\\x95\\x7d\\x05\\xcf\\xb2\\xa1\"\n\"\\xa4\\xb2\\x1a\\x95\\x8a\\x8e\\x87\\x9f\\x1e\\x87\\x99\\x89\\x98\\x92\\x1a\\x96\\x8e\\x93\\x9a\\xa8\\x1e\\x96\\x96\\x9a\\x9c\\x9d\\xa4\\x08\\x0e\\x9e\\xf8\\x0e\"\n\"\\xf7\\xbb\\x15\\xaf\\x90\\xa5\\x90\\xb3\\x97\\x4f\\xfb\\x69\\x18\\x78\\x47\\x78\\x7a\\x4d\\x8a\\x86\\x79\\x18\\xf7\\x93\\x29\\x0a\\x55\\x8c\\x7b\\x95\\xaa\\x1a\"\n\"\\x97\\x8c\\x92\\x91\\x9f\\x1e\\xf7\\x17\\xf8\\x5e\\x05\\xd4\\xa0\\x9d\\x99\\xd3\\x21\\x1d\\xfb\\xa1\\x25\\x1d\\xc0\\x8a\\x9c\\x81\\x6d\\x4d\\x1d\\x4f\\xfb\\x65\"\n\"\\x68\\x80\\x6c\\x84\\x67\\x88\\x19\\xcc\\xf7\\x72\\x05\\x4c\\x06\\x4a\\xfb\\x72\\x05\\x5f\\x92\\x76\\x9e\\xad\\x1a\\x92\\x8c\\x92\\x8e\\x94\\x1e\\xb3\\xf7\\x21\"\n\"\\x05\\xd4\\x9f\\x9e\\x99\\xd3\\x1b\\x8f\\x9d\\x05\\xfb\\x9f\\x22\\x1d\\xc0\\x8a\\x9c\\x81\\x6c\\x1a\\x80\\x89\\x7f\\x86\\x7b\\x1e\\x67\\xfb\\x12\\x05\\x83\\x6e\"\n\"\\x8a\\x86\\x7b\\x1a\\x4b\\xbd\\x6a\\xec\\x1e\\x5d\\xfb\\x34\\x05\\xca\\x06\\x0e\\xfb\\x52\\xf7\\x81\\xf7\\x53\\x15\\xb1\\xa8\\xa0\\xa2\\xae\\xbf\\x48\\xfb\\x81\"\n\"\\x18\\x89\\x84\\x88\\x79\\x84\\x1a\\x77\\x9e\\x7a\\xa0\\xb1\\xb1\\xa8\\xd4\\xc4\\x1e\\x7e\\x96\\x05\\x60\\x6a\\x75\\x77\\x7c\\x1b\\x84\\x85\\x91\\x92\\x91\\x8e\"\n\"\\x9b\\x8e\\x96\\x1f\\xef\\xf7\\xf1\\x05\\x44\\x06\\x80\\x4c\\x58\\x39\\x52\\x5d\\xae\\xf7\\x13\\x18\\x5b\\x06\\x5f\\xfb\\x2f\\x05\\x8a\\x87\\x8a\\x8b\\x87\\x1b\"\n\"\\x7b\\x83\\x94\\x9c\\x92\\x8b\\x8e\\x8f\\x97\\x1f\\xc0\\xf7\\x4b\\x5a\\x7e\\x59\\x83\\x5c\\x87\\x20\\x1d\\x8e\\x9b\\x92\\x8c\\x95\\x1b\\x9d\\x93\\x84\\x7c\\x80\"\n\"\\x8a\\x83\\x83\\x72\\x1f\\x75\\x3d\\x05\\x86\\x7d\\x87\\x6f\\x81\\x1a\\x68\\xa0\\x74\\xac\\x98\\x97\\x8d\\x90\\x99\\x1e\\x75\\x3c\\x05\\xbb\\x06\\x0e\\x9e\\xf7\"\n\"\\x75\\xf7\\xe3\\x15\\x9c\\xe1\\xa2\\x8e\\xae\\x1b\\xce\\xad\\x73\\x5b\\x79\\x88\\x7b\\x83\\x6e\\x1f\\x6c\\xfb\\x09\\x05\\x45\\x78\\x77\\x7c\\x41\\x1b\\x87\\x79\"\n\"\\x05\\xf7\\xae\\x24\\x0a\\x4f\\x8c\\x7c\\x93\\xa9\\x1a\\x94\\x8e\\x9e\\x90\\x9d\\x1e\\xab\\xf7\\x09\\x05\\x91\\xa3\\x8f\\xa5\\x9f\\x1a\\xd3\\x59\\xb0\\x29\\x5e\"\n\"\\x7b\\x89\\x73\\xfb\\x15\\x1e\\xbd\\xf7\\x4e\\x05\\xd2\\x9f\\x9f\\x99\\xd4\\x21\\x1d\\xfb\\xae\\x22\\x1d\\xc6\\x8a\\x9a\\x83\\x6e\\x1a\\x80\\x88\\x79\\x86\\x79\"\n\"\\x1e\\xfb\\x0f\\xfc\\x5c\\x05\\x45\\x78\\x77\\x7c\\x42\\x1b\\x86\\x79\\x05\\xf7\\xae\\x24\\x0a\\x50\\x8c\\x7c\\x93\\xa8\\x1a\\x97\\x8e\\x9d\\x90\\x9c\\x1e\\x0e\"\n\"\\x71\\x1d\\xfb\\xdb\\x42\\x0a\\xa8\\xf9\\x1a\\xf8\\xc1\\x15\\x8b\\x1d\\xb6\\x91\\x8c\\x94\\x8c\\x90\\x1f\\xb1\\xf7\\x21\\x58\\x1d\\x6a\\x1a\\x81\\x89\\x7f\\x87\"\n\"\\x7c\\x1e\\x69\\xfb\\x12\\x05\\x86\\x76\\x89\\x80\\x7c\\x1a\\x4b\\xbf\\x67\\xe7\\xc1\\xc1\\x93\\x9e\\xce\\x1e\\x5c\\xfb\\x48\\x72\\x2e\\x7f\\x81\\x35\\x8a\\x19\"\n\"\\x5b\\xfb\\x58\\x05\\x9d\\x06\\xbb\\xf7\\x0d\\xbc\\xb0\\xf7\\x07\\x90\\x08\\xeb\\x06\\x8f\\x9d\\x63\\x8c\\x82\\x8c\\x80\\x91\\x19\\x7e\\x92\\x84\\x96\\x9b\\x1a\"\n\"\\x9a\\x92\\xa9\\x9a\\xb6\\x1e\\x0e\\xfb\\x52\\x66\\x0a\\x84\\x89\\x7b\\x83\\x1a\\x8a\\x8b\\x88\\x8c\\x88\\x1e\\x6c\\x62\\x7c\\x68\\x68\\xdc\\x1d\\x75\\x1e\\x95\"\n\"\\x7e\\x05\\xcf\\xb2\\xa1\\xa4\\xb2\\x1a\\x94\\x8a\\x8f\\x87\\x9e\\x1e\\x87\\x9a\\x89\\x97\\x92\\x1a\\x95\\x8d\\x91\\x91\\x9a\\x1e\\x82\\x95\\x95\\x87\\x97\\x1b\"\n\"\\xb1\\xb0\\xa8\\xd4\\xc4\\x1f\\x0e\\xc9\\xcb\\xf7\\xc1\\x15\\x84\\x68\\x88\\x76\\x79\\x1a\\xfb\\x24\\xeb\\x2a\\xf7\\x23\\xf7\\x75\\xf7\\x59\\xf7\\x68\\xf7\\x87\"\n\"\\xbf\\x81\\xb5\\x75\\xaf\\x1e\\xcd\\x64\\x3f\\xb2\\x34\\x1b\\x39\\x37\\x6e\\x56\\x43\\x1f\\x57\\x65\\x70\\x6a\\x5b\\x3b\\xcf\\x80\\x18\\xb6\\xd4\\xad\\xb7\\xac\"\n\"\\xa6\\x08\\xb4\\xc0\\xc8\\xa2\\xc5\\x1b\\xbc\\xb8\\x75\\x67\\xa3\\x1f\\x9c\\x71\\x93\\x67\\x5a\\x1a\\x51\\x82\\x51\\x79\\x55\\x1e\\x7c\\x60\\x15\\x72\\x4d\\x70\"\n\"\\x5b\\x70\\x6b\\x08\\x4f\\x56\\x4a\\x69\\x4b\\x1b\\x59\\x5f\\xa1\\xae\\x74\\x1f\\x78\\xa8\\x83\\xb1\\xc4\\x1a\\xa0\\x8c\\x9a\\x8d\\x9e\\x1e\\x0e\\x5a\\xf8\\xdc\"\n\"\\x9b\\x15\\x51\\x90\\x84\\x93\\x7e\\xd5\\x26\\xf8\\xd3\\x18\\x71\\x06\\xfb\\xb6\\xfc\\x90\\x3d\\xfb\\x1a\\x81\\x7f\\x62\\x83\\x19\\x7b\\xf7\\x52\\x9b\\x07\\x56\"\n\"\\x91\\x83\\x8f\\xa6\\x1a\\x9e\\x8d\\x91\\x9d\\xb0\\x1e\\xc4\\xf7\\x06\\x05\\xf7\\x73\\x06\\xa0\\xfb\\x19\\x05\\x8d\\x81\\x8c\\x80\\x83\\x1a\\x67\\x7d\\x82\\x4a\"\n\"\\x85\\x1e\\x7b\\xf7\\x8e\\x07\\xfc\\x21\\xf7\\x9e\\x15\\xf7\\x29\\xf7\\x9c\\xbb\\xfb\\x9c\\x05\\xf7\\x2d\\xf8\\xf2\\x15\\x4b\\x73\\x5a\\x67\\x4c\\x1b\\x4b\\xcc\"\n\"\\x1d\\xae\\x7c\\xb8\\x1b\\xc2\\xba\\xa3\\xb8\\xac\\x1f\\x9f\\xa6\\x94\\xa1\\x94\\xb5\\x08\\x0e\\xf8\\x72\\xf7\\x04\\x15\\x6e\\x6e\\x05\\x6b\\x6c\\x7f\\x82\\x81\"\n\"\\x1b\\x83\\x85\\x91\\x92\\xa1\\xbb\\xf7\\x50\\xb9\\xf7\\x32\\x1f\\x8e\\x95\\x8c\\x8d\\x8d\\x94\\x84\\x8e\\x18\\x4d\\x84\\x88\\x88\\x80\\x5b\\x05\\xb0\\x83\\x6e\"\n\"\\xa0\\x5f\\x1b\\xfb\\x1b\\xfb\\x32\\xfb\\x4f\\xfb\\x34\\x45\\xb1\\x62\\xcb\\xd3\\xb6\\xad\\xf7\\x11\\xe6\\x1f\\x74\\x38\\x89\\x83\\x71\\x1a\\x6e\\x97\\x7f\\xa7\"\n\"\\xb4\\xa3\\x9e\\xe7\\xd8\\x1e\\xfb\\x3a\\xf7\\xd8\\x15\\xad\\x89\\xa1\\x73\\x68\\x1a\\x37\\x56\\xfb\\x0d\\x45\\x3f\\x1e\\x70\\x72\\x69\\x7a\\x6e\\x1b\\x66\\x75\"\n\"\\xa7\\xb9\\xc3\\xb2\\xf2\\xb8\\xcc\\x1f\\xb5\\xc6\\xba\\xab\\xb4\\x88\\x08\\xf7\\x36\\xf7\\x7e\\xbc\\x1d\\xa0\\x71\\x08\\x6d\\xa2\\xae\\x7c\\xb8\\x1b\\xc1\\xba\"\n\"\\xa3\\xb8\\xad\\x1f\\x9f\\xa6\\x94\\xa1\\x93\\xb5\\x08\\x0e\\xc9\\xf8\\x6e\\xf9\\x34\\x15\\x37\\x31\\x63\\x41\\x3b\\x1f\\x26\\x2d\\x50\\xfb\\x0e\\xfb\\x0b\\x1a\"\n\"\\xfb\\x21\\xe6\\x27\\xf7\\x13\\xf7\\x64\\xf7\\x5e\\xf7\\x68\\xf7\\x78\\x96\\x1e\\xf7\\x22\\x92\\x2a\\xf7\\x00\\xfb\\x1b\\x1b\\xe3\\xfc\\x04\\x15\\xfb\\x4b\\x51\"\n\"\\x29\\x21\\xfb\\x03\\x1b\\x3a\\x5a\\xc9\\xef\\xb0\\x91\\xb8\\x96\\xb8\\x1f\\x97\\xb6\\x15\\xf7\\x4d\\xc5\\xee\\xf6\\xf7\\x06\\x1b\\xda\\xbd\\x50\\x2e\\x61\\x83\"\n\"\\x55\\x7f\\x5f\\x1f\\x0e\\x92\\x1d\\xfb\\x4c\\xfb\\x58\\x15\\x8d\\x8e\\x05\\xf7\\x03\\xba\\xc8\\xc8\\xcb\\x1b\\xb4\\xa7\\x65\\x53\\x70\\x89\\x7a\\x83\\x66\\x1f\"\n\"\\x81\\x69\\x15\\xfb\\x0d\\x68\\x45\\x3b\\x45\\x1b\\x5c\\x6c\\xaf\\xc2\\xaf\\x91\\xae\\x97\\xb2\\x1f\\x0e\\x5a\\x5b\\x0a\\x52\\xf8\\x01\\x15\\x4b\\x72\\x5a\\x67\"\n\"\\x4d\\x1b\\x4a\\xcc\\x1d\\xaf\\x7c\\xb7\\x1b\\xc3\\xb9\\xbe\\x0a\\xfb\\x6c\\x7e\\x1d\\xf7\\xf6\\xf8\\x54\\xbc\\x1d\\x9f\\x71\\x08\\x6d\\xa2\\xaf\\x7c\\xb7\\x1b\"\n\"\\xc2\\xba\\xbe\\x0a\\xf7\\x83\\xf9\\xbe\\x15\\x5a\\xf8\\x85\\xbc\\x07\\x0e\\xf7\\xe8\\xad\\x89\\x15\\x92\\x06\\xd5\\x06\\xf7\\x44\\xcd\\x97\\xb7\\xcc\\x1f\\xf1\"\n\"\\xd0\\xd5\\xf7\\x36\\xf7\\x2f\\x1a\\xea\\x6d\\xde\\x5b\\xb1\\x1e\\xa7\\x67\\x5a\\x98\\x4a\\x1b\\xfb\\x2b\\x20\\x56\\x2e\\x69\\x1f\\x7d\\x66\\x87\\x73\\x8a\\x49\"\n\"\\xd9\\xb1\\x18\\x94\\x07\\x8a\\xea\\xb0\\xb7\\xe6\\x99\\x3d\\xfc\\x3e\\x18\\x7a\\x40\\x72\\x5c\\x6d\\x81\\x74\\x8c\\x18\\xe5\\x16\\x8f\\x8e\\xc2\\xb9\\x9e\\xb6\"\n\"\\xa1\\xf7\\x13\\x19\\xc7\\xf7\\xec\\x05\\x92\\x06\\x8e\\x06\\xb4\\x96\\x8a\\x87\\x98\\x1f\\xc4\\x76\\xa9\\x49\\x26\\x1a\\xfb\\x66\\x2c\\xfb\\x29\\xfb\\x1e\\x84\"\n\"\\x1e\\xf7\\x8d\\xfb\\x99\\x15\\xda\\x06\\xb1\\xf7\\x62\\x05\\x7b\\xb2\\x8e\\x8a\\xa1\\x1b\\xf7\\x14\\xf7\\x01\\xf7\\x39\\xf7\\x53\\xf7\\x00\\x5e\\xc3\\x36\\x57\"\n\"\\x5e\\x75\\x62\\x6a\\x1f\\x66\\x5d\\x76\\x50\\x73\\xfb\\x18\\x08\\xea\\xe6\\x15\\xe6\\x9c\\xaf\\xc0\\xb9\\x1b\\xb4\\xa1\\x61\\x3c\\xfb\\x2a\\x52\\xfb\\x0b\\x43\"\n\"\\x6e\\x75\\x96\\xa5\\x77\\x1f\\x0e\\x5a\\xf7\\x97\\x16\\x7c\\xf7\\x2f\\x05\\x49\\xb7\\x62\\xe4\\xea\\x1a\\xc0\\x98\\xc6\\xa2\\xbc\\x1e\\xc9\\xa9\\xbc\\xaf\\xc3\"\n\"\\x1b\\xc3\\xbc\\x67\\x4d\\xa9\\x1f\\xa2\\x5a\\x98\\x50\\x56\\x1a\\x2c\\x61\\x32\\x4a\\x5f\\x1e\\x7c\\xfb\\x2f\\x05\\xf7\\x88\\xf7\\x2d\\x77\\x06\\x5e\\x84\\x7b\"\n\"\\x79\\x68\\x1b\\xfb\\x0d\\x06\\x8d\\xb1\\x05\\xf6\\xb8\\xc9\\xe8\\xf7\\x08\\x1a\\xbb\\x7f\\xbe\\x74\\xba\\x1e\\xef\\x5b\\x36\\xc5\\x2a\\x1b\\x2a\\x36\\x51\\x27\"\n\"\\x5b\\x1f\\x74\\x5c\\x7f\\x58\\x5b\\x1a\\xfb\\x08\\xc9\\x2e\\xf6\\x5e\\x1e\\x8e\\x65\\x05\\xfb\\x0e\\x06\\x68\\x7b\\x9d\\xb8\\x84\\x1f\\x77\\xfb\\x2d\\x06\\x0e\"\n\"\\xfc\\x81\\xac\\x0a\\xfc\\x2e\\x46\\x0a\\xf7\\xe8\\xf8\\xa9\\xf8\\x95\\x15\\x49\\x06\\xfb\\x74\\xfc\\x95\\x05\\xdb\\x06\\xf7\\x45\\xf8\\x2d\\xf7\\x45\\xfc\\x2d\"\n\"\\x05\\xdb\\x06\\x0e\\xf7\\xe8\\xf8\\xa9\\x16\\xf7\\x74\\xf8\\x95\\x05\\x3b\\x06\\xfb\\x45\\xfc\\x2d\\xfb\\x45\\xf8\\x2d\\x05\\x3b\\x06\\xf7\\x74\\xfc\\x95\\x05\"\n\"\\x0e\\xf7\\xe8\\xf8\\x8c\\xf9\\x60\\x15\\xfb\\x60\\xfb\\x34\\xfb\\x32\\xfb\\x5f\\xfb\\x5b\\xf7\\x34\\xfb\\x33\\xf7\\x5d\\xf7\\x5b\\xf7\\x34\\xf7\\x34\\xf7\\x5c\"\n\"\\xf7\\x59\\xfb\\x34\\xf7\\x36\\xfb\\x58\\x1f\\xa4\\x52\\x15\\xf7\\x23\\x7e\\xf7\\x06\\xfb\\x06\\x99\\xfb\\x25\\x08\\xfb\\xa3\\x06\\xf7\\xa4\\x52\\x15\\x82\\xfb\"\n\"\\x22\\xfb\\x0d\\xfb\\x0f\\xfb\\x22\\x80\\x08\\xf7\\xa8\\x07\\x53\\xfb\\xa8\\x15\\xfb\\x27\\x99\\xfb\\x05\\xf7\\x05\\x7d\\xf7\\x29\\x08\\xf7\\xa6\\x06\\xfb\\xa6\"\n\"\\xc4\\x15\\x99\\xf7\\x24\\xf7\\x07\\xf7\\x06\\xf7\\x25\\x99\\x08\\xfb\\xa4\\x07\\x0e\\xc9\\xf7\\x11\\xf7\\x10\\x15\\xf8\\x67\\xf8\\x67\\xfc\\x67\\x06\\xb3\\xfc\"\n\"\\x3f\\x15\\xf8\\x17\\xf8\\x17\\xfc\\x17\\x07\\x0e\\xf7\\xe8\\xf9\\x64\\xf8\\xc3\\x15\\x4f\\xfb\\x8d\\x06\\x26\\x86\\x62\\x7c\\x6e\\x1e\\x5b\\x72\\x53\\x6b\\x50\"\n\"\\x1b\\x57\\x58\\xa4\\xb3\\x6f\\x1f\\x74\\xac\\x85\\xb4\\xf7\\x04\\x1a\\xf7\\x8d\\x4f\\xfb\\x8a\\x07\\xfb\\x1d\\x90\\x69\\xa3\\x63\\x1e\\x4a\\xb1\\xd1\\x66\\xde\"\n\"\\x1b\\xd7\\xcb\\xaa\\xc3\\xb4\\x1f\\xac\\xb8\\x91\\xab\\xf7\\x29\\x1a\\x0e\\x48\\xf8\\x27\\xf8\\x1c\\x15\\xfb\\x69\\x06\\x41\\xf7\\x4d\\x05\\x2d\\x06\\xf7\\x7d\"\n\"\\xfc\\xd5\\x05\\xde\\x06\\xf7\\x7d\\xf8\\xd5\\x05\\x2d\\x06\\x22\\xfb\\x9d\\x15\\x3f\\xfb\\x48\\x40\\xf7\\x48\\x05\\x0e\\x78\\x1d\\xfb\\x01\\x7c\\x49\\x75\\x1a\"\n\"\\x7a\\x91\\x7d\\x96\\x82\\x1e\\x78\\x71\\x84\\x76\\x70\\xb1\\x1d\\xad\\xa4\\x91\\x94\\xac\\x9d\\x1f\\xa6\\x9a\\x9c\\x9f\\xbe\\xd3\\x08\\x0e\\xfb\\x5d\\x3b\\x1d\"\n\"\\x0e\\xfb\\x5d\\x3b\\x1d\\xf7\\x67\\xf7\\xc2\\x7f\\x0a\\x0e\\xfb\\x5d\\x3b\\x1d\\xf7\\x98\\xf7\\x90\\x15\\xac\\x06\\x9b\\xac\\x05\\x9b\\xac\\x95\\xa7\\x9b\\x1a\"\n\"\\x9a\\x83\\x93\\x7b\\x6b\\x80\\x77\\x41\\x86\\x1e\\x41\\x70\\x15\\x72\\x77\\x78\\x73\\x71\\xa0\\x77\\xd3\\x0a\\xf7\\x42\\x59\\x1d\\xfb\\x5d\\x3b\\x1d\\xf7\\x7f\"\n\"\\xf7\\x45\\x15\\xb5\\x06\\xa1\\xba\\x05\\xa1\\xbb\\x99\\xb6\\xa0\\x1a\\x9f\\x81\\x96\\x78\\x62\\x7d\\x6e\\x22\\x81\\x1e\\x0e\\x2a\\x1d\\xfb\\x1d\\xf8\\xeb\\x15\"\n\"\\x55\\x5e\\x5f\\x54\\x53\\xb6\\x5f\\xc4\\xc2\\xb8\\xb8\\xc1\\xc2\\x5e\\xb8\\x53\\x1f\\x69\\x04\\xb0\\xa9\\x6d\\x67\\xd5\\x1d\\x2a\\x1d\\x6f\\xf8\\x98\\x15\\x6a\"\n\"\\x80\\x7e\\xc9\\x1d\\x6f\\x6e\\x3e\\x77\\x6b\\x1d\\xa4\\x83\\x76\\xc0\\x1f\\x81\\xa5\\x9d\\x86\\x98\\x1b\\xbb\\xac\\xaf\\xcf\\x99\\x1f\\x0e\\x92\\x2d\\x0a\\xf7\"\n\"\\xe8\\xd8\\xa5\\x0a\\x82\\x82\\x87\\x85\\x84\\x1e\\x0e\\x92\\x2d\\x0a\\xf8\\x46\\xf7\\x88\\x20\\x0a\\x92\\x2d\\x0a\\xf7\\xb2\\xf7\\x51\\x23\\x1d\\x92\\x2d\\x0a\"\n\"\\xf7\\xf0\\xd6\\x54\\x0a\\x9b\\x7f\\x7f\\x92\\x7c\\x1b\\x77\\x7c\\x7c\\x78\\x7f\\x91\\x82\\x98\\x80\\x1f\\x0e\\xfb\\x7c\\xf7\\xb4\\xf9\\x69\\x15\\x50\\x75\\x5f\"\n\"\\x6b\\x75\\x1a\\x75\\xa9\\x74\\xc2\\x76\\x1e\\x48\\x66\\x63\\x59\\x5c\\x1a\\x69\\x9c\\x73\\xb5\\x72\\x1e\\xfb\\x04\\x54\\x46\\x2f\\x2d\\x1a\\x5d\\x9b\\x65\\xaa\"\n\"\\x73\\x1e\\x7c\\x9e\\xa1\\x86\\xb5\\x1b\\x98\\x9b\\x8c\\x8d\\xa1\\x1f\\x8e\\xa1\\x9b\\x8c\\x91\\x1b\\xa5\\x99\\x81\\x7a\\x68\\x67\\x6b\\x62\\x82\\x84\\x8c\\x8f\"\n\"\\x7f\\x1f\\x92\\x76\\x85\\x8c\\x7f\\x1b\\x6e\\x78\\x7c\\x74\\x75\\x9e\\x7c\\xa7\\xac\\xb6\\x9a\\xa5\\xb3\\x1f\\xbd\\xab\\xa5\\xb2\\xb7\\x1a\\xb6\\x72\\xa5\\x63\"\n\"\\x82\\x79\\x8a\\x89\\x79\\x1e\\x89\\x78\\x6e\\x89\\x7e\\x1b\\x60\\x73\\xa3\\xb8\\xdc\\xbb\\xdd\\xdb\\xc3\\x1f\\x7c\\xb1\\xab\\x84\\xae\\x1b\\xbd\\xad\\x9e\\xa7\"\n\"\\x9e\\x75\\x98\\x6b\\x65\\x66\\x82\\x72\\x50\\x1f\\x7e\\x9d\\x86\\x9c\\xa3\\x1a\\xbe\\xa2\\xb9\\xba\\xb4\\x1e\\x7e\\xbb\\xa0\\x88\\xab\\x1b\\xce\\xb6\\x9e\\xaa\"\n\"\\xa0\\x77\\x96\\x66\\x5a\\x56\\x7c\\x6c\\x4f\\x1f\\x6c\\x9f\\x77\\xa2\\x9d\\x1a\\x9c\\x96\\x97\\xae\\x9e\\x1e\\x8d\\x8f\\x8e\\x8f\\x92\\x1f\\x0e\\xfb\\x6c\\x31\"\n\"\\x1d\\xf7\\xd6\\xf7\\x88\\x20\\x0a\\xfb\\x6c\\x31\\x1d\\xf7\\x7c\\xd6\\x28\\x0a\\xfb\\xa3\\x33\\x0a\\xf7\\x23\\xf7\\x49\\x2b\\x0a\\xfb\\xa3\\x33\\x0a\\xf7\\x70\"\n\"\\xf7\\xb9\\x24\\x1d\\x0e\\xfb\\x93\\xf7\\xae\\xf9\\x67\\x15\\x4d\\x72\\x5b\\x64\\x72\\x1a\\x71\\xab\\x70\\xc1\\x76\\x1e\\x4b\\x57\\x70\\x6e\\x66\\x53\\x08\\x4f\"\n\"\\x33\\x6a\\x26\\x2f\\x1a\\x33\\xbc\\x52\\xd8\\x95\\x9c\\x8c\\x8d\\x9b\\x1e\\x8d\\x9c\\x99\\x8c\\x90\\x1b\\xa6\\x9a\\x82\\x79\\x68\\x66\\x6c\\x63\\x81\\x84\\x8c\"\n\"\\x8f\\x7f\\x1f\\x92\\x76\\x85\\x8c\\x7f\\x1b\\x6e\\x78\\x7c\\x74\\x75\\x9e\\x7c\\xa7\\xad\\xb6\\x9a\\xa5\\xb2\\x1f\\xbe\\xab\\xa5\\xb2\\xb7\\x1a\\xb6\\x72\\xa5\"\n\"\\x63\\x82\\x7c\\x8a\\x89\\x7d\\x1e\\x89\\x7c\\x7b\\x8a\\x81\\x1b\\x5b\\x72\\xa7\\xc1\\xd5\\xa2\\xe4\\xb4\\xdf\\x1f\\xaa\\xc9\\xa6\\xb0\\xc0\\xc4\\x08\\x86\\xa3\"\n\"\\x97\\x8a\\xa2\\x1b\\xe0\\xc6\\xa6\\xb2\\x9f\\x79\\x98\\x6e\\x56\\x6c\\x7f\\x53\\x36\\x1f\\x6a\\x9c\\x78\\xa2\\xa3\\x1a\\xa1\\xa2\\xa1\\xb5\\x9f\\x1e\\x0e\\x79\"\n\"\\x9d\\xf8\\x44\\x94\\xf7\\x68\\x98\\x06\\xa2\\x0a\\xd9\\x0b\\xa2\\x8f\\x8f\\x8e\\x8f\\x8f\\x8f\\x8e\\x8f\\x91\\x8f\\x8f\\x0c\\x0c\\xf8\\x88\\x14\\xf9\\x28\\x15\"\n\"\\xae\\x13\\x00\\xb7\\x02\\x00\\x01\\x00\\x04\\x00\\x0d\\x00\\x11\\x00\\x15\\x00\\x1a\\x00\\x2f\\x00\\x78\\x00\\xa4\\x00\\xac\\x00\\xb1\\x00\\xb6\\x00\\xb9\\x00\"\n\"\\xbe\\x01\\x58\\x01\\xde\\x02\\x56\\x02\\xd0\\x02\\xf0\\x03\\x4e\\x03\\xab\\x03\\xe5\\x03\\xf2\\x03\\xf9\\x04\\x02\\x04\\x07\\x04\\x3e\\x04\\x46\\x04\\x4f\\x04\"\n\"\\x5b\\x04\\x65\\x04\\x6e\\x04\\x75\\x04\\x7c\\x04\\xbb\\x04\\xc8\\x04\\xcd\\x04\\xee\\x05\\x01\\x05\\x07\\x05\\x1e\\x05\\x2e\\x05\\x31\\x05\\x38\\x05\\x46\\x05\"\n\"\\x53\\x05\\x5a\\x05\\x63\\x05\\x67\\x05\\x73\\x05\\x7f\\x05\\x87\\x05\\x91\\x05\\x9a\\x05\\xa1\\x05\\xa8\\x05\\xb0\\x05\\xb8\\x05\\xbe\\x05\\xe4\\x06\\x6e\\x06\"\n\"\\xa6\\x06\\xb3\\x07\\x16\\x07\\x68\\x07\\xa5\\x08\\x13\\x08\\x54\\x08\\x86\\x08\\xf0\\x09\\x59\\x09\\xb8\\x0a\\x1f\\x0a\\x2e\\x0a\\x3d\\x0a\\x9a\\x0a\\x9f\\x0a\"\n\"\\xc2\\x0b\\x14\\x0b\\x5b\\x0b\\xa9\\x0b\\xcc\\x0c\\x18\\x0c\\x51\\x0c\\x61\\x0c\\xa0\\x0c\\xa9\\x0c\\xb9\\x0c\\xea\\x0d\\x1a\\x0d\\x49\\x0d\\x67\\x0d\\x91\\x0d\"\n\"\\x9a\\x0d\\xc2\\x0d\\xea\\x0d\\xf3\\x0d\\xfa\\x0e\\x1d\\x0e\\x32\\x0e\\x54\\x0e\\x76\\x0e\\x7f\\x0e\\x89\\x0e\\xa9\\x0e\\xc9\\x0e\\xe1\\x0e\\xec\\x0f\\x0a\\x0f\"\n\"\\x16\\x0f\\x2b\\x0f\\x48\\x0f\\x4f\\x0f\\x62\\x0f\\x7a\\x0f\\x7f\\x0f\\x84\\x0f\\x98\\x0f\\x9c\\x0f\\xa1\\x0f\\xb5\\x0f\\xcc\\x0f\\xd9\\x0f\\xef\\x10\\x03\\x10\"\n\"\\x16\\x10\\x21\\x10\\x35\\x10\\x39\\x10\\x45\\x10\\x51\\x10\\x64\\x10\\x6f\\x10\\x7c\\x10\\x80\\x10\\x92\\x10\\x9b\\x10\\xac\\x10\\xb2\\x10\\xc3\\x10\\xd2\\x10\"\n\"\\xd7\\x10\\xe1\\x10\\xf1\\x11\\x01\\x11\\x11\\x11\\x14\\x11\\x1c\\x11\\x29\\x11\\x38\\x11\\x47\\x11\\x50\\x11\\x56\\x11\\x64\\x11\\x72\\x11\\x80\\x11\\x8e\\x11\"\n\"\\x9c\\x11\\xa8\\x11\\xb4\\x11\\xc1\\x11\\xce\\x11\\xdb\\x11\\xe8\\x11\\xf5\\x11\\xfa\\x12\\x07\\x12\\x14\\x12\\x20\\x12\\x2c\\x12\\x38\\x12\\x44\\x12\\x4e\\x12\"\n\"\\x59\\x12\\x64\\x12\\x6f\\x12\\x7a\\x12\\x85\\x12\\x90\\x12\\x9b\\x12\\xa6\\x12\\xb1\\x12\\xbc\\x12\\xc2\\xc0\\x1d\\x0e\\x15\\x67\\x06\\xfb\\x22\\x22\\x31\\xeb\"\n\"\\x1d\\xf9\\x21\\x15\\x0b\\xf9\\x2a\\x15\\x0b\\x06\\x90\\x9d\\x05\\x0b\\xf8\\x64\\xf7\\x02\\x15\\x6f\\x6f\\x05\\x6b\\x6b\\x80\\x53\\x0a\\xf7\\x40\\xba\\xf7\\x3f\"\n\"\\x68\\x0a\\x0b\\xf8\\x6f\\xf9\\x2e\\x15\\x36\\x31\\x63\\x42\\x3b\\x1f\\x26\\x2e\\x50\\xfb\\x0e\\xfb\\x09\\x1a\\xfb\\x20\\xe6\\x28\\xf7\\x13\\xf7\\x64\\xf7\\x5e\"\n\"\\xf7\\x66\\xf7\\x76\\x96\\x1e\\xf7\\x21\\x92\\x2a\\xf6\\xfb\\x1a\\x1b\\x81\\x6a\\x15\\xdb\\xbc\\x51\\x2d\\xfb\\x00\\x5c\\xfb\\x26\\x4a\\x2d\\x1f\\x3c\\x54\\x4e\"\n\"\\x64\\x44\\x1b\\x37\\x5d\\xc7\\xf7\\x01\\xea\\xe6\\x1d\\x0b\\xf9\\x91\\x69\\x1d\\x8e\\x0a\\xae\\xa7\\xf7\\x00\\xd6\\xf7\\x9a\\x1f\\x9f\\xd0\\x9b\\x99\\xd0\\x93\"\n\"\\x44\\x0a\\xf7\\x13\\xf7\\x17\\xde\\xd2\\xf7\\x2a\\xb7\\x1e\\xde\\xf7\\xb1\\xb1\\xf7\\x16\\x8f\\x90\\xc9\\x99\\x19\\x0b\\x54\\x0a\\x9b\\x7e\\x80\\x92\\x41\\x1d\"\n\"\\x06\\x91\\x9d\\x05\\x0b\\x94\\x83\\x05\\x90\\x0b\\xb0\\x1d\\x0e\\x8a\\x89\\x81\\x1f\\x0e\\x9b\\xf8\\x27\\x15\\x9f\\x8c\\xae\\x8a\\x91\\x89\\x92\\x76\\x19\\x97\"\n\"\\x6a\\x9c\\xfb\\x1c\\x8f\\x2d\\x8f\\x33\\x18\\x64\\x8d\\x8d\\x83\\x94\\x1b\\x96\\x9c\\xa4\\xd0\\xaf\\x1f\\x90\\x96\\x9f\\xae\\xa9\\xc0\\xe4\\xf7\\x30\\x18\\xa8\"\n\"\\xfb\\xd3\\x05\\x70\\x8d\\x8d\\x88\\x92\\x1b\\x93\\x95\\x94\\xad\\xa6\\x1f\\x8b\\x90\\x91\\x8f\\x90\\x1e\\xf7\\x1d\\xf7\\x38\\xd6\\xf7\\x10\\xcb\\x1a\\xaa\\x75\"\n\"\\xa1\\x6d\\x72\\x7d\\x7e\\x76\\x7e\\x90\\x82\\x9b\\x7d\\x1e\\x9b\\x7c\\x91\\x80\\x7f\\x1a\\x60\\x69\\x56\\xfb\\x17\\xfb\\x37\\x1e\\x6b\\xf7\\xf4\\x05\\x96\\x89\"\n\"\\x8e\\x85\\x86\\x88\\x89\\x83\\x86\\x1e\\xfb\\x54\\xfb\\xc4\\x88\\xd1\\x80\\xf4\\x80\\xd0\\x19\\xcb\\x80\\x89\\x92\\x7f\\x1b\\x85\\x80\\x88\\x87\\x7e\\x1f\\x8a\"\n\"\\x67\\x84\\x6b\\x86\\x1e\\x87\\x80\\x89\\x89\\x80\\x1f\\x0b\\xf9\\x58\\x23\\x0a\\x7c\\x8f\\x05\\x73\\x7a\\x7a\\x81\\x70\\x1b\\x81\\x80\\x8d\\x93\\x75\\x1f\\x9b\"\n\"\\x5c\\x5d\\x93\\x62\\x1b\\xfb\\x67\\xfb\\x54\\xfb\\x5c\\xfb\\x70\\x47\\xa8\\x45\\xba\\x5b\\x1f\\x58\\xbe\\xd4\\x70\\xe2\\x1b\\xe3\\xd3\\x9e\\xb6\\xd8\\x1f\\xbc\"\n\"\\xf7\\x4f\\x9c\\xc3\\x9a\\x97\\xcc\\x8f\\x19\\x9b\\xfb\\x9e\\x7b\\x07\\xc0\\x85\\x8b\\x8b\\x98\\x84\\x08\\x92\\x87\\x90\\x82\\x83\\x1a\\x75\\x84\\x6d\\x76\\x43\"\n\"\\x1e\\x76\\x44\\x87\\x82\\x7f\\x7f\\x08\\x75\\x75\\x65\\x7f\\x5e\\x1b\\xfb\\x15\\x42\\xd5\\xf7\\x17\\xf7\\x0f\\xbc\\xf7\\x14\\xda\\xde\\x1f\\xba\\xb8\\xc9\\xa6\"\n\"\\xcd\\x1b\\xcc\\xc2\\x70\\x5d\\xa9\\x1f\\x9b\\x72\\x92\\x75\\x90\\x5f\\x9d\\x88\\x18\\x0b\\xe6\\xf9\\x11\\x15\\xc3\\x83\\x8e\\x88\\x9c\\x54\\xd8\\xfb\\xa1\\x18\"\n\"\\x4e\\xfb\\x68\\x7a\\x55\\x75\\x7b\\x49\\x87\\x19\\x7b\\xf7\\xb5\\x9b\\x07\\x7b\\x8c\\x7f\\x8c\\x83\\x8c\\x7a\\x8c\\x7d\\x8e\\x81\\x90\\x08\\x84\\x90\\x86\\x95\"\n\"\\x98\\x1a\\xa0\\x92\\xa9\\xa3\\xd9\\x1e\\x8e\\x94\\x8d\\x92\\x8c\\x8f\\xa8\\xf0\\x18\\xf7\\x6f\\xf7\\xa2\\xab\\xb3\\x93\\x92\\xa9\\x99\\x19\\x9b\\xfb\\x51\\x7b\"\n\"\\x07\\xbb\\x86\\x8b\\x8b\\x96\\x84\\x48\\x1d\\x70\\x5d\\x4a\\x23\\xfb\\x0d\\x1e\\x7a\\x77\\x85\\x83\\x7c\\x79\\x7f\\xb7\\x86\\x9c\\x7d\\xbc\\x08\\x72\\xe1\\x56\"\n\"\\x0a\\x90\\xc7\\x91\\x1e\\x9b\\xfb\\x83\\x07\\x0b\\xfa\\x1e\\x22\\x0a\\xfb\\x4d\\x7b\\x06\\xc1\\x86\\x96\\x84\\x6f\\x1a\\x7a\\x84\\x74\\x7d\\x70\\x1e\\xfb\\x4f\"\n\"\\xfc\\x04\\x63\\xf8\\x26\\x05\\x8a\\x90\\x8b\\x92\\x8e\\x1a\\xb3\\x99\\x98\\xc1\\x90\\x1e\\x9b\\xfb\\x82\\x7b\\x07\\xc5\\x89\\x95\\x84\\x92\\x5a\\x94\\x46\\x18\"\n\"\\xfb\\x40\\xfb\\xf0\\x5f\\xf8\\x2a\\x05\\x8a\\x90\\x8b\\x92\\x8d\\x1a\\xb2\\x97\\x94\\xc8\\x92\\x1e\\x9b\\xfb\\x80\\x7b\\x07\\xac\\x87\\x94\\x88\\x94\\x82\\x97\"\n\"\\x80\\x8f\\x78\\x97\\x2f\\xc9\\xfc\\x99\\x18\\x9e\\x06\\xf7\\x72\\xf8\\x5a\\x05\\x90\\x06\\xbd\\xfc\\x5a\\x05\\x9f\\x06\\xf7\\xc3\\xf8\\xdb\\xa6\\xbe\\x95\\x94\"\n\"\\xb1\\x97\\x19\\x0b\\xaf\\xf7\\x26\\x15\\x77\\xfb\\x33\\x05\\x9b\\x06\\x9c\\x94\\x8f\\x8f\\x96\\x1b\\x96\\x9d\\x87\\x86\\x9f\\x1f\\x84\\xa2\\x9a\\x88\\x9c\\x1b\"\n\"\\xdf\\x6f\\x0a\\x0b\\xf9\\x6b\\x69\\x1d\\xc4\\x86\\x98\\x81\\x67\\x1a\\x7f\\x89\\x80\\x84\\x76\\x1e\\x8a\\x88\\x8a\\x87\\x8a\\x1a\\x25\\xfc\\x10\\xfb\\x64\\xf8\"\n\"\\x87\\x05\\xfb\\x35\\x7b\\x06\\xba\\x87\\x9f\\x7e\\x9e\\x64\\xfb\\x0b\\xfc\\x35\\x18\\x65\\xfb\\x14\\x83\\x7f\\x52\\x83\\x08\\x7b\\xf7\\x5a\\x9b\\x07\\x57\\x8f\"\n\"\\x79\\x96\\xa7\\x1a\\x98\\x8e\\x9f\\x91\\xa0\\x1e\\xf7\\x06\\xf8\\x3a\\xf7\\x7a\\xfc\\xba\\x05\\x9d\\x06\\xf7\\x24\\xf8\\x8b\\xb0\\xf7\\x16\\x8f\\x90\\xca\\x99\"\n\"\\x19\\x0b\\xdc\\xf7\\xc9\\x15\\x9f\\xbc\\x9a\\x96\\xb9\\x8a\\x08\\xf7\\x26\\x06\\xfb\\xca\\xfc\\x08\\x94\\x82\\x05\\x98\\x9b\\x98\\x90\\x9b\\x1b\\xa5\\xab\\x7e\"\n\"\\x6e\\xba\\x1f\\x6c\\xbd\\xac\\x7e\\xa8\\x1b\\xbd\\xb7\\xaf\\xb3\\xa1\\x7d\\x99\\x76\\x77\\x7d\\x7e\\x78\\x83\\x8e\\x82\\x91\\x7f\\x1f\\x8e\\x85\\x8d\\x85\\x88\"\n\"\\x1a\\x82\\x80\\x85\\x7b\\x72\\x7f\\x94\\xb4\\x6a\\x1e\\x5f\\xc4\\x78\\x98\\x51\\x98\\xf7\\xb6\\xf7\\xec\\x18\\x96\\xfb\\xb0\\x07\\x6c\\xfb\\x07\\x05\\x0b\\xf8\"\n\"\\x27\\x22\\x0a\\xfb\\xa5\\x7b\\x06\\xca\\x85\\x99\\x83\\x6e\\x9f\\x0a\\xf8\\x91\\x07\\xc5\\xf7\\x47\\x77\\x91\\x68\\x43\\x70\\x6b\\x5f\\x75\\x19\\x7a\\x68\\x62\"\n\"\\x85\\x33\\x1b\\x40\\x72\\x93\\xa5\\x93\\x8f\\xa0\\x91\\xa0\\x1f\\xf7\\x0f\\xf8\\x4f\\x9a\\xbe\\xa5\\x9e\\xc7\\x8f\\x19\\x0b\\x73\\x7e\\x35\\x1d\\x9b\\x1a\\x95\"\n\"\\x8d\\x9b\\x8f\\x9a\\x1e\\x0b\\x86\\x83\\x89\\x8a\\x88\\x88\\x0b\\xf8\\x68\\x5d\\x0a\\x6a\\x8d\\x48\\x08\\x0b\\xf9\\x20\\x7d\\x1d\\x0b\\xf8\\xf2\\x22\\x0a\\xfc\"\n\"\\x7a\\x06\\x5d\\xfb\\x26\\x9e\\x86\\xb6\\xe7\\xae\\x9e\\xf7\\x17\\x8f\\x19\\xf7\\x3f\\x06\\xfc\\x73\\xfc\\xef\\x05\\x7d\\xf8\\x8d\\x07\\xc1\\xf7\\x3c\\x78\\x8e\"\n\"\\x57\\xfb\\x03\\x61\\x74\\xfb\\x30\\x8a\\x19\\xfb\\x35\\x06\\xf8\\x77\\xf8\\xef\\x05\\x0b\\x54\\x0a\\x9c\\x7e\\x80\\x91\\x41\\x1d\\xa5\\x0a\\x81\\x83\\x87\\x85\"\n\"\\x84\\x1e\\x0e\\x1f\\x7a\\x6e\\x05\\x7b\\xb5\\xa2\\x86\\xa7\\x44\\x1d\\x0b\\x8e\\x9b\\x93\\x8c\\x94\\x1b\\x9e\\x93\\x84\\x0b\\x1a\\xb3\\x72\\xaa\\x6a\\x6e\\x75\"\n\"\\x77\\x0b\\x90\\x99\\x6d\\x1f\\x9c\\x65\\x0b\\xb5\\x1e\\xd3\\xf7\\xd4\\x05\\x0b\\xf7\\x0d\\x16\\xbf\\xf7\\x3f\\x9c\\xb4\\xb9\\xd8\\x08\\xc3\\xad\\xa6\\xaa\\x9c\"\n\"\\x1b\\x92\\x8f\\x87\\x81\\x90\\x1f\\x7a\\x93\\x93\\x86\\x9f\\x1b\\xa9\\x9b\\x9d\\xab\\xef\\x1d\\x60\\x63\\x51\\x7b\\x63\\x7d\\x67\\x18\\xc0\\xf7\\x6d\\x88\\x8d\"\n\"\\x42\\x7e\\x82\\x89\\x42\\x7f\\x19\\x7a\\x07\\x8f\\xa1\\x8f\\xc3\\x1d\\x0b\\xf7\\x8e\\x9d\\x15\\x35\\x0a\\xf7\\x0f\\xf8\\x5d\\x3f\\x1d\\x0e\\xf7\\x67\\x72\\x0a\"\n\"\\x0b\\x08\\x9b\\xfb\\xa5\\x7b\\x07\\xce\\x85\\x96\\x85\\x6e\\x1a\\x7f\\x88\\x7b\\x87\\x7a\\x1e\\x56\\xfb\\x54\\x05\\x6d\\xfb\\x01\\x7e\\x4d\\x61\\x1a\\x2c\\xe6\"\n\"\\x46\\x0b\\x15\\x70\\x77\\x75\\x6c\\x6b\\x9e\\x76\\xa8\\xa5\\xa2\\xa2\\xa7\\xa8\\x74\\xa5\\x70\\x1f\\x0e\\xf7\\x11\\xf7\\xca\\x49\\x0a\\x8e\\x9b\\x92\\x8c\\x94\"\n\"\\x1b\\x9e\\x93\\x84\\x7a\\x80\\x89\\x7f\\x86\\x78\\x1f\\x30\\xfb\\xe8\\x05\\xd3\\x06\\x0b\\x3e\\x0a\\x71\\x79\\x91\\x80\\x9e\\x7a\\x1e\\x9a\\x7d\\x90\\x83\\x80\"\n\"\\x1a\\x0b\\x15\\xa1\\x0a\\x9a\\xbe\\xa5\\xaf\\x0a\\x7c\\x0b\\x7a\\x47\\x77\\x79\\x4e\\x8a\\x19\\x86\\x79\\x05\\xf7\\x97\\x06\\x0b\\x15\\x6d\\x72\\x72\\x6b\\x6e\"\n\"\\xa4\\x72\\xa7\\xab\\x36\\x1d\\x0b\\x6f\\x75\\x76\\x70\\x5b\\x1d\\x0b\\x82\\x60\\x88\\x86\\x78\\x18\\x3d\\x0a\\x0b\\x4a\\x1d\\x76\\x0b\\x1b\\x9e\\x93\\x84\\x7a\"\n\"\\x81\\x89\\x7f\\x86\\x78\\x1f\\x0b\\x5f\\xad\\x4e\\xfb\\x2a\\xfb\\x20\\xfb\\x26\\xfb\\x30\\x0b\\x1a\\xa0\\x79\\x9c\\x76\\x76\\x7b\\x0b\\x82\\x82\\x1b\\x83\\x85\"\n\"\\x91\\x92\\x9f\\xb5\\x0b\\x15\\xaa\\x06\\xfb\\x08\\xf7\\x29\\x05\\x0b\\x79\\x05\\xf7\\x65\\x29\\x0a\\x0b\\x80\\xb6\\x9a\\x1a\\xa4\\x97\\x0b\\x1a\\x7c\\x88\\x77\"\n\"\\x83\\x70\\x1e\\x0b\\xa8\\xb0\\xae\\xa9\\xa9\\xae\\x1f\\x0b\\xf7\\x95\\xf7\\xde\\x6e\\x1d\\xf7\\x99\\xf7\\xf1\\x15\\x86\\x1d\\x82\\x89\\x89\\x78\\x91\\x0a\\xab\"\n\"\\x98\\x89\\x86\\x95\\x1f\\x98\\x85\\x93\\x7e\\x7b\\x1a\\x81\\x89\\x7d\\x87\\x7c\\x1e\\xfb\\x0f\\xfc\\x5e\\x82\\x0a\\x0b\\xf9\\x1d\\x23\\x0a\\xfc\\x8c\\x7b\\x06\"\n\"\\xca\\x85\\x9b\\x83\\x6f\\x1a\\x7f\\x86\\x6c\\x85\\x76\\x1e\\xfb\\x0d\\xfc\\x55\\x7a\\x51\\x84\\x84\\x52\\x81\\x19\\x7b\\xf8\\x96\\x07\\xc9\\xf7\\x38\\x7a\\x93\"\n\"\\x5d\\x4a\\x70\\x71\\x5f\\x77\\x19\\x79\\x66\\x47\\x81\\x3d\\x1b\\x53\\x73\\x95\\xa3\\x98\\x96\\xbb\\xa3\\xe3\\x1f\\x90\\x9a\\x98\\xbe\\x98\\xbe\\xbb\\x88\\x18\"\n\"\\xb9\\x8a\\xa8\\x8a\\xa3\\x87\\x93\\x84\\x19\\x94\\x84\\x8d\\x84\\x75\\x1a\\x79\\x8a\\x81\\x86\\x74\\x1e\\x9f\\x86\\xce\\xf7\\x7f\\x78\\x90\\x66\\x34\\x81\\x85\"\n\"\\x30\\x87\\x19\\x7e\\x6b\\x8a\\x8a\\x67\\x1f\\xcc\\xf7\\x81\\x05\\xa2\\x91\\x95\\x8e\\xc6\\x1b\\xf7\\x33\\xae\\x7d\\x4e\\x7b\\x8b\\x7f\\x8a\\x7a\\x1f\\xa0\\x89\"\n\"\\x05\\x0b\\xf8\\x63\\xf7\\x03\\x15\\xe7\\x1d\\xf7\\x0a\\xad\\xf7\\x04\\x1f\\xa2\\xdb\\x9f\\xd4\\xc3\\xf7\\x6f\\x86\\x90\\x18\\x57\\x80\\x67\\x86\\x4a\\x84\\x08\"\n\"\\x7a\\x07\\xc2\\x89\\x92\\x88\\x76\\x1a\\x7d\\x8a\\x88\\x7d\\x56\\x1e\\x5f\\xfb\\x38\\x8f\\x1d\\xfb\\x38\\xf7\\xd1\\x87\\x0a\\x0b\\xf8\\x68\\x15\\x7c\\x1d\\x7a\"\n\"\\xb9\\xa6\\x85\\xaa\\x9b\\x1d\\x0b\\xf7\\x9e\\xf7\\xdf\\x15\\xd8\\x06\\xbf\\xa2\\x7d\\x6a\\x7b\\x89\\x82\\x84\\x6a\\x1f\\x9c\\x06\\xcd\\xf7\\x85\\x05\\x78\\x06\"\n\"\\x74\\x3d\\x6c\\x73\\x3e\\x5e\\x1d\\xf2\\x06\\xf0\\xb2\\x73\\x4d\\x7f\\x8a\\x84\\x87\\x7a\\x1f\\x9d\\x06\\xb5\\xf7\\x32\\x05\\xfc\\x75\\x25\\x1d\\xae\\x98\\x8a\"\n\"\\x85\\x95\\x1f\\x98\\x85\\x93\\x7e\\x7c\\xba\\x0a\\x78\\x79\\x50\\x89\\x20\\x1d\\xf8\\x82\\x06\\xc8\\xf7\\x50\\x05\\x7b\\x06\\x75\\x5b\\x77\\x71\\x62\\x1d\\x37\"\n\"\\x7e\\x8f\\xa3\\x92\\x8c\\x90\\x8f\\x9a\\x1f\\x0b\\xbb\\xf7\\xda\\x15\\xe5\\x06\\x4a\\xfb\\x80\\x7a\\x51\\x83\\x99\\x1d\\xd5\\x0a\\x72\\x84\\x73\\x1e\\x5d\\xfb\"\n\"\\x38\\x05\\x31\\x06\\xf7\\xeb\\x16\\xfb\\x2d\\x06\\xca\\xf7\\x76\\x05\\xa1\\x91\\x9b\\x92\\xb6\\x1b\\xf7\\x1c\\xd6\\x3f\\xfb\\x1f\\xfb\\x01\\x61\\xfb\\x03\\x47\"\n\"\\x47\\x1f\\x4f\\x50\\x3a\\x6d\\x23\\x1b\\x5d\\x78\\x96\\xa5\\x97\\x8e\\x98\\x9c\\xc9\\x1f\\x8d\\x93\\xb9\\xf7\\x38\\x05\\xf7\\x2d\\x06\\x0e\\x15\\x97\\x79\\xa1\"\n\"\\x70\\xac\\x64\\x94\\x81\\x92\\x82\\x90\\x83\\x08\\x63\\xa6\\xa4\\x6f\\x94\\x1b\\x8f\\x8e\\x8e\\x8f\\x95\\x72\\xc2\\x66\\xcf\\x1f\\x88\\x90\\x83\\x9c\\x82\\x9d\"\n\"\\xa6\\xa9\\xa1\\xa2\\x9b\\x99\\x98\\x97\\x98\\x98\\x98\\x98\\x08\\xaf\\xb1\\x9b\\xa2\\x98\\x1a\\x8f\\x88\\x8e\\x88\\x84\\x0b\\x15\\x87\\x79\\x05\\x9e\\x06\\xba\"\n\"\\x8a\\x9f\\x7a\\x99\\x58\\xf7\\x10\\xfc\\x3e\\x18\\x45\\x61\\x73\\x70\\x78\\x1b\\x81\\x80\\x91\\x95\\x82\\x1f\\xb4\\x66\\x88\\x8d\\x73\\x1b\\x6d\\x75\\x75\\x6c\"\n\"\\x60\\xb5\\x69\\xc2\\xb8\\xb1\\x9e\\xb1\\xa9\\x1f\\xad\\xb5\\x92\\x95\\xdc\\xf7\\x16\\xf7\\x37\\xf7\\x9c\\x18\\xd7\\xf7\\x0e\\xaf\\xae\\xc2\\x8e\\x90\\x9d\\x18\"\n\"\\xfb\\x65\\x22\\x1d\\xa8\\x06\\xa5\\x9a\\x84\\x7f\\x7e\\x87\\x84\\x60\\x47\\x1f\\xfb\\x4d\\xfb\\xb8\\x3e\\xf7\\xde\\x05\\x8a\\x92\\x8a\\x91\\x94\\x1a\\xab\\x9c\"\n\"\\x9a\\xb0\\x1e\\xa0\\x29\\x0a\\x0e\\xf9\\x11\\x15\\xc4\\x84\\x99\\x82\\x71\\xa2\\x1d\\x96\\x8d\\x93\\x95\\xb1\\x1e\\xc0\\xf7\\x55\\x05\\x85\\xa5\\xa3\\x89\\xb5\"\n\"\\x1b\\xdd\\xcf\\x9c\\xaa\\xb5\\xdd\\x1d\\xfb\\x8c\\x06\\xf7\\x44\\x51\\x15\\xa0\\x91\\x97\\x92\\xa7\\x1b\\xb2\\xb1\\x82\\x7c\\x9f\\x1f\\xa5\\x79\\x96\\x6d\\x5c\"\n\"\\xd7\\x1d\\x86\\x8b\\x90\\x6e\\x1f\\x0b\\xf9\\x91\\x69\\x1d\\x8e\\x0a\\xad\\xa9\\xf7\\x09\\xcf\\xf7\\x7f\\x1f\\x8d\\x92\\x8d\\x91\\x8c\\x91\\xa0\\xd1\\x9b\\x99\"\n\"\\xcf\\x92\\x44\\x0a\\xf7\\x13\\xf7\\x17\\xde\\xd2\\xf7\\x2a\\xb7\\x1e\\xde\\xf7\\xb1\\xb1\\xf7\\x16\\x8f\\x90\\xc9\\x99\\x19\\x0b\\xf7\\x5d\\xf8\\x14\\x15\\x87\"\n\"\\xaa\\x86\\x9b\\x7d\\x9a\\xfb\\x1b\\x6c\\x18\\x87\\x7b\\x05\\x8f\\x99\\x91\\x8c\\x94\\x1b\\xb8\\x9b\\x70\\x37\\x93\\x1f\\xa5\\xfb\\xbe\\x05\\x41\\x4e\\x64\\x66\"\n\"\\x7b\\x1b\\x86\\x88\\x8d\\x93\\x89\\x1f\\x9b\\x85\\x82\\x92\\x7c\\x1b\\x73\\x74\\x75\\x75\\x76\\x9d\\x79\\xa1\\xc1\\xf7\\x07\\xf7\\x06\\xf7\\x4c\\xf7\\x19\\x1f\"\n\"\\xde\\xf7\\x08\\xb8\\xe0\\xb5\\x1a\\xb2\\x75\\xa7\\x6c\\x74\\x7b\\x7c\\x74\\x75\\x9a\\x77\\xa2\\x84\\x1e\\x96\\x88\\x8f\\x86\\x81\\x1a\\x67\\x41\\xfb\\x0c\\x30\"\n\"\\xfb\\x03\\x1e\\x0b\\xf7\\xe7\\xf7\\x29\\x15\\x37\\x63\\x5b\\x62\\x4f\\x1b\\x56\\x67\\xb2\\xc5\\xb9\\x9d\\xaf\\xae\\xa5\\x1f\\x77\\xba\\xa0\\x86\\xa9\\x1b\\xac\"\n\"\\x9e\\x97\\xa0\\x9f\\x76\\x97\\x67\\x6e\\x78\\x87\\x7d\\x64\\x1f\\x87\\x9a\\x8a\\x93\\x93\\x1a\\xd7\\xb6\\xc8\\xc1\\xaa\\x9d\\x7a\\x6e\\x8c\\x1e\\x8c\\x72\\x8b\"\n\"\\x8b\\x90\\x81\\x08\\x7e\\x92\\x98\\x83\\x9b\\x1b\\xa5\\x9e\\x9f\\xa7\\xb9\\x58\\xac\\x46\\x23\\x3c\\x57\\x46\\x6a\\x97\\x75\\xae\\x71\\x1f\\x42\\x6f\\x5d\\x57\"\n\"\\x54\\x1a\\x48\\xc8\\x59\\xdf\\xe6\\xc9\\xba\\xf1\\xb8\\x1e\\x0b\\xf8\\x3e\\xf1\\x15\\x5d\\x68\\x77\\x79\\x7b\\x1b\\x84\\x85\\x91\\x92\\x92\\x8b\\x8c\\x92\\xa5\"\n\"\\x1f\\xe8\\xf7\\xf1\\x05\\x43\\x06\\xfb\\x00\\x74\\x2e\\xfb\\x04\\x47\\x1b\\x7b\\x83\\x94\\x9d\\x92\\x8b\\x8d\\x8f\\x97\\x1f\\xbc\\xf7\\x4b\\x5a\\x7f\\x56\\x81\"\n\"\\x5e\\x88\\x20\\x1d\\x3d\\x0a\\x7a\\x80\\x89\\x82\\x85\\x75\\x1f\\x76\\x3d\\x05\\x88\\x7e\\x87\\x71\\x7f\\x1a\\x68\\xa1\\x73\\xad\\xaa\\xad\\x99\\xa6\\xae\\x1e\"\n\"\\xad\\xa5\\x9e\\xa1\\xaf\\xc0\\x4c\\xfb\\x80\\x18\\x89\\x0b\\xf7\\xd6\\xfb\\x40\\x15\\xf7\\x17\\xf8\\x7f\\x05\\x91\\xa3\\x8f\\xa2\\x9e\\x1a\\xae\\x73\\xa3\\x67\"\n\"\\x53\\x4d\\x54\\xfb\\x16\\x31\\x1e\\xa7\\xf0\\x05\\x8e\\x98\\x8d\\x99\\x94\\x1a\\xa9\\x7a\\x9d\\x70\\x53\\x4f\\x57\\x37\\x64\\x1e\\x9d\\x80\\x05\\xc0\\xa5\\xb1\"\n\"\\xb5\\xa2\\x1b\\x95\\x92\\x82\\x7f\\x85\\x8b\\x8b\\x80\\x63\\x1f\\x35\\xfb\\xd9\\x05\\xd3\\x06\\xb1\\xf7\\x21\\x9c\\xcc\\xbc\\xd7\\xc9\\xc5\\x19\\xac\\xad\\x9b\"\n\"\\x95\\x9c\\x1b\\x9a\\x94\\x80\\x79\\x79\\x8a\\x88\\x7d\\x59\\x1f\\xfb\\x12\\xfc\\x5b\\x05\\x0b\\x77\\x0a\\x6e\\x97\\x7f\\xa7\\xb3\\xa3\\x9e\\xe6\\xd6\\x1e\\x7b\"\n\"\\x0a\\x0b\\x37\\x1d\\xc3\\xc3\\x3e\\x0a\\x71\\x78\\x38\\x1d\\x70\\x56\\x68\\x1e\\x0b\\x1b\\x3c\\x30\\x62\\x43\\x3c\\x1f\\x26\\x2e\\x50\\xfb\\x0d\\xfb\\x09\\x1a\"\n\"\\x30\\xa8\\x4e\\xcd\\x5b\\x1e\\x35\\xfb\\x13\\x05\\xb7\\x06\\xd5\\xf7\\x00\\x05\\x7c\\xb1\\xa4\\x85\\xaa\\x1b\\xf7\\x66\\xf7\\x64\\xf7\\x73\\xf7\\x76\\xb9\\x7f\"\n\"\\xbb\\x75\\xb0\\x1f\\x7c\\xa4\\x7e\\x98\\x6b\\xa5\\x08\\xfc\\x33\\xfc\\xbc\\x15\\x79\\xad\\x84\\xa9\\xb1\\x1a\\xf3\\xba\\xf7\\x23\\xca\\xe6\\x1e\\xdb\\xc2\\xca\"\n\"\\xb2\\xd2\\x1b\\xad\\xa2\\x84\\x78\\xa4\\x1f\\xa3\\x6a\\x15\\x9c\\x0b\\xf7\\xf2\\x6c\\x0a\\x0e\\xf9\\x06\\x15\\xf7\\x27\\x06\\xa9\\x99\\x89\\x84\\x96\\x1f\\x9d\"\n\"\\x80\\x96\\x75\\x70\\x1a\\x78\\x89\\x79\\x85\\x6b\\x1e\\x9c\\x06\\xb9\\xf7\\x42\\x05\\xfc\\x61\\x76\\x0a\\x0b\\x15\\x5d\\x5d\\x63\\x76\\x5e\\x1b\\x52\\x64\\xb7\"\n\"\\xcb\\x98\\x8c\\x9b\\x8d\\x9d\\x1f\\xd9\\x8e\\xb8\\x94\\xb9\\xa1\\x08\\xcf\\xaa\\xb6\\xc2\\xc3\\x1a\\xb6\\x63\\xaa\\x52\\xfb\\x16\\xfb\\x1d\\xfb\\x2e\\xfb\\x25\"\n\"\\x2f\\xc1\\x4d\\xdd\\xc9\\xcb\\xad\\xce\\xc8\\x1e\\xfb\\x7e\\xf7\\x12\\x15\\xf7\\x08\\xab\\xd0\\xdf\\xc9\\x1b\\xa2\\x9d\\x78\\x72\\x69\\x75\\x62\\x68\\x6d\\x1f\"\n\"\\x66\\x6b\\x67\\x7f\\x41\\x84\\x08\\x0e\\xf8\\x7f\\x22\\x0a\\xfb\\x92\\xd5\\x0a\\x77\\x83\\x6e\\x1e\\xfb\\x17\\xfc\\x65\\x05\\x64\\x80\\x7d\\x7c\\x73\\x1b\\x73\"\n\"\\x80\\x97\\xa7\\x90\\x8b\\x90\\x8c\\x90\\x1f\\x94\\x07\\xa4\\x75\\xa1\\x70\\x70\\x79\\x75\\x6b\\x56\\xba\\x68\\xd1\\xbe\\xb8\\x9f\\xb0\\xaa\\x1e\\xa6\\xab\\x9f\"\n\"\\xb8\\xa0\\xd7\\xf2\\xf8\\x07\\x18\\x9d\\xc7\\x92\\x91\\xc4\\x93\\x08\\x0b\\xc7\\xc1\\xd7\\xb2\\x76\\xb6\\x5c\\xc5\\x1f\\x65\\xba\\x7b\\xaa\\xa7\\x1a\\xac\\xa0\"\n\"\\x9f\\xae\\xbf\\xa9\\x66\\x3d\\x95\\x1e\\x9b\\x06\\x9f\\xf7\\x1f\\x05\\x7d\\x06\\x7d\\x82\\x85\\x87\\x7c\\x1b\\x83\\x82\\x8d\\x90\\x78\\x1f\\x93\\x72\\x7d\\x8d\"\n\"\\x7a\\x1b\\x41\\x5c\\x60\\x48\\x6b\\xa0\\x60\\xb5\\x55\\x1f\\xb2\\x58\\x9c\\x68\\x6e\\x1a\\x5d\\x6d\\x6c\\x5f\\x53\\x6d\\xb4\\xea\\x7b\\x1e\\x0b\\xf8\\xc1\\x15\"\n\"\\xa0\\x0a\\x6a\\x1a\\x80\\x89\\x7f\\xa4\\x0a\\xf7\\x96\\x06\\xdf\\xca\\x99\\xa7\\xbb\\x1f\\xc9\\xb0\\xb0\\xc8\\xc5\\x0a\\x75\\x1e\\x81\\x65\\x15\\x8d\\x99\\x0b\"\n\"\\xa4\\x08\\xb5\\xa7\\xa0\\xac\\xb1\\x1a\\xb6\\x6c\\xa6\\x59\\x62\\x69\\x79\\x5d\\x5c\\x1e\\xa1\\xc9\\x44\\x89\\x78\\x60\\x05\\xaf\\x7b\\x7b\\x96\\x69\\x1b\\xfb\"\n\"\\x10\\xfb\\x30\\xfb\\x5c\\xfb\\x32\\x54\\xae\\x64\\xbc\\xcb\\xb8\\xb0\\xf7\\x11\\xe1\\x1f\\x86\\x7a\\x8a\\x83\\x7c\\x1a\\x44\\xb7\\x58\\xca\\xca\\xd7\\xb7\\xcf\"\n\"\\xc3\\x1e\\xfb\\xb9\\xf7\\xd4\\x15\\xa6\\x8a\\x9d\\x77\\x0b\\xef\\x15\\x68\\x73\\x6f\\x72\\x7d\\x1b\\x83\\x84\\x91\\x91\\x8e\\x8c\\x90\\x8c\\x90\\x1f\\xf0\\xf8\"\n\"\\x0f\\x59\\x7f\\x59\\x83\\x5c\\x87\\x20\\x1d\\x8d\\x9b\\x93\\x8c\\x94\\x50\\x0a\\x3f\\xfb\\xae\\x05\\x88\\x7e\\x89\\x7e\\x81\\x1a\\x77\\x9a\\x7f\\xa6\\xac\\xb4\"\n\"\\xaa\\xcc\\xc1\\x1e\\x0b\\xcf\\x0a\\xab\\xa9\\xa1\\x9f\\xa6\\x9c\\xbf\\x0a\\xa1\\xa5\\xc0\\xae\\x1e\\x0b\\x54\\xfb\\x13\\x43\\x3d\\x1e\\x72\\x74\\x6c\\x7b\\x71\"\n\"\\x1b\\x73\\x7f\\xa1\\xb1\\x8d\\x1f\\x92\\xf7\\x27\\xf7\\x01\\xf7\\x47\\xdb\\x87\\x08\\xe0\\xfb\\x5a\\x15\\xa9\\xe4\\x9d\\xad\\xae\\xb1\\x08\\x9f\\x9f\\xa2\\x97\"\n\"\\xa2\\x1b\\xa2\\x97\\x7e\\x74\\x75\\x84\\x76\\x7e\\x77\\x1f\\x6c\\x5c\\x60\\x73\\x31\\x74\\x08\\x0b\\x5c\\x1d\\xa6\\x94\\xa0\\x94\\xb5\\x08\\x0e\\x66\\x1d\\x7d\"\n\"\\x87\\x7e\\x9d\\x1d\\x9d\\x1a\\x96\\x8d\\x96\\x8f\\x9c\\x1e\\x0b\\x1f\\x8e\\x95\\x8c\\x8d\\x8d\\x94\\x84\\x8e\\x18\\x4e\\x84\\x88\\x88\\x80\\x5b\\x05\\xb0\\x83\"\n\"\\x6e\\xa0\\x60\\x1b\\xfb\\x19\\xfb\\x2d\\xfb\\x4a\\xfb\\x33\\x45\\xb1\\x62\\xcb\\xd1\\xb6\\xac\\xf7\\x10\\xe3\\x1f\\x76\\x39\\x89\\x83\\x72\\x1a\\x0b\\x1f\\x9c\"\n\"\\x87\\xd0\\xf7\\x7c\\x79\\x8f\\x61\\x30\\x81\\x86\\xfb\\x33\\x8a\\x19\\xc8\\xf7\\x72\\x05\\xac\\x94\\x93\\x8f\\xbb\\x1b\\xf7\\x37\\xa7\\x7f\\x45\\x84\\x8b\\x7b\"\n\"\\x8a\\x7e\\x1f\\x9c\\x89\\xac\\xf7\\x2d\\x05\\xfc\\x99\\x7c\\x06\\x0b\\xd6\\x06\\xb3\\xf7\\x2e\\x98\\xad\\xb3\\xc8\\x08\\xda\\xbf\\xcf\\xc9\\xae\\x1b\\x9a\\x98\"\n\"\\x7f\\x7e\\x87\\x88\\x7e\\x87\\x7b\\x1f\\x54\\xfb\\x63\\x05\\x7e\\x5a\\x84\\x6c\\x7f\\x1a\\x71\\x9c\\x7b\\xa7\\xbd\\xae\\xa6\\xe2\\xc7\\x1e\\x0b\\xf7\\x32\\xa8\"\n\"\\xb0\\xd1\\xc3\\x1b\\x99\\x93\\x36\\x0a\\x87\\x43\\x1d\\x9e\\x9d\\xa1\\xb1\\x66\\xa6\\x59\\x5b\\x64\\x75\\x5d\\x67\\x1e\\x6d\\x63\\x0b\\xfb\\x3b\\xf7\\xd3\\x15\"\n\"\\xad\\x89\\xa1\\x73\\x68\\x1a\\x37\\x58\\xfb\\x0a\\x47\\x41\\x1e\\x70\\x73\\x69\\x7a\\x6e\\x1b\\x67\\x75\\xa7\\xb9\\xc3\\xb0\\xf0\\xb7\\xca\\x1f\\xb3\\xc5\\xb9\"\n\"\\xab\\xb4\\x88\\x08\\x0b\\x2a\\x0a\\x99\\x93\\x8d\\x95\\x85\\x0a\\x0b\\x86\\x79\\x05\\xf7\\x54\\x06\\xf7\\x28\\xbd\\x93\\xad\\xc0\\x1f\\xc6\\xaf\\xaf\\xca\\xce\"\n\"\\x1a\\xd1\\x68\\xb7\\x3f\\xa6\\x1e\\xbf\\x99\\xa2\\x95\\xa4\\x9f\\x08\\xb2\\xa9\\xa4\\xbc\\xb8\\x1a\\xb4\\x0b\\xc0\\x48\\xd9\\xd1\\xbd\\xac\\xdd\\xc5\\x1e\\x87\"\n\"\\x6f\\x8a\\x7e\\x7e\\x1a\\x67\\x9b\\x72\\xa2\\xb2\\xb2\\xb4\\xe9\\xbb\\x1e\\xfb\\x5f\\xad\\x15\\x2b\\x68\\x61\\x5a\\x5b\\x1b\\x64\\x76\\xab\\xc6\\x0b\\x15\\x42\"\n\"\\x1d\\xf7\\x2e\\x16\\x42\\x1d\\x0b\\xf7\\x34\\xf8\\x48\\x9a\\x1d\\x0b\\xf9\\xce\\xf7\\x3d\\x15\\x20\\x43\\x51\\x6e\\xfb\\x2a\\x1b\\x6d\\x06\\x68\\x7b\\x94\\x9f\"\n\"\\x97\\x9a\\xc5\\xbc\\xf7\\x40\\x1f\\x92\\xa3\\x05\\xb3\\x06\\xec\\xa0\\x82\\x62\\x0b\\xcd\\x1d\\x67\\x7f\\x8d\\x90\\x81\\x1f\\x7e\\x92\\x83\\x98\\x9a\\x1a\\x98\"\n\"\\x8d\\x97\\x8e\\x9a\\x1e\\x0b\\x15\\xfc\\xa0\\x07\\x3a\\xf7\\x66\\x56\\x74\\xf7\\x13\\xfb\\xb2\\x05\\xd8\\x06\\xf7\\x14\\xf7\\xb2\\x56\\xa2\\x3a\\xfb\\x66\\x05\"\n\"\\xf8\\xa0\\x07\\xdc\\xfb\\x66\\xc0\\x0b\\x48\\x55\\x7f\\x7f\\x7b\\x1b\\x82\\x84\\x93\\x95\\x96\\x9b\\xc9\\x9c\\xbf\\x1f\\xa8\\xe8\\x9e\\xd6\\xa4\\x1a\\xb3\\x70\"\n\"\\xa6\\x64\\x4a\\x44\\x4a\\xfb\\x26\\x2e\\x1e\\x0b\\x4f\\x0a\\x7a\\x8f\\x96\\x6d\\x3c\\x0a\\x0b\\x72\\x77\\x78\\x73\\x72\\xa0\\x76\\xd3\\x0a\\x0b\\x15\\xa9\\x89\"\n\"\\x9a\\x78\\x67\\x1a\\xfb\\x2c\\x23\\xfb\\x40\\x2f\\x68\\x74\\xa5\\xb3\\xdd\\xbd\\xf7\\x09\\xcd\\xd1\\x1e\\xa7\\xa8\\xb0\\x9e\\xa7\\x89\\x08\\x0b\\x73\\x1a\\x6e\"\n\"\\x9e\\x77\\xa8\\xb3\\xae\\xa7\\xd8\\xc4\\x1e\\x7b\\x94\\x79\\x76\\x80\\x7f\\x87\\x86\\x19\\x75\\x75\\x7e\\x82\\x81\\x1b\\x85\\x86\\x8f\\x91\\x0b\\x19\\x86\\x78\"\n\"\\x05\\x3d\\x0a\\x79\\x81\\x89\\x80\\x86\\x77\\x1f\\x51\\xfb\\x6d\\x05\\x82\\x6a\\x89\\x7f\\x79\\x1a\\x0b\\x99\\xd5\\x21\\x1d\\xfb\\xa3\\x06\\x85\\x4c\\x1d\\x0b\"\n\"\\x1a\\x90\\x89\\x8f\\x88\\x89\\x87\\x8a\\x89\\x87\\x1e\\x87\\x8a\\x87\\x8a\\x05\\x85\\x7d\\x8b\\x8b\\x85\\x1b\\x86\\x80\\x8d\\x8d\\x7c\\x1f\\x90\\x0b\\x06\\xf7\"\n\"\\x3f\\xf5\\x05\\x97\\x93\\x90\\x93\\x97\\x1a\\x0b\\xd1\\x0a\\xa3\\xa6\\x74\\x9d\\x68\\x60\\x72\\x76\\x48\\x64\\x1f\\x5b\\x38\\x6a\\x71\\x48\\x83\\x08\\x0b\\xc0\"\n\"\\x86\\x9d\\x80\\x6d\\x1a\\x7b\\x71\\x27\\x5b\\xfb\\x3f\\x1e\\x7e\\x5a\\x05\\xfb\\x38\\x5f\\x4b\\x47\\xfb\\x02\\x1b\\x38\\x52\\xba\\xd2\\x0b\\xbc\\x0a\\x79\\x7d\"\n\"\\x6a\\x1d\\x0b\\x5a\\x67\\x4d\\x1b\\x4c\\x63\\xaf\\xca\\x87\\xf7\\x01\\x1d\\xa1\\xae\\x7c\\xb8\\x1b\\xc0\\x0b\\x7b\\x1e\\xfb\\xab\\xfb\\x7e\\xbe\\xf7\\x53\\x9d\"\n\"\\xd2\\x9e\\x9a\\xcc\\x8c\\x19\\x90\\x9d\\x05\\xfb\\x9f\\x22\\x1d\\x0b\\xb4\\x1d\\x84\\x1e\\x0e\\xc4\\x1d\\x82\\xd6\\x0a\\x15\\xae\\x06\\xf7\\x3f\\xf5\\x05\\x97\"\n\"\\x92\\x90\\x94\\x97\\x1a\\xa0\\x7b\\x9a\\x77\\x81\\xd6\\x0a\\xd4\\x96\\x0a\\x0b\\x15\\xae\\xb3\\x1d\\x0b\\x76\\x7b\\x7a\\x74\\x67\\xac\\x71\\xb8\\xe5\\xd0\\xec\"\n\"\\xf7\\x4e\\x40\\x0a\\xf7\\x2f\\x06\\x96\\x0b\\xf7\\xbd\\x15\\x64\\x8c\\x81\\x8f\\x9b\\x1a\\x93\\x92\\xa4\\x97\\xb3\\x1e\\xe1\\xf7\\xa6\\x05\\x8d\\x91\\x8c\\x0b\"\n\"\\x35\\x92\\x87\\x8d\\xb0\\x1a\\x97\\x8d\\x95\\x95\\xaf\\x1e\\x0b\\x15\\xd9\\x06\\xc0\\xa2\\x7c\\x6a\\x7b\\x89\\x81\\x84\\x6c\\x1f\\x9c\\x06\\xcb\\xf7\\x85\\x05\"\n\"\\x7a\\x06\\x0b\\x9d\\x1f\\x8c\\x8f\\x8c\\x8e\\x8c\\x8c\\x08\\x8d\\x07\\xd0\\xf7\\x9d\\xed\\xbd\\x97\\xb9\\x05\\x0e\\x15\\x6c\\x73\\x72\\x6b\\x6d\\xa3\\x73\\xa9\"\n\"\\xab\\xa4\\xa3\\xa9\\xab\\x72\\xa4\\x6c\\x1f\\x0e\\x8c\\x0a\\x9f\\x7b\\x9b\\x76\\x82\\x82\\x87\\x85\\x0b\\x15\\xa7\\xaa\\x9b\\x93\\xa5\\x1b\\xa7\\xa1\\x75\\x6d\"\n\"\\x5e\\x5c\\x6d\\x27\\x78\\x1f\\x82\\x07\\x0b\\xc1\\x1d\\x7b\\x0b\\xd4\\x9e\\x9d\\x99\\xd5\\x34\\x1d\\xc2\\x8a\\x9c\\x81\\x0b\\x6d\\x72\\x72\\x6b\\x6e\\xa4\\x72\"\n\"\\xa8\\xaa\\x36\\x1d\\x0e\\x15\\xa9\\xa4\\x72\\x6d\\x6d\\x72\\x72\\x6d\\x6e\\x71\\xa4\\xa8\\xaa\\xa4\\xa4\\xa9\\x1f\\x0b\\x88\\x19\\x7b\\x07\\xc1\\x8a\\x94\\x88\"\n\"\\x77\\x1a\\x0b\\x87\\x7d\\x1e\\xfb\\x0e\\xfc\\x5f\\x79\\x47\\x78\\x49\\x1d\\x0b\\x5f\\x1d\\x77\\x0b\\x6f\\x75\\x76\\x70\\x6e\\xa1\\x75\\xa7\\xa6\\xa1\\xa1\\xa6\"\n\"\\xa5\\x73\\xa3\\x72\\x1f\\x0b\\xcd\\x0a\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x0b\\x1b\\xf0\\xbe\\x5f\\x35\\x22\\x37\\x41\\xfb\\x0b\\x77\\x7d\\x8c\\x90\\x6f\\x1f\\x0b\"\n\"\\xb5\\x60\\xc0\\xde\\x1d\\x0b\\x6a\\x1a\\x5d\\x6b\\x6d\\x5c\\x5b\\x6d\\xa7\\xb7\\xba\\xa6\\xab\\xc8\\xa4\\x1e\\x0b\\xf7\\xae\\xf7\\x93\\x15\\xfb\\x6f\\x06\\x7d\"\n\"\\x4c\\x05\\xf7\\x70\\x06\\x0e\\xf7\\xe5\\xe8\\x1d\\x0e\\xf7\\x0d\\xd9\\xdc\\x1f\\xbc\\xbb\\xca\\xa7\\x0b\\xf8\\x1b\\xf7\\x2c\\x15\\x54\\xf8\\x92\\x05\\xfb\\x45\"\n\"\\x06\\x86\\x79\\xac\\x0b\\x9e\\xc7\\x8f\\x19\\x9b\\xfb\\xa5\\x7b\\x07\\xca\\x85\\x99\\x83\\x6e\\x1a\\x0b\\xbc\\xb4\\xa5\\xbe\\xae\\x1e\\x7a\\x9d\\x05\\x75\\x70\"\n\"\\x73\\x81\\x6b\\x1b\\x0b\\xdb\\x1d\\x0e\\x1b\\xbb\\xac\\xb0\\xce\\x99\\x1f\\x0e\\x24\\x0a\\x70\\x84\\x8c\\x8f\\x80\\x1f\\x7b\\x90\\x81\\x9a\\x0b\\x86\\x90\\x4f\"\n\"\\x7d\\x64\\x85\\x51\\x84\\x19\\x7b\\x07\\xa5\\x8c\\x05\\x0b\\x9d\\x05\\x55\\x8c\\x7a\\x96\\xab\\x1a\\x95\\x8d\\x97\\x8f\\x9b\\x1e\\x0b\\x8c\\x8f\\x81\\x1f\\x7b\"\n\"\\x91\\x81\\x99\\x0b\\x1e\\xfb\\x0f\\xfc\\x4e\\x0b\\x84\\x7e\\x89\\x85\\x81\\x1a\\x73\\x9a\\x7d\\xa3\\xa7\\x9f\\x9e\\x0b\\x15\\x64\\x71\\x7a\\x7f\\x6c\\x1b\\x76\"\n\"\\x76\\x90\\x94\\x7a\\x1f\\x0b\\x1a\\x7f\\x89\\x7d\\x87\\x7d\\x1e\\xfb\\x0e\\xfc\\x5e\\x7a\\x48\\x0b\\x1b\\x7b\\x78\\xf7\\xb8\\x9e\\x7a\\x06\\x55\\x77\\x9f\\xc2\"\n\"\\x1f\\x0b\\xf7\\x72\\xf7\\x06\\x15\\x72\\x6a\\x85\\x83\\x81\\x81\\x08\\x7a\\x0b\\x79\\x47\\x78\\x7a\\x4e\\x89\\x20\\x1d\\xf7\\x89\\x06\\x0b\\xa3\\xb8\\xad\\x1f\"\n\"\\x9f\\xa6\\x93\\xa1\\x94\\xb5\\x08\\x0e\\x85\\x96\\x78\\x9c\\x1e\\x7c\\x99\\x86\\x93\\x96\\x1a\\xa6\\x0b\\x8b\\x8b\\x8e\\x8f\\x08\\x98\\x95\\x97\\x92\\x96\\x1b\"\n\"\\x92\\x0b\\x1f\\x7a\\x6e\\x05\\x7b\\xb4\\xa2\\x86\\xa8\\x1b\\xd1\\xbc\\x0b\\xa8\\xc8\\xc9\\x1e\\xee\\xec\\xca\\xf7\\x1e\\xf7\\x0b\\x1a\\x0b\\xf9\\x31\\xf9\\x66\"\n\"\\x15\\x5f\\x06\\x57\\x3d\\x05\\x9b\\x65\\x0b\\x4d\\xf3\\x1d\\x05\\x0b\\xce\\x1a\\xf7\\x01\\x33\\xcf\\xfb\\x23\\x7b\\x81\\x8a\\x89\\x0b\\xfb\\x14\\xf7\\xb2\\x05\"\n\"\\x3e\\x06\\xfb\\x13\\xfb\\xb2\\xc0\\x0b\\x06\\xdb\\xf7\\x68\\x05\\x4e\\x06\\x3b\\xfb\\x68\\x05\\x0b\\x06\\x3b\\xfb\\x69\\x05\\xc9\\x06\\xda\\xf7\\x69\\x05\\x0b\"\n\"\\x1b\\xa2\\x9f\\x81\\x7f\\x89\\x8a\\x88\\x88\\x87\\x1f\\x0b\\xda\\x69\\x1e\\x7d\\xad\\xa6\\x87\\xd0\\x1b\\xf7\\xac\\x0b\\xf7\\x6f\\xcd\\xfb\\x6f\\xf7\\x70\\x49\"\n\"\\x06\\x0e\\x81\\x5d\\x7d\\x7f\\x60\\x8a\\x08\\x7b\\xf7\\x61\\x0b\\x06\\x38\\x68\\x84\\x72\\x66\\x1f\\x4a\\x60\\x69\\x0b\\x8b\\x83\\x90\\x08\\x85\\x8f\\x89\\x91\"\n\"\\xae\\x1a\\x0b\\x15\\x36\\x5c\\x5e\\x54\\x52\\x1a\\x63\\xa4\\x6c\\x0b\\x93\\x8c\\x94\\x1b\\x9d\\x93\\x84\\x7c\\x80\\x89\\x0b\\x1f\\x7d\\x99\\x91\\x88\\x9a\\x1b\"\n\"\\xa7\\x9c\\x9a\\x0b\\x1f\\xe3\\xf7\\xe5\\x05\\x43\\x06\\x75\\x3d\\x05\\x0b\\xa4\\xa4\\x9e\\x9e\\xa3\\xa4\\x76\\xa0\\x73\\x1f\\x0b\\x65\\x72\\x60\\x1b\\x5c\\x6c\"\n\"\\xaf\\xc2\\xd5\\xa8\\x0b\\x7b\\x06\\xca\\x85\\x99\\x83\\x70\\x1a\\x7c\\x87\\x0b\\x83\\x88\\x84\\x84\\x1e\\x0e\", 56086\n};\n"
  },
  {
    "path": "src/fonts/NimbusRoman-Regular.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusRoman_Regular_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x14\\x4e\\x69\\x6d\\x62\\x75\\x73\\x52\\x6f\\x6d\\x61\\x6e\\x2d\\x52\\x65\\x67\\x75\\x6c\\x61\\x72\\x00\\x01\\x01\\x01\"\n\"\\x2f\\xf9\\xbc\\x00\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xc0\\x03\\xf8\\x18\\x04\\x20\\x0c\\x03\\xfb\\x3c\\xfb\\xad\\xfa\\x7c\\xfa\\xb1\\x05\"\n\"\\x1c\\x28\\xad\\x0f\\x1c\\x28\\xc0\\x11\\xbc\\x1d\\x00\\x00\\xac\\xae\\x12\\x01\\xa6\\x02\\x00\\x01\\x00\\x08\\x00\\x0e\\x00\\x13\\x00\\x1d\\x00\\x24\\x00\\x2b\"\n\"\\x00\\x35\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x74\\x00\\x7a\\x00\\x84\\x00\\x8b\\x00\\x8e\\x00\\x95\"\n\"\\x00\\x9c\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\\x00\\xcd\\x00\\xd9\\x00\\xe3\\x00\\xe7\\x00\\xf2\\x00\\xf4\\x00\\xfa\\x01\\x04\\x01\\x0b\"\n\"\\x01\\x12\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\\x01\\x4d\\x01\\x53\\x01\\x59\\x01\\x5f\\x01\\x6b\\x01\\x6f\\x01\\x71\\x01\\x77\\x01\\x7d\"\n\"\\x01\\x89\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\\x01\\xc2\\x01\\xcd\\x01\\xd0\\x01\\xd2\\x01\\xd5\\x01\\xdb\\x01\\xe1\\x01\\xed\\x01\\xf0\"\n\"\\x01\\xf6\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\\x02\\x27\\x02\\x33\\x02\\x38\\x02\\x3e\\x02\\x4b\\x02\\x52\\x02\\x59\\x02\\x60\\x02\\x6f\"\n\"\\x02\\x7b\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\\x02\\xa8\\x02\\xb3\\x02\\xb9\\x02\\xbf\\x02\\xc9\\x02\\xcd\\x02\\xd3\\x02\\xda\\x02\\xe3\"\n\"\\x02\\xec\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\\x03\\x2b\\x03\\x34\\x03\\x3d\\x03\\x46\\x03\\x4f\\x03\\x58\\x03\\x61\\x03\\x6a\\x03\\x73\"\n\"\\x03\\x7c\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\\x03\\xbb\\x03\\xc4\\x03\\xcd\\x03\\xd6\\x03\\xdf\\x03\\xe8\\x03\\xf1\\x03\\xfa\\x04\\x03\"\n\"\\x04\\x0c\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\\x04\\x4b\\x04\\x54\\x04\\x5d\\x04\\x66\\x04\\x6f\\x04\\x78\\x04\\x81\\x04\\x8a\\x04\\x93\"\n\"\\x04\\x9c\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\\xed\\x04\\xf6\\x04\\xff\\x05\\x08\\x05\\x11\\x05\\x1a\\x05\\x23\"\n\"\\x05\\x2c\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\\x05\\x6b\\x05\\x74\\x05\\x7d\\x05\\x86\\x05\\x8f\\x05\\x98\\x05\\xa1\\x05\\xaa\\x05\\xb3\"\n\"\\x05\\xbc\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\\x05\\xfb\\x06\\x04\\x06\\x0d\\x06\\x16\\x06\\x1f\\x06\\x28\\x06\\x31\\x06\\x3a\\x06\\x43\"\n\"\\x06\\x4c\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\\x06\\x85\\x06\\x90\\x06\\x9a\\x06\\xa3\\x06\\xac\\x06\\xb5\\x06\\xbf\\x06\\xc6\\x06\\xcf\"\n\"\\x06\\xdb\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\\x07\\x11\\x07\\x15\\x07\\x1b\\x07\\x21\\x07\\x26\\x07\\x2d\\x07\\x3a\\x07\\x40\\x07\\x46\"\n\"\\x07\\x50\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\\x07\\x86\\x07\\x8f\\x07\\x92\\x07\\x9a\\x07\\xa3\\x07\\xae\\x07\\xb4\\x07\\xb9\\x07\\xbe\"\n\"\\x07\\xc4\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\\x08\\x05\\x08\\x0a\\x08\\x10\\x08\\x12\\x08\\x19\\x08\\x21\\x08\\x29\\x08\\x33\\x08\\x3d\"\n\"\\x08\\x49\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\\x08\\x8c\\x08\\x97\\x08\\x9c\\x08\\xa8\\x08\\xb4\\x08\\xba\\x08\\xc0\\x08\\xc6\\x08\\xd2\"\n\"\\x08\\xd6\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\\x09\\x0b\\x09\\x11\\x09\\x1c\\x09\\x22\\x09\\x2e\\x09\\x38\\x09\\x40\\x09\\x42\\x09\\x48\"\n\"\\x09\\x55\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\\x09\\x93\\x09\\x9e\\x09\\xa4\\x09\\xa7\\x09\\xa9\\x09\\xb0\\x09\\xbc\\x09\\xca\\x09\\xcd\"\n\"\\x09\\xda\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\\x0a\\x0f\\x0a\\x17\\x0a\\x22\\x0a\\x2e\\x0a\\x34\\x0a\\x39\\x0a\\x42\\x0a\\x47\\x0a\\x50\"\n\"\\x0a\\x53\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\\x0a\\x7c\\x0a\\x89\\x0a\\x90\\x0a\\x9d\\x0a\\xa4\\x0a\\xab\\x0a\\xb2\\x0a\\xb9\\x0a\\xc0\"\n\"\\x0a\\xc7\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\\x0a\\xf8\\x0a\\xff\\x0b\\x06\\x0b\\x0d\\x0b\\x14\\x0b\\x1b\\x0b\\x22\\x0b\\x29\\x0b\\x30\"\n\"\\x0b\\x37\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\\x0b\\x68\\x0b\\x6f\\x0b\\x76\\x0b\\x7d\\x0b\\x84\\x0b\\x8b\\x0b\\x92\\x0b\\x99\\x0b\\xa0\"\n\"\\x0b\\xa7\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\\x0b\\xd8\\x0b\\xdf\\x0b\\xe6\\x0b\\xed\\x0b\\xf4\\x0b\\xfb\\x0c\\x02\\x0c\\x09\\x0c\\x10\"\n\"\\x0c\\x17\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\\x0c\\x48\\x0c\\x4d\\x0c\\x56\\x0c\\x5d\\x0c\\x64\\x0c\\x73\\x0c\\x87\\x0c\\x93\\x0c\\x98\"\n\"\\x0c\\x9e\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\\x0c\\xd1\\x0c\\xd7\\x0c\\xe1\\x0c\\xe5\\x0c\\xe9\\x0d\\x1f\\x0d\\x5f\\x0d\\x73\\x0d\\x7f\"\n\"\\x41\\x45\\x61\\x63\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\\x6c\\x70\\x68\\x61\\x41\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x41\\x6d\\x61\\x63\"\n\"\\x72\\x6f\\x6e\\x41\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x42\\x65\\x74\\x61\\x43\\x61\\x63\\x75\\x74\\x65\\x43\\x63\"\n\"\\x61\\x72\\x6f\\x6e\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x43\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x43\\x68\\x69\\x44\\x63\\x61\\x72\"\n\"\\x6f\\x6e\\x44\\x63\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\\x62\\x72\\x65\\x76\\x65\\x45\\x63\\x61\\x72\\x6f\\x6e\\x45\\x64\\x6f\\x74\\x61\\x63\\x63\"\n\"\\x65\\x6e\\x74\\x45\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x45\\x70\\x73\\x69\\x6c\"\n\"\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x75\\x72\\x6f\\x47\\x61\\x6d\\x6d\\x61\\x47\\x62\\x72\\x65\\x76\"\n\"\\x65\\x47\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x47\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\"\n\"\\x6e\\x74\\x48\\x62\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x49\\x4a\\x49\\x62\\x72\\x65\\x76\\x65\\x49\\x64\\x6f\\x74\\x61\\x63\\x63\"\n\"\\x65\\x6e\\x74\\x49\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x49\\x6f\\x74\\x61\\x49\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\"\n\"\\x73\\x49\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\\x64\\x65\\x4a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x4b\\x61\\x70\\x70\\x61\"\n\"\\x4b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\\x63\\x75\\x74\\x65\\x4c\\x61\\x6d\\x62\\x64\\x61\\x4c\\x63\\x61\\x72\\x6f\\x6e\\x4c\\x63\"\n\"\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\\x4d\\x75\\x4e\\x61\\x63\\x75\\x74\\x65\\x4e\\x63\\x61\\x72\\x6f\\x6e\\x4e\\x63\\x6f\\x6d\"\n\"\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\\x76\\x65\\x4f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x4f\\x6d\\x61\"\n\"\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\"\n\"\\x73\\x4f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\\x69\\x50\\x69\\x50\\x73\\x69\\x52\\x61\\x63\\x75\\x74\\x65\\x52\\x63\\x61\\x72\\x6f\\x6e\"\n\"\\x52\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\\x6f\\x53\\x61\\x63\\x75\\x74\\x65\\x53\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x53\\x63\\x69\"\n\"\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x53\\x69\\x67\\x6d\\x61\\x54\\x61\\x75\\x54\\x62\\x61\\x72\"\n\"\\x54\\x63\\x61\\x72\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x54\\x68\\x65\\x74\\x61\\x55\\x62\\x72\\x65\\x76\\x65\\x55\\x68\\x75\"\n\"\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x55\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x55\"\n\"\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x55\\x72\\x69\\x6e\\x67\\x55\"\n\"\\x74\\x69\\x6c\\x64\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x57\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x57\"\n\"\\x67\\x72\\x61\\x76\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x59\\x67\\x72\\x61\\x76\\x65\\x5a\\x61\\x63\\x75\\x74\\x65\\x5a\\x64\"\n\"\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\\x72\\x65\\x76\\x65\\x61\\x65\\x61\\x63\\x75\\x74\\x65\\x61\\x66\\x69\\x69\\x30\\x30\\x32\"\n\"\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x39\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\"\n\"\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x36\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x32\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x30\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x33\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x33\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x37\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x30\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x34\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x34\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x34\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x31\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\"\n\"\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x38\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x35\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x32\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x37\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x36\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x31\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x34\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x37\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x38\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x38\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x35\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\"\n\"\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x32\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x36\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x39\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x31\\x30\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x33\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x36\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x31\\x30\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x31\\x30\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x38\\x34\\x36\\x61\\x66\\x69\\x69\\x36\\x31\\x32\"\n\"\\x34\\x38\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\\x69\\x36\\x31\\x33\\x35\\x32\\x61\\x6c\\x70\\x68\\x61\\x61\\x6c\\x70\\x68\\x61\\x74\\x6f\"\n\"\\x6e\\x6f\\x73\\x61\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\\x61\\x6e\\x67\\x6c\\x65\\x72\\x69\\x67\\x68\\x74\\x61\\x6f\\x67\"\n\"\\x6f\\x6e\\x65\\x6b\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x61\\x72\\x72\\x6f\\x77\\x62\\x6f\"\n\"\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\\x77\\x72\\x69\\x67\\x68\\x74\\x61\\x72\"\n\"\\x72\\x6f\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x62\\x73\\x65\\x62\\x65\\x74\\x61\\x63\\x61\"\n\"\\x63\\x75\\x74\\x65\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x63\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x63\"\n\"\\x68\\x69\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\\x63\\x6c\\x75\\x62\\x64\\x63\\x61\\x72\\x6f\\x6e\\x64\\x63\\x72\\x6f\\x61\\x74\"\n\"\\x64\\x65\\x6c\\x74\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x62\\x72\\x65\\x76\\x65\\x65\"\n\"\\x63\\x61\\x72\\x6f\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x65\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x65\\x6e\\x67\"\n\"\\x65\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x71\\x75\\x69\\x76\\x61\"\n\"\\x6c\\x65\\x6e\\x63\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\\x65\\x74\\x61\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x78\\x63\\x6c\\x61\\x6d\\x64\"\n\"\\x62\\x6c\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\\x65\\x6d\\x61\\x6c\\x65\\x66\\x72\\x61\\x6e\\x63\\x67\\x61\\x6d\\x6d\\x61\\x67\\x62\\x72\"\n\"\\x65\\x76\\x65\\x67\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x67\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x64\\x6f\\x74\\x61\\x63\"\n\"\\x63\\x65\\x6e\\x74\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x68\\x62\\x61\\x72\\x68\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x68\"\n\"\\x65\\x61\\x72\\x74\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\\x65\\x69\\x6a\\x69\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x69\\x6e\\x66\\x69\\x6e\\x69\\x74\\x79\"\n\"\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x74\\x70\\x69\\x6e\\x74\\x65\"\n\"\\x72\\x73\\x65\\x63\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x69\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x69\\x6f\\x74\\x61\\x69\"\n\"\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x6f\\x74\\x61\"\n\"\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x6b\\x61\\x70\\x70\\x61\\x6b\\x63\\x6f\\x6d\\x6d\"\n\"\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\\x61\\x6e\\x64\\x69\\x63\\x6c\\x61\\x63\\x75\\x74\\x65\\x6c\\x61\\x6d\\x62\\x64\\x61\\x6c\"\n\"\\x63\\x61\\x72\\x6f\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6c\\x64\\x6f\\x74\\x6c\\x65\\x73\\x73\\x65\\x71\\x75\\x61\\x6c\\x6c\\x69\"\n\"\\x72\\x61\\x6c\\x6f\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x6d\\x75\\x73\\x69\"\n\"\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\\x74\\x65\\x6e\\x61\\x70\\x6f\\x73\\x74\\x72\\x6f\\x70\\x68\\x65\\x6e\\x63\\x61\\x72\\x6f\"\n\"\\x6e\\x6e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x71\\x75\\x61\\x6c\\x6e\"\n\"\\x75\\x6f\\x62\\x72\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x6f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x65\\x67\\x61\"\n\"\\x6f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x72\\x74\"\n\"\\x68\\x6f\\x67\\x6f\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x70\\x61\\x72\\x74\\x69\\x61\\x6c\\x64\\x69\\x66\\x66\\x70\\x65\\x73\"\n\"\\x65\\x74\\x61\\x70\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x62\\x73\\x65\\x74\\x70\\x72\\x6f\\x70\\x65\"\n\"\\x72\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\\x6f\\x74\\x65\\x72\\x65\\x76\\x65\\x72\\x73\\x65\\x64\\x72\\x61\\x63\\x75\\x74\\x65\\x72\"\n\"\\x61\\x64\\x69\\x63\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x72\\x65\\x76\\x6c\\x6f\\x67\\x69\\x63\"\n\"\\x61\\x6c\\x6e\\x6f\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\\x73\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x73\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\"\n\"\\x78\\x73\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\\x65\\x63\\x6f\\x6e\\x64\\x73\\x69\\x67\\x6d\\x61\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\"\n\"\\x65\\x73\\x70\\x61\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x73\\x75\\x6e\\x74\\x61\\x75\\x74\\x62\\x61\\x72\\x74\\x63\\x61\\x72\\x6f\\x6e\\x74\"\n\"\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x62\\x72\\x65\\x76\\x65\\x75\\x68\\x75\\x6e\\x67\"\n\"\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x75\\x6e\\x64\\x65\\x72\\x73\\x63\\x6f\\x72\\x65\\x64\\x62\\x6c\\x75\\x6e\\x69\\x30\"\n\"\\x30\\x41\\x30\\x75\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\\x32\\x31\\x41\\x75\\x6e\\x69\\x30\\x32\\x31\\x42\\x75\\x6e\\x69\\x30\\x32\\x43\\x39\\x75\"\n\"\\x6e\\x69\\x30\\x33\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\\x6e\\x69\\x30\\x33\\x41\\x39\\x75\\x6e\\x69\\x30\\x33\\x42\\x43\\x75\\x6e\\x69\\x30\\x33\"\n\"\\x43\\x32\\x75\\x6e\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\\x30\\x44\\x75\\x6e\\x69\\x30\\x34\\x35\\x30\\x75\\x6e\\x69\\x30\\x34\\x35\\x44\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x39\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\\x69\\x30\\x34\\x39\\x36\\x75\\x6e\\x69\\x30\\x34\\x39\\x37\\x75\\x6e\\x69\\x30\\x34\\x39\"\n\"\\x38\\x75\\x6e\\x69\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\\x41\\x75\\x6e\\x69\\x30\\x34\\x39\\x42\\x75\\x6e\\x69\\x30\\x34\\x39\\x43\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x39\\x44\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\\x30\\x34\\x41\\x31\\x75\\x6e\\x69\\x30\\x34\\x41\\x32\\x75\\x6e\\x69\\x30\\x34\\x41\\x33\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\\x75\\x6e\\x69\\x30\\x34\\x41\\x45\\x75\\x6e\\x69\\x30\\x34\\x41\\x46\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x42\\x30\\x75\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\\x34\\x42\\x32\\x75\\x6e\\x69\\x30\\x34\\x42\\x33\\x75\\x6e\\x69\\x30\\x34\\x42\\x36\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\\x6e\\x69\\x30\\x34\\x42\\x39\\x75\\x6e\\x69\\x30\\x34\\x42\\x41\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x42\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\\x43\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x43\\x75\\x6e\\x69\\x30\\x34\\x44\\x38\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x45\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\\x69\\x30\\x34\\x45\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x39\\x75\\x6e\\x69\\x30\\x34\\x45\"\n\"\\x45\\x75\\x6e\\x69\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\\x45\\x75\\x6e\\x69\\x32\\x30\\x41\\x46\\x75\\x6e\\x69\\x32\\x31\\x32\\x36\\x75\\x6e\\x69\"\n\"\\x32\\x32\\x31\\x35\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\\x32\\x32\\x32\\x37\\x75\\x6e\\x69\\x32\\x32\\x32\\x38\\x75\\x6e\\x69\\x32\\x32\\x39\\x35\"\n\"\\x75\\x6e\\x69\\x32\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x75\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x75\\x70\\x73\\x69\"\n\"\\x6c\\x6f\\x6e\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\"\n\"\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x72\\x69\\x6e\\x67\\x75\\x74\\x69\\x6c\\x64\\x65\\x77\\x61\\x63\"\n\"\\x75\\x74\\x65\\x77\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x77\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x77\\x67\\x72\\x61\\x76\\x65\\x78\\x69\\x79\"\n\"\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\\x76\\x65\\x7a\\x61\\x63\\x75\\x74\\x65\\x7a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\"\n\"\\x7a\\x65\\x74\\x61\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\"\n\"\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x43\\x6f\"\n\"\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\"\n\"\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x4e\\x69\"\n\"\\x6d\\x62\\x75\\x73\\x20\\x52\\x6f\\x6d\\x61\\x6e\\x20\\x52\\x65\\x67\\x75\\x6c\\x61\\x72\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x52\\x6f\\x6d\\x61\\x6e\\x00\\xd1\"\n\"\\x02\\x00\\x01\\x00\\x18\\x00\\x1c\\x00\\x1f\\x00\\x26\\x00\\x42\\x00\\x98\\x00\\xa1\\x00\\xa6\\x00\\xcc\\x00\\xd1\\x00\\xe6\\x00\\xef\\x01\\x01\\x01\\x12\\x01\"\n\"\\x1c\\x01\\x23\\x01\\x28\\x01\\xb1\\x02\\x30\\x02\\xa7\\x02\\xfa\\x03\\x15\\x03\\x33\\x03\\x41\\x03\\x57\\x03\\x64\\x03\\x67\\x03\\x70\\x03\\x78\\x03\\x82\\x03\"\n\"\\x8f\\x03\\xf6\\x04\\x47\\x04\\x53\\x04\\x7a\\x04\\x7e\\x04\\x90\\x04\\xa1\\x04\\xad\\x04\\xb3\\x04\\xbd\\x04\\xca\\x04\\xd1\\x04\\xda\\x04\\xe1\\x04\\xe9\\x04\"\n\"\\xf0\\x04\\xf7\\x04\\xfe\\x05\\x06\\x05\\x4a\\x05\\x8a\\x05\\xa5\\x05\\xb2\\x05\\xc9\\x05\\xdf\\x05\\xe5\\x05\\xfa\\x06\\x0f\\x06\\x22\\x06\\x34\\x06\\x42\\x06\"\n\"\\x52\\x06\\x66\\x06\\x75\\x06\\x8d\\x06\\xa2\\x06\\xae\\x06\\xb9\\x06\\xc4\\x06\\xcf\\x06\\xd8\\x06\\xe1\\x06\\xef\\x06\\xfd\\x07\\x05\\x07\\x0d\\x07\\x15\\x07\"\n\"\\xb5\\x07\\xbe\\x07\\xed\\x08\\x64\\x08\\x9d\\x08\\xf0\\x09\\x5e\\x09\\xc9\\x0a\\x0c\\x0a\\x68\\x0a\\x99\\x0a\\xa3\\x0a\\xe1\\x0b\\x02\\x0b\\x5c\\x0b\\xb3\\x0b\"\n\"\\xeb\\x0c\\x08\\x0c\\x44\\x0c\\x7a\\x0c\\xc2\\x0d\\x05\\x0d\\x49\\x0d\\x4e\\x0d\\x88\\x0d\\xc0\\x0d\\xcd\\x0e\\x09\\x0e\\x32\\x0e\\x6b\\x0e\\x83\\x0e\\xba\\x0e\"\n\"\\xc0\\x0e\\xef\\x0f\\x22\\x0f\\x4f\\x0f\\x7f\\x0f\\x9f\\x0f\\xcd\\x0f\\xe4\\x0f\\xf1\\x10\\x0d\\x10\\x15\\x10\\x25\\x10\\x4c\\x10\\x56\\x10\\x7c\\x10\\xa2\\x10\"\n\"\\xae\\x10\\xd3\\x10\\xf0\\x11\\x13\\x11\\x2a\\x11\\x4c\\x11\\x6e\\x11\\x8f\\x11\\xa1\\x11\\xa9\\x11\\xba\\x11\\xda\\x11\\xee\\x11\\xfa\\x12\\x19\\x12\\x37\\x12\"\n\"\\x55\\x12\\x73\\x12\\x82\\x12\\x87\\x12\\x8d\\x12\\x9a\\x12\\xb6\\x12\\xba\\x12\\xd5\\x12\\xd9\\x12\\xed\\x12\\xfd\\x13\\x17\\x13\\x2b\\x13\\x3e\\x13\\x4c\\x13\"\n\"\\x64\\x13\\x7c\\x13\\x8c\\x13\\xa3\\x13\\xa7\\x13\\xb1\\x13\\xb5\\x13\\xc9\\x13\\xd3\\x13\\xe6\\x13\\xee\\x14\\x01\\x14\\x13\\x14\\x25\\x14\\x37\\x14\\x49\\x14\"\n\"\\x5a\\x14\\x69\\x14\\x73\\x14\\x79\\x14\\x89\\x14\\x99\\x14\\xa8\\x14\\xb7\\x14\\xc0\\x14\\xc6\\x14\\xd4\\x14\\xe2\\x14\\xf0\\x14\\xfe\\x15\\x0c\\x15\\x18\\x15\"\n\"\\x25\\x15\\x32\\x15\\x3f\\x15\\x46\\x15\\x52\\x15\\x5e\\x15\\x6a\\x15\\x76\\x15\\x80\\x15\\x8a\\x15\\x94\\x15\\x9e\\x15\\xa9\\x15\\xb4\\x15\\xbf\\x15\\xca\\x15\"\n\"\\xd5\\x15\\xe0\\x15\\xe9\\x15\\xfb\\x11\\xf7\\x3b\\x05\\x4d\\x06\\xfb\\x10\\xfb\\x3b\\x05\\xad\\x06\\xf7\\x0d\\xf2\\xf7\\x0e\\x24\\x05\\x0e\\xf9\\x2a\\x15\\x0b\"\n\"\\xb7\\x1d\\x0e\\x15\\x55\\xf7\\xcb\\xc1\\x07\\x0e\\x82\\x1d\\xf7\\x3e\\xf7\\x01\\xd6\\xae\\xcf\\xb2\\x1e\\xa3\\xb5\\x94\\xb9\\xd8\\x1a\\xf7\\x99\\x07\\x8d\\xf4\"\n\"\\x96\\x99\\xdc\\x94\\x08\\x0b\\xf8\\x73\\xbd\\x15\\x86\\x06\\x5a\\x8d\\x84\\x93\\x8a\\xba\\x08\\xf7\\xeb\\xfb\\x32\\x7a\\x07\\xc9\\x88\\x97\\x81\\x59\\x1a\\xfb\"\n\"\\x7f\\x07\\x6f\\x86\\x7d\\x7d\\x80\\x1e\\x75\\x70\\x6c\\x7f\\x6d\\x1b\\x64\\x6b\\xad\\xb5\\x1f\\xf7\\xda\\xfb\\x26\\x7d\\x07\\xba\\x89\\x99\\x7d\\x8c\\x5b\\x08\"\n\"\\xfb\\x90\\x07\\x3c\\xbb\\x58\\xd4\\xb0\\xb2\\x9b\\xa6\\xa6\\x1e\\xb6\\xb6\\x05\\x38\\x07\\x8f\\x89\\xbd\\x9f\\xaf\\x96\\xbe\\x99\\x19\\x0b\\x79\\x1d\\xa0\\x97\"\n\"\\xb1\\xae\\x7b\\x1d\\x0b\\xf8\\x2c\\x7f\\x1d\\x0b\\x9d\\x16\\xf7\\xbd\\x9e\\x06\\x39\\x8d\\x7d\\x99\\x89\\xd5\\x08\\xf8\\x50\\x07\\x8d\\xd6\\x98\\x97\\xde\\x8e\"\n\"\\x08\\x9e\\xfb\\xbd\\x78\\x07\\xe0\\x66\\x1d\\x3f\\x7f\\x80\\x37\\x88\\x08\\x0b\\x15\\x7a\\x9c\\x07\\x0b\\x99\\x94\\x97\\x9b\\x1a\\x9f\\x7e\\x97\\x75\\x7c\\x82\"\n\"\\x86\\x79\\x79\\x1e\\xfb\\x27\\xfb\\x28\\x05\\x0b\\x15\\x71\\x75\\x74\\x70\\x6f\\x49\\x1d\\x0b\\x6d\\x72\\x72\\x6b\\x6e\\xa4\\x72\\xa8\\xaa\\xa5\\xa3\\xa9\\xaa\"\n\"\\x71\\xa5\\x6d\\x1f\\x0b\\xd5\\x9b\\x7c\\x45\\x8c\\x1f\\xfc\\x5c\\x07\\x45\\x8a\\x7b\\x7c\\x41\\x1b\\x79\\x0b\\xa2\\x8a\\x05\\xc0\\x89\\x9a\\x78\\x4c\\x1a\\x0b\"\n\"\\xd6\\x9a\\x7c\\x45\\x8c\\x1f\\x0b\\xf7\\x2e\\xec\\x05\\x0b\\xf8\\xcf\\xf8\\x56\\x15\\x7c\\x07\\xad\\x84\\x95\\x84\\x7a\\x1a\\x7c\\x85\\x73\\x80\\x70\\x1e\\x31\"\n\"\\xfb\\x72\\x37\\xf7\\x74\\x05\\x7a\\xb9\\x8b\\x8b\\x98\\x1a\\xa1\\x96\\x92\\xba\\x92\\x1e\\x9a\\xfb\\x5f\\x7c\\x07\\xb0\\x87\\x97\\x7f\\x9f\\x56\\x90\\x7d\\x94\"\n\"\\x72\\x91\\x7a\\x30\\xfb\\x5b\\x18\\x28\\xf7\\x99\\x05\\x87\\x95\\x89\\x95\\x95\\x1a\\xa0\\x96\\x93\\xae\\x8f\\x1e\\x9a\\xfb\\x48\\x7c\\x07\\xa2\\x89\\x93\\x81\"\n\"\\xa1\\x58\\xf7\\x1b\\xfb\\xea\\x18\\x6c\\x97\\x93\\x7e\\x91\\x1b\\x90\\x93\\x97\\xa6\\x97\\x1f\\xf7\\x04\\xf7\\x84\\xe6\\xfb\\x80\\x05\\x65\\x9a\\x8d\\x86\\x92\"\n\"\\x1b\\x92\\x90\\x94\\xb3\\x9b\\x1f\\xf7\\x1e\\xf7\\xee\\x9d\\xb5\\x8e\\x90\\x9f\\x92\\x19\\x9a\\x07\\x0b\\xfa\\x38\\x21\\x1d\\xfb\\x5a\\x78\\x06\\xbe\\x86\\x9d\"\n\"\\x80\\x70\\x1a\\x77\\x85\\x70\\x81\\x6f\\x1e\\xfb\\x11\\xfb\\xe7\\xfb\\x18\\xf7\\xe9\\x84\\x9d\\x88\\x93\\x89\\x8f\\x19\\x82\\xa0\\x85\\x9e\\x96\\x1a\\xa3\\xa2\"\n\"\\x95\\xc1\\x8c\\x1e\\x9e\\xfb\\x9f\\x78\\x07\\xc4\\x8a\\x95\\x82\\xad\\x3b\\xac\\x39\\x18\\x20\\xfb\\xae\\xfb\\x24\\xf8\\x0c\\x05\\x84\\x9d\\x87\\x9c\\x96\\x1a\"\n\"\\xa1\\x99\\x91\\xbe\\x8f\\x1e\\x9e\\xfb\\x89\\x78\\x07\\xbe\\x86\\x9a\\x79\\xb0\\x2d\\xf7\\x55\\xfc\\xad\\x18\\x9a\\x06\\xf7\\x2e\\xf8\\x3b\\xf7\\x34\\xfc\\x3b\"\n\"\\x05\\x9a\\x06\\xe1\\xf7\\x9a\\x92\\xa0\\xf7\\x03\\xf7\\xc0\\x9e\\xbf\\x96\\x94\\xc0\\x95\\x08\\x0b\\xf8\\x6f\\xf8\\x56\\x15\\xfb\\x1b\\x7c\\x06\\xab\\x9b\\x82\"\n\"\\x7b\\x87\\x8a\\x85\\x88\\x84\\x1f\\x2a\\xfb\\xa8\\xfb\\x07\\xf7\\x91\\x05\\x85\\x99\\x87\\x99\\x95\\x1a\\x9d\\x9a\\x92\\xb6\\x8d\\x1e\\x9a\\xfb\\x62\\x7d\\x07\"\n\"\\xa5\\x87\\x9c\\x80\\x93\\x7a\\xf7\\x06\\xfb\\x8a\\x18\\x97\\x70\\x8c\\x8a\\x90\\x81\\x08\\xa7\\x59\\x9b\\x66\\x7c\\x1a\\x7b\\x74\\x4e\\x7a\\x6c\\x1e\\x72\\x7c\"\n\"\\x76\\x78\\x7d\\x1b\\x85\\x82\\x8d\\x90\\x80\\x1f\\x92\\x79\\x79\\x8f\\x7b\\x1b\\x73\\x78\\x78\\x72\\x6a\\xaa\\x72\\xb6\\xcf\\xb9\\xc2\\xf7\\x25\\xc2\\x1f\\xf7\"\n\"\\x2e\\xf8\\x2c\\x98\\xab\\x96\\x95\\xa3\\x8e\\x19\\x0b\\xf9\\x53\\x21\\x1d\\xfb\\x6f\\x78\\x06\\xbf\\x8a\\x9c\\x83\\x73\\x1a\\x81\\x87\\x7f\\x81\\x7c\\x1e\\xfb\"\n\"\\x23\\xfb\\x76\\xfb\\x28\\xf7\\x72\\x05\\x80\\x9b\\x85\\x9c\\x96\\x1a\\x9e\\x99\\x93\\xab\\x8d\\x1e\\x8f\\x95\\x8b\\x8c\\x96\\x1f\\x9e\\xfb\\xac\\x78\\x07\\xbb\"\n\"\\x89\\x99\\x7d\\xef\\xfb\\x21\\xf7\\x17\\xfb\\x54\\x18\\xfb\\x42\\x62\\x1d\\xf7\\x56\\x07\\xf7\\x28\\xf7\\x76\\xc8\\xe3\\xa5\\xa1\\xbe\\x8f\\x19\\x0b\\xf8\\x22\"\n\"\\xf7\\x30\\x15\\x90\\x1d\\xfb\\x15\\xda\\x2e\\xf7\\x03\\xb8\\xb3\\x9b\\xaa\\xaf\\x1e\\xa6\\xa2\\x9e\\xa7\\xa9\\xc6\\x08\\x0b\\xf7\\xba\\x21\\x1d\\xfb\\xae\\x78\"\n\"\\x06\\xd4\\x86\\x97\\x7e\\x8d\\x43\\x08\\xfc\\x50\\xa0\\x1d\\xf8\\x6d\\x07\\x8d\\xd4\\x98\\x98\\xd9\\x8f\\x08\\x0b\\x15\\x3f\\x6e\\x73\\x76\\x51\\x1b\\x4a\\xd3\"\n\"\\x1d\\xa4\\xb2\\xe9\\x1d\\xa7\\x1d\\x78\\x83\\x90\\x7b\\x1b\\x77\\x7e\\x7f\\x78\\x7b\\x95\\x7c\\x9e\\x7f\\x1f\\xf7\\x2e\\x2a\\x05\\x0e\\x5a\\x1d\\xb2\\x78\\xbb\"\n\"\\x1b\\xdf\\xb9\\xbe\\xf5\\x97\\x1f\\x0e\\x15\\x5f\\x1d\\x8c\\x05\\x56\\x8d\\x7c\\x9e\\xca\\x1a\\x0b\\x07\\xca\\x9a\\x9e\\xc0\\x8d\\x1e\\x0b\\x9b\\x9a\\xd5\\x1e\"\n\"\\x9d\\xfb\\xb2\\x79\\x07\\x0b\\x86\\x82\\x58\\x88\\x08\\x7a\\x7a\\xf7\\x76\\x9c\\x7b\\x06\\x0b\\xac\\xf8\\x20\\x15\\x93\\x98\\x91\\x8d\\x96\\x1b\\xaa\\x93\\x7a\"\n\"\\x4b\\x1f\\xfb\\x4d\\x07\\x2e\\xbb\\x55\\xdd\\xc1\\xbe\\xa5\\xbc\\xb5\\x1e\\xb5\\xbc\\x9e\\xc9\\xde\\x1a\\xf7\\x07\\x65\\xe1\\x59\\x72\\x77\\x77\\x72\\x78\\x95\"\n\"\\x7b\\xa1\\x77\\x1e\\xa6\\x73\\x91\\x83\\x93\\x7c\\x08\\x97\\x73\\x91\\x6c\\x6a\\x1a\\x2a\\x51\\x44\\x3b\\x6f\\x73\\x96\\x9e\\x7f\\x1e\\x80\\x9d\\x87\\xa3\\xbb\"\n\"\\x1a\\xf7\\x65\\x07\\xa9\\x88\\x97\\x81\\x99\\x1e\\x9a\\x80\\x82\\x92\\x84\\x1b\\x88\\x87\\x8a\\x89\\x87\\x1f\\x24\\x55\\x05\\x0b\\x90\\x16\\xf7\\x84\\x9a\\x06\"\n\"\\x48\\x8d\\x7b\\x99\\x89\\xc6\\x08\\xf7\\x75\\x07\\xab\\xb5\\xbd\\xa7\\x91\\x94\\x86\\x81\\x96\\x1e\\x7c\\x9a\\x97\\x86\\x98\\x1b\\xa3\\x9a\\x9c\\xa7\\xac\\x76\"\n\"\\x9f\\x69\\x61\\x6f\\x75\\x43\\x59\\x1f\\xe7\\x07\\x86\\x8d\\x53\\x75\\x67\\x7d\\x53\\x79\\x19\\x7b\\x07\\x8e\\x99\\x94\\x8c\\x97\\x1b\\xa4\\x94\\x7b\\x5f\\x1f\"\n\"\\xfb\\x8e\\x07\\x89\\x57\\x85\\x85\\x4c\\x80\\x08\\x0b\\xae\\x1d\\xa6\\xa2\\xa1\\xa7\\xa6\\x74\\xa2\\x70\\x1f\\x0e\\x15\\x55\\x5e\\x5e\\x55\\x53\\xb6\\x5f\\xc3\"\n\"\\xc2\\xb8\\xb7\\xc2\\xc2\\x5e\\xb8\\x54\\x1f\\x8c\\x69\\x15\\xae\\xa9\\x6d\\x67\\x67\\x6e\\x6e\\x65\\x68\\x6e\\xa8\\xb0\\xaf\\xa9\\xa8\\xaf\\x1f\\x0e\\x15\\xa6\"\n\"\\x1d\\x0b\\x1f\\x7d\\x6c\\x05\\x7f\\xa8\\xa2\\x87\\xab\\x1b\\xd8\\xbb\\xab\\xbf\\xb7\\x6b\\xa4\\x0b\\x9d\\x07\\x41\\x7b\\x9a\\xd1\\x1f\\xf8\\x5c\\x07\\xd1\\x9b\"\n\"\\x9a\\xd5\\x1e\\x9d\\x0b\\x92\\x62\\x28\\x64\\x6f\\x22\\x89\\x19\\xfb\\x0b\\x06\\x0b\\x07\\x51\\x1d\\x7a\\x7a\\x0b\\x82\\x8c\\x42\\x08\\xfc\\x45\\x07\\x8a\\x36\"\n\"\\x0b\\xa0\\x75\\xa6\\xa6\\xa2\\xa1\\xa7\\xa6\\x74\\xa2\\x70\\x1f\\x0b\\x30\\x1d\\xa0\\x98\\x94\\x98\\x0b\\x5e\\x68\\x73\\x74\\x69\\x6b\\xa1\\x78\\x0b\\x07\\xd1\"\n\"\\x9b\\x9a\\x6a\\x1d\\x0b\\x6e\\x74\\x74\\x6f\\x6e\\xa2\\x74\\x0b\\x44\\x57\\x62\\x53\\x64\\x98\\x0b\\x89\\x1e\\x74\\x8a\\x05\\x79\\x0b\\x15\\xf7\\x2d\\xec\\x05\"\n\"\\xa1\\x0b\\x8a\\x2f\\x86\\x82\\x58\\x88\\x08\\x0b\\x15\\xaa\\x70\\xd3\\x4d\\xb0\\x69\\xc8\\x4f\\x19\\x86\\x8f\\x8d\\x8a\\x90\\x1b\\x91\\x8e\\x8e\\x91\\x98\\x62\"\n\"\\xc5\\x3e\\xed\\x1f\\x88\\x8f\\x8a\\x8b\\x85\\x94\\xa4\\xac\\x9c\\xa0\\xac\\xb2\\x08\\xa8\\xaf\\xa4\\xb3\\x98\\x1a\\x90\\x86\\x90\\x86\\x85\\x77\\x79\\x76\\x7a\"\n\"\\x1e\\x8a\\x88\\x6c\\x6d\\x6e\\x71\\x84\\x85\\x83\\x84\\x82\\x83\\x0b\\xf8\\x58\\x9e\\x15\\x39\\x8f\\x7e\\x97\\x8a\\xd5\\x08\\xf8\\x93\\xc1\\x07\\xf7\\x08\\x89\"\n\"\\xa0\\x7a\\xa1\\xfb\\x01\\x08\\xa3\\x06\\x85\\xf7\\x3e\\x05\\xfc\\xc8\\x06\\x85\\xfb\\x3e\\x05\\xa3\\x06\\xa2\\xf7\\x01\\xa0\\x9c\\xf7\\x07\\x8d\\x08\\xc1\\xfc\"\n\"\\x88\\x06\\x8a\\x35\\x82\\x81\\x37\\x86\\x08\\x78\\xf7\\xb8\\x07\\x0b\\x06\\xf7\\x08\\x89\\x9f\\x7d\\x9b\\x32\\x08\\xa4\\x06\\x88\\xf7\\x23\\x05\\xfc\\xa7\\x78\"\n\"\\x06\\xd4\\x86\\x97\\x7e\\x8d\\x43\\x08\\x0b\\x2d\\x1d\\xf7\\xc6\\x9d\\x07\\x31\\x78\\x99\\xd1\\x8a\\x1f\\x0b\\xaf\\x1f\\xfb\\x00\\xcb\\x05\\x6f\\x9c\\x7c\\xa3\"\n\"\\xa6\\x1a\\xb4\\xaa\\xa6\\xb9\\xc4\\xa9\\x6a\\x31\\xa2\\x1e\\x0b\\x15\\x90\\xa6\\x9e\\x8d\\x9f\\x1b\\xea\\xcb\\x4b\\x2c\\x32\\x4c\\x4e\\x31\\x76\\x7b\\x8e\\x94\"\n\"\\x68\\x1f\\x0b\\xc8\\x1d\\x75\\x7b\\x9b\\x0b\\x07\\x89\\x21\\x7e\\x7a\\x39\\x86\\x08\\x78\\xf7\\x7f\\x9e\\x07\\x3e\\x8f\\x7c\\xa0\\x89\\xf2\\x08\\x0b\\x76\\x51\"\n\"\\x1b\\x4b\\x69\\xa9\\xce\\x7d\\x1f\\x6e\\x06\\x8c\\x58\\x92\\x73\\x9e\\x6f\\x08\\x68\\xa4\\x0b\\x15\\x70\\x74\\x74\\x6f\\x6e\\xa1\\x75\\xa7\\xa9\\xa1\\xa1\\xa8\"\n\"\\xa8\\x74\\xa1\\x6e\\x1f\\x0e\\x07\\x44\\x8a\\x7b\\x7c\\x41\\x1b\\x79\\xf7\\xb2\\x9d\\x07\\x41\\x7b\\x9a\\xd2\\x1f\\x0b\\xbd\\x1d\\x2f\\x08\\xfb\\x64\\x07\\x51\"\n\"\\x1d\\x7a\\x7a\\xf7\\x76\\x0b\\x1a\\x4f\\xbe\\x62\\xd7\\xd7\\xbd\\xb4\\xca\\xb8\\x76\\xa7\\x46\\xbc\\x1e\\x0b\\x4a\\x1d\\x9b\\x1a\\x9f\\x7e\\x97\\x76\\x7b\\x82\"\n\"\\x86\\x79\\x79\\x1e\\xfb\\x27\\xfb\\x28\\x05\\x0e\\x93\\x9a\\xbc\\x8c\\x1e\\x9b\\x9c\\xfb\\x76\\x7a\\x9c\\x06\\xbe\\x88\\x0b\\xf7\\x28\\x05\\x9d\\x78\\x83\\x90\"\n\"\\x7c\\x1b\\x76\\x7e\\x7f\\x78\\x7b\\x95\\x7b\\x9e\\x80\\x1f\\xf7\\x2e\\x2a\\x05\\x0e\\x07\\x8a\\x33\\x82\\x82\\x30\\x87\\x08\\x78\\xf7\\xc6\\x9e\\x07\\x32\\x8d\"\n\"\\x7e\\x96\\x8a\\xd8\\x08\\x0b\\x71\\x75\\x7b\\x82\\x75\\x1b\\x66\\x7c\\xa6\\xca\\x1f\\x0b\\x78\\x1f\\x73\\x97\\x05\\x97\\x74\\x72\\xe4\\x1d\\x0b\\x06\\x38\\x68\"\n\"\\x84\\x72\\x66\\x1f\\x4a\\x60\\x69\\x0b\\x86\\x96\\x81\\x8c\\x40\\x08\\xfc\\x50\\x07\\x8a\\x0b\\x07\\x45\\x8a\\x7c\\x7c\\x40\\x1b\\x79\\x0b\\x07\\x8a\\x55\\x7d\"\n\"\\x7d\\x4d\\x87\\x08\\x0b\\x52\\x84\\x08\\x7c\\xf7\\x6c\\x9a\\x07\\x51\\x90\\x83\\x96\\x89\\x0b\\xd5\\x1e\\x9d\\xfb\\xb2\\x79\\x07\\xd5\\x9b\\x7c\\x45\\x8c\\x1f\"\n\"\\x0b\\x07\\xe4\\x93\\x99\\xbc\\x8c\\x1e\\x0b\\x9c\\x8c\\x18\\x81\\xf7\\x2a\\x05\\x0b\\xde\\xfb\\x0d\\xfb\\x45\\xfb\\x49\\x0b\\xf9\\xc4\\xf8\\x9d\\x15\\xf7\\x21\"\n\"\\xfc\\xc8\\x77\\x07\\xcc\\x89\\xa4\\x82\\x75\\x1a\\x85\\x88\\x80\\x85\\x80\\x1e\\xfb\\x89\\xfc\\x78\\x6a\\x4e\\x7f\\x80\\x60\\x85\\x19\\x78\\xf7\\x5b\\x9e\\x8a\"\n\"\\x07\\x61\\x8f\\x71\\x96\\x9a\\x1a\\xa1\\xa2\\xc5\\xb4\\xd9\\x1e\\xa7\\xc0\\x05\\xf7\\x44\\xfb\\x2c\\x06\\x89\\x46\\x84\\x82\\x4c\\x82\\x7a\\x89\\x18\\x78\\xf8\"\n\"\\x92\\x07\\xb7\\xf7\\x3c\\x05\\x73\\x06\\x51\\xfb\\x02\\x70\\x79\\xfb\\x04\\x89\\x08\\x3f\\x06\\x6c\\x71\\x8f\\x90\\x87\\x1f\\x86\\x8e\\x88\\x9c\\xa3\\x1a\\xf7\"\n\"\\x82\\xf7\\x25\\x07\\xd2\\x89\\x9e\\x77\\x93\\x3d\\x08\\xa0\\xf7\\x7e\\x76\\x06\\x84\\x3b\\x77\\x7c\\x22\\x89\\x08\\xfb\\x03\\xf7\\x7a\\x06\\xa2\\x8c\\x91\\x92\"\n\"\\x9f\\x1b\\xe2\\x06\\xf7\\x25\\xa4\\x7d\\x30\\x97\\x1f\\xfc\\xbe\\xfb\\x72\\x15\\xf7\\x33\\xf7\\xd3\\x05\\xfb\\xd3\\x07\\x0b\\x79\\x1d\\x9f\\x97\\xb1\\xaf\\x7b\"\n\"\\x1d\\x0b\\xf7\\x61\\xf7\\xd5\\x15\\xf7\\x49\\xfb\\x4f\\x05\\xbe\\x57\\x9d\\x73\\x7b\\x1a\\x7b\\x7c\\x85\\x60\\x89\\x1e\\x79\\xf7\\xd2\\x9d\\x07\\x4e\\x8c\\x60\"\n\"\\xa5\\x36\\xe2\\xfb\\x78\\xf7\\x80\\x18\\x91\\x92\\x91\\x92\\x93\\x93\\x7e\\x1d\\x0b\\x15\\xb2\\x3e\\x07\\x76\\x7d\\x8e\\x92\\x77\\x1f\\x75\\x93\\x05\\x95\\x71\"\n\"\\x6f\\x90\\x71\\x1b\\x2e\\x41\\x44\\x2f\\x4c\\xa5\\x65\\xce\\x6a\\x1f\\x71\\x73\\x76\\x77\\x7f\\x80\\x88\\x87\\x19\\x76\\x75\\x85\\x80\\x7a\\x1a\\x75\\x96\\x80\"\n\"\\xb5\\x77\\x1e\\x43\\x57\\x71\\x6a\\x66\\x1a\\x56\\xd8\\x5f\\xeb\\xd6\\xd9\\xa5\\xb5\\xbf\\x1e\\xb1\\xaa\\x9c\\xab\\xb1\\x1a\\xc9\\x5c\\xb4\\x41\\x8f\\x1e\\xfb\"\n\"\\x15\\x91\\x05\\x55\\x8d\\x73\\x94\\x9b\\x1a\\x9f\\xac\\xae\\xa6\\x93\\x1e\\x88\\xaf\\x9e\\x89\\x8d\\x1b\\xb0\\xb3\\x9a\\xa6\\xaa\\x1f\\xac\\xa7\\x9a\\xae\\xbd\"\n\"\\x1a\\xa8\\x86\\xa2\\x7d\\xab\\x1e\\x0b\\xb9\\x1d\\xf7\\x62\\x9c\\x84\\x06\\x77\\x73\\x98\\xa4\\x71\\x1f\\xfb\\x5e\\xf7\\x57\\xf7\\x39\\xf7\\x22\\xaa\\xa6\\xa6\"\n\"\\x97\\xb4\\x8d\\x19\\x9c\\xfb\\x53\\x7a\\x97\\x07\\xa0\\x95\\x84\\x7a\\x84\\x87\\x84\\x7f\\x81\\x1f\\xfb\\x3f\\xfb\\x2d\\x05\\xed\\x07\\xe2\\x93\\x9a\\x97\\x1d\"\n\"\\x0b\\x9b\\xf9\\x17\\x15\\xda\\x84\\x93\\x83\\x8c\\x40\\x08\\xfb\\x56\\x38\\x5f\\xde\\xfb\\x62\\x07\\x8a\\x42\\x7f\\x7f\\x40\\x86\\x08\\x78\\xf7\\xb0\\x07\\xf7\"\n\"\\x08\\xf4\\xac\\xc3\\xc9\\x1f\\xcc\\xc6\\xb0\\xe4\\xec\\x1a\\xe5\\x6e\\xd9\\x53\\xc2\\x1e\\xd0\\x47\\xfb\\x01\\xaf\\xfb\\x1d\\x1b\\xfb\\xa2\\x06\\xf7\\xe4\\xfb\"\n\"\\xc3\\x15\\xfb\\x26\\xf7\\x77\\x06\\xaa\\x95\\x93\\xb2\\xe5\\xac\\x1d\\xf7\\x81\\xf7\\x26\\x07\\x0e\\xf7\\x80\\x9b\\x15\\x4b\\x72\\x76\\x70\\x72\\x1b\\x85\\x88\"\n\"\\x8c\\x92\\x7d\\x1f\\x91\\x7c\\x7e\\x8f\\x80\\x1b\\x6f\\x74\\x75\\x72\\x6d\\xa7\\x75\\xb0\\xae\\xa9\\x98\\xa6\\xa5\\x1f\\xa3\\xa2\\x9f\\xb1\\xa9\\xd9\\xf7\\x0e\"\n\"\\xf7\\xd4\\x18\\xa6\\xd3\\x92\\x95\\xaa\\x92\\x95\\x8c\\x18\\x9c\\xfb\\x23\\x7a\\x90\\x07\\xa4\\x8c\\x98\\x81\\x78\\x1a\\x7e\\x86\\x79\\x7d\\x65\\x1e\\x3a\\xfb\"\n\"\\x6d\\x37\\xf7\\x71\\x05\\x79\\xba\\x8a\\x8f\\x96\\x1a\\xa0\\x97\\x96\\xa6\\x8a\\x1e\\x93\\x9c\\xfb\\x58\\x7a\\x06\\x9a\\x8a\\xad\\x86\\x8b\\x8b\\xc1\\xfb\\x1d\"\n\"\\x19\\x0b\\x8e\\x21\\x1d\\x79\\x07\\xcb\\x8a\\xa8\\x75\\xb9\\x3c\\xf7\\x5b\\xfc\\x12\\x18\\x37\\x62\\x7e\\x7a\\x72\\x1b\\x7f\\x82\\x8f\\x99\\x78\\x1f\\x99\\x77\"\n\"\\x80\\x8f\\x7a\\x1b\\x6b\\x75\\x79\\x70\\x67\\xab\\x74\\xbe\\xb6\\xb3\\x9b\\xa8\\xa8\\x1f\\xa1\\xa1\\x94\\x98\\xab\\xcf\\xf7\\x4a\\xf8\\x15\\x18\\xb6\\xe1\\xb1\"\n\"\\xab\\xca\\x8d\\x08\\x9d\\xfb\\x73\\x79\\x07\\xbc\\x98\\x84\\x74\\x84\\x8b\\x8b\\x82\\x72\\x1f\\x83\\x75\\xfb\\x16\\xfb\\xaf\\xfb\\x1e\\xf7\\xa2\\x05\\x7d\\xa5\"\n\"\\x82\\xa6\\x98\\x1a\\xa0\\x9d\\x95\\xb1\\x1e\\x98\\x9d\\x06\\x0b\\xf7\\xbc\\xf8\\x56\\x29\\x1d\\xb0\\x8c\\x9b\\x7b\\x8d\\x68\\xfb\\x5d\\xfb\\xa0\\x18\\xf7\\x6a\"\n\"\\x07\\xe3\\x93\\x9a\\xbc\\x8c\\x5d\\x1d\\x9c\\x7b\\x06\\x66\\x7c\\x98\\xb0\\x88\\x1f\\xf7\\x5d\\xf7\\x9d\\x05\\xfb\\x67\\x07\\x8a\\x2f\\x3e\\x1d\\x5a\\x8c\\x83\"\n\"\\x9a\\xe3\\x1a\\xf7\\x64\\x07\\xe3\\x93\\x9a\\xbc\\x8c\\x1e\\x9b\\x9c\\x06\\x0b\\xf8\\x7b\\x9a\\x15\\x55\\x94\\x86\\x92\\x8a\\xd2\\x08\\xf7\\x5b\\x07\\xf4\\x62\"\n\"\\xc1\\x39\\x50\\x61\\x73\\x4f\\x5d\\x1e\\xf7\\xc4\\x07\\x86\\x8e\\x68\\x7f\\x72\\x83\\x54\\x7b\\x19\\x70\\x83\\x05\\x7b\\x07\\x8c\\x8f\\x8d\\x8b\\x91\\x1b\\xb6\"\n\"\\x93\\x83\\x60\\x1f\\xfc\\x6b\\x07\\x89\\x43\\x86\\x83\\x69\\x1d\\xd2\\x08\\xf7\\x85\\x07\\xb9\\xb5\\xa9\\x9c\\xb3\\x1b\\xbc\\xa4\\x67\\x45\\x1f\\xfb\\x5a\\x07\"\n\"\\x89\\x44\\x82\\x80\\x52\\x86\\x08\\x7c\\xf7\\x68\\x07\\x0b\\xf7\\xcf\\xf7\\xae\\x15\\xfb\\x47\\x07\\x4c\\x7c\\x78\\x55\\xb6\\x1d\\xbd\\xe1\\xad\\xa9\\xc0\\x8e\"\n\"\\x19\\x96\\x8c\\x05\\x9d\\xfb\\x73\\x79\\xa0\\x07\\xa6\\x8a\\x99\\x81\\x79\\x1a\\x7d\\x86\\x7e\\xa9\\x1d\\xbd\\x84\\xa2\\x77\\xb5\\x42\\x19\\x0b\\x7c\\x1d\\x56\"\n\"\\x90\\x9d\\x77\\xb4\\x1b\\xad\\x0b\\x6f\\x06\\x5b\\x21\\x5e\\x72\\xfb\\x23\\x8a\\x08\\x70\\x06\\x23\\x8e\\x8a\\x8c\\xb2\\x1a\\xf7\\x8b\\xf7\\x2e\\x07\\xdf\\x89\"\n\"\\x98\\x7f\\x98\\x39\\x08\\xa2\\xf7\\x7c\\x74\\x06\\x7f\\x3a\\x7d\\x7f\\x37\\x89\\x08\\xfb\\x2e\\xf7\\x72\\x06\\xa9\\x8c\\x8f\\x8f\\xa7\\x1b\\xf7\\x1b\\x54\\x1d\"\n\"\\xfc\\x50\\xd0\\x1d\\x0b\\x1f\\xfb\\x2f\\xde\\x15\\x6d\\x86\\x80\\x76\\x7f\\x1e\\x7d\\x72\\x70\\x83\\x76\\x1b\\x68\\x6f\\xad\\xb6\\x1f\\x8f\\x07\\x8c\\xc7\\xb7\"\n\"\\xb1\\xf7\\x09\\xb4\\x08\\x0b\\xf8\\x4e\\xcd\\x15\\x7d\\x7a\\x7f\\x86\\x7c\\x1b\\x74\\x84\\x99\\xb7\\x1f\\xf7\\x57\\x07\\xbf\\x86\\xa8\\x7c\\xa3\\x1e\\xaf\\x75\"\n\"\\x60\\x9e\\x50\\x1b\\x2d\\x41\\x5a\\x4c\\x74\\x9e\\x77\\xa3\\xa3\\xa0\\x9f\\xa1\\x8f\\x8a\\x90\\x8a\\x92\\x1f\\x89\\x94\\x8a\\x93\\x92\\x1a\\xa6\\xab\\xa1\\xb3\"\n\"\\xbc\\xa6\\x6e\\x55\\x1e\\x4e\\x07\\xfb\\x2d\\x4e\\x79\\x82\\x60\\x65\\x08\\x75\\x77\\x7d\\x69\\x6a\\x1a\\x4c\\xb7\\x5f\\xc8\\xb7\\xb4\\xa0\\xbf\\xc8\\x1e\\x0b\"\n\"\\xf7\\xcf\\xf7\\xce\\x15\\x87\\xf7\\x1d\\x05\\x80\\x06\\x83\\x86\\x86\\x88\\x85\\x1b\\x85\\x81\\x8d\\x90\\x80\\x1f\\x93\\x74\\x74\\x90\\x73\\x1b\\x3c\\x52\\x57\"\n\"\\x43\\x53\\xab\\x63\\xe0\\x5b\\x1f\\xc5\\x6a\\x05\\xae\\x77\\x9c\\x73\\x6c\\x1a\\x5f\\x6b\\x6f\\x58\\x46\\x68\\xb1\\xf1\\x74\\x1e\\x7b\\xfb\\x30\\x98\\x06\\x95\"\n\"\\x92\\x8f\\x8d\\x97\\x1b\\x96\\x97\\x89\\x85\\xa2\\x1f\\x85\\xa6\\xa5\\x87\\x9f\\x1b\\xd9\\xca\\xc5\\xd1\\xbd\\x0b\\x9a\\x9a\\x9a\\x9b\\x9a\\x9b\\x95\\x94\\xc7\"\n\"\\xcd\\xa9\\xab\\xd1\\xdb\\xa3\\x9a\\xce\\x8f\\x08\\x9e\\xfb\\x87\\x78\\x07\\xba\\xcb\\x1d\\xcc\\x9b\\x9d\\xc4\\x8c\\x1e\\x8d\\x94\\x8b\\x8c\\x93\\x1f\\x9d\\xfb\"\n\"\\xb4\\x79\\x07\\x2d\\x1d\\xf7\\xb4\\x9d\\x07\\x3f\\x7b\\x99\\xd2\\x1f\\x0b\\x8d\\x1d\\xf7\\x07\\xea\\xd6\\xc6\\xf7\\x00\\xb5\\x1e\\xfb\\xd9\\xf7\\x2c\\x15\\xd9\"\n\"\\x96\\xad\\xb0\\xc8\\x1b\\xc8\\xa3\\x6f\\x34\\x98\\x1f\\x0b\\xf8\\x07\\xf9\\x31\\x15\\x7f\\x06\\xfb\\x80\\xfc\\xb5\\x63\\x2d\\x80\\x81\\x49\\x89\\x19\\x79\\xf7\"\n\"\\x71\\x9e\\x7f\\x07\\x67\\x74\\x99\\xa2\\x92\\x92\\xa3\\x95\\xa4\\x1f\\xb5\\xf4\\x05\\xf7\\x86\\x06\\xb1\\x2a\\x05\\x98\\x6a\\x8f\\x7b\\x7c\\x1a\\x73\\xc1\\x1d\"\n\"\\xef\\xf7\\x82\\xf6\\xfb\\x82\\x05\\x0b\\xf7\\xfb\\xf9\\x31\\xc7\\x1d\\xd3\\xa9\\xc9\\xc7\\x1f\\xc8\\xcb\\xac\\xe1\\xec\\x1a\\xf7\\x55\\xfb\\x1c\\xf7\\x24\\xfb\"\n\"\\x4b\\x1e\\x8a\\x64\\x15\\xf7\\x0c\\x6d\\x1d\\x3b\\xfb\\x0b\\xfb\\x0f\\xfb\\x09\\x3b\\xf7\\x0e\\xf7\\x45\\xf7\\x47\\xda\\xf7\\x0c\\xf7\\x0a\\x1f\\x0e\\xf9\\x55\"\n\"\\x21\\x1d\\xfb\\x7c\\x78\\x06\\xd8\\x86\\x9a\\x77\\x8d\\x24\\x08\\xfb\\xa2\\x07\\x47\\x85\\x65\\x7a\\x6d\\x1e\\x5b\\x70\\x4b\\x6c\\x40\\x1b\\x44\\x5a\\xa3\\xba\"\n\"\\x70\\x1f\\x79\\xab\\x84\\xb0\\xca\\x1a\\xf7\\xd4\\x07\\x8c\\xd4\\x95\\x95\\xdb\\x92\\x08\\x9e\\xfb\\xaf\\x78\\x07\\xda\\x85\\x95\\x81\\x8c\\x41\\x08\\xfb\\xcc\"\n\"\\x07\\xfb\\x41\\xdc\\x39\\x0b\\x15\\xa4\\x06\\x96\\xb1\\x05\\x93\\xa4\\x8e\\x9a\\x9a\\x1a\\xaa\\x7f\\x9b\\x74\\x76\\x7d\\x79\\x71\\x7e\\x90\\x73\\x91\\x76\\x1e\"\n\"\\x58\\x5a\\x15\\x72\\x77\\x78\\x72\\x73\\x9f\\x77\\xa3\\xa3\\x9f\\x9f\\xa3\\xa3\\x77\\x9f\\x74\\x1f\\xf7\\x2c\\x16\\x72\\x77\\x78\\x72\\x73\\x9f\\x77\\xa3\\xa3\"\n\"\\x9f\\x9f\\xa3\\xa3\\x77\\x9f\\x74\\x1f\\x0e\\xf9\\x56\\x9e\\x15\\x5e\\x8e\\x81\\x95\\x68\\xd5\\xfb\\x8d\\xf8\\xcc\\x18\\x77\\x06\\xfb\\x64\\xfc\\x7f\\x4b\\xfb\"\n\"\\x26\\x7f\\x7b\\x5b\\x89\\x19\\x78\\xf7\\x5a\\x9e\\x07\\x5b\\x77\\x97\\xa8\\x97\\x8e\\x99\\x90\\x98\\x1f\\xb9\\xf7\\x09\\x05\\xf7\\x9a\\x06\\xb4\\x2b\\x05\\x97\"\n\"\\x70\\x92\\x71\\x7d\\x1a\\x72\\x7a\\x83\\x56\\x8a\\x1e\\x78\\x0b\\x87\\x1d\\x40\\x07\\x0b\\xf7\\x42\\xf8\\x67\\x15\\x48\\x6a\\x80\\x86\\x46\\x6f\\x90\\x7c\\x18\"\n\"\\x92\\x8d\\x05\\x8d\\x92\\x93\\x8c\\x91\\x1b\\xa7\\xec\\x1d\\x9a\\x79\\x1e\\x82\\x94\\x92\\x85\\x8f\\x1b\\x8e\\x8f\\x8d\\x8e\\x91\\x1f\\xf2\\xc1\\x85\\x99\\x05\"\n\"\\x83\\x7e\\x84\\x89\\x80\\x1b\\x6d\\x83\\x9c\\xcb\\x1f\\x0b\\xbe\\x88\\x90\\x82\\x8c\\x2f\\x08\\xfb\\x00\\x07\\x82\\x6a\\x6d\\x86\\x70\\x1b\\x4f\\x71\\xa8\\xcd\"\n\"\\x1f\\xa6\\x07\\xe3\\x92\\x9a\\xbd\\x8c\\x1e\\x94\\x9c\\xfb\\x6f\\xef\\x1d\\x70\\x07\\x61\\x8e\\x79\\x96\\x79\\x1e\\x6d\\x9e\\xb2\\x7b\\xc4\\x1b\\xb2\\xae\\x90\"\n\"\\x98\\xbf\\x1f\\x0b\\xf7\\x92\\x15\\xd7\\x07\\x95\\x1d\\xf7\\x6b\\x2a\\x47\\x1d\\x0b\\xf7\\x93\\xf8\\x61\\x15\\x4d\\x5d\\x77\\x5e\\x5f\\x1f\\x5e\\x5e\\x72\\x4b\"\n\"\\x48\\x1a\\xfb\\x17\\xe7\\x28\\xf7\\x0e\\xf7\\x0e\\xec\\xf6\\xf7\\x1c\\xf7\\x18\\x32\\xeb\\xfb\\x0e\\x1e\\x7e\\x68\\x15\\xdb\\xc2\\x30\\xfb\\x19\\x20\\x5c\\x45\"\n\"\\x43\\x3a\\x54\\xdf\\xf7\\x0f\\xf7\\x0f\\xb7\\xd2\\xd7\\x1f\\x0b\\x15\\x65\\x7a\\x7e\\x7f\\x74\\x1b\\x7d\\x77\\x91\\x94\\x64\\x1d\\xab\\x96\\x9c\\x99\\xa2\\x1b\"\n\"\\x96\\x9a\\x87\\x84\\x9a\\x1f\\xa2\\x80\\x05\\x77\\xb4\\x9a\\x87\\xa4\\x1b\\xc2\\xa8\\xa8\\xd8\\xa0\\x1f\\x0e\\xf7\\xd3\\xf7\\xd8\\x15\\xfb\\x1c\\xfb\\x49\\x39\"\n\"\\xfb\\x02\\x77\\x7d\\x3b\\x8a\\x19\\x79\\xf7\\x88\\x9d\\x07\\x5c\\x8e\\x7c\\x93\\x9f\\x1a\\x97\\x90\\x95\\x9d\\xa3\\x1e\\xf7\\x22\\xf7\\x4e\\xf7\\x0a\\xfb\\x41\"\n\"\\x05\\x9c\\x72\\x92\\x7a\\x7c\\x1a\\x73\\x7c\\x83\\x5d\\x8a\\x1e\\x79\\x0b\\xba\\x1d\\xfb\\xc1\\x06\\x37\\xa9\\x60\\xc6\\xbc\\xb1\\xa3\\xbf\\xac\\x1e\\x7e\\x96\"\n\"\\x05\\x63\\x1d\\xf7\\xb2\\xf0\\x0b\\xf7\\x38\\x15\\x3f\\x5b\\x60\\x6e\\x4b\\x1b\\x52\\x60\\xa8\\xc4\\x6e\\x1f\\x79\\xb1\\x84\\xab\\x89\\xc9\\x08\\xf7\\xc8\\x06\"\n\"\\x83\\xcc\\x81\\xa8\\x72\\xab\\x08\\xaf\\x6d\\x5d\\xa0\\x57\\x1b\\x59\\x5c\\x79\\x69\\x65\\x1f\\x5c\\x62\\x70\\x44\\x39\\x1a\\xfb\\x1e\\xd3\\x35\\x0b\\x7d\\x94\"\n\"\\x18\\x90\\x1d\\x0b\\xf7\\xfe\\x15\\x3d\\x55\\x05\\x5f\\x07\\xd9\\xc0\\x05\\xfb\\x7a\\x68\\x1d\\x7c\\xf7\\x80\\x9a\\x07\\x4c\\x8e\\x80\\x95\\x8a\\xc3\\x08\\xf7\"\n\"\\xb7\\x07\\xd8\\xc0\\x05\\xb7\\x07\\x3e\\x56\\x05\\xf7\\x9a\\x07\\x87\\x8d\\x58\\x7b\\x66\\x0b\\x45\\x5b\\x67\\x73\\x52\\x1b\\x2f\\x4c\\xdb\\xf7\\x07\\xf3\\xc2\"\n\"\\xd1\\xdc\\xaf\\x98\\x81\\x65\\x95\\x1f\\x91\\x75\\x05\\x6e\\x93\\x9d\\x7a\\xa1\\x1b\\xa5\\xa0\\x9e\\xa2\\xc3\\x45\\xba\\x37\\x5a\\x58\\x77\\x67\\x62\\x1f\\x59\"\n\"\\x5f\\x6f\\x47\\x3b\\x1a\\x0b\\xf7\\xdd\\x15\\xf7\\x3a\\x06\\xc5\\x8a\\x9f\\x71\\x89\\x45\\x08\\x9d\\xf7\\x85\\x79\\x06\\x8c\\x42\\x76\\x70\\x53\\x8c\\x08\\xfb\"\n\"\\x3a\\xf7\\x8d\\xf7\\x2d\\x06\\xf2\\x8d\\xab\\x72\\x96\\x32\\x6c\\x1d\\xfc\\x8a\\x79\\x06\\x0b\\x78\\x9c\\x79\\x93\\x64\\x93\\xa6\\x94\\x97\\x91\\x97\\x94\\x08\"\n\"\\xa4\\x9f\\x9b\\xaa\\xac\\x1a\\xcb\\x54\\xb0\\x2e\\x6f\\x7e\\x89\\x83\\x6b\\x1e\\x85\\x77\\x81\\x89\\x83\\x1b\\x7e\\x84\\x91\\x96\\x8a\\x1f\\x7d\\x06\\x83\\xfb\"\n\"\\x23\\x05\\x0b\\x7a\\x40\\x6d\\x87\\x68\\x1b\\x2e\\x68\\xb0\\xee\\x1f\\xf7\\x08\\x4c\\x1d\\xfb\\x08\\x07\\xfb\\x0e\\xc7\\x51\\xf7\\x15\\xb8\\x9a\\x8d\\xa3\\xf7\"\n\"\\x10\\x1e\\x0b\\x07\\xe9\\x5f\\xc3\\x41\\x5d\\x6c\\x7a\\x4b\\x47\\x1e\\xda\\x07\\x84\\x8d\\x57\\x78\\x69\\x80\\x57\\x7c\\x19\\x7a\\x07\\x8e\\x92\\x94\\x8c\\x96\"\n\"\\x1b\\xa7\\x94\\x7c\\x5a\\x1f\\xfb\\x8c\\x07\\x8a\\x50\\x80\\x7e\\x59\\x88\\x08\\x0b\\xe2\\x60\\x1d\\x90\\x82\\x8c\\x30\\x08\\xfb\\x65\\x07\\x8a\\x2f\\x3e\\x1d\"\n\"\\x5a\\x8c\\x83\\x9a\\xe3\\x1a\\xec\\x0b\\xf7\\x54\\x15\\x71\\x75\\x74\\x70\\x6f\\xa0\\x75\\xa6\\xaa\\x1d\\xd2\\x1d\\x2f\\x08\\xfb\\x65\\x07\\x89\\x2f\\x87\\x82\"\n\"\\x58\\x88\\x08\\x7a\\x7a\\xf7\\x76\\x9c\\x7b\\x06\\x5a\\x8d\\x83\\x99\\xe3\\x1a\\x0b\\xd7\\x1d\\x94\\x8c\\x96\\xa8\\x1d\\x0b\\xc8\\xc7\\x1a\\xbe\\x68\\xb1\\xbc\"\n\"\\x1d\\x83\\x6b\\x6f\\x66\\x55\\x66\\x1f\\x0e\\xc6\\x9e\\xa9\\xb1\\xa1\\x98\\x81\\x6e\\x9d\\x1e\\x71\\x9b\\x97\\x81\\x9c\\x1b\\xa3\\x9d\\x9d\\xa2\\xaf\\x5f\\xa5\"\n\"\\x4f\\x4c\\x57\\x70\\x5e\\x71\\x1f\\x71\\x5e\\x83\\x67\\x8a\\x3b\\x08\\x39\\x0b\\xa8\\x1d\\x55\\x81\\x85\\x8a\\x89\\x81\\x1f\\x0b\\x4e\\x4f\\x1a\\x58\\xad\\x65\"\n\"\\xb9\\xae\\xa3\\xa2\\xad\\xab\\x75\\x9e\\x66\\x84\\x84\\x8a\\x8a\\x85\\x1e\\x89\\x86\\x8a\\x8b\\x8a\\x1b\\x83\\x85\\x91\\x93\\xac\\xa6\\xae\\xc2\\xb1\\x1f\\x0b\"\n\"\\x9a\\x83\\x19\\xa5\\x7c\\x9a\\x72\\x6c\\x1a\\x62\\x70\\x70\\x62\\x79\\x80\\x8f\\x9b\\x75\\x1e\\x99\\x78\\x80\\x90\\x80\\x1b\\x77\\x7c\\x7b\\x76\\x6b\\xa9\\x79\"\n\"\\xc0\\xf7\\x03\\xdd\\xc5\\x0b\\xb3\\x1d\\xf7\\xb2\\x9d\\x07\\x41\\x7b\\x9a\\xd1\\x1f\\x0b\\x90\\xfb\\x6d\\x15\\xf7\\x86\\x9d\\x06\\x40\\x8c\\x7f\\x95\\x8a\\xcb\"\n\"\\x08\\xf7\\x31\\x07\\x6a\\xaf\\xa2\\x81\\xb5\\x1b\\xf7\\x0b\\xe6\\xf7\\x04\\xf7\\x25\\xf7\\x10\\x45\\xe4\\x2a\\x0b\\xd0\\x1d\\xf8\\xae\\x07\\xbb\\xf7\\x42\\x05\"\n\"\\x72\\x06\\x5c\\x22\\x60\\x71\\xfb\\x15\\x87\\x08\\x48\\x06\\x3e\\x8d\\x83\\x8e\\x8a\\xaf\\x08\\x0b\\x07\\xab\\x65\\x70\\x96\\x63\\x1b\\xfb\\x07\\x2e\\xfb\\x05\"\n\"\\xfb\\x22\\xfb\\x14\\xd5\\x34\\xf7\\x03\\xc3\\xb1\\x9f\\xba\\xad\\x1f\\x4b\\x07\\x8f\\x88\\xf7\\x27\\xbf\\x05\\x0b\\x8a\\x2f\\x3e\\x1d\\x5a\\x8c\\x83\\x9a\\xe3\"\n\"\\x1a\\xf7\\x65\\x07\\xe3\\x93\\x99\\xbc\\x8c\\x1e\\x9b\\x9c\\x06\\x0e\\x89\\x49\\x81\\x7f\\x54\\x8a\\x08\\x7c\\xf7\\x70\\x9a\\x07\\x53\\x8f\\x7e\\x99\\xc2\\x1a\"\n\"\\xf7\\xdd\\xe1\\x07\\xec\\x8e\\x89\\x55\\x8c\\x1f\\xfb\\x9c\\x07\\x8a\\x46\\x0b\\x15\\xfc\\xa0\\x07\\x3a\\xf7\\x66\\x56\\x74\\xf7\\x13\\xfb\\xb2\\x05\\xd8\\x06\"\n\"\\xf7\\x14\\xf7\\xb2\\x56\\xa2\\x3a\\xfb\\x66\\x05\\xf8\\xa0\\x07\\xdc\\xfb\\x66\\xc0\\x0b\\x87\\x8e\\xfb\\x2f\\x54\\x05\\x7c\\x07\\x93\\x8c\\x05\\x8d\\x97\\x97\"\n\"\\x8c\\x95\\x1b\\xa3\\x94\\x7b\\x5f\\x1f\\xfb\\x7c\\x07\\x89\\x41\\x82\\x81\\x47\\x88\\x08\\x0b\\x71\\x75\\x74\\x71\\x6e\\x9f\\x75\\xa7\\xa6\\xa2\\xa1\\xa7\\xa6\"\n\"\\x74\\xa2\\x70\\x1f\\x0b\\x15\\xfb\\x27\\xf7\\x28\\x05\\x9d\\x0b\\x1b\\xb1\\x9a\\x81\\x71\\x70\\x76\\x7a\\x69\\x76\\x7a\\x8e\\x94\\x70\\x44\\x1d\\x0b\\x7a\\x6f\"\n\"\\x1e\\xfb\\x15\\xfb\\x6e\\xfb\\x16\\xf7\\x61\\x05\\x78\\xa9\\x83\\x9e\\x9b\\x1a\\xa1\\x9d\\x95\\xb0\\x1e\\x99\\x9d\\xfb\\xc1\\x79\\x06\\xa2\\x89\\x0b\\xa6\\xa2\"\n\"\\xa1\\xa7\\xa6\\x74\\xa2\\x70\\x1f\\xf7\\x5b\\x16\\x71\\x75\\x74\\x71\\x6e\\x49\\x1d\\x0e\\x07\\x64\\x6c\\x7c\\x72\\x69\\x1a\\x61\\x58\\x1d\\xa2\\x0b\\xcb\\x7b\"\n\"\\x69\\xbb\\x1e\\xd9\\x55\\xb4\\x35\\xfb\\x00\\x1a\\xfb\\x0a\\x62\\x37\\x3a\\x5c\\x1e\\x6e\\x58\\x51\\x7f\\x34\\x1b\\x63\\x7f\\x94\\xab\\x1f\\x0b\\x89\\x3e\\x84\"\n\"\\x81\\x4f\\x88\\x08\\x7c\\xf7\\x74\\x9a\\x07\\x53\\x90\\x7d\\x97\\x8a\\xba\\x08\\xf7\\xe7\\xf7\\x50\\xfb\\xe2\\x07\\x8a\\x59\\x7c\\x0b\\x15\\x71\\x75\\x74\\x71\"\n\"\\x6e\\x9f\\x75\\xa7\\xa6\\xa2\\xa1\\xa7\\xa6\\x74\\xa2\\x70\\x1f\\xf7\\x5b\\x16\\x71\\x75\\x74\\x71\\x6e\\x9f\\x75\\xa7\\x0b\\xa1\\xf8\\x7b\\x15\\xa8\\x06\\x95\"\n\"\\xb7\\x05\\x9a\\xc2\\x8c\\x92\\xa0\\x1a\\xaf\\x7d\\x9e\\x71\\x70\\x7d\\x78\\x67\\x76\\x8c\\x85\\x99\\x53\\x1e\\x0b\\x07\\x45\\x8a\\x7b\\x7c\\x41\\x1b\\x79\\xf7\"\n\"\\xb2\\x45\\x1d\\xfb\\xb2\\x0b\\x15\\xfb\\x27\\x61\\x1d\\xd3\\x1d\\xa3\\xb3\\xe9\\x1d\\x4c\\x1d\\xfc\\x5c\\x07\\x45\\x8a\\x7b\\x7c\\x41\\x1b\\x79\\x0b\\x16\\xfb\"\n\"\\x50\\x06\\x8a\\xbf\\x05\\xf0\\x8a\\xa2\\xc0\\xb7\\x1b\\xa1\\x97\\x83\\x70\\x9d\\x1f\\x6f\\x9e\\x98\\x82\\xa2\\x1b\\x93\\x8e\\x0b\\xda\\xb7\\x1d\\x0b\\x89\\x1e\"\n\"\\x72\\x8a\\x05\\x79\\xf7\\xbe\\x9d\\x07\\x70\\x8c\\x05\\x55\\x8d\\x7c\\x9e\\xca\\x1a\\xf7\\x47\\x07\\xf7\\x24\\xf7\\x86\\x0b\\x15\\xb8\\x1d\\x0b\\x4a\\x1d\\x9b\"\n\"\\x1a\\x9f\\x7e\\x97\\x75\\x7c\\x82\\x86\\x79\\x79\\x1e\\xfb\\x27\\xfb\\x28\\x05\\x0b\\xf7\\x33\\xf7\\x6c\\x15\\x8f\\x06\\xf7\\x36\\xfb\\x36\\xde\\x1d\\x82\\x7a\"\n\"\\x0b\\x95\\x89\\x8e\\x86\\x1e\\x51\\x37\\x6d\\x69\\x6e\\x7a\\x08\\x80\\x84\\x85\\x85\\x85\\x1a\\x88\\x8c\\x89\\x8e\\x89\\x1e\\xc0\\x0b\\x3c\\x1d\\xa1\\x8c\\x05\"\n\"\\x9d\\xfb\\xb2\\x79\\x07\\xa2\\x8a\\x05\\xbf\\x89\\x9b\\x78\\x4c\\x1a\\x0b\\x4b\\x1d\\xb0\\x92\\x92\\x8c\\x8c\\x91\\x1e\\x8d\\x90\\x8c\\x8b\\x8c\\x1b\\x93\\x91\"\n\"\\x85\\x0b\\x1e\\x9b\\x9c\\xfb\\x76\\x7a\\x9c\\x06\\xbe\\x88\\x90\\x82\\x8c\\x0b\\xbc\\x1a\\xca\\x56\\xb6\\x3d\\x62\\x69\\x7f\\x74\\x74\\x1e\\x76\\x78\\x81\\x78\"\n\"\\x7b\\x5d\\xa4\\x7d\\x18\\xbb\\xa1\\x0b\\x07\\x86\\x8d\\x5c\\x7b\\x69\\x80\\x49\\x7a\\x19\\x7b\\x07\\x8c\\x93\\x90\\x8b\\x94\\x1b\\xb0\\x94\\x81\\x62\\x1f\\x0b\"\n\"\\xa2\\x8a\\x05\\xbf\\x89\\x9b\\x78\\x4c\\x1a\\xfc\\x5b\\x07\\x4b\\xd1\\x1d\\x0b\\x78\\x7e\\x67\\x1e\\x7b\\x78\\xf7\\xaa\\x9d\\x7e\\x06\\x5e\\x71\\xa8\\xe3\\x67\"\n\"\\x1f\\xfc\\x01\\xf7\\x0f\\x15\\x0b\\xc5\\x1d\\x5b\\x0b\\x6a\\x1d\\xfc\\x96\\xfb\\x8a\\xf8\\x96\\x07\\x0b\\x16\\xcd\\x1d\\x0e\\x8c\\xd4\\x95\\x95\\xd8\\x92\\x08\"\n\"\\x9e\\xfb\\xaa\\x78\\x07\\xd8\\x85\\x95\\x81\\x8c\\x41\\x08\\x0b\\x6b\\xa4\\x55\\x81\\x85\\x8a\\x89\\x81\\x1f\\x0e\\x15\\xfb\\x48\\xfb\\x1b\\xfb\\x25\\xfb\\x55\"\n\"\\xfb\\x55\\xf7\\x1b\\xfb\\x25\\xf7\\x48\\xe8\\x0b\\xdc\\x1d\\x6c\\x78\\x82\\x76\\x1b\\x0b\\x75\\x7b\\x8e\\x94\\x70\\x1f\\x7d\\x6c\\x05\\x7f\\xa7\\xa3\\x87\\xaa\"\n\"\\x1b\\xd9\\xba\\xab\\x0b\\xf7\\x6a\\xf7\\xcf\\x15\\xf7\\xbb\\xfb\\x67\\x06\\x44\\x8a\\x7b\\x7c\\x41\\x1b\\x79\\x0b\\x8a\\x96\\x86\\x77\\x1a\\x67\\x2a\\xfb\\x05\"\n\"\\xfb\\x1d\\xfb\\x0e\\x1e\\xf7\\x69\\x07\\x0b\\x15\\x7a\\x92\\x7d\\x75\\x82\\x87\\x6f\\x8a\\x19\\xfb\\x0d\\x06\\xe1\\xe0\\x05\\xc8\\x0b\\x6e\\x74\\x75\\x6f\\x6f\"\n\"\\xa2\\x74\\xa7\\xa8\\xa2\\xa2\\xa7\\xa6\\x74\\xa2\\x6f\\x1f\\x0b\\xaa\\xa6\\xa6\\x97\\xb4\\x8d\\x19\\x9c\\xfb\\x52\\x7a\\x97\\x07\\xa0\\x95\\x84\\x0b\\x5c\\x46\"\n\"\\x43\\x3a\\x54\\xde\\xf7\\x0c\\xf7\\x0d\\xb7\\xd1\\xd7\\x1f\\x0e\\x07\\x89\\x43\\x7e\\x7d\\x43\\x87\\x08\\x78\\x0b\\x7b\\x78\\x57\\x4f\\x1d\\x0b\\xbc\\x8c\\x1e\"\n\"\\x9b\\x9c\\xfb\\x76\\x7a\\x9c\\x06\\xbe\\x88\\x8f\\x83\\x8d\\x0b\\x69\\xa9\\xce\\x7e\\x1f\\x6e\\x06\\x8c\\x58\\x91\\x73\\x9f\\x6f\\x08\\x68\\x0b\\x07\\x3f\\x88\"\n\"\\x72\\x80\\x77\\x1e\\x81\\x85\\x7d\\x83\\x7d\\x1b\\x7c\\x0b\\x9d\\x1e\\x97\\x07\\x8a\\xc4\\x96\\x97\\xc5\\x8d\\xa2\\x8c\\x18\\x9d\\x0b\\x98\\x94\\x98\\x9b\\x1a\"\n\"\\x9f\\x7e\\x97\\x0b\\x92\\x86\\x05\\x8e\\x93\\x0b\\xbb\\x65\\x49\\x52\\x5f\\x67\\x44\\x7b\\x7f\\x8d\\x90\\x71\\x1f\\x0b\\x07\\x89\\xa5\\x9c\\x8a\\xa5\\x1b\\xda\"\n\"\\xc0\\x95\\xa3\\xb6\\x1f\\x0b\\xf7\\xfd\\xf9\\x38\\x15\\xfb\\x53\\xfb\\x1c\\xfb\\x23\\xfb\\x5e\\x0b\\x9d\\x07\\x74\\x8c\\x51\\x8d\\x80\\x97\\x8c\\xc4\\x19\\x97\"\n\"\\x07\\x0b\\xaa\\x6a\\xb5\\xb4\\xad\\xa2\\xc0\\xb0\\x1e\\x77\\x9b\\x05\\x70\\x0b\\x7b\\x83\\x86\\x79\\x79\\x1e\\xfb\\x27\\xfb\\x28\\x05\\x0e\\x05\\x98\\x7e\\x8e\"\n\"\\x86\\x84\\x1a\\x81\\x86\\x89\\x73\\x1e\\x0b\\x15\\x69\\x06\\xfb\\x0e\\x24\\xfb\\x0d\\xf2\\x05\\x69\\x06\\x0b\\xaa\\x77\\xa4\\xa8\\x1a\\xa8\\xa2\\xa0\\xac\\xb0\"\n\"\\xa1\\x75\\x0b\\x3c\\x1d\\xa2\\x8c\\x05\\x9d\\x0b\\x07\\x89\\x45\\x85\\x83\\x52\\x84\\x08\\x7c\\xf7\\x61\\x0b\\x89\\x9b\\x78\\x4c\\x1a\\xfc\\x5c\\x07\\x4c\\x7b\"\n\"\\x78\\x0b\\x91\\x75\\x1b\\x59\\x67\\x67\\x4a\\x7c\\x1f\\xa8\\x06\\x0b\\x1f\\x4c\\xc5\\xe4\\x64\\xe3\\x1b\\xf7\\x59\\xf7\\x1c\\x0b\\x7e\\x7a\\x6a\\x78\\x8c\\x87\"\n\"\\x98\\x56\\x1e\\x0e\\xf7\\x6f\\xcd\\xfb\\x6f\\xf7\\x70\\x49\\x06\\x0e\\xa7\\xa1\\xa1\\xa7\\xa6\\x74\\xa2\\x70\\x1f\\x0e\\x78\\xbb\\x1b\\xde\\xb9\\xbe\\xf5\\x98\"\n\"\\x1f\\x0e\\x82\\x6f\\x71\\x81\\x81\\x90\\x99\\x7d\\x1e\\x9f\\x0b\\x86\\x08\\x7c\\xf7\\x70\\x9a\\x07\\x53\\x8f\\x81\\x0b\\x92\\x7d\\x54\\x1f\\xfb\\x90\\x07\\x68\"\n\"\\x8e\\x7f\\x0b\\x1a\\xac\\x7e\\x9c\\x73\\x73\\x7e\\x7a\\x6a\\x78\\x0b\\xf8\\xaa\\xf7\\x70\\x15\\xcd\\xfc\\x8c\\x49\\x07\\x0b\\x7a\\x9c\\x06\\xbe\\x88\\x90\\x82\"\n\"\\x8c\\x2f\\x08\\x0b\\xf7\\x8e\\x04\\x5a\\xfa\\x7c\\xbc\\x07\\x0e\\x01\\x00\\x01\\xe3\\x01\\x05\\x00\\x01\\x0a\\x02\\x01\\x40\\x03\\x01\\x87\\xff\\x02\\x87\\xa0\"\n\"\\x02\\x8e\\x02\\x00\\x01\\x00\\x04\\x00\\x07\\x00\\x45\\x00\\x85\\x00\\xe6\\x01\\x73\\x02\\x2e\\x02\\xd3\\x02\\xdb\\x03\\x1b\\x03\\x5a\\x04\\x2b\\x04\\x3d\\x04\"\n\"\\x44\\x04\\x48\\x04\\x4f\\x04\\x60\\x04\\xb3\\x04\\xe2\\x05\\x2c\\x05\\xa0\\x05\\xc7\\x06\\x33\\x06\\x94\\x06\\xb8\\x07\\x1a\\x07\\x7a\\x07\\x89\\x07\\xcd\\x07\"\n\"\\xeb\\x08\\x01\\x08\\x1d\\x08\\x86\\x09\\x35\\x09\\x38\\x09\\xb9\\x09\\xbe\\x09\\xc1\\x09\\xc5\\x09\\xf7\\x09\\xfa\\x09\\xfd\\x0a\\x02\\x0a\\x40\\x0a\\x43\\x0a\"\n\"\\x47\\x0a\\x98\\x0a\\x9b\\x0a\\x9e\\x0a\\xeb\\x0b\\x6c\\x0b\\x71\\x0b\\x75\\x0b\\x79\\x0b\\x7c\\x0b\\xc9\\x0b\\xce\\x0c\\x5b\\x0c\\x5e\\x0c\\x62\\x0c\\x85\\x0c\"\n\"\\x98\\x0c\\xba\\x0c\\xd7\\x0c\\xe3\\x0c\\xf0\\x0c\\xf4\\x0d\\x49\\x0d\\x4d\\x0d\\x53\\x0d\\x57\\x0d\\x74\\x0d\\x78\\x0d\\x7c\\x0d\\x86\\x0d\\x8f\\x0d\\x93\\x0d\"\n\"\\x98\\x0e\\x32\\x0e\\x36\\x0e\\x3a\\x0e\\x6a\\x0e\\xcb\\x0e\\xd0\\x0e\\xd5\\x0e\\xda\\x0e\\xde\\x0f\\x3b\\x0f\\x3e\\x0f\\xc4\\x0f\\xc8\\x0f\\xcc\\x10\\x17\\x10\"\n\"\\x23\\x10\\x6f\\x10\\xa9\\x10\\xe8\\x11\\x61\\x12\\x17\\x12\\x1b\\x12\\x92\\x13\\x29\\x13\\xd5\\x14\\x3b\\x14\\x5d\\x14\\x95\\x14\\xb2\\x14\\xc1\\x14\\xf8\\x15\"\n\"\\x55\\x15\\x70\\x15\\x7a\\x15\\xcb\\x16\\x75\\x16\\x7d\\x16\\xce\\x16\\xe7\\x16\\xee\\x17\\x05\\x17\\x29\\x17\\x8f\\x17\\xc0\\x18\\x96\\x18\\xfa\\x19\\x02\\x19\"\n\"\\x0a\\x19\\x12\\x19\\x1a\\x19\\x21\\x19\\x2d\\x19\\x36\\x19\\x3d\\x19\\x45\\x19\\x5a\\x19\\x71\\x19\\x9a\\x19\\xa2\\x19\\xa6\\x19\\xab\\x1a\\x1f\\x1a\\x54\\x1a\"\n\"\\x57\\x1a\\xff\\x1b\\x34\\x1b\\xe4\\x1b\\xe9\\x1b\\xf4\\x1b\\xfd\\x1c\\x89\\x1d\\x00\\x1d\\x33\\x1d\\x42\\x1d\\xa4\\x1e\\x20\\x1e\\x22\\x1e\\x47\\x1e\\x61\\x1e\"\n\"\\xbd\\x1e\\xc5\\x1e\\xd5\\x1e\\xe9\\x1f\\x14\\x1f\\x45\\x1f\\x80\\x1f\\x9c\\x20\\x56\\x20\\x5a\\x20\\xcd\\x20\\xf9\\x21\\x32\\x21\\xbe\\x21\\xc6\\x21\\xcd\\x21\"\n\"\\xde\\x21\\xe5\\x21\\xec\\x21\\xf3\\x22\\x6c\\x22\\x75\\x22\\x7d\\x22\\x8f\\x22\\x9b\\x22\\xa5\\x22\\xaf\\x22\\xb8\\x22\\xc2\\x22\\xe5\\x22\\xeb\\x22\\xf2\\x22\"\n\"\\xf9\\x22\\xff\\x23\\x07\\x23\\x0f\\x23\\x16\\x23\\x1d\\x23\\x23\\x23\\x2a\\x23\\x31\\x23\\x39\\x23\\x42\\x23\\x4a\\x23\\x52\\x23\\x5b\\x23\\x63\\x23\\x6b\\x23\"\n\"\\x77\\x23\\x93\\x23\\x9f\\x23\\xa7\\x23\\xb0\\x23\\xb8\\x23\\xc1\\x23\\xcb\\x23\\xf3\\x23\\xfd\\x24\\x06\\x24\\x0d\\x24\\x15\\x24\\x1d\\x24\\x24\\x24\\x2d\\x24\"\n\"\\x35\\x24\\x3e\\x24\\x46\\x24\\x4f\\x24\\x58\\x24\\x67\\x24\\x70\\x24\\x78\\x24\\xe4\\x25\\x51\\x25\\xc7\\x25\\xf0\\x26\\x5e\\x27\\x07\\x27\\xb9\\x28\\x22\\x28\"\n\"\\x2b\\x28\\x32\\x28\\x35\\x28\\x51\\x28\\x59\\x28\\x90\\x28\\xb6\\x29\\x22\\x29\\x2c\\x29\\x35\\x29\\x3e\\x29\\x49\\x29\\xdd\\x29\\xe5\\x29\\xe7\\x2a\\x02\\x2a\"\n\"\\x0f\\x2a\\x17\\x2a\\x21\\x2a\\x2a\\x2a\\x91\\x2a\\xae\\x2a\\xc5\\x2b\\x1a\\x2b\\x3e\\x2b\\x6e\\x2c\\x04\\x2c\\x41\\x2c\\x49\\x2c\\x51\\x2c\\x59\\x2c\\x62\\x2c\"\n\"\\x8c\\x2c\\x94\\x2c\\xf9\\x2d\\x07\\x2d\\x12\\x2d\\x1b\\x2d\\x54\\x2d\\x58\\x2d\\x7d\\x2d\\xb2\\x2d\\xef\\x2e\\x31\\x2e\\x95\\x2e\\x9c\\x2e\\xa3\\x2e\\xe0\\x2e\"\n\"\\xea\\x2e\\xf6\\x2e\\xff\\x2f\\x44\\x2f\\x4b\\x2f\\x5b\\x2f\\x68\\x2f\\xa3\\x2f\\xb3\\x2f\\xbd\\x2f\\xc5\\x30\\x50\\x30\\x52\\x30\\x78\\x30\\x80\\x30\\xe1\\x31\"\n\"\\x09\\x31\\xa4\\x31\\xad\\x31\\xb7\\x31\\xc5\\x31\\xef\\x31\\xf8\\x32\\x47\\x32\\x4f\\x32\\x60\\x32\\x9e\\x32\\xd2\\x32\\xfd\\x33\\x05\\x33\\x42\\x33\\xb7\\x33\"\n\"\\xcb\\x33\\xe6\\x33\\xee\\x34\\x1b\\x34\\x1e\\x34\\x2c\\x34\\x77\\x34\\x80\\x34\\xbb\\x34\\xc4\\x34\\xcd\\x34\\xd5\\x34\\xdd\\x35\\x50\\x35\\x57\\x35\\x5d\\x35\"\n\"\\x66\\x35\\x70\\x35\\xa4\\x35\\xac\\x36\\x62\\x36\\x66\\x36\\x9a\\x36\\xc4\\x37\\x30\\x37\\x4d\\x37\\xbf\\x37\\xe1\\x38\\x34\\x38\\xc8\\x39\\x1a\\x39\\x1d\\x39\"\n\"\\x62\\x39\\x67\\x39\\xc1\\x39\\xea\\x39\\xf9\\x39\\xfb\\x3a\\x20\\x3a\\x41\\x3a\\x90\\x3a\\xbc\\x3a\\xc1\\x3b\\x29\\x3b\\x66\\x3b\\x7c\\x3b\\x9a\\x3b\\xbb\\x3b\"\n\"\\xe2\\x3c\\x1d\\x3c\\x46\\x3c\\x61\\x3c\\xd4\\x3d\\x18\\x3d\\x82\\x3d\\x9c\\x3e\\x0a\\x3e\\x38\\x3e\\xaa\\x3f\\x2a\\x3f\\x2e\\x3f\\x56\\x3f\\x92\\x40\\x0b\\x40\"\n\"\\x99\\x40\\xfe\\x41\\x10\\x41\\x53\\x41\\xc9\\x42\\x42\\x42\\xb8\\x42\\xe2\\x43\\x41\\x43\\x47\\x43\\x56\\x43\\xe7\\x44\\x31\\x44\\x35\\x44\\x9e\\x44\\xa2\\x44\"\n\"\\xd8\\x45\\x36\\x45\\x43\\x45\\x73\\x45\\x92\\x46\\x07\\x46\\x4a\\x46\\x74\\x46\\x78\\x47\\x22\\x47\\xa2\\x47\\xdc\\x47\\xf9\\x48\\x45\\x48\\x9f\\x48\\xe7\\x49\"\n\"\\x2c\\x49\\x59\\x49\\xb0\\x49\\xe6\\x4a\\x4e\\x4a\\x75\\x4b\\x05\\x4b\\x34\\x4b\\x8b\\x4b\\xfe\\x4c\\x2c\\x4c\\x4e\\x4c\\x91\\x4d\\x00\\x4d\\x5a\\x4d\\xd9\\x4d\"\n\"\\xe2\\x4e\\x19\\x4e\\x3d\\x4e\\x84\\x4e\\xca\\x4f\\x39\\x4f\\xbb\\x50\\x4d\\x50\\x54\\x50\\x6f\\x50\\x78\\x50\\xad\\x50\\xe3\\x51\\x27\\x51\\x75\\x51\\x81\\x51\"\n\"\\xb6\\x51\\xd6\\x51\\xf6\\x52\\x16\\x52\\x36\\x52\\x42\\x52\\x57\\x52\\xc7\\x52\\xdb\\x52\\xe3\\x52\\xeb\\x52\\xf5\\x53\\x55\\x53\\xd3\\x54\\x3f\\x54\\x62\\x54\"\n\"\\x85\\x54\\xf3\\x55\\x1f\\x55\\x27\\x55\\x4d\\x55\\x55\\x55\\x5e\\x55\\x8e\\x55\\x97\\x55\\xdb\\x56\\x0a\\x56\\x0e\\x56\\x28\\x56\\x49\\x56\\xa2\\x56\\xe9\\x57\"\n\"\\x3f\\x57\\xaa\\x57\\xc3\\x58\\x0b\\x58\\x9b\\x59\\x13\\x59\\x1c\\x59\\x25\\x59\\x56\\x59\\x86\\x59\\xab\\x5a\\x14\\x5a\\x1c\\x5a\\x64\\x5a\\x8b\\x5a\\x99\\x5b\"\n\"\\x0e\\x5b\\x1c\\x5b\\x94\\x5c\\x02\\x5c\\x36\\x5c\\x6a\\x5c\\xaf\\x5d\\x3c\\x5d\\x7c\\x5d\\x81\\x5d\\x9b\\x5d\\xa4\\x5d\\xc4\\x5d\\xd0\\x5d\\xd9\\x5e\\x4f\\x5e\"\n\"\\x60\\x5e\\xe2\\x5e\\xeb\\x5f\\x4b\\x5f\\x68\\x5f\\x71\\x5f\\x97\\x5f\\xbe\\x5f\\xca\\x60\\x07\\x60\\x7c\\x60\\x82\\x60\\xcd\\x61\\x4f\\x61\\x58\\x61\\xe2\\x61\"\n\"\\xeb\\x61\\xf4\\x62\\x5b\\x62\\x93\\x62\\xec\\x62\\xf9\\x63\\x09\\x63\\x12\\x63\\x81\\x64\\x05\\x64\\x09\\x64\\x29\\x64\\x37\\x64\\x45\\x64\\xb7\\x65\\x4a\\x65\"\n\"\\xca\\x66\\x4b\\x66\\x7f\\x66\\xa7\\x66\\xdd\\x67\\x5a\\x67\\x8a\\x67\\x94\\x67\\xaf\\x67\\xb9\\x67\\xc2\\x67\\xd4\\x68\\x1f\\x68\\x2a\\x68\\x94\\x68\\x9c\\x68\"\n\"\\xa6\\x68\\xc5\\x69\\x16\\x69\\xa7\\x69\\xf8\\x6a\\x34\\x6a\\xb8\\x6b\\x07\\x6b\\x2e\\x6b\\x46\\x6b\\x78\\x6b\\xcf\\x6b\\xf0\\x6b\\xf9\\x6c\\x0d\\x6c\\x16\\x6c\"\n\"\\x29\\x6c\\x2c\\x6c\\x30\\x6c\\x3d\\x6c\\x47\\x6c\\x4e\\x6c\\x56\\x6c\\x7e\\x6d\\x0d\\x6d\\x84\\x6e\\x00\\x6e\\x0c\\x6e\\x2c\\x6e\\x36\\x6e\\x3e\\x6e\\x74\\x6e\"\n\"\\xb5\\x6f\\x55\\x6f\\xee\\x70\\x60\\x70\\xc0\\x70\\xfd\\x71\\x4a\\x71\\xdb\\x72\\x22\\x72\\x86\\x72\\xf5\\x73\\x14\\x73\\x31\\x73\\x7a\\x73\\xa8\\x73\\xe9\\x74\"\n\"\\x42\\x74\\x8e\\x74\\xf1\\x75\\x3c\\x75\\xc2\\x76\\x12\\x76\\x49\\x76\\xa3\\x77\\x0a\\x77\\x35\\x77\\x92\\x77\\x96\\x77\\xc7\\x77\\xff\\x78\\x66\\x78\\x6d\\x78\"\n\"\\x75\\x78\\xcb\\x79\\x12\\x79\\x27\\x79\\x8e\\x79\\x99\\x7a\\x51\\x7a\\xcc\\x7a\\xd0\\x7a\\xd8\\x7a\\xf4\\x7b\\x11\\x7b\\x81\\x7b\\x99\\x7b\\xde\\x7c\\x07\\x7c\"\n\"\\x7f\\x7c\\x83\\x7c\\x9c\\x7c\\xe6\\x7c\\xfa\\x7d\\x03\\x7d\\x0b\\x7d\\x12\\x7d\\x19\\x7d\\x2a\\x7d\\x31\\x7d\\xeb\\x7e\\x07\\x7e\\x28\\x7e\\x31\\x7e\\x3b\\x7e\"\n\"\\xce\\xfb\\x95\\x0e\\xfb\\x95\\x0e\\xfb\\x42\\xf7\\x51\\xf7\\x44\\x15\\xb8\\xf8\\x13\\x05\\x8c\\x97\\x8c\\x96\\x99\\x1a\\xbf\\x78\\xa7\\x69\\x6a\\x77\\x6d\\x5c\"\n\"\\x71\\x93\\x3f\\x97\\x40\\x1e\\x94\\x50\\x91\\x5a\\x8d\\x6d\\x94\\xfb\\x00\\x18\\x92\\x3b\\x15\\x6d\\x74\\x73\\x6d\\x6e\\xa1\\x75\\xa9\\xac\\xa2\\xa0\\xa9\\xa9\"\n\"\\x72\\xa3\\x6d\\x1f\\x0e\\x28\\xf7\\xbf\\xf8\\x43\\x15\\x8e\\x9d\\x8d\\x98\\x8d\\x94\\x08\\x9b\\xd7\\x94\\xc7\\xa8\\x1a\\xa1\\x78\\x9d\\x74\\x73\\x78\\x79\\x74\"\n\"\\x7a\\x99\\x31\\x9d\\x2a\\x1e\\xfb\\x28\\x16\\x8e\\x9d\\x8d\\x98\\x8d\\x94\\x08\\x9b\\xd7\\x94\\xc7\\xa8\\x1a\\xa1\\x78\\x9d\\x74\\x73\\x78\\x79\\x74\\x7a\\x99\"\n\"\\x31\\x9d\\x2a\\x1e\\x0e\\x84\\xf8\\x6b\\xf7\\xa3\\x15\\x27\\x06\\x9f\\xf7\\x1a\\x05\\xf4\\xc2\\x2a\\x06\\xa9\\xf7\\x5e\\x05\\x51\\x06\\x6d\\xfb\\x5e\\x05\\xfb\"\n\"\\x19\\x06\\xaa\\xf7\\x5e\\x05\\x51\\x06\\x6c\\xfb\\x5e\\x05\\xfb\\x0a\\x54\\xf7\\x02\\x06\\x76\\xfb\\x1a\\x05\\xfb\\x08\\x54\\xf6\\x06\\x6a\\xfb\\x6c\\x05\\xc5\"\n\"\\x06\\xac\\xf7\\x6c\\x05\\xf7\\x1a\\x06\\x6c\\xfb\\x6c\\x05\\xc5\\x06\\xaa\\xf7\\x6c\\x05\\xf7\\x01\\x06\\xfb\\x1e\\xf7\\x51\\x15\\x77\\xfb\\x1a\\x05\\xfb\\x1a\"\n\"\\x06\\xa0\\xf7\\x1a\\x05\\x0e\\x84\\xf8\\x3d\\xf8\\x88\\x15\\xf7\\x03\\x07\\x69\\xa7\\x60\\x9a\\x37\\x95\\x08\\xca\\x69\\x4c\\x07\\x4c\\x84\\x6f\\x82\\x6a\\x71\"\n\"\\x08\\x69\\x70\\x77\\x63\\x60\\x1a\\x5c\\x9b\\x68\\xb3\\x66\\x1e\\xa8\\x6f\\xa1\\x7c\\xd2\\x63\\x08\\xfb\\xae\\x07\\x2d\\x8c\\x56\\xba\\x73\\xf4\\x08\\x7c\\xfb\"\n\"\\x16\\x06\\xc7\\x66\\xb5\\x80\\xdf\\x88\\x08\\x34\\xad\\xe2\\x07\\xd5\\x97\\xaa\\x97\\xaf\\xa8\\x08\\xac\\xa7\\x9e\\xb4\\xbb\\x1a\\xaf\\x84\\xac\\x7e\\xa0\\x1e\"\n\"\\x71\\xb4\\x70\\xa0\\xfb\\x0c\\xd0\\x08\\xf7\\x8a\\x07\\xdf\\x81\\xb8\\x61\\x9c\\x36\\x08\\xfb\\x49\\x2e\\x15\\x37\\xc3\\x78\\xa3\\xba\\x1a\\xc2\\xad\\xad\\xd0\"\n\"\\x99\\x1e\\xae\\xfb\\xec\\x15\\xe8\\x51\\xa0\\x70\\x4d\\x1a\\x49\\x67\\x66\\x3d\\x7c\\x1e\\x0e\\xf7\\xda\\xf9\\x31\\xf8\\x07\\x15\\xfb\\x05\\x20\\xfb\\x09\\xfb\"\n\"\\x11\\x3d\\xba\\x58\\xd4\\xb8\\xb0\\x9b\\xae\\xae\\x1f\\xc0\\xc1\\xac\\xdc\\xd9\\x1a\\xcf\\x65\\xb2\\x4a\\x1e\\x92\\x6b\\x15\\xb2\\xaa\\x67\\x5f\\x52\\x72\\x47\"\n\"\\x65\\x5b\\x1f\\x64\\x6b\\x6e\\x7a\\x67\\x1b\\x66\\x73\\xa5\\xb1\\xc1\\xa7\\xdc\\xb0\\xbf\\x1f\\xb3\\xa6\\xa7\\x9d\\xaa\\x1b\\x61\\xf7\\xe5\\x15\\x64\\x06\\x58\"\n\"\\x54\\x64\\x7a\\x4c\\x1b\\x63\\x75\\x92\\x9f\\x73\\x1f\\xa1\\x71\\x7e\\x90\\x6c\\x1b\\xfb\\x07\\x21\\xfb\\x0b\\xfb\\x13\\x45\\xc0\\x52\\xcc\\xb6\\xb8\\x9f\\xae\"\n\"\\xac\\x1f\\xbf\\xc0\\xab\\xdb\\xd3\\x1a\\x99\\x89\\x97\\x86\\x9d\\x1e\\x84\\x9d\\x9e\\x88\\xa8\\x1b\\xb6\\xa4\\x92\\xa3\\xb4\\x1f\\xfb\\xf3\\xfd\\x07\\x05\\xbb\"\n\"\\x06\\xf0\\xf8\\xf9\\x15\\x91\\x77\\x8e\\x7c\\x7d\\x1a\\x62\\x7c\\x56\\x74\\x61\\x1e\\x51\\x6a\\x5d\\x69\\x5d\\x1b\\x68\\x73\\xa4\\xaf\\xf5\\xde\\xf7\\x22\\xc9\"\n\"\\x90\\x8d\\x8a\\x86\\x91\\x1f\\x99\\x7e\\x97\\x86\\xa8\\x83\\x08\\x0e\\xf7\\xa3\\xf9\\x5b\\xf8\\x3e\\x15\\xfb\\x6c\\x76\\x06\\xbd\\x86\\x99\\x81\\x6d\\x1a\\x5f\"\n\"\\x71\\x57\\x4a\\x35\\x1e\\x54\\xd0\\x6a\\xbe\\x5f\\xe1\\x08\\xf7\\x06\\xc1\\xb4\\xb8\\xd3\\x1a\\xd2\\x53\\xbd\\x3c\\x35\\x47\\x47\\x35\\x65\\x93\\x6b\\xa6\\x40\"\n\"\\x1e\\x65\\x75\\x05\\x21\\x4e\\x58\\x44\\x37\\x1a\\x2c\\xcb\\x52\\xf6\\xdc\\xc7\\xa4\\xcd\\xd6\\x1e\\x4a\\xca\\xbc\\x71\\xc5\\x1b\\xcb\\xc4\\xb5\\xd2\\xa9\\x1f\"\n\"\\x7c\\x96\\x05\\x63\\x6b\\x75\\x7e\\x67\\x1b\\x53\\x58\\xaa\\xc8\\x5c\\x1f\\xb7\\xc6\\xa4\\xb0\\xaa\\xc1\\xa5\\xb9\\x18\\xa3\\xb4\\x9f\\x97\\xbd\\x91\\x08\\xfc\"\n\"\\x1a\\x96\\x15\\x6d\\xca\\x81\\xb1\\xb8\\x1a\\xbb\\xaa\\xad\\xb9\\xb9\\xad\\x67\\x5a\\x54\\x65\\x5d\\x3c\\x61\\x1e\\x46\\x42\\x15\\xc7\\xfb\\x06\\xae\\x54\\xc4\"\n\"\\x45\\x08\\x5c\\x4f\\x65\\x79\\x60\\x1b\\x44\\x51\\xca\\xd9\\xcb\\xaa\\xb6\\xe2\\xc3\\x1f\\x0e\\xfb\\x42\\xf5\\xf8\\x45\\x4d\\x0a\\x0e\\xfb\\x42\\xf7\\xbb\\xf9\"\n\"\\x38\\x15\\x41\\x5a\\x6d\\x72\\x66\\x5d\\x08\\x44\\x34\\x68\\x27\\xfb\\x09\\x1a\\xfb\\x14\\xb0\\x2a\\xe3\\x25\\x1e\\xb4\\x5b\\xa5\\x75\\xbf\\x6b\\x97\\x9b\\x18\"\n\"\\x3b\\xca\\x6f\\xaf\\x70\\xd5\\x08\\x73\\xce\\x80\\xd6\\xf0\\x1a\\xf4\\x98\\xde\\xa6\\xc8\\x1e\\xa7\\xc9\\xa9\\xaf\\xd3\\xc5\\x08\\x0e\\xfb\\x42\\xb1\\xfb\\x45\"\n\"\\x15\\xd5\\xbc\\xa9\\xa4\\xb0\\xb9\\x08\\xd2\\xe2\\xae\\xef\\xf7\\x09\\x1a\\xf7\\x14\\x66\\xec\\x33\\xf1\\x1e\\x62\\xbb\\x71\\xa1\\x57\\xab\\x7f\\x7b\\x18\\xdb\"\n\"\\x4c\\xa6\\x68\\xa7\\x40\\x08\\xa3\\x48\\x96\\x40\\x26\\x1a\\x22\\x7e\\x39\\x70\\x4e\\x1e\\x70\\x4d\\x6c\\x66\\x43\\x51\\x08\\x0e\\x84\\xf7\\x85\\xf8\\x55\\x15\"\n\"\\x8c\\x82\\x8c\\x85\\x89\\x1a\\x71\\x85\\x71\\x7f\\x6b\\x1e\\x84\\x78\\x87\\x7a\\x80\\x1a\\x78\\x9b\\x7a\\x9e\\xa0\\x9d\\x9e\\xa0\\x91\\x88\\x97\\x86\\x99\\x1e\"\n\"\\x7e\\xae\\x84\\xb1\\xb2\\x1a\\x92\\x07\\x92\\x88\\xa0\\x83\\xa2\\x77\\xa5\\x6b\\x19\\x6c\\xa4\\x9c\\x7f\\x9d\\x1b\\xa0\\x99\\x9a\\xa1\\xa5\\x7c\\x96\\x5f\\x92\"\n\"\\x1f\\x64\\x91\\x6a\\x97\\x72\\x9b\\x83\\x90\\x18\\xbc\\xa7\\x9e\\x92\\xb7\\x92\\x08\\xb2\\x91\\x97\\x95\\xa5\\x1a\\xa2\\x7d\\x9b\\x75\\x7c\\x7a\\x7e\\x6f\\x73\"\n\"\\x1e\\x72\\x6d\\x73\\x75\\x74\\x7f\\x84\\x87\\x18\\xa5\\x07\\xa6\\xf7\\x16\\x05\\x9f\\x7b\\x9b\\x77\\x77\\x7c\\x7c\\x77\\x80\\x8f\\x78\\x91\\x76\\x1e\\x95\\x68\"\n\"\\x90\\x6c\\x72\\x1a\\x7e\\x07\\x65\\xa0\\x77\\x9b\\x6b\\xaf\\x08\\xa3\\x77\\x7f\\x93\\x7b\\x1b\\x77\\x7d\\x7c\\x76\\x72\\x9e\\x7e\\xbc\\x82\\x1f\\xb0\\x84\\xa9\"\n\"\\x81\\x9e\\x7e\\x96\\x84\\x18\\x62\\x72\\x7b\\x85\\x5d\\x82\\x08\\x5e\\x83\\x7a\\x7f\\x71\\x1a\\x76\\x98\\x7e\\xa2\\x9b\\x94\\x90\\x9e\\x9c\\x1e\\xa8\\xac\\x90\"\n\"\\x90\\x93\\x92\\x95\\x93\\x8f\\x8f\\xb0\\xa3\\x08\\x0e\\xc4\\xf7\\x8d\\xf7\\xb2\\x15\\xfb\\x6f\\x49\\xf7\\x6f\\xfb\\x70\\xcd\\xf7\\x70\\xe7\\x1d\\xfb\\x95\\xde\"\n\"\\xfb\\x21\\x25\\x0a\\xfb\\x42\\xc9\\x0a\\xfb\\x95\\xf7\\x11\\xef\\x2b\\x0a\\xfb\\x79\\xf7\\xb3\\xf9\\x38\\x15\\x48\\x06\\xfb\\x79\\xfd\\x46\\x05\\xcf\\x06\\x0e\"\n\"\\x84\\xf7\\x92\\xf9\\x38\\x15\\x54\\x61\\x7b\\x67\\x66\\x1f\\x51\\x53\\x65\\xfb\\x07\\xfb\\x09\\x1a\\xfb\\x02\\xac\\xfb\\x08\\xba\\x53\\x1e\\x5f\\xb0\\xbe\\x73\"\n\"\\xc5\\x1b\\xbe\\xb6\\x9c\\xae\\xaf\\x1f\\xc5\\xc2\\xb1\\xf7\\x08\\xf7\\x0d\\x1a\\xf7\\x61\\x30\\xf7\\x21\\xfb\\x17\\x1e\\x88\\x71\\x15\\xdf\\xb8\\xfb\\x05\\xfb\"\n\"\\x65\\xfb\\x65\\x5f\\x20\\x35\\x35\\x5f\\xf6\\xf7\\x64\\xf7\\x69\\xb8\\xf7\\x02\\xe1\\x1f\\x0e\\x84\\xf7\\x0a\\x16\\xf7\\xa8\\x9a\\x06\\x3e\\x7a\\x96\\xbb\\x8a\"\n\"\\x1f\\xf8\\xec\\x07\\x83\\x8d\\xfb\\x48\\x30\\x05\\x7d\\x07\\x9a\\xb2\\xa3\\x92\\x94\\x1b\\xa0\\x94\\x7c\\x6b\\x1f\\xfc\\x59\\x07\\x89\\x4c\\x7a\\x7d\\x3f\\x8a\"\n\"\\x08\\x0e\\x84\\xf8\\x6f\\xf7\\x1d\\x15\\x7e\\x90\\x66\\x51\\x80\\x84\\x5c\\x8a\\x19\\xfb\\x83\\x06\\xf7\\x3c\\xf7\\x44\\x05\\xe4\\xe8\\xb2\\xd7\\xd9\\x1a\\xef\"\n\"\\x3a\\xd8\\x23\\x54\\x57\\x75\\x63\\x66\\x1e\\x6b\\x69\\x7c\\x6b\\x7a\\x44\\xa0\\x86\\x18\\xed\\xb3\\xae\\xab\\xd1\\x1b\\xe0\\xc3\\x52\\x37\\x3c\\x5d\\x2f\\x37\"\n\"\\x32\\x1f\\xfb\\x46\\xfb\\x51\\x05\\x7f\\xf8\\x1a\\x07\\x0e\\x84\\xf7\\x2d\\xf7\\xde\\x15\\xc6\\xa2\\x89\\x82\\xa2\\x1f\\xca\\x74\\xb1\\x53\\x46\\x1a\\x36\\x53\"\n\"\\x4b\\x41\\x6f\\x77\\x92\\xa3\\x66\\x1e\\x9d\\x6e\\x7a\\x92\\x7a\\x1b\\x74\\x7c\\x7d\\x76\\x68\\xb6\\x75\\xd1\\xd7\\xda\\xa5\\xb4\\xbb\\x1f\\xba\\xb4\\xa4\\xc5\"\n\"\\xce\\x1a\\xbf\\x7b\\xb9\\x6f\\xaa\\x1e\\x76\\xa1\\x78\\x97\\x60\\x9e\\x08\\xcf\\xba\\xa4\\xb0\\xc1\\x1a\\xdd\\x4c\\xc2\\x2e\\x59\\x5f\\x7a\\x6b\\x67\\x1e\\x6d\"\n\"\\x6f\\x7c\\x72\\x76\\x4f\\x9a\\x87\\x18\\xd5\\xb3\\xb8\\xab\\xca\\x1b\\xcd\\xb7\\x60\\x4b\\x67\\x7c\\x68\\x72\\x71\\x1f\\x6d\\x6d\\x6f\\x7c\\x47\\x73\\x08\\x0e\"\n\"\\x84\\xf8\\x6c\\xf7\\x7b\\x15\\x25\\xf8\\x51\\x5f\\x06\\xfb\\xce\\xfc\\x51\\x05\\x4b\\xf7\\xad\\xfb\\x3b\\xd8\\xf7\\x3b\\xf1\\x07\\xfb\\x48\\xcb\\x15\\xfb\\x84\"\n\"\\x06\\xf7\\x84\\xf7\\xeb\\x05\\x0e\\x84\\xf7\\x49\\xf8\\xdb\\x15\\xf7\\x58\\x06\\x9c\\x8e\\x8c\\x93\\x8e\\x1f\\xb1\\xe4\\x82\\x92\\x05\\x77\\x7c\\x82\\x85\\x75\"\n\"\\x1b\\xfb\\x65\\x06\\xfb\\x01\\xfb\\x81\\x05\\x8a\\x89\\x8b\\x8a\\x89\\x1a\\x85\\x8f\\x89\\x93\\xab\\xb2\\x84\\x7e\\xb5\\x1e\\xf7\\x07\\x66\\xbf\\x4e\\x27\\x1a\"\n\"\\x2b\\x4f\\x40\\x3c\\x77\\x7b\\x92\\xa1\\x6d\\x1e\\xa3\\x6b\\x75\\x94\\x74\\x1b\\x6f\\x7d\\x7f\\x72\\x65\\xb9\\x73\\xd7\\xde\\xd3\\xa6\\xbe\\xbe\\x1f\\xb8\\xb8\"\n\"\\xa0\\xc4\\xd7\\x1a\\xd3\\x78\\xb9\\x5a\\xbd\\x1e\\x5f\\xb7\\x52\\xa2\\xfb\\x0a\\xa0\\x08\\x0e\\x84\\xf8\\x52\\xf9\\x40\\x15\\xfb\\x06\\x81\\x51\\x78\\x42\\x58\"\n\"\\x08\\xfb\\x00\\x3e\\x50\\xfb\\x06\\xfb\\x1a\\x1a\\x34\\xa6\\x33\\xb6\\x59\\x1e\\x5f\\xb1\\xc1\\x73\\xc9\\x1b\\xf7\\x10\\xe1\\xea\\xf7\\x1e\\xf7\\x15\\x43\\xdb\"\n\"\\xfb\\x09\\x5f\\x77\\x84\\x65\\x4c\\x1f\\xa6\\xf7\\x2b\\xf7\\x04\\xf7\\x00\\xf7\\x31\\xa5\\x08\\xfb\\x62\\xfb\\xb2\\x15\\xe2\\xbc\\x43\\xfb\\x11\\xfb\\x02\\x64\"\n\"\\x4e\\x45\\x33\\x55\\xe9\\xf7\\x2f\\xbe\\x93\\xa7\\x9f\\x9a\\x1f\\x9b\\xa0\\xaa\\x94\\xae\\x1b\\x0e\\x84\\xf8\\x55\\x21\\x1d\\xfc\\x06\\x06\\x50\\xfb\\x27\\x9c\"\n\"\\x83\\xb4\\xce\\x9e\\x98\\xc3\\x8c\\x19\\xf7\\x6d\\x06\\xfb\\x5a\\xfc\\xe8\\x05\\xcc\\x06\\xf7\\x68\\xf9\\x22\\x05\\x0e\\x84\\xf7\\xb6\\xf8\\x07\\x15\\xef\\xc1\"\n\"\\xad\\xb4\\xcf\\x1a\\xde\\x44\\xc6\\x26\\xfb\\x01\\x3a\\x48\\x30\\x4a\\x9e\\x6e\\xf4\\x2f\\x1e\\xfb\\x01\\x38\\x76\\x6e\\x46\\x1a\\x29\\xd9\\x48\\xf7\\x06\\xf7\"\n\"\\x0c\\xd8\\xcd\\xf2\\xd8\\x69\\xbb\\xfb\\x0d\\xe6\\x1e\\x79\\x24\\x15\\xd4\\x57\\xa3\\x67\\x53\\x1a\\x4a\\x5e\\x5e\\x4a\\x3f\\x58\\xc5\\xe1\\xcc\\xa0\\xb4\\xc6\"\n\"\\xbb\\x1e\\xbc\\xd8\\x15\\x32\\xc5\\x67\\xb9\\xc3\\x1a\\xc5\\xb8\\xb4\\xca\\xcf\\xb6\\x5f\\x46\\x4e\\x71\\x63\\x47\\x5e\\x1e\\x0e\\x84\\xc6\\x75\\x15\\xf7\\x04\"\n\"\\x98\\xc2\\x9e\\xcf\\xbc\\x08\\xf3\\xd7\\xc8\\xf7\\x10\\xf7\\x1b\\x1a\\xf7\\x39\\x30\\xf7\\x09\\xfb\\x16\\xfb\\x0b\\x32\\x26\\xfb\\x1b\\xfb\\x0e\\xd3\\x3a\\xf7\"\n\"\\x00\\xc2\\xb5\\x9b\\xb4\\xc0\\x1e\\x62\\xfb\\x37\\xfb\\x03\\x20\\xfb\\x2c\\x71\\x08\\xf7\\xc6\\xf7\\xf9\\x15\\x77\\x87\\x82\\x80\\x82\\x1e\\x74\\x70\\x65\\x7d\"\n\"\\x67\\x1b\\x3f\\x5b\\xd6\\xf7\\x0b\\xc4\\x9b\\xc7\\xa0\\xa5\\x1f\\x9f\\x9c\\xa4\\x96\\xa8\\x1b\\xe2\\xb8\\x35\\xfb\\x3c\\x1f\\x0e\\xfb\\x79\\xf7\\x1c\\xf8\\x5f\"\n\"\\x15\\x2c\\x1d\\xfb\\xfb\\x04\\x2c\\x1d\\x0e\\xfb\\x79\\xf6\\xfb\\x21\\x15\\xd0\\xad\\xb6\\xc7\\xc7\\x1a\\xbe\\x68\\xb1\\x5e\\x67\\x74\\x75\\x69\\x6a\\xa1\\x78\"\n\"\\xb0\\x92\\x92\\x8c\\x8c\\x91\\x1e\\x8d\\x90\\x8c\\x8b\\x8c\\x1b\\x93\\x91\\x85\\x83\\x6b\\x6f\\x66\\x55\\x66\\x1f\\xb1\\xf8\\xd9\\x15\\x6d\\x72\\x72\\x6b\\x6e\"\n\"\\xa4\\x72\\xa8\\xaa\\xa5\\xa4\\xa8\\xaa\\x71\\xa5\\x6d\\x1f\\x0e\\xc4\\xf8\\x7c\\xf8\\xe8\\x15\\xfc\\x30\\xfb\\x9c\\x05\\x85\\x07\\xf8\\x30\\xfb\\xa8\\x05\\xf3\"\n\"\\x07\\xfb\\xc6\\xf7\\x60\\xf7\\xc6\\xf7\\x5b\\x05\\x0e\\xc4\\xf8\\xaa\\xf8\\x16\\x15\\xfc\\x8c\\x49\\xf8\\x8c\\x06\\xfb\\x1a\\x04\\xfc\\x8c\\x49\\xf8\\x8c\\x06\"\n\"\\x0e\\xc4\\xd7\\xbd\\x15\\xf8\\x30\\xf7\\x9c\\x05\\x92\\x07\\xfc\\x30\\xf7\\xa7\\x05\\x24\\x07\\xf7\\xc6\\xfb\\x61\\xfb\\xc6\\xfb\\x5b\\x05\\x0e\\x4c\\xf7\\x88\"\n\"\\xf7\\x38\\x15\\x96\\xcf\\x9c\\xb3\\xb0\\xb9\\xb9\\xc3\\x8b\\x8b\\x99\\xa0\\x08\\xab\\xbc\\x98\\xaf\\xb4\\x1a\\xb1\\x7e\\xaf\\x74\\xa2\\x1e\\xae\\x69\\x50\\xa2\"\n\"\\x54\\x1b\\x2f\\x45\\x4d\\x38\\x62\\x9b\\x76\\xab\\xa4\\x9b\\x9b\\xa4\\x99\\x85\\x97\\x7c\\x9c\\x1f\\x7e\\x99\\x87\\x93\\x94\\x1a\\xab\\xb9\\xa9\\xbb\\xc8\\xbb\"\n\"\\x56\\x48\\x5d\\x7e\\x54\\x73\\x54\\x1e\\x6f\\x4b\\x78\\x5a\\x81\\x5a\\x8a\\x5f\\x19\\x95\\x48\\x15\\x6d\\x74\\x73\\x6c\\x6e\\xa1\\x76\\xaa\\xab\\xa2\\xa0\\xa9\"\n\"\\xa9\\x72\\xa3\\x6d\\x1f\\x0e\\xf8\\x32\\xf9\\x44\\xd4\\x15\\x68\\x3d\\x58\\x7e\\x48\\x1b\\xfb\\x3f\\xfb\\x0d\\xf7\\x0f\\xf7\\x43\\xe8\\xaf\\xea\\xc4\\xc5\\x1f\"\n\"\\xbc\\xbc\\xcd\\xa6\\xd5\\x1b\\xf7\\x31\\xf7\\x16\\xfb\\x0f\\xfb\\x29\\x26\\x4c\\x2b\\x49\\x71\\x7e\\x9a\\xaa\\x92\\x8c\\x91\\x8c\\x90\\x1f\\xcc\\xf7\\x92\\x05\"\n\"\\x46\\x06\\x81\\x65\\x05\\xb4\\x75\\x7c\\x96\\x68\\x1b\\x60\\x68\\x7b\\x69\\x68\\x1f\\x57\\x56\\x6c\\x40\\x41\\x1a\\x4c\\xb2\\x5a\\xbc\\xb7\\xba\\xa6\\xb8\\xad\"\n\"\\x1e\\x5f\\x91\\xb0\\x6e\\xbb\\x1b\\xee\\xe0\\xf7\\x03\\xf7\\x15\\xf7\\x39\\xfb\\x23\\xf7\\x14\\xfb\\x4d\\xfb\\x5f\\xfb\\x36\\xfb\\x2f\\xfb\\x57\\xfb\\x54\\xf7\"\n\"\\x34\\xfb\\x28\\xf7\\x64\\xd1\\xbc\\x98\\xb7\\xec\\x1f\\xfb\\x3d\\xf8\\x39\\x15\\xa7\\x89\\x9a\\x74\\x89\\x64\\x89\\x59\\x7a\\x51\\x72\\x5c\\x08\\x67\\x77\\x6e\"\n\"\\x75\\x70\\x1b\\x66\\x74\\xab\\xc0\\xc1\\x9d\\xbd\\xad\\xb1\\x1f\\xa7\\xab\\xae\\x9f\\xa3\\x89\\x08\\x0e\\x22\\x0a\\x0e\\xf7\\x34\\x9c\\xf9\\x17\\x15\\xdf\\x66\"\n\"\\x1d\\x40\\x7e\\x7f\\x39\\x88\\x08\\x78\\xf7\\xe2\\x07\\xd8\\xd3\\xa0\\xad\\xb0\\x1f\\xaf\\xab\\x9f\\xb8\\xbb\\x1a\\xb7\\x7a\\xb3\\x6b\\xa8\\x1e\\x6d\\xa6\\x70\"\n\"\\x97\\x4a\\x9b\\xbf\\x98\\xa0\\x95\\xa3\\xa0\\x08\\xa4\\xa1\\x9a\\xaf\\xb5\\x1a\\xf7\\x04\\x31\\xc5\\xfb\\x40\\x1e\\xfb\\xac\\x06\\xf7\\x5a\\xfb\\xe4\\x15\\xec\"\n\"\\xb9\\x85\\x7c\\xaf\\x1f\\xc4\\x74\\xa6\\x62\\x4d\\x1a\\x55\\x76\\x64\\x63\\x74\\x1e\\x79\\x6b\\x62\\x83\\x49\\x1b\\x5a\\x7d\\x94\\xab\\x1f\\xf7\\xb3\\x04\\xf7\"\n\"\\x7a\\x07\\x8c\\xa1\\x8f\\x91\\x9c\\x8c\\xb7\\x8c\\x18\\xf7\\x03\\x8e\\xcc\\x58\\x32\\x1a\\x3c\\x58\\x61\\x2b\\x8a\\x1e\\x0e\\xf7\\x34\\x31\\x0a\\x0e\\x6a\\x0a\"\n\"\\x0e\\xf3\\x21\\x0a\\x0e\\xbc\\xf8\\x73\\xf7\\x7b\\x15\\xf7\\x7c\\x74\\x07\\x80\\x3c\\x7a\\x7d\\x39\\x89\\x08\\xfb\\x25\\xf7\\x72\\x06\\x8c\\xa9\\x8e\\x8e\\xa7\"\n\"\\x8c\\x08\\xf7\\x1c\\x54\\x1d\\xfc\\x45\\xa5\\x0a\\xf7\\x6e\\xf7\\x25\\x07\\xdd\\x8a\\x9b\\x7d\\x97\\x3a\\x08\\x0e\\x30\\x0a\\x0e\\x69\\x0a\\x0e\\xfb\\x42\\x28\"\n\"\\x1d\\x0e\\xfb\\x0a\\xf8\\x06\\x21\\x1d\\xfb\\xb3\\x78\\x06\\xdc\\x85\\x96\\x81\\x8c\\x41\\x08\\xfc\\x63\\x07\\x5e\\x7f\\x76\\x71\\x7d\\x85\\x93\\xa4\\x84\\x1e\"\n\"\\xae\\x81\\x7b\\x9b\\x71\\x1b\\x70\\x75\\x74\\x70\\x61\\xb4\\x6d\\xc5\\xf7\\x00\\xc8\\xd3\\xf7\\x11\\x1f\\xf8\\x06\\x07\\x8d\\xd6\\x94\\x94\\xdc\\x91\\x08\\x0e\"\n\"\\x63\\x0a\\x0e\\xf3\\x36\\x1d\\x0e\\xf8\\x12\\xf9\\xf3\\x21\\x1d\\xfb\\x5b\\x06\\xfb\\x71\\xfc\\x8d\\xfb\\x7b\\xf8\\x8d\\x05\\xfb\\x5a\\x78\\x06\\xdd\\x87\\x96\"\n\"\\x80\\x8d\\x40\\x08\\xfc\\x2a\\x59\\x1d\\xf8\\x27\\x07\\xf7\\x8f\\xfc\\xba\\x05\\x99\\x06\\xf7\\x94\\xf8\\xd1\\x05\\xfc\\x59\\x07\\x8a\\x36\\x80\\x80\\x3c\\x86\"\n\"\\x08\\x78\\xf7\\xac\\x9e\\x07\\x43\\x8f\\x7e\\x99\\x89\\xd3\\x08\\xf8\\x50\\x07\\x8d\\xd3\\x97\\x98\\xd4\\x90\\x08\\x0e\\x33\\x0a\\x0e\\x23\\x0a\\x0e\\xbc\\x9b\"\n\"\\xf9\\x17\\x15\\xd5\\x83\\x94\\x48\\x1d\\x84\\x82\\x3f\\x84\\x08\\x78\\xf7\\xac\\x9e\\x07\\x3c\\x8d\\x7d\\x99\\x8a\\xd5\\x08\\xf7\\x4a\\xd9\\x1d\\xc7\\xab\\xaf\"\n\"\\xc8\\xcd\\x1a\\xb5\\x7d\\xb1\\x70\\xa8\\x1e\\xb7\\x63\\x34\\xa7\\x2d\\x1b\\xfb\\x9c\\x06\\xf7\\x4e\\x44\\x15\\xa6\\x92\\x92\\xa6\\xf7\\x1b\\xc9\\x5c\\x24\\x2a\"\n\"\\x50\\x59\\xfb\\x07\\x77\\x7d\\x8c\\x8d\\x74\\x1e\\x0e\\xf9\\x51\\xfb\\x33\\x15\\xfb\\x06\\x8e\\x3b\\xb7\\x3a\\xf4\\xcf\\x98\\xaf\\x9c\\xb9\\xb3\\x08\\xd5\\xcd\"\n\"\\xb1\\xe6\\xf7\\x03\\x1a\\xf7\\x5d\\xfb\\x1c\\xf7\\x24\\xfb\\x53\\xfb\\x53\\xfb\\x1c\\xfb\\x24\\xfb\\x5f\\x29\\xa9\\x39\\xc6\\x4b\\x1e\\xb2\\x61\\xab\\x77\\xd2\"\n\"\\x73\\xba\\x54\\x18\\x3b\\xcf\\xf7\\x0d\\x61\\xf7\\x34\\x1b\\x96\\x98\\x8b\\x8c\\x95\\x1f\\x91\\x06\\xfb\\xe5\\xf9\\xc5\\x15\\xb6\\xb9\\x78\\x6c\\xae\\x1f\\xc1\"\n\"\\x5b\\xab\\x2b\\xfb\\x05\\x1a\\x28\\x6e\\x25\\x63\\x5d\\x1e\\x62\\x66\\x57\\x74\\x54\\x1b\\x5b\\x5f\\x9c\\xab\\x66\\x1f\\x57\\xba\\x6b\\xee\\xf7\\x0a\\x1a\\xec\"\n\"\\xa8\\xec\\xb4\\xb9\\x1e\\xb7\\xb4\\xba\\xa0\\xc5\\x1b\\x0e\\xf7\\x34\\x3b\\x0a\\x0e\\xbc\\x2f\\x0a\\x0e\\xf3\\x53\\x1d\\x0e\\x24\\x1d\\x0e\\xf9\\x4d\\x21\\x1d\"\n\"\\xfb\\x61\\x78\\x06\\xc2\\x87\\x9d\\x81\\x6f\\x1a\\x7b\\x84\\x70\\x7f\\x6d\\x1e\\xfb\\x27\\xfc\\x03\\xfb\\x2b\\xf7\\xe6\\x05\\x6a\\xd5\\x83\\xa1\\x9a\\x1a\\x9f\"\n\"\\x99\\x94\\xab\\x8d\\x1e\\x90\\x96\\x8c\\x8c\\x98\\x1f\\x9e\\xfb\\x9e\\x78\\x07\\xbc\\x89\\x99\\x7d\\xb6\\x32\\xf7\\x8a\\xfc\\xb9\\x18\\x9a\\x06\\xf7\\x72\\xf8\"\n\"\\xc5\\xac\\xda\\x96\\x96\\xbb\\x8e\\x19\\x0e\\xf8\\x49\\x32\\x1d\\x0e\\xf9\\x4c\\x21\\x1d\\xfb\\x82\\x78\\x06\\xc1\\x89\\x9b\\x84\\x74\\x1a\\x7c\\x81\\x79\\x6d\"\n\"\\x67\\x1e\\xfb\\x05\\xfb\\x1e\\x61\\xc6\\x05\\x4e\\xe1\\x73\\xb5\\xa1\\x1a\\x9f\\x9a\\x93\\xac\\x8c\\x1e\\xa7\\x8c\\x05\\x9e\\xfb\\xc2\\x78\\x07\\xcc\\x88\\x9d\"\n\"\\x7c\\xed\\xfb\\x1f\\xf7\\x01\\xfb\\x34\\x18\\xfb\\x31\\xfb\\x55\\x32\\x21\\x86\\x87\\x58\\x87\\x19\\x78\\xf7\\x7d\\x9e\\x07\\x50\\x8f\\x7a\\x93\\xa2\\x1a\\x9a\"\n\"\\x9a\\xa4\\xb0\\xb9\\x1e\\xf7\\x0b\\xf7\\x28\\xea\\xfb\\x20\\x05\\xad\\x58\\x9c\\x6b\\x7c\\x1a\\x79\\x7b\\x81\\x69\\x8a\\x1e\\x87\\x80\\x8a\\x8a\\x7f\\x1f\\x78\"\n\"\\xf7\\xbd\\x9e\\x07\\x56\\x91\\x7c\\x95\\x60\\xc5\\xfb\\x54\\xf7\\xa6\\x18\\xf7\\x26\\xf7\\x4a\\xcc\\xd9\\x9f\\x97\\xcb\\x8f\\x19\\x0e\\x34\\x1d\\x0e\\xf3\\x3c\"\n\"\\x0a\\x0e\\xfb\\x42\\xf7\\xbf\\xf9\\x11\\x15\\xa4\\xfb\\x67\\xfd\\xc6\\xf7\\x67\\xa4\\x35\\x07\\x69\\x8c\\x7d\\x9a\\x8a\\xaf\\x08\\xf9\\x34\\x07\\x8c\\xab\\x96\"\n\"\\x96\\xac\\x8c\\x08\\x0e\\xfb\\x79\\x82\\xf9\\x38\\x15\\xf7\\x78\\xfd\\x46\\x05\\xcf\\x06\\xfb\\x79\\xf9\\x46\\x05\\x0e\\xfb\\x42\\xad\\xfb\\x17\\x15\\x72\\xf7\"\n\"\\x67\\xf9\\xc6\\xfb\\x67\\x72\\xe1\\x07\\xad\\x8a\\x99\\x7c\\x8c\\x67\\x08\\xfd\\x34\\x07\\x8a\\x6b\\x80\\x80\\x6a\\x8a\\x08\\x0e\\x65\\xe8\\xf7\\xbb\\x15\\xf7\"\n\"\\x22\\xf7\\xb3\\xf7\\x21\\xfb\\xb3\\x05\\xcf\\x06\\xfb\\x48\\xf7\\xfe\\x05\\x50\\x06\\xfb\\x48\\xfb\\xfe\\x05\\x0e\\x84\\xf8\\x87\\xfb\\x18\\x15\\xbd\\xfc\\x85\"\n\"\\x59\\x07\\x0e\\xfb\\x42\\xf7\\x77\\xf9\\x38\\x15\\x48\\x6a\\x5e\\x9c\\x1d\\x0e\\x4c\\x26\\x1d\\x0e\\x84\\xf7\\x2d\\xf9\\x3d\\x15\\x86\\x8d\\x62\\x7d\\x70\\x82\"\n\"\\x5b\\x7e\\x19\\x6e\\x83\\x05\\x7b\\x07\\x8c\\x91\\x8e\\x8b\\x93\\x1b\\xb3\\x94\\x82\\x61\\x1f\\xfc\\x9b\\x07\\x6c\\xdf\\x6a\\xdc\\xf7\\x18\\xf1\\xf7\\x02\\xf7\"\n\"\\x23\\xf7\\x10\\x3f\\xe8\\x27\\x4e\\x51\\x68\\x59\\x77\\x1e\\x56\\x04\\xb2\\xba\\xaf\\xbf\\xa7\\xa4\\x81\\x78\\xa0\\x1e\\xab\\x6c\\xa1\\x47\\x43\\x1a\\xfb\\x03\"\n\"\\x5b\\x4b\\x39\\x57\\x5e\\xa1\\xa5\\x1e\\x0e\\x4c\\x35\\x1d\\x0e\\x84\\xf8\\x7f\\x67\\x0a\\x0e\\x4c\\x27\\x1d\\x0e\\xfb\\x42\\xf7\\xc9\\x26\\x0a\\xfb\\x0f\\xf7\"\n\"\\x08\\x06\\x7b\\x0a\\xf7\\x98\\x9a\\x07\\x39\\x8e\\x80\\x96\\xd6\\x1a\\xf7\\xce\\xf7\\x0e\\x07\\x0e\\x84\\x3a\\x0a\\x0e\\x84\\x77\\x1d\\x0e\\xfb\\x79\\x27\\x0a\"\n\"\\xf7\\x04\\xf9\\x30\\x5b\\x1d\\xfb\\x79\\x70\\x0a\\x58\\xf9\\x3f\\x5b\\x1d\\x84\\x62\\x0a\\x0e\\xfb\\x79\\x3d\\x0a\\x0e\\xf7\\xa3\\x9b\\x16\\xf7\\x72\\x9a\\x06\"\n\"\\x58\\x8c\\x7b\\x96\\x8a\\xb3\\x08\\xf7\\xae\\x07\\x8d\\x93\\x95\\x92\\x92\\x1e\\xa2\\xa4\\xb6\\x9c\\xae\\x1b\\xb7\\xa1\\x68\\x45\\x1f\\xfb\\x6d\\x07\\x89\\x52\"\n\"\\x81\\x80\\x53\\x88\\x08\\x7c\\xf7\\x74\\x9a\\x07\\x53\\x7d\\x9b\\xcb\\x89\\x1f\\xf7\\x90\\x07\\xb6\\xa9\\xab\\x9d\\xba\\x1b\\xc4\\x9d\\x70\\x38\\x1f\\xfb\\x67\"\n\"\\x07\\x89\\x50\\x85\\x84\\x51\\x85\\x08\\x7c\\xf7\\x6f\\x9a\\x07\\x71\\x8d\\x05\\x6b\\x90\\x80\\x9a\\xb2\\x1a\\xf7\\x62\\x07\\xf7\\x0a\\x64\\xc7\\x3e\\x51\\x58\"\n\"\\x71\\x51\\x55\\x1e\\xc4\\x79\\x69\\xa6\\x55\\x1b\\x5e\\x70\\x7e\\x4b\\x38\\x1f\\xd6\\x07\\x84\\x8d\\x56\\x78\\x69\\x80\\x56\\x7c\\x19\\x7a\\x07\\x8e\\x97\\x94\"\n\"\\x8c\\x96\\x1b\\xa5\\x94\\x7b\\x5b\\x1f\\xfb\\x91\\x07\\x53\\x89\\x7e\\x7d\\x54\\x1b\\x0e\\x84\\x32\\x0a\\x0e\\x84\\x24\\x0a\\x0e\\x84\\x9f\\x1d\\x53\\x5f\\x73\"\n\"\\x54\\x5f\\x1f\\xd8\\x07\\x85\\x8d\\x55\\x76\\x68\\x7e\\x54\\x7a\\x19\\x7b\\x07\\x8c\\x94\\x91\\x8b\\x95\\x1b\\xad\\x92\\x81\\x5c\\x1f\\xfc\\x68\\x07\\x56\\x80\"\n\"\\x81\\x50\\x85\\x1e\\xf7\\x2e\\xf8\\xaa\\xa3\\x0a\\x84\\xf7\\xfc\\xf8\\x3d\\x15\\xa5\\x5e\\x6d\\x94\\x63\\x1b\\xfb\\x12\\x2c\\xfb\\x03\\xfb\\x25\\xfb\\x11\\xcd\"\n\"\\x32\\xe9\\xc5\\xc2\\xa5\\xbb\\xb7\\x1f\\xfb\\x50\\x07\\x8a\\x53\\x79\\x7b\\x45\\x87\\x08\\x7a\\xf7\\x80\\x99\\x07\\x55\\x97\\x84\\x92\\x89\\xb6\\x08\\xf8\\xe9\"\n\"\\x07\\x80\\x8c\\x05\\x42\\xfb\\xde\\x15\\x73\\x87\\x7e\\x81\\x82\\x1e\\x79\\x75\\x6a\\x7f\\x6c\\x1b\\x6c\\x70\\x95\\x9e\\x77\\x1f\\x6b\\xa9\\x76\\xcb\\xce\\x1a\"\n\"\\xf7\\x0a\\xc0\\xd4\\xe0\\xc9\\xaa\\x6a\\x49\\x1e\\x0e\\xfb\\x42\\x40\\x1d\\x0e\\xfb\\x0a\\x4a\\x0a\\x0e\\xfb\\x79\\x74\\x0a\\x0e\\x84\\x25\\x1d\\x0e\\x84\\xf8\"\n\"\\x71\\x26\\x0a\\xfb\\x1f\\x7c\\x06\\xab\\x88\\x9a\\x81\\x78\\x1a\\x81\\x89\\x81\\x87\\x81\\x1e\\x28\\xfb\\x97\\x25\\xf7\\x94\\x05\\x85\\x99\\x88\\x99\\x94\\x1a\"\n\"\\x9d\\x96\\x92\\xae\\x8e\\x1e\\x9a\\xfb\\x58\\x7c\\x07\\xb1\\x89\\x92\\x81\\xb9\\x24\\xf7\\x0c\\xfb\\xb3\\x18\\x8d\\x85\\x8e\\x84\\x8e\\x83\\x8e\\x83\\x8e\\x84\"\n\"\\x8e\\x86\\x08\\x87\\x8d\\x8f\\x89\\x8e\\x1b\\x91\\x92\\x98\\xb0\\x9a\\x1f\\xf7\\x14\\xf7\\xd5\\xa8\\xcf\\x91\\x92\\xa9\\x8e\\x19\\x0e\\x31\\x1d\\x0e\\x84\\xf7\"\n\"\\xaa\\x16\\xf7\\x5d\\x9a\\x06\\x6c\\x77\\x9b\\xb7\\x6c\\x1f\\xfb\\x14\\xf7\\x58\\xde\\xf7\\x0c\\x9e\\xa6\\xa8\\x9a\\xac\\x8d\\x19\\x9a\\xfb\\x32\\x7c\\x07\\xa9\"\n\"\\x89\\x95\\x85\\x7d\\x1a\\x7f\\x7f\\x75\\x72\\x6c\\x1e\\x86\\x85\\x7f\\x79\\x7e\\x77\\x83\\x97\\x18\\x7c\\xa2\\x82\\x98\\x89\\x8f\\x08\\x78\\xaa\\x84\\x9b\\x95\"\n\"\\x1a\\x9a\\x98\\x91\\xa9\\x8c\\x1e\\x9a\\xfb\\x63\\x7c\\x94\\x07\\xa9\\x9b\\x7e\\x5c\\xaa\\x1f\\xe9\\xfb\\x24\\xfb\\x06\\xfb\\x39\\x6d\\x62\\x81\\x84\\x6a\\x88\"\n\"\\x19\\x7c\\xf7\\x25\\x9a\\x07\\x6e\\x80\\x90\\x98\\x92\\x91\\x98\\x99\\xa0\\x1f\\xda\\xf7\\x0f\\xe6\\xfb\\x20\\x05\\x8f\\x85\\x8d\\x86\\x84\\x1a\\x79\\x84\\x87\"\n\"\\x6a\\x89\\x1e\\x0e\\x84\\x33\\x1d\\x0e\\x4c\\x34\\x0a\\x0e\\x70\\xf7\\xf2\\xfb\\x3e\\x15\\x47\\x9b\\x75\\xaa\\x8a\\xd7\\x08\\xf7\\x3c\\x07\\x8a\\xe0\\x78\\xa4\"\n\"\\x41\\x9d\\xd5\\x9e\\x9e\\xa5\\x8c\\xdf\\x08\\xf7\\x3c\\x07\\x8c\\xd7\\xa1\\xaa\\xcf\\x9b\\x08\\x96\\x07\\xfb\\x10\\x64\\x6a\\x21\\x89\\x1f\\xfb\\x46\\x07\\x8a\"\n\"\\x45\\x79\\x72\\x49\\x79\\xcd\\x78\\x9d\\x72\\x8c\\x45\\x08\\xfb\\x45\\x07\\x20\\x8e\\xb1\\x6a\\xf7\\x10\\x1b\\x0e\\xfb\\xc7\\xce\\xfb\\x8d\\x15\\xcd\\xfa\\x7a\"\n\"\\x49\\x06\\x0e\\x70\\xf7\\x16\\xf9\\x31\\x15\\xce\\x7b\\xa2\\x6c\\x8c\\x3f\\x08\\xfb\\x3c\\x07\\x8c\\x36\\x9e\\x72\\xd5\\x79\\x41\\x78\\x78\\x71\\x8a\\x37\\x08\"\n\"\\xfb\\x3c\\x07\\x8a\\x3f\\x74\\x6c\\x48\\x7b\\x08\\x80\\x07\\xf7\\x10\\xb2\\xac\\xf5\\x8d\\x1f\\xf7\\x46\\x07\\x8c\\xd1\\x9d\\xa4\\xcd\\x9e\\x49\\x9d\\x79\\xa4\"\n\"\\x8a\\xd1\\x08\\xf7\\x45\\x07\\xf7\\x00\\x88\\x65\\xab\\xfb\\x10\\x1b\\x0e\\xad\\xf8\\x53\\xf7\\xce\\x15\\x64\\x72\\x79\\x7f\\x6d\\x1b\\x76\\x76\\x90\\x94\\x7a\"\n\"\\x1f\\xba\\x33\\x78\\x92\\x5f\\x1b\\x5d\\x6e\\x77\\x4a\\x5c\\x1f\\xc1\\x6c\\x05\\xb2\\xa4\\x9c\\x97\\xaa\\x1b\\xa0\\x9f\\x86\\x82\\x9d\\x1f\\x5b\\xe3\\x9d\\x85\"\n\"\\xb8\\x1b\\xb9\\xa7\\x9f\\xcc\\xbb\\x1f\\x0e\\xfb\\x42\\xf7\\x24\\xf7\\xae\\x15\\x5e\\xfc\\x13\\x05\\x8a\\x7f\\x8a\\x7e\\x7f\\x1a\\x57\\x9e\\x6f\\xad\\xac\\x9f\"\n\"\\xa8\\xbc\\xad\\x83\\xd2\\x7f\\xd2\\x1e\\x84\\xb8\\x85\\xb9\\x87\\xba\\x82\\xf7\\x00\\x18\\x85\\xf7\\x4d\\x15\\x6c\\x74\\x76\\x6e\\x6c\\xa2\\x73\\xa9\\xaa\\xa3\"\n\"\\xa3\\xa9\\xa8\\x73\\xa1\\x6d\\x1f\\x0e\\x84\\xf8\\x27\\xf8\\xd7\\x15\\x68\\x06\\x5f\\xfb\\x10\\x05\\x8f\\x73\\x7e\\x8c\\x7d\\x1b\\xfb\\x10\\x2b\\x21\\xfb\\x1b\"\n\"\\x54\\x9c\\x55\\xa8\\x64\\x1f\\x9d\\x72\\x9a\\x7e\\xb0\\x76\\x58\\xfb\\x2a\\x18\\xad\\x06\\xbc\\xf7\\x1e\\x05\\x84\\xa3\\x9a\\x89\\x9c\\x1b\\xb1\\xb0\\x99\\xa3\"\n\"\\xa7\\x1f\\xae\\xa9\\x9e\\xa6\\xad\\xd1\\x7e\\x93\\x18\\x40\\x57\\x67\\x72\\x50\\x1b\\x77\\x7b\\x8e\\x94\\x74\\x1f\\xf0\\xf7\\xb7\\x05\\x64\\x9d\\x9a\\x7e\\xa4\"\n\"\\x1b\\xa4\\x9d\\x9d\\xa6\\xae\\x70\\xa9\\x5b\\x9e\\x1f\\xfb\\x32\\xfb\\xee\\x15\\x5a\\xb8\\x78\\xb8\\xd3\\x1a\\xf1\\xc1\\xcf\\xdd\\x9c\\x97\\x89\\x84\\x9d\\x1e\"\n\"\\x0e\\x84\\xf7\\xec\\xf8\\x09\\x15\\xfb\\x11\\x06\\x82\\xd5\\x89\\xa6\\xaf\\x1a\\xe3\\xae\\xbe\\xc7\\xb0\\x9e\\x7a\\x68\\x1e\\x56\\x8c\\x93\\x7d\\xa9\\x1b\\xa8\"\n\"\\xa0\\xa1\\xaa\\xc0\\x54\\xb3\\x40\\xfb\\x0c\\x40\\x31\\xfb\\x24\\x72\\x8d\\x79\\x90\\x71\\x1f\\x20\\x5e\\xf7\\x00\\x06\\x8d\\x7a\\x8d\\x7b\\x05\\x96\\x3f\\x91\"\n\"\\x54\\x79\\x1a\\x84\\x8a\\x85\\x89\\x83\\x1e\\x8f\\x78\\x7f\\x8c\\x7c\\x1b\\x54\\x67\\x6d\\x5d\\x65\\xa5\\x73\\xb5\\xae\\xa2\\x99\\xbb\\xb3\\x1f\\x5c\\xcf\\xac\"\n\"\\x7d\\xb6\\x1b\\xbb\\xb8\\xa0\\xb0\\xab\\x1f\\xa0\\xa3\\xa1\\xb7\\x9d\\x1a\\x8e\\x89\\x8c\\x87\\x85\\x84\\x86\\x80\\x81\\x1e\\x69\\x6c\\x67\\x7c\\x5d\\x1b\\x5a\"\n\"\\x68\\x93\\xa6\\x4a\\x1f\\xa1\\xf7\\x01\\x8e\\x9f\\xac\\x1a\\x8b\\x8b\\x98\\x8a\\x9a\\x1e\\x8a\\xa6\\x05\\xf7\\x0e\\x06\\xfb\\x93\\xfb\\x7e\\x15\\xa4\\xa7\\x81\"\n\"\\x83\\x83\\x85\\x7e\\x80\\x7f\\x1f\\x7a\\x7e\\x7e\\x85\\x77\\x1b\\x73\\x7a\\x9a\\xa1\\xa3\\x9c\\x98\\xad\\x1f\\x0e\\xfb\\xe8\\xb4\\x0a\\x84\\xf7\\xf7\\x9e\\x15\"\n\"\\x4c\\x8c\\x7b\\x9c\\x8a\\xd3\\x08\\xd4\\xf7\\x41\\xb3\\xfb\\x41\\xd7\\x07\\x92\\x99\\x05\\xf7\\x3a\\xb3\\xfb\\x26\\x06\\xe7\\xf7\\x4c\\xb0\\xd0\\xa9\\xa6\\xbe\"\n\"\\x96\\x19\\x9e\\xfb\\x57\\x78\\x99\\x07\\xa9\\xa0\\x7f\\x78\\x81\\x86\\x7a\\x82\\x7a\\x1f\\xfb\\x04\\xfb\\x70\\xfb\\x0a\\xf7\\x71\\x05\\x83\\x9a\\x86\\x9c\\x98\"\n\"\\x1a\\xa0\\x9d\\x93\\xba\\x1e\\x9e\\xfb\\x87\\x78\\x07\\xb9\\x89\\x9c\\x7a\\xc2\\x28\\xea\\xfb\\x41\\x18\\xfb\\x24\\x63\\xf7\\x3b\\x06\\x92\\x7d\\x05\\x3f\\xfb\"\n\"\\x42\\x63\\xf7\\x42\\x4d\\x07\\x8a\\x37\\x80\\x7d\\x48\\x88\\x08\\x78\\xf7\\x88\\x07\\x0e\\x84\\xf8\\x44\\xf8\\x2b\\x15\\xfb\\x12\\x06\\x8e\\xac\\x8e\\xa5\\x8d\"\n\"\\x9c\\x90\\xc2\\x98\\xba\\x9e\\xae\\x08\\x9c\\x94\\x9d\\x95\\xa0\\x1b\\x97\\x93\\x86\\x84\\x88\\x89\\x86\\x88\\x85\\x1f\\x86\\x82\\x88\\x82\\x85\\x1a\\x79\\x9d\"\n\"\\x7b\\x9f\\xa4\\xa0\\x9f\\xa4\\xb1\\x65\\xa9\\x5c\\x61\\x60\\x74\\x66\\x71\\x1e\\x65\\x52\\x7a\\x5b\\x7b\\x23\\x08\\x20\\x06\\x81\\x6c\\x05\\xf7\\x03\\x06\\x89\"\n\"\\x7c\\x80\\x48\\x8a\\x87\\x85\\x53\\x86\\x56\\x19\\x7c\\xfb\\x40\\x05\\xfb\\x09\\x81\\x70\\x52\\x5d\\x1b\\x7f\\x83\\x90\\x93\\x8e\\x8d\\x8f\\x8f\\x92\\x1f\\x91\"\n\"\\x95\\x8e\\x93\\x94\\x1a\\xa1\\x7d\\x99\\x75\\x70\\x78\\x79\\x70\\x63\\xac\\x6e\\xba\\xc2\\xb2\\xab\\xd4\\xac\\x1e\\xaa\\xd1\\x9c\\xdb\\xa3\\xf7\\x4d\\x8d\\x9c\"\n\"\\x92\\xc4\\x92\\xbe\\x08\\xf7\\x0c\\x06\\x0e\\x84\\xf7\\xca\\xf7\\x11\\x15\\xcf\\xbb\\xbd\\xd1\\xc0\\x6c\\xc1\\x51\\xbb\\x1f\\xfb\\x1d\\xf7\\x05\\x05\\x77\\x9c\"\n\"\\x7d\\xa7\\xa5\\x1a\\xb5\\xad\\xa8\\xbe\\xae\\xa6\\x7d\\x79\\x88\\x89\\x88\\x85\\x86\\x1e\\x7b\\x80\\x81\\x7a\\x7b\\x1a\\x72\\x9e\\x79\\xa7\\xab\\x9e\\x9f\\xac\"\n\"\\xc3\\x54\\xb5\\x42\\x38\\x53\\x5a\\x42\\x55\\x9e\\x6d\\xdc\\x49\\x1e\\x8c\\x81\\x82\\x8b\\x85\\x1b\\x49\\x5a\\x58\\x47\\x41\\xbc\\x4c\\xf7\\x0e\\x37\\x1f\\xcc\"\n\"\\x5f\\xa3\\x6b\\x64\\x1a\\x5c\\x69\\x6d\\x56\\x66\\x69\\x9c\\x9d\\x8f\\x8f\\x90\\x92\\x91\\x1e\\x9a\\x98\\x93\\x99\\x99\\x1a\\xa3\\x76\\x9d\\x70\\x6c\\x74\\x74\"\n\"\\x6c\\x53\\xc7\\x5f\\xd9\\xe2\\xc4\\xbe\\xd7\\xbf\\x78\\xa8\\x40\\xcc\\x1e\\x26\\xf7\\x96\\x15\\xaa\\xbf\\x6c\\x5c\\xba\\x1f\\xad\\x69\\x9e\\x6a\\x71\\x1a\\x68\"\n\"\\x6b\\x6c\\x66\\x65\\x66\\xa2\\xc7\\x4e\\x1e\\x69\\xad\\x7f\\xa2\\xa9\\x1a\\xb2\\xa7\\xa7\\xb3\\x1e\\x0e\\x84\\x75\\xf7\\x00\\x15\\xbd\\x59\\xeb\\xed\\x05\\x6e\"\n\"\\xb5\\xb1\\x7f\\xba\\x1b\\xba\\xb1\\x98\\xa7\\xb3\\x1f\\xed\\x29\\xbb\\xbd\\x2b\\xeb\\x05\\xa8\\xb8\\x95\\xad\\xbb\\x1a\\xbc\\x81\\xac\\x6e\\xb6\\x1e\\xeb\\xed\"\n\"\\x5b\\xbb\\x29\\x2b\\x05\\xa6\\x64\\x66\\x97\\x5a\\x1b\\x5b\\x68\\x80\\x6f\\x5f\\x1f\\x2b\\xeb\\x59\\x5b\\xed\\x29\\x05\\x6e\\x63\\x7f\\x65\\x5b\\x1a\\x5b\\x97\"\n\"\\x67\\xa8\\x61\\x1e\\xf7\\x45\\xf7\\xa9\\x15\\xda\\xcc\\x47\\x39\\x36\\x4a\\x48\\x3a\\x39\\x49\\xcf\\xde\\xe0\\xcd\\xcd\\xdf\\x1f\\x0e\\xfb\\xdb\\xf0\\xf8\\x43\"\n\"\\x15\\x8e\\x9d\\x8d\\x98\\x8d\\x94\\x08\\x9b\\xd7\\x94\\xc7\\xa8\\x1a\\xa1\\x78\\x9d\\x74\\x73\\x78\\x79\\x74\\x7a\\x99\\x31\\x9d\\x2a\\x1e\\x0e\\x4c\\xf7\\x2f\"\n\"\\xf9\\x38\\x15\\x47\\x6a\\x5f\\x9c\\x1d\\xf7\\x73\\x9e\\x15\\x47\\x6a\\x5f\\x4e\\x4f\\x1a\\x58\\xae\\x65\\xb8\\xae\\xa3\\xa2\\xad\\xab\\x75\\x9e\\x66\\x84\\x84\"\n\"\\x8a\\x8a\\x85\\x1e\\x89\\x86\\x8a\\x8b\\x8a\\x1b\\x83\\x85\\x91\\x93\\xac\\xa6\\xae\\xc2\\xb1\\x1f\\x0e\\x84\\xb5\\xf7\\x72\\x52\\x1d\\x89\\x8a\\x85\\x85\\x80\"\n\"\\x82\\x08\\xf7\\x13\\x50\\x52\\x1d\\x88\\x89\\x18\\x86\\x86\\x86\\x86\\x85\\x87\\x08\\x0e\\xfb\\x42\\xca\\xf7\\x72\\x52\\x1d\\x89\\x8a\\x85\\x85\\x80\\x82\\x08\"\n\"\\x0e\\xfb\\x42\\xf7\\xa2\\xf7\\x72\\x15\\x4a\\xc6\\x85\\x8f\\x86\\x90\\x86\\x90\\x19\\x88\\x8d\\x82\\x93\\x81\\x94\\x86\\x8f\\x19\\x6e\\xa5\\x6c\\xa9\\x8a\\x8e\"\n\"\\x08\\xa0\\x7a\\x77\\x9d\\x85\\x1b\\x86\\x86\\x86\\x86\\x7e\\xa4\\x63\\xa8\\x67\\x1f\\xac\\x64\\x9c\\x76\\x4e\\x0a\\x0e\\xbc\\xaa\\xf8\\x35\\x15\\xcf\\xfb\\xd7\"\n\"\\x06\\xa3\\x1d\\x85\\x83\\x4d\\xeb\\x1d\\x98\\x8a\\xcc\\x08\\xf7\\x9a\\x07\\x97\\x8b\\x9a\\x8c\\x9e\\x1e\\x8c\\xbf\\x87\\x8e\\x05\\x84\\x63\\x6b\\x88\\x62\\x1b\"\n\"\\xfb\\x31\\xb6\\x06\\x8a\\xb0\\x8f\\xb2\\x90\\x9b\\x08\\xb6\\x98\\xb3\\xa9\\xb8\\x1b\\xa7\\x9d\\x7f\\x68\\xa4\\x1f\\x70\\x9e\\x98\\x81\\x9c\\x1b\\xa0\\x9a\\x9b\"\n\"\\xa2\\xb6\\x59\\xa6\\x3e\\x3f\\x51\\x71\\x5a\\x67\\x1f\\x6d\\x62\\x80\\x66\\x85\\x3b\\x08\\x46\\x06\\x0e\\xbc\\xab\\xf8\\x36\\x15\\xd0\\xfb\\xcd\\x06\\xad\\x1d\"\n\"\\x7b\\x58\\x88\\x78\\x0a\\x44\\x06\\xf7\\xe9\\xb4\\x1d\\x8c\\x91\\x90\\x1f\\x0e\\x84\\xf7\\x8e\\x04\\x5a\\xf8\\x88\\xbc\\x07\\x0e\\x84\\xf7\\x9a\\xfb\\x29\\x15\"\n\"\\x8c\\xf7\\x0f\\x8d\\xf7\\x12\\x98\\xeb\\xa4\\xc4\\x19\\x6e\\xaa\\x7e\\xc3\\xed\\x1a\\xad\\x88\\x9b\\x88\\xb4\\x7b\\x08\\x84\\x9f\\x9f\\x86\\x97\\x1b\\xa1\\x9b\"\n\"\\x9d\\xa4\\xa4\\x7a\\x9e\\x75\\x7f\\x79\\x86\\x83\\x78\\x1f\\x61\\x7a\\x7c\\x87\\x67\\x8a\\x08\\xc0\\x8f\\xa4\\x75\\x0a\\x08\\x28\\x7e\\x54\\x6e\\x6c\\x1e\\xa1\"\n\"\\x54\\x9d\\xfb\\x0c\\x8d\\x23\\x8c\\xfb\\x0f\\x18\\x0e\\x84\\xf7\\x99\\xf8\\x5c\\x15\\xc1\\x8f\\xa3\\x75\\x0a\\x8c\\x34\\x7f\\x57\\x6d\\x64\\xa8\\x70\\x97\\x59\"\n\"\\x8a\\x29\\x69\\x8e\\x7c\\x8e\\x61\\x9b\\x08\\x92\\x77\\x77\\x90\\x80\\x1b\\x74\\x7b\\x7a\\x71\\x71\\x9b\\x79\\xa3\\x95\\x9e\\x90\\x93\\x9e\\x1f\\xb5\\x9c\\x9a\"\n\"\\x8f\\xaf\\x8c\\x08\\x56\\x87\\x72\\x77\\x59\\x1e\\x84\\x78\\x86\\x7a\\x81\\x1a\\x73\\xa1\\x75\\xa3\\xa4\\xa1\\xa1\\xa3\\x95\\x86\\x9c\\x84\\x9e\\x1e\\x77\\xbd\"\n\"\\x87\\xa4\\xc0\\x1a\\xaf\\x8a\\x9a\\x87\\xb5\\x7a\\x08\\x83\\x9e\\x9e\\x86\\x95\\x1b\\xa2\\x9c\\x9d\\xa4\\xa6\\x7b\\x9c\\x74\\x7f\\x78\\x86\\x84\\x77\\x1f\\x61\"\n\"\\x7b\\x7c\\x88\\x69\\x88\\x08\\xec\\x95\\xb7\\xaa\\xad\\x1e\\x6c\\xb0\\x81\\xb7\\x8c\\xec\\xad\\x88\\x9b\\x88\\xb4\\x7b\\x08\\x84\\x9f\\x9f\\x86\\x97\\x1b\\xa1\"\n\"\\x9b\\x9d\\xa3\\xa5\\x7b\\x9e\\x74\\x80\\x79\\x86\\x83\\x77\\x1f\\x61\\x7a\\x7c\\x87\\x67\\x8a\\x08\\x0e\\xfb\\x95\\xf7\\x11\\xf7\\xca\\x2b\\x0a\\x55\\xf7\\x82\"\n\"\\xf9\\x14\\x15\\xc5\\xfd\\xae\\xf7\\x2e\\xa1\\x06\\x5e\\x0a\\xf8\\xe7\\x07\\x8c\\xd4\\x95\\x95\\xd8\\x92\\x08\\x9e\\xfb\\x9b\\x07\\xfb\\x27\\x4d\\x54\\xfb\\x16\"\n\"\\x3a\\xa2\\x52\\xba\\x6b\\x1f\\xac\\x73\\xa7\\x84\\xca\\x88\\x08\\xfb\\xc4\\x46\\x0a\\x75\\xf7\\x2e\\x07\\x49\\xf8\\x55\\x15\\x35\\x94\\x6b\\xbe\\xf7\\x11\\x1a\"\n\"\\xd3\\x99\\xb8\\xa8\\xa0\\x1e\\x9d\\x98\\x9c\\x91\\xb3\\x8e\\x08\\x0e\\xfb\\x31\\xf7\\x42\\xf8\\x63\\x15\\x41\\x50\\x50\\x41\\x3f\\xc6\\x50\\xd6\\xd4\\xc8\\xc7\"\n\"\\xd3\\xd8\\x50\\xc6\\x3f\\x1f\\x0e\\xfb\\x42\\xf5\\xfb\\x21\\x25\\x0a\\x4c\\xd3\\xfb\\x21\\x15\\xcf\\xac\\xb7\\x8f\\x0a\\x67\\x55\\x65\\x1f\\xf7\\x85\\x78\\x15\"\n\"\\xcf\\xac\\xb7\\x99\\x1d\\x4c\\xc4\\xf8\\x45\\x4d\\x0a\\xf7\\x85\\x78\\x15\\xce\\xac\\xb8\\xc8\\xc7\\x1a\\xbe\\x68\\xb1\\x5e\\x68\\x73\\x74\\x69\\x6b\\xa1\\x78\"\n\"\\xb1\\x40\\x0a\\x6f\\x67\\x55\\x66\\x1f\\x0e\\x84\\xf8\\x5e\\xf7\\x72\\x15\\x4a\\xc6\\x80\\x94\\x85\\x91\\x89\\x8c\\x19\\x81\\x94\\x83\\x92\\x85\\x90\\x6e\\xa5\"\n\"\\x6c\\xa9\\x8a\\x8e\\x08\\xa0\\x7b\\x76\\x9d\\x85\\x1b\\x86\\x86\\x86\\x86\\x7e\\xa3\\x63\\xa9\\x67\\x1f\\xab\\x65\\x9d\\x75\\x4e\\x0a\\xfb\\x35\\xa6\\x15\\x4a\"\n\"\\xc6\\x85\\x8f\\x86\\x90\\x86\\x90\\x19\\x88\\x8d\\x82\\x93\\x81\\x94\\x86\\x8f\\x19\\x6e\\xa5\\x6c\\xa9\\x8a\\x8e\\x08\\xa0\\x7a\\x77\\x9d\\x85\\x1b\\x86\\x86\"\n\"\\x86\\x86\\x7e\\xa4\\x63\\xa8\\x67\\x1f\\xac\\x64\\x9c\\x76\\x4e\\x0a\\x0e\\xf8\\x81\\xf7\\x3a\\xef\\x15\\x2c\\x1d\\xf7\\xe1\\x16\\x6d\\x72\\x72\\x6b\\x6e\\xa4\"\n\"\\x72\\xa8\\xaa\\xa5\\xa3\\xa9\\xaa\\x71\\xa5\\x6d\\x1f\\xf7\\xe1\\x16\\x6c\\x73\\x72\\x6b\\x6e\\xa4\\x72\\xa8\\xaa\\xa5\\xa3\\xa9\\xaa\\x72\\xa5\\x6c\\x1f\\x0e\"\n\"\\xf8\\x81\\xf8\\xcb\\xf9\\x56\\x15\\x5f\\x06\\x33\\x30\\x7c\\x82\\x51\\x1b\\x62\\x76\\x94\\xa9\\x66\\x1f\\xa1\\x70\\x7f\\x91\\x76\\x1b\\x25\\x30\\x27\\xfb\\x05\"\n\"\\x3d\\xbe\\x50\\xce\\xad\\xa7\\x98\\xa8\\xa8\\x1f\\xb9\\xb9\\xa8\\xd3\\xce\\x1a\\x9b\\x8a\\x96\\x88\\x9c\\x1e\\x80\\xab\\x9d\\x88\\xa5\\x1b\\xc0\\xaa\\x99\\xb6\"\n\"\\xb0\\x1f\\xfc\\x1e\\xfd\\x26\\x05\\xba\\x06\\xc8\\xf9\\x2f\\x15\\x9c\\x7a\\x98\\x81\\x99\\x84\\x08\\xa0\\x81\\x8f\\x84\\x6e\\x1a\\xfb\\x07\\x4d\\x26\\x45\\x69\"\n\"\\x74\\xa7\\xb5\\xc4\\x9d\\xc8\\xac\\xbd\\x1e\\x9e\\xa8\\x96\\x95\\xb2\\x9e\\x08\\xf7\\xe6\\xfb\\xd3\\x15\\x2b\\x2e\\x23\\x20\\x3d\\xc0\\x4f\\xcf\\xe1\\xd9\\xf7\"\n\"\\x03\\xf7\\x0d\\xd5\\x68\\xb6\\x4e\\x1f\\x97\\x6f\\x15\\xaf\\xa4\\x67\\x57\\x22\\x49\\x26\\x47\\x6b\\x73\\xa8\\xb3\\xce\\xad\\xe3\\xb7\\xba\\x1f\\x99\\x98\\x9e\"\n\"\\x94\\x9e\\x1b\\xf7\\xf2\\xa7\\x15\\x2b\\x2e\\x23\\x21\\x3c\\xc0\\x4f\\xcf\\xe1\\xd9\\xf7\\x03\\xf7\\x0d\\xd5\\x68\\xb6\\x4e\\x1f\\x96\\x6f\\x15\\xb0\\xa4\\x67\"\n\"\\x57\\x22\\x49\\x26\\x47\\x6a\\x74\\xa9\\xb4\\xc2\\xa9\\xe2\\xad\\xb5\\x1f\\xa6\\xa0\\x9f\\x97\\xa2\\x1b\\x0e\\x4c\\xf7\\x5c\\xf7\\xba\\x15\\x7d\\x3a\\x79\\x68\"\n\"\\x4c\\x41\\x08\\x58\\x4d\\x73\\x55\\x58\\x1a\\x65\\x98\\x67\\xa2\\x74\\x1e\\x68\\xad\\xc6\\x74\\xc2\\x1b\\xe7\\xd1\\xc9\\xde\\xb4\\x7a\\xa0\\x6c\\x72\\x7b\\x7b\"\n\"\\x72\\x7d\\x91\\x7f\\x9a\\x7a\\x1f\\x97\\x7d\\x90\\x83\\x82\\x1a\\x6b\\x5d\\x6d\\x5b\\x4e\\x5b\\xc0\\xce\\xb9\\x98\\xc2\\xa3\\xc2\\x1e\\xa7\\xcb\\x9e\\xbb\\x95\"\n\"\\xbd\\x8c\\xb7\\x19\\x82\\xf7\\x40\\x15\\x6b\\x75\\x76\\x6e\\x6b\\xa2\\x74\\xa9\\xaa\\xa3\\xa3\\xa9\\xa8\\x74\\xa1\\x6c\\x1f\\x0e\\xfb\\x42\\xf7\\x86\\xf8\\x8f\"\n\"\\x29\\x0a\\xfb\\x42\\xf7\\x19\\xf8\\x8f\\x3a\\x1d\\xfb\\x42\\xf7\\xd6\\xf8\\x8f\\x20\\x1d\\xfb\\x42\\xf7\\xc2\\xf9\\x12\\x4b\\x0a\\xfb\\x42\\x96\\xf8\\xed\\x23\"\n\"\\x1d\\xfb\\x42\\xf7\\xaa\\xf9\\x2c\\x15\\x3f\\x6f\\x72\\x39\\x1d\\xfb\\x42\\xf7\\x3a\\xf9\\x03\\x43\\x1d\\x0e\\xfb\\x42\\xcd\\xf9\\x03\\x41\\x1d\\xfb\\x42\\xf7\"\n\"\\x3a\\xf9\\x5b\\x42\\x1d\\xfb\\x42\\xed\\x28\\x15\\x92\\x86\\x05\\x8e\\x93\\x94\\x8c\\x96\\x9b\\x1d\\xa4\\xcc\\x05\\x68\\x06\\x0e\\xfb\\x42\\xf7\\x55\\xf8\\x8f\"\n\"\\x15\\x4a\\x1d\\x9b\\x1a\\x9f\\x7e\\x97\\x76\\x7b\\x44\\x0a\\xfb\\x08\\x16\\x5f\\x1d\\xfb\\x42\\xf7\\x79\\x42\\x15\\x70\\x6c\\x78\\x82\\x76\\x1b\\x75\\x7b\\x9b\"\n\"\\xa3\\xa2\\x98\\xa0\\xaa\\xa4\\x1f\\x5d\\x06\\x65\\x6d\\x7b\\x70\\x6a\\x1a\\x61\\xaa\\x6a\\xb5\\xb4\\xad\\xa2\\xc0\\xb0\\x1e\\x0e\\xfb\\x42\\xf7\\xd6\\xf9\\x36\"\n\"\\x20\\x0a\\xf8\\x81\\xf0\\x1d\\xf8\\x12\\x6e\\x1d\\x0e\\xfb\\x7b\\xf7\\xa2\\xf8\\x4e\\x15\\x82\\x81\\x83\\x88\\x81\\x1b\\x80\\x89\\x91\\xa8\\x1f\\xf7\\x07\\x07\"\n\"\\xcb\\x68\\xab\\x45\\x4c\\x5e\\x6f\\x64\\x79\\x99\\x7e\\x9d\\x9c\\x99\\x97\\x98\\x8d\\x8b\\x8e\\x8a\\x8e\\x1e\\x8a\\x90\\x8a\\x90\\x8f\\x1a\\x97\\xa1\\x96\\xa2\"\n\"\\xa2\\x98\\x7c\\x70\\x1e\\x6d\\x07\\xfb\\x14\\x5c\\x72\\x78\\x5b\\x1a\\x63\\xa9\\x6f\\xb4\\xaa\\xa5\\x98\\xaa\\xad\\x1e\\x6b\\x91\\x97\\x7f\\xa6\\x1b\\xa2\\x97\"\n\"\\x91\\xa3\\xa3\\x1f\\xfb\\x04\\xbd\\x15\\x83\\x87\\x84\\x84\\x84\\x1e\\x83\\x7a\\x7f\\x88\\x7e\\x1b\\x76\\x7a\\x9f\\xa3\\xa5\\x9f\\x9a\\xd2\\xa4\\x1f\\x0e\\xf3\"\n\"\\xee\\xf7\\xd9\\x15\\x34\\x59\\x05\\x5a\\x07\\xe2\\xbd\\x05\\xfb\\x3b\\xa0\\x1d\\xf7\\x93\\x07\\xf7\\x2f\\xe4\\x05\\xbc\\x07\\xfb\\x2f\\x32\\x05\\xf7\\x3d\\x07\"\n\"\\x8d\\xd4\\x98\\x98\\xd9\\x8f\\x08\\x9e\\xfb\\xae\\x78\\x07\\xd4\\x86\\x97\\x7e\\x8d\\x43\\x08\\x0e\\x64\\x0a\\x0e\\xf8\\x12\\xf9\\xda\\xf8\\x9d\\x15\\xf7\\x21\"\n\"\\xfb\\xda\\x07\\x75\\x70\\x8c\\x8d\\x5e\\x1f\\x80\\x06\\x8e\\x5b\\x8a\\x8b\\x7c\\x1b\\x38\\x40\\x71\\x5a\\x54\\x1f\\x4c\\x53\\x66\\x27\\xfb\\x07\\x1a\\xfb\\x00\"\n\"\\xa9\\x37\\xc7\\x50\\x1e\\x59\\xbd\\xcf\\x70\\xd4\\x1b\\x9a\\x9f\\x8c\\x8c\\xa3\\x1f\\x9a\\x06\\x9a\\x8c\\x05\\x8e\\xb5\\x93\\x8b\\xb4\\x1b\\xf7\\xf2\\x06\\xb7\"\n\"\\xf7\\x3c\\x05\\x73\\x06\\x58\\x2c\\x67\\x6c\\x4c\\x89\\xfb\\x10\\x89\\x18\\x5c\\x8c\\x84\\x91\\x89\\xb2\\x08\\xf7\\x89\\x07\\xf7\\x1e\\x8c\\xd1\\x89\\xa0\\x76\"\n\"\\x92\\x3e\\x19\\xa0\\xf7\\x7e\\x76\\x06\\x84\\x3b\\x78\\x7d\\x21\\x88\\x23\\x8a\\x18\\xf7\\x80\\x07\\xa0\\x90\\x8c\\xc7\\x8d\\x1e\\xbe\\x06\\xf7\\x16\\xa5\\x7b\"\n\"\\x32\\x97\\x1f\\xfc\\x14\\xfc\\x1a\\x15\\x44\\x6e\\x6e\\x44\\xfb\\x0f\\x49\\xf2\\xf7\\x53\\xf7\\x58\\xd0\\xf7\\x03\\xf7\\x0d\\xd0\\xa9\\x6b\\x42\\x1e\\x0e\\xfb\"\n\"\\x59\\xf7\\x33\\xf9\\x38\\x15\\x2f\\x4e\\x52\\x35\\x3a\\xc8\\x51\\xdf\\xe3\\xcc\\xcb\\xdf\\xda\\x4f\\xc2\\x36\\x1f\\x82\\x6a\\x15\\xbb\\xac\\x56\\x3f\\x53\\x72\"\n\"\\x6c\\x5d\\x72\\x78\\x97\\xa1\\x7f\\x1f\\x7b\\xa7\\x82\\xb4\\xb2\\x1a\\xb8\\xa7\\xa8\\xb6\\x1e\\x0e\\xf7\\x34\\xf9\\x00\\xf7\\x2e\\x15\\x44\\x5b\\x64\\x71\\x52\"\n\"\\x1b\\x62\\x65\\x9f\\xa9\\x7b\\x1f\\x75\\xb2\\x86\\xaa\\xef\\x1a\\xf7\\x9a\\x06\\xf7\\x15\\x7f\\x5c\\xc1\\x26\\x1b\\x5c\\x70\\x81\\x68\\x5e\\x1f\\xad\\x64\\x6e\"\n\"\\x96\\x59\\x1b\\x31\\x46\\x5c\\x4e\\x6d\\x9c\\x79\\xa6\\xa7\\x9a\\x9c\\xaa\\x8f\\x8b\\x92\\x8a\\x91\\x1f\\x8a\\x96\\x05\\x91\\x07\\xac\\x8d\\xa2\\x9c\\xb6\\x1b\"\n\"\\xa3\\x9e\\x83\\x7d\\x92\\x1f\\x92\\x7b\\x90\\x6c\\x74\\x1a\\x89\\x4c\\x35\\x67\\x05\\x20\\x5f\\x61\\x62\\x4f\\x1a\\x4a\\xbb\\x5e\\xcf\\xbd\\xad\\x9b\\xc4\\xcf\"\n\"\\x1e\\x57\\xad\\xb0\\x76\\xc5\\x1b\\xb9\\xb5\\x9b\\xab\\xae\\x1f\\xa7\\xa3\\x9d\\xa7\\xa7\\xc6\\x08\\xfb\\xfa\\xbf\\x15\\x8c\\x66\\x91\\x66\\x96\\x67\\x08\\x8c\"\n\"\\x8a\\x8b\\x8a\\x8a\\x1a\\x79\\x4a\\x6b\\x67\\x66\\x6d\\xb2\\xbb\\xc7\\xa6\\xa3\\xf7\\x0d\\xb7\\x1e\\xdd\\xc1\\x15\\xe3\\x90\\xa4\\xaf\\xc4\\x1b\\xc1\\xa2\\x66\"\n\"\\x34\\x8d\\x1f\\x0e\\xfb\\x79\\x27\\x0a\\x0e\\xfb\\x79\\xed\\x8f\\x1d\\x80\\x44\\x7a\\x43\\x0a\\x0e\\x84\\x68\\x0a\\xa1\\x81\\x71\\xa6\\x1e\\x0e\\xf9\\x3b\\xf7\"\n\"\\x25\\x15\\x4b\\x5c\\x68\\x73\\x5b\\x1b\\x66\\x68\\x9f\\xa9\\x79\\x1f\\x71\\xb9\\x82\\xb0\\x87\\xe2\\x08\\xf7\\x92\\x06\\x88\\xc9\\x83\\xa7\\x74\\xaa\\x08\\xb2\"\n\"\\x6f\\x5c\\xa2\\x58\\x1b\\x54\\x69\\x77\\x53\\x62\\x1f\\xc3\\x59\\x63\\x9f\\x4d\\x1b\\x59\\x60\\x7a\\x6c\\x69\\x1f\\x5d\\x60\\x6e\\x40\\x3f\\x1a\\xfb\\x19\\xe0\"\n\"\\x2c\\xf7\\x0d\\xcf\\xb4\\xa5\\xd0\\xb1\\x1e\\x47\\xa9\\xaf\\x70\\xc9\\x1b\\xd9\\xbb\\xb3\\xf7\\x01\\xc0\\x1f\\xfc\\x61\\xf7\\xb8\\x15\\xd4\\xb4\\x37\\xfb\\x28\"\n\"\\xfb\\x0c\\x68\\x4c\\x47\\x3c\\x62\\xe1\\xf7\\x3d\\xbf\\x99\\xc1\\x9f\\xa0\\x1f\\xa1\\xa1\\xa3\\x96\\xa8\\x1b\\xf7\\x52\\xfb\\x10\\x15\\xde\\x8c\\xa6\\xb4\\xc0\"\n\"\\x1b\\xb9\\xac\\x62\\x53\\x1f\\x70\\x07\\x0e\\x84\\x97\\x16\\xf7\\x25\\xf8\\xb9\\x06\\xcc\\xad\\xb5\\xbf\\xc4\\xad\\x57\\x33\\x3c\\x6d\\x62\\x4a\\x84\\x1e\\x76\"\n\"\\x89\\x83\\x87\\x82\\x1a\\x80\\x94\\x86\\xa2\\x8a\\x1e\\xe3\\x88\\xb7\\x46\\xfb\\x1b\\x1a\\x36\\x75\\x5e\\x61\\x78\\x83\\x93\\xa1\\x89\\x1e\\x89\\xa1\\x05\\xa2\"\n\"\\x89\\x79\\x9c\\x75\\x1b\\x71\\x78\\x76\\x70\\x60\\xb3\\x6d\\xc4\\xf0\\xd9\\xe0\\xf7\\x02\\xc4\\x75\\xbb\\x63\\xae\\x1f\\x6b\\xa7\\x6e\\x97\\x4e\\x96\\x08\\xf6\"\n\"\\xbc\\xa9\\xac\\xd3\\x1a\\xe8\\x49\\xc6\\x23\\x47\\x58\\x71\\x58\\x6e\\x1e\\x76\\x66\\x82\\x5e\\x45\\x1a\\xfc\\x06\\x07\\x89\\x54\\x82\\x80\\x59\\x88\\x08\\x0e\"\n\"\\xfb\\x63\\xf7\\x8c\\xf7\\xba\\x15\\x5f\\x8d\\x7f\\x93\\x8a\\xa5\\x08\\xf7\\xeb\\x07\\x7d\\x8e\\xfb\\x0a\\x54\\x05\\x74\\x07\\x94\\xa4\\x99\\x8f\\x8f\\x1b\\x91\"\n\"\\x8d\\x85\\x75\\x1f\\xfb\\x95\\x07\\x8a\\x74\\x81\\x84\\x61\\x89\\x08\\x73\\xf7\\x53\\x07\\x0e\\xc4\\xa9\\xf8\\x22\\x15\\x3b\\xf8\\x3c\\xfb\\x69\\xdb\\xf7\\xb9\"\n\"\\x07\\x0e\\x84\\xf8\\x40\\xf8\\x53\\x15\\x34\\xfb\\xe1\\x06\\x63\\x73\\x64\\x75\\x5d\\x1b\\x57\\x6b\\xad\\xc4\\x1f\\xf7\\xc4\\x34\\xfc\\x1d\\x07\\x76\\x89\\x79\"\n\"\\x81\\x51\\x1e\\x84\\x63\\x86\\x60\\x76\\x1a\\x5f\\x9c\\x71\\xa8\\xa9\\x9a\\xa5\\xbe\\xa7\\x86\\xa6\\x7e\\xbf\\x1e\\x7f\\xbc\\x89\\x96\\x87\\xb0\\x08\\x57\\xa9\"\n\"\\xae\\x75\\xbe\\x1b\\xc1\\xb5\\xa6\\xc9\\xb3\\x1f\\x4d\\x8d\\xa1\\x70\\xbb\\x1b\\xb1\\xa2\\x99\\xb6\\xab\\x1f\\x93\\x07\\x75\\x74\\x80\\x85\\x7c\\x1b\\x75\\x81\"\n\"\\x9e\\xb8\\x1f\\x0e\\xf8\\x6d\\xf7\\x82\\xf9\\x16\\x15\\xbd\\x06\\xae\\x8a\\x9f\\x77\\x97\\x5c\\x08\\x9f\\xe3\\xfb\\xed\\x33\\x9f\\x06\\x97\\xba\\x9f\\x9f\\xaf\"\n\"\\x8c\\x08\\xbc\\xfb\\xca\\x06\\x69\\x89\\x83\\xc4\\x0a\\xf7\\x3f\\xb5\\x0a\\xf8\\x3f\\x3f\\x15\\x96\\x06\\xf7\\x2e\\xf7\\xcc\\x05\\xfb\\x80\\x07\\x68\\x8a\\x84\"\n\"\\xc4\\x0a\\xf7\\x3e\\xb5\\x0a\\xf7\\x93\\x07\\xb2\\x99\\x98\\xb5\\x8e\\x1e\\x9f\\x24\\x07\\xfb\\x34\\xfb\\xc9\\xfb\\x2e\\xf7\\xc9\\x05\\xfb\\x0d\\x77\\x06\\xa9\"\n\"\\x8a\\xa5\\x78\\x98\\x6d\\x08\\xfb\\x8d\\x07\\x8a\\x5a\\x82\\x7f\\x61\\x87\\x08\\x77\\xf7\\x17\\x9f\\x07\\x60\\x8f\\x82\\x97\\x8a\\xbc\\x08\\xf7\\x73\\x07\\x0e\"\n\"\\x73\\x1d\\xf7\\x87\\xf8\\xec\\xf9\\x38\\x2c\\x0a\\xd3\\x80\\x0a\\xf8\\xa0\\xfb\\x4d\\xcc\\x1d\\xc7\\xa2\\xb4\\xbe\\x1d\\xa6\\xa1\\xb0\\x1b\\xb3\\xac\\x69\\x61\"\n\"\\x6d\\x6c\\x57\\x59\\x54\\xcc\\x0a\\xc4\\xa9\\x16\\xf8\\x8c\\xcd\\xfc\\x8c\\x06\\xf7\\x6f\\xf7\\xae\\x15\\xfb\\x6f\\x49\\xf7\\x6f\\xfb\\x34\\xcd\\xf7\\x34\\xe7\"\n\"\\x1d\\xbc\\xf7\\xbc\\x9e\\x15\\x3c\\x8d\\x7d\\x99\\x8a\\xd5\\x08\\xbf\\x07\\x89\\xa5\\x9c\\x8a\\xa5\\x1b\\xda\\xc0\\x95\\xa3\\xb6\\x1f\\xc6\\xab\\xb0\\xc8\\xcd\"\n\"\\x1a\\xf7\\x03\\x27\\xd1\\xfb\\x34\\x1e\\x3b\\x06\\x8a\\xe6\\x95\\x98\\xdd\\x92\\x08\\x9e\\xfb\\xa9\\x78\\x07\\xd5\\x83\\x94\\x48\\x1d\\x84\\x82\\x3f\\x84\\x08\"\n\"\\x78\\xf7\\xac\\x07\\x2d\\xf8\\x61\\x15\\xa5\\x91\\x92\\xa5\\xf7\\x1e\\xc8\\x5d\\x24\\x2a\\x50\\x59\\xfb\\x07\\x76\\x7d\\x8c\\x8d\\x75\\x1e\\x0e\\xf7\\x87\\x7e\"\n\"\\x0a\\xb4\\x80\\x0a\\x0e\\xc4\\xee\\x1d\\xf7\\x90\\xf7\\xbc\\x15\\x2c\\x1d\\xfc\\x33\\x04\\x2c\\x1d\\x0e\\xfb\\xc7\\xce\\xfb\\x2c\\x15\\xcd\\xf7\\xdb\\x49\\x06\"\n\"\\xf7\\x1d\\x04\\xcd\\xf7\\xdb\\x49\\x06\\x0e\\x20\\xf7\\x5c\\xf9\\x38\\x15\\x3b\\x4c\\x4c\\x3b\\x3c\\xca\\x4b\\xd9\\xdc\\xcb\\xc9\\xdb\\xdc\\x4d\\xca\\x3a\\x1f\"\n\"\\x69\\x04\\xc4\\xba\\x59\\x50\\x4f\\x5c\\x5a\\x51\\x53\\x5c\\xbd\\xc6\\xc7\\xba\\xbc\\xc4\\x1f\\x0e\\x84\\x9f\\x1d\\x54\\x5f\\x73\\x55\\x5e\\x1f\\xf7\\xbe\\x07\"\n\"\\x86\\x8e\\x5c\\x7b\\x70\\x82\\x44\\x78\\x19\\x7b\\x07\\x8c\\x91\\x8e\\x8b\\x93\\x1b\\xb3\\x94\\x82\\x61\\x1f\\xfd\\x54\\x07\\x56\\x80\\x81\\x50\\x86\\x1e\\xf7\"\n\"\\x2e\\xf8\\xa9\\xa3\\x0a\\xf7\\x87\\x7e\\x0a\\x2e\\xf8\\x6e\\x15\\xa2\\x8e\\x96\\x8c\\xa5\\x84\\x9d\\x1d\\xd9\\xbf\\x6e\\xb1\\x52\\xa2\\x1f\\xb6\\xaa\\x9c\\xa2\"\n\"\\xa7\\x1a\\xba\\x5c\\xaf\\x4e\\x4d\\x64\\x70\\x47\\x68\\x1e\\xa4\\x79\\x05\\xb7\\xaa\\x9f\\x98\\xaf\\x1b\\xae\\xa0\\x78\\x6d\\x66\\x71\\x75\\x45\\x74\\x1f\\x0e\"\n\"\\xfb\\x63\\xf7\\xbc\\xf7\\xf7\\xcc\\x1d\\xc8\\xa2\\xb3\\xbe\\x1d\\xa5\\xa1\\xb1\\x1b\\xb3\\xac\\x69\\x61\\x6d\\x6c\\x56\\x59\\x55\\xcc\\x0a\\xf7\\x91\\xf7\\x6f\"\n\"\\xf8\\x8d\\x15\\xac\\x88\\x8c\\x8a\\x93\\x87\\x08\\x90\\x88\\x8d\\x83\\x6d\\x1a\\xfb\\x85\\x07\\x6d\\x89\\x84\\x86\\x88\\x1e\\x83\\x87\\x88\\x8a\\x6c\\x88\\x08\"\n\"\\x7c\\xf7\\x36\\x9a\\x07\\x6c\\x8e\\x88\\x8c\\x83\\x8f\\x08\\x86\\x8e\\x89\\x92\\xa9\\x1a\\xee\\xbb\\x07\\xb0\\x53\\x8f\\x84\\x96\\x77\\xa8\\x57\\xa5\\x6d\\x99\"\n\"\\x8e\\x08\\xcb\\x93\\x06\\x73\\x9f\\x73\\xa5\\x6f\\xb2\\x52\\xda\\x18\\xbf\\xa0\\xa6\\xae\\xbb\\x1a\\xc3\\x5f\\xaf\\x44\\x1e\\xfb\\x45\\x06\\xf7\\x05\\x78\\x15\"\n\"\\xb4\\x06\\xba\\xa3\\x70\\x57\\x52\\x72\\x6b\\x5f\\x1f\\x60\\x06\\xbc\\xf7\\xeb\\x15\\xfb\\x53\\xfb\\x2c\\xfb\\x2d\\xfb\\x55\\xfb\\x54\\xf7\\x2b\\xfb\\x2c\\xf7\"\n\"\\x54\\xf7\\x51\\xf7\\x2c\\xf7\\x2c\\xf7\\x4f\\xf7\\x5a\\xfb\\x28\\xf7\\x2d\\xfb\\x55\\x1f\\x61\\x04\\xf7\\x33\\xf7\\x13\\xfb\\x1d\\xfb\\x3f\\xfb\\x34\\xfb\\x18\"\n\"\\xfb\\x1e\\xfb\\x2e\\xfb\\x31\\xfb\\x17\\xf7\\x1d\\xf7\\x39\\xf7\\x3a\\xf7\\x17\\xf7\\x1e\\xf7\\x31\\x1f\\x0e\\xc4\\xee\\x1d\\x0e\\x84\\xf7\\xa2\\xf8\\xd3\\x15\"\n\"\\xc6\\x4f\\xa2\\x62\\x9a\\x41\\x08\\xba\\x58\\x70\\x98\\x5b\\x1b\\xfb\\x0c\\x2f\\x24\\xfb\\x1a\\xfb\\x19\\xe8\\x27\\xf7\\x11\\xc0\\xb9\\x9d\\xae\\xaf\\x1f\\xc2\"\n\"\\xbf\\xad\\xe9\\xeb\\x1a\\xd1\\x7b\\xd3\\x6c\\xca\\x1e\\x75\\xb8\\x79\\xa3\\x58\\xbc\\xe6\\xbb\\x18\\x6a\\xa9\\x2c\\x59\\x58\\xa9\\x68\\x96\\x49\\x91\\x19\\x61\"\n\"\\x74\\xc0\\x82\\xaa\\x7e\\xbc\\x69\\x19\\xfb\\x0d\\x4b\\xac\\x6d\\x05\\xe5\\x3d\\x15\\xe0\\xc6\\x2c\\xfb\\x1c\\xfb\\x08\\x5f\\x48\\x3f\\x63\\x67\\xa3\\xb4\\x75\"\n\"\\x1f\\x6f\\xbf\\x7b\\xd2\\xd2\\x1a\\xe8\\xba\\xc9\\xd2\\x1e\\x0e\\xc4\\xf7\\x7e\\xf7\\x91\\x15\\xfb\\x58\\xfb\\x59\\xbb\\x5b\\xf7\\x58\\xf7\\x59\\xf7\\x59\\xfb\"\n\"\\x59\\xbb\\xbb\\xfb\\x59\\xf7\\x59\\xf7\\x59\\xf7\\x58\\x5b\\xbb\\xfb\\x59\\xfb\\x59\\xfb\\x58\\xf7\\x59\\x5b\\x5b\\x05\\x0e\\xfb\\x63\\xe9\\xf8\\x60\\x15\\xa2\"\n\"\\x8e\\x96\\x8d\\xa5\\x83\\x9d\\x1d\\xda\\xbe\\x6e\\xb1\\x52\\xa2\\x1f\\xb6\\xaa\\x9c\\xa2\\xa7\\x1a\\xba\\x5c\\xaf\\x4e\\x4d\\x64\\x70\\x47\\x68\\x1e\\xa4\\x79\"\n\"\\x05\\xb7\\xaa\\x9f\\x98\\xaf\\x1b\\xae\\xa0\\x78\\x6d\\x66\\x71\\x75\\x45\\x74\\x1f\\x0e\\xf7\\x91\\xf8\\xa7\\xf7\\x8b\\x15\\x4d\\x6d\\x69\\x73\\x4f\\x1b\\x33\"\n\"\\x57\\xcc\\xf7\\x03\\xf7\\x04\\xbd\\xca\\xe4\\xca\\xaf\\x6d\\x50\\x94\\x1f\\x9c\\xd1\\x06\\x92\\x86\\x92\\x82\\x8e\\x1e\\x99\\x6a\\x63\\x93\\x6a\\x1b\\xfb\\x18\"\n\"\\x32\\x3a\\xfb\\x0c\\xfb\\x06\\xdc\\x3f\\xf7\\x0d\\xc4\\xd9\\x9c\\x98\\x8e\\x1f\\x9c\\xd7\\x05\\xfb\\x35\\xf8\\x41\\x15\\xfb\\x58\\xfb\\x2c\\xfb\\x2b\\xfb\\x57\"\n\"\\xfb\\x54\\xf7\\x2b\\xfb\\x2c\\xf7\\x54\\xf7\\x53\\xf7\\x2a\\xf7\\x2b\\xf7\\x55\\xf7\\x53\\xfb\\x2b\\xf7\\x2f\\xfb\\x4d\\x1f\\x8a\\x61\\x15\\xf7\\x2c\\xf7\\x16\"\n\"\\xfb\\x1f\\xfb\\x38\\xfb\\x39\\xfb\\x16\\xfb\\x1e\\xfb\\x30\\xfb\\x31\\xfb\\x17\\xf7\\x1d\\xf7\\x39\\xf7\\x3c\\xf7\\x17\\xf7\\x1c\\xf7\\x35\\x1f\\x0e\\x22\\x0a\"\n\"\\xfb\\x10\\xf8\\x62\\x22\\x1d\\x22\\x0a\\xcc\\xf8\\x62\\x20\\x1d\\x22\\x0a\\xfb\\x55\\xf8\\xd6\\x15\\x71\\x75\\x74\\x70\\x6f\\x9f\\x75\\xa7\\x93\\x0a\\x22\\x0a\"\n\"\\x81\\xf8\\x62\\x29\\x0a\\x22\\x0a\\x2b\\xf9\\x26\\x42\\x1d\\x22\\x0a\\xbd\\xf8\\xe5\\x8a\\x1d\\xf7\\x34\\xf7\\xe4\\x7e\\x15\\x8a\\x94\\x92\\x8b\\x93\\x1b\\xf7\"\n\"\\x05\\xef\\xba\\xdb\\xc7\\x1f\\x79\\x9d\\x05\\x44\\x42\\x48\\x6d\\x38\\x1b\\x4c\\x53\\x9f\\xb1\\x60\\x1f\\x54\\xbc\\x6c\\xe5\\xf7\\x04\\x1a\\xf7\\x49\\xe8\\xf7\"\n\"\\x08\\xf7\\x25\\xc4\\xbf\\x76\\x64\\xb3\\x1e\\xab\\x6b\\x9a\\x6f\\x9e\\x4a\\x08\\xa2\\x06\\x82\\xf7\\x75\\x05\\x76\\x06\\x76\\x85\\x7b\\x7f\\x77\\x1b\\x82\\x7c\"\n\"\\x8e\\x90\\x7c\\x1f\\x9c\\x5a\\x59\\x93\\x5c\\x1b\\x39\\x39\\x6c\\x54\\x4c\\x1f\\x45\\x4d\\x65\\x2f\\xfb\\x03\\x1a\\xfb\\x49\\xf6\\xfb\\x16\\xf7\\x3b\\x73\\x1e\"\n\"\\x66\\x32\\x98\\x1d\\x54\\x82\\x85\\x8a\\x89\\x81\\x1f\\x0e\\xf3\\x21\\x0a\\xfb\\xab\\xf9\\x63\\x22\\x1d\\xf3\\x21\\x0a\\x31\\xf9\\x63\\x20\\x1d\\xf3\\x21\\x0a\"\n\"\\xfb\\xee\\xf9\\xd7\\x15\\x71\\x75\\x74\\x70\\x6f\\xa0\\x75\\xa6\\x93\\x0a\\xf3\\x21\\x0a\\xfb\\x3f\\xf9\\x63\\x15\\xfb\\x26\\x61\\x1d\\xfb\\x42\\x28\\x1d\\xf7\"\n\"\\x07\\xf9\\x50\\x22\\x1d\\xfb\\x42\\x28\\x1d\\xf7\\xc4\\xf9\\x50\\x20\\x1d\\xfb\\x42\\x28\\x1d\\xbb\\xf9\\xc4\\x3e\\x0a\\xfb\\x42\\x28\\x1d\\xf7\\x75\\xf9\\x50\"\n\"\\xb1\\x1d\\x33\\x0a\\xfb\\x66\\xf7\\x63\\x15\\x65\\x7a\\x7e\\x7f\\x74\\x1b\\x7d\\x77\\x91\\x94\\x64\\x1d\\xab\\x96\\x9c\\x99\\xa2\\x1b\\x96\\x9a\\xb6\\x0a\\xa9\"\n\"\\xa9\\xd7\\x9f\\x1f\\x0e\\x23\\x0a\\x6a\\xb5\\x1d\\x0e\\x23\\x0a\\xf7\\x30\\xda\\x20\\x1d\\x23\\x0a\\x27\\xf7\\x57\\x3e\\x0a\\x23\\x0a\\xd7\\xda\\x29\\x0a\\x23\"\n\"\\x0a\\xf7\\x1c\\xf7\\x66\\x8a\\x1d\\xbc\\x2f\\x0a\\x68\\xf8\\x3b\\x20\\x0a\\x24\\x1d\\xfb\\xf4\\xd7\\x22\\x1d\\x24\\x1d\\xfb\\x3d\\xd7\\x20\\x1d\\x24\\x1d\\xfc\"\n\"\\x3e\\x96\\x1d\\x24\\x1d\\xfb\\x8e\\xd7\\xb1\\x1d\\x34\\x1d\\xfb\\xeb\\xd7\\x22\\x1d\\x34\\x1d\\xfc\\x3e\\xf7\\x54\\x3e\\x0a\\xf3\\x3c\\x0a\\xfb\\x1b\\xf9\\x5a\"\n\"\\x20\\x0a\\x4c\\x26\\x1d\\x29\\xf7\\x83\\x2a\\x0a\\x4c\\x26\\x1d\\xe6\\xf7\\x83\\x20\\x1d\\x4c\\x26\\x1d\\xfb\\x39\\xf7\\xf7\\x41\\x1d\\x4c\\x26\\x1d\\x96\\xf7\"\n\"\\x83\\x38\\x1d\\x4c\\x26\\x1d\\x4a\\xf8\\x5a\\x42\\x1d\\x4c\\x26\\x1d\\xd2\\xf8\\x06\\x15\\x65\\x79\\x7e\\x79\\x0a\\x4c\\xf7\\x76\\x81\\x15\\xdc\\x92\\xc0\\xb8\"\n\"\\xbf\\xf4\\x8e\\x1d\\xfb\\x0b\\xcd\\x33\\xf0\\x7e\\x1e\\x65\\x30\\x2d\\x0a\\x97\\x9b\\x1d\\x0e\\x4c\\x27\\x1d\\xfb\\x06\\xf7\\x5a\\x50\\x1d\\x2a\\x1d\\x0e\\x4c\"\n\"\\x27\\x1d\\xd6\\xf7\\x5a\\x20\\x1d\\x4c\\x27\\x1d\\xfb\\x49\\xf7\\xce\\x41\\x1d\\x4c\\x27\\x1d\\x86\\xf7\\x5a\\x38\\x1d\\xfb\\x79\\x27\\x0a\\xe5\\xf8\\x80\\x3a\"\n\"\\x1d\\xfb\\x79\\x27\\x0a\\xf7\\xab\\xf8\\x80\\x20\\x1d\\xfb\\x79\\xc6\\xf9\\x03\\x15\\x71\\x75\\x74\\x71\\x6e\\x49\\x1d\\xf7\\x33\\x16\\xa6\\x1d\\xfb\\x5e\\xfd\"\n\"\\x03\\x15\\xf7\\x81\\x9a\\x06\\x49\\x90\\x84\\x94\\x8a\\xd4\\x08\\xf7\\xf7\\x07\\xa5\\x1d\\x0e\\xfb\\x79\\x27\\x0a\\xf7\\x5b\\xf8\\x80\\x29\\x0a\\x84\\x32\\x0a\"\n\"\\xf8\\x03\\xf9\\x03\\x77\\x0a\\x84\\x24\\x0a\\x77\\xd6\\x2a\\x0a\\x84\\x24\\x0a\\xf7\\x3d\\xd6\\x20\\x1d\\x84\\x24\\x0a\\x34\\xf7\\x53\\x84\\x0a\\x84\\x24\\x0a\"\n\"\\xe4\\xd6\\x38\\x1d\\x84\\x24\\x0a\\xf7\\x28\\xf7\\x62\\x77\\x0a\\xfb\\x0a\\x65\\x0a\\xf7\\xfc\\x20\\x0a\\x84\\x25\\x1d\\xfb\\x9a\\xf8\\x6b\\x2a\\x0a\\x84\\x25\"\n\"\\x1d\\x35\\xf8\\x6b\\x20\\x1d\\x84\\x25\\x1d\\xfb\\xf1\\xf8\\xdf\\x84\\x0a\\x84\\x25\\x1d\\xfb\\x42\\xf8\\x6b\\x38\\x1d\\x84\\x33\\x1d\\xfb\\x96\\xd3\\x15\\xf7\"\n\"\\x2d\\xec\\x05\\xa1\\x2a\\x1d\\x0e\\x84\\x33\\x1d\\xfb\\xca\\xf7\\x50\\x41\\x1d\\x4c\\x34\\x0a\\x71\\xf9\\x36\\x20\\x0a\\xfb\\x24\\xab\\xf7\\xb8\\x15\\x75\\xf7\"\n\"\\x23\\xa1\\x07\\x68\\x8d\\x84\\x8f\\x9d\\x1a\\xf7\\x37\\x07\\xa3\\xa6\\x98\\x91\\x9e\\x1b\\xa6\\x97\\x7b\\x68\\x1f\\xfb\\x0f\\x07\\x8a\\x66\\x86\\x87\\x69\\x89\"\n\"\\x08\\x75\\xf7\\x20\\xa1\\x07\\x6c\\x8f\\x89\\x8d\\x8a\\xa5\\x08\\xf7\\x1c\\x07\\xc6\\x6c\\xaf\\x59\\x6f\\x75\\x81\\x6d\\x68\\x1e\\xb0\\x07\\x80\\x8e\\x71\\x82\"\n\"\\x73\\x83\\x76\\x85\\x19\\x7f\\x87\\x85\\x8a\\x05\\x72\\x07\\x8f\\x93\\x92\\x8c\\x92\\x1b\\x96\\x8e\\x85\\x72\\x1f\\xfb\\x26\\x07\\x8a\\x70\\x87\\x84\\x7b\\x89\"\n\"\\x83\\x89\\x18\\x0e\\xed\\xf8\\xa9\\x16\\x9a\\x07\\x39\\x8e\\x80\\x96\\xd6\\x1a\\xf7\\xce\\xf7\\x0e\\xab\\xfb\\x0f\\xf7\\x08\\x07\\xc5\\x9e\\xaa\\xbf\\x0a\\xa3\"\n\"\\x9d\\x9d\\xa2\\xaf\\x60\\xa5\\x4f\\x58\\x5d\\x79\\x6c\\x6e\\x1f\\xa9\\x81\\x64\\x9e\\x56\\x1b\\x4c\\x57\\x70\\x5e\\x71\\x1f\\x71\\x5e\\x83\\x67\\x8a\\x3b\\x08\"\n\"\\x39\\x6b\\xdd\\x54\\x0a\\x07\\xf7\\x3a\\x47\\x0a\\xc6\\x9e\\xa9\\xbf\\x0a\\x8f\\x8c\\x8b\\x8c\\x8f\\x1f\\x7c\\x64\\x86\\x68\\x52\\x1a\\x6b\\x04\\xfb\\xce\\x07\"\n\"\\x89\\x41\\x81\\x80\\x49\\x87\\x08\\x52\\x8f\\x83\\x96\\xd5\\x1a\\xf7\\xce\\x07\\x0e\\xf7\\xe5\\xf7\\x54\\x47\\x0a\\x9a\\x1d\\x6a\\xdd\\xfb\\xcd\\x06\\x89\\x40\"\n\"\\x81\\x80\\x44\\x88\\x08\\x7c\\xf7\\x80\\x9a\\x07\\x4e\\x8e\\x83\\x96\\xd6\\x1a\\xf7\\xcd\\xf7\\x4f\\xfb\\xd7\\x07\\xa3\\x1d\\x84\\x83\\x4e\\xeb\\x1d\\x97\\x8a\"\n\"\\xcd\\x08\\xf7\\x9a\\x07\\xa3\\x8b\\xa0\\x8d\\xc0\\x1e\\x87\\x8e\\x05\\x84\\x62\\x6c\\x88\\x62\\x1b\\xfb\\x31\\xb6\\x06\\x8a\\xb0\\x8f\\xb2\\x90\\x9b\\x08\\xb6\"\n\"\\x98\\xb3\\xa9\\xb8\\x1b\\xa7\\x9e\\x7e\\x69\\xa3\\x1f\\x70\\x9e\\x98\\x81\\x9c\\x1b\\xa0\\x9a\\x9b\\xa2\\xb6\\x59\\xa6\\x3e\\x3f\\x51\\x71\\x5a\\x67\\x1f\\x6d\"\n\"\\x62\\x80\\x66\\x85\\x3b\\x08\\x0e\\xf7\\xe3\\xf7\\x54\\x47\\x0a\\x7b\\x0a\\xf7\\x80\\x9a\\x07\\x4e\\x8e\\x83\\x96\\xd6\\x1a\\xf7\\xce\\xf7\\x4f\\xfb\\xcd\\x07\"\n\"\\xad\\x1d\\x7c\\x58\\x87\\x78\\x0a\\xf7\\xa2\\xb4\\x1d\\x8d\\x90\\x90\\x1f\\x0e\\xf7\\x87\\xf7\\x6c\\xf7\\xb4\\x15\\x61\\x8e\\x7d\\x95\\x8a\\xa8\\x08\\xf7\\xe6\"\n\"\\x07\\x84\\x8c\\xfb\\x04\\x57\\x05\\x82\\x07\\x95\\xa8\\x8b\\x8b\\x92\\x1b\\x97\\x8e\\x83\\x70\\x1f\\xfb\\x95\\x07\\x8a\\x71\\x7e\\x81\\x64\\x89\\x08\\x80\\xf7\"\n\"\\x46\\x07\\xf8\\x37\\x54\\x15\\xc1\\xa6\\xa2\\xa7\\xb3\\x1a\\xbe\\x5c\\xb0\\x4a\\x4e\\x1d\\x78\\xc5\\x5a\\x1e\\x4e\\x5f\\x7c\\x77\\x63\\x5e\\x1d\\x70\\x4c\\x15\"\n\"\\xb3\\x70\\x99\\x77\\x6c\\x1a\\x6a\\x74\\x74\\x68\\x62\\x70\\xa9\\xba\\xac\\x97\\xa2\\xa6\\x50\\x0a\\x76\\x68\\x73\\x1e\\x97\\xf8\\x47\\x2c\\x0a\\x0e\\xf7\\x87\"\n\"\\xed\\xf8\\x69\\x15\\x9d\\x8d\\x05\\x8c\\x8e\\x8e\\x8b\\x8d\\x1b\\xbb\\xb4\\x61\\x5b\\x60\\x6e\\x6e\\x60\\x78\\x7f\\x90\\x9b\\x75\\x1f\\x98\\x7a\\x80\\x90\\x81\"\n\"\\x1b\\x7a\\x7e\\x7d\\x79\\x6e\\xa7\\x7b\\xbc\\xf7\\x00\\xda\\xc3\\xd6\\xab\\x7c\\xaa\\x71\\xa0\\x1f\\x7f\\x95\\x84\\x8f\\x6d\\x97\\x9a\\x96\\x94\\x92\\x8f\\x8d\"\n\"\\x08\\xa2\\x9d\\x99\\xa3\\xa0\\x1a\\xb6\\x5e\\xad\\x51\\x5d\\x62\\x75\\x66\\x72\\x1e\\x86\\x83\\x8a\\x89\\x80\\x78\\x9d\\x7e\\x18\\xb4\\xa8\\xa1\\x99\\xaf\\x1b\"\n\"\\xb0\\xa3\\x76\\x6b\\x65\\x72\\x75\\x44\\x72\\x1f\\xf8\\xae\\xfb\\x9f\\x15\\xc1\\xa6\\xa2\\xa7\\xb3\\x1a\\xbe\\x5c\\xb0\\x4a\\x4e\\x1d\\x78\\xc5\\x5a\\x1e\\x4e\"\n\"\\x5f\\x7c\\x77\\x63\\x5e\\x1d\\x70\\x4c\\x15\\xb3\\x70\\x99\\x77\\x6c\\x1a\\x6a\\x74\\x74\\x68\\x62\\x70\\xa9\\xba\\xac\\x97\\xa2\\xa6\\x50\\x0a\\x75\\x68\\x74\"\n\"\\x1e\\x9c\\xf8\\x47\\x2c\\x0a\\x0e\\xf7\\x87\\xf7\\x13\\x21\\x1d\\x48\\xfb\\x1c\\x05\\x89\\x89\\x8a\\x86\\x88\\x1a\\x85\\x8e\\x8a\\x97\\x89\\x1e\\x99\\x9c\\x89\"\n\"\\x88\\x99\\x1f\\xdd\\x79\\xb5\\x63\\x4e\\x1a\\x54\\x66\\x60\\x5c\\x7e\\x85\\x8e\\x99\\x76\\x1e\\x87\\x8e\\x05\\x97\\x7a\\x7e\\x90\\x7c\\x1b\\x76\\x7f\\x81\\x7a\"\n\"\\x73\\xa8\\x7d\\xbe\\xf7\\x02\\xd2\\xc8\\xe8\\xb9\\x7a\\xb0\\x6b\\xa4\\x1f\\x6c\\xa2\\x6d\\x96\\x44\\x97\\xa0\\xb6\\x18\\xf7\\x1c\\x06\\xab\\xca\\x7c\\x92\\x05\"\n\"\\x7e\\x80\\x86\\x88\\x7d\\x1b\\xf8\\x0c\\xfc\\x4c\\x15\\xc0\\xa6\\xa2\\xa8\\xb2\\x1a\\xbe\\x5c\\xb0\\x4a\\x4e\\x1d\\x78\\xc6\\x5a\\x1e\\x4d\\x5f\\x7d\\x78\\x62\"\n\"\\x1a\\x4f\\xbe\\x62\\xd7\\xd7\\xbd\\xb4\\xc9\\xb9\\x76\\xa7\\x46\\xbc\\x1e\\x70\\x4c\\x15\\xb3\\x70\\x99\\x77\\x6d\\x1a\\x69\\x74\\x74\\x68\\x62\\x70\\xa9\\xba\"\n\"\\xac\\x96\\xa2\\xa7\\xa2\\x1e\\xa9\\xc7\\x15\\x5c\\xe0\\x1d\\x67\\x6b\\x7d\\x75\\x69\\x74\\x1e\\x9e\\xf8\\x47\\x2c\\x0a\\x0e\\xf7\\x87\\xf9\\x0f\\xf7\\x72\\x15\"\n\"\\xc1\\xa6\\xa2\\xa7\\xb3\\x1a\\xbe\\x5d\\xb0\\x49\\x4e\\x1d\\x77\\xc6\\x5b\\x1e\\x4d\\x60\\x7c\\x77\\x62\\x5e\\x1d\\x71\\x4c\\x15\\xb2\\x70\\x99\\x77\\x6c\\x1a\"\n\"\\x69\\x74\\x75\\x68\\x62\\x70\\xa9\\xba\\xac\\x96\\xa2\\xa7\\x50\\x0a\\x75\\x68\\x74\\x1e\\xfb\\xb9\\xf8\\x38\\x15\\xfb\\x88\\x06\\x62\\x2a\\xa1\\x81\\x05\\xaf\"\n\"\\xa6\\x95\\x92\\xad\\x1b\\xf7\\x0c\\x06\\xfb\\x11\\xfb\\xec\\x05\\xc9\\x06\\xf7\\x1b\\xf8\\x1b\\x05\\xf7\\xc0\\xab\\x15\\x5d\\x06\\xfc\\x59\\xfd\\x46\\x05\\xbc\"\n\"\\x06\\x0e\\xf8\\x12\\x6e\\x1d\\xb6\\xf8\\x44\\x22\\x1d\\x22\\x0a\\xa5\\xf8\\xff\\x8b\\x0a\\x80\\x1d\\x0e\\x80\\x1d\\xfb\\xb4\\xf7\\x79\\x37\\x0a\\xc3\\x8c\\x92\"\n\"\\x9f\\x1a\\xaf\\x7d\\x9e\\x71\\x70\\x7d\\x78\\x66\\x77\\x8c\\x86\\x99\\x52\\x1e\\x0e\\x22\\x0a\\xfb\\x85\\xf8\\xc0\\x23\\x1d\\x84\\x1d\\xf7\\x60\\x07\\x63\\x6b\"\n\"\\x7d\\x73\\x69\\x1a\\x61\\xaa\\x6a\\xb5\\xb5\\xac\\xa2\\xc0\\xb0\\x1e\\x77\\x9b\\x05\\x70\\x6c\\x79\\x82\\x75\\x1b\\x75\\x7b\\x9b\\xa3\\xa5\\xa6\\xb1\\xa1\\x90\"\n\"\\x1f\\xfc\\x7e\\xf7\\x95\\x15\\xf7\\x07\\xf7\\xa7\\xf7\\x08\\xfb\\xa7\\x05\\x0e\\x22\\x0a\\x2b\\xf9\\x04\\xa9\\x0a\\xc3\\xc2\\xb3\\x0a\\x6d\\x6e\\x66\\x68\\x6e\"\n\"\\xa9\\xaf\\xaf\\xa9\\xa8\\xaf\\x1f\\x54\\xae\\x15\\x4a\\x1d\\x9c\\x1a\\x9e\\x7e\\x97\\x76\\x7b\\x44\\x0a\\x0e\\xf7\\x34\\xc2\\x21\\x1d\\x79\\x07\\x36\\x0a\\xf7\"\n\"\\x5d\\x07\\xf7\\x30\\xa7\\x8e\\xa1\\xbb\\x1f\\xcb\\xa9\\xb3\\xc7\\xcf\\x1a\\xb3\\x7d\\xb0\\x71\\xa8\\x1e\\x74\\xa4\\x75\\x98\\x5b\\x9c\\xac\\x9a\\x9a\\x95\\x9a\"\n\"\\x9b\\x08\\xa5\\xa7\\x9c\\xb5\\xb1\\x1a\\xc3\\x67\\xc0\\x50\\xaa\\x1e\\xa3\\x60\\x6a\\x90\\x2a\\x1b\\x5d\\x61\\x15\\x8e\\xa0\\x94\\x8c\\x99\\x1b\\xe9\\xc7\\x57\"\n\"\\x3b\\x3a\\x55\\x5b\\x31\\x7a\\x7f\\x8c\\x90\\x72\\x1f\\x58\\x04\\x90\\xa3\\x95\\x8c\\x9d\\x1b\\xf1\\xcb\\x55\\x33\\x37\\x4d\\x52\\x31\\x73\\x7e\\x8d\\x92\\x6e\"\n\"\\x1f\\x0e\\xf7\\x34\\x31\\x0a\\xfb\\x81\\xf7\\xa0\\x22\\x1d\\xf7\\x34\\x31\\x0a\\x3d\\xf8\\x47\\x20\\x0a\\xf7\\x34\\x31\\x0a\\x37\\xf7\\xa0\\x20\\x1d\\xf7\\x34\"\n\"\\x31\\x0a\\xfb\\x88\\xf8\\x14\\x2b\\x1d\\x0e\\xf7\\xd3\\xf7\\xd8\\x15\\xfb\\x1c\\xfb\\x49\\x39\\xfb\\x02\\x77\\x7d\\x3b\\x8a\\x19\\x79\\xf7\\x88\\x9d\\x07\\x76\"\n\"\\x8d\\x05\\x71\\x8d\\x7c\\x96\\x9b\\x1a\\x97\\x90\\x95\\x9d\\xa3\\x1e\\xf7\\x22\\xf7\\x4e\\xf7\\x0a\\xfb\\x41\\x05\\x9c\\x72\\x92\\x7a\\x7c\\x1a\\x73\\x7c\\x83\"\n\"\\x5d\\x8a\\x1e\\x79\\xf7\\xb7\\x9d\\x07\\x76\\x8d\\x63\\x8f\\x72\\xa1\\x4e\\xe5\\x19\\xfb\\x33\\xf7\\x7d\\xf7\\x16\\xf7\\x3f\\xd4\\xe9\\x92\\x90\\xc0\\x8f\\x19\"\n\"\\x97\\x8c\\x05\\x9d\\xfb\\x73\\x79\\x9b\\x07\\xaa\\x9c\\x7f\\x76\\x81\\x86\\x81\\x7a\\x75\\x1f\\xfb\\x0d\\xfb\\x33\\x24\\xf7\\x2e\\x05\\x81\\x9a\\x85\\x9a\\x97\"\n\"\\x1a\\x9b\\x94\\x99\\x98\\x8f\\x1e\\x93\\x8d\\x8d\\x8c\\xa8\\x8c\\x08\\x9d\\xfb\\xbc\\x79\\x07\\xa1\\x88\\xb7\\x86\\xa3\\x76\\xc4\\x38\\x19\\x0e\\x6a\\x0a\\xf7\"\n\"\\xcb\\xf9\\xbc\\x20\\x0a\\x73\\x1d\\xf7\\x34\\xac\\x16\\xf8\\xee\\x06\\xfb\\xad\\xf9\\x44\\x05\\xfb\\x8e\\xfd\\x11\\x15\\xf7\\x69\\xf8\\x5e\\xf7\\x51\\xfc\\x5e\"\n\"\\x05\\x0e\\xf3\\x21\\x0a\\xfb\\x1c\\xfa\\x00\\x15\\x3f\\x6e\\x73\\x39\\x1d\\xf3\\x21\\x0a\\x30\\xfa\\x0a\\x20\\x0a\\xf3\\x21\\x0a\\xfb\\x8b\\xf9\\xd7\\x2b\\x1d\"\n\"\\x0e\\xf3\\x21\\x0a\\xfc\\x26\\xf9\\xc1\\x23\\x1d\\xf8\\xa0\\xda\\x15\\x5d\\x07\\x76\\x07\\x57\\x07\\x3a\\x8b\\x85\\x85\\x7b\\x1e\\x73\\x83\\x76\\x7a\\x74\\x1b\"\n\"\\x7e\\x80\\x93\\x9f\\x7a\\x1f\\xa2\\x7a\\x7d\\x94\\x7a\\x1b\\x75\\x79\\x7a\\x75\\x6a\\xb3\\x75\\xc7\\xbe\\xb8\\x99\\xa3\\xa6\\x1f\\xae\\xa9\\x9c\\xcf\\xf7\\x00\"\n\"\\x1a\\xf8\\x7d\\x07\\x8e\\xf3\\x98\\x9c\\xda\\x92\\x08\\x9e\\xfb\\x7f\\x78\\x07\\xdb\\x86\\x98\\x7a\\x8e\\x21\\x08\\xfb\\xe5\\x07\\xfc\\x15\\xf8\\x78\\x05\\xfb\"\n\"\\x3f\\x78\\x06\\xb6\\x99\\x83\\x5c\\xb3\\x1f\\xfc\\x4d\\x59\\x1d\\xf8\\x1c\\x07\\x0e\\xf3\\xf8\\xbc\\x16\\xb8\\xf7\\x3d\\x05\\x7a\\x1d\\xf8\\x68\\x07\\x65\\x6d\"\n\"\\x7b\\x71\\x69\\x1a\\x61\\x58\\x1d\\xa3\\xac\\xad\\xaf\\xa9\\x1f\\x0e\\xf3\\xf7\\x6e\\x91\\x1d\\xc0\\x1d\\xf8\\x94\\x07\\xc4\\xf7\\x3b\\x7b\\x46\\x1d\\x5c\\x8a\"\n\"\\x85\\x94\\xca\\x1a\\x0e\\xf7\\x4f\\xa4\\xf8\\x7b\\x37\\x0a\\xc2\\x8c\\x92\\xa0\\x1a\\xaf\\x7d\\x9e\\x71\\x70\\x7d\\x78\\x67\\x76\\x8c\\x85\\x99\\x53\\x1e\\xf7\"\n\"\\xbc\\xfb\\x5e\\x15\\xf7\\x3b\\xa0\\x0a\\x8d\\x42\\x75\\x6f\\x53\\x8d\\x08\\xfb\\x3b\\xf7\\x8d\\xf7\\x2d\\x06\\xf3\\x8d\\xab\\x73\\x97\\x31\\x6c\\x1d\\xfc\\x8c\"\n\"\\x79\\x06\\x2e\\x1d\\xfc\\x5b\\x07\\x4b\\x59\\x0a\\xf8\\x96\\x07\\xc4\\xf7\\x3b\\x7a\\x46\\x1d\\x5b\\x8a\\x85\\x94\\xca\\x1a\\x0e\\xf7\\x6a\\xf7\\xcf\\x15\\xf7\"\n\"\\xbb\\xfb\\x67\\x06\\x4b\\x52\\x0a\\xcb\\x1a\\xf8\\x5b\\xbb\\x1d\\xfb\\x5b\\xfb\\xbb\\xf7\\x5b\\xbb\\x1d\\xfc\\x5b\\x07\\x4b\\x52\\x0a\\xcb\\x1a\\x0e\\xf7\\xc1\"\n\"\\xaf\\x1d\\xf7\\xbe\\xfb\\x6c\\x15\\xf7\\xbc\\xfb\\x67\\x06\\x4b\\x42\\x0a\\x57\\x8d\\x7b\\x9e\\xcb\\x1a\\xf8\\x5b\\x9f\\x0a\\xfb\\x5b\\xfb\\xbc\\xf7\\x5b\\x9f\"\n\"\\x0a\\xfc\\x5b\\x07\\x4b\\x42\\x0a\\x57\\x8d\\x7b\\x9e\\xcb\\x1a\\x0e\\x84\\xf7\\x29\\xf8\\x1a\\x15\\x90\\xc1\\x93\\xba\\x96\\xac\\x08\\xd9\\xa4\\xbb\\xb8\\xc4\"\n\"\\x1b\\xbc\\xbe\\x67\\x55\\xa7\\x1f\\x99\\x6f\\x94\\x69\\x91\\x5f\\x08\\x9c\\x06\\x7b\\xf7\\x73\\x05\\x79\\x06\\x6c\\x85\\x84\\x7e\\x7f\\x1b\\x87\\x86\\x8e\\x90\"\n\"\\x83\\x1f\\xa2\\x69\\x67\\x97\\x68\\x1b\\xfb\\x0a\\x2a\\xfb\\x07\\xfb\\x3c\\x74\\x1f\\x5c\\x06\\x70\\x62\\x05\\xd1\\x06\\x8a\\x83\\x8b\\x84\\x80\\x1a\\x7a\\x8b\"\n\"\\x82\\x8d\\x80\\x1e\\x5f\\x06\\x70\\x62\\x05\\xd6\\x06\\xfb\\x33\\xa5\\xe7\\x27\\xf7\\x0c\\x1b\\xd4\\xcb\\xad\\xc7\\xb6\\x1f\\xad\\x07\\x51\\x6b\\x4c\\x64\\x50\"\n\"\\x1b\\x2e\\x49\\xe3\\xf7\\x20\\x7d\\x1f\\xf7\\x12\\x06\\xa5\\xb4\\x05\\xfb\\x2f\\x06\\x8a\\x9d\\x8b\\x94\\x8e\\x1a\\x8f\\x8b\\x92\\x8c\\xa1\\x1e\\xf7\\x57\\x06\"\n\"\\xa6\\xb4\\x05\\x0e\\xd2\\xf7\\xa9\\x9f\\x15\\x41\\x91\\x7c\\x9a\\xce\\x1a\\xf8\\x5a\\x07\\x89\\xb3\\x99\\x99\\xbb\\x8e\\x08\\xf7\\x05\\x06\\xf2\\x88\\xbe\\x68\"\n\"\\xb1\\x2d\\x08\\xa7\\x06\\x5a\\xf7\\x43\\x05\\xfc\\xad\\x77\\x06\\xd5\\x85\\x9a\\x7c\\x48\\x1a\\xfc\\x52\\x07\\x48\\x7c\\x7c\\x41\\x85\\x1e\\x77\\xf7\\xae\\x07\"\n\"\\x0e\\x30\\x0a\\xfb\\x80\\xf8\\xb0\\x8b\\x0a\\x30\\x0a\\xfb\\x4b\\xf8\\x13\\x20\\x1d\\x30\\x0a\\xfc\\x1a\\xfc\\xfd\\x25\\x0a\\x30\\x0a\\xfb\\xe8\\xf8\\x87\\x2b\"\n\"\\x1d\\x0e\\xf8\\xfa\\xf8\\x65\\x15\\xe6\\xb3\\x30\\xbb\\x06\\xc2\\x1d\\xfb\\xc3\\xbb\\x07\\xc2\\x1d\\x32\\x63\\xe4\\xfb\\xed\\x46\\x0a\\x78\\xf7\\xaa\\x9e\\x07\"\n\"\\x8e\\x0a\\x25\\xf7\\xf8\\x15\\x21\\xfb\\xc3\\xf5\\x07\\x0e\\x69\\x0a\\xf8\\x85\\xf9\\x50\\x20\\x1d\\xf7\\x70\\xf7\\xcd\\x9d\\x15\\x75\\x3b\\x1d\\xf8\\x5c\\x3c\"\n\"\\x1d\\xa1\\x8c\\x05\\x9d\\xfb\\xb2\\x79\\x07\\xa1\\x8a\\x05\\xc0\\xe3\\x1d\\x56\\x89\\x1e\\x75\\x8a\\x05\\x79\\xf7\\xb2\\x07\\xf7\\x03\\xf9\\x18\\x15\\xa1\\x8a\"\n\"\\x05\\xbd\\xa1\\x71\\x51\\x8d\\x1f\\xfc\\x33\\x07\\x37\\x84\\x71\\x75\\x80\\x81\\x94\\x9a\\x84\\x1e\\xb7\\x75\\x7e\\x96\\x6d\\x1b\\x6e\\x77\\x78\\x70\\x5f\\xb5\"\n\"\\x6d\\xc9\\xf3\\xcd\\xd9\\xf7\\x0e\\x1f\\xf8\\x02\\x07\\x8a\\xca\\x9b\\x9e\\xc0\\x8d\\x9f\\x8c\\x18\\x9d\\xfb\\xb3\\x07\\x0e\\xfb\\x42\\x28\\x1d\\xf7\\x98\\xf9\"\n\"\\xed\\x15\\x3f\\x6e\\x73\\x39\\x1d\\xfb\\x42\\x28\\x1d\\xf7\\x28\\xf9\\xc4\\x2b\\x1d\\x0e\\xfb\\x42\\x28\\x1d\\x84\\xf9\\xae\\x23\\x1d\\xfb\\x42\\x9d\\xf9\\x2a\"\n\"\\x15\\x78\\x07\\xe0\\x66\\x1d\\x3f\\x7f\\x80\\x37\\x88\\x08\\x78\\xf7\\x8c\\xab\\x1d\\x9f\\x95\\x9d\\x9d\\x9e\\x1f\\x95\\x94\\x8f\\x8e\\x90\\x8c\\x08\\x9e\\x07\"\n\"\\x39\\x8d\\x7d\\x99\\x89\\xd5\\x08\\xf8\\x50\\x07\\x8d\\xd6\\x98\\x97\\xde\\x8e\\x08\\x9e\\x07\\x0e\\xfb\\x42\\x4c\\x0a\\xfb\\x42\\xa2\\xf9\\x18\\x15\\x2e\\x1d\"\n\"\\xfc\\x5c\\x07\\x4c\\x42\\x0a\\x56\\x8d\\x7c\\x9e\\xca\\x1a\\xf8\\x5c\\x5d\\x0a\\x07\\xbe\\xf7\\x33\\x15\\x41\\x0a\\xf7\\x4d\\x16\\x41\\x0a\\x0e\\x2b\\xa3\\xf8\"\n\"\\x7b\\x37\\x0a\\xc2\\x8c\\x92\\xa0\\x1a\\xaf\\x7d\\x9e\\x71\\x70\\x7d\\x78\\x67\\x76\\x8c\\x85\\x99\\x53\\x1e\\xef\\xf7\\x05\\x15\\x2e\\x1d\\xfc\\x5c\\x07\\x4c\"\n\"\\x7c\\x78\\x56\\x4f\\x1d\\xf7\\xb3\\x9d\\x07\\x74\\x3b\\x1d\\xf8\\x5c\\x5d\\x0a\\x07\\x0e\\xfb\\x42\\x28\\x1d\\xf7\\xb0\\xf9\\xcd\\x15\\x65\\x7a\\x7e\\x7f\\x74\"\n\"\\x1b\\x7c\\x78\\x90\\x95\\x78\\x1f\\x73\\x97\\x05\\x97\\x74\\x72\\x91\\x75\\x1b\\x59\\x67\\x67\\x4a\\x7c\\x1f\\xa8\\x06\\xaa\\x96\\x9c\\x9a\\xa2\\x1b\\x96\\x9a\"\n\"\\x48\\x0a\\x78\\xb3\\x9b\\x86\\xa4\\x1b\\xc2\\xa8\\xa9\\xd7\\xa0\\x1f\\x0e\\xfb\\x0a\\xf8\\x07\\xf9\\x2a\\x15\\xfb\\xb3\\x78\\x06\\xdc\\x85\\x96\\x81\\x8c\\x41\"\n\"\\x08\\xfc\\x63\\x07\\x5e\\x7f\\x76\\x71\\x7d\\x85\\x93\\xa4\\x84\\x1e\\xae\\x81\\x7b\\x9b\\x71\\x1b\\x70\\x75\\x74\\x70\\x61\\xb4\\x6d\\xc5\\xf7\\x00\\xc8\\xd3\"\n\"\\xf7\\x11\\x1f\\xf8\\x06\\x07\\x8d\\xd6\\x94\\x94\\xdc\\x91\\x08\\x95\\xd7\\x20\\x1d\\xf7\\x7d\\xf7\\xd5\\x15\\xf7\\x49\\xfb\\x4f\\x05\\xbd\\x58\\x9e\\x73\\x7c\"\n\"\\x1a\\x7c\\x7c\\x82\\x70\\x8a\\x1e\\x7b\\x8a\\x05\\x79\\xf7\\xd2\\x9d\\x07\\x4e\\x8c\\x60\\xbb\\x0a\\x92\\x93\\x92\\x93\\x91\\x91\\x9a\\x9a\\x9a\\x9b\\x9a\\x9b\"\n\"\\x94\\x93\\xcb\\xd1\\xa6\\xa8\\xce\\xd7\\xa2\\x9a\\xc4\\x92\\x99\\x8c\\x18\\x9e\\xfb\\x87\\x78\\x07\\xba\\xcb\\x1d\\xcc\\x9a\\x9d\\xc5\\x8c\\x1e\\x9e\\x8c\\x05\"\n\"\\x9d\\xfb\\xb4\\x79\\x07\\x36\\x0a\\xf7\\xb4\\x9d\\x07\\x74\\x8c\\x55\\x8d\\x7b\\x9e\\x8c\\xca\\x19\\x0e\\x63\\x0a\\x2d\\xfe\\x43\\x25\\x0a\\xf3\\x36\\x1d\\x75\"\n\"\\xd7\\x22\\x1d\\xf7\\x6e\\xf8\\x09\\xc1\\x0a\\x82\\x49\\x88\\x19\\x79\\xf7\\x71\\x9e\\x7f\\x07\\x67\\x74\\x99\\xa2\\x93\\x94\\xa7\\x93\\x9f\\x1f\\xf7\\x35\\xf8\"\n\"\\x11\\xf7\\x35\\xfc\\x09\\x05\\x97\\x6f\\x90\\x79\\x7a\\x1a\\x72\\x78\\x7e\\x67\\x1e\\x7b\\x78\\xf7\\xaa\\x9d\\x7e\\x06\\x5e\\x8c\\x71\\xa7\\x67\\xe4\\x08\\x0e\"\n\"\\xf3\\x36\\x1d\\xf7\\x01\\xfb\\x66\\x4d\\x0a\\x0e\\xf3\\x36\\x1d\\x6c\\xfe\\x30\\x15\\xcf\\xac\\xb7\\x85\\x0a\\xf3\\x36\\x1d\\xf7\\x03\\xfb\\x91\\x2b\\x0a\\xf8\"\n\"\\x12\\xbe\\x0a\\x4c\\x7b\\x78\\x56\\x89\\x1e\\x78\\x8a\\x05\\x79\\xf7\\xaf\\x9d\\x07\\x75\\x8c\\x56\\x8d\\x7b\\x9e\\x8c\\xca\\x19\\xf8\\x5c\\x07\\x8a\\xca\\x9b\"\n\"\\x9e\\xc0\\x8d\\xa1\\x8c\\x18\\x9d\\xfb\\x57\\x07\\xfb\\x6b\\xfc\\x7f\\xfb\\x74\\xf8\\x7f\\x05\\xfb\\x53\\x79\\x06\\x36\\x0a\\xf7\\x7c\\x9d\\x07\\x73\\x3b\\x1d\"\n\"\\xf8\\x3a\\x07\\x0e\\x33\\x0a\\xfc\\x0f\\xd7\\x22\\x1d\\x33\\x0a\\xfb\\x52\\xf7\\x87\\xdf\\x1d\\xf7\\x0f\\xfb\\x3b\\x05\\xca\\x06\\x0e\\x33\\x0a\\xfc\\x18\\xfe\"\n\"\\x30\\x89\\x0a\\x66\\x55\\x66\\x1f\\x0e\\xf8\\xf2\\x16\\x9b\\xf8\\xc3\\x06\\xca\\x9a\\x9e\\xc0\\x8d\\x1e\\xa2\\x8c\\x05\\x9d\\xfb\\x7b\\x79\\x07\\x2e\\x1d\\xfb\"\n\"\\xf6\\x07\\xfc\\x1c\\xf8\\x5d\\x05\\xfb\\x58\\x79\\x06\\xc2\\x8a\\x98\\x83\\xc6\\x4e\\x08\\xfc\\x6b\\x07\\x4c\\x59\\x0a\\xf7\\x7b\\x9d\\x07\\x74\\x3b\\x1d\\xf8\"\n\"\\x30\\x07\\x0e\\x23\\x0a\\xf7\\x04\\xf7\\x80\\x15\\x3f\\x6e\\x73\\x76\\x50\\x1b\\x4b\\xb2\\x1d\\x23\\x0a\\xce\\xb5\\x1d\\xfb\\x08\\x16\\x99\\x0a\\x23\\x0a\\xfb\"\n\"\\x2f\\xf7\\x41\\x23\\x1d\\xf7\\x80\\xa8\\xf8\\x7b\\x37\\x0a\\xc2\\x8c\\x92\\xa0\\x1a\\xaf\\x7d\\x9e\\x71\\x70\\x7d\\x78\\x67\\x76\\x8c\\x85\\x99\\x53\\x1e\\xf9\"\n\"\\x69\\xfb\\xff\\x15\\x7a\\x8e\\x6e\\x3f\\x6f\\x76\\x41\\x89\\x19\\x23\\x06\\xf7\\x17\\xc4\\xda\\xf7\\x02\\xf7\\x12\\x1a\\xf7\\x3e\\xfb\\x1d\\xf7\\x1a\\xfb\\x42\"\n\"\\xfb\\x41\\xfb\\x1e\\xfb\\x1b\\xfb\\x3c\\x39\\xab\\x41\\xc8\\x50\\x1e\\xb1\\x66\\xaf\\x72\\xb5\\x7a\\x08\\x24\\x06\\x40\\x8d\\x6f\\xa0\\x6e\\xd7\\x7a\\x88\\x18\"\n\"\\xb1\\xfb\\x3c\\x05\\xf7\\x91\\xd5\\x06\\x65\\x9e\\x78\\x9c\\x72\\xb4\\x08\\x68\\xc2\\x79\\xd2\\xdd\\x1a\\xf7\\x33\\xdd\\xf7\\x04\\xf7\\x08\\xf7\\x08\\xdd\\xfb\"\n\"\\x03\\xfb\\x32\\xfb\\x1f\\x57\\xfb\\x02\\x38\\x65\\x1e\\x41\\xf7\\x91\\x07\\x0e\\x81\\x1d\\xaf\\x1d\\xf8\\x00\\xf7\\x1e\\xc7\\x1d\\xd2\\xa9\\xc9\\xc8\\x1f\\xc8\"\n\"\\xcb\\xac\\xe1\\xec\\x1a\\xf7\\x55\\xfb\\x1c\\xf7\\x24\\xfb\\x4b\\x1e\\x8a\\x64\\x15\\xf7\\x0c\\x6d\\x1d\\x3b\\x86\\x0a\\x64\\x0a\\xfb\\x42\\xf7\\x2d\\x98\\x0a\"\n\"\\xf7\\x74\\xf7\\xce\\xf8\\xe2\\x15\\xfb\\x3e\\x79\\xfb\\x09\\x22\\xfb\\x1c\\x1a\\xfb\\x1c\\xf7\\x0b\\x20\\xf7\\x3c\\x7b\\x1e\\x7f\\x07\\x8c\\x52\\x80\\x7f\\x51\"\n\"\\x89\\x74\\x8a\\x18\\x79\\xf7\\xb1\\xdb\\x1d\\xf7\\x3c\\x9b\\xf7\\x0b\\xf6\\xf7\\x1c\\x1a\\xf7\\x1c\\xfb\\x08\\xf4\\xfb\\x3f\\xd5\\x1d\\xfb\\xb1\\xb8\\x0a\\xfb\"\n\"\\x00\\xa1\\x4d\\xe0\\xf7\\x10\\x1a\\xf7\\x10\\xcb\\xe2\\xf5\\xa0\\x1e\\xf2\\x8a\\x15\\xf7\\x00\\x73\\xc9\\x37\\xfb\\x0f\\x1a\\xfb\\x0f\\x4b\\x34\\x21\\x75\\x1e\"\n\"\\x0e\\xf9\\x54\\x21\\x1d\\xfd\\x42\\x79\\x06\\x36\\x0a\\xf7\\xb2\\x9d\\x07\\x75\\x3b\\x1d\\xf8\\x4e\\x07\\xca\\x9b\\x9f\\xbf\\x8d\\x1e\\xf7\\x33\\x06\\xbf\\x89\"\n\"\\x9b\\x77\\x4c\\x1a\\xfc\\x4e\\x8a\\x0a\\x0e\\xf7\\x7b\\xf7\\x76\\x21\\x1d\\x79\\x07\\x2e\\x1d\\xfb\\xc5\\x07\\x5f\\x94\\x7a\\x94\\x6e\\xa7\\x63\\xb7\\x80\\xaf\"\n\"\\x89\\xf3\\x8a\\xd3\\x88\\xa2\\x83\\xa2\\x08\\xb8\\x7c\\x6d\\xa1\\x5d\\x1b\\x73\\x73\\x86\\x82\\x73\\x1f\\x92\\x76\\x05\\x90\\x96\\x91\\x8c\\x93\\x1b\\xa8\\x90\"\n\"\\x7f\\x48\\x8e\\x1f\\x90\\xfb\\x35\\x91\\x74\\xc1\\x46\\xbb\\x55\\xc2\\x72\\xdc\\x84\\x08\\xfb\\x0b\\x07\\x4c\\x42\\x0a\\x56\\x8d\\x7c\\x9e\\xca\\x1a\\xf7\\x0b\"\n\"\\x07\\xcc\\x91\\xb1\\x98\\xb8\\xac\\xd3\\xc7\\xa4\\xc4\\x8c\\xf7\\x09\\x8f\\xeb\\x8b\\x8b\\x8e\\x94\\x08\\x9e\\x8f\\x96\\x93\\x9d\\x1b\\x93\\x90\\x8a\\x86\\x96\"\n\"\\x1f\\x93\\xa0\\x05\\x94\\x72\\x74\\x90\\x73\\x1b\\x60\\x6e\\x78\\x64\\x7b\\x1f\\x80\\x72\\x88\\x74\\x8a\\x3c\\x8c\\xfb\\x20\\x5f\\x45\\x27\\x77\\x08\\xf7\\xc5\"\n\"\\xe1\\x1d\\x07\\x0e\\xf7\\x34\\x3b\\x0a\\xeb\\xf8\\x0c\\x22\\x1d\\xf7\\x34\\x3b\\x0a\\xf7\\xb1\\xf8\\xb3\\x20\\x0a\\xf7\\x34\\x3b\\x0a\\xe2\\xfd\\x04\\x89\\x0a\"\n\"\\x67\\x55\\x65\\x1f\\x0e\\xbc\\x83\\x0a\\x36\\x0a\\xf7\\xb4\\x9d\\x07\\x73\\x8c\\x56\\x8d\\x7b\\x9e\\x8c\\xca\\x19\\xf8\\x93\\x04\\x93\\xa1\\x99\\x8d\\xa1\\x1b\"\n\"\\xe0\\xc3\\x51\\x35\\x36\\x56\\x54\\x3b\\x74\\x79\\x8f\\x95\\x72\\x1f\\x0e\\xbc\\x2f\\x0a\\xfb\\x74\\xf7\\x94\\x98\\x0a\\xbc\\xf7\\xac\\x7d\\x15\\x94\\x06\\xf7\"\n\"\\x06\\xe3\\xdb\\xf1\\xde\\x54\\xcb\\xfb\\x18\\xd3\\x1f\\x22\\xc4\\x61\\xb7\\xc2\\x1a\\xc2\\xb5\\xb0\\xc9\\xb8\\xb5\\x78\\x67\\xae\\x1e\\xaa\\x6b\\x99\\x71\\x9b\"\n\"\\x50\\x08\\xa4\\x06\\x75\\xf7\\x69\\x05\\x6f\\x0a\\xa5\\x80\\xa2\\x86\\xa7\\x87\\x67\\x33\\x18\\x2d\\x0a\\x96\\x5a\\x0a\\x6a\\xc9\\x1d\\xbf\\xb7\\x6c\\xa4\\x55\"\n\"\\x81\\x84\\x8a\\x89\\x82\\x1f\\x0e\\xbc\\x2f\\x0a\\x5f\\xf7\\x94\\x20\\x1d\\xbc\\x2f\\x0a\\xfb\\x7d\\xfd\\x7c\\x8d\\x0a\\x84\\x6a\\x6f\\x66\\x55\\x66\\x1f\\x0e\"\n\"\\xd6\\xf8\\xab\\x21\\x1d\\xfc\\x7f\\x06\\xf7\\x3e\\xfb\\xf4\\xfb\\x3e\\xfb\\xca\\x05\\xf8\\x7f\\x06\\xbc\\xf7\\x76\\x05\\x6c\\x06\\x55\\xfb\\x13\\x46\\x5b\\xfb\"\n\"\\x15\\x8d\\x08\\xfb\\x07\\x06\\xf7\\x21\\xf7\\xad\\xfb\\x27\\xf7\\xb3\\x05\\xf7\\x04\\x06\\xf7\\x1d\\x8f\\xcd\\x58\\x94\\xfb\\x09\\x08\\xaa\\x06\\x0e\\xf3\\xf7\"\n\"\\x36\\x16\\xf7\\xb3\\x9d\\x06\\x75\\x8c\\x05\\x55\\x8d\\x7c\\x9e\\xcb\\x1a\\xf8\\x92\\xe4\\x07\\xe0\\x8c\\xac\\x6c\\x8f\\x37\\x9e\\x8d\\x18\\x81\\xf7\\x34\\x05\"\n\"\\xfc\\xb5\\x3f\\x0a\\xe4\\xfc\\x92\\x06\\x4b\\x7c\\x78\\x55\\x89\\x1e\\x75\\x8a\\x05\\x0e\\xf3\\xf7\\x92\\xf7\\xd0\\x15\\xfb\\x58\\x07\\x8a\\x35\\x82\\x81\\x37\"\n\"\\x86\\x08\\x78\\xf7\\xb8\\x9e\\x07\\x39\\x8f\\x7e\\x97\\x8a\\xd5\\x08\\xf7\\x63\\xf4\\xad\\x22\\xf7\\xa2\\x71\\x0a\\xfb\\xa2\\x23\\x69\\x06\\x0e\\xf3\\x53\\x1d\"\n\"\\x94\\xfa\\x0a\\x20\\x0a\\xf3\\xf7\\xcd\\x16\\xf7\\x1f\\x9e\\x06\\x39\\x8f\\x7e\\x97\\x8a\\xd5\\x08\\xf8\\x93\\x71\\x0a\\xfc\\x88\\x06\\x8a\\x35\\x82\\x81\\x37\"\n\"\\x86\\x08\\x78\\xf7\\x09\\x07\\x63\\x28\\x2d\\x0a\\x97\\x1b\\xb0\\x9a\\x81\\x72\\x6f\\x77\\x7a\\x69\\xc9\\x1d\\xc0\\xb6\\x6c\\xa4\\x54\\x82\\x84\\x8a\\x89\\x82\"\n\"\\x1f\\x0e\\xf7\\x93\\xf8\\x46\\x15\\xfb\\x5a\\xaa\\x07\\xba\\xa4\\xa3\\xbd\\xbc\\xa4\\x73\\x5c\\x1e\\xaa\\xf7\\x5a\\x6c\\x06\\x5b\\x86\\x76\\x77\\x5b\\x1b\\x5a\"\n\"\\x76\\x9f\\xbb\\x86\\x1f\\xd9\\xf7\\x85\\x15\\xfb\\x56\\xfb\\x1d\\xfb\\x23\\xfb\\x5e\\xfb\\x5a\\xf7\\x1e\\xfb\\x25\\xf7\\x51\\xf7\\x52\\xf7\\x1e\\xf7\\x24\\xf7\"\n\"\\x5b\\xf7\\x5a\\xfb\\x1e\\xf7\\x27\\xfb\\x4e\\x1f\\x82\\x65\\x15\\xb7\\xb6\\x7b\\x6d\\xad\\x1f\\xc9\\x56\\xad\\x2c\\xfb\\x0c\\x1a\\xfb\\x04\\x6d\\x30\\x56\\x59\"\n\"\\x1e\\x6f\\x6d\\x5d\\x7a\\x5b\\x1b\\xfb\\x16\\x35\\xf7\\x0f\\xf7\\x4f\\xf7\\x52\\xd7\\xf7\\x04\\xf7\\x16\\x1f\\x0e\\x24\\x1d\\xfb\\x7e\\xf7\\x7c\\x15\\x3f\\x6e\"\n\"\\x73\\x5a\\x1d\\xb3\\x78\\xba\\x1b\\xdf\\xb9\\x49\\x0a\\x24\\x1d\\xfb\\xa9\\xd7\\x50\\x1d\\xd6\\x1d\\x75\\x7c\\x81\\x86\\x79\\x79\\x1e\\xfb\\x26\\xfb\\x28\\x05\"\n\"\\xfb\\x08\\x16\\xb8\\x1d\\x0e\\x24\\x1d\\xfc\\x73\\xf7\\x3e\\x23\\x1d\\x82\\x1d\\xf7\\x3d\\xac\\xa9\\x8f\\x92\\xab\\x1e\\x68\\x6e\\x7c\\x72\\x6b\\x1a\\x60\\x58\"\n\"\\x1d\\xa1\\xaa\\x9d\\xa7\\xb4\\xae\\x1f\\xdb\\xcd\\x9a\\xaf\\x8d\\xf7\\x15\\x08\\xf7\\x99\\x07\\x8d\\xf4\\x96\\x99\\xdc\\x94\\x08\\x0e\\x78\\x1d\\x0e\\x78\\x1d\"\n\"\\xf7\\x30\\xf7\\xab\\x35\\x0a\\xf7\\x4e\\x16\\x41\\x0a\\x0e\\xf7\\xc9\\xbc\\xf8\\x7b\\x37\\x0a\\xc2\\x8c\\x92\\xa0\\x1a\\xaf\\x7d\\x9e\\x71\\x70\\x7d\\x78\\x67\"\n\"\\x76\\x8c\\x85\\x99\\x53\\x1e\\xf8\\x16\\xfb\\x8d\\x15\\xfb\\x47\\x07\\x4c\\x7b\\x78\\x56\\xb6\\x1d\\xbc\\xe1\\xae\\xa9\\xc0\\x8e\\x19\\x96\\x8c\\x05\\x9d\\xfb\"\n\"\\x73\\x79\\xa0\\x07\\xa6\\x8a\\x99\\x81\\x79\\x1a\\x7e\\x86\\x7d\\xa9\\x1d\\xbc\\x84\\xa3\\x77\\xb5\\x42\\x19\\x0e\\x24\\x1d\\xfb\\xd8\\xf7\\xac\\x87\\x0a\\x0e\"\n\"\\x24\\x1d\\xfb\\x66\\xf7\\x61\\x15\\x65\\x7a\\x7e\\x7f\\x74\\x1b\\x7c\\x77\\x90\\x95\\x79\\x1f\\x73\\x97\\x05\\x96\\x74\\x71\\x92\\x76\\x1b\\x59\\x67\\x67\\x4a\"\n\"\\x7c\\x1f\\xa8\\x06\\xaa\\x96\\x9c\\x9a\\xa2\\x1b\\x96\\x9a\\x48\\x0a\\x78\\xb2\\x9c\\x86\\xa4\\x1b\\xc2\\xa8\\xa8\\xd8\\xa0\\x1f\\x0e\\xf8\\x49\\x32\\x1d\\xfc\"\n\"\\x86\\xd7\\x22\\x1d\\xf8\\x49\\x32\\x1d\\xfb\\xc8\\xd7\\x20\\x1d\\xf8\\x49\\x32\\x1d\\xfc\\xc8\\x96\\x1d\\xf8\\x49\\x32\\x1d\\xfc\\x19\\x96\\x0a\\xf7\\x1c\\xf7\"\n\"\\x28\\xf7\\x7b\\x15\\x9d\\x06\\x89\\xca\\x9e\\xa1\\xc6\\x8c\\x08\\xf7\\x33\\x06\\xc6\\x8a\\x9e\\x75\\x89\\x4c\\x08\\x9d\\xf7\\x85\\x79\\x06\\x8d\\x52\\x76\\x76\"\n\"\\x52\\x8c\\x08\\xfb\\x33\\x06\\x52\\x8a\\x76\\xa0\\x8d\\xc4\\x08\\x79\\x06\\x56\\xb1\\x15\\x94\\xc9\\xa4\\x9b\\xdb\\x8a\\x08\\xf7\\x74\\x06\\xdb\\x8c\\xa5\\x7a\"\n\"\\x93\\x4e\\x9c\\x8d\\x18\\x81\\xf7\\x2a\\x05\\xfc\\x66\\x06\\x81\\xfb\\x2a\\x05\\x99\\xfc\\x94\\x15\\xf8\\x60\\x06\\xb4\\xf7\\x3d\\x7a\\x8f\\x6e\\x45\\x6d\\x77\"\n\"\\x3f\\x89\\x19\\xfb\\x82\\x06\\x3e\\x8d\\x6e\\x9e\\x6e\\xd2\\x7a\\x87\\x18\\x0e\\x34\\x1d\\xfb\\x4a\\xd7\\x20\\x1d\\x34\\x1d\\xfb\\x9e\\x96\\x0a\\xf3\\x3c\\x0a\"\n\"\\xfb\\xd9\\xf8\\xb3\\x22\\x1d\\xf3\\x3c\\x0a\\xfb\\xb8\\xf9\\x27\\x2b\\x1d\\x0e\\xf3\\xf8\\x3c\\xf8\\xfd\\x15\\xfc\\x36\\xfc\\xfd\\x05\\xf8\\xba\\x06\\xaf\\xf7\"\n\"\\x4a\\x78\\x8d\\x75\\x22\\x5a\\x64\\x20\\x90\\x19\\xfb\\x7b\\x06\\xf8\\x34\\xf8\\xfd\\x05\\xfc\\x83\\x06\\x78\\xfb\\x41\\x9e\\x89\\x9a\\xf7\\x04\\xa3\\xa0\\xf7\"\n\"\\x05\\x88\\x19\\x0e\\x4c\\x26\\x1d\\xba\\xf8\\x20\\x37\\x1d\\xf7\\x34\\xf9\\x00\\xf7\\x2e\\x15\\x45\\x5b\\x64\\x70\\x52\\x1b\\x62\\x65\\x9f\\xa9\\x7b\\x1f\\x75\"\n\"\\xb2\\x86\\xaa\\xef\\x1a\\xf7\\x9a\\x06\\xf7\\x15\\x7f\\x5c\\xc1\\x26\\x1b\\x5c\\x70\\x81\\x68\\x5e\\x1f\\xad\\x64\\x6e\\x96\\x59\\x1b\\x31\\x46\\x5c\\x4e\\x6d\"\n\"\\x9c\\x79\\xa6\\xa7\\x9a\\x9c\\xaa\\x8f\\x8b\\x92\\x8a\\x91\\x1f\\x8a\\x96\\x05\\x91\\x07\\xac\\x8d\\xa2\\x9c\\xb6\\x1b\\xa3\\x9e\\x83\\x7d\\x92\\x1f\\x92\\x7b\"\n\"\\x90\\x6c\\x74\\x1a\\x89\\x4c\\x35\\x67\\x05\\x20\\x5f\\x61\\x62\\x4f\\x1a\\x4a\\xbb\\x5e\\xcf\\xbd\\xad\\x9b\\xc4\\xcf\\x1e\\x57\\xad\\xb0\\x76\\xc5\\x1b\\xb9\"\n\"\\xb5\\x9b\\xab\\xae\\x1f\\xa7\\xa3\\x9d\\xa7\\xa7\\xc6\\x08\\xfb\\xfa\\xbf\\x15\\x8c\\x66\\x91\\x66\\x96\\x67\\x08\\x8c\\x8a\\x8b\\x8a\\x8a\\x1a\\x79\\x4a\\x6b\"\n\"\\x67\\x66\\x6d\\xb2\\xbb\\xc7\\xa6\\xa3\\xf7\\x0d\\xb7\\x1e\\xdd\\xc1\\x15\\xe3\\x8f\\xa5\\xaf\\xc4\\x1b\\xc1\\xa2\\x66\\x34\\x8d\\x1f\\xfb\\x6f\\xf7\\x5c\\x15\"\n\"\\x99\\x0a\\xf8\\x81\\xf0\\x1d\\xf8\\x07\\xc1\\x0a\\x81\\x49\\x89\\x19\\x79\\xf7\\x71\\x9e\\x7f\\x07\\x67\\x73\\x9a\\xa0\\x8c\\x1f\\x94\\x92\\xa2\\x95\\xa4\\x1e\"\n\"\\xb5\\xf4\\x05\\xf7\\x86\\x06\\xb1\\x2a\\x05\\x98\\x6a\\x8f\\x7b\\x7d\\x1a\\x72\\xc1\\x1d\\xf1\\xf7\\x85\\xf4\\xfb\\x85\\x05\\x0e\\xce\\x96\\xf9\\x2a\\x15\\x79\"\n\"\\x07\\xd5\\x9b\\x7c\\x44\\x8c\\x1f\\xfc\\x5b\\x4f\\x0a\\xf7\\x82\\xf7\\x0b\\x07\\xf3\\x8d\\xab\\x74\\x96\\x35\\x9c\\x8d\\x18\\x81\\xf7\\x2a\\x05\\xfb\\xa5\\xfb\"\n\"\\xd7\\x57\\x1d\\x0e\\xf7\\x34\\xc2\\x21\\x1d\\x79\\x07\\x2d\\x1d\\xf7\\x5d\\x07\\xf7\\x30\\xa7\\x8e\\xa1\\xbb\\x1f\\xcb\\xa9\\xb3\\xc7\\xcf\\x1a\\xb3\\x7d\\xb0\"\n\"\\x71\\xa8\\x1e\\x74\\xa4\\x75\\x98\\x5b\\x9c\\xac\\x9a\\x9a\\x95\\x9a\\x9b\\x08\\xa5\\xa7\\x9c\\xb5\\xb1\\x1a\\xc3\\x67\\xc0\\x50\\xaa\\x1e\\xa3\\x60\\x6a\\x90\"\n\"\\x2a\\x1b\\x5d\\x61\\x15\\x8e\\xa0\\x94\\x8c\\x99\\x1b\\xe9\\xc7\\x57\\x3b\\x3a\\x55\\x5b\\x31\\x7a\\x7f\\x8c\\x90\\x72\\x1f\\x58\\x04\\x90\\xa3\\x95\\x8c\\x9d\"\n\"\\x1b\\xf1\\xcb\\x55\\x33\\x37\\x4d\\x52\\x31\\x73\\x7e\\x8d\\x92\\x6e\\x1f\\x0e\\xd2\\xf7\\x78\\xf8\\xfd\\x15\\xf7\\x44\\x06\\xe0\\x8c\\xac\\x6c\\x8f\\x34\\x9e\"\n\"\\x8c\\x18\\x81\\xf7\\x35\\x05\\xfc\\x8b\\x79\\x06\\x55\\x1d\\x0e\\xf7\\x43\\xf7\\x05\\xf9\\x2a\\x15\\x79\\x07\\xa1\\x8a\\x05\\xc3\\x8a\\x98\\x78\\x3e\\x1a\\xfb\"\n\"\\x64\\x73\\xfb\\x41\\x65\\x49\\x1e\\x5d\\x70\\x6c\\x74\\x67\\x1b\\x6a\\x06\\x84\\xfb\\x54\\x05\\x9d\\x06\\x9f\\xf7\\x0b\\xbd\\xb7\\xf7\\x07\\x8a\\x08\\xf7\\x7d\"\n\"\\x06\\xf7\\x0d\\x8c\\xb9\\x64\\xa2\\xfb\\x10\\x08\\x9d\\x06\\x84\\xf7\\x54\\x05\\x40\\x7c\\x9a\\xd3\\x8a\\x1f\\xf8\\x4e\\x07\\xca\\x9a\\x9e\\xc0\\x8d\\x1e\\xa2\"\n\"\\x8c\\x05\\x9d\\x07\\xfb\\x58\\x5e\\x15\\xfc\\xd0\\xfb\\xb6\\x07\\xbb\\xbd\\x9f\\xc3\\x99\\xf7\\x10\\x08\\x93\\xd5\\x8f\\xe0\\xf7\\x0d\\x1a\\xc9\\x07\\x0e\\xf3\"\n\"\\xf7\\x6e\\x91\\x1d\\xd5\\x9b\\x2e\\x0a\\xfc\\x5b\\x07\\x44\\x8a\\x7b\\x7c\\x41\\x1b\\x79\\xf8\\x94\\x07\\xc4\\xf7\\x3b\\x7b\\x46\\x1d\\x5b\\x86\\x93\\xca\\x1f\"\n\"\\x0e\\xf3\\xf7\\x6d\\xf7\\xdd\\x15\\xf7\\x3a\\xa0\\x0a\\x8c\\x42\\x76\\x70\\x53\\x8c\\x08\\xfb\\x3a\\xf7\\x8d\\xf7\\x2d\\x06\\xf2\\x8d\\xab\\x72\\x96\\x32\\x6c\"\n\"\\x1d\\xfc\\x8a\\x79\\x06\\xc0\\x1d\\xf8\\x94\\x07\\xc4\\xf7\\x3b\\x7b\\x46\\x1d\\x5c\\x8a\\x85\\x94\\xca\\x1a\\x80\\xf9\\x63\\x15\\x71\\x75\\x74\\x70\\x6f\\x9f\"\n\"\\x75\\xa6\\xa7\\x57\\x0a\\xf7\\x5b\\x16\\x71\\x75\\x74\\x70\\x6f\\x9f\\x75\\xa6\\xa7\\x57\\x0a\\x0e\\xf8\\x19\\x7a\\x0a\\xf7\\x91\\x9d\\x07\\x5b\\x8c\\x68\\xa6\"\n\"\\x47\\xe1\\xfb\\x4a\\xf7\\x80\\x18\\xbd\\xcd\\xb7\\xc6\\xb1\\xbe\\xc4\\xdb\\x9d\\x9a\\xc1\\x8f\\x08\\x9e\\xfb\\x56\\x78\\x07\\xae\\x8a\\x96\\x85\\x7b\\x1a\\x66\"\n\"\\x41\\xfb\\x02\\x24\\xfb\\x08\\x1e\\x76\\xf7\\x5e\\x06\\xd1\\x98\\x9a\\xc6\\x1e\\x9d\\xfb\\x78\\x79\\x07\\xc6\\x98\\x7c\\x45\\x1f\\xfb\\x5e\\x76\\x07\\x24\\xf7\"\n\"\\x08\\x41\\xf7\\x02\\xb0\\x1a\\x9c\\x96\\x90\\xae\\x8c\\x1e\\x9e\\xfb\\x56\\x78\\x07\\xc1\\x87\\x9e\\x7c\\xc3\\x3b\\x9c\\x73\\xbe\\x47\\x97\\x7c\\x97\\x7b\\x97\"\n\"\\x7b\\x97\\x7c\\x9b\\x75\\x18\\xfb\\x4a\\xfb\\x80\\x46\\x34\\x69\\x71\\x5b\\x8a\\x19\\x79\\xf7\\x91\\x9d\\x07\\x69\\x8d\\x80\\x91\\x9d\\x1a\\x9a\\x92\\x97\\xba\"\n\"\\xca\\x1e\\xf7\\x16\\xf7\\x4f\\x05\\x0e\\x85\\xb8\\xf8\\x7b\\x15\\x9e\\x06\\xe6\\x96\\xbc\\xba\\xde\\x1b\\xd6\\xb9\\x5f\\x42\\x34\\x56\\x5e\\x25\\x87\\x7f\\x8b\"\n\"\\x8c\\x7f\\x1f\\x5e\\x9a\\x07\\xc5\\xb2\\x84\\x7c\\xa3\\x1f\\xb4\\x72\\xa2\\x5e\\x54\\x1a\\x32\\x51\\x4f\\x34\\x42\\x53\\xb0\\xd9\\x5f\\x1e\\x75\\x7e\\xa1\\x5f\"\n\"\\x98\\x79\\xa4\\x75\\x19\\x61\\xb8\\xc2\\x76\\xce\\x1b\\xf7\\x1b\\xeb\\xda\\xf7\\x03\\xc2\\x75\\xbc\\x63\\xaa\\x1f\\x81\\x0a\\x0e\\x6d\\x0a\\x0e\\xf8\\x61\\xf9\"\n\"\\xec\\x15\\x72\\x7a\\x7b\\x74\\x85\\x8c\\x85\\x8d\\x85\\x1f\\x8f\\x7c\\x8c\\x89\\x86\\x1a\\x7a\\x6b\\x7a\\x6a\\x68\\x6c\\x9c\\x9d\\x8e\\x8c\\x8f\\x8c\\x90\\x1e\"\n\"\\x90\\x9a\\x8c\\x8f\\x93\\x1a\\xa2\\x79\\x9b\\x72\\x6f\\x78\\x78\\x70\\x55\\xca\\x62\\xdf\\xe0\\xca\\xb4\\xc1\\xa6\\x77\\x9e\\x6f\\x1e\\xfb\\x8b\\xfd\\x37\\x6e\"\n\"\\x0a\\x0e\\xf7\\x34\\x70\\x1d\\x0e\\xf7\\x3f\\xf7\\x0f\\x21\\x1d\\x79\\x07\\xd5\\x9b\\x7c\\x45\\x8c\\x1f\\xfb\\x7d\\x07\\xfb\\x3b\\x6f\\x2e\\x59\\x81\\x84\\x8e\"\n\"\\x98\\x79\\x1e\\x98\\x7a\\x7e\\x90\\x7d\\x1b\\x71\\x77\\x75\\x6f\\x67\\xaa\\x74\\xbc\\xca\\xb6\\xaa\\xce\\xa7\\x1f\\xa3\\xc4\\x92\\xbf\\xf7\\x12\\x1a\\xf7\\xb9\"\n\"\\xf7\\x53\\xfc\\x96\\x07\\x45\\x7b\\x7c\\x40\\x1e\\x79\\xf7\\xb3\\x9d\\x07\\x40\\x7c\\x9a\\xd1\\x8a\\x1f\\xf8\\x5b\\x07\\xd2\\x8c\\x9b\\x9a\\xd5\\x1b\\x9d\\x07\"\n\"\\x0e\\xf8\\x12\\xbe\\x0a\\x46\\x8a\\x7c\\x7b\\x43\\x1b\\x79\\xf7\\xaf\\x45\\x1d\\xfb\\x57\\x07\\xfb\\x6b\\xfc\\x7f\\xfb\\x74\\xf8\\x7f\\x05\\xfb\\x53\\x79\\x06\"\n\"\\x2d\\x1d\\xf7\\x7c\\x60\\x0a\\xf8\\x3a\\x07\\x0e\\xca\\x1d\\xf7\\xb2\\x9d\\x07\\x41\\x7b\\x9a\\xd2\\x1f\\xf8\\x5b\\x76\\x0a\\x81\\x1d\\x97\\xf9\\x2a\\x15\\x79\"\n\"\\x07\\xd5\\x9b\\x2e\\x0a\\xfc\\x5c\\xae\\x0a\\xf8\\x97\\x07\\xf7\\xc5\\x8a\\x05\\xfc\\x96\\x07\\x45\\x8a\\x7c\\x7c\\x41\\x1b\\x79\\xf7\\xb1\\x45\\x1d\\x07\\x0e\"\n\"\\xbc\\x83\\x0a\\x2d\\x1d\\xf7\\xb4\\x60\\x0a\\xf8\\x93\\x04\\x93\\xa1\\x99\\x8d\\xa1\\x1b\\xe0\\xc3\\x51\\x35\\x36\\x56\\x54\\x3b\\x74\\x7c\\x8e\\x96\\x6f\\x1f\"\n\"\\x0e\\xf7\\x34\\xf8\\xfd\\xf7\\x2f\\x15\\x3b\\x4e\\x43\\x65\\x30\\x1b\\xfb\\x25\\x2e\\xf7\\x05\\xf7\\x46\\xf7\\x4c\\xe8\\xf7\\x0c\\xf7\\x22\\xc7\\xc3\\x74\\x60\"\n\"\\xb6\\x1f\\xae\\x68\\x9c\\x66\\x93\\x52\\x9d\\x8d\\x18\\x85\\xf7\\x73\\x05\\x76\\x06\\x6f\\x87\\x82\\x7f\\x7a\\x1b\\x81\\x8a\\x8b\\x9e\\x63\\x1f\\x9d\\x64\\x59\"\n\"\\x95\\x58\\x1b\\xfb\\x55\\xc0\\x0a\\xf7\\x4c\\xf4\\xed\\xc3\\xea\\xcb\\x1f\\x0e\\xf3\\xf7\\x36\\x16\\xf7\\xb3\\x9d\\x06\\x40\\x7b\\x9a\\xd2\\x1f\\xf8\\x92\\xe4\"\n\"\\x07\\xe0\\x8c\\xac\\x6c\\x8f\\x37\\x9e\\x8d\\x18\\x81\\xf7\\x34\\x05\\xfc\\xb5\\x3f\\x0a\\xe4\\xfc\\x92\\x06\\x44\\x7b\\x7c\\x40\\x1e\\x0e\\xf7\\x5d\\x75\\x1d\"\n\"\\x0e\\xf7\\xaf\\xf7\\xea\\xf8\\xe2\\x15\\xfb\\x50\\x79\\xfb\\x15\\x22\\xfb\\x1c\\x1a\\xfb\\x1c\\xf7\\x18\\x20\\xf7\\x4d\\x7b\\x1e\\x7f\\x07\\x8c\\x52\\x7f\\x7f\"\n\"\\x52\\x89\\x74\\x8a\\x18\\x79\\xf7\\xb3\\xdb\\x1d\\xf7\\x4e\\x9b\\xf7\\x17\\xf6\\xf7\\x1c\\x1a\\xf7\\x1c\\xfb\\x14\\xf4\\xfb\\x51\\xd5\\x1d\\xfb\\xb3\\xb8\\x0a\"\n\"\\x61\\x92\\x72\\x94\\x6f\\x9c\\x08\\x49\\xb3\\x64\\xd4\\xe0\\x1a\\xf7\\x10\\xd6\\xe2\\xf7\\x11\\xa0\\x1e\\xf4\\x8a\\x15\\xf7\\x13\\x73\\xd4\\x37\\xfb\\x0f\\x1a\"\n\"\\xfb\\x0f\\x40\\x34\\xfb\\x11\\x75\\x1e\\x0e\\x8b\\x1d\\xf7\\xb7\\x9d\\x07\\x50\\x8d\\x78\\x9b\\x46\\xef\\xfb\\x33\\xf7\\x7d\\x18\\xf7\\x16\\xf7\\x3f\\xd7\\xec\"\n\"\\x90\\x8f\\xcb\\x8e\\x19\\x9d\\xfb\\x73\\x79\\x07\\xa6\\x8f\\x8b\\x89\\x92\\x1f\\x9a\\x87\\x96\\x7e\\x7d\\x1a\\x81\\x86\\x81\\x7a\\x75\\x1e\\x90\\x0a\\xcb\\x86\"\n\"\\x9e\\x7d\\xcb\\x2e\\x08\\x0e\\xf9\\x5d\\xfb\\x36\\x15\\x83\\xf7\\x54\\x05\\x41\\x7b\\x9a\\xd3\\x1f\\xf8\\x4e\\x7c\\x0a\\xf8\\x88\\xc7\\x0a\\xf7\\x23\\xf8\\x5c\"\n\"\\xf7\\xdc\\x15\\x93\\x1d\\xfb\\x4e\\x07\\x45\\x8a\\x7c\\x7c\\x40\\x1b\\x79\\xf7\\xb2\\x45\\x1d\\xfb\\xb2\\x79\\x07\\x2f\\x1d\\x0e\\xf8\\x8a\\xf9\\xb7\\xb8\\x15\"\n\"\\xfb\\x8a\\xf8\\x96\\x06\\xb2\\x0a\\xfc\\x96\\xfb\\x8a\\x95\\x0a\\xfa\\x70\\x9d\\x07\\x41\\x7b\\x9a\\xd1\\x1f\\xf8\\x5c\\x4c\\x1d\\x0e\\xf8\\x8a\\xfa\\x7c\\xfb\"\n\"\\x36\\x15\\x84\\xf7\\x54\\x44\\x8a\\x7e\\x96\\x89\\xc6\\x19\\xf8\\x60\\x07\\xd1\\x9b\\x9a\\xc3\\x1d\\xd2\\x9b\\x99\\xc3\\x1d\\xd1\\x3d\\x1d\\x2d\\x1d\\xf9\\xa8\"\n\"\\xc7\\x0a\\xf7\\x5b\\xf7\\x70\\xf8\\xfd\\x15\\xfc\\x96\\xc3\\x0a\\xf7\\x37\\xe3\\xce\\xf7\\x10\\xf7\\x10\\x2d\\xd1\\xfb\\x3b\\x6c\\x77\\x8a\\x86\\x6d\\x1f\\xf7\"\n\"\\x48\\xa2\\x0a\\xf7\\x3c\\xfb\\xaa\\x15\\x90\\xa6\\x9e\\x8d\\x9f\\x1b\\xeb\\xcb\\x4b\\x2c\\x32\\x4c\\x4e\\x31\\x75\\x7b\\x8e\\x94\\x68\\x1f\\x0e\\xf8\\x01\\xf7\"\n\"\\xce\\xf9\\x2a\\x15\\xfb\\xb2\\x79\\x06\\xd5\\x9b\\x2e\\x0a\\xfc\\x5c\\x4f\\x0a\\xf7\\x48\\x39\\x0a\\x31\\xfb\\xc5\\x57\\x1d\\xf7\\xe1\\xf8\\xe7\\x15\\x2f\\x1d\"\n\"\\xfc\\x5c\\xb0\\x1d\\x07\\x0e\\xce\\xf7\\xc1\\x21\\x1d\\xfb\\xb2\\x79\\x06\\xd5\\x9b\\x2e\\x0a\\xfc\\x5c\\x4f\\x0a\\xf7\\x48\\x39\\x0a\\x31\\xfb\\xc5\\x57\\x1d\"\n\"\\x0e\\xf7\\x2d\\xf8\\x91\\xf7\\xcf\\x15\\xfb\\x42\\x84\\x32\\x23\\xfb\\x22\\x1b\\x2f\\x43\\xb1\\xdb\\x4f\\x1f\\x7a\\x80\\x05\\x2c\\xca\\xee\\x53\\xf4\\x1b\\xf7\"\n\"\\x4c\\xf7\\x29\\xf7\\x2b\\xf7\\x4f\\xf7\\x51\\xfb\\x2d\\xf7\\x29\\xfb\\x55\\x59\\x59\\x81\\x79\\x63\\x1f\\x78\\x64\\x8a\\x8b\\x81\\x1b\\x7a\\x82\\x97\\xa7\\x86\"\n\"\\x1f\\x77\\x06\\x84\\xfb\\x73\\x9e\\x89\\x91\\xbf\\x9a\\xac\\xa8\\xad\\x19\\xbb\\xb6\\xc8\\xa7\\xcb\\x1b\\xf7\\x1b\\xe3\\x24\\xfb\\x3d\\x97\\x1f\\xfb\\x70\\x06\"\n\"\\x53\\x8a\\x76\\xa6\\x8d\\xd4\\x08\\x79\\xfb\\x85\\x9d\\x06\\x89\\xd1\\x9e\\xa5\\xc6\\x8c\\x08\\x0e\\xf8\\x9d\\xf7\\x78\\xf7\\xfc\\x15\\xf7\\x5b\\xaf\\x0a\\xfc\"\n\"\\x5b\\x5c\\x1d\\xf7\\x67\\xf7\\x0b\\x07\\xfb\\x52\\x94\\xf7\\x17\\xfb\\x18\\xf7\\x47\\x1b\\xf7\\x48\\xf7\\x1a\\xf7\\x24\\xf7\\x56\\xf7\\x57\\xfb\\x1c\\xf7\\x23\"\n\"\\xfb\\x4b\\xfb\\x3e\\xfb\\x14\\xfb\\x12\\xfb\\x4b\\x7b\\x1f\\xf7\\xcd\\xf7\\xa2\\x15\\xf7\\x0d\\x6d\\x1d\\x3a\\x86\\x0a\\xf7\\x34\\xf8\\x4d\\xf7\\xcb\\x15\\xfb\"\n\"\\x63\\x07\\x8a\\x45\\x7c\\x7c\\x43\\x8a\\x08\\x79\\xf7\\xb0\\x9d\\x07\\x40\\x7b\\x9a\\xd2\\x1f\\xf8\\x5a\\x07\\xd2\\x8c\\x9a\\x9a\\xd6\\x1b\\x9d\\xfb\\xa8\\x07\"\n\"\\x4f\\x6e\\x88\\x83\\x70\\x1f\\x41\\x76\\x5b\\x4d\\x40\\x1a\\x5c\\xa0\\x5d\\xae\\x6b\\x1e\\xa5\\x74\\xa1\\x80\\xbd\\x7d\\xfb\\x2d\\xfb\\x5d\\x18\\x42\\x2e\\x80\"\n\"\\x83\\x4f\\x8c\\x08\\x78\\xf7\\x41\\x07\\xf7\\x80\\xf7\\xcb\\x05\\xbf\\xae\\x15\\x79\\x06\\xfb\\x06\\x46\\xc0\\xe2\\xdb\\xc4\\xc2\\xdf\\x9f\\x98\\x89\\x82\\xa6\"\n\"\\x1f\\x0e\\x52\\x9a\\xf9\\x2a\\x15\\x79\\x07\\x55\\x1d\\xf8\\x97\\xf7\\x8a\\xf7\\x42\\x79\\x07\\x75\\x29\\x62\\x6d\\xfb\\x04\\x8a\\x08\\x0e\\xf7\\x89\\xf7\\xd6\"\n\"\\xf8\\xfa\\x15\\xf7\\x1d\\x06\\xe0\\x8c\\xad\\x6c\\x8e\\x37\\x9e\\x8d\\x18\\x82\\xf7\\x34\\x05\\xfc\\xb1\\x3f\\x0a\\xaf\\xfc\\x92\\x06\\x44\\x7b\\x7c\\x40\\x1e\"\n\"\\x79\\xf7\\x58\\xf7\\xc9\\x07\\xa3\\xc7\\xa4\\x91\\xb1\\x1b\\xe7\\xb5\\x53\\xfb\\x0f\\x2c\\x70\\x52\\x5c\\x75\\x80\\x95\\x9f\\x90\\x8b\\x8d\\x8c\\x91\\x1f\\x8c\"\n\"\\x8f\\x8b\\x8e\\x8e\\x1a\\xa2\\x79\\x9c\\x72\\x6e\\x77\\x76\\x6d\\x5e\\xb7\\x70\\xd3\\xc4\\xb7\\x9c\\xad\\xac\\x1e\\xb3\\xb3\\xa2\\xc6\\xc6\\x1a\\xf7\\x0a\\x32\"\n\"\\xd8\\xfb\\x1b\\x56\\x64\\x82\\x72\\x52\\x1e\\x0e\\xd2\\xf7\\x75\\xf8\\xfd\\x15\\xf7\\x44\\x06\\xe0\\x8c\\xac\\x6c\\x8f\\x34\\x9e\\x8c\\x18\\x81\\xf7\\x35\\x05\"\n\"\\xfc\\x8b\\x79\\x06\\x55\\x1d\\xae\\xf8\\xfd\\x5b\\x0a\\x98\\x95\\x98\\x9b\\x1a\\x9f\\x7d\\x97\\x76\\x7b\\x44\\x0a\\x0e\\xf7\\x2d\\xf8\\x65\\xf7\\x6e\\x15\\xf7\"\n\"\\x85\\x79\\x07\\x8c\\x42\\x77\\x70\\x52\\x8c\\x08\\xfb\\x6f\\x06\\xf7\\x3c\\x95\\xe5\\xf3\\xf7\\x1a\\x1b\\xc7\\xc3\\x74\\x60\\xb6\\x1f\\xae\\x68\\x9d\\x66\\x92\"\n\"\\x52\\x9d\\x8d\\x18\\x85\\xf7\\x73\\x05\\x76\\x06\\x6f\\x87\\x82\\x7f\\x7a\\x1b\\x81\\x8a\\x8b\\x9e\\x63\\x1f\\x9d\\x64\\x59\\x95\\x59\\x1b\\xfb\\x56\\xc0\\x0a\"\n\"\\xf7\\x4b\\xf7\\x03\\xe5\\xbd\\xf0\\xce\\x1f\\x7a\\x96\\x05\\x3b\\x4f\\x42\\x65\\x30\\x1b\\x35\\x44\\xb4\\xd5\\x62\\x1f\\x71\\xb8\\x80\\xba\\x88\\xd2\\x08\\xf7\"\n\"\\x70\\x06\\xc6\\x8a\\x9e\\x72\\x89\\x44\\x08\\x0e\\xbc\\xf4\\x16\\x9f\\x92\\x93\\x92\\x9b\\x1b\\x94\\x98\\x88\\x86\\x9a\\x1f\\x71\\xdd\\x8b\\x8b\\xb2\\x1b\\xf7\"\n\"\\x06\\xdd\\xd7\\xf6\\xd8\\x5c\\xc9\\x25\\xc6\\x1f\\x3e\\xb7\\x05\\x4c\\xaf\\x69\\xb4\\xb3\\x1a\\xbf\\xb7\\xb1\\xc7\\xb1\\xac\\x7e\\x72\\xa3\\x1e\\xa5\\x71\\x9b\"\n\"\\x69\\xa2\\x40\\x08\\x9d\\xf7\\x66\\x77\\x06\\x7a\\x83\\x83\\x84\\x7f\\x1b\\x82\\x88\\x8c\\x98\\x63\\x1f\\x98\\x64\\x75\\x8f\\x6d\\x1b\\x22\\x44\\x45\\x25\\x44\"\n\"\\xb1\\x58\\xe7\\x55\\x1f\\xd9\\x5f\\xa1\\x7e\\xa2\\x79\\x9e\\x78\\x19\\xa7\\x6e\\x96\\x73\\x6c\\x1a\\x4f\\x59\\x5c\\x4a\\x57\\x57\\xa8\\xbb\\x6c\\x1e\\x76\\xaa\"\n\"\\x82\\xa5\\x84\\xc1\\x08\\x77\\xfb\\x74\\x06\\x0e\\xfb\\x42\\x4c\\x0a\\xfb\\x42\\xa2\\xf9\\x18\\x15\\x2f\\x1d\\xfc\\x5c\\x67\\x1d\\xf7\\xb3\\x9d\\x07\\x40\\x7c\"\n\"\\x9a\\xd1\\x8a\\x1f\\xf8\\x5c\\x07\\xd1\\x8c\\x9a\\x9a\\xd6\\x1b\\x9d\\xfb\\xb3\\x07\\xb6\\xf7\\x41\\x3e\\x0a\\xfb\\x0a\\xdb\\xf9\\x18\\x15\\xa1\\x8a\\x05\\xbd\"\n\"\\xa1\\x71\\x51\\x8d\\x1f\\xfc\\x33\\x07\\x37\\x84\\x71\\x75\\x80\\x81\\x94\\x9a\\x84\\x1e\\xb7\\x75\\x7e\\x96\\x6e\\x1b\\x6e\\x76\\x78\\x70\\x5f\\xb6\\x6d\\xc9\"\n\"\\xf2\\xcd\\xd9\\xf7\\x0e\\x1f\\xf8\\x02\\x3c\\x1d\\x9f\\x8c\\x05\\x9d\\xfb\\xb3\\x07\\x0e\\xf8\\x01\\xe7\\x21\\x1d\\x79\\x07\\x2f\\x1d\\xfb\\x7d\\x07\\x20\\x84\"\n\"\\x4c\\x79\\x61\\x1e\\x6c\\x7e\\x78\\x79\\x77\\x1b\\x83\\x81\\x8f\\x91\\x82\\x1f\\x9f\\x70\\x81\\x8f\\x7b\\x1b\\x71\\x77\\x76\\x6e\\x68\\xaa\\x74\\xba\\xca\\xb9\"\n\"\\xad\\xcf\\xa8\\x1f\\xa0\\xbe\\x93\\xc7\\xf7\\x0c\\x1a\\xf7\\xb9\\xf7\\x53\\xfc\\x96\\x07\\x44\\x7b\\x7d\\x40\\x1e\\x79\\xf7\\xb3\\x07\\xf7\\x37\\xe3\\xce\\xf7\"\n\"\\x10\\xf7\\x10\\x2c\\xd1\\xfb\\x3a\\x6c\\x78\\x8a\\x86\\x6c\\x1f\\xf7\\x48\\xba\\x0a\\x07\\x30\\xfb\\xd7\\x15\\x90\\xa4\\xa0\\x8d\\x9f\\x1b\\xea\\xcb\\x4b\\x2c\"\n\"\\x33\\x4d\\x4d\\x32\\x73\\x77\\x8e\\x94\\x6d\\x1f\\x0e\\xf8\\x01\\xf8\\x4c\\xf7\\xcf\\x15\\xfb\\x68\\x07\\x8a\\x61\\x87\\x7a\\x7c\\x7e\\x86\\x87\\x89\\x8a\\x81\"\n\"\\x87\\x08\\x88\\x7c\\x85\\x8a\\x72\\x1b\\x8a\\x79\\xf7\\x9c\\x06\\xf7\\x2a\\xde\\xcc\\xf7\\x0b\\xdb\\x61\\xc0\\x37\\xa6\\x1f\\x99\\x60\\x71\\x8d\\xfb\\x0d\\x1b\"\n\"\\xf7\\x5c\\x07\\xd1\\x9a\\x99\\xcf\\x1e\\x9d\\xfb\\x9c\\x79\\x07\\xcf\\x9b\\x7c\\x45\\x1f\\xfb\\x5b\\xfb\\x91\\xf7\\x5b\\x07\\xd2\\x9a\\x99\\xcf\\x1e\\x9d\\xfb\"\n\"\\x9c\\x79\\x07\\xd0\\x99\\x7c\\x45\\x8c\\x1f\\xfc\\x5c\\x07\\x44\\x8a\\x7d\\x7d\\x46\\x1b\\x79\\xf7\\x9c\\x9d\\x07\\x46\\x7d\\x99\\xd2\\x1f\\xf7\\x68\\x07\\xf7\"\n\"\\xf2\\x16\\xe4\\x91\\x8a\\x7f\\xac\\x1f\\xbb\\x7a\\xab\\x5a\\x51\\x1a\\x39\\x50\\x50\\x3a\\x75\\x77\\x8e\\x94\\x71\\x1e\\x0e\\xf7\\x7e\\xf7\\x47\\xf8\\xfa\\x15\"\n\"\\xfc\\x92\\x07\\x44\\x7b\\x7c\\x40\\x1e\\x79\\xf7\\xb2\\x9d\\x07\\x41\\x7b\\x9a\\xd2\\x1f\\xf7\\x54\\x07\\xb4\\xd9\\x9b\\x90\\xc2\\x1b\\xe9\\xa4\\x6e\\x20\\x1f\"\n\"\\x24\\x07\\x45\\x8a\\x7c\\x7c\\x41\\x1b\\x79\\xf7\\xb2\\x9d\\x07\\x40\\x7c\\x99\\xd2\\x8a\\x1f\\xf2\\x07\\xc6\\x86\\xa1\\x78\\xa9\\x1e\\xb7\\x6f\\x54\\xa0\\x33\"\n\"\\x1b\\x48\\x5e\\x82\\x71\\x49\\x1f\\xf7\\x9f\\xf7\\x38\\x07\\xdf\\x8c\\xad\\x6c\\x8e\\x37\\x9f\\x8d\\x18\\x81\\xf7\\x34\\x05\\xfc\\xcb\\x3f\\x0a\\x0e\\xf7\\x34\"\n\"\\x70\\x1d\\xf7\\x19\\xf8\\xfc\\x15\\x30\\x1d\\x9f\\x98\\x95\\x98\\x7f\\x0a\\x0e\\xf7\\x5d\\x75\\x1d\\xf7\\x4b\\xf7\\x56\\x15\\x72\\x7a\\x7b\\x74\\x85\\x8c\\x85\"\n\"\\x8d\\x85\\x1f\\x8f\\x7c\\x8b\\x8a\\x86\\x1a\\x79\\x6c\\x7a\\x6a\\x69\\x6b\\x9c\\x9d\\x8e\\x8c\\x8f\\x8c\\x90\\x1e\\x8f\\x9a\\x8c\\x90\\x92\\x1a\\xa2\\x7a\\x9b\"\n\"\\x72\\x6f\\x78\\x78\\x70\\x55\\xca\\x62\\xdf\\xdf\\xca\\xb4\\xc1\\xa6\\x78\\x9e\\x6f\\x1e\\x0e\\x4c\\xf8\\x3d\\xd4\\x15\\x7b\\x7a\\x7c\\x84\\x7d\\x1b\\x7b\\x87\"\n\"\\x95\\xb2\\x1f\\xf7\\x6e\\x07\\xed\\x61\\xb5\\x28\\x30\\x3e\\x57\\x4f\\x71\\x9f\\x75\\xa2\\xa1\\x9d\\x9e\\xa2\\xb0\\x8b\\x8d\\x90\\x98\\x1e\\xa3\\x94\\xa3\\x99\"\n\"\\xab\\x1b\\xa8\\xa1\\x7f\\x77\\x96\\x1f\\x94\\x78\\x8d\\x7e\\x57\\x1a\\x76\\x07\\x2f\\x69\\x70\\x7f\\x65\\x76\\x08\\x53\\x6d\\x70\\x63\\x57\\x1a\\x4d\\xb7\\x5b\"\n\"\\xc3\\xb8\\xb2\\x9f\\xbd\\xc3\\x1e\\x5d\\x91\\x9e\\x73\\xab\\x1b\\xb2\\xad\\xa2\\xb9\\xaa\\x1f\\xfb\\x35\\xaf\\x15\\x6d\\x6f\\x71\\x7d\\x6c\\x1b\\x61\\x6e\\xaa\"\n\"\\xb7\\xc2\\xa7\\xa3\\xf7\\x14\\xbf\\x1f\\x0e\\x8d\\xf7\\xac\\xf8\\xc5\\x15\\x8a\\x93\\x91\\x8b\\x8f\\x1b\\xd8\\xad\\xa6\\xd2\\x98\\x1f\\x7e\\x06\\x76\\x84\\x79\"\n\"\\x85\\x52\\x1b\\x84\\x80\\x8b\\x8c\\x7e\\x1f\\x74\\x06\\x48\\x57\\x6f\\x55\\x67\\x1f\\x68\\x54\\x74\\x21\\xfb\\x02\\x1a\\x38\\x99\\x48\\xa5\\x5d\\x1e\\x53\\xab\"\n\"\\xc7\\x69\\xcc\\x1b\\xf7\\x03\\xe3\\xf5\\xf7\\x19\\xf7\\x17\\x3b\\xe9\\xfb\\x04\\x48\\x5b\\x6a\\x3e\\x60\\x1f\\x96\\xd7\\x90\\xa0\\x97\\xa4\\x08\\xc7\\xa6\\xb8\"\n\"\\xab\\xc5\\x1b\\x7e\\xfb\\x1f\\x15\\xd0\\xba\\x33\\xfb\\x18\\x21\\x64\\x47\\x4f\\x40\\x5c\\xde\\xf7\\x1a\\xc5\\x91\\xac\\x9b\\xaa\\x1f\\xb0\\x9f\\xa6\\x9d\\xaf\"\n\"\\x1b\\x0e\\x68\\xa9\\xf8\\x56\\x29\\x1d\\xbe\\x88\\x8f\\x83\\x8d\\x2e\\x08\\xfb\\x64\\x07\\x8a\\x2e\\x86\\x83\\x58\\x88\\x08\\x7a\\x7a\\xf7\\x31\\x06\\xf7\\x02\"\n\"\\x9e\\x8d\\x9a\\xad\\x1f\\xb8\\x9f\\xa7\\xb4\\xb9\\x1a\\xc1\\x6d\\xac\\x48\\xa1\\x1e\\xa4\\x96\\x95\\x91\\x97\\x97\\x08\\x9e\\x9e\\x97\\xa7\\xa5\\x1a\\xb1\\x72\"\n\"\\xaf\\x61\\xa1\\x1e\\x9a\\x6d\\x72\\x8f\\x48\\x1b\\x6b\\x6e\\x15\\x8d\\x99\\x92\\x8c\\x95\\x1b\\xca\\xb4\\x68\\x55\\x53\\x67\\x6b\\x4d\\x7f\\x83\\x8c\\x8e\\x7a\"\n\"\\x1f\\x68\\x04\\x8f\\x9b\\x93\\x8c\\x97\\x1b\\xd2\\xb7\\x66\\x4f\\x52\\x60\\x64\\x4d\\x7b\\x81\\x8c\\x90\\x77\\x1f\\x0e\\x2a\\xf7\\x49\\xf8\\x2f\\x15\\xde\\x06\"\n\"\\xcf\\xab\\x6e\\x44\\x96\\x1f\\x9c\\x06\\x7b\\xf7\\x1f\\x05\\xfb\\xf0\\x7a\\x9c\\x06\\xbe\\x88\\x90\\x83\\x8c\\x2f\\x08\\xfb\\x66\\x07\\x8a\\x30\\x28\\x0a\\xe2\"\n\"\\x1a\\x0e\\x8d\\xf8\\x76\\x26\\x0a\\xfc\\x1b\\x7a\\x99\\x06\\xb5\\x99\\x74\\x46\\x38\\x7e\\xfb\\x06\\x7c\\x5d\\x1f\\x5e\\x7d\\x6e\\x74\\x62\\x1b\\x70\\x06\\x82\"\n\"\\xfb\\x21\\x05\\x9c\\x06\\x94\\xda\\xab\\xac\\xce\\x8a\\x08\\xf7\\x74\\x06\\xcd\\xad\\x69\\x3e\\x93\\x1f\\x9c\\x06\\x82\\xf7\\x21\\x05\\x67\\x06\\x6e\\x8a\\x87\"\n\"\\x8f\\xab\\x1a\\xf7\\x9d\\x07\\xe3\\x93\\x99\\xbc\\x8c\\x1e\\x9b\\x06\\xfb\\x2c\\xfc\\x1e\\x15\\xfb\\x51\\x06\\xb3\\xab\\x9b\\xf2\\xf7\\x81\\x1a\\xf7\\x19\\x06\"\n\"\\x0e\\x4c\\xf8\\x20\\x72\\x0a\\x0e\\x4c\\xf8\\x1e\\x72\\x0a\\xfb\\x25\\xf7\\xd0\\x53\\x0a\\xf7\\x2d\\xc4\\x1d\\xf7\\x4c\\x7d\\x0a\\xf7\\x5b\\x9c\\x85\\x06\\x67\"\n\"\\x6f\\x9d\\xbd\\x64\\x1f\\xfb\\x19\\xf7\\x3a\\xf7\\x01\\xf7\\x0f\\xb1\\xb6\\xad\\x9c\\xb8\\x8a\\x19\\x9c\\xfb\\x4b\\x7a\\x94\\x07\\x9d\\x98\\x82\\x7e\\x82\\x87\"\n\"\\x82\\x81\\x80\\x1f\\xfb\\x11\\xfb\\x21\\x05\\x71\\xe4\\x06\\x8c\\xe6\\x90\\x94\\xbd\\x8e\\x08\\x9d\\x9c\\xfb\\x77\\x7a\\x9d\\x06\\xbd\\x88\\x90\\x82\\x8d\\x30\"\n\"\\x08\\x32\\x70\\x07\\xfb\\x11\\xf7\\x21\\x05\\x82\\x96\\x87\\x93\\x95\\x1a\\x99\\x96\\x93\\x9e\\x1e\\x94\\x9c\\xfb\\x4b\\x7a\\x06\\xb8\\x8c\\xad\\x7a\\xb1\\x60\"\n\"\\xf7\\x02\\xfb\\x0f\\x18\\xfb\\x19\\xfb\\x3a\\x05\\x5a\\x64\\x6e\\x78\\x69\\x1b\\x83\\x7a\\xf7\\x5b\\x9c\\x79\\x06\\x80\\x84\\x90\\x93\\x92\\x8e\\x92\\x92\\x94\"\n\"\\x1f\\xf7\\x10\\xf7\\x31\\x05\\x0e\\xfb\\x04\\xc0\\xf7\\xcd\\x15\\xd7\\x97\\xb2\\xb3\\xcb\\x1b\\xc3\\xae\\x6a\\x58\\x5b\\x67\\x6a\\x58\\x1f\\x6b\\x66\\x06\\x8c\"\n\"\\x92\\x8f\\x8b\\x91\\x1b\\xb5\\xa3\\x84\\x7a\\x9d\\x1f\\x9e\\x79\\x96\\x71\\x70\\x1a\\x52\\x5f\\x63\\x4b\\x54\\x62\\xa2\\xc2\\x5d\\x1e\\x79\\x7f\\x05\\x3d\\xbd\"\n\"\\xbe\\x6c\\xdb\\x1b\\xef\\xd7\\xc4\\xd8\\xad\\x7d\\xab\\x73\\xa1\\x1f\\x92\\x1d\\x0e\\xa7\\x76\\x1d\\x0e\\xa7\\xf8\\x05\\xf9\\x05\\x15\\x78\\x7d\\x7c\\x77\\x85\"\n\"\\x8c\\x88\\x8e\\x7f\\x1f\\x8d\\x84\\x8c\\x84\\x88\\x1a\\x79\\x69\\x7b\\x63\\x60\\x6a\\x9c\\xa2\\x8f\\x8c\\x8f\\x8d\\x91\\x1e\\x8e\\x92\\x8c\\x8f\\x92\\x1a\\x9f\"\n\"\\x7d\\x9a\\x78\\x76\\x7c\\x7c\\x74\\xbc\\x0a\\x42\\xfb\\x43\\x29\\x1d\\xb0\\x8c\\x9b\\x7b\\x8d\\x68\\xfb\\x5d\\xfb\\xa0\\x18\\xf7\\x6a\\x07\\xe3\\x93\\x9a\\xbc\"\n\"\\x8c\\x5d\\x1d\\x9c\\x7b\\x06\\x66\\x7c\\x98\\xb0\\x88\\x1f\\xf7\\x5d\\xf7\\x9d\\x05\\xfb\\x67\\x07\\x8a\\x2f\\x28\\x0a\\xe3\\x1a\\x56\\x0a\\x06\\x0e\\x76\\x72\"\n\"\\x1d\\x0e\\x83\\xcf\\x26\\x0a\\x7a\\x97\\x07\\xc2\\x98\\x77\\x34\\xfb\\x44\\x76\\x2f\\x63\\x84\\x84\\x8e\\x91\\x80\\x1f\\x92\\x7e\\x82\\x8e\\x82\\x1b\\x73\\x78\"\n\"\\x78\\x75\\x6e\\xa3\\x79\\xb1\\xe9\\xb0\\xe8\\xf7\\x7e\\x9c\\x8b\\x9b\\x8a\\xc9\\x1f\\xf7\\x1a\\xfb\\xb6\\x06\\xa2\\x1d\\xf7\\x12\\xf8\\x61\\xf7\\xfb\\x15\\xfb\"\n\"\\x82\\xca\\x0a\\xf7\\x76\\x9c\\x7c\\x06\\x59\\x8c\\x83\\x9a\\x8c\\xe3\\x08\\xf7\\x64\\x07\\x8a\\xe3\\x93\\x9a\\xbd\\x8c\\x08\\x9a\\x9c\\xfb\\x25\\x06\\xfb\\x26\"\n\"\\xfb\\xe6\\xfb\\x21\\xf7\\xe6\\x05\\xfb\\x34\\x7a\\x95\\x06\\xbf\\x8a\\x9d\\x78\\x8a\\x56\\x08\\xfb\\xa6\\x07\\x8c\\x59\\x79\\x79\\x57\\x8a\\x08\\x81\\x7a\\xf7\"\n\"\\x43\\x9c\\x82\\x06\\x5f\\x8c\\x7d\\x9c\\x8d\\xbe\\x08\\xf7\\xa3\\x07\\xf7\\x31\\xfb\\xfc\\x05\\x9a\\x06\\x0e\\xa7\\xf7\\x34\\x88\\x1d\\xf7\\x76\\x45\\x0a\\xf7\"\n\"\\x65\\x9e\\x0a\\x84\\xf7\\x93\\xf8\\x5d\\x15\\x4e\\x5c\\x78\\x5e\\x5f\\x1f\\x5e\\x5f\\x72\\x4c\\x48\\x1a\\xfb\\x15\\xe7\\x2a\\xf7\\x0e\\xf7\\x0e\\xec\\xf5\\xf7\"\n\"\\x19\\xf7\\x16\\x32\\xea\\xfb\\x0e\\x1e\\x7e\\x68\\x15\\xdb\\xc2\\x32\\xfb\\x17\\x22\\xcf\\x1d\\xa7\\x99\\xf8\\x56\\x29\\x1d\\xbe\\x88\\x90\\x83\\x8c\\x2f\\x08\"\n\"\\xfb\\x65\\x07\\x8a\\x2f\\x28\\x0a\\xe3\\x1a\\xf7\\xb6\\xf7\\x5f\\xfb\\xb6\\x07\\xa2\\x1d\\x84\\xf7\\x3a\\xa4\\x15\\x73\\xb2\\xa2\\x83\\xac\\x1b\\xf7\\x04\\xec\"\n\"\\xf7\\x03\\xf7\\x16\\xf7\\x0e\\x40\\xf0\\x32\\x59\\x68\\x75\\x49\\x54\\x1f\\xe9\\x07\\x46\\x6a\\x80\\x86\\x42\\x6d\\x91\\x7d\\x18\\x95\\x8e\\x05\\x8e\\x92\\x91\"\n\"\\x8c\\x91\\x1b\\xa8\\x95\\x7a\\x57\\x1f\\xfb\\xfa\\x07\\x88\\x65\\x89\\x6f\\x8b\\x8b\\x89\\x84\\x19\\x74\\x83\\x7e\\x83\\x6c\\x1b\\x79\\x7a\\xf7\\x77\\x9c\\x7f\"\n\"\\x06\\x5a\\x8c\\x82\\x9a\\x8a\\xe3\\x08\\xf7\\xfd\\x04\\xbf\\xb6\\x9b\\x96\\xb0\\x1b\\xd2\\xba\\x44\\xfb\\x01\\x23\\x5a\\x42\\x44\\x6c\\x6d\\x9a\\xa2\\x7b\\x1f\"\n\"\\x7d\\x9f\\x88\\x9f\\xbe\\x1a\\x0e\\x4c\\xf8\\x20\\xf7\\x49\\x15\\x46\\x72\\x5a\\x65\\x4a\\x1b\\x37\\x56\\xd0\\xf7\\x01\\xf1\\xb8\\xcd\\xd0\\xb1\\x9c\\x7b\\x61\"\n\"\\x91\\x1f\\x69\\x90\\x9c\\x7a\\xab\\x1b\\xa7\\x9f\\x9d\\xa4\\xc4\\x47\\xb9\\x39\\xfb\\x0f\\x34\\x29\\xfb\\x1e\\x4d\\x9c\\x56\\xaa\\x63\\x1f\\x5e\\xae\\xc2\\x6f\"\n\"\\xc0\\x1b\\xe1\\xca\\xc9\\xf7\\x0a\\xaf\\x1f\\x0e\\x45\\xf7\\x97\\xf8\\x2f\\x15\\xb0\\x06\\xcc\\x8c\\xaa\\x6f\\x99\\x42\\x08\\x9a\\x06\\x7f\\xf7\\x1f\\x05\\xfc\"\n\"\\x10\\x58\\x0a\\x98\\xd6\\xa8\\xa3\\xdb\\x8c\\x08\\xa5\\xfb\\xb6\\x06\\x8a\\x2f\\x86\\x82\\xab\\x0a\\x84\\x74\\x1d\\x0e\\xf7\\x21\\xf8\\x47\\xfb\\x34\\x15\\x9c\"\n\"\\x7e\\x07\\x5a\\x8c\\x82\\x9b\\x8a\\xe2\\x08\\xb9\\x07\\x81\\xad\\x9f\\x87\\x9d\\x1b\\xee\\xe0\\xf7\\x02\\xf7\\x15\\xf7\\x15\\x41\\xe9\\x26\\x77\\x7c\\x89\\x83\"\n\"\\x5d\\x1f\\xf7\\x73\\x07\\x47\\x69\\x80\\x86\\x42\\x6e\\x91\\x7c\\x18\\x91\\x9a\\x92\\x8c\\x95\\x1b\\x95\\x97\\x86\\x85\\x90\\x1f\\x93\\x80\\x8c\\x84\\x64\\x1a\"\n\"\\x37\\x07\\x97\\x5a\\x7d\\x8d\\x77\\x1b\\x30\\x38\\xfb\\x03\\xfb\\x0f\\xfb\\x13\\xda\\x27\\xf0\\x9d\\xa7\\x8f\\x93\\xaa\\x1f\\x5f\\x07\\x89\\x65\\x89\\x70\\x8b\"\n\"\\x89\\x88\\x85\\x19\\x74\\x83\\x7e\\x83\\x6c\\x1b\\x79\\x7a\\x06\\xf7\\x2f\\xf8\\xc7\\x15\\x9a\\xa2\\x96\\x8f\\x9f\\x1b\\xd1\\xb6\\x36\\xfb\\x1b\\xfb\\x01\\x67\"\n\"\\x4a\\x50\\x73\\x7a\\x92\\xa2\\x6c\\x1f\\x3d\\x7f\\x15\\x7e\\x75\\x7d\\x86\\x77\\x1b\\x47\\x5f\\xdb\\xf7\\x10\\xf7\\x0e\\xad\\xcf\\xc9\\xa4\\x9c\\x83\\x71\\xa9\"\n\"\\x1f\\x0e\\x84\\xf7\\xd0\\xf7\\xd5\\x15\\xcf\\xef\\x94\\x93\\xbb\\x90\\x08\\x90\\x9b\\xfb\\x35\\x7b\\x93\\x06\\xa0\\x9a\\x83\\x7f\\x8a\\x1f\\x83\\x86\\x7f\\x83\"\n\"\\x7f\\x1e\\x52\\x39\\x63\\xcb\\x05\\x7e\\x9e\\x81\\xa3\\x95\\x1a\\x95\\x98\\x92\\x9c\\x1e\\x92\\x9b\\xfb\\x5c\\x7b\\x93\\x06\\xb8\\x87\\x8c\\x8a\\xdb\\xfb\\x15\"\n\"\\xb8\\x42\\x18\\x47\\x21\\x54\\x34\\x7f\\x7f\\x65\\x86\\x19\\x78\\x8a\\x05\\x7b\\xf7\\x3a\\x9c\\x80\\x07\\x77\\x80\\x91\\x97\\x93\\x8d\\x90\\x9f\\xab\\x1f\\xce\"\n\"\\xf7\\x01\\xcf\\xfb\\x02\\x05\\x97\\x79\\x91\\x7c\\x82\\x1a\\x7e\\x80\\x84\\x75\\x1e\\x83\\x7a\\xf7\\x62\\x9c\\x84\\x06\\x5f\\x8d\\x7c\\x9d\\xfb\\x20\\xf7\\x76\"\n\"\\x08\\x0e\\xa7\\xf8\\x9e\\xfb\\x03\\x15\\x81\\xf7\\x21\\x05\\x8a\\x85\\x85\\x8b\\x89\\x1b\\x5f\\x84\\x9a\\xe3\\x1f\\xf7\\x59\\x07\\xa7\\x0a\\xfb\\xb6\\xfb\\x5e\"\n\"\\xf7\\xb6\\x07\\xa7\\x0a\\xfb\\x65\\x07\\x8a\\x2f\\x86\\x83\\x58\\x88\\x08\\x7a\\x7a\\xf8\\x14\\x06\\xd1\\x88\\xa8\\x6e\\x94\\x3c\\x08\\x0e\\x87\\xf7\\xe0\\xf7\"\n\"\\x0d\\x15\\x8a\\x2f\\x86\\x82\\x58\\x88\\x08\\x6c\\x7a\\xf7\\x84\\x45\\x0a\\x56\\x0a\\xfb\\x70\\x7a\\x96\\x06\\x87\\x1d\\x0e\\xf7\\x9b\\xf9\\x86\\x16\\x9c\\x7b\"\n\"\\x07\\x5a\\x8c\\x83\\x99\\xe3\\x1a\\xf7\\x62\\x07\\xe6\\x38\\x0a\\xfb\\x69\\x7a\\x96\\x06\\xb7\\x86\\x8f\\x82\\x8d\\x31\\x08\\xfb\\xb5\\xfb\\x44\\xf7\\xb5\\x6b\"\n\"\\x1d\\x94\\x9c\\xfb\\x69\\x7a\\x96\\x06\\xbe\\x88\\x90\\x82\\x8c\\x2f\\x08\\xfb\\xb5\\xfb\\x46\\xf7\\xb5\\x07\\xe0\\x92\\x9a\\xb7\\x8f\\x1e\\x94\\x9c\\xfb\\x69\"\n\"\\x51\\x0a\\x7a\\x06\\x0e\\xf7\\x9b\\xf9\\x88\\xfb\\x03\\x15\\x83\\xf7\\x20\\x05\\x7f\\x06\\x5a\\x8d\\x83\\x94\\xc8\\x1a\\xf7\\x75\\x07\\xe6\\x38\\x0a\\xfb\\x69\"\n\"\\x7a\\x96\\x06\\xb7\\x86\\x8f\\x82\\x8d\\x31\\x08\\xfb\\xb5\\xfb\\x44\\xf7\\xb5\\x6b\\x1d\\x94\\x9c\\xfb\\x69\\x7a\\x96\\x06\\xbe\\x88\\x90\\x82\\x8c\\x2f\\x08\"\n\"\\xfb\\xb5\\xfb\\x46\\xf7\\xb5\\x07\\xe0\\x92\\x9a\\xb7\\x8f\\x1e\\x94\\x9c\\xfb\\x69\\x51\\x0a\\x7a\\xf8\\xea\\x06\\xdf\\x8e\\xac\\x6e\\x95\\x36\\x08\\x0e\\x95\"\n\"\\xf7\\xcd\\x26\\x0a\\xfb\\xba\\x58\\x0a\\x9d\\xd7\\xa6\\xa4\\xce\\x8a\\x08\\xa6\\xfb\\xb6\\x06\\x89\\x2f\\x86\\x82\\x59\\x88\\x08\\x79\\x7a\\xf7\\x74\\x06\\xf7\"\n\"\\x08\\xd3\\xbd\\xdd\\xd8\\x40\\xbe\\xfb\\x05\\x77\\x7c\\x8a\\x88\\x68\\x1f\\xd5\\x07\\xe3\\x92\\x99\\xbd\\x8c\\x1e\\x9b\\x06\\x42\\xfb\\x61\\x15\\x8d\\x9c\\x93\"\n\"\\x8b\\x98\\x1b\\xde\\xd8\\x1d\\x0e\\xf7\\x39\\xa0\\xf8\\x56\\x29\\x1d\\xbe\\x88\\x90\\x82\\x8c\\x30\\x08\\xfb\\x65\\x47\\x1d\\xf7\\x74\\x06\\xf7\\x08\\xd2\\xb9\"\n\"\\x0a\\x7c\\x8a\\x88\\x68\\x1f\\xd5\\xac\\x0a\\x42\\xfb\\x72\\x15\\x8d\\x9d\\x92\\x8b\\x99\\x55\\x0a\\xf8\\x72\\x74\\x15\\x7b\\x06\\x5a\\x8c\\x83\\x99\\xe4\\x1a\"\n\"\\xf7\\x64\\x07\\xe4\\x93\\x98\\xbc\\x8d\\x5d\\x1d\\x06\\x0e\\x58\\x9f\\xf8\\x56\\x29\\x1d\\xbe\\x88\\x90\\x82\\x8c\\x30\\x08\\xfb\\x65\\x47\\x1d\\xf7\\x74\\x06\"\n\"\\xf7\\x08\\xd2\\xb9\\x0a\\x7c\\x8a\\x88\\x68\\x1f\\xd5\\xac\\x0a\\x42\\xfb\\x72\\x15\\x8d\\x9d\\x92\\x8b\\x99\\x55\\x0a\\x0e\\x3d\\xa8\\xf7\\xbf\\x15\\x9b\\x06\"\n\"\\xe0\\x9c\\xbb\\xb9\\xd6\\x1b\\xdf\\xb8\\x50\\xfb\\x08\\x8f\\x1f\\xfb\\x50\\x67\\xf7\\x50\\x06\\x8a\\x56\\x85\\x70\\x78\\x6b\\x08\\x5d\\x70\\x62\\x73\\x56\\x1b\"\n\"\\x50\\x61\\xa2\\xc3\\x5b\\x1f\\x7a\\x7e\\x05\\x3b\\xc3\\xbe\\x6d\\xd8\\x1b\\xf7\\x11\\xeb\\xf0\\xf7\\x18\\xf7\\x1c\\x31\\xea\\xfb\\x16\\x72\\x77\\x88\\x83\\x71\"\n\"\\x1f\\x7f\\x63\\x8b\\x8b\\x81\\x1b\\x81\\x86\\x8f\\x97\\x85\\x1f\\x7f\\x06\\x0e\\xf7\\x84\\xf7\\xa6\\xf7\\x6e\\x15\\xfb\\x17\\x8e\\xe4\\x2d\\xf7\\x0d\\x1b\\xf7\"\n\"\\x0f\\xec\\xf5\\xf7\\x1a\\xf7\\x17\\x32\\xe8\\xfb\\x11\\xfb\\x03\\x34\\x39\\xfb\\x0d\\x78\\x1f\\x27\\xd7\\x06\\x95\\x1d\\x07\\xf7\\xc7\\xf7\\x60\\x15\\xdb\\xc2\"\n\"\\x32\\xfb\\x16\\x21\\xcf\\x1d\\x5c\\xf7\\xc1\\xf7\\x0d\\x15\\x89\\x2f\\x87\\x82\\x58\\x88\\x08\\x79\\x7a\\xf7\\x77\\x45\\x0a\\x56\\x0a\\xfb\\x7a\\x06\\x59\\x5e\"\n\"\\x82\\x7c\\x72\\x1f\\x66\\x73\\x77\\x67\\x5d\\x1a\\x42\\xb8\\x66\\xf0\\x82\\x1e\\x69\\x83\\x7b\\x81\\x77\\x6f\\x40\\xfb\\x00\\x18\\x7d\\x78\\x76\\x7f\\x78\\x8c\"\n\"\\x08\\x83\\x7a\\xf7\\x07\\x06\\xf7\\x05\\xf7\\x36\\x05\\xac\\xa3\\x9a\\x95\\xa7\\x1b\\x8f\\x90\\x8b\\x8a\\x97\\x1f\\xa6\\x04\\x86\\x74\\x81\\x8a\\x7a\\x1b\\x41\"\n\"\\x5e\\xaf\\xc6\\xc9\\xb8\\xb3\\xd0\\x9c\\x97\\x89\\x86\\xa5\\x1f\\x0e\\xfb\\x30\\x90\\xf8\\x56\\x29\\x1d\\xbe\\x88\\x90\\x83\\x8c\\x2f\\x08\\xfb\\x66\\x07\\x8a\"\n\"\\x30\\x28\\x0a\\xe2\\x1a\\xf7\\xb7\\xf7\\x53\\xf7\\x16\\x7a\\x07\\x85\\x47\\x79\\x72\\x5f\\x8d\\x08\\x0e\\x73\\xf7\\x36\\xf9\\x30\\x15\\x47\\x69\\x80\\x86\\x41\"\n\"\\x6d\\x92\\x7d\\x18\\x91\\x9a\\x92\\x8c\\x94\\x1b\\x9a\\x97\\x84\\x7e\\x90\\x1f\\x8e\\x83\\x8b\\x8a\\x8c\\x71\\x08\\x2a\\x6e\\xec\\xfc\\x17\\x06\\x33\\x83\\x7c\"\n\"\\x5a\\x8a\\x1e\\x7a\\x7a\\xf7\\x74\\x9c\\x7d\\x06\\x5a\\x8c\\x83\\x9a\\xe3\\x1a\\xf7\\x6e\\x07\\xb6\\xb2\\xab\\x9d\\xb2\\x1b\\xa5\\xa2\\x7e\\x74\\x9b\\x1f\\xa5\"\n\"\\x67\\x93\\x54\\xfb\\x19\\x1a\\xfb\\x2b\\x83\\x49\\x75\\x65\\x1e\\x77\\x80\\x7d\\x82\\x7a\\x1b\\x7a\\x7e\\x97\\x9a\\x8c\\x1f\\x8c\\x9c\\x05\\xa3\\x8c\\x7a\\x9e\"\n\"\\x72\\x1b\\x73\\x7c\\x7b\\x72\\x64\\xb3\\x6d\\xbc\\xf7\\x01\\xcf\\xf7\\x1b\\xf7\\x6e\\xf7\\x4d\\x5d\\xdf\\x25\\x52\\x63\\x76\\x53\\x59\\x1f\\xf7\\x16\\xf7\\x2f\"\n\"\\xa8\\xfb\\x2f\\x07\\x0e\\x2a\\xf7\\x45\\xf8\\x2f\\x15\\xde\\x06\\xcf\\xab\\x6e\\x44\\x96\\x1f\\x9c\\x06\\x7b\\xf7\\x1f\\x05\\xfb\\xf0\\x7a\\x9c\\x06\\xbe\\x88\"\n\"\\x90\\x83\\x8c\\x2f\\x08\\xfb\\x66\\x07\\x8a\\x30\\x28\\x0a\\xe2\\x1a\\xf7\\x0c\\xf8\\x95\\xc8\\x0a\\x3d\\xf8\\x19\\x26\\x0a\\x7f\\x06\\x7f\\x86\\x85\\x87\\x82\"\n\"\\x1b\\x84\\x80\\x8d\\x8e\\x80\\x1f\\x9a\\x5d\\x79\\x8e\\x6b\\x1b\\xfb\\x13\\x31\\x2b\\xfb\\x1b\\xfb\\x18\\xeb\\x26\\xf7\\x11\\xd8\\xbe\\xa9\\xdb\\xc3\\x1f\\x7a\"\n\"\\x98\\x05\\x53\\x5b\\x61\\x74\\x50\\x1b\\x5a\\x65\\x9f\\xb2\\x70\\x1f\\x73\\xad\\x83\\xaa\\x8a\\xc5\\x08\\xf7\\x50\\xaf\\xfb\\x50\\x06\\xf7\\x08\\x8f\\xb8\\xc6\"\n\"\\xdf\\x1b\\xd6\\xbb\\x5e\\x35\\x9c\\x1f\\x9b\\x06\\x0e\\xfb\\x0a\\xdc\\x88\\x15\\x96\\x8d\\x8f\\x8e\\x95\\x1b\\x90\\x8f\\x8a\\x89\\x93\\x1f\\x7e\\xbb\\x9a\\x89\"\n\"\\xa7\\x1b\\xde\\xc5\\xbf\\xd6\\xc3\\x6a\\xb8\\x44\\xb0\\x1f\\x59\\xa6\\x05\\x56\\xa6\\x77\\xa2\\xaa\\x1a\\xac\\xa6\\xa4\\xb1\\xc6\\xb0\\x64\\x41\\x98\\x1e\\x9c\"\n\"\\xf7\\x22\\x79\\x06\\x83\\x87\\x87\\x87\\x85\\x1b\\x88\\x89\\x8b\\x90\\x78\\x1f\\x94\\x6b\\x7d\\x8d\\x76\\x1b\\x3c\\x53\\x56\\x42\\x68\\x99\\x6e\\xa9\\x71\\x1f\"\n\"\\x9d\\x7b\\x8c\\x8a\\xb8\\x73\\xb2\\x75\\x18\\xbc\\x6f\\xa2\\x6f\\x6a\\x1a\\x68\\x6e\\x72\\x65\\x4b\\x62\\xb7\\xe1\\x79\\x1e\\x7a\\xfb\\x36\\x06\\x0e\\xfb\\x79\"\n\"\\xb1\\x0a\\x8e\\x92\\x93\\x8c\\x90\\x1b\\xa8\\x92\\x7e\\x53\\x1f\\xfb\\x5a\\x07\\x8a\\x2f\\x28\\x0a\\xe3\\x1a\\x5e\\xf8\\xa7\\x15\\x6e\\x74\\x75\\x6f\\x6f\\xa2\"\n\"\\x74\\xa8\\xa7\\xa2\\xa2\\xa7\\xa6\\x74\\xa2\\x6f\\x1f\\x0e\\xfb\\x79\\xb1\\x0a\\x8d\\x92\\x93\\x8d\\x90\\x1b\\xa8\\x92\\x7e\\x53\\x1f\\xfb\\x5a\\x07\\x8a\\x2f\"\n\"\\x28\\x0a\\xe3\\x1a\\xfb\\x0a\\xf8\\x8d\\x53\\x0a\\xf7\\x2c\\xc4\\x1d\\xfb\\x79\\xf7\\x55\\xf8\\x63\\x15\\x47\\x69\\x80\\x87\\x41\\x6d\\x92\\x7d\\x18\\x96\\x8e\"\n\"\\x05\\x8d\\x91\\x93\\x8d\\x91\\x1b\\xa8\\x92\\x7e\\x53\\x1f\\xfb\\xd3\\x07\\x34\\xea\\x1d\\x75\\x7c\\x93\\x7b\\x1b\\x74\\x79\\x79\\x76\\x6e\\xad\\x76\\xb9\\xc8\"\n\"\\xc0\\xa9\\xbc\\xa6\\x1f\\x9c\\xac\\x8f\\xa4\\xe1\\x1a\\x5d\\xf8\\xde\\x53\\x0a\\x0e\\xf7\\x70\\xf8\\x3f\\xf7\\xde\\x15\\xe3\\x93\\x99\\xbc\\x8c\\x1e\\x9b\\x9c\"\n\"\\xfc\\x22\\x7a\\x97\\x06\\xc2\\x98\\x77\\x35\\xfb\\x46\\x77\\x30\\x63\\x83\\x85\\x8d\\x92\\x7f\\x1f\\x92\\x7d\\x83\\x8e\\x83\\x1b\\x72\\x78\\x79\\x74\\x6e\\xa3\"\n\"\\x79\\xb1\\xe9\\xb0\\xe7\\xf7\\x80\\x9c\\x8b\\x95\\x8a\\xce\\x1f\\xf7\\x1a\\xfb\\xb6\\x06\\x51\\x1d\\x7a\\x7a\\xf7\\x73\\x06\\xf7\\x09\\xd2\\xbd\\xdd\\xd8\\x40\"\n\"\\xbe\\xfb\\x05\\x76\\x7d\\x8a\\x88\\x68\\x1f\\x6f\\x04\\x8d\\x9d\\x93\\x8b\\x97\\x1b\\xde\\xbb\\x65\\x49\\x52\\x5f\\x67\\x45\\x7a\\x7c\\x8d\\x90\\x74\\x1f\\x0e\"\n\"\\xf7\\x6c\\xf8\\x0a\\xf7\\x92\\x15\\xfb\\x6b\\xd7\\x06\\xe2\\x60\\x1d\\x90\\x82\\x8c\\x30\\x08\\xfb\\x65\\x07\\x8a\\x2f\\x3e\\x1d\\x5a\\x8d\\x83\\x99\\xe3\\x1a\"\n\"\\xec\\xf7\\x6b\\x2a\\x47\\x1d\\xf7\\x74\\x06\\xf7\\x07\\xd3\\xbd\\xdd\\xd8\\x40\\xbe\\xfb\\x06\\x78\\x7b\\x8a\\x88\\x69\\x1f\\xd5\\x07\\xe2\\x93\\x99\\xbc\\x8d\"\n\"\\x1e\\x9b\\x9c\\xfb\\x76\\x7a\\x9d\\x06\\xbd\\x88\\x90\\x82\\x8c\\x30\\x08\\xda\\x25\\x15\\x8d\\x9c\\x92\\x8b\\x9a\\x55\\x0a\\x0e\\x84\\xf7\\x34\\xf8\\xad\\x15\"\n\"\\xf7\\x17\\x07\\x47\\x69\\x80\\x86\\x41\\x6d\\x92\\x7d\\x18\\x91\\x9a\\x92\\x8c\\x94\\x1b\\xa4\\x95\\x7e\\x67\\x8c\\x1f\\x85\\x2a\\x6e\\xec\\xfc\\x17\\x07\\x33\"\n\"\\x83\\x7c\\x5a\\x8a\\x1e\\x7a\\x7a\\xf7\\x74\\x9c\\x7d\\x06\\x5a\\x8c\\x83\\x9a\\xe3\\x1a\\xf7\\x6c\\x07\\xba\\xbd\\xa9\\x9b\\xad\\x1b\\xa6\\xa6\\x78\\x71\\x93\"\n\"\\x1f\\x91\\x7b\\x8e\\x6f\\x6e\\x1a\\xfb\\x35\\x07\\x33\\x83\\x7c\\x5b\\x8a\\x1e\\x80\\x7a\\xf7\\x68\\x9c\\x81\\x06\\x5a\\x8c\\x84\\x9a\\xe3\\x1a\\xf7\\x35\\x07\"\n\"\\xc5\\x86\\xaa\\x7c\\xa9\\x1e\\xad\\x7b\\x66\\xa1\\x64\\x1b\\x57\\x67\\x77\\x4a\\x4b\\x1f\\xf7\\x1c\\xf7\\x2f\\xa8\\x07\\x0e\\x76\\x72\\x1d\\xf7\\x5f\\xf8\\x94\"\n\"\\xc8\\x0a\\x84\\x74\\x1d\\xf7\\x88\\xf7\\xe3\\x15\\x78\\x7d\\x7c\\x77\\x85\\x8c\\x86\\x8e\\x81\\x1f\\x8d\\x83\\x8c\\x86\\x87\\x1a\\x79\\x69\\x7b\\x63\\x60\\x6a\"\n\"\\x9c\\xa2\\x90\\x8c\\x8e\\x8d\\x91\\x1e\\x8d\\x91\\x8c\\x90\\x92\\x1a\\x9f\\x7e\\x9a\\x78\\x76\\x7c\\x7b\\x75\\xbc\\x0a\\x0e\\xf9\\x58\\x16\\x9d\\x07\\x41\\x7b\"\n\"\\x9a\\xd1\\x1f\\xf8\\x5c\\x7c\\x0a\\xf7\\x63\\x07\\xdd\\x92\\xb7\\x4d\\x91\\xfb\\x18\\x08\\x9c\\x06\\x91\\xf7\\x17\\xb8\\xca\\xdd\\x84\\x08\\x0e\\xa7\\x8f\\x16\"\n\"\\xf7\\x37\\x06\\xc5\\x8a\\xaa\\x59\\x8e\\x2a\\x08\\x9d\\x06\\x8e\\xee\\xa9\\xbb\\xc5\\x8c\\x08\\xf7\\x37\\x9c\\x7b\\x06\\x5a\\x8c\\x83\\x99\\xe3\\x1a\\xf7\\x65\"\n\"\\x6b\\x1d\\x9b\\x9c\\xfb\\x77\\x7a\\x9d\\x06\\xbe\\x88\\x90\\x83\\x8c\\x2e\\x08\\xfb\\xb6\\x07\\x89\\x8c\\x05\\xfb\\x70\\xf7\\xb5\\x06\\xe3\\x38\\x0a\\xfb\\x76\"\n\"\\x51\\x0a\\x06\\x0e\\x4c\\xbb\\xf7\\x9d\\x15\\xd4\\xae\\xbb\\xb1\\xc4\\x1b\\xdb\\xc4\\x3b\\xfb\\x09\\x8d\\x1f\\xfb\\xab\\x06\\xfb\\x07\\x8d\\xca\\x44\\xee\\x1b\"\n\"\\xf7\\x01\\xdc\\xee\\xf7\\x19\\xf7\\x18\\x3c\\xef\\x22\\x55\\x58\\x70\\x5c\\x68\\x1f\\x79\\x72\\x7f\\x6e\\x79\\x53\\x08\\xf7\\xbc\\xfb\\x19\\x15\\x49\\x83\\x6a\"\n\"\\x65\\x58\\x1b\\x59\\x6c\\xb1\\xcd\\x89\\x1f\\x0e\\xf7\\xda\\xf8\\x0f\\xf8\\x8d\\x15\\x5f\\x7a\\x70\\x76\\x62\\x1b\\x58\\x6b\\xb3\\xca\\xc6\\xa6\\xb1\\xb4\\xa2\"\n\"\\x93\\x83\\x73\\x8f\\x1f\\x75\\x8f\\x97\\x80\\xa0\\x1b\\x9f\\x99\\x97\\x9c\\xaf\\x5f\\xa8\\x55\\x3c\\x53\\x4f\\x37\\x3b\\xc0\\x4f\\xd1\\xc4\\xb3\\xb0\\xd6\\xa3\"\n\"\\x1f\\xfb\\x6d\\xfc\\x85\\x15\\xb6\\x06\\xf8\\x29\\xf9\\x2a\\x05\\x5f\\x06\\x64\\xfc\\x15\\x15\\x3a\\x4d\\x4c\\x39\\x3c\\xc6\\x4f\\xda\\xda\\xc9\\xcc\\xdc\\xdb\"\n\"\\x52\\xc5\\x3c\\x1f\\x83\\x70\\x15\\xbb\\xac\\x57\\x3f\\x4d\\x6f\\x63\\x60\\x5a\\x6a\\xbb\\xd2\\xd1\\xa5\\xb4\\xb9\\x1f\\x0e\\x6f\\xf7\\x84\\xf7\\x9a\\x15\\xc4\"\n\"\\xc8\\xab\\xb1\\xa2\\xb0\\x08\\xb3\\xcb\\xa3\\xd1\\xc0\\x1a\\xbe\\x71\\xac\\x62\\x37\\x4f\\xfb\\x14\\xfb\\xb4\\x54\\x1e\\x6b\\x65\\x84\\x84\\x7b\\x7c\\x08\\x7e\"\n\"\\x7e\\x86\\x84\\x84\\x1a\\x82\\x93\\x80\\x91\\x91\\xa4\\x9f\\xa2\\xa0\\x1e\\x85\\x49\\x8a\\x75\\x73\\x1a\\x4d\\xa4\\x6a\\xba\\xaa\\xa6\\x9e\\xb0\\xa3\\x1e\\x97\"\n\"\\xa0\\x93\\x9f\\x98\\x1a\\x95\\x85\\x91\\x83\\x82\\x86\\x86\\x7d\\x85\\x1e\\x64\\x78\\x7f\\x7e\\x7b\\x1b\\x80\\x85\\x94\\x9b\\xa4\\x97\\xe1\\x9b\\xe4\\x1f\\x94\"\n\"\\xc5\\x15\\xf7\\x7a\\xb1\\xa3\\xd2\\xb2\\x1b\\x99\\x95\\x7c\\x77\\x70\\x80\\x5d\\x7c\\x64\\x1f\\x75\\x53\\x6e\\x5e\\x5b\\x56\\x08\\x0e\\xf8\\x53\\xf7\\x53\\x21\"\n\"\\x1d\\xfb\\x3c\\x79\\x06\\xb1\\x8a\\xa6\\x7b\\xa1\\x67\\x08\\xfc\\x69\\x07\\x5e\\x85\\x7f\\x76\\x82\\x88\\x8c\\x91\\x81\\x1e\\x90\\x82\\x85\\x8d\\x82\\x1b\\x6f\"\n\"\\x76\\x78\\x72\\x6c\\xa4\\x77\\xb3\\xd2\\xae\\xbb\\xed\\x1f\\xf8\\x2c\\x07\\xf8\\x26\\xfc\\xba\\x05\\x9e\\xf8\\xcf\\x06\\xa4\\x96\\x9c\\x9c\\x8f\\x8f\\x8a\\x89\"\n\"\\x8f\\x1e\\x81\\xa7\\x91\\x89\\x9a\\x1b\\xa9\\x9e\\x9d\\xa7\\xa9\\x73\\x9d\\x63\\x3f\\x5c\\x54\\x33\\x1f\\xfb\\xec\\x07\\xf7\\x8c\\xf7\\xc3\\x15\\x3b\\x4e\\x40\"\n\"\\x27\\x27\\xc5\\x44\\xdb\\xde\\xc7\\xd5\\xf0\\xee\\x50\\xd3\\x3a\\x1f\\x83\\x6b\\x15\\xc1\\xab\\x53\\x2e\\x34\\x72\\x5d\\x5a\\x57\\x6a\\xc7\\xe9\\xdc\\xa6\\xba\"\n\"\\xb9\\x1f\\x2a\\xfc\\x64\\x15\\xf7\\x72\\xc9\\xfb\\x72\\x06\\x0e\\x9c\\xf8\\x9b\\xf8\\x59\\x66\\x0a\\x9c\\xf7\\x70\\xf8\\x8b\\x15\\xa5\\x06\\x95\\xb3\\x05\\x98\"\n\"\\xbe\\x8c\\x91\\xa8\\x0a\\x8c\\x87\\x99\\x56\\x1e\\xf7\\xc8\\x31\\x66\\x0a\\x4c\\x26\\x1d\\xfb\\x70\\xf7\\xe1\\x23\\x1d\\xfb\\x42\\xc5\\xf7\\x82\\x15\\xf7\\x42\"\n\"\\xfb\\xe8\\x05\\x7c\\x93\\x95\\x83\\x97\\x1b\\x93\\x90\\x8f\\x92\\x92\\x89\\x93\\x88\\x93\\x1f\\xfb\\x17\\xf7\\xdd\\xf7\\x17\\xf7\\xdd\\x05\\x8e\\x93\\x8d\\x93\"\n\"\\x92\\x1a\\x93\\x86\\x8f\\x83\\x7f\\x83\\x85\\x79\\x81\\x1e\\x0e\\xfb\\x42\\xf7\\xa7\\xf7\\x82\\x15\\xfb\\x42\\xf7\\xe8\\x05\\x9c\\x82\\x82\\x92\\x7f\\x1b\\x83\"\n\"\\x86\\x87\\x83\\x85\\x8d\\x83\\x8e\\x82\\x1f\\xf7\\x17\\xfb\\xdd\\xfb\\x17\\xfb\\xdd\\x05\\x88\\x84\\x89\\x83\\x84\\x1a\\x83\\x90\\x87\\x93\\x97\\x93\\x91\\x9c\"\n\"\\x95\\x1e\\x0e\\x4c\\x7c\\x1d\\x8e\\x6a\\x91\\x7c\\x9b\\x7c\\x08\\x65\\x6d\\x7b\\x71\\x6a\\x1a\\x60\\xc8\\x1d\\x74\\x7c\\x9c\\xa5\\xa7\\x9b\\xa1\\xa3\\x90\\x1f\"\n\"\\xb4\\x92\\x96\\x91\\xae\\xb1\\x08\\xfb\\x2f\\xde\\x15\\x6d\\x86\\x80\\x76\\x7f\\x1e\\x7d\\x72\\x70\\x83\\x76\\x1b\\x68\\x6f\\xad\\xb6\\x1f\\x8f\\x07\\x8c\\xc7\"\n\"\\xb7\\xb1\\xf7\\x09\\xb4\\x08\\x0e\\xf8\\x81\\xf9\\x3a\\xf7\\x6c\\xa6\\x0a\\x6c\\x76\\x4b\\x5d\\x1f\\xc1\\x6b\\x05\\xb2\\xa5\\x9c\\x97\\xaa\\x1b\\xa0\\xa0\\x86\"\n\"\\x82\\x9c\\x1f\\x5c\\xe4\\x9d\\x84\\xb8\\x1b\\xb9\\xaa\\xa0\\xcc\\xb9\\x1f\\x55\\xf7\\x61\\xa6\\x0a\\x6d\\x76\\x4a\\x5c\\x1f\\xc1\\x6c\\x05\\xb2\\xa5\\x9c\\x97\"\n\"\\xaa\\x1b\\xa0\\xa0\\x86\\x82\\x9c\\x1f\\x5b\\xe4\\x9d\\x85\\xb8\\x1b\\xb9\\xad\\xa3\\xc8\\xb6\\x1f\\x0e\\x4c\\x6f\\x1d\\x4a\\xf8\\x5a\\x87\\x0a\\x57\\xcf\\x3a\"\n\"\\x1d\\xf9\\x03\\xf8\\x37\\x15\\xfc\\xa0\\x06\\xf7\\x66\\xdc\\x74\\xc0\\xfb\\xb2\\xfb\\x14\\x05\\x3e\\x07\\xf7\\xb2\\xfb\\x13\\xa2\\xbf\\xfb\\x66\\xdd\\x05\\xf8\"\n\"\\xa0\\x06\\xfb\\x66\\x39\\xa2\\x57\\xf7\\xb2\\xf7\\x13\\x05\\xd8\\x07\\xfb\\xb2\\xf7\\x14\\x74\\x56\\x05\\x0e\\xf8\\x1b\\xf9\\x66\\x15\\x4b\\xfd\\x03\\x06\\x39\"\n\"\\xf7\\x66\\x57\\x74\\xf7\\x13\\xfb\\xb2\\x05\\xd8\\x06\\xf7\\x14\\xf7\\xb2\\x56\\xa2\\x3a\\xfb\\x66\\x05\\x0e\\xf9\\x66\\xf7\\xf9\\x15\\xcb\\xfd\\x03\\x07\\xf7\"\n\"\\x66\\xdc\\x74\\xc0\\xfb\\xb2\\xfb\\x13\\x05\\x3e\\x07\\xf7\\xb2\\xfb\\x14\\xa2\\xbf\\xfb\\x66\\xdd\\x05\\x0e\\xf7\\xf9\\x04\\xf9\\x03\\x06\\xfb\\x66\\x39\\xa2\"\n\"\\x57\\xf7\\xb2\\xf7\\x14\\x05\\xd8\\x07\\xfb\\xb2\\xf7\\x13\\x74\\x56\\xf7\\x66\\x3a\\x05\\xfd\\x03\\x06\\x0e\\xf8\\x1b\\x16\\xf9\\x03\\x07\\xdc\\xfb\\x66\\xc0\"\n\"\\xa3\\xfb\\x14\\xf7\\xb1\\x05\\x3e\\x06\\xfb\\x13\\xfb\\xb1\\xbf\\x73\\xdd\\xf7\\x66\\x05\\xfd\\x03\\x07\\x0e\\xf7\\xde\\xf9\\x03\\xa4\\x1d\\xa2\\xc2\\x0a\\x74\"\n\"\\x05\\x0e\\xf7\\x5b\\x2c\\x15\\x51\\xf7\\xdb\\xc5\\x07\\xfb\\x58\\xf9\\x42\\xa4\\x1d\\xa3\\xc2\\x0a\\x73\\x05\\x0e\\x8d\\xf7\\x31\\xbd\\x15\\x60\\xb3\\xa7\\x7d\"\n\"\\xb7\\x1b\\xf7\\x00\\xe1\\xf3\\xf7\\x16\\xe8\\x62\\xd3\\x40\\xb1\\x1f\\xc5\\xb3\\xa4\\xb3\\xbc\\x1a\\xcd\\x55\\xb7\\x3a\\x40\\x4e\\x6c\\x51\\x63\\x1e\\x6b\\x5c\"\n\"\\x82\\x62\\x21\\x1a\\xfc\\xc9\\xda\\x07\\xf8\\xdb\\x04\\xd9\\x91\\xba\\x98\\xaa\\x1e\\xba\\x9f\\xb0\\xa6\\xb5\\x1b\\xbd\\xaf\\x65\\x57\\x64\\x81\\x75\\x66\\x60\"\n\"\\x1f\\x8f\\x7a\\x81\\x8d\\x7e\\x1b\\x5f\\x6c\\x7b\\x73\\x7d\\x9a\\x7f\\x9d\\xa1\\xa2\\x93\\x9f\\xb0\\x1f\\xbc\\x54\\x9e\\x55\\x3b\\x1a\\xfb\\x03\\x56\\x3c\\x41\"\n\"\\x66\\x73\\x99\\xb8\\x66\\x1e\\x0e\\x4c\\x35\\x1d\\xfb\\x5f\\xf7\\xfc\\x5b\\x0a\\x99\\x94\\x97\\x9b\\x1a\\x9f\\x7e\\x97\\x75\\xdd\\x1d\\x4c\\x35\\x1d\\x7d\\xf8\"\n\"\\xa3\\x20\\x0a\\x4c\\x35\\x1d\\x74\\xf7\\xfc\\x20\\x1d\\x4c\\x35\\x1d\\xfb\\x3e\\xf8\\x70\\x43\\x1d\\x0e\\x4c\\xf7\\x97\\xf7\\x28\\x15\\xf7\\x4b\\xf7\\xc3\\x05\"\n\"\\x31\\x06\\xfb\\x13\\xfb\\x73\\x6f\\xd3\\x05\\xf0\\x64\\x53\\xc4\\x4f\\x1b\\x6d\\x76\\x78\\x71\\x72\\xa2\\x77\\xa7\\x1f\\xc9\\x8f\\xa1\\x79\\xac\\x3f\\xb2\\x2d\"\n\"\\x18\\xfb\\x6c\\xfb\\xff\\x05\\xe6\\x06\\xf7\\x31\\xf7\\xad\\xba\\xfb\\x0f\\x05\\x24\\xb3\\xae\\x4d\\x9e\\x1b\\x8e\\x8f\\x8c\\x8e\\x90\\x1f\\xda\\xbb\\x85\\x9a\"\n\"\\x05\\x86\\x7e\\x83\\x89\\x81\\x1b\\x72\\x75\\x98\\xa5\\x79\\x1f\\x76\\xa8\\x82\\x9e\\x6c\\xdc\\x08\\x0e\\xf8\\x81\\xf8\\x8b\\xf9\\x4b\\x15\\xfb\\x5c\\xfb\\x36\"\n\"\\xfb\\x35\\xfb\\x5c\\xfb\\x58\\xf7\\x36\\xfb\\x36\\xf7\\x57\\xf7\\x59\\xf7\\x37\\xf7\\x37\\xf7\\x57\\xf7\\x58\\xfb\\x36\\xf7\\x39\\xfb\\x55\\x1f\\x87\\xfb\\xd0\"\n\"\\x15\\xfb\\x52\\xf7\\x50\\x05\\xb8\\xc2\\xcc\\xa2\\xd1\\x1b\\xd0\\xcb\\x75\\x5f\\xc4\\x1f\\xb3\\x63\\x15\\xbb\\x51\\xa2\\x4d\\x42\\x1a\\x43\\x74\\x4b\\x5d\\x53\"\n\"\\x1e\\xfb\\x54\\xf7\\x57\\x05\\xf7\\x2c\\xfb\\x7f\\x15\\x5f\\x54\\x48\\x73\\x45\\x1b\\x45\\x4b\\xa2\\xba\\x50\\x1f\\xf7\\x55\\xf7\\x55\\x05\\xfb\\x7d\\xfb\\x2d\"\n\"\\x15\\x5f\\xc1\\x74\\xcb\\xd1\\x1a\\xd3\\xa2\\xcb\\xba\\xc4\\x1e\\xf7\\x52\\xfb\\x50\\x05\\x0e\\xf8\\x81\\xf9\\x83\\x16\\x9f\\x07\\x24\\x9f\\x6e\\x99\\x5d\\xbb\"\n\"\\x5c\\xbf\\x7a\\xc0\\x8a\\xeb\\xa0\\x66\\x93\\x7e\\x97\\x7d\\x08\\x5d\\xb2\\xc9\\x6c\\xc0\\x1b\\xe6\\xd2\\xd5\\xe9\\xe5\\x4a\\xd3\\x3a\\x6e\\x84\\x89\\x6e\\x50\"\n\"\\x1f\\xa7\\xb4\\x96\\xaa\\xb0\\x1a\\xe3\\x42\\xd2\\x30\\x2e\\x44\\x45\\x30\\x68\\x92\\x79\\xad\\x55\\x1e\\xa3\\x5a\\x77\\x91\\x6c\\x1b\\x40\\x49\\x3f\\x34\\x2e\"\n\"\\xd4\\x42\\xe7\\xdc\\xcf\\xbd\\xe6\\xb8\\x1f\\x8c\\x7b\\x8b\\x80\\x86\\x1a\\x43\\x65\\x3a\\x55\\x5f\\x1e\\x6b\\x72\\x74\\x82\\x2c\\x77\\x08\\x77\\x07\\x0e\\xf0\"\n\"\\xf8\\x7e\\x67\\x0a\\xf7\\x28\\xf0\\x15\\xce\\xac\\xb7\\xc8\\xc7\\x1a\\xbd\\x69\\xb2\\x5d\\x69\\x73\\x74\\x69\\x6b\\xa1\\x78\\xb0\\x40\\x0a\\x70\\x67\\x55\\x66\"\n\"\\x1f\\x0e\\x84\\xf7\\xe8\\xf8\\xa3\\x15\\xfb\\x02\\xa1\\x1d\\x9b\\x07\\xc5\\x0a\\xf8\\x31\\xd7\\xad\\x3f\\xf7\\x0c\\xbf\\x1d\\x7f\\xfb\\x0d\\x69\\x07\\xf7\\x0d\"\n\"\\xfc\\x3d\\x97\\x0a\\x0e\\x67\\xf8\\x23\\xf9\\x0a\\x15\\xa9\\x28\\x3e\\x9a\\x50\\x1b\\x4c\\x61\\x6f\\x61\\x6f\\x9a\\x76\\xb7\\x6a\\x1f\\xe3\\x48\\x05\\xfb\\x05\"\n\"\\x77\\x3e\\x29\\xfb\\x0d\\x1a\\xfb\\x18\\xe6\\x2b\\xf7\\x10\\xf7\\x12\\xee\\xf7\\x00\\xf7\\x20\\xd9\\x71\\xc0\\x45\\xc9\\x1e\\x6b\\xa7\\x7f\\x95\\x3e\\xc0\\x43\"\n\"\\xbe\\x18\\x6b\\xa1\\x7e\\x99\\x99\\x1a\\x99\\x9a\\x93\\xa5\\xc4\\xe4\\x6f\\x5d\\xe5\\x1e\\xfb\\x45\\xfb\\x24\\x15\\xde\\xc5\\x2c\\xfb\\x1d\\xfb\\x01\\x62\\x4c\"\n\"\\x44\\x66\\x67\\x9e\\xaa\\x76\\x1f\\x6d\\xb7\\x79\\xd1\\xd1\\x1a\\xf6\\xb5\\xca\\xd2\\x1e\\x0e\\xf8\\x81\\xf7\\x8e\\xf7\\xf1\\x15\\xf0\\xfb\\x11\\xf7\\x10\\xfb\"\n\"\\x45\\xb1\\x40\\xc7\\xf7\\x00\\xf7\\x06\\xf7\\x35\\xf3\\xf7\\x10\\x3a\\xe8\\xfb\\x36\\xf7\\x78\\x68\\xd2\\x54\\x24\\x40\\x21\\xfb\\x26\\xfb\\x4b\\x08\\x0e\\xfb\"\n\"\\x42\\xf7\\x2e\\xf8\\xe5\\x83\\x1d\\x4c\\x27\\x1d\\xac\\xf7\\xf7\\x15\\x40\\x6f\\x72\\x75\\x51\\x1b\\x4b\\x69\\xa9\\xce\\x7d\\x1f\\x6e\\x06\\x8c\\x58\\x92\\x73\"\n\"\\x9e\\x6f\\x08\\x68\\xa4\\xb2\\x78\\xbb\\x1b\\xdf\\xb9\\x49\\x0a\\x4c\\x27\\x1d\\xd6\\xf8\\x01\\x20\\x0a\\x4c\\x27\\x1d\\x3a\\xf7\\xce\\x43\\x1d\\x0e\\xf8\\x81\"\n\"\\xf9\\x93\\xf7\\x6c\\x15\\xc8\\xfc\\x62\\x07\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\xf7\\xb7\\xc9\\xfb\\xac\\x65\\x1d\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x38\\xc6\"\n\"\\x0a\\xc9\\xfb\\xb7\\x06\\xfb\\x01\\x89\\x53\\xbd\\x85\\xf5\\x08\\x0e\\x4c\\x27\\x1d\\xfb\\x80\\xf7\\xb8\\x23\\x1d\\x84\\xf7\\x38\\xf7\\xf0\\x15\\xb8\\xbb\\xa1\"\n\"\\x97\\xac\\x1b\\xbc\\xa3\\x6c\\x49\\x1f\\xfb\\xf5\\xd4\\x1d\\x80\\x92\\xa0\\x7b\\x1f\\xa2\\x79\\x7d\\x94\\x7b\\x1b\\x74\\x79\\x7a\\x75\\x6b\\xb2\\x74\\xc2\\xb7\"\n\"\\xb3\\x99\\xa4\\xa6\\x1f\\xaf\\xab\\xa1\\xcf\\xda\\x1a\\xf7\\xca\\x94\\x1d\\x7c\\xf7\\x68\\x9a\\x07\\x59\\x8e\\x7b\\x98\\xaf\\x1a\\x0e\\x4c\\xf8\\x2c\\x8d\\x1d\"\n\"\\xf7\\x08\\xa1\\x9a\\x8d\\x92\\xa1\\x1e\\x65\\x6b\\x7d\\x73\\x6a\\x1a\\x61\\xdc\\x1d\\x6b\\x79\\x82\\x76\\x1b\\x75\\x7b\\x9b\\xa1\\xa6\\x98\\xa1\\xb5\\xb7\\x1f\"\n\"\\xc2\\xc6\\xa2\\xab\\x9a\\xb7\\x08\\x91\\x0a\\x0e\\x34\\x6b\\x0a\\x0e\\x34\\x6b\\x0a\\xfb\\x1f\\xf7\\x19\\x15\\xa6\\x06\\x94\\xb3\\x05\\x98\\xbe\\x8c\\x91\\x9e\"\n\"\\x1a\\xab\\x7e\\x9d\\x73\\x74\\xe6\\x1d\\xf8\\x81\\xf7\\x8c\\xf7\\xb8\\x15\\x4b\\xf8\\x8c\\xcb\\x07\\xfc\\x8c\\xfb\\x54\\x15\\x4b\\xf8\\x8c\\xcb\\x07\\xfc\\x8c\"\n\"\\xf8\\x14\\x15\\x4b\\xf8\\x8c\\xcb\\x07\\x0e\\xe8\\xf8\\xa4\\xf7\\x8e\\x15\\x89\\xd4\\x86\\xae\\x7d\\xaf\\x08\\xdb\\x6a\\x3e\\xbb\\x2b\\x1b\\xfb\\x23\\x31\\x23\"\n\"\\xfb\\x38\\xfb\\x36\\xe2\\x29\\xf7\\x25\\xf7\\x01\\xd5\\xbe\\xec\\xa9\\x1f\\x5f\\x06\\x46\\x6c\\x52\\x68\\x3b\\x1b\\x5e\\x66\\x97\\xa2\\x72\\x1f\\x78\\x9b\\x82\"\n\"\\x9c\\x7f\\xb2\\x8c\\xf4\\x18\\xf7\\xc0\\xae\\x15\\xfb\\xbe\\xe8\\x06\\xd5\\xad\\xb1\\xa5\\xd3\\x1b\\xc4\\xb2\\x79\\x62\\xae\\x1f\\x97\\x7d\\x8f\\x84\\x92\\x77\"\n\"\\x08\\x0e\\x9b\\xf7\\x49\\xf8\\x67\\x15\\x46\\x69\\x81\\x86\\x41\\x6c\\x92\\x7d\\x18\\x95\\x8f\\x05\\x8d\\x92\\x91\\x8c\\x93\\x1b\\xa8\\x92\\x7e\\x52\\x1f\\xfb\"\n\"\\xd4\\xda\\xf7\\xeb\\x07\\xb9\\xc0\\xa4\\x98\\xaf\\x1b\\xc2\\x9a\\x72\\x30\\x1f\\xfc\\x65\\xda\\xf8\\x62\\x07\\xcd\\x87\\xa6\\x7d\\xa9\\x1e\\xae\\x7c\\x66\\xa1\"\n\"\\x62\\x1b\\x5a\\x5e\\x72\\x50\\x51\\x1f\\x0e\\x9b\\xf7\\x45\\xf8\\x67\\x15\\x46\\x69\\x81\\x86\\x41\\x6c\\x92\\x7d\\x18\\x95\\x8f\\x05\\x8d\\x92\\x91\\x8c\\x93\"\n\"\\x1b\\xa8\\x92\\x7e\\x52\\x1f\\xfb\\xd4\\xda\\xf7\\xeb\\x07\\xb9\\xc0\\xa4\\x98\\xaf\\x1b\\xc2\\x9a\\x72\\x30\\x1f\\xfc\\x65\\xda\\xf8\\x62\\x07\\xcd\\x87\\xa6\"\n\"\\x7d\\xa9\\x1e\\xae\\x7c\\x66\\xa1\\x62\\x1b\\x5a\\x5e\\x72\\x50\\x51\\x1f\\xd2\\xf7\\x10\\x5f\\x0a\\xbe\\x8c\\x91\\xa8\\x0a\\x8b\\x88\\x99\\x55\\x1e\\x0e\\x98\"\n\"\\xf7\\x3c\\xf7\\x43\\x15\\xb4\\xf7\\xef\\x05\\x8e\\xa3\\x8e\\xad\\x99\\x1a\\xc0\\x78\\xa7\\x68\\x68\\x78\\x6f\\x56\\x7e\\x8e\\x60\\x8d\\x7b\\x1e\\xb4\\xfb\\xef\"\n\"\\x05\\x93\\x43\\x15\\x6b\\x71\\x71\\x6b\\x6b\\xa5\\x71\\xab\\xaa\\xa5\\xa5\\xab\\xab\\x71\\xa5\\x6c\\x1f\\xf7\\x63\\xd3\\x15\\xb4\\xf7\\xef\\x05\\x8e\\xa3\\x8e\"\n\"\\xad\\x99\\x1a\\xc0\\x78\\xa7\\x68\\x68\\x78\\x6f\\x56\\x7e\\x8e\\x60\\x8d\\x7b\\x1e\\xb4\\xfb\\xef\\x05\\x93\\x43\\x15\\x6b\\x71\\x71\\x6b\\x6b\\xa5\\x71\\xab\"\n\"\\xaa\\xa5\\xa5\\xab\\xab\\x71\\xa5\\x6c\\x1f\\x0e\\x38\\xbd\\x16\\xf7\\xd9\\xf8\\xd5\\xfb\\xd9\\x37\\xf7\\x85\\xfb\\x36\\xfb\\x85\\x37\\xf7\\x85\\xfb\\x37\\xfb\"\n\"\\x85\\x06\\x0e\\xf8\\x13\\xf7\\xac\\x15\\xf7\\x02\\x97\\xdd\\xe6\\xf7\\x01\\x1a\\xf7\\x0b\\x2b\\xea\\xfb\\x0a\\xfb\\x0a\\x2c\\x2b\\xfb\\x0a\\xfb\\x01\\xdd\\x30\"\n\"\\xf7\\x01\\x7f\\x1e\\x32\\xfb\\x29\\x64\\xf7\\x29\\xfb\\x2c\\xb7\\xf7\\x2c\\xf7\\x28\\xb2\\xfb\\x28\\x07\\x72\\xf8\\x6a\\x15\\xeb\\xd8\\x40\\x2e\\x2d\\x3f\\x3f\"\n\"\\x2d\\x2e\\x3f\\xd7\\xe8\\xe7\\xd7\\xd8\\xe5\\x1f\\x0e\\x84\\xf7\\xb2\\xa9\\x15\\xfb\\x02\\x90\\x4a\\xf7\\x07\\xf7\\x50\\x1a\\xf7\\x4d\\xd1\\xf7\\x0e\\xf4\\xb3\"\n\"\\xb2\\x74\\x63\\xa7\\x1e\\xa3\\x69\\x96\\x6e\\x9a\\x47\\x08\\xa5\\x06\\x84\\xf7\\x75\\x05\\x72\\x06\\x77\\x87\\x80\\x7e\\x7f\\x1b\\x84\\x82\\x8e\\x90\\x81\\x1f\"\n\"\\x9c\\x6b\\x68\\x93\\x67\\x1b\\x3f\\x3f\\x65\\x4f\\x60\\x1f\\x5d\\x4b\\x72\\x31\\x28\\x1a\\xfb\\x5f\\xf1\\xfb\\x1c\\xf7\\x2c\\xe3\\xd6\\xb9\\xdc\\xb9\\x1e\\x74\"\n\"\\x9b\\x6d\\x63\\x6d\\x70\\x66\\x7a\\x19\\xf7\\x3a\\x07\\x9d\\xb6\\x9a\\x9d\\xa1\\x91\\x08\\x78\\x9a\\x95\\x85\\x9a\\x1b\\x9f\\x96\\x96\\xa1\\xa2\\x7c\\x98\\x71\"\n\"\\x6a\\x78\\x7b\\x56\\x6a\\x1f\\xce\\x07\\x80\\x8e\\x25\\x64\\x05\\x79\\x07\\x8e\\x99\\x8f\\x8c\\x8f\\x1b\\x9a\\x8f\\x81\\x6b\\x1f\\x0e\\x4a\\x7d\\xf8\\x19\\x15\"\n\"\\x91\\x95\\x90\\x8d\\x93\\x1b\\xa5\\xa8\\x67\\x3f\\xad\\x1f\\xb8\\x28\\xab\\x2f\\x9a\\x45\\x08\\x74\\x4b\\x84\\x6e\\x68\\x1a\\x5e\\xa2\\x67\\xa7\\xac\\xa1\\xb4\"\n\"\\xc8\\xa8\\x87\\xa8\\x82\\xb5\\x1e\\xee\\xf7\\x5a\\x8e\\x92\\x94\\x9c\\x99\\xa3\\x19\\x96\\x9f\\x94\\x9d\\x93\\x9c\\x08\\x99\\xab\\x93\\xa8\\xa4\\x1a\\xad\\x75\"\n\"\\xa4\\x6c\\x70\\x77\\x78\\x72\\x84\\x8d\\x80\\x8f\\x82\\x1e\\x9a\\x63\\x8c\\x87\\x7b\\x1a\\x6c\\x87\\x80\\x66\\x3f\\x1e\\x47\\xfb\\x22\\x76\\xf1\\x55\\xf7\\x2f\"\n\"\\x66\\xcd\\x19\\xae\\x76\\x6b\\xb0\\x81\\x1b\\x8a\\x87\\x89\\x88\\x87\\x1f\\x3c\\x4f\\x05\\x0e\\x84\\x3a\\x0a\\xf7\\x66\\xf7\\xdd\\x37\\x1d\\x84\\x3a\\x0a\\xf7\"\n\"\\x91\\xf7\\x40\\x20\\x1d\\x84\\x3a\\x0a\\xf7\\x21\\xf8\\x25\\x15\\x48\\x6a\\x5e\\x4e\\x4f\\x1a\\x59\\xae\\x64\\xb8\\xad\\xa3\\xa2\\xad\\xaa\\x75\\x9f\\x67\\x84\"\n\"\\x85\\x8a\\x8a\\x84\\x1e\\x89\\x85\\x8b\\x8b\\x89\\x1b\\x84\\x85\\x91\\x93\\xac\\xa7\\xaf\\xc1\\xb0\\x1f\\x0e\\x84\\xf7\\x8b\\xf9\\x10\\x35\\x0a\\xf7\\x73\\xfb\"\n\"\\x8c\\x71\\x1d\\xfb\\x7f\\x59\\x15\\xc6\\xa7\\xae\\xb9\\xaa\\xa5\\x7a\\x6d\\x9b\\x1e\\x9e\\x68\\x96\\x5e\\x63\\x1a\\x53\\x6f\\x68\\x5d\\x4d\\x62\\xcc\\xeb\\x1e\"\n\"\\x86\\xfb\\xe5\\x9b\\x0a\\x0e\\xf8\\x81\\xf7\\xba\\x16\\xf8\\x30\\xcd\\xfc\\x30\\x06\\xa5\\x04\\xf8\\x30\\xf7\\x81\\x05\\x91\\x07\\xfc\\x30\\xf7\\x8c\\x05\\x2e\"\n\"\\x07\\xf7\\xc6\\xfb\\x4c\\xfb\\xc6\\xfb\\x42\\x05\\x0e\\x84\\xd4\\xf8\\x92\\x15\\xfc\\x2c\\x07\\x89\\x43\\x86\\x83\\x69\\x1d\\xd2\\x08\\xf7\\x85\\x07\\xb9\\xb5\"\n\"\\xa9\\x9c\\xb3\\x1b\\xbc\\xa4\\x67\\x45\\x1f\\xfb\\x5a\\x07\\x89\\x44\\x82\\x80\\x52\\x86\\x08\\x7c\\xf7\\x68\\x9a\\x07\\x55\\x94\\x86\\x92\\x8a\\xd2\\x08\\xf7\"\n\"\\x5b\\x07\\xf4\\x62\\xc1\\x39\\x4f\\x62\\x73\\x4f\\x5d\\x1e\\xf7\\x1a\\xf7\\x1f\\xb2\\xfb\\x1f\\xf7\\x17\\x07\\x86\\x8e\\x68\\x7f\\x72\\x82\\x54\\x7c\\x19\\x70\"\n\"\\x83\\x05\\x7b\\x07\\x8c\\x8e\\x8f\\x8b\\x8f\\x1b\\xb7\\x93\\x83\\x60\\x1f\\x73\\x56\\x64\\x07\\x0e\\x84\\x77\\x1d\\x36\\xf9\\x6a\\x20\\x1d\\xf8\\x81\\xf8\\x87\"\n\"\\x6f\\x15\\x9f\\xe5\\xc7\\xf2\\xf7\\x08\\xf7\\x25\\x08\\xeb\\xf7\\x0e\\xab\\xce\\xdb\\x1a\\xdd\\x45\\xcf\\x37\\x5b\\x5f\\x76\\x65\\x6a\\x1e\\x75\\x72\\x81\\x75\"\n\"\\x7e\\x5d\\x7f\\xaf\\x83\\x9d\\x7f\\x9d\\x08\\xbd\\x6a\\x58\\xa8\\x54\\x1b\\x36\\x49\\x47\\x32\\x48\\xa0\\x5e\\xdf\\xfb\\x06\\x1f\\xf7\\x2b\\xfb\\x5e\\xb3\\x47\"\n\"\\xa5\\x24\\x08\\x0e\\xf8\\x81\\xf7\\x2d\\x16\\xf9\\x50\\xf8\\x25\\x06\\xfb\\xf3\\xf7\\xdc\\xfb\\xf1\\xfb\\xdc\\x05\\xc8\\xfb\\xf2\\x15\\xf7\\xdc\\x07\\xf7\\xb4\"\n\"\\xf7\\xa2\\xf7\\xb6\\xfb\\xa2\\x05\\xfb\\xdc\\x07\\x0e\\xfb\\x79\\x27\\x0a\\xf7\\x7a\\xf9\\x1d\\x15\\x3f\\x6f\\x72\\x39\\x1d\\xb8\\xf7\\x58\\xf8\\x6a\\x15\\x47\"\n\"\\x69\\x80\\xad\\x0a\\x92\\x90\\x8c\\x93\\x1b\\xa8\\x92\\x7e\\x53\\x1f\\xfb\\x5e\\x07\\x8a\\x2e\\x86\\x82\\xcb\\x0a\\x5a\\x8d\\x83\\x99\\xe4\\x1a\\x5e\\xf8\\xb1\"\n\"\\x15\\x4d\\x1d\\xa8\\xa7\\xa2\\xa2\\xa8\\xa7\\x74\\xa2\\x6f\\x1f\\xf7\\xc2\\xfb\\x55\\x15\\x46\\x69\\x81\\x86\\x41\\x6d\\x92\\x7c\\x18\\x96\\x8f\\x05\\x8d\\x91\"\n\"\\x90\\x8c\\x94\\x1b\\xa8\\x92\\x7e\\x53\\x1f\\xfb\\xd8\\x07\\x33\\xea\\x1d\\x74\\x7d\\x93\\x7b\\x1b\\x74\\x79\\x79\\x76\\x6e\\xad\\x75\\xb9\\xc8\\xc0\\xa9\\xbd\"\n\"\\xa6\\x1f\\x9c\\xad\\x8f\\xa4\\xe2\\x1a\\x5d\\xf8\\xe8\\x35\\x0a\\x0e\\xfb\\x79\\x27\\x0a\\x6b\\xf8\\xde\\x15\\x55\\xf7\\xc8\\xc1\\x07\\x0e\\xf8\\x81\\xf8\\x88\"\n\"\\xf7\\xa4\\x15\\x60\\xb2\\x87\\x8e\\x78\\x99\\x08\\xa5\\x6a\\x60\\x9b\\x6a\\x1b\\x45\\x51\\x51\\x45\\x45\\xc5\\x51\\xd1\\xad\\xb4\\x9b\\xa5\\xad\\x1f\\x9e\\x99\"\n\"\\x8f\\x8e\\xb6\\xb2\\xb8\\x64\\x8f\\x87\\x9c\\x7e\\x08\\x71\\xae\\xb4\\x7b\\xad\\x1b\\xd1\\xc5\\xc5\\xd1\\xd1\\x51\\xc5\\x45\\x6a\\x60\\x7b\\x71\\x69\\x1f\\x7a\"\n\"\\x7e\\x86\\x87\\x5f\\x64\\x08\\xac\\x6d\\x15\\xbe\\xbe\\xbf\\xa9\\xb3\\x1b\\xb7\\xb0\\x66\\x5f\\x5e\\x66\\x66\\x5f\\x64\\x58\\xa8\\xc0\\x56\\x1f\\x4a\\x16\\x57\"\n\"\\x57\\x57\\x6e\\x64\\x1b\\x5f\\x66\\xb0\\xb7\\xb7\\xb0\\xb0\\xb8\\xb2\\xbe\\x6e\\x57\\xbf\\x1f\\x0e\\xf8\\x81\\xf8\\xb3\\xf8\\xd4\\x15\\xd5\\x8a\\xb1\\x88\\xc5\"\n\"\\x1e\\x89\\xa8\\x8a\\xa9\\x9a\\x1a\\xae\\x96\\xa2\\x9d\\x90\\x91\\x88\\x88\\x8d\\x1e\\x6f\\x9c\\x92\\x86\\x9d\\x1b\\x9e\\x9a\\x99\\x9e\\xa5\\x73\\x9d\\x68\\x69\"\n\"\\x6d\\x7a\\x6e\\x7b\\x1f\\x72\\x60\\x7d\\xfb\\x00\\xfb\\x22\\x1a\\xfb\\xed\\x07\\x44\\x8c\\x61\\x8e\\x53\\x1e\\x8d\\x6d\\x8c\\x71\\x78\\x1a\\x68\\x7e\\x74\\x79\"\n\"\\x83\\x85\\x90\\x98\\x84\\x1e\\x9c\\x82\\x83\\x90\\x7d\\x1b\\x77\\x7c\\x7c\\x79\\x71\\xa3\\x79\\xae\\xad\\xa8\\x9c\\xa8\\x9c\\x1f\\xa4\\xb6\\x99\\xf6\\xf7\\x23\"\n\"\\x1a\\x0e\\xf7\\xfc\\xf9\\x80\\x15\\xfd\\x83\\x07\\x59\\x07\\x48\\x8b\\x8b\\x89\\x78\\x1e\\x77\\x89\\x84\\x82\\x7e\\x1b\\x82\\x85\\x90\\x99\\x82\\x1f\\xa0\\x7e\"\n\"\\x7e\\x93\\x76\\x1b\\x72\\x78\\x78\\x73\\x6b\\xa6\\x74\\xb1\\xe1\\xc6\\xe2\\xf7\\x14\\x1f\\xf9\\x83\\x07\\x0e\\xf8\\x43\\xfb\\x6e\\x15\\xf9\\x82\\x07\\xbe\\x07\"\n\"\\xcd\\x8b\\x8b\\x8d\\x9e\\x1e\\xa0\\x8d\\x92\\x94\\x98\\x1b\\x94\\x91\\x86\\x7e\\x94\\x1f\\x75\\x98\\x98\\x83\\xa0\\x1b\\xa4\\x9e\\x9e\\xa3\\xab\\x70\\xa2\\x65\"\n\"\\x35\\x50\\x33\\xfb\\x14\\x1f\\xfd\\x82\\x07\\x0e\\xf8\\x81\\xf9\\x64\\x16\\xf7\\x8a\\x07\\xf7\\x1d\\x86\\xad\\x73\\xb4\\x1e\\xca\\x65\\x44\\xb1\\x39\\x1b\\x3f\"\n\"\\x4b\\x6c\\x53\\x62\\x1f\\x6a\\x5e\\x85\\x6b\\xfb\\x29\\x1a\\xfb\\x8a\\xc7\\xf7\\x8d\\x07\\xf0\\x91\\xb6\\x9c\\xaa\\x1e\\xb9\\xa4\\xc2\\xa9\\xc4\\x1b\\xc0\\xbf\"\n\"\\x71\\x61\\xa7\\x1f\\xa0\\x6b\\x91\\x66\\xfb\\x06\\x1a\\xfb\\x8d\\x07\\x0e\\xf8\\x81\\xf8\\x89\\xf9\\x6e\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\"\n\"\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\\xf7\\x37\\xfb\\x5e\\x1f\\xfb\\x01\\xfb\\x63\\x15\\xa9\\xa4\\x72\\x6d\"\n\"\\x6d\\x72\\x72\\x6d\\x6e\\x71\\xa4\\xa8\\xaa\\xa4\\xa4\\xa9\\x1f\\xfb\\x14\\xfb\\x05\\x15\\x96\\x59\\x96\\x75\\xa5\\x6d\\x08\\x54\\xbb\\xc7\\x71\\xdc\\x1b\\xdc\"\n\"\\xc7\\xa5\\xc2\\xbb\\x1f\\xa5\\xa9\\x96\\xa1\\x96\\xbd\\x84\\x36\\x80\\x62\\x6d\\x5e\\x08\\x4c\\x61\\x4b\\x6b\\x38\\x1b\\x3e\\x4f\\xa6\\xc1\\x61\\x1f\\x67\\xba\"\n\"\\x7c\\xb8\\x84\\xe8\\x08\\xf7\\xee\\xf7\\x05\\x15\\xa9\\xa4\\x72\\x6d\\x6d\\x72\\x72\\x6d\\x6e\\x71\\xa4\\xa8\\xaa\\xa4\\xa4\\xa9\\x1f\\x0e\\xfb\\x79\\xf7\\x47\"\n\"\\xf8\\x5d\\x15\\x87\\x8e\\xfb\\x2f\\x54\\x05\\x7c\\x07\\x93\\x8c\\x05\\x8d\\x97\\x97\\x8c\\x95\\x1b\\xa3\\x94\\x7b\\x5f\\x1f\\xfb\\x7c\\x07\\x89\\x41\\x82\\x81\"\n\"\\x47\\x88\\x08\\x7c\\xf7\\x17\\xab\\x1d\\xb0\\xac\\xac\\xb1\\x1f\\xac\\x9a\\x06\\x49\\x90\\x84\\x94\\x8a\\xd4\\x08\\x58\\xf8\\xd9\\x5b\\x1d\\xfb\\x82\\x86\\x1d\"\n\"\\x0e\\xfb\\x82\\x73\\x0a\\xfb\\x06\\xf8\\x8a\\x35\\x0a\\xf7\\x2c\\x16\\x4d\\x1d\\xa7\\xa8\\xa2\\xa2\\xa8\\xa6\\x74\\xa3\\x6f\\x1f\\x0e\\xfb\\x82\\x73\\x0a\\x58\"\n\"\\xf8\\x5f\\x83\\x1d\\xfb\\x82\\x86\\x1d\\x56\\xf8\\x05\\x5f\\x0a\\xbf\\x8c\\x90\\x9e\\x1a\\xac\\x7e\\x9c\\x73\\x72\\x7f\\x7a\\x6a\\x7c\\x8d\\x7e\\x90\\x76\\x1e\"\n\"\\x92\\x70\\x05\\x0e\\xfb\\x79\\x9c\\x16\\x6c\\x0a\\xf7\\x92\\xf9\\x03\\x4b\\x0a\\xfb\\x79\\x70\\x0a\\xe0\\xf8\\x8f\\x20\\x1d\\x88\\xf7\\x49\\xf8\\x67\\x15\\x46\"\n\"\\x69\\x80\\x86\\x42\\x6d\\x92\\x7d\\x18\\x96\\x8f\\x05\\x8d\\x91\\x91\\x8c\\x93\\x1b\\xa8\\x92\\x7e\\x53\\x1f\\xfb\\xd6\\xda\\xf7\\x81\\x07\\xf7\\x3c\\xfb\\x7f\"\n\"\\x05\\x83\\x91\\x90\\x87\\x90\\x1b\\x8e\\x90\\x8d\\x8e\\x91\\x1f\\xec\\xbd\\x85\\x9a\\x05\\x86\\x7e\\x84\\x89\\x83\\x1b\\x7d\\x7e\\x92\\x98\\x7e\\x1f\\x7b\\x9a\"\n\"\\x73\\xa6\\x82\\x98\\xfb\\x01\\xf7\\x29\\x18\\xde\\xd3\\x9d\\x99\\xad\\x1b\\x91\\x91\\x8b\\x8a\\x92\\x1f\\x89\\x95\\x93\\x8a\\x8f\\x1b\\xa2\\xa0\\xa3\\xa5\\xa4\"\n\"\\x77\\x9d\\x70\\x5b\\x5a\\x60\\xfb\\x2d\\xfb\\x0e\\x1f\\x85\\x83\\x05\\x0e\\x84\\x62\\x0a\\xf7\\x5d\\xfb\\xbc\\x8d\\x0a\\x84\\x69\\x6f\\x67\\x55\\x66\\x1f\\x0e\"\n\"\\x84\\xf7\\x49\\xf7\\x7a\\x15\\xf7\\x08\\xfb\\x39\\x05\\x95\\x7e\\x92\\x7d\\x85\\x1a\\x81\\x84\\x86\\x7e\\x1e\\x81\\x7a\\xf7\\x65\\x9c\\x06\\x58\\x74\\x9c\\xdd\"\n\"\\x52\\x1f\\xfb\\x09\\xf7\\x35\\xe5\\xec\\xb8\\xbc\\x9f\\x97\\xbb\\x8f\\x19\\x98\\x8c\\x05\\x9c\\xfb\\x45\\x7a\\x90\\x07\\x9c\\x89\\x93\\x86\\x80\\x1a\\x83\\x85\"\n\"\\x80\\x81\\x80\\x1e\\xfb\\x09\\xfb\\x16\\x05\\xf7\\x64\\x07\\x46\\x69\\x80\\x86\\x42\\x6d\\x91\\x7d\\x18\\x96\\x8e\\x05\\x8d\\x92\\x93\\x8d\\x90\\x1b\\x97\\x96\"\n\"\\x87\\x83\\x90\\x1f\\x93\\x81\\x8c\\x83\\x63\\x1a\\xfb\\x5e\\x07\\x32\\x83\\x7d\\x5a\\x89\\x1e\\x7d\\x7a\\xf7\\x70\\x9c\\x7e\\x06\\x59\\x8c\\x83\\x9a\\x8c\\xe4\"\n\"\\x08\\x0e\\xfb\\x79\\x3d\\x0a\\xe0\\xf9\\x54\\x22\\x1d\\x75\\xf8\\x5a\\xcb\\x15\\x84\\x7d\\x84\\x89\\x82\\x1b\\x6b\\x75\\xaa\\xdf\\x70\\x1f\\x2d\\xf7\\xb3\\x71\"\n\"\\xdd\\x78\\xb5\\x72\\xa8\\x19\\xad\\x70\\x6a\\x9d\\x6c\\x1b\\x6e\\x77\\x78\\x6f\\x6f\\xa0\\x75\\xa5\\x90\\x93\\x8c\\x8c\\x92\\x1f\\x8d\\x93\\x92\\x8c\\x8f\\x1b\"\n\"\\x9f\\x9f\\x7e\\x75\\x97\\x1f\\x96\\x79\\x95\\x70\\x9a\\x56\\xfb\\x52\\xfc\\x49\\x18\\xe0\\x06\\xf7\\x1f\\xf7\\xe2\\xd2\\xfb\\x80\\x05\\x44\\xa0\\x9e\\x65\\x98\"\n\"\\x1b\\x8d\\x8e\\x8c\\x8c\\x8d\\x1f\\xde\\xc6\\x05\\x0e\\xfb\\x15\\x3d\\x0a\\xf7\\x7b\\xf8\\x36\\x15\\xcf\\xac\\xb7\\xc8\\xc7\\x1a\\xbe\\x68\\xb1\\x4b\\x1d\\xb1\"\n\"\\x40\\x0a\\x6f\\x67\\x55\\x66\\x1f\\x0e\\xfb\\x79\\x3d\\x0a\\xd7\\xfb\\xbc\\x25\\x0a\\xfb\\x37\\xa2\\x16\\xf7\\x80\\x9a\\x06\\x4c\\x8e\\x80\\x95\\x8a\\xc3\\x08\"\n\"\\xf8\\xe9\\x07\\x87\\x8d\\x58\\x7b\\x66\\x80\\x44\\x7a\\x43\\x0a\\xfc\\x71\\x68\\x1d\\xf7\\x95\\xf8\\x0b\\x2b\\x0a\\xf8\\x81\\xf9\\x56\\x16\\xcd\\xfc\\x30\\x49\"\n\"\\x07\\xf8\\x30\\xf8\\xdb\\x15\\xfc\\x30\\xfb\\x81\\x05\\x85\\x07\\xf8\\x30\\xfb\\x8c\\x05\\xe8\\x07\\xfb\\xc6\\xf7\\x4c\\xf7\\xc6\\xf7\\x42\\x05\\x0e\\x34\\x0a\"\n\"\\xf7\\x1e\\x8f\\x1d\\x81\\x44\\x79\\x43\\x0a\\x0e\\xfb\\x79\\xf7\\x90\\x9a\\x15\\x39\\x8f\\x80\\x95\\xd6\\x1a\\xf8\\x62\\x07\\xc5\\x9e\\xaa\\xb0\\xa1\\x98\\x81\"\n\"\\x6e\\x9d\\x1e\\x71\\x9b\\x97\\x81\\x9d\\x1b\\xa2\\x9d\\x9d\\xa2\\xaf\\x5f\\xa5\\x4f\\x4d\\x56\\x70\\x5e\\x71\\x1f\\x71\\x5e\\x83\\x67\\x8a\\x3b\\x08\\x5e\\x6b\"\n\"\\xb8\\x54\\x0a\\xf7\\x98\\x07\\x0e\\xf8\\xc1\\xf8\\xe5\\x15\\x43\\xbc\\x9c\\x79\\x9c\\x1b\\x95\\x93\\x92\\x95\\x91\\x8a\\x8f\\x84\\x99\\x1f\\x74\\xb6\\x7a\\xcb\"\n\"\\xb7\\x1a\\xa9\\x89\\x91\\x7e\\x86\\x84\\x88\\x83\\x7e\\x1e\\x78\\x70\\x3d\\x75\\x60\\x1b\\x71\\x8a\\x83\\x86\\x7e\\x1a\\x75\\xad\\x81\\xe2\\x85\\x1e\\x25\\xfb\"\n\"\\x4d\\x05\\x97\\x6c\\x6e\\x91\\x6b\\x1b\\xfb\\x1a\\xfb\\x00\\xfb\\x00\\xfb\\x1a\\xfb\\x19\\xf7\\x00\\xfb\\x00\\xf7\\x1a\\xf7\\x19\\xf7\\x00\\xf7\\x00\\xf7\\x1a\"\n\"\\xd8\\x66\\xd3\\x4c\\xb9\\x1f\\xfb\\x22\\x7b\\x15\\xee\\xdc\\x3b\\x28\\x28\\x3b\\x3a\\x28\\x27\\x3b\\xdb\\xee\\xee\\xdb\\xdc\\xee\\x1f\\x0e\\xfb\\xb4\\xea\\x9d\"\n\"\\x0a\\x0e\\x84\\xf7\\x81\\xf7\\x43\\x15\\x92\\x7c\\x76\\x8f\\x7b\\x1b\\x4d\\x54\\x56\\x50\\x68\\xa5\\x75\\xb4\\xba\\xb7\\xa2\\xb1\\xa6\\x1f\\x9f\\xa6\\x91\\xa1\"\n\"\\x8d\\xbb\\x08\\xf7\\xb9\\x07\\xc3\\x83\\xb9\\x40\\x37\\x1a\\x59\\x83\\x65\\x73\\x54\\x1e\\xa6\\x06\\xaf\\xb6\\x9e\\xc2\\xc5\\x1a\\xd7\\x6e\\xd1\\x51\\xd2\\x1e\"\n\"\\x58\\xc7\\x8a\\x8d\\x86\\x91\\x83\\x95\\x19\\xc5\\x5f\\x07\\x0e\\xf8\\x13\\xf8\\x57\\x15\\x9e\\x72\\xa1\\x78\\xa0\\x7f\\xc3\\x6b\\x94\\x85\\x90\\x82\\x08\\x91\"\n\"\\x80\\x8f\\x78\\x76\\x1a\\xfb\\x7c\\x07\\x92\\x7a\\x74\\x8f\\x78\\x1b\\x46\\x4d\\x56\\x4f\\x68\\xa8\\x75\\xb8\\xbe\\xbb\\xa2\\xb1\\xaa\\x1f\\xa0\\xa6\\x92\\xa1\"\n\"\\x8d\\xbc\\x08\\xf8\\x00\\x07\\x8c\\xd3\\x6a\\xd5\\x5d\\xa7\\x54\\xaf\\x6d\\x9f\\x87\\x8f\\x08\\x7e\\x99\\x85\\x9d\\xa2\\x1a\\x98\\x5f\\xfc\\x80\\x07\\x92\\x7b\"\n\"\\x74\\x8f\\x79\\x1b\\x46\\x4f\\x56\\x4f\\x68\\xa7\\x75\\xb7\\xbe\\xbb\\xa2\\xb1\\xa8\\x1f\\xa0\\xa6\\x92\\xa1\\x8d\\xbc\\x08\\x8e\\xf8\\x0a\\x15\\xf7\\x03\\x4f\"\n\"\\xa3\\x67\\x8f\\xfb\\x08\\xfb\\x06\\xc8\\x74\\xae\\x87\\xf7\\x09\\x08\\x0e\\x84\\x32\\x0a\\xf7\\x5b\\xf8\\x80\\x2a\\x0a\\xec\\x91\\xf8\\x59\\x15\\xd9\\x97\\xbc\"\n\"\\xbf\\xd0\\x1a\\xbc\\x6e\\xb0\\x63\\x6c\\x73\\x74\\x6d\\x6e\\xa3\\x72\\xa7\\x93\\x91\\x8c\\x8f\\x9b\\x1e\\x89\\x5b\\x6d\\x67\\x56\\x7a\\x08\\xf7\\xa3\\x8c\\x15\"\n\"\\x47\\x69\\x80\\xad\\x0a\\x91\\x93\\x8d\\x91\\x1b\\xa8\\x92\\x7e\\x52\\x1f\\xfb\\x5e\\x07\\x32\\x83\\x7d\\x5a\\x89\\x1e\\x79\\x7a\\xf7\\x74\\x9d\\x77\\x06\\x5d\"\n\"\\x8e\\x88\\x91\\x8a\\xee\\x08\\xf7\\x6d\\x07\\xba\\xc1\\xa3\\x97\\xb0\\x1b\\xc2\\x9a\\x72\\x30\\x1f\\xfb\\x34\\x07\\x8a\\x28\\x88\\x85\\x5d\\x88\\x08\\x78\\x79\"\n\"\\xf7\\x6a\\x9d\\x7c\\x06\\x5c\\x8e\\x88\\x91\\x8a\\xee\\x08\\xf7\\x31\\x07\\xcd\\x87\\xa6\\x7e\\xa9\\x1e\\xae\\x7b\\x67\\xa1\\x61\\x1b\\x5a\\x5e\\x72\\x50\\x50\"\n\"\\x1f\\x0e\\x84\\x32\\x0a\\xf8\\x18\\xf9\\x27\\x20\\x0a\\x84\\x32\\x0a\\xf7\\x52\\xfb\\xbc\\x25\\x0a\\xf8\\x81\\xf8\\xa4\\xf7\\x6c\\x15\\xf7\\x83\\xc8\\xfb\\x60\"\n\"\\x06\\xe3\\xf7\\x2f\\x05\\xf7\\x08\\xc9\\x3a\\x06\\xac\\xc6\\x61\\xa3\\x5c\\x38\\x05\\xfb\\x23\\x65\\x1d\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x37\\xdc\\x69\\x1e\\x6a\"\n\"\\x52\\xb6\\x74\\xb1\\xce\\x05\\x88\\xa4\\x99\\x8a\\xb4\\x1b\\xf7\\xac\\xc9\\xfb\\xb7\\x06\\x77\\x85\\x8b\\x8c\\x81\\x1f\\xab\\xf7\\x2d\\x15\\x3a\\xfb\\x21\\x57\"\n\"\\x9d\\x6c\\xbe\\x88\\xd3\\x19\\xf7\\xb6\\xf7\\x6c\\x15\\x33\\xfb\\x2f\\x05\\xfb\\x5e\\x06\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\x0e\\xf8\\x81\\xf8\\x14\\xf7\"\n\"\\x04\\x15\\x4f\\xfb\\x0b\\xd3\\x67\\xd9\\xf7\\x2f\\x05\\xf7\\xaa\\xdb\\xfb\\x82\\x06\\xc8\\xf7\\x0e\\x05\\xf7\\x45\\xdb\\xfb\\x1c\\x06\\xc7\\xf7\\x0b\\x43\\xaf\"\n\"\\x3d\\xfb\\x2f\\x05\\xfb\\xaa\\x3b\\xf7\\x82\\x06\\x4e\\xfb\\x0e\\x05\\xfb\\x45\\x3b\\x06\\x0e\\x54\\xf7\\x90\\xf7\\x03\\x15\\x32\\xf7\\xae\\x05\\xb2\\x7f\\x71\"\n\"\\xae\\x7b\\x1b\\x87\\x87\\x89\\x88\\x87\\x1f\\x3a\\x4d\\x92\\x7d\\x05\\x91\\x97\\x91\\x8d\\x94\\x1b\\x98\\x98\\x83\\x7f\\x91\\x1f\\x92\\x7e\\x8b\\x8b\\x9d\\x54\"\n\"\\xf0\\xfb\\xd0\\x18\\xa4\\x06\\xf7\\x31\\xf7\\xca\\x05\\xa0\\xb4\\x96\\xb0\\xa6\\x1a\\xad\\x77\\xa3\\x70\\x70\\x77\\x75\\x6c\\x84\\x8c\\x81\\x8d\\x83\\x1e\\x94\"\n\"\\x68\\x8c\\x86\\x7c\\x1a\\x74\\x83\\x70\\x77\\x62\\x1e\\x0e\\x84\\x24\\x0a\\xf7\\x10\\xf7\\x7c\\x15\\x3f\\x6f\\x72\\x39\\x1d\\x84\\x24\\x0a\\xb3\\xd6\\x9a\\x0a\"\n\"\\xfb\\x08\\x16\\x30\\x1d\\xa0\\x2a\\x1d\\x0e\\x84\\x24\\x0a\\xfb\\x22\\xf7\\x3d\\x23\\x1d\\xf7\\x2b\\xf7\\x49\\xf8\\x62\\x15\\x39\\x4f\\x60\\x33\\x24\\x1a\\xfb\"\n\"\\x11\\xc9\\x2e\\xdf\\xc1\\xb9\\xaf\\xd0\\xab\\x1e\\x45\\xab\\xb2\\x68\\xbb\\x1b\\xdf\\xcc\\xf5\\xf7\\x1d\\xf7\\x1a\\x5a\\xe7\\x44\\x72\\x79\\x79\\x72\\x78\\x97\"\n\"\\x79\\x9b\\x84\\x1f\\xbd\\x78\\x90\\x88\\x9a\\x74\\x08\\x9d\\x71\\x95\\x62\\x60\\x1a\\x2f\\x5a\\x46\\x48\\x60\\x6e\\xa2\\xc1\\x72\\x1e\\x9d\\xc0\\x92\\xad\\xb5\"\n\"\\x1a\\xbd\\x7d\\xa7\\x73\\x6f\\x7b\\x6c\\x55\\x5e\\x92\\x6a\\x9d\\x5d\\x1e\\x57\\x71\\x6d\\x73\\x68\\x1b\\x51\\x69\\xcc\\xf7\\x04\\xdf\\xa0\\xd1\\xb5\\xc7\\x1f\"\n\"\\x0e\\xf7\\x2b\\xf7\\x49\\xf8\\x63\\x15\\x3a\\x4f\\x5f\\x33\\x23\\x1a\\xfb\\x11\\xc9\\x2e\\xdf\\xc1\\xb9\\xb0\\xd0\\xab\\x1e\\x44\\xab\\xb2\\x68\\xbb\\x1b\\xdf\"\n\"\\xcc\\xf6\\xf7\\x1d\\xf7\\x1a\\x5a\\xe8\\x44\\x72\\x79\\x79\\x72\\x77\\x97\\x79\\x9b\\x85\\x1f\\xbd\\x78\\x90\\x88\\x9a\\x74\\x08\\x9d\\x70\\x95\\x62\\x60\\x1a\"\n\"\\x2e\\x5a\\x46\\x48\\x60\\x6e\\xa2\\xc2\\x72\\x1e\\x9d\\xbf\\x92\\xae\\xb6\\x1a\\xbd\\x7d\\xa7\\x73\\x6f\\x7b\\x6b\\x55\\x5e\\x92\\x6a\\x9d\\x5c\\x1e\\x57\\x71\"\n\"\\x6d\\x73\\x67\\x1b\\x52\\x69\\xcc\\xf7\\x05\\xdf\\xa0\\xd2\\xb5\\xc6\\x1f\\xf7\\x0b\\xc0\\x15\\xa6\\x06\\x94\\xb3\\x05\\x98\\xbd\\x8c\\x91\\x9f\\x1a\\xac\\x7e\"\n\"\\x9c\\x74\\x73\\xe6\\x1d\\x84\\x89\\x1d\\x0e\\x84\\x89\\x1d\\x85\\xd8\\x15\\xa6\\x06\\x94\\xb3\\x05\\x98\\xbd\\x8c\\x91\\x9f\\x1a\\xab\\x7e\\x9d\\x73\\x74\\x7e\"\n\"\\x7a\\x6a\\x77\\x8c\\x88\\x98\\x56\\x1e\\x0e\\xf8\\x6c\\x93\\x16\\xfa\\x56\\xd3\\xfe\\x0e\\xfa\\x03\\x43\\x06\\x0e\\x84\\x68\\x0a\\xa0\\x81\\x71\\xa7\\x1e\\xfb\"\n\"\\x0b\\xf7\\x03\\x2a\\x0a\\x84\\xf7\\x03\\xf9\\x36\\x15\\xa2\\xb8\\xab\\x94\\xae\\x1b\\xf1\\xc5\\x2c\\xfb\\x38\\x6e\\x89\\x73\\x86\\x5b\\x1f\\xbd\\x4b\\x67\\x9b\"\n\"\\x58\\x1b\\x5a\\x62\\x79\\x64\\x67\\x1f\\x5f\\x5d\\x72\\x4c\\x4d\\x1a\\xfb\\x00\\xde\\x35\\xf3\\xd1\\xc5\\xab\\xc9\\xb5\\x1e\\xb9\\xcf\\xac\\xf7\\x19\\xf7\\x0a\"\n\"\\x1a\\xf7\\x08\\x6a\\xe7\\x46\\xd1\\x1e\\xbc\\x5b\\x56\\xa2\\x4b\\x1b\\x64\\x68\\x83\\x77\\x54\\x1f\\xf7\\xc0\\xfc\\x31\\x15\\x7b\\xfb\\x03\\x81\\x60\\x71\\x58\"\n\"\\x08\\x56\\x71\\x60\\x6a\\x5f\\x1b\\x54\\x6a\\xbf\\xe1\\xf7\\x06\\xce\\xe9\\xdc\\xb1\\xa4\\x7e\\x61\\xb5\\x1f\\x0e\\xf7\\xec\\xd3\\xf9\\x17\\x15\\xd5\\x83\\x94\"\n\"\\x48\\x1d\\x84\\x82\\x3f\\x84\\x08\\x78\\xf7\\xac\\x9e\\x07\\x3c\\x8d\\x7d\\x99\\x8a\\xd5\\x08\\xf7\\x4a\\xd9\\x1d\\xc7\\xab\\xaf\\xc8\\xcd\\x1a\\xb5\\x7d\\xb1\"\n\"\\x70\\xa8\\x1e\\xb7\\x63\\x34\\xa7\\x2d\\x1b\\xfb\\x9c\\x06\\xf7\\x4e\\x44\\x15\\xa6\\x92\\x92\\xa6\\xf7\\x1b\\xc9\\x5c\\x24\\x2a\\x50\\x59\\xfb\\x07\\x77\\x7d\"\n\"\\x8c\\x8d\\x74\\x1e\\xf8\\x5e\\x73\\x15\\x48\\xcf\\x06\\x97\\x87\\x8f\\x7f\\x1e\\x6a\\x5b\\x71\\x6c\\x7a\\x81\\x08\\x80\\x84\\x87\\x86\\x85\\x1a\\x86\\x8d\\x87\"\n\"\\x91\\x88\\x1e\\xa8\\xfb\\x51\\x06\\x51\\xa2\\x6c\\xb6\\xa7\\xa8\\x99\\xa2\\x9d\\x1e\\x8e\\x8f\\x8b\\x8b\\x96\\x9c\\x78\\x9b\\x18\\x76\\x78\\x86\\x87\\x7c\\x1b\"\n\"\\x77\\x84\\x99\\xaf\\x1f\\xf7\\x47\\xce\\x07\\x0e\\xd1\\xf7\\x78\\xf8\\x61\\x15\\xfb\\x11\\x82\\x3f\\x37\\xfb\\x14\\x1a\\xfb\\x1f\\xdd\\x31\\xf7\\x1f\\x7c\\x1e\"\n\"\\xfb\\x59\\xce\\xf7\\x59\\x07\\xce\\x92\\xaf\\x98\\xb1\\xa7\\x08\\xc7\\xb8\\xae\\xd4\\xdc\\x1a\\xca\\x77\\xbf\\x63\\xb5\\x1e\\xb2\\x66\\x5d\\xa1\\x5c\\x1b\\x65\"\n\"\\x69\\x7a\\x6e\\x77\\x1f\\x7b\\x75\\x86\\x6e\\x4c\\x1a\\xfb\\xaa\\x07\\x6a\\x95\\x7d\\x92\\x7a\\x9a\\x08\\x5f\\xb1\\x75\\xca\\xe4\\x1a\\xde\\x9f\\xc5\\xb3\\xad\"\n\"\\x1e\\x98\\x95\\x97\\x91\\xa4\\x92\\x08\\xe2\\xfb\\x1c\\x15\\xbb\\x8c\\x9a\\x92\\x97\\x1e\\x9a\\x92\\x98\\x93\\x9c\\x1b\\xc8\\xbd\\x37\\x26\\x3d\\x74\\x54\\x5c\"\n\"\\x6a\\x1f\\x74\\x7b\\x78\\x84\\x5f\\x83\\x08\\x0e\\x89\\xf8\\xa4\\xf8\\x54\\x15\\xfc\\x23\\x06\\x5d\\x80\\x87\\x75\\x71\\x1f\\x37\\x41\\x9c\\x77\\xc7\\xba\\xa9\"\n\"\\x96\\xd2\\x8a\\x19\\x79\\xfb\\x57\\x80\\x5b\\x69\\x6c\\x08\\x62\\x65\\x86\\x83\\x71\\x1a\\x6e\\x9c\\x7a\\xa8\\xc7\\x9f\\xc1\\xf7\\x4f\\x93\\x1e\\x8d\\xad\\x8c\"\n\"\\xa2\\x94\\x1a\\x91\\xe0\\x05\\xf7\\x62\\x06\\x5f\\x61\\x7c\\x6b\\x8a\\x50\\x08\\xfb\\x2b\\x07\\x61\\x8c\\x82\\x92\\x78\\x1e\\x78\\x93\\x9c\\x78\\x94\\x1b\\x8d\"\n\"\\x8d\\x8c\\x8f\\x96\\x1f\\xf7\\x00\\xba\\x87\\xa0\\x05\\x82\\x70\\x7c\\x86\\x87\\x1b\\x7b\\x79\\x99\\x9a\\x87\\x1f\\x8a\\x90\\x8b\\x8b\\xb3\\x1a\\xf7\\x13\\x07\"\n\"\\x8a\\xe6\\x8c\\x95\\x96\\xaa\\x08\\xf7\\x0d\\x06\\x0e\\xf8\\x81\\xf9\\x45\\xf9\\x55\\x15\\xfd\\x72\\x07\\x54\\x8a\\x78\\x77\\x54\\xbd\\x0a\\xf9\\x3b\\x07\\xc4\"\n\"\\xa0\\xa2\\xc0\\x1e\\x9c\\x9d\\xfd\\x9f\\x79\\x9b\\x06\\xc1\\x9f\\x75\\x51\\x8c\\x1f\\xfd\\x3b\\x07\\x54\\x8a\\x77\\x77\\x55\\xbd\\x0a\\xf9\\x72\\x07\\x0e\\xf8\"\n\"\\x81\\xf9\\x93\\xc9\\x15\\xfb\\xb7\\x06\\xfb\\x0d\\x57\\xc2\\xf7\\x16\\xf7\\x15\\xbf\\xc3\\xf7\\x0d\\x1f\\xf7\\xb7\\xc9\\xfb\\xac\\x65\\x1d\\x43\\x2b\\x1a\\xfb\"\n\"\\x07\\xb8\\x37\\xc6\\x0a\\x06\\x0e\\xf8\\x81\\xf7\\x7d\\xc9\\x15\\x4d\\xf7\\xac\\x07\\xde\\xae\\x92\\xa4\\xb1\\x1f\\xcc\\xb7\\xac\\xd3\\xf2\\x1a\\xf6\\x5c\\xe0\"\n\"\\x3e\\xac\\x1e\\x99\\x69\\x70\\x8f\\x46\\x1b\\xfb\\xac\\x4d\\xf7\\xb7\\x06\\xf7\\x0d\\xbf\\x54\\xfb\\x16\\xfb\\x16\\x57\\x54\\xfb\\x0d\\x1f\\x0e\\xf7\\x0b\\xf7\"\n\"\\xba\\xf8\\x56\\x15\\xfc\\x14\\x07\\x31\\x93\\x68\\xb3\\x8f\\xe4\\x08\\xf7\\x46\\x07\\xa9\\x89\\x95\\x82\\x99\\x1e\\x99\\x82\\x81\\x93\\x85\\x1b\\x89\\x86\\x89\"\n\"\\x88\\x85\\x1f\\x26\\x58\\x91\\x7e\\x05\\x93\\x98\\x92\\x8d\\x96\\x1b\\xaa\\x94\\x7a\\x4c\\x1f\\xfb\\x1b\\x07\\x88\\xfb\\x06\\xcf\\x49\\xf7\\x15\\x81\\x08\\xfb\"\n\"\\x40\\xd6\\xf7\\x3e\\x07\\xf7\\x13\\xa8\\xd5\\xf0\\xf7\\x24\\x1a\\xf7\\x00\\x65\\xdf\\x59\\x73\\x76\\x77\\x74\\x7b\\x93\\x7c\\x9e\\x79\\x1e\\xb0\\x68\\x8b\\x8b\"\n\"\\x95\\x7b\\x08\\x98\\x76\\x91\\x71\\x6c\\x1a\\x53\\x76\\x58\\x68\\x6e\\x1e\\x71\\x75\\x71\\x82\\x56\\x84\\x08\\xf8\\x18\\x07\\x0e\\xfb\\x42\\xf7\\x80\\xf8\\x58\"\n\"\\x15\\x55\\xb1\\x6f\\xae\\xac\\x1a\\x93\\x91\\x91\\x93\\x8c\\x8c\\x8b\\x8a\\x8d\\x1e\\x89\\x95\\x8f\\x8a\\x94\\x1b\\xb0\\xa1\\x9e\\xab\\xad\\x73\\xa2\\x68\\x5e\"\n\"\\x68\\x65\\x58\\x4f\\xb8\\x4e\\xce\\x6a\\x1f\\x0e\\xfb\\x42\\x40\\x1d\\xf7\\x14\\xf8\\x80\\x3a\\x1d\\xf8\\x5b\\x4a\\x15\\xf7\\x32\\xfa\\x68\\x53\\x94\\xfb\\x0f\"\n\"\\xfd\\x95\\xfb\\x4e\\xf8\\x0d\\xfb\\x37\\x3c\\xa3\\x58\\xea\\xba\\x05\\x0e\\xfb\\x42\\x40\\x1d\\xf7\\xd1\\xf9\\x27\\x20\\x0a\\xfb\\x42\\x40\\x1d\\xda\\xfb\\xbc\"\n\"\\x25\\x0a\\xf8\\x12\\xf9\\x4c\\xf8\\x22\\x15\\xfc\\x8c\\xfb\\xb9\\xdb\\xf7\\x69\\xf8\\x3c\\x06\\x0e\\x83\\xf7\\x2c\\xfb\\x4a\\x15\\xf7\\x6c\\x07\\x6b\\xae\\xa7\"\n\"\\x7f\\xb5\\x1b\\xf7\\x07\\xe2\\xf2\\xf7\\x1c\\xf7\\x20\\x3c\\xe7\\xfb\\x0b\\x4d\\x54\\x72\\x5f\\x6a\\x1f\\x70\\x66\\x80\\x59\\x2e\\x1a\\xfc\\x1e\\x07\\xda\\xf8\"\n\"\\x66\\x15\\xb8\\x90\\xa6\\x99\\xa2\\x1e\\xa9\\x9b\\xa8\\x9c\\xac\\x1b\\xd6\\xba\\x3c\\xfb\\x15\\xfb\\x09\\x5d\\x41\\x43\\x67\\x70\\x99\\xb0\\x65\\x1f\\x0e\\xfb\"\n\"\\x0a\\x4a\\x0a\\xfb\\x0b\\xf7\\x55\\x15\\x5f\\x1d\\xfb\\x0a\\xf7\\x5a\\x81\\x15\\x96\\x06\\xd7\\xca\\xc5\\xd1\\xbd\\x73\\xac\\x4f\\x56\\x1d\\x9a\\x06\\x87\\xf7\"\n\"\\x1d\\x05\\x80\\x06\\x83\\x86\\x86\\x88\\x85\\x1b\\x85\\x81\\x8d\\x90\\x80\\x1f\\x93\\x74\\x74\\x90\\x73\\x1b\\x3c\\x52\\x57\\x43\\x53\\xab\\x63\\xe0\\x5b\\x1f\"\n\"\\xc5\\x6a\\x05\\xae\\x77\\x9c\\x73\\x6c\\x1a\\x5f\\x6b\\x6f\\x58\\x46\\x68\\xb1\\xf1\\x74\\x1e\\x7b\\xfb\\x30\\x98\\x06\\x95\\x92\\x8f\\x8d\\x97\\x1b\\x96\\x96\"\n\"\\x89\\x85\\xa3\\x1f\\x97\\x89\\x91\\x89\\x98\\x89\\x64\\x2e\\x18\\x98\\x1d\\x55\\x81\\x5c\\x0a\\x0e\\xfb\\x0a\\x65\\x0a\\xf7\\x55\\x20\\x1d\\xfb\\x0a\\x4a\\x0a\"\n\"\\xfb\\x28\\xfc\\xe7\\x25\\x0a\\x31\\xf7\\x17\\x9d\\x0a\\xf7\\x32\\x16\\xab\\xcb\\x05\\xa7\\xc4\\x98\\xb0\\xa5\\x1a\\xa3\\x7a\\x9c\\x73\\x68\\x7b\\x62\\x23\\x84\"\n\"\\x1e\\x86\\x3b\\x05\\x0e\\xab\\xf8\\xac\\xf8\\x5f\\x15\\xfb\\x89\\x06\\x46\\x7c\\x89\\x7c\\x69\\x1f\\x37\\x67\\x53\\x31\\x28\\x1a\\xfb\\x18\\xe6\\x2b\\xf7\\x10\"\n\"\\xf7\\x12\\xee\\xf7\\x00\\xf7\\x1f\\xbd\\x7c\\xbc\\x72\\xad\\x1e\\x7c\\x9f\\x7d\\x97\\x6b\\x9f\\xf7\\x38\\x76\\x18\\xfb\\xbf\\xa5\\x15\\xe1\\xc4\\x2e\\xfb\\x22\"\n\"\\x21\\x61\\x4c\\x45\\x66\\x67\\x9e\\xaa\\x76\\x1f\\x6d\\xb8\\x79\\xd0\\xd2\\x1a\\xf4\\xb5\\xcb\\xd0\\x1e\\x0e\\xf8\\x81\\xf8\\x1b\\xf8\\x9a\\xaa\\x0a\\xfb\\x14\"\n\"\\xfb\\x00\\x15\\x92\\x36\\x96\\x62\\xa9\\x5e\\x08\\x4c\\xb5\\xcb\\x6b\\xde\\x1b\\xd8\\xc7\\xa6\\xc1\\xb5\\x1f\\xaf\\xba\\x9a\\xb8\\x92\\xe8\\x80\\x59\\x80\\x75\"\n\"\\x71\\x6d\\x08\\x54\\x5b\\x4f\\x71\\x3a\\x1b\\x3a\\x4f\\xa5\\xc2\\x5b\\x1f\\x71\\xa9\\x80\\xa1\\x80\\xbd\\x08\\xf7\\xee\\xf7\\x00\\xaa\\x0a\\xfb\\x01\\xf7\\x68\"\n\"\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\\xf7\\x37\\xfb\"\n\"\\x5e\\x1f\\x89\\x5a\\x15\\xf7\\x45\\xf7\\x21\\xfb\\x20\\xfb\\x44\\xfb\\x43\\xfb\\x21\\xfb\\x21\\xfb\\x43\\xfb\\x41\\xfb\\x23\\xf7\\x21\\xf7\\x3e\\xf7\\x47\\xf7\"\n\"\\x1e\\xf7\\x22\\xf7\\x44\\x1f\\x0e\\xf8\\x81\\xf7\\xbb\\x16\\xf8\\x77\\xa2\\x06\\xfb\\x35\\x93\\x3f\\xe0\\x8e\\xf7\\x3e\\x08\\x38\\xb7\\xb9\\x6a\\xd4\\x1b\\xd1\"\n\"\\xc5\\xc9\\xd5\\xcf\\x71\\xb4\\x20\\xec\\x1f\\xfb\\x01\\xf0\\x78\\xa6\\x64\\xf7\\x09\\x7b\\x2e\\x51\\x37\\x20\\x34\\x08\\x3a\\x48\\x69\\x53\\x4b\\x1a\\x40\\xc8\"\n\"\\x4d\\xd4\\xb5\\xb4\\x9c\\xa9\\xab\\x1e\\x9e\\x9d\\x96\\x9a\\x9c\\xb0\\x91\\xfb\\x3b\\x34\\x2c\\xfb\\x33\\x8a\\x08\\x0e\\xf8\\x81\\xf7\\xee\\xf9\\x5b\\x15\\xf7\"\n\"\\x85\\x06\\xf4\\x8a\\xa5\\x75\\x9a\\x26\\x08\\xa2\\x06\\x82\\xf7\\x39\\x05\\xfc\\xaf\\x06\\xf7\\x66\\xfc\\x67\\xfb\\x6e\\xfc\\x2c\\x05\\xf8\\xc8\\x06\\xbc\\xf7\"\n\"\\x66\\x05\\x74\\x06\\x6f\\x3b\\x6c\\x78\\x26\\x8c\\x08\\xfb\\xbc\\x06\\xf7\\x49\\xf7\\xf4\\x05\\x0e\\xf8\\x81\\xf7\\xcd\\xf8\\x77\\x15\\x6e\\x66\\x7c\\x67\\x85\"\n\"\\x5b\\x08\\xfb\\x05\\x54\\xf7\\x05\\x06\\x8f\\x61\\x9e\\x5b\\xa6\\x6a\\x3b\\x3c\\x18\\xb1\\x65\\xdb\\xdb\\xb1\\x6e\\xb2\\x7b\\xb8\\x86\\x19\\xfb\\x05\\xc1\\xf7\"\n\"\\x05\\x07\\xb7\\x90\\xb9\\x9e\\xab\\xa5\\xdb\\x3b\\x18\\xb0\\xb1\\x3b\\xdb\\xa8\\xae\\x9c\\xb5\\x90\\xb8\\x19\\xf7\\x05\\xc2\\xfb\\x05\\x06\\x86\\xb6\\x79\\xb7\"\n\"\\x70\\xad\\xda\\xda\\x18\\x66\\xb1\\x3b\\x3b\\x69\\xa6\\x62\\x9c\\x5c\\x92\\x19\\xf7\\x04\\x55\\xfb\\x04\\x07\\x60\\x86\\x5f\\x79\\x68\\x6f\\x3b\\xdb\\x18\\x65\"\n\"\\x65\\x05\\xf7\\x9c\\x55\\x15\\xec\\xd8\\x40\\x2d\\x2b\\x3f\\x3e\\x2c\\x2d\\x3e\\xd8\\xea\\xe7\\xd8\\xd9\\xe6\\x1f\\x0e\\x22\\xf8\\x3c\\x26\\x0a\\xfb\\xae\\x06\"\n\"\\x4c\\x8a\\x79\\x85\\x74\\x6b\\x54\\x3e\\x18\\xb4\\x74\\xb6\\xc8\\xae\\x9b\\xe2\\x8a\\x19\\x9a\\x06\\x6a\\x4d\\x83\\x6b\\x89\\x49\\x08\\xfb\\x24\\x07\\x56\\x9b\"\n\"\\x5f\\x9e\\x8e\\x8b\\x8b\\x95\\x9e\\x1e\\xf7\\x0e\\xb6\\x05\\xb2\\x07\\x7f\\x70\\x80\\x88\\x7f\\x1b\\x70\\x7e\\xa7\\xc5\\x1f\\xf7\\x1a\\x07\\x8d\\xc7\\x90\\xa1\"\n\"\\x9c\\xa1\\x08\\xf7\\x2a\\x06\\x0e\\xfb\\x79\\xf7\\x2e\\xf7\\xd1\\x15\\xf0\\x92\\x0a\\x26\\x45\\x69\\xd1\\xfb\\x3a\\x06\\x37\\xa9\\x60\\xc6\\xbc\\xb1\\xa3\\xbf\"\n\"\\xac\\x1e\\x7e\\x96\\x05\\x63\\x1d\\xf7\\x2b\\xf7\\x10\\xad\\x07\\x0e\\xfb\\x0a\\xf7\\x32\\x47\\x0a\\x8c\\x1d\\xab\\x07\\x6b\\x76\\x15\\xa8\\xa0\\x05\\xbf\\xb2\"\n\"\\xa9\\xbc\\xbc\\x8c\\x0a\\x0e\\xfb\\x79\\xf7\\x42\\x82\\x15\\xb8\\x92\\xad\\xa3\\xa5\\xb7\\x7e\\x96\\x18\\x63\\x1d\\xf7\\xb2\\x92\\x0a\\xfb\\xc1\\x06\\x8d\\x3c\"\n\"\\x9f\\x67\\xbb\\x81\\x65\\x30\\x18\\x2d\\x0a\\x97\\x5a\\x0a\\x6a\\x75\\x7a\\x8e\\x94\\x70\\xa1\\x0a\\xc0\\xb6\\xc6\\x1d\\x6f\\xf7\\x88\\xf9\\x31\\x15\\x51\\x5c\"\n\"\\x6d\\x4d\\x64\\x1f\\x60\\x48\\x73\\x31\\x2b\\x1a\\x36\\x9e\\x3b\\xae\\x4b\\x1e\\x49\\xae\\xc0\\x67\\xc8\\x1b\\xf7\\x0a\\xe7\\xf7\\x2c\\xf7\\x56\\xf7\\x51\\x35\"\n\"\\xf7\\x21\\xfb\\x08\\x1f\\xfb\\x0d\\xfb\\xb2\\x15\\xf7\\x36\\x93\\xb1\\xe4\\xc9\\x1b\\xcd\\xb7\\x30\\xfb\\x34\\x98\\x1f\\x8d\\x66\\x15\\x8c\\x79\\x8b\\x7f\\x7e\"\n\"\\x1a\\xfb\\x3a\\x60\\xfb\\x01\\x48\\x3e\\x5b\\xf7\\x0e\\xf7\\x58\\x1e\\x0e\\xfb\\x42\\xf7\\x2e\\xf8\\x8b\\x15\\xa5\\x06\\x95\\xb3\\x05\\x98\\xc0\\x8c\\x8e\\x9f\"\n\"\\x1a\\xac\\x7e\\x9c\\x73\\x73\\x7e\\x7a\\x6a\\x78\\x8c\\x85\\x98\\x58\\x1e\\x0e\\x84\\x25\\x1d\\xfb\\x0f\\xf9\\x08\\x37\\x1d\\x84\\x25\\x1d\\xfb\\x5e\\xf8\\x6b\"\n\"\\x50\\x1d\\x2a\\x1d\\xfb\\x08\\x16\\x30\\x1d\\xa0\\x2a\\x1d\\x0e\\x84\\x25\\x1d\\xfc\\x14\\xf8\\xc9\\x23\\x1d\\x84\\xfb\\x44\\x04\\x5a\\xf8\\x88\\xbc\\x07\\xfc\"\n\"\\x88\\xe8\\x15\\x5a\\xf8\\x88\\xbc\\x07\\x0e\\xfb\\x95\\x0e\\xfb\\x42\\xc9\\x0a\\xf3\\x53\\x1d\\xfb\\x51\\xfb\\xad\\x15\\xce\\xac\\xb8\\x99\\x1d\\xfb\\x79\\x74\"\n\"\\x0a\\xfb\\x32\\xfd\\x4f\\x25\\x0a\\xfb\\x42\\x96\\xf8\\xed\\x23\\x1d\\xfb\\x95\\xf7\\x11\\xf7\\xca\\x2b\\x0a\\xf7\\x1c\\xf7\\xd9\\xf9\\x31\\x15\\x82\\x06\\xfb\"\n\"\\xb8\\xfd\\x31\\x05\\xf8\\xe8\\x06\\xfb\\x22\\xd7\\x15\\xfb\\xd7\\x06\\x73\\x82\\x8f\\x96\\x92\\x8f\\x9a\\x92\\x9a\\x1f\\xf7\\x36\\xf8\\x0a\\x05\\x0e\\xf7\\x80\"\n\"\\xf7\\xc2\\xf7\\x22\\x15\\x60\\x9b\\x75\\x9a\\x75\\xa7\\x08\\x68\\xba\\x78\\xcc\\xd8\\x1a\\xdd\\xa1\\xcf\\xb5\\xb9\\x1e\\xaf\\xac\\xbd\\x9e\\xcb\\x1b\\xca\\xbd\"\n\"\\x78\\x67\\xac\\x1f\\xb5\\x5d\\xa1\\x48\\x37\\x1a\\x3e\\x78\\x4b\\x68\\x5c\\x1e\\x75\\x6f\\x75\\x7c\\x60\\x7b\\x7c\\xfb\\x22\\x18\\xf7\\xbb\\xf7\\x37\\x7b\\x06\"\n\"\\x59\\x7f\\x7f\\x81\\x5b\\x1b\\xfb\\x28\\x99\\x06\\xc1\\x9b\\xb0\\x9c\\xaa\\xa4\\x08\\xc5\\xbb\\xb0\\xdd\\xde\\x1a\\xdb\\x67\\xdb\\x4e\\xbf\\x1e\\xbc\\x52\\x39\"\n\"\\xa5\\x2c\\x1b\\x2d\\x39\\x71\\x5a\\x52\\x1f\\x4e\\x57\\x67\\x3b\\x3b\\x1a\\x3f\\xaa\\x3e\\xbe\\x5b\\x1e\\xac\\x6c\\xb2\\x76\\xca\\x79\\x08\\x7d\\xfb\\x28\\x07\"\n\"\\x5b\\x80\\x95\\xbd\\x7f\\x1f\\x7a\\xfb\\x37\\xf7\\xbb\\x06\\x0e\\xa8\\xf8\\x43\\xf8\\x56\\x15\\x3c\\xfb\\xe1\\x06\\x5b\\x53\\x78\\x81\\x69\\x1b\\x59\\x77\\xaa\"\n\"\\xd9\\x1f\\xf7\\xae\\x3c\\xfb\\x23\\x07\\x89\\xfb\\x37\\x88\\x69\\x79\\xfb\\x16\\x08\\x7c\\x2b\\x8b\\x8b\\x7c\\x1a\\x6b\\x9d\\x75\\xa5\\xa3\\x9b\\x9f\\xa9\\x96\"\n\"\\x89\\x9c\\x87\\x9b\\x1e\\x78\\xdc\\x89\\x9c\\x89\\xcc\\x08\\x55\\x9e\\xa9\\x72\\xba\\x1b\\xac\\xae\\x99\\xa4\\xa6\\x1f\\x9a\\x98\\x90\\x90\\xa9\\xad\\x08\\x7a\"\n\"\\x07\\x69\\x8e\\x80\\x9b\\x7a\\x1e\\x81\\x93\\x92\\x86\\x8f\\x1b\\x8d\\x90\\x8d\\x8e\\x91\\x1f\\xf2\\xbf\\x85\\x99\\x05\\x83\\x7f\\x84\\x88\\x80\\x1b\\x6c\\x83\"\n\"\\x9c\\xcc\\x1f\\x0e\\xfb\\x03\\xf7\\xcc\\xd9\\x15\\x81\\x82\\x8a\\x88\\x6f\\x1f\\x89\\x79\\x78\\x8a\\x81\\x1b\\x3e\\x60\\xbe\\xe7\\xc5\\x9a\\xb9\\xa9\\xab\\x1f\"\n\"\\xa9\\xa6\\xb4\\xa0\\xac\\x1b\\x99\\x99\\x87\\x80\\xa0\\x1f\\x7d\\xa6\\x94\\x88\\x9b\\x1b\\xa5\\x9d\\x9d\\xa3\\xab\\x6b\\x9f\\x58\\xfb\\x29\\xfb\\x0d\\xfb\\x12\"\n\"\\xfb\\x2e\\x4f\\x9d\\x5a\\xad\\x69\\x1f\\x6d\\xa9\\xb3\\x7e\\xc6\\x1b\\x99\\x98\\x8c\\x8c\\x98\\x1f\\x8e\\xa5\\xa1\\x8d\\x90\\x1b\\xa2\\x98\\x7f\\x78\\x69\\x70\"\n\"\\x6e\\x6d\\x82\\x85\\x8c\\x90\\x7d\\x1f\\x8f\\x7f\\x83\\x8d\\x84\\x1b\\x73\\x7b\\x7d\\x75\\x72\\xa2\\x7a\\xaf\\xcf\\xcc\\xd5\\xda\\xbf\\x71\\xa8\\x5c\\x1f\\x0e\"\n\"\\xf3\\x21\\x0a\\xfb\\x3f\\xf9\\x63\\x15\\xfb\\x26\\x61\\x1d\\x6d\\x0a\\x36\\xf7\\x33\\x15\\xfb\\x27\\xf7\\x28\\x05\\x9d\\x79\\x82\\x90\\x7b\\x1b\\x77\\x7e\\x7f\"\n\"\\x78\\x7b\\x95\\x7c\\x9e\\x7f\\x1f\\xf7\\x2e\\x2a\\x05\\x0e\\x4c\\xf8\\x33\\x7f\\x1d\\xb0\\xf7\\x5a\\x29\\x0a\\xa7\\x76\\x1d\\xfb\\x3c\\xc4\\x38\\x1d\\xbc\\xf7\"\n\"\\x5d\\xf7\\xdb\\x15\\xf7\\x25\\x06\\xdd\\x8a\\x9b\\x7d\\x97\\x3a\\x08\\xa2\\xf7\\x7c\\x74\\x06\\x80\\x3c\\x7a\\x7d\\x39\\x89\\x08\\xfb\\x25\\xf7\\x72\\x06\\x8c\"\n\"\\xa9\\x8e\\x8e\\xa7\\x8c\\x08\\xf7\\x1c\\x54\\x1d\\xfb\\x4d\\x3c\\x62\\xda\\xfb\\x63\\xa5\\x0a\\x0e\\x2a\\xf7\\x49\\xf7\\x81\\x15\\xf7\\x42\\xdd\\x07\\xcf\\xac\"\n\"\\x6e\\x44\\x95\\x1f\\x9d\\x06\\x7a\\xf7\\x1f\\x05\\xfb\\xef\\x7a\\x9c\\x06\\xbe\\x88\\x90\\x83\\x8c\\x2e\\x08\\x2f\\x3d\\x6a\\xd9\\x37\\x07\\x8a\\x2f\\x86\\x83\"\n\"\\x58\\x88\\x08\\x7a\\x7a\\xf7\\x75\\x9c\\x7c\\x06\\x5a\\x8c\\x83\\x9a\\xe2\\x1a\\xdf\\xf4\\xac\\x07\\x0e\\xf8\\x19\\x7a\\x0a\\xc9\\x07\\xf7\\x0e\\xb3\\x67\\xfb\"\n\"\\x12\\xa2\\x1f\\x9d\\x06\\x84\\xf7\\x54\\x05\\x45\\x82\\x90\\xea\\x3c\\x1f\\xfb\\x48\\xf7\\x82\\xbd\\xcd\\xb7\\xc6\\xb1\\xbe\\x19\\xc4\\xdb\\x9d\\x9a\\xc1\\x8f\"\n\"\\x08\\x9e\\xfb\\x56\\x78\\x07\\xae\\x8a\\x96\\x85\\x7b\\x1a\\x66\\x41\\xfb\\x02\\x24\\xfb\\x08\\x1e\\x76\\xf7\\x5e\\x06\\xd1\\x98\\x9a\\xc6\\x1e\\x9d\\xfb\\x78\"\n\"\\x79\\x07\\xc6\\x98\\x7c\\x45\\x1f\\xfb\\x5e\\x76\\x07\\x24\\xf7\\x08\\x41\\xf7\\x02\\xb0\\x1a\\x9c\\x96\\x90\\xae\\x8c\\x1e\\x9e\\xfb\\x56\\x78\\x07\\xc1\\x87\"\n\"\\x9e\\x7c\\xc3\\x3b\\x9c\\x73\\xbe\\x47\\x97\\x7c\\x97\\x7b\\x97\\x7b\\x97\\x7c\\x9b\\x75\\x18\\xfb\\x4a\\xfb\\x80\\x46\\x34\\x69\\x71\\x5b\\x8a\\x19\\x79\\xf7\"\n\"\\x91\\x9d\\x07\\x69\\x8d\\x80\\x91\\x9d\\x1a\\x9a\\x92\\x97\\xba\\xca\\x1e\\xf7\\x16\\xf7\\x4f\\x05\\x0e\\xf7\\x4c\\x7d\\x0a\\xb0\\x06\\xee\\xa6\\x76\\x29\\xa5\"\n\"\\x1f\\x9e\\xf7\\x28\\x06\\x4c\\x8c\\x7e\\x91\\x61\\xbc\\xfb\\x19\\xf7\\x3a\\x18\\xf7\\x01\\xf7\\x0f\\xb1\\xb6\\xad\\x9c\\xb8\\x8a\\x19\\x9c\\xfb\\x4b\\x7a\\x94\"\n\"\\x07\\x9d\\x98\\x82\\x7e\\x82\\x87\\x82\\x81\\x80\\x1f\\xfb\\x11\\xfb\\x21\\x05\\x71\\xe4\\x06\\x8c\\xe6\\x90\\x94\\xbd\\x8e\\x08\\x9d\\x9c\\xfb\\x77\\x7a\\x9d\"\n\"\\x06\\xbd\\x88\\x90\\x82\\x8d\\x30\\x08\\x32\\x70\\x07\\xfb\\x11\\xf7\\x21\\x05\\x82\\x96\\x87\\x93\\x95\\x1a\\x99\\x96\\x93\\x9e\\x1e\\x94\\x9c\\xfb\\x4b\\x7a\"\n\"\\x06\\xb8\\x8c\\xad\\x7a\\xb1\\x60\\xf7\\x02\\xfb\\x0f\\x18\\xfb\\x19\\xfb\\x3a\\x05\\x5a\\x64\\x6e\\x78\\x69\\x1b\\x83\\x7a\\xf7\\x5b\\x9c\\x79\\x06\\x80\\x84\"\n\"\\x90\\x93\\x92\\x8e\\x92\\x92\\x94\\x1f\\xf7\\x10\\xf7\\x31\\x05\\x0e\\x85\\xf7\\x8c\\x82\\x15\\xf7\\x15\\x93\\xe1\\xd7\\xf5\\x1a\\xc2\\x75\\xbc\\x63\\xaa\\x1e\"\n\"\\x81\\x0a\\x86\\xfb\\x47\\x05\\x9e\\x06\\xe6\\x96\\xbc\\xba\\xde\\x1b\\xd6\\xb9\\x5f\\x42\\x34\\x56\\x5e\\x25\\x87\\x7f\\x8b\\x8c\\x7f\\x1f\\x5e\\x9a\\x07\\xc5\"\n\"\\xb2\\x84\\x7c\\xa3\\x1f\\xb4\\x72\\xa2\\x5e\\x54\\x1a\\x32\\x51\\x4f\\x34\\x42\\x53\\xb0\\xd9\\x5f\\x1e\\x75\\x7e\\xb5\\x31\\xd4\\x58\\xe8\\x86\\x19\\x65\\x30\"\n\"\\x92\\x86\\x05\\x8e\\x94\\x93\\x8c\\x97\\x1b\\xb0\\x9a\\x81\\x71\\x70\\x77\\x7a\\x69\\x75\\x7b\\x8e\\x94\\x6f\\x44\\x1d\\x56\\x80\\x85\\x8a\\x89\\x81\\x1f\\x0e\"\n\"\\xfb\\x04\\xf7\\x59\\x85\\x15\\xea\\x90\\xcf\\xc2\\xd4\\x1a\\xad\\x7d\\xab\\x73\\xa1\\x1e\\x92\\x1d\\x9c\\x06\\xd7\\x97\\xb2\\xb3\\xcb\\x1b\\xc3\\xae\\x6a\\x58\"\n\"\\x5b\\x67\\x6a\\x58\\x1f\\x6b\\x65\\x06\\x8d\\x92\\x8e\\x8b\\x92\\x1b\\xb5\\xa3\\x84\\x7a\\x9d\\x1f\\x9e\\x79\\x96\\x72\\x6f\\x1a\\x52\\x5f\\x64\\x4b\\x54\\x62\"\n\"\\xa1\\xc2\\x5d\\x1e\\x79\\x7f\\xb2\\x49\\xbf\\x68\\xcf\\x85\\x19\\x64\\x2d\\x2d\\x0a\\x97\\x5a\\x0a\\x69\\x76\\x7a\\x8e\\x94\\x70\\xa1\\x0a\\xc0\\xb6\\xc6\\x1d\"\n\"\\xf7\\x60\\xf7\\x6a\\xf7\\xd5\\x15\\xf7\\x49\\xfb\\x4f\\x05\\xbe\\x57\\x9d\\x73\\x7b\\x1a\\x7b\\x7c\\x85\\x60\\x89\\x1e\\x79\\xee\\x07\\xf7\\x09\\xb8\\x64\\xfb\"\n\"\\x0f\\xa2\\x1f\\x9d\\x06\\x84\\xf7\\x54\\x4b\\x8a\\x7c\\x94\\x31\\xe9\\x19\\xfb\\x75\\xf7\\x80\\x91\\x92\\x91\\x92\\x93\\x93\\x19\\x7e\\x1d\\x0e\\xa5\\xb9\\x1d\"\n\"\\xbd\\x06\\xee\\xa6\\x75\\x2a\\xa5\\x1f\\x9d\\x06\\x8c\\xf7\\x28\\x05\\x58\\x76\\x91\\x9f\\x77\\x1f\\xfb\\x5e\\xf7\\x57\\xf7\\x39\\xf7\\x22\\xaa\\xa6\\xa6\\x97\"\n\"\\xb4\\x8d\\x19\\x9c\\xfb\\x53\\x7a\\x97\\x07\\xa0\\x95\\x84\\x7a\\x84\\x87\\x84\\x7f\\x81\\x1f\\xfb\\x3f\\xfb\\x2d\\x05\\xec\\x07\\xe3\\x93\\x9a\\xd2\\x1d\\x2e\"\n\"\\x08\\xfb\\x64\\x07\\x89\\x2e\\x87\\x83\\xab\\x0a\\xf7\\x3d\\xf7\\x95\\xf8\\x16\\x15\\x86\\x86\\x89\\x89\\x81\\x82\\x82\\x83\\x82\\x83\\x83\\x83\\x08\\xf7\\x69\"\n\"\\x07\\xcc\\x9a\\x9d\\xc4\\x8c\\x1e\\x8e\\x93\\x8b\\x8c\\x94\\x1f\\x9d\\xfb\\xb4\\x79\\x07\\xd6\\x9a\\x7d\\x44\\x8c\\x1f\\xfc\\x5b\\x07\\x44\\x8a\\x7b\\x7c\\x41\"\n\"\\x1b\\x79\\xf7\\xb4\\x60\\x0a\\xf7\\x6e\\x07\\xb6\\x5e\\x05\\xfb\\x44\\xc9\\xf7\\x04\\x07\\xd7\\x3d\\x05\\xbd\\x58\\x9d\\x72\\x7b\\x1a\\x7b\\x7c\\x85\\x61\\x89\"\n\"\\x1e\\x79\\xf7\\xd1\\x9d\\x07\\x4f\\x8c\\x5f\\xa5\\x36\\xe2\\xfb\\x6b\\xf7\\x73\\x18\\xa6\\x07\\x8f\\x8f\\x8e\\x8f\\xcb\\xcd\\x91\\x92\\xd6\\xdd\\x19\\xd1\\xda\"\n\"\\xa4\\x9a\\xcd\\x90\\x08\\x9d\\xfb\\x86\\x79\\x07\\xb9\\x89\\x97\\x86\\x78\\x1a\\x72\\x5b\\x4b\\x3a\\x38\\x1e\\xf7\\x15\\x4d\\x07\\x0e\\x76\\xf7\\x66\\xf7\\xaa\"\n\"\\x15\\x58\\x5d\\x05\\xed\\x07\\xe3\\x93\\x99\\x97\\x1d\\xeb\\x8f\\x07\\xba\\x5c\\x05\\xfb\\x01\\xae\\xd4\\x07\\xdb\\x3b\\xde\\x1d\\x81\\x7a\\xf7\\x62\\x9c\\x84\"\n\"\\x06\\x77\\x73\\x98\\xa4\\x72\\x1f\\xfb\\x4f\\xf7\\x48\\x05\\xa7\\x07\\xf7\\x29\\xf7\\x15\\xce\\x1d\\x7b\\x83\\x88\\x86\\x7e\\x7f\\x1f\\x36\\x40\\x05\\xe3\\x68\"\n\"\\x07\\x0e\\xf7\\xaf\\xf7\\x72\\xf8\\xfd\\x15\\xfc\\x96\\x67\\x1d\\xf7\\xb5\\x9d\\x07\\x3e\\x7b\\x9a\\xd1\\x1f\\xf7\\x6d\\x07\\xf7\\x4a\\xfb\\x4e\\x05\\xbd\\x57\"\n\"\\x9d\\x73\\x7b\\x1a\\x7b\\x7c\\x85\\x61\\x89\\x1e\\x79\\xf7\\xd1\\x9d\\x07\\x4f\\x8c\\x5f\\xbb\\x0a\\x92\\x92\\x92\\x93\\x91\\x92\\x9a\\x9a\\x9a\\x9b\\x9a\\x9b\"\n\"\\x8e\\x8c\\xd4\\xdb\\xa3\\xa5\\xd1\\xdb\\xa4\\x9a\\xcd\\x8f\\x08\\x9e\\xfb\\x86\\x78\\x07\\xb9\\x8a\\x96\\x86\\x77\\x1a\\x67\\x2a\\xfb\\x05\\xfb\\x1d\\xfb\\x0e\"\n\"\\x1e\\xf7\\x69\\xa2\\x0a\\x0e\\xc6\\xf7\\x35\\xf8\\x2f\\x15\\xfb\\xb6\\x07\\x88\\x4b\\x8b\\x8a\\x89\\x83\\x08\\x74\\x83\\x7d\\x83\\x6d\\x1b\\x79\\x7a\\xf7\\x77\"\n\"\\x9c\\x7b\\x06\\x59\\x8d\\x84\\x99\\xe3\\x1a\\xea\\x8f\\x07\\xf7\\x36\\xfb\\x36\\x05\\x97\\x7e\\x8f\\x86\\x84\\x1a\\x81\\x86\\x89\\x73\\x1e\\x81\\x7a\\xf7\\x63\"\n\"\\x9c\\x84\\x06\\x76\\x74\\x98\\xa4\\x71\\x1f\\xfb\\x5e\\xf7\\x57\\xf7\\x38\\xf7\\x22\\xce\\x1d\\x7a\\x83\\x87\\x86\\x7f\\x80\\x1f\\xfb\\x3f\\xfb\\x2d\\x05\\xed\"\n\"\\x07\\xe3\\x92\\x98\\xbd\\x8d\\x1e\\x9b\\x9c\\xfb\\xba\\x58\\x0a\\x9d\\xd7\\xa6\\xa4\\xce\\x8a\\x08\\x0e\\xf7\\x79\\xca\\x1d\\xf4\\x07\\xf7\\x0a\\x8a\\xb8\\x64\"\n\"\\xa1\\xfb\\x0f\\x08\\x9e\\x06\\x83\\xf7\\x55\\x32\\x8c\\x7a\\x9b\\x8c\\xe0\\x19\\xf8\\x3f\\x76\\x0a\\xa7\\xf7\\x35\\x88\\x1d\\xd5\\x06\\xee\\xa6\\x76\\x29\\xa5\"\n\"\\x1f\\x9d\\x06\\x8c\\xf7\\x28\\x3b\\x8e\\x7c\\x94\\x8e\\xb6\\x19\\xf7\\x8a\\x9e\\x0a\\xf7\\x34\\xf7\\xeb\\x7d\\x15\\x9c\\x06\\xf7\\x05\\xef\\xb9\\xdc\\xc7\\x1f\"\n\"\\x82\\x0a\\xa2\\x06\\x9c\\x0a\\x38\\x6c\\x54\\x4d\\x1f\\x45\\x4d\\x65\\x2f\\xfb\\x02\\x1a\\xfb\\x4d\\xf5\\xfb\\x13\\xf7\\x43\\x72\\x1e\\x66\\x33\\x92\\x86\\x05\"\n\"\\x8e\\x93\\x94\\x8c\\x96\\x1b\\xb1\\x9a\\x81\\x72\\x6f\\x77\\x7a\\x68\\x76\\x7a\\x8e\\x94\\x70\\x44\\x1d\\x55\\x81\\x5c\\x0a\\x0e\\x4c\\xf7\\x7d\\x82\\x15\\xd8\"\n\"\\x94\\xbf\\xb7\\xbd\\xf2\\x8e\\x1d\\xfb\\x0e\\xcf\\x34\\xf3\\x7f\\x1e\\x66\\x31\\x2d\\x0a\\x97\\x1b\\xb1\\x9a\\x81\\x72\\x6f\\x77\\x7a\\x69\\x75\\x7b\\x8e\\x94\"\n\"\\x6f\\x44\\x1d\\x55\\x81\\x5c\\x0a\\x0e\\xf9\\x53\\x21\\x1d\\xfb\\x6f\\x78\\x06\\xbf\\x8a\\x9c\\x83\\x73\\x1a\\x81\\x87\\x7f\\x81\\x7c\\x1e\\xfb\\x23\\xfb\\x76\"\n\"\\xfb\\x28\\xf7\\x72\\x05\\x80\\x9b\\x85\\x9b\\x97\\x88\\x0a\\x99\\x7d\\xef\\xfb\\x21\\xf7\\x17\\xfb\\x54\\x18\\xfb\\x42\\x62\\x1d\\xf7\\x56\\x07\\xf7\\x28\\xf7\"\n\"\\x76\\xc8\\xe3\\xa5\\xa1\\xbe\\x8f\\x19\\x0e\\x68\\xf7\\x61\\xbb\\x15\\xfb\\x31\\xe2\\x1d\\x9a\\x07\\x52\\x90\\x82\\x95\\x89\\xd1\\x08\\xf7\\x3e\\x07\\xf7\\x01\"\n\"\\xf7\\xae\\xa6\\xd3\\x92\\x95\\xaa\\x92\\x19\\x95\\x8c\\x05\\x9c\\xfb\\x23\\x7a\\x90\\x07\\xa4\\x8c\\x98\\x81\\x78\\x1a\\x7e\\x86\\x78\\x7d\\x66\\x1e\\x3b\\xfb\"\n\"\\x6c\\x37\\xf7\\x70\\x05\\x7b\\xb4\\x88\\x95\\x96\\x1a\\xa0\\x97\\x96\\xa5\\x8a\\x1e\\x93\\x9c\\xfb\\x57\\x7a\\x06\\x99\\x8a\\xad\\x87\\x8c\\x88\\xc0\\xfb\\x1b\"\n\"\\x19\\x0e\\xf8\\x35\\xf7\\x81\\x15\\xcd\\x07\\xf7\\x28\\xf7\\x76\\xc8\\xe3\\xa5\\xa1\\xbe\\x8f\\x19\\x9e\\xfb\\x6f\\x78\\x07\\xbf\\x8a\\x9c\\x83\\x73\\x1a\\x81\"\n\"\\x87\\x80\\x81\\x7b\\x1e\\xfb\\x23\\xfb\\x76\\xfb\\x28\\xf7\\x72\\x05\\x80\\x9b\\x85\\x9b\\x97\\x88\\x0a\\x9a\\x7d\\xee\\xfb\\x21\\xf7\\x17\\xfb\\x54\\x18\\x52\"\n\"\\xfb\\x08\\x63\\xf7\\x08\\x3e\\x62\\x1d\\xe3\\xf7\\x04\\xb3\\x07\\x0e\\x68\\xf7\\xa9\\x86\\x15\\xb9\\x07\\xf7\\x02\\xf7\\xc2\\xa3\\xd0\\x96\\x9a\\xa8\\x90\\x19\"\n\"\\x95\\x8c\\x05\\x9c\\xfb\\x23\\x7a\\x90\\x07\\xa4\\x8c\\x98\\x81\\x78\\x1a\\x7d\\x89\\x84\\x7a\\x5b\\x1e\\x3a\\xfb\\x80\\x37\\xf7\\x84\\x05\\x7a\\xb9\\x8a\\x90\"\n\"\\x96\\x1a\\xa0\\x97\\x96\\xa5\\x8a\\x1e\\x93\\x9c\\xfb\\x57\\x7a\\x06\\x9a\\x8a\\xab\\x88\\x92\\x81\\xbc\\xfb\\x15\\x19\\xe7\\xfb\\x9a\\x05\\x6a\\x2a\\x64\\xec\"\n\"\\x4a\\xe2\\x1d\\x99\\x07\\x51\\x91\\x82\\x95\\x8a\\xd1\\x08\\xcc\\xf2\\xb2\\x07\\x0e\\xf7\\x85\\x8b\\x1d\\xef\\x07\\xf7\\x0a\\x8c\\xb8\\x63\\xa1\\xfb\\x0f\\x08\"\n\"\\x9d\\x06\\x84\\xf7\\x58\\x47\\x89\\x78\\x99\\x4a\\xe5\\x19\\xfb\\x33\\xf7\\x7d\\xf7\\x16\\xf7\\x3f\\xd7\\xec\\x90\\x8f\\xcb\\x8e\\x19\\x9d\\xfb\\x73\\x79\\x07\"\n\"\\xa6\\x8f\\x8b\\x89\\x92\\x1f\\x9a\\x87\\x96\\x7e\\x7d\\x1a\\x81\\x86\\x81\\x7a\\x75\\x1e\\x90\\x0a\\xcb\\x86\\x9e\\x7d\\xcb\\x2e\\x08\\x0e\\x67\\xf7\\x99\\xf7\"\n\"\\x9b\\x15\\xb2\\xc5\\xcf\\xef\\x94\\x93\\xbb\\x90\\x19\\x90\\x9b\\xfb\\x35\\x7b\\x93\\x06\\xa0\\x9a\\x83\\x7f\\x8a\\x1f\\x83\\x86\\x7f\\x83\\x7f\\x1e\\x52\\x39\"\n\"\\x63\\xcb\\x05\\x7e\\x9e\\x81\\xa3\\x95\\x1a\\x95\\x98\\x92\\x9c\\x1e\\x92\\x9b\\xfb\\x5c\\x7b\\x93\\x06\\xb8\\x87\\x8c\\x8a\\xdb\\xfb\\x15\\xb8\\x42\\x18\\x47\"\n\"\\x21\\x54\\x34\\x7f\\x7f\\x65\\x86\\x19\\x78\\x8a\\x05\\x7b\\xf7\\x3a\\x9c\\x80\\x07\\x77\\x80\\x91\\x97\\x93\\x8d\\x90\\x9f\\xab\\x1f\\xce\\xf7\\x01\\xcf\\xfb\"\n\"\\x02\\x05\\x97\\x79\\x91\\x7c\\x82\\x1a\\x7e\\x80\\x84\\x75\\x1e\\x83\\x7a\\xc5\\x06\\xee\\xa6\\x75\\x2a\\xa5\\x1f\\x9d\\xf7\\x28\\x06\\x4b\\x79\\x93\\xb5\\x6f\"\n\"\\x1f\\x0e\\xf7\\x23\\xf9\\x1f\\x21\\x1d\\xfb\\xb2\\x79\\x06\\xd6\\x9a\\x2e\\x0a\\xfb\\x7b\\x07\\x7a\\x40\\x6d\\x87\\x68\\x1b\\x2e\\x68\\xb0\\xee\\x1f\\xf7\\x08\"\n\"\\x4c\\x1d\\xfb\\x08\\x07\\xfb\\x0e\\xc7\\x51\\xf7\\x15\\xb8\\x9a\\x8d\\xa3\\xf7\\x10\\x1e\\xfb\\x4e\\x67\\x1d\\xeb\\x07\\xf7\\x06\\x86\\xb4\\x66\\xa2\\xfb\\x0d\"\n\"\\x08\\x9d\\x06\\x84\\xf7\\x58\\x3d\\x8c\\x7e\\x95\\x8d\\xc6\\x19\\xf8\\x5c\\x39\\x0a\\x0e\\x77\\xf8\\x78\\xf8\\x45\\x15\\x9c\\xfb\\x70\\x7a\\x96\\x07\\x85\\x1d\"\n\"\\x51\\x1d\\x6c\\x7a\\xf4\\x06\\xd4\\x85\\xa4\\x73\\xa2\\x33\\x08\\x9d\\x06\\x8c\\xf7\\x28\\x05\\x62\\x74\\x8f\\x93\\x85\\x1f\\x86\\x8f\\x88\\xa5\\xbc\\x1a\\xf7\"\n\"\\x64\\x07\\xe3\\x93\\x9a\\xbc\\x8c\\x1e\\x0e\\xf7\\x37\\xf7\\xf3\\xf7\\xa2\\x15\\x90\\x8c\\x9b\\x8d\\x9b\\x8e\\x9b\\x8e\\x19\\x94\\x8d\\x9c\\x8e\\xa5\\x90\\x08\"\n\"\\xfb\\x4d\\x5c\\x1d\\xf8\\x5a\\x07\\xd2\\x3d\\x1d\\xd6\\x9a\\x7c\\x44\\x8c\\x1f\\xfb\\x7b\\x07\\x57\\x80\\x73\\x87\\x6e\\x88\\x08\\xf7\\x8d\\x49\\xfb\\x8d\\x07\"\n\"\\x43\\x95\\x70\\xb1\\x8d\\xe0\\x08\\xf7\\x08\\x07\\xd2\\x3d\\x1d\\xd5\\x9b\\x7c\\x44\\x8c\\x1f\\xfb\\x08\\x07\\xfb\\x0d\\xc7\\x51\\xf7\\x13\\x1e\\x9a\\xfb\\x18\"\n\"\\xcd\\x06\\x0e\\x87\\xf7\\xa1\\xf7\\x4b\\x15\\xa3\\x8f\\x94\\x8d\\xa9\\x92\\x08\\x40\\x07\\x89\\x2f\\x87\\x82\\x59\\x88\\x08\\x6c\\x7a\\xf7\\x83\\x45\\x0a\\xf7\"\n\"\\x65\\x07\\xe2\\x38\\x0a\\xfb\\x6f\\x7a\\x96\\x06\\xbd\\x88\\x8f\\x83\\x8d\\x2f\\x08\\xfb\\x01\\x07\\x74\\x85\\x82\\x89\\x6c\\x87\\x08\\xf7\\x2b\\x5a\\xfb\\x2b\"\n\"\\x07\\x5f\\x93\\x77\\xa8\\xc4\\x1a\\xa6\\x07\\xe2\\x93\\x9a\\xbc\\x8c\\x1e\\x94\\x9c\\xfb\\x6f\\x7a\\x9d\\x06\\xbd\\x88\\x90\\x83\\x8c\\x2f\\x08\\x70\\x07\\x31\"\n\"\\x87\\xb2\\x69\\xf4\\x1b\\x8e\\x28\\xbc\\x06\\x0e\\xf7\\x37\\xf7\\x6a\\xf7\\xe2\\x15\\x9c\\xd6\\xa8\\x8f\\xae\\x1b\\xe8\\xaf\\x66\\x28\\x1f\\xfb\\x08\\xae\\x0a\"\n\"\\xf7\\x08\\x07\\xf7\\x0f\\x4e\\xc4\\xfb\\x15\\x5f\\x7d\\x89\\x73\\xfb\\x11\\x1e\\xf7\\x4e\\x9e\\x1d\\x0e\\x84\\xf8\\x7b\\x9a\\x15\\x55\\x94\\x87\\x91\\x89\\xd1\"\n\"\\x08\\xf7\\x59\\x07\\xf2\\x62\\xc0\\x39\\x50\\x61\\x73\\x50\\x5d\\x1e\\xf7\\xc0\\x07\\x86\\x8e\\x67\\x7f\\x71\\x82\\x56\\x7c\\x19\\x70\\x83\\x05\\x7c\\x07\\x8c\"\n\"\\x8f\\x8f\\x8b\\x91\\x1b\\xb4\\x93\\x82\\x61\\x1f\\xfc\\x64\\x07\\x8a\\x44\\x85\\x84\\x69\\x1d\\xd0\\x08\\xf7\\x82\\x07\\xb8\\xb5\\xa9\\x9c\\xb2\\x1b\\xbd\\xa4\"\n\"\\x67\\x47\\x1f\\xfb\\x58\\x07\\x89\\x46\\x82\\x80\\x52\\x86\\x08\\x7c\\xf7\\x68\\x07\\x0e\\xfb\\x42\\x4c\\x0a\\xf7\\x23\\xf8\\x5c\\xf2\\x15\\x8c\\x50\\x7f\\x81\"\n\"\\x3d\\x8a\\x84\\xfb\\x58\\x18\\x9d\\x06\\xa1\\xf7\\x0d\\xb4\\xb0\\xf7\\x06\\x90\\x08\\xeb\\x9d\\x06\\x41\\x7b\\x9a\\xd1\\x1f\\xf8\\x5c\\x07\\xd1\\x3d\\x1d\\x2f\"\n\"\\x1d\\xfb\\x7b\\x07\\x93\\x1d\\x0e\\x77\\xf7\\x92\\xa9\\x15\\x8c\\xfb\\x28\\x05\\x9d\\x06\\xa2\\xe3\\xa4\\xa3\\xd4\\x91\\x08\\xf4\\x9c\\x6c\\x06\\x58\\x8e\\x87\"\n\"\\x93\\x89\\xe8\\x08\\xf7\\x64\\x07\\xe3\\x38\\x0a\\xfb\\x70\\x7a\\x96\\x06\\x85\\x1d\\x64\\x88\\x6b\\x88\\x86\\x1e\\x88\\x82\\x79\\x86\\x65\\x8a\\x08\\x0e\\xad\"\n\"\\xf7\\xc0\\x15\\x8f\\x50\\x92\\x6f\\x9f\\x61\\x08\\xfb\\x09\\xc3\\xf7\\x01\\x47\\xf7\\x17\\x1b\\xf7\\x55\\xf7\\x1a\\xf7\\x22\\xf7\\x5e\\xf7\\x5e\\xfb\\x1c\\xf7\"\n\"\\x24\\xfb\\x53\\x3a\\x3c\\x6e\\x56\\x4f\\x1f\\x5f\\x65\\x77\\x69\\x70\\x3b\\xd5\\x80\\x18\\xa3\\xd5\\xa2\\xb6\\xa7\\xa7\\x08\\xb4\\xb6\\xc4\\xa2\\xc4\\x1b\\xbe\"\n\"\\xb9\\x7a\\x6a\\xaf\\x1f\\xbf\\x5d\\xac\\x25\\xfb\\x03\\x1a\\x79\\x8b\\x8b\\x8a\\x7e\\x1e\\x87\\x60\\x15\\xfb\\x29\\x79\\x3f\\x35\\xfb\\x05\\x1b\\xfb\\x06\\x40\"\n\"\\xdf\\xf7\\x2b\\x75\\x1f\\x0e\\x22\\x0a\\xa5\\xf8\\xf9\\x37\\x1d\\x4c\\x6f\\x1d\\xba\\xf8\\x20\\x37\\x1d\\xda\\x1d\\x2e\\xab\\x2f\\xc1\\x51\\xe5\\x1d\\xf7\\x20\"\n\"\\xf7\\x5e\\xee\\x6e\\xe0\\x54\\xc6\\x1f\\xd0\\x4c\\x37\\xaf\\x2b\\x1b\\xf7\\x68\\xfc\\x05\\x15\\x87\\x3b\\x79\\x45\\x71\\x62\\x08\\x4e\\x65\\x51\\x6a\\x48\\x1b\"\n\"\\x44\\x48\\xb3\\xc7\\x6c\\x1f\\x72\\xbe\\x7c\\xc8\\x87\\xd4\\x08\\x8a\\xb7\\x15\\x8e\\xd4\\x9a\\xc9\\xa7\\xc1\\x08\\xc7\\xaa\\xce\\xb3\\xd0\\x1b\\xd0\\xce\\x63\"\n\"\\x4f\\xaa\\x1f\\xa7\\x55\\x9a\\x4d\\x8e\\x42\\x08\\x0e\\x84\\xf7\\x8e\\xf8\\x59\\x15\\xfb\\x17\\x31\\x2d\\xfb\\x1d\\xfb\\x19\\xe8\\x28\\xf7\\x12\\xf7\\x12\\xeb\"\n\"\\xf3\\xf7\\x1c\\xf7\\x16\\x2f\\xe8\\xfb\\x14\\x1f\\xf7\\x16\\xfb\\x85\\x15\\x79\\x07\\xfb\\x01\\x5e\\x48\\x42\\x42\\x5b\\xce\\xf7\\x13\\x79\\x1e\\x88\\xaf\\x15\"\n\"\\x8a\\x96\\x8b\\x91\\x92\\x1a\\xe7\\xba\\xc8\\xd2\\xd3\\xc1\\x47\\xfb\\x01\\x98\\x1e\\x0e\\xf3\\x21\\x0a\\xfb\\x24\\xf9\\xfa\\x15\\x3f\\x6f\\x72\\x5a\\x1d\\xb3\"\n\"\\x78\\xba\\x1b\\xdf\\xb9\\x49\\x0a\\x4c\\xf8\\x31\\xf7\\x38\\x15\\x3f\\x5b\\x60\\x6e\\x4b\\x1b\\x52\\x60\\xa8\\xc4\\x6e\\x1f\\x79\\xb1\\x84\\xab\\x89\\xc9\\x08\"\n\"\\xf7\\xc8\\x06\\x83\\xcc\\x81\\xa8\\x72\\xab\\x08\\xaf\\x6d\\x5d\\xa0\\x57\\x1b\\x59\\x5c\\x79\\x69\\x65\\x1f\\x5c\\x62\\x70\\x44\\x39\\x1a\\xfb\\x1e\\xd3\\x35\"\n\"\\xf7\\x07\\xea\\xd6\\xc6\\xf7\\x00\\xb5\\x1e\\x91\\x0a\\xb3\\xf7\\xf7\\x15\\x3f\\x6e\\x73\\x76\\x51\\x1b\\x4b\\x69\\xa9\\xce\\x7d\\x1f\\x6e\\x06\\x8c\\x58\\x92\"\n\"\\x73\\x9e\\x6f\\x08\\x68\\xa4\\xb2\\x78\\xbb\\x1b\\xde\\xba\\x49\\x0a\\x84\\x8d\\xf9\\xbe\\x15\\x5a\\xf8\\x85\\xbc\\x07\\x0e\\xf8\\x81\\xad\\x89\\x15\\x92\\x06\"\n\"\\xd5\\x06\\xf7\\x44\\xcd\\x97\\xb7\\xcc\\x1f\\xf1\\xd0\\xd5\\xf7\\x36\\xf7\\x2f\\x1a\\xea\\x6d\\xde\\x5b\\xb1\\x1e\\xa7\\x67\\x5a\\x98\\x4a\\x1b\\xfb\\x2b\\x20\"\n\"\\x56\\x2e\\x69\\x1f\\x7d\\x66\\x87\\x73\\x8a\\x49\\xd9\\xb1\\x18\\x94\\x07\\x8a\\xea\\xb0\\xb7\\xe6\\x99\\x3d\\xfc\\x3e\\x18\\x7a\\x40\\x72\\x5c\\x6d\\x81\\x74\"\n\"\\x8c\\x18\\xe5\\x16\\x8f\\x8e\\xc2\\xb9\\x9e\\xb6\\xa1\\xf7\\x13\\x19\\xc7\\xf7\\xec\\x05\\x92\\x06\\x8e\\x06\\xb4\\x96\\x8a\\x87\\x98\\x1f\\xc4\\x76\\xa9\\x49\"\n\"\\x26\\x1a\\xfb\\x66\\x2c\\xfb\\x29\\xfb\\x1e\\x84\\x1e\\xf7\\x8d\\xfb\\x99\\x15\\xda\\x06\\xb1\\xf7\\x62\\x05\\x7b\\xb2\\x8e\\x8a\\xa1\\x1b\\xf7\\x14\\xf7\\x01\"\n\"\\xf7\\x39\\xf7\\x53\\xf7\\x00\\x5e\\xc3\\x36\\x57\\x5e\\x75\\x62\\x6a\\x1f\\x66\\x5d\\x76\\x50\\x73\\xfb\\x18\\x08\\xea\\xe6\\x15\\xe6\\x9b\\xb0\\xc0\\xb9\\x1b\"\n\"\\xb4\\xa1\\x61\\x3c\\xfb\\x2a\\x52\\xfb\\x0b\\x43\\x6e\\x75\\x96\\xa5\\x77\\x1f\\x0e\\xf3\\xf7\\x92\\x16\\x7c\\xf7\\x2f\\x05\\x49\\xb9\\x62\\xe2\\xea\\x1a\\xbf\"\n\"\\x98\\xc7\\xa2\\xbc\\x1e\\xc9\\xa9\\xbc\\xaf\\xc4\\x1b\\xc2\\xbc\\x67\\x4d\\xa9\\x1f\\xa2\\x5a\\x98\\x50\\x56\\x1a\\x2c\\x62\\x33\\x49\\x5e\\x1e\\x7c\\xfb\\x2f\"\n\"\\x05\\xf7\\x88\\xf7\\x2d\\x77\\x06\\x5e\\x84\\x7b\\x79\\x68\\x1b\\xfb\\x0d\\x06\\x8d\\xb1\\x05\\xf7\\x00\\xb9\\xc8\\xe7\\xf7\\x09\\x1a\\xcf\\x73\\xd3\\x60\\xc4\"\n\"\\x1e\\xd1\\x58\\x47\\xaf\\x3c\\x1b\\x46\\x4e\\x6f\\x55\\x5a\\x1f\\x56\\x50\\x6a\\x38\\x3c\\x1a\\xfb\\x09\\xc9\\x2e\\xf6\\x5e\\x1e\\x8d\\x65\\x05\\xfb\\x0d\\x06\"\n\"\\x68\\x8c\\x7b\\x9c\\x84\\xb8\\x08\\x77\\xfb\\x2d\\x06\\x0e\\xfb\\xe8\\xb4\\x0a\\xfb\\x95\\xf7\\x11\\xf7\\xca\\x2b\\x0a\\xf8\\x81\\xf8\\xa9\\xf8\\x95\\x15\\x49\"\n\"\\x06\\xfb\\x74\\xfc\\x95\\x05\\xdb\\x06\\xf7\\x45\\xf8\\x2d\\xf7\\x45\\xfc\\x2d\\x05\\xdb\\x06\\x0e\\xf8\\x81\\xf8\\xa9\\x16\\xf7\\x74\\xf8\\x95\\x05\\x3b\\x06\"\n\"\\xfb\\x45\\xfc\\x2d\\xfb\\x45\\xf8\\x2d\\x05\\x3b\\x06\\xf7\\x74\\xfc\\x95\\x05\\x0e\\xf8\\x81\\xf8\\x8c\\xf9\\x60\\x15\\xfb\\x60\\xfb\\x34\\xfb\\x32\\xfb\\x5f\"\n\"\\xfb\\x5b\\xf7\\x34\\xfb\\x33\\xf7\\x5d\\xf7\\x5b\\xf7\\x34\\xf7\\x34\\xf7\\x5c\\xf7\\x59\\xfb\\x34\\xf7\\x36\\xfb\\x58\\x1f\\xa4\\x52\\x15\\xf7\\x23\\x7e\\xf7\"\n\"\\x06\\xfb\\x06\\x99\\xfb\\x25\\x08\\xfb\\xa3\\x06\\xf7\\xa4\\x52\\x15\\x82\\xfb\\x22\\xfb\\x0d\\xfb\\x0f\\xfb\\x22\\x80\\x08\\xf7\\xa8\\x07\\x53\\xfb\\xa8\\x15\"\n\"\\xfb\\x27\\x99\\xfb\\x05\\xf7\\x05\\x7d\\xf7\\x29\\x08\\xf7\\xa6\\x06\\xfb\\xa6\\xc4\\x15\\x99\\xf7\\x24\\xf7\\x07\\xf7\\x06\\xf7\\x25\\x99\\x08\\xfb\\xa4\\x07\"\n\"\\x0e\\xf7\\x11\\xf7\\x10\\x15\\xf8\\x67\\xf8\\x67\\xfc\\x67\\x06\\xb3\\xfc\\x3f\\x15\\xf8\\x17\\xf8\\x17\\xfc\\x17\\x07\\x0e\\xf8\\x81\\xf9\\x64\\xf8\\xc3\\x15\"\n\"\\x4f\\xfb\\x8d\\x06\\x26\\x86\\x62\\x7c\\x6e\\x1e\\x5b\\x72\\x53\\x6b\\x50\\x1b\\x57\\x58\\xa4\\xb3\\x6f\\x1f\\x74\\xac\\x85\\xb4\\xf7\\x04\\x1a\\xf7\\x8d\\x4f\"\n\"\\xfb\\x8a\\x07\\xfb\\x1d\\x90\\x69\\xa3\\x63\\x1e\\x4a\\xb1\\xd1\\x66\\xde\\x1b\\xd7\\xcb\\xaa\\xc3\\xb4\\x1f\\xac\\xb8\\x91\\xab\\xf7\\x29\\x1a\\x0e\\xe1\\xf8\"\n\"\\x27\\xf8\\x1c\\x15\\xfb\\x69\\x06\\x41\\xf7\\x4d\\x05\\x2d\\x06\\xf7\\x7d\\xfc\\xd5\\x05\\xde\\x06\\xf7\\x7d\\xf8\\xd5\\x05\\x2d\\x06\\x22\\xfb\\x9d\\x15\\x3f\"\n\"\\xfb\\x48\\x40\\xf7\\x48\\x05\\x0e\\x84\\xf8\\x73\\xbd\\x15\\x86\\x06\\x5a\\x8d\\x84\\x93\\x8a\\xba\\x08\\xf7\\xeb\\xfb\\x32\\x7a\\x07\\xc9\\x88\\x97\\x81\\x59\"\n\"\\x1a\\xfb\\x7f\\x07\\x6f\\x86\\x7d\\x7d\\x80\\x1e\\x75\\x70\\x6c\\x7f\\x6d\\x1b\\x64\\x6b\\xad\\xb5\\x1f\\xf7\\xda\\xfb\\x26\\x7d\\x07\\xba\\x89\\x99\\x7d\\x8c\"\n\"\\x5b\\x08\\xfb\\x90\\x07\\x3c\\xbb\\x58\\xd4\\xb0\\xb2\\x9b\\xa6\\xa6\\x1e\\xb6\\xb6\\x05\\x22\\x07\\x7a\\x74\\x85\\x7b\\x76\\x1a\\x60\\xaa\\x6a\\xb5\\xb4\\xad\"\n\"\\xa1\\xc1\\xb0\\x1e\\x77\\x9b\\x05\\x70\\x6c\\x78\\x82\\x76\\x1b\\x75\\x7b\\x9b\\xa2\\xa3\\x9d\\xa9\\xa5\\xa1\\x1f\\x9f\\x9b\\x99\\x92\\xa9\\x92\\x08\\x0e\\x7f\"\n\"\\x3f\\x1d\\x0e\\x7f\\x3f\\x1d\\xf7\\x25\\xf7\\x76\\x35\\x0a\\xf7\\x2c\\x16\\x4d\\x1d\\xa8\\xa7\\xa2\\xa2\\xa8\\xa6\\x74\\xa3\\x6f\\x1f\\x0e\\x7f\\x3f\\x1d\\xf7\"\n\"\\x64\\xf7\\x4b\\x15\\xa4\\x06\\x97\\xb1\\x05\\x93\\xa5\\x8e\\x99\\x99\\x1a\\xab\\x7f\\x9b\\x73\\x76\\x7d\\x79\\x71\\x7e\\x8f\\x77\\x93\\x72\\x1e\\x58\\x5a\\x15\"\n\"\\x72\\x77\\x78\\x72\\x73\\x9e\\x77\\xa4\\xa3\\x9f\\x9f\\xa3\\xa3\\x77\\x9f\\x74\\x1f\\xf7\\x2c\\x16\\x72\\x77\\x78\\x72\\x73\\x9f\\x77\\xa3\\xa3\\x9f\\x9f\\xa3\"\n\"\\xa3\\x77\\x9f\\x74\\x1f\\x0e\\x7f\\x3f\\x1d\\xf7\\x63\\xe8\\x5f\\x0a\\xc0\\x8c\\x8f\\x9e\\xed\\x1d\\x8c\\x84\\x98\\x59\\x1e\\x0e\\x84\\x25\\x1d\\xfb\\x79\\xf9\"\n\"\\x37\\x42\\x1d\\x84\\x25\\x1d\\x28\\xf8\\xee\\x4b\\x0a\\x31\\x1d\\xfc\\x07\\xc4\\x3a\\x1d\\x31\\x1d\\xfb\\x49\\xc4\\x20\\x1d\\x31\\x1d\\xfc\\x49\\xf7\\x41\\x15\"\n\"\\x71\\x75\\x74\\x70\\x6f\\x9f\\x75\\xa7\\xaa\\x1d\\x31\\x1d\\xfb\\x9a\\xc4\\x29\\x0a\\x4e\\xf7\\x2c\\xf9\\x60\\x15\\x56\\x5e\\x05\\x86\\x86\\x87\\x85\\x87\\x1a\"\n\"\\x7e\\xb3\\x75\\xc6\\x79\\x1e\\x50\\x64\\x72\\x68\\x5c\\x1a\\x5b\\xa3\\x6c\\xbe\\x77\\x1e\\x34\\x4a\\x64\\x4a\\x3c\\x1a\\x57\\x9f\\x5c\\xae\\x6a\\x1e\\x6c\\xad\"\n\"\\xb2\\x7d\\xc2\\x1b\\xa0\\x9b\\x8c\\x8f\\xb3\\x1f\\x8c\\x96\\x96\\x8c\\x92\\x1b\\xa3\\x99\\x7d\\x75\\x6c\\x71\\x72\\x6b\\x84\\x86\\x8c\\x8f\\x7f\\x1f\\x90\\x7c\"\n\"\\x82\\x8d\\x82\\x1b\\x75\\x7b\\x7b\\x76\\x71\\xa2\\x7a\\xab\\xd3\\xcc\\xd4\\xda\\xbf\\x6f\\xa9\\x59\\x84\\x7c\\x8a\\x89\\x7b\\x1f\\x89\\x71\\x71\\x89\\x7c\\x1b\"\n\"\\x4a\\x64\\xb9\\xd9\\xce\\xa5\\xc6\\xc1\\xc0\\x1f\\x87\\xa1\\x96\\x8a\\x9c\\x1b\\xd0\\xc7\\xa9\\xad\\x9d\\x76\\x98\\x6e\\x69\\x5f\\x78\\x65\\x55\\x1f\\x6f\\xa5\"\n\"\\x81\\xa2\\xae\\x1a\\xb3\\x99\\xa8\\xaf\\xac\\x1e\\x82\\xb2\\x9f\\x88\\xa8\\x1b\\xcd\\xbe\\xa3\\xaa\\x9e\\x72\\x99\\x69\\x63\\x5e\\x7d\\x6d\\x53\\x1f\\x4c\\xa2\"\n\"\\x7d\\x94\\x9d\\x1a\\x95\\x8f\\x96\\x93\\x97\\x1e\\x0e\\x84\\x33\\x1d\\x47\\xd3\\x15\\xfb\\x11\\xf7\\x3b\\x05\\x4d\\x06\\xfb\\x10\\xfb\\x3b\\x05\\xad\\x06\\xf7\"\n\"\\x0d\\xf2\\xf7\\x0e\\x24\\x05\\x0e\\x84\\x33\\x1d\\xfb\\x30\\xd3\\x15\\xfb\\x27\\xf7\\x28\\x05\\x9d\\x79\\x82\\x90\\x7b\\x1b\\x77\\x7e\\x7f\\x78\\x7b\\x95\\x7c\"\n\"\\x9e\\x7f\\x1f\\xf7\\x2e\\x2a\\x05\\x0e\\x4c\\x34\\x0a\\xfb\\x6b\\xf8\\x8f\\x2a\\x0a\\x4c\\x34\\x0a\\xfb\\x4a\\xf9\\x03\\x43\\x1d\\x0e\\x2e\\xf7\\x0e\\xf9\\x3e\"\n\"\\x15\\x57\\x5a\\x05\\x89\\x88\\x89\\x87\\x88\\x1a\\x72\\xc5\\x64\\xd1\\x75\\x1e\\x20\\xfb\\x02\\x56\\xfb\\x07\\xfb\\x11\\x1a\\x4a\\x9c\\x5f\\xb1\\x67\\x1e\\x6c\"\n\"\\xad\\xb2\\x7d\\xc2\\x1b\\xa0\\x9b\\x8c\\x8f\\xb3\\x1f\\x8c\\x96\\x96\\x8c\\x92\\x1b\\xa3\\x99\\x7d\\x75\\x6c\\x71\\x72\\x6b\\x84\\x86\\x8c\\x8f\\x7f\\x1f\\x90\"\n\"\\x7c\\x82\\x8d\\x82\\x1b\\x75\\x7b\\x7b\\x76\\x71\\xa2\\x7a\\xab\\xd3\\xcc\\xd4\\xda\\xbf\\x6f\\xa9\\x59\\x84\\x7c\\x8a\\x89\\x7b\\x1f\\x89\\x70\\x72\\x89\\x7c\"\n\"\\x1b\\x48\\x66\\xb9\\xdc\\xf7\\x07\\xaf\\xf4\\xd8\\xf7\\x04\\x1f\\x8a\\x98\\x94\\x8b\\x96\\x1b\\xd5\\xd7\\xb4\\xb4\\x9b\\x78\\x99\\x75\\x60\\x5c\\x72\\x55\\x4e\"\n\"\\x1f\\x4d\\xa2\\x69\\xa7\\xa6\\x1a\\x95\\x90\\x95\\x97\\x99\\x1e\\x0e\\x7d\\x99\\xf8\\x56\\x95\\xf7\\x5e\\x99\\x06\\xb1\\x0a\\xde\\x0b\\xa4\\x8f\\x8f\\x90\\x8e\"\n\"\\x8e\\x8f\\x91\\x8f\\x8f\\x8f\\xb2\\x0c\\x0c\\xb2\\x8f\\x9f\\x90\\x8f\\x8f\\x8e\\x8f\\x8f\\x8f\\x95\\x8f\\x0c\\x0d\\xf9\\x66\\x14\\xf8\\x8f\\x15\\xbc\\x13\\x00\"\n\"\\xad\\x02\\x00\\x01\\x00\\x0b\\x00\\x16\\x00\\x2a\\x00\\x7f\\x00\\xbc\\x00\\xc2\\x00\\xc6\\x00\\xcb\\x00\\xd0\\x00\\xd8\\x00\\xdb\\x00\\xdf\\x00\\xea\\x00\\xef\"\n\"\\x00\\xf4\\x01\\x27\\x01\\x9f\\x01\\xc4\\x01\\xf9\\x02\\x32\\x02\\x66\\x02\\x6a\\x02\\x74\\x02\\x7c\\x02\\x84\\x02\\x8b\\x02\\xb5\\x03\\x1a\\x03\\x52\\x03\\x71\"\n\"\\x03\\x7e\\x03\\x8c\\x03\\x9e\\x03\\xab\\x03\\xb5\\x03\\xc5\\x03\\xd0\\x03\\xda\\x03\\xe3\\x03\\xe9\\x03\\xf1\\x03\\xf6\\x03\\xfe\\x04\\x1b\\x04\\x31\\x04\\x3a\"\n\"\\x04\\x5a\\x04\\x6f\\x04\\x7b\\x04\\x89\\x04\\x97\\x04\\x9b\\x04\\xa7\\x04\\xac\\x04\\xb8\\x04\\xc1\\x04\\xc9\\x04\\xcf\\x04\\xd8\\x04\\xdd\\x04\\xe3\\x04\\xe8\"\n\"\\x04\\xf0\\x04\\xf8\\x05\\x00\\x05\\x06\\x05\\x87\\x06\\x03\\x06\\x79\\x06\\x82\\x06\\xed\\x06\\xff\\x07\\x68\\x07\\x81\\x07\\xc3\\x08\\x20\\x08\\x31\\x08\\x38\"\n\"\\x08\\x51\\x08\\xa5\\x08\\xe7\\x09\\x0c\\x09\\x50\\x09\\x8a\\x09\\x96\\x09\\xd5\\x09\\xe8\\x09\\xee\\x0a\\x26\\x0a\\x4e\\x0a\\x84\\x0a\\x8b\\x0a\\x9d\\x0a\\xc7\"\n\"\\x0a\\xf0\\x0a\\xfa\\x0b\\x29\\x0b\\x56\\x0b\\x81\\x0b\\xab\\x0b\\xaf\\x0b\\xb6\\x0b\\xca\\x0b\\xdd\\x0b\\xf2\\x0c\\x12\\x0c\\x20\\x0c\\x2a\\x0c\\x39\\x0c\\x40\"\n\"\\x0c\\x52\\x0c\\x58\\x0c\\x79\\x0c\\x8b\\x0c\\x94\\x0c\\xa4\\x0c\\xad\\x0c\\xb2\\x0c\\xbb\\x0c\\xd8\\x0c\\xe0\\x0c\\xe8\\x0c\\xed\\x0d\\x08\\x0d\\x22\\x0d\\x3c\"\n\"\\x0d\\x49\\x0d\\x50\\x0d\\x5e\\x0d\\x6c\\x0d\\x7e\\x0d\\x93\\x0d\\x97\\x0d\\xac\\x0d\\xc1\\x0d\\xca\\x0d\\xce\\x0d\\xd7\\x0d\\xea\\x0d\\xef\\x0d\\xfa\\x0e\\x05\"\n\"\\x0e\\x17\\x0e\\x1b\\x0e\\x28\\x0e\\x3a\\x0e\\x40\\x0e\\x51\\x0e\\x58\\x0e\\x68\\x0e\\x72\\x0e\\x79\\x0e\\x88\\x0e\\x91\\x0e\\x9a\\x0e\\xa3\\x0e\\xb1\\x0e\\xbf\"\n\"\\x0e\\xcd\\x0e\\xdb\\x0e\\xe8\\x0e\\xf5\\x0f\\x02\\x0f\\x0e\\x0f\\x1a\\x0f\\x26\\x0f\\x32\\x0f\\x3c\\x0f\\x46\\x0f\\x50\\x0f\\x5b\\x0f\\x66\\x0f\\x6f\\xdf\\x1d\"\n\"\\xf7\\x10\\xfb\\x3b\\x05\\xc9\\x06\\x0e\\xf8\\xe9\\xf7\\x3d\\x15\\x7a\\x1d\\xf8\\xb0\\x07\\x0b\\x84\\x1d\\xf7\\x93\\x07\\xfc\\x7e\\xf7\\x95\\x15\\xf7\\x07\\xf7\"\n\"\\xa7\\xf7\\x08\\xfb\\xa7\\x05\\x0b\\xda\\x1d\\x2d\\xab\\x2f\\xc1\\x52\\xe5\\x1d\\xf7\\x1f\\xf7\\x5e\\xee\\x6e\\xe1\\x54\\xc6\\x1f\\xd0\\x4c\\x37\\xaf\\x2b\\x1b\"\n\"\\x67\\x04\\xb9\\xb9\\x79\\x6b\\xaf\\x1f\\xc1\\x5a\\xaa\\x2d\\xfb\\x0b\\x1a\\x50\\x7f\\x46\\x76\\x57\\x1e\\x82\\x72\\x7a\\x72\\x74\\x74\\x08\\x68\\x68\\x5e\\x79\"\n\"\\x56\\x1b\\x5d\\x5e\\x9d\\xaa\\x67\\x1f\\x58\\xb9\\x6a\\xf0\\xf7\\x03\\x1a\\xf1\\xa7\\xec\\xb5\\xba\\x1e\\xb6\\xb2\\xbc\\xa1\\xc2\\x1b\\x0b\\xf7\\x8e\\xf8\\x60\"\n\"\\x15\\xfb\\x17\\x31\\x2b\\xfb\\x1e\\xfb\\x1c\\xe8\\x27\\xf7\\x12\\xf7\\x12\\xeb\\xf4\\xf7\\x1f\\xf7\\x18\\x2f\\xe9\\xfb\\x14\\x1f\\x7e\\x6f\\x15\\xdf\\xc6\\x2b\"\n\"\\xfb\\x1d\\xfb\\x06\\x5e\\x48\\x40\\x64\\x66\\xa3\\xb3\\x76\\x1f\\x6f\\xbf\\x7b\\xd1\\xd2\\x1a\\xea\\xb9\\xc9\\xd3\\x1e\\x0b\\x15\\xce\\xac\\xb8\\x85\\x0a\\xf8\"\n\"\\x56\\x15\\x0b\\x9b\\x16\\x6c\\x0a\\x0b\\x86\\x82\\xb7\\x0a\\x0b\\xb0\\x0a\\x95\\x7c\\x9e\\x7f\\x61\\x0a\\x9a\\x0a\\x0e\\x15\\x2c\\x1d\\x0e\\x15\\x5d\\x06\\xfc\"\n\"\\x59\\xfd\\x46\\x05\\xbc\\x06\\x0b\\xd7\\x1d\\x93\\x8c\\x0b\\x7c\\x45\\x8c\\x1f\\x0b\\xf8\\x53\\xf9\\x38\\x15\\x6f\\x0a\\x7c\\xb1\\xb4\\x83\\xb2\\x1b\\xf7\\x08\"\n\"\\xe3\\xda\\xf3\\xdd\\x54\\xcb\\xfb\\x18\\xd3\\x1f\\x22\\xc4\\x61\\xb7\\xc2\\x1a\\xc2\\xb5\\xb0\\xc9\\xb8\\xb5\\x78\\x67\\xae\\x1e\\xaa\\x6b\\x99\\x71\\x9b\\x50\"\n\"\\x08\\xa4\\x06\\x0b\\xf9\\x59\\xf7\\xf6\\x15\\xfb\\x93\\x79\\x06\\xd9\\x86\\x93\\x83\\x8d\\x3f\\x08\\xfb\\x36\\x07\\x6b\\x4f\\x70\\x42\\xfb\\x37\\x27\\xf7\\x06\"\n\"\\xf7\\x4e\\xe9\\xa7\\xe6\\xb7\\xbc\\x1e\\xbc\\xb6\\xca\\xa6\\xcf\\x1b\\xc3\\xbd\\x78\\x67\\xb1\\x1f\\xa9\\x6e\\x9b\\x71\\xa4\\x4e\\x08\\xa2\\x06\\x83\\xf7\\x67\"\n\"\\x05\\x75\\x06\\x77\\x85\\x79\\x7e\\x76\\x1b\\x81\\x7b\\x8e\\x92\\x79\\x1f\\x9a\\x5e\\x5c\\x93\\x5e\\x1b\\xfb\\x5b\\xfb\\x23\\xfb\\x27\\xfb\\x60\\x29\\xa6\\x40\"\n\"\\xc3\\x50\\x1f\\x46\\xcd\\xec\\x65\\xf7\\x02\\x1b\\xe2\\xf7\\x10\\xae\\xae\\xb3\\x1f\\xf7\\x5f\\x07\\x8d\\xc8\\x96\\x97\\xc4\\x8f\\x08\\x0b\\xf9\\x00\\xf8\\x57\"\n\"\\x15\\x9c\\x0a\\x38\\x6c\\x54\\x4d\\x1f\\x45\\x4d\\x65\\x2f\\xfb\\x02\\x1a\\xfb\\x60\\xf7\\x19\\xfb\\x1c\\xf7\\x5b\\xf7\\x05\\xef\\xb9\\xdc\\xc7\\x1e\\x82\\x0a\"\n\"\\x0b\\x9d\\x16\\xf7\\x68\\x9a\\x06\\x59\\x8e\\x7b\\x98\\xaf\\x1a\\xf7\\xad\\x07\\xb8\\xbb\\xa1\\x97\\xac\\x1b\\xbc\\xa3\\x6c\\x49\\x1f\\xfb\\x65\\x07\\x89\\x4a\"\n\"\\x7f\\x7b\\x5a\\x88\\x08\\x7c\\xf7\\x64\\x9a\\x07\\x5a\\x90\\x80\\x97\\x8a\\xbc\\x08\\xf7\\x79\\x94\\x1d\\x0b\\xf9\\x57\\x21\\x1d\\xfb\\x7f\\x78\\x06\\xdb\\x86\"\n\"\\x98\\x7a\\x8e\\x21\\x08\\xfb\\xe5\\x07\\xfc\\x15\\xf8\\x78\\x05\\xfb\\x3f\\x78\\x06\\xb6\\x99\\x83\\x5c\\xb3\\x1f\\xfc\\x4d\\x59\\x1d\\xf8\\x1c\\x07\\xf8\\x4e\"\n\"\\xfc\\xba\\x05\\x9c\\xf8\\xa2\\x06\\x8e\\xf3\\x98\\x9c\\xda\\x92\\x08\\x0b\\xf8\\x36\\xf7\\x1b\\x15\\x79\\x8f\\x79\\x2d\\x7d\\x7f\\x2b\\x88\\x19\\xfb\\x1e\\x06\"\n\"\\xf7\\xa1\\xf8\\x29\\x05\\x9a\\xfb\\xef\\x07\\x88\\xfb\\x0a\\x05\\x9d\\x06\\x93\\xd2\\x99\\x9a\\xc9\\x8d\\x08\\xf7\\x1e\\x06\\xfb\\x9e\\xfc\\x29\\x05\\x7c\\xf8\"\n\"\\x0d\\x07\\x0b\\x15\\x41\\x0a\\x0b\\xa2\\x8a\\x05\\xbf\\xe3\\x1d\\x57\\x4f\\x1d\\x0b\\x15\\xa8\\x06\\x95\\xb7\\x05\\x9a\\x0b\\x93\\x9a\\xbc\\x8c\\x1e\\x9b\\x9c\"\n\"\\x0b\\x07\\xd1\\x9b\\x9a\\xd5\\x1e\\x0b\\xf8\\x6a\\xf8\\x18\\x71\\x1d\\xfb\\x84\\xfc\\x1a\\x9b\\x0a\\x90\\xf7\\xe8\\x15\\xc6\\xa7\\xae\\xb9\\xaa\\xa5\\x7a\\x6d\"\n\"\\x9b\\x1e\\x9e\\x68\\x96\\x5e\\x63\\x1a\\x53\\x6f\\x68\\x5d\\x4d\\x62\\xcc\\xeb\\x1e\\x0b\\xf9\\x27\\x9e\\x15\\x65\\x8e\\x77\\x95\\x6e\\xad\\xfb\\x62\\xf7\\x91\"\n\"\\x18\\xf7\\x13\\xa4\\xc1\\xbd\\xe7\\x1a\\xb6\\x7e\\xb0\\x71\\xa8\\x1e\\xb4\\x65\\x37\\xa5\\x2e\\x1b\\xfb\\xa8\\x78\\x06\\xd5\\x83\\x95\\x48\\x1d\\x82\\x81\\x40\"\n\"\\x85\\x08\\x78\\xf7\\xa9\\x9e\\x07\\x3e\\x90\\x7f\\x97\\x8a\\xd4\\x08\\xf7\\x59\\x07\\xc3\\x8d\\xf7\\x82\\xfb\\xc8\\x05\\xf7\\x35\\x06\\xfc\\x5b\\xf8\\xe1\\x15\"\n\"\\xa7\\x96\\x93\\xb3\\xf7\\x11\\xc5\\x60\\x2d\\x59\\x76\\x61\\x67\\x78\\x1e\\x5d\\x71\\x68\\x85\\x2b\\x89\\x08\\x0b\\xf8\\xd2\\xf7\\x44\\x15\\x6d\\x20\\x69\\x70\"\n\"\\xfb\\x00\\x87\\x08\\xfb\\x95\\x06\\xf8\\x44\\xf8\\xf5\\x05\\x9a\\xfc\\xa2\\x07\\x77\\xfb\\x3f\\x05\\xa5\\x06\\x9c\\xf0\\xaf\\xa8\\xf7\\x07\\x8e\\x08\\xf7\\x71\"\n\"\\x06\\xfc\\x49\\xfc\\xf5\\x05\\x7c\\xf8\\xc8\\x07\\xa3\\xf7\\x44\\x05\\x0b\\xa0\\x16\\xf7\\x80\\x9a\\x06\\x4c\\x8e\\x80\\x95\\x8a\\xc3\\x08\\xf8\\xe9\\x07\\x87\"\n\"\\x8d\\x58\\x7b\\x66\\x80\\x44\\x7a\\x43\\x0a\\xfc\\x71\\x68\\x1d\\x0b\\x2b\\x1d\\xf7\\x5b\\x16\\x71\\x75\\x74\\x70\\x6f\\x49\\x1d\\x0e\\x06\\x81\\xfb\\x34\\x9e\"\n\"\\x89\\x8f\\xdf\\xac\\xaa\\xe0\\x8a\\x19\\x0b\\x92\\x91\\x8c\\x8c\\x91\\x1e\\x8d\\x90\\x8b\\x8b\\x8d\\x1b\\x93\\x91\\x85\\x83\\x6a\\x0b\\x4d\\x1d\\xa7\\xa8\\xa2\"\n\"\\xa2\\xa8\\xa7\\x74\\xa2\\x6f\\x1f\\x0b\\x59\\x0a\\xf7\\xb3\\x9d\\x07\\x74\\x8c\\x05\\x0b\\x19\\x7b\\x91\\x07\\x8c\\x96\\x97\\x8c\\x93\\x1b\\xab\\x95\\x7d\\x5c\"\n\"\\x1f\\x0b\\x82\\x86\\x79\\x79\\x1e\\xfb\\x27\\xfb\\x28\\x05\\x0b\\x9c\\x7b\\x06\\x5a\\x8c\\x83\\x9a\\xe3\\x1a\\x0b\\x07\\x8a\\x36\\x82\\x80\\x3d\\x86\\x08\\x0b\"\n\"\\x26\\x0a\\xf7\\x08\\x07\\x0b\\x87\\x84\\x9a\\x1f\\xa2\\x80\\x05\\x0b\\xbe\\xf5\\x97\\x1f\\x0e\\x7d\\x1d\\x73\\xac\\x4f\\x56\\x1d\\x0b\\x15\\x65\\x7a\\x7e\\x7f\"\n\"\\x74\\x1b\\x7c\\x78\\x91\\x94\\x64\\x1d\\xaa\\x96\\x9c\\x9a\\xa2\\x1b\\x97\\x99\\xb6\\x0a\\xa8\\xa9\\xd7\\xa0\\x1f\\x0e\\xa3\\xf9\\x18\\x15\\xa2\\x8a\\x05\\xbf\"\n\"\\x89\\x9b\\x78\\x4c\\x1a\\xfc\\x5c\\x8a\\x0a\\x9d\\xfb\\xb2\\x07\\x0e\\x15\\xce\\xac\\xb8\\xc8\\xc7\\x8c\\x0a\\x0b\\xa4\\x6a\\x87\\x85\\x18\\x85\\x84\\x05\\x3e\"\n\"\\x29\\x62\\x51\\x7e\\x1a\\x85\\x8e\\x88\\x91\\x90\\x8d\\x8c\\x90\\x8f\\x1e\\xc6\\xc5\\xb3\\xb0\\xd2\\xc8\\x08\\x0b\\xc3\\x0a\\xf7\\x36\\xe4\\xce\\xf7\\x10\\xf7\"\n\"\\x10\\x2c\\xd1\\xfb\\x3a\\x6c\\x77\\x8a\\x86\\x6d\\x1f\\x0b\\xa2\\x1e\\xa9\\xc7\\x15\\x5d\\xe0\\x1d\\x66\\x6c\\x7d\\x0b\\xef\\x1d\\xfb\\x65\\x07\\x8a\\x2f\\x86\"\n\"\\x82\\x58\\x89\\x08\\x7a\\x0b\\xd1\\x1d\\xf7\\xb2\\x9d\\x07\\x75\\x8c\\x05\\x56\\x8d\\x7c\\x9e\\x0b\\x15\\xcd\\x1d\\x0b\\xfb\\xce\\x06\\x89\\x40\\x81\\x80\\x44\"\n\"\\x88\\x08\\x7c\\x0b\\x1b\\xdd\\xd8\\x1d\\x0b\\xf7\\x64\\x07\\xe3\\x93\\x9a\\xbc\\x8c\\x1e\\x9b\\x9c\\x0b\\xa2\\xa1\\xa7\\xa6\\x74\\xa2\\x70\\x1f\\x0b\\x06\\x7e\"\n\"\\xfb\\x1f\\x05\\x9b\\x06\\x0b\\x7c\\x78\\x56\\x4f\\x1d\\x0b\\x1b\\xb1\\x9a\\x81\\x71\\x70\\x76\\x7a\\x0b\\x15\\x30\\x1d\\xa0\\x0b\\x85\\x8a\\x89\\x81\\x1f\\x0b\"\n\"\\xe1\\x1d\\xfb\\xb3\\x0b\\x40\\x91\\x7f\\x97\\x8a\\xd3\\x08\\x0b\\x15\\xa6\\x06\\x94\\xb3\\x05\\x99\\x0b\\x9d\\x07\\x3f\\x7b\\x99\\xd2\\x1f\\x0b\\x1f\\xf7\\x2e\"\n\"\\x2a\\x05\\x0e\\x92\\x16\\xf7\\x7e\\x9a\\x06\\x77\\x8c\\x61\\x8e\\x7f\\x96\\x8a\\xb0\\x19\\xf7\\x4c\\x07\\xf7\\x20\\xfb\\x4f\\x8f\\x86\\x8e\\x86\\x8e\\x88\\x19\"\n\"\\x93\\x81\\x8e\\x85\\x86\\x1a\\x82\\x82\\x85\\x7f\\x1e\\x78\\x7c\\xf7\\x6e\\x9a\\x06\\x5f\\x8e\\x6c\\x9e\\x61\\xbe\\xfb\\x2d\\xf7\\x56\\x18\\xa8\\xa6\\xf7\\x11\"\n\"\\xf7\\x04\\xa6\\x9b\\xcb\\x89\\x19\\x9a\\xfb\\x60\\x7d\\x07\\xb2\\x8a\\x96\\x87\\x7e\\x1a\\x82\\x82\\x7e\\x7d\\x7e\\x1e\\xfb\\x1d\\xfb\\x0e\\x05\\xf8\\x38\\x07\"\n\"\\x87\\x8d\\x64\\x7f\\x6e\\x82\\x52\\x7c\\x19\\x6d\\x83\\x05\\x7b\\x07\\x8c\\x98\\x94\\x8c\\x95\\x1b\\xad\\x94\\x7e\\x5b\\x1f\\xfc\\x76\\x07\\x8a\\x56\\x88\\x88\"\n\"\\x44\\x80\\x08\\x0b\\xf8\\x31\\xf9\\x17\\x15\\xc7\\x88\\x93\\x87\\x73\\x1a\\x75\\x74\\x6d\\x54\\x58\\x1e\\xfb\\x45\\xfb\\x35\\x05\\xf7\\x61\\x07\\x8c\\xd6\\x95\"\n\"\\x94\\xdc\\x91\\x08\\x9e\\xfb\\xb0\\x78\\x07\\xd8\\x86\\x96\\x7f\\x8d\\x42\\x08\\xfc\\x45\\x07\\x8a\\x36\\x80\\x80\\x3d\\x86\\x08\\x78\\xf7\\xae\\x9e\\x07\\x3e\"\n\"\\x90\\x7f\\x96\\x8a\\xd5\\x08\\xf7\\x4f\\x07\\xa5\\xa0\\xf5\\x22\\x05\\xd8\\x3e\\xc0\\x46\\x73\\x1a\\x7c\\x7e\\x85\\x6e\\x8a\\x1e\\x86\\x80\\x8b\\x8a\\x7f\\x1f\"\n\"\\x78\\xf7\\xc5\\x9e\\x07\\x57\\x8c\\x7d\\x95\\x30\\xec\\xfb\\x7d\\xf7\\x8e\\x18\\xf7\\x52\\xf7\\x50\\xcf\\xcc\\x9b\\x93\\xcf\\x90\\x19\\x9e\\xfb\\x9a\\x07\\x0b\"\n\"\\xf9\\x26\\xf9\\x72\\x15\\x5a\\x06\\x43\\x20\\x05\\xaf\\x4b\\x5e\\x98\\x49\\x1b\\xfb\\x55\\xfb\\x1b\\xfb\\x23\\xfb\\x5f\\x4b\\x9a\\x4b\\xa5\\x59\\x1f\\x9d\\x68\"\n\"\\x9b\\x77\\xb5\\x65\\x2c\\xfb\\x1f\\x18\\xbc\\x06\\xda\\xf7\\x08\\x05\\x66\\xc9\\xb9\\x7e\\xcf\\x1b\\xf7\\x56\\xf7\\x1a\\xf7\\x21\\xf7\\x61\\xcb\\x7c\\xcc\\x70\"\n\"\\xbd\\x1f\\x79\\xae\\x7a\\x9f\\x62\\xb1\\x08\\x60\\x4b\\x15\\xad\\x4a\\x98\\x53\\x31\\x1a\\xfb\\x52\\x3a\\xfb\\x09\\xfb\\x18\\x51\\x62\\x9e\\xba\\x60\\x1e\\x72\"\n\"\\xae\\x15\\x69\\xcb\\x7f\\xc2\\xe3\\x1a\\xf7\\x53\\xdd\\xf7\\x0b\\xf7\\x17\\xc3\\xb4\\x78\\x5d\\xb7\\x1e\\x0b\\x7d\\x1d\\x74\\xac\\x4e\\x56\\x1d\\xbd\\x0b\\x15\"\n\"\\x25\\x06\\x64\\xfb\\x17\\x7c\\xbb\\x86\\x99\\x82\\x9d\\x19\\xb9\\x72\\x65\\xa3\\x5a\\x1b\\xfb\\x07\\x2e\\xfb\\x0d\\xfb\\x29\\xfb\\x14\\xd3\\x31\\xf2\\xd6\\xc4\"\n\"\\xae\\xd3\\xb5\\x1f\\x91\\x65\\x93\\x77\\x9a\\x74\\x08\\x7a\\x96\\x96\\x82\\x92\\x1b\\x8e\\x90\\x8d\\x8e\\x92\\x1f\\xe6\\xb4\\x05\\xaf\\x07\\x84\\x7a\\x83\\x89\"\n\"\\x81\\x1b\\x63\\x6e\\xb0\\xd6\\x7a\\x1f\\x34\\x9d\\x15\\xfb\\x08\\x66\\x66\\x53\\x62\\x1b\\x58\\x68\\xdb\\xf7\\x09\\xf7\\x1f\\xb4\\xdf\\xce\\xa8\\xa2\\x7c\\x69\"\n\"\\x9f\\x1f\\x99\\x74\\x93\\x72\\xa0\\x3d\\x08\\x0e\\xc5\\x15\\xc5\\x0a\\xf8\\xcb\\xbf\\x1d\\xfb\\x30\\xa1\\x1d\\xfb\\x2b\\xc7\\x97\\x0a\\x0b\\xf8\\x49\\xf8\\xbb\"\n\"\\x15\\x64\\x06\\x52\\xfb\\x01\\x05\\x98\\x68\\x74\\x90\\x69\\x1b\\xfb\\x15\\x30\\x2a\\xfb\\x1c\\x5d\\x97\\x5d\\xa0\\x65\\x1f\\x9b\\x70\\x98\\x7c\\xad\\x70\\x42\"\n\"\\xfb\\x20\\x18\\xb0\\x06\\xcc\\xf7\\x0f\\x05\\x7b\\xae\\xa2\\x86\\xae\\x1b\\xf7\\x13\\xeb\\xf4\\xf7\\x1f\\xbb\\x7d\\xbc\\x73\\xb0\\x1f\\x7b\\xa3\\x7e\\x97\\x6c\"\n\"\\xa1\\x08\\x6b\\x4f\\x15\\xa8\\x55\\x96\\x5e\\x4b\\x1a\\xfb\\x09\\x5f\\x47\\x40\\x69\\x74\\x97\\xa9\\x72\\x1e\\x76\\xab\\x15\\x70\\xc5\\x7f\\xc4\\xd0\\x1a\\xe9\"\n\"\\xba\\xc9\\xd2\\xaa\\x0b\\x9e\\x16\\xf7\\xaa\\x9e\\x06\\x8e\\x0a\\xf8\\x50\\xa4\\x0a\\xfb\\x56\\xfb\\xc3\\xf7\\x56\\xa4\\x0a\\xfc\\x45\\x46\\x0a\\x0b\\x9b\\x16\"\n\"\\xf7\\xb0\\x06\\xf7\\x08\\xf4\\xac\\xc3\\xc9\\x1f\\xcc\\xc6\\xb0\\xe4\\xec\\x1a\\xe5\\x6e\\xd9\\x53\\xc2\\x1e\\xd0\\x47\\xfb\\x01\\xaf\\xfb\\x1d\\x1b\\xfb\\xa2\"\n\"\\x78\\x06\\xda\\x84\\x93\\x83\\x8c\\x40\\x08\\xfc\\x50\\x07\\x8a\\x42\\x7f\\x7f\\x40\\x86\\x08\\xf7\\x52\\xf8\\xcb\\x15\\xaa\\x95\\x93\\xb5\\xe2\\xac\\x1d\\x0b\"\n\"\\xf8\\x04\\xf8\\x51\\x15\\x97\\x5c\\x5c\\x91\\x5d\\x1b\\x2b\\x40\\x5a\\x4b\\x66\\xa0\\x6f\\xbd\\x6e\\x1f\\x4b\\x62\\x75\\x6a\\x57\\x1a\\x3b\\xd1\\x52\\xec\\xef\"\n\"\\xd1\\xc8\\xf3\\x9f\\x1e\\x78\\x8e\\x05\\x3d\\x72\\x5b\\x62\\x48\\x1b\\x48\\x58\\xbd\\xcf\\xa8\\x93\\xa0\\xa2\\xaa\\x1f\\x7d\\xab\\xa8\\x84\\xaa\\x1b\\xa9\\x9e\"\n\"\\x97\\xa0\\x9f\\x74\\x98\\x68\\x72\\x75\\x86\\x7e\\x67\\x1f\\x7a\\x9a\\x84\\x9c\\xa1\\x1a\\xbb\\xaf\\xa6\\xcb\\xb7\\xb0\\x83\\x78\\xb8\\x1e\\x0b\\xf7\\x81\\x9a\"\n\"\\x06\\x49\\x90\\x84\\x94\\x8a\\xd4\\x08\\xf7\\xf7\\x07\\xa5\\x1d\\x0b\\xf7\\x6a\\xf7\\x49\\x6e\\x0a\\x0b\\x15\\xf8\\x0e\\x9e\\x1d\\x91\\x07\\xf7\\xbb\\xf8\\x0e\"\n\"\\x05\\xfc\\x14\\xb0\\x1d\\x79\\x07\\xd5\\x9b\\x7d\\x45\\x8c\\x1f\\x0b\\x76\\x06\\x75\\x87\\x80\\x7f\\x7a\\x1b\\x81\\x7a\\x8f\\x93\\x7a\\x1f\\x99\\x66\\x66\\x93\"\n\"\\x6a\\x1b\\x61\\x5f\\x7a\\x6e\\x6a\\x1f\\x68\\x6c\\x79\\x61\\x57\\x1a\\x3b\\xb7\\x53\\xf7\\x04\\x50\\x1e\\xd3\\x64\\xbf\\x63\\xa4\\x65\\x08\\x94\\x7e\\x90\\x76\"\n\"\\x72\\x1a\\x49\\x59\\x5d\\x42\\x31\\x4d\\xc2\\xf7\\x0e\\x59\\x1e\\x74\\x06\\xa9\\xfb\\x68\\x05\\xa1\\x06\\x9e\\x8c\\x97\\x99\\x9a\\x1b\\x96\\x9c\\x87\\x84\\x9e\"\n\"\\x1f\\x0b\\xf7\\x55\\xf8\\x5d\\x15\\x86\\x8e\\x4d\\x73\\x65\\x7e\\x53\\x7a\\x19\\x7b\\x07\\x90\\x8c\\x05\\x8d\\x9a\\x9a\\x8c\\x95\\x1b\\xa2\\x94\\x7a\\x60\\x1f\"\n\"\\xfc\\x0f\\xd4\\x1d\\x81\\x92\\xa0\\x7a\\x1f\\xa2\\x79\\x7d\\x94\\x7b\\x1b\\x74\\x79\\x7a\\x75\\x6b\\xb2\\x74\\xc2\\xb7\\xb3\\x99\\xa4\\xa6\\x1f\\xaf\\xab\\xa1\"\n\"\\xcf\\xda\\x1a\\x0b\\xc1\\x07\\xf7\\x08\\x89\\xa0\\x7a\\xa1\\xfb\\x01\\x08\\xa3\\x06\\x85\\xf7\\x3e\\x05\\xfc\\xc8\\x06\\x85\\xfb\\x3e\\x05\\xa3\\x06\\xa2\\xf7\"\n\"\\x01\\xa0\\x9c\\xf7\\x07\\x8d\\x08\\xc1\\x0b\\xf7\\x4d\\x15\\x42\\x67\\x5b\\x65\\x52\\x1b\\x3b\\x53\\xdb\\xf7\\x09\\x88\\x1f\\xf7\\xac\\x06\\xf7\\x07\\x88\\x4c\"\n\"\\xd2\\x29\\x1b\\xfb\\x01\\x3a\\x27\\xfb\\x18\\xfb\\x18\\xda\\x27\\xf4\\xc1\\xbe\\xa6\\xbb\\xad\\x1f\\x9d\\xa3\\x98\\xa8\\x9d\\xc3\\x08\\xfb\\xbd\\xf7\\x19\\x15\"\n\"\\xcd\\x93\\xad\\xb1\\xbd\\x1b\\xbe\\xa9\\x65\\x49\\x8e\\x1f\\x0b\\xf7\\x41\\xf8\\x67\\x15\\x48\\x6a\\x81\\x86\\x45\\x6f\\x91\\x7c\\x18\\x91\\x8d\\x05\\x8d\\x93\"\n\"\\x92\\x8c\\x92\\x1b\\xa6\\xec\\x1d\\x9b\\x79\\x1e\\x82\\x93\\x92\\x85\\x8f\\x1b\\x8e\\x90\\x8d\\x8e\\x90\\x1f\\xf2\\xc1\\x85\\x99\\x05\\x83\\x7e\\x85\\x89\\x80\"\n\"\\x1b\\x6c\\x83\\x9c\\xcb\\x1f\\x0b\\xf7\\x93\\x26\\x0a\\x26\\xf7\\x08\\x06\\x8c\\x1d\\x07\\x0b\\x9f\\xbd\\x1e\\x92\\x9e\\x90\\x9c\\x95\\x1a\\xa3\\x75\\xa1\\x72\"\n\"\\x73\\x75\\x75\\x73\\x81\\x90\\x7a\\x92\\x78\\x1e\\x9f\\x58\\x8f\\x73\\x56\\x1a\\x67\\x8c\\x7c\\x8f\\x61\\x9c\\x08\\x93\\x78\\x78\\x90\\x81\\x1b\\x74\\x7a\\x79\"\n\"\\x71\\x6f\\x9a\\x7c\\xa8\\x97\\x95\\x8e\\x94\\xa3\\x1f\\xb2\\x9a\\x9c\\x8f\\xae\\x8e\\x0b\\x07\\xd1\\x3d\\x1d\\x2f\\x1d\\xfb\\x5b\\xfb\\xbb\\xf7\\x5b\\xaf\\x0a\"\n\"\\xfc\\x5b\\x5c\\x1d\\x0e\\x15\\x65\\x7b\\x7d\\x79\\x0a\\x08\\x7c\\xf7\\x6b\\x9a\\x07\\x55\\x8f\\x81\\x94\\xc0\\x1a\\xf8\\xec\\x07\\x86\\x8d\\x82\\x89\\x81\\x88\"\n\"\\x7f\\x85\\x19\\x82\\x78\\x7c\\x86\\x83\\x1b\\x86\\x81\\x8e\\x90\\x7c\\x1f\\x96\\x6f\\x6e\\x91\\x72\\x1b\\x5d\\x5d\\x73\\x64\\x6f\\x1f\\x6d\\x60\\x81\\x64\\x87\"\n\"\\x33\\x08\\x0b\\x7f\\x74\\x1b\\x7d\\x77\\x91\\x94\\x79\\x1f\\x73\\x97\\x05\\x97\\x73\\x73\\xe4\\x1d\\xaa\\x96\\x9b\\x9a\\xa3\\x1b\\x96\\x9a\\x48\\x0a\\x77\\xb4\"\n\"\\x99\\x87\\xa4\\x1b\\xc3\\xa8\\xa9\\xd7\\xa0\\x1f\\x0e\\xf8\\x28\\xf7\\xd5\\x15\\xfb\\x6e\\x07\\x4c\\x7f\\x78\\x61\\x89\\x1e\\x79\\x8a\\x05\\x79\\xf7\\x78\\x9d\"\n\"\\x07\\x79\\x8c\\x05\\x61\\x8d\\x7f\\x9e\\xca\\x1a\\xf7\\x6e\\xa5\\x07\\xf7\\x16\\xfb\\x4f\\x05\\xba\\x4c\\x92\\x7f\\x7c\\x1a\\x79\\x80\\x85\\x69\\x89\\x1e\\x79\"\n\"\\x0b\\x9a\\x1d\\x6b\\xdd\\x54\\x0a\\x0b\\x39\\x0a\\x9d\\xfb\\xb1\\x79\\x07\\xd5\\x9a\\x2e\\x0a\\xfc\\x96\\xfb\\xc5\\x95\\x0a\\x0b\\xf7\\xc7\\xf7\\x66\\x15\\x32\"\n\"\\xca\\x0a\\xf7\\x77\\x9c\\x79\\x06\\x59\\x8e\\x86\\x94\\x8a\\xe7\\x08\\xe4\\xa6\\x07\\xf7\\x10\\xfb\\x31\\x05\\x93\\x82\\x8e\\x84\\x84\\x1a\\x83\\x84\\x86\\x7f\"\n\"\\x1e\\x79\\x7a\\x0b\\xf9\\x62\\xf7\\x27\\x15\\x54\\xf7\\x96\\x5c\\x06\\xfb\\x5f\\xfb\\x9e\\x05\\x5a\\xf7\\x48\\x31\\xd1\\xe5\\xc2\\x07\\xfb\\x11\\xc4\\x15\\xfb\"\n\"\\x1b\\x06\\xf7\\x1b\\xf7\\x47\\x05\\xb7\\xf7\\xf2\\x2c\\x0a\\x0b\\x9b\\x1a\\x9f\\x7e\\x97\\x75\\x7c\\x44\\x0a\\x0b\\xf7\\xc8\\x15\\x5f\\x8d\\x7f\\x93\\x8a\\xa5\"\n\"\\x08\\xf7\\xeb\\x07\\x7d\\x8e\\xfb\\x0a\\x54\\x05\\x74\\x07\\x94\\xa4\\x99\\x8f\\x8f\\x1b\\x91\\x8d\\x85\\x75\\x1f\\xfb\\x95\\x07\\x8a\\x74\\x81\\x84\\x61\\x89\"\n\"\\x08\\x73\\xf7\\x53\\x07\\x0b\\x6d\\xa4\\x6f\\x95\\x53\\x92\\xbb\\x98\\xa0\\x94\\xa2\\x9d\\x08\\xb0\\xa9\\xa1\\xb8\\xbb\\x1a\\xe4\\x3f\\xc8\\xfb\\x04\\x66\\x6f\"\n\"\\x85\\x7b\\x62\\x1e\\x83\\x74\\x81\\x88\\x80\\x1b\\x76\\x81\\x94\\x9e\\x88\\x1f\\x7b\\x06\\x0b\\x79\\x9d\\x05\\x44\\x42\\x48\\x6d\\x38\\x1b\\x4c\\x53\\x9f\\xb1\"\n\"\\x60\\x1f\\x54\\xbc\\x6c\\xe5\\xf7\\x04\\x1a\\xf7\\x49\\xe8\\xf7\\x08\\xf7\\x25\\xc4\\xbf\\x76\\x64\\xb3\\x1e\\xab\\x6b\\x9a\\x6f\\x9e\\x4a\\x08\\x0b\\xf7\\x6d\"\n\"\\xf7\\xd0\\x15\\x7e\\xb0\\xa7\\x86\\xae\\x1b\\xc8\\xc6\\x9e\\xac\\xb4\\x1f\\xae\\xa7\\x9f\\xb9\\xc0\\x1a\\xd8\\x67\\xc0\\x40\\xad\\x1e\\x62\\x9d\\x77\\x8d\\xfb\"\n\"\\x12\\x8c\\x08\\xfb\\x6a\\x79\\x06\\x0b\\xae\\x1d\\xe8\\x1d\\x8f\\x0a\\x66\\x55\\x66\\x1f\\x0e\\xfb\\x0b\\xfb\\x0f\\xfb\\x09\\x3b\\xf7\\x0e\\xf7\\x45\\xf7\\x47\"\n\"\\xda\\xf7\\x0c\\xf7\\x0a\\x1f\\x0e\\xa9\\x0a\\xc2\\xc3\\xb3\\x0a\\x6e\\x6e\\x65\\x68\\x6e\\xa8\\xb0\\xaf\\xa9\\xa8\\xaf\\x1f\\x0b\\x1a\\x9e\\x99\\x93\\xab\\x8d\"\n\"\\x1e\\x8f\\x95\\x8b\\x8c\\x96\\x1f\\x9e\\xfb\\xac\\x78\\x07\\xbb\\x89\\x0b\\x15\\xce\\xac\\xb8\\xc8\\xc7\\x1a\\xbd\\x68\\xb2\\x4b\\x1d\\xb0\\x92\\x91\\x8c\\x8c\"\n\"\\x91\\x1e\\x8d\\x91\\x8c\\x8b\\x8c\\x1b\\x93\\x91\\x85\\x83\\x6b\\x6f\\x0b\\x07\\x4c\\x52\\x0a\\xca\\x1a\\xf8\\x5c\\x3c\\x1d\\xa1\\x8c\\x05\\x0b\\x15\\x3f\\x6e\"\n\"\\x73\\x76\\x51\\x1b\\x4a\\xb2\\x1d\\x1a\\xbd\\x68\\xb2\\x4b\\x1d\\xb1\\x40\\x0a\\x6f\\x67\\x55\\x66\\x1f\\x0b\\x15\\xce\\xac\\xb8\\x94\\x0a\\x0b\\x5e\\x0a\\xf7\"\n\"\\x62\\xf7\\xc3\\xfb\\x57\\x46\\x0a\\x78\\xf7\\xaa\\x9e\\x07\\x5e\\x0a\\x0b\\x94\\x0a\\x83\\x6b\\x6f\\x0b\\xfb\\x0d\\xfb\\x33\\x24\\xf7\\x2e\\x05\\x81\\x9a\\x85\"\n\"\\x9a\\x97\\x1a\\x9b\\x94\\x99\\x98\\x8f\\x1e\\x93\\x8d\\x8d\\x8c\\xa8\\x8c\\x08\\x9d\\xfb\\xbc\\x79\\x07\\x0b\\xfb\\xd9\\xf7\\x2c\\x15\\xd9\\x96\\xad\\xb0\\xc8\"\n\"\\x1b\\xc8\\xa3\\x6f\\x34\\x98\\x1f\\x0b\\xf0\\xab\\x26\\xf7\\x08\\x07\\xba\\x1d\\x0b\\xa6\\x57\\x0a\\xf7\\x5b\\x16\\x71\\x75\\x74\\x70\\x6f\\xa0\\x75\\xa6\\xe8\"\n\"\\x1d\\xc8\\xc7\\x1a\\xbd\\x68\\xb2\\xbc\\x1d\\x0b\\xf8\\x96\\xb3\\x1d\\x0b\\xd7\\xb0\\x0a\\x96\\x7b\\x9d\\x80\\x61\\x0a\\x15\\x84\\x84\\x7f\\x81\\x80\\x1e\\x77\"\n\"\\x7a\\x71\\x81\\x6e\\x1b\\x37\\x55\\xdb\\xf7\\x10\\xf7\\x04\\xbc\\xd5\\xd7\\xc1\\xbb\\x5c\\x56\\x1f\\x0b\\x50\\x1d\\x98\\x94\\x98\\x7f\\x0a\\x0e\\x30\\x1d\\x9f\"\n\"\\xd6\\x1d\\x76\\xdd\\x1d\\x5b\\x0a\\x2a\\x1d\\x0b\\x15\\x84\\xad\\xd9\\x85\\xbe\\x1b\\xe5\\xac\\x7e\\x67\\x51\\x3f\\x64\\xfb\\x05\\x32\\x52\\xa8\\xb7\\xa2\\x94\"\n\"\\x9a\\xb3\\xbb\\x1f\\x0b\\x82\\xf7\\x75\\x05\\x76\\x06\\x76\\x85\\x7b\\x7f\\x77\\x1b\\x82\\x7c\\x8e\\x90\\x7c\\x1f\\x9c\\x5a\\x59\\x93\\x5c\\x1b\\x39\\x0b\\xf8\"\n\"\\x53\\x15\\xab\\xcb\\x05\\xa7\\xc3\\x98\\xb1\\xa5\\x1a\\xa3\\x7a\\x9c\\x73\\x68\\x7a\\x62\\x23\\x85\\x1e\\x86\\x3b\\x05\\x0b\\x07\\xe2\\x93\\x99\\xbc\\x8d\\xbd\"\n\"\\x1d\\x30\\x08\\x3f\\x07\\x0e\\x5d\\x0a\\x79\\x07\\x2e\\x1d\\x0b\\x06\\xc5\\x8a\\x9f\\x71\\x89\\x45\\x08\\x9d\\xf7\\x85\\x79\\x06\\x0b\\x1f\\x7d\\x6c\\x05\\x7f\"\n\"\\xa8\\xa2\\x87\\xab\\x1b\\xd8\\xbb\\xab\\x0b\\xba\\x0a\\xfc\\x1a\\x07\\x81\\xfb\\x35\\x9e\\x8a\\x8f\\xe2\\xac\\xaa\\xe0\\x8a\\x19\\x0b\\x15\\xa9\\xc3\\xaf\\xb9\"\n\"\\xd5\\xbc\\x3f\\xfb\\x09\\xfb\\x02\\x5a\\x40\\x43\\x5c\\x52\\xaf\\xa9\\x1e\\x0e\\x07\\xc5\\x1d\\x0b\\x07\\x8a\\x36\\x81\\x80\\x3f\\x86\\x08\\x78\\xf7\\xac\\x9e\"\n\"\\x07\\x3f\\x8e\\x7d\\x99\\x8a\\xd4\\x08\\x0b\\x15\\x64\\x71\\x7a\\x7f\\x6c\\x1b\\x76\\x76\\x90\\x94\\x7a\\x1f\\xba\\x32\\x79\\x92\\x5e\\x1b\\x5d\\x0b\\xe3\\x60\"\n\"\\x1d\\x90\\x82\\x8c\\x2f\\x08\\x0b\\x9e\\xed\\x1d\\x0b\\x15\\x55\\x5e\\x5e\\x55\\x53\\xb6\\x5f\\x0b\\x15\\x70\\x74\\x74\\x71\\x6f\\xa2\\x74\\xa6\\xa6\\xa2\\xa2\"\n\"\\xa6\\xa6\\x74\\xa2\\x70\\x1f\\x0b\\xb7\\x0a\\xe3\\x1a\\x0e\\x07\\xe3\\x93\\x99\\xbc\\x8c\\x1e\\x9b\\x9c\\x06\\x0b\\x86\\x41\\x6d\\x92\\x7c\\x18\\x96\\x8f\\x05\"\n\"\\x8d\\x0b\\x07\\x45\\x8a\\x7b\\x7c\\x41\\x1b\\x79\\xf7\\xb2\\x9d\\x07\\x41\\x7b\\x9a\\xd1\\x1f\\x0b\\x07\\xb2\\x0a\\x0b\\xa7\\x1d\\x79\\x82\\x90\\x7c\\x1b\\x76\"\n\"\\x7e\\x7f\\x78\\x7b\\x0b\\xf7\\x49\\xf8\\x63\\x15\\x47\\x69\\x80\\x87\\x41\\x6d\\x92\\x7d\\x18\\x96\\x8e\\x05\\x0b\\xd2\\x9b\\x99\\x6a\\x1d\\x0b\\xb8\\xb7\\xc2\"\n\"\\xc2\\x5e\\xb8\\x54\\x1f\\x8c\\x69\\x15\\xae\\xa9\\x6d\\x67\\x67\\x0b\\xf7\\xdf\\xf9\\x38\\x2c\\x0a\\x0e\\x9f\\x07\\x6b\\x8f\\x89\\x8b\\x83\\x90\\x08\\x85\\x8e\"\n\"\\x89\\x93\\xad\\x1a\\x0b\\x48\\x0a\\x77\\xb4\\x9a\\x87\\xa4\\x1b\\xc2\\x0b\\xcb\\x0a\\x5a\\x8c\\x83\\x9a\\x0b\\x79\\x07\\xa2\\x8a\\xc5\\x89\\x96\\x7f\\x8a\\x52\"\n\"\\x19\\xfc\\x8a\\x04\\x0b\\xbd\\xdd\\xd8\\x40\\xbe\\xfb\\x06\\x78\\x0b\\x07\\xd1\\x8c\\x9b\\x9a\\xd5\\x1b\\x9d\\x0b\\xa5\\x36\\xe2\\xfb\\x78\\xf7\\x80\\x18\\x0b\"\n\"\\x56\\xc6\\x64\\xdb\\xd9\\xc4\\xb2\\xc0\\xa2\\x7c\\x9a\\x76\\x1e\\x0b\\x1b\\x7b\\x78\\xf7\\xb8\\x9e\\x7a\\x06\\x55\\x77\\x9f\\xc2\\x1f\\x0b\\xf8\\x2e\\x16\\x9b\"\n\"\\x06\\xf7\\x80\\xf8\\xa7\\x05\\xfc\\x40\\x07\\x0b\\xb1\\xa1\\x98\\x81\\x6e\\x9d\\x1e\\x71\\x9b\\x97\\x81\\x9c\\x1b\\x0b\\xfb\\x2c\\xfb\\x29\\xfb\\x51\\xfb\\x4e\"\n\"\\xf7\\x29\\xfb\\x2c\\x0b\\xf9\\x31\\x15\\x7f\\x06\\xfb\\x80\\xfc\\xb5\\x63\\x2d\\x80\\x0b\\xfb\\x14\\xf7\\xb2\\x05\\x3e\\x06\\xfb\\x13\\xfb\\xb2\\xc0\\x0b\\x07\"\n\"\\x44\\x8a\\x7c\\x7d\\x40\\x1b\\x79\\xf7\\xb3\\x07\\x0b\\x85\\x88\\x1e\\x83\\x86\\x89\\x8b\\x6b\\x87\\x08\\x77\\x0b\\x8a\\x7e\\x85\\x8b\\x87\\x1b\\x68\\x82\\x96\"\n\"\\xb9\\x1f\\x0b\\xda\\x69\\x1e\\x7d\\xad\\xa6\\x87\\xd0\\x1b\\xf7\\xac\\x0b\\x07\\xf7\\x0a\\xb8\\x64\\xfb\\x0f\\xa1\\x1f\\x0e\\x15\\x38\\x06\\x61\\xfb\\x13\\x98\"\n\"\\x81\\x05\\x0e\\xb2\\xf7\\x95\\x15\\x4c\\xf7\\x8a\\xca\\x07\\x0e\\x07\\x89\\x2f\\x86\\x82\\x59\\x88\\x08\\x79\\x7a\\x0b\\x58\\x88\\x08\\x7a\\x7a\\xf7\\x76\\x9c\"\n\"\\x7b\\x06\\x0b\\x1f\\x29\\x20\\x05\\x74\\xf7\\x91\\x07\\x0e\", 48556\n};\n"
  },
  {
    "path": "src/fonts/NimbusSans-Bold.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusSans_Bold_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x10\\x4e\\x69\\x6d\\x62\\x75\\x73\\x53\\x61\\x6e\\x73\\x2d\\x42\\x6f\\x6c\\x64\\x00\\x01\\x01\\x01\\x31\\xf9\\xbc\\x00\"\n\"\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xc0\\x03\\xf8\\x14\\x04\\xfb\\x2f\\x0c\\x03\\xd0\\x0c\\x04\\xfb\\x50\\xfb\\xc7\\xfa\\xc1\\xfa\\xc2\\x05\"\n\"\\x1c\\x1f\\x20\\x0f\\x1c\\x1f\\x33\\x11\\xc0\\x1c\\x79\\x91\\x12\\x01\\xa6\\x02\\x00\\x01\\x00\\x08\\x00\\x0e\\x00\\x13\\x00\\x1d\\x00\\x24\\x00\\x2b\\x00\\x35\"\n\"\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x74\\x00\\x7a\\x00\\x84\\x00\\x8b\\x00\\x8e\\x00\\x95\\x00\\x9c\"\n\"\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\\x00\\xcd\\x00\\xd9\\x00\\xe3\\x00\\xe7\\x00\\xf2\\x00\\xf4\\x00\\xfa\\x01\\x04\\x01\\x0b\\x01\\x12\"\n\"\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\\x01\\x4d\\x01\\x53\\x01\\x59\\x01\\x5f\\x01\\x6b\\x01\\x6f\\x01\\x71\\x01\\x77\\x01\\x7d\\x01\\x89\"\n\"\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\\x01\\xc2\\x01\\xcd\\x01\\xd0\\x01\\xd2\\x01\\xd5\\x01\\xdb\\x01\\xe1\\x01\\xed\\x01\\xf0\\x01\\xf6\"\n\"\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\\x02\\x27\\x02\\x33\\x02\\x38\\x02\\x3e\\x02\\x4b\\x02\\x52\\x02\\x59\\x02\\x60\\x02\\x6f\\x02\\x7b\"\n\"\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\\x02\\xa8\\x02\\xb3\\x02\\xb9\\x02\\xbf\\x02\\xc9\\x02\\xcd\\x02\\xd3\\x02\\xda\\x02\\xe3\\x02\\xec\"\n\"\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\\x03\\x2b\\x03\\x34\\x03\\x3d\\x03\\x46\\x03\\x4f\\x03\\x58\\x03\\x61\\x03\\x6a\\x03\\x73\\x03\\x7c\"\n\"\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\\x03\\xbb\\x03\\xc4\\x03\\xcd\\x03\\xd6\\x03\\xdf\\x03\\xe8\\x03\\xf1\\x03\\xfa\\x04\\x03\\x04\\x0c\"\n\"\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\\x04\\x4b\\x04\\x54\\x04\\x5d\\x04\\x66\\x04\\x6f\\x04\\x78\\x04\\x81\\x04\\x8a\\x04\\x93\\x04\\x9c\"\n\"\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\\xed\\x04\\xf6\\x04\\xff\\x05\\x08\\x05\\x11\\x05\\x1a\\x05\\x23\\x05\\x2c\"\n\"\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\\x05\\x6b\\x05\\x74\\x05\\x7d\\x05\\x86\\x05\\x8f\\x05\\x98\\x05\\xa1\\x05\\xaa\\x05\\xb3\\x05\\xbc\"\n\"\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\\x05\\xfb\\x06\\x04\\x06\\x0d\\x06\\x16\\x06\\x1f\\x06\\x28\\x06\\x31\\x06\\x3a\\x06\\x43\\x06\\x4c\"\n\"\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\\x06\\x85\\x06\\x90\\x06\\x9a\\x06\\xa3\\x06\\xac\\x06\\xb5\\x06\\xbf\\x06\\xc6\\x06\\xcf\\x06\\xdb\"\n\"\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\\x07\\x11\\x07\\x15\\x07\\x1b\\x07\\x21\\x07\\x26\\x07\\x2d\\x07\\x3a\\x07\\x40\\x07\\x46\\x07\\x50\"\n\"\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\\x07\\x86\\x07\\x8f\\x07\\x92\\x07\\x9a\\x07\\xa3\\x07\\xae\\x07\\xb4\\x07\\xb9\\x07\\xbe\\x07\\xc4\"\n\"\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\\x08\\x05\\x08\\x0a\\x08\\x10\\x08\\x12\\x08\\x19\\x08\\x21\\x08\\x29\\x08\\x33\\x08\\x3d\\x08\\x49\"\n\"\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\\x08\\x8c\\x08\\x97\\x08\\x9c\\x08\\xa8\\x08\\xb4\\x08\\xba\\x08\\xc0\\x08\\xc6\\x08\\xd2\\x08\\xd6\"\n\"\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\\x09\\x0b\\x09\\x11\\x09\\x1c\\x09\\x22\\x09\\x2e\\x09\\x38\\x09\\x40\\x09\\x42\\x09\\x48\\x09\\x55\"\n\"\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\\x09\\x93\\x09\\x9e\\x09\\xa4\\x09\\xa7\\x09\\xa9\\x09\\xb0\\x09\\xbc\\x09\\xca\\x09\\xcd\\x09\\xda\"\n\"\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\\x0a\\x0f\\x0a\\x17\\x0a\\x22\\x0a\\x2e\\x0a\\x34\\x0a\\x39\\x0a\\x42\\x0a\\x47\\x0a\\x50\\x0a\\x53\"\n\"\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\\x0a\\x7c\\x0a\\x89\\x0a\\x90\\x0a\\x9d\\x0a\\xa4\\x0a\\xab\\x0a\\xb2\\x0a\\xb9\\x0a\\xc0\\x0a\\xc7\"\n\"\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\\x0a\\xf8\\x0a\\xff\\x0b\\x06\\x0b\\x0d\\x0b\\x14\\x0b\\x1b\\x0b\\x22\\x0b\\x29\\x0b\\x30\\x0b\\x37\"\n\"\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\\x0b\\x68\\x0b\\x6f\\x0b\\x76\\x0b\\x7d\\x0b\\x84\\x0b\\x8b\\x0b\\x92\\x0b\\x99\\x0b\\xa0\\x0b\\xa7\"\n\"\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\\x0b\\xd8\\x0b\\xdf\\x0b\\xe6\\x0b\\xed\\x0b\\xf4\\x0b\\xfb\\x0c\\x02\\x0c\\x09\\x0c\\x10\\x0c\\x17\"\n\"\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\\x0c\\x48\\x0c\\x4d\\x0c\\x56\\x0c\\x5d\\x0c\\x64\\x0c\\x73\\x0c\\x87\\x0c\\x93\\x0c\\x98\\x0c\\x9e\"\n\"\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\\x0c\\xd1\\x0c\\xd7\\x0c\\xe1\\x0c\\xe5\\x0c\\xe9\\x0d\\x1f\\x0d\\x5f\\x0d\\x6f\\x0d\\x7a\\x41\\x45\"\n\"\\x61\\x63\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\\x6c\\x70\\x68\\x61\\x41\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x41\\x6d\\x61\\x63\\x72\\x6f\"\n\"\\x6e\\x41\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x42\\x65\\x74\\x61\\x43\\x61\\x63\\x75\\x74\\x65\\x43\\x63\\x61\\x72\"\n\"\\x6f\\x6e\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x43\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x43\\x68\\x69\\x44\\x63\\x61\\x72\\x6f\\x6e\"\n\"\\x44\\x63\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\\x62\\x72\\x65\\x76\\x65\\x45\\x63\\x61\\x72\\x6f\\x6e\\x45\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\"\n\"\\x74\\x45\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\"\n\"\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x75\\x72\\x6f\\x47\\x61\\x6d\\x6d\\x61\\x47\\x62\\x72\\x65\\x76\\x65\\x47\"\n\"\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x47\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\"\n\"\\x48\\x62\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x49\\x4a\\x49\\x62\\x72\\x65\\x76\\x65\\x49\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\"\n\"\\x74\\x49\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x49\\x6f\\x74\\x61\\x49\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x49\"\n\"\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\\x64\\x65\\x4a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x4b\\x61\\x70\\x70\\x61\\x4b\\x63\"\n\"\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\\x63\\x75\\x74\\x65\\x4c\\x61\\x6d\\x62\\x64\\x61\\x4c\\x63\\x61\\x72\\x6f\\x6e\\x4c\\x63\\x6f\\x6d\"\n\"\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\\x4d\\x75\\x4e\\x61\\x63\\x75\\x74\\x65\\x4e\\x63\\x61\\x72\\x6f\\x6e\\x4e\\x63\\x6f\\x6d\\x6d\\x61\"\n\"\\x61\\x63\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\\x76\\x65\\x4f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x4f\\x6d\\x61\\x63\\x72\"\n\"\\x6f\\x6e\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x4f\"\n\"\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\\x69\\x50\\x69\\x50\\x73\\x69\\x52\\x61\\x63\\x75\\x74\\x65\\x52\\x63\\x61\\x72\\x6f\\x6e\\x52\\x63\"\n\"\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\\x6f\\x53\\x61\\x63\\x75\\x74\\x65\\x53\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x53\\x63\\x69\\x72\\x63\"\n\"\\x75\\x6d\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x53\\x69\\x67\\x6d\\x61\\x54\\x61\\x75\\x54\\x62\\x61\\x72\\x54\\x63\"\n\"\\x61\\x72\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x54\\x68\\x65\\x74\\x61\\x55\\x62\\x72\\x65\\x76\\x65\\x55\\x68\\x75\\x6e\\x67\"\n\"\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x55\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x55\\x70\\x73\"\n\"\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x55\\x72\\x69\\x6e\\x67\\x55\\x74\\x69\"\n\"\\x6c\\x64\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x57\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x57\\x67\\x72\"\n\"\\x61\\x76\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x59\\x67\\x72\\x61\\x76\\x65\\x5a\\x61\\x63\\x75\\x74\\x65\\x5a\\x64\\x6f\\x74\"\n\"\\x61\\x63\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\\x72\\x65\\x76\\x65\\x61\\x65\\x61\\x63\\x75\\x74\\x65\\x61\\x66\\x69\\x69\\x30\\x30\\x32\\x30\\x38\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x39\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x33\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x36\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x32\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x30\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x33\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x37\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\"\n\"\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x34\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x38\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x31\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x35\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x38\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x35\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x32\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x36\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x31\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\"\n\"\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x38\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x32\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x35\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x39\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x32\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x36\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\"\n\"\\x30\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x33\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\"\n\"\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x31\\x30\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x38\\x34\\x36\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x34\\x38\"\n\"\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\\x69\\x36\\x31\\x33\\x35\\x32\\x61\\x6c\\x70\\x68\\x61\\x61\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\"\n\"\\x73\\x61\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\\x61\\x6e\\x67\\x6c\\x65\\x72\\x69\\x67\\x68\\x74\\x61\\x6f\\x67\\x6f\\x6e\"\n\"\\x65\\x6b\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x61\\x72\\x72\\x6f\\x77\\x62\\x6f\\x74\\x68\"\n\"\\x61\\x72\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\\x77\\x72\\x69\\x67\\x68\\x74\\x61\\x72\\x72\\x6f\"\n\"\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x62\\x73\\x65\\x62\\x65\\x74\\x61\\x63\\x61\\x63\\x75\"\n\"\\x74\\x65\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x63\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x63\\x68\\x69\"\n\"\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\\x63\\x6c\\x75\\x62\\x64\\x63\\x61\\x72\\x6f\\x6e\\x64\\x63\\x72\\x6f\\x61\\x74\\x64\\x65\"\n\"\\x6c\\x74\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x62\\x72\\x65\\x76\\x65\\x65\\x63\\x61\"\n\"\\x72\\x6f\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x65\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x65\\x6e\\x67\\x65\\x6f\"\n\"\\x67\\x6f\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x71\\x75\\x69\\x76\\x61\\x6c\\x65\"\n\"\\x6e\\x63\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\\x65\\x74\\x61\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x78\\x63\\x6c\\x61\\x6d\\x64\\x62\\x6c\"\n\"\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\\x65\\x6d\\x61\\x6c\\x65\\x66\\x72\\x61\\x6e\\x63\\x67\\x61\\x6d\\x6d\\x61\\x67\\x62\\x72\\x65\\x76\"\n\"\\x65\\x67\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x67\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\"\n\"\\x6e\\x74\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x68\\x62\\x61\\x72\\x68\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x68\\x65\\x61\"\n\"\\x72\\x74\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\\x65\\x69\\x6a\\x69\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x69\\x6e\\x66\\x69\\x6e\\x69\\x74\\x79\\x69\\x6e\"\n\"\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x74\\x70\\x69\\x6e\\x74\\x65\\x72\\x73\"\n\"\\x65\\x63\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x69\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x69\\x6f\\x74\\x61\\x69\\x6f\\x74\"\n\"\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x6f\\x74\\x61\\x74\\x6f\"\n\"\\x6e\\x6f\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x6b\\x61\\x70\\x70\\x61\\x6b\\x63\\x6f\\x6d\\x6d\\x61\\x61\"\n\"\\x63\\x63\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\\x61\\x6e\\x64\\x69\\x63\\x6c\\x61\\x63\\x75\\x74\\x65\\x6c\\x61\\x6d\\x62\\x64\\x61\\x6c\\x63\\x61\"\n\"\\x72\\x6f\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6c\\x64\\x6f\\x74\\x6c\\x65\\x73\\x73\\x65\\x71\\x75\\x61\\x6c\\x6c\\x69\\x72\\x61\"\n\"\\x6c\\x6f\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\"\n\"\\x6c\\x6e\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\\x74\\x65\\x6e\\x61\\x70\\x6f\\x73\\x74\\x72\\x6f\\x70\\x68\\x65\\x6e\\x63\\x61\\x72\\x6f\\x6e\\x6e\"\n\"\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x71\\x75\\x61\\x6c\\x6e\\x75\\x6f\"\n\"\\x62\\x72\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x6f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x65\\x67\\x61\\x6f\\x6d\"\n\"\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x72\\x74\\x68\\x6f\"\n\"\\x67\\x6f\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x70\\x61\\x72\\x74\\x69\\x61\\x6c\\x64\\x69\\x66\\x66\\x70\\x65\\x73\\x65\\x74\"\n\"\\x61\\x70\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x62\\x73\\x65\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\"\n\"\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\\x6f\\x74\\x65\\x72\\x65\\x76\\x65\\x72\\x73\\x65\\x64\\x72\\x61\\x63\\x75\\x74\\x65\\x72\\x61\\x64\"\n\"\\x69\\x63\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x72\\x65\\x76\\x6c\\x6f\\x67\\x69\\x63\\x61\\x6c\"\n\"\\x6e\\x6f\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\\x73\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x73\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x73\"\n\"\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\\x65\\x63\\x6f\\x6e\\x64\\x73\\x69\\x67\\x6d\\x61\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x73\"\n\"\\x70\\x61\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x73\\x75\\x6e\\x74\\x61\\x75\\x74\\x62\\x61\\x72\\x74\\x63\\x61\\x72\\x6f\\x6e\\x74\\x63\\x6f\"\n\"\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x62\\x72\\x65\\x76\\x65\\x75\\x68\\x75\\x6e\\x67\\x61\\x72\"\n\"\\x75\\x6d\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x75\\x6e\\x64\\x65\\x72\\x73\\x63\\x6f\\x72\\x65\\x64\\x62\\x6c\\x75\\x6e\\x69\\x30\\x30\\x41\"\n\"\\x30\\x75\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\\x32\\x31\\x41\\x75\\x6e\\x69\\x30\\x32\\x31\\x42\\x75\\x6e\\x69\\x30\\x32\\x43\\x39\\x75\\x6e\\x69\"\n\"\\x30\\x33\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\\x6e\\x69\\x30\\x33\\x41\\x39\\x75\\x6e\\x69\\x30\\x33\\x42\\x43\\x75\\x6e\\x69\\x30\\x33\\x43\\x32\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\\x30\\x44\\x75\\x6e\\x69\\x30\\x34\\x35\\x30\\x75\\x6e\\x69\\x30\\x34\\x35\\x44\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x39\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\\x69\\x30\\x34\\x39\\x36\\x75\\x6e\\x69\\x30\\x34\\x39\\x37\\x75\\x6e\\x69\\x30\\x34\\x39\\x38\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\\x41\\x75\\x6e\\x69\\x30\\x34\\x39\\x42\\x75\\x6e\\x69\\x30\\x34\\x39\\x43\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x39\\x44\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\\x30\\x34\\x41\\x31\\x75\\x6e\\x69\\x30\\x34\\x41\\x32\\x75\\x6e\\x69\\x30\\x34\\x41\\x33\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\\x75\\x6e\\x69\\x30\\x34\\x41\\x45\\x75\\x6e\\x69\\x30\\x34\\x41\\x46\\x75\\x6e\\x69\\x30\\x34\\x42\"\n\"\\x30\\x75\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\\x34\\x42\\x32\\x75\\x6e\\x69\\x30\\x34\\x42\\x33\\x75\\x6e\\x69\\x30\\x34\\x42\\x36\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\\x6e\\x69\\x30\\x34\\x42\\x39\\x75\\x6e\\x69\\x30\\x34\\x42\\x41\\x75\\x6e\\x69\\x30\\x34\\x42\\x42\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\\x43\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x43\\x75\\x6e\\x69\\x30\\x34\\x44\\x38\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x45\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\\x69\\x30\\x34\\x45\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x39\\x75\\x6e\\x69\\x30\\x34\\x45\\x45\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\\x45\\x75\\x6e\\x69\\x32\\x30\\x41\\x46\\x75\\x6e\\x69\\x32\\x31\\x32\\x36\\x75\\x6e\\x69\\x32\\x32\"\n\"\\x31\\x35\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\\x32\\x32\\x32\\x37\\x75\\x6e\\x69\\x32\\x32\\x32\\x38\\x75\\x6e\\x69\\x32\\x32\\x39\\x35\\x75\\x6e\"\n\"\\x69\\x32\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x75\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x75\\x70\\x73\\x69\\x6c\\x6f\"\n\"\\x6e\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\"\n\"\\x6f\\x6e\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x72\\x69\\x6e\\x67\\x75\\x74\\x69\\x6c\\x64\\x65\\x77\\x61\\x63\\x75\\x74\"\n\"\\x65\\x77\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x77\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x77\\x67\\x72\\x61\\x76\\x65\\x78\\x69\\x79\\x63\\x69\"\n\"\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\\x76\\x65\\x7a\\x61\\x63\\x75\\x74\\x65\\x7a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x7a\\x65\"\n\"\\x74\\x61\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\"\n\"\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x43\\x6f\\x70\\x79\"\n\"\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\"\n\"\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x4e\\x69\\x6d\\x62\"\n\"\\x75\\x73\\x20\\x53\\x61\\x6e\\x73\\x20\\x42\\x6f\\x6c\\x64\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x53\\x61\\x6e\\x73\\x00\\xa6\\x02\\x00\\x01\\x00\\x0c\\x00\\x19\"\n\"\\x00\\x31\\x00\\x36\\x00\\x3a\\x00\\x43\\x00\\x8e\\x00\\xe0\\x00\\xfa\\x00\\xff\\x01\\x23\\x01\\x27\\x01\\x4d\\x01\\x54\\x01\\x59\\x01\\x5e\\x01\\x66\\x01\\x6c\"\n\"\\x01\\x72\\x01\\x7a\\x01\\xe6\\x02\\x40\\x02\\x5a\\x02\\x66\\x02\\x72\\x02\\x7b\\x02\\x80\\x02\\xe4\\x03\\x25\\x03\\x44\\x03\\x60\\x03\\x80\\x03\\x87\\x03\\x8b\"\n\"\\x03\\x90\\x03\\x94\\x03\\x9b\\x03\\xa4\\x03\\xb2\\x03\\xbb\\x03\\xc2\\x03\\xc8\\x03\\xce\\x03\\xd3\\x03\\xf9\\x04\\x0e\\x04\\x18\\x04\\x28\\x04\\x3b\\x04\\x49\"\n\"\\x04\\x5a\\x04\\x67\\x04\\x87\\x04\\xa0\\x04\\xa4\\x04\\xa8\\x04\\xab\\x04\\xb3\\x04\\xc2\\x04\\xcf\\x04\\xd7\\x04\\xdf\\x04\\xe7\\x04\\xf3\\x04\\xf9\\x05\\x04\"\n\"\\x05\\x0f\\x05\\x16\\x05\\x1f\\x05\\x25\\x05\\x2b\\x05\\x4d\\x05\\x54\\x05\\xb3\\x05\\xb8\\x05\\xc0\\x06\\x06\\x06\\x3b\\x06\\x77\\x06\\xb1\\x06\\xe9\\x07\\x16\"\n\"\\x07\\x47\\x07\\x77\\x07\\x7b\\x07\\xa7\\x07\\xc2\\x07\\xc7\\x07\\xf1\\x08\\x1b\\x08\\x46\\x08\\x4c\\x08\\x67\\x08\\x73\\x08\\x9b\\x08\\xb7\\x08\\xbb\\x08\\xc4\"\n\"\\x08\\xdc\\x08\\xfb\\x09\\x00\\x09\\x1e\\x09\\x27\\x09\\x3f\\x09\\x5c\\x09\\x6c\\x09\\x88\\x09\\x9f\\x09\\xb9\\x09\\xd3\\x09\\xd6\\x09\\xef\\x0a\\x07\\x0a\\x17\"\n\"\\x0a\\x2e\\x0a\\x42\\x0a\\x57\\x0a\\x6c\\x0a\\x81\\x0a\\x94\\x0a\\xa8\\x0a\\xbc\\x0a\\xd0\\x0a\\xdd\\x0a\\xf0\\x0b\\x03\\x0b\\x15\\x0b\\x27\\x0b\\x39\\x0b\\x49\"\n\"\\x0b\\x53\\x0b\\x60\\x0b\\x70\\x0b\\x7f\\x0b\\x88\\x0b\\x96\\x0b\\xa1\\x0b\\xaf\\x0b\\xb9\\x0b\\xc5\\x0b\\xd2\\x0b\\xdf\\x0b\\xe4\\x0b\\xf1\\x0b\\xfd\\x0c\\x07\"\n\"\\x0c\\x12\\x0c\\x1d\\x0c\\x28\\x0c\\x33\\x0c\\x36\\x0c\\x3d\\x0c\\x47\\x0c\\x51\\x0c\\x5b\\x0c\\x65\\x0c\\x6f\\x0c\\x77\\x0c\\x80\\x0c\\x89\\x0c\\x92\\x0c\\x9b\"\n\"\\x0c\\xa4\\x0c\\xad\\x0c\\xb3\\x0c\\xb9\\x15\\xfb\\x12\\x06\\x45\\xfb\\x2a\\x05\\xd1\\x06\\x0e\\x15\\xf7\\x12\\xfb\\x2a\\x05\\xd1\\x06\\x45\\xf7\\x2a\\x05\\x0e\"\n\"\\x15\\xfb\\x04\\xce\\x07\\x8c\\x59\\x75\\x6d\\x5d\\x82\\x08\\x5d\\x07\\xd1\\x8d\\xc2\\xcb\\x88\\xd9\\x08\\xf2\\x07\\x0e\\x15\\x25\\x27\\xb1\\x1d\\xf8\\xb0\\x15\"\n\"\\x0b\\x45\\x1d\\xf7\\x4e\\xf7\\x0e\\x45\\x1d\\x0e\\xf8\\xa0\\x9c\\x15\\x73\\xa2\\x83\\x9b\\xa6\\x1a\\xf7\\xc0\\x07\\xf7\\x02\\x40\\xc3\\xfb\\x26\\xfb\\x26\\x3f\"\n\"\\x4d\\xfb\\x11\\x82\\x1e\\xf7\\x1b\\x06\\xc3\\x92\\xa2\\x9d\\xd0\\x1b\\xc1\\xa6\\x79\\x67\\x79\\x82\\x7c\\x7c\\x82\\x62\\x1d\\x20\\x79\\x57\\x54\\x2a\\x1a\\x2a\"\n\"\\xcc\\x4a\\xee\\xc7\\xc1\\xa4\\xbf\\xbd\\x1e\\x6f\\x8e\\x81\\x98\\x7b\\x1e\\xf7\\x2c\\x06\\x88\\x1d\\x0b\\xf8\\xa0\\xf7\\x76\\x15\\x8c\\x97\\x8b\\x90\\x92\\x1a\"\n\"\\xc1\\x83\\xbd\\x7e\\xb1\\x1e\\xed\\x67\\x34\\xc6\\xfb\\x01\\x1b\\xfb\\x2f\\x2c\\xfb\\x04\\xfb\\x49\\xfb\\x41\\xe9\\x21\\xf7\\x2d\\xf7\\x0d\\xed\\xcf\\xf6\\xaa\"\n\"\\x1f\\xfb\\x1e\\x06\\x60\\x7a\\x64\\x72\\x58\\x1b\\x63\\x6b\\x9c\\xa9\\x77\\x1f\\x7e\\x9f\\x86\\xa3\\x89\\xbe\\x08\\x8d\\xe8\\x15\\xde\\x94\\xae\\xb3\\xc9\\x1b\"\n\"\\xcb\\xb1\\x60\\x3b\\x92\\x1f\\x0b\\xf7\\xc1\\x54\\x1d\\x8c\\xfb\\x05\\x15\\xd8\\xbd\\x46\\x21\\x26\\x57\\x45\\x40\\x3f\\x58\\xd0\\xf3\\xf3\\xbe\\xd0\\xd7\\x1f\"\n\"\\x0b\\xf7\\x69\\x31\\x1d\\x0b\\xf8\\x37\\xf7\\xa2\\x15\\xf7\\x7b\\xf8\\x5f\\x05\\xfb\\x3c\\x06\\xfb\\x1f\\xfb\\xd6\\xfb\\x29\\xf7\\xd6\\x05\\xfb\\x3b\\x06\\xf7\"\n\"\\x86\\xfc\\x5f\\x05\\xfb\\xa2\\xf7\\x2a\\x07\\x0b\\x15\\x20\\x52\\x1d\\x15\\x58\\x63\\x64\\x58\\x59\\xb3\\x63\\xbd\\xbc\\xb4\\xb3\\xbc\\xbf\\x64\\xb2\\x59\\x1f\"\n\"\\x5b\\x04\\xa2\\x9d\\x79\\x73\\x74\\x78\\x78\\x75\\x73\\x78\\x9e\\xa2\\xa3\\x9e\\x9d\\xa3\\x1f\\x0b\\xfb\\x20\\xfc\\xb0\\xf7\\x20\\x0b\\xf7\\x2a\\xf7\\xdf\\x0b\"\n\"\\xf9\\x5f\\x46\\x1d\\x0b\\xf7\\x63\\x24\\x1d\\x2d\\x1d\\x06\\x0b\\x5c\\x1d\\xf7\\x2a\\x06\\x0b\\xfd\\x6d\\xf7\\x2a\\x06\\x0b\\xfb\\x2a\\xfb\\x26\\xf7\\x2a\\x06\"\n\"\\x0b\\xf8\\x8d\\xf8\\x02\\x15\\xf7\\x06\\x89\\x33\\xd0\\xfb\\x25\\x1b\\xfb\\x1d\\x36\\x46\\xfb\\x03\\x67\\x96\\x6c\\x9e\\x76\\x1f\\x9e\\x78\\x9c\\x82\\xbf\\x7a\"\n\"\\xf7\\x3b\\x57\\x18\\xae\\x80\\x97\\x80\\x75\\x1a\\x6a\\x64\\x77\\x4a\\x66\\x6f\\x91\\x98\\x79\\x1e\\x7c\\x96\\x85\\x96\\x85\\xa8\\x08\\xfb\\x1d\\x06\\xfb\\x0b\"\n\"\\x8f\\xe2\\x4e\\xf7\\x38\\x1b\\xd6\\xc4\\x9b\\xab\\xb3\\x1f\\xb3\\xab\\xa3\\xbd\\xc0\\x1a\\xd1\\x68\\xb8\\x44\\xa0\\x1e\\xfb\\x45\\xbe\\x05\\x64\\x97\\x81\\x93\"\n\"\\xa1\\x1a\\xa9\\xab\\x9f\\xbc\\xce\\xac\\x73\\x5a\\x8c\\x1e\\x0b\\xf9\\x5b\\xf8\\x1c\\x15\\xfb\\xb8\\xfb\\x11\\xf7\\x3a\\x06\\x87\\x62\\x81\\x72\\x75\\x71\\x08\"\n\"\\x5f\\x67\\x53\\x71\\x52\\x1b\\xfb\\x0e\\x35\\xf5\\xf7\\x2a\\xf7\\x31\\xd7\\xea\\xf7\\x14\\xbf\\xb7\\x7c\\x6e\\xac\\x1f\\xa0\\x79\\x96\\x7a\\x98\\x65\\x08\\xf7\"\n\"\\x21\\x06\\xf7\\x2b\\x79\\xfb\\x0e\\xe9\\xfb\\x44\\x1b\\xfb\\x66\\xfb\\x23\\xfb\\x2f\\xfb\\x77\\xfb\\x71\\xf7\\x24\\xfb\\x35\\xf7\\x59\\xed\\xcd\\xae\\xdd\\xc3\"\n\"\\x1f\\x9d\\x2b\\x05\\xe5\\x06\\x0b\\xf8\\x9e\\xf7\\xe6\\x15\\xf7\\x18\\x81\\x34\\xda\\xfb\\x1c\\x1b\\xfb\\x36\\x2e\\x21\\xfb\\x4c\\xfb\\x46\\xe8\\x23\\x7c\\x1d\"\n\"\\x0b\\xca\\x9a\\x1d\\xfb\\xe1\\xf7\\x20\\xf7\\xfe\\x89\\x1d\\x0b\\xf7\\x7a\\x5c\\x1d\\xf8\\x87\\xf7\\x11\\xfb\\xf1\\x06\\x0b\\x15\\x2d\\x1d\\x06\\xf9\\x6d\\xbf\"\n\"\\x1d\\x0b\\xf8\\x3f\\xfb\\x20\\x0b\\xf7\\x7a\\xf7\\xb5\\x15\\xf7\\x40\\x06\\xcc\\xa7\\x71\\x4f\\x1f\\x6d\\x07\\x8a\\x78\\x8b\\x79\\x80\\x1a\\x46\\x8f\\x76\\x9d\"\n\"\\x68\\x1e\\xf7\\x35\\xa6\\x06\\x74\\x98\\x82\\x9a\\xab\\x1a\\x87\\xf7\\x6b\\x87\\x95\\x2e\\xb3\\x08\\xdd\\xab\\xb4\\xc6\\xe4\\x1a\\xc5\\x77\\xc0\\x68\\xaf\\x1e\"\n\"\\xad\\x6a\\x5d\\x9b\\x4d\\x1b\\xfc\\x1b\\x32\\x1d\\xf8\\x32\\x04\\xf7\\x52\\xf7\\x49\\x07\\xb6\\x9c\\x87\\x7c\\x9e\\x1f\\x9d\\x7c\\x94\\x72\\x69\\x1a\\x68\\x82\"\n\"\\x6f\\x79\\x7c\\x1e\\x7d\\x7a\\x78\\x86\\x60\\x1b\\x0b\\xf7\\x52\\x24\\x1d\\xfb\\x20\\xfb\\xdc\\x06\\x35\\x9b\\x56\\xaf\\x67\\x1e\\x63\\xb3\\xcc\\x77\\xe1\\x1b\"\n\"\\xe5\\xcf\\xa2\\xb9\\xb2\\x1f\\xaa\\xaf\\x97\\xb8\\xe0\\x1a\\xf7\\xdc\\xfb\\x20\\xfb\\xd6\\x07\\x54\\x85\\x74\\x79\\x77\\x1e\\x78\\x79\\x6f\\x80\\x6c\\x1b\\x6c\"\n\"\\x6e\\x96\\x9d\\x7a\\x1f\\x78\\x9f\\x85\\xa1\\xc4\\x1a\\x0b\\xca\\x24\\x1d\\xfc\\xb0\\xf7\\x20\\xf7\\xb3\\x07\\xdd\\xb4\\xb4\\xdd\\x9a\\x95\\xb9\\x1d\\x88\\x8b\"\n\"\\x85\\x1b\\x4b\\x54\\x61\\x42\\x6c\\x1f\\xf5\\x07\\x0b\\xcc\\x16\\xf7\\x2a\\xe4\\x06\\xf7\\xb5\\xf7\\xfa\\x05\\xfc\\x53\\x48\\x1d\\x30\\x07\\xfb\\xb5\\xfb\\xfc\"\n\"\\x05\\xf8\\x57\\xfb\\x2a\\x07\\x0b\\xd1\\x16\\xf7\\x20\\xd2\\x06\\xf7\\x57\\xf7\\x92\\x05\\xfb\\xd9\\xf7\\x20\\xf8\\xb0\\xfb\\x20\\x44\\x07\\xfb\\x57\\xfb\\x92\"\n\"\\x05\\xf7\\xd9\\xfb\\x20\\x07\\x0b\\xf7\\xcd\\xf8\\xa5\\x67\\x1d\\x0b\\xf9\\x7b\\x25\\x1d\\xf8\\x15\\x9d\\x1d\\x0b\\xf9\\x89\\x20\\x1d\\xf7\\x63\\xf9\\x6d\\x64\"\n\"\\x1d\\x0b\\x15\\xfb\\x02\\xfb\\x0e\\xf7\\x02\\x06\\x0b\\x15\\xfc\\x3b\\xfd\\x73\\x05\\xe2\\x06\\xf8\\x3b\\xf9\\x73\\x05\\x0b\\xec\\x05\\x3d\\x06\\xf2\\xfb\\x2a\"\n\"\\x05\\x0e\\xf7\\x2a\\xf9\\x6d\\xfb\\x2a\\x0b\\x7f\\x89\\x86\\x7c\\x1f\\x0b\\x15\\xd2\\xba\\x47\\x23\\x0b\\xe5\\xfb\\x83\\x05\\x0b\\xf7\\xc1\\xf8\\xa5\\x15\\xb5\"\n\"\\x1d\\xfb\\xe0\\x06\\x36\\xb8\\x61\\xe7\\xab\\xa2\\x8e\\x93\\xa5\\x1e\\xed\\x07\\x89\\x7d\\x84\\x8a\\x80\\x1b\\x66\\x82\\x96\\xbb\\x1f\\xf7\\xba\\xd9\\x07\\x0b\"\n\"\\x1f\\x43\\xa4\\x05\\x98\\x67\\x8a\\x8b\\x79\\x1b\\x53\\x68\\x5d\\x3d\\x87\\x1f\\xca\\x06\\xab\\x90\\x0b\\x99\\x1d\\xf8\\xb5\\xf7\\x11\\xfc\\x1f\\x06\\x0b\\x63\"\n\"\\x1d\\xd8\\x06\\xdd\\xef\\xdd\\x27\\x05\\xd8\\x06\\x24\\xf7\\x2a\\x05\\x0e\\x15\\xd8\\xbd\\x46\\x21\\x26\\x57\\x45\\x40\\x3f\\x58\\xd0\\xf3\\xf3\\xbe\\xd0\\xd7\"\n\"\\x1f\\x0e\\x68\\x5d\\x3d\\x87\\x1f\\xca\\x06\\xab\\x90\\x96\\x98\\xa3\\x1b\\x0b\\xfb\\x2a\\x05\\xd7\\x06\\xdd\\xef\\xdd\\x27\\x05\\xd9\\x06\\x24\\xf7\\x2a\\x05\"\n\"\\x0e\\xf7\\x1e\\xf0\\xea\\xf7\\x17\\xf7\\x17\\x27\\xea\\x59\\x1d\\x0b\\xf8\\xb9\\x15\\xfb\\x39\\x26\\xfb\\x01\\xfb\\x45\\xfb\\x46\\xf0\\xfb\\x00\\xf7\\x3a\\xf7\"\n\"\\x39\\xf1\\xf7\\x00\\xf7\\x42\\xf7\\x4b\\x28\\xf6\\xfb\\x3d\\x1f\\x0b\\xf7\\xdf\\x15\\xfb\\xdf\\xf7\\x2a\\xf9\\x6d\\xfb\\x2b\\xfb\\xa5\\xfb\\xb4\\xf7\\xa5\\xfb\"\n\"\\x2a\\xfd\\x6d\\x2e\\x1d\\x07\\x0b\\x77\\x95\\x1d\\x0b\\xb4\\x1d\\x6f\\x0b\\xbf\\x1d\\x0e\\xfb\\x1f\\x1f\\xfb\\x34\\xf7\\xa9\\x0b\\x46\\x1e\\x47\\xca\\xdd\\x6a\"\n\"\\xf3\\x1b\\xf3\\xdd\\xac\\xcf\\xca\\x1f\\x0b\\xa9\\x9b\\xaa\\x9b\\xb3\\x1b\\xc4\\xa6\\x70\\x44\\x9b\\x1f\\x0b\\xf9\\x6d\\x15\\xfb\\x2a\\xfd\\x6d\\x0b\\x15\\xfb\"\n\"\\xbf\\x3c\\xf7\\xbf\\x06\\x0b\\xfb\\x1a\\x06\\x45\\x7a\\x6f\\x70\\x0b\\x1f\\xd2\\x71\\x05\\x83\\xa0\\x9e\\x87\\x9a\\x1b\\xc6\\x0b\\xf8\\xf0\\xfb\\x2a\\x06\\x0e\"\n\"\\x15\\xb3\\xa0\\x9b\\xa3\\xb5\\x1a\\xcd\\x51\\xbc\\x0b\\x1f\\x78\\x81\\x8b\\x8b\\x46\\x80\\x53\\x81\\x18\\x0b\\x15\\xfb\\x00\\xfb\\x2a\\x05\\x0b\\x15\\xfb\\x20\"\n\"\\xfd\\x6d\\xf7\\x20\\x06\\x0b\\x26\\xfb\\x00\\xfb\\x46\\x0b\\xf7\\x20\\xf7\\xae\\x06\\x0b\\x15\\x38\\xc0\\x06\\xa7\\x97\\x99\\xa5\\x98\\xc1\\x1d\\x6d\\x6e\\x8c\"\n\"\\x76\\x1b\\x2e\\x5e\\x5f\\x30\\x1f\\x4a\\x3f\\x2e\\xd7\\xfc\\x48\\xf7\\x20\\xf8\\x48\\xde\\x07\\x0b\\xf8\\x24\\xf8\\xb0\\x69\\x1d\\x0b\\x15\\x38\\x07\\xca\\x64\"\n\"\\x60\\xa8\\x52\\x1b\\x5b\\x56\\x73\\x64\\x66\\x1f\\x55\\x53\\x6f\\x3d\\x2c\\x1a\\xfb\\x3a\\xe3\\xfb\\x06\\xf7\\x15\\xc5\\xae\\x9e\\xc6\\xbc\\x1e\\x42\\x07\\x4a\"\n\"\\x5d\\x5e\\x49\\x59\\x6c\\xa1\\xb4\\x80\\x1e\\xfb\\x24\\x06\\x8c\\x61\\x9a\\x6e\\xb0\\x6d\\x08\\x68\\xb6\\xc6\\x7a\\xd7\\x1b\\xf7\\x30\\xe9\\xd6\\xf7\\x11\\x1f\"\n\"\\xf8\\xc2\\x07\\xfb\\x8a\\xfb\\x00\\x15\\xcd\\xbc\\x42\\x27\\x29\\x5c\\x48\\x45\\x4e\\x60\\xce\\xed\\xf1\\xb6\\xd2\\xca\\x1f\\x0b\\x6b\\x1d\\xf7\\x77\\x0b\\x40\"\n\"\\x1d\\xf7\\xe1\\xe8\\x67\\x1d\\x0b\\x15\\x25\\x37\\x69\\x48\\x4d\\x1f\\x4a\\x45\\x66\\x25\\xfb\\x01\\x1a\\xfb\\x01\\xb0\\x24\\xcc\\x5a\\x1d\\xca\\xce\\xb2\\xf5\"\n\"\\xf2\\x1a\\xf7\\x06\\x66\\xf2\\x4a\\xd0\\x1e\\xd0\\x4b\\x3b\\xab\\x21\\x1b\\x8c\\xfb\\x14\\x15\\xf7\\x0f\\xd9\\x27\\xfb\\x32\\xfb\\x2a\\x3a\\x27\\xfb\\x0c\\xfb\"\n\"\\x0e\\x3c\\xef\\xf7\\x2e\\xf7\\x2e\\xda\\xef\\xf7\\x0e\\x1f\\x0b\\x16\\xf7\\x20\\xf9\\x6d\\xfb\\x20\\xfb\\x97\\x06\\xc1\\x68\\x5d\\xa4\\x47\\x1b\\xfb\\x15\\x29\"\n\"\\xfb\\x10\\xfb\\x37\\x42\\xa1\\x41\\xaf\\x57\\x1f\\x56\\xb0\\xcd\\x6a\\xcd\\x1b\\xcf\\xb9\\xa3\\xc1\\xae\\x1f\\xfb\\x0a\\xf8\\x0d\\xa8\\x1d\\xf0\\xbb\\xd0\\xd1\"\n\"\\x1f\\x0b\\xd8\\x16\\xf7\\xb1\\x06\\xf7\\x03\\xd1\\xa5\\xc6\\xbd\\x1f\\xc4\\xcf\\xaa\\xed\\xf7\\x06\\x1a\\xf7\\x05\\x6c\\xed\\x52\\xd0\\x1e\\xc6\\x59\\x46\\xa4\"\n\"\\xfb\\x04\\x1b\\xfb\\xb1\\x06\\xf7\\x2a\\xfc\\xf0\\x15\\xf8\\x73\\xf7\\x1b\\x07\\xf7\\x05\\xc3\\x3c\\xfb\\x35\\xfb\\x34\\x53\\x3c\\xfb\\x05\\x1f\\x0b\\xf8\\x42\"\n\"\\xf7\\x2c\\x15\\xfb\\x2c\\xf8\\xac\\xf7\\x11\\xfc\\x16\\xf7\\x51\\xf7\\xe7\\xf7\\x11\\xfb\\xe7\\xf7\\x39\\xf8\\x02\\xf7\\x11\\xfd\\x3e\\x07\\xfb\\x9b\\xfd\\x6d\"\n\"\\x05\\xf7\\x2d\\x06\\xc0\\xf7\\x2c\\x05\\xf7\\x73\\xf7\\x11\\x15\\xfb\\x49\\x06\\xf7\\x06\\xf7\\xdb\\x05\\xce\\x06\\x0b\\xb0\\x79\\x1b\\x82\\x84\\x83\\x81\\x83\"\n\"\\x8e\\x88\\x9c\\x7c\\x1f\\xba\\x63\\xad\\x5f\\xb4\\x42\\x08\\x77\\x96\\x91\\x84\\x92\\x1b\\x93\\x90\\x8f\\x93\\x90\\x1f\\xc6\\xf0\\xa1\\xa7\\xc7\\xbd\\x08\\x94\"\n\"\\x93\\x8d\\x8f\\x92\\x1a\\x95\\x84\\x93\\x82\\x85\\x6a\\x7f\\x83\\x7b\\x1e\\x0b\\x61\\x1d\\x3c\\x3c\\x51\\x5a\\x49\\x62\\x9c\\x71\\xb2\\x77\\x1e\\x5a\\x70\\x76\"\n\"\\x6b\\x59\\x1a\\x3a\\xc9\\x53\\xe4\\xe4\\xc9\\xc3\\xdc\\xbd\\x76\\xab\\x5a\\xa6\\x1e\\x3b\\xf7\\x1a\\x15\\xb0\\xa5\\x75\\x6a\\x6a\\x71\\x74\\x0b\\x85\\xda\\x82\"\n\"\\xe8\\x1e\\x87\\xb5\\x89\\xa0\\x98\\x1a\\x9d\\x91\\x95\\x97\\x91\\x8d\\x8a\\x80\\x96\\x1e\\x81\\x95\\x97\\x86\\x98\\x1b\\xa6\\xa0\\xa1\\xa7\\xa9\\x6f\\xa3\\x68\"\n\"\\x60\\x6c\\x6c\\x51\\x7d\\x1f\\x7b\\x4b\\x86\\x46\\xfb\\x45\\x1a\\x0b\\xbe\\x16\\xf7\\x23\\x06\\xce\\x8c\\xbd\\xab\\xa9\\xc7\\xf7\\xb0\\xf9\\x10\\x18\\xfb\\x2f\"\n\"\\x06\\xfb\\x2e\\xfc\\x05\\xfb\\x2f\\xf8\\x05\\x05\\xfb\\x2f\\x06\\xf7\\x7d\\xfc\\x9e\\x78\\x63\\x7d\\x67\\x89\\x89\\x73\\x87\\x19\\xfb\\x15\\x06\\x0b\\xf7\\x76\"\n\"\\x76\\x1d\\xf7\\xa4\\x15\\xf7\\x44\\xf7\\xa0\\x05\\xfb\\x3c\\x06\\x34\\xfb\\x37\\x33\\xf7\\x37\\x05\\xfb\\x3c\\x06\\xf7\\x44\\xfb\\xa0\\xfb\\x48\\xfb\\xa4\\x05\"\n\"\\xf7\\x3c\\x06\\xe7\\xf7\\x3c\\xe6\\xfb\\x3c\\x05\\xf7\\x3c\\x06\\x0e\\xf7\\x98\\x15\\xf7\\x4f\\x06\\xf7\\x1a\\xe1\\xea\\xf7\\x28\\xf7\\x26\\x38\\xdb\\xfb\\x2c\"\n\"\\x1f\\xfb\\xd6\\x32\\x1d\\xf8\\x15\\xa1\\x1d\\xf7\\xe4\\x7a\\x1d\\x0b\\x15\\xfb\\x04\\xfc\\x1d\\xfb\\x0b\\xf8\\x1d\\x05\\xfb\\x2e\\x06\\xf7\\x5d\\xfc\\xc6\\x81\"\n\"\\x44\\x74\\x7c\\x30\\x8e\\x19\\xfb\\x05\\x07\\xe7\\x98\\x8c\\x92\\xa7\\x1f\\xc0\\x9e\\x9f\\xa1\\xa3\\xd1\\xc5\\x1d\\x0b\\xf7\\x74\\xf7\\x88\\x15\\xd6\\xd9\\xf7\"\n\"\\x83\\xfb\\xd6\\x05\\xf7\\x47\\x06\\xfb\\xd6\\xf8\\x33\\xf7\\xb7\\xf7\\xce\\x05\\xfb\\x45\\x06\\xfb\\xb1\\xfb\\xd4\\x05\\xf7\\xd4\\xfb\\x2a\\xfd\\x6d\\xf7\\x2a\"\n\"\\x07\\x0e\\xf9\\x6d\\x15\\xfc\\xaf\\x07\\x54\\x6e\\x6d\\x57\\x52\\x73\\xa7\\xce\\x1e\\xd1\\xfb\\x2a\\x43\\x07\\x3f\\x9d\\x5c\\xb6\\x63\\x1e\\x65\\xb5\\xc3\\x77\"\n\"\\xd0\\x1b\\xf7\\x29\\xe0\\xd8\\xf7\\x1c\\x1f\\xf8\\xaf\\x07\\x0b\\x83\\x1d\\xf9\\xcb\\x58\\x1d\\xf7\\x34\\xf7\\x17\\xe6\\xdc\\xf7\\x15\\x98\\x1f\\x5e\\x1d\\x53\"\n\"\\x1b\\x44\\x61\\xca\\xf5\\xbf\\x95\\xba\\x9c\\xab\\x1f\\x5b\\x1d\\x0b\\xcd\\x9a\\x1d\\xfc\\xbb\\xf7\\x20\\xf8\\xd8\\x89\\x1d\\x0b\\x06\\xf7\\x2a\\xfb\\x11\\x15\"\n\"\\xf7\\x37\\x06\\xd1\\xaf\\x6f\\x55\\x54\\x67\\x6f\\x45\\x1f\\xfb\\x37\\x06\\xfb\\x11\\x04\\xf7\\x47\\x06\\xd4\\xb1\\x6b\\x4c\\x4d\\x65\\x6b\\x42\\x1f\\xfb\\x47\"\n\"\\x06\\x0e\\xf7\\x5b\\xf7\\xde\\x15\\xf8\\x23\\xfb\\x20\\xfd\\x6d\\xf7\\x20\\xf7\\x45\\x07\\xc3\\xc8\\xf7\\x15\\xfb\\x82\\x05\\xf7\\x38\\xa7\\x1d\\x0b\\xf9\\x7b\"\n\"\\x82\\x1d\\x57\\x1d\\x75\\x91\\xa3\\x55\\x9c\\x1d\\x0b\\x15\\x2a\\xfb\\x0e\\xec\\x06\\xf7\\x5b\\xf7\\x0e\\x15\\x2a\\xfb\\x0e\\xec\\x06\\x2a\\xf7\\xa0\\x15\\x25\"\n\"\\x31\\xb1\\x1d\\x15\\xfb\\x20\\xfc\\xef\\x06\\x6c\\x80\\x80\\x6d\\x82\\x84\\x8c\\x8e\\x82\\x1e\\xfb\\x04\\x07\\x88\\xa6\\xad\\x89\\xa1\\x1b\\xe2\\xaf\\xaf\\xe3\"\n\"\\x1f\\x0b\\xf8\\x8f\\x55\\x1d\\x0e\\xfc\\x82\\x07\\x33\\x5e\\x61\\x2d\\x2d\\x5e\\xb5\\xe3\\x1e\\xf8\\x82\\xfb\\x2a\\xfc\\x82\\x07\\x39\\xa1\\x51\\xbc\\x5f\\x1e\"\n\"\\x5b\\xc0\\xd8\\x71\\x0b\\x15\\x53\\x06\\x5d\\x83\\x74\\x56\\x1d\\x0e\\xf9\\x6a\\x15\\xfb\\x2a\\xfb\\x66\\x06\\xb4\\xfb\\xc9\\x05\\xce\\x06\\xb5\\xf7\\xc9\\x05\"\n\"\\xfc\\x06\\x04\\x33\\x1d\\x0b\\xfb\\x3d\\xf7\\x6d\\x15\\x3a\\x63\\x5d\\x44\\x5c\\x6e\\xa4\\xb3\\xb5\\xa1\\x9f\\xc5\\x97\\x1e\\xbb\\x94\\xb0\\x92\\x91\\x8d\\x9b\"\n\"\\x93\\x19\\x0b\\x07\\xf7\\x0c\\x4a\\xce\\xfb\\x08\\x42\\x5a\\x71\\x4e\\x63\\x1e\\xd9\\x07\\x0b\\x07\\x93\\x79\\x7a\\x8e\\x79\\x1b\\x4a\\x52\\x55\\x4e\\x65\\xa6\"\n\"\\x74\\xb7\\xba\\xb9\\xa3\\xb3\\xa7\\x1f\\xa0\\xa8\\x93\\xa9\\xbc\\x1a\\x0b\\x6e\\x4f\\x69\\x1f\\xf7\\x0a\\x6f\\x4a\\x1d\\x29\\x5b\\x47\\x45\\x44\\x5c\\xcf\\xef\"\n\"\\xf1\\xba\\xcf\\xd2\\x1f\\x0e\\x06\\xfb\\x97\\xfd\\x6d\\x05\\xf7\\x2d\\x06\\xbc\\xf7\\x27\\x05\\xf7\\x7c\\xf7\\x11\\x15\\xfb\\x52\\x06\\xea\\xf7\\xb1\\x05\\x0b\"\n\"\\x1b\\x57\\x6b\\x9f\\xab\\x1f\\xf7\\x71\\xfb\\x20\\xfb\\x71\\x07\\x57\\x96\\x66\\xa1\\x71\\x1e\\x6c\\xa8\\xc0\\x78\\xc9\\x1b\\x0b\\x90\\x1d\\x0e\\xf7\\x6e\\x15\"\n\"\\xf7\\x3b\\xfb\\x26\\x05\\xf7\\x06\\x07\\x26\\xe4\\xf0\\xe4\\x05\\xf7\\x09\\x07\\xfb\\x3b\\xfb\\x29\\x05\\x0b\\xfb\\x11\\xdb\\x07\\x8d\\x59\\x71\\x6e\\x53\\x81\"\n\"\\x08\\x5d\\x07\\xe3\\x93\\xbe\\xc3\\x87\\xe2\\x08\\xf7\\x01\\x07\\x0b\\xb8\\x1d\\x31\\xb4\\xfb\\x01\\x1b\\xfb\\x62\\xfb\\x14\\xfb\\x27\\xfb\\x80\\x0b\\x39\\xce\"\n\"\\x49\\xde\\xdc\\xcf\\xcd\\xdb\\xdf\\x49\\xcd\\x37\\x1f\\x3b\\x04\\xb3\\xaa\\x6c\\x64\\x65\\x6b\\x6c\\x0b\\x15\\xf7\\x00\\xf7\\x2a\\x05\\x3e\\x06\\x39\\x2a\\x39\"\n\"\\xec\\x05\\x3e\\x06\\xf2\\xfb\\x2a\\x05\\x0e\\x06\\x30\\xf7\\xa5\\x05\\xfb\\x2c\\x06\\xf7\\x07\\xfb\\xe5\\xfb\\x32\\xfc\\x1c\\x05\\xf7\\x32\\x06\\x0b\\x5f\\x1b\"\n\"\\x5d\\x72\\xa0\\xb8\\x85\\x1f\\x53\\x81\\x06\\x3f\\xc3\\x52\\xd7\\xd6\\xc4\\xc4\\xd6\\x1e\\x0b\\xf7\\x50\\xf9\\x6d\\x15\\xfb\\x1e\\xfb\\x16\\x06\\xb3\\xfb\\x15\"\n\"\\x05\\xc3\\x06\\xb5\\xf7\\x15\\x05\\x0b\\x07\\xf8\\x7d\\xfb\\x4a\\x05\\xf7\\x03\\x07\\xfc\\x12\\xf7\\x17\\xf8\\x12\\xf7\\x19\\x05\\x0e\\xd9\\x2d\\xfb\\x25\\x3f\"\n\"\\x78\\x48\\x69\\x5e\\x1e\\x77\\x71\\x76\\x7a\\x56\\x69\\x08\\xfb\\x11\\x0b\\xf7\\xce\\x15\\xf7\\xf1\\xf7\\x11\\xfb\\xf1\\xf7\\x39\\xf8\\x0d\\xf7\\x11\\xfc\\xa3\"\n\"\\xfd\\x6d\\x0b\\xf8\\xb0\\x15\\xfc\\xb0\\xf7\\x20\\xf7\\xd8\\x07\\xcb\\xb7\\xb5\\xd0\\xc7\\xa9\\x6a\\x4b\\x1e\\x0b\\xc0\\x1d\\xfb\\x0d\\x04\\xfc\\x78\\xfb\\x0b\"\n\"\\xf8\\x78\\x06\\x0b\\x1f\\x78\\x57\\x05\\x75\\xcc\\xa8\\x85\\xb8\\x1b\\xde\\xb8\\xac\\xc7\\xb7\\x6e\\xa6\\x5c\\x0b\\xf8\\xf0\\x15\\xf7\\x69\\xf7\\x11\\xfc\\xdc\"\n\"\\xfb\\x11\\xf7\\x71\\xfc\\xf0\\xf7\\x2a\\x06\\x0b\\xf7\\xaf\\x06\\xf5\\xd9\\xd4\\xef\\xee\\x41\\xcf\\xfb\\x02\\x1f\\xfb\\x23\\xf7\\x5c\\x0b\\x1b\\x38\\x5b\\xac\"\n\"\\xc6\\x1f\\xf7\\xb5\\xfb\\x2a\\xfb\\xb5\\x07\\xfb\\x1f\\xf2\\x3a\\x0b\\xf8\\x79\\x15\\xfb\\x47\\xf7\\x74\\xfb\\x1a\\xfb\\x74\\xfb\\x47\\xfb\\x08\\xf7\\x47\\x0b\"\n\"\\x04\\xf7\\x6f\\xf7\\x20\\x07\\xdb\\xb0\\x68\\x41\\x40\\x66\\x68\\x3b\\x1f\\x0e\\x94\\x89\\x87\\x97\\x1f\\xd2\\x71\\x05\\x83\\x0b\\xfb\\x2a\\xfb\\xa5\\xfb\\xb5\"\n\"\\xf7\\xa5\\xfb\\x2a\\x32\\x1d\\x0b\\x15\\xf7\\x06\\xf7\\x1c\\x07\\xa9\\xa0\\x73\\x6a\\x6a\\x76\\x73\\x6d\\x1f\\x0b\\xfb\\x27\\xfb\\x25\\xfb\\x5b\\x3a\\xa1\\x46\"\n\"\\xb5\\x58\\x1e\\xa1\\x70\\x0b\\x9f\\x7d\\x76\\x74\\x72\\x79\\x6b\\x6f\\x0b\\x06\\xfb\\x59\\xf7\\xe4\\xf7\\x4c\\xf7\\x60\\x05\\xfb\\x33\\x06\\x0b\\x4a\\x1d\\x29\"\n\"\\x5b\\x47\\x45\\x45\\x5b\\xd0\\xee\\x0b\\x73\\x76\\x94\\x9a\\x7e\\x1e\\x80\\x99\\x86\\x9c\\x8a\\xad\\x08\\x0b\\xfb\\x20\\xfc\\x3f\\xfb\\x41\\x3a\\x1d\\x06\\x0e\"\n\"\\xfa\\x7f\\xf7\\xcb\\x15\\xfe\\x86\\x23\\xfa\\x86\\x06\\x0e\\x06\\xfb\\x04\\xf7\\xc1\\xe6\\xf7\\x83\\x05\\xfb\\x23\\x06\\x0b\\x15\\xfb\\x4f\\x06\\x99\\x9c\\x91\"\n\"\\x91\\x93\\x92\\x91\\x90\\x0b\\xd9\\xe8\\xb5\\x1d\\x0b\\x7b\\x76\\x1b\\x84\\x77\\x8e\\x8e\\x84\\x1f\\x44\\xa4\\x05\\x0b\\x08\\x73\\xbc\\x88\\x93\\xa0\\x1a\\xbf\"\n\"\\xb4\\xb1\\xc4\\x0b\\x06\\xa9\\x28\\x05\\xb3\\x06\\xab\\xee\\x05\\x0e\\xc7\\xba\\xa8\\x70\\x60\\x1e\\xfb\\xfc\\xf7\\x20\\x0b\\xf8\\x99\\xdc\\x15\\xfc\\x7d\\x30\"\n\"\\xf8\\x7d\\x06\\x0b\\x9f\\x1b\\xa9\\x9f\\x7d\\x76\\x74\\x72\\x79\\x6b\\x0b\\x3d\\xf7\\x25\\xfb\\x20\\xfb\\x25\\x46\\x2e\\xd0\\x0b\\x64\\x1d\\x0e\\x71\\xa2\\xac\"\n\"\\xac\\xa5\\xa1\\x0b\\x86\\xca\\x7e\\xb3\\x6c\\xb4\\x08\\xd5\\x53\\x0b\\x8a\\x88\\x9e\\x1e\\xf7\\x22\\x07\\x8c\\x83\\x0b\\x16\\xf7\\x20\\xf7\\x77\\xf7\\x57\\xfb\"\n\"\\x77\\x0b\\x1a\\x4f\\xc1\\x68\\xea\\xa7\\x9e\\x8d\\x92\\x0b\\xf7\\x20\\xf7\\xd8\\x07\\xc9\\xb8\\xb7\\xca\\x0b\\x15\\xfc\\xec\\x46\\xf8\\xec\\x06\\x0e\\xf7\\x2a\"\n\"\\xf8\\xf0\\xf7\\x8d\\xf7\\x11\\x0b\\x04\\xfb\\x20\\xfb\\x11\\xf7\\x20\\x06\\x0b\\x15\\xfc\\x78\\xfb\\x0b\\xf8\\x78\\x06\\x0b\\x98\\x8a\\x89\\x99\\x1e\\xf4\\x07\"\n\"\\x8d\\x0b\\x1f\\x9a\\x7f\\x94\\x78\\x75\\x1a\\x64\\x0b\\xad\\xbb\\x6f\\xcf\\x1b\\xf7\\x16\\xeb\\x0b\\x06\\x30\\xfb\\xa5\\x05\\x0b\\xf7\\x72\\xf9\\x13\\x18\\x0b\"\n\"\\x01\\x00\\x01\\xe3\\x01\\x05\\x00\\x01\\x0a\\x02\\x01\\x40\\x03\\x01\\x87\\xff\\x02\\x87\\xa0\\x02\\x8e\\x02\\x00\\x01\\x00\\x02\\x00\\x03\\x00\\x09\\x00\\x22\"\n\"\\x00\\x6a\\x00\\xec\\x01\\x50\\x01\\xde\\x01\\xe4\\x02\\x13\\x02\\x43\\x02\\x6c\\x02\\x8a\\x02\\xa7\\x02\\xab\\x02\\xb3\\x02\\xc5\\x03\\x33\\x03\\x4b\\x03\\x91\"\n\"\\x03\\xf8\\x04\\x23\\x04\\x6c\\x04\\xd6\\x05\\x01\\x05\\x6a\\x05\\xca\\x05\\xd6\\x05\\xfb\\x06\\x0a\\x06\\x12\\x06\\x30\\x06\\x74\\x07\\x4c\\x07\\x50\\x07\\x53\"\n\"\\x07\\x57\\x07\\x5b\\x07\\x5f\\x07\\x6f\\x07\\x74\\x07\\x77\\x07\\x7a\\x07\\x7e\\x07\\x81\\x07\\x85\\x07\\x89\\x07\\x8d\\x07\\x92\\x07\\x95\\x07\\xfb\\x07\\xff\"\n\"\\x08\\x03\\x08\\x07\\x08\\x0b\\x08\\x29\\x08\\x2e\\x08\\x31\\x08\\x35\\x08\\x39\\x08\\x4e\\x08\\x5c\\x08\\x71\\x08\\x91\\x08\\x98\\x08\\xb5\\x08\\xb9\\x08\\xfc\"\n\"\\x09\\x00\\x09\\x06\\x09\\x0a\\x09\\x0f\\x09\\x13\\x09\\x17\\x09\\x1e\\x09\\x24\\x09\\x28\\x09\\x2b\\x09\\x62\\x09\\x66\\x09\\x6a\\x09\\xa1\\x09\\xe5\\x09\\xea\"\n\"\\x09\\xee\\x09\\xf3\\x09\\xf7\\x09\\xfc\\x0a\\x01\\x0a\\x06\\x0a\\x0a\\x0a\\x0f\\x0a\\x62\\x0a\\x6e\\x0a\\xc1\\x0b\\x0e\\x0b\\x2e\\x0b\\x85\\x0c\\x1e\\x0c\\x23\"\n\"\\x0c\\x60\\x0c\\xc0\\x0d\\x6b\\x0d\\xd2\\x0d\\xd7\\x0e\\x10\\x0e\\x2f\\x0e\\x35\\x0e\\x3c\\x0e\\x45\\x0e\\x4e\\x0e\\x5b\\x0e\\x6a\\x0e\\x89\\x0e\\x8b\\x0e\\xb6\"\n\"\\x0e\\xcf\\x0e\\xd5\\x0e\\xe0\\x0e\\xeb\\x0f\\x0b\\x0f\\x1a\\x0f\\x7e\\x0f\\xc7\\x0f\\xce\\x0f\\xd4\\x0f\\xdc\\x0f\\xe2\\x0f\\xea\\x0f\\xf2\\x0f\\xfa\\x10\\x00\"\n\"\\x10\\x09\\x10\\x1e\\x10\\x26\\x10\\x4e\\x10\\x61\\x10\\x65\\x10\\x6a\\x10\\xdd\\x11\\x05\\x11\\x0a\\x11\\x60\\x11\\x98\\x11\\x9d\\x11\\xa0\\x11\\xc1\\x11\\xc5\"\n\"\\x12\\x45\\x12\\xaa\\x12\\xb3\\x12\\xc2\\x13\\x0c\\x13\\x42\\x13\\x45\\x13\\x93\\x13\\xba\\x13\\xe1\\x13\\xf3\\x14\\x06\\x14\\x1a\\x14\\x46\\x14\\x63\\x14\\x75\"\n\"\\x14\\xb7\\x15\\x4e\\x15\\x5c\\x15\\xd1\\x15\\xff\\x16\\x08\\x16\\x8e\\x16\\x97\\x16\\x9f\\x16\\xa7\\x16\\xb0\\x16\\xb9\\x16\\xe0\\x17\\x1d\\x17\\x26\\x17\\x2e\"\n\"\\x17\\x36\\x17\\x3e\\x17\\x43\\x17\\x4b\\x17\\x4d\\x17\\x55\\x17\\x73\\x17\\x7d\\x17\\x86\\x17\\x8f\\x17\\x99\\x17\\xc3\\x17\\xcb\\x17\\xd4\\x17\\xdd\\x17\\xe6\"\n\"\\x17\\xef\\x17\\xf5\\x17\\xfc\\x18\\x05\\x18\\x0d\\x18\\x16\\x18\\x1f\\x18\\x28\\x18\\x31\\x18\\x47\\x18\\x9c\\x18\\xa4\\x18\\xad\\x18\\xb6\\x18\\xb9\\x18\\xbe\"\n\"\\x18\\xc6\\x18\\xca\\x18\\xd2\\x18\\xe9\\x18\\xf2\\x18\\xfa\\x19\\x02\\x19\\x0b\\x19\\x33\\x19\\x3b\\x19\\x41\\x19\\x4a\\x19\\x51\\x19\\x5a\\x19\\x63\\x19\\x6c\"\n\"\\x19\\x76\\x19\\xa6\\x19\\xaa\\x19\\xb2\\x19\\xba\\x19\\xd1\\x1a\\x62\\x1a\\xdf\\x1b\\x0e\\x1b\\x18\\x1b\\x20\\x1b\\x24\\x1b\\x2d\\x1b\\x36\\x1b\\x5f\\x1b\\x6c\"\n\"\\x1b\\x6f\\x1b\\x77\\x1b\\x80\\x1b\\x89\\x1b\\x92\\x1b\\x95\\x1b\\x9d\\x1b\\xa0\\x1b\\xb9\\x1b\\xc2\\x1b\\xce\\x1b\\xd7\\x1b\\xe0\\x1c\\x32\\x1c\\x5b\\x1c\\x5f\"\n\"\\x1c\\x6b\\x1c\\x6e\\x1c\\x7a\\x1c\\xf6\\x1d\\x05\\x1d\\x29\\x1d\\x33\\x1d\\x51\\x1d\\x5b\\x1d\\x8c\\x1d\\x96\\x1d\\xa1\\x1d\\xa8\\x1d\\xaf\\x1d\\xbc\\x1d\\xe5\"\n\"\\x1d\\xe8\\x1d\\xea\\x1d\\xf6\\x1e\\x21\\x1e\\x2a\\x1e\\x2d\\x1e\\x57\\x1e\\x5f\\x1e\\x78\\x1e\\x80\\x1e\\x88\\x1e\\x91\\x1e\\x95\\x1e\\x9e\\x1e\\xa7\\x1e\\xaf\"\n\"\\x1e\\xb3\\x1e\\xbc\\x1e\\xc5\\x1e\\xcf\\x1f\\x03\\x1f\\x08\\x1f\\x14\\x1f\\x1d\\x1f\\x8a\\x1f\\x9d\\x1f\\xf3\\x20\\x04\\x20\\x0d\\x20\\x15\\x20\\x18\\x20\\x20\"\n\"\\x20\\x5c\\x20\\x65\\x20\\x6e\\x20\\x94\\x20\\x98\\x20\\xbc\\x20\\xc4\\x20\\xec\\x21\\x00\\x21\\x09\\x21\\x12\\x21\\x1b\\x21\\x61\\x21\\x65\\x21\\x6c\\x21\\x97\"\n\"\\x21\\xa1\\x21\\xc8\\x21\\xcf\\x21\\xd9\\x21\\xe1\\x21\\xeb\\x22\\x0c\\x22\\x15\\x22\\x1e\\x22\\x27\\x22\\x30\\x22\\x34\\x22\\x3c\\x22\\x46\\x22\\x4a\\x22\\x59\"\n\"\\x22\\x8c\\x22\\xba\\x22\\xbe\\x22\\xf2\\x22\\xf8\\x23\\x1a\\x23\\x3a\\x23\\xa6\\x23\\xaa\\x23\\xdb\\x23\\xef\\x24\\x10\\x24\\x16\\x24\\x1d\\x24\\x24\\x24\\x35\"\n\"\\x24\\x3a\\x24\\x5f\\x24\\x65\\x24\\x69\\x24\\xc0\\x24\\xe2\\x24\\xf2\\x24\\xfa\\x25\\x10\\x25\\x2b\\x25\\x42\\x25\\x5d\\x25\\x6e\\x25\\xcd\\x26\\x2d\\x26\\x88\"\n\"\\x26\\x98\\x26\\xe7\\x26\\xf4\\x27\\x54\\x27\\xa9\\x27\\xae\\x27\\xb4\\x27\\xe1\\x28\\x21\\x28\\x43\\x28\\x8d\\x28\\xac\\x28\\xdd\\x29\\x13\\x29\\x69\\x29\\xad\"\n\"\\x29\\xb2\\x29\\xe6\\x2a\\x0c\\x2a\\x2f\\x2a\\x65\\x2a\\xb7\\x2a\\xbb\\x2a\\xe4\\x2a\\xf8\\x2b\\x1d\\x2b\\x45\\x2b\\x4e\\x2b\\x54\\x2b\\x67\\x2b\\x8b\\x2b\\x9a\"\n\"\\x2b\\xaf\\x2b\\xb3\\x2c\\x2e\\x2c\\x33\\x2c\\x43\\x2c\\x4d\\x2c\\x63\\x2c\\x7e\\x2c\\x92\\x2c\\xaa\\x2c\\xb5\\x2c\\xfe\\x2d\\x46\\x2d\\x8d\\x2d\\xa3\\x2d\\xea\"\n\"\\x2d\\xfc\\x2e\\x40\\x2e\\x7d\\x2e\\x84\\x2e\\x8a\\x2e\\xad\\x2e\\xf1\\x2f\\x0e\\x2f\\x3b\\x2f\\x68\\x2f\\x92\\x2f\\xa3\\x2f\\xb4\\x30\\x06\\x30\\x7f\\x30\\xfd\"\n\"\\x31\\x5a\\x31\\xb5\\x32\\x14\\x32\\x1c\\x32\\x51\\x32\\x87\\x32\\xc4\\x33\\x5b\\x33\\x68\\x33\\xee\\x34\\x3b\\x34\\x88\\x34\\xd6\\x35\\x22\\x35\\x7a\\x35\\xdb\"\n\"\\x36\\x54\\x36\\x65\\x36\\x6d\\x36\\x78\\x36\\x80\\x36\\xb3\\x37\\x31\\x37\\x9c\\x37\\xa7\\x37\\xe5\\x38\\x22\\x38\\x4d\\x38\\x53\\x38\\x5b\\x38\\x63\\x38\\x6b\"\n\"\\x38\\x96\\x38\\xa4\\x38\\xe3\\x39\\x59\\x39\\xc0\\x3a\\x2b\\x3a\\x3d\\x3a\\xa7\\x3a\\xab\\x3a\\xb4\\x3a\\xbd\\x3a\\xd7\\x3b\\x18\\x3b\\x40\\x3b\\x65\\x3b\\x78\"\n\"\\x3b\\x80\\x3b\\xfe\\x3c\\x66\\x3c\\x88\\x3c\\xb4\\x3c\\xbd\\x3d\\x04\\x3d\\x29\\x3d\\x30\\x3d\\x3c\\x3d\\x4b\\x3d\\xc2\\x3d\\xec\\x3e\\x15\\x3e\\x25\\x3e\\x6a\"\n\"\\x3e\\xd7\\x3f\\x0f\\x3f\\x12\\x3f\\x18\\x3f\\x1e\\x3f\\x25\\x3f\\x2a\\x3f\\x36\\x3f\\x4f\\x3f\\x58\\x3f\\x81\\x3f\\x86\\x3f\\xa5\\x3f\\xae\\x3f\\xb5\\x3f\\xc2\"\n\"\\x3f\\xd1\\x40\\x79\\x40\\x98\\x41\\x27\\x41\\x2e\\x41\\x72\\x41\\x8b\\x41\\x94\\x41\\xbd\\x41\\xc7\\x41\\xcf\\x42\\x3e\\x42\\x75\\x42\\x7a\\x42\\x83\\x42\\x8b\"\n\"\\x42\\x9a\\x42\\x9f\\x42\\xa9\\x42\\xaf\\x42\\xb9\\x42\\xc7\\x42\\xcf\\x43\\x41\\x43\\xe2\\x44\\x52\\x44\\x6e\\x44\\x97\\x44\\xba\\x44\\xf1\\x45\\x3c\\x45\\x59\"\n\"\\x45\\x63\\x45\\x82\\x45\\x95\\x45\\x9f\\x45\\xaf\\x45\\xf4\\x46\\x05\\x46\\x4f\\x46\\x5f\\x46\\x68\\x46\\x75\\x46\\xb0\\x47\\x60\\x47\\xb0\\x47\\xe5\\x48\\x69\"\n\"\\x48\\x7e\\x48\\xac\\x48\\xca\\x49\\x11\\x49\\x7e\\x49\\x86\\x49\\xab\\x49\\xb3\\x49\\xbb\\x49\\xd1\\x49\\xd2\\x49\\xd6\\x49\\xde\\x49\\xfd\\x4a\\x05\\x4a\\x07\"\n\"\\x4a\\x23\\x4a\\x52\\x4a\\x7e\\x4a\\xe5\\x4a\\xed\\x4a\\xf6\\x4a\\xf9\\x4b\\x01\\x4b\\x22\\x4b\\x40\\x4b\\x73\\x4b\\xb6\\x4c\\x29\\x4c\\x93\\x4c\\xac\\x4c\\xd1\"\n\"\\x4c\\xee\\x4d\\x08\\x4d\\x2a\\x4d\\x46\\x4d\\x55\\x4d\\x64\\x4d\\x9f\\x4d\\xe7\\x4d\\xeb\\x4e\\x0a\\x4e\\x3e\\x4e\\x64\\x4e\\x8d\\x4e\\xc3\\x4e\\xd3\\x4e\\xe3\"\n\"\\x4f\\x1f\\x4f\\x68\\x4f\\x92\\x4f\\xb5\\x4f\\xba\\x4f\\xda\\x4f\\xfd\\x50\\x50\\x50\\x5f\\x50\\x68\\x50\\xbb\\x50\\xe0\\x51\\x1a\\x51\\x26\\x51\\x2e\\x51\\xf0\"\n\"\\x52\\x58\\x52\\x5d\\x52\\x5f\\x52\\x7b\\x52\\x98\\x53\\x08\\x53\\x1f\\x53\\x64\\x53\\x8d\\x53\\xce\\x53\\xd2\\x53\\xda\\x53\\xe2\\x53\\xeb\\x53\\xf4\\x53\\xfa\"\n\"\\x54\\x01\\x54\\x0b\\x54\\x15\\x54\\x1f\\x54\\xb7\\x54\\xc0\\x54\\xc9\\x54\\xd2\\x54\\xdc\\x55\\x3e\\x0e\\x0e\\xfb\\xcf\\xf7\\x9a\\x72\\x0a\\xfb\\x42\\x96\\x1d\"\n\"\\xf7\\x80\\xf7\\x16\\x15\\xfb\\x1e\\xfb\\x16\\x06\\xb3\\xfb\\x15\\x05\\xc3\\x06\\xb5\\xf7\\x15\\x05\\x0e\\x2f\\xf7\\x26\\x6b\\x15\\xb3\\xf7\\x60\\x05\\xf2\\x06\"\n\"\\x63\\xfb\\x60\\x05\\xf4\\x06\\xb3\\xf7\\x60\\x05\\xf7\\x0b\\xee\\x27\\x06\\xaa\\xf7\\x2d\\x05\\xf7\\x01\\xee\\x31\\x98\\x0a\\x24\\x98\\x0a\\xfb\\x0b\\x28\\xee\"\n\"\\x06\\x6d\\xfb\\x2d\\x05\\x2a\\x28\\xd8\\x06\\x63\\xfb\\x60\\x05\\xf7\\x39\\xf7\\xc3\\x15\\xa9\\xf7\\x2d\\x05\\xf2\\x06\\x6d\\xfb\\x2d\\x05\\x0e\\x2f\\xf8\\x99\"\n\"\\xf8\\x86\\x15\\x89\\xf7\\x11\\x3d\\xda\\xfb\\x12\\x92\\x08\\xc1\\x47\\x55\\x07\\xfb\\x15\\x7f\\x40\\x42\\xfb\\x04\\x1a\\xfb\\x03\\xd0\\x44\\xf7\\x1b\\x6c\\x1e\"\n\"\\xfb\\x69\\x07\\x53\\x95\\x6c\\xb4\\x88\\xd1\\x08\\xfb\\x17\\x82\\x06\\x42\\xa9\\x50\\xc3\\x62\\x1e\\xb1\\x70\\xb0\\x7e\\xc7\\x85\\x08\\x22\\xcf\\xf4\\x07\\xc2\"\n\"\\x91\\xb5\\x99\\xac\\xa0\\x08\\xc1\\xae\\xab\\xcb\\xd7\\x1a\\xf7\\x02\\x4f\\xc6\\xfb\\x30\\xb6\\x1e\\xf7\\x5d\\x07\\xbe\\x84\\xa8\\x61\\x89\\x4e\\x08\\xfb\\x26\"\n\"\\x44\\x15\\x53\\x9d\\x72\\xa6\\xb7\\x1a\\xbf\\xa5\\xa8\\xc2\\x96\\x1e\\xcf\\xfb\\xda\\x15\\xc3\\x7a\\xa7\\x69\\x5b\\x1a\\x59\\x6f\\x6a\\x53\\x7d\\x1e\\x0e\\xf7\"\n\"\\x85\\xf7\\x62\\xf9\\x51\\x15\\x26\\x38\\x39\\x27\\x27\\xde\\x39\\xf0\\xf0\\xde\\xdc\\xee\\xf2\\x3a\\xdc\\x24\\x1f\\x28\\x04\\xbb\\xb0\\x66\\x5c\\x5d\\x65\\x66\"\n\"\\x5c\\x5c\\x65\\xb0\\xba\\xb9\\xb1\\xb0\\xba\\x1f\\xf8\\x24\\xf6\\x15\\xfc\\x20\\xfd\\x6d\\x05\\xd8\\x06\\xf8\\x1f\\xf9\\x6d\\x05\\x88\\xfb\\xf9\\x15\\x25\\x39\"\n\"\\x39\\x27\\x26\\xdd\\x39\\xf1\\xf0\\xde\\xdd\\xed\\xf3\\x3a\\xdc\\x24\\x1f\\x28\\x04\\xbb\\xb0\\x66\\x5b\\x5e\\x64\\x65\\x5d\\x5c\\x65\\xb1\\xb9\\xb9\\xb1\\xb1\"\n\"\\xba\\x1f\\x0e\\xd5\\xf8\\xa2\\xf8\\x09\\x15\\x81\\x07\\x5f\\x83\\x6e\\x75\\x61\\x1e\\xfb\\x08\\xf7\\x24\\x05\\xe4\\xc8\\xa7\\xb5\\xd5\\x1a\\xe7\\x44\\xc9\\x20\"\n\"\\x20\\x39\\x43\\x2c\\x66\\x99\\x67\\xa7\\x6a\\x1e\\x94\\x80\\x94\\x80\\x95\\x7f\\x8d\\x89\\x8f\\x86\\x91\\x83\\x08\\xfb\\x09\\x4e\\x63\\x56\\x2d\\x1a\\xfb\\x16\"\n\"\\xea\\x35\\xf7\\x22\\xd0\\xb7\\x9d\\xc8\\xdd\\x1e\\xb9\\x53\\x05\\xf7\\x35\\x06\\xfb\\x0f\\xf7\\x2e\\xb3\\xb9\\xa5\\xdc\\x8d\\xd7\\x19\\x90\\x07\\x96\\x07\\xfb\"\n\"\\xfd\\x55\\x15\\xf7\\x1c\\xfb\\x3f\\x05\\x67\\x5c\\x61\\x78\\x6c\\x1b\\x55\\x57\\xc4\\xc7\\xac\\x9b\\xa8\\xa6\\x9d\\x1f\\xe1\\xf7\\x48\\x15\\x59\\xc9\\x86\\x94\"\n\"\\xa4\\x1a\\xa8\\xa2\\x9e\\xae\\xaf\\xa0\\x76\\x66\\x67\\x78\\x70\\x62\\x74\\x1e\\x0e\\xcd\\xf9\\x6d\\x37\\x0a\\x0e\\xfb\\xcf\\xf7\\x5f\\x21\\x0a\\xfb\\x07\\xfb\"\n\"\\x42\\x5b\\xfb\\x1c\\xfb\\x2e\\x1a\\xfb\\x2f\\xbb\\xfb\\x1c\\xf7\\x07\\xfb\\x42\\x1e\\xef\\x06\\x20\\xf7\\x62\\x6a\\xf7\\x03\\xf7\\x28\\x1a\\xf7\\x27\\xad\\xf7\"\n\"\\x05\\xf5\\xf7\\x60\\x1e\\x0e\\xfb\\xcf\\xf7\\x0e\\xfb\\x5c\\x15\\xf7\\x07\\xf7\\x42\\xbb\\xf7\\x1c\\xf7\\x2e\\x1a\\xf7\\x2f\\x5b\\xf7\\x1c\\xfb\\x07\\xf7\\x42\"\n\"\\x1e\\x27\\x06\\xf6\\xfb\\x62\\xac\\xfb\\x03\\xfb\\x28\\x1a\\xfb\\x27\\x69\\xfb\\x05\\x21\\xfb\\x60\\x1e\\x0e\\xfb\\x97\\xf7\\x17\\xf8\\xb4\\x15\\x48\\x2d\\xc5\"\n\"\\x60\\xcf\\xe9\\xce\\x2d\\xc5\\xb6\\x48\\xe9\\xf7\\x00\\xae\\x75\\xd1\\xfb\\x00\\x67\\x05\\xf7\\x08\\x43\\xfb\\x08\\x07\\xfb\\x01\\xaf\\x75\\x46\\x05\\x0e\\x4b\"\n\"\\xf8\\xa9\\xf7\\xb7\\x15\\xfb\\x4a\\xf7\\x4a\\xfb\\x0b\\xfb\\x4a\\xfb\\x4a\\xfb\\x0b\\xf7\\x4a\\xfb\\x4a\\xf7\\x0b\\xf7\\x4a\\xf7\\x4a\\x06\\x0e\\xcb\\xf7\\x26\"\n\"\\x15\\xfb\\x26\\xe1\\x07\\x8d\\x47\\x6f\\x64\\x4f\\x80\\x08\\x53\\x07\\xf6\\x9b\\xba\\xc4\\x87\\xf7\\x02\\x08\\xf7\\x1d\\x07\\x0e\\xfb\\xcf\\x8e\\x0a\\xf7\\x6a\"\n\"\\xf7\\x26\\x15\\x33\\x1d\\x0e\\xf7\\x64\\xf9\\x5e\\x15\\xfb\\x62\\xfd\\x6c\\x05\\xce\\x06\\xf7\\x62\\xf9\\x6c\\x05\\x0e\\x2f\\xf7\\xa5\\xf9\\x68\\x15\\x3f\\x4a\"\n\"\\x6b\\x50\\x60\\x1f\\x62\\x54\\x78\\x31\\xfb\\x1e\\x1a\\xfb\\x12\\x9b\\x33\\xad\\x55\\x1e\\x47\\xb5\\xd0\\x66\\xde\\x1b\\xd8\\xca\\xaa\\xc6\\xb7\\x1f\\xb3\\xc2\"\n\"\\x9f\\xe6\\xf7\\x19\\x1a\\xf7\\x16\\x7b\\xe3\\x69\\xc2\\x1e\\xcf\\x61\\x46\\xb0\\x38\\x1b\\xfb\\x05\\x04\\xaf\\xa8\\x77\\x66\\x9c\\x1f\\x99\\x6d\\x93\\x3e\\x29\"\n\"\\x1a\\x3b\\x84\\x3d\\x80\\x6e\\x1e\\x61\\x7b\\x6d\\x74\\x63\\x1b\\x66\\x6f\\x9e\\xaf\\x7a\\x1f\\x7d\\xa9\\x83\\xd5\\xea\\x1a\\xdf\\x92\\xdb\\x96\\xa8\\x1e\\xb6\"\n\"\\x9a\\xaa\\xa3\\xb3\\x1b\\x0e\\x2f\\xf7\\x82\\xf8\\x7d\\x15\\xfc\\x7d\\xf7\\x20\\xf9\\x59\\x2e\\x07\\x37\\x75\\x42\\x60\\xfb\\x0e\\x1b\\x2e\\x07\\x0e\\x2f\\xf8\"\n\"\\x94\\xf7\\x11\\x15\\xfb\\xc1\\x06\\x9e\\xb1\\xa1\\xa0\\xf3\\xd6\\x08\\xf7\\x0f\\xe5\\xaf\\xc0\\xec\\x1a\\xf7\\x1d\\x2c\\xe3\\xfb\\x28\\xfb\\x27\\x35\\x34\\xfb\"\n\"\\x2a\\x1e\\x72\\xf7\\x1b\\xa2\\x07\\xda\\xb0\\xb9\\xcb\\xc9\\xb1\\x60\\x44\\x3c\\x73\\x6e\\xfb\\x32\\xfb\\x04\\x1e\\xfb\\x0c\\x39\\x66\\x4d\\x85\\xfb\\x18\\x08\"\n\"\\xf8\\x76\\x06\\x0e\\x2f\\xf7\\x6d\\xf7\\xd1\\x15\\xc1\\x8e\\x8b\\x84\\xa4\\x1f\\xba\\x7e\\xa9\\x62\\x57\\x1a\\x4c\\x5f\\x5f\\x4e\\x49\\x67\\xb1\\xd4\\x87\\x1e\"\n\"\\xfb\\x1c\\x06\\xfb\\x22\\x8c\\xe7\\x32\\xf7\\x26\\x1b\\xf7\\x2b\\xec\\xe4\\xf7\\x1e\\xde\\x67\\xc1\\x3b\\xb2\\x1f\\xcc\\xb4\\xa7\\xb8\\xcc\\x1a\\xf7\\x0a\\x33\"\n\"\\xd6\\xfb\\x1d\\x24\\x3c\\x5e\\x3e\\x6c\\x1e\\x7e\\x69\\x87\\x74\\x50\\x1a\\xf7\\x16\\x06\\x8c\\xb1\\x8e\\x9e\\x92\\x9d\\x08\\xaa\\x98\\xab\\x9e\\xb4\\x1b\\xc3\"\n\"\\xab\\x69\\x50\\x43\\x62\\x68\\x38\\x1f\\x7f\\x06\\x0e\\x2f\\xf8\\x9e\\xf7\\xa5\\x15\\x41\\xf8\\x48\\xfb\\x39\\x06\\xfb\\x97\\xfc\\x46\\x05\\xfb\\x0a\\xf7\\xb0\"\n\"\\xfb\\x31\\xf7\\x20\\xf7\\x31\\xd5\\x07\\xfb\\x6a\\xf7\\x08\\x15\\xfb\\x4d\\x06\\xf7\\x4d\\xf7\\xc3\\x05\\x0e\\x2f\\xf8\\x7d\\xf9\\x59\\x15\\xfc\\x0f\\x06\\x4c\"\n\"\\xfc\\x1f\\x05\\xf7\\x12\\x06\\xae\\x9a\\xab\\x9e\\xb6\\x1b\\xd2\\xb6\\x58\\x35\\x38\\x60\\x58\\x44\\x4e\\x69\\xaa\\xc4\\x88\\x1f\\xfb\\x1e\\x06\\xfb\\x10\\x8d\"\n\"\\xe9\\x37\\xf7\\x1e\\x1b\\xf7\\x2c\\xf3\\xf3\\xf7\\x2d\\xf7\\x26\\x31\\xee\\xfb\\x17\\x5c\\x68\\x7f\\x6c\\x62\\x1f\\xa2\\xf7\\x28\\x05\\xf7\\xb9\\x06\\x0e\\x2f\"\n\"\\xf8\\x8f\\xf8\\xb8\\x15\\x84\\xb9\\x82\\xa2\\x79\\xa5\\x08\\xbe\\x66\\x4a\\xa9\\x3e\\x1b\\x33\\x43\\x64\\x44\\x60\\x1f\\x61\\x46\\x7a\\x3c\\xfb\\x15\\x1a\\xfb\"\n\"\\x0e\\x9a\\x3f\\xaf\\x52\\x1e\\x49\\xb4\\xd5\\x64\\xdf\\x1b\\xf7\\x21\\xeb\\xf4\\xf7\\x2f\\xf7\\x1c\\x37\\xe9\\xfb\\x0e\\x51\\x64\\x7a\\x5d\\x5f\\x1f\\x8c\\x9a\"\n\"\\x8d\\xcd\\x8e\\xa0\\x95\\xa6\\x19\\xbf\\x9e\\xad\\xa5\\xbc\\x1b\\xb8\\xa3\\x79\\x5e\\x9d\\x1f\\x28\\xfb\\x54\\x15\\xcd\\xb5\\x59\\x3c\\x40\\x5d\\x54\\x4d\\x4b\"\n\"\\x5f\\xbf\\xd7\\xd8\\xb7\\xc1\\xcb\\x1f\\x0e\\x2f\\xf8\\xa4\\xf9\\x59\\x15\\xfc\\x87\\xfb\\x11\\xf7\\xf5\\x06\\x60\\x5d\\x36\\xfb\\x15\\x6f\\x4d\\x5a\\x24\\x72\"\n\"\\x2e\\x78\\xfb\\x2b\\x08\\xf7\\x21\\x06\\x98\\xf7\\x74\\xd4\\xf7\\x40\\xf7\\x3c\\xf7\\x5f\\x08\\x0e\\x2f\\xf8\\x2d\\xf8\\x16\\x15\\xa3\\x98\\x96\\x92\\x96\\x95\"\n\"\\x08\\xa8\\xa6\\x9c\\xb6\\xb9\\x1a\\xf7\\x03\\x2b\\xdc\\xfb\\x17\\xfb\\x18\\x2b\\x3a\\xfb\\x04\\x47\\xa7\\x60\\xcb\\x69\\x1e\\x39\\x5e\\x69\\x56\\x37\\x1a\\xfb\"\n\"\\x1a\\xf2\\x2e\\xf7\\x29\\xf7\\x28\\xf2\\xe8\\xf7\\x1a\\xdf\\x69\\xc0\\x39\\xb8\\x1e\\xfb\\x1a\\xf7\\x75\\x15\\xc9\\xb6\\x65\\x54\\x55\\x5f\\x64\\x4e\\x4c\\x60\"\n\"\\xb1\\xc3\\xc1\\xb6\\xb1\\xca\\x1f\\x89\\xfb\\xad\\x15\\xd0\\xb6\\x5d\\x41\\x47\\x5f\\x5e\\x47\\x47\\x60\\xb8\\xd1\\xd3\\xb6\\xb9\\xcf\\x1f\\x0e\\x2f\\xb1\\xf7\"\n\"\\x39\\x15\\xfb\\x01\\x8e\\xe7\\x3b\\xf7\\x0e\\x1b\\xe6\\xd0\\xb1\\xd3\\xb5\\x1f\\xb0\\xca\\xa1\\xf6\\xf7\\x06\\x1a\\xf3\\x7b\\xdb\\x6a\\xc1\\x1e\\xd7\\x5e\\x45\"\n\"\\xb3\\x36\\x1b\\xfb\\x22\\x2a\\x25\\xfb\\x28\\xfb\\x26\\xe1\\x27\\xf7\\x12\\xaf\\xad\\x95\\x9b\\xa1\\x1f\\x98\\x94\\x93\\x94\\xa2\\xa5\\x08\\xfb\\x1d\\x65\\x4a\"\n\"\\x3c\\x59\\x6a\\xa6\\xb5\\x88\\x1e\\xe5\\xf8\\x51\\x15\\xcf\\xb5\\x57\\x37\\x3d\\x60\\x57\\x4a\\x4b\\x63\\xbd\\xdd\\xdd\\xb2\\xbf\\xca\\x1f\\x0e\\xfb\\xcf\\xf7\"\n\"\\x9b\\x3d\\x0a\\xf8\\x9c\\x04\\x33\\x1d\\x0e\\xfb\\xcf\\xf7\\x05\\xf7\\x26\\x15\\xfb\\x26\\xe1\\x07\\x8d\\x47\\x6f\\x64\\x4f\\x80\\x08\\x53\\x07\\xf6\\x9b\\xba\"\n\"\\xc4\\x87\\xf7\\x02\\x08\\xf7\\x1d\\x07\\xf8\\x0a\\x04\\x33\\x1d\\x0e\\x4b\\xf8\\xa5\\xf8\\x6e\\x15\\xfc\\x7d\\xfb\\x49\\x05\\xfb\\x0d\\x97\\x1d\\x4b\\xf8\\xaa\"\n\"\\xf8\\x2f\\x9b\\x1d\\x0e\\x4b\\xb3\\x81\\x15\\xf8\\x7d\\xf7\\x49\\x05\\xf7\\x0d\\x07\\xfc\\x7d\\xf7\\x4a\\x05\\xfb\\x03\\x07\\xf8\\x12\\xfb\\x17\\xfc\\x12\\xfb\"\n\"\\x19\\x05\\x0e\\x66\\xf8\\x05\\xf7\\x5d\\x15\\xcd\\x92\\x96\\xc7\\xb5\\x1e\\xe8\\xcd\\xa6\\xb7\\xdf\\x1a\\xf7\\x1c\\x25\\xe9\\xfb\\x27\\x35\\x48\\x6d\\x50\\x60\"\n\"\\x1e\\x6a\\x5f\\x7e\\x5b\\x8a\\x39\\x08\\xf7\\x1c\\x06\\xe5\\xb5\\xc2\\xd0\\xc6\\xb8\\x5a\\x49\\x5e\\x7f\\x78\\x51\\x5b\\x1e\\x3b\\x47\\x74\\x5e\\x8e\\x36\\x08\"\n\"\\xf7\\x20\\x54\\x15\\x33\\x1d\\x0e\\xf7\\xdb\\xf9\\x18\\xf8\\x90\\x15\\x7b\\x4d\\x05\\xbd\\x73\\x69\\xa1\\x53\\x1b\\x47\\x46\\x69\\x52\\x5e\\x1f\\x5d\\x52\\x6f\"\n\"\\x40\\x47\\x1a\\x2c\\xd4\\x3f\\xe6\\xc2\\xc3\\xa7\\xba\\xb2\\x1e\\x93\\x72\\x93\\x81\\x9f\\x7d\\x08\\x7a\\xa4\\xaa\\x82\\xac\\x1b\\xc7\\xc7\\xa9\\xc1\\xbb\\x1f\"\n\"\\xc2\\xca\\xa6\\xd0\\xde\\x1a\\xf6\\x68\\xdf\\x3f\\xd5\\x1e\\xdd\\x36\\xfb\\x01\\xb6\\xfb\\x13\\x1b\\xfb\\x1b\\xfb\\x0a\\x5a\\x2c\\x2f\\x1f\\x32\\x2f\\x55\\xfb\"\n\"\\x14\\xfb\\x0d\\x1a\\xfb\\x07\\xc4\\xfb\\x05\\xe9\\x41\\x1e\\x4a\\xdd\\xec\\x6d\\xf7\\x13\\x1b\\xea\\xd3\\x99\\xaa\\xd1\\x1f\\x6f\\xd4\\x05\\x72\\x51\\x3e\\x7c\"\n\"\\x43\\x1b\\x30\\x35\\xa8\\xbf\\x48\\x1f\\x3d\\xc8\\x63\\xde\\xef\\x1a\\xef\\xb1\\xf0\\xcc\\xd6\\x1e\\xde\\xd3\\xeb\\xb6\\xf7\\x08\\x1b\\xed\\xdc\\x6d\\x4d\\xd1\"\n\"\\x1f\\xcd\\x50\\xab\\x48\\x3b\\x1a\\x51\\x79\\x52\\x6a\\x5d\\x1e\\x5f\\x6a\\x61\\x6f\\x68\\x1b\\x6d\\x78\\x9e\\xa9\\x97\\x8b\\x8c\\x93\\xa8\\x1f\\xd9\\xf7\\xac\"\n\"\\x05\\xfb\\x73\\x4e\\x15\\xbf\\xab\\x64\\x4c\\x58\\x71\\x48\\x66\\x60\\x1f\\x6f\\x73\\x68\\x78\\x6e\\x1b\\x58\\x65\\xb9\\xc8\\xf2\\xd8\\xef\\xda\\x1f\\x0e\\xd5\"\n\"\\x20\\x0a\\x0e\\xd5\\x5e\\x0a\\xd5\\x2d\\x0a\\x0e\\xd5\\x6e\\x1d\\x0e\\x9e\\x22\\x0a\\x0e\\x66\\xf7\\x74\\xf7\\xce\\x15\\xf7\\xd3\\xf7\\x11\\xfb\\xd3\\x93\\x0a\"\n\"\\x06\\x0e\\xf7\\x16\\x35\\x1d\\x0e\\xd5\\x84\\x1d\\x29\\x1d\\x0e\\x2f\\x77\\x1d\\x0e\\xd5\\x79\\x1d\\x66\\x38\\x1d\\x0e\\xf7\\x4d\\x66\\x0a\\xd5\\x29\\x0a\\x0e\"\n\"\\xf7\\x16\\x24\\x0a\\x0e\\x9e\\x74\\x1d\\xf7\\x16\\xf9\\x2d\\xf2\\x15\\xbc\\xc7\\xaa\\xef\\xed\\x1a\\xf6\\x65\\xf2\\x4b\\xd0\\x1e\\xcf\\x4c\\x39\\xac\\x23\\x1b\"\n\"\\x23\\x39\\x6a\\x47\\x4c\\x1f\\x4a\\x46\\x66\\x24\\xfb\\x01\\x1a\\xfb\\x01\\xb1\\x24\\xcb\\x46\\x1e\\x47\\xca\\xdd\\x6a\\xf3\\x1b\\xd7\\xc2\\x9a\\xae\\xc5\\x1f\"\n\"\\xe1\\x3a\\xd7\\xdc\\x05\\xfb\\x9d\\xf7\\x8f\\x15\\x3f\\x3a\\xd8\\x42\\x05\\x7f\\x73\\x6b\\x84\\x6b\\x1b\\xfb\\x0c\\x3b\\xf0\\xf7\\x2d\\xf7\\x2e\\xda\\xef\\xf7\"\n\"\\x0e\\xf7\\x0e\\xda\\x27\\xfb\\x2f\\x4f\\x80\\x55\\x75\\x5f\\x1f\\x0e\\xd5\\x3b\\x1d\\x0e\\x9e\\x2c\\x0a\\x0e\\x66\\x42\\x1d\\x0e\\xd5\\x25\\x0a\\x0e\\x9e\\xf8\"\n\"\\x21\\x16\\xf7\\x8e\\xf9\\x6d\\x05\\xfb\\x2b\\x06\\xfb\\x33\\xfc\\xb9\\xfb\\x36\\xf8\\xb9\\x05\\xfb\\x2b\\x06\\xf7\\x8a\\xfd\\x6d\\x05\\x0e\\xf7\\xbc\\x2f\\x0a\"\n\"\\x0e\\x9e\\x62\\x0a\\x9e\\x2a\\x1d\\x0e\\x66\\x31\\x0a\\x0e\\xfb\\xcf\\xf7\\xc8\\x21\\x0a\\xfb\\x86\\xfe\\x35\\xf7\\x86\\xf1\\xfb\\x04\\xf9\\x69\\xf7\\x04\\x06\"\n\"\\x0e\\xc2\\xf9\\x5e\\x15\\x48\\x06\\xf7\\x7e\\xfd\\x6c\\x05\\xce\\x06\\x0e\\xfb\\xcf\\x9d\\xfb\\x5c\\x15\\xf7\\x86\\xfa\\x35\\xfb\\x86\\x25\\xf7\\x04\\xfd\\x69\"\n\"\\xfb\\x04\\x06\\x0e\\x4b\\xf8\\x9e\\xf7\\xa2\\x15\\xfb\\x3f\\xf8\\x3d\\x05\\xfb\\x11\\x06\\xfb\\x39\\xfc\\x3d\\x05\\xf7\\x04\\x06\\xf7\\x07\\xf7\\xc0\\xf7\\x0d\"\n\"\\xfb\\xc0\\x05\\x0e\\x2f\\xf8\\xd6\\xfb\\x0c\\xbd\\x1d\\xf7\\x62\\xf8\\x69\\x15\\xf7\\x11\\x3b\\x07\\x89\\xbd\\xa5\\xa8\\xc3\\x95\\x08\\xb9\\x07\\x33\\x84\\x58\"\n\"\\x52\\x8f\\x34\\x08\\xfb\\x01\\x07\\x0e\\x2f\\x26\\x1d\\x0e\\x66\\xc6\\x21\\x0a\\xfd\\x6d\\xf7\\x20\\xc2\\x07\\x56\\xad\\xba\\x72\\xcf\\x1b\\xf7\\x15\\xed\\xf7\"\n\"\\x0f\\xf7\\x37\\xd4\\x75\\xd5\\x67\\xbf\\x1f\\xc0\\x66\\x49\\xad\\x49\\x1b\\x47\\x5c\\x72\\x55\\x69\\x1f\\xf7\\x97\\x07\\xf7\\x0a\\xfb\\xbd\\x15\\xd0\\xbc\\x45\"\n\"\\x27\\x28\\x5b\\x46\\x45\\x44\\x5c\\xce\\xf3\\xee\\xbb\\xcf\\xd1\\x1f\\x0e\\x2f\\x36\\x1d\\x0e\\x66\\xf8\\x29\\x6d\\x1d\\x0e\\x2f\\x27\\x1d\\x0e\\xfb\\xcf\\x40\"\n\"\\x1d\\x0e\\x66\\x68\\x1d\\x0e\\x66\\x61\\x0a\\x0e\\xf7\\x63\\xf8\\xb0\\x39\\x1d\\x0e\\xf7\\x66\\xf8\\xb0\\x7b\\x1d\\x2f\\x7f\\x1d\\x0e\\x44\\x1d\\x0e\\xf7\\x85\"\n\"\\xc7\\xf8\\xb0\\x15\\xfc\\xb0\\xf7\\x20\\xf7\\xd8\\x07\\xce\\xaf\\xb2\\xb2\\x1d\\xf7\\xd8\\x07\\xcd\\xaf\\xb3\\xb2\\x1d\\xf8\\x12\\x07\\xf4\\x4b\\xc9\\xfb\\x00\"\n\"\\x46\\x5c\\x73\\x53\\x61\\x1e\\xbe\\x71\\x55\\xa8\\x48\\x1b\\x4d\\x63\\x77\\x53\\x5d\\x1f\\xce\\x07\\x0e\\x66\\x37\\x1d\\x0e\\x66\\x28\\x1d\\x0e\\x66\\xf7\\x5a\"\n\"\\x24\\x1d\\xfb\\x20\\xfd\\x8a\\x66\\x1d\\x4f\\xc3\\x1d\\xf7\\x0e\\xf7\\x38\\xd7\\x75\\xd7\\x67\\xbd\\x1f\\xbe\\x67\\x48\\xad\\x4a\\x1b\\x47\\x5b\\x6e\\x4f\\x69\"\n\"\\x1f\\xf7\\x0a\\x6f\\x4a\\x1d\\x28\\x5b\\x47\\x45\\x44\\x5c\\xcf\\xf0\\xf1\\xba\\xcf\\xd2\\x1f\\x0e\\x66\\xf8\\x28\\x24\\x1d\\x3b\\x07\\xc6\\x6a\\x59\\xa9\\x48\"\n\"\\x1b\\xfb\\x16\\x2b\\xfb\\x0e\\xfb\\x39\\x3f\\xa1\\x3f\\xaf\\x5a\\x1f\\x58\\xaf\\xce\\x69\\xcb\\x1b\\xcf\\xbd\\xa8\\xc6\\xac\\x1f\\xfb\\xae\\xf7\\x20\\xf9\\x8a\"\n\"\\x07\\xfb\\x96\\xfb\\x00\\x15\\xd3\\xb9\\x47\\x22\\x29\\x5b\\x47\\x45\\x45\\x5b\\xcf\\xf0\\xf0\\xbb\\xd0\\xd1\\x1f\\x0e\\xfb\\x97\\x3d\\x1d\\x0e\\x2f\\x34\\x1d\"\n\"\\x0e\\xfb\\xcf\\x4c\\x1d\\x0e\\x66\\x26\\x0a\\x0e\\x2f\\xf7\\xf2\\x75\\x0a\\xf7\\x16\\x30\\x0a\\x0e\\x2f\\xf7\\xf7\\x75\\x1d\\x2f\\x2e\\x0a\\x0e\\xfb\\x28\\x36\"\n\"\\x0a\\x0e\\xfb\\x97\\xf7\\xd1\\x21\\x0a\\x3f\\x06\\x44\\x8c\\x56\\x4e\\x8c\\x3b\\x08\\xfb\\x67\\x07\\x61\\x8c\\x76\\x76\\x5e\\x1b\\x7f\\x06\\x87\\x2f\\x06\\xca\"\n\"\\x8c\\x9e\\x7a\\x8a\\x52\\x08\\xfb\\x66\\x07\\x89\\x3b\\xc1\\x4e\\xd2\\x8c\\x08\\xd7\\xee\\x66\\x06\\x69\\x7f\\x9e\\xb9\\x8c\\x1f\\xf7\\x57\\x07\\xd3\\x71\\xa8\"\n\"\\x44\\x94\\x1e\\xd2\\x93\\xa5\\xa8\\xd3\\x1a\\xf7\\x57\\x07\\xb2\\x8a\\x9a\\x9d\\xaa\\x1b\\xb0\\x06\\x0e\\xfc\\x04\\xf7\\x48\\x21\\x0a\\x3b\\xfe\\x35\\xdb\\x06\"\n\"\\x0e\\xfb\\x97\\xd3\\xfb\\x5c\\x15\\xd7\\x06\\xd2\\x8a\\xc0\\xc8\\x8a\\xdb\\x08\\xf7\\x67\\x07\\xb5\\x8a\\xa0\\xa0\\xb8\\x1b\\x97\\x06\\x8f\\xe7\\x06\\x4c\\x8a\"\n\"\\x78\\x9c\\x8c\\xc4\\x08\\xf7\\x66\\x07\\x8d\\xdb\\x55\\xc8\\x44\\x8a\\x08\\x3f\\x28\\xb0\\x06\\xad\\x97\\x78\\x5d\\x8a\\x1f\\xfb\\x57\\x07\\x43\\xa5\\x6e\\xd2\"\n\"\\x82\\x1e\\x44\\x83\\x71\\x6e\\x43\\x1a\\xfb\\x57\\x07\\x64\\x8c\\x7c\\x79\\x6c\\x1b\\x66\\x06\\x0e\\x4b\\xf8\\x4d\\xf8\\x2f\\x15\\x8a\\x70\\x8a\\x87\\x88\\x83\"\n\"\\x08\\x79\\x83\\x7b\\x82\\x73\\x1b\\x76\\x7d\\x90\\x9f\\x71\\x1f\\x52\\xb5\\x05\\x9c\\x73\\x71\\x93\\x6a\\x1b\\x3c\\x60\\x5b\\x2a\\x86\\x1f\\xd9\\x06\\x8c\\xa6\"\n\"\\x8c\\x8e\\x8e\\x93\\x08\\x9d\\x93\\x9b\\x94\\xa3\\x1b\\xa0\\x9c\\x84\\x7a\\xa2\\x1f\\xc4\\x61\\x05\\x79\\xa5\\xa3\\x83\\xac\\x1b\\xdb\\xb4\\xbb\\xed\\x91\\x1f\"\n\"\\x0e\\xfb\\xcf\\xcd\\xfb\\x4e\\x15\\xf7\\x2a\\xf7\\x66\\x06\\x62\\xf7\\xc9\\x05\\x48\\x06\\x61\\xfb\\xc9\\x05\\xf8\\x06\\x04\\xf7\\x2a\\xf7\\x26\\xfb\\x2a\\x06\"\n\"\\x0e\\x2f\\xf7\\xc3\\xf8\\x47\\x15\\xba\\x84\\xa4\\x6f\\x98\\x4d\\x08\\xf7\\x1a\\x06\\x83\\xf7\\x10\\x33\\xe0\\xfb\\x0f\\x8d\\x08\\xe0\\x5f\\x35\\x07\\xfb\\x24\"\n\"\\x7c\\x3d\\x26\\xfb\\x41\\x1a\\xfb\\x3a\\xde\\x22\\xf7\\x1f\\x82\\x1e\\x25\\x07\\xb7\\x8a\\x05\\xf1\\x07\\xf7\\x0b\\x8f\\xe4\\xe0\\x96\\xf7\\x0c\\x08\\xfb\\x1a\"\n\"\\x06\\x7c\\x4e\\x73\\x6f\\x5d\\x84\\x08\\x5f\\x8e\\x15\\x56\\x9a\\x6e\\xc5\\xe8\\x1a\\xee\\xa8\\xc8\\xc0\\x98\\x1e\\x0e\\x2f\\xf8\\x0b\\xf8\\x07\\x15\\xfb\\x1f\"\n\"\\x06\\x85\\x99\\x86\\x98\\x78\\xb1\\xb0\\x1d\\xaa\\xa5\\x82\\x79\\x9f\\x1e\\xa0\\x79\\x93\\x79\\x91\\x5d\\x8c\\x80\\x18\\xf7\\x18\\x06\\x86\\xc6\\x83\\xac\\x7c\"\n\"\\xa8\\x08\\xd2\\x67\\x3d\\xb2\\x23\\x1b\\x48\\x54\\x7a\\x6b\\x61\\x1f\\x5d\\x66\\x6f\\x53\\x52\\x1a\\x5e\\x93\\x76\\xb8\\x3c\\x1e\\x4f\\x54\\xe4\\x06\\x9b\\x63\"\n\"\\x90\\x77\\x72\\x1a\\x51\\x70\\x66\\x38\\x53\\x1e\\xc2\\x26\\x05\\xa2\\xb7\\xa6\\x92\\xb1\\x1b\\xa6\\xa1\\x87\\x7f\\xbc\\x1f\\x7f\\xbc\\xa2\\x87\\xa6\\x1b\\xbc\"\n\"\\xb3\\x97\\xac\\xc3\\x1f\\x62\\xf7\\x01\\x05\\x77\\x63\\x6b\\x82\\x6a\\x1b\\x7a\\x77\\x8e\\x92\\x71\\x1f\\x95\\x64\\x84\\x8c\\x79\\x1b\\x6e\\x77\\x85\\x6c\\x4c\"\n\"\\x1f\\xe0\\xce\\xaa\\xb9\\xc5\\x1a\\x9f\\x88\\x98\\x7f\\xa5\\x1e\\xf7\\x0e\\x06\\x0e\\xf7\\xc5\\x2f\\x1d\\x0e\\x2f\\xf8\\x85\\xf7\\xf3\\x15\\xfb\\x1d\\x06\\xf7\"\n\"\\x54\\xf7\\xf5\\x05\\xfb\\x1b\\x06\\xfb\\x1a\\xfb\\x92\\xfb\\x1f\\xf7\\x92\\x05\\xfb\\x1f\\x06\\xf7\\x5f\\xfb\\xf5\\x05\\xfb\\x1e\\x50\\xf7\\x25\\x56\\xfb\\x25\"\n\"\\x50\\xf7\\x25\\xfb\\x48\\xf7\\x20\\xf7\\x48\\xf7\\x22\\xc6\\xfb\\x22\\xc0\\xf7\\x22\\x06\\x0e\\x2f\\xf8\\x88\\xf8\\x74\\x15\\xfb\\x0f\\x06\\x92\\xb4\\x05\\xd3\"\n\"\\x97\\xa4\\xae\\xb2\\x1b\\x9c\\x95\\x88\\x7e\\xa7\\x1f\\x9f\\xf7\\x07\\x05\\x98\\x60\\x76\\x8f\\x6b\\x1b\\x22\\x52\\x4c\\xfb\\x22\\x73\\x1f\\x81\\x50\\x05\\xfb\"\n\"\\x1f\\x2a\\xf7\\x0f\\x06\\x50\\xfc\\x0c\\x05\\x38\\x7e\\x7a\\x6f\\x67\\x1b\\x7b\\x7a\\x91\\x9a\\x73\\x1f\\x73\\xfb\\x07\\x05\\x7b\\xac\\xa4\\x85\\xab\\x1b\\xbd\"\n\"\\xb9\\x9d\\xa9\\xa8\\x1f\\xad\\xad\\xa0\\xc1\\x98\\xe0\\xc6\\xf8\\x12\\x18\\xf7\\x1d\\x06\\x0e\\x2f\\xf8\\x6d\\xf8\\xb4\\x15\\x89\\xbc\\x84\\xa6\\x7a\\xa6\\x08\"\n\"\\xbb\\x6c\\x4a\\xa7\\x3d\\x1b\\xfb\\x0d\\x33\\x43\\x27\\x6c\\x95\\x6a\\x9c\\x75\\x1f\\x91\\x83\\x8e\\x87\\xa4\\x72\\x08\\x43\\x54\\x77\\x6b\\x4f\\x1a\\x54\\xa7\"\n\"\\x5c\\xbe\\x6d\\x1e\\xf7\\x3f\\x27\\xb4\\x74\\x8b\\x8b\\x96\\x81\\x19\\x96\\x80\\x92\\x7b\\x79\\x1a\\x67\\x6c\\x72\\x5e\\x71\\x75\\x93\\x99\\x7d\\x1e\\x7e\\x97\"\n\"\\x87\\x99\\x89\\xab\\x08\\x95\\xfb\\x17\\x07\\xfb\\x19\\x8c\\xd2\\x47\\xf7\\x1f\\x1b\\xf7\\x16\\xe3\\xd8\\xf7\\x06\\xc4\\x74\\xb7\\x5c\\xac\\x1f\\xce\\xaa\\xa6\"\n\"\\xb3\\xce\\x1a\\xcf\\x6d\\xbb\\x48\\xb0\\x1e\\xfb\\x13\\xd1\\x05\\x44\\xb2\\x78\\x9d\\xa8\\x1a\\xa9\\xa4\\x9f\\xb2\\xba\\xa3\\x73\\x56\\x92\\x1e\\x82\\xfb\\x82\"\n\"\\x15\\xba\\x72\\x99\\x7a\\x6b\\x1a\\x74\\x7f\\x79\\x69\\x73\\x1e\\xfb\\x27\\xdb\\x05\\x61\\xa2\\x7f\\x9b\\xaa\\x1a\\xa8\\x98\\x9d\\xa9\\x9d\\x1e\\x0e\\x2f\\xf8\"\n\"\\x18\\xf8\\xa4\\x15\\x9e\\x6e\\x63\\x96\\x65\\x1b\\x66\\x62\\x7f\\x78\\x6c\\x1f\\x3e\\xd8\\x46\\x47\\xda\\x3c\\x05\\x78\\x6d\\x81\\x66\\x65\\x1a\\x64\\x93\\x70\"\n\"\\xa1\\x63\\x1e\\x3d\\x3e\\xcf\\x46\\xda\\xd9\\x05\\x78\\xa6\\xb7\\x7f\\xb3\\x1b\\xb0\\x9b\\x90\\xa4\\xba\\x1f\\xd6\\x40\\xd0\\xcf\\x3e\\xd7\\x05\\x9f\\xae\\x94\"\n\"\\xad\\xb2\\x1a\\xb1\\x85\\xa3\\x76\\xb4\\x1e\\xd6\\xd6\\x46\\xd0\\x05\\xfb\\x49\\xfb\\x21\\x15\\xc5\\xbb\\x5a\\x51\\x4f\\x5b\\x5b\\x50\\x50\\x5b\\xbb\\xc6\\xc8\"\n\"\\xbb\\xba\\xc7\\x1f\\x0e\\xfc\\x2e\\x96\\x1d\\x0e\\xfb\\x28\\xf7\\x66\\xf8\\x69\\x15\\xf7\\x11\\x3b\\x07\\x89\\xbd\\xa5\\xa8\\xc3\\x95\\x08\\xb9\\x07\\x33\\x84\"\n\"\\x58\\x52\\x8f\\x34\\x08\\xfb\\x01\\x07\\xf7\\xfe\\x16\\xf7\\x11\\x3b\\x07\\x89\\xbd\\xa5\\xa8\\xc3\\x95\\x08\\xb9\\x07\\x33\\x84\\x58\\x52\\x8f\\x34\\x08\\xfb\"\n\"\\x01\\x07\\x0e\\x2f\\xe3\\x8f\\x1d\\xf7\\x69\\xfb\\x06\\x15\\xf7\\x3b\\xfb\\x26\\x05\\xf7\\x06\\x07\\x26\\xe4\\xf0\\xe4\\x05\\xf7\\x09\\x07\\xfb\\x3b\\xfb\\x29\"\n\"\\x05\\x0e\\xfb\\xcf\\xde\\x8f\\x1d\\x0e\\xfb\\xcf\\xf7\\x8b\\x79\\x0a\\x0e\\x66\\x40\\x1d\\xf7\\x77\\xf3\\x39\\x1d\\x0e\\x66\\x40\\x1d\\xf7\\x77\\xf7\\xb9\\xb6\"\n\"\\x1d\\x2f\\xf8\\xc1\\xf7\\xcb\\x15\\xfc\\xca\\x23\\xf8\\xca\\x06\\x0e\\x2f\\xf8\\x9f\\xa0\\x1d\\xfc\\xc7\\xf7\\x1a\\xf8\\xc7\\xf7\\x47\\x06\\x0e\\x2f\\xf8\\x9c\"\n\"\\xa0\\x1d\\xfb\\x73\\xfb\\x47\\xfb\\x08\\xf7\\x47\\xfb\\x74\\xf7\\x1a\\xf7\\x74\\xf7\\x47\\xf7\\x08\\xfb\\x47\\xf7\\x73\\xf7\\x47\\x06\\x0e\\x4b\\x0a\\x2f\\xf8\"\n\"\\xa5\\xf9\\x6d\\x15\\xfb\\xc3\\x06\\x4a\\x57\\x71\\x56\\x65\\x1f\\x6a\\x5f\\x79\\x53\\x54\\x1a\\xfb\\x15\\xe0\\x2e\\xf7\\x0e\\x85\\x1e\\xfc\\x5e\\xed\\xf9\\xe4\"\n\"\\xca\\xfd\\xe4\\xed\\xf9\\xe4\\xb6\\x07\\x0e\\xfb\\xbe\\xf7\\x45\\xf8\\x3d\\x15\\x44\\x53\\x54\\x45\\x46\\xc3\\x53\\xd0\\xd0\\xc3\\xc3\\xd0\\xd0\\x53\\xc3\\x48\"\n\"\\x1f\\x0e\\xcd\\xf7\\x11\\x37\\x0a\\x0e\\xfb\\x28\\xd3\\xf7\\x11\\x37\\x0a\\xe5\\x16\\x8e\\x1d\\xfb\\x28\\xd4\\xf9\\x6d\\x37\\x0a\\xec\\x16\\x8e\\x1d\\x2f\\xf7\"\n\"\\x93\\x79\\x0a\\xf7\\x63\\xf7\\x07\\x15\\xfb\\x3b\\xf7\\x26\\x05\\xfb\\x06\\x07\\xf0\\x32\\x26\\x32\\x05\\xfb\\x09\\x07\\xf7\\x3b\\xf7\\x28\\x05\\x0e\\xf7\\xf4\"\n\"\\xf7\\x86\\x3d\\x0a\\xf7\\xe1\\x3d\\x0a\\xf7\\xe1\\x3d\\x0a\\x0e\\xf7\\xf4\\xf7\\x34\\xf9\\x77\\x15\\x39\\x48\\x49\\x39\\x92\\x1d\\x64\\x65\\x6b\\xaa\\xb2\\xb1\"\n\"\\xaa\\xaa\\xb2\\x1f\\xf7\\xe4\\xda\\x15\\xfc\\x38\\xfd\\x8b\\x05\\xcd\\x06\\xf8\\x39\\xf9\\x8b\\x05\\x2f\\xfc\\x64\\x15\\x39\\x48\\x48\\x3a\\x39\\xce\\x49\\xde\"\n\"\\xdc\\xcf\\xcd\\xdb\\xdf\\x49\\xcd\\x37\\x1f\\x3b\\x04\\xb3\\xaa\\x6c\\x64\\x65\\x6b\\x6c\\x65\\x64\\x6b\\xaa\\xb2\\xb1\\xab\\xaa\\xb1\\x1f\\xf8\\x05\\xdb\\x15\"\n\"\\x39\\x48\\x49\\x39\\x92\\x1d\\x65\\x64\\x6b\\xaa\\xb2\\xb1\\xaa\\xaa\\xb2\\x1f\\x0e\\x66\\xf7\\x83\\xf7\\xe7\\x15\\x4a\\x84\\x7f\\x4f\\x61\\x1e\\x2d\\x49\\x70\"\n\"\\x5f\\x37\\x1a\\xfb\\x1c\\xf1\\x2d\\xf7\\x28\\xe1\\xce\\xa9\\xc6\\xb6\\x1e\\xac\\xb7\\x98\\xbb\\x8c\\xdd\\x08\\xfb\\x1c\\x06\\x31\\x61\\x54\\x46\\x4f\\x5e\\xbc\"\n\"\\xcd\\xb8\\x97\\x9e\\xc6\\xbb\\x1e\\xdb\\xcf\\xa2\\xb8\\x88\\xe0\\x08\\xfb\\x20\\xc2\\x15\\xf7\\x2a\\xf7\\x26\\xfb\\x2a\\x06\\x0e\\xfb\\xcf\\x9c\\xf9\\x89\\x21\"\n\"\\x1d\\xfb\\xcf\\xf7\\xd1\\x43\\x1d\\xfb\\xcf\\xf7\\x08\\xf9\\x89\\x23\\x0a\\xfb\\xcf\\xf7\\xae\\x40\\x0a\\xfb\\xcf\\xf7\\xcf\\xf9\\x63\\x28\\x0a\\xfb\\xcf\\xf7\"\n\"\\xbf\\xf9\\x80\\x44\\x0a\\xfb\\xcf\\xf7\\x72\\xf9\\x7b\\x27\\x0a\\xfb\\xcf\\xf7\\x14\\x41\\x1d\\xfb\\xcf\\xf7\\x3c\\xf9\\x96\\x2c\\x1d\\x0e\\xfb\\xcf\\xf7\\x36\"\n\"\\x16\\x55\\x21\\x05\\x95\\x9f\\x94\\x8d\\x81\\x1d\\x7c\\x49\\x1d\\xa8\\xca\\x05\\x0e\\xfb\\xcf\\xf7\\x2c\\xf9\\x89\\x32\\x0a\\xfb\\xcf\\xf7\\x3d\\x16\\x3e\\x6f\"\n\"\\x5c\\x57\\x50\\x1a\\x51\\xc2\\x66\\xe4\\xa7\\xa3\\x8e\\x92\\xa6\\x1e\\xba\\x07\\x87\\x79\\x78\\x89\\x77\\x1b\\x56\\x74\\x9b\\xad\\xbe\\xa3\\xa9\\xe0\\xbf\\x1f\"\n\"\\x0e\\xfb\\xcf\\xf7\\x6f\\xf8\\xf3\\x15\\xf7\\x00\\xf7\\x2a\\x05\\x3f\\x06\\x39\\x2a\\x39\\x47\\x1d\\xf7\\xf4\\xab\\x1d\\xf7\\xf4\\x6f\\x1d\\x0e\\xfb\\xaa\\xf7\"\n\"\\xd5\\xf7\\xe8\\x15\\xfb\\xb0\\x3d\\xf7\\xb0\\x06\\x93\\xf7\\x28\\x15\\x7c\\x99\\x86\\x94\\x9c\\x1a\\xf7\\x47\\x07\\xcd\\x5e\\xad\\x33\\x32\\x5e\\x65\\x41\\x89\"\n\"\\x1e\\xda\\x06\\xac\\x8f\\x9a\\x96\\xb3\\x1b\\xab\\x9c\\x80\\x77\\x80\\x86\\x83\\x81\\x86\\x1f\\x80\\x85\\x8b\\x8b\\x61\\x84\\x6a\\x85\\x18\\x4a\\x80\\x6c\\x6a\"\n\"\\x50\\x1a\\x50\\xb2\\x64\\xc7\\xaf\\xac\\x9b\\xa9\\xa8\\x1e\\x7b\\x8d\\x85\\x93\\x81\\x1e\\xe7\\x06\\x25\\xf7\\x16\\x15\\x5b\\x72\\x6f\\x61\\x6e\\x7a\\x9a\\xa3\"\n\"\\xa4\\x98\\x97\\xae\\x92\\x1e\\xa8\\x91\\xa1\\x8f\\x8f\\x8c\\x95\\x90\\x19\\x0e\\x66\\xf7\\x7a\\xf8\\x3b\\x15\\xf7\\xc6\\xfb\\x2a\\xfc\\x13\\x07\\x3b\\x53\\x05\"\n\"\\x32\\x07\\xdb\\xc3\\x05\\xfb\\x95\\xf8\\x99\\xf7\\x11\\xfc\\x03\\xf7\\x65\\x07\\xf7\\x39\\xf7\\x05\\x05\\xe3\\x07\\x0e\\xf7\\x16\\x5a\\x0a\\x0e\\xf7\\xf4\\xf9\"\n\"\\x04\\xf7\\xce\\x15\\xf7\\xbf\\xf7\\x11\\xfb\\xbf\\xf7\\x39\\xf7\\xdb\\xf7\\x11\\xfc\\x6b\\x57\\x06\\xbb\\x5b\\x64\\x9b\\x4b\\x1b\\xfb\\x46\\xfb\\x0f\\xfb\\x30\"\n\"\\xfb\\x76\\xfb\\x73\\xf7\\x10\\xfb\\x33\\xf7\\x41\\xcf\\xb1\\x9f\\xc9\\xbc\\x1f\\x50\\xf8\\x7e\\xf7\\x11\\xfb\\xee\\x07\\xfb\\x2a\\xc0\\x15\\x58\\x6e\\x68\\x75\"\n\"\\x55\\x1b\\x20\\x44\\xf0\\xf7\\x2d\\xf7\\x2d\\xd2\\xf0\\xf6\\xc1\\xae\\x75\\x58\\xa8\\x1f\\x0e\\xfb\\xaf\\xf7\\xe2\\xf7\\xe8\\x15\\xfb\\xc1\\x3d\\xf7\\xc1\\x06\"\n\"\\xfb\\x2b\\xf8\\x67\\x15\\x27\\x4f\\x4a\\x20\\x21\\xc8\\x4a\\xee\\xee\\xc8\\xcc\\xf3\\xf7\\x02\\x50\\xcb\\x26\\x1f\\x47\\x04\\xb9\\xa9\\x62\\x4b\\x4f\\x6c\\x61\"\n\"\\x5e\\x5d\\x6d\\xb5\\xc9\\xc9\\xa9\\xb4\\xb9\\x1f\\x0e\\xf7\\x85\\x58\\x0a\\x0e\\x30\\x1d\\x0e\\xf7\\x58\\xf8\\x4e\\x15\\xf7\\xb3\\xfb\\x20\\xfb\\xf8\\x07\\x53\"\n\"\\x63\\x05\\x3c\\x07\\xc3\\xb3\\x05\\xfb\\xba\\xf7\\x20\\xf7\\xff\\x07\\xc3\\xb3\\x05\\xda\\x07\\x0e\\x66\\x5c\\x0a\\x0e\\xf7\\xbc\\xf9\\x9c\\xf7\\x2c\\x15\\x63\"\n\"\\x7e\\x60\\x6f\\x5a\\x1b\\x63\\x68\\x9d\\xa9\\x79\\x1f\\x7d\\xa2\\x85\\xa4\\x8a\\xb9\\x08\\xf7\\xfe\\x06\\x8c\\x97\\x8b\\x90\\x92\\x1a\\xc1\\x83\\xbd\\x7e\\xb1\"\n\"\\x1e\\xed\\x67\\x34\\xc6\\xfb\\x03\\x1b\\x3f\\x4e\\x71\\x59\\x60\\x1f\\xbe\\x5a\\x4a\\xa4\\x3a\\x1b\\xfb\\x3a\\x65\\x1d\\xfb\\x46\\xf0\\xfb\\x00\\xf7\\x3a\\xdb\"\n\"\\xcb\\xa4\\xbd\\xbe\\x1f\\x5a\\xb7\\xc9\\x71\\xd4\\x1b\\xf7\\x0d\\xed\\xd0\\xf5\\xaa\\x1f\\xfd\\x04\\xf7\\xb0\\x70\\x0a\\xf7\\xa1\\xfb\\x09\\x15\\x8e\\xab\\x90\"\n\"\\x9e\\x94\\x9d\\x08\\xac\\x9c\\xae\\xa0\\xb1\\x1b\\xac\\xac\\x7a\\x6f\\x9e\\x1f\\x98\\x78\\x91\\x77\\x8f\\x64\\x08\\x0e\\x66\\xf7\\xb1\\xf7\\xf1\\x15\\x98\\x06\"\n\"\\xe1\\xbe\\x5d\\x3d\\x45\\x5b\\x58\\x46\\x89\\x1f\\x77\\x06\\x89\\x86\\x8b\\x8a\\x85\\x1f\\xfb\\x04\\x07\\x87\\xac\\x9c\\x89\\xa1\\x1b\\xf7\\x17\\xe2\\xf0\\xf7\"\n\"\\x2c\\xc9\\x7d\\xb1\\x66\\xad\\x1f\\x71\\xa3\\x79\\x95\\x68\\x92\\x08\\xc4\\xa1\\xa9\\xba\\xce\\x1a\\xf6\\x2d\\xd6\\xfb\\x1b\\x46\\x48\\x78\\x6c\\x64\\x1e\\x60\"\n\"\\x69\\x79\\x5a\\x3d\\x1a\\xfc\\x9a\\xf7\\x20\\xf8\\xad\\x07\\xbd\\xab\\xa8\\xc2\\xc8\\xb0\\x6c\\x57\\x55\\x66\\x69\\x4e\\x8a\\x1e\\x82\\x06\\x0e\\xfb\\xcf\\xf7\"\n\"\\x1e\\xf8\\xd1\\x3c\\x0a\\x0e\\x4b\\xb3\\xf8\\x0b\\x15\\x3e\\xf8\\x3f\\xfb\\x68\\xd8\\xf7\\xb5\\x07\\x0e\\x66\\xf7\\x54\\xfb\\x70\\x15\\xf7\\x7f\\x07\\x70\\xa7\"\n\"\\xa9\\x80\\xb5\\x1b\\xb9\\xa9\\x99\\xb3\\xb3\\x1f\\x63\\xa3\\xa3\\x7d\\xba\\x1b\\xa7\\x9e\\x90\\x97\\xa2\\x1f\\xe2\\x07\\x88\\x81\\x87\\x8a\\x85\\x1b\\x73\\x85\"\n\"\\x9a\\xc5\\x1f\\xf8\\x1a\\x55\\x0a\\x4d\\x61\\x5f\\x50\\x6f\\x73\\x97\\xa0\\x7d\\x1e\\x7d\\x9f\\x87\\x9d\\xb2\\x1a\\xf7\\xe2\\xfb\\x20\\xfd\\x8c\\x07\\x0e\\xf7\"\n\"\\xf4\\xf7\\xc3\\xf9\\x1f\\x15\\xf7\\x19\\xd9\\xfc\\x01\\x3d\\xf7\\x1d\\xfc\\x0e\\xea\\x06\\xf8\\x58\\x16\\xde\\xf7\\xf1\\x05\\xfb\\xf1\\xe6\\xf8\\x5c\\xfb\\x1d\"\n\"\\x07\\x37\\xfb\\xf2\\x35\\xf7\\xf2\\x05\\xfb\\x1d\\xfc\\x5c\\xe6\\xf7\\xf1\\x06\\xe0\\xfb\\xf1\\x05\\x0e\\xd5\\x5d\\x0a\\xf7\\x4e\\xf7\\x16\\xf8\\xd1\\x3c\\x0a\"\n\"\\xf8\\xb7\\xf7\\x22\\x46\\x1d\\xf7\\x3e\\xfd\\x0e\\xad\\x1d\\xa3\\x9c\\xa8\\xa0\\x08\\xdb\\xc2\\xa1\\xaa\\xc7\\x1a\\xe1\\x55\\xbb\\x2a\\x27\\x53\\x58\\x2f\\x88\"\n\"\\x8b\\x84\\x8c\\x83\\x1e\\xe7\\x06\\x8a\\x92\\x8a\\x92\\x8d\\x1a\\xb8\\xa1\\xa5\\xb1\\xb2\\xa1\\x73\\x63\\x5e\\x7d\\x7c\\x28\\x48\\x1e\\x3d\\x59\\x74\\x65\\x88\"\n\"\\x3a\\x08\\xf7\\xca\\x06\\x0e\\x4b\\xf8\\xa3\\xf2\\x15\\xfc\\x6b\\xfb\\x0b\\xf8\\x6b\\x06\\xf8\\x54\\x04\\xfb\\x44\\xf7\\x44\\xfb\\x0b\\xfb\\x44\\xfb\\x44\\xfb\"\n\"\\x0b\\xf7\\x44\\xfb\\x44\\xf7\\x0b\\xf7\\x44\\xf7\\x44\\x06\\x0e\\x9e\\xf7\\x76\\xf7\\x20\\x15\\xf7\\x4f\\x06\\xf7\\x1b\\xe0\\xe8\\xf7\\x29\\xd5\\x77\\xc3\\x61\"\n\"\\xb4\\x1f\\xb2\\x63\\x58\\x9c\\x39\\x1b\\xfb\\x40\\xf7\\x0c\\xfb\\x2a\\x32\\x1d\\xf7\\x9d\\xa1\\x1d\\xf7\\x4e\\xf7\\x16\\xf8\\xd1\\x3c\\x0a\\xf8\\xbd\\xf7\\x22\"\n\"\\x46\\x1d\\xf7\\x23\\x6f\\x0a\\x4b\\xf8\\xaa\\xf7\\xb7\\xc0\\x1d\\xfb\\xc4\\xf7\\xc2\\xa8\\x0a\\xfb\\x10\\xfb\\xfe\\x3e\\x0a\\xfc\\x04\\xf7\\x48\\x21\\x0a\\x3b\"\n\"\\xfc\\x19\\xdb\\x06\\xfb\\x2b\\x04\\x3b\\xfc\\x19\\xdb\\x06\\x0e\\xfb\\x8c\\xf7\\x5c\\xf9\\x42\\x15\\x37\\x47\\x47\\x38\\x38\\xcf\\x46\\xdd\\xe0\\xcf\\xce\\xe0\"\n\"\\xde\\x47\\xcf\\x38\\x1f\\x4c\\x04\\xbb\\xb3\\x64\\x5a\\x59\\x63\\x64\\x59\\x5c\\x63\\xb3\\xbb\\xbc\\xb3\\xb3\\xbc\\x1f\\x0e\\x66\\xf7\\x5a\\x21\\x0a\\xfb\\x20\"\n\"\\xfe\\x47\\x66\\x1d\\x50\\xc3\\x1d\\xf7\\x0d\\xf7\\x38\\xf7\\x39\\x2b\\xf7\\x0e\\xfb\\x16\\x47\\x5b\\x8b\\x1d\\xf7\\x4e\\xf7\\x1d\\xf8\\x6b\\x5f\\x0a\\xf8\\x6b\"\n\"\\xf7\\x4a\\x46\\x1d\\xf7\\x0a\\x6f\\x0a\\xfb\\xcf\\xf7\\xd1\\xf8\\x01\\xad\\x1d\\xa2\\x9b\\xa9\\xa1\\x08\\xdb\\xc2\\xa1\\xaa\\xc7\\x1a\\xe1\\x55\\xbb\\x2a\\x27\"\n\"\\x53\\x58\\x2f\\x88\\x8b\\x84\\x8c\\x83\\x1e\\xe7\\x06\\x8a\\x92\\x8a\\x92\\x8d\\x1a\\xb8\\xa1\\xa5\\xb1\\xb1\\xa2\\x73\\x63\\x5e\\x7c\\x7b\\x29\\x49\\x1e\\x3d\"\n\"\\x59\\x74\\x65\\x88\\x3a\\x08\\xf7\\xca\\x06\\x0e\\xe4\\xf7\\xb4\\xf7\\xcd\\x15\\xe6\\x06\\xb5\\x9e\\x7c\\x69\\x1f\\x7a\\x07\\x8a\\x82\\x8b\\x80\\x85\\x1a\\x5d\"\n\"\\x8d\\x7f\\x98\\x74\\x1e\\xf1\\xa0\\x06\\x7d\\x93\\x86\\x92\\x9e\\x1a\\x88\\xf7\\x14\\x89\\x92\\x58\\xa3\\x08\\xbb\\xa3\\xa0\\xac\\xbe\\x1a\\xd7\\x5e\\xb8\\x3f\"\n\"\\x1e\\xfb\\x81\\xfc\\x4f\\xeb\\x06\\xf7\\x92\\x04\\xf7\\x00\\xf1\\x07\\xbc\\x9b\\x7e\\x62\\x62\\x7b\\x7e\\x5a\\x1f\\x76\\xf7\\xf1\\x15\\xfb\\x67\\xfb\\x40\\xfb\"\n\"\\x40\\xfb\\x66\\xfb\\x65\\xf7\\x40\\xfb\\x42\\xf7\\x62\\xf7\\x6c\\xf7\\x3f\\xf7\\x3d\\xf7\\x6a\\xf7\\x67\\xfb\\x3f\\xf7\\x3f\\xfb\\x67\\x1f\\x8a\\x43\\x15\\xf7\"\n\"\\x3c\\xf7\\x1d\\xfb\\x1f\\xfb\\x3f\\xfb\\x42\\xfb\\x1c\\xfb\\x1d\\xfb\\x40\\xfb\\x38\\xfb\\x1d\\xf7\\x21\\xf7\\x3e\\xf7\\x3f\\xf7\\x1c\\xf7\\x1f\\xf7\\x3c\\x1f\"\n\"\\x0e\\x4b\\xf8\\xb4\\xf7\\xb7\\x15\\xfc\\x8c\\xfb\\x0b\\xf8\\x8c\\x06\\x0e\\x66\\xf8\\x44\\xf9\\x5a\\x15\\x58\\xad\\x34\\x57\\x83\\x8e\\x85\\x8e\\x8a\\x8c\\x19\"\n\"\\x6d\\x9c\\x7c\\x93\\x7a\\x93\\x72\\x94\\x19\\x48\\x5c\\xbc\\x73\\x99\\x83\\xa6\\x7b\\x19\\x45\\x5f\\xb5\\x66\\xd8\\xb9\\xb1\\x75\\xa9\\x6c\\xa6\\x60\\x19\\x9a\"\n\"\\x64\\x77\\x8f\\x71\\x1b\\x60\\x5f\\x7e\\x73\\x64\\x1f\\x3f\\x5e\\x66\\x3e\\xfb\\x02\\x1a\\xfb\\x48\\xef\\xfb\\x00\\xf7\\x3b\\xe1\\xd4\\xaa\\xc3\\xba\\x1e\\xb4\"\n\"\\xbe\\x9f\\xcd\\xe3\\x1a\\xf7\\x3a\\x46\\xf7\\x0f\\xfb\\x2c\\xf1\\x1e\\x5d\\xfb\\x7b\\x15\\xd8\\xbc\\x49\\x21\\x27\\x59\\x48\\x3f\\x3e\\x5a\\xcd\\xf3\\xf1\\xbc\"\n\"\\xce\\xd8\\x1f\\x0e\\x4b\\xf8\\x39\\xf8\\x50\\x15\\xfb\\x15\\xfb\\x15\\xfb\\x15\\xf7\\x15\\x37\\x36\\xf7\\x15\\xfb\\x14\\xfb\\x14\\xfb\\x14\\xdf\\x37\\xf7\\x14\"\n\"\\xf7\\x14\\xf7\\x14\\xfb\\x15\\xdf\\xdf\\xfb\\x14\\xf7\\x15\\xf7\\x15\\xf7\\x15\\x05\\x0e\\xfb\\xcf\\xf7\\x11\\xf8\\x6b\\x5f\\x0a\\x0e\\xe4\\xf8\\xbc\\xf8\\x43\"\n\"\\x15\\x88\\xb4\\x83\\xa3\\x78\\xa5\\x08\\xb8\\x69\\x54\\xa4\\x48\\x1b\\xfb\\x11\\x3d\\x32\\xfb\\x23\\xfb\\x23\\xd8\\x32\\xf7\\x10\\xf7\\x04\\xd4\\xcb\\xf4\\x90\"\n\"\\x1f\\x2f\\x06\\x53\\x86\\x69\\x6d\\x52\\x1b\\x45\\x62\\xc1\\xe9\\xe9\\xb6\\xc3\\xd2\\xc0\\xa8\\x73\\x55\\x96\\x1f\\x2e\\xf7\\xcc\\x15\\xfb\\x67\\xfb\\x40\\xfb\"\n\"\\x40\\xfb\\x66\\xfb\\x65\\xf7\\x40\\xfb\\x42\\xf7\\x62\\xf7\\x6c\\xf7\\x3f\\xf7\\x3d\\xf7\\x6a\\xf7\\x67\\xfb\\x3f\\xf7\\x3f\\xfb\\x67\\x1f\\x8a\\x43\\x15\\xf7\"\n\"\\x3c\\xf7\\x1d\\xfb\\x1f\\xfb\\x3f\\xfb\\x42\\xfb\\x1c\\xfb\\x1d\\xfb\\x40\\xfb\\x38\\xfb\\x1d\\xf7\\x21\\xf7\\x3e\\xf7\\x3f\\xf7\\x1c\\xf7\\x1f\\xf7\\x3c\\x1f\"\n\"\\x0e\\xd5\\x20\\x0a\\xf7\\x25\\xf8\\x0f\\x20\\x1d\\xd5\\x20\\x0a\\x57\\xf8\\x0f\\x4f\\x1d\\xd5\\x20\\x0a\\x64\\xf8\\x01\\x25\\x1d\\xd5\\x20\\x0a\\xfb\\x24\\xf8\"\n\"\\x0f\\x21\\x1d\\xd5\\x20\\x0a\\x8c\\xf8\\x1c\\x2c\\x1d\\x0e\\xd5\\x20\\x0a\\xf7\\x0b\\xf8\\x07\\x15\\x6b\\x87\\x7f\\x7b\\x77\\x1b\\x84\\x77\\x53\\x0a\\x6b\\x86\"\n\"\\x4f\\x0a\\x88\\x1f\\xc9\\x87\\x0a\\xa0\\x9d\\x87\\x9b\\x1b\\xc6\\xaa\\xb5\\xe0\\x90\\x1f\\x0e\\xd5\\xf8\\x0f\\x74\\x15\\xf7\\x4a\\x8f\\xf7\\x08\\xf2\\x93\\xf7\"\n\"\\x39\\x08\\x45\\x0a\\xf7\\x23\\x06\\x86\\xca\\x7e\\xb3\\x6c\\xb4\\x08\\xd5\\x53\\x31\\x8f\\x0a\\xfb\\x27\\xfb\\x80\\xfb\\x15\\xb1\\x24\\xd4\\x45\\x1f\\xbb\\x5e\"\n\"\\xb2\\x79\\xe8\\x7b\\x60\\x38\\x18\\x94\\x9e\\x95\\x8e\\x81\\x1d\\x7b\\x50\\x0a\\x9e\\x22\\x0a\\xf7\\x8f\\xf9\\xbf\\x20\\x1d\\x9e\\x22\\x0a\\xcb\\xf9\\xbf\\x2b\"\n\"\\x1d\\x9e\\x22\\x0a\\xd9\\xf9\\xb1\\x25\\x1d\\x9e\\x22\\x0a\\x76\\xf9\\xbf\\x21\\x1d\\x29\\x1d\\xd8\\x39\\x0a\\x29\\x1d\\xfb\\x10\\xfa\\x3c\\x23\\x0a\\x6b\\x0a\"\n\"\\x29\\x1d\\xfb\\x73\\xfa\\x3c\\x21\\x1d\\xd5\\x29\\x0a\\xf7\\xa0\\xf8\\x3c\\x15\\x6b\\x87\\x7f\\x7b\\x76\\x1b\\x84\\x78\\x53\\x0a\\x6a\\x87\\x8c\\x79\\x1b\\x53\"\n\"\\x51\\x1d\\x95\\x94\\x43\\x0a\\xf7\\x16\\x24\\x0a\\xf7\\x1f\\xf7\\xd7\\x20\\x1d\\xf7\\x16\\x24\\x0a\\x58\\xf7\\xd7\\x23\\x0a\\xf7\\x16\\x24\\x0a\\x65\\xf7\\xc9\"\n\"\\x25\\x1d\\xf7\\x16\\x24\\x0a\\xfb\\x1d\\xf7\\xd7\\x21\\x1d\\xf7\\x16\\x24\\x0a\\xf7\\x0d\\xf7\\xcf\\x15\\x6b\\x87\\x80\\xaf\\x1d\\x97\\x6a\\x86\\x4f\\x0a\\x88\"\n\"\\x1f\\xc9\\x06\\xab\\x90\\x97\\x98\\xa3\\x1b\\x94\\x94\\x89\\x87\\x97\\x5f\\x1d\\xaa\\xb5\\xe0\\x90\\x1f\\x0e\\x9e\\x2c\\x0a\\x35\\xf7\\xab\\x2a\\x0a\\xd5\\x25\"\n\"\\x0a\\xfb\\x2a\\xf7\\x63\\x20\\x1d\\xd5\\x25\\x0a\\xfb\\xe8\\xf7\\x63\\x23\\x0a\\xd5\\x25\\x0a\\xfb\\xdb\\xf7\\x55\\x25\\x1d\\xd5\\x25\\x0a\\xfc\\x3e\\xf7\\x63\"\n\"\\x21\\x1d\\x9e\\x2a\\x1d\\xc8\\x39\\x0a\\x9e\\x2a\\x1d\\xfb\\x07\\x38\\x0a\\x66\\x31\\x0a\\xfb\\x6f\\xf7\\x4a\\x2a\\x0a\\x2f\\x26\\x1d\\xc3\\xf8\\x8a\\x20\\x1d\"\n\"\\x2f\\x26\\x1d\\xfb\\x1a\\xf8\\x8a\\x7d\\x0a\\x2f\\x26\\x1d\\xfb\\x0d\\xf8\\x7c\\x25\\x1d\\x2f\\x26\\x1d\\xfb\\x73\\xf8\\x8a\\x21\\x1d\\x2f\\x26\\x1d\\x39\\xf8\"\n\"\\x97\\x2c\\x1d\\x0e\\x2f\\x26\\x1d\\xab\\xf8\\x82\\x15\\x6b\\x87\\xa7\\x0a\\x85\\x4d\\x1d\\x96\\x98\\xa3\\x1b\\x94\\x95\\x43\\x0a\\x2f\\xf7\\xb7\\x74\\x15\\xf7\"\n\"\\x11\\x8a\\xea\\xe1\\x96\\xf7\\x11\\x08\\x5e\\x1d\\x55\\x1b\\x6c\\x6d\\x97\\x9f\\x7b\\x1f\\x73\\xa8\\x7d\\xbf\\xc4\\x1a\\xbe\\x95\\xba\\x9c\\xab\\x1e\\x5b\\x1d\"\n\"\\xf7\\x1a\\x06\\x47\\x0a\\xfb\\x38\\xd7\\x29\\xf7\\x1e\\x79\\x1f\\x60\\x36\\x05\\x94\\x9e\\x96\\x8e\\x9e\\x1b\\xaa\\xa6\\x1d\\x71\\x92\\xa2\\x59\\x34\\x0a\\xc9\"\n\"\\xaa\\x85\\xb8\\x1b\\xde\\xb9\\x52\\x0a\\x7c\\x7e\\x89\\x86\\x7e\\x1f\\x0e\\x2f\\x27\\x1d\\xb3\\xf8\\x4a\\x20\\x1d\\x2f\\x27\\x1d\\xfb\\x2a\\xf8\\x4a\\x7d\\x0a\"\n\"\\x2f\\x27\\x1d\\xfb\\x1d\\xf8\\x3c\\x25\\x1d\\x2f\\x5b\\x0a\\x30\\x1d\\xde\\x43\\x1d\\x30\\x1d\\xfb\\x0a\\xf9\\x89\\x23\\x0a\\xf7\\x63\\x6e\\x0a\\x30\\x1d\\xfb\"\n\"\\x6d\\xf9\\x89\\x21\\x1d\\x66\\x37\\x1d\\xf7\\x69\\xf7\\x65\\x15\\x6b\\x87\\xa7\\x0a\\x85\\x4d\\x1d\\x96\\x98\\xa3\\x1b\\x94\\x95\\x43\\x0a\\x66\\x28\\x1d\\xf7\"\n\"\\x1f\\xf7\\xd5\\x20\\x1d\\x66\\x28\\x1d\\x58\\xf7\\xd5\\x23\\x0a\\x66\\x28\\x1d\\x65\\xf7\\xc7\\x25\\x1d\\x66\\x28\\x1d\\xfb\\x1d\\xf7\\xd5\\x21\\x1d\\x66\\x28\"\n\"\\x1d\\xf7\\x0a\\xf7\\xcd\\x15\\x6b\\x87\\x7f\\x7b\\x77\\x1b\\x83\\x78\\x8e\\x8e\\x84\\x4d\\x1d\\x97\\x98\\xa2\\x1b\\x95\\xa2\\x1d\\x9f\\x9e\\x87\\x9a\\x1b\\xc7\"\n\"\\xaa\\xb5\\xe0\\x8f\\x1f\\x0e\\x2f\\x34\\x1d\\x66\\xf7\\x85\\x2a\\x0a\\x66\\x26\\x0a\\xb0\\x43\\x1d\\x66\\x26\\x0a\\xfb\\x2d\\xf9\\x89\\x4f\\x1d\\x66\\x26\\x0a\"\n\"\\xfb\\x20\\x41\\x1d\\x66\\x26\\x0a\\xfb\\x82\\xf9\\x89\\x21\\x1d\\x2f\\x2e\\x0a\\xfb\\x12\\xf7\\x6d\\x20\\x1d\\x2f\\x2e\\x0a\\xfb\\xc3\\xf7\\x5f\\x25\\x1d\\xfb\"\n\"\\x28\\x36\\x0a\\xfb\\x30\\xf7\\x48\\x2a\\x0a\\xfb\\x90\\xb5\\xf8\\xde\\x15\\xfb\\xd3\\xed\\xf7\\x36\\x07\\xc8\\xa0\\xa6\\xbb\\xaf\\x9b\\x79\\x62\\x1e\\xfb\\x53\"\n\"\\xed\\xf7\\x5a\\x07\\xb3\\x87\\xa1\\x7f\\x9d\\x1e\\xa9\\x78\\x63\\x9e\\x5f\\x1b\\x5f\\x6d\\x7d\\x69\\x71\\x1f\\xb3\\x07\\x0e\\x9d\\x6b\\x1d\\x0e\\xf7\\xbb\\x6a\"\n\"\\x1d\\xf3\\x39\\x1d\\x0e\\xf7\\xbb\\x6a\\x1d\\xf7\\xb9\\xb6\\x1d\\xf7\\x4e\\xf8\\xc8\\x2f\\x1d\\xfc\\xa2\\xfb\\x22\\x3c\\x0a\\xf9\\x69\\xfb\\xe9\\x71\\x1d\\x66\"\n\"\\x65\\x73\\x0a\\x0e\\xf7\\x4e\\xf8\\xe9\\x2f\\x1d\\xcd\\xfc\\x77\\x61\\x1d\\x3c\\x3c\\x51\\x5a\\x49\\x62\\x9c\\x7a\\x0a\\x3a\\xf7\\x1a\\x15\\xb1\\xa5\\x75\\x6a\"\n\"\\x6a\\x71\\x74\\x65\\x66\\xb7\\x1d\\xb0\\x1f\\xfb\\x3c\\x04\\xb4\\xa5\\x70\\x5e\\x62\\x71\\x70\\x62\\x62\\x71\\xa6\\xb5\\xb6\\xa5\\xa7\\xb4\\x1f\\xfc\\xa3\\xf7\"\n\"\\xa5\\x15\\xa6\\x9d\\x89\\x89\\x94\\x1f\\xa7\\x84\\x9d\\x74\\x6e\\x1a\\x68\\x71\\x72\\x67\\x61\\x76\\xa0\\xb8\\x89\\x1e\\x2f\\x06\\x30\\x8c\\xc3\\x57\\xec\\x1b\"\n\"\\xec\\xca\\xc1\\xdf\\xba\\x75\\xad\\x5f\\xa1\\x1f\\xad\\xa0\\x9d\\xaa\\xb0\\x1a\\xd2\\x52\\xb9\\x33\\x57\\x60\\x7a\\x6b\\x72\\x1e\\x78\\x74\\x84\\x72\\x88\\x59\"\n\"\\x08\\xe4\\x06\\xc2\\x8c\\x9a\\x9e\\xb4\\x1b\\xab\\xa0\\x76\\x6a\\x65\\x71\\x77\\x59\\x1f\\x81\\x06\\x0e\\xf7\\x4e\\xf8\\xdc\\x2f\\x1d\\xda\\xfc\\x77\\x61\\x1d\"\n\"\\x3d\\x3c\\x51\\x5a\\x49\\x62\\x9b\\x7a\\x0a\\x3b\\xf7\\x1a\\x15\\xb0\\xa5\\x74\\x6b\\x6a\\x71\\x74\\x65\\x67\\x71\\xa3\\xab\\xab\\xa5\\xa2\\xb0\\x1f\\x8a\\xfb\"\n\"\\x3c\\x15\\xb4\\xa5\\x70\\x5e\\x62\\x71\\x70\\x62\\x62\\x71\\xa6\\xb5\\xb6\\xa5\\xa7\\xb4\\x1f\\xfc\\x08\\xf8\\xa4\\x15\\xfb\\x77\\x06\\x65\\xfb\\x81\\x05\\xd7\"\n\"\\x06\\xa0\\x94\\x9e\\x97\\xa4\\x1b\\xb7\\xa4\\x6c\\x57\\x59\\x71\\x6c\\x61\\x66\\x76\\x9d\\xae\\x89\\x1f\\x39\\x06\\x42\\x8a\\xc5\\x57\\xde\\x1b\\xe7\\xc9\\xca\"\n\"\\xe7\\xe2\\x55\\xc7\\x3c\\x6f\\x76\\x84\\x78\\x73\\x1f\\x98\\xe4\\x05\\xf7\\x44\\x06\\x0e\\xf7\\x4e\\xf8\\xbf\\x2f\\x1d\\xe7\\xfc\\x77\\x71\\x1d\\x65\\x66\\x73\"\n\"\\x0a\\xfb\\xc1\\xf8\\xa4\\x15\\xfb\\xbf\\x40\\xf7\\x67\\x06\\x2f\\xfb\\x05\\x64\\x2f\\x79\\xfb\\x26\\x08\\xe0\\x06\\x93\\xf7\\x1b\\xb7\\xf2\\xef\\xf7\\x0e\\x08\"\n\"\\x0e\\xf7\\xf4\\x6f\\x1d\\xf7\\x9c\\xf7\\xe0\\x20\\x1d\\xd5\\x20\\x0a\\xd4\\xf8\\x06\\x42\\x0a\\xd5\\x20\\x0a\\x0e\\xd5\\x20\\x0a\\xfb\\x60\\xf7\\x40\\x23\\x1d\"\n\"\\xd5\\x20\\x0a\\xf7\\x29\\xf7\\xe9\\x28\\x0a\\xd5\\xf8\\x89\\xf7\\x27\\x15\\xbb\\xfb\\x27\\x05\\xd6\\x06\\x3d\\x6f\\x5d\\x58\\x50\\x1a\\x4e\\xc0\\x69\\xea\\xa6\"\n\"\\xa0\\x8e\\x91\\xa6\\x9f\\x0a\\x74\\x9b\\xb0\\xbc\\xb7\\xbd\\xd0\\xa9\\x1f\\x71\\x0a\\x0e\\xd5\\x20\\x0a\\x89\\xf8\\x1c\\x2c\\x1d\\xa9\\xf7\\x3d\\x20\\x1d\\xd5\"\n\"\\x5e\\x0a\\xd5\\x2d\\x0a\\x6e\\xf8\\x5a\\x20\\x1d\\xd5\\x2d\\x0a\\xfb\\x04\\xf7\\xc4\\x7c\\x0a\\xd5\\x2d\\x0a\\xfb\\x70\\xf8\\x5a\\x2b\\x1d\\xd5\\x2d\\x0a\\xfb\"\n\"\\x0b\\xf8\\x4c\\x27\\x0a\\x9e\\x62\\x0a\\xd5\\x6e\\x1d\\xa8\\xf9\\x29\\x2a\\x0a\\xd5\\x5d\\x0a\\x67\\x8f\\x16\\xf8\\xf0\\x06\\xfb\\x97\\xf9\\x0a\\x05\\x33\\x06\"\n\"\\xb7\\x25\\x15\\xf7\\x4b\\xfc\\x5b\\x05\\xfc\\x01\\x06\\x0e\\x9e\\x22\\x0a\\xf7\\x8b\\xf9\\xb6\\x74\\x0a\\x9e\\x22\\x0a\\xf7\\x3b\\xf9\\x29\\x15\\xf7\\x00\\x3a\"\n\"\\x0a\\x9e\\x22\\x0a\\xf7\\x3f\\xf9\\xb1\\x27\\x0a\\x9e\\x22\\x0a\\xf7\\x9d\\xf9\\x99\\x28\\x0a\\xd6\\xf8\\x1e\\xfb\\xb3\\x15\\x86\\xb6\\xb0\\x89\\xa9\\x1b\\xc7\"\n\"\\xb6\\x9c\\xad\\xa2\\x1f\\x9d\\xa6\\x92\\xac\\xd0\\x1a\\xf8\\xef\\x07\\xea\\x77\\xc3\\x58\\xb8\\x1e\\xb0\\x62\\x54\\x9e\\x4d\\x1b\\x2d\\x4a\\x67\\x39\\x58\\x1f\"\n\"\\xf5\\x33\\x0a\\xf8\\x56\\x07\\xb9\\x9c\\xb2\\xaa\\xa5\\x1e\\xa1\\xa6\\xab\\x95\\xbe\\x1b\\xea\\xae\\x69\\x2c\\x1f\\xfc\\xb7\\x07\\x51\\x80\\x7e\\x5e\\x79\\x7e\"\n\"\\x8d\\x8f\\x74\\x1e\\x0e\\x9e\\xf7\\x79\\x99\\x1d\\xf8\\x6b\\x06\\x35\\x64\\x64\\x60\\x53\\xbb\\x1d\\xa6\\x1e\\xba\\x07\\x88\\x79\\x78\\x89\\x77\\x1b\\x58\\x73\"\n\"\\x9c\\xaf\\xba\\xb0\\xb6\\xd2\\xb2\\x1f\\xf7\\x11\\xfc\\x1f\\x07\\x0e\\x9e\\x22\\x0a\\x0e\\xf7\\x61\\xf8\\x00\\x4e\\x1d\\xfb\\x66\\xf8\\xf0\\x23\\x1d\\xd5\\x84\"\n\"\\x1d\\xf7\\x96\\xf9\\x1a\\x55\\x1d\\xfb\\x66\\xf8\\x22\\x23\\x1d\\x2f\\xa9\\xf7\\xd2\\x15\\x73\\x47\\x05\\xd3\\x06\\x98\\x4b\\x9f\\x57\\xaa\\x5d\\x08\\x48\\xb8\"\n\"\\xde\\x5f\\xda\\x1b\\xb2\\xad\\x93\\xa5\\xda\\x1f\\xf7\\x29\\x07\\x61\\x3d\\x6f\\x81\\x63\\x1b\\x4f\\x5b\\xbe\\xe6\\x71\\x1f\\xf7\\x49\\x06\\xa4\\xcf\\x05\\xfb\"\n\"\\x6d\\x06\\x89\\x95\\x8b\\x92\\x95\\x1a\\x99\\x8c\\x96\\x8d\\x9b\\x1e\\xf7\\x84\\x06\\xa3\\xcf\\x05\\xfb\\x8f\\x06\\xe7\\xa3\\xb8\\xbb\\xc9\\x1b\\xb9\\xb0\\x7a\"\n\"\\x59\\xca\\x1f\\xb8\\xf7\\x15\\x05\\xc0\\x43\\x63\\x9a\\x45\\x1b\\xfb\\x24\\x22\\x28\\xfb\\x3f\\x66\\x1f\\x5b\\x06\\x73\\x47\\x05\\xca\\x06\\x8a\\x7f\\x8b\\x82\"\n\"\\x7f\\x1a\\x7f\\x8b\\x82\\x8d\\x7d\\x1e\\x0e\\x5c\\xd5\\x16\\xf7\\x2a\\xf8\\xf0\\xf7\\xfe\\xf7\\x11\\xfc\\x94\\x06\\x0e\\xf7\\x16\\x35\\x1d\\xfb\\x49\\xfa\\x35\"\n\"\\x15\\x53\\x06\\x5c\\x82\\x75\\x78\\x5e\\x1b\\x5e\\x72\\xa0\\xb8\\x85\\x1f\\x53\\x81\\x06\\x3f\\xc3\\x52\\xd7\\xd6\\xc4\\xc4\\xd6\\x1e\\x0e\\xf7\\x16\\x35\\x1d\"\n\"\\xfc\\x09\\xfa\\x3e\\x2b\\x1d\\xf7\\x16\\x35\\x1d\\xfc\\x0f\\x51\\x15\\xfb\\x04\\xce\\x07\\x8c\\x59\\x75\\x6d\\x5d\\x82\\x08\\x5d\\x07\\xd1\\x8d\\xc2\\xcb\\x35\"\n\"\\x0a\\xf2\\x07\\x0e\\xf7\\x16\\x35\\x1d\\xfb\\xab\\xfa\\x30\\x27\\x0a\\xd5\\xf8\\x8f\\xf7\\xdf\\x15\\xfb\\xdf\\xf7\\x2a\\xf8\\xad\\xce\\xdb\\x48\\xf7\\x04\\xfb\"\n\"\\x2a\\xfb\\x04\\xfb\\xb5\\xf7\\x04\\xfb\\x2a\\xfb\\x04\\x48\\x3b\\xce\\xfc\\xad\\x2e\\x1d\\x07\\xf7\\xb5\\xf7\\x11\\x15\\xfb\\xb5\\xdc\\xf7\\xb5\\x06\\x0e\\xd5\"\n\"\\xf8\\x8f\\x55\\x1d\\xe7\\xf8\\xf1\\x2b\\x1d\\xf7\\x1d\\xf7\\x6a\\x31\\x1d\\xf7\\xfd\\x7a\\x1d\\x0e\\x29\\x1d\\xc5\\xfa\\x33\\x74\\x0a\\x29\\x1d\\x77\\xfa\\x2e\"\n\"\\x27\\x0a\\x29\\x1d\\xc8\\xfa\\x16\\x15\\xfb\\xa4\\x3c\\xf7\\xa4\\x06\\x0e\\xf7\\x69\\x5c\\x1d\\xdf\\x06\\x3e\\x62\\x67\\x60\\x57\\x1a\\x4f\\xbe\\x66\\xdd\\xa2\"\n\"\\xa0\\x8e\\x91\\xa5\\x1e\\xba\\x07\\x88\\x7b\\x76\\x89\\x7e\\x1b\\x66\\x71\\xa0\\xa9\\xb6\\xab\\xba\\xc4\\xb4\\x1f\\x0e\\x29\\x1d\\x0e\\x6b\\x0a\\xfb\\x42\\xf7\"\n\"\\xfd\\x31\\x1d\\xfb\\x66\\xf9\\x6d\\x23\\x1d\\x29\\x1d\\xb4\\xfa\\x34\\x15\\x6b\\x88\\x7f\\x7b\\x76\\x1b\\x84\\x78\\x8e\\x8e\\x83\\x1f\\x44\\xa4\\x05\\x97\\x6a\"\n\"\\x86\\x8c\\x79\\x1b\\x54\\x51\\x1d\\x95\\x94\\x89\\x87\\x96\\x5f\\x1d\\xaa\\xb5\\xe0\\x90\\x1f\\x0e\\x2f\\x77\\x1d\\xfb\\x13\\xf7\\x63\\x2b\\x1d\\xd5\\x79\\x1d\"\n\"\\xd5\\xf7\\x74\\xf7\\x88\\x15\\xd6\\xd9\\xf7\\x83\\xfb\\xd6\\x05\\xf7\\x47\\x06\\xfb\\xd6\\xf8\\x33\\xf7\\xb7\\xf7\\xce\\x05\\xfb\\x45\\x06\\xfb\\xb1\\xfb\\xd4\"\n\"\\x05\\xf7\\xd4\\x33\\x0a\\x07\\xe6\\x4f\\x22\\x1d\\x66\\x38\\x1d\\xcf\\xf9\\xbf\\x20\\x1d\\x9e\\x86\\x16\\xf7\\x2d\\x06\\xf7\\x4e\\xf8\\xc1\\xf7\\x4d\\xfc\\xc1\"\n\"\\x05\\xf7\\x2d\\x06\\xfb\\x97\\xf9\\x6d\\x56\\x0a\\x0e\\x66\\x38\\x1d\\xef\\xf8\\xf0\\x22\\x1d\\x66\\x38\\x1d\\xb2\\xfb\\x4d\\x22\\x1d\\x66\\x38\\x1d\\xf7\\x2b\"\n\"\\xf7\\xc0\\x3e\\x0a\\xf7\\x4d\\x66\\x0a\\xd5\\x29\\x0a\\xf7\\xae\\xf8\\x44\\x20\\x1d\\xd5\\x29\\x0a\\xf7\\x5b\\xf7\\xae\\x7c\\x0a\\xd5\\x29\\x0a\\xdd\\xfc\\xc8\"\n\"\\x22\\x1d\\xd5\\x29\\x0a\\x0e\\xf7\\x16\\x24\\x0a\\xd6\\xf7\\xce\\x42\\x0a\\xf7\\x16\\x24\\x0a\\xd1\\xf7\\xd7\\x32\\x0a\\xf7\\x16\\x24\\x0a\\xf7\\x2a\\xf7\\xb1\"\n\"\\x28\\x0a\\xf7\\x52\\xf8\\x19\\x7b\\x0a\\xf7\\x0c\\x98\\x1d\\xf7\\xcd\\xf7\\x11\\xfb\\x38\\x07\\xb6\\xa6\\xa0\\xa0\\x0a\\xf7\\x5b\\xfb\\x27\\xf7\\x25\\xfb\\x5f\"\n\"\\xfb\\x5f\\xa5\\x1d\\xa0\\x7a\\xb6\\x70\\x08\\xfb\\x38\\xfb\\x11\\xf7\\xcd\\x06\\xfb\\xaa\\xf9\\x6d\\x23\\x1d\\xf7\\x16\\x24\\x0a\\x0e\\xf7\\x45\\xf8\\x46\\x3f\"\n\"\\x0a\\xfb\\xde\\xf7\\x08\\x23\\x1d\\xf7\\x16\\x5a\\x0a\\x6a\\xf8\\x11\\x20\\x1d\\xf7\\x41\\xf7\\xf1\\x7d\\x15\\xf7\\x11\\xe4\\x06\\xcf\\x91\\xb4\\x96\\xb7\\xa3\"\n\"\\x08\\xe0\\xb9\\xbd\\xe7\\xf7\\x03\\x1a\\xf7\\x02\\x59\\xe7\\x36\\xb9\\x1e\\x5f\\xa3\\x62\\x96\\x47\\x91\\x08\\xe4\\xfb\\x11\\x32\\x07\\x4a\\x85\\x64\\x80\\x61\"\n\"\\x75\\x08\\x33\\x5e\\x54\\x2a\\xfb\\x00\\x1a\\xfb\\x01\\xc2\\x2a\\xe3\\x5e\\x1e\\xb5\\x75\\xb2\\x80\\xcc\\x85\\x08\\xf7\\x09\\x04\\x2c\\x9c\\x57\\xc8\\xea\\x1a\"\n\"\\xeb\\xbe\\xc6\\xeb\\x9a\\x1e\\xf7\\x11\\x16\\xb8\\x85\\xa2\\x82\\xa2\\x78\\x08\\xae\\x6e\\x9f\\x5a\\x55\\x1a\\x2c\\x55\\x4a\\x2f\\x7a\\x1e\\x0e\\xd5\\xcd\\x16\"\n\"\\xf7\\x2a\\xf8\\xf0\\xf7\\xb4\\xfc\\xf0\\xf7\\x2b\\xf9\\x6d\\xfc\\xe1\\x06\\x0e\\xf7\\x35\\xf7\\xe1\\x16\\xf7\\x27\\xf7\\x16\\x06\\xd8\\x8e\\xc9\\x9e\\xb9\\xb0\"\n\"\\xd4\\xc9\\x9f\\xd3\\x8a\\xf7\\x50\\x08\\xf7\\x6e\\xfb\\x2a\\xfb\\x6e\\x07\\xfb\\x21\\x87\\x6b\\x75\\x69\\x1e\\x6a\\x71\\x69\\x7a\\x62\\x1b\\xf8\\x6f\\xfb\\x27\"\n\"\\xfc\\x6f\\x07\\x66\\x6d\\x97\\xa6\\x72\\x1f\\x6c\\xad\\x86\\xab\\xf7\\x2c\\x1a\\xf7\\x6e\\xfb\\x2a\\xfb\\x6e\\x07\\x8a\\xfb\\x41\\x9a\\x4b\\xc3\\x4b\\xba\\x59\"\n\"\\xd1\\x70\\xe6\\x88\\x08\\x0e\\xd5\\x3b\\x1d\\xde\\xf8\\x9e\\x15\\xfb\\x13\\x06\\x46\\xfb\\x2a\\x05\\xd0\\x06\\x0e\\xd5\\x3b\\x1d\\xf8\\x08\\x04\\xf6\\x3a\\x0a\"\n\"\\xd5\\x3b\\x1d\\x2e\\xfc\\x6e\\x22\\x1d\\x9e\\x74\\x1d\\x9e\\x2c\\x0a\\x8a\\xf8\\x41\\x20\\x1d\\x9e\\xf7\\xe8\\x74\\x15\\xf7\\x57\\x94\\xed\\xda\\xf7\\x29\\x1a\"\n\"\\xf7\\x06\\x51\\xc7\\xfb\\x1b\\xa5\\x1e\\x7e\\x0a\\xf7\\x20\\x06\\x67\\x0a\\x95\\xfb\\x26\\xdf\\x3e\\xf7\\x3f\\x79\\x61\\x38\\x18\\x95\\x9e\\x95\\x8d\\x78\\x0a\"\n\"\\xdd\\xb9\\xac\\xc7\\xb8\\x6e\\xa5\\x5b\\x7c\\x80\\x89\\x87\\x7c\\x1f\\x0e\\x9e\\x2c\\x0a\\xfb\\x5c\\xf8\\x41\\x23\\x0a\\x9e\\x2c\\x0a\\xfb\\x4d\\xfc\\xcb\\x22\"\n\"\\x1d\\x5b\\xa5\\x16\\xf8\\xbd\\xf7\\x11\\xfc\\x02\\x06\\xf7\\x7e\\xf7\\x87\\xfb\\x7a\\xf7\\x80\\x05\\xf7\\xee\\xf7\\x11\\xfc\\xaa\\xfb\\x11\\x06\\xf7\\x7e\\xfb\"\n\"\\x80\\xfb\\x81\\xfb\\x8d\\x05\\x0e\\x66\\x42\\x1d\\x0e\\x66\\xf8\\x15\\xf8\\x5a\\x15\\xf7\\x2a\\xf7\\x69\\xf7\\x11\\xfc\\xdc\\xfb\\x11\\xf7\\x71\\xfb\\x2a\\xfb\"\n\"\\x26\\x3b\\xf7\\x26\\xfc\\x0a\\xf7\\x2a\\xf8\\x0a\\xf7\\x27\\xdb\\x07\\x0e\\x66\\x42\\x1d\\x74\\xf9\\xa6\\x2a\\x0a\\x66\\xf7\\xff\\x16\\xa1\\xf8\\xf0\\xf7\\x69\"\n\"\\xf7\\x11\\xfc\\xdc\\xfb\\x11\\xf7\\x71\\xfc\\xf0\\xe0\\x06\\x55\\x21\\x05\\x95\\x9e\\x95\\x8d\\x57\\x1d\\x74\\x92\\xa2\\x56\\x9c\\x1d\\x7c\\x49\\x1d\\x0e\\xf7\"\n\"\\x16\\xf8\\xa1\\xf8\\x2b\\x15\\xfb\\x9f\\x29\\xf7\\x9f\\x06\\xfb\\x1b\\xf8\\x44\\x6c\\x1d\\x0e\\xd5\\x25\\x0a\\xfb\\x6c\\xf7\\x5a\\x42\\x0a\\xd5\\x25\\x0a\\xfb\"\n\"\\x71\\xf7\\x63\\x32\\x0a\\xd5\\x25\\x0a\\xfb\\x1f\\xf7\\x3d\\x28\\x0a\\xd5\\xf8\\xe9\\xfb\\x45\\x15\\x87\\x78\\x79\\x89\\x76\\x1b\\x57\\x72\\x9c\\xad\\xae\\x9e\"\n\"\\xae\\xb9\\xbc\\x1f\\xf7\\x00\\xf7\\x03\\x9a\\xaa\\x8f\\xf5\\x08\\xf8\\x82\\xfb\\x2a\\x85\\x1d\\xe6\\x1b\\xb2\\xa2\\x8e\\x98\\xba\\x1f\\x3e\\x5b\\x70\\x68\\x5b\"\n\"\\x1a\\x62\\xa1\\x6f\\xb9\\x7c\\x1e\\x83\\xa3\\xa4\\x87\\xa6\\x1b\\xa8\\xa3\\x8e\\x92\\xa6\\x1f\\x0e\\x9e\\x2a\\x1d\\x0e\\x9e\\x2a\\x1d\\xfb\\x0f\\x38\\x0a\\xf7\"\n\"\\xab\\xf8\\xee\\xf7\\xa2\\x15\\xf7\\x7b\\xf8\\x5f\\x05\\xfb\\x3c\\x06\\xfb\\x1f\\xfb\\xd6\\xfb\\x29\\xf7\\xd6\\x05\\xfb\\x3b\\x06\\xf7\\x86\\xfc\\x5f\\x05\\xfb\"\n\"\\xa2\\xf7\\x2a\\x07\\xfc\\x3a\\xf9\\x6d\\x23\\x1d\\xd5\\x25\\x0a\\xfb\\xb4\\xf7\\x70\\x2c\\x1d\\x0e\\xd5\\x25\\x0a\\xfb\\x45\\xf7\\x5b\\x15\\x6b\\x87\\x7f\\x7b\"\n\"\\x77\\x1b\\x84\\x77\\x53\\x0a\\x6b\\x86\\x4f\\x0a\\x88\\x1f\\xc9\\x87\\x0a\\xa0\\x9d\\x87\\x9b\\x1b\\xc6\\xaa\\xb5\\xe0\\x90\\x1f\\x0e\\xf7\\xbc\\x2f\\x0a\\xad\"\n\"\\x39\\x0a\\xf7\\xbc\\x2f\\x0a\\xfb\\x42\\xfa\\x3c\\x2b\\x1d\\xf7\\xbc\\x2f\\x0a\\xfb\\x35\\x38\\x0a\\xf7\\xbc\\x2f\\x0a\\xfb\\x86\\xfa\\x3c\\x21\\x1d\\x87\\xa6\"\n\"\\x16\\xf8\\xe1\\xf7\\x11\\xfc\\xe1\\x06\\xae\\xf7\\x51\\x15\\xf8\\x93\\xf7\\x11\\xfc\\x93\\x06\\x6d\\xf7\\x39\\x15\\xf8\\xd6\\xf7\\x11\\xfc\\xd6\\x06\\x0e\\x9e\"\n\"\\x2a\\x1d\\xfb\\x1c\\xfa\\x3c\\x23\\x0a\\x9e\\x2a\\x1d\\xfb\\x48\\xfa\\x3c\\x21\\x1d\\x66\\x31\\x0a\\xfb\\x1d\\xf7\\xe0\\x20\\x1d\\x66\\x31\\x0a\\xfb\\x6c\\xf7\"\n\"\\xd2\\x27\\x0a\\x66\\x31\\x0a\\x0e\\x2f\\x26\\x1d\\xbf\\xf8\\x81\\x86\\x1d\\xf7\\x85\\x58\\x0a\\xfb\\x35\\xf8\\x4a\\x20\\x1d\\xf7\\xf4\\xab\\x1d\\xd5\\xf8\\x86\"\n\"\\xa2\\x0a\\xfb\\x87\\xf9\\x6d\\x05\\xfb\\x43\\x8c\\x1d\\x0e\\xd2\\xd5\\x16\\xf7\\xf3\\x06\\xf7\\x20\\xf3\\xe9\\xf7\\x11\\xf7\\x0e\\xfb\\x00\\xed\\xfb\\x1c\\x1f\"\n\"\\xfb\\x5d\\xf7\\x39\\xf8\\x0f\\xf7\\x11\\xfc\\xa5\\x06\\xf7\\x2a\\xfc\\xf0\\x15\\xf7\\x51\\xf7\\x6b\\x07\\xb8\\xae\\x62\\x54\\x54\\x6a\\x65\\x5c\\x1f\\x0e\\xd5\"\n\"\\xda\\x16\\xf7\\xdd\\x06\\xdf\\xc2\\x9b\\xb0\\xb7\\x1f\\xb7\\xb0\\xa7\\xc8\\xc6\\x1a\\xd3\\x65\\xc4\\x38\\xbb\\x1e\\xd4\\xb9\\xa6\\xb5\\xc9\\x1a\\xbe\\x73\\xbf\"\n\"\\x62\\xaf\\x1e\\xb0\\x61\\x59\\x9b\\x3e\\x1b\\xfb\\xdd\\x7e\\x1d\\x3a\\x8d\\x0a\\x0e\\xcb\\x7e\\xfb\\x1c\\x15\\xf7\\x2a\\xf7\\x1c\\xf8\\x3b\\xfb\\x1c\\xf7\\x2a\"\n\"\\xf7\\x99\\x49\\xf8\\xf0\\xfc\\x74\\xfc\\x55\\x06\\x8c\\x35\\x48\\x47\\x35\\x8a\\x08\\x72\\x06\\xf8\\x8f\\x16\\xfb\\x9b\\x06\\xbe\\xad\\xab\\xc4\\xc5\\x1a\\xf7\"\n\"\\xde\\xf7\\x48\\x07\\x0e\\x9e\\xf7\\x73\\x4e\\x1d\\x0e\\xa0\\xf7\\x74\\xf7\\xce\\x15\\xf7\\xf1\\xf7\\x11\\xfb\\xf1\\xf7\\x39\\xf8\\x0d\\xf7\\x11\\xfc\\xa3\\xfd\"\n\"\\x6d\\xf8\\xb5\\xf7\\x11\\xfc\\x1f\\x06\\xdf\\xf9\\xb1\\x25\\x1d\\xf7\\x94\\xf8\\x0d\\x16\\x2e\\x1d\\xe2\\x83\\x0a\\xfb\\x2b\\xc4\\x1d\\x2d\\xf7\\xa5\\xfb\\x2a\"\n\"\\xfb\\xa5\\x24\\x94\\x1d\\xf7\\x1a\\xf7\\xdf\\x05\\xec\\x06\\x0e\\x75\\xc6\\xf7\\x86\\x15\\x6f\\x07\\x4a\\x9d\\x58\\xb0\\x63\\x1e\\x58\\xba\\xd5\\x6d\\xdb\\x1b\"\n\"\\xf7\\x25\\xf7\\x03\\xf2\\xf7\\x19\\xe1\\x61\\xcc\\x42\\xa4\\x1f\\xcc\\xaf\\xaa\\xbd\\xd0\\x1a\\xf7\\x06\\x26\\xde\\xfb\\x1e\\x3f\\x42\\x72\\x63\\x61\\x1e\\x64\"\n\"\\x66\\x7b\\x5e\\x44\\x1a\\x72\\xf7\\x2a\\xa4\\x07\\xc3\\xad\\xad\\xc4\\xc3\\xb1\\x69\\x59\\x56\\x62\\x66\\x51\\x1e\\x5e\\xfb\\x11\\xc3\\x06\\xa2\\xa2\\x84\\x7e\"\n\"\\x9f\\x1f\\xa6\\x79\\x97\\x71\\x64\\x1a\\x49\\x64\\x63\\x4c\\x66\\x6c\\x98\\xa1\\x7a\\x1e\\x7b\\xa0\\x84\\xa7\\xc0\\x1a\\x0e\\xd2\\x3e\\x1d\\x0e\\xd2\\x3e\\x1d\"\n\"\\xf8\\x08\\xf7\\x60\\x15\\x5a\\x85\\x70\\x72\\x5f\\x1b\\x5e\\x71\\xa4\\xbc\\x84\\x1f\\x33\\x06\\x8c\\x65\\x8e\\x7b\\x95\\x76\\x08\\x55\\xa7\\xbe\\x6f\\xd4\\x1b\"\n\"\\xce\\xba\\xa2\\xbb\\xa9\\x1f\\x9b\\xa4\\x8f\\x9d\\x8d\\xb6\\x08\\x0e\\x65\\xc5\\x16\\x2e\\x1d\\xe5\\x06\\x7f\\x0a\\x26\\xfb\\xa5\\x05\\x35\\xf7\\xa5\\xfb\\x2a\"\n\"\\x06\\x0e\\xc1\\x90\\x16\\xdf\\x06\\xdf\\x8a\\xd5\\xd3\\x35\\x0a\\xf8\\x5b\\xf7\\x7b\\xfc\\xf0\\x2b\\x0a\\xfc\\xa7\\xfc\\xcd\\x07\\x73\\x8a\\x7f\\x80\\x74\\x1b\"\n\"\\x56\\x06\\x0e\\xf7\\x4d\\xf7\\x68\\x68\\x0a\\xd5\\xa3\\x0a\\x2b\\x0a\\x89\\x0a\\xf7\\x16\\xf8\\x18\\x3f\\x0a\\x0e\\xd2\\xd3\\x16\\xf7\\x2a\\xf8\\xf2\\xf7\\xa8\"\n\"\\xfc\\xf2\\x2b\\x0a\\xfc\\xd4\\x06\\x0e\\x9e\\xf7\\x6f\\x76\\x1d\\xd5\\xf9\\x3d\\xf8\\x76\\x15\\xb8\\x1d\\x30\\x8f\\x0a\\xfb\\x26\\xfb\\x81\\xfb\\x7f\\xf7\\x12\"\n\"\\xfb\\x26\\xf7\\x5f\\xf7\\x49\\xf7\\x0c\\xf4\\xf7\\x3b\\x94\\x1f\\xfb\\x24\\x77\\x0a\\x0e\\x66\\xf8\\x14\\x9d\\x1d\\x0e\\x71\\x73\\x1d\\x0e\\xf7\\x62\\xf7\\xf3\"\n\"\\x16\\xf7\\x2a\\xf0\\xbc\\x06\\xf7\\x2a\\xf7\\x04\\xf7\\x05\\xf7\\x2c\\xf7\\x2a\\xfb\\x04\\xf7\\x04\\xfb\\x2a\\x1f\\x5a\\xf0\\xfb\\x2a\\x26\\x55\\x06\\xfb\\x2a\"\n\"\\xfb\\x04\\xfb\\x04\\xfb\\x2a\\xfb\\x2c\\xf7\\x04\\xfb\\x05\\xf7\\x2a\\x1f\\xc1\\x06\\x88\\xf8\\x26\\x15\\xfb\\xa9\\x72\\x07\\x3a\\x52\\xc5\\xdd\\xdc\\xc3\\xc3\"\n\"\\xdd\\x1f\\xf7\\x48\\x16\\x9f\\x06\\xdd\\xc4\\x53\\x3a\\x39\\x52\\x51\\x39\\x1f\\x77\\x06\\x0e\\x9e\\xf8\\x33\\xf8\\x06\\x15\\xf7\\x79\\xf7\\xfb\\x05\\xfb\\x43\"\n\"\\x06\\xfb\\x1e\\x81\\x0a\\xf7\\x3e\\x06\\xf7\\x1f\\xf7\\x91\\xf7\\x1e\\xfb\\x91\\x05\\xf7\\x43\\x06\\x0e\\xdd\\xcf\\x16\\xf8\\x76\\xfb\\x33\\xf7\\x2a\\xf7\\xb0\"\n\"\\x49\\xf8\\xf0\\x91\\x0a\\xc2\\xf8\\x81\\x16\\x2b\\x0a\\x6c\\x0a\\xf7\\xf9\\xbc\\x16\\xfa\\x1e\\xf9\\x6d\\xfb\\x2a\\xfc\\xf0\\xfb\\x78\\x57\\x0a\\xfc\\xf0\\xfb\"\n\"\\x78\\x60\\x1d\\xf8\\x07\\xbf\\x16\\xf9\\xba\\xfb\\x33\\xf7\\x2a\\xf7\\xb0\\x49\\x57\\x0a\\xfc\\xf0\\xfb\\x71\\x57\\x0a\\xfc\\xf0\\xfb\\x6f\\x60\\x1d\\xf7\\x72\"\n\"\\xf7\\x9a\\x16\\xf7\\xca\\x06\\x53\\x1d\\xfc\\x20\\xfb\\x11\\xf7\\x8a\\x06\\xf7\\x2a\\xfc\\x73\\x4a\\x0a\\xf7\\xdf\\xf6\\x16\\xf7\\xca\\x06\\x53\\x1d\\xfb\\x2a\"\n\"\\x06\\xf7\\x2a\\xfc\\xf0\\x76\\x0a\\xf7\\xc5\\xfb\\x11\\x15\\x48\\x1d\\x06\\x0e\\xd2\\xef\\x16\\xf7\\xca\\x06\\x53\\x1d\\xfb\\x2a\\x06\\xf7\\x2a\\xfc\\xf0\\x4a\"\n\"\\x0a\\xca\\xf8\\xa5\\xf7\\xce\\x15\\xfb\\x1a\\x7c\\x4a\\x40\\x23\\x1b\\x2f\\x4f\\xbf\\xf7\\x02\\x69\\x1f\\xfb\\x20\\x5e\\x05\\xfb\\x2f\\xba\\xf7\\x0d\\x31\\xf7\"\n\"\\x36\\x1b\\xef\\xda\\xae\\xd1\\xc7\\x1f\\xc6\\xd0\\xad\\xf0\\xf6\\x1a\\xed\\x6e\\xe9\\x58\\xcf\\x1e\\xdc\\x50\\x35\\xb4\\xfb\\x00\\x1b\\xfb\\x20\\x23\\x4b\\xfb\"\n\"\\x11\\x4c\\x1f\\xf7\\x16\\x4b\\x05\\xe2\\xb3\\xc0\\xb1\\xdc\\x1b\\xc7\\xbd\\x70\\x5c\\xaa\\x1f\\x9d\\x6e\\x93\\x75\\x96\\x5a\\x08\\xfb\\xbc\\xfb\\x11\\x06\\x0e\"\n\"\\xf8\\x13\\xf7\\x5f\\xf8\\x5c\\x15\\xf7\\xa5\\x33\\x0a\\xf7\\xdf\\xf5\\x07\\x90\\x46\\x9a\\x50\\xa8\\x55\\x08\\xfb\\x06\\xc8\\xed\\x51\\xf7\\x18\\x1b\\xef\\xdc\"\n\"\\xad\\xce\\xc7\\x1f\\xca\\xd1\\xaf\\xf1\\xf7\\x01\\x1a\\xf7\\x01\\x67\\xf1\\x4c\\xd1\\x1e\\xce\\x4f\\x3b\\xad\\x26\\x1b\\xfb\\x40\\xfb\\x0c\\x24\\xfb\\x4a\\x64\"\n\"\\x1f\\xf7\\xde\\xf7\\x31\\x15\\xf7\\x09\\xd5\\x27\\xfb\\x32\\xfb\\x2a\\x3f\\x27\\xfb\\x06\\xfb\\x08\\x40\\xef\\xf7\\x2e\\xf7\\x2e\\xd6\\xef\\xf7\\x07\\x1f\\x0e\"\n\"\\xd2\\xf8\\x81\\x16\\x2b\\x0a\\xfb\\xe9\\x06\\x4c\\x5a\\x7a\\x66\\x61\\x1f\\x5b\\x61\\x70\\x4e\\x4d\\x1a\\x5a\\x9b\\x59\\xa8\\x66\\x1e\\x9b\\x76\\x9b\\x80\\xac\"\n\"\\x7d\\x53\\x89\\x6a\\x61\\x8c\\x47\\x08\\xfb\\x0d\\x07\\x87\\x4f\\x7f\\x72\\x6e\\x81\\x08\\xf7\\x1e\\x06\\xae\\x8a\\x9e\\xa7\\x8e\\xc4\\x08\\xf7\\x1f\\x07\\xaf\"\n\"\\x99\\x99\\xb1\\x8d\\x1e\\xf7\\x58\\x06\\xf7\\x11\\x04\\xfb\\x42\\x06\\x51\\x65\\xb3\\xc8\\xc7\\xb3\\xb6\\xc3\\x1f\\xf7\\x42\\x06\\x0e\\xfb\\x35\\xf8\\x03\\x21\"\n\"\\x0a\\xfb\\xb4\\xfd\\x6d\\xbe\\x1d\\x06\\xe4\\x4e\\x0a\\xf7\\x81\\xf7\\x91\\x16\\xf7\\x2a\\xf7\\xb8\\x06\\xb8\\xa6\\xbe\\xa3\\xce\\x1b\\xc5\\xad\\x71\\x60\\x1f\"\n\"\\xfb\\x05\\x07\\x89\\x69\\x73\\x76\\x67\\x8c\\x08\\x44\\xfb\\x11\\xf7\\x14\\x06\\xdc\\x87\\xd2\\xd0\\x8e\\xe0\\x08\\xf7\\x43\\x07\\xb2\\x7e\\xb0\\x74\\xa8\\x1e\"\n\"\\xb3\\x6a\\x5b\\x9e\\x46\\x1b\\x3b\\x4c\\x76\\x5e\\x51\\x1f\\xf7\\x49\\xf7\\x56\\xf7\\x11\\xfc\\xb7\\xfb\\x11\\xf7\\x5f\\x07\\x0e\\x3a\\x8d\\x0a\\xf7\\x0a\\xcd\"\n\"\\x15\\xf7\\x04\\x06\\xe3\\x4e\\x0a\\xca\\xf8\\x78\\xf7\\xce\\x15\\xf7\\x11\\xfb\\xbc\\x07\\x96\\xbc\\x93\\xa1\\x9d\\xa8\\x08\\xba\\xaa\\xbd\\xa6\\xc7\\x1b\\xdc\"\n\"\\xc0\\x65\\x34\\xb3\\x1f\\xf7\\x16\\xcb\\x05\\xf7\\x11\\x4c\\x23\\xcb\\xfb\\x20\\x1b\\x28\\x3b\\x68\\x48\\x50\\x1f\\x4f\\x46\\x68\\x24\\xfb\\x00\\x1a\\x2a\\xa7\"\n\"\\x2e\\xbd\\x47\\x1e\\x38\\xc8\\xdf\\x62\\xf7\\x01\\x1b\\xf7\\x36\\xf7\\x09\\xe2\\xf7\\x32\\xbe\\x1f\\xfb\\x20\\xb8\\x05\\xfb\\x02\\x69\\x4f\\x57\\x2f\\x1b\\x23\"\n\"\\x4a\\xd6\\xf7\\x1a\\x7c\\x1f\\x0e\\x9e\\xf8\\xf3\\xf8\\x8f\\x15\\xf7\\x2b\\x8a\\x26\\xde\\xfb\\x4d\\x1b\\xfb\\x42\\x95\\x0a\\xf0\\x77\\x05\\xf0\\x78\\xb0\\x6f\"\n\"\\x50\\x1a\\x4e\\x53\\x66\\x30\\x25\\x52\\xb5\\xda\\x86\\x1e\\xfb\\x26\\x06\\xfb\\x30\\x94\\xf6\\x36\\xf7\\x4e\\x1b\\xf7\\x51\\xf7\\x02\\xe2\\xf7\\x2a\\xf7\\x06\"\n\"\\x50\\xc7\\xfb\\x1a\\xa5\\x1f\\xfb\\x06\\xa1\\x05\\xfb\\x00\\xa0\\x6d\\xa0\\xc0\\x1a\\xc3\\xbb\\xad\\xd9\\xea\\xc0\\x63\\x41\\x90\\x1e\\x0e\\xf7\\x6a\\x31\\x1d\"\n\"\\x0e\\xfc\\x08\\xf7\\x68\\x6d\\x0a\\x2f\\xf7\\xe7\\x21\\x0a\\xfc\\xab\\x07\\x51\\x6e\\x6c\\x56\\x53\\x73\\xa5\\xca\\x1e\\xd7\\xfb\\x2a\\x3f\\x07\\x40\\x9d\\x5d\"\n\"\\xb6\\x64\\x1e\\x65\\xb5\\xc3\\x78\\xcf\\x1b\\xf7\\x2a\\xe0\\xd9\\xf7\\x1f\\x1f\\xf8\\xab\\x07\\x0e\\xf8\\x52\\x9b\\x16\\xdf\\x06\\xdf\\x8a\\xd5\\xd3\\x35\\x0a\"\n\"\\xf8\\x5b\\xf7\\x7b\\xfc\\xf0\\xf7\\xca\\x07\\xf7\\x1e\\xf0\\xea\\xf7\\x17\\xf7\\x17\\x27\\xea\\x59\\x1d\\xfc\\xa7\\xfc\\xcd\\x06\\x73\\x8a\\x7f\\x80\\x74\\x1b\"\n\"\\x56\\x06\\xf9\\x00\\x16\\xf7\\x5e\\xf7\\x34\\x07\\xc2\\xad\\x65\\x4d\\x4d\\x68\\x63\\x55\\x1f\\x0e\\xf8\\x33\\xf7\\x5e\\xf7\\xdf\\x15\\xf7\\xb5\\xfb\\xdf\\xf7\"\n\"\\xca\\x06\\xf7\\x1e\\xf0\\xea\\xf7\\x17\\xf7\\x18\\x27\\xe9\\x59\\x1d\\xa3\\x1d\\xf8\\x4b\\xf7\\x11\\x4a\\x0a\\xf7\\x77\\xf7\\x8b\\x16\\xf7\\x2a\\xf7\\xb8\\x06\"\n\"\\x95\\x9c\\x91\\x94\\x94\\x94\\x08\\xa0\\xa0\\xb6\\x98\\xbf\\x1b\\xbf\\xa2\\x85\\x7c\\x99\\x1f\\x96\\x7d\\x92\\x7a\\x7a\\x1a\\xfb\\xb8\\xf7\\x2a\\xf7\\xd9\\x07\"\n\"\\xb0\\x7d\\xb3\\x73\\xa7\\x1e\\xb5\\x69\\x5c\\x9c\\x38\\x1b\\x2d\\x63\\x7d\\x57\\x4d\\x1f\\xf7\\x49\\xf7\\x59\\xf7\\x11\\xfc\\xa7\\xfb\\x11\\xf7\\x4c\\x07\\x0e\"\n\"\\x65\\xac\\x16\\x2e\\x1d\\xe1\\x83\\x0a\\xfb\\x2c\\x06\\x2b\\xfb\\xa5\\x05\\x34\\xf7\\xa5\\xfb\\x2a\\x06\\xf7\\x68\\xcd\\x15\\xf7\\x03\\x06\\xe4\\x4e\\x0a\\x71\"\n\"\\x73\\x1d\\xf7\\xe5\\xf9\\xbc\\x15\\x5a\\x84\\x71\\x72\\x5e\\x1b\\x5f\\x70\\xa4\\xbc\\x85\\x1f\\x32\\x06\\x8c\\x65\\x8f\\x7b\\x95\\x76\\x08\\x55\\xa6\\xbf\\x6f\"\n\"\\xd3\\x1b\\xcf\\xba\\xa2\\xbb\\xa9\\x1f\\x9a\\xa4\\x90\\x9d\\x8c\\xb6\\x08\\x0e\\x2f\\xf8\\xa0\\x9c\\x15\\x74\\xa1\\x84\\x9c\\xa6\\x1a\\xf7\\xc0\\x07\\xf7\\x02\"\n\"\\x3f\\xc3\\xfb\\x28\\x60\\x0a\\xf7\\x2d\\x06\\xfb\\x3e\\xf7\\x6d\\x15\\x3a\\x63\\x5d\\x44\\x5c\\x6e\\xa4\\xb3\\xb5\\xa1\\x9f\\xc5\\x97\\x1e\\xbb\\x94\\xb0\\x92\"\n\"\\x91\\x8d\\x9b\\x93\\x19\\x0e\\x6d\\xf8\\x0c\\xf9\\xe3\\x15\\x89\\x40\\x79\\x6f\\x56\\x7c\\x2c\\x6d\\x5d\\x6e\\x61\\x51\\x08\\x56\\x44\\x72\\x2a\\xfb\\x17\\x1a\"\n\"\\x32\\x94\\x4c\\x9e\\x61\\x1e\\x31\\xb3\\xe3\\x57\\xf7\\x03\\x1b\\xf7\\x3a\\xf0\\xf7\\x00\\xf7\\x46\\xdc\\x77\\xcc\\x62\\xbd\\x1f\\xc1\\x5e\\x46\\xab\\x44\\x1b\"\n\"\\x54\\x5a\\x7b\\x67\\x56\\x1f\\x93\\xcb\\xb8\\xa9\\xf7\\x0c\\xa4\\xf7\\x1a\\xa7\\xb0\\xbc\\x90\\xf7\\x32\\x08\\xfb\\x69\\xfc\\x2f\\x50\\x1d\\x6a\\xe2\\x16\\xf7\"\n\"\\xcb\\x06\\xe7\\xcd\\xca\\xe3\\xcd\\x6b\\xb5\\x48\\xa1\\x1f\\xc7\\xa4\\xa7\\xb2\\xc4\\x1a\\xd9\\x4b\\xc7\\x38\\x1e\\xfb\\xcb\\x06\\xf7\\x20\\xfc\\x3f\\x15\\xf7\"\n\"\\x0c\\xf7\\x18\\x07\\xab\\xa4\\x70\\x6a\\x69\\x72\\x71\\x6b\\x1f\\xfb\\x18\\xf7\\x6b\\x15\\xee\\xf7\\x18\\x07\\xa6\\x9e\\x77\\x6e\\x6d\\x78\\x77\\x70\\x1f\\x0e\"\n\"\\xfb\\x7b\\x90\\x0a\\x0e\\x7e\\x92\\xfb\\x04\\x15\\xf7\\x20\\xf7\\x04\\xf7\\xdd\\xfb\\x04\\xf7\\x20\\xf7\\x75\\x59\\xf8\\x3f\\xfc\\x3d\\xfb\\xbd\\x06\\x3d\\x8c\"\n\"\\x6c\\x57\\x5b\\x1b\\x53\\x06\\xf8\\x37\\x16\\xfb\\x63\\x06\\xb4\\xac\\x9f\\xba\\x8c\\xd0\\x08\\xf7\\x39\\xf7\\x25\\x07\\x0e\\x2f\\x65\\x0a\\x61\\x7a\\x65\\x74\"\n\"\\x59\\x1b\\x63\\x6b\\x9b\\xa9\\x77\\x1f\\x7e\\x9f\\x86\\xa2\\x89\\xbd\\x08\\x8d\\xe8\\x15\\xdc\\x94\\xae\\xb2\\xc9\\x1b\\xcb\\xb1\\x61\\x3d\\x92\\x1f\\x0e\\x2f\"\n\"\\x65\\x0a\\x5f\\x7a\\x65\\x73\\x59\\x1b\\x63\\x6b\\x9b\\xaa\\x77\\x1f\\x7e\\xa0\\x86\\xa2\\x89\\xbe\\x08\\x8d\\xe8\\xad\\x0a\\xc9\\x97\\x0a\\xfb\\x23\\xf8\\x3c\"\n\"\\x25\\x1d\\xc8\\xf8\\x3d\\x16\\xf7\\x83\\xbe\\x07\\x4b\\x1d\\xf7\\x23\\xac\\x1d\\x46\\xfb\\x50\\x05\\x58\\xf7\\x50\\xfb\\x20\\xfb\\x50\\x4f\\x06\\x46\\xf7\\x50\"\n\"\\x05\\xfb\\x21\\x06\\xe4\\xfb\\x83\\xfb\\x04\\xfb\\xc1\\x05\\xf7\\x24\\x06\\xe4\\xf7\\x83\\x05\\xc7\\xfb\\x83\\x06\\x0e\\xfb\\x2b\\xad\\xf7\\x47\\x15\\x8f\\x48\"\n\"\\x96\\x6b\\xa9\\x69\\x08\\x5e\\xb2\\xc6\\x73\\xd1\\x1b\\xf7\\x0c\\xe3\\xd4\\xee\\xc4\\x72\\xb1\\x4f\\xad\\x1f\\xbd\\xa5\\xa6\\xb7\\xc1\\x1a\\xe3\\x3b\\xc6\\xfb\"\n\"\\x0d\\xfb\\x09\\x37\\x50\\x39\\x1e\\x64\\xf7\\x1a\\x97\\x07\\xac\\xa4\\xa1\\xb2\\xb3\\xa3\\x75\\x67\\x63\\x71\\x78\\x56\\x1e\\x70\\x2c\\xa6\\x06\\xb4\\x95\\x89\"\n\"\\x7f\\x9a\\xc2\\x1d\\x6f\\x6f\\x62\\xa9\\x1d\\x0e\\x6a\\x3f\\x1d\\x0e\\x6a\\x3f\\x1d\\xf7\\xca\\xa6\\x0a\\x5a\\x77\\x9a\\xb3\\x87\\x1f\\x48\\x06\\x6e\\x8f\\x7b\"\n\"\\x93\\x7a\\x1e\\x63\\x9f\\xbf\\x6f\\xc3\\x1b\\xc2\\xbf\\xa7\\xb3\\x9f\\x1f\\x93\\x9c\\x8f\\x9b\\x8c\\xa8\\x08\\x0e\\xfb\\x28\\xae\\x24\\x1d\\xfc\\xb0\\xf7\\x20\"\n\"\\xf7\\x83\\xcc\\x07\\x46\\x0a\\x4a\\xf7\\x50\\x06\\x0e\\x7e\\xb0\\x16\\xeb\\x06\\xd4\\x8c\\xc8\\xc7\\x8a\\xd3\\x08\\xf7\\xba\\xf7\\x25\\xfc\\x3f\\xf7\\x20\\xf8\"\n\"\\xb0\\xfc\\x3d\\xfc\\x0f\\x07\\x8c\\x72\\x79\\x76\\x74\\x89\\x08\\x5a\\x06\\x0e\\xe7\\xf9\\x27\\x16\\xf8\\xb0\\xfb\\x51\\x07\\x24\\xfc\\x29\\x29\\xf8\\x29\\x05\"\n\"\\xfb\\x50\\xfc\\xb0\\xf7\\x17\\xf8\\x30\\x06\\xef\\xfc\\x30\\x05\\xf7\\x03\\x06\\xf1\\xf8\\x30\\x05\\xfc\\x30\\x07\\x0e\\x5f\\x9d\\x0a\\xf7\\x20\\xf8\\xb0\\x92\"\n\"\\x0a\\x66\\xf7\\xc5\\x41\\x0a\\x0e\\x5f\\xd4\\x16\\xf7\\x20\\xf8\\x3f\\xf7\\x46\\xfc\\x3f\\xf7\\x20\\xf8\\xb0\\xfc\\x5e\\x06\\x0e\\x66\\xf7\\x5c\\xf8\\xb0\\x15\"\n\"\\xfb\\x20\\xfd\\x8a\\x66\\x1d\\x50\\xac\\xbc\\x6f\\xce\\x1b\\xf7\\x17\\xeb\\xf7\\x0d\\xf7\\x39\\xf7\\x3c\\x2f\\xf7\\x0a\\xfb\\x16\\x46\\x58\\x8b\\x1d\\x2f\\xf8\"\n\"\\xa0\\xf7\\xe6\\x15\\x47\\x0a\\xfb\\x47\\xe8\\x24\\x7c\\x1d\\x0e\\xfb\\x32\\xf7\\x43\\x16\\xf7\\x20\\xf8\\x3f\\xf7\\x33\\xf7\\x05\\xfc\\x5e\\xfb\\x05\\xf7\\x33\"\n\"\\x06\\x0e\\x2f\\x64\\x0a\\x0e\\xf7\\x77\\xf8\\x04\\x16\\xfb\\x6e\\xf7\\x20\\xf7\\x6e\\xa0\\x07\\xcd\\xdc\\xa6\\xb2\\xbe\\x1f\\xc8\\xbb\\xb2\\xda\\xd7\\x1a\\xd3\"\n\"\\x67\\xd8\\x55\\xbb\\x1e\\xbb\\x55\\x41\\xa5\\x3b\\x1b\\x76\\xf7\\x58\\xfb\\x20\\xfb\\x58\\x76\\x06\\xfb\\x3e\\xfb\\x16\\xfb\\x06\\xfb\\x2b\\xfb\\x2d\\xf7\\x19\"\n\"\\xfb\\x0e\\xf7\\x3b\\x1f\\xa0\\xf7\\x05\\x15\\x4d\\x8f\\x6e\\x94\\x6a\\xa6\\x08\\x68\\xa9\\x75\\xb8\\xb7\\x1a\\xb5\\x9f\\xb4\\xad\\xa8\\x1e\\xac\\xa7\\xa9\\x95\"\n\"\\xcb\\x90\\x08\\xf7\\x20\\x16\\xca\\x87\\xa8\\x82\\xac\\x6f\\x08\\xad\\x6d\\x9f\\x60\\x5e\\x1a\\x5c\\x75\\x5f\\x66\\x6f\\x1e\\x6c\\x73\\x6f\\x82\\x4e\\x88\\x08\"\n\"\\x0e\\x2f\\xf7\\xfa\\x75\\x1d\\x6a\\xd2\\x16\\xf8\\x05\\xfb\\x34\\xf7\\x20\\xf7\\xa5\\x53\\xf8\\x3f\\xaa\\x1d\\x48\\xf8\\x13\\x16\\xf7\\x23\\xf8\\xb0\\x69\\x0a\"\n\"\\xf7\\x4d\\xc7\\x16\\xf9\\x5e\\xf8\\xb0\\xfb\\x20\\xfc\\x3f\\xfb\\x27\\x3a\\x1d\\xfc\\x3f\\xfb\\x27\\x9c\\x0a\\xf7\\x58\\xb6\\x16\\xf9\\x21\\xfb\\x33\\xf7\\x20\"\n\"\\xf7\\xa4\\x53\\x3a\\x1d\\xfc\\x3f\\xfb\\x32\\x3a\\x1d\\xfc\\x3f\\xfb\\x33\\x9c\\x0a\\xdc\\xf7\\x60\\x16\\x9e\\x1d\\xfb\\xd3\\xfb\\x05\\xf7\\x47\\x06\\xf7\\x20\"\n\"\\xfb\\xce\\xa4\\x1d\\x0e\\xf7\\x62\\xf0\\x16\\x80\\x0a\\x06\\xf7\\x20\\x49\\x0a\\xf7\\x7f\\xfb\\x05\\x15\\xf7\\x20\\xf8\\xb0\\xfb\\x20\\x06\\x0e\\x6a\\xe7\\x16\"\n\"\\x80\\x0a\\x06\\xf7\\x20\\x49\\x0a\\x0e\\x2b\\xf7\\x41\\xf7\\x76\\x15\\xf7\\x6b\\x06\\x34\\x7f\\x5e\\x5a\\x48\\x1b\\x50\\x62\\xaf\\xd1\\x77\\x1f\\xfb\\x1b\\x67\"\n\"\\x05\\xfb\\x0b\\xae\\xe4\\x4b\\xf7\\x16\\x1b\\xf7\\x3a\\xf0\\xf7\\x00\\xf7\\x46\\xf7\\x46\\x26\\xf7\\x00\\xfb\\x39\\x21\\x37\\x5d\\x39\\x60\\x1f\\xf7\\x10\\x4f\"\n\"\\x05\\xbe\\xa4\\xad\\xa3\\xbc\\x1b\\xc8\\xbc\\x5d\\x46\\x96\\x1f\\xfb\\x67\\x06\\x0e\\xf7\\x62\\xf7\\x51\\xf7\\xe8\\x15\\xf7\\x5c\\x2d\\x1d\\xf7\\x77\\xef\\x07\"\n\"\\xfb\\x35\\x9a\\xea\\x32\\xf7\\x2f\\x1b\\xf7\\x3a\\xf0\\xf7\\x00\\xf7\\x45\\xf7\\x47\\x26\\xf7\\x00\\xfb\\x3a\\x35\\x43\\x6d\\x52\\x5c\\x1f\\x6e\\x68\\x7d\\x6c\"\n\"\\x7f\\x53\\x08\\xf7\\x98\\xeb\\x15\\xd8\\xbd\\x46\\x21\\x25\\x57\\x46\\x40\\x3f\\x58\\xd0\\xf3\\xf2\\xbe\\xd1\\xd7\\x1f\\x0e\\x4a\\xf8\\x09\\x16\\xf7\\x20\\xf8\"\n\"\\xb0\\xfb\\xbf\\x06\\x29\\x48\\x4b\\x2c\\x49\\xa9\\x5a\\xc1\\x74\\x1f\\x62\\x70\\x83\\x7a\\x88\\x49\\x88\\x42\\x85\\x71\\x74\\x69\\x08\\xf7\\x25\\x06\\x97\\xa3\"\n\"\\x93\\xaf\\xb4\\x1a\\xad\\x07\\xbc\\x9c\\x9c\\xbd\\x1e\\xe7\\x06\\xf7\\x05\\x04\\xfb\\x21\\x06\\x6f\\x76\\xa2\\xac\\xad\\x9f\\xa2\\xa8\\x1f\\xf7\\x21\\x06\\x0e\"\n\"\\xfb\\x5d\\xf7\\xdd\\x24\\x1d\\xfb\\x85\\xfc\\xb0\\xab\\x0a\\x06\\xf7\\x1a\\xf7\\x32\\x05\\xfb\\x1a\\x06\\x0e\\x66\\xf7\\x22\\x16\\xf7\\x20\\xf7\\x71\\x06\\xb1\"\n\"\\xa9\\x9e\\x97\\xa8\\x1b\\xad\\x9d\\x7a\\x6a\\x1f\\xfb\\x5e\\x07\\x8c\\x65\\x72\\x70\\x66\\x8a\\x08\\x2c\\x2e\\xf7\\x10\\x06\\xed\\x8c\\xd8\\xdb\\x88\\xee\\x08\"\n\"\\xf7\\x49\\x07\\xe6\\x50\\xc8\\x34\\x60\\x6a\\x7e\\x69\\x5b\\x1e\\xf7\\x69\\xf7\\x1a\\xe8\\xfb\\x1a\\xf3\\xfb\\x20\\x23\\x21\\x2e\\xf5\\x07\\x0e\\xfb\\x7b\\x90\"\n\"\\x0a\\xe0\\xc5\\x15\\xe4\\x06\\xf7\\x1a\\xf7\\x32\\x05\\xfb\\x1a\\x06\\x0e\\x2b\\xf8\\x0f\\xf7\\x76\\x15\\xea\\xfb\\x67\\x07\\xd0\\x96\\xbc\\xb9\\xc8\\x1b\\xbc\"\n\"\\xad\\x73\\x58\\xa4\\x1f\\xf7\\x10\\xc7\\x05\\xdd\\x60\\x37\\xb9\\x21\\x1b\\xfb\\x39\\x65\\x1d\\xfb\\x46\\xef\\xfb\\x00\\xf7\\x3b\\xf7\\x16\\xe3\\xcb\\xf7\\x0b\"\n\"\\xaf\\x1f\\xfb\\x1c\\xaf\\x05\\x45\\x78\\x62\\x67\\x50\\x1b\\x48\\x5e\\xbc\\xe2\\x7f\\x1f\\x0e\\x2f\\xf8\\x8d\\xf8\\x02\\x15\\xf7\\x06\\x89\\x33\\xd0\\xfb\\x26\"\n\"\\x1b\\xfb\\x1c\\x63\\x0a\\x69\\x64\\x78\\x49\\x44\\x6f\\x9d\\xbf\\x81\\x1e\\xfb\\x1d\\x06\\xfb\\x0b\\x8f\\xe0\\x4e\\xf7\\x36\\x1b\\xdc\\xc8\\x9d\\xb0\\xb5\\x1f\"\n\"\\xae\\xaa\\xa0\\xbb\\xbd\\x1a\\xd0\\x67\\xb8\\x45\\xa0\\x1e\\x85\\x0a\\x1e\\x0e\\xf7\\x65\\xf8\\xb0\\x39\\x1d\\x0e\\xfc\\x03\\xf7\\x64\\x6e\\x0a\\xf7\\x67\\x24\"\n\"\\x1d\\xfb\\x20\\xfc\\xef\\x06\\x6a\\x81\\x82\\x62\\x1e\\x7c\\xfb\\x05\\x9a\\x06\\xf3\\x92\\x8b\\x97\\xa7\\x1f\\xad\\x9b\\x9d\\xaf\\xc4\\x1a\\xf9\\xce\\x58\\x1d\"\n\"\\xf7\\xd5\\xac\\x16\\xeb\\x06\\xd4\\x8c\\xc8\\xc7\\x8a\\xd3\\x08\\xf7\\xba\\xf7\\x3f\\xfc\\x3f\\xf7\\xc6\\x07\\xf5\\xd9\\xd4\\xef\\xee\\x41\\xcf\\xfb\\x02\\x1f\"\n\"\\xfb\\x3a\\xf7\\x5c\\xfc\\x57\\xfc\\x0f\\x06\\x8c\\x72\\x79\\x76\\x74\\x89\\x08\\x5a\\x06\\xf8\\xb0\\x16\\xf7\\x06\\xf7\\x34\\x07\\xa8\\xa0\\x73\\x6a\\x6a\\x76\"\n\"\\x73\\x6e\\x1f\\x0e\\xf7\\x96\\xd1\\xba\\x1d\\xf7\\xaf\\x06\\xf5\\xd9\\xd4\\xef\\xee\\x41\\xcf\\xfb\\x02\\x1f\\xfb\\x23\\xf7\\x5c\\x9b\\x0a\\xf8\\x6f\\x49\\x0a\"\n\"\\x0e\\x66\\xdb\\x16\\xf7\\x20\\xf7\\xbb\\x06\\xc7\\xa7\\xab\\xa5\\xbc\\x1b\\xc0\\xad\\x69\\xa5\\x0a\\xed\\x44\\xd1\\x28\\x51\\x64\\x7b\\x57\\x46\\x1e\\xf7\\x07\"\n\"\\xf7\\x1d\\xe8\\xfb\\x1d\\xf0\\xfb\\x20\\x26\\x24\\x2e\\xf2\\x07\\x0e\\xfb\\x28\\xf7\\x52\\xf8\\xea\\x15\\xe7\\x06\\xf7\\x17\\xf7\\x32\\x05\\xfb\\x17\\x06\\xfb\"\n\"\\x8b\\xfb\\x6c\\x15\\xfc\\xb0\\xf7\\x20\\xf7\\x83\\xc9\\x07\\x4b\\x1d\\xf7\\x24\\xac\\x1d\\x45\\xfb\\x50\\x05\\x4d\\xf7\\x50\\x06\\x0e\\x2f\\x64\\x0a\\xfb\\x4b\"\n\"\\xa6\\x0a\\x5b\\x77\\x9a\\xb3\\x87\\x1f\\x47\\x06\\x8c\\x6e\\x8e\\x7b\\x94\\x7a\\x08\\x63\\x9e\\xc0\\x6f\\xc2\\x1b\\xc2\\xc0\\xa7\\xb3\\x9e\\x1f\\x94\\x9c\\x8e\"\n\"\\x9b\\x8c\\xa8\\x08\\x0e\\xd2\\xd8\\x16\\xf7\\x64\\xfb\\x34\\xf7\\x2a\\xf7\\x34\\xf7\\x64\\xf9\\x6d\\x91\\x0a\\x5f\\xd7\\x16\\xf7\\x30\\xfb\\x34\\xf7\\x20\\xf7\"\n\"\\x34\\xf7\\x31\\xf8\\xb0\\xaa\\x1d\\x42\\xaf\\xf7\\xc0\\x15\\x8a\\x80\\x8b\\x82\\x85\\x1a\\x58\\x93\\x56\\x98\\x67\\x1e\\x29\\xaf\\xe2\\x50\\xf7\\x01\\x1b\\xf7\"\n\"\\x2e\\xea\\xf7\\x04\\xf7\\x49\\xf7\\x41\\x2c\\xf5\\xfb\\x2e\\xfb\\x0f\\x29\\x46\\x21\\x6c\\x1f\\xf7\\x24\\x06\\xb5\\x9c\\xb0\\xa2\\xbe\\x1b\\xb3\\xab\\x7b\\x6d\"\n\"\\x9e\\x1f\\x98\\x77\\x90\\x74\\x8d\\x59\\x08\\x8a\\x2e\\x15\\x3a\\x82\\x68\\x64\\x4d\\x1b\\x4a\\x65\\xb5\\xd9\\x85\\x1f\\x0e\\xf7\\x81\\xf8\\x1f\\xf8\\xd4\\x15\"\n\"\\xec\\x83\\x4c\\xc5\\x29\\x1b\\xfb\\x09\\x48\\x3e\\xfb\\x19\\xfb\\x15\\xce\\x40\\xf7\\x08\\xe9\\xcd\\xc7\\xe9\\x95\\x1f\\xfb\\x06\\x06\\x61\\x81\\x7b\\x7b\\x6d\"\n\"\\x1b\\x63\\x73\\xb3\\xcf\\xd7\\xa0\\xb1\\xb6\\xaa\\x9a\\x7c\\x5f\\x95\\x1f\\xf8\\x05\\xfb\\x47\\x15\\xfb\\x0b\\x42\\x3d\\xfb\\x15\\xfb\\x14\\xd4\\x3d\\xf7\\x0c\"\n\"\\xf7\\x0b\\xd5\\xd9\\xf7\\x12\\xf7\\x18\\x44\\xd8\\xfb\\x0f\\x1f\\x8c\\x2b\\x15\\xb8\\xa8\\x5f\\x47\\x4a\\x6d\\x5f\\x5f\\x5f\\x6d\\xb7\\xcd\\xce\\xa9\\xb7\\xb7\"\n\"\\x1f\\x42\\xf8\\x2c\\x15\\xfc\\x14\\xfd\\x59\\x05\\xdb\\x06\\xf8\\x13\\xf9\\x59\\x05\\x0e\\xfb\\x33\\xf7\\x3e\\xf7\\xb6\\x15\\xca\\xce\\xb2\\xba\\xa5\\xb7\\x08\"\n\"\\xb4\\xd1\\xa4\\xd9\\xc5\\x1a\\xc1\\x70\\xae\\x61\\x33\\x49\\xfb\\x22\\xfb\\xd4\\x4e\\x1e\\x70\\x6c\\x79\\x79\\x7c\\x7e\\x08\\x79\\x7b\\x85\\x83\\x83\\x1a\\x82\"\n\"\\x93\\x81\\x93\\x92\\xa6\\x9f\\xa3\\xa4\\x1e\\x7f\\x2f\\x8a\\x7b\\x6b\\x1a\\x51\\xa8\\x68\\xba\\xaf\\xa9\\xa0\\xb8\\xa5\\x1e\\x98\\xa1\\x92\\x9f\\x97\\x1a\\x95\"\n\"\\x84\\x92\\x81\\x82\\x85\\x85\\x7c\\x83\\x1e\\x5e\\x75\\x7e\\x7d\\x79\\x1b\\x7e\\x86\\x92\\x9d\\xa4\\x9e\\xf7\\x13\\x9b\\xd8\\x1f\\x96\\xce\\x15\\xf7\\x8b\\xb4\"\n\"\\xaa\\xe7\\xb5\\x1b\\x9a\\x95\\x7b\\x74\\x31\\x55\\xfb\\x08\\x36\\x2d\\x1f\\x0e\\xf8\\x67\\xf8\\x40\\x16\\xf7\\x0d\\xf9\\x6d\\xfb\\x0d\\xfc\\x84\\x06\\xfb\\x7d\"\n\"\\xf8\\x84\\x05\\xfb\\x10\\xfd\\x6d\\xf7\\x0d\\xf8\\x8c\\x06\\xf8\\x5b\\xfc\\x8c\\x15\\xf8\\x38\\xea\\xfc\\x38\\x06\\xf7\\x62\\xf9\\x1a\\x15\\xfb\\x19\\x39\\xfb\"\n\"\\x01\\xfb\\x45\\xfb\\x46\\xdc\\xfb\\x00\\xf7\\x1a\\xf7\\x19\\xde\\xf7\\x00\\xf7\\x42\\xf7\\x4b\\x3b\\xf6\\xfb\\x1c\\x1f\\xfb\\x05\\x04\\xc9\\xb4\\x46\\x21\\x26\"\n\"\\x61\\x45\\x4f\\x4d\\x62\\xd0\\xf3\\xf3\\xb4\\xd0\\xc8\\x1f\\x0e\\x6a\\xf8\\x8d\\xf7\\xa6\\x15\\xf5\\xf7\\x9e\\x05\\xfb\\x26\\x06\\x63\\xfb\\x19\\x76\\xb3\\x7f\"\n\"\\x9d\\x76\\xa0\\x19\\xb3\\x65\\x58\\xa2\\x5a\\x1b\\xfb\\x0d\\x31\\xfb\\x0f\\xfb\\x39\\xfb\\x38\\xe3\\xfb\\x0d\\xf7\\x0d\\xde\\xc8\\xbe\\xf7\\x04\\xc0\\x1f\\xbd\"\n\"\\xfb\\x1f\\x05\\xf7\\x2d\\x06\\xfb\\x94\\xf7\\xa6\\x15\\x71\\x38\\x82\\x72\\x7c\\x74\\x08\\x69\\x75\\x6e\\x77\\x71\\x1b\\x55\\x65\\xd3\\xf2\\xf3\\xb0\\xd0\\xc3\"\n\"\\xbf\\xb2\\x59\\xfb\\x05\\xae\\x1f\\x0e\\x6a\\xf8\\x98\\xf7\\xa6\\x15\\xf6\\xf7\\x9e\\x05\\xfb\\x26\\x06\\x62\\xfb\\x19\\x77\\xb3\\x7e\\x9d\\x77\\xa0\\x19\\xb3\"\n\"\\x64\\x58\\xa2\\x59\\x1b\\xfb\\x11\\x2d\\xfb\\x10\\xfb\\x38\\xfb\\x37\\xe7\\xfb\\x0d\\xf7\\x11\\xdf\\xc8\\xbd\\xf7\\x04\\xc0\\x1f\\xbd\\xfb\\x1f\\x05\\xf7\\x2e\"\n\"\\x06\\xfb\\x94\\xf7\\xa6\\x15\\x71\\x38\\x81\\x73\\x7d\\x74\\x08\\x68\\x74\\x6f\\x78\\x6f\\x1b\\x50\\x62\\xd4\\xf2\\xf0\\xb4\\xd1\\xc7\\xc0\\xb2\\x5a\\xfb\\x06\"\n\"\\xaf\\x1f\\x47\\xf8\\x97\\x23\\x1d\\x2f\\x26\\x1d\\xce\\xf8\\x64\\x28\\x0a\\xfb\\xcf\\xc5\\xf7\\x82\\x15\\xf7\\x42\\xfb\\xe8\\x05\\x7b\\x93\\x95\\x84\\x97\\x1b\"\n\"\\x93\\x90\\x8f\\x92\\x92\\x89\\x93\\x88\\x93\\x1f\\xfb\\x17\\xf7\\xdd\\xf7\\x17\\xf7\\xdd\\x05\\x8e\\x93\\x8d\\x93\\x92\\x1a\\x93\\x86\\x8f\\x83\\x7f\\x83\\x85\"\n\"\\x79\\x81\\x1e\\x0e\\xfb\\xcf\\xf7\\xa7\\xf7\\x82\\x15\\xfb\\x42\\xf7\\xe8\\x05\\x9c\\x82\\x82\\x92\\x7f\\x1b\\x83\\x86\\x87\\x83\\x85\\x8d\\x83\\x8e\\x82\\x1f\"\n\"\\xf7\\x17\\xfb\\xdd\\xfb\\x17\\xfb\\xdd\\x05\\x88\\x84\\x89\\x83\\x84\\x1a\\x83\\x90\\x87\\x93\\x97\\x93\\x91\\x9c\\x95\\x1e\\x0e\\x2f\\xf8\\xa0\\x9c\\x15\\x73\"\n\"\\xa2\\x83\\x9b\\xa6\\x1a\\xf7\\xc0\\x07\\xf7\\x02\\x40\\xc3\\xfb\\x26\\x60\\x0a\\xd8\\x06\\x3e\\x70\\x5c\\x56\\x50\\x1a\\x50\\xc1\\x68\\xe9\\xa7\\x9f\\x8d\\x92\"\n\"\\xa6\\x1e\\xba\\x07\\x88\\x78\\x78\\x89\\x78\\x1b\\x57\\x73\\x9c\\xaf\\xba\\xb1\\xb8\\xd2\\xb0\\x1f\\x88\\x1d\\x0e\\x28\\xf8\\x73\\xf8\\x25\\x15\\x6c\\x6d\\x75\"\n\"\\x81\\x64\\x1b\\x71\\x7e\\x8e\\x9b\\x51\\x1f\\x9c\\x4a\\x6a\\x92\\x73\\x1b\\x71\\x74\\x82\\x7a\\x75\\x1f\\x7c\\x80\\x83\\x80\\x72\\x67\\x88\\x86\\x84\\x80\\x83\"\n\"\\x81\\xb0\\x5a\\x18\\xaf\\xa9\\xa5\\x98\\xb3\\x1b\\xa1\\xa6\\x86\\x7c\\xc4\\x1f\\x76\\xd9\\x97\\x89\\xa5\\x1b\\xa9\\xa8\\x97\\xa1\\xa1\\x1f\\x98\\x98\\x8c\\x8c\"\n\"\\xae\\xb4\\x08\\x65\\xfb\\x11\\x15\\x6c\\x6d\\x75\\x81\\x64\\x1b\\x71\\x7e\\x8e\\x9b\\x51\\x1f\\x9c\\x4a\\x6a\\x92\\x73\\x1b\\x71\\x74\\x82\\x7a\\x75\\x1f\\x7c\"\n\"\\x80\\x82\\x80\\x73\\x67\\x88\\x87\\x84\\x80\\x83\\x80\\xb0\\x5a\\x18\\xaf\\xa9\\xa5\\x98\\xb3\\x1b\\xa1\\xa6\\x86\\x7c\\xc4\\x1f\\x76\\xd9\\x97\\x89\\xa5\\x1b\"\n\"\\xaa\\xa7\\x97\\xa2\\xa1\\x1f\\x98\\x97\\x8d\\x8d\\xad\\xb3\\x08\\x0e\\x2f\\x26\\x1d\\x32\\xf8\\x97\\x2c\\x1d\\xb0\\xf7\\x3e\\x20\\x1d\\xf7\\xf4\\xf9\\x5d\\xf7\"\n\"\\xac\\x15\\x6a\\x5e\\x6e\\x53\\x78\\x1a\\x81\\x93\\x84\\x95\\x92\\x8f\\x8d\\x94\\x93\\x1e\\xbc\\xc6\\xa6\\xa0\\xea\\xc4\\x08\\x9c\\x94\\x8d\\x8e\\x95\\x1a\\x92\"\n\"\\x85\\x90\\x76\\x97\\x1e\\x42\\xb5\\x5f\\xad\\x64\\xb9\\x08\\x9c\\x7d\\x87\\x8e\\x83\\x1b\\x81\\x83\\x84\\x82\\x79\\xb0\\x40\\xa4\\x6d\\x1f\\xfc\\x3f\\x06\\xa6\"\n\"\\xac\\xaf\\xd3\\x9e\\x1a\\x93\\x83\\x92\\x81\\x83\\x88\\x88\\x7a\\x7c\\x1e\\x63\\x5c\\x61\\x6a\\x41\\x61\\x08\\x77\\x80\\x84\\x85\\x84\\x1a\\x83\\x8f\\x86\\x93\"\n\"\\x86\\x1e\\xe9\\x54\\xaa\\x73\\xb7\\x58\\x08\\x76\\x9d\\x8c\\x8a\\x94\\x1b\\x95\\x93\\x92\\x94\\x91\\x7f\\xab\\x83\\x9b\\x1f\\x80\\xa0\\x80\\x9d\\x76\\xa7\\x08\"\n\"\\x0e\\xfb\\x28\\xf7\\xa2\\xf9\\x65\\x15\\x4f\\xfd\\x2a\\x06\\x74\\x9c\\x7b\\x95\\x77\\x96\\x08\\x95\\x78\\x67\\x99\\x83\\x1b\\x82\\x84\\x83\\x81\\x84\\x8d\\x87\"\n\"\\x94\\x83\\x1f\\xc7\\x59\\x9e\\x73\\xc5\\x2a\\x08\\x79\\x95\\x8e\\x89\\x94\\x1b\\x92\\x91\\x92\\x9f\\x96\\x1f\\xb4\\xd4\\xad\\xb7\\xba\\xb3\\x08\\x9c\\x9a\\x8e\"\n\"\\x8e\\x93\\x1a\\x95\\x84\\x93\\x82\\x79\\x40\\x65\\x73\\x6e\\x1e\\x0e\\xf7\\xf4\\xfa\\x25\\xf7\\xad\\x15\\xc7\\xfd\\x2a\\x07\\x9c\\xa2\\x95\\x9b\\x96\\x9f\\x08\"\n\"\\x95\\x9e\\x99\\xaf\\x93\\x1a\\x94\\x83\\x92\\x81\\x84\\x87\\x89\\x82\\x83\\x1e\\x59\\x4f\\x73\\x78\\x2a\\x51\\x08\\x79\\x81\\x89\\x88\\x82\\x1a\\x84\\x92\\x85\"\n\"\\x9f\\x80\\x1e\\xd4\\x62\\xb7\\x69\\xb3\\x5c\\x08\\x7a\\x9a\\x8e\\x88\\x93\\x1b\\x95\\x93\\x92\\x94\\x9d\\x65\\xd6\\x73\\xa8\\x1f\\x0e\\xf7\\xf4\\xe0\\xf7\\xad\"\n\"\\x15\\xf9\\x2a\\x06\\x73\\x6e\\x65\\x40\\x79\\x1a\\x82\\x93\\x84\\x95\\x93\\x8e\\x8e\\x9c\\x9a\\x1e\\xb3\\xba\\xb7\\xad\\xd4\\xb4\\x08\\x9f\\x96\\x92\\x91\\x92\"\n\"\\x1a\\x93\\x87\\x90\\x83\\x90\\x1e\\x26\\xc6\\x70\\xa1\\x58\\xc7\\x08\\x94\\x83\\x87\\x8d\\x84\\x1b\\x81\\x83\\x84\\x82\\x85\\x97\\x6a\\x93\\x7b\\x1f\\x96\\x74\"\n\"\\x97\\x79\\x9e\\x71\\x08\\xfd\\x2a\\x06\\x0e\\xfb\\x28\\xf7\\x66\\x20\\x15\\xc7\\xf9\\x2a\\x06\\xa2\\x7a\\x9b\\x81\\x9f\\x80\\x08\\x81\\x9e\\xaf\\x7d\\x93\\x1b\"\n\"\\x94\\x92\\x93\\x95\\x92\\x89\\x8f\\x82\\x93\\x1f\\x4f\\xbd\\x78\\xa3\\x51\\xec\\x08\\x9d\\x81\\x88\\x8d\\x82\\x1b\\x84\\x85\\x84\\x77\\x80\\x1f\\x62\\x42\\x69\"\n\"\\x5f\\x5c\\x63\\x08\\x7a\\x7c\\x88\\x88\\x83\\x1a\\x81\\x92\\x83\\x94\\x9d\\xd5\\xb1\\xa3\\xa9\\x1e\\x0e\\xfb\\x28\\xf7\\x67\\xf7\\x19\\x15\\xa5\\x6c\\x42\\x70\"\n\"\\x1d\\x73\\x7f\\x79\\x7f\\x72\\x78\\x8a\\xf8\\x3a\\x18\\xa2\\x7a\\x9b\\x81\\x9f\\x80\\x08\\x81\\x9e\\xaf\\x7d\\x93\\x1b\\x94\\x92\\x93\\x95\\x92\\x89\\x8f\\x82\"\n\"\\x93\\x1f\\x4f\\xbd\\x78\\xa3\\x51\\xec\\x08\\x9d\\x81\\x88\\x8d\\x82\\x1b\\x84\\x85\\x84\\x77\\x80\\x1f\\x62\\x42\\x69\\x5f\\x5c\\x63\\x08\\x7a\\x7c\\x88\\x88\"\n\"\\x83\\x1a\\x81\\x92\\x83\\x94\\x9d\\xd5\\xb1\\xa3\\xa9\\x1e\\x0e\\xfb\\x28\\xf7\\x0c\\x47\\x15\\x60\\xf7\\x9c\\xb6\\x07\\xfb\\x41\\xf7\\x94\\x15\\xa4\\x6d\\x41\"\n\"\\x70\\x1d\\x74\\x80\\x79\\x7f\\x71\\x78\\x8a\\xf8\\x3a\\x18\\xa3\\x7a\\x9a\\x81\\x9f\\x80\\x08\\x81\\x9e\\xaf\\x7d\\x93\\x1b\\x94\\x92\\x93\\x95\\x92\\x89\\x8f\"\n\"\\x82\\x93\\x1f\\x4f\\xbd\\x78\\xa3\\x51\\xec\\x08\\x9d\\x81\\x88\\x8d\\x82\\x1b\\x84\\x85\\x84\\x77\\x80\\x1f\\x62\\x42\\x69\\x5f\\x5c\\x63\\x08\\x7a\\x7c\\x88\"\n\"\\x88\\x83\\x1a\\x81\\x92\\x83\\x94\\x9d\\xd6\\xb1\\xa3\\xa8\\x1e\\x0e\\x65\\xcd\\xfb\\x6e\\x15\\xf7\\x20\\xf7\\x8b\\x06\\x66\\xb6\\xb5\\x7c\\xc5\\x1b\\xf7\\x15\"\n\"\\xeb\\xee\\xf7\\x17\\xc6\\x77\\xc2\\x6a\\xac\\x1f\\x77\\x9f\\x76\\x96\\x5f\\x9a\\x08\\xca\\xb3\\xa7\\xb9\\xcc\\x1a\\xf7\\x04\\x2f\\xd8\\xfb\\x19\\x36\\x44\\x6e\"\n\"\\x57\\x63\\x1e\\x6d\\x63\\x81\\x5f\\x2b\\x1a\\xf7\\x20\\x99\\x15\\xc9\\x8e\\xa1\\x97\\xa1\\x1e\\xa6\\x9a\\xab\\x9d\\xad\\x1b\\xc2\\xaf\\x64\\x50\\x63\\x79\\x67\"\n\"\\x6f\\x7c\\x1f\\x79\\x81\\x7a\\x88\\x66\\x89\\x08\\x39\\x90\\x07\\x9a\\x8c\\x9b\\x8c\\xae\\x82\\xa0\\x80\\x19\\xb6\\x76\\xa3\\x5f\\x52\\x1a\\x3b\\x58\\x50\\x44\"\n\"\\x65\\x67\\x97\\xa3\\x6b\\x1e\\x0e\\x2f\\x36\\x1d\\xb2\\xf8\\x37\\x15\\xfb\\x12\\x06\\x45\\xfb\\x2a\\x05\\xd1\\x06\\x0e\\x2f\\x36\\x1d\\x5c\\xf7\\xa1\\x93\\x1d\"\n\"\\x2f\\x36\\x1d\\xfb\\x35\\xf8\\x37\\x15\\x20\\x52\\x1d\\x2f\\x36\\x1d\\x5e\\xf8\\x29\\x27\\x0a\\x43\\xf7\\xb5\\xf7\\xbb\\x15\\xfb\\x04\\xf7\\x89\\x05\\xfb\\x2b\"\n\"\\x06\\xf7\\x52\\xfc\\x03\\xfb\\x61\\xfc\\x1b\\x05\\xf7\\x29\\x06\\xf7\\x13\\xf7\\xa5\\xf7\\x11\\xfb\\xa5\\x05\\xf7\\x2e\\x06\\xfb\\x62\\xf8\\x1f\\xf7\\x51\\xf7\"\n\"\\xff\\x05\\xfb\\x27\\x06\\x0e\\xf7\\xf4\\xf8\\x8b\\xf9\\x4b\\x15\\xfb\\x5c\\xfb\\x36\\xfb\\x35\\xfb\\x5c\\xfb\\x58\\xf7\\x36\\xfb\\x36\\xf7\\x57\\xf7\\x59\\xf7\"\n\"\\x37\\xf7\\x37\\xf7\\x57\\xf7\\x58\\xfb\\x36\\xf7\\x39\\xfb\\x55\\x1f\\x87\\xfb\\xd0\\x15\\xfb\\x52\\xf7\\x50\\x05\\xb8\\xc2\\xcc\\xa2\\xd1\\x1b\\xd0\\xcb\\x74\"\n\"\\x60\\xc4\\x1f\\xb3\\x63\\x15\\xbb\\x52\\xa2\\x4c\\x42\\x1a\\x43\\x74\\x4b\\x5d\\x53\\x1e\\xfb\\x54\\xf7\\x57\\x05\\xf7\\x2c\\xfb\\x7f\\x15\\x5f\\x54\\x48\\x73\"\n\"\\x45\\x1b\\x45\\x4b\\xa2\\xba\\x50\\x1f\\xf7\\x55\\xf7\\x55\\x05\\xfb\\x7d\\xfb\\x2d\\x15\\x5f\\xc1\\x74\\xcb\\xd1\\x1a\\xd3\\xa2\\xcb\\xba\\xc4\\x1e\\xf7\\x52\"\n\"\\xfb\\x50\\x05\\x0e\\x93\\xf8\\xd7\\x16\\x9f\\x07\\x24\\x9f\\x6e\\x99\\x5d\\xbb\\x5c\\xbf\\x7a\\xc0\\x8a\\xeb\\xa0\\x66\\x93\\x7e\\x97\\x7d\\x08\\x5d\\xb2\\xc9\"\n\"\\x6c\\xc0\\x1b\\xe6\\xd2\\xd5\\xe9\\xe5\\x4a\\xd3\\x3a\\x6e\\x84\\x89\\x6e\\x50\\x1f\\xa7\\xb4\\x96\\xaa\\xb0\\x1a\\xe3\\x42\\xd2\\x30\\x2e\\x44\\x45\\x31\\x67\"\n\"\\x92\\x78\\xad\\x56\\x1e\\xa3\\x5b\\x76\\x91\\x6c\\x1b\\x40\\x49\\x3f\\x34\\x2e\\xd4\\x42\\xe7\\xdc\\xcf\\xbd\\xe6\\xb8\\x1f\\x8c\\x7b\\x8b\\x80\\x86\\x1a\\x43\"\n\"\\x65\\x3a\\x55\\x5f\\x1e\\x6b\\x72\\x74\\x82\\x2c\\x77\\x08\\x77\\x07\\x0e\\xea\\xf8\\x2b\\x6d\\x1d\\xf7\\xcb\\xf7\\xbd\\x22\\x1d\\x66\\xf8\\x29\\xf8\\xe8\\x15\"\n\"\\xfb\\x12\\x07\\xc1\\x68\\x5d\\xa4\\x47\\x1b\\xfb\\x15\\x29\\xfb\\x10\\xfb\\x37\\xfb\\x36\\xed\\xfb\\x0f\\xf7\\x15\\xcf\\xb9\\xa3\\xc1\\xae\\x1f\\x54\\xf7\\x20\"\n\"\\xf8\\xe8\\xc7\\xce\\x4f\\xcd\\xfb\\x20\\x49\\xfb\\x19\\x48\\x07\\x9a\\xfb\\x38\\xa8\\x1d\\xef\\xbb\\xd1\\xd1\\x1f\\x0e\\x61\\xf6\\xf9\\x81\\x15\\x2a\\x07\\xf7\"\n\"\\x2f\\xfb\\x0c\\x45\\x85\\x68\\x7e\\x65\\x69\\x19\\x55\\x59\\x6e\\x41\\x2d\\x1a\\xfb\\x44\\xf1\\xfb\\x00\\xf7\\x39\\xf7\\x3a\\xf0\\xf7\\x00\\xf7\\x46\\xf7\\x0b\"\n\"\\x67\\xd3\\x2b\\xd4\\x1e\\xfb\\x26\\xf7\\x03\\x05\\xf7\\x6a\\xf7\\x03\\x06\\xfb\\x5f\\xfb\\xcd\\x50\\x1d\\xfb\\x1e\\x90\\xf7\\xf1\\x15\\xf0\\xfb\\x11\\xf7\\x10\"\n\"\\xfb\\x45\\xb1\\x40\\xc7\\xf7\\x00\\xf7\\x05\\xf7\\x34\\xf4\\xf7\\x11\\x3b\\xe6\\xfb\\x39\\xf7\\x7d\\x6a\\xcf\\x53\\x24\\x41\\x22\\xfb\\x26\\xfb\\x4c\\x08\\x0e\"\n\"\\xfb\\x4b\\xf7\\x4a\\x80\\x1d\\x2f\\x27\\x1d\\xac\\xf8\\x41\\x86\\x1d\\x2f\\x27\\x1d\\x5b\\xf7\\xb4\\x93\\x1d\\x2f\\x27\\x1d\\x5f\\xf8\\x3c\\x27\\x0a\\xf7\\xf4\"\n\"\\xf9\\x93\\xf7\\x6c\\x15\\xc8\\xfc\\x62\\x07\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\x8c\\x0a\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x38\\x9a\\x0a\\xc9\\xfb\\xb7\\x06\"\n\"\\xfb\\x01\\x89\\x53\\xbd\\x85\\xf5\\x08\\x0e\\x2f\\x27\\x1d\\xbe\\xf8\\x24\\x15\\xfb\\xbf\\x3c\\xf7\\xbf\\x06\\x0e\\x66\\xf7\\xe8\\xfb\\x69\\x15\\x88\\xa6\\xad\"\n\"\\x89\\xa1\\x1b\\xe5\\xac\\xad\\xe5\\x1f\\xf8\\x5c\\x07\\xd0\\x7a\\xb8\\x65\\xab\\x1e\\xa5\\x6c\\x5f\\x9a\\x58\\x1b\\x42\\x5a\\x71\\x4e\\x63\\x1f\\xd9\\xfb\\x20\"\n\"\\xa1\\x0a\\xcf\\xca\\xa7\\x6d\\x49\\x1e\\xfc\\x1a\\x07\\x67\\x81\\x7e\\x6f\\x81\\x85\\x8c\\x8f\\x7f\\x1e\\x0e\\x2f\\xf8\\x72\\xfb\\x45\\x15\\x87\\x78\\x79\\x89\"\n\"\\x77\\x1b\\x57\\x73\\x9b\\xaf\\xb7\\x9f\\xad\\xd0\\xd5\\x1f\\xc5\\xc9\\x97\\x9d\\x99\\xbe\\x08\\xfb\\x1e\\x06\\x5f\\x7a\\x65\\x72\\x58\\x1b\\x63\\x6a\\x9c\\xa9\"\n\"\\x78\\x1f\\x7e\\xa0\\x86\\xa3\\x89\\xbe\\x08\\xf7\\xfe\\x06\\x8c\\x97\\x8b\\x92\\x90\\x1a\\xc1\\x83\\xbe\\x7e\\xb0\\x1e\\xed\\x67\\x34\\xc6\\xfb\\x02\\x1b\\xfb\"\n\"\\x2f\\x2c\\xfb\\x04\\xfb\\x49\\xfb\\x41\\xe9\\x20\\xf7\\x2d\\xa7\\x9d\\x8e\\x95\\xaf\\x1f\\x44\\x5a\\x73\\x6b\\x5e\\x1a\\x4f\\xc2\\x66\\xe4\\xa7\\xa3\\x8e\\x92\"\n\"\\xa6\\x1e\\xfb\\xcf\\xf8\\xb3\\xad\\x0a\\xca\\x97\\x0a\\x0e\\xfb\\x41\\xf7\\xc5\\xf7\\xcb\\x15\\x5d\\x8c\\x7d\\x8c\\x74\\x91\\x08\\x6b\\x93\\x79\\xa1\\xa9\\x1a\"\n\"\\xb3\\xa9\\xa3\\xbc\\xc0\\xaa\\x76\\x5d\\x97\\x1e\\xf7\\x20\\x06\\xf7\\x05\\x78\\x37\\xc7\\xfb\\x1f\\x1b\\xfb\\x14\\x39\\x51\\x30\\x59\\xa1\\x64\\xb9\\x67\\x1f\"\n\"\\x51\\x75\\x6f\\x61\\x4c\\x1a\\x23\\xe3\\x48\\xf7\\x1c\\xe4\\xc6\\xa1\\xbe\\xbb\\x1e\\xab\\xac\\x99\\xa8\\x97\\xc0\\x08\\xfb\\x20\\x06\\x4e\\x79\\x6c\\x73\\x50\"\n\"\\x1b\\x54\\x68\\xa7\\xb7\\xa9\\x9d\\xa3\\xa8\\x92\\x1f\\xa3\\x91\\x8e\\x8c\\xd5\\x8c\\x08\\x0e\\xfb\\x59\\xf7\\xb9\\xf7\\xcb\\x15\\x5e\\x8c\\x7e\\x8c\\x76\\x91\"\n\"\\x08\\x6c\\x93\\x79\\xa1\\xa9\\x1a\\xb3\\xa7\\xa3\\xba\\xbf\\xaa\\x76\\x5d\\x97\\x1e\\xf7\\x20\\x06\\xf7\\x05\\x78\\x37\\xc7\\xfb\\x1e\\x1b\\xfb\\x12\\x3b\\x51\"\n\"\\x2f\\x5b\\x9f\\x63\\xb6\\x67\\x1f\\x55\\x75\\x70\\x61\\x4d\\x1a\\x21\\xe1\\x49\\xf7\\x1c\\xe0\\xc7\\xa2\\xbd\\xbb\\x1e\\xab\\xac\\x99\\xa8\\x97\\xc0\\x08\\xfb\"\n\"\\x20\\x06\\x4f\\x79\\x6c\\x72\\x51\\x1b\\x57\\x69\\xa7\\xb7\\xa9\\x9c\\xa3\\xa7\\x92\\x1f\\xa3\\x91\\x8e\\x8c\\xd2\\x8c\\x08\\x7a\\xf8\\xcc\\x23\\x1d\\x4a\\xf8\"\n\"\\xaa\\xf7\\xb7\\x9b\\x1d\\xf8\\xeb\\x04\\xfc\\x78\\xfb\\x0b\\xf8\\x78\\x06\\x0e\\x5b\\xf8\\xa9\\xf7\\x88\\x15\\x92\\x07\\x94\\x07\\x89\\xd4\\x86\\xa8\\x7c\\xb2\"\n\"\\x08\\xde\\x69\\x3a\\xbd\\x28\\x1b\\xfb\\x29\\x2c\\xfb\\x00\\xfb\\x3c\\xfb\\x3c\\xe6\\x26\\xf7\\x2b\\xf7\\x06\\xd8\\xc1\\xf0\\xaa\\x1f\\x8d\\x90\\x8d\\x92\\x05\"\n\"\\x4b\\x06\\x8a\\x89\\x89\\x86\\x8a\\x88\\x08\\x4f\\x70\\x53\\x69\\x42\\x1b\\x60\\x68\\x96\\xa0\\x73\\x1f\\x7b\\x9a\\x82\\x9b\\x80\\xae\\x8c\\xe9\\x18\\xf7\\xac\"\n\"\\xc1\\x15\\xfb\\xaa\\xdb\\x06\\xcf\\xab\\xae\\xa3\\xce\\x1b\\xc1\\xaf\\x7b\\x64\\xac\\x1f\\x96\\x7f\\x8f\\x84\\x91\\x7a\\x08\\x0e\\x66\\x7d\\x1d\\x0e\\x66\\x7d\"\n\"\\x1d\\xf7\\x53\\xf7\\x8d\\x23\\x1d\\x5f\\xf7\\x8a\\x87\\x1d\\xf7\\xc4\\x72\\x0a\\xfb\\x74\\xbe\\x16\\xf7\\xd9\\xf8\\xd5\\xfb\\xd9\\x37\\xf7\\x85\\xfb\\x36\\xfb\"\n\"\\x85\\x37\\xf7\\x85\\xfb\\x37\\xfb\\x85\\x06\\x0e\\xf1\\xf7\\xf4\\xf7\\x98\\x15\\xfb\\x37\\x60\\xf7\\x37\\xfb\\x3a\\xbb\\xf7\\x3a\\xf7\\x35\\xb6\\xfb\\x35\\xf3\"\n\"\\x06\\xe4\\x98\\xcf\\xda\\xe6\\x1a\\xee\\x37\\xde\\x28\\x29\\x38\\x34\\x26\\x34\\xcf\\x3e\\xe6\\x7e\\x1e\\xa6\\xf7\\xcb\\x15\\xd0\\xc5\\x50\\x45\\x43\\x51\\x51\"\n\"\\x44\\x42\\x52\\xc5\\xd4\\xd2\\xc5\\xc4\\xd5\\x1f\\x0e\\x2f\\xf8\\x3a\\xf8\\x4b\\x15\\xfb\\x8e\\x93\\x0a\\xf7\\xce\\xf7\\x02\\xfb\\xce\\xf7\\x20\\xf7\\x4e\\x06\"\n\"\\xdd\\xb4\\xb4\\xdd\\x99\\x96\\xb9\\x1d\\x87\\x8b\\x86\\x1b\\x4a\\x55\\x61\\x42\\x6c\\x1f\\x0e\\x2f\\xf7\\x68\\xfb\\x6e\\x15\\xf7\\x18\\xf7\\x78\\x06\\xf7\\x5a\"\n\"\\xf8\\xa6\\x05\\xfb\\x2a\\x06\\xfb\\x06\\xfc\\x1b\\xfb\\x06\\xf8\\x1b\\x05\\xfb\\x2a\\x06\\xf7\\x5a\\xfc\\xa6\\x05\\x0e\\x66\\xf8\\x48\\xf9\\x80\\x15\\x53\\x06\"\n\"\\x5d\\x83\\x74\\x56\\x1d\\x67\\xfb\\x59\\x69\\x1d\\x0e\\x66\\x68\\x1d\\x3c\\xf7\\xd9\\x23\\x0a\\x66\\xf7\\xfa\\xf8\\xf2\\x15\\xf7\\x04\\x48\\x07\\x8a\\xbd\\xa1\"\n\"\\xa9\\xb9\\x94\\x08\\xb9\\x07\\x45\\x89\\x54\\x4b\\x8e\\x3d\\x08\\x24\\x07\\xf7\\x38\\x49\\x15\\x38\\x07\\xca\\x64\\x60\\xa8\\x52\\x1b\\x5b\\x56\\x73\\x64\\x66\"\n\"\\x1f\\x55\\x53\\x6f\\x3d\\x2c\\x1a\\xfb\\x3a\\xe3\\xfb\\x06\\xf7\\x15\\xc5\\xae\\x9e\\xc6\\xbc\\x1e\\x42\\x07\\x4a\\x5d\\x5e\\x49\\x59\\x6c\\xa1\\xb4\\x80\\x1e\"\n\"\\xfb\\x24\\x06\\x8c\\x61\\x9a\\x6e\\xb0\\x6d\\x08\\x68\\xb6\\xc6\\x7a\\xd7\\x1b\\xf7\\x30\\xe9\\xd6\\xf7\\x11\\x1f\\xf8\\xc2\\x07\\xfb\\x8a\\xfb\\x00\\x15\\xcd\"\n\"\\xbc\\x42\\x27\\x29\\x5c\\x48\\x45\\x4e\\x60\\xce\\xed\\xf1\\xb6\\xd2\\xca\\x1f\\x0e\\x66\\xf7\\xf3\\xf9\\x7b\\x45\\x1d\\xbc\\x3a\\x15\\x38\\x07\\xca\\x64\\x60\"\n\"\\xa8\\x52\\x1b\\x5b\\x56\\x73\\x64\\x66\\x1f\\x55\\x53\\x6f\\x3d\\x2c\\x1a\\xfb\\x3a\\xe3\\xfb\\x06\\xf7\\x15\\xc5\\xae\\x9e\\xc6\\xbc\\x1e\\x42\\x07\\x4a\\x5d\"\n\"\\x5e\\x49\\x59\\x6c\\xa1\\xb4\\x80\\x1e\\xfb\\x24\\x06\\x8c\\x61\\x9a\\x6e\\xb0\\x6d\\x08\\x68\\xb6\\xc6\\x7a\\xd7\\x1b\\xf7\\x30\\xe9\\xd6\\xf7\\x11\\x1f\\xf8\"\n\"\\xc2\\x07\\xfb\\x8a\\xfb\\x00\\x15\\xcd\\xbc\\x42\\x27\\x29\\x5c\\x48\\x45\\x4e\\x60\\xce\\xed\\xf1\\xb6\\xd2\\xca\\x1f\\x0e\\x28\\xb3\\x1d\\xfc\\x7d\\xf7\\x39\"\n\"\\x15\\xf8\\x7d\\xf7\\x49\\x05\\xf7\\x0d\\x07\\xfc\\x7d\\xf7\\x4a\\x05\\xfb\\x03\\x07\\xf8\\x12\\xfb\\x17\\xfc\\x12\\xfb\\x19\\x05\\x0e\\x66\\xf7\\x63\\xf9\\x34\"\n\"\\x15\\xc4\\xfb\\x20\\x52\\x4d\\x3b\\xc9\\xfc\\xe4\\xbc\\x1d\\xa9\\xa2\\x80\\x75\\x9b\\x1e\\x98\\x78\\x8f\\x7d\\x82\\x0a\\x5d\\x1b\\x47\\x59\\x6f\\x50\\x64\\x1f\"\n\"\\xf7\\x16\\xf7\\x47\\xdb\\x07\\x0e\\x66\\x61\\x0a\\xfb\\x05\\xf7\\x63\\x23\\x0a\\x55\\xf7\\xbc\\x6f\\x15\\x9f\\xe5\\xc7\\xf2\\xf7\\x08\\xf7\\x25\\x08\\xeb\\xf7\"\n\"\\x0e\\xab\\xce\\xda\\x1a\\xde\\x45\\xcf\\x37\\x5b\\x5f\\x76\\x65\\x6a\\x1e\\x75\\x72\\x81\\x75\\x7e\\x5d\\x7f\\xaf\\x83\\x9d\\x7f\\x9d\\x08\\xbd\\x6a\\x58\\xa8\"\n\"\\x54\\x1b\\x36\\x49\\x47\\x32\\x48\\xa0\\x5e\\xdf\\xfb\\x06\\x1f\\xf7\\x2b\\xfb\\x5e\\xb3\\x47\\xa5\\x24\\x08\\x0e\\x5f\\xa6\\x16\\xf8\\xba\\xf8\\x25\\x06\\xfb\"\n\"\\xa7\\xf7\\xdc\\xfb\\xa7\\xfb\\xdc\\x05\\xbe\\xfb\\xf2\\x15\\xf7\\xdc\\x07\\xf7\\x74\\xf7\\xa2\\xf7\\x74\\xfb\\xa2\\x05\\xfb\\xdc\\x07\\x0e\\x30\\x1d\\xc7\\xf9\"\n\"\\x78\\x44\\x0a\\x2f\\xf7\\x74\\xf8\\xb0\\x39\\x1d\\xf7\\x93\\x4b\\x7b\\x1d\\xf7\\x64\\x48\\x0a\\xc6\\xf9\\x63\\x15\\xfb\\x97\\x3c\\xf7\\x97\\x06\\x0e\\xcc\\xf7\"\n\"\\xf8\\xf7\\xbd\\x15\\x5b\\xb6\\x86\\x8f\\x78\\x99\\x08\\xa7\\x67\\x5c\\x9d\\x67\\x1b\\x3e\\x4c\\x4c\\x3e\\x3e\\xca\\x4c\\xd8\\xb0\\xb8\\x9d\\xa7\\xb0\\x1f\\x9e\"\n\"\\x99\\x90\\x8f\\xbb\\xb6\\xbc\\x60\\x90\\x87\\x9e\\x7d\\x08\\x6f\\xaf\\xb9\\x79\\xb0\\x1b\\xd8\\xca\\xca\\xd8\\xd8\\x4c\\xca\\x3e\\x67\\x5c\\x79\\x6f\\x67\\x1f\"\n\"\\x78\\x7d\\x86\\x87\\x5a\\x60\\x08\\xaf\\x6a\\x15\\xc4\\xc5\\xc2\\xaa\\xb5\\x1b\\xbc\\xb3\\x63\\x5b\\x5a\\x63\\x63\\x5a\\x61\\x53\\xab\\xc4\\x52\\x1f\\x44\\x16\"\n\"\\x53\\x52\\x53\\x6b\\x61\\x1b\\x5a\\x63\\xb3\\xbb\\xbb\\xb3\\xb3\\xbc\\xb5\\xc3\\x6c\\x52\\xc4\\x1f\\x0e\\xfc\\x0a\\xf7\\x50\\xf8\\x9f\\x15\\xb0\\x72\\x1d\\xfb\"\n\"\\x78\\x07\\x5f\\x8f\\x4d\\x95\\x24\\x88\\x0a\\x94\\x81\\x80\\x90\\x7d\\x1b\\x71\\x75\\x75\\x70\\x6c\\xa7\\x73\\xae\\xb7\\xaa\\x0a\\xd4\\xf7\\x41\\x1a\\x0e\\x5f\"\n\"\\xf7\\xab\\xfa\\x25\\x15\\xfd\\x79\\x07\\x66\\x91\\x3c\\x94\\x2e\\x88\\x0a\\x95\\x81\\x7f\\x90\\x7e\\x1b\\x70\\x76\\x75\\x6f\\x6d\\xa7\\x73\\xae\\xb6\\xaa\\x0a\"\n\"\\xcf\\xf7\\x46\\x1a\\xf9\\x70\\x07\\x0e\\x5f\\xf7\\xf5\\xfb\\x6e\\x15\\xf9\\x78\\x07\\xb1\\x72\\x1d\\xfd\\x70\\x07\\x0e\\xd2\\xf8\\xeb\\x16\\xf7\\xa1\\x07\\xf7\"\n\"\\x29\\x86\\xb1\\x71\\xb7\\x1e\\xd1\\x61\\x3e\\xb4\\x31\\x1b\\x38\\x46\\x6a\\x4d\\x5e\\x1f\\x66\\x5a\\x85\\x67\\xfb\\x36\\x1a\\xfb\\xa1\\xd1\\xf7\\xa4\\x07\\xf7\"\n\"\\x05\\x91\\xba\\x9d\\xad\\x1e\\xbd\\xa6\\xc5\\xad\\xc8\\x1b\\xc4\\xc2\\x6e\\x5d\\xa8\\x1f\\xa2\\x67\\x91\\x62\\xfb\\x12\\x1a\\xfb\\xa4\\x07\\x0e\\xf8\\x28\\xf8\"\n\"\\xa3\\xf9\\x6e\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\"\n\"\\xf7\\x37\\xfb\\x5e\\x1f\\xfb\\x01\\xfb\\x63\\x84\\x0a\\xfb\\x14\\xfb\\x05\\x15\\x96\\x59\\x96\\x75\\xa5\\x6d\\x08\\x54\\xbb\\xc7\\x71\\xdc\\x1b\\xdc\\xc7\\xa5\"\n\"\\xc2\\xbb\\x1f\\xa5\\xa9\\x96\\xa1\\x96\\xbd\\x84\\x36\\x80\\x62\\x6d\\x5e\\x08\\x4c\\x61\\x4b\\x6b\\x38\\x1b\\x3e\\x4f\\xa6\\xc1\\x61\\x1f\\x67\\xba\\x7c\\xb8\"\n\"\\x84\\xe8\\x08\\xf7\\xee\\xf7\\x05\\x84\\x0a\\x0e\\xf7\\x63\\x24\\x1d\\xfb\\x20\\xfc\\xb0\\xd8\\x06\\x40\\x5f\\x68\\x60\\x5a\\x1a\\x4f\\xbe\\x66\\xde\\x9f\\x97\"\n\"\\x8d\\x92\\xaa\\x1e\\xba\\x07\\x87\\x74\\x80\\x8a\\x81\\x1b\\x7c\\x7d\\x8f\\x92\\x7e\\x1f\\x7b\\x95\\x86\\x96\\xa1\\x1a\\xb8\\xa8\\xb7\\xc1\\xb2\\x1e\\xf9\\x6d\"\n\"\\x58\\x1d\\x3b\\x0a\\x0e\\x3b\\x0a\\xfb\\x00\\x41\\x1d\\x3b\\x0a\\xfb\\x0d\\x80\\x1d\\x3b\\x0a\\x78\\xf9\\xa9\\x23\\x1d\\x30\\x1d\\xba\\x40\\x0a\\xf7\\x66\\xf8\"\n\"\\xb0\\x83\\x1d\\xfb\\x0f\\xf9\\xe7\\x23\\x0a\\x31\\xf7\\x5c\\xf7\\xde\\x15\\xf7\\x66\\x2d\\x1d\\xf7\\x45\\x07\\xc5\\xca\\xf7\\x15\\xfb\\x84\\x05\\xf7\\x36\\xa7\"\n\"\\x1d\\x0e\\x2f\\x7f\\x1d\\xfb\\x27\\xfc\\xec\\x22\\x1d\\x2f\\xf7\\x33\\xf7\\x3e\\x15\\xbf\\xc2\\xf7\\x3b\\xfb\\x75\\x05\\xf7\\x12\\x06\\xfb\\x75\\xf7\\xb7\\xf7\"\n\"\\x60\\xf7\\x6f\\x05\\xfb\\x11\\x06\\xfb\\x5b\\xfb\\x74\\x05\\xf7\\x74\\x22\\xfc\\x92\\xf4\\x07\\x0e\\x44\\x1d\\xd2\\x39\\x0a\\x2f\\x9b\\x16\\xf7\\x24\\x06\\xf7\"\n\"\\x09\\xf7\\xf3\\xf7\\x07\\xfb\\xf3\\x05\\xf7\\x2d\\x06\\xfb\\xb6\\xf9\\x6d\\x05\\xfb\\x21\\x06\\xe8\\xfb\\x82\\x05\\x0e\\xfb\\x8c\\x44\\x1d\\xc0\\xf9\\x6d\\x22\"\n\"\\x1d\\x44\\x1d\\xfb\\x15\\x4f\\x22\\x1d\\xfb\\x3d\\xf7\\x6f\\xf9\\x6d\\x64\\x1d\\xec\\xf8\\x3d\\x3e\\x0a\\x28\\xb3\\x1d\\xf9\\x1d\\x04\\xfc\\x7d\\xfb\\x4a\\x05\"\n\"\\xfb\\x0c\\x97\\x1d\\x2f\\xf8\\x0b\\xf7\\xd0\\x15\\xc2\\xfb\\x1f\\x07\\x87\\x95\\x82\\x9f\\x7a\\xae\\xb0\\x1d\\xa9\\xa6\\x82\\x79\\x9f\\x1e\\xa0\\x79\\x93\\x79\"\n\"\\x91\\x5d\\x8c\\x80\\x18\\xf7\\x17\\x06\\x87\\xc6\\x83\\xac\\x7c\\xa8\\x08\\xd2\\x66\\x3e\\xb2\\x23\\x1b\\x48\\x54\\x7b\\x6a\\x61\\x1f\\x5d\\x66\\x6f\\x53\\x52\"\n\"\\x1a\\x60\\x93\\x74\\xb4\\x43\\x1e\\x8f\\x84\\x05\\x4f\\x54\\xe4\\x06\\x8f\\x7f\\x90\\x7e\\x8d\\x84\\x08\\x27\\x54\\xf7\\x01\\x06\\x8a\\x51\\x72\\x69\\x38\\x52\"\n\"\\xc2\\x26\\x18\\xa2\\xb7\\xa6\\x92\\xb1\\x1b\\xa6\\xa1\\x87\\x7f\\xbc\\x1f\\x7f\\xbc\\xa2\\x87\\xa6\\x1b\\xbc\\xb3\\x97\\xac\\xc3\\x1f\\x62\\xf7\\x01\\x05\\x77\"\n\"\\x63\\x6b\\x82\\x6a\\x1b\\x79\\x78\\x8e\\x92\\x70\\x1f\\x95\\x64\\x84\\x8c\\x7a\\x1b\\x6e\\x76\\x84\\x6d\\x4d\\x1f\\xd0\\xc0\\xae\\xb8\\x94\\xb8\\x08\\xf7\\x02\"\n\"\\xc2\\xfb\\x02\\x06\\x88\\x96\\x88\\x92\\x85\\x99\\x08\\x0e\\xf7\\x5f\\x16\\xf8\\xda\\x07\\xa7\\x97\\x99\\xa5\\x97\\xc1\\x1d\\x6c\\x6f\\x8c\\x75\\x1b\\x30\\x5e\"\n\"\\x5f\\x30\\x1f\\x4a\\x3e\\x2e\\xd8\\xfc\\x48\\x07\\x0e\\xf1\\xf8\\x14\\xf8\\x82\\x15\\x9f\\x64\\x73\\x92\\x69\\x1b\\x28\\x36\\x36\\x27\\x2b\\xe0\\x39\\xef\\xed\"\n\"\\xdf\\xe1\\xf0\\xb9\\x79\\xb5\\x68\\xae\\x1f\\xf7\\x2a\\xf7\\x2a\\x90\\x72\\x9f\\x5a\\x9a\\x6d\\x19\\x77\\x96\\x90\\x85\\x95\\x1b\\x92\\x90\\x91\\x92\\x90\\x8a\"\n\"\\x8f\\x89\\x96\\x1f\\x84\\xab\\x89\\xa1\\xa8\\x1a\\xb1\\x8e\\xa9\\x92\\xa4\\x1e\\x90\\x9c\\x8b\\x8c\\x8f\\x1a\\x91\\x87\\x8f\\x85\\x87\\x82\\x89\\x88\\x82\\x1e\"\n\"\\x83\\x71\\x79\\x89\\x5c\\x1b\\x6f\\x73\\x8e\\x91\\x6e\\x1f\\x8d\\x80\\x88\\x8c\\x86\\x1b\\x83\\x85\\x86\\x83\\x7e\\xa6\\x79\\xb2\\x7c\\x1f\\xb4\\x7c\\x91\\x89\"\n\"\\x98\\x88\\x08\\xfb\\x8c\\xfb\\x41\\x15\\xd3\\xc7\\x4e\\x42\\x41\\x4f\\x4f\\x41\\x41\\x4f\\xc7\\xd6\\xd5\\xc7\\xc6\\xd7\\x1f\\x0e\\xfc\\x2c\\xf7\\x4e\\x99\\x0a\"\n\"\\x0e\\xfb\\x28\\xf7\\x7f\\xf7\\x53\\x15\\x92\\x7b\\x75\\x90\\x78\\x1b\\x48\\x4f\\x52\\x4a\\x64\\xa7\\x73\\xb8\\xe8\\xcd\\xd3\\xf0\\x1f\\xf7\\xd4\\x07\\xc8\\x82\"\n\"\\xbd\\x39\\x30\\x1a\\x54\\x82\\x60\\x72\\x50\\x1e\\xa8\\x06\\xb2\\xbb\\xa0\\xc6\\xcb\\x1a\\xdd\\x6c\\xd9\\x4b\\xd7\\x1e\\x53\\xce\\x8a\\x8c\\x85\\x92\\x83\\x96\"\n\"\\x19\\xcb\\x5b\\x07\\x0e\\xf1\\xf7\\x95\\xf9\\x19\\x15\\xfc\\x59\\x8a\\x1d\\xf7\\xf0\\x07\\xf7\\xb5\\x5f\\x05\\xfc\\x03\\x8a\\x1d\\xf8\\x52\\x07\\x0e\\x66\\x37\"\n\"\\x1d\\xf7\\x80\\xf7\\x6d\\x20\\x1d\\xc7\\xf7\\x26\\xf8\\xb0\\x15\\xa1\\x0a\\xd0\\xc7\\xa9\\x6a\\x4b\\x1e\\xfb\\xe1\\xf7\\x20\\xf7\\xfe\\x07\\xf7\\x0c\\x4a\\xce\"\n\"\\xfb\\x08\\x42\\x5a\\x71\\x4e\\x63\\x1e\\xd9\\x07\\xfb\\xa3\\xf7\\x51\\x22\\x1d\\x66\\x37\\x1d\\xf7\\x29\\xce\\x15\\xf6\\x3a\\x0a\\x66\\x37\\x1d\\xb4\\xfc\\xec\"\n\"\\x22\\x1d\\xf7\\xf4\\xf8\\xa4\\xf7\\x6c\\x15\\xf7\\x83\\xc8\\xfb\\x60\\x06\\xe3\\xf7\\x2f\\x05\\xf7\\x08\\xc9\\x3a\\x06\\xac\\xc6\\x61\\xa3\\x5c\\x38\\x05\\xfb\"\n\"\\x23\\x06\\x38\\x68\\x84\\x72\\x65\\x1f\\x4b\\x60\\x69\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x37\\xdc\\x69\\x1e\\x6a\\x52\\xb6\\x74\\xb1\\xce\\x05\\x88\\xa5\\x97\\x8a\"\n\"\\xb5\\x1b\\xf7\\xac\\xc9\\xfb\\xb7\\x06\\x77\\x85\\x8b\\x8c\\x82\\x1f\\xaa\\xf7\\x2d\\x15\\x3a\\xfb\\x21\\x57\\x9d\\x6c\\xbe\\x88\\xd3\\x19\\xf7\\xb6\\xf7\\x6c\"\n\"\\x15\\x33\\xfb\\x2f\\x05\\xfb\\x5e\\x06\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\x0e\\x28\\xf7\\x0f\\xbf\\x15\\x64\\x4a\\xec\\x53\\xcf\\xf7\\x0d\\x05\\xf7\\xb1\"\n\"\\xf7\\x0b\\xfb\\x6e\\x06\\xcf\\xf7\\x0d\\x05\\xf7\\x2a\\xf7\\x0b\\x37\\x06\\xae\\xc8\\x29\\xc3\\x4a\\xfb\\x09\\x05\\xfb\\xa4\\xfb\\x0b\\xf7\\x61\\x06\\x47\\xfb\"\n\"\\x0d\\x05\\xfb\\x1d\\xfb\\x0b\\x06\\x0e\\x2f\\xf7\\xf5\\x75\\x0a\\x66\\x28\\x1d\\xf7\\x15\\xf7\\xcc\\x44\\x0a\\x66\\x28\\x1d\\xd0\\xf7\\xd5\\x32\\x0a\\x66\\x28\"\n\"\\x1d\\xf7\\x2a\\xf7\\xaf\\x15\\xfb\\xbf\\x3c\\xf7\\xbf\\x06\\x0e\\xf7\\x59\\x59\\x0a\\x0e\\xf7\\x59\\x59\\x0a\\xfb\\x58\\xf7\\x8d\\x23\\x1d\\x66\\xf7\\xc5\\x41\"\n\"\\x0a\\x0e\\x66\\xf7\\xc5\\x41\\x0a\\xbe\\xf7\\xf5\\x23\\x1d\\xf7\\xdf\\xbd\\x16\\xfa\\x04\\xcd\\xfd\\xc2\\xf9\\xb8\\x49\\x06\\x0e\\x66\\x5c\\x0a\\xa5\\xf8\\x03\"\n\"\\x20\\x1d\\xfb\\x2e\\xf5\\xf9\\x32\\x15\\xac\\xd5\\x8b\\x8b\\xb1\\x1b\\xba\\xb2\\x79\\x69\\xa3\\x1f\\xad\\x5c\\xa0\\x40\\x41\\x1a\\x6f\\x89\\x73\\x82\\x4f\\x1e\"\n\"\\xc0\\x46\\x70\\x97\\x55\\x1b\\x5a\\x64\\x7b\\x69\\x69\\x1f\\x5d\\x5c\\x6f\\x48\\x4a\\x1a\\xfb\\x01\\xde\\x36\\xf6\\xd7\\xc8\\xb4\\xd8\\xb6\\x1e\\xb1\\xcf\\xa7\"\n\"\\xf7\\x16\\xf3\\x1a\\xf7\\x5c\\xfb\\x03\\xf7\\x25\\xfb\\x2d\\x5e\\x5c\\x81\\x79\\x63\\x1e\\xf7\\xbf\\xfc\\x36\\x15\\x7d\\x32\\x84\\x6a\\x7d\\x60\\x08\\x3d\\x70\"\n\"\\x5d\\x5f\\x55\\x1b\\x53\\x6a\\xbe\\xe2\\xf7\\x08\\xcd\\xeb\\xdb\\xb6\\xaf\\x75\\x62\\xa5\\x1f\\x0e\\xf8\\x52\\xf9\\x2e\\xf7\\xb2\\x15\\x5f\\xd9\\x37\\x3d\\x64\"\n\"\\x55\\xb2\\xfb\\x44\\x06\\x5d\\xa4\\x75\\xc3\\x9d\\x98\\x8d\\x8f\\x9b\\x1e\\xc0\\x07\\x89\\x82\\x86\\x8b\\x84\\x1b\\x78\\x87\\x91\\xa4\\x1f\\xf7\\x30\\xb7\\x07\"\n\"\\xd1\\xfb\\x27\\x15\\x4b\\x8d\\xbe\\x6a\\xea\\x1b\\xe0\\xbf\\xb1\\xc8\\xb0\\x76\\xa4\\x61\\x96\\x1f\\x26\\xa7\\x05\\x76\\x91\\x86\\x8f\\x98\\x1a\\x9c\\x9c\\x95\"\n\"\\xa6\\xb1\\x9b\\x80\\x6e\\x8d\\x1e\\xdc\\x06\\xc8\\x8a\\x57\\xb1\\x37\\x1b\\x3d\\x59\\x66\\x4f\\x64\\x9b\\x7a\\xc0\\x7b\\x1f\\xeb\\x6e\\x05\\x9e\\x86\\x91\\x85\"\n\"\\x7f\\x1a\\x78\\x77\\x81\\x65\\x62\\x7c\\x95\\xa7\\x86\\x1e\\xfc\\xd5\\xf7\\x43\\x15\\xb0\\x06\\xf7\\x1a\\xe1\\xea\\xf7\\x28\\xf7\\x26\\x38\\xdb\\xfb\\x2c\\x1f\"\n\"\\xfb\\x40\\x32\\x1d\\xf8\\x15\\x04\\xf7\\x6f\\x9f\\x07\\xc6\\xa7\\x68\\x40\\x41\\x6f\\x68\\x50\\x1f\\x0e\\xce\\xf7\\xb8\\xe2\\x15\\x63\\x90\\x73\\x96\\x75\\xa5\"\n\"\\x08\\x6d\\xaf\\x7c\\xbc\\xc7\\x1a\\xd7\\xa3\\xc7\\xb7\\xad\\x1e\\xe2\\x07\\xfb\\x13\\x6b\\x44\\x2b\\xfb\\x1f\\x1a\\xfb\\x00\\xb2\\x3a\\xd7\\x5c\\x1e\\xb5\\x71\"\n\"\\xaf\\x81\\xcf\\x86\\x08\\xfb\\x61\\xf7\\x17\\xf7\\x61\\x07\\xcf\\x90\\xaf\\x95\\xb6\\xa5\\x08\\xd6\\xba\\xb2\\xdc\\xf6\\x1a\\xf7\\x4d\\xfb\\x08\\xf0\\xfb\\x68\"\n\"\\x72\\x7d\\x8a\\x88\\x72\\x1e\\xf7\\x17\\x26\\x15\\xb4\\x87\\xa2\\x80\\xa1\\x71\\x08\\xa9\\x69\\x9a\\x5b\\x52\\x1a\\x52\\x7c\\x5d\\x6d\\x69\\x1e\\x75\\x72\\x74\"\n\"\\x80\\x62\\x87\\x08\\x0e\\xf7\\x0a\\xf9\\x4c\\x24\\x1d\\xfd\\x06\\xfb\\x04\\xd4\\xfc\\x40\\xf7\\x20\\xf8\\x40\\xf7\\x5c\\xfc\\x40\\xf7\\x20\\xf8\\x40\\xd4\\x06\"\n\"\\x0e\\xf7\\xf0\\xf7\\x68\\xfb\\x30\\x15\\x3e\\x36\\xf7\\x8f\\x06\\x8a\\xe0\\x05\\x40\\xf9\\xab\\xf7\\xfe\\xfd\\xab\\x45\\x06\\x8c\\x36\\x05\\xf7\\x84\\xe0\\x42\"\n\"\\xf9\\xab\\xf0\\xe0\\xfd\\x8f\\x36\\xf3\\x06\\x0e\\xf7\\xf4\\xf9\\x93\\xc9\\x15\\xfb\\xb7\\x06\\xfb\\x0d\\x57\\xc2\\xf7\\x16\\xf7\\x15\\xbf\\xc3\\xf7\\x0d\\x1f\"\n\"\\x8c\\x0a\\x43\\x2b\\x1a\\xfb\\x07\\xb8\\x37\\x9a\\x0a\\x06\\x0e\\xf7\\xf4\\xf7\\x7d\\xc9\\x15\\x4d\\xf7\\xac\\x07\\xde\\xae\\x92\\xa4\\xb1\\x1f\\xcc\\xb6\\xac\"\n\"\\xd4\\xee\\x1a\\xf7\\x03\\x5d\\xe0\\x3d\\xac\\x1e\\x99\\x69\\x70\\x8f\\x46\\x1b\\xfb\\xac\\x4d\\xf7\\xb7\\x06\\xf7\\x0d\\xbf\\x54\\xfb\\x16\\xfb\\x16\\x57\\x54\"\n\"\\xfb\\x0d\\x1f\\x0e\\xf4\\xf7\\xca\\xfb\\x6e\\x15\\xf7\\x19\\xf7\\x60\\x06\\xe3\\x8c\\xc8\\xa2\\xbd\\xbe\\x08\\xb7\\xbd\\x97\\xb3\\xec\\x1a\\xf7\\xb8\\xfb\\x20\"\n\"\\xfb\\xb1\\x07\\x8d\\xfb\\x03\\x68\\x59\\x39\\x8a\\x08\\xf8\\x53\\xfb\\x19\\xfc\\x53\\x07\\x38\\x8e\\x6a\\xb9\\x8d\\xf7\\x05\\x08\\xf7\\xb1\\xfb\\x20\\xfb\\xb8\"\n\"\\x07\\x2e\\x94\\x69\\xb0\\x5a\\x1e\\xbc\\x51\\xcd\\x70\\xe8\\x8a\\x08\\x0e\\xf7\\x6c\\xf9\\x6d\\x15\\xfb\\x1b\\xfb\\x01\\x06\\x87\\x34\\xbe\\x53\\xe3\\x83\\x08\"\n\"\\xb9\\x07\\x53\\x95\\x71\\xa8\\x8d\\xbd\\x08\\xdb\\x06\\x0e\\xfb\\x97\\x3d\\x1d\\xf7\\x25\\xf7\\x6d\\x20\\x1d\\x28\\xf8\\x73\\xfa\\x25\\x15\\xfb\\x14\\xfd\\xa8\"\n\"\\xfb\\x55\\xf8\\x20\\xfb\\x28\\x42\\x9d\\x6a\\xe9\\xb9\\xf7\\x85\\xfc\\x85\\xf7\\x2c\\xfa\\x44\\x05\\x0e\\xfb\\x97\\x3d\\x1d\\xc8\\xce\\x15\\xf7\\x00\\xf7\\x2a\"\n\"\\x05\\x3f\\x06\\x39\\x2a\\x39\\x47\\x1d\\xfb\\x97\\x3d\\x1d\\xfb\\x15\\xfc\\xec\\x22\\x1d\\x4b\\xf8\\xab\\xf7\\xd1\\x15\\xd8\\xfc\\x79\\xfb\\xc8\\xd8\\xf7\\x7b\"\n\"\\x07\\x0e\\x6e\\xcc\\xfb\\x6e\\x15\\xf7\\x20\\xf7\\xaf\\x06\\x4d\\xae\\xb6\\x71\\xd0\\x1b\\xf7\\x1c\\xe8\\xf7\\x07\\xf7\\x3a\\xf7\\x4b\\x2b\\xf7\\x00\\xfb\\x36\"\n\"\\x39\\x44\\x6d\\x56\\x5f\\x1f\\x5e\\x56\\x7b\\x4f\\xfb\\x00\\x1a\\xf7\\x99\\xf7\\x53\\x15\\xd3\\xb6\\x49\\xfb\\x04\\x22\\x5f\\x4c\\x42\\x40\\x5f\\xcb\\xf7\\x01\"\n\"\\xf7\\x02\\xb7\\xca\\xd8\\x1f\\x0e\\x2f\\x34\\x1d\\xbc\\xf8\\x1b\\x15\\xfb\\x13\\x06\\x46\\xfb\\x2a\\x05\\xd0\\x06\\x0e\\x2f\\xf7\\xaf\\x74\\x15\\x9d\\x06\\xf7\"\n\"\\x15\\xe5\\xd6\\xf7\\x00\\xd1\\x68\\xb8\\x44\\xa0\\x1f\\x85\\x0a\\x8c\\x1e\\xf7\\x1b\\x06\\xf7\\x06\\x89\\x33\\xd0\\xfb\\x25\\x1b\\xfb\\x1d\\x63\\x0a\\x6a\\x64\"\n\"\\x77\\x4a\\x66\\x6f\\x91\\x98\\x79\\x1e\\x7c\\x96\\x85\\x96\\x85\\xa8\\x08\\xfb\\x1d\\x06\\x90\\xfb\\x01\\xc9\\x56\\xf7\\x23\\x7a\\x60\\x37\\x18\\x94\\x9d\\x96\"\n\"\\x6a\\x0a\\x2f\\x34\\x1d\\xfb\\x20\\xf8\\x1b\\x63\\x1d\\xd8\\x06\\xdd\\xef\\xdc\\x8a\\x0a\\x2f\\x34\\x1d\\xfb\\x23\\xfc\\x3e\\x22\\x1d\\xfb\\x3d\\xf7\\x85\\x99\"\n\"\\x0a\\xf7\\x60\\xf7\\x94\\xa4\\x0a\\x0e\\xaf\\xf9\\x10\\x24\\x1d\\xfb\\x6a\\x06\\x92\\x5b\\x76\\x8d\\x70\\x1b\\x45\\x43\\x6c\\x5a\\x5e\\x1f\\x5d\\x59\\x73\\x45\"\n\"\\x35\\x1a\\xfb\\x46\\xf0\\xfb\\x00\\xf7\\x39\\xdc\\xd0\\xa7\\xbe\\xb9\\x1e\\xb6\\xbc\\xa6\\xd2\\xd0\\x1a\\xd5\\x71\\xc3\\x50\\xc0\\x1e\\xf7\\x0c\\x06\\xfb\\xc0\"\n\"\\x93\\x50\\x1d\\xf8\\x09\\xf8\\x93\\xf9\\x6e\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\"\n\"\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\\xf7\\x37\\xfb\\x5e\\x1f\\x5a\\x04\\xf7\\x43\\xf7\\x21\\xfb\\x21\\xfb\\x43\\xfb\\x44\\xfb\\x21\\xfb\\x20\\xfb\\x45\\xfb\\x43\\xfb\"\n\"\\x1f\\xf7\\x22\\xf7\\x47\\xf7\\x3e\\xf7\\x23\\xf7\\x21\\xf7\\x41\\x1f\\xfb\\x01\\xfb\\x37\\x15\\x70\\x74\\x74\\x71\\x6f\\xa2\\x74\\xa6\\xa6\\xa2\\xa2\\xa6\\xa6\"\n\"\\x74\\xa2\\x70\\x1f\\xfb\\x14\\xfb\\x00\\x15\\x92\\x36\\x96\\x62\\xa9\\x5e\\x08\\x4c\\xb5\\xcb\\x6b\\xde\\x1b\\xd8\\xc7\\xa6\\xc1\\xb5\\x1f\\xaf\\xba\\x9a\\xb8\"\n\"\\x92\\xe8\\x80\\x59\\x80\\x75\\x71\\x6d\\x08\\x54\\x5b\\x4f\\x71\\x3a\\x1b\\x3a\\x4f\\xa5\\xc2\\x5b\\x1f\\x71\\xa9\\x80\\xa1\\x80\\xbd\\x08\\xf7\\xee\\xf7\\x00\"\n\"\\x15\\x70\\x74\\x74\\x71\\x6f\\xa2\\x74\\xa6\\xa6\\xa2\\xa2\\xa6\\xa6\\x74\\xa2\\x70\\x1f\\x0e\\xfb\\x09\\xc7\\x16\\xf8\\x77\\xa2\\x06\\xfb\\x35\\x93\\x3f\\xe0\"\n\"\\x8e\\xf7\\x3e\\x08\\x38\\xb7\\xb9\\x6a\\xd4\\x1b\\xd1\\xc5\\xc9\\xd5\\xcf\\x71\\xb4\\x20\\xec\\x1f\\xfb\\x01\\xf0\\x78\\xa6\\x64\\xf7\\x09\\x7b\\x2f\\x50\\x35\"\n\"\\x21\\x35\\x08\\x3b\\x48\\x68\\x53\\x4b\\x1a\\x40\\xc8\\x4d\\xd4\\xb5\\xb4\\x9c\\xa9\\xab\\x1e\\x9e\\x9d\\x96\\x9a\\x9c\\xb0\\x91\\xfb\\x3b\\x34\\x2c\\xfb\\x33\"\n\"\\x8a\\x08\\x0e\\xf7\\xf0\\xf9\\x6a\\xf9\\x7e\\x15\\xfc\\x7f\\x38\\x06\\xf7\\x55\\xfb\\xe8\\xfb\\x55\\xfc\\x06\\x05\\x36\\xf8\\x87\\xf7\\x7d\\x2d\\x07\\x89\\xfb\"\n\"\\x1e\\x05\\xfb\\xb2\\x06\\xf7\\x4f\\xf7\\xfe\\xfb\\x4e\\xf7\\xda\\x05\\xf7\\xaa\\x06\\x8f\\xfb\\x1e\\x05\\xe6\\x06\\x0e\\xf7\\xa1\\xf7\\x94\\xf8\\xa3\\x15\\x6b\"\n\"\\x62\\x7a\\x63\\x85\\x58\\x08\\xfb\\x10\\x4f\\xf7\\x10\\x06\\x90\\x5b\\x9f\\x5a\\xa8\\x67\\x34\\x34\\x18\\xb5\\x62\\xe2\\xe2\\xb5\\x6b\\xb7\\x79\\xb9\\x86\\x19\"\n\"\\xfb\\x0f\\xc6\\xf7\\x0f\\x07\\xba\\x90\\xba\\x9e\\xb3\\xaa\\xe2\\x34\\x18\\xb4\\xb4\\x34\\xe2\\xa9\\xb1\\x9e\\xb8\\x91\\xbd\\x19\\xf7\\x0f\\xc7\\xfb\\x0f\\x06\"\n\"\\x85\\xbd\\x78\\xb8\\x6d\\xb1\\xe2\\xe1\\x18\\x62\\xb4\\x34\\x34\\x66\\xa9\\x5c\\x9e\\x59\\x91\\x19\\xf7\\x0f\\x50\\xfb\\x0e\\x07\\x5b\\x85\\x5e\\x78\\x64\\x6c\"\n\"\\x34\\xe2\\x18\\x61\\x62\\x05\\xf7\\xb9\\x50\\x15\\xf0\\xdf\\x36\\x26\\x24\\x37\\x37\\x24\\x23\\x39\\xde\\xf4\\xf2\\xde\\xdd\\xf4\\x1f\\x0e\\xfb\\x5e\\xf7\\x2e\"\n\"\\x16\\xf7\\x20\\xf8\\x40\\xf7\\x22\\xf7\\x04\\xfc\\x3d\\xfb\\x04\\xf7\\x23\\x06\\x0e\\xfb\\xcf\\xf7\\x73\\xf7\\xe5\\x15\\xee\\xae\\x1d\\x28\\x50\\x48\\xc6\\xfb\"\n\"\\x3a\\x07\\x36\\xb8\\x61\\xe7\\xab\\xa1\\x8e\\x93\\xa6\\x1e\\xed\\x07\\x89\\x7d\\x83\\x8a\\x80\\x1b\\x67\\x82\\x96\\xbb\\x1f\\xf7\\x14\\xd2\\xce\\x07\\x0e\\xfb\"\n\"\\x97\\x4c\\x1d\\x72\\xf8\\x1d\\x15\\xfb\\x04\\xce\\x07\\x8c\\x59\\x75\\x6d\\x5d\\x82\\x08\\x5d\\x07\\xd1\\x8d\\xc2\\xcb\\x35\\x0a\\xf2\\x07\\x0e\\xfb\\xcf\\xf7\"\n\"\\x3f\\x79\\x15\\x87\\x9c\\x9b\\x8a\\x9b\\x1b\\xaa\\xa3\\x8e\\x93\\xa5\\x1f\\xed\\x07\\x89\\x7d\\x84\\x8a\\x7f\\x1b\\x66\\x83\\x96\\xba\\x1f\\xf7\\xbb\\xae\\x1d\"\n\"\\xfb\\xe0\\x07\\x54\\x9a\\x6d\\xb0\\x74\\x1e\\x56\\x25\\x05\\x95\\x9f\\x95\\x8d\\x4c\\x0a\\x76\\x91\\xa3\\x54\\x34\\x0a\\xcd\\xa6\\x85\\xb8\\x1b\\xde\\xb9\\x52\"\n\"\\x0a\\x7c\\x50\\x0a\\x20\\xf7\\xa4\\xf9\\x76\\x15\\x3c\\x4c\\x6d\\x51\\x5e\\x1f\\x5d\\x4e\\x75\\x30\\xfb\\x17\\x1a\\x22\\x9c\\x26\\xa5\\x54\\x1e\\x35\\xb5\\xd0\"\n\"\\x60\\xed\\x1b\\xf7\\x3b\\xe3\\xf7\\x14\\xf7\\x89\\xf7\\x08\\x79\\xe9\\x69\\xc7\\x1f\\xda\\x5e\\x48\\xb2\\x33\\x1b\\xfb\\x07\\xfb\\xd4\\x15\\x8d\\xd0\\x8f\\xac\"\n\"\\x93\\xa5\\x08\\xbf\\x9d\\xac\\xa6\\xba\\x1b\\xc2\\xae\\x6b\\x4b\\x99\\x1f\\x92\\x6a\\x8e\\x75\\x8c\\x53\\x08\\x2e\\x04\\x3a\\x87\\x61\\x7e\\x67\\x1e\\x58\\x78\"\n\"\\x6d\\x72\\x5d\\x1b\\x52\\x65\\xb2\\xd3\\x7f\\x1f\\x84\\xb0\\x8a\\xa1\\xcc\\x1a\\x0e\\xfb\\xcf\\xf7\\x6e\\xf9\\xa9\\x23\\x1d\\x66\\x26\\x0a\\x68\\xf9\\x80\\x15\"\n\"\\x5d\\x82\\x75\\x77\\x5e\\x1b\\x5e\\x72\\xa0\\xb8\\x84\\x1f\\x54\\x06\\x8a\\x87\\x8b\\x86\\x8a\\x1a\\x3f\\xc3\\x52\\xd7\\xdb\\xbf\\xc3\\xe2\\x1e\\x0e\\x66\\x26\"\n\"\\x0a\\x6d\\xf9\\x89\\x32\\x0a\\x66\\x26\\x0a\\xbb\\xf9\\x63\\x28\\x0a\\x2b\\xf8\\xd4\\xfb\\x6b\\x15\\xfc\\xec\\x46\\xf8\\xec\\x06\\xf7\\x63\\x04\\xfc\\xec\\x46\"\n\"\\xf8\\xec\\x06\\x0e\\x0e\\xfb\\xcf\\x8e\\x0a\\x66\\x42\\x1d\\xfb\\x19\\x4f\\x22\\x1d\\xfb\\xcf\\x4c\\x1d\\xfb\\x42\\xfc\\x84\\x15\\xfb\\x04\\xce\\x07\\x8c\\x59\"\n\"\\x75\\x6d\\x5d\\x82\\x08\\x5d\\x07\\xd1\\x8d\\xc2\\xcb\\x35\\x0a\\xf2\\x07\\x0e\\xfb\\xcf\\xf7\\xcf\\xf9\\x63\\x28\\x0a\\x4b\\x0a\\xd2\\x8e\\x16\\xf9\\x5d\\x06\"\n\"\\xfb\\x98\\xf9\\x6d\\x05\\xfb\\x55\\x06\\x4c\\xfc\\xf0\\x15\\xf7\\x33\\xf8\\x60\\xf7\\x34\\xfc\\x60\\x05\\x0e\\xf7\\x2e\\xf7\\xf1\\x7b\\x0a\\xf7\\x0d\\x98\\x1d\"\n\"\\xf7\\xcc\\xf7\\x11\\xfb\\x37\\x07\\xb6\\xa6\\x9f\\xa0\\x0a\\xf7\\x5c\\xfb\\x27\\xf7\\x24\\xfb\\x5f\\xfb\\x5e\\xa5\\x1d\\x9f\\x7a\\xb6\\x70\\x08\\xfb\\x37\\xfb\"\n\"\\x11\\xf7\\xcc\\x06\\x0e\\x67\\xcc\\xf8\\xb0\\x15\\xfd\\x8a\\xf7\\x19\\xf7\\x9b\\x07\\x5f\\xa1\\xa7\\x78\\xb5\\x1b\\xbf\\xaa\\xa1\\xcb\\xae\\x1f\\x47\\xf7\\x20\"\n\"\\xf8\\xb0\\x55\\x0a\\x49\\x64\\x63\\x4c\\x49\\x68\\xb0\\xd1\\x1e\\xf7\\xe5\\x07\\x0e\\xfb\\x14\\xf8\\x94\\xf7\\xe0\\x15\\x87\\xca\\x80\\xac\\x6d\\xb0\\x08\\xc2\"\n\"\\x5f\\x48\\xa8\\x39\\x1b\\x47\\x4e\\x77\\x66\\x5f\\x1f\\x52\\x5a\\x67\\x36\\x36\\x1a\\xfb\\x1d\\xd7\\x2e\\xf7\\x25\\x64\\x1e\\xe3\\x73\\x05\\xb9\\x7e\\x9a\\x7e\"\n\"\\x6f\\x1a\\x73\\x7c\\x5c\\x6b\\x42\\x1e\\xf7\\x09\\x06\\xb2\\xf3\\x92\\xa8\\xb5\\x1a\\xac\\x80\\xa5\\x75\\xa1\\x1e\\x78\\x9d\\x78\\x94\\x4a\\xa2\\x53\\x9e\\x18\"\n\"\\x5f\\x9a\\x61\\xa1\\x77\\x9d\\x08\\x6d\\xa6\\x79\\xbb\\xbf\\x1a\\xe3\\xbd\\xc6\\xd4\\xca\\xb1\\x66\\x48\\x91\\x1e\\x0e\\x9e\\x22\\x0a\\x6d\\xf9\\xbf\\x21\\x1d\"\n\"\\xd2\\x3e\\x1d\\xf7\\x2e\\xf7\\x63\\x21\\x1d\\x2f\\x5b\\x0a\\x6a\\x3f\\x1d\\xe6\\xf7\\x6d\\x21\\x1d\\xfb\\x3d\\xf7\\x75\\xf8\\x4b\\x15\\xf7\\x39\\xf7\\x8d\\xf7\"\n\"\\x11\\xfc\\x23\\xfb\\xb6\\x59\\xfb\\x11\\xbd\\xfb\\xce\\xf7\\x2a\\xf7\\xce\\xf7\\x51\\xf7\\x11\\x07\\x0e\\xfb\\x8c\\xf7\\x60\\xf7\\xd5\\x15\\xf5\\xf7\\x52\\xf7\"\n\"\\x05\\xfb\\xde\\xfb\\x6f\\x62\\x2c\\xb4\\xfb\\x76\\xf7\\x20\\xf7\\x76\\xf7\\x34\\xea\\x07\\x0e\\xf8\\x70\\xf8\\x62\\x16\\x2e\\x1d\\xf0\\x51\\x0a\\xc5\\xfb\\x33\"\n\"\\xf7\\x2a\\xf7\\xb0\\x27\\x06\\xfb\\x00\\xf7\\x9f\\xf7\\x06\\xf7\\xe5\\x05\\xfb\\x2b\\xc4\\x1d\\x20\\xf7\\xa5\\xfb\\x2a\\xfb\\xa5\\xfb\\x02\\x94\\x1d\\xf7\\x1b\"\n\"\\xf7\\xdf\\x05\\xf2\\x06\\x0e\\xf7\\x8c\\xf8\\x83\\x16\\xf7\\x83\\xcc\\x07\\x4b\\x1d\\xbd\\xfb\\x34\\xf7\\x20\\xf7\\xa5\\x32\\x06\\x46\\xf7\\x50\\xe5\\xf7\\x83\"\n\"\\x05\\xfb\\x22\\xac\\x0a\\x4a\\xf7\\x50\\xfb\\x20\\xfb\\x50\\x45\\x06\\x46\\xf7\\x50\\x05\\xfb\\x21\\x06\\xe4\\xfb\\x83\\xfb\\x04\\xfb\\xc1\\x05\\xf7\\x24\\x06\"\n\"\\xe4\\xf7\\x83\\x05\\xd1\\xfb\\x83\\x06\\x0e\\x75\\xf7\\xd6\\x74\\x15\\xf7\\x23\\x8d\\xf7\\x00\\xf1\\xf7\\x18\\x1a\\xe1\\x61\\xcc\\x42\\xa4\\x1e\\xcc\\xaf\\xaa\"\n\"\\xbd\\xd0\\x1a\\xf7\\x06\\x26\\xde\\xfb\\x1e\\x3f\\x42\\x72\\x63\\x61\\x1e\\x64\\x66\\x7b\\x5e\\x44\\x1a\\x72\\xf7\\x2a\\xa4\\x07\\xc3\\xad\\xad\\xc4\\xc3\\xb1\"\n\"\\x69\\x59\\x56\\x62\\x66\\x51\\x1e\\x5e\\xfb\\x11\\xc3\\x06\\xa2\\xa2\\x84\\x7e\\x9f\\x1f\\xa6\\x79\\x97\\x71\\x64\\x1a\\x49\\x64\\x63\\x4c\\x66\\x6c\\x98\\xa1\"\n\"\\x7a\\x1e\\x7b\\xa0\\x84\\xa7\\xc0\\x1a\\xfb\\x2a\\x6f\\x06\\x89\\xfb\\x13\\xdd\\x32\\xf7\\x1e\\x78\\x5f\\x36\\x18\\x94\\x9e\\x95\\x6a\\x0a\\xfb\\x2b\\xf7\\x95\"\n\"\\x74\\x15\\xf7\\x08\\x8f\\xdd\\xd3\\xeb\\x1a\\xc4\\x72\\xb1\\x4f\\xad\\x1e\\xbd\\xa5\\xa6\\xb7\\xc1\\x1a\\xe3\\x3b\\xc6\\xfb\\x0d\\xfb\\x09\\x37\\x50\\x39\\x1e\"\n\"\\x64\\xf7\\x1a\\x97\\x07\\xac\\xa4\\xa1\\xb2\\xb3\\xa3\\x75\\x67\\x63\\x71\\x78\\x56\\x1e\\x70\\x2c\\xa6\\x06\\xb4\\x96\\x89\\x7f\\x99\\xc2\\x1d\\x6e\\x6f\\x63\"\n\"\\xa9\\x1d\\xfb\\x20\\x06\\x8d\\xfb\\x06\\xcc\\x43\\xf7\\x05\\x7d\\x60\\x36\\x18\\x95\\x9f\\x94\\x8d\\x4c\\x0a\\x74\\x92\\xa2\\x56\\x34\\x0a\\xcd\\xa7\\x85\\x8b\"\n\"\\x0a\\x5b\\x7d\\x49\\x1d\\x0e\\xdb\\xf8\\x7d\\x16\\xfb\\x34\\xf7\\x2a\\xf7\\xb1\\x2b\\x07\\xfb\\x00\\xf7\\x9f\\x94\\x0a\\x3a\\x86\\x0a\\xe0\\x51\\x0a\\x0e\\x60\"\n\"\\xf8\\x2f\\x16\\xfb\\x34\\xf7\\x20\\xf7\\xa5\\x22\\x07\\x45\\xf7\\x50\\xe6\\xf7\\x83\\x05\\xfb\\x23\\xac\\x0a\\x59\\xf7\\x50\\x2d\\x1d\\xf7\\x83\\xbd\\x06\\xe5\"\n\"\\xfb\\x83\\x05\\x0e\\xa9\\xf7\\x8b\\xf8\\x5c\\x15\\x6d\\x86\\x0a\\xa9\\xfb\\x20\\xda\\xf7\\x20\\x9f\\x06\\x7f\\x0a\\x30\\xfb\\xa5\\x05\\x71\\xf7\\x20\\x3c\\x06\"\n\"\\x0e\\x32\\xf7\\x80\\xf7\\xf4\\x15\\x6b\\xf7\\x50\\x2d\\x1d\\xf7\\x83\\xab\\x28\\xa9\\xee\\xa6\\x06\\x46\\x0a\\x70\\xf4\\x6d\\x06\\x0e\\x65\\xc5\\xf8\\xf0\\x15\"\n\"\\xfc\\xf0\\x2e\\x1d\\xe5\\x07\\xf7\\x1a\\xfb\\xdf\\x05\\xf7\\x32\\x06\\xfb\\x32\\xf8\\x1c\\x94\\x0a\\x35\\xf7\\xa5\\xfc\\x20\\xfb\\x11\\x06\\x0e\\xfb\\x28\\xf7\"\n\"\\x42\\xf8\\xaf\\x15\\xfb\\xd1\\x8c\\x05\\xfb\\x05\\xf7\\x45\\xfc\\x3f\\xf7\\x20\\xf7\\x83\\xcc\\x07\\x46\\x0a\\x4a\\x06\\x0e\\xd5\\xa3\\x0a\\xcd\\xfb\\x34\\xf7\"\n\"\\x2a\\xf7\\xb1\\x49\\xf8\\xf0\\x89\\x0a\\x5e\\x9d\\x0a\\xc3\\xfb\\x35\\xf7\\x20\\xf7\\xa6\\x53\\xf8\\x3f\\x92\\x0a\\xd5\\xf8\\x23\\x75\\x15\\xf7\\x3e\\x96\\xf7\"\n\"\\x01\\xf2\\x92\\xf7\\x31\\x08\\x45\\x0a\\xf7\\x23\\x06\\x91\\x1d\\xfb\\x77\\xf7\\x0b\\xfb\\x26\\xf7\\x54\\x83\\x1f\\x60\\x38\\x05\\x94\\x9e\\x96\\x8e\\x4c\\x0a\"\n\"\\x74\\x91\\xa3\\x56\\x34\\x0a\\xcc\\xa7\\x85\\xb8\\x1b\\xde\\xb9\\x52\\x0a\\x7c\\x50\\x0a\\x2f\\xf7\\xcb\\x75\\x15\\xf7\\x07\\x92\\xe1\\xe0\\x95\\xf7\\x09\\x08\"\n\"\\x5e\\x1d\\x53\\x1b\\x44\\x61\\xca\\xf5\\xbf\\x95\\xba\\x9c\\xab\\x1f\\x5b\\x1d\\xf7\\x1a\\x06\\x47\\x0a\\xfb\\x3f\\xdc\\x29\\xf7\\x2c\\x7f\\x1f\\x60\\x37\\x05\"\n\"\\x94\\x9d\\x96\\x8e\\xb4\\x1d\\x70\\x70\\x93\\xa1\\x59\\x34\\x0a\\xca\\xaa\\x85\\x8b\\x0a\\x5c\\x7c\\x7e\\x89\\x86\\x7e\\x1f\\x0e\\x9e\\x2a\\x1d\\x0e\\x22\\xf8\"\n\"\\x20\\x24\\x1d\\xfb\\x03\\xfc\\x1d\\xfb\\x0c\\x4d\\x0a\\xf7\\x59\\xfc\\xb0\\x05\\xfb\\x6e\\xf7\\x20\\xf7\\x6e\\x07\\xf7\\x54\\xf8\\xb0\\x05\\x0e\\x9e\\xf8\\x37\"\n\"\\xf7\\x83\\x15\\xab\\x07\\xf7\\x7b\\xf8\\x5e\\x05\\xfb\\x3c\\x06\\xfb\\x1f\\xfb\\xd5\\xfb\\x29\\xf7\\xd5\\x05\\xfb\\x3b\\x06\\xf7\\x86\\xfc\\x5e\\x05\\x6b\\xfb\"\n\"\\x17\\xfb\\x11\\xf7\\x17\\xfb\\x06\\xf7\\x2a\\xf7\\x06\\xf7\\x17\\xf7\\x11\\x07\\x0e\\x22\\xf7\\xf0\\x16\\xf7\\x54\\xf8\\xb0\\x05\\xfb\\x24\\x06\\xfb\\x03\\xfc\"\n\"\\x1d\\xfb\\x0c\\x4d\\x0a\\xf7\\x59\\xfc\\xb0\\x05\\x20\\x2c\\xf6\\xfb\\x0f\\xf7\\x20\\xf7\\x0f\\xf6\\xea\\x06\\x0e\\xd0\\xf8\\x32\\xf8\\x06\\x15\\xf7\\x7a\\xf7\"\n\"\\xfb\\x05\\xfb\\x44\\x06\\xfb\\x1d\\x81\\x0a\\xf7\\x3d\\x06\\xf7\\x20\\xf7\\x91\\xf7\\x1d\\xfb\\x91\\x05\\xd7\\xfb\\x33\\xf7\\x2a\\xf7\\xb0\\xfb\\x14\\x06\\x0e\"\n\"\\x46\\xf7\\xf3\\xf7\\xa4\\x15\\xf7\\x44\\xf7\\xa0\\x05\\xfb\\x3c\\x06\\x34\\xfb\\x37\\x33\\xf7\\x37\\x05\\xfb\\x3c\\x06\\xf7\\x44\\xfb\\xa0\\xfb\\x48\\xfb\\xa4\"\n\"\\x05\\xf7\\x3c\\x06\\xe7\\xf7\\x3c\\xe6\\xfb\\x3c\\x05\\xd6\\xfb\\x33\\xf7\\x20\\xf7\\xa4\\xfb\\x0e\\x06\\x0e\\xd0\\xf8\\x88\\x16\\xcd\\xfb\\x36\\xf7\\x2a\\xf7\"\n\"\\xb3\\x49\\xf8\\xf0\\x6c\\x0a\\x5c\\xf8\\x1d\\x16\\xc6\\xfb\\x31\\xf7\\x20\\xf7\\xa2\\x53\\xf8\\x3f\\x69\\x0a\\xd0\\xf8\\x15\\xf7\\x74\\x15\\xaa\\x8e\\x9e\\x90\"\n\"\\xcd\\x9c\\x08\\xfb\\x8d\\x48\\x1d\\xfb\\xf4\\x07\\x62\\x7f\\x68\\x84\\x63\\x86\\x08\\xf7\\x27\\x3c\\xfb\\x2c\\x07\\x41\\x90\\x62\\xab\\xc2\\x1a\\xf7\\xb5\\xfb\"\n\"\\x2a\\xfb\\xb5\\x07\\x8a\\xfb\\x1a\\xef\\x38\\xf7\\x3a\\x88\\x08\\xfb\\x1b\\xda\\x07\\x0e\\x5c\\xf7\\xd7\\xf7\\x37\\x15\\xa6\\x90\\x9d\\x8f\\xa4\\x93\\x08\\xfb\"\n\"\\x48\\xf7\\x23\\xf8\\xb0\\xfb\\x20\\xfb\\x8d\\x07\\x70\\x81\\x78\\x86\\x70\\x86\\x08\\xf7\\x0d\\x4f\\xfb\\x11\\x07\\x5c\\x8e\\x71\\x9e\\xa9\\x1a\\xf7\\x71\\xfb\"\n\"\\x20\\xfb\\x71\\x07\\x57\\x96\\x65\\xa1\\x72\\x1e\\x6c\\xa8\\xc0\\x78\\xca\\x1b\\x96\\x93\\x8b\\x8c\\x9b\\x1f\\xfb\\x08\\xc7\\x07\\x0e\\xd0\\xf7\\x6d\\xf9\\x6d\"\n\"\\x15\\x33\\x0a\\xf7\\xf4\\x06\\x9e\\xd0\\xc9\\x95\\xbb\\x1b\\xde\\xbb\\x6a\\x50\\x1f\\xfb\\xb5\\xf7\\x2a\\xf7\\xb5\\x07\\xf7\\x1f\\x24\\xdc\\xfb\\x43\\x4f\\x6f\"\n\"\\x87\\x72\\x2d\\x1e\\x0e\\x6a\\xdd\\x16\\xf7\\x20\\xf7\\xbb\\x06\\xc8\\xa7\\xab\\xa5\\xbc\\x1b\\xbf\\xad\\x68\\xa5\\x0a\\xee\\x44\\xd1\\x28\\x52\\x64\\x7b\\x56\"\n\"\\x46\\x1e\\xf7\\xc9\\xfb\\x20\\x07\\x0e\\xf7\\x6a\\x31\\x1d\\x0e\\xc2\\xf8\\x81\\xf7\\x11\\x15\\x21\\xfb\\xb0\\xf7\\x2a\\xf7\\x33\\xf5\\xf9\\x6d\\x96\\x0a\\x4e\"\n\"\\x81\\x5a\\x9f\\x1d\\xf7\\x44\\xc6\\xa7\\x8f\\xa4\\xe9\\x1e\\x0e\\x48\\xf8\\x13\\xf7\\x05\\x15\\x47\\xfb\\xa5\\xf7\\x20\\xf7\\x34\\xd2\\xf8\\xb0\\xfb\\x20\\xfb\"\n\"\\x8d\\x06\\x7a\\x5e\\x65\\x84\\x64\\x8d\\x1d\\xbf\\xc4\\x94\\x9c\\xc4\\x1f\\x0e\\xf7\\x16\\xb5\\xf8\\x3b\\x15\\x88\\x71\\x8a\\x7a\\x75\\x1a\\xfb\\x00\\xb1\\x24\"\n\"\\xcb\\x5a\\x1d\\xcb\\xd0\\xb1\\xf2\\xf7\\x01\\x1a\\xf7\\x0f\\x5c\\xf7\\x07\\x3d\\xcf\\x1e\\xbd\\x50\\x41\\xa5\\x34\\x1b\\xfb\\x24\\x21\\x4b\\xfb\\x11\\x4b\\x1f\"\n\"\\xf7\\x16\\x4b\\x05\\xe3\\xb5\\xc1\\xb0\\xe1\\x1b\\xf3\\xcb\\x4c\\xfb\\x13\\xa3\\x1f\\xfb\\x11\\x04\\xfb\\x10\\x76\\x45\\x46\\x22\\x1b\\x23\\x44\\xd0\\xf7\\x10\"\n\"\\x76\\x1f\\x0e\\xd2\\x3e\\x1d\\xf8\\x4b\\xf7\\x2d\\x15\\xfb\\xbf\\x3c\\xf7\\xbf\\x06\\x0e\\x6a\\x3f\\x1d\\xf8\\x0c\\xf7\\x1c\\x28\\x0a\\xf7\\x16\\xf8\\x18\\xf9\"\n\"\\x79\\x15\\x25\\x37\\x69\\x48\\x4d\\x1f\\x4a\\x45\\x66\\x25\\xfb\\x01\\x1a\\xfb\\x01\\xb0\\x24\\xcc\\x5a\\x1d\\xca\\xce\\xb2\\xf5\\xf2\\x1a\\xf7\\x06\\x66\\xf2\"\n\"\\x4a\\xd0\\x1e\\xd0\\x4b\\x3b\\xab\\x21\\x1b\\xf7\\x59\\xfc\\x4f\\x15\\xfb\\x10\\x76\\x45\\x46\\x22\\x1b\\x23\\x44\\xd0\\xf7\\x10\\x76\\x1f\\xf7\\x11\\x04\\xf7\"\n\"\\x0e\\xa1\\xd1\\xcf\\xf3\\x1b\\xf3\\xd1\\x47\\xfb\\x0e\\xa1\\x1f\\x0e\\x66\\xf7\\xc5\\x54\\x1d\\xf7\\x10\\xfb\\xe1\\x15\\x3a\\x7c\\x5f\\x5e\\x4b\\x1b\\x4b\\x5f\"\n\"\\xb8\\xdc\\x7c\\x1f\\xe9\\x04\\xdc\\x9a\\xb7\\xb8\\xcb\\x1b\\xcb\\xb7\\x5e\\x3a\\x9a\\x1f\\x0e\\x71\\xf8\\x66\\xfa\\x16\\x5d\\x1d\\xfc\\x33\\xfd\\xc7\\x15\\xf7\"\n\"\\x23\\x06\\xce\\x8c\\xbd\\xab\\xa9\\xc7\\xf7\\xb0\\xf9\\x10\\x18\\xfb\\x2f\\x06\\xfb\\x2e\\xfc\\x05\\xfb\\x2f\\xf8\\x05\\x05\\xfb\\x2f\\x06\\xf7\\x7d\\xfc\\x9e\"\n\"\\x78\\x63\\x7d\\x67\\x89\\x89\\x73\\x87\\x19\\xfb\\x15\\x06\\x0e\\x2f\\xf8\\x4c\\xf9\\x4f\\x5d\\x1d\\x66\\x3b\\x78\\x1d\\x0e\\xfb\\xcf\\xf8\\x66\\xfa\\x2a\\xbd\"\n\"\\x1d\\xf7\\xa0\\xb0\\x89\\x15\\xf7\\x69\\xaf\\x8f\\xa5\\xc8\\x1f\\xf7\\x05\\xbd\\xdf\\xf7\\x33\\xf7\\x37\\x1a\\xe1\\x70\\xd6\\x5f\\xad\\x1e\\xa4\\x6c\\x5e\\x97\"\n\"\\x50\\x1b\\xfb\\x08\\x38\\x6b\\x4d\\x5e\\x1f\\x71\\x67\\x81\\x64\\x89\\x42\\xcc\\xab\\x18\\x97\\x07\\xc1\\x9c\\xb1\\xad\\xa2\\x1e\\x9c\\x96\\x95\\x8e\\xb9\\x94\"\n\"\\x42\\xfc\\x1f\\x18\\x7c\\x45\\x73\\x61\\x6e\\x81\\x08\\x77\\x06\\xd3\\x8a\\x15\\xc8\\xbc\\x9a\\xac\\xa1\\xf7\\x0f\\xc2\\xf7\\xd2\\x18\\x92\\x06\\x90\\x06\\x9e\"\n\"\\x06\\xa9\\x97\\x88\\x7f\\x9e\\x1f\\xb3\\x72\\xa1\\x51\\x3a\\x1a\\x20\\x73\\x34\\x5c\\x4c\\x1e\\x64\\x59\\x58\\x6e\\x54\\x88\\x08\\xf7\\x7b\\xfb\\x7d\\x15\\xce\"\n\"\\x06\\xad\\xf7\\x52\\x05\\x7d\\xaa\\x97\\x88\\x9e\\x1b\\xf7\\x06\\xee\\xf7\\x29\\xf7\\x42\\xec\\x64\\xbd\\x3e\\x5c\\x63\\x77\\x66\\x6d\\x1f\\x69\\x61\\x79\\x55\"\n\"\\x75\\xfb\\x0b\\x08\\xb9\\xfb\\x00\\x15\\xae\\xf7\\x54\\x05\\xe1\\x9b\\xad\\xbc\\xb7\\x1b\\xb2\\xa0\\x63\\x41\\xfb\\x20\\x56\\xfb\\x02\\x47\\x71\\x77\\x95\\xa1\"\n\"\\x79\\x1f\\x0e\\xf7\\x0c\\xf7\\xe0\\xf7\\x11\\x15\\x5a\\xaa\\x76\\x9c\\x78\\xa2\\x08\\x66\\xb8\\x76\\xd0\\xda\\x1a\\xf7\\x26\\xd9\\xe9\\xf7\\x0c\\xf7\\x0d\\xd9\"\n\"\\x2d\\xfb\\x26\\x42\\x79\\x49\\x6a\\x5e\\x1e\\x77\\x70\\x75\\x79\\x55\\x68\\x08\\xfb\\x11\\xf7\\xcc\\xf7\\x11\\xfb\\x3e\\x07\\xbf\\xad\\x9c\\x99\\x9f\\xa2\\x08\"\n\"\\xb7\\xbe\\xa2\\xd0\\xdd\\x1a\\xf7\\x5a\\xfb\\x27\\xf7\\x25\\xfb\\x5e\\xfb\\x5f\\xfb\\x27\\xfb\\x25\\xfb\\x5b\\x40\\x9f\\x49\\xb1\\x5a\\x1e\\xa2\\x6e\\x9d\\x7c\"\n\"\\xc4\\x65\\x08\\xfb\\x3e\\xfb\\x11\\xf7\\xcc\\x06\\x0e\\xf7\\xc5\\x2f\\x1d\\x0e\\x4b\\x0a\\xf7\\xf4\\xf8\\xa9\\xf8\\x95\\x15\\x49\\x06\\xfb\\x74\\xfc\\x95\\x05\"\n\"\\xdb\\x06\\xf7\\x45\\xf8\\x2d\\xf7\\x45\\xfc\\x2d\\x05\\xdb\\x06\\x0e\\xf7\\xf4\\xf8\\xa9\\x16\\xf7\\x74\\xf8\\x95\\x05\\x3b\\x06\\xfb\\x45\\xfc\\x2d\\xfb\\x45\"\n\"\\xf8\\x2d\\x05\\x3b\\x06\\xf7\\x74\\xfc\\x95\\x05\\x0e\\xf7\\xf4\\xf8\\x8c\\xf9\\x60\\x15\\xfb\\x60\\xfb\\x34\\xfb\\x33\\xfb\\x5e\\xfb\\x5b\\xf7\\x34\\xfb\\x33\"\n\"\\xf7\\x5d\\xf7\\x5b\\xf7\\x34\\xf7\\x34\\xf7\\x5c\\xf7\\x59\\xfb\\x35\\xf7\\x36\\xfb\\x57\\x1f\\xa4\\x52\\x15\\xf7\\x23\\x7e\\xf7\\x06\\xfb\\x06\\x99\\xfb\\x25\"\n\"\\x08\\xfb\\xa3\\x06\\xf7\\xa4\\x52\\x15\\x82\\xfb\\x22\\xfb\\x0d\\xfb\\x0f\\xfb\\x22\\x80\\x08\\xf7\\xa8\\x07\\x53\\xfb\\xa8\\x15\\xfb\\x27\\x99\\xfb\\x05\\xf7\"\n\"\\x05\\x7d\\xf7\\x29\\x08\\xf7\\xa6\\x06\\xfb\\xa6\\xc4\\x15\\x99\\xf7\\x24\\xf7\\x07\\xf7\\x06\\xf7\\x25\\x99\\x08\\xfb\\xa4\\x07\\x0e\\x5f\\xb6\\x16\\xf8\\x9b\"\n\"\\xf8\\x9b\\xfc\\x9b\\x06\\xf8\\x67\\xfc\\x67\\x15\\xfc\\x33\\xf8\\x33\\xf8\\x33\\x06\\x0e\\xd2\\xf8\\xeb\\xf8\\xf7\\x15\\x45\\xfb\\xa4\\x06\\xfb\\x05\\x86\\x5f\"\n\"\\x7b\\x6b\\x1e\\x56\\x70\\x50\\x67\\x4c\\x1b\\x54\\x54\\xa7\\xb7\\x6e\\x1f\\x73\\xb0\\x84\\xb7\\xf7\\x11\\x1a\\xf7\\xa4\\x45\\xfb\\xa1\\x07\\xfb\\x29\\x90\\x65\"\n\"\\xa6\\x5f\\x1e\\x45\\xb5\\xd7\\x62\\xe5\\x1b\\xde\\xd1\\xac\\xc9\\xb8\\x1f\\xaf\\xbc\\x91\\xaf\\xf7\\x36\\x1a\\x0e\\x54\\xf8\\x27\\xf8\\x1c\\x15\\xfb\\x69\\x06\"\n\"\\x41\\xf7\\x4d\\x05\\x2d\\x06\\xf7\\x7d\\xfc\\xd5\\x05\\xde\\x06\\xf7\\x7d\\xf8\\xd5\\x05\\x2d\\x06\\x22\\xfb\\x9d\\x15\\x3f\\xfb\\x48\\x40\\xf7\\x48\\x05\\x0e\"\n\"\\x66\\xf8\\x65\\x16\\x73\\x82\\x83\\x88\\x7d\\x82\\x08\\x5a\\x6f\\x6d\\x5d\\x60\\xbb\\x1d\\xa7\\x9f\\x0a\\x73\\x9c\\xaf\\xba\\xb1\\xb8\\xd4\\xb0\\x1f\\xf8\\xb0\"\n\"\\x55\\x0a\\x4b\\x5f\\x61\\x46\\x4f\\x6d\\xab\\xcc\\x1e\\xf7\\xef\\xfb\\x20\\xfc\\x0c\\x07\\xfb\\x0c\\xcc\\x48\\xf7\\x08\\xd4\\xbc\\xa5\\xc8\\xb3\\x1e\\x4b\\x07\"\n\"\\x0e\\x49\\x3c\\x1d\\x0e\\x49\\x3c\\x1d\\xcb\\xf8\\xa1\\x25\\x1d\\x49\\x3c\\x1d\\xbe\\xf8\\xa1\\x82\\x1d\\x49\\x3c\\x1d\\xf7\\x2d\\xf8\\xcf\\x23\\x1d\\x66\\x26\"\n\"\\x0a\\x27\\xf9\\x96\\x2c\\x1d\\x0e\\x66\\x26\\x0a\\x9f\\x40\\x0a\\xf7\\x16\\x30\\x0a\\xa2\\x43\\x1d\\xf7\\x16\\x30\\x0a\\xfb\\x17\\xf9\\x7d\\x4f\\x1d\\xf7\\x16\"\n\"\\x30\\x0a\\xfb\\x11\\xf9\\x7b\\x25\\x1d\\xf7\\x16\\x30\\x0a\\xfb\\x62\\xf9\\x89\\x21\\x1d\\xfb\\x5f\\xf8\\x35\\xfb\\x6e\\x15\\xb1\\xef\\x97\\xbb\\xc0\\x1a\\xb0\"\n\"\\x7f\\xab\\x76\\x9e\\x1e\\x78\\x9d\\x74\\x93\\x59\\x91\\x46\\x93\\x18\\x54\\x92\\x7f\\x8e\\x79\\x98\\x08\\x76\\x9a\\x7e\\xa9\\xaa\\x1a\\xb7\\xa5\\xb2\\xb3\\x9a\"\n\"\\x1e\\x96\\xa9\\xa8\\x8f\\xc9\\x1b\\xcb\\xf7\\x05\\x4d\\x06\\x63\\x6d\\x90\\x95\\x73\\x1f\\x6c\\x98\\x75\\xaa\\xac\\x1a\\xa9\\x9d\\xa7\\xa7\\x99\\x1e\\x97\\xa4\"\n\"\\xa3\\x8f\\xbf\\x1b\\xe4\\xf7\\x05\\xfc\\x22\\xfb\\x05\\xdd\\x06\\x66\\x6c\\x7b\\x6c\\x61\\x1a\\x4e\\xac\\x62\\xd0\\x72\\x1e\\x5d\\x7c\\x76\\x81\\x73\\x76\\x08\"\n\"\\x64\\x6b\\x76\\x5b\\x51\\x1a\\x49\\xa8\\x4f\\xb9\\x6a\\x1e\\xab\\x74\\xb2\\x80\\xcd\\x84\\xb9\\x87\\x18\\xb5\\x87\\x94\\x89\\x97\\x82\\x08\\x95\\x84\\x91\\x7b\"\n\"\\x79\\x1a\\x6e\\x84\\x76\\x5f\\xfb\\x01\\x1e\\x0e\\x2f\\x2e\\x0a\\xfb\\xcc\\xf7\\x6d\\x2b\\x1d\\x2f\\x2e\\x0a\\xfc\\x2d\\xf7\\x6d\\x21\\x1d\\xfb\\x28\\x36\\x0a\"\n\"\\x43\\xf7\\xde\\x20\\x1d\\xfb\\x28\\x36\\x0a\\xfb\\x2d\\xf7\\xd0\\x27\\x0a\\xfb\\x50\\xd1\\xf8\\xfc\\x15\\xf7\\x58\\x06\\x3f\\x57\\x69\\x6a\\x5e\\x4c\\x08\\x50\"\n\"\\x38\\x6f\\x3c\\x34\\x1a\\x33\\xad\\x44\\xc4\\x6e\\x1e\\xa8\\x7d\\xb7\\x80\\xc0\\x86\\xb0\\x88\\x18\\xcf\\x85\\x99\\x82\\x66\\x1a\\x69\\x7e\\x62\\x63\\x32\\x1e\"\n\"\\xf7\\x0a\\x06\\xb3\\xf4\\x94\\xb0\\xc7\\x1a\\xdc\\x68\\xab\\x2a\\x94\\x1e\\x65\\x8f\\x54\\x90\\x74\\x90\\x79\\x96\\x19\\x70\\x9b\\x7c\\xb0\\xbb\\x1a\\xd4\\xa9\"\n\"\\xd7\\xc5\\xd8\\x1e\\xc4\\xd7\\xb7\\xae\\xeb\\xba\\x08\\xf7\\x05\\xfc\\x11\\x07\\x0e\\x74\\xa2\\xf8\\xb0\\x94\\xf7\\x48\\x97\\x6b\\x9a\\x06\\xf7\\x10\\x0a\\xf7\"\n\"\\x1f\\x0b\\xc8\\x92\\x90\\x8e\\x8f\\x9a\\x96\\x92\\x90\\x8e\\x8e\\x8f\\x0c\\x0c\\xca\\x90\\x95\\x90\\x99\\x90\\x92\\x97\\x97\\x8e\\x8e\\x97\\x0c\\x0d\\xf7\\xaa\"\n\"\\x14\\xf9\\x1c\\x15\\xc0\\x13\\x00\\x8e\\x02\\x00\\x01\\x00\\x08\\x00\\x0c\\x00\\x11\\x00\\x16\\x00\\x1b\\x00\\x33\\x00\\x5c\\x00\\x5f\\x00\\x62\\x00\\x79\\x00\"\n\"\\x7d\\x00\\x82\\x00\\xa3\\x00\\xbe\\x00\\xf1\\x01\\x22\\x01\\x51\\x01\\x70\\x01\\x79\\x01\\x80\\x01\\x86\\x01\\x8a\\x01\\xa9\\x01\\xad\\x01\\xb1\\x01\\xb5\\x01\"\n\"\\xbf\\x01\\xc4\\x01\\xd5\\x01\\xdb\\x01\\xde\\x01\\xe3\\x02\\x01\\x02\\x09\\x02\\x29\\x02\\x3d\\x02\\x46\\x02\\x4b\\x02\\x60\\x02\\x6f\\x02\\x75\\x02\\x7a\\x02\"\n\"\\x7d\\x02\\x82\\x02\\x88\\x02\\x8f\\x02\\x96\\x02\\x9e\\x02\\xa4\\x02\\xab\\x02\\xaf\\x02\\xb8\\x02\\xbe\\x02\\xc4\\x02\\xc9\\x02\\xce\\x03\\x6d\\x03\\xdc\\x04\"\n\"\\x4a\\x04\\x5d\\x04\\xb9\\x05\\x0e\\x05\\x3b\\x05\\x8f\\x05\\xc2\\x05\\xe1\\x06\\x13\\x06\\x2e\\x06\\x35\\x06\\x65\\x06\\x69\\x06\\x8c\\x06\\xb1\\x06\\xc4\\x06\"\n\"\\xd0\\x06\\xd4\\x06\\xe4\\x06\\xea\\x06\\xef\\x07\\x10\\x07\\x23\\x07\\x2d\\x07\\x30\\x07\\x4a\\x07\\x54\\x07\\x6f\\x07\\x7f\\x07\\x99\\x07\\xaa\\x07\\xc3\\x07\"\n\"\\xdc\\x07\\xf3\\x08\\x00\\x08\\x09\\x08\\x1e\\x08\\x2d\\x08\\x32\\x08\\x46\\x08\\x5a\\x08\\x69\\x08\\x7c\\x08\\x8f\\x08\\x96\\x08\\xa1\\x08\\xb3\\x08\\xb6\\x08\"\n\"\\xbf\\x08\\xc6\\x08\\xd6\\x08\\xdf\\x08\\xec\\x08\\xf5\\x08\\xfd\\x09\\x05\\x09\\x08\\x09\\x15\\x09\\x1c\\x09\\x29\\x09\\x31\\x09\\x39\\x09\\x45\\x09\\x4a\\x09\"\n\"\\x56\\x09\\x62\\x09\\x66\\x09\\x6a\\x09\\x75\\x09\\x80\\x09\\x8b\\x09\\x96\\x09\\xa1\\x09\\xab\\x09\\xb5\\x09\\xbf\\x09\\xc9\\x09\\xd2\\x09\\xdb\\x09\\xe4\\x09\"\n\"\\xed\\x09\\xf6\\x09\\xfc\\x0a\\x02\\xf8\\x89\\xa2\\x0a\\x71\\x0a\\x0b\\xf9\\x6d\\x15\\x0b\\xf7\\x79\\x4e\\x1d\\x0b\\x15\\xfb\\x00\\x52\\x1d\\xf8\\x1a\\x3f\\x0a\"\n\"\\x0b\\xf8\\x8c\\x21\\x0a\\x85\\x1d\\xe3\\x1b\\xe3\\xd8\\xa5\\xbb\\xc0\\x1f\\xbc\\xb7\\xa1\\xc5\\xdd\\x1a\\xf8\\x82\\x07\\x0b\\xf8\\xb1\\x16\\xf8\\xb0\\xfb\\x20\"\n\"\\xfb\\xe6\\x07\\x4b\\x5f\\x61\\x46\\x4f\\x6d\\xab\\xcc\\x1e\\xf7\\xef\\xfb\\x20\\xfc\\x0c\\x07\\xfb\\x0c\\xcc\\x48\\xf7\\x08\\xd4\\xbc\\xa5\\xc8\\xb3\\x1e\\x4b\"\n\"\\x07\\x0b\\x45\\x1d\\x0e\\x5d\\x1d\\x0e\\xf8\\x93\\x16\\x48\\x1d\\xfc\\x84\\x06\\xfb\\xb5\\xf8\\x84\\x05\\xfb\\x2e\\xfd\\x6d\\xf7\\x2a\\xf8\\x8c\\x06\\x0b\\x15\"\n\"\\xf6\\x3a\\x0a\\xf7\\x2a\\xf9\\x6d\\x0b\\xf8\\xf3\\xf8\\x8f\\x15\\x67\\x0a\\xfb\\x30\\x94\\xf6\\x36\\xf7\\x4e\\x1b\\xf7\\x50\\xf7\\x03\\xe2\\xf7\\x29\\xf7\\x07\"\n\"\\x51\\xc7\\xfb\\x1b\\xa5\\x1f\\x7e\\x0a\\x0b\\xf9\\x3e\\xf8\\x76\\x15\\x91\\x1d\\xfb\\x7f\\xf7\\x13\\xfb\\x26\\xf7\\x5f\\xf7\\x4a\\xf7\\x0c\\xf4\\xf7\\x3b\\x94\"\n\"\\x1f\\x45\\x0a\\x0b\\xf8\\x1e\\xf8\\xb0\\x15\\xfb\\x04\\xfc\\x1d\\xfb\\x0b\\x4d\\x0a\\xf7\\x5d\\xfc\\xc6\\x05\\x53\\x68\\x65\\x57\\x80\\x82\\x8d\\x8f\\x7a\\x1e\"\n\"\\x22\\x07\\x88\\xa0\\x97\\x8a\\x9c\\x1b\\xaf\\xb3\\x92\\x95\\xa4\\x1f\\xb2\\x9b\\x9c\\xa1\\xa2\\xcc\\xc5\\x1d\\x0b\\xf9\\x6e\\x16\\xf7\\x5e\\xf9\\x6d\\x56\\x0a\"\n\"\\xfb\\x01\\xfc\\xb7\\xfb\\x0a\\xf8\\xb7\\x05\\xfb\\x28\\x06\\xfb\\x05\\xfc\\xb6\\xfb\\x05\\xf8\\xb6\\x56\\x0a\\xf7\\x62\\xfd\\x6d\\x05\\xf7\\x1b\\x06\\xf7\\x0b\"\n\"\\xf8\\xcd\\xf7\\x0e\\xfc\\xcd\\x05\\x0b\\xf8\\xf9\\x16\\xf7\\x2d\\xf8\\xb0\\x05\\xfb\\x25\\x06\\x39\\xfc\\x0e\\x3a\\xf8\\x0e\\x05\\xfb\\x20\\x06\\x39\\xfc\\x0e\"\n\"\\x35\\xf8\\x0e\\x05\\xfb\\x25\\x06\\xf7\\x2c\\xfc\\xb0\\x05\\xf7\\x24\\x06\\xe1\\xf8\\x11\\xdc\\xfc\\x11\\x05\\x0b\\xf8\\xd6\\x21\\x0a\\xfc\\xb8\\xfb\\x11\\xf8\"\n\"\\x09\\x06\\xfc\\x09\\xfc\\x73\\x05\\xfb\\x11\\xf8\\xb8\\xf7\\x11\\xfc\\x08\\x07\\xf8\\x08\\xf8\\x73\\x05\\x0b\\x9e\\x0a\\xf7\\xce\\xf7\\x27\\x9e\\x0a\\x0e\\xfb\"\n\"\\x2a\\xfd\\x6d\\xf7\\x2a\\x0b\\x1f\\x78\\x57\\x05\\x75\\x0b\\x88\\xd9\\x08\\x0b\\xf8\\x5f\\x24\\x1d\\xfc\\x38\\xfb\\x05\\xf7\\x8d\\x06\\xfb\\x9f\\xfb\\xce\\x05\"\n\"\\xfb\\x05\\xf8\\x53\\xf7\\x05\\xfb\\xa6\\x07\\xf7\\x9d\\xf7\\xce\\x05\\x0b\\x15\\x90\\x1d\\x0b\\xfa\\x2e\\x25\\x1d\\xfa\\x3c\\x20\\x1d\\xf7\\x2a\\x05\\x3f\\x06\"\n\"\\x39\\x2a\\x39\\x47\\x1d\\xf7\\x65\\x48\\x0a\\x0b\\x15\\xfb\\xb5\\xea\\xf8\\x3d\\x4b\\x07\\x59\\x7d\\x5d\\x72\\x3d\\x1b\\x4e\\x07\\x0b\\xf7\\x26\\x15\\x33\\x1d\"\n\"\\x0b\\xa8\\x0a\\x0e\\xf9\\x79\\x6c\\x1d\\x0b\\xf9\\x81\\x15\\x6b\\x88\\x7f\\xaf\\x1d\\x98\\x67\\x8a\\x8b\\x78\\x1b\\x54\\x51\\x1d\\x94\\x95\\x89\\x87\\x96\\x5f\"\n\"\\x1d\\xab\\xb5\\xe0\\x8f\\x1f\\x0e\\x54\\x1d\\x8c\\xfb\\x05\\x70\\x0a\\x0b\\x15\\x5c\\x82\\x75\\x78\\x5e\\x1b\\x5e\\x72\\xa0\\xb8\\x84\\x1f\\x54\\x06\\x32\\x8d\"\n\"\\xbd\\x55\\xdb\\x1b\\xd6\\xc4\\xc4\\xd6\\x8d\\x8b\\x8f\\x8a\\x90\\x1f\\x0e\\x89\\x87\\x96\\x1f\\xd3\\x71\\x05\\x83\\x9f\\x9e\\x87\\x9a\\x1b\\xc6\\xab\\xb5\\xe0\"\n\"\\x8f\\x1f\\x0e\\x15\\x53\\x06\\x5d\\x82\\x75\\x56\\x1d\\x0e\\xfb\\x26\\x77\\x0a\\x0b\\x4b\\x1d\\xf7\\x23\\x06\\xfb\\x03\\xf7\\xc1\\xe5\\xf7\\x83\\x05\\xfb\\x22\"\n\"\\x06\\x45\\xfb\\x50\\x05\\x0b\\xf7\\x18\\x81\\x34\\xda\\xfb\\x1c\\x1b\\xfb\\x36\\x2e\\x21\\xfb\\x4c\\x0b\\x24\\x1d\\x2d\\x1d\\x06\\x0b\\xfc\\x3f\\xa4\\x1d\\x0b\"\n\"\\x76\\x0a\\x0e\\xcb\\xf7\\xe7\\x3e\\x0a\\x9e\\x1b\\xaa\\xa6\\x1d\\x0b\\xf8\\x1d\\x05\\xfb\\x2e\\x06\\x0b\\xf7\\x0e\\x05\\xfb\\x19\\x06\\x0e\\x8c\\x79\\x1b\\x53\"\n\"\\x68\\x5d\\x3d\\x0b\\x7f\\x89\\x86\\x7d\\x1f\\x0e\\x06\\xf7\\x1a\\xfb\\xdf\\x05\\x0b\\x54\\x0a\\x5b\\x0b\\x8e\\x8e\\x84\\x1f\\x43\\xa4\\x05\\x97\\x0b\\xac\\xc7\"\n\"\\xb7\\x6e\\xa6\\x0b\\xfb\\x20\\xfb\\xe6\\x07\\x0b\\x05\\xfb\\x33\\x06\\x0b\\xf8\\xf0\\xfb\\x2a\\x0b\\xf9\\x5c\\xf7\\x2c\\x15\\x63\\x7f\\x5f\\x6f\\x5b\\x1b\\x64\"\n\"\\x68\\x9d\\xaa\\x77\\x1f\\x7c\\xa2\\x86\\xa3\\xb9\\x1a\\xf7\\xfe\\x06\\x8c\\x97\\x8b\\x92\\x90\\x1a\\xc1\\x83\\xbf\\x7e\\xaf\\x1e\\xee\\x66\\x35\\xc5\\xfb\\x04\"\n\"\\x1b\\x4e\\x56\\x7a\\x6a\\x62\\x1f\\xac\\x65\\x50\\x9c\\x3d\\x1b\\xfb\\x29\\x3e\\x4c\\xfb\\x10\\x89\\x1f\\xf7\\x17\\x06\\xc1\\x92\\xa4\\x9f\\xca\\x1b\\xc4\\xa7\"\n\"\\x7a\\x67\\x7b\\x82\\x7b\\x7c\\x83\\x62\\x1d\\xfb\\x00\\x79\\x58\\x54\\x29\\x1a\\x26\\xcc\\x4b\\xf2\\xdc\\xc9\\xaa\\xd5\\xc9\\x1e\\x47\\xb5\\xd1\\x67\\xe3\\x1b\"\n\"\\xf7\\x0e\\xec\\xcf\\xf6\\xaa\\x1f\\xfc\\x84\\xcb\\x15\\x39\\x64\\x5e\\x43\\x5c\\x6e\\xa4\\xb4\\xb4\\xa6\\xa4\\xc0\\x92\\x1e\\xbb\\x92\\xa9\\x90\\x97\\x8f\\x9c\"\n\"\\x95\\x19\\xf7\\x21\\xcc\\x15\\xdc\\x91\\xb0\\xb5\\xcb\\x1b\\xcc\\xb0\\x61\\x3a\\x92\\x1f\\x0b\\xf8\\x9a\\x24\\x1d\\xda\\x30\\xb0\\x2c\\xfb\\x02\\x1a\\x2c\\x6d\"\n\"\\x52\\x59\\x75\\x7b\\x95\\x9f\\x7e\\x1e\\x7e\\xa1\\x87\\xa5\\xcb\\x1a\\xf7\\x3e\\xfb\\x12\\xfb\\x3e\\x07\\x51\\x88\\x72\\x81\\x76\\x1e\\x72\\x7f\\x78\\x7e\\x73\"\n\"\\x1b\\x59\\x6d\\xc4\\xea\\xf7\\x03\\xb0\\xe9\\xda\\xe6\\x1f\\xfb\\x2c\\x06\\x43\\x31\\x6b\\x2f\\xfb\\x07\\x1a\\x33\\x9f\\x4b\\xb5\\x5a\\x1e\\x61\\xaf\\xbd\\x74\"\n\"\\xc1\\x1b\\xcd\\xbc\\xac\\xcf\\xad\\x1f\\x46\\xae\\xbb\\x6b\\xcd\\x1b\\xc1\\xbe\\xa3\\xb5\\xaf\\x1f\\xb4\\xbc\\x9f\\xcb\\xe1\\x1a\\xf7\\x08\\x6b\\xe7\\x43\\xe5\"\n\"\\x1e\\x0b\\xf7\\x39\\xbf\\x15\\x59\\xc5\\xd5\\x72\\xe6\\x1b\\xf2\\xdd\\xac\\xcf\\xcb\\x1f\\xcb\\xcf\\xb1\\xf3\\xf6\\x1a\\xe8\\x6f\\xe9\\x5e\\xc8\\x1e\\xe4\\xee\"\n\"\\x57\\xb8\\x38\\x2f\\x05\\xc6\\x48\\x45\\xa4\\x2c\\x1b\\x22\\x39\\x6a\\x47\\x4c\\x1f\\x49\\x46\\x66\\x24\\xfb\\x01\\x1a\\x29\\xa6\\x36\\xc2\\x41\\x1e\\x35\\x2c\"\n\"\\xbe\\x5d\\x05\\xf8\\x79\\xf8\\xac\\x15\\x99\\x64\\x93\\x5a\\x5b\\x1a\\xfb\\x30\\x3c\\x27\\xfb\\x0f\\x57\\x5b\\x9d\\xa9\\x6c\\x1e\\x61\\xc3\\x15\\x78\\xb6\\x81\"\n\"\\xbc\\xc2\\x1a\\xf7\\x31\\xda\\xef\\xf7\\x10\\xc3\\xba\\x78\\x64\\xb0\\x1e\\x0b\\x27\\x1d\\xfb\\x8a\\xf8\\x4a\\x15\\xf7\\x13\\xfb\\x2a\\x05\\xd0\\x06\\x46\\xf7\"\n\"\\x2a\\x05\\x0e\\xf7\\x12\\xae\\x15\\x67\\xb3\\xcf\\x75\\xd3\\x1b\\xf7\\x39\\xf1\\xf7\\x01\\xf7\\x45\\xd3\\x7c\\xc5\\x6b\\xbd\\x1f\\xd3\\xd4\\x60\\xb4\\x47\\x45\"\n\"\\x05\\xb5\\x58\\x51\\x9f\\x42\\x1b\\xfb\\x3c\\x65\\x1d\\x40\\x9b\\x4f\\xad\\x5a\\x1f\\x40\\x3e\\xb6\\x63\\x05\\xf8\\x03\\xf8\\x0a\\x15\\x93\\x73\\x8f\\x72\\x70\"\n\"\\x1a\\x27\\x56\\x45\\x41\\x6a\\x6e\\x99\\xa7\\x73\\x1e\\x6d\\xbf\\x15\\x82\\xa2\\x86\\xa7\\xaa\\x1a\\xf0\\xbf\\xd1\\xd6\\xae\\xa6\\x7d\\x6a\\xa6\\x1e\\x0b\\xd8\"\n\"\\xf7\\xe7\\x15\\xfb\\xe7\\xf7\\xb1\\x07\\xf7\\x06\\xd0\\xa4\\xc7\\xbb\\x1f\\xc2\\xcf\\xac\\xf3\\xf7\\x00\\x1a\\xf7\\x00\\x6a\\xf2\\x54\\xd0\\x1e\\xc6\\x5a\\x48\"\n\"\\xa4\\xfb\\x07\\x1b\\xfb\\xb1\\xfb\\xca\\x3e\\x3b\\x06\\xf7\\x77\\x16\\xf7\\x2a\\xdb\\xfb\\x2a\\xf7\\x4d\\xf7\\x1b\\x06\\xcc\\xb1\\x7b\\x65\\xa5\\x1f\\xaa\\x5f\"\n\"\\x9a\\x4e\\x3a\\x1a\\x3b\\x7c\\x4e\\x6c\\x5f\\x1e\\x65\\x71\\x65\\x7b\\x4a\\x1b\\xfb\\x1b\\x06\\x0e\\xdd\\x16\\xf7\\xdc\\x06\\xdf\\xc3\\x9b\\xb0\\xb7\\x1f\\xb7\"\n\"\\xb0\\xa7\\xc8\\xc6\\x1a\\xd3\\x65\\xc4\\x38\\xbb\\x1e\\xd3\\xb9\\xa7\\xb5\\xc9\\x1a\\xbe\\x72\\xbf\\x62\\xaf\\x1e\\xb0\\x60\\x58\\x9b\\x3d\\x1b\\xfb\\xd9\\x7e\"\n\"\\x1d\\x15\\xa6\\x9d\\x89\\x89\\x94\\x1f\\xa7\\x84\\x9d\\x74\\x6e\\x1a\\x68\\x71\\x72\\x67\\x61\\x76\\xa0\\xb8\\x89\\x1e\\x2f\\x06\\x30\\x8c\\xc3\\x57\\xec\\x1b\"\n\"\\xec\\xca\\xc1\\xdf\\xba\\x75\\xad\\x5f\\xa1\\x1f\\xad\\xa0\\x9d\\xaa\\xb0\\x1a\\xd2\\x52\\xb9\\x33\\x57\\x60\\x7a\\x6b\\x72\\x1e\\x78\\x74\\x84\\x72\\x88\\x59\"\n\"\\x08\\xe4\\x06\\xc2\\x8c\\x9a\\x9e\\xb4\\x1b\\xab\\xa0\\x76\\x6a\\x65\\x71\\x77\\x59\\x1f\\x81\\x06\\x0b\\xfb\\x26\\x3f\\x4d\\xfb\\x11\\x82\\x1e\\xf7\\x1b\\x06\"\n\"\\xc3\\x92\\xa2\\x9d\\xd0\\x1b\\xc1\\xa6\\x79\\x67\\x79\\x82\\x7c\\x7c\\x82\\x62\\x1d\\x20\\x79\\x57\\x54\\x2a\\x1a\\x2a\\xcc\\x4a\\xee\\xc7\\xc1\\xa4\\xbf\\xbd\"\n\"\\x1e\\x6f\\x8e\\x81\\x98\\x7b\\x1e\\x0b\\xce\\x21\\x0a\\xfd\\x6d\\xbc\\x1d\\xaa\\xa2\\x80\\x75\\x9b\\x1e\\x98\\x79\\x8e\\x7c\\x82\\x0a\\x5e\\x1b\\x46\\x59\\x70\"\n\"\\x4f\\x64\\x1f\\xf7\\x9f\\x07\\x0b\\xf8\\x37\\xf8\\x08\\x15\\xf7\\x75\\xf7\\xf9\\x05\\xfb\\x42\\x06\\xfb\\x1a\\xfb\\x84\\xfb\\x14\\xf7\\x84\\x05\\xfb\\x46\\x06\"\n\"\\xf7\\x72\\xfb\\xfe\\xfb\\x7a\\xfc\\x03\\x05\\xf7\\x42\\x06\\xf7\\x1f\\xf7\\x91\\xf7\\x20\\xfb\\x91\\x05\\xf7\\x46\\x06\\x0e\\x36\\x46\\xfb\\x03\\x67\\x96\\x6c\"\n\"\\x9e\\x76\\x1f\\x9e\\x78\\x9c\\x82\\xbf\\x7a\\xf7\\x3b\\x57\\x18\\xae\\x80\\x97\\x80\\x75\\x1a\\x0b\\xf8\\x27\\xf8\\xb0\\x78\\x1d\\x0b\\xf8\\xa6\\xf7\\x76\\x15\"\n\"\\x8c\\x96\\x8b\\x95\\x90\\x1a\\xbe\\x83\\xc0\\x7e\\xaf\\x1e\\xed\\x67\\x34\\xc6\\xfb\\x01\\x1b\\xfb\\x2e\\x2c\\xfb\\x04\\xfb\\x49\\xfb\\x41\\xea\\x21\\xf7\\x2e\"\n\"\\xf7\\x0e\\xee\\xd0\\xf5\\xaa\\x1f\\xfb\\x24\\x06\\x0b\\xf7\\x6c\\x68\\x0a\\xf7\\x2b\\x8a\\x26\\xde\\xfb\\x4c\\x1b\\xfb\\x43\\x95\\x0a\\xf1\\x77\\x05\\xef\\x78\"\n\"\\xb0\\x6f\\x50\\x1a\\x4e\\x53\\x66\\x30\\x25\\x52\\xb6\\xd9\\x86\\x1e\\xfb\\x26\\x06\\x0b\\xf8\\xcc\\x15\\xf7\\x17\\xfc\\xcc\\x05\\xf7\\x2a\\x06\\xf7\\x15\\xf8\"\n\"\\xcc\\x05\\xfc\\xcc\\x2b\\x0a\\xfb\\x76\\x07\\xfb\\x14\\xfc\\xd8\\xfb\\x18\\xf8\\xd8\\x05\\xfb\\x74\\x32\\x1d\\x0e\\xfb\\x20\\xfb\\x8d\\x06\\x7b\\x5e\\x64\\x83\"\n\"\\x65\\x8d\\x1d\\xbe\\xc4\\x94\\x9c\\xc5\\x1f\\x0e\\x8e\\x78\\x0a\\xde\\xb8\\x54\\x0a\\x5c\\x7c\\x49\\x1d\\x0e\\xf7\\x69\\x6d\\x0a\\x96\\x0a\\x4d\\x81\\x5b\\x9f\"\n\"\\x1d\\xf7\\x43\\xc7\\xa7\\x8f\\xa4\\xe9\\x1e\\x0e\\x31\\x1d\\xfb\\x04\\x38\\x0a\\x48\\x0a\\x21\\x41\\x1d\\xfc\\xb7\\x15\\x5d\\xf7\\x95\\xfb\\x01\\x06\\xfb\\x39\"\n\"\\xfb\\x96\\x05\\x41\\xf7\\x47\\x2e\\xea\\xe8\\xb9\\x07\\xfb\\x21\\xd6\\x15\\x21\\x06\\xf5\\xf7\\x38\\x05\\x0e\\x15\\xd8\\xbd\\x46\\x21\\x26\\x57\\x45\\x40\\x3f\"\n\"\\x58\\xd0\\xf3\\xf3\\xbe\\xd0\\xd7\\x1f\\x0b\\xfb\\x90\\xf9\\x6d\\x05\\xfb\\x3a\\x8c\\x1d\\x0b\\x87\\x1d\\x0e\\xb7\\x1d\\xb1\\x1f\\x8a\\xfb\\x3c\\x15\\xb4\\xa5\"\n\"\\x70\\x5e\\x62\\x71\\x70\\x62\\x62\\x71\\xa6\\xb5\\xb6\\xa5\\xa7\\xb4\\x1f\\x0b\\x15\\x53\\x06\\x5c\\x82\\x75\\x78\\x95\\x1d\\x0e\\x16\\xf7\\x4e\\xf8\\xb0\\x05\"\n\"\\xfb\\x28\\x06\\xfb\\x01\\xfc\\x1f\\xfb\\x09\\xf8\\x1f\\x05\\xfb\\x28\\x06\\xf7\\x51\\xfc\\xb0\\x05\\x0e\\x15\\xf7\\x5e\\xf7\\x34\\x07\\xc2\\xad\\x65\\x4d\\x4d\"\n\"\\x68\\x63\\x55\\x1f\\x0b\\x06\\x2e\\x81\\x51\\x56\\x2e\\x1b\\xfb\\x08\\x47\\xe9\\xf7\\x33\\xf7\\x35\\xd2\\xeb\\xf7\\x0a\\xe2\\xbc\\x61\\x32\\x9f\\x1f\\x0b\\x57\"\n\"\\x1d\\x72\\x92\\xa2\\x58\\x1f\\x78\\x57\\x05\\x76\\xc8\\xac\\x84\\xb8\\x1b\\x0b\\xf7\\xe3\\x15\\xfb\\x3b\\xf7\\x26\\x05\\xfb\\x06\\x07\\xf0\\x32\\x26\\x32\\x05\"\n\"\\xfb\\x09\\x07\\xf7\\x3b\\xf7\\x28\\x05\\x0b\\x71\\xb2\\x77\\x1e\\x5a\\x70\\x76\\x6b\\x59\\x1a\\x3a\\xc9\\x53\\xe4\\xe4\\xc9\\xc3\\xdc\\xbd\\x76\\xab\\x5a\\xa6\"\n\"\\x1e\\x0b\\xf7\\x11\\x15\\x5c\\xa9\\x77\\x9a\\x79\\xa0\\x08\\x63\\xb9\\x75\\xd1\\xde\\x1a\\xf7\\x25\\xd9\\xe9\\xf7\\x0c\\x0b\\x15\\xf7\\x00\\xf7\\x2a\\x05\\x3f\"\n\"\\x06\\x38\\x2a\\x3a\\x47\\x1d\\x63\\x1d\\xd7\\x06\\xde\\xef\\xdc\\x8a\\x0a\\xfb\\x06\\xa1\\x05\\x20\\xa0\\x6c\\xa0\\xc0\\x1a\\xc2\\xbb\\xae\\xd9\\xea\\xc0\\x63\"\n\"\\x41\\x90\\x1e\\x0b\\xf7\\x1a\\xfb\\xdf\\x05\\xf7\\x32\\x06\\xfb\\x32\\xf8\\x1c\\xa9\\x0a\\x0b\\x9e\\x1d\\xfb\\x20\\x0b\\xfb\\x84\\xfb\\x13\\xf7\\x84\\x05\\xfb\"\n\"\\x4a\\x06\\xf7\\x76\\xfb\\xfb\\xfb\\x76\\xfc\\x06\\x05\\x0b\\x69\\x1a\\xfb\\xde\\xf7\\x20\\xf7\\xfe\\x07\\xce\\x79\\xbb\\x66\\xaa\\x1e\\xa5\\x6c\\x5e\\x9a\\x0b\"\n\"\\x51\\x0a\\xf7\\x33\\x06\\xfb\\x33\\xf8\\x1c\\xf7\\x07\\xf7\\xe5\\x05\\x0b\\x15\\xa9\\xa4\\x72\\x6d\\x6d\\x72\\x72\\x6d\\x6d\\x72\\xa4\\xaa\\xa8\\xa5\\xa4\\xa8\"\n\"\\x1f\\x0b\\xfb\\x45\\xbe\\x05\\x64\\x97\\x81\\x93\\xa1\\x1a\\xa9\\xab\\x9f\\xbc\\xce\\xac\\x73\\x5a\\x0b\\xf7\\xa5\\x33\\x0a\\xf7\\xdf\\x0b\\x06\\xab\\x90\\x97\"\n\"\\x98\\xa2\\x1b\\x95\\xa2\\x1d\\x0b\\x1e\\x8f\\x61\\x8d\\x75\\x7f\\x1a\\x79\\x85\\x81\\x7f\\x85\\x89\\x8c\\x96\\x80\\x1e\\x0b\\xa3\\x1d\\x0e\\x27\\x05\\xd9\\x06\"\n\"\\x24\\xf7\\x2a\\x05\\x0e\\xb8\\x1b\\xde\\xb8\\x54\\x0a\\x0b\\xf7\\xb7\\xc9\\xfb\\xac\\x06\\x38\\x68\\x84\\x72\\x66\\x1f\\x4a\\x60\\x69\\x0b\\xf7\\x0b\\x16\\xbe\"\n\"\\x1d\\xfc\\x23\\x06\\x0b\\xf7\\xbe\\xf7\\xea\\x15\\xfb\\xa4\\xfb\\x1b\\xf7\\xa4\\x06\\x0e\\xb4\\xfb\\x01\\x1b\\xfb\\x62\\xfb\\x14\\x0b\\xd4\\x16\\xab\\x0a\\xfb\"\n\"\\xde\\x06\\x0b\\xfb\\x2a\\xfc\\xf0\\xfb\\x9e\\x60\\x1d\\x9b\\x0a\\x0e\\xf7\\x39\\xf7\\xfe\\xf7\\x11\\xfc\\x94\\xfd\\x6d\\xf7\\x2a\\x0b\\xa9\\x0a\\x26\\xfb\\xa5\"\n\"\\x05\\x0b\\x26\\x39\\xfb\\x22\\xfb\\x05\\xc4\\x54\\xf7\\x28\\x6f\\x1f\\x0b\\xfb\\x2a\\xfb\\xf4\\x06\\x78\\x46\\x0b\\x1b\\xcb\\xb1\\x60\\x3b\\x92\\x1f\\x0b\\x06\"\n\"\\xad\\xf7\\x42\\x05\\x22\\x06\\x69\\xfb\\x42\\x05\\x0b\\xf9\\x35\\xa4\\x0a\\x0b\\xda\\x69\\x1e\\x7d\\xad\\xa6\\x87\\xd0\\x1b\\xf7\\xac\\x0b\\xfb\\x20\\xfb\\x5c\"\n\"\\xfb\\x57\\xf7\\x5c\\xfb\\x20\\x06\\x0b\\x3a\\x1d\\x06\\x0e\\xcb\\xba\\x1d\\x0b\\x15\\xfb\\x12\\x06\\x45\\xfb\\x27\\x05\\xd1\\x06\\x0b\\x1e\\xba\\x07\\x88\\x78\"\n\"\\x78\\x89\\x77\\x1b\\x57\\x0b\\x9c\\xa1\\xa6\\x08\\xb5\\xbe\\xa1\\xd0\\xdc\\x1a\\x0b\\xfc\\xb0\\xf7\\x20\\xf7\\xd8\\x07\\xcb\\xb7\\xb5\\x0b\\xf7\\x27\\x15\\xbb\"\n\"\\xfb\\x27\\x05\\xf7\\x2e\\x06\\x0b\\xf7\\x6d\\xf7\\xdf\\x15\\xf7\\xb5\\xfb\\xdf\\x0b\\x15\\x41\\x06\\x55\\xfb\\x94\\x05\\xc4\\x06\\x0b\\x57\\x1f\\xfb\\xbb\\xf7\"\n\"\\x20\\xf7\\xdb\\x07\\x0b\\xf7\\x62\\x15\\x63\\x87\\x77\\x7c\\x5b\\x1b\\x0b\\x7f\\x7b\\x76\\x1b\\x84\\x77\\x8e\\x8e\\x0b\\x15\\xfb\\x0f\\xf7\\x10\\xf7\\x0f\\x07\"\n\"\\x0b\\xf7\\x07\\xf7\\xe5\\x05\\xfb\\x2c\\x06\\x0b\\xaa\\xaa\\xc5\\x99\\x1f\\x9b\\xcb\\x90\\x0b\\xf7\\x20\\xf8\\x3f\\xf7\\x52\\xf7\\x05\\x0b\\x06\\x45\\xfb\\x50\"\n\"\\x05\\x0b\\x15\\xde\\x94\\xae\\xb3\\x0b\", 34024\n};\n"
  },
  {
    "path": "src/fonts/NimbusSans-BoldItalic.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusSans_BoldItalic_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x16\\x4e\\x69\\x6d\\x62\\x75\\x73\\x53\\x61\\x6e\\x73\\x2d\\x42\\x6f\\x6c\\x64\\x49\\x74\\x61\\x6c\\x69\\x63\\x00\\x01\"\n\"\\x01\\x01\\x37\\xf9\\xbc\\x00\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xc0\\x03\\xf8\\x14\\x04\\x7f\\x0c\\x02\\xfb\\x03\\x0c\\x03\\xd0\\x0c\\x04\"\n\"\\xfb\\x0e\\xfb\\xc9\\x1c\\x04\\xac\\xfa\\xc5\\x05\\x1c\\x25\\xfe\\x0f\\x1c\\x26\\x11\\x11\\xb2\\x1d\\x00\\x00\\x8c\\x28\\x12\\x01\\xa6\\x02\\x00\\x01\\x00\\x08\"\n\"\\x00\\x0e\\x00\\x13\\x00\\x1d\\x00\\x24\\x00\\x2b\\x00\\x35\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x74\"\n\"\\x00\\x7a\\x00\\x84\\x00\\x8b\\x00\\x8e\\x00\\x95\\x00\\x9c\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\\x00\\xcd\\x00\\xd9\\x00\\xe3\\x00\\xe7\"\n\"\\x00\\xf2\\x00\\xf4\\x00\\xfa\\x01\\x04\\x01\\x0b\\x01\\x12\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\\x01\\x4d\\x01\\x53\\x01\\x59\\x01\\x5f\"\n\"\\x01\\x6b\\x01\\x6f\\x01\\x71\\x01\\x77\\x01\\x7d\\x01\\x89\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\\x01\\xc2\\x01\\xcd\\x01\\xd0\\x01\\xd2\"\n\"\\x01\\xd5\\x01\\xdb\\x01\\xe1\\x01\\xed\\x01\\xf0\\x01\\xf6\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\\x02\\x27\\x02\\x33\\x02\\x38\\x02\\x3e\"\n\"\\x02\\x4b\\x02\\x52\\x02\\x59\\x02\\x60\\x02\\x6f\\x02\\x7b\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\\x02\\xa8\\x02\\xb3\\x02\\xb9\\x02\\xbf\"\n\"\\x02\\xc9\\x02\\xcd\\x02\\xd3\\x02\\xda\\x02\\xe3\\x02\\xec\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\\x03\\x2b\\x03\\x34\\x03\\x3d\\x03\\x46\"\n\"\\x03\\x4f\\x03\\x58\\x03\\x61\\x03\\x6a\\x03\\x73\\x03\\x7c\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\\x03\\xbb\\x03\\xc4\\x03\\xcd\\x03\\xd6\"\n\"\\x03\\xdf\\x03\\xe8\\x03\\xf1\\x03\\xfa\\x04\\x03\\x04\\x0c\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\\x04\\x4b\\x04\\x54\\x04\\x5d\\x04\\x66\"\n\"\\x04\\x6f\\x04\\x78\\x04\\x81\\x04\\x8a\\x04\\x93\\x04\\x9c\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\\xed\\x04\\xf6\"\n\"\\x04\\xff\\x05\\x08\\x05\\x11\\x05\\x1a\\x05\\x23\\x05\\x2c\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\\x05\\x6b\\x05\\x74\\x05\\x7d\\x05\\x86\"\n\"\\x05\\x8f\\x05\\x98\\x05\\xa1\\x05\\xaa\\x05\\xb3\\x05\\xbc\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\\x05\\xfb\\x06\\x04\\x06\\x0d\\x06\\x16\"\n\"\\x06\\x1f\\x06\\x28\\x06\\x31\\x06\\x3a\\x06\\x43\\x06\\x4c\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\\x06\\x85\\x06\\x90\\x06\\x9a\\x06\\xa3\"\n\"\\x06\\xac\\x06\\xb5\\x06\\xbf\\x06\\xc6\\x06\\xcf\\x06\\xdb\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\\x07\\x11\\x07\\x15\\x07\\x1b\\x07\\x21\"\n\"\\x07\\x26\\x07\\x2d\\x07\\x3a\\x07\\x40\\x07\\x46\\x07\\x50\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\\x07\\x86\\x07\\x8f\\x07\\x92\\x07\\x9a\"\n\"\\x07\\xa3\\x07\\xae\\x07\\xb4\\x07\\xb9\\x07\\xbe\\x07\\xc4\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\\x08\\x05\\x08\\x0a\\x08\\x10\\x08\\x12\"\n\"\\x08\\x19\\x08\\x21\\x08\\x29\\x08\\x33\\x08\\x3d\\x08\\x49\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\\x08\\x8c\\x08\\x97\\x08\\x9c\\x08\\xa8\"\n\"\\x08\\xb4\\x08\\xba\\x08\\xc0\\x08\\xc6\\x08\\xd2\\x08\\xd6\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\\x09\\x0b\\x09\\x11\\x09\\x1c\\x09\\x22\"\n\"\\x09\\x2e\\x09\\x38\\x09\\x40\\x09\\x42\\x09\\x48\\x09\\x55\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\\x09\\x93\\x09\\x9e\\x09\\xa4\\x09\\xa7\"\n\"\\x09\\xa9\\x09\\xb0\\x09\\xbc\\x09\\xca\\x09\\xcd\\x09\\xda\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\\x0a\\x0f\\x0a\\x17\\x0a\\x22\\x0a\\x2e\"\n\"\\x0a\\x34\\x0a\\x39\\x0a\\x42\\x0a\\x47\\x0a\\x50\\x0a\\x53\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\\x0a\\x7c\\x0a\\x89\\x0a\\x90\\x0a\\x9d\"\n\"\\x0a\\xa4\\x0a\\xab\\x0a\\xb2\\x0a\\xb9\\x0a\\xc0\\x0a\\xc7\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\\x0a\\xf8\\x0a\\xff\\x0b\\x06\\x0b\\x0d\"\n\"\\x0b\\x14\\x0b\\x1b\\x0b\\x22\\x0b\\x29\\x0b\\x30\\x0b\\x37\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\\x0b\\x68\\x0b\\x6f\\x0b\\x76\\x0b\\x7d\"\n\"\\x0b\\x84\\x0b\\x8b\\x0b\\x92\\x0b\\x99\\x0b\\xa0\\x0b\\xa7\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\\x0b\\xd8\\x0b\\xdf\\x0b\\xe6\\x0b\\xed\"\n\"\\x0b\\xf4\\x0b\\xfb\\x0c\\x02\\x0c\\x09\\x0c\\x10\\x0c\\x17\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\\x0c\\x48\\x0c\\x4d\\x0c\\x56\\x0c\\x5d\"\n\"\\x0c\\x64\\x0c\\x73\\x0c\\x87\\x0c\\x93\\x0c\\x98\\x0c\\x9e\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\\x0c\\xd1\\x0c\\xd7\\x0c\\xe1\\x0c\\xe5\"\n\"\\x0c\\xe9\\x0d\\x1f\\x0d\\x5f\\x0d\\x76\\x0d\\x81\\x41\\x45\\x61\\x63\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\\x6c\\x70\\x68\\x61\\x41\\x6c\\x70\\x68\"\n\"\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x41\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x41\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x42\\x65\"\n\"\\x74\\x61\\x43\\x61\\x63\\x75\\x74\\x65\\x43\\x63\\x61\\x72\\x6f\\x6e\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x43\\x64\\x6f\\x74\\x61\\x63\\x63\"\n\"\\x65\\x6e\\x74\\x43\\x68\\x69\\x44\\x63\\x61\\x72\\x6f\\x6e\\x44\\x63\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\\x62\\x72\\x65\\x76\\x65\\x45\\x63\\x61\"\n\"\\x72\\x6f\\x6e\\x45\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x45\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x45\\x70\"\n\"\\x73\\x69\\x6c\\x6f\\x6e\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x75\\x72\\x6f\"\n\"\\x47\\x61\\x6d\\x6d\\x61\\x47\\x62\\x72\\x65\\x76\\x65\\x47\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\"\n\"\\x6e\\x74\\x47\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x48\\x62\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x49\\x4a\\x49\\x62\\x72\"\n\"\\x65\\x76\\x65\\x49\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x49\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x49\\x6f\\x74\\x61\\x49\"\n\"\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x49\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\\x64\\x65\\x4a\\x63\\x69\\x72\\x63\\x75\"\n\"\\x6d\\x66\\x6c\\x65\\x78\\x4b\\x61\\x70\\x70\\x61\\x4b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\\x63\\x75\\x74\\x65\\x4c\\x61\\x6d\\x62\"\n\"\\x64\\x61\\x4c\\x63\\x61\\x72\\x6f\\x6e\\x4c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\\x4d\\x75\\x4e\\x61\\x63\\x75\\x74\\x65\"\n\"\\x4e\\x63\\x61\\x72\\x6f\\x6e\\x4e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\\x76\\x65\\x4f\\x68\\x75\\x6e\\x67\\x61\"\n\"\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x4f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x4f\"\n\"\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\\x69\\x50\\x69\\x50\\x73\\x69\\x52\\x61\"\n\"\\x63\\x75\\x74\\x65\\x52\\x63\\x61\\x72\\x6f\\x6e\\x52\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\\x6f\\x53\\x61\\x63\\x75\\x74\\x65\\x53\"\n\"\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x53\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x53\\x69\"\n\"\\x67\\x6d\\x61\\x54\\x61\\x75\\x54\\x62\\x61\\x72\\x54\\x63\\x61\\x72\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x54\\x68\\x65\\x74\"\n\"\\x61\\x55\\x62\\x72\\x65\\x76\\x65\\x55\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x55\\x6f\\x67\\x6f\\x6e\"\n\"\\x65\\x6b\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\"\n\"\\x6f\\x6e\\x6f\\x73\\x55\\x72\\x69\\x6e\\x67\\x55\\x74\\x69\\x6c\\x64\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\"\n\"\\x57\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x57\\x67\\x72\\x61\\x76\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x59\\x67\\x72\\x61\"\n\"\\x76\\x65\\x5a\\x61\\x63\\x75\\x74\\x65\\x5a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\\x72\\x65\\x76\\x65\\x61\\x65\\x61\\x63\"\n\"\\x75\\x74\\x65\\x61\\x66\\x69\\x69\\x30\\x30\\x32\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x38\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x31\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x32\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x35\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x32\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\"\n\"\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x32\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x33\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x36\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x39\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x34\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x33\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x36\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x34\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x30\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x35\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x35\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x37\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x35\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\"\n\"\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x36\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x36\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x30\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x33\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x37\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x37\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x30\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x38\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x34\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x38\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x38\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x31\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x39\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\"\n\"\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x38\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x39\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x32\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x35\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x31\\x30\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x39\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x31\\x31\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x38\\x34\\x36\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x34\\x38\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\\x69\\x36\\x31\\x33\\x35\\x32\\x61\\x6c\"\n\"\\x70\\x68\\x61\\x61\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x61\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\\x61\\x6e\\x67\"\n\"\\x6c\\x65\\x72\\x69\\x67\\x68\\x74\\x61\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x69\\x6e\\x67\\x61\\x63\"\n\"\\x75\\x74\\x65\\x61\\x72\\x72\\x6f\\x77\\x62\\x6f\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\"\n\"\\x72\\x6f\\x77\\x72\\x69\\x67\\x68\\x74\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\"\n\"\\x6e\\x62\\x73\\x65\\x62\\x65\\x74\\x61\\x63\\x61\\x63\\x75\\x74\\x65\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x63\"\n\"\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x63\\x68\\x69\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\\x63\\x6c\\x75\\x62\\x64\\x63\"\n\"\\x61\\x72\\x6f\\x6e\\x64\\x63\\x72\\x6f\\x61\\x74\\x64\\x65\\x6c\\x74\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\"\n\"\\x6e\\x6f\\x73\\x65\\x62\\x72\\x65\\x76\\x65\\x65\\x63\\x61\\x72\\x6f\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\"\n\"\\x65\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x65\\x6e\\x67\\x65\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\"\n\"\\x6f\\x6e\\x6f\\x73\\x65\\x71\\x75\\x69\\x76\\x61\\x6c\\x65\\x6e\\x63\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\\x65\\x74\\x61\\x65\\x74\\x61\\x74\\x6f\"\n\"\\x6e\\x6f\\x73\\x65\\x78\\x63\\x6c\\x61\\x6d\\x64\\x62\\x6c\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\\x65\\x6d\\x61\\x6c\\x65\\x66\\x72\\x61\"\n\"\\x6e\\x63\\x67\\x61\\x6d\\x6d\\x61\\x67\\x62\\x72\\x65\\x76\\x65\\x67\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x67\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\"\n\"\\x63\\x65\\x6e\\x74\\x67\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x68\\x62\\x61\\x72\\x68\\x63\"\n\"\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x68\\x65\\x61\\x72\\x74\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\\x65\\x69\\x6a\\x69\\x6d\\x61\\x63\\x72\"\n\"\\x6f\\x6e\\x69\\x6e\\x66\\x69\\x6e\\x69\\x74\\x79\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x69\\x6e\\x74\\x65\"\n\"\\x67\\x72\\x61\\x6c\\x74\\x70\\x69\\x6e\\x74\\x65\\x72\\x73\\x65\\x63\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x69\\x6f\"\n\"\\x67\\x6f\\x6e\\x65\\x6b\\x69\\x6f\\x74\\x61\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\"\n\"\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\"\n\"\\x6b\\x61\\x70\\x70\\x61\\x6b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\\x61\\x6e\\x64\\x69\\x63\\x6c\\x61\\x63\"\n\"\\x75\\x74\\x65\\x6c\\x61\\x6d\\x62\\x64\\x61\\x6c\\x63\\x61\\x72\\x6f\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6c\\x64\\x6f\\x74\\x6c\"\n\"\\x65\\x73\\x73\\x65\\x71\\x75\\x61\\x6c\\x6c\\x69\\x72\\x61\\x6c\\x6f\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\"\n\"\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\\x74\\x65\\x6e\\x61\\x70\\x6f\\x73\\x74\"\n\"\\x72\\x6f\\x70\\x68\\x65\\x6e\\x63\\x61\\x72\\x6f\\x6e\\x6e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\"\n\"\\x74\\x6e\\x6f\\x74\\x65\\x71\\x75\\x61\\x6c\\x6e\\x75\\x6f\\x62\\x72\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x6f\\x6d\"\n\"\\x61\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x65\\x67\\x61\\x6f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x69\\x63\\x72\"\n\"\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x72\\x74\\x68\\x6f\\x67\\x6f\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x70\\x61\\x72\\x74\"\n\"\\x69\\x61\\x6c\\x64\\x69\\x66\\x66\\x70\\x65\\x73\\x65\\x74\\x61\\x70\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\"\n\"\\x75\\x62\\x73\\x65\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\\x6f\\x74\\x65\\x72\\x65\\x76\\x65\\x72\"\n\"\\x73\\x65\\x64\\x72\\x61\\x63\\x75\\x74\\x65\\x72\\x61\\x64\\x69\\x63\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\"\n\"\\x6e\\x74\\x72\\x65\\x76\\x6c\\x6f\\x67\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\\x73\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\"\n\"\\x73\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x73\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\\x65\\x63\\x6f\\x6e\\x64\\x73\\x69\\x67\"\n\"\\x6d\\x61\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x73\\x70\\x61\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x73\\x75\\x6e\\x74\\x61\\x75\\x74\"\n\"\\x62\\x61\\x72\\x74\\x63\\x61\\x72\\x6f\\x6e\\x74\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x75\"\n\"\\x62\\x72\\x65\\x76\\x65\\x75\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x75\\x6e\\x64\\x65\\x72\\x73\\x63\"\n\"\\x6f\\x72\\x65\\x64\\x62\\x6c\\x75\\x6e\\x69\\x30\\x30\\x41\\x30\\x75\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\\x32\\x31\\x41\\x75\\x6e\\x69\\x30\\x32\"\n\"\\x31\\x42\\x75\\x6e\\x69\\x30\\x32\\x43\\x39\\x75\\x6e\\x69\\x30\\x33\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\\x6e\\x69\\x30\\x33\\x41\\x39\\x75\\x6e\"\n\"\\x69\\x30\\x33\\x42\\x43\\x75\\x6e\\x69\\x30\\x33\\x43\\x32\\x75\\x6e\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\\x30\\x44\\x75\\x6e\\x69\\x30\\x34\\x35\"\n\"\\x30\\x75\\x6e\\x69\\x30\\x34\\x35\\x44\\x75\\x6e\\x69\\x30\\x34\\x39\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\\x69\\x30\\x34\\x39\\x36\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x39\\x37\\x75\\x6e\\x69\\x30\\x34\\x39\\x38\\x75\\x6e\\x69\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\\x41\\x75\\x6e\\x69\\x30\\x34\\x39\\x42\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x39\\x43\\x75\\x6e\\x69\\x30\\x34\\x39\\x44\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\\x30\\x34\\x41\\x31\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x41\\x32\\x75\\x6e\\x69\\x30\\x34\\x41\\x33\\x75\\x6e\\x69\\x30\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\\x75\\x6e\\x69\\x30\\x34\\x41\\x45\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x41\\x46\\x75\\x6e\\x69\\x30\\x34\\x42\\x30\\x75\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\\x34\\x42\\x32\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x42\\x33\\x75\\x6e\\x69\\x30\\x34\\x42\\x36\\x75\\x6e\\x69\\x30\\x34\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\\x6e\\x69\\x30\\x34\\x42\\x39\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x42\\x41\\x75\\x6e\\x69\\x30\\x34\\x42\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\\x43\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\"\n\"\\x43\\x75\\x6e\\x69\\x30\\x34\\x44\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\\x69\\x30\\x34\\x45\\x38\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x45\\x39\\x75\\x6e\\x69\\x30\\x34\\x45\\x45\\x75\\x6e\\x69\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\\x45\\x75\\x6e\\x69\\x32\\x30\\x41\\x46\"\n\"\\x75\\x6e\\x69\\x32\\x31\\x32\\x36\\x75\\x6e\\x69\\x32\\x32\\x31\\x35\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\\x32\\x32\\x32\\x37\\x75\\x6e\\x69\\x32\"\n\"\\x32\\x32\\x38\\x75\\x6e\\x69\\x32\\x32\\x39\\x35\\x75\\x6e\\x69\\x32\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x75\"\n\"\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x75\\x70\\x73\\x69\"\n\"\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x72\\x69\\x6e\"\n\"\\x67\\x75\\x74\\x69\\x6c\\x64\\x65\\x77\\x61\\x63\\x75\\x74\\x65\\x77\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x77\\x64\\x69\\x65\\x72\\x65\\x73\\x69\"\n\"\\x73\\x77\\x67\\x72\\x61\\x76\\x65\\x78\\x69\\x79\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\\x76\\x65\\x7a\\x61\\x63\\x75\\x74\\x65\"\n\"\\x7a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x7a\\x65\\x74\\x61\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\"\n\"\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\"\n\"\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\"\n\"\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\"\n\"\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x53\\x61\\x6e\\x73\\x20\\x42\\x6f\\x6c\\x64\\x20\\x49\\x74\\x61\\x6c\\x69\\x63\\x4e\"\n\"\\x69\\x6d\\x62\\x75\\x73\\x20\\x53\\x61\\x6e\\x73\\x00\\xce\\x02\\x00\\x01\\x00\\x06\\x00\\x0c\\x00\\x10\\x00\\x15\\x00\\x1b\\x00\\x21\\x00\\x2f\\x00\\x3b\\x00\"\n\"\\x42\\x00\\x45\\x00\\x4a\\x00\\x55\\x00\\x5c\\x00\\x62\\x00\\x6f\\x00\\x7f\\x00\\x84\\x00\\x8a\\x00\\x94\\x00\\x99\\x00\\xb5\\x00\\xe6\\x01\\x06\\x01\\x12\\x01\"\n\"\\x15\\x01\\x35\\x01\\x49\\x01\\x4f\\x01\\x59\\x01\\x66\\x01\\xe7\\x01\\xea\\x02\\x34\\x02\\x44\\x02\\x86\\x02\\xa7\\x02\\xce\\x02\\xd3\\x02\\xe7\\x02\\xec\\x03\"\n\"\\x02\\x03\\x0e\\x03\\x1d\\x03\\x26\\x03\\x2b\\x03\\x36\\x03\\x3c\\x03\\x50\\x03\\x84\\x03\\xa5\\x03\\xcc\\x03\\xd4\\x03\\xf0\\x03\\xff\\x04\\x15\\x04\\x2a\\x04\"\n\"\\x3d\\x04\\x5f\\x04\\x6b\\x04\\x7c\\x04\\x80\\x04\\x87\\x04\\x94\\x04\\x9f\\x04\\xa6\\x04\\xb2\\x04\\xbe\\x04\\xca\\x04\\xde\\x04\\xeb\\x04\\xf3\\x04\\xfd\\x05\"\n\"\\x06\\x05\\x0f\\x05\\x16\\x05\\x24\\x05\\x2c\\x05\\x37\\x05\\xe5\\x06\\x5d\\x06\\xdd\\x07\\x5a\\x07\\x61\\x07\\xda\\x08\\x29\\x08\\x4c\\x08\\x56\\x08\\x6b\\x08\"\n\"\\xcf\\x08\\xff\\x09\\x24\\x09\\x49\\x09\\x4e\\x09\\xa3\\x09\\xc2\\x0a\\x15\\x0a\\x67\\x0a\\xb0\\x0a\\xf0\\x0b\\x1b\\x0b\\x48\\x0b\\x5e\\x0b\\x91\\x0b\\x97\\x0b\"\n\"\\xa4\\x0b\\xd2\\x0c\\x0b\\x0c\\x41\\x0c\\x73\\x0c\\x8b\\x0c\\xaf\\x0c\\xdf\\x0c\\xe6\\x0d\\x15\\x0d\\x2e\\x0d\\x5b\\x0d\\x87\\x0d\\xb2\\x0d\\xdc\\x0e\\x04\\x0e\"\n\"\\x28\\x0e\\x41\\x0e\\x61\\x0e\\x81\\x0e\\xa2\\x0e\\xaf\\x0e\\xce\\x0e\\xd8\\x0e\\xf6\\x0e\\xf9\\x0f\\x16\\x0f\\x1a\\x0f\\x2a\\x0f\\x3a\\x0f\\x54\\x0f\\x64\\x0f\"\n\"\\x68\\x0f\\x6f\\x0f\\x76\\x0f\\x90\\x0f\\x95\\x0f\\xae\\x0f\\xc7\\x0f\\xd2\\x0f\\xea\\x0f\\xee\\x0f\\xfc\\x10\\x13\\x10\\x29\\x10\\x3f\\x10\\x53\\x10\\x68\\x10\"\n\"\\x71\\x10\\x86\\x10\\x9b\\x10\\xae\\x10\\xb2\\x10\\xc6\\x10\\xd9\\x10\\xec\\x10\\xfe\\x11\\x10\\x11\\x14\\x11\\x24\\x11\\x35\\x11\\x46\\x11\\x57\\x11\\x67\\x11\"\n\"\\x77\\x11\\x87\\x11\\x97\\x11\\xa4\\x11\\xb4\\x11\\xc2\\x11\\xcc\\x11\\xd8\\x11\\xe7\\x11\\xf6\\x11\\xff\\x12\\x0d\\x12\\x1b\\x12\\x27\\x12\\x33\\x12\\x3f\\x12\"\n\"\\x4c\\x12\\x56\\x12\\x63\\x12\\x68\\x12\\x70\\x12\\x7c\\x12\\x88\\x12\\x94\\x12\\xa0\\x12\\xac\\x12\\xb8\\x12\\xc4\\x12\\xd0\\x12\\xdc\\x12\\xe8\\x12\\xf2\\x12\"\n\"\\xfd\\x13\\x08\\x13\\x13\\x13\\x1e\\x13\\x29\\x13\\x34\\x05\\xf7\\x20\\x06\\x0b\\x06\\xa6\\xf7\\x11\\x05\\x0b\\xf9\\x6d\\x15\\x0b\\x15\\xfb\\x20\\x06\\x0b\\x06\"\n\"\\x70\\xfb\\x11\\x05\\x0b\\x06\\xa5\\xf7\\x11\\x05\\x0b\\x15\\x25\\x06\\x76\\x27\\x94\\x28\\x05\\xb2\\x06\\xc1\\xee\\x05\\x0e\\x15\\xfb\\x2a\\x06\\x6c\\xfb\\x26\"\n\"\\x05\\xf7\\x2a\\x06\\x0b\\x06\\xfb\\x2f\\xfd\\x6d\\x05\\x0b\\x46\\x1d\\x0e\\xf7\\xd6\\xaa\\x1d\\x0b\\x15\\xfb\\x13\\x06\\x26\\xfb\\x2a\\x05\\xd1\\x06\\x0e\\xfb\"\n\"\\x07\\xfc\\xb0\\x20\\x1d\\x0b\\xf8\\xa3\\x9c\\x6f\\x1d\\x0b\\x15\\x51\\xe5\\x1d\\xb4\\x6d\\xa9\\x61\\x1f\\x81\\xbd\\x1d\\x0b\\xcf\\xf7\\x01\\xd9\\xa7\\xe3\\xb7\"\n\"\\xc8\\x1f\\xcf\\xbd\\xcc\\xaf\\xd8\\x1b\\x0b\\xf9\\x89\\x4d\\x1d\\x0b\\x06\\x72\\xfb\\x0c\\x05\\x0b\\x05\\xf7\\x2a\\x06\\xf7\\x2f\\xf9\\x6d\\x05\\x0b\\x06\\x77\"\n\"\\x2e\\x05\\x0b\\xf7\\x46\\xf8\\xb0\\x15\\xfb\\x07\\xfc\\xb0\\x05\\x58\\x1d\\x89\\x7f\\x87\\x74\\x1f\\x48\\xfb\\xcd\\x20\\x1d\\xd8\\xf7\\xfe\\xb7\\x1d\\x0b\\xf9\"\n\"\\x6e\\x16\\xf7\\xf9\\xf9\\x6d\\x05\\xfb\\x33\\x06\\xfb\\x75\\xfc\\xb8\\x8e\\xf8\\xb8\\x05\\xfb\\x32\\x06\\xfb\\x74\\xfc\\xb6\\x8e\\xf8\\xb6\\x05\\xfb\\x33\\x06\"\n\"\\xbe\\xfd\\x6d\\x05\\xf7\\x1b\\x06\\xf7\\x81\\xf8\\xbf\\x8f\\xfc\\xbf\\x05\\x0b\\xf9\\x71\\x22\\x1d\\xfc\\xb8\\x24\\x1d\\xf8\\x09\\x06\\xfc\\x6e\\xfc\\x73\\x70\"\n\"\\xfb\\x11\\x05\\xf8\\xb8\\x21\\x1d\\xfc\\x09\\x06\\xf8\\x6e\\xf8\\x73\\x05\\x0b\\xf8\\x15\\x60\\x1d\\xf8\\x87\\x21\\x1d\\xfb\\xf1\\x06\\x0b\\x55\\x1d\\x0e\\x5c\"\n\"\\xfb\\x12\\xfb\\x07\\x1a\\xfb\\x43\\xf7\\x03\\xfb\\x01\\xf7\\x46\\xf7\\x15\\xea\\xb8\\xf1\\xe1\\x1e\\xd9\\xe6\\xb8\\xf7\\x0e\\xf7\\x0a\\x1a\\xf7\\x49\\x0b\\x15\"\n\"\\xf7\\x1f\\xf7\\x27\\x05\\x3f\\x06\\x24\\x2a\\x4e\\xec\\x05\\x3d\\x06\\xd2\\xfb\\x27\\x05\\x0e\\x06\\xb3\\xf7\\x50\\x05\\x0b\\x06\\xf7\\x14\\xf8\\xf0\\x05\\xfb\"\n\"\\x2a\\x06\\x0b\\xfb\\x14\\x15\\xef\\xc7\\x49\\xfb\\x02\\x3c\\x70\\x33\\x60\\x0b\\xf7\\xb7\\xf7\\xb5\\x15\\xf7\\x40\\x06\\xc4\\xa7\\x79\\x66\\x7f\\x89\\x7f\\x81\"\n\"\\x66\\x1f\\x78\\x47\\x84\\x65\\x71\\x1a\\x7e\\x8d\\x81\\x91\\x79\\x1e\\xf7\\x33\\x06\\x91\\xa6\\x05\\x7e\\x95\\x86\\x95\\x99\\x1a\\x92\\x8c\\x94\\x8d\\x95\\x1e\"\n\"\\xa2\\xf7\\x0f\\x90\\xae\\xa4\\x1a\\xb1\\x71\\xa6\\x57\\x9c\\x1e\\xc0\\xa5\\xa5\\x9c\\xa3\\xa4\\x08\\xb2\\xb3\\xa4\\xca\\xc3\\x1a\\xb1\\x7b\\xb2\\x70\\xa6\\x1e\"\n\"\\xab\\x6b\\x63\\x99\\x51\\x1b\\xfc\\x0d\\x28\\x1d\\xf7\\x2a\\x06\\xe3\\xf8\\x32\\x15\\xb3\\xf7\\x52\\x05\\xf7\\x3c\\x06\\xb9\\xa2\\x85\\x7c\\x9e\\x1f\\x99\\x7e\"\n\"\\x93\\x7a\\x78\\x1a\\x6f\\x80\\x6c\\x78\\x77\\x1e\\x6e\\x71\\x6c\\x7f\\x59\\x1b\\x0b\\x6f\\x1d\\x0e\\xf7\\xc9\\xf8\\xb0\\x23\\x1d\\x48\\xfb\\xcf\\x05\\x82\\x62\"\n\"\\x86\\x65\\x75\\x1a\\x6f\\x96\\x6d\\x9e\\x75\\x1e\\x5d\\xb1\\xc6\\x76\\xe3\\x1b\\xe3\\xd0\\xa0\\xb4\\xb7\\x1f\\xb1\\xad\\x9f\\xb9\\x9f\\xe8\\xd1\\xf7\\xdc\\x18\"\n\"\\xfb\\x20\\x06\\x46\\xfb\\xd6\\x80\\x54\\x81\\x75\\x74\\x76\\x19\\x78\\x75\\x6c\\x80\\x6c\\x1b\\x59\\x6a\\xa6\\xb3\\x96\\x8f\\xa4\\x90\\xa4\\x1f\\x0b\\x59\\x1d\"\n\"\\x68\\x87\\x6d\\x75\\x1a\\xfb\\x09\\xea\\x41\\xf7\\x2c\\x5b\\x1d\\x0e\\xc7\\x1d\\x52\\xa3\\x41\\x1b\\x3d\\x3b\\x6c\\x5a\\x5c\\x1f\\x4b\\x48\\x5d\\xfb\\x09\\x27\"\n\"\\x1a\\xfb\\x10\\xe0\\x37\\xf7\\x12\\xf7\\x0d\\xf0\\xca\\xf7\\x04\\xc2\\x1e\\xfb\\x1e\\x06\\x65\\x78\\x5e\\x72\\x5b\\x1b\\x52\\x65\\xb0\\xc2\\x95\\x8c\\x95\\x8d\"\n\"\\xa4\\x1f\\x9d\\xe8\\x15\\xd9\\xa0\\xb9\\xb3\\xcd\\x6d\\x1d\\x89\\x68\\x1a\\x0e\\xcc\\x16\\xf7\\x2a\\x06\\x9e\\xe4\\xf8\\x01\\xf7\\xfa\\x2c\\xfc\\x53\\x32\\x1d\"\n\"\\xfb\\x2a\\x06\\x78\\x30\\xfc\\x02\\xfb\\xfc\\xeb\\xf8\\x57\\x05\\xfb\\x2a\\x06\\x0b\\xf8\\xd3\\xf8\\xb0\\x15\\xfc\\x39\\x06\\x73\\xfb\\x05\\x05\\xf7\\x8d\\x06\"\n\"\\xfb\\xe2\\xfb\\xce\\x73\\xfb\\x05\\x05\\xf8\\x54\\x06\\xa3\\xf7\\x05\\x05\\xfb\\xa6\\x06\\xf7\\xe0\\xf7\\xce\\x05\\x0b\\xfa\\x2c\\x55\\x1d\\x0b\\x15\\xfb\\x1f\"\n\"\\xfb\\x27\\x05\\xd7\\x06\\xf2\\xec\\xc8\\x2a\\x05\\xd9\\x06\\x44\\xf7\\x27\\x05\\x0b\\xf7\\xfe\\xce\\x1d\\x0b\\x8c\\x8e\\x87\\x1f\\x73\\xfb\\x03\\x05\\x87\\x99\"\n\"\\x97\\x8a\\x9e\\x1b\\xf7\\x06\\xc3\\xb0\\xe2\\x9d\\x1f\\x0b\\x15\\xfb\\x02\\x06\\x71\\xfb\\x0e\\x05\\xf7\\x02\\x06\\x0e\\x1b\\xac\\xad\\x9a\\xa5\\xa4\\x1f\\x9e\"\n\"\\x9f\\x96\\xa0\\x96\\xb3\\x08\\x0e\\x15\\xfb\\x02\\x06\\x71\\xfb\\x0c\\x05\\x0b\\xf9\\x89\\x61\\x1d\\x0b\\x15\\xfb\\x12\\x06\\x25\\xfb\\x2a\\x05\\xd1\\x06\\x0b\"\n\"\\x06\\x73\\xfb\\x04\\x05\\x0b\\xf9\\x27\\xf9\\x6d\\x59\\x1d\\x69\\x87\\x6c\\x74\\x1a\\xfb\\x08\\xeb\\x41\\xf7\\x2b\\x5b\\x1d\\x0b\\xf8\\x91\\xf8\\xb0\\x15\\xfb\"\n\"\\x57\\xfc\\x1d\\x67\\xf8\\x1d\\x05\\xfb\\x2e\\x06\\xd7\\xfc\\xb0\\x8c\\x7c\\x05\\x52\\x5f\\x67\\x46\\x7f\\x86\\x8b\\x8d\\x80\\x1e\\x74\\xfb\\x01\\x05\\x88\\x98\"\n\"\\x96\\x8a\\x9f\\x1b\\xb8\\xb0\\x91\\x96\\xaa\\x1f\\xb6\\xec\\x1d\\x0b\\x15\\xfb\\x10\\x26\\x5b\\x29\\x39\\x1f\\x3d\\x2e\\x39\\x1d\\x21\\xf4\\xfb\\x4c\\x1e\\x78\"\n\"\\x3d\\x1d\\x4f\\x1f\\x44\\x59\\x4c\\x69\\x3e\\x1b\\x25\\x4d\\x2f\\x1d\\x0b\\x15\\x2a\\x06\\x71\\xfb\\x0e\\x05\\xec\\x06\\xf7\\x75\\xf7\\x0e\\x15\\x2a\\x06\\x71\"\n\"\\xfb\\x0e\\x05\\xec\\x06\\x63\\xf7\\xa0\\x15\\x25\\x06\\x78\\x31\\x94\\x28\\x05\\xb2\\x06\\xc1\\xee\\x05\\x0e\\x15\\x60\\x7a\\x68\\x75\\x58\\xa7\\x1d\\x15\\xc9\"\n\"\\xb1\\x5e\\x43\\x5a\\x7d\\x56\\x73\\x61\\x1f\\x53\\x6c\\x5d\\x6c\\x57\\x1b\\x4f\\x64\\xb8\\xd2\\xf7\\x13\\xd6\\xf4\\xe6\\x1f\\x0b\\x4b\\x1d\\xf7\\x02\\x06\\xf7\"\n\"\\x68\\xf7\\x0c\\x4b\\x1d\\xf7\\x02\\x06\\x0b\\x75\\x92\\xa2\\x5b\\x1f\\x6d\\x58\\x05\\x75\\xc4\\xaa\\x84\\xb8\\x1b\\xe6\\xc6\\xb5\\xcc\\xaf\\x73\\xa0\\x0b\\xcc\"\n\"\\x1d\\xc5\\xa3\\xbb\\xdc\\x1d\\xac\\xa4\\x7f\\x76\\x98\\x1f\\x93\\x7c\\x8d\\x7f\\x8c\\x64\\x08\\x0b\\xf7\\x20\\x06\\xcc\\xf7\\xc4\\x05\\xde\\x9c\\xbf\\xbd\\xcf\"\n\"\\x1b\\xbb\\xa5\\x71\\x5a\\x7d\\x0b\\x15\\x22\\xfc\\x82\\x05\\x31\\x78\\x59\\x63\\x2f\\x1b\\x3e\\x5e\\xaa\\xc1\\x9a\\x8d\\x99\\x8e\\x9b\\x1f\\xf4\\xf8\\x82\\x05\"\n\"\\xfb\\x2a\\x06\\x26\\xfc\\x6e\\x05\\x84\\x0b\\xf7\\x68\\x21\\x1d\\xfc\\xdc\\x24\\x1d\\xf7\\x72\\x06\\x0b\\xe3\\xdd\\xa5\\xbb\\xc8\\x1e\\xc4\\xb8\\xab\\xc3\\x9d\"\n\"\\xde\\xf4\\xf8\\x82\\x18\\x0b\\x1a\\x4d\\xe7\\x1d\\x05\\xfb\\x20\\x06\\x2c\\x1d\\x0b\\x15\\x8f\\x9d\\x8c\\x93\\x97\\x1a\\xe6\\x3f\\xc1\\xfb\\x12\\x0b\\x68\\xb8\"\n\"\\xcf\\xf7\\x12\\xd5\\xf7\\x01\\xe1\\x1f\\x0e\\x22\\x1d\\xfb\\x2a\\x28\\x1d\\x0b\\x15\\xf0\\xfb\\x2a\\x05\\xca\\x06\\x5e\\xf7\\x2a\\x05\\x0b\\x94\\x8a\\x88\\x9d\"\n\"\\x1f\\xa9\\xf7\\x22\\x05\\x8c\\x83\\x0b\\xf7\\x20\\x06\\xf7\\x07\\xf8\\xb0\\x05\\xfb\\x20\\x06\\x0b\\xfb\\x20\\x06\\x47\\xfb\\xd2\\x05\\x3a\\x7a\\x57\\x57\\x4a\"\n\"\\x1b\\x58\\x72\\xa4\\xbd\\x9a\\x8c\\x0b\\xf7\\x46\\xf8\\xb0\\x15\\x2c\\x1d\\xc8\\xf7\\xb3\\x05\\xdd\\x0b\\xf7\\x29\\x06\\xd1\\xf7\\xdf\\x05\\x0b\\xeb\\xe2\\xe0\"\n\"\\xe9\\xcf\\x57\\xbc\\x43\\x1f\\x0b\\x83\\x81\\x5d\\x18\\xd7\\x91\\xce\\xce\\x0b\\x97\\xb8\\x91\\xb5\\xb1\\x1a\\xb9\\x7a\\x0b\\x06\\xfb\\x15\\xfc\\xf0\\x05\\x0b\"\n\"\\x8e\\xa3\\x8c\\x94\\x95\\x1a\\xb5\\x7a\\xb3\\x6c\\xaa\\x1e\\xb1\\x0b\\xf7\\x20\\x06\\xe6\\xf8\\x40\\x05\\x0b\\x1b\\xba\\xac\\x6f\\x60\\x90\\x1f\\x8d\\x81\\x8b\"\n\"\\x0b\\xf9\\x82\\xdd\\x1d\\xad\\xbf\\x99\\x8c\\x96\\x91\\xa5\\x1f\\xf7\\xfe\\x06\\x69\\x1d\\xbb\\x6f\\xae\\x1e\\xb8\\x67\\x52\\xa3\\x44\\x1b\\x4f\\x50\\x7a\\x6b\"\n\"\\x5d\\x1f\\xad\\x6a\\x59\\x9a\\x3d\\x1b\\x31\\x45\\x76\\x63\\x5e\\x1f\\x6a\\x6e\\x7a\\x69\\x7e\\x4c\\x08\\xf7\\x17\\x06\\xc2\\x9c\\xaa\\x9f\\xcc\\x1b\\xbd\\xa1\"\n\"\\x7e\\x6d\\x76\\x7d\\x75\\x77\\x81\\x1f\\x76\\x80\\x8b\\x8b\\x43\\x81\\x52\\x82\\x18\\x5b\\x83\\x66\\x7d\\x6b\\x74\\x08\\x56\\x65\\x6b\\x4f\\x4d\\x1a\\x3a\\xc5\"\n\"\\x5b\\xec\\xe8\\xc0\\xa4\\xd6\\xd1\\x1e\\x4b\\xa7\\xcc\\x67\\xe3\\x1b\\xf7\\x0c\\xf7\\x01\\xcf\\xf6\\xc0\\x1f\\xfc\\x78\\xcb\\x15\\x39\\x79\\x5b\\x5e\\x45\\x1b\"\n\"\\x5c\\x73\\x9c\\xac\\xba\\xaf\\xac\\xcd\\x96\\x1f\\xbd\\x93\\x9b\\x8e\\x05\\x8c\\x95\\x92\\x8d\\x8f\\x1b\\x96\\x8e\\x8e\\x8c\\x97\\x91\\x08\\xf8\\x08\\xcc\\x15\"\n\"\\xfb\\x6c\\x06\\xd9\\xa0\\xb8\\xb3\\xcc\\x1b\\xc2\\xa9\\x6a\\x51\\x1f\\x0b\\x15\\x7c\\x9c\\x85\\x98\\x9a\\x1a\\x91\\x8c\\x92\\x8d\\x93\\x1e\\xca\\xf7\\xc0\\x05\"\n\"\\x8f\\x9d\\x8d\\x9a\\x97\\x1a\\xa8\\x7a\\xae\\x73\\x9e\\x1e\\xa5\\x6b\\x5b\\x97\\x44\\x1b\\xfb\\x31\\x3a\\x52\\xfb\\x16\\x6f\\x1f\\xf7\\x17\\x06\\xc2\\x9c\\xa9\"\n\"\\x9f\\xcc\\x1b\\xbe\\xa1\\x7e\\x6d\\x76\\x7d\\x75\\x77\\x81\\x1f\\x77\\x80\\x8b\\x8b\\x43\\x81\\x51\\x82\\x18\\x5b\\x83\\x66\\x7d\\x6c\\x75\\x08\\x56\\x65\\x6a\"\n\"\\x4e\\x4f\\x1a\\x65\\x9d\\x65\\xa8\\x73\\x1e\\x76\\xa4\\xad\\x81\\xb7\\x1b\\xc4\\xbc\\xa1\\xc2\\xc7\\x1f\\x88\\x7c\\x8b\\x86\\x84\\x1a\\x81\\x8d\\x85\\x90\\x80\"\n\"\\x1e\\xf7\\x2d\\x06\\x97\\x1d\\x0b\\x15\\x76\\x9b\\x7c\\x95\\x75\\x97\\x08\\x95\\x79\\x65\\x99\\x84\\x1b\\x82\\x84\\x83\\x81\\x82\\x8d\\x88\\x9f\\x7b\\x1f\\xba\"\n\"\\x63\\xa4\\x6b\\xc1\\x31\\x08\\x7a\\x94\\x8e\\x89\\x93\\x1b\\x94\\x91\\x91\\xa0\\x96\\x1f\\xa7\\xc3\\xbd\\xca\\xb7\\xb0\\x08\\x98\\x95\\x92\\x93\\x90\\x1a\\x98\"\n\"\\x85\\x93\\x81\\x78\\x42\\x66\\x72\\x6c\\x1e\\xf8\\x3f\\x07\\x72\\xa9\\xd6\\x65\\x9d\\x1b\\x95\\x91\\x93\\x97\\x90\\x88\\x8f\\x7a\\x9a\\x1f\\x69\\xa6\\x53\\xd0\"\n\"\\x76\\xb3\\x08\\xb3\\x75\\x86\\x92\\x83\\x1b\\x83\\x86\\x88\\x82\\x86\\x1f\\x4f\\x27\\x7a\\x75\\x56\\x5c\\x08\\x76\\x78\\x8a\\x8a\\x82\\x1a\\x81\\x92\\x84\\x94\"\n\"\\x9f\\xc9\\xab\\xaa\\xb2\\x1e\\x0e\\xf9\\x07\\xf8\\xb0\\x15\\xb6\\x48\\x9e\\x4c\\x3e\\x1a\\x54\\x7e\\x4e\\x76\\x5a\\x1e\\x5b\\x76\\x6a\\x6f\\x69\\x1b\\x6d\\x78\"\n\"\\xa2\\xb0\\xa2\\x8e\\x9d\\x96\\xc2\\x1f\\xad\\xf7\\x30\\x05\\xfb\\x12\\x06\\x66\\xfb\\x3e\\x81\\x5c\\x86\\x77\\x80\\x75\\x19\\x6a\\x7b\\x70\\x76\\x6e\\x1b\\x69\"\n\"\\x75\\xa9\\xb9\\xf7\\x10\\xc9\\xf7\\x10\\xf7\\x0f\\xf7\\x11\\x1f\\xfb\\x33\\x06\\x27\\xfb\\x01\\x4e\\xfb\\x20\\xfb\\x0d\\x1a\\xfb\\x07\\xd0\\x3b\\xef\\xcd\\xbe\"\n\"\\xb0\\xd4\\xaf\\x1e\\x98\\x6c\\x92\\x7f\\x95\\x7d\\x08\\x6a\\xa5\\xb3\\x78\\xba\\x1b\\xcd\\xc7\\xad\\xcb\\xb7\\x1f\\xba\\xcf\\xa7\\xec\\xec\\x1a\\xdd\\x7c\\xc4\"\n\"\\x65\\xcc\\x1e\\x0b\\xf9\\x61\\xf8\\x8f\\x74\\x1d\\x0b\\xf7\\x1b\\xaf\\x15\\x64\\xb3\\xc5\\x77\\xd2\\x1b\\xf1\\xe5\\xb7\\xda\\xc7\\x1f\\xba\\xc9\\xac\\xef\\xde\"\n\"\\x1a\\xae\\x85\\xa9\\x7f\\xa9\\x1e\\xe6\\xd7\\x69\\xb4\\x36\\x44\\x05\\xb4\\x64\\x4f\\xa1\\x41\\x1b\\x24\\x31\\x5f\\x3c\\x4f\\x1f\\x5b\\x4c\\x6b\\x28\\x35\\x1a\"\n\"\\x68\\x92\\x6b\\x99\\x6c\\x1e\\x2e\\x3d\\xad\\x63\\x05\\xf8\\x53\\xf8\\x0a\\x15\\x8c\\x84\\x8b\\x86\\x88\\x1a\\x65\\x82\\x5f\\x7b\\x67\\x1e\\x43\\x6d\\x57\\x61\"\n\"\\x50\\x1b\\x69\\x6c\\x9a\\xa4\\x7a\\x1f\\x79\\xc1\\x15\\x8a\\x96\\x8b\\x90\\x94\\x1a\\xb9\\x9a\\xc2\\xa2\\xb4\\x1e\\xc3\\xaa\\xb9\\xaa\\xc0\\x1b\\xae\\xa9\\x7b\"\n\"\\x6e\\x9d\\x1f\\x0b\\x15\\x94\\x1d\\x22\\x31\\x57\\xac\\xc5\\x8f\\x8c\\x94\\x8c\\x94\\x1e\\xfb\\x26\\x06\\x88\\x77\\x8a\\x81\\x7d\\x1a\\x56\\x9f\\x5d\\xaf\\x6a\"\n\"\\x1e\\x5f\\xbb\\xcf\\x76\\xec\\x1b\\xf7\\x0e\\xe8\\xae\\xce\\xc5\\x1f\\xb5\\xbb\\xa6\\xd3\\xcd\\x1a\\xd8\\x54\\xbf\\x25\\x9f\\x1e\\xfb\\x01\\xa1\\x05\\x2d\\x9e\"\n\"\\x70\\x9b\\xb1\\x1a\\xcb\\xc3\\xb3\\xe6\\xe1\\xb9\\x6e\\x55\\x86\\x8a\\x82\\x8a\\x82\\x1e\\x0b\\xf8\\x9f\\xf8\\xb0\\x15\\x79\\x38\\x05\\xca\\x70\\x62\\xa8\\x50\"\n\"\\x1b\\x3f\\x3f\\x65\\x49\\x57\\x1f\\x51\\x43\\x66\\xfb\\x01\\x2a\\x1a\\xfb\\x02\\xd4\\x3b\\xf1\\x7f\\x1d\\x0b\\xf7\\xbd\\x4c\\x1d\\xf7\\x31\\xfc\\xa7\\x42\\x1d\"\n\"\\x89\\x1d\\x93\\x1a\\xf7\\x13\\xfb\\x01\\xe0\\xfb\\x37\\xfb\\x10\\xfb\\x00\\x59\\x2c\\x39\\xa2\\x1d\\x0b\\xdd\\x16\\xf7\\xdc\\x06\\xef\\xd0\\xa3\\xc1\\xc3\\x1f\"\n\"\\xbc\\xbb\\xab\\xd0\\xc7\\x1a\\xc2\\x77\\xb1\\x58\\xb3\\x1e\\xd8\\xbd\\xb3\\xca\\xd1\\x1a\\xb2\\x7c\\xb2\\x72\\xa6\\x1e\\xaf\\x67\\x59\\x9c\\x41\\x1b\\xfb\\xd9\"\n\"\\x06\\xe3\\xfb\\xb6\\x15\\xae\\xf7\\x39\\x05\\xf7\\x38\\x06\\xc9\\xa6\\x78\\x60\\x72\\x81\\x70\\x79\\x78\\x1f\\x72\\x75\\x75\\x84\\x57\\x1b\\xfb\\x7a\\xfb\\xce\"\n\"\\x15\\xb3\\xf7\\x51\\x05\\xf7\\x46\\x06\\xc9\\xa8\\x75\\x5c\\x72\\x82\\x6f\\x7d\\x76\\x1f\\x69\\x74\\x6f\\x7f\\x52\\x1b\\x0e\\xf8\\xe5\\xf7\\xe6\\x15\\x6b\\x1d\"\n\"\\x66\\x5c\\x9c\\x48\\x1b\\x2d\\x41\\x6c\\x4b\\x57\\x1f\\x50\\x45\\x61\\xfb\\x09\\x2c\\x1a\\x59\\x9d\\x5a\\xaa\\x68\\x1e\\x62\\xaf\\xc3\\x77\\xd4\\x1b\\xf7\\x16\"\n\"\\xed\\xd7\\xf7\\x1a\\xb5\\x1f\\x57\\x1d\\x0b\\xf8\\xae\\xf9\\x79\\x15\\xfb\\x10\\x26\\x5b\\x28\\x39\\x1f\\x3d\\x2f\\x39\\x1d\\x20\\xf4\\xfb\\x4b\\x1e\\x78\\x3d\"\n\"\\x1d\\x4e\\x1f\\x45\\x59\\x4c\\x69\\x3e\\x1b\\x26\\x4c\\x2f\\x1d\\x0e\\xf8\\xae\\xf9\\x79\\x15\\xfb\\x10\\x26\\x5b\\x29\\x39\\x1f\\x3d\\x2e\\x39\\x1d\\x20\\xf4\"\n\"\\xfb\\x4b\\x1e\\x78\\x3d\\x1d\\x4f\\x1f\\x44\\x59\\x4c\\x69\\x3e\\x1b\\x25\\x4d\\x2f\\x1d\\x0b\\xfb\\x57\\x51\\x1d\\x0e\\xf7\\x2a\\xf7\\xe9\\x15\\x42\\xfb\\xe9\"\n\"\\x05\\xf7\\xb1\\x06\\xf7\\x25\\xdf\\xb2\\xf0\\xd4\\x1f\\xd3\\xed\\xb3\\xf7\\x0f\\xf7\\x0a\\x1a\\xf7\\x43\\x3d\\xd6\\xfb\\x49\\x1e\\xfb\\xb1\\x06\\x49\\xfb\\xc8\"\n\"\\x05\\x3f\\x06\\x7a\\x3b\\x05\\xf7\\x77\\x16\\xf7\\x41\\x06\\x9c\\xdb\\x05\\xfb\\x42\\x06\\xb2\\xf7\\x4b\\x05\\xf7\\x1b\\x06\\xe7\\xb8\\x5f\\x30\\x3c\\x71\\x24\"\n\"\\x69\\x50\\x1f\\x40\\x60\\x5a\\x6f\\x34\\x1b\\xfb\\x1a\\x06\\x0e\\x8a\\x1d\\x2a\\x59\\xc1\\xf4\\xde\\xa5\\xe2\\xb8\\xd1\\x1f\\xd5\\xba\\xc8\\xae\\xdc\\x1b\\xc1\"\n\"\\xb3\\x79\\x68\\xa0\\x1f\\x98\\x77\\x8f\\x78\\x64\\x1a\\x0b\\xc9\\xb3\\x9e\\xc6\\xcb\\x1e\\x7b\\x42\\x05\\x49\\x7d\\x50\\x5f\\x42\\x1b\\x59\\x67\\xa0\\xa9\\x1f\"\n\"\\x8c\\x97\\x05\\xfb\\x24\\x06\\x89\\x7f\\x8a\\x80\\x83\\x1a\\x64\\xa5\\x66\\xb3\\x77\\x1e\\x79\\xb0\\xb7\\x83\\xc9\\x1b\\xf7\\x3a\\xf7\\x01\\xd3\\xf7\\x14\\xa6\"\n\"\\x1f\\xf7\\x0b\\xf8\\xc2\\x05\\xfb\\xa9\\x24\\x15\\xc3\\xaf\\x5b\\x41\\xfb\\x0e\\x3f\\x23\\x32\\x57\\x6b\\xb5\\xd1\\xf7\\x0f\\xd6\\xf7\\x05\\xdd\\x1f\\x0b\\xf8\"\n\"\\xd8\\xf7\\x76\\x15\\x96\\xbc\\x8f\\xae\\xb0\\x1a\\xf7\\x0d\\x34\\xdc\\xfb\\x15\\x36\\x3c\\x65\\x47\\x55\\x1e\\x56\\x49\\x69\\x24\\x2b\\x1a\\xfb\\x11\\xdd\\x3e\"\n\"\\xf7\\x17\\xf7\\x0d\\xea\\xc9\\xf7\\x06\\xbf\\x1e\\xfb\\x24\\x06\\x61\\x72\\x63\\x74\\x5b\\x1b\\x53\\x6c\\xaa\\xc2\\x9b\\x8d\\x9a\\x8f\\xa1\\x1f\\xa1\\xe8\\x15\"\n\"\\xdc\\xa5\\xb7\\xb2\\xc9\\x1b\\xbf\\xac\\x6a\\x56\\x80\\x8a\\x83\\x8a\\x7c\\x1f\\x0b\\xf8\\x2f\\xf8\\xb9\\x15\\x32\\x3d\\x6c\\x53\\x54\\x1f\\x4b\\x49\\x63\\x25\"\n\"\\x28\\x1a\\xfb\\x1a\\xe3\\x37\\xf7\\x21\\xe1\\xd8\\xaa\\xc4\\xc4\\x1e\\xc8\\xc8\\xb5\\xf3\\xe6\\x1a\\xf7\\x25\\x38\\xde\\xfb\\x23\\x1e\\x7e\\xfb\\x05\\x15\\xc9\"\n\"\\xae\\x61\\x40\\x5b\\x7b\\x54\\x72\\x61\\x1f\\x54\\x6b\\x5e\\x6e\\x57\\x1b\\x4e\\x67\\xb5\\xd3\\xf7\\x12\\xd8\\xf5\\xe8\\x1f\\x0b\\xf7\\x49\\xf8\\xb0\\x15\\x2c\"\n\"\\x1d\\xcc\\xf7\\xc7\\x96\\xbb\\x99\\xa5\\xa7\\xa0\\x19\\x9d\\xa3\\xa8\\x95\\xab\\x1b\\xba\\xa7\\x74\\x65\\x82\\x87\\x73\\x86\\x74\\x1f\\xfb\\x04\\xfc\\xa7\\x20\"\n\"\\x1d\\xf7\\x0f\\xf8\\xd8\\x05\\x90\\xa1\\x8d\\x9f\\x9a\\x1a\\xd7\\x4c\\xc1\\x30\\x41\\x5c\\x73\\x4c\\x55\\x1e\\x9c\\xd9\\x05\\x0b\\x16\\xf7\\x20\\x06\\xf7\\x2f\"\n\"\\xf9\\x6d\\x05\\xfb\\x20\\x06\\x54\\xfb\\x97\\x9e\\x1d\\x66\\xf8\\x12\\x15\\xc1\\xad\\x5f\\x45\\xfb\\x12\\x42\\xfb\\x00\\x35\\x55\\x6a\\xb8\\xd3\\xf7\\x0d\\xd6\"\n\"\\xf7\\x02\\xde\\x1f\\x0b\\x15\\x23\\x32\\x5f\\x3c\\x50\\x1f\\x5b\\x4b\\x6c\\x28\\x35\\x1a\\xfb\\x0e\\xdf\\x3d\\xf7\\x19\\xf7\\x00\\xe2\\xb5\\xdc\\xc8\\x1e\\xbb\"\n\"\\xca\\xaa\\xee\\xe2\\x1a\\xf7\\x10\\x37\\xd7\\xfb\\x1d\\x1e\\x75\\xfb\\x04\\x54\\x1d\\x0b\\xc8\\x1d\\x75\\x92\\xa2\\x5b\\x1f\\x6d\\x58\\x05\\x75\\xc4\\xaa\\x84\"\n\"\\xb8\\x1b\\xe6\\xc6\\xb5\\xcc\\xaf\\x0b\\xf7\\x72\\x22\\x1d\\xfb\\x2f\\xfd\\x6d\\x20\\x1d\\xcc\\xf7\\xc4\\x05\\xdc\\x9c\\xc0\\xbf\\xcc\\x1b\\xba\\xa4\\x70\\x5a\"\n\"\\x7e\\x89\\x7e\\x87\\x75\\x1f\\x48\\xd6\\x1d\\x9d\\x9d\\x1a\\xda\\x51\\xc0\\x34\\x43\\x55\\x6f\\x4c\\x55\\x1e\\xc5\\xf7\\xa3\\x05\\x0b\\xf8\\xb1\\x16\\x88\\x1d\"\n\"\\x0b\\xf7\\x07\\xf8\\xb0\\x05\\x64\\x1d\\x94\\x91\\xa4\\x9d\\x1d\\x0b\\xf9\\xaf\\xcf\\x1d\\x62\\x7d\\x72\\x70\\x71\\x08\\x5e\\x5e\\x50\\x72\\x51\\x1b\\x28\\x44\"\n\"\\xd6\\xf3\\xd2\\xa5\\xe6\\xaf\\xc2\\x1f\\xd6\\xbb\\xcf\\xb0\\xe0\\x1b\\xea\\xc4\\x62\\x3f\\x93\\x1f\\xf7\\x1e\\x06\\x8c\\x99\\x8c\\x96\\x0b\\xf9\\xa9\\xf8\\x76\"\n\"\\x15\\x8e\\xa6\\x8c\\x96\\x97\\x1a\\xf7\\x11\\x22\\xdf\\xfb\\x2f\\xfb\\x0f\\x20\\x56\\x26\\x39\\x1e\\x45\\x33\\x5f\\xfb\\x1b\\xfb\\x15\\x1a\\xfb\\x34\\xf3\\x29\"\n\"\\xf7\\x3f\\xf7\\x4a\\xf7\\x1a\\xf0\\xf7\\x3f\\xb7\\x1e\\xfb\\x23\\x06\\x2f\\x6e\\x44\\x57\\x2b\\x1b\\x0b\\xf8\\xa9\\xf9\\x79\\x15\\xfb\\x0d\\xfb\\x02\\x57\\x2d\"\n\"\\x3b\\x1f\\x44\\x37\\x60\\xfb\\x0a\\xfb\\x03\\x1a\\xfb\\x4f\\xf7\\x05\\xfb\\x0a\\xf7\\x45\\xf7\\x13\\xf6\\xbd\\xe8\\xd8\\x1e\\xd2\\xe3\\xb5\\xf7\\x08\\xf7\\x04\"\n\"\\x1a\\xf7\\x51\\xfb\\x02\\xf7\\x08\\xfb\\x47\\x1e\\x0b\\x06\\xf7\\x07\\xf8\\xb0\\x05\\xfb\\x20\\x06\\x56\\xfb\\x8d\\x05\\x7b\\x5d\\x60\\x83\\x62\\x1b\\x60\\x6f\"\n\"\\x9c\\xa5\\x8f\\x8b\\x8d\\x8c\\x8e\\x1f\\xba\\xf7\\x71\\x05\\xfb\\x20\\x06\\x5c\\xfb\\x71\\x05\\x87\\x77\\x88\\x77\\x7e\\x1a\\x49\\xce\\x5d\\x0b\\x65\\x1d\\x9d\"\n\"\\xbd\\xb4\\xde\\x1b\\x9a\\x62\\x1d\\x88\\x8b\\x85\\x1b\\x4a\\x4c\\x61\\x42\\x5c\\x1f\\xa2\\xf5\\x05\\x0b\\xf8\\xd5\\xf7\\xdf\\x15\\x45\\xfb\\xdf\\x32\\x1d\\xfb\"\n\"\\x2b\\x06\\x51\\xfb\\xa5\\x05\\xfb\\xb4\\x06\\xc5\\xf7\\xa5\\x05\\xfb\\x2a\\x28\\x1d\\xf7\\x2a\\x06\\xd1\\xf7\\xdf\\x05\\x0e\\xa8\\x5c\\xb7\\x72\\x1e\\x74\\xb2\"\n\"\\xba\\x81\\xc9\\x1b\\xf7\\x3e\\xf7\\x00\\xdd\\xf7\\x14\\xc7\\x64\\xb2\\x38\\xa4\\x1f\\x2b\\xa7\\x05\\x58\\x9a\\x7d\\x95\\x9f\\x1a\\xab\\xae\\xa0\\xc0\\xc2\\xac\"\n\"\\x78\\x6a\\x85\\x8a\\x87\\x89\\x82\\x1e\\x0b\\xf8\\x95\\xf8\\xb0\\x95\\x1d\\x0b\\xda\\x16\\xf7\\x24\\x06\\xd9\\x8d\\xba\\xa5\\xb4\\xcc\\xf8\\x37\\xf9\\x10\\x18\"\n\"\\xfb\\x35\\x06\\xfb\\x7d\\xfc\\x05\\x3f\\xf8\\x05\\x05\\xfb\\x29\\x06\\xf7\\x0e\\xfc\\x9e\\x6b\\x5a\\x79\\x70\\x84\\x86\\x6a\\x8a\\x19\\xfb\\x07\\x06\\x0b\\xf7\"\n\"\\xb6\\xf7\\xce\\x15\\xf7\\xf1\\x25\\x1d\\xfb\\xf1\\x06\\xae\\xf7\\x39\\x05\\xf8\\x0d\\x21\\x1d\\xfc\\xa3\\x9f\\x1d\\x0b\\xf8\\x81\\xf8\\x06\\x15\\xf7\\xc6\\xf7\"\n\"\\xfb\\x05\\xfb\\x4c\\x06\\xfb\\x50\\xfb\\x84\\x3f\\xf7\\x84\\x05\\xfb\\x42\\x06\\xf7\\x2a\\xfb\\xfb\\xfb\\xc5\\xfc\\x06\\x05\\xf7\\x46\\x06\\xf7\\x55\\xf7\\x91\"\n\"\\xdf\\xfb\\x91\\x05\\x0b\\x91\\xa7\\x8d\\x99\\x9f\\x1a\\xf7\\x00\\x2e\\xcb\\xfb\\x33\\x2a\\x3f\\x73\\x59\\x52\\x1e\\x52\\x5a\\x68\\x40\\x44\\x1a\\x38\\xbd\\x5f\"\n\"\\xf7\\x0b\\x73\\x1e\\xed\\x77\\x05\\xe6\\x79\\xa8\\x77\\x5c\\x1a\\x47\\x48\\x60\\x0b\\x15\\xfb\\x57\\xfc\\x1d\\x67\\xf8\\x1d\\x05\\xfb\\x29\\x06\\xdd\\xfc\\xc6\"\n\"\\x77\\x4e\\x6b\\x74\\x4f\\x8c\\x19\\x7f\\x06\\x79\\x06\\x73\\xfb\\x05\\xf7\\x32\\x87\\xb2\\x9e\\xc5\\xf4\\x19\\xf7\\xfa\\xf9\\x12\\x05\\x0b\\xf7\\x1b\\x15\\xad\"\n\"\\xa1\\x7a\\x71\\x64\\x69\\x6d\\x60\\x6c\\x77\\x9d\\xa6\\xb1\\xab\\xa8\\xb3\\x1f\\x6a\\xfb\\x3d\\x15\\xac\\xa0\\x78\\x6c\\x57\\x6a\\x66\\x5c\\x6a\\x73\\x9f\\xa7\"\n\"\\xbe\\xb0\\xb3\\xb9\\x1f\\x0b\\xfb\\x0f\\xf7\\x6d\\x15\\x39\\x79\\x5b\\x5d\\x47\\x1b\\x5b\\x72\\x9c\\xac\\xba\\xb0\\xac\\xcc\\x96\\x1f\\xbd\\x93\\x9b\\x8e\\x95\"\n\"\\x8d\\x92\\x8c\\x8f\\x8c\\x19\\x96\\x8d\\x8e\\x8c\\x97\\x92\\x08\\x0b\\x15\\xea\\xc3\\x4b\\xfb\\x02\\x3a\\x70\\x35\\x5e\\x4c\\x1f\\x46\\x59\\x4c\\x68\\x3f\\x1b\"\n\"\\x2e\\x53\\xcc\\xf7\\x01\\xdd\\xa7\\xe2\\xb8\\xc9\\x1f\\xcf\\xbc\\xcb\\xae\\xd4\\x1b\\x0e\\xf7\\xbc\\xf7\\xce\\x15\\xf7\\xf1\\x25\\x1d\\xfb\\xf1\\x06\\xae\\xf7\"\n\"\\x39\\x05\\xf8\\x0e\\x21\\x1d\\xfc\\xa4\\x28\\x1d\\x0b\\x20\\x1d\\xb1\\xf7\\x45\\xcf\\xc9\\xda\\xfb\\x83\\x05\\xf7\\x38\\x06\\xfb\\x15\\xf7\\xe2\\xf7\\x7c\\xf7\"\n\"\\x62\\x05\\xfb\\x33\\x06\\xfb\\x73\\xfb\\x66\\x05\\x0b\\x15\\x60\\x7b\\x68\\x75\\x58\\x1b\\x58\\x75\\x9f\\xb8\\x8a\\x1f\\x60\\x06\\x87\\x7a\\x8a\\x81\\x7e\\x1a\"\n\"\\x4d\\xb5\\x62\\xcb\\xd9\\xd0\\xc8\\xdd\\x99\\x1e\\x0e\\x1a\\x52\\xb4\\x65\\xe3\\x6e\\x1e\\xda\\x72\\x05\\xca\\x77\\x98\\x82\\x74\\x1a\\x6b\\x60\\x74\\x4e\\x48\"\n\"\\x67\\xa2\\xb8\\x88\\x1e\\xfb\\x1d\\x06\\x88\\x7d\\x8a\\x0b\\x1f\\xd0\\xb5\\x1d\\xc0\\xa6\\xcb\\xc2\\x1e\\x7c\\x47\\x05\\x0b\\x05\\xc1\\x74\\x61\\xa4\\x47\\x1b\"\n\"\\x3a\\x39\\x5d\\x40\\x57\\x1f\\x5a\\x44\\x6e\\x31\\x39\\x1a\\xfb\\x13\\xce\\x3a\\xf4\\xcf\\xbf\\xa3\\xc1\\xb9\\x1e\\x0b\\x28\\x1d\\xf8\\xb5\\x21\\x1d\\xfc\\x1f\"\n\"\\x06\\x0b\\x99\\x1a\\xc5\\xc0\\xbc\\xc8\\xc9\\xaa\\x6c\\x4d\\x86\\x8b\\x81\\x8a\\x80\\x1e\\xf7\\x17\\x06\\x8e\\xa4\\x8c\\x98\\x9c\\x1a\\xf7\\x08\\x46\\xc7\\x0b\"\n\"\\xa5\\x1d\\x0e\\x1e\\x3d\\x30\\x5b\\xfb\\x13\\xfb\\x08\\x1a\\xfb\\x42\\xf7\\x04\\xfb\\x03\\xf7\\x44\\xe8\\xcd\\xab\\xda\\xd5\\x1e\\x84\\x31\\x05\\xe5\\x06\\x0b\"\n\"\\x16\\xab\\x1d\\x0e\\xc8\\xf7\\xb5\\x05\\xfb\\x2a\\x06\\x4e\\xfb\\xb5\\x05\\x87\\x79\\x89\\x78\\x0b\\x23\\x1d\\x2c\\x1d\\xf7\\x2f\\x22\\x1d\\xfb\\x20\\x24\\x1d\"\n\"\\xf7\\x20\\x06\\x0b\\x15\\x73\\xfb\\x04\\x05\\xce\\x06\\x85\\x5f\\x68\\x66\\x5e\\x83\\x82\\x5d\\x18\\xd6\\x91\\xcf\\xce\\x95\\xd9\\x9f\\xeb\\x18\\x0e\\x1b\\x5c\"\n\"\\x70\\xa0\\xaf\\x1f\\x93\\x61\\x07\\x86\\x7a\\x8a\\x81\\x7e\\x5c\\x1d\\x15\\xab\\x1d\\x0b\\x15\\x69\\x7d\\x7a\\xb3\\x1d\\x0b\\xf8\\xb0\\x23\\x1d\\x2c\\x1d\\x0b\"\n\"\\x70\\xfb\\x11\\x05\\xdc\\x06\\x82\\x59\\x6b\\x6e\\x51\\x81\\x81\\x5d\\x18\\xe4\\x92\\xcb\\xc4\\x99\\xe2\\xa2\\xf7\\x01\\x18\\x0b\\x06\\xcb\\xb2\\x1d\\x0b\\x06\"\n\"\\x6e\\xf7\\x50\\x05\\xfb\\x1d\\x06\\xb2\\xfb\\x83\\xfb\\x44\\xfb\\xc1\\x05\\xf7\\x29\\x06\\xf7\\x20\\xf7\\x83\\x05\\x0b\\xf8\\xd1\\x15\\x4d\\xfb\\xb5\\x05\\xe9\"\n\"\\x06\\xe5\\xf8\\x3d\\x05\\x4c\\x06\\x59\\x73\\x59\\x72\\x3d\\x1b\\x7e\\x4e\\x05\\x0b\\x79\\xa8\\x76\\x1e\\x4b\\xc6\\x1d\\x67\\xa1\\x1e\\x0b\\xf7\\xe3\\x15\\xfb\"\n\"\\x1c\\xf7\\x26\\x73\\xfb\\x06\\xdd\\x32\\xfb\\x0c\\x32\\x72\\xfb\\x09\\xf7\\x5b\\xf7\\x28\\x05\\x0b\\xf7\\x63\\xb6\\x1d\\xfb\\xdf\\x05\\xf7\\x2a\\x06\\x40\\xf8\"\n\"\\x1c\\xf7\\x4f\\xe4\\x1d\\x0b\\x7b\\x74\\x1b\\x80\\x88\\x8c\\x93\\x78\\x1f\\x59\\xa0\\x05\\x9b\\x67\\x83\\x8d\\x71\\x1b\\x54\\x60\\x61\\x3f\\x0b\\xf9\\x89\\x15\"\n\"\\xfb\\x20\\xfb\\x27\\x05\\xd8\\x06\\xf2\\xec\\xc8\\x2a\\x05\\xd8\\x06\\x44\\xf7\\x27\\x05\\x0b\\xf7\\xdb\\x05\\xfb\\x20\\x06\\x3b\\xfc\\x0c\\x05\\x87\\x78\\x89\"\n\"\\x79\\x79\\x1a\\x3b\\xc5\\x57\\xe3\\xd5\\x0b\\x15\\xfb\\x20\\xfb\\x27\\x05\\xd8\\x06\\xf2\\xec\\xc7\\x2a\\x05\\xd9\\x06\\x44\\xf7\\x27\\x05\\x0e\\x05\\x8f\\x9e\"\n\"\\x8d\\x9d\\x9d\\x1a\\xdb\\x51\\xbf\\x32\\x41\\x55\\x70\\x4b\\x55\\x1e\\x9d\\xdd\\x05\\x0b\\x06\\xe8\\xbf\\x99\\xb2\\xbd\\xd0\\x1d\\x0b\\x1f\\xc1\\x06\\xad\\x9c\"\n\"\\x9b\\x9a\\x9d\\x1b\\x93\\x9e\\x85\\x82\\x9c\\x1f\\xbd\\x72\\x05\\x85\\x98\\x0b\\xa3\\xc4\\xc1\\x1f\\xc1\\xc4\\xad\\xe0\\xd8\\x1a\\xbf\\x74\\xba\\x62\\xaa\\x1e\"\n\"\\xa7\\x67\\x62\\x96\\x0b\\x05\\xfb\\x20\\x06\\x30\\xfc\\x3f\\x05\\xfb\\x41\\x06\\xe6\\xf8\\x3f\\x05\\xfb\\x20\\x06\\x0e\\xbf\\x1d\\x81\\x0b\\x59\\x15\\x9e\\x99\"\n\"\\x7e\\x79\\x72\\x72\\x73\\x70\\x77\\x7d\\x99\\x9d\\xa4\\xa5\\xa2\\xa6\\x1f\\x0b\\x05\\xfb\\x20\\x06\\x61\\xfb\\x5c\\x05\\xfb\\x58\\x06\\xb6\\xf7\\x5c\\x05\\xfb\"\n\"\\x20\\x06\\x0b\\x15\\x60\\x7b\\x68\\x75\\x58\\x1b\\x5c\\x70\\xa0\\xaf\\x1f\\x93\\x60\\x07\\x87\\x7a\\x8a\\x0b\\x1e\\x8f\\x61\\x8d\\x75\\x7f\\x1a\\x79\\x85\\x81\"\n\"\\x7f\\x85\\x89\\x8c\\x96\\x80\\x1e\\x0b\\xaa\\xa2\\x9d\\x9f\\xa1\\x08\\xa5\\xaa\\x99\\xaf\\xb1\\x1a\\xcd\\x5a\\xb2\\x38\\x27\\x0b\\xf7\\x8d\\xcd\\x1d\\x68\\x5f\"\n\"\\x82\\x81\\x5d\\x18\\xd6\\x91\\xcf\\xce\\x95\\xd9\\xa0\\xeb\\x18\\x0e\\x06\\x6a\\xf7\\xa5\\x05\\xfb\\x24\\x06\\xb7\\xfb\\xe5\\xfb\\x86\\xfc\\x1c\\x05\\x0b\\xbc\"\n\"\\x6f\\xe2\\xa7\\xa0\\x8d\\x92\\xaa\\x1e\\x96\\xbf\\x05\\x83\\x72\\x76\\x88\\x0b\\x6c\\x6a\\x5b\\x4f\\x1a\\x49\\xbd\\x62\\xda\\xef\\xdb\\xd5\\xe7\\xaf\\x7d\\xa1\"\n\"\\x0b\\x15\\x97\\xb9\\x91\\xb3\\xb1\\x1a\\xb9\\x7a\\xbb\\x6f\\xaf\\x1e\\xb8\\x67\\x0b\\x95\\xa3\\x97\\x8e\\x9c\\x1b\\xa5\\x9d\\x7e\\x77\\x72\\x6e\\x78\\x65\\x6e\"\n\"\\x0b\\x9b\\xa6\\xae\\x1f\\xbb\\xb2\\xa9\\xc6\\xc4\\x1a\\xda\\x48\\xca\\x37\\x1e\\x0b\\xcf\\xa1\\xb7\\xc0\\x1e\\xb3\\xac\\xa0\\xac\\x9b\\xc3\\x08\\xfb\\x20\\x06\"\n\"\\x0b\\xf8\\xf2\\xf7\\xb8\\x15\\xfc\\x8c\\x31\\x1d\\xf8\\x8c\\x06\\x0b\\xfb\\x1a\\x06\\x44\\x6c\\x6a\\x70\\x55\\x1b\\x4f\\x6e\\xac\\xd1\\xc1\\x98\\x0b\\x15\\x25\"\n\"\\x06\\x75\\x27\\x95\\x28\\x05\\xb2\\x06\\xc0\\xee\\x05\\x0e\\x22\\x1d\\xfb\\x20\\x28\\x1d\\xf7\\x20\\x06\\x0b\\xf8\\x1c\\x15\\xfb\\xb8\\x24\\x1d\\xf7\\x3a\\x06\"\n\"\\x7e\\x0b\\x1f\\xcb\\xbe\\xb1\\xd9\\xdc\\x1a\\xf7\\x0a\\x3f\\xd2\\xfb\\x14\\x1e\\x0b\\xab\\xa2\\xac\\xb8\\x1a\\xc1\\x5a\\xb1\\x45\\x34\\x42\\x4d\\x40\\x71\\x0b\"\n\"\\x15\\xfb\\x20\\x28\\x1d\\xf7\\x20\\x06\\x0e\\x06\\x30\\xfc\\x3f\\x05\\xf7\\x20\\x06\\xf7\\x07\\xf8\\xb0\\x05\\x0b\\x16\\xeb\\x06\\xd5\\x8c\\xd4\\xc7\\x9a\\xd3\"\n\"\\xc9\\xf7\\xba\\x18\\x0b\\x1f\\x4c\\xfb\\xbb\\x20\\x1d\\xd1\\xf7\\xdb\\x05\\x8e\\x0b\\xfb\\xcd\\x20\\x1d\\xd8\\xf7\\xfe\\x05\\x8f\\x9e\\x8d\\x0b\\x15\\xf7\\x2a\"\n\"\\x06\\xaa\\xf7\\x26\\x05\\xfb\\x2a\\x06\\x0e\\x05\\xfb\\x46\\x06\\x72\\xfb\\x08\\x05\\xf7\\x47\\x06\\x5b\\x0b\\x3b\\x1d\\xfb\\x20\\x06\\x63\\xfb\\x50\\x05\\x0b\"\n\"\\x1e\\x87\\xb5\\x89\\xa1\\x97\\x1a\\x9d\\x91\\x95\\x97\\x91\\x0b\\xed\\x1d\\xd1\\x06\\x0b\\x1f\\xc6\\xa7\\xb0\\xa5\\xc2\\x1b\\x0b\\xf7\\x2c\\x15\\x65\\x77\\x5e\"\n\"\\x72\\x5a\\x1b\\x52\\x64\\x0b\\x06\\xd3\\xf7\\x41\\x05\\x21\\x06\\x44\\xfb\\x41\\x05\\x0b\\x86\\x9b\\x1b\\xac\\xad\\x9a\\xa5\\xa5\\x1f\\x9e\\x9f\\x0b\\x8c\\x94\"\n\"\\x78\\x1f\\x59\\xa0\\x05\\x99\\x6b\\x7d\\x8e\\x0b\\x15\\xfb\\x1e\\x06\\x6f\\xfb\\x16\\x98\\xfb\\x15\\x05\\x0b\\x15\\xfb\\x03\\x06\\x72\\xfb\\x0c\\x05\\xf7\\x02\"\n\"\\x06\\x0b\\x1b\\x73\\x7d\\x94\\x9b\\x90\\x8d\\x98\\x8e\\x9b\\x1f\\x0b\\xf7\\xe5\\x05\\xfb\\x34\\x06\\xfb\\x29\\xfb\\xa5\\x05\\x0b\\x55\\x57\\x52\\x62\\xa9\\x6d\"\n\"\\xb5\\xc5\\xc1\\xbf\\xc4\\x0b\\xf7\\xa2\\x15\\xf7\\xdc\\xf8\\x5f\\x05\\xfb\\x3b\\x06\\x0b\\xb5\\x62\\xcb\\xda\\xcf\\xc8\\xdd\\x99\\x1e\\x0e\\x15\\xfb\\xc0\\x06\"\n\"\\x7a\\x3b\\x05\\xf7\\xc1\\x06\\x0b\\x15\\xc1\\xad\\x5f\\x45\\xfb\\x12\\x41\\xfb\\x00\\x0b\\x15\\xfb\\x13\\x06\\x26\\xfb\\x27\\x05\\xd1\\x06\\x0b\\x15\\xfc\\xec\"\n\"\\x06\\x7c\\x46\\x05\\xf8\\xec\\x06\\x0b\\x9c\\xa1\\xa1\\xaf\\xcc\\xf7\\xfa\\xf9\\x12\\x18\\x0b\\xfa\\x3c\\x15\\xfb\\x13\\x06\\x26\\xfb\\x2a\\x05\\x0b\\x01\\x00\"\n\"\\x01\\xe3\\x01\\x05\\x00\\x01\\x0a\\x02\\x01\\x40\\x03\\x01\\x87\\xff\\x02\\x87\\xa0\\x02\\x8e\\x02\\x00\\x01\\x00\\x02\\x00\\x03\\x00\\x0a\\x00\\x19\\x00\\x6c\"\n\"\\x01\\x12\\x01\\x83\\x02\\x0a\\x02\\x1b\\x02\\x4d\\x02\\x84\\x02\\xae\\x02\\xc4\\x02\\xe4\\x02\\xe8\\x02\\xef\\x03\\x01\\x03\\x59\\x03\\x76\\x03\\xc8\\x04\\x46\"\n\"\\x04\\x79\\x04\\xd0\\x05\\x35\\x05\\x62\\x05\\xd7\\x06\\x3c\\x06\\x4b\\x06\\x73\\x06\\x91\\x06\\xaa\\x06\\xc6\\x07\\x25\\x07\\xf8\\x07\\xfc\\x07\\xff\\x08\\x03\"\n\"\\x08\\x07\\x08\\x0b\\x08\\x22\\x08\\x27\\x08\\x2a\\x08\\x2d\\x08\\x31\\x08\\x34\\x08\\x38\\x08\\x3c\\x08\\x40\\x08\\x44\\x08\\x47\\x08\\xac\\x08\\xb0\\x08\\xb4\"\n\"\\x08\\xb8\\x08\\xbc\\x08\\xd8\\x08\\xdd\\x08\\xe0\\x08\\xe4\\x08\\xe8\\x09\\x08\\x09\\x18\\x09\\x38\\x09\\x56\\x09\\x5c\\x09\\x61\\x09\\x65\\x09\\xab\\x09\\xaf\"\n\"\\x09\\xb5\\x09\\xb9\\x09\\xc2\\x09\\xc6\\x09\\xca\\x09\\xce\\x09\\xdd\\x09\\xe1\\x09\\xe4\\x0a\\x42\\x0a\\x46\\x0a\\x4a\\x0a\\x75\\x0a\\xbe\\x0a\\xc3\\x0a\\xde\"\n\"\\x0a\\xe3\\x0a\\xe7\\x0b\\x03\\x0b\\x08\\x0b\\x39\\x0b\\x3d\\x0b\\x42\\x0b\\xb9\\x0b\\xca\\x0c\\x41\\x0c\\x80\\x0c\\x9a\\x0d\\x0c\\x0d\\x91\\x0d\\x96\\x0d\\xe3\"\n\"\\x0e\\x44\\x0e\\xf7\\x0f\\x5e\\x0f\\x6d\\x0f\\x90\\x0f\\x9e\\x0f\\xa7\\x0f\\xae\\x0f\\xba\\x0f\\xc7\\x0f\\xd7\\x10\\x06\\x10\\x3b\\x10\\x3d\\x10\\x73\\x10\\x8c\"\n\"\\x10\\x9c\\x10\\xa6\\x10\\xb1\\x10\\xd0\\x10\\xe5\\x11\\x60\\x11\\xb1\\x11\\xb8\\x11\\xbf\\x11\\xc7\\x11\\xcf\\x11\\xd7\\x11\\xdf\\x11\\xe7\\x11\\xef\\x11\\xf8\"\n\"\\x12\\x12\\x12\\x18\\x12\\x4f\\x12\\x57\\x12\\x5b\\x12\\x60\\x12\\xf2\\x13\\x1c\\x13\\x21\\x13\\x85\\x13\\xc7\\x13\\xcc\\x13\\xcf\\x13\\xf0\\x13\\xf4\\x14\\x76\"\n\"\\x14\\xe1\\x14\\xfe\\x15\\x17\\x15\\x70\\x15\\xb7\\x15\\xba\\x15\\xfc\\x16\\x20\\x16\\x4b\\x16\\x80\\x16\\xae\\x16\\xca\\x16\\xf7\\x17\\x1a\\x17\\x5c\\x17\\x97\"\n\"\\x18\\x25\\x18\\x29\\x18\\xb5\\x18\\xdf\\x18\\xe6\\x19\\x52\\x19\\x5b\\x19\\x63\\x19\\x6b\\x19\\x73\\x19\\x7c\\x19\\xa5\\x1a\\x0e\\x1a\\x17\\x1a\\x20\\x1a\\x29\"\n\"\\x1a\\x32\\x1a\\x38\\x1a\\x3f\\x1a\\x46\\x1a\\x4d\\x1a\\x87\\x1a\\xae\\x1a\\xba\\x1a\\xc6\\x1a\\xd1\\x1a\\xed\\x1a\\xff\\x1b\\x0b\\x1b\\x17\\x1b\\x20\\x1b\\x2d\"\n\"\\x1b\\x34\\x1b\\x3b\\x1b\\x56\\x1b\\x60\\x1b\\x6c\\x1b\\x76\\x1b\\x80\\x1b\\x89\\x1b\\x92\\x1b\\xf4\\x1b\\xff\\x1c\\x09\\x1c\\x1b\\x1c\\x1e\\x1c\\x25\\x1c\\x2c\"\n\"\\x1c\\x32\\x1c\\x38\\x1c\\x41\\x1c\\x75\\x1c\\x7e\\x1c\\xb3\\x1c\\xc1\\x1d\\x02\\x1d\\x14\\x1d\\x29\\x1d\\x33\\x1d\\x45\\x1d\\x51\\x1d\\x59\\x1d\\x62\\x1d\\x6c\"\n\"\\x1d\\xad\\x1d\\xb1\\x1d\\xba\\x1d\\xc4\\x1d\\xeb\\x1e\\x8f\\x1e\\xf2\\x1f\\x26\\x1f\\x30\\x1f\\x3c\\x1f\\x40\\x1f\\x49\\x1f\\x52\\x1f\\x9b\\x1f\\xa8\\x1f\\xab\"\n\"\\x1f\\xbc\\x1f\\xc4\\x1f\\xcd\\x20\\x38\\x20\\x3b\\x20\\x49\\x20\\x4c\\x20\\x65\\x20\\x6e\\x20\\x77\\x20\\x80\\x20\\x8a\\x20\\xe0\\x21\\x05\\x21\\x09\\x21\\x25\"\n\"\\x21\\x28\\x21\\x3c\\x21\\xb0\\x21\\xc2\\x21\\xd0\\x21\\xda\\x21\\xed\\x22\\x63\\x22\\xa6\\x22\\xbf\\x23\\x00\\x23\\x0e\\x23\\x16\\x23\\x25\\x23\\x4f\\x23\\x52\"\n\"\\x23\\x59\\x23\\x64\\x23\\x74\\x23\\x7a\\x23\\x7d\\x23\\x84\\x23\\x8d\\x23\\xa6\\x23\\xaf\\x23\\xb7\\x23\\xc9\\x23\\xcd\\x23\\xd6\\x23\\xe3\\x23\\xeb\\x23\\xef\"\n\"\\x24\\x03\\x24\\x14\\x24\\x1e\\x24\\x2a\\x24\\x2e\\x24\\x3a\\x24\\x43\\x24\\xb7\\x24\\xcb\\x25\\x32\\x25\\x3b\\x25\\x43\\x25\\x4c\\x25\\x4f\\x25\\x57\\x25\\xc7\"\n\"\\x25\\xd0\\x25\\xdd\\x26\\x07\\x26\\x0b\\x26\\x32\\x26\\x3b\\x26\\x7e\\x26\\xd1\\x26\\xda\\x26\\xe3\\x26\\xeb\\x27\\x5c\\x27\\x60\\x27\\x68\\x27\\x88\\x27\\x92\"\n\"\\x27\\xa5\\x27\\xae\\x27\\xb7\\x27\\xbf\\x27\\xc8\\x27\\xe9\\x27\\xf1\\x27\\xf9\\x28\\x01\\x28\\x0b\\x28\\x0f\\x28\\x2f\\x28\\x38\\x28\\x3c\\x28\\x6a\\x28\\xa3\"\n\"\\x28\\xfa\\x29\\x06\\x29\\x47\\x29\\x4b\\x29\\x54\\x29\\x7a\\x29\\x9a\\x29\\x9e\\x29\\xda\\x29\\xe6\\x2a\\x0f\\x2a\\x35\\x2a\\x42\\x2a\\x4b\\x2a\\x62\\x2a\\xa1\"\n\"\\x2b\\x00\\x2b\\x18\\x2b\\x1c\\x2b\\x7c\\x2b\\x83\\x2b\\x9a\\x2b\\xab\\x2b\\xc5\\x2b\\xee\\x2c\\x2a\\x2c\\x3a\\x2c\\x3f\\x2c\\xa0\\x2c\\xe4\\x2d\\x3d\\x2d\\x5a\"\n\"\\x2d\\xbf\\x2d\\xda\\x2e\\x3c\\x2e\\xb9\\x2e\\xbe\\x2e\\xc5\\x2f\\x0a\\x2f\\x55\\x2f\\x88\\x2f\\xd4\\x2f\\xef\\x30\\x2b\\x30\\xc7\\x31\\x31\\x31\\x87\\x31\\x93\"\n\"\\x31\\xd1\\x31\\xd5\\x31\\xdd\\x31\\xfc\\x32\\x16\\x32\\x1a\\x32\\x4a\\x32\\x71\\x32\\x7e\\x32\\xb0\\x32\\xbb\\x32\\xdd\\x32\\xe9\\x33\\x28\\x33\\x84\\x33\\x96\"\n\"\\x33\\x9a\\x34\\x1e\\x34\\x4f\\x34\\x62\\x34\\x72\\x34\\x7f\\x34\\x96\\x34\\xbb\\x34\\xc8\\x34\\xcd\\x35\\x28\\x35\\x79\\x35\\xca\\x35\\xe8\\x36\\x48\\x36\\x63\"\n\"\\x36\\xc4\\x37\\x38\\x37\\x3c\\x37\\x43\\x37\\x74\\x37\\xa3\\x37\\xce\\x38\\x11\\x38\\x41\\x38\\x73\\x38\\x8b\\x38\\xa3\\x38\\xf5\\x39\\x81\\x3a\\x05\\x3a\\x83\"\n\"\\x3a\\xdc\\x3b\\x3e\\x3b\\x4e\\x3b\\x83\\x3b\\xb9\\x3c\\x57\\x3c\\xd4\\x3c\\xe1\\x3d\\x67\\x3d\\xaf\\x3d\\xf5\\x3e\\x3c\\x3e\\x81\\x3e\\x89\\x3e\\x9a\\x3f\\x12\"\n\"\\x3f\\x1b\\x3f\\x35\\x3f\\x3d\\x3f\\x46\\x3f\\x77\\x3f\\xf5\\x40\\x72\\x40\\x82\\x40\\xba\\x41\\x17\\x41\\x46\\x41\\x4e\\x41\\x56\\x41\\x70\\x41\\x78\\x41\\xa3\"\n\"\\x41\\xac\\x41\\xcd\\x42\\x29\\x42\\x88\\x42\\xf0\\x43\\x0a\\x43\\x74\\x43\\x78\\x43\\x7f\\x43\\x9e\\x43\\xb8\\x43\\xfa\\x44\\x43\\x44\\x65\\x44\\x76\\x44\\x7e\"\n\"\\x44\\x9f\\x45\\x27\\x45\\x52\\x45\\xa8\\x45\\xae\\x45\\xf4\\x46\\x19\\x46\\x21\\x46\\x35\\x46\\x44\\x46\\xbc\\x46\\xf8\\x47\\x0f\\x47\\x43\\x47\\x88\\x48\\x15\"\n\"\\x48\\x51\\x48\\x54\\x48\\x5b\\x48\\x62\\x48\\x6a\\x48\\x9f\\x48\\xae\\x48\\xd2\\x48\\xe6\\x48\\xf4\\x48\\xfa\\x49\\x16\\x49\\x20\\x49\\x27\\x49\\x34\\x49\\x5f\"\n\"\\x4a\\x01\\x4a\\x0b\\x4a\\xa1\\x4a\\xa8\\x4a\\xfa\\x4b\\x14\\x4b\\x1d\\x4b\\x48\\x4b\\x55\\x4b\\x69\\x4b\\xd8\\x4c\\x12\\x4c\\x2e\\x4c\\x37\\x4c\\x4b\\x4c\\x5b\"\n\"\\x4c\\x60\\x4c\\x68\\x4c\\x6c\\x4c\\x75\\x4c\\x83\\x4c\\x8b\\x4c\\xfd\\x4d\\xeb\\x4e\\x5d\\x4e\\x7a\\x4e\\xa3\\x4e\\xc6\\x4e\\xfd\\x4f\\x5e\\x4f\\x87\\x4f\\x91\"\n\"\\x4f\\xb0\\x4f\\xcd\\x4f\\xf5\\x50\\x0d\\x50\\x5f\\x50\\x68\\x50\\xd6\\x50\\xf0\\x51\\x58\\x51\\x6c\\x51\\xc1\\x52\\x51\\x52\\xac\\x52\\xe1\\x53\\x82\\x53\\x98\"\n\"\\x53\\xd5\\x53\\xea\\x54\\x32\\x54\\x9e\\x54\\xa6\\x54\\xaf\\x54\\xb6\\x54\\xcc\\x54\\xd8\\x54\\xd9\\x54\\xdd\\x54\\xf7\\x55\\x25\\x55\\x2d\\x55\\x2f\\x55\\x4a\"\n\"\\x55\\x51\\x55\\x8c\\x55\\xf7\\x56\\x00\\x56\\x09\\x56\\x0c\\x56\\x16\\x56\\x48\\x56\\x74\\x56\\xb3\\x56\\xea\\x57\\x1a\\x57\\x60\\x57\\x8b\\x57\\xb4\\x57\\xd7\"\n\"\\x58\\x10\\x58\\x2b\\x58\\x50\\x58\\x78\\x58\\x8d\\x58\\xe5\\x59\\x23\\x59\\x27\\x59\\x3e\\x59\\x75\\x59\\xa8\\x59\\xba\\x59\\xf6\\x5a\\x2c\\x5a\\x72\\x5a\\xc5\"\n\"\\x5b\\x1e\\x5b\\x52\\x5b\\x83\\x5b\\x88\\x5b\\xa5\\x5b\\xc1\\x5c\\x22\\x5c\\x2b\\x5c\\x3b\\x5c\\x67\\x5c\\x94\\x5c\\xcd\\x5c\\xd9\\x5c\\xe1\\x5d\\xa3\\x5e\\x05\"\n\"\\x5e\\x0a\\x5e\\x0c\\x5e\\x28\\x5e\\x45\\x5e\\xb5\\x5e\\xcc\\x5f\\x11\\x5f\\x3a\\x5f\\x69\\x5f\\x6d\\x5f\\x76\\x5f\\x7f\\x5f\\x94\\x5f\\xa7\\x5f\\xb0\\x5f\\xb9\"\n\"\\x5f\\xc1\\x5f\\xd1\\x5f\\xdb\\x60\\x6b\\x60\\x74\\x60\\x7e\\x60\\x87\\x60\\x90\\x60\\xf7\\x0e\\x0e\\xfb\\xc5\\xf8\\x35\\x81\\x0a\\x0e\\xfb\\x38\\xf7\\xeb\\xf9\"\n\"\\x6d\\xa3\\x0a\\xf7\\x9c\\xf7\\x16\\xa3\\x0a\\x0e\\x39\\xf7\\x1e\\x6b\\x15\\xdf\\xf7\\x60\\x05\\xf1\\x06\\x38\\xfb\\x60\\x05\\xf4\\x06\\xdf\\xf7\\x60\\x05\\xf7\"\n\"\\x0b\\x06\\xa0\\xef\\x05\\x28\\x06\\xc9\\xf7\\x2c\\x05\\xf5\\x06\\xa0\\xef\\x05\\x34\\xde\\x1d\\x24\\xde\\x1d\\xfb\\x0a\\x06\\x75\\x27\\x05\\xee\\x06\\x4d\\xfb\"\n\"\\x2c\\x05\\x2a\\x06\\x76\\x27\\x05\\xd8\\x06\\x38\\xfb\\x60\\x05\\xf7\\x79\\xf7\\xc4\\x15\\xca\\xf7\\x2c\\x05\\xf1\\x06\\x4d\\xfb\\x2c\\x05\\x0e\\x39\\xf9\\x03\"\n\"\\xf8\\x86\\x15\\x8f\\xa0\\x8c\\x97\\x9b\\x1a\\xbe\\x79\\xb6\\x6b\\xa7\\x1e\\x70\\xa2\\x69\\x97\\x53\\x90\\x97\\xc1\\x18\\x47\\x06\\x80\\x55\\x57\\x86\\x68\\x81\"\n\"\\x65\\x77\\x19\\x3d\\x63\\x5a\\x3d\\x3a\\x1a\\x30\\xc1\\x52\\xf7\\x03\\x6f\\x1e\\x5d\\xfb\\x69\\x05\\x5f\\x94\\x76\\xa7\\xbe\\x1a\\x96\\x8b\\x93\\x8c\\x99\\x1e\"\n\"\\xfb\\x16\\x06\\x85\\x73\\x89\\x7b\\x78\\x1a\\x2a\\xcb\\x4f\\xf7\\x08\\x7f\\x1e\\x74\\x22\\x05\\xcf\\x06\\xa1\\xf4\\xc3\\x91\\xb7\\x98\\xb2\\xa0\\x19\\xd7\\xb5\"\n\"\\xbf\\xe3\\xe3\\x1a\\xdc\\x56\\xbe\\xfb\\x0f\\xb1\\x1e\\xb6\\xf7\\x5d\\x05\\xaf\\x85\\xa1\\x71\\x65\\x1a\\x7f\\x8a\\x82\\x89\\x78\\x1e\\xfb\\x35\\x44\\x15\\x61\"\n\"\\x9b\\x77\\xa4\\xac\\x1a\\xad\\x9e\\xae\\xa7\\x9e\\x1e\\x99\\x95\\x99\\x8f\\xa4\\x90\\x08\\x8a\\xfb\\xda\\x15\\xb2\\x7b\\x9f\\x6f\\x63\\x1a\\x53\\x66\\x62\\x4b\"\n\"\\x7c\\x1e\\x0e\\xf7\\x8f\\xf9\\x88\\xf9\\x59\\x15\\xfc\\xba\\xfd\\x6d\\x05\\xd7\\x06\\xf8\\xbb\\xf9\\x6d\\x05\\xfc\\x75\\x83\\x15\\xfb\\x07\\xfb\\x00\\x21\\xfb\"\n\"\\x05\\x38\\xcb\\x4d\\xe2\\xf7\\x0a\\xf6\\xf4\\xf7\\x07\\xdf\\x4b\\xc7\\x32\\x1f\\x76\\x29\\x15\\xb6\\xaa\\x6f\\x64\\x56\\x5b\\x5b\\x54\\x61\\x6c\\xa7\\xb1\\xc1\"\n\"\\xbc\\xbb\\xc0\\x1f\\xf8\\x37\\xfb\\x97\\x15\\xfb\\x07\\xfb\\x00\\x21\\xfb\\x05\\x38\\xcb\\x4d\\xe2\\xf7\\x0a\\xf6\\xf4\\xf7\\x07\\xdf\\x4b\\xc7\\x32\\x1f\\x76\"\n\"\\x29\\x15\\xb6\\xaa\\x6f\\x64\\x56\\x5b\\x5b\\x54\\x61\\x6c\\xa7\\xb1\\xc1\\xbc\\xbb\\xc0\\x1f\\x0e\\xdf\\xf8\\xf3\\xf8\\x09\\x15\\x80\\x52\\x7c\\x6d\\x69\\x6c\"\n\"\\x39\\xf7\\x1d\\x18\\xc1\\xab\\xa9\\xa1\\xa1\\xa4\\x08\\xac\\xb0\\x9f\\xbe\\xba\\x1a\\xd1\\x4d\\xba\\x30\\xfb\\x0c\\x22\\x2e\\x20\\x6c\\x9c\\x64\\xaf\\x57\\x1e\"\n\"\\x59\\x74\\x74\\x7f\\x6c\\x75\\x08\\x46\\x5c\\x66\\x49\\x40\\x1a\\xfb\\x05\\xd4\\x49\\xf7\\x11\\xd8\\xb5\\x9b\\xce\\xe8\\x1e\\xb0\\x4f\\x05\\xf7\\x34\\x06\\x2d\"\n\"\\xf7\\x34\\xc6\\xc0\\xbb\\xe2\\x96\\xd4\\x19\\xfc\\x09\\x55\\x15\\xee\\xfb\\x3b\\x05\\x5d\\x48\\x6d\\x7e\\x69\\x1b\\x5a\\x63\\xb5\\xbf\\xb9\\x9e\\xa8\\xbd\\xa7\"\n\"\\x1f\\xf7\\x10\\xf7\\x48\\x15\\x6b\\xc2\\x87\\x94\\x9d\\x1a\\xb0\\xa6\\xa5\\xb1\\xab\\x9e\\x7c\\x71\\x62\\x6f\\x67\\x57\\x70\\x1e\\x0e\\xf7\\x70\\xf9\\x6d\\x86\"\n\"\\x0a\\xe9\\x92\\xc9\\xc3\\x97\\xe3\\xa2\\xf7\\x01\\x18\\x0e\\xfb\\xc5\\xf7\\xfa\\xf9\\x6d\\x15\\xfb\\x53\\xfb\\x70\\x38\\xfb\\x4c\\xfb\\x5f\\x1a\\x29\\xa4\\x21\"\n\"\\xbf\\xfb\\x0a\\x1e\\xef\\x06\\x5f\\xf7\\x25\\x7d\\xd6\\xe7\\x1a\\xf7\\x19\\xb0\\xf7\\x18\\xd6\\xf7\\x1c\\x1e\\xae\\xcb\\xb0\\xc2\\xd2\\xec\\x08\\x0e\\xfb\\xc5\"\n\"\\xda\\xfb\\x5c\\x15\\xc4\\xcd\\xc1\\xd1\\xaf\\xc2\\x08\\xe0\\xf7\\x18\\xb8\\xf7\\x25\\xf7\\x1e\\x1a\\xee\\x72\\xf1\\x54\\xf7\\x0e\\x1e\\x27\\x06\\xba\\xfb\\x28\"\n\"\\x99\\x44\\x2d\\x1a\\xfb\\x18\\x66\\xfb\\x18\\x3f\\xfb\\x1c\\x1e\\x67\\x4b\\x6b\\x5b\\x3e\\x23\\x08\\x0e\\xfb\\x8d\\xf7\\x8a\\xf8\\xb4\\x15\\x34\\x2d\\xbc\\x60\"\n\"\\xe2\\xe9\\xba\\x2d\\xce\\xb6\\x5c\\xe9\\xf7\\x08\\xae\\x84\\xd1\\xfb\\x09\\x67\\xa4\\xf7\\x08\\x05\\x43\\x06\\x73\\xfb\\x08\\x26\\xaf\\x66\\x46\\x05\\x0e\\x55\"\n\"\\xf8\\xe8\\xf7\\xb8\\x91\\x0a\\x64\\xfb\\x4a\\x05\\xf7\\x0b\\x06\\xb2\\xf7\\x4a\\x05\\xf7\\x4b\\x06\\x0e\\xea\\xf7\\x26\\x15\\x6c\\xfb\\x26\\x05\\xe1\\x06\\x7e\"\n\"\\x47\\x67\\x64\\x4d\\x80\\x7f\\x53\\x18\\xf7\\x02\\x9b\\xc7\\xc4\\x9e\\xf7\\x02\\xa8\\xf7\\x1d\\x18\\x0e\\xfb\\xc5\\xa6\\x0a\\xf7\\x89\\xf7\\x26\\x27\\x1d\\x0e\"\n\"\\xf7\\xfc\\xf9\\x5e\\x15\\xfb\\xfd\\xfd\\x6c\\x05\\xce\\x06\\xf7\\xfd\\xf9\\x6c\\x05\\x0e\\x39\\xf8\\x39\\xf9\\x68\\x15\\xfb\\x05\\x2f\\x4a\\xfb\\x0a\\x54\\x1f\"\n\"\\x61\\x2f\\x65\\xfb\\x3f\\x25\\x1a\\xfb\\x10\\xd3\\x40\\xf7\\x0a\\xf7\\x08\\xe7\\xcb\\xf7\\x0b\\xc2\\x1e\\xb5\\xe6\\xb1\\xf7\\x41\\xf1\\x1a\\xf7\\x10\\x43\\xd5\"\n\"\\xfb\\x0d\\x1e\\x70\\xfb\\x04\\x15\\xba\\xa9\\x6a\\x58\\x4d\\x74\\xfb\\x1a\\x70\\x2c\\x1f\\x28\\x6f\\x69\\x64\\x50\\x1b\\x5d\\x6d\\xac\\xbe\\xec\\xbc\\xf7\\x72\"\n\"\\xac\\xc0\\x1f\\xb1\\xa3\\xa8\\x9e\\xae\\x1b\\x0e\\x39\\xf7\\xea\\xf8\\x7d\\x15\\x23\\xfc\\x7d\\x20\\x1d\\xf7\\x2b\\xf9\\x59\\x05\\x2e\\x06\\x37\\x63\\x39\\x60\"\n\"\\xfb\\x0e\\x1b\\x77\\x2e\\x05\\x0e\\x39\\xf8\\xae\\xf7\\x11\\x15\\xfb\\xc0\\x06\\xa4\\xb0\\xa9\\xa1\\xf7\\x0a\\xd6\\xde\\xbf\\xb0\\xa8\\xab\\xb1\\x08\\xb5\\xbd\"\n\"\\xa2\\xc8\\xca\\x1a\\xf7\\x00\\x3e\\xcb\\xfb\\x16\\xfb\\x30\\x26\\x2d\\xfb\\x3c\\x71\\x1e\\xf7\\x1a\\x06\\xec\\x98\\xb8\\xc0\\xd1\\x1b\\xc0\\xab\\x6d\\x59\\x5c\"\n\"\\x77\\x5d\\x69\\x68\\x1f\\x6c\\x6a\\x6b\\x75\\xfb\\x07\\x43\\xfb\\x1f\\x38\\x5a\\x4d\\x68\\xfb\\x18\\x08\\xf8\\x76\\x06\\x0e\\x39\\xf7\\xb0\\xf7\\xd1\\x15\\xc1\"\n\"\\x8e\\x8b\\x84\\xa3\\x1f\\xaf\\x80\\xa0\\x6f\\x63\\x1a\\x71\\x83\\x70\\x7d\\x75\\x1e\\x65\\x72\\x6a\\x78\\x61\\x1b\\x52\\x6b\\xa7\\xbc\\x8a\\x1f\\xa1\\x07\\x8a\"\n\"\\x95\\x05\\xfb\\x1c\\x06\\x87\\x75\\x89\\x7b\\x78\\x1a\\xfb\\x02\\xd6\\x4b\\xf7\\x16\\xed\\xda\\xac\\xc9\\xbe\\x1e\\xb3\\xbd\\xa4\\xd2\\xcb\\x1a\\xc1\\x75\\xb2\"\n\"\\x59\\xa9\\x1e\\xdb\\xbc\\xb3\\xcc\\xda\\x1a\\xeb\\x42\\xc2\\xfb\\x13\\x35\\x46\\x71\\x58\\x5d\\x1e\\x66\\x63\\x79\\x60\\x7c\\x3d\\x08\\xf7\\x15\\x06\\x94\\xb2\"\n\"\\x91\\x9e\\x95\\x9c\\x08\\xac\\x9e\\xac\\x9d\\xb3\\x1b\\xb9\\xaa\\x6f\\x61\\x3b\\x50\\x58\\x30\\x1f\\x80\\x06\\x0e\\x39\\xf8\\xd8\\xf7\\xa5\\x15\\x41\\x06\\xe8\"\n\"\\xf8\\x48\\x05\\xfb\\x39\\x06\\xfb\\xf4\\xfc\\x46\\x72\\xfb\\x0a\\x05\\xf7\\xb1\\x06\\x69\\xfb\\x31\\x20\\x1d\\xad\\xf7\\x31\\x05\\xd4\\x06\\xfb\\x51\\xf7\\x08\"\n\"\\x15\\xfb\\x4c\\x06\\xf7\\x8d\\xf7\\xc4\\x05\\x0e\\x39\\xf9\\x15\\xf9\\x59\\x15\\xfc\\x13\\x06\\xfb\\x26\\xfc\\x1f\\x05\\xf7\\x12\\x06\\xad\\xa2\\xae\\x9e\\xb6\"\n\"\\x1b\\xc5\\xab\\x6b\\x50\\x26\\x4f\\x3f\\x3a\\x55\\x69\\xa4\\xb1\\x91\\x8c\\x93\\x8c\\x94\\x1f\\xfb\\x1e\\x06\\x87\\x77\\x8a\\x81\\x7d\\x1a\\x28\\xda\\x4a\\xf7\"\n\"\\x0d\\xf0\\xe3\\xb7\\xdb\\xc6\\x1e\\xb4\\xc4\\xa3\\xd3\\xd1\\x1a\\xf7\\x03\\x48\\xcf\\xfb\\x00\\x5a\\x66\\x7f\\x6c\\x5c\\x1e\\xc1\\xf7\\x28\\x05\\xf7\\xbc\\x06\"\n\"\\x0e\\x39\\xf9\\x04\\xf8\\xb8\\x15\\x8c\\x94\\x8b\\x94\\x90\\x1a\\xea\\x47\\xc5\\xfb\\x06\\x20\\x35\\x55\\x21\\x4a\\x1e\\x56\\x34\\x5c\\xfb\\x4c\\xfb\\x0e\\x1a\"\n\"\\xfb\\x0b\\xd9\\x40\\xf7\\x0d\\xe2\\xda\\xb3\\xd2\\xc0\\x1e\\xb9\\xc8\\xa7\\xda\\xd3\\x1a\\xf3\\x4c\\xca\\x22\\x56\\x5d\\x7a\\x64\\x59\\x1e\\x9c\\xc9\\x8d\\x92\"\n\"\\x98\\xab\\x08\\xd1\\xa7\\xb0\\xa9\\xc4\\x1b\\xbb\\xa2\\x79\\x5d\\x94\\x1f\\xfb\\x22\\xfb\\x55\\x15\\xbd\\xab\\x69\\x57\\x2e\\x4f\\x3e\\x42\\x58\\x68\\xb0\\xbf\"\n\"\\xe5\\xca\\xd8\\xd5\\x1f\\x0e\\x39\\xf9\\x3b\\xf9\\x59\\x15\\xfc\\x89\\x24\\x1d\\xf7\\xf5\\x06\\xfb\\x57\\xfb\\x50\\x29\\xfb\\x2e\\x3b\\xfb\\x86\\x08\\xf7\\x22\"\n\"\\x06\\xc0\\xf7\\x53\\xd9\\xf7\\x1d\\xf7\\x27\\xf7\\x37\\xc9\\xcb\\xae\\xaf\\x93\\x93\\x08\\x0e\\x39\\xf8\\x7f\\xf8\\x16\\x15\\xad\\x9f\\x9e\\x98\\x9b\\x9c\\x08\"\n\"\\xb1\\xb0\\xa1\\xbc\\xbb\\x1a\\xe6\\x3a\\xca\\xfb\\x09\\xfb\\x25\\xfb\\x0d\\x23\\xfb\\x11\\x5f\\x9d\\x6e\\xba\\x67\\x1e\\x59\\x72\\x70\\x78\\x72\\x6e\\x08\\x66\"\n\"\\x5f\\x75\\x50\\x54\\x1a\\xfb\\x01\\xde\\x46\\xf7\\x19\\xde\\xd7\\xa8\\xbf\\xc1\\x1e\\xc0\\xbf\\xac\\xd6\\xcf\\x1a\\xc7\\x74\\xaf\\x4e\\xb0\\x1e\\x2e\\xf7\\x76\"\n\"\\x15\\xc2\\xb0\\x6e\\x60\\x4b\\x53\\x58\\x44\\x57\\x6a\\xa8\\xb9\\xca\\xbf\\xbc\\xcf\\x1f\\x53\\xfb\\xae\\x15\\xc2\\xae\\x6b\\x58\\x35\\x53\\x4d\\x3c\\x54\\x64\"\n\"\\xad\\xba\\xdf\\xc8\\xcd\\xd9\\x1f\\x0e\\x39\\xd3\\xf7\\x39\\x15\\x88\\x7c\\x8a\\x83\\x81\\x1a\\x2f\\xd4\\x4c\\xf6\\xf7\\x02\\xe4\\xc1\\xf3\\xc7\\x1e\\xc9\\xf5\"\n\"\\xb5\\xf7\\x31\\xf7\\x0d\\x1a\\xf7\\x11\\x3d\\xdb\\xfb\\x0c\\xfb\\x38\\xfb\\x15\\xfb\\x21\\xfb\\x48\\xfb\\x01\\xcb\\x49\\xf4\\xc3\\xae\\x9a\\xbb\\xc3\\x1e\\x80\"\n\"\\x5b\\x80\\x6a\\x7f\\x6f\\x08\\x56\\x73\\x60\\x6d\\x59\\x1b\\x5c\\x6b\\xa1\\xab\\x8e\\x8b\\x8f\\x8c\\x90\\x1f\\xf7\\x4a\\xf8\\x53\\x15\\xc3\\xaf\\x67\\x52\\x2a\"\n\"\\x4b\\x3d\\x3b\\x5a\\x6c\\xad\\xc0\\xf0\\xc5\\xdb\\xd5\\x1f\\x0e\\xfb\\xc5\\xf7\\xba\\xf7\\x26\\x27\\x1d\\xf7\\x03\\xf8\\x9c\\x27\\x1d\\x0e\\xfb\\xc5\\xf7\\x24\"\n\"\\xf7\\x26\\x15\\x6c\\xfb\\x26\\x05\\xe1\\x06\\x7e\\x47\\x67\\x64\\x4d\\x80\\x7f\\x53\\x18\\xf7\\x02\\x9b\\xc7\\xc4\\x9e\\xf7\\x02\\xa8\\xf7\\x1d\\x18\\xdb\\xf8\"\n\"\\x0a\\x27\\x1d\\x0e\\x55\\xf9\\x0a\\xf8\\x6e\\x15\\xfc\\xa3\\xfb\\x49\\x71\\xfb\\x0d\\xf8\\x56\\xfb\\x4a\\xa7\\xf7\\x17\\xfb\\xb8\\xf7\\x03\\xf7\\xe8\\xf7\\x05\"\n\"\\x05\\x0e\\x55\\xf9\\x02\\xf8\\x30\\x15\\xfc\\x79\\x31\\x1d\\xf8\\x79\\x06\\x71\\xfb\\x0c\\x15\\xfc\\x79\\x31\\x1d\\xf8\\x79\\x06\\x0e\\x55\\xb1\\x81\\x15\\xf8\"\n\"\\xa3\\xf7\\x49\\xa5\\xf7\\x0d\\xfc\\x56\\xf7\\x4a\\x6f\\xfb\\x17\\xf7\\xb8\\xfb\\x03\\xfb\\xe8\\xfb\\x05\\x05\\x0e\\x70\\xf8\\x32\\xf7\\x5d\\x15\\x99\\xcd\\x94\"\n\"\\x96\\xcf\\xb5\\xc6\\xaf\\xb0\\xa9\\xa0\\xa6\\x08\\xa9\\xb2\\x9f\\xc7\\xc1\\x1a\\xc0\\x74\\xbd\\x63\\xaa\\x1e\\xa8\\x68\\x56\\x9a\\x4b\\x1b\\x35\\x45\\x6d\\x52\"\n\"\\x56\\x1f\\x64\\x60\\x75\\x5a\\x78\\x37\\x08\\xf7\\x1c\\x06\\xe3\\x9c\\xbc\\xbe\\xcf\\x1b\\xc1\\xb0\\x67\\x58\\x76\\x85\\x77\\x81\\x78\\x1f\\x7c\\x71\\x81\\x82\"\n\"\\x53\\x64\\x2d\\x49\\x64\\x53\\x84\\x3f\\x08\\xf7\\x12\\x54\\x15\\x2a\\x0a\\x6c\\xfb\\x26\\x05\\x23\\x0a\\x0e\\xf7\\xe5\\xf9\\x82\\xf8\\x90\\x15\\x70\\x50\\x05\"\n\"\\xbd\\x77\\x70\\x9e\\x5a\\x1b\\x3b\\x34\\x5c\\x3a\\x46\\x1f\\x53\\x49\\x69\\x40\\x4f\\x1a\\x3b\\xc3\\x53\\xdc\\xc2\\xc1\\xa4\\xbb\\xbd\\x1e\\x5d\\x9a\\xb0\\x73\"\n\"\\xc3\\x1b\\xdd\\xe1\\xbd\\xe2\\xd2\\x1f\\xc5\\xd2\\xa9\\xdf\\xe6\\x1a\\xcd\\x75\\xc6\\x5e\\xc1\\x1e\\xe0\\x46\\x29\\xb5\\xfb\\x14\\x1b\\xfb\\x38\\xfb\\x31\\x47\"\n\"\\xfb\\x0c\\xfb\\x06\\x1f\\x25\\x20\\x4f\\xfb\\x1f\\xfb\\x16\\x1a\\x36\\xad\\x3a\\xc7\\x52\\x1e\\x4a\\xd0\\xe6\\x6d\\xf7\\x12\\x1b\\xeb\\xd5\\x99\\xaa\\xd8\\x1f\"\n\"\\x7f\\xda\\x05\\x6c\\x2c\\x55\\x81\\x4c\\x1b\\xfb\\x46\\xfb\\x11\\xf2\\xf7\\x27\\xe5\\xaf\\xf2\\xca\\xe1\\x1f\\xf7\\x0d\\xe3\\xf7\\x16\\xcd\\xf7\\x2c\\x1b\\xf3\"\n\"\\xd2\\x6f\\x4c\\xc6\\x1f\\xb5\\x5e\\xa0\\x5a\\x57\\x1a\\x4d\\x72\\x45\\x5f\\x53\\x1e\\x51\\x5e\\x50\\x63\\x61\\x1b\\x73\\x7c\\x98\\xa1\\x9a\\x8d\\x91\\x9c\\xac\"\n\"\\x1f\\xf7\\x1c\\xf7\\xac\\x05\\xfb\\x7e\\x4d\\x15\\xb3\\x89\\xa4\\x6f\\x63\\x1a\\x62\\x73\\x51\\x64\\x59\\x1e\\x51\\x5f\\x58\\x6a\\x5e\\x1b\\x63\\x70\\xab\\xba\"\n\"\\xf2\\xf7\\x0b\\xf7\\x19\\xe1\\x86\\x1f\\x0e\\xdf\\x24\\x0a\\x0e\\xdf\\x78\\x1d\\xdf\\x7e\\x1d\\x0e\\xdf\\x73\\x0a\\x0e\\xa8\\x26\\x0a\\x0e\\x70\\xf7\\xb7\\xf7\"\n\"\\xce\\x15\\xf7\\xd3\\x21\\x1d\\xfb\\xd4\\x40\\x0a\\xf7\\xfe\\x21\\x1d\\xfc\\x94\\x35\\x0a\\x0e\\xf7\\x20\\x77\\x1d\\x0e\\xdf\\x8e\\x1d\\x25\\x0a\\x0e\\x39\\x70\"\n\"\\x0a\\x0e\\xdf\\x79\\x0a\\x70\\x37\\x1d\\x0e\\xf7\\x57\\x75\\x0a\\xdf\\x30\\x0a\\x0e\\xf7\\x20\\x7a\\x1d\\xa8\\x6e\\x0a\\xf7\\x20\\xf9\\x42\\xf2\\x15\\xe0\\xdd\"\n\"\\xc7\\xf7\\x25\\xf7\\x0f\\x1a\\xf7\\x48\\xfb\\x02\\xf7\\x00\\xfb\\x4b\\xfb\\x10\\x28\\x5c\\x27\\x37\\x1e\\x3f\\x31\\x5d\\xfb\\x12\\xfb\\x08\\x1a\\xfb\\x43\\xf7\"\n\"\\x03\\xfb\\x02\\xf7\\x45\\xd3\\xc5\\x9a\\xae\\xc8\\x1e\\xd0\\x3a\\xe8\\xdc\\x05\\xfb\\x67\\xf7\\x8f\\x15\\x2d\\x3a\\xc9\\x42\\x05\\x7f\\x71\\x6c\\x84\\x6b\\x1b\"\n\"\\x28\\x4e\\xce\\xf7\\x02\\xda\\xa6\\xe1\\xb7\\xc8\\x1f\\xd1\\xbd\\xca\\xae\\xd7\\x1b\\xf2\\xc8\\x49\\xfb\\x03\\x39\\x6b\\x2b\\x5d\\x51\\x1f\\x0e\\xdf\\x3e\\x1d\"\n\"\\x0e\\xa8\\x5f\\x0a\\x0e\\x70\\x46\\x0a\\x0e\\xdf\\x4f\\x1d\\x0e\\xa8\\xf8\\x24\\x16\\xf8\\x26\\xf9\\x6d\\x05\\xfb\\x2b\\x06\\xfb\\xa8\\xfc\\xb9\\x5e\\xf8\\xb9\"\n\"\\x05\\xfb\\x2b\\x06\\xe9\\xfd\\x6d\\x05\\x0e\\xf7\\xc6\\x35\\x1d\\x0e\\xa8\\x78\\x0a\\xa8\\x2c\\x0a\\x0e\\x70\\x36\\x1d\\x0e\\xfb\\xc5\\xf8\\x63\\x22\\x1d\\xfb\"\n\"\\x87\\x06\\xfb\\x59\\xfe\\x35\\x05\\xf7\\x87\\x06\\xa0\\xef\\x05\\xfb\\x05\\x06\\xf7\\x2e\\xf9\\x6d\\x05\\xf7\\x05\\x06\\x0e\\xf7\\x1e\\xf9\\x59\\x15\\xd3\\xfd\"\n\"\\x70\\x05\\xd6\\x06\\x42\\xf9\\x70\\x05\\x0e\\xfb\\xc5\\x72\\xfb\\x5c\\x15\\xf7\\x87\\x06\\xf7\\x59\\xfa\\x35\\x05\\xfb\\x87\\x06\\x76\\x27\\x05\\xf7\\x05\\x06\"\n\"\\xfb\\x2e\\xfd\\x6d\\x05\\xfb\\x05\\x06\\x0e\\x55\\xf8\\xd8\\xf7\\xa2\\x15\\x3a\\xf8\\x3d\\x05\\xfb\\x11\\x06\\xfb\\x93\\xfc\\x3d\\x05\\xf7\\x04\\x06\\xf7\\x46\"\n\"\\xf7\\xc0\\xc5\\xfb\\xc0\\x05\\x0e\\x39\\xf8\\xba\\x3f\\x57\\x0a\\xf7\\xc2\\x89\\x0a\\x0e\\x39\\x2d\\x1d\\x0e\\x70\\xf7\\x6a\\x22\\x1d\\xfb\\x2f\\xfd\\x6d\\x05\"\n\"\\x21\\x0a\\x97\\xc2\\x05\\x55\\xa2\\xb4\\x73\\xcf\\x1b\\xf7\\x2f\\xf7\\x22\\xf7\\x43\\xf7\\x52\\xf7\\x11\\x46\\xdd\\x21\\x47\\x57\\x72\\x55\\x5d\\x1f\\xc2\\xf7\"\n\"\\x97\\x05\\xc2\\xfb\\xb8\\x15\\xc2\\xac\\x5e\\x42\\xfb\\x0e\\x40\\xfb\\x00\\x35\\x56\\x68\\xb8\\xcf\\xf7\\x12\\xd6\\xf7\\x01\\xe1\\x1f\\x0e\\x39\\x79\\x1d\\x0e\"\n\"\\x70\\xf8\\x29\\x83\\x1d\\x0e\\x39\\x65\\x0a\\x0e\\xfb\\xc5\\xf8\\x3d\\xf8\\xa5\\x37\\x0a\\x0e\\x70\\x75\\x1d\\x0e\\x70\\x86\\x1d\\x0e\\xf7\\xd6\\x84\\x0a\\xf8\"\n\"\\x01\\xf9\\x6d\\x9f\\x0a\\x7e\\x4b\\x5b\\x0a\\x7d\\x84\\x48\\x1d\\x0e\\x39\\x7b\\x0a\\x0e\\x47\\x1d\\x0e\\xf7\\x8f\\xf7\\x43\\x29\\x0a\\x2c\\x1d\\xd0\\xf7\\xd8\"\n\"\\x05\\xd1\\x9a\\xb8\\xb6\\xc5\\x1b\\xb2\\xa3\\x74\\x68\\x7f\\x8a\\x81\\x89\\x80\\x1f\\x41\\xfb\\xee\\x20\\x1d\\xd0\\xf7\\xd8\\x05\\xd3\\x9a\\xb8\\xb4\\xca\\x1b\"\n\"\\xb1\\x9f\\x77\\x67\\x7f\\x89\\x7c\\x88\\x7d\\x1f\\x43\\xfb\\xe8\\x20\\x1d\\xd8\\xf7\\xfe\\x05\\x91\\xa9\\x8d\\x97\\x9e\\x1a\\xdb\\x57\\xb9\\x31\\x47\\x55\\x72\"\n\"\\x52\\x54\\x1e\\xbd\\x7d\\x5b\\xab\\x4d\\x1b\\x49\\x5d\\x73\\x49\\x50\\x1f\\x9c\\xdc\\x05\\x0e\\x70\\x34\\x1d\\x0e\\x70\\x36\\x0a\\x0e\\x70\\xf7\\xcc\\xf8\\xb0\"\n\"\\x23\\x1d\\xfb\\x35\\xfd\\x8a\\x9b\\x0a\\xf7\\x5c\\xf7\\x13\\x48\\xdb\\x20\\x48\\x54\\x6e\\x4f\\x5d\\x1f\\xf7\\x03\\x74\\x15\\xc1\\xad\\x5f\\x45\\xfb\\x12\\x41\"\n\"\\xfb\\x00\\x34\\x57\\x5f\\x1d\\x70\\xf8\\x9b\\x29\\x0a\\x7a\\x3b\\x05\\xc7\\x77\\x5f\\xa8\\x46\\x1b\\x38\\x3b\\x5f\\x40\\x55\\x1f\\x59\\x44\\x6d\\x2f\\x35\\x1a\"\n\"\\xfb\\x10\\xd1\\x3b\\xf6\\xce\\xc3\\xa8\\xc5\\xb9\\x1e\\x4f\\xfb\\xae\\x20\\x1d\\xf7\\x35\\xf9\\x8a\\x05\\xfb\\xae\\x24\\x15\\xc1\\xae\\x5f\\x46\\xfb\\x13\\x41\"\n\"\\xfb\\x00\\x33\\x55\\x68\\xb8\\xcf\\xf7\\x11\\xd7\\xf7\\x02\\xe1\\x1f\\x0e\\xfb\\x8d\\x8d\\x1d\\x0e\\x39\\xf8\\xdc\\xf8\\x02\\x5e\\x1d\\x3c\\x48\\x76\\x65\\x60\"\n\"\\x1e\\x60\\x65\\x6f\\x52\\x59\\x9c\\x1d\\x84\\x82\\x1a\\x5e\\x8f\\x1d\\x0e\\xfb\\xc5\\x6f\\x0a\\x0e\\x70\\x4f\\x0a\\x0e\\x39\\xf7\\xf2\\x16\\xf7\\xc1\\xf8\\xb0\"\n\"\\x05\\xfb\\x28\\x06\\xfb\\x58\\xfc\\x1f\\x6d\\xf8\\x1f\\x05\\xfb\\x28\\x06\\xd5\\xfc\\xb0\\x05\\x0e\\xf7\\x20\\x38\\x0a\\x0e\\x39\\xf8\\x2f\\xf7\\xa6\\x15\\xf7\"\n\"\\x81\\xf7\\x9e\\x05\\xfb\\x3c\\x06\\xfb\\x0f\\xfb\\x37\\x58\\xf7\\x37\\x05\\xfb\\x3c\\x06\\xf7\\x03\\xfb\\x9e\\xfb\\x7d\\xfb\\xa6\\x05\\xf7\\x3c\\x06\\xf7\\x0f\"\n\"\\xf7\\x3c\\xc6\\xfb\\x3c\\x05\\xf7\\x3c\\x06\\x0e\\x39\\x50\\x1d\\x0e\\xfb\\x1e\\x44\\x1d\\x0e\\xfb\\x8d\\xf8\\x6c\\x22\\x1d\\x3f\\x06\\x3a\\x89\\x54\\x59\\x7a\"\n\"\\x33\\x5e\\xfb\\x67\\x18\\x61\\x83\\x71\\x76\\x5f\\x1b\\x7f\\x06\\x87\\x06\\x77\\x2f\\x8f\\x8a\\x05\\x98\\x06\\xad\\x9f\\x7d\\x73\\x85\\x89\\x7e\\x88\\x7c\\x1f\"\n\"\\x5e\\xfb\\x66\\x05\\x88\\x7e\\x8a\\x7e\\x7d\\x1a\\x4f\\xb2\\x63\\xc5\\x1e\\xd8\\x06\\xa0\\xee\\x05\\x68\\x06\\x72\\x7d\\x94\\x9b\\x95\\x8d\\x98\\x8e\\x9c\\x1f\"\n\"\\xb5\\xf7\\x57\\x05\\x8e\\x9a\\x8d\\x9b\\x95\\x1a\\xa6\\x7e\\xa0\\x76\\x94\\x1e\\x7f\\x91\\x83\\x8d\\x72\\x8f\\xd4\\x93\\xab\\xa8\\x9b\\xd3\\xb4\\xf7\\x57\\x18\"\n\"\\x93\\xb8\\x96\\x96\\xb1\\x8c\\x08\\xb0\\x06\\x0e\\xfb\\xfa\\xf7\\xe3\\xf9\\x6d\\x15\\x3b\\x06\\xfb\\x5a\\xfe\\x35\\x05\\xdb\\x06\\x0e\\xfb\\x8d\\xa8\\xfb\\x5c\"\n\"\\x15\\xd8\\x06\\xdc\\x8d\\xc2\\xbd\\x9c\\xe3\\xb8\\xf7\\x67\\x18\\xb5\\x93\\xa5\\xa0\\xb7\\x1b\\x98\\x06\\x8f\\x06\\x9f\\xe7\\x87\\x8c\\x05\\x7d\\x06\\x69\\x77\"\n\"\\x99\\xa3\\x91\\x8d\\x98\\x8e\\x9a\\x1f\\xb8\\xf7\\x66\\x05\\x8e\\x98\\x8c\\x98\\x99\\x1a\\xc7\\x64\\xb3\\x51\\x1e\\x3d\\x06\\x76\\x28\\x05\\xaf\\x06\\xa4\\x99\"\n\"\\x82\\x7b\\x81\\x89\\x7e\\x88\\x7a\\x1f\\x61\\xfb\\x57\\x05\\x88\\x7c\\x89\\x7b\\x81\\x1a\\x70\\x98\\x76\\xa0\\x82\\x1e\\x97\\x85\\x93\\x89\\xa4\\x87\\x42\\x83\"\n\"\\x6b\\x6e\\x7b\\x43\\x62\\xfb\\x57\\x18\\x83\\x5e\\x80\\x80\\x65\\x8a\\x08\\x65\\x06\\x0e\\x55\\xf8\\x8c\\xf8\\x2f\\x15\\x58\\x7d\\x7c\\x7c\\x65\\x1b\\x75\\x7e\"\n\"\\x91\\x9e\\x76\\x1f\\x5a\\xb5\\x05\\x9c\\x77\\x73\\x93\\x6b\\x1b\\x3a\\x57\\x5b\\x2a\\x71\\x1f\\xd9\\x06\\xbd\\x99\\x9a\\x9a\\xb1\\x1b\\xa0\\x9a\\x85\\x79\\x9f\"\n\"\\x1f\\xbb\\x61\\x05\\x79\\xa0\\xa2\\x83\\xac\\x1b\\xdb\\xc2\\xbe\\xea\\xa2\\x1f\\x0e\\xfb\\xc5\\xa5\\xfb\\x4e\\x15\\x23\\x0a\\xb8\\xf7\\x66\\xa3\\xf7\\xc9\\x05\"\n\"\\x48\\x06\\x20\\xfb\\xc9\\x05\\xda\\xf8\\x06\\xd7\\x1d\\x39\\xf8\\x2e\\xf8\\x47\\x15\\xb1\\x7f\\x97\\x72\\x4f\\x1a\\xf7\\x1a\\x06\\x8e\\xa3\\x8c\\x94\\x95\\x1a\"\n\"\\xcd\\x5f\\xc9\\x4a\\xa5\\x1e\\x7b\\x91\\x7c\\x8e\\x73\\x8e\\x9e\\xe2\\x18\\x49\\x06\\x78\\x35\\x33\\x84\\x47\\x65\\x5a\\x45\\x19\\x59\\x44\\x69\\x21\\x37\\x1a\"\n\"\\x3b\\xb7\\x44\\xcf\\x71\\x1e\\x9b\\x84\\x9c\\x87\\xa3\\x87\\x75\\x23\\x18\\xcd\\x06\\xa0\\xf1\\xf7\\x09\\x91\\xeb\\xdc\\xaf\\xf7\\x0e\\x19\\xfb\\x1a\\x06\\x73\"\n\"\\x50\\x71\\x6e\\x62\\x81\\x08\\x4a\\x8f\\x15\\x66\\x9b\\x7e\\xa6\\xc2\\x1a\\xd3\\xa3\\xdc\\xaf\\xbc\\x1e\\x9a\\xa0\\xa0\\x99\\xa5\\x92\\x08\\x0e\\x39\\xf8\\x5b\"\n\"\\xf8\\x07\\x15\\xfb\\x1f\\x06\\x88\\x9a\\x87\\x9b\\x82\\xad\\x08\\x81\\xb0\\x89\\x94\\xa0\\x1d\\xfb\\x1b\\x3a\\x47\\x72\\x5b\\x57\\x1e\\x5a\\x5e\\x6d\\x4d\\x52\"\n\"\\x1a\\x6f\\x8f\\x7a\\xa1\\x4d\\x1e\\x4f\\x06\\x7f\\x54\\x05\\xe4\\x06\\x8f\\x6f\\x8c\\x7f\\x7c\\x1a\\x45\\x63\\x59\\x23\\x4e\\x1e\\xac\\x26\\x05\\xa0\\xbc\\xa8\"\n\"\\x92\\xb0\\x1b\\xa6\\xa2\\x87\\x80\\xb8\\x1f\\x7f\\xbc\\x9f\\x88\\xa6\\x1b\\xbc\\xb5\\x97\\xac\\xcb\\x1f\\x79\\xf7\\x01\\x05\\x76\\x5e\\x6a\\x83\\x67\\x1b\\x7a\"\n\"\\x74\\x8e\\x90\\x71\\x1f\\x94\\x5f\\x88\\x8b\\x79\\x1b\\x6c\\x7f\\x87\\x6e\\x4a\\x1f\\xf7\\x03\\xd9\\xb3\\xc1\\xd4\\x1a\\x92\\x8b\\x91\\x89\\x97\\x1e\\xf7\\x0e\"\n\"\\x06\\x0e\\xf8\\x5f\\x32\\x0a\\x0e\\x39\\xf8\\xd2\\xf7\\xf4\\x15\\xfb\\x1f\\x06\\xf7\\x9f\\xf7\\xf4\\x05\\xfb\\x1c\\x06\\xfb\\x4f\\xfb\\x92\\x36\\xf7\\x92\\x05\"\n\"\\xfb\\x1f\\x06\\xf7\\x14\\xfb\\xf4\\x22\\x0a\\x7f\\x4f\\x05\\xf7\\x26\\x06\\x80\\x57\\x05\\xfb\\x26\\x06\\x7e\\x4f\\x05\\xf7\\x26\\x06\\x65\\xfb\\x48\\x20\\x1d\"\n\"\\xb1\\xf7\\x48\\x05\\xf7\\x24\\x06\\x98\\xc7\\x05\\xfb\\x24\\x06\\x96\\xbf\\x05\\xf7\\x24\\x06\\x0e\\x39\\xf8\\xef\\xf8\\x77\\x15\\xfb\\x0f\\x06\\x9a\\xb4\\x05\"\n\"\\xd2\\xa7\\xab\\xad\\xb2\\x1b\\x9c\\x95\\x88\\x7e\\xa4\\x1f\\xb7\\xf7\\x06\\x05\\x98\\x63\\x77\\x8f\\x6b\\x1b\\x22\\x44\\x4c\\xfb\\x1f\\x55\\x1f\\x74\\x50\\x05\"\n\"\\xfb\\x1e\\x06\\x76\\x27\\x05\\xf7\\x0f\\x06\\xfb\\x1f\\xfc\\x0c\\x05\\x38\\x6c\\x74\\x6f\\x67\\x1b\\x7b\\x78\\x93\\x98\\x7a\\x1f\\x5a\\xfb\\x07\\x05\\x7b\\xa9\"\n\"\\xa3\\x85\\xab\\x1b\\xf7\\x03\\xd4\\xce\\xf7\\x2e\\xc3\\x1f\\xf7\\x20\\xf8\\x12\\x05\\xf7\\x1d\\x06\\x0e\\x39\\xf8\\xe1\\xf8\\xb4\\x15\\x90\\xa4\\x8d\\x96\\x99\"\n\"\\x1a\\xdc\\x4b\\xbb\\x20\\x41\\x4b\\x74\\x62\\x5f\\x1e\\x62\\x66\\x73\\x58\\x5c\\x1a\\x63\\x97\\x6e\\xa5\\x70\\x1e\\x57\\x6a\\x7c\\x7f\\x76\\x73\\x08\\x71\\x6d\"\n\"\\x7e\\x65\\x5f\\x1a\\x64\\x9f\\x67\\xad\\x74\\x1e\\xf7\\x2a\\x27\\x05\\xbd\\x6c\\x90\\x85\\x70\\x1a\\x61\\x64\\x6b\\x58\\x61\\x74\\x9e\\xaf\\x95\\x8c\\x92\\x8d\"\n\"\\x9c\\x1e\\xfb\\x17\\x06\\x84\\x71\\x89\\x7d\\x78\\x1a\\x34\\xcf\\x54\\xf7\\x00\\xe3\\xd3\\xaa\\xc6\\xbd\\x1e\\xad\\xb4\\x9f\\xbd\\xba\\x1a\\xb5\\x7c\\xa9\\x6a\"\n\"\\xa6\\x1e\\xe7\\xad\\xb1\\xbe\\xe6\\x1a\\xbb\\x76\\xae\\x5b\\xa9\\x1e\\xfb\\x04\\xd1\\x05\\x58\\xaa\\x77\\xa0\\xa1\\x1a\\xaf\\xab\\xa5\\xb6\\xb3\\xa1\\x76\\x65\"\n\"\\x87\\x8b\\x84\\x8a\\x84\\x1e\\xfb\\x60\\xfb\\xbd\\x15\\x6e\\x9c\\x81\\x9a\\xa1\\x1a\\xae\\x9d\\xa5\\xb1\\x9f\\x1e\\xf7\\x13\\x3f\\x05\\xae\\x76\\x96\\x7d\\x73\"\n\"\\x1a\\x6a\\x79\\x75\\x5c\\x75\\x1e\\x0e\\x39\\xf8\\x89\\xf8\\xa4\\x15\\x9d\\x72\\x66\\x97\\x68\\x1b\\x63\\x60\\x7f\\x78\\x68\\x1f\\x4e\\xd8\\x38\\x47\\xc9\\x3c\"\n\"\\x05\\x68\\x61\\x77\\x54\\x58\\x1a\\x75\\x8e\\x7a\\x93\\x73\\x1e\\x2d\\x3e\\xc1\\x46\\xe9\\xd9\\x05\\x79\\xa0\\xb7\\x7e\\xb1\\x1b\\xb0\\xa2\\x91\\xa3\\xbb\\x1f\"\n\"\\xc6\\x40\\xde\\xcf\\x4f\\xd7\\x05\\xaf\\xb9\\x9f\\xc1\\xbe\\x1a\\x9f\\x88\\x9b\\x84\\xa3\\x1e\\xe6\\xd6\\x55\\xd0\\x05\\xfb\\x69\\xfb\\x21\\x15\\xbe\\xae\\x68\"\n\"\\x59\\x42\\x53\\x52\\x43\\x58\\x68\\xad\\xbe\\xd5\\xc3\\xc3\\xd3\\x1f\\x0e\\xfc\\x24\\xf7\\xeb\\xf9\\x6d\\xe1\\x1d\\xc2\\x06\\xd1\\xf7\\x15\\x05\\x0e\\xfb\\x1e\"\n\"\\xf7\\xc6\\x89\\x0a\\xf7\\xfe\\x16\\xa6\\xf7\\x11\\x05\\x3a\\x06\\x94\\xbd\\xab\\xa8\\xc5\\x95\\x95\\xb9\\x18\\x32\\x84\\x4b\\x52\\x7d\\x34\\x74\\xfb\\x01\\x18\"\n\"\\x0e\\x39\\xf7\\x1b\\xf7\\x6e\\x53\\x0a\\xf7\\x51\\xfb\\x06\\x53\\x0a\\x0e\\xfb\\xc5\\xf7\\x14\\xf7\\x6e\\x53\\x0a\\x0e\\xfb\\xc5\\xf7\\xd3\\xb0\\x1d\\x0e\\x70\"\n\"\\xf8\\x3d\\xf8\\xa5\\x37\\x0a\\xf7\\x8e\\xf3\\xa1\\x1d\\x70\\xf8\\x3d\\xf8\\xa5\\x37\\x0a\\xf7\\xb6\\xf7\\xb9\\xd2\\x1d\\x39\\xf9\\x04\\xf7\\xcb\\x15\\xfc\\xcb\"\n\"\\x06\\x75\\x23\\x05\\xf8\\xcb\\x06\\x0e\\x39\\xf9\\x06\\xf8\\x79\\x15\\xfb\\x47\\x06\\xba\\xf7\\x74\\x05\\xfb\\x19\\x06\\x5b\\xfb\\x74\\x05\\xfb\\x47\\x06\\x72\"\n\"\\xfb\\x08\\x05\\xf7\\x47\\x06\\xfb\\x0b\\xfc\\xc7\\x05\\xf7\\x1a\\x06\\xf7\\x0b\\xf8\\xc7\\x05\\xf7\\x47\\x06\\x0e\\x39\\xf9\\x03\\xf8\\x79\\x15\\xfb\\x47\\x06\"\n\"\\xbb\\xf7\\x74\\x05\\xfb\\x1a\\x06\\x5b\\xfb\\x74\\xd8\\x1d\\xfb\\x73\\xd8\\x1d\\xfb\\x74\\x05\\xf7\\x1a\\x06\\xbb\\xf7\\x74\\x05\\xf7\\x46\\x06\\xa4\\xf7\\x08\"\n\"\\x05\\xfb\\x47\\x06\\xbb\\xf7\\x73\\x05\\xf7\\x46\\x06\\x0e\\x55\\x0a\\x39\\xf9\\x40\\x22\\x1d\\xfb\\xc2\\x06\\x4a\\x53\\x71\\x55\\x58\\x1f\\x52\\x4e\\x6b\\x3f\"\n\"\\x3e\\x1a\\x29\\xca\\x4a\\xef\\x86\\x1e\\x2a\\xfc\\x5e\\x05\\xed\\x06\\xf7\\x48\\xf9\\xe3\\x05\\xc9\\x06\\xfb\\x48\\xfd\\xe3\\x05\\xed\\x06\\xf7\\x48\\xf9\\xe3\"\n\"\\x05\\xb7\\x06\\x0e\\xfb\\xb4\\xf7\\x96\\xf8\\x3d\\x15\\x3d\\x46\\x46\\x3e\\x4f\\xb8\\x5f\\xc8\\xd9\\xd3\\xd1\\xd7\\xc6\\x5c\\xb8\\x4d\\x1f\\x0e\\xe7\\xf7\\x11\"\n\"\\x86\\x0a\\xe9\\x92\\xc9\\xc3\\x97\\xe3\\xa2\\xf7\\x01\\x18\\x0e\\xfb\\x1e\\xe7\\xf7\\x11\\xa8\\x1d\\xef\\xa3\\x1d\\xfb\\x1e\\xf7\\x78\\xf9\\x6d\\xa8\\x1d\\xec\"\n\"\\xa3\\x1d\\x39\\xf7\\xda\\xb0\\x1d\\xf7\\x7b\\xf7\\x07\\x15\\xfb\\x1c\\xf7\\x26\\x73\\xfb\\x06\\xdd\\x32\\xfb\\x0c\\x32\\x72\\xfb\\x09\\xf7\\x5b\\xf7\\x28\\x05\"\n\"\\x0e\\xf7\\xfe\\xf7\\xa5\\xf7\\x26\\x27\\x1d\\xf8\\x00\\xf7\\x26\\x27\\x1d\\xf8\\x00\\xf7\\x26\\x27\\x1d\\x0e\\xf7\\xfe\\xf9\\x22\\xf9\\x76\\x15\\xfc\\xda\\xfd\"\n\"\\x8b\\x05\\xcd\\x06\\xf8\\xdb\\xf9\\x8b\\x05\\xfc\\x29\\x8c\\x15\\x2c\\x34\\x35\\x2e\\x48\\xbf\\x59\\xd2\\x67\\x1d\\x7a\\x3d\\x15\\xae\\xa5\\x73\\x6b\\x5e\\x63\"\n\"\\x64\\x5e\\x68\\x71\\xa2\\xaa\\xb8\\xb4\\xb4\\xb7\\x1f\\xf7\\x79\\xfc\\x15\\x15\\x2d\\x34\\x35\\x2e\\x48\\xbf\\x59\\xd1\\x67\\x1d\\x7b\\x3d\\x15\\xae\\xa4\\x73\"\n\"\\x6a\\x5f\\x63\\x64\\x5e\\x69\\x71\\xa2\\xaa\\xb8\\xb3\\xb4\\xb8\\x1f\\xf8\\x15\\xd9\\x15\\x2d\\x34\\x35\\x2e\\x48\\xbf\\x59\\xd1\\x67\\x1d\\x7b\\x3d\\x15\\xae\"\n\"\\xa4\\x73\\x6a\\x5f\\x63\\x64\\x5e\\x69\\x71\\xa2\\xaa\\xb8\\xb3\\xb4\\xb8\\x1f\\x0e\\x70\\xf7\\xca\\xf7\\xe7\\x15\\x7d\\x49\\x82\\x7f\\x47\\x62\\x43\\x5f\\x67\"\n\"\\x6b\\x75\\x67\\x08\\x74\\x64\\x7d\\x58\\x5f\\x1a\\xfb\\x02\\xde\\x47\\xf7\\x18\\xe1\\xd1\\xa8\\xc5\\xc0\\x1e\\xb2\\xb6\\xa1\\xbc\\x9e\\xdf\\x08\\xfb\\x1c\\x06\"\n\"\\x34\\x7b\\x59\\x57\\x48\\x1b\\x55\\x65\\xaf\\xbe\\x9f\\x91\\xa0\\x95\\x9e\\x1f\\x9a\\xa5\\x96\\x95\\xc2\\xb1\\xe9\\xcd\\xb2\\xc2\\x92\\xd8\\x08\\xfb\\x12\\xc2\"\n\"\\xd7\\x1d\\xfb\\xc5\\xf7\\x43\\x4c\\x1d\\x0e\\xfb\\xc5\\xf8\\x6f\\x30\\x1d\\x0e\\xfb\\xc5\\xf7\\xa6\\xf9\\x89\\x29\\x1d\\xfb\\xc5\\xf8\\x52\\xf9\\x7c\\x41\\x0a\"\n\"\\xfb\\xc5\\xf8\\x67\\xf9\\x66\\x2d\\x0a\\xfb\\xc5\\xf8\\x31\\xf9\\x86\\x53\\x1d\\xfb\\xc5\\xf8\\x0d\\xf9\\x79\\x3b\\x0a\\xfb\\xc5\\xf7\\xaf\\xf9\\x79\\x38\\x1d\"\n\"\\xfb\\xc5\\xf7\\xda\\xf9\\x99\\x2e\\x1d\\x0e\\xfb\\xc5\\xf7\\x2e\\x16\\x47\\x21\\xbc\\x0a\\x6d\\x78\\x65\\x6f\\x56\\x1d\\x63\\x7c\\x7f\\x89\\x87\\x7b\\x1f\\xb4\"\n\"\\xc9\\x05\\x0e\\xfb\\xc5\\xf7\\xca\\x8a\\x0a\\xfb\\xc5\\xf7\\x42\\x16\\x62\\x7a\\x78\\x82\\x73\\x7a\\x08\\x61\\x6e\\x72\\x60\\x61\\x1a\\x5c\\xbe\\x6e\\xde\\xa5\"\n\"\\x9e\\x8d\\x92\\xab\\x1e\\x95\\xbf\\x05\\x83\\x76\\x74\\x88\\x70\\x1b\\x6a\\x7a\\x98\\xa6\\xa2\\x96\\xa4\\xa2\\xa8\\x1f\\x9e\\xa3\\x91\\x8f\\xcd\\xb1\\x08\\x0e\"\n\"\\xfb\\xc5\\xf7\\xee\\xf8\\xf6\\x3a\\x1d\\xf7\\xfe\\xaa\\x0a\\xf7\\xfe\\x6c\\x0a\\x0e\\xfb\\xa0\\xf8\\x20\\xf7\\xea\\x15\\xfb\\xaf\\x27\\x0a\\xf7\\xb0\\x06\\xb3\"\n\"\\xf7\\x27\\x15\\x82\\x96\\x88\\x92\\x94\\x1a\\x90\\x8b\\x8f\\x8c\\x8f\\x1e\\xb2\\xf7\\x48\\x05\\x8d\\x96\\x8c\\x94\\x93\\x1a\\xb8\\x61\\xa6\\x43\\x30\\x56\\x66\"\n\"\\x40\\x7a\\x1e\\xda\\x06\\xab\\x95\\x9d\\x97\\xb2\\x1b\\xaa\\x98\\x83\\x7a\\x7e\\x83\\x7e\\x7f\\x85\\x1f\\x7e\\x85\\x8b\\x8b\\x60\\x85\\x69\\x85\\x18\\x41\\x80\"\n\"\\x5b\\x5a\\x4c\\x1a\\x5b\\xab\\x6d\\xbe\\xb3\\xaa\\x98\\xac\\xaf\\x1e\\x89\\x81\\x8b\\x89\\x87\\x1a\\x85\\x8c\\x87\\x8e\\x85\\x1e\\xe7\\x06\\x41\\xf7\\x16\\x15\"\n\"\\x5b\\x81\\x6d\\x6f\\x62\\x1b\\x70\\x7c\\x95\\x9f\\xa7\\xa1\\x9f\\xb1\\x91\\x1f\\xa9\\x91\\x95\\x8c\\x05\\x8c\\x91\\x8f\\x8c\\x8d\\x1b\\x92\\x8d\\x8d\\x8c\\x92\"\n\"\\x8e\\x08\\x0e\\x70\\xf7\\xe6\\xf8\\x39\\x15\\xcc\\xf7\\xc8\\x28\\x0a\\x3c\\xfc\\x09\\x27\\x4e\\x77\\x2d\\xef\\xc8\\x53\\xfb\\x9a\\x05\\xf8\\x87\\x21\\x1d\\xfb\"\n\"\\xf1\\x06\\xb6\\xf7\\x5e\\xf7\\x4f\\xf7\\x02\\x9f\\xe9\\x05\\x0e\\xf7\\x20\\x5e\\x0a\\x0e\\xf7\\xfe\\xf9\\x48\\xf7\\xce\\x15\\xf7\\xbe\\x21\\x1d\\xfb\\xbe\\x40\"\n\"\\x0a\\xf7\\xda\\x21\\x1d\\xfc\\x6b\\x06\\x80\\x57\\x05\\xb9\\x66\\x63\\x9d\\x49\\x1b\\x2d\\x36\\x62\\x3a\\x41\\x1f\\x38\\x2f\\x53\\xfb\\x29\\xfb\\x19\\x1a\\xfb\"\n\"\\x35\\xe9\\x20\\xf7\\x22\\xce\\xb7\\xa1\\xc7\\xc3\\x1e\\x7f\\x50\\x05\\xf8\\x7e\\x25\\x1d\\xfb\\xed\\x06\\xfb\\x1f\\xc0\\x15\\x57\\x64\\x66\\x76\\x55\\x1b\\x30\"\n\"\\x56\\xc9\\xf6\\xd1\\x9e\\xd6\\xae\\xca\\x1f\\xe2\\xba\\xcb\\xb7\\xd9\\x1b\\xc3\\xac\\x75\\x58\\x9e\\x1f\\x0e\\xfb\\xa5\\xf8\\x2e\\xf7\\xea\\x15\\xfb\\xc1\\x27\"\n\"\\x0a\\xf7\\xc1\\x06\\x55\\xf8\\x67\\x15\\xfb\\x06\\x36\\x2c\\xfb\\x14\\x41\\xbd\\x5d\\xda\\xcb\\xc0\\xa4\\xbc\\xb0\\x1f\\xa8\\xb0\\x9e\\xc7\\xc0\\x1a\\xd5\\x5a\"\n\"\\xb8\\x38\\x1e\\x7d\\x47\\x15\\xaf\\xa2\\x70\\x5f\\x3e\\x5e\\x4b\\x55\\x68\\x74\\xa7\\xb6\\xd8\\xb7\\xcb\\xc1\\x1f\\x0e\\xf7\\x8f\\x6e\\x1d\\x0e\\x2a\\x1d\\x0e\"\n\"\\xf7\\xbc\\xf8\\x47\\x15\\xca\\xf7\\xba\\x22\\x0a\\x3f\\xfb\\xf5\\x3f\\x5c\\x7a\\x38\\xd7\\xbb\\x4d\\xfb\\xba\\x20\\x1d\\xd6\\xf7\\xf5\\xd7\\xb8\\x9c\\xdd\\x05\"\n\"\\x0e\\x70\\x73\\x1d\\x0e\\xf7\\xc6\\xf9\\xbd\\xdd\\x1d\\xae\\xbd\\x9a\\x8c\\x96\\x91\\xa5\\x1f\\xf7\\xfe\\x06\\x69\\x1d\\xba\\x6f\\xaf\\x1e\\xb8\\x67\\x52\\xa3\"\n\"\\x45\\x1b\\x3f\\x42\\x70\\x5e\\x5d\\x1f\\xb9\\x69\\x48\\xa5\\x3c\\x1b\\x25\\x31\\x5f\\x3c\\x4f\\x1f\\x5b\\x4b\\x6b\\x28\\x34\\x1a\\xfb\\x0f\\xde\\x3f\\xf7\\x1a\"\n\"\\xdc\\xd8\\xa6\\xb9\\xbf\\x1e\\x5f\\xa7\\xcd\\x6e\\xd5\\x1b\\xf7\\x0b\\xf7\\x01\\xcf\\xf6\\xc0\\x1f\\xfc\\xcb\\xf7\\xb1\\x15\\xc9\\xb1\\x5e\\x43\\x5a\\x7d\\x56\"\n\"\\x73\\x61\\x1f\\x53\\x6c\\x5d\\x6c\\x57\\x1b\\x4f\\x64\\xb8\\xd2\\xf7\\x13\\xd6\\xf4\\xe6\\x1f\\xf8\\x63\\xfb\\x0a\\x15\\xfb\\x6c\\x06\\xd8\\xa0\\xb9\\xb4\\xcb\"\n\"\\x1b\\xc1\\xaa\\x6a\\x52\\x1f\\x0e\\x70\\xf7\\xfb\\xf7\\xf1\\x15\\x9a\\x06\\xd6\\xb1\\x6a\\x4a\\x5f\\x77\\x5f\\x69\\x6d\\x1f\\x6c\\x70\\x6f\\x82\\x54\\x8a\\x08\"\n\"\\x7d\\x06\\x73\\xfb\\x04\\x05\\x86\\xab\\x9c\\x89\\x9e\\x1b\\xe5\\xdb\\xb8\\xdc\\xc2\\x1f\\xac\\xbd\\xa2\\xd1\\xc1\\x1a\\xd2\\x67\\xbc\\x4d\\x99\\x1e\\xd6\\xa5\"\n\"\\xba\\xce\\xd9\\x1a\\xe4\\x3b\\xc5\\xfb\\x0e\\xfb\\x20\\x23\\x48\\x23\\x75\\x1e\\xfb\\x0b\\xfc\\xc2\\x20\\x1d\\xf7\\x06\\xf8\\xad\\x05\\xc0\\x96\\xad\\xa6\\xc3\"\n\"\\x1b\\xc3\\xac\\x73\\x62\\x6d\\x7c\\x6b\\x72\\x78\\x1f\\x79\\x75\\x6f\\x82\\x61\\x1b\\x0e\\xfb\\xc5\\xf7\\x98\\xf8\\xd1\\x15\\x4d\\xfb\\xb5\\x05\\xe9\\x06\\xe5\"\n\"\\xf8\\x3d\\x05\\x4c\\x06\\x59\\x73\\x59\\x72\\x3d\\x1b\\x7e\\x4e\\x05\\x0e\\x55\\xf7\\x14\\xf8\\x0c\\x15\\x72\\xfb\\x0c\\x05\\xf8\\x15\\x06\\x67\\xfb\\x3e\\x05\"\n\"\\xf7\\x0b\\x06\\xc8\\xf7\\xb6\\x05\\x0e\\x70\\xf7\\x26\\xfb\\x70\\x15\\xbd\\xf7\\x7f\\x05\\x6f\\xa4\\xa4\\x81\\xb8\\x1b\\xc4\\xaf\\x99\\xb4\\xbb\\x1f\\x62\\x9b\"\n\"\\x9f\\x7d\\xba\\x1b\\xa7\\x9f\\x90\\x98\\xa5\\x1f\\x9d\\xe1\\x05\\x88\\x81\\x87\\x8a\\x84\\x1b\\x7d\\x84\\x93\\x9a\\x96\\x8d\\x9b\\x90\\xa2\\x1f\\xde\\xf8\\x1a\"\n\"\\x22\\x0a\\x43\\xfb\\xe6\\x05\\x4c\\x7e\\x57\\x63\\x48\\x1b\\x5c\\x6e\\xa3\\xb1\\x94\\x8e\\x9d\\x8f\\x9e\\x1f\\xd2\\xf7\\xe1\\x22\\x0a\\xfb\\x36\\xfd\\x8c\\x05\"\n\"\\x0e\\xf7\\xfe\\xf8\\x51\\xf9\\x1d\\x15\\xf7\\x19\\x06\\x9c\\xdb\\x05\\xfc\\x01\\x27\\x0a\\xf7\\x1d\\x06\\x3b\\xfc\\x0c\\x05\\xea\\x06\\xf8\\x57\\x16\\xf7\\x31\"\n\"\\xf7\\xf1\\x41\\xfb\\xf1\\x05\\xe6\\x06\\xec\\xf8\\x5c\\x05\\xfb\\x1d\\x06\\xfb\\x32\\xfb\\xf3\\x80\\xf7\\xf3\\x05\\xfb\\x1e\\x06\\x2a\\xfc\\x5c\\x05\\xe6\\x06\"\n\"\\xd6\\xf7\\xf1\\x95\\xfb\\xf1\\x05\\x0e\\xdf\\x7d\\x1d\\xf7\\x58\\xf7\\x89\\xae\\x1d\\xf8\\xe0\\xae\\x0a\\xa7\\xfd\\x0f\\x15\\xfb\\x4c\\x06\\x99\\x9d\\x9e\\x99\"\n\"\\xd0\\xb4\\xbe\\xc1\\x1d\\x4d\\x52\\x23\\x7a\\x1e\\xe6\\x06\\xc5\\x92\\xa5\\xaa\\xb5\\x1b\\xac\\x9e\\x7a\\x6e\\x71\\x80\\x71\\x76\\x77\\x1f\\x78\\x78\\x75\\x7d\"\n\"\\x47\\x62\\x33\\x59\\x6b\\x64\\x76\\x3a\\x08\\xf7\\xc6\\x06\\x0e\\x55\\xf9\\x0a\\xf8\\x58\\x91\\x0a\\x68\\xfb\\x36\\x05\\xf7\\x0b\\x06\\xae\\xf7\\x36\\x05\\xf7\"\n\"\\x4b\\x06\\x5d\\xfb\\x69\\x15\\xfc\\x78\\x06\\x72\\xfb\\x0b\\x05\\xf8\\x78\\x06\\x0e\\xa8\\xf7\\x94\\xf7\\x20\\x15\\xf7\\x4f\\x06\\xda\\xc4\\xba\\x1d\\x49\\x1b\"\n\"\\xfb\\x33\\x06\\xa5\\xf7\\x0c\\x34\\x0a\\xc3\\xf7\\x9d\\x15\\xba\\xf7\\x6f\\x05\\xf7\\x2d\\x06\\xc1\\xaf\\x6c\\x5b\\x6e\\x80\\x64\\xc3\\x0a\\xf7\\x58\\xf7\\x90\"\n\"\\xae\\x1d\\xf8\\xe3\\xae\\x0a\\x9c\\xfc\\xb9\\x15\\x5d\\x06\\xc2\\xf7\\x97\\x05\\xfb\\x00\\x06\\xfb\\x6d\\xfb\\x98\\x7b\\x43\\x05\\xf7\\x45\\x33\\x1d\\xe9\\x06\"\n\"\\x9e\\xe8\\x05\\xb9\\x06\\xfb\\x0f\\xd4\\x15\\x22\\x06\\xf7\\x20\\xf7\\x3a\\x05\\x0e\\x55\\xcb\\x1d\\xfb\\x9b\\x5b\\x15\\x64\\x66\\x67\\x64\\x6f\\xa0\\x76\\xa8\"\n\"\\xb2\\xb0\\xae\\xb1\\xa9\\x77\\xa0\\x6d\\x1f\\xd3\\xf7\\xe6\\x15\\x64\\x66\\x67\\x64\\x6f\\xa0\\x76\\xa8\\xb2\\xb0\\xaf\\xb0\\xa9\\x77\\xa0\\x6d\\x1f\\x0e\\xfb\"\n\"\\xfa\\xf7\\xe3\\xf9\\x6d\\x15\\x3b\\x06\\x38\\xfc\\x19\\x05\\xdb\\x06\\x6b\\xfb\\x2b\\x15\\x3b\\x06\\x38\\xfc\\x19\\x05\\xdb\\x06\\x0e\\xfb\\x82\\xf7\\xcf\\xf9\"\n\"\\x42\\x15\\x38\\x47\\x47\\x38\\x38\\xcf\\x46\\xdd\\xe0\\xcf\\xce\\xe0\\xde\\x47\\xcf\\x37\\x1f\\x8c\\x4c\\x15\\xbb\\xb3\\x64\\x5a\\x59\\x63\\x64\\x59\\x5c\\x63\"\n\"\\xb3\\xbb\\xbc\\xb3\\xb3\\xbc\\x1f\\x0e\\x70\\xf7\\xf4\\xf9\\x6d\\x23\\x1d\\xfb\\x5d\\xfe\\x47\\x9b\\x0a\\xf7\\x5d\\xf7\\x12\\x48\\xdb\\x21\\x48\\x53\\x6e\\x4f\"\n\"\\x5d\\x1f\\xf7\\x03\\x74\\xe9\\x1d\\x35\\x56\\x5f\\x1d\\xf7\\x58\\xf7\\x80\\x66\\x0a\\xf8\\x90\\xf7\\x49\\x15\\xfc\\xd9\\xfd\\x73\\x05\\xe0\\x06\\xf8\\xd9\\xf9\"\n\"\\x73\\x05\\x8f\\xfc\\xb9\\x15\\x5d\\x06\\xc2\\xf7\\x97\\x05\\xfb\\x00\\x06\\xfb\\x6e\\xfb\\x98\\x7c\\x43\\x05\\xf7\\x45\\x33\\x1d\\xe8\\x06\\x9f\\xe8\\x05\\xb9\"\n\"\\x06\\xfb\\x0f\\xd4\\x15\\x21\\x06\\xf7\\x20\\xf7\\x3a\\x05\\x0e\\xfb\\xc5\\xf8\\x1b\\xf8\\x00\\x15\\xfb\\x4c\\x06\\x98\\x9d\\x9f\\x99\\xcf\\xb4\\xbf\\xc1\\x1d\"\n\"\\x4c\\x52\\x23\\x7b\\x1e\\xe6\\x06\\xc5\\x91\\xa5\\xaa\\xb6\\x1b\\xac\\x9e\\x7a\\x6e\\x71\\x7f\\x71\\x77\\x77\\x1f\\x78\\x78\\x76\\x7d\\x45\\x62\\x34\\x59\\x6b\"\n\"\\x64\\x76\\x3a\\x08\\xf7\\xc6\\x06\\x0e\\xee\\xf7\\xf8\\xf7\\xcd\\x15\\xe6\\x06\\xaf\\x9c\\x80\\x73\\x85\\x89\\x83\\x87\\x7a\\x1f\\x83\\x6a\\x85\\x6c\\x7c\\x1a\"\n\"\\x82\\x8c\\x85\\x8f\\x7e\\x1e\\xf1\\x06\\x90\\xa0\\x05\\x82\\x91\\x88\\x91\\x94\\x1a\\x8c\\x98\\x05\\x97\\xd2\\x8e\\xa0\\x9c\\x1a\\xa1\\x80\\x99\\x6f\\x98\\x1e\"\n\"\\xcb\\xa8\\xac\\xba\\xcb\\x1a\\xc6\\x6a\\xa9\\x49\\x1e\\xfb\\x82\\x06\\x2d\\xfc\\x4e\\x05\\xeb\\x06\\xc1\\xf7\\x92\\x15\\xa2\\xf7\\x00\\x05\\xf1\\x06\\xb3\\x9a\"\n\"\\x82\\x73\\x78\\x84\\x73\\x82\\x80\\x1f\\x7c\\x80\\x79\\x85\\x6a\\x1b\\xc2\\xf7\\xf1\\x15\\xfb\\x8a\\xb1\\x0a\\xf7\\x8b\\xf7\\x79\\xf7\\x72\\xf7\\x84\\xf7\\x43\"\n\"\\xfb\\x15\\xf7\\x14\\x9c\\x0a\\xfb\\x20\\x25\\xf3\\xf7\\x21\\xf7\\x57\\xf7\\x4b\\xf7\\x49\\xf7\\x58\\x1f\\x0e\\x55\\xcb\\x1d\\x0e\\x70\\xf7\\xf7\\xf8\\xf5\\x15\"\n\"\\xb1\\x70\\xae\\x65\\xa3\\x62\\x08\\xa0\\x65\\x77\\x91\\x6b\\x1b\\x45\\x48\\x6d\\x58\\x5e\\x1f\\x50\\x48\\x65\\x21\\x29\\x1a\\xfb\\x12\\xde\\x40\\xf7\\x1f\\xf3\"\n\"\\xe1\\xb4\\xda\\xc5\\x1e\\xbf\\xd0\\xa7\\xe3\\xe6\\x1a\\xf7\\x14\\x5a\\xdf\\xfb\\x16\\xec\\x1e\\xe8\\xb4\\x60\\xb6\\x23\\x5e\\x85\\x8f\\x86\\x8d\\x89\\x8d\\x19\"\n\"\\x6f\\x9b\\x7a\\x95\\x7e\\x92\\x73\\x95\\x19\\x45\\x59\\xb1\\x73\\x91\\x87\\xa5\\x79\\x19\\x33\\x62\\xb4\\x60\\x05\\xf7\\x15\\xfb\\x19\\x15\\xa3\\xa6\\x82\\x7d\"\n\"\\x9f\\x1f\\xa2\\x7a\\x95\\x72\\x63\\x1a\\xfb\\x1c\\x45\\x26\\x2c\\x73\\x73\\x94\\x9a\\x78\\x1e\\x75\\x9e\\x81\\xa8\\xb8\\x1a\\xbd\\x98\\xc1\\xa3\\xb4\\x1e\\xbf\"\n\"\\xa8\\xb6\\xa7\\xbe\\x1b\\x0e\\x55\\xf8\\x98\\xf8\\x50\\x15\\xfb\\x31\\xfb\\x15\\x26\\xf7\\x15\\x25\\x36\\xf0\\xfb\\x14\\xfb\\x2f\\xfb\\x14\\xcd\\x37\\xf7\\x2f\"\n\"\\xf7\\x14\\xf0\\xfb\\x15\\xf1\\xdf\\x26\\xf7\\x15\\xf7\\x31\\xf7\\x15\\x05\\x0e\\xfb\\xc5\\xf7\\x74\\x66\\x0a\\x0e\\xee\\xf9\\x18\\xf8\\x43\\x15\\x8d\\x9c\\x8c\"\n\"\\x92\\x94\\x1a\\xd8\\x4e\\xbe\\x2e\\x3f\\x48\\x6a\\x4e\\x5b\\x1e\\x60\\x54\\x70\\x3b\\x3f\\x1a\\x28\\xc7\\x4f\\xed\\xf7\\x06\\xe1\\xcb\\xf4\\xa7\\x1e\\x2f\\x06\"\n\"\\x53\\x79\\x63\\x6d\\x52\\x1b\\x53\\x6d\\xac\\xc8\\xbc\\x9b\\xc1\\xa4\\xb1\\x1f\\xb5\\xa8\\xb0\\xa0\\xb9\\x1b\\xc0\\xa2\\x73\\x55\\x1f\\x73\\xf7\\xcc\\x15\\xfb\"\n\"\\x8b\\xb1\\x0a\\xf7\\x8c\\xf7\\x79\\xf7\\x72\\xf7\\x84\\xf7\\x44\\xfb\\x15\\xf7\\x13\\x9c\\x0a\\xfb\\x21\\x25\\xf2\\xf7\\x22\\xf7\\x57\\xf7\\x4b\\xf7\\x49\\xf7\"\n\"\\x59\\x1f\\x0e\\xdf\\x24\\x0a\\xf7\\x7b\\xf8\\x11\\x2b\\x0a\\xdf\\x24\\x0a\\xa7\\xf8\\x11\\x29\\x1d\\xdf\\x24\\x0a\\xb2\\xf8\\x01\\x38\\x1d\\xdf\\x24\\x0a\\x3f\"\n\"\\xf8\\x11\\x3d\\x0a\\xdf\\x24\\x0a\\xdd\\xf8\\x22\\x2e\\x1d\\x0e\\xdf\\x24\\x0a\\xf7\\x5e\\xf8\\x04\\x15\\x69\\x7d\\x79\\x7b\\x75\\x1b\\x7f\\x88\\x8c\\x93\\x79\"\n\"\\x1f\\x59\\xa0\\x05\\x9b\\x67\\x82\\x8d\\x71\\x1b\\x54\\x61\\x61\\x3f\\x73\\xb9\\x1d\\xa1\\x86\\x9b\\x4a\\x1d\\xdf\\xf8\\x19\\x74\\x15\\xf7\\x44\\x8c\\xf7\\x1c\"\n\"\\xf3\\xb4\\xf7\\x3b\\x08\\xfb\\x23\\x06\\x2f\\x6e\\x44\\x57\\x2a\\x1b\\x2a\\x5a\\xc1\\xf5\\xdd\\x51\\x0a\\xf7\\x21\\x06\\x8e\\xa5\\x8c\\x96\\x97\\x1a\\xf7\\x12\"\n\"\\x22\\xdf\\xfb\\x2f\\xfb\\x0f\\x20\\x56\\x26\\x3a\\x1e\\x44\\x33\\x5f\\xfb\\x1b\\xfb\\x15\\x1a\\xfb\\x25\\xe7\\x26\\xf7\\x21\\x80\\x1e\\x54\\x37\\x05\\xb6\\x0a\"\n\"\\x66\\x6e\\x74\\x92\\xa2\\x5b\\x1f\\x6d\\x58\\x05\\x74\\xc5\\xa9\\x85\\xb8\\x1b\\xe7\\xc6\\xb5\\xcc\\xaf\\x73\\xa0\\x63\\x7b\\x7f\\x89\\x86\\x7c\\x1f\\x0e\\xa8\"\n\"\\x26\\x0a\\xf8\\x37\\xf9\\xbf\\x2b\\x0a\\xa8\\x26\\x0a\\xf7\\x82\\xf9\\xbf\\x39\\x0a\\xa8\\x26\\x0a\\xf7\\x8a\\xf9\\xaf\\x38\\x1d\\xa8\\x26\\x0a\\xf7\\x24\\xf9\"\n\"\\xbf\\x3d\\x0a\\x25\\x0a\\xf7\\xa8\\x56\\x0a\\x25\\x0a\\xd6\\xfa\\x3c\\x29\\x1d\\x25\\x0a\\xdf\\xfa\\x2c\\x38\\x1d\\x25\\x0a\\x6b\\xfa\\x3c\\xbb\\x0a\\xdf\\x30\"\n\"\\x0a\\xa1\\xfa\\x2f\\x15\\x69\\x7d\\x79\\x7b\\x74\\x1b\\x80\\x88\\x8c\\x93\\x79\\x1f\\x59\\xa0\\x05\\x9b\\x67\\x82\\x8d\\x71\\x1b\\x54\\x60\\x61\\x3f\\x74\\x1f\"\n\"\\xc1\\x06\\xad\\x9c\\x9b\\x9a\\x9d\\x1b\\x93\\x9e\\x85\\x82\\x9c\\x1f\\xbd\\x72\\x05\\x85\\x98\\xa0\\x86\\x9c\\x4a\\x1d\\xf7\\x20\\xf9\\x70\\xdb\\x1d\\x67\\x5e\"\n\"\\x15\\xfb\\x10\\x26\\x5b\\x29\\x39\\x1f\\x3d\\x2e\\x39\\x1d\\x21\\xf4\\xfb\\x4c\\xaf\\x0a\\x4f\\x1f\\x44\\x59\\x4c\\x69\\x3e\\x1b\\x25\\x4d\\x2f\\x1d\\x0e\\xf7\"\n\"\\x20\\xf8\\xb1\\xfa\\x3c\\x46\\x1d\\xfb\\x03\\x7c\\x1d\\xf7\\x20\\xf8\\xba\\x45\\x1d\\xfb\\x40\\x50\\x51\\x1d\\x0e\\xf7\\x20\\xf8\\x56\\xfa\\x3c\\x3e\\x0a\\x6c\"\n\"\\x7c\\x1d\\xf7\\x20\\xf8\\xae\\xf9\\x79\\x51\\x1d\\xf7\\x57\\xf7\\xca\\x15\\x69\\x7e\\x79\\xb3\\x1d\\x74\\x1f\\xc1\\x06\\xac\\x9b\\x9b\\x9b\\x83\\x0a\\xa8\\xf8\"\n\"\\xad\\xf9\\xa9\\x3a\\x0a\\xd2\\xfb\\x27\\x05\\xf7\\xb4\\xfb\\xae\\x74\\x1d\\x0e\\xdf\\xf9\\x48\\xfa\\x3c\\x4d\\x1d\\xf7\\x11\\x52\\x41\\x1d\\xdf\\xf8\\x98\\xfa\"\n\"\\x3c\\x46\\x1d\\xae\\xfb\\x63\\x41\\x1d\\xdf\\xf8\\x9b\\x45\\x1d\\x77\\x44\\x41\\x1d\\xdf\\xf8\\x42\\xfa\\x3c\\x61\\x1d\\xf7\\x02\\xfb\\x63\\x41\\x1d\\xa8\\x2c\"\n\"\\x0a\\xf7\\x8d\\x56\\x0a\\xa8\\x2c\\x0a\\xd7\\x45\\x1d\\x0e\\x70\\x36\\x1d\\xfb\\x4b\\xf7\\x4d\\x15\\xf7\\x1f\\xf7\\x27\\x05\\x3e\\x06\\x25\\x2a\\x4e\\xec\\x05\"\n\"\\x3d\\x06\\xd2\\xfb\\x27\\x05\\x0e\\x39\\xf8\\xdf\\x30\\x1d\\xed\\xfc\\xe2\\x3f\\x1d\\x39\\xf8\\x16\\xf9\\x89\\x46\\x1d\\xac\\xfd\\x78\\x3f\\x1d\\x39\\xf8\\x1f\"\n\"\\x52\\x0a\\x6f\\xfc\\xf0\\x3f\\x1d\\x39\\xf7\\xc3\\x4c\\x1d\\xf4\\xfd\\x78\\x3f\\x1d\\x39\\x2d\\x1d\\xac\\xf8\\x9a\\x2e\\x1d\\x0e\\x39\\x2d\\x1d\\xf7\\x2a\\xf8\"\n\"\\x7d\\x41\\x0a\\x39\\xf7\\xb4\\x74\\x15\\xf7\\x13\\x88\\xf6\\xdd\\xb2\\xf7\\x17\\x08\\x57\\x1d\\xf7\\x1a\\x06\\x8e\\xa3\\x8c\\x94\\x95\\x1a\\xb5\\x7a\\xb3\\x6c\"\n\"\\xaa\\x1e\\xb1\\x65\\x5d\\x9c\\x48\\x1b\\x2d\\x42\\x6c\\x4b\\x56\\x1f\\x50\\x45\\x61\\xfb\\x09\\x2d\\x1a\\x43\\xaf\\x48\\xc2\\x6d\\x1e\\x9e\\x81\\x9d\\x85\\xaf\"\n\"\\x84\\x52\\x34\\x18\\xb6\\x0a\\x65\\x6e\\x75\\x92\\xa3\\x5b\\x1f\\x6d\\x57\\x05\\x75\\xc4\\xaa\\x84\\xb8\\x1b\\xe7\\xc6\\xb5\\xcc\\xaf\\x73\\xa0\\x63\\x7b\\x7f\"\n\"\\x89\\x87\\x7c\\x1f\\x0e\\x39\\xf8\\xc6\\x30\\x1d\\xf7\\x3d\\xfc\\x11\\x42\\x1d\\x39\\xf8\\x0e\\xb4\\x1d\\xe3\\xfc\\xa7\\x42\\x1d\\x39\\xf8\\x1c\\xf9\\x79\\x2e\"\n\"\\x0a\\xf7\\x67\\xf7\\x0c\\x2e\\x0a\\x9f\\xfc\\x1f\\x42\\x1d\\x39\\x76\\x1d\\x2a\\x1d\\xf7\\x85\\x30\\x1d\\x0e\\x2a\\x1d\\xb3\\xf9\\x89\\x29\\x1d\\x2a\\x1d\\xbc\"\n\"\\x52\\x0a\\x0e\\x2a\\x1d\\x4f\\x4c\\x1d\\x0e\\x70\\x34\\x1d\\xf7\\xa6\\xf7\\x60\\x41\\x0a\\x70\\xf8\\xeb\\x30\\x1d\\x6f\\x51\\x15\\x23\\x32\\x5f\\x3c\\x50\\x1f\"\n\"\\x5b\\x4b\\x6c\\x28\\x35\\x1a\\xfb\\x0e\\xdf\\x3d\\xf7\\x19\\xf7\\x00\\xe2\\xb5\\xdc\\xc8\\x1e\\xbb\\xca\\xaa\\xee\\xe2\\x1a\\xf7\\x10\\x37\\xd7\\xfb\\x1d\\x1e\"\n\"\\x75\\xfb\\x04\\x54\\x1d\\x0e\\x70\\xf8\\x33\\x99\\x0a\\xfb\\x01\\x6d\\x0a\\x70\\xf8\\x39\\x52\\x0a\\xfb\\x3c\\x43\\x15\\x23\\x32\\x5f\\x3c\\x50\\x1f\\x5b\\x4b\"\n\"\\x6c\\x28\\x35\\x1a\\xfb\\x0e\\xdf\\x3d\\xf7\\x19\\xf7\\x00\\xe2\\xb5\\xdc\\xc8\\x1e\\xbb\\xca\\xaa\\xee\\xe2\\x1a\\xf7\\x10\\x37\\xd7\\xfb\\x1d\\x1e\\x75\\xfb\"\n\"\\x04\\x54\\x1d\\x0e\\x70\\xf7\\xdb\\xf9\\x89\\xa7\\x0a\\x5f\\xf7\\x2a\\x05\\x69\\x6d\\x0a\\x70\\x36\\x0a\\xf7\\x56\\xf7\\xc7\\x15\\x69\\x76\\x76\\x7a\\x74\\x1b\"\n\"\\x80\\x88\\x8c\\x94\\x7a\\x1f\\x5e\\xa0\\x05\\x99\\x6e\\x7d\\x8e\\x73\\x1b\\x54\\x57\\x61\\x40\\x64\\x1f\\xc1\\x06\\xac\\xa2\\x9e\\x9a\\x9d\\x1b\\x93\\xa0\\x84\"\n\"\\x84\\x98\\x1f\\xb8\\x72\\x05\\x84\\x96\\x9f\\x87\\x9c\\x1b\\xcb\\xc5\\xb7\\xd9\\xb0\\x1f\\x0e\\x39\\xf8\\x5e\\xf8\\xf6\\x3a\\x0a\\xd2\\xfb\\x27\\x05\\xf7\\x7e\"\n\"\\xfb\\x88\\x63\\x0a\\x0e\\x70\\xf8\\xdf\\xf9\\x89\\x15\\xfb\\x13\\x06\\x26\\xfb\\x2a\\x05\\xd1\\x06\\xf7\\x04\\xfc\\xf3\\x42\\x0a\\x70\\xf8\\x2a\\xb4\\x1d\\xa7\"\n\"\\xfd\\x89\\x42\\x0a\\x70\\xf8\\x38\\xf9\\x79\\x2e\\x0a\\xf7\\x67\\xf7\\x0c\\x2e\\x0a\\x63\\xfd\\x01\\x42\\x0a\\x70\\xf7\\xd9\\xf9\\x89\\x3e\\x0a\\xec\\xfd\\x89\"\n\"\\x42\\x0a\\x39\\x72\\x0a\\x34\\xf7\\x6d\\x2b\\x0a\\x39\\x72\\x0a\\xfb\\x94\\xf7\\x5d\\x45\\x0a\\xfb\\x1e\\x44\\x1d\\xfb\\x09\\xf7\\x4b\\x9a\\x0a\\xfb\\x86\\xf7\"\n\"\\x42\\xf8\\xf5\\x15\\x46\\xfb\\xd9\\x05\\xe8\\x06\\xb2\\xf7\\x4b\\x05\\xbb\\x96\\xa8\\xa7\\xb4\\x1b\\xa7\\x9a\\x7c\\x6e\\x83\\x8a\\x83\\x89\\x80\\x1f\\x63\\xfb\"\n\"\\x50\\x05\\xe8\\x06\\xb9\\xf7\\x6d\\x05\\x8e\\x96\\x8c\\x97\\x95\\x1a\\xbb\\x64\\xac\\x53\\x64\\x66\\x7c\\x70\\x70\\x1e\\x87\\x86\\x94\\xb4\\x05\\x0e\\xa7\\x4b\"\n\"\\x0a\\x0e\\xf7\\xc5\\x4b\\x0a\\xf7\\x8e\\xf3\\xa1\\x1d\\xf7\\xc5\\x4b\\x0a\\xf7\\xb6\\xf7\\xb9\\xd2\\x1d\\xf7\\x58\\xf9\\x60\\x32\\x0a\\xfc\\xbe\\xfb\\x22\\x15\"\n\"\\x4d\\xfb\\xb5\\x05\\xe9\\x06\\xe5\\xf8\\x3d\\x05\\x4c\\x06\\x59\\x73\\x59\\x72\\x3d\\x1b\\x7e\\x4e\\x05\\xf9\\x1c\\xfb\\xe9\\x6a\\x0a\\x0e\\xf7\\x58\\xf9\\x81\"\n\"\\x32\\x0a\\x64\\xfc\\x77\\x15\\xc1\\xab\\xa2\\xac\\xb8\\x1a\\xc1\\x5b\\xb1\\x45\\x33\\x43\\x4d\\x40\\x71\\x95\\xaf\\x1d\\x53\\xf7\\x1b\\x15\\xac\\xa1\\x7a\\x71\"\n\"\\x64\\x69\\x6d\\x61\\x6c\\x77\\x9d\\xa6\\xb1\\xaa\\xa8\\xb4\\x1f\\x69\\xfb\\x3d\\x15\\xac\\xa0\\x78\\x6c\\x57\\x6a\\x66\\x5c\\x6a\\x73\\x9f\\xa7\\xbe\\xb0\\xb3\"\n\"\\xb9\\x1f\\xfc\\x63\\xf7\\xa5\\x15\\x8c\\x90\\x8e\\x8b\\x90\\x1b\\xc0\\xa2\\x7c\\x69\\x62\\x6a\\x6a\\x63\\x66\\x78\\x9b\\xaa\\x91\\x8b\\x8f\\x8d\\x93\\x1f\\x30\"\n\"\\x06\\x88\\x7b\\x8a\\x82\\x80\\x1a\\x47\\xbb\\x64\\xde\\xf7\\x01\\xd6\\xd0\\xee\\xab\\x7d\\xa2\\x6e\\x9d\\x1e\\xba\\xa8\\xa3\\xb1\\xb9\\x1a\\xc6\\x5c\\xad\\x3a\"\n\"\\x27\\x57\\x5e\\x25\\x77\\x1e\\xe2\\x06\\xc3\\x97\\x9c\\x9e\\xb2\\x1b\\xa6\\x9d\\x7b\\x73\\x76\\x82\\x78\\x7c\\x7e\\x1f\\x7b\\x7d\\x7a\\x87\\x63\\x8a\\x08\\x0e\"\n\"\\xf7\\x58\\xf9\\x74\\x32\\x0a\\x71\\xfc\\x77\\x15\\xc2\\xd1\\x1d\\x95\\x7a\\xa8\\x75\\x1e\\x4c\\xc6\\x1d\\x66\\xa1\\x1e\\x53\\x96\\x1d\\xfb\\x91\\xf8\\xa3\\x15\"\n\"\\xfb\\x79\\x06\\x33\\xfb\\x81\\x05\\xd6\\x06\\xa0\\x99\\xa0\\x96\\xa5\\x1b\\xae\\x9e\\x77\\x68\\x4e\\x67\\x5e\\x5a\\x6b\\x76\\x9a\\xa2\\x8e\\x8c\\x91\\x8c\\x90\"\n\"\\x1f\\x38\\x06\\x89\\x7f\\x8a\\x85\\x83\\x1a\\x4f\\xbb\\x64\\xd3\\xf4\\xde\\xe1\\xf7\\x00\\xcd\\x63\\xb4\\x4a\\x6e\\x74\\x84\\x79\\x6f\\x1e\\xab\\xe3\\x05\\xf7\"\n\"\\x46\\x06\\x0e\\xf7\\x58\\xf9\\x5d\\x32\\x0a\\x7f\\xfc\\x77\\x6a\\x0a\\xfb\\x51\\xf8\\xa2\\x15\\xfb\\xc1\\x06\\x7b\\x40\\x05\\xf7\\x68\\x06\\xfb\\x09\\xfb\\x05\"\n\"\\x50\\x2f\\x5b\\xfb\\x25\\x08\\xe0\\x06\\xab\\xf7\\x06\\xba\\xde\\xe3\\xec\\xb0\\xb2\\xa0\\xa0\\x90\\x90\\x08\\x0e\\xf7\\xfe\\x6c\\x0a\\xf7\\xdc\\xf7\\xe0\\x2b\"\n\"\\x1d\\xdf\\x24\\x0a\\xf7\\x3b\\xf8\\x0f\\xbc\\x1d\\x7e\\x5c\\x1d\\xdf\\x24\\x0a\\x0e\\xdf\\x24\\x0a\\xfb\\x3b\\xf7\\x42\\x26\\x1d\\xdf\\x24\\x0a\\xf7\\x73\\xf7\"\n\"\\xee\\x2d\\x0a\\xdf\\xf8\\xa8\\xf7\\x27\\x15\\x9d\\xfb\\x27\\x05\\xd6\\x06\\x5f\\x7c\\x77\\x81\\x73\\x79\\x08\\x60\\x6c\\x72\\x62\\x63\\x1a\\x59\\xc5\\x1d\\x71\"\n\"\\x1b\\x65\\x7a\\x98\\xa9\\xbd\\xc3\\xc5\\xd9\\xab\\x1f\\x2a\\xf9\\x6d\\x05\\xfb\\x41\\x06\\xfc\\x2b\\xfd\\x6d\\x05\\xf7\\x2d\\x06\\xdc\\xf7\\x27\\x05\\xf7\\x96\"\n\"\\xf7\\x11\\x15\\xfb\\x51\\x06\\xf7\\x2e\\xf7\\xaf\\x05\\x0e\\xdf\\x24\\x0a\\xd2\\xf8\\x22\\x2e\\x1d\\xc0\\xf7\\x3e\\x2b\\x0a\\xdf\\x78\\x1d\\xdf\\x69\\x0a\\xdd\"\n\"\\xf8\\x5a\\x15\\xfb\\x1a\\x06\\x2d\\xfb\\x2a\\x05\\xca\\x06\\x0e\\xdf\\x69\\x0a\\x65\\xf7\\xc7\\x3a\\x1d\\xdf\\x7e\\x1d\\xfb\\x19\\xf8\\x5b\\x39\\x0a\\xdf\\xf9\"\n\"\\xa4\\xf8\\x76\\x15\\x8d\\x9b\\x8d\\x9d\\x91\\x1a\\xc5\\x75\\xbe\\x61\\xb5\\x1e\\xb9\\x5b\\x4e\\xa1\\x3a\\x1b\\xfb\\x17\\xfb\\x09\\x54\\x2c\\x47\\x1f\\x4a\\x33\"\n\"\\x5e\\xfb\\x22\\xfb\\x04\\x1a\\x47\\xa3\\x46\\xb4\\x58\\x1e\\x51\\xb9\\xc8\\x71\\xe3\\x1b\\xf5\\xef\\xae\\xc6\\xca\\x1f\\xbc\\xb9\\xab\\xc2\\x9f\\xd8\\x08\\xfb\"\n\"\\x27\\x06\\x31\\x6f\\x40\\x53\\x31\\x1b\\x2f\\x5b\\xbe\\xee\\xe8\\xa5\\xe6\\xb9\\xcc\\x1f\\xd5\\xc0\\xc8\\xb0\\xd2\\x1b\\xce\\xb6\\x70\\x5a\\x96\\x1f\\x8f\\x7a\"\n\"\\x8c\\x83\\x6d\\x1a\\x71\\xf8\\x4c\\x49\\x1d\\xa8\\x78\\x0a\\xdf\\x73\\x0a\\xf7\\x33\\xf9\\x2c\\x3a\\x0a\\xd3\\xfb\\x27\\x05\\x0e\\xdf\\x7d\\x1d\\x71\\x8f\\x16\"\n\"\\xf8\\xf0\\x06\\xfb\\x97\\xf9\\x0a\\x05\\x33\\x06\\xb7\\x25\\x15\\xf7\\x4b\\xfc\\x5b\\x05\\xfc\\x01\\x06\\x0e\\xa8\\x26\\x0a\\xf8\\x0a\\xf9\\xbd\\x53\\x1d\\xa8\"\n\"\\x26\\x0a\\xf7\\xc7\\xf9\\x2c\\x3a\\x1d\\xa8\\x26\\x0a\\xf7\\xe4\\xf9\\xad\\x3b\\x0a\\xa8\\x26\\x0a\\xf8\\x42\\xf9\\x9c\\xe8\\x1d\\x0e\\xe0\\xd6\\x16\\x23\\x0a\"\n\"\\xf3\\xf8\\x7c\\x05\\xe6\\x9e\\xc2\\xb3\\xf4\\x1b\\xd3\\xac\\x74\\x58\\x7d\\x89\\x7e\\x87\\x76\\x1f\\xfb\\x09\\xfc\\xba\\x05\\x6c\\x84\\x7d\\x7f\\x6c\\x1b\\x7d\"\n\"\\x85\\x8c\\x8d\\x87\\x1f\\x71\\xfb\\x0c\\x05\\x87\\x99\\x99\\x8a\\xa3\\x1b\\xf7\\x09\\xc3\\xaf\\xe3\\x9d\\x1f\\xf7\\x1e\\xf9\\x1c\\x05\\x8f\\x9e\\x8d\\x9d\\x9d\"\n\"\\x1a\\xdf\\x45\\xbb\\xfb\\x10\\x2d\\x51\\x73\\x48\\x49\\x1e\\x9d\\xdd\\x28\\x0a\\x0e\\xa8\\x99\\x1d\\xf8\\x6c\\x06\\x5f\\x7c\\x77\\x81\\x73\\x79\\x08\\x5f\\x6c\"\n\"\\x73\\x62\\x62\\x1a\\x5a\\xc5\\x1d\\x70\\x1b\\x66\\x7a\\x97\\xa7\\xbd\\xb1\\xb5\\xe6\\xbe\\x1f\\xbf\\x0a\\x0e\\xa8\\x26\\x0a\\x0e\\xf7\\x6c\\xf8\\x43\\xf7\\xce\"\n\"\\x15\\xf7\\xf1\\x25\\x1d\\xfb\\xf0\\x40\\x0a\\xf8\\x0e\\x25\\x1d\\xfc\\xa4\\x9f\\x1d\\x39\\xf8\\xf0\\x26\\x1d\\xdf\\x8e\\x1d\\xf7\\xa0\\xf9\\x61\\xf7\\xdf\\x15\"\n\"\\x44\\x7f\\x0a\\xd2\\xf7\\xdf\\x05\\xfb\\x12\\xf8\\x22\\x26\\x1d\\x39\\xc7\\xf7\\xd2\\x15\\x64\\x47\\x05\\xd4\\x06\\x8c\\x47\\x93\\x5a\\x9f\\x5e\\x08\\x4a\\xa9\"\n\"\\xd5\\x5d\\xd9\\x1b\\xb3\\xad\\x92\\xa6\\xe2\\x1f\\xaa\\xf7\\x29\\x05\\x61\\x34\\x6e\\x81\\x62\\x1b\\x4f\\x67\\xbd\\xe7\\x84\\x1f\\xf7\\x49\\x06\\xb1\\xcf\\x05\"\n\"\\xfb\\x6d\\x06\\x8f\\xa1\\x8f\\x9e\\x93\\xa6\\x08\\xf7\\x84\\x06\\xb2\\xcf\\x05\\xfb\\x8f\\x06\\xe7\\xb5\\xc4\\xbb\\xca\\x1b\\xb7\\xad\\x7a\\x59\\xbf\\x1f\\xd4\"\n\"\\xf7\\x15\\x05\\xc1\\x4d\\x67\\x99\\x44\\x1b\\xfb\\x23\\xfb\\x11\\x28\\xfb\\x3f\\x41\\x1f\\x5b\\x06\\x64\\x47\\x05\\xcb\\x06\\x83\\x6f\\x89\\x80\\x86\\x6e\\x08\"\n\"\\x0e\\x6f\\xd9\\x16\\x23\\x0a\\xf7\\x14\\xf8\\xf0\\x05\\xf7\\xfe\\x21\\x1d\\xfc\\x94\\x06\\x0e\\xf7\\x20\\x64\\x0a\\x6a\\xfa\\x3c\\xbc\\x1d\\x7f\\x1a\\x4c\\xe7\"\n\"\\x1d\\xf7\\x20\\x77\\x1d\\xfb\\x44\\xfa\\x3e\\x29\\x1d\\xf7\\x20\\x64\\x0a\\xfc\\x18\\x51\\x15\\x73\\xfb\\x04\\x05\\xce\\x06\\x85\\x5e\\x68\\xc3\\x1d\\xf7\\x20\"\n\"\\xf9\\xae\\xcf\\x1d\\x63\\x7d\\x75\\x6d\\x6f\\x08\\x5c\\x58\\x52\\x72\\x53\\x1b\\x28\\x4d\\xcc\\xf3\\xdc\\xa4\\xdf\\xb6\\xc6\\x1f\\xd7\\xc2\\xcf\\xb2\\xd9\\x1b\"\n\"\\xbe\\xb7\\x7c\\x70\\xa4\\x1f\\x9c\\x7a\\x90\\x7b\\x90\\x61\\x08\\xf7\\x21\\x06\\x8c\\x97\\x8b\\x92\\x92\\x1a\\xc3\\x70\\xc4\\x5d\\xb4\\x1e\\xb7\\x5a\\x4c\\xa0\"\n\"\\x3a\\x1b\\xfb\\x16\\xfb\\x0a\\x57\\x32\\x43\\x1f\\x3f\\x2e\\x5d\\xfb\\x11\\xfb\\x03\\x1a\\x45\\x9e\\x4f\\xb1\\x55\\x1e\\x3e\\xc2\\xcc\\x6a\\xeb\\x1b\\xc2\\xbf\"\n\"\\x98\\xa3\\xba\\x1f\\xae\\x9d\\x9a\\x99\\xb0\\xbb\\x88\\x2b\\x18\\xe5\\x06\\x38\\xfa\\x30\\x49\\x1d\\xdf\\xbd\\x0a\\xf7\\x06\\xf8\\xad\\x05\\xce\\x06\\x9c\\xdb\"\n\"\\x05\\x48\\x06\\xa3\\xf7\\x04\\x05\\xfb\\x2b\\x06\\x74\\xfb\\x04\\x05\\xfb\\xb5\\x06\\xa3\\xf7\\x04\\x05\\xfb\\x2a\\x4e\\x1d\\x48\\x27\\x0a\\xce\\x06\\xfb\\x06\"\n\"\\xfc\\xad\\x20\\x0a\\xd1\\xf7\\xdf\\x05\\xf7\\xd0\\xf7\\x11\\x15\\xfb\\xb5\\x06\\x9c\\xdc\\x05\\xf7\\xb5\\x06\\x0e\\xdf\\xbd\\x0a\\xf7\\x2f\\xf9\\x6d\\x05\\xfb\"\n\"\\x2b\\x06\\x51\\xfb\\xa5\\x05\\xfb\\xb4\\x54\\x0a\\xf7\\x6c\\xf8\\xf1\\x39\\x0a\\xf7\\x24\\x25\\x0a\\xf8\\x91\\x22\\x1d\\xfb\\x06\\xfc\\xaf\\x05\\x54\\x7f\\x68\"\n\"\\x6d\\x56\\x1b\\x64\\x70\\xa1\\xab\\x94\\x8d\\x97\\x8d\\x98\\x1f\\x9c\\xd8\\x28\\x0a\\x7b\\x43\\x05\\x87\\x75\\x88\\x73\\x78\\x1a\\x2a\\xd2\\x50\\xf7\\x09\\xce\"\n\"\\xd0\\x9d\\xa7\\xb6\\x1e\\xbc\\xab\\xae\\xc5\\x9c\\xd8\\xf7\\x06\\xf8\\xaf\\x18\\x0e\\xf8\\x05\\x33\\x0a\\xf7\\x61\\xfa\\x3a\\xbf\\x1d\\x82\\x7d\\x5c\\x1d\\x25\"\n\"\\x0a\\xf7\\x43\\xfa\\x2a\\x3b\\x0a\\x25\\x0a\\xf7\\x91\\xfa\\x19\\x15\\xfb\\xa5\\x27\\x0a\\xf7\\xa5\\x06\\x0e\\xf8\\x04\\x60\\x1d\\xd7\\x06\\x31\\x59\\x61\\x5b\"\n\"\\x52\\x1a\\x5a\\xb9\\x6e\\xd6\\xa2\\x99\\x8d\\x92\\xad\\x1e\\x96\\xbf\\x05\\x85\\x79\\x6f\\x86\\x7d\\x1b\\x6e\\x7a\\x9b\\xa7\\xb7\\xbc\\xca\\xc7\\xab\\x1f\\x0e\"\n\"\\x25\\x0a\\x0e\\x25\\x0a\\xdf\\xfa\\x2e\\x44\\x0a\\xfb\\x39\\xf8\\x97\\x33\\x0a\\x54\\xf9\\x6d\\x26\\x1d\\x25\\x0a\\xf7\\x8f\\xfa\\x2f\\xa9\\x1d\\x73\\xb9\\x1d\"\n\"\\xa1\\x86\\x9b\\x4a\\x1d\\x39\\x70\\x0a\\x2e\\xb1\\x1d\\xdf\\x79\\x0a\\xdf\\x7a\\x0a\\xdc\\x4f\\x8d\\x0a\\x70\\x37\\x1d\\xf7\\x81\\xf9\\xbf\\x2b\\x0a\\xa8\\x86\"\n\"\\x16\\xf7\\x32\\x06\\xf7\\xc4\\xf8\\xc1\\xce\\xfc\\xc1\\x05\\xf7\\x28\\x06\\x23\\xf9\\x6d\\x05\\xfb\\x33\\x06\\x0e\\x70\\x37\\x1d\\xf7\\x78\\xf8\\xf0\\x31\\x0a\"\n\"\\x70\\x37\\x1d\\x93\\xfb\\x4f\\xa6\\x1d\\x70\\x37\\x1d\\xf8\\x09\\xf7\\xf3\\x15\\x2a\\x0a\\x6c\\xfb\\x26\\x05\\xf7\\x29\\x06\\x0e\\xf7\\x57\\x75\\x0a\\xdf\\x30\"\n\"\\x0a\\xa8\\xed\\x1d\\xd0\\x06\\x0e\\xdf\\x30\\x0a\\x37\\xf9\\xa9\\x3a\\x0a\\xd3\\xfb\\x27\\x05\\x0e\\xdf\\x30\\x0a\\xfc\\x09\\x4f\\xa6\\x1d\\xdf\\x30\\x0a\\x0e\"\n\"\\xf7\\x20\\xf8\\xae\\x67\\x0a\\xf7\\x2a\\xf7\\xd5\\x15\\x60\\x7b\\x68\\x75\\x58\\x1b\\x5b\\x88\\x0a\\xf7\\x20\\x7b\\x1d\\xf7\\x1a\\xf7\\xd7\\xea\\x1d\\xf7\\xee\"\n\"\\xf7\\x27\\xea\\x1d\\x0e\\xf7\\x20\\x7b\\x1d\\xf7\\x6a\\xf7\\xb4\\x2d\\x0a\\xf7\\x65\\xf8\\x38\\x62\\x0a\\xfb\\x22\\xf9\\x6d\\xcd\\x1d\\xf7\\x20\\x7a\\x1d\\xf7\"\n\"\\x62\\xf8\\xe3\\x67\\x0a\\xfb\\xc3\\xf7\\x08\\x26\\x1d\\xf7\\x20\\x5e\\x0a\\xae\\xf8\\x0f\\x2b\\x1d\\xf7\\x4c\\xf7\\xee\\x7d\\x15\\xf7\\x11\\x06\\x9e\\xe4\\xd8\"\n\"\\x8f\\xc4\\x9a\\xc5\\xab\\x19\\xf2\\xc3\\xcc\\xf7\\x02\\xf7\\x09\\x1a\\xf7\\x16\\x32\\xe7\\xfb\\x28\\xa2\\x1e\\x9e\\xe4\\x05\\xfb\\x11\\x06\\x78\\x32\\x43\\x88\"\n\"\\x54\\x7d\\x52\\x6c\\x19\\xfb\\x00\\x52\\x48\\x20\\xfb\\x09\\x1a\\x37\\xb5\\x3e\\xd1\\x5f\\x1e\\xb0\\x73\\xac\\x80\\xc1\\x81\\x08\\xa4\\xf7\\x09\\x15\\x41\\x9a\"\n\"\\x61\\xbe\\xd8\\x1a\\xc9\\xaa\\xc9\\xbe\\xb0\\x1e\\xaa\\xa1\\xa5\\x95\\xbd\\x92\\x08\\xf7\\x11\\x16\\xd6\\x7d\\xb5\\x58\\x3e\\x1a\\x4c\\x6c\\x4e\\x58\\x66\\x1e\"\n\"\\x6c\\x75\\x71\\x81\\x58\\x83\\x08\\x0e\\xdb\\xcb\\x5a\\x0a\\xf7\\xb4\\x06\\xfb\\x14\\xfc\\xf0\\x05\\xf7\\x2b\\x4a\\x0a\\xfc\\xe1\\x06\\x0e\\xf7\\x53\\xf7\\xe9\"\n\"\\x16\\xf7\\x27\\x06\\xa7\\xf7\\x16\\xf7\\x58\\x90\\xe8\\xd4\\xb7\\xf7\\x4b\\x19\\x94\\xb3\\x93\\xb3\\x93\\xb3\\xba\\xf7\\x6e\\x18\\x2a\\x0a\\x5c\\xfb\\x6e\\x6e\"\n\"\\xfb\\x20\\x7f\\x69\\x6e\\x6a\\x19\\x69\\x6a\\x65\\x7b\\x62\\x1b\\xf0\\xf8\\x6f\\x05\\xfb\\x27\\x06\\x26\\xfc\\x6f\\x05\\x4e\\x8c\\x64\\xb1\\xc4\\x1a\\xa3\\x8b\"\n\"\\x8b\\xa6\\xf7\\x1d\\x1e\\xba\\xf7\\x6e\\x05\\x2a\\x0a\\x5c\\xfb\\x6e\\x05\\x79\\x36\\x82\\x4e\\x69\\x1a\\x45\\xb3\\x4b\\xcd\\x67\\x1e\\xae\\x77\\xaa\\x83\\xbf\"\n\"\\x88\\x08\\x0e\\xdf\\x3e\\x1d\\xf7\\x42\\xf8\\x9e\\x2b\\x1d\\xdf\\x3e\\x1d\\xcc\\xf8\\x0b\\x3a\\x1d\\xdf\\x3e\\x1d\\xfb\\x5d\\xfc\\x6e\\x8d\\x0a\\xa8\\x6e\\x0a\"\n\"\\xa8\\x72\\x1d\\xd3\\xf8\\x41\\x2b\\x1d\\xa8\\xf7\\xef\\x74\\x15\\xf3\\x8c\\xd6\\xa1\\xc7\\xbb\\x08\\xc8\\xbb\\xb3\\xe1\\xde\\x98\\x0a\\xe1\\xb9\\xb3\\x0a\\xf7\"\n\"\\x20\\x06\\x91\\xa7\\x8d\\x99\\x9f\\x1a\\xf7\\x00\\x2e\\xcb\\xfb\\x33\\x2a\\x3f\\x73\\x59\\x52\\x1e\\x52\\x5a\\x68\\x40\\x44\\x1a\\x38\\xbd\\x5f\\xf7\\x0b\\x73\"\n\"\\x1e\\xed\\x77\\x05\\xe6\\x79\\xa8\\x77\\x5c\\x1a\\x47\\x48\\x60\\x22\\x31\\x57\\xac\\xc5\\x8f\\x8c\\x94\\x8c\\x94\\x1e\\xfb\\x26\\x06\\x88\\x77\\x8a\\x81\\x7d\"\n\"\\x1a\\x4c\\xa7\\x56\\xbf\\x67\\x1e\\xac\\x74\\xaa\\x82\\xd9\\x7f\\x54\\x37\\x18\\x50\\x0a\\x7f\\x89\\x87\\x7b\\x1f\\x0e\\xa8\\x5f\\x0a\\xfb\\x0e\\xf8\\x41\\x29\"\n\"\\x1d\\xa8\\x72\\x1d\\xfb\\xc5\\xfc\\xcb\\x3c\\x0a\\x5f\\x68\\xa5\\x0a\\x5b\\xa0\\x16\\xf8\\xc7\\x25\\x1d\\xfc\\x0d\\x06\\xf7\\xb3\\xf7\\x8e\\xfb\\x49\\xf7\\x7c\"\n\"\\x05\\xf7\\xe6\\x06\\xa4\\xf7\\x0e\\x05\\xfc\\x9f\\x06\\x73\\xfb\\x03\\xf7\\x4a\\xfb\\x7a\\xfb\\xb4\\xfb\\x95\\x05\\x0e\\x70\\x46\\x0a\\x0e\\x70\\xf8\\x75\\xf8\"\n\"\\x57\\x15\\xac\\xf7\\x2d\\x05\\x5a\\x1d\\x6a\\xfb\\x2d\\x05\\xfb\\x2d\\x27\\x0a\\xf7\\x2d\\x06\\x3c\\xfc\\x07\\x20\\x0a\\xda\\xf8\\x07\\x05\\xf7\\x2d\\x06\\x9c\"\n\"\\xdb\\x05\\x0e\\x70\\x46\\x0a\\xf7\\x26\\xf9\\xa9\\x9a\\x0a\\x70\\xf7\\xf8\\x16\\xa8\\x06\\xf7\\x15\\xf8\\xf0\\x05\\x5a\\x1d\\xfb\\x15\\xfc\\xf0\\x05\\xd2\\x06\"\n\"\\x4d\\x2b\\x05\\x96\\xa4\\x97\\x8e\\x9c\\x1b\\xa5\\x9d\\x7e\\x77\\x72\\x6e\\x78\\x65\\x6e\\x76\\x91\\xa3\\x5a\\x1f\\x6d\\x57\\x05\\x75\\xc6\\xa7\\x85\\xb9\\x1b\"\n\"\\xe6\\xc6\\xb5\\xcc\\xaf\\x73\\xa0\\x63\\x7c\\x7f\\x89\\x86\\x7b\\x1f\\x0e\\xf7\\x20\\xf8\\xf7\\xf8\\x2b\\x15\\xfb\\x9f\\x06\\x76\\x29\\x05\\xf7\\x9f\\x06\\x50\"\n\"\\xf8\\x44\\x15\\xfb\\x09\\x23\\x5c\\x32\\x3d\\x1f\\x3e\\x35\\x5a\\xfb\\x16\\xfb\\x07\\x1a\\xfb\\x46\\xf7\\x0c\\xfb\\x0b\\xf7\\x45\\xf7\\x0e\\xf0\\xba\\xe8\\xdd\"\n\"\\x1e\\xd6\\xe1\\xb8\\xf7\\x0e\\xf7\\x09\\x1a\\xf7\\x4b\\xfb\\x07\\xf7\\x08\\xfb\\x4a\\x1e\\x7f\\x3d\\x1d\\x4e\\x1f\\x45\\x59\\x4c\\x69\\x3e\\x1b\\x26\\x4c\\x2f\"\n\"\\x1d\\x0e\\xdf\\x4f\\x1d\\xfb\\x44\\xf7\\x61\\x9b\\x1d\\xdf\\x4e\\x0a\\xfb\\x5d\\xf7\\x63\\x90\\x0a\\xdf\\x4e\\x0a\\x25\\xf7\\x40\\x2d\\x0a\\xdf\\xf8\\xcd\\xfb\"\n\"\\x40\\x15\\x83\\x76\\x73\\x88\\x71\\x1b\\x65\\x79\\x99\\xa9\\xa2\\x95\\xa2\\xa1\\xa9\\x1f\\xa1\\xa9\\x9b\\x99\\xc6\\xba\\xd9\\xc6\\xac\\xbe\\xa1\\xec\\xf4\\xf8\"\n\"\\x82\\x18\\xfb\\x2a\\x06\\x22\\xfc\\x82\\x05\\x31\\x78\\x59\\x63\\x2f\\x1b\\x3e\\x5e\\xaa\\xc1\\x9a\\x8d\\x99\\x8e\\x9b\\x1f\\xf4\\xf8\\x82\\x05\\x2a\\x0a\\x26\"\n\"\\xfc\\x6e\\x05\\x84\\x69\\x87\\x6c\\x74\\x1a\\xfb\\x09\\xeb\\x42\\xf7\\x2d\\xac\\xa1\\x8e\\x95\\xbd\\x1e\\x61\\x78\\x71\\x7b\\x7b\\x7c\\x08\\x6c\\x6f\\x7b\\x69\"\n\"\\x68\\x1a\\x5b\\xbe\\x6f\\xe4\\xa4\\x9f\\x8e\\x91\\xaa\\x1e\\x0e\\xa8\\x2c\\x0a\\x0e\\xa8\\x2c\\x0a\\xd4\\xfa\\x2e\\x44\\x0a\\xf7\\xb8\\xf9\\x29\\xe6\\x1d\\xfb\"\n\"\\x62\\xfb\\xcf\\x39\\xf7\\xcf\\x05\\xfb\\x3c\\x06\\xf7\\x25\\xfc\\x5f\\x52\\xfb\\xa2\\x20\\x0a\\xfb\\xa0\\xf9\\x6d\\x26\\x1d\\xdf\\x4e\\x0a\\xfb\\x86\\xf7\\x74\"\n\"\\x2e\\x1d\\x0e\\xdf\\x4f\\x1d\\xfb\\x3d\\xf7\\x56\\xa9\\x1d\\x74\\x1f\\xc1\\x06\\xad\\x9b\\x9b\\x9a\\x83\\x0a\\xf7\\xc6\\x35\\x1d\\xf7\\x76\\xdb\\x1d\\x0e\\xf7\"\n\"\\xc6\\x35\\x1d\\x93\\xfa\\x3c\\x39\\x0a\\xf7\\xc6\\x35\\x1d\\xa7\\x45\\x1d\\x0e\\xf7\\xc6\\x35\\x1d\\x45\\xfa\\x39\\x3d\\x0a\\x9e\\xad\\x16\\xf8\\xe1\\x21\\x1d\"\n\"\\xfc\\xe1\\x06\\xd6\\xf7\\x51\\x15\\xf8\\x93\\x21\\x1d\\xfc\\x93\\x06\\x90\\xf7\\x39\\x15\\xf8\\xd6\\x25\\x1d\\xfc\\xd6\\x06\\x0e\\xa8\\x2c\\x0a\\xbb\\xfa\\x3c\"\n\"\\x29\\x1d\\xa8\\x2c\\x0a\\x79\\xfa\\x3c\\x3d\\x0a\\x70\\x36\\x1d\\x39\\xf7\\xe0\\x2b\\x0a\\x70\\x36\\x1d\\xfb\\x31\\xf7\\xce\\x2e\\x0a\\x0e\\x70\\x36\\x1d\\x0e\"\n\"\\x39\\x2d\\x1d\\xf7\\x08\\xf8\\x87\\x15\\x60\\x7b\\x68\\x75\\x58\\x1b\\x58\\x75\\x9f\\xb8\\x8a\\x1f\\x60\\x06\\x87\\xab\\x0a\\xd9\\xd0\\xc8\\xdd\\x99\\x1e\\x0e\"\n\"\\xf7\\x8f\\x6e\\x1d\\x3e\\xf8\\x2e\\x2b\\x1d\\xf7\\xfe\\xaa\\x0a\\xdf\\xf8\\xaf\\xf7\\x27\\x15\\x9c\\xfb\\x27\\x05\\xf7\\x24\\x06\\x33\\xf9\\x6d\\x05\\xfb\\x43\"\n\"\\x06\\xfc\\x32\\xfd\\x6d\\x05\\xf7\\x37\\x06\\xdb\\xf7\\x27\\x05\\xf7\\x97\\xf7\\x11\\x15\\xfb\\x53\\x06\\xf7\\x31\\xf7\\xb1\\x05\\x0e\\xd1\\xd0\\x16\\xf7\\xf3\"\n\"\\x06\\xe4\\xbc\\x96\\xab\\xbb\\x1f\\xce\\xb7\\xb5\\xd8\\xda\\x1a\\xf7\\x06\\x37\\xdd\\xfb\\x09\\x1e\\xfb\\x5e\\x40\\x0a\\xf8\\x0f\\x21\\x1d\\xfc\\xa5\\x06\\xa1\"\n\"\\xfc\\xf0\\x15\\xb3\\xf7\\x51\\x05\\xf7\\x6a\\x06\\xb1\\xa4\\x6f\\x60\\x4c\\x5b\\x54\\x54\\x1f\\x0e\\xdf\\xda\\x16\\xf7\\xdd\\x06\\xf7\\x05\\xc6\\x9b\\xb9\\xc3\"\n\"\\x1f\\xbe\\xb4\\xab\\xd1\\xce\\x1a\\xc5\\x71\\xb4\\x47\\xbb\\x1e\\xe3\\xb0\\xb7\\xc5\\xdc\\x1a\\xf1\\x40\\xcb\\xfb\\x0b\\x1e\\xfb\\xdd\\x06\\xf7\\x0f\\xfb\\x11\"\n\"\\x15\\xf7\\x38\\x06\\xc7\\xa9\\x76\\x61\\x6c\\x7b\\x6b\\x71\\x79\\x1f\\x7c\\x77\\x6f\\x85\\x61\\x1b\\xfb\\x31\\x06\\x71\\xfb\\x11\\x15\\xf7\\x46\\x06\\xca\\xaa\"\n\"\\x74\\x5d\\x43\\x57\\x5b\\x3d\\x1f\\xfb\\x4a\\x06\\x0e\\x73\\xe1\\x5a\\x0a\\xf7\\xc5\\x21\\x1d\\xfc\\x5b\\x06\\x0e\\xdf\\x70\\xfb\\x1c\\x15\\x23\\x0a\\xa8\\xf7\"\n\"\\x1c\\x05\\xf8\\x29\\x06\\x6e\\xfb\\x1c\\x20\\x0a\\xc2\\xf7\\x99\\x05\\x49\\x06\\xf7\\x14\\xf8\\xf0\\x05\\xfc\\x61\\x06\\x2b\\xfc\\x55\\x7b\\x35\\x39\\x47\\x34\"\n\"\\x8a\\x19\\x72\\x06\\xf8\\x7d\\x16\\xfb\\x89\\x06\\xc6\\xad\\xb7\\xc4\\x97\\xc5\\xd1\\xf7\\xde\\x18\\xf7\\x35\\x06\\x0e\\xa8\\x92\\x1d\\x0e\\xa8\\x92\\x1d\\xf7\"\n\"\\x84\\xf9\\xaf\\x38\\x1d\\xf7\\xb5\\xf8\\x19\\x16\\xf7\\x29\\x06\\xd2\\xf7\\xdf\\x05\\xf7\\x02\\x93\\x0a\\x26\\x5c\\x0a\\x51\\xfb\\xa5\\x05\\xfb\\x0d\\xc4\\x1d\"\n\"\\xf7\\x3b\\x06\\xf7\\x60\\xf7\\xdf\\x05\\xee\\x06\\x0e\\x90\\xf7\\x0a\\xf7\\x86\\x15\\x85\\x6f\\x05\\x87\\x77\\x89\\x7a\\x7d\\x1a\\x21\\xee\\x3b\\xf7\\x17\\xf7\"\n\"\\x3a\\xf7\\x11\\xf7\\x06\\xf7\\x2c\\xc9\\x68\\x0a\\x0e\\xdc\\x43\\x1d\\x0e\\xdc\\x43\\x1d\\xf7\\x39\\xf7\\x46\\x15\\x88\\x79\\x89\\x7b\\x7f\\x1a\\x6d\\x98\\x6e\"\n\"\\xa2\\x75\\x1e\\x77\\xa2\\xab\\x81\\xbb\\x1b\\xc3\\xb6\\x9b\\xad\\xb2\\x1f\\xac\\xa8\\x98\\xa2\\x9a\\xc2\\x08\\x32\\x06\\x58\\x77\\x6e\\x74\\x5f\\x1b\\x71\\x76\"\n\"\\x97\\xa0\\x82\\x1f\\x86\\x94\\x8a\\x95\\xa1\\x1a\\x0e\\x74\\xc3\\x16\\x66\\x1d\\xf0\\x93\\x0a\\x30\\x5c\\x0a\\x0e\\xbc\\x88\\x16\\xdf\\x06\\xde\\x8a\\xe4\\xd3\"\n\"\\x99\\xd9\\xec\\xf8\\x5b\\x18\\xf7\\x7c\\x06\\xfb\\x15\\xfc\\xf0\\x32\\x1d\\xfc\\xa7\\x06\\xfb\\x0d\\xfc\\xcd\\x05\\x73\\x85\\x7c\\x80\\x75\\x1b\\x56\\x06\\x0e\"\n\"\\xf7\\x57\\xf7\\xe0\\xf8\\xcc\\x15\\x95\\xfc\\xcc\\x20\\x0a\\xf7\\x8e\\xf8\\xcc\\xfb\\x0d\\xfc\\xcc\\x32\\x1d\\xfb\\x76\\x06\\xfb\\x8f\\xfc\\xd8\\x82\\xf8\\xd8\"\n\"\\x05\\xfb\\x74\\x35\\x0a\\x0e\\xdf\\xf7\\xb2\\xf7\\xdf\\x15\\xf7\\xb5\\x06\\x45\\x7f\\x0a\\x0e\\xf7\\x20\\x8b\\x1d\\x7d\\xfb\\x14\\x98\\x1d\\xdc\\xd3\\x16\\x23\"\n\"\\x0a\\xf7\\x15\\xf8\\xf2\\x05\\xf7\\xa8\\x06\\xfb\\x15\\xfc\\xf2\\x32\\x1d\\xfc\\xd4\\x06\\x0e\\xa8\\xf7\\xa6\\xf7\\x98\\x15\\xf7\\x4f\\x06\\xda\\xc9\\xa3\\xc0\"\n\"\\xbf\\x1f\\xbe\\xbd\\xab\\xde\\xde\\x1a\\xbf\\x76\\xbe\\x69\\xa7\\x1e\\xa6\\x6c\\x53\\x9d\\x5a\\x1b\\xfb\\xd6\\x35\\x0a\\xdd\\xf8\\x15\\x15\\xb9\\xf7\\x6f\\x20\"\n\"\\x1d\\xce\\xaa\\x73\\x58\\x6a\\x81\\x68\\x7a\\x73\\x1f\\x67\\x73\\x66\\x7b\\x53\\x1b\\x0e\\xdf\\xf9\\xa2\\xf8\\x76\\x15\\x8d\\x9e\\x8c\\x93\\x96\\x1a\\xf7\\x16\"\n\"\\xfb\\x02\\xe6\\xfb\\x33\\xfb\\x08\\x28\\x5d\\x30\\x3f\\x1e\\x40\\x31\\x5d\\xfb\\x18\\xfb\\x11\\x1a\\x36\\xa9\\x3e\\xbf\\x5a\\x1e\\x5e\\xb9\\xd1\\x73\\xdd\\x1b\"\n\"\\xf2\\xe7\\xaf\\xcc\\xcc\\x1f\\xbd\\xbd\\xaa\\xc4\\x96\\xcb\\x08\\xfb\\x2a\\x06\\x2e\\x6e\\x47\\x56\\x2e\\x1b\\x32\\x58\\xc4\\xef\\xdf\\xa4\\xe7\\xb5\\xcc\\x1f\"\n\"\\xd6\\xba\\xca\\xb0\\xd8\\x1b\\xd5\\xbd\\x63\\x4f\\x84\\x8a\\x7f\\x8a\\x7f\\x1f\\x0e\\x70\\xf8\\x95\\xf8\\xf0\\x15\\xf7\\x69\\x21\\x1d\\xfc\\xdc\\x24\\x1d\\xf7\"\n\"\\x71\\x06\\xfb\\x14\\xfc\\xf0\\x20\\x0a\\x0e\\xb2\\x91\\x1d\\x0e\\xf7\\x23\\xf7\\xbf\\x16\\xf7\\x2b\\x06\\xa0\\xf0\\x05\\xe1\\x06\\xcd\\xcb\\xa7\\xba\\xb5\\x1f\"\n\"\\xbe\\xc4\\xad\\xe6\\xdd\\x1a\\xf7\\x18\\x46\\xe5\\x26\\x1e\\x49\\x06\\xa0\\xf0\\x05\\xfb\\x2b\\x06\\x76\\x26\\x05\\x3c\\x06\\xfb\\x1e\\xfb\\x06\\xfb\\x1d\\xfb\"\n\"\\x3b\\xfb\\x1a\\xcd\\x32\\xed\\x1f\\xc7\\x06\\xda\\xf8\\x26\\x15\\x53\\xfb\\xa9\\x05\\x58\\x06\\x6c\\x77\\xb4\\xcb\\xeb\\xbb\\xd7\\xc6\\x1f\\xf7\\x63\\x16\\xc5\"\n\"\\x06\\xad\\xa0\\x63\\x4b\\x2c\\x59\\x3d\\x4e\\x1f\\x51\\x06\\x0e\\xa8\\x93\\x1d\\xf7\\x3b\\x06\\x0e\\xe6\\xcf\\x16\\xf8\\x76\\x06\\x6a\\xfb\\x30\\x20\\x0a\\xc7\"\n\"\\xf7\\xad\\x05\\x48\\x06\\xf7\\x15\\xf8\\xf0\\x96\\x0a\\xd1\\xf8\\x83\\x16\\xf7\\x2a\\x77\\x0a\\xf7\\x2a\\xc9\\xc3\\x94\\x9f\\xcc\\x1e\\x0e\\xf7\\xe9\\xce\\x16\"\n\"\\xf9\\xe1\\x59\\x0a\\xfb\\x14\\xfc\\xf0\\x05\\xfb\\x5a\\x3c\\x1d\\xfb\\x14\\xfc\\xf0\\x05\\xfb\\x59\\x58\\x0a\\xf7\\xf3\\xca\\x16\\xf9\\x84\\x06\\x69\\xfb\\x35\"\n\"\\x05\\x23\\x0a\\xc8\\xf7\\xb2\\x05\\x48\\x3c\\x1d\\xfb\\x14\\xfc\\xf0\\x05\\xfb\\x55\\x06\\xf7\\x15\\xf8\\xf0\\x05\\xfb\\x2a\\x6a\\x1d\\xfb\\x54\\x58\\x0a\\xf7\"\n\"\\x6c\\xf7\\x37\\x22\\x1d\\x70\\xfb\\x11\\x05\\xf7\\x8a\\x06\\xfb\\x14\\xfc\\xf0\\x05\\xf7\\xbf\\x06\\xe8\\xc0\\x99\\xb2\\xbc\\x1f\\xcb\\xbe\\xb1\\xd9\\xdc\\x1a\"\n\"\\xf7\\x0a\\x3f\\xd2\\xfb\\x14\\x1e\\xfb\\x26\\x06\\xc6\\xf7\\xa9\\x05\\xfb\\x15\\xfc\\xf0\\x15\\xb6\\xf7\\x5e\\x05\\xf7\\x2d\\x9e\\x0a\\xf7\\xfe\\xf7\\x09\\x71\"\n\"\\x0a\\xf7\\xab\\xfb\\x11\\x15\\xf7\\x2a\\x59\\x0a\\x0e\\xd1\\xe9\\x71\\x0a\\x0e\\xdc\\xf8\\xec\\xf7\\xce\\x15\\xfb\\x1b\\x60\\x3a\\x41\\x22\\x1b\\x30\\x5a\\xbf\"\n\"\\xf7\\x02\\x80\\x1f\\xfb\\x28\\x5f\\x05\\xfb\\x32\\xa5\\xf4\\x33\\xf7\\x36\\x1b\\xf7\\x0a\\xf1\\xbd\\xea\\xd8\\x1f\\xd0\\xe1\\xb5\\xf7\\x0a\\xf7\\x01\\x1a\\xf7\"\n\"\\x51\\xfb\\x01\\xf7\\x09\\xfb\\x44\\x39\\x3b\\x71\\x5d\\x4a\\x1e\\x65\\x6f\\x6e\\x6e\\x61\\x54\\xf7\\x12\\x47\\x18\\xe0\\xc4\\xca\\xb2\\xdb\\x1b\\xc7\\xba\\x70\"\n\"\\x5b\\x9f\\x1f\\x97\\x6f\\x8f\\x75\\x5a\\x1a\\xfb\\xbd\\x06\\x71\\xfb\\x11\\x05\\x0e\\xf8\\x28\\xf8\\x0a\\xf7\\xdf\\x15\\x8a\\x77\\x8a\\x7f\\x7b\\x1a\\xfb\\x51\"\n\"\\xf7\\x04\\xfb\\x09\\xf7\\x4a\\xf7\\x0e\\xf7\\x02\\xbf\\xe6\\xd6\\x1e\\xd2\\xe4\\xb5\\xf7\\x08\\xf7\\x04\\x1a\\xe4\\x72\\xd5\\x5a\\xc2\\x1e\\xc5\\x57\\x46\\xa7\"\n\"\\x2d\\x1b\\xfb\\x43\\xfb\\x2a\\xfb\\x01\\xfb\\x44\\x48\\x1f\\x20\\x54\\x0a\\xf8\\x94\\xf7\\xae\\x98\\x1d\\xe6\\xf8\\x86\\x16\\xf7\\x2a\\x4a\\x0a\\xfb\\xef\\x06\"\n\"\\x45\\x48\\x71\\x5e\\x58\\x1f\\x56\\x5c\\x69\\x41\\x4a\\x1a\\x4c\\xa8\\x55\\xba\\x70\\x1e\\x53\\x89\\x62\\x61\\x7c\\x47\\x72\\xfb\\x0d\\x18\\x79\\x4d\\x7c\\x74\"\n\"\\x6b\\x81\\x08\\xf7\\x2c\\x06\\xaa\\x95\\x9e\\xa4\\x98\\xbc\\xa5\\xf7\\x19\\x18\\x94\\xb6\\x9d\\x99\\xb7\\x8c\\x08\\xf7\\x52\\x06\\xa5\\xf7\\x11\\x15\\xfb\\x42\"\n\"\\x06\\x5b\\x6e\\xa7\\xbb\\xd0\\xc2\\xc6\\xcd\\x1f\\xf7\\x42\\x06\\x0e\\x4c\\xf8\\xc9\\x22\\x1d\\xfb\\xb3\\x35\\x0a\\xf7\\x14\\xf8\\xf0\\x05\\xf7\\x8d\\x06\\xa6\"\n\"\\xf7\\x11\\xf7\\x06\\xf7\\x0e\\x05\\xfb\\x19\\x06\\x0e\\xf7\\x8c\\xf7\\x93\\x16\\x23\\x0a\\xc9\\xf7\\xb8\\x99\\x9b\\x93\\x94\\x95\\x93\\x19\\xa3\\xa7\\xb6\\x98\"\n\"\\xbb\\x1b\\xc9\\xa8\\x7a\\x65\\x86\\x8a\\x81\\x88\\x81\\x1f\\x76\\x24\\x82\\x6a\\x6e\\x75\\x68\\x8c\\x19\\x43\\x06\\x71\\xfb\\x11\\x05\\xf7\\x14\\x06\\xe9\\xd4\"\n\"\\xc8\\xea\\xa0\\x1f\\xaa\\xf7\\x29\\x05\\x8f\\x9a\\x8c\\x98\\x98\\x1a\\xc0\\x6d\\xbf\\x61\\x9f\\x1e\\x98\\x71\\x62\\x92\\x5f\\x1b\\x3e\\x61\\x7c\\x56\\x47\\x1f\"\n\"\\xb1\\xf7\\x49\\x05\\xf7\\x70\\x25\\x1d\\xfc\\xb9\\x24\\x1d\\xf7\\x48\\x06\\x0e\\x73\\xda\\x5a\\x0a\\xf7\\xcd\\x25\\x1d\\xfc\\x62\\x06\\xf7\\x41\\xc5\\x15\\xf7\"\n\"\\x03\\x06\\xf7\\x07\\xf7\\x0e\\x05\\xfb\\x19\\x06\\x0e\\xdc\\xf8\\xbf\\xf7\\xce\\x15\\xa5\\xf7\\x11\\x05\\xfb\\xc0\\x06\\xa1\\xbc\\x99\\xa3\\xa3\\xa6\\x08\\xbb\"\n\"\\xb5\\xc5\\xa6\\xc7\\x1b\\xda\\xb9\\x63\\x35\\xa0\\x1f\\xf7\\x1f\\xc9\\x05\\xf7\\x10\\x69\\x2c\\xce\\xfb\\x24\\x1b\\xfb\\x0f\\x26\\x59\\x26\\x3d\\x1f\\x47\\x33\"\n\"\\x5f\\xfb\\x16\\xfb\\x04\\x1a\\xfb\\x3e\\xf7\\x02\\xfb\\x05\\xf7\\x39\\xf7\\x38\\xf7\\x0a\\xd7\\xf7\\x3a\\xeb\\x1e\\xfb\\x20\\xbb\\x05\\xfb\\x02\\x52\\x44\\x57\"\n\"\\x2f\\x1b\\x35\\x53\\xc8\\xea\\x97\\x8c\\xa0\\x8d\\x9f\\x1f\\x0e\\xa8\\xf9\\x5e\\xf8\\x8f\\x15\\x8f\\xa6\\x8c\\x98\\x9a\\x1a\\xc3\\x74\\xb9\\x61\\xa7\\x1e\\xaa\"\n\"\\x5c\\x45\\x9d\\x3f\\x1b\\x34\\x3b\\x72\\x5f\\x55\\x1f\\x52\\x5e\\x68\\x40\\x3e\\x1a\\x3a\\xc0\\x5c\\xf7\\x09\\x73\\x1e\\xec\\x78\\x05\\xdf\\x7a\\xac\\x73\\x5d\"\n\"\\x1a\\x44\\x47\\x5c\\x25\\x35\\x57\\xae\\xc4\\x91\\x8c\\x96\\x8c\\x95\\x1e\\xfb\\x26\\x06\\x88\\x75\\x8a\\x81\\x7b\\x1a\\xfb\\x0a\\xf3\\x40\\xf7\\x38\\xf7\\x00\"\n\"\\xe9\\xaa\\xc1\\xc1\\x1e\\xbd\\xbc\\xaa\\xd4\\xcf\\x1a\\xe3\\x58\\xc1\\x25\\x9f\\x1e\\xfb\\x02\\xa1\\x05\\x30\\x9d\\x6d\\x9d\\xb0\\x1a\\xcd\\xc7\\xb7\\xe3\\xd9\"\n\"\\xbb\\x6a\\x56\\x85\\x8a\\x81\\x89\\x81\\x1e\\x0e\\xf8\\x05\\x33\\x0a\\x0e\\x25\\x0a\\xde\\xfa\\x2c\\x45\\x0a\\x39\\xf8\\x83\\x22\\x1d\\xfb\\x06\\xfc\\xab\\x05\"\n\"\\x51\\x7e\\x68\\x6c\\x55\\x1b\\x62\\x73\\x9d\\xab\\x95\\x8d\\x9a\\x8e\\x99\\x1f\\x9b\\xd7\\x28\\x0a\\x7b\\x3f\\x05\\x86\\x75\\x89\\x79\\x7a\\x1a\\x60\\x9f\\x61\"\n\"\\xae\\x6c\\x1e\\x6e\\xad\\xbc\\x7c\\xc8\\x1b\\xd2\\xcc\\x9f\\xae\\xba\\x1f\\xb7\\xac\\xa4\\xba\\x9b\\xd6\\xf7\\x08\\xf8\\xb2\\x18\\x0e\\xf8\\x5c\\x9b\\x16\\xdf\"\n\"\\x06\\xde\\x8a\\xe4\\xd3\\x99\\xd9\\xec\\xf8\\x5b\\x18\\xf7\\x7c\\x6a\\x1d\\xf7\\xc0\\xb8\\x1d\\xfb\\x27\\x06\\xc6\\xf7\\xa9\\x05\\xfc\\xa7\\x06\\xfb\\x0d\\xfc\"\n\"\\xcd\\x85\\x73\\x7c\\x7f\\x75\\x8c\\x19\\x56\\x06\\xf9\\x00\\x16\\xb6\\xf7\\x5e\\x05\\xf7\\x2d\\x06\\xa8\\x99\\x87\\x7d\\x97\\x1f\\x96\\x7d\\x91\\x79\\x74\\x1a\"\n\"\\x44\\x5a\\x51\\x4f\\x1e\\x0e\\xf8\\x28\\xf7\\xa8\\xf7\\xdf\\x15\\xf7\\xa7\\x06\\x45\\xfb\\xdf\\x05\\xf7\\xaf\\xb8\\x1d\\xfb\\x16\\x06\\xc6\\xf7\\xa9\\x28\\x0a\"\n\"\\x51\\xfb\\xa5\\x05\\xfb\\xa7\\x06\\xc5\\xf7\\xa5\\x34\\x0a\\xf8\\x57\\xf7\\x11\\x15\\xb6\\xf7\\x5e\\x05\\xf7\\x1d\\x9e\\x0a\\xf7\\x6c\\xf7\\x60\\x16\\x23\\x0a\"\n\"\\xc9\\xf7\\xb8\\x05\\xbf\\xb7\\xaf\\x9d\\xc9\\x1b\\xc1\\xa7\\x79\\x68\\x85\\x8a\\x81\\x88\\x80\\x1f\\x4f\\xfb\\xae\\x20\\x0a\\xcc\\xf7\\xc5\\x05\\x8f\\x9d\\x8d\"\n\"\\x9b\\x98\\x1a\\xba\\x6c\\xbf\\x64\\x9e\\x1e\\x98\\x72\\x63\\x93\\x63\\x1b\\x47\\x61\\x7b\\x57\\x47\\x1f\\xb2\\xf7\\x49\\x05\\xf7\\x66\\x21\\x1d\\xfc\\xa9\\x24\"\n\"\\x1d\\xf7\\x41\\x06\\x0e\\x7b\\xc7\\x16\\x66\\x1d\\xf1\\xac\\x1d\\x2f\\x5c\\x0a\\xf7\\x51\\xcc\\x15\\xf7\\x04\\x06\\xf7\\x05\\xf7\\x05\\x05\\xfb\\x1b\\x06\\x0e\"\n\"\\xb2\\x91\\x1d\\xf7\\x98\\xf9\\xba\\x15\\x88\\x78\\x89\\x7a\\x7f\\x1a\\x6e\\x99\\x6d\\xa2\\x75\\x1e\\x75\\xa2\\xad\\x81\\xba\\x1b\\xc5\\xb9\\x9b\\xae\\xb2\\x1f\"\n\"\\xad\\xa9\\x99\\xa2\\x9a\\xc4\\x08\\x30\\x06\\x57\\x76\\x6d\\x73\\x5d\\x1b\\x63\\x71\\xa7\\xb3\\x8e\\x1f\\x8d\\x8b\\x8d\\x8c\\x8f\\x1e\\x0e\\x39\\xf8\\xa3\\x9c\"\n\"\\x15\\x7e\\x9c\\x86\\x98\\x98\\x1a\\x92\\x8c\\x92\\x8d\\x94\\x1e\\xca\\xf7\\xc0\\x05\\x8f\\x9a\\x8c\\x98\\x99\\x1a\\xab\\x7a\\xad\\x73\\x9e\\x1e\\xa5\\x69\\x59\"\n\"\\x98\\x42\\x1b\\x32\\x4e\\x79\\x63\\x5f\\x1f\\x65\\x67\\x73\\x60\\x83\\x59\\x08\\xf7\\x1c\\x06\\xc1\\x99\\xaa\\x9f\\xce\\x1b\\xba\\xa3\\x7d\\x70\\x7b\\x85\\x7b\"\n\"\\x7f\\x80\\x1f\\x7a\\x7a\\x81\\x88\\x38\\x7e\\x52\\x81\\x18\\x4e\\x82\\x61\\x78\\x6a\\x6c\\x08\\x64\\x66\\x75\\x57\\x55\\x1a\\x3a\\xbf\\x5a\\xe2\\xcc\\xbf\\xa2\"\n\"\\xc1\\xc2\\x1e\\x89\\x7c\\x8a\\x86\\x84\\x1a\\x81\\x8d\\x85\\x91\\x80\\x1e\\xf7\\x2d\\x06\\xfb\\x10\\xf7\\x6d\\x15\\x3a\\x7a\\x59\\x5d\\x44\\x1b\\x62\\x74\\x9d\"\n\"\\xab\\xa1\\x95\\xa0\\x9b\\x9b\\x1f\\x9c\\x9b\\x99\\x91\\xb3\\x93\\xbe\\x94\\x18\\xb0\\x92\\x93\\x8d\\x9c\\x93\\x08\\x0e\\x78\\xf8\\xc4\\xf9\\xe3\\x15\\x78\\x40\"\n\"\\x74\\x6f\\x52\\x7c\\xfb\\x0b\\x67\\x4f\\x65\\x4f\\x3c\\x08\\x43\\x2e\\x4f\\xfb\\x48\\xfb\\x0d\\x1a\\xfb\\x10\\xe6\\x3a\\xf7\\x1f\\xec\\xe2\\xb3\\xd2\\xc3\\x1e\"\n\"\\xbc\\xc9\\xac\\xf0\\xe4\\x1a\\xf7\\x0f\\x33\\xe1\\xfb\\x11\\x52\\x5b\\x79\\x65\\x5e\\x1e\\xa4\\xcd\\xb8\\xa6\\xf7\\x13\\xa5\\xf7\\x20\\xa8\\xb9\\xbb\\xb2\\xf7\"\n\"\\x32\\x08\\xfb\\xbe\\xfc\\x2f\\x15\\xc6\\xb0\\x5f\\x44\\x5a\\x7d\\x55\\x72\\x61\\x1f\\x53\\x6b\\x5d\\x6d\\x56\\x1b\\x50\\x66\\xb7\\xd1\\xf7\\x13\\xd8\\xf4\\xe8\"\n\"\\x1f\\x0e\\x69\\xdd\\x16\\xf7\\xcb\\x06\\xbe\\xc2\\x9e\\xa8\\xad\\x1f\\xae\\xaa\\xa3\\xbf\\xba\\x1a\\xbc\\x70\\xae\\x55\\x9e\\x1e\\xae\\x98\\x9b\\x94\\x9c\\x9b\"\n\"\\x08\\xa7\\xa5\\x9b\\xb1\\xb2\\x1a\\xcf\\x57\\xbd\\x45\\x1e\\xfb\\xc4\\x06\\xbc\\xfc\\x3f\\x15\\xa4\\xf7\\x0c\\x05\\xf7\\x18\\x06\\xa7\\x9d\\x78\\x6e\\x65\\x6a\"\n\"\\x69\\x65\\x1f\\x33\\xf7\\x65\\x15\\xa2\\xf7\\x00\\x05\\xf7\\x18\\x06\\xa2\\x98\\x7c\\x72\\x66\\x70\\x6c\\x6b\\x1f\\x0e\\x23\\xcf\\x48\\x0a\\xf7\\x91\\x2f\\x0a\"\n\"\\xfc\\x1d\\x06\\x0e\\x77\\x82\\xfb\\x04\\x15\\x21\\x0a\\xa3\\xf7\\x04\\x05\\xf7\\xc1\\x4e\\x1d\\x21\\x0a\\xbb\\xf7\\x75\\x05\\x58\\x06\\xe6\\xf8\\x3f\\x05\\xfc\"\n\"\\x20\\x06\\x4b\\xfb\\xbd\\x05\\x3d\\x7c\\x61\\x57\\x5b\\x1b\\x53\\x06\\xf8\\x1a\\x16\\xfb\\x46\\x06\\xbc\\xad\\xa7\\xb8\\x9b\\xd1\\xaf\\xf7\\x39\\x18\\xf7\\x08\"\n\"\\x06\\x0e\\x39\\x80\\x1d\\x0e\\x39\\x80\\x1d\\x50\\xf8\\x3a\\x45\\x0a\\xed\\xf8\\x4a\\x16\\xbd\\xf7\\x83\\x05\\xdd\\x06\\xa9\\xa4\\x0a\\xfb\\x02\\xfb\\x50\\x05\"\n\"\\x4d\\xd9\\x1d\\x42\\xad\\x1d\\xca\\x06\\x59\\xfb\\x83\\x05\\x0e\\xfb\\x14\\xda\\xf7\\x47\\x15\\x88\\x76\\x89\\x77\\x7e\\x1a\\x32\\xd6\\x50\\xf7\\x03\\xf7\\x1c\"\n\"\\xf6\\xe1\\xf7\\x00\\x6b\\x0a\\x0e\\x70\\x43\\x0a\\x0e\\x70\\x43\\x0a\\xf7\\x1d\\xf7\\x4e\\x15\\x88\\x7b\\x89\\x7d\\x81\\x1a\\x58\\xbe\\x64\\xcd\\xba\\xb8\\x9d\"\n\"\\xab\\xac\\x1e\\xa3\\xa1\\x93\\x9c\\x95\\xb4\\x08\\x47\\x06\\x62\\x7e\\x74\\x7c\\x5b\\x1b\\x63\\x75\\x99\\xa5\\x1f\\x8c\\x9b\\x05\\x0e\\xfb\\x17\\xf7\\x3b\\xf8\"\n\"\\xb0\\x15\\x2c\\x1d\\xbe\\xf7\\x83\\x05\\xd2\\x5d\\x0a\\xf7\\x1f\\x06\\x5b\\xf7\\xc1\\xf7\\x22\\xf7\\x83\\x05\\xfb\\x28\\x06\\xfb\\x02\\xfb\\x50\\x05\\x4e\\x3b\"\n\"\\x1d\\x0e\\x7b\\xa9\\xd4\\x1d\\xf7\\x25\\xd3\\x1d\\xfc\\x3d\\xb4\\x0a\\x0e\\xf1\\xf9\\x27\\x16\\xf7\\x07\\xf8\\xb0\\x05\\xfb\\x51\\x06\\xfb\\x51\\xfc\\x29\\x7f\"\n\"\\xf8\\x29\\x05\\xfb\\x50\\x06\\xfb\\x07\\xfc\\xb0\\x05\\xf7\\x17\\x06\\xe3\\xf8\\x30\\x97\\xfc\\x30\\x05\\xf7\\x03\\x06\\xf7\\x52\\xf8\\x30\\x33\\xfc\\x30\\x05\"\n\"\\x0e\\x69\\xa9\\x0a\\x21\\x0a\\xf7\\x07\\xf8\\xb0\\x9d\\x0a\\x70\\x7d\\x0a\\x81\\xfb\\x05\\x15\\xc5\\xb0\\x5e\\x45\\x5a\\x7d\\x56\\x72\\x60\\x1f\\x54\\x6b\\x5b\"\n\"\\x6c\\x57\\x1b\\x51\\x66\\xb7\\xd1\\xf7\\x13\\xd9\\xf4\\xe8\\x1f\\x0e\\x70\\xd7\\x48\\x0a\\xf7\\x46\\xd3\\x1d\\xfc\\x5e\\x06\\x0e\\x70\\xf7\\xcf\\xf8\\xb0\\x23\"\n\"\\x1d\\xfb\\x35\\xfd\\x8a\\x20\\x1d\\xc7\\xf7\\xae\\x05\\x4f\\xa1\\xb7\\x70\\xd4\\x1b\\xdf\\xd4\\xb2\\xd4\\xc0\\x1f\\xbc\\xce\\xa7\\xe9\\xe7\\x1a\\xf7\\x0e\\x44\"\n\"\\xe0\\x25\\x47\\x53\\x6e\\x4f\\x5e\\x1e\\xf7\\x03\\x74\\x15\\xc1\\xad\\x5f\\x45\\xfb\\x12\\x41\\xfb\\x00\\x35\\x56\\x5f\\x1d\\x39\\xf8\\xe8\\xf7\\xe6\\x15\\x8c\"\n\"\\x9a\\x8c\\x99\\x95\\x1a\\xb2\\x7c\\xb3\\x70\\xa9\\x1e\\xb6\\x65\\x58\\x9f\\x41\\x1b\\x38\\x46\\x6e\\x52\\x55\\x1f\\x4d\\x4a\\x5f\\xfb\\x0d\\x24\\x1a\\xfb\\x0b\"\n\"\\xdf\\x3e\\xf7\\x18\\xd9\\xc7\\xa1\\xba\\xbb\\x1e\\xb3\\xb2\\xa5\\xb7\\x9c\\xc4\\x08\\xfb\\x23\\x06\\x47\\x6d\\x6a\\x6f\\x58\\x1b\\x54\\x6d\\xae\\xcd\\xc1\\x9a\"\n\"\\xc8\\xa5\\xbb\\x1f\\xc2\\xa8\\xb0\\xa5\\xbd\\x1b\\xbb\\xaa\\x70\\x62\\x81\\x8a\\x84\\x88\\x7e\\x1f\\x0e\\xf7\\x8f\\xf8\\x0b\\x48\\x0a\\xf7\\x70\\x2f\\x0a\\xfc\"\n\"\\xf0\\x3f\\x0a\\xf7\\x88\\x06\\x0e\\x39\\x90\\x1d\\x0e\\xf7\\x8b\\xf7\\xdb\\xfb\\x6e\\x15\\x21\\x0a\\xb9\\xf7\\x6e\\x05\\xd3\\xb6\\x93\\xa3\\xc1\\x1f\\xf7\\x0a\"\n\"\\xc0\\xda\\xf7\\x09\\xf7\\x0e\\x1a\\xf7\\x13\\x23\\xe5\\xfb\\x27\\x8a\\x1e\\xb4\\xf7\\x58\\x22\\x0a\\x62\\xfb\\x58\\x05\\x42\\x63\\x84\\x77\\x59\\x1f\\xfb\\x0f\"\n\"\\x57\\x3b\\xfb\\x07\\xfb\\x15\\x1a\\x2d\\xc6\\x40\\xf0\\x69\\x1e\\x7f\\xad\\x9c\\x89\\xb3\\x1b\\xa3\\xf7\\x05\\x15\\x62\\x8e\\x79\\x8f\\x75\\x98\\x08\\x68\\x9e\"\n\"\\x77\\xb1\\xb8\\x1a\\xc0\\xa7\\xc2\\xbc\\xb2\\x1e\\xae\\xa8\\xaa\\x96\\xc7\\x90\\x08\\xf7\\x20\\x16\\xb4\\x89\\x9e\\x86\\xa1\\x7f\\x08\\xad\\x78\\x9f\\x66\\x60\"\n\"\\x1a\\x50\\x6c\\x4f\\x58\\x65\\x1e\\x69\\x71\\x6d\\x82\\x52\\x87\\x08\\x0e\\x39\\xf8\\x33\\xf7\\xa4\\x15\\xf7\\x7d\\xf7\\xa0\\x05\\xfb\\x41\\x06\\xfb\\x0e\\xfb\"\n\"\\x37\\x56\\xf7\\x37\\x05\\xfb\\x37\\x06\\xf7\\x0b\\xfb\\xa0\\xfb\\x82\\xfb\\xa4\\x05\\xf7\\x41\\x06\\xf7\\x14\\xf7\\x3c\\xc2\\xfb\\x3c\\x05\\xf7\\x37\\x06\\x0e\"\n\"\\x93\\xe2\\x16\\xf8\\x05\\x06\\x69\\xfb\\x2f\\x05\\x21\\x0a\\xc5\\xf7\\xa0\\x05\\x53\\x94\\x0a\\x54\\xf8\\x15\\x16\\xf7\\x22\\x8c\\x1d\\xec\\xc1\\xc1\\x94\\x9c\"\n\"\\xbc\\x1e\\x0e\\xf7\\x8f\\xc9\\x16\\xf9\\x92\\x06\\xf7\\x06\\xf8\\xb0\\x80\\x0a\\xf7\\xbd\\xd6\\x16\\xf9\\x3e\\x06\\x68\\xfb\\x31\\x20\\x1d\\xc6\\xf7\\xa2\\x05\"\n\"\\x53\\x06\\xe5\\xf8\\x3f\\x80\\x0a\\xd0\\xf7\\x15\\x29\\x0a\\x73\\xfb\\x05\\x05\\xf7\\x47\\x06\\x30\\xfc\\x3f\\x05\\xf7\\xaf\\xa0\\x0a\\xfb\\x23\\x06\\xb6\\xf7\"\n\"\\x5c\\x05\\x30\\xfc\\x3f\\x15\\xa3\\xb9\\x0a\\x69\\x1f\\x0e\\xf7\\x6c\\xf0\\x76\\x0a\\xf7\\x67\\xfb\\x05\\x15\\x63\\x1d\\x0e\\x5f\\xdd\\x76\\x0a\\x0e\\x35\\xf7\"\n\"\\x6e\\xf7\\x76\\x15\\xf7\\x6b\\x06\\x34\\x6d\\x53\\x5a\\x48\\x1b\\x67\\x6c\\x9d\\xa9\\x7c\\x1f\\x82\\x9b\\x88\\x98\\x89\\xa8\\xfb\\x21\\x68\\x18\\x94\\x58\\x95\"\n\"\\x71\\x9f\\x6f\\x08\\x59\\xb0\\xd0\\x6e\\xdd\\x1b\\xe8\\xe1\\xaf\\xc8\\xbf\\x1f\\xc4\\xcd\\xaf\\xef\\xe6\\x1a\\xf7\\x1a\\x33\\xdf\\xfb\\x22\\x25\\x35\\x60\\x38\"\n\"\\x4d\\x1e\\xf7\\x07\\x4d\\x05\\xbf\\xb0\\xb2\\xa2\\xbd\\x1b\\xc2\\xb7\\x5c\\x52\\x88\\x1f\\x8a\\x80\\x05\\xfb\\x67\\x06\\x0e\\xf7\\x77\\xf7\\xe5\\xf7\\x77\\x15\"\n\"\\x89\\x7d\\x8b\\x84\\x80\\x1a\\xfb\\x1d\\xe0\\x3a\\xf7\\x25\\xe9\\xe0\\xb1\\xcd\\xc2\\x1e\\xc1\\xcc\\xad\\xed\\xe4\\x1a\\xf7\\x1a\\x35\\xdd\\xfb\\x22\\xfb\\x20\"\n\"\\x24\\x42\\xfb\\x1c\\x56\\x1e\\x2d\\x06\\xb6\\xf7\\x5c\\x5d\\x1d\\xbb\\xf7\\x77\\x05\\xf8\\x28\\xf7\\x65\\x15\\xc5\\xb0\\x5e\\x45\\xfb\\x11\\x3d\\x21\\x2e\\x51\"\n\"\\x66\\xb7\\xd1\\xf7\\x13\\xd9\\xf4\\xe8\\x1f\\x0e\\x5a\\xf8\\x0c\\x16\\x21\\x0a\\xf7\\x07\\xf8\\xb0\\x05\\xfb\\xbf\\x06\\xfb\\x0a\\x33\\x3d\\x22\\x58\\x9e\\x68\"\n\"\\xb6\\x6f\\x1f\\x5f\\x77\\x79\\x73\\x7f\\x55\\x84\\x6a\\x18\\x7e\\x59\\x7b\\x6a\\x71\\x6e\\x08\\xf7\\x24\\x06\\x9f\\xa3\\x98\\xab\\x94\\xb8\\x93\\xad\\x18\\xbc\"\n\"\\x95\\xa0\\x9c\\xbd\\x1b\\xe7\\x06\\xa3\\xf7\\x05\\x15\\xfb\\x21\\x06\\x73\\x7d\\x9a\\xa6\\xb3\\xa6\\xaa\\xae\\x1f\\xf7\\x21\\x06\\x0e\\xfb\\x3f\\xf8\\x59\\x29\"\n\"\\x0a\\xfb\\xa1\\x06\\x2c\\x1d\\xe6\\xf8\\x3f\\x05\\xf7\\x6e\\x06\\xa3\\xf7\\x05\\xf7\\x3b\\xf7\\x32\\x05\\xfb\\x19\\x06\\x0e\\x70\\xf7\\x22\\x16\\x21\\x0a\\xba\"\n\"\\xf7\\x71\\x05\\xaf\\xb0\\xa4\\x98\\xa7\\x1b\\xa5\\x9b\\x7e\\x78\\x81\\x8b\\x8a\\x8a\\x85\\x1f\\x60\\xfb\\x5e\\x84\\x65\\x6c\\x70\\x66\\x8a\\x19\\x2b\\x06\\x78\"\n\"\\x2e\\x05\\xf7\\x10\\x06\\xf7\\x0a\\x91\\xcf\\xc5\\xa3\\xf7\\x08\\xb2\\xf7\\x49\\x18\\x8e\\x99\\x8c\\x98\\x9a\\x1a\\xcc\\x5b\\xb7\\x45\\x60\\x66\\x7e\\x6a\\x54\"\n\"\\x1e\\xb6\\xf7\\x60\\x05\\xf7\\x1a\\x06\\x9f\\xe8\\x05\\xfb\\x1a\\x2f\\x0a\\xfb\\x20\\x3f\\x0a\\x21\\x33\\x1d\\xf5\\x06\\x0e\\xfb\\x3d\\xca\\x48\\x0a\\xf7\\x75\"\n\"\\x2f\\x0a\\xfc\\x01\\x06\\xf7\\x18\\xc5\\x15\\xe4\\x06\\xf7\\x3c\\xf7\\x32\\x05\\xfb\\x1a\\x06\\x0e\\x40\\xf8\\x45\\xf7\\x76\\x15\\x9f\\xea\\x05\\xfb\\x67\\x06\"\n\"\\xd0\\xa5\\xc5\\xb9\\xc8\\x1b\\xbc\\xa8\\x73\\x58\\x99\\x1f\\xf7\\x18\\xc5\\x7e\\xaa\\x7f\\x9d\\x7a\\x9d\\x19\\xb2\\x64\\x4a\\xa3\\x44\\x1b\\x34\\x39\\x68\\x4e\"\n\"\\x52\\x1f\\x52\\x4d\\x65\\x24\\x2e\\x1a\\x4f\\xa3\\x4d\\xb1\\x66\\x1e\\x65\\xb2\\xc7\\x76\\xd0\\x1b\\xd6\\xd0\\xa3\\xba\\xc4\\x1f\\xb3\\xab\\xa0\\xa7\\xa1\\xbe\"\n\"\\xfb\\x18\\xb0\\x18\\x44\\x68\\x5b\\x68\\x4e\\x1b\\x54\\x64\\xb8\\xc9\\x94\\x8b\\x94\\x8c\\x96\\x1f\\x0e\\x39\\xf8\\xdd\\xf8\\x02\\x15\\x8d\\xa3\\x8b\\x8c\\x92\"\n\"\\x1a\\xe7\\x38\\xc6\\xfb\\x14\\x46\\x50\\x78\\x67\\x5e\\x1e\\x5d\\x67\\x6d\\x50\\x57\\x1a\\x5a\\xab\\x66\\xc5\\x78\\x1e\\xf7\\x30\\x58\\x05\\xa3\\x82\\x98\\x7d\"\n\"\\x78\\x1a\\x64\\x5f\\x74\\x42\\x4e\\x6c\\x9d\\xad\\x91\\x8b\\x8e\\x8d\\x94\\x1e\\xfb\\x20\\x06\\x89\\x7e\\x8b\\x85\\x83\\x1a\\x27\\xd6\\x56\\xf7\\x1e\\xeb\\xd6\"\n\"\\xa4\\xba\\xbb\\x1e\\xb0\\xaf\\xa3\\xc0\\xb6\\x1a\\xb9\\x6c\\xb4\\x5d\\x99\\x1e\\xfb\\x39\\xbf\\x05\\x70\\x93\\x7c\\x9c\\xa0\\x1a\\xae\\xb1\\xa3\\xc2\\xc2\\xab\"\n\"\\x78\\x69\\x84\\x8a\\x87\\x87\\x82\\x1e\\x0e\\xf7\\xd8\\x84\\x0a\\x2a\\x1d\\xbc\\xf9\\x79\\x45\\x0a\\xf7\\xda\\xf8\\xb0\\x23\\x1d\\xfb\\x14\\xfc\\xee\\x05\\x69\"\n\"\\x84\\x7f\\x82\\x63\\x1b\\x7b\\x3f\\x0a\\x9a\\x06\\xc0\\x06\\xc4\\xa2\\x90\\x9a\\xa3\\x1f\\xa8\\x9e\\xa0\\xad\\x95\\xbb\\x08\\xf7\\x43\\xf9\\xce\\x23\\x1d\\x71\"\n\"\\xfb\\x11\\x20\\x1d\\x0e\\xf7\\xdf\\xac\\xd4\\x1d\\xf7\\x3e\\x06\\x31\\xfc\\x3f\\x05\\xf7\\xc4\\xa0\\x0a\\xfb\\x38\\x06\\xb6\\xf7\\x5c\\x05\\xfc\\x57\\xb4\\x0a\"\n\"\\xf8\\xb0\\x16\\xa3\\xf7\\x06\\x05\\xf7\\x31\\x06\\xa3\\x9b\\x7b\\x71\\x64\\x6d\\x6a\\x69\\x1f\\x0e\\xf7\\xa0\\xd1\\x16\\x21\\x0a\\xbb\\xf7\\x77\\x05\\xf7\\x58\"\n\"\\x06\\x5a\\xfb\\x77\\x05\\xf7\\xaf\\x06\\xc5\\xc0\\xc9\\x1d\\xfb\\x23\\x06\\xb5\\xf7\\x5c\\xbe\\x1d\\xf8\\x14\\xfc\\x3f\\x15\\xa4\\xb9\\x0a\\x68\\x1f\\x0e\\x70\"\n\"\\xea\\x16\\x21\\x0a\\xca\\xf7\\xbb\\x05\\xc7\\xb5\\xb2\\xa5\\xbd\\x1b\\xb4\\xa4\\x72\\x62\\x84\\x8a\\x84\\x8a\\x85\\xd5\\x1d\\x98\\x8c\\x98\\x98\\x1a\\xd2\\x4b\"\n\"\\xc5\\x3e\\x52\\x5a\\x78\\x5a\\x44\\x1e\\xa3\\xf7\\x07\\x05\\xf7\\x1d\\x06\\x9f\\xe8\\x05\\xfb\\x1d\\x06\\xa0\\xf0\\x22\\x0a\\x76\\x26\\x05\\x24\\x33\\x1d\\xf2\"\n\"\\x06\\x0e\\xfb\\x17\\xf7\\x40\\xad\\x0a\\xd1\\x06\\xb2\\xfb\\x83\\x05\\xf7\\x1e\\x06\\x5c\\xf7\\xc1\\xf7\\x21\\xf7\\x83\\x05\\xfb\\x27\\x06\\xfb\\x02\\xfb\\x50\"\n\"\\x05\\x4f\\x3b\\x1d\\xa6\\xc5\\x15\\xe7\\x06\\xf7\\x39\\xf7\\x32\\x05\\xfb\\x17\\x06\\x0e\\x39\\x90\\x1d\\xfb\\xfc\\xf7\\x5b\\x15\\x88\\x7b\\x8a\\x7d\\x80\\x1a\"\n\"\\x56\\xbe\\x64\\xd0\\xba\\xb9\\x9d\\xab\\xac\\x1e\\xa2\\xa2\\x94\\x9d\\x96\\xb5\\x08\\x46\\x06\\x5f\\x7c\\x77\\x7e\\x58\\x1b\\x60\\x77\\x98\\xa6\\x8f\\x8b\\x92\"\n\"\\x8c\\x91\\x1f\\x0e\\xdc\\xd8\\x16\\xf7\\x64\\x06\\x6a\\xfb\\x33\\x20\\x0a\\xac\\xf7\\x33\\x05\\xf7\\x64\\x06\\xf7\\x2f\\xf9\\x6d\\x96\\x0a\\x70\\xda\\x16\\xf7\"\n\"\\x30\\x06\\x6b\\xfb\\x31\\x20\\x1d\\xab\\xf7\\x31\\x05\\xf7\\x31\\x06\\xf7\\x07\\xf8\\xb0\\xbb\\x1d\\x4c\\xee\\xf7\\xc0\\x15\\x80\\x5a\\x87\\x68\\x66\\x1a\\xfb\"\n\"\\x0d\\xe2\\x3a\\xf7\\x16\\xe0\\xda\\xb1\\xcf\\xc1\\x1e\\xc0\\xcd\\xad\\xf1\\xeb\\x1a\\xf7\\x11\\x39\\xd8\\xfb\\x18\\xfb\\x0c\\x2c\\x4d\\xfb\\x05\\x57\\x1e\\xf7\"\n\"\\x24\\x06\\xb4\\xa3\\xb3\\xa2\\xbc\\x1b\\xc3\\xaa\\x6d\\x54\\x7a\\x89\\x7d\\x86\\x75\\x1f\\x76\\x2e\\x15\\x3a\\x70\\x60\\x64\\x4c\\x1b\\x57\\x6a\\xac\\xc0\\x95\"\n\"\\x8c\\x94\\x8d\\x9a\\x1f\\x0e\\xf7\\x8b\\xf8\\x99\\xf8\\xd4\\x15\\x8c\\x98\\x8c\\x92\\x94\\x1a\\xda\\x58\\xba\\x35\\x4a\\x53\\x73\\x5f\\x62\\x1e\\x5e\\x5a\\x6d\"\n\"\\x37\\x3f\\x1a\\x35\\xc1\\x58\\xe8\\xe9\\xd9\\xc6\\xea\\xa9\\x1e\\xfb\\x06\\x06\\x61\\x79\\x78\\x7b\\x6c\\x1b\\x6d\\x7b\\xa0\\xb2\\xad\\x94\\xb4\\x9a\\xab\\x1f\"\n\"\\xb2\\x9d\\x9f\\x9b\\xaa\\x1b\\xab\\x96\\x7c\\x5f\\x8c\\x1f\\xf7\\xe0\\xfb\\x47\\x15\\x41\\x47\\x6a\\x53\\x60\\x1f\\x67\\x5d\\x74\\x45\\x4c\\x1a\\x30\\xc5\\x55\"\n\"\\xed\\xf7\\x20\\xf3\\xf7\\x07\\xf7\\x2f\\xe5\\x51\\xc0\\x29\\x1e\\x78\\x2b\\x15\\xac\\xa0\\x70\\x60\\x3a\\x5b\\x45\\x54\\x69\\x76\\xa6\\xb6\\xdc\\xbb\\xd1\\xc3\"\n\"\\x1f\\x97\\xf8\\x2c\\x15\\xfc\\xaa\\xfd\\x59\\x05\\xda\\x06\\xf8\\xab\\xf9\\x59\\x05\\x0e\\xfb\\x0e\\xf7\\xb0\\xf7\\xb8\\x15\\xda\\xcd\\xbc\\xbb\\xab\\xb6\\x08\"\n\"\\xbf\\xd1\\xaa\\xd8\\xc4\\x1a\\xc0\\x6b\\xac\\x59\\x20\\x38\\xfb\\x23\\xfb\\xd1\\x40\\x1e\\x69\\x6d\\x71\\x75\\x7b\\x81\\x08\\x76\\x7c\\x83\\x83\\x83\\x1a\\x85\"\n\"\\x94\\x82\\x92\\x94\\xb0\\xa3\\xa5\\xac\\x1e\\x7c\\x29\\x89\\x79\\x6b\\x1a\\x52\\xad\\x69\\xc3\\xb8\\xae\\xa0\\xb7\\xac\\x1e\\x9a\\xa0\\x94\\x9f\\x97\\x1a\\x92\"\n\"\\x84\\x91\\x82\\x80\\x84\\x86\\x7d\\x83\\x1e\\x5d\\x6f\\x7a\\x7c\\x71\\x1b\\x79\\x83\\x94\\x9e\\xa5\\xa1\\xf7\\x0a\\xa0\\xe2\\x1f\\x97\\xc2\\x15\\xf7\\x9d\\xc3\"\n\"\\xaf\\xe2\\xc3\\x1b\\xa1\\x99\\x7a\\x71\\x6d\\x7e\\x5a\\x78\\x62\\x1f\\x6c\\x48\\x5f\\x53\\x3e\\x49\\x08\\x0e\\xf8\\x90\\xf8\\x46\\x16\\xf7\\x0b\\x06\\xf7\\x2e\"\n\"\\xf9\\x6d\\x05\\xfb\\x10\\x06\\x20\\xfc\\x8e\\xfb\\x1f\\xf8\\x8e\\x05\\xfb\\x0f\\x06\\xfb\\x2e\\xfd\\x6d\\x05\\xf7\\x11\\x06\\xf7\\x00\\xf8\\x96\\x05\\xf7\\xfd\"\n\"\\xfc\\x96\\x15\\xf8\\x45\\x06\\x9f\\xea\\x05\\xfc\\x45\\x06\\xf7\\xe5\\xf9\\x1a\\x15\\x38\\x40\\x60\\x3c\\x57\\x1f\\x64\\x4f\\x6c\\xfb\\x04\\x38\\x1a\\xfb\\x09\"\n\"\\xd5\\x3d\\xf7\\x02\\xdf\\xd4\\xb5\\xda\\xc0\\x1e\\xb3\\xc7\\xaa\\xf7\\x04\\xe0\\x1a\\xf7\\x08\\x41\\xd9\\xfb\\x03\\x1e\\x6b\\xfb\\x05\\x15\\xbe\\x88\\xa7\\x62\"\n\"\\x44\\x1a\\xfb\\x11\\x4b\\x21\\x3e\\x5a\\x6c\\xb6\\xd2\\xf7\\x12\\xce\\xf7\\x02\\xd6\\x87\\x1e\\x0e\\x79\\xf8\\xc9\\xf7\\x9d\\x15\\xf7\\x3d\\xf7\\xa7\\x22\\x0a\"\n\"\\x42\\xba\\x0a\\x56\\x1b\\x43\\x49\\x65\\x49\\x5c\\x1f\\x59\\x44\\x6f\\x30\\x32\\x1a\\xfb\\x18\\xce\\x36\\xf1\\xc4\\xc4\\xa5\\xb7\\xb3\\x1e\\xa0\\xa3\\x97\\x9b\"\n\"\\xaa\\xbb\\x9f\\xfb\\x1b\\x18\\xf7\\x20\\x06\\xfb\\x4c\\xf7\\xa6\\x15\\x6a\\x4c\\x83\\x7d\\x79\\x6f\\x08\\x5b\\x6c\\x5f\\x6c\\x67\\x1b\\x6c\\x75\\xba\\xcc\\xf7\"\n\"\\x10\\xc9\\xf7\\x02\\xd0\\xbf\\xa7\\x59\\xfb\\x04\\x97\\x1f\\x0e\\x79\\xf8\\xca\\xf7\\x9d\\x15\\xf7\\x3d\\xf7\\xa7\\x22\\x0a\\x41\\xba\\x0a\\x57\\x1b\\x44\\x4a\"\n\"\\x65\\x49\\x5c\\x1f\\x5b\\x44\\x6f\\x30\\x32\\x1a\\xfb\\x18\\xcc\\x36\\xef\\xc3\\xc5\\xa5\\xb7\\xb2\\x1e\\xa0\\xa3\\x97\\x9b\\xaa\\xbb\\x9f\\xfb\\x1b\\x18\\x21\"\n\"\\x0a\\xfb\\x4c\\xf7\\xa6\\x15\\x60\\x38\\x7c\\x73\\x77\\x74\\x08\\x69\\x6d\\x6b\\x77\\x72\\x1b\\x6a\\x77\\xb6\\xd2\\xbf\\x98\\xc3\\xa1\\xbb\\x1f\\xbb\\xa2\\xad\"\n\"\\xa7\\xad\\x1b\\xbf\\xa8\\x59\\xfb\\x04\\x96\\x1f\\xb4\\xf8\\x97\\x26\\x1d\\x39\\x2d\\x1d\\xf7\\x3f\\xf8\\x67\\x15\\xfb\\xc0\\x27\\x0a\\xf7\\xc0\\x06\\x0e\\xfb\"\n\"\\xc5\\xc5\\xf7\\x82\\x15\\xf7\\x42\\xfb\\xe8\\x05\\x7b\\x93\\x95\\x84\\x97\\x1b\\x93\\x90\\x8f\\x92\\x92\\x89\\x93\\x88\\x93\\x1f\\xfb\\x17\\xf7\\xdd\\xf7\\x17\"\n\"\\xf7\\xdd\\x05\\x8e\\x93\\x8d\\x93\\x92\\x1a\\x93\\x86\\x8f\\x83\\x7f\\x83\\x85\\x79\\x81\\x1e\\x0e\\xfb\\xc5\\xf7\\xa7\\xf7\\x82\\x15\\xfb\\x42\\xf7\\xe8\\x05\"\n\"\\x9c\\x82\\x82\\x92\\x7f\\x1b\\x83\\x86\\x87\\x83\\x85\\x8d\\x83\\x8e\\x82\\x1f\\xf7\\x17\\xfb\\xdd\\xfb\\x17\\xfb\\xdd\\x05\\x88\\x84\\x89\\x83\\x84\\x1a\\x83\"\n\"\\x90\\x87\\x93\\x97\\x93\\x91\\x9c\\x95\\x1e\\x0e\\x39\\xf8\\xa3\\x9c\\x15\\x7c\\x9c\\x85\\x98\\x9a\\x1a\\x91\\x8c\\x92\\x8d\\x93\\x1e\\xca\\xf7\\xc0\\x05\\x8f\"\n\"\\x9d\\x8d\\x9a\\x97\\x1a\\xa8\\x7a\\xae\\x73\\x9e\\x1e\\xa5\\x6b\\x5b\\x97\\x44\\x1b\\xfb\\x31\\x3a\\x52\\xfb\\x16\\x6f\\x1f\\xf7\\x17\\x06\\xc2\\x9c\\xa9\\x9f\"\n\"\\xcc\\x1b\\xbe\\xa1\\x7e\\x6d\\x76\\x7d\\x75\\x77\\x81\\x1f\\x77\\x80\\x8b\\x8b\\x43\\x81\\x51\\x82\\x18\\x5b\\x83\\x66\\x7d\\x6c\\x75\\x08\\x56\\x65\\x6a\\x4e\"\n\"\\x4f\\x1a\\x65\\x9d\\x65\\xa8\\x73\\x1e\\x76\\xa4\\xad\\x81\\xb7\\x1b\\xc4\\xbc\\xa1\\xc2\\xc7\\x1f\\x88\\x7c\\x8b\\x86\\x84\\x1a\\x81\\x8d\\x85\\x90\\x80\\x1e\"\n\"\\xda\\x06\\x24\\x64\\x56\\x56\\x4d\\x1a\\x57\\xba\\x70\\xe3\\xa8\\x9f\\x8d\\x92\\xab\\x1e\\x95\\xbf\\x05\\x83\\x72\\x77\\x88\\x6c\\x1b\\x68\\x7b\\x98\\xa9\\xba\"\n\"\\xb5\\xb9\\xe4\\xba\\x1f\\x97\\x1d\\x0e\\x32\\xf7\\x31\\xf7\\x84\\x15\\xbc\\xae\\xa0\\x99\\xac\\x1b\\x9d\\x90\\x89\\x73\\xc8\\x1f\\x78\\xba\\xa4\\x84\\x9f\\x1b\"\n\"\\xa9\\xac\\x95\\x9e\\xa9\\x1f\\xa9\\x9f\\xa0\\xa1\\xb3\\xc5\\x50\\xb2\\x18\\x62\\x6a\\x76\\x7e\\x6a\\x1b\\x76\\x82\\x8d\\xa2\\x56\\x1f\\x9e\\x5c\\x6f\\x93\\x72\"\n\"\\x1b\\x47\\x5d\\x68\\x28\\x4c\\x1f\\x98\\xfb\\x8b\\x15\\xbc\\xaf\\x9f\\x99\\xac\\x1b\\x9e\\x8f\\x89\\x73\\xc8\\x1f\\x78\\xbb\\xa4\\x84\\x9f\\x1b\\xa9\\xac\\x95\"\n\"\\x9e\\xa9\\x1f\\xa9\\x9f\\x9f\\xa1\\xb4\\xc5\\x4f\\xb2\\x18\\x61\\x6a\\x77\\x7f\\x69\\x1b\\x76\\x83\\x8d\\xa2\\x55\\x1f\\x9e\\x5c\\x6f\\x93\\x73\\x1b\\x47\\x5c\"\n\"\\x68\\x28\\x4d\\x1f\\x0e\\x39\\x2d\\x1d\\xa9\\xf8\\x9a\\x2e\\x1d\\xc9\\xf7\\x35\\x2b\\x1d\\xf7\\xfe\\xf9\\x5e\\xf7\\xac\\x15\\x7b\\x77\\x81\\x7b\\x7f\\x75\\x08\"\n\"\\x81\\x79\\x7d\\x65\\x84\\x1a\\x82\\x93\\x84\\x95\\x94\\x8e\\x8d\\x9f\\x9b\\x1e\\xb3\\xba\\xab\\xa4\\xe5\\xc1\\x08\\x9c\\x94\\x8d\\x8e\\x93\\x1a\\x94\\x85\\x91\"\n\"\\x76\\x96\\x1e\\x53\\xa7\\x4c\\xbd\\x66\\xb7\\x08\\x98\\x81\\x83\\x92\\x86\\x1b\\x7e\\x83\\x85\\x81\\x78\\xb0\\x41\\xa4\\x6d\\x1f\\xfc\\x3f\\x06\\xa4\\xa9\\xb1\"\n\"\\xd6\\x9d\\x1a\\x95\\x83\\x91\\x7f\\x86\\x87\\x88\\x7a\\x7c\\x1e\\x70\\x69\\x46\\x53\\x63\\x76\\x08\\x63\\x75\\x84\\x86\\x83\\x1a\\x83\\x8e\\x86\\x94\\x86\\x1e\"\n\"\\xef\\x4f\\xa1\\x7a\\xba\\x56\\x08\\x76\\x9e\\x8c\\x8a\\x94\\x1b\\x95\\x92\\x92\\x94\\x9f\\x6b\\xc8\\x6c\\xb3\\x1f\\x0e\\xfb\\x1e\\xf7\\x6e\\xf9\\x69\\x15\\xfd\"\n\"\\x29\\x07\\xa4\\x6d\\x41\\xb0\\x79\\x1b\\x83\\x83\\x83\\x83\\x81\\x8f\\x86\\x9b\\x7e\\x1f\\xbb\\x61\\xa6\\x69\\xba\\x3a\\x08\\x74\\x98\\x8e\\x87\\x92\\x1b\\x97\"\n\"\\x8c\\x8c\\xac\\x9e\\x1f\\xb0\\xcc\\xac\\xb6\\xba\\xb3\\x08\\xa0\\x9d\\x8c\\x8d\\x94\\x1a\\x95\\x84\\x92\\x82\\x76\\x4c\\x6b\\x6d\\x65\\x1e\\xf9\\x29\\x07\\x0e\"\n\"\\xf7\\xfe\\xfa\\x25\\xf7\\xad\\x15\\xc7\\xfd\\x29\\x07\\xa9\\xb1\\xab\\xca\\xa0\\x1a\\x94\\x84\\x92\\x81\\x82\\x89\\x8a\\x76\\x79\\x1e\\x67\\x61\\x63\\x6b\\x56\"\n\"\\x6b\\x08\\x56\\x6c\\x8b\\x8b\\x7f\\x1a\\x84\\x8f\\x88\\xa2\\x7e\\x1e\\xdc\\x5c\\xad\\x70\\xb5\\x5b\\x08\\x7b\\x98\\x90\\x87\\x95\\x1b\\x93\\x93\\x93\\x93\\x9d\"\n\"\\x66\\xd5\\x72\\xa9\\x1f\\x0e\\xf7\\xfe\\xe1\\xf7\\xad\\x15\\xf9\\x29\\x06\\x72\\x6d\\x66\\x41\\x79\\x1a\\x83\\x93\\x83\\x93\\x95\\x90\\x8f\\x9b\\x98\\x1e\\xb5\"\n\"\\xbb\\xad\\xa6\\xdc\\xba\\x08\\xa2\\x98\\x8f\\x8e\\x92\\x1a\\x97\\x8a\\x8c\\x6a\\x9e\\x1e\\x4a\\xb0\\x60\\xac\\x63\\xba\\x08\\xa0\\x79\\x89\\x8c\\x82\\x1b\\x81\"\n\"\\x84\\x84\\x82\\x76\\xab\\x4c\\xa9\\x65\\x1f\\xfd\\x29\\x06\\x0e\\xfb\\x1e\\xf7\\x6e\\x25\\x15\\xc7\\xf9\\x29\\x06\\x6d\\xb1\\xca\\x6b\\xa0\\x1b\\x94\\x92\\x92\"\n\"\\x95\\x94\\x8a\\x8d\\x76\\x9d\\x1f\\x61\\xaf\\x6b\\xb3\\x6b\\xc0\\x08\\xc0\\x6c\\x8b\\x8b\\x7f\\x1b\\x84\\x88\\x87\\x74\\x7e\\x1f\\x5c\\x3a\\x70\\x69\\x5b\\x61\"\n\"\\x08\\x7b\\x7e\\x87\\x86\\x81\\x1a\\x83\\x93\\x83\\x93\\x9d\\xd4\\xb0\\xa4\\xaa\\x1e\\x0e\\xfb\\x1e\\xf7\\x6f\\xf7\\x16\\x70\\x1d\\xfb\\x1e\\xf7\\x0d\\x47\\x15\"\n\"\\x60\\xf7\\x9b\\xb6\\x07\\xfb\\x39\\xf7\\x96\\x70\\x1d\\x7a\\xa5\\xfb\\x6e\\x15\\x21\\x0a\\xbf\\xf7\\x8b\\x05\\x68\\xb0\\xbe\\x79\\xc6\\x1b\\xf7\\x23\\xf7\\x0e\"\n\"\\xf7\\x17\\xf7\\x2c\\xd2\\x6d\\xb4\\x43\\xa8\\x1f\\xe0\\xb8\\xb5\\xc6\\xd7\\x1a\\xec\\x3d\\xca\\xfb\\x0c\\x36\\x43\\x70\\x58\\x5c\\x1e\\x63\\x60\\x79\\x62\\x76\"\n\"\\x28\\x08\\xf7\\x23\\x99\\x15\\x98\\xc8\\x93\\xa2\\x9c\\xa1\\x08\\xa6\\x9f\\xaf\\x9d\\xae\\x1b\\xb7\\xa8\\x6f\\x60\\x5b\\x6e\\x59\\x63\\x77\\x1f\\x79\\x82\\x78\"\n\"\\x87\\x65\\x89\\x79\\x39\\x18\\x8c\\x92\\x95\\x8b\\x8d\\x1b\\xae\\xa0\\x86\\x7e\\x9d\\x1f\\xa4\\x78\\x9b\\x6a\\x6a\\x1a\\x2c\\x42\\x39\\x36\\x66\\x69\\x98\\xa2\"\n\"\\x72\\x1e\\x0e\\x39\\x4c\\x0a\\xf7\\x06\\xf8\\x37\\x2b\\x0a\\x39\\x4c\\x0a\\x93\\xf7\\xa4\\x15\\xf7\\x20\\xf7\\x27\\x05\\x3e\\x06\\x24\\x2a\\x4e\\xec\\x05\\x3e\"\n\"\\x06\\xd2\\xfb\\x27\\x05\\x0e\\x39\\x79\\x1d\\x4b\\xf8\\x37\\x29\\x1d\\x39\\x4c\\x0a\\xb2\\xf8\\x27\\x2e\\x0a\\x0e\\x4f\\xf7\\xef\\xf7\\xbb\\x15\\x4f\\xf7\\x89\"\n\"\\x05\\xfb\\x26\\x06\\xf7\\x04\\xfc\\x03\\xfb\\xb4\\xfc\\x1b\\x05\\xf7\\x2f\\x06\\xf7\\x4c\\xf7\\xa5\\xcf\\xfb\\xa5\\x05\\xf7\\x28\\x06\\xfb\\x0e\\xf8\\x1f\\xf7\"\n\"\\x9e\\xf7\\xff\\x05\\xfb\\x2c\\x06\\x0e\\xf7\\xfe\\xf8\\x8b\\xf9\\x4b\\x15\\xfb\\x5c\\xfb\\x36\\xfb\\x35\\xfb\\x5c\\xfb\\x58\\xf7\\x36\\xfb\\x36\\xf7\\x57\\xf7\"\n\"\\x59\\xf7\\x37\\xf7\\x37\\xf7\\x57\\xf7\\x58\\xfb\\x36\\xf7\\x39\\xfb\\x55\\x1f\\x87\\xfb\\xd0\\x15\\xfb\\x52\\xf7\\x50\\x05\\xb8\\xc2\\xcc\\xa2\\xd1\\x1b\\xd0\"\n\"\\xcb\\x74\\x60\\xc4\\x1f\\xb3\\x63\\x15\\xbb\\x52\\xa2\\x4c\\x42\\x1a\\x43\\x74\\x4b\\x5d\\x53\\x1e\\xfb\\x54\\xf7\\x57\\x05\\xf7\\x2c\\xfb\\x7f\\x15\\x5f\\x54\"\n\"\\x48\\x73\\x45\\x1b\\x45\\x4b\\xa2\\xba\\x50\\x1f\\xf7\\x55\\xf7\\x55\\x05\\xfb\\x7d\\xfb\\x2d\\x15\\x5f\\xc1\\x74\\xcb\\xd1\\x1a\\xd3\\xa2\\xcb\\xba\\xc4\\x1e\"\n\"\\xf7\\x52\\xfb\\x50\\x05\\x0e\\x9d\\xf8\\xd7\\x16\\x9f\\x07\\x84\\x8d\\x74\\x90\\x3e\\x9e\\x8b\\x8c\\x70\\x9c\\x19\\x45\\xbb\\x64\\xd8\\xe4\\x1a\\x94\\x07\\x9b\"\n\"\\x07\\x9f\\x67\\x94\\x7e\\x97\\x7c\\x08\\x5c\\xb1\\xc8\\x6d\\xc1\\x1b\\xe6\\xd3\\xd5\\xe8\\xe7\\x4a\\xd2\\x39\\x71\\x80\\x88\\x79\\x67\\x1f\\x88\\x8a\\x83\\x86\"\n\"\\x81\\x87\\x08\\xa9\\xb7\\x94\\xa5\\xb0\\x1a\\xe5\\x43\\xd2\\x2f\\x2e\\x44\\x45\\x31\\x67\\x92\\x78\\xad\\x56\\x1e\\xa3\\x58\\x78\\x91\\x70\\x1b\\x3d\\x49\\x40\"\n\"\\x33\\x2d\\xd3\\x43\\xe9\\xdb\\xd1\\xbe\\xe5\\xb6\\x1f\\x8c\\x72\\x05\\x83\\x07\\x54\\x71\\x45\\x65\\x5f\\x1e\\x5c\\x5a\\x8a\\x8a\\xfb\\x0e\\x6e\\x83\\x89\\x18\"\n\"\\x77\\x07\\x0e\\xf4\\xf8\\x34\\x83\\x1d\\xf8\\x10\\xf7\\xb8\\xa8\\x0a\\xd6\\x91\\xcf\\xa2\\x0a\\x70\\xf8\\xb6\\xf9\\x2b\\x23\\x1d\\x7d\\x48\\x20\\x1d\\x70\\xfb\"\n\"\\x12\\x9e\\x1d\\x7f\\x54\\x05\\x21\\x0a\\xf7\\x13\\xf8\\xe8\\x05\\xc7\\x06\\x99\\xce\\x05\\x4f\\x06\\x99\\xcd\\x22\\x0a\\xfb\\x48\\xfb\\xb8\\xe9\\x1d\\x36\\x55\"\n\"\\x6a\\xb8\\xd3\\xf7\\x0e\\xd6\\xf7\\x01\\xde\\x1f\\x0e\\x6f\\xf8\\x0d\\xf8\\xa8\\x15\\x3a\\x88\\x59\\x77\\x56\\x59\\x08\\x49\\x4d\\x61\\x24\\x29\\x1a\\xfb\\x1a\"\n\"\\xe5\\x36\\xf7\\x22\\xea\\xe1\\xb3\\xd4\\xc5\\x1e\\xba\\xc6\\xac\\xee\\xe0\\x1a\\xd4\\x6e\\xc3\\x43\\xcc\\x1e\\xfb\\x0e\\xf7\\x03\\x05\\xf7\\x7a\\x06\\xa3\\xf7\"\n\"\\x03\\x05\\xfc\\x23\\x06\\x76\\x2a\\x05\\xf7\\x2c\\xfb\\x6c\\x15\\xc6\\xaf\\x5f\\x41\\x5b\\x7b\\x53\\x71\\x60\\x1f\\x57\\x6b\\x5c\\x6e\\x58\\x1b\\x51\\x66\\xb7\"\n\"\\xd1\\xf7\\x13\\xd9\\xf4\\xe9\\x1f\\x0e\\xfb\\x14\\xf7\\xa0\\xf9\\x89\\x15\\x42\\xfb\\x12\\x4c\\x31\\xfb\\x20\\xfb\\x44\\xf0\\xfb\\x0f\\xf7\\x35\\xfb\\x78\\x99\"\n\"\\x61\\xde\\xf7\\x20\\xdf\\xf7\\x0b\\xf7\\x03\\xf7\\x1a\\xfb\\x0a\\xf7\\x25\\x29\\xf7\\x1f\\x4d\\xf7\\x00\\x08\\x0e\\xfb\\xc5\\xf7\\xa5\\xf9\\x7b\\x52\\x1d\\x39\"\n\"\\x65\\x0a\\xd4\\xf8\\x47\\x82\\x0a\\x39\\x4d\\x0a\\x91\\xf7\\xb7\\x15\\xf7\\x1f\\xf7\\x27\\x05\\x3f\\x06\\x24\\x2a\\x4e\\xec\\x05\\x3d\\x06\\xd3\\xfb\\x27\\x05\"\n\"\\x0e\\x39\\x4d\\x0a\\xad\\xf8\\x3a\\x3b\\x0a\\xf7\\xfe\\xf9\\x93\\xf7\\x6c\\x15\\xc8\\xfc\\x62\\x07\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\xac\\x0a\\x42\\x2c\"\n\"\\x1a\\xfb\\x08\\xb8\\x38\\xc2\\x0a\\xc9\\xfb\\xb7\\x06\\xfb\\x01\\x89\\x53\\xbd\\x85\\xf5\\x08\\x0e\\x39\\x4d\\x0a\\xf7\\x15\\xf8\\x27\\x2d\\x0a\\x70\\xca\\x16\"\n\"\\x58\\x1d\\x89\\x7f\\x87\\x74\\x1f\\x3b\\xfc\\x0b\\x05\\x6b\\x84\\x7d\\x7f\\x6d\\x1b\\x7c\\x85\\x48\\x1d\\xec\\xf8\\x5c\\xb7\\x1d\\xfb\\x20\\x06\\x0e\\x39\\xf8\"\n\"\\x4f\\xfb\\x40\\x15\\x83\\x76\\x74\\x88\\x70\\x1b\\x6a\\x79\\x9a\\xa7\\xb1\\xb1\\xc3\\xc3\\xb8\\x1f\\xd2\\xc1\\xb3\\xb8\\xa5\\xc1\\x08\\xfb\\x1e\\x06\\x65\\x77\"\n\"\\x5f\\x72\\x5b\\x1b\\x52\\x65\\xaf\\xc3\\x95\\x8c\\x95\\x8d\\xa4\\x1f\\xf7\\xff\\x06\\x8c\\x0a\\xfb\\x0a\\x27\\x1a\\xfb\\x10\\xe1\\x37\\xf7\\x12\\x9f\\x97\\x8c\"\n\"\\x91\\xa6\\x1e\\x35\\x57\\x70\\x6b\\x58\\x1a\\x57\\xbc\\x6e\\xe0\\xa5\\x9e\\x8d\\x92\\xaa\\x1e\\xfb\\x60\\xf8\\xb3\\x8f\\x0a\\x0e\\xfb\\x33\\xf8\\x09\\xf7\\xcb\"\n\"\\x15\\x32\\x8c\\x6d\\x98\\xb5\\x1a\\xb7\\xb3\\xab\\xc2\\xc1\\xa4\\x76\\x5d\\x8d\\x1e\\xf7\\x20\\x96\\x06\\xf0\\x39\\xc8\\xfb\\x1b\\x45\\x59\\x7c\\x6c\\x61\\x1e\"\n\"\\x60\\x6a\\x73\\x5d\\x59\\x1a\\x61\\x99\\x6c\\xa8\\x74\\x1e\\x63\\x7d\\x79\\x80\\x78\\x75\\x08\\x73\\x70\\x7c\\x63\\x66\\x1a\\x2e\\xd9\\x52\\xf7\\x10\\xdc\\xca\"\n\"\\x1d\\x50\\x6b\\x67\\x74\\x4f\\x1b\\x5c\\x70\\x9f\\xae\\xa9\\x9d\\xa7\\xa8\\x98\\x1f\\x9f\\x94\\x9d\\x8d\\xda\\x8c\\x08\\x0e\\xfb\\x33\\xf8\\x09\\xf7\\xcb\\x15\"\n\"\\x36\\x8c\\x70\\x98\\xb5\\x1a\\xb7\\xb0\\xab\\xbf\\xc0\\xa4\\x76\\x5d\\x8c\\x1e\\xf7\\x20\\x06\\x8c\\x90\\x8b\\x90\\x8c\\x1a\\xf0\\x39\\xc8\\xfb\\x1a\\x47\\x59\"\n\"\\x7c\\x6c\\x63\\x1e\\x61\\x6a\\x74\\x5d\\x58\\x1a\\x62\\x97\\x6c\\xa3\\x74\\x1e\\x66\\x7d\\x79\\x80\\x79\\x75\\x08\\x75\\x71\\x7d\\x62\\x66\\x1a\\x2e\\xd6\\x52\"\n\"\\xf7\\x0d\\xdb\\xca\\x1d\\x51\\x6b\\x66\\x73\\x51\\x1b\\x60\\x72\\x9f\\xae\\xa9\\x9d\\xa7\\xa6\\x98\\x1f\\x9f\\x94\\x9b\\x8d\\xd7\\x8c\\x08\\xe9\\xf8\\xcc\\x26\"\n\"\\x1d\\x54\\xf8\\xe6\\xf7\\xac\\xc5\\x0a\\xc9\\xf7\\xb6\\x15\\xfc\\x79\\x06\\x75\\x27\\x05\\xf8\\x79\\x06\\x51\\xfb\\xac\\xc5\\x0a\\x0e\\x65\\xf8\\xb8\\xf7\\x84\"\n\"\\x15\\x92\\x07\\x94\\x07\\x89\\xd5\\x86\\xa8\\x7c\\xb2\\x08\\xde\\x69\\x3a\\xbe\\x28\\x1b\\xfb\\x29\\x2c\\xfb\\x00\\xfb\\x3e\\xfb\\x3c\\xe6\\x25\\xf7\\x2b\\xf7\"\n\"\\x06\\xd7\\xc0\\xf2\\xab\\x1f\\x8d\\x90\\x8d\\x92\\x05\\x4b\\x06\\x8a\\x89\\x89\\x86\\x8a\\x88\\x08\\x4f\\x70\\x53\\x69\\x42\\x1b\\x60\\x68\\x96\\xa0\\x73\\x1f\"\n\"\\x7b\\x9a\\x82\\x9b\\x80\\xae\\x8c\\xe9\\x18\\xf7\\xac\\xc2\\x15\\xfb\\xaa\\xdc\\x06\\xcf\\xab\\xae\\xa3\\xce\\x1b\\xc1\\xaf\\x7b\\x64\\xac\\x1f\\x96\\x7e\\x8f\"\n\"\\x84\\x91\\x7a\\x08\\x0e\\x70\\x82\\x1d\\x0e\\x70\\x82\\x1d\\xf7\\x74\\xc2\\x1d\\x69\\xf8\\x16\\x81\\x0a\\xf8\\x52\\xf9\\x6a\\x15\\x2a\\x0a\\x5e\\xfb\\x66\\x72\"\n\"\\xfb\\xc9\\x05\\xcf\\x06\\xf6\\xf7\\xc9\\x05\\x3c\\xfc\\x06\\x27\\x1d\\x0e\\xfb\\x6a\\xbe\\x16\\xf7\\xd9\\xf8\\xd5\\xfb\\xd9\\x37\\xf7\\x85\\xfb\\x36\\xfb\\x85\"\n\"\\x37\\xf7\\x85\\xfb\\x37\\xfb\\x85\\x06\\x0e\\xf7\\x04\\xf7\\xf4\\xf7\\x98\\x15\\xfb\\x37\\x60\\xf7\\x37\\xfb\\x3a\\xbb\\xf7\\x3a\\xf7\\x35\\xb6\\xfb\\x35\\xf3\"\n\"\\x06\\xe7\\xa2\\xcc\\xd9\\xe2\\x1a\\xeb\\x36\\xdc\\x27\\x2a\\x39\\x38\\x2a\\x36\\xcd\\x3e\\xe8\\x74\\x1e\\xa6\\xf7\\xcb\\x15\\xd0\\xc5\\x50\\x45\\x43\\x51\\x51\"\n\"\\x43\\x43\\x52\\xc5\\xd4\\xd3\\xc5\\xc3\\xd5\\x1f\\x0e\\x39\\xf8\\x09\\xf8\\x40\\x15\\xfb\\x08\\x06\\xaf\\xf7\\x38\\x05\\xf7\\x92\\x06\\xa4\\xf7\\x0c\\x05\\xfc\"\n\"\\x1e\\x06\\xfb\\x2b\\xfd\\x5c\\x20\\x1d\\xcd\\xf7\\xc8\\x05\\xf7\\x07\\x06\\x49\\xfb\\xc8\\x05\\xf7\\x17\\x06\\xba\\xf7\\x6d\\x05\\xda\\x9b\\xbe\\xb7\\xd4\\x1b\"\n\"\\x99\\x62\\x1d\\x87\\x8b\\x86\\x1b\\x52\\x4f\\x61\\x42\\x5d\\x1f\\xa1\\xf5\\x05\\xfb\\x17\\x06\\x0e\\x39\\xf7\\x3a\\xfb\\x6e\\x15\\xf7\\x18\\x06\\xbb\\xf7\\x78\"\n\"\\xf7\\xcb\\xf8\\xa6\\x28\\x0a\\xfb\\x57\\xfc\\x14\\x68\\xf8\\x14\\x05\\xfb\\x28\\x06\\xe1\\xfc\\xa6\\x05\\x0e\\x70\\x60\\x0a\\xf7\\x44\\xf7\\xd1\\x15\\x60\\x7b\"\n\"\\x68\\x75\\x57\\x1b\\x5c\\x88\\x0a\\x70\\x75\\x1d\\x90\\xf7\\xd4\\x29\\x1d\\x70\\x60\\x0a\\xf7\\x05\\xf7\\x3e\\x15\\xa3\\xf7\\x04\\x05\\x48\\x06\\x92\\xb8\\xad\"\n\"\\xaf\\xb8\\x93\\x95\\xb9\\x18\\x3f\\x85\\x48\\x48\\x80\\x3d\\x77\\x2b\\x18\\x0e\\x70\\xf8\\x9e\\x29\\x0a\\x79\\x38\\x82\\x9c\\x84\\x94\\x77\\xa2\\x19\\xaa\\x70\"\n\"\\x71\\x97\\x64\\x1b\\x3e\\x3e\\x64\\x4a\\x59\\x1f\\x53\\x42\\x67\\x24\\x30\\x1a\\x4b\\x9c\\x5a\\xaf\\x63\\x1e\\x6a\\xaa\\xb0\\x7c\\xbe\\x1b\\xd2\\xc5\\xa6\\xbe\"\n\"\\xb1\\x1f\\x7b\\x42\\x05\\x4d\\x7e\\x4d\\x5b\\x48\\x1b\\x6c\\x6e\\x95\\x9a\\x7d\\x1f\\x83\\x94\\x87\\x95\\x9e\\x1a\\xfb\\x25\\x06\\x8a\\x82\\x8a\\x84\\x87\\x1a\"\n\"\\x63\\xaa\\x5e\\xb4\\x76\\x1e\\x78\\xae\\xb6\\x83\\xc7\\x1b\\xf7\\x3d\\xf1\\xcf\\xf7\\x18\\xa7\\x1f\\xf7\\x0a\\xf8\\xc2\\x05\\xfb\\xa6\\xfb\\x00\\x15\\xc4\\xac\"\n\"\\x62\\x42\\xfb\\x0c\\x3d\\x23\\x32\\x57\\x6d\\xb0\\xcb\\xf7\\x0f\\xd7\\xf7\\x06\\xde\\x1f\\xf7\\x0b\\xf7\\xcb\\x49\\x1d\\x32\\xf8\\xae\\xf3\\x15\\xfc\\x7d\\x06\"\n\"\\x75\\x23\\x05\\xf8\\x7d\\x06\\xfc\\x5f\\xf7\\x20\\x15\\xf8\\xa3\\xf7\\x49\\xa5\\xf7\\x0d\\xfc\\x56\\xf7\\x4a\\x6f\\xfb\\x17\\xf7\\xb8\\xfb\\x03\\xfb\\xe7\\xfb\"\n\"\\x05\\x05\\x0e\\x70\\xf7\\xf2\\xf9\\x34\\x15\\x97\\xc4\\x22\\x0a\\x7f\\x52\\x05\\x4d\\x27\\x0a\\xc9\\x06\\xfb\\x12\\xfc\\xe4\\x20\\x1d\\xd0\\xf7\\xd8\\x05\\xc7\"\n\"\\x98\\xc4\\xb9\\xc9\\x1b\\xb5\\xa6\\x74\\x67\\x83\\x89\\x7a\\x87\\x7b\\x1f\\x45\\xfb\\xde\\x20\\x1d\\xd8\\xf7\\xfe\\x05\\x8f\\x9d\\x8d\\x9f\\x9b\\x1a\\xdc\\x53\"\n\"\\xbf\\x33\\x67\\x63\\x81\\x7a\\x69\\x1e\\x71\\x7e\\x7f\\x7f\\x70\\x68\\xa7\\xf7\\x16\\x18\\xf7\\x48\\x06\\x9c\\xdb\\x05\\x0e\\x70\\x86\\x1d\\x3c\\xb1\\x1d\\x5f\"\n\"\\xf7\\xbc\\x6f\\x15\\x9c\\xde\\xc7\\xf3\\xf7\\x0b\\xf7\\x2b\\xb4\\xc0\\x9b\\xa0\\x9a\\xa3\\x08\\xb1\\xca\\x9d\\xc2\\xc1\\x1a\\xdc\\x45\\xcf\\x36\\x5b\\x5f\\x76\"\n\"\\x65\\x6b\\x1e\\x76\\x72\\x80\\x75\\x7e\\x5d\\x08\\xf2\\x67\\x56\\xbb\\x3a\\x1b\\x36\\x48\\x46\\x34\\x4a\\xa3\\x57\\xdc\\xfb\\x02\\x1f\\xf7\\x2c\\xfb\\x60\\xb2\"\n\"\\x49\\xa5\\x24\\x08\\x0e\\x69\\x96\\x16\\xf8\\xdb\\xf8\\x25\\x06\\xfb\\xb8\\xf7\\xdc\\xfb\\xb7\\xfb\\xdc\\x05\\xbe\\xfb\\xf2\\x15\\xf7\\xdc\\x07\\xf7\\x84\\xf7\"\n\"\\xa2\\xf7\\x85\\xfb\\xa2\\x05\\xfb\\xdc\\x07\\x0e\\x2a\\x1d\\xf7\\x46\\xf9\\x86\\x9b\\x1d\\x39\\xf7\\xea\\x87\\x0a\\xf7\\xaa\\xf7\\x11\\x9f\\x0a\\x7e\\x4b\\x5b\"\n\"\\x0a\\x7c\\x85\\x48\\x1d\\x0e\\x2a\\x1d\\xf7\\x6d\\xf9\\x66\\x15\\xfb\\x9f\\x27\\x0a\\xf7\\x9f\\x06\\x0e\\xd6\\xf8\\x37\\xf7\\xbd\\x15\\x6d\\xae\\x80\\x96\\x79\"\n\"\\x9b\\x08\\xa8\\x6b\\x63\\x9b\\x65\\x1b\\x32\\x38\\x39\\x34\\x4a\\xb9\\x5d\\xcd\\xc5\\xc2\\xa7\\xda\\xf1\\x1f\\x37\\xd7\\xb0\\x74\\xc2\\x1b\\xe6\\xde\\xdc\\xe3\"\n\"\\xcc\\x5d\\xb9\\x4b\\x63\\x5b\\x7b\\x6e\\x5f\\x1f\\x75\\x7c\\x85\\x87\\x51\\x60\\x08\\xa8\\x6a\\x15\\xc7\\xd5\\xc4\\xa9\\xb6\\x1b\\xb3\\xab\\x6b\\x65\\x53\\x54\"\n\"\\x55\\x52\\x6f\\x79\\x93\\xa9\\x66\\x1f\\x74\\x9e\\x81\\x95\\x79\\xa2\\x08\\x44\\x16\\x71\\x75\\x80\\x83\\x67\\x75\\x08\\x6e\\x5c\\x73\\x82\\x6e\\x1b\\x62\\x6b\"\n\"\\xaa\\xb3\\xc4\\xc1\\xbf\\xc5\\xb4\\xb9\\x6c\\x50\\xba\\x1f\\x0e\\xfc\\x00\\xf7\\x50\\xf8\\x9f\\x15\\xb0\\x85\\xda\\x82\\xe8\\xda\\x1d\\x8e\\x8a\\x80\\x95\\x1e\"\n\"\\x81\\x95\\x97\\x86\\x98\\x1b\\xa6\\xa0\\xa1\\xa7\\xa9\\x6f\\xa3\\x68\\x60\\x6c\\x6c\\x51\\x7d\\x1f\\x7b\\x4b\\x86\\x46\\xfb\\x45\\x1a\\xfb\\x78\\x07\\x5f\\x8f\"\n\"\\x4e\\x95\\x22\\xc0\\x1d\\x95\\x8e\\x0a\\x0e\\x69\\xf7\\xab\\xf9\\xb4\\x15\\xfc\\xfa\\x07\\x5f\\x8f\\x4e\\x95\\x23\\xc0\\x1d\\x94\\x8e\\x0a\\xf8\\xf2\\x07\\x0e\"\n\"\\x69\\xf7\\xf4\\xfb\\x61\\x15\\xf8\\xfa\\x07\\xb7\\x87\\xc8\\x81\\xf3\\xda\\x1d\\x8d\\x8a\\x80\\x96\\x1e\\x82\\x95\\x96\\x86\\x99\\x1b\\xa5\\xa1\\xa1\\xa6\\xaa\"\n\"\\x6f\\xa3\\x68\\x5f\\x6c\\x6c\\x51\\x7d\\x1f\\x7b\\x4b\\x86\\x42\\xfb\\x41\\x1a\\xfc\\xf2\\x07\\x0e\\xdc\\xf8\\xeb\\x16\\xf7\\xa1\\x07\\xf7\\x29\\x86\\xb1\\x71\"\n\"\\xb7\\x1e\\xd1\\x61\\x3e\\xb4\\x31\\x1b\\x38\\x46\\x6a\\x4d\\x5e\\x1f\\x66\\x5a\\x85\\x67\\xfb\\x36\\x1a\\xfb\\xa1\\xd1\\xf7\\xa4\\x07\\xf7\\x05\\x91\\xba\\x9d\"\n\"\\xad\\x1e\\xbd\\xa6\\xc5\\xad\\xc8\\x1b\\xc4\\xc2\\x6e\\x5d\\xa8\\x1f\\xa2\\x67\\x91\\x62\\xfb\\x12\\x1a\\xfb\\xa4\\x07\\x0e\\xf8\\x32\\xf8\\xa3\\xf9\\x6e\\x15\"\n\"\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\\xf7\\x37\\xfb\\x5e\"\n\"\\x1f\\xfb\\x01\\xfb\\x63\\x15\\xa9\\xa4\\x72\\x6d\\x6d\\x72\\x72\\x6d\\x6d\\x72\\xa4\\xaa\\xa8\\xa5\\xa4\\xa8\\x1f\\xfb\\x14\\xfb\\x05\\x15\\x96\\x59\\x96\\x75\"\n\"\\xa5\\x6d\\x08\\x54\\xbb\\xc7\\x71\\xdc\\x1b\\xdc\\xc7\\xa5\\xc2\\xbb\\x1f\\xa5\\xa9\\x96\\xa1\\x96\\xbd\\x84\\x36\\x80\\x62\\x6d\\x5e\\x08\\x4c\\x61\\x4b\\x6b\"\n\"\\x38\\x1b\\x3e\\x4f\\xa6\\xc1\\x61\\x1f\\x67\\xba\\x7c\\xb8\\x84\\xe8\\x08\\xf7\\xee\\xf7\\x05\\x15\\xa9\\xa4\\x72\\x6d\\x6d\\x72\\x72\\x6d\\x6d\\x72\\xa4\\xaa\"\n\"\\xa8\\xa5\\xa4\\xa8\\x1f\\x0e\\xf7\\xd2\\xf8\\xb0\\x23\\x1d\\xfb\\x07\\xfc\\xb0\\x05\\xd4\\x06\\x2e\\x53\\x67\\x61\\x57\\x1a\\x57\\xb8\\x6c\\xd5\\x9e\\x8e\\x8b\"\n\"\\x94\\xb4\\x1e\\x96\\xbf\\x05\\x82\\x6d\\x86\\x8a\\x7c\\x1b\\x6c\\x7b\\x9a\\xa6\\xb8\\xaf\\xbd\\xcb\\xb8\\x1f\\xf7\\x2f\\xf9\\x6d\\x23\\x1d\\x71\\xfb\\x11\\x20\"\n\"\\x1d\\x0e\\x47\\x0a\\x0e\\x47\\x0a\\xbd\\xf9\\x7b\\x44\\x0a\\x47\\x0a\\xb0\\xf9\\x7b\\x52\\x1d\\x47\\x0a\\xf7\\x29\\xf9\\xa9\\x26\\x1d\\x2a\\x1d\\xf7\\x67\\xf9\"\n\"\\x7c\\x15\\x69\\x7e\\x79\\x7a\\x74\\x1b\\x80\\x88\\xe0\\x1d\\x73\\x1b\\x54\\x60\\x61\\x40\\x74\\x1f\\xc1\\x06\\xac\\x9b\\x9b\\x9a\\x9d\\x1b\\x93\\xa1\\x84\\x84\"\n\"\\x99\\x1f\\xbe\\x72\\x05\\x85\\x98\\xa0\\xdf\\x1d\\x96\\xa0\\x96\\xb3\\x08\\x0e\\xf7\\xd9\\xf8\\xb0\\x5b\\x0a\\x7d\\x84\\x48\\x1d\\xc4\\xf9\\xe7\\x39\\x0a\\x43\"\n\"\\xf7\\xa6\\xf7\\xde\\x15\\xb8\\xf7\\x66\\x5d\\x1d\\xaf\\xf7\\x3b\\xd8\\xd1\\xd9\\xfb\\x81\\x05\\xf7\\x27\\x06\\xfb\\x0b\\xf7\\xd8\\xf7\\x87\\xf7\\x6c\\x05\\xfb\"\n\"\\x3e\\x06\\x0e\\x39\\x7b\\x0a\\x5a\\xfc\\x1a\\x3c\\x0a\\x5f\\x68\\x66\\x5f\\x83\\x81\\xb2\\x0a\\xa0\\xeb\\x18\\x0e\\x39\\xf7\\xcc\\xf8\\xb0\\x23\\x1d\\xfb\\x05\"\n\"\\xfc\\xb0\\x9a\\x1d\\x0e\\x47\\x1d\\xf7\\x9f\\x56\\x0a\\x39\\x9b\\x16\\xf7\\x26\\x06\\xf7\\x50\\xf7\\xec\\xbc\\xfb\\xec\\x05\\xf7\\x26\\x06\\xfb\\x1c\\xf9\\x6d\"\n\"\\x22\\x0a\\xb5\\xfb\\x82\\x05\\x0e\\xfb\\x82\\x47\\x1d\\xf7\\x6b\\xf9\\x6d\\x31\\x0a\\x47\\x1d\\xfb\\x24\\x4f\\x31\\x0a\\xfb\\x33\\xf7\\xff\\xce\\x1d\\xf7\\xe6\"\n\"\\xf8\\x53\\x27\\x1d\\x0e\\x32\\xf8\\xa5\\xf3\\x15\\xfc\\x7d\\x06\\x75\\x23\\x05\\xf8\\x7d\\x06\\xf7\\x19\\xf9\\x04\\x15\\xfc\\xa4\\xfb\\x49\\x72\\xfb\\x0d\\xf8\"\n\"\\x56\\xfb\\x4a\\xa7\\xf7\\x17\\xfb\\xb8\\xf7\\x03\\xf7\\xe7\\xf7\\x05\\x05\\x0e\\x39\\xf8\\x4f\\xf7\\xd0\\x15\\x97\\xc2\\x05\\xfb\\x1f\\x06\\x8a\\x91\\x89\\x95\"\n\"\\x87\\x9c\\x82\\xab\\x19\\x81\\xb1\\x89\\x93\\xa0\\x1d\\xfb\\x1c\\x3b\\x47\\x72\\x5b\\x57\\x1e\\x5a\\x5e\\x6d\\x4d\\x51\\x1a\\x71\\x8f\\x79\\x9e\\x54\\x1e\\x8e\"\n\"\\x84\\x05\\x4f\\x06\\x7f\\x54\\x05\\xe4\\x06\\x8c\\x86\\x05\\x87\\x07\\x8c\\x84\\x8c\\x86\\x8c\\x82\\x08\\x24\\x06\\x7f\\x54\\x05\\xf7\\x04\\x06\\x81\\x53\\x63\"\n\"\\x61\\x31\\x56\\xac\\x26\\x18\\xa0\\xbc\\xa8\\x92\\xb0\\x1b\\xa6\\xa2\\x87\\x80\\xb8\\x1f\\x7f\\xbc\\x9f\\x88\\xa6\\x1b\\xbc\\xb5\\x97\\xac\\xcb\\x1f\\x79\\xf7\"\n\"\\x02\\x05\\x76\\x5e\\x6a\\x82\\x67\\x1b\\x7a\\x74\\x8e\\x90\\x71\\x1f\\x94\\x5f\\x88\\x8b\\x79\\x1b\\x6c\\x7e\\x87\\x6e\\x4b\\x1f\\xd9\\xc1\\xb8\\xba\\x9b\\xb7\"\n\"\\x08\\xf7\\x02\\x06\\x97\\xc2\\x05\\xfb\\x02\\x90\\x06\\x93\\x8b\\x8e\\x89\\x99\\x1e\\x0e\\xf7\\x5e\\x16\\xf7\\x10\\xf8\\xda\\x7c\\x0a\\x0e\\xf7\\x04\\xf8\\x14\"\n\"\\xf8\\x82\\x15\\x9f\\x64\\x72\\x92\\x6a\\x1b\\x27\\x37\\x38\\x29\\x2a\\xe5\\x36\\xf2\\xab\\xa9\\x93\\x9b\\xa6\\x1f\\xbe\\xaa\\xae\\xc4\\xbf\\x1a\\xb6\\x78\\xbd\"\n\"\\x68\\xc0\\x1e\\xf7\\x2a\\xf7\\x2a\\x8e\\x79\\xa1\\x52\\x9a\\x6e\\x19\\x77\\x96\\x90\\x85\\x95\\x1b\\x92\\x90\\x90\\x92\\x8e\\x8b\\x8b\\x88\\x9d\\x1f\\x84\\xae\"\n\"\\x89\\xa1\\xa6\\x1a\\xab\\x91\\xbd\\x92\\xa2\\x1e\\x8d\\x90\\x8b\\x8d\\x8d\\x1a\\x91\\x87\\x8f\\x84\\x88\\x88\\x8b\\x8a\\x88\\x1e\\x81\\x69\\x6d\\x87\\x67\\x1b\"\n\"\\x70\\x75\\x8d\\x92\\x68\\x1f\\x8e\\x79\\x8b\\x8b\\x88\\x1b\\x85\\x85\\x84\\x85\\x7b\\xb5\\x73\\xc2\\x7a\\x1f\\xa2\\x84\\x91\\x89\\x05\\xfb\\x8c\\xfb\\x41\\x15\"\n\"\\xd3\\xc7\\x4e\\x42\\x41\\x4f\\x4f\\x41\\x40\\x4f\\xc7\\xd6\\xd5\\xc7\\xc6\\xd8\\x1f\\x0e\\xfc\\x22\\xf7\\x7b\\xc1\\x0a\\x0e\\xfb\\x1e\\xf7\\x7f\\xf7\\x53\\x15\"\n\"\\x93\\x75\\x7b\\x8f\\x7a\\x1b\\x46\\x4f\\x52\\x49\\x65\\xa8\\x73\\xb8\\xbe\\xba\\xa4\\xb5\\xa9\\x1f\\xa0\\xa9\\x94\\xaa\\xb8\\x1a\\xf7\\xd4\\x07\\xab\\x85\\xa1\"\n\"\\x7b\\xa2\\x66\\x08\\xa3\\x65\\x95\\x65\\x55\\x1a\\x59\\x81\\x61\\x73\\x51\\x1e\\xa8\\x06\\xb2\\xb9\\xa0\\xc7\\xcc\\x1a\\xdc\\x6b\\xdb\\x4c\\xd6\\x1e\\x53\\xce\"\n\"\\x89\\x8d\\x83\\x95\\x86\\x92\\x19\\xcb\\x5b\\x07\\x0e\\xf7\\x04\\xf7\\x95\\xf9\\x19\\x15\\xfc\\x59\\x8b\\x0a\\xf7\\xf0\\x07\\xf7\\xb5\\x5f\\x05\\xfc\\x03\\x8b\"\n\"\\x0a\\xf8\\x52\\x07\\x0e\\x70\\x34\\x1d\\xf7\\xa8\\xf7\\x6d\\x2b\\x0a\\xd1\\xf7\\xa5\\xf8\\xb0\\x15\\xfb\\x07\\xfc\\xb0\\x05\\x58\\x1d\\x8a\\x80\\x85\\x73\\x1f\"\n\"\\x49\\xd6\\x1d\\x9e\\x9c\\x1a\\xdb\\x51\\xbf\\x32\\x41\\x55\\x70\\x4b\\x55\\x1e\\x9d\\xdd\\x05\\xfb\\x94\\xf7\\x51\\x31\\x0a\\x70\\x34\\x1d\\xf7\\x34\\xd1\\x3a\"\n\"\\x0a\\xd3\\xfb\\x27\\x05\\x0e\\x70\\x34\\x1d\\x34\\xfc\\xec\\x3c\\x0a\\x5f\\x68\\x66\\x5f\\x68\\x1d\\x95\\xd9\\xa0\\xeb\\x18\\x0e\\xf7\\xfe\\xf8\\xa4\\xf7\\x6c\"\n\"\\x15\\xf7\\x83\\xc8\\xfb\\x60\\x06\\xe3\\xf7\\x2f\\x05\\xf7\\x08\\xc9\\x3a\\x06\\xac\\xc6\\x61\\xa3\\x5c\\x38\\x05\\xfb\\x23\\x06\\x38\\x68\\x84\\x72\\x65\\x1f\"\n\"\\x4b\\x60\\x69\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x37\\xdc\\x69\\x1e\\x6a\\x52\\xb6\\x74\\xb1\\xce\\x05\\x88\\xa5\\x97\\x8a\\xb5\\x1b\\xf7\\xac\\xc9\\xfb\\xb7\\x06\"\n\"\\x77\\x85\\x8b\\x8c\\x82\\x1f\\xaa\\xf7\\x2d\\x15\\x3a\\xfb\\x21\\x57\\x9d\\x6c\\xbe\\x88\\xd3\\x19\\xf7\\xb6\\xf7\\x6c\\x15\\x33\\xfb\\x2f\\x05\\xfb\\x5e\\x06\"\n\"\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\x0e\\x32\\xf7\\x04\\xbf\\x15\\x5b\\x4c\\xea\\x4c\\xec\\xf7\\x12\\x05\\xf7\\xa5\\x06\\xa4\\xf7\\x0c\\x05\\xfb\\x63\\x06\"\n\"\\xe8\\xf7\\x0c\\x20\\x1d\\xa4\\xf7\\x0c\\x05\\x42\\x06\\xc0\\xd0\\x2c\\xca\\x25\\xfb\\x18\\x05\\xfb\\xa0\\x31\\x1d\\xf7\\x5d\\x06\\x2e\\xfb\\x0c\\x05\\xfb\\x1a\"\n\"\\x31\\x1d\\x0e\\x39\\xf7\\xf1\\x16\\xf7\\xc1\\xf8\\xb0\\x05\\xfb\\x2b\\x06\\xfb\\x55\\xfc\\x1f\\x6a\\xf8\\x1f\\x05\\xfb\\x25\\x06\\xd5\\xfc\\xb0\\x05\\x0e\\x70\"\n\"\\x36\\x0a\\xf7\\x35\\xf7\\xd1\\x53\\x1d\\x70\\x36\\x0a\\xf7\\x17\\xf7\\xd4\\x49\\x0a\\xd2\\x06\\xf7\\xed\\xf7\\x27\\x49\\x0a\\xd2\\x06\\x0e\\x70\\x36\\x0a\\xf7\"\n\"\\x6b\\xf7\\xb1\\x15\\xfb\\xc0\\x27\\x0a\\xf7\\xc0\\x06\\x0e\\xf7\\x58\\x71\\x1d\\x0e\\xf7\\x58\\x71\\x1d\\xfb\\x1b\\xc2\\x1d\\x70\\x81\\x1d\\x0e\\x70\\x81\\x1d\"\n\"\\xf7\\x08\\xf7\\xf5\\x26\\x1d\\xf7\\xe9\\xbd\\x16\\xfa\\x04\\xcd\\xfd\\xc2\\xf9\\xb8\\x49\\x06\\x0e\\x70\\x73\\x1d\\xec\\xf8\\x01\\x2b\\x0a\\xfb\\x24\\xf5\\xf9\"\n\"\\x32\\x15\\xac\\xd5\\x8b\\x8b\\xb1\\x1b\\xb9\\xb2\\x79\\x69\\xa3\\x1f\\xad\\x5c\\xa0\\x40\\x41\\x1a\\x6e\\x89\\x74\\x83\\x4f\\x1e\\xc0\\x46\\x70\\x97\\x55\\x1b\"\n\"\\x5a\\x64\\x7b\\x69\\x69\\x1f\\x5d\\x5c\\x6f\\x48\\x4a\\x1a\\xfb\\x01\\xde\\x36\\xf6\\xd7\\xc8\\xb4\\xd8\\xb6\\x1e\\xb1\\xcf\\xa7\\xf7\\x16\\xf3\\x1a\\xf7\\x5c\"\n\"\\xfb\\x03\\xf7\\x25\\xfb\\x2d\\x5e\\x5c\\x81\\x79\\x63\\x1e\\xf7\\xbf\\xfc\\x36\\x15\\x7e\\x33\\x83\\x6a\\x7c\\x5f\\x08\\x3d\\x70\\x5e\\x5f\\x54\\x1b\\x53\\x6a\"\n\"\\xbe\\xe1\\xf7\\x08\\xcd\\xea\\xdc\\xb5\\xb0\\x76\\x63\\xa5\\x1f\\x0e\\xf8\\x66\\xf7\\x9f\\xf7\\x8c\\x15\\xec\\x06\\xd6\\xc7\\xa5\\xc2\\xbd\\x1f\\xbe\\xc3\\xab\"\n\"\\xdb\\xd5\\x1a\\xc0\\x75\\xbc\\x64\\xaa\\x1e\\xa8\\x68\\x64\\x96\\x4b\\x1b\\xfb\\x64\\x06\\xfb\\x2b\\xfd\\x5c\\x20\\x1d\\xd9\\xf8\\x01\\x15\\xbb\\xf7\\x77\\x05\"\n\"\\xca\\x06\\xc6\\xac\\x6d\\x55\\x6a\\x80\\x66\\x7c\\x75\\x1f\\x68\\x72\\x68\\x7b\\x55\\x1b\\xf8\\x2a\\xfb\\xab\\x15\\x89\\x81\\x85\\x8a\\x82\\x1b\\x75\\x7b\\x95\"\n\"\\x9a\\x8c\\x1f\\x8f\\x8d\\x97\\x8f\\x9d\\x1e\\x9f\\xe6\\x05\\xcd\\x06\\x9d\\xe1\\x05\\x49\\x06\\xa4\\xf7\\x0b\\x05\\xfb\\x17\\x06\\x72\\xfb\\x0b\\x05\\x57\\x06\"\n\"\\x79\\x35\\x05\\xbf\\x06\\x6f\\xfb\\x15\\x05\\x88\\x7d\\x89\\x7b\\x80\\x1a\\x53\\xb3\\x6d\\xd7\\xa5\\x96\\x8d\\x94\\xa5\\x1e\\xf8\\x02\\xf7\\x82\\x15\\x8f\\x99\"\n\"\\x8c\\x91\\x93\\x1a\\xc1\\x5a\\xae\\x3e\\x59\\x62\\x7e\\x71\\x6f\\x1e\\x70\\x72\\x7a\\x67\\x68\\x1a\\x64\\xa3\\x73\\xc4\\x79\\x1e\\xb7\\x7c\\x05\\xab\\x81\\x8f\"\n\"\\x89\\x81\\x1a\\x78\\x7a\\x80\\x6c\\x69\\x7b\\x96\\xa1\\x8a\\x1e\\x26\\x06\\x89\\x80\\x8b\\x87\\x85\\x1a\\x52\\xc2\\x65\\xdd\\xf7\\x00\\xcd\\xc1\\xe3\\xb0\\x71\"\n\"\\xa5\\x57\\x9a\\x1e\\x54\\x9c\\x05\\x73\\x92\\x87\\x8e\\x96\\x1a\\x9c\\x99\\x93\\xa7\\xa4\\x98\\x84\\x7d\\x86\\x8a\\x88\\x88\\x86\\x1e\\x0e\\xcd\\xf7\\xc1\\xe2\"\n\"\\x15\\x70\\x8e\\x7e\\x8f\\x7d\\x96\\x08\\x6f\\x9f\\x7b\\xb2\\xba\\x1a\\xea\\xb8\\xea\\xcd\\xb6\\x1e\\x9d\\xe2\\x05\\xfb\\x32\\x65\\x22\\xfb\\x1d\\xfb\\x3f\\x1a\"\n\"\\x55\\x99\\x60\\xaa\\x69\\x1e\\xaf\\x61\\xbb\\x78\\xdd\\x85\\x5f\\xfb\\x61\\x18\\xf7\\x17\\x06\\xb7\\xf7\\x61\\xe6\\x91\\xc6\\xa1\\xc4\\xbc\\x19\\xd6\\xcb\\xb9\"\n\"\\xf3\\xf6\\x1a\\xf7\\x1e\\x2d\\xd3\\xfb\\x49\\x72\\x7c\\x8a\\x88\\x72\\x1e\\xf7\\x01\\x26\\x15\\xa7\\x88\\x97\\x87\\x9a\\x81\\x08\\xa6\\x78\\x9c\\x63\\x5c\\x1a\"\n\"\\x54\\x78\\x4f\\x6d\\x60\\x1e\\x69\\x5b\\x67\\x75\\x53\\x85\\x08\\x0e\\xd5\\xf9\\xa1\\x29\\x0a\\xfd\\x07\\x4e\\x1d\\xd8\\x06\\x30\\xfc\\x40\\x05\\x6c\\x1d\\xf7\"\n\"\\x5c\\x06\\x30\\xfc\\x40\\x05\\x6c\\x1d\\xd1\\x06\\x0e\\xf7\\xfa\\xf7\\x80\\xfb\\x30\\x15\\x3e\\x36\\xf7\\x8f\\x06\\x8a\\xe0\\x05\\x40\\xf9\\xab\\xf7\\xfe\\xfd\"\n\"\\xab\\x45\\x06\\x8c\\x36\\x05\\xf7\\x84\\xe0\\x42\\xf9\\xab\\xf0\\xe0\\xfd\\x8f\\x36\\xf3\\x06\\x0e\\xf7\\xfe\\xf9\\x93\\xc9\\x15\\xfb\\xb7\\x06\\xfb\\x0d\\x57\"\n\"\\xc2\\xf7\\x16\\xf7\\x15\\xbf\\xc3\\xf7\\x0d\\x1f\\xac\\x0a\\x43\\x2b\\x1a\\xfb\\x07\\xb8\\x37\\xc2\\x0a\\x06\\x0e\\xf7\\xfe\\xf7\\x7d\\xc9\\x15\\x4d\\xf7\\xac\"\n\"\\x07\\xde\\xae\\x92\\xa4\\xb1\\x1f\\xcc\\xb6\\xac\\xd4\\xee\\x1a\\xf7\\x03\\x5d\\xe0\\x3d\\xac\\x1e\\x99\\x69\\x70\\x8f\\x46\\x1b\\xfb\\xac\\x4d\\xf7\\xb7\\x06\"\n\"\\xf7\\x0d\\xbf\\x54\\xfb\\x16\\xfb\\x16\\x57\\x54\\xfb\\x0d\\x1f\\x0e\\xf7\\x1b\\xf7\\xa6\\xfb\\x6e\\x15\\xf7\\x19\\x06\\xb6\\xf7\\x60\\x05\\xdf\\xbe\\x97\\xac\"\n\"\\xc1\\x1f\\xd1\\xb9\\xa4\\xb7\\xa5\\xf7\\x13\\xc9\\xf7\\xb8\\x18\\xfb\\x20\\x06\\x4f\\xfb\\xb1\\x75\\xfb\\x03\\x5f\\x5a\\x38\\x89\\x19\\xea\\xf8\\x53\\x05\\xfb\"\n\"\\x19\\x06\\x2c\\xfc\\x53\\x05\\x4c\\x8e\\x70\\xa5\\xc5\\x1a\\x9b\\x8f\\xaa\\x91\\xa7\\x1e\\xc7\\xf7\\xb1\\x22\\x0a\\x4d\\xfb\\xb8\\x05\\x85\\x6b\\x87\\x6d\\x72\"\n\"\\x1a\\x64\\x9c\\x62\\xa8\\x6e\\x1e\\xb5\\x61\\xb5\\x7a\\xda\\x84\\x08\\x0e\\xf8\\x04\\x22\\x1d\\xfb\\x1c\\x06\\x74\\xfb\\x01\\x05\\x86\\x74\\x88\\x76\\x82\\x1a\"\n\"\\x54\\xb8\\x64\\xce\\x87\\x1e\\x94\\xb9\\x05\\x60\\x94\\x76\\x9e\\xab\\x1a\\x92\\x8c\\x93\\x8d\\x99\\x1e\\xdc\\x06\\x0e\\xfb\\x8d\\x8d\\x1d\\xf7\\x4a\\xf7\\x6d\"\n\"\\x2b\\x1d\\x32\\xf9\\x36\\xfa\\x25\\x15\\xfb\\xbb\\xfd\\xa8\\xfb\\x02\\xf8\\x20\\xfb\\x37\\x42\\x96\\x6a\\xf3\\xb9\\xf7\\x1b\\xfc\\x85\\xf7\\xf5\\xfa\\x44\\x05\"\n\"\\x0e\\xfb\\x8d\\x65\\x1d\\x9c\\xbe\\xb4\\xde\\x1b\\x9a\\x62\\x1d\\x87\\x8b\\x86\\x1b\\x4a\\x4b\\x61\\x42\\x5d\\x1f\\xa2\\xf5\\x05\\xd7\\xd1\\x3a\\x1d\\xfb\\x8d\"\n\"\\x65\\x1d\\x9d\\xbd\\xb4\\xde\\x1b\\x9a\\x95\\x8a\\x88\\x9c\\x1f\\xa9\\xf7\\x22\\x05\\x8c\\x83\\x88\\x8b\\x85\\x1b\\x4b\\x4b\\x61\\x42\\x5d\\x1f\\xa1\\xf5\\x05\"\n\"\\xfb\\x96\\xfc\\xec\\x31\\x0a\\x55\\xf9\\x0c\\xf8\\x0c\\x15\\xfc\\x8c\\x06\\x4e\\xfb\\xb6\\x05\\xf7\\x0b\\x06\\xaf\\xf7\\x3e\\x05\\xf8\\x15\\x06\\x0e\\x6a\\x97\"\n\"\\xfb\\x6e\\x15\\x21\\x0a\\xc7\\xf7\\xaf\\x94\\x7a\\x8f\\x83\\x94\\x81\\x19\\x6b\\xa6\\xbc\\x76\\xbe\\x1b\\xf7\\x2a\\xf7\\x15\\xf7\\x33\\xf7\\x4e\\xf7\\x21\\x35\"\n\"\\xe2\\xfb\\x20\\x3d\\x45\\x6e\\x56\\x55\\x1f\\x57\\x57\\x72\\x53\\x72\\xfb\\x07\\x08\\xf7\\xbd\\xf7\\x53\\x15\\xc6\\xab\\x63\\x41\\xfb\\x11\\x43\\x20\\x36\\x54\"\n\"\\x64\\xb8\\xc9\\xc1\\x9c\\xca\\xa6\\xba\\x1f\\xba\\xa6\\xb6\\xa7\\xb9\\x1b\\x0e\\x39\\x61\\x0a\\xf7\\x0d\\xf8\\x1b\\x2b\\x1d\\x39\\xf7\\xb4\\x75\\x15\\xf7\\x3a\"\n\"\\xf4\\xdd\\xf7\\x13\\x95\\x0a\\x6a\\x85\\x8a\\x87\\x89\\x82\\x1e\\xf7\\x1b\\x06\\x8f\\x9d\\x8c\\x93\\x97\\x1a\\xe6\\x3f\\xc1\\xfb\\x12\\x3c\\x48\\x76\\x65\\x60\"\n\"\\x1e\\x60\\x65\\x6f\\x52\\x59\\x1a\\x52\\xb4\\x65\\xe3\\x6e\\x1e\\xda\\x72\\x05\\xca\\x77\\x98\\x82\\x74\\x1a\\x6b\\x60\\x74\\x4e\\x48\\x67\\xa2\\xb8\\x88\\x1e\"\n\"\\xfb\\x1d\\x06\\x88\\x7d\\x8a\\x84\\x82\\x1a\\x54\\xb2\\x58\\xc7\\x74\\x1e\\x7e\\xab\\xa3\\x85\\xa2\\x1b\\x55\\x36\\xbc\\x0a\\x6d\\x78\\x65\\x6f\\x56\\x1d\\x64\"\n\"\\x7b\\x7f\\x89\\x87\\x7c\\x1f\\x0e\\x39\\x61\\x0a\\x51\\xf8\\x1b\\x15\\xfb\\x20\\xfb\\x27\\x05\\xd8\\x06\\xf2\\xec\\xc8\\x2a\\x05\\xd8\\x06\\x44\\xf7\\x27\\x05\"\n\"\\x0e\\x39\\xf8\\xdc\\xf8\\x02\\x5e\\x1d\\x3b\\x4a\\x77\\x64\\x5f\\x1e\\x5f\\x65\\x70\\x53\\x58\\x1a\\x52\\xb3\\x65\\xe4\\x6e\\x1e\\xda\\x72\\x05\\xca\\x77\\x98\"\n\"\\x82\\x74\\x1a\\x6b\\x60\\x74\\x4e\\x68\\x6c\\x93\\x99\\x78\\x1e\\x7d\\x97\\x85\\x96\\x8a\\xa2\\x08\\xfb\\x1d\\x06\\x88\\x7e\\x8a\\x84\\x82\\x1a\\x5d\\xa8\\x5c\"\n\"\\xb7\\x72\\x1e\\x74\\xb2\\xba\\x81\\xc9\\x1b\\xf7\\x3e\\xf7\\x00\\xdd\\xf7\\x14\\x95\\x0a\\x69\\x86\\x8a\\x87\\x89\\x82\\x1e\\xfb\\x83\\xfc\\x3e\\x15\\x73\\xfb\"\n\"\\x04\\x05\\xce\\x06\\x84\\x5e\\x69\\xc3\\x1d\\xfb\\x33\\xf7\\x93\\xc1\\x0a\\xf7\\x60\\xf7\\x94\\x15\\x41\\x06\\x55\\xfb\\x94\\x05\\xc4\\x06\\x0e\\xa5\\xf8\\x91\"\n\"\\x29\\x0a\\x93\\x67\\x7a\\x8d\\x70\\x1b\\x37\\x3c\\x6b\\x54\\x56\\x1f\\x4b\\x48\\x63\\x26\\x29\\x1a\\xfb\\x1a\\xe5\\x35\\xf7\\x21\\xde\\xd9\\xa9\\xc1\\xc3\\x1e\"\n\"\\xc5\\xc3\\xb0\\xe2\\xdb\\x1a\\xc8\\x7b\\xb6\\x66\\xb3\\x1e\\xf7\\x07\\x06\\xa3\\xf7\\x04\\x05\\xfb\\xd0\\x23\\x15\\xc8\\xae\\x61\\x40\\x5c\\x7b\\x53\\x73\\x61\"\n\"\\x1f\\x54\\x6a\\x5e\\x6e\\x58\\x1b\\x4e\\x67\\xb6\\xd2\\xf7\\x12\\xd8\\xf5\\xe8\\x1f\\x0e\\xf8\\x13\\xf8\\x93\\xf9\\x6e\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\"\n\"\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\\xf7\\x37\\xfb\\x5e\\x1f\\x5a\\x04\\xf7\\x43\\xf7\\x21\"\n\"\\xfb\\x21\\xfb\\x43\\xfb\\x44\\xfb\\x21\\xfb\\x20\\xfb\\x45\\xfb\\x43\\xfb\\x1f\\xf7\\x22\\xf7\\x47\\xf7\\x3e\\xf7\\x23\\xf7\\x21\\xf7\\x41\\x1f\\xfb\\x01\\xfb\"\n\"\\x37\\xa1\\x0a\\xfb\\x14\\xfb\\x00\\x15\\x92\\x36\\x96\\x62\\xa9\\x5e\\x08\\x4c\\xb5\\xcb\\x6b\\xde\\x1b\\xd8\\xc7\\xa6\\xc1\\xb5\\x1f\\xaf\\xba\\x9a\\xb8\\x92\"\n\"\\xe8\\x80\\x59\\x80\\x75\\x71\\x6d\\x08\\x54\\x5b\\x4f\\x71\\x3a\\x1b\\x3a\\x4f\\xa5\\xc2\\x5b\\x1f\\x71\\xa9\\x80\\xa1\\x80\\xbd\\x08\\xf7\\xee\\xf7\\x00\\xa1\"\n\"\\x0a\\x0e\\x20\\xf7\\xc0\\xf7\\x99\\x15\\x7f\\x07\\x44\\x6b\\x45\\x5a\\x66\\x1e\\x6c\\x62\\x56\\x7a\\x57\\x1b\\x7e\\x74\\xf8\\x77\\xa2\\x06\\xfb\\x32\\x91\\x3c\"\n\"\\xe3\\x8e\\xf7\\x3d\\x08\\x35\\xb9\\xb6\\x6d\\xda\\x1b\\xcd\\xc4\\xca\\xd4\\xd0\\x73\\xb0\\xfb\\x01\\xef\\x1f\\xfb\\x02\\xf1\\x7a\\xa5\\x63\\xf7\\x09\\x7c\\x30\"\n\"\\x4d\\x31\\x23\\x38\\x08\\x3c\\x49\\x67\\x51\\x4c\\x1a\\x40\\xc8\\x4d\\xd4\\xb4\\xb4\\x9c\\xa9\\xac\\x1e\\x9e\\x9d\\x96\\x9a\\x9c\\xb0\\x08\\x0e\\xf7\\xfa\\xf9\"\n\"\\x6a\\xf9\\x7e\\x15\\xfc\\x7f\\x38\\x06\\xf7\\x55\\xfb\\xe8\\xfb\\x55\\xfc\\x06\\x05\\x36\\xf8\\x87\\xf7\\x7d\\x2d\\x07\\x89\\xfb\\x1e\\x05\\xfb\\xb2\\x06\\xf7\"\n\"\\x4f\\xf7\\xfe\\xfb\\x4e\\xf7\\xda\\x05\\xf7\\xaa\\x06\\x8f\\xfb\\x1e\\x05\\xe6\\x06\\x0e\\xf7\\xab\\xf7\\x94\\xf8\\xa3\\x15\\x73\\x74\\x6c\\x42\\x67\\x1a\\xfb\"\n\"\\x10\\x4f\\xf7\\x10\\x06\\x68\\x9c\\x60\\xb0\\x54\\x1e\\x34\\x34\\xb4\\x62\\xe3\\xe2\\x9d\\x78\\xa1\\x7e\\xa1\\x86\\x19\\xce\\x7a\\x8e\\x8a\\x05\\xfb\\x0f\\xc6\"\n\"\\xf7\\x0f\\x07\\x8f\\x8c\\xb2\\x95\\xa5\\x91\\x8d\\x8c\\x19\\x96\\x90\\x9e\\x96\\xab\\xa0\\xe3\\x34\\x18\\xb4\\xb4\\x34\\xe2\\x9d\\xa6\\x99\\xa4\\x8f\\x96\\x19\"\n\"\\x8e\\x92\\x90\\x9f\\x96\\xb6\\x08\\xf7\\x0f\\xc7\\xfb\\x0f\\x06\\x81\\xb3\\x85\\xa2\\x88\\x92\\x87\\x96\\x7d\\xa4\\x79\\xa6\\xe2\\xe1\\x18\\x62\\xb4\\x33\\x35\"\n\"\\x6d\\xa6\\x7e\\x91\\x31\\xa1\\x19\\xf7\\x0e\\x50\\xfb\\x0e\\x07\\x88\\x8a\\x48\\x79\\x84\\x89\\x77\\x7f\\x68\\x74\\x19\\x33\\xe2\\x62\\x62\\x05\\xf7\\xba\\x50\"\n\"\\x15\\xef\\xde\\x36\\x26\\x24\\x38\\x37\\x24\\x22\\x3a\\xdd\\xf5\\xf3\\xde\\xdc\\xf5\\x1f\\x0e\\xfb\\x79\\xf7\\x1b\\x16\\x6c\\x1d\\xf7\\x05\\x06\\xa3\\xf7\\x04\"\n\"\\x05\\xfc\\x09\\x4e\\x1d\\xf7\\x0c\\x06\\x0e\\xfb\\xc5\\x92\\x0a\\x77\\x2b\\x05\\x4f\\x06\\x7d\\x48\\x05\\xc6\\x06\\x68\\xfb\\x3d\\x05\\x87\\x7d\\x8a\\x7e\\x7d\"\n\"\\x1a\\x53\\xb3\\x6d\\xd4\\xac\\xa3\\x8e\\x93\\xa7\\x1e\\x9f\\xed\\x05\\x89\\x7d\\x84\\x8a\\x7f\\xe3\\x1d\\xa7\\xf7\\x17\\x05\\xd3\\x06\\x99\\xce\\x05\\x44\\x06\"\n\"\\x9f\\xeb\\x05\\xd9\\x06\\x0e\\xfb\\x8d\\x6f\\x0a\\xc9\\xf8\\x1d\\x3c\\x0a\\x5e\\x68\\x67\\x5e\\x83\\x82\\xb2\\x0a\\x9f\\xeb\\x18\\x0e\\xfb\\xc5\\xf7\\x52\\x75\"\n\"\\x15\\x8a\\x94\\x92\\x8b\\x95\\x1b\\xaa\\xa3\\x8e\\x93\\xa7\\x1f\\x9f\\xbe\\x0a\\x8f\\x8d\\x98\\x8f\\x9c\\x1f\\xc9\\xf7\\xba\\x05\\xd9\\x06\\x9f\\xe8\\x05\\x85\"\n\"\\x0a\\x69\\x9b\\x71\\xa9\\x7d\\x1e\\x4e\\x2c\\x05\\x95\\xa3\\x97\\x8e\\x9c\\x1b\\xa5\\x9d\\x7e\\x78\\x71\\x6e\\x78\\x65\\x6e\\x56\\x1d\\x63\\x7c\\x7f\\x89\\x87\"\n\"\\x7b\\x1f\\x0e\\x3b\\xf8\\x3b\\xf9\\x76\\x15\\x2a\\x38\\x5b\\x33\\x54\\x1f\\x51\\x30\\x5e\\xfb\\x40\\xfb\\x11\\x1a\\x4c\\x9f\\x4a\\xac\\x61\\x1e\\x5f\\xae\\xc2\"\n\"\\x73\\xce\\x1b\\xed\\xd7\\xbd\\xf3\\xca\\x1f\\xbe\\xe0\\xb7\\xf7\\x3e\\xf7\\x03\\x1a\\xf7\\x30\\x43\\xe1\\xfb\\x18\\x1e\\xfb\\x3b\\xfb\\xd4\\x15\\x98\\xc4\\x91\"\n\"\\xa0\\x98\\xaa\\x08\\xc9\\xa3\\xb9\\xaf\\xc1\\x1b\\xc2\\xa7\\x6a\\x49\\x6d\\x88\\x71\\x82\\x57\\x1f\\x77\\x2e\\x15\\x7c\\x44\\x82\\x6e\\x79\\x62\\x08\\x4f\\x70\"\n\"\\x60\\x69\\x58\\x1b\\x57\\x6c\\xb0\\xca\\xb0\\x8f\\xaa\\x9a\\xce\\x1f\\x0e\\xfb\\xc5\\xf8\\x15\\xf9\\xa9\\x26\\x1d\\x70\\x4f\\x0a\\xf7\\x1a\\xf9\\x86\\x82\\x0a\"\n\"\\x70\\x87\\x1d\\xf7\\x00\\x8a\\x0a\\x70\\xf8\\xb1\\x16\\xf7\\x07\\xf8\\xb0\\x05\\x64\\x1d\\x93\\x91\\xa5\\x9d\\x1d\\xf7\\x5f\\xf9\\x66\\x2d\\x0a\\x35\\xf8\\x9a\"\n\"\\xfb\\x6e\\xeb\\x1d\\xb8\\xf7\\x67\\x57\\x0a\\x0e\\xfb\\xc5\\xa6\\x0a\\x70\\x46\\x0a\\xfb\\x28\\x4f\\x15\\x74\\xfb\\x04\\x05\\xcd\\x06\\x85\\x5e\\x69\\x67\\x5e\"\n\"\\x68\\x1d\\x96\\xd9\\x9f\\xeb\\x18\\x0e\\xfb\\xc5\\x92\\x0a\\x45\\xfb\\xe0\\x05\\x87\\x7d\\x8a\\x7e\\x7d\\x1a\\x53\\xb3\\x6d\\xd4\\xac\\xa3\\x8e\\x93\\xa6\\x1e\"\n\"\\xa0\\xed\\x05\\x89\\x7d\\x83\\x8a\\x80\\xe3\\x1d\\xca\\xf7\\xba\\x05\\xd9\\x06\\xfb\\xac\\xfc\\x84\\x31\\x0a\\xfb\\xc5\\xf8\\x67\\xf9\\x66\\x2d\\x0a\\x55\\x0a\"\n\"\\xac\\x79\\x16\\xf9\\x56\\x06\\x22\\xf9\\x6d\\x05\\xfb\\x4e\\x06\\xfb\\x51\\xfc\\xf0\\x15\\xf7\\x95\\xf8\\x60\\xc8\\xfc\\x60\\x05\\x0e\\xf7\\x23\\xf8\\x02\\x62\"\n\"\\x0a\\x0e\\x68\\xf7\\x43\\x29\\x0a\\xfb\\x35\\xfd\\x8a\\x05\\xf7\\x19\\x06\\xc3\\xf7\\x9b\\x05\\x60\\x97\\xa3\\x77\\xb5\\x1b\\xbf\\xb4\\xa4\\xc8\\xb7\\x1f\\x7c\"\n\"\\x47\\x05\\x63\\x1d\\x43\\xfb\\xe6\\x05\\x49\\x7d\\x5c\\x63\\x4c\\x1b\\x58\\x6b\\xa6\\xb6\\x95\\x8d\\x99\\x8d\\x98\\x1f\\xd3\\xf7\\xe5\\x05\\x0e\\x21\\xf8\\xe8\"\n\"\\xf7\\xe0\\x15\\x8a\\xc7\\x83\\xaa\\x75\\xaf\\x08\\xc5\\x67\\x45\\xac\\x34\\x1b\\x38\\x47\\x6e\\x51\\x56\\x1f\\x54\\x50\\x69\\x33\\x3b\\x1a\\xfb\\x00\\xc7\\x3b\"\n\"\\xf7\\x02\\x63\\x1e\\xbe\\x78\\x05\\xba\\x7a\\x94\\x83\\x71\\x1a\\x78\\x83\\x78\\x73\\x65\\x1e\\x66\\x52\\x8b\\x8b\\x7b\\x74\\x08\\xf7\\x17\\x06\\xd7\\xf7\\x0e\"\n\"\\x9b\\xaf\\xb8\\x1a\\xa2\\x83\\x9f\\x7a\\x9b\\x1e\\x7c\\x9a\\x77\\x95\\x58\\x9e\\x58\\x9e\\x18\\x3b\\xa9\\x6b\\xb3\\xcf\\x1a\\xf2\\xd0\\xe3\\xdc\\xc2\\xab\\x68\"\n\"\\x50\\x8a\\x8b\\x86\\x8a\\x87\\x1e\\x0e\\xa8\\x26\\x0a\\xf7\\x33\\xf9\\xbf\\x3d\\x0a\\xdc\\x43\\x1d\\xf7\\x3f\\xf7\\x63\\xbb\\x0a\\x39\\x76\\x1d\\x70\\x43\\x0a\"\n\"\\xf7\\x15\\xf7\\x6d\\x3e\\x0a\\x0e\\xfb\\x33\\xf7\\xd2\\xf8\\x4b\\x15\\xae\\xf7\\x39\\x05\\xf7\\x8d\\x06\\xa6\\xf7\\x11\\x05\\xfc\\x23\\x06\\x4d\\xfb\\xb6\\x05\"\n\"\\x5b\\x06\\x71\\xfb\\x11\\x05\\xbb\\x06\\x48\\xfb\\xce\\x20\\x0a\\xce\\xf7\\xce\\x05\\xf7\\x50\\x06\\xa6\\xf7\\x11\\x05\\x0e\\xfb\\x82\\xf7\\xa4\\xf7\\xd5\\x15\"\n\"\\xa2\\xf5\\x05\\xf7\\x52\\x2f\\x0a\\xfb\\xde\\x06\\x5c\\xfb\\x6f\\x05\\x5f\\x06\\x77\\x2c\\x05\\xb7\\x06\\x5b\\xfb\\x76\\x20\\x1d\\xbb\\xf7\\x76\\x05\\xf7\\x34\"\n\"\\x06\\x9f\\xea\\x05\\x0e\\xf8\\x7c\\xf8\\x62\\x16\\x23\\x0a\\xd2\\xf7\\xdf\\x05\\xf7\\x13\\x06\\xca\\xfb\\xdf\\x05\\xbe\\x06\\x6a\\xfb\\x31\\x20\\x0a\\xc7\\xf7\"\n\"\\xae\\x05\\x26\\x06\\x58\\xf7\\x9f\\xb7\\x0a\\xfb\\x0a\\x06\\xc5\\xf7\\xa5\\x28\\x0a\\x51\\xfb\\xa5\\x05\\xfb\\x15\\xc4\\x1d\\xf7\\x3a\\x06\\xf7\\x61\\xf7\\xdf\"\n\"\\x05\\xf6\\x06\\x0e\\xf7\\x96\\xf8\\x83\\x16\\xbe\\xf7\\x83\\x05\\xdf\\x5d\\x0a\\xb8\\x06\\x64\\xfb\\x35\\x05\\x21\\x0a\\xca\\xf7\\xa6\\x05\\x32\\x06\\x6e\\xf7\"\n\"\\x50\\xf7\\x21\\xf7\\x83\\x05\\xfb\\x27\\x06\\xfb\\x02\\xfb\\x50\\x05\\x41\\xd9\\x1d\\x38\\xad\\x1d\\xd4\\x06\\x58\\xfb\\x83\\x05\\x0e\\x90\\xf7\\xf1\\x74\\x15\"\n\"\\xf7\\x34\\x91\\xf7\\x0a\\xf7\\x05\\xf7\\x26\\x1a\\xca\\x68\\x0a\\xfb\\x2a\\x06\\x85\\x6f\\x05\\x87\\x77\\x89\\x7a\\x7d\\x1a\\x2c\\xdb\\x3f\\xf7\\x07\\x7e\\x1e\"\n\"\\x54\\x36\\x05\\x50\\x0a\\x80\\x89\\x86\\x7b\\x1f\\x0e\\xfb\\x14\\xf7\\xb3\\x75\\x15\\xb5\\x8f\\xac\\x94\\xa7\\x99\\x08\\xcf\\xae\\xb8\\xcd\\xcc\\x1a\\x6b\\x0a\"\n\"\\xfb\\x20\\x06\\x88\\x76\\x89\\x77\\x7d\\x1a\\x3a\\xcb\\x52\\xee\\x83\\x1e\\x55\\x37\\x05\\xc8\\x1d\\x76\\x91\\xa4\\x5a\\x1f\\x6d\\x57\\x05\\x75\\xc5\\xa9\\x84\"\n\"\\xb8\\x1b\\xe6\\xc6\\xb5\\xcc\\xaf\\x74\\xa0\\x63\\x7b\\x7f\\x89\\x87\\x7c\\x1f\\x0e\\xe5\\xce\\x16\\x23\\x0a\\xd1\\xf7\\xdf\\x05\\xf4\\x06\\xca\\xfb\\xdf\\x05\"\n\"\\xbe\\x06\\x68\\xfb\\x30\\x20\\x0a\\xc8\\xf7\\xad\\x05\\x27\\x06\\x58\\xf7\\x9f\\xf7\\x4e\\xe4\\x1d\\x2d\\x06\\xc5\\xf7\\xa5\\x28\\x0a\\x0e\\x6a\\xf7\\x47\\xad\"\n\"\\x0a\\xd3\\x5d\\x0a\\xb8\\x06\\x68\\xfb\\x34\\x20\\x1d\\xc6\\xf7\\xa5\\x05\\x32\\x06\\x6d\\xf7\\x50\\xf7\\x22\\xf7\\x83\\x05\\xfb\\x28\\x06\\xfb\\x02\\xfb\\x50\"\n\"\\x05\\x4e\\x3b\\x1d\\x0e\\xb3\\xf8\\x0a\\xf8\\x5c\\x15\\x4f\\x54\\x0a\\xc7\\x06\\x6e\\xfb\\x20\\x05\\xda\\x06\\xa9\\xf7\\x20\\x05\\xa7\\x06\\xca\\xb2\\x1d\\x79\"\n\"\\x06\\xa9\\xf7\\x20\\x05\\x3c\\x06\\x0e\\x3c\\xf7\\xd8\\xf7\\xf4\\x15\\x5d\\x06\\xb3\\xf7\\x50\\x5d\\x1d\\xbe\\xf7\\x83\\x05\\xb9\\x06\\x71\\xfb\\x0c\\x05\\xc7\"\n\"\\x06\\xa5\\xf7\\x0c\\xb3\\xfb\\x83\\x05\\xf7\\x23\\x06\\x5b\\xf7\\xc1\\xf7\\x22\\xf7\\x83\\x05\\xfb\\x23\\x06\\xfb\\x02\\xfb\\x50\\xa4\\xf7\\x0c\\x05\\x4f\\x06\"\n\"\\x0e\\x74\\xf7\\x4d\\xf8\\xf0\\x15\\xfb\\x15\\xfc\\xf0\\x05\\x66\\x1d\\xf0\\xac\\x1d\\x30\\x06\\xc5\\xf7\\xa5\\x05\\xfc\\x1b\\x24\\x1d\\x0e\\xfb\\x17\\xf7\\x24\"\n\"\\xf8\\x41\\x15\\x2f\\xfc\\x41\\x20\\x1d\\xbe\\xf7\\x83\\x05\\xd3\\x06\\xb2\\xa4\\x0a\\xfb\\x01\\xfb\\x50\\x05\\x4d\\x3b\\x1d\\xfb\\xd5\\x3f\\x0a\\xf7\\x47\\x06\"\n\"\\x0e\\xdf\\xf7\\xb3\\xf7\\xdf\\x15\\xf7\\xb5\\x06\\x45\\xfb\\xdf\\x05\\xcd\\x06\\x69\\xfb\\x31\\x20\\x0a\\xc8\\xf7\\xae\\x05\\x49\\x3c\\x1d\\x51\\xfb\\xa5\\x05\"\n\"\\xfb\\xb5\\x06\\xc5\\xf7\\xa5\\x34\\x0a\\x0e\\x68\\xa9\\x0a\\xc3\\x06\\x67\\xfb\\x33\\x20\\x1d\\xc7\\xf7\\xa4\\x05\\x53\\x06\\xe6\\xf8\\x3f\\x9d\\x0a\\xdf\\xf8\"\n\"\\x18\\x74\\x15\\xf7\\x47\\x8d\\xf7\\x19\\xf2\\xb5\\xf7\\x3b\\x08\\xfb\\x23\\x06\\x2f\\x6e\\x44\\x57\\x2b\\x1b\\x2a\\x59\\xc1\\xf4\\xde\\x51\\x0a\\xf7\\x21\\x06\"\n\"\\x8e\\xa6\\x8c\\x96\\x97\\x1a\\xf7\\x11\\x22\\xdf\\xfb\\x2f\\xfb\\x0f\\x20\\x56\\x26\\x39\\x1e\\x45\\x33\\x5f\\xfb\\x1b\\xfb\\x15\\x1a\\x21\\xbe\\x33\\xde\\x66\"\n\"\\x1e\\xa8\\x7f\\xaa\\x83\\xb2\\x86\\x54\\x36\\x18\\x85\\x1d\\x74\\xa0\\x63\\x7b\\x80\\x89\\x87\\x7b\\x1f\\x0e\\x39\\xf7\\xc0\\x74\\x15\\xf7\\x0e\\x8c\\xf1\\xdd\"\n\"\\xb0\\xf7\\x13\\x08\\x57\\x1d\\xf7\\x1a\\x06\\x6b\\x1d\\x66\\x5c\\x9c\\x48\\x1b\\x2d\\x41\\x6c\\x4b\\x57\\x1f\\x50\\x45\\x61\\xfb\\x09\\x2c\\x1a\\x3f\\xb3\\x47\"\n\"\\xc8\\x6e\\x1e\\xa1\\x81\\xa2\\x85\\xa8\\x87\\x54\\x36\\x18\\x50\\x0a\\x7f\\x89\\x87\\x7c\\x1f\\x0e\\xa8\\x2c\\x0a\\x0e\\x2c\\xf8\\x93\\xb0\\x0a\\xdd\\xfc\\xb0\"\n\"\\x5d\\xfb\\x6e\\x05\\x21\\x0a\\xb9\\xf7\\x6e\\xf7\\xc7\\xf8\\xb0\\x05\\x0e\\xa8\\xf8\\x6a\\xf7\\x83\\x15\\x91\\xab\\xf7\\xdd\\xf8\\x5e\\x05\\xfb\\x3c\\x06\\xfb\"\n\"\\x63\\xfb\\xd5\\x3a\\xf7\\xd5\\x05\\xfb\\x3b\\x06\\xf7\\x24\\xfc\\x5e\\x85\\x6b\\x05\\xfb\\x17\\x24\\x1d\\xf7\\x17\\x06\\x73\\xfb\\x06\\x20\\x0a\\xa3\\xf7\\x06\"\n\"\\x05\\xf7\\x17\\x21\\x1d\\x0e\\x2c\\xf7\\xf0\\x16\\xf7\\xc7\\xf8\\xb0\\x05\\xfb\\x24\\x06\\xfb\\x57\\xfc\\x1d\\x67\\xf8\\x1d\\x05\\xfb\\x2e\\x06\\xdd\\xfc\\xb0\"\n\"\\x05\\x20\\x06\\x77\\x2c\\x05\\xf6\\x06\\x71\\xfb\\x0f\\x05\\xf7\\x20\\x06\\xa5\\xf7\\x0f\\x05\\xf6\\x06\\x9f\\xea\\x05\\x0e\\xda\\x93\\x1d\\xce\\x06\\x68\\xfb\"\n\"\\x31\\x20\\x0a\\xc9\\xf7\\xae\\x05\\xfb\\x14\\x06\\x0e\\x5a\\xf8\\x2d\\xf7\\xa4\\x15\\xf7\\x7d\\xf7\\xa0\\x05\\xfb\\x41\\x06\\xfb\\x0e\\xfb\\x37\\x56\\xf7\\x37\"\n\"\\x05\\xfb\\x37\\x06\\xf7\\x0b\\xfb\\xa0\\xfb\\x82\\xfb\\xa4\\x05\\xf7\\x41\\x06\\xf7\\x14\\xf7\\x3c\\xc2\\xfb\\x3c\\x05\\xd1\\x06\\x6a\\xfb\\x33\\x20\\x1d\\xc4\"\n\"\\xf7\\xa4\\x05\\xfb\\x0e\\x06\\x0e\\xda\\xf8\\x88\\x16\\xcd\\x06\\x68\\xfb\\x30\\x20\\x0a\\xc9\\xf7\\xad\\x05\\x49\\x3c\\x1d\\x41\\xfb\\xf4\\x05\\x78\\x40\\x4d\"\n\"\\x81\\x57\\x1b\\x46\\x62\\xa6\\xb8\\x92\\x8c\\x92\\x8c\\x91\\x1f\\xa4\\x1d\\x7b\\x1a\\x21\\xe3\\x4e\\xf7\\x2a\\xc6\\xa8\\x8f\\xa4\\xee\\x1e\\x0e\\x66\\xf8\\x1e\"\n\"\\x16\\xc6\\x06\\x69\\xfb\\x33\\x20\\x1d\\xc5\\xf7\\xa4\\x05\\x53\\x06\\xe6\\xf8\\x3f\\x22\\x0a\\x56\\xfb\\x8d\\x05\\x7b\\x5d\\x60\\x83\\x63\\x1b\\x5f\\x6f\\x9c\"\n\"\\xa5\\x8f\\x8b\\x8e\\x8c\\x8d\\x1f\\xba\\xf7\\x71\\x05\\xfb\\x20\\x06\\x5c\\xfb\\x71\\x05\\x86\\x77\\x89\\x77\\x79\\x1a\\x47\\xc0\\x64\\xea\\xbf\\xc6\\x94\\x9c\"\n\"\\xc9\\x1e\\x0e\\xda\\xf8\\x45\\xf7\\x74\\x15\\xaa\\x8e\\x9e\\x8f\\xd1\\x9d\\x56\\xfb\\x8d\\x18\\xf7\\x2a\\x97\\x0a\\x5f\\x7f\\x67\\x84\\x62\\x86\\x19\\xaa\\xf7\"\n\"\\x27\\x05\\x3c\\x06\\x6b\\xfb\\x2c\\x05\\x49\\x90\\x6b\\xa3\\xb6\\x1a\\x92\\x8c\\x92\\x8c\\x91\\x1e\\xc8\\xf7\\xb5\\x28\\x0a\\x4e\\xfb\\xb5\\x05\\x87\\x79\\x89\"\n\"\\x78\\x7a\\x1a\\x4b\\xaf\\x57\\xca\\x70\\x1e\\xad\\x7d\\xb2\\x83\\xbf\\x8a\\x6f\\xfb\\x1b\\x18\\xda\\x06\\x0e\\x66\\xf7\\xfa\\xf7\\x37\\x15\\xa7\\x90\\x9e\\x8f\"\n\"\\xa7\\x93\\x64\\xfb\\x48\\x18\\xf7\\x23\\x06\\xf7\\x07\\xf8\\xb0\\x22\\x0a\\x56\\xfb\\x8d\\x6f\\x81\\x77\\x86\\x6d\\x86\\x19\\xa5\\xf7\\x0d\\x05\\x49\\x06\\x71\"\n\"\\xfb\\x11\\x05\\x5d\\x96\\x80\\x93\\xa3\\x1a\\x8f\\x8b\\x8e\\x8c\\x8d\\x1e\\xba\\xf7\\x71\\x22\\x0a\\x5c\\xfb\\x71\\x05\\x86\\x77\\x89\\x77\\x79\\x1a\\x44\\xc1\"\n\"\\x67\\xf3\\x94\\x8f\\x8b\\x8c\\x93\\x1e\\x72\\xfb\\x08\\x05\\xcd\\x06\\x0e\\xda\\xf8\\x08\\x33\\x0a\\xd6\\xf7\\xf4\\x05\\x9d\\xd4\\xd0\\x96\\xba\\x1b\\xd0\\xb3\"\n\"\\x70\\x5e\\x7f\\x8b\\x8a\\x89\\x84\\x1f\\x4e\\xfb\\xb5\\x20\\x0a\\xc9\\xf7\\xb5\\x05\\x8e\\x9d\\x8d\\x9b\\x9f\\x1a\\xf2\\x2f\\xca\\xfb\\x2a\\x4d\\x53\\x82\\x77\"\n\"\\x4a\\x1e\\x0e\\x56\\xdd\\x16\\x21\\x0a\\xca\\xf7\\xbb\\x05\\xc8\\xb5\\xb2\\xa5\\xbd\\x1b\\xb4\\xa4\\x72\\x62\\x83\\x8a\\x85\\x8a\\x84\\xd5\\x1d\\x99\\x8c\\x98\"\n\"\\x97\\x1a\\xd2\\x4b\\xc6\\x3e\\x52\\x5a\\x78\\x59\\x44\\x1e\\xcc\\xf7\\xc9\\x05\\xfb\\x20\\x06\\x0e\\xf8\\x05\\x33\\x0a\\x0e\\xd1\\xf8\\x9e\\xf7\\x11\\x15\\x36\"\n\"\\x06\\x51\\xfb\\xad\\x20\\x0a\\xab\\xf7\\x30\\x05\\xdf\\x77\\x0a\\xf7\\x2b\\xc8\\xc4\\x94\\x9f\\xcb\\x1e\\x0e\\x54\\xf8\\x2d\\xf7\\x05\\x15\\x44\\x06\\x55\\xfb\"\n\"\\xa6\\x20\\x1d\\xa9\\xf7\\x35\\x05\\xd4\\x8c\\x1d\\xed\\xc0\\xc1\\x94\\x9c\\xbc\\x1e\\x0e\\xf7\\x20\\xf7\\x18\\xf8\\x3b\\x15\\x77\\x50\\x83\\x5b\\x54\\x1a\\x43\"\n\"\\x9d\\x4d\\xae\\x5a\\x1e\\x47\\xba\\xd7\\x6a\\xf4\\x1b\\xf7\\x10\\xf7\\x00\\xbd\\xeb\\xde\\x1f\\xdb\\xe9\\xba\\xf7\\x0e\\xf7\\x0a\\x1a\\xf7\\x47\\x26\\xf4\\xfb\"\n\"\\x41\\xfb\\x24\\xfb\\x0c\\x4c\\xfb\\x12\\x30\\x1e\\xf7\\x09\\x4b\\x05\\xe3\\xc7\\xca\\xb0\\xe0\\x1b\\xee\\xc1\\x4e\\xfb\\x02\\x89\\x8b\\x81\\x8a\\x84\\x1f\\x71\"\n\"\\xfb\\x11\\x15\\xfb\\x10\\x5a\\x37\\x46\\x23\\x1b\\x29\\x51\\xcc\\xf7\\x00\\x1f\\x9f\\x07\\x0e\\xdc\\x43\\x1d\\xf8\\x62\\xf7\\x34\\x2d\\x0a\\x70\\x43\\x0a\\xf8\"\n\"\\x1f\\xf7\\x1e\\x15\\xfb\\xc0\\x27\\x0a\\xf7\\xc0\\x06\\x0e\\xf7\\x20\\x8b\\x1d\\xfb\\xa5\\xfc\\x4f\\x15\\xf8\\x15\\x06\\xfb\\x0c\\x5f\\x33\\x42\\x26\\x1b\\x2c\"\n\"\\x52\\xcb\\xf7\\x00\\x1f\\xa5\\xf7\\x26\\x15\\xf7\\x0c\\xb9\\xe1\\xd1\\xf0\\x1b\\xf0\\xbe\\x4b\\xfb\\x12\\x8a\\x1f\\x0e\\x70\\x7d\\x0a\\xfb\\x49\\xfb\\xe1\\x15\"\n\"\\xf7\\x8a\\x06\\x39\\x6a\\x56\\x5f\\x4a\\x1b\\x51\\x66\\xb7\\xcf\\x1f\\x9f\\xf7\\x00\\x15\\xdd\\xac\\xc0\\xb7\\xcc\\x1b\\xaf\\xab\\x77\\x6d\\x99\\x1f\\x95\\x75\"\n\"\\x8e\\x78\\x68\\x1a\\x0e\\xb2\\xf9\\x28\\xfa\\x01\\xc4\\x0a\\xfc\\xc8\\xfd\\xb1\\x15\\xf7\\x24\\x06\\xd9\\x8d\\xba\\xa5\\xb4\\xcc\\xf8\\x37\\xf9\\x10\\x18\\xfb\"\n\"\\x35\\x06\\xfb\\x7d\\xfc\\x05\\x3f\\xf8\\x05\\x05\\xfb\\x29\\x06\\xf7\\x0e\\xfc\\x9e\\x6b\\x5a\\x79\\x70\\x84\\x86\\x6a\\x8a\\x19\\xfb\\x07\\x06\\x0e\\x39\\xf8\"\n\"\\xc6\\xf9\\x48\\xe8\\x1d\\x6a\\x43\\x95\\x1d\\x0e\\xfb\\xc5\\xf9\\x14\\xf9\\xfe\\x57\\x0a\\xf7\\xaa\\xb0\\x89\\x15\\xf7\\x69\\xaf\\x8f\\xa5\\xc8\\x1f\\xf7\\x05\"\n\"\\xbd\\xdf\\xf7\\x33\\xf7\\x37\\x1a\\xe1\\x70\\xd6\\x5f\\xad\\x1e\\xa4\\x6c\\x5e\\x97\\x50\\x1b\\xfb\\x08\\x38\\x6b\\x4d\\x5e\\x1f\\x71\\x67\\x81\\x64\\x89\\x42\"\n\"\\xcc\\xab\\x18\\x97\\x07\\xc1\\x9c\\xb1\\xad\\xa2\\x1e\\x9c\\x96\\x95\\x8e\\xb9\\x94\\x42\\xfc\\x1f\\x18\\x7c\\x45\\x73\\x61\\x6e\\x81\\x08\\x77\\x06\\xd3\\x8a\"\n\"\\x15\\xc8\\xbc\\x9a\\xac\\xa1\\xf7\\x0f\\xc2\\xf7\\xd2\\x18\\x92\\x06\\x90\\x06\\x9e\\x06\\xa9\\x97\\x88\\x7f\\x9e\\x1f\\xb3\\x72\\xa1\\x51\\x3a\\x1a\\x20\\x73\"\n\"\\x34\\x5c\\x4c\\x1e\\x64\\x59\\x58\\x6e\\x54\\x88\\x08\\xf7\\x7b\\xfb\\x7d\\x15\\xce\\x06\\xad\\xf7\\x52\\x05\\x7d\\xaa\\x97\\x88\\x9e\\x1b\\xf7\\x06\\xee\\xf7\"\n\"\\x29\\xf7\\x42\\xec\\x64\\xbd\\x3e\\x5c\\x63\\x77\\x66\\x6d\\x1f\\x69\\x61\\x79\\x55\\x75\\xfb\\x0b\\x08\\xb9\\xfb\\x00\\x15\\xae\\xf7\\x54\\x05\\xe1\\x9b\\xad\"\n\"\\xbc\\xb7\\x1b\\xb2\\xa0\\x63\\x41\\xfb\\x20\\x56\\xfb\\x02\\x47\\x71\\x77\\x95\\xa1\\x79\\x1f\\x0e\\xf7\\x16\\xa0\\x16\\xf7\\xcc\\x06\\xa6\\xf7\\x11\\x69\\xa4\"\n\"\\x7f\\x96\\x7b\\x9d\\x19\\x72\\xa9\\x7e\\xb5\\xbf\\x1a\\xf7\\x4b\\xf7\\x05\\xf7\\x23\\xf7\\x23\\xeb\\xca\\x4c\\x2b\\x39\\x69\\x28\\x58\\x4b\\x1e\\x6c\\x64\\x77\"\n\"\\x7a\\x3f\\x5f\\x70\\xc7\\x0a\\xfb\\x3e\\x06\\xd3\\xb5\\xa9\\xa3\\xab\\xb2\\x08\\xc1\\xcc\\xab\\xea\\xe5\\x1a\\xf7\\x2f\\xfb\\x07\\xf5\\xfb\\x3c\\xfb\\x7c\\xfb\"\n\"\\x5b\\xfb\\x57\\xfb\\x78\\x52\\x9b\\x5b\\xab\\x67\\x1e\\x98\\x7c\\x97\\x80\\xad\\x71\\x08\\xfb\\x3e\\x06\\x0e\\xf8\\x5f\\x32\\x0a\\x0e\\x55\\x0a\\xf7\\xfe\\xf8\"\n\"\\xa9\\xf8\\x95\\x15\\x49\\x06\\xfb\\x74\\xfc\\x95\\x05\\xdb\\x06\\xf7\\x45\\xf8\\x2d\\xf7\\x45\\xfc\\x2d\\x05\\xdb\\x06\\x0e\\xf7\\xfe\\xf8\\xa9\\x16\\xf7\\x74\"\n\"\\xf8\\x95\\x05\\x3b\\x06\\xfb\\x45\\xfc\\x2d\\xfb\\x45\\xf8\\x2d\\x05\\x3b\\x06\\xf7\\x74\\xfc\\x95\\x05\\x0e\\xf7\\xfe\\xf8\\x8c\\xf9\\x60\\x15\\xfb\\x60\\xfb\"\n\"\\x34\\xfb\\x33\\xfb\\x5e\\xfb\\x5b\\xf7\\x34\\xfb\\x33\\xf7\\x5d\\xf7\\x5b\\xf7\\x34\\xf7\\x34\\xf7\\x5c\\xf7\\x59\\xfb\\x35\\xf7\\x36\\xfb\\x57\\x1f\\xa4\\x52\"\n\"\\x15\\xf7\\x23\\x7e\\xf7\\x06\\xfb\\x06\\x99\\xfb\\x25\\x08\\xfb\\xa3\\x06\\xf7\\xa4\\x52\\x15\\x82\\xfb\\x22\\xfb\\x0d\\xfb\\x0f\\xfb\\x22\\x80\\x08\\xf7\\xa8\"\n\"\\x07\\x53\\xfb\\xa8\\x15\\xfb\\x27\\x99\\xfb\\x05\\xf7\\x05\\x7d\\xf7\\x29\\x08\\xf7\\xa6\\x06\\xfb\\xa6\\xc4\\x15\\x99\\xf7\\x24\\xf7\\x07\\xf7\\x06\\xf7\\x25\"\n\"\\x99\\x08\\xfb\\xa4\\x07\\x0e\\x69\\xb6\\x16\\xf8\\x9b\\xf8\\x9b\\xfc\\x9b\\x06\\xf8\\x67\\xfc\\x67\\x15\\xfc\\x33\\xf8\\x33\\xf8\\x33\\x06\\x0e\\xdc\\xf8\\xeb\"\n\"\\xf8\\xf7\\x15\\x45\\xfb\\xa4\\x06\\xfb\\x05\\x86\\x5f\\x7b\\x6b\\x1e\\x56\\x70\\x50\\x67\\x4c\\x1b\\x54\\x54\\xa7\\xb7\\x6e\\x1f\\x73\\xb0\\x84\\xb7\\xf7\\x11\"\n\"\\x1a\\xf7\\xa4\\x45\\xfb\\xa1\\x07\\xfb\\x29\\x90\\x65\\xa6\\x5f\\x1e\\x45\\xb5\\xd7\\x62\\xe5\\x1b\\xde\\xd1\\xac\\xc9\\xb8\\x1f\\xaf\\xbc\\x91\\xaf\\xf7\\x36\"\n\"\\x1a\\x0e\\x5e\\xf8\\x27\\xf8\\x1c\\x15\\xfb\\x69\\x06\\x41\\xf7\\x4d\\x05\\x2d\\x06\\xf7\\x7d\\xfc\\xd5\\x05\\xde\\x06\\xf7\\x7d\\xf8\\xd5\\x05\\x2d\\x06\\x22\"\n\"\\xfb\\x9d\\x15\\x3f\\xfb\\x48\\x40\\xf7\\x48\\x05\\x0e\\x70\\xf9\\x24\\x29\\x0a\\x74\\x0a\\xcc\\x06\\x26\\x5e\\x5b\\x5a\\x4f\\x1a\\x56\\xb9\\x71\\xe8\\xa2\\x93\"\n\"\\x8c\\x90\\xa3\\x1e\\x9a\\x8e\\x96\\xbf\\x05\\x83\\x74\\x74\\x88\\x75\\x1b\\x68\\x79\\x99\\xa6\\xbd\\xb8\\xbe\\xdb\\xb4\\x1f\\x0e\\x5c\\x40\\x1d\\x0e\\x5c\\x40\"\n\"\\x1d\\xf7\\x43\\xf8\\xa1\\x44\\x0a\\x5c\\x40\\x1d\\xf7\\x36\\xf8\\xa1\\x52\\x1d\\x5c\\x40\\x1d\\xf7\\xa5\\xf8\\xcf\\x15\\x25\\x06\\x76\\x27\\x94\\x28\\x05\\xb3\"\n\"\\x06\\xc0\\xee\\x05\\x0e\\x70\\x87\\x1d\\xca\\xf9\\x99\\x15\\x52\\xe5\\x1d\\xb5\\x6d\\xa8\\x60\\x1f\\x82\\xbd\\x1d\\x0e\\x70\\x4f\\x0a\\xf7\\x4c\\xf9\\x7c\\x41\"\n\"\\x0a\\xf7\\x20\\x38\\x0a\\xf7\\x4b\\x30\\x1d\\x0e\\xf7\\x20\\x38\\x0a\\x9d\\x99\\x0a\\x0e\\xf7\\x20\\x38\\x0a\\xa5\\xf9\\x79\\x2e\\x0a\\xf7\\x67\\xf7\\x0c\\x2e\"\n\"\\x0a\\x0e\\xf7\\x20\\x38\\x0a\\x48\\xf9\\x89\\x3e\\x0a\\x0e\\xfb\\x50\\xf7\\xfc\\xfb\\x6e\\x15\\xd8\\xf7\\x0a\\xab\\xd0\\xbe\\x1a\\xa1\\x81\\xa2\\x7c\\x98\\x1e\"\n\"\\x7b\\x99\\x74\\x93\\x64\\x8f\\x48\\x92\\x18\\x62\\x90\\x7a\\x8f\\x7d\\x93\\x08\\x79\\x95\\x80\\xa2\\xa4\\x1a\\xb5\\xa3\\xb4\\xb1\\xa4\\x1e\\xa1\\xac\\xb1\\x92\"\n\"\\xdc\\x1b\\xcb\\x2f\\x0a\\x4d\\x06\\x34\\x61\\xa3\\xbe\\xaf\\xa5\\xaf\\xb0\\x9c\\x1f\\x97\\xa6\\xa4\\x8f\\xbf\\x1b\\xe4\\x2f\\x0a\\xfc\\x22\\x3f\\x0a\\xdd\\x06\"\n\"\\x55\\x64\\x73\\x65\\x5a\\x1a\\x59\\xa5\\x68\\xbf\\x77\\x1e\\x50\\x7d\\x6d\\x7c\\x6b\\x6d\\x08\\x5f\\x63\\x70\\x4e\\x4e\\x1a\\x57\\xa0\\x5e\\xaf\\x70\\x1e\\xa7\"\n\"\\x77\\xac\\x81\\xc1\\x86\\xb7\\x86\\x18\\xb4\\x87\\x8b\\x8b\\x96\\x83\\x08\\x90\\x87\\x8f\\x83\\x84\\x1a\\x6d\\x6f\\x59\\x3e\\x20\\x1e\\x0e\\x39\\x50\\x1d\\xfb\"\n\"\\xaa\\xf7\\x6d\\xb6\\x1d\\x39\\x50\\x1d\\xfb\\xee\\xf7\\x6d\\x3e\\x0a\\x0e\\xfb\\x1e\\x44\\x1d\\x82\\xf7\\xde\\x2b\\x1d\\xfb\\x1e\\x44\\x1d\\x34\\xf7\\xce\\x3b\"\n\"\\x0a\\xfb\\x26\\xf7\\x6a\\xf8\\xfc\\x15\\xf7\\x59\\x06\\x31\\x57\\x56\\x60\\x50\\x46\\x08\\x38\\x2b\\x5d\\x24\\x2e\\x1a\\x31\\xc5\\x57\\xf7\\x05\\x7f\\x1e\\xba\"\n\"\\x87\\x05\\xb5\\x86\\x98\\x84\\x78\\x1a\\x6f\\x72\\x5e\\x3b\\xfb\\x08\\x1e\\xf7\\x17\\x06\\xd8\\xf7\\x06\\xac\\xd3\\xc1\\x1a\\xa2\\x80\\xa3\\x7a\\x98\\x1e\\x79\"\n\"\\x98\\x7a\\x90\\x5b\\x91\\x66\\x8f\\x18\\x4d\\x92\\x7d\\x8e\\x7b\\x95\\x08\\x7a\\x95\\x80\\xa4\\xa6\\x1a\\xd7\\xc2\\xf3\\xe3\\xe7\\x1e\\xd2\\xd4\\xcd\\xba\\xec\"\n\"\\xb8\\xa0\\xef\\x18\\xfc\\x11\\x06\\x0e\\x74\\xa2\\xf8\\xb0\\x94\\xf7\\x48\\x97\\x6b\\x9a\\x06\\xf7\\x05\\x0a\\xf7\\x23\\x0b\\xbf\\x94\\x92\\x8e\\x8f\\x90\\x9a\"\n\"\\x99\\x8f\\x93\\x8e\\x8f\\x0c\\x0c\\xf7\\xaa\\x14\\xf9\\x12\\x15\\xb2\\x13\\x00\\xa8\\x02\\x00\\x01\\x00\\x05\\x00\\x09\\x00\\x0e\\x00\\x12\\x00\\x3f\\x00\\x44\"\n\"\\x00\\x4c\\x00\\x51\\x00\\x55\\x00\\x59\\x00\\x5d\\x00\\x60\\x00\\x79\\x00\\x7c\\x00\\x82\\x00\\x88\\x00\\xac\\x00\\xb3\\x00\\xb8\\x00\\xbd\\x00\\xc3\\x00\\xc8\"\n\"\\x00\\xcf\\x00\\xdf\\x01\\x0f\\x01\\x16\\x01\\x26\\x01\\x2c\\x01\\x35\\x01\\x38\\x01\\x44\\x01\\x4a\\x01\\x50\\x01\\x7b\\x01\\x7f\\x01\\x9b\\x01\\xac\\x01\\xb5\"\n\"\\x01\\xc3\\x01\\xc8\\x01\\xd1\\x01\\xda\\x01\\xe1\\x01\\xed\\x02\\x2f\\x02\\x6d\\x02\\x81\\x02\\x8c\\x02\\x93\\x02\\xab\\x02\\xb0\\x02\\xc6\\x02\\xd1\\x02\\xe2\"\n\"\\x02\\xe7\\x02\\xea\\x02\\xed\\x02\\xf2\\x02\\xfc\\x03\\x0a\\x03\\x13\\x03\\x19\\x03\\x9a\\x03\\xd4\\x03\\xf6\\x03\\xfd\\x04\\x5f\\x04\\x75\\x04\\x8a\\x04\\xbb\"\n\"\\x05\\x17\\x05\\x38\\x05\\x8a\\x05\\x94\\x05\\x9f\\x05\\xf0\\x06\\x32\\x06\\x37\\x06\\x5d\\x06\\x7e\\x06\\xbb\\x06\\xe3\\x07\\x0b\\x07\\x45\\x07\\x57\\x07\\x82\"\n\"\\x07\\xb4\\x07\\xcf\\x07\\xff\\x08\\x02\\x08\\x27\\x08\\x34\\x08\\x5d\\x08\\x88\\x08\\x98\\x08\\xab\\x08\\xb5\\x08\\xcd\\x08\\xd5\\x08\\xeb\\x08\\xee\\x09\\x00\"\n\"\\x09\\x11\\x09\\x16\\x09\\x2b\\x09\\x48\\x09\\x4c\\x09\\x68\\x09\\x76\\x09\\x82\\x09\\x9d\\x09\\xb0\\x09\\xbd\\x09\\xd4\\x09\\xe3\\x09\\xef\\x09\\xf5\\x0a\\x0c\"\n\"\\x0a\\x15\\x0a\\x1b\\x0a\\x31\\x0a\\x3a\\x0a\\x4e\\x0a\\x61\\x0a\\x76\\x0a\\x79\\x0a\\x83\\x0a\\x8b\\x0a\\x91\\x0a\\xa4\\x0a\\xab\\x0a\\xb4\\x0a\\xc6\\x0a\\xd0\"\n\"\\x0a\\xe0\\x0a\\xe8\\x0a\\xf3\\x0b\\x03\\x0b\\x12\\x0b\\x1c\\x0b\\x2c\\x0b\\x35\\x0b\\x3a\\x0b\\x3f\\x0b\\x4e\\x0b\\x5d\\x0b\\x66\\x0b\\x6f\\x0b\\x7d\\x0b\\x8b\"\n\"\\x0b\\x99\\x0b\\xa7\\x0b\\xb3\\x0b\\xc1\\x0b\\xcf\\x0b\\xd6\\x0b\\xe3\\x0b\\xee\\x0b\\xfb\\x0c\\x03\\x0c\\x0f\\x0c\\x1b\\x0c\\x27\\x0c\\x31\\x0c\\x3c\\x0c\\x47\"\n\"\\x0c\\x52\\x0c\\x5d\\x05\\x23\\x0a\\x0b\\xf7\\x20\\x06\\x0b\\x05\\xfb\\x20\\x06\\x0b\\xf7\\x2a\\x06\\x0b\\xf8\\xa8\\xf7\\x27\\x15\\x9d\\xfb\\x27\\x05\\xf7\\x2d\"\n\"\\x06\\x2a\\xf9\\x6d\\x05\\xfb\\x41\\x06\\xfc\\x2b\\xfd\\x6d\\x05\\xf7\\x2d\\x06\\xdc\\xf7\\x27\\x05\\xf7\\x96\\xf7\\x11\\x15\\xfb\\x51\\x06\\xf7\\x2e\\xf7\\xaf\"\n\"\\x05\\x0b\\xf8\\x04\\x33\\x0a\\x0b\\x99\\x1d\\xf8\\xb5\\x06\\xbf\\x0a\\x0b\\x06\\x7a\\x3b\\x05\\x0b\\x05\\x2a\\x0a\\x0b\\xf8\\xb0\\x15\\x0b\\xfb\\x2a\\x06\\x0b\"\n\"\\x4d\\x1d\\x0e\\xf8\\x71\\xe6\\x1d\\xfb\\x63\\xfb\\xcf\\x39\\xf7\\xcf\\x05\\xfb\\x3b\\x06\\xf7\\x25\\xfc\\x5f\\x51\\xfb\\xa2\\x20\\x0a\\x0b\\xc4\\x0a\\x0e\\x4b\"\n\"\\x1d\\xf7\\x03\\x06\\x0b\\x06\\xa3\\xf7\\x05\\x05\\x0b\\xf9\\xc4\\x22\\x1d\\xfb\\x22\\x06\\xfb\\x01\\xfc\\x97\\xfb\\x54\\xf8\\x97\\x05\\xfb\\x2a\\x28\\x1d\\xf7\"\n\"\\x22\\x06\\xf7\\x03\\xf8\\x9f\\xf7\\x54\\xfc\\x9f\\x05\\xf7\\x28\\x06\\x0b\\xa8\\x0a\\xd7\\x91\\xce\\xa2\\x0a\\xf9\\x5f\\xb5\\x0a\\x0b\\x60\\x1d\\x23\\x0a\\x0b\"\n\"\\x05\\xfb\\x2a\\x35\\x0a\\x0b\\x28\\x1d\\x23\\x0a\\x0b\\xf8\\x31\\xf8\\xb9\\x84\\x1d\\x0b\\x15\\x38\\x06\\x97\\xc0\\x7c\\x0a\\x21\\x0a\\xe8\\xf8\\x48\\x05\\xdd\"\n\"\\x06\\x0b\\xf8\\xfd\\x16\\xf7\\x9c\\xf8\\xb0\\x05\\xfb\\x25\\x06\\xfb\\x37\\xfc\\x0e\\x05\\xf8\\x0e\\xfb\\x24\\x07\\xfb\\x33\\xfc\\x0e\\x86\\xf8\\x0e\\x05\\xfb\"\n\"\\x25\\x06\\xb0\\xfc\\xb0\\x05\\xf7\\x25\\x06\\xf7\\x3a\\xf8\\x10\\x8f\\xfc\\x10\\x05\\x0b\\x7e\\x0a\\x43\\xf7\\x27\\x05\\x0e\\x15\\xf7\\x1f\\xf7\\x27\\x05\\x3f\"\n\"\\x06\\x24\\x2a\\x4e\\xec\\x05\\x3d\\x06\\x0b\\x4b\\x1d\\xf7\\x02\\x06\\x0e\\x15\\x73\\xfb\\x04\\x05\\xce\\x06\\x85\\x0b\\x61\\x1d\\x0e\\x15\\xef\\xfb\\x2a\\x05\"\n\"\\xcb\\x06\\x5e\\xf7\\x2a\\x05\\x0b\\x06\\x73\\xfb\\x05\\x05\\x0b\\x06\\xae\\xf7\\x39\\x05\\x0b\\x15\\x69\\x7d\\x7a\\x7a\\x74\\x1b\\x7f\\x89\\xe0\\x1d\\x72\\x1b\"\n\"\\x55\\x5f\\x61\\x40\\x74\\x1f\\xc1\\x06\\xac\\x9c\\x9b\\x9a\\x9d\\x1b\\x93\\xa0\\x84\\x84\\x9a\\x1f\\xbd\\x72\\x05\\x85\\x98\\xa0\\x86\\x9c\\x4a\\x1d\\x15\\x88\"\n\"\\x1d\\x0e\\xcf\\x16\\x21\\x0a\\x9a\\xd2\\xf7\\x8d\\xf7\\x92\\x46\\xfb\\xd9\\x05\\x63\\x1d\\x7c\\x44\\xfb\\x8d\\xfb\\x92\\xd0\\xf7\\xd9\\x22\\x0a\\x0b\\x15\\xfb\"\n\"\\x02\\x06\\x71\\xfb\\x0e\\x05\\xf7\\x02\\x06\\xf7\\x68\\xf7\\x0e\\x49\\x1d\\xe2\\x1d\\xf7\\x68\\xf7\\x0c\\xe2\\x1d\\x0e\\xf8\\x96\\xf8\\xf0\\x15\\x5a\\x1d\\xfb\"\n\"\\x15\\xfc\\xf0\\x20\\x0a\\x0b\\xf7\\xd8\\xaa\\x1d\\x0b\\x16\\xf7\\x20\\x06\\xe6\\xf8\\x3f\\x05\\x0b\\x15\\xfb\\x12\\x06\\x25\\xfb\\x27\\x05\\x0b\\x06\\xf7\\x2f\"\n\"\\xf9\\x6d\\x05\\x0b\\xf8\\x3d\\xf8\\xa5\\x37\\x0a\\xf7\\xf5\\xe8\\x37\\x0a\\x0b\\xf8\\xe5\\xf7\\xe6\\x15\\x6b\\x1d\\x66\\x5c\\x9c\\x48\\x1b\\x2d\\x41\\x6c\\x4b\"\n\"\\x57\\x1f\\x50\\x45\\x61\\xfb\\x09\\x2c\\x1a\\x59\\x9d\\x5a\\xaa\\x68\\x1e\\x62\\xaf\\xc3\\x77\\xd4\\x1b\\xf7\\x16\\xed\\xd7\\xf7\\x1a\\xb5\\x1f\\xcc\\x1d\\xc4\"\n\"\\xa3\\xbc\\xdc\\x1d\\xad\\xa3\\x7f\\x76\\x98\\x1f\\x93\\x7c\\x8d\\x7e\\x8c\\x65\\x08\\x0b\\xf8\\xd1\\xf7\\x76\\xc7\\x1d\\x51\\xa3\\x42\\xc6\\x0a\\xfb\\x09\\x27\"\n\"\\x1a\\xfb\\x10\\xe0\\x37\\xf7\\x12\\xf7\\x0d\\xf0\\xca\\xf7\\x04\\xc2\\x1e\\xfb\\x1e\\x06\\x65\\x78\\x5e\\x72\\x5b\\x1b\\x52\\x65\\xb0\\xc2\\x95\\x8c\\x95\\x8d\"\n\"\\xa4\\x1f\\x9d\\xe8\\x15\\xd9\\xa0\\xb9\\xb3\\xcd\\x6d\\x1d\\x89\\x68\\x1a\\x0b\\xf9\\x27\\xf9\\x6d\\x59\\x1d\\x68\\x87\\x6d\\x75\\x1a\\xfb\\x09\\xea\\x41\\xf7\"\n\"\\x2c\\x5b\\x1d\\x0b\\xf8\\xb1\\x16\\xf7\\x07\\xf8\\xb0\\x05\\x74\\x0a\\x0b\\x85\\x1d\\x73\\xa0\\x64\\x7b\\x0b\\xa5\\xe2\\xb8\\xd1\\x1f\\xd5\\xba\\xc8\\xae\\xdc\"\n\"\\x1b\\xc1\\xb3\\x79\\x68\\xa0\\x1f\\x98\\x77\\x8f\\x78\\x64\\x1a\\x0b\\xf9\\x79\\x55\\x1d\\x0b\\x15\\xf7\\x1c\\xfb\\x26\\xa3\\xf7\\x06\\x39\\xe4\\xf7\\x0c\\xe4\"\n\"\\xa4\\xf7\\x09\\xfb\\x5b\\xfb\\x29\\x05\\x0b\\x06\\xc5\\xf7\\xa5\\x34\\x0a\\xd1\\xf7\\xdf\\x05\\x0b\\xf7\\x1c\\xf7\\xe7\\x15\\x71\\xfb\\x0f\\x05\\xf7\\x10\\x06\"\n\"\\xa5\\xf7\\x0f\\x05\\x0e\\xfa\\x3c\\x4d\\x1d\\x0e\\xeb\\x1d\\x0e\\x3c\\x1d\\x0e\\x4a\\x0a\\x2a\\x0a\\x0b\\x16\\xf7\\x2a\\x06\\xf7\\x14\\xf8\\xf0\\x05\\x0b\\x23\"\n\"\\x1d\\xfb\\x14\\xfc\\xee\\x05\\x6b\\x84\\x7d\\x7f\\x6d\\x1b\\x0b\\x06\\xc5\\xf7\\xa5\\x05\\xfb\\x29\\x06\\x0b\\x06\\xb2\\xfb\\x83\\x05\\x0b\\xf7\\x49\\xc3\\x15\"\n\"\\x57\\xba\\xd5\\x70\\xe8\\x1b\\xf7\\x10\\xf5\\xbc\\xec\\xdd\\x1f\\xd9\\xe7\\xba\\xf7\\x10\\xf7\\x05\\x1a\\xc5\\x80\\xbd\\x74\\xba\\x1e\\xf7\\x00\\xec\\x61\\xb8\"\n\"\\x26\\x31\\x05\\xc2\\x59\\x43\\xa6\\x2d\\x1b\\xfb\\x11\\x22\\x5a\\x2a\\x38\\x1f\\x3d\\x2f\\x5c\\xfb\\x11\\xfb\\x07\\x1a\\x4f\\x97\\x56\\xa3\\x5f\\x1e\\xfb\\x03\"\n\"\\x28\\xb4\\x5d\\x05\\xf8\\xef\\xf8\\xaf\\x15\\x8f\\x76\\x8c\\x79\\x75\\x1a\\x39\\x70\\x35\\x5e\\x4d\\x1e\\x46\\x59\\x4b\\x68\\x3f\\x1b\\x54\\x60\\x9d\\xad\\x6e\"\n\"\\x1f\\x6d\\xc3\\x15\\x87\\xa2\\x89\\xa0\\xa2\\x1a\\xdb\\xa7\\xe2\\xb7\\xc9\\x1e\\xcf\\xbc\\xcc\\xaf\\xd8\\x1b\\xc3\\xb6\\x79\\x65\\xa9\\x1f\\x0b\\xf9\\x61\\xf8\"\n\"\\x8f\\x15\\x94\\x1d\\x23\\x30\\x57\\xac\\xc4\\x90\\x8c\\x94\\x8c\\x94\\x1e\\xfb\\x26\\x06\\x88\\x77\\x8a\\x81\\x7d\\x1a\\x56\\x9f\\x5d\\xaf\\x6a\\x1e\\x5f\\xbb\"\n\"\\xcf\\x76\\xec\\x1b\\xf7\\x0e\\xe8\\xae\\xce\\xc5\\x1f\\xb5\\xba\\xa6\\xd4\\xcd\\x98\\x0a\\xe0\\xba\\xb3\\x0a\\x0b\\xf8\\x9f\\x29\\x0a\\x79\\x38\\x05\\xca\\x70\"\n\"\\x62\\xa8\\x50\\x1b\\x3f\\x40\\x65\\x49\\x56\\x1f\\x51\\x43\\x66\\xfb\\x01\\x2a\\x1a\\xfb\\x02\\xd5\\x3b\\xf0\\x7f\\x1d\\x0b\\xf8\\xdc\\xf8\\x02\\x63\\x0a\\x0b\"\n\"\\xf7\\x11\\x15\\x6e\\xa0\\x7f\\x96\\x7c\\x9a\\x08\\x6d\\xaa\\x7c\\xb8\\xc3\\x1a\\xf7\\x49\\xf7\\x01\\xf7\\x1c\\xf7\\x24\\xed\\xcc\\x4c\\x2c\\x3b\\x6a\\x2b\\x5a\"\n\"\\x4d\\x1e\\x6d\\x65\\x72\\x77\\x3f\\x61\\x71\\xc7\\x0a\\xfb\\x38\\x06\\xca\\xac\\xad\\xa4\\xad\\xb1\\x08\\xc0\\xc6\\xac\\xe6\\xdf\\x1a\\xd5\\x6c\\xd5\\x57\\xbf\"\n\"\\x1e\\xc4\\x51\\x3d\\xa9\\x2d\\x1b\\x21\\x26\\x63\\x43\\x3f\\x1f\\x40\\x43\\x5b\\xfb\\x03\\x23\\x1a\\x33\\xb0\\x43\\xd6\\x51\\x1e\\xfb\\x41\\x24\\x1d\\xf7\\xcc\"\n\"\\x06\\x0b\\x5e\\x1d\\x3b\\x4a\\x77\\x64\\x5f\\x1e\\x5f\\x65\\x70\\x53\\x58\\x9c\\x1d\\x85\\x82\\x1a\\x5d\\x8f\\x1d\\x0b\\x89\\x1d\\x92\\x1a\\xf7\\x14\\xfb\\x01\"\n\"\\xe0\\xfb\\x37\\xfb\\x10\\xfb\\x01\\x59\\x2c\\x3a\\xa2\\x1d\\x0b\\xf8\\xd1\\xf7\\x76\\x15\\x8c\\x0a\\xfb\\x09\\x26\\x1a\\xfb\\x0f\\xe0\\x37\\xf7\\x12\\xf7\\x0d\"\n\"\\xf0\\xca\\xf7\\x04\\xc2\\x1e\\xfb\\x1e\\x06\\x65\\x77\\x5f\\x72\\x5b\\x1b\\x52\\x65\\xaf\\xc3\\x95\\x8c\\x95\\x8d\\xa4\\x1f\\x9d\\xe8\\x8f\\x0a\\x0b\\xf8\\x6b\"\n\"\\x15\\x8c\\x90\\x8e\\x8b\\x90\\x1b\\xc0\\xa2\\x7c\\x69\\x62\\x6a\\x6a\\x63\\x66\\x78\\x9b\\xaa\\x91\\x8b\\x8f\\x8d\\x93\\x1f\\x30\\x06\\x88\\x7b\\x8a\\x82\\x80\"\n\"\\x1a\\x47\\xbb\\x64\\xde\\xf7\\x01\\xd6\\xd0\\xee\\xab\\x7d\\xa2\\x6e\\x9d\\x1e\\xba\\xa8\\xa3\\xb1\\xb9\\x1a\\xc6\\x5c\\xad\\x3a\\x27\\x57\\x5e\\x25\\x77\\x1e\"\n\"\\xe2\\x06\\xc3\\x97\\x9c\\x9e\\xb2\\x1b\\xa6\\x9d\\x7b\\x73\\x76\\x82\\x78\\x7c\\x7e\\x1f\\x7b\\x7d\\x7a\\x87\\x63\\x8a\\x08\\x0b\\xf9\\x79\\x15\\xfb\\x10\\x26\"\n\"\\x5b\\x28\\x39\\x1f\\x3d\\x2f\\x39\\x1d\\x20\\xf4\\xfb\\x4b\\xaf\\x0a\\x4e\\x1f\\x45\\x59\\x4c\\x69\\x3e\\x1b\\x26\\x4c\\x2f\\x1d\\x0b\\x70\\xbb\\x55\\xaf\\x1e\"\n\"\\xb6\\x9e\\x9f\\x98\\xa0\\xa5\\x08\\xa8\\xac\\x9c\\xb9\\xb7\\x1a\\xf2\\x33\\xcf\\xfb\\x18\\x41\\x4e\\x78\\x67\\x5e\\x1e\\x5b\\x65\\x72\\x5c\\x7a\\x3d\\x86\\x72\"\n\"\\x18\\x23\\x0a\\x90\\xa4\\x05\\xc3\\x97\\xb5\\xad\\xc3\\x1b\\xba\\xaa\\x72\\x65\\x4d\\x56\\x5a\\x49\\x1f\\x5e\\x24\\x1d\\xc2\\x06\\xbf\\xae\\x6e\\x5f\\x3d\\x54\"\n\"\\x51\\x42\\x56\\x6a\\xa9\\xbd\\x9c\\x8d\\x97\\x90\\xa7\\x1f\\x0b\\x8a\\x1d\\x29\\x5a\\xc1\\xf5\\xdd\\x51\\x0a\\x0b\\x15\\xc1\\xd1\\x1d\\x96\\xaf\\x1d\\x52\\x96\"\n\"\\x1d\\x0b\\xb8\\x75\\xae\\x5f\\xa6\\x1e\\xc9\\xa5\\xb2\\xc1\\xc7\\x1a\\xdb\\x44\\xbe\\xfb\\x03\\x3c\\x4f\\x75\\x5e\\x5f\\x1e\\x70\\x6f\\x81\\x74\\x80\\x4d\\x08\"\n\"\\x21\\x0a\\xba\\x93\\xa5\\xa2\\xb7\\x1b\\xac\\xa1\\x79\\x70\\x5c\\x68\\x6f\\x50\\x1f\\x6f\\x06\\x77\\x2c\\x05\\xa7\\x06\\xb0\\x92\\x8a\\x82\\x98\\x1f\\x98\\x83\"\n\"\\x92\\x7c\\x79\\x1a\\x5c\\x64\\x64\\x5c\\x67\\x73\\xa2\\xad\\x94\\x8c\\x92\\x8e\\x9e\\x1e\\x0b\\xf8\\x64\\xf7\\x2c\\x15\\x6b\\xfb\\x2c\\x05\\xf8\\xac\\x21\\x1d\"\n\"\\xfc\\x16\\x06\\xb3\\xf7\\x51\\x05\\xf7\\xe7\\x25\\x1d\\xfb\\xe7\\x06\\xaf\\xf7\\x39\\x05\\xf8\\x03\\x25\\x1d\\xfd\\x3f\\x06\\xfc\\x38\\xfd\\x6d\\x05\\xf7\\x33\"\n\"\\x06\\xe0\\xf7\\x2c\\x05\\xf7\\x8a\\xf7\\x11\\x15\\xfb\\x49\\x06\\xf7\\x4d\\xf7\\xdb\\x05\\xcd\\x06\\x0b\\xfb\\x64\\x84\\x1d\\x0e\\xf7\\xad\\xf7\\x98\\x15\\xf7\"\n\"\\x4f\\x06\\xda\\xc5\\xba\\x1d\\x48\\x1b\\xfb\\xc8\\x35\\x0a\\xdd\\xf8\\x15\\x15\\xb9\\xf7\\x6f\\x05\\xf7\\x2e\\x06\\xc1\\xaf\\x6b\\x5c\\x6d\\x80\\x65\\xc3\\x0a\"\n\"\\xf8\\x32\\xf8\\xa5\\x15\\x85\\x0a\\x53\\xb3\\x6d\\xd4\\xac\\xa3\\x8e\\x93\\xa7\\x1e\\x9f\\xbe\\x0a\\x8f\\x8d\\x98\\x8f\\x9c\\x1f\\xc9\\xf7\\xba\\x05\\xd9\\x06\"\n\"\\x0b\\xf8\\x7f\\x22\\x1d\\xfb\\x07\\xfc\\xaf\\x05\\x54\\x80\\x68\\x6d\\x56\\x1b\\x64\\x70\\xa1\\xab\\x95\\x8c\\x97\\x8e\\x97\\x1f\\x9b\\xd8\\x28\\x0a\\x7c\\x43\"\n\"\\x05\\x86\\x75\\x89\\x75\\x76\\x1a\\x2a\\xd2\\x50\\xf7\\x09\\xce\\xd0\\x9d\\xa7\\xb6\\x1e\\xbc\\xab\\xae\\xc5\\x9b\\xd8\\xf7\\x07\\xf8\\xaf\\x18\\x0b\\x16\\xf7\"\n\"\\xc0\\x06\\xe7\\xc0\\x99\\xb2\\xbc\\xd0\\x1d\\xfb\\x26\\x06\\xc6\\xf7\\xa9\\x05\\x2a\\x0a\\xa1\\xfc\\xf0\\x15\\xb6\\xf7\\x5e\\x05\\xf7\\x2d\\x06\\xa8\\x98\\xc0\"\n\"\\x0a\\x5b\\x51\\x4f\\x1e\\x0b\\xf8\\x91\\xb0\\x0a\\xd7\\xfc\\xb0\\x8c\\x7c\\x05\\x52\\x5f\\x67\\x46\\x7f\\x86\\x8b\\x8d\\x80\\x1e\\x74\\xfb\\x01\\x05\\x88\\x98\"\n\"\\x95\\x8a\\xa1\\x1b\\xb7\\xb1\\x91\\x96\\xa8\\x1f\\xb7\\xec\\x1d\\x0b\\xd8\\x16\\xf7\\xb1\\x06\\xf7\\x25\\xdf\\xb2\\xf0\\xd4\\x1f\\xd3\\xed\\xb3\\xf7\\x0f\\xf7\"\n\"\\x0a\\x1a\\xf7\\x43\\x3d\\xd6\\xfb\\x49\\x1e\\xfb\\xb1\\x06\\xa1\\xfc\\xf0\\x15\\xf0\\xf8\\x73\\x05\\xf7\\x1b\\x06\\xe7\\xb8\\x5f\\x30\\x3c\\x71\\x24\\x69\\x50\"\n\"\\x1f\\x40\\x60\\x5a\\x6f\\x34\\x1b\\x0b\\x64\\x1d\\x95\\x90\\xa3\\x1f\\xd1\\xb5\\x1d\\xc1\\xa6\\xcb\\xc1\\x1e\\x7c\\x47\\x05\\x0b\\xf8\\x85\\x16\\xf7\\xa1\\xf8\"\n\"\\xff\\xfb\\x18\\xfc\\xff\\x05\\xf7\\x22\\x4a\\x0a\\xfb\\x6f\\x06\\xfb\\x92\\xfc\\xc4\\x77\\xf8\\xc4\\x05\\xfb\\x6d\\x28\\x1d\\xf7\\x22\\x06\\xf7\\x18\\xf8\\xff\"\n\"\\x92\\xfc\\xff\\x05\\x0e\\x16\\xf7\\xaf\\x06\\xc5\\xc0\\x9b\\xa6\\xae\\x1f\\xbb\\xb2\\xa9\\xc6\\xc4\\x1a\\xda\\x48\\xca\\x36\\x1e\\xfb\\x23\\x06\\xb6\\xf7\\x5c\"\n\"\\x22\\x0a\\xbc\\xfc\\x3f\\x15\\xa3\\xf7\\x06\\x05\\xf7\\x1c\\x06\\xa4\\x9b\\x7b\\x71\\x64\\x6d\\x6a\\x68\\x1f\\x0b\\x97\\x0a\\x05\\x79\\x41\\x46\\x80\\x5c\\x1b\"\n\"\\x46\\x63\\xa6\\xb8\\x93\\x8c\\x90\\x8c\\x92\\x1f\\xa4\\x1d\\x7a\\x1a\\x24\\xe7\\x4c\\x0b\\xf8\\x87\\xf8\\x08\\x15\\xf7\\xc3\\xf7\\xf9\\x05\\xfb\\x43\\x06\\xfb\"\n\"\\x4b\\xfb\\x80\\x3c\\xf7\\x80\\x05\\xfb\\x46\\x06\\xf7\\x25\\xfb\\xfe\\xfb\\xca\\xfc\\x03\\x05\\xf7\\x43\\x06\\xf7\\x51\\xf7\\x8d\\xe5\\xfb\\x8d\\x05\\xf7\\x47\"\n\"\\x06\\x0e\\x7a\\x0a\\x0e\\xf7\\xa6\\xf7\\x7e\\x15\\xe6\\xdb\\xf7\\x41\\xfb\\xce\\x05\\xf7\\x47\\x06\\xfb\\x7f\\xf8\\x2e\\xf7\\xfd\\xf7\\xd3\\x05\\xfb\\x46\\x06\"\n\"\\xfb\\xf6\\xfb\\xd4\\xcf\\xf7\\xd4\\x34\\x0a\\x0b\\xf7\\xf6\\xf9\\x6d\\x23\\x1d\\xfb\\x2f\\xfd\\x6d\\x9a\\x1d\\x0b\\x05\\xa8\\x91\\x99\\x99\\xa5\\x1b\\x95\\x92\"\n\"\\x8a\\x88\\xa4\\x1f\\xa1\\xf4\\x05\\x8e\\x5c\\x81\\x8b\\x77\\x1b\\x29\\x56\\x61\\x2e\\x77\\x1f\\x7d\\x4a\\x05\\x3f\\x33\\x1d\\xd8\\x06\\x2e\\xfc\\x48\\x05\\x0b\"\n\"\\xf8\\x2d\\xf8\\xb9\\x15\\x2b\\x36\\x65\\x49\\x54\\x1f\\x55\\x4a\\x69\\x29\\x32\\x1a\\xfb\\x1b\\xe1\\x3a\\xf7\\x22\\xec\\xdf\\xb0\\xce\\xc2\\x1e\\xc0\\xcc\\xae\"\n\"\\xee\\xe3\\x1a\\xf7\\x1b\\x35\\xdc\\xfb\\x22\\x1e\\x0b\\x15\\xfb\\x1f\\xfb\\x27\\x05\\xd7\\x06\\xf2\\xec\\xc8\\x2a\\x05\\xd9\\x06\\x0b\\xfb\\xdf\\x32\\x1d\\x2a\"\n\"\\x0a\\x51\\xfb\\xa5\\x05\\xfb\\xb5\\x06\\xc5\\xf7\\xa5\\x34\\x0a\\x0b\\x22\\x0a\\x31\\xfc\\x3f\\x05\\xfb\\x41\\x94\\x0a\\xf9\\x6a\\x15\\x2a\\x0a\\x5e\\xfb\\x66\"\n\"\\x73\\xfb\\xc9\\x05\\xce\\x06\\xf6\\xf7\\xc9\\x05\\x3c\\xfc\\x06\\x27\\x1d\\x0b\\x15\\x60\\x7b\\x68\\x75\\x57\\xa7\\x1d\\x9d\\x1b\\x93\\x9e\\x85\\x82\\x9c\\x1f\"\n\"\\xbe\\x72\\x05\\x85\\x97\\xa1\\xdf\\x1d\\x95\\xa0\\x97\\xb3\\x08\\x0e\\x87\\x0a\\x0e\\xb8\\x0a\\x46\\x33\\x1d\\xd0\\x06\\x45\\xfb\\xe0\\x05\\x88\\x7d\\x89\\x7d\"\n\"\\x7e\\x1a\\x0b\\x15\\x70\\xfb\\x11\\x05\\xdc\\x06\\x82\\x59\\x6b\\x6e\\x51\\x81\\x81\\x5d\\x18\\x0b\\xf8\\xb0\\xa5\\x1d\\x0b\\x70\\xa0\\xaf\\x8c\\x8b\\x8e\\x8c\"\n\"\\x8f\\x1f\\x60\\x06\\x86\\xab\\x0a\\xda\\xd0\\xc8\\xdd\\x98\\x1e\\x0e\\xf8\\x69\\x15\\xa6\\xf7\\x11\\x05\\x3a\\x06\\x94\\xbd\\xab\\xa8\\xc5\\x95\\x95\\xb9\\x18\"\n\"\\x32\\x84\\x4b\\x52\\x7d\\x34\\x74\\xfb\\x01\\x18\\x0b\\xf9\\x89\\x90\\x0a\\x07\\x93\\x79\\x7a\\x8e\\x79\\x1b\\x4a\\x52\\x55\\x4e\\x65\\xa6\\x74\\xb7\\xba\\xb9\"\n\"\\xa3\\xb3\\xa7\\x1f\\xa0\\xa8\\x93\\xa9\\xbc\\x1a\\x0b\\x69\\x1d\\xba\\x6f\\xaf\\x1e\\xb8\\x67\\x51\\xa3\\x42\\xc6\\x0a\\x0b\\x15\\x74\\xfb\\x04\\x05\\xcd\\x06\"\n\"\\x85\\x5f\\x69\\xa5\\x0a\\x81\\x80\\x90\\x7d\\x1b\\x71\\x75\\x75\\x70\\x6c\\xa7\\x73\\xae\\xb7\\xaa\\xaa\\xc5\\x99\\x1f\\x9b\\xcb\\x90\\xd4\\xf7\\x41\\x1a\\x0b\"\n\"\\x15\\x94\\xab\\x93\\x9e\\x98\\x9b\\x08\\xab\\xa3\\xb2\\x9e\\xb3\\x6d\\x1d\\x8b\\x66\\x1a\\x0b\\x49\\x0a\\xd1\\x06\\xf7\\xee\\xf7\\x27\\x49\\x0a\\xd1\\x06\\x0e\"\n\"\\x15\\xfb\\x4b\\x06\\xb2\\xf7\\x49\\x05\\xfb\\x0b\\x06\\x64\\xfb\\x49\\x05\\xfb\\x4a\\x31\\x1d\\xf7\\x4a\\x06\\x0b\\xf8\\x32\\xf8\\xa5\\x15\\xb8\\x0a\\x45\\x06\"\n\"\\x78\\x2e\\x05\\xd0\\x06\\x0b\\x06\\xcb\\xfb\\xdf\\x20\\x0a\\x40\\xf8\\x1c\\xb7\\x0a\\x0b\\x06\\xe6\\xf8\\x3f\\xbb\\x1d\\xc7\\x64\\xb2\\x38\\xa4\\x1f\\x2b\\xa7\"\n\"\\x05\\x58\\x9a\\x7d\\x95\\x9f\\x1a\\xab\\xae\\xa0\\xc0\\xc2\\xac\\x78\\x0b\\x05\\xfb\\x2a\\x6a\\x1d\\xfb\\x9d\\x58\\x0a\\x59\\x0a\\x41\\xfb\\xf4\\x0b\\x1a\\xd8\"\n\"\\x54\\xbf\\x25\\x9f\\x1e\\xfb\\x01\\xa1\\x05\\x2d\\x9e\\x70\\x9b\\xb1\\x1a\\xcb\\xc3\\xb3\\xe6\\x0b\\xf9\\x89\\x7e\\x0a\\x43\\xf7\\x27\\x05\\x0b\\x15\\xf7\\x20\"\n\"\\xf7\\x27\\x05\\x3e\\x06\\x24\\x2a\\x4f\\xec\\x05\\x3d\\x06\\xd2\\xfb\\x27\\x05\\x0e\\x20\\x1d\\xc7\\xf7\\xae\\x05\\x4f\\xa0\\xb5\\x70\\xd1\\x1b\\xf7\\x35\\xf7\"\n\"\\x18\\xf7\\x39\\x0b\\xfb\\x46\\x1f\\x7b\\x43\\x15\\xf7\\x21\\xf1\\x24\\xfb\\x21\\xfb\\x57\\xfb\\x4b\\xfb\\x4a\\xfb\\x59\\x0b\\xbe\\x1d\\x0e\\x06\\xa9\\x98\\xc0\"\n\"\\x0a\\x5a\\x51\\x50\\x1e\\x0e\\x15\\xfb\\x20\\x24\\x1d\\x21\\x0a\\x0b\\x06\\xc5\\xbf\\xc9\\x1d\\x0b\\x15\\x70\\x74\\x74\\x71\\x6f\\xa2\\x74\\xa6\\xa6\\xa2\\xa2\"\n\"\\xa6\\xa6\\x74\\xa2\\x70\\x1f\\x0b\\xce\\x95\\xd9\\xa0\\xeb\\x18\\x0e\\xe1\\x1d\\xc3\\x06\\xd0\\xf7\\x15\\x05\\x0b\\xfb\\x83\\x05\\xf7\\x1e\\x06\\x5b\\xf7\\xc1\"\n\"\\xf7\\x22\\xf7\\x83\\x05\\xfb\\x28\\x06\\x0b\\x66\\x5e\\x68\\x1d\\x96\\xd9\\x9f\\xeb\\x18\\x0e\\xf8\\x07\\xf7\\xea\\x15\\xfb\\xa4\\x06\\x6e\\xfb\\x1b\\x05\\xf7\"\n\"\\xa4\\x06\\x0e\\x15\\xf0\\xfb\\x2a\\x05\\xca\\x06\\x0b\\x3c\\x0a\\x5e\\x68\\x67\\x5f\\x83\\x81\\x5d\\x18\\x0b\\xcb\\x16\\x21\\x0a\\xbb\\xf7\\x77\\x05\\xf7\\x58\"\n\"\\x06\\x5a\\xfb\\x77\\x05\\x0b\\xfa\\xc2\\xf7\\xcb\\x15\\xfe\\x87\\x06\\x75\\x23\\x05\\xfa\\x87\\x06\\x0e\\x7a\\x8a\\x81\\x7e\\x1a\\x4d\\xb5\\x62\\xcb\\x0b\\xf7\"\n\"\\xb7\\xc9\\xfb\\xac\\x06\\x38\\x68\\x84\\x72\\x66\\x1f\\x4a\\x60\\x69\\x0b\\x29\\x0a\\x2c\\x1d\\xbe\\xf7\\x83\\x05\\x0b\\xf7\\x22\\xb5\\x0a\\x0b\\x1e\\x78\\x3d\"\n\"\\x1d\\x0b\\xf8\\xb0\\x15\\xfb\\x57\\xfc\\x1d\\x67\\xf8\\x1d\\x05\\xfb\\x2e\\x06\\x0b\\xfb\\x79\\xfb\\x73\\xfb\\x83\\xfb\\x43\\xf7\\x15\\xfb\\x14\\xf7\\x45\\x0b\"\n\"\\x5d\\x18\\xd6\\x91\\xcf\\xce\\x95\\xd9\\x0b\\x6e\\x55\\x86\\x8a\\x82\\x8a\\x82\\x1e\\x0b\\x06\\x3b\\xfc\\x0f\\x86\\x72\\x75\\x76\\x73\\x89\\x19\\x5a\\x06\\x0b\"\n\"\\x15\\xfc\\xd9\\xfd\\x73\\x05\\xe0\\x06\\xf8\\xd9\\xf9\\x73\\x05\\x0b\\x95\\xa3\\x97\\x8e\\x9d\\x1b\\xa5\\x9d\\x7e\\x77\\x72\\x6d\\x78\\x0b\\xf7\\x4e\\xf7\\xe5\"\n\"\\x05\\xfb\\x33\\x06\\xfb\\x29\\xfb\\xa5\\x05\\x0b\\x3d\\x06\\xaa\\xf7\\x25\\x22\\x0a\\x6c\\xfb\\x25\\x05\\x0b\\xf7\\x06\\x05\\xf7\\x1c\\x06\\xa3\\x9b\\x7b\\x71\"\n\"\\x64\\x6d\\x6a\\x0b\\xfb\\x22\\x7e\\xb9\\x80\\xa5\\x7a\\x9f\\x19\\xb0\\x6c\\x5b\\xa1\\x0b\\xa7\\x0a\\x5f\\xf7\\x2a\\x05\\x0e\\x05\\x95\\xa3\\x97\\x8e\\x9c\\x1b\"\n\"\\xa5\\x9d\\x7e\\x77\\x72\\x0b\\xf8\\xd5\\xf7\\xdf\\x15\\x45\\xfb\\xdf\\x20\\x0a\\x0b\\xed\\x05\\x89\\x7d\\x83\\x8a\\x80\\x1b\\x73\\x7d\\x94\\x9b\\x0b\\xa6\\xf7\"\n\"\\x11\\x05\\xfc\\x1f\\x06\\x0b\\x87\\x7d\\x97\\x1f\\x96\\x7d\\x91\\x79\\x74\\x1a\\x44\\x0b\\xf9\\x35\\x15\\x41\\x06\\x55\\xfb\\x94\\x05\\xc4\\x06\\x0b\\xda\\x69\"\n\"\\x1e\\x7d\\xad\\xa6\\x87\\xd0\\x1b\\xf7\\xac\\x0b\\x7d\\x76\\x1f\\x68\\x72\\x69\\x7b\\x56\\x1b\\x0e\\x15\\xfb\\xc0\\x06\\x7a\\x3b\\x05\\xf7\\xc0\\x06\\x0b\\x15\"\n\"\\xfc\\x79\\x06\\x75\\x27\\x05\\xf8\\x79\\x06\\x0b\\x1b\\x3d\\x3b\\x6c\\x5a\\x5c\\x1f\\x4b\\x48\\x5d\\x0b\\xfb\\x11\\x18\\xf7\\xcc\\x06\\xa6\\xf7\\x11\\x05\\x0b\", 39424\n};\n"
  },
  {
    "path": "src/fonts/NimbusSans-Italic.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusSans_Italic_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x12\\x4e\\x69\\x6d\\x62\\x75\\x73\\x53\\x61\\x6e\\x73\\x2d\\x49\\x74\\x61\\x6c\\x69\\x63\\x00\\x01\\x01\\x01\\x34\\xf9\"\n\"\\xbc\\x00\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xc0\\x03\\xf8\\x18\\x04\\x7f\\x0c\\x02\\xfb\\x2b\\x0c\\x03\\xfb\\x0f\\xfb\\xb0\\x1c\\x04\\x82\"\n\"\\xfa\\xc2\\x05\\x1c\\x26\\x00\\x0f\\x1c\\x26\\x13\\x11\\xb0\\x1d\\x00\\x00\\x8d\\xa6\\x12\\x01\\xa6\\x02\\x00\\x01\\x00\\x08\\x00\\x0e\\x00\\x13\\x00\\x1d\\x00\"\n\"\\x24\\x00\\x2b\\x00\\x35\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x74\\x00\\x7a\\x00\\x84\\x00\\x8b\\x00\"\n\"\\x8e\\x00\\x95\\x00\\x9c\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\\x00\\xcd\\x00\\xd9\\x00\\xe3\\x00\\xe7\\x00\\xf2\\x00\\xf4\\x00\\xfa\\x01\"\n\"\\x04\\x01\\x0b\\x01\\x12\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\\x01\\x4d\\x01\\x53\\x01\\x59\\x01\\x5f\\x01\\x6b\\x01\\x6f\\x01\\x71\\x01\"\n\"\\x77\\x01\\x7d\\x01\\x89\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\\x01\\xc2\\x01\\xcd\\x01\\xd0\\x01\\xd2\\x01\\xd5\\x01\\xdb\\x01\\xe1\\x01\"\n\"\\xed\\x01\\xf0\\x01\\xf6\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\\x02\\x27\\x02\\x33\\x02\\x38\\x02\\x3e\\x02\\x4b\\x02\\x52\\x02\\x59\\x02\"\n\"\\x60\\x02\\x6f\\x02\\x7b\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\\x02\\xa8\\x02\\xb3\\x02\\xb9\\x02\\xbf\\x02\\xc9\\x02\\xcd\\x02\\xd3\\x02\"\n\"\\xda\\x02\\xe3\\x02\\xec\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\\x03\\x2b\\x03\\x34\\x03\\x3d\\x03\\x46\\x03\\x4f\\x03\\x58\\x03\\x61\\x03\"\n\"\\x6a\\x03\\x73\\x03\\x7c\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\\x03\\xbb\\x03\\xc4\\x03\\xcd\\x03\\xd6\\x03\\xdf\\x03\\xe8\\x03\\xf1\\x03\"\n\"\\xfa\\x04\\x03\\x04\\x0c\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\\x04\\x4b\\x04\\x54\\x04\\x5d\\x04\\x66\\x04\\x6f\\x04\\x78\\x04\\x81\\x04\"\n\"\\x8a\\x04\\x93\\x04\\x9c\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\\xed\\x04\\xf6\\x04\\xff\\x05\\x08\\x05\\x11\\x05\"\n\"\\x1a\\x05\\x23\\x05\\x2c\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\\x05\\x6b\\x05\\x74\\x05\\x7d\\x05\\x86\\x05\\x8f\\x05\\x98\\x05\\xa1\\x05\"\n\"\\xaa\\x05\\xb3\\x05\\xbc\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\\x05\\xfb\\x06\\x04\\x06\\x0d\\x06\\x16\\x06\\x1f\\x06\\x28\\x06\\x31\\x06\"\n\"\\x3a\\x06\\x43\\x06\\x4c\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\\x06\\x85\\x06\\x90\\x06\\x9a\\x06\\xa3\\x06\\xac\\x06\\xb5\\x06\\xbf\\x06\"\n\"\\xc6\\x06\\xcf\\x06\\xdb\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\\x07\\x11\\x07\\x15\\x07\\x1b\\x07\\x21\\x07\\x26\\x07\\x2d\\x07\\x3a\\x07\"\n\"\\x40\\x07\\x46\\x07\\x50\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\\x07\\x86\\x07\\x8f\\x07\\x92\\x07\\x9a\\x07\\xa3\\x07\\xae\\x07\\xb4\\x07\"\n\"\\xb9\\x07\\xbe\\x07\\xc4\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\\x08\\x05\\x08\\x0a\\x08\\x10\\x08\\x12\\x08\\x19\\x08\\x21\\x08\\x29\\x08\"\n\"\\x33\\x08\\x3d\\x08\\x49\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\\x08\\x8c\\x08\\x97\\x08\\x9c\\x08\\xa8\\x08\\xb4\\x08\\xba\\x08\\xc0\\x08\"\n\"\\xc6\\x08\\xd2\\x08\\xd6\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\\x09\\x0b\\x09\\x11\\x09\\x1c\\x09\\x22\\x09\\x2e\\x09\\x38\\x09\\x40\\x09\"\n\"\\x42\\x09\\x48\\x09\\x55\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\\x09\\x93\\x09\\x9e\\x09\\xa4\\x09\\xa7\\x09\\xa9\\x09\\xb0\\x09\\xbc\\x09\"\n\"\\xca\\x09\\xcd\\x09\\xda\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\\x0a\\x0f\\x0a\\x17\\x0a\\x22\\x0a\\x2e\\x0a\\x34\\x0a\\x39\\x0a\\x42\\x0a\"\n\"\\x47\\x0a\\x50\\x0a\\x53\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\\x0a\\x7c\\x0a\\x89\\x0a\\x90\\x0a\\x9d\\x0a\\xa4\\x0a\\xab\\x0a\\xb2\\x0a\"\n\"\\xb9\\x0a\\xc0\\x0a\\xc7\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\\x0a\\xf8\\x0a\\xff\\x0b\\x06\\x0b\\x0d\\x0b\\x14\\x0b\\x1b\\x0b\\x22\\x0b\"\n\"\\x29\\x0b\\x30\\x0b\\x37\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\\x0b\\x68\\x0b\\x6f\\x0b\\x76\\x0b\\x7d\\x0b\\x84\\x0b\\x8b\\x0b\\x92\\x0b\"\n\"\\x99\\x0b\\xa0\\x0b\\xa7\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\\x0b\\xd8\\x0b\\xdf\\x0b\\xe6\\x0b\\xed\\x0b\\xf4\\x0b\\xfb\\x0c\\x02\\x0c\"\n\"\\x09\\x0c\\x10\\x0c\\x17\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\\x0c\\x48\\x0c\\x4d\\x0c\\x56\\x0c\\x5d\\x0c\\x64\\x0c\\x73\\x0c\\x87\\x0c\"\n\"\\x93\\x0c\\x98\\x0c\\x9e\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\\x0c\\xd1\\x0c\\xd7\\x0c\\xe1\\x0c\\xe5\\x0c\\xe9\\x0d\\x1f\\x0d\\x5f\\x0d\"\n\"\\x71\\x0d\\x7c\\x41\\x45\\x61\\x63\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\\x6c\\x70\\x68\\x61\\x41\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x41\"\n\"\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x41\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x42\\x65\\x74\\x61\\x43\\x61\\x63\\x75\\x74\"\n\"\\x65\\x43\\x63\\x61\\x72\\x6f\\x6e\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x43\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x43\\x68\\x69\\x44\"\n\"\\x63\\x61\\x72\\x6f\\x6e\\x44\\x63\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\\x62\\x72\\x65\\x76\\x65\\x45\\x63\\x61\\x72\\x6f\\x6e\\x45\\x64\\x6f\\x74\"\n\"\\x61\\x63\\x63\\x65\\x6e\\x74\\x45\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x45\\x70\"\n\"\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x75\\x72\\x6f\\x47\\x61\\x6d\\x6d\\x61\\x47\\x62\"\n\"\\x72\\x65\\x76\\x65\\x47\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x47\\x64\\x6f\\x74\\x61\"\n\"\\x63\\x63\\x65\\x6e\\x74\\x48\\x62\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x49\\x4a\\x49\\x62\\x72\\x65\\x76\\x65\\x49\\x64\\x6f\\x74\"\n\"\\x61\\x63\\x63\\x65\\x6e\\x74\\x49\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x49\\x6f\\x74\\x61\\x49\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\"\n\"\\x65\\x73\\x69\\x73\\x49\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\\x64\\x65\\x4a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x4b\\x61\"\n\"\\x70\\x70\\x61\\x4b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\\x63\\x75\\x74\\x65\\x4c\\x61\\x6d\\x62\\x64\\x61\\x4c\\x63\\x61\\x72\\x6f\"\n\"\\x6e\\x4c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\\x4d\\x75\\x4e\\x61\\x63\\x75\\x74\\x65\\x4e\\x63\\x61\\x72\\x6f\\x6e\\x4e\"\n\"\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\\x76\\x65\\x4f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\"\n\"\\x4f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\"\n\"\\x6f\\x6e\\x6f\\x73\\x4f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\\x69\\x50\\x69\\x50\\x73\\x69\\x52\\x61\\x63\\x75\\x74\\x65\\x52\\x63\\x61\"\n\"\\x72\\x6f\\x6e\\x52\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\\x6f\\x53\\x61\\x63\\x75\\x74\\x65\\x53\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\"\n\"\\x53\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x53\\x69\\x67\\x6d\\x61\\x54\\x61\\x75\\x54\"\n\"\\x62\\x61\\x72\\x54\\x63\\x61\\x72\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x54\\x68\\x65\\x74\\x61\\x55\\x62\\x72\\x65\\x76\\x65\"\n\"\\x55\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x55\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x55\\x70\\x73\\x69\\x6c\"\n\"\\x6f\\x6e\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x55\\x72\\x69\"\n\"\\x6e\\x67\\x55\\x74\\x69\\x6c\\x64\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x57\\x64\\x69\\x65\\x72\\x65\\x73\"\n\"\\x69\\x73\\x57\\x67\\x72\\x61\\x76\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x59\\x67\\x72\\x61\\x76\\x65\\x5a\\x61\\x63\\x75\\x74\"\n\"\\x65\\x5a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\\x72\\x65\\x76\\x65\\x61\\x65\\x61\\x63\\x75\\x74\\x65\\x61\\x66\\x69\\x69\"\n\"\\x30\\x30\\x32\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x39\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x32\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x32\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x36\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x39\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x33\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x33\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x33\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x33\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x30\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x34\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\"\n\"\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x37\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x34\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x31\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x34\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x35\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x38\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x31\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x36\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x37\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x36\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x37\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x34\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x37\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\"\n\"\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x31\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x38\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x35\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x38\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x38\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x32\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x35\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x39\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x39\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x31\\x30\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x31\"\n\"\\x30\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x36\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x31\\x30\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x31\"\n\"\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x38\\x34\\x36\\x61\\x66\\x69\\x69\"\n\"\\x36\\x31\\x32\\x34\\x38\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\\x69\\x36\\x31\\x33\\x35\\x32\\x61\\x6c\\x70\\x68\\x61\\x61\\x6c\\x70\\x68\"\n\"\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x61\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\\x61\\x6e\\x67\\x6c\\x65\\x72\\x69\\x67\\x68\\x74\"\n\"\\x61\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x61\\x72\\x72\\x6f\"\n\"\\x77\\x62\\x6f\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\\x77\\x72\\x69\\x67\\x68\"\n\"\\x74\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x62\\x73\\x65\\x62\\x65\\x74\"\n\"\\x61\\x63\\x61\\x63\\x75\\x74\\x65\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x63\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\"\n\"\\x6e\\x74\\x63\\x68\\x69\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\\x63\\x6c\\x75\\x62\\x64\\x63\\x61\\x72\\x6f\\x6e\\x64\\x63\\x72\"\n\"\\x6f\\x61\\x74\\x64\\x65\\x6c\\x74\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x62\\x72\\x65\"\n\"\\x76\\x65\\x65\\x63\\x61\\x72\\x6f\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x65\\x6d\\x61\\x63\\x72\\x6f\\x6e\"\n\"\\x65\\x6e\\x67\\x65\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x71\\x75\"\n\"\\x69\\x76\\x61\\x6c\\x65\\x6e\\x63\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\\x65\\x74\\x61\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x78\\x63\\x6c\"\n\"\\x61\\x6d\\x64\\x62\\x6c\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\\x65\\x6d\\x61\\x6c\\x65\\x66\\x72\\x61\\x6e\\x63\\x67\\x61\\x6d\\x6d\\x61\"\n\"\\x67\\x62\\x72\\x65\\x76\\x65\\x67\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x67\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x64\\x6f\"\n\"\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x68\\x62\\x61\\x72\\x68\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\"\n\"\\x65\\x78\\x68\\x65\\x61\\x72\\x74\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\\x65\\x69\\x6a\\x69\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x69\\x6e\\x66\\x69\\x6e\"\n\"\\x69\\x74\\x79\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x74\\x70\\x69\"\n\"\\x6e\\x74\\x65\\x72\\x73\\x65\\x63\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x69\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x69\\x6f\"\n\"\\x74\\x61\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x69\"\n\"\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x6b\\x61\\x70\\x70\\x61\\x6b\\x63\"\n\"\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\\x61\\x6e\\x64\\x69\\x63\\x6c\\x61\\x63\\x75\\x74\\x65\\x6c\\x61\\x6d\\x62\"\n\"\\x64\\x61\\x6c\\x63\\x61\\x72\\x6f\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6c\\x64\\x6f\\x74\\x6c\\x65\\x73\\x73\\x65\\x71\\x75\\x61\"\n\"\\x6c\\x6c\\x69\\x72\\x61\\x6c\\x6f\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x6d\"\n\"\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\\x74\\x65\\x6e\\x61\\x70\\x6f\\x73\\x74\\x72\\x6f\\x70\\x68\\x65\\x6e\\x63\"\n\"\\x61\\x72\\x6f\\x6e\\x6e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x71\\x75\"\n\"\\x61\\x6c\\x6e\\x75\\x6f\\x62\\x72\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x6f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x6f\\x6d\"\n\"\\x65\\x67\\x61\\x6f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\"\n\"\\x6f\\x72\\x74\\x68\\x6f\\x67\\x6f\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x70\\x61\\x72\\x74\\x69\\x61\\x6c\\x64\\x69\\x66\\x66\"\n\"\\x70\\x65\\x73\\x65\\x74\\x61\\x70\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x62\\x73\\x65\\x74\\x70\\x72\"\n\"\\x6f\\x70\\x65\\x72\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\\x6f\\x74\\x65\\x72\\x65\\x76\\x65\\x72\\x73\\x65\\x64\\x72\\x61\\x63\\x75\"\n\"\\x74\\x65\\x72\\x61\\x64\\x69\\x63\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x72\\x65\\x76\\x6c\\x6f\"\n\"\\x67\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\\x73\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x73\\x63\\x69\\x72\\x63\\x75\\x6d\"\n\"\\x66\\x6c\\x65\\x78\\x73\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\\x65\\x63\\x6f\\x6e\\x64\\x73\\x69\\x67\\x6d\\x61\\x73\\x6d\\x69\\x6c\\x65\"\n\"\\x66\\x61\\x63\\x65\\x73\\x70\\x61\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x73\\x75\\x6e\\x74\\x61\\x75\\x74\\x62\\x61\\x72\\x74\\x63\\x61\\x72\"\n\"\\x6f\\x6e\\x74\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x62\\x72\\x65\\x76\\x65\\x75\\x68\"\n\"\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x75\\x6e\\x64\\x65\\x72\\x73\\x63\\x6f\\x72\\x65\\x64\\x62\\x6c\\x75\"\n\"\\x6e\\x69\\x30\\x30\\x41\\x30\\x75\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\\x32\\x31\\x41\\x75\\x6e\\x69\\x30\\x32\\x31\\x42\\x75\\x6e\\x69\\x30\\x32\"\n\"\\x43\\x39\\x75\\x6e\\x69\\x30\\x33\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\\x6e\\x69\\x30\\x33\\x41\\x39\\x75\\x6e\\x69\\x30\\x33\\x42\\x43\\x75\\x6e\"\n\"\\x69\\x30\\x33\\x43\\x32\\x75\\x6e\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\\x30\\x44\\x75\\x6e\\x69\\x30\\x34\\x35\\x30\\x75\\x6e\\x69\\x30\\x34\\x35\"\n\"\\x44\\x75\\x6e\\x69\\x30\\x34\\x39\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\\x69\\x30\\x34\\x39\\x36\\x75\\x6e\\x69\\x30\\x34\\x39\\x37\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x39\\x38\\x75\\x6e\\x69\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\\x41\\x75\\x6e\\x69\\x30\\x34\\x39\\x42\\x75\\x6e\\x69\\x30\\x34\\x39\\x43\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x39\\x44\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\\x30\\x34\\x41\\x31\\x75\\x6e\\x69\\x30\\x34\\x41\\x32\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x41\\x33\\x75\\x6e\\x69\\x30\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\\x75\\x6e\\x69\\x30\\x34\\x41\\x45\\x75\\x6e\\x69\\x30\\x34\\x41\\x46\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x42\\x30\\x75\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\\x34\\x42\\x32\\x75\\x6e\\x69\\x30\\x34\\x42\\x33\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x42\\x36\\x75\\x6e\\x69\\x30\\x34\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\\x6e\\x69\\x30\\x34\\x42\\x39\\x75\\x6e\\x69\\x30\\x34\\x42\\x41\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x42\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\\x43\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x43\\x75\\x6e\\x69\\x30\\x34\\x44\"\n\"\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\\x69\\x30\\x34\\x45\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x39\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x45\\x45\\x75\\x6e\\x69\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\\x45\\x75\\x6e\\x69\\x32\\x30\\x41\\x46\\x75\\x6e\\x69\\x32\\x31\\x32\\x36\"\n\"\\x75\\x6e\\x69\\x32\\x32\\x31\\x35\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\\x32\\x32\\x32\\x37\\x75\\x6e\\x69\\x32\\x32\\x32\\x38\\x75\\x6e\\x69\\x32\"\n\"\\x32\\x39\\x35\\x75\\x6e\\x69\\x32\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x75\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x75\"\n\"\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\"\n\"\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x72\\x69\\x6e\\x67\\x75\\x74\\x69\\x6c\\x64\\x65\"\n\"\\x77\\x61\\x63\\x75\\x74\\x65\\x77\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x77\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x77\\x67\\x72\\x61\\x76\\x65\"\n\"\\x78\\x69\\x79\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\\x76\\x65\\x7a\\x61\\x63\\x75\\x74\\x65\\x7a\\x64\\x6f\\x74\\x61\\x63\\x63\"\n\"\\x65\\x6e\\x74\\x7a\\x65\\x74\\x61\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\"\n\"\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\"\n\"\\x74\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\"\n\"\\x34\\x20\\x62\\x79\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\"\n\"\\x74\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x53\\x61\\x6e\\x73\\x20\\x49\\x74\\x61\\x6c\\x69\\x63\\x4e\\x69\\x6d\\x62\\x75\\x73\\x20\\x53\\x61\\x6e\\x73\\x00\\xc8\"\n\"\\x02\\x00\\x01\\x00\\x06\\x00\\x0a\\x00\\x0e\\x00\\x11\\x00\\x14\\x00\\x19\\x00\\x20\\x00\\x25\\x00\\x3e\\x00\\x48\\x00\\x54\\x00\\x62\\x00\\x70\\x00\\x75\\x00\"\n\"\\x7c\\x00\\xa0\\x00\\xb4\\x00\\xb9\\x00\\xbf\\x00\\xc5\\x00\\xca\\x00\\xe3\\x00\\xee\\x00\\xf3\\x00\\xf9\\x01\\x1d\\x01\\x4a\\x01\\x82\\x01\\xc2\\x01\\xd9\\x01\"\n\"\\xe8\\x01\\xf9\\x02\\x04\\x02\\x0c\\x02\\x13\\x02\\x1a\\x02\\x5f\\x02\\x77\\x02\\x99\\x02\\x9d\\x02\\xb7\\x02\\xc7\\x02\\xdb\\x02\\xe9\\x03\\x07\\x03\\x23\\x03\"\n\"\\x2e\\x03\\x39\\x03\\x3f\\x03\\x4e\\x03\\x5b\\x03\\x63\\x03\\xa0\\x03\\xdd\\x03\\xfd\\x04\\x28\\x04\\x61\\x04\\x6d\\x04\\x94\\x04\\xa7\\x04\\xc1\\x04\\xca\\x04\"\n\"\\xd1\\x04\\xe0\\x04\\xe5\\x04\\xea\\x05\\x03\\x05\\x30\\x05\\x35\\x05\\x49\\x05\\x5b\\x05\\x63\\x05\\x72\\x05\\x8a\\x05\\x97\\x05\\xa2\\x05\\xb7\\x05\\xc3\\x05\"\n\"\\xd7\\x05\\xde\\x05\\xe3\\x05\\xea\\x05\\xf4\\x05\\xfb\\x06\\x04\\x06\\x0b\\x06\\x13\\x06\\x1f\\x06\\x2b\\x06\\x36\\x06\\x41\\x07\\x06\\x07\\x46\\x07\\x4d\\x07\"\n\"\\x72\\x07\\xb6\\x08\\x35\\x08\\xb1\\x09\\x29\\x09\\x6c\\x09\\xd0\\x0a\\x34\\x0a\\x70\\x0a\\xbb\\x0a\\xea\\x0b\\x3b\\x0b\\x40\\x0b\\x83\\x0b\\xc3\\x0c\\x04\\x0c\"\n\"\\x3c\\x0c\\x69\\x0c\\x87\\x0c\\xc3\\x0c\\xfe\\x0d\\x22\\x0d\\x3c\\x0d\\x65\\x0d\\x77\\x0d\\xa4\\x0d\\xc6\\x0d\\xf2\\x0e\\x1d\\x0e\\x3c\\x0e\\x5c\\x0e\\x6d\\x0e\"\n\"\\x94\\x0e\\xba\\x0e\\xde\\x0f\\x00\\x0f\\x07\\x0f\\x29\\x0f\\x3c\\x0f\\x5e\\x0f\\x77\\x0f\\x8b\\x0f\\xa8\\x0f\\xb2\\x0f\\xba\\x0f\\xd1\\x0f\\xd7\\x0f\\xf3\\x10\"\n\"\\x0d\\x10\\x18\\x10\\x31\\x10\\x36\\x10\\x4a\\x10\\x62\\x10\\x7a\\x10\\x91\\x10\\xa0\\x10\\xb3\\x10\\xc9\\x10\\xde\\x10\\xed\\x10\\xf6\\x11\\x0a\\x11\\x1e\\x11\"\n\"\\x30\\x11\\x43\\x11\\x56\\x11\\x69\\x11\\x76\\x11\\x87\\x11\\x8e\\x11\\x9e\\x11\\xaf\\x11\\xc0\\x11\\xcd\\x11\\xde\\x11\\xeb\\x11\\xf8\\x12\\x05\\x12\\x15\\x12\"\n\"\\x25\\x12\\x33\\x12\\x42\\x12\\x51\\x12\\x5e\\x12\\x6c\\x12\\x7a\\x12\\x88\\x12\\x96\\x12\\x9e\\x12\\xaa\\x12\\xb7\\x12\\xc2\\x12\\xc5\\x12\\xd1\\x12\\xdd\\x12\"\n\"\\xe9\\x12\\xf5\\x13\\x01\\x13\\x0c\\x13\\x17\\x13\\x22\\x13\\x2d\\x13\\x38\\x13\\x43\\x13\\x4e\\x06\\x9c\\xdd\\x05\\x0b\\x05\\x37\\x06\\x0b\\xf9\\x6d\\x15\\x0b\"\n\"\\x2c\\x1d\\x0e\\x4b\\x1d\\x0e\\x06\\xeb\\xf8\\x56\\x0b\\x06\\xfb\\x2f\\xfd\\x6d\\x05\\x0b\\x06\\x7c\\x43\\x05\\x0b\\xf8\\xa0\\xf7\\x6f\\x15\\xa6\\xfb\\x6f\\x05\"\n\"\\xf1\\x06\\xd9\\x1d\\xee\\x06\\xf7\\x0f\\xf7\\x6f\\x05\\xf7\\xa7\\xe7\\x1d\\x0b\\xf7\\xf1\\x22\\x1d\\x2d\\x26\\x1d\\xe9\\x06\\x0b\\x15\\xf7\\x14\\xf7\\x28\\x05\"\n\"\\x4b\\x06\\x23\\x79\\x1d\\x0e\\x15\\x78\\x30\\x8f\\x23\\x05\\xa9\\x06\\xbb\\xf3\\x9e\\xe6\\x05\\x0e\\x15\\xfb\\x14\\xfb\\x28\\x05\\xc7\\x06\\xf7\\x48\\xf7\\x28\"\n\"\\x05\\x0b\\x06\\x9b\\xd5\\x05\\x0b\\x06\\xf7\\x1e\\xf9\\x1b\\x05\\x0b\\xf8\\x54\\xf7\\xb2\\x15\\xf8\\x04\\xf8\\x4f\\x05\\xfb\\x03\\x06\\xfb\\xb5\\xfb\\xf9\\xfb\"\n\"\\x1c\\xf7\\xf9\\x05\\xfb\\x04\\x06\\xf7\\x4e\\xfc\\x4f\\x4e\\xfb\\xb2\\x05\\xe9\\x06\\x0b\\x15\\x23\\x06\\x75\\x24\\x05\\xf2\\x06\\xf7\\x4c\\xf2\\x15\\x23\\x06\"\n\"\\x75\\x24\\x05\\xf2\\x06\\x0b\\xb5\\xcc\\xa0\\x1f\\x0e\\xfb\\x3a\\x05\\xe9\\x06\\x0b\\x1f\\x6f\\x65\\x05\\x71\\x0b\\x2b\\xfc\\x56\\x05\\x0b\\x15\\x76\\x29\\x05\"\n\"\\xc2\\x06\\x50\\x80\\x73\\x6e\\x64\\x1b\\x83\\x65\\x05\\xca\\xbb\\xbc\\xdd\\x9d\\x1f\\x9e\\xe8\\x05\\x0e\\x15\\xfb\\xa6\\x06\\x7c\\x46\\x05\\xf7\\xa6\\x06\\x0e\"\n\"\\xf9\\x6d\\xe4\\x1d\\x0b\\xf7\\x03\\xf8\\xa0\\x05\\x0b\\xf7\\x49\\xf8\\xa0\\x15\\xfb\\x03\\xfc\\xa0\\x05\\x78\\x1d\\xe5\\x1b\\xbd\\xb0\\x68\\x5d\\x85\\x89\\x7d\"\n\"\\x87\\x7a\\x1f\\x41\\xfb\\xf1\\x05\\xdf\\x06\\xdb\\xf8\\x0c\\x6c\\x1d\\x0b\\xf8\\xc0\\x16\\xf7\\x9c\\xf8\\xa0\\x05\\x30\\x06\\xfb\\x58\\xfc\\x2c\\x80\\xf8\\x2c\"\n\"\\x05\\x22\\x06\\xfb\\x51\\xfc\\x2c\\x78\\xf8\\x2c\\x05\\x30\\x06\\xb3\\xfc\\xa0\\x05\\xeb\\x06\\xf7\\x57\\xf8\\x36\\x97\\xfc\\x36\\x05\\x0b\\x15\\x35\\x06\\x9a\"\n\"\\xd0\\x05\\xbe\\x96\\x9c\\x9b\\xb7\\x1b\\x92\\x92\\x8b\\x89\\x98\\x1f\\x9a\\xd0\\x05\\x8f\\x79\\x80\\x8c\\x7b\\x1b\\x3e\\x53\\x5e\\x41\\x7b\\x1f\\x78\\x32\\x05\"\n\"\\x45\\x06\\x7d\\x48\\x05\\xd1\\x06\\x2a\\xfc\\x5d\\x05\\xdf\\x06\\xec\\xf8\\x5d\\x05\\xe1\\x06\\x0b\\x44\\x4e\\x76\\x64\\x62\\x1e\\x66\\x68\\x74\\x57\\x5c\\x1a\"\n\"\\x4e\\xae\\x6e\\xf2\\x70\\x1e\\xd5\\x78\\xac\\x82\\x9a\\x85\\x94\\x80\\x19\\x92\\x82\\x91\\x7c\\x82\\x1a\\x78\\x7c\\x6d\\x7a\\x7e\\x1e\\x76\\x72\\x60\\x7e\\x60\"\n\"\\x1b\\x45\\x65\\xa6\\xbd\\x91\\x8c\\x94\\x8c\\x95\\x1f\\x32\\x06\\x86\\x74\\x8a\\x7f\\x7b\\x1a\\x0b\\x15\\x89\\x82\\x87\\x8b\\x87\\x1b\\x71\\x7f\\x94\\x9f\\x8e\"\n\"\\x8b\\x8f\\x8c\\x8e\\x1f\\xcb\\xf7\\xc1\\x05\\x91\\x0b\\xf7\\xdd\\x22\\x1d\\x2d\\x26\\x1d\\xf8\\x5a\\x20\\x1d\\xfb\\xfc\\x06\\x0b\\x8d\\x9a\\x8e\\x9a\\x1f\\xf7\"\n\"\\x01\\xf8\\x94\\x05\\x2d\\x06\\x25\\xfc\\x72\\x05\\x0b\\x15\\x87\\x79\\x8a\\x83\\x81\\x1a\\x50\\xbf\\x63\\x0b\\x06\\xb5\\xf7\\x5d\\x05\\x37\\x06\\x0b\\x96\\x89\"\n\"\\x87\\x95\\x1f\\x75\\x0b\\x98\\x93\\x8c\\xb7\\x9a\\x08\\x0b\\xf7\\x46\\xf8\\xa0\\x15\\x42\\xfb\\xe7\\x05\\x84\\x6a\\x87\\x6c\\x7c\\x1a\\x3e\\xd8\\x57\\xf7\\x05\"\n\"\\xd1\\xc4\\x9e\\xb1\\xb5\\x1e\\xb1\\xad\\x97\\xa5\\x9e\\xe6\\xd4\\xf7\\xe7\\x18\\x37\\x06\\x42\\xfb\\xe7\\x80\\x54\\x7b\\x6f\\x6d\\x76\\x19\\x7a\\x71\\x68\\x81\"\n\"\\x67\\x1b\\x4c\\x63\\xa8\\xb9\\x94\\x8e\\xa2\\x90\\xa3\\x1f\\xd4\\xf7\\xe7\\x05\\x0b\\x9b\\x51\\x1b\\x7e\\x3e\\x15\\xd5\\xb6\\x5b\\x3a\\x50\\x7b\\x4a\\x6f\\x59\"\n\"\\x1f\\x46\\x65\\x55\\x67\\x46\\x66\\x1d\\x0b\\xf8\\xc1\\xf8\\xa0\\x15\\xfc\\x1c\\x27\\x1d\\xf7\\xba\\x06\\xfc\\x1f\\xfc\\x0e\\x79\\x41\\x05\\xf8\\x3f\\x06\\x9a\"\n\"\\xd3\\x05\\xfb\\xda\\x06\\xf8\\x1c\\xf8\\x0d\\x05\\x0b\\x15\\x69\\x1d\\x0b\\xf8\\x81\\xf9\\x1b\\x15\\xf7\\x82\\x20\\x1d\\xfc\\xd1\\x06\\x7a\\x39\\x05\\xf7\\x85\"\n\"\\x06\\xfb\\x1e\\xfd\\x1b\\x05\\xe9\\x06\\x0b\\xfb\\x01\\xfc\\x94\\x05\\x28\\x76\\x3a\\x4f\\xfb\\x06\\x1b\\x2a\\x4b\\xb9\\x0b\\x15\\x23\\x06\\x75\\x24\\x05\\xf3\"\n\"\\x06\\xf7\\x4b\\xf2\\x15\\x23\\x06\\x75\\x24\\x05\\xf3\\x06\\x0b\\xbb\\x1d\\xf3\\xee\\xc3\\x28\\x05\\xca\\x06\\x4b\\xf7\\x2a\\x05\\x0b\\xfb\\x20\\x37\\x50\\xfb\"\n\"\\x03\\x78\\x1e\\xdf\\x06\\x94\\xa7\\x92\\x99\\x99\\x99\\x08\\xa2\\xa1\\xb5\\x99\\xb6\\x1b\\xc8\\xb8\\x70\\x66\\x86\\x8a\\x0b\\x1f\\x88\\x79\\x82\\x62\\x78\\x80\"\n\"\\x42\\x84\\x19\\xfb\\x1a\\x7f\\x61\\x81\\x5a\\x6c\\x08\\x57\\x6a\\x6d\\x56\\x51\\x1a\\x3b\\xc1\\x5b\\x0b\\xf8\\xa0\\x15\\xfb\\x03\\xfc\\xa0\\x05\\xdf\\x06\\x0b\"\n\"\\x06\\xdd\\xb3\\x6c\\x4b\\x31\\x3e\\x44\\x28\\x1f\\x0b\\x9d\\x1f\\x9f\\xe8\\x05\\x0e\\xa2\\xb6\\xac\\x9e\\xac\\xa9\\x9d\\x1f\\xa4\\x9a\\xa7\\x93\\xbc\\x92\\x0b\"\n\"\\x1f\\xfb\\x00\\xf7\\x46\\x15\\x4d\\x7e\\x33\\x56\\x33\\x1b\\x0b\\x15\\xfb\\xa7\\x06\\x7c\\x46\\x05\\x0b\\x3d\\x1d\\xa6\\x8b\\x8b\\x95\\x1a\\xcf\\x46\\xb8\\x22\"\n\"\\x4c\\x1d\\x85\\x8a\\x83\\x4d\\x1d\\xe5\\xaf\\xb3\\x92\\x98\\xb0\\x1e\\xaa\\x96\\x9a\\x95\\xb5\\xaf\\x08\\x84\\x07\\x87\\x07\\x61\\xa7\\x73\\xbb\\x97\\x8e\\x8b\"\n\"\\x91\\xa3\\x1e\\x8d\\x91\\x8d\\x8c\\x91\\x52\\x1d\\x52\\x6b\\x51\\x1d\\xea\\x43\\x1d\\x0e\\xf7\\x92\\xf7\\xce\\x15\\xf7\\x83\\x06\\xcd\\xae\\x71\\x5a\\x79\\x88\"\n\"\\x76\\x86\\x76\\x1f\\x73\\x27\\x8b\\x8b\\x6c\\x1a\\x7b\\x8c\\x80\\x8e\\x76\\x1e\\xf7\\x05\\x06\\x90\\xa2\\x05\\x7e\\x97\\x83\\x9e\\xa1\\x1a\\x95\\x8d\\x9d\\x8f\"\n\"\\xa1\\x1e\\x9f\\xf7\\x02\\x8c\\x93\\x8c\\x1d\\x6d\\x61\\x7a\\x4b\\x1b\\x0b\\xf8\\xc7\\xf7\\x7e\\x15\\x99\\xd6\\x8e\\xa5\\xab\\x1a\\xed\\x5f\\x1d\\xdf\\xa1\\x8c\"\n\"\\x95\\x8f\\x9a\\x1f\\x9d\\xd3\\x77\\x1d\\x81\\x8a\\x84\\x89\\x7b\\x1f\\x0b\\xf9\\x56\\x22\\x1d\\x49\\x1d\\xd0\\x99\\x3f\\x1d\\x84\\x68\\x84\\x5e\\x7b\\x1a\\x62\"\n\"\\xa2\\x59\\xab\\x6e\\x1e\\x66\\xb4\\xcd\\x76\\xd8\\x1b\\xf7\\x3c\\xf7\\x15\\xe9\\xf7\\x26\\xaa\\x1f\\xf7\\x01\\xf8\\x94\\x05\\x0b\\xf8\\x77\\x16\\x38\\x1d\\x37\"\n\"\\x06\\x4c\\xfb\\xbd\\x05\\xfb\\x00\\x74\\x45\\x45\\x35\\x1b\\x54\\x69\\xa8\\xbb\\x93\\x8c\\x94\\x8d\\x95\\x1f\\xda\\xf8\\x07\\x21\\x1d\\x35\\xfc\\x28\\x05\\x89\"\n\"\\x81\\x8a\\x80\\x7e\\x1a\\x47\\xbf\\x62\\xe1\\xd9\\xc4\\xa3\\xc3\\xc5\\x1e\\x7f\\x52\\x05\\x0b\\xa6\\x1d\\x5a\\x6a\\x9f\\xa9\\x1f\\x90\\x07\\x93\\x07\\x0e\\x6a\"\n\"\\xa8\\x1e\\xaf\\x62\\x56\\x9b\\x3d\\x1b\\x24\\x3a\\x6e\\x53\\x55\\x1f\\x62\\x61\\x6c\\x44\\x58\\x1a\\x4c\\xb7\\x56\\xce\\x78\\x1e\\xf7\\x3f\\x5b\\x05\\xdc\\x74\"\n\"\\xab\\x6f\\x5a\\x1a\\x6c\\x0b\\xd6\\x16\\xe9\\x06\\x9d\\xde\\xf8\\x68\\xf8\\x42\\xfb\\x01\\xfc\\x95\\x05\\xe8\\xb8\\x1d\\x0b\\xef\\x8c\\x19\\x90\\x06\\x95\\x06\"\n\"\\x9d\\xe0\\x05\\x8d\\x7e\\x83\\x8c\\x80\\x1b\\x51\\x5f\\x71\\x44\\x4c\\x1f\\x9c\\xdd\\x05\\x0b\\x18\\x60\\x1d\\x92\\xa1\\x62\\x33\\x1d\\x0b\\xe5\\x1d\\x64\\x1b\"\n\"\\x83\\xd7\\x1d\\xad\\x1d\\xc4\\x1b\\xf7\\x0c\\xf2\\xd5\\xf7\\x00\\xaa\\x1f\\xdf\\x1d\\x0b\\xb6\\x1d\\x6e\\x73\\x0b\\xf9\\x79\\x63\\x1d\\x0b\\x79\\xb3\\x71\\xa6\"\n\"\\x1e\\xab\\x6c\\x62\\x9a\\x52\\x1b\\x31\\x3a\\x65\\x46\\x56\\x1f\\x5c\\x4e\\x69\\xfb\\x01\\x2f\\x1a\\x0b\\x15\\xfb\\x05\\x2a\\x61\\x36\\x3a\\x1f\\x32\\x2f\\x56\"\n\"\\xfb\\x17\\xfb\\x14\\x1a\\x34\\xa6\\x3f\\xb9\\x5d\\x1e\\x5b\\xbb\\xdc\\x6e\\xe0\\x1b\\xe9\\xe0\\xa6\\xbd\\xcc\\x1f\\xf7\\x09\\xe5\\xd7\\xf7\\x36\\xf7\\x32\\x1a\"\n\"\\xda\\x0b\\xfa\\x40\\x4b\\x1d\\x0e\\x15\\x23\\x06\\x75\\x24\\x05\\xf3\\x06\\xf7\\x4c\\xf2\\x15\\x23\\x06\\x75\\x24\\x05\\xf3\\x06\\x0e\\x1b\\x44\\x5f\\xbc\\xdc\"\n\"\\xc5\\x9c\\xcc\\xa6\\xbd\\x1f\\xcf\\xaf\\xc4\\xb0\\xcd\\x1b\\x0b\\xf7\\x48\\x4e\\x1d\\xc5\\xf7\\xa4\\x0b\\x98\\x8c\\x94\\x8e\\x9e\\x1f\\x34\\x06\\x84\\x71\\x89\"\n\"\\x7b\\x76\\x1a\\x0b\\x75\\x24\\x05\\xbb\\x06\\x81\\x52\\x76\\x6f\\x67\\x86\\x83\\x65\\x18\\xc8\\x8f\\xb7\\xbb\\x9c\\xda\\xa0\\xef\\x18\\x0b\\xfb\\x14\\xfb\\x2a\"\n\"\\x05\\xc7\\x06\\xf7\\x48\\xf7\\x2a\\x05\\x0b\\x15\\xfc\\xeb\\x06\\x80\\x59\\x05\\xf8\\xeb\\x06\\x0e\\x05\\x8e\\x98\\x8c\\x97\\x98\\x1a\\xd7\\x56\\xbc\\x38\\x3f\"\n\"\\x49\\x70\\x56\\x57\\x1e\\x98\\xcc\\x05\\x0b\\x8b\\x90\\x1b\\x9c\\x99\\x81\\x7f\\x6b\\x71\\x74\\x66\\x0b\\x06\\xdb\\xc7\\x9f\\xb5\\xbb\\x1f\\xc0\\xba\\xab\\xd3\"\n\"\\xd3\\x1a\\xf5\\x46\\xc8\\xfb\\x0d\\x1e\\x0b\\xd0\\x1d\\x6d\\xa7\\x61\\x1f\\x0b\\x15\\x20\\x74\\x1d\\x0b\\xf7\\x82\\x05\\x25\\x75\\x1d\\x0b\\x08\\xc0\\x06\\xa8\"\n\"\\xa0\\x91\\x8f\\xa2\\x1b\\x0b\\xdf\\x06\\x38\\x1d\\x37\\x06\\x0b\\x06\\xf7\\x11\\xfb\\x28\\x05\\xc0\\x06\\x0b\\x06\\xfb\\x28\\xfb\\x5d\\x05\\x0b\\xdf\\x06\\xf7\"\n\"\\x04\\xf8\\xa0\\x05\\x0b\\x15\\xe7\\xa5\\xd5\\xcb\\xdc\\x1b\\xd2\\xb8\\x5b\\x40\\x0b\\xdf\\x06\\xc8\\xf7\\xb5\\x05\\xf7\\x02\\xa3\\xd1\\xcf\\x0b\\x29\\x53\\xed\"\n\"\\x05\\x4c\\x06\\xcb\\xfb\\x28\\x05\\x0b\\x71\\x71\\x6f\\x77\\x7c\\x99\\xa0\\xa5\\xa6\\xa5\\x0b\\xf7\\x75\\xf8\\x05\\x15\\xcd\\xa0\\xb4\\xa6\\xda\\x1b\\xcc\\xb2\"\n\"\\x76\\x67\\x85\\x8a\\x85\\x8a\\x84\\x1f\\x86\\x72\\x81\\x60\\x79\\x80\\x43\\x84\\x19\\xfb\\x15\\x80\\x60\\x81\\x59\\x6d\\x08\\x58\\x6b\\x6c\\x55\\x51\\x1a\\x3c\"\n\"\\xc2\\x5a\\xe2\\xe2\\xe2\\xb0\\xcc\\xce\\x1e\\x45\\xb2\\xc2\\x6b\\xdb\\x1b\\xf7\\x0d\\xf1\\xd4\\xf7\\x01\\xab\\x1f\\x37\\x06\\x46\\x67\\x56\\x67\\x49\\x1b\\x68\"\n\"\\x70\\x93\\x9c\\x77\\x1f\\x71\\xa1\\x7a\\xad\\xa7\\x1a\\x91\\x07\\x97\\x07\\xa4\\x8c\\x96\\x8f\\x9c\\x1e\\xf8\\x16\\x06\\x99\\xd8\\x8e\\xa5\\xac\\x1a\\xe8\\x36\"\n\"\\xd7\\x25\\x47\\x46\\x72\\x63\\x5e\\x1e\\x88\\x92\\x89\\x8d\\x78\\x9b\\x08\\xa9\\x67\\x68\\x95\\x4b\\x1b\\x38\\x46\\x75\\x64\\x62\\x1f\\x73\\x73\\x7e\\x70\\x7b\"\n\"\\x51\\x08\\xf7\\xac\\xfb\\x61\\x15\\x4f\\x7e\\x34\\x54\\x37\\x1b\\x50\\x6c\\xa2\\xb6\\xac\\x9e\\xab\\xa9\\x9e\\x1f\\xa3\\x9a\\xa6\\x93\\xbf\\x92\\xee\\x99\\x91\"\n\"\\x8c\\xb0\\x98\\x08\\xe4\\xbc\\x15\\xed\\xaa\\xcf\\xc5\\xdf\\x1b\\xd1\\xb7\\x5c\\x3f\\x80\\x8a\\x84\\x89\\x7c\\x1f\\x0b\\xf8\\xbc\\xbe\\x3d\\x1d\\xa5\\x8b\\x8b\"\n\"\\x96\\x1a\\xcf\\x46\\xb8\\x22\\x4c\\x1d\\x85\\x8a\\x83\\x4d\\x1d\\xe5\\xaf\\xb3\\x92\\x98\\xb0\\x1e\\xaa\\x96\\x9a\\x95\\xb5\\xaf\\x08\\x84\\x07\\x87\\x07\\x61\"\n\"\\xa7\\x73\\xbb\\x97\\x8e\\x8b\\x91\\xa3\\x1e\\x8d\\x91\\x8d\\x8c\\x91\\x52\\x1d\\x52\\x6b\\x51\\x1d\\xea\\x43\\x1d\\x0b\\xf9\\x56\\xf8\\x97\\x7e\\x1d\\x0b\\x15\"\n\"\\x91\\xa7\\x8d\\x97\\x9b\\x1a\\xb6\\x76\\xb9\\x5a\\x1d\\x78\\x65\\x6f\\x71\\xe6\\x1d\\xb5\\xe6\\x68\\x1d\\xfb\\x0d\\xe5\\x44\\xf7\\x2b\\xf4\\xe3\\x92\\x1d\\x83\"\n\"\\x88\\x78\\x1e\\x0b\\xf8\\x96\\xf8\\x0e\\x15\\x90\\xa0\\x8c\\x94\\x98\\x1a\\xd1\\x49\\xbb\\x29\\x3c\\x1d\\x3b\\xd0\\x5b\\xf7\\x09\\xf7\\x29\\xec\\xd8\\xf7\\x0b\"\n\"\\xc8\\x6a\\xab\\x33\\xa1\\x1e\\x3f\\x9e\\x05\\x53\\x99\\x6e\\x9f\\xa5\\x1a\\x9f\\x97\\xa4\\x9d\\x9c\\x1e\\xa2\\xa3\\xa9\\x95\\xb7\\x1b\\xc6\\xac\\x75\\x63\\x1f\"\n\"\\x85\\x07\\x86\\x07\\x8a\\x80\\x05\\x0b\\xf8\\xa0\\x15\\x7a\\x3d\\x7c\\xac\\x81\\x99\\x75\\x9b\\x19\\x9e\\x71\\x6b\\x96\\x69\\x1b\\x3e\\x3d\\x65\\x4d\\x5a\\x1f\"\n\"\\x55\\x48\\x66\\xfb\\x03\\x2e\\x1a\\xfb\\x01\\xd2\\x3f\\xf1\\xca\\xc5\\xa6\\xc0\\xbe\\x1e\\x87\\x78\\x05\\xfb\\x1d\\x6e\\x56\\x56\\x20\\x1b\\x47\\x63\\xa6\\xb8\"\n\"\\x1f\\x91\\x07\\x93\\x37\\x07\\x89\\x73\\x8b\\x8a\\x85\\x1a\\x3e\\xd0\\x59\\xf7\\x00\\xdb\\xd1\\xa3\\xb6\\xb8\\x1e\\xbd\\xbb\\xa6\\xc8\\xa6\\xf7\\x13\\xe8\\xf8\"\n\"\\x4b\\x18\\xfb\\x82\\x4d\\x15\\xcb\\xb5\\x5b\\x41\\x4c\\x79\\x41\\x6f\\x5a\\x1f\\x4e\\x6a\\x50\\x65\\x4f\\x1b\\x48\\x61\\xbc\\xdb\\xc7\\x9b\\xcb\\xa8\\xbf\\x1f\"\n\"\\xcc\\xb0\\xc2\\xb0\\xcb\\x1b\\x0b\\xf9\\xad\\xf8\\x15\\x15\\xfb\\xc4\\x06\\x79\\x39\\x05\\xf7\\x72\\x06\\x85\\x71\\x7c\\x49\\x6e\\x5d\\x58\\x61\\x19\\x5f\\x55\"\n\"\\x51\\x76\\x46\\x1b\\x41\\x4b\\xa7\\xb9\\x6c\\x1f\\x73\\xae\\x7e\\xc0\\xc4\\x1a\\xe3\\xae\\xf2\\xc0\\xd1\\x1e\\xda\\xc8\\xe1\\xb6\\xec\\x1b\\xc8\\xbd\\x79\\x69\"\n\"\\xac\\x1f\\xa5\\x70\\x95\\x70\\x8c\\x5d\\x08\\xe6\\x92\\x06\\x8f\\x07\\x91\\x07\\xf7\\x19\\x2a\\xde\\xfb\\x31\\xfb\\x08\\x29\\x63\\x3d\\x3d\\x1e\\x2b\\x2b\\x51\"\n\"\\xfb\\x1c\\xfb\\x16\\x1a\\x2d\\xad\\x35\\xc3\\x5d\\x1e\\x66\\xb8\\xcd\\x76\\xcf\\x1b\\xcc\\xd0\\x9d\\xaa\\xc1\\x1f\\xa3\\x99\\x9e\\x99\\xb1\\xab\\x8f\\x31\\x18\"\n\"\\xc6\\x06\\x0b\\x9e\\x89\\x15\\xa5\\x6f\\xd9\\xd2\\x05\\x61\\xa9\\xc0\\x75\\xcf\\x1b\\xe7\\xd8\\xb3\\xd7\\xc2\\x1f\\xb9\\xcb\\xac\\xf7\\x00\\xe4\\x1a\\xa8\\x85\"\n\"\\xa4\\x7e\\xa8\\x1e\\xdc\\xd5\\x71\\xa9\\x3f\\x46\\x05\\xb8\\x6a\\x59\\xa1\\x44\\x1b\\x2f\\x3a\\x62\\x40\\x58\\x1f\\x5e\\x4a\\x6a\\xfb\\x01\\x36\\x1a\\x6c\\x91\"\n\"\\x70\\x9a\\x6b\\x1e\\xd4\\xce\\x15\\x86\\x9a\\x8a\\x92\\x9c\\x1a\\xc9\\x9b\\xcb\\xa7\\xbe\\x1e\\xcf\\xaf\\xc3\\xb0\\xcb\\x1b\\xb9\\xaf\\x79\\x69\\x9e\\x1f\\x99\"\n\"\\x63\\x15\\x8f\\x77\\x8c\\x80\\x80\\x1a\\x5b\\x78\\x3f\\x73\\x5e\\x1e\\x49\\x67\\x52\\x64\\x4b\\x1b\\x5f\\x67\\x9c\\xaa\\x78\\x1f\\x0b\\xf8\\xbc\\xbe\\x3d\\x1d\"\n\"\\xa6\\x8b\\x8b\\x95\\x1a\\xcf\\x46\\xb8\\x22\\xfb\\x20\\x37\\x50\\xfb\\x03\\x78\\x1e\\xdf\\x06\\x94\\xa7\\x92\\x99\\x99\\x99\\x08\\xa2\\xa1\\xb5\\x99\\xb6\\x1b\"\n\"\\xc7\\xb9\\x70\\x66\\x87\\x8a\\x84\\x8a\\x83\\x4d\\x1d\\xe4\\xb0\\xb3\\x92\\x98\\xb0\\x1e\\xaa\\x96\\x9b\\x95\\xb4\\xaf\\x08\\x84\\x07\\x87\\x07\\x0b\\xda\\x16\"\n\"\\xf7\\xde\\x06\\xdd\\xcb\\xa7\\xc6\\xbf\\x1f\\xb6\\xbb\\xa1\\xc5\\xcc\\x1a\\xc8\\x70\\xae\\x45\\xa9\\x1e\\xe3\\xb2\\xbb\\xd3\\xe5\\x1a\\xb1\\x80\\xa7\\x72\\xa6\"\n\"\\x1e\\xaf\\x69\\x61\\x9a\\x46\\x1b\\xfb\\xbc\\x06\\xa6\\xfb\\xce\\x15\\xbd\\xf7\\x7c\\x05\\xf7\\x48\\x06\\xe1\\xb1\\x70\\x50\\x66\\x7d\\x67\\x73\\x70\\x1f\\x6b\"\n\"\\x6d\\x64\\x7d\\x48\\x1b\\xfb\\x8f\\xfb\\xe1\\x15\\xc1\\xf7\\x8f\\x05\\xf7\\x76\\x06\\xd0\\xb0\\x6c\\x4f\\x64\\x80\\x69\\x74\\x6d\\x1f\\x63\\x6c\\x65\\x7a\\x53\"\n\"\\x1b\\x0e\\xf7\\xee\\xf7\\xc4\\x15\\x22\\x60\\x9f\\xbc\\xbc\\xc2\\xb3\\xce\\xb0\\xae\\x7d\\x75\\x9b\\x1f\\x95\\x7e\\x8f\\x7d\\x8d\\x6d\\x08\\xe0\\x06\\x8a\\xba\"\n\"\\x85\\xa4\\x78\\xa6\\x08\\xb8\\x6c\\x51\\xa5\\x45\\x1b\\xfb\\x09\\x2c\\x40\\x30\\x65\\x9c\\x6f\\xb6\\x6c\\x1f\\x39\\x75\\x5c\\x53\\x41\\x1a\\x33\\xd5\\x50\\xf7\"\n\"\\x03\\xd3\\xcd\\xa3\\xb7\\xbb\\x1e\\xb0\\xac\\x9e\\xac\\x9e\\xc4\\x08\\x2e\\x06\\x41\\x72\\x53\\x63\\x3c\\x1b\\x47\\x65\\xa7\\xbf\\xcd\\xca\\xae\\xf7\\x09\\x8e\"\n\"\\x94\\x8b\\x8a\\x95\\x1f\\x0b\\xf7\\x35\\xf7\\xe9\\x15\\x43\\xfb\\xe9\\x05\\xa3\\x1d\\x47\\xfb\\xd5\\x05\\x45\\x06\\x7e\\x48\\x05\\xf7\\x36\\x16\\xf7\\x3b\\x06\"\n\"\\x99\\xce\\x05\\xfb\\x3a\\x06\\xbe\\xf7\\x83\\x05\\xf7\\x3f\\x06\\xf6\\xcb\\x4d\\x22\\x2f\\x6b\\xfb\\x0c\\x63\\x4c\\x1f\\x3b\\x58\\x3e\\x60\\x30\\x1b\\xfb\\x40\"\n\"\\x06\\x0e\\xfc\\x79\\x15\\xc4\\xaa\\xa1\\xaa\\xbc\\x1a\\xc3\\x62\\xad\\x4a\\x36\\x46\\x4e\\x40\\x6f\\x94\\x7d\\xab\\x74\\x1e\\x4b\\x6e\\x69\\x5d\\x4f\\x1a\\x4b\"\n\"\\xb8\\x64\\xd3\\xe9\\xdb\\xd3\\xdf\\xaf\\x7a\\xa6\\x67\\x9e\\x1e\\x66\\xf7\\x2e\\x15\\xb2\\xa1\\x78\\x6b\\x5c\\x65\\x68\\x58\\x64\\x75\\x9e\\xab\\xb9\\xb2\\xaf\"\n\"\\xbd\\xd4\\x1d\\x60\\x6f\\xa4\\xb2\\xc5\\xbb\\xb9\\xc7\\x1f\\x0b\\x22\\x1d\\x37\\x06\\x4f\\xfb\\xad\\x9f\\x1d\\xfb\\x20\\xf8\\x62\\x15\\xd6\\xb6\\x59\\x36\\x4f\"\n\"\\x7b\\x4f\\x6d\\x57\\x1f\\x48\\x64\\x5a\\x69\\x4e\\x1b\\x41\\x60\\xbd\\xe1\\xc4\\x9b\\xca\\xa7\\xbe\\x1f\\xd0\\xb1\\xbb\\xab\\xcb\\x1b\\x0b\\xf8\\xc9\\xf7\\x7e\"\n\"\\x15\\x98\\xb8\\x90\\xa7\\xae\\x1a\\xf7\\x0d\\x40\\xd7\\xfb\\x0c\\x36\\x3e\\x65\\x47\\x53\\x1e\\x58\\x4b\\x6a\\x27\\x2d\\x1a\\xfb\\x0f\\xd7\\x40\\xf7\\x10\\xf7\"\n\"\\x0d\\xe5\\xcb\\xf7\\x0a\\xb8\\x1e\\x32\\x06\\x46\\x66\\x55\\x67\\x49\\x1b\\x42\\x59\\xbd\\xd4\\x9d\\x8d\\x98\\x90\\xa5\\x1f\\x9a\\xcf\\x15\\xed\\xa7\\xd2\\xc9\"\n\"\\xe0\\x1b\\xd1\\xb8\\x5c\\x42\\x7e\\x8a\\x82\\x87\\x79\\x1f\\x0b\\xb1\\x1d\\xcc\\x1d\\x0b\\x15\\xfb\\x8a\\xfb\\x79\\xfb\\x72\\xfb\\x83\\xfb\\x43\\xf7\\x15\\xfb\"\n\"\\x14\\xf7\\x45\\xf7\\x8a\\xf7\\x79\\xf7\\x72\\xf7\\x84\\xf7\\x43\\xfb\\x15\\xf7\\x13\\xfb\\x45\\x1f\\x7d\\x4d\\x15\\xf7\\x25\\xf4\\x21\\xfb\\x26\\xfb\\x5d\\xfb\"\n\"\\x51\\xfb\\x4f\\xfb\\x5e\\xfb\\x24\\x21\\xf6\\xf7\\x26\\xf7\\x5c\\xf7\\x51\\xf7\\x4f\\xf7\\x5e\\x1f\\x0e\\x9f\\x1a\\xb8\\x7e\\x9f\\x5c\\xaa\\x1e\\xb2\\xa1\\x9b\"\n\"\\x96\\x9d\\x9b\\x08\\xb3\\xb0\\xa6\\xce\\xc9\\x1a\\xf5\\x51\\xbb\\xfb\\x14\\x1e\\xfb\\xe4\\x26\\x1d\\xe9\\x06\\xdf\\xf8\\x20\\x15\\xc1\\xf7\\x8f\\x05\\xf7\\x7a\"\n\"\\x06\\xc0\\xa5\\x84\\x76\\x9e\\x1f\\x98\\x7d\\x93\\x74\\x73\\x1a\\x65\\x7d\\x60\\x75\\x6f\\x1e\\x67\\x0b\\x65\\xbe\\x4b\\x99\\x1e\\xb1\\x95\\x9f\\x96\\xa4\\xa4\"\n\"\\x08\\xb3\\xb2\\xa2\\xc1\\xc1\\x1a\\xf0\\x40\\xce\\xfb\\x05\\x34\\x3c\\x64\\x48\\x5c\\x1e\\x71\\x66\\x7c\\x65\\x81\\x50\\x08\\xec\\x06\\xf0\\x9c\\xc5\\xc4\\xe0\"\n\"\\x1b\\xcb\\xb0\\x6a\\x50\\x35\\x44\\x4a\\x2c\\x1f\\x6a\\x06\\x7a\\x3a\\x05\\xb3\\x06\\xe5\\xb3\\x6e\\x49\\x0b\\xf7\\x47\\x4e\\x1d\\xc8\\xf7\\xb5\\x05\\xf3\\xa2\"\n\"\\xda\\xd4\\xe7\\x1b\\xbc\\xa7\\x76\\x66\\x81\\x87\\x72\\x86\\x73\\x1f\\xfb\\x0c\\xfc\\xcb\\x05\\xdf\\x06\\xf7\\x0e\\xf8\\xd2\\x05\\x92\\xac\\x8f\\xa6\\x96\\x1a\"\n\"\\xcd\\x4e\\xb9\\x36\\x3a\\x52\\x6c\\x43\\x59\\x1e\\x9d\\xe3\\x05\\x0b\\x08\\x29\\x06\\x72\\x52\\x7b\\x6d\\x79\\x72\\x08\\x50\\x61\\x3f\\x66\\x3c\\x1b\\x23\\x46\"\n\"\\xdc\\xf7\\x0d\\xe7\\xa9\\xee\\xbe\\xd7\\x1f\\xe5\\xc8\\xd4\\xb6\\xe7\\x1b\\xf0\\xbd\\x5a\\xfb\\x00\\x93\\x1f\\xeb\\x06\\xb9\\x1d\\x0b\\xf9\\x63\\x15\\x6e\\x79\"\n\"\\x81\\x83\\x78\\xbc\\x1d\\x7f\\x7c\\x83\\x7a\\x80\\x68\\x72\\x1d\\x90\\x42\\x1d\\xcc\\x9c\\x87\\xa1\\x1b\\xb7\\xb6\\x31\\x1d\\xf8\\x85\\xf8\\xa0\\x15\\xfb\\x7b\"\n\"\\xfc\\x2c\\x5b\\xf8\\x2c\\x05\\x36\\x06\\xcd\\xfc\\xa0\\x59\\x36\\x05\\x61\\x73\\x78\\x7d\\x69\\x1b\\x7c\\x81\\x8d\\x94\\x78\\x1f\\x7b\\x3e\\x05\\x83\\xa2\\x98\"\n\"\\x88\\x9f\\x1b\\xa8\\xa9\\x94\\x9a\\xa3\\x1f\\xa6\\x9d\\x9c\\x9f\\xa6\\xb9\\xf8\\x05\\xf9\\x0e\\x18\\x0b\\xa8\\xc2\\xc6\\x1e\\xbf\\xba\\xae\\xd3\\xc4\\x1a\\xa6\"\n\"\\x83\\xa5\\x7b\\xa4\\x1e\\x75\\xae\\x6e\\x9f\\x5c\\x98\\xfb\\x40\\xbc\\x18\\x3e\\xa1\\x73\\x9f\\xb7\\x1a\\xaf\\x99\\xa9\\xa9\\xa6\\x1e\\xac\\xb0\\xbb\\x9b\\xce\"\n\"\\x1b\\xc3\\xb5\\x80\\x77\\xa1\\x1f\\x9e\\x7a\\x98\\x6b\\x6e\\x1a\\x82\\x8a\\x0b\\x62\\x1d\\x5b\\x9b\\x5b\\xa7\\x68\\x1e\\x60\\xad\\xb7\\x78\\xcc\\x1b\\xdd\\xd0\"\n\"\\xa8\\xc1\\xb9\\x1f\\xa5\\xa9\\x9b\\xad\\x9b\\xc3\\x08\\x37\\x06\\x39\\x6d\\x54\\x5f\\x43\\x1b\\x0b\\xf8\\x38\\x15\\xcd\\xf7\\xc9\\x05\\x2d\\x26\\x1d\\xf7\\xd3\"\n\"\\x6e\\x1d\\xfb\\x80\\x39\\x15\\xf7\\x66\\x4f\\x1d\\xfb\\x67\\x06\\x0b\\x06\\xf7\\x2f\\xf9\\x6d\\x05\\x2d\\x06\\x3c\\xfc\\x04\\x05\\x76\\x39\\x4f\\x82\\x50\\x1b\"\n\"\\x20\\x5f\\xa3\\xc4\\x92\\x8c\\x96\\x8d\\x94\\x1f\\xd5\\x1d\\x7f\\x80\\x1a\\x5d\\xa3\\x61\\xb3\\x72\\x1e\\x71\\x0b\\xa0\\x1d\\xbe\\x68\\xad\\x1e\\xac\\x69\\x5e\"\n\"\\x9b\\x51\\x1b\\x7e\\x3e\\x15\\xd5\\xb6\\x0b\\xf8\\x67\\x16\\xf7\\xe2\\xf8\\xf1\\xfb\\x15\\xfc\\xf1\\x05\\xe4\\x06\\xf7\\x2f\\xf9\\x6d\\x05\\xfb\\x17\\x06\\xfb\"\n\"\\xee\\xfd\\x07\\x3b\\xf9\\x07\\x05\\xfb\\x15\\x26\\x1d\\xe4\\x06\\xf7\\x15\\xf8\\xf1\\xd8\\xfc\\xf1\\x05\\x0e\\xf7\\xbd\\x37\\x1d\\xb6\\xf7\\x5f\\xf6\\xe3\\xf7\"\n\"\\x06\\xfb\\xb7\\x05\\xeb\\x06\\xfb\\x20\\xf7\\xeb\\xf7\\x72\\xf7\\x49\\x05\\xfb\\x00\\x06\\xfb\\xa1\\xfb\\x6e\\x05\\x0b\\xf7\\x24\\x16\\xe3\\x06\\xc4\\xb3\\xa5\"\n\"\\xcd\\xb7\\x1f\\xf8\\x30\\xf9\\x11\\x05\\xfb\\x06\\x06\\xfb\\xb2\\xfc\\x62\\x26\\xf8\\x62\\x05\\xfb\\x00\\x06\\xf7\\x22\\xfc\\xcd\\x69\\x51\\x72\\x78\\x61\\x8a\"\n\"\\x19\\x53\\x06\\x0b\\xf8\\x15\\xf8\\xaf\\x15\\x33\\x3a\\x63\\x43\\x56\\x1f\\x5c\\x4d\\x6c\\x25\\x2f\\x1a\\xfb\\x09\\xd8\\x3e\\xf7\\x09\\xe6\\xda\\xb2\\xd4\\xc1\"\n\"\\x1e\\xba\\xc9\\xaa\\xf0\\xe7\\x1a\\xf7\\x0b\\x3f\\xd7\\xfb\\x0c\\x1e\\x0b\\xf7\\x2e\\x15\\xb1\\xa2\\x78\\x6b\\x5c\\x64\\x68\\x58\\x65\\x74\\x9e\\xab\\xb9\\xb2\"\n\"\\xaf\\xbe\\xd4\\x1d\\x5f\\x6f\\xa4\\xb2\\xc5\\xbb\\xb9\\xc8\\x1f\\x0b\\xf7\\x8d\\xf7\\xe0\\x15\\xf8\\x21\\x20\\x1d\\xfc\\x21\\x06\\xbd\\xf7\\x7d\\x05\\xf8\\x30\"\n\"\\x20\\x1d\\xfc\\x8d\\x26\\x1d\\xf8\\x9f\\x20\\x1d\\xfc\\x42\\x06\\x0b\\xf7\\xd7\\x6f\\x1d\\x83\\x5f\\x15\\x9f\\x9a\\x7d\\x77\\x70\\x7a\\x1d\\xa6\\x1f\\x0b\\xe9\"\n\"\\x06\\xd4\\xf7\\xed\\x05\\xd7\\x06\\xf7\\x2c\\xfb\\xed\\x05\\xee\\x06\\xfb\\x3e\\xf8\\x14\\xf7\\xd4\\xf7\\xed\\x05\\xfb\\x2b\\x06\\xfb\\x88\\xfb\\xc2\\x05\\x4b\"\n\"\\x06\\xcb\\xf7\\xc2\\x05\\x0b\\x05\\xcc\\x6b\\x63\\xa5\\x44\\x1b\\xfb\\x3a\\xfb\\x10\\xfb\\x32\\xfb\\x67\\xfb\\x09\\xce\\x3f\\xf3\\xb7\\xb8\\x98\\xa4\\xb3\\x1f\"\n\"\\xa9\\x9d\\x98\\x9a\\x99\\xa7\\x7b\\x3f\\x18\\xdc\\x06\\x0b\\x15\\x2e\\x39\\x61\\x41\\x58\\x1f\\x5e\\x4b\\x6a\\xfb\\x02\\x36\\x1a\\xfb\\x03\\xd8\\x3f\\xf7\\x04\"\n\"\\xeb\\xd7\\xb2\\xd8\\xc3\\x1e\\xb9\\xca\\xac\\xf7\\x01\\xe2\\x1a\\xc0\\x77\\x0b\\x15\\xd6\\xb7\\x58\\x34\\x54\\x7a\\x4b\\x70\\x59\\x1f\\x47\\x66\\x59\\x6a\\x4a\"\n\"\\x1b\\x41\\x5e\\xbd\\xdb\\xc7\\x9c\\xcc\\xa9\\xbf\\x1f\\xce\\xb0\\xbd\\xad\\xc9\\x1b\\x0e\\xab\\x1d\\xf8\\x9f\\x20\\x1d\\x0b\\xf7\\xae\\x06\\xf7\\x00\\xe6\\xb8\"\n\"\\xe4\\xd4\\x1f\\xcf\\xdf\\xbb\\xf7\\x25\\xf7\\x11\\x1a\\xd4\\x6d\\xd5\\x5c\\xb5\\x1e\\xad\\x65\\x56\\x9d\\x4a\\x1b\\xfb\\xae\\x06\\x0b\\x15\\xd4\\xb6\\x5b\\x3a\"\n\"\\x50\\x7b\\x4a\\x6f\\x59\\x1f\\x45\\x65\\x55\\x68\\x47\\x66\\x1d\\x0b\\x92\\xfb\\x69\\x15\\xdf\\x06\\xc7\\xf7\\xad\\x05\\x4a\\xaa\\xb4\\x71\\xd2\\x1b\\xd9\\xd6\"\n\"\\xaf\\xc9\\xbe\\x1f\\xc1\\xce\\xad\\xf2\\xee\\x1a\\xf7\\x0c\\x48\\xd6\\x20\\x0b\\x40\\x1d\\xd6\\xbc\\xbe\\x9e\\xa9\\xac\\x1e\\xa3\\xa0\\x96\\xa0\\x96\\xb7\\x08\"\n\"\\x53\\x06\\x63\\x81\\x63\\x74\\x4f\\x1b\\x0b\\x21\\x1d\\x34\\x1d\\xfb\\x66\\x25\\x1d\\x21\\x1d\\x34\\x1d\\xfb\\x66\\x25\\x1d\\x05\\x35\\x06\\x0e\\x06\\xbb\\xf3\"\n\"\\x9e\\xe6\\x05\\xc7\\xfb\\x2b\\x15\\x2f\\x06\\x75\\x24\\x05\\xe7\\x06\\xfb\\x2c\\xf2\\x15\\x2f\\x06\\x75\\x24\\x05\\xe7\\x06\\x0e\\x32\\x1d\\xc0\\xf7\\x8c\\x05\"\n\"\\x53\\x2e\\x1d\\x0b\\xd8\\x1d\\xb3\\x06\\xce\\xd1\\x1d\\x0b\\x15\\xf8\\x1f\\x06\\x9d\\xdd\\x05\\xfc\\x20\\x06\\xbd\\xf7\\x7d\\x05\\xf8\\x30\\x20\\x1d\\xfc\\x8e\"\n\"\\x26\\x1d\\x0b\\xd3\\x1d\\x51\\xd6\\x1d\\x0b\\x38\\xd5\\xfb\\x00\\x34\\x38\\x62\\x48\\x58\\x1e\\x5c\\x4c\\x66\\xfb\\x05\\x39\\x1a\\x55\\xa3\\x54\\xb1\\x66\\x1e\"\n\"\\x69\\xae\\xb7\\x7b\\x0b\\x1e\\xa3\\xa0\\x96\\xa0\\x96\\xb7\\x08\\x53\\x06\\x63\\x81\\x63\\x74\\x4f\\x1b\\x5a\\x6a\\x9f\\xa9\\x1f\\x90\\x07\\x93\\x07\\x0e\\x6f\"\n\"\\x1d\\x84\\x5f\\x15\\x9f\\x99\\x7c\\x77\\x71\\x0b\\x15\\x76\\x29\\x05\\xc2\\x06\\x50\\x80\\x73\\x6e\\x64\\x1b\\x83\\x65\\x05\\xca\\xba\\xbb\\xde\\x9e\\x1f\\x9e\"\n\"\\xe8\\x05\\x0e\\xb6\\x1d\\x6f\\x72\\x0b\\x06\\xf7\\x1d\\xf9\\x1b\\x05\\x2d\\x06\\xfb\\x1d\\xfd\\x1b\\x05\\xfb\\x93\\x2e\\x1d\\x2d\\x06\\x0e\\x22\\x1d\\xfb\\x01\"\n\"\\xfc\\x95\\x7f\\x53\\x7e\\x6a\\x75\\x72\\x19\\x70\\x73\\x66\\x7a\\x66\\x1b\\x55\\x67\\xa9\\xb9\\x0b\\x32\\x06\\xaa\\xf7\\x24\\x21\\x1d\\x6c\\xfb\\x24\\x05\\x44\"\n\"\\x06\\x7d\\x48\\x05\\xd2\\x06\\x3c\\xfc\\x06\\x05\\x89\\x0b\\x15\\xf8\\x51\\xfb\\x63\\x9c\\xd8\\xfb\\xf5\\xf7\\x37\\xf8\\x3a\\xf7\\x38\\x9c\\xda\\xfc\\xa9\\xfb\"\n\"\\x63\\x05\\x0e\\x98\\x85\\x90\\x8c\\x8b\\x8b\\x91\\x8c\\x19\\x8d\\x95\\x8c\\x6d\\x1d\\x0b\\x06\\xea\\xfb\\x8d\\x05\\xe9\\x06\\x21\\xf7\\xb2\\xf7\\x42\\xf7\\x82\"\n\"\\x05\\x26\\x75\\x1d\\x0b\\x06\\xf7\\x2f\\xf9\\x6d\\x05\\x2d\\x06\\x7a\\x39\\xfc\\x67\\xfc\\x40\\xf7\\x00\\xf8\\x92\\x05\\x2d\\x06\\x0b\\x88\\xc6\\x81\\xb1\\x78\"\n\"\\xad\\x08\\xd1\\x62\\x45\\xb0\\x2c\\x1b\\xfb\\x09\\x2a\\x5c\\x2d\\x3d\\x1f\\x0b\\x05\\x2d\\x06\\xfb\\x1e\\xfd\\x1b\\x05\\xfc\\x0a\\x2e\\x1d\\x2d\\x06\\x0e\\x15\"\n\"\\xfb\\x14\\xfb\\x2a\\x05\\xcb\\x06\\x0b\\x1b\\x80\\x70\\x91\\x94\\x71\\x1f\\x98\\x64\\x7b\\x8f\\x7a\\x1b\\x71\\x6d\\x7c\\x76\\x7a\\x1f\\x0b\\x6b\\x69\\x1f\\x67\"\n\"\\x6a\\x5f\\x79\\x55\\x1b\\x3c\\x60\\xb1\\xd1\\x9e\\x8d\\x99\\x8f\\xa3\\x1f\\x0b\\x06\\xd9\\xb5\\x69\\x4c\\x67\\x80\\x6b\\x73\\x6d\\x1f\\x61\\x6a\\x60\\x78\\x4b\"\n\"\\x1b\\x0e\\x06\\xce\\xb8\\x9b\\xaf\\xb1\\x1f\\xae\\xad\\x9f\\xbc\\xbd\\x1a\\xd8\\x53\\xbf\\x38\\x1e\\x0b\\x15\\x6e\\x74\\x74\\x6e\\x6e\\xa2\\x74\\xa8\\xa7\\xa3\"\n\"\\xa2\\xa7\\xa9\\x74\\xa2\\x6e\\x1f\\x0b\\x15\\xa9\\xa4\\x72\\x6d\\x6d\\x72\\x72\\x6d\\x6d\\x72\\xa4\\xaa\\xa8\\xa5\\xa4\\xa8\\x1f\\x0b\\x21\\x1d\\x34\\x1d\\xfb\"\n\"\\x6e\\x06\\xea\\xf8\\x56\\x21\\x1d\\x0e\\xb4\\xf7\\x56\\x21\\x1d\\x5e\\xfb\\x69\\x05\\x88\\x7c\\x89\\x7c\\x80\\x1a\\x4f\\x0b\\xd5\\x1d\\x7e\\x7e\\x1a\\x2e\\x0b\"\n\"\\xf7\\x93\\x15\\x77\\x30\\x8f\\x23\\x05\\xa9\\x06\\xbb\\xf3\\x9f\\xe6\\x05\\x0e\\x81\\xbc\\x1b\\xf7\\x19\\xe6\\xd5\\xf7\\x17\\xa7\\x1f\\xf7\\x08\\xf8\\xb7\\x05\"\n\"\\x0b\\x06\\xdb\\xc6\\x9f\\xb5\\xbb\\x1f\\xc0\\xba\\xab\\xd3\\xd3\\x1a\\xf5\\x46\\xc8\\x0b\\x16\\xdf\\x25\\x1d\\x05\\xf7\\x7c\\x2d\\x1d\\xfb\\xd1\\x06\\x0b\\xb2\"\n\"\\xb0\\xc8\\x1b\\xb6\\xa6\\x72\\x64\\x70\\x7c\\x70\\x74\\x7c\\x1f\\x7e\\x77\\x0b\\xfa\\xc0\\xf7\\xcc\\x15\\xfe\\x87\\x27\\x1d\\xfa\\x87\\x06\\x0e\\xf7\\xf3\\xf7\"\n\"\\xcc\\x15\\xfb\\x83\\x27\\x1d\\xf7\\x83\\x06\\x0e\\x92\\xa1\\x62\\x33\\x1d\\xbf\\xa6\\x83\\xb2\\x1b\\xe0\\xc7\\x0b\\x1f\\x98\\x64\\x7b\\x8f\\x79\\x1b\\x71\\x6e\"\n\"\\x7c\\x76\\x7a\\x1f\\x7f\\x7c\\x0b\\xf7\\x8c\\xf8\\xd8\\x15\\x4c\\xfb\\xbc\\x05\\xc9\\x06\\xe5\\xf8\\x3d\\x05\\x0b\\x15\\x78\\x30\\x8e\\x23\\x05\\xaa\\x06\\xbb\"\n\"\\xf3\\x9e\\xe6\\x05\\x0e\\x15\\x55\\x55\\x57\\x56\\x64\\xaa\\x6c\\xb3\\xc4\\xbf\\xbe\\xc4\\xb2\\x0b\\xf7\\x67\\x05\\x50\\xfb\\xa8\\x15\\x37\\x06\\x75\\x24\\x05\"\n\"\\xdf\\x06\\x0b\\xf8\\xe3\\xf7\\xa1\\x15\\xfc\\x78\\x27\\x1d\\xf8\\x78\\x06\\x0b\\x15\\xd1\\xb7\\x59\\x3d\\x52\\x7a\\x46\\x71\\x5b\\x1f\\x47\\x66\\x0b\\x1f\\x65\"\n\"\\xfb\\x45\\x15\\xb8\\xa7\\x72\\x64\\x50\\x5b\\x5e\\x4d\\x0b\\xc9\\xf7\\xb6\\x05\\x2d\\x06\\x4c\\xfb\\xbb\\x05\\x88\\x7e\\x8a\\x0b\\x65\\x49\\x1b\\x45\\x5f\\xbd\"\n\"\\xd8\\xc5\\x9c\\xcf\\xa5\\xbc\\x1f\\x0b\\x65\\x05\\xcb\\xba\\xbb\\xde\\x50\\x1d\\x22\\x1d\\x37\\x06\\x41\\xfb\\xf2\\x74\\xfb\\x67\\x05\\x0b\\x26\\xf9\\x6d\\x05\"\n\"\\xfb\\x0c\\x06\\xfc\\x33\\xfd\\x6d\\x05\\x0b\\x06\\xb8\\xa2\\x76\\x62\\x4f\\x60\\x5f\\x4f\\x1f\\x0e\\xe4\\x1d\\x0e\\x06\\x38\\xfb\\x67\\x05\\xd7\\x06\\xde\\xf7\"\n\"\\x67\\x05\\x0b\\xf7\\xaa\\xf7\\xed\\x05\\x23\\x06\\xfb\\x87\\xfb\\xc2\\x0b\\x15\\xbf\\xb2\\xa9\\xa0\\xaf\\x1b\\x9c\\x9f\\x85\\x7e\\x0b\\x37\\x06\\x46\\x67\\x56\"\n\"\\x67\\x48\\x1b\\x3c\\x5e\\xbc\\x0b\\xf9\\x35\\x15\\x41\\x06\\x55\\xfb\\x94\\x05\\xc4\\x06\\x0b\\x05\\x37\\x06\\xfb\\x03\\xfc\\xa0\\x05\\xdf\\x06\\x0b\\x06\\xf7\"\n\"\\x1a\\xfb\\xed\\xfb\\xe1\\xfc\\x14\\x05\\x0b\\x15\\xfc\\x78\\x06\\x7d\\x43\\x05\\xf8\\x77\\x06\\x0b\\x15\\x37\\x06\\xfb\\x2f\\xfd\\x6d\\x05\\xdf\\x06\\x0b\\x15\"\n\"\\x76\\x29\\x05\\xc1\\x06\\x50\\x80\\x73\\x6e\\x0b\\x1e\\x65\\x62\\x50\\x79\\x3b\\x1b\\xfb\\x05\\x57\\x0b\\xd9\\x15\\xfb\\x7b\\x06\\xf7\\x53\\xf7\\xe1\\x05\\x0b\"\n\"\\x01\\x00\\x01\\xe3\\x01\\x05\\x00\\x01\\x0a\\x02\\x01\\x40\\x03\\x01\\x87\\xff\\x02\\x87\\xa0\\x02\\x8e\\x02\\x00\\x01\\x00\\x04\\x00\\x07\\x00\\x0e\\x00\\x27\"\n\"\\x00\\x7b\\x01\\x23\\x01\\x90\\x02\\x13\\x02\\x1c\\x02\\x4d\\x02\\x7e\\x02\\xa6\\x02\\xc6\\x02\\xcd\\x02\\xd1\\x02\\xd8\\x02\\xec\\x03\\x46\\x03\\x65\\x03\\xb9\"\n\"\\x04\\x34\\x04\\x64\\x04\\xb9\\x05\\x1d\\x05\\x46\\x05\\xb9\\x06\\x27\\x06\\x36\\x06\\x46\\x06\\x4c\\x06\\x57\\x06\\x5e\\x06\\xad\\x07\\x7e\\x07\\x82\\x07\\x85\"\n\"\\x07\\x89\\x07\\x8d\\x07\\x91\\x07\\xab\\x07\\xaf\\x07\\xb2\\x07\\xb7\\x07\\xbc\\x07\\xbf\\x07\\xc2\\x07\\xc6\\x07\\xca\\x07\\xce\\x07\\xd1\\x08\\x43\\x08\\x80\"\n\"\\x08\\x84\\x08\\x88\\x08\\x8c\\x08\\xa6\\x08\\xab\\x08\\xae\\x08\\xb2\\x08\\xb6\\x08\\xd4\\x08\\xe5\\x09\\x01\\x09\\x1e\\x09\\x24\\x09\\x43\\x09\\x46\\x09\\xa1\"\n\"\\x09\\xa6\\x09\\xab\\x09\\xae\\x09\\xb7\\x09\\xba\\x09\\xbd\\x09\\xc4\\x09\\xd3\\x09\\xd8\\x09\\xdf\\x0a\\x43\\x0a\\x46\\x0a\\x49\\x0a\\x5b\\x0a\\xb7\\x0a\\xd7\"\n\"\\x0b\\x03\\x0b\\x0a\\x0b\\x0d\\x0b\\x28\\x0b\\x2c\\x0b\\x5a\\x0b\\x5f\\x0b\\x64\\x0b\\xce\\x0b\\xe2\\x0c\\x4c\\x0c\\x92\\x0c\\xb3\\x0d\\x2e\\x0d\\xce\\x0d\\xd5\"\n\"\\x0e\\x23\\x0e\\x7e\\x0f\\x3b\\x0f\\xa7\\x0f\\xae\\x0f\\xe7\\x10\\x02\\x10\\x09\\x10\\x12\\x10\\x1f\\x10\\x2d\\x10\\x3a\\x10\\x5c\\x10\\x96\\x10\\x9a\\x10\\xce\"\n\"\\x10\\xe7\\x10\\xee\\x10\\xf9\\x11\\x06\\x11\\x23\\x11\\x38\\x11\\x5c\\x11\\xb3\\x11\\xbb\\x11\\xc3\\x11\\xcb\\x11\\xe0\\x11\\xe4\\x11\\xec\\x11\\xf4\\x11\\xfa\"\n\"\\x12\\x0f\\x12\\x20\\x12\\x28\\x12\\x65\\x12\\x6d\\x12\\x71\\x12\\x76\\x13\\x26\\x13\\x50\\x13\\x54\\x13\\xbb\\x14\\x0c\\x14\\x11\\x14\\x16\\x14\\x39\\x14\\x3d\"\n\"\\x14\\xd9\\x15\\x4e\\x15\\x6b\\x15\\x82\\x15\\xe1\\x16\\x28\\x16\\x2b\\x16\\x86\\x16\\xb1\\x16\\xd4\\x17\\x0a\\x17\\x18\\x17\\x27\\x17\\x54\\x17\\x68\\x17\\x97\"\n\"\\x17\\xda\\x18\\x51\\x18\\x5f\\x18\\xe2\\x19\\x10\\x19\\x7c\\x19\\xc8\\x19\\xd0\\x19\\xd9\\x19\\xeb\\x19\\xf4\\x19\\xfb\\x1a\\x14\\x1a\\x56\\x1a\\x6e\\x1a\\x7b\"\n\"\\x1a\\x88\\x1a\\x95\\x1a\\x9d\\x1a\\xa4\\x1a\\xae\\x1a\\xb8\\x1a\\xe1\\x1a\\xf4\\x1b\\x06\\x1b\\x42\\x1b\\x7d\\x1b\\x95\\x1b\\xa3\\x1b\\xaf\\x1b\\xe1\\x1c\\x12\"\n\"\\x1c\\x1e\\x1c\\x2c\\x1c\\x36\\x1c\\x3f\\x1c\\x62\\x1c\\x6d\\x1c\\x78\\x1c\\x83\\x1c\\xaf\\x1c\\xde\\x1d\\x1b\\x1d\\x26\\x1d\\x2f\\x1d\\x3a\\x1d\\x45\\x1d\\x4f\"\n\"\\x1d\\x58\\x1d\\x61\\x1d\\x6a\\x1d\\x7a\\x1d\\xb1\\x1d\\xbf\\x1d\\xf5\\x1e\\x2a\\x1e\\x5b\\x1e\\x8f\\x1e\\x9a\\x1e\\xa3\\x1e\\xae\\x1e\\xbb\\x1e\\xc5\\x1e\\xd0\"\n\"\\x1e\\xe3\\x1f\\x22\\x1f\\x25\\x1f\\x2d\\x1f\\x36\\x1f\\x69\\x1f\\x79\\x1f\\xcc\\x1f\\xfa\\x20\\x04\\x20\\x0c\\x20\\x10\\x20\\x1e\\x20\\x30\\x20\\x74\\x20\\x86\"\n\"\\x20\\x89\\x20\\x91\\x20\\xa2\\x20\\xab\\x21\\x22\\x21\\x25\\x21\\x2e\\x21\\x31\\x21\\x4a\\x21\\x53\\x21\\x5c\\x21\\x65\\x21\\x6e\\x21\\xc2\\x22\\x03\\x22\\x07\"\n\"\\x22\\x17\\x22\\x1a\\x22\\x26\\x22\\x9c\\x22\\xaa\\x22\\xb3\\x22\\xbc\\x22\\xc9\\x23\\x3e\\x23\\x79\\x23\\x82\\x23\\xaf\\x23\\xb8\\x23\\xc2\\x23\\xd5\\x24\\x0f\"\n\"\\x24\\x14\\x24\\x1e\\x24\\x29\\x24\\x54\\x24\\x5d\\x24\\x60\\x24\\x68\\x24\\x70\\x24\\x8b\\x24\\x98\\x24\\x9f\\x24\\xa7\\x24\\xab\\x24\\xb1\\x24\\xb9\\x24\\xc6\"\n\"\\x24\\xca\\x24\\xd2\\x24\\xda\\x24\\xe3\\x25\\x49\\x25\\x4d\\x25\\x69\\x25\\x72\\x25\\xf0\\x25\\xf3\\x26\\x54\\x26\\x5c\\x26\\x6d\\x26\\x7f\\x26\\x82\\x26\\x8a\"\n\"\\x27\\x08\\x27\\x11\\x27\\x2d\\x27\\x53\\x27\\x57\\x27\\x8a\\x27\\x93\\x27\\xb3\\x28\\x23\\x28\\x34\\x28\\x3d\\x28\\x4f\\x28\\xaf\\x28\\xb3\\x28\\xbc\\x28\\xca\"\n\"\\x28\\xe0\\x28\\xf9\\x29\\x02\\x29\\x09\\x29\\x12\\x29\\x1c\\x29\\x3d\\x29\\x43\\x29\\x4b\\x29\\x54\\x29\\x5d\\x29\\x61\\x29\\x8b\\x29\\x95\\x29\\x99\\x29\\xc5\"\n\"\\x29\\xe7\\x2a\\x46\\x2a\\x5e\\x2a\\x94\\x2a\\x98\\x2a\\xa1\\x2a\\xd4\\x2a\\xfb\\x2a\\xff\\x2b\\x1d\\x2b\\x25\\x2b\\x34\\x2b\\x5f\\x2b\\x81\\x2b\\xb6\\x2b\\xb9\"\n\"\\x2b\\xf0\\x2c\\x48\\x2c\\x5d\\x2c\\x61\\x2c\\xce\\x2c\\xf1\\x2d\\x06\\x2d\\x19\\x2d\\x28\\x2d\\x40\\x2d\\x67\\x2d\\x77\\x2d\\x7d\\x2d\\xe6\\x2e\\x49\\x2e\\xae\"\n\"\\x2e\\xcb\\x2f\\x32\\x2f\\x48\\x2f\\xbb\\x30\\x46\\x30\\x4d\\x30\\x59\\x30\\x9a\\x30\\xc8\\x31\\x00\\x31\\x4e\\x31\\x6a\\x31\\x73\\x32\\x12\\x32\\x6a\\x32\\xbb\"\n\"\\x32\\xc2\\x32\\xfe\\x33\\x01\\x33\\x08\\x33\\x3e\\x33\\x94\\x33\\x97\\x33\\xa6\\x33\\xb3\\x33\\xc4\\x33\\xe9\\x33\\xf5\\x34\\x02\\x34\\x15\\x34\\x5a\\x34\\xa9\"\n\"\\x34\\xc0\\x34\\xc5\\x35\\x33\\x35\\x48\\x35\\x5d\\x35\\x90\\x35\\x9d\\x35\\xb2\\x35\\xd4\\x35\\xe8\\x35\\xf7\\x36\\x47\\x36\\x8d\\x36\\xe1\\x37\\x01\\x37\\x55\"\n\"\\x37\\x67\\x37\\xbe\\x38\\x28\\x38\\x34\\x38\\x3f\\x38\\x76\\x38\\xa2\\x38\\xcc\\x39\\x0c\\x39\\x25\\x39\\x58\\x39\\x6e\\x39\\x85\\x39\\xd5\\x3a\\x71\\x3a\\xf5\"\n\"\\x3b\\x6a\\x3b\\xd1\\x3c\\x3c\\x3c\\x44\\x3c\\x79\\x3c\\xaf\\x3c\\xf9\\x3d\\x59\\x3d\\x71\\x3d\\xf7\\x3e\\x3f\\x3e\\x85\\x3e\\xcc\\x3f\\x13\\x3f\\x69\\x3f\\xc8\"\n\"\\x40\\x4d\\x40\\x56\\x40\\x5f\\x40\\x68\\x40\\x71\\x40\\x9e\\x41\\x1c\\x41\\x99\\x41\\xa4\\x41\\xed\\x42\\x4d\\x42\\x7c\\x42\\x8b\\x42\\x97\\x42\\x9e\\x42\\xa5\"\n\"\\x42\\xdd\\x42\\xe4\\x43\\x00\\x43\\x67\\x43\\x6c\\x43\\x75\\x43\\x82\\x43\\xe8\\x43\\xed\\x43\\xf5\\x44\\x05\\x44\\x1f\\x44\\x60\\x44\\xab\\x44\\xcd\\x44\\xed\"\n\"\\x44\\xf4\\x45\\x14\\x45\\x8e\\x45\\xa1\\x45\\xf5\\x45\\xfc\\x46\\x42\\x46\\x67\\x46\\x70\\x46\\xa4\\x46\\xb7\\x47\\x2f\\x47\\x92\\x47\\xd0\\x48\\x04\\x48\\x49\"\n\"\\x48\\xb6\\x48\\xec\\x48\\xf1\\x49\\x04\\x49\\x29\\x49\\x30\\x49\\x38\\x49\\x41\\x49\\x67\\x49\\x70\\x49\\x9d\\x49\\xa7\\x49\\xc3\\x49\\xcf\\x49\\xd9\\x49\\xe5\"\n\"\\x49\\xf8\\x4a\\x97\\x4a\\xcb\\x4b\\x60\\x4b\\x67\\x4b\\xb9\\x4b\\xd2\\x4b\\xda\\x4b\\xf6\\x4b\\xfd\\x4c\\x04\\x4c\\x73\\x4c\\xb0\\x4c\\xcb\\x4c\\xd2\\x4c\\xe9\"\n\"\\x4c\\xf1\\x4c\\xf5\\x4c\\xfd\\x4d\\x00\\x4d\\x07\\x4d\\x15\\x4d\\x1e\\x4d\\x90\\x4e\\x78\\x4e\\xf5\\x4f\\x16\\x4f\\x3f\\x4f\\x6f\\x4f\\xa6\\x4f\\xfc\\x50\\x26\"\n\"\\x50\\x37\\x50\\x57\\x50\\x66\\x50\\x82\\x50\\x99\\x50\\xf0\\x50\\xf9\\x51\\x69\\x51\\x9b\\x51\\xa5\\x51\\xb9\\x51\\xf3\\x52\\x83\\x52\\xdf\\x53\\x14\\x53\\xb5\"\n\"\\x53\\xca\\x54\\x1f\\x54\\x2a\\x54\\x7f\\x54\\xf6\\x54\\xfe\\x55\\x06\\x55\\x0d\\x55\\x15\\x55\\x28\\x55\\x2b\\x55\\x2f\\x55\\x37\\x55\\x69\\x55\\x6d\\x55\\x71\"\n\"\\x55\\x8c\\x55\\xee\\x56\\x35\\x56\\x9f\\x56\\xa8\\x56\\xb2\\x56\\xbd\\x56\\xc6\\x56\\xf2\\x57\\x1a\\x57\\x69\\x57\\xad\\x57\\xf7\\x58\\x67\\x58\\x8e\\x58\\xb6\"\n\"\\x58\\xeb\\x59\\x23\\x59\\x35\\x59\\x5a\\x59\\x85\\x59\\x99\\x59\\xcf\\x5a\\x0c\\x5a\\x10\\x5a\\x32\\x5a\\x6f\\x5a\\xa7\\x5a\\xd2\\x5a\\xf2\\x5b\\x1e\\x5b\\x53\"\n\"\\x5b\\x97\\x5b\\xd5\\x5c\\x13\\x5c\\x4b\\x5c\\x52\\x5c\\x74\\x5c\\xb9\\x5d\\x18\\x5d\\x25\\x5d\\x36\\x5d\\x81\\x5d\\xab\\x5d\\xe3\\x5e\\x28\\x5e\\x30\\x5e\\xf2\"\n\"\\x5f\\x58\\x5f\\x5f\\x5f\\x63\\x5f\\x7f\\x5f\\x9c\\x60\\x0c\\x60\\x23\\x60\\x68\\x60\\x91\\x60\\xda\\x60\\xdf\\x60\\xe9\\x60\\xfa\\x61\\x04\\x61\\x1c\\x61\\x22\"\n\"\\x61\\x2a\\x61\\x32\\x61\\x38\\x61\\x41\\x61\\xd1\\x61\\xdb\\x61\\xe5\\x61\\xf5\\x61\\xfe\\x62\\x73\\xfc\\x20\\x0e\\xfc\\x20\\x0e\\xfc\\x20\\xf7\\xff\\xaa\\x1d\"\n\"\\x0e\\xfb\\xd3\\xf7\\x5e\\x9a\\x0a\\xcc\\x16\\x73\\xfb\\x03\\x8a\\xfb\\x1a\\x05\\xb3\\x06\\xc2\\xf7\\x1a\\xa3\\xf7\\x03\\x05\\x0e\\xf9\\x0c\\xf9\\x4d\\x15\\x3f\"\n\"\\x06\\x3e\\xfb\\x56\\x05\\xfb\\x10\\x06\\xd7\\xf7\\x56\\x05\\x3f\\x06\\x3e\\xfb\\x56\\x05\\xfb\\x0d\\x06\\x7e\\x4b\\x05\\xf7\\x01\\x06\\x42\\xfb\\x4c\\x05\\xfb\"\n\"\\x04\\x06\\x7d\\x4b\\x05\\xf0\\xdc\\x1d\\xf7\\x11\\xdc\\x1d\\xf7\\x0a\\x06\\x99\\xcb\\x05\\x20\\x06\\xd4\\xf7\\x4c\\x05\\xf4\\x06\\x99\\xcb\\x05\\x2d\\x06\\x26\"\n\"\\x4b\\x15\\x42\\xfb\\x4c\\x05\\xfb\\x11\\x06\\xd5\\xf7\\x4c\\x05\\x0e\\xf8\\x2b\\xf9\\x96\\x15\\x80\\x55\\x47\\x86\\x4e\\x73\\x63\\x66\\x19\\x5e\\x61\\x6d\\x43\"\n\"\\x48\\x1a\\x62\\x99\\x6b\\xaa\\x71\\x1e\\xa0\\x79\\x9f\\x82\\xd4\\x72\\x51\\xfb\\xa4\\x18\\x42\\xa0\\x6f\\xa7\\xc2\\x1a\\x94\\x8c\\x9e\\x8d\\x9e\\x1e\\x8c\\x96\"\n\"\\x05\\x3c\\x06\\x85\\x69\\x89\\x7a\\x74\\x1a\\x30\\xc0\\x5b\\xf7\\x09\\x79\\x1e\\x75\\x24\\x05\\xc6\\x06\\xa1\\xf2\\xd4\\x8d\\xcd\\xa3\\xb7\\xb3\\x19\\xbe\\xb8\"\n\"\\xac\\xdb\\xd6\\x1a\\xbb\\x7b\\xaa\\x62\\xa6\\x1e\\x73\\x9b\\x7c\\x92\\x39\\xa4\\xc0\\xf7\\x8d\\x18\\xc2\\x88\\xae\\x68\\x56\\x1a\\x87\\x8b\\x83\\x8a\\x82\\x1e\"\n\"\\x8a\\x7c\\x05\\xda\\x06\\x90\\x9f\\x8c\\x95\\x9b\\x1a\\xe5\\x51\\xc3\\x27\\x90\\x1e\\x96\\xc1\\x05\\xfb\\x1c\\xfc\\x01\\x15\\x46\\xa0\\x71\\xa5\\xbc\\x1a\\xd7\"\n\"\\xc9\\xc8\\xdf\\x92\\x1e\\x7e\\xfb\\xe4\\x15\\xdc\\x73\\xa7\\x71\\x5b\\x1a\\x29\\x50\\x50\\x21\\x83\\x1e\\x0e\\xf7\\x6b\\xf9\\x8b\\xf9\\x59\\x15\\xfc\\xba\\xfd\"\n\"\\x6d\\x05\\xcd\\x06\\xf8\\xba\\xf9\\x6d\\x05\\xfc\\x74\\x70\\x15\\xfb\\x00\\x24\\x28\\x22\\x3f\\xc5\\x53\\xd9\\xf7\\x04\\xf0\\xed\\xf7\\x00\\xd4\\x4f\\xc4\\x3d\"\n\"\\x1f\\x7b\\x49\\x15\\xbe\\xac\\x6a\\x5a\\x4c\\x4d\\x50\\x4a\\x5c\\x68\\xae\\xba\\xca\\xc7\\xc6\\xcc\\x1f\\xf8\\x40\\xfb\\xbc\\x15\\xfb\\x00\\x24\\x28\\x22\\x3f\"\n\"\\xc5\\x53\\xd9\\xf7\\x04\\xf0\\xed\\xf7\\x00\\xd4\\x4f\\xc4\\x3d\\x1f\\x7b\\x49\\x15\\xbe\\xac\\x6a\\x5a\\x4c\\x4d\\x50\\x4a\\x5c\\x68\\xae\\xba\\xca\\xc7\\xc6\"\n\"\\xcc\\x1f\\x0e\\x84\\xf8\\xc9\\xf7\\xe2\\x15\\x7f\\x5a\\x7b\\x6a\\x6b\\x66\\x29\\xf7\\x37\\x18\\xf7\\x11\\xc4\\xc3\\xcb\\xe3\\x1a\\xd6\\x58\\xba\\x39\\xfb\\x01\"\n\"\\x28\\x32\\x2a\\x74\\x90\\x73\\x94\\x76\\x1e\\x9d\\x61\\x8d\\x87\\x8e\\x83\\x8f\\x80\\x19\\x64\\x75\\x6f\\x7a\\x71\\x78\\x08\\x40\\x54\\x66\\x47\\x3a\\x1a\\x2d\"\n\"\\xcc\\x52\\xf4\\xdc\\xc4\\xa4\\xd7\\xe6\\x1e\\xb9\\x3d\\x05\\xf5\\x06\\x31\\xf7\\x2b\\xbc\\xbe\\xb2\\xd2\\x97\\xc8\\x19\\xfb\\x9f\\xef\\x15\\x62\\xc6\\x85\\x97\"\n\"\\xa7\\x1a\\xc6\\xba\\xba\\xc6\\xb6\\xa5\\x72\\x63\\x55\\x65\\x62\\x31\\x5e\\x1e\\xd2\\xfb\\xbd\\x15\\x4f\\x42\\x5e\\x74\\x59\\x1b\\x47\\x62\\xb2\\xcc\\xcd\\xb8\"\n\"\\xbe\\xf7\\x05\\xc8\\x1f\\x0e\\xfc\\x58\\xf7\\x6b\\xf9\\x58\\x47\\x1d\\x0e\\xfb\\xe9\\xf8\\x1b\\x22\\x1d\\x46\\x43\\x5a\\x49\\x59\\x31\\x08\\x40\\xfb\\x1c\\x68\"\n\"\\xfb\\x0d\\xfb\\x14\\x1a\\xfb\\x0c\\xa8\\xfb\\x0e\\xbc\\x34\\x1e\\xc2\\x06\\x65\\xec\\x7a\\xe7\\xf2\\x1a\\xf7\\x73\\xe2\\xf7\\x71\\xf7\\x3c\\xf7\\x62\\x1e\\x0e\"\n\"\\xfb\\xe9\\xbb\\xfb\\x69\\x15\\xcb\\xcd\\xc5\\xda\\xb9\\xde\\x08\\xd5\\xf7\\x19\\xae\\xf7\\x12\\xf7\\x19\\x1a\\xf7\\x06\\x6d\\xf7\\x11\\x5c\\xde\\x1e\\x54\\x06\"\n\"\\xb1\\x29\\x9c\\x2e\\x20\\x1a\\xfb\\x6c\\x32\\xfb\\x74\\xfb\\x3a\\xfb\\x60\\x1e\\x0e\\xfb\\xb1\\xf7\\xd3\\x22\\x1d\\x77\\xfb\\x04\\x27\\xb3\\x6d\\x50\\xf3\\x6c\"\n\"\\x2f\\x33\\xba\\x63\\xdc\\xea\\xb7\\x2b\\xc5\\xb0\\x56\\xe6\\xf7\\x05\\xa6\\x82\\xc9\\xfb\\x02\\x65\\xa8\\xf7\\x04\\x05\\x0e\\x31\\xf8\\xe3\\xf7\\xa1\\x15\\xfb\"\n\"\\x63\\x06\\xb7\\xf7\\x60\\x05\\x45\\x06\\x5f\\xb1\\x0a\\x5f\\xfb\\x64\\x05\\xd1\\x06\\xb7\\xf7\\x64\\x05\\xf7\\x63\\x06\\x0e\\xfc\\x20\\xf7\\x01\\xf2\\x8a\\x0a\"\n\"\\xfb\\xe9\\xcb\\x1d\\xfc\\x20\\xf7\\x69\\xf2\\x23\\x0a\\xfc\\x20\\xf8\\x0f\\xf9\\x6d\\x15\\xfc\\x1b\\xfd\\x81\\x05\\xc2\\x06\\xf8\\x1b\\xf9\\x81\\x05\\x0e\\xf8\"\n\"\\x39\\xf9\\x67\\x15\\x38\\x46\\x62\\x38\\x53\\x1f\\x4b\\x2d\\x59\\xfb\\x4e\\xfb\\x26\\x1a\\x4d\\x9d\\x55\\xaa\\x6c\\x1e\\x6d\\xaa\\xbc\\x78\\xbb\\x1b\\xe1\\xcd\"\n\"\\xb2\\xe0\\xc5\\x1f\\xcc\\xea\\xbc\\xf7\\x4c\\xf7\\x26\\x1a\\xf7\\x10\\x48\\xd4\\xfb\\x04\\x1e\\x7f\\x3e\\x15\\xcc\\xb1\\x5b\\x39\\x2c\\x69\\xfb\\x32\\x65\\x39\"\n\"\\x1f\\x33\\x62\\x5c\\x64\\x4a\\x1b\\x4d\\x65\\xbc\\xdb\\xeb\\xac\\xf7\\x30\\xb2\\xe0\\x1f\\xe0\\xb2\\xbb\\xb4\\xca\\x1b\\x0e\\xf8\\x06\\xf8\\x9b\\x15\\xfb\\x03\"\n\"\\xfc\\x9b\\x05\\xe3\\x06\\xf7\\x2e\\xf9\\x67\\x05\\x51\\x06\\x56\\xfb\\x00\\x75\\x7e\\xfb\\x24\\x77\\x7e\\x4c\\x18\\x0e\\xf8\\xa0\\xe2\\x15\\xfc\\x0d\\x06\\x9c\"\n\"\\xbd\\xc3\\xbf\\xe6\\xb9\\xf7\\x04\\xc6\\x18\\xf7\\x1a\\xd0\\xcc\\xdf\\xf1\\x1a\\xb8\\x7c\\xb5\\x70\\xa9\\x1e\\xb2\\x6a\\x5b\\x9d\\x47\\x1b\\xfb\\x2e\\x33\\x3d\"\n\"\\xfb\\x40\\x63\\x1f\\xe3\\x06\\x97\\xb8\\x97\\xaa\\x9d\\xa5\\x08\\xb8\\xaa\\xbe\\xa5\\xc5\\x1b\\xd1\\xb8\\x60\\x49\\x49\\x5b\\x4d\\x37\\x60\\x1f\\x23\\x55\\xfb\"\n\"\\x42\\x2d\\x5e\\x56\\x5e\\xfb\\x38\\x19\\xf8\\x6b\\x06\\x0e\\xf7\\xb8\\xf7\\xe0\\x15\\x8d\\x9f\\x96\\x8b\\x99\\x1b\\xde\\xbb\\x69\\x50\\xfb\\x02\\x3d\\x3e\\xfb\"\n\"\\x04\\x42\\x5e\\xb3\\xca\\x9a\\x8c\\x97\\x8f\\xa5\\x1f\\x33\\x06\\x87\\x6c\\x8a\\x7c\\x7a\\x1a\\xfb\\x02\\xcf\\x4f\\xf7\\x10\\xe5\\xd7\\xaa\\xc4\\xbf\\x1e\\xb8\"\n\"\\xbd\\xa8\\xd4\\xcd\\x1a\\xc6\\x76\\xab\\x53\\xa8\\x1e\\xe0\\xbc\\xb1\\xc8\\xe5\\x1a\\xe6\\x44\\xc5\\xfb\\x02\\x38\\x44\\x6d\\x53\\x5a\\x1e\\x6e\\x69\\x79\\x64\"\n\"\\x77\\x41\\x08\\xe3\\x06\\x96\\xb9\\x94\\xa3\\x9a\\xa0\\x08\\xb5\\xaa\\xba\\xa2\\xc3\\x1b\\xcd\\xb3\\x6a\\x54\\x63\\x7e\\x64\\x76\\x73\\x1f\\x6b\\x6f\\x57\\x7b\"\n\"\\x41\\x1b\\x85\\x06\\x7f\\x06\\x0e\\xf7\\xff\\xf7\\x43\\x15\\x66\\xfb\\x43\\x05\\xe3\\x06\\xb0\\xf7\\x43\\x05\\xf5\\x06\\x9c\\xd9\\x05\\x21\\x06\\xef\\xf8\\x6a\"\n\"\\x05\\x49\\x06\\xfc\\x36\\xfc\\x5c\\x77\\x2f\\x05\\xf7\\xd0\\xd9\\x15\\xfb\\x71\\x06\\xf7\\xb4\\xf7\\xd1\\x05\\x0e\\xf9\\x09\\xf9\\x59\\x15\\xfc\\x06\\x06\\xfb\"\n\"\\x1b\\xfc\\x16\\x05\\xdb\\x06\\xc1\\xc8\\xa8\\x98\\xc6\\x1b\\xdb\\xb9\\x5f\\x3e\\xfb\\x11\\x39\\x31\\xfb\\x06\\x3b\\x61\\xb3\\xdb\\x88\\x1f\\x33\\x7f\\x06\\x81\"\n\"\\x07\\x50\\x9a\\x65\\xad\\x6e\\x1e\\x6b\\xb1\\xbe\\x7a\\xca\\x1b\\xe9\\xd5\\xb1\\xd8\\xc6\\x1f\\xb7\\xc5\\xa4\\xd4\\xd3\\x1a\\xf4\\x42\\xce\\xfb\\x05\\x5b\\x61\"\n\"\\x7e\\x6d\\x59\\x1e\\xd1\\xf7\\x5a\\x05\\xf7\\xc0\\x06\\x0e\\xf8\\xf9\\xf8\\xab\\x15\\x8c\\xa7\\x05\\xed\\x47\\xc9\\x20\\x2c\\x3b\\x58\\x26\\x4c\\x1e\\x50\\x2e\"\n\"\\x5b\\xfb\\x4a\\xfb\\x13\\x1a\\xfb\\x0a\\xd5\\x41\\xf7\\x0a\\xe0\\xd4\\xb1\\xd4\\xc3\\x1e\\xb4\\xc1\\xa5\\xd4\\xc9\\x1a\\xf3\\x45\\xd0\\x20\\x49\\x52\\x70\\x4f\"\n\"\\x52\\x1e\\xf7\\x43\\xaa\\xdd\\xf7\\x00\\xf1\\x1b\\xb8\\xaf\\x74\\x65\\x96\\x1f\\x8f\\x7e\\x8d\\x7d\\x8d\\x74\\x08\\xfb\\x33\\xfb\\x36\\x15\\xcf\\xb8\\x5e\\x49\"\n\"\\xfb\\x07\\x3b\\x2e\\x27\\x46\\x5b\\xbd\\xd3\\xf7\\x02\\xdc\\xe2\\xf2\\x1f\\x0e\\xf9\\x33\\xf9\\x59\\x15\\xfc\\x6f\\x06\\x78\\x34\\x05\\xf8\\x13\\x06\\xfb\\x75\"\n\"\\xfb\\x91\\xfb\\x00\\xfb\\x32\\x31\\xfb\\x67\\x08\\xed\\x06\\xcf\\xf7\\x53\\xf7\\x48\\xf7\\xa1\\xf7\\x3f\\xf7\\x3c\\x08\\x0e\\xf8\\x71\\xf8\\x10\\x15\\xaa\\x9c\"\n\"\\x9b\\x96\\x9e\\x9b\\x08\\xb2\\xaf\\xa4\\xc4\\xc3\\x1a\\xe4\\x42\\xc8\\x20\\xfb\\x26\\xfb\\x02\\x26\\xfb\\x1a\\x5c\\x9c\\x6e\\xbb\\x6c\\x1e\\x21\\x5a\\x54\\x3b\"\n\"\\x22\\x1a\\x23\\xdb\\x49\\xf7\\x12\\xdf\\xd2\\xab\\xcc\\xc4\\x1e\\xb6\\xbd\\xa4\\xc9\\xc5\\x1a\\xc7\\x6e\\xba\\x54\\xa8\\x1e\\x49\\xf7\\x9e\\x15\\xcf\\xb3\\x6a\"\n\"\\x54\\x6c\\x7e\\x68\\x77\\x72\\x1f\\x68\\x6e\\x64\\x7a\\x56\\x1b\\x48\\x64\\xaa\\xc0\\xe2\\xc9\\xc7\\xe5\\x1f\\x4a\\xfb\\xc5\\x15\\xd9\\xbc\\x60\\x48\\x27\\x3a\"\n\"\\x3e\\x23\\x40\\x59\\xb6\\xcc\\xee\\xdc\\xdb\\xf1\\x1f\\x0e\\xe0\\xf7\\x39\\x15\\x8a\\x80\\x8b\\x80\\x85\\x1a\\x2a\\xd0\\x4c\\xf4\\xc9\\xc4\\xa1\\xb8\\xbf\\x1e\"\n\"\\xcc\\xc3\\xb0\\xcc\\xa7\\xf6\\x08\\xa4\\xea\\x9d\\xf7\\x01\\xc8\\x1a\\xbb\\x79\\xbb\\x6d\\xac\\x1e\\xb0\\x6a\\x58\\x9f\\x4c\\x1b\\xfb\\x30\\xfb\\x0e\\xfb\\x16\"\n\"\\xfb\\x3b\\x22\\xd0\\x48\\xf6\\xb7\\xba\\x98\\xa1\\xab\\x1f\\x98\\x94\\x98\\x95\\xa8\\xa5\\x08\\xfb\\x4e\\x63\\x43\\x2d\\x27\\x1b\\x4f\\x64\\xb3\\xc8\\x1f\\x95\"\n\"\\x07\\xf7\\x73\\xf8\\x75\\x15\\xcf\\xbe\\x58\\x48\\xfb\\x01\\x39\\x33\\x25\\x44\\x61\\xb6\\xd3\\xf7\\x02\\xdc\\xe5\\xec\\x1f\\x0e\\xfc\\x20\\xf7\\x80\\xf2\\x37\"\n\"\\x0a\\xf3\\x06\\xf7\\x04\\xf8\\xa0\\x23\\x0a\\xfc\\x20\\xf7\\xd9\\xf8\\xa0\\x37\\x0a\\xf3\\x06\\xfb\\x3f\\xfb\\xd2\\x8a\\x0a\\x31\\xe2\\xf7\\x5a\\xb5\\x1d\\x31\"\n\"\\xf8\\xf5\\xf7\\xf7\\xe3\\x1d\\x75\\x27\\xb2\\x0a\\x31\\xf8\\xe8\\xf7\\x9f\\x8f\\x0a\\xf8\\x07\\xf7\\x5b\\x15\\x95\\xba\\x99\\xbd\\x9b\\x9e\\xd5\\xc2\\x19\\xf2\"\n\"\\xd9\\xb5\\xcb\\xd9\\x1a\\xb8\\x75\\xb7\\x67\\xa7\\x1e\\xa2\\x6e\\x62\\x96\\x56\\x1b\\xfb\\x24\\x31\\x3c\\xfb\\x2f\\x6c\\x1f\\xe0\\x06\\xf7\\x02\\xa1\\xbb\\xba\"\n\"\\xe3\\x1b\\xcb\\xb6\\x68\\x58\\x52\\x6f\\x61\\x3e\\x4d\\x1f\\x20\\x38\\x7c\\x78\\x7d\\x4e\\x7f\\x54\\x18\\xd1\\x2b\\x15\\x31\\x06\\x75\\x24\\x05\\xe5\\x06\\x0e\"\n\"\\xf7\\xe9\\xf9\\x97\\xf8\\x89\\x15\\x67\\x49\\x05\\xc6\\x7f\\x65\\xa9\\x50\\x1b\\xfb\\x29\\xfb\\x3b\\xfb\\x3f\\xfb\\x2c\\x37\\xc0\\x54\\xdd\\xbb\\xae\\x9b\\xb7\"\n\"\\xc1\\x1f\\x8d\\x8d\\x91\\x90\\x92\\x90\\x08\\x82\\x07\\x86\\x07\\x7b\\x97\\x75\\x99\\x82\\x1e\\x81\\x9a\\xa5\\x85\\xab\\x1b\\xe7\\xf7\\x02\\xc4\\xda\\xc8\\x1f\"\n\"\\xba\\xc8\\xa9\\xe9\\xe2\\x1a\\xf7\\x44\\xfb\\x2a\\xf7\\x16\\xfb\\x61\\xfb\\x32\\xfb\\x34\\x49\\xfb\\x04\\xfb\\x03\\x1e\\xfb\\x01\\xfb\\x01\\x4c\\xfb\\x21\\xfb\"\n\"\\x17\\x1a\\x3d\\xa3\\x49\\xbc\\x54\\x1e\\x3c\\xd2\\xf7\\x00\\x5d\\xf7\\x07\\x1b\\xdd\\xe4\\x9a\\xa6\\xd5\\x1f\\x7e\\xce\\x05\\x73\\x32\\x56\\x83\\x4d\\x1b\\xfb\"\n\"\\x4c\\xfb\\x0f\\xf4\\xf7\\x30\\xf7\\x80\\xf7\\x89\\xf7\\x7c\\xf7\\x8b\\xf7\\x3e\\xf7\\x0f\\x22\\xfb\\x25\\xfb\\x1b\\xfb\\x0f\\xfb\\x2c\\xfb\\x01\\x75\\x78\\x9c\"\n\"\\x9e\\x94\\x92\\x9b\\x9c\\xac\\x1f\\xf7\\x29\\xf7\\xac\\x05\\xfb\\x82\\x5d\\x15\\xb6\\xa3\\x74\\x61\\x5f\\x6c\\x40\\x60\\x4f\\x1f\\x53\\x64\\x5c\\x6c\\x5f\\x1b\"\n\"\\x5f\\x6b\\xaf\\xbd\\xbd\\xa7\\xcc\\xb6\\xbf\\x1f\\xbd\\xb6\\xbd\\xa7\\xbc\\x1b\\x0e\\x84\\x28\\x1d\\x0e\\x84\\x84\\x1d\\xbb\\x3a\\x0a\\x0e\\xbb\\x72\\x0a\\x0e\"\n\"\\x84\\x27\\x0a\\x0e\\x4c\\xf7\\x93\\xf7\\xe0\\x15\\xf7\\xef\\x20\\x1d\\xfb\\xef\\x06\\xbd\\xf7\\x7d\\x05\\xf8\\x1f\\x20\\x1d\\xfc\\x7d\\x22\\x0a\\x0e\\xf3\\x81\"\n\"\\x1d\\x0e\\xbb\\x7a\\x0a\\xfc\\x20\\x29\\x1d\\x0e\\xfb\\x42\\x6c\\x0a\\x0e\\x84\\x78\\x0a\\x3e\\x1d\\x0e\\xf7\\x33\\x97\\x1d\\xbb\\x2b\\x0a\\x0e\\xf3\\x30\\x0a\"\n\"\\x0e\\x84\\x71\\x0a\\xf3\\xf9\\x71\\x8a\\x15\\x3d\\xd8\\x05\\xf7\\x03\\xee\\xc9\\xf7\\x1d\\xf7\\x24\\x1a\\xdf\\x70\\xd8\\x5d\\xba\\x1e\\xbc\\x5b\\x3b\\xa7\\x30\"\n\"\\x1b\\x33\\x3d\\x72\\x57\\x46\\x1f\\xfb\\x0b\\x32\\x3d\\xfb\\x32\\xfb\\x2d\\x1a\\xfb\\x49\\xf5\\x21\\xf7\\x48\\xd9\\xb8\\x97\\xb2\\xd4\\x1e\\xe2\\x34\\x05\\xfb\"\n\"\\x29\\xf7\\x9c\\x15\\x51\\x53\\xc9\\x4d\\x05\\x75\\x59\\x70\\x84\\x61\\x1b\\xfb\\x17\\x3d\\xda\\xf7\\x1a\\xe8\\xaa\\xeb\\xc0\\xd4\\x1f\\xdb\\xc5\\xe4\\xba\\xe9\"\n\"\\x1b\\xcf\\xca\\x70\\x5e\\xae\\x1f\\xa6\\x68\\x99\\x5c\\x4f\\x1a\\xfb\\x0c\\x5c\\xfb\\x02\\x34\\x37\\x1e\\x0e\\xbb\\xf7\\x92\\xf7\\xce\\x15\\xf7\\x83\\x06\\xcc\"\n\"\\xaf\\x71\\x5a\\x7a\\x88\\x76\\x86\\x75\\x1f\\x73\\x27\\x8b\\x8b\\x6b\\x1a\\x7b\\x8c\\x80\\x8e\\x77\\x1e\\xf7\\x05\\x06\\x90\\xa2\\x05\\x7e\\x97\\x83\\x9e\\xa1\"\n\"\\x1a\\x96\\x8d\\x9c\\x8f\\xa1\\x1e\\x9e\\xf4\\x8d\\x98\\x8c\\x1d\\x6e\\x60\\x7a\\x4b\\x1b\\x0e\\x84\\x61\\x0a\\x0e\\x4c\\x48\\x1d\\x0e\\xbb\\x57\\x1d\\x0e\\x84\"\n\"\\xf8\\x1c\\x16\\xf8\\x2c\\xf9\\x6d\\x05\\x28\\x06\\xfb\\xe4\\xfc\\xfd\\x38\\xf8\\xfd\\x05\\x2a\\x06\\xf6\\xfd\\x6d\\x05\\x0e\\xf7\\xa2\\x32\\x0a\\x0e\\x84\\x75\"\n\"\\x0a\\x84\\x2f\\x1d\\x0e\\x4c\\x33\\x0a\\x0e\\xfc\\x20\\xf8\\x29\\x22\\x1d\\xfb\\x4e\\x06\\xfb\\x5c\\xfe\\x42\\x05\\xf7\\x4e\\x06\\x9a\\xd3\\x05\\x25\\x06\\xf7\"\n\"\\x3e\\xf9\\xb2\\x05\\xf1\\x06\\x0e\\xfc\\x20\\xf7\\x27\\x22\\x1d\\xd9\\xfd\\x81\\x05\\xc2\\x06\\x3d\\xf9\\x81\\x05\\x0e\\xfc\\x20\\x74\\xfb\\x69\\x15\\xf7\\x4f\"\n\"\\x06\\xf7\\x5c\\xfa\\x42\\x05\\xfb\\x4f\\x27\\x1d\\xf2\\x06\\xfb\\x3e\\xfd\\xb2\\x05\\x24\\x06\\x0e\\xfb\\x61\\xf7\\xf1\\xf9\\x59\\x15\\xfb\\x7e\\xfc\\x10\\x05\"\n\"\\xd3\\x06\\xf7\\x4a\\xf7\\xbf\\xc5\\xfb\\xbf\\x05\\xd0\\x06\\x41\\xf8\\x10\\x05\\x0e\\xf8\\xbb\\xfb\\x12\\x6b\\x1d\\xfc\\x58\\xf7\\x94\\xf8\\x71\\x15\\xa1\\xf2\"\n\"\\x05\\x5c\\x06\\x96\\xc7\\x9f\\xa5\\xb1\\x8f\\x93\\xb2\\x18\\x4d\\x87\\x5f\\x5c\\x79\\x3a\\x76\\x27\\x18\\x0e\\x60\\x0a\\x0e\\xf7\\x65\\x22\\x1d\\xfb\\x2f\\xfd\"\n\"\\x6d\\x05\\xd6\\x06\\x9c\\xd9\\x05\\x43\\xab\\xb5\\x6e\\xd5\\x1b\\xce\\xd2\\xa9\\xbb\\xb8\\x1f\\xce\\xd2\\xb7\\xf7\\x06\\xf2\\x1a\\xf7\\x04\\x3f\\xdf\\x26\\x62\"\n\"\\x5f\\x7f\\x79\\x6d\\x1e\\x7a\\x81\\x7e\\x7f\\x6c\\x6a\\xc5\\xf7\\xa7\\x18\\xe5\\xfb\\x9f\\x15\\xd4\\xb7\\x57\\x35\\x51\\x7a\\x4c\\x6e\\x5b\\x1f\\x47\\x62\\x57\"\n\"\\x6a\\x4a\\x1b\\x47\\x60\\xbd\\xda\\xc9\\x9d\\xcf\\xa7\\xbb\\x1f\\xcd\\xb2\\xc0\\xae\\xc7\\x1b\\x0e\\xfb\\x42\\x66\\x0a\\x0e\\xf9\\x1e\\x88\\x1d\\x0e\\x68\\x0a\"\n\"\\x0e\\xfc\\x20\\xf8\\x06\\xf8\\xa0\\x3b\\x1d\\x0e\\x62\\x0a\\x0e\\x73\\x0a\\x0e\\xfc\\x58\\xf7\\x99\\x8d\\x0a\\x0e\\xfc\\x58\\x7b\\x0a\\xb7\\xf7\\x61\\x15\\x37\"\n\"\\x06\\x75\\x24\\x20\\x0a\\x0e\\xfb\\x42\\x98\\x1d\\x0e\\xfc\\x58\\xf7\\xc7\\x37\\x1d\\x0e\\xf7\\x33\\xf7\\x4a\\x4e\\x1d\\xd1\\xf7\\xdd\\x05\\xd7\\x9b\\xcf\\xc9\"\n\"\\xce\\x1b\\xbc\\xac\\x70\\x61\\x80\\x89\\x7e\\x89\\x7e\\x1f\\x3e\\xfb\\xfd\\x20\\x0a\\xd1\\xf7\\xdd\\x05\\xd9\\x9b\\xd0\\xc7\\xd3\\x1b\\xba\\xa8\\x6e\\x5b\\x7c\"\n\"\\x8b\\x8b\\x82\\x69\\x1f\\x43\\xfb\\xe9\\x20\\x0a\\xda\\xf8\\x09\\x05\\x8e\\x96\\x8e\\xac\\x96\\x1a\\xa6\\x7f\\xa7\\x77\\xa1\\x1e\\xa3\\x75\\x71\\x95\\x5c\\x1b\"\n\"\\x49\\x53\\x71\\x52\\x50\\x1f\\xc3\\x7b\\x64\\xa6\\x49\\x1b\\x46\\x5e\\x77\\x4f\\x4b\\x1f\\x98\\xcc\\x05\\x0e\\x39\\x1d\\x0e\\x69\\x0a\\x0e\\xa5\\x1d\\x3d\\x3b\"\n\"\\x60\\x53\\x70\\x1e\\x9d\\xdf\\x05\\x3a\\x06\\xf7\\x6b\\x4d\\xa1\\x1d\\xf8\\x56\\xfb\\x69\\x15\\xf7\\x31\\xf9\\x75\\x05\\x40\\x06\\x78\\x35\\x05\\xcd\\x74\\x58\"\n\"\\xae\\x42\\x1b\\x47\\x44\\x6d\\x5b\\x5e\\x1f\\x48\\x44\\x5f\\xfb\\x06\\x24\\x1a\\xfb\\x04\\xd7\\x37\\xf0\\xb4\\xb8\\x97\\x9d\\xa8\\x1e\\x9b\\x95\\x97\\x96\\xad\"\n\"\\xad\\x50\\xfb\\xa7\\x18\\x89\\xf9\\x37\\x15\\xce\\xb6\\x59\\x3c\\x4d\\x79\\x47\\x6f\\x5b\\x1f\\x49\\x64\\x56\\x68\\x4f\\x1b\\x44\\x5d\\xbf\\xdb\\xc5\\x9e\\xd3\"\n\"\\xa6\\xb8\\x1f\\xcd\\xb2\\xc3\\xae\\xcb\\x1b\\x0e\\xfb\\xe9\\x67\\x1d\\xa5\\xf7\\x0e\\xd2\\xc8\\xf7\\x02\\x87\\x19\\x9d\\xe0\\x05\\x8d\\x7e\\x83\\x8c\\x80\\x1b\"\n\"\\x51\\x5f\\x71\\x44\\x4c\\x1f\\x9c\\xdd\\x05\\x0e\\xfb\\x42\\xf8\\x96\\xf8\\x0e\\x15\\x90\\xa0\\x8c\\x94\\x98\\x1a\\xd1\\x49\\xbb\\x29\\x3c\\x1d\\x3b\\xd0\\x5b\"\n\"\\xf7\\x09\\xf7\\x29\\xec\\xd8\\xf7\\x0b\\x5a\\x0a\\xa4\\x9d\\x9c\\x44\\x0a\\x85\\x8b\\x83\\x8a\\x83\\x1f\\x0e\\xfc\\x20\\xf8\\x02\\x6f\\x0a\\x0e\\x58\\x1d\\x0e\"\n\"\\xfb\\x42\\xf7\\xb3\\x16\\xf7\\xcb\\xf8\\xa0\\x05\\x30\\x06\\xfb\\x88\\xfc\\x3a\\x5a\\xf8\\x3a\\x05\\x2f\\x06\\xd5\\xfc\\xa0\\x05\\x0e\\xbb\\x3a\\x1d\\x0e\\xfb\"\n\"\\x42\\xf7\\xf2\\xf7\\x9f\\x15\\xf7\\x7d\\xf7\\x95\\x05\\x2a\\x06\\xfb\\x3b\\xfb\\x54\\x33\\xf7\\x54\\x05\\x2e\\x06\\xf7\\x0a\\xfb\\x95\\xfb\\x83\\xfb\\x9f\\x05\"\n\"\\xed\\x06\\xf7\\x42\\xf7\\x5c\\xe5\\xfb\\x5c\\x05\\xe9\\x06\\x0e\\xfb\\x42\\x4d\\x0a\\x0e\\xfb\\x42\\x46\\x1d\\x0e\\xfb\\xe8\\xf8\\x43\\x22\\x1d\\x5c\\x06\\x46\"\n\"\\x8a\\x56\\x58\\x7d\\x3b\\x67\\xfb\\x3a\\x18\\x79\\x32\\x6d\\x64\\x51\\x81\\x7c\\x45\\x18\\xb1\\x85\\x9e\\x73\\x62\\x1a\\x7b\\x88\\x75\\x85\\x6e\\x1e\\x68\\xfb\"\n\"\\x3a\\x05\\x87\\x79\\x89\\x78\\x7a\\x1a\\x5a\\xab\\x6e\\xc1\\x1e\\xba\\x06\\x99\\xcc\\x05\\x7b\\x06\\x65\\x7b\\x95\\xa3\\x95\\x8c\\x96\\x8e\\x97\\x1f\\xb2\\xf7\"\n\"\\x49\\x05\\x8f\\x9e\\x8d\\x9f\\xa1\\x1a\\xbe\\x80\\xa1\\x66\\xa4\\x1e\\xc3\\xa9\\xb1\\xc3\\x99\\xd2\\xb2\\xf7\\x49\\x18\\xbf\\x96\\x9c\\x9a\\xbd\\x1b\\x9b\\x06\"\n\"\\x0e\\xfc\\x32\\xf7\\x93\\xf9\\x6d\\x15\\xfb\\x5d\\xfe\\x41\\x05\\xc7\\x06\\xf7\\x5d\\xfa\\x41\\x05\\x0e\\xfb\\xe8\\x7b\\xfb\\x69\\x15\\xba\\x06\\xcf\\x87\\xbd\"\n\"\\xbc\\x9d\\xe2\\xaf\\xf7\\x3a\\x18\\x99\\xdf\\xad\\xb8\\xc5\\x94\\x9a\\xd1\\x18\\x66\\x91\\x77\\xa2\\xb0\\x1a\\xa0\\x8e\\x9f\\x91\\xaa\\x1e\\xae\\xf7\\x3a\\x05\"\n\"\\x8f\\x9e\\x8d\\x9c\\x99\\x1a\\xbc\\x68\\xac\\x58\\x1e\\x5c\\x06\\x7d\\x4a\\x05\\x9b\\x06\\xb1\\x9b\\x81\\x73\\x81\\x8a\\x80\\x88\\x7f\\x1f\\x64\\xfb\\x49\\x05\"\n\"\\x87\\x78\\x89\\x79\\x7a\\x1a\\x60\\x9a\\x6a\\xac\\x6e\\x1e\\x49\\x6c\\x72\\x67\\x7a\\x31\\x64\\xfb\\x49\\x18\\x57\\x80\\x7a\\x7c\\x59\\x1b\\x7b\\x06\\x0e\\x31\"\n\"\\xf8\\xb2\\xf8\\x2f\\x15\\x57\\x80\\x76\\x74\\x67\\x1b\\x7d\\x7d\\x90\\x97\\x79\\x1f\\x25\\xd0\\x05\\x96\\x7c\\x7a\\x90\\x78\\x1b\\x4b\\x5a\\x58\\x2d\\x72\\x1f\"\n\"\\xbf\\x06\\xbf\\x9b\\xa3\\xa6\\xaa\\x1b\\x95\\x9d\\x84\\x83\\x96\\x1f\\xe0\\x4c\\x05\\x7b\\xa1\\xa7\\x81\\xa3\\x1b\\xb1\\xb2\\xa0\\xad\\xa4\\x1f\\x9d\\xa3\\x94\"\n\"\\xa2\\x92\\xb4\\x08\\x0e\\xfb\\xe9\\xd7\\xfb\\x61\\x15\\xdf\\x06\\xd5\\xf7\\xf2\\xa2\\xf7\\x67\\x05\\x63\\x06\\x48\\xfb\\x67\\x05\\xc8\\xf7\\xa8\\x15\\xdf\\x06\"\n\"\\xa1\\xf2\\x05\\x37\\x06\\x0e\\xf8\\x2b\\xf8\\x63\\x15\\xaf\\x85\\x8c\\x8b\\x96\\x85\\x08\\xa6\\x7d\\x9c\\x6d\\x67\\x1a\\x85\\x8b\\x83\\x8a\\x82\\x1e\\xdf\\x06\"\n\"\\x8c\\x9a\\x05\\x8c\\x9a\\x8c\\x96\\x8e\\x1a\\xc4\\x60\\xc5\\x52\\xa0\\x1e\\x92\\x77\\x7a\\x8e\\x72\\x1b\\x9e\\xe5\\x05\\x63\\x06\\x78\\x31\\x44\\x84\\x59\\x76\"\n\"\\x5b\\x60\\x19\\x43\\x4a\\x5d\\xfb\\x08\\xfb\\x07\\x1a\\x20\\xcc\\x40\\xf2\\x80\\x1e\\x76\\x29\\x05\\xb3\\x06\\xa0\\xec\\xf7\\x1a\\x93\\xd7\\xcb\\xae\\xf7\\x17\"\n\"\\x19\\x37\\x06\\x6c\\x39\\x60\\x66\\x44\\x83\\x08\\x64\\x8e\\x15\\x4f\\x93\\x66\\xbc\\xd1\\x1a\\xe1\\xb0\\xe8\\xc2\\xc0\\x1e\\xa5\\xa4\\xa5\\x98\\xb1\\x92\\x08\"\n\"\\x0e\\xf8\\x53\\xf8\\x0c\\x15\\xfb\\x34\\x06\\x85\\x9f\\x8b\\x8c\\x82\\xa2\\x08\\x7c\\xb5\\x8a\\x91\\xa3\\x1a\\xe6\\xd4\\xd0\\xea\\xd2\\xb8\\x65\\x4f\\x79\\x89\"\n\"\\x7d\\x84\\x72\\x1e\\xe3\\x06\\x92\\xb5\\x8d\\x9d\\xa1\\x1a\\xe5\\x40\\xc7\\xfb\\x03\\xfb\\x27\\xfb\\x1b\\xfb\\x0b\\xfb\\x16\\x72\\x8f\\x7b\\x9c\\x62\\x1e\\x8e\"\n\"\\x85\\x8e\\x83\\x8e\\x83\\x08\\x38\\x06\\x7f\\x54\\x05\\xf7\\x05\\x06\\x94\\x6d\\x8c\\x86\\x7c\\x1a\\x44\\x53\\x44\\xfb\\x0a\\x3e\\x1e\\xb0\\x49\\x05\\xa5\\xba\"\n\"\\xad\\x96\\xb0\\x1b\\xa2\\x9f\\x88\\x83\\x9f\\x1f\\x71\\xcf\\xad\\x82\\xb0\\x1b\\xbc\\xbd\\x9e\\xae\\xb6\\x1f\\x72\\xd1\\x05\\x73\\x60\\x78\\x92\\x0a\\x91\\x90\"\n\"\\x92\\x90\\x92\\x90\\xa6\\x9f\\x18\\xb7\\xad\\x9b\\x9a\\x9a\\x9f\\x08\\xa4\\xaf\\x9d\\xbc\\xac\\x1a\\x8f\\x8a\\x95\\x8a\\x98\\x1e\\x8a\\x96\\x05\\xf7\\x1d\\x06\"\n\"\\x0e\\xfc\\x20\\xf8\\x78\\x34\\x0a\\x0e\\xf8\\xd1\\xf7\\xf6\\x15\\xfb\\x2e\\x06\\xf7\\xa9\\xf7\\xf7\\x05\\x36\\x06\\xfb\\x8c\\xfb\\xd6\\xfb\\x08\\xf7\\xd6\\x05\"\n\"\\x36\\x06\\xf7\\x16\\xfb\\xf7\\x05\\xfb\\x2e\\x06\\x80\\x58\\x05\\xf7\\x43\\x06\\x7a\\x3e\\x05\\xfb\\x42\\x06\\x80\\x58\\x05\\xf7\\x42\\x06\\x66\\xfb\\x43\\x05\"\n\"\\xe3\\x06\\xb0\\xf7\\x43\\x05\\xf7\\x41\\x06\\x95\\xbe\\x05\\xfb\\x40\\x06\\x9c\\xd8\\x05\\xf7\\x40\\x06\\x0e\\xf8\\xcb\\xf8\\x64\\x15\\xfb\\x05\\x06\\xa6\\xd0\"\n\"\\x05\\xdf\\xab\\xb5\\xb7\\xba\\x1b\\x9c\\x96\\x86\\x7c\\x9f\\x1f\\xb9\\xd9\\x05\\x98\\x72\\x73\\x91\\x71\\x1b\\x35\\x37\\x48\\x23\\x60\\x1f\\x60\\x24\\x05\\xfb\"\n\"\\x11\\x27\\x1d\\xf7\\x04\\x06\\xfb\\x39\\xfc\\x31\\x05\\x3d\\x6c\\x65\\x67\\x59\\x1b\\x77\\x7e\\x90\\x99\\x7a\\x1f\\x68\\x35\\x05\\x83\\x9c\\x97\\x89\\xa2\\x1b\"\n\"\\xf7\\x05\\xd9\\xcc\\xf7\\x22\\xc3\\x1f\\xf7\\x32\\xf8\\x21\\x05\\xf7\\x13\\x06\\x0e\\xf8\\xd3\\x21\\x0a\\x8d\\x93\\x8b\\x8b\\x8d\\x94\\x08\\x94\\xa4\\x8c\\x94\"\n\"\\x9e\\x1a\\xdb\\x4c\\xc2\\x31\\xfb\\x04\\x24\\x31\\x28\\x6d\\x93\\x73\\x9d\\x74\\x1e\\x4f\\x6b\\x7f\\x83\\x74\\x71\\x08\\x6f\\x6b\\x77\\x59\\x62\\x1a\\x61\\x9c\"\n\"\\x6c\\xb9\\x64\\x1e\\xf7\\x25\\xfb\\x10\\x05\\xa7\\x73\\x95\\x78\\x6e\\x1a\\x53\\x58\\x5d\\x4e\\x58\\x67\\xab\\xb8\\x98\\x8d\\x96\\x91\\xa0\\x1e\\x36\\x06\\x83\"\n\"\\x71\\x88\\x7d\\x76\\x1a\\x37\\xcb\\x55\\xed\\xcb\\xc6\\xa4\\xb8\\xb3\\x1e\\xad\\xb2\\x9f\\xba\\xb4\\x1a\\xad\\x83\\xa2\\x75\\xa9\\x1e\\xb3\\x98\\xab\\x9f\\xa2\"\n\"\\xa6\\x08\\xa9\\xae\\xa1\\xc4\\xb7\\x1a\\xa8\\x83\\xa3\\x7b\\xa1\\x1e\\x81\\x97\\x82\\x94\\x69\\xa6\\xfb\\x13\\xf0\\x18\\x69\\xa6\\x83\\x97\\xa2\\x1a\\xbf\\xbc\"\n\"\\xba\\xc3\\xbe\\xab\\x6d\\x5c\\x7a\\x88\\x7d\\x84\\x77\\x1e\\xfb\\x93\\xfb\\xbb\\x15\\x69\\xa8\\x81\\x9e\\xab\\x1a\\xbb\\xa4\\xaa\\xd1\\xb3\\x1e\\xf7\\x17\\x21\"\n\"\\x05\\xac\\x71\\x9f\\x68\\x6d\\x1a\\x5b\\x6a\\x61\\x4b\\x6a\\x1e\\x0e\\xf8\\xa2\\xf7\\x53\\x15\\x60\\xc1\\x05\\xa9\\xa8\\xa3\\xc7\\xba\\x1a\\xa5\\x88\\x9a\\x81\"\n\"\\x9b\\x1e\\xd0\\xc3\\x5c\\xc5\\x47\\x53\\x05\\x9d\\x77\\x68\\x96\\x65\\x1b\\x69\\x63\\x80\\x7b\\x6f\\x1f\\x5e\\xc5\\x49\\x53\\xb5\\x54\\x77\\x70\\x80\\x7b\\x89\"\n\"\\x88\\x19\\x7b\\x6c\\x82\\x6b\\x6c\\x1a\\x72\\x90\\x75\\x94\\x79\\x1e\\x4f\\x5a\\xb7\\x51\\xcc\\xbf\\x05\\x7a\\x9f\\xa9\\x83\\xb3\\x1b\\xb2\\xb1\\x96\\x9e\\xa7\"\n\"\\x1f\\xb5\\x56\\x05\\x34\\xf7\\xcb\\x15\\xbd\\xb2\\x66\\x5c\\x49\\x4b\\x4e\\x46\\x58\\x64\\xb0\\xbc\\xcc\\xcc\\xc7\\xd0\\x1f\\x0e\\xfc\\x77\\xf7\\x5a\\x9a\\x0a\"\n\"\\x0e\\xfb\\xe9\\xf7\\x83\\xf8\\x71\\x15\\xa1\\xf2\\x05\\x5c\\x06\\x95\\xc5\\xa0\\xa6\\xae\\x90\\x93\\xb2\\x18\\x4f\\x86\\x5f\\x5b\\x7a\\x3c\\x76\\x27\\x18\\xf7\"\n\"\\x92\\x16\\xa1\\xf2\\x05\\x5b\\x06\\x96\\xc5\\x9f\\xa6\\xaf\\x90\\x93\\xb2\\x18\\x4f\\x86\\x5f\\x5b\\x7a\\x3c\\x76\\x27\\x18\\x0e\\xf7\\x27\\x93\\x0a\\xf7\\x4e\"\n\"\\x32\\x15\\xf7\\x11\\xfb\\x0d\\x9d\\xdd\\x35\\xde\\xf7\\x0d\\xdf\\x9d\\xde\\xfb\\x45\\xfb\\x0e\\x05\\x0e\\xfb\\xe9\\xf7\\x20\\x93\\x0a\\x0e\\xfb\\xe9\\xf7\\xc7\"\n\"\\xf7\\xd1\\x99\\x0a\\x0e\\xfb\\x42\\xf8\\x00\\xf8\\xa0\\x3b\\x1d\\xf7\\x59\\xce\\x8e\\x0a\\xfb\\x42\\xf8\\x06\\xf8\\xa0\\x3b\\x1d\\xf7\\x79\\xf7\\xa4\\xdb\\x1d\"\n\"\\xf9\\x08\\xf7\\xcc\\x15\\xfc\\xcb\\x27\\x1d\\xf8\\xcb\\x06\\x0e\\xf9\\x00\\xf8\\x89\\x15\\xfb\\x56\\xb5\\x0a\\xfb\\x56\\x06\\x7a\\x3a\\x05\\xf7\\x55\\x06\\xfb\"\n\"\\x12\\xfc\\xe9\\x05\\xe3\\x06\\xf7\\x12\\xf8\\xe9\\x05\\xf7\\x57\\x06\\x0e\\xf9\\x00\\xf8\\x89\\x15\\xfb\\x53\\xb5\\x0a\\xfb\\x52\\x06\\x7a\\x3a\\x05\\xf7\\x52\"\n\"\\x06\\x49\\xfb\\xc8\\x05\\xfb\\x52\\x06\\x7a\\x3a\\x05\\xf7\\x52\\x06\\x5f\\xfb\\x64\\x05\\xe3\\x06\\xb7\\xf7\\x64\\x05\\xf7\\x53\\x06\\x9c\\xdc\\x05\\xfb\\x53\"\n\"\\x06\\xcd\\xf7\\xc8\\x05\\xf7\\x53\\x06\\x0e\\xfc\\x20\\x58\\x0a\\xfb\\x1d\\xf9\\x39\\x22\\x1d\\xfb\\x8e\\x06\\xfb\\x26\\xfb\\x1c\\xfb\\x21\\xfb\\x2c\\xfb\\x00\"\n\"\\xc8\\x49\\xf3\\x88\\x1f\\x2e\\xfc\\x49\\x05\\xcb\\x06\\xf7\\x47\\xf9\\xdf\\x05\\xde\\x06\\xfb\\x47\\xfd\\xdf\\x05\\xcb\\x06\\xf7\\x47\\xf9\\xdf\\x05\\xc3\\x06\"\n\"\\x0e\\xfb\\xd8\\xf7\\xa6\\xf8\\x6a\\x15\\x3b\\x41\\x42\\x3b\\x55\\xb7\\x60\\xc3\\xdd\\xd5\\xd4\\xda\\xc5\\x61\\xb3\\x4f\\x1f\\x0e\\xfc\\x58\\xe1\\xf2\\x47\\x1d\"\n\"\\x0e\\xfb\\xe9\\xd0\\xf2\\x47\\x1d\\xcc\\x16\\x69\\x1d\\x0e\\xfb\\xe9\\xf7\\x5b\\xf9\\x58\\x47\\x1d\\xcc\\x16\\x69\\x1d\\x0e\\xf7\\xd3\\xf7\\xd1\\x99\\x0a\\xf7\"\n\"\\x6e\\xe4\\x15\\xfb\\x13\\xf7\\x0d\\x79\\x39\\xe3\\x38\\xfb\\x0f\\x37\\x79\\x38\\xf7\\x47\\xf7\\x0e\\x05\\x0e\\xf7\\xda\\xf7\\x85\\xf2\\x37\\x0a\\xf3\\x06\\xf7\"\n\"\\xf7\\xf2\\x37\\x0a\\xf3\\x06\\xf7\\xf7\\xf2\\x23\\x0a\\xf7\\xda\\xf9\\x1d\\xf9\\x76\\x15\\xfc\\xc0\\xfd\\x8a\\x05\\xcd\\x06\\xf8\\xc0\\xf9\\x8a\\x05\\xfc\\x25\"\n\"\\x7e\\x51\\x0a\\xf7\\x86\\xfc\\x1e\\x51\\x0a\\xf8\\x0a\\xc2\\x51\\x0a\\x0e\\x4c\\xf7\\xec\\xf7\\xd9\\x15\\x81\\x5c\\x7d\\x59\\x7b\\x78\\x41\\x54\\x19\\x5b\\x66\"\n\"\\x72\\x74\\x77\\x71\\x08\\x6b\\x61\\x78\\x57\\x5d\\x1a\\x6b\\x98\\x6a\\xa1\\x72\\x1e\\x65\\xac\\xb8\\x7a\\xce\\x1b\\xf7\\x24\\xe5\\xda\\xf7\\x2f\\xaa\\x1f\\x36\"\n\"\\x06\\xfb\\x02\\x75\\x5b\\x5c\\x33\\x1b\\x4a\\x61\\xad\\xc0\\xc1\\xab\\xbc\\xd3\\xc4\\x1f\\xf4\\xdb\\x9d\\xa1\\x99\\xc8\\x97\\xc2\\x18\\x45\\xeb\\x15\\xe5\\x06\"\n\"\\xa1\\xf2\\x05\\x31\\x06\\x0e\\xfb\\xe9\\xf7\\xb1\\xf9\\x78\\x2e\\x0a\\xfb\\xe9\\xf7\\xee\\xf9\\x78\\x23\\x1d\\xfb\\xe9\\xf7\\xa6\\xf9\\x79\\x24\\x1d\\xfb\\xe9\"\n\"\\xf8\\x36\\xf9\\x63\\x46\\x0a\\x77\\x1b\\x81\\x70\\x91\\x94\\x71\\x50\\x0a\\xb8\\xb5\\x31\\x1d\\xfb\\xe9\\xa5\\x0a\\xfb\\xe9\\xf7\\x3e\\xf9\\x6d\\x59\\x1d\\xfb\"\n\"\\xe9\\xf8\\x06\\xf9\\x5f\\x23\\x0a\\xfb\\xe9\\xf7\\xb1\\x53\\x0a\\xfb\\xe9\\xf7\\xd8\\xf9\\x86\\x6f\\x1d\\x83\\x5f\\x15\\x9f\\x9a\\x7d\\x77\\x70\\x7a\\x1d\\xa6\"\n\"\\x1f\\x0e\\xfb\\xe9\\xf7\\x39\\x16\\x59\\x2f\\x8a\\x1d\\xb8\\xcb\\x57\\x0a\\xa9\\xc3\\x05\\x0e\\xfb\\xe9\\xf7\\x6f\\xf9\\x78\\x40\\x0a\\xfb\\xe9\\xf7\\x39\\x16\"\n\"\\x68\\x7e\\x7a\\x82\\x78\\x7f\\x08\\x65\\x72\\x76\\x69\\x66\\x1a\\x5b\\xbc\\x70\\xe0\\xa7\\x9e\\x8e\\x92\\xa0\\x1e\\x94\\xb8\\x05\\x84\\x78\\x73\\x88\\x70\\x1b\"\n\"\\x64\\x70\\x9d\\xa5\\x9b\\x92\\x9e\\x98\\x9a\\x1f\\x9c\\x9f\\x99\\x95\\xbe\\xa4\\x92\\x8e\\x93\\x8f\\x92\\x8f\\x08\\x0e\\xfb\\xe9\\xf7\\xe3\\xf8\\xe4\\x2a\\x1d\"\n\"\\xf7\\xda\\xca\\x1d\\xf7\\xda\\x6d\\x0a\\x0e\\xfb\\xc4\\xf8\\x2a\\xf7\\xf6\\x15\\xfb\\xb4\\x06\\x80\\x58\\x05\\xf7\\xb4\\x06\\xb0\\xf7\\x26\\x15\\x83\\x8a\\x05\"\n\"\\x8a\\x87\\x88\\x8b\\x89\\x1b\\x82\\x83\\x91\\x93\\x8d\\x8b\\x8d\\x8c\\x8e\\x1f\\xb4\\xf7\\x52\\x05\\x8c\\x8e\\x8b\\x93\\x92\\x1a\\xb4\\x63\\xa4\\x4b\\x57\\x61\"\n\"\\x7e\\x73\\x72\\x1e\\x7b\\x7c\\x85\\x7e\\x7f\\x60\\x08\\xc3\\x06\\xb1\\x96\\xa5\\x9e\\xb6\\x1b\\xa1\\xa2\\x85\\x85\\x91\\x1f\\x95\\x7f\\x8c\\x88\\x83\\x1a\\x86\"\n\"\\x8a\\x86\\x8a\\x86\\x1e\\x89\\x83\\x84\\x72\\x84\\x88\\x5f\\x86\\x19\\x3c\\x83\\x71\\x85\\x6e\\x79\\x08\\x6b\\x77\\x79\\x6b\\x66\\x1a\\x58\\xad\\x6e\\xc8\\xb5\"\n\"\\xb0\\x99\\xa8\\xa9\\x1e\\x6f\\x8e\\x9a\\x7c\\xa8\\x1b\\x92\\x8c\\x8b\\x8f\\x9d\\x1f\\x8c\\x90\\x8c\\x8c\\x8f\\x1f\\x45\\xf7\\x02\\x15\\x6a\\x85\\x56\\x6a\\x5e\"\n\"\\x1b\\x67\\x7a\\x97\\xa4\\x9c\\x96\\x9f\\x9c\\x95\\x1f\\x9d\\x96\\x98\\x8e\\xc4\\x93\\xa3\\x8e\\x95\\x8d\\x9c\\x91\\x08\\x0e\\xf7\\x99\\xf7\\xcf\\x15\\xf7\\x58\"\n\"\\xf7\\x0a\\x9c\\xda\\xfb\\x58\\xfb\\x0a\\xd2\\xf7\\xe3\\x05\\x2d\\x06\\x3b\\xfc\\x0a\\x38\\x58\\x7a\\x3c\\xde\\xbe\\x51\\xfb\\xa8\\x05\\xf8\\x58\\x2f\\x0a\\xfb\"\n\"\\xfb\\x06\\x0e\\xf3\\x65\\x0a\\x0e\\xf7\\xda\\xf9\\x43\\xf7\\xdb\\x15\\xf7\\xda\\x2f\\x0a\\xfb\\xdb\\x06\\xbe\\xf7\\x82\\x05\\xf7\\xe4\\x20\\x1d\\xfc\\x42\\x06\"\n\"\\x7b\\x3f\\x05\\xc8\\x6c\\x58\\xa6\\x37\\x1b\\x2e\\x28\\x5b\\x3e\\x46\\x1f\\x3e\\x34\\x52\\xfb\\x3e\\xfb\\x20\\x1a\\xfb\\x26\\xe7\\x2b\\xf7\\x1f\\xe2\\xca\\xa9\"\n\"\\xd1\\xc4\\x1e\\x7b\\x3e\\x05\\xf8\\x46\\x20\\x1d\\xfb\\xe8\\x06\\x43\\xef\\x15\\x38\\x52\\x46\\x62\\x37\\x1b\\x2b\\x50\\xc9\\xf1\\xeb\\xab\\xf7\\x1c\\xb2\\xd0\"\n\"\\x1f\\xe5\\xbf\\xd3\\xba\\xe3\\x1b\\xe3\\xbe\\x64\\x39\\x9e\\x1f\\x0e\\xfb\\xc9\\xf8\\x18\\xf7\\xf6\\x15\\xfb\\x9b\\x06\\x80\\x58\\x05\\xf7\\x9b\\x06\\x62\\xf8\"\n\"\\x4b\\x15\\x54\\x57\\x71\\x5f\\x6a\\x1f\\x70\\x66\\x77\\x45\\x53\\x1a\\x49\\xb9\\x5f\\xce\\xc6\\xbd\\xa4\\xb9\\xac\\x1e\\xa6\\xb1\\xa0\\xcf\\xbe\\x1a\\xac\\x7c\"\n\"\\xb1\\x77\\x9d\\x1e\\x9b\\x79\\x6d\\x95\\x6a\\x1b\\x82\\x57\\x15\\xb3\\xa4\\x6f\\x5e\\x2e\\x58\\x42\\x4a\\x61\\x72\\xa6\\xba\\xe8\\xbf\\xd3\\xcd\\x1f\\x0e\\xf7\"\n\"\\x6b\\x7b\\x1d\\x0e\\xfc\\x20\\x2d\\x0a\\x0e\\xfc\\x58\\xf7\\x83\\xf8\\x32\\x15\\xce\\xf7\\xcf\\x21\\x1d\\x42\\xfb\\xef\\x42\\x5e\\x7d\\x48\\xd3\\xb7\\x48\\xfb\"\n\"\\xce\\x20\\x0a\\xd5\\xf7\\xef\\xd4\\xb5\\x99\\xce\\x05\\x0e\\x4c\\x82\\x1d\\x0e\\xf7\\xa2\\xf9\\xda\\xf7\\x33\\x15\\x45\\x67\\x56\\x68\\x49\\x1b\\x3d\\x5a\\xba\"\n\"\\xd6\\x9f\\x8d\\x98\\x90\\xa4\\x1f\\xf8\\x16\\x06\\x99\\xd9\\x8e\\xa3\\xab\\x1a\\xec\\x38\\xd5\\xfb\\x00\\x38\\x30\\x60\\x4f\\x60\\x1e\\xce\\x6e\\x50\\xaf\\x37\"\n\"\\x1b\\x2c\\x3c\\x62\\x3f\\x59\\x1f\\x5e\\x47\\x6b\\xfb\\x00\\x3a\\x1a\\x56\\x9f\\x58\\xad\\x68\\x1e\\x6a\\xab\\xb9\\x7b\\xc5\\x1b\\xe2\\xda\\xb2\\xcf\\xbd\\x1f\"\n\"\\x90\\x7f\\x8e\\x85\\x94\\x80\\x08\\x54\\xb5\\xbb\\x74\\xd0\\x1b\\xf7\\x0d\\xf1\\xd4\\xf7\\x01\\xab\\x1f\\xfc\\xbb\\xf7\\xc3\\x15\\xd3\\xb7\\x5b\\x3b\\x50\\x7b\"\n\"\\x47\\x71\\x5b\\x1f\\x48\\x66\\x52\\x65\\x49\\x1b\\x46\\x60\\xbb\\xda\\xf7\\x31\\xe2\\xf7\\x10\\xf7\\x03\\x1f\\xf7\\x66\\xfb\\x30\\x15\\xe8\\xa6\\xd5\\xca\\xdd\"\n\"\\x1b\\xd1\\xb7\\x5b\\x3f\\x81\\x8a\\x83\\x89\\x7d\\x1f\\x0e\\x4c\\xf7\\xed\\xf7\\xf1\\x15\\x9b\\x06\\xc0\\xa2\\x88\\x81\\xa2\\x1f\\xb0\\x7c\\x9f\\x6c\\x60\\x1a\"\n\"\\x24\\x31\\x39\\xfb\\x06\\x1e\\x6c\\x06\\x81\\x06\\x7a\\x3d\\x05\\x88\\x9d\\x96\\x8a\\x9e\\x1b\\xeb\\xde\\xb0\\xcf\\xc3\\x1f\\xb4\\xbb\\xa7\\xd5\\xc4\\x1a\\xb4\"\n\"\\x76\\xb2\\x67\\xa4\\x1e\\x77\\x99\\x7c\\x92\\x68\\x96\\x08\\xf6\\xab\\xc1\\xc9\\xe6\\x1a\\xe2\\x43\\xc3\\xfb\\x03\\x47\\x48\\x77\\x68\\x57\\x1e\\x5c\\x6b\\x71\"\n\"\\x63\\x7d\\x4b\\xfb\\x06\\xfc\\xae\\x18\\xde\\x06\\xf7\\x06\\xf8\\xae\\x05\\xd0\\x9a\\xcc\\xb7\\xe2\\x1b\\xd2\\xb9\\x68\\x56\\x41\\x3d\\x51\\x27\\x1f\\x81\\x06\"\n\"\\x0e\\xfb\\xe9\\xf7\\xa5\\xf8\\xd8\\x15\\x4c\\xfb\\xbc\\x05\\xcb\\x06\\xe5\\xf8\\x3d\\x05\\x5f\\x06\\x6a\\x4a\\x81\\x85\\x30\\x7f\\x81\\x5d\\x18\\x0e\\x31\\xf7\"\n\"\\x06\\xf8\\x0d\\x15\\x7c\\x43\\x05\\xf8\\x47\\x06\\x5d\\xfb\\x6f\\x05\\xd1\\x06\\xc8\\xf7\\xb7\\x05\\x0e\\xf8\\xbe\\xbc\\x15\\x89\\x84\\x87\\x8a\\x85\\x1b\\x72\"\n\"\\x7e\\x95\\xa0\\x8f\\x8b\\x8f\\x8c\\x8e\\x1f\\xe8\\xf8\\x48\\x21\\x1d\\x4c\\xfb\\xbd\\x05\\x20\\x74\\x44\\x45\\x35\\x1b\\x55\\x6b\\xa9\\xbd\\x95\\x8c\\x96\\x8d\"\n\"\\x94\\x1f\\xd8\\xf8\\x00\\x21\\x1d\\xfb\\x32\\xfd\\x7c\\x20\\x0a\\xbb\\xf7\\x76\\x05\\x76\\xa0\\xa2\\x83\\xb0\\x1b\\xd1\\xc6\\xa6\\xc3\\xc1\\x1f\\x89\\x83\\x8a\"\n\"\\x84\\x87\\x1a\\x5d\\xa0\\x79\\xc1\\x99\\x90\\x8c\\x90\\xa1\\x1e\\x8d\\x90\\x8d\\x8c\\x91\\x1f\\x0e\\xf7\\xda\\xf8\\x42\\xf9\\x36\\x15\\xf7\\x2d\\x06\\x96\\xc2\"\n\"\\x05\\xfc\\x0a\\x06\\x7f\\x54\\x05\\xf7\\x2e\\x06\\x3a\\xfc\\x12\\x05\\xcf\\x06\\xf8\\x65\\x16\\xf7\\x57\\xf7\\xe9\\x42\\xfb\\xe9\\x05\\xce\\x06\\xe8\\xf8\\x49\"\n\"\\x05\\x31\\x06\\xfb\\x65\\xfb\\xfe\\x54\\xf7\\xfe\\x05\\x2d\\x06\\x2e\\xfc\\x49\\x05\\xce\\x06\\xd4\\xf7\\xe9\\xbb\\xfb\\xe9\\x05\\x0e\\xbb\\x86\\x1d\\xf7\\x34\"\n\"\\xce\\x1d\\x60\\x06\\x6a\\x48\\x7e\\x82\\x31\\x84\\x82\\x5d\\x18\\xf8\\xdd\\xf7\\x15\\x35\\x0a\\xa5\\xfd\\x1f\\x15\\xfb\\x7a\\x06\\x9f\\xb1\\xa1\\x9e\\xbc\\xa2\"\n\"\\xd0\\xab\\x18\\xdc\\xaf\\xb8\\xc3\\xc9\\x1a\\xca\\x5d\\xb1\\x3f\\x28\\x50\\x5a\\x24\\x72\\x1e\\xc9\\x06\\x94\\xaa\\x91\\x9b\\x96\\x98\\x08\\xa4\\x9e\\xaa\\x99\"\n\"\\xac\\x1b\\xb4\\xa8\\x73\\x67\\x66\\x70\\x6a\\x59\\x73\\x1f\\x4a\\x6c\\x21\\x59\\x67\\x63\\x72\\x2a\\x19\\xf7\\xc4\\x06\\x0e\\x31\\xf9\\x05\\xf8\\x41\\x15\\xfb\"\n\"\\x63\\x06\\xb7\\xf7\\x60\\x05\\x44\\x06\\x60\\xb1\\x0a\\x5e\\xfb\\x64\\x05\\xd2\\x06\\xb7\\xf7\\x64\\x05\\xf7\\x63\\x06\\x4e\\xfb\\xb1\\x15\\xfc\\x78\\x27\\x1d\"\n\"\\xf8\\x78\\x06\\x0e\\x84\\xf7\\x76\\xf7\\x53\\xa4\\x0a\\xf6\\x4d\\xc1\\xfb\\x0f\\x1e\\xfb\\x64\\x06\\xa4\\xf7\\x0a\\x05\\x2d\\x22\\x0a\\xc5\\xf7\\xa5\\x15\\xc1\"\n\"\\xf7\\x94\\x05\\xf7\\x57\\xbe\\x1d\\xf7\\x34\\xce\\x1d\\x61\\x06\\x69\\x48\\x7e\\x82\\x32\\x84\\x81\\x5d\\x18\\xf8\\xf5\\xf7\\x15\\x35\\x0a\\xfb\\x02\\xfc\\xf5\"\n\"\\x15\\x76\\x27\\x05\\xc9\\x06\\xa0\\xa9\\x0a\\xfb\\x98\\xfb\\x9e\\x7e\\x50\\x05\\xf7\\x5b\\xc0\\x15\\xfb\\x15\\x06\\xf7\\x39\\xf7\\x3e\\x05\\x0e\\x31\\xd2\\x1d\"\n\"\\xfb\\xa3\\x2e\\xc0\\x1d\\xd5\\xf7\\xfa\\xc0\\x1d\\x0e\\xfc\\x32\\xf7\\x93\\xf9\\x6d\\xb6\\x0a\\xfb\\x43\\xfc\\xb0\\xb6\\x0a\\x0e\\xfb\\xa6\\xf7\\xe7\\xf9\\x42\"\n\"\\x15\\x38\\x47\\x47\\x38\\x38\\xcf\\x46\\xdd\\xe0\\xcf\\xce\\xe0\\xde\\x47\\xcf\\x37\\x1f\\x8c\\x60\\x15\\xc5\\xbb\\x5b\\x4f\\x4e\\x5b\\x5b\\x4f\\x52\\x5b\\xbd\"\n\"\\xc6\\xc6\\xbb\\xbc\\xc6\\x1f\\x0e\\xa5\\x1d\\x3f\\x3f\\x62\\x51\\x6d\\x1e\\xc8\\xf7\\xb5\\x05\\x37\\x06\\xf7\\x40\\xfb\\x9f\\xa1\\x1d\\xf7\\x34\\xf7\\x89\\xf8\"\n\"\\x70\\x67\\x0a\\xf8\\xa6\\xf7\\x4a\\x35\\x0a\\xfb\\x20\\xfc\\xf5\\x15\\x75\\x27\\x05\\xc9\\x06\\xa1\\xa9\\x0a\\xfb\\x99\\xfb\\x9e\\x7f\\x50\\x05\\xf7\\x5b\\xc0\"\n\"\\x15\\xfb\\x16\\x06\\xf7\\x3a\\xf7\\x3e\\x05\\x0e\\xfb\\xe9\\xf8\\x13\\xf7\\xec\\x15\\xfb\\x7b\\x06\\x9e\\xaa\\xa1\\x9c\\xc1\\xa6\\xcf\\xac\\x18\\xde\\xb4\\xb4\"\n\"\\xbd\\xc7\\x1a\\xcc\\x5c\\xb4\\x3f\\x28\\x54\\x5c\\x20\\x73\\x1e\\xca\\x06\\xd0\\x9c\\xab\\xa9\\xc4\\x1b\\xb4\\xa5\\x73\\x67\\x68\\x6f\\x69\\x5c\\x75\\x1f\\x4c\"\n\"\\x6c\\xfb\\x02\\x53\\x70\\x6c\\x6f\\x26\\x19\\xf7\\xc0\\x06\\x0e\\xca\\xf7\\xe9\\xf7\\xd9\\x15\\xf7\\x1a\\x06\\xaf\\x9d\\x7e\\x70\\x82\\x89\\x7f\\x88\\x80\\x1f\"\n\"\\x7e\\x53\\x8a\\x88\\x71\\x1a\\x80\\x8c\\x86\\x8e\\x7f\\x1e\\xd9\\x06\\x90\\xa4\\x05\\x82\\x93\\x88\\x92\\x99\\x1a\\x96\\x8d\\x96\\x90\\xab\\x1e\\x91\\xa8\\x8d\"\n\"\\x9c\\x95\\x1a\\xa6\\x85\\x96\\x74\\x9d\\x1e\\xae\\xa0\\x9a\\x99\\x97\\xa2\\x08\\x96\\xa1\\x92\\xa9\\xa5\\x1a\\xc8\\x65\\xa7\\x3a\\x1e\\xfb\\x62\\x06\\x2d\\xfc\"\n\"\\x51\\x05\\xd1\\x06\\xc0\\xf7\\x8c\\x15\\xa7\\xf7\\x1a\\x05\\xf7\\x15\\x06\\xb7\\x9e\\x7e\\x6a\\x76\\x83\\x73\\x80\\x7c\\x1f\\x77\\x7b\\x76\\x83\\x68\\x1b\\xb9\"\n\"\\xf7\\xf6\\x8b\\x1d\\x31\\xf8\\xed\\xf7\\xa1\\x15\\xfc\\x8d\\x27\\x1d\\xf8\\x8d\\x06\\x0e\\xf7\\x8f\\xf8\\xc8\\x15\\xef\\xb8\\xaf\\x6a\\x9b\\x7a\\xab\\x61\\x19\"\n\"\\x99\\x6f\\x7f\\x8e\\x71\\x1b\\x36\\x3d\\x62\\x45\\x5b\\x1f\\x5e\\x4a\\x6a\\xfb\\x01\\x36\\x1a\\x56\\xa0\\x58\\xad\\x69\\x1e\\x6b\\xac\\xba\\x7a\\xc5\\x1b\\xe7\"\n\"\\xd9\\xb3\\xd7\\xc1\\x1f\\xb8\\xc9\\xad\\xf7\\x02\\xdd\\x1a\\xf6\\x58\\xeb\\x22\\xe5\\x1e\\xea\\xb4\\x64\\xb1\\x28\\x60\\x05\\x8e\\x87\\x88\\x8d\\x8a\\x1b\\x7f\"\n\"\\x94\\x7f\\x93\\x7e\\x94\\x87\\x8e\\x7f\\x93\\x78\\x96\\x85\\x8f\\x83\\x90\\x83\\x90\\x61\\x5e\\x18\\x97\\x82\\x97\\x83\\x8f\\x89\\x9a\\x81\\x95\\x85\\x8d\\x89\"\n\"\\x8e\\x89\\x93\\x84\\x94\\x83\\x32\\x62\\x18\\xf7\\x2c\\xfb\\x21\\x15\\xd5\\xb6\\x5c\\x39\\x4f\\x0a\\x0e\\x31\\xf8\\xa5\\xf8\\x3f\\x15\\xfb\\x46\\xfb\\x26\\xfb\"\n\"\\x07\\xf7\\x25\\x4f\\x5a\\xf7\\x07\\xfb\\x26\\xfb\\x46\\xfb\\x27\\xb2\\x5a\\xf7\\x46\\xf7\\x26\\xf7\\x08\\xfb\\x27\\xc8\\xbd\\xfb\\x09\\xf7\\x27\\xf7\\x46\\xf7\"\n\"\\x26\\x05\\x0e\\xfb\\xe9\\xf7\\x77\\xf8\\x6e\\x15\\x8c\\x9a\\x92\\x8b\\x94\\x1b\\xbd\\xa7\\x79\\x6b\\x4f\\x5f\\x63\\x4a\\x62\\x70\\xa1\\xad\\x90\\x8b\\x93\\x8c\"\n\"\\x93\\x1f\\x8c\\x97\\x05\\x4b\\x06\\x89\\x76\\x8a\\x82\\x80\\x1a\\x49\\xb7\\x66\\xdb\\xf4\\xd9\\xd1\\xe9\\xac\\x7e\\xa1\\x6c\\x9a\\x1e\\xbd\\xab\\x9e\\xaa\\xbf\"\n\"\\x1a\\xc2\\x5d\\xae\\x44\\x57\\x5f\\x79\\x69\\x6c\\x1e\\x77\\x76\\x80\\x74\\x7f\\x5b\\x08\\xca\\x06\\x92\\xaa\\x90\\x97\\x94\\x96\\x08\\xa2\\x9c\\xa6\\x97\\xab\"\n\"\\x1b\\xb2\\xa2\\x79\\x6e\\x54\\x6a\\x72\\x41\\x1f\\x87\\x06\\x7f\\x06\\x0e\\xca\\xf9\\x11\\xf8\\x49\\x15\\xf5\\x89\\x61\\xbc\\x31\\x1b\\x47\\x4e\\x6d\\x53\\x5b\"\n\"\\x1f\\x5b\\x51\\x6e\\x3a\\x40\\x1a\\x24\\xc4\\x4c\\xe9\\xc6\\xbd\\xa2\\xba\\xb6\\x1e\\xa5\\xa7\\x9b\\xa7\\xa3\\xc7\\x08\\x44\\x06\\x3a\\x6d\\x5d\\x60\\x54\\x1b\"\n\"\\x52\\x65\\xb8\\xcf\\xc0\\x9c\\xc6\\xa7\\xb6\\x1f\\xbb\\xab\\xb5\\xa5\\xbb\\x1b\\xbf\\xa2\\x70\\x49\\x8e\\x1f\\x67\\xf7\\xc5\\x8b\\x1d\\x84\\x28\\x1d\\xdc\\xf7\"\n\"\\xc9\\x23\\x1d\\x84\\x28\\x1d\\x97\\xf7\\xca\\x41\\x0a\\x0e\\x84\\x28\\x1d\\xa6\\xf7\\xb0\\x15\\x23\\x06\\x75\\xa1\\x0a\\x75\\x24\\x05\\xf3\\x06\\x0e\\x84\\x28\"\n\"\\x1d\\x94\\xf7\\xc9\\x24\\x0a\\x0e\\x84\\x28\\x1d\\xc6\\x9d\\x1d\\x0e\\x84\\x28\\x1d\\xf7\\x2d\\xf7\\xb4\\x15\\x6e\\x79\\x81\\x83\\x77\\x1b\\x81\\x70\\x91\\x94\"\n\"\\x71\\x50\\x0a\\xb8\\xb5\\x31\\x1d\\xbb\\xf8\\x04\\x74\\x15\\xf7\\x42\\x8d\\xf7\\x06\\xe4\\xda\\xf7\\x5a\\x8f\\x1d\\x3c\\x2c\\x5a\\xfb\\x1d\\xfb\\x12\\x1a\\x35\"\n\"\\xa9\\x40\\xc2\\x5a\\x1e\\xae\\x6c\\xa8\\x7f\\xce\\x81\\x65\\x44\\x18\\x60\\x1d\\x92\\xa1\\x62\\x33\\x1d\\xbe\\xa7\\x83\\xb2\\x1b\\xdf\\xc8\\xb8\\xcb\\xa7\\x6d\"\n\"\\xa2\\x66\\x86\\x87\\x8b\\x89\\x7f\\x1f\\x0e\\x84\\xf8\\xda\\xfa\\x3f\\x15\\xfb\\x14\\xfb\\x28\\x05\\xc8\\x06\\xf7\\x47\\xf7\\x28\\x05\\xfc\\x4b\\xfc\\xf3\\x3d\"\n\"\\x0a\\x84\\xf8\\x83\\xfa\\x40\\x4b\\x1d\\xfb\\xe3\\xfc\\xf4\\x3d\\x0a\\x84\\xf8\\x8d\\xfa\\x26\\x4a\\x1d\\xfc\\x19\\xfc\\x73\\x3d\\x0a\\x84\\xf8\\x84\\xfa\\x3f\"\n\"\\x70\\x1d\\xfb\\xcc\\xfc\\x5f\\x3d\\x0a\\xfc\\x20\\x29\\x1d\\xf7\\x41\\x55\\x0a\\xfc\\x20\\x29\\x1d\\xf0\\x64\\x1d\\xfc\\x20\\x29\\x1d\\xf7\\x04\\xfa\\x1f\\x2c\"\n\"\\x0a\\xfc\\x20\\x29\\x1d\\xf7\\x04\\xfa\\x3f\\x2e\\x0a\\xbb\\x2b\\x0a\\xa2\\xfa\\x2a\\x98\\x0a\\x72\\x6d\\x7c\\x76\\x7a\\x1f\\x7f\\x7c\\x83\\x7a\\x7f\\x68\\x08\"\n\"\\xc1\\x06\\xa8\\xa0\\x91\\x8f\\xa1\\x1b\\x91\\x42\\x1d\\xcb\\x9d\\x87\\xa0\\x1b\\xb8\\xb5\\x31\\x1d\\xf3\\xf9\\x01\\xfa\\x3f\\x2c\\x1d\\xfb\\x58\\xfb\\x5a\\x63\"\n\"\\x1d\\x70\\xd7\\x5e\\x28\\x0a\\x0e\\xf3\\xf8\\xae\\xfa\\x40\\x41\\x0a\\x2c\\xfb\\x5b\\x63\\x1d\\x70\\xd7\\x5e\\x28\\x0a\\x0e\\xf3\\xf8\\xba\\xfa\\x26\\x30\\x1d\"\n\"\\xfb\\x2b\\x45\\x15\\xfb\\x05\\x2a\\x61\\x36\\x3a\\x1f\\x32\\x2f\\x56\\xfb\\x17\\xfb\\x14\\x1a\\x34\\xa6\\x3f\\xb9\\x5d\\x1e\\x5b\\xbb\\xdc\\x6e\\xe0\\x1b\\xe9\"\n\"\\xe0\\xa6\\xbd\\xcc\\x1f\\xf7\\x09\\xe5\\xd7\\xf7\\x36\\xf7\\x32\\x1a\\xda\\x70\\xd7\\x5e\\x28\\x0a\\x0e\\xf3\\xf8\\xae\\xfa\\x3f\\x24\\x0a\\x42\\x59\\x15\\xfb\"\n\"\\x05\\x2a\\x61\\x36\\x3a\\x1f\\x32\\x2f\\x56\\xfb\\x17\\xfb\\x14\\x1a\\x34\\xa6\\x3f\\xb9\\x5d\\x1e\\x5b\\xbb\\xdc\\x6e\\xe0\\x1b\\xe9\\xe0\\xa6\\xbd\\xcc\\x1f\"\n\"\\xf7\\x09\\xe5\\xd7\\xf7\\x36\\xf7\\x32\\x1a\\xda\\x70\\xd7\\x5e\\x28\\x0a\\x0e\\xf3\\xf8\\xad\\x61\\x1d\\x70\\xd7\\x5e\\x28\\x0a\\xf7\\x3c\\xf7\\x96\\x15\\x6e\"\n\"\\x79\\x82\\x83\\x77\\x77\\x0a\\x31\\x1d\\x84\\xf8\\xb7\\xf9\\xab\\x81\\x0a\\xf7\\x92\\xfb\\xa8\\x7e\\x1d\\x0e\\xbb\\xf8\\xe3\\xfa\\x3f\\x2c\\x1d\\x8e\\xfb\\x66\"\n\"\\x6e\\x0a\\xbb\\xf8\\x99\\xfa\\x40\\x41\\x0a\\xea\\xfb\\x67\\x15\\x49\\x1d\\xd1\\x98\\x3f\\x1d\\x83\\x67\\x85\\x60\\x7a\\x1a\\x62\\xa2\\x59\\xab\\x6e\\x1e\\x66\"\n\"\\xb4\\xcd\\x76\\xd8\\x1b\\xf7\\x3c\\xf7\\x15\\xe9\\xf7\\x26\\xaa\\x1f\\xf7\\x01\\xf8\\x94\\x05\\x0e\\xbb\\xf8\\xa8\\xfa\\x26\\x30\\x1d\\xaf\\x39\\x15\\x49\\x1d\"\n\"\\xd1\\x98\\x3f\\x1d\\x83\\x67\\x85\\x60\\x7a\\x1a\\x62\\xa2\\x59\\xab\\x6e\\x1e\\x66\\xb4\\xcd\\x76\\xd8\\x1b\\xf7\\x3c\\xf7\\x15\\xe9\\xf7\\x26\\xaa\\x1f\\xf7\"\n\"\\x01\\xf8\\x94\\x05\\x0e\\xbb\\xf8\\x96\\xfa\\x3f\\x24\\x0a\\xf7\\x0c\\x4d\\x6e\\x0a\\x84\\xf8\\xc8\\xfa\\x3f\\x2c\\x1d\\xfb\\x78\\xfd\\x21\\x85\\x0a\\x0e\\x84\"\n\"\\x2f\\x1d\\xf7\\x09\\xfa\\x26\\x30\\x1d\\x0e\\x4c\\x33\\x0a\\xfb\\x50\\xf7\\x26\\x2a\\x1d\\xf8\\x5e\\xf9\\x78\\x2c\\x1d\\x79\\xfd\\x45\\x3d\\x1d\\xa5\\x8b\\x8b\"\n\"\\x96\\x1a\\xcf\\x46\\xb8\\x22\\x4c\\x1d\\x85\\x8a\\x83\\x6b\\x0a\\x52\\x6b\\x51\\x1d\\xea\\x43\\x1d\\x0e\\xf8\\x1d\\xf9\\x79\\x4b\\x1d\\xcb\\xfd\\x46\\x54\\x1d\"\n\"\\xf8\\x27\\xf9\\x5f\\x4a\\x1d\\x95\\xfc\\xc5\\x54\\x1d\\xf8\\x1c\\xf9\\x78\\x70\\x1d\\xe4\\xfc\\xb1\\x54\\x1d\\x7c\\x1d\\x81\\xf8\\x84\\x15\\x55\\x55\\x57\\x56\"\n\"\\x63\\xaa\\x6d\\xb3\\xc4\\xbf\\xbe\\xc4\\xb1\\x6d\\xa8\\x61\\x1f\\x83\\x5f\\x15\\xa0\\x99\\x7d\\x76\\x71\\x71\\x71\\x6f\\x76\\x7d\\x99\\xa0\\xa5\\xa6\\xa5\\xa6\"\n\"\\x1f\\x0e\\x5f\\x0a\\xda\\xf8\\x61\\x15\\x6f\\x7a\\x80\\x82\\x77\\x1b\\x81\\x70\\x91\\x94\\x71\\xcd\\x1d\\x83\\x7b\\x7f\\x67\\x08\\xc0\\x06\\xa7\\x9f\\x93\\x90\"\n\"\\xa1\\x1b\\x91\\x42\\x1d\\xcb\\x9d\\x87\\xa0\\x1b\\xb8\\xb6\\xb6\\xcb\\x9f\\x1f\\x0e\\xfb\\x42\\xf7\\xa3\\x74\\x15\\xf7\\x15\\x8f\\xe1\\xd1\\xab\\xf7\\x15\\xa6\"\n\"\\x0a\\x46\\x5f\\x3f\\x0a\\xdf\\x06\\x8c\\x9a\\x05\\x8c\\x9b\\x8c\\x96\\x8e\\x1a\\xab\\x62\\x1d\\x51\\xa3\\x52\\xb2\\x67\\x1e\\xa3\\x74\\x9f\\x82\\xba\\x82\\x65\"\n\"\\x45\\x5d\\x1d\\xbe\\xa7\\x39\\x0a\\x87\\x87\\x8b\\x89\\x7e\\x1f\\x0e\\xf8\\x68\\xf9\\x78\\x2c\\x1d\\x7a\\xfc\\x8e\\x31\\x0a\\xf8\\x19\\x54\\x0a\\xdb\\xfc\\x8f\"\n\"\\x31\\x0a\\xf8\\x24\\xf9\\x5f\\x30\\x1d\\xa4\\xfc\\x0e\\x31\\x0a\\xf8\\x14\\xf9\\x78\\x24\\x0a\\xf6\\xfb\\xfa\\x31\\x0a\\xfc\\x20\\x2d\\x0a\\xf7\\x21\\xf9\\x78\"\n\"\\x23\\x1d\\xfc\\x20\\x2d\\x0a\\xd0\\xf9\\x79\\x24\\x1d\\xfc\\x20\\x2d\\x0a\\xdb\\xf9\\x58\\x2c\\x0a\\xfc\\x20\\x2d\\x0a\\xdb\\xf9\\x78\\x2e\\x0a\\x39\\x1d\\xf7\"\n\"\\xaa\\xf7\\x57\\x46\\x0a\\x78\\x77\\x0a\\xb6\\xcb\\xa0\\x1f\\x0e\\xf8\\x64\\xf9\\x78\\x2c\\x1d\\xfb\\x54\\xfb\\x5d\\x15\\x2e\\x39\\x61\\x41\\x58\\x1f\\x5e\\x4b\"\n\"\\x6a\\xfb\\x02\\x36\\x1a\\xfb\\x03\\xd8\\x3f\\xf7\\x04\\xeb\\xd7\\xb2\\xd8\\xc3\\x1e\\xb9\\xca\\xac\\xf7\\x01\\xe2\\x1a\\xc0\\x77\\xbe\\x68\\xad\\x1e\\xac\\x69\"\n\"\\x5e\\x45\\x1d\\x0e\\xf8\\x13\\x54\\x0a\\x2e\\xfb\\x5e\\x96\\x1d\\x5b\\x3a\\x4f\\x0a\\x0e\\xf8\\x1f\\xf9\\x5f\\x30\\x1d\\xfb\\x29\\x42\\x15\\x2e\\x39\\x61\\x41\"\n\"\\x58\\x1f\\x5e\\x4b\\x6a\\xfb\\x02\\x36\\x1a\\xfb\\x03\\xd8\\x3f\\xf7\\x04\\xeb\\xd7\\xb2\\xd8\\xc3\\x1e\\xb9\\xca\\xac\\xf7\\x01\\xe2\\x1a\\xc0\\x77\\xbe\\x68\"\n\"\\xad\\x1e\\xac\\x69\\x5e\\x45\\x1d\\x0e\\xf8\\x10\\xf9\\x78\\x24\\x0a\\x47\\x56\\x15\\x2e\\x39\\x61\\x41\\x58\\x1f\\x5e\\x4b\\x6a\\xfb\\x02\\x36\\x1a\\xfb\\x03\"\n\"\\xd8\\x3f\\xf7\\x04\\xeb\\xd7\\xb2\\xd8\\xc3\\x1e\\xb9\\xca\\xac\\xf7\\x01\\xe2\\x1a\\xc0\\x77\\xbe\\x68\\xad\\x1e\\xac\\x69\\x5e\\x45\\x1d\\x0e\\x4a\\x0a\\xf7\"\n\"\\x33\\xf7\\x95\\x46\\x0a\\x77\\x1b\\x81\\x6f\\x92\\x93\\x72\\xcd\\x1d\\x84\\x7c\\x7e\\x66\\x08\\xc0\\x06\\xa8\\xa0\\x91\\x8f\\xa2\\x1b\\x91\\x95\\x89\\x87\\x96\"\n\"\\x1f\\x75\\xcb\\x9c\\x87\\xa1\\x1b\\xb8\\xb6\\xb6\\xcb\\x9f\\x1f\\x0e\\xfb\\x42\\xf8\\x37\\xf8\\xe4\\x81\\x0a\\xf7\\x52\\xfb\\x6a\\x15\\x90\\xa0\\x8c\\x94\\x98\"\n\"\\x1a\\xd1\\x49\\xbb\\x29\\x3c\\x1d\\x3b\\xd0\\x5b\\xf7\\x09\\xf7\\x29\\xec\\xd8\\xf7\\x0b\\x5a\\x0a\\xa4\\x9d\\x9c\\x44\\x0a\\x1f\\x85\\x07\\x86\\x07\\x8a\\x80\"\n\"\\x05\\x0e\\xf8\\x63\\xf9\\x78\\x2c\\x1d\\x2f\\xfd\\x78\\x3b\\x0a\\xf8\\x10\\x54\\x0a\\x94\\xfd\\x79\\x3b\\x0a\\xf8\\x1e\\xf9\\x5f\\x30\\x1d\\x5a\\xfc\\xf8\\x3b\"\n\"\\x0a\\xf8\\x0c\\xf9\\x78\\x15\\x21\\x74\\x1d\\xae\\xfc\\xe4\\x3b\\x0a\\xfb\\x42\\x74\\x0a\\xfb\\x30\\xf7\\x6c\\x23\\x1d\\xfb\\x42\\x74\\x0a\\xfb\\x6e\\xf7\\x53\"\n\"\\x30\\x1d\\x0e\\xfb\\x42\\x46\\x1d\\xfb\\x0c\\xf7\\x23\\x15\\xf7\\x15\\xf7\\x28\\x05\\x4a\\x06\\x24\\x59\\x0a\\xfb\\xc9\\xf7\\x45\\xf8\\xec\\x15\\x48\\xfb\\xd0\"\n\"\\x05\\xc8\\x06\\xb0\\xf7\\x42\\x05\\xc8\\x98\\xb3\\xb1\\xc0\\x1b\\xa8\\xa0\\x79\\x72\\x87\\x8a\\x82\\x89\\x83\\x1f\\x5f\\xfb\\x65\\x05\\xc8\\x06\\xba\\xf7\\x75\"\n\"\\x05\\x8d\\x93\\x8c\\x93\\x92\\x1a\\xb9\\x68\\xaa\\x56\\x60\\x64\\x7e\\x71\\x6c\\x1e\\x91\\xa9\\x05\\x0e\\x48\\x0a\\x0e\\xf3\\x48\\x0a\\xf7\\x4b\\xce\\x8e\\x0a\"\n\"\\xf3\\x48\\x0a\\xf7\\x79\\xf7\\xa4\\xdb\\x1d\\xf7\\x34\\xf9\\x79\\xf9\\x59\\x35\\x0a\\xfc\\x9e\\xfb\\x15\\x15\\x4c\\xfb\\xbc\\x05\\xc9\\x06\\xe6\\xf8\\x3d\\x05\"\n\"\\x60\\x06\\x6a\\x48\\x7d\\x82\\x32\\x84\\x81\\x5d\\x18\\xf8\\xe5\\xfb\\xf8\\x15\\xc5\\x82\\x0a\\x79\\xa6\\x67\\x9e\\x1e\\x67\\x9b\\x1d\\x0e\\xf7\\x34\\xf9\\x96\"\n\"\\x34\\x0a\\x55\\x87\\x1d\\xfc\\x4f\\xf7\\xa7\\x67\\x0a\\x0e\\xf7\\x34\\xf9\\x96\\x34\\x0a\\x55\\xfc\\x79\\x15\\xc4\\x82\\x0a\\x7a\\xa6\\x67\\x9e\\x1e\\x66\\x9b\"\n\"\\x1d\\xfb\\x87\\x21\\x0a\\xfb\\x6f\\x06\\x39\\xfb\\x7b\\x05\\xbc\\x06\\xa8\\xaa\\xa1\\x95\\xad\\x1b\\xba\\xa6\\x71\\x5d\\x41\\x59\\x55\\x47\\x5e\\x73\\xa3\\xba\"\n\"\\x89\\x1f\\x56\\x80\\x06\\x46\\xb4\\x65\\xd6\\xee\\xde\\xe1\\xf2\\xcc\\x60\\xb3\\x47\\x6d\\x71\\x83\\x7a\\x6f\\x1e\\xb5\\xf7\\x0a\\x05\\xf7\\x45\\x06\\x0e\\xf7\"\n\"\\x34\\xf9\\x57\\x34\\x0a\\x8a\\x87\\x1d\\xfb\\x58\\x21\\x0a\\xfb\\xb0\\x06\\x7f\\x57\\x05\\xf7\\x7a\\x06\\xfb\\x19\\xfb\\x26\\x51\\x35\\x4c\\xfb\\x21\\x08\\xc4\"\n\"\\x06\\xc0\\xf7\\x1d\\xd8\\xf7\\x08\\xf7\\x10\\xf7\\x14\\x08\\x0e\\xf7\\xda\\x6d\\x0a\\xf7\\x68\\xf7\\xb8\\x23\\x1d\\x84\\x28\\x1d\\x2f\\xf7\\xbe\\x59\\x1d\\x84\"\n\"\\x28\\x1d\\x0e\\x84\\x28\\x1d\\xfb\\x9d\\xee\\x15\\x78\\x97\\x0a\\x9e\\xe6\\x05\\x0e\\x84\\x28\\x1d\\xf7\\x51\\xf7\\x9d\\x15\\xfb\\xa6\\x06\\x7b\\x46\\x05\\xf7\"\n\"\\xa6\\x06\\x0e\\x84\\xf8\\xa0\\xf7\\x6f\\x15\\xa6\\xfb\\x6f\\x05\\xaa\\x06\\x66\\x7e\\x7b\\x83\\x77\\x7d\\x08\\x68\\x73\\x75\\x66\\x69\\x1a\\x5d\\xbd\\x6e\\xdb\"\n\"\\xa2\\x92\\x8c\\x94\\xb5\\x1e\\x94\\xb8\\x05\\x84\\x76\\x75\\x88\\x72\\x1b\\x62\\x70\\x9c\\xa6\\xb6\\xb0\\xad\\xe4\\xb2\\x1f\\xd9\\x1d\\xee\\x06\\xf7\\x02\\xf7\"\n\"\\x6f\\x05\\xf7\\xb4\\xe7\\x1d\\x0e\\x84\\x28\\x1d\\xc8\\x9d\\x1d\\x6a\\xf7\\x35\\x15\\xfb\\x14\\xfb\\x28\\x05\\xc7\\x45\\x0a\\x84\\x84\\x1d\\xbb\\x3a\\x0a\\x56\"\n\"\\xf8\\x48\\x23\\x1d\\xbb\\x3a\\x0a\\x3d\\xf7\\xb4\\x15\\xf7\\x14\\xf7\\x28\\x05\\x4b\\x06\\x23\\x59\\x0a\\xbb\\x3a\\x0a\\xfb\\x35\\xf8\\x49\\x24\\x1d\\xbb\\xf9\"\n\"\\x95\\xf8\\x8b\\x15\\x99\\x07\\xf7\\x25\\x39\\xda\\xfb\\x2a\\xfb\\x12\\x25\\x5c\\x30\\x43\\x1e\\x3f\\x2c\\x5b\\xfb\\x1b\\xfb\\x0a\\x1a\\x3e\\x9d\\x4f\\xb3\\x56\"\n\"\\x1e\\x4e\\xba\\xc8\\x70\\xe8\\x1b\\xf7\\x4d\\xf7\\x04\\xe4\\xf7\\x5c\\xcb\\x1f\\x2c\\x06\\x77\\x59\\x7b\\x6a\\x75\\x6e\\x08\\x4e\\x5d\\x47\\x69\\x3e\\x1b\\x5c\"\n\"\\x5e\\x99\\xa5\\x6b\\x1f\\x64\\xaa\\x77\\xbf\\xd1\\x1a\\xed\\xa9\\xf1\\xbe\\xd6\\x1e\\xe3\\xc7\\xd6\\xb7\\xe5\\x1b\\xb8\\xb8\\x80\\x79\\xa5\\x1f\\xaa\\x77\\x9a\"\n\"\\x66\\x57\\x1a\\x89\\x8b\\x82\\x8a\\x84\\x1e\\x5f\\xf8\\x30\\x15\\x23\\x06\\x74\\x23\\x05\\xf3\\x06\\x0e\\x84\\x75\\x0a\\xbb\\x72\\x0a\\xf7\\x38\\xf9\\x59\\x2a\"\n\"\\x1d\\xbb\\x86\\x1d\\x4d\\x8f\\x16\\xf8\\xf0\\x06\\xfb\\x97\\xf9\\x0a\\x05\\x33\\x06\\xb7\\x25\\x15\\xf7\\x4b\\xfc\\x5b\\x05\\xfc\\x01\\x06\\x0e\\x84\\x27\\x0a\"\n\"\\xf7\\x4b\\xf9\\xe2\\x4e\\x0a\\x84\\x27\\x0a\\xf7\\xf6\\xf9\\x59\\x2a\\x1d\\x84\\x27\\x0a\\xf8\\x14\\xf9\\xd4\\x23\\x0a\\x84\\x27\\x0a\\xf8\\x65\\xf9\\xc1\\x36\"\n\"\\x1d\\xbc\\xf7\\x01\\x16\\xe9\\x06\\xf1\\xf8\\x76\\x05\\xf7\\x0d\\xa5\\xd0\\xc4\\xf7\\x0d\\x1b\\xdd\\xc0\\x6c\\x5a\\x84\\x89\\x7e\\x87\\x79\\x1f\\xfb\\x15\\xfc\"\n\"\\xf6\\x5c\\x0a\\x85\\x8b\\x8d\\x7e\\x1f\\x7a\\x3c\\x05\\x88\\x92\\x8e\\x8b\\x94\\x1b\\xf7\\x12\\xb5\\xa4\\xdf\\x9d\\x1f\\xf7\\x26\\xf9\\x43\\x05\\x8e\\x98\\x8c\"\n\"\\x98\\x97\\x1a\\xdf\\x50\\xb4\\xfb\\x0f\\xfb\\x08\\x4a\\x75\\x51\\x51\\x1e\\x99\\xcc\\x05\\x35\\x06\\x0e\\x84\\xf7\\x93\\xf7\\xe0\\xab\\x1d\\xf8\\x58\\x06\\x66\"\n\"\\x7d\\x7b\\x84\\x77\\x7d\\x08\\x68\\x73\\x75\\x66\\x69\\x1a\\x5d\\xbd\\x6e\\xdb\\xa2\\x92\\x8c\\x94\\xb5\\x1e\\x94\\xb8\\x05\\x84\\x76\\x75\\x88\\x72\\x1b\\x61\"\n\"\\x71\\x9c\\xa6\\xa1\\x97\\xa0\\xa1\\xa0\\x1f\\x9d\\x9a\\x97\\x92\\xc9\\xa9\\x9c\\xdd\\x18\\xfc\\x41\\x06\\x0e\\x84\\x27\\x0a\\x0e\\xf7\\x07\\xf7\\xde\\xf7\\xe0\"\n\"\\xa2\\x1d\\xfc\\x40\\x06\\x2e\\xf9\\x1b\\x2b\\x1d\\xbb\\x7a\\x0a\\xf7\\x40\\xf9\\x4d\\x7f\\x0a\\xfb\\x26\\xf8\\x21\\x2b\\x1d\\xba\\xf7\\xcd\\x15\\x68\\x50\\x05\"\n\"\\xdf\\x06\\x8a\\x80\\x8b\\x7c\\x88\\x1a\\xfb\\x37\\xcf\\x37\\xf7\\x17\\xc9\\xc6\\x9a\\xaa\\xc4\\x1e\\x9f\\xe8\\x05\\x5b\\x2f\\x65\\x7e\\x5a\\x1b\\x37\\x60\\xc9\"\n\"\\xf7\\x0e\\x1f\\x99\\xf7\\x6b\\x07\\xaf\\xc6\\x05\\xfb\\x8a\\x06\\x8e\\xa0\\x91\\xa6\\x91\\x9d\\x08\\xf7\\xa2\\x06\\xaf\\xc6\\x05\\xfb\\xb1\\x06\\xf7\\x1e\\xc7\"\n\"\\xc9\\xc4\\xe2\\x1b\\xbf\\xb0\\x79\\x56\\xc9\\x1f\\xbc\\xdb\\x05\\xba\\x53\\x56\\x9f\\x46\\x1b\\x35\\x42\\x6a\\x47\\x4f\\x1f\\x5f\\x5a\\x6a\\x53\\x72\\x4a\\x08\"\n\"\\x4c\\x06\\x68\\x50\\x05\\xda\\x06\\x84\\x74\\x85\\x72\\x88\\x79\\x08\\x0e\\x23\\xd4\\x16\\xe9\\x2e\\x1d\\xf8\\x26\\x2f\\x0a\\xfc\\x85\\x06\\x0e\\xf3\\x64\\x0a\"\n\"\\xfb\\x9f\\xfa\\x38\\x3c\\x0a\\xf3\\x81\\x1d\\xfb\\x45\\xfa\\x44\\x24\\x1d\\xf3\\x64\\x0a\\xfc\\x0e\\x53\\xe5\\x1d\\x65\\x1b\\x82\\xd7\\x1d\\xf3\\xf9\\xab\\xf8\"\n\"\\x15\\x15\\xfb\\xc4\\x26\\x0a\\xf7\\x71\\x06\\x87\\x77\\x7f\\x51\\x68\\x54\\x57\\x5f\\x19\\x5d\\x55\\x52\\x76\\x46\\x1b\\x42\\x49\\xa7\\xb6\\x6c\\x1f\\x75\\xac\"\n\"\\x7f\\xbb\\xc6\\x1a\\xec\\xac\\xea\\xc5\\xd4\\x1e\\xdd\\xcc\\xdd\\xb5\\xe7\\x1b\\xdb\\xc7\\x6e\\x57\\xa4\\x1f\\x95\\x76\\x8e\\x7d\\x68\\x1a\\xea\\x06\\xc5\\x81\"\n\"\\xb1\\x71\\xb0\\x1e\\xce\\x5e\\x42\\xac\\x25\\x1b\\xfb\\x0a\\x28\\x64\\x3e\\x40\\x1f\\x30\\x30\\x51\\xfb\\x22\\xfb\\x17\\x1a\\xfb\\x40\\xf4\\xfb\\x04\\xf7\\x35\"\n\"\\xf2\\xf7\\x04\\xbb\\xcf\\xc3\\x1e\\x8e\\x2a\\x05\\xc5\\x06\\x43\\xfa\\x2b\\xbf\\x0a\\xbb\\xf7\\x52\\xf8\\x8a\\x15\\x20\\xfc\\x8a\\x05\\xe9\\x06\\xd2\\xf7\\xe0\"\n\"\\x05\\xf8\\x0a\\x06\\x44\\xfb\\xe0\\x05\\xe8\\x06\\xf6\\xf8\\x8a\\x05\\xd6\\x06\\x99\\xd1\\x05\\x40\\xb4\\x0a\\xfc\\x0b\\xb4\\x0a\\x41\\x06\\x7c\\x45\\x05\\xf7\"\n\"\\x3c\\x16\\xf8\\x0b\\x06\\x78\\x33\\x05\\xfc\\x0b\\x06\\x0e\\xbb\\x7c\\x0a\\xf7\\x91\\xf8\\xf4\\x24\\x1d\\xc6\\xf7\\xb6\\xf9\\x6d\\x15\\x2d\\x22\\x0a\\xf8\\xae\"\n\"\\xb3\\x1d\\x95\\x8c\\x97\\x8e\\x97\\x1f\\x99\\xcd\\x05\\x2d\\x06\\x7d\\x4b\\x05\\x87\\x79\\x89\\x7a\\x7e\\x1a\\x60\\x9f\\x61\\xae\\x6f\\x1e\\x75\\xa7\\xad\\xc6\"\n\"\\x1d\\x0e\\xfc\\x20\\x29\\x1d\\x85\\xfa\\x34\\x59\\x1d\\xfc\\x20\\x29\\x1d\\xf7\\x57\\xfa\\x26\\x23\\x0a\\xfc\\x20\\x29\\x1d\\xf7\\x9c\\xfa\\x13\\x15\\xfb\\x8b\"\n\"\\x06\\x7b\\x46\\x05\\xf7\\x8c\\x06\\x0e\\xfc\\x20\\xf7\\xf1\\xa0\\x0a\\xae\\x06\\x74\\x7e\\x82\\x84\\x79\\x7c\\x08\\x61\\x67\\x7c\\x73\\x69\\x1a\\x5e\\xbb\\x6c\"\n\"\\xce\\xa0\\x97\\x8d\\x93\\xa3\\x1e\\x94\\xb8\\x05\\x83\\x70\\x87\\x8a\\x7c\\x1b\\x66\\x74\\x9c\\xa6\\xa9\\xa4\\xad\\xbd\\xb2\\x1f\\x91\\x8f\\x91\\x90\\x8f\\x8e\"\n\"\\x08\\x0e\\xfc\\x20\\x29\\x1d\\x0e\\xfc\\x20\\x29\\x1d\\xf7\\x02\\xfa\\x26\\x65\\x1d\\xfb\\xb1\\xf8\\x31\\x36\\x0a\\x40\\xf9\\x6d\\x2b\\x1d\\xfc\\x20\\x29\\x1d\"\n\"\\xf7\\x88\\xfa\\x2a\\x98\\x0a\\x71\\x6e\\x7c\\x76\\x7a\\x1f\\x7f\\x7c\\x83\\x7a\\x7f\\x68\\x08\\xc0\\x06\\xa8\\xa0\\x92\\x8f\\xa1\\x1b\\x91\\x42\\x1d\\xcb\\x9d\"\n\"\\x87\\xa0\\x1b\\xb8\\xb5\\x31\\x1d\\xfb\\x42\\x6c\\x0a\\x4e\\xf7\\x67\\x24\\x1d\\x84\\x78\\x0a\\x84\\x79\\x0a\\xf7\\x05\\x4f\\xb0\\x1d\\x3e\\x1d\\xf7\\x45\\xf9\"\n\"\\xed\\x23\\x1d\\x84\\xf8\\xbb\\xf9\\x6d\\x15\\xfb\\x0c\\x06\\xfc\\x33\\xfd\\x6d\\x05\\xef\\x06\\xf7\\xfa\\xf9\\x09\\xdc\\xfd\\x09\\x05\\xec\\x06\\x0e\\x3e\\x1d\"\n\"\\xf7\\x82\\xf9\\x1b\\x42\\x0a\\xba\\xbc\\xdd\\x50\\x1d\\x3e\\x1d\\xc1\\xfb\\x22\\x5e\\x1d\\x3e\\x1d\\xf7\\xf8\\xf7\\xfd\\x23\\x0a\\xf7\\x33\\x97\\x1d\\xbb\\x2b\"\n\"\\x0a\\x57\\x55\\x0a\\xbb\\x2b\\x0a\\x3f\\xf9\\xab\\x2a\\x1d\\xbb\\x2b\\x0a\\xfc\\x00\\x4f\\x42\\x0a\\xba\\xbb\\xde\\x50\\x1d\\xbb\\x2b\\x0a\\x0e\\xf3\\x30\\x0a\"\n\"\\x5d\\xf7\\xa0\\x4e\\x0a\\xf3\\x30\\x0a\\xa9\\xf7\\xab\\x40\\x0a\\xf3\\x30\\x0a\\xf7\\x4f\\xf7\\x7f\\x36\\x1d\\xf0\\xb2\\x16\\xf7\\xb4\\x20\\x1d\\x2f\\xca\\x6a\"\n\"\\xc5\\xf0\\x1a\\xf7\\x5d\\xf7\\x17\\xf7\\x2f\\xf7\\x3f\\xf7\\x0b\\xdb\\x3c\\xfb\\x0b\\x37\\x6b\\x31\\x52\\x41\\x1e\\x61\\x55\\x61\\x6a\\x35\\x5e\\x7a\\x39\\x18\"\n\"\\xf7\\xb4\\x20\\x1d\\xfb\\x50\\x06\\xf7\\x33\\xce\\xe8\\xf7\\x1c\\xf7\\x38\\x1a\\xf7\\x45\\xfb\\x07\\xf7\\x08\\xfb\\x44\\xfb\\x05\\xfb\\x01\\x58\\x35\\x43\\x1e\"\n\"\\x4c\\x41\\x64\\xfb\\x02\\x26\\x1a\\x4c\\x9f\\x4b\\xaf\\x5b\\x1e\\x9d\\x72\\x9a\\x7d\\xad\\x73\\x08\\xfb\\x55\\x06\\xdd\\xf9\\x1b\\xcf\\x1d\\xf3\\x30\\x0a\\x0e\"\n\"\\xf7\\x0c\\xf8\\xb4\\x61\\x1d\\x6f\\xd7\\x5f\\x28\\x0a\\xfc\\x1b\\xd0\\x15\\x78\\x30\\x8e\\x23\\x05\\xaa\\x06\\xbb\\xf3\\x9e\\xe6\\x05\\x0e\\xf3\\x65\\x0a\\xf7\"\n\"\\xe1\\xf9\\xc4\\x23\\x1d\\xf7\\x37\\xf8\\x06\\x7f\\x15\\xe9\\x06\\x9e\\xe5\\xef\\x90\\xcd\\x9f\\xcd\\xba\\x19\\xe4\\xca\\xc2\\xf2\\xf3\\x1a\\xd6\\x64\\xd2\\x4d\"\n\"\\xb2\\x1e\\x5e\\xa7\\x66\\x97\\x44\\x91\\x9e\\xe5\\x18\\x2d\\x06\\x78\\x31\\x2b\\x86\\x4b\\x78\\x4b\\x61\\x19\\x2b\\x4d\\x4f\\x21\\x20\\x1a\\x3e\\xb5\\x42\\xcd\"\n\"\\x64\\x1e\\xb8\\x71\\xaf\\x80\\xd0\\x85\\x08\\x9c\\xd9\\x15\\x56\\x90\\x72\\x93\\x6c\\x9e\\x08\\x61\\xa5\\x73\\xb8\\xc0\\x1a\\xd4\\xb0\\xd7\\xc6\\xba\\x1e\\xba\"\n\"\\xb2\\xbc\\x9e\\xd3\\x92\\x08\\xe8\\x16\\xc1\\x89\\xa5\\x84\\xa9\\x78\\x08\\xb6\\x71\\xa4\\x5c\\x56\\x1a\\x42\\x68\\x40\\x53\\x5c\\x1e\\x59\\x61\\x58\\x77\\x41\"\n\"\\x85\\x08\\x0e\\xbe\\x84\\x0a\\xf7\\x31\\xf8\\x08\\x16\\xe7\\x06\\xa8\\xf7\\x1e\\xe1\\x8d\\xd5\\x9f\\xc6\\xaf\\x19\\xe7\\xc6\\xaf\\xce\\xb2\\xf7\\x52\\xb9\\xf7\"\n\"\\x6d\\x18\\x2d\\x06\\x5d\\xfb\\x6d\\x6d\\xfb\\x23\\x77\\x5d\\x58\\x60\\x19\\x5c\\x66\\x50\\x77\\x48\\x88\\xf7\\x00\\xf8\\x91\\x18\\x2f\\x06\\xfb\\x01\\xfc\\x91\"\n\"\\x05\\xfb\\x0a\\x91\\x53\\xb5\\xde\\x1a\\xae\\x90\\xae\\x9f\\xe6\\x1e\\xb9\\xf7\\x6d\\x05\\x2d\\x06\\x5d\\xfb\\x6d\\x05\\x7a\\x3b\\x83\\x56\\x64\\x1a\\xfb\\x0c\"\n\"\\xe9\\x3f\\xf7\\x31\\x85\\x1e\\x0e\\xbb\\x55\\x1d\\xd6\\xf8\\xb3\\x23\\x1d\\xbb\\x55\\x1d\\xc1\\xf8\\x1f\\x15\\xf7\\x14\\xf7\\x28\\x05\\x4b\\x06\\x23\\x59\\x0a\"\n\"\\xbb\\x55\\x1d\\xfb\\x54\\xfc\\x5c\\x42\\x0a\\xbb\\xbb\\xde\\x9d\\x1f\\x9e\\xe8\\x05\\x0e\\x84\\x71\\x0a\\x84\\x7d\\x1d\\x57\\xf8\\x3c\\x23\\x1d\\x84\\xf7\\xe6\"\n\"\\x75\\x15\\xdf\\xce\\x9d\\xaf\\xc3\\x1f\\xd2\\xb9\\xc0\\xe2\\xd3\\x1a\\xa6\\x83\\xa5\\x7b\\xa4\\x1e\\x75\\xae\\x6e\\x9f\\x5c\\x98\\xfb\\x40\\xbc\\x18\\x3e\\xa1\"\n\"\\x73\\x9f\\xb7\\x1a\\xaf\\x99\\xa9\\xa9\\xa6\\x1e\\xac\\xb0\\xbb\\x9b\\xce\\x1b\\xc3\\xb5\\x80\\x77\\xa1\\x1f\\x9e\\x7a\\x98\\x6b\\x6e\\x1a\\x82\\x8a\\x83\\x88\"\n\"\\x78\\x1e\\xe3\\x06\\x91\\xa7\\x8d\\x97\\x9b\\x1a\\xb6\\x76\\xb9\\x5a\\x1d\\x78\\x65\\x6f\\x71\\x1e\\x65\\x62\\x50\\x79\\x3b\\x1b\\xfb\\x05\\x57\\xb5\\xe6\\x68\"\n\"\\x1d\\x4b\\xa8\\x53\\xbe\\x69\\x1e\\xa9\\x78\\xa7\\x82\\xd0\\x82\\x66\\x45\\x5d\\x1d\\xbf\\xa6\\x5d\\x0a\\x88\\x8b\\x89\\x7e\\x1f\\x0e\\x84\\x61\\x0a\\xfb\\x25\"\n\"\\xf8\\x3d\\x24\\x1d\\x84\\x7d\\x1d\\xfb\\xea\\xfc\\xd3\\x15\\x76\\x29\\x05\\xc1\\x06\\x50\\x81\\x73\\x6e\\x64\\x1b\\x83\\x65\\x05\\xca\\xba\\xbc\\xdd\\x50\\x1d\"\n\"\\x41\\xa8\\x16\\xf8\\xb5\\x2f\\x0a\\xfc\\x3e\\x06\\xf7\\xd1\\xf7\\xb3\\xfb\\x5b\\xf7\\xaa\\x05\\xf8\\x2f\\x20\\x1d\\xfc\\xa2\\x06\\x79\\x36\\xf7\\x56\\xfb\\xa7\"\n\"\\xfb\\xd0\\xfb\\xb3\\x05\\x0e\\x4c\\x48\\x1d\\x0e\\x4c\\xf8\\x5b\\xf8\\x6a\\x15\\xb1\\xf7\\x45\\x05\\xf7\\x82\\x20\\x1d\\xfc\\xd1\\x26\\x0a\\xf7\\x85\\x06\\x65\"\n\"\\xfb\\x45\\x05\\xfb\\x34\\x06\\x7d\\x48\\x05\\xf7\\x34\\x06\\x35\\xfc\\x27\\x05\\xe9\\x06\\xe1\\xf8\\x27\\x05\\xf7\\x34\\x06\\x99\\xce\\x05\\x0e\\x4c\\x48\\x1d\"\n\"\\xf7\\x3d\\xf9\\xab\\x2a\\x1d\\x4c\\xf7\\xeb\\x16\\x97\\x2e\\x1d\\xf7\\x82\\x20\\x1d\\xfc\\xd0\\x06\\x79\\x39\\x05\\xf7\\x85\\x38\\x0a\\xb4\\x06\\x59\\x2f\\x8a\"\n\"\\x1d\\xb8\\xcb\\x57\\x0a\\x0e\\xf3\\xf9\\x02\\xf8\\x35\\x15\\xfb\\xb2\\x06\\x79\\x39\\x05\\xf7\\xb3\\x06\\x53\\xf8\\x2a\\x15\\xfb\\x29\\xfb\\x16\\x41\\xfb\\x15\"\n\"\\x3a\\x1f\\x56\\x36\\x6d\\x20\\x27\\x1a\\xfb\\x36\\xf7\\x02\\x20\\xf7\\x3a\\xf7\\x23\\xf7\\x14\\xce\\xf7\\x09\\xdb\\x1e\\xc5\\xe1\\xad\\xf7\\x02\\xf3\\x1a\\xf7\"\n\"\\x46\\x26\\xf1\\xfb\\x43\\x1e\\x77\\x3a\\x15\\xd6\\xc3\\x71\\x59\\xac\\x1f\\xa2\\x69\\x98\\x5d\\x59\\x1a\\x35\\x73\\x34\\x5f\\x42\\x1e\\x2b\\x51\\x2d\\x55\\xfb\"\n\"\\x02\\x1b\\xfb\\x0c\\x3e\\xda\\xf7\\x0e\\xdd\\xa3\\xe5\\xb5\\xd3\\x1f\\xef\\xc4\\xea\\xc4\\xf7\\x01\\x1b\\x0e\\xbb\\x57\\x1d\\xfc\\x30\\xf7\\x5b\\x40\\x1d\\xd7\"\n\"\\xbb\\xbe\\x9e\\xa9\\xac\\xae\\x1d\\xbb\\x4b\\x0a\\xfb\\xac\\xf7\\x66\\x40\\x0a\\xbb\\x4b\\x0a\\xfb\\x00\\xf7\\x3a\\x15\\xfb\\xa6\\x06\\x7c\\x46\\x05\\xf7\\xa6\"\n\"\\x06\\x0e\\xbb\\xf8\\xcc\\xfb\\x2a\\x15\\x84\\x78\\x73\\x88\\x6f\\x1b\\x63\\x71\\x9d\\xa5\\xab\\xab\\xb6\\xbe\\xae\\x1f\\xf7\\x02\\xd2\\xb7\\xc3\\xa2\\xeb\\xf7\"\n\"\\x01\\xf8\\x94\\x18\\x2d\\x06\\xfb\\x01\\xfc\\x94\\x05\\x28\\x76\\x3a\\x4f\\xfb\\x06\\x1b\\x2a\\x4b\\xb9\\xd0\\x99\\x3f\\x1d\\x84\\x69\\x84\\x5d\\x7b\\x1a\\x62\"\n\"\\xa2\\x59\\xab\\x6e\\x1e\\x65\\xb5\\xcb\\x77\\xdc\\x1b\\xaa\\x9d\\x8d\\x93\\xb1\\x1f\\x4a\\x69\\x6b\\x66\\x60\\x1a\\x59\\xba\\x6f\\xdf\\xab\\x9d\\x8d\\x93\\xa1\"\n\"\\x1e\\x0e\\x84\\x2f\\x1d\\x0e\\x84\\x2f\\x1d\\xf7\\x04\\xfa\\x26\\x65\\x1d\\xf7\\x53\\xf8\\xdc\\xf7\\xb2\\x85\\x0a\\xfb\\xdf\\xf9\\x6d\\x2b\\x1d\\xbb\\x4b\\x0a\"\n\"\\xfb\\x7d\\xf7\\x74\\xaf\\x1d\\x70\\x71\\x70\\x76\\x7d\\x99\\x9f\\xa6\\xa5\\xa5\\xa8\\x1f\\x0e\\xbb\\x57\\x1d\\xfb\\x2d\\xf7\\x51\\x15\\x6e\\x7a\\x81\\x83\\x77\"\n\"\\x1b\\x80\\x70\\x91\\x94\\x72\\x50\\x0a\\xb7\\xb6\\x31\\x1d\\xf7\\xa2\\x32\\x0a\\xd6\\xfa\\x3f\\x23\\x1d\\xf7\\xa2\\x32\\x0a\\x6c\\x64\\x1d\\xf7\\xa2\\x32\\x0a\"\n\"\\x80\\xfa\\x26\\x2c\\x0a\\xf7\\xa2\\x32\\x0a\\x75\\xfa\\x38\\x70\\x1d\\x0e\\x71\\xc9\\x16\\xf8\\x9f\\x20\\x1d\\xfc\\x9f\\x06\\xdf\\xf7\\x8e\\x15\\xf8\\x60\\x20\"\n\"\\x1d\\xfc\\x5f\\x06\\x9f\\xf7\\x7d\\x15\\xf8\\x9c\\x20\\x1d\\xfc\\x9c\\x06\\x0e\\x84\\x2f\\x1d\\xe4\\x64\\x1d\\x84\\x2f\\x1d\\xea\\xfa\\x3f\\x2e\\x0a\\x4c\\x33\"\n\"\\x0a\\xfb\\x3b\\xf7\\xba\\x23\\x1d\\x4c\\x33\\x0a\\xfb\\x31\\xf7\\xa1\\x23\\x0a\\x4c\\x33\\x0a\\x0e\\x7c\\x1d\\xfb\\x3d\\xf8\\x6b\\x15\\x87\\x79\\x8a\\x83\\x81\"\n\"\\x1a\\x50\\xbf\\x63\\xd6\\xbc\\xbe\\x9e\\xa9\\xab\\x1e\\xa3\\xa0\\x96\\xa0\\x97\\x47\\x0a\\x80\\x63\\x74\\x4f\\x1b\\x53\\x70\\xa0\\xb5\\x8d\\x1f\\x0e\\xf7\\x6b\"\n\"\\x7b\\x1d\\xfb\\x71\\xf8\\x46\\x23\\x1d\\xf7\\xda\\xca\\x1d\\x84\\xf8\\xa1\\xf7\\x6f\\x15\\xa7\\xfb\\x6f\\x05\\xee\\x06\\x26\\xf9\\x6d\\x05\\xfb\\x0c\\x06\\xfc\"\n\"\\x33\\xfd\\x6d\\x05\\xf3\\x06\\xf7\\x0f\\xf7\\x6f\\x05\\xf7\\xa4\\xd9\\x15\\xfb\\x7b\\x06\\xf7\\x52\\xf7\\xe0\\x05\\x0e\\x74\\xf7\\x95\\xf8\\x38\\x15\\xbc\\xf7\"\n\"\\x77\\x05\\xf8\\x13\\x2f\\x0a\\xfc\\x72\\x26\\x1d\\xf7\\xd3\\x6e\\x1d\\xfb\\x80\\x39\\x15\\xf7\\x66\\x4f\\x1d\\xfb\\x67\\x06\\x0e\\x84\\xdc\\x16\\xf7\\xdd\\x06\"\n\"\\xd9\\xcc\\xa3\\xbb\\xbb\\x1f\\xb8\\xb8\\xa7\\xcd\\xc9\\x1a\\xcb\\x69\\xba\\x49\\xa8\\x1e\\xb2\\x9a\\xa0\\x98\\xa3\\xa7\\x08\\xad\\xb1\\x9e\\xbd\\xbc\\x1a\\xe8\"\n\"\\x46\\xc5\\xfb\\x02\\x1e\\xfb\\xbc\\x06\\xa6\\xfb\\xcf\\x15\\xbd\\xf7\\x7d\\x05\\xf7\\x47\\x06\\xe8\\xab\\x76\\x4e\\x61\\x7a\\x64\\x6b\\x6e\\x1f\\x6d\\x6b\\x6a\"\n\"\\x80\\x4e\\x1b\\xfb\\x8e\\xfb\\xe0\\x15\\xc1\\xf7\\x8e\\x05\\xf7\\x75\\x06\\xd5\\xad\\x6e\\x4d\\x33\\x43\\x44\\x32\\x1f\\x0e\\xfb\\x16\\xf7\\x83\\xf9\\x6d\\x15\"\n\"\\xfb\\x2f\\xfd\\x6d\\x05\\xe8\\x06\\xf7\\x1e\\xf9\\x1b\\x05\\xf7\\xfd\\x20\\x1d\\x0e\\xa9\\xf8\\xda\\x16\\x68\\xa9\\x1d\\xfc\\x42\\x06\\x3f\\xfb\\xfd\\x6b\\xfb\"\n\"\\x3c\\x32\\x20\\xfb\\x09\\x80\\x19\\x56\\xfb\\x8c\\x05\\xe9\\x06\\xae\\xf7\\x3a\\x05\\xf8\\x48\\xdd\\x15\\xfb\\xf7\\x06\\xde\\xb8\\xcb\\xf4\\xa7\\xf7\\x1f\\xc6\"\n\"\\xf7\\xa8\\x18\\xf7\\x85\\x06\\x0e\\x84\\x9c\\x1d\\x0e\\x84\\x9c\\x1d\\xf7\\xd1\\xf9\\xd4\\x2c\\x0a\\xf7\\x87\\xf8\\x2f\\x5e\\x0a\\xf4\\x06\\xf7\\x2c\\xfb\\xed\"\n\"\\x05\\xec\\x06\\xfb\\x3d\\xf8\\x14\\xf7\\xa9\\xb8\\x0a\\x2f\\xb3\\x0a\\x4b\\xfb\\xc2\\x05\\x25\\x06\\xfb\\x08\\xf7\\xc2\\x05\\x27\\xe2\\x1d\\xf7\\x02\\x06\\xf7\"\n\"\\xbd\\xf7\\xed\\x05\\xe7\\x06\\x0e\\x4f\\xf7\\x00\\xf7\\x74\\x15\\x86\\x71\\x89\\x7d\\x76\\x1a\\xfb\\x06\\xde\\x43\\xf7\\x19\\xe0\\xd1\\xa7\\xc2\\xbf\\x1e\\xba\"\n\"\\xbc\\xa7\\xd0\\xcc\\x1a\\xd3\\x8d\\x1d\\x5e\\x77\\x5b\\xbd\\x1d\\x0e\\xb4\\x5b\\x1d\\x0e\\xb4\\xd6\\x16\\xe9\\x06\\x9d\\xde\\xf8\\x67\\xf8\\x42\\xfb\\x01\\xfc\"\n\"\\x95\\x05\\xe9\\xb8\\x1d\\xf7\\x3f\\xf7\\x5b\\x87\\x0a\\x63\\x74\\x4e\\x56\\x0a\\x36\\xcd\\x16\\x9e\\x1d\\x2d\\x06\\x0e\\x97\\xf8\\xa6\\x16\\xe9\\x25\\x0a\\xfc\"\n\"\\x7b\\x83\\x0a\\xf7\\xc0\\x06\\x0e\\xf7\\x33\\xf8\\x66\\x16\\xf7\\xe3\\xf8\\xf7\\xfb\\x16\\xfc\\xf7\\x05\\xe3\\x25\\x0a\\xfb\\x15\\x06\\xfb\\xef\\xfd\\x0f\\x3a\"\n\"\\xf9\\x0f\\x05\\xfb\\x15\\x26\\x1d\\xe3\\x06\\xf7\\x16\\xf8\\xf7\\xd8\\xfc\\xf7\\x05\\x0e\\xbb\\xf8\\xff\\xf7\\xe0\\x15\\x44\\xfb\\xe0\\x05\\xe8\\x25\\x0a\\x2e\"\n\"\\x06\\x48\\xfb\\xcf\\x05\\xfc\\x0b\\x06\\xce\\xf7\\xcf\\x05\\x2e\\x22\\x0a\\xd2\\xf7\\xe0\\x05\\x0e\\xf3\\x95\\x0a\\xfb\\x47\\xae\\x0a\\xe0\\xe4\\xc0\\xaf\\x0a\"\n\"\\x1e\\x81\\x39\\x15\\xf7\\x11\\xd6\\x3b\\xfb\\x1a\\x30\\x6c\\x2c\\x55\\x41\\x1f\\x3a\\x4f\\x33\\x5e\\x2a\\x1b\\xfb\\x0e\\x40\\xdc\\xf7\\x19\\xe6\\xaa\\xeb\\xc1\"\n\"\\xd4\\x1f\\xdb\\xc6\\xe4\\xb9\\xe9\\x1b\\x0e\\xbe\\x84\\x0a\\x84\\xf7\\x90\\xf7\\xc9\\x15\\xf7\\x77\\x06\\xf7\\x24\\xf7\\x01\\xf7\\x02\\xf7\\x24\\xf4\\x47\\xc8\"\n\"\\xfb\\x08\\x1f\\xfb\\xc1\\x22\\x0a\\xde\\xf8\\x1b\\x15\\xc2\\xf7\\x94\\x05\\xf7\\x55\\x06\\xd8\\xb4\\x69\\x4c\\x67\\x7d\\x66\\x74\\x6e\\x1f\\x64\\x6a\\x60\\x79\"\n\"\\x4f\\x1b\\x0e\\xbb\\xf9\\x17\\xf7\\x95\\x15\\xfb\\x0a\\x6f\\x27\\x3b\\xfb\\x0b\\x1b\\xfb\\x0e\\x4b\\xd1\\xf7\\x19\\xf5\\xaf\\xf4\\xc9\\xd7\\x1f\\xd1\\xc4\\xdc\"\n\"\\xb3\\xe1\\x1b\\xe8\\xc9\\x5c\\x43\\x7f\\x8a\\x81\\x87\\x75\\x1f\\xe9\\x06\\x8f\\x9d\\x8c\\x94\\x9a\\x1a\\xf7\\x0c\\x27\\xde\\xfb\\x23\\xfb\\x06\\x24\\x5d\\x36\"\n\"\\x40\\x1e\\x3a\\x31\\x5a\\xfb\\x17\\xfb\\x12\\x1a\\xfb\\x48\\xee\\x21\\xf7\\x3b\\xf7\\x47\\xf7\\x26\\xf7\\x07\\xf7\\x39\\xab\\x1e\\x0e\\x4c\\xf8\\x7e\\xf9\\x1b\"\n\"\\x15\\xf7\\x83\\x20\\x1d\\xfc\\xd0\\x26\\x0a\\xf7\\x84\\x38\\x0a\\xe8\\x06\\x0e\\x68\\x99\\x1d\\x0e\\xf7\\x0d\\xf7\\xf0\\x81\\x15\\xe9\\x06\\x9e\\xe6\\xe6\\x8d\"\n\"\\xd0\\xa0\\xcd\\xb9\\x19\\xe3\\xc8\\xbf\\xf2\\xf7\\x03\\x1a\\xf7\\x19\\x35\\xda\\xfb\\x33\\x96\\x1e\\x9e\\xe6\\x05\\x2d\\x06\\x78\\x30\\x36\\x88\\x4b\\x78\\x4d\"\n\"\\x63\\x19\\x2c\\x4d\\x50\\x22\\xfb\\x00\\x1a\\xfb\\x1a\\xe7\\x34\\xf7\\x2c\\x82\\x1e\\x9c\\xdc\\x15\\xfb\\x02\\x93\\x4c\\xc1\\xe4\\x1a\\xd3\\xae\\xd6\\xc2\\xb7\"\n\"\\x1e\\xbb\\xb2\\xbe\\x9e\\xd2\\x90\\x08\\xe9\\x16\\xbd\\x88\\xa3\\x85\\xaa\\x79\\x08\\xb6\\x73\\xa5\\x5c\\x57\\x1a\\xfb\\x1e\\xfb\\x00\\x21\\xfb\\x2d\\x80\\x1e\"\n\"\\x0e\\x84\\xbe\\x0a\\xfb\\x08\\x06\\xfb\\x8d\\xfb\\xb2\\xfb\\x12\\xf7\\xb2\\x05\\xfb\\x00\\x06\\xf7\\x3b\\xfb\\xf7\\xfb\\xe6\\xfc\\x0a\\x05\\xf7\\x0a\\xba\\x0a\"\n\"\\xf7\\x02\\x06\\x0e\\xc0\\xd7\\x16\\xf8\\x9f\\x06\\x68\\x32\\x1d\\xc0\\xf7\\x8c\\x05\\x53\\x06\\xf7\\x1e\\xf9\\x1b\\xba\\x1d\\x8a\\xf8\\x92\\x16\\xe9\\x95\\x1d\"\n\"\\xb4\\xbc\\x81\\xda\\x1b\\xd9\\xbc\\x92\\x9f\\xd1\\x1f\\x0e\\xf7\\x8a\\xcc\\x16\\xf9\\xa6\\x25\\x0a\\x2d\\x38\\x0a\\xfb\\x8d\\xb2\\x1d\\xf7\\x8d\\xc7\\x16\\xf9\"\n\"\\x84\\x06\\x68\\x32\\x1d\\xbf\\xf7\\x8c\\x05\\x54\\x2e\\x1d\\x2d\\x38\\x0a\\xfb\\x92\\xb2\\x1d\\xf7\\x17\\xf8\\x46\\xf8\\x38\\x15\\xcc\\xf7\\xc9\\x05\\xfc\\x04\"\n\"\\x26\\x0a\\xf7\\xa6\\x06\\xfb\\x1d\\xfd\\x1b\\x05\\xf7\\xbb\\x6e\\x1d\\xfb\\x69\\x39\\x15\\xf7\\x4f\\x4f\\x1d\\xfb\\x4f\\x06\\x0e\\xf7\\x68\\xf7\\xa0\\x94\\x1d\"\n\"\\xf8\\x92\\x39\\x15\\xe9\\x25\\x0a\\x2d\\x06\\x0e\\x74\\xf7\\x96\\x94\\x1d\\x0e\\x9f\\xf8\\x02\\xf8\\x2a\\x15\\x79\\x38\\x05\\xf7\\xb0\\x06\\xfb\\x3a\\x5d\\x21\"\n\"\\x29\\xfb\\x1a\\x1b\\x49\\x4f\\xa6\\xb8\\x69\\x1f\\x71\\xac\\x81\\xab\\x86\\xc8\\x2f\\x7b\\x18\\x95\\x3e\\x98\\x65\\xa9\\x60\\x08\\x47\\xbb\\xdf\\x65\\xee\\x1b\"\n\"\\xf6\\xec\\xb5\\xd8\\xd1\\x1f\\xdd\\xe4\\xbd\\xf7\\x1c\\xf7\\x17\\x1a\\xe0\\x73\\xd5\\x5f\\xbe\\x1e\\xc0\\x5f\\x4b\\xa5\\x38\\x1b\\xfb\\x2e\\xfb\\x15\\x3c\\xfb\"\n\"\\x23\\x3a\\x1f\\xe7\\x78\\x05\\xf2\\xcc\\xe7\\xc3\\xf6\\x1b\\xf7\\x01\\xcd\\x3c\\xfb\\x17\\x83\\x8a\\x7b\\x8a\\x78\\x1f\\x0e\\xf7\\xf0\\xf7\\xed\\xf7\\xe0\\x15\"\n\"\\x87\\x73\\x8a\\x79\\x76\\x1a\\xfb\\x4b\\xf7\\x00\\xfb\\x01\\xf7\\x48\\xf7\\x04\\xef\\xb5\\xda\\xd8\\x1e\\xe1\\xe4\\xbf\\xaf\\x0a\\xfb\\x4f\\xfb\\x30\\xfb\\x12\"\n\"\\xfb\\x5d\\x4a\\x1e\\xfb\\x11\\x06\\xce\\xf7\\xcf\\x05\\x2e\\x22\\x0a\\xd2\\xf7\\xe0\\x05\\xf8\\xb0\\xf7\\xdb\\x15\\xf7\\x14\\xd7\\x3b\\xfb\\x1a\\x30\\x6b\\x2b\"\n\"\\x55\\x42\\x1f\\x3a\\x4e\\x32\\x5e\\x28\\x1b\\xfb\\x10\\x3e\\xdc\\xf7\\x18\\xe7\\xab\\xea\\xc2\\xd5\\x1f\\xdb\\xc6\\xe5\\xb9\\xeb\\x1b\\x0e\\x93\\xf8\\xe0\\xf7\"\n\"\\xce\\x15\\x48\\xfb\\xce\\x05\\xe8\\x25\\x0a\\xfb\\xe1\\x06\\x38\\x52\\x7b\\x66\\x5e\\x1f\\x56\\x61\\x6b\\x46\\x47\\x1a\\x4e\\xa3\\x62\\xc5\\x68\\x1e\\x37\\x73\"\n\"\\x6c\\x61\\x71\\xfb\\x0e\\x73\\xfb\\x04\\x7e\\x6e\\x66\\x6c\\x08\\xf7\\x00\\x06\\xa3\\xaa\\x9d\\xbb\\x9a\\xd9\\xa0\\xf7\\x07\\xb1\\xb3\\xe6\\x8d\\x08\\xf7\\x95\"\n\"\\xdd\\x15\\xfb\\x74\\x06\\x62\\x72\\x90\\x97\\x79\\x1f\\x74\\x99\\x7d\\xa8\\xad\\x1a\\xb7\\x9e\\xb9\\xaa\\xa8\\x1e\\xa6\\xa8\\xae\\x96\\xc7\\x1b\\xf7\\x75\\x06\"\n\"\\x0e\\xfb\\x4a\\xf8\\xf3\\x22\\x1d\\xfc\\x1e\\x22\\x0a\\xf7\\x1e\\xf9\\x1b\\x05\\xf7\\xfc\\x06\\x9c\\xdd\\xf7\\x48\\xf7\\x28\\x05\\xfb\\x04\\x06\\x0e\\xf7\\x3d\"\n\"\\xf7\\x8b\\x16\\xe9\\x06\\xc6\\xf7\\xaa\\x93\\xb3\\x98\\xa1\\xa9\\xa2\\x19\\xac\\xb5\\xba\\x98\\xdc\\x1b\\xdb\\xad\\x77\\x5c\\x85\\x8a\\x81\\x89\\x82\\x1f\\x6a\"\n\"\\xfb\\x30\\x05\\x58\\x82\\x6d\\x6f\\x5e\\x1b\\xfb\\x1b\\x06\\x79\\x39\\x05\\xf7\\x27\\x06\\xf1\\x8a\\xd0\\xc9\\x99\\xf7\\x00\\xac\\xf7\\x2c\\x18\\x8e\\x99\\x8c\"\n\"\\x96\\x97\\x1a\\xad\\x7b\\xac\\x6f\\xa5\\x1e\\xa6\\x6e\\x5a\\x98\\x44\\x1b\\x24\\x5e\\x7b\\x4d\\x4e\\x1f\\xbc\\xf7\\x7e\\x05\\xf7\\x5e\\x20\\x1d\\xfc\\x84\\x26\"\n\"\\x0a\\xf7\\x5c\\x06\\x0e\\xfb\\x16\\xf7\\x86\\x22\\x1d\\xfb\\x2f\\xfd\\x6d\\x05\\xe8\\x2e\\x1d\\xf7\\xfd\\x20\\x1d\\xfb\\x57\\xa2\\x0a\\xad\\xf7\\x72\\xf8\\x2a\"\n\"\\x15\\xf7\\x37\\xbe\\xf1\\xe5\\xf7\\x18\\x1b\\xcd\\xc7\\x70\\x5e\\xad\\x1f\\x9d\\x74\\x95\\x73\\x93\\x64\\xe8\\x9c\\x18\\x7c\\xca\\x7c\\xae\\x6d\\xae\\x08\\xc4\"\n\"\\x5b\\x3a\\xac\\x2d\\x1b\\x22\\x2f\\x63\\x3e\\x43\\x1f\\x36\\x30\\x58\\xfb\\x1b\\xfb\\x17\\x1a\\x36\\xa1\\x44\\xb7\\x57\\x1e\\x54\\xb9\\xcc\\x70\\xe3\\x1b\\xf3\"\n\"\\xed\\xb1\\xce\\xd3\\x1f\\xb6\\xb4\\xa7\\xb3\\xb0\\xd8\\x2e\\x9c\\x18\\x72\\x54\\x77\\x6e\\x67\\x6a\\x08\\x57\\x52\\x41\\x6e\\x42\\x1b\\xfb\\x03\\x49\\xda\\xf7\"\n\"\\x1b\\x9c\\x8c\\x97\\x8d\\xa0\\x1f\\xf7\\xb2\\x06\\x9d\\xde\\x05\\x0e\\x84\\xf9\\x58\\xf8\\x97\\x15\\x8f\\x9f\\x8c\\x96\\x9a\\x1a\\xf7\\x03\\x31\\xd0\\xfb\\x25\"\n\"\\x34\\x43\\x74\\x5d\\x54\\x1e\\x56\\x60\\x6b\\x4a\\x4d\\x1a\\x44\\xb9\\x56\\xda\\x75\\x1e\\xf7\\x30\\x60\\x05\\xdc\\x74\\xa9\\x71\\x5c\\x1a\\x69\\x77\\x64\\x6a\"\n\"\\x6c\\x1e\\x67\\x64\\x53\\x79\\x43\\x1b\\x21\\x50\\xba\\xde\\x96\\x8c\\x95\\x8f\\xa1\\x1f\\x2d\\x06\\x87\\x73\\x8a\\x80\\x79\\x1a\\xfb\\x15\\xe8\\x42\\xf7\\x3a\"\n\"\\xe8\\xd5\\xa2\\xb9\\xc4\\x1e\\xc4\\xba\\xae\\xd2\\xd3\\x1a\\xd5\\x61\\xba\\x30\\xa5\\x1e\\xfb\\x33\\xb8\\x5c\\x99\\x79\\x93\\x7c\\x9b\\x19\\x7f\\x97\\x83\\xa0\"\n\"\\x9e\\x1a\\xb0\\xa2\\xb4\\xb0\\xa5\\x1e\\xa4\\xae\\xb7\\x97\\xc0\\x1b\\xeb\\xc3\\x64\\x47\\x80\\x8a\\x82\\x87\\x7a\\x1f\\x0e\\xfc\\x20\\xf7\\xe9\\x36\\x0a\\x0e\"\n\"\\xfc\\x20\\xf7\\xe9\\x36\\x0a\\xf7\\x0c\\xfa\\x26\\x2c\\x0a\\xfb\\x42\\xf8\\x7a\\x22\\x1d\\xfb\\x01\\xfc\\x95\\x7f\\x52\\x7d\\x6a\\x74\\x71\\x19\\x6f\\x73\\x66\"\n\"\\x7a\\x65\\x1b\\x55\\x6a\\xa8\\xbb\\x9a\\x8e\\xa0\\x8f\\x9e\\x1f\\x95\\xba\\x05\\x2d\\x06\\x81\\x5c\\x05\\x86\\x77\\x89\\x77\\x7a\\x1a\\x30\\xd3\\x4d\\xf3\\xf7\"\n\"\\x12\\xdf\\xd3\\xf7\\x19\\xa8\\x1e\\xf7\\x08\\xf8\\xb7\\x05\\x0e\\xf8\\x1c\\xf8\\x72\\x16\\xf7\\xd4\\xc7\\x1d\\xfb\\x0c\\x1e\\xfb\\x6f\\x06\\xcc\\xf7\\xc9\\x05\"\n\"\\xfc\\x34\\x83\\x0a\\xf7\\x79\\x06\\xa7\\xfb\\xc9\\x15\\xf7\\x67\\x06\\xdc\\xb3\\x6c\\x4b\\x31\\x3e\\x44\\x28\\x1f\\xfb\\x66\\x06\\x0e\\xf7\\xc8\\xf8\\xab\\xf7\"\n\"\\xe6\\x15\\x43\\xfb\\xe6\\x05\\xf7\\x92\\xc7\\x1d\\xfb\\x0d\\x1e\\xfb\\x2d\\x06\\xcd\\xf7\\xc9\\x05\\x2d\\x06\\x49\\xfb\\xc9\\x05\\xfb\\xc2\\x06\\xcd\\xf7\\xc9\"\n\"\\x05\\x2e\\x22\\x0a\\xd3\\xf7\\xe6\\x05\\xf8\\x1f\\x16\\xf7\\x24\\x4f\\x1d\\xfb\\x24\\x06\\x0e\\xf7\\x3e\\xf7\\x8b\\x16\\xe9\\x06\\xc6\\xf7\\xaa\\x05\\xe2\\x9e\"\n\"\\xd3\\xb8\\xf7\\x0f\\x1b\\xda\\xad\\x76\\x5c\\x87\\x89\\x80\\x89\\x81\\x1f\\x48\\xfb\\xd1\\x05\\xe9\\x06\\xcf\\xf7\\xd5\\x05\\x8e\\x9a\\x8d\\x98\\x94\\x1a\\xaf\"\n\"\\x7c\\xab\\x6e\\xa5\\x1e\\xa5\\x6e\\x59\\x99\\x4a\\x1b\\x27\\x5f\\x7a\\x4d\\x4d\\x1f\\xbd\\xf7\\x7e\\x05\\xf7\\x3d\\x20\\x1d\\xfc\\x61\\x26\\x0a\\xf7\\x5a\\x06\"\n\"\\x0e\\x36\\xcd\\x5e\\x0a\\xd9\\x06\\xf7\\x2b\\xfb\\xed\\x05\\xee\\x06\\xfb\\x3e\\xf8\\x14\\xf7\\xaa\\xb8\\x0a\\x49\\xb3\\x0a\\xf7\\xbb\\xa2\\x0a\\x68\\x99\\x1d\"\n\"\\xf7\\x5f\\xf9\\xe2\\x3c\\x0a\\xf8\\xb7\\xc0\\x15\\x86\\x7c\\x85\\x8a\\x83\\x1b\\x7a\\x80\\x95\\x9b\\x90\\x8c\\x94\\x8d\\x93\\x1f\\xc9\\xf7\\xb6\\x05\\x8e\\x9b\"\n\"\\x8d\\x9b\\x96\\x1a\\xcf\\x46\\xb6\\xfb\\x01\\x3e\\x4e\\x77\\x64\\x62\\x1e\\x6c\\x6f\\x7c\\x6e\\x7d\\x53\\x08\\xe2\\x06\\xcd\\x9e\\xb7\\xa8\\xdc\\x1b\\xca\\xb2\"\n\"\\x76\\x6a\\x89\\x1f\\x84\\x89\\x83\\x89\\x81\\x1e\\x88\\x7b\\x83\\x69\\x74\\x7e\\x46\\x82\\x19\\xfb\\x27\\x79\\x74\\x85\\x5f\\x70\\x08\\x57\\x6b\\x6a\\x4f\\x4c\"\n\"\\x1a\\x3c\\xc4\\x5a\\xe7\\xcf\\xc5\\xa2\\xbe\\xc4\\x1e\\x8a\\x86\\x8b\\x86\\x87\\x1a\\x66\\xaa\\x74\\xbe\\x9c\\x97\\x8d\\x90\\xa1\\x1e\\xfb\\x00\\xf7\\x48\\x15\"\n\"\\x85\\x71\\x80\\x7a\\x70\\x76\\x08\\x6a\\x61\\x5b\\x7a\\x5a\\x1b\\x54\\x6d\\xa2\\xb5\\xa7\\x98\\xa6\\xa1\\x9f\\x1f\\xa1\\x9f\\xad\\x96\\xc4\\x93\\xe7\\x98\\x9d\"\n\"\\x8f\\xa9\\x97\\x08\\x0e\\xfb\\x03\\xf8\\x94\\xf9\\xa4\\x15\\x82\\x63\\x80\\x60\\x6e\\x79\\x38\\x7c\\x19\\x30\\x79\\x55\\x64\\x5a\\x37\\x08\\x56\\x30\\x5f\\xfb\"\n\"\\x33\\x23\\x1a\\xfb\\x0c\\xd6\\x3f\\xf7\\x0b\\xe9\\xda\\xb3\\xd7\\xc1\\x1e\\xb9\\xc9\\xa8\\xee\\xe6\\x1a\\xf7\\x06\\x3e\\xdc\\xfb\\x01\\x52\\x54\\x75\\x63\\x61\"\n\"\\x1e\\xa2\\xca\\xba\\xb2\\xd2\\x97\\xf7\\x1d\\x9c\\xb8\\xb3\\xa9\\xf7\\x1b\\x08\\xfb\\x6c\\xfb\\xd6\\xac\\x1d\\xcf\\xaf\\xc6\\xb1\\xcd\\x1b\\x0e\\xfb\\x2c\\xc0\"\n\"\\x16\\xf7\\xbb\\x06\\xc2\\xaf\\x97\\xa8\\xad\\x1f\\xb1\\xac\\xa3\\xc1\\xc0\\x1a\\xb7\\x7a\\xa9\\x62\\xa5\\x1e\\xc6\\xad\\xa5\\xb2\\xc1\\x1a\\xce\\x55\\xbc\\x41\"\n\"\\x1e\\xfb\\xa2\\x06\\x80\\xfc\\x56\\x15\\xae\\xf7\\x3a\\x05\\xf7\\x4e\\x06\\xb9\\xa5\\x74\\x62\\x50\\x5d\\x60\\x4e\\x1f\\xfb\\x1b\\xf7\\x84\\x15\\xa8\\xf7\\x1c\"\n\"\\x05\\xf7\\x4e\\x06\\xae\\x9e\\x79\\x6b\\x58\\x66\\x68\\x53\\x1f\\x0e\\xfb\\x49\\xf7\\x0f\\xc8\\x1d\\x0e\\xfb\\x0d\\x77\\x2a\\x15\\xe2\\x06\\x9f\\xec\\x05\\xf7\"\n\"\\xf9\\x06\\x77\\x2a\\x05\\xe1\\x06\\xaf\\xf7\\x3f\\x05\\x60\\x25\\x1d\\x05\\xfb\\xe2\\x06\\x61\\xfb\\x8a\\x2f\\xfb\\x3b\\xfb\\x07\\x66\\x08\\xf8\\x27\\x16\\xfb\"\n\"\\xa9\\x06\\xdc\\xc8\\xcc\\xf7\\x0c\\xaf\\xf7\\x34\\x93\\xae\\x18\\xf7\\x3b\\x06\\x0e\\x89\\x1d\\x0e\\x89\\x1d\\x2f\\xf8\\x31\\x2c\\x0a\\x99\\xf7\\xc2\\x16\\x29\"\n\"\\x0a\\xd6\\x06\\xea\\xfb\\x8d\\x05\\xe8\\x06\\x21\\xf7\\xb2\\xf7\\x42\\x71\\x1d\\x4a\\x41\\x1d\\x61\\xfb\\x5d\\x05\\x3f\\x06\\x4d\\xf7\\x5d\\x05\\x2e\\x06\\xd5\"\n\"\\xfb\\x82\\xfb\\x78\\xfb\\xb2\\x05\\xf2\\x06\\xf7\\x5d\\xf7\\x8d\\x05\\xcc\\x06\\x0e\\xfb\\x65\\xdb\\xf7\\x38\\x15\\x86\\x75\\x05\\x89\\x81\\x8a\\x82\\x7f\\x1a\"\n\"\\x39\\xc9\\x57\\xed\\xf7\\x0f\\xea\\xe0\\xf7\\x02\\xb9\\x77\\xab\\x60\\xa2\\x1e\\xd1\\xab\\xab\\xb6\\xc8\\x1a\\xd8\\x4d\\xc0\\x32\\xfb\\x01\\x3e\\x46\\xfb\\x0a\"\n\"\\x74\\x1e\\xe4\\x06\\xd4\\x98\\xc9\\x1d\\x6c\\x81\\x76\\x1b\\x68\\x2a\\x0a\\xae\\x06\\xc1\\xab\\x71\\x5f\\x4e\\x57\\x5c\\x47\\x57\\x6e\\xa2\\xb4\\x98\\x8b\\x8d\"\n\"\\x8d\\x94\\x1f\\x90\\xa1\\x05\\x0e\\x3e\\x0a\\x0e\\x3e\\x0a\\xe6\\xf7\\x61\\x40\\x1d\\xd7\\xbb\\xbf\\x9e\\xa9\\xab\\xae\\x1d\\xfb\\x5e\\xc1\\x16\\x29\\x0a\\xca\"\n\"\\xb7\\x1d\\x54\\x41\\x1d\\x0e\\xfb\\x02\\xf8\\x1b\\x16\\xdf\\x06\\x38\\x1d\\xfb\\xee\\x8b\\x0a\\xf7\\x47\\x06\\x0e\\x97\\xc0\\x16\\xdf\\x25\\x1d\\xc7\\xfc\\x56\"\n\"\\x05\\xe1\\x06\\xf7\\x8d\\xf8\\x56\\x2b\\xfc\\x56\\x05\\x76\\x1d\\xfb\\x14\\x06\\xfb\\x8a\\xfc\\x4b\\x4d\\xf8\\x4b\\x05\\xfb\\x14\\x06\\x0e\\xfb\\x10\\xa8\\x0a\"\n\"\\xdf\\x06\\xf7\\x03\\xf8\\xa0\\x9f\\x0a\\x9a\\x1d\\x84\\x3e\\xac\\x1d\\xce\\xaf\\xc6\\xb2\\xcd\\x1b\\x0e\\xfb\\x10\\xd6\\x16\\xdf\\x25\\x1d\\x05\\xf7\\x7c\\x06\"\n\"\\x34\\x1d\\x76\\x1d\\xfc\\x25\\x06\\x0e\\x97\\xfb\\x6e\\x15\\xdd\\x06\\xc5\\xf7\\xa5\\x05\\x55\\xaf\\xb9\\x73\\xd1\\x1b\\xf7\\x3a\\xf7\\x0e\\xf7\\x2e\\xf7\\x65\"\n\"\\xf7\\x0d\\x44\\xd9\\xfb\\x01\\x45\\x53\\x6f\\x4e\\x59\\x1f\\x9b\\xd5\\x05\\x39\\x06\\xf7\\x6d\\x4c\\x15\\xd2\\xb8\\x57\\x39\\xfb\\x28\\x2f\\xfb\\x10\\xfb\\x03\"\n\"\\x47\\x60\\xbe\\xdb\\xf7\\x2a\\xe5\\xf7\\x11\\xf7\\x00\\x1f\\x0e\\xfb\\x42\\xf8\\xb7\\xf7\\xf0\\x15\\x8c\\xa6\\x8b\\x8d\\x90\\x1a\\xeb\\x47\\xc8\\xfb\\x00\\x37\"\n\"\\x40\\x65\\x45\\x55\\x1e\\x58\\x48\\x6b\\x2b\\x31\\x1a\\xfb\\x11\\xd2\\x3f\\xf7\\x0a\\xf7\\x11\\xe3\\xd2\\xf7\\x18\\xb0\\x1e\\x32\\x06\\x37\\x6c\\x58\\x61\\x46\"\n\"\\x1b\\x47\\x60\\xba\\xd7\\xce\\xa2\\xdc\\xad\\xbe\\x1f\\xc4\\xb0\\xbc\\xa8\\xc7\\x1b\\xc5\\xae\\x6d\\x57\\x84\\x8a\\x7e\\x8a\\x7f\\x1f\\x0e\\xf7\\x33\\xf8\\x0b\"\n\"\\x16\\xdf\\x06\\xea\\xf8\\x56\\x05\\xf7\\x73\\x2d\\x1d\\xfc\\xa6\\x2a\\x0a\\xf7\\x73\\x06\\x0e\\xfb\\x42\\x91\\x1d\\x0e\\xf7\\x35\\xf7\\xdd\\xfb\\x6e\\x15\\xdf\"\n\"\\x06\\xb5\\xf7\\x58\\xe4\\x8f\\xc6\\x9d\\xc5\\xb5\\x19\\xe2\\xca\\xc2\\xf7\\x01\\xf7\\x03\\x1a\\xf7\\x12\\x3a\\xd7\\xfb\\x28\\x97\\x1e\\xa5\\xf7\\x0f\\x21\\x1d\"\n\"\\x71\\xfb\\x0f\\x33\\x87\\x50\\x78\\x52\\x61\\x19\\x36\\x4c\\x55\\xfb\\x01\\xfb\\x00\\x1a\\xfb\\x14\\xd9\\x3f\\xf7\\x26\\x7f\\x1e\\x9b\\xd6\\x15\\x26\\x93\\x58\"\n\"\\xbc\\xe3\\x1a\\xd6\\xac\\xd9\\xbf\\xbc\\x1e\\xb5\\xb2\\xb8\\x9e\\xce\\x91\\x08\\xdf\\x16\\xf4\\x82\\xbf\\x5a\\x33\\x1a\\x40\\x6a\\x3d\\x55\\x5b\\x1e\\x60\\x64\"\n\"\\x5d\\x78\\x47\\x85\\x08\\x0e\\xfb\\x42\\xf7\\xf6\\xf7\\xa1\\x15\\xf7\\x7c\\xf7\\x93\\x05\\x26\\x06\\xfb\\x3d\\x89\\x0a\\xe5\\x06\\x0e\\x25\\xe2\\x16\\xf7\\xee\"\n\"\\x06\\x69\\xfb\\x35\\x05\\xe2\\x06\\xbc\\xf7\\x7f\\x05\\x5d\\x25\\x1d\\xc2\\x1d\\xfb\\x30\\xf7\\xf8\\x16\\xdf\\x96\\x0a\\x05\\x7d\\x5d\\x63\\x85\\x63\\x1b\\x56\"\n\"\\x6e\\x9f\\xb0\\x94\\x8c\\x96\\x8e\\x97\\x1f\\xb3\\xf7\\x4f\\x21\\x1d\\x5d\\xfb\\x69\\x05\\x89\\x80\\x8a\\x81\\x80\\x1a\\x4b\\xc9\\x5f\\xe6\\xba\\xb0\\x93\\xa0\"\n\"\\xb9\\x1e\\x0e\\xf7\\x30\\xd9\\x16\\xf9\\x35\\x06\\xf7\\x04\\xf8\\xa0\\xa7\\x1d\\xf7\\x45\\xdf\\x16\\xf9\\x0c\\x06\\x69\\xfb\\x32\\x20\\x0a\\xbd\\xf7\\x7c\\x05\"\n\"\\x60\\x25\\x1d\\xa7\\x1d\\x56\\xf7\\x4d\\x16\\xf7\\x7e\\xbf\\x1d\\xfb\\x29\\x06\\xb7\\xf7\\x66\\x05\\xfb\\xb9\\x2a\\x0a\\xf7\\x66\\x06\\x8f\\xfc\\x0c\\x15\\xae\"\n\"\\xf7\\x3a\\x05\\xf7\\x27\\xda\\x1d\\xc9\\xe4\\x7d\\x0a\\xb9\\xa2\\x76\\x62\\x4f\\x5f\\x5f\\x4e\\x1f\\xf7\\x67\\x41\\x15\\x73\\x1d\\x0e\\xfb\\x28\\xd2\\x7d\\x0a\"\n\"\\xb8\\xa2\\x76\\x62\\x4f\\x60\\x5f\\x4e\\x1f\\x0e\\xfb\\x4a\\xf7\\x45\\xf7\\xf2\\x15\\xd1\\xae\\xc8\\xb5\\xcc\\x1b\\xc7\\xb2\\x5d\\x44\\x82\\x8a\\x7d\\x8a\\x7d\"\n\"\\x1f\\xfb\\x3a\\x2a\\x0a\\xf7\\x3d\\x06\\xfb\\x02\\x73\\x48\\x45\\x39\\x1b\\x45\\x61\\xbc\\xdc\\x1f\\x98\\x07\\x33\\x76\\x05\\xfb\\x12\\xd2\\x42\\xf7\\x0d\\xdf\"\n\"\\xd1\\xaf\\xd1\\xbd\\x1e\\xbd\\xd0\\xa8\\xe9\\xe4\\x1a\\xf7\\x14\\x48\\xd7\\xfb\\x05\\xfb\\x00\\x2f\\x4c\\xfb\\x00\\x57\\x1e\\x0e\\xd9\\xf7\\x37\\x4e\\x1d\\xbe\"\n\"\\xf7\\x83\\x05\\xe1\\x06\\x87\\x70\\x8a\\x79\\x76\\x1a\\xfb\\x0c\\xd7\\x3f\\xf7\\x0c\\xe3\\xdb\\xb3\\xd3\\xc0\\x1e\\xba\\xc9\\xaa\\xf0\\xe8\\x1a\\xf7\\x0a\\x3e\"\n\"\\xd7\\xfb\\x0b\\xfb\\x18\\x25\\x38\\xfb\\x23\\x60\\x1e\\x34\\x06\\xb7\\xf7\\x67\\x05\\xf7\\xcd\\x4d\\xd3\\x1d\\x52\\xd6\\x1d\\xce\\xaf\\xc5\\xb2\\xcd\\x1b\\x0e\"\n\"\\xfb\\x20\\xf8\\x0d\\x16\\x76\\x1d\\xfb\\x8e\\x06\\x53\\x62\\x81\\x75\\x69\\x1f\\x5e\\x6d\\x6e\\x55\\x52\\x1a\\x5a\\xa4\\x64\\xbe\\x6d\\x1e\\x5a\\x80\\x6e\\x6b\"\n\"\\x7e\\x4f\\x7f\\x53\\x18\\x81\\x5d\\x84\\x7c\\x78\\x7e\\x08\\xe4\\x06\\x9b\\x99\\x93\\x9b\\x94\\xb7\\x96\\xbd\\x18\\x96\\xc3\\xb0\\xab\\xc0\\x89\\x08\\xf7\\x19\"\n\"\\x06\\x9b\\xd5\\x15\\xfb\\x3a\\x06\\x60\\x74\\xa1\\xb4\\xc5\\xb7\\xb8\\xc4\\x1f\\xf7\\x3a\\x06\\x0e\\xfb\\xe3\\xf8\\x32\\x21\\x0a\\xfb\\x95\\x06\\xfb\\x03\\xfc\"\n\"\\xa0\\x05\\xdf\\x25\\x1d\\x05\\xf7\\x7c\\x06\\x9b\\xd5\\xf7\\x48\\xf7\\x28\\x05\\xfb\\x04\\x06\\x0e\\xd7\\xa7\\x0a\\x6e\\x5e\\x80\\x8b\\x86\\x89\\x84\\x1f\\x4a\"\n\"\\xfb\\xc7\\x7e\\x52\\x51\\x58\\x59\\x8c\\x19\\xfb\\x15\\x06\\x7a\\x3e\\x05\\xf7\\x16\\x06\\xf7\\x04\\x8c\\xe1\\xd3\\xa2\\xf7\\x03\\xcc\\xf7\\xc7\\x18\\x8f\\x9b\"\n\"\\x8c\\x99\\x9b\\x1a\\xd2\\x50\\xc4\\x42\\x4a\\x54\\x6f\\x46\\x45\\x1e\\xaa\\xf7\\x2a\\x05\\xf7\\x02\\x2d\\x1d\\xfb\\x02\\x06\\x9a\\xd1\\x21\\x1d\\x7c\\x45\\x05\"\n\"\\xfb\\x01\\x2a\\x0a\\xf7\\x01\\x06\\x0e\\xfb\\xbc\\xd1\\xc8\\x1d\\xf7\\x6e\\xf7\\x6c\\x15\\xfb\\x1b\\xfb\\x28\\x05\\xcf\\x45\\x0a\\xfb\\x46\\xf8\\xbf\\xf8\\x04\"\n\"\\x15\\x86\\xaf\\x85\\xa1\\x7f\\xa2\\x08\\xc4\\x6d\\x4d\\xac\\x3e\\x1b\\x35\\x44\\x65\\x40\\x57\\x1f\\x5d\\x49\\x71\\x35\\x34\\x1a\\xfb\\x1a\\xcb\\x3f\\xf7\\x04\"\n\"\\xf7\\x0e\\xe7\\xd0\\xf7\\x15\\xbe\\x1e\\x35\\xa1\\x05\\x2f\\x66\\x4f\\x58\\x42\\x1b\\x4e\\x66\\xbd\\xde\\x9a\\x8c\\x96\\x8d\\xa0\\x1f\\xf7\\x3c\\x06\\x9a\\xd5\"\n\"\\x05\\xfb\\x38\\x06\\xf0\\xab\\xc2\\xc0\\xd4\\x1b\\xcd\\xb6\\x61\\x45\\x90\\x1f\\x0e\\xfb\\x42\\xf8\\xa0\\xf8\\x0e\\x15\\x8e\\x9a\\x8c\\x93\\x97\\x1a\\xd9\\x4b\"\n\"\\xbb\\x25\\xfb\\x1a\\x2b\\x3f\\x21\\x4a\\xb0\\x68\\xe9\\x73\\x1e\\xdb\\x77\\x05\\xbb\\x7e\\x9e\\x79\\x6b\\x1a\\x53\\x4e\\x63\\x35\\x43\\x6b\\xa1\\xbb\\x96\\x8c\"\n\"\\x91\\x8d\\x9a\\x1e\\x35\\x06\\x87\\x76\\x8a\\x80\\x7d\\x1a\\x36\\xce\\x5b\\xf7\\x0a\\xd8\\xc8\\x9e\\xb2\\xb5\\x1e\\xb3\\xae\\xa2\\xbd\\xba\\x1a\\xc8\\x65\\xb0\"\n\"\\x3a\\xa0\\x1e\\x3f\\x9d\\x05\\x4f\\x9a\\x74\\x9d\\xaa\\x1a\\xc2\\xc1\\xb2\\xd7\\xc1\\xae\\x73\\x67\\x85\\x8a\\x82\\x8a\\x82\\x1e\\x0e\\xfc\\x58\\xf7\\x9c\\xf8\"\n\"\\xa0\\x9e\\x0a\\x22\\x20\\x0a\\x0e\\xfc\\x58\\xf7\\x9f\\xf8\\xa0\\xbb\\x0a\\xd5\\x53\\x0a\\xfc\\x58\\xf7\\x48\\x21\\x0a\\xfb\\x10\\xfc\\xdb\\x83\\x66\\x86\\x7f\"\n\"\\x82\\x80\\x19\\x7c\\x7e\\x75\\x84\\x6f\\x1b\\x86\\x84\\x8b\\x8c\\x82\\x1f\\x7b\\x3d\\xf7\\x0c\\x88\\xc1\\xa9\\xa0\\xdd\\x19\\xf7\\x1b\\xf9\\x0d\\x05\\xb6\\xf7\"\n\"\\x61\\x15\\x37\\x06\\x75\\x22\\x20\\x0a\\x0e\\xf7\\x80\\xf8\\x3c\\x16\\xf7\\x9f\\x9c\\x0a\\xfb\\x4b\\x06\\xb8\\xf7\\x66\\x05\\xfc\\x0d\\x8b\\x0a\\xf7\\x65\\x06\"\n\"\\x8f\\xfc\\x0c\\x15\\xaf\\xf7\\x3a\\x05\\xf7\\x48\\x06\\xb8\\xa2\\x76\\x62\\x4f\\x60\\x5f\\x4e\\x1f\\x0e\\xf7\\x2e\\xc7\\x16\\xdf\\x06\\xbe\\xf7\\x83\\x05\\xf7\"\n\"\\x84\\x06\\x59\\xfb\\x83\\x05\\xf7\\x8e\\xbf\\x1d\\xfb\\x3a\\x06\\xb8\\xf7\\x66\\xa3\\x0a\\xf7\\xcd\\xfc\\x56\\x15\\xaf\\xf7\\x3a\\x05\\xf7\\x37\\xda\\x1d\\xd7\"\n\"\\xa7\\x0a\\x6d\\x5f\\x7f\\x8b\\x88\\x89\\x83\\x1f\\x3f\\xfb\\xfa\\x20\\x0a\\xd7\\xf7\\xfa\\x05\\x8f\\x9b\\x8c\\x99\\x9b\\x1a\\xd2\\x51\\xc4\\x41\\x4a\\x54\\x6f\"\n\"\\x46\\x45\\x1e\\xaa\\xf7\\x2a\\x05\\xf7\\x03\\x2d\\x1d\\xfb\\x03\\x06\\x9a\\xd1\\x21\\x1d\\x7c\\x45\\x05\\xfb\\x00\\x06\\x7b\\x41\\x05\\xf7\\x00\\x06\\x0e\\xfb\"\n\"\\x5e\\xc1\\x16\\x29\\x0a\\xcf\\xb7\\x1d\\x4f\\x41\\x1d\\xf7\\x8e\\xf7\\x6c\\x15\\xfb\\x13\\xfb\\x28\\x05\\xc7\\x45\\x0a\\xfb\\x42\\x91\\x1d\\xfb\\xe6\\xf7\\x61\"\n\"\\x15\\x88\\x78\\x8a\\x82\\x7f\\x1a\\x51\\xbc\\x66\\xd7\\xc2\\xb7\\x9b\\xab\\xae\\x1e\\xa3\\xa2\\x97\\xa0\\x95\\xb6\\x08\\x51\\x06\\x60\\x7c\\x6b\\x78\\x50\\x1b\"\n\"\\x59\\x6e\\x9d\\xa9\\x8e\\x8b\\x91\\x8c\\x90\\x1f\\x0e\\xbd\\xdc\\x16\\xf7\\x7d\\x06\\x67\\x32\\x1d\\xaf\\xf7\\x3a\\x05\\xf7\\x7f\\x06\\xf7\\x2f\\xf9\\x6d\\xba\"\n\"\\x1d\\xe0\\x16\\xf7\\x2d\\x06\\x68\\xfb\\x35\\x20\\x0a\\xae\\xf7\\x35\\x05\\xf7\\x2a\\x06\\xf7\\x03\\xf8\\xa0\\xc2\\x1d\\xf3\\xf7\\xae\\x15\\x7e\\x5e\\x86\\x6f\"\n\"\\x68\\x1a\\xfb\\x0d\\xd6\\x3f\\xf7\\x0c\\xe0\\xd8\\xb1\\xcf\\xc3\\x1e\\xbe\\xcb\\xac\\xef\\xe9\\x1a\\xf7\\x0f\\x3f\\xd6\\xfb\\x10\\xfb\\x0d\\x31\\x4b\\xfb\\x0a\"\n\"\\x5e\\x1e\\xe4\\x06\\xd0\\xb0\\xc1\\xaf\\xcd\\x1b\\xd4\\xbd\\x59\\x42\\x79\\x89\\x7e\\x86\\x71\\x1f\\x7c\\x47\\x15\\x29\\x6f\\x44\\x4d\\x36\\x1b\\x45\\x5e\\xba\"\n\"\\xd4\\x98\\x8c\\x94\\x8f\\x9d\\x1f\\x0e\\xf7\\x6b\\xf8\\x82\\xf8\\xe0\\x15\\x8c\\x99\\x8c\\x93\\x93\\x1a\\xd0\\x5e\\xb3\\x3e\\x4e\\x56\\x70\\x57\\x62\\x1e\\x64\"\n\"\\x59\\x72\\x43\\x4a\\x1a\\x32\\xbb\\x59\\xdf\\xe5\\xd0\\xc2\\xe8\\xa6\\x1e\\x43\\x06\\x54\\x77\\x69\\x6f\\x5e\\x1b\\x5f\\x6f\\xaa\\xbd\\xb7\\x9a\\xc2\\xa0\\xae\"\n\"\\x1f\\xb2\\xa2\\xac\\xa0\\xb0\\x1b\\xb2\\xa4\\x73\\x65\\x89\\x8b\\x86\\x8a\\x86\\x1f\\xf7\\xd3\\xfb\\x5a\\x15\\x49\\x52\\x6d\\x55\\x62\\x1f\\x69\\x5c\\x74\\x40\"\n\"\\x49\\x1a\\x37\\xbe\\x59\\xe0\\xcd\\xc4\\xa8\\xc3\\xb3\\x1e\\xaf\\xba\\xa1\\xd5\\xcf\\x1a\\xdd\\x58\\xbd\\x36\\x1e\\x7e\\x4a\\x15\\xb8\\xa7\\x6a\\x56\\x65\\x80\"\n\"\\x5c\\x79\\x6a\\x1f\\x5d\\x73\\x66\\x71\\x61\\x1b\\x5e\\x6f\\xac\\xc0\\xf4\\xc6\\xe0\\xd4\\x1f\\x9b\\xf8\\x14\\x15\\xfc\\xab\\xfd\\x59\\x05\\xcd\\x06\\xf8\\xab\"\n\"\\xf9\\x59\\x05\\x0e\\xfb\\xf3\\xf7\\x46\\xf7\\xb8\\x15\\xca\\xcd\\xb2\\xba\\xa5\\xb8\\x08\\xb4\\xd0\\xa4\\xd8\\xc4\\x1a\\xbf\\x71\\xad\\x64\\x35\\x49\\xfb\\x22\"\n\"\\xfb\\xd2\\x4f\\x1e\\x6f\\x6c\\x77\\x77\\x7e\\x80\\x08\\x7a\\x7b\\x85\\x84\\x84\\x1a\\x84\\x92\\x82\\x91\\x92\\xa9\\xa3\\xa5\\xa5\\x1e\\x7f\\x2f\\x89\\x71\\x6c\"\n\"\\x1a\\x53\\xa6\\x69\\xb9\\xae\\xa8\\xa0\\xb7\\xa4\\x1e\\x98\\xa0\\x92\\x9f\\x97\\x1a\\x92\\x85\\x91\\x84\\x83\\x85\\x86\\x7d\\x84\\x1e\\x5e\\x76\\x7c\\x7b\\x77\"\n\"\\x1b\\x7d\\x84\\x94\\x9e\\xa5\\x9e\\xf7\\x11\\x9a\\xdb\\x1f\\x95\\xc2\\x15\\xf7\\x9f\\xb8\\xa7\\xe0\\xb8\\x1b\\x9c\\x96\\x7a\\x71\\x6d\\x81\\x5a\\x7c\\x62\\x1f\"\n\"\\x72\\x48\\x68\\x54\\x4e\\x48\\x08\\x0e\\xf8\\x2d\\xf9\\x5d\\x22\\x1d\\x41\\x06\\xfb\\x14\\xfc\\xf0\\xfb\\x57\\xf8\\xf0\\x05\\x3a\\x26\\x1d\\xd5\\x06\\xf7\\x13\"\n\"\\xf8\\xeb\\xf7\\x54\\xfc\\xeb\\x05\\xe0\\x06\\xf8\\x3f\\xf9\\x79\\x15\\x41\\x47\\x66\\x46\\x57\\x1f\\x59\\x49\\x6c\\x2c\\x36\\x1a\\xfb\\x10\\xce\\x3d\\xf4\\xd4\"\n\"\\xcc\\xae\\xce\\xbd\\x1e\\xbf\\xcf\\xab\\xe9\\xdc\\x1a\\xf7\\x13\\x48\\xdd\\x25\\x1e\\x81\\x38\\x15\\xcb\\xb2\\x59\\x3a\\xfb\\x1c\\x33\\xfb\\x0d\\x29\\x4b\\x62\"\n\"\\xbe\\xdd\\xc3\\x9e\\xca\\xaa\\xbc\\x1f\\xc6\\xb1\\xb8\\xa7\\xc2\\x1b\\xfb\\xee\\xfd\\x26\\x15\\xf8\\x2c\\x06\\x9d\\xde\\x05\\xfc\\x2c\\x06\\x0e\\x23\\xf9\\x47\"\n\"\\x21\\x0a\\x31\\x06\\x36\\xfb\\x2b\\x7f\\xbb\\x81\\xa1\\x78\\xa6\\x19\\xb6\\x6d\\x59\\xa4\\x51\\x1b\\x43\\x4a\\x65\\x45\\x5b\\x1f\\x5b\\x46\\x70\\x35\\x34\\x1a\"\n\"\\x52\\x9a\\x51\\xa4\\x66\\x1e\\x62\\xa5\\xaf\\x79\\xbe\\x1b\\xe7\\xd6\\xc5\\xf7\\x15\\xd7\\x1f\\xa0\\xfb\\x38\\x05\\xe7\\x06\\x5d\\xf7\\xa3\\x05\\x37\\x16\\xfb\"\n\"\\x2b\\x36\\x48\\x49\\x48\\x1b\\x60\\x6d\\xc3\\xda\\xca\\x9d\\xce\\xad\\xc4\\x1f\\xc3\\xab\\xb6\\xa9\\xba\\x1b\\xae\\xa5\\x7b\\x6a\\x9e\\x1f\\x9c\\x6e\\x94\\x6b\"\n\"\\x97\\x3a\\x08\\x0e\\x23\\xf9\\x47\\x21\\x0a\\x31\\x06\\x37\\xfb\\x2b\\x7e\\xbb\\x82\\xa1\\x78\\xa6\\x19\\xb6\\x6c\\x59\\xa4\\x51\\x1b\\x45\\x4b\\x65\\x45\\x5b\"\n\"\\x1f\\x5c\\x46\\x71\\x35\\x34\\x1a\\x52\\x9a\\x51\\xa3\\x66\\x1e\\x62\\xa4\\xae\\x79\\xbd\\x1b\\xe6\\xd7\\xc5\\xf7\\x15\\xd6\\x1f\\xa1\\xfb\\x38\\x05\\xe7\\x06\"\n\"\\x5c\\xf7\\xa3\\x05\\x38\\x16\\xfb\\x2b\\x35\\x48\\x49\\x49\\x1b\\x62\\x6f\\xc2\\xda\\xcb\\x9d\\xce\\xab\\xc4\\x1f\\xc3\\xab\\xb4\\xa9\\xb9\\x1b\\xae\\xa5\\x7b\"\n\"\\x6a\\x9f\\x1f\\x9c\\x6e\\x93\\x6b\\x98\\x3a\\x08\\x27\\xf8\\x90\\x2b\\x1d\\x5f\\x0a\\xf7\\x07\\xf8\\x4a\\x36\\x1d\\xfb\\xe9\\xc5\\xf7\\x82\\x15\\xf7\\x42\\xfb\"\n\"\\xe8\\x05\\x7b\\x93\\x95\\x84\\x97\\x1b\\x93\\x90\\x8f\\x92\\x92\\x89\\x93\\x88\\x93\\x1f\\xfb\\x17\\xf7\\xdd\\xf7\\x17\\xf7\\xdd\\x05\\x8e\\x93\\x8d\\x93\\x92\"\n\"\\x1a\\x93\\x86\\x8f\\x83\\x7f\\x83\\x85\\x79\\x81\\x1e\\x0e\\xfb\\xe9\\xf7\\xa7\\xf7\\x82\\x15\\xfb\\x42\\xf7\\xe8\\x05\\x9c\\x82\\x82\\x92\\x7f\\x1b\\x83\\x86\"\n\"\\x87\\x83\\x85\\x8d\\x83\\x8e\\x82\\x1f\\xf7\\x17\\xfb\\xdd\\xfb\\x17\\xfb\\xdd\\x05\\x88\\x84\\x89\\x83\\x84\\x1a\\x83\\x90\\x87\\x93\\x97\\x93\\x91\\x9c\\x95\"\n\"\\x1e\\x0e\\x83\\x1d\\x6b\\x9d\\x73\\xa6\\x85\\x1e\\x44\\x66\\x73\\x70\\x5e\\x1a\\x5a\\xbb\\x6f\\xdd\\xa3\\x92\\x8c\\x94\\xb4\\x1e\\x94\\xb8\\x05\\x84\\x76\\x75\"\n\"\\x88\\x72\\x1b\\x62\\x70\\x9c\\xa6\\xb4\\xbc\\xbb\\xc2\\x98\\x1f\\xfb\\x00\\xf7\\x46\\x15\\x4d\\x7e\\x33\\x56\\x33\\x1b\\x52\\x6b\\xa3\\xb5\\xac\\x9e\\xac\\xa9\"\n\"\\x9d\\x1f\\xa3\\x9a\\xa8\\x93\\xbd\\x92\\xe9\\x43\\x1d\\x0e\\xfb\\x11\\xf7\\x12\\xf7\\x87\\xde\\x1d\\xa4\\x1f\\x62\\xdd\\x9f\\x84\\xa6\\x1b\\xc8\\xbf\\xae\\xd8\"\n\"\\xc1\\x1f\\x66\\xa4\\x05\\x57\\x61\\x71\\x7a\\x64\\x1b\\x73\\x7e\\x90\\xa6\\x56\\x1f\\xa4\\x5a\\x6e\\x95\\x70\\x1b\\x51\\x5a\\x68\\x3c\\x56\\x1f\\x91\\xfb\\x57\"\n\"\\xde\\x1d\\xa5\\x1f\\x62\\xdc\\x9f\\x84\\xa7\\x1b\\xc7\\xbf\\xae\\xd8\\xc1\\x1f\\x66\\xa4\\x05\\x58\\x62\\x70\\x79\\x65\\x1b\\x73\\x7d\\x90\\xa6\\x56\\x1f\\xa4\"\n\"\\x5a\\x6f\\x95\\x6f\\x1b\\x52\\x5a\\x68\\x3c\\x55\\x1f\\x0e\\x60\\x0a\\x7c\\xf8\\x84\\xaf\\x1d\\x71\\x71\\x6f\\x77\\x7c\\x99\\xa0\\xa5\\xa6\\xa5\\xa7\\x1f\\x69\"\n\"\\xf7\\x3e\\x23\\x1d\\xf7\\xda\\xf9\\x5e\\xf7\\xac\\x15\\x7b\\x77\\x81\\x7b\\x7f\\x75\\x08\\x81\\x79\\x7d\\x65\\x84\\x1a\\x82\\x93\\x84\\x95\\x94\\x8e\\x8d\\x9f\"\n\"\\x9b\\x1e\\xb3\\xba\\xab\\xa4\\xe5\\xc1\\x08\\x9c\\x94\\x8d\\x8e\\x93\\x1a\\x94\\x85\\x91\\x76\\x96\\x1e\\x53\\xa7\\x4c\\xbd\\x66\\xb7\\x08\\x98\\x81\\x83\\x92\"\n\"\\x86\\x1b\\x7e\\x83\\x85\\x81\\x78\\xb0\\x41\\xa4\\x6d\\x1f\\xfc\\x3f\\x06\\xa4\\xa9\\xb1\\xd6\\x9d\\x1a\\x95\\x83\\x91\\x7f\\x86\\x87\\x88\\x7a\\x7c\\x1e\\x70\"\n\"\\x69\\x46\\x53\\x63\\x76\\x08\\x63\\x75\\x84\\x86\\x83\\x1a\\x83\\x8e\\x86\\x94\\x86\\x1e\\xef\\x4f\\xa1\\x7a\\xba\\x56\\x08\\x76\\x9e\\x8c\\x8a\\x94\\x1b\\x95\"\n\"\\x92\\x92\\x94\\x9f\\x6b\\xc8\\x6c\\xb3\\x1f\\x0e\\xfb\\x42\\xf7\\x6e\\xf9\\x69\\x15\\xfd\\x29\\x07\\xa4\\x6d\\x41\\xb0\\x79\\x1b\\x83\\x83\\x83\\x83\\x81\\x8f\"\n\"\\x86\\x9b\\x7e\\x1f\\xbb\\x61\\xa6\\x69\\xba\\x3a\\x08\\x74\\x98\\x8e\\x87\\x92\\x1b\\x97\\x8c\\x8c\\xac\\x9e\\x1f\\xb0\\xcc\\xac\\xb6\\xba\\xb3\\x08\\xa0\\x9d\"\n\"\\x8c\\x8d\\x94\\x1a\\x95\\x84\\x92\\x82\\x76\\x4c\\x6b\\x6d\\x65\\x1e\\xf9\\x29\\x07\\x0e\\xf7\\xda\\xfa\\x25\\xf7\\xad\\x15\\xc7\\xfd\\x29\\x07\\xa9\\xb1\\xab\"\n\"\\xca\\xa0\\x1a\\x94\\x84\\x92\\x81\\x82\\x89\\x8a\\x76\\x79\\x1e\\x67\\x61\\x63\\x6b\\x56\\x6b\\x08\\x56\\x6c\\x8b\\x8b\\x7f\\x1a\\x84\\x8f\\x88\\xa2\\x7e\\x1e\"\n\"\\xdc\\x5c\\xad\\x70\\xb5\\x5b\\x08\\x7b\\x98\\x90\\x87\\x95\\x1b\\x93\\x93\\x93\\x93\\x9d\\x66\\xd5\\x72\\xa9\\x1f\\x0e\\xf7\\xda\\xe1\\xf7\\xad\\x15\\xf9\\x29\"\n\"\\x06\\x72\\x6d\\x66\\x41\\x79\\x1a\\x83\\x93\\x83\\x93\\x95\\x90\\x8f\\x9b\\x98\\x1e\\xb5\\xbb\\xad\\xa6\\xdc\\xba\\x08\\xa2\\x98\\x8f\\x8e\\x92\\x1a\\x97\\x8a\"\n\"\\x8c\\x6a\\x9e\\x1e\\x4a\\xb0\\x60\\xac\\x63\\xba\\x08\\xa0\\x79\\x89\\x8c\\x82\\x1b\\x81\\x84\\x84\\x82\\x76\\xab\\x4c\\xa9\\x65\\x1f\\xfd\\x29\\x06\\x0e\\xfb\"\n\"\\x42\\xf7\\xaa\\x25\\x15\\xf9\\x29\\x07\\x72\\xaa\\xd4\\x66\\x9d\\x1b\\x93\\x93\\x93\\x93\\x95\\x87\\x90\\x7b\\x98\\x1f\\x5b\\xb5\\x70\\xad\\x5c\\xdc\\x08\\xa2\"\n\"\\x7e\\x88\\x8f\\x84\\x1b\\x7f\\x8a\\x8a\\x6a\\x78\\x1f\\x66\\x4a\\x6a\\x60\\x5c\\x63\\x08\\x76\\x79\\x8a\\x89\\x82\\x1a\\x81\\x92\\x84\\x94\\xa0\\xca\\xab\\xa9\"\n\"\\xb1\\x1e\\xfd\\x29\\x07\\x0e\\xfb\\x42\\xf7\\x6f\\xf7\\x0f\\x15\\x76\\x9b\\x7c\\x95\\x75\\x97\\x08\\x95\\x79\\x65\\x99\\x84\\x1b\\x82\\x84\\x83\\x81\\x82\\x8d\"\n\"\\x88\\x9f\\x7b\\x1f\\xba\\x63\\xa4\\x6b\\xc1\\x31\\x08\\x7a\\x94\\x8e\\x89\\x93\\x1b\\x94\\x91\\x91\\xa0\\x96\\x1f\\xa7\\xc3\\xbd\\xca\\xb7\\xb0\\x08\\x98\\x95\"\n\"\\x92\\x93\\x90\\x1a\\x98\\x85\\x93\\x81\\x78\\x42\\x66\\x72\\x6c\\x1e\\xf8\\x3f\\x07\\x72\\xa9\\xd6\\x76\\x0a\\xc8\\xaa\\xab\\xb3\\x1e\\x0e\\xfb\\x42\\xf7\\x0d\"\n\"\\x47\\x15\\x60\\xf7\\x9b\\xb6\\x07\\xfb\\x39\\xf7\\x97\\x15\\x77\\x9b\\x7b\\x96\\x75\\x97\\x08\\x95\\x78\\x66\\x99\\x84\\x1b\\x82\\x84\\x83\\x81\\x82\\x8d\\x88\"\n\"\\x9f\\x7b\\x1f\\xba\\x62\\xa3\\x6c\\xc2\\x30\\x08\\x7a\\x95\\x8d\\x89\\x93\\x1b\\x94\\x91\\x91\\xa0\\x96\\x1f\\xa7\\xc3\\xbd\\xca\\xb7\\xb0\\x08\\x98\\x95\\x92\"\n\"\\x93\\x90\\x1a\\x98\\x85\\x93\\x81\\x78\\x41\\x66\\x72\\x6d\\x1e\\xf8\\x3f\\x07\\x72\\xaa\\xd5\\x76\\x0a\\xc9\\xab\\xaa\\xb2\\x1e\\x0e\\x24\\xab\\xfb\\x6e\\x15\"\n\"\\xde\\x06\\xc0\\xf7\\x8b\\x05\\x69\\xa9\\xba\\x79\\xc7\\x1b\\xf7\\x28\\xf7\\x0f\\xf7\\x14\\xf7\\x2e\\xb9\\x7a\\xb8\\x71\\xa6\\x1f\\x7d\\x98\\x7d\\x93\\x6f\\x96\"\n\"\\xad\\x99\\x9b\\x95\\x9e\\x9e\\x08\\xb1\\xae\\xa1\\xbc\\xba\\x1a\\xe8\\x41\\xcc\\x21\\x4b\\x4e\\x73\\x62\\x62\\x1e\\x65\\x65\\x7b\\x64\\x75\\x27\\x08\\xdf\\x90\"\n\"\\x15\\x9a\\xd1\\x98\\xaa\\xa4\\xa4\\x08\\xa3\\xa2\\xb0\\x99\\xb3\\x1b\\xca\\xae\\x6a\\x50\\x61\\x77\\x65\\x67\\x6f\\x1f\\x70\\x76\\x73\\x84\\x4a\\x88\\x7d\\x47\"\n\"\\x18\\x8c\\x97\\x98\\x8c\\x92\\x1b\\xa9\\xa8\\x83\\x7c\\xa2\\x1f\\xa8\\x78\\x98\\x6e\\x5f\\x1a\\xfb\\x06\\x37\\x33\\xfb\\x02\\x59\\x66\\x9b\\xac\\x72\\x1e\\x0e\"\n\"\\xfb\\x42\\x49\\x0a\\x87\\xf8\\x1c\\x23\\x1d\\xfb\\x42\\x49\\x0a\\x6b\\xf7\\x88\\x2a\\x1d\\xfb\\x42\\x66\\x0a\\x2b\\xf8\\x1d\\x24\\x1d\\xfb\\x42\\x49\\x0a\\x8f\"\n\"\\xf8\\x03\\x23\\x0a\\xfb\\x14\\xf7\\xd7\\xf7\\x8e\\x15\\x42\\xf7\\xa6\\x05\\x31\\x06\\xef\\xfb\\xf5\\xfb\\x9f\\xfc\\x19\\x05\\xeb\\x06\\xf7\\x5e\\xf7\\xc3\\xdb\"\n\"\\xfb\\xc3\\x05\\xe4\\x06\\xfb\\x00\\xf8\\x12\\xf7\\x8d\\xf7\\xfc\\x05\\x29\\x06\\x0e\\xf7\\xda\\xf8\\x8b\\xf9\\x4b\\x15\\xfb\\x5c\\xfb\\x36\\xfb\\x35\\xfb\\x5c\"\n\"\\xfb\\x58\\xf7\\x36\\xfb\\x36\\xf7\\x57\\xf7\\x59\\xf7\\x37\\xf7\\x37\\xf7\\x57\\xf7\\x58\\xfb\\x36\\xf7\\x39\\xfb\\x55\\x1f\\x87\\xfb\\xd0\\x15\\xfb\\x52\\xf7\"\n\"\\x50\\x05\\xb8\\xc2\\xcc\\xa2\\xd1\\x1b\\xd0\\xcb\\x74\\x60\\xc4\\x1f\\xb3\\x63\\x15\\xbb\\x52\\xa2\\x4c\\x42\\x1a\\x43\\x74\\x4b\\x5d\\x53\\x1e\\xfb\\x54\\xf7\"\n\"\\x57\\x05\\xf7\\x2c\\xfb\\x7f\\x15\\x5f\\x54\\x48\\x73\\x45\\x1b\\x45\\x4b\\xa2\\xba\\x50\\x1f\\xf7\\x55\\xf7\\x55\\x05\\xfb\\x7d\\xfb\\x2d\\x15\\x5f\\xc1\\x74\"\n\"\\xcb\\xd1\\x1a\\xd3\\xa2\\xcb\\xba\\xc4\\x1e\\xf7\\x52\\xfb\\x50\\x05\\x0e\\x79\\xf8\\xd7\\x16\\x9f\\x07\\x84\\x8d\\x74\\x90\\x3e\\x9e\\x8b\\x8c\\x70\\x9c\\x19\"\n\"\\x45\\xbb\\x64\\xd8\\xe4\\x1a\\x94\\x07\\x9b\\x07\\x9f\\x67\\x94\\x7e\\x97\\x7c\\x08\\x5c\\xb1\\xc8\\x6d\\xc1\\x1b\\xe6\\xd3\\xd5\\xe8\\xe7\\x4a\\xd2\\x39\\x71\"\n\"\\x80\\x88\\x79\\x67\\x1f\\x88\\x8a\\x83\\x86\\x81\\x87\\x08\\xa9\\xb7\\x94\\xa5\\xb0\\x1a\\xe5\\x43\\xd2\\x2f\\x2e\\x44\\x45\\x31\\x67\\x92\\x78\\xad\\x56\\x1e\"\n\"\\xa3\\x58\\x78\\x91\\x70\\x1b\\x3d\\x49\\x40\\x33\\x2d\\xd3\\x43\\xe9\\xdb\\xd1\\xbe\\xe5\\xb6\\x1f\\x8c\\x72\\x05\\x83\\x07\\x54\\x71\\x45\\x65\\x5f\\x1e\\x5c\"\n\"\\x5a\\x8a\\x8a\\xfb\\x0e\\x6e\\x83\\x89\\x18\\x77\\x07\\x0e\\x6c\\xf9\\x1a\\x88\\x1d\\xf7\\xf7\\xf7\\x9f\\x8c\\x0a\\xf8\\xba\\xf9\\x21\\x15\\xfb\\x2a\\x06\\x7f\"\n\"\\x56\\x05\\xf7\\x2a\\x06\\x6b\\xfb\\x2c\\x9f\\x1d\\xf7\\x13\\xf8\\xec\\x05\\xc9\\x06\\x96\\xc0\\x05\\x4e\\x06\\x9b\\xd7\\x21\\x1d\\xfb\\x67\\xfb\\x9f\\x15\\xd6\"\n\"\\xb6\\x59\\x36\\x4f\\x7b\\x4f\\x6d\\x57\\x1f\\x48\\x64\\x5a\\x69\\x4e\\x1b\\x41\\x60\\xbd\\xe1\\xc4\\x9b\\xca\\xa7\\xbe\\x1f\\xd0\\xb1\\xbb\\xab\\xcb\\x1b\\x0e\"\n\"\\xf8\\x0d\\xf8\\xa2\\x15\\x7e\\x06\\x3f\\x45\\x6a\\x4f\\x5c\\x1f\\x57\\x4b\\x69\\x25\\x32\\x1a\\xfb\\x11\\xd6\\x3f\\xf7\\x11\\xe3\\xd6\\xb0\\xd0\\xbf\\x1e\\xbb\"\n\"\\xca\\xac\\xf1\\xde\\x1a\\xd8\\x6f\\xc3\\x40\\xcf\\x1e\\xfb\\x19\\xf7\\x0f\\x05\\xf7\\x98\\x2d\\x1d\\xfc\\x06\\x06\\x7c\\x44\\x05\\xf7\\x22\\xfb\\x58\\x15\\xd0\"\n\"\\xb7\\x59\\x3c\\x53\\x7a\\x46\\x71\\x5b\\x1f\\x47\\x66\\x52\\x65\\x4a\\x1b\\x44\\x60\\xbc\\xdb\\xc2\\x9c\\xd1\\xa5\\xbb\\x1f\\xcf\\xaf\\xc5\\xb1\\xcd\\x1b\\x0e\"\n\"\\xfb\\x38\\xf7\\xa0\\xf9\\x89\\x15\\x42\\xfb\\x12\\x4c\\x31\\xfb\\x20\\xfb\\x44\\xf0\\xfb\\x0f\\xf7\\x35\\xfb\\x78\\x99\\x61\\xde\\xf7\\x20\\xdf\\xf7\\x0b\\xf7\"\n\"\\x03\\xf7\\x1a\\xfb\\x0a\\xf7\\x25\\x29\\xf7\\x1f\\x4d\\xf7\\x00\\x08\\x0e\\xfb\\xe9\\xf7\\xc8\\xf9\\xef\\x15\\x78\\x30\\x8e\\x23\\x05\\xaa\\xa8\\x1d\\x68\\x0a\"\n\"\\xfb\\x60\\xf8\\x3b\\xa6\\x1d\\x59\\x6b\\xaa\\x0a\\x56\\x1d\\x64\\xf7\\xb2\\x2a\\x1d\\x56\\x1d\\x84\\xf8\\x2d\\x23\\x0a\\xf7\\xda\\xf9\\x93\\xf7\\x6c\\x15\\xc8\"\n\"\\xfc\\x62\\x07\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\xf7\\xb7\\xc9\\xfb\\xac\\x06\\x38\\x68\\x84\\x72\\x66\\x1f\\x4a\\x60\\x69\\x42\\x2c\\x1a\\xfb\\x08\\xb8\"\n\"\\x38\\xb9\\x0a\\xc9\\xfb\\xb7\\x06\\xfb\\x01\\x89\\x53\\xbd\\x85\\xf5\\x08\\x0e\\x56\\x1d\\xd4\\xf8\\x1a\\x36\\x1d\\xd1\\x16\\x90\\x0a\\x31\\xfc\\x3d\\x9b\\x0a\"\n\"\\x8d\\x8b\\x95\\x1b\\xf7\\x06\\xb7\\xa6\\xdd\\x9d\\x1f\\xf2\\xf8\\x79\\x6c\\x1d\\x3f\\x06\\x0e\\xf8\\x64\\xfb\\x2a\\x15\\x84\\x79\\x72\\x88\\x70\\x1b\\x63\\x70\"\n\"\\x9e\\xa6\\xa7\\xa6\\xb3\\xb4\\xab\\x1f\\xe0\\xcc\\xb2\\xbb\\x9c\\xc7\\x08\\xdf\\x1d\\xe0\\xa1\\x8c\\x94\\x8f\\x9a\\x1f\\xf8\\x16\\x06\\x99\\xd9\\x8e\\xa3\\xab\"\n\"\\x1a\\xec\\xad\\x1d\\xc2\\x1b\\x9f\\x9a\\x8c\\x91\\xaa\\x1f\\x45\\x61\\x74\\x6f\\x62\\x1a\\x70\\x97\\x77\\xa3\\x7f\\x1e\\x80\\xa1\\xb2\\x83\\xb0\\x1b\\xa8\\x9d\"\n\"\\x8e\\x92\\xa0\\x1f\\xfb\\x98\\xf8\\x89\\x15\\xe7\\xa5\\xd5\\xcb\\xdc\\x1b\\xd2\\xb8\\x5b\\x40\\x82\\x8a\\x83\\x89\\x7b\\x1f\\x0e\\xfb\\x7f\\x85\\x1d\\x0e\\xfb\"\n\"\\x7f\\x85\\x1d\\x8d\\xf8\\xb5\\x2b\\x1d\\x31\\xd2\\x1d\\xb9\\xf7\\x6e\\xe3\\x1d\\x5b\\xfb\\x70\\xb2\\x0a\\x41\\xf8\\xb6\\xf7\\x88\\x15\\x92\\x07\\x8a\\xc7\\x8a\"\n\"\\x97\\x84\\xac\\x08\\xf5\\x75\\x34\\xce\\xfb\\x07\\x1b\\xfb\\x27\\x2e\\x20\\xfb\\x3b\\xfb\\x3b\\xe5\\x26\\xf7\\x28\\xf7\\x06\\xd5\\xbf\\xf2\\xab\\x1f\\x8d\\x92\"\n\"\\x05\\x52\\x06\\x84\\x7b\\x86\\x82\\x88\\x87\\x08\\x59\\x6c\\x58\\x71\\x4a\\x1b\\x5f\\x67\\x97\\xa1\\x73\\x1f\\x7a\\x9a\\x82\\x9b\\x80\\xb0\\x08\\xed\\x07\\xf7\"\n\"\\xb3\\xbb\\x15\\xfb\\xb1\\xe0\\x06\\xd1\\xac\\xaf\\xa4\\xd0\\x1b\\xc1\\xb0\\x7a\\x63\\xae\\x1f\\x96\\x7e\\x8f\\x84\\x91\\x79\\x08\\x0e\\xfb\\x0b\\x8e\\x1d\\x0e\"\n\"\\xfb\\x0b\\x8e\\x1d\\xf7\\x30\\xc5\\x1d\\xfb\\x42\\xf7\\xdc\\xaa\\x1d\\xf8\\x30\\xd8\\x1d\\xb2\\x06\\xcf\\xd1\\x1d\\x0e\\xfb\\x8e\\xbe\\x16\\xf7\\xd9\\xf8\\xd5\"\n\"\\xfb\\xd9\\x37\\xf7\\x85\\xfb\\x36\\xfb\\x85\\x37\\xf7\\x85\\xfb\\x37\\xfb\\x85\\x06\\x0e\\xd7\\xf7\\xf4\\xf7\\x98\\x15\\xfb\\x37\\x60\\xf7\\x37\\xfb\\x3a\\xbb\"\n\"\\xf7\\x3a\\xf7\\x35\\xb6\\xfb\\x35\\xf3\\x06\\xe7\\xa2\\xcc\\xd9\\xe2\\x1a\\xeb\\x36\\xdc\\x27\\x2a\\x39\\x38\\x2a\\x36\\xcd\\x3e\\xe8\\x74\\x1e\\xa6\\xf7\\xcb\"\n\"\\x15\\xd0\\xc5\\x50\\x45\\x43\\x51\\x51\\x43\\x43\\x52\\xc5\\xd4\\xd3\\xc5\\xc3\\xd5\\x1f\\x0e\\xf7\\x51\\xf7\\xd4\\x15\\xf7\\x67\\x06\\x9b\\xd9\\x05\\xfb\\x67\"\n\"\\x06\\xbd\\xf7\\x7e\\x05\\xf7\\xd3\\x06\\x9b\\xd9\\x05\\xfc\\x2a\\x06\\xfb\\x2b\\xfd\\x5a\\x05\\xe3\\x06\\xf7\\xd8\\xf8\\x82\\x15\\x22\\xfc\\x82\\x05\\xdb\\x06\"\n\"\\xbe\\xf7\\x86\\xa0\\xf7\\x00\\xd6\\xd5\\xe1\\x88\\x19\\x9d\\xe0\\x05\\x8d\\x7f\\x85\\x8c\\x84\\x1b\\x61\\x59\\x6a\\x4b\\x55\\x1f\\x9c\\xdd\\x05\\x0e\\xfb\\x42\"\n\"\\xf7\\x39\\xfb\\x6e\\x15\\xdf\\x06\\xbc\\xf7\\x7e\\xf7\\xc1\\xf8\\x90\\x05\\x28\\x06\\xfb\\x73\\xfc\\x19\\x4a\\xf8\\x19\\x05\\x32\\x06\\xe6\\xfc\\x90\\x05\\x0e\"\n\"\\xf8\\xa1\\x80\\x1d\\x40\\xf7\\x9f\\x40\\x1d\\xd7\\xbb\\xbe\\x9e\\xa9\\xac\\xb7\\x0a\\x82\\x62\\x74\\x4f\\x1b\\x59\\x6b\\x9f\\xaa\\x1f\\x90\\x07\\x92\\x07\\x0e\"\n\"\\x62\\x0a\\x81\\xf7\\xab\\x24\\x1d\\xf8\\x92\\x80\\x1d\\xeb\\xf7\\x13\\x15\\xa0\\xed\\x05\\x54\\x06\\xc6\\x96\\xa3\\xa8\\xb2\\x1b\\x93\\xb1\\x05\\x4c\\x5c\\x5b\"\n\"\\x38\\x79\\x1f\\x77\\x2e\\x05\\x0e\\xf8\\x9f\\xf8\\xa0\\x15\\x7b\\x3f\\x05\\xcc\\x66\\x63\\xa5\\x4c\\x1b\\x3e\\x3f\\x65\\x4d\\x5a\\x1f\\x55\\x46\\x66\\xfb\\x00\"\n\"\\x31\\x1a\\xfb\\x05\\xd1\\x39\\xeb\\xd2\\xc1\\xa8\\xcc\\xc1\\x1e\\x85\\x70\\x7c\\x45\\x79\\x62\\x6f\\x6c\\x19\\x6b\\x6d\\x5e\\x79\\x58\\x1b\\x47\\x63\\xa6\\xb8\"\n\"\\x1f\\x9b\\x36\\x07\\x8a\\x82\\x8b\\x83\\x87\\x1a\\x37\\xcf\\x56\\xf7\\x00\\xdb\\xd7\\xa4\\xb3\\xb4\\x1e\\xb9\\xb7\\xa8\\xd1\\xa6\\xf7\\x11\\xe8\\xf8\\x4a\\x18\"\n\"\\xfb\\x82\\x4d\\x15\\xce\\xb2\\x5e\\x3e\\xfb\\x31\\x33\\xfb\\x15\\xfb\\x01\\x46\\x63\\xb9\\xd9\\xf7\\x30\\xe5\\xf7\\x14\\xf7\\x02\\x1f\\xf7\\x0c\\xf7\\x91\\x23\"\n\"\\x0a\\xfb\\x11\\xc1\\xd3\\x15\\x7c\\x43\\x05\\xf8\\x7d\\x06\\x9a\\xd3\\x05\\xcd\\xf7\\xc5\\x8f\\x0a\\xf7\\xb8\\xf9\\x21\\x15\\x9b\\xd7\\x05\\x38\\x06\\x7b\\x3f\"\n\"\\x05\\x4f\\x06\\x7f\\x56\\x05\\xc7\\x06\\xfb\\x13\\xfc\\xec\\x05\\xde\\x06\\xc8\\xf7\\xb5\\x05\\xf3\\xa2\\xd5\\xd4\\xde\\x1b\\xc0\\xaf\\x6f\\x62\\x7b\\x8a\\x83\"\n\"\\x89\\x81\\x1f\\x3e\\xfb\\xff\\x05\\xde\\x06\\xdf\\xf8\\x20\\x05\\x8d\\x94\\x8c\\x94\\x97\\x1a\\xd2\\x58\\xb5\\x34\\x3d\\x55\\x72\\x4d\\x55\\x1e\\xaa\\xf7\\x28\"\n\"\\x05\\xf7\\x63\\x06\\x97\\xc0\\x05\\x0e\\x73\\x0a\\x62\\xf7\\x67\\x24\\x1d\\x3b\\xf7\\xbc\\x6f\\x15\\x9c\\xde\\xc7\\xf3\\xf7\\x0b\\xf7\\x2b\\xb4\\xc0\\x9b\\xa0\"\n\"\\x9a\\xa3\\x08\\xb1\\xca\\x9d\\xc2\\xc1\\x1a\\xdc\\x45\\xcf\\x36\\x5b\\x5f\\x76\\x65\\x6b\\x1e\\x76\\x72\\x80\\x75\\x7e\\x5d\\x08\\xf2\\x67\\x56\\xbb\\x3a\\x1b\"\n\"\\x36\\x48\\x46\\x34\\x4a\\xa3\\x57\\xdc\\xfb\\x02\\x1f\\xf7\\x2c\\xfb\\x60\\xb2\\x49\\xa5\\x24\\x08\\x0e\\x45\\x96\\x16\\xf8\\xdb\\xf8\\x25\\x06\\xfb\\xb8\\xf7\"\n\"\\xdc\\xfb\\xb7\\xfb\\xdc\\x05\\xbe\\xfb\\xf2\\x15\\xf7\\xdc\\x07\\xf7\\x84\\xf7\\xa2\\xf7\\x85\\xfb\\xa2\\x05\\xfb\\xdc\\x07\\x0e\\xfc\\x20\\x2d\\x0a\\x68\\xf9\"\n\"\\x6d\\x3c\\x0a\\xfb\\x7a\\xf7\\xa7\\x8d\\x0a\\xe8\\x25\\x15\\xfb\\x13\\xfc\\xec\\x5c\\x0a\\x85\\x8b\\x8d\\x7e\\x1f\\x7c\\x44\\x05\\x88\\x91\\x8e\\x8b\\x94\\x1b\"\n\"\\xf7\\x07\\xb7\\xa6\\xdd\\x9d\\x1f\\xf7\\x1a\\xf9\\x0d\\x05\\xb7\\xf7\\x61\\x15\\x37\\x06\\x74\\x24\\x20\\x0a\\x0e\\xfc\\x20\\xab\\x0a\\xf7\\x73\\xf9\\x4c\\x15\"\n\"\\xfb\\x7e\\x06\\x7c\\x46\\x05\\xf7\\x7e\\x06\\x0e\\xb2\\xf8\\x37\\xf7\\xbd\\x15\\x6d\\xae\\x80\\x96\\x79\\x9b\\x08\\xa8\\x6b\\x63\\x9b\\x65\\x1b\\x32\\x38\\x39\"\n\"\\x34\\x4a\\xb9\\x5d\\xcd\\xc5\\xc2\\xa7\\xda\\xf1\\x1f\\x37\\xd7\\xb0\\x74\\xc2\\x1b\\xe6\\xde\\xdc\\xe3\\xcc\\x5d\\xb9\\x4b\\x63\\x5b\\x7b\\x6e\\x5f\\x1f\\x75\"\n\"\\x7c\\x85\\x87\\x51\\x60\\x08\\xa8\\x6a\\x15\\xc7\\xd5\\xc4\\xa8\\xb6\\x1b\\xb3\\xab\\x6c\\x65\\x53\\x54\\x56\\x52\\x6f\\x79\\x93\\xa9\\x66\\x1f\\x74\\x9e\\x81\"\n\"\\x95\\x79\\xa1\\x08\\x44\\x16\\x71\\x75\\x80\\x84\\x67\\x75\\x08\\x6e\\x5c\\x73\\x82\\x6e\\x1b\\x62\\x6b\\xa9\\xb3\\xc3\\xc1\\xbf\\xc5\\xb4\\xb9\\x6c\\x51\\xba\"\n\"\\x1f\\x0e\\xfc\\x24\\xf7\\x50\\xf8\\x9f\\x15\\xb0\\x85\\xda\\x82\\xe8\\xb0\\x0a\\x8e\\x8a\\x80\\x95\\x1e\\x81\\x95\\x97\\x86\\x98\\x1b\\xa6\\xa0\\xa1\\xa7\\xa9\"\n\"\\x6f\\xa3\\x68\\x60\\x6c\\x6c\\x51\\x7d\\x1f\\x7b\\x4b\\x86\\x46\\xfb\\x45\\x1a\\xfb\\x78\\x07\\x5f\\x8f\\x4e\\x95\\x22\\x1e\\x8f\\x61\\x8d\\x75\\x7f\\x1a\\x79\"\n\"\\x85\\x81\\x7f\\x85\\x89\\x8c\\x96\\x80\\x1e\\x95\\x81\\x80\\x90\\x7d\\x1b\\x71\\x75\\x75\\x70\\x6c\\xa7\\x73\\xae\\xb7\\xaa\\xaa\\xc5\\x99\\x1f\\x9b\\xcb\\x90\"\n\"\\xd4\\xf7\\x41\\x1a\\x0e\\x45\\xf7\\xab\\xf9\\xb4\\x15\\xfc\\xfa\\x07\\x5f\\x8f\\x4d\\x95\\x23\\x1e\\x8f\\x61\\x8d\\x75\\x7f\\x1a\\x79\\x85\\x81\\x7f\\x85\\x89\"\n\"\\x8c\\x96\\x80\\x1e\\x95\\x80\\x81\\x90\\x7d\\x1b\\x71\\x75\\x75\\x70\\x6c\\xa7\\x73\\xae\\xb7\\xaa\\xaa\\xc5\\x99\\x1f\\x9b\\xcb\\x90\\xd4\\xf7\\x41\\x1a\\xf8\"\n\"\\xf2\\x07\\x0e\\x45\\xf7\\xf4\\xfb\\x61\\x15\\xf8\\xfa\\x07\\xb7\\x87\\xc9\\x81\\xf3\\xb0\\x0a\\x8d\\x8a\\x80\\x96\\x1e\\x81\\x96\\x95\\x86\\x99\\x1b\\xa5\\xa1\"\n\"\\xa1\\xa6\\xaa\\x6f\\xa3\\x68\\x5f\\x6c\\x6c\\x51\\x7d\\x1f\\x7b\\x4b\\x86\\x42\\xfb\\x41\\x1a\\xfc\\xf2\\x07\\x0e\\xb8\\xf8\\xeb\\x16\\xf7\\xa1\\x07\\xf7\\x29\"\n\"\\x86\\xb1\\x71\\xb7\\x1e\\xd1\\x61\\x3e\\xb4\\x31\\x1b\\x38\\x46\\x6a\\x4d\\x5e\\x1f\\x66\\x5a\\x85\\x67\\xfb\\x36\\x1a\\xfb\\xa1\\xd1\\xf7\\xa4\\x07\\xf7\\x05\"\n\"\\x91\\xba\\x9d\\xad\\x1e\\xbd\\xa6\\xc5\\xad\\xc8\\x1b\\xc4\\xc2\\x6e\\x5d\\xa8\\x1f\\xa2\\x67\\x91\\x62\\xfb\\x12\\x1a\\xfb\\xa4\\x07\\x0e\\xf8\\x0e\\xf8\\xa3\"\n\"\\xf9\\x6e\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\\xf7\"\n\"\\x37\\xfb\\x5e\\x1f\\xfb\\x01\\xfb\\x63\\xc1\\x1d\\xfb\\x14\\xfb\\x05\\x15\\x96\\x59\\x96\\x75\\xa5\\x6d\\x08\\x54\\xbb\\xc7\\x71\\xdc\\x1b\\xdc\\xc7\\xa5\\xc2\"\n\"\\xbb\\x1f\\xa5\\xa9\\x96\\xa1\\x96\\xbd\\x84\\x36\\x80\\x62\\x6d\\x5e\\x08\\x4c\\x61\\x4b\\x6b\\x38\\x1b\\x3e\\x4f\\xa6\\xc1\\x61\\x1f\\x67\\xba\\x7c\\xb8\\x84\"\n\"\\xe8\\x08\\xf7\\xee\\xf7\\x05\\xc1\\x1d\\x0e\\xfc\\x58\\xf7\\x99\\xbc\\x0a\\xad\\x06\\x4b\\x61\\x67\\x5d\\x63\\x1a\\x5e\\xb5\\x6b\\xc7\\x9d\\x98\\x8e\\x92\\xa1\"\n\"\\x1e\\x94\\xb8\\x05\\x82\\x74\\x8a\\x8b\\x7f\\x1b\\x69\\x76\\x9c\\xa5\\xab\\xab\\xbc\\xb8\\xae\\x1f\\xf7\\x2f\\x22\\x1d\\x37\\x06\\x74\\x24\\x20\\x0a\\x0e\\xfc\"\n\"\\x58\\x43\\x0a\\x0e\\xfc\\x58\\x43\\x0a\\xbd\\xf7\\x53\\x15\\x23\\x06\\x76\\xa1\\x0a\\x76\\x24\\x05\\xf3\\x06\\x0e\\xfc\\x58\\x43\\x0a\\xd4\\xf7\\xe3\\x15\\x77\"\n\"\\x97\\x0a\\x9f\\xe6\\x05\\xc7\\xfb\\x2b\\x15\\x2f\\x06\\x75\\x24\\x05\\xe7\\x06\\xfb\\x2c\\xf2\\x15\\x2f\\x06\\x75\\x24\\x05\\xe7\\x06\\x0e\\xfc\\x58\\x43\\x0a\"\n\"\\xc3\\xc5\\x1d\\xfc\\x20\\xab\\x0a\\xf7\\x68\\x90\\x1d\\xfc\\x58\\x7b\\x0a\\x55\\xf7\\x6d\\x24\\x1d\\xfb\\x42\\xf7\\x60\\xf7\\xc3\\x15\\xba\\xf7\\x71\\xe1\\x1d\"\n\"\\xb4\\xf7\\x57\\xf7\\x03\\xe6\\xf7\\x07\\xfb\\xb2\\x05\\xe8\\x06\\xfb\\x1f\\xf7\\xe6\\xf7\\x76\\xf7\\x4e\\x05\\xfb\\x07\\x06\\x0e\\xfb\\x42\\x98\\x1d\\x8c\\xfc\"\n\"\\x02\\x5e\\x1d\\xfb\\x42\\xf7\\x47\\xf7\\x47\\x15\\xf0\\xde\\xf3\\xfb\\x9a\\x05\\xec\\x06\\xfb\\x25\\xf7\\xc2\\xf7\\x96\\xf7\\x72\\x05\\xfb\\x0c\\x06\\xfb\\xa7\"\n\"\\xfb\\x92\\xc3\\xf7\\x92\\x05\\x35\\x06\\xfb\\x06\\xfc\\xa0\\x05\\xe1\\x06\\x0e\\xfc\\x58\\xf7\\xc7\\x37\\x1d\\xf7\\x5b\\x55\\x0a\\xfb\\x4a\\x9d\\x16\\xea\\x06\"\n\"\\xf7\\x6e\\xf8\\x1b\\xc5\\xfc\\x1b\\x05\\xe2\\x06\\xfb\\x05\\xf9\\x6d\\x05\\x34\\x06\\xaf\\xfb\\x66\\x05\\x0e\\xfc\\x0b\\xf7\\xc3\\x37\\x1d\\xf7\\x6b\\xf9\\x6d\"\n\"\\x8c\\x0a\\xfc\\x58\\xf7\\xc7\\x37\\x1d\\x22\\x4f\\x35\\x1d\\xfb\\xa6\\xf7\\xd8\\x37\\x1d\\xf7\\xa2\\xf8\\x4d\\x23\\x0a\\xfb\\x11\\xf8\\xa8\\xd3\\x15\\xfc\\x7d\"\n\"\\x27\\x1d\\xf8\\x7d\\x06\\xfc\\x3b\\xf7\\xc8\\xb5\\x1d\\xf7\\xbe\\xf7\\xd5\\x15\\xf7\\x1d\\x06\\x97\\xc2\\x05\\xfb\\x34\\x06\\x86\\x9c\\x88\\x93\\x8a\\x8e\\x08\"\n\"\\x75\\xc9\\x8b\\x8b\\xa5\\x1a\\xe6\\xd4\\xd0\\xea\\xd2\\xb8\\x65\\x4f\\x79\\x89\\x7d\\x84\\x72\\x1e\\xe3\\x06\\x92\\xb5\\x8d\\x9d\\xa1\\x1a\\xe5\\x40\\xc7\\xfb\"\n\"\\x03\\xfb\\x28\\xfb\\x1a\\xfb\\x0b\\xfb\\x16\\x6e\\x8d\\x85\\xa6\\x49\\x1e\\x8c\\x88\\x05\\x38\\x06\\x7f\\x54\\x05\\xf7\\x05\\x06\\x91\\x78\\x8e\\x7f\\x85\\x1a\"\n\"\\xfb\\x1b\\x06\\x7f\\x54\\x05\\xf7\\x21\\x06\\x7a\\x53\\x4e\\x4a\\x32\\x53\\xb0\\x49\\x18\\xa5\\xba\\xad\\x96\\xb0\\x1b\\xa2\\x9f\\x88\\x83\\x9f\\x1f\\x71\\xcf\"\n\"\\xad\\x82\\xb0\\x1b\\xbc\\xbd\\x9e\\xae\\xb6\\x1f\\x72\\xd1\\x05\\x73\\x61\\x77\\x92\\x0a\\xf7\\x0b\\xe5\\x93\\x92\\xa6\\xd2\\x08\\xf7\\x0c\\x06\\x97\\xc2\\x05\"\n\"\\xfb\\x0d\\x06\\x90\\x8b\\x91\\x89\\x9a\\x1e\\x0e\\xfc\\x58\\xf7\\x25\\x16\\xf7\\x12\\xf8\\xe5\\x05\\xbe\\x96\\x9c\\x9b\\xb7\\x1b\\x92\\x92\\x8b\\x89\\x98\\x1f\"\n\"\\x9a\\xd0\\x05\\x8f\\x79\\x80\\x8c\\x7b\\x1b\\x3e\\x53\\x5e\\x41\\x7b\\x1f\\x78\\x32\\x05\\x45\\x06\\x7d\\x48\\x05\\xd1\\x06\\x2a\\xfc\\x5d\\x05\\x0e\\xd7\\xf8\"\n\"\\x14\\xf8\\x82\\x15\\x9f\\x64\\x72\\x92\\x6a\\x1b\\x27\\x37\\x38\\x29\\x2a\\xe5\\x36\\xf2\\xab\\xa9\\x93\\x9b\\xa6\\x1f\\xbe\\xaa\\xae\\xc4\\xbf\\x1a\\xb6\\x78\"\n\"\\xbd\\x68\\xc0\\x1e\\xf7\\x2a\\xf7\\x2a\\x8e\\x79\\xa1\\x52\\x9a\\x6e\\x19\\x77\\x96\\x90\\x85\\x95\\x1b\\x92\\x90\\x90\\x92\\x8e\\x8b\\x8b\\x88\\x9d\\x1f\\x84\"\n\"\\xae\\x89\\xa1\\xa6\\x1a\\xab\\x91\\xbd\\x92\\xa2\\x1e\\x8d\\x90\\x8b\\x8d\\x8d\\x1a\\x91\\x87\\x8f\\x84\\x88\\x88\\x8b\\x8a\\x88\\x1e\\x81\\x69\\x6d\\x87\\x67\"\n\"\\x1b\\x70\\x75\\x8d\\x92\\x68\\x1f\\x8e\\x79\\x8b\\x8b\\x88\\x1b\\x85\\x85\\x84\\x85\\x7b\\xb5\\x73\\xc2\\x7a\\x1f\\xa2\\x84\\x91\\x89\\x05\\xfb\\x8c\\xfb\\x41\"\n\"\\x15\\xd3\\xc7\\x4e\\x42\\x41\\x4f\\x4f\\x41\\x40\\x4f\\xc7\\xd6\\xd5\\xc7\\xc6\\xd8\\x1f\\x0e\\xfc\\x7a\\xf7\\x6e\\xe0\\x1d\\x0e\\xfb\\x42\\xf7\\x7f\\xf7\\x53\"\n\"\\x15\\x93\\x75\\x7b\\x8f\\x7a\\x1b\\x46\\x4f\\x52\\x49\\x65\\xa8\\x73\\xb8\\xbe\\xba\\xa4\\xb5\\xa9\\x1f\\xa0\\xa9\\x94\\xaa\\xb8\\x1a\\xf7\\xd4\\x07\\xab\\x85\"\n\"\\xa1\\x7b\\xa2\\x66\\x08\\xa3\\x65\\x95\\x65\\x55\\x1a\\x59\\x81\\x61\\x73\\x51\\x1e\\xa8\\x06\\xb2\\xb9\\xa0\\xc7\\xcc\\x1a\\xdc\\x6b\\xdb\\x4c\\xd6\\x1e\\x53\"\n\"\\xce\\x89\\x8d\\x83\\x95\\x86\\x92\\x19\\xcb\\x5b\\x07\\x0e\\xd7\\xf7\\x95\\xf9\\x19\\x15\\xfc\\x59\\x88\\x0a\\xf7\\xf0\\x07\\xf7\\xb5\\x5f\\x05\\xfc\\x03\\x88\"\n\"\\x0a\\xf8\\x52\\x07\\x0e\\x39\\x1d\\xf7\\x67\\xf7\\x6c\\x23\\x1d\\x50\\xf7\\x73\\x21\\x0a\\xfb\\x03\\xfc\\xa0\\x05\\x90\\x0a\\x41\\xfb\\xf1\\x20\\x0a\\xdb\\xf8\"\n\"\\x0c\\x6c\\x1d\\xfb\\x2a\\xf7\\x61\\x35\\x1d\\x39\\x1d\\xf7\\x55\\xcf\\x2a\\x1d\\x39\\x1d\\x64\\xfc\\xdc\\x5e\\x1d\\xf7\\xda\\xf8\\xa4\\xf7\\x6c\\x15\\xf7\\x83\"\n\"\\xc8\\xfb\\x60\\x06\\xe3\\xf7\\x2f\\x05\\xf7\\x08\\xc9\\x3a\\x06\\xac\\xc6\\x61\\xa3\\x5c\\x38\\x05\\xfb\\x23\\x06\\x38\\x68\\x84\\x72\\x65\\x1f\\x4b\\x60\\x69\"\n\"\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x37\\xdc\\x69\\x1e\\x6a\\x52\\xb6\\x74\\xb1\\xce\\x05\\x88\\xa5\\x97\\x8a\\xb5\\x1b\\xf7\\xac\\xc9\\xfb\\xb7\\x06\\x77\\x85\\x8b\"\n\"\\x8c\\x82\\x1f\\xaa\\xf7\\x2d\\x15\\x3a\\xfb\\x21\\x57\\x9d\\x6c\\xbe\\x88\\xd3\\x19\\xf7\\xb6\\xf7\\x6c\\x15\\x33\\xfb\\x2f\\x05\\xfb\\x5e\\x06\\x91\\xf6\\xc3\"\n\"\\xbd\\xf7\\x01\\x89\\x08\\x0e\\xfb\\x11\\xf7\\x48\\xf7\\x03\\x15\\x55\\x45\\xc9\\x64\\xde\\xf7\\x01\\x05\\xf7\\xa2\\x06\\x99\\xd3\\x05\\xfb\\x7a\\x06\\xd9\\xef\"\n\"\\x05\\xf7\\x42\\x06\\x9a\\xd3\\x05\\xfb\\x1b\\x06\\xcd\\xe1\\x4d\\xb2\\x2b\\xfb\\x11\\x05\\xfb\\x95\\x06\\x7d\\x43\\x05\\xf7\\x6e\\x06\\x3c\\x27\\x05\\xfb\\x35\"\n\"\\x27\\x1d\\x0e\\xfb\\x42\\xf7\\xb3\\x16\\xf7\\xcc\\xf8\\xa0\\x05\\x28\\x06\\xfb\\x80\\xfc\\x31\\x57\\xf8\\x31\\x05\\x32\\x06\\xd4\\xfc\\xa0\\x05\\x0e\\x69\\x0a\"\n\"\\x32\\xf7\\x9f\\x3c\\x0a\\x4a\\x0a\\xa5\\xf7\\xaa\\x15\\x6a\\x1d\\xc9\\x16\\xfb\\x14\\xfb\\x2a\\x05\\xc7\\x06\\xf7\\x48\\xf7\\x2a\\x05\\x0e\\x4a\\x0a\\xf7\\x4f\"\n\"\\xf7\\x7e\\x36\\x1d\\xf4\\x63\\x0a\\x0e\\xf4\\x63\\x0a\\x89\\xf8\\x12\\xcf\\x1d\\x6a\\x0a\\x0e\\x6a\\x0a\\x9b\\xf7\\xd1\\x2b\\x1d\\xf7\\xc5\\xbd\\x16\\xfa\\x04\"\n\"\\xcd\\xfd\\xc2\\xf9\\xb8\\x49\\x06\\x0e\\x4c\\x82\\x1d\\xf7\\x8c\\xf9\\x12\\x23\\x1d\\xfb\\x5a\\xf1\\xf9\\x32\\x15\\xac\\xd5\\x8b\\x8b\\xb1\\x1b\\xba\\xb2\\x79\"\n\"\\x69\\xa3\\x1f\\xad\\x5c\\xa0\\x40\\x42\\x1a\\x6d\\x89\\x73\\x82\\x50\\x1e\\xc0\\x46\\x70\\x97\\x55\\x1b\\x5a\\x64\\x7b\\x69\\x69\\x1f\\x5d\\x5c\\x6f\\x48\\x4a\"\n\"\\x1a\\xfb\\x01\\xde\\x36\\xf6\\xd7\\xc8\\xb4\\xd8\\xb6\\x1e\\xb1\\xcf\\xa7\\xf7\\x16\\xf3\\x1a\\xf7\\x5c\\xfb\\x03\\xf7\\x25\\xfb\\x2d\\x5e\\x5c\\x81\\x79\\x63\"\n\"\\x1e\\xf7\\xbf\\xfc\\x36\\x15\\x7d\\x32\\x84\\x6b\\x7d\\x5f\\x08\\x3d\\x70\\x5d\\x5f\\x55\\x1b\\x53\\x6a\\xbe\\xe1\\xf7\\x08\\xcd\\xea\\xdc\\xb4\\xb0\\x76\\x63\"\n\"\\xa5\\x1f\\x0e\\xf8\\x38\\xf7\\x98\\xf7\\xc4\\x15\\xf7\\x04\\x06\\xc9\\xb8\\x9b\\xb0\\xb8\\x1f\\xc6\\xbc\\xb0\\xd5\\xd1\\x1a\\xb5\\x7a\\xb9\\x71\\xa5\\x1e\\xab\"\n\"\\x6d\\x5f\\x99\\x4a\\x1b\\xfb\\x48\\x06\\xfb\\x2b\\xfd\\x5a\\x05\\xe3\\x06\\xdc\\xf8\\x12\\x15\\xc0\\xf7\\x8e\\x05\\xda\\x06\\xdc\\xb6\\x68\\x4a\\x5f\\x76\\x61\"\n\"\\x66\\x6e\\x1f\\x73\\x6b\\x67\\x80\\x57\\x1b\\xf7\\xdf\\xfb\\x0e\\x15\\xd9\\x06\\x99\\xcb\\x05\\x3c\\x06\\xa4\\xf7\\x09\\x05\\x3b\\x06\\x72\\xfb\\x09\\x05\\x4c\"\n\"\\x06\\x7e\\x4b\\x05\\xca\\x06\\x66\\xfb\\x3e\\x05\\x89\\x81\\x8a\\x7f\\x82\\x1a\\x58\\xab\\x6f\\xc5\\x9b\\x96\\x8c\\x8f\\xa2\\x1e\\x98\\xd3\\x05\\x87\\x7a\\x83\"\n\"\\x8a\\x80\\x1b\\x76\\x7d\\x96\\x9b\\x8d\\x8c\\x91\\x8c\\x91\\x1f\\xf8\\x41\\xf7\\x18\\x15\\x8f\\x9c\\x8c\\x92\\x94\\x1a\\xba\\x5e\\xab\\x49\\x32\\x49\\x55\\x43\"\n\"\\x62\\xa1\\x79\\xd2\\x78\\x1e\\xb8\\x80\\x05\\xa3\\x85\\x94\\x83\\x7c\\x1a\\x6d\\x6d\\x76\\x5f\\x67\\x79\\x98\\xa5\\x90\\x8c\\x94\\x8c\\x93\\x1e\\x3d\\x06\\x87\"\n\"\\x79\\x8a\\x83\\x80\\x1a\\x55\\xb9\\x6b\\xda\\xec\\xcc\\xbe\\xd7\\xb4\\x75\\xa0\\x4f\\x9a\\x1e\\x5d\\x96\\x05\\x6d\\x93\\x7e\\x94\\x99\\x1a\\xa9\\xa4\\x9e\\xb4\"\n\"\\xa9\\x99\\x81\\x75\\x85\\x8b\\x87\\x89\\x83\\x1e\\x0e\\x75\\xf7\\x7e\\xfb\\x6e\\x15\\xdf\\x06\\xb5\\xf7\\x58\\xe0\\x93\\xc6\\xa4\\xc4\\xc3\\x19\\xd1\\xcd\\xb4\"\n\"\\xec\\xea\\x1a\\xf7\\x1f\\x34\\xd6\\xfb\\x34\\x81\\x86\\x8b\\x8a\\x7c\\x1e\\x23\\xfc\\x79\\x69\\x8f\\x7d\\x8f\\x79\\x95\\x19\\x6a\\x9e\\x78\\xb6\\xc4\\x1a\\xc3\"\n\"\\x9a\\xc7\\xa5\\xbb\\x1e\\xa3\\xba\\xa1\\xa0\\xb7\\xa1\\x9c\\xde\\x18\\x3f\\x6e\\x60\\x6c\\x5c\\x51\\x08\\x5a\\x4f\\x71\\x3b\\x36\\x1a\\x48\\x9f\\x56\\xb0\\x68\"\n\"\\x1e\\xac\\x6c\\xaf\\x7e\\xd1\\x84\\x08\\xf7\\x4f\\xf8\\x79\\x15\\xa6\\x89\\x98\\x88\\x9d\\x82\\x08\\xb0\\x78\\xa2\\x5e\\x55\\x1a\\x4c\\x74\\x40\\x68\\x58\\x1e\"\n\"\\x64\\x51\\x63\\x73\\x46\\x84\\x08\\x0e\\x87\\xf9\\x69\\x21\\x0a\\xfc\\xc1\\x06\\x7c\\x41\\x05\\xd6\\x06\\x2b\\xfc\\x56\\x05\\xdf\\x25\\x1d\\x05\\xf7\\x83\\x06\"\n\"\\x34\\x1d\\xdf\\x25\\x1d\\x05\\xd6\\x06\\x0e\\xf7\\xd6\\xf7\\x88\\xfb\\x30\\x15\\x3e\\x36\\xf7\\x8f\\x06\\x8a\\xe0\\x05\\x40\\xf9\\xab\\xf7\\xfe\\xfd\\xab\\x45\"\n\"\\x06\\x8c\\x36\\x05\\xf7\\x84\\xe0\\x42\\xf9\\xab\\xf0\\xe0\\xfd\\x8f\\x36\\xf3\\x06\\x0e\\xf7\\xda\\xf9\\x93\\xc9\\x15\\xfb\\xb7\\x06\\xfb\\x0d\\x57\\xc2\\xf7\"\n\"\\x16\\xf7\\x15\\xbf\\xc3\\xf7\\x0d\\x1f\\xf7\\xb7\\xc9\\xfb\\xac\\x06\\x38\\x68\\x84\\x72\\x66\\x1f\\x4a\\x60\\x69\\x43\\x2b\\x1a\\xfb\\x07\\xb8\\x37\\xb9\\x0a\"\n\"\\x06\\x0e\\xf7\\xda\\xf7\\x7d\\xc9\\x15\\x4d\\xf7\\xac\\x07\\xde\\xae\\x92\\xa4\\xb1\\x1f\\xcc\\xb6\\xac\\xd4\\xee\\x1a\\xf7\\x03\\x5d\\xe0\\x3d\\xac\\x1e\\x99\"\n\"\\x69\\x70\\x8f\\x46\\x1b\\xfb\\xac\\x4d\\xf7\\xb7\\x06\\xf7\\x0d\\xbf\\x54\\xfb\\x16\\xfb\\x16\\x57\\x54\\xfb\\x0d\\x1f\\x0e\\xc1\\xf8\\x99\\x21\\x0a\\x37\\x06\"\n\"\\x28\\xfc\\x66\\x05\\x37\\x93\\x66\\xa9\\xc8\\x1a\\x9c\\x8f\\xaa\\x92\\xaa\\x1e\\xc8\\xf7\\xb4\\x21\\x1d\\x4d\\xfb\\xb7\\x05\\x83\\x66\\x86\\x66\\x79\\x1a\\x65\"\n\"\\x9a\\x66\\xa5\\x72\\x1e\\xb1\\x67\\xb0\\x7c\\xd7\\x82\\x60\\xfb\\x5b\\x18\\xdf\\x06\\xb6\\xf7\\x5b\\xf7\\x46\\x9c\\xd9\\xd0\\xa8\\xf7\\x3a\\x19\\xc9\\xf7\\xb7\"\n\"\\x21\\x1d\\x4e\\xfb\\xb4\\x73\\xfb\\x06\\x57\\x59\\xfb\\x02\\x7d\\x19\\x0e\\xfc\\x58\\xf7\\xc8\\xf9\\x58\\x15\\x2d\\x06\\x76\\x27\\x05\\x88\\x7b\\x89\\x7a\\x7c\"\n\"\\x1a\\x59\\xa4\\x6e\\xb9\\x87\\x1e\\x93\\xb1\\x05\\x72\\x90\\x81\\x98\\xa8\\x1a\\x96\\x8c\\x96\\x90\\xa0\\x1e\\xbc\\x06\\x0e\\xfb\\xe9\\x67\\x1d\\xa2\\xf7\\x07\"\n\"\\xd0\\xca\\x5c\\x1d\\xf7\\x16\\xf7\\x6c\\x23\\x1d\\xfb\\x71\\xf9\\x06\\xfa\\x25\\x15\\xfb\\xbb\\xfd\\xa8\\xfb\\x02\\xf8\\x20\\xfb\\x37\\x42\\x96\\x6a\\xf3\\xb9\"\n\"\\xf7\\x1c\\xfc\\x85\\xf7\\xf4\\xfa\\x44\\x05\\x0e\\xfb\\xe9\\x67\\x1d\\xa3\\xf7\\x07\\xcf\\xca\\x5c\\x1d\\xf1\\xcf\\x2a\\x1d\\xfb\\xe9\\xf7\\x49\\x21\\x0a\\xfb\"\n\"\\x04\\xfc\\xa0\\x20\\x0a\\xc5\\xf7\\xa4\\xa2\\xf7\\x06\\xd0\\xcb\\x5c\\x1d\\xfb\\x5f\\xfc\\xdc\\x35\\x1d\\x31\\xf8\\xfe\\xf8\\x0d\\x15\\xfc\\x8d\\x06\\x4e\\xfb\"\n\"\\xb7\\x05\\xd1\\x06\\xb9\\xf7\\x6f\\x05\\xf8\\x47\\x06\\x0e\\x26\\x98\\xfb\\x6e\\x15\\xdf\\x06\\xc5\\xf7\\xa5\\x05\\x56\\xa9\\xbb\\x72\\xd3\\x1b\\xdf\\xd3\\xb0\"\n\"\\xce\\xbe\\x1f\\xbf\\xd0\\xa9\\xe6\\xe4\\x1a\\xf7\\x13\\x3c\\xde\\xfb\\x0f\\x47\\x48\\x6f\\x5a\\x5a\\x1e\\x59\\x59\\x76\\x5a\\x71\\xfb\\x0d\\x08\\xf7\\xac\\xf7\"\n\"\\x6f\\x15\\xd3\\xb5\\x5b\\x39\\x46\\x75\\x40\\x66\\x55\\x1f\\x5b\\x6a\\x54\\x6c\\x54\\x1b\\x44\\x61\\xbf\\xe1\\xc5\\xa4\\xde\\xac\\xbc\\x1f\\xbc\\xab\\xc2\\xa9\"\n\"\\xc3\\x1b\\x0e\\xfb\\x42\\x7f\\x1d\\x8e\\xf7\\xfe\\x23\\x1d\\xfb\\x42\\xf7\\x92\\x74\\x15\\xd0\\x8e\\xb5\\x96\\xb6\\xa5\\x08\\xbf\\xab\\xac\\xc7\\xcb\\x1a\\xc8\"\n\"\\x6a\\xab\\x33\\xa1\\x1e\\x3f\\x9e\\x05\\x53\\x99\\x6e\\x9f\\xa5\\x1a\\x9f\\x97\\xa4\\x9d\\x9c\\x44\\x0a\\x1f\\x85\\x07\\x86\\x07\\x8a\\x80\\x20\\x0a\\x90\\xa0\"\n\"\\x8c\\x94\\x98\\x1a\\xd1\\x49\\xbb\\x29\\x3c\\x1d\\x43\\xbd\\x61\\xf1\\x7e\\x1e\\x65\\x45\\x98\\x85\\x91\\x8c\\x8b\\x8b\\x90\\x8c\\x19\\x8d\\x96\\x8b\\x8b\\x90\"\n\"\\x1b\\x9c\\x99\\x81\\x7f\\x6b\\x71\\x74\\x66\\x6f\\x73\\x92\\xa1\\x61\\x33\\x1d\\xbf\\xa7\\x83\\xb2\\x1b\\xdf\\xc7\\xb8\\xcb\\x57\\x0a\\x0e\\xfb\\x42\\xf8\\x96\"\n\"\\xf8\\x0e\\x15\\x90\\xa0\\x8c\\x94\\x98\\x1a\\xd1\\x48\\xbb\\x2a\\x3c\\x1d\\x3b\\xd0\\x5b\\xf7\\x09\\xf7\\x29\\xec\\xd8\\xf7\\x0b\\x5a\\x0a\\xa3\\x9d\\x9d\\x44\"\n\"\\x0a\\x1f\\x85\\x07\\x86\\x07\\x8a\\x80\\x05\\x40\\xf7\\xff\\x24\\x1d\\xfb\\x42\\x7f\\x1d\\xfb\\x83\\xfc\\x4a\\xb0\\x1d\\xfb\\xd4\\xf7\\x73\\xe0\\x1d\\xf7\\x60\"\n\"\\xf7\\x94\\x15\\x41\\x06\\x55\\xfb\\x94\\x05\\xc4\\x06\\x0e\\x44\\xf8\\x71\\xf8\\xa0\\x15\\x96\\x6d\\x73\\x8f\\x6c\\x1b\\x39\\x3d\\x66\\x4b\\x59\\x1f\\x58\\x4b\"\n\"\\x6a\\x25\\x31\\x1a\\xfb\\x11\\xda\\x3b\\xf7\\x0f\\xde\\xd6\\xaf\\xcc\\xbf\\x1e\\xbb\\xc7\\xae\\xf5\\xde\\x1a\\xbd\\x7d\\xb1\\x6b\\xae\\x1e\\xf7\\x0b\\x2d\\x1d\"\n\"\\xfb\\xb8\\x4d\\xa4\\x1d\\x0e\\xf7\\xef\\xf8\\x93\\xf9\\x6e\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\"\n\"\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\\xfb\\x37\\xf7\\x37\\xfb\\x5e\\x1f\\x5a\\x04\\xf7\\x43\\xf7\\x21\\xfb\\x21\\xfb\\x43\\xfb\\x44\\xfb\\x21\\xfb\\x20\\xfb\\x45\"\n\"\\xfb\\x43\\xfb\\x1f\\xf7\\x22\\xf7\\x47\\xf7\\x3e\\xf7\\x23\\xf7\\x21\\xf7\\x41\\x1f\\xfb\\x01\\xfb\\x37\\x9d\\x0a\\xfb\\x14\\xfb\\x00\\x15\\x92\\x36\\x96\\x62\"\n\"\\xa9\\x5e\\x08\\x4c\\xb5\\xcb\\x6b\\xde\\x1b\\xd8\\xc7\\xa6\\xc1\\xb5\\x1f\\xaf\\xba\\x9a\\xb8\\x92\\xe8\\x80\\x59\\x80\\x75\\x71\\x6d\\x08\\x54\\x5b\\x4f\\x71\"\n\"\\x3a\\x1b\\x3a\\x4f\\xa5\\xc2\\x5b\\x1f\\x71\\xa9\\x80\\xa1\\x80\\xbd\\x08\\xf7\\xee\\xf7\\x00\\x9d\\x0a\\x0e\\xfb\\x23\\xf7\\xc0\\xf7\\x99\\x15\\x7f\\x07\\x44\"\n\"\\x6b\\x45\\x5a\\x66\\x1e\\x6c\\x62\\x56\\x7a\\x57\\x1b\\x7e\\x74\\xf8\\x77\\xa2\\x06\\xfb\\x32\\x91\\x3c\\xe3\\x8e\\xf7\\x3d\\x08\\x35\\xb9\\xb6\\x6d\\xda\\x1b\"\n\"\\xcd\\xc4\\xca\\xd4\\xd0\\x73\\xb0\\xfb\\x01\\xef\\x1f\\xfb\\x02\\xf1\\x7a\\xa5\\x63\\xf7\\x09\\x7c\\x30\\x4d\\x31\\x23\\x38\\x08\\x3c\\x49\\x67\\x51\\x4c\\x1a\"\n\"\\x40\\xc8\\x4d\\xd4\\xb4\\xb4\\x9c\\xa9\\xac\\x1e\\x9e\\x9d\\x96\\x9a\\x9c\\xb0\\x08\\x0e\\xf7\\xd6\\xf9\\x63\\xf9\\x7e\\x15\\xfc\\x80\\x45\\x06\\xf7\\x61\\xfb\"\n\"\\xf5\\xfb\\x61\\xfc\\x16\\x05\\x44\\xf8\\x87\\xf7\\x6b\\x43\\x07\\x88\\xfb\\x23\\x05\\xfb\\xe3\\x06\\xf7\\x60\\xf8\\x16\\xfb\\x5f\\xf7\\xf1\\x05\\xf7\\xdb\\x06\"\n\"\\x8f\\xfb\\x22\\x05\\xd2\\x06\\x0e\\xf7\\x87\\xf7\\x94\\xf8\\xa3\\x15\\x73\\x74\\x6c\\x42\\x67\\x1a\\xfb\\x10\\x4f\\xf7\\x10\\x06\\x68\\x9c\\x60\\xb0\\x54\\x1e\"\n\"\\x34\\x34\\xb4\\x62\\xe3\\xe2\\x9d\\x78\\xa1\\x7e\\xa1\\x86\\x19\\xce\\x7a\\x8e\\x8a\\x05\\xfb\\x0f\\xc6\\xf7\\x0f\\x07\\x8f\\x8c\\xb2\\x95\\xa5\\x91\\x8d\\x8c\"\n\"\\x19\\x96\\x90\\x9e\\x96\\xab\\xa0\\xe3\\x34\\x18\\xb4\\xb4\\x34\\xe2\\x9d\\xa6\\x99\\xa4\\x8f\\x96\\x19\\x8e\\x92\\x90\\x9f\\x96\\xb6\\x08\\xf7\\x0f\\xc7\\xfb\"\n\"\\x0f\\x06\\x81\\xb3\\x85\\xa2\\x88\\x92\\x87\\x96\\x7d\\xa4\\x79\\xa6\\xe2\\xe1\\x18\\x62\\xb4\\x33\\x35\\x6d\\xa6\\x7e\\x91\\x31\\xa1\\x19\\xf7\\x0e\\x50\\xfb\"\n\"\\x0e\\x07\\x88\\x8a\\x48\\x79\\x84\\x89\\x77\\x7f\\x68\\x74\\x19\\x33\\xe2\\x62\\x62\\x05\\xf7\\xba\\x50\\x15\\xef\\xde\\x36\\x26\\x24\\x38\\x37\\x24\\x22\\x3a\"\n\"\\xdd\\xf5\\xf3\\xde\\xdc\\xf5\\x1f\\x0e\\xfb\\xc0\\xf7\\x25\\x16\\xdf\\x25\\x1d\\x05\\xf7\\x21\\x2d\\x1d\\xfc\\x02\\x2a\\x0a\\xf7\\x21\\x06\\x0e\\xfc\\x20\\xf8\"\n\"\\x02\\x21\\x0a\\x33\\x06\\xa9\\xf7\\x24\\x21\\x1d\\x6d\\xfb\\x24\\x05\\x43\\x06\\x7d\\x48\\x05\\xd2\\x06\\x7a\\x37\\x05\\x4d\\x06\\x80\\x56\\x05\\xc8\\x06\\x5a\"\n\"\\xfb\\x7d\\x05\\x88\\x80\\x8a\\x7f\\x83\\x1a\\x5a\\xad\\x6d\\xc2\\xa0\\xa9\\x8e\\x8f\\x9a\\x1e\\x9a\\x5b\\x0a\\x7c\\x97\\x9a\\x8c\\x1f\\x8e\\x8c\\x8f\\x8c\\x92\"\n\"\\x1e\\xbc\\xf7\\x7a\\x05\\xdd\\x06\\x96\\xc0\\x05\\x3a\\x06\\x9c\\xdf\\x05\\xe4\\x06\\x0e\\xfb\\xf9\\xf8\\x01\\x6f\\x0a\\xb3\\xf7\\xec\\x35\\x1d\\xfc\\x20\\xf7\"\n\"\\x39\\x76\\x15\\x8a\\x94\\x90\\x8a\\x92\\x1b\\xa0\\xa8\\x8e\\x8f\\x9b\\x1f\\x9a\\x5b\\x0a\\x7d\\x96\\x9b\\x8d\\x8c\\x91\\x8c\\x91\\x1f\\xd9\\xf8\\x03\\x05\\xe4\"\n\"\\x06\\x99\\xce\\x05\\xb4\\x1d\\x80\\x8a\\x81\\x81\\x1a\\x6c\\x95\\x77\\xa2\\x7e\\x1e\\x5e\\x37\\x98\\x85\\x90\\x8c\\x8b\\x8b\\x91\\x8c\\x19\\x8d\\x95\\x8c\\x6d\"\n\"\\x1d\\x6f\\x72\\xcc\\x1d\\xb9\\xca\\xa7\\x6d\\xa2\\x66\\x87\\x87\\x8b\\x89\\x7e\\x1f\\x0e\\xfb\\x18\\xf8\\x37\\xf9\\x7d\\x15\\x55\\x57\\x78\\x69\\x5f\\x1f\\x4f\"\n\"\\x5a\\x68\\x4d\\x6b\\xfb\\x0b\\x08\\x6c\\xfb\\x03\\x78\\xfb\\x07\\x48\\x1a\\xfb\\x09\\xd2\\x40\\xf7\\x04\\xcb\\xbf\\x9e\\xb2\\xb9\\x1e\\xbf\\xb8\\xab\\xc9\\xab\"\n\"\\xf7\\x06\\x08\\xaa\\xf7\\x03\\x9f\\xf7\\x09\\xcd\\x1a\\xf7\\x0b\\x43\\xd7\\xfb\\x05\\x1e\\xfb\\x61\\xfb\\xde\\x15\\xa5\\xf2\\x9a\\xb1\\xab\\xb8\\x08\\xb6\\xa9\"\n\"\\xb9\\xa3\\xbd\\x1b\\xd1\\xb2\\x5e\\x3c\\x6d\\x87\\x6d\\x7f\\x46\\x1f\\x7c\\x48\\x15\\x76\\x2e\\x7d\\x5a\\x7a\\x66\\x08\\x3f\\x67\\x56\\x63\\x47\\x1b\\x47\\x64\"\n\"\\xb8\\xd8\\xb3\\x91\\xb9\\x9d\\xe2\\x1f\\x0e\\xfb\\xe9\\xf7\\xb7\\xf9\\x9f\\x2b\\x1d\\x58\\x1d\\xfb\\x1e\\xf9\\x6d\\x4e\\x0a\\x4c\\x0a\\x81\\xf9\\x78\\x40\\x0a\"\n\"\\x4c\\x0a\\xf7\\x2c\\xf9\\x4c\\x36\\x1d\\xfb\\x0e\\xf8\\xc4\\x3f\\x15\\xfc\\xeb\\x06\\x80\\x59\\x05\\xf8\\xeb\\x06\\x7e\\x4f\\x6b\\x1d\\xfc\\x20\\x0e\\xfb\\xe9\"\n\"\\xcb\\x1d\\x4c\\x48\\x1d\\xfb\\x03\\x4f\\x35\\x1d\\xfc\\x20\\xf8\\x02\\x86\\x0a\\x82\\x7f\\x1a\\x5a\\xad\\x6d\\xc2\\x9f\\xa9\\x8e\\x8f\\x9a\\x1e\\x9b\\xd4\\x05\"\n\"\\x84\\x6b\\x87\\x8a\\x7e\\x1b\\x76\\x7d\\x96\\x9b\\x8f\\x8c\\x90\\x8c\\x90\\x1f\\xd9\\xf8\\x03\\x05\\xe3\\x06\\xfb\\x8c\\xfc\\x99\\x35\\x1d\\xfb\\xe9\\xa5\\x0a\"\n\"\\xfc\\x20\\x58\\x0a\\x88\\x81\\x16\\xf9\\x47\\x06\\xfb\\x22\\xf9\\x6d\\x05\\x27\\x06\\xfb\\xbf\\xfd\\x1b\\x15\\xf7\\xd9\\xf8\\xaa\\xee\\xfc\\xaa\\x05\\x0e\\xe2\"\n\"\\xab\\x16\\xf7\\xb4\\x20\\x1d\\x2f\\xca\\x6a\\xc5\\xf0\\x1a\\xf7\\x5d\\xf7\\x17\\xf7\\x2f\\xf7\\x3f\\xf7\\x0b\\xdb\\x3c\\xfb\\x0b\\x37\\x6b\\x31\\x52\\x41\\x1e\"\n\"\\x61\\x55\\x61\\x6a\\x35\\x5e\\x7a\\x39\\x18\\xf7\\xb4\\x20\\x1d\\xfb\\x50\\x06\\xf7\\x33\\xce\\xe8\\xf7\\x1c\\xf7\\x38\\x1a\\xf7\\x45\\xfb\\x07\\xf7\\x08\\xfb\"\n\"\\x44\\xfb\\x05\\xfb\\x01\\x58\\x35\\x43\\x1e\\x4c\\x41\\x64\\xfb\\x02\\x26\\x1a\\x4c\\x9f\\x4b\\xaf\\x5b\\x1e\\x9d\\x72\\x9a\\x7d\\xad\\x73\\x08\\xfb\\x55\\x06\"\n\"\\x0e\\xfb\\x12\\xf8\\x92\\x21\\x0a\\x4e\\xfb\\xaf\\x7d\\x47\\x7a\\x69\\x65\\x68\\x19\\x6a\\x69\\x63\\x7a\\x64\\x1b\\x59\\x64\\xa9\\xb3\\x91\\x8e\\x9c\\x8f\\x9f\"\n\"\\x1f\\xd7\\xf7\\xf9\\x21\\x1d\\xfb\\x32\\xfd\\x7a\\x05\\xde\\x06\\xbe\\xf7\\x85\\x05\\x6a\\xa8\\xa6\\x7e\\xb6\\x1b\\xcb\\xc6\\xac\\xca\\xbb\\x1f\\x7b\\x42\\x05\"\n\"\\xd6\\x06\\xf7\\x04\\xf8\\xa0\\x05\\x0e\\xfb\\x50\\xf8\\x07\\xfb\\x6e\\x15\\xd3\\xf7\\x12\\x96\\xa3\\xb3\\x1a\\xa3\\x82\\x9d\\x78\\x9a\\x1e\\x7f\\x96\\x8b\\x8b\"\n\"\\x4e\\xa2\\x55\\xa0\\x18\\x46\\xa6\\x82\\x8f\\x78\\x9c\\x08\\x71\\xa1\\x7e\\xae\\xb7\\x1a\\xf7\\x0c\\xec\\xf7\\x01\\xf6\\xc9\\xb5\\x68\\x57\\x84\\x8a\\x7f\\x89\"\n\"\\x7f\\x1e\\xe3\\x06\\x8d\\x9b\\x8c\\x9a\\x95\\x1a\\xe7\\x41\\xc9\\xfb\\x01\\x39\\x42\\x6b\\x4e\\x54\\x1e\\x54\\x4f\\x68\\x33\\x3b\\x1a\\x2e\\xbd\\x47\\xe9\\x69\"\n\"\\x1e\\xe2\\x6c\\x05\\xbc\\x79\\x96\\x83\\x78\\x1a\\x74\\x82\\x78\\x3f\\xfb\\x0f\\x1e\\x0e\\x84\\x27\\x0a\\xf7\\xad\\xf9\\xed\\x2e\\x0a\\xb4\\x5b\\x1d\\xf7\\x93\"\n\"\\xf7\\x66\\x24\\x0a\\x0e\\xf8\\x14\\xf9\\x78\\x24\\x0a\\xf6\\xfb\\xfa\\x31\\x0a\\x3e\\x0a\\xf7\\x43\\xf7\\x6c\\x24\\x0a\\x0e\\xfb\\x1c\\xf7\\x9a\\xf8\\x32\\x15\"\n\"\\xbd\\xf7\\x7d\\x05\\xf7\\xfc\\x20\\x1d\\xfc\\x5a\\x06\\x48\\xfb\\xcf\\x05\\x5c\\x06\\x79\\x39\\x05\\xbb\\x06\\x44\\xfb\\xe0\\x05\\xe9\\x06\\xd2\\xf7\\xe0\\x05\"\n\"\\xf7\\x94\\x20\\x1d\\x0e\\xfb\\xb1\\xf7\\x74\\xf7\\xd7\\x15\\xa6\\xf7\\x13\\x05\\xf7\\x7c\\x2d\\x1d\\xfb\\xd1\\x06\\x61\\xfb\\x5d\\x05\\x65\\x06\\x7c\\x41\\x05\"\n\"\\xb0\\x06\\x56\\xfb\\x8d\\x05\\x29\\x0a\\xf7\\x2b\\x2d\\x1d\\x0e\\xf7\\xf5\\xf8\\x4d\\x5e\\x0a\\xf7\\x07\\x06\\xf7\\x2b\\xfb\\xed\\x05\\xbf\\x06\\x68\\xfb\\x33\"\n\"\\x05\\xe8\\x06\\xbf\\xf7\\x85\\x05\\x2b\\x06\\xfb\\x19\\xf7\\xc2\\xf7\\xaa\\xf7\\xed\\x05\\x23\\x06\\xfb\\x88\\xfb\\xc2\\x05\\xfb\\x03\\x06\\xcb\\xf7\\xc2\\x05\"\n\"\\x2d\\x06\\x4b\\xfb\\xc2\\x05\\xfb\\x03\\x06\\xfb\\x08\\xf7\\xc2\\x05\\x22\\xe2\\x1d\\xf4\\x06\\xf7\\xbd\\xf7\\xed\\x05\\xf7\\x03\\x06\\x0e\\xf7\\x25\\xf7\\xf3\"\n\"\\x16\\x29\\x0a\\xf7\\x00\\x06\\xea\\xfb\\x8d\\x05\\xb6\\x06\\x6c\\xfb\\x35\\x20\\x0a\\xb9\\xf7\\x7f\\x05\\x3e\\x06\\x3d\\xf7\\x68\\xf7\\x42\\x71\\x1d\\x29\\x41\"\n\"\\x1d\\x61\\xfb\\x5d\\x05\\xfb\\x01\\x06\\x4d\\xf7\\x5d\\x05\\x2e\\x06\\xd5\\xfb\\x82\\xfb\\x78\\xfb\\xb2\\x05\\xf2\\x06\\xf7\\x5d\\xf7\\x8d\\x05\\xed\\x06\\x0e\"\n\"\\x4f\\xf7\\xda\\x74\\x15\\xd3\\x8e\\xbf\\x9d\\xba\\xb0\\x08\\xc9\\xbd\\xb3\\xdb\\xda\\x1a\\xd2\\x8d\\x1d\\x5f\\x77\\x5a\\xbd\\x1d\\x2b\\x06\\x86\\x71\\x89\\x7d\"\n\"\\x76\\x1a\\x22\\xd2\\x44\\xf7\\x06\\x82\\x1e\\x65\\x45\\x98\\x85\\x90\\x8c\\x8b\\x8b\\x91\\x8c\\x19\\x8d\\x95\\x8c\\x6d\\x1d\\x6e\\x73\\x93\\xa0\\x62\\x33\\x1d\"\n\"\\xbe\\xa7\\x5d\\x0a\\x87\\x8b\\x89\\x7f\\x1f\\x0e\\xfb\\x65\\xf7\\x96\\x75\\x15\\xf7\\x01\\x94\\xdf\\xdf\\xef\\x1a\\xba\\x77\\xab\\x5f\\xa2\\x1e\\xd1\\xab\\xac\"\n\"\\xb6\\xc8\\x1a\\xd8\\x4d\\xc0\\x32\\xfb\\x01\\x3d\\x46\\xfb\\x0a\\x74\\x1e\\xe4\\x06\\xd4\\x99\\xc9\\x1d\\x6b\\x81\\x77\\x1b\\x67\\x06\\x7c\\x41\\x05\\xae\\x06\"\n\"\\xc1\\xab\\x71\\x5f\\x4e\\x57\\x5c\\x46\\x57\\x6e\\xa2\\xb4\\x93\\x8c\\x93\\x8d\\x93\\x1f\\x8f\\xa1\\x05\\x34\\x06\\x87\\x75\\x05\\x88\\x80\\x8a\\x80\\x82\\x1a\"\n\"\\x3d\\xbf\\x5b\\xe8\\x83\\x1e\\x65\\x46\\xb1\\x1d\\x93\\xa0\\x62\\x33\\x1d\\xbf\\xa6\\x39\\x0a\\x87\\x87\\x8b\\x89\\x7e\\x1f\\x0e\\x83\\xdb\\x16\\xc0\\x0a\\xd6\"\n\"\\x06\\xf7\\x1a\\xfb\\xed\\x05\\xc5\\x06\\x68\\x32\\x1d\\xc0\\xf7\\x8c\\x05\\x25\\x06\\xfb\\x1a\\xf7\\xc2\\xdd\\x1d\\x05\\x53\\x06\\xcb\\xf7\\xc2\\x05\\x2d\\x06\"\n\"\\x0e\\xfb\\x1b\\xd2\\x16\\x29\\x0a\\xc7\\x06\\xea\\xfb\\x8d\\x05\\xbb\\x06\\x68\\xfb\\x33\\x20\\x0a\\xbe\\xf7\\x7d\\x05\\x3d\\x06\\x3d\\xf7\\x68\\xf7\\x42\\xf7\"\n\"\\x82\\x05\\x2a\\x75\\x1d\\x4f\\x41\\x1d\\x0e\\x53\\xf7\\xd1\\xf8\\x3f\\x15\\x57\\x06\\xcb\\xf7\\xc2\\x05\\x2d\\x22\\x0a\\xd4\\xf7\\xed\\x05\\xbf\\x06\\x65\\xfb\"\n\"\\x4b\\x05\\xc7\\x06\\xb1\\xf7\\x4b\\x05\\x8d\\x06\\xf7\\x2b\\xfb\\xed\\x05\\xf3\\x06\\xfb\\x3e\\xf8\\x14\\xdd\\x1d\\xb2\\xf7\\x4c\\x05\\x4f\\x06\\x0e\\xfb\\x3d\"\n\"\\xf7\\xa6\\xf7\\xd7\\x15\\x59\\x06\\xb5\\xf7\\x5d\\xe1\\x1d\\xc0\\xf7\\x8d\\x05\\xbd\\x06\\x70\\xfb\\x14\\x05\\xc1\\x06\\xa6\\xf7\\x14\\xe9\\xfb\\x8d\\x05\\xed\"\n\"\\x06\\x21\\xf7\\xb2\\xf7\\x42\\xf7\\x82\\x05\\x2a\\x06\\xfb\\x27\\xfb\\x5d\\xa6\\xf7\\x14\\x05\\x55\\x06\\x0e\\x36\\xf7\\x5f\\xf9\\x1b\\x15\\xfb\\x1d\\xfd\\x1b\"\n\"\\x05\\x9e\\x1d\\xfb\\xfe\\x26\\x0a\\x0e\\xfb\\x5e\\xf7\\x2a\\xf8\\x56\\x15\\x34\\x1d\\x29\\x0a\\xca\\x06\\xea\\xfb\\x8d\\x05\\xe9\\x06\\x21\\xf7\\xb2\\xf7\\x43\"\n\"\\x71\\x1d\\x54\\x06\\xb6\\xf7\\x5d\\x05\\xfb\\xb9\\x2a\\x0a\\x0e\\xbb\\xf8\\xff\\xf7\\xe0\\x15\\x44\\xfb\\xe0\\x05\\xc3\\x06\\x68\\x32\\x1d\\xbf\\xf7\\x8c\\x05\"\n\"\\x53\\x2e\\x1d\\x2d\\x06\\x48\\xfb\\xcf\\x05\\xfc\\x0a\\x06\\xce\\xf7\\xcf\\x05\\x2e\\x22\\x0a\\xd2\\xf7\\xe0\\x05\\x0e\\xfb\\x10\\xa8\\x0a\\xad\\x06\\x69\\xfb\"\n\"\\x35\\x20\\x0a\\xbc\\xf7\\x7f\\x05\\x69\\x25\\x1d\\x9f\\x0a\\xbb\\xf8\\x0b\\x74\\x15\\xf7\\x42\\x92\\xf5\\xe0\\xdb\\xf7\\x59\\x8f\\x1d\\x3d\\x2c\\x59\\xfb\\x1d\"\n\"\\xfb\\x10\\x1a\\x30\\xaa\\x3f\\xc5\\x5b\\x1e\\xb0\\x6d\\xb0\\x7c\\xc7\\x85\\x65\\x45\\x18\\x60\\x1d\\x93\\xa0\\xad\\x0a\\xbe\\xa7\\x5d\\x0a\\x87\\x8b\\x89\\x7f\"\n\"\\x1f\\x0e\\xfb\\x42\\xf7\\xa9\\x74\\x15\\xf7\\x13\\x92\\xdd\\xd0\\xab\\xf7\\x13\\xa6\\x0a\\x45\\x60\\x3f\\x0a\\xdf\\x06\\x8c\\x9a\\x05\\x8c\\x9a\\x8c\\x96\\x8e\"\n\"\\x1a\\xac\\x62\\x1d\\x4f\\xa4\\x50\\xb4\\x68\\x1e\\xa5\\x75\\xa7\\x7f\\xb3\\x87\\x65\\x45\\x5d\\x1d\\xbf\\xa6\\x39\\x0a\\x87\\x87\\x8b\\x89\\x7e\\x1f\\x0e\\x84\"\n\"\\x2f\\x1d\\x0e\\xfb\\x42\\xf8\\x8a\\x21\\x0a\\xfb\\x77\\xfc\\x2c\\x56\\xf8\\x2c\\x05\\x32\\x06\\xd7\\xfc\\xa0\\x5c\\xfb\\x6e\\x05\\xdf\\x06\\xba\\xf7\\x6e\\xf7\"\n\"\\xbe\\xf8\\xa0\\x05\\x0e\\x84\\xf8\\x47\\xf7\\x72\\x15\\x98\\xcb\\xf8\\x04\\xf8\\x4f\\x05\\xfb\\x03\\x06\\xfb\\xb4\\xfb\\xfa\\xfb\\x1d\\xf7\\xfa\\x05\\xfb\\x04\"\n\"\\x06\\xf7\\x4e\\xfc\\x4f\\x7e\\x4b\\x05\\xfb\\x2f\\x06\\x79\\x37\\x05\\xf7\\x2f\\x06\\x6d\\xfb\\x1e\\x05\\xe9\\x06\\xa9\\xf7\\x1e\\x05\\xf7\\x28\\x06\\x9d\\xdf\"\n\"\\x05\\x0e\\xfb\\x42\\xf7\\xb8\\x89\\x15\\x8c\\x8d\\xf7\\xbe\\xf8\\xa0\\x05\\x32\\x06\\xfb\\x77\\xfc\\x2c\\x56\\xf8\\x2c\\x05\\x32\\x06\\xd7\\xfc\\xa0\\x8a\\x89\"\n\"\\x05\\xfb\\x0d\\x06\\x7f\\x52\\x05\\xf7\\x0d\\x06\\x69\\xfb\\x33\\x20\\x0a\\xad\\xf7\\x33\\x05\\xf7\\x0b\\x06\\x97\\xc4\\x05\\x0e\\xae\\xbe\\x0a\\xfb\\x03\\x06\"\n\"\\xfb\\x8d\\xfb\\xb2\\xfb\\x12\\xf7\\xb2\\x05\\xfb\\x05\\x06\\xf7\\x3b\\xfb\\xf7\\xfb\\xe6\\xfc\\x0a\\x05\\xf7\\x05\\xba\\x0a\\xca\\x06\\x68\\x32\\x1d\\xbf\\xf7\"\n\"\\x8c\\x05\\x29\\x06\\x0e\\xfb\\x27\\xf7\\xf2\\xf7\\xa1\\x15\\xf7\\x7c\\xf7\\x93\\x05\\x2c\\x06\\xfb\\x43\\x89\\x0a\\xb3\\x06\\x69\\xfb\\x33\\x20\\x0a\\xbc\\xf7\"\n\"\\x7d\\x05\\x38\\x06\\x0e\\xa0\\xf8\\x9d\\x16\\xc3\\x06\\x67\\xa9\\x1d\\x2d\\x06\\x3c\\xfc\\x06\\x05\\x77\\x3b\\x59\\x83\\x4f\\x1b\\x21\\x53\\xa8\\xc1\\x91\\x8c\"\n\"\\x95\\x8d\\x94\\x1f\\xc4\\x1d\\xd9\\x56\\xf7\\x1f\\xce\\xd3\\x95\\x9d\\xd6\\x1e\\x0e\\xfb\\x3e\\xf7\\xf4\\x16\\xad\\x06\\x67\\xfb\\x33\\x20\\x0a\\xbe\\xf7\\x7d\"\n\"\\x05\\x69\\x25\\x1d\\x21\\x1d\\x55\\xfb\\x94\\x05\\x7d\\x5c\\x64\\x85\\x63\\x1b\\x56\\x6e\\xa0\\xb2\\x95\\x8b\\x8f\\x8d\\x93\\x1f\\xc3\\x1d\\xc4\\x64\\xe1\\xbb\"\n\"\\xb6\\x94\\x9f\\xbd\\x1e\\x0e\\xa0\\xf8\\x39\\xf7\\x8f\\x15\\xc5\\x90\\xbd\\x93\\xbe\\x98\\x50\\xfb\\xa9\\x18\\xe9\\x25\\x0a\\x2d\\x06\\x3c\\xfc\\x06\\x4b\\x7a\"\n\"\\x5e\\x84\\x59\\x88\\x19\\xbb\\xf7\\x75\\x05\\x4f\\x06\\x5b\\xfb\\x75\\x05\\x32\\x91\\x5f\\xa6\\xbc\\x1a\\x91\\x8c\\x95\\x8d\\x94\\x1e\\xc4\\x1d\\xd3\\x59\\xf7\"\n\"\\x20\\x88\\x1e\\x6d\\xfb\\x21\\x05\\xc7\\x06\\x0e\\xfb\\x3e\\xf7\\xc6\\xf7\\x43\\x15\\xab\\x90\\xa2\\x92\\xac\\x98\\x61\\xfb\\x5c\\x18\\xdf\\x96\\x0a\\x6c\\x82\"\n\"\\x71\\x86\\x6d\\x87\\x19\\xa5\\xf7\\x0d\\x05\\x55\\x06\\x71\\xfb\\x0e\\x05\\x5e\\x8f\\x75\\x9f\\xae\\x1a\\x95\\x8b\\x8f\\x8d\\x93\\x1e\\xc3\\x1d\\xc0\\x66\\xe3\"\n\"\\x89\\x1e\\x77\\x25\\x05\\xc1\\x06\\x0e\\xa0\\xf7\\xca\\x36\\x0a\\xd9\\xf8\\x04\\x05\\xa0\\xde\\xc7\\x94\\xc6\\x1b\\xf5\\xbb\\x71\\x54\\x88\\x1f\\x83\\x89\\x82\"\n\"\\x89\\x81\\x1e\\x4e\\xfb\\xb6\\x05\\xe9\\x06\\xc9\\xf7\\xbb\\x05\\x8e\\x98\\x8d\\x9a\\x93\\x1a\\xb9\\x73\\xb5\\x63\\xa4\\x1e\\xa5\\x62\\x5a\\x95\\x3b\\x1b\\x3e\"\n\"\\x59\\x84\\x77\\x45\\x1f\\x0e\\x20\\xdd\\x16\\xdf\\x06\\xd4\\xf7\\xed\\x05\\xd3\\xc8\\xca\\xb1\\xc5\\x1b\\xb7\\xa8\\x6d\\x5f\\x7f\\x8b\\x88\\x89\\x83\\x1f\\x3f\"\n\"\\xfb\\xfa\\x20\\x0a\\xd7\\xf7\\xfa\\x05\\x8f\\x9b\\x8c\\x99\\x9b\\x1a\\xd2\\x51\\xc4\\x41\\x4a\\x54\\x6f\\x46\\x45\\x1e\\xc9\\xf7\\xba\\x21\\x1d\\x0e\\xfc\\x20\"\n\"\\xf7\\xe9\\x36\\x0a\\x0e\\x8a\\xf8\\xa3\\xdd\\x15\\x52\\x06\\x7c\\x39\\x69\\xfb\\x33\\x05\\xe8\\x06\\xad\\xf7\\x33\\x05\\xc3\\x95\\x1d\\xb5\\xbb\\x81\\xdc\\x1b\"\n\"\\xd7\\xbd\\x92\\x9f\\xd0\\x1f\\x0e\\xfb\\x30\\xf8\\x08\\xd5\\x15\\x59\\x06\\x5f\\xfb\\x7f\\x20\\x0a\\xaa\\xf7\\x35\\x05\\xba\\x06\\x38\\x1d\\x37\\x06\\x55\\xfb\"\n\"\\x94\\x05\\x7d\\x5c\\x64\\x85\\x63\\x1b\\x56\\x6e\\x9f\\xb0\\x94\\x8c\\x96\\x8e\\x97\\x1f\\xb3\\xf7\\x4f\\x21\\x1d\\x5d\\xfb\\x69\\x05\\x89\\x80\\x8a\\x81\\x80\"\n\"\\x1a\\x4b\\xc9\\x5f\\xe6\\xba\\xb0\\x93\\xa0\\xb9\\x1e\\x0e\\xf3\\xf7\\x10\\xf8\\x24\\x15\\x7c\\x57\\x85\\x61\\x59\\x1a\\xfb\\x43\\xf4\\x22\\xf7\\x44\\xf7\\x07\"\n\"\\xf4\\xb7\\xdd\\xdb\\x1e\\xe5\\xe8\\xc1\\xf7\\x1b\\xf7\\x17\\x1a\\xf7\\x43\\x22\\xf4\\xfb\\x44\\xfb\\x31\\xfb\\x11\\x40\\xfb\\x27\\x31\\x1e\\xe3\\x79\\x05\\xf2\"\n\"\\xcb\\xe8\\xc2\\xf7\\x01\\x1b\\xf7\\x14\\xd7\\x3b\\xfb\\x1a\\x7c\\x8b\\x82\\x89\\x76\\x1f\\x7a\\x38\\x15\\xfb\\x37\\x56\\xfb\\x08\\x2b\\xfb\\x24\\x1b\\xfb\\x14\"\n\"\\x3f\\xdb\\xf7\\x1b\\x99\\x8c\\x97\\x8d\\x9d\\x1f\\x0e\\xb4\\x5b\\x1d\\xf8\\x47\\xf7\\x1e\\x53\\x1d\\xf7\\xa7\\x06\\x0e\\x3e\\x0a\\xf7\\xf5\\xf7\\x1a\\x15\\xfb\"\n\"\\xa6\\x06\\x7b\\x46\\x05\\xf7\\xa7\\x06\\x0e\\xf3\\x95\\x0a\\xfb\\x48\\xae\\x0a\\xe1\\xe4\\xbf\\xf7\\x1a\\xf7\\x16\\x1a\\xf7\\x48\\xfb\\x00\\xf7\\x03\\xfb\\x44\"\n\"\\x1e\\xf7\\x3e\\xfc\\x3c\\x15\\xfb\\x34\\x5a\\xfb\\x09\\x28\\xfb\\x21\\x1b\\xfb\\x12\\x41\\xdb\\xf7\\x1b\\x9a\\x8c\\x96\\x8d\\x9d\\x1f\\x9c\\xde\\x15\\xf7\\x36\"\n\"\\xbe\\xf7\\x07\\xec\\xf7\\x21\\x1b\\xf7\\x12\\xd5\\x3b\\xfb\\x1b\\x7c\\x8a\\x80\\x89\\x79\\x1f\\x0e\\x9a\\x1d\\xe3\\xfb\\xd2\\x15\\x20\\x69\\x49\\x4f\\x36\\x1b\"\n\"\\x45\\x5f\\xbc\\xda\\x97\\x8c\\x95\\x8d\\x9c\\x1f\\x9b\\xd5\\x15\\xf5\\xab\\xcf\\xc8\\xe0\\x1b\\xd2\\xb6\\x5a\\x3a\\x7f\\x8a\\x82\\x89\\x7b\\x1f\\x0e\\x68\\xf9\"\n\"\\x03\\xfa\\x02\\x53\\x1d\\xf7\\xa8\\x06\\xfc\\x65\\xfd\\xbd\\x15\\xe3\\x06\\xc4\\xb3\\xa5\\xcd\\xb7\\x1f\\xf8\\x30\\xf9\\x11\\x05\\xfb\\x06\\x06\\xfb\\xb2\\xfc\"\n\"\\x62\\x26\\xf8\\x62\\x05\\xfb\\x00\\x06\\xf7\\x22\\xfc\\xcd\\x69\\x51\\x72\\x78\\x61\\x8a\\x19\\x53\\x06\\x0e\\xfb\\x42\\xf8\\x94\\xf9\\x30\\x53\\x1d\\xf7\\xa6\"\n\"\\x06\\x8c\\x40\\x15\\xfb\\x7b\\xfc\\x2c\\x5b\\xf8\\x2c\\x05\\x36\\x06\\xcd\\xfc\\xa0\\x59\\x36\\x05\\x61\\x73\\x78\\x7d\\x69\\x1b\\x7c\\x81\\x8d\\x94\\x78\\x1f\"\n\"\\x7b\\x3e\\x05\\x83\\xa2\\x98\\x88\\x9f\\x1b\\xa8\\xa9\\x94\\x9a\\xa3\\x1f\\xa6\\x9d\\x9c\\x9f\\xa6\\xb9\\xf8\\x05\\xf9\\x0e\\x18\\x0e\\xfb\\xe9\\xf9\\x27\\xfa\"\n\"\\x1d\\x6b\\x1d\\xf7\\x86\\xb0\\x89\\x15\\xf7\\x69\\xaf\\x8f\\xa5\\xc8\\x1f\\xf7\\x05\\xbd\\xdf\\xf7\\x33\\xf7\\x37\\x1a\\xe1\\x70\\xd6\\x5f\\xad\\x1e\\xa4\\x6c\"\n\"\\x5e\\x97\\x50\\x1b\\xfb\\x08\\x38\\x6b\\x4d\\x5e\\x1f\\x71\\x67\\x81\\x64\\x89\\x42\\xcc\\xab\\x18\\x97\\x07\\xc1\\x9c\\xb1\\xad\\xa2\\x1e\\x9c\\x96\\x95\\x8e\"\n\"\\xb9\\x94\\x42\\xfc\\x1f\\x18\\x7c\\x45\\x73\\x61\\x6e\\x81\\x08\\x77\\x06\\xd3\\x8a\\x15\\xc8\\xbc\\x9a\\xac\\xa1\\xf7\\x0f\\xc2\\xf7\\xd2\\x18\\x92\\x06\\x90\"\n\"\\x06\\x9e\\x06\\xa9\\x97\\x88\\x7f\\x9e\\x1f\\xb3\\x72\\xa1\\x51\\x3a\\x1a\\x20\\x73\\x34\\x5c\\x4c\\x1e\\x64\\x59\\x58\\x6e\\x54\\x88\\x08\\xf7\\x7b\\xfb\\x7d\"\n\"\\x15\\xce\\x06\\xad\\xf7\\x52\\x05\\x7d\\xaa\\x97\\x88\\x9e\\x1b\\xf7\\x06\\xee\\xf7\\x29\\xf7\\x42\\xec\\x64\\xbd\\x3e\\x5c\\x63\\x77\\x66\\x6d\\x1f\\x69\\x61\"\n\"\\x79\\x55\\x75\\xfb\\x0b\\x08\\xb9\\xfb\\x00\\x15\\xae\\xf7\\x54\\x05\\xe1\\x9b\\xad\\xbc\\xb7\\x1b\\xb2\\xa0\\x63\\x41\\xfb\\x20\\x56\\xfb\\x02\\x47\\x71\\x77\"\n\"\\x95\\xa1\\x79\\x1f\\x0e\\xe9\\xa7\\x16\\xf7\\xc2\\x06\\x9b\\xd9\\x05\\x2d\\xc6\\x60\\xd4\\xee\\x1a\\xf7\\x53\\xf7\\x26\\xf7\\x34\\xf7\\x41\\xd1\\xbb\\x74\\x58\"\n\"\\xb1\\x1e\\xa9\\x64\\x99\\x61\\x5a\\x1a\\x2e\\x62\\x28\\x45\\x41\\x1e\\x5f\\x5d\\x63\\x6f\\x3d\\x65\\x7b\\x3d\\x18\\xf7\\xc1\\x20\\x1d\\xfb\\x5d\\x06\\xd7\\xb2\"\n\"\\xc0\\xb3\\xb6\\xbf\\x08\\xc6\\xd3\\xb0\\xef\\xe6\\x1a\\xf7\\x2f\\xfb\\x09\\xf7\\x02\\xfb\\x39\\xfb\\x02\\x23\\x5e\\x36\\x33\\x1e\\x3a\\x3c\\x5d\\x21\\xfb\\x02\"\n\"\\x1a\\x25\\xb3\\x44\\xe9\\x4e\\x1e\\xfb\\x5e\\x06\\x0e\\xfc\\x20\\xf8\\x78\\x34\\x0a\\x0e\\xfc\\x20\\x58\\x0a\\xf7\\xda\\xf8\\xa9\\xf8\\x95\\x15\\x49\\x06\\xfb\"\n\"\\x74\\xfc\\x95\\x05\\xdb\\x06\\xf7\\x45\\xf8\\x2d\\xf7\\x45\\xfc\\x2d\\x05\\xdb\\x06\\x0e\\xf7\\xda\\xf8\\xa9\\x16\\xf7\\x74\\xf8\\x95\\x05\\x3b\\x06\\xfb\\x45\"\n\"\\xfc\\x2d\\xfb\\x45\\xf8\\x2d\\x05\\x3b\\x06\\xf7\\x74\\xfc\\x95\\x05\\x0e\\xf7\\xda\\xf8\\x8c\\xf9\\x60\\x15\\xfb\\x60\\xfb\\x34\\xfb\\x33\\xfb\\x5e\\xfb\\x5b\"\n\"\\xf7\\x34\\xfb\\x33\\xf7\\x5d\\xf7\\x5b\\xf7\\x34\\xf7\\x34\\xf7\\x5c\\xf7\\x59\\xfb\\x35\\xf7\\x36\\xfb\\x57\\x1f\\xa4\\x52\\x15\\xf7\\x23\\x7e\\xf7\\x06\\xfb\"\n\"\\x06\\x99\\xfb\\x25\\x08\\xfb\\xa3\\x06\\xf7\\xa4\\x52\\x15\\x82\\xfb\\x22\\xfb\\x0d\\xfb\\x0f\\xfb\\x22\\x80\\x08\\xf7\\xa8\\x07\\x53\\xfb\\xa8\\x15\\xfb\\x27\"\n\"\\x99\\xfb\\x05\\xf7\\x05\\x7d\\xf7\\x29\\x08\\xf7\\xa6\\x06\\xfb\\xa6\\xc4\\x15\\x99\\xf7\\x24\\xf7\\x07\\xf7\\x06\\xf7\\x25\\x99\\x08\\xfb\\xa4\\x07\\x0e\\x45\"\n\"\\xb6\\x16\\xf8\\x9b\\xf8\\x9b\\xfc\\x9b\\x06\\xf8\\x67\\xfc\\x67\\x15\\xfc\\x33\\xf8\\x33\\xf8\\x33\\x06\\x0e\\xb8\\xf8\\xeb\\xf8\\xf7\\x15\\x45\\xfb\\xa4\\x06\"\n\"\\xfb\\x05\\x86\\x5f\\x7b\\x6b\\x1e\\x56\\x70\\x50\\x67\\x4c\\x1b\\x54\\x54\\xa7\\xb7\\x6e\\x1f\\x73\\xb0\\x84\\xb7\\xf7\\x11\\x1a\\xf7\\xa4\\x45\\xfb\\xa1\\x07\"\n\"\\xfb\\x29\\x90\\x65\\xa6\\x5f\\x1e\\x45\\xb5\\xd7\\x62\\xe5\\x1b\\xde\\xd1\\xac\\xc9\\xb8\\x1f\\xaf\\xbc\\x91\\xaf\\xf7\\x36\\x1a\\x0e\\x3a\\xf8\\x27\\xf8\\x1c\"\n\"\\x15\\xfb\\x69\\x06\\x41\\xf7\\x4d\\x05\\x2d\\x06\\xf7\\x7d\\xfc\\xd5\\x05\\xde\\x06\\xf7\\x7d\\xf8\\xd5\\x05\\x2d\\x06\\x22\\xfb\\x9d\\x15\\x3f\\xfb\\x48\\x40\"\n\"\\xf7\\x48\\x05\\x0e\\xf8\\xe6\\x21\\x0a\\x37\\x06\\x4c\\xfb\\xbd\\x05\\xfb\\x00\\x74\\x45\\x45\\x35\\x1b\\x54\\x69\\xa8\\xbb\\x93\\x8c\\x94\\x8d\\x95\\x52\\x0a\"\n\"\\x9f\\x06\\x3c\\x6a\\x5f\\x5d\\x5b\\x1a\\x5b\\xb7\\x6d\\xd2\\xa6\\x9e\\x8e\\x92\\xa0\\x1e\\x94\\xb8\\x05\\x85\\x7a\\x72\\x87\\x77\\x1b\\x6d\\x72\\x9f\\xa4\\x9f\"\n\"\\x96\\x9f\\xa3\\xa1\\x1f\\xad\\xaa\\x98\\x95\\xa2\\x97\\x08\\x0e\\xfb\\x10\\x44\\x1d\\x0e\\xfb\\x10\\x44\\x1d\\xf7\\x1c\\xf7\\x53\\x65\\x1d\\xfb\\x10\\x44\\x1d\"\n\"\\xf7\\x2e\\xf7\\xe3\\x15\\x78\\x30\\x8f\\x23\\x05\\xa9\\xa8\\x1d\\xfb\\x10\\x44\\x1d\\xf7\\x1d\\xf7\\x93\\x2b\\x1d\\x4c\\x0a\\xa4\\xf9\\x86\\xd0\\x1d\\x6c\\xa7\"\n\"\\x62\\x1f\\x83\\x5f\\x15\\xa0\\x99\\x7d\\x77\\x70\\x7a\\x1d\\xa6\\x1f\\x0e\\x58\\x1d\\xf7\\x0e\\x90\\x1d\\xbb\\x3a\\x1d\\xdb\\xf9\\x78\\x23\\x1d\\xbb\\x3a\\x1d\"\n\"\\x83\\xf9\\x79\\x24\\x1d\\xbb\\x3a\\x1d\\x97\\x53\\x0a\\xbb\\x3a\\x1d\\x8d\\xf9\\x78\\x24\\x0a\\x0e\\xfb\\x77\\xf7\\x4d\\xf9\\x23\\x15\\xf4\\x06\\x49\\x6f\\x5f\"\n\"\\x4d\\x4a\\x1a\\x57\\xa8\\x64\\xc4\\x73\\x1e\\x54\\x80\\x6a\\x7c\\x68\\x6d\\x08\\x5a\\x61\\x6f\\x4c\\x49\\x1a\\x58\\x9d\\x60\\xac\\x72\\x1e\\xa6\\x77\\xaa\\x81\"\n\"\\xc1\\x87\\xbd\\x87\\x18\\xd0\\x86\\x96\\x85\\x70\\x1a\\x6b\\x81\\x76\\x3e\\xfb\\x14\\x1e\\xe4\\x06\\xcd\\xf7\\x04\\xa2\\xc3\\xb8\\x1a\\x9b\\x85\\x9a\\x82\\x96\"\n\"\\x1e\\x79\\x9f\\x74\\x93\\x52\\x91\\x5a\\x90\\x18\\x4d\\x92\\x7c\\x8e\\x79\\x94\\x08\\x75\\x96\\x7d\\xa6\\xab\\x1a\\xc5\\xac\\xc3\\xc1\\xaa\\x1e\\xa4\\xb7\\xb9\"\n\"\\x95\\xdb\\x1b\\xbd\\x06\\x9b\\xd5\\x05\\x5c\\x06\\xfb\\x03\\x58\\xa6\\xc7\\xb5\\xa8\\xbd\\xb4\\xa6\\x1f\\xa1\\xac\\xae\\x93\\xc5\\x1b\\xe5\\x06\\x9a\\xd5\\x05\"\n\"\\xfc\\x07\\x06\\x0e\\xfb\\x42\\x4d\\x0a\\xfb\\x8a\\xf7\\x6d\\x24\\x1d\\xfb\\x42\\x4d\\x0a\\xfb\\x86\\xf7\\x6c\\x2e\\x0a\\xfb\\x42\\x46\\x1d\\x28\\xf7\\xb7\\x15\"\n\"\\xfb\\x14\\xfb\\x28\\x05\\xc7\\x45\\x0a\\xfb\\x42\\x46\\x1d\\x32\\xf7\\x9e\\x23\\x0a\\xfb\\x67\\xf7\\x80\\xf9\\x23\\x15\\xf7\\x74\\x06\\x40\\x66\\x45\\x55\\x48\"\n\"\\x42\\x08\\x27\\xfb\\x00\\x53\\xfb\\x0f\\xfb\\x03\\x1a\\x55\\xa3\\x5e\\xb1\\x77\\x1e\\xa5\\x7e\\xa4\\x85\\xc2\\x85\\xaf\\x87\\x18\\xc4\\x85\\x96\\x85\\x73\\x1a\"\n\"\\x6e\\x7d\\x6b\\x57\\x36\\x1e\\x83\\x7e\\x84\\x7f\\x84\\x7f\\x08\\xe4\\x06\\xd5\\xf7\\x13\\x99\\xac\\xbd\\x1a\\xa5\\x81\\xa0\\x79\\x97\\x1e\\x79\\x96\\x7b\\x8f\"\n\"\\x5b\\x91\\x64\\x90\\x18\\x44\\x93\\x8b\\x8b\\x78\\x95\\x08\\x74\\x96\\x7e\\xa5\\xac\\x1a\\xdf\\xc2\\xf7\\x04\\xe4\\xec\\x1e\\xd7\\xde\\xda\\xc7\\xf2\\xc1\\x9b\"\n\"\\xd5\\x18\\xfb\\xec\\x06\\x0e\\x74\\xa2\\xf8\\xa0\\x9a\\xf7\\x52\\x97\\x6b\\x99\\x06\\xdc\\x0a\\xe4\\x0b\\xb3\\x8f\\x8f\\x8e\\x8e\\x92\\x92\\x90\\x90\\x8e\\x9d\"\n\"\\x90\\x0c\\x0c\\xf8\\xc0\\x14\\xf9\\x36\\x15\\xb0\\x13\\x00\\xa1\\x02\\x00\\x01\\x00\\x05\\x00\\x09\\x00\\x0e\\x00\\x13\\x00\\x1e\\x00\\x25\\x00\\x2a\\x00\\x31\"\n\"\\x00\\x6d\\x00\\x74\\x00\\x79\\x00\\x99\\x00\\x9c\\x00\\xaa\\x00\\xaf\\x00\\xb4\\x00\\xbe\\x00\\xda\\x01\\x07\\x01\\x26\\x01\\x2b\\x01\\x39\\x01\\x3e\\x01\\x45\"\n\"\\x01\\x4c\\x01\\x58\\x01\\xa8\\x01\\xbb\\x01\\xcc\\x01\\xcf\\x01\\xeb\\x02\\x04\\x02\\x0c\\x02\\x1a\\x02\\x2b\\x02\\x30\\x02\\x3c\\x02\\x43\\x02\\x49\\x02\\x4f\"\n\"\\x02\\x5b\\x02\\x71\\x02\\x81\\x02\\x88\\x02\\x9d\\x02\\xc1\\x02\\xc8\\x02\\xd6\\x02\\xf8\\x03\\x1f\\x03\\x3d\\x03\\x42\\x03\\x47\\x03\\x4c\\x03\\x51\\x03\\x5c\"\n\"\\x03\\x62\\x03\\x65\\x03\\x77\\x03\\x81\\x03\\x8a\\x03\\x8e\\x03\\x92\\x03\\xb3\\x03\\xda\\x04\\x03\\x04\\x83\\x05\\x00\\x05\\x7c\\x05\\xf4\\x06\\x0a\\x06\\x67\"\n\"\\x06\\x87\\x06\\x92\\x06\\xc1\\x06\\xe7\\x07\\x0b\\x07\\x4c\\x07\\x4f\\x07\\x71\\x07\\x99\\x07\\xb5\\x07\\xd7\\x08\\x0c\\x08\\x34\\x08\\x66\\x08\\x99\\x08\\xae\"\n\"\\x08\\xb1\\x08\\xda\\x08\\xdd\\x08\\xf8\\x08\\xfd\\x09\\x16\\x09\\x1e\\x09\\x3d\\x09\\x43\\x09\\x4f\\x09\\x6a\\x09\\x8c\\x09\\x9d\\x09\\xbd\\x09\\xc4\\x09\\xd1\"\n\"\\x09\\xed\\x0a\\x09\\x0a\\x23\\x0a\\x3e\\x0a\\x49\\x0a\\x4e\\x0a\\x51\\x0a\\x68\\x0a\\x77\\x0a\\x7d\\x0a\\x93\\x0a\\xa9\\x0a\\xbd\\x0a\\xd2\\x0a\\xdb\\x0a\\xe4\"\n\"\\x0a\\xf5\\x0b\\x09\\x0b\\x1d\\x0b\\x2a\\x0b\\x3d\\x0b\\x50\\x0b\\x5a\\x0b\\x5d\\x0b\\x63\\x0b\\x6e\\x0b\\x7e\\x0b\\x8d\\x0b\\x9e\\x0b\\xa8\\x0b\\xb2\\x0b\\xc2\"\n\"\\x0b\\xd2\\x0b\\xe2\\x0b\\xea\\x0b\\xf1\\x0b\\xfd\\x0c\\x01\\x0c\\x0f\\x0c\\x1d\\x0c\\x2a\\x0c\\x35\\x0c\\x3e\\x0c\\x46\\x0c\\x52\\x0c\\x5e\\x0c\\x6a\\x0c\\x73\"\n\"\\x0c\\x7f\\x0c\\x8b\\x0c\\x96\\x0c\\xa1\\x0c\\xac\\x0c\\xb7\\x0c\\xc2\\x0c\\xcb\\x0c\\xd2\\x05\\xdf\\x06\\x0b\\xf8\\xa0\\x15\\x0b\\x26\\x1d\\xe9\\x06\\x0b\\x37\"\n\"\\x0a\\xf3\\x06\\x0e\\x15\\x21\\x06\\xf7\\x10\\xfb\\x28\\x05\\xc1\\x06\\x0b\\x06\\xf7\\x2f\\xf9\\x6d\\x05\\x0b\\x06\\x7a\\x39\\x05\\x0b\\xf7\\x93\\xf7\\xe0\\x80\"\n\"\\x0a\\x0b\\xb8\\x1e\\xbc\\x5a\\x3c\\xa7\\x30\\x1b\\x7f\\x3a\\x15\\xcf\\xcb\\x6f\\x5f\\xad\\x1f\\xa6\\x68\\x99\\x5c\\x4f\\x1a\\x2f\\x6c\\x2b\\x56\\x42\\x1e\\x3a\"\n\"\\x50\\x33\\x5d\\x2a\\x1b\\x4a\\x4c\\xa7\\xb7\\x68\\x1f\\x70\\xae\\x7d\\xba\\xc6\\x1a\\xe7\\xaa\\xec\\xc0\\xd5\\x1e\\xda\\xc5\\xe4\\xba\\xe9\\x1b\\x0b\\xdf\\x06\"\n\"\\xc0\\xf7\\x8d\\x05\\x0b\\x06\\x7b\\x41\\x05\\x0b\\xf9\\xb5\\x22\\x1d\\x32\\x06\\xfb\\x13\\xfc\\xea\\xfb\\x8e\\xf8\\xea\\x05\\x23\\x26\\x1d\\xe4\\x06\\xf7\\x12\"\n\"\\xf8\\xe3\\xf7\\x8d\\xfc\\xe3\\x05\\xf5\\x06\\x0b\\x4a\\x1d\\x0e\\xf7\\xb6\\xf8\\xa3\\x15\\x37\\x06\\xfb\\x04\\xfc\\xa3\\x20\\x0a\\x0b\\x15\\x21\\x74\\x1d\\x0e\"\n\"\\x06\\x9d\\xdd\\x05\\x0b\\xf8\\xad\\x61\\x1d\\x6f\\xd7\\x5f\\x28\\x0a\\x0b\\x15\\x99\\xd6\\x8e\\xa5\\xab\\x1a\\xed\\x5f\\x1d\\xdf\\xa1\\x8c\\x95\\x8f\\x9a\\x1f\"\n\"\\x9d\\xd3\\x77\\x1d\\x81\\x8a\\x84\\x89\\x7b\\x1f\\x0e\\xf9\\x7c\\x16\\xf7\\xe8\\xf9\\x6d\\x05\\x23\\x06\\xfb\\x9b\\xfc\\xe4\\x62\\xf8\\xe4\\x05\\x2b\\x06\\xfb\"\n\"\\xb4\\xfc\\xe4\\x7c\\xf8\\xe4\\x05\\x27\\x06\\xab\\xfd\\x6d\\x05\\xf1\\x06\\xf7\\xb6\\xf8\\xe4\\xb4\\xfc\\xe4\\x05\\x0b\\xf9\\x75\\x22\\x1d\\xfc\\xa1\\x26\\x0a\"\n\"\\xf8\\x2a\\x06\\xfc\\xbf\\xfc\\xc7\\x79\\x37\\x05\\xf8\\xc0\\x20\\x1d\\xfc\\x4a\\x06\\xf8\\xc0\\xf8\\xc7\\x05\\x0b\\xf9\\x59\\x35\\x0a\\x0b\\x15\\xfc\\xf3\\xfd\"\n\"\\x6d\\x05\\xc5\\x06\\xf8\\xf3\\xf9\\x6d\\x05\\x0b\\xa0\\x0a\\xe9\\x06\\x0b\\x15\\x23\\x06\\x75\\x24\\x05\\x0b\\x06\\xfb\\x1e\\xfd\\x1b\\x05\\x0b\\x83\\xb2\\x1b\"\n\"\\xe0\\xc7\\xb8\\xcb\\xa7\\x6d\\xa2\\x66\\x0b\\xf9\\x96\\xf8\\x8b\\x15\\xb9\\x1d\\x3c\\x2c\\x5a\\xfb\\x1d\\xfb\\x12\\x1a\\x45\\x9f\\x4c\\xb0\\x5c\\x1e\\x51\\xb9\"\n\"\\xca\\x70\\xe4\\x1b\\xf5\\xe7\\xb2\\xd2\\xcc\\x1f\\xb2\\xb6\\xab\\xc2\\xad\\xdc\\x08\\x29\\x06\\x72\\x52\\x7b\\x6d\\x79\\x72\\x08\\x50\\x61\\x3f\\x66\\x3c\\x1b\"\n\"\\x23\\x46\\xdc\\xf7\\x0d\\xe7\\xa9\\xee\\xbe\\xd7\\x1f\\xe5\\xc8\\xd4\\xb6\\xe7\\x1b\\xf0\\xbd\\x5a\\xfb\\x00\\x93\\x1f\\x0b\\x15\\xac\\x0a\\x44\\x45\\x36\\x1b\"\n\"\\x54\\x69\\xa8\\xbb\\x93\\x8c\\x95\\x8d\\x94\\x52\\x0a\\x0e\\x7e\\x0a\\xab\\x1e\\xa3\\xa0\\x96\\xa0\\x97\\x47\\x0a\\x81\\x62\\x74\\x4f\\x56\\x0a\\x80\\x0a\\x0e\"\n\"\\xda\\x16\\xdf\\x06\\x95\\xbb\\xf7\\xbc\\xf7\\xca\\x3f\\xfb\\xfa\\x05\\x73\\x1d\\x82\\x5f\\xfb\\xbb\\xfb\\xc7\\xd5\\xf7\\xf3\\x21\\x1d\\x0b\\xbc\\xd9\\xcb\\xa0\"\n\"\\xd7\\xac\\xbf\\x1f\\xc6\\xb1\\xbc\\xa9\\xc8\\x1b\\xca\\xb2\\x68\\x52\\x85\\x8b\\x84\\x8a\\x82\\x1f\\x0b\\x15\\x6a\\x1d\\xc9\\x16\\x6a\\x1d\\x0e\\xbb\\x1d\\xf2\"\n\"\\xee\\xc3\\x28\\x05\\xcb\\x06\\x4a\\xf7\\x2a\\x05\\x0b\\x15\\x76\\x29\\x05\\xc2\\x06\\x50\\x80\\x73\\x6e\\x64\\x1b\\x83\\x65\\x05\\xca\\x0b\\xd0\\x16\\x73\\x1d\"\n\"\\x0b\\x1e\\xa2\\xa3\\xa9\\x95\\xb7\\x1b\\xc6\\xac\\x75\\x63\\x0b\\x06\\xf7\\x48\\xf7\\x28\\x05\\x0e\\x15\\x6e\\x79\\x81\\x83\\x0b\\xb7\\x08\\x53\\x06\\x63\\x0b\"\n\"\\xf8\\x06\\xf8\\xa0\\x3b\\x1d\\xf7\\xb8\\xce\\x3b\\x1d\\x0b\\xf8\\xbb\\xf7\\xf0\\x15\\x8c\\x9a\\x05\\x8c\\x9b\\x8c\\x96\\x8e\\x1a\\xab\\x93\\x1d\\x46\\x5f\\x3f\"\n\"\\x0a\\x0b\\xf8\\x14\\xf8\\xaf\\xa0\\x1d\\xbf\\x68\\xac\\x1e\\xac\\x6a\\x5d\\x45\\x1d\\x0b\\xf9\\x56\\xf9\\x6d\\x70\\x0a\\x0b\\xf8\\x77\\x16\\xac\\x0a\\x44\\x45\"\n\"\\x36\\x1b\\x54\\x69\\xa8\\xbb\\x93\\x8c\\x95\\x8d\\x94\\x52\\x0a\\x0b\\x94\\x0a\\x05\\x61\\x70\\x7c\\x81\\x64\\x1b\\x81\\x87\\x8b\\x8f\\x6e\\x1f\\x7b\\x40\\x05\"\n\"\\x83\\x9d\\x97\\x89\\x9e\\x1b\\xd2\\xbe\\xac\\xd6\\xb6\\x1f\\xf8\\x04\\xf9\\x0e\\x05\\x0b\\x87\\x0a\\x62\\x74\\x4f\\x56\\x0a\\x50\\x7b\\x4a\\x6f\\x59\\x1f\\x46\"\n\"\\x65\\x55\\x67\\x46\\x66\\x1d\\x0b\\x1f\\x98\\x64\\x7b\\x8f\\x79\\x1b\\x71\\x6d\\x7c\\x76\\x7b\\x1f\\x7f\\x7c\\x83\\x7a\\x7f\\x68\\x72\\x1d\\x91\\x95\\x89\\x87\"\n\"\\x96\\x1f\\x75\\xcb\\x9c\\x87\\xa1\\x1b\\x0b\\x15\\x2b\\x31\\x35\\x2e\\x49\\xbe\\x59\\xcf\\xef\\xe2\\xe0\\xec\\xcd\\x59\\xba\\x45\\x1f\\x7e\\x54\\x15\\xb4\\xab\"\n\"\\x6c\\x64\\x4e\\x57\\x55\\x4f\\x60\\x6c\\xa8\\xb5\\xc8\\xc0\\xc0\\xc7\\x1f\\x0b\\x1f\\xda\\xf8\\x07\\x21\\x1d\\x35\\xfc\\x28\\x05\\x89\\x81\\x8a\\x80\\x7e\\x1a\"\n\"\\x47\\xbf\\x62\\xe1\\xd9\\xc4\\xa3\\xc3\\xc5\\x1e\\x7f\\x52\\x05\\x0b\\xf9\\x5f\\x4a\\x1d\\x0e\\xf9\\x79\\x41\\x0a\\x0b\\xfa\\x3f\\x2c\\x1d\\x0e\\x1b\\x5a\\x6b\"\n\"\\xaa\\x0a\\xa7\\x6d\\xa2\\x66\\x87\\x87\\x8b\\x89\\x7e\\x1f\\x0b\\xf7\\xb0\\xf7\\xdf\\xbf\\x0a\\x79\\x1d\\x0e\\xc8\\x6a\\xab\\x33\\xa1\\x1e\\x3f\\x9e\\x05\\x53\"\n\"\\x99\\x6e\\x9f\\xa5\\x1a\\x9f\\x97\\x0b\\xd4\\x05\\x83\\x6a\\x89\\x8b\\x7e\\x1b\\x75\\x0b\\x05\\x53\\x7f\\x7c\\x7d\\x58\\x1b\\x85\\x0b\\x39\\x0a\\x86\\x0b\\x16\"\n\"\\xc0\\x0a\\x0b\\xf8\\xbc\\xbe\\x3d\\x1d\\xa5\\x8b\\x8b\\x96\\x1a\\xcf\\x47\\xb8\\x21\\x4c\\x1d\\x84\\x8a\\x84\\x6b\\x0a\\x51\\x6c\\x51\\x1d\\xe9\\x98\\x94\\x8c\"\n\"\\xb7\\x9a\\x08\\x0b\\x83\\x1d\\x61\\xa7\\x73\\xbb\\x97\\x8e\\x8b\\x91\\xa3\\x1e\\x8d\\x91\\x8d\\x8c\\x91\\x52\\x1d\\x52\\x6b\\xa3\\xb5\\xac\\x9e\\xac\\xa9\\x9d\"\n\"\\x1f\\xa3\\x9a\\xa8\\x93\\xbd\\x92\\xe9\\x43\\x1d\\x0b\\xf9\\x56\\xf8\\x97\\x15\\x91\\xa7\\x8d\\x98\\x9a\\x1a\\xb7\\x76\\xb8\\x5a\\x1d\\x79\\x66\\x6e\\x70\\xe6\"\n\"\\x1d\\xb4\\xe7\\x68\\x1d\\xfb\\x0d\\xe5\\x44\\xf7\\x2b\\xf5\\xe2\\x92\\x1d\\x84\\x88\\x77\\x1e\\x0b\\xf8\\xa1\\x21\\x0a\\x7a\\x3d\\x7c\\xac\\x81\\x99\\x75\\x9b\"\n\"\\x19\\x9e\\x71\\x6b\\x96\\x69\\x1b\\x3e\\x3d\\x65\\x4d\\x5a\\x1f\\x55\\x48\\x66\\xfb\\x03\\x2e\\x1a\\xfb\\x01\\xd2\\x3f\\xf1\\xca\\xc5\\xa6\\xc0\\xbe\\x1e\\x87\"\n\"\\x78\\x05\\xfb\\x1c\\x6e\\x56\\x55\\x20\\x1b\\x47\\x63\\xa6\\xb8\\x1f\\x91\\x07\\x93\\x37\\x07\\x8a\\x79\\x8a\\x81\\x88\\x1a\\x3e\\xd0\\x59\\xf7\\x00\\xdb\\xd1\"\n\"\\xa3\\xb6\\xb8\\x1e\\xbd\\xbb\\xa6\\xc8\\xa6\\xf7\\x13\\xe8\\xf8\\x4b\\x18\\xfb\\x82\\x4d\\x15\\xcc\\xb4\\x5b\\x40\\x4d\\x79\\x42\\x6f\\x59\\x1f\\x4e\\x6a\\x50\"\n\"\\x65\\x4f\\x1b\\x48\\x61\\xbc\\xdb\\xc7\\x9b\\xcb\\xa9\\xbf\\x1f\\xcd\\xaf\\xc2\\xaf\\xcb\\x1b\\x0b\\xf8\\x44\\xf8\\x21\\x15\\x61\\xfb\\x5c\\x80\\x59\\x7d\\x68\"\n\"\\x78\\x76\\x19\\x74\\x78\\x6f\\x7c\\x74\\x1b\\x64\\x74\\xac\\xc4\\xf7\\x15\\xd6\\xf7\\x25\\xf7\\x0d\\xf6\\x1f\\x23\\x06\\x67\\x6e\\x6c\\x67\\x6a\\x57\\x08\\x56\"\n\"\\x39\\x70\\x32\\x32\\x1a\\x22\\xbe\\x4a\\xdd\\xc4\\xb7\\xa6\\xc9\\xb7\\x1e\\x93\\x71\\x91\\x80\\x96\\x7e\\x08\\x73\\x9f\\xaf\\x7c\\xae\\x1b\\xc0\\xc2\\xa9\\xbd\"\n\"\\xb3\\x1f\\xbe\\xcc\\xad\\xf5\\xec\\x1a\\xd9\\x77\\xcf\\x64\\xc0\\x1e\\x30\\x06\\xb5\\x4e\\x9e\\x4d\\x41\\x1a\\x46\\x79\\x40\\x6c\\x52\\x1e\\x5e\\x72\\x64\\x6f\"\n\"\\x66\\x1b\\x69\\x79\\xa2\\xb6\\x9f\\x8c\\x93\\x96\\xbd\\x1f\\xb5\\xf7\\x5c\\x05\\x0b\\xf9\\xad\\xf8\\x15\\x15\\xfb\\xc4\\x06\\x79\\x39\\x05\\xf7\\x72\\x06\\x85\"\n\"\\x71\\x7c\\x49\\x6e\\x5d\\x58\\x61\\x19\\x5f\\x55\\x51\\x76\\x46\\x1b\\x41\\x4b\\xa7\\xb9\\x6c\\x1f\\x73\\xae\\x7e\\xc0\\xc4\\x1a\\xe3\\xae\\xf2\\xc0\\xd1\\x1e\"\n\"\\xda\\xc8\\xe1\\xb6\\xec\\x1b\\xc8\\xbd\\x79\\x69\\xac\\x1f\\xa5\\x70\\x95\\x71\\x8c\\x5c\\x08\\xe6\\x92\\x06\\x8f\\x07\\x91\\x07\\xf7\\x19\\x2a\\xde\\xfb\\x31\"\n\"\\xfb\\x08\\x29\\x63\\x3d\\x3d\\x1e\\x2b\\x2b\\x51\\xfb\\x1c\\xfb\\x16\\x1a\\x2d\\xad\\x35\\xc3\\x5d\\x1e\\x66\\xb8\\xcd\\x76\\xcf\\x1b\\xcc\\xd0\\x9d\\xaa\\xc1\"\n\"\\x1f\\xa3\\x99\\x9e\\x99\\xb1\\xab\\x8f\\x31\\x18\\xc6\\x06\\x0b\\xab\\x9a\\x15\\xae\\x64\\xe6\\xdc\\x05\\x57\\xbe\\xd7\\x6f\\xe8\\x1b\\xe4\\xdf\\xa6\\xbd\\xce\"\n\"\\x1f\\xf7\\x08\\xe1\\xd9\\xf7\\x39\\xf7\\x32\\x1a\\xc3\\x7f\\xbe\\x72\\xb6\\x1e\\xe7\\xde\\x68\\xb2\\x34\\x3d\\x05\\xbf\\x5f\\x36\\xab\\x2a\\x1b\\xfb\\x05\\x2a\"\n\"\\x60\\x37\\x3b\\x1f\\x34\\x2f\\x55\\xfb\\x18\\xfb\\x0e\\x1a\\x4b\\x99\\x4d\\xa3\\x61\\x1e\\xd7\\xcf\\x15\\x7e\\xa9\\x86\\xa5\\xb3\\x1a\\xf7\\x72\\xf7\\x22\\xf7\"\n\"\\x42\\xf7\\x4a\\xce\\xc8\\x72\\x60\\xaf\\x1e\\xa7\\x5d\\x15\\x96\\x72\\x90\\x67\\x61\\x1a\\x33\\x6b\\x28\\x57\\x43\\x1e\\x3c\\x51\\x31\\x5c\\x2e\\x1b\\x49\\x4e\"\n\"\\xa3\\xb4\\x69\\x1f\\x0b\\xf8\\xbb\\xf7\\xf0\\x15\\x8c\\x9a\\x05\\x8c\\x9a\\x8c\\x96\\x8e\\x1a\\xac\\x93\\x1d\\x45\\x60\\x3f\\x0a\\x0b\\x15\\x94\\x06\\xa2\\x06\"\n\"\\xc1\\xa4\\x7a\\x67\\x50\\x5d\\x62\\x4b\\x5a\\x71\\xa0\\xb3\\x93\\x8c\\x92\\x8d\\x98\\x1f\\x4d\\x06\\x88\\x7b\\x8a\\x82\\x7f\\x1a\\x47\\xb6\\x66\\xdd\\xf5\\xdc\"\n\"\\xd1\\xe7\\xb0\\x7b\\xa1\\x66\\x98\\x1e\\xbd\\x9f\\xa7\\xb4\\xbf\\x1a\\xc6\\x61\\xac\\x40\\x2e\\x50\\x5b\\x2d\\x76\\x1e\\xc9\\x06\\x91\\xa6\\x91\\x99\\x94\\x98\"\n\"\\x08\\xa1\\x9c\\xa9\\x98\\xac\\x1b\\xb2\\xa3\\x79\\x6c\\x6d\\x7e\\x72\\x76\\x80\\x1f\\x80\\x77\\x77\\x88\\x58\\x1b\\x0b\\xf8\\xc7\\xf7\\x7e\\x15\\x99\\xd9\\x8e\"\n\"\\xa3\\xab\\x1a\\xec\\x5f\\x1d\\xe0\\xa1\\x8c\\x94\\x8f\\x9a\\x1f\\x9d\\xd3\\x77\\x1d\\x82\\x8a\\x83\\x89\\x7b\\x1f\\x0b\\xf8\\x14\\xf8\\xaf\\x96\\x1d\\x5c\\x39\"\n\"\\x4f\\x0a\\x0b\\xf8\\x0f\\xf8\\xaf\\x15\\x38\\x3e\\x66\\x4b\\x58\\x1f\\x58\\x4b\\x6a\\x25\\x30\\x1a\\xfb\\x0f\\xda\\x3a\\xf7\\x0d\\xe1\\xd6\\xaf\\xcc\\xbf\\x1e\"\n\"\\xbe\\xcc\\xac\\xef\\xe4\\x1a\\xf7\\x13\\x3d\\xdb\\xfb\\x10\\x1e\\x88\\x3e\\xa4\\x1d\\x0b\\x4d\\x1d\\xe5\\xaf\\xb3\\x92\\x98\\xb0\\x1e\\xaa\\x96\\x9a\\x95\\xb5\"\n\"\\xaf\\x08\\x84\\x07\\x87\\x07\\x61\\xa7\\x73\\xbb\\x97\\x8e\\x8b\\x91\\xa3\\x1e\\x8d\\x91\\x8d\\x8c\\x91\\x52\\x1d\\x0b\\xf8\\x7b\\xb3\\x1d\\x96\\x8c\\x96\\x8e\"\n\"\\x97\\x1f\\x99\\xcd\\x05\\x2d\\x06\\x7d\\x4b\\x05\\x87\\x7a\\x89\\x7a\\x7d\\x1a\\x60\\xa0\\x61\\xad\\x6f\\x1e\\x75\\xa6\\xae\\xc6\\x1d\\x0b\\xf8\\x95\\xf7\\x6a\"\n\"\\x15\\x5e\\xfb\\x6a\\x05\\xf8\\x76\\x20\\x1d\\xfc\\x18\\x06\\xc0\\xf7\\x8e\\x05\\xf7\\xf3\\x2f\\x0a\\xfb\\xf3\\x06\\xbc\\xf7\\x7d\\x05\\xf8\\x07\\x20\\x1d\\xfd\"\n\"\\x02\\x06\\xfc\\x5a\\xfd\\x6d\\x05\\xf2\\x06\\xf7\\x16\\xf7\\x6a\\x05\\xf7\\xb3\\xdc\\x15\\xfb\\x82\\x06\\xf7\\x68\\xf7\\xf4\\x05\\xef\\x06\\x0b\\x70\\x0a\\x0e\"\n\"\\x86\\x0a\\x80\\x81\\x1a\\x5a\\xad\\x6d\\xc2\\xa0\\xa8\\x8e\\x8f\\x9a\\x1e\\x9b\\x5b\\x0a\\x7d\\x96\\x9b\\x8e\\x8c\\x90\\x8c\\x91\\x1f\\xd9\\xf8\\x03\\x05\\xe4\"\n\"\\x06\\x0b\\x15\\x49\\x1d\\xd1\\x98\\x3f\\x1d\\x83\\x67\\x85\\x60\\x7a\\x1a\\x62\\xa2\\x59\\xab\\x6e\\x1e\\x66\\xb4\\xcd\\x76\\xd8\\x1b\\xf7\\x3c\\xf7\\x15\\xe9\"\n\"\\xf7\\x26\\xaa\\x1f\\xf7\\x01\\xf8\\x94\\x05\\x0b\\xf7\\x8f\\xf7\\xc9\\xa4\\x0a\\xf5\\x4d\\xc2\\xfb\\x0f\\x1e\\xfb\\xc2\\x22\\x0a\\xde\\xf8\\x1b\\x15\\xc2\\xf7\"\n\"\\x94\\x05\\xf7\\x56\\xbe\\x1d\\xe4\\x16\\xa3\\x1d\\x5f\\xfd\\x1b\\x15\\xf7\\x0d\\xf8\\xc9\\x05\\xf7\\x3f\\x06\\xf6\\xcb\\x4d\\x22\\x2f\\x6c\\xfb\\x0c\\x62\\x4c\"\n\"\\x1f\\x3b\\x58\\x3e\\x60\\x30\\x1b\\x0b\\xf7\\x75\\x22\\x1d\\xfb\\x2f\\xfd\\x6d\\x05\\x78\\x1d\\xe6\\x1b\\xbe\\xad\\x69\\x58\\x7f\\x8b\\x8b\\x85\\x70\\x1f\\x42\"\n\"\\xfb\\xeb\\x20\\x0a\\xdb\\xf8\\x0c\\x05\\x8e\\x98\\x8c\\x97\\x97\\x1a\\xda\\x59\\xba\\x36\\x40\\x5b\\x76\\x50\\x4b\\x1e\\xc4\\xf7\\xa2\\x05\\x0b\\x94\\x0a\\x74\"\n\"\\x64\\x7a\\x80\\x66\\x8a\\x19\\x7f\\x06\\x81\\x06\\x7c\\x8d\\x86\\x8b\\x86\\x8c\\x7b\\x40\\x18\\x83\\x9d\\x96\\x89\\xa0\\x1b\\xd1\\xbd\\xac\\xd6\\xb7\\x1f\\xf8\"\n\"\\x04\\xf9\\x0e\\x05\\x0b\\xf8\\x6b\\xf8\\x0a\\x15\\xf7\\xd7\\xf7\\xf7\\x05\\xfb\\x06\\x06\\xfb\\x8c\\xfb\\xb1\\xfb\\x11\\xf7\\xb1\\x05\\xfb\\x05\\x06\\xf7\\x3b\"\n\"\\xfb\\xf7\\xfb\\xe7\\xfc\\x0a\\x05\\xf7\\x07\\x06\\xf7\\x9c\\xf7\\xc4\\xf7\\x1a\\xfb\\xc4\\x05\\xf7\\x07\\x06\\x0e\\x65\\x9d\\x1b\\x95\\x91\\x93\\x97\\x90\\x88\"\n\"\\x8f\\x7a\\x9a\\x1f\\x69\\xa6\\x53\\xd0\\x76\\xb3\\x08\\xb3\\x75\\x86\\x92\\x83\\x1b\\x83\\x86\\x88\\x82\\x86\\x1f\\x4f\\x27\\x7a\\x75\\x56\\x5c\\x08\\x76\\x78\"\n\"\\x8a\\x8a\\x82\\x1a\\x81\\x92\\x84\\x94\\x9f\\x0b\\xbc\\x1d\\x80\\x7c\\x83\\x7b\\x7f\\x67\\x72\\x1d\\x90\\x42\\x1d\\xcc\\x9c\\x87\\xa1\\x1b\\xb7\\xb6\\x0b\\x79\"\n\"\\x0a\\x0e\\xf7\\x76\\xf7\\x8d\\x15\\xf7\\x2e\\xf7\\x13\\xf7\\x3c\\xfc\\x0c\\x05\\xf7\\x02\\x06\\xfb\\x62\\xf8\\x43\\xf7\\xfd\\xf7\\xbe\\x05\\xfb\\x0c\\x06\\xfc\"\n\"\\x50\\xfc\\x09\\xda\\xf8\\x09\\x05\\x2d\\x22\\x0a\\x0b\\x7c\\x0a\\x0e\\xf7\\x48\\x21\\x0a\\xfb\\x13\\xfc\\xec\\x9b\\x0a\\x8e\\x8b\\x94\\x1b\\xf7\\x07\\xb6\\xa6\"\n\"\\xdd\\x9d\\x1f\\xf7\\x1a\\xf9\\x0d\\x05\\x0b\\xf9\\x01\\x7f\\x0a\\x0b\\x16\\xf7\\x8f\\x9c\\x0a\\xfb\\x3a\\x06\\xb7\\xf7\\x66\\x21\\x1d\\x80\\xfc\\x56\\x15\\xae\"\n\"\\xf7\\x3a\\x05\\xf7\\x38\\x06\\x0b\\x40\\x1d\\xd6\\xbc\\xbe\\x9e\\xa9\\x0b\\xf7\\xe0\\x15\\x44\\xfb\\xe0\\x05\\xe9\\x25\\x0a\\x2d\\x06\\x48\\xfb\\xcf\\x05\\xfc\"\n\"\\x09\\x06\\xce\\xf7\\xcf\\x05\\x2d\\x22\\x0a\\xd2\\xf7\\xe0\\x05\\x0b\\xa2\\x1d\\xfc\\x41\\x06\\x0b\\x15\\xf7\\x14\\xf7\\x28\\x05\\x4b\\x06\\x23\\x79\\x1d\\x0b\"\n\"\\xbd\\x0a\\x45\\x4e\\x40\\x6f\\x94\\x7d\\xac\\x74\\x1e\\x4a\\x6f\\x69\\x5c\\x4f\\x1a\\x4b\\xb8\\x64\\xd3\\xea\\xdb\\xd3\\xdf\\xaf\\x0b\\x06\\x2a\\xfc\\x59\\x71\"\n\"\\xfb\\x07\\x4f\\x43\\x3e\\x84\\x19\\x7a\\x39\\x05\\x9b\\x06\\xca\\x89\\xbd\\xa2\\xc1\\xc3\\xb7\\xba\\xa4\\xc0\\xa2\\xf0\\xd9\\xf8\\x05\\x18\\x0b\\xf7\\xce\\xf9\"\n\"\\x1b\\x15\\xf8\\x09\\x38\\x0a\\xe9\\x25\\x0a\\xfc\\xc5\\x22\\x0a\\x0e\\x15\\xf8\\x04\\xf8\\x4f\\x05\\xfb\\x03\\x06\\xfb\\xb5\\xfb\\xf9\\xfb\\x1c\\xf7\\xf9\\x05\"\n\"\\xfb\\x04\\x06\\xf7\\x4e\\xfc\\x4f\\x4e\\xfb\\xb2\\x05\\xe9\\x06\\x0b\\x21\\x0a\\xb4\\x1d\\x81\\x8a\\x0b\\x7e\\x0a\\xac\\x1e\\xa2\\xa0\\x97\\xa0\\x96\\x47\\x0a\"\n\"\\x81\\x0b\\x07\\x93\\x79\\x7a\\x8e\\x79\\x1b\\x4a\\x52\\x55\\x4e\\x65\\xa6\\x74\\xb7\\xba\\xb9\\xa3\\xb3\\xa7\\x1f\\xa0\\xa8\\x93\\xa9\\xbc\\x1a\\x0b\\xfb\\x52\"\n\"\\x37\\xf7\\x52\\x05\\x2c\\x06\\xf7\\x12\\xfb\\x93\\xfb\\x81\\xfb\\xa1\\x05\\xeb\\x06\\xf7\\x45\\xf7\\x5d\\xe1\\xfb\\x5d\\x05\\x0b\\x15\\x75\\x24\\x05\\xc6\\x06\"\n\"\\x39\\x7d\\x76\\x70\\x5b\\x1b\\x83\\x65\\xcd\\x88\\xbd\\xbc\\x9c\\xe0\\x19\\xa5\\xf7\\x0b\\x05\\x0e\\x06\\x49\\xfb\\xce\\x7d\\x45\\x5e\\x55\\x55\\x7f\\x19\\x7b\"\n\"\\x41\\xf7\\x04\\x90\\xd7\\xd8\\xa5\\xf7\\x1b\\x19\\xbc\\xf7\\x7d\\x05\\x0b\\x42\\x0a\\xbb\\xbc\\xdd\\x9c\\x1f\\x9f\\xe8\\x05\\x0e\\xf8\\xa0\\x91\\x0a\\x0b\\x91\"\n\"\\x0a\\x0e\\x15\\xfc\\x51\\xf7\\x63\\x7a\\x3e\\xf7\\xf5\\xfb\\x37\\xfc\\x3a\\xfb\\x38\\x7a\\x3c\\xf8\\xa9\\xf7\\x63\\x05\\x0e\\x78\\x1d\\xe5\\x1b\\xbd\\xb0\\x68\"\n\"\\x5d\\x85\\x89\\x7d\\x87\\x7a\\x1f\\x0b\\x9e\\x0a\\x24\\x20\\x0a\\x0b\\x84\\x6b\\x1b\\x6f\\x6d\\x91\\x9a\\x5f\\x1f\\x93\\x74\\x84\\x8c\\x74\\x1b\\x64\\x66\\x80\"\n\"\\x6f\\x52\\x1f\\x0b\\xf7\\x77\\x15\\xf7\\x11\\xfb\\x0d\\x9d\\xdd\\x35\\xde\\xf7\\x0d\\xdf\\x9d\\xde\\xfb\\x45\\xfb\\x0e\\x05\\x0b\\xf8\\x89\\x21\\x0a\\xfb\\x7d\"\n\"\\xfc\\x2b\\x5d\\xf8\\x2b\\x05\\x31\\x06\\xcf\\xfc\\xa4\\x57\\x3a\\x0b\\xf8\\xaf\\xf9\\x79\\x15\\xfb\\x03\\x26\\x60\\x39\\x3d\\x1f\\x34\\x30\\x55\\xfb\\x19\\xfb\"\n\"\\x12\\x1a\\x0b\\x06\\x38\\x1d\\x37\\x06\\x55\\xfb\\x94\\x0b\\x30\\x8f\\x23\\x05\\xa9\\x06\\xbb\\xf3\\x0b\\x46\\x0a\\x77\\x1b\\x81\\x70\\x91\\x94\\x71\\x1f\\x98\"\n\"\\x64\\x7b\\x8f\\x79\\x1b\\x0b\\x15\\xfb\\x13\\xf7\\x0d\\x79\\x39\\xe3\\x38\\xfb\\x0f\\x37\\x79\\x38\\xf7\\x47\\xf7\\x0e\\x05\\x0b\\xf9\\x59\\x15\\x73\\xfb\\x03\"\n\"\\x8a\\xfb\\x1a\\x05\\xb3\\x06\\xc2\\xf7\\x1a\\xa3\\xf7\\x03\\x05\\x0b\\x5c\\x0a\\x86\\x8b\\x8d\\x7d\\x1f\\x7c\\x44\\x05\\x88\\x92\\x0b\\x06\\xce\\xb8\\x9b\\xaf\"\n\"\\xb0\\x1f\\xaf\\xad\\x9f\\xbc\\xbd\\x1a\\xd8\\x52\\xbf\\x39\\x1e\\x0b\\x15\\x70\\x74\\x74\\x71\\x6f\\xa2\\x74\\xa6\\xa6\\xa2\\xa2\\xa6\\xa6\\x74\\xa2\\x70\\x1f\"\n\"\\x0b\\xbb\\x0a\\xf7\\x2f\\x22\\x1d\\x37\\x06\\x75\\x0b\\xa3\\x0a\\x0e\\x22\\x1d\\x2d\\x26\\x1d\\x0b\\x24\\x05\\xf3\\x06\\xf7\\x4b\\xf2\\x15\\x23\\x06\\x0b\\xf7\"\n\"\\x66\\x15\\xfb\\x14\\xfb\\x28\\x05\\xc7\\x06\\xf7\\x49\\xf7\\x28\\x05\\x0e\\x21\\x1d\\x5e\\xfb\\x67\\x05\\xfb\\x84\\x06\\xb7\\xf7\\x67\\x21\\x1d\\x0b\\x15\\xf7\"\n\"\\x78\\x06\\xca\\xba\\x9b\\xaf\\xb8\\x1f\\xca\\xbd\\xaf\\xd7\\xdc\\x1a\\x0b\\xf8\\x56\\xf9\\x4c\\x53\\x1d\\xf7\\xa7\\x06\\x0e\\x08\\x37\\x06\\x39\\x6d\\x54\\x5f\"\n\"\\x43\\x1b\\x0b\\x16\\xdf\\x06\\xd4\\xf7\\xed\\x05\\xd3\\xc8\\xca\\xb1\\xc5\\x1b\\xb7\\xa8\\x0b\\xd2\\x16\\xdf\\x06\\xbe\\xf7\\x83\\x05\\xf7\\x84\\x06\\x59\\xfb\"\n\"\\x83\\x05\\x0b\\xef\\x05\\xce\\x06\\x96\\xc0\\x05\\x48\\x06\\xc5\\xf7\\xa4\\x05\\x5d\\x06\\x0b\\x9f\\xa9\\x1f\\x90\\x07\\x93\\x07\\x0e\\xf7\\xb5\\xbc\\x0a\\xdf\"\n\"\\x06\\x0b\\x38\\x1d\\x37\\x06\\x4c\\xfb\\xbd\\x05\\xfb\\x00\\x74\\x0b\\x62\\x33\\x1d\\x0b\\xf7\\x01\\xfb\\x02\\xf7\\x44\\xf7\\x08\\xed\\xb4\\xdb\\xd9\\x1e\\x0b\"\n\"\\xf7\\x1a\\xf7\\x16\\x1a\\xf7\\x47\\xfb\\x00\\xf7\\x03\\xfb\\x44\\x0b\\x1e\\x87\\xb5\\x89\\xa1\\x97\\x1a\\x9d\\x91\\x95\\x97\\x91\\x0b\\xfb\\x60\\x05\\xfb\\x63\"\n\"\\x27\\x1d\\xf7\\x63\\x06\\x0b\\x15\\xfc\\x77\\x27\\x1d\\xf8\\x78\\x06\\x0e\\x06\\xcb\\xf7\\xc2\\x05\\x2d\\x06\\x0b\\x06\\xad\\xf7\\x31\\x05\\x2e\\x06\\x69\\xfb\"\n\"\\x31\\x05\\x0b\\x06\\xb7\\xf7\\x64\\x05\\x33\\x06\\x5f\\xfb\\x64\\x05\\x0b\\x15\\x35\\xfc\\x25\\x05\\xc7\\x06\\xe1\\xf8\\x25\\x05\\x0b\\x1e\\xa3\\xa0\\x96\\xa0\"\n\"\\x96\\x47\\x0a\\x0b\\xf7\\xed\\x05\\xfb\\x01\\x06\\xfb\\x87\\xfb\\xc2\\x05\\x0b\\xda\\x69\\x1e\\x7d\\xad\\xa6\\x87\\xd0\\x1b\\xf7\\xac\\x0b\\x06\\xf7\\x9d\\xf7\"\n\"\\xc4\\xf7\\x1a\\xfb\\xc4\\x05\\x0b\\x15\\x37\\x06\\xfb\\x03\\xfc\\xa0\\x05\\xdf\\x06\\x0b\\xf8\\xa0\\x15\\x37\\x06\\xfb\\x03\\xfc\\xa0\\x05\\x0b\\xaa\\xa1\\xaa\"\n\"\\xbc\\x1a\\xc3\\x62\\xad\\x4a\\x36\\x0b\\xf8\\x68\\xf8\\x0a\\x15\\xf7\\xd6\\xf7\\xf7\\x05\\x0b\\x15\\x23\\x06\\x75\\x23\\x05\\xf3\\x06\\x0e\\xe9\\x06\\xd4\\xf7\"\n\"\\xed\\x05\\x0b\", 39907\n};\n"
  },
  {
    "path": "src/fonts/NimbusSans-Regular.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData NimbusSans_Regular_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x13\\x4e\\x69\\x6d\\x62\\x75\\x73\\x53\\x61\\x6e\\x73\\x2d\\x52\\x65\\x67\\x75\\x6c\\x61\\x72\\x00\\x01\\x01\\x01\\x2e\"\n\"\\xf9\\xbc\\x00\\xf9\\xbd\\x01\\xf9\\xbe\\x0c\\x00\\xf9\\xbf\\x02\\xf9\\xbf\\x03\\xf8\\x18\\x04\\xfb\\x2b\\x0c\\x03\\xfb\\x66\\xfb\\xbf\\xfa\\x9c\\xfa\\xc7\\x05\"\n\"\\x1c\\x1f\\x97\\x0f\\x1c\\x1f\\xaa\\x11\\xbe\\x1c\\x76\\x2b\\x12\\x01\\xa5\\x02\\x00\\x01\\x00\\x08\\x00\\x0e\\x00\\x13\\x00\\x1d\\x00\\x24\\x00\\x2b\\x00\\x35\"\n\"\\x00\\x39\\x00\\x3f\\x00\\x45\\x00\\x50\\x00\\x5a\\x00\\x5d\\x00\\x63\\x00\\x69\\x00\\x6e\\x00\\x74\\x00\\x7a\\x00\\x84\\x00\\x8b\\x00\\x8e\\x00\\x95\\x00\\x9c\"\n\"\\x00\\xa8\\x00\\xab\\x00\\xb3\\x00\\xb7\\x00\\xbc\\x00\\xc2\\x00\\xcd\\x00\\xd9\\x00\\xe3\\x00\\xe7\\x00\\xf2\\x00\\xf4\\x00\\xfa\\x01\\x04\\x01\\x0b\\x01\\x12\"\n\"\\x01\\x16\\x01\\x22\\x01\\x2b\\x01\\x31\\x01\\x3c\\x01\\x41\\x01\\x4d\\x01\\x53\\x01\\x59\\x01\\x5f\\x01\\x6b\\x01\\x6f\\x01\\x71\\x01\\x77\\x01\\x7d\\x01\\x89\"\n\"\\x01\\x8b\\x01\\x91\\x01\\x9e\\x01\\xa5\\x01\\xaf\\x01\\xb6\\x01\\xc2\\x01\\xcd\\x01\\xd0\\x01\\xd2\\x01\\xd5\\x01\\xdb\\x01\\xe1\\x01\\xed\\x01\\xf0\\x01\\xf6\"\n\"\\x01\\xfe\\x02\\x09\\x02\\x15\\x02\\x1a\\x02\\x1d\\x02\\x21\\x02\\x27\\x02\\x33\\x02\\x38\\x02\\x3e\\x02\\x4b\\x02\\x52\\x02\\x59\\x02\\x60\\x02\\x6f\\x02\\x7b\"\n\"\\x02\\x80\\x02\\x86\\x02\\x8c\\x02\\x97\\x02\\xa0\\x02\\xa6\\x02\\xa8\\x02\\xb3\\x02\\xb9\\x02\\xbf\\x02\\xc9\\x02\\xcd\\x02\\xd3\\x02\\xda\\x02\\xe3\\x02\\xec\"\n\"\\x02\\xf5\\x02\\xfe\\x03\\x07\\x03\\x10\\x03\\x19\\x03\\x22\\x03\\x2b\\x03\\x34\\x03\\x3d\\x03\\x46\\x03\\x4f\\x03\\x58\\x03\\x61\\x03\\x6a\\x03\\x73\\x03\\x7c\"\n\"\\x03\\x85\\x03\\x8e\\x03\\x97\\x03\\xa0\\x03\\xa9\\x03\\xb2\\x03\\xbb\\x03\\xc4\\x03\\xcd\\x03\\xd6\\x03\\xdf\\x03\\xe8\\x03\\xf1\\x03\\xfa\\x04\\x03\\x04\\x0c\"\n\"\\x04\\x15\\x04\\x1e\\x04\\x27\\x04\\x30\\x04\\x39\\x04\\x42\\x04\\x4b\\x04\\x54\\x04\\x5d\\x04\\x66\\x04\\x6f\\x04\\x78\\x04\\x81\\x04\\x8a\\x04\\x93\\x04\\x9c\"\n\"\\x04\\xa5\\x04\\xae\\x04\\xb7\\x04\\xc0\\x04\\xc9\\x04\\xd2\\x04\\xdb\\x04\\xe4\\x04\\xed\\x04\\xf6\\x04\\xff\\x05\\x08\\x05\\x11\\x05\\x1a\\x05\\x23\\x05\\x2c\"\n\"\\x05\\x35\\x05\\x3e\\x05\\x47\\x05\\x50\\x05\\x59\\x05\\x62\\x05\\x6b\\x05\\x74\\x05\\x7d\\x05\\x86\\x05\\x8f\\x05\\x98\\x05\\xa1\\x05\\xaa\\x05\\xb3\\x05\\xbc\"\n\"\\x05\\xc5\\x05\\xce\\x05\\xd7\\x05\\xe0\\x05\\xe9\\x05\\xf2\\x05\\xfb\\x06\\x04\\x06\\x0d\\x06\\x16\\x06\\x1f\\x06\\x28\\x06\\x31\\x06\\x3a\\x06\\x43\\x06\\x4c\"\n\"\\x06\\x55\\x06\\x5a\\x06\\x64\\x06\\x6b\\x06\\x74\\x06\\x7e\\x06\\x85\\x06\\x90\\x06\\x9a\\x06\\xa3\\x06\\xac\\x06\\xb5\\x06\\xbf\\x06\\xc6\\x06\\xcf\\x06\\xdb\"\n\"\\x06\\xdf\\x06\\xe5\\x06\\xeb\\x06\\xf6\\x07\\x00\\x07\\x03\\x07\\x11\\x07\\x15\\x07\\x1b\\x07\\x21\\x07\\x26\\x07\\x2d\\x07\\x3a\\x07\\x40\\x07\\x46\\x07\\x50\"\n\"\\x07\\x57\\x07\\x5e\\x07\\x61\\x07\\x68\\x07\\x6f\\x07\\x7b\\x07\\x86\\x07\\x8f\\x07\\x92\\x07\\x9a\\x07\\xa3\\x07\\xae\\x07\\xb4\\x07\\xb9\\x07\\xbe\\x07\\xc4\"\n\"\\x07\\xcf\\x07\\xdb\\x07\\xe5\\x07\\xf1\\x07\\xf5\\x08\\x00\\x08\\x05\\x08\\x0a\\x08\\x10\\x08\\x12\\x08\\x19\\x08\\x21\\x08\\x29\\x08\\x33\\x08\\x3d\\x08\\x49\"\n\"\\x08\\x55\\x08\\x5c\\x08\\x60\\x08\\x6c\\x08\\x7d\\x08\\x86\\x08\\x8c\\x08\\x97\\x08\\x9c\\x08\\xa8\\x08\\xb4\\x08\\xba\\x08\\xc0\\x08\\xc6\\x08\\xd2\\x08\\xd6\"\n\"\\x08\\xdf\\x08\\xe3\\x08\\xe8\\x08\\xec\\x08\\xf2\\x08\\xfd\\x09\\x0b\\x09\\x11\\x09\\x1c\\x09\\x22\\x09\\x2e\\x09\\x38\\x09\\x40\\x09\\x42\\x09\\x48\\x09\\x55\"\n\"\\x09\\x5c\\x09\\x61\\x09\\x6b\\x09\\x72\\x09\\x7e\\x09\\x88\\x09\\x93\\x09\\x9e\\x09\\xa4\\x09\\xa7\\x09\\xa9\\x09\\xb0\\x09\\xbc\\x09\\xca\\x09\\xcd\\x09\\xda\"\n\"\\x09\\xe0\\x09\\xe7\\x09\\xed\\x09\\xf9\\x0a\\x06\\x0a\\x09\\x0a\\x0f\\x0a\\x17\\x0a\\x22\\x0a\\x2e\\x0a\\x34\\x0a\\x39\\x0a\\x42\\x0a\\x47\\x0a\\x50\\x0a\\x53\"\n\"\\x0a\\x56\\x0a\\x5a\\x0a\\x60\\x0a\\x6c\\x0a\\x71\\x0a\\x76\\x0a\\x7c\\x0a\\x89\\x0a\\x90\\x0a\\x9d\\x0a\\xa4\\x0a\\xab\\x0a\\xb2\\x0a\\xb9\\x0a\\xc0\\x0a\\xc7\"\n\"\\x0a\\xce\\x0a\\xd5\\x0a\\xdc\\x0a\\xe3\\x0a\\xea\\x0a\\xf1\\x0a\\xf8\\x0a\\xff\\x0b\\x06\\x0b\\x0d\\x0b\\x14\\x0b\\x1b\\x0b\\x22\\x0b\\x29\\x0b\\x30\\x0b\\x37\"\n\"\\x0b\\x3e\\x0b\\x45\\x0b\\x4c\\x0b\\x53\\x0b\\x5a\\x0b\\x61\\x0b\\x68\\x0b\\x6f\\x0b\\x76\\x0b\\x7d\\x0b\\x84\\x0b\\x8b\\x0b\\x92\\x0b\\x99\\x0b\\xa0\\x0b\\xa7\"\n\"\\x0b\\xae\\x0b\\xb5\\x0b\\xbc\\x0b\\xc3\\x0b\\xca\\x0b\\xd1\\x0b\\xd8\\x0b\\xdf\\x0b\\xe6\\x0b\\xed\\x0b\\xf4\\x0b\\xfb\\x0c\\x02\\x0c\\x09\\x0c\\x10\\x0c\\x17\"\n\"\\x0c\\x1e\\x0c\\x25\\x0c\\x2c\\x0c\\x33\\x0c\\x3a\\x0c\\x41\\x0c\\x48\\x0c\\x4d\\x0c\\x56\\x0c\\x5d\\x0c\\x64\\x0c\\x73\\x0c\\x87\\x0c\\x93\\x0c\\x98\\x0c\\x9e\"\n\"\\x0c\\xa4\\x0c\\xaf\\x0c\\xb8\\x0c\\xbe\\x0c\\xc0\\x0c\\xcb\\x0c\\xd1\\x0c\\xd7\\x0c\\xe1\\x0c\\xe5\\x0c\\xe9\\x0d\\x1f\\x0d\\x5f\\x0d\\x6a\\x41\\x45\\x61\\x63\"\n\"\\x75\\x74\\x65\\x41\\x62\\x72\\x65\\x76\\x65\\x41\\x6c\\x70\\x68\\x61\\x41\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x41\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x41\"\n\"\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x41\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x42\\x65\\x74\\x61\\x43\\x61\\x63\\x75\\x74\\x65\\x43\\x63\\x61\\x72\\x6f\\x6e\"\n\"\\x43\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x43\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x43\\x68\\x69\\x44\\x63\\x61\\x72\\x6f\\x6e\\x44\\x63\"\n\"\\x72\\x6f\\x61\\x74\\x44\\x65\\x6c\\x74\\x61\\x45\\x62\\x72\\x65\\x76\\x65\\x45\\x63\\x61\\x72\\x6f\\x6e\\x45\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x45\"\n\"\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x45\\x6e\\x67\\x45\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\"\n\"\\x6e\\x6f\\x73\\x45\\x74\\x61\\x45\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x45\\x75\\x72\\x6f\\x47\\x61\\x6d\\x6d\\x61\\x47\\x62\\x72\\x65\\x76\\x65\\x47\\x63\\x69\"\n\"\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x47\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x47\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x48\\x62\"\n\"\\x61\\x72\\x48\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x49\\x4a\\x49\\x62\\x72\\x65\\x76\\x65\\x49\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x49\"\n\"\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x49\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x49\\x6f\\x74\\x61\\x49\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x49\\x6f\\x74\"\n\"\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x49\\x74\\x69\\x6c\\x64\\x65\\x4a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x4b\\x61\\x70\\x70\\x61\\x4b\\x63\\x6f\\x6d\"\n\"\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x61\\x63\\x75\\x74\\x65\\x4c\\x61\\x6d\\x62\\x64\\x61\\x4c\\x63\\x61\\x72\\x6f\\x6e\\x4c\\x63\\x6f\\x6d\\x6d\\x61\"\n\"\\x61\\x63\\x63\\x65\\x6e\\x74\\x4c\\x64\\x6f\\x74\\x4d\\x75\\x4e\\x61\\x63\\x75\\x74\\x65\\x4e\\x63\\x61\\x72\\x6f\\x6e\\x4e\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\"\n\"\\x63\\x65\\x6e\\x74\\x4e\\x75\\x4f\\x62\\x72\\x65\\x76\\x65\\x4f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x4f\\x6d\\x61\\x63\\x72\\x6f\\x6e\"\n\"\\x4f\\x6d\\x65\\x67\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x4f\\x73\\x6c\"\n\"\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x50\\x68\\x69\\x50\\x69\\x50\\x73\\x69\\x52\\x61\\x63\\x75\\x74\\x65\\x52\\x63\\x61\\x72\\x6f\\x6e\\x52\\x63\\x6f\\x6d\"\n\"\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x52\\x68\\x6f\\x53\\x61\\x63\\x75\\x74\\x65\\x53\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x53\\x63\\x69\\x72\\x63\\x75\\x6d\"\n\"\\x66\\x6c\\x65\\x78\\x53\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x53\\x69\\x67\\x6d\\x61\\x54\\x61\\x75\\x54\\x62\\x61\\x72\\x54\\x63\\x61\\x72\"\n\"\\x6f\\x6e\\x54\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x54\\x68\\x65\\x74\\x61\\x55\\x62\\x72\\x65\\x76\\x65\\x55\\x68\\x75\\x6e\\x67\\x61\\x72\"\n\"\\x75\\x6d\\x6c\\x61\\x75\\x74\\x55\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x55\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x55\\x70\\x73\\x69\\x6c\"\n\"\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x55\\x72\\x69\\x6e\\x67\\x55\\x74\\x69\\x6c\\x64\"\n\"\\x65\\x57\\x61\\x63\\x75\\x74\\x65\\x57\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x57\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x57\\x67\\x72\\x61\\x76\"\n\"\\x65\\x58\\x69\\x59\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x59\\x67\\x72\\x61\\x76\\x65\\x5a\\x61\\x63\\x75\\x74\\x65\\x5a\\x64\\x6f\\x74\\x61\\x63\"\n\"\\x63\\x65\\x6e\\x74\\x5a\\x65\\x74\\x61\\x61\\x62\\x72\\x65\\x76\\x65\\x61\\x65\\x61\\x63\\x75\\x74\\x65\\x61\\x66\\x69\\x69\\x30\\x30\\x32\\x30\\x38\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x31\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x31\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x32\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x33\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x32\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\"\n\"\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x32\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x30\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x33\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x34\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x37\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x33\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x33\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x31\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x34\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x34\\x38\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x34\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x35\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x35\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x35\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x35\"\n\"\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x32\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x36\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x38\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x36\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x31\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x30\\x37\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x35\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x37\\x38\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x30\\x37\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x32\\x61\\x66\"\n\"\\x69\\x69\\x31\\x30\\x30\\x38\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\"\n\"\\x38\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x38\\x39\\x61\\x66\\x69\"\n\"\\x69\\x31\\x30\\x30\\x39\\x30\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\"\n\"\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x36\\x61\\x66\\x69\\x69\"\n\"\\x31\\x30\\x30\\x39\\x37\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x30\\x39\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x30\"\n\"\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x31\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x32\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x33\\x61\\x66\\x69\\x69\\x31\"\n\"\\x30\\x31\\x30\\x34\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x36\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x37\\x61\"\n\"\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x38\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x30\\x39\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x31\\x30\\x61\\x66\\x69\\x69\\x31\\x30\"\n\"\\x31\\x34\\x35\\x61\\x66\\x69\\x69\\x31\\x30\\x31\\x39\\x33\\x61\\x66\\x69\\x69\\x31\\x30\\x38\\x34\\x36\\x61\\x66\\x69\\x69\\x36\\x31\\x32\\x34\\x38\\x61\\x66\"\n\"\\x69\\x69\\x36\\x31\\x32\\x38\\x39\\x61\\x66\\x69\\x69\\x36\\x31\\x33\\x35\\x32\\x61\\x6c\\x70\\x68\\x61\\x61\\x6c\\x70\\x68\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x61\"\n\"\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\\x61\\x6e\\x67\\x6c\\x65\\x72\\x69\\x67\\x68\\x74\\x61\\x6f\\x67\\x6f\\x6e\\x65\\x6b\"\n\"\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x69\\x6e\\x67\\x61\\x63\\x75\\x74\\x65\\x61\\x72\\x72\\x6f\\x77\\x62\\x6f\\x74\\x68\\x61\\x72\"\n\"\\x72\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\\x77\\x72\\x69\\x67\\x68\\x74\\x61\\x72\\x72\\x6f\\x77\\x75\"\n\"\\x70\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x64\\x6e\\x62\\x73\\x65\\x62\\x65\\x74\\x61\\x63\\x61\\x63\\x75\\x74\\x65\"\n\"\\x63\\x63\\x61\\x72\\x6f\\x6e\\x63\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x63\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x63\\x68\\x69\\x63\\x69\"\n\"\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\\x63\\x6c\\x75\\x62\\x64\\x63\\x61\\x72\\x6f\\x6e\\x64\\x63\\x72\\x6f\\x61\\x74\\x64\\x65\\x6c\\x74\"\n\"\\x61\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x62\\x72\\x65\\x76\\x65\\x65\\x63\\x61\\x72\\x6f\"\n\"\\x6e\\x65\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x65\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x65\\x6e\\x67\\x65\\x6f\\x67\\x6f\"\n\"\\x6e\\x65\\x6b\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x65\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x71\\x75\\x69\\x76\\x61\\x6c\\x65\\x6e\\x63\"\n\"\\x65\\x65\\x73\\x74\\x69\\x6d\\x61\\x74\\x65\\x64\\x65\\x74\\x61\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x65\\x78\\x63\\x6c\\x61\\x6d\\x64\\x62\\x6c\\x65\\x78\"\n\"\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x66\\x65\\x6d\\x61\\x6c\\x65\\x66\\x72\\x61\\x6e\\x63\\x67\\x61\\x6d\\x6d\\x61\\x67\\x62\\x72\\x65\\x76\\x65\\x67\"\n\"\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x67\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x67\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\"\n\"\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x68\\x62\\x61\\x72\\x68\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x68\\x65\\x61\\x72\\x74\"\n\"\\x68\\x6f\\x75\\x73\\x65\\x69\\x62\\x72\\x65\\x76\\x65\\x69\\x6a\\x69\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x69\\x6e\\x66\\x69\\x6e\\x69\\x74\\x79\\x69\\x6e\\x74\\x65\"\n\"\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x74\\x70\\x69\\x6e\\x74\\x65\\x72\\x73\\x65\\x63\"\n\"\\x74\\x69\\x6f\\x6e\\x69\\x6e\\x76\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x69\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x69\\x6f\\x74\\x61\\x69\\x6f\\x74\\x61\\x64\"\n\"\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x69\\x6f\\x74\\x61\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\\x6f\\x73\\x69\\x6f\\x74\\x61\\x74\\x6f\\x6e\\x6f\"\n\"\\x73\\x69\\x74\\x69\\x6c\\x64\\x65\\x6a\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x6b\\x61\\x70\\x70\\x61\\x6b\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\"\n\"\\x65\\x6e\\x74\\x6b\\x67\\x72\\x65\\x65\\x6e\\x6c\\x61\\x6e\\x64\\x69\\x63\\x6c\\x61\\x63\\x75\\x74\\x65\\x6c\\x61\\x6d\\x62\\x64\\x61\\x6c\\x63\\x61\\x72\\x6f\"\n\"\\x6e\\x6c\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6c\\x64\\x6f\\x74\\x6c\\x65\\x73\\x73\\x65\\x71\\x75\\x61\\x6c\\x6c\\x69\\x72\\x61\\x6c\\x6f\"\n\"\\x6e\\x67\\x73\\x6d\\x61\\x6c\\x65\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\\x6f\\x74\\x65\\x6d\\x75\\x73\\x69\\x63\\x61\\x6c\\x6e\"\n\"\\x6f\\x74\\x65\\x64\\x62\\x6c\\x6e\\x61\\x63\\x75\\x74\\x65\\x6e\\x61\\x70\\x6f\\x73\\x74\\x72\\x6f\\x70\\x68\\x65\\x6e\\x63\\x61\\x72\\x6f\\x6e\\x6e\\x63\\x6f\"\n\"\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x71\\x75\\x61\\x6c\\x6e\\x75\\x6f\\x62\\x72\"\n\"\\x65\\x76\\x65\\x6f\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\\x6c\\x61\\x75\\x74\\x6f\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x65\\x67\\x61\\x6f\\x6d\\x65\\x67\"\n\"\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x6f\\x72\\x74\\x68\\x6f\\x67\\x6f\"\n\"\\x6e\\x61\\x6c\\x6f\\x73\\x6c\\x61\\x73\\x68\\x61\\x63\\x75\\x74\\x65\\x70\\x61\\x72\\x74\\x69\\x61\\x6c\\x64\\x69\\x66\\x66\\x70\\x65\\x73\\x65\\x74\\x61\\x70\"\n\"\\x68\\x69\\x70\\x69\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x62\\x73\\x65\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x70\"\n\"\\x65\\x72\\x73\\x65\\x74\\x70\\x73\\x69\\x71\\x75\\x6f\\x74\\x65\\x72\\x65\\x76\\x65\\x72\\x73\\x65\\x64\\x72\\x61\\x63\\x75\\x74\\x65\\x72\\x61\\x64\\x69\\x63\"\n\"\\x61\\x6c\\x72\\x63\\x61\\x72\\x6f\\x6e\\x72\\x63\\x6f\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x72\\x65\\x76\\x6c\\x6f\\x67\\x69\\x63\\x61\\x6c\\x6e\\x6f\"\n\"\\x74\\x72\\x68\\x6f\\x73\\x61\\x63\\x75\\x74\\x65\\x73\\x63\\x65\\x64\\x69\\x6c\\x6c\\x61\\x73\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x73\\x63\\x6f\"\n\"\\x6d\\x6d\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x73\\x65\\x63\\x6f\\x6e\\x64\\x73\\x69\\x67\\x6d\\x61\\x73\\x6d\\x69\\x6c\\x65\\x66\\x61\\x63\\x65\\x73\\x70\\x61\"\n\"\\x64\\x65\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x73\\x75\\x6e\\x74\\x61\\x75\\x74\\x62\\x61\\x72\\x74\\x63\\x61\\x72\\x6f\\x6e\\x74\\x63\\x6f\\x6d\\x6d\"\n\"\\x61\\x61\\x63\\x63\\x65\\x6e\\x74\\x74\\x68\\x65\\x74\\x61\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x62\\x72\\x65\\x76\\x65\\x75\\x68\\x75\\x6e\\x67\\x61\\x72\\x75\\x6d\"\n\"\\x6c\\x61\\x75\\x74\\x75\\x6d\\x61\\x63\\x72\\x6f\\x6e\\x75\\x6e\\x64\\x65\\x72\\x73\\x63\\x6f\\x72\\x65\\x64\\x62\\x6c\\x75\\x6e\\x69\\x30\\x30\\x41\\x30\\x75\"\n\"\\x6e\\x69\\x30\\x30\\x41\\x44\\x75\\x6e\\x69\\x30\\x32\\x31\\x41\\x75\\x6e\\x69\\x30\\x32\\x31\\x42\\x75\\x6e\\x69\\x30\\x32\\x43\\x39\\x75\\x6e\\x69\\x30\\x33\"\n\"\\x38\\x37\\x75\\x6e\\x69\\x30\\x33\\x39\\x34\\x75\\x6e\\x69\\x30\\x33\\x41\\x39\\x75\\x6e\\x69\\x30\\x33\\x42\\x43\\x75\\x6e\\x69\\x30\\x33\\x43\\x32\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x30\\x30\\x75\\x6e\\x69\\x30\\x34\\x30\\x44\\x75\\x6e\\x69\\x30\\x34\\x35\\x30\\x75\\x6e\\x69\\x30\\x34\\x35\\x44\\x75\\x6e\\x69\\x30\\x34\\x39\"\n\"\\x32\\x75\\x6e\\x69\\x30\\x34\\x39\\x33\\x75\\x6e\\x69\\x30\\x34\\x39\\x36\\x75\\x6e\\x69\\x30\\x34\\x39\\x37\\x75\\x6e\\x69\\x30\\x34\\x39\\x38\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x39\\x39\\x75\\x6e\\x69\\x30\\x34\\x39\\x41\\x75\\x6e\\x69\\x30\\x34\\x39\\x42\\x75\\x6e\\x69\\x30\\x34\\x39\\x43\\x75\\x6e\\x69\\x30\\x34\\x39\\x44\"\n\"\\x75\\x6e\\x69\\x30\\x34\\x41\\x30\\x75\\x6e\\x69\\x30\\x34\\x41\\x31\\x75\\x6e\\x69\\x30\\x34\\x41\\x32\\x75\\x6e\\x69\\x30\\x34\\x41\\x33\\x75\\x6e\\x69\\x30\"\n\"\\x34\\x41\\x41\\x75\\x6e\\x69\\x30\\x34\\x41\\x42\\x75\\x6e\\x69\\x30\\x34\\x41\\x45\\x75\\x6e\\x69\\x30\\x34\\x41\\x46\\x75\\x6e\\x69\\x30\\x34\\x42\\x30\\x75\"\n\"\\x6e\\x69\\x30\\x34\\x42\\x31\\x75\\x6e\\x69\\x30\\x34\\x42\\x32\\x75\\x6e\\x69\\x30\\x34\\x42\\x33\\x75\\x6e\\x69\\x30\\x34\\x42\\x36\\x75\\x6e\\x69\\x30\\x34\"\n\"\\x42\\x37\\x75\\x6e\\x69\\x30\\x34\\x42\\x38\\x75\\x6e\\x69\\x30\\x34\\x42\\x39\\x75\\x6e\\x69\\x30\\x34\\x42\\x41\\x75\\x6e\\x69\\x30\\x34\\x42\\x42\\x75\\x6e\"\n\"\\x69\\x30\\x34\\x43\\x30\\x75\\x6e\\x69\\x30\\x34\\x43\\x42\\x75\\x6e\\x69\\x30\\x34\\x43\\x43\\x75\\x6e\\x69\\x30\\x34\\x44\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\"\n\"\\x32\\x75\\x6e\\x69\\x30\\x34\\x45\\x33\\x75\\x6e\\x69\\x30\\x34\\x45\\x38\\x75\\x6e\\x69\\x30\\x34\\x45\\x39\\x75\\x6e\\x69\\x30\\x34\\x45\\x45\\x75\\x6e\\x69\"\n\"\\x30\\x34\\x45\\x46\\x75\\x6e\\x69\\x32\\x30\\x33\\x45\\x75\\x6e\\x69\\x32\\x30\\x41\\x46\\x75\\x6e\\x69\\x32\\x31\\x32\\x36\\x75\\x6e\\x69\\x32\\x32\\x31\\x35\"\n\"\\x75\\x6e\\x69\\x32\\x32\\x31\\x39\\x75\\x6e\\x69\\x32\\x32\\x32\\x37\\x75\\x6e\\x69\\x32\\x32\\x32\\x38\\x75\\x6e\\x69\\x32\\x32\\x39\\x35\\x75\\x6e\\x69\\x32\"\n\"\\x35\\x41\\x31\\x75\\x6e\\x69\\x6f\\x6e\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x75\\x6f\\x67\\x6f\\x6e\\x65\\x6b\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x75\"\n\"\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x74\\x6f\\x6e\"\n\"\\x6f\\x73\\x75\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x74\\x6f\\x6e\\x6f\\x73\\x75\\x72\\x69\\x6e\\x67\\x75\\x74\\x69\\x6c\\x64\\x65\\x77\\x61\\x63\\x75\\x74\\x65\\x77\"\n\"\\x63\\x69\\x72\\x63\\x75\\x6d\\x66\\x6c\\x65\\x78\\x77\\x64\\x69\\x65\\x72\\x65\\x73\\x69\\x73\\x77\\x67\\x72\\x61\\x76\\x65\\x78\\x69\\x79\\x63\\x69\\x72\\x63\"\n\"\\x75\\x6d\\x66\\x6c\\x65\\x78\\x79\\x67\\x72\\x61\\x76\\x65\\x7a\\x61\\x63\\x75\\x74\\x65\\x7a\\x64\\x6f\\x74\\x61\\x63\\x63\\x65\\x6e\\x74\\x7a\\x65\\x74\\x61\"\n\"\\x31\\x2e\\x30\\x30\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\"\n\"\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x43\\x6f\\x70\\x79\\x72\\x69\"\n\"\\x67\\x68\\x74\\x20\\x28\\x55\\x52\\x57\\x29\\x2b\\x2b\\x2c\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x34\\x20\\x62\\x79\\x20\\x28\\x55\"\n\"\\x52\\x57\\x29\\x2b\\x2b\\x20\\x44\\x65\\x73\\x69\\x67\\x6e\\x20\\x26\\x20\\x44\\x65\\x76\\x65\\x6c\\x6f\\x70\\x6d\\x65\\x6e\\x74\\x4e\\x69\\x6d\\x62\\x75\\x73\"\n\"\\x20\\x53\\x61\\x6e\\x73\\x00\\xa2\\x02\\x00\\x01\\x00\\x05\\x00\\x09\\x00\\x11\\x00\\x1e\\x00\\x21\\x00\\x75\\x00\\x9a\\x00\\xa6\\x00\\xae\\x00\\xeb\\x00\\xf0\"\n\"\\x00\\xf3\\x00\\xfb\\x01\\x13\\x01\\x1e\\x01\\x23\\x01\\x28\\x01\\x49\\x01\\xa2\\x01\\xc9\\x01\\xfa\\x02\\x20\\x02\\x3c\\x02\\x4f\\x02\\x53\\x02\\x57\\x02\\x65\"\n\"\\x02\\x6b\\x02\\x70\\x02\\x8f\\x02\\xac\\x02\\xc8\\x02\\xcb\\x02\\xcf\\x02\\xd4\\x02\\xdf\\x02\\xe9\\x02\\xf7\\x03\\x0b\\x03\\x11\\x03\\x19\\x03\\x1e\\x03\\x51\"\n\"\\x03\\x77\\x03\\xa3\\x03\\xb0\\x03\\xcd\\x03\\xd1\\x03\\xe2\\x03\\xf6\\x04\\x09\\x04\\x14\\x04\\x1d\\x04\\x2d\\x04\\x34\\x04\\x3c\\x04\\x42\\x04\\x49\\x04\\x50\"\n\"\\x04\\x57\\x04\\x61\\x04\\x6a\\x04\\x70\\x04\\x76\\x04\\x7c\\x04\\xfc\\x05\\x61\\x05\\xc4\\x05\\xd6\\x06\\x08\\x06\\x4f\\x06\\x9a\\x06\\x9d\\x06\\xdd\\x07\\x15\"\n\"\\x07\\x32\\x07\\x49\\x07\\x66\\x07\\x98\\x07\\xc8\\x07\\xf5\\x08\\x21\\x08\\x4e\\x08\\x5d\\x08\\x89\\x08\\xa8\\x08\\xcf\\x08\\xd3\\x08\\xea\\x08\\xf4\\x08\\xfd\"\n\"\\x09\\x05\\x09\\x0d\\x09\\x16\\x09\\x39\\x09\\x5a\\x09\\x6e\\x09\\x8f\\x09\\xaf\\x09\\xbe\\x09\\xdc\\x09\\xf9\\x0a\\x16\\x0a\\x31\\x0a\\x48\\x0a\\x63\\x0a\\x7c\"\n\"\\x0a\\x96\\x0a\\xa5\\x0a\\xaa\\x0a\\xb5\\x0a\\xbe\\x0a\\xd5\\x0a\\xdc\\x0a\\xf3\\x0b\\x09\\x0b\\x1f\\x0b\\x35\\x0b\\x42\\x0b\\x57\\x0b\\x64\\x0b\\x70\\x0b\\x81\"\n\"\\x0b\\x8c\\x0b\\x9e\\x0b\\xb0\\x0b\\xc0\\x0b\\xd1\\x0b\\xe2\\x0b\\xf2\\x0c\\x00\\x0c\\x0f\\x0c\\x1e\\x0c\\x27\\x0c\\x35\\x0c\\x43\\x0c\\x4f\\x0c\\x5c\\x0c\\x69\"\n\"\\x0c\\x76\\x0c\\x7d\\x0c\\x88\\x0c\\x94\\x0c\\xa0\\x0c\\xac\\x0c\\xb8\\x0c\\xc2\\x0c\\xcd\\x0c\\xd8\\x0c\\xe3\\x0c\\xe8\\x0c\\xef\\x0c\\xf9\\x0d\\x03\\x0d\\x0d\"\n\"\\x0d\\x17\\x0d\\x21\\x0d\\x29\\x0d\\x31\\x0d\\x3a\\x0d\\x43\\x0d\\x4a\\xf9\\x6d\\x15\\x0b\\x15\\x2b\\xac\\x1d\\x58\\x1d\\xf7\\x36\\xf2\\x58\\x1d\\x0e\\xaf\\x1d\"\n\"\\x07\\xc7\\x89\\xb2\\xba\\x8c\\xd7\\x08\\xf2\\x07\\x0e\\x3b\\x1d\\x0e\\xf8\\xab\\x9f\\x1d\\xe8\\x47\\xbd\\xfb\\x15\\x3e\\x4e\\x75\\x64\\x67\\x1e\\x73\\x70\\x81\"\n\"\\x6d\\x89\\x57\\x08\\xdf\\x06\\xcb\\x92\\xb1\\xa8\\xd9\\x1b\\xd7\\xb4\\x6f\\x59\\x1f\\x75\\x07\\x8a\\x67\\x79\\x7e\\x47\\x82\\xfb\\x0a\\x7c\\x79\\x87\\x6b\\x7e\"\n\"\\x08\\x4e\\x71\\x6c\\x5d\\x47\\x1a\\x2c\\xcd\\x4f\\xf5\\xcd\\xc0\\xa2\\xc1\\xc6\\x1e\\x55\\x91\\xa5\\x74\\xc1\\x1b\\x9d\\x96\\x8d\\x92\\xa7\\x1f\\xfb\\x26\\x81\"\n\"\\x1d\\x0b\\xf8\\x76\\x16\\xf8\\xa0\\x38\\xfb\\xbd\\x07\\x20\\x53\\x45\\x34\\x49\\x61\\xb3\\xca\\x1e\\xf8\\x07\\x38\\xfc\\x28\\x07\\x34\\xcc\\x53\\xf1\\xd8\\xbc\"\n\"\\xa6\\xd0\\xbc\\x1e\\x42\\x07\\x0b\\x79\\x1d\\xdc\\x2b\\x05\\xca\\x06\\x2b\\xf7\\x2a\\x05\\x0e\\x15\\xfb\\xa6\\x45\\xf7\\xa6\\x06\\x0e\\xf8\\x95\\xf7\\x7e\\x15\"\n\"\\xdb\\x85\\xbb\\x7c\\xb2\\x1e\\xe1\\x69\\x3b\\x5d\\x1d\\xfb\\x41\\xfb\\x41\\xe5\\x22\\xf7\\x28\\xf7\\x0c\\xde\\xcf\\xf7\\x06\\xa0\\x1f\\x37\\x06\\x46\\x74\\x5c\"\n\"\\x67\\x48\\x1b\\x56\\x5e\\xa3\\xb7\\x6f\\x1f\\x77\\xa9\\x84\\xa9\\x8a\\xbf\\x08\\x8d\\xcf\\x5c\\x1d\\x49\\x2d\\x1f\\x0b\\xf7\\xa4\\x3d\\x1d\\x0b\\x99\\x1d\\x0e\"\n\"\\x20\\x1d\\x2d\\xfd\\x6d\\xe9\\x06\\x0b\\xf8\\xbc\\x20\\x1d\\x88\\x1d\\xfb\\x28\\xf5\\x2f\\xf7\\x41\\xf7\\x3f\\xf7\\x02\\xe9\\xf7\\x26\\x1e\\xf8\\x94\\x07\\x0b\"\n\"\\xf7\\x45\\xf8\\xa0\\x15\\x38\\xfc\\xa0\\xde\\x06\\x0b\\xf9\\x59\\x45\\x1d\\x0b\\x37\\xfc\\xa0\\xdf\\x0b\\xf8\\x4a\\xf8\\x0e\\x15\\xf2\\x8a\\x47\\xc5\\x4c\\x1d\"\n\"\\xfb\\x0d\\x8f\\xcf\\x51\\xf7\\x1d\\x1b\\xf7\\x18\\xdf\\xcc\\xf0\\xd9\\x5f\\xb6\\x23\\xa4\\x1f\\x51\\x1d\\x0b\\xf9\\x59\\xf8\\x15\\x15\\xfb\\xc4\\x39\\xf7\\x72\"\n\"\\x77\\x06\\xfb\\x16\\x2b\\x2d\\xfb\\x19\\x41\\x48\\xa6\\xba\\x60\\x1e\\x5b\\xbf\\x6e\\xe2\\xe5\\x1a\\xf7\\x47\\xf1\\xf7\\x0a\\xf7\\x2e\\xf7\\x03\\xdb\\x52\\x2d\"\n\"\\x9f\\x1e\\xea\\x06\\xf7\\x28\\x71\\xfb\\x04\\xe0\\xfb\\x3b\\x1b\\x32\\x43\\x74\\x5c\\x52\\x1f\\x36\\x45\\x5c\\xfb\\x05\\xfb\\x17\\x1a\\xfb\\x74\\xf7\\x1d\\xfb\"\n\"\\x30\\xf7\\x59\\xee\\xd9\\xb0\\xda\\xd3\\x1e\\xa2\\x2a\\x05\\xc6\\x06\\x0b\\xf8\\x6b\\xf7\\xf0\\x15\\x96\\x1d\\xfb\\x3d\\xe5\\x20\\xf7\\x22\\xf7\\x11\\xda\\xd6\"\n\"\\xf7\\x14\\x95\\x1f\\x37\\x06\\x37\\x7d\\x60\\x61\\x44\\x1b\\x2f\\x54\\xd6\\xf7\\x10\\xf7\\x17\\xb8\\x1d\\x0b\\xf9\\x7c\\x16\\xf7\\x4d\\xf9\\x6d\\x05\\x23\\x06\"\n\"\\xfb\\x1a\\xfc\\xe4\\xfb\\x3a\\xf8\\xe4\\x05\\x27\\x06\\xfb\\x36\\xfc\\xe4\\xfb\\x1d\\xf8\\xe4\\x05\\x23\\x06\\xf7\\x4f\\xfd\\x6d\\x05\\xf1\\x06\\xf7\\x37\\xf8\"\n\"\\xeb\\xf7\\x3c\\xfc\\xeb\\x05\\x0b\\xd1\\xf8\\xa0\\x15\\xfc\\xa0\\xdf\\xf7\\xb5\\x07\\xf6\\xc3\\xd1\\xe1\\xcd\\xb5\\x63\\x4c\\x1e\\xfb\\xff\\xde\\xf8\\x20\\x07\"\n\"\\xe2\\x4a\\xc3\\x26\\x3d\\x59\\x6d\\x42\\x5d\\x1e\\xe3\\x07\\x0b\\xf9\\x1a\\x20\\x1d\\x33\\xfc\\xe8\\x06\\xfc\\x11\\xf8\\xe8\\x05\\x26\\xfd\\x6d\\xe3\\xf8\\xe3\"\n\"\\x06\\xf8\\x0d\\xfc\\xe3\\x05\\xf4\\x06\\x0b\\x15\\x2b\\xfb\\x2a\\x05\\xcc\\x06\\xda\\xeb\\xdb\\x2b\\x05\\xca\\x06\\x2b\\xf7\\x2a\\x05\\x0e\\xfa\\x26\\x22\\x1d\"\n\"\\xf7\\x6c\\x21\\x1d\\xf7\\x41\\x20\\x1d\\x2e\\xfd\\x6d\\xf8\\x59\\xdd\\xfb\\xfc\\x06\\x0b\\x15\\x23\\x23\\xf3\\x06\\x0b\\xf7\\x29\\xf7\\x28\\x0b\\xf8\\xaf\\x15\"\n\"\\xfb\\x28\\x33\\x22\\xfb\\x44\\xfb\\x45\\xe3\\x23\\x3c\\x1d\\xe4\\xf4\\xf7\\x40\\xf7\\x4a\\x35\\xf2\\xfb\\x2c\\x1f\\x8c\\x3e\\x90\\x1d\\x0b\\xf8\\x4f\\xf8\\xa0\"\n\"\\x15\\xfc\\x1b\\x42\\xf7\\xb8\\x06\\xfb\\xcd\\xfc\\x0c\\x05\\x40\\xf8\\x3e\\xd4\\xfb\\xd9\\x07\\xf7\\xcb\\xf8\\x0d\\x05\\x0b\\xdc\\x16\\xdf\\xbb\\x06\\xf7\\x7a\"\n\"\\xf7\\xca\\x05\\xfb\\xfa\\xdf\\xf8\\xa0\\x37\\x5f\\x07\\xfb\\x7a\\xfb\\xc7\\x05\\xf7\\xf3\\x37\\x07\\x0b\\x90\\x1d\\x0e\\xf9\\x78\\x21\\x1d\\xb9\\x1d\\x3a\\x54\"\n\"\\x1d\\xf7\\x2c\\xf9\\x6d\\x15\\x37\\xfd\\x6d\\xdf\\x06\\x0b\\xf7\\x55\\x20\\x1d\\x2e\\xfd\\x6d\\xe8\\x06\\x0b\\x15\\xfc\\x58\\xfd\\x6d\\x05\\xc5\\x06\\xf8\\x58\"\n\"\\xf9\\x6d\\x05\\x0b\\xd0\\x07\\x8f\\x78\\x80\\x8c\\x7a\\x1b\\x3e\\x5d\\x5f\\x40\\x1f\\x32\\x45\\x47\\xd1\\xfc\\x5c\\x0b\\xd0\\x49\\x1d\\x37\\x06\\x0b\\xf8\\x2c\"\n\"\\x05\\x32\\x06\\xf7\\x45\\x0b\\x16\\xdf\\xf8\\xa0\\x0b\\x1b\\xfb\\x34\\x28\\x39\\xfb\\x18\\x32\\xba\\x53\\xeb\\x72\\x1f\\xf7\\x49\\x5b\\x05\\xe8\\x73\\xb4\\x66\"\n\"\\x52\\x1a\\x64\\x76\\x63\\x6c\\x75\\x1e\\x76\\x6e\\x5d\\x81\\x50\\x1b\\x3b\\x56\\x9e\\xb5\\x68\\x1f\\x70\\xab\\x7f\\xae\\x8c\\xb8\\x08\\x33\\x06\\x0b\\xf7\\x92\"\n\"\\xf8\\xa0\\x15\\xbc\\x1d\\xfc\\x20\\x06\\x55\\xaf\\x6e\\xcc\\xa1\\x9d\\x8d\\x90\\xa7\\x1e\\xd1\\x07\\x88\\x7f\\x80\\x8a\\x7a\\x1b\\x67\\x81\\x95\\xb0\\x1f\\xf7\"\n\"\\xfb\\xe1\\x07\\x0b\\xfb\\x0d\\x1b\\xfb\\x0e\\x3c\\x4c\\x2a\\x39\\xb5\\x64\\xf7\\x10\\x6d\\x1f\\xd9\\x78\\x05\\xc5\\x7d\\xa2\\x76\\x66\\x1a\\x59\\x5a\\x6a\\x42\"\n\"\\x5e\\x65\\x98\\xa1\\x76\\x1e\\x7e\\x9a\\x85\\x9a\\x86\\xb0\\x08\\x33\\x06\\x0b\\x91\\x1d\\x63\\x05\\x6f\\xc9\\xa3\\x85\\xb2\\x1b\\xd7\\xba\\x0b\\x77\\x08\\x66\"\n\"\\xa6\\xb7\\x77\\xc4\\x1b\\xe8\\xbf\\xb9\\xe4\\x92\\x1f\\x50\\x06\\x61\\x87\\x6a\\x73\\x55\\x1b\\x52\\x6d\\xa1\\xb7\\x86\\x1f\\x0e\\x16\\xa0\\x1d\\x0b\\xfb\\x8d\"\n\"\\x05\\xed\\x06\\xfb\\x3b\\xf7\\xb2\\xf7\\x10\\xf7\\x82\\x05\\x2a\\x06\\x0b\\x3b\\x9e\\x05\\x47\\x9b\\x6e\\xa1\\xb0\\x1a\\xbc\\xb6\\xa9\\xcf\\xce\\xaf\\x6e\\x54\"\n\"\\x8d\\x1e\\x0b\\x1b\\xa8\\x9c\\x7d\\x74\\x71\\x74\\x78\\x6c\\x71\\x79\\x91\\xa2\\x5e\\x1f\\x82\\x8f\\x76\\x0b\\x80\\x79\\x1b\\x7f\\x71\\x92\\x95\\x72\\x1f\\x9c\"\n\"\\x0b\\xeb\\x05\\x4c\\x06\\xeb\\xfb\\x2a\\x05\\x0e\\xf7\\xb2\\x15\\xf7\\xa6\\xf8\\x4f\\x05\\xfb\\x03\\x06\\xfb\\x64\\xfb\\xf7\\x0b\\xfb\\x5d\\x05\\x24\\xf7\\x5d\"\n\"\\x0b\\xc3\\x1b\\xc1\\xb2\\x62\\x53\\x1f\\x0b\\x15\\x23\\x24\\xf3\\x06\\x0b\\xc1\\x5c\\x3a\\x3b\\x55\\x5b\\x0b\\xf8\\x94\\x2e\\xfc\\x94\\x07\\x0b\\xa0\\x71\\xb5\"\n\"\\x7b\\x1e\\x83\\x0b\\x15\\xec\\x92\\xc6\\xca\\xdf\\x1b\\xe0\\xc6\\x0b\\xbf\\x29\\x1b\\xfb\\x26\\x2d\\xfb\\x03\\x0b\\x06\\x38\\x68\\x84\\x72\\x0b\\xfb\\x34\\xdf\"\n\"\\xf7\\x7e\\x0b\\xac\\x90\\x90\\xa3\\x1f\\x0b\\x15\\xab\\x5e\\x53\\xa8\\x78\\x1b\\x81\\x84\\x83\\x81\\x84\\x8d\\x87\\x94\\x83\\x1f\\xc6\\x5a\\xa0\\x70\\xc4\\x2c\"\n\"\\x08\\x7a\\x94\\x8e\\x89\\x95\\x1b\\x92\\x90\\x91\\xa0\\x97\\x1f\\xb5\\xd4\\xad\\xb7\\xb9\\xb2\\x08\\x9c\\x99\\x8e\\x8f\\x93\\x1a\\x95\\x84\\x93\\x82\\x79\\x40\"\n\"\\x66\\x73\\x6d\\x1e\\xf8\\x3e\\x07\\x70\\xac\\xd2\\x67\\x9f\\x1b\\x93\\x92\\x93\\x95\\x93\\x88\\x8e\\x7a\\x9a\\x1f\\x5c\\xb3\\x6a\\xb5\\x61\\xd5\\x08\\x9f\\x80\"\n\"\\x85\\x92\\x84\\x1b\\x83\\x86\\x87\\x83\\x86\\x1f\\x54\\x2d\\x73\\x6c\\x58\\x5f\\x08\\x76\\x79\\x8a\\x8a\\x82\\x1a\\x81\\x92\\x83\\x94\\x91\\xab\\x97\\x93\\x9b\"\n\"\\x1e\\xa0\\x96\\x9d\\x96\\xa7\\xa0\\x08\\x0e\\xf7\\xb2\\xf7\\xc4\\x15\\x4c\\x68\\x91\\x98\\x72\\x1f\\x70\\x9a\\x7c\\xa1\\xa3\\x1a\\xb9\\xb8\\xac\\xca\\xce\\xb0\"\n\"\\x6e\\x4a\\x9c\\x1e\\xdc\\x06\\x84\\xbc\\x81\\xa3\\x72\\xa7\\x08\\xb8\\x64\\x52\\xa3\\x47\\x1b\\xfb\\x03\\x3b\\x4f\\x39\\x58\\xa7\\x5f\\xc0\\x6f\\x1f\\x4f\\x76\"\n\"\\x68\\x5c\\x4d\\x1a\\x2a\\xdf\\x45\\xf7\\x09\\xd4\\xc5\\xa4\\xbd\\xb7\\x1e\\xa7\\xac\\x99\\xa8\\x97\\xc1\\x08\\x38\\x06\\x3a\\x74\\x62\\x69\\x40\\x1b\\x43\\x5a\"\n\"\\xb2\\xc4\\xc6\\xbc\\xa6\\xf7\\x01\\x8e\\x94\\x8b\\x8a\\x94\\x1f\\x0b\\xf7\\xf0\\xf8\\x21\\x15\\xfb\\x5c\\x07\\x57\\x89\\x78\\x83\\x74\\x1e\\x6a\\x80\\x70\\x78\"\n\"\\x6b\\x1b\\x52\\x67\\xcf\\xf7\\x00\\xf7\\x09\\xb1\\xea\\xdb\\xe0\\x1f\\x29\\x06\\x45\\x3e\\x66\\x27\\xfb\\x07\\x1a\\xfb\\x30\\xce\\x27\\xf3\\xc7\\xad\\xa2\\xce\"\n\"\\xb0\\x1e\\x4c\\xab\\xb1\\x71\\xc6\\x1b\\xf4\\xcf\\xef\\xf7\\x2f\\xf7\\x07\\x66\\xf0\\x45\\xd7\\x1f\\x29\\x06\\xdb\\x37\\xb1\\x2c\\xfb\\x09\\x1a\\x20\\x66\\x46\"\n\"\\x52\\x6a\\x72\\x9e\\xab\\x80\\x1e\\x83\\xa2\\x89\\x9f\\xbe\\x1a\\xf7\\x5c\\x07\\x0b\\x29\\x1d\\xfb\\x40\\xf8\\x4a\\x15\\xfb\\x04\\x06\\xf7\\x29\\xfb\\x28\\x05\"\n\"\\xc7\\x06\\x0e\\xf7\\x96\\xf8\\xa0\\x15\\x34\\xdd\\x06\\xae\\x9e\\x9d\\xb2\\x92\\x8e\\x8b\\x8a\\x9e\\x1e\\x46\\x1d\\xde\\xf8\\x5c\\xe2\\x07\\xf7\\xaa\\xcf\\x15\"\n\"\\x34\\xdd\\x06\\xae\\x9e\\x9d\\xb2\\x92\\x8e\\x8b\\x8a\\x9e\\x1e\\x46\\x1d\\xde\\xf8\\x5c\\xe2\\x07\\x0b\\x15\\xb7\\xa6\\x99\\xa0\\xb3\\x1a\\xce\\x57\\xb9\\x3f\"\n\"\\x40\\x56\\x5d\\x48\\x63\\x99\\x76\\xb7\\x70\\x1e\\x5a\\x73\\x73\\x68\\x5c\\x1a\\x3d\\xc5\\x55\\xe0\\xdf\\xc6\\xc1\\xd9\\xba\\x73\\xae\\x5a\\xa3\\x1e\\x45\\xf7\"\n\"\\x2e\\x15\\xb8\\xa4\\x1d\\xb8\\x1f\\xfb\\x45\\x04\\xc0\\xaf\\x69\\x59\\x58\\x67\\x6a\\x55\\x57\\x67\\xad\\xbd\\xbd\\xaf\\xad\\xc0\\x1f\\x0b\\x15\\x94\\x06\\xa2\"\n\"\\x06\\xc9\\xa9\\x73\\x5b\\x58\\x6a\\x6d\\x52\\x4f\\x6f\\xa6\\xc9\\x88\\x1f\\x4d\\x06\\x30\\xc2\\x58\\xeb\\xe9\\xc8\\xc0\\xdc\\xbe\\x74\\xac\\x5b\\x9b\\x1e\\xb0\"\n\"\\x9c\\x9f\\xa8\\xb2\\x1a\\xd6\\x56\\xb8\\x35\\x2d\\x5b\\x5b\\x2d\\x89\\x1e\\xca\\x06\\xa7\\x8d\\x98\\x92\\x98\\x1e\\xa1\\x97\\xa6\\x98\\xac\\x1b\\xbb\\xa7\\x72\"\n\"\\x60\\x5c\\x73\\x7d\\x35\\x1f\\x0b\\x69\\x1d\\x0e\\x15\\xfb\\x65\\xfb\\x22\\xfb\\x2e\\xfb\\x78\\xfb\\x79\\xf7\\x21\\xfb\\x2d\\xf7\\x67\\xe4\\xd9\\xa6\\xbd\\xc6\"\n\"\\x1f\\xda\\xce\\xba\\xf7\\x05\\xf7\\x0b\\xb4\\x1d\\x39\\x04\\xf7\\x32\\xf1\\xfb\\x0b\\xfb\\x4d\\xfb\\x44\\x22\\xfb\\x0c\\xfb\\x2e\\xfb\\x30\\x24\\xf7\\x0c\\xf7\"\n\"\\x48\\xf7\\x48\\xf2\\xf7\\x0c\\xf7\\x2f\\x1f\\x0b\\xf8\\x1a\\xf8\\xa0\\x15\\xfb\\x24\\xfc\\x2c\\xfb\\x1b\\x48\\x1d\\xfc\\xa0\\x6b\\x36\\x05\\x64\\x7d\\x79\\x7d\"\n\"\\x69\\x1b\\x7c\\x7e\\x8d\\x91\\x7a\\x1f\\x3e\\x07\\x83\\x9c\\x9c\\x88\\xa0\\x1b\\xa7\\xa7\\x94\\x9b\\xa2\\x1f\\xa4\\x9e\\x9a\\xa1\\x9b\\xb5\\xf7\\x7e\\xf9\\x0e\"\n\"\\x18\\x0b\\x2d\\xfc\\x06\\x06\\x77\\x40\\x5a\\x83\\x50\\x1b\\xfb\\x0e\\x4e\\xaf\\xd3\\x1f\\xf7\\xb6\\x2d\\xfb\\xbb\\x07\\xfb\\x09\\xe9\\x47\\xf7\\x36\\x0b\\x98\"\n\"\\x1d\\x6c\\x66\\x49\\x80\\x1f\\xc5\\x06\\xa2\\x91\\x97\\x98\\x9a\\xa7\\x1d\\xbc\\xaa\\xae\\xd0\\x94\\x1f\\x0e\\xf7\\x4c\\xf7\\xc9\\x15\\xf7\\x79\\x8c\\x1d\\xe8\"\n\"\\x06\\xf8\\x1b\\x04\\xf7\\x94\\xf7\\x56\\x07\\xe4\\xc0\\x5b\\x3b\\x3b\\x56\\x5b\\x32\\x1f\\x0e\\xf8\\x1b\\xf8\\x0a\\x15\\xf7\\x8a\\xf7\\xf7\\x05\\xfb\\x03\\x06\"\n\"\\xfb\\x50\\xfb\\xb2\\xfb\\x4f\\xf7\\xb2\\x05\\xfb\\x05\\x06\\xf7\\x86\\xfb\\xf7\\xfb\\x96\\xfc\\x0a\\x05\\xf7\\x05\\x06\\xf7\\x5c\\xf7\\xc4\\xf7\\x5b\\xfb\\xc4\"\n\"\\x05\\xf7\\x07\\x06\\x0e\\xe4\\x16\\xf7\\xad\\x06\\xf7\\x4c\\xf7\\x05\\xf7\\x1e\\xf7\\x77\\xf7\\x76\\xfb\\x04\\xf7\\x1e\\xfb\\x4d\\x1f\\xfb\\xad\\x06\\xe8\\xfd\"\n\"\\x1b\\x15\\xf8\\xc9\\xf7\\x40\\x07\\xf7\\x24\\xd7\\x2a\\xfb\\x4e\\xfb\\x4d\\x3f\\x2a\\xfb\\x24\\x1f\\x0b\\xd1\\x20\\x1d\\xfd\\x6d\\xde\\xf7\\xb5\\x07\\xf6\\xc3\"\n\"\\xd1\\xe1\\xa7\\xa5\\x83\\x7c\\x9f\\x1e\\xa3\\x79\\x95\\x72\\x66\\x1a\\xfb\\xff\\xde\\xf8\\x20\\x07\\xe3\\x4c\\xc2\\x25\\x41\\x5e\\x74\\x4b\\x5a\\x1e\\xf7\\xa9\"\n\"\\x07\\x0b\\x15\\x23\\xbb\\x07\\x8c\\x51\\x7d\\x70\\x68\\x86\\x08\\x65\\x07\\xc7\\x8f\\xac\\xba\\xdb\\x1a\\xf0\\x07\\xce\\x16\\x23\\xbb\\x07\\x8c\\x51\\x7d\\x70\"\n\"\\x68\\x86\\x08\\x65\\x07\\xc7\\x8f\\xac\\xba\\xdb\\x1a\\xf0\\x07\\x0e\\xf7\\x22\\x16\\xe3\\x06\\xbf\\xb5\\xaa\\xc8\\xa6\\x1f\\xf7\\xa9\\xf9\\x11\\x05\\xfb\\x02\"\n\"\\x06\\xfb\\x50\\xfc\\x62\\xfb\\x5b\\xf8\\x62\\x05\\xfb\\x04\\x06\\xf7\\x9d\\xfc\\xd1\\x73\\x4e\\x7d\\x80\\x5b\\x89\\x19\\x53\\x06\\x0b\\xaa\\x1d\\xea\\x06\\x93\"\n\"\\x1d\\xfb\\x22\\xc0\\xfb\\x0d\\xe6\\x4b\\x1e\\x0b\\x16\\xf7\\xdd\\x06\\xd0\\xbe\\x9e\\xb5\\xb2\\x1f\\xaf\\xb1\\x9f\\xbf\\xc4\\x1a\\xe3\\x63\\xc0\\x2e\\xaf\\x1e\"\n\"\\xce\\xaa\\xad\\xc0\\xd6\\x1a\\xc1\\x77\\xb9\\x65\\xad\\x1e\\xae\\x64\\x5a\\x9b\\x45\\x1b\\xfb\\xbc\\x06\\x0b\\x37\\xfb\\x94\\x06\\x7d\\x60\\x65\\x85\\x65\\x1b\"\n\"\\x49\\x69\\xa7\\xc1\\x1f\\xf7\\x56\\x37\\xfb\\x69\\xae\\x1d\\xc8\\x1b\\xba\\xb4\\x94\\x9f\\xb9\\x1f\\x0e\\xf8\\x68\\x16\\xf7\\x61\\xf8\\xf7\\x05\\xfc\\xf7\\xe3\"\n\"\\xf9\\x6d\\xfb\\x15\\x07\\xfb\\x68\\xfd\\x0f\\xfb\\x6c\\xf9\\x0f\\x05\\xfb\\x15\\xfd\\x6d\\xe3\\xf8\\xf7\\x06\\xf7\\x63\\xfc\\xf7\\x05\\x0e\\xf9\\x70\\x7b\\x1d\"\n\"\\x4f\\x1d\\x37\\x06\\xdf\\xfc\\x56\\x15\\xf7\\x3a\\xf7\\x38\\x07\\xc0\\xaa\\x6d\\x56\\x56\\x6c\\x6d\\x56\\x1f\\x0b\\x15\\x2b\\xfb\\x2a\\x05\\xcb\\x06\\xda\\xeb\"\n\"\\x0b\\x83\\x1d\\xaf\\xc4\\xb6\\x6e\\xa3\\x58\\x0b\\x15\\x8c\\x64\\x91\\x78\\x99\\x4e\\x1d\\x15\\x8c\\x64\\x90\\x78\\x9a\\x4e\\x1d\\x6b\\x1d\\xcb\\xd1\\x95\\x9d\"\n\"\\xd1\\x1e\\x0e\\xf8\\xa0\\x15\\xfc\\xa0\\xdf\\xf7\\xa4\\x07\\x8c\\xf7\\x12\\xbf\\xc3\\xf7\\x07\\x88\\x08\\xe0\\x07\\x8d\\x7d\\x83\\x8c\\x81\\x1b\\x55\\x62\\x6b\"\n\"\\x3d\\x5b\\x1f\\xea\\x07\\x0b\\xfc\\xf5\\x15\\x27\\xc9\\xef\\xce\\xc0\\x48\\xf7\\xa4\\x5d\\x07\\xfb\\x60\\xfb\\x9e\\x05\\x50\\x07\\xf7\\x50\\xc0\\x15\\xfb\\x15\"\n\"\\x06\\xf7\\x15\\xf7\\x3e\\x05\\x0e\\x55\\x1d\\xfb\\x6a\\xf7\\xf7\\x05\\xfb\\x07\\x06\\xf7\\xad\\xfc\\x4f\\x05\\xfb\\xb2\\xe8\\x07\\x0b\\xf7\\x47\\x15\\x6f\\x83\"\n\"\\x7a\\x72\\x74\\x1e\\x6c\\x69\\x62\\x7b\\x5a\\x1b\\x4a\\x65\\xaa\\xc0\\xc2\\xaf\\xa7\\xe5\\x98\\x1f\\xe4\\x97\\x9c\\x8f\\xa7\\x98\\x08\\x0b\\xfb\\x94\\xf9\\x6d\"\n\"\\x05\\xfb\\x0c\\x06\\xfb\\x98\\xfd\\x6d\\x05\\xee\\x06\\xd8\\xf7\\x6f\\x05\\xf7\\x93\\xd9\\x15\\xfb\\x7c\\x06\\xf7\\x0c\\xf7\\xe0\\x05\\x0b\\x8d\\x97\\x52\\x1d\"\n\"\\x63\\x05\\x70\\xc9\\xa3\\x84\\xb2\\x1b\\xd7\\xba\\x0b\\xfc\\x59\\x06\\x8d\\xfb\\x0c\\x60\\x47\\x3a\\x85\\x08\\x39\\x9b\\x07\\xc6\\x89\\xb5\\xa1\\xb7\\xc5\\xaf\"\n\"\\xbb\\x9b\\xc4\\x8e\\xea\\x08\\xf8\\x05\\x0b\\x1a\\xe5\\x53\\xcd\\x28\\xa6\\x1e\\xfb\\x4b\\xbc\\x05\\x33\\xa3\\x6b\\xa7\\xc3\\x1a\\xd5\\xcc\\xbc\\xed\\xf7\\x08\"\n\"\\xcc\\x57\\x2b\\x8c\\x1e\\x0b\\xe9\\xf7\\xed\\xcc\\x06\\xf7\\x75\\xfb\\xed\\x05\\xf3\\x06\\xfb\\x90\\xf8\\x14\\xf7\\x60\\xf7\\xed\\x05\\x24\\x06\\xfb\\x48\\xfb\"\n\"\\xc2\\x05\\x0b\\x1f\\x82\\x8f\\x76\\x63\\x05\\x6f\\xca\\xa2\\x85\\xb2\\x1b\\xd7\\xba\\xae\\xc5\\xb6\\x6e\\xa3\\x59\\x82\\x85\\x8b\\x89\\x7e\\x1f\\x0e\\xfc\\x94\"\n\"\\x07\\x29\\x44\\x4f\\xfb\\x09\\x55\\x5f\\x98\\xa4\\x68\\x1e\\x67\\xa7\\x7a\\xb0\\xc2\\x1a\\x5a\\x1d\\x0b\\x5c\\x67\\x48\\x1b\\x56\\x5e\\xa3\\xb7\\x6f\\x1f\\x77\"\n\"\\xa9\\x84\\xa9\\x8a\\xbf\\x08\\xf8\\x16\\x06\\xdb\\x85\\xbb\\x7c\\xb2\\x1e\\x0b\\x15\\xf8\\x7d\\xfb\\x63\\x05\\xda\\x07\\xfc\\x1e\\xf7\\x38\\xf8\\x1e\\xf7\\x35\"\n\"\\x05\\xda\\x07\\xfc\\x7d\\xfb\\x63\\x05\\x0e\\xf7\\x47\\xf7\\xe0\\x15\\xf8\\x20\\xdd\\xfc\\x20\\xf7\\x7d\\xf8\\x2f\\xdd\\xfc\\x8d\\xfd\\x6d\\xf8\\x9f\\xdd\\xfc\"\n\"\\x41\\x06\\x0b\\x06\\xc4\\xb8\\xab\\x1d\\x3a\\xd8\\xfb\\x24\\x1e\\xfb\\xc1\\xfd\\x6d\\x0b\\xf8\\xbb\\x92\\x1d\\x0b\\x15\\xe7\\xc7\\x3a\\xfb\\x11\\xfb\\x0b\\x4e\"\n\"\\xa2\\x1d\\x9d\\x1d\\xf8\\x9f\\xdd\\xfc\\x42\\x06\\x0b\\x15\\xe9\\xc3\\x3e\\xfb\\x16\\xfb\\x10\\x51\\x3e\\x2f\\x2e\\x52\\xd8\\xf7\\x13\\xf7\\x13\\xc4\\xd8\\xe8\"\n\"\\x1f\\x0b\\x97\\x92\\x8d\\x97\\x52\\x1d\\x0b\\xf7\\xe0\\x15\\xfb\\xe0\\xe8\\xf9\\x6d\\x2e\\xfb\\xcf\\xfc\\x0b\\xf7\\xcf\\x2e\\xfd\\x6d\\xe9\\xf7\\xe0\\x07\\x0b\"\n\"\\xf7\\x34\\x6e\\x2f\\xd9\\xfb\\x34\\x1b\\x29\\x3c\\x6c\\x4f\\x55\\x1f\\x49\\x43\\x67\\x23\\xfb\\x0a\\x1a\\x0b\\x15\\xfb\\x63\\xf7\\x63\\x45\\xfb\\x63\\xfb\\x63\"\n\"\\x45\\xf7\\x63\\xfb\\x63\\xd1\\xf7\\x63\\xf7\\x63\\x06\\x0b\\xf8\\xd8\\x15\\xfb\\xbc\\xc9\\xf8\\x3d\\x60\\x07\\x7a\\x4b\\x7d\\x80\\x43\\x84\\x7c\\x8a\\x18\\x5d\"\n\"\\x07\\x0b\\x87\\xbe\\x80\\xac\\x77\\xb5\\x1d\\x30\\xfb\\x04\\xfb\\x42\\x0b\\x15\\x8d\\x64\\x90\\x78\\x99\\x77\\x08\\x66\\xa6\\xb8\\x77\\xc3\\x1b\\xe8\\xbf\\xb9\"\n\"\\xe4\\x92\\x1f\\x0b\\x15\\x72\\x83\\x7f\\x53\\x1d\\x62\\x83\\x8d\\x76\\x1b\\x5f\\x0b\\x79\\x1d\\xdb\\x2b\\x05\\xcb\\x06\\x2a\\xf7\\x2a\\x05\\x0b\\x37\\xfc\\x56\"\n\"\\xfb\\x66\\xf8\\x56\\x37\\xfc\\x56\\xfb\\x66\\xf8\\x56\\x36\\x06\\x0e\\xb6\\x6e\\xa3\\x58\\x82\\x86\\x8b\\x89\\x7e\\x1f\\x0b\\xf8\\x95\\xf8\\x8a\\x15\\xfb\\x56\"\n\"\\xf7\\x63\\x33\\xfb\\x63\\xfb\\x55\\x39\\xf7\\x55\\x0b\\xf7\\xe0\\x15\\xf8\\x21\\xdd\\xfc\\x21\\xf7\\x7d\\xf8\\x30\\xdd\\xfc\\x8d\\xfd\\x6d\\x0b\\x1e\\xf7\\x2a\"\n\"\\xf7\\x08\\xd5\\xfb\\x08\\xd1\\x37\\x45\\x24\\x41\\xf2\\x07\\x0e\\xbc\\x15\\x89\\x82\\x87\\x8b\\x86\\x1b\\x6e\\x7b\\x9a\\xa5\\x1f\\xf7\\xc8\\x07\\x0b\\xf7\\x8f\"\n\"\\x06\\xf1\\xcd\\xc7\\xe9\\xed\\x49\\xc9\\x24\\x1f\\xfb\\x3a\\xf7\\x66\\x0b\\x15\\xfc\\x78\\x45\\xf8\\x78\\x06\\x25\\x04\\xfc\\x78\\x45\\xf8\\x78\\x06\\x0b\\x3a\"\n\"\\x30\\x32\\x52\\xdb\\xf7\\x0f\\xf7\\x0f\\xc4\\xdb\\xe4\\x1f\\x0e\\xfd\\x6d\\xf7\\xd3\\x07\\xf7\\x23\\xdd\\xd8\\xf7\\x19\\xd3\\x73\\xc2\\x0b\\xa8\\x71\\x61\\x64\"\n\"\\x6d\\x71\\x5f\\x5e\\x6e\\xa5\\xb3\\xb4\\xa8\\xa5\\x0b\\xfb\\x3a\\xe9\\xf7\\x8c\\x53\\xf9\\x1b\\x0b\\x15\\x30\\x07\\xa5\\x23\\x05\\xa9\\x06\\xa5\\xf3\\x05\\xe6\"\n\"\\x07\\x0b\\x1b\\x97\\x98\\x88\\x81\\xa3\\x1f\\x75\\xc6\\x92\\x89\\x9e\\x1b\\x0b\\xf7\\xb0\\xf7\\xcc\\x15\\xfb\\x82\\x43\\xf7\\x82\\x06\\x0e\\x06\\xa1\\xf7\\x73\"\n\"\\x05\\xfb\\xb3\\x04\\x37\\x23\\xdf\\x06\\x0b\\xc2\\x7a\\x6e\\xa9\\x1f\\xa6\\x72\\x9a\\x6d\\x96\\x54\\x08\\x0b\\x9c\\xae\\xb2\\x1f\\xb7\\xb3\\x9e\\xba\\xce\\x1a\"\n\"\\xf7\\x1d\\x0b\\xfb\\x28\\x05\\xc7\\xb6\\x1d\\x0e\\x6a\\x73\\x56\\x1b\\x51\\x6d\\xa1\\xb7\\x86\\x1f\\x0e\\x07\\x62\\x93\\x72\\xa0\\x74\\x1e\\x6a\\xa9\\xbc\\x79\"\n\"\\x0b\\x15\\x27\\xc2\\x07\\x54\\x8d\\x78\\x6c\\x65\\x1b\\x65\\x0b\\xda\\x69\\x1e\\x7d\\xad\\xa6\\x87\\xd0\\x1b\\xf7\\xac\\x0b\\xf8\\x42\\x05\\xfc\\x95\\xe9\\xf9\"\n\"\\x6d\\x2d\\x39\\x07\\x0b\\x37\\xfc\\x56\\xfb\\x6f\\xf8\\x56\\x37\\x06\\x0e\\xf8\\x99\\xc3\\x15\\xfc\\x7d\\x48\\xf8\\x7d\\x06\\x0b\\x1a\\xf7\\x7f\\xfb\\x1f\\xf7\"\n\"\\x2d\\xfb\\x6a\\x1e\\x0b\\xa8\\x08\\xbc\\x67\\x4c\\xa8\\x42\\x1b\\xfb\\x22\\x0b\\x06\\x3c\\x1d\\x05\\x0b\\xb8\\x07\\x84\\x78\\x77\\x88\\x0b\\xc1\\xd9\\xe6\\xd1\"\n\"\\xb7\\x62\\x42\\x95\\x1f\\x0b\\x15\\xeb\\xf7\\x2a\\x05\\x4b\\x06\\x3c\\x2b\\x0b\\xf7\\x82\\x05\\x29\\x06\\x22\\xfb\\x5d\\x05\\x0b\\x71\\x77\\x1e\\x78\\x72\\x6e\"\n\"\\x84\\x57\\x1b\\x0b\\x35\\xf7\\x24\\x38\\xfb\\x24\\x44\\x47\\xd2\\x0b\\x04\\xfc\\x78\\x45\\xf8\\x78\\x06\\x0e\\x1b\\x52\\x6c\\xa1\\xb7\\x86\\x1f\\x0e\\xf7\\x83\"\n\"\\xdd\\xfc\\xd0\\x39\\xf7\\x84\\x0b\\x62\\xb4\\xbd\\xbd\\xb3\\xb3\\xbd\\x1f\\x0b\\x3c\\x3d\\x5a\\x5c\\x39\\x1f\\x0e\\x01\\x00\\x01\\xe3\\x01\\x05\\x00\\x01\\x0a\"\n\"\\x02\\x01\\x40\\x03\\x01\\x87\\xff\\x02\\x87\\xa0\\x02\\x8e\\x02\\x00\\x01\\x00\\x04\\x00\\x07\\x00\\x19\\x00\\x36\\x00\\x7e\\x01\\x11\\x01\\x75\\x01\\xf2\\x02\"\n\"\\x0d\\x02\\x3a\\x02\\x67\\x02\\x90\\x02\\x98\\x02\\x9e\\x02\\xa2\\x02\\xa9\\x02\\xbc\\x03\\x01\\x03\\x19\\x03\\x70\\x03\\xd7\\x03\\xfc\\x04\\x47\\x04\\xa4\\x04\"\n\"\\xc8\\x05\\x28\\x05\\x84\\x05\\x93\\x05\\xa0\\x05\\xa6\\x05\\xae\\x05\\xcc\\x06\\x0e\\x06\\xbf\\x06\\xc3\\x06\\xc6\\x06\\xca\\x06\\xce\\x06\\xd2\\x06\\xe0\\x06\"\n\"\\xe4\\x06\\xfb\\x07\\x00\\x07\\x05\\x07\\x08\\x07\\x0b\\x07\\x0f\\x07\\x13\\x07\\x17\\x07\\x1a\\x07\\x76\\x07\\x7a\\x07\\x7e\\x07\\x82\\x07\\x86\\x07\\xa2\\x07\"\n\"\\xa7\\x07\\xaa\\x07\\xae\\x07\\xb2\\x07\\xc5\\x07\\xd5\\x07\\xe8\\x08\\x07\\x08\\x0d\\x08\\x29\\x08\\x2c\\x08\\x60\\x08\\x65\\x08\\x68\\x08\\x6b\\x08\\x72\\x08\"\n\"\\x78\\x08\\x7b\\x08\\x82\\x08\\x89\\x08\\x8e\\x08\\x93\\x08\\xc9\\x08\\xcc\\x08\\xcf\\x08\\xe7\\x09\\x1e\\x09\\x23\\x09\\x28\\x09\\x2d\\x09\\x30\\x09\\x45\\x09\"\n\"\\x49\\x09\\x79\\x09\\x7e\\x09\\x83\\x09\\xd5\\x09\\xe1\\x0a\\x33\\x0a\\x7b\\x0a\\x99\\x0a\\xed\\x0b\\x80\\x0b\\x87\\x0b\\xc0\\x0c\\x22\\x0c\\xbe\\x0d\\x25\\x0d\"\n\"\\x36\\x0d\\x69\\x0d\\x72\\x0d\\x78\\x0d\\x81\\x0d\\x91\\x0d\\xa2\\x0d\\xae\\x0d\\xb9\\x0d\\xd2\\x0d\\xd6\\x0e\\x00\\x0e\\x19\\x0e\\x33\\x0e\\x39\\x0e\\x40\\x0e\"\n\"\\x60\\x0e\\x71\\x0e\\xdf\\x0f\\x22\\x0f\\x2a\\x0f\\x30\\x0f\\x38\\x0f\\x40\\x0f\\x48\\x0f\\x4d\\x0f\\x55\\x0f\\x5b\\x0f\\x64\\x0f\\x79\\x0f\\x80\\x0f\\xa5\\x0f\"\n\"\\xad\\x0f\\xb1\\x0f\\xb6\\x10\\x31\\x10\\x56\\x10\\x5a\\x10\\xc4\\x10\\xfe\\x11\\x03\\x11\\x0d\\x11\\x2e\\x11\\x32\\x11\\x9a\\x11\\xff\\x12\\x06\\x12\\x15\\x12\"\n\"\\x55\\x12\\x8d\\x12\\x90\\x12\\xbe\\x12\\xc9\\x12\\xfa\\x13\\x09\\x13\\x25\\x13\\x3b\\x13\\x67\\x13\\x85\\x13\\x94\\x13\\xa5\\x14\\x37\\x14\\x44\\x14\\x9c\\x14\"\n\"\\xca\\x14\\xd1\\x15\\x5d\\x15\\x65\\x15\\x6d\\x15\\x75\\x15\\x7d\\x15\\x86\\x15\\x8e\\x15\\xce\\x15\\xd7\\x15\\xe0\\x15\\xe9\\x15\\xf2\\x15\\xf9\\x16\\x02\\x16\"\n\"\\x0b\\x16\\x14\\x16\\x4b\\x16\\x53\\x16\\x5b\\x16\\x63\\x16\\x6b\\x16\\x73\\x16\\x7c\\x16\\xac\\x16\\xb5\\x16\\xbe\\x16\\xc7\\x16\\xdd\\x16\\xe3\\x16\\xec\\x16\"\n\"\\xf3\\x17\\x0c\\x17\\x14\\x17\\x1c\\x17\\x25\\x17\\x42\\x17\\x7e\\x17\\x86\\x17\\x8e\\x17\\x96\\x17\\x98\\x17\\x9f\\x17\\xa8\\x17\\xb1\\x17\\xba\\x17\\xcf\\x17\"\n\"\\xd6\\x17\\xdd\\x17\\xe4\\x17\\xeb\\x17\\xf2\\x17\\xfb\\x18\\x01\\x18\\x09\\x18\\x0f\\x18\\x17\\x18\\x1f\\x18\\x29\\x18\\x44\\x18\\x6c\\x18\\x76\\x18\\x7f\\x18\"\n\"\\x8d\\x18\\xb1\\x18\\xc1\\x19\\x57\\x19\\x80\\x19\\x8a\\x19\\xa1\\x19\\xa5\\x19\\xad\\x19\\xb6\\x19\\xe4\\x19\\xf1\\x19\\xf4\\x19\\xfd\\x1a\\x06\\x1a\\x0f\\x1a\"\n\"\\x18\\x1a\\x1b\\x1a\\x23\\x1a\\x26\\x1a\\x3f\\x1a\\x47\\x1a\\x50\\x1a\\x59\\x1a\\x62\\x1a\\xc6\\x1a\\xf9\\x1a\\xfd\\x1b\\x09\\x1b\\x0d\\x1b\\x19\\x1b\\x95\\x1b\"\n\"\\xa5\\x1b\\xae\\x1b\\xb7\\x1b\\xbf\\x1b\\xc8\\x1b\\xf5\\x1b\\xfe\\x1c\\x08\\x1c\\x14\\x1c\\x1f\\x1c\\x2e\\x1c\\x5c\\x1c\\x61\\x1c\\x68\\x1c\\x74\\x1c\\x7d\\x1c\"\n\"\\x86\\x1c\\x89\\x1c\\x91\\x1c\\x98\\x1c\\xb3\\x1c\\xba\\x1c\\xc1\\x1c\\xcd\\x1c\\xd1\\x1c\\xda\\x1c\\xe3\\x1c\\xeb\\x1c\\xef\\x1d\\x06\\x1d\\x0e\\x1d\\x17\\x1d\"\n\"\\x85\\x1d\\x89\\x1d\\x9f\\x1d\\xa8\\x1e\\x12\\x1e\\x26\\x1e\\x7b\\x1e\\x83\\x1e\\x8b\\x1e\\x93\\x1e\\x96\\x1e\\x9f\\x1e\\xe5\\x1e\\xee\\x1e\\xf7\\x1f\\x1a\\x1f\"\n\"\\x1e\\x1f\\x39\\x1f\\x41\\x1f\\x61\\x1f\\x73\\x1f\\x82\\x1f\\x8b\\x1f\\x94\\x1f\\xd8\\x1f\\xdc\\x1f\\xe2\\x1f\\xee\\x1f\\xf8\\x20\\x01\\x20\\x08\\x20\\x12\\x20\"\n\"\\x1a\\x20\\x24\\x20\\x42\\x20\\x4a\\x20\\x52\\x20\\x5b\\x20\\x64\\x20\\x68\\x20\\x73\\x20\\x7d\\x20\\x81\\x20\\x87\\x20\\x9d\\x20\\xca\\x20\\xda\\x21\\x0f\\x21\"\n\"\\x13\\x21\\x1c\\x21\\x5b\\x21\\xc6\\x21\\xca\\x21\\xe9\\x21\\xf4\\x22\\x03\\x22\\x2c\\x22\\x36\\x22\\x3d\\x22\\x51\\x22\\x6b\\x22\\xbd\\x22\\xd0\\x22\\xd4\\x23\"\n\"\\x3f\\x23\\x48\\x23\\x57\\x23\\x60\\x23\\x76\\x23\\x92\\x23\\xc9\\x23\\xe5\\x23\\xf7\\x24\\x56\\x24\\xaf\\x25\\x09\\x25\\x21\\x25\\x72\\x25\\x87\\x25\\xe0\\x26\"\n\"\\x25\\x26\\x2c\\x26\\x35\\x26\\x70\\x26\\xa8\\x26\\xd2\\x27\\x08\\x27\\x1f\\x27\\x27\\x27\\xa7\\x28\\x01\\x28\\x46\\x28\\x50\\x28\\x84\\x28\\xa0\\x28\\xc1\\x28\"\n\"\\xfa\\x29\\x54\\x29\\x59\\x29\\x65\\x29\\x6a\\x29\\x77\\x29\\x9f\\x29\\xb7\\x29\\xbc\\x29\\xce\\x29\\xf1\\x2a\\x2b\\x2a\\x3d\\x2a\\x42\\x2a\\xac\\x2a\\xb5\\x2a\"\n\"\\xc4\\x2a\\xcc\\x2a\\xd6\\x2a\\xe6\\x2a\\xf6\\x2b\\x04\\x2b\\x0a\\x2b\\x52\\x2b\\x83\\x2b\\xcd\\x2b\\xe1\\x2c\\x0e\\x2c\\x1b\\x2c\\x63\\x2c\\x86\\x2c\\x97\\x2c\"\n\"\\xa4\\x2c\\xcb\\x2c\\xdd\\x2d\\x0f\\x2d\\x28\\x2d\\x30\\x2d\\x3a\\x2d\\x4a\\x2d\\x5b\\x2d\\xa6\\x2e\\x20\\x2e\\xa4\\x2f\\x06\\x2f\\x5c\\x2f\\xb2\\x2f\\xb9\\x2f\"\n\"\\xee\\x30\\x24\\x30\\x96\\x31\\x22\\x31\\x2f\\x31\\xb5\\x32\\x04\\x32\\x51\\x32\\x9f\\x32\\xeb\\x32\\xf3\\x33\\x04\\x33\\x6e\\x33\\x77\\x33\\x80\\x33\\x8a\\x33\"\n\"\\x93\\x33\\xc3\\x34\\x41\\x34\\xac\\x34\\xb5\\x35\\x01\\x35\\x3a\\x35\\x65\\x35\\x6d\\x35\\x7b\\x35\\x8c\\x35\\x93\\x35\\xc8\\x35\\xcf\\x36\\x23\\x36\\x96\\x36\"\n\"\\x9b\\x36\\xa4\\x36\\xaf\\x37\\x15\\x37\\x18\\x37\\x20\\x37\\x2b\\x37\\x45\\x37\\x86\\x37\\x97\\x37\\xb8\\x37\\xcc\\x37\\xd7\\x38\\x58\\x38\\x62\\x38\\x81\\x38\"\n\"\\xb9\\x38\\xc0\\x39\\x07\\x39\\x2c\\x39\\x34\\x39\\x3f\\x39\\x55\\x39\\xcc\\x3a\\x39\\x3a\\x77\\x3a\\xb5\\x3a\\xfa\\x3b\\x45\\x3b\\x7a\\x3b\\x7f\\x3b\\x88\\x3b\"\n\"\\x91\\x3b\\x9a\\x3b\\xa3\\x3b\\xaf\\x3b\\xd3\\x3b\\xdc\\x3c\\x03\\x3c\\x0a\\x3c\\x27\\x3c\\x30\\x3c\\x38\\x3c\\x4c\\x3c\\x56\\x3c\\xf7\\x3d\\x0b\\x3d\\x9a\\x3d\"\n\"\\xa1\\x3d\\xe5\\x3d\\xfe\\x3e\\x04\\x3e\\x22\\x3e\\x29\\x3e\\x30\\x3e\\x9c\\x3e\\xd0\\x3e\\xe5\\x3e\\xed\\x3e\\xfc\\x3f\\x0a\\x3f\\x0e\\x3f\\x16\\x3f\\x1b\\x3f\"\n\"\\x24\\x3f\\x32\\x3f\\x3a\\x3f\\xac\\x40\\x46\\x40\\xc0\\x40\\xd8\\x41\\x01\\x41\\x2e\\x41\\x65\\x41\\xa5\\x41\\xc0\\x41\\xc7\\x41\\xe7\\x41\\xef\\x41\\xf8\\x42\"\n\"\\x09\\x42\\x4b\\x42\\x54\\x42\\x92\\x42\\x9c\\x42\\xa6\\x42\\xb3\\x42\\xf2\\x43\\x80\\x43\\xd0\\x44\\x05\\x44\\x89\\x44\\x9b\\x44\\xcf\\x44\\xec\\x45\\x29\\x45\"\n\"\\x9f\\x45\\xa7\\x45\\xaf\\x45\\xb7\\x45\\xbe\\x45\\xd5\\x45\\xd8\\x45\\xdc\\x45\\xe3\\x45\\xed\\x45\\xf5\\x45\\xf9\\x46\\x13\\x46\\x7d\\x46\\xb2\\x47\\x24\\x47\"\n\"\\x2d\\x47\\x36\\x47\\x38\\x47\\x42\\x47\\x5f\\x47\\x7e\\x47\\xbd\\x47\\xfd\\x48\\x76\\x48\\xde\\x48\\xfb\\x49\\x1f\\x49\\x3f\\x49\\x61\\x49\\x75\\x49\\x8e\\x49\"\n\"\\x98\\x49\\xb3\\x49\\xeb\\x4a\\x1a\\x4a\\x2e\\x4a\\x45\\x4a\\x76\\x4a\\x99\\x4a\\xa7\\x4a\\xb6\\x4a\\xbf\\x4a\\xcc\\x4b\\x0a\\x4b\\x45\\x4b\\x70\\x4b\\x8e\\x4b\"\n\"\\x95\\x4b\\xac\\x4b\\xda\\x4c\\x30\\x4c\\x38\\x4c\\x48\\x4c\\x8f\\x4c\\xcd\\x4d\\x03\\x4d\\x41\\x4d\\x49\\x4e\\x0b\\x4e\\x77\\x4e\\x7e\\x4e\\x82\\x4e\\x9e\\x4e\"\n\"\\xbb\\x4f\\x2b\\x4f\\x42\\x4f\\x87\\x4f\\xb0\\x4f\\xff\\x50\\x04\\x50\\x0d\\x50\\x16\\x50\\x1f\\x50\\x28\\x50\\x2f\\x50\\x35\\x50\\x3e\\x50\\x45\\x50\\x4e\\x50\"\n\"\\xce\\x50\\xd8\\x50\\xe2\\x50\\xf3\\x50\\xfd\\x51\\x61\\xfc\\x20\\x0e\\xfc\\x20\\x0e\\xfc\\x20\\xf7\\x64\\x20\\x1d\\x38\\xfb\\xe6\\x06\\xa1\\xfb\\x73\\x05\\xb2\"\n\"\\xa9\\x1d\\x0e\\xfb\\xd3\\xbf\\xf9\\x59\\x15\\xfb\\x03\\x07\\xa6\\xfb\\x1a\\x05\\xb2\\x48\\x0a\\xce\\x16\\xfb\\x03\\x07\\xa6\\xfb\\x1a\\x05\\xb2\\x48\\x0a\\x0e\"\n\"\\xf8\\x79\\xf9\\x4d\\x15\\x3e\\x06\\x68\\xfb\\x58\\x05\\xfb\\x11\\x06\\xaf\\xf7\\x58\\x05\\x3f\\x06\\x67\\xfb\\x58\\x05\\xfb\\x0d\\x47\\xf7\\x00\\x06\\x6c\\xfb\"\n\"\\x42\\x05\\xfb\\x06\\x47\\xf0\\x90\\x0a\\xf7\\x10\\x90\\x0a\\xf7\\x09\\xcf\\x22\\x06\\xaa\\xf7\\x42\\x05\\xf5\\xcf\\x2e\\x06\\x32\\x47\\x15\\x6c\\xfb\\x42\\x05\"\n\"\\xfb\\x11\\x06\\xab\\xf7\\x42\\x05\\x0e\\xf7\\x8e\\xf9\\x96\\x15\\x55\\x07\\xfb\\x14\\x7b\\x46\\x45\\xfb\\x06\\x1a\\x4c\\xa3\\x5a\\xb9\\x69\\x1e\\xa6\\x78\\xa7\"\n\"\\x80\\xd3\\x75\\x08\\xfb\\xa4\\x07\\x5e\\x91\\x65\\x9f\\x74\\xaa\\x7c\\xa2\\x87\\x9c\\x85\\xcc\\x08\\x3c\\x06\\x84\\xfb\\x1f\\xd7\\x38\\xf7\\x21\\x82\\x08\\x24\"\n\"\\xc6\\xf2\\x07\\xc1\\x8f\\xb0\\x96\\xac\\x9f\\x08\\xc5\\xaf\\xad\\xcf\\xda\\x1a\\xd2\\x70\\xbd\\x51\\xac\\x1e\\x71\\x9a\\x7e\\x90\\x2f\\xa7\\x08\\xf7\\x8d\\x07\"\n\"\\xce\\x88\\xba\\x58\\x8c\\x42\\x08\\xda\\x06\\xf7\\x06\\x42\\xd5\\xfb\\x0d\\x94\\x1e\\xc1\\x07\\x50\\xfc\\x01\\x15\\x3c\\xa0\\x66\\xb2\\xc8\\x1a\\xcd\\xb5\\xb6\"\n\"\\xd5\\x95\\x1e\\xc6\\xfb\\xe4\\x15\\xf1\\x6d\\xab\\x6d\\x49\\x1a\\x64\\x7c\\x68\\x70\\x71\\x1e\\x73\\x74\\x72\\x82\\x60\\x86\\x08\\x0e\\xf7\\x6b\\xf7\\x5b\\xf9\"\n\"\\x41\\x15\\x2d\\x3f\\x3e\\x2d\\x2d\\xd7\\x3e\\xea\\xe8\\xd8\\xd8\\xe7\\xec\\x40\\xd7\\x2b\\x1f\\x45\\x04\\xc4\\xb8\\x5e\\x52\\x54\\x5d\\x5e\\x54\\x53\\x5d\\xb8\"\n\"\\xc3\\xc3\\xb8\\xb8\\xc3\\x1f\\xf8\\x2e\\xe9\\x15\\xfc\\x1f\\xfd\\x6d\\x05\\xcd\\x06\\xf8\\x1f\\xf9\\x6d\\x05\\x98\\xfc\\x17\\x15\\x2d\\x3f\\x3f\\x2d\\x2c\\xd7\"\n\"\\x3f\\xea\\xe8\\xd8\\xd7\\xe8\\xeb\\x40\\xd7\\x2b\\x1f\\x45\\x04\\xc4\\xb8\\x5e\\x52\\x55\\x5d\\x5e\\x54\\x52\\x5e\\xb8\\xc3\\xc2\\xb8\\xb8\\xc3\\x1f\\x0e\\x84\"\n\"\\xf8\\x81\\xf7\\xe2\\x15\\x8c\\x67\\x7f\\x5b\\x77\\x68\\xfb\\x19\\xf7\\x37\\x18\\xf3\\xc6\\xad\\xb6\\xd3\\x1a\\xe7\\x47\\xcc\\x2c\\x2b\\x40\\x46\\x33\\x5c\\x9d\"\n\"\\x66\\xca\\x3c\\x1e\\xfb\\x11\\x43\\x66\\x5a\\x2f\\x1a\\xfb\\x0c\\xdd\\x3c\\xf7\\x0f\\xbd\\xb9\\x97\\xa2\\xaf\\x1e\\xa0\\x99\\x9c\\x99\\xb2\\xb1\\xc9\\x3d\\x18\"\n\"\\xf7\\x01\\x06\\xfb\\x0e\\xf7\\x2b\\x05\\xb0\\xc4\\xa0\\xcd\\xc7\\x1a\\xfb\\xb4\\xec\\x15\\x4e\\xd1\\x82\\x9b\\xaf\\x1a\\xbf\\xad\\xad\\xbf\\xbd\\xb0\\x67\\x5a\"\n\"\\x5f\\x70\\x6b\\x3f\\x5c\\x1e\\xf7\\x19\\xfb\\xba\\x15\\x50\\x53\\x60\\x74\\x57\\x1b\\x43\\x50\\xc4\\xd2\\xc3\\xaa\\xb3\\xe6\\xc5\\x1f\\x0e\\xfc\\x58\\xcc\\xf9\"\n\"\\x6d\\x15\\x23\\xbb\\x07\\x8c\\x51\\x7d\\x70\\x68\\x86\\x08\\x65\\x07\\xc7\\x8f\\xac\\xba\\xdb\\x1a\\xf0\\x07\\x0e\\xfb\\xe9\\xf7\\x80\\x20\\x1d\\x27\\xfb\\x17\"\n\"\\x4c\\xfb\\x4a\\xfb\\x31\\x1a\\xfb\\x32\\xca\\xfb\\x4a\\xef\\xfb\\x17\\x1e\\xc2\\x06\\x33\\xf7\\x23\\x5a\\xf7\\x3c\\xf7\\x34\\x1a\\xf7\\x33\\xbc\\xf7\\x3d\\xe3\"\n\"\\xf7\\x22\\x1e\\x0e\\xfb\\xe9\\xe8\\xfb\\x68\\x15\\xef\\xf7\\x17\\xca\\xf7\\x4a\\xf7\\x31\\x1a\\xf7\\x32\\x4c\\xf7\\x4a\\x27\\xf7\\x17\\x1e\\x54\\x06\\xe3\\xfb\"\n\"\\x23\\xbc\\xfb\\x3c\\xfb\\x34\\x1a\\xfb\\x33\\x5a\\xfb\\x3d\\x33\\xfb\\x22\\x1e\\x0e\\xfb\\xb1\\xf7\\x34\\xf9\\x6d\\x15\\x90\\xfb\\x04\\x21\\xb1\\x78\\x50\\xf7\"\n\"\\x00\\x6d\\x46\\x32\\xbd\\x67\\xca\\xe8\\xc9\\x2e\\xbe\\xaf\\x45\\xe4\\xf7\\x00\\xa9\\x78\\xc6\\x21\\x65\\x90\\xf7\\x04\\x05\\x0e\\x31\\xf8\\xaa\\xf7\\x9f\\x94\"\n\"\\x1d\\x0e\\xfc\\x20\\xe2\\xf3\\x7c\\x0a\\xfb\\xe9\\xa8\\x1d\\xfc\\x20\\xf7\\x53\\xf3\\x24\\x1d\\xfc\\x20\\xf7\\x79\\x20\\x1d\\xfb\\x81\\xfd\\x81\\x05\\xc2\\x06\"\n\"\\xf7\\x81\\xf9\\x81\\x05\\x0e\\xf7\\xa7\\xf9\\x67\\x15\\x49\\x4f\\x6d\\x5a\\x66\\x1f\\x5d\\x4b\\x74\\x2b\\xfb\\x1a\\x1a\\xfb\\x88\\xdb\\xfb\\x15\\xf7\\x2c\\xf7\"\n\"\\x2a\\xdd\\xf7\\x15\\xf7\\x82\\xf7\\x20\\x75\\xe9\\x5c\\xcd\\x1e\\xbd\\x66\\x50\\xa8\\x48\\x1b\\x3d\\x04\\xea\\xba\\x2a\\xfb\\x58\\xfb\\x62\\x5d\\x2b\\x29\\x2e\"\n\"\\x5c\\xef\\xf7\\x5b\\xf7\\x5b\\xba\\xec\\xea\\x1f\\x0e\\xf7\\x97\\xf8\\x97\\x15\\xfc\\x97\\xe3\\xf9\\x67\\x51\\x07\\x6c\\xfb\\x03\\x77\\x7c\\xfb\\x1c\\x79\\x08\"\n\"\\x4b\\x07\\x0e\\xf8\\x8e\\xe2\\x15\\xfc\\x09\\x06\\x94\\xc7\\xab\\xb1\\xe2\\xc0\\xef\\xc3\\x18\\xee\\xc2\\xbe\\xd5\\xe4\\x1a\\xc7\\x73\\xc3\\x61\\xb2\\x1e\\xb1\"\n\"\\x61\\x57\\x9d\\x48\\x1b\\x31\\x48\\x6b\\x4d\\x64\\x1f\\x72\\x65\\x80\\x5e\\x89\\x42\\x08\\xe3\\x06\\x8e\\xbc\\x91\\xa8\\x97\\xa3\\x08\\xb7\\xa2\\xb9\\xa6\\xc0\"\n\"\\x1b\\xdb\\xc7\\x51\\x3d\\x51\\x6a\\x59\\x4c\\x67\\x1f\\x2f\\x55\\xfb\\x28\\x36\\x60\\x47\\x83\\xfb\\x32\\x19\\xf8\\x6c\\x06\\x0e\\xf7\\x71\\xf7\\xe1\\x15\\x96\"\n\"\\x06\\xb0\\x06\\xeb\\xbe\\x5e\\x34\\x30\\x54\\x54\\x30\\x2a\\x5c\\xbc\\xf5\\x85\\x1f\\x33\\x06\\x8f\\x51\\x95\\x65\\x9c\\x6b\\x08\\x45\\xb0\\xd0\\x68\\xec\\x1b\"\n\"\\xf7\\x26\\xe9\\xe3\\xf7\\x1d\\xe7\\x68\\xbd\\x36\\xa9\\x1f\\xcd\\xa6\\xac\\xbd\\xd4\\x1a\\xf7\\x10\\x3a\\xd6\\xfb\\x1b\\xfb\\x23\\x3f\\x3b\\xfb\\x2d\\x88\\x1e\"\n\"\\xe3\\x06\\x8c\\xb7\\x8f\\xa4\\x96\\xa1\\x08\\xb4\\x9f\\xb7\\xa3\\xc2\\x1b\\xd9\\xba\\x5c\\x3d\\x58\\x79\\x6c\\x64\\x7a\\x1f\\x73\\x81\\x6b\\x87\\x4e\\x8a\\x08\"\n\"\\x0e\\xf7\\xdb\\xf7\\x43\\x15\\xfb\\x43\\xe3\\xf7\\x43\\xf4\\xda\\x22\\xf8\\x69\\x4a\\x07\\xfb\\xd6\\xfc\\x5b\\x05\\x2e\\x07\\xf7\\xbf\\xda\\x15\\xfb\\x72\\x06\"\n\"\\xf7\\x72\\xf7\\xd3\\x05\\x0e\\xf8\\x70\\xf9\\x59\\x15\\xfc\\x02\\x06\\x56\\xfc\\x16\\x05\\xdc\\x06\\xbc\\xb4\\xad\\x9c\\xc3\\x1b\\xea\\xc6\\x4a\\x22\\x25\\x50\"\n\"\\x4d\\x2b\\x3e\\x5c\\xb2\\xdb\\x76\\x1f\\x33\\x06\\x97\\x51\\x95\\x6f\\xa0\\x71\\x08\\x55\\xb3\\xd3\\x6c\\xdb\\x1b\\xf7\\x23\\xef\\xf3\\xf7\\x2a\\xf7\\x20\\x2e\"\n\"\\xeb\\xfb\\x1c\\x59\\x63\\x7e\\x6d\\x62\\x1f\\xa7\\xf7\\x5a\\x05\\xf7\\xbb\\x06\\x0e\\xf8\\x86\\xf8\\xab\\x15\\xf7\\x0a\\x7a\\x3f\\xd1\\xfb\\x00\\x1b\\x3d\\x45\"\n\"\\x65\\x4a\\x61\\x1f\\x5e\\x44\\x78\\x33\\xfb\\x17\\x1a\\xfb\\x0e\\x9c\\x3e\\xb6\\x4b\\x1e\\x50\\xb1\\xc9\\x6c\\xd9\\x1b\\xf7\\x1b\\xec\\xf0\\xf7\\x21\\xf7\\x19\"\n\"\\x31\\xe9\\xfb\\x13\\x45\\x54\\x71\\x56\\x65\\x1f\\xf7\\x47\\x8c\\xc3\\xee\\xf0\\x1b\\xc9\\xb6\\x63\\x45\\x99\\x1f\\xfb\\x11\\xfb\\x3b\\x15\\xe0\\xc0\\x4f\\x2b\"\n\"\\x30\\x4f\\x49\\x3a\\x39\\x4d\\xd0\\xe7\\xe5\\xc7\\xc9\\xe2\\x1f\\x0e\\xf8\\x9c\\xf9\\x59\\x15\\xfc\\x6e\\x34\\xf8\\x13\\x06\\xfb\\x3d\\xfb\\x85\\x46\\xfb\\x28\"\n\"\\x56\\xfb\\x7d\\x08\\xe9\\x06\\xb2\\xf7\\x77\\xe4\\xf7\\x57\\xf7\\x34\\xf7\\x69\\x08\\x0e\\xf8\\x1b\\xf8\\x11\\x15\\xd5\\xb8\\xa2\\xaf\\xcf\\x1a\\xf7\\x06\\x34\"\n\"\\xda\\xfb\\x12\\xfb\\x11\\x33\\x3c\\xfb\\x05\\x46\\xa2\\x68\\xd4\\x5d\\x1e\\x3a\\x62\\x63\\x50\\x3b\\x1a\\xfb\\x18\\xec\\x2f\\xf7\\x21\\xf7\\x20\\xed\\xe7\\xf7\"\n\"\\x18\\xdb\\x63\\xc6\\x39\\xb4\\x1e\\xfb\\x08\\xf7\\x9c\\x15\\xd6\\xbb\\x5e\\x43\\x47\\x5a\\x5e\\x41\\x40\\x5b\\xb8\\xd1\\xd1\\xbb\\xb8\\xd6\\x1f\\xfb\\xc4\\x04\"\n\"\\xe3\\xc7\\x51\\x37\\x34\\x50\\x52\\x30\\x35\\x4f\\xc6\\xdf\\xe1\\xc6\\xc4\\xe4\\x1f\\x0e\\xc0\\xf7\\x39\\x15\\xfb\\x0a\\x9c\\xd7\\x45\\xf7\\x00\\x1b\\xda\\xd1\"\n\"\\xb1\\xcc\\xb5\\x1f\\xb7\\xd2\\x9f\\xe3\\xf7\\x17\\x1a\\xf7\\x0e\\x79\\xd8\\x61\\xcb\\x1e\\xc6\\x64\\x4d\\xaa\\x3d\\x1b\\xfb\\x1b\\x2a\\x26\\xfb\\x20\\xfb\\x19\"\n\"\\xe5\\x2d\\xf7\\x14\\xce\\xbd\\xa3\\xc2\\xb8\\x1f\\xfb\\x48\\x8a\\x53\\x28\\x26\\x1b\\x4d\\x60\\xb3\\xd1\\x7d\\x1f\\xf7\\x14\\xf8\\x75\\x15\\xdd\\xc9\\x46\\x2e\"\n\"\\x32\\x4f\\x4d\\x34\\x36\\x56\\xc7\\xeb\\xe6\\xc6\\xcd\\xdd\\x1f\\x0e\\xfc\\x20\\xf7\\x6a\\xf3\\x3b\\x1d\\xf8\\xa0\\x04\\x23\\x23\\xf3\\x06\\x0e\\xfc\\x20\\xf7\"\n\"\\x6b\\xf8\\xa0\\x3b\\x1d\\x22\\xfb\\xd0\\x7c\\x0a\\x31\\xb8\\xf7\\x5a\\x8a\\x1d\\x31\\xf8\\xaa\\xf7\\xf5\\xa1\\x1d\\x0e\\x31\\xf8\\xaf\\xf7\\x9f\\x15\\xfc\\x7d\"\n\"\\xf7\\x63\\x05\\x3c\\x07\\xf8\\x1e\\xfb\\x38\\xfc\\x1e\\xfb\\x35\\x05\\x3c\\x07\\xf8\\x7d\\xf7\\x63\\x05\\x0e\\xf7\\xde\\xf7\\x5b\\x15\\xba\\x07\\x8c\\xb8\\x99\"\n\"\\xa1\\xcb\\xc4\\x08\\xd6\\xcf\\xa4\\xb7\\xce\\x1a\\xf7\\x09\\x38\\xd6\\xfb\\x16\\xfb\\x25\\x41\\x3c\\xfb\\x2f\\x1e\\xe0\\x06\\xf7\\x00\\xb2\\xbb\\xe5\\xd8\\xbe\"\n\"\\x5d\\x47\\x5d\\x75\\x64\\x56\\x5c\\x1e\\x36\\x40\\x78\\x6e\\x50\\x1a\\x54\\x07\\xe5\\x2c\\x15\\x31\\x23\\xe5\\x06\\x0e\\xf7\\xe9\\xf9\\x2d\\xf8\\x89\\x15\\x75\"\n\"\\x49\\x05\\xc5\\x72\\x61\\xa8\\x54\\x1b\\xfb\\x1a\\xfb\\x0f\\xfb\\x18\\xfb\\x25\\x23\\xd1\\x3c\\xe8\\xc0\\xb6\\xa1\\xbd\\xb9\\x1f\\x58\\x94\\xb0\\x71\\xcb\\x1b\"\n\"\\xd6\\xc7\\xa8\\xc7\\xbe\\x1f\\xc2\\xcb\\xaa\\xdb\\xda\\x1a\\xf7\\x60\\xfb\\x55\\xf7\\x3c\\xfb\\x7d\\xfb\\x0b\\xfb\\x12\\x5a\\x3b\\x33\\x1e\\x29\\x32\\x4f\\xfb\"\n\"\\x1a\\xfb\\x17\\x1a\\xfb\\x72\\xf7\\x5e\\xfb\\x46\\xf7\\x91\\xd5\\xda\\x9a\\xa6\\xd4\\x1e\\x6f\\xce\\x05\\x74\\x38\\x54\\x82\\x53\\x1b\\xfb\\x67\\xfb\\x37\\xf7\"\n\"\\x27\\xf7\\x53\\xf7\\x66\\xf7\\x4a\\xf7\\x49\\xf7\\x67\\xf7\\x54\\xf7\\x34\\xfb\\x20\\xfb\\x3c\\xfb\\x08\\x38\\xfb\\x05\\x36\\x70\\x74\\x9f\\xa3\\x94\\x8f\\x9d\"\n\"\\x93\\xa2\\x1f\\xe5\\xf7\\xac\\x05\\xfb\\x7d\\x60\\x15\\xc3\\xb4\\x62\\x54\\x88\\x1f\\x89\\x59\\x70\\x37\\x72\\x66\\x08\\x62\\x6f\\x66\\x73\\x66\\x1b\\x54\\x5f\"\n\"\\xbf\\xcd\\xf7\\x04\\xd8\\xf1\\xdf\\x1f\\x0e\\x84\\x23\\x0a\\x0e\\x84\\x54\\x0a\\xbb\\x2a\\x0a\\x0e\\xbb\\x6f\\x1d\\x0e\\x84\\x24\\x0a\\x0e\\x4c\\xf7\\x4b\\xf7\"\n\"\\xe0\\x15\\xf7\\xf0\\xdd\\xfb\\xf0\\x92\\x0a\\x0e\\xf3\\x32\\x1d\\x0e\\xbb\\xf8\\xbb\\x4e\\x0a\\xe8\\xf9\\x6d\\x2e\\xfb\\xcf\\xfc\\x0b\\xf7\\xcf\\x2e\\xfd\\x6d\"\n\"\\xe8\\xf7\\xe0\\x07\\x0e\\xfc\\x20\\x30\\x0a\\x0e\\xfb\\x42\\x60\\x0a\\x0e\\x84\\x64\\x0a\\x3a\\x1d\\x0e\\xf7\\x33\\x76\\x1d\\xbb\\x36\\x1d\\x0e\\xf3\\x25\\x0a\"\n\"\\x0e\\x84\\x6d\\x1d\\xf3\\xf9\\x71\\x8a\\x15\\x2d\\xd8\\x05\\xd0\\xd7\\xad\\xe8\\xf7\\x08\\x1a\\xf7\\x77\\xfb\\x22\\xf7\\x2d\\xfb\\x66\\xfb\\x67\\xfb\\x21\\xfb\"\n\"\\x2d\\xfb\\x79\\xfb\\x78\\xf7\\x21\\xfb\\x2e\\xf7\\x67\\xd4\\xc6\\x9b\\xae\\xc6\\x1e\\xf4\\x34\\x05\\xfb\\x61\\xf7\\x9c\\x15\\x5d\\x53\\xd5\\x4d\\x05\\x76\\x60\"\n\"\\x6a\\x84\\x5f\\x1b\\xfb\\x2f\\x24\\xf7\\x0c\\xf7\\x48\\xf7\\x48\\xf2\\xf7\\x0c\\xf7\\x30\\xf7\\x2f\\xf3\\xfb\\x0c\\xfb\\x47\\x2c\\x72\\x43\\x55\\x4e\\x1f\\x0e\"\n\"\\xbb\\x33\\x0a\\x0e\\x84\\x29\\x0a\\x0e\\x4c\\x3e\\x0a\\x0e\\xbb\\x2d\\x1d\\x0e\\x84\\xf8\\x1c\\x16\\xf7\\x91\\xf9\\x6d\\x05\\x28\\x06\\xfb\\x5e\\xfc\\xfd\\xfb\"\n\"\\x6a\\xf8\\xfd\\x05\\x27\\x06\\xf7\\x9a\\xfd\\x6d\\x05\\x0e\\xf7\\xa2\\x34\\x1d\\x0e\\x84\\x6e\\x1d\\x84\\x28\\x0a\\x0e\\x4c\\x2d\\x0a\\x0e\\xfc\\x20\\xf7\\x8e\"\n\"\\x20\\x1d\\xfb\\x4e\\xfe\\x41\\xf7\\x4e\\xd3\\x24\\xf9\\xb1\\xf2\\x06\\x0e\\xfc\\x20\\xba\\xf9\\x6d\\x15\\x54\\x06\\xf7\\x81\\xfd\\x81\\x05\\xc2\\x06\\x0e\\xfc\"\n\"\\x20\\xa2\\xfb\\x68\\x15\\xf7\\x4e\\xfa\\x41\\xfb\\x4e\\x43\\xf2\\xfd\\xb1\\x24\\x06\\x0e\\xfb\\x61\\xf7\\x59\\xf9\\x59\\x15\\xfb\\x2d\\xfc\\x10\\x05\\xd0\\x06\"\n\"\\xf7\\x0d\\xf7\\xc0\\xf7\\x0e\\xfb\\xc0\\x05\\xd0\\x06\\xfb\\x2f\\xf8\\x10\\x05\\x0e\\xf8\\xd6\\xfb\\x12\\x9c\\x0a\\xfc\\x58\\xf7\\x32\\xf8\\x71\\x15\\xf3\\x5b\"\n\"\\x07\\x8a\\xc4\\x9a\\xa7\\xad\\x90\\x08\\xb1\\x07\\x50\\x86\\x69\\x5c\\x3c\\x1a\\x26\\x07\\x0e\\x25\\x1d\\x0e\\xc1\\xf9\\x6d\\x15\\xfd\\x6d\\xd6\\xce\\x07\\x4e\"\n\"\\xb3\\xc0\\x6e\\xd4\\x1b\\xf7\\x1e\\xe5\\xf7\\x05\\xf7\\x42\\xf7\\x3e\\x36\\xf4\\xfb\\x1f\\x43\\x58\\x70\\x50\\x64\\x1f\\xf7\\xa8\\x07\\xf7\\x26\\xfb\\xa0\\x15\"\n\"\\xe8\\xc7\\x3a\\xfb\\x11\\xfb\\x0b\\x4d\\xa2\\x1d\\xfb\\x42\\x33\\x1d\\x0e\\x5a\\x0a\\x0e\\x29\\x1d\\x0e\\xfc\\x20\\xf7\\x96\\x35\\x0a\\x0e\\xf8\\x28\\xf8\\xa0\"\n\"\\x32\\x0a\\x70\\x1d\\x0e\\xfc\\x58\\xf7\\x2a\\x88\\x0a\\x0e\\xfc\\x58\\xd1\\xf8\\xa0\\x6a\\x0a\\xfb\\x42\\x6b\\x0a\\x0e\\xfc\\x58\\x43\\x1d\\x0e\\xf7\\x33\\xd1\"\n\"\\x20\\x0a\\xfc\\xa0\\x9f\\x0a\\xc9\\xae\\x65\\x48\\x1e\\xfb\\xfd\\x9f\\x0a\\xc8\\xaf\\x64\\x49\\x1e\\xfb\\xfd\\xdf\\xf8\\x1d\\x07\\xe9\\x55\\xbf\\x29\\x45\\x61\"\n\"\\x76\\x50\\x5a\\x1e\\xc3\\x6c\\x61\\xa3\\x47\\x1b\\x45\\x5c\\x71\\x4c\\x5f\\x1f\\xd5\\x07\\x0e\\x35\\x1d\\x0e\\x2a\\x1d\\x0e\\xc1\\xfb\\x6e\\x15\\xdf\\x86\\x0a\"\n\"\\xf7\\x44\\x35\\xf7\\x02\\xfb\\x1f\\x44\\x52\\x6b\\x4d\\x64\\x1f\\xda\\x3e\\x77\\x0a\\xf8\\x83\\xfb\\x6e\\x15\\xf9\\x7a\\x41\\x45\\x07\\xc2\\x64\\x50\\xa9\\x46\"\n\"\\x1b\\xfb\\x1e\\x31\\xfb\\x05\\xfb\\x42\\xfb\\x3e\\xe0\\x22\\xf7\\x1f\\xd4\\xbd\\xa5\\xc4\\xb2\\x1f\\xfb\\xaa\\x07\\xfb\\x26\\xf9\\x3b\\x15\\xe4\\xc4\\x3c\\xfb\"\n\"\\x13\\xfb\\x0c\\x8e\\x0a\\xe7\\x1f\\x0e\\xfb\\xe9\\x37\\x0a\\x0e\\xfb\\x42\\x31\\x1d\\x0e\\xfc\\x20\\x4b\\x1d\\x0e\\x26\\x1d\\x0e\\xfb\\x42\\xf7\\xb1\\x96\\x0a\"\n\"\\xfc\\x3d\\xfb\\x20\\xf8\\x3d\\x05\\x2d\\x06\\xf7\\x4c\\xfc\\xa0\\x05\\x0e\\xbb\\x2c\\x0a\\x0e\\xfb\\x42\\xf7\\xb8\\xf7\\xa3\\x15\\xf7\\x44\\xf7\\x91\\x05\\x2d\"\n\"\\x06\\xfb\\x12\\xfb\\x52\\xfb\\x12\\xf7\\x52\\x05\\x2c\\x06\\xf7\\x43\\xfb\\x95\\xfb\\x4d\\xfb\\x9f\\x05\\xea\\x06\\xf7\\x19\\xf7\\x5d\\xf7\\x17\\xfb\\x5d\\x05\"\n\"\\xec\\x06\\x0e\\xfb\\x42\\x2b\\x0a\\x0e\\xfb\\x42\\x3e\\x1d\\x0e\\xfb\\xe8\\xf7\\xa8\\x20\\x1d\\x5d\\x06\\x46\\x8a\\x61\\x59\\x8d\\x3a\\x08\\xfb\\x3a\\x07\\x8c\"\n\"\\x32\\x76\\x65\\x51\\x80\\x08\\x46\\x07\\xc5\\x80\\xa0\\x65\\x8a\\x32\\x08\\xfb\\x3a\\x07\\x89\\x3a\\xb5\\x59\\xd0\\x8a\\x08\\xb9\\xcc\\x7c\\x06\\x59\\x8c\\x7e\"\n\"\\x99\\xbf\\x1a\\xf7\\x49\\x07\\x8a\\xde\\x6f\\xc1\\x56\\xa0\\x08\\xc5\\xa0\\xa3\\xb9\\xe5\\x1a\\xf7\\x49\\x07\\xbf\\x98\\x99\\xbd\\x8c\\x1e\\x9a\\x06\\x0e\\xfc\"\n\"\\x32\\xef\\x20\\x1d\\xfe\\x41\\xc7\\xfa\\x41\\x07\\x0e\\xfb\\xe8\\xa8\\xfb\\x68\\x15\\xba\\x06\\xd1\\x8c\\xb5\\xbd\\x89\\xdc\\x08\\xf7\\x3a\\x07\\x8a\\xe4\\xa0\"\n\"\\xb1\\xc3\\x96\\x08\\xd0\\x07\\x53\\x96\\x76\\xb1\\x8c\\xe4\\x08\\xf7\\x3a\\x07\\x8d\\xdc\\x61\\xbd\\x45\\x8c\\x08\\x5c\\x4a\\x9b\\x06\\xbd\\x8a\\x99\\x7d\\x57\"\n\"\\x1a\\xfb\\x49\\x07\\x8c\\x38\\xa7\\x55\\xc0\\x76\\x56\\x77\\x6f\\x55\\x8a\\x38\\x08\\xfb\\x49\\x07\\x57\\x7e\\x7d\\x58\\x8a\\x1e\\x7b\\x06\\x0e\\x31\\xf8\\x5b\"\n\"\\xf8\\x2f\\x15\\x56\\x8c\\x7c\\x75\\x66\\x1b\\x7c\\x7c\\x90\\x97\\x77\\x1f\\xfb\\x09\\xd0\\x05\\x96\\x7a\\x78\\x90\\x79\\x1b\\x4a\\x65\\x59\\x2c\\x86\\x1f\\xc0\"\n\"\\x06\\x8d\\xa2\\x8d\\x95\\x8f\\x95\\x08\\xa1\\x95\\x9b\\x98\\x9e\\x1b\\x95\\xa2\\x83\\x85\\x95\\x1f\\xed\\x4c\\x05\\x7b\\xa5\\xa9\\x81\\xa4\\x1b\\xcc\\xb3\\xbc\"\n\"\\xd9\\x1f\\x9b\\x07\\x0e\\xfb\\xe9\\xf7\\x0e\\xfb\\x61\\x15\\xde\\xf7\\xe6\\x06\\x75\\xf7\\x73\\x05\\x64\\x06\\x75\\xfb\\x73\\x05\\x8a\\xf7\\xb3\\x15\\xdf\\xf3\"\n\"\\x37\\x06\\x0e\\xf7\\xcc\\xf8\\x62\\x15\\xc8\\x86\\xb3\\x61\\x92\\x48\\x08\\xdf\\x06\\x85\\xf7\\x06\\x46\\xd0\\xfb\\x09\\x93\\x08\\xe4\\x61\\x31\\x07\\xfb\\x1b\"\n\"\\x7d\\x38\\xfb\\x00\\xfb\\x37\\x1a\\xfb\\x33\\xde\\x23\\xf7\\x1b\\x7f\\x1e\\x29\\xb5\\xec\\x07\\xf7\\x08\\x91\\xd6\\xd8\\x92\\xf7\\x0c\\x08\\x37\\x06\\x7f\\x3c\"\n\"\\x65\\x62\\x4b\\x84\\x08\\x61\\x8d\\x15\\x38\\x98\\x5b\\xd3\\xf7\\x05\\x1a\\xf7\\x0d\\xb8\\xd2\\xe1\\x9b\\x1e\\x0e\\xf8\\x02\\xf8\\x0c\\x15\\xfb\\x34\\x06\\x84\"\n\"\\x98\\x86\\x94\\x87\\x91\\x76\\xb2\\x18\\x7c\\xa6\\x84\\xa5\\xa7\\x1a\\xd7\\xc3\\xbe\\xe0\\xe2\\xb9\\x58\\x24\\x8e\\x1e\\xe3\\x06\\x8a\\xc8\\x83\\xb2\\x78\\xac\"\n\"\\x08\\xc9\\x67\\x44\\xb0\\x36\\x1b\\xfb\\x1a\\x23\\x2e\\xfb\\x0d\\x5f\\x92\\x78\\xb9\\x3f\\x1f\\x3a\\x54\\xf7\\x02\\x06\\x9b\\x71\\x93\\x70\\x72\\x1a\\x4d\\x6a\"\n\"\\x59\\x2f\\x3c\\x1e\\xbb\\x49\\x05\\xa4\\xb2\\xae\\x97\\xae\\x1b\\xa0\\xa3\\x87\\x84\\xa0\\x1f\\x6e\\xde\\xa5\\x85\\xb0\\x1b\\xbf\\xb2\\x9c\\xb2\\xb3\\x1f\\x61\"\n\"\\xcd\\x05\\x77\\x6e\\x6f\\x81\\x71\\x1b\\x79\\x78\\x8f\\x97\\x61\\x1f\\x97\\x64\\x7b\\x8e\\x70\\x1b\\x60\\x63\\x7e\\x71\\x64\\x1f\\xe5\\xe6\\xa7\\xb9\\xbf\\x1a\"\n\"\\x9e\\x86\\xa2\\x81\\xa8\\x1e\\xf7\\x1c\\x06\\x0e\\xfc\\x20\\xf7\\xe1\\x2f\\x1d\\x0e\\xf8\\x83\\xf7\\xf6\\x15\\xfb\\x2b\\x06\\xf7\\x5d\\xf7\\xf7\\x05\\x36\\x06\"\n\"\\xfb\\x47\\xfb\\xd6\\xfb\\x4d\\xf7\\xd6\\x05\\x36\\x06\\xf7\\x61\\xfb\\xf7\\x05\\xfb\\x2b\\x58\\xf7\\x40\\x3e\\xfb\\x40\\x58\\xf7\\x40\\xfb\\x43\\xe3\\xf7\\x43\"\n\"\\xf7\\x3e\\xbe\\xfb\\x3e\\xd8\\xf7\\x3e\\x06\\x0e\\xf8\\x67\\xf8\\x62\\x15\\xfb\\x05\\x06\\x97\\xd1\\x05\\xdd\\x9a\\xab\\xb7\\xba\\x1b\\x9b\\x96\\x87\\x7d\\xa4\"\n\"\\x1f\\xa9\\xda\\x05\\x98\\x6d\\x74\\x91\\x71\\x1b\\x63\\x60\\x79\\x6d\\x6b\\x1f\\x6d\\x6e\\x77\\x64\\x80\\x53\\x75\\x23\\x18\\xfb\\x11\\x45\\xf7\\x05\\x06\\x3d\"\n\"\\xfc\\x31\\x05\\x3e\\x7c\\x6d\\x67\\x57\\x1b\\x78\\x7d\\x90\\x96\\x7a\\x1f\\x7a\\x37\\x05\\x84\\x98\\x9d\\x88\\xa3\\x1b\\xbd\\xbe\\xa1\\xae\\xad\\x1f\\xab\\xac\"\n\"\\x9f\\xba\\x98\\xd1\\xd6\\xf8\\x21\\x18\\xf7\\x12\\x06\\x0e\\xf8\\x64\\x20\\x0a\\x93\\x07\\x9f\\x07\\xf5\\x45\\xd2\\x22\\x24\\x3a\\x42\\x2f\\x65\\x98\\x6e\\xaa\"\n\"\\x68\\x1e\\x41\\x64\\x6c\\x5f\\x48\\x1a\\x49\\xa6\\x5d\\xcc\\x5e\\x1e\\xf7\\x3e\\xfb\\x09\\x05\\xb0\\x71\\x9c\\x70\\x68\\x1a\\x58\\x64\\x68\\x53\\x66\\x6f\\x9a\"\n\"\\xa8\\x77\\x1e\\x7e\\x9e\\x87\\x9f\\xb2\\x1a\\x36\\x7c\\x06\\x6e\\x8e\\x77\\x93\\x75\\x1e\\x44\\xa5\\xcc\\x61\\xdf\\x1b\\xf6\\xda\\xd2\\xec\\xb6\\x7e\\xa9\\x64\"\n\"\\xb8\\x1f\\xd3\\xa6\\xaf\\xbf\\xd8\\x1a\\xd3\\x6e\\xb7\\x3c\\xbe\\x1e\\xfb\\x26\\xe9\\x05\\x61\\xa7\\x7c\\x9f\\xa8\\x1a\\xbc\\xb1\\xaf\\xbe\\xc6\\xb1\\x63\\x4d\"\n\"\\x1e\\x7a\\x07\\x82\\x07\\xfb\\x54\\xfb\\xbb\\x15\\x56\\xb2\\x7e\\x9f\\xb3\\x1a\\xb3\\x9e\\xa6\\xbf\\xad\\x1e\\xf7\\x34\\xfb\\x01\\x05\\xbc\\x6a\\xa3\\x66\\x62\"\n\"\\x1a\\x62\\x71\\x66\\x5d\\x72\\x1e\\x0e\\xf8\\x79\\xf7\\x52\\x15\\x55\\xc1\\x05\\x9f\\xaa\\x94\\xab\\xad\\x1a\\xac\\x81\\xad\\x7b\\xa5\\x1e\\xc2\\xc2\\x52\\xc5\"\n\"\\x50\\x56\\x05\\x9d\\x71\\x68\\x95\\x66\\x1b\\x67\\x6b\\x82\\x7a\\x6e\\x1f\\x54\\xc2\\x53\\x56\\xc1\\x54\\x05\\x77\\x6e\\x7f\\x66\\x67\\x1a\\x66\\x97\\x65\\x9f\"\n\"\\x70\\x1e\\x5b\\x5a\\xc3\\x52\\xbe\\xbe\\x05\\x7b\\xa5\\xae\\x82\\xac\\x1b\\xb3\\xac\\x95\\x9f\\xa6\\x1f\\xc0\\x56\\x05\\xfb\\x2d\\xf7\\xc9\\x15\\xc7\\xba\\x5c\"\n\"\\x50\\x53\\x5b\\x5c\\x51\\x50\\x5b\\xba\\xc4\\xc5\\xbb\\xba\\xc5\\x1f\\x0e\\xfc\\x77\\xbb\\xf9\\x59\\x15\\xfb\\x03\\x07\\xa6\\xfb\\x1a\\x05\\xb3\\x48\\x0a\\x0e\"\n\"\\xfb\\xe9\\xf7\\x21\\xf8\\x71\\x15\\xf3\\x5b\\x07\\x8a\\xc4\\x9a\\xa7\\xad\\x90\\x08\\xb1\\x07\\x50\\x86\\x69\\x5c\\x3c\\x1a\\x26\\x07\\xf7\\x8f\\x16\\xf3\\x5b\"\n\"\\x07\\x8a\\xc4\\x9a\\xa7\\xad\\x90\\x08\\xb1\\x07\\x50\\x86\\x69\\x5c\\x3c\\x1a\\x26\\x07\\x0e\\xed\\x7e\\x0a\\xf7\\x61\\x32\\x82\\x0a\\x0e\\xfb\\xe9\\xe6\\x7e\"\n\"\\x0a\\x0e\\xfb\\xe9\\xf7\\x83\\xf7\\xd1\\x7f\\x0a\\x0e\\xfb\\x42\\xf7\\x90\\x35\\x0a\\xf7\\x4c\\xcf\\x9a\\x0a\\x38\\x22\\xde\\x06\\x0e\\xfb\\x42\\xf7\\x95\\x35\"\n\"\\x0a\\xf7\\x41\\xf7\\xa5\\x15\\x38\\xfd\\x6d\\xde\\x06\\x0e\\xf8\\xc5\\xf7\\xcc\\x15\\xfc\\xca\\x43\\xf8\\xca\\x06\\x0e\\x9c\\x1d\\xfc\\xe9\\xe3\\xf8\\xe9\\xf7\"\n\"\\x56\\x06\\x0e\\x9c\\x1d\\xfb\\xc7\\xfb\\x55\\x39\\xf7\\x55\\xfb\\x64\\xe3\\xf7\\x64\\xf7\\x56\\xdd\\xfb\\x56\\xf7\\xc7\\xf7\\x56\\x06\\x0e\\xfc\\x20\\x46\\x0a\"\n\"\\xfb\\x1d\\xf8\\x9e\\x20\\x1d\\xfb\\x8e\\x06\\xfb\\x12\\x29\\x22\\xfb\\x1b\\x41\\xa9\\x46\\xbf\\x60\\x1f\\xae\\x6e\\xae\\x7f\\xc2\\x88\\x08\\xfc\\x48\\xcb\\xf9\"\n\"\\xde\\xdd\\xfd\\xde\\xcb\\xf9\\xde\\xc4\\x07\\x0e\\xfb\\xd8\\xf7\\x43\\xf8\\x6a\\x15\\x46\\x53\\x53\\x46\\x46\\xc3\\x53\\xd0\\xcf\\xc4\\xc3\\xce\\xd2\\x54\\xc3\"\n\"\\x45\\x1f\\x0e\\xfc\\x58\\xcc\\xf3\\x15\\x23\\xbb\\x07\\x8d\\x51\\x7c\\x70\\x67\\x86\\x08\\x65\\x07\\xc7\\x8f\\xad\\xba\\xdb\\x1a\\xf0\\x07\\x0e\\xfb\\xe9\\xba\"\n\"\\xf3\\x71\\x1d\\xfb\\xe9\\xbc\\xf9\\x59\\x71\\x1d\\xf7\\x90\\xf7\\xd1\\x7f\\x0a\\xf7\\x5b\\xe4\\x15\\xfb\\x2e\\xf7\\x0d\\x05\\x38\\x07\\xf7\\x00\\x38\\xfb\\x00\"\n\"\\x38\\x05\\x38\\x07\\xf7\\x2e\\xf7\\x0e\\x05\\x0e\\xf7\\xda\\xf7\\x6f\\xf3\\x3b\\x1d\\xf7\\xe1\\xf3\\x3b\\x1d\\xf7\\xe1\\xf3\\x24\\x1d\\xf7\\xda\\xf7\\x32\\xf9\"\n\"\\x6c\\x15\\x39\\x48\\x48\\x38\\x37\\xce\\x48\\xde\\xdc\\xcf\\xce\\xdd\\x93\\x0a\\x59\\x62\\x63\\x5a\\x58\\x63\\xb4\\xbd\\xbd\\xb3\\xb3\\xbd\\x1f\\xf7\\xe2\\xd1\"\n\"\\x15\\xfc\\x1f\\xfd\\x8a\\x05\\xcd\\x06\\xf8\\x1f\\xf9\\x8a\\x05\\x40\\xfc\\x5f\\x15\\x39\\x48\\x48\\x38\\x37\\xce\\x48\\xde\\xdc\\xcf\\xcf\\xdc\\xe0\\x49\\xce\"\n\"\\x37\\x1f\\x4f\\x04\\xbe\\xb3\\x63\\x58\\x5a\\x62\\x62\\x59\\x5a\\xc0\\x1d\\xf7\\xfc\\xc7\\x15\\x39\\x48\\x47\\x39\\x38\\xce\\x47\\xde\\xdc\\xcf\\xce\\xdd\\x93\"\n\"\\x0a\\x5a\\x62\\x62\\x5a\\x59\\xc0\\x1d\\x0e\\x4c\\xf7\\xa7\\xf7\\xd9\\x15\\x5c\\x07\\x8a\\x5e\\x7d\\x75\\x4a\\x52\\x08\\x40\\x47\\x72\\x5f\\x48\\x1a\\xfb\\x09\"\n\"\\xde\\x40\\xf7\\x17\\xf7\\x25\\xd5\\xda\\xf7\\x2f\\x1e\\x36\\x06\\xfb\\x00\\x64\\x5b\\x31\\x3d\\x58\\xb9\\xcf\\xb9\\xa1\\xb2\\xc0\\xba\\x1e\\xe1\\xd6\\x9e\\xa8\"\n\"\\xc6\\x1a\\xc2\\x07\\x31\\xea\\x15\\xe5\\xf3\\x31\\x06\\x0e\\xfb\\xe9\\xf7\\x1b\\xf9\\x78\\x22\\x0a\\xfb\\xe9\\xf7\\x50\\x41\\x1d\\xfb\\xe9\\xf7\\x08\\xf9\\x79\"\n\"\\x27\\x1d\\xfb\\xe9\\xf7\\x99\\xf9\\x61\\x36\\x0a\\xfb\\xe9\\xf7\\xc2\\xf9\\x51\\x28\\x1d\\xfb\\xe9\\x9a\\x77\\x1d\\xfb\\xe9\\xf7\\x6f\\xf9\\x60\\x24\\x1d\\xfb\"\n\"\\xe9\\xf7\\x1a\\x3a\\x0a\\xfb\\xe9\\xf7\\x3b\\xf9\\x86\\x27\\x0a\\x0e\\xfb\\xe9\\xf7\\x39\\x16\\x61\\x2f\\x97\\x84\\x05\\x91\\x4d\\x1d\\xae\\xc5\\x9b\\x1d\\xa2\"\n\"\\xc3\\x05\\x0e\\xfb\\xe9\\xc8\\xf9\\x78\\x39\\x0a\\xfb\\xe9\\xf7\\x2e\\x16\\x4e\\x75\\x67\\x62\\x5b\\x1a\\x64\\x5b\\x1d\\xa1\\xa4\\x86\\xa1\\x1b\\x9e\\x60\\x1d\"\n\"\\xb7\\x1d\\x73\\x1b\\x5c\\x72\\x9e\\xae\\xb5\\xa0\\xa2\\xd4\\xb4\\x1f\\x0e\\xfb\\xe9\\xf7\\x66\\xf8\\xe3\\x42\\x1d\\xf7\\xda\\x8c\\x0a\\xf7\\xda\\x5e\\x0a\\x0e\"\n\"\\xfb\\xc4\\xf7\\xd4\\xf7\\xf6\\x15\\xfb\\xa9\\x58\\xf7\\xa9\\x06\\x98\\xf7\\x26\\x15\\x89\\x87\\x89\\x8a\\x87\\x1b\\x7c\\x83\\x93\\x9a\\x1f\\xf7\\x47\\x07\\xca\"\n\"\\x63\\xaa\\x39\\x39\\x5e\\x66\\x44\\x89\\x1e\\xc6\\x06\\xb6\\x92\\x9b\\x98\\xb8\\x1b\\xb7\\xa2\\x7c\\x6e\\x1f\\x7e\\x07\\x89\\x73\\x82\\x85\\x65\\x88\\x61\\x88\"\n\"\\x62\\x83\\x7a\\x84\\x08\\x66\\x7b\\x77\\x6d\\x62\\x1a\\x50\\xb3\\x66\\xcb\\xb2\\xac\\x99\\xa8\\xac\\x1e\\x6c\\x91\\x9b\\x7f\\xac\\x1b\\x97\\x92\\x8c\\x90\\x98\"\n\"\\x1f\\x31\\xf7\\x04\\x15\\x67\\x61\\x6d\\x5a\\x67\\x76\\x9c\\xa9\\xab\\x9f\\x9a\\xbf\\x92\\x1e\\xbd\\x93\\x97\\x8d\\x99\\x91\\x08\\x0e\\xf7\\x41\\xf8\\x2a\\x15\"\n\"\\xf7\\xd7\\x2e\\xfc\\x09\\x07\\x3b\\x53\\x05\\x3e\\x07\\xdb\\xc4\\x05\\xfb\\xac\\xf8\\x6c\\xdd\\xfc\\x0f\\xf7\\x8b\\x07\\xf7\\x3f\\xf7\\x0e\\x05\\xd7\\x07\\x0e\"\n\"\\xf3\\x53\\x0a\\x0e\\xf7\\xda\\xf8\\xfe\\xf7\\xdb\\x15\\xf7\\xdc\\xdd\\xfb\\xdc\\xf7\\x82\\xf7\\xe4\\xdd\\xfc\\x41\\x3f\\x06\\xc7\\x60\\x51\\xa7\\x39\\x1b\\x42\"\n\"\\x41\\x6e\\x5a\\x59\\x1f\\x47\\x48\\x69\\x23\\xfb\\x1c\\x1a\\xfb\\x10\\xa7\\x2f\\xc6\\x47\\x1e\\x4f\\xbf\\xd5\\x6b\\xe0\\x1b\\xdc\\xc4\\xa8\\xcc\\xb9\\x1f\\x41\"\n\"\\xf8\\x46\\xdd\\xfb\\xe9\\x07\\x2e\\xef\\x15\\x3a\\x63\\x4f\\x64\\x37\\x1b\\x49\\x56\\xa6\\xbe\\x68\\x1f\\x67\\xc1\\x7c\\xcb\\xf1\\x1a\\xf1\\x9a\\xcc\\xaf\\xc1\"\n\"\\x1e\\xbe\\xae\\xc0\\xa6\\xce\\x1b\\xdf\\xc6\\x64\\x3a\\xb3\\x1f\\x0e\\xfb\\xc9\\xf7\\xce\\xf7\\xf6\\x15\\xfb\\x9b\\x58\\xf7\\x9b\\x06\\xfb\\x18\\xf8\\x4b\\x15\"\n\"\\x30\\x58\\x4d\\xfb\\x02\\xfb\\x01\\xbe\\x4d\\xe6\\xe5\\xbf\\xc9\\xf6\\xf7\\x05\\x59\\xc8\\x2f\\x1f\\x57\\x04\\xc0\\xaa\\x5e\\x3f\\x42\\x6b\\x5e\\x57\\x57\\x6b\"\n\"\\xb8\\xd6\\xd5\\xab\\xb8\\xbf\\x1f\\x0e\\xf7\\x6b\\x51\\x0a\\x0e\\xfc\\x20\\xf7\\x46\\x20\\x0a\\x30\\x1d\\x06\\x0e\\xfc\\x58\\xf7\\x26\\xf8\\x39\\x15\\xf7\\xc8\"\n\"\\x38\\xfb\\xf4\\x07\\x4c\\x59\\x05\\x4b\\x07\\xca\\xbd\\x05\\xfb\\xcd\\xde\\xf7\\xf9\\x07\\xcd\\xbe\\x05\\xcb\\x07\\x0e\\x4c\\x55\\x0a\\x0e\\xf7\\xa2\\xf9\\xb8\"\n\"\\xf7\\x33\\x15\\x46\\x74\\x89\\x1d\\xe1\\x69\\x3b\\xbf\\x29\\x1b\\x39\\x45\\x64\\x48\\x62\\x1f\\xd1\\x63\\x48\\xaf\\x32\\x1b\\xfb\\x2c\\x36\\x26\\xfb\\x47\\xfb\"\n\"\\x48\\xe0\\x25\\xf7\\x2c\\xe3\\xcb\\xad\\xd0\\xb5\\x1f\\x48\\xb3\\xd0\\x67\\xe0\\x1b\\xf7\\x0b\\xde\\xcf\\xf7\\x06\\xa0\\x1f\\xfc\\xf7\\xf7\\xc3\\x15\\xe9\\xc3\"\n\"\\x3f\\xfb\\x16\\xfb\\x11\\x52\\x3e\\x2e\\x2e\\x52\\xd8\\xf7\\x14\\xf7\\x12\\xc4\\xd8\\xe8\\x1f\\xf7\\x82\\xfb\\x34\\x15\\xec\\x92\\xc5\\xca\\xe0\\x1b\\xe0\\xc6\"\n\"\\x4a\\x2c\\x1f\\x0e\\x4c\\xf7\\xa3\\xf7\\xf1\\x15\\x9b\\x06\\xc0\\xa3\\x88\\x81\\xa4\\x1f\\xbe\\x78\\xa7\\x5f\\x4f\\x1a\\x31\\x46\\x4e\\x28\\x1e\\x6b\\x06\\x82\"\n\"\\x3d\\x06\\x88\\x9d\\x95\\x8a\\x9f\\x1b\\xf7\\x2c\\xeb\\xe7\\xf7\\x26\\xc3\\x7b\\xb1\\x65\\xae\\x1f\\x70\\xa4\\x70\\x98\\x57\\x9b\\x08\\xe1\\xa7\\xb2\\xb8\\xd2\"\n\"\\x1a\\xf7\\x02\\x33\\xd5\\xfb\\x16\\x48\\x4d\\x77\\x68\\x5d\\x1e\\x63\\x6b\\x7a\\x63\\x4b\\x1a\\xfc\\xae\\xde\\xf8\\xae\\x07\\xd0\\xc3\\xb7\\xe1\\xdc\\xc4\\x5e\"\n\"\\x4b\\x4a\\x4c\\x5d\\x32\\x1e\\x81\\x06\\x0e\\xfb\\xe9\\xf7\\x2b\\x95\\x1d\\x0e\\x31\\xb3\\xf8\\x0b\\x15\\x45\\xf8\\x46\\xfb\\x6f\\xd1\\xf7\\xb5\\x07\\x0e\\xf8\"\n\"\\xb4\\xbc\\x15\\x89\\x81\\x87\\x8b\\x87\\x1b\\x6e\\x7b\\x99\\xa6\\x1f\\xf8\\x48\\x38\\xfb\\xbd\\x07\\x20\\x53\\x45\\x34\\x4a\\x61\\xb3\\xca\\x1e\\xf8\\x07\\x38\"\n\"\\xfd\\x7c\\xde\\xf7\\x73\\x07\\x79\\xa4\\xa8\\x83\\xaf\\x1b\\xcf\\xc2\\xa7\\xc2\\xb3\\x1f\\x52\\x8d\\xa6\\x71\\xc4\\x1b\\x9d\\x98\\x8d\\x92\\xa5\\x1f\\x0e\\xf7\"\n\"\\xda\\xf7\\xb1\\xf9\\x36\\x15\\xf7\\x2d\\xc2\\xfc\\x0b\\x54\\xf7\\x2e\\xfc\\x12\\xcf\\x06\\xf8\\x63\\x16\\xf7\\x0f\\xf7\\xe9\\x05\\xfb\\xe9\\xce\\xf8\\x49\\x30\"\n\"\\x07\\xfb\\x17\\xfb\\xfe\\xfb\\x18\\xf7\\xfe\\x05\\x2d\\xfc\\x49\\xce\\xf7\\xe9\\x06\\xf7\\x0d\\xfb\\xe9\\x05\\x0e\\xbb\\x59\\x0a\\xf7\\x34\\xf7\\x10\\xf8\\xd8\"\n\"\\x15\\xfb\\xbc\\xc9\\xf8\\x3d\\x60\\x07\\x7a\\x4b\\x7d\\x80\\x43\\x84\\x7c\\x8a\\x18\\x5d\\x07\\xf8\\xc2\\xf7\\x15\\x45\\x1d\\xf7\\x38\\xfd\\x1f\\x5b\\x0a\\x71\"\n\"\\x64\\x86\\x2a\\x19\\xf7\\xc4\\x06\\x0e\\x31\\xf8\\xaa\\xf8\\x34\\x94\\x1d\\xfb\\xb3\\xbd\\x1d\\x84\\xf7\\x4c\\xf7\\x51\\x15\\xf7\\x79\\x06\\xf7\\x0b\\xdf\\xe1\"\n\"\\xf7\\x0e\\xf7\\x18\\x36\\xdb\\xfb\\x1f\\x1f\\xfb\\x64\\xf7\\x0c\\x2e\\xfd\\x6d\\xe8\\x06\\xf7\\xa3\\x04\\xf7\\x94\\xf7\\x56\\x07\\xe2\\xbe\\x5b\\x3b\\x3a\\x58\"\n\"\\x5c\\x34\\x1f\\x0e\\xf7\\x34\\xf7\\x11\\x95\\x1d\\xf8\\xda\\xf7\\x15\\x45\\x1d\\x9e\\x7f\\x1d\\x31\\xf8\\xaa\\xf7\\xa3\\x15\\xfc\\x78\\x45\\xf8\\x78\\x06\\xfb\"\n\"\\x52\\x2a\\x15\\x23\\x23\\xf3\\x06\\xf8\\x6c\\x04\\x23\\x23\\xf3\\x06\\x0e\\xfc\\x32\\xef\\x20\\x1d\\xfc\\x25\\xc7\\xf8\\x25\\x07\\x4f\\xfc\\xb0\\x15\\xfc\\x25\"\n\"\\xc7\\xf8\\x25\\x07\\x0e\\xfb\\xa6\\xf7\\x5c\\xf9\\x42\\x15\\x37\\x47\\x47\\x38\\x38\\xcf\\x46\\xdd\\xe0\\xcf\\xce\\xe0\\xde\\x47\\xcf\\x38\\x1f\\x52\\x04\\xbf\"\n\"\\xb5\\x61\\x57\\x56\\x61\\x61\\x55\\x59\\x60\\xb6\\xbf\\xbf\\xb5\\xb5\\xc0\\x1f\\x0e\\xc1\\xfb\\x6e\\x15\\xde\\x86\\x0a\\xf7\\x42\\x33\\xf7\\x04\\xfb\\x1c\\x48\"\n\"\\x51\\x6e\\x58\\x67\\x1f\\xf7\\x93\\x38\\x07\\xf7\\x79\\xfb\\x91\\x8e\\x1d\\xf7\\x34\\xf7\\x24\\x57\\x0a\\xf8\\x80\\xf7\\x4a\\x45\\x1d\\x80\\x7f\\x1d\\xfb\\xe9\"\n\"\\xf7\\xce\\xf7\\xea\\x5b\\x0a\\x70\\x64\\x87\\x2a\\x19\\xf7\\xc4\\x06\\x0e\\xca\\xf7\\xa4\\xf7\\xd9\\x15\\xf7\\x1a\\x06\\xb8\\x9e\\x77\\x5b\\x1f\\x8a\\x63\\x05\"\n\"\\x6f\\x91\\x6f\\x94\\x76\\x1e\\xda\\xa4\\x06\\x79\\x98\\x87\\x97\\x8a\\xc5\\x8a\\xd2\\x84\\x9c\\x66\\xa3\\x08\\xb5\\xa9\\x97\\xa2\\xb9\\x1a\\xe0\\x5d\\xb4\\x2c\"\n\"\\x1e\\xfb\\x62\\xfc\\x51\\xd1\\x06\\xf7\\x8c\\x04\\xf7\\x1a\\xf7\\x15\\x07\\xc0\\xa1\\x77\\x5c\\x5c\\x74\\x77\\x57\\x1f\\x6b\\xf7\\xf6\\x15\\xfb\\x67\\xfb\\x3f\"\n\"\\xfb\\x3f\\xfb\\x67\\xfb\\x64\\xf7\\x40\\xfb\\x42\\xf7\\x61\\xf7\\x6d\\xf7\\x3e\\xf7\\x3d\\xf7\\x6a\\xf7\\x66\\xfb\\x3f\\xf7\\x3f\\xfb\\x67\\x1f\\x4d\\x04\\xf7\"\n\"\\x41\\xf7\\x21\\xfb\\x23\\xfb\\x44\\xfb\\x47\\xfb\\x20\\xfb\\x22\\xfb\\x46\\xfb\\x3d\\xfb\\x21\\xf7\\x26\\xf7\\x42\\xf7\\x45\\xf7\\x21\\xf7\\x23\\xf7\\x41\\x1f\"\n\"\\x0e\\x31\\xf8\\xb4\\xf7\\x9f\\x15\\xfc\\x8c\\x45\\xf8\\x8c\\x06\\x0e\\xf7\\x6f\\xf8\\xf9\\x15\\xbf\\x5f\\x96\\x81\\xae\\x68\\x08\\x95\\x6d\\x7d\\x8e\\x78\\x1b\"\n\"\\x63\\x63\\x7f\\x74\\x68\\x1f\\x47\\x5f\\x68\\x38\\xfb\\x09\\x1a\\xfb\\x47\\xe1\\x25\\xf7\\x2b\\xf7\\x2c\\xe0\\xf0\\xf7\\x49\\xe7\\x76\\xcf\\x58\\xd9\\x1e\\x65\"\n\"\\xc4\\x66\\xb1\\x43\\xc2\\xe5\\xb4\\x18\\x63\\xb0\\x2a\\x5e\\x48\\xb6\\x7e\\x92\\x6c\\x98\\x19\\x5f\\x5f\\xb6\\x73\\x98\\x83\\xa5\\x77\\x19\\x36\\x63\\xaf\\x64\"\n\"\\x05\\xf7\\x2b\\x21\\x40\\x1d\\x31\\xf8\\x4a\\xf8\\x3f\\x15\\xfb\\x27\\xfb\\x26\\xfb\\x26\\xf7\\x25\\x5a\\x5a\\xf7\\x26\\xfb\\x26\\xfb\\x27\\xfb\\x27\\xbd\\x5a\"\n\"\\xf7\\x26\\xf7\\x26\\xf7\\x27\\xfb\\x27\\xbd\\xbd\\xfb\\x27\\xf7\\x27\\xf7\\x26\\xf7\\x26\\x05\\x0e\\xfb\\xe9\\xf7\\x12\\x57\\x0a\\x0e\\xca\\xf8\\xb4\\xf8\\x49\"\n\"\\x15\\xf5\\x73\\x56\\xbc\\x32\\x1b\\xfb\\x0a\\x3c\\x2d\\xfb\\x21\\xfb\\x1d\\xda\\x2d\\xf7\\x07\\xc4\\xb9\\xa2\\xba\\xac\\x1f\\x9e\\xa7\\x95\\xa7\\x97\\xc7\\x08\"\n\"\\x44\\x06\\x3a\\x7e\\x66\\x60\\x53\\x1b\\x6b\\x67\\x9d\\xa7\\x76\\x1f\\x74\\xa8\\x7e\\xb7\\xbe\\x1a\\xf4\\xbc\\xce\\xd7\\xc0\\xa7\\x70\\x49\\x9c\\x1e\\x23\\xf7\"\n\"\\xc5\\x15\\xfb\\x67\\xfb\\x3f\\xfb\\x3f\\xfb\\x67\\xfb\\x64\\xf7\\x40\\xfb\\x42\\xf7\\x61\\xf7\\x6d\\xf7\\x3e\\xf7\\x3d\\xf7\\x6a\\xf7\\x66\\xfb\\x3f\\xf7\\x3f\"\n\"\\xfb\\x67\\x1f\\x4d\\x04\\xf7\\x41\\xf7\\x21\\xfb\\x23\\xfb\\x44\\xfb\\x47\\xfb\\x20\\xfb\\x22\\xfb\\x46\\xfb\\x3d\\xfb\\x21\\xf7\\x26\\xf7\\x42\\xf7\\x45\\xf7\"\n\"\\x21\\xf7\\x23\\xf7\\x41\\x1f\\x0e\\x84\\x23\\x0a\\xad\\xf7\\xca\\x21\\x1d\\x84\\x23\\x0a\\x5b\\xf7\\xcb\\x2b\\x1d\\x84\\x23\\x0a\\x6d\\xf7\\xb1\\x22\\x1d\\x84\"\n\"\\x23\\x0a\\x6a\\xf7\\xca\\x3d\\x0a\\x84\\x23\\x0a\\x8a\\xf7\\xd8\\x27\\x0a\\x0e\\x84\\x23\\x0a\\xed\\xf7\\xb3\\x36\\x0a\\xbb\\xf8\\x0f\\x74\\x15\\xf7\\x44\\xef\"\n\"\\xed\\xf7\\x53\\xa1\\x1f\\x2b\\x06\\x83\\x59\\x81\\x69\\x7c\\x6d\\x45\\x0a\\xf7\\x4b\\xf7\\x4f\\xe3\\xf7\\x07\\xf7\\x22\\xc5\\x73\\x1d\\xb6\\x6d\\xa9\\x80\\xd7\"\n\"\\x80\\x6c\\x46\\x18\\x96\\x84\\x05\\x91\\x79\\x0a\\x7a\\x90\\xa3\\x5d\\x6f\\x0a\\x58\\x82\\x86\\x8b\\x89\\x7e\\x1f\\x0e\\x84\\x24\\x0a\\xf7\\x4c\\xf9\\xed\\x26\"\n\"\\x0a\\x84\\x24\\x0a\\xf7\\x06\\xf9\\xee\\x37\\x1d\\x84\\x24\\x0a\\xf7\\x18\\xf9\\xd4\\x22\\x1d\\x84\\x24\\x0a\\xf7\\x1d\\xf9\\xed\\x22\\x0a\\xfc\\x20\\x44\\x1d\"\n\"\\x71\\x3b\\x0a\\xfc\\x20\\x44\\x1d\\x29\\xfa\\x40\\x27\\x1d\\xfc\\x20\\x44\\x1d\\x3b\\xfa\\x1f\\x22\\x1d\\xfc\\x20\\x44\\x1d\\x3c\\xfa\\x3f\\x22\\x0a\\xbb\\xf9\"\n\"\\x1a\\x20\\x1d\\x33\\xfc\\xe8\\x06\\xfc\\x11\\xf8\\xe8\\x05\\x26\\xfd\\x6d\\xe3\\xf8\\xe3\\x06\\xf8\\x0c\\xfc\\xe3\\x05\\xf5\\x06\\xfb\\x47\\xfa\\x28\\x15\\x72\"\n\"\\x83\\x7f\\x80\\x7a\\x1b\\x7e\\x71\\x92\\x95\\x73\\x1f\\x9c\\x61\\x83\\x8d\\x77\\x1b\\x5f\\x6c\\x42\\x0a\\xf3\\x25\\x0a\\xa9\\xf7\\xac\\x26\\x0a\\xf3\\x25\\x0a\"\n\"\\x5d\\xf7\\xad\\x2b\\x1d\\xf3\\x25\\x0a\\x6f\\xf7\\x93\\x22\\x1d\\xf3\\x25\\x0a\\x6c\\xf7\\xac\\x3d\\x0a\\xf3\\x25\\x0a\\xf3\\xf7\\x95\\x6c\\x1d\\x84\\x29\\x0a\"\n\"\\xfb\\x14\\xf7\\xa7\\x2e\\x0a\\xbb\\xf8\\xbb\\xf9\\x6d\\x15\\x8c\\xfc\\x94\\x05\\x29\\x44\\x4f\\xfb\\x08\\xfb\\x08\\x44\\xc7\\xed\\x1e\\x5a\\x1d\\xfb\\x26\\xf7\"\n\"\\x02\\x2d\\xf7\\x3e\\xf7\\x3e\\xf7\\x02\\xea\\xf7\\x25\\x1e\\x8a\\xf8\\x94\\x05\\xfb\\x95\\xf7\\x66\\x21\\x1d\\xbb\\x41\\x0a\\xfb\\xdb\\xf7\\x67\\x2b\\x1d\\xbb\"\n\"\\x41\\x0a\\xfb\\xc9\\xf7\\x4d\\x22\\x1d\\xbb\\x41\\x0a\\xfb\\xcc\\xf7\\x66\\x3d\\x0a\\x84\\xf8\\x16\\x55\\x1d\\xfb\\x69\\xf7\\xf7\\x05\\xfb\\x07\\x06\\xf7\\xac\"\n\"\\xa0\\x0a\\xe8\\x07\\x76\\x3b\\x0a\\x84\\x28\\x0a\\x40\\x38\\x1d\\x4c\\x2d\\x0a\\xfb\\x6b\\xf7\\x25\\x2e\\x0a\\x25\\x1d\\x36\\xf8\\x75\\x26\\x0a\\x25\\x1d\\xfb\"\n\"\\x35\\xf8\\x76\\x15\\x2b\\xfb\\x2a\\x05\\xcb\\x06\\xda\\xeb\\xdb\\x2b\\x05\\xcb\\x06\\x2a\\xf7\\x2a\\x05\\x0e\\x25\\x1d\\xfb\\x25\\xf8\\x5c\\x22\\x1d\\x25\\x1d\"\n\"\\xfb\\x1f\\xf8\\x75\\x22\\x0a\\x25\\x1d\\xfb\\x06\\xf8\\x83\\x27\\x0a\\x0e\\x25\\x1d\\x7d\\xf8\\x5e\\x15\\x72\\x83\\x7f\\x73\\x0a\\x99\\x88\\x81\\xa3\\x1f\\x75\"\n\"\\xc5\\x93\\x89\\x9e\\x1b\\xbc\\xa9\\xae\\xd0\\x95\\x1f\\x0e\\xfb\\x42\\xf7\\x9c\\x74\\x15\\xf7\\x0f\\xde\\xd9\\xf7\\x11\\x92\\x1f\\x37\\x06\\x36\\x84\\x0a\\xf7\"\n\"\\x18\\x72\\x0a\\x21\\xaf\\x36\\xcc\\x5d\\x1f\\xa6\\x77\\xa2\\x82\\xb6\\x83\\x6c\\x44\\x18\\x97\\x84\\x05\\x91\\x91\\x1d\\x62\\x05\\x70\\xcc\\xa0\\x95\\x0a\\xaf\"\n\"\\xc4\\xb6\\x6e\\xa3\\x59\\x82\\x31\\x0a\\x29\\x1d\\xfb\\x07\\xf8\\x4a\\x21\\x1d\\x29\\x1d\\xfb\\x4c\\xf8\\x4b\\x27\\x1d\\x29\\x1d\\xfb\\x3a\\xf8\\x31\\x22\\x1d\"\n\"\\x64\\x1d\\xfc\\x20\\x2e\\x1d\\x7b\\x41\\x1d\\xfc\\x20\\x2e\\x1d\\x33\\xf9\\x79\\x27\\x1d\\xfc\\x20\\x2e\\x1d\\x45\\xf9\\x58\\x22\\x1d\\xfc\\x20\\x2e\\x1d\\x46\"\n\"\\xf9\\x78\\x22\\x0a\\x35\\x1d\\xf7\\x7b\\xf7\\x55\\x15\\x72\\x83\\x7f\\x53\\x1d\\x62\\x83\\x8d\\x76\\x1b\\x5f\\x6d\\x42\\x0a\\x2a\\x1d\\xa4\\xf7\\xaa\\x21\\x1d\"\n\"\\x2a\\x1d\\x5c\\xf7\\xab\\x2b\\x1d\\x2a\\x1d\\x6e\\xf7\\x91\\x22\\x1d\\x2a\\x1d\\x6f\\xf7\\xaa\\x22\\x0a\\x2a\\x1d\\xf2\\xf7\\x93\\x6c\\x1d\\xfb\\x42\\x31\\x1d\"\n\"\\x53\\xf7\\x69\\x42\\x1d\\x26\\x1d\\xfb\\x03\\x41\\x1d\\x26\\x1d\\xfb\\x48\\xf9\\x79\\x27\\x1d\\x26\\x1d\\xfb\\x36\\x3a\\x0a\\x26\\x1d\\xfb\\x38\\xf9\\x78\\x22\"\n\"\\x0a\\xfb\\x42\\x2b\\x0a\\xfb\\x63\\x39\\x1d\\xfb\\x42\\x2b\\x0a\\xfb\\x99\\xf7\\x53\\x22\\x1d\\xfb\\x42\\x3e\\x1d\\xfb\\x25\\xf7\\x21\\x15\\xeb\\xf7\\x2a\\x05\"\n\"\\x4b\\x06\\x3c\\x2b\\x3b\\xeb\\x05\\x4b\\x06\\xec\\xfb\\x2a\\x05\\x0e\\xfb\\xc9\\xbd\\xf8\\xd4\\x15\\xfb\\xc9\\xc6\\xf7\\x3e\\x07\\xcb\\xac\\xb4\\xbf\\xb1\\xa3\"\n\"\\x73\\x66\\x1e\\xfb\\x6a\\xc6\\xf7\\x7d\\x07\\xbe\\x61\\xad\\x4a\\x5e\\x6b\\x7b\\x67\\x70\\x1e\\xb6\\x07\\x0e\\xf7\\x98\\x35\\x0a\\xf7\\xa1\\xcf\\x58\\x0a\\x0e\"\n\"\\xf3\\x65\\x1d\\xf7\\x3e\\xcf\\x8b\\x0a\\x0e\\xf3\\x65\\x1d\\xf7\\x40\\xf7\\xa5\\x15\\x37\\xfd\\x6d\\xdf\\x06\\x0e\\xf7\\x34\\xf8\\xe2\\x2f\\x1d\\xfc\\x82\\xfb\"\n\"\\x15\\x15\\xfb\\xbc\\xc9\\xf8\\x3d\\x60\\x07\\x7a\\x4b\\x7d\\x80\\x43\\x84\\x7c\\x8a\\x18\\x5d\\x07\\xf9\\x31\\xfb\\xf8\\x66\\x1d\\x0e\\xf7\\x34\\xf8\\xff\\x2f\"\n\"\\x1d\\xbc\\x56\\x0a\\xfc\\x8a\\xf7\\xa7\\x67\\x1d\\x0e\\xf7\\x34\\xf8\\xff\\x2f\\x1d\\xbb\\xfc\\x79\\x15\\xb8\\xa6\\x99\\xa0\\xb3\\x1a\\xce\\x56\\xb9\\x40\\x3f\"\n\"\\x57\\x5d\\x48\\x63\\x98\\x76\\xb8\\x70\\x1e\\x5a\\x73\\x73\\x68\\x5c\\x1a\\x3d\\xc5\\x55\\xe0\\xdf\\xc6\\xc1\\xd9\\xba\\x73\\xae\\x59\\xa3\\x1e\\x45\\xf7\\x2e\"\n\"\\x15\\xb9\\xa4\\x1d\\xb7\\x1f\\x8c\\xfb\\x45\\x15\\xc0\\xaf\\x69\\x59\\x58\\x67\\x6a\\x54\\x57\\x68\\xad\\xbd\\xbd\\xae\\xad\\xc1\\x1f\\xfb\\xf6\\x20\\x0a\\xfb\"\n\"\\x70\\x06\\x6b\\xfb\\x7b\\x05\\xbc\\x06\\xa8\\xa3\\xa0\\x95\\xac\\x1b\\xc4\\xaf\\x64\\x4c\\x4e\\x67\\x66\\x52\\x5d\\x6e\\xa2\\xbb\\x7f\\x1f\\x56\\x06\\x92\\x68\"\n\"\\x91\\x7b\\x98\\x7b\\x08\\x6b\\xa3\\xb6\\x78\\xbb\\x1b\\xe1\\xc7\\xc9\\xe5\\xe0\\x53\\xc4\\x39\\x6d\\x73\\x83\\x7a\\x73\\x1f\\x9b\\xf7\\x0a\\x05\\xf7\\x46\\x06\"\n\"\\x0e\\xf7\\x34\\xf8\\xc1\\x2f\\x1d\\xf1\\x56\\x0a\\xfb\\xc8\\x20\\x0a\\xfb\\xb0\\x57\\xf7\\x79\\x06\\x26\\xfb\\x25\\x62\\x33\\x6b\\xfb\\x20\\x08\\xc3\\x06\\xa3\"\n\"\\xf7\\x1c\\xc0\\xf7\\x09\\xeb\\xf7\\x14\\x08\\x0e\\xf7\\xda\\x5e\\x0a\\xf7\\x24\\xf7\\xb8\\x26\\x0a\\x84\\x23\\x0a\\xfb\\x2b\\xf7\\xc2\\x15\\x8c\\x2f\\x0a\\xe8\"\n\"\\x3f\\x0a\\x50\\x06\\x61\\x86\\x6b\\x73\\x55\\xbe\\x1d\\x84\\x23\\x0a\\x0e\\x84\\x23\\x0a\\xfb\\xad\\xef\\x21\\x0a\\x84\\x23\\x0a\\xf7\\x1c\\xf7\\xa3\\x28\\x1d\"\n\"\\x84\\xf8\\x6e\\xf7\\x6f\\x15\\xd6\\xfb\\x6f\\x05\\xaf\\x06\\x44\\x6c\\x6d\\x6b\\x5b\\x1a\\x64\\x5b\\x1d\\xa1\\xa4\\x86\\xa1\\x1b\\x9e\\x60\\x1d\\xb7\\x1d\\x72\"\n\"\\x1b\\x5c\\x73\\x9e\\xaf\\xb4\\xa9\\xac\\xcd\\xaa\\x1f\\x82\\x1d\\x0e\\x84\\x23\\x0a\\x89\\xf7\\xd8\\x27\\x0a\\x53\\xf7\\x3a\\x21\\x1d\\x84\\x54\\x0a\\xbb\\x2a\"\n\"\\x0a\\xfb\\x35\\xf8\\x48\\x21\\x1d\\xbb\\x2a\\x0a\\xfb\\x1f\\xf7\\xb3\\x2e\\x0a\\xbb\\x2a\\x0a\\xfb\\x85\\xf8\\x49\\x27\\x1d\\xbb\\x2a\\x0a\\xfb\\x19\\xf8\\x30\"\n\"\\x24\\x1d\\x84\\x6e\\x1d\\xbb\\x6f\\x1d\\xab\\xf9\\x58\\x3c\\x0a\\xbb\\x59\\x0a\\x4d\\x8f\\x16\\xf8\\xf0\\x06\\xfb\\x97\\xf9\\x0a\\x05\\x33\\x06\\xb7\\x25\\x15\"\n\"\\xf7\\x4b\\xfc\\x5b\\x05\\xfc\\x01\\x06\\x0e\\x84\\x24\\x0a\\x96\\xf9\\xe5\\x6e\\x0a\\x84\\x24\\x0a\\xf7\\x65\\xf9\\x58\\x2e\\x0a\\x84\\x24\\x0a\\xf7\\x6a\\xf9\"\n\"\\xd5\\x24\\x1d\\x84\\x24\\x0a\\xf7\\xbf\\xf9\\xc6\\x28\\x1d\\xbc\\xf8\\x2e\\xfb\\xbc\\x15\\x89\\xa5\\x96\\x8a\\x9a\\x1b\\xc2\\xb5\\x98\\xa4\\xa9\\x1f\\xac\\xa9\"\n\"\\x97\\xaf\\xd8\\x1a\\xf9\\x1d\\x07\\xd0\\x78\\xbc\\x64\\xae\\x1e\\xaf\\x62\\x4f\\xa0\\x4d\\x1b\\x2a\\x49\\x64\\x25\\x42\\x1f\\xf7\\x0c\\x38\\xfd\\x64\\xe8\\xf8\"\n\"\\x34\\x07\\xdb\\x9c\\xc3\\xb1\\xb6\\x1e\\xb5\\xb0\\xbd\\xa1\\xc6\\x1b\\xbe\\xb9\\x7a\\x6e\\xa3\\x1f\\xa1\\x72\\x95\\x67\\x57\\x1a\\xfc\\xe3\\x07\\x48\\x8a\\x80\"\n\"\\x81\\x7d\\x1e\\x76\\x7e\\x72\\x82\\x62\\x1b\\x7f\\x80\\x8b\\x8d\\x79\\x1f\\x0e\\x84\\xf7\\x4b\\x9d\\x1d\\xf8\\x5b\\x06\\x44\\x6d\\x6d\\x6a\\x5b\\x1a\\x64\\x5b\"\n\"\\x1d\\xa2\\xa4\\x86\\xa1\\x1b\\x9d\\xad\\x90\\x90\\xa2\\x1f\\xb8\\x07\\x84\\x78\\x78\\x88\\x72\\x1b\\x5c\\x72\\x9e\\xae\\xb4\\xaa\\xae\\xcc\\xa9\\x1f\\xdd\\xfc\"\n\"\\x42\\x07\\x0e\\x84\\x24\\x0a\\x0e\\xf7\\x02\\xf7\\x94\\x8f\\x1d\\xfb\\x79\\xf9\\x1b\\x21\\x0a\\xbb\\x8d\\x1d\\x0e\\xf7\\x38\\xf9\\x04\\x92\\x1d\\xfb\\x7a\\xf8\"\n\"\\x21\\x21\\x0a\\xda\\xf7\\xcd\\x15\\x54\\x06\\x75\\x50\\x05\\xde\\x06\\x97\\x47\\x9f\\x52\\xa9\\x5b\\x08\\x4b\\xb2\\xd5\\x64\\xe0\\x1b\\xc7\\xc3\\x9a\\xaa\\xbd\"\n\"\\x1f\\xe8\\x07\\x5b\\x39\\x68\\x7e\\x5a\\x1b\\x34\\x52\\xce\\xf7\\x17\\x72\\x1f\\xf7\\x6a\\x06\\xa3\\xc6\\x05\\xfb\\x8a\\x06\\x8a\\x96\\x8b\\x93\\x96\\x1a\\x98\"\n\"\\x8c\\x95\\x8c\\x98\\x1e\\xf7\\xa2\\x06\\xa2\\xc6\\x05\\xfb\\xb0\\x06\\xf7\\x19\\xa7\\xbf\\xc9\\xe1\\x1b\\xc0\\xb4\\x7a\\x55\\xd4\\x1f\\xab\\xdb\\x05\\xba\\x49\"\n\"\\x52\\x9f\\x46\\x1b\\x35\\x4a\\x6a\\x47\\x5c\\x1f\\x69\\x59\\x75\\x53\\x81\\x4b\\x08\\x4c\\x06\\x75\\x50\\x05\\xda\\x06\\x89\\x78\\x8b\\x81\\x7e\\x1a\\x0e\\xfb\"\n\"\\x0f\\xd9\\xf9\\x6d\\x15\\xfd\\x6d\\xe8\\xf9\\x1b\\xf8\\x0c\\xdd\\x07\\x0e\\xf3\\x32\\x1d\\xfc\\x60\\xfa\\x3b\\x6e\\x0a\\xf3\\x32\\x1d\\xfc\\x07\\xfa\\x44\\x37\"\n\"\\x1d\\xf3\\x32\\x1d\\xfc\\x08\\x53\\x23\\x1d\\xf3\\x32\\x1d\\xfb\\x9f\\xfa\\x2b\\x24\\x1d\\xbb\\xde\\xf8\\x8a\\x15\\xfc\\x8a\\xe9\\xf7\\xe0\\xf8\\x0a\\xfb\\xe0\"\n\"\\xe8\\xf8\\x8a\\xd6\\xd1\\x40\\xf7\\x31\\x2e\\xfb\\x31\\xfc\\x0b\\xf7\\x31\\x2e\\xfb\\x31\\x40\\x45\\x07\\xf7\\x3c\\x16\\xf8\\x0b\\x33\\xfc\\x0b\\x06\\x0e\\xbb\"\n\"\\x8d\\x1d\\xf7\\x27\\xf8\\xf4\\x27\\x1d\\xc8\\xf7\\x58\\x2c\\x1d\\xf8\\x03\\x63\\x0a\\x0e\\xfc\\x20\\xf7\\x50\\x2c\\x1d\\xfb\\x5c\\xfa\\x37\\x7c\\x1d\\xfc\\x20\"\n\"\\xf7\\x57\\x2c\\x1d\\x8c\\xfa\\x27\\x24\\x1d\\xfc\\x20\\x30\\x0a\\xdb\\xfa\\x18\\x15\\xfb\\x92\\x45\\xf7\\x92\\x06\\x0e\\xfc\\x20\\xf7\\x56\\x20\\x1d\\x2d\\xfd\"\n\"\\x6d\\xb6\\x06\\x52\\x62\\x77\\x6c\\x5f\\x1a\\x56\\xb7\\x68\\xcc\\x9d\\xa2\\x8f\\x90\\x9d\\x1e\\xb8\\x07\\x85\\x79\\x7e\\x88\\x7d\\x1b\\x6c\\x77\\xa0\\xaa\\xaf\"\n\"\\x9e\\xb1\\xb0\\xac\\x1f\\x0e\\xfc\\x20\\x30\\x0a\\x0e\\xfc\\x20\\x30\\x0a\\x37\\x38\\x1d\\xfb\\xb6\\xf7\\x94\\x2c\\x1d\\xfb\\x7a\\xf9\\x6d\\x21\\x0a\\xfc\\x20\"\n\"\\x30\\x0a\\xb2\\xfa\\x28\\x36\\x0a\\xfb\\x42\\x60\\x0a\\x20\\xf7\\x67\\x2b\\x1d\\x84\\x64\\x0a\\x84\\x66\\x0a\\xf7\\x13\\x4f\\x23\\x1d\\x3a\\x1d\\x84\\xf9\\xed\"\n\"\\x21\\x1d\\x85\\xf8\\x20\\x20\\x1d\\xfb\\x10\\x06\\xfb\\x94\\xfd\\x6d\\x05\\xf3\\x06\\xf7\\x6a\\xf9\\x09\\xf7\\x6a\\xfd\\x09\\x05\\xf3\\x06\\x0e\\x3a\\x1d\\xef\"\n\"\\xf9\\x1b\\x38\\x0a\\x3a\\x1d\\xdf\\xfb\\x22\\x23\\x1d\\x3a\\x1d\\xf7\\x3c\\xf7\\xda\\x15\\x22\\xf1\\xf4\\x07\\x0e\\xf7\\x33\\x76\\x1d\\xbb\\x36\\x1d\\xfb\\x94\"\n\"\\xfa\\x3f\\x26\\x0a\\xbb\\x36\\x1d\\xfb\\x81\\xf9\\xaa\\x3c\\x0a\\xbb\\x36\\x1d\\xfb\\xf0\\x4f\\x23\\x1d\\xbb\\x36\\x1d\\x0e\\xf3\\x25\\x0a\\xfb\\x2b\\xf7\\xa4\"\n\"\\x15\\x8c\\x2f\\x0a\\xe8\\x3f\\x0a\\x50\\x06\\x61\\x86\\x6b\\x73\\x55\\xbe\\x1d\\xf3\\x25\\x0a\\x72\\xf7\\xac\\x39\\x0a\\xf3\\x25\\x0a\\xf7\\x1e\\xf7\\x85\\x28\"\n\"\\x1d\\xd9\\xa8\\x16\\xf7\\xb4\\xdd\\x06\\x4e\\xaf\\x6e\\xa4\\x6f\\xb1\\x08\\x63\\xc1\\x75\\xd8\\xdd\\x1a\\xf7\\x37\\xe7\\xf1\\xf7\\x27\\xf7\\x26\\xe7\\x25\\xfb\"\n\"\\x37\\x39\\x75\\x3e\\x63\\x55\\x1e\\x6f\\x65\\x6e\\x72\\x4e\\x67\\x08\\x39\\xf7\\xb4\\xdd\\xfb\\x55\\x07\\xc8\\xaf\\xa6\\xa2\\xa7\\xb2\\x08\\xb4\\xc3\\xa0\\xd4\"\n\"\\xe1\\x1a\\xe5\\x74\\xd8\\x60\\xc3\\x1e\\xd8\\x4e\\x29\\xb9\\x20\\x1b\\x2e\\x34\\x68\\x4c\\x4d\\x1f\\x50\\x50\\x6d\\x37\\x22\\x1a\\x35\\xa0\\x42\\xb4\\x53\\x1e\"\n\"\\xa7\\x64\\xa6\\x74\\xc8\\x67\\x08\\xfb\\x55\\x06\\x58\\xf9\\x1b\\x21\\x0a\\xf3\\x25\\x0a\\x0e\\xef\\xf8\\x16\\x52\\x0a\\xfc\\x2e\\xd1\\x15\\x30\\x07\\xa5\\x23\"\n\"\\x05\\xa9\\x06\\xa5\\xf3\\x05\\xe6\\x07\\x0e\\xf3\\x53\\x0a\\xf7\\x4e\\xf9\\xba\\x26\\x0a\\xf7\\x10\\xf7\\xf4\\x81\\x15\\xe8\\xe6\\x06\\xf7\\x41\\x95\\xf1\\xf4\"\n\"\\xf7\\x3d\\x1a\\xf7\\x3d\\x26\\xf3\\xfb\\x42\\x95\\x1e\\xe6\\x2e\\x30\\x07\\xfb\\x3b\\x81\\xfb\\x00\\xfb\\x03\\xfb\\x36\\x1a\\xfb\\x37\\xf7\\x00\\xfb\\x02\\xf7\"\n\"\\x3b\\x80\\x1e\\xdc\\x04\\x61\\x8f\\x74\\x92\\x6e\\x9e\\x08\\x4e\\xb2\\x70\\xc0\\xdb\\x1a\\xdd\\xa7\\xc2\\xc5\\xb0\\x1e\\xa8\\x9d\\xa3\\x93\\xb6\\x8e\\x08\\xe8\"\n\"\\x16\\xb6\\x88\\xa3\\x83\\xa8\\x79\\x08\\xc5\\x66\\xa7\\x54\\x39\\x1a\\x3b\\x70\\x56\\x4e\\x64\\x1e\\x6e\\x78\\x74\\x84\\x61\\x87\\x08\\x0e\\xbb\\xf7\\x43\\xf9\"\n\"\\x1b\\x15\\xf8\\x09\\xfd\\x1b\\xe9\\xf9\\x6d\\xfc\\xc5\\xfd\\x6d\\xe9\\x06\\x0e\\xf7\\x35\\xf8\\x63\\x20\\x1d\\x2f\\xfc\\x91\\x06\\x4f\\x8d\\x59\\x9b\\x65\\xa7\"\n\"\\x55\\xb6\\x80\\xb6\\x8c\\xf7\\x34\\x08\\xf7\\x6d\\x2d\\xfb\\x6d\\x07\\xfb\\x3e\\x9c\\x49\\xc8\\x50\\x1e\\xc3\\x59\\xd9\\x70\\xe9\\x89\\x08\\xfb\\x1e\\xe7\\xf7\"\n\"\\x1e\\x07\\xdc\\x8d\\xcf\\x9f\\xc1\\xb1\\x08\\xdc\\xc6\\xa1\\xd0\\xf7\\x4e\\x1a\\xf7\\x6d\\x2d\\xfb\\x6d\\x07\\x8c\\xfb\\x2a\\x82\\x63\\x62\\x5f\\x65\\x68\\x52\"\n\"\\x77\\x47\\x88\\x08\\x0e\\xbb\\x33\\x0a\\x6f\\xf8\\xb3\\x21\\x1d\\xbb\\x33\\x0a\\x84\\xf8\\x1e\\x3c\\x0a\\xbb\\x33\\x0a\\x2f\\xfc\\x5c\\x23\\x1d\\x84\\x6d\\x1d\"\n\"\\x84\\x29\\x0a\\xfb\\x26\\xf8\\x3c\\x21\\x1d\\x84\\xf7\\xe6\\x73\\x15\\xd2\\x8e\\xb3\\x92\\xb4\\x9b\\x08\\xdc\\xac\\xc0\\xda\\xe1\\x85\\x1d\\xe3\\x06\\xbd\\x88\"\n\"\\x99\\x7b\\xad\\x1e\\xdf\\x63\\x36\\xb7\\xfb\\x0f\\x4a\\x1d\\x88\\xfb\\x10\\xd5\\x2c\\xf7\\x0d\\x71\\xb7\\x84\\x18\\x8c\\x8f\\x8a\\x89\\x91\\x1f\\x6c\\x46\\x96\"\n\"\\x85\\x05\\x90\\x97\\x93\\x8d\\x96\\x44\\x0a\\x7a\\x91\\xa2\\x5d\\x87\\x1d\\x84\\x29\\x0a\\xfb\\x75\\xf8\\x3d\\x27\\x1d\\x84\\x29\\x0a\\xfb\\x6d\\xfc\\xd3\\x23\"\n\"\\x1d\\x53\\xb7\\x16\\xf8\\xa8\\xdd\\xfc\\x32\\x06\\xf7\\xad\\xf7\\xb4\\xfb\\xa7\\xf7\\xa9\\x05\\xf8\\x1b\\xdd\\xfc\\x96\\x39\\x06\\xf7\\xac\\xfb\\xa9\\xfb\\xad\"\n\"\\xfb\\xb5\\x05\\x0e\\x4c\\x3e\\x0a\\x0e\\x4c\\xf7\\x99\\xf8\\x27\\x15\\xfc\\x27\\xe8\\xf8\\x27\\xf7\\x34\\xce\\xfb\\x34\\xf7\\x45\\xbf\\x1d\\xfb\\x45\\xfb\\x34\"\n\"\\x48\\x07\\x0e\\x4c\\x3e\\x0a\\x8c\\xf9\\xaa\\x3c\\x0a\\x4c\\xf7\\xef\\x16\\x92\\xf9\\x1b\\xf7\\x83\\xdd\\xfc\\xd0\\x39\\xf7\\x84\\xfd\\x1b\\xbb\\x06\\x61\\x2f\"\n\"\\x50\\x0a\\x4d\\x1d\\xaf\\xc4\\xa2\\x0a\\x83\\x31\\x0a\\xf3\\xf8\\xaf\\xf8\\x20\\x15\\xfb\\xbf\\x42\\xf7\\xbf\\x06\\xfb\\x2b\\xf8\\x36\\x68\\x1d\\xbb\\x2d\\x1d\"\n\"\\xfc\\x47\\xf7\\x5e\\x75\\x0a\\x6c\\xa1\\xb7\\x86\\x1f\\x0e\\xbb\\x2d\\x1d\\xfb\\xd0\\xf7\\x66\\x39\\x0a\\xbb\\x2d\\x1d\\xfb\\x23\\xf7\\x3f\\x28\\x1d\\xbb\\xf8\"\n\"\\xee\\xfb\\x2a\\x15\\x84\\x79\\x77\\x88\\x72\\x1b\\x5c\\x72\\x9e\\xae\\xa9\\xa0\\xad\\xb7\\xb5\\x1f\\xdf\\xd8\\xa5\\xbe\\x8e\\xe4\\x08\\xf8\\x94\\x2e\\x88\\x1d\"\n\"\\xfb\\x29\\xf6\\x30\\xf7\\x42\\xaf\\xa0\\x8e\\x95\\xb7\\x1e\\x57\\x6b\\x76\\x6e\\x62\\x1a\\x65\\xa0\\x71\\xb5\\x7b\\x1e\\x83\\xa2\\xa4\\x86\\xa1\\x1b\\x9d\\x60\"\n\"\\x1d\\x0e\\x84\\x28\\x0a\\x0e\\x84\\x28\\x0a\\x39\\x38\\x1d\\xf7\\x49\\xf8\\x9b\\x80\\x1d\\xfc\\x7a\\xf9\\x6d\\x21\\x0a\\xbb\\x2d\\x1d\\xfb\\xac\\xf7\\x74\\x27\"\n\"\\x0a\\x0e\\xbb\\x2d\\x1d\\xfb\\x51\\xf7\\x4f\\x5d\\x0a\\xf7\\xa2\\x34\\x1d\\x2f\\x3b\\x0a\\xf7\\xa2\\x34\\x1d\\xfb\\x71\\xfa\\x40\\x37\\x1d\\xf7\\xa2\\x34\\x1d\"\n\"\\xfb\\x5b\\x38\\x1d\\xf7\\xa2\\x34\\x1d\\xfb\\x4a\\xfa\\x3f\\x22\\x0a\\x73\\xcb\\x16\\xf8\\x9f\\xdd\\xfc\\x9f\\x06\\xaa\\xf7\\x8e\\x15\\xf8\\x5f\\xdd\\xfc\\x5f\"\n\"\\x06\\x6e\\xf7\\x7d\\x15\\xf8\\x9b\\xdd\\xfc\\x9b\\x06\\x0e\\x84\\x28\\x0a\\x31\\xfa\\x40\\x2b\\x1d\\x84\\x28\\x0a\\x36\\xfa\\x3f\\x22\\x0a\\x4c\\x2d\\x0a\\xfb\"\n\"\\x7e\\xf7\\xba\\x21\\x1d\\x4c\\x2d\\x0a\\xfb\\x66\\xf7\\xa2\\x24\\x1d\\x4c\\x2d\\x0a\\x0e\\x25\\x1d\\xfb\\x9c\\xf8\\x6d\\x71\\x0a\\x85\\x1f\\x0e\\xf7\\x6b\\x51\"\n\"\\x0a\\xfb\\xb5\\xf8\\x4a\\x21\\x1d\\xf7\\xda\\x8c\\x0a\\x84\\xf8\\x6d\\x69\\x0a\\x0e\\x79\\xf7\\x3e\\xf8\\x38\\x15\\xf7\\x77\\xf8\\x14\\xdd\\xfc\\x72\\xa3\\x1d\"\n\"\\x5d\\xb0\\x1f\\xac\\x62\\x7a\\x0a\\x84\\xdc\\x74\\x1d\\xe9\\xfb\\xcf\\x15\\xf7\\x7d\\xf7\\x47\\x07\\xbf\\xa8\\x84\\x78\\xa4\\x1f\\xa5\\x77\\x99\\x6d\\x63\\x1a\"\n\"\\x63\\x7d\\x6c\\xbb\\x1d\\xfb\\x47\\xfb\\xe0\\x15\\xf7\\x8e\\xf7\\x76\\x07\\xdd\\xbc\\x5d\\xc1\\x1d\\xfb\\x18\\xde\\xf9\\x6d\\x15\\xfd\\x6d\\xe9\\xf9\\x1b\\xf7\"\n\"\\xfc\\xdd\\x07\\x0e\\x8e\\xf8\\xcd\\x16\\xfb\\x3a\\xe9\\xf7\\x8c\\x53\\xf9\\x1b\\xfc\\x38\\xfb\\xfd\\x07\\x8f\\xfb\\x3c\\x49\\x20\\xfb\\x07\\x80\\x08\\xfb\\x8c\"\n\"\\xe9\\xf7\\x3a\\x07\\xf8\\x2d\\xdd\\x15\\xfb\\xee\\x06\\xd4\\xb8\\xb5\\xf4\\x8a\\xf7\\x1f\\x08\\xf7\\xa8\\xf7\\x7c\\x07\\x0e\\x84\\x8b\\x1d\\x0e\\x84\\x8b\\x1d\"\n\"\\xf7\\x17\\xf9\\xd4\\x22\\x1d\\xf7\\x8d\\xf8\\x32\\x16\\xe9\\xf7\\xed\\xef\\x49\\x0a\\xf1\\x06\\xfb\\x8f\\xf8\\x14\\xf7\\x60\\xf7\\xed\\x05\\x24\\x06\\xfb\\x48\"\n\"\\xfb\\xc2\\x05\\x2a\\xf7\\xc2\\x2d\\xfb\\xc2\\x2a\\x06\\xfb\\x48\\xf7\\xc2\\x05\\x22\\x06\\xf7\\x63\\xfb\\xed\\xfb\\x8f\\xfc\\x14\\x05\\xf4\\x06\\xf7\\x74\\xf7\"\n\"\\xed\\x05\\xec\\x06\\x0e\\x45\\xc3\\xf7\\x74\\x15\\x8c\\x4d\\x93\\x68\\xa3\\x63\\x08\\x43\\xb6\\xd6\\x65\\xed\\x1b\\xd7\\xc8\\xa2\\xb6\\xb3\\x1f\\xb2\\xb4\\xa2\"\n\"\\xc9\\xc7\\x1a\\xe9\\x5a\\xcb\\x37\\x9b\\x1e\\xad\\x96\\x9c\\x95\\x9c\\xa0\\x08\\xa6\\xab\\x9b\\xb8\\xb8\\x1a\\xf7\\x06\\x2e\\xde\\xfb\\x13\\xfb\\x1a\\x32\\x32\"\n\"\\xfb\\x1a\\x1e\\x7a\\xe9\\xad\\x07\\xd5\\xc0\\xbd\\xd8\\xd6\\xbd\\x5a\\x43\\x41\\x54\\x5b\\x37\\x1e\\x6a\\x3a\\xb3\\x06\\xba\\xa5\\x85\\x7a\\xa5\\x1f\\xaf\\x74\"\n\"\\x9e\\x64\\x58\\x1a\\x33\\x55\\x57\\x2f\\x2d\\x4f\\xc5\\xe5\\x1e\\x9c\\x07\\x0e\\xb8\\x43\\x0a\\x0e\\xb8\\xd8\\x16\\xe9\\xde\\x06\\xf8\\x0c\\xb1\\x1d\\xfc\\x0c\"\n\"\\xfc\\x40\\x05\\xf8\\x92\\x2d\\x07\\xf7\\x17\\xf7\\x5e\\x97\\x1d\\x50\\x06\\x61\\x87\\xad\\x1d\\x30\\xca\\x16\\x86\\x1d\\x4c\\xf7\\xc2\\x2d\\x06\\x0e\\x79\\xf8\"\n\"\\x97\\x16\\xe9\\xf9\\x6d\\xfc\\x7b\\x84\\x1d\\xf7\\xbf\\x07\\x0e\\xf7\\x33\\xf8\\x67\\x16\\xf7\\x61\\xf8\\xf7\\x05\\xfc\\xf7\\xe3\\xf9\\x6d\\xfb\\x15\\x07\\xfb\"\n\"\\x68\\xfd\\x0f\\xfb\\x6c\\xf9\\x0f\\x05\\xfb\\x15\\xfd\\x6d\\xe3\\xf8\\xf7\\x06\\xf7\\x63\\xfc\\xf7\\x05\\x0e\\xbb\\xf8\\xb8\\x4e\\x0a\\xe9\\xf9\\x6d\\x87\\x0a\"\n\"\\xf3\\xf8\\x18\\xf9\\x79\\x68\\x1d\\xb8\\xf7\\x41\\xf9\\x1b\\x15\\xf8\\x09\\xfd\\x1b\\xe9\\xf9\\x6d\\xfc\\xc5\\xfd\\x6d\\xe9\\x06\\x0e\\x84\\xf7\\x4e\\xf7\\xc9\"\n\"\\x15\\xf7\\x78\\x8c\\x1d\\xe9\\x97\\x0a\\xf7\\x55\\x07\\xe4\\xc0\\x5b\\x3b\\x3b\\x56\\x5b\\x32\\x1f\\x0e\\xbb\\xf8\\xdb\\xf7\\x95\\x15\\xfb\\x0b\\x89\\x3a\\x3c\"\n\"\\xfb\\x0c\\x1b\\xfb\\x2a\\x2d\\xf7\\x06\\xf7\\x4d\\xf7\\x51\\xe7\\xf7\\x04\\xf7\\x30\\xf7\\x08\\xd2\\x4d\\x26\\x8c\\x1f\\xee\\x06\\xf7\\x23\\x88\\xfb\\x0c\\xf1\"\n\"\\xfb\\x39\\x1b\\xfb\\x61\\xfb\\x1c\\xfb\\x2c\\xfb\\x7b\\xfb\\x13\\xb7\\xfb\\x04\\xd7\\x48\\x1f\\x59\\xc3\\xd2\\x72\\xe0\\x1b\\xf7\\x0f\\xec\\xc0\\xed\\xc2\\x1f\"\n\"\\xa4\\xb8\\x93\\xa8\\xc2\\x1a\\x0e\\x4c\\xf7\\xf5\\xf9\\x1b\\x15\\xf7\\x83\\xdd\\xfc\\xd0\\x39\\xf7\\x83\\xfd\\x1b\\xe9\\x06\\x0e\\x64\\x72\\x1d\\x0e\\xe1\\xf7\"\n\"\\xe1\\x81\\x15\\xe9\\xe6\\x06\\xf7\\x54\\x95\\xf7\\x05\\xf4\\xf7\\x3d\\x1a\\xf7\\x3d\\xfb\\x04\\xf3\\xfb\\x55\\x95\\x1e\\xe6\\x2d\\x30\\x07\\xfb\\x4e\\x81\\xfb\"\n\"\\x0b\\xfb\\x03\\xfb\\x36\\x1a\\xfb\\x37\\xf7\\x0b\\xfb\\x02\\xf7\\x4e\\x80\\x1e\\xdc\\x04\\x5b\\x8f\\x70\\x92\\x68\\x9e\\x08\\x45\\xb2\\x6c\\xc0\\xdb\\x1a\\xdc\"\n\"\\xac\\xc4\\xce\\xaf\\x1e\\xad\\x9e\\xa6\\x92\\xbd\\x8e\\x08\\xe9\\x16\\xbd\\x88\\xa6\\x84\\xad\\x78\\x08\\xce\\x67\\xac\\x52\\x3a\\x1a\\x3b\\x6c\\x56\\x44\\x64\"\n\"\\x1e\\x69\\x78\\x70\\x84\\x5b\\x87\\x08\\x0e\\x84\\xf8\\x19\\x61\\x0a\\xf7\\x07\\x06\\x0e\\xcd\\xde\\x16\\xf8\\x9f\\xfb\\x3a\\xe9\\xf7\\x8c\\x54\\xf9\\x1b\\x94\"\n\"\\x0a\\x84\\xf8\\x8f\\x16\\xe9\\xf9\\x6d\\x7d\\x1d\\xf7\\x87\\xbe\\x16\\xf9\\xc2\\xf9\\x6d\\x2d\\xfd\\x1b\\xfb\\x9e\\xf9\\x1b\\x2d\\xfd\\x1b\\xfb\\x9e\\x4c\\x0a\"\n\"\\xf7\\x9c\\xc0\\x16\\xf9\\xaa\\xfb\\x3a\\xe9\\xf7\\x8c\\x53\\xf9\\x1b\\x2d\\xfd\\x1b\\xfb\\xaa\\xf9\\x1b\\x2d\\xfd\\x1b\\xfb\\xa0\\x4c\\x0a\\xf7\\x0a\\xf7\\xe6\"\n\"\\x20\\x1d\\xfc\\x04\\x39\\xf7\\xa6\\xfd\\x1b\\xf7\\xb9\\x06\\xf7\\x23\\xdd\\xd8\\xf7\\x19\\xd3\\x73\\xc2\\x5d\\xb0\\x1f\\xac\\x62\\x5d\\x98\\x41\\x1b\\xfb\\x55\"\n\"\\x06\\x39\\x04\\xf7\\x4c\\x06\\xe7\\xc1\\x5b\\x3b\\x3b\\x55\\x5b\\x2f\\x1f\\xfb\\x4c\\x06\\x0e\\xf7\\x67\\xf7\\x47\\xf8\\x38\\x15\\xf7\\xc9\\x2d\\xfd\\x6d\\x62\"\n\"\\x0a\\x39\\x15\\x68\\x0a\\xf8\\xa3\\x39\\x15\\xe9\\xf9\\x6d\\x2d\\x06\\x0e\\x79\\xf7\\x40\\xf8\\x38\\x15\\xf7\\xc9\\x2d\\xa3\\x1d\\x5c\\xb0\\x1f\\xac\\x63\\x7a\"\n\"\\x0a\\xb8\\xf8\\xf6\\xf7\\xd7\\x15\\xfb\\x39\\x7b\\x2b\\x28\\xfb\\x25\\x1b\\x45\\x4b\\xa5\\xb9\\x5e\\x1f\\x6a\\xac\\x7a\\xab\\x79\\xc8\\x30\\x7b\\x18\\xa3\\x3b\"\n\"\\xa0\\x64\\xb5\\x5e\\x08\\x4a\\xca\\xe1\\x68\\xf1\\x1b\\xf7\\x66\\xf7\\x22\\xf7\\x2d\\xf7\\x79\\xf7\\x79\\xfb\\x22\\xf7\\x2d\\xfb\\x66\\xfb\\x31\\xfb\\x01\\x40\"\n\"\\xfb\\x27\\x50\\x1f\\xe6\\x79\\x05\\xf2\\xb6\\xdd\\xc2\\xf7\\x01\\x1b\\xe1\\xd8\\x63\\x48\\xb7\\x1f\\xa5\\x63\\x99\\x60\\x94\\x4c\\x08\\xfb\\xcd\\x38\\x06\\x0e\"\n\"\\xf7\\xe4\\xf7\\x38\\xf8\\x32\\x15\\xf7\\xcf\\x2d\\xfd\\x6d\\xe9\\xf7\\xe0\\xf7\\x2a\\x07\\xfb\\x6e\\x99\\xf7\\x16\\xfb\\x1d\\xf7\\x55\\x1b\\xf7\\x53\\xf7\\x12\"\n\"\\xf7\\x2c\\xf7\\x7a\\xf7\\x7a\\xfb\\x12\\xf7\\x2c\\xfb\\x53\\xfb\\x4c\\xfb\\x12\\xfb\\x0f\\xfb\\x60\\x72\\x1f\\xf7\\xe2\\xf7\\x89\\x15\\xf7\\x1e\\xe2\\xfb\\x0a\"\n\"\\xfb\\x4e\\xfb\\x46\\x31\\xfb\\x0a\\xfb\\x1b\\xfb\\x25\\x28\\xf7\\x0e\\xf7\\x46\\xf7\\x46\\xee\\xf7\\x0e\\xf7\\x25\\x1f\\x0e\\xbb\\xf8\\xb0\\xf7\\xce\\x15\\xfb\"\n\"\\xce\\xe9\\xf9\\x6d\\xfb\\xe1\\x07\\xfb\\x23\\x3c\\x46\\xfb\\x12\\x36\\xab\\x5a\\xdb\\x63\\x1f\\x3c\\x69\\x78\\x66\\xfb\\x0b\\x1a\\x89\\xfb\\x09\\x86\\x77\\x6a\"\n\"\\x6a\\x08\\xf7\\x00\\x06\\x9a\\xae\\x91\\xaa\\xc1\\x1a\\xab\\x07\\x8a\\x99\\x8b\\x96\\x93\\x1a\\xe4\\xb0\\xb3\\xde\\x1e\\xf7\\x83\\xdd\\x15\\xfb\\x74\\x06\\x28\"\n\"\\x5f\\xb2\\xe2\\xb6\\x98\\xac\\xa4\\xa0\\x1f\\x9f\\xa2\\xa9\\x93\\xbf\\x1b\\xf7\\x74\\x06\\x0e\\xfb\\x4d\\xf8\\x46\\x20\\x1d\\xfc\\x0e\\xfd\\x6d\\xe9\\xf9\\x1b\"\n\"\\xf7\\xec\\xdd\\x06\\x3c\\x1d\\x05\\xfb\\x05\\x06\\x0e\\xf7\\x53\\xf7\\x96\\x16\\xe9\\xf7\\xb7\\x06\\xa9\\x95\\xa3\\xa1\\xa0\\x1e\\xab\\xac\\xb3\\x97\\xd6\\x1b\"\n\"\\xf3\\xb8\\x6f\\x4a\\x1f\\xfb\\x3d\\x07\\x63\\x76\\x73\\x67\\x89\\x1e\\xfb\\x25\\x39\\xf7\\x26\\x06\\xdb\\x89\\xd3\\xd6\\x89\\xdd\\x08\\xf7\\x3a\\x07\\xb9\\x7d\"\n\"\\xaf\\x6c\\xaa\\x1e\\xb5\\x61\\x5b\\x9b\\x31\\x1b\\x25\\x5c\\x78\\x4f\\x5a\\x1f\\xf7\\x7e\\xf7\\x3d\\xdd\\xfc\\x84\\x39\\xf7\\x7d\\x07\\x0e\\xfb\\x18\\xe1\\xf9\"\n\"\\x6d\\x15\\xfd\\x6d\\xe9\\xf9\\x1b\\xf7\\xfc\\xdd\\x07\\xfb\\x83\\xf7\\x66\\x21\\x1d\\xb8\\xf8\\x3c\\xf7\\xd7\\x15\\xde\\xfb\\xcd\\x07\\x92\\xc1\\x95\\xaf\\x9f\"\n\"\\xaf\\x08\\xdb\\xb6\\xdc\\xba\\xea\\x1b\\xf7\\x01\\xdc\\x54\\x24\\xb6\\x1f\\xe7\\x9d\\x05\\xf7\\x27\\x50\\xfb\\x02\\xd6\\xfb\\x30\\x1b\\xfb\\x67\\xfb\\x21\\xfb\"\n\"\\x2d\\xfb\\x79\\x9d\\x0a\\xf0\\xe1\\xae\\xcc\\xca\\x1f\\xb6\\xb8\\xa0\\xb2\\xa3\\xdb\\x2f\\x9b\\x18\\x79\\x4e\\x7a\\x6b\\x6b\\x6a\\x08\\x5d\\x5e\\x4a\\x71\\x46\"\n\"\\x1b\\xfb\\x25\\x2b\\xee\\xf7\\x39\\x7b\\x1f\\x0e\\x84\\xf8\\xe8\\xf8\\x97\\x15\\xf7\\x21\\x8c\\x26\\xe0\\xfb\\x3b\\x4a\\x1d\\x8c\\x48\\x98\\x5f\\xa8\\x63\\x08\"\n\"\\x46\\xbd\\xdf\\x68\\xf7\\x04\\x1b\\xe1\\xd2\\x9f\\xaf\\xba\\x1f\\xbc\\xb2\\xaa\\xcc\\xca\\x1a\\xe6\\x53\\xcc\\x28\\xa6\\x1e\\xfb\\x4b\\xbc\\x05\\x33\\xa3\\x6b\"\n\"\\xa7\\xc3\\x1a\\xd5\\xcc\\xbc\\xed\\xf7\\x08\\xcc\\x57\\x2b\\x8c\\x1e\\x0e\\xfc\\x20\\xf7\\x4e\\x2c\\x1d\\x0e\\xfc\\x20\\xf7\\x4e\\x2c\\x1d\\x3f\\x38\\x1d\\xfb\"\n\"\\x42\\xf7\\xde\\x20\\x1d\\xfc\\x95\\x07\\x50\\x85\\x6b\\x7a\\x72\\x1e\\x6f\\x79\\x6a\\x7a\\x66\\x1b\\x69\\x6c\\x99\\xa3\\x78\\x1f\\x78\\xa3\\x84\\xa5\\xb7\\x1a\"\n\"\\xba\\x2d\\x4b\\x07\\xfb\\x0a\\xda\\x40\\xf7\\x0e\\xce\\xba\\x9d\\xb2\\xb2\\x1e\\xb1\\xb1\\x9c\\xb9\\xcb\\x1a\\xf8\\xb7\\x07\\x0e\\xf8\\x13\\xf8\\x94\\xf9\\x1b\"\n\"\\x15\\xfd\\x1b\\xf7\\xbc\\x07\\xf7\\x23\\xdc\\xd8\\xf7\\x1c\\xd2\\x75\\xbf\\x5b\\xb1\\x1f\\xac\\x62\\x5d\\x98\\x41\\x1b\\xfb\\x57\\xf7\\xc9\\xfc\\x5f\\x84\\x1d\"\n\"\\x07\\xf8\\x01\\xfb\\xc9\\x15\\xf7\\x4f\\x06\\xe6\\x59\\x1d\\x30\\x1f\\xfb\\x4f\\x06\\x0e\\xf7\\xe4\\xf8\\x4e\\xf7\\xe6\\x15\\xfb\\xe6\\x62\\x0a\\xf7\\xc9\\x2d\"\n\"\\xfb\\xc9\\xfb\\xb9\\xf7\\xc9\\x2e\\xfd\\x6d\\xe9\\xf7\\xe6\\x06\\xf8\\x16\\x16\\xf7\\x66\\x06\\xe7\\x59\\x1d\\x2f\\x1f\\xfb\\x66\\x06\\x0e\\xf7\\x48\\xf7\\x91\"\n\"\\x16\\xe9\\xf7\\xb7\\x06\\xd3\\xcb\\xb9\\xf0\\xed\\xb7\\x6f\\x4b\\x1e\\xfb\\xd1\\xe9\\xf7\\xd5\\x07\\xb9\\x7d\\xad\\x6c\\xab\\x1e\\xb4\\x64\\x59\\x9c\\x3b\\x1b\"\n\"\\x2f\\x5b\\x77\\x51\\x5c\\x1f\\xf7\\x7e\\xf7\\x67\\xdd\\xfc\\xb1\\x39\\xf7\\x80\\x07\\x0e\\x30\\xca\\x16\\xe9\\xf7\\xed\\xca\\x06\\xf7\\x75\\x81\\x0a\\x4d\\xf7\"\n\"\\xc2\\x2d\\x06\\xf7\\x8e\\xf7\\x66\\x21\\x1d\\x64\\x72\\x1d\\xa4\\xf9\\xe5\\x7c\\x1d\\xf8\\xab\\xbe\\x15\\x88\\x83\\x86\\x8a\\x84\\x1b\\x70\\x7b\\x9a\\xa5\\x1f\"\n\"\\xf7\\xc7\\x07\\xe9\\x47\\xbd\\xfb\\x15\\x3e\\x4e\\x75\\x63\\x67\\x1e\\x73\\x70\\x82\\x6d\\x88\\x56\\x08\\xdf\\x06\\xcc\\x92\\xb1\\xa9\\xd8\\x1b\\xd7\\xb4\\x6f\"\n\"\\x58\\x1f\\x7b\\x07\\x8a\\x66\\x79\\x7f\\x48\\x81\\xfb\\x0b\\x7c\\x7a\\x88\\x6b\\x7d\\x08\\x4e\\x71\\x6c\\x5c\\x47\\x1a\\x29\\xcc\\x4f\\xf4\\xcd\\xbe\\xa1\\xbf\"\n\"\\xc6\\x1e\\x58\\x91\\xa6\\x74\\xc2\\x1b\\x9e\\x97\\x8d\\x92\\xa7\\x1f\\xfb\\x27\\xf7\\x46\\x15\\x70\\x83\\x79\\x73\\x75\\x1e\\x6c\\x69\\x61\\x7b\\x5b\\x1b\\x4a\"\n\"\\x65\\xaa\\xc0\\xc2\\xaf\\xa6\\xe4\\x98\\x1f\\xe5\\x98\\x9c\\x8f\\xa6\\x97\\x08\\x0e\\x26\\xf7\\xf2\\xf9\\xa4\\x15\\x63\\x07\\x87\\x5d\\x76\\x7b\\x3d\\x7b\\x44\"\n\"\\x7c\\x5f\\x6c\\x6d\\x53\\x08\\x69\\x4b\\x79\\x2a\\xfb\\x0e\\x1a\\xfb\\x01\\x9b\\x4d\\xb7\\x55\\x1e\\x57\\xb4\\xc8\\x70\\xd6\\x1b\\xf7\\x29\\xe3\\xf3\\xf7\\x45\"\n\"\\xe1\\x78\\xcd\\x63\\xbd\\x1f\\xbc\\x63\\x4b\\xa9\\x4b\\x1b\\x51\\x59\\x76\\x63\\x62\\x1f\\x94\\xca\\xb3\\xb1\\xcf\\x98\\xe8\\x9b\\x8f\\x8d\\xab\\xa7\\x08\\xab\"\n\"\\xaf\\x95\\xac\\xd8\\x1a\\xfb\\x29\\xfb\\xd6\\x40\\x1d\\xfb\\x23\\xc5\\x16\\xf7\\xbb\\x06\\xe7\\xc6\\xc6\\xe8\\xc8\\x75\\xaf\\x4f\\xab\\x1f\\xb5\\xaa\\x9d\\xac\"\n\"\\xb8\\x1a\\xd9\\x4a\\xc3\\x32\\x1e\\xfb\\xa2\\x06\\xdf\\xfc\\x56\\x15\\xf7\\x3a\\xf7\\x4e\\x07\\xc1\\xae\\x6a\\x58\\x59\\x68\\x6b\\x55\\x1f\\xfb\\x4e\\xf7\\x84\"\n\"\\x15\\xf7\\x1c\\xf7\\x4e\\x07\\xb5\\xa4\\x72\\x61\\x62\\x6f\\x6f\\x64\\x1f\\x0e\\xfb\\xc9\\xc6\\x16\\x4b\\x0a\\xfb\\xd1\\x06\\x0e\\x30\\x9b\\x2a\\x15\\xe2\\xec\"\n\"\\xf7\\xf8\\x2a\\xe2\\xf7\\x3f\\x60\\xf8\\x56\\xfb\\xe2\\x4c\\x06\\x25\\x7f\\x37\\x72\\x4b\\x1e\\x6f\\x3f\\x68\\x62\\x56\\x77\\x08\\xf8\\x27\\x16\\xfb\\xa9\\x06\"\n\"\\xcf\\xc9\\xb1\\xf7\\x0b\\x8e\\xf7\\x34\\x08\\xae\\xf7\\x3c\\x07\\x0e\\xf8\\x97\\xf7\\x7e\\x15\\xdb\\x85\\xbd\\x7c\\xb0\\x5c\\x0a\\x3c\\x06\\x46\\x74\\x5a\\x67\"\n\"\\x47\\x1b\\x56\\x5d\\xa3\\xb7\\x6e\\x65\\x0a\\x0e\\xf8\\x98\\xf7\\x7e\\x15\\xdb\\x85\\xbd\\x7c\\xb0\\x5c\\x0a\\x3c\\x06\\x46\\x74\\x5a\\x67\\x47\\x1b\\x56\\x5d\"\n\"\\xa3\\xb7\\x6e\\x65\\x0a\\xfb\\x45\\xf8\\x31\\x22\\x1d\\x86\\xf7\\xb9\\x16\\xdf\\xf7\\x8d\\xc9\\x06\\xf7\\x28\\xfb\\x8d\\x05\\xec\\x06\\xfb\\x3b\\xf7\\xb2\\xf7\"\n\"\\x11\\xba\\x1d\\x4d\\xf7\\x5d\\x37\\xfb\\x5d\\x4c\\x06\\x21\\xf7\\x5d\\x05\\x2a\\x06\\xf7\\x10\\xfb\\x82\\xfb\\x3b\\xfb\\xb2\\x05\\xed\\x06\\xf7\\x28\\xf7\\x8d\"\n\"\\x05\\xca\\x06\\x0e\\xfb\\x6c\\xb6\\xf7\\x38\\x15\\x75\\x07\\x26\\xd2\\x4b\\xf7\\x05\\xf7\\x02\\xd8\\xd1\\xed\\xc7\\x6f\\xb4\\x50\\xa6\\x1e\\xbe\\xa7\\xa4\\xb2\"\n\"\\xbd\\x1a\\xdf\\x41\\xcc\\x2a\\x51\\x59\\x75\\x65\\x6b\\x1e\\x76\\x71\\x7a\\x5d\\x6b\\x1a\\x74\\xe2\\xa2\\x07\\xbd\\xb1\\xb0\\xbf\\xbd\\xae\\x69\\x5c\\x7a\\x85\"\n\"\\x7a\\x81\\x81\\x1e\\x79\\x79\\x6a\\x7e\\x72\\x1b\\x68\\x41\\xae\\x06\\xc9\\xb4\\x67\\x55\\x54\\x65\\x6a\\x4e\\x4b\\x69\\xaa\\xc4\\x1f\\xa1\\x07\\x0e\\xfb\\x07\"\n\"\\x3f\\x1d\\x0e\\xfb\\x07\\x3f\\x1d\\xbb\\xf7\\x64\\x71\\x0a\\x86\\x1f\\x0e\\xfb\\x80\\x70\\x0a\\x0e\\x30\\xf8\\x35\\x49\\x1d\\xfc\\x18\\x80\\x0a\\xf7\\x70\\x07\"\n\"\\x0e\\x99\\xb5\\x16\\xdf\\xf8\\x56\\x06\\xf7\\x43\\xfc\\x56\\x05\\xe1\\x06\\xf7\\x42\\xf8\\x56\\x05\\xfc\\x56\\xdf\\xf8\\xa0\\xfb\\x14\\x07\\xfb\\x42\\xfc\\x4b\"\n\"\\xfb\\x42\\xf8\\x4b\\x05\\xfb\\x13\\x06\\x0e\\xfb\\x0e\\xd3\\x16\\xdf\\xf7\\x83\\xf7\\x85\\xfb\\x83\\xdf\\xf8\\xa0\\x37\\xfb\\x67\\xfb\\x85\\xf7\\x67\\x37\\x06\"\n\"\\x0e\\xf7\\xa9\\x3d\\x1d\\x0e\\xfb\\x18\\xd2\\x16\\xdf\\xf8\\x56\\xf7\\x7c\\xfc\\x56\\xdf\\xf8\\xa0\\xfc\\x24\\x06\\x0e\\xc5\\xfb\\x6e\\x15\\xdd\\x4d\\x0a\\xbc\"\n\"\\x73\\xd0\\x1b\\xf7\\x1c\\xe4\\xf7\\x01\\xf7\\x3b\\xf7\\x45\\x36\\xf7\\x01\\xfb\\x1d\\x45\\x52\\x6c\\x51\\x65\\x1f\\xd5\\x39\\x77\\x0a\\xfb\\x42\\xf8\\x6c\\xf7\"\n\"\\xf0\\x15\\x86\\xbe\\x81\\xac\\x76\\xb5\\x1d\\x2f\\xfb\\x04\\xfb\\x42\\xfb\\x3d\\xe4\\x20\\xf7\\x21\\xf7\\x10\\xd9\\xd6\\xf7\\x14\\x95\\x1f\\x38\\x06\\x37\\x7e\"\n\"\\x60\\x61\\x44\\x1b\\x31\\x54\\xd6\\xf7\\x10\\xf7\\x17\\xc2\\xd9\\xe7\\xd1\\xb8\\x62\\x42\\x95\\x1f\\x0e\\xfb\\x6c\\xf7\\x4f\\x16\\xdf\\xf8\\x56\\xf7\\x2c\\xd5\"\n\"\\xfc\\x19\\x41\\xf7\\x2d\\x06\\x0e\\xfb\\x42\\x6a\\x1d\\x0e\\xf7\\x29\\xf8\\x05\\x4f\\x0a\\xf7\\x58\\x06\\xd2\\x8f\\xb3\\x95\\xbb\\xa3\\x08\\xe5\\xb7\\xc0\\xe6\"\n\"\\xf6\\x1a\\xf7\\x00\\x56\\xe6\\x31\\xb7\\x1e\\x5b\\xa3\\x63\\x94\\x44\\x90\\x08\\xf7\\x0f\\x37\\xfb\\x0f\\x07\\x45\\x86\\x64\\x82\\x5c\\x73\\x08\\x32\\x5e\\x57\"\n\"\\x31\\xfb\\x00\\x1a\\x20\\xbf\\x30\\xe4\\x5f\\x1e\\xba\\x73\\xb2\\x81\\xd1\\x87\\x08\\xd6\\x04\\xfb\\x1c\\x95\\x41\\xd3\\xf7\\x0f\\x1a\\xf7\\x0f\\xd5\\xd3\\xf7\"\n\"\\x1c\\x96\\x1e\\xdf\\x16\\xf7\\x20\\x80\\xd6\\x43\\xfb\\x0f\\x1a\\xfb\\x0e\\x40\\x43\\xfb\\x20\\x80\\x1e\\x0e\\xfb\\x42\\xf7\\xbd\\x67\\x0a\\xeb\\x06\\x0e\\x26\"\n\"\\xe2\\x16\\xf7\\xef\\xfb\\x33\\xe1\\xf7\\x7d\\x5d\\xf8\\x56\\xb2\\x1d\\xfb\\x2d\\xf7\\xfc\\x49\\x1d\\x75\\x1d\\xf7\\x14\\xcb\\x16\\xf9\\x35\\xf8\\xa0\\x9a\\x1d\"\n\"\\xf7\\x29\\xd1\\x16\\xf9\\x0c\\xfb\\x33\\xdf\\xf7\\x7d\\x60\\xf8\\x56\\x9a\\x1d\\x5a\\xf7\\x50\\x4f\\x1d\\xfb\\xba\\x41\\xf7\\x66\\x06\\xdf\\xfc\\x0c\\x85\\x0a\"\n\"\\xb8\\xdc\\x78\\x1d\\xf7\\x76\\x41\\x15\\xdf\\xf8\\xa0\\x37\\x06\\x0e\\xfb\\x2d\\xd0\\x78\\x1d\\x0e\\xfb\\x38\\xf7\\x05\\xf7\\xf2\\x15\\xd2\\x9f\\xbf\\xb4\\xcf\"\n\"\\x1b\\xdb\\xc1\\x52\\x2a\\x96\\x1f\\xfb\\x4c\\x41\\xf7\\x4e\\x06\\xfb\\x01\\x88\\x50\\x44\\x33\\x1b\\x3f\\x5a\\xbd\\xe8\\x79\\x1f\\x35\\x75\\x05\\xfb\\x17\\xa7\"\n\"\\xd9\\x48\\xf7\\x0f\\x1b\\xf7\\x27\\xe6\\xf7\\x00\\xf7\\x42\\xf7\\x3f\\x2e\\xf7\\x01\\xfb\\x25\\xfb\\x05\\x3b\\x4e\\xfb\\x02\\x6d\\x1f\\x0e\\xd7\\xf7\\x1b\\xf7\"\n\"\\xcd\\x15\\xf7\\x67\\x30\\x1d\\xf7\\x83\\xf7\\x0b\\x07\\xfb\\x3d\\x93\\xdf\\x2e\\xf7\\x24\\x1b\\xf7\\x29\\xe3\\xf3\\xf7\\x45\\xf7\\x45\\x33\\xf3\\xfb\\x29\\xfb\"\n\"\\x18\\x38\\x3a\\xfb\\x25\\x78\\x1f\\xf7\\x7e\\xf7\\x29\\x40\\x1d\\xfb\\x18\\xf8\\x11\\x49\\x1d\\xfb\\x8e\\x06\\x27\\x45\\x4a\\x30\\x45\\xa9\\x63\\xd4\\x6e\\x1f\"\n\"\\x5d\\x79\\x75\\x6c\\x89\\x59\\x08\\x53\\x07\\x8a\\x5c\\x87\\x7c\\x7c\\x7f\\x08\\xe2\\x06\\x97\\x97\\x92\\xa5\\x8c\\xaf\\x08\\xc3\\x07\\x8c\\xba\\xa8\\xab\\xb5\"\n\"\\x8c\\x08\\xf7\\x24\\x06\\xd5\\x04\\xfb\\x3a\\x06\\x58\\x6b\\xab\\xbf\\xbd\\xac\\xab\\xbd\\x1f\\xf7\\x3a\\x06\\x0e\\xfb\\x9b\\xf7\\xec\\x20\\x0a\\xfb\\x95\\xfc\"\n\"\\xa0\\x4b\\x0a\\x06\\x3c\\x1d\\x05\\xfb\\x05\\x06\\x0e\\xd7\\x16\\xdf\\xf7\\xed\\x06\\xd3\\xb9\\xc2\\xb1\\x57\\x1d\\xfb\\xc7\\x07\\x8a\\x51\\x5d\\x59\\x58\\x8c\"\n\"\\x08\\xfb\\x15\\x3e\\xf7\\x15\\x06\\xf3\\x90\\xd8\\xd9\\x8c\\xf0\\x08\\xf7\\xc7\\x4a\\x0a\\x57\\x6e\\x47\\x52\\x9e\\x1d\\xfb\\xc9\\xcb\\x16\\x4b\\x0a\\xfb\\xd1\"\n\"\\x06\\xf7\\x40\\x39\\x1d\\xfb\\x38\\xf8\\x77\\xf8\\x04\\x15\\xf7\\x02\\x6d\\x3a\\xc8\\xfb\\x04\\x1b\\xfb\\x26\\x2f\\xfb\\x01\\xfb\\x3f\\xfb\\x42\\xe6\\xfb\\x00\"\n\"\\xf7\\x26\\xf7\\x10\\xd8\\xce\\xf7\\x17\\xa8\\x1f\\x35\\xa1\\x05\\x2e\\x79\\x59\\x59\\x40\\x1b\\x33\\x50\\xd2\\xf7\\x01\\x87\\x1f\\xf7\\x4f\\xd5\\xfb\\x4c\\x06\"\n\"\\xec\\x96\\xc0\\xc4\\xdc\\x1b\\xcf\\xbf\\x62\\x44\\x9f\\x1f\\x0e\\xfb\\x42\\xf8\\x4a\\xf8\\x0e\\x15\\xf3\\x8a\\x47\\xc4\\x4c\\x1d\\xfb\\x0d\\x8f\\xcf\\x51\\xf7\"\n\"\\x1d\\x1b\\xf7\\x18\\xdf\\xcc\\xf0\\xd9\\x5f\\xb6\\x23\\xa4\\x1f\\x51\\x1d\\x0e\\xfc\\x58\\xf7\\x2d\\x20\\x0a\\x30\\x1d\\x06\\xf9\\x6d\\x04\\x37\\x22\\xdf\\x06\"\n\"\\x0e\\xfc\\x20\\xf7\\x4c\\xf8\\xa0\\x15\\x30\\x1d\\x06\\x41\\x3a\\x0a\\xfc\\x58\\xd0\\x20\\x0a\\xfc\\xe8\\x07\\x57\\x7b\\x7a\\x57\\x86\\x84\\x8b\\x8c\\x83\\x1e\"\n\"\\x3d\\x07\\xf7\\x07\\x87\\xc0\\xac\\x8f\\xdb\\x08\\xf9\\x0d\\x07\\xf7\\x61\\x04\\x37\\x22\\xdf\\x06\\x0e\\xf7\\x7c\\xf8\\x3f\\x4f\\x1d\\xfc\\x22\\x80\\x0a\\xf7\"\n\"\\x7a\\x07\\xdf\\xfc\\x0c\\x85\\x0a\\xf7\\x1f\\xbf\\x16\\xdf\\xf7\\x83\\xf7\\x85\\xfb\\x83\\xa0\\x1d\\x37\\xfb\\x67\\xfb\\x85\\xf7\\x67\\x37\\x06\\xf8\\x2d\\xfc\"\n\"\\x56\\x15\\xf7\\x3a\\xf7\\x38\\x07\\xa4\\x99\\x87\\x81\\x98\\x1f\\x9f\\x7d\\x97\\x70\\x6f\\x1a\\x56\\x6c\\x6d\\x56\\x1e\\x0e\\xd7\\x16\\xdf\\xf7\\xed\\x06\\xd2\"\n\"\\xb9\\xc2\\xb2\\x57\\x1d\\xfb\\xfa\\xdf\\xf7\\xfa\\x4a\\x0a\\x56\\x6e\\x47\\x53\\x9e\\x1d\\xfb\\x80\\x70\\x0a\\xf7\\x63\\x39\\x1d\\xfb\\x42\\x6a\\x1d\\xfc\\x11\"\n\"\\xf7\\x64\\x7b\\x1d\\xb8\\xda\\x16\\xf7\\x7d\\xfb\\x3a\\xe9\\xf7\\x3a\\xf7\\x7f\\xf9\\x6d\\x94\\x0a\\xfb\\x0e\\xde\\x16\\xf7\\x2d\\xfb\\x34\\xdf\\xf7\\x34\\xf7\"\n\"\\x2a\\xf8\\xa0\\xb2\\x1d\\xfb\\x0b\\xb4\\xf7\\xae\\x15\\x3b\\x91\\x59\\x9a\\x66\\x1e\\x35\\xad\\xdb\\x57\\xed\\x1b\\xf7\\x26\\xe9\\xf7\\x03\\xf7\\x41\\xf7\\x41\"\n\"\\x31\\xf4\\xfb\\x28\\xfb\\x0c\\x38\\x47\\xfb\\x06\\x76\\x1f\\xda\\x06\\xd0\\xa2\\xbc\\xaf\\xcf\\x1b\\xc0\\xb9\\x73\\x5f\\xa8\\x1f\\x9f\\x6d\\x92\\x6d\\x8c\\x57\"\n\"\\x08\\x89\\x47\\x15\\x2a\\x84\\x50\\x4c\\x37\\x1b\\x36\\x50\\xcd\\xe9\\x1f\\x0e\\xf7\\x67\\xf8\\x03\\xf8\\xe0\\x15\\x88\\xb1\\x83\\xa3\\x7c\\x9f\\x08\\xaf\\x72\"\n\"\\x5d\\xa0\\x57\\x1b\\x24\\x49\\x3a\\xfb\\x11\\xfb\\x0e\\xcc\\x3e\\xf1\\xe6\\xc5\\xc2\\xe8\\x91\\x1f\\x44\\x06\\x54\\x82\\x6f\\x6f\\x5e\\x1b\\x4f\\x68\\xbd\\xdf\"\n\"\\xe4\\xae\\xbf\\xc6\\xb7\\xa8\\x70\\x5c\\x91\\x1f\\xf7\\xfd\\xfb\\x5a\\x15\\x20\\x4b\\x3f\\xfb\\x13\\xfb\\x14\\xca\\x40\\xf7\\x00\\xf6\\xcb\\xd6\\xf7\\x11\\xf7\"\n\"\\x17\\x4d\\xd6\\xfb\\x01\\x1f\\x4a\\x04\\xc8\\xaf\\x57\\x33\\x37\\x66\\x57\\x4f\\x4f\\x66\\xbf\\xe1\\xe1\\xb0\\xbf\\xc7\\x1f\\x49\\xf8\\x14\\x15\\xfc\\x14\\xfd\"\n\"\\x59\\x05\\xcd\\x06\\xf8\\x14\\xf9\\x59\\x05\\x0e\\xfb\\xf3\\xf7\\x16\\xf7\\xb8\\x15\\xca\\xcd\\xb2\\xba\\xa5\\xb8\\x08\\xb4\\xd0\\xa4\\xd8\\xc4\\x1a\\xbf\\x71\"\n\"\\xad\\x64\\x35\\x49\\xfb\\x22\\xfb\\xd2\\x4f\\x1e\\x6f\\x6c\\x77\\x77\\x7e\\x80\\x08\\x7a\\x7b\\x85\\x84\\x84\\x1a\\x84\\x92\\x82\\x91\\x92\\xa9\\xa3\\xa5\\xa5\"\n\"\\x1e\\x7f\\x2f\\x89\\x71\\x6c\\x1a\\x53\\xa6\\x69\\xb9\\xae\\xa8\\xa0\\xb7\\xa4\\x1e\\x98\\xa0\\x92\\x9f\\x97\\x1a\\x92\\x85\\x91\\x84\\x83\\x85\\x86\\x7d\\x84\"\n\"\\x1e\\x5e\\x76\\x7c\\x7b\\x77\\x1b\\x7d\\x84\\x94\\x9e\\xa5\\x9e\\xf7\\x11\\x9a\\xdb\\x1f\\x95\\xc2\\x15\\xf7\\x9f\\xb8\\xa7\\xe0\\xb8\\x1b\\x9c\\x96\\x7a\\x71\"\n\"\\x6d\\x81\\x5a\\x7c\\x62\\x1f\\x72\\x48\\x68\\x54\\x4e\\x48\\x08\\x0e\\xf8\\x23\\xf8\\xaa\\x20\\x1d\\x40\\xfc\\xe8\\x06\\xfb\\xd8\\xf8\\xe8\\x05\\x35\\xfd\\x6d\"\n\"\\xd6\\xf8\\xe3\\x06\\xf7\\xd5\\xfc\\xe3\\x05\\xe4\\x06\\xf7\\xad\\xf9\\x79\\x15\\xfb\\x11\\x30\\xfb\\x09\\xfb\\x33\\xfb\\x3a\\xe3\\xfb\\x04\\xf7\\x16\\xf7\\x12\"\n\"\\xe4\\xf7\\x08\\xf7\\x37\\xf7\\x32\\x2f\\xf7\\x09\\xfb\\x11\\x1f\\x38\\x04\\xe1\\xc3\\x3d\\xfb\\x0b\\xfb\\x03\\x51\\x3b\\x39\\x36\\x51\\xdb\\xf7\\x08\\xf7\\x05\"\n\"\\xc5\\xda\\xde\\x1f\\xfb\\x62\\xfd\\x26\\x15\\xf8\\x32\\xde\\xfc\\x32\\x06\\x0e\\x2b\\xf8\\xe1\\x20\\x0a\\x31\\x06\\x57\\xfb\\x2b\\x74\\xbc\\x7e\\xa1\\x74\\xa6\"\n\"\\x19\\xb6\\x67\\x56\\xa3\\x54\\x1b\\xfb\\x10\\x33\\xfb\\x09\\xfb\\x38\\xfb\\x39\\xe0\\xfb\\x07\\xf7\\x0e\\xc8\\xc3\\xa9\\xc1\\xb1\\x1f\\xa0\\xa9\\x97\\xa2\\xa0\"\n\"\\xbd\\xc3\\xfb\\x38\\x18\\xe7\\x06\\x23\\xf7\\xa3\\x05\\x37\\x16\\xfb\\x2c\\x5a\\x5a\\x4b\\x49\\x1b\\x42\\x57\\xdf\\xf7\\x0a\\xf7\\x0f\\xbf\\xdd\\xd8\\xcc\\xb5\"\n\"\\x59\\xfb\\x21\\xc0\\x1f\\x0e\\x2b\\xf8\\xdf\\x20\\x0a\\x30\\x06\\x57\\xfb\\x2b\\x75\\xbc\\x7e\\xa1\\x74\\xa6\\x19\\xb6\\x66\\x57\\xa3\\x50\\x1b\\xfb\\x1a\\x29\"\n\"\\xfb\\x0b\\xfb\\x36\\xfb\\x37\\xea\\xfb\\x09\\xf7\\x18\\xec\\xc7\\xc0\\xf7\\x1a\\xc2\\x1f\\xc4\\xfb\\x38\\x05\\xe7\\x06\\x23\\xf7\\xa3\\x05\\x37\\x16\\xfb\\x2e\"\n\"\\x59\\x5b\\x4d\\x46\\x1b\\x36\\x4e\\xe1\\xf7\\x0a\\xf7\\x0a\\xc9\\xe0\\xe2\\xd0\\xb4\\x5c\\xfb\\x24\\xc1\\x1f\\xfb\\x60\\xf8\\x90\\x21\\x0a\\x25\\x1d\\xa1\\xf8\"\n\"\\x4e\\x28\\x1d\\xfb\\xe9\\xc5\\xf7\\x82\\x15\\xf7\\x42\\xfb\\xe8\\x05\\x7b\\x93\\x95\\x84\\x97\\x1b\\x93\\x90\\x8f\\x92\\x92\\x89\\x93\\x88\\x93\\x1f\\xfb\\x17\"\n\"\\xf7\\xdd\\xf7\\x17\\xf7\\xdd\\x05\\x8e\\x93\\x8d\\x93\\x92\\x1a\\x93\\x86\\x8f\\x83\\x7f\\x83\\x85\\x79\\x81\\x1e\\x0e\\xfb\\xe9\\xf7\\xa7\\xf7\\x82\\x15\\xfb\"\n\"\\x42\\xf7\\xe8\\x05\\x9c\\x82\\x82\\x92\\x7f\\x1b\\x83\\x86\\x87\\x83\\x85\\x8d\\x83\\x8e\\x82\\x1f\\xf7\\x17\\xfb\\xdd\\xfb\\x17\\xfb\\xdd\\x05\\x88\\x84\\x89\"\n\"\\x83\\x84\\x1a\\x83\\x90\\x87\\x93\\x97\\x93\\x91\\x9c\\x95\\x1e\\x0e\\xf8\\xac\\x9f\\x1d\\xe9\\x47\\xbc\\xfb\\x15\\x3f\\x4d\\x75\\x64\\x67\\x1e\\x74\\x9b\\x0a\"\n\"\\x91\\xb1\\xa8\\xd9\\x1b\\xd7\\xb4\\x6f\\x59\\x1f\\x75\\x07\\x67\\x78\\x7e\\x48\\x82\\x1e\\xfb\\x0b\\x7c\\x79\\x87\\x6c\\x7e\\x08\\x4d\\x71\\x6c\\x5d\\x47\\x1a\"\n\"\\x2c\\xcd\\x4f\\xf5\\xce\\xc0\\xa2\\xc1\\xc5\\x1e\\x8f\\x5f\\xa0\\x71\\xb1\\x84\\x08\\x5a\\x70\\x78\\x72\\x65\\x1a\\x66\\xa2\\x6e\\xb3\\x7e\\x1e\\x83\\xa1\\xab\"\n\"\\x86\\x9f\\x1b\\x9c\\xa7\\x8f\\x91\\xa5\\x1f\\xb8\\x07\\x84\\x79\\x76\\x88\\x72\\x1b\\x5c\\x72\\x9e\\xaf\\xb2\\xa7\\xac\\xbb\\x9e\\x1f\\xfb\\x27\\x81\\x1d\\x0e\"\n\"\\xfb\\x11\\xf8\\x73\\xf8\\x18\\x15\\x56\\x6d\\x75\\x7b\\x64\\x1b\\x71\\x7d\\x8f\\xa2\\x52\\x1f\\xa5\\x4a\\x6a\\x95\\x72\\x1b\\x68\\x6b\\x79\\x69\\x71\\x1f\\x7f\"\n\"\\x7b\\x84\\x81\\x73\\x65\\xb0\\x67\\x18\\xc2\\xa9\\xa5\\xa0\\xb3\\x1b\\xa1\\xa5\\x84\\x75\\xc5\\x1f\\x6b\\xde\\x91\\x89\\xa6\\x1b\\xa9\\xa8\\x9a\\xa6\\xa1\\x1f\"\n\"\\x98\\x9b\\x8d\\x8d\\xad\\xbc\\x08\\x65\\xfb\\x10\\x15\\x56\\x6d\\x75\\x7b\\x64\\x1b\\x71\\x7d\\x8f\\xa2\\x52\\x1f\\xa5\\x4a\\x6a\\x95\\x72\\x1b\\x68\\x6b\\x79\"\n\"\\x69\\x71\\x1f\\x7f\\x7b\\x84\\x81\\x73\\x65\\xb0\\x67\\x18\\xc2\\xa9\\xa5\\xa0\\xb3\\x1b\\xa1\\xa5\\x84\\x75\\xc5\\x1f\\x6b\\xde\\x91\\x89\\xa6\\x1b\\xa9\\xa8\"\n\"\\x9a\\xa6\\xa1\\x1f\\x98\\x9b\\x8d\\x8d\\xad\\xbc\\x08\\x0e\\x25\\x1d\\xfb\\x02\\xf8\\x83\\x27\\x0a\\x61\\xf7\\x53\\x26\\x0a\\xf7\\xda\\xf9\\x5d\\xf7\\xac\\x15\"\n\"\\x6a\\x5e\\x6e\\x53\\x78\\x1a\\x81\\x93\\x84\\x95\\x92\\x8f\\x8d\\x94\\x93\\x1e\\xbc\\xc6\\xa6\\xa0\\xea\\xc4\\x08\\x9c\\x94\\x8d\\x8e\\x95\\x1a\\x92\\x85\\x90\"\n\"\\x76\\x97\\x1e\\x42\\xb5\\x5f\\xad\\x64\\xb9\\x08\\x9c\\x7d\\x87\\x8e\\x83\\x1b\\x81\\x83\\x84\\x82\\x79\\xb0\\x40\\xa4\\x6d\\x1f\\xfc\\x3f\\x06\\xa6\\xac\\xaf\"\n\"\\xd3\\x9e\\x1a\\x93\\x83\\x92\\x81\\x83\\x88\\x88\\x7a\\x7c\\x1e\\x63\\x5c\\x61\\x6a\\x41\\x61\\x08\\x77\\x80\\x84\\x85\\x84\\x1a\\x83\\x8f\\x86\\x93\\x86\\x1e\"\n\"\\xe9\\x54\\xaa\\x73\\xb7\\x58\\x08\\x76\\x9d\\x8c\\x8a\\x94\\x1b\\x95\\x93\\x92\\x94\\x91\\x7f\\xab\\x83\\x9b\\x1f\\x80\\xa0\\x80\\x9d\\x76\\xa7\\x08\\x0e\\xfb\"\n\"\\x42\\xf7\\x66\\xf9\\x65\\x15\\xfd\\x2a\\x07\\xa3\\x6e\\x40\\xb1\\x79\\x1b\\x82\\x84\\x83\\x81\\x83\\x8e\\x88\\x9c\\x7c\\x1f\\xba\\x63\\xad\\x5f\\xb4\\x42\\x08\"\n\"\\x77\\x96\\x91\\x84\\x92\\x1b\\x93\\x90\\x8f\\x93\\x90\\x1f\\xc6\\xf0\\xa1\\xa7\\xc7\\xbd\\x08\\x94\\x93\\x8d\\x8f\\x92\\x1a\\x95\\x84\\x93\\x82\\x85\\x6a\\x7f\"\n\"\\x83\\x7b\\x1e\\x74\\x80\\x79\\x7f\\x71\\x78\\x08\\xf9\\x2a\\x07\\x0e\\xf7\\xda\\xfa\\x25\\xf7\\xad\\x15\\xc7\\xfd\\x2a\\x07\\x9c\\xa2\\x95\\x9b\\x96\\x9f\\x08\"\n\"\\x95\\x9e\\x99\\xaf\\x93\\x1a\\x94\\x83\\x92\\x81\\x84\\x87\\x89\\x82\\x83\\x1e\\x59\\x4f\\x73\\x78\\x2a\\x51\\x08\\x79\\x81\\x89\\x88\\x82\\x1a\\x84\\x92\\x85\"\n\"\\x9f\\x80\\x1e\\xd4\\x62\\xb7\\x69\\xb3\\x5c\\x08\\x7a\\x9a\\x8e\\x88\\x93\\x1b\\x95\\x93\\x92\\x94\\x9d\\x65\\xd6\\x73\\xa8\\x1f\\x0e\\xf7\\xda\\xe0\\xf7\\xad\"\n\"\\x15\\xf9\\x2a\\x06\\x73\\x6e\\x65\\x40\\x79\\x1a\\x82\\x93\\x84\\x95\\x93\\x8e\\x8e\\x9c\\x9a\\x1e\\xb3\\xba\\xb7\\xad\\xd4\\xb4\\x08\\x9f\\x96\\x92\\x91\\x92\"\n\"\\x1a\\x93\\x87\\x90\\x83\\x90\\x1e\\x26\\xc6\\x70\\xa1\\x58\\xc7\\x08\\x94\\x83\\x87\\x8d\\x84\\x1b\\x81\\x83\\x84\\x82\\x85\\x97\\x6a\\x93\\x7b\\x1f\\x96\\x74\"\n\"\\x97\\x79\\x9e\\x71\\x08\\xfd\\x2a\\x06\\x0e\\xfb\\x42\\xf7\\x66\\x20\\x15\\xc7\\xf9\\x2a\\x06\\xa2\\x7a\\x9b\\x81\\x9f\\x80\\x08\\x81\\x9e\\xaf\\x7d\\x93\\x1b\"\n\"\\x94\\x92\\x93\\x95\\x92\\x89\\x8f\\x82\\x93\\x1f\\x4f\\xbd\\x78\\xa3\\x51\\xec\\x08\\x9d\\x81\\x88\\x8d\\x82\\x1b\\x84\\x85\\x84\\x77\\x80\\x1f\\x62\\x42\\x69\"\n\"\\x5f\\x5c\\x63\\x08\\x7a\\x7c\\x88\\x88\\x83\\x1a\\x81\\x92\\x83\\x94\\x9d\\xd5\\xb1\\xa3\\xa9\\x1e\\x0e\\xfb\\x42\\xf7\\x6e\\xf7\\x15\\x61\\x1d\\xfb\\x42\\xf7\"\n\"\\x0c\\x47\\x15\\x60\\xf7\\x9c\\xb6\\x07\\xfb\\x3a\\xf7\\x9c\\x61\\x1d\\x28\\xda\\xfb\\x6e\\x15\\xde\\xf7\\x85\\x06\\x6c\\xb1\\xb7\\x7c\\xc4\\x1b\\xf7\\x1b\\xe3\"\n\"\\xe9\\xf7\\x23\\xef\\x62\\xcb\\x36\\xad\\x1f\\xc3\\xaa\\xa8\\xbc\\xcc\\x1a\\xf7\\x00\\x39\\xd7\\xfb\\x09\\x46\\x4c\\x71\\x61\\x69\\x1e\\x6d\\x67\\x82\\x62\\x2a\"\n\"\\x1a\\xde\\x90\\x15\\xd4\\x90\\xa8\\x9e\\xa3\\x1e\\xa3\\x9d\\xae\\x99\\xb1\\x1b\\xd4\\xb9\\x60\\x46\\x5d\\x74\\x61\\x6a\\x7c\\x1f\\x77\\x81\\x7b\\x89\\x5a\\x88\"\n\"\\x08\\x46\\x07\\x8c\\x9a\\x97\\x8c\\x97\\x1b\\xe1\\xc4\\x4d\\x2c\\x29\\x51\\x4d\\x30\\x56\\x63\\x9c\\xb2\\x6a\\x1f\\x0e\\xfb\\x42\\x33\\x1d\\x33\\xf8\\x1c\\x26\"\n\"\\x0a\\xfb\\x42\\x33\\x1d\\x41\\xf7\\x87\\x2e\\x0a\\xfb\\x42\\x33\\x1d\\xfb\\x3b\\xf8\\x1d\\x2b\\x1d\\xfb\\x42\\x33\\x1d\\x46\\xf8\\x04\\x24\\x1d\\xfb\\x29\\xf7\"\n\"\\x99\\xf7\\x98\\x15\\xfb\\x13\\xf7\\x9c\\x05\\x2b\\x06\\xf7\\x44\\xfb\\xfb\\xfb\\x4d\\xfc\\x13\\x05\\xe5\\x06\\xf7\\x20\\xf7\\xb9\\xf7\\x22\\xfb\\xb9\\x05\\xea\"\n\"\\x06\\xfb\\x51\\xf8\\x18\\xf7\\x40\\xf7\\xf6\\x05\\x2f\\x06\\x0e\\xf7\\xda\\xf8\\x8b\\xf9\\x4b\\x15\\xfb\\x5c\\xfb\\x36\\xfb\\x35\\xfb\\x5c\\xfb\\x58\\xf7\\x36\"\n\"\\xfb\\x36\\xf7\\x57\\xf7\\x59\\xf7\\x37\\xf7\\x37\\xf7\\x57\\xf7\\x58\\xfb\\x36\\xf7\\x39\\xfb\\x55\\x1f\\x87\\xfb\\xd0\\x15\\xfb\\x52\\xf7\\x50\\x05\\xb8\\xc2\"\n\"\\xcc\\xa2\\xd1\\x1b\\xd0\\xcb\\x74\\x60\\xc4\\x1f\\xb3\\x63\\x15\\xbb\\x52\\xa2\\x4c\\x42\\x1a\\x43\\x74\\x4b\\x5d\\x53\\x1e\\xfb\\x54\\xf7\\x57\\x05\\xf7\\x2c\"\n\"\\xfb\\x7f\\x15\\x5f\\x54\\x48\\x73\\x45\\x1b\\x45\\x4b\\xa2\\xba\\x50\\x1f\\xf7\\x55\\xf7\\x55\\x05\\xfb\\x7d\\xfb\\x2d\\x15\\x5f\\xc1\\x74\\xcb\\xd1\\x1a\\xd3\"\n\"\\xa2\\xcb\\xba\\xc4\\x1e\\xf7\\x52\\xfb\\x50\\x05\\x0e\\x79\\xf8\\xd7\\x16\\x9f\\x07\\x24\\x9f\\x6e\\x99\\x5d\\xbb\\x5c\\xbf\\x7a\\xc0\\x8a\\xeb\\xa0\\x66\\x93\"\n\"\\x7e\\x97\\x7d\\x08\\x5d\\xb2\\xc9\\x6c\\xc0\\x1b\\xe6\\xd2\\xd5\\xe9\\xe5\\x4a\\xd3\\x3a\\x6e\\x84\\x89\\x6e\\x50\\x1f\\xa7\\xb4\\x96\\xaa\\xb0\\x1a\\xe3\\x42\"\n\"\\xd2\\x30\\x2e\\x44\\x45\\x31\\x67\\x92\\x78\\xad\\x56\\x1e\\xa3\\x5b\\x76\\x91\\x6c\\x1b\\x40\\x49\\x3f\\x34\\x2e\\xd4\\x42\\xe7\\xdc\\xcf\\xbd\\xe6\\xb8\\x1f\"\n\"\\x8c\\x7b\\x8b\\x80\\x86\\x1a\\x43\\x65\\x3a\\x55\\x5f\\x1e\\x6b\\x72\\x74\\x82\\x2c\\x77\\x08\\x77\\x07\\x0e\\x6c\\x5a\\x0a\\xf7\\xaf\\xf7\\xa0\\x38\\x0a\\xf8\"\n\"\\x82\\xf9\\x21\\x15\\xd7\\x38\\x3f\\xfb\\x2a\\x56\\xf7\\x2a\\xfb\\x1f\\x07\\xc1\\x5f\\x5a\\xa3\\x47\\x1b\\xfb\\x1b\\x32\\xfb\\x01\\xfb\\x3a\\xfb\\x41\\xe5\\xfb\"\n\"\\x06\\xf7\\x1c\\xce\\xc0\\xa5\\xc3\\xbb\\x1f\\x50\\xd5\\xf8\\xec\\xca\\xc0\\x07\\xfb\\xb8\\xfb\\x58\\x15\\xe4\\xc4\\x3d\\xfb\\x0f\\xfb\\x0b\\x51\\x3d\\x33\\x2f\"\n\"\\x4f\\xda\\xf7\\x0c\\xf7\\x0c\\xc7\\xda\\xe7\\x1f\\x0e\\xfb\\x09\\xf7\\x96\\xf8\\xa8\\x15\\xfb\\x1c\\x86\\x3b\\x26\\xfb\\x3c\\x1a\\xfb\\x45\\xe3\\x23\\xf7\\x29\"\n\"\\xf7\\x29\\xe3\\xf3\\xf7\\x45\\xe1\\x78\\xcd\\x63\\xbd\\x1e\\x7a\\xa0\\x85\\x90\\x45\\xc1\\xfb\\x28\\xf7\\x07\\x18\\xf7\\x8f\\xd5\\xfc\\x05\\x44\\x06\\xf7\\x49\"\n\"\\xfb\\x58\\x40\\x1d\\xfb\\x38\\x90\\xf7\\xf1\\x15\\xf0\\xfb\\x11\\xf7\\x10\\xfb\\x45\\xb1\\x40\\xc7\\xf7\\x00\\xf7\\x05\\xf7\\x34\\xf4\\xf7\\x11\\x3b\\xe6\\xfb\"\n\"\\x39\\xf7\\x7d\\x6a\\xcf\\x53\\x24\\x41\\x22\\xfb\\x26\\xfb\\x4c\\x08\\x0e\\xfb\\xe9\\xf7\\x12\\xf9\\xef\\x40\\x0a\\x29\\x1d\\xfb\\xb3\\xf8\\x42\\x15\\x8c\\x64\"\n\"\\x91\\x78\\x99\\x4e\\x1d\\x29\\x1d\\x32\\xf7\\xb5\\x15\\xeb\\xf7\\x2a\\x05\\x4b\\x06\\x3c\\x2b\\x3a\\x54\\x1d\\x29\\x1d\\x35\\xf8\\x32\\x24\\x1d\\xf7\\xda\\xf9\"\n\"\\x93\\xf7\\x6c\\x15\\xc8\\xfc\\x62\\x07\\x91\\xf6\\xc3\\xbd\\xf7\\x01\\x89\\x08\\xf7\\xb7\\xc9\\xfb\\xac\\x5e\\x1d\\x66\\x1f\\x4a\\x60\\x69\\x42\\x2c\\x1a\\xfb\"\n\"\\x08\\xb8\\x38\\xb0\\x1d\\xc9\\xfb\\xb7\\x06\\xfb\\x01\\x89\\x53\\xbd\\x85\\xf5\\x08\\x0e\\x29\\x1d\\x8a\\xf8\\x23\\x28\\x1d\\xf7\\xd1\\xfb\\x6b\\x15\\x89\\x9d\"\n\"\\x93\\x8a\\x9a\\x1b\\xb5\\xa9\\x94\\xa0\\xa2\\x1f\\xa7\\xa2\\x91\\xa2\\xd7\\x1a\\xf8\\x55\\x07\\xbc\\x81\\xab\\x73\\xa4\\x1e\\xab\\x6e\\x5d\\x9d\\x56\\x1b\\x3f\"\n\"\\x5e\\x71\\x3e\\x53\\x1f\\xe3\\x3e\\xfc\\xa0\\xdf\\xf7\\xb5\\x07\\xf7\\x01\\xc3\\xcf\\xe5\\xca\\xb3\\x63\\x4d\\x1e\\xfc\\x2b\\x07\\x4e\\x8a\\x83\\x84\\x80\\x1e\"\n\"\\x7d\\x83\\x79\\x84\\x6f\\x1b\\x83\\x86\\x8b\\x8c\\x7f\\x1f\\x0e\\xf8\\x95\\xf7\\x7e\\x15\\x8c\\xdb\\x84\\xbc\\x7c\\xb1\\x08\\xe1\\x6a\\x3a\\x5d\\x1d\\xfb\\x42\"\n\"\\xfb\\x41\\xe5\\x23\\xf7\\x29\\xa3\\x99\\x8d\\x91\\xa9\\x1f\\x71\\x77\\x84\\x85\\x84\\x84\\x08\\x7a\\x78\\x80\\x71\\x74\\x1a\\x55\\xc2\\x69\\xdf\\xa2\\x9e\\x8e\"\n\"\\x91\\xa6\\x1e\\xb8\\x07\\x84\\x78\\x77\\x88\\x72\\x1b\\x5e\\x70\\x9e\\xab\\xb1\\x9c\\xa8\\xc1\\xc4\\x1f\\xb9\\xb9\\xa3\\xb6\\x96\\xc2\\x08\\x37\\x06\\x46\\x74\"\n\"\\x5b\\x66\\x48\\x1b\\x57\\x5e\\xa4\\xb6\\x6e\\x1f\\x78\\xaa\\x83\\xa9\\x8a\\xbf\\x08\\x8e\\xcf\\x15\\xec\\x91\\xc6\\xca\\xdf\\x1b\\xe0\\xc7\\x49\\x2d\\x1f\\x0e\"\n\"\\xfb\\x78\\x62\\x1d\\x0e\\xfb\\x78\\x62\\x1d\\x23\\xf8\\xb5\\x21\\x0a\\x30\\xf8\\xaa\\xf7\\x9f\\xa1\\x1d\\xf8\\x32\\xbd\\x1d\\x41\\xf8\\xa4\\xf7\\x88\\x15\\x92\"\n\"\\x07\\x8a\\xc7\\x8a\\x97\\x84\\xac\\x08\\xf5\\x75\\x34\\xce\\xfb\\x07\\x1b\\xfb\\x27\\x2e\\x20\\xfb\\x3b\\xfb\\x3b\\xe5\\x26\\xf7\\x28\\xf7\\x06\\xd5\\xbf\\xf2\"\n\"\\xab\\x1f\\x8d\\x92\\x05\\x52\\x06\\x84\\x7b\\x86\\x82\\x88\\x87\\x08\\x59\\x6c\\x58\\x71\\x4a\\x1b\\x5f\\x67\\x97\\xa1\\x73\\x1f\\x7a\\x9a\\x82\\x9b\\x80\\xb0\"\n\"\\x08\\xed\\x07\\xf7\\xb3\\xbb\\x15\\xfb\\xb1\\xe0\\x06\\xd1\\xac\\xaf\\xa4\\xd0\\x1b\\xc1\\xb0\\x7a\\x63\\xae\\x1f\\x96\\x7e\\x8f\\x84\\x91\\x79\\x08\\x0e\\x5f\"\n\"\\x0a\\x0e\\x5f\\x0a\\xf7\\x02\\xf7\\x93\\x21\\x0a\\xfb\\x42\\xf7\\x57\\x7b\\x0a\\xf7\\x8d\\x7b\\x0a\\x0e\\xfb\\x8e\\xbe\\x16\\xf7\\xd9\\xf8\\xd5\\xfb\\xd9\\x37\"\n\"\\xf7\\x85\\xfb\\x36\\xfb\\x85\\x37\\xf7\\x85\\xfb\\x37\\xfb\\x85\\x06\\x0e\\xd7\\xf7\\xf4\\xf7\\x98\\x15\\xfb\\x37\\x60\\xf7\\x37\\xfb\\x3a\\xbb\\xf7\\x3a\\xf7\"\n\"\\x35\\xb6\\xfb\\x35\\xf3\\x06\\xe4\\x98\\xcf\\xda\\xe6\\x1a\\xee\\x37\\xde\\x28\\x29\\x38\\x34\\x26\\x34\\xcf\\x3e\\xe6\\x7e\\x1e\\xa6\\xf7\\xcb\\x15\\xd0\\xc5\"\n\"\\x50\\x45\\x43\\x51\\x51\\x44\\x42\\x52\\xc5\\xd4\\xd2\\xc5\\xc4\\xd5\\x1f\\x0e\\xf7\\x1b\\xf7\\xe0\\x15\\xf7\\x28\\xdd\\xfb\\x28\\x92\\x0a\\xf7\\x38\\x7e\\x1d\"\n\"\\x0e\\xfb\\x42\\xf7\\x68\\x4f\\x0a\\xf7\\x7e\\x06\\xf7\\x54\\xf8\\x90\\x05\\x2d\\x06\\xfb\\x20\\xfc\\x19\\xfb\\x28\\xf8\\x19\\x05\\x2d\\x06\\xf7\\x5c\\xfc\\x90\"\n\"\\x05\\x0e\\xf7\\x0b\\xf9\\x70\\x15\\x8d\\x2f\\x0a\\xe7\\x3f\\x0a\\x51\\x8a\\x0a\\xf7\\x76\\xfb\\x64\\x32\\x0a\\xf7\\x75\\xf9\\x79\\x99\\x1d\\xe0\\xfb\\x6d\\x32\"\n\"\\x0a\\xf7\\xcf\\xf8\\xe4\\x15\\xef\\x54\\x07\\x89\\xc2\\x9d\\xa8\\xb0\\x8c\\x8d\\x8c\\x18\\xb1\\x07\\x4f\\x8d\\x64\\x5c\\x8a\\x3f\\x08\\x24\\x07\\xf7\\x51\\x47\"\n\"\\x15\\x3f\\x07\\xca\\x61\\x5d\\xa7\\x49\\x1b\\xfb\\x13\\x33\\xfb\\x0a\\xfb\\x3c\\x33\\xa0\\x4b\\xb8\\x56\\x1f\\x5d\\xb2\\xbd\\x72\\xc1\\x1b\\xca\\xb8\\xa7\\xcd\"\n\"\\xb7\\x1f\\x70\\x07\\xfb\\x20\\x64\\x57\\x23\\x44\\x66\\xa7\\xc7\\x83\\x1e\\x36\\x06\\x2a\\x93\\xd8\\x4e\\xf7\\x06\\x1b\\xd8\\xcb\\xa4\\xb5\\xad\\x1f\\xb3\\xbc\"\n\"\\x9a\\xcc\\xf7\\x0f\\x1a\\xf8\\x4a\\x07\\xfb\\x73\\x4d\\x15\\xe3\\xbd\\x41\\xfb\\x19\\xfb\\x13\\x58\\x41\\x34\\x35\\x59\\xd6\\xf7\\x15\\xf7\\x14\\xbd\\xd7\\xe1\"\n\"\\x1f\\x0e\\xf7\\xd1\\xf9\\x5f\\x58\\x1d\\xe2\\x33\\x32\\x0a\\xfb\\x11\\xb3\\x1d\\xf8\\x4f\\x04\\xfc\\x7d\\xf7\\x63\\x05\\x3c\\x07\\xf8\\x1e\\xfb\\x38\\xfc\\x1e\"\n\"\\xfb\\x35\\x05\\x3c\\x07\\xf8\\x7d\\xf7\\x63\\x05\\x0e\\xf7\\x2d\\xf9\\x21\\x15\\xd7\\x38\\x3f\\x4f\\x56\\xc7\\xfc\\xec\\xde\\xf7\\xb5\\x07\\xf6\\xc3\\xd1\\xe2\"\n\"\\xa6\\xa5\\x83\\x7c\\x9f\\x1e\\xa3\\x79\\x95\\x73\\x65\\x1a\\xfb\\xff\\xde\\xf8\\x20\\x07\\xe3\\x4c\\xc2\\x25\\x41\\x5e\\x74\\x4b\\x5a\\x1e\\xf7\\x28\\xf7\\x63\"\n\"\\xc0\\x07\\x0e\\x70\\x1d\\x34\\xf7\\x67\\x27\\x1d\\x3b\\xf7\\xbc\\x6f\\x15\\x9f\\xe5\\xc7\\xf2\\xf7\\x08\\xf7\\x25\\x08\\xeb\\xf7\\x0e\\xab\\xce\\xda\\x1a\\xde\"\n\"\\x45\\xcf\\x37\\x5b\\x5f\\x76\\x65\\x6a\\x1e\\x75\\x72\\x81\\x75\\x7e\\x5d\\x7f\\xaf\\x83\\x9d\\x7f\\x9d\\x08\\xbd\\x6a\\x58\\xa8\\x54\\x1b\\x36\\x49\\x47\\x32\"\n\"\\x48\\xa0\\x5e\\xdf\\xfb\\x06\\x1f\\xf7\\x2b\\xfb\\x5e\\xb3\\x47\\xa5\\x24\\x08\\x0e\\x45\\xb4\\x16\\xf8\\x9e\\xf8\\x25\\x06\\xfb\\x99\\xf7\\xdc\\xfb\\x99\\xfb\"\n\"\\xdc\\x05\\xbe\\xfb\\xf2\\x15\\xf7\\xdc\\x07\\xf7\\x66\\xf7\\xa2\\xf7\\x66\\xfb\\xa2\\x05\\xfb\\xdc\\x07\\x0e\\xfc\\x20\\x2e\\x1d\\xfb\\x51\\x77\\x1d\\xfb\\x7a\"\n\"\\xf7\\x3f\\x88\\x0a\\xf7\\x01\\x27\\x6a\\x0a\\xfc\\x20\\xf7\\x48\\x20\\x0a\\x38\\xfc\\xa0\\xde\\x06\\xdd\\xf9\\x51\\x15\\xfb\\x8b\\x45\\xf7\\x8b\\x06\\x0e\\xb2\"\n\"\\xf7\\xf8\\xf7\\xbd\\x15\\x5b\\xb6\\x87\\x8e\\x77\\x9a\\x08\\xa7\\x66\\x5d\\x9d\\x67\\x1b\\x3e\\x4c\\x4c\\x3e\\x3e\\xca\\x4c\\xd8\\xb0\\xb8\\x9c\\xa8\\xb0\\x1f\"\n\"\\x9f\\x99\\x8f\\x8f\\xbb\\xb6\\xbc\\x60\\x90\\x87\\x9e\\x7d\\x08\\x6f\\xb0\\xb8\\x79\\xb0\\x1b\\xd8\\xca\\xca\\xd8\\xd8\\x4c\\xca\\x3e\\x67\\x5c\\x79\\x6f\\x67\"\n\"\\x1f\\x77\\x7d\\x87\\x87\\x5a\\x60\\x08\\xaf\\x6a\\x15\\xc3\\xc4\\xc3\\xab\\xb5\\x1b\\xbc\\xb3\\x63\\x5b\\x5a\\x63\\x63\\x5a\\x61\\x53\\xab\\xc4\\x52\\x1f\\x44\"\n\"\\x16\\x53\\x52\\x53\\x6b\\x61\\x1b\\x5a\\x63\\xb3\\xbb\\xbb\\xb3\\xb3\\xbc\\xb5\\xc3\\x6c\\x52\\xc4\\x1f\\x0e\\xfc\\x24\\xf7\\x50\\xf8\\x9f\\x15\\xb0\\x85\\xda\"\n\"\\x82\\xe8\\x1e\\x87\\xb5\\x89\\xa1\\x97\\x1a\\x9d\\x91\\x95\\x97\\x91\\x8e\\x8a\\x80\\x95\\x1e\\x81\\x95\\x97\\x86\\x98\\x1b\\xa6\\xa0\\xa1\\xa7\\xa9\\x6f\\xa3\"\n\"\\x68\\x60\\x6c\\x6c\\x51\\x7d\\x1f\\x7b\\x4b\\x86\\x46\\xfb\\x45\\x1a\\xfb\\x78\\x07\\x5f\\x8f\\x4e\\x95\\x22\\x1e\\x8f\\x61\\x8d\\x75\\x7f\\x1a\\x79\\x85\\x81\"\n\"\\x7f\\x85\\x89\\x8c\\x96\\x80\\x1e\\x95\\x81\\x80\\x90\\x7d\\x1b\\x71\\x75\\x75\\x70\\x6c\\xa7\\x73\\xae\\xb7\\xaa\\xaa\\xc5\\x99\\x1f\\x9b\\xcb\\x90\\xd4\\xf7\"\n\"\\x41\\x1a\\x0e\\x45\\xf7\\x9d\\xfa\\x25\\x15\\xfd\\x79\\x07\\x66\\x91\\x3c\\x94\\x2e\\x1e\\x8f\\x61\\x8d\\x75\\x7f\\x1a\\x79\\x85\\x81\\x7f\\x85\\x88\\x8c\\x96\"\n\"\\x81\\x1e\\x95\\x81\\x7f\\x90\\x7e\\x1b\\x70\\x76\\x75\\x6f\\x6d\\xa7\\x73\\xae\\xb6\\xaa\\xaa\\xc5\\x99\\x1f\\x9b\\xcb\\x90\\xd0\\xf7\\x45\\x1a\\xf9\\x70\\x07\"\n\"\\x0e\\x45\\xf7\\xe7\\xfb\\x6e\\x15\\xf9\\x79\\x07\\xb0\\x85\\xda\\x82\\xe8\\x1e\\x87\\xb5\\x89\\xa1\\x97\\x1a\\x9d\\x91\\x95\\x97\\x91\\x8e\\x8a\\x80\\x95\\x1e\"\n\"\\x81\\x95\\x97\\x86\\x98\\x1b\\xa6\\xa0\\xa1\\xa7\\xa9\\x6f\\xa3\\x68\\x60\\x6c\\x6c\\x51\\x7d\\x1f\\x7b\\x4b\\x86\\x46\\xfb\\x45\\x1a\\xfd\\x70\\x07\\x0e\\xb8\"\n\"\\xf8\\xeb\\x16\\xf7\\xa1\\x07\\xf7\\x29\\x86\\xb1\\x71\\xb7\\x1e\\xd1\\x61\\x3e\\xb4\\x31\\x1b\\x38\\x46\\x6a\\x4d\\x5e\\x1f\\x66\\x5a\\x85\\x67\\xfb\\x36\\x1a\"\n\"\\xfb\\xa1\\xd1\\xf7\\xa4\\x07\\xf7\\x05\\x91\\xba\\x9d\\xad\\x1e\\xbd\\xa6\\xc5\\xad\\xc8\\x1b\\xc4\\xc2\\x6e\\x5d\\xa8\\x1f\\xa2\\x67\\x91\\x62\\xfb\\x12\\x1a\"\n\"\\xfb\\xa4\\x07\\x0e\\xf8\\x0e\\xf8\\xa3\\x6c\\x0a\\xfb\\x01\\xfb\\x63\\x83\\x0a\\xfb\\x14\\xfb\\x05\\x15\\x96\\x59\\x96\\x75\\xa5\\x6d\\x08\\x54\\xbb\\xc7\\x71\"\n\"\\xdc\\x1b\\xdc\\xc7\\xa5\\xc2\\xbb\\x1f\\xa5\\xa9\\x96\\xa1\\x96\\xbd\\x84\\x36\\x80\\x62\\x6d\\x5e\\x08\\x4c\\x61\\x4b\\x6b\\x38\\x1b\\x3e\\x4f\\xa6\\xc1\\x61\"\n\"\\x1f\\x67\\xba\\x7c\\xb8\\x84\\xe8\\x08\\xf7\\xee\\xf7\\x05\\x83\\x0a\\x0e\\xfc\\x58\\xf7\\x2a\\x20\\x0a\\x38\\xfc\\xa0\\xab\\x06\\x53\\x5e\\x79\\x6e\\x61\\x1a\"\n\"\\x57\\xb7\\x67\\xca\\x9c\\xa2\\x8f\\x90\\x9d\\x1e\\xb8\\x07\\x85\\x79\\x7f\\x88\\x7e\\x1b\\x6d\\x77\\xa1\\xad\\xab\\xa2\\xb7\\xa9\\xa6\\x1f\\xf9\\x6d\\x04\\x37\"\n\"\\x22\\xdf\\x06\\x0e\\xfc\\x58\\x47\\x1d\\x0e\\xfc\\x58\\x47\\x1d\\x94\\xf7\\x53\\x22\\x1d\\xfc\\x58\\x47\\x1d\\x8c\\xf7\\xe3\\x40\\x0a\\xfc\\x58\\x47\\x1d\\x8c\"\n\"\\xf7\\x93\\x21\\x0a\\xfc\\x20\\x2e\\x1d\\xc3\\xf9\\x61\\x36\\x0a\\xfc\\x58\\xd1\\xf8\\xa0\\x74\\x0a\\x2e\\xf7\\x6d\\x27\\x1d\\xfb\\x42\\xf7\\x21\\xf7\\xc3\\x15\"\n\"\\xf7\\x71\\x30\\x1d\\xf7\\x5b\\x07\\xde\\xdc\\xf7\\x42\\xfb\\xac\\x05\\xf2\\x06\\xfb\\x6a\\xf7\\xea\\xf7\\x4c\\xf7\\x4a\\x05\\xfb\\x01\\x06\\x0e\\xfb\\x42\\x6b\"\n\"\\x0a\\xd7\\xfb\\xfe\\x23\\x1d\\xfb\\x42\\xf5\\xf7\\x47\\x15\\xde\\xdd\\xf7\\x48\\xfb\\x99\\x05\\xd8\\x06\\xfb\\x66\\xf7\\xc2\\xf7\\x64\\xf7\\x64\\x05\\x37\\x06\"\n\"\\xfb\\x92\\xfb\\x96\\x05\\xf7\\x96\\x4a\\xfc\\x92\\xcc\\x07\\x0e\\xfc\\x58\\x43\\x1d\\x92\\x3b\\x0a\\xfb\\x42\\xa1\\x16\\xe5\\x06\\xf7\\x1b\\xf8\\x1b\\xf7\\x21\"\n\"\\xfc\\x1b\\x05\\xe7\\x06\\xfb\\xa0\\xf9\\x6d\\x05\\x30\\x06\\xdd\\xfb\\x70\\x05\\x0e\\xfc\\x0b\\x43\\x1d\\xc0\\xf9\\x6d\\x38\\x0a\\xfc\\x58\\x43\\x1d\\x32\\x4f\"\n\"\\x23\\x1d\\xfb\\xe8\\xf7\\x32\\x20\\x1d\\x38\\xfd\\x6d\\xde\\x06\\xce\\xf8\\x2c\\x15\\x22\\xf1\\xf4\\x07\\x0e\\xfb\\x11\\xb3\\x1d\\xfc\\x7d\\xf8\\x0a\\x8a\\x1d\"\n\"\\xf8\\x02\\xf7\\xd5\\x15\\xc2\\xfb\\x34\\x07\\x86\\x95\\x87\\x91\\x84\\x97\\x08\\x67\\xca\\x84\\x9e\\xb1\\x1a\\xd7\\xc3\\xbe\\xe0\\xe2\\xb8\\x58\\x24\\x8f\\x1e\"\n\"\\xe3\\x06\\x8a\\xc8\\x83\\xb2\\x77\\xac\\x08\\xc9\\x68\\x44\\xb0\\x37\\x1b\\xfb\\x1b\\x23\\x2e\\xfb\\x0d\\x61\\x93\\x74\\xb1\\x4c\\x1f\\x92\\x80\\x05\\x3a\\x54\"\n\"\\xf7\\x02\\x06\\x92\\x7f\\x8f\\x82\\x91\\x7b\\x08\\xfb\\x12\\x54\\xf7\\x18\\x06\\x83\\x50\\x68\\x59\\x39\\x48\\xbc\\x49\\x18\\xa3\\xb1\\xaf\\x97\\xae\\x1b\\xa0\"\n\"\\xa3\\x87\\x84\\xa0\\x1f\\x6e\\xde\\xa5\\x85\\xaf\\x1b\\xc0\\xb2\\x9c\\xb3\\xb3\\x1f\\x61\\xcd\\x05\\x76\\x6d\\x70\\x81\\x70\\x1b\\x79\\x7a\\x8f\\x97\\x60\\x1f\"\n\"\\x97\\x64\\x7a\\x8e\\x70\\x1b\\x61\\x63\\x7e\\x71\\x64\\x1f\\xd6\\xd6\\xab\\xb9\\x94\\xba\\x08\\xf7\\x10\\xc2\\xfb\\x12\\x06\\x88\\x98\\x88\\x95\\x86\\x99\\x08\"\n\"\\x0e\\xfc\\x58\\xf7\\x23\\x16\\xf8\\xf2\\x07\\xae\\x9e\\x9d\\xb1\\x1e\\xa9\\x8a\\x05\\x46\\x1d\\x07\\x0e\\xd7\\xf8\\x14\\xf8\\x82\\x15\\x9f\\x64\\x73\\x92\\x69\"\n\"\\x1b\\x28\\x36\\x36\\x27\\x2b\\xe0\\x39\\xef\\xed\\xdf\\xe1\\xf0\\xb9\\x79\\xb5\\x68\\xae\\x1f\\xf7\\x2a\\xf7\\x2a\\x90\\x72\\x9f\\x5a\\x9a\\x6d\\x19\\x77\\x96\"\n\"\\x90\\x85\\x95\\x1b\\x92\\x90\\x91\\x92\\x90\\x8a\\x8f\\x89\\x96\\x1f\\x84\\xab\\x89\\xa1\\xa8\\x1a\\xb1\\x8e\\xa9\\x92\\xa4\\x1e\\x90\\x9c\\x8b\\x8c\\x8f\\x1a\"\n\"\\x91\\x87\\x8f\\x85\\x87\\x82\\x89\\x88\\x82\\x1e\\x83\\x71\\x79\\x89\\x5c\\x1b\\x6f\\x73\\x8e\\x91\\x6e\\x1f\\x8d\\x80\\x88\\x8c\\x86\\x1b\\x83\\x85\\x86\\x83\"\n\"\\x7e\\xa6\\x79\\xb2\\x7c\\x1f\\xb4\\x7c\\x91\\x89\\x98\\x88\\x08\\xfb\\x8c\\xfb\\x41\\x15\\xd3\\xc7\\x4e\\x42\\x41\\x4f\\x4f\\x41\\x41\\x4f\\xc7\\xd6\\xd5\\xc7\"\n\"\\xc6\\xd7\\x1f\\x0e\\xfc\\x7a\\xf7\\x35\\x91\\x0a\\x0e\\xfb\\x42\\xf7\\x7f\\xf7\\x53\\x15\\x92\\x7b\\x75\\x90\\x78\\x1b\\x48\\x4f\\x52\\x4a\\x64\\xa7\\x73\\xb8\"\n\"\\xe8\\xcd\\xd3\\xf0\\x1f\\xf7\\xd4\\x07\\xc8\\x82\\xbd\\x39\\x30\\x1a\\x54\\x82\\x60\\x72\\x50\\x1e\\xa8\\x06\\xb2\\xbb\\xa0\\xc6\\xcb\\x1a\\xdd\\x6c\\xd9\\x4b\"\n\"\\xd7\\x1e\\x53\\xce\\x8a\\x8c\\x85\\x92\\x83\\x96\\x19\\xcb\\x5b\\x07\\x0e\\xd7\\xf7\\x95\\xf9\\x19\\x15\\xfc\\x59\\x78\\x0a\\xf7\\xf0\\x07\\xf7\\xb5\\x5f\\x05\"\n\"\\xfc\\x03\\x78\\x0a\\xf8\\x52\\x07\\x0e\\x35\\x1d\\xf7\\x37\\x39\\x1d\\x45\\xf7\\x0a\\x98\\x0a\\xf7\\xb5\\x07\\xf6\\xc3\\xd1\\xe1\\xcd\\xb5\\x63\\x4c\\x1e\\xfb\"\n\"\\xff\\xde\\xf8\\x20\\x7d\\x0a\\xfb\\x4d\\xf7\\x84\\x38\\x0a\\x35\\x1d\\xf7\\x47\\xce\\x42\\x1d\\x35\\x1d\\xdd\\xfc\\xdc\\x23\\x1d\\xf7\\xda\\xf8\\xa4\\xf7\\x6c\"\n\"\\x15\\xf7\\x83\\xc8\\xfb\\x60\\x06\\xe3\\xf7\\x2f\\x05\\xf7\\x08\\xc9\\x3a\\x06\\xac\\xc6\\x61\\xa3\\x5c\\x38\\x05\\xfb\\x23\\x5e\\x1d\\x65\\x1f\\x4b\\x60\\x69\"\n\"\\x42\\x2c\\x1a\\xfb\\x08\\xb8\\x37\\xdc\\x69\\x1e\\x6a\\x52\\xb6\\x74\\xb1\\xce\\x05\\x88\\xa5\\x97\\x8a\\xb5\\x1b\\xf7\\xac\\xc9\\xfb\\xb7\\x06\\x77\\x85\\x8b\"\n\"\\x8c\\x82\\x1f\\xaa\\xf7\\x2d\\x15\\x3a\\xfb\\x21\\x57\\x9d\\x6c\\xbe\\x88\\xd3\\x19\\xf7\\xb6\\xf7\\x6c\\x15\\x33\\xfb\\x2f\\x05\\xfb\\x5e\\x06\\x91\\xf6\\xc3\"\n\"\\xbd\\xf7\\x01\\x89\\x08\\x0e\\xfb\\x11\\xf7\\x31\\xf7\\x03\\x15\\x4f\\x20\\xbe\\x6e\\xd7\\xf7\\x1c\\x05\\xf7\\xb8\\xd1\\xfb\\x91\\x06\\xc4\\xf1\\x05\\xf7\\x58\"\n\"\\xd1\\xfb\\x31\\x06\\xc6\\xf4\\x59\\xa7\\x3f\\xfb\\x19\\x05\\xfb\\x98\\x45\\xf7\\x71\\x06\\x52\\x25\\x05\\xfb\\x38\\x45\\x06\\x0e\\xfb\\x42\\xf7\\xb3\\x96\\x0a\"\n\"\\xfc\\x31\\xfb\\x20\\xf8\\x31\\x05\\x2d\\x06\\xf7\\x4c\\xfc\\xa0\\x05\\x0e\\x2a\\x1d\\xfb\\x2b\\xf7\\xa2\\x6d\\x0a\\x2a\\x1d\\x6a\\xf7\\xaa\\x15\\x2a\\x47\\x0a\"\n\"\\xc9\\x16\\x2a\\x47\\x0a\\x0e\\x2a\\x1d\\xf7\\x1d\\xf7\\x83\\x15\\xfb\\xa6\\x45\\xf7\\xa6\\x06\\x0e\\xf6\\x63\\x1d\\x0e\\xf6\\x63\\x1d\\x38\\xf8\\x12\\x21\\x0a\"\n\"\\xf7\\xa9\\x3d\\x1d\\x0e\\xf7\\xa9\\x3d\\x1d\\x62\\xf7\\xd1\\x21\\x0a\\xf7\\xc5\\xbd\\x16\\xfa\\x04\\xcd\\xfd\\xc2\\xf9\\xb8\\x49\\x06\\x0e\\x4c\\x55\\x0a\\x2c\"\n\"\\xf7\\xec\\x21\\x1d\\xfb\\x5a\\xf1\\xf9\\x32\\x15\\xac\\xd5\\x8b\\x8b\\xb1\\x1b\\xba\\xb2\\x79\\x69\\xa3\\x1f\\xad\\x5c\\xa0\\x40\\x42\\x1a\\x6d\\x89\\x73\\x82\"\n\"\\x50\\x1e\\xc0\\x46\\x70\\x97\\x55\\x1b\\x5a\\x64\\x7b\\x69\\x69\\x1f\\x5d\\x5c\\x6f\\x48\\x4a\\x1a\\xfb\\x01\\xde\\x36\\xf6\\xd7\\xc8\\xb4\\xd8\\xb6\\x1e\\xb1\"\n\"\\xcf\\xa7\\xf7\\x16\\xf3\\x1a\\xf7\\x5c\\xfb\\x03\\xf7\\x25\\xfb\\x2d\\x5e\\x5c\\x81\\x79\\x63\\x1e\\xf7\\xbf\\xfc\\x36\\x15\\x7e\\x33\\x83\\x6a\\x7c\\x5f\\x08\"\n\"\\x3d\\x70\\x5e\\x5f\\x54\\x1b\\x53\\x6a\\xbe\\xe2\\xf7\\x08\\xcd\\xeb\\xdc\\xb5\\xb0\\x75\\x62\\xa5\\x1f\\x0e\\xf8\\x38\\xf9\\x0d\\xf7\\xc9\\x15\\x55\\xe0\\x51\"\n\"\\x36\\x5f\\x63\\xb7\\xfb\\x7e\\x06\\x6c\\xa3\\x79\\xb5\\x99\\x96\\x8c\\x8f\\xa0\\x1e\\xb5\\x07\\x88\\x80\\x85\\x8a\\x81\\x1b\\x74\\x87\\x8f\\xa3\\x1f\\xf7\\x68\"\n\"\\xc1\\x07\\xf7\\xfa\\x5d\\x15\\xc8\\x8a\\x5f\\xad\\x3e\\x1b\\x3e\\x58\\x65\\x52\\x5b\\xa6\\x75\\xdb\\x79\\x1f\\xbb\\x7f\\x05\\xac\\x84\\x98\\x7e\\x74\\x1a\\x6d\"\n\"\\x6f\\x78\\x5f\\x5a\\x77\\x9b\\xb8\\x84\\x1e\\x4e\\x06\\x44\\x8e\\xb6\\x68\\xe2\\x1b\\xde\\xc1\\xb2\\xc6\\xb9\\x6f\\xa5\\x48\\x9a\\x1f\\x5a\\x96\\x05\\x62\\x94\"\n\"\\x7b\\x98\\xa1\\x1a\\xa9\\xa3\\x9c\\xb5\\xb3\\x9f\\x7b\\x69\\x8c\\x1e\\xfd\\x66\\xe1\\x15\\xc3\\x06\\xc5\\xb7\\xab\\x1d\\x3b\\xd8\\xfb\\x24\\x1e\\xfb\\x15\\xfd\"\n\"\\x6d\\xe8\\x97\\x0a\\xa1\\x07\\xe3\\xc0\\x5b\\x3b\\x3b\\x56\\x5b\\x33\\x1f\\x0e\\x71\\xf7\\xaa\\x4f\\x0a\\xf7\\x58\\x06\\xcc\\x91\\xb0\\x98\\xb4\\xab\\x08\\xcd\"\n\"\\xbd\\xb0\\xdd\\xe9\\x1a\\xf7\\x09\\x52\\xed\\x2d\\xb4\\x1e\\x9d\\x64\\x55\\x95\\x55\\x1b\\x7f\\x87\\x8b\\x8a\\x7b\\x1f\\xfc\\x79\\x07\\x5a\\x90\\x71\\x95\\x73\"\n\"\\xa3\\x08\\x68\\xad\\x76\\xca\\xd3\\x1a\\xbe\\x95\\xb7\\x9e\\xae\\x1e\\x98\\xa4\\x98\\x97\\xa8\\x9b\\x08\\xde\\x07\\x50\\x73\\x6f\\x77\\x6a\\x61\\x08\\x63\\x58\"\n\"\\x7a\\x56\\x44\\x1a\\x25\\xaf\\x35\\xca\\x5a\\x1e\\xb3\\x6c\\xb1\\x7e\\xd2\\x84\\x08\\xdf\\xf8\\x79\\x15\\xec\\x85\\xc3\\x43\\xfb\\x0b\\x1a\\x45\\x79\\x50\\x69\"\n\"\\x64\\x1e\\x72\\x6f\\x70\\x7f\\x5a\\x86\\x08\\x0e\\x9b\\xf9\\x03\\x20\\x0a\\xfc\\xc1\\x41\\xd6\\xfc\\x56\\xdf\\xf8\\x56\\xf7\\x83\\xfc\\x56\\xdf\\xf8\\x56\\xd6\"\n\"\\x06\\x0e\\xf7\\xd6\\xf7\\x70\\xfb\\x30\\x15\\x3e\\x36\\xf7\\x8f\\x06\\x8a\\xe0\\x05\\x40\\xf9\\xab\\xf7\\xfe\\xfd\\xab\\x45\\x06\\x8c\\x36\\x05\\xf7\\x84\\xe0\"\n\"\\x42\\xf9\\xab\\xf0\\xe0\\xfd\\x8f\\x36\\xf3\\x06\\x0e\\xf7\\xda\\xf9\\x93\\xc9\\x15\\xfb\\xb7\\x06\\xfb\\x0d\\x57\\xc2\\xf7\\x16\\xf7\\x15\\xbf\\xc3\\xf7\\x0d\"\n\"\\x1f\\xf7\\xb7\\xc9\\xfb\\xac\\x5e\\x1d\\x66\\x1f\\x4a\\x60\\x69\\x43\\x2b\\x1a\\xfb\\x07\\xb8\\x37\\xb0\\x1d\\x06\\x0e\\xf7\\xda\\xf7\\x7d\\xc9\\x15\\x4d\\xf7\"\n\"\\xac\\x07\\xde\\xae\\x92\\xa4\\xb1\\x1f\\xcc\\xb6\\xac\\xd4\\xee\\x1a\\xf7\\x03\\x5d\\xe0\\x3d\\xac\\x1e\\x99\\x69\\x70\\x8f\\x46\\x1b\\xfb\\xac\\x4d\\xf7\\xb7\"\n\"\\x06\\xf7\\x0d\\xbf\\x54\\xfb\\x16\\xfb\\x16\\x57\\x54\\xfb\\x0d\\x1f\\x0e\\xb2\\xf8\\x2b\\x20\\x0a\\x37\\xfc\\x66\\x06\\xfb\\x02\\x94\\x61\\xbd\\x8f\\xf7\\x0b\"\n\"\\x08\\xf7\\xb4\\x37\\xfb\\xb7\\x07\\x83\\xfb\\x31\\xd1\\x3f\\xf7\\x3e\\x78\\x08\\xfb\\x5b\\xdf\\xf7\\x5b\\x07\\xf7\\x3e\\x9e\\xd1\\xd7\\x83\\xf7\\x31\\x08\\xf7\"\n\"\\xb7\\x37\\xfb\\xb4\\x07\\x8f\\xfb\\x0b\\x61\\x59\\xfb\\x02\\x82\\x08\\x0e\\xfc\\x58\\xf7\\x32\\x20\\x1d\\x2e\\x26\\x06\\x3b\\xac\\x5c\\xc7\\x87\\x1e\\xb1\\x07\"\n\"\\x68\\x90\\x7d\\xa6\\x8c\\xc5\\x08\\xbb\\x06\\x0e\\xfb\\xe9\\x37\\x0a\\xd3\\x39\\x1d\\xfb\\x71\\xf8\\x44\\xfa\\x25\\x15\\xfb\\x14\\xfd\\xa8\\xfb\\x55\\xf8\\x20\"\n\"\\xfb\\x28\\x42\\x9d\\x6a\\xe9\\xb9\\xf7\\x85\\xfc\\x85\\xf7\\x2c\\xfa\\x44\\x05\\x0e\\xfb\\xe9\\x37\\x0a\\xe8\\xce\\x42\\x1d\\xfb\\xe9\\x37\\x0a\\x3a\\xfc\\xdc\"\n\"\\x23\\x1d\\x31\\xf8\\xb4\\xf8\\x0b\\x15\\xfc\\x8c\\xfb\\xb5\\xd1\\xf7\\x6f\\xf8\\x46\\x06\\x0e\\x22\\xc6\\xfb\\x6e\\x15\\xdf\\x4d\\x0a\\xbb\\x73\\xce\\x1b\\xf7\"\n\"\\x1d\\xe4\\xf7\\x02\\xf7\\x3d\\xf7\\x42\\x31\\xf7\\x01\\xfb\\x22\\x41\\x4a\\x6d\\x55\\x60\\x1f\\x61\\x57\\x7e\\x59\\xfb\\x02\\x1a\\xf7\\x7e\\xf7\\x6f\\x15\\xe6\"\n\"\\xc4\\x3b\\xfb\\x14\\xfb\\x0c\\x4f\\x3c\\x31\\x30\\x52\\xd9\\xf7\\x11\\xf7\\x11\\xc5\\xda\\xe7\\x1f\\x0e\\xfb\\x42\\x31\\x1d\\x40\\xf7\\xfe\\x21\\x1d\\xfb\\x42\"\n\"\\xf7\\x88\\x73\\x15\\xc7\\x8f\\xa9\\x91\\xa6\\x97\\x08\\xc8\\xa6\\xb0\\xc2\\xca\\x1a\\xd9\\x5f\\xb6\\x23\\xa4\\x1e\\x51\\x1d\\xe3\\x06\\xf2\\x8a\\x47\\xc5\\x4c\"\n\"\\x1d\\x8d\\xfb\\x00\\xc4\\x51\\xf7\\x04\\x80\\x6c\\x44\\x18\\x96\\x85\\x05\\x90\\x79\\x0a\\x7a\\x91\\xa2\\x5d\\x6f\\x0a\\x59\\x82\\x31\\x0a\\xfb\\x42\\x31\\x1d\"\n\"\\xfb\\x28\\xf7\\xff\\x37\\x1d\\xfb\\x42\\x31\\x1d\\xfb\\x2d\\xfc\\x4a\\x23\\x1d\\xfb\\xd4\\xf7\\x46\\x91\\x0a\\xf7\\x60\\xf7\\x94\\x99\\x0a\\x0e\\x52\\xf8\\xda\"\n\"\\x20\\x0a\\xfb\\x4a\\x06\\x97\\x5c\\x74\\x8e\\x68\\x1b\\xfb\\x25\\x31\\xfb\\x00\\xfb\\x41\\xfb\\x45\\xe3\\x23\\x3c\\x1d\\xe4\\xf4\\xf7\\x40\\xe3\\x78\\xc3\\x5b\"\n\"\\xbf\\x1f\\xf7\\x07\\x06\\xfb\\xb1\\x97\\x15\\xea\\xc2\\x3f\\xfb\\x16\\xfb\\x11\\x52\\x3e\\x2e\\x2e\\x52\\xd8\\xf7\\x13\\xa1\\x0a\\x1f\\x0e\\xf7\\xef\\xf8\\x93\"\n\"\\x6c\\x0a\\x5a\\x04\\xf7\\x43\\xf7\\x21\\xfb\\x21\\xfb\\x43\\xfb\\x44\\xfb\\x21\\xfb\\x20\\xfb\\x45\\xfb\\x43\\xfb\\x1f\\xf7\\x22\\xf7\\x47\\xf7\\x3e\\xf7\\x23\"\n\"\\xf7\\x21\\xf7\\x41\\x1f\\xfb\\x01\\xfb\\x37\\x15\\x70\\x74\\x74\\x71\\x6f\\xa2\\x74\\xa6\\xa6\\xa2\\xa2\\xa6\\xa6\\x74\\xa2\\x70\\x1f\\xfb\\x14\\xfb\\x00\\x15\"\n\"\\x92\\x36\\x96\\x62\\xa9\\x5e\\x08\\x4c\\xb5\\xcb\\x6b\\xde\\x1b\\xd8\\xc7\\xa6\\xc1\\xb5\\x1f\\xaf\\xba\\x9a\\xb8\\x92\\xe8\\x80\\x59\\x80\\x75\\x71\\x6d\\x08\"\n\"\\x54\\x5b\\x4f\\x71\\x3a\\x1b\\x3a\\x4f\\xa5\\xc2\\x5b\\x1f\\x71\\xa9\\x80\\xa1\\x80\\xbd\\x08\\xf7\\xee\\xf7\\x00\\x15\\x70\\x74\\x74\\x71\\x6f\\xa2\\x74\\xa6\"\n\"\\xa6\\xa2\\xa2\\xa6\\xa6\\x74\\xa2\\x70\\x1f\\x0e\\xfb\\x23\\xc7\\x16\\xf8\\x77\\xa2\\x06\\xfb\\x35\\x93\\x3f\\xe0\\x8e\\xf7\\x3e\\x08\\x38\\xb7\\xb9\\x6a\\xd4\"\n\"\\x1b\\xd1\\xc5\\xc9\\xd5\\xcf\\x71\\xb4\\x20\\xec\\x1f\\xfb\\x01\\xf0\\x78\\xa6\\x64\\xf7\\x09\\x7b\\x2f\\x50\\x35\\x21\\x35\\x08\\x3b\\x48\\x68\\x53\\x4b\\x1a\"\n\"\\x40\\xc8\\x4d\\xd4\\xb5\\xb4\\x9c\\xa9\\xab\\x1e\\x9e\\x9d\\x96\\x9a\\x9c\\xb0\\x91\\xfb\\x3b\\x34\\x2c\\xfb\\x33\\x8a\\x08\\x0e\\xf7\\xd6\\xf9\\x63\\xf9\\x7e\"\n\"\\x15\\xfc\\x80\\x45\\x06\\xf7\\x61\\xfb\\xf5\\xfb\\x61\\xfc\\x16\\x05\\x44\\xf8\\x87\\xf7\\x6b\\x43\\x07\\x88\\xfb\\x23\\x05\\xfb\\xe3\\x06\\xf7\\x60\\xf8\\x16\"\n\"\\xfb\\x5f\\xf7\\xf1\\x05\\xf7\\xdb\\x06\\x8f\\xfb\\x22\\x05\\xd2\\x06\\x0e\\xf7\\x87\\xf7\\x94\\xf8\\xa3\\x15\\x6b\\x62\\x7a\\x63\\x85\\x58\\x08\\xfb\\x10\\x4f\"\n\"\\xf7\\x10\\x06\\x90\\x5b\\x9f\\x5a\\xa8\\x67\\x34\\x34\\x18\\xb5\\x62\\xe2\\xe2\\xb5\\x6b\\xb7\\x79\\xb9\\x86\\x19\\xfb\\x0f\\xc6\\xf7\\x0f\\x07\\xba\\x90\\xba\"\n\"\\x9e\\xb3\\xaa\\xe2\\x34\\x18\\xb4\\xb4\\x34\\xe2\\xa9\\xb1\\x9e\\xb8\\x91\\xbd\\x19\\xf7\\x0f\\xc7\\xfb\\x0f\\x06\\x85\\xbc\\x78\\xb9\\x6d\\xb0\\xe2\\xe2\\x18\"\n\"\\x62\\xb4\\x34\\x34\\x66\\xa9\\x5c\\x9e\\x59\\x91\\x19\\xf7\\x0f\\x50\\xfb\\x0e\\x07\\x5b\\x85\\x5e\\x78\\x64\\x6c\\x34\\xe2\\x18\\x61\\x62\\x05\\xf7\\xb9\\x50\"\n\"\\x15\\xf0\\xdf\\x36\\x26\\x24\\x37\\x37\\x24\\x23\\x39\\xde\\xf4\\xf2\\xde\\xdd\\xf4\\x1f\\x0e\\xfb\\xab\\xf7\\x2f\\x16\\xdf\\xf8\\x56\\xf7\\x42\\xd5\\xfc\\x43\"\n\"\\x41\\xf7\\x41\\x06\\x0e\\xfc\\x20\\xf7\\x92\\xc1\\x15\\x88\\x7f\\x80\\x8a\\x7a\\x1b\\x67\\x81\\x95\\xb0\\x1f\\xf7\\x73\\xd7\\xc0\\x3f\\xde\\xe1\\xcf\\x35\\xf7\"\n\"\\x24\\x38\\xfb\\x24\\x44\\x47\\xd2\\x38\\x4e\\x56\\xc8\\xfb\\x98\\x07\\x55\\xaf\\x6e\\xcc\\xa1\\x9d\\x8d\\x90\\xa7\\x1e\\x0e\\xfb\\xf9\\x4b\\x1d\\x6a\\xf7\\xed\"\n\"\\x15\\x27\\xc2\\x07\\x54\\x8d\\x78\\x6c\\x65\\x1b\\x65\\x07\\xc7\\x89\\xb2\\xba\\x8c\\xd7\\x08\\xf2\\x07\\x0e\\xfc\\x20\\xf7\\x39\\x75\\x15\\x8a\\x93\\x90\\x8b\"\n\"\\x94\\x1b\\xa0\\x9d\\x8d\\x90\\xa7\\x1f\\xd1\\x07\\x88\\x7f\\x80\\x8a\\x7a\\x1b\\x67\\x81\\x95\\xb0\\x1f\\xf7\\xfb\\xe1\\xcf\\xbc\\x1d\\xfc\\x20\\x07\\x69\\x9a\"\n\"\\x71\\xa9\\x7e\\x1e\\x67\\x3c\\x97\\x85\\x05\\x90\\x4d\\x1d\\xaf\\xc4\\xa2\\x0a\\x83\\x31\\x0a\\xf7\\xaa\\xf9\\x7c\\x15\\x41\\x4f\\x6c\\x54\\x65\\x1f\\x60\\x4a\"\n\"\\x7c\\x3e\\xfb\\x2c\\x1a\\xfb\\x27\\x99\\x3e\\xb0\\x4a\\x1e\\x4c\\xaf\\xca\\x68\\xd7\\x1b\\xe0\\xc7\\xab\\xcd\\xb1\\x1f\\xb0\\xcb\\x99\\xd9\\xf7\\x25\\x1a\\xf7\"\n\"\\x2e\\x7c\\xd7\\x60\\xcd\\x1e\\xc3\\x65\\x4f\\xa9\\x41\\x1b\\xfb\\x25\\xfb\\xdd\\x15\\x8f\\xf3\\x91\\xaf\\xa2\\xb9\\x08\\xb6\\xa0\\xb3\\xa2\\xbf\\x1b\\xbf\\xb2\"\n\"\\x74\\x60\\xa1\\x1f\\xa1\\x5d\\x92\\x67\\x8f\\x23\\x08\\x8a\\x48\\x15\\x8a\\x2d\\x87\\x5b\\x82\\x67\\x08\\x3e\\x78\\x5d\\x63\\x48\\x1b\\x4c\\x60\\xae\\xcd\\x75\"\n\"\\x1f\\x7f\\xb2\\x86\\xbc\\x8a\\xf5\\x08\\x0e\\xfb\\xe9\\xf7\\x12\\xf9\\x9f\\x21\\x0a\\x26\\x1d\\xfb\\xab\\xf9\\x70\\x6d\\x0a\\x26\\x1d\\xfb\\x38\\xf9\\x78\\x39\"\n\"\\x0a\\x26\\x1d\\x8f\\xf9\\x51\\x28\\x1d\\xfb\\x0e\\xf8\\xd4\\xfb\\x47\\x15\\xfc\\xec\\x59\\xf8\\xec\\x06\\xf7\\x2a\\x04\\xfc\\xec\\x59\\xf8\\xec\\x06\\x0e\\xfc\"\n\"\\x20\\x0e\\xfb\\xe9\\xa8\\x1d\\x4c\\x3e\\x0a\\x2d\\x4f\\x23\\x1d\\xfc\\x20\\x4b\\x1d\\xfb\\x23\\xfc\\x98\\x23\\x1d\\xfb\\xe9\\xf7\\xc2\\xf9\\x51\\x28\\x1d\\xfc\"\n\"\\x20\\x46\\x0a\\x85\\x7f\\x16\\xf9\\x47\\x06\\xfb\\xbd\\xf9\\x6d\\x05\\x27\\x06\\xbe\\xfb\\x05\\x15\\xf7\\x67\\xfc\\xaa\\x05\\xfc\\x3b\\x06\\x0e\\xd5\\xa7\\x16\"\n\"\\xf7\\xb4\\xdd\\x06\\x4e\\xaf\\x6e\\xa4\\x6f\\xb1\\x08\\x63\\xc1\\x75\\xd8\\xdd\\x1a\\xf7\\x37\\xe7\\xf1\\xf7\\x27\\xf7\\x26\\xe7\\x25\\xfb\\x37\\x39\\x75\\x3e\"\n\"\\x63\\x55\\x1e\\x6f\\x65\\x6e\\x72\\x4e\\x67\\x08\\x39\\xf7\\xb4\\xdd\\xfb\\x55\\x07\\xc8\\xaf\\xa6\\xa2\\xa7\\xb2\\x08\\xb4\\xc3\\xa0\\xd4\\xe1\\x1a\\xe5\\x74\"\n\"\\xd8\\x60\\xc3\\x1e\\xd8\\x4e\\x29\\xb9\\x20\\x1b\\x2e\\x34\\x68\\x4c\\x4d\\x1f\\x50\\x50\\x6d\\x37\\x22\\x1a\\x35\\xa0\\x42\\xb4\\x53\\x1e\\xa7\\x64\\xa6\\x74\"\n\"\\xc8\\x67\\x08\\xfb\\x55\\x06\\x0e\\x29\\xf8\\x31\\xf8\\xa0\\x15\\xfb\\xaf\\x07\\x43\\x81\\x65\\x6e\\x6a\\x1e\\x6d\\x71\\x65\\x79\\x64\\x1b\\x4a\\x61\\xb3\\xca\"\n\"\\x1f\\xf8\\x07\\x37\\xfd\\x7a\\xde\\xf7\\x6a\\x07\\x7f\\xa4\\xaa\\x84\\xac\\x1b\\xd4\\xbc\\xa7\\xcf\\xbb\\x1f\\x42\\xd6\\xf8\\xa0\\x07\\x0e\\xfb\\x54\\xf8\\x37\"\n\"\\xfb\\x6e\\x15\\xaf\\xea\\x98\\xba\\xa9\\x1a\\xa3\\x81\\xa2\\x7b\\x9a\\x1e\\x73\\xa1\\x87\\x8d\\x36\\xa8\\x5e\\x9b\\x18\\x48\\xa3\\x71\\x98\\x75\\xa0\\x08\\x68\"\n\"\\xab\\x76\\xc1\\xc2\\x1a\\xf1\\xcd\\xd7\\xe4\\xb6\\xb3\\x78\\x6c\\xa2\\x1e\\x99\\x79\\x91\\x7a\\x8f\\x6a\\x08\\xe3\\x06\\x86\\xc2\\x80\\xa8\\x70\\xad\\x08\\xbc\"\n\"\\x63\\x4c\\xa7\\x44\\x1b\\x49\\x4e\\x72\\x60\\x60\\x1f\\x5f\\x5d\\x6e\\x40\\x45\\x1a\\x47\\xa5\\x43\\xb4\\x5f\\x1e\\xa8\\x6b\\xaf\\x76\\xc8\\x76\\xf7\\x05\\x65\"\n\"\\x18\\xae\\x7f\\x99\\x7d\\x75\\x1a\\x76\\x7f\\x65\\x67\\x2c\\x1e\\x0e\\x84\\x24\\x0a\\xf7\\x28\\xf9\\xed\\x22\\x0a\\xb8\\x43\\x0a\\xf7\\xa4\\xf7\\x66\\x22\\x0a\"\n\"\\x64\\x1d\\xfb\\x07\\x3f\\x1d\\xf7\\x2d\\xf7\\x6c\\x22\\x0a\\xfb\\x1c\\xf7\\x43\\xf8\\x32\\x15\\xf7\\x7d\\xf7\\xfc\\xdd\\xfc\\x5a\\xfb\\xcf\\x5d\\x39\\xb9\\xfb\"\n\"\\xe0\\xe9\\xf7\\xe0\\xf7\\x94\\xdd\\x07\\x0e\\xfb\\xb1\\xf7\\x2e\\xf7\\xd7\\x15\\xf7\\x13\\xf7\\x7d\\xd5\\xfb\\xd1\\xfb\\x5d\\x68\\x41\\xae\\xfb\\x8d\\xdf\\xf7\"\n\"\\x8d\\xf7\\x2b\\x07\\x8c\\xd5\\x05\\x0e\\xf7\\xef\\xf8\\x4d\\x16\\xe9\\xf7\\xed\\xf7\\x06\\x49\\x0a\\xbf\\xfb\\x26\\xe8\\xf7\\x78\\x2b\\x8d\\x0a\\xfb\\x48\\xfb\"\n\"\\xc2\\x05\\xfb\\x03\\xf7\\xc2\\x2d\\xfb\\xc2\\xfb\\x03\\x06\\xfb\\x48\\xf7\\xc2\\x05\\x22\\x06\\xf7\\x63\\xfb\\xed\\xfb\\x8f\\xfc\\x14\\x05\\xf4\\x06\\xf7\\x74\"\n\"\\xf7\\xed\\x05\\xf7\\x03\\x06\\x0e\\xf7\\x25\\xf7\\xf3\\x16\\xdf\\xf7\\x8d\\xf2\\x06\\xf7\\x28\\xfb\\x8d\\x05\\xbb\\xfb\\x31\\xdf\\xf7\\x7c\\x3e\\x06\\xfb\\x10\"\n\"\\xf7\\x67\\xf7\\x10\\xba\\x1d\\x24\\xf7\\x5d\\x37\\xfb\\x5d\\x24\\x06\\x21\\xf7\\x5d\\x05\\x2a\\x06\\xf7\\x10\\xfb\\x82\\xfb\\x3b\\xfb\\xb2\\x05\\xed\\x06\\xf7\"\n\"\\x28\\xf7\\x8d\\x05\\xf2\\x06\\x0e\\x45\\xf7\\xc8\\x74\\x15\\xc1\\xbc\\x97\\xa1\\xaf\\x1f\\xc8\\xb0\\xb3\\xd8\\xdc\\x1a\\xe9\\x5a\\xcb\\x37\\x9b\\x1e\\xad\\x96\"\n\"\\x9c\\x95\\x9c\\xa0\\x08\\xa6\\xab\\x9b\\xb8\\xb8\\x1a\\xf7\\x06\\x2e\\xde\\xfb\\x13\\xfb\\x1a\\x32\\x32\\xfb\\x1a\\x1e\\x7a\\xe9\\xad\\x07\\xd5\\xc0\\xbd\\xd8\"\n\"\\xd6\\xbd\\x5a\\x43\\x41\\x54\\x5b\\x37\\x1e\\x6a\\x3a\\xb3\\x06\\xba\\xa5\\x85\\x7a\\xa5\\x1f\\xaf\\x74\\x9e\\x64\\x58\\x1a\\x33\\x55\\x57\\x2f\\x2d\\x4f\\xc5\"\n\"\\xe5\\x1e\\x9c\\x2d\\x07\\x87\\xfb\\x19\\xdf\\x28\\xf7\\x16\\x7e\\x6b\\x44\\x18\\x96\\x85\\x05\\x90\\x98\\x92\\x8d\\x96\\x44\\x0a\\x79\\x91\\xa2\\x5e\\x87\\x1d\"\n\"\\xfb\\x6c\\xf7\\x86\\x74\\x15\\xf1\\x91\\xd1\\xcf\\xe9\\x1a\\xc6\\x6f\\xb5\\x50\\xa6\\x1e\\xbe\\xa7\\xa4\\xb2\\xbd\\x1a\\xdf\\x41\\xcc\\x2a\\x51\\x59\\x75\\x65\"\n\"\\x6b\\x1e\\x76\\x71\\x7a\\x5d\\x6b\\x1a\\x74\\xe2\\xa2\\x07\\xbd\\xb1\\xb0\\xbf\\xbd\\xae\\x69\\x5c\\x7a\\x85\\x7a\\x81\\x81\\x1e\\x79\\x79\\x6a\\x7e\\x72\\x1b\"\n\"\\x68\\x41\\xae\\x06\\xc9\\xb4\\x67\\x55\\x54\\x66\\x6a\\x4d\\x4b\\x69\\xaa\\xc4\\x1f\\xa1\\x34\\x75\\x07\\x2d\\xc8\\x4d\\xed\\x83\\x1e\\x6c\\x45\\x97\\x84\\x05\"\n\"\\x91\\x97\\x92\\x7a\\x1d\\x83\\x31\\x0a\\x83\\xdb\\x16\\xe9\\xf7\\xed\\xd4\\x49\\x0a\\xc5\\xfb\\x3a\\xe9\\xf7\\x8c\\x25\\x8d\\x0a\\xfb\\x47\\xfb\\xc2\\x05\\x43\"\n\"\\xf7\\xc2\\x2d\\x06\\x0e\\xfb\\x1b\\xd2\\x16\\xdf\\xf7\\x8d\\xf2\\x06\\xf7\\x28\\xfb\\x8d\\x05\\xbb\\x5f\\x1d\\x3e\\x06\\xfb\\x10\\xf7\\x68\\xf7\\x10\\xf7\\x82\"\n\"\\x05\\x2a\\x06\\x21\\x56\\x1d\\x37\\x06\\x0e\\x53\\xf7\\x76\\xf8\\x3f\\x15\\x57\\xf7\\xc2\\x2d\\xfd\\x6d\\xe9\\xf7\\xed\\xbf\\xfb\\x4b\\xc7\\xf7\\x4b\\x8d\\x06\"\n\"\\xf7\\x74\\x81\\x0a\\xf7\\x4c\\x4f\\x07\\x0e\\xfb\\x3d\\xf7\\x61\\xf7\\xd7\\x15\\x59\\xf7\\x5d\\x30\\x1d\\xf7\\x8d\\xbd\\xfb\\x14\\xc1\\xf7\\x14\\x06\\xf7\\x27\"\n\"\\x50\\x1d\\x22\\xfb\\x5d\\x05\\xf7\\x14\\x55\\x07\\x0e\\x30\\xf7\\x31\\xf8\\x3f\\x15\\x8c\\xf7\\xc2\\x05\\xfc\\x04\\x39\\xf7\\xa5\\xfd\\x1b\\x86\\x1d\\x0e\\xfb\"\n\"\\x80\\xb0\\xf8\\x56\\x15\\xfc\\x56\\xdf\\xf7\\x8d\\xf2\\x07\\xf7\\x28\\x50\\x1d\\x21\\x56\\x1d\\xfb\\xb9\\x41\\x06\\x0e\\xbb\\xf8\\xb8\\x4e\\x0a\\xc3\\xa5\\x1d\"\n\"\\x87\\x0a\\xfb\\x10\\xd2\\x16\\xdf\\xf7\\x83\\xf7\\x85\\xfb\\x83\\xad\\x5f\\x1d\\x69\\xf8\\x56\\x37\\xfb\\x67\\xfb\\x85\\xf7\\x67\\x37\\x06\\x0e\\xbb\\xf8\\x1a\"\n\"\\x74\\x15\\xf7\\x3d\\x8f\\xeb\\xec\\xa1\\xf7\\x50\\x08\\x2b\\x06\\x83\\x59\\x81\\x69\\x7c\\x6e\\x45\\x0a\\xf7\\x4a\\xf7\\x4f\\xe2\\xf7\\x07\\xf7\\x22\\xc6\\x73\"\n\"\\x1d\\xb9\\x6b\\xba\\x7c\\xcc\\x87\\x6c\\x45\\x18\\x50\\x0a\\x97\\x92\\x83\\x1d\\xae\\xc5\\x9b\\x1d\\x0e\\xfb\\x42\\xf7\\xab\\x74\\x15\\xf7\\x07\\x91\\xd7\\xd8\"\n\"\\x92\\xf7\\x0c\\x08\\x37\\x06\\x37\\x84\\x0a\\xf7\\x17\\x72\\x0a\\xfb\\x33\\xd9\\x24\\xf7\\x16\\x7e\\x1f\\x6c\\x45\\x50\\x0a\\x96\\x93\\x7a\\x1d\\x82\\x85\\x8b\"\n\"\\x89\\x7f\\x1f\\x0e\\x8b\\xf8\\x17\\x55\\x1d\\xfb\\x6a\\xf7\\xf7\\x05\\xfb\\x07\\x06\\xf7\\xac\\xa0\\x0a\\xe9\\x07\\x0e\\xfb\\x42\\xf8\\x1b\\xf8\\xa0\\x15\\xfb\"\n\"\\x20\\x89\\x0a\\xfb\\x6e\\xdf\\xf7\\x6e\\x07\\xf7\\x4f\\xf8\\xa0\\x05\\x0e\\x8b\\xf8\\x17\\xf7\\x72\\x15\\xcb\\x07\\xf7\\xa6\\xf8\\x4f\\x05\\xfb\\x03\\x06\\xfb\"\n\"\\x64\\xfb\\xf7\\xfb\\x6b\\xf7\\xf7\\x05\\xfb\\x06\\x06\\xf7\\xac\\xfc\\x4f\\x05\\x4b\\xfb\\x2f\\x37\\xf7\\x2f\\xfb\\x1e\\xe9\\xf7\\x1e\\xf7\\x28\\xdf\\x07\\x0e\"\n\"\\xfb\\x42\\xf7\\xb9\\x89\\x15\\x8d\\x07\\xf7\\x4f\\xf8\\xa0\\x05\\x31\\x06\\xfb\\x1f\\x89\\x0a\\x89\\xfb\\x0d\\x52\\xf7\\x0d\\xfb\\x33\\xdf\\xf7\\x33\\xf7\\x0b\"\n\"\\xc4\\x07\\x0e\\xae\\xf8\\x19\\x61\\x0a\\xca\\xfb\\x3a\\xe9\\xf7\\x8c\\x28\\x06\\x0e\\xfb\\x27\\xf7\\xb9\\x67\\x0a\\xb9\\xfb\\x33\\xdf\\xf7\\x7d\\x38\\x06\\x0e\"\n\"\\xa0\\xf8\\x9d\\x16\\xc3\\xa5\\x1d\\x7d\\x1d\\xfb\\x3a\\xf7\\xf5\\x16\\xad\\x5f\\x1d\\x69\\xf8\\x56\\x75\\x1d\\xa0\\xf8\\x04\\xf7\\x8f\\x15\\xc4\\x90\\xbb\\x93\"\n\"\\xbb\\x98\\x08\\xfb\\xa9\\xe9\\xf9\\x6d\\x2d\\xfc\\x06\\x07\\x4f\\x7b\\x60\\x83\\x59\\x88\\x08\\xf7\\x75\\x4f\\xfb\\x75\\x07\\x23\\x91\\x59\\xae\\x8c\\xcd\\x08\"\n\"\\xf7\\xb6\\x2d\\xfb\\xbb\\x07\\x8c\\xfb\\x08\\xe5\\x48\\xf7\\x30\\x89\\x08\\xfb\\x21\\xc7\\x07\\x0e\\xfb\\x3a\\xf7\\xa6\\xf7\\x43\\x15\\xaa\\x90\\xa1\\x92\\xa9\"\n\"\\x97\\x08\\xfb\\x5b\\xdf\\xf8\\xa0\\x37\\xfb\\x94\\x07\\x6e\\x82\\x73\\x85\\x6d\\x88\\x08\\xf7\\x0d\\x55\\xfb\\x0e\\x07\\x56\\x8f\\x6e\\xa7\\xbc\\x1a\\xf7\\x56\"\n\"\\x37\\xfb\\x69\\x07\\x87\\x36\\xcb\\x55\\xf5\\x8a\\x08\\x31\\xc1\\x07\\x0e\\xa0\\xf7\\x2f\\x20\\x1d\\x2d\\xfd\\x6d\\xe9\\xf8\\x06\\x06\\x9f\\xd6\\xbc\\x93\\xc6\"\n\"\\x1b\\xf7\\x0e\\xc8\\x67\\x43\\x1f\\xfb\\xb6\\xe9\\xf7\\xbb\\x07\\xf7\\x09\\x2d\\xcf\\xfb\\x36\\x4b\\x45\\x81\\x79\\x45\\x1e\\x0e\\x20\\xdd\\x16\\xdf\\xf7\\xed\"\n\"\\x06\\xd2\\xb9\\xc2\\xb2\\x57\\x1d\\xfb\\xfa\\xdf\\xf7\\xfa\\x4a\\x0a\\x57\\x6e\\x47\\x52\\x1e\\xf7\\xba\\x37\\x07\\x0e\\xfc\\x20\\xf7\\x4e\\x2c\\x1d\\x0e\\x84\"\n\"\\xf8\\x8f\\xdd\\x15\\x53\\xfb\\x8c\\xe9\\xf7\\x3a\\xc3\\xf9\\x6d\\x6b\\x1d\\xcc\\xd0\\x95\\x9d\\xd1\\x1e\\x0e\\xfb\\x2d\\xf7\\xfc\\xd6\\x15\\x52\\xfb\\x7c\\xdf\"\n\"\\xf7\\x31\\xc4\\xf8\\xa0\\x37\\xfb\\x93\\x06\\x7d\\x5f\\x66\\x85\\x64\\x1b\\x4a\\x69\\xa7\\xc1\\x1f\\xf7\\x55\\x37\\xfb\\x68\\xae\\x1d\\xc7\\x1b\\xba\\xb5\\x94\"\n\"\\x9e\\xb9\\x1f\\x0e\\xf3\\xb2\\xf8\\x24\\x15\\x89\\x7a\\x8b\\x81\\x7d\\x1a\\xfb\\x79\\xf7\\x21\\xfb\\x2e\\xf7\\x67\\xf7\\x67\\xf7\\x21\\xf7\\x2d\\xf7\\x79\\xf7\"\n\"\\x79\\xfb\\x21\\xf7\\x2e\\xfb\\x67\\xfb\\x30\\xfb\\x02\\x40\\xfb\\x27\\x50\\x1e\\xe7\\x79\\x05\\xf2\\xb6\\xdc\\xc2\\xf7\\x01\\x1b\\xe2\\xd8\\x63\\x48\\xb6\\x1f\"\n\"\\xa6\\x61\\x9b\\x5d\\x92\\x4b\\x08\\x38\\x04\\xfb\\x37\\x79\\x2b\\x2b\\xfb\\x23\\x1b\\xfb\\x23\\x2b\\xec\\xf7\\x36\\x79\\x1f\\x0e\\xb8\\x43\\x0a\\xf8\\x45\\xf6\"\n\"\\x28\\x1d\\xfb\\x07\\x3f\\x1d\\xf7\\xd8\\xf7\\x10\\x15\\xfb\\xa6\\x45\\xf7\\xa6\\x06\\x0e\\xf3\\xf8\\x18\\xf9\\x79\\x15\\xfb\\x66\\xfb\\x21\\xfb\\x2e\\xfb\\x79\"\n\"\\x9d\\x0a\\xe4\\xd9\\xa6\\xbd\\xc6\\x1f\\xda\\xce\\xba\\xf7\\x05\\xf7\\x0c\\xb4\\x1d\\xf7\\x96\\xfc\\x3c\\x15\\xfb\\x37\\x79\\x2b\\x2b\\xfb\\x23\\x1b\\xfb\\x23\"\n\"\\x2b\\xec\\xf7\\x36\\x79\\x1f\\xde\\x04\\xf7\\x36\\x9d\\xeb\\xec\\xf7\\x23\\x1b\\xf7\\x23\\xeb\\x2b\\xfb\\x37\\x9d\\x1f\\x0e\\xf7\\xa9\\xf8\\xaf\\x15\\xfb\\x28\"\n\"\\x33\\x22\\xfb\\x44\\xfb\\x45\\xe3\\x23\\xf7\\x29\\xf7\\x28\\xe4\\xf4\\xf7\\x40\\xf7\\x4a\\x35\\xf2\\xfb\\x2c\\x1f\\xf7\\x29\\xfb\\xd2\\x15\\x20\\x80\\x56\\x4f\"\n\"\\x37\\x1b\\x37\\x56\\xc7\\xf6\\x80\\x1f\\xd5\\x04\\xf6\\x96\\xc0\\xc7\\xdf\\x1b\\xdf\\xc0\\x4f\\x20\\x96\\x1f\\x0e\\x64\\xf8\\x68\\xfa\\x01\\x8f\\x0a\\xfb\\xda\"\n\"\\xfd\\xbb\\x15\\xe3\\x06\\xbf\\xb5\\xaa\\xc8\\xa6\\x1f\\xf7\\xa9\\xf9\\x11\\x05\\xfb\\x02\\x06\\xfb\\x50\\xfc\\x62\\xfb\\x5b\\xf8\\x62\\x05\\xfb\\x04\\x06\\xf7\"\n\"\\x9d\\xfc\\xd1\\x73\\x4e\\x7d\\x80\\x5b\\x89\\x19\\x53\\x06\\x0e\\xfb\\x42\\xf8\\x11\\xf9\\x26\\x8f\\x0a\\x94\\x4b\\x15\\xfb\\x24\\xfc\\x2c\\xfb\\x1b\\x48\\x1d\"\n\"\\xfc\\xa0\\x6b\\x36\\x05\\x64\\x7d\\x79\\x7d\\x69\\x1b\\x7c\\x7e\\x8d\\x91\\x7a\\x1f\\x3e\\x07\\x83\\x9c\\x9c\\x88\\xa0\\x1b\\xa7\\xa7\\x94\\x9b\\xa2\\x1f\\xa4\"\n\"\\x9e\\x9a\\xa1\\x9b\\xb5\\xf7\\x7e\\xf9\\x0e\\x18\\x0e\\xfb\\xe9\\xf8\\x66\\xfa\\x1d\\x9c\\x0a\\xf7\\x86\\xb0\\x89\\x15\\xf7\\x69\\xaf\\x8f\\xa5\\xc8\\x1f\\xf7\"\n\"\\x05\\xbd\\xdf\\xf7\\x33\\xf7\\x37\\x1a\\xe1\\x70\\xd6\\x5f\\xad\\x1e\\xa4\\x6c\\x5e\\x97\\x50\\x1b\\xfb\\x08\\x38\\x6b\\x4d\\x5e\\x1f\\x71\\x67\\x81\\x64\\x89\"\n\"\\x42\\xcc\\xab\\x18\\x97\\x07\\xc1\\x9c\\xb1\\xad\\xa2\\x1e\\x9c\\x96\\x95\\x8e\\xb9\\x94\\x42\\xfc\\x1f\\x18\\x7c\\x45\\x73\\x61\\x6e\\x81\\x08\\x77\\x06\\xd3\"\n\"\\x8a\\x15\\xc8\\xbc\\x9a\\xac\\xa1\\xf7\\x0f\\xc2\\xf7\\xd2\\x18\\x92\\x06\\x90\\x06\\x9e\\x06\\xa9\\x97\\x88\\x7f\\x9e\\x1f\\xb3\\x72\\xa1\\x51\\x3a\\x1a\\x20\"\n\"\\x73\\x34\\x5c\\x4c\\x1e\\x64\\x59\\x58\\x6e\\x54\\x88\\x08\\xf7\\x7b\\xfb\\x7d\\x15\\xce\\x06\\xad\\xf7\\x52\\x05\\x7d\\xaa\\x97\\x88\\x9e\\x1b\\xf7\\x06\\xee\"\n\"\\xf7\\x29\\xf7\\x42\\xec\\x64\\xbd\\x3e\\x5c\\x63\\x77\\x66\\x6d\\x1f\\x69\\x61\\x79\\x55\\x75\\xfb\\x0b\\x08\\xb9\\xfb\\x00\\x15\\xae\\xf7\\x54\\x05\\xe1\\x9b\"\n\"\\xad\\xbc\\xb7\\x1b\\xb2\\xa0\\x63\\x41\\xfb\\x20\\x56\\xfb\\x02\\x47\\x71\\x77\\x95\\xa1\\x79\\x1f\\x0e\\xe9\\xf8\\xaf\\xdd\\x15\\xf7\\x17\\xd6\\xc8\\xf0\\xf7\"\n\"\\x1f\\x1a\\xf3\\x65\\xe1\\x3e\\xcf\\x1e\\xc4\\x4a\\x3e\\xa8\\x31\\x1b\\x31\\x3e\\x6e\\x52\\x4a\\x1f\\x3e\\x47\\x65\\x35\\x23\\x1a\\xfb\\x1f\\xc8\\x26\\xf7\\x17\"\n\"\\x40\\x1e\\xfb\\x5d\\x39\\xf7\\xc1\\xd9\\x06\\x57\\xa7\\x72\\x9d\\x6f\\xa7\\x08\\x4d\\xc9\\x6b\\xdb\\xe7\\x1a\\xdc\\xa3\\xc9\\xc1\\xc3\\x1e\\xbf\\xbd\\xbf\\xa1\"\n\"\\xd5\\x1b\\xd5\\xbf\\x75\\x57\\xbd\\x1f\\xc1\\x53\\xa3\\x4d\\x3a\\x1a\\x35\\x6f\\x40\\x55\\x4e\\x1e\\x6c\\x6a\\x6f\\x76\\x51\\x6b\\x08\\x3d\\xf7\\xc1\\xdd\\x07\"\n\"\\x0e\\xfc\\x20\\xf7\\xe1\\x2f\\x1d\\x0e\\xfc\\x20\\x46\\x0a\\xf7\\xda\\xf8\\xa9\\xf8\\x95\\x15\\x49\\x06\\xfb\\x74\\xfc\\x95\\x05\\xdb\\x06\\xf7\\x45\\xf8\\x2d\"\n\"\\xf7\\x45\\xfc\\x2d\\x05\\xdb\\x06\\x0e\\xf7\\xda\\xf8\\xa9\\x16\\xf7\\x74\\xf8\\x95\\x05\\x3b\\x06\\xfb\\x45\\xfc\\x2d\\xfb\\x45\\xf8\\x2d\\x05\\x3b\\x06\\xf7\"\n\"\\x74\\xfc\\x95\\x05\\x0e\\xf7\\xda\\xf8\\x8c\\xf9\\x60\\x15\\xfb\\x60\\xfb\\x34\\xfb\\x33\\xfb\\x5e\\xfb\\x5b\\xf7\\x34\\xfb\\x33\\xf7\\x5d\\xf7\\x5b\\xf7\\x34\"\n\"\\xf7\\x34\\xf7\\x5c\\xf7\\x59\\xfb\\x35\\xf7\\x36\\xfb\\x57\\x1f\\xa4\\x52\\x15\\xf7\\x23\\x7e\\xf7\\x06\\xfb\\x06\\x99\\xfb\\x25\\x08\\xfb\\xa3\\x06\\xf7\\xa4\"\n\"\\x52\\x15\\x82\\xfb\\x22\\xfb\\x0d\\xfb\\x0f\\xfb\\x22\\x80\\x08\\xf7\\xa8\\x07\\x53\\xfb\\xa8\\x15\\xfb\\x27\\x99\\xfb\\x05\\xf7\\x05\\x7d\\xf7\\x29\\x08\\xf7\"\n\"\\xa6\\x06\\xfb\\xa6\\xc4\\x15\\x99\\xf7\\x24\\xf7\\x07\\xf7\\x06\\xf7\\x25\\x99\\x08\\xfb\\xa4\\x07\\x0e\\x45\\xb6\\x16\\xf8\\x9b\\xf8\\x9b\\xfc\\x9b\\x06\\xf8\"\n\"\\x67\\xfc\\x67\\x15\\xfc\\x33\\xf8\\x33\\xf8\\x33\\x06\\x0e\\xb8\\xf8\\xeb\\xf8\\xf7\\x15\\x45\\xfb\\xa4\\x06\\xfb\\x05\\x86\\x5f\\x7b\\x6b\\x1e\\x56\\x70\\x50\"\n\"\\x67\\x4c\\x1b\\x54\\x54\\xa7\\xb7\\x6e\\x1f\\x73\\xb0\\x84\\xb7\\xf7\\x11\\x1a\\xf7\\xa4\\x45\\xfb\\xa1\\x07\\xfb\\x29\\x90\\x65\\xa6\\x5f\\x1e\\x45\\xb5\\xd7\"\n\"\\x62\\xe5\\x1b\\xde\\xd1\\xac\\xc9\\xb8\\x1f\\xaf\\xbc\\x91\\xaf\\xf7\\x36\\x1a\\x0e\\x3a\\xf8\\x27\\xf8\\x1c\\x15\\xfb\\x69\\x06\\x41\\xf7\\x4d\\x05\\x2d\\x06\"\n\"\\xf7\\x7d\\xfc\\xd5\\x05\\xde\\x06\\xf7\\x7d\\xf8\\xd5\\x05\\x2d\\x06\\x22\\xfb\\x9d\\x15\\x3f\\xfb\\x48\\x40\\xf7\\x48\\x05\\x0e\\xf8\\x76\\xf8\\xa0\\x15\\x38\"\n\"\\xfb\\xbd\\x06\\x20\\x53\\x45\\x34\\x49\\x61\\xb3\\xca\\x1e\\xf8\\x07\\x38\\xfc\\x28\\x07\\x34\\xcc\\x53\\xf1\\xd8\\xbc\\xa6\\xd0\\xbc\\x1e\\x42\\xa1\\x07\\x49\"\n\"\\x69\\x6d\\x69\\x60\\x1a\\x52\\xc0\\x67\\xde\\x97\\x92\\x8c\\x90\\x9f\\x1e\\x8d\\x8c\\x90\\x8c\\x91\\x8c\\x08\\xb8\\x07\\x83\\x76\\x7f\\x89\\x7b\\x1b\\x63\\x71\"\n\"\\x9f\\xab\\xb2\\xa9\\xb6\\xb9\\xa5\\x1f\\x0e\\xfb\\x13\\x34\\x0a\\x0e\\xfb\\x13\\x34\\x0a\\xeb\\xf7\\x53\\x22\\x1d\\xfb\\x13\\x34\\x0a\\xdf\\xf7\\xe3\\x40\\x0a\"\n\"\\xfb\\x13\\x34\\x0a\\xdf\\xf7\\x93\\x21\\x0a\\x26\\x1d\\xfb\\x19\\xf9\\x86\\x27\\x0a\\x0e\\x26\\x1d\\x69\\xf9\\x61\\x5d\\x0a\\xbb\\x2c\\x0a\\x30\\x41\\x1d\\xbb\"\n\"\\x2c\\x0a\\xfb\\x2b\\xf9\\x79\\x37\\x1d\\xbb\\x2c\\x0a\\xfb\\x1f\\x3a\\x0a\\xbb\\x2c\\x0a\\xfb\\x16\\xf9\\x78\\x3d\\x0a\\xfb\\x76\\xba\\xf9\\x23\\x15\\xf4\\x06\"\n\"\\x56\\x6c\\x70\\x60\\x54\\x1a\\x63\\x9c\\x63\\xa8\\x70\\x1e\\x9e\\x7a\\x9a\\x83\\xac\\x81\\x08\\x20\\x6b\\x5b\\x52\\x2b\\x1a\\x48\\xa6\\x50\\xb9\\x6a\\x1e\\xaa\"\n\"\\x74\\xad\\x81\\xc8\\x87\\xc5\\x87\\x18\\xd5\\x86\\x9a\\x82\\x65\\x1a\\x6b\\x80\\x65\\x65\\x2c\\x1e\\xe1\\x06\\xaf\\xeb\\x97\\xb7\\xb8\\x1a\\xd0\\x69\\xa7\\x29\"\n\"\\x94\\x1e\\x52\\x90\\x4b\\x91\\x76\\x90\\x75\\x99\\x19\\x6f\\x9d\\x78\\xb3\\xb4\\x1a\\xc1\\xaa\\xbb\\xbc\\x9f\\x1e\\x9a\\xb0\\xb4\\x91\\xcc\\x1b\\xbe\\xd5\\x5b\"\n\"\\x06\\xfb\\x0a\\x4a\\xb4\\xd6\\xb2\\xa2\\xb3\\xad\\x9f\\x1f\\x9a\\xa5\\xab\\x91\\xc0\\x1b\\xe4\\xd5\\xfc\\x07\\x06\\x0e\\xfb\\x42\\x2b\\x0a\\xfb\\xa7\\xf7\\x6d\"\n\"\\x2b\\x1d\\xfb\\x42\\x2b\\x0a\\xfb\\x9e\\xf7\\x6c\\x22\\x0a\\xfb\\x42\\x3e\\x1d\\xfb\\x38\\xf7\\xb6\\x15\\x2a\\xfb\\x28\\x05\\xc7\\xb6\\x1d\\x0e\\xfb\\x42\\x3e\"\n\"\\x1d\\xfb\\x20\\xf7\\x9e\\x24\\x1d\\xfb\\x7d\\xe0\\xf9\\x23\\x15\\xf7\\x74\\x06\\x5c\\x6f\\x67\\x6c\\x61\\x5d\\x08\\x2c\\x23\\x5a\\xfb\\x07\\xfb\\x09\\x1a\\x31\"\n\"\\xad\\x47\\xc8\\x6f\\x1e\\xa6\\x7e\\xaf\\x83\\xbc\\x87\\xb7\\x87\\x18\\xca\\x85\\x99\\x82\\x66\\x1a\\x69\\x88\\x81\\x5d\\xfb\\x0d\\x1e\\xe0\\x06\\xb7\\xf7\\x0b\"\n\"\\x90\\x9d\\xbb\\x1a\\xce\\x69\\xa7\\x2c\\x95\\x1e\\x5d\\x90\\x41\\x92\\x85\\x8d\\x76\\x97\\x19\\x6b\\x9e\\x79\\xb8\\xc7\\x1a\\xe7\\xb5\\xee\\xda\\xea\\x1e\\xbd\"\n\"\\xc7\\xbf\\xb5\\xda\\xb8\\x08\\xd5\\xfb\\xec\\x07\\x0e\\x74\\xa2\\xf8\\xa0\\x9a\\xf7\\x52\\x97\\x6b\\x99\\x06\\xdc\\x0a\\xe8\\x0b\\xb6\\x8e\\x92\\x8f\\x8f\\x92\"\n\"\\x90\\x90\\x8e\\x95\\x95\\x8e\\x0c\\x0c\\xb4\\x97\\x91\\x8f\\x90\\x93\\x8e\\x8f\\x90\\x90\\x95\\xcc\\x0c\\x0d\\xf8\\xc0\\x14\\xf9\\x36\\x15\\xbe\\x13\\x00\\x83\"\n\"\\x02\\x00\\x01\\x00\\x05\\x00\\x08\\x00\\x14\\x00\\x19\\x00\\x1e\\x00\\x23\\x00\\x27\\x00\\x4d\\x00\\x52\\x00\\x81\\x00\\xb4\\x00\\xeb\\x01\\x16\\x01\\x32\\x01\"\n\"\\x3e\\x01\\x4b\\x01\\x55\\x01\\x5b\\x01\\xbd\\x02\\x12\\x02\\x52\\x02\\x57\\x02\\x6f\\x02\\x73\\x02\\x7f\\x02\\x87\\x02\\x8b\\x02\\x8f\\x02\\x9b\\x02\\xa7\\x02\"\n\"\\xb3\\x02\\xb9\\x02\\xcc\\x02\\xf3\\x03\\x07\\x03\\x1a\\x03\\x25\\x03\\x32\\x03\\x38\\x03\\x43\\x03\\x4c\\x03\\x53\\x03\\x5a\\x03\\x61\\x03\\x66\\x03\\x6c\\x03\"\n\"\\x72\\x03\\x77\\x03\\x7c\\x04\\x07\\x04\\x0c\\x04\\x70\\x04\\x9c\\x04\\xf7\\x04\\xfc\\x05\\x01\\x05\\x17\\x05\\x5c\\x05\\x92\\x05\\xcd\\x05\\xe4\\x05\\xe9\\x06\"\n\"\\x1e\\x06\\x3d\\x06\\x42\\x06\\x6f\\x06\\x87\\x06\\xb2\\x06\\xb5\\x06\\xbf\\x06\\xe9\\x07\\x13\\x07\\x1f\\x07\\x2b\\x07\\x35\\x07\\x5b\\x07\\x80\\x07\\x8e\\x07\"\n\"\\x96\\x07\\xa7\\x07\\xb8\\x07\\xbe\\x07\\xc5\\x07\\xdc\\x07\\xfb\\x08\\x0c\\x08\\x10\\x08\\x16\\x08\\x32\\x08\\x39\\x08\\x44\\x08\\x52\\x08\\x69\\x08\\x77\\x08\"\n\"\\x7c\\x08\\x93\\x08\\xaa\\x08\\xc0\\x08\\xd5\\x08\\xe8\\x08\\xf3\\x09\\x03\\x09\\x11\\x09\\x20\\x09\\x25\\x09\\x34\\x09\\x42\\x09\\x49\\x09\\x55\\x09\\x62\\x09\"\n\"\\x6f\\x09\\x77\\x09\\x83\\x09\\x88\\x09\\x94\\x09\\xa0\\x09\\xa7\\x09\\xad\\x09\\xb8\\x09\\xbf\\x09\\xc5\\x09\\xcf\\x09\\xd9\\x09\\xe3\\x09\\xeb\\x09\\xf4\\x09\"\n\"\\xfd\\x0a\\x06\\x0a\\x0c\\x0a\\x12\\x0a\\x17\\xf8\\xa0\\x15\\x0b\\xa6\\x1d\\x0e\\x15\\xfb\\x05\\x06\\xf7\\x29\\xfb\\x28\\x05\\xc7\\x06\\x0e\\xf8\\x6e\\x69\\x0a\"\n\"\\x0b\\xf7\\x4b\\x8f\\x1d\\x0b\\xf8\\x19\\x52\\x0a\\x0b\\x15\\x2a\\xac\\x1d\\x15\\x5b\\x63\\x64\\x5b\\x5a\\xb2\\x64\\xbc\\xbb\\xb3\\xb2\\xbb\\xbc\\x64\\xb2\\x5a\"\n\"\\x1f\\x5f\\x04\\xa4\\x9e\\x78\\x72\\x74\\x77\\x77\\x73\\x73\\x77\\x9f\\xa2\\xa3\\x9f\\x9f\\xa3\\x1f\\x0b\\xf8\\x17\\x80\\x1d\\x0b\\xf8\\xe8\\xf8\\x97\\x15\\xbd\"\n\"\\x88\\x99\\x7b\\xad\\x1e\\xdf\\x63\\x36\\xb7\\xfb\\x0f\\x4a\\x1d\\x8c\\x48\\x98\\x5f\\xa8\\x63\\x08\\x46\\xbd\\xdf\\x68\\xf7\\x03\\x1b\\xe2\\xd2\\x9f\\xaf\\xba\"\n\"\\x1f\\xbc\\xb2\\xaa\\xcc\\xca\\x85\\x1d\\x0b\\xf9\\x2a\\xf8\\x8b\\x15\\x93\\x1d\\xfb\\x0c\\xb0\\x24\\xcf\\x44\\x1e\\x51\\xc4\\xd3\\x70\\xea\\x1b\\xf7\\x46\\xef\"\n\"\\xeb\\xf7\\x55\\xa1\\x1f\\x2b\\x06\\x83\\x59\\x81\\x69\\x7c\\x6e\\x45\\x0a\\xf7\\x4a\\xf7\\x4f\\xe2\\xf7\\x07\\xf7\\x22\\xc6\\xaa\\x1d\\x0b\\xf8\\x18\\x20\\x0a\"\n\"\\xfb\\x25\\xfc\\x2c\\xfb\\x1a\\x48\\x1d\\xfc\\xa2\\x6b\\x38\\x05\\x66\\x7d\\x79\\x7d\\x68\\x1b\\x7d\\x7f\\x8d\\x8f\\x79\\x1f\\x40\\x07\\x82\\x9c\\x9c\\x87\\xa1\"\n\"\\x1b\\xa6\\xa8\\x94\\x9b\\xa1\\x1f\\xa5\\x9e\\x9a\\xa1\\x9b\\xb5\\xf7\\x7d\\xf9\\x0e\\x18\\x0b\\xf8\\xbe\\x16\\xf7\\x2e\\xf8\\xa0\\x05\\x2d\\x06\\x23\\xfc\\x2c\"\n\"\\x24\\xf8\\x2c\\x05\\x25\\x06\\x27\\xfc\\x2c\\x20\\xf8\\x2c\\x05\\x2f\\x06\\xf7\\x2c\\xfc\\xa0\\x05\\xe9\\x06\\xf0\\xf8\\x2f\\xf5\\xfc\\x2f\\x05\\x0b\\xf8\\xd9\"\n\"\\x20\\x1d\\xfc\\xa1\\x39\\xf8\\x2e\\x06\\xfc\\x4a\\xfc\\xc9\\x05\\x39\\xf8\\xbf\\xdd\\xfc\\x4a\\x07\\xf8\\x48\\xf8\\xc7\\x05\\x0b\\xb9\\x1d\\x3b\\xeb\\x05\\x4b\"\n\"\\x06\\xec\\xfb\\x2a\\x05\\x0e\\x64\\x90\\x78\\x9a\\x77\\x08\\x66\\xa5\\xb8\\x77\\xc4\\x1b\\x0b\\xf7\\x56\\x20\\x1d\\x2d\\xfd\\x6d\\xe9\\x06\\x0b\\x85\\x8b\\x89\"\n\"\\x7e\\x1f\\x0e\\x15\\x3f\\x07\\xca\\x61\\x5d\\xa7\\x49\\x1b\\xfb\\x13\\x33\\xfb\\x0a\\xfb\\x3c\\x33\\xa0\\x4b\\xb8\\x56\\x1f\\x5d\\xb2\\xbd\\x72\\xc1\\x1b\\xca\"\n\"\\xb8\\xa7\\xcd\\xb7\\x1f\\x70\\x07\\xfb\\x20\\x64\\x57\\x23\\x44\\x66\\xa7\\xc7\\x83\\x1e\\x36\\x06\\x2a\\x93\\xd8\\x4e\\xf7\\x06\\x1b\\xd8\\xcb\\xa4\\xb5\\xad\"\n\"\\x1f\\xb3\\xbc\\x9a\\xcc\\xf7\\x0f\\x1a\\xf8\\x4a\\x07\\xfb\\x73\\x4d\\x15\\xe3\\xbd\\x41\\xfb\\x19\\xfb\\x13\\x58\\x41\\x34\\x35\\x59\\xd6\\xf7\\x15\\xf7\\x14\"\n\"\\xbd\\xd7\\xe1\\x1f\\x0e\\xf7\\x4e\\xf7\\xce\\x15\\xf7\\x84\\x06\\xde\\xb0\\x63\\x31\\x1f\\x8a\\x4a\\x05\\x5e\\x93\\x5f\\x98\\x6d\\x1e\\xf7\\x05\\xa2\\x06\\x68\"\n\"\\xa3\\x84\\xa5\\x89\\xec\\x8a\\xf7\\x0c\\x78\\xaf\\x3c\\xad\\x08\\xdd\\xb4\\xac\\xbc\\xdf\\x1a\\xf7\\x12\\x3d\\xd0\\xfb\\x24\\x1e\\xfb\\xe4\\xfd\\x6d\\xe8\\x06\"\n\"\\xf8\\x20\\x04\\xf7\\x8f\\xf7\\x75\\x07\\xbf\\xa9\\x83\\x77\\xa2\\x1f\\xa4\\x76\\x98\\x6a\\x60\\x1a\\x34\\x5f\\x64\\x28\\x1e\\x0b\\xcc\\x20\\x0a\\xfb\\xe7\\x07\"\n\"\\x39\\x96\\x66\\xab\\x6b\\x1e\\x66\\xaf\\xc6\\x77\\xd2\\x1b\\xd4\\xc6\\xa0\\xb1\\xaf\\x1f\\xaa\\xac\\x94\\xae\\xdc\\x1a\\xf7\\xe7\\x37\\xfb\\xe7\\x07\\x50\\x83\"\n\"\\x72\\x70\\x77\\x1e\\x7a\\x75\\x6a\\x81\\x69\\x1b\\x69\\x6a\\x95\\x9c\\x74\\x1f\\x71\\x9e\\x82\\xa5\\xc6\\x1a\\xf7\\xe7\\x07\\x0b\\xf8\\xa0\\x58\\x0a\\x0b\\x15\"\n\"\\x72\\x83\\x80\\x73\\x0a\\x98\\x88\\x81\\xa4\\x1f\\x75\\xc5\\x93\\x89\\x9e\\x1b\\xbc\\xa9\\xae\\xd0\\x95\\x1f\\x0e\\xd0\\x7e\\x1d\\x0b\\xaf\\x1d\\x93\\x07\\xc1\"\n\"\\xb1\\xbe\\xd1\\x1f\\xf2\\x07\\x0e\\x15\\x76\\x0a\\xc8\\x16\\x76\\x0a\\x0e\\xf9\\x5f\\x22\\x1d\\xfa\\x3f\\x21\\x1d\\x15\\xeb\\xf7\\x2a\\x05\\x4a\\x06\\x3c\\x2b\"\n\"\\x3b\\x54\\x1d\\x15\\xfb\\x04\\x06\\xf7\\x28\\xfb\\x28\\x05\\xc8\\x06\\x0e\\xf7\\xf6\\xf9\\x1b\\x15\\xbf\\x1d\\xfd\\x1b\\xe8\\x06\\x0b\\xbf\\xb9\\xe4\\x92\\x1f\"\n\"\\x0b\\xa6\\x1d\\xe7\\xfb\\x2b\\x15\\x2f\\x24\\xe7\\x06\\xfb\\x42\\xf2\\x15\\x2f\\x24\\xe7\\x06\\x0e\\xf8\\xbc\\x20\\x1d\\xfc\\x94\\x07\\x29\\x44\\x4f\\xfb\\x08\"\n\"\\xfb\\x08\\x44\\xc7\\xed\\x1e\\x5a\\x1d\\xfb\\x26\\xf7\\x02\\x2d\\xf7\\x3e\\xf7\\x3e\\xf7\\x02\\xe9\\xf7\\x26\\x1e\\xf8\\x94\\x07\\x0b\\x66\\x49\\x80\\x1f\\xc4\"\n\"\\x06\\xa2\\x92\\x97\\x98\\x99\\xa7\\x1d\\xbd\\xa9\\xae\\xd0\\x95\\x1f\\x0e\\xd8\\x16\\xe9\\xde\\x06\\xf8\\x0d\\xb1\\x1d\\xfc\\x0d\\xfc\\x40\\x05\\xf8\\x92\\x2d\"\n\"\\x07\\x0b\\x1b\\xa8\\x9c\\x7d\\x74\\x71\\x74\\x78\\x6c\\x71\\x0b\\x08\\x4f\\x6d\\x4d\\x69\\x3d\\x1b\\xfb\\x25\\x2f\\xf7\\x08\\x0b\\xf7\\x6a\\xf7\\xdf\\x24\\x1d\"\n\"\\xfb\\x2a\\x05\\xc7\\x06\\xf7\\x29\\xf7\\x2a\\x05\\x0b\\x06\\xa6\\xf7\\x1a\\x05\\xf7\\x03\\x07\\x0b\\x06\\xf7\\x75\\xfb\\xed\\x05\\x0b\\x07\\xf1\\x49\\xd3\\x2e\"\n\"\\x49\\x0b\\xdf\\xf8\\x56\\xf7\\x7d\\xd5\\x0b\\xf9\\x1b\\x2d\\x06\\x0e\\xf7\\xa5\\x06\\x55\\xb7\\x0b\\xf7\\xe0\\x15\\xfb\\xe0\\x0b\\xfb\\x6e\\x15\\xdf\\x0b\\x97\"\n\"\\x85\\x05\\x90\\x0b\\xf9\\x83\\xf7\\x33\\x15\\x46\\x73\\x89\\x1d\\xe0\\x69\\x3b\\xc0\\x2a\\x1b\\x43\\x4a\\x6d\\x57\\x67\\x1f\\xc2\\x6c\\x50\\xa6\\x36\\x1b\\x40\"\n\"\\x4d\\x75\\x64\\x68\\x1f\\x73\\x9b\\x0a\\x92\\xb1\\xa8\\xd8\\x1b\\xd8\\xb4\\x70\\x58\\x1f\\x75\\x07\\x8a\\x62\\x7b\\x80\\x45\\x84\\x37\\x84\\x58\\x81\\x6a\\x7d\"\n\"\\x08\\x4e\\x71\\x6c\\x5d\\x47\\x1a\\x2d\\xcd\\x4e\\xf1\\xd9\\xca\\xab\\xd9\\xd6\\x1e\\x92\\x7f\\x8f\\x84\\x90\\x83\\x08\\x57\\xae\\xcd\\x6c\\xd8\\x1b\\xf7\\x0a\"\n\"\\xde\\xcf\\xf7\\x06\\xa1\\x1f\\xfc\\x5a\\x89\\x15\\x78\\x78\\x70\\x6d\\x74\\x1e\\x72\\x6a\\x66\\x7e\\x62\\x1b\\x4d\\x65\\xab\\xbf\\xc2\\xaf\\xa6\\xe5\\x98\\x1f\"\n\"\\xe4\\x98\\x9c\\x8f\\xa7\\x97\\x08\\xdb\\xb7\\x5c\\x1d\\x4a\\x2c\\x1f\\x0b\\xf9\\x79\\x69\\x1d\\x0b\\xa9\\x9e\\x15\\xb2\\x67\\xd8\\xdf\\x05\\x4e\\xcd\\xd9\\x6e\"\n\"\\xec\\x1b\\xf7\\x66\\xf7\\x22\\xf7\\x2d\\xf7\\x78\\xf2\\x6d\\xe8\\x55\\xcf\\x1f\\xe4\\xec\\x63\\xaf\\x34\\x2c\\x05\\xc1\\x4d\\x3e\\xa6\\x30\\x1b\\xfb\\x66\\xfb\"\n\"\\x22\\xfb\\x2d\\xfb\\x78\\x2a\\xa4\\x36\\xbe\\x45\\x1f\\xca\\xcf\\x15\\x6c\\xc0\\x7c\\xc8\\xd1\\x1a\\xf7\\x47\\xf3\\xf7\\x0c\\xf7\\x2f\\xcc\\xc5\\x76\\x60\\xbb\"\n\"\\x1e\\xae\\x62\\x15\\xae\\x55\\x9d\\x48\\x40\\x1a\\xfb\\x47\\x23\\xfb\\x0c\\xfb\\x2f\\x44\\x4e\\xa4\\xbc\\x5a\\x1e\\x0b\\xda\\x74\\x1d\\xe8\\xfb\\xce\\x15\\xf7\"\n\"\\x7c\\xf7\\x48\\x07\\xbf\\xa8\\x84\\x78\\xa4\\x1f\\xa5\\x77\\x99\\x6d\\x63\\x1a\\x63\\x7d\\x6d\\xbb\\x1d\\xfb\\x48\\xfb\\xe1\\x15\\xf7\\x8f\\xf7\\x77\\x07\\xdd\"\n\"\\xbc\\x5c\\xc1\\x1d\\xf8\\xa5\\xf8\\x93\\x15\\x6b\\xa7\\x51\\x4a\\x05\\xb8\\x5e\\x57\\x9f\\x46\\x1b\\xfb\\x29\\x33\\x23\\xfb\\x45\\x3d\\x9a\\x50\\xac\\x5a\\x1f\"\n\"\\x49\\x41\\xab\\x6f\\xc8\\xd0\\x05\\x62\\xb3\\xc2\\x76\\xcf\\x1b\\xf7\\x28\\xe3\\xf4\\xf7\\x44\\xd7\\x7d\\xc3\\x6d\\xbd\\x1f\\x4e\\x46\\x15\\x97\\x6b\\x91\\x66\"\n\"\\x5f\\x1a\\xfb\\x13\\x52\\x3e\\x2e\\x61\\x68\\x9b\\xab\\x6e\\x1e\\x74\\xb2\\x15\\x7d\\xad\\x84\\xaf\\xba\\x1a\\xa1\\x0a\\xb7\\xb3\\x78\\x6a\\xa5\\x1e\\x0b\\xfc\"\n\"\\x79\\x66\\x1d\\x0b\\xf8\\x70\\x67\\x1d\\x0b\\x15\\x34\\xdd\\x06\\xae\\x9e\\x9d\\xb2\\x92\\x8e\\x8b\\x8a\\x9e\\x1e\\x46\\x1d\\xde\\xf8\\x5c\\xe2\\x07\\x0b\\xe4\"\n\"\\xf7\\xe7\\x15\\xfb\\xe7\\xf7\\xae\\x07\\xf7\\x4c\\xf7\\x04\\xf7\\x1e\\xf7\\x77\\xf7\\x76\\xfb\\x04\\xf7\\x1e\\xfb\\x4c\\x1f\\xfb\\xae\\xfb\\xd7\\x46\\x48\\x06\"\n\"\\xf7\\x36\\x16\\xf7\\x3f\\xce\\xfb\\x3f\\xf7\\x85\\xf7\\x41\\x06\\xd1\\xc4\\x72\\x5b\\xb0\\x1f\\xb1\\x5a\\x9c\\x4a\\x2c\\x1a\\xfb\\x4e\\x3f\\x2a\\xfb\\x23\\x1e\"\n\"\\xfb\\x41\\x06\\x0e\\xf8\\x83\\x20\\x1d\\x38\\xfb\\xa3\\x06\\xc0\\x68\\x53\\xa7\\x45\\x1b\\xfb\\x1c\\x32\\xfb\\x01\\xfb\\x3b\\xfb\\x45\\xe1\\xfb\\x01\\xf7\\x22\"\n\"\\xd3\\xbd\\xa6\\xcc\\xb8\\x1f\\x46\\xd5\\x07\\xfb\\x7a\\xf8\\x61\\x15\\xe5\\xc4\\x3c\\xfb\\x12\\xfb\\x0d\\x8e\\x0a\\xe6\\x1f\\x0b\\x15\\xfb\\x79\\x06\\x97\\xb1\"\n\"\\x9d\\x9e\\xb6\\xa2\\xca\\xab\\x18\\xca\\xab\\xac\\xb7\\xc0\\x1a\\xd5\\x4f\\xbf\\x35\\x28\\x5a\\x5a\\x24\\x88\\x1e\\xc9\\x06\\x8d\\xaa\\x8e\\x9b\\x93\\x98\\x08\"\n\"\\xa3\\x99\\xa7\\x9a\\xab\\x1b\\xbc\\xaf\\x6b\\x60\\x6c\\x77\\x70\\x64\\x76\\x1f\\x51\\x6c\\x2b\\x58\\x0b\\x1e\\xe1\\x69\\x3b\\x5d\\x1d\\xfb\\x41\\xfb\\x41\\xe5\"\n\"\\x22\\xf7\\x28\\xf7\\x0c\\xde\\xcf\\xf7\\x06\\xa0\\x1f\\x0b\\x98\\x1d\\x6d\\x42\\x0a\\xf8\\x68\\xf7\\x6a\\x15\\xfb\\x6a\\xf8\\x76\\xdd\\xfc\\x19\\xf7\\x8e\\xf7\"\n\"\\xf4\\xdd\\xfb\\xf4\\xf7\\x7d\\xf8\\x07\\xdd\\xfd\\x02\\x07\\xfb\\xbf\\xfd\\x6d\\x05\\xf2\\x06\\xe0\\xf7\\x6a\\x05\\xf7\\xa1\\xdd\\x15\\xfb\\x82\\x06\\xf7\\x1e\"\n\"\\xf7\\xf3\\x05\\xef\\x06\\x0b\\xd1\\x98\\x0a\\xf7\\xb5\\x07\\xca\\x98\\xb2\\xa9\\xab\\x1e\\xa7\\xa6\\xae\\x9a\\xb0\\x1b\\xcc\\xb5\\x63\\x4c\\x1f\\xfc\\xd9\\xdf\"\n\"\\xf8\\xfa\\x7d\\x0a\\x0b\\xf7\\xe1\\x63\\x0a\\x0b\\xf8\\x0a\\x15\\xf7\\x8a\\xf7\\xf7\\x05\\xfb\\x03\\x06\\xfb\\x50\\xfb\\xb2\\xfb\\x4f\\xf7\\xb2\\x05\\xfb\\x05\"\n\"\\x06\\xf7\\x86\\xfb\\xf7\\xfb\\x96\\xfc\\x0a\\x05\\xf7\\x05\\x06\\xf7\\x5c\\xf7\\xc4\\xf7\\x5b\\xfb\\xc4\\x05\\x0b\\xf7\\xd3\\x07\\xf7\\x23\\xdd\\xd8\\xf7\\x19\"\n\"\\xd3\\x73\\xc2\\x5c\\xb0\\x1f\\xac\\x63\\x5d\\x98\\x41\\x1b\\xfb\\x6f\\x0b\\x20\\x1d\\xfc\\x95\\x07\\x51\\x85\\x6a\\x7a\\x72\\x1e\\x6f\\x79\\x69\\x7a\\x66\\x1b\"\n\"\\x45\\x64\\xba\\xe0\\x1f\\xba\\x2c\\x4b\\x07\\xfb\\x0a\\xd9\\x40\\xf7\\x11\\xf7\\x13\\xda\\xda\\xf7\\x12\\x1e\\xf8\\xb7\\x07\\x0b\\x66\\x0a\\x0e\\x9e\\x0a\\x8d\"\n\"\\xcf\\x5c\\x1d\\x49\\x2d\\x1f\\x0b\\xf7\\x40\\xf7\\x93\\x15\\xf7\\x0b\\xf7\\x0b\\xf7\\x95\\xfc\\x0a\\x05\\xf7\\x02\\x06\\xfb\\xc0\\xf8\\x44\\xf7\\xbd\\xf7\\xbd\"\n\"\\x05\\xfb\\x0c\\x06\\xfb\\xff\\xfc\\x05\\x05\\xf8\\x05\\x2e\\xfd\\x6d\\xe8\\x07\\x0b\\xf7\\xa1\\x15\\xf7\\x46\\xf7\\x93\\x05\\x2b\\x06\\xfb\\x14\\xfb\\x52\\xfb\"\n\"\\x10\\xf7\\x52\\x05\\x26\\x06\\xf7\\x48\\xfb\\x93\\xfb\\x48\\xfb\\xa1\\x05\\xe5\\x06\\xf7\\x1b\\xf7\\x5d\\xf7\\x14\\xfb\\x5d\\x05\\x0b\\xf7\\x66\\x06\\xe7\\x59\"\n\"\\x1d\\x2f\\x1f\\xfb\\x66\\x06\\x0b\\xf7\\x6f\\x15\\xd6\\xfb\\x6f\\x05\\xf3\\x06\\x82\\x1d\\x0b\\x74\\x0a\\xf7\\x61\\x04\\x38\\x22\\xde\\x06\\x0e\\xf7\\x21\\xf9\"\n\"\\x6d\\x15\\x38\\xfd\\x6d\\xde\\xf7\\x60\\x06\\xdc\\xdb\\xf7\\x45\\xfb\\xb0\\x05\\xf2\\x06\\xfb\\x6a\\xf7\\xeb\\xf7\\x4a\\xf7\\x49\\x05\\x20\\x06\\xfb\\x72\\xfb\"\n\"\\x72\\x05\\x0b\\xf9\\x6e\\x15\\xfb\\x5b\\xfb\\x3a\\xfb\\x38\\xfb\\x57\\xfb\\x63\\xf7\\x35\\xfb\\x38\\xf7\\x5d\\xf7\\x61\\xf7\\x37\\xf7\\x36\\xf7\\x5f\\xf7\\x5e\"\n\"\\xfb\\x37\\xf7\\x37\\xfb\\x5e\\x1f\\x0b\\x15\\x8c\\x2f\\x0a\\xe7\\xbf\\xb9\\xe4\\x93\\x1f\\x50\\x8a\\x0a\\x0e\\x97\\x1d\\x51\\x06\\x61\\x86\\xad\\x1d\\x1f\\x82\"\n\"\\x8f\\x76\\x63\\x05\\x6f\\xc9\\xa3\\x95\\x0a\\xaf\\xc4\\xb6\\x6e\\xa3\\x0b\\xb0\\x16\\xdf\\xf7\\x8d\\xf2\\x06\\xf7\\x28\\x50\\x1d\\x21\\x56\\x1d\\x37\\x06\\x0b\"\n\"\\x75\\x0a\\x6d\\xa1\\xb7\\x0b\\xb8\\x1d\\xdf\\x06\\x96\\x1d\\x0b\\x53\\x1d\\x61\\x84\\x8d\\x76\\x1b\\x5f\\x6c\\x66\\x49\\x80\\x1f\\xc5\\x06\\xa2\\x91\\x97\\x98\"\n\"\\x9a\\x1b\\x96\\x0b\\x15\\xfc\\xec\\x07\\x57\\x7b\\x7a\\x57\\x85\\x88\\x8b\\x8c\\x80\\x1e\\x44\\x07\\x89\\x95\\x90\\x8a\\x98\\x1b\\xe9\\xbc\\xb0\\xd3\\x1f\\xf9\"\n\"\\x0d\\x07\\x0b\\x15\\x8c\\x2f\\x0a\\xe8\\x3f\\x0a\\x50\\x06\\x61\\x86\\x6b\\x73\\x55\\x1b\\x52\\x0b\\x2b\\x47\\x0a\\x0b\\x07\\xf7\\x7a\\x4c\\x8e\\x1d\\x07\\x93\"\n\"\\x79\\x7a\\x8e\\x79\\x1b\\x4a\\x52\\x55\\x4e\\x65\\xa6\\x74\\xb7\\xba\\xb9\\xa3\\xb3\\xa7\\x1f\\xa0\\xa8\\x93\\xa9\\xbc\\x1a\\x0b\\x97\\x92\\x8d\\x97\\x44\\x0a\"\n\"\\x0b\\x5d\\x98\\x41\\x1b\\xfb\\x6f\\x39\\x15\\x68\\x0a\\x0e\\x20\\x1d\\x38\\xfb\\xe6\\x06\\xa0\\xfb\\x73\\x05\\xb3\\xa9\\x1d\\x0b\\x15\\x23\\xc7\\x79\\x07\\x46\"\n\"\\x7e\\x77\\x5c\\x89\\x1e\\x65\\x07\\xcd\\x89\\xb2\\xbb\\xe0\\x1a\\xf7\\x0c\\x07\\x0e\\x07\\xe2\\x4a\\xc3\\x26\\x3d\\x59\\x6d\\x42\\x5d\\x1e\\xe3\\x07\\x0b\\xf7\"\n\"\\x77\\x82\\x0a\\x0b\\x15\\xfb\\x2e\\xf7\\x0d\\x05\\x38\\x07\\xf7\\x00\\x38\\xfb\\x00\\x38\\x05\\x38\\x07\\xf7\\x2e\\xf7\\x0e\\x05\\x0b\\xfb\\xd8\\x06\\x89\\x4b\"\n\"\\x69\\x57\\x5b\\x81\\x08\\x41\\x07\\xf4\\x90\\xcc\\xe0\\x89\\xf7\\x13\\x08\\xf7\\x7d\\x0b\\xfb\\xed\\x05\\xf3\\x06\\xfb\\x90\\xf8\\x14\\xf7\\x61\\xf7\\xed\\x05\"\n\"\\x23\\x06\\xfb\\x47\\xfb\\xc2\\x05\\x0b\\x15\\xf7\\x2c\\xfb\\x0d\\x05\\xde\\x07\\x21\\xde\\xf5\\xde\\x05\\xde\\x07\\xfb\\x2c\\xfb\\x0e\\x05\\x0b\\x15\\xa9\\xa4\"\n\"\\x72\\x6d\\x6d\\x72\\x72\\x6d\\x6d\\x72\\xa4\\xaa\\xa8\\xa5\\xa4\\xa8\\x1f\\x0b\\x7d\\x60\\x61\\x44\\x1b\\x2f\\x54\\xd6\\xf7\\x10\\x0b\\x15\\xf7\\x3a\\xf7\\x38\"\n\"\\x07\\xc0\\xaa\\x6d\\x56\\x56\\x6c\\x6d\\x56\\x1f\\x0e\\x4d\\x0a\\xbc\\x73\\xcf\\x1b\\xf7\\x1c\\xe3\\xf7\\x01\\xf7\\x3b\\x0b\\x2d\\xfb\\xcf\\xfc\\x0a\\xf7\\xcf\"\n\"\\x2e\\xfd\\x6d\\xe9\\xf7\\xe0\\x07\\x0e\\xf8\\xa0\\x8b\\x0a\\x0b\\xfc\\x2c\\xfb\\x20\\xf8\\x2c\\x05\\x32\\x06\\xf7\\x4f\\xfc\\xa0\\x05\\x0b\\x06\\x61\\x86\\x6a\"\n\"\\x73\\x56\\x1b\\x52\\x6c\\xa1\\xb7\\x86\\x1f\\x0b\\x9a\\x0a\\x37\\x22\\xdf\\x06\\x0b\\xfa\\x7d\\xf7\\xcc\\x15\\xfe\\x86\\x43\\xfa\\x86\\x06\\x0e\\x06\\xfb\\x5a\"\n\"\\xf7\\xc2\\xf7\\x61\\xf7\\xed\\x05\\x23\\x06\\x0b\\x51\\x3b\\x33\\x2f\\x4e\\xdc\\xf7\\x0e\\xf7\\x0e\\xc8\\xdc\\x0b\\x15\\xfb\\xa6\\x45\\xf7\\xa6\\x06\\x0b\\x06\"\n\"\\x65\\xfb\\x67\\x05\\xd7\\x06\\xb2\\xf7\\x67\\x05\\x0b\\xf9\\x35\\x99\\x0a\\x0b\\xf7\\x7d\\xf8\\x20\\xdd\\xfc\\x7d\\xfd\\x6d\\xe8\\x06\\x0b\\xe0\\x49\\xce\\x37\"\n\"\\x1f\\x4f\\x04\\xbe\\xb3\\x63\\x58\\x0b\\x2d\\xfd\\x1b\\xfc\\x0a\\x4c\\x0a\\x85\\xb2\\x1b\\xd7\\xba\\x0b\\x16\\xf7\\x5d\\xf8\\xa0\\x05\\x2d\\x06\\xfb\\x28\\x0b\"\n\"\\x06\\xf8\\x1b\\x04\\xf7\\x94\\x0b\\x20\\x0a\\xfc\\xa0\\xdf\\x0b\\x15\\x41\\x06\\x55\\xfb\\x94\\x05\\xc4\\x06\\x0b\\x15\\x38\\xfc\\xa0\\xde\\x06\\xf9\\x6d\\x04\"\n\"\\x0b\\x70\\x81\\x6d\\x89\\x57\\x08\\xdf\\x06\\xcb\\x0b\\x15\\xfc\\xec\\x59\\xf8\\xec\\x06\\x0e\\xfb\\x79\\xf7\\x21\\xfb\\x2d\\xf7\\x67\\x0b\\x1f\\x77\\xa9\\x84\"\n\"\\xa9\\x8a\\xbf\\x08\\x0b\\xdf\\xf7\\xdd\\x07\\xd7\\xc2\\xc8\\xcf\\x0b\\xfc\\x4f\\x05\\xfb\\xb2\\x0b\\xf7\\x13\\xc4\\xd8\\xe8\\x0b\\xb6\\x6e\\xa3\\x58\\x0b\", 33151\n};\n"
  },
  {
    "path": "src/fonts/StandardSymbolsPS.cff.cpp",
    "content": "#include \"Base14Fonts.hpp\"\n\nextern const MemoryFontData StandardSymbolsPS_cff = {\n\"\\x01\\x00\\x04\\x02\\x00\\x01\\x01\\x01\\x12\\x53\\x74\\x61\\x6e\\x64\\x61\\x72\\x64\\x53\\x79\\x6d\\x62\\x6f\\x6c\\x73\\x50\\x53\\x00\\x01\\x01\\x01\\x3b\\xf8\"\n\"\\xad\\x00\\xf8\\xae\\x01\\xf8\\xaf\\x0c\\x00\\xf8\\xb0\\x02\\xf8\\xb0\\x03\\xf8\\x18\\x04\\xfb\\x79\\x0c\\x03\\xb9\\x0c\\x04\\xfb\\x48\\xfb\\xb9\\xfa\\xd6\\xfa\"\n\"\\x86\\x05\\x1d\\x00\\x4c\\x9e\\x9b\\x0d\\x1c\\x06\\x86\\x0f\\x1c\\x06\\xf9\\x10\\x1c\\x07\\x03\\x11\\xbb\\x1c\\x3b\\xbc\\x12\\x00\\x96\\x02\\x00\\x01\\x00\\x0a\"\n\"\\x00\\x15\\x00\\x1d\\x00\\x29\\x00\\x32\\x00\\x37\\x00\\x3b\\x00\\x3e\\x00\\x43\\x00\\x4a\\x00\\x4d\\x00\\x52\\x00\\x55\\x00\\x59\\x00\\x5f\\x00\\x64\\x00\\x6a\"\n\"\\x00\\x6c\\x00\\x6e\\x00\\x75\\x00\\x77\\x00\\x7c\\x00\\x7f\\x00\\x84\\x00\\x87\\x00\\x8e\\x00\\x94\\x00\\x99\\x00\\x9b\\x00\\x9e\\x00\\xa2\\x00\\xab\\x00\\xb8\"\n\"\\x00\\xc1\\x00\\xc6\\x00\\xca\\x00\\xcd\\x00\\xd2\\x00\\xd9\\x00\\xdc\\x00\\xe1\\x00\\xe4\\x00\\xe8\\x00\\xec\\x00\\xf1\\x00\\xf7\\x00\\xf9\\x01\\x00\\x01\\x02\"\n\"\\x01\\x07\\x01\\x0a\\x01\\x0f\\x01\\x12\\x01\\x19\\x01\\x1f\\x01\\x24\\x01\\x26\\x01\\x29\\x01\\x2d\\x01\\x34\\x01\\x39\\x01\\x3d\\x01\\x45\\x01\\x4b\\x01\\x54\"\n\"\\x01\\x5c\\x01\\x60\\x01\\x67\\x01\\x6c\\x01\\x71\\x01\\x7a\\x01\\x83\\x01\\x8a\\x01\\x94\\x01\\x9d\\x01\\xa3\\x01\\xaf\\x01\\xbb\\x01\\xc6\\x01\\xce\\x01\\xd9\"\n\"\\x01\\xe4\\x01\\xef\\x01\\xfb\\x02\\x09\\x02\\x0e\\x02\\x16\\x02\\x1e\\x02\\x29\\x02\\x37\\x02\\x41\\x02\\x49\\x02\\x55\\x02\\x5a\\x02\\x68\\x02\\x76\\x02\\x7f\"\n\"\\x02\\x8b\\x02\\x97\\x02\\x9e\\x02\\xa8\\x02\\xad\\x02\\xb5\\x02\\xc2\\x02\\xd0\\x02\\xde\\x02\\xe5\\x02\\xec\\x02\\xf3\\x02\\xfd\\x03\\x06\\x03\\x12\\x03\\x1e\"\n\"\\x03\\x28\\x03\\x35\\x03\\x41\\x03\\x48\\x03\\x51\\x03\\x5d\\x03\\x6a\\x03\\x77\\x03\\x80\\x03\\x8b\\x03\\x96\\x03\\xa1\\x03\\xae\\x03\\xbb\\x03\\xc8\\x03\\xd3\"\n\"\\x03\\xdf\\x03\\xea\\x03\\xf1\\x03\\xfb\\x04\\x03\\x04\\x0d\\x04\\x17\\x04\\x21\\x04\\x2d\\x04\\x39\\x04\\x45\\x04\\x53\\x04\\x61\\x04\\x6f\\x04\\x7b\\x04\\x88\"\n\"\\x04\\x94\\x04\\x98\\x04\\xbb\\x04\\xe8\\x04\\xfb\\x75\\x6e\\x69\\x76\\x65\\x72\\x73\\x61\\x6c\\x65\\x78\\x69\\x73\\x74\\x65\\x6e\\x74\\x69\\x61\\x6c\\x73\\x75\"\n\"\\x63\\x68\\x74\\x68\\x61\\x74\\x61\\x73\\x74\\x65\\x72\\x69\\x73\\x6b\\x6d\\x61\\x74\\x68\\x63\\x6f\\x6e\\x67\\x72\\x75\\x65\\x6e\\x74\\x41\\x6c\\x70\\x68\\x61\"\n\"\\x42\\x65\\x74\\x61\\x43\\x68\\x69\\x44\\x65\\x6c\\x74\\x61\\x45\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x50\\x68\\x69\\x47\\x61\\x6d\\x6d\\x61\\x45\\x74\\x61\\x49\\x6f\"\n\"\\x74\\x61\\x74\\x68\\x65\\x74\\x61\\x31\\x4b\\x61\\x70\\x70\\x61\\x4c\\x61\\x6d\\x62\\x64\\x61\\x4d\\x75\\x4e\\x75\\x4f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x50\\x69\"\n\"\\x54\\x68\\x65\\x74\\x61\\x52\\x68\\x6f\\x53\\x69\\x67\\x6d\\x61\\x54\\x61\\x75\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x73\\x69\\x67\\x6d\\x61\\x31\\x4f\\x6d\\x65\"\n\"\\x67\\x61\\x58\\x69\\x50\\x73\\x69\\x5a\\x65\\x74\\x61\\x74\\x68\\x65\\x72\\x65\\x66\\x6f\\x72\\x65\\x70\\x65\\x72\\x70\\x65\\x6e\\x64\\x69\\x63\\x75\\x6c\\x61\"\n\"\\x72\\x72\\x61\\x64\\x69\\x63\\x61\\x6c\\x65\\x78\\x61\\x6c\\x70\\x68\\x61\\x62\\x65\\x74\\x61\\x63\\x68\\x69\\x64\\x65\\x6c\\x74\\x61\\x65\\x70\\x73\\x69\\x6c\"\n\"\\x6f\\x6e\\x70\\x68\\x69\\x67\\x61\\x6d\\x6d\\x61\\x65\\x74\\x61\\x69\\x6f\\x74\\x61\\x70\\x68\\x69\\x31\\x6b\\x61\\x70\\x70\\x61\\x6c\\x61\\x6d\\x62\\x64\\x61\"\n\"\\x6e\\x75\\x6f\\x6d\\x69\\x63\\x72\\x6f\\x6e\\x70\\x69\\x74\\x68\\x65\\x74\\x61\\x72\\x68\\x6f\\x73\\x69\\x67\\x6d\\x61\\x74\\x61\\x75\\x75\\x70\\x73\\x69\\x6c\"\n\"\\x6f\\x6e\\x6f\\x6d\\x65\\x67\\x61\\x31\\x6f\\x6d\\x65\\x67\\x61\\x78\\x69\\x70\\x73\\x69\\x7a\\x65\\x74\\x61\\x73\\x69\\x6d\\x69\\x6c\\x61\\x72\\x61\\x70\\x70\"\n\"\\x6c\\x65\\x45\\x75\\x72\\x6f\\x55\\x70\\x73\\x69\\x6c\\x6f\\x6e\\x31\\x6d\\x69\\x6e\\x75\\x74\\x65\\x6c\\x65\\x73\\x73\\x65\\x71\\x75\\x61\\x6c\\x69\\x6e\\x66\"\n\"\\x69\\x6e\\x69\\x74\\x79\\x63\\x6c\\x75\\x62\\x64\\x69\\x61\\x6d\\x6f\\x6e\\x64\\x68\\x65\\x61\\x72\\x74\\x73\\x70\\x61\\x64\\x65\\x61\\x72\\x72\\x6f\\x77\\x62\"\n\"\\x6f\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\\x77\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x72\\x69\\x67\\x68\\x74\\x61\\x72\\x72\"\n\"\\x6f\\x77\\x64\\x6f\\x77\\x6e\\x73\\x65\\x63\\x6f\\x6e\\x64\\x67\\x72\\x65\\x61\\x74\\x65\\x72\\x65\\x71\\x75\\x61\\x6c\\x70\\x72\\x6f\\x70\\x6f\\x72\\x74\\x69\"\n\"\\x6f\\x6e\\x61\\x6c\\x70\\x61\\x72\\x74\\x69\\x61\\x6c\\x64\\x69\\x66\\x66\\x6e\\x6f\\x74\\x65\\x71\\x75\\x61\\x6c\\x65\\x71\\x75\\x69\\x76\\x61\\x6c\\x65\\x6e\"\n\"\\x63\\x65\\x61\\x70\\x70\\x72\\x6f\\x78\\x65\\x71\\x75\\x61\\x6c\\x61\\x72\\x72\\x6f\\x77\\x76\\x65\\x72\\x74\\x65\\x78\\x61\\x72\\x72\\x6f\\x77\\x68\\x6f\\x72\"\n\"\\x69\\x7a\\x65\\x78\\x63\\x61\\x72\\x72\\x69\\x61\\x67\\x65\\x72\\x65\\x74\\x75\\x72\\x6e\\x61\\x6c\\x65\\x70\\x68\\x49\\x66\\x72\\x61\\x6b\\x74\\x75\\x72\\x52\"\n\"\\x66\\x72\\x61\\x6b\\x74\\x75\\x72\\x77\\x65\\x69\\x65\\x72\\x73\\x74\\x72\\x61\\x73\\x73\\x63\\x69\\x72\\x63\\x6c\\x65\\x6d\\x75\\x6c\\x74\\x69\\x70\\x6c\\x79\"\n\"\\x63\\x69\\x72\\x63\\x6c\\x65\\x70\\x6c\\x75\\x73\\x65\\x6d\\x70\\x74\\x79\\x73\\x65\\x74\\x69\\x6e\\x74\\x65\\x72\\x73\\x65\\x63\\x74\\x69\\x6f\\x6e\\x75\\x6e\"\n\"\\x69\\x6f\\x6e\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x72\\x65\\x66\\x6c\\x65\\x78\\x73\\x75\\x70\\x65\\x72\\x73\\x65\\x74\\x6e\"\n\"\\x6f\\x74\\x73\\x75\\x62\\x73\\x65\\x74\\x70\\x72\\x6f\\x70\\x65\\x72\\x73\\x75\\x62\\x73\\x65\\x74\\x72\\x65\\x66\\x6c\\x65\\x78\\x73\\x75\\x62\\x73\\x65\\x74\"\n\"\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x6e\\x6f\\x74\\x65\\x6c\\x65\\x6d\\x65\\x6e\\x74\\x61\\x6e\\x67\\x6c\\x65\\x67\\x72\\x61\\x64\\x69\\x65\\x6e\\x74\\x72\\x65\"\n\"\\x67\\x69\\x73\\x74\\x65\\x72\\x73\\x65\\x72\\x69\\x66\\x63\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x73\\x65\\x72\\x69\\x66\\x74\\x72\\x61\\x64\\x65\\x6d\\x61\"\n\"\\x72\\x6b\\x73\\x65\\x72\\x69\\x66\\x70\\x72\\x6f\\x64\\x75\\x63\\x74\\x72\\x61\\x64\\x69\\x63\\x61\\x6c\\x64\\x6f\\x74\\x6d\\x61\\x74\\x68\\x6c\\x6f\\x67\\x69\"\n\"\\x63\\x61\\x6c\\x61\\x6e\\x64\\x6c\\x6f\\x67\\x69\\x63\\x61\\x6c\\x6f\\x72\\x61\\x72\\x72\\x6f\\x77\\x64\\x62\\x6c\\x62\\x6f\\x74\\x68\\x61\\x72\\x72\\x6f\\x77\"\n\"\\x64\\x62\\x6c\\x6c\\x65\\x66\\x74\\x61\\x72\\x72\\x6f\\x77\\x64\\x62\\x6c\\x75\\x70\\x61\\x72\\x72\\x6f\\x77\\x64\\x62\\x6c\\x72\\x69\\x67\\x68\\x74\\x61\\x72\"\n\"\\x72\\x6f\\x77\\x64\\x62\\x6c\\x64\\x6f\\x77\\x6e\\x6c\\x6f\\x7a\\x65\\x6e\\x67\\x65\\x61\\x6e\\x67\\x6c\\x65\\x6c\\x65\\x66\\x74\\x72\\x65\\x67\\x69\\x73\\x74\"\n\"\\x65\\x72\\x73\\x61\\x6e\\x73\\x63\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x73\\x61\\x6e\\x73\\x74\\x72\\x61\\x64\\x65\\x6d\\x61\\x72\\x6b\\x73\\x61\\x6e\\x73\"\n\"\\x73\\x75\\x6d\\x6d\\x61\\x74\\x69\\x6f\\x6e\\x70\\x61\\x72\\x65\\x6e\\x6c\\x65\\x66\\x74\\x74\\x70\\x70\\x61\\x72\\x65\\x6e\\x6c\\x65\\x66\\x74\\x65\\x78\\x70\"\n\"\\x61\\x72\\x65\\x6e\\x6c\\x65\\x66\\x74\\x62\\x74\\x62\\x72\\x61\\x63\\x6b\\x65\\x74\\x6c\\x65\\x66\\x74\\x74\\x70\\x62\\x72\\x61\\x63\\x6b\\x65\\x74\\x6c\\x65\"\n\"\\x66\\x74\\x65\\x78\\x62\\x72\\x61\\x63\\x6b\\x65\\x74\\x6c\\x65\\x66\\x74\\x62\\x74\\x62\\x72\\x61\\x63\\x65\\x6c\\x65\\x66\\x74\\x74\\x70\\x62\\x72\\x61\\x63\"\n\"\\x65\\x6c\\x65\\x66\\x74\\x6d\\x69\\x64\\x62\\x72\\x61\\x63\\x65\\x6c\\x65\\x66\\x74\\x62\\x74\\x62\\x72\\x61\\x63\\x65\\x65\\x78\\x61\\x6e\\x67\\x6c\\x65\\x72\"\n\"\\x69\\x67\\x68\\x74\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x74\\x70\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x65\\x78\"\n\"\\x69\\x6e\\x74\\x65\\x67\\x72\\x61\\x6c\\x62\\x74\\x70\\x61\\x72\\x65\\x6e\\x72\\x69\\x67\\x68\\x74\\x74\\x70\\x70\\x61\\x72\\x65\\x6e\\x72\\x69\\x67\\x68\\x74\"\n\"\\x65\\x78\\x70\\x61\\x72\\x65\\x6e\\x72\\x69\\x67\\x68\\x74\\x62\\x74\\x62\\x72\\x61\\x63\\x6b\\x65\\x74\\x72\\x69\\x67\\x68\\x74\\x74\\x70\\x62\\x72\\x61\\x63\"\n\"\\x6b\\x65\\x74\\x72\\x69\\x67\\x68\\x74\\x65\\x78\\x62\\x72\\x61\\x63\\x6b\\x65\\x74\\x72\\x69\\x67\\x68\\x74\\x62\\x74\\x62\\x72\\x61\\x63\\x65\\x72\\x69\\x67\"\n\"\\x68\\x74\\x74\\x70\\x62\\x72\\x61\\x63\\x65\\x72\\x69\\x67\\x68\\x74\\x6d\\x69\\x64\\x62\\x72\\x61\\x63\\x65\\x72\\x69\\x67\\x68\\x74\\x62\\x74\\x32\\x2e\\x30\"\n\"\\x30\\x55\\x52\\x57\\x20\\x53\\x6f\\x66\\x74\\x77\\x61\\x72\\x65\\x2c\\x20\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x35\\x20\\x62\\x79\"\n\"\\x20\\x55\\x52\\x57\\x43\\x6f\\x70\\x79\\x72\\x69\\x67\\x68\\x74\\x20\\x55\\x52\\x57\\x20\\x53\\x6f\\x66\\x74\\x77\\x61\\x72\\x65\\x2c\\x20\\x43\\x6f\\x70\\x79\"\n\"\\x72\\x69\\x67\\x68\\x74\\x20\\x32\\x30\\x31\\x35\\x20\\x62\\x79\\x20\\x55\\x52\\x57\\x53\\x74\\x61\\x6e\\x64\\x61\\x72\\x64\\x20\\x53\\x79\\x6d\\x62\\x6f\\x6c\"\n\"\\x73\\x20\\x50\\x53\\x00\\x00\\x01\\x00\\x01\\x01\\x01\\x87\\x00\\x00\\x04\\x00\\x01\\x88\\x00\\x00\\x06\\x01\\x01\\x89\\x00\\x00\\x09\\x01\\x01\\x8a\\x00\\x00\"\n\"\\x0c\\x01\\x00\\xa6\\x00\\x00\\x0f\\x11\\x01\\x8b\\x1a\\x00\\x3c\\x00\\x01\\xa6\\x00\\x00\\x3e\\x00\\x01\\xa7\\x00\\x00\\x40\\x00\\x01\\xa8\\x0c\\x00\\x98\\x00\"\n\"\\x01\\xb5\\x0c\\x00\\x5c\\x02\\x01\\xc2\\x05\\x00\\x63\\x00\\x01\\xc8\\x00\\x00\\x65\\x00\\x01\\xc9\\x08\\x00\\xa1\\x00\\x00\\x9c\\x00\\x01\\xd2\\x01\\x00\\xa8\"\n\"\\x00\\x01\\xd4\\x01\\x00\\x74\\x00\\x00\\x9f\\x00\\x01\\xd6\\x02\\x00\\x79\\x00\\x01\\xd9\\x1a\\x00\\x97\\x00\\x01\\xf4\\x24\\x01\\x04\\x20\\x5e\\x80\\x00\\xa0\"\n\"\\x4f\\xf1\\x0d\\x00\\xbf\\x02\\x00\\x01\\x00\\x04\\x00\\x07\\x00\\x2f\\x00\\x58\\x00\\xb8\\x00\\xd1\\x01\\x86\\x02\\x3b\\x02\\x8f\\x02\\xd5\\x03\\x1a\\x04\\x08\"\n\"\\x04\\x0e\\x04\\x15\\x04\\x1f\\x04\\x28\\x04\\x38\\x04\\x7a\\x04\\xb6\\x05\\x0d\\x05\\x72\\x05\\x93\\x05\\xe9\\x06\\x4a\\x06\\x6f\\x06\\xd7\\x07\\x39\\x07\\x4e\"\n\"\\x07\\x65\\x07\\x82\\x07\\x97\\x07\\x9c\\x07\\xfc\\x08\\x2e\\x08\\x69\\x08\\xd0\\x09\\x51\\x09\\x6b\\x09\\xab\\x0a\\x39\\x0a\\x54\\x0a\\x71\\x0a\\x80\\x0b\\x29\"\n\"\\x0b\\x97\\x0b\\xc4\\x0b\\xf3\\x0c\\x38\\x0c\\x3f\\x0c\\x65\\x0c\\x72\\x0c\\xcc\\x0d\\x09\\x0d\\x43\\x0d\\x8e\\x0e\\x06\\x0e\\x89\\x0e\\xd4\\x0f\\x67\\x0f\\xa0\"\n\"\\x0f\\xc0\\x0f\\xd5\\x0f\\xf5\\x10\\x07\\x10\\x13\\x10\\x20\\x10\\x9d\\x11\\x1b\\x11\\x92\\x12\\x09\\x12\\x93\\x13\\x0b\\x13\\x74\\x13\\xcd\\x14\\x13\\x14\\x77\"\n\"\\x14\\xe9\\x15\\x59\\x15\\xc6\\x16\\x1b\\x16\\x5c\\x16\\xd1\\x17\\x4c\\x17\\xb2\\x17\\xfd\\x18\\x52\\x18\\xc8\\x19\\x47\\x19\\xb2\\x1a\\x87\\x1a\\xfe\\x1b\\x89\"\n\"\\x1b\\xe5\\x1b\\xf1\\x1c\\x4c\\x1c\\x7a\\x1d\\x1e\\x1d\\x9c\\x1e\\x03\\x1e\\x09\\x1e\\x26\\x1e\\x35\\x1e\\x92\\x1f\\x1a\\x1f\\x9c\\x1f\\xaf\\x1f\\xf8\\x20\\x50\"\n\"\\x20\\xa8\\x20\\xdc\\x21\\x11\\x21\\x45\\x21\\x7b\\x21\\xa8\\x21\\xb6\\x21\\xc1\\x21\\xc9\\x21\\xf4\\x22\\x54\\x22\\xc6\\x22\\xdf\\x23\\x14\\x23\\x4a\\x23\\x67\"\n\"\\x23\\x83\\x23\\x96\\x23\\xa2\\x23\\xaf\\x23\\xc9\\x24\\x75\\x25\\x2c\\x26\\x2e\\x26\\xed\\x27\\x64\\x27\\xc7\\x28\\x2f\\x28\\x6c\\x28\\xab\\x29\\x08\\x29\\x6f\"\n\"\\x29\\xb9\\x29\\xc0\\x29\\xce\\x2a\\x04\\x2a\\x70\\x2a\\x84\\x2a\\xa1\\x2b\\x0b\\x2b\\x60\\x2b\\xf3\\x2c\\x32\\x2c\\x4d\\x2c\\x66\\x2c\\x75\\x2c\\x8d\\x2c\\xa4\"\n\"\\x2d\\x0d\\x2d\\x55\\x2d\\xaa\\x2d\\xf7\\x2e\\x47\\x2e\\x71\\x2e\\x8c\\x2f\\x18\\x2f\\x8d\\x2f\\xc6\\x30\\x03\\x30\\x31\\x30\\x3c\\x30\\x68\\x30\\x76\\x30\\x82\"\n\"\\x30\\x92\\x30\\xb2\\x30\\xe9\\x31\\x08\\x31\\x16\\x31\\x2e\\x31\\x99\\x31\\xd8\\x31\\xe3\\x32\\x23\\x32\\x53\\x32\\x60\\x32\\x8f\\x32\\xa0\\x32\\xae\\x32\\xbf\"\n\"\\x32\\xdd\\x33\\x16\\x33\\x37\\xfc\\x45\\x0e\\xfc\\x45\\x0e\\xfb\\xf2\\xf7\\x41\\xf7\\x4e\\x15\\xa2\\x06\\xaf\\xf7\\xf8\\x05\\x92\\xcb\\x8b\\x8b\\x99\\x1a\\xb4\"\n\"\\x76\\xa4\\x68\\x67\\x78\\x72\\x5d\\x7b\\x8b\\x8b\\x91\\x53\\x1e\\xbe\\xfc\\x4f\\x15\\x22\\x0a\\x0e\\xa9\\xf9\\x3d\\x20\\x0a\\x56\\x06\\x39\\xfb\\x56\\x05\\xfc\"\n\"\\x0e\\x06\\x36\\xf7\\x56\\x05\\x57\\x06\\xf7\\xc3\\xfd\\x35\\x05\\xc4\\x06\\xfb\\x5c\\xf8\\x42\\x15\\xf7\\xe2\\x06\\xfb\\x36\\xfc\\x01\\x05\\x0e\\xfb\\x4b\\xf8\"\n\"\\x5e\\xf7\\x95\\x15\\x2d\\x06\\x9e\\xf7\\x16\\x05\\xed\\xbf\\x31\\x06\\xa7\\xf7\\x54\\x05\\x54\\x06\\x6f\\xfb\\x54\\x05\\xfb\\x12\\x06\\xa7\\xf7\\x54\\x05\\x56\"\n\"\\x06\\x6e\\xfb\\x54\\x05\\xfb\\x03\\x55\\xf0\\x06\\x7a\\xfb\\x14\\x05\\xfb\\x01\\x57\\xf0\\x06\\x6c\\xfb\\x61\\x05\\xc3\\x06\\xa8\\xf7\\x61\\x05\\xf7\\x12\\x06\"\n\"\\x6d\\xfb\\x61\\x05\\xc2\\x06\\xa9\\xf7\\x61\\x05\\xf1\\x06\\xfb\\x16\\xf7\\x4a\\x15\\x78\\xfb\\x16\\x05\\xfb\\x11\\x06\\x9d\\xf7\\x16\\x05\\x0e\\xf8\\x72\\x20\"\n\"\\x0a\\xfc\\x59\\x58\\xf8\\x22\\xfb\\x89\\xfb\\xf5\\x5a\\xf7\\xf5\\xfb\\xab\\xfc\\x22\\x5a\\xf8\\x59\\x06\\x0e\\xf7\\x2a\\xf7\\x7b\\x16\\xf8\\x37\\xf9\\x35\\x05\"\n\"\\x56\\x06\\x60\\x72\\x55\\x70\\x4d\\x1b\\x6d\\x76\\x92\\xa3\\x69\\x1f\\xa7\\x61\\x7b\\x92\\x6c\\x1b\\xfb\\x01\\xfb\\x02\\xfb\\x0d\\xfb\\x0d\\x3e\\xbc\\x58\\xd6\"\n\"\\xf7\\x01\\xeb\\xf7\\x09\\xf7\\x19\\x99\\x8a\\x93\\x87\\x9b\\x1f\\x84\\x9f\\xa4\\x87\\xa5\\x1b\\xae\\xa7\\x93\\x9e\\xb2\\x1f\\xfc\\x13\\xfc\\xef\\x05\\xf7\\x4a\"\n\"\\xf8\\xe7\\x15\\x8f\\x82\\x8c\\x84\\x75\\x1a\\x4b\\x79\\x57\\x66\\x5e\\x1e\\x65\\x6b\\x63\\x74\\x68\\x1b\\x65\\x73\\xa1\\xb0\\xea\\xe2\\xf7\\x26\\xc4\\x90\\x8e\"\n\"\\x8b\\x8a\\x90\\x1f\\x9d\\x78\\x92\\x86\\xb0\\x7c\\x08\\xf7\\xbf\\xfb\\x7f\\x15\\xfb\\x07\\xfb\\x03\\xfb\\x0d\\xfb\\x11\\x44\\xbf\\x59\\xd4\\xbf\\xb6\\xa0\\xb7\"\n\"\\xb1\\x1f\\xbd\\xc4\\xaa\\xd6\\xcb\\x1a\\xca\\x5e\\xb6\\x47\\x1e\\x97\\x67\\x15\\xb3\\xa8\\x6b\\x60\\x52\\x6f\\x47\\x61\\x5d\\x1f\\x6d\\x70\\x61\\x78\\x67\\x1b\"\n\"\\x69\\x76\\xa2\\xb1\\xf3\\xe4\\xf7\\x16\\xd3\\x1f\\x0e\\xea\\xf8\\x84\\xf8\\x3e\\x15\\x77\\x07\\xb9\\x88\\x9d\\x7e\\x6c\\x1a\\x61\\x63\\x3c\\x58\\x50\\x1e\\x6a\"\n\"\\xad\\x4e\\xeb\\x68\\xd4\\xaf\\x9c\\xa1\\x97\\x9e\\x99\\x08\\xbd\\xaf\\xa6\\xb9\\xbb\\x1a\\xd0\\x53\\xbe\\x3f\\x36\\x42\\x44\\x38\\x5f\\x98\\x58\\xa3\\x54\\x1e\"\n\"\\x47\\x66\\x7d\\x83\\x79\\x7f\\x08\\x47\\x5a\\x6b\\x55\\x4a\\x1a\\x2b\\xd2\\x4c\\xf6\\xdc\\xd1\\xa9\\xc8\\xc7\\x1e\\x4f\\xc0\\xc6\\x6c\\xc8\\x1b\\xc6\\xb6\\xac\"\n\"\\xdb\\xb8\\x1f\\x7b\\x98\\x05\\x64\\x6e\\x72\\x7b\\x6b\\x1b\\x56\\x5b\\xa8\\xca\\x55\\x1f\\xa4\\xa9\\xa1\\xaa\\xa1\\xb0\\x92\\x96\\x9c\\xa9\\xa7\\xbb\\x95\\x9b\"\n\"\\x93\\x96\\x93\\x94\\x9c\\x9d\\xa2\\x95\\xad\\x90\\x08\\x9f\\x07\\xfc\\x1a\\x7e\\x15\\x74\\xb9\\x7b\\xc3\\xb0\\x1a\\xc2\\xa8\\xae\\xb8\\xba\\xac\\x67\\x59\\x4e\"\n\"\\x67\\x5e\\x3c\\x66\\x1e\\x48\\x41\\x15\\xbc\\x29\\xb9\\x42\\xbf\\x4b\\x08\\x61\\x63\\x5d\\x75\\x5b\\x1b\\x42\\x50\\xcb\\xda\\xcb\\xb6\\xc4\\xd7\\xae\\x1f\\x0e\"\n\"\\xfb\\x88\\xbb\\x91\\x15\\x7d\\xad\\xa4\\x86\\xb0\\x1b\\xd2\\xc8\\xa3\\xbb\\xbf\\x1f\\xc1\\xbe\\xab\\xcf\\xce\\x1a\\xf7\\x1c\\xfb\\x11\\xf7\\x0e\\xfb\\x20\\x75\"\n\"\\x7a\\x88\\x83\\x6c\\x1e\\x66\\x07\\x8c\\x9d\\x93\\x8c\\x96\\x1b\\xc7\\xc5\\x76\\x68\\xae\\x1f\\xaf\\x67\\x9c\\x66\\x93\\x50\\x08\\xfb\\x6e\\x5b\\xf7\\x6e\\x06\"\n\"\\x83\\x53\\x7c\\x6a\\x6b\\x67\\x08\\x65\\x68\\x50\\x73\\x4f\\x1b\\x73\\x77\\x8d\\x92\\x6e\\x1f\\x0e\\xfb\\xf2\\xf7\\xc0\\xfb\\x2f\\x15\\x69\\xa2\\x7b\\x9a\\x77\"\n\"\\xa5\\x08\\x55\\xd3\\x6c\\xf7\\x10\\xf7\\x29\\x1a\\xf7\\x1c\\xa5\\xf7\\x0a\\xb9\\xd3\\x1e\\xa1\\xae\\x9e\\x9e\\xb5\\xa8\\x7e\\x9c\\x18\\x5d\\x73\\x77\\x7d\\x71\"\n\"\\x73\\x08\\x31\\x38\\x57\\xfb\\x1a\\xfb\\x27\\x1a\\xfb\\x1d\\xb8\\xfb\\x12\\xdb\\x37\\x1e\\xaa\\x6a\\xa3\\x7a\\xc1\\x6e\\x08\\x0e\\xfb\\xf2\\xb6\\xfb\\x40\\x15\"\n\"\\xb9\\xa4\\x9f\\x98\\xa5\\xa3\\x08\\xe5\\xde\\xbf\\xf7\\x1b\\xf7\\x26\\x1a\\xf7\\x1d\\x5e\\xf7\\x12\\x3b\\xe0\\x1e\\x6b\\xab\\x74\\x9d\\x55\\xa7\\x7e\\x7a\\x18\"\n\"\\xae\\x73\\x9a\\x7d\\x9f\\x71\\x08\\xc1\\x43\\xaa\\xfb\\x10\\xfb\\x29\\x1a\\xfb\\x1c\\x71\\xfb\\x0a\\x5d\\x43\\x1e\\x74\\x68\\x77\\x77\\x63\\x6f\\x08\\x0e\\xfb\"\n\"\\x4b\\xf7\\x33\\xf8\\x31\\x15\\x86\\x91\\x87\\x90\\x87\\x8f\\x08\\xa5\\x74\\x7f\\x93\\x7d\\x1b\\x7a\\x7c\\x77\\x76\\x73\\x98\\x81\\xb6\\x82\\x1f\\xce\\x7c\\xa5\"\n\"\\x80\\x7c\\x1a\\x7d\\x70\\x7e\\x5c\\x80\\x1e\\x67\\x83\\x88\\x8b\\x83\\x88\\x08\\x78\\x83\\x82\\x80\\x7a\\x1a\\x76\\x9a\\x77\\x9c\\x9b\\x92\\x90\\xb7\\xb2\\x1e\"\n\"\\x90\\x91\\x05\\xa8\\xa5\\xa0\\x9a\\x99\\x1b\\x92\\x8f\\x83\\x7d\\x7a\\x87\\x7a\\x82\\x6d\\x1f\\x7c\\x5b\\x8b\\x8b\\x7e\\x1a\\x76\\x9a\\x7c\\xa2\\xa2\\x9a\\x99\"\n\"\\xa1\\x98\\x8a\\x8e\\x7c\\xb8\\x1e\\x81\\xaa\\x88\\x9b\\x9d\\x1a\\x99\\x8f\\x92\\x92\\x99\\xa0\\x7b\\x6f\\xa5\\x1e\\x90\\x85\\x99\\x7c\\x05\\x71\\xa2\\x97\\x83\"\n\"\\x99\\x1b\\x9c\\x9a\\x9f\\xa1\\x9a\\x83\\x96\\x7a\\x92\\x1f\\x83\\x8f\\x88\\x8c\\x64\\x93\\x08\\x5c\\x96\\x71\\x98\\x99\\x1a\\x9a\\xa4\\x96\\xce\\x9a\\x1e\\xb5\"\n\"\\x94\\x99\\x96\\xa1\\x1a\\xa1\\x7c\\x9f\\x7a\\x7d\\x7e\\x82\\x72\\x75\\x1e\\x84\\x83\\x86\\x86\\x89\\x89\\x86\\x86\\x18\\x6f\\x72\\x75\\x7b\\x7e\\x1b\\x83\\x87\"\n\"\\x92\\x99\\x9d\\x8f\\x9c\\x94\\xa9\\x1f\\x9a\\xb8\\x8c\\x8e\\x97\\x1a\\xa0\\x7c\\x9a\\x74\\x74\\x7c\\x7d\\x75\\x7f\\x8b\\x8b\\x9a\\x5b\\x1e\\x95\\x6d\\x8e\\x7a\"\n\"\\x79\\x1a\\x7e\\x87\\x83\\x84\\x7d\\x75\\x9b\\xa7\\x72\\x1e\\x0e\\xf7\\xc2\\xf8\\xa9\\x39\\x0a\\xfc\\x45\\xc3\\xfb\\x0c\\x2a\\x0a\\x96\\xf7\\xba\\x15\\x54\\xf8\"\n\"\\xa0\\xc2\\x07\\x0e\\xfc\\x45\\xf7\\x12\\xef\\x15\\x22\\x0a\\x0e\\xfc\\x29\\xf7\\x92\\x20\\x0a\\x53\\x06\\xfb\\x5a\\xfd\\x35\\x05\\xc3\\x06\\x0e\\xfb\\x4b\\xf7\"\n\"\\x90\\xf9\\x42\\x15\\x34\\x4c\\x5e\\x2f\\x63\\x1f\\x70\\x4e\\x7f\\x48\\x36\\x1a\\xfb\\x68\\xe3\\xfb\\x1d\\xf7\\x1c\\xf7\\x1c\\xe3\\xf7\\x1d\\xf7\\x68\\xf7\\x66\"\n\"\\x33\\xf7\\x20\\xfb\\x17\\x1e\\x89\\x67\\x15\\xe1\\xb2\\x2a\\xfb\\x6a\\xfb\\x6d\\x64\\x2d\\x33\\x31\\x64\\xe9\\xf7\\x6e\\xf7\\x6e\\xb2\\xe7\\xe7\\x1f\\x0e\\xfb\"\n\"\\x4b\\xf8\\x1a\\xa5\\x15\\x37\\x91\\x7e\\x9a\\x8d\\xea\\x08\\xf8\\xa7\\x79\\x07\\x68\\x75\\x5e\\x73\\x3b\\x64\\x08\\x6e\\x07\\x98\\xaa\\x9e\\x91\\x97\\x1b\\x97\"\n\"\\x96\\x84\\x81\\x8f\\x1f\\x90\\x7d\\x8b\\x8b\\x8d\\x4c\\x08\\xfb\\xea\\x07\\x8c\\x2d\\x7e\\x7b\\x37\\x85\\x08\\x71\\xf7\\xa5\\x07\\x0e\\xfb\\x4b\\xa4\\x16\\xf8\"\n\"\\x20\\x06\\xc1\\xf7\\x1a\\x05\\x72\\x06\\x56\\x6c\\x78\\x83\\x35\\x1b\\xfb\\x54\\x06\\xf7\\x61\\xf7\\x5b\\xd3\\xf7\\x05\\xf7\\x0a\\x1a\\xf5\\x41\\xd8\\x25\\x57\"\n\"\\x61\\x77\\x62\\x69\\x1e\\x6f\\x6a\\x7f\\x6c\\x81\\x4e\\x08\\x9c\\x06\\x96\\xac\\x93\\x9a\\x99\\x9c\\x08\\xa8\\xa3\\xaf\\x9c\\xaf\\x1b\\xd1\\xc8\\x46\\x3c\\x2c\"\n\"\\x43\\xfb\\x12\\xfb\\x12\\xfb\\x13\\x1f\\x40\\x3e\\x88\\x89\\x83\\x82\\x7e\\x7e\\x19\\x0e\\xfb\\x4b\\xf7\\x50\\xf7\\xfd\\x15\\x72\\x94\\x07\\xc0\\xad\\x7d\\x69\"\n\"\\xaa\\x1f\\xa7\\x6a\\x9a\\x63\\x5c\\x1a\\x3b\\x5a\\x54\\x44\\x63\\x74\\x93\\xa9\\x62\\x1e\\xa0\\x6d\\x7d\\x92\\x7b\\x1b\\x78\\x7b\\x7a\\x77\\x64\\xd0\\x67\\xd9\"\n\"\\xf7\\x1d\\xf7\\x04\\xf3\\xf7\\x15\\xd6\\x69\\xbe\\x3e\\xb3\\x1f\\xd0\\xc0\\xa6\\xb8\\xc7\\x1a\\xdc\\x49\\xc8\\x35\\x35\\x57\\x60\\x29\\x69\\x1e\\x9a\\x82\\x05\"\n\"\\xc8\\xb0\\xad\\xa2\\xc0\\x1b\\xca\\xb8\\x5c\\x49\\x67\\x7d\\x68\\x70\\x70\\x1f\\x6f\\x70\\x5f\\x77\\x6b\\x1b\\x0e\\xfb\\x4b\\xf7\\xb4\\x16\\xdd\\xf7\\x4b\\xee\"\n\"\\xcb\\x28\\xf8\\x45\\x58\\x06\\xfb\\xc3\\xfc\\x45\\x05\\x4b\\xf7\\xa4\\x07\\xf8\\x09\\x04\\xfb\\xc9\\xfb\\x6e\\x07\\x0e\\xfb\\x4b\\xf8\\x22\\xf8\\xe8\\x15\\xb8\"\n\"\\xea\\x7c\\x93\\x7b\\x77\\x80\\x84\\x74\\x8c\\x19\\xfb\\x4e\\x06\\xfb\\x07\\xfb\\x9a\\xc7\\x8a\\xb1\\x81\\xb8\\x73\\x19\\xd8\\x62\\xb8\\x47\\x41\\x1a\\x39\\x50\"\n\"\\x48\\x43\\x6d\\x6b\\x95\\x9f\\x6e\\x1e\\xa4\\x66\\x87\\x8d\\x7b\\x1b\\x78\\x7c\\x7b\\x77\\x61\\xc8\\x67\\xd3\\xf7\\x19\\xf7\\x05\\xf7\\x06\\xf7\\x18\\xd5\\x6a\"\n\"\\xd0\\x4f\\xbc\\x1f\\x64\\xab\\x65\\x9c\\x3a\\xa0\\xb7\\xf0\\x18\\x0e\\xfb\\x4b\\xf8\\x45\\xf9\\x41\\x15\\x31\\x5f\\x81\\x67\\x4f\\x1f\\xfb\\x0f\\x43\\x3b\\xfb\"\n\"\\x29\\xfb\\x2d\\x1a\\xfb\\x33\\xe7\\xfb\\x0b\\xf7\\x0f\\xf7\\x0b\\xec\\xf2\\xf7\\x12\\xf7\\x0b\\x39\\xdf\\xfb\\x07\\x5f\\x60\\x7e\\x6e\\x5f\\x1e\\xb2\\xf7\\x3a\"\n\"\\xf7\\x07\\xf7\\x06\\xf7\\x20\\x95\\x08\\xfb\\xc3\\xfb\\xe0\\x15\\xa7\\xbd\\xa4\\x93\\xaf\\x1b\\xbe\\xac\\x76\\x5b\\xa2\\x1f\\x9f\\x64\\x96\\x59\\x5c\\x1a\\x34\"\n\"\\x5f\\x53\\x47\\x34\\x53\\xe6\\xf7\\x23\\xaa\\x8d\\xa0\\x8f\\xa5\\x1e\\x0e\\xfb\\x4b\\xf8\\x54\\x20\\x0a\\xfb\\xfe\\x06\\x4d\\xfb\\x38\\x05\\xa9\\x06\\xb4\\xd8\"\n\"\\x9b\\x94\\xe9\\x88\\x08\\xf7\\x2f\\x06\\xfb\\x66\\xfc\\xdb\\xa5\\x85\\x8f\\x8a\\xa6\\x82\\x19\\x0e\\xfb\\x4b\\xf7\\x58\\xf7\\xe2\\x15\\x25\\x49\\x63\\x56\\x44\"\n\"\\x1a\\x30\\xdc\\x49\\xf7\\x05\\xf7\\x03\\xdc\\xd2\\xec\\xd2\\x66\\xc0\\xfb\\x03\\xe3\\x1e\\xe7\\xbe\\xb5\\xc0\\xc7\\x1a\\xe2\\x3b\\xcf\\x26\\x22\\x3d\\x47\\x2f\"\n\"\\x4a\\xaa\\x5e\\xf2\\x39\\x1e\\xa7\\x77\\x15\\xb7\\x64\\x91\\x86\\xa0\\x77\\x08\\xbf\\x5b\\xa0\\x65\\x61\\x1a\\x53\\x5c\\x62\\x49\\x3d\\x5d\\xbc\\xde\\xc5\\xa7\"\n\"\\xbb\\xcc\\xbe\\x1e\\xb5\\xd5\\x15\\x2c\\xcf\\x66\\xb9\\xbe\\x1a\\xc0\\xbd\\xb7\\xc7\\xcd\\xbb\\x58\\x46\\x52\\x73\\x66\\x47\\x5b\\x1e\\x0e\\xfb\\x4b\\xb9\\x7f\"\n\"\\x15\\x8a\\x9a\\x97\\x8b\\x92\\x1b\\xe3\\xe5\\xb2\\xcd\\xd0\\x1f\\xdd\\xdc\\xbe\\xf7\\x0e\\xf7\\x07\\x1a\\xcb\\x7a\\xcc\\x6c\\xbe\\x1e\\xc8\\x66\\x4d\\xae\\x42\"\n\"\\x1b\\xfb\\x0c\\x32\\x2a\\xfb\\x18\\xfb\\x0d\\xda\\x38\\xf7\\x06\\xb5\\xa7\\x93\\xa9\\xc5\\x1f\\x5a\\xfb\\x3d\\xfb\\x0d\\xfb\\x04\\xfb\\x1c\\x89\\x08\\xf7\\xd0\"\n\"\\xf7\\xd7\\x15\\x72\\x56\\x6f\\x83\\x6a\\x1b\\x3f\\x5d\\xd9\\xf7\\x14\\xe4\\xb7\\xc5\\xcd\\xdc\\xc2\\x32\\xfb\\x18\\x69\\x88\\x72\\x84\\x63\\x1f\\x0e\\xfc\\x29\"\n\"\\xf7\\x1e\\xef\\x15\\x22\\x0a\\xf7\\xff\\x04\\x49\\x0a\\xa5\\xaa\\xa9\\x72\\xa5\\x6d\\x1f\\x0e\\xfc\\x29\\xf7\\x30\\xf8\\x63\\x15\\x4f\\x0a\\xab\\xa3\\xa3\\xac\"\n\"\\xaa\\x73\\xa4\\x6c\\x1f\\x42\\xfc\\xdb\\x2a\\x0a\\xf8\\x9f\\xf8\\x9e\\x15\\xfc\\x85\\xfb\\x7e\\x05\\x54\\x07\\xf8\\x85\\xfb\\x7d\\x05\\xc9\\x07\\xfc\\x36\\xf7\"\n\"\\x5b\\xf8\\x36\\xf7\\x5b\\x05\\x0e\\xf8\\xad\\xf8\\x1b\\x15\\xfc\\xa2\\x54\\xf8\\xa2\\x06\\xfb\\x1f\\x04\\xfc\\xa2\\x54\\xf8\\xa2\\x06\\x0e\\xa5\\xf8\\x9e\\x35\"\n\"\\x0a\\xfb\\x83\\xf7\\x87\\xf7\\x44\\x15\\x8c\\xc9\\x9b\\xb8\\xb1\\xba\\xc8\\xce\\x8b\\x8b\\x9b\\xa3\\x08\\xa4\\xb0\\x97\\xb1\\xb3\\x1a\\xe3\\x44\\xc9\\x25\\x2d\"\n\"\\x40\\x4d\\x3d\\x60\\xa2\\x6b\\xab\\xa3\\x9e\\x9d\\xa2\\x96\\x87\\x96\\x82\\x97\\x1e\\x79\\xa3\\x8a\\x8e\\x99\\x1a\\xb0\\xb0\\xa8\\xbb\\xc7\\xaf\\x5e\\x3f\\x5e\"\n\"\\x84\\x76\\x5f\\x32\\x1e\\x66\\x40\\x85\\x71\\x89\\x27\\x08\\x9e\\x3e\\x15\\x6b\\x72\\x72\\x6c\\x6c\\xa4\\x72\\xaa\\xaa\\xa4\\xa4\\xaa\\xaa\\x72\\xa4\\x6d\\x1f\"\n\"\\x0e\\xf8\\xad\\xf7\\x89\\x15\\xfc\\xa2\\x54\\xf8\\xa2\\x06\\xfb\\x1b\\x04\\xfc\\xa2\\x54\\xf8\\xa2\\x06\\x5b\\xf8\\x6f\\x40\\x0a\\x43\\x72\\x90\\x6f\\x1b\\x52\"\n\"\\x5c\\x70\\x52\\x64\\x1f\\xb6\\x69\\x05\\xc0\\xb8\\x9b\\x95\\xb1\\x41\\x0a\\xcc\\xbb\\x4b\\x0a\\xb2\\xf7\\xf5\\x20\\x0a\\x7f\\x06\\xfb\\x73\\xfc\\xa7\\x61\\x29\"\n\"\\x84\\x84\\x4a\\x80\\x19\\x71\\xf7\\x56\\x4a\\x0a\\x90\\x9d\\x9d\\xb4\\x1e\\xa9\\xd3\\x05\\xf7\\x87\\x06\\xaa\\x43\\x05\\x9e\\x5c\\x8f\\x7f\\x7b\\x3c\\x0a\\x08\"\n\"\\xfb\\x9d\\xf7\\xfb\\x15\\xf7\\x01\\xfb\\x8a\\x05\\xfb\\x6b\\x06\\x0e\\x7b\\xa8\\x16\\xf7\\xda\\x06\\xc5\\xb7\\x93\\x9d\\xae\\x1f\\xcb\\xab\\xaf\\xc5\\xcf\\x1a\"\n\"\\xc4\\x71\\xb8\\x57\\xa9\\x1e\\x71\\x9b\\x73\\x93\\x59\\x95\\x08\\xe3\\x9a\\xc2\\xc2\\xd5\\x1a\\xcc\\x69\\xc2\\x4f\\xab\\x1e\\x9e\\x66\\x5d\\x93\\x3d\\x1b\\xfb\"\n\"\\xa5\\x38\\x0a\\xf7\\x55\\xf7\\xec\\x15\\xf7\\x8f\\x07\\x98\\x8b\\x8b\\xc9\\xc1\\xa2\\x88\\x82\\xa1\\x1e\\xb6\\x7a\\xa7\\x5d\\x56\\x1a\\x37\\x4e\\x57\\x27\\x1e\"\n\"\\x44\\x65\\x15\\xd1\\x06\\xf7\\x08\\xc8\\x58\\x2c\\x2b\\x4f\\x59\\xfb\\x07\\x4d\\x81\\x8d\\x99\\x1f\\x0e\\xb2\\xf8\\x15\\x16\\xf7\\xd3\\xa5\\x06\\x3c\\x90\\x6c\"\n\"\\xa1\\x56\\xe3\\xfb\\x22\\xf7\\x79\\x18\\xf7\\x0c\\xf7\\x36\\xcc\\xe3\\xb0\\xa2\\xde\\x8f\\x19\\xa5\\xfb\\x8f\\x71\\x99\\x07\\xae\\x9a\\x81\\x75\\x7d\\x80\\x78\"\n\"\\x64\\x59\\x1f\\x2d\\xfb\\x0f\\x3d\\xf7\\x0e\\x05\\x6c\\xbe\\x83\\x9a\\x99\\x1a\\xa2\\x9e\\x98\\xac\\x1e\\xa0\\xa5\\xfb\\xd9\\x71\\x06\\xdd\\x86\\xab\\x76\\xc1\"\n\"\\x32\\xf7\\x1c\\xfb\\x67\\x18\\xfb\\x20\\xfb\\x48\\x4a\\x34\\x6a\\x76\\x3c\\x84\\x19\\x71\\xf7\\x8c\\xa5\\x7d\\x07\\x6a\\x7b\\x95\\xa1\\x99\\x8b\\x8b\\xbe\\xd0\"\n\"\\x1f\\xf0\\xf7\\x1e\\xe6\\xfb\\x1d\\x05\\xa4\\x64\\x99\\x6f\\x7c\\x1a\\x75\\x77\\x7f\\x66\\x1e\\x7b\\x06\\x0e\\x44\\x91\\x16\\xf8\\xee\\x06\\xfb\\xad\\xf9\\x44\"\n\"\\x05\\xfb\\x8e\\xfd\\x11\\x15\\xf7\\x69\\xf8\\x5e\\xf7\\x51\\xfc\\x5e\\x05\\x0e\\x43\\xab\\x16\\xf8\\xa8\\x06\\xc0\\xf7\\x41\\x05\\x70\\x06\\x26\\x65\\x5f\\x6c\"\n\"\\xfb\\x03\\x1b\\xfb\\x16\\x06\\x68\\x8a\\x84\\x94\\xb6\\x1a\\xf7\\x81\\xf7\\x22\\x07\\xe0\\x8c\\xa0\\x78\\x8e\\x3c\\x08\\xa4\\xf7\\x82\\x72\\x06\\x8a\\x3c\\x73\"\n\"\\x75\\x37\\x8c\\x08\\xfb\\x22\\xf7\\x9a\\xf7\\x39\\x3f\\x0a\\xfc\\x96\\x34\\x0a\\xdb\\xf7\\x82\\x16\\xf7\\xb8\\xa5\\x06\\x42\\x8c\\x71\\xa7\\x8d\\xd5\\x08\\xc5\"\n\"\\xa3\\x8e\\x93\\xb1\\x1f\\xf7\\x08\\xa6\\xd4\\xd6\\xe9\\x1a\\xee\\x40\\xd8\\xfb\\x0c\\xa5\\x1e\\x68\\x92\\x6b\\x8e\\x5c\\x8c\\x8a\\xd1\\xa6\\xa6\\xd2\\x8c\\x08\"\n\"\\xa5\\xfb\\xb8\\x71\\x07\\xd2\\x8a\\xa6\\x70\\x8a\\x45\\x5c\\x8a\\x6b\\x88\\x68\\x84\\x08\\xfb\\x0c\\x71\\x40\\x3e\\x28\\x1a\\x2d\\xd4\\x40\\xf7\\x08\\x70\\x1e\"\n\"\\x83\\xb1\\xa3\\x88\\xc5\\x1b\\x8d\\x41\\x71\\x6f\\x42\\x8a\\x08\\xec\\xf7\\x21\\x15\\xfb\\x1b\\x93\\x49\\xc4\\xf7\\x03\\x1a\\xc7\\xa1\\xb5\\xbc\\xaa\\x1e\\xae\"\n\"\\xa1\\xac\\x94\\xc9\\x90\\x08\\xed\\x16\\xf7\\x1b\\x83\\xcd\\x52\\xfb\\x03\\x1a\\x4f\\x75\\x61\\x5a\\x6c\\x1e\\x68\\x76\\x6a\\x82\\x4d\\x85\\x08\\x0e\\x3b\\xf7\"\n\"\\x6d\\xf9\\x0c\\x15\\xf7\\x76\\x3f\\x0a\\xfc\\xd3\\x23\\x0a\\xf7\\xc1\\xa5\\x81\\x06\\x3a\\x90\\x77\\xa2\\x8e\\xe3\\x08\\x0e\\xb2\\xf7\\x7c\\xf8\\x00\\x15\\xf7\"\n\"\\x3b\\x07\\x2d\\x0a\\x21\\x0a\\xf7\\x48\\xf7\\xc4\\xfb\\x48\\x2e\\x0a\\xfb\\xb0\\x24\\x0a\\xfb\\x3b\\x07\\x0e\\xfb\\xf2\\xf7\\xd0\\xa5\\x15\\x36\\x0a\\xf8\\x19\"\n\"\\x07\\x2d\\x0a\\x06\\x0e\\x57\\xf9\\x03\\xf7\\xde\\x15\\x78\\x90\\x81\\x8e\\x88\\x8c\\x76\\x92\\x7d\\x91\\x83\\x8d\\x7e\\xf7\\x27\\x7c\\xbe\\x5c\\xc9\\x08\\xba\"\n\"\\x67\\x61\\xa4\\x60\\x1b\\x4d\\x5f\\x5a\\x47\\x2d\\xdb\\x35\\xf7\\x24\\x4f\\x1f\\x8c\\x5c\\x05\\xfb\\x32\\x51\\x26\\x2f\\x67\\x6b\\x9d\\xa7\\x7c\\x1e\\x81\\x9f\"\n\"\\x83\\xaf\\xa7\\x1a\\x9e\\x8e\\xad\\x90\\xb8\\x1e\\x96\\xea\\x8b\\x8e\\x9f\\x1a\\xc1\\x63\\xb3\\x54\\x65\\x71\\x7b\\x64\\x71\\x1e\\x7e\\x78\\x87\\x82\\x78\\x59\"\n\"\\x08\\xa6\\x06\\xc0\\xa8\\x96\\x97\\xa0\\x1b\\xa5\\x9e\\x79\\x72\\x82\\x8a\\x7e\\x89\\x7d\\x1f\\x7d\\x20\\x89\\x76\\x66\\x1a\\x28\\xcd\\x4a\\xf0\\xf6\\xd5\\xc0\"\n\"\\xf3\\xb2\\x1e\\x9f\\xbf\\x93\\xba\\x8c\\xc3\\xa9\\x7e\\xa4\\x80\\x9f\\x83\\x08\\xfb\\x2d\\xf7\\x07\\x15\\xfb\\x05\\xb6\\x3e\\xdb\\xd7\\x1a\\xb4\\xa4\\xa7\\xb0\"\n\"\\xb2\\xab\\x6c\\x51\\xa2\\x1e\\x9a\\x66\\x92\\x65\\x97\\x23\\x08\\x0e\\xb2\\xf7\\x78\\xf8\\xa7\\x15\\x88\\xe0\\xa0\\xa6\\xd1\\x8f\\x08\\x8e\\xa5\\xfb\\xb0\\x23\"\n\"\\x0a\\xf7\\xb0\\x21\\x0a\\xf7\\x23\\x07\\xb3\\xac\\xbe\\x58\\x99\\x7b\\xe4\\x22\\x19\\xbc\\x51\\x99\\x76\\x7b\\x1a\\x7a\\x7d\\x83\\x6c\\x1e\\x6a\\x71\\xf7\\xcf\"\n\"\\xa5\\x06\\x4f\\x90\\x6a\\xa1\\x4b\\xd9\\xfb\\x72\\xf7\\x94\\x18\\xb6\\xb6\\xa2\\xa4\\xa3\\xa4\\xa3\\xa5\\x19\\xf7\\x16\\xf7\\x1d\\x91\\x8e\\xe0\\x8c\\x08\\xa5\"\n\"\\xfb\\xa3\\x71\\x07\\xb7\\x8a\\x91\\x8b\\x95\\x87\\x08\\x97\\x87\\x93\\x82\\x82\\x1a\\x73\\xfb\\x1d\\xfb\\x2a\\xfb\\x0e\\xfb\\x02\\x1e\\x0e\\x8e\\xf7\\xcd\\xf8\"\n\"\\x89\\x15\\xf7\\x2d\\xfb\\xfb\\x05\\x9f\\x5c\\x8e\\x80\\x7a\\x3c\\x0a\\xfb\\x7f\\xf8\\xb6\\x18\\xfb\\x79\\xfc\\xb6\\x62\\x2c\\x84\\x83\\x4f\\x7e\\x19\\x71\\xf7\"\n\"\\x50\\x4a\\x0a\\x91\\x9d\\x9c\\xb4\\x1e\\x0e\\xf7\\x62\\xf8\\x3c\\x8c\\x15\\xf7\\xa2\\xf8\\xb0\\x05\\xfc\\x23\\x2f\\x0a\\xdf\\xa0\\xa6\\xd1\\x90\\x08\\x8e\\xa5\"\n\"\\xfb\\x42\\x06\\xfb\\x91\\xfc\\x8b\\xfb\\x89\\xf8\\x8b\\x05\\xfb\\x4f\\x23\\x0a\\xf7\\x76\\x21\\x0a\\xf8\\x23\\x07\\x0e\\xb2\\xf7\\x96\\xa5\\x15\\x86\\x4d\\x0a\"\n\"\\xf8\\x1a\\x07\\xf8\\x37\\xfc\\xa8\\x05\\xb8\\xf8\\xa7\\x06\\x88\\xdf\\x9f\\xa6\\xd0\\x90\\x08\\x90\\xa5\\xfb\\x74\\x24\\x0a\\xfc\\x07\\x07\\xfc\\x22\\xf8\\x95\"\n\"\\x05\\xfb\\x33\\x71\\x8f\\x06\\xd1\\x87\\xa0\\x70\\x88\\x37\\x08\\xfc\\x1a\\x07\\x8f\\x37\\x75\\x6e\\x45\\x88\\x08\\x86\\x71\\xf7\\x79\\x06\\x0e\\xb2\\xf8\\x12\"\n\"\\xf9\\x42\\x28\\x0a\\xe0\\xa4\\x16\\xf7\\xb0\\x21\\x0a\\xf8\\x0e\\x07\\xcd\\x8d\\x97\\x9c\\x9a\\x1e\\x9c\\x9c\\x9c\\x8d\\xf7\\x22\\x1b\\xf7\\x1a\\x90\\x87\\xfb\"\n\"\\x00\\x1f\\xfc\\x0e\\x2e\\x0a\\xfd\\x64\\x34\\x0a\\xc5\\xf8\\x8d\\xf8\\x5d\\x2b\\x0a\\xfb\\x0f\\xf8\\x5f\\x28\\x0a\\xfb\\x13\\xf7\\xe5\\xa5\\x15\\x7c\\x06\\x37\"\n\"\\x90\\x77\\xa2\\x8e\\xe3\\x08\\xf7\\x41\\x07\\x83\\xae\\xb4\\x87\\xac\\x1b\\xf7\\x28\\xe0\\xcf\\xf7\\x0c\\xd4\\x65\\xc6\\x47\\xa8\\x1f\\x9d\\x64\\x6c\\x8e\\xfb\"\n\"\\x05\\x1b\\xfb\\x8a\\x23\\x0a\\xf7\\xc9\\x06\\xfb\\x08\\xf8\\xf8\\x15\\x9e\\x92\\x8d\\xd6\\xac\\xa1\\x87\\x83\\x9e\\x1e\\xb8\\x77\\xa5\\x5c\\x4f\\x1a\\x59\\x79\"\n\"\\x5f\\x6c\\x72\\x1e\\x78\\x74\\x6d\\x82\\x5f\\x1b\\x72\\x79\\x8e\\x94\\x65\\x1f\\x0e\\x30\\xf7\\x3b\\xf9\\x0c\\x15\\xf7\\x3d\\x06\\xf7\\x0a\\x8a\\xa9\\x75\\x9b\"\n\"\\x28\\x08\\xa5\\x06\\x81\\xf7\\x37\\x05\\xfc\\x82\\x06\\xf7\\x6e\\xfb\\xf5\\xfb\\x7f\\xfb\\xd4\\x05\\xf8\\xa6\\x06\\xc1\\xf7\\x48\\x05\\x71\\x06\\x6d\\x3c\\x69\"\n\"\\x78\\xfb\\x06\\x8c\\x08\\xfb\\x9f\\x06\\xf7\\x67\\xf7\\xb2\\x05\\x0e\\x43\\xf8\\x73\\xa5\\x15\\x77\\x4c\\x0a\\xf8\\x7a\\xd5\\x07\\xe9\\x8c\\xae\\x6e\\x93\\x36\"\n\"\\x08\\xa4\\x06\\x80\\xf7\\x32\\x05\\xfc\\xbc\\x06\\x80\\xfb\\x32\\x05\\xa5\\x06\\x92\\xe1\\xad\\xa5\\xf3\\x8c\\x08\\xcc\\xfc\\x7a\\x06\\x8e\\x36\\x76\\x70\\x45\"\n\"\\x87\\x08\\x77\\x71\\xf7\\xd2\\x06\\x0e\\x92\\xf8\\x20\\xf7\\xb7\\x15\\xf7\\x26\\xf7\\x84\\xbd\\xe1\\xa6\\xa0\\xd6\\x94\\x19\\xa5\\xfb\\x79\\x71\\x96\\x07\\xb3\"\n\"\\x9a\\x81\\x72\\x7b\\x7e\\x6c\\x76\\x69\\x1f\\xfb\\x09\\xfb\\x4c\\xfb\\x06\\xf7\\x4c\\x05\\x6f\\xb8\\x81\\xa1\\x9b\\x1a\\xa0\\x9e\\x97\\xae\\x1e\\x9e\\xa5\\xfb\"\n\"\\xc9\\x71\\x06\\xda\\x82\\xa5\\x77\\xbe\\x34\\xf7\\x26\\xfb\\x84\\x18\\xfb\\x29\\x37\\x0a\\x0e\\xfb\\x88\\xf7\\xc0\\xf8\\x3c\\x15\\x83\\xb5\\x8b\\x8b\\x9d\\x1b\"\n\"\\xae\\xa0\\x99\\xa4\\xae\\x5e\\xa2\\x47\\xfb\\x22\\xfb\\x0d\\xfb\\x20\\xfb\\x38\\xfb\\x0f\\xd5\\x2e\\xec\\x9c\\xc9\\x8d\\x8d\\xa4\\x1f\\x8c\\x95\\x94\\x8b\\x90\"\n\"\\x1b\\xae\\x9d\\x79\\x69\\x60\\x6f\\x69\\x67\\x82\\x8b\\x8b\\x94\\x72\\x1f\\x84\\x8d\\x05\\x91\\x78\\x83\\x8c\\x7d\\x1b\\x68\\x76\\x7a\\x6e\\x69\\xb0\\x6e\\xb7\"\n\"\\xe5\\xd6\\xe0\\xef\\xb8\\x7a\\xb4\\x6e\\xa5\\x1f\\x9f\\x75\\x75\\x92\\x65\\x1b\\x7a\\x82\\x8b\\x89\\x6d\\x1f\\x89\\x64\\x7b\\x8a\\x89\\x1b\\x4c\\x5a\\xca\\xdc\"\n\"\\xf1\\xd4\\xe5\\xde\\x97\\x96\\x8a\\x85\\xa6\\x1f\\x0e\\xe0\\xf7\\xda\\x16\\x79\\xf7\\x2f\\x05\\x3d\\xb7\\x59\\xe4\\xe9\\x1a\\xbf\\x9a\\xc6\\xa5\\xba\\x1e\\xcc\"\n\"\\xaf\\xc7\\xb0\\xcf\\x1b\\xcf\\xc7\\x66\\x4a\\xaf\\x1f\\xa5\\x5c\\x9a\\x50\\x57\\x1a\\x2d\\x59\\x32\\x3d\\x5f\\x1e\\x79\\xfb\\x2f\\x05\\xf7\\xb8\\xf7\\x2d\\x73\"\n\"\\x06\\x5e\\x83\\x77\\x79\\x62\\x1b\\xfb\\x26\\x06\\x8e\\xb1\\xae\\x98\\xa1\\x95\\xa2\\x9a\\x19\\xd8\\xbc\\xb8\\xdc\\xe1\\x1a\\xce\\x6e\\xd4\\x5b\\xc3\\x1e\\xd1\"\n\"\\x4e\\x37\\xb1\\x2c\\x1b\\x2c\\x37\\x65\\x45\\x4e\\x1f\\x5b\\x53\\x6e\\x42\\x48\\x1a\\x35\\xb8\\x3a\\xd8\\x5a\\x1e\\xa2\\x7c\\xa1\\x81\\xae\\x7e\\x8e\\x65\\x18\"\n\"\\xfb\\x26\\x06\\x62\\x77\\x9d\\xb8\\x83\\x1f\\x73\\xfb\\x2d\\x06\\x0e\\x65\\xf8\\xc4\\x20\\x0a\\xfc\\x76\\x06\\x81\\xfb\\x3c\\x05\\xa5\\x06\\x97\\xd3\\x98\\x95\"\n\"\\xe3\\x8d\\x08\\xf7\\x75\\x06\\xe1\\x89\\x99\\x81\\x97\\x43\\x08\\xa5\\x06\\x8c\\xfb\\xd9\\x15\\x72\\x38\\x75\\x7f\\xfb\\x12\\x8a\\x08\\xfb\\x40\\x06\\xfb\\x05\"\n\"\\x75\\x99\\xdd\\x72\\x1f\\x71\\x06\\xb1\\xfb\\x48\\x05\\xf8\\x76\\x06\\xb2\\xf7\\x48\\x05\\xfb\\x2d\\xf7\\xa9\\x2b\\x0a\\x0e\\xf7\\x04\\xf8\\x52\\xf7\\xa3\\x15\"\n\"\\xdb\\x8a\\xc2\\x94\\xb5\\xa0\\x08\\xcf\\xab\\xb1\\xc9\\xda\\x1a\\x8a\\xdf\\x05\\xd5\\x97\\xa3\\xb3\\x93\\x1e\\xa2\\x07\\xfb\\x08\\x82\\x62\\x5a\\x84\\xfb\\x1e\"\n\"\\x86\\xfb\\x00\\x84\\x76\\x60\\x6e\\x74\\x7c\\x69\\x84\\x51\\x8c\\x08\\xf7\\x70\\x07\\x8c\\xe6\\x9d\\xa2\\xd5\\x8d\\x08\\xa5\\xfb\\xaf\\x71\\x07\\xd5\\x89\\x9d\"\n\"\\x74\\x8c\\x30\\x08\\xfb\\x70\\x07\\x5a\\x8a\\x69\\x90\\x76\\x95\\x57\\xa8\\x82\\xa2\\x86\\xf7\\x05\\x84\\xf7\\x1e\\x63\\xbc\\xfb\\x09\\x94\\x08\\x74\\x07\\xb3\"\n\"\\x82\\x97\\x73\\x42\\x1a\\x8a\\x37\\x05\\x45\\xa9\\x52\\xc2\\x68\\x1e\\xb8\\x6f\\xc7\\x7e\\xe8\\x8c\\x08\\xfb\\x06\\x07\\x27\\x7b\\x74\\x42\\x85\\x1e\\x78\\x6f\"\n\"\\xf7\\xcd\\xa7\\x78\\x06\\x42\\x91\\x7b\\xa2\\xef\\x1a\\x0e\\x43\\xf8\\xfe\\x20\\x0a\\xfc\\x8a\\x06\\x7a\\xfb\\x44\\x05\\xa5\\x06\\x97\\xf7\\x01\\xa7\\xa4\\xf7\"\n\"\\x0a\\x8a\\x08\\xf7\\x4a\\x06\\xfc\\x39\\xfd\\x0a\\x05\\xf8\\xbf\\x06\\xb0\\xf7\\x3f\\x05\\x71\\x06\\x82\\x63\\x7a\\x6d\\x6e\\x71\\x6b\\x70\\x7a\\x87\\x3a\\x88\"\n\"\\x08\\xfb\\x7a\\x06\\x0e\\xfb\\xf2\\xf7\\xbf\\xfb\\x39\\x15\\xad\\x24\\x07\\x7b\\x84\\x91\\x9c\\x1f\\xf9\\x62\\x07\\xa3\\x8a\\x91\\x90\\xa1\\x1b\\xee\\xad\\xfb\"\n\"\\x69\\xfd\\xda\\x06\\x0e\\xf7\\x48\\xf7\\x76\\xf7\\x04\\x26\\x0a\\xf7\\x60\\xf7\\xd5\\x26\\x0a\\xf7\\x66\\xfb\\xd5\\x26\\x0a\\x0e\\xfb\\xf2\\xac\\xfb\\x39\\x15\"\n\"\\xf7\\x69\\xf9\\xda\\xfb\\x69\\x69\\xee\\x06\\xa1\\x90\\x86\\x73\\x1f\\xfd\\x5e\\x07\\x76\\x84\\x84\\x75\\x8c\\x1e\\x2a\\x06\\x0e\\x72\\xf7\\xfd\\x20\\x0a\\x54\"\n\"\\xfc\\xfd\\xfb\\xb7\\x53\\xf9\\x11\\xc3\\xfb\\xb7\\x06\\x0e\\xfb\\x4b\\x89\\xfb\\x62\\x15\\x5d\\xf8\\x8c\\xb9\\x07\\x0e\\xfb\\x4b\\xf8\\x74\\xfa\\x25\\x15\\x53\"\n\"\\xf8\\xf6\\xc3\\x07\\x0e\\x57\\xf8\\x84\\xf8\\x88\\x15\\x4e\\xfb\\x40\\x05\\xf7\\x0d\\x71\\x4e\\xcb\\x30\\x1b\\x5d\\x5a\\x78\\x6b\\x66\\x1f\\x52\\x5b\\x70\\x44\"\n\"\\x28\\x1a\\xfb\\x34\\xda\\x2a\\xf7\\x16\\xe3\\xcc\\xb8\\xe4\\xb4\\x1e\\x90\\x78\\x92\\x79\\x96\\x72\\x08\\x53\\xa5\\x9c\\x7b\\xab\\x1b\\xac\\xa2\\xa0\\xb5\\x98\"\n\"\\x1f\\x92\\xa2\\x8e\\xa1\\x8c\\xc3\\x08\\x71\\x06\\x58\\x89\\x78\\x66\\x72\\x1b\\x6a\\x6a\\xc0\\xd0\\x7f\\x1f\\xf7\\x05\\xf7\\xcf\\x05\\xfb\\x47\\xfb\\x97\\x15\"\n\"\\x74\\x4a\\x05\\x25\\x68\\x63\\x5a\\x59\\x1b\\x44\\x62\\xdd\\xf7\\x22\\xd5\\x99\\xc7\\xa5\\xb7\\x1f\\xa8\\x9d\\xa2\\x99\\xaa\\x1b\\xd2\\xb9\\x52\\xfb\\x06\\x9f\"\n\"\\x1f\\x0e\\xda\\x4d\\x15\\x88\\x35\\x86\\x65\\x81\\x67\\x08\\xdd\\x06\\x96\\x9d\\x90\\xb2\\xd2\\x1a\\xf7\\x1c\\x07\\x63\\xc0\\xb7\\x7c\\xc5\\x1b\\xf7\\x0c\\xdc\"\n\"\\xe3\\xf7\\x15\\xf6\\x56\\xd6\\xfb\\x02\\xba\\x1f\\xd7\\xb4\\xaf\\xb9\\xc4\\x1a\\xe4\\x32\\xd5\\x20\\xfb\\x00\\x3a\\x44\\x2c\\x1e\\xdb\\x95\\x15\\xd1\\xb4\\xbc\"\n\"\\xc7\\xca\\xb8\\x51\\x3b\\x55\\x70\\x53\\x70\\x87\\x87\\x8c\\x8e\\x7d\\x1e\\x8e\\x7b\\x86\\x8c\\x81\\x1b\\x73\\x78\\x7c\\x77\\x78\\x9c\\x7f\\xa5\\x92\\x91\\x8c\"\n\"\\x8c\\x93\\x1f\\x8e\\x96\\x97\\x8c\\x93\\x1b\\x98\\x92\\x89\\x85\\x91\\x1f\\xb8\\x62\\xa6\\x3f\\x38\\x1a\\x28\\x5f\\x50\\x41\\x58\\x5a\\xa2\\xb2\\x69\\x1e\\x0e\"\n\"\\xf8\\x1b\\xf8\\x88\\x15\\xfb\\x15\\xfb\\x81\\x67\\xf7\\x29\\x05\\xca\\x7c\\x65\\xb1\\x5a\\x1b\\x4f\\x61\\x48\\xfb\\x03\\x81\\x1f\\xa6\\x06\\xc7\\x92\\xa8\\xb2\"\n\"\\xb1\\x1b\\xa4\\xa4\\x7b\\x73\\x9b\\x1f\\x93\\x7e\\x94\\x74\\x91\\x70\\xa9\\xfb\\x0f\\x18\\xfb\\x6e\\xfc\\x23\\x05\\xf5\\x06\\xf7\\x22\\xf7\\x9d\\x9b\\x33\\x9a\"\n\"\\x40\\x8e\\x7d\\x92\\x78\\x19\\x52\\xa0\\xad\\x6c\\xb4\\x1b\\xaf\\xaf\\xa4\\xb3\\xa1\\x1f\\x9c\\xaa\\x94\\xb0\\x8e\\xbf\\x08\\x73\\x06\\x81\\x69\\x87\\x81\\x84\"\n\"\\x80\\x08\\x74\\x7d\\x73\\x7e\\x71\\x1b\\x5c\\x72\\xb5\\xf7\\x0f\\x6d\\x1f\\x78\\xd9\\xf7\\x5f\\xf8\\x09\\x05\\x0e\\xfb\\x51\\xf7\\x94\\xf8\\x50\\x15\\x57\\x7b\"\n\"\\x6c\\x7e\\x6e\\x77\\x08\\x49\\x5e\\x65\\x45\\x40\\x1a\\xfb\\x0b\\xea\\x28\\xf7\\x07\\xc8\\xc0\\xa3\\xbd\\xbb\\x1e\\xba\\xbc\\xa1\\xc2\\xce\\x1a\\xcc\\x75\\xc8\"\n\"\\x62\\xbc\\x1e\\x69\\xb4\\x74\\x9d\\x37\\xbd\\x08\\x31\\xc1\\x64\\xb0\\xac\\x1a\\xab\\xaa\\xa5\\xb3\\xab\\xa6\\x7f\\x71\\xa4\\x1e\\x54\\xc2\\x94\\x85\\xa6\\x1b\"\n\"\\xa6\\x9f\\x9d\\xa3\\xc2\\x34\\xb7\\x22\\x2d\\x52\\x66\\x4d\\x66\\x9b\\x6f\\xb7\\x62\\x1f\\xf7\\x12\\xfb\\x09\\x15\\xcf\\x4c\\xaa\\x45\\x35\\x1a\\x28\\x5c\\x49\"\n\"\\x45\\x45\\x5b\\xd9\\xf7\\x07\\xf7\\x00\\xb8\\xca\\xe6\\x9f\\x1e\\x0e\\xfb\\x88\\xf8\\x27\\xf7\\x11\\x15\\x4c\\x76\\x66\\x72\\x44\\x1b\\x5a\\x63\\x97\\xa3\\x70\"\n\"\\x1f\\x77\\x9d\\x83\\x9e\\xac\\x1a\\xc6\\xad\\xb1\\xc0\\x95\\x93\\x8a\\x89\\x95\\x1e\\x87\\x9a\\x95\\x8a\\x95\\x1b\\xa9\\xa1\\x99\\x9e\\x9a\\x7f\\x93\\x74\\x80\"\n\"\\x8b\\x8b\\x88\\x6e\\x1f\\x85\\x06\\x88\\x70\\x88\\x8b\\x83\\x1b\\x58\\x6a\\xae\\xc1\\xc7\\xb5\\xba\\xbf\\xaf\\xa2\\x7b\\x6b\\x96\\x1f\\x8d\\x84\\x05\\x67\\x97\"\n\"\\x9c\\x7b\\xa5\\x1b\\xa6\\xa0\\xa1\\xa7\\xc0\\x48\\xb2\\x2d\\x4b\\x5e\\x7d\\x6c\\x64\\x1f\\x66\\x6f\\x7b\\x6d\\x65\\x1a\\x6a\\x9a\\x6c\\xa4\\x79\\x1e\\x99\\x82\"\n\"\\x94\\x86\\xaa\\x7c\\x08\\x41\\x72\\x69\\x62\\x4f\\x1a\\x35\\xe3\\x4d\\xf7\\x10\\xf7\\x03\\xc9\\xb4\\xe3\\x9f\\x1e\\x0e\\xfb\\x36\\xf7\\xab\\x84\\x15\\xf7\\x10\"\n\"\\x9c\\xe2\\xf7\\x04\\xf7\\x21\\x1a\\xf7\\x1e\\x37\\xec\\xfb\\x13\\x95\\x1e\\xdb\\x07\\xbb\\x8c\\x93\\x8d\\xa2\\x1e\\x5c\\x9e\\x05\\x8d\\x74\\x8c\\x7d\\x57\\x1a\"\n\"\\x32\\x07\\xfb\\x0d\\x7d\\x31\\xfb\\x06\\xfb\\x1e\\x1a\\xfb\\x1f\\xe1\\x25\\xf7\\x11\\x81\\x1e\\x26\\x07\\x50\\x8a\\x7c\\x89\\x70\\x1e\\xba\\x80\\x89\\xac\\x8b\"\n\"\\x8e\\x8a\\xb7\\x19\\xa6\\x07\\x62\\xf7\\x28\\x15\\x6f\\x96\\x77\\x9b\\x7c\\xa2\\x08\\x6b\\xbc\\x78\\xd7\\xda\\x1a\\xf7\\x05\\xb6\\xd1\\xd2\\x8e\\x1e\\xb4\\x84\"\n\"\\x15\\xd2\\x70\\xb6\\x2e\\xfb\\x14\\x1a\\xfb\\x0b\\x62\\x48\\x42\\x87\\x1e\\x0e\\xfb\\xa4\\xf8\\x0d\\xf8\\x88\\x15\\xfb\\x03\\xfb\\xec\\x6d\\xf7\\x2f\\x05\\xf7\"\n\"\\x2c\\x6d\\x6b\\xbd\\x48\\x1b\\x6d\\x70\\x7e\\x73\\x7b\\x1f\\x75\\x6c\\x86\\x72\\x89\\x37\\x08\\x7e\\xa1\\x07\\x8d\\xa6\\x8d\\x9b\\x8f\\x98\\x08\\xac\\x96\\xa2\"\n\"\\x9e\\xa9\\x1b\\xa6\\x9e\\x7a\\x63\\x9e\\x1f\\xa3\\x56\\xa5\\x30\\x95\\x41\\x97\\x38\\x18\\x8a\\x86\\x89\\x86\\x89\\x86\\x82\\x6f\\x81\\x70\\x82\\x71\\x08\\x77\"\n\"\\x55\\x85\\x6e\\x68\\x1a\\x5b\\xa0\\x6d\\xab\\xb4\\xa6\\xbe\\xdb\\xab\\x86\\xb8\\x7f\\xd9\\x1e\\xf7\\x5f\\xf8\\x45\\x05\\x0e\\x3b\\xf7\\x0b\\x16\\xe3\\xf8\\x00\"\n\"\\x06\\xc2\\xaf\\xae\\xa3\\xb7\\x1b\\xc4\\xae\\x64\\x4b\\x1f\\xfc\\x4b\\x07\\x8c\\x66\\x91\\x62\\x98\\x5e\\x08\\xe8\\x06\\x7c\\xb9\\x84\\xa8\\xa4\\x1a\\xf8\\x7f\"\n\"\\x07\\xdf\\x4f\\xc7\\x38\\x50\\x62\\x70\\x40\\x54\\x1e\\x86\\xa9\\x86\\x99\\x82\\x98\\x08\\xa2\\x7a\\x6e\\x99\\x6d\\x1b\\x63\\x64\\x72\\x63\\x79\\x1f\\x80\\x73\"\n\"\\x87\\x76\\x66\\x1a\\xa3\\x06\\xc9\\x91\\x99\\xa8\\xa3\\x1b\\xa9\\xa1\\x65\\x54\\x1f\\x0e\\xfb\\xf6\\xf7\\x43\\xf8\\x95\\x15\\x62\\x78\\x3e\\x74\\x52\\x80\\x08\"\n\"\\x72\\x07\\x8d\\x9d\\x97\\x8c\\x94\\x1b\\xb3\\x94\\x7b\\x4a\\x1f\\xfb\\x85\\x07\\x56\\x90\\x75\\x9a\\x77\\x1e\\x75\\x9b\\xa5\\x7f\\xa8\\x1b\\xb1\\xaf\\x9f\\xaa\"\n\"\\xa1\\x1f\\x97\\x9d\\x91\\x9d\\x93\\xac\\x6f\\x8c\\x18\\x59\\x81\\x7d\\x78\\x72\\x1b\\x6a\\x7a\\xaa\\xc8\\x8c\\x1f\\x0e\\x3b\\xf7\\x8d\\xf8\\x90\\x15\\x5d\\x88\"\n\"\\x6c\\x81\\x66\\x72\\x08\\x4a\\x5e\\x69\\x47\\x34\\x1a\\xfb\\x27\\xf4\\xfb\\x07\\xf7\\x21\\x84\\x1e\\xfb\\x73\\xce\\xf7\\x73\\x07\\xf7\\x16\\x8e\\xf7\\x00\\xf7\"\n\"\\x0c\\xf7\\x24\\x1a\\xf7\\x16\\x33\\xf7\\x07\\x26\\x3f\\x5a\\x4c\\x2b\\x88\\x8b\\x87\\x8c\\x6d\\x1e\\x93\\xfb\\xa5\\x05\\x34\\x97\\x5a\\xe2\\xf7\\x20\\x1a\\xf7\"\n\"\\x01\\xad\\xcd\\xd0\\xa6\\x1e\\xe3\\xfb\\x48\\x15\\xdf\\x87\\x9e\\xba\\xb1\\x1b\\xc1\\xc2\\x26\\x27\\xfb\\x01\\x4f\\x3e\\x31\\x84\\x1f\\x0e\\xf7\\x59\\xf7\\xb6\"\n\"\\x15\\xf7\\x73\\x07\\x6c\\x79\\x58\\x7a\\x39\\x79\\x08\\x72\\x07\\x8d\\x9c\\x96\\x8c\\x94\\x1b\\xb3\\x94\\x7c\\x49\\x1f\\xfb\\xf9\\xd9\\xf7\\x8e\\x07\\xf7\\x25\"\n\"\\xfb\\x44\\x05\\xa2\\x6f\\x8b\\x8a\\x84\\x1a\\x7f\\x84\\x87\\x6b\\x89\\x1e\\x86\\x77\\xf7\\x81\\xa3\\x82\\x06\\x5c\\x8e\\x84\\x90\\x4b\\xda\\xfb\\x2f\\xf7\\x57\"\n\"\\x18\\xb7\\xb4\\x05\\xcc\\xd0\\x9d\\x98\\x9e\\x1b\\x93\\x93\\x87\\x82\\x96\\x1f\\x79\\xa1\\x91\\x89\\x9c\\x1b\\xac\\xa6\\xa3\\xa8\\xac\\x6c\\xa2\\x5f\\x72\\x76\"\n\"\\x85\\x7b\\x74\\x1f\\x68\\x75\\x3c\\x48\\x57\\x56\\x78\\x79\\x18\\x0e\\xd6\\xf8\\xce\\x15\\xc4\\x92\\xa8\\xac\\xb8\\x1b\\xac\\xa5\\x72\\x5e\\x9a\\x1f\\x92\\x76\"\n\"\\x94\\x6a\\x94\\x65\\xfb\\x7b\\xfc\\x86\\x18\\xe9\\x06\\xf7\\x3e\\xf7\\xfa\\xab\\xfb\\x55\\x9b\\x42\\x9d\\x64\\x19\\x60\\xa1\\xaa\\x74\\xb1\\x1b\\xcc\\xaf\\xc7\"\n\"\\xf7\\x01\\x8d\\x1f\\x76\\x06\\x57\\x83\\x74\\x6e\\x67\\x1b\\x6d\\x71\\x9e\\xae\\x7b\\x1f\\x7e\\xa5\\x84\\xa4\\x7d\\xd6\\x70\\xf7\\x15\\x18\\x8d\\x8a\\x8d\\x8a\"\n\"\\x93\\x1e\\x85\\xab\\x8a\\x90\\x86\\xa1\\x73\\xf7\\x03\\x7b\\xc2\\x75\\xbd\\x08\\xb5\\x78\\x66\\xa6\\x63\\x1b\\x4e\\x6b\\x58\\xfb\\x0b\\x80\\x1f\\x0e\\x20\\xf8\"\n\"\\x4e\\xf8\\x88\\x15\\x32\\x06\\x8c\\xfc\\x05\\x05\\x58\\x67\\x69\\x75\\x61\\x1b\\x51\\x69\\xb4\\xd1\\x1f\\xf7\\xdf\\x33\\xfc\\x74\\x07\\x76\\x87\\x72\\x84\\x6d\"\n\"\\x1e\\x7a\\x4d\\x8a\\x86\\x73\\x1a\\x60\\xa0\\x6e\\xa8\\xa8\\x9f\\xa9\\xb7\\xa0\\x88\\x99\\x7b\\xc4\\x1e\\x80\\xaf\\x8a\\x94\\xa8\\x1a\\x97\\x07\\x67\\xb5\\xa1\"\n\"\\x81\\xae\\x1b\\xbd\\xbe\\xaa\\xc9\\xc0\\x1f\\x93\\x6b\\x90\\x7f\\x95\\x7c\\x08\\x76\\x9a\\xa6\\x7e\\xa9\\x1b\\xc8\\xb6\\xb7\\xd8\\x99\\x1f\\x70\\x8c\\x05\\x65\"\n\"\\x87\\x76\\x6d\\x74\\x1b\\x6d\\x77\\xaf\\xc1\\x1f\\x0e\\xfb\\x36\\x82\\xf8\\x5f\\x15\\xc4\\x8a\\x8d\\x89\\xa3\\x4f\\xf7\\x35\\xfc\\x2d\\x18\\xa9\\x06\\x9a\\xb1\"\n\"\\x94\\xa2\\x92\\x99\\xa6\\xc2\\x18\\x94\\x9e\\xc6\\xf7\\x02\\x05\\xc7\\xf7\\x04\\xa3\\xc6\\xaf\\x1a\\xac\\x71\\xa6\\x6b\\x6e\\x73\\x72\\x6c\\x84\\x8b\\x8b\\x91\"\n\"\\x6c\\x1e\\x8d\\x82\\x05\\x92\\x6a\\x8d\\x7e\\x7d\\x1a\\x70\\x83\\x73\\x73\\x5f\\x1e\\x46\\xfb\\x1a\\xfb\\x2f\\xf8\\x1c\\x5e\\x7c\\x63\\x83\\x5a\\x89\\x19\\x0e\"\n\"\\xf7\\xa8\\xf8\\x95\\x15\\xfb\\x1d\\x23\\xfb\\x0a\\xfb\\x2e\\xfb\\x26\\xec\\xfb\\x00\\xf7\\x16\\xf7\\x1a\\xf4\\xf7\\x0d\\xf7\\x2f\\xf7\\x24\\x2c\\xf5\\xfb\\x16\"\n\"\\x1f\\x75\\x66\\x15\\xe3\\xc8\\x21\\xfb\\x2d\\xfb\\x0f\\x60\\x45\\x3f\\x65\\x64\\xa1\\xad\\x75\\x1f\\x6b\\xbc\\x78\\xd9\\xd9\\x1a\\xf7\\x0d\\xb7\\xd1\\xd7\\x1e\"\n\"\\x0e\\xa9\\xf7\\xf0\\x15\\xa9\\xbd\\x9d\\x97\\xbd\\x8c\\x08\\xb9\\x06\\x71\\xfb\\x72\\x87\\x6f\\x7e\\x76\\x69\\x6b\\x19\\x6c\\x6f\\x82\\x7c\\x74\\x1a\\x6c\\xa3\"\n\"\\x73\\xaa\\xaa\\xa3\\xa2\\xb6\\x98\\x1e\\x94\\xa5\\x99\\xf1\\x94\\xf0\\x97\\xf7\\x15\\x18\\xf7\\x01\\x06\\x7f\\x3a\\x82\\x23\\x50\\x1a\\xfb\\x04\\xb0\\x47\\xc9\"\n\"\\xb2\\xae\\xa6\\xba\\xa3\\x1e\\x99\\xa7\\x8f\\x9e\\x8e\\xbd\\x08\\x73\\x06\\x5b\\x86\\x78\\x72\\x6a\\x1b\\x77\\x76\\x99\\xa0\\x80\\x1f\\x82\\x9d\\x88\\x9b\\xac\"\n\"\\x1a\\xd9\\x90\\xe5\\x92\\xc3\\x1e\\xf7\\x12\\xe4\\xfb\\xf2\\x06\\x3a\\x90\\x57\\x5b\\x6d\\xfb\\x01\\x08\\x0e\\xfb\\x36\\xf7\\x9c\\xf9\\x42\\x15\\x64\\x63\\x7b\"\n\"\\x6c\\x66\\x1f\\x47\\x54\\x66\\x20\\xfb\\x21\\x1a\\xfb\\x17\\xac\\x23\\xc6\\x53\\x1e\\x65\\xb3\\xb8\\x77\\xb7\\x1b\\xb2\\xb2\\x9b\\xaa\\xb1\\x1f\\xcf\\xc2\\xb0\"\n\"\\xf5\\xf7\\x1c\\x1a\\xf7\\x1d\\x6b\\xf1\\x4f\\xc5\\x1e\\xb0\\x64\\x5d\\xa0\\x5f\\x1b\\xf7\\x0a\\xfc\\x0a\\x15\\x89\\xfb\\x06\\x7f\\x4a\\x6e\\x56\\x08\\x6c\\x79\"\n\"\\x6b\\x74\\x72\\x1b\\x71\\x6b\\xa2\\xaa\\x7a\\x1f\\x6e\\xc0\\x7f\\xcc\\x89\\xf7\\x06\\x08\\xc3\\x04\\x8d\\xf7\\x01\\x98\\xcd\\xa7\\xbf\\x08\\xaa\\x9c\\xab\\xa2\"\n\"\\xa5\\x1b\\xa4\\xab\\x74\\x6c\\x9d\\x1f\\xa7\\x57\\x98\\x49\\x8d\\xfb\\x01\\x08\\x0e\\xf7\\x2a\\xb9\\x15\\x65\\xa5\\xb4\\x76\\xbd\\x1b\\xf7\\x0b\\xf3\\xf7\\x16\"\n\"\\xf7\\x2a\\xf7\\x22\\x30\\xf3\\xfb\\x11\\x6a\\x75\\x86\\x7d\\x73\\x1f\\x65\\x76\\x69\\x6e\\x71\\x6b\\x08\\x6f\\x68\\x82\\x69\\x44\\x1a\\xfc\\x1c\\x07\\x61\\x89\"\n\"\\x74\\x83\\x68\\x1e\\xe9\\x06\\x90\\xad\\x8b\\x8d\\x8c\\xda\\x08\\x85\\xf8\\x3f\\x15\\x8a\\xa9\\x8f\\xac\\x92\\x99\\x08\\xae\\x9c\\xa4\\x9e\\xa7\\x1b\\xe9\\xdb\"\n\"\\xfb\\x00\\xfb\\x14\\xfb\\x00\\x53\\x42\\x39\\x62\\x61\\xa8\\xb3\\x78\\x1f\\x85\\x97\\x8a\\x92\\x8a\\xaa\\x08\\x0e\\x3b\\xf8\\xe0\\xf8\\x31\\x15\\xe2\\xfb\\x77\"\n\"\\x07\\x3c\\x55\\x82\\x77\\x5d\\x1f\\x2a\\x5f\\x54\\x3d\\x2e\\x1a\\x49\\xa4\\x4a\\xb9\\x57\\x1e\\x4f\\xbf\\xc4\\x71\\xda\\x1b\\xd0\\xc4\\xa0\\xb4\\xb9\\x1f\\xb8\"\n\"\\xb4\\xa6\\xc4\\xc1\\x1a\\xd7\\x51\\xd6\\x21\\xc8\\x1e\\x5c\\x16\\xe1\\x32\\x9e\\x66\\x38\\x1a\\x23\\x59\\x45\\x41\\x2f\\x3f\\xf0\\xf7\\x0f\\xeb\\xc9\\xca\\xe9\"\n\"\\x1e\\x0e\\xfb\\x88\\xaf\\xf7\\xc9\\x15\\xa7\\xd5\\xa4\\xa4\\xb3\\x88\\x08\\xd4\\x06\\x7c\\xfb\\x04\\x85\\x43\\x4b\\x1a\\x21\\xb0\\x4b\\xc9\\xb3\\xb3\\xa8\\xb4\"\n\"\\x9b\\x1e\\x97\\xa8\\x8f\\xa7\\x8d\\xba\\x08\\x72\\x06\\x52\\x83\\x7d\\x77\\x6c\\x1b\\x5f\\x69\\xb5\\xc1\\x9b\\x8d\\xab\\x8e\\xad\\x1f\\x8c\\x98\\x8d\\xa7\\x8d\"\n\"\\xaa\\x8e\\xb3\\x8b\\x93\\x8e\\xa2\\x08\\xf7\\x38\\xea\\xfb\\x77\\x06\\x32\\x90\\x4b\\x47\\x6f\\xfb\\x14\\x08\\x0e\\x20\\x92\\xf8\\x00\\x15\\xa9\\x06\\xb7\\x98\"\n\"\\xa1\\xa3\\xa7\\x1b\\xa8\\x93\\x76\\x44\\x8c\\x1f\\x8e\\xfb\\x36\\x8c\\x46\\xa3\\x51\\xb3\\x6b\\x19\\x75\\xa6\\xad\\x81\\xb7\\x1b\\xcd\\xc5\\xa3\\xb6\\xb0\\x1f\"\n\"\\xb2\\xba\\xa3\\xd5\\xd5\\x1a\\xd2\\x75\\xcb\\x64\\xb9\\x1e\\x6b\\xb0\\x6b\\x9f\\x48\\xa5\\x83\\x72\\x18\\xb3\\x75\\x9d\\x7d\\x9b\\x74\\x08\\xa7\\x65\\x9b\\x50\"\n\"\\x4a\\x1a\\x4f\\x7e\\x4e\\x73\\x59\\x1e\\x5f\\x76\\x6c\\x74\\x64\\x1b\\x52\\x62\\xc7\\xe1\\x8a\\x1f\\x88\\xf7\\x44\\x05\\xf7\\x08\\x8a\\x70\\xb9\\x4b\\x1b\\x6a\"\n\"\\x71\\x7e\\x70\\x78\\x1f\\x7a\\x74\\x85\\x7e\\x79\\x51\\x08\\x0e\\xa9\\xf9\\x33\\xf8\\x81\\x15\\xe5\\xfc\\x88\\x07\\x4b\\x91\\x48\\x4e\\x6f\\x34\\x08\\x9c\\x06\"\n\"\\xb9\\xb2\\xb0\\x97\\xd3\\x8c\\x08\\x2a\\x70\\x4d\\x24\\xfb\\x19\\x1a\\xfb\\x1e\\x3d\\x0a\\xf7\\x1e\\xf7\\x1a\\x4c\\xf3\\x29\\xa4\\x1f\\x2c\\x16\\xb0\\x80\\xa1\"\n\"\\x7f\\xa1\\x76\\x08\\xb6\\x63\\xa5\\x3b\\x30\\x44\\x0a\\x70\\x1b\\x6b\\x6c\\xa1\\xac\\x7c\\x1f\\x82\\x9e\\x88\\x9a\\x85\\xac\\x08\\xa3\\xcf\\x91\\xa9\\xbd\\x1a\"\n\"\\xd0\\x77\\xb5\\x69\\x69\\x77\\x61\\x46\\x59\\x91\\x6d\\xa3\\x47\\x1e\\x85\\x6a\\x88\\x7c\\x82\\x78\\x08\\x6a\\x7c\\x6c\\x75\\x6b\\x1b\\x70\\x45\\x0a\\xde\\xa2\"\n\"\\xd9\\xb0\\xb4\\x1e\\xa2\\xa5\\xa4\\x9a\\xb5\\x97\\x08\\x0e\\x8e\\xf8\\x40\\xf8\\x7b\\x15\\xb0\\x81\\xa1\\x7f\\xa1\\x77\\x08\\xb6\\x63\\xa5\\x3d\\x32\\x44\\x0a\"\n\"\\x71\\x1b\\x58\\x6b\\xb4\\xdc\\x7d\\x1f\\xa3\\xcf\\x91\\xa9\\xbd\\x1a\\xd0\\x77\\xb5\\x69\\x69\\x77\\x61\\x46\\x59\\x91\\x6d\\xa3\\x47\\x1e\\x3a\\x7d\\x6b\\x62\"\n\"\\x58\\x1b\\x71\\x45\\x0a\\xdc\\xa2\\xd7\\xb0\\xb4\\x1e\\xa2\\xa4\\xa4\\x99\\xb5\\x97\\x08\\xa5\\x07\\x55\\x8a\\x68\\x85\\x6c\\x7e\\x08\\x38\\x67\\x56\\x25\\xfb\"\n\"\\x10\\x1a\\xfb\\x1f\\x3d\\x0a\\xf7\\x1f\\xf7\\x0a\\x5a\\xee\\x3f\\xb3\\x1f\\x6a\\x9c\\x65\\x92\\x4f\\x8c\\x08\\x0e\\xfb\\x52\\xf7\\x41\\xf9\\x90\\x15\\x8c\\x82\"\n\"\\x83\\x8c\\x86\\x1b\\x5d\\x64\\x68\\x61\\x66\\xa0\\x75\\xbc\\x7d\\x1f\\x72\\x73\\x7f\\x6e\\x69\\x1a\\x64\\x9a\\x6d\\xb1\\x65\\x1e\\x6a\\x72\\x7a\\x7c\\x7a\\x77\"\n\"\\x08\\x67\\x61\\x75\\x4d\\x51\\x1a\\x3c\\xb3\\x42\\xc8\\x6e\\x1e\\x7b\\xab\\xb2\\x85\\xc8\\x1b\\x9c\\x8f\\x8b\\x8c\\xa2\\x1f\\x96\\x06\\xab\\x8d\\x05\\xb3\\x8d\"\n\"\\xa9\\x6e\\x64\\x1a\\x65\\x70\\x6f\\x66\\x84\\x80\\x8c\\x90\\x70\\x1e\\x8e\\x74\\x83\\x8c\\x81\\x1b\\x72\\x7a\\x7b\\x71\\x69\\xad\\x73\\xbc\\xbb\\xaf\\x9e\\xb7\"\n\"\\xab\\x1f\\xa8\\xb1\\x9b\\xb9\\xb9\\x1a\\xb8\\x7b\\xad\\x6a\\xa3\\x1e\\x9d\\x74\\x75\\x90\\x5d\\x1b\\x35\\x06\\x5f\\x6a\\x8f\\x93\\x79\\x1f\\x60\\x9e\\x6e\\xba\"\n\"\\xc0\\x1a\\xd1\\xb6\\xc9\\xde\\xba\\x1e\\x81\\xa8\\x9e\\x88\\xab\\x1b\\xda\\xbb\\xa0\\xae\\xa2\\x71\\x98\\x5f\\x63\\x69\\x81\\x6a\\x43\\x1f\\x61\\xaa\\x7d\\xa0\"\n\"\\xab\\x1a\\xab\\x9e\\xa8\\xb0\\xa7\\x1e\\xbd\\x8d\\xad\\x91\\xa6\\x99\\x08\\xae\\x9c\\xa0\\xa4\\xa2\\x1a\\x9e\\x7b\\x96\\x6f\\x66\\x61\\x74\\x52\\x4b\\x1e\\x6c\"\n\"\\x8c\\x75\\x9d\\xa6\\x1a\\xa1\\x9c\\x9a\\xaf\\x95\\x1e\\x0e\\x8e\\xf8\\x19\\xf8\\x88\\x15\\x4a\\xfc\\x60\\x06\\x49\\x9a\\x70\\xb3\\x84\\xe8\\x79\\xf7\\x3d\\x18\"\n\"\\x86\\xbd\\x86\\x9e\\x7b\\xa5\\x08\\xb0\\x74\\x62\\xa3\\x63\\x1b\\x79\\x7c\\x88\\x81\\x6c\\x1f\\x78\\x07\\xcc\\x80\\x95\\x80\\x94\\x44\\x99\\xfb\\x37\\x18\\x95\"\n\"\\xfb\\x0a\\xe2\\x2e\\xf7\\x09\\x7a\\x08\\xfb\\x6f\\xcc\\xf7\\x6f\\x07\\xf7\\x09\\x9c\\xe2\\xe8\\x95\\xf7\\x0a\\x99\\xf7\\x37\\x18\\x8d\\x98\\x8f\\xc0\\x9c\\x9c\"\n\"\\xc8\\x95\\x19\\x9e\\x07\\x95\\x6c\\x7c\\x8e\\x79\\x1b\\x67\\x64\\x77\\x6b\\x74\\x1f\\x78\\x70\\x83\\x74\\x86\\x55\\x79\\xfb\\x3d\\x18\\x84\\x2e\\x70\\x63\\x49\"\n\"\\x7c\\x08\\x0e\\xfb\\x51\\xf7\\x6b\\xf9\\x88\\x15\\x47\\x86\\x5e\\x65\\x56\\x1a\\x64\\xa2\\x78\\xce\\x7b\\x1e\\x2c\\xfb\\x12\\x66\\x27\\xfb\\x16\\x1a\\x29\\xa1\"\n\"\\x54\\xc5\\x5e\\x1e\\x71\\xad\\xac\\x7f\\xb5\\x1b\\x94\\x8c\\x8b\\x8d\\xac\\x1f\\x96\\x06\\x8d\\xa8\\x92\\x8b\\x95\\x1b\\xba\\xa8\\x73\\x64\\x64\\x6c\\x69\\x68\"\n\"\\x83\\x84\\x8c\\x91\\x76\\x1f\\x94\\x6a\\x82\\x8d\\x80\\x1b\\x6b\\x73\\x77\\x70\\x6b\\xaf\\x74\\xbe\\xec\\xd0\\xd4\\xf4\\xe8\\x4e\\xbd\\xfb\\x06\\x83\\x73\\x8b\"\n\"\\x8a\\x80\\x1f\\x78\\x06\\x43\\x5b\\xc9\\xe8\\xf7\\x0c\\xc7\\xf7\\x1e\\xdf\\xd6\\x1f\\xed\\x96\\xdd\\xbe\\xbe\\x1a\\x9e\\x7b\\x98\\x75\\x67\\x55\\x68\\x3a\\x30\"\n\"\\x1e\\x67\\x96\\x7a\\x9e\\xa8\\x1a\\xa6\\x9d\\xa0\\xae\\x99\\x1e\\x0e\\xfb\\x5f\\xf7\\x9f\\xf8\\xc0\\x15\\x88\\xca\\xab\\xa2\\xef\\x92\\x08\\xa3\\x07\\xfb\\x33\"\n\"\\x8f\\x54\\x6e\\x88\\x30\\x08\\xfb\\x46\\x07\\x8e\\x56\\x6b\\x73\\x2f\\x7e\\x08\\x73\\x07\\xb8\\x85\\x9a\\x87\\xa5\\x7f\\xa7\\x7d\\x91\\x80\\x8c\\x60\\x08\\xfb\"\n\"\\x69\\x07\\x8d\\x25\\xbd\\x6e\\xf7\\x3a\\x8f\\x08\\xa3\\x07\\x6e\\x8c\\x6b\\x90\\x75\\x94\\x64\\x9b\\x84\\x97\\x8a\\xbd\\x08\\xf7\\x69\\x07\\x89\\xd0\\x6b\\xa7\"\n\"\\x2e\\x9a\\xe6\\x9a\\xae\\xa9\\x8c\\xc9\\x08\\x0e\\xfc\\x77\\xcc\\x20\\x0a\\xfd\\xe6\\xd1\\xf9\\xe6\\x07\\x0e\\xfb\\x5f\\xf7\\x65\\x5b\\x15\\x8a\\x5a\\x84\\x7f\"\n\"\\x68\\x7c\\x76\\x81\\x68\\x85\\x6c\\x8a\\x08\\x73\\x07\\xf7\\x3a\\x87\\xbd\\xa8\\x8d\\xf1\\x08\\xf7\\x69\\x07\\x8c\\xb6\\x91\\x96\\xa7\\x99\\xa4\\x97\\x9b\\x8f\"\n\"\\xb8\\x91\\x08\\xa3\\x07\\x2f\\x98\\x6b\\xa3\\x8e\\xc0\\x08\\xf7\\x46\\x07\\x87\\xe6\\x55\\xa8\\xfb\\x33\\x87\\x08\\x73\\x07\\xef\\x84\\xab\\x74\\x88\\x4c\\x08\"\n\"\\xfb\\x40\\x07\\x4d\\xaf\\x6d\\xe5\\x7c\\x1e\\x2f\\x7c\\x6b\\x6f\\x89\\x46\\x08\\x0e\\xf8\\x7d\\xf7\\xd9\\x46\\x0a\\xa1\\x46\\x1f\\xa2\\x42\\x73\\x90\\x6f\\x1b\"\n\"\\x52\\x5c\\x6f\\x52\\x64\\x1f\\xb6\\x6a\\x05\\xc0\\xb8\\x9b\\x95\\xb1\\x1b\\xa1\\x8b\\x8b\\x70\\xe5\\x1f\\x72\\xdb\\x8e\\x8a\\xaa\\x1b\\xcc\\xbb\\x4b\\x0a\\xf6\"\n\"\\xf9\\x71\\xf7\\x69\\x15\\x5c\\xa1\\x79\\x9a\\x77\\xaa\\x08\\x79\\xa8\\x80\\xb0\\xac\\x1a\\xa8\\x93\\xad\\x98\\xa3\\x1e\\x99\\xa5\\x9c\\x9c\\xb4\\xab\\x08\\xc5\"\n\"\\x56\\x60\\x9f\\x42\\x1b\\x6e\\x7c\\x88\\x7f\\x6e\\x1f\\x7e\\x6f\\x7b\\x87\\x79\\x1b\\x7b\\x7d\\x8f\\x96\\x71\\x1f\\x99\\x6a\\x7e\\x8e\\x69\\x1b\\xfb\\x11\\x30\"\n\"\\x28\\xfb\\x1d\\xfb\\x06\\xb9\\xfb\\x0e\\xd9\\x2f\\x1f\\x64\\xac\\xae\\x76\\xac\\x1b\\x9d\\x95\\x8d\\x98\\xa9\\x1f\\x99\\xad\\xa0\\x90\\x9e\\x1b\\x9a\\x98\\x87\"\n\"\\x7b\\xb0\\x1f\\x81\\xa0\\x9a\\x88\\x9f\\x1b\\xb0\\xa0\\x95\\xab\\xab\\x1f\\xb9\\xb9\\x8d\\x8e\\xc8\\xf7\\x11\\x08\\xfb\\x3b\\xf8\\xe7\\x15\\x51\\x7b\\x70\\x7c\"\n\"\\x74\\x70\\x08\\x6d\\x6a\\x74\\x57\\x6b\\x1a\\x8a\\x8b\\x8b\\x8c\\x7b\\x1e\\xc4\\x93\\xa6\\x95\\xa6\\xa6\\x08\\xa9\\xa9\\x9f\\xb8\\xb4\\x1a\\x8e\\x8b\\x90\\x8a\"\n\"\\x93\\x1e\\x0e\\xce\\xba\\xf7\\xfd\\x15\\xe8\\x06\\x8a\\x7e\\x8b\\x85\\x83\\x1a\\x84\\x8b\\x84\\x8c\\x7d\\x1e\\x46\\x06\\x74\\x52\\x05\\xf1\\x06\\xfb\\x2b\\xb5\"\n\"\\xf7\\x17\\x25\\xf7\\x2e\\x1b\\xd9\\xd0\\xa4\\xc0\\xcf\\x1f\\xdb\\x07\\x4a\\x53\\x3f\\x67\\x37\\x1b\\xfb\\x0e\\xfb\\x04\\xdd\\xf7\\x06\\x6a\\x1f\\xf8\\x09\\x06\"\n\"\\xa2\\xc4\\x05\\xfc\\x2c\\x06\\x8a\\x98\\x8b\\x92\\x93\\x1a\\x94\\x8b\\x90\\x8c\\x98\\x1e\\xf8\\x43\\x06\\xa3\\xc4\\x05\\x40\\x06\\xfc\\x04\\x06\\xf7\\x08\\xaf\"\n\"\\xf7\\x01\\xdb\\xf7\\x0e\\x1b\\xe0\\xd4\\x68\\x49\\xc5\\x1f\\xa3\\xc4\\x05\\xcf\\x45\\x3c\\xac\\x31\\x1b\\xfb\\x2e\\xfb\\x18\\x25\\xfb\\x2b\\x62\\x1f\\x3c\\x06\"\n\"\\x0e\\x4c\\x95\\xf9\\x17\\x15\\x8e\\xa1\\x95\\x8c\\x9a\\x1b\\xd9\\xc4\\x5e\\x39\\xa2\\x1f\\x9c\\x51\\x95\\x3e\\x40\\x1a\\xfb\\x3c\\x07\\x8e\\x37\\x76\\x6f\\x45\"\n\"\\x87\\x08\\x86\\x71\\xf7\\xb3\\xa5\\x86\\x4c\\x0a\\xf7\\x40\\x07\\xf7\\x46\\xb8\\xf7\\x10\\xcc\\x99\\x90\\x87\\x76\\x9c\\x1e\\x6f\\xa2\\x99\\x83\\xa3\\x1b\\xb0\"\n\"\\xa2\\xa2\\xb0\\xb7\\x69\\xa7\\x54\\x41\\x4c\\x60\\x40\\x69\\x1f\\x74\\x58\\x85\\x6c\\x7d\\xfb\\x08\\x89\\xda\\x85\\xc4\\x80\\xb4\\x08\\xdf\\x74\\x37\\xc1\\x20\"\n\"\\x1b\\x70\\x79\\x89\\x82\\x6c\\x1f\\x0e\\xfc\\x48\\xa6\\x31\\x0a\\x0e\\x47\\x0a\\xf9\\x13\\x04\\xfc\\x85\\xfb\\x7e\\x05\\x54\\x07\\xf8\\x85\\xfb\\x7d\\x05\\xc9\"\n\"\\x07\\xfc\\x36\\xf7\\x5b\\xf8\\x36\\xf7\\x5b\\x05\\x0e\\xfc\\x98\\xfb\\x48\\x16\\xbc\\x06\\xf8\\x6b\\xf9\\x35\\x05\\x59\\x06\\x0e\\xa9\\xf7\\xf9\\xf7\\x77\\x15\"\n\"\\x44\\xc5\\xd1\\x62\\xca\\x1b\\xde\\xc4\\xc8\\xe5\\xe3\\x50\\xc7\\x35\\x48\\x4b\\x65\\x42\\x54\\x1f\\xd3\\x52\\x49\\xb2\\x4c\\x1b\\x36\\x4f\\x4c\\x33\\x34\\xc5\"\n\"\\x4e\\xde\\xc4\\xc4\\xa6\\xbd\\xb9\\x1f\\xcb\\xd3\\x15\\xc8\\xb6\\xc6\\xb0\\xc0\\x1b\\xc1\\xb1\\x62\\x52\\x50\\x68\\x65\\x55\\x55\\x69\\xa0\\xd7\\x45\\x1f\\x48\"\n\"\\x8d\\x15\\x4c\\x5a\\x50\\x67\\x56\\x1b\\x57\\x68\\xb3\\xc6\\xc4\\xb0\\xb2\\xc1\\xbe\\xb3\\x72\\x44\\xcd\\x1f\\x0e\\xfb\\x4b\\xf7\\x08\\xf8\\x3a\\x15\\x81\\x6b\"\n\"\\x05\\xf7\\x00\\x06\\x7f\\x33\\x82\\x35\\x81\\x23\\x7e\\xfb\\x28\\x82\\x5a\\x76\\x69\\x08\\x79\\x7f\\x7a\\x80\\x79\\x1b\\x80\\x84\\x8f\\x92\\x8e\\x8c\\x8f\\x8d\"\n\"\\x8d\\x1f\\x95\\x9c\\x8d\\x90\\x97\\x1a\\x9f\\x7b\\x9a\\x75\\x6e\\x76\\x77\\x6e\\x65\\xad\\x6f\\xbb\\xca\\xbc\\xba\\xe5\\xa9\\x1e\\xac\\xeb\\x9b\\xe2\\xa5\\xf7\"\n\"\\x76\\x8d\\x9d\\x18\\xf7\\x0b\\x06\\x95\\xab\\x05\\xfb\\x11\\x06\\x9d\\xf7\\x20\\x8f\\xa3\\x97\\xa7\\x08\\xaa\\x98\\x9e\\x9b\\xa2\\x1b\\x98\\x92\\x86\\x83\\x87\"\n\"\\x8b\\x8b\\x84\\x7f\\x1f\\x88\\x84\\x89\\x85\\x84\\x1a\\x75\\x9c\\x7c\\xa3\\xa7\\xa0\\xa0\\xa7\\xaf\\x66\\xa6\\x58\\x2a\\x53\\x3a\\xfb\\x4c\\x69\\x1e\\x0e\\xd1\"\n\"\\xf8\\x4b\\x71\\x15\\x6c\\xb9\\x84\\xa1\\xbf\\x1a\\xa7\\x8f\\x9b\\x93\\x92\\x90\\x87\\x70\\xa6\\x1e\\x67\\xaf\\xa7\\x7d\\xb3\\x1b\\xcb\\xb3\\xb9\\xd4\\xdb\\x5e\"\n\"\\xc2\\x4b\\x72\\x6f\\x82\\x79\\x6f\\x1f\\x78\\x6d\\x88\\x8a\\x80\\x1b\\x81\\x86\\x90\\x95\\x96\\x8f\\x8f\\xa8\\x9f\\x1f\\xb5\\xa9\\xa2\\xb2\\xb5\\x1a\\xce\\x4f\"\n\"\\xbf\\x3f\\x3f\\x4f\\x57\\x48\\x61\\xa2\\x64\\xb5\\x6d\\x1e\\xa8\\x77\\x8f\\x87\\x80\\x1a\\x81\\x86\\x86\\x81\\x80\\x88\\x8c\\x9e\\x6d\\x1e\\x9d\\x6f\\x6f\\x94\"\n\"\\x72\\x1b\\x4b\\x5e\\x54\\x3b\\x42\\xb4\\x5d\\xcb\\xb2\\xa8\\x99\\xaf\\xaf\\x1f\\xa6\\xa5\\x90\\x8f\\x93\\x1b\\x93\\x8f\\x7b\\x6f\\x57\\x84\\x75\\x6b\\x5d\\x1f\"\n\"\\x0e\\xd1\\xf8\\x0a\\x67\\x15\\xf7\\x76\\xf7\\xb9\\xfb\\x76\\xf7\\xb9\\xfb\\x7c\\xfb\\xb9\\x05\\x0e\\xd1\\xf8\\x0a\\x6a\\x15\\xc1\\xd7\\x99\\x9f\\x96\\x9a\\xae\"\n\"\\xb8\\x19\\xc9\\xdb\\x8b\\x8b\\x95\\x98\\x08\\xc0\\xd3\\x9d\\xb7\\xc8\\x1a\\xdb\\x5d\\xc2\\x47\\x4f\\x66\\x6c\\x43\\x70\\x1e\\x77\\x84\\x88\\x87\\x82\\x1b\\x82\"\n\"\\x88\\x8f\\x9f\\x84\\x1f\\xd3\\x70\\x66\\xaa\\x4f\\x1b\\x47\\x5d\\x54\\x3b\\x48\\xa0\\x5d\\xd1\\x32\\x1f\\xd5\\x2b\\x90\\x85\\xac\\x5d\\x08\\x0e\\xd1\\xf8\\x48\"\n\"\\x67\\x15\\x6d\\xb6\\x84\\xa2\\xc4\\x1a\\xa1\\x8f\\x97\\x93\\x8d\\x8f\\x88\\x87\\x8e\\x1e\\x9e\\x6d\\x8b\\x8a\\x94\\x82\\x08\\x78\\x9c\\xa4\\x81\\xa7\\x1b\\xca\"\n\"\\xbb\\xbf\\xce\\xbb\\x76\\xbd\\x58\\xd2\\x1f\\xfb\\x4e\\xf7\\x96\\xfb\\x4e\\xfb\\x96\\x05\\x58\\x44\\x76\\x59\\x5b\\x1a\\x48\\xbb\\x57\\xcb\\xb1\\xa7\\x9c\\xad\"\n\"\\xa0\\x1e\\xa2\\x99\\x8c\\x8d\\x91\\x1b\\x92\\x8c\\x8f\\x7e\\x75\\x1a\\x52\\x84\\x75\\x6c\\x5f\\x1e\\x0e\\xf7\\xfb\\xfa\\x1d\\xf7\\xa8\\x15\\xfd\\x8e\\x06\\x93\"\n\"\\x94\\xc5\\xc9\\xd1\\xdd\\xad\\xb8\\x19\\x65\\xb1\\x25\\xfb\\x0c\\x4b\\x48\\x36\\x3e\\x19\\xdf\\x3f\\xcc\\x46\\xf1\\xfb\\x0b\\xb1\\xb1\\x18\\x68\\xb8\\x46\\xdd\"\n\"\\x51\\xc9\\x83\\x94\\x18\\xf9\\x8e\\x06\\x83\\x82\\x51\\x4d\\x46\\x3a\\x68\\x5d\\x19\\xb1\\x65\\xf1\\xf7\\x0b\\xcc\\xd0\\xdf\\xd7\\x19\\x36\\xd8\\x4b\\xce\\x25\"\n\"\\xf7\\x0c\\x65\\x65\\x18\\xad\\x5e\\xd1\\x39\\xc5\\x4d\\x08\\x0e\\xf7\\xc4\\xf7\\x2c\\xf7\\x70\\x15\\xf9\\xaa\\xc3\\xfd\\xaa\\x06\\x93\\x94\\xc2\\xc6\\xd4\\xe0\"\n\"\\xac\\xb7\\x19\\x65\\xb1\\x28\\xfb\\x08\\x34\\x2f\\x4a\\x54\\x19\\xcb\\x54\\xe3\\x2f\\xee\\xfb\\x08\\xb1\\xb1\\x18\\x6c\\xb4\\x45\\xdd\\x57\\xc4\\x83\\x93\\x18\"\n\"\\x0e\\x3b\\xde\\xf9\\x01\\x15\\xb3\\xa9\\xdf\\xd3\\xc3\\xbe\\x93\\x93\\x18\\x94\\x93\\x05\\xfd\\xaa\\xc3\\xf9\\xaa\\x07\\x94\\x83\\x93\\x83\\xc3\\x58\\xdf\\x43\"\n\"\\xb3\\x6d\\x19\\xb1\\xb1\\xfb\\x05\\xeb\\x2a\\xe8\\x56\\xc9\\x19\\x56\\x4d\\x2a\\x2e\\xfb\\x05\\x2b\\x08\\x0e\\xf7\\xc4\\xf9\\xdb\\xf7\\x70\\x15\\x83\\x82\\x83\"\n\"\\x83\\x57\\x52\\x45\\x39\\x6c\\x62\\x19\\xb1\\x65\\xee\\xf7\\x08\\xe3\\xe7\\xcb\\xc2\\x19\\x4b\\xc2\\x33\\xe7\\x28\\xf7\\x08\\x65\\x65\\x18\\xac\\x5f\\xd5\\x35\"\n\"\\xc1\\x51\\x93\\x82\\x18\\xfd\\xaa\\x53\\x06\\x0e\\x3b\\xf8\\xa9\\xf7\\x9f\\x15\\x63\\x6d\\x37\\x43\\x53\\x58\\x83\\x83\\x18\\x82\\x83\\x05\\xf9\\xaa\\x53\\xfd\"\n\"\\xaa\\x07\\x82\\x93\\x83\\x93\\x53\\xbe\\x37\\xd3\\x63\\xa9\\x19\\x65\\x65\\xf7\\x05\\x2b\\xec\\x2e\\xc0\\x4d\\x19\\xc0\\xc9\\xec\\xe8\\xf7\\x05\\xeb\\x08\\x0e\"\n\"\\xfb\\xaf\\xf7\\x5f\\xf9\\x42\\x15\\x35\\x48\\x48\\x36\\x35\\xcd\\x47\\xdf\\xdf\\xcd\\xce\\xe1\\xe1\\x4b\\xce\\x38\\x1f\\x8a\\x52\\x15\\xbd\\xb4\\x60\\x56\\x55\"\n\"\\x62\\x61\\x57\\x57\\x61\\xb6\\xbf\\xc2\\xb5\\xb5\\xc1\\x1f\\x0e\\x96\\xc2\\x15\\x54\\xf8\\xa0\\xc2\\x07\\xfb\\x7d\\xf8\\xf3\\x39\\x0a\\xfb\\xa4\\x9f\\x31\\x0a\"\n\"\\xe5\\xfb\\x66\\x33\\x0a\\x0e\\x47\\x0a\\xfc\\x85\\xf9\\x13\\x35\\x0a\\xf7\\x80\\xf7\\x9f\\x15\\xfb\\x6f\\xfb\\x70\\xb2\\x65\\xf7\\x6f\\xf7\\x6f\\xf7\\x6f\\xfb\"\n\"\\x6f\\xb2\\xb1\\xfb\\x6f\\xf7\\x70\\xf7\\x6f\\xf7\\x6f\\x64\\xb2\\xfb\\x6f\\xfb\\x70\\xfb\\x6f\\xf7\\x70\\x64\\x64\\x05\\x0e\\xa9\\xf9\\x13\\xf8\\x31\\x15\\xfb\"\n\"\\x10\\x8e\\x5f\\x77\\x35\\x2c\\x81\\x98\\x85\\x93\\x7c\\x9a\\x08\\xc0\\x53\\x5b\\xa2\\x4f\\x1b\\x2d\\x46\\x4c\\x34\\x35\\xd0\\x4c\\xe9\\xc7\\xbb\\xa1\\xc1\\xc3\"\n\"\\x1f\\x9a\\x9a\\x91\\x93\\x95\\x99\\x08\\x37\\xd3\\xc3\\x6e\\xe7\\x1b\\xad\\x06\\x82\\xbf\\x3d\\x88\\x46\\xab\\x4a\\xd0\\x19\\xcc\\xcf\\xd1\\xab\\xd8\\x88\\x08\"\n\"\\xfb\\xab\\x2a\\x15\\x46\\x50\\x5b\\x6e\\x53\\x1b\\x4b\\x5c\\xb4\\xc3\\xc4\\xba\\xb4\\xcb\\xc3\\xbd\\x6e\\x47\\xc4\\x1f\\x0e\\xfb\\x51\\xf6\\xf9\\x36\\x15\\xa2\"\n\"\\xb8\\xab\\x94\\xae\\x1b\\xf1\\xc5\\x2c\\xfb\\x38\\x6e\\x89\\x73\\x86\\x5b\\x1f\\xbd\\x4b\\x67\\x9b\\x58\\x1b\\x5a\\x62\\x79\\x64\\x67\\x1f\\x5f\\x5d\\x72\\x4c\"\n\"\\x4d\\x1a\\xfb\\x00\\xde\\x35\\xf3\\xd0\\xc6\\xab\\xc9\\xb5\\x1e\\xb9\\xcf\\xac\\xf7\\x1a\\xf7\\x09\\x1a\\xf7\\x08\\x69\\xe7\\x47\\xd1\\x1e\\xbc\\x5b\\x56\\xa2\"\n\"\\x4b\\x1b\\x63\\x6a\\x84\\x76\\x53\\x1f\\xf7\\xc0\\xfc\\x31\\x15\\x7b\\xfb\\x03\\x81\\x60\\x71\\x58\\x08\\x56\\x71\\x60\\x6a\\x5f\\x1b\\x54\\x6a\\xbf\\xe1\\xf7\"\n\"\\x06\\xce\\xe9\\xdc\\xb1\\xa4\\x7e\\x61\\xb5\\x1f\\x0e\\xfb\\x73\\xf7\\x7d\\xf8\\x9a\\x15\\x25\\x3a\\x3b\\x27\\x25\\xdb\\x3a\\xef\\xf0\\xda\\xdb\\xf1\\xef\\x3c\"\n\"\\xdc\\x29\\x1f\\x0e\\xf7\\xa5\\xf7\\x12\\x15\\x69\\x6f\\x70\\x68\\x69\\xa6\\x6f\\xae\\xac\\xa7\\xa7\\xad\\xad\\x6f\\xa7\\x6a\\x1f\\xf8\\x23\\x04\\x69\\x6f\\x70\"\n\"\\x68\\x69\\xa6\\x6f\\xae\\xac\\xa7\\xa7\\xad\\xad\\x6f\\xa7\\x6a\\x1f\\xfb\\x9b\\xfb\\x7b\\x15\\x54\\xf8\\xa2\\xc2\\x07\\x0e\\xf7\\x4f\\xf7\\x22\\x15\\x43\\xfb\"\n\"\\x23\\xb9\\x73\\xe0\\xf7\\x3b\\x05\\xf7\\xba\\xc2\\xfb\\x9f\\x06\\xd2\\xf7\\x1f\\x05\\xf7\\x58\\xc2\\xfb\\x3d\\x06\\xcf\\xf7\\x1a\\x5c\\xa3\\x3b\\xfb\\x32\\x05\"\n\"\\xfb\\xbd\\x54\\xf7\\xa2\\x06\\x45\\xfb\\x1f\\x05\\xfb\\x5c\\x54\\x06\\x0e\\xf8\\xae\\xf7\\xba\\x15\\xfc\\xa0\\x54\\xf8\\xa0\\x06\\x2a\\x04\\xfc\\xa0\\x54\\xf8\"\n\"\\xa0\\x06\\xf7\\xfb\\x04\\xfc\\xa0\\x54\\xf8\\xa0\\x06\\x0e\\xf8\\x7d\\xf7\\x8f\\x3a\\x0a\\x6f\\x53\\x32\\x0a\\xa7\\xc4\\xaa\\x1f\\x65\\xf7\\x53\\x3a\\x0a\\x70\"\n\"\\x52\\x32\\x0a\\xa8\\xc4\\xaa\\x1f\\x0e\\xf7\\xd1\\xf7\\x3c\\xef\\x15\\x22\\x0a\\xf7\\xe1\\x16\\x22\\x0a\\xf7\\xe1\\x16\\x22\\x0a\\x0e\\x3b\\xf7\\xe4\\xfa\\x86\"\n\"\\x15\\x53\\xfe\\xfe\\xc3\\x06\\x0e\\xf7\\xd1\\x4f\\xf7\\x70\\x15\\xfa\\xea\\xc3\\xfe\\xea\\x06\\x0e\\x72\\xf8\\xee\\xcf\\x15\\xf8\\xc5\\x54\\xfc\\x8d\\xfb\\xfe\"\n\"\\xdf\\x07\\xfb\\x3e\\xfb\\x04\\xf7\\x3e\\xfb\\x04\\x05\\xdf\\x07\\x0e\\xf7\\x20\\xf8\\x6c\\xf7\\xd3\\x15\\xfb\\xac\\xf7\\xf7\\x05\\x7f\\x74\\x86\\x75\\x73\\x1a\"\n\"\\x76\\x92\\x7b\\xa3\\x6e\\x1e\\xd7\\x2c\\x4d\\xfb\\x07\\x05\\x76\\x64\\x81\\x6f\\x76\\x1a\\x75\\x95\\x72\\xa2\\x66\\x1e\\xa7\\x5d\\x8b\\x8a\\x7e\\x1a\\x78\\x7d\"\n\"\\x80\\x72\\x1e\\x78\\x48\\xe5\\x06\\xb8\\xa9\\x8f\\x92\\x99\\x1f\\x9f\\x96\\x96\\xa4\\xad\\x1a\\xb7\\x81\\x9f\\x50\\xdc\\x1e\\x65\\xbd\\x7e\\xa9\\xab\\x1a\\xa0\"\n\"\\x8f\\x97\\xa0\\xb2\\x1e\\xf7\\xda\\xfc\\x2e\\x05\\x97\\xa2\\x90\\x9f\\xa0\\x1a\\xa3\\x82\\x9d\\x6f\\xaf\\x1e\\x61\\xc0\\x05\\x64\\xbd\\x7f\\xa4\\xad\\x1a\\x9e\"\n\"\\x92\\xa8\\x94\\xa2\\x1e\\xbb\\xf7\\x08\\x05\\xa3\\x06\\xa3\\x96\\x81\\x6f\\x90\\x1f\\x94\\xac\\x8f\\xa8\\xaa\\x1a\\xc4\\x79\\xa1\\x5b\\x1e\\x41\\x06\\x60\\x7d\"\n\"\\x97\\xaf\\x1f\\x9b\\x07\\x6b\\x6a\\x7c\\x67\\x5f\\x1a\\x6d\\x94\\x71\\x99\\x7d\\x1e\\x80\\x97\\x9a\\x87\\xad\\x1b\\xb7\\x06\\x0e\\x8e\\x95\\xc9\\x15\\x9d\\x78\"\n\"\\xa6\\x97\\x05\\x90\\x98\\x98\\x8e\\x94\\x1b\\x97\\x93\\x88\\x7f\\xa2\\x1f\\xf7\\x36\\x32\\x05\\x83\\x9c\\x98\\x86\\x95\\x1b\\x9e\\xac\\x9c\\xb3\\xc4\\x1f\\xbb\"\n\"\\xae\\x05\\xc4\\xb3\\xa8\\xbb\\xc3\\x1a\\xa3\\x87\\x9e\\x80\\x9e\\x1e\\x35\\xf7\\x35\\x05\\x77\\xaf\\x81\\xa9\\xa0\\x1a\\x9b\\x93\\x9c\\x9c\\x9e\\x1e\\xe7\\xf6\"\n\"\\x05\\xcb\\xfb\\x0f\\x47\\xa0\\x3b\\x1b\\xfb\\x1d\\x28\\x34\\xfb\\x0b\\x4e\\xa8\\x52\\xbb\\x6c\\x1f\\xa9\\x77\\xab\\x83\\xc6\\x88\\x8d\\xa5\\x18\\x5f\\x8e\\x74\"\n\"\\x91\\x74\\x98\\x08\\x60\\xa4\\x71\\xb9\\xbe\\x1a\\xd5\\xcb\\xbf\\xe5\\xc5\\xb5\\x7f\\x59\\xf7\\x07\\x1e\\x4a\\x3f\\x05\\x76\\x72\\x82\\x74\\x6e\\x1a\\x72\\x92\"\n\"\\x73\\x9a\\x70\\x1e\\xde\\xfb\\x2c\\x05\\x9a\\x6f\\x93\\x72\\x73\\x1a\\x70\\x81\\x75\\x78\\x7b\\x1e\\x7a\\x76\\x68\\x7f\\x6f\\x1b\\x7b\\x80\\x8e\\x98\\x74\\x1f\"\n\"\\xfb\\x27\\xd9\\x05\\x94\\x7b\\x80\\x8e\\x7f\\x1b\\x7e\\x7f\\x87\\x81\\x7c\\x1f\\x0e\\xf7\\x04\\xd4\\xac\\x15\\x9e\\x7b\\x05\\x99\\xa2\\x96\\x8f\\x98\\x1b\\x9a\"\n\"\\x9a\\x83\\x77\\xa4\\x1f\\x92\\x85\\x94\\x84\\x98\\x81\\xc0\\xa9\\xc4\\xbe\\xba\\xc5\\x08\\xb6\\xc4\\x98\\xb9\\xec\\x1a\\x8c\\xd2\\x05\\xb7\\x84\\xd4\\x7f\\xdc\"\n\"\\x1e\\xcc\\xb5\\x05\\x94\\x99\\x95\\x8e\\x95\\x1b\\x9b\\x97\\x85\\x79\\x9f\\x1f\\xdf\\x3f\\xfb\\x54\\xfb\\x19\\x98\\x75\\x05\\x94\\x06\\x9c\\x98\\x83\\x7b\\x94\"\n\"\\x1f\\x97\\x75\\x99\\x52\\x93\\x4b\\x9e\\xfb\\x44\\x97\\x6d\\xcd\\x6b\\xf7\\x02\\xe3\\x18\\x7a\\xa2\\x05\\x83\\x77\\x82\\x88\\x82\\x1b\\x78\\x82\\x99\\xaa\\x87\"\n\"\\x1f\\x6f\\xf7\\x53\\x77\\xc9\\x56\\xd0\\xf7\\x49\\xf7\\x15\\x18\\xfb\\x2f\\xf7\\x1a\\x05\\x95\\x7e\\x84\\x8f\\x83\\x1b\\x81\\x84\\x88\\x7d\\x78\\x1f\\xfb\\x13\"\n\"\\x2f\\x05\\xd8\\x65\\x5b\\xaa\\x39\\x1b\\xfb\\x0e\\x31\\x37\\xfb\\x07\\x69\\x94\\x6b\\x9c\\x72\\x1f\\x99\\x74\\x9a\\x80\\xb0\\x79\\xbb\\x73\\x18\\xa7\\x7d\\x96\"\n\"\\x81\\x7f\\x1a\\x82\\x86\\x84\\x7d\\x80\\x1e\\xa4\\x78\\xaf\\xc1\\x05\\x92\\x96\\x8f\\x95\\x96\\x1a\\xa1\\x7c\\x9e\\x6e\\x99\\x1e\\x55\\xa7\\x5e\\xa1\\x7a\\x96\"\n\"\\x81\\x95\\x19\\x7b\\x9c\\x82\\xa1\\xa3\\x1a\\xc9\\xc4\\xbe\\xd2\\xc2\\xb7\\x6f\\x5b\\xa1\\x1e\\x9a\\x69\\x98\\x33\\x40\\x1a\\x8c\\x51\\x87\\xfb\\x25\\x7d\\x53\"\n\"\\x5b\\x43\\x19\\x42\\xbe\\x05\\x91\\x83\\x85\\x8d\\x87\\x1b\\x86\\x86\\x88\\x84\\x82\\x1f\\x0e\\xf7\\xc4\\xf8\\x6b\\xf8\\xd2\\x15\\x2c\\x4b\\x67\\x6e\\x66\\x5e\"\n\"\\x08\\x55\\x4a\\x70\\x4b\\x4d\\x1a\\x64\\x92\\x72\\xa5\\x51\\x1e\\x66\\x5c\\x7d\\x77\\x7f\\x75\\x08\\x76\\x64\\x7f\\x60\\x65\\x1a\\x6c\\x96\\x6d\\x9e\\x73\\x1e\"\n\"\\x6f\\xa1\\xa6\\x7f\\xb1\\x1b\\xd4\\xb9\\xcc\\xf2\\xc5\\x7e\\xba\\x5a\\xf7\\x08\\x1f\\xf7\\x59\\xf7\\x2d\\xf5\\xe0\\xe7\\x1b\\xc4\\xab\\x66\\x49\\x4c\\x6f\\x38\"\n\"\\x5c\\x43\\x1f\\x3d\\x58\\x53\\x64\\x4e\\x1b\\x6a\\x70\\xa6\\xae\\x93\\x8d\\x98\\x8e\\x99\\x1f\\x9a\\x8a\\x05\\xa7\\xa2\\xa0\\xa5\\xa2\\x7b\\x9b\\x75\\x66\\x6e\"\n\"\\x5f\\x54\\x43\\xb9\\x5d\\xd2\\xd9\\xe4\\xc1\\xde\\xc5\\x1f\\xca\\xe5\\xa7\\xd1\\xd2\\x1a\\xe3\\x4f\\xc1\\x28\\x3a\\x45\\x68\\x35\\x2f\\x1e\\x66\\x69\\x6e\\x6a\"\n\"\\x3a\\x25\\x08\\x83\\xa9\\x87\\xa4\\xa7\\x1a\\xef\\xbd\\xda\\xf7\\x0d\\xe4\\x1e\\xfb\\x67\\xfc\\x61\\x15\\xba\\x30\\x9d\\x56\\x5c\\x1a\\x72\\x83\\x73\\x7f\\x7c\"\n\"\\x1e\\x80\\x82\\x80\\x87\\x77\\x1b\\x5d\\x71\\xaf\\xcc\\xc4\\x9c\\xb7\\xbd\\xcf\\x1f\\x0e\\xe0\\xf7\\x61\\xf8\\x7e\\x15\\xf7\\x24\\xfb\\x21\\xfb\\x24\\xfb\\x24\"\n\"\\xb2\\x65\\xf7\\x24\\xf7\\x24\\xf7\\x21\\xfb\\x24\\xb1\\xb1\\xfb\\x21\\xf7\\x24\\xf7\\x21\\xf7\\x21\\x65\\xb2\\xfb\\x21\\xfb\\x21\\xfb\\x24\\xf7\\x21\\x05\\xf7\"\n\"\\x27\\xf7\\x36\\x15\\xfb\\x54\\xfb\\x30\\xfb\\x2f\\xfb\\x53\\xfb\\x51\\xf7\\x30\\xfb\\x30\\xf7\\x50\\xf7\\x51\\xf7\\x31\\xf7\\x30\\xf7\\x50\\xf7\\x50\\xfb\\x30\"\n\"\\xf7\\x33\\xfb\\x4e\\x1f\\x51\\x04\\xf7\\x31\\xf7\\x16\\xfb\\x16\\xfb\\x31\\xfb\\x33\\xfb\\x16\\xfb\\x15\\xfb\\x34\\xfb\\x33\\xfb\\x16\\xf7\\x14\\xf7\\x32\\xf7\"\n\"\\x36\\xf7\\x15\\xf7\\x13\\xf7\\x37\\x1f\\x0e\\xe0\\xf7\\xfc\\xf8\\xde\\x15\\xfb\\x6a\\xfb\\x64\\x54\\xf7\\x64\\xfb\\x6a\\xc3\\xf7\\x6a\\xf7\\x64\\xc2\\xfb\\x64\"\n\"\\xf7\\x6a\\x07\\x73\\xf2\\x15\\xfb\\x58\\xfb\\x2d\\xfb\\x2c\\xfb\\x56\\xfb\\x52\\xf7\\x2e\\xfb\\x2d\\xf7\\x54\\xf7\\x53\\xf7\\x2d\\xf7\\x2d\\xf7\\x54\\xf7\\x51\"\n\"\\xfb\\x2e\\xf7\\x2f\\xfb\\x4f\\x1f\\x8c\\x56\\x15\\xf7\\x2f\\xf7\\x15\\xfb\\x19\\xfb\\x34\\xfb\\x33\\xfb\\x16\\xfb\\x17\\xfb\\x33\\xfb\\x33\\xfb\\x16\\xf7\\x17\"\n\"\\xf7\\x35\\xf7\\x37\\xf7\\x16\\xf7\\x14\\xf7\\x38\\x1f\\x0e\\xf7\\x20\\xb2\\x98\\x15\\xb0\\x66\\xef\\xef\\x05\\x52\\xce\\xe0\\x6b\\xe3\\x1b\\xf7\\x5e\\xf7\\x37\"\n\"\\xf7\\x37\\xf7\\x5e\\xe4\\x6d\\xdb\\x50\\xd2\\x1f\\xe4\\xe4\\x66\\xb0\\x31\\x31\\x05\\xc6\\x46\\x3a\\xa9\\x33\\x1b\\xfb\\x5e\\xfb\\x37\\xfb\\x37\\xfb\\x5e\\x33\"\n\"\\xab\\x36\\xc4\\x4a\\x1f\\xb2\\xb2\\x15\\x5b\\xc6\\x72\\xce\\xd4\\x1a\\xf7\\x3f\\xf7\\x1f\\xf7\\x1e\\xf7\\x3f\\xd4\\xd2\\x71\\x5d\\xc2\\x1e\\xb0\\x66\\x15\\xba\"\n\"\\x55\\xa6\\x43\\x41\\x1a\\xfb\\x3f\\xfb\\x1f\\xfb\\x1e\\xfb\\x3f\\x42\\x43\\xa5\\xba\\x54\\x1e\\x0e\\xe0\\xf9\\x70\\x16\\xf7\\x44\\x07\\x8a\\xe4\\x79\\xc7\\x5f\"\n\"\\xc2\\x08\\xdd\\x4a\\x27\\xb8\\xfb\\x0a\\x1b\\xfb\\x5d\\xfb\\x25\\xfb\\x17\\xfb\\x4a\\x1f\\xfb\\x56\\xc4\\x07\\x8c\\xf7\\x5f\\x05\\xf7\\x20\\xf7\\x11\\xf6\\xf7\"\n\"\\x37\\xe5\\xdf\\x69\\x51\\xc0\\x1e\\xb9\\x5a\\x9b\\x5d\\x3c\\x1a\\xfb\\x4c\\x07\\x0e\\xe0\\xb3\\xf8\\x7d\\x15\\xfb\\x44\\x07\\x8c\\x32\\x9d\\x4f\\xb7\\x54\\x08\"\n\"\\x39\\xcc\\xef\\x5e\\xf7\\x0a\\x1b\\xf7\\x5d\\xf7\\x24\\xf7\\x17\\xf7\\x4a\\x8c\\x1f\\xf7\\x56\\x52\\xfb\\x5f\\x07\\xfb\\x20\\x8a\\xfb\\x11\\x20\\xfb\\x37\\x1b\"\n\"\\x31\\x37\\xad\\xc5\\x56\\x1f\\x5d\\xbc\\x7b\\xba\\xd9\\x1a\\xf7\\x4c\\x07\\x0e\\xa9\\x9f\\x16\\xf7\\xc6\\x06\\xd0\\xab\\x8b\\x8d\\x9c\\x1f\\xbf\\x8e\\xb2\\x96\"\n\"\\xa8\\x9d\\x08\\xce\\xb7\\xb5\\xd7\\xdc\\x1a\\xbc\\x7c\\xbb\\x6f\\xb3\\x1e\\x67\\xbe\\x5d\\xa9\\x4f\\x95\\x08\\x91\\x69\\x78\\x8c\\xfb\\x01\\x1b\\xfb\\xc6\\x53\"\n\"\\xf7\\xc8\\x06\\xc6\\xaa\\x8b\\x8a\\x9a\\x1f\\xba\\x87\\xaf\\x82\\xa2\\x7d\\x08\\xbd\\x6b\\xa9\\x52\\x4d\\x1a\\x63\\x7f\\x65\\x74\\x6d\\x1e\\x71\\x66\\x6a\\x78\"\n\"\\x5a\\x82\\x08\\x86\\x6a\\x79\\x8a\\x2a\\x1b\\xfb\\xc8\\x06\\x0e\\xa9\\x9f\\x46\\x15\\x53\\xf9\\x1c\\xc3\\x07\\xfd\\x1c\\xd0\\x15\\xf7\\xc6\\x06\\xd0\\xab\\x8b\"\n\"\\x8d\\x9c\\x1f\\xbf\\x8e\\xb2\\x96\\xa8\\x9d\\x08\\xce\\xb7\\xb5\\xd7\\xdc\\x1a\\xbc\\x7c\\xbb\\x6f\\xb3\\x1e\\x67\\xbe\\x5d\\xa9\\x4f\\x95\\x08\\x91\\x69\\x78\"\n\"\\x8c\\xfb\\x01\\x1b\\xfb\\xc6\\x53\\xf7\\xc8\\x06\\xc6\\xaa\\x8b\\x8a\\x9a\\x1f\\xba\\x87\\xaf\\x82\\xa2\\x7d\\x08\\xbd\\x6b\\xa9\\x52\\x4d\\x1a\\x63\\x7f\\x65\"\n\"\\x74\\x6d\\x1e\\x71\\x66\\x6a\\x78\\x5a\\x82\\x08\\x86\\x6a\\x79\\x8a\\x2a\\x1b\\xfb\\xc8\\x06\\x0e\\xa9\\xf8\\xae\\xf8\\x6a\\x15\\xab\\xd1\\x05\\x59\\x06\\x6b\"\n\"\\x45\\x05\\x23\\x06\\x46\\x6b\\x4e\\x0a\\x6d\\x50\\x0a\\x40\\xae\\x45\\xc6\\x5e\\x1e\\xb0\\x6f\\xb2\\x7f\\xcf\\x87\\x6a\\x44\\x18\\xbd\\x06\\xab\\xd1\\x05\\xf8\"\n\"\\x03\\xc3\\xfb\\xe9\\x06\\xf7\\x38\\xf7\\xfa\\x05\\xf7\\x45\\xc3\\x06\\xfc\\x1b\\xfc\\x31\\x15\\x52\\x8c\\x60\\x94\\x6f\\x9c\\x30\\x0a\\xdc\\x06\\x0e\\xa9\\xf9\"\n\"\\x46\\xf8\\x6a\\x27\\x0a\\xa9\\xb0\\x46\\x15\\x53\\xf9\\x1c\\xc3\\x07\\x90\\xf8\\xaf\\x27\\x0a\\xa9\\xf0\\xf7\\x9b\\x15\\x91\\xb2\\x9c\\xae\\xa6\\xa5\\xb9\\xb7\"\n\"\\xb3\\x93\\xf7\\x2d\\x8a\\x08\\xf7\\x07\\xc3\\xfb\\x05\\x06\\x47\\x6a\\x2c\\x0a\\xf7\\x05\\xc3\\xfb\\x07\\x06\\xfb\\x2d\\x8a\\x63\\x93\\x5d\\xb7\\x70\\xa5\\x7a\"\n\"\\xae\\x85\\xb2\\x08\\xf8\\x28\\xc3\\x06\\x0e\\xa9\\xf8\\x13\\xf8\\x32\\x15\\xf7\\x0e\\xc3\\x2d\\x06\\xaa\\xc8\\x5c\\xa3\\x60\\x36\\x20\\x8a\\x7d\\x8a\\x5f\\x7b\"\n\"\\x19\\x39\\x6d\\x4f\\x2f\\x2c\\x1a\\x40\\xac\\x48\\xc7\\x5c\\x1e\\x63\\x3b\\xb9\\x73\\xb2\\xd9\\x05\\x79\\xc2\\xa0\\x89\\xf7\\x19\\x1b\\xf7\\x05\\xc3\\xfb\\x07\"\n\"\\x06\\xfb\\x08\\x78\\x8c\\x99\\x5d\\x1f\\xd0\\xf7\\x1c\\x05\\xf7\\x77\\xc3\\xfb\\x5b\\x06\\x9d\\xf7\\x2b\\x15\\x3f\\xfb\\x2b\\x05\\xfb\\x27\\x06\\x9f\\xf3\\xcf\"\n\"\\xbb\\xf7\\x12\\x8a\\x08\\xfb\\x2b\\xfb\\xd2\\x15\\x69\\xa6\\x75\\xb1\\x84\\xb9\\x08\\xf7\\x0b\\x06\\x0e\\xe0\\xa5\\x16\\xf9\\x37\\x8a\\x8d\\xc5\\x05\\xfc\\xaa\"\n\"\\x06\\xf8\\xcd\\xf8\\xd3\\x5e\\xb3\\x05\\x0e\\xa9\\xf9\\x3d\\xf9\\x43\\x15\\xfd\\x19\\x06\\xf7\\xc3\\xfd\\x43\\x05\\xf7\\xa3\\xf9\\x10\\x15\\xfb\\x7e\\xfc\\x5e\"\n\"\\xfb\\x67\\xf8\\x5f\\x05\\x0e\\xf6\\xf8\\x8b\\xf7\\x32\\x15\\xee\\x9d\\x06\\x71\\x8d\\x80\\x92\\x72\\xa8\\x21\\xf7\\x13\\x18\\xcc\\x95\\xb1\\xaf\\xc0\\x1a\\xb4\"\n\"\\x76\\xaa\\x65\\x9c\\x1e\\x96\\x72\\x71\\x8f\\x54\\x1b\\xfb\\x32\\x79\\x06\\xb9\\x88\\x92\\x84\\x66\\x1a\\xfb\\x93\\x07\\x65\\x84\\x84\\x5d\\x88\\x1e\\x79\\xf7\"\n\"\\x43\\x9d\\x07\\x5d\\x8e\\x84\\x92\\xb1\\x1a\\xf7\\x01\\xa6\\x07\\x70\\xf7\\x33\\x15\\xa0\\x8d\\x8c\\xad\\xca\\xa8\\x74\\x57\\x53\\x6b\\x75\\x3b\\x87\\x86\\x8b\"\n\"\\x8c\\x84\\x1e\\xc5\\xf7\\xdc\\x29\\x0a\\xf7\\x17\\xf7\\x1d\\xf7\\x36\\x1f\\x0e\\xf6\\xf8\\xc2\\xf8\\x27\\x15\\x86\\xf7\\x1c\\x05\\x77\\x06\\x78\\x82\\x89\\x89\"\n\"\\x80\\x1b\\x86\\x85\\x8c\\x8f\\x82\\x1f\\x96\\x6c\\x73\\x90\\x6d\\x1b\\xfb\\x0d\\x36\\x37\\xfb\\x0c\\xfb\\x0a\\xdd\\x3c\\xf7\\x0e\\xcc\\xbc\\xa2\\xbf\\xbb\\x1f\"\n\"\\x7c\\x9c\\x05\\x5f\\x5b\\x68\\x7c\\x56\\x1b\\x35\\x56\\xcb\\xf3\\xf4\\xbe\\xcb\\xdf\\xcc\\xb6\\x67\\x46\\x9c\\x1f\\xfb\\x21\\xf7\\xb3\\x29\\x0a\\xf7\\x18\\xf7\"\n\"\\x1d\\xf7\\x35\\x1f\\x0e\\xf7\\x63\\xf9\\xeb\\x20\\x0a\\xfb\\x1a\\x06\\xfb\\x0a\\xfb\\xb7\\xfb\\x0b\\xf7\\xb7\\x05\\xfb\\x0c\\x75\\x06\\xb3\\x8c\\x8b\\x7a\\x1f\"\n\"\\xfb\\xc3\\x07\\x68\\x8a\\x85\\x86\\x61\\x1b\\x75\\xf7\\x1b\\xa1\\x07\\x68\\x7e\\x95\\xa8\\x8c\\x1f\\xf7\\xa1\\x07\\xf7\\x18\\xfb\\xde\\x05\\xa1\\x06\\xf7\\x1f\"\n\"\\xf7\\xee\\x05\\xfb\\xb6\\x07\\x70\\x89\\x81\\x84\\x63\\x1b\\x75\\xf7\\x3e\\xa1\\x07\\x62\\x8d\\x84\\x90\\x8a\\xa6\\x08\\xf7\\xc9\\x07\\x8a\\x98\\x94\\x90\\xa4\"\n\"\\x8a\\x08\\x9b\\x06\\xfc\\x94\\xa1\\x15\\xfb\\xd9\\xfb\\x02\\x9f\\x06\\x90\\xc8\\x99\\x95\\xdd\\x8e\\x08\\x91\\xfb\\xce\\x06\\x6f\\x8a\\x84\\x87\\x54\\x1b\\x75\"\n\"\\xf7\\x55\\xa1\\x07\\x53\\x85\\x8e\\xa6\\x8c\\x1f\\xf7\\xd0\\x8d\\x07\\xe2\\x8a\\x9b\\x80\\x8c\\x4d\\x08\\xa2\\x06\\x0e\\xf7\\x20\\xa4\\xfb\\x10\\x15\\xf7\\xb6\"\n\"\\x21\\x0a\\xf8\\xd4\\x07\\xc9\\x8f\\xa0\\x99\\x98\\x1e\\x9c\\x9d\\x97\\x8c\\xf7\\x21\\x1b\\xf7\\x23\\x97\\x8a\\x7a\\x9d\\x1f\\x99\\x7e\\x8f\\x76\\x4d\\x1a\\xfc\"\n\"\\xd4\\x25\\x0a\\x71\\xf7\\xb6\\x21\\x0a\\xf8\\xe3\\x07\\x3e\\x0a\\xfd\\x9e\\x24\\x0a\\xfc\\xe3\\x25\\x0a\\x06\\x0e\\xf7\\xff\\x68\\x15\\xf7\\x2c\\xfa\\x43\\x68\"\n\"\\x90\\xfb\\x13\\xfd\\xaa\\xfb\\x59\\xf8\\x21\\xfb\\x26\\x44\\x9b\\x68\\xea\\xba\\x05\\x0e\\xfc\\x45\\xf7\\x0c\\xf7\\xcb\\x15\\x6f\\x74\\x74\\x6f\\x6f\\xa1\\x74\"\n\"\\xa7\\xa7\\xa1\\xa2\\xa7\\xa7\\x75\\xa2\\x70\\x1f\\x0e\\xa9\\x9a\\xf8\\x03\\x15\\x4f\\xf8\\xf2\\xfb\\x9f\\xc6\\xf7\\xdb\\x07\\x0e\\x3b\\xf7\\xc4\\xf8\\x70\\x15\"\n\"\\xfb\\xad\\xfc\\x53\\xb9\\x6d\\xf7\\x7e\\xf8\\x07\\xf7\\x7e\\xfc\\x06\\xb9\\xab\\x05\\x0e\\x3b\\xf7\\xc3\\x8a\\x15\\xf7\\xa7\\xf8\\x53\\x5d\\xa9\\xfb\\x78\\xfc\"\n\"\\x06\\xfb\\x78\\xf8\\x05\\x5d\\x6b\\x05\\x0e\\xf7\\xfb\\xf7\\x85\\xf8\\x0b\\x15\\x9d\\x9f\\x98\\x9b\\x96\\x99\\x9e\\xa4\\x97\\x9a\\x90\\x92\\x60\\xad\\x18\\x44\"\n\"\\x30\\x27\\x22\\x3d\\x49\\xdb\\x47\\xec\\x24\\x43\\x0a\\xf8\\xcc\\x06\\x79\\x77\\x7f\\x7c\\x7f\\x7c\\x78\\x72\\x7f\\x7b\\x86\\x85\\xb6\\x69\\x18\\xd3\\xe7\\xec\"\n\"\\xf2\\xdb\\xcf\\x3d\\xcd\\x27\\xf4\\x44\\xe6\\x48\\x0a\\xfc\\xfc\\x54\\x15\\xf9\\x2c\\x06\\xb4\\x61\\xa3\\x74\\x99\\x80\\x7b\\x7d\\x79\\x7a\\x5e\\x5d\\x08\\xfd\"\n\"\\x2c\\x06\\x5e\\xb8\\x78\\x9e\\x7c\\x98\\x9a\\x97\\x92\\x92\\x9d\\x9d\\xab\\xaa\\x18\\x0e\\xf7\\xc4\\xfa\\x3f\\xf7\\xd4\\x15\\xc2\\xfd\\x4b\\x07\\x9d\\x9f\\x98\"\n\"\\x9b\\x96\\x99\\x9e\\xa4\\x97\\x9a\\x90\\x92\\x60\\xad\\x18\\x50\\x3d\\xfb\\x07\\xfb\\x0d\\x40\\x4c\\xda\\x48\\xed\\x23\\x43\\x0a\\xf9\\x4b\\xc2\\xfd\\x7a\\x06\"\n\"\\x88\\x8d\\x89\\x8e\\x89\\x8d\\x80\\x96\\x80\\x96\\x80\\x95\\x7a\\x9c\\x83\\x93\\x7c\\x98\\x9c\\x9a\\x95\\x94\\xc0\\xc0\\x08\\x0e\\x3b\\xf8\\x10\\xf9\\x7a\\x15\"\n\"\\xfd\\x7a\\xc2\\xf9\\x4b\\x07\\x9f\\x7a\\x9a\\x7e\\x9a\\x7f\\xae\\x70\\x18\\x98\\x81\\xad\\xb6\\x3e\\xc5\\xfb\\x10\\xf7\\x0a\\x4c\\xd5\\x19\\x48\\x3c\\x22\\x28\"\n\"\\x2f\\x43\\xad\\x60\\x18\\xb9\\xaf\\xab\\xa5\\x9f\\x9c\\x08\\xfd\\x4b\\xc2\\xf9\\x7a\\x07\\x8d\\x8e\\x8d\\x8d\\x8e\\x8d\\x98\\x98\\x18\\x91\\x92\\x92\\x91\\x92\"\n\"\\x92\\x9c\\x9c\\x92\\x93\\x98\\x9a\\x9c\\x78\\x8b\\x8a\\xc1\\x55\\x08\\x0e\\xf7\\xc4\\xb8\\xf7\\x3b\\x15\\x54\\xf9\\x4b\\x07\\x79\\x77\\x7f\\x7c\\x7f\\x7c\\x78\"\n\"\\x72\\x7f\\x7b\\x86\\x85\\xb6\\x69\\x18\\xd3\\xe8\\xe8\\xec\\xdf\\xd4\\x38\\xd2\\x2c\\xee\\x44\\xe7\\x48\\x0a\\xfd\\x4b\\x54\\x06\\xf9\\x7a\\x8c\\x92\\x84\\xac\"\n\"\\x6a\\x9c\\x7a\\x93\\x83\\x9a\\x7f\\x19\\x7b\\x7d\\x82\\x82\\x7c\\x7c\\x80\\x7f\\x80\\x81\\x81\\x80\\x89\\x8a\\x89\\x88\\x87\\x88\\x08\\x0e\\x3b\\xf7\\x7b\\xf7\"\n\"\\x3b\\x15\\xf9\\x7a\\x54\\xfd\\x4b\\x07\\x77\\x9c\\x7c\\x98\\x7c\\x97\\x68\\xa6\\x18\\x86\\x8f\\x88\\x8e\\x86\\x8e\\x69\\x60\\x18\\xda\\x50\\xf7\\x0e\\xfb\\x08\"\n\"\\xca\\x40\\xcd\\xd9\\xf7\\x01\\xf2\\xe4\\xd0\\x69\\xb6\\x18\\x5d\\x67\\x6b\\x71\\x77\\x7a\\x08\\xf9\\x4b\\x54\\xfd\\x7a\\x07\\x84\\x84\\x6a\\x6a\\x7a\\x7a\\x84\"\n\"\\x83\\x7e\\x7c\\x19\\x7a\\x9e\\x8b\\x8c\\x55\\xc1\\x08\\x0e\\xfb\\x51\\xf7\\x65\\x16\\xc7\\x8a\\xf7\\x59\\xf8\\x0b\\xfb\\x51\\xf8\\x02\\x05\\x4c\\x06\\xfb\\x58\"\n\"\\xfb\\xff\\x05\\xf7\\x72\\xfb\\xd3\\x15\\xfb\\x33\\xf7\\xd2\\xf7\\x38\\xf7\\xc7\\xf7\\x31\\xfb\\xca\\x05\\x0e\\xfb\\xf6\\xf7\\x92\\xf9\\x89\\x15\\xfb\\x79\\xfc\"\n\"\\x5a\\xf7\\x79\\xfc\\x5b\\xbf\\xa4\\xfb\\x6b\\xf8\\x42\\xf7\\x6b\\xf8\\x42\\x05\\x0e\\xf6\\xf7\\x8d\\xf8\\xa3\\x15\\xfc\\x1a\\xbe\\xf7\\x3c\\xe2\\x07\\xdf\\x8a\"\n\"\\x9d\\x7c\\x8f\\x3e\\x8d\\x58\\x8d\\x7d\\x91\\x81\\x08\\xbd\\x06\\x85\\x97\\x89\\x97\\x89\\xb2\\x89\\xdf\\x7f\\xa2\\x59\\x9d\\x08\\xb8\\x9e\\xa2\\xab\\xb7\\x1a\"\n\"\\xb1\\x7a\\xaa\\x6b\\x9e\\x1e\\x99\\x76\\x71\\x90\\x61\\x1b\\xfb\\x01\\x62\\x15\\xed\\x06\\xce\\xab\\x74\\x5c\\x5a\\x69\\x74\\x43\\x1f\\x30\\x06\\xef\\xf7\\xe3\"\n\"\\x15\\xfb\\x58\\xfb\\x2e\\x42\\x0a\\xf7\\x53\\xf7\\x2e\\xf7\\x2f\\xf7\\x52\\xf7\\x51\\xfb\\x2e\\xf7\\x31\\xfb\\x4e\\x1f\\x8a\\x65\\x15\\xf7\\x37\\xf7\\x1c\\xfb\"\n\"\\x20\\xfb\\x3c\\xfb\\x3d\\xfb\\x1c\\xfb\\x1e\\xfb\\x3b\\xfb\\x3b\\xfb\\x1c\\xf7\\x1e\\xf7\\x3d\\xf7\\x40\\xf7\\x1b\\xf7\\x1c\\xf7\\x40\\x1f\\x0e\\xf6\\xf8\\xa3\"\n\"\\xf7\\xbc\\x15\\x3e\\x81\\x5c\\x5f\\x42\\x1b\\x37\\x53\\xca\\xec\\xeb\\xc3\\xcc\\xe0\\xcc\\xba\\x68\\x50\\x97\\x1f\\xbc\\x06\\xda\\x84\\x43\\xc5\\x2f\\x1b\\xfb\"\n\"\\x07\\x3c\\x38\\xfb\\x0d\\xfb\\x0d\\xd8\\x39\\xf7\\x06\\xf0\\xd2\\xcc\\xee\\x93\\x1f\\xfb\\x46\\xf8\\x13\\x15\\xfb\\x57\\xfb\\x2f\\x42\\x0a\\xf7\\x52\\xf7\\x2f\"\n\"\\xf7\\x2f\\xf7\\x52\\xf7\\x51\\xfb\\x2e\\xf7\\x31\\xfb\\x4e\\x1f\\x8a\\x65\\x15\\xf7\\x37\\xf7\\x1c\\xfb\\x20\\xfb\\x3c\\xfb\\x3d\\xfb\\x1c\\xfb\\x1e\\xfb\\x3b\"\n\"\\xfb\\x3a\\xfb\\x1d\\xf7\\x1e\\xf7\\x3d\\xf7\\x40\\xf7\\x1c\\xf7\\x1c\\xf7\\x3f\\x1f\\x0e\\xf2\\xf8\\xad\\xf7\\xa9\\x15\\xf7\\x19\\xf7\\xee\\x05\\xfb\\xee\\xc2\"\n\"\\xf8\\x20\\x32\\x07\\xfb\\x08\\xfb\\xb7\\xfb\\x02\\xf7\\xb7\\x05\\x31\\xfc\\x20\\xc2\\xf7\\xee\\x06\\xf7\\x15\\xfb\\xee\\x05\\xfb\\xd8\\xf7\\xee\\x15\\xf7\\x02\"\n\"\\xbd\\xfb\\xb1\\x59\\xf7\\x04\\xfb\\xee\\xca\\x06\\x0e\\xa9\\xf7\\x44\\xf9\\x5b\\x15\\xf7\\xa0\\x06\\xf7\\x08\\x8a\\xa9\\x75\\x9b\\x26\\x08\\xa5\\x06\\x81\\xf7\"\n\"\\x39\\x05\\xfc\\xeb\\x06\\xf7\\x7d\\xfc\\x67\\xfb\\x86\\xfc\\x2c\\x05\\xf9\\x07\\x06\\xc1\\xf7\\x66\\x05\\x71\\x06\\x6d\\x3b\\x69\\x78\\xfb\\x06\\x8c\\x08\\xfb\"\n\"\\xdc\\x06\\xf7\\x5d\\xf7\\xf4\\x05\\x0e\\xfb\\xbf\\xb3\\xfb\\xb9\\x15\\xbf\\xf8\\x43\\x06\\xf7\\x62\\xcd\\xf7\\x92\\xe0\\xf7\\x0b\\x1e\\xc8\\xe5\\xd1\\xd3\\xc9\"\n\"\\xaf\\x7d\\x96\\x18\\x32\\x5a\\x54\\x62\\x59\\x4f\\x08\\xfb\\x0a\\xfb\\x20\\x45\\xfb\\x78\\xfb\\x84\\x1a\\x0e\\xfb\\xbf\\xb3\\x3c\\x15\\xbf\\xfa\\x80\\x57\\x06\"\n\"\\x0e\\xfb\\xbf\\xb3\\xfa\\x32\\x15\\xfc\\x61\\x07\\xfb\\x73\\xc6\\xfb\\x65\\xf4\\xfb\\x26\\x1e\\xc2\\x40\\xc2\\x5e\\xf7\\x00\\x4f\\x99\\x96\\x18\\xfb\\x71\\xf7\"\n\"\\x24\\xfb\\x08\\xf7\\x9b\\x84\\xf8\\x06\\x08\\xf8\\x43\\x07\\x0e\\xfb\\xbf\\x3b\\x04\\xc2\\xfa\\x4b\\xf7\\xb2\\xc2\\xfb\\xe9\\x06\\x0e\\xfb\\xbf\\xfa\\x31\\x04\"\n\"\\xfe\\x86\\xc2\\xfa\\x86\\x07\\x0e\\xfb\\xbf\\xfa\\x32\\x04\\xfe\\x82\\xf7\\xe8\\xc2\\xfb\\xb1\\xfa\\x4b\\x07\\x0e\\xfb\\x51\\xf7\\x93\\x40\\x15\\xf9\\x4a\\x07\"\n\"\\x89\\xf7\\x42\\xb9\\xd2\\xf7\\x20\\xb3\\x08\\xa1\\x07\\xfb\\x44\\x71\\x4d\\x3f\\xfb\\x4f\\x1a\\xfd\\x5c\\x07\\x0e\\xfb\\x51\\xf7\\x93\\xfa\\x3b\\x15\\x55\\xfb\"\n\"\\x84\\x06\\x8e\\xfb\\x26\\x54\\x46\\xfb\\x1b\\x78\\x08\\x4e\\x07\\xf7\\x1b\\x78\\xc2\\x46\\x88\\xfb\\x26\\x08\\xfb\\x8f\\xc1\\xf7\\xa4\\x07\\x8d\\xf7\\x1d\\x55\"\n\"\\xd5\\xfb\\x15\\xac\\xf7\\x14\\xaa\\xc3\\xd6\\x88\\xf7\\x1d\\x08\\x0e\\xfb\\x51\\xf7\\x93\\xfa\\x32\\x15\\x55\\xfd\\x57\\x06\\xfb\\x4f\\xc9\\x3f\\xf7\\x44\\x71\"\n\"\\x1e\\xa1\\x07\\xfb\\x20\\xb3\\x5d\\xd2\\x8d\\xf7\\x42\\x08\\x0e\\xfb\\x51\\xf7\\x5d\\xfa\\x31\\x15\\xfe\\x80\\xc1\\xfa\\x80\\x07\\x0e\\xfb\\xf6\\xd4\\xf9\\x89\"\n\"\\x15\\x57\\x73\\xf7\\x6b\\xfc\\x42\\xfb\\x6b\\xfc\\x42\\xbf\\x72\\xf7\\x79\\xf8\\x5b\\x05\\x0e\\xfc\\x2d\\xf7\\x48\\xf8\\xd4\\x15\\xd8\\x8a\\xb1\\x88\\xc2\\x1e\"\n\"\\x89\\xa7\\x8a\\xa5\\x9a\\x1a\\xb3\\x96\\xa2\\x9d\\x91\\x90\\x89\\x87\\x8d\\x1e\\x70\\x9c\\x92\\x85\\x9c\\x1b\\x9f\\x9a\\x99\\x9d\\xa6\\x73\\x9d\\x67\\x5e\\x69\"\n\"\\x6e\\x5a\\x7d\\x1f\\x7c\\x55\\x81\\x25\\x22\\x1a\\xfb\\xed\\x07\\x43\\x8c\\x67\\x8e\\x4e\\x1e\\x8d\\x6e\\x8c\\x6d\\x7b\\x1a\\x68\\x7f\\x74\\x78\\x83\\x84\\x90\"\n\"\\x98\\x85\\x1e\\x9c\\x82\\x83\\x90\\x7d\\x1b\\x77\\x7c\\x7d\\x78\\x71\\xa3\\x79\\xaf\\xb8\\xad\\xa8\\xbc\\x99\\x1f\\x9a\\xc1\\x95\\xf0\\xf5\\x1a\\x0e\\x8e\\xf7\"\n\"\\xe0\\x38\\x15\\xde\\xf8\\x68\\x06\\xf7\\x42\\xab\\xf7\\x33\\xbe\\xd9\\x1e\\xb9\\xa9\\xae\\xa6\\xaa\\x1b\\x90\\x8e\\x8a\\x89\\x92\\x1f\\x7c\\x7e\\x85\\x80\\x7a\"\n\"\\x1a\\x6d\\xa6\\x73\\xad\\xb2\\xa6\\xa9\\xb4\\xb9\\x67\\xad\\x5b\\x50\\x48\\x5b\\x37\\x52\\x1e\\x3d\\xfb\\x06\\x65\\xfb\\x29\\xfb\\x56\\x1a\\x0e\\x8e\\xf7\\xe0\"\n\"\\x33\\x15\\xde\\xfa\\xbb\\x38\\x06\\x0e\\x8e\\xf8\\x33\\xfa\\x2d\\x15\\x38\\xfc\\x65\\x06\\xfb\\x42\\x6b\\xfb\\x33\\x58\\x3d\\x1e\\x5d\\x6d\\x68\\x70\\x6c\\x1b\"\n\"\\x86\\x88\\x8c\\x8d\\x84\\x1f\\x9a\\x98\\x91\\x96\\x9c\\x1a\\xa9\\x70\\xa3\\x69\\x69\\x72\\x6e\\x61\\x5d\\xac\\x69\\xb8\\xc5\\xcd\\xbb\\xdf\\xc5\\x1e\\xd9\\xf7\"\n\"\\x06\\xb1\\xf7\\x29\\xf7\\x56\\x1a\\x0e\\xfb\\xbf\\xf8\\x56\\xfb\\xb9\\x15\\xf8\\x61\\x07\\xf7\\x73\\x4f\\xf7\\x68\\x23\\xf7\\x23\\x1e\\x53\\xd6\\x4f\\xbd\\x25\"\n\"\\xc2\\x7d\\x80\\x18\\xc3\\x6a\\xc6\\x52\\xc4\\x3f\\xf4\\xfb\\x17\\xcd\\xfb\\x80\\x8c\\xfb\\x88\\x08\\xfc\\x43\\x07\\x0e\\xfb\\xbf\\xf8\\x56\\xfa\\x3b\\x15\\x57\"\n\"\\xfe\\x81\\xbf\\x06\\x0e\\xfb\\xbf\\xf8\\x56\\xfa\\x32\\x15\\x57\\xfc\\x43\\x06\\xfb\\x70\\x4f\\xfb\\x7c\\x31\\xfb\\x14\\x1e\\x4e\\x32\\x46\\x44\\x4b\\x66\\x99\"\n\"\\x80\\x18\\xe1\\xb9\\xc4\\xb7\\xbe\\xc7\\x08\\xf7\\x0a\\xf7\\x20\\xd1\\xf7\\x78\\xf7\\x84\\x1a\\x0e\\xfb\\xbf\\xf7\\xfc\\x3b\\x15\\xfa\\x82\\xfb\\xe6\\x54\\xf7\"\n\"\\xaf\\xfe\\x4b\\x07\\x0e\\xfb\\xbf\\xf7\\xc5\\xfa\\x31\\x15\\xfe\\x86\\xc2\\xfa\\x86\\x07\\x0e\\xfb\\xbf\\xf7\\xfc\\xfa\\x32\\x15\\x54\\xfe\\x4b\\xfb\\xb1\\x54\"\n\"\\xf7\\xe8\\x06\\x0e\\xfb\\x51\\xf7\\x5d\\x40\\x15\\xc1\\xf9\\x5c\\x06\\xf7\\x4f\\x4d\\xd7\\xfb\\x44\\xa5\\x1e\\x75\\x07\\xf7\\x20\\x63\\xb9\\x44\\x89\\xfb\\x42\"\n\"\\x08\\x0e\\xfb\\x51\\xf7\\x60\\xfa\\x3b\\x15\\xfb\\x99\\x07\\x88\\xfb\\x1c\\xc3\\x40\\xf7\\x15\\x6b\\xfb\\x15\\x6a\\x53\\x41\\x8e\\xfb\\x1d\\x08\\xfb\\xa4\\xc1\"\n\"\\xf7\\x8f\\x07\\x86\\xf7\\x25\\xc3\\xd1\\xf7\\x1c\\x9e\\x08\\xc8\\x07\\xfb\\x1c\\x9e\\x53\\xd1\\x90\\xf7\\x25\\x08\\xf7\\x84\\x07\\x0e\\xfb\\x51\\xf7\\x5d\\xfa\"\n\"\\x32\\x15\\xfd\\x45\\x07\\x8d\\xfb\\x42\\x5d\\x44\\xfb\\x20\\x63\\x08\\x75\\x07\\xf7\\x44\\xa5\\xc9\\xd7\\xf7\\x4f\\x1a\\xf9\\x57\\x07\\x0e\\xfb\\x8e\\x8b\\x1c\"\n\"\\x05\\x46\\x8b\\x06\\xc3\\x0a\\xe3\\x0b\\xaa\\x8e\\x8f\\x90\\x8e\\x8e\\x8f\\x8e\\x8e\\x9c\\x92\\x91\\x0c\\x0c\\xb6\\x91\\x8f\\x8e\\x95\\x8e\\x94\\x90\\x90\\x95\"\n\"\\x90\\x90\\x0c\\x0d\\xf8\\xb9\\x14\\xf9\\x3f\\x15\\xbb\\x13\\x00\\x31\\x02\\x00\\x01\\x00\\x05\\x00\\x09\\x00\\x13\\x00\\x17\\x00\\x22\\x00\\x2c\\x00\\x3f\\x00\"\n\"\\x5f\\x00\\xae\\x00\\xed\\x01\\x15\\x01\\x3e\\x01\\x58\\x01\\x61\\x01\\x6c\\x01\\x73\\x01\\x8e\\x01\\x93\\x01\\xa2\\x01\\xbb\\x01\\xbe\\x01\\xd4\\x01\\xd8\\x01\"\n\"\\xe0\\x01\\xe4\\x01\\xf9\\x02\\x03\\x02\\x0a\\x02\\x1d\\x02\\x30\\x02\\x3a\\x02\\x49\\x02\\x50\\x02\\x5e\\x02\\x6b\\x02\\x78\\x02\\x84\\x02\\x90\\x02\\x9b\\x02\"\n\"\\xa6\\x02\\xb1\\x02\\xb6\\x02\\xc0\\x02\\xc5\\x02\\xce\\x02\\xd7\\x02\\xe0\\x02\\xe9\\x02\\xf2\\xf9\\x35\\x15\\x0b\\xa5\\x36\\x0a\\x0b\\x49\\x0a\\xa4\\xab\\xa9\"\n\"\\x72\\xa5\\x6d\\x1f\\x0b\\x3b\\x0a\\x71\\x0b\\x71\\x8e\\x06\\xd1\\x87\\xa0\\x70\\x88\\x36\\x08\\x0b\\x07\\x8e\\x36\\x76\\x70\\x45\\x87\\x08\\x88\\x0b\\x15\\x68\"\n\"\\x6f\\x6f\\x69\\x68\\xa7\\x6f\\xad\\xad\\xa7\\xa7\\xae\\xac\\x6f\\xa8\\x6a\\x1f\\x0b\\x15\\xfb\\xc6\\x06\\x46\\x6b\\x2c\\x0a\\xf7\\xc6\\xc3\\xfb\\xc8\\x06\\x50\"\n\"\\x6c\\x8b\\x8c\\x7c\\x1f\\x5c\\x8f\\x67\\x94\\x74\\x99\\x30\\x0a\\xf7\\xc8\\x06\\x0e\\x15\\xfb\\x5c\\xfb\\x21\\xfb\\x25\\xfb\\x61\\xfb\\x5e\\xf7\\x22\\xfb\\x27\"\n\"\\xf7\\x57\\xf7\\x57\\xf7\\x22\\xf7\\x26\\xf7\\x5f\\xf7\\x5d\\xfb\\x22\\xf7\\x29\\xfb\\x53\\x1f\\x81\\x64\\x15\\xb8\\xb9\\x7a\\x6d\\xae\\x1f\\xcb\\x56\\xae\\x2a\"\n\"\\xfb\\x0e\\x1a\\xfb\\x05\\x6c\\x2e\\x54\\x59\\x1e\\x6e\\x6c\\x5b\\x7a\\x5a\\x1b\\xfb\\x1b\\x32\\xf7\\x11\\xf7\\x51\\xf7\\x55\\xda\\xf7\\x06\\xf7\\x1a\\x1f\\x0e\"\n\"\\x15\\xfb\\x51\\xfb\\x2f\\xfb\\x32\\xfb\\x56\\xfb\\x56\\xf7\\x2f\\xfb\\x31\\xf7\\x52\\xf7\\x50\\xf7\\x31\\xf7\\x31\\xf7\\x52\\xf7\\x5b\\xfb\\x2c\\xf7\\x31\\xfb\"\n\"\\x56\\x1f\\x5e\\x04\\xf7\\x39\\xf7\\x16\\xfb\\x1d\\xfb\\x41\\xfb\\x3a\\xfb\\x19\\xfb\\x1d\\xfb\\x35\\xfb\\x36\\xfb\\x18\\xf7\\x1d\\xf7\\x3d\\xf7\\x3e\\x0b\\x15\"\n\"\\xb0\\x8f\\x9d\\x92\\xa6\\x9f\\x08\\xb2\\xa8\\x9c\\xab\\xb6\\x1a\\xbc\\x6a\\xb1\\x5f\\x6d\\x74\\x72\\x6b\\x6b\\xa2\\x71\\xa8\\x94\\x92\\x8c\\x8f\\x99\\x1e\\x8d\"\n\"\\x61\\x60\\x5e\\x5a\\x82\\x08\\x0e\\x15\\x73\\x06\\x86\\x4f\\x79\\x7b\\x4b\\x8c\\x08\\x69\\x06\\x4e\\x77\\x9c\\xc5\\x88\\x1f\\x73\\xfb\\x7a\\xa3\\x06\\x90\\xc9\"\n\"\\x9a\\x98\\xce\\x8c\\x08\\xac\\x06\\xcd\\x9a\\x7d\\x4d\\x8f\\x1f\\xa3\\x06\\x0b\\x4e\\x0a\\x6e\\x50\\x0a\\x5a\\x9a\\x5b\\xa7\\x63\\x1e\\xaf\\x58\\xb9\\x6d\\xc7\"\n\"\\x81\\x08\\x85\\xad\\x9e\\x8a\\xf7\\x01\\x1b\\x0b\\x3e\\x0a\\xfb\\xb0\\x23\\x0a\\xf7\\xb0\\x0b\\x2f\\x0a\\xe0\\xa0\\xa6\\xd1\\x8f\\x08\\x8e\\xa5\\x0b\\x37\\x0a\"\n\"\\xf8\\x19\\x07\\x88\\x0b\\x08\\x59\\xab\\x6d\\xc4\\xc9\\x1a\\xb3\\x97\\xb1\\xa2\\xa9\\x1e\\xa5\\xb0\\xac\\x9e\\xbc\\x94\\x08\\x90\\xac\\x9d\\x8c\\xec\\x1b\\x0b\"\n\"\\xf8\\x7a\\x33\\x0a\\x0b\\x63\\x1f\\xb6\\x69\\x05\\xc0\\xb9\\x9c\\x95\\xb2\\x41\\x0a\\xcb\\xba\\x0b\\x15\\x9a\\x81\\xf7\\x3a\\xf7\\x41\\x05\\x9a\\x9c\\x90\\x94\"\n\"\\x99\\x1a\\xa3\\x70\\xa1\\x6e\\x79\\x80\\x81\\x6e\\x7d\\x1e\\x0b\\x38\\x0a\\x0e\\x15\\x4d\\x07\\xf8\\x36\\xfb\\x5b\\xfc\\x36\\xfb\\x5b\\x05\\x4d\\x07\\xf8\\x85\"\n\"\\xf7\\x7d\\x05\\xc2\\x07\\x0e\\x88\\x4d\\x0a\\x0b\\x25\\x0a\\x71\\xf7\\xb0\\x21\\x0a\\x0b\\x3b\\x0a\\x06\\x0b\\x15\\x54\\xfb\\x83\\xfb\\x81\\x54\\xf7\\x81\\xfb\"\n\"\\x83\\xc2\\xf7\\x83\\xf7\\x81\\xc2\\xfb\\x81\\x06\\x0e\\x40\\x0a\\x42\\x73\\x90\\x6f\\x1b\\x50\\x5c\\x0b\\x24\\x0a\\xfc\\x19\\x25\\x0a\\x0b\\x1a\\x72\\x7e\\x7f\"\n\"\\x69\\x87\\x1e\\x71\\xf7\\x82\\xa5\\x07\\x54\\x98\\x89\\x8d\\x5e\\xf0\\x0b\\xd9\\x22\\xf1\\xc8\\xb9\\xac\\xcf\\xad\\x1e\\x47\\xad\\xb9\\x6a\\xc8\\x1b\\xf1\\xd9\"\n\"\\xf4\\x0b\\x88\\xe0\\xa0\\xa6\\xd1\\x8f\\x08\\x8e\\xa5\\x0b\\x06\\xe6\\x89\\xae\\x6d\\x99\\x32\\x08\\xa5\\x06\\x81\\xf7\\x36\\x05\\x0b\\x46\\x0a\\xa0\\x46\\x1f\"\n\"\\xa2\\x0b\\x1b\\xa0\\x8b\\x8b\\x70\\xe6\\x1f\\x73\\xda\\x8f\\x8a\\xaa\\x1b\\x0b\\xfb\\x2d\\xfb\\x55\\xfb\\x52\\xf7\\x2f\\xfb\\x2f\\xf7\\x52\\x0b\\xd3\\x2f\\xb6\"\n\"\\xad\\x18\\x68\\xb8\\x71\\xab\\x7a\\x9f\\x08\\x0b\\x1a\\x4a\\x7f\\x4d\\x78\\x67\\x1e\\x74\\x7f\\x72\\x7c\\x0b\\x72\\x9a\\xa2\\x7f\\x1f\\x78\\xaf\\x7f\\xc9\\xcc\"\n\"\\x1a\\x0b\\x15\\x57\\x5e\\x76\\x7f\\x64\\x1b\\x78\\x80\\x8e\\x0b\\xf8\\xa2\\xc2\\x15\\xfc\\x85\\x54\\xf8\\x85\\x06\\x0b\\x60\\x69\\x18\\xae\\x5f\\xa5\\x6a\\x9c\"\n\"\\x77\\x08\\x0b\\x4f\\x0a\\xaa\\xa4\\x0b\\xa5\\x07\\x64\\x8d\\x7b\\x98\\xa5\\x1a\\x9b\\x0b\\xa8\\xc4\\xaa\\x1f\\x0e\\x06\\x45\\x8f\\x76\\xa7\\x8e\\xdf\\x08\\x0b\"\n\"\\x06\\x45\\x8f\\x76\\xa6\\x8e\\xe0\\x08\\x0b\\x8b\\x89\\x7a\\x1f\\x57\\x88\\x64\\x80\\x0b\\x6b\\x72\\x72\\x6c\\x6b\\xa4\\x72\\xaa\\x0b\\x79\\x08\\x48\\x5f\\x61\"\n\"\\x3f\\x3a\\x1a\\x0b\", 16196\n};\n"
  },
  {
    "path": "src/iapi.h",
    "content": "/* Copyright (C) 2001-2006 Artifex Software, Inc.\n   All Rights Reserved.\n  \n   This software is provided AS-IS with no warranty, either express or\n   implied.\n\n   This software is distributed under license and may not be copied, modified\n   or distributed except as expressly authorized under the terms of that\n   license.  Refer to licensing information at http://www.artifex.com/\n   or contact Artifex Software, Inc.,  7 Mt. Lassen Drive - Suite A-134,\n   San Rafael, CA  94903, U.S.A., +1(415)492-9861, for further information.\n*/\n\n/* $Id: iapi.h 9043 2008-08-28 22:48:19Z giles $ */\n\n/*\n * Public API for Ghostscript interpreter\n * for use both as DLL and for static linking.\n * \n * Should work for Windows, OS/2, Linux, Mac.\n *\n * DLL exported functions should be as similar as possible to imain.c\n * You will need to include \"ierrors.h\".\n *\n * Current problems:\n * 1. Ghostscript does not support multiple instances.\n * 2. Global variables in gs_main_instance_default() \n *    and gsapi_instance_counter\n */\n\n/* Exported functions may need different prefix\n *  GSDLLEXPORT marks functions as exported\n *  GSDLLAPI is the calling convention used on functions exported \n *   by Ghostscript\n *  GSDLLCALL is used on callback functions called by Ghostscript\n * When you include this header file in the caller, you may\n * need to change the definitions by defining these\n * before including this header file.\n * Make sure you get the calling convention correct, otherwise your \n * program will crash either during callbacks or soon after returning\n * due to stack corruption.\n */\n\n#ifndef iapi_INCLUDED\n#  define iapi_INCLUDED\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if defined(_WINDOWS_) || defined(__WINDOWS__)\n# ifndef _Windows\n#  define _Windows\n# endif\n#endif\n\n#ifdef _Windows\n# ifndef GSDLLEXPORT\n#  define GSDLLEXPORT __declspec(dllexport)\n# endif\n# ifndef GSDLLAPI\n#  define GSDLLAPI __stdcall\n# endif\n# ifndef GSDLLCALL\n#  define GSDLLCALL __stdcall\n# endif\n#endif  /* _Windows */\n\n#if defined(OS2) && defined(__IBMC__)\n# ifndef GSDLLAPI\n#  define GSDLLAPI _System\n# endif\n# ifndef GSDLLCALL\n#  define GSDLLCALL _System\n# endif\n#endif\t/* OS2 && __IBMC */\n\n#ifdef __MACOS__\n# pragma export on\n#endif\n\n#ifndef GSDLLEXPORT\n# define GSDLLEXPORT\n#endif\n#ifndef GSDLLAPI\n# define GSDLLAPI\n#endif\n#ifndef GSDLLCALL\n# define GSDLLCALL\n#endif\n\n#if defined(__IBMC__)\n# define GSDLLAPIPTR * GSDLLAPI\n# define GSDLLCALLPTR * GSDLLCALL\n#else\n# define GSDLLAPIPTR GSDLLAPI *\n# define GSDLLCALLPTR GSDLLCALL * \n#endif\n\n#ifndef display_callback_DEFINED\n# define display_callback_DEFINED\ntypedef struct display_callback_s display_callback;\n#endif\n\ntypedef struct gsapi_revision_s {\n    const char *product;\n    const char *copyright;\n    long revision;\n    long revisiondate;\n} gsapi_revision_t;\n\n\n/* Get version numbers and strings.\n * This is safe to call at any time.\n * You should call this first to make sure that the correct version\n * of the Ghostscript is being used.\n * pr is a pointer to a revision structure.\n * len is the size of this structure in bytes.\n * Returns 0 if OK, or if len too small (additional parameters\n * have been added to the structure) it will return the required\n * size of the structure.\n */\nGSDLLEXPORT int GSDLLAPI \ngsapi_revision(gsapi_revision_t *pr, int len);\n\n/*\n * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING\n *  Ghostscript supports only one instance.\n *  The current implementation uses a global static instance \n *  counter to make sure that only a single instance is used.\n *  If you try to create two instances, the second attempt\n *  will return < 0 and set pinstance to NULL.\n * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING\n */\n/* Create a new instance of Ghostscript.\n * This instance is passed to most other API functions.\n * The caller_handle will be provided to callback functions.\n */\n \nGSDLLEXPORT int GSDLLAPI \ngsapi_new_instance(void **pinstance, void *caller_handle);\n\n/*\n * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING\n *  Ghostscript supports only one instance.\n *  The current implementation uses a global static instance \n *  counter to make sure that only a single instance is used.\n * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING\n */\n/* Destroy an instance of Ghostscript\n * Before you call this, Ghostscript must have finished.\n * If Ghostscript has been initialised, you must call gsapi_exit()\n * before gsapi_delete_instance.\n */\nGSDLLEXPORT void GSDLLAPI \ngsapi_delete_instance(void *instance);\n\n/* Set the callback functions for stdio\n * The stdin callback function should return the number of\n * characters read, 0 for EOF, or -1 for error.\n * The stdout and stderr callback functions should return\n * the number of characters written.\n * If a callback address is NULL, the real stdio will be used.\n */\nGSDLLEXPORT int GSDLLAPI \ngsapi_set_stdio(void *instance,\n    int (GSDLLCALLPTR stdin_fn)(void *caller_handle, char *buf, int len),\n    int (GSDLLCALLPTR stdout_fn)(void *caller_handle, const char *str, int len),\n    int (GSDLLCALLPTR stderr_fn)(void *caller_handle, const char *str, int len));\n\n/* Set the callback function for polling.\n * This is used for handling window events or cooperative\n * multitasking.  This function will only be called if\n * Ghostscript was compiled with CHECK_INTERRUPTS\n * as described in gpcheck.h.\n * The polling function should return 0 if all is well,\n * and negative if it wants ghostscript to abort.\n * The polling function must be fast.\n */\nGSDLLEXPORT int GSDLLAPI gsapi_set_poll(void *instance,\n    int (GSDLLCALLPTR poll_fn)(void *caller_handle));\n\n/* Set the display device callback structure.\n * If the display device is used, this must be called\n * after gsapi_new_instance() and before gsapi_init_with_args().\n * See gdevdisp.h for more details.\n */\nGSDLLEXPORT int GSDLLAPI gsapi_set_display_callback(\n   void *instance, display_callback *callback);\n\n\n/* Initialise the interpreter.\n * This calls gs_main_init_with_args() in imainarg.c\n * 1. If quit or EOF occur during gsapi_init_with_args(), \n *    the return value will be e_Quit.  This is not an error. \n *    You must call gsapi_exit() and must not call any other\n *    gsapi_XXX functions.\n * 2. If usage info should be displayed, the return value will be e_Info\n *    which is not an error.  Do not call gsapi_exit().\n * 3. Under normal conditions this returns 0.  You would then \n *    call one or more gsapi_run_*() functions and then finish\n *    with gsapi_exit().\n */\nGSDLLEXPORT int GSDLLAPI gsapi_init_with_args(void *instance, \n    int argc, char **argv);\n\n/* \n * The gsapi_run_* functions are like gs_main_run_* except\n * that the error_object is omitted.\n * If these functions return <= -100, either quit or a fatal\n * error has occurred.  You then call gsapi_exit() next.\n * The only exception is gsapi_run_string_continue()\n * which will return e_NeedInput if all is well.\n */\n\nGSDLLEXPORT int GSDLLAPI \ngsapi_run_string_begin(void *instance, \n    int user_errors, int *pexit_code);\n\nGSDLLEXPORT int GSDLLAPI \ngsapi_run_string_continue(void *instance, \n    const char *str, unsigned int length, int user_errors, int *pexit_code);\n\nGSDLLEXPORT int GSDLLAPI \ngsapi_run_string_end(void *instance, \n    int user_errors, int *pexit_code);\n\nGSDLLEXPORT int GSDLLAPI \ngsapi_run_string_with_length(void *instance, \n    const char *str, unsigned int length, int user_errors, int *pexit_code);\n\nGSDLLEXPORT int GSDLLAPI \ngsapi_run_string(void *instance, \n    const char *str, int user_errors, int *pexit_code);\n\nGSDLLEXPORT int GSDLLAPI \ngsapi_run_file(void *instance, \n    const char *file_name, int user_errors, int *pexit_code);\n\n\n/* Exit the interpreter.\n * This must be called on shutdown if gsapi_init_with_args()\n * has been called, and just before gsapi_delete_instance().\n */\nGSDLLEXPORT int GSDLLAPI \ngsapi_exit(void *instance);\n\n/* Visual Tracer */\n/* This function is only for debug purpose clients */\nstruct vd_trace_interface_s;\nGSDLLEXPORT void GSDLLAPI \ngsapi_set_visual_tracer(struct vd_trace_interface_s *I);\n\n\n/* function prototypes */\ntypedef int (GSDLLAPIPTR PFN_gsapi_revision)(\n    gsapi_revision_t *pr, int len);\ntypedef int (GSDLLAPIPTR PFN_gsapi_new_instance)(\n    void **pinstance, void *caller_handle);\ntypedef void (GSDLLAPIPTR PFN_gsapi_delete_instance)(\n    void *instance);\ntypedef int (GSDLLAPIPTR PFN_gsapi_set_stdio)(void *instance,\n    int (GSDLLCALLPTR stdin_fn)(void *caller_handle, char *buf, int len),\n    int (GSDLLCALLPTR stdout_fn)(void *caller_handle, const char *str, int len),\n    int (GSDLLCALLPTR stderr_fn)(void *caller_handle, const char *str, int len));\ntypedef int (GSDLLAPIPTR PFN_gsapi_set_poll)(void *instance,\n    int(GSDLLCALLPTR poll_fn)(void *caller_handle));\ntypedef int (GSDLLAPIPTR PFN_gsapi_set_display_callback)(\n    void *instance, display_callback *callback);\ntypedef int (GSDLLAPIPTR PFN_gsapi_init_with_args)(\n    void *instance, int argc, char **argv);\ntypedef int (GSDLLAPIPTR PFN_gsapi_run_string_begin)(\n    void *instance, int user_errors, int *pexit_code);\ntypedef int (GSDLLAPIPTR PFN_gsapi_run_string_continue)(\n    void *instance, const char *str, unsigned int length,\n    int user_errors, int *pexit_code);\ntypedef int (GSDLLAPIPTR PFN_gsapi_run_string_end)(\n    void *instance, int user_errors, int *pexit_code);\ntypedef int (GSDLLAPIPTR PFN_gsapi_run_string_with_length)(\n    void *instance, const char *str, unsigned int length,\n    int user_errors, int *pexit_code);\ntypedef int (GSDLLAPIPTR PFN_gsapi_run_string)(\n    void *instance, const char *str, \n    int user_errors, int *pexit_code);\ntypedef int (GSDLLAPIPTR PFN_gsapi_run_file)(void *instance, \n    const char *file_name, int user_errors, int *pexit_code);\ntypedef int (GSDLLAPIPTR PFN_gsapi_exit)(void *instance);\ntypedef void (GSDLLAPIPTR PFN_gsapi_set_visual_tracer) \n    (struct vd_trace_interface_s *I);\n\n\n#ifdef __MACOS__\n#pragma export off\n#endif\n\n#ifdef __cplusplus\n} /* extern 'C' protection */\n#endif\n\n#endif /* iapi_INCLUDED */\n"
  },
  {
    "path": "src/ierrors.h",
    "content": "/* Copyright (C) 2001-2022 Artifex Software, Inc.\n   All Rights Reserved.\n\n   This software is provided AS-IS with no warranty, either express or\n   implied.\n\n   This software is distributed under license and may not be copied,\n   modified or distributed except as expressly authorized under the terms\n   of the license contained in the file LICENSE in this distribution.\n\n   Refer to licensing information at http://www.artifex.com or contact\n   Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,\n   CA 94945, U.S.A., +1(415)492-9861, for further information.\n*/\n\n\n/* Definition of error codes */\n\n#ifndef ierrors_INCLUDED\n#  define ierrors_INCLUDED\n\n//#include \"gserrors.h\"\n\n/*\n * DO NOT USE THIS FILE IN THE GRAPHICS LIBRARY.\n * THIS FILE IS PART OF THE POSTSCRIPT INTERPRETER.\n * USE gserrors.h IN THE LIBRARY.\n */\n\n/*\n * A procedure that may return an error always returns\n * a non-negative value (zero, unless otherwise noted) for success,\n * or negative for failure.\n * We use ints rather than an enum to avoid a lot of casting.\n */\n\n/* Define the error name table */\nextern const char *const gs_error_names[];\n\n                /* ------ PostScript Level 1 errors ------ */\n\n#define LEVEL1_ERROR_NAMES\\\n \"unknownerror\", \"dictfull\", \"dictstackoverflow\", \"dictstackunderflow\",\\\n \"execstackoverflow\", \"interrupt\", \"invalidaccess\", \"invalidexit\",\\\n \"invalidfileaccess\", \"invalidfont\", \"invalidrestore\", \"ioerror\",\\\n \"limitcheck\", \"nocurrentpoint\", \"rangecheck\", \"stackoverflow\",\\\n \"stackunderflow\", \"syntaxerror\", \"timeout\", \"typecheck\", \"undefined\",\\\n \"undefinedfilename\", \"undefinedresult\", \"unmatchedmark\", \"VMerror\"\n\n        /* ------ Additional Level 2 errors (also in DPS) ------ */\n\n#define LEVEL2_ERROR_NAMES\\\n \"configurationerror\", \"undefinedresource\", \"unregistered\"\n\n        /* ------ Additional DPS errors ------ */\n\n#define DPS_ERROR_NAMES\\\n \"invalidcontext\", \"invalidid\"\n\n#define PDF_ERROR_NAMES\\\n \"pdf_stackoverflow\", \"pdf_circular_reference\"\n\n#define ERROR_NAMES\\\n LEVEL1_ERROR_NAMES, LEVEL2_ERROR_NAMES, DPS_ERROR_NAMES, PDF_ERROR_NAMES\n\n/*\n * Define which error codes require re-executing the current object.\n */\n#define GS_ERROR_IS_INTERRUPT(ecode)\\\n  ((ecode) == gs_error_interrupt || (ecode) == gs_error_timeout)\n\n#endif /* ierrors_INCLUDED */\n"
  },
  {
    "path": "src/macros.hpp",
    "content": "/*************************************************************************\n** macros.hpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef MACROS_HPP\n#define MACROS_HPP\n\n#define IMPLEMENT_ARITHMETIC_OPERATOR(class, op)        \\\n\tinline class operator op (class a, const class &b) { \\\n\t\treturn a op##= b;                                 \\\n\t}\n\n#define IMPLEMENT_ARITHMETIC_OPERATOR2(class, scalar, op) \\\n\tinline class operator op (class a, scalar b) { \\\n\t\treturn a op##= b;                           \\\n\t}\n\n#define IMPLEMENT_OUTPUT_OPERATOR(class)                            \\\n\tinline std::ostream& operator << (std::ostream &os, class obj) { \\\n\t\treturn obj.write(os);                                         \\\n\t}\n\n#endif\n"
  },
  {
    "path": "src/opt2cpp.py",
    "content": "##########################################################################\n## opt2cpp.py                                                           ##\n##                                                                      ##\n## This file is part of dvisvgm - a fast DVI to SVG converter           ##\n## Copyright (C) 2016-2025 Martin Gieseking <martin.gieseking@uos.de>   ##\n## and Khaled Hosny <khaled.hosny@hindawi.com>                          ##\n##                                                                      ##\n## This program is free software; you can redistribute it and/or        ##\n## modify it under the terms of the GNU General Public License as       ##\n## published by the Free Software Foundation; either version 3 of       ##\n## the License, or (at your option) any later version.                  ##\n##                                                                      ##\n## This program is distributed in the hope that it will be useful, but  ##\n## WITHOUT ANY WARRANTY; without even the implied warranty of           ##\n## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         ##\n## GNU General Public License for more details.                         ##\n##                                                                      ##\n## You should have received a copy of the GNU General Public License    ##\n## along with this program; if not, see <http://www.gnu.org/licenses/>. ##\n##########################################################################\n\nfrom lxml import etree\nimport re\nimport sys\n\nhpp_template = \"\"\"// This file was automatically generated by opt2cpp.\n// It is part of the dvisvgm package and published under the terms\n// of the GNU General Public License version 3, or (at your option) any later version.\n// See file COPYING for further details.\n// Copyright (C) 2016-2025 Martin Gieseking <martin.gieseking@uos.de>\n\n#ifndef {guard}\n#define {guard}\n\n#include <config.h>\n#include <array>\n#include <vector>\n#include \"CLCommandLine.hpp\"\n\nusing CL::Option;\nusing CL::TypedOption;\n\nclass {class} : public CL::CommandLine {{\n\\tpublic:\n\\t\\t{class} () : CL::CommandLine(\n\\t\\t\\t\"{summary}\",\n\\t\\t\\t\"{usage}\",\n\\t\\t\\t\"{copyright}\"\n\\t\\t) {{}}\n\n\\t\\t{class} (int argc, char **argv) : CommandLine() {{\n\\t\\t\\tparse(argc, argv);\n\\t\\t}}\n\n\\t\\t// option variables\n{optvars}\n\\tprotected:\n\\t\\tstd::vector<OptSectPair>& options () const override {{return _options;}}\n\\t\\tconst char* section (size_t n) const override {{return n < _sections.size() ? _sections[n] : nullptr;}}\n\n\\tprivate:\n\\t\\t{sectarray}\n\\t\\tmutable {optvec}}};\n\n#endif\n\"\"\"\n\ndef create_hpp (optfile):\n    parser = etree.XMLParser(dtd_validation=True)\n    tree = etree.parse(optfile, parser=parser)\n    root = tree.getroot()\n\n    vars = {}\n    vars[\"class\"] = root.get(\"class\")\n    vars[\"guard\"] = \"{}_HPP\".format(vars[\"class\"].upper())\n\n    prog = root.xpath(\"/*/program\")[0]\n    vars[\"summary\"] = prog.findtext(\"description\")\n    vars[\"copyright\"] = prog.findtext(\"copyright\")\n    vars[\"usage\"] = \"\"\n    for usage in prog.xpath(\"usage\"):\n        vars[\"usage\"] += \"{}\\\\n\".format(usage.text)\n    vars[\"usage\"] = vars[\"usage\"][:-2]\n\n    sections = root.xpath(\"//section\")\n    vars[\"sectarray\"] = \"std::array<const char*, {}> _sections {{{{\\n\".format(len(sections))\n    for sect in sections:\n        vars[\"sectarray\"] += '\\t\\t\\t\"{}\",\\n'.format(sect.get(\"title\"))\n    vars[\"sectarray\"] += \"\\t\\t}};\\n\"\n\n    vars[\"optvars\"] = \"\"\n    options = root.xpath(\"//option\")\n    for optelem in sorted(options, key=lambda opt: opt.get(\"long\")):\n        check_redefinition(optelem)\n        vars[\"optvars\"] += \"\\t\\t{}\\n\".format(create_optvar(optelem))\n\n    vars[\"optvec\"] = \"std::vector<OptSectPair> _options = {\\n\"\n    for optelem in options:\n        sectnum = int(optelem.xpath(\"count(../preceding-sibling::section)\"))\n        vecentry = '\\t\\t\\t{{&{}, {}}},'.format(create_optname(optelem), sectnum)\n        if (optelem.get(\"if\")):\n            vecentry = \"#if {}\\n{}\\n#endif\".format(optelem.get(\"if\"), vecentry)\n        vars[\"optvec\"] += \"{}\\n\".format(vecentry)\n    vars[\"optvec\"] += \"\\t\\t};\\n\";\n\n    return hpp_template.format(**vars)\n\n# Check if a short option name is already in use.\n# It's not necessary to check the long option names because they are IDs handled by the validator.\ndef check_redefinition (optelem):\n    shortname = optelem.get(\"short\")\n    count = optelem.xpath('count(preceding::option[@short=\"%s\"])' % shortname)\n    assert count == 0, \"redefinition of option -%s\" % shortname\n\n# Returns the C++ variable definition of an option including its initializer list.\ndef create_optvar (optelem):\n    typename = \"Option\"\n    argelem = optelem.find(\"arg\")\n    if argelem is not None:\n        argtype = argelem.get(\"type\")\n        argname = argelem.get(\"name\")\n        argval  = argelem.get(\"default\")\n        if argtype == \"string\":\n            argtype = \"std::string\"\n        argmode = \"OPTIONAL\" if optelem.xpath(\"arg/@optional='yes'\") else \"REQUIRED\"\n        typename = \"TypedOption<%s, Option::ArgMode::%s>\" %(argtype, argmode)\n    longname = optelem.get(\"long\")\n    shortname = optelem.get(\"short\") if optelem.get(\"short\") else \"\\\\0\"\n    descr = optelem.xpath(\"description/text()\")[0]\n    if argelem is not None:\n        if argval is None:\n            return '{} {} {{\"{}\", \\'{}\\', \"{}\", \"{}\"}};'.format(typename, create_optname(optelem), longname, shortname, argname, descr)\n        if argtype == \"std::string\":\n            argval = '\"{}\"'.format(argval)\n        return '{} {} {{\"{}\", \\'{}\\', \"{}\", {}, \"{}\"}};'.format(typename, create_optname(optelem), longname, shortname, argname, argval, descr)\n    return '{} {} {{\"{}\", \\'{}\\', \"{}\"}};'.format(typename, create_optname(optelem), longname, shortname, descr)\n\n# Returns the C++ variable name of an option.\ndef create_optname (optelem):\n    optname = \"%sOpt\" % optelem.get(\"long\")\n    return re.sub('-([a-z])', lambda pat: pat.group(1).upper(), optname)\n\nif __name__ == \"__main__\" and len(sys.argv) > 1:\n    print(create_hpp(sys.argv[1]))\n"
  },
  {
    "path": "src/optimizer/AttributeExtractor.cpp",
    "content": "/*************************************************************************\n** AttributeExtractor.cpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include \"../algorithm.hpp\"\n#include \"AttributeExtractor.hpp\"\n\nusing namespace std;\n\n/** Constructs a new run object for an attribute and a sequence of sibling nodes.\n *  @param[in] attr attribute to look for\n *  @param[in] first first element of node sequence to scan */\nAttributeExtractor::AttributeRun::AttributeRun (const Attribute &attr, XMLElement *first) {\n\t_length = 1;\n\t_first = first;\n\tfor (_last=_first->next(); _last; _last=_last->next()) {\n\t\tif (_last->toText() || _last->toCData())  // don't include text/CDATA nodes\n\t\t\tbreak;\n\t\tif (XMLElement *childElem = _last->toElement()) {\n\t\t\tif (!groupable(*childElem))\n\t\t\t\tbreak;\n\t\t\tconst char *val = childElem->getAttributeValue(attr.name);\n\t\t\tif (val && val == attr.value)\n\t\t\t\t++_length;\n\t\t\telse\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif (_first != _last && _last)\n\t\t_last = _last->prev();\n}\n\n\nconst char* AttributeExtractor::info () const {\n\treturn \"move common attributes from a sequence of elements to enclosing groups\";\n}\n\n\n/** Performs the attribute extraction on a given context node. Each extracted\n *  attribute gets its own group, i.e. the extraction of multiple attributes\n *  of the same elements leads to nested groups.\n *  @param[in] context attributes of all children in this element are extracted\n *  @param[in] recurse if true, the algorithm is recursively performed on all descendant elements */\nvoid AttributeExtractor::execute (XMLElement *context, bool recurse) {\n\tif (!context || context->empty())\n\t\treturn;\n\tif (recurse) {\n\t\tfor (auto node : *context) {\n\t\t\tif (XMLElement *elem = node->toElement())\n\t\t\t\texecute(elem, true);\n\t\t}\n\t}\n\tfor (XMLNode *child=context->firstChild(); child; child=child->next()) {\n\t\tif (XMLElement *elem = child->toElement())\n\t\t\tchild = extractAttribute(elem);\n\t}\n}\n\n\n/** Looks for the first attribute not yet processed and tries to group it. If\n *  there is a sequence of adjacent sibling nodes N1,...,Nn with an identical inheritable\n *  attribute, the function creates a group element with this attribute and moves the\n *  nodes N1,...,Nn into that group. The group is inserted at the former position of N1.\n *  @param[in] elem first element of a node sequence with potentially identical attributes\n *  @return the new group element if attributes could be grouped, 'elem' otherwise  */\nXMLNode* AttributeExtractor::extractAttribute (XMLElement *elem) {\n\tfor (const auto &currentAttribute : elem->attributes()) {\n\t\tif (!currentAttribute.inheritable() || extracted(currentAttribute))\n\t\t\tcontinue;\n\t\tAttributeRun run(currentAttribute, elem);\n\t\tif (run.length() >= MIN_RUN_LENGTH) {\n\t\t\tXMLElement::Attribute attrib = currentAttribute;\n\t\t\tXMLElement *group = XMLElement::wrap(run.first(), run.last(), \"g\");\n\t\t\tgroup->addAttribute(attrib.name, attrib.value);\n\t\t\t// remove attribute from the grouped elements but keep it on elements with 'id' attribute\n\t\t\t// since they can be referenced, and keep 'fill' attribute on animation elements\n\t\t\tfor (XMLNode *node : *group) {\n\t\t\t\tXMLElement *elem = node->toElement();\n\t\t\t\tif (elem && extractable(attrib, *elem))\n\t\t\t\t\telem->removeAttribute(attrib.name);\n\t\t\t}\n\t\t\t// continue with children of the new group but ignore the just extracted attribute\n\t\t\t_extractedAttributes.insert(attrib.name);\n\t\t\texecute(group, false);\n\t\t\t_extractedAttributes.erase(attrib.name);\n\t\t\treturn group;\n\t\t}\n\t}\n\treturn elem;\n}\n\n\n/** Checks whether an element type is allowed to be put in a group element (<g>...</g>).\n *  For now we only consider a subset of the actually allowed set of elements.\n *  @param[in] elem name of element to check\n *  @return true if the element is groupable */\nbool AttributeExtractor::groupable (const XMLElement &elem) {\n\t// https://www.w3.org/TR/SVG/struct.html#GElement\n\tstatic const char *names[] = {\n\t\t\"a\", \"altGlyphDef\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\",\n\t\t\"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"filter\",\n\t\t\"font\", \"font-face\", \"foreignObject\", \"g\", \"image\", \"line\", \"linearGradient\", \"marker\",\n\t\t\"mask\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\", \"set\",\n\t\t\"style\", \"switch\", \"symbol\", \"text\", \"title\", \"use\", \"view\"\n\t};\n\treturn algo::binary_search(names, elem.name(), [](const string &name1, const string &name2) {\n\t\treturn name1 < name2;\n\t});\n}\n\n\n/** Checks whether an attribute is allowed to be removed from a given element. */\nbool AttributeExtractor::extractable (const Attribute &attrib, const XMLElement &element) {\n\tif (element.hasAttribute(\"id\"))\n\t\treturn false;\n\tif (attrib.name != \"fill\")\n\t\treturn true;\n\t// the 'fill' attribute of animation elements has different semantics than\n\t// that of graphics elements => don't extract it from animation nodes\n\t// https://www.w3.org/TR/SVG11/animate.html#TimingAttributes\n\tstatic const char *names[] = {\n\t\t\"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"set\"\n\t};\n\tauto it = algo::find_if(names, [&](const string &name) {\n\t\treturn element.name() == name;\n\t});\n\treturn it == end(names);\n}\n\n\n/** Returns true if a given attribute was already extracted from the\n *  current run of elements. */\nbool AttributeExtractor::extracted (const Attribute &attr) const {\n\treturn _extractedAttributes.find(attr.name) != _extractedAttributes.end();\n}\n"
  },
  {
    "path": "src/optimizer/AttributeExtractor.hpp",
    "content": "/*************************************************************************\n** AttributeExtractor.hpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <set>\n#include <string>\n#include \"OptimizerModule.hpp\"\n#include \"../XMLNode.hpp\"\n\n/** Moves common attributes of adjacent elements to enclosing groups. */\nclass AttributeExtractor : public OptimizerModule {\n\tusing Attribute = XMLElement::Attribute;\n\n\t/** Represents a range of adjacent nodes where all elements have a common attribute. */\n\tstruct AttributeRun {\n\t\tpublic:\n\t\t\tAttributeRun (const Attribute &attr, XMLElement *first);\n\t\t\tXMLNode* first () {return _first;}\n\t\t\tXMLNode* last ()  {return _last;}\n\t\t\tint length () const {return _length;}\n\n\t\tprivate:\n\t\t\tint _length;  ///< run length excluding non-element nodes\n\t\t\tXMLNode *_first, *_last;  ///< first and last node in run\n\t};\n\n\tpublic:\n\t\tvoid execute (XMLElement*, XMLElement *context) override {execute(context, true);};\n\t\tconst char* info () const override;\n\t\tstatic bool groupable (const XMLElement &elem);\n\t\tstatic bool extractable (const Attribute &attr, const XMLElement &element);\n\n\tprotected:\n\t\tvoid execute (XMLElement *context, bool recurse);\n\t\tXMLNode* extractAttribute (XMLElement *elem);\n\t\tbool extracted (const Attribute &attr) const;\n\n\tprivate:\n\t\tstd::set<std::string> _extractedAttributes;\n\t\tstatic constexpr int MIN_RUN_LENGTH = 3;\n};\n\n"
  },
  {
    "path": "src/optimizer/ClipPathReassigner.cpp",
    "content": "/*************************************************************************\n** ClipPathReassigner.cpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <set>\n#include <sstream>\n#include \"ClipPathReassigner.hpp\"\n#include \"../XMLNode.hpp\"\n#include \"../XXHashFunction.hpp\"\n\nusing namespace std;\n\nconst char* ClipPathReassigner::info () const {\n\treturn \"remove duplicate clip paths and update the references\";\n}\n\n\n/** Returns a hash value for an XML element where the id attribute is not taken into account.\n *  Two elements that differ only by their id attribute get the same hash value. */\nstatic uint64_t hash_value (XMLElement *elem) {\n\tstring id;\n\tif (const char* idval = elem->getAttributeValue(\"id\"))\n\t\tid = idval;\n\telem->removeAttribute(\"id\");\n\tostringstream oss;\n\telem->write(oss);\n\tuint64_t value = XXH64HashFunction(oss.str().data(), oss.str().length()).digestValue();\n\tif (!id.empty())\n\t\telem->addAttribute(\"id\", id);\n\treturn value;\n}\n\n\n/** Extracts the ID from a local URL reference like url(#abcde) */\nstatic inline string extract_id_from_url (const string &url) {\n\tif (url.length() >= 7) {\n\t\tsize_t first = url.find('#');\n\t\tsize_t last = url.rfind(')');\n\t\tif (first != string::npos && last != string::npos && first < last)\n\t\t\treturn url.substr(first+1, last-first-1);\n\t}\n\treturn \"\";\n}\n\n\nvoid ClipPathReassigner::execute (XMLElement *defs, XMLElement *context) {\n\tvector<XMLElement*> clipPathElements;\n\tif (!defs || !context || !defs->getDescendants(\"clipPath\", nullptr, clipPathElements))\n\t\treturn;\n\tmap<uint64_t, vector<XMLElement*>> clipPathMap;\n\tfor (XMLElement *clipPathElement: clipPathElements) {\n\t\tuint64_t hash = hash_value(clipPathElement);\n\t\tclipPathMap[hash].push_back(clipPathElement); // put identical clipPath elements into a common vector\n\t}\n\t// replace clip path references\n\tvector<XMLElement*> descendants;\n\tdefs->getDescendants(nullptr, \"clip-path\", descendants);\n\tcontext->getDescendants(nullptr, \"clip-path\", descendants);\n\tfor (auto &mapEntry : clipPathMap) {\n\t\tvector<XMLElement*> &identicalClipPathElements = mapEntry.second;\n\t\tset<string> ids;\n\t\tfor (auto elem : identicalClipPathElements) {\n\t\t\tif (const char *id = elem->getAttributeValue(\"id\"))\n\t\t\t\tids.insert(id);\n\t\t}\n\t\tfor (auto it = descendants.begin(); it != descendants.end();) {\n\t\t\tif (const char *clipPathRef = (*it)->getAttributeValue(\"clip-path\")) {\n\t\t\t\tif (ids.find(extract_id_from_url(clipPathRef)) == ids.end())\n\t\t\t\t\t++it;\n\t\t\t\telse {\n\t\t\t\t\t(*it)->addAttribute(\"clip-path\", string(\"url(#\") + (*ids.begin()) + \")\");\n\t\t\t\t\tit = descendants.erase(it);  // no need to process this element again\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// remove redundant clipPath elements\n\tfor (auto mapEntry : clipPathMap) {\n\t\tauto it = mapEntry.second.begin();\n\t\tfor (++it; it != mapEntry.second.end(); ++it)\n\t\t\tXMLElement::detach(*it);\n\t}\n}\n"
  },
  {
    "path": "src/optimizer/ClipPathReassigner.hpp",
    "content": "/*************************************************************************\n** ClipPathReassigner.hpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <string>\n#include <vector>\n#include \"OptimizerModule.hpp\"\n\nclass ClipPathReassigner : public OptimizerModule {\n\tstruct NamedPathString {\n\t\tNamedPathString () =default;\n\t\tNamedPathString (const std::string &svgPathName, const char *svgPathString) : name(svgPathName), pathString(svgPathString) {}\n\t\tstd::string name;\n\t\tconst char *pathString = nullptr;\n\t};\n\n\tpublic:\n\t\tvoid execute (XMLElement*, XMLElement *context) override;\n\t\tconst char* info () const override;\n\n\tprivate:\n\t\tstd::vector<NamedPathString> _namedPathStrings;\n\n};\n\n"
  },
  {
    "path": "src/optimizer/DependencyGraph.hpp",
    "content": "/*************************************************************************\n** DependencyGraph.hpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef DEPENDENCYGRAPH_HPP\n#define DEPENDENCYGRAPH_HPP\n\n#include <map>\n#include <memory>\n#include <set>\n#include <vector>\n#include \"../utility.hpp\"\n\ntemplate <typename T>\nclass DependencyGraph {\n\tstruct GraphNode {\n\t\texplicit GraphNode (const T &k) : key(k), dependent() {}\n\n\t\tvoid addDependee (GraphNode *node) {\n\t\t\tif (node) {\n\t\t\t\tnode->dependent = this;\n\t\t\t\tdependees.insert(node);\n\t\t\t}\n\t\t}\n\n\t\tvoid unlinkDependees () {\n\t\t\tfor (GraphNode *dependee : dependees)\n\t\t\t\tdependee->dependent = nullptr;\n\t\t\tdependees.clear();\n\t\t}\n\n\t\tvoid unlinkDependee (GraphNode *dependee) {\n\t\t\tauto it = dependees.find(dependee);\n\t\t\tif (it != dependees.end()) {\n\t\t\t\t(*it)->dependent = nullptr;\n\t\t\t\tdependees.erase(it);\n\t\t\t}\n\t\t}\n\n\t\tT key;\n\t\tGraphNode *dependent;\n\t\tstd::set<GraphNode*> dependees;\n\t};\n\n\tusing NodeMap = std::map<T, std::unique_ptr<GraphNode>>;\n\n\tpublic:\n\t\t/** Inserts a new isolated node into the dependency graph. */\n\t\tvoid insert (const T &key) {\n\t\t\tif (!contains(key))\n\t\t\t\t_nodeMap.emplace(key, util::make_unique<GraphNode>(key));\n\t\t}\n\n\t\t/** Inserts a new node to the graph and adds a dependency on an existing one to it.\n\t\t *  @param[in] key ID of new node to insert\n\t\t *  @param[in] dependantKey ID of node the new node should depend on */\n\t\tvoid insert (const T &dependentKey, const T &key) {\n\t\t\tif (!contains(key)) {\n\t\t\t\tauto dependentIter = _nodeMap.find(dependentKey);\n\t\t\t\tif (dependentIter != _nodeMap.end()) {\n\t\t\t\t\tauto node = util::make_unique<GraphNode>(key);\n\t\t\t\t\tdependentIter->second->addDependee(node.get());\n\t\t\t\t\t_nodeMap.emplace(key, std::move(node));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/** Removes a node and all its dependents from the graph. */\n\t\tvoid removeDependencyPath (const T &key) {\n\t\t\tauto it = _nodeMap.find(key);\n\t\t\tif (it != _nodeMap.end()) {\n\t\t\t\tfor (GraphNode *node = it->second.get(); node;) {\n\t\t\t\t\tGraphNode *dependent = node->dependent;\n\t\t\t\t\tnode->unlinkDependees();\n\t\t\t\t\tif (dependent)\n\t\t\t\t\t\tdependent->unlinkDependee(node);\n\t\t\t\t\t_nodeMap.erase(node->key);\n\t\t\t\t\tnode = dependent;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/** Returns the IDs of all nodes present in the graph. */\n\t\tstd::vector<T> getKeys () const {\n\t\t\tstd::vector<T> keys;\n\t\t\tfor (auto &entry : _nodeMap)\n\t\t\t\tkeys.emplace_back(entry.first);\n\t\t\treturn keys;\n\t\t}\n\n\t\tbool contains (const T &value) const {\n\t\t\treturn _nodeMap.find(value) != _nodeMap.end();\n\t\t}\n\n\t\tbool empty () const {\n\t\t\treturn _nodeMap.empty();\n\t\t}\n\n#if 0\n\t\tvoid writeDOT (std::ostream &os) const {\n\t\t\tos << \"digraph {\\n\";\n\t\t\tfor (auto it=_nodeMap.begin(); it != _nodeMap.end(); ++it) {\n\t\t\t\tGraphNode *node = it->second;\n\t\t\t\tif (node->dependent)\n\t\t\t\t\tos << (node->key) << \" -> \" << (node->dependent->key) << \";\\n\";\n\t\t\t\telse if (node->dependees.empty())\n\t\t\t\t\tos << (node->key) << \";\\n\";\n\t\t\t}\n\t\t\tos << \"}\\n\";\n\t\t}\n#endif\n\n\tprivate:\n\t\tNodeMap _nodeMap;\n};\n\n#endif\n"
  },
  {
    "path": "src/optimizer/GroupCollapser.cpp",
    "content": "/*************************************************************************\n** GroupCollapser.cpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include <string>\n#include <vector>\n#include \"../algorithm.hpp\"\n#include \"GroupCollapser.hpp\"\n#include \"TransformSimplifier.hpp\"\n#include \"../XMLNode.hpp\"\n\nusing namespace std;\n\nbool GroupCollapser::COMBINE_TRANSFORMS = true;\n\nconst char* GroupCollapser::info () const {\n\treturn \"join nested group elements\";\n}\n\n\n/** Checks if there's only a single child element and optional whitespace\n *  siblings in a given element.\n *  @param[in] elem element to check\n *  @return pointer to the only child element or nullptr */\nstatic XMLElement* only_child_element (XMLElement *elem) {\n\tXMLElement *firstChildElement=nullptr;\n\tfor (XMLNode *child : *elem) {\n\t\tif (XMLElement *childElement = child->toElement()) {\n\t\t\tif (firstChildElement)\n\t\t\t\treturn nullptr;\n\t\t\tfirstChildElement = childElement;\n\t\t}\n\t\telse if (!child->toWSNode())\n\t\t\treturn nullptr;\n\t}\n\treturn firstChildElement;\n}\n\n\n/** Removes all whitespace child nodes from a given element. */\nstatic void remove_ws_nodes (const XMLElement *elem) {\n\tXMLNode *node = elem->firstChild();\n\twhile (node) {\n\t\tif (!node->toWSNode())\n\t\t\tnode = node->next();\n\t\telse {\n\t\t\tXMLNode *next = node->next();\n\t\t\tXMLElement::detach(node);\n\t\t\tnode = next;\n\t\t}\n\t}\n}\n\n\n/** Recursively removes all redundant group elements from the given context element\n *  and moves their attributes to the corresponding parent elements.\n *  @param[in] context root of the subtree to process\n *  @param[in] depth depth of tree node being processed (0 = root of local tree) */\nvoid GroupCollapser::execute (XMLElement *context, int depth) {\n\tif (!context)\n\t\treturn;\n\n\tXMLNode *child=context->firstChild();\n\twhile (child) {\n\t\tXMLNode *next=child->next();\n\t\tif (XMLElement *childElement = child->toElement()) {\n\t\t\texecute(childElement, depth+1);\n\t\t\t// remove empty groups and groups without attributes\n\t\t\tif (childElement->name() == \"g\" && (childElement->attributes().empty() || (!childElement->hasAttribute(\"id\") && childElement->empty(true)))) {\n\t\t\t\tremove_ws_nodes(childElement);\n\t\t\t\tif (XMLNode *firstUnwrappedNode = XMLElement::unwrap(childElement))\n\t\t\t\t\tnext = firstUnwrappedNode;\n\t\t\t}\n\t\t}\n\t\tchild = next;\n\t}\n\tif (XMLElement *childElement = only_child_element(context)) {\n\t\tif (collapsible(*context)) {\n\t\t\tif (childElement->name() == \"g\" && unwrappable(*childElement, *context) && moveAttributes(*childElement, *context)) {\n\t\t\t\tremove_ws_nodes(context);\n\t\t\t\tXMLElement::unwrap(childElement);\n\t\t\t}\n\t\t}\n\t}\n\tif (depth == 0 && COMBINE_TRANSFORMS && _transformCombined) {\n\t\tTransformSimplifier().execute(context);\n\t\t_transformCombined = false;\n\t}\n}\n\n\n/** Moves all attributes from an element to another one. Attributes already\n *  present in the destination element are overwritten or combined.\n *  @param[in] source element the attributes are taken from\n *  @param[in] dest element that receives the attributes\n *  @return true if all attributes have been moved */\nbool GroupCollapser::moveAttributes (XMLElement &source, XMLElement &dest) {\n\tvector<string> movedAttributes;\n\tfor (const auto &attr : source.attributes()) {\n\t\tif (attr.name == \"transform\") {\n\t\t\tstring transform;\n\t\t\tif (const char *destvalue = dest.getAttributeValue(\"transform\")) {\n\t\t\t\ttransform = destvalue+attr.value;\n\t\t\t\t_transformCombined = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttransform = attr.value;\n\t\t\t}\n\t\t\tdest.addAttribute(\"transform\", transform);\n\t\t\tmovedAttributes.emplace_back(\"transform\");\n\t\t}\n\t\telse if (attr.inheritable()) {\n\t\t\tdest.addAttribute(attr.name, attr.value);\n\t\t\tmovedAttributes.emplace_back(attr.name);\n\t\t}\n\t}\n\tfor (const string &attrname : movedAttributes)\n\t\tsource.removeAttribute(attrname);\n\treturn source.attributes().empty();\n}\n\n\n/** Returns true if a given element is allowed to take the inheritable attributes\n *  and children of a child group without changing the semantics.\n *  @param[in] element group element to check */\nbool GroupCollapser::collapsible (const XMLElement &element) {\n\t// the 'fill' attribute of animation elements has different semantics than\n\t// that of graphics elements => don't collapse them\n\tstatic const char *names[] = {\n\t\t\"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"set\"\n\t};\n\tauto it = algo::find_if(names, [&](const string &name) {\n\t\treturn element.name() == name;\n\t});\n\treturn it == end(names);\n}\n\n\n/** Returns true if a given group element is allowed to be unwrapped, i.e. its\n *  attributes and children can be moved to the parent without changing the semantics.\n *  @param[in] source element whose children and attributes should be moved\n *  @param[in] dest element that should receive the children and attributes */\nbool GroupCollapser::unwrappable (const XMLElement &source, const XMLElement &dest) {\n\tconst char *cp1 = source.getAttributeValue(\"clip-path\");\n\tconst char *cp2 = dest.getAttributeValue(\"clip-path\");\n\tif (cp2) {\n\t\t// check for colliding clip-path attributes\n\t\tif (cp1 && string(cp1) != string(cp2))\n\t\t\treturn false;\n\t\t// don't apply inner transformations to outer clipping paths\n\t\tif (source.hasAttribute(\"transform\"))\n\t\t\treturn false;\n\t}\n\t// these attributes prevent a group from being unwrapped\n\tstatic const char *attribs[] = {\n\t\t\"class\", \"id\", \"filter\", \"mask\", \"style\"\n\t};\n\tauto it = algo::find_if(attribs, [&](const string &name) {\n\t\treturn source.hasAttribute(name) || dest.hasAttribute(name);\n\t});\n\treturn it == end(attribs);\n}\n"
  },
  {
    "path": "src/optimizer/GroupCollapser.hpp",
    "content": "/*************************************************************************\n** GroupCollapser.hpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include \"OptimizerModule.hpp\"\n\n/** Joins the attributes of nested groups and removes groups without attributes. */\nclass GroupCollapser : public OptimizerModule {\n\tpublic:\n\t\tvoid execute (XMLElement*, XMLElement *context) override {execute(context);};\n\t\tvoid execute (XMLElement *context) {execute(context, 0);}\n\t\tconst char* info () const override;\n\n\t\tstatic bool COMBINE_TRANSFORMS;\n\n\tprotected:\n\t\tvoid execute (XMLElement *context, int depth);\n\t\tbool moveAttributes (XMLElement &source, XMLElement &dest);\n\t\tstatic bool collapsible (const XMLElement &elem);\n\t\tstatic bool unwrappable (const XMLElement &source, const XMLElement &dest);\n\n\tprivate:\n\t\tbool _transformCombined=false;  ///< true if transform attributes have been combined\n};\n"
  },
  {
    "path": "src/optimizer/Makefile.am",
    "content": "noinst_LTLIBRARIES = liboptimizer.la\n\nliboptimizer_la_SOURCES = \\\n\tAttributeExtractor.hpp      AttributeExtractor.cpp \\\n\tClipPathReassigner.hpp      ClipPathReassigner.cpp \\\n\tDependencyGraph.hpp \\\n\tGroupCollapser.hpp          GroupCollapser.cpp  \\\n\tOptimizerModule.hpp \\\n\tRedundantElementRemover.hpp RedundantElementRemover.cpp \\\n\tSVGOptimizer.hpp            SVGOptimizer.cpp \\\n\tTextSimplifier.hpp          TextSimplifier.cpp \\\n\tTransformSimplifier.hpp     TransformSimplifier.cpp \\\n\tWSNodeRemover.hpp           WSNodeRemover.cpp\n\ninclude ../../libs/defs.am\n\nAM_CXXFLAGS = -I$(dvisvgm_srcdir)/libs/variant/include $(XXHASH_CFLAGS)\n\n"
  },
  {
    "path": "src/optimizer/OptimizerModule.hpp",
    "content": "/*************************************************************************\n** OptimizerModule.hpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\nclass XMLElement;\n\nclass OptimizerModule {\n\tpublic:\n\t\tvirtual ~OptimizerModule () =default;\n\t\tvirtual void execute (XMLElement *defs, XMLElement *context) =0;\n\t\tvirtual const char* info () const =0;\n};\n"
  },
  {
    "path": "src/optimizer/RedundantElementRemover.cpp",
    "content": "/*************************************************************************\n** RedundantElementRemover.cpp                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"DependencyGraph.hpp\"\n#include \"RedundantElementRemover.hpp\"\n#include \"../XMLNode.hpp\"\n\nusing namespace std;\n\nconst char* RedundantElementRemover::info () const {\n\treturn \"remove redundant 'clipPath' elements\";\n}\n\n\n/** Extracts the ID from a local URL reference like url(#abcde) */\nstatic inline string extract_id_from_url (const string &url) {\n\treturn url.substr(5, url.length()-6);\n}\n\n\n/** Removes elements present in the SVG tree that are not required.\n *  For now, only clipPath elements are removed. */\nvoid RedundantElementRemover::execute (XMLElement *defs, XMLElement *context) {\n\tvector<XMLElement*> clipPathElements;\n\tif (!defs || !context || !defs->getDescendants(\"clipPath\", nullptr, clipPathElements))\n\t\treturn;\n\n\t// collect dependencies between clipPath elements in the defs section of the SVG tree\n\tDependencyGraph<string> idTree;\n\tfor (const XMLElement *clip : clipPathElements) {\n\t\tif (const char *id = clip->getAttributeValue(\"id\")) {\n\t\t\tif (const char *url = clip->getAttributeValue(\"clip-path\"))\n\t\t\t\tidTree.insert(extract_id_from_url(url), id);\n\t\t\telse\n\t\t\t\tidTree.insert(id);\n\t\t}\n\t}\n\t// collect elements that reference a clipPath, i.e. have a clip-path attribute\n\tvector<XMLElement*> descendants;\n\tdefs->getDescendants(\"!clipPath\", \"clip-path\", descendants);\n\tcontext->getDescendants(nullptr, \"clip-path\", descendants);\n\t// remove referenced IDs and their dependencies from the dependency graph\n\tfor (const XMLElement *elem : descendants) {\n\t\tstring idref = extract_id_from_url(elem->getAttributeValue(\"clip-path\"));\n\t\tidTree.removeDependencyPath(idref);\n\t}\n\tdescendants.clear();\n\tfor (const string &str : idTree.getKeys()) {\n\t\tXMLElement *node = defs->getFirstDescendant(\"clipPath\", \"id\", str.c_str());\n\t\tXMLElement::detach(node);\n\t}\n}\n"
  },
  {
    "path": "src/optimizer/RedundantElementRemover.hpp",
    "content": "/*************************************************************************\n** RedundantElementRemover.hpp                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include \"OptimizerModule.hpp\"\n\nclass RedundantElementRemover : public OptimizerModule {\n\tpublic:\n\t\tvoid execute (XMLElement *defs, XMLElement *context) override;\n\t\tconst char* info () const override;\n};\n"
  },
  {
    "path": "src/optimizer/SVGOptimizer.cpp",
    "content": "/*************************************************************************\n** SVGOptimizer.cpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include <map>\n#include <set>\n#include \"../algorithm.hpp\"\n#include \"SVGOptimizer.hpp\"\n#include \"../SVGTree.hpp\"\n\n#include \"AttributeExtractor.hpp\"\n#include \"ClipPathReassigner.hpp\"\n#include \"GroupCollapser.hpp\"\n#include \"RedundantElementRemover.hpp\"\n#include \"TextSimplifier.hpp\"\n#include \"TransformSimplifier.hpp\"\n\nusing namespace std;\n\nstring SVGOptimizer::MODULE_SEQUENCE;\n\nSVGOptimizer::SVGOptimizer (SVGTree *svg) : _svg(svg) {\n\t// optimizer modules available to the user; must be listed in default order\n//\t_moduleEntries.emplace_back(ModuleEntry(\"remove-ws\", util::make_unique<WSNodeRemover>()));\n\t_moduleEntries.emplace_back(\"simplify-text\", util::make_unique<TextSimplifier>());\n\t_moduleEntries.emplace_back(\"simplify-transform\", util::make_unique<TransformSimplifier>());\n\t_moduleEntries.emplace_back(\"group-attributes\", util::make_unique<AttributeExtractor>());\n\t_moduleEntries.emplace_back(\"collapse-groups\", util::make_unique<GroupCollapser>());\n\t_moduleEntries.emplace_back(\"remove-clippaths\", util::make_unique<RedundantElementRemover>());\n\t_moduleEntries.emplace_back(\"reassign-clippaths\", util::make_unique<ClipPathReassigner>());\n}\n\n\nvoid SVGOptimizer::execute () {\n\tif (!_svg || MODULE_SEQUENCE == \"none\")\n\t\treturn;\n\n\tvector<string> names = util::split(MODULE_SEQUENCE, \",\", true);\n\tset<string> removedNames;\n\tif (names.empty())\n\t\tnames.emplace_back(\"remove-clippaths\"); // default behaviour of previous dvisvgm releases\n\telse {\n\t\tauto it = names.begin();\n\t\tif (*it == \"all\" || (!it->empty() && it->at(0) == '-')) {\n\t\t\tif (*it == \"all\")\n\t\t\t\tit = names.erase(it);\n\t\t\t// add names of all optimizer modules\n\t\t\tfor (const auto &moduleEntry : _moduleEntries) {\n\t\t\t\tit = names.insert(it, moduleEntry.modname);\n\t\t\t\t++it;\n\t\t\t}\n\t\t}\n\t}\n\t// create sequence of module names to be considered\n\tfor (auto it=names.begin(); it != names.end();) {\n\t\tif ((*it)[0] == '-') {\n\t\t\tremovedNames.insert(it->substr(1));\n\t\t\tit = names.erase(it);\n\t\t}\n\t\telse {\n\t\t\tif ((*it)[0] == '+')\n\t\t\t\t*it = it->substr(1);\n\t\t\t++it;\n\t\t}\n\t}\n\tGroupCollapser::COMBINE_TRANSFORMS = (find(names.begin(), names.end(), \"simplify-transform\") != names.end());\n\t// execute optimizer modules\n\tfor (const string &name: names) {\n\t\tif (removedNames.find(name) == removedNames.end()) {\n\t\t\tif (OptimizerModule *module = getModule(name))\n\t\t\t\tmodule->execute(_svg->defsNode(), _svg->pageNode());\n\t\t}\n\t}\n}\n\n\nvoid SVGOptimizer::listModules (ostream &os) const {\n\tsize_t maxlen=0;\n\tmap<string, const char*> infos;\n\tfor (const auto &entry : _moduleEntries) {\n\t\tmaxlen = max(maxlen, entry.modname.length());\n\t\tinfos.emplace(entry.modname, entry.module->info());\n\t}\n\tfor (const auto &infopair : infos) {\n\t\tos << setw(maxlen) << left << infopair.first;\n\t\tos << \" | \" << infopair.second << '\\n';\n\t}\n}\n\n\n/** Checks if all module names given in a comma-separated list are known.\n *  @param[in] namestr comma-separated list of module names\n *  @param[out] unknownNames names not recognized\n *  @return true if all names are known */\nbool SVGOptimizer::checkModuleString (const string &namestr, vector<string> &unknownNames) const {\n\tunknownNames.clear();\n\tif (namestr.empty() || namestr == \"none\" || namestr == \"all\" || namestr.substr(0,4) == \"all,\")\n\t\treturn true;\n\tvector<string> givenNames = util::split(namestr, \",\");\n\tfor (string name : givenNames) {\n\t\tif (name[0] == '-' || name[0] == '+')\n\t\t\tname = name.substr(1);\n\t\tif (!name.empty() && !getModule(name))\n\t\t\tunknownNames.emplace_back(name);\n\t}\n\treturn unknownNames.empty();\n}\n\n\nOptimizerModule* SVGOptimizer::getModule (const string &name) const {\n\tauto it = algo::find_if(_moduleEntries, [&](const ModuleEntry &entry) {\n\t\treturn entry.modname == name;\n\t});\n\tif (it != _moduleEntries.end())\n\t\treturn it->module.get();\n\treturn nullptr;\n}\n\n"
  },
  {
    "path": "src/optimizer/SVGOptimizer.hpp",
    "content": "/*************************************************************************\n** SVGOptimizer.hpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <memory>\n#include <ostream>\n#include <set>\n#include <vector>\n#include \"OptimizerModule.hpp\"\n#include \"../XMLNode.hpp\"\n\nclass SVGTree;\n\nclass SVGOptimizer {\n\tstruct ModuleEntry {\n\t\tModuleEntry (std::string name, std::unique_ptr<OptimizerModule> mod)\n\t\t\t: modname(std::move(name)), module(std::move(mod)) {}\n\n\t\tstd::string modname;\n\t\tstd::unique_ptr<OptimizerModule> module;\n\t};\n\tpublic:\n\t\texplicit SVGOptimizer (SVGTree *svg=nullptr);\n\t\texplicit SVGOptimizer (SVGTree &svg) : SVGOptimizer(&svg) {}\n\t\tvoid execute ();\n\t\tvoid listModules (std::ostream &os) const;\n\t\tbool checkModuleString (const std::string &namestr, std::vector<std::string> &unknownNames) const;\n\n\t\tstatic std::string MODULE_SEQUENCE;\n\n\tprotected:\n\t\tOptimizerModule* getModule (const std::string &name) const;\n\n\tprivate:\n\t\tSVGTree *_svg;\n\t\tstd::vector<ModuleEntry> _moduleEntries;\n};\n\n\n\n\n"
  },
  {
    "path": "src/optimizer/TextSimplifier.cpp",
    "content": "/*************************************************************************\n** TextSimplifier.cpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <vector>\n#include \"AttributeExtractor.hpp\"\n#include \"TextSimplifier.hpp\"\n#include \"../algorithm.hpp\"\n#include \"../XMLNode.hpp\"\n\nusing namespace std;\n\n\nconst char* TextSimplifier::info () const {\n\treturn \"merge data of tspans into enclosing text elements\";\n}\n\n\n/** Returns all common inheritable attributes of multiple elements. */\nstatic XMLElement::Attributes common_inheritable_attributes (const vector<XMLElement*> &elements) {\n\tbool intersected=false;\n\tXMLElement::Attributes commonAttribs;\n\tfor (const XMLElement *elem : elements) {\n\t\tif (commonAttribs.empty()) {\n\t\t\tif (intersected)\n\t\t\t\tbreak;\n\t\t\tauto attribs = elem->attributes();\n\t\t\talgo::copy_if(attribs, back_inserter(commonAttribs), [](const XMLElement::Attribute &attrib) {\n\t\t\t\treturn attrib.inheritable();\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tfor (auto it = commonAttribs.begin(); it != commonAttribs.end();) {\n\t\t\t\tauto *attrib = elem->getAttribute(it->name);\n\t\t\t\tif (!attrib || attrib->value != it->value)\n\t\t\t\t\tit = commonAttribs.erase(it);\n\t\t\t\telse\n\t\t\t\t\t++it;\n\t\t\t}\n\t\t}\n\t\tintersected = true;\n\t}\n\treturn commonAttribs;\n}\n\n\n/** Returns all tspan elements of a text element if the latter doesn't contain\n *  any non-whitespace text nodes. Otherwise, the returned vector is empty.\n *  @param[in] textElement text element to check\n *  @return the tspan children of the text element */\nstatic vector<XMLElement*> get_tspans (XMLElement *textElement) {\n\tvector<XMLElement*> tspans;\n\tbool failed=false;\n\tfor (XMLNode *child : *textElement) {\n\t\tif (child->toWSNode() || child->toComment())\n\t\t\tcontinue;\n\t\tif (child->toText())\n\t\t\tfailed = true;\n\t\telse if (XMLElement *childElement = child->toElement()) {\n\t\t\tif (childElement->name() != \"tspan\")\n\t\t\t\tfailed = true;\n\t\t\telse\n\t\t\t\ttspans.push_back(childElement);\n\t\t}\n\t\tif (failed) {\n\t\t\ttspans.clear();\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn tspans;\n}\n\n\nvoid TextSimplifier::execute (XMLElement *context) {\n\tif (!context)\n\t\treturn;\n\tif (context->name() == \"text\") {\n\t\tvector<XMLElement*> tspans = get_tspans(context);\n\t\tvector<XMLElement::Attribute> attribs = common_inheritable_attributes(tspans);\n\t\tif (!tspans.empty() && !attribs.empty()) {\n\t\t\t// move all common tspan attributes to the parent text element\n\t\t\tfor (const auto &attr : attribs)\n\t\t\t\tcontext->addAttribute(attr.name, attr.value);\n\t\t\t// remove all common attributes from the tspan elements\n\t\t\tfor (XMLElement *tspan : tspans) {\n\t\t\t\tfor (const auto &attr : attribs)\n\t\t\t\t\ttspan->removeAttribute(attr.name);\n\t\t\t\t// unwrap the tspan if there are no remaining attributes\n\t\t\t\tif (tspan->attributes().empty())\n\t\t\t\t\tXMLElement::unwrap(tspan);\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tXMLNode *node = context->firstChild();\n\t\twhile (node) {\n\t\t\tXMLNode *next = node->next();  // keep safe pointer to next node\n\t\t\tif (XMLElement *elem = node->toElement())\n\t\t\t\texecute(elem);\n\t\t\tnode = next;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/optimizer/TextSimplifier.hpp",
    "content": "/*************************************************************************\n** TextSimplifier.hpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include \"OptimizerModule.hpp\"\n\nclass TextSimplifier : public OptimizerModule {\n\tpublic:\n\t\tvoid execute (XMLElement *defs, XMLElement *context) override {execute(context);}\n\t\tstatic void execute (XMLElement *context);\n\t\tconst char *info () const override;\n};\n"
  },
  {
    "path": "src/optimizer/TransformSimplifier.cpp",
    "content": "/*************************************************************************\n** TransformSimplifier.cpp                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include <cstdlib>\n#include \"TransformSimplifier.hpp\"\n#include \"../Matrix.hpp\"\n#include \"../utility.hpp\"\n#include \"../XMLNode.hpp\"\n#include \"../XMLString.hpp\"\n\nusing namespace std;\n\nconst char* TransformSimplifier::info () const {\n\treturn \"try to simplify and shorten the values of 'transform' attributes\";\n}\n\n\n/** Tries to simplify the transform attributes of the context node and all its descendants. */\nvoid TransformSimplifier::execute (XMLElement *context) {\n\tif (!context)\n\t\treturn;\n\tif (const char *transform = context->getAttributeValue(\"transform\")) {\n\t\tMatrix matrix = Matrix::parseSVGTransform(transform);\n\t\tif (!incorporateTransform(context, matrix)) {\n\t\t\tstring decomp = decompose(matrix);\n\t\t\tif (decomp.length() > matrix.toSVG().length())\n\t\t\t\tcontext->addAttribute(\"transform\", matrix.toSVG());\n\t\t\telse {\n\t\t\t\tif (decomp.empty())\n\t\t\t\t\tcontext->removeAttribute(\"transform\");\n\t\t\t\telse\n\t\t\t\t\tcontext->addAttribute(\"transform\", decomp);\n\t\t\t}\n\t\t}\n\t}\n\t// continue with child elements\n\tfor (XMLNode *child : *context) {\n\t\tif (XMLElement *elem = child->toElement())\n\t\t\texecute(elem);\n\t}\n}\n\n\n/** Tries to incorporate the translation and scaling components of the 'transform' attribute\n *  of a given element into the positional and/or size attributes of that element. If successful,\n *  the 'transform' attribute is either removed or simplified to a scale() matrix.\n *  Currently, only 'image' and 'rect' elements are considered.\n *  @param[in] elem element to check\n *  @param[in] matrix matrix representing the 'transform' attribute of the element\n *  @return true on success */\nbool TransformSimplifier::incorporateTransform (XMLElement *elem, const Matrix &matrix) {\n\tif ((elem->name() == \"image\" || elem->name() == \"rect\") && matrix.get(0, 1) == 0 && matrix.get(1, 0) == 0) {\n\t\tdouble tx = matrix.get(0, 2);\n\t\tdouble ty = matrix.get(1, 2);\n\t\tdouble sx = matrix.get(0, 0);\n\t\tdouble sy = matrix.get(1, 1);\n\t\tdouble x=0, y=0;\n\n\t\tif (const char *xstr = elem->getAttributeValue(\"x\"))\n\t\t\tx = strtod(xstr, nullptr);\n\t\tif (const char *ystr = elem->getAttributeValue(\"y\"))\n\t\t\ty = strtod(ystr, nullptr);\n\t\t// width and height attributes must not become negative. Hence, only apply the scaling\n\t\t// values if they are non-negative. Otherwise, keep a scaling matrix. Also retain scaling\n\t\t// transformations in image elements to avoid the need of attribute 'preserveAspectRatio'.\n\t\tif (sx < 0 || sy < 0 || elem->name() == \"image\") {\n\t\t\tx += (sx == 0 ? 0 : tx/sx);\n\t\t\ty += (sy == 0 ? 0 : ty/sy);\n\t\t\telem->addAttribute(\"transform\", \"scale(\"+XMLString(sx)+\",\"+XMLString(sy)+\")\");\n\t\t}\n\t\telse {\n\t\t\tx = x*sx + tx;\n\t\t\ty = y*sy + ty;\n\t\t\tif (const char *wstr = elem->getAttributeValue(\"width\"))\n\t\t\t\telem->addAttribute(\"width\", sx*strtod(wstr, nullptr));\n\t\t\tif (const char *hstr = elem->getAttributeValue(\"height\"))\n\t\t\t\telem->addAttribute(\"height\", sy*strtod(hstr, nullptr));\n\t\t\telem->removeAttribute(\"transform\");\n\t\t}\n\t\telem->addAttribute(\"x\", x);  // update x attribute\n\t\telem->addAttribute(\"y\", y);  // update y attribute\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n\nstatic string translate_cmd (double dx, double dy) {\n\tstring ret;\n\tXMLString dxstr(dx), dystr(dy);\n\tif (dxstr != \"0\" || dystr != \"0\") {\n\t\tret = \"translate(\"+dxstr;\n\t\tif (dystr != \"0\")\n\t\t\tret += \" \"+dystr;\n\t\tret += ')';\n\t}\n\treturn ret;\n}\n\n\nstatic string scale_cmd (double sx, double sy) {\n\tstring ret;\n\tXMLString sxstr(sx), systr(sy);\n\tif (sxstr != \"1\" || systr != \"1\") {\n\t\tret = \"scale(\"+sxstr;\n\t\tif (systr != sxstr)\n\t\t\tret += \" \"+systr;\n\t\tret += ')';\n\t}\n\treturn ret;\n}\n\n\nstatic string rotate_cmd (double rad) {\n\tstring ret;\n\tXMLString degstr(math::rad2deg(fmod(rad, math::TWO_PI)));\n\tif (degstr != \"0\")\n\t\tret = \"rotate(\"+degstr+\")\";\n\treturn ret;\n}\n\n\nstatic string skewx_cmd (double rad) {\n\tstring ret;\n\tXMLString degstr(math::rad2deg(fmod(rad, math::PI)));\n\tif (degstr != \"0\")\n\t\tret = \"skewX(\"+degstr+\")\";\n\treturn ret;\n}\n\n\nstatic string skewy_cmd (double rad) {\n\tstring ret;\n\tXMLString degstr(math::rad2deg(fmod(rad, math::PI)));\n\tif (degstr != \"0\")\n\t\tret = \"skewY(\"+degstr+\")\";\n\treturn ret;\n}\n\n\nstatic bool not_equal (double x, double y) {\n\treturn abs(x-y) >= 1e-6;\n}\n\n\n/** Decomposes a transformation matrix into a sequence of basic SVG transformations, i.e.\n *  translation, rotation, scaling, and skewing. The algorithm (QR-based decomposition)\n *  is taken from http://frederic-wang.fr/decomposition-of-2d-transform-matrices.html.\n *  @param[in] matrix matrix to decompose\n *  @return string containing the SVG transformation commands */\nstring TransformSimplifier::decompose (const Matrix &matrix) {\n\t// transformation matrix [a b c d e f] according to\n\t// https://www.w3.org/TR/SVG11/coords.html#EstablishingANewUserSpace\n\tdouble a = matrix.get(0, 0);\n\tdouble b = matrix.get(1, 0);\n\tdouble c = matrix.get(0, 1);\n\tdouble d = matrix.get(1, 1);\n\tdouble e = matrix.get(0, 2);\n\tdouble f = matrix.get(1, 2);\n\tstring ret = translate_cmd(e, f);\n\tdouble delta = a*d - b*c;\n\tif (not_equal(a, 0) || not_equal(b, 0)) {\n\t\tdouble r = sqrt(a*a + b*b);\n\t\tret += rotate_cmd(b > 0 ? acos(a/r) : -acos(a/r));\n\t\tret += scale_cmd(r, delta/r);\n\t\tret += skewx_cmd(atan((a*c + b*d)/(r*r)));\n\t}\n\telse if (not_equal(c, 0) || not_equal(d, 0)) {\n\t\tdouble s = sqrt(c*c + d*d);\n\t\tret += rotate_cmd(math::HALF_PI - (d > 0 ? acos(-c/s) : -acos(c/s)));\n\t\tret += scale_cmd(delta/s, s);\n\t\tret += skewy_cmd(atan((a*c + b*d)/(s*s)));\n\t}\n\telse\n\t\tret += scale_cmd(0, 0);\n\treturn ret;\n}\n\n"
  },
  {
    "path": "src/optimizer/TransformSimplifier.hpp",
    "content": "/*************************************************************************\n** TransformSimplifier.hpp                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <string>\n#include \"OptimizerModule.hpp\"\n\nclass Matrix;\n\nclass TransformSimplifier : public OptimizerModule {\n\tpublic:\n\t\tvoid execute (XMLElement*, XMLElement *context) override {execute(context);}\n\t\tvoid execute (XMLElement *context);\n\t\tconst char* info () const override;\n\n\tprotected:\n\t\tbool incorporateTransform (XMLElement *elem, const Matrix &matrix);\n\t\tstd::string decompose (const Matrix &matrix);\n};\n"
  },
  {
    "path": "src/optimizer/WSNodeRemover.cpp",
    "content": "/*************************************************************************\n** WSNodeRemover.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"WSNodeRemover.hpp\"\n#include \"../XMLNode.hpp\"\n\nconst char* WSNodeRemover::info () const {\n\treturn \"remove redundant whitespace nodes\";\n}\n\n\nvoid WSNodeRemover::execute (XMLElement *context) {\n\tif (!context)\n\t\treturn;\n\tbool removeWS = context->name() != \"text\" && context->name() != \"tspan\";\n\tXMLNode *child = context->firstChild();\n\twhile (child) {\n\t\tif (removeWS && child->toWSNode()) {\n\t\t\tXMLNode *next = child->next();\n\t\t\tXMLElement::detach(child);\n\t\t\tchild = next;\n\t\t\tcontinue;\n\t\t}\n\t\tif (XMLElement *elem = child->toElement())\n\t\t\texecute(elem);\n\t\tchild = child->next();\n\t}\n}\n"
  },
  {
    "path": "src/optimizer/WSNodeRemover.hpp",
    "content": "/*************************************************************************\n** WSNodeRemover.hpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include \"OptimizerModule.hpp\"\n\nclass WSNodeRemover : public OptimizerModule {\n\tpublic:\n\t\tvoid execute (XMLElement*, XMLElement *context) override {execute(context);};\n\t\tvoid execute (XMLElement *context);\n\t\tconst char* info () const override;\n};\n"
  },
  {
    "path": "src/options.dtd",
    "content": "<?xml encoding=\"UTF-8\"?>\n<!-- *********************************************************************\n** options.dtd                                                          **\n**                                                                      **\n** This file is part of dvisvgm - a fast DVI to SVG converter           **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n***********************************************************************-->\n\n<!ELEMENT cmdline (program,options)>\n<!ATTLIST cmdline\n  class NMTOKEN #REQUIRED>\n\n<!ELEMENT program (usage+,description,copyright)>\n<!ELEMENT options (section)+>\n<!ELEMENT name (#PCDATA)>\n<!ELEMENT usage (#PCDATA)>\n<!ELEMENT copyright (#PCDATA)>\n\n<!ELEMENT section (option)+>\n<!ATTLIST section\n  title CDATA #REQUIRED>\n\n<!ELEMENT option (arg?,description)>\n<!ATTLIST option\n  long ID #REQUIRED\n  short NMTOKEN #IMPLIED\n  if CDATA #IMPLIED>\n\n<!ELEMENT arg EMPTY>\n<!ATTLIST arg\n  default CDATA #IMPLIED\n  name CDATA #REQUIRED\n  optional (yes|no) #IMPLIED\n  type NMTOKEN #REQUIRED>\n\n<!ELEMENT description (#PCDATA)>\n"
  },
  {
    "path": "src/options.xml",
    "content": "<?xml version=\"1.0\"?>\n<!-- *********************************************************************\n** options.xml                                                          **\n**                                                                      **\n** This file is part of dvisvgm - a fast DVI to SVG converter           **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n***********************************************************************-->\n<!DOCTYPE cmdline SYSTEM \"options.dtd\">\n\n<cmdline class=\"CommandLine\">\n  <program>\n    <usage>[options] dvifile</usage>\n    <usage>--eps [options] epsfile</usage>\n    <usage>--pdf [options] pdffile</usage>\n    <description>This program converts DVI files, as created by TeX/LaTeX, as well as\\nEPS and PDF files to the XML-based scalable vector graphics format SVG.</description>\n    <copyright>Copyright (C) 2005-2025 Martin Gieseking &lt;martin.gieseking@uos.de></copyright>\n  </program>\n  <options>\n    <section title=\"Input options\">\n      <option long=\"page\" short=\"p\">\n        <arg type=\"string\" name=\"ranges\" default=\"1\"/>\n        <description>choose page(s) to convert</description>\n      </option>\n      <option long=\"fontmap\" short=\"m\">\n        <arg type=\"string\" name=\"filenames\"/>\n        <description>evaluate (additional) font map files</description>\n      </option>\n      <option long=\"eps\" short=\"E\" if=\"!defined(DISABLE_GS)\">\n        <description>convert EPS file to SVG</description>\n      </option>\n      <option long=\"pdf\" short=\"P\" if=\"!defined(DISABLE_GS)\">\n        <description>convert PDF file to SVG</description>\n      </option>\n      <option long=\"stdin\">\n        <description>read input file from stdin</description>\n      </option>\n    </section>\n    <section title=\"SVG output options\">\n      <option long=\"bbox\" short=\"b\">\n        <arg type=\"string\" name=\"size\" default=\"min\"/>\n        <description>set size of bounding box</description>\n      </option>\n      <option long=\"bitmap-format\" short=\"B\" if=\"!defined(DISABLE_GS)\">\n        <arg type=\"string\" name=\"fmt\" default=\"jpeg\"/>\n        <description>set format used to embed PS/EPS bitmaps</description>\n      </option>\n      <option long=\"clipjoin\" short=\"j\" if=\"!defined(DISABLE_GS)\">\n        <description>compute intersection of clipping paths</description>\n      </option>\n      <option long=\"colornames\">\n        <description>prefer color names to RGB values if possible</description>\n      </option>\n      <option long=\"comments\">\n        <description>add comments with additional information</description>\n      </option>\n      <option long=\"currentcolor\">\n        <arg type=\"string\" name=\"color\" default=\"#000\" optional=\"yes\"/>\n        <description>replace given color with 'currentColor'</description>\n      </option>\n      <option long=\"embed-bitmaps\">\n        <description>prevent references to external bitmap files</description>\n      </option>\n      <option long=\"font-format\" short=\"f\" if=\"!defined(DISABLE_WOFF)\">\n        <arg type=\"string\" name=\"format\" default=\"svg\"/>\n        <description>set file format of embedded fonts</description>\n      </option>\n      <option long=\"grad-overlap\" if=\"!defined(DISABLE_GS)\">\n        <description>create overlapping color gradient segments</description>\n      </option>\n      <option long=\"grad-segments\" if=\"!defined(DISABLE_GS)\">\n        <arg type=\"int\" name=\"number\" default=\"20\"/>\n        <description>number of color gradient segments per row</description>\n      </option>\n      <option long=\"grad-simplify\" if=\"!defined(DISABLE_GS)\">\n        <arg type=\"double\" name=\"delta\" default=\"0.05\"/>\n        <description>reduce level of detail for small segments</description>\n      </option>\n      <option long=\"linkmark\" short=\"L\">\n        <arg type=\"string\" name=\"style\" default=\"box\"/>\n        <description>select how to mark hyperlinked areas</description>\n      </option>\n      <option long=\"optimize\" short=\"O\">\n        <arg name=\"modules\" type=\"string\" default=\"all\" optional=\"yes\"/>\n        <description>perform several SVG optimizations</description>\n      </option>\n      <option long=\"output\" short=\"o\">\n        <arg type=\"string\" name=\"pattern\"/>\n        <description>set name pattern of output files</description>\n      </option>\n      <option long=\"precision\" short=\"d\">\n        <arg type=\"int\" name=\"number\" default=\"0\"/>\n        <description>set number of decimal points (0-6)</description>\n      </option>\n      <option long=\"relative\" short=\"R\">\n        <description>create relative path commands</description>\n      </option>\n      <option long=\"stdout\" short=\"s\">\n        <description>write SVG output to stdout</description>\n      </option>\n      <option long=\"tmpdir\">\n        <arg type=\"string\" name=\"path\" optional=\"yes\"/>\n        <description>set/print the directory for temporary files</description>\n      </option>\n      <option long=\"no-fonts\" short=\"n\">\n        <arg type=\"int\" name=\"variant\" default=\"0\" optional=\"yes\"/>\n        <description>draw glyphs by using path elements</description>\n      </option>\n      <option long=\"no-merge\">\n        <description>don't merge adjacent text elements</description>\n      </option>\n      <option long=\"no-styles\">\n        <description>don't use CSS styles to reference fonts</description>\n      </option>\n      <option long=\"zip\" short=\"z\">\n        <arg type=\"int\" name=\"level\" default=\"9\" optional=\"yes\"/>\n        <description>create compressed .svgz file</description>\n      </option>\n    </section>\n    <section title=\"SVG transformations\">\n      <option long=\"rotate\" short=\"r\">\n        <arg type=\"double\" name=\"angle\"/>\n        <description>rotate page content clockwise</description>\n      </option>\n      <option long=\"scale\" short=\"c\">\n        <arg type=\"string\" name=\"sx[,sy]\"/>\n        <description>scale page content</description>\n      </option>\n      <option long=\"translate\" short=\"t\">\n        <arg type=\"string\" name=\"tx[,ty]\"/>\n        <description>shift page content</description>\n      </option>\n      <option long=\"transform\" short=\"T\">\n        <arg type=\"string\" name=\"commands\"/>\n        <description>transform page content</description>\n      </option>\n      <option long=\"zoom\" short=\"Z\">\n        <arg type=\"double\" name=\"factor\" default=\"1.0\"/>\n        <description>zoom page content</description>\n      </option>\n    </section>\n    <section title=\"Processing options\">\n      <option long=\"cache\" short=\"C\">\n        <arg type=\"string\" name=\"dir\" optional=\"yes\"/>\n        <description>set/print path of cache directory</description>\n      </option>\n      <option long=\"debug-glyphs\" if=\"defined(TTFDEBUG)\">\n        <description>create PS files for all glyphs converted to TTF</description>\n      </option>\n      <option long=\"exact-bbox\" short=\"e\">\n        <description>compute exact glyph bounding boxes</description>\n      </option>\n      <option long=\"keep\">\n        <description>keep temporary files</description>\n      </option>\n      <option long=\"libgs\" if=\"!defined(HAVE_LIBGS) &amp;&amp; !defined(DISABLE_GS)\">\n        <arg name=\"filename\" type=\"string\"/>\n        <description>set name of Ghostscript shared library</description>\n      </option>\n      <option long=\"mag\" short=\"M\">\n        <arg type=\"double\" name=\"factor\" default=\"4\"/>\n        <description>magnification of Metafont output</description>\n      </option>\n      <option long=\"no-mktexmf\">\n        <description>don't try to create missing fonts</description>\n      </option>\n      <option long=\"no-specials\" short=\"S\">\n        <arg type=\"string\" name=\"prefixes\" optional=\"yes\"/>\n        <description>don't process [selected] specials</description>\n      </option>\n      <option long=\"page-hashes\" short=\"H\">\n        <arg type=\"string\" name=\"params\" optional=\"yes\" default=\"xxh64\"/>\n        <description>activate usage of page hashes</description>\n      </option>\n      <option long=\"trace-all\" short=\"a\">\n        <arg name=\"retrace\" type=\"bool\" optional=\"yes\" default=\"false\"/>\n        <description>trace all glyphs of bitmap fonts</description>\n      </option>\n    </section>\n    <section title=\"Message options\">\n      <option long=\"color\">\n        <description>colorize messages</description>\n      </option>\n      <option long=\"help\" short=\"h\">\n        <arg name=\"mode\" type=\"int\" optional=\"yes\" default=\"0\"/>\n        <description>print this summary of options and exit</description>\n      </option>\n      <option long=\"list-specials\" short=\"l\">\n        <description>print supported special sets and exit</description>\n      </option>\n      <option long=\"message\">\n        <arg name=\"text\" type=\"string\"/>\n        <description>print message text after writing an SVG file</description>\n      </option>\n      <option long=\"progress\">\n        <arg name=\"delay\" type=\"double\" optional=\"yes\" default=\"0.5\"/>\n        <description>enable progress indicator</description>\n      </option>\n      <option long=\"verbosity\" short=\"v\">\n        <arg type=\"unsigned\" name=\"level\" default=\"15\"/>\n        <description>set verbosity level (0-15)</description>\n      </option>\n      <option long=\"version\" short=\"V\">\n        <arg type=\"bool\" name=\"extended\" optional=\"yes\" default=\"false\"/>\n        <description>print version and exit</description>\n      </option>\n    </section>\n  </options>\n</cmdline>\n"
  },
  {
    "path": "src/psdefs.cpp",
    "content": "/*************************************************************************\n** psdefs.cpp                                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"PSInterpreter.hpp\"\n\nconst char *PSInterpreter::PSDEFS =\n\"<</Install{matrix setmatrix}/HWResolution[72 72]/PageSize[10000 10000]/Imaging\"\n\"BBox null>>setpagedevice/@dodraw true store/@GD globaldict def/@SD systemdict \"\n\"def/@UD userdict def @GD/@nulldev false put @GD/@patcnt 0 put true setglobal @\"\n\"SD/:setpagedevice @SD/setpagedevice get put @SD/:save @SD/save get put @SD/:re\"\n\"store @SD/restore get put @SD/:gsave @SD/gsave get put @SD/:grestore @SD/grest\"\n\"ore get put @SD/:grestoreall @SD/grestoreall get put @SD/:newpath @SD/newpath \"\n\"get put @SD/:stroke @SD/stroke get put @SD/:fill @SD/fill get put @SD/:eofill \"\n\"@SD/eofill get put @SD/:clip @SD/clip get put @SD/:eoclip @SD/eoclip get put @\"\n\"SD/:charpath @SD/charpath get put @SD/:show @SD/show get put @SD/:stringwidth \"\n\"@SD/stringwidth get put @SD/:nulldevice @SD/nulldevice get put @SD/:image @SD/\"\n\"image get put @SD/:colorimage @SD/colorimage get put @SD/.setopacityalpha know\"\n\"n not{@SD/.setopacityalpha{pop}put}if @SD/.setshapealpha known not{@SD/.setsha\"\n\"pealpha{pop}put}if @SD/.setblendmode known not{@SD/.setblendmode{pop}put}if @S\"\n\"D/prseq{[exch 1 add 1 roll]{=only( )print}forall}put @SD/prcmd{( )exch(\\\\ndvi.\"\n\")3{print}repeat prseq(| )print}put @SD/cvxall{{cvx}forall}put @SD/defpr{[exch/\"\n\"copy cvx @SD 4 index[/get/exec]cvxall 5 index 3 index dup length string cvs/pr\"\n\"cmd cvx]cvx bind def}put @SD/querypos{{currentpoint}stopped{$error/newerror fa\"\n\"lse put}{2(querypos)prcmd}ifelse}put @SD/applyscalevals{1 0 dtransform exch du\"\n\"p mul exch dup mul add sqrt 0 1 dtransform exch dup mul exch dup mul add sqrt \"\n\"1 0 dtransform dup mul exch dup dup mul 3 -1 roll add dup 0 eq{pop}{sqrt div}i\"\n\"felse 3(applyscalevals)prcmd}put @SD/prpath{{2(moveto)prcmd}{2(lineto)prcmd}{6\"\n\"(curveto)prcmd}{0(closepath)prcmd}pathforall}put @SD/nulldevice{@GD/@nulldev t\"\n\"rue put :nulldevice 1 1(setnulldevice)prcmd}put @SD/charpath{/@dodraw false st\"\n\"ore :charpath/@dodraw true store}put @SD/stringwidth{/@dodraw false store :str\"\n\"ingwidth/@dodraw true store}put @SD/show{@dodraw @GD/@nulldev get not and{dup \"\n\":gsave currentpoint 2{50 mul exch}repeat :newpath moveto 50 50/scale sysexec t\"\n\"rue charpath fill :grestore/@dodraw false store :show/@dodraw true store}{:sho\"\n\"w}ifelse}put @SD/varxyshow{dup 0 ge{<</chr 3 -1 roll string/prc 5 -1 roll/arr \"\n\"7 -1 roll/str 9 -1 roll/idx 0>>begin 0 chr length str length 1 sub{str exch ch\"\n\"r length getinterval/chr exch store :gsave chr show :grestore currentpoint prc\"\n\" moveto/idx idx 1 add store}for end}{pop pop show}ifelse}put @SD/xyshow{dup du\"\n\"p type/arraytype eq exch length 0 gt and{dup length 2 idiv 2 index length exch\"\n\" idiv}{-1}ifelse{exch arr idx 2 mul get add exch arr idx 2 mul 1 add get add}e\"\n\"xch varxyshow}put @SD/xshow{dup dup type/arraytype eq exch length 0 gt and{dup\"\n\" length 2 index length exch idiv}{-1}ifelse{exch arr idx get add exch}exch var\"\n\"xyshow}put @SD/yshow{dup dup type/arraytype eq exch length 0 gt and{dup length\"\n\" 2 index length exch idiv}{-1}ifelse{arr idx get add}exch varxyshow}put @SD/aw\"\n\"idthshow{{1 string dup 0 5 index put :gsave show :grestore pop 0 rmoveto 3 ind\"\n\"ex eq{4 index 4 index rmoveto}if 1 index 1 index rmoveto}exch cshow 5{pop}repe\"\n\"at}put @SD/widthshow{0 0 3 -1 roll awidthshow}put @SD/ashow{0 0 0 6 3 roll awi\"\n\"dthshow}put @SD/newpath{:newpath 1 1(newpath)prcmd}put @SD/stroke{@dodraw @GD/\"\n\"@nulldev get not and{prcolor 0 1(newpath)prcmd prpath 0(stroke)prcmd :newpath}\"\n\"{:stroke}ifelse}put @SD/fill{@dodraw @GD/@nulldev get not and{prcolor 0 1(newp\"\n\"ath)prcmd prpath 0(fill)prcmd :newpath}{:fill}ifelse}put @SD/eofill{@dodraw @G\"\n\"D/@nulldev get not and{prcolor 0 1(newpath)prcmd prpath 0(eofill)prcmd :newpat\"\n\"h}{:eofill}ifelse}put/.fillstroke{:gsave fill :grestore .swapcolors stroke .sw\"\n\"apcolors}bind def/.eofillstroke{:gsave eofill :grestore .swapcolors stroke .sw\"\n\"apcolors}bind def @SD/clip{:clip @GD/@nulldev get not{0 1(newpath)prcmd prpath\"\n\" 0(clip)prcmd}if}put @SD/eoclip{:eoclip @GD/@nulldev get not{0 1(newpath)prcmd\"\n\" prpath 0(eoclip)prcmd}if}put @SD/shfill{begin currentdict/ShadingType known c\"\n\"urrentdict/ColorSpace known and currentdict/DataSource known and currentdict/F\"\n\"unction known not and ShadingType 4 ge{DataSource type/arraytype eq{<</DeviceG\"\n\"ray 1/DeviceRGB 3/DeviceCMYK 4/bgknown currentdict/Background known/bbknown cu\"\n\"rrentdict/BBox known>>begin currentdict ColorSpace known{ShadingType ColorSpac\"\n\"e load bgknown{1 Background aload pop}{0}ifelse bbknown{1 BBox aload pop}{0}if\"\n\"else ShadingType 5 eq{VerticesPerRow}if DataSource aload length 4 add bgknown{\"\n\"ColorSpace load add}if bbknown{4 add}if ShadingType 5 eq{1 add}if(shfill)prcmd\"\n\"}if end}if}if end}put @SD/image{dup type/dicttype eq{dup}{<</Width 6 index/Hei\"\n\"ght 7 index/colorimg false>>}ifelse @execimg}put @SD/colorimage{<<2 index{/Wid\"\n\"th 2 index 7 add index/Height 4 index 8 add index}{/Width 8 index/Height 9 ind\"\n\"ex}ifelse/colorimg true>>@execimg}put/@imgbase(./)def/@imgdevice(jpeg)def/@exe\"\n\"cimg{@GD/@imgcnt 2 copy .knownget{1 add}{1}ifelse put begin<</imgid @GD/@imgcn\"\n\"t get/ispng @imgdevice 0 3 getinterval(png)eq dup/suffix exch{(.png)}{(.jpg)}i\"\n\"felse/colorimg currentdict/colorimg .knownget dup{pop}if/colordev 1 index curr\"\n\"entcolorspace dup length 1 ne exch 0 get/DeviceGray ne or or>>begin @imgdevice\"\n\"(png)ne @imgdevice(jpeg)ne and{@imgdevice cvn}{colordev{ispng{/png16m}{/jpeg}i\"\n\"felse}{ispng{/pnggray}{/jpeggray}ifelse}ifelse}ifelse devicedict exch known{:g\"\n\"save matrix currentmatrix/currentcolorspace sysexec<</OutputDevice @imgdevice/\"\n\"OutputFile @imgbase imgid 20 string cvs strconcat suffix strconcat/PageSize[Wi\"\n\"dth Height]/UseFastColor true ispng{@imgdevice(pngmonod)eq{/MinFeatureSize whe\"\n\"re{pop/MinFeatureSize MinFeatureSize}if}if}{/JPEGQ where{pop/JPEGQ JPEGQ}if}if\"\n\"else>>:setpagedevice/setcolorspace sysexec/setmatrix sysexec[Width 0 0 Height \"\n\"neg 0 Height]/setmatrix sysexec colorimg{:colorimage}{:image}ifelse/copypage s\"\n\"ysexec<</OutputDevice @imgdevice/OutputFile()>>:setpagedevice :grestore imgid \"\n\"Width Height 3(image)prcmd}{pop colorimg{:colorimage}{:image}ifelse}ifelse end\"\n\" end}def/@rect{4 -2 roll moveto exch dup 0 rlineto exch 0 exch rlineto neg 0 r\"\n\"lineto closepath}bind def/@rectcc{4 -2 roll moveto 2 copy 0 lt exch 0 lt xor{d\"\n\"up 0 exch rlineto exch 0 rlineto neg 0 exch rlineto}{exch dup 0 rlineto exch 0\"\n\" exch rlineto neg 0 rlineto}ifelse closepath}bind def @SD/rectclip{:newpath du\"\n\"p type/arraytype eq{aload length 4 idiv{@rectcc}repeat}{@rectcc}ifelse clip :n\"\n\"ewpath}put @SD/rectfill{:gsave :newpath dup type/arraytype eq{aload length 4 i\"\n\"div{@rectcc}repeat}{@rectcc}ifelse fill :grestore}put @SD/rectstroke{gsave :ne\"\n\"wpath dup type/arraytype eq{aload length 4 idiv{@rect}repeat}{@rect}ifelse str\"\n\"oke grestore}put false setglobal @SD readonly pop/initclip 0 defpr/clippath 0 \"\n\"defpr/sysexec{@SD exch get exec}def/adddot{dup length 1 add string dup 0 46 pu\"\n\"t dup 3 -1 roll 1 exch putinterval}def/setlinewidth{dup/setlinewidth sysexec 1\"\n\"(setlinewidth)prcmd}def/setlinecap 1 defpr/setlinejoin 1 defpr/setmiterlimit 1\"\n\" defpr/setdash{mark 3 1 roll 2 copy/setdash sysexec exch aload length 1 add -1\"\n\" roll counttomark(setdash)prcmd pop}def/@setpagedevice{pop<<>>:setpagedevice m\"\n\"atrix setmatrix newpath 0(setpagedevice)prcmd}def/@checknulldev{@GD/@nulldev g\"\n\"et{currentpagedevice maxlength 0 ne{@GD/@nulldev false put 0 1(setnulldevice)p\"\n\"rcmd}if}if}def/prcolor{currentcolorspace @setcolorspace currentrgbcolor 3(setr\"\n\"gbcolor)prcmd}def/printgstate{@dodraw @GD/@nulldev get not and{matrix currentm\"\n\"atrix aload pop 6(setmatrix)prcmd applyscalevals currentlinewidth 1(setlinewid\"\n\"th)prcmd currentlinecap 1(setlinecap)prcmd currentlinejoin 1(setlinejoin)prcmd\"\n\" currentmiterlimit 1(setmiterlimit)prcmd revision dup 952 lt{pop}{.currentblen\"\n\"dmode .setblendmode 952 eq{.currentopacityalpha .setopacityalpha .currentshape\"\n\"alpha .setshapealpha}{.currentalphaisshape{1}{0}ifelse 1(setalphaisshape)prcmd\"\n\" .currentstrokeconstantalpha 1(setstrokeconstantalpha)prcmd .currentfillconsta\"\n\"ntalpha 1(setfillconstantalpha)prcmd}ifelse}ifelse prcolor currentdash mark 3 \"\n\"1 roll exch aload length 1 add -1 roll counttomark(setdash)prcmd pop}if}def/st\"\n\"rconcat{exch dup length 2 index length add string dup dup 4 2 roll copy length\"\n\" 4 -1 roll putinterval}def/setgstate{/setgstate sysexec printgstate}def/save{@\"\n\"UD begin/@saveID vmstatus pop pop def end :save @saveID 1(save)prcmd}def/resto\"\n\"re{:restore @checknulldev printgstate @UD/@saveID known{@UD begin @saveID end}\"\n\"{0}ifelse 1(restore)prcmd}def/gsave 0 defpr/grestore{:grestore @checknulldev p\"\n\"rintgstate 0(grestore)prcmd}def/grestoreall{:grestoreall @checknulldev setstat\"\n\"e 0(grestoreall)prcmd}def/rotate{dup type/arraytype ne @dodraw and{dup 1(rotat\"\n\"e)prcmd}if/rotate sysexec applyscalevals}def/scale{dup type/arraytype ne @dodr\"\n\"aw and{2 copy 2(scale)prcmd}if/scale sysexec applyscalevals}def/translate{dup \"\n\"type/arraytype ne @dodraw and{2 copy 2(translate)prcmd}if/translate sysexec}de\"\n\"f/setmatrix{dup/setmatrix sysexec @dodraw{aload pop 6(setmatrix)prcmd applysca\"\n\"levals}{pop}ifelse}def/initmatrix{matrix setmatrix}def/concat{matrix currentma\"\n\"trix matrix concatmatrix setmatrix}def/makepattern{gsave<</mx 3 -1 roll>>begin\"\n\"<</XUID[1000000 @patcnt]>>copy mx/makepattern sysexec dup begin PatternType 2 \"\n\"lt{PatternType @patcnt BBox aload pop XStep YStep PaintType mx aload pop 15(ma\"\n\"kepattern)prcmd :newpath matrix setmatrix dup PaintProc 0 1(makepattern)prcmd \"\n\"@GD/@patcnt @patcnt 1 add put}if end end grestore}def/setpattern{dup begin Pat\"\n\"ternType end 1 eq{begin PaintType 1 eq{XUID aload pop exch pop 1}{:gsave[curre\"\n\"ntcolorspace aload length -1 roll pop]/setcolorspace sysexec/setcolor sysexec \"\n\"XUID aload pop exch pop currentrgbcolor :grestore 4}ifelse(setpattern)prcmd cu\"\n\"rrentcolorspace 0 get/Pattern ne{[/Pattern currentcolorspace]/setcolorspace sy\"\n\"sexec}if currentcolorspace @setcolorspace end}{/setpattern sysexec}ifelse}def/\"\n\"setcolor{dup type/dicttype eq{setpattern}{/setcolor sysexec/currentrgbcolor sy\"\n\"sexec setrgbcolor}ifelse}def/setcolorspace{dup/setcolorspace sysexec @setcolor\"\n\"space}def/@setcolorspace{dup type/arraytype eq{0 get}if/Pattern eq{1}{0}ifelse\"\n\" 1(setcolorspace)prcmd}def/setgray 1 defpr/setcmykcolor 4 defpr/sethsbcolor 3 \"\n\"defpr/setrgbcolor 3 defpr/.setalphaisshape{@SD/.setalphaisshape known{dup/.set\"\n\"alphaisshape sysexec}if{1}{0}ifelse 1(setalphaisshape)prcmd}bind def/.setfillc\"\n\"onstantalpha{@SD/.setfillconstantalpha known{dup/.setfillconstantalpha sysexec\"\n\"}if 1(setfillconstantalpha)prcmd}bind def/.setstrokeconstantalpha{@SD/.setstro\"\n\"keconstantalpha known{dup/.setstrokeconstantalpha sysexec}if 1(setstrokeconsta\"\n\"ntalpha)prcmd}bind def/.setopacityalpha{false .setalphaisshape dup .setfillcon\"\n\"stantalpha .setstrokeconstantalpha}bind def/.setshapealpha{true .setalphaissha\"\n\"pe dup .setfillconstantalpha .setstrokeconstantalpha}bind def/.setblendmode{du\"\n\"p/.setblendmode sysexec<</Normal 0/Compatible 0/Multiply 1/Screen 2/Overlay 3/\"\n\"SoftLight 4/HardLight 5/ColorDodge 6/ColorBurn 7/Darken 8/Lighten 9/Difference\"\n\" 10/Exclusion 11/Hue 12/Saturation 13/Color 14/Luminosity 15/CompatibleOverpri\"\n\"nt 16>>exch get 1(setblendmode)prcmd}def/@pdfpagecount{(r)file runpdfbegin pdf\"\n\"pagecount runpdfend}def/@pdfpagebox{(r)file runpdfbegin dup dup 1 lt exch pdfp\"\n\"agecount gt or{pop}{pdfgetpage/MediaBox pget pop aload pop}ifelse runpdfend}de\"\n\"f DELAYBIND{.bindnow}if \";\n\n"
  },
  {
    "path": "src/ttf/CmapTable.cpp",
    "content": "/*************************************************************************\n** CmapTable.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"CmapTable.hpp\"\n#include \"TTFWriter.hpp\"\n#include \"../Font.hpp\"\n#include \"../utility.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\nvoid CmapTable::write (ostream &os) const {\n\twriteUInt16(os, 0);  // version\n\twriteUInt16(os, 2);  // number of encoding tables\n\n\tconst RangeMap &charmap = ttfWriter()->getUnicodeCharMap();\n\tbool isUCS2 = (charmap.maxKey() <= 0xFFFF);\n\tuint32_t offset = 4+2*8;  // offset to subtable\n\n\twriteUInt16(os, 0);  // platform ID 0 = Unicode\n\twriteUInt16(os, isUCS2 ? 3 : 4);  // encoding ID (Unicode 2.0, UCS-2 or UCS-4)\n\twriteUInt32(os, offset);\n\n\twriteUInt16(os, 3);  // platform ID 3 = Windows\n\twriteUInt16(os, isUCS2 ? 1 : 10);  // encoding ID (UCS-2 or UCS-4)\n\twriteUInt32(os, offset);  // platform ID 0 = Unicode\n\n\tif (isUCS2)\n\t\twriteSubTableFormat4(os, charmap);\n\telse\n\t\twriteSubTableFormat12(os, charmap);\n}\n\n\n/** Writes mapping data in subtable format 0 (byte encoding table). */\nvoid CmapTable::writeSubTableFormat0 (ostream &os, const RangeMap &charmap) const {\n\twriteUInt16(os, 0);        // subtable format\n\twriteUInt16(os, 3*2+256);  // table length\n\twriteUInt16(os, 0);        // language: none\n\tvector<uint8_t> indexes(256, 0);\n\tint count=1;\n\tfor (auto cppair : charmap) {\n\t\tif (cppair.first > 255 || count > 255)\n\t\t\tbreak;\n\t\tindexes[cppair.first] = uint8_t(count++);\n\t}\n\tfor (uint8_t c : indexes)\n\t\twriteUInt8(os, c);\n}\n\n\n/** Writes mapping data in subtable format 4 (segment mapping to delta values, UCS-2). */\nvoid CmapTable::writeSubTableFormat4 (ostream &os, const RangeMap &charmap) const {\n\tuint16_t numSegments = charmap.numRanges()+1;\n\tuint16_t searchRange = 1 << (util::ilog2(numSegments)+1);\n\tuint16_t entrySelector = util::ilog2(searchRange/2);\n\tuint16_t rangeShift = 2*numSegments - searchRange;\n\n\twriteUInt16(os, 4);        // subtable format\n\twriteUInt16(os, 8*2+4*2*numSegments); // table length\n\twriteUInt16(os, 0);        // language: none\n\twriteUInt16(os, numSegments*2);\n\twriteUInt16(os, searchRange);\n\twriteUInt16(os, entrySelector);\n\twriteUInt16(os, rangeShift);\n\tfor (size_t i=0; i < charmap.numRanges(); i++)\n\t\twriteUInt16(os, charmap.getRange(i).max());  // end character code of current segment\n\twriteUInt16(os, 0xFFFF);   // final end character code\n\twriteUInt16(os, 0);        // reserved pad\n\tfor (size_t i=0; i < charmap.numRanges(); i++)\n\t\twriteUInt16(os, charmap.getRange(i).min());  // start character code of current segment\n\twriteUInt16(os, 0xFFFF);   // final start character code\n\tint count=1;\n\tfor (size_t i=0; i < charmap.numRanges(); i++) {\n\t\tconst auto &range = charmap.getRange(i);\n\t\tint cstart = range.min();\n\t\twriteInt16(os, count-cstart); // idDelta of current segment\n\t\tcount += range.numKeys();\n\t}\n\twriteUInt16(os, 1);    // final idRange (maps 0xFFFF to 0)\n\tfor (uint16_t i=0; i < numSegments; i++)\n\t\twriteUInt16(os, 0); // idRangeOffsets = 0 (no offsets into glyphIdArray required)\n}\n\n\n/** Writes mapping data in subtable format 6 (trimmed table mapping, UCS-2). */\nvoid CmapTable::writeSubTableFormat6 (ostream &os, const RangeMap &charmap) const {\n\twriteUInt16(os, 6); // subtable format\n\twriteUInt16(os, 5*2+2*charmap.numValues()); // table length\n\twriteUInt16(os, 0); // language: none\n\twriteUInt16(os, charmap.getRange(0).min()); // first character code\n\twriteUInt16(os, charmap.getRange(0).numKeys());\n\tfor (size_t i=0; i < charmap.getRange(0).numKeys(); i++)\n\t\twriteUInt16(os, i+1);\n}\n\n\n/** Writes mapping data in subtable format 12 (segmented coverage, UCS-4). */\nvoid CmapTable::writeSubTableFormat12 (ostream &os, const RangeMap &charmap) const {\n\twriteUInt16(os, 12); // subtable format\n\twriteUInt16(os, 0);  // reserved\n\twriteUInt32(os, 2*2+3*4+charmap.numRanges()*3*4); // table length\n\twriteUInt32(os, 0);  // language\n\twriteUInt32(os, charmap.numRanges());\n\tuint32_t startIndex=1;\n\tfor (size_t i=0; i < charmap.numRanges(); i++) {\n\t\tconst auto &range = charmap.getRange(i);\n\t\twriteUInt32(os, range.min());  // startCharCode\n\t\twriteUInt32(os, range.max());  // endCharCode\n\t\twriteUInt32(os, startIndex);   // startGlyphID\n\t\tstartIndex += range.numKeys();\n\t}\n}\n"
  },
  {
    "path": "src/ttf/CmapTable.hpp",
    "content": "/*************************************************************************\n** CmapTable.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n#include <vector>\n#include \"TTFTable.hpp\"\n\nclass RangeMap;\n\nnamespace ttf {\n\n/** This class provides the functions required to write the character mapping table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/cmap.htm */\nclass CmapTable : public TTFTable {\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"cmap\");}\n\t\tvoid write (std::ostream &os) const override;\n\n\t\tprotected:\n\t\t\tvoid writeSubTableFormat0 (std::ostream &os, const RangeMap &charmap) const;\n\t\t\tvoid writeSubTableFormat4 (std::ostream &os, const RangeMap &charmap) const;\n\t\t\tvoid writeSubTableFormat6 (std::ostream &os, const RangeMap &charmap) const;\n\t\t\tvoid writeSubTableFormat12 (std::ostream &os, const RangeMap &charmap) const;\n};\n\n} // namespace ttf"
  },
  {
    "path": "src/ttf/GlyfTable.cpp",
    "content": "/*************************************************************************\n** GlyfTable.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <limits>\n#include <cmath>\n#include <sstream>\n#include \"GlyfTable.hpp\"\n#include \"TTFWriter.hpp\"\n#include \"../algorithm.hpp\"\n#include \"../Bezier.hpp\"\n#include \"../Font.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\n/** Creates a contour by concatenating several contours given in a list. */\nContour::Contour (std::list<Contour> &&contours) {\n\tif (_pointInfos.empty() && !contours.empty()) {\n\t\t_pointInfos = std::move(contours.front()._pointInfos);\n\t\tcontours.pop_front();\n\t}\n\tfor (auto it=contours.begin(); it != contours.end(); it=contours.erase(it))\n\t\tstd::move(it->begin(), it->end(), std::back_inserter(_pointInfos));\n}\n\n\nvoid Contour::reverse () {\n\tstd::reverse(_pointInfos.begin(), _pointInfos.end());\n}\n\n\n/** Converts the absolute coordinates of a Contour to relative ones. */\nvoid Contour::convertAbsoluteToRelative () {\n\tPair<int> prevPoint;\n\tfor (PointInfo &info : _pointInfos) {\n\t\tPair<int> p = info.coords;\n\t\tinfo.coords -= prevPoint;\n\t\tprevPoint = p;\n\t}\n}\n\n\n/** Returns an iterator pointing to the next PointInfo object in a vector that isn't marked for removal.\n *  If there's no such object, the function returns infos.end().\n *  @param[in] it current position\n *  @param[in] infos vector the iterator belongs to */\nstatic vector<PointInfo>::iterator next (vector<PointInfo>::iterator it, const vector<PointInfo> &infos) {\n\tdo\n\t\t++it;\n\twhile (it != infos.end() && it->removed());\n\treturn it;\n}\n\n\n/** Reduces the number of contour points without affecting the appearance significantly. */\nvoid Contour::reduceNumberOfPoints () {\n\tif (_pointInfos.size() > 2) {\n\t\tfor (auto it1 = _pointInfos.begin(); it1+2 != _pointInfos.end(); ++it1) {\n\t\t\tauto it2 = it1+1;\n\t\t\tauto it3 = it2+1;\n\t\t\tbool remove=false;\n\t\t\tif (it1->oncurve() && it2->offcurve() && it3->oncurve()) {\n\t\t\t\t// remove off-curve points that are close to an on-curve point\n\t\t\t\tPair<int> diff12 = it1->coords - it2->coords;\n\t\t\t\tPair<int> diff23 = it2->coords - it3->coords;\n\t\t\t\tint sqrdist12 = diff12.x()*diff12.x() + diff12.y()*diff12.y();\n\t\t\t\tint sqrdist23 = diff23.x()*diff23.x() + diff23.y()*diff23.y();\n\t\t\t\tremove = (sqrdist12 < 4 || sqrdist23 < 4);\n\t\t\t\tif (!remove) {\n\t\t\t\t\t// remove in-between off-curve points that are very close to\n\t\t\t\t\t// the line through the two adjacent on-curve points (curve height <= 0.5)\n\t\t\t\t\t// distance(line(p1,p3), p2) = |det(p1-p3, p1-p2)| / |p1-p3|\n\t\t\t\t\tPair<int> diff13 = it1->coords - it3->coords;\n\t\t\t\t\tDPair extremum = QuadBezier(it1->coords, it2->coords, it3->coords).valueAt(0.5);\n\t\t\t\t\tint sqrdist13 = diff13.x()*diff13.x() + diff13.y()*diff13.y();\n\t\t\t\t\tdouble det1312 = det(DPair(diff13), DPair(it3->coords)-extremum);\n\t\t\t\t\tremove = (sqrdist13 == 0 || det1312/sqrdist13*det1312 < 0.25);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (it2->offcurve() || (it1->oncurve() && it3->oncurve())) {\n\t\t\t\t// remove in-between points located on same line\n\t\t\t\tPair<int> diff13 = it3->coords - it1->coords;\n\t\t\t\tPair<int> diff12 = it2->coords - it1->coords;\n\t\t\t\tint sqrdist13 = diff13.x()*diff13.x() + diff13.y()*diff13.y();\n\t\t\t\tdouble det1312 = det(diff13, diff12);\n\t\t\t\tremove = (sqrdist13 == 0 || det1312/sqrdist13*det1312 < 1);\n\t\t\t}\n\t\t\telse if (it1->offcurve() && it2->oncurve() && it3->offcurve()) {\n\t\t\t\t// remove on-curve points located (almost) halfway between two off-curve points\n\t\t\t\tPair<int> mid = DPair(it1->coords + it3->coords)/2.0;\n\t\t\t\tPair<int> vec = mid - it2->coords;\n\t\t\t\tdouble dist2 = vec.x()*vec.x() + vec.y()*vec.y();\n\t\t\t\tremove = (dist2 < 2.25);  // remove point if dist < 1.5\n\t\t\t}\n\t\t\tif (remove)\n\t\t\t\tit2->markForRemoval();\n\t\t}\n\t}\n\t// remove duplicate points, prefer control (off-curve) points\n\tfor (auto it1 = _pointInfos.begin(); it1 != _pointInfos.end(); it1=next(it1, _pointInfos)) {\n\t\tauto it2 = next(it1, _pointInfos);\n\t\tif (it2 == _pointInfos.end())\n\t\t\tit2 = _pointInfos.begin();\n\t\tif (it1->oncurve() && it2->oncurve() && (it1->coords-it2->coords).length() < 6) {\n\t\t\tauto i1=it1, i2=it2;\n\t\t\tif (i1 == _pointInfos.begin())\n\t\t\t\tswap(i1, i2);\n\t\t\ti2->coords = DPair(i1->coords+i2->coords)/2.0;\n\t\t\ti1->markForRemoval();\n\t\t}\n\t\telse if (it1->coords == it2->coords) {\n\t\t\tif (it1->offcurve() || it2 == _pointInfos.begin())\n\t\t\t\tit1->markForRemoval();\n\t\t\telse\n\t\t\t\tit2->markForRemoval();\n\t\t}\n\t}\n\t// actually remove marked points from vector\n\talgo::erase_if(_pointInfos, [](const PointInfo &pi) {\n\t\treturn pi.removed();\n\t});\n}\n\n\n/** Bits of the \"Simple Glyph Flags\". See section \"Simple Glyph Description\" of glyf table documentation. */\nenum : uint8_t {\n\tON_CURVE_PT = 1,   ///< if set, corresponding point is on the curve, otherwise off the curve (= control point)\n\tX_SHORT = 2,       ///< if set, the corresponding x-coordinate is 1 byte long, otherwise it's two bytes long\n\tY_SHORT = 4,       ///< if set, the corresponding y-coordinate is 1 byte long, otherwise it's two bytes long\n\tREPEAT_FLAG = 8,   ///< if set, the next byte specifies the number of additional times this flag is to be repeated\n\tX_IS_SAME_OR_POSITIVE_SHORT = 16, ///< if X_SHORT set: indicates if value >0, else if x-coord equals prev. one\n\tY_IS_SAME_OR_POSITIVE_SHORT = 32  ///< if Y_SHORT set: indicates if value >0, else if y-coord equals prev. one\n};\n\n\n/** Computes the \"simple glyph flags\" (except the repeat flag) for a given contour.\n *  The function expects the contour points to be relative to the respective preceding point.\n *  In order to simplify checking the equality of two flag bytes, which requires to\n *  exclude the repeat flag, this function does not set the repeat flag. */\nvector<uint8_t> Contour::glyphFlags () const {\n\tvector<uint8_t> flags(_pointInfos.size());\n\tfor (size_t i=0; i < _pointInfos.size(); i++) {\n\t\tflags[i] = _pointInfos[i].oncurve() ? ON_CURVE_PT : 0;\n\t\tif (_pointInfos[i].coords.x() == 0)\n\t\t\tflags[i] |= X_IS_SAME_OR_POSITIVE_SHORT;\n\t\telse if (abs(_pointInfos[i].coords.x()) <= 0xff) {  // x-coordinate 1 byte long?\n\t\t\tflags[i] |= X_SHORT;\n\t\t\tif (_pointInfos[i].coords.x() > 0)          // positive x-coordinate?\n\t\t\t\tflags[i] |= X_IS_SAME_OR_POSITIVE_SHORT;\n\t\t}\n\t\tif (_pointInfos[i].coords.y() == 0)\n\t\t\tflags[i] |= Y_IS_SAME_OR_POSITIVE_SHORT;\n\t\telse if (abs(_pointInfos[i].coords.y()) <= 0xff) {  // y-coordinate 1 byte long?\n\t\t\tflags[i] |= Y_SHORT;\n\t\t\tif (_pointInfos[i].coords.y() > 0)          // positive y-coordinate?\n\t\t\t\tflags[i] |= Y_IS_SAME_OR_POSITIVE_SHORT;\n\t\t}\n\t}\n\treturn flags;\n}\n\n\n////////////////////////////////////////////////////////////////////////////////////////////////\n\n\n/** Writes the contours describing the glyphs to a given stream.\n *  The glyphs must be ordered by the local glyph index used in the generated TTF font.\n *  In order to get compact mapping tables, we ensure that a greater glyph index also\n *  indicates a greater Unicode point (idx1 > idx2 <=> cp1 > cp2). */\nvoid GlyfTable::write (ostream &os) const {\n\t// add offset for .notdef character\n\tsize_t offset = 0;\n\tttfWriter()->addGlyphOffset(0);\n\tttfWriter()->updateGlobalBbox(0, 0, 0, 0, 0);\n\t// iterate in ascending Unicode point order over all characters to be added to the TTF\n\tfor (auto cp2charcode : ttfWriter()->getUnicodeCharMap()) {\n\t\tttfWriter()->addGlyphOffset(offset); // update loca table\n\t\toffset += writeGlyphContours(os, cp2charcode.second);\n\t}\n\tttfWriter()->addGlyphOffset(offset);  // add extra offset after last valid one\n}\n\n\n/** Writes the contour data of a single glyph to a given output stream.\n *  @param[in] os stream to write to\n *  @param[in] charcode character code of glyph in current font\n *  @return number of bytes written */\nsize_t GlyfTable::writeGlyphContours (ostream &os, uint32_t charcode) const {\n\tlist<Contour> contours = computeContours(charcode);\n\tif (contours.empty()) {\n\t\tttfWriter()->updateGlobalBbox(charcode, 0, 0, 0, 0);\n\t\treturn 0;\n\t}\n\tttfWriter()->updateContourInfo(contours.size(),\n\t\talgo::accumulate(contours, size_t(0), [](size_t sum, const Contour &contour) {\n\t\t\treturn sum + contour.numPoints();\n\t\t}));\n\tauto offset = os.tellp();\n\t// glyph header\n\twriteInt16(os, int16_t(contours.size()));  // numberOfContours\n\n\tint xmin, xmax, ymin, ymax;\n\tcomputeBbox(contours, xmin, ymin, xmax, ymax);\n\tttfWriter()->updateGlobalBbox(charcode, xmin, ymin, xmax, ymax);\n\twriteInt16(os, xmin);\n\twriteInt16(os, ymin);\n\twriteInt16(os, xmax);\n\twriteInt16(os, ymax);\n\n\t// write indices of endpoints of each contour\n\tsize_t endPtsOfContours = 0;\n\tfor (const Contour &contour : contours) {\n\t\tendPtsOfContours += contour.numPoints();\n\t\twriteUInt16(os, endPtsOfContours-1);\n\t}\n\twriteUInt16(os, 0);  // instructionLength\n\n\tContour combinedContour(std::move(contours));\n\tcombinedContour.convertAbsoluteToRelative();\n\n\t// write contour flags\n\tvector<uint8_t> flags = combinedContour.glyphFlags();\n\tfor (auto first=flags.begin(); first != flags.end(); ++first) {\n\t\tauto last = std::find_if(first+1, flags.end(), [&first](uint8_t flagbyte) {\n\t\t\treturn flagbyte != *first;\n\t\t});\n\t\tif (--last == first)   // run-length == 0?\n\t\t\twriteUInt8(os, *first);\n\t\telse {\n\t\t\twriteUInt8(os, (*first) | REPEAT_FLAG);  // write flag only once and\n\t\t\twriteUInt8(os, last-first);   // append number of additional repeats\n\t\t\tfirst = last;\n\t\t}\n\t}\n\t// write x-coordinates\n\tfor (size_t i=0; i < combinedContour.numPoints(); i++) {\n\t\tif (flags[i] & X_SHORT)  // short (one byte) x coordinate?\n\t\t\twriteUInt8(os, abs(combinedContour[i].coords.x()));\n\t\telse if ((flags[i] & X_IS_SAME_OR_POSITIVE_SHORT) == 0)  // does long x-coordinate differ from previous one?\n\t\t\twriteInt16(os, int16_t(combinedContour[i].coords.x()));\n\t}\n\t// write y-coordinates\n\tfor (size_t i=0; i < combinedContour.numPoints(); i++) {\n\t\tif (flags[i] & Y_SHORT)  // short (one byte) y coordinate?\n\t\t\twriteUInt8(os, abs(combinedContour[i].coords.y()));\n\t\telse if ((flags[i] & Y_IS_SAME_OR_POSITIVE_SHORT) == 0)  // does long y-coordinate differ from previous one?\n\t\t\twriteInt16(os, int16_t(combinedContour[i].coords.y()));\n\t}\n\t// ensure that the number of glyph data bytes is a multiple of 4 (pad at dword boundary)\n\tfor (int i = (1 + ~(os.tellp()-offset)) & 3; i > 0; i--)\n\t\twriteUInt8(os, 0);\n\treturn os.tellp()-offset;\n}\n\n\n/** Computes the absolute global bounds of multiple contours.\n *  @param[in] contours point data with absolute coordinates */\nvoid GlyfTable::computeBbox (const list<Contour> &contours, int &xmin, int &ymin, int &xmax, int &ymax) {\n\tif (contours.empty())\n\t\txmin = xmax = ymin = ymax = 0;\n\telse {\n\t\txmin = ymin = numeric_limits<int16_t>::max();\n\t\txmax = ymax = numeric_limits<int16_t>::min();\n\t\tfor (const Contour &contour : contours) {\n\t\t\tfor (const PointInfo &info : contour) {\n\t\t\t\tconst auto &p = info.coords;\n\t\t\t\txmin = min(xmin, p.x());\n\t\t\t\txmax = max(xmax, p.x());\n\t\t\t\tymin = min(ymin, p.y());\n\t\t\t\tymax = max(ymax, p.y());\n\t\t\t}\n\t\t}\n\t}\n}\n\n\nstatic Glyph::Point to_point (const DPair &p) {\n\treturn Glyph::Point(int(std::round(p.x())), int(std::round(p.y())));\n}\n\n\nstruct GlyphToContourActions : Glyph::IterationActions {\n\tGlyphToContourActions (list<Contour> &cnts, double s) : contours(cnts), scale(s) {}\n\n\tvoid moveto (const Glyph::Point &p) override {\n\t\tcontours.emplace_back(Contour());\n\t\tadd(p, true);\n\t}\n\n\tvoid lineto (const Glyph::Point &p) override {\n\t\tif (contours.empty())\n\t\t\tmoveto(currentPoint());  // (0, 0)\n\t\tif (p != currentPoint())\n\t\t\tadd(p, true);\n\t}\n\n\tvoid quadto (const Glyph::Point &p1, const Glyph::Point &p2) override {\n\t\tif (contours.empty())\n\t\t\tmoveto(currentPoint());  // (0, 0)\n\t\t// if the maximum distance between the curve and the line through p0 and p2 is < 0.5,\n\t\t// treat the curve as a line\n\t\tDPair extremum = QuadBezier(currentPoint(), p1, p2).valueAt(0.5);\n\t\tdouble height = det(DPair(currentPoint()-p2), DPair(currentPoint())-extremum)/(currentPoint()-p2).length();\n\t\tif (p1 != currentPoint() && abs(height) >= 0.5 && p2 != currentPoint())\n\t\t\tadd(p1, false);\n\t\tif (p2 != currentPoint())\n\t\t\tadd(p2, true);\n\t}\n\n\tvoid cubicto (const Glyph::Point &p1, const Glyph::Point &p2, const Glyph::Point &p3) override {\n\t\t// approximate cubic Bézier curve with a sequence of quadratic ones\n\t\tCubicBezier cubic(\n\t\t\tDPair(currentPoint().x(), currentPoint().y()),\n\t\t\tDPair(p1.x(), p1.y()),\n\t\t\tDPair(p2.x(), p2.y()),\n\t\t\tDPair(p3.x(), p3.y())\n\t\t);\n\t\tvector<QuadBezier> quadBeziers = cubic.toQuadBeziers(0.8);\n\t\tfor (const QuadBezier &quad : quadBeziers)\n\t\t\tquadto(to_point(quad.point(1)), to_point(quad.point(2)));\n\t}\n\n\tvoid add (const Glyph::Point &p, bool oncurve) {\n\t\tcontours.back().append(PointInfo(scale*p.x(), scale*p.y(), oncurve));\n\t}\n\n\tlist<Contour> &contours;\n\tdouble scale;\n};\n\n\n/** Returns a sequence of contours describing the glyph of a given character.\n *  The contour points are stored with absolute coordinates. */\nlist<Contour> GlyfTable::computeContours (uint32_t charcode) const {\n\tlist<Contour> contours;\n\tGlyph glyph;\n\tif (ttfWriter()->getFont().getGlyph(int(charcode), glyph, ttfWriter()->getTracerCallback())) {\n\t\tif (!glyph.empty()) {\n\t\t\tGlyphToContourActions actions(contours, ttfWriter()->unitsPerEmFactor());\n\t\t\tglyph.iterate(actions, false);\n\t\t\tfor (auto it = contours.begin(); it != contours.end();) {\n\t\t\t\tit->reverse();  // TTF contours must be clockwise-oriented\n\t\t\t\tit->reduceNumberOfPoints();\n\t\t\t\tif (it->numPoints() < 3)\n\t\t\t\t\tit = contours.erase(it);\n\t\t\t\telse\n\t\t\t\t\t++it;\n\t\t\t}\n\t\t}\n#ifdef TTFDEBUG\n\t\tif (TTFWriter::CREATE_PS_GLYPH_OUTLINES) {\n\t\t\tstring fontname = ttfWriter()->getFont().name();\n\t\t\tostringstream oss;\n\t\t\toss << \"g-\" << ttfWriter()->getFont().name() << '-';\n\t\t\toss << setw(4) << setfill('0') << charcode;\n\t\t\toss << \".eps\";\n\t\t\tofstream ofs(oss.str());\n\t\t\twritePS(ofs, contours, charcode);\n\t\t}\n#endif\n\t}\n\treturn contours;\n}\n\n\n#if 0\n/** Creates a contour for the .notdef character. */\nContour GlyfTable::getNotDefContour () const {\n\tContour contour;\n\tconst PhysicalFont &font = ttfWriter()->getFont();\n\tdouble extend = font.style() ? font.style()->extend : 1;\n\tdouble scale = ttfWriter()->unitsPerEmFactor();\n\tint base = int(round(scale*extend*(font.ascent()+font.descent())));\n\tPair<int> pmin(base/30, 0);\n\tPair<int> pmax(3*base/5, 2*base/3);\n\tcontour.append(PointInfo(pmin.x(), pmin.y()));\n\tcontour.append(PointInfo(pmin.x(), pmax.y()));\n\tcontour.append(PointInfo(pmax.x(), pmax.y()));\n\tcontour.append(PointInfo(pmax.x(), pmin.y()));\n\treturn contour;\n}\n#endif\n\n\n#ifdef TTFDEBUG\n/** Creates PostScript code from a list of contours that describe the outline of a single glyph.\n *  This is just required for analysis and debugging purposes. */\nvoid GlyfTable::writePS (ostream &os, const list<Contour> &contours, uint32_t charcode) const {\n\tos << \"%!PS-Adobe-3.0 EPSF-3.0\\n\"\n\t\t<< \"%%BoundingBox: (atend)\\n\"\n\t\t<< \"/dot {moveto gsave 5 setlinewidth 1 setlinecap currentpoint lineto stroke grestore} bind def\\n\"\n\t\t<< \"/oncurvedot {dot} bind def\\n\"\n\t\t<< \"/offcurvedot {gsave 0 1 0 setrgbcolor dot grestore} bind def\\n\"\n\t\t<< \"/Helvetica findfont 8 scalefont setfont\\n\\n\";\n\tauto &font = ttfWriter()->getFont();\n\tos << \"% Font: \" << font.name() << \" at \" << font.designSize() << \"pt, \" << font.unitsPerEm() << \" units per em\\n\"\n\t\t<< \"% Glyph: \" << charcode << \"\\n\";\n\tPair<int> llp(numeric_limits<int>::max(), numeric_limits<int>::max());\n\tPair<int> urp(numeric_limits<int>::min(), numeric_limits<int>::min());\n\tsize_t count=0, numPoints=0;\n\tfor (const Contour &contour : contours) {\n\t\tos << \"\\n% contour \" << ++count << \", \" << contour.numPoints() << \" points\\n\";\n\t\tcontour.writePS(os);\n\t\tnumPoints += contour.numPoints();\n\t}\n\tint minx, miny, maxx, maxy;\n\tcomputeBbox(contours, minx, miny, maxx, maxy);\n\tos << minx << \" \" << maxy+30\n\t\t<< \" moveto (Glyph \" << charcode << \" of font \" << font.name() << \", \"\n\t\t<< contours.size() << \" contour\" << (contours.size() > 1 ? \"s\" : \"\") << \", \" << numPoints << \" points) show\\n\";\n\tos << \"%%Trailer\\n\"\n\t\t<< \"%%BoundingBox: \" << minx-10 << \" \" << miny-10 << \" \" << maxx+10 << \" \" << maxy+50 << \"\\n\";\n}\n\n\nstatic ostream& write (ostream &os, const Pair<int> &p) {\n\treturn os << p.x() << \" \" << p.y();\n}\n\ntemplate <typename ...Ts>\nstatic ostream& write (ostream &os, const Pair<int> &p, const Ts& ...args) {\n\twrite(os, p) << \" \";\n\treturn write(os, args...);\n}\n\n\nvoid Contour::writePS (ostream &os) const {\n\tif (_pointInfos.empty())\n\t\treturn;\n\tauto p0 = _pointInfos[0].coords;\n\twrite(os, p0) << \" moveto\\n\";\n\tfor (size_t i=1; i <= _pointInfos.size(); i++) {\n\t\tsize_t imod = i % _pointInfos.size();\n\t\tauto pi1 = _pointInfos[imod];\n\t\tif (pi1.oncurve() && i == _pointInfos.size())\n\t\t\tos << \"closepath\\n\";\n\t\telse\n\t\t\twrite(os, pi1.coords) << \" \";\n\t\tif (pi1.oncurve()) {\n\t\t\tif (i < _pointInfos.size()) {\n\t\t\t\tauto v = pi1.coords-p0;\n\t\t\t\tos << \" lineto  % \" << i << \"; len=\" << v.length()\n\t\t\t\t\t<< \"; \" << math::rad2deg(atan2(v.y(), v.x())) << \"°\\n\";\n\t\t\t}\n\t\t\tp0 = pi1.coords;\n\t\t}\n\t\telse {\n\t\t\tauto p1 = pi1.coords;\n\t\t\tauto pi2 = _pointInfos[(i+1) % _pointInfos.size()];\n\t\t\tauto p2 = pi2.oncurve() ? pi2.coords : (p1+pi2.coords)/2;\n\t\t\tDPair v1 = p1-p0, v2 = p1-p2;\n\t\t\tPair<int> c1 = DPair(p0) + round(v1*2.0/3.0);\n\t\t\tPair<int> c2 = DPair(p2) + round(v2*2.0/3.0);\n\t\t\tQuadBezier bezier(p0, p1, p2);\n\t\t\tdouble cordlen = (p2-p0).length();\n\t\t\tdouble arclen = bezier.arclen();\n\t\t\tDPair extremum = bezier.valueAt(0.5);\n\t\t\tdouble height = det(DPair(p0-p2), DPair(p0)-extremum)/(p0-p2).length();\n\t\t\twrite(os, c1, c2, p2) << \" curveto\"\n\t\t\t\t<< \"  % \" << i\n\t\t\t\t<< \"; (\" << math::rad2deg(atan2(v1.y(), v1.x())) << \"°,\" << math::rad2deg(atan2(v2.y(), v2.x())) << \"°)\"\n\t\t\t\t<< \"; cordlen=\" << cordlen\n\t\t\t\t<< \"; arclen=\" << arclen\n\t\t\t\t<< \"; quot=\" << cordlen/arclen\n\t\t\t\t<< \"; diff=\" << arclen-cordlen\n\t\t\t\t<< \"; height=\" << height\n\t\t\t\t<< \"\\n\";\n\t\t\tp0 = p2;\n\t\t\tif (pi2.oncurve())\n\t\t\t\ti++;\n\t\t}\n\t}\n\tos << \"stroke\\n\";\n\tfor (size_t i=0; i < _pointInfos.size(); i++) {\n\t\tauto p = _pointInfos[i].coords;\n\t\twrite(os, p) << \" 2 copy \"\n\t\t\t\t\t\t << (_pointInfos[i].oncurve() ? \"on\" : \"off\") << \"curvedot \"\n\t\t\t\t\t\t << \"moveto (\" << i << \") show\\n\";\n\t}\n}\n#endif\n"
  },
  {
    "path": "src/ttf/GlyfTable.hpp",
    "content": "/*************************************************************************\n** GlyfTable.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n#include <cmath>\n#include <list>\n#include <ostream>\n#include <vector>\n#include \"TTFTable.hpp\"\n#include \"../Pair.hpp\"\n\nnamespace ttf {\n\nstruct PointInfo {\n\tenum State {OFFCURVE, ONCURVE, REMOVED};\n\n\tPointInfo (double x, double y, bool oncurve) : coords(std::round(x), std::round(y)), state(oncurve ? ONCURVE : OFFCURVE) {}\n\tPointInfo (int x, int y) : coords(x, y), state(ONCURVE) {}\n\tbool oncurve () const {return state == ONCURVE;}\n\tbool offcurve () const {return state == OFFCURVE;}\n\tbool removed () const {return state == REMOVED;}\n\tvoid markForRemoval () {state = REMOVED;}\n\tPair<int> coords;  ///< relative coordinates to previous one in contour\n\tState state;\n};\n\n\nclass Contour {\n\tfriend class GlyfTable;\n\tusing Iterator = std::vector<PointInfo>::iterator;\n\tusing ConstIterator = std::vector<PointInfo>::const_iterator;\n\tpublic:\n\t\tContour () =default;\n\t\tContour (Contour &&contour) =default;\n\t\tContour (std::list<Contour> &&contours);\n\t\tContour (const Contour &contour) =delete;\n\t\tIterator begin () {return _pointInfos.begin();}\n\t\tIterator end () {return _pointInfos.end();}\n\t\tConstIterator begin () const {return _pointInfos.begin();}\n\t\tConstIterator end () const {return _pointInfos.end();}\n\t\tsize_t numPoints () const {return _pointInfos.size();}\n\t\tconst PointInfo& operator [] (size_t pos) const {return _pointInfos[pos];}\n\t\tbool empty () const {return _pointInfos.empty();}\n\t\tstd::vector<uint8_t> glyphFlags () const;\n\t\tvoid reverse ();\n\t\tvoid reduceNumberOfPoints ();\n\t\tvoid append (PointInfo &&pinfo) {_pointInfos.emplace_back(std::move(pinfo));}\n\t\tvoid reserve (size_t n) {_pointInfos.reserve(n);}\n\n\tprotected:\n\t\tvoid convertAbsoluteToRelative ();\n#ifdef TTFDEBUG\n\t\tvoid writePS (std::ostream &os) const;\n#endif\n\n\tprivate:\n\t\tstd::vector<PointInfo> _pointInfos;\n};\n\n\n/** This class provides the functions required to write the glyf data table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/glyf.htm */\nclass GlyfTable : public TTFTable {\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"glyf\");}\n\t\tvoid write (std::ostream &os) const override;\n\n\tprotected:\n\t\tstd::vector<Contour> computeContours () const;\n\t\tstd::list<Contour> computeContours (uint32_t charcode) const;\n\t\tstatic void computeBbox (const std::list<Contour> &contours, int &xmin, int &ymin, int &xmax, int &ymax);\n\t\tsize_t writeGlyphContours (std::ostream &os, uint32_t charcode) const;\n//\t\tContour getNotDefContour () const;\n#ifdef TTFDEBUG\n\t\tvoid writePS (std::ostream &os, const std::list<Contour> &contours, uint32_t charcode) const;\n#endif\n};\n\n} // namespace ttf"
  },
  {
    "path": "src/ttf/HeadTable.cpp",
    "content": "/*************************************************************************\n** HeadTable.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include <chrono>\n#include <ctime>\n#include <utility>\n#include \"HeadTable.hpp\"\n#include \"TTFWriter.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\n\nvoid HeadTable::updateGlobalBbox (int16_t xmin, int16_t ymin, int16_t xmax, int16_t ymax) {\n\tif (xmin < _xMin) _xMin = xmin;\n\tif (ymin < _yMin) _yMin = ymin;\n\tif (xmax > _xMax) _xMax = xmax;\n\tif (ymax > _yMax) _yMax = ymax;\n}\n\n\n/** Writes the head table to a given output stream.\n *  https://docs.microsoft.com/en-us/typography/opentype/spec/head */\nvoid HeadTable::write (ostream &os) const {\n\twriteUInt16(os, 1);       // major version\n\twriteUInt16(os, 0);       // minor version\n\twriteUInt32(os, 0x10000); // font revision (1.0)\n\twriteUInt32(os, 0);       // global checksum, computed and set by TTFWriter\n\twriteUInt32(os, 0x5F0F3CF5);  // magic number\n\twriteUInt16(os, 1+2);         // flags (baseline at y=0, left sidebearing point at x=0)\n\twriteUInt16(os, uint16_t(std::round(ttfWriter()->targetUnitsPerEm())));\n\twriteUInt32(os, 0);  // creation time, upper dword\n\twriteUInt32(os, 0);  // creation time, lower dword\n\twriteUInt32(os, 0);  // modification time, upper dword\n\twriteUInt32(os, 0);  // modification time, lower dword\n\twriteInt16(os, _xMin);\n\twriteInt16(os, _yMin);\n\twriteInt16(os, _xMax);\n\twriteInt16(os, _yMax);\n\twriteUInt16(os, 0); // macStyle\n\twriteUInt16(os, 8); // smallest readable size in pixels\n\twriteInt16(os, 2);  // fontDirectionHint (deprecated, always 2)\n\twriteInt16(os, _indexToLocFormat);\n\twriteInt16(os, 0);  // glyphDataFormat\n}\n"
  },
  {
    "path": "src/ttf/HeadTable.hpp",
    "content": "/*************************************************************************\n** HeadTable.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <limits>\n#include \"TTFTable.hpp\"\n\nnamespace ttf {\n\n/** This class provides the functions required to write the font header table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/head.htm */\nclass HeadTable : public TTFTable {\n\tfriend class TTFWriter;\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"head\");}\n\t\tvoid updateGlobalBbox (int16_t xmin, int16_t ymin, int16_t xmax, int16_t ymax);\n\t\tvoid write (std::ostream &os) const override;\n\t\tstatic int offsetToChecksum () {return 2+2+4;}\n\n\tprotected:\n\t\tvoid setLongOffsetFormat () {_indexToLocFormat = 1;}\n\n\tprivate:\n\t\tint16_t _xMin = std::numeric_limits<int16_t>::max();\n\t\tint16_t _yMin = std::numeric_limits<int16_t>::max();\n\t\tint16_t _xMax = std::numeric_limits<int16_t>::min();\n\t\tint16_t _yMax = std::numeric_limits<int16_t>::min();\n\t\tint16_t _indexToLocFormat = 0;  // 0: short (16-bit) format, 1: long (32-bit) format\n};\n\n} // namespace ttf\n"
  },
  {
    "path": "src/ttf/HheaTable.cpp",
    "content": "/*************************************************************************\n** HheaTable.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"HheaTable.hpp\"\n#include \"TTFWriter.hpp\"\n#include \"../Font.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\n\nvoid HheaTable::write (ostream &os) const {\n\tconst PhysicalFont &font = ttfWriter()->getFont();\n\tdouble scale = ttfWriter()->unitsPerEmFactor();\n\twriteUInt16(os, 1);  // major version\n\twriteUInt16(os, 0);  // minor version\n\twriteInt16(os, round(font.ascent()*scale));\n\twriteInt16(os, round(-font.descent()*scale));\n\twriteInt16(os, 0);   // line gap\n\twriteUInt16(os, _advanceWidthMax);\n\twriteInt16(os, _minLeftSideBearing);\n\twriteInt16(os, _minRightSideBearing);\n\twriteInt16(os, _xMaxExtent);\n\twriteInt16(os, 1);   // caretSlopeRise (1 = vertical)\n\twriteInt16(os, 0);   // caretSlopeRun (0 = vertical)\n\twriteInt16(os, 0);   // caretOffset\n\twriteInt16(os, 0);   // reserved\n\twriteInt16(os, 0);   // reserved\n\twriteInt16(os, 0);   // reserved\n\twriteInt16(os, 0);   // reserved\n\twriteInt16(os, 0);   // metricDataFormat (always 0)\n\twriteUInt16(os, _numberOfHMetrics);\n}\n\n\nvoid HheaTable::updateXMinMax (uint32_t c, int16_t xmin, int16_t xmax) {\n\tconst PhysicalFont &font = ttfWriter()->getFont();\n\tdouble extend = font.style() ? font.style()->extend : 1;\n\tdouble scale = ttfWriter()->unitsPerEmFactor();\n\tint16_t advance = (c == 0 ? xmax : round(scale*extend*font.hAdvance(c)));\n\t_xMaxExtent = max(_xMaxExtent, xmax);\n\t_minLeftSideBearing = min(_minLeftSideBearing, xmin);\n\t_minRightSideBearing = min(_minRightSideBearing, int16_t(advance-xmax));\n}\n\n\nvoid HheaTable::updateAdvanceWidth (uint16_t w, uint16_t numberOfHMetrics) {\n\t_advanceWidthMax = max(_advanceWidthMax, w);\n\t_numberOfHMetrics = numberOfHMetrics;\n}\n"
  },
  {
    "path": "src/ttf/HheaTable.hpp",
    "content": "/*************************************************************************\n** HheaTable.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n#include <limits>\n#include \"TTFTable.hpp\"\n\nnamespace ttf {\n\n/** This class provides the functions required to write the horizontal header table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/hhea.htm */\nclass HheaTable : public TTFTable {\n\tfriend class TTFWriter;\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"hhea\");}\n\t\tvoid write (std::ostream &os) const override;\n\n\tprotected:\n\t\tvoid updateXMinMax (uint32_t c, int16_t xmin, int16_t xmax);\n\t\tvoid updateAdvanceWidth (uint16_t w, uint16_t numberOfHMetrics);\n\n\tprivate:\n\t\tuint16_t _advanceWidthMax = 0;\n\t\tint16_t _minLeftSideBearing = std::numeric_limits<int16_t>::max();\n\t\tint16_t _minRightSideBearing = std::numeric_limits<int16_t>::max();\n\t\tint16_t _xMaxExtent = std::numeric_limits<int16_t>::min();\n\t\tuint16_t _numberOfHMetrics = 0;\n};\n\n} // namespace ttf\n"
  },
  {
    "path": "src/ttf/HmtxTable.cpp",
    "content": "/*************************************************************************\n** HmtxTable.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include \"HmtxTable.hpp\"\n#include \"TTFWriter.hpp\"\n#include \"../Font.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\nvoid HmtxTable::write (ostream &os) const {\n\tauto runStart = _widthInfos.end();\n\tif (!_widthInfos.empty())\n\t\trunStart -= _runLengthOfAdvWidth-1;\n\t// write longHorMetrics up to the beginning of the repeating\n\t// advance widths at the end of the container\n\tfor (auto it = _widthInfos.begin(); it != runStart; ++it) {\n\t\twriteUInt16(os, it->advWidth);\n\t\twriteInt16(os, it->lsb);\n\t}\n\t// write the trailing left side bearings\n\tfor (; runStart != _widthInfos.end(); ++runStart)\n\t\twriteInt16(os, runStart->lsb);\n}\n\n\nvoid HmtxTable::updateWidthData (uint32_t c, int16_t xmin, int16_t xmax) {\n\tconst PhysicalFont &font = ttfWriter()->getFont();\n\tdouble extend = font.style() ? font.style()->extend : 1;\n\tdouble scale = ttfWriter()->unitsPerEmFactor();\n\tint16_t w = (c == 0 ? xmax : int16_t(round(scale*extend*font.hAdvance(c))));\n\tif (_isFixedPitch && c > 0 && w != _width) {\n\t\tif (_width == 0)\n\t\t\t_width = w;\n\t\telse\n\t\t\t_isFixedPitch = false;\n\t}\n\tif (_widthInfos.empty() || w == _widthInfos.back().advWidth)\n\t\t_runLengthOfAdvWidth++;\n\telse\n\t\t_runLengthOfAdvWidth = 1;\n\t_widthInfos.emplace_back(xmin, w);\n\tttfWriter()->updateGlobalAdvanceWidth(w, _widthInfos.size()-_runLengthOfAdvWidth+1);\n}"
  },
  {
    "path": "src/ttf/HmtxTable.hpp",
    "content": "/*************************************************************************\n** HmtxTable.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <vector>\n#include \"TTFTable.hpp\"\n\nnamespace ttf {\n\n/** This class provides the functions required to write the horizontal metrics table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/hmtx.htm */\nclass HmtxTable : public TTFTable {\n\tfriend TTFWriter;\n\tstruct CharWidthInfo {\n\t\tCharWidthInfo (int16_t l, int16_t w) : lsb(l), advWidth(w) {}\n\t\tuint16_t lsb;       // left side bearing\n\t\tuint16_t advWidth;  // unscaled advance width\n\t};\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"hmtx\");}\n\t\tvoid write (std::ostream &os) const override;\n\t\tbool isFixedPitch () const {return _isFixedPitch;}\n\n\tprotected:\n\t\tvoid updateWidthData (uint32_t c, int16_t xmin, int16_t xmax);\n\n\tprivate:\n\t\tstd::vector<CharWidthInfo> _widthInfos;\n\t\tsize_t _runLengthOfAdvWidth=0;  // number of identical advWidth values at end of _widthInfos\n\t\tbool _isFixedPitch=true;\n\t\tint16_t _width=0;\n};\n\n} // namespace ttf\n"
  },
  {
    "path": "src/ttf/LocaTable.hpp",
    "content": "/*************************************************************************\n** LocaTable.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <vector>\n#include \"TTFTable.hpp\"\n\nnamespace ttf {\n\n/** This class provides the functions required to write the loca table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/loca.htm */\nclass LocaTable : public TTFTable {\n\tfriend class TTFWriter;\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"loca\");}\n\n\t\tvoid write (std::ostream &os) const override {\n\t\t\tfor (uint32_t offs : _offsets) {\n\t\t\t\tif (_isShortFormat)\n\t\t\t\t\twriteUInt16(os, offs/2);\n\t\t\t\telse\n\t\t\t\t\twriteUInt32(os, offs);\n\t\t\t}\n\t\t}\n\n\tprotected:\n\t\tvoid addOffset (uint32_t offset) {\n\t\t\t_offsets.push_back(offset);\n\t\t\tif (offset/2 > 0xFFFF)\n\t\t\t\t_isShortFormat = false;\n\t\t}\n\n\tprivate:\n\t\tbool _isShortFormat=true;\n\t\tstd::vector<uint32_t> _offsets;\n};\n\n} // namespace ttf\n"
  },
  {
    "path": "src/ttf/Makefile.am",
    "content": "noinst_LTLIBRARIES = libttf.la\n\nlibttf_la_SOURCES = \\\n\tCmapTable.hpp   CmapTable.cpp \\\n\tGlyfTable.hpp   GlyfTable.cpp \\\n\tHeadTable.hpp   HeadTable.cpp \\\n\tHheaTable.hpp   HheaTable.cpp \\\n\tHmtxTable.hpp   HmtxTable.cpp \\\n\tLocaTable.hpp   MaxpTable.cpp \\\n\tMaxpTable.hpp   NameTable.cpp \\\n\tNameTable.hpp   OS2Table.cpp \\\n\tOS2Table.hpp    PostTable.cpp \\\n\tPostTable.hpp \\\n\tTTFAutohint.hpp TTFAutohint.cpp \\\n\tTTFTable.hpp    TTFTable.cpp \\\n\tTTFWriter.hpp   TTFWriter.cpp \\\n\tVheaTable.hpp   VheaTable.cpp \\\n\tVmtxTable.hpp   VmtxTable.cpp\n\ninclude ../../libs/defs.am\n\nAM_CXXFLAGS = \\\n\t-I$(dvisvgm_srcdir)/libs/boost \\\n\t-I$(dvisvgm_srcdir)/libs/variant/include \\\n\t$(BROTLI_CFLAGS) $(WOFF2_CFLAGS)\n"
  },
  {
    "path": "src/ttf/MaxpTable.cpp",
    "content": "/*************************************************************************\n** MaxpTable.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <algorithm>\n#include \"MaxpTable.hpp\"\n#include \"TTFWriter.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\nvoid MaxpTable::write (ostream &os) const {\n\twriteUInt32(os, 0x10000);  // version 1.0, required for TTF fonts\n\twriteUInt16(os, ttfWriter()->getUnicodeCharMap().numValues()+1);  // number of glyphs including .notdef\n\twriteUInt16(os, _maxPoints);\n\twriteUInt16(os, _maxContours);\n\twriteUInt16(os, 0);  // maxCompositePoints\n\twriteUInt16(os, 0);  // maxCompositeContours\n\twriteUInt16(os, 1);  // maxZones (1 = don't use twilight zone, 2 otherwise)\n\twriteUInt16(os, 0);  // maxTwilightPoints\n\twriteUInt16(os, 0);  // maxStorage\n\twriteUInt16(os, 0);  // maxFunctionDefs\n\twriteUInt16(os, 0);  // maxInstructionDefs\n\twriteUInt16(os, 0);  // maxStackElements\n\twriteUInt16(os, 0);  // maxSizeOfInstructions\n\twriteUInt16(os, 0);  // maxComponentElements\n\twriteUInt16(os, 0);  // maxComponentDepth\n}\n\n\nvoid MaxpTable::updateContourInfo (uint16_t maxPoints, uint16_t maxContours) {\n\t_maxPoints = std::max(_maxPoints, maxPoints);\n\t_maxContours = std::max(_maxContours, maxContours);\n}"
  },
  {
    "path": "src/ttf/MaxpTable.hpp",
    "content": "/*************************************************************************\n** MaxpTable.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n#include \"TTFTable.hpp\"\n\nnamespace ttf {\n\n/** This class provides the functions required to write the maximum profile table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/maxp.htm */\nclass MaxpTable : public TTFTable {\n\tfriend class TTFWriter;\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"maxp\");}\n\t\tvoid write(std::ostream &os) const override;\n\n\tprotected:\n\t\tvoid updateContourInfo (uint16_t maxPoints, uint16_t maxContours);\n\n\tprivate:\n\t\tuint16_t _maxPoints=0;    ///< maximum number of points used by a contour\n\t\tuint16_t _maxContours=0;  ///< maximum number of contours used by a glyph\n};\n\n} // namespace ttf\n"
  },
  {
    "path": "src/ttf/NameTable.cpp",
    "content": "/*************************************************************************\n** NameTable.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include \"NameTable.hpp\"\n#include \"TTFWriter.hpp\"\n#include \"../Font.hpp\"\n#include \"../version.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\nenum NameID {\n\tCOPYRIGHT_NOTICE = 0,\n\tFONT_FAMILY = 1,\n\tFONT_SUBFAMILY = 2,\n\tFONT_ID = 3,\n\tFULL_FONT_NAME = 4,\n\tVERSION_STRING = 5,\n\tPS_NAME = 6,\n\tTRADEMARK = 7,\n\tMANUFACTURER_NAME = 8,\n\tDESIGNER = 9,\n\tDESCRIPTION = 10,\n\tURL_VENDOR = 11,\n\tURL_DESIGNER = 12,\n\tLICENSE_DESCRIPTION = 13,\n\tLICENSE_INFO_URL = 14,\n\tTYPOGRAPHIC_FAMILY_NAME = 16,\n\tTYPOGRAPHIC_SUBFAMILY_NAME = 17,\n\tCOMPATIBLE_FULL = 18,\n\tSAMPLE_TEXT = 19,\n\tPS_CID_FINDFONT_NAME = 20,\n\tWWS_FAMILY_NAME = 21,\n\tWWS_SUBFAMILY_NAME = 22,\n\tLIGHT_BG_PALETTE = 23,\n\tDARK_BG_PALETTE = 24,\n\tVAR_PS_NAME_PREFIX = 25\n};\n\n\nvoid NameTable::write (ostream &os) const {\n\tstruct NameEntry {\n\t\tNameID nameID;\n\t\tstd::string name;\n\t};\n\tarray<NameEntry,5> nameEntries {{\n\t\t{FONT_FAMILY, ttfWriter()->getFont().familyName()},\n\t\t{FULL_FONT_NAME, ttfWriter()->getFont().name()},\n\t\t{VERSION_STRING, string(\"Version 1.0\")},\n\t\t{PS_NAME, ttfWriter()->getFont().name()},\n\t\t{DESCRIPTION, string(\"Generated by \")+PROGRAM_NAME+\" \"+PROGRAM_VERSION}\n\t}};\n\twriteUInt16(os, 0);  // table format\n\twriteUInt16(os, 2*nameEntries.size());  // number of name records\n\twriteUInt16(os, 6+2*12*nameEntries.size());  // offset to start of string storage\n\tsize_t offset=0;\n\t// write name entry records ordered by platform ID\n\tfor (const NameEntry &entry : nameEntries) {\n\t\twriteUInt16(os, 1);  // Mac\n\t\twriteUInt16(os, 0);  // Roman, UTF-8 encoding\n\t\twriteUInt16(os, 0);  // English\n\t\twriteUInt16(os, entry.nameID);\n\t\twriteUInt16(os, entry.name.length());\n\t\twriteUInt16(os, offset);\n\t\toffset += entry.name.length();\n\t}\n\tfor (const NameEntry &entry : nameEntries) {\n\t\twriteUInt16(os, 3);  // Windows\n\t\twriteUInt16(os, 1);  // UCS-2 encoding\n\t\twriteUInt16(os, 0x0409);  // US English\n\t\twriteUInt16(os, entry.nameID);\n\t\twriteUInt16(os, 2*entry.name.length());\n\t\twriteUInt16(os, offset);\n\t\toffset += 2*entry.name.length();\n\t}\n\t// write string data\n\tfor (const NameEntry &entry : nameEntries) {\n\t\tfor (char c : entry.name)\n\t\t\twriteUInt8(os, c);\n\t}\n\tfor (const NameEntry &entry : nameEntries) {\n\t\tfor (char c : entry.name) {\n\t\t\twriteUInt8(os, 0);\n\t\t\twriteUInt8(os, c);\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/ttf/NameTable.hpp",
    "content": "/*************************************************************************\n** NameTable.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <string>\n#include <vector>\n#include \"TTFTable.hpp\"\n\nnamespace ttf {\n\n/** This class provides the functions required to write the naming table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/name.htm */\nclass NameTable : public TTFTable {\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"name\");}\n\t\tvoid write (std::ostream &os) const override;\n};\n\n} // namespace ttf"
  },
  {
    "path": "src/ttf/OS2Table.cpp",
    "content": "/*************************************************************************\n** OS2Table.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <array>\n#include <cmath>\n#include <vector>\n#include \"../algorithm.hpp\"\n#include \"OS2Table.hpp\"\n#include \"TTFWriter.hpp\"\n#include \"../Font.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\n\n/** Returns the average width of all non-zero width glyphs.\n *  https://docs.microsoft.com/en-us/typography/opentype/spec/os2#acw */\nint16_t OS2Table::averageCharWidth () const {\n\tconst RangeMap &charmap = ttfWriter()->getUnicodeCharMap();\n\tif (charmap.empty())\n\t\treturn 0;\n\tint sum=ttfWriter()->hAdvance(0);  // width of .notdef character\n\tint count=1;\n\tfor (auto uc2charcode : charmap) {\n\t\tint c = int(uc2charcode.second);\n\t\tif (int w = ttfWriter()->hAdvance(c)) {\n\t\t\tsum += w;\n\t\t\tcount++;\n\t\t}\n\t}\n\treturn int16_t(double(sum)/count);\n}\n\nstatic vector<uint32_t> compute_unicode_range_bits (const RangeMap &charmap);\n\n\nvoid OS2Table::write (ostream &os) const {\n\tconst PhysicalFont &font = ttfWriter()->getFont();\n\tint upem = ttfWriter()->targetUnitsPerEm();\n\tdouble scale = ttfWriter()->unitsPerEmFactor();\n\tconst RangeMap &charmap = ttfWriter()->getUnicodeCharMap();\n\n\twriteUInt16(os, 3);   // table version\n\twriteInt16(os, averageCharWidth());  // average char width\n\twriteUInt16(os, 400);   // usWeightClass, \"normal\" for now\n\twriteUInt16(os, 5);     // usWidthClass, \"medium\" for now\n\twriteUInt16(os, 0);     // fsType\n\twriteInt16(os, round(0.65*upem));  // ySubscriptXSize\n\twriteInt16(os, round(0.7*upem));   // ySubscriptYSize\n\twriteInt16(os, round(-0.48*upem)); // ySubscriptXOffset\n\twriteInt16(os, round(0.14*upem));  // ySubscriptYOffset\n\twriteInt16(os, round(0.65*upem));  // ySuperscriptXSize\n\twriteInt16(os, round(0.7*upem));   // ySuperscriptYSize\n\twriteInt16(os, round(0.48*upem));  // ySuperscriptXOffset\n\twriteInt16(os, round(0.48*upem));  // ySuperscriptYOffset\n\twriteInt16(os, 102*upem/2048);     // yStrikeoutSize\n\twriteInt16(os, 530*upem/2048);     // yStrikeoutPosition\n\twriteInt16(os, 0);                 // sFamilyClass (no classification)\n\tfor (uint8_t p : {0, 0, 6, 0, 0, 0, 0, 0, 0, 0})  // Panose\n\t\twriteUInt8(os, p);\n\tfor (uint32_t bits : compute_unicode_range_bits(charmap))\n\t\twriteUInt32(os, bits);\n\twriteUInt32(os, name2id(\"dsvg\"));\n\twriteUInt16(os, 6);        // fsSelection, \"regular\" for now\n\twriteUInt16(os, min(charmap.minKey(), uint32_t(0xFFFF)));  // usFirstCharIndex\n\twriteUInt16(os, min(charmap.maxKey(), uint32_t(0xFFFF)));  // usLastCharIndex\n\twriteInt16(os, round(scale*font.ascent()));   // sTypoAscender\n\twriteInt16(os, round(-scale*font.descent())); // sTypoDescender\n\twriteInt16(os, 0);        // sTypoLineGap\n\twriteUInt16(os, round(scale*font.ascent()));\n\twriteUInt16(os, round(scale*font.descent()));\n\twriteUInt32(os, 1);  // ulCodePageRange1, \"Latin 1\" for now\n\twriteUInt32(os, 0);  // ulCodePageRange2\n\twriteInt16(os, 0);   // sxHeight\n\twriteInt16(os, charmap.valueExists(0x48) ? 0x48 : 0);   // sCapHeight\n\twriteUInt16(os, 0);  // usDefaultChar\n\twriteUInt16(os, charmap.valueExists(0x20) ? 0x20 : 0xffff);  // usBreakChar (space or .notdef)\n\twriteUInt16(os, 0);  // usMaxContext\n}\n\n#if 0\nvoid OS2Table::updateYMinMax (int16_t ymin, int16_t ymax) {\n\t_usWinAscent = max(_usWinAscent, uint16_t(ymax));\n\t_usWinDescent = max(_usWinDescent, uint16_t(ymin < 0 ? -ymin : 0));\n}\n#endif\n\n\n/** Returns the bit number denoting the Unicode range for a codepoint according to\n *  the OS/2 table specification. If there's no matching range for the codepoint,\n *  the function returns -1. Currently, only the ranges specified by OS/2 table\n *  version 1 are considered. */\nstatic int unicode_range_bit (uint32_t codepoint) {\n\tstruct UCRange {\n\t\tUCRange (uint32_t cp) : first(cp), last(cp), os2bit(0) {}\n\t\tUCRange (uint32_t cp1, uint32_t cp2, int bit) : first(cp1), last(cp2), os2bit(bit) {}\n\t\tuint32_t first, last;\n\t\tint os2bit;\n\t};\n\t// Unicode ranges according to http://unicode.org/Public/UNIDATA/Blocks.txt\n\tstatic array<UCRange, 100> ucranges {{\n\t\t{0x00020, 0x0007E,   0},  // Basic Latin\n\t\t{0x000A0, 0x000FF,   1},  // Latin-1 Supplement\n\t\t{0x00100, 0x0017F,   2},  // Latin Extended-A\n\t\t{0x00180, 0x0024F,   3},  // Latin Extended-B\n\t\t{0x00250, 0x002AF,   4},  // IPA Extensions\n\t\t{0x002B0, 0x002FF,   5},  // Spacing Modifier Letters\n\t\t{0x00300, 0x0036F,   6},  // Combining Diacritical Marks\n\t\t{0x00370, 0x003FF,   7},  // Greek and Coptic\n\t\t{0x00400, 0x0052F,   9},  // Cyrillic / Cyrillic Supplement\n\t\t{0x00530, 0x0058F,  10},  // Armenian\n\t\t{0x00590, 0x005FF,  11},  // Hebrew\n\t\t{0x00600, 0x006FF,  13},  // Arabic\n\t\t{0x00700, 0x0074F,  71},  // Syriac\n\t\t{0x00750, 0x0077F,  13},  // Arabic Supplement\n\t\t{0x00780, 0x007BF,  72},  // Thaana\n\t\t{0x007C0, 0x007FF,  14},  // N'Ko\n\t\t{0x00800, 0x0083F,  12},  // Samaritan\n\t\t{0x00900, 0x0097F,  15},  // Devanagari\n\t\t{0x00980, 0x009FF,  16},  // Bengali\n\t\t{0x00A00, 0x00A7F,  17},  // Gurmukhi\n\t\t{0x00A80, 0x00AFF,  18},  // Gujarati\n\t\t{0x00B00, 0x00B7F,  19},  // Oriya\n\t\t{0x00B80, 0x00BFF,  20},  // Tamil\n\t\t{0x00C00, 0x00C7F,  21},  // Telugu\n\t\t{0x00C80, 0x00CFF,  22},  // Kannada\n\t\t{0x00D00, 0x00D7F,  23},  // Malayalam\n\t\t{0x00E00, 0x00E7F,  24},  // Thai\n\t\t{0x00E80, 0x00EFF,  25},  // Lao\n\t\t{0x010A0, 0x010FF,  26},  // Georgian\n\t\t{0x01100, 0x011FF,  28},  // Hangul Jamo\n\t\t{0x01B00, 0x01B7F,  27},  // Balinese\n\t\t{0x01D00, 0x01DBF,   4},  // Phonetic Extensions & Supplement\n\t\t{0x01D80, 0x01DFF,   6},  // Combining Diacritical Marks Supplement\n\t\t{0x01E00, 0x01EFF,  29},  // Latin Extended Additional\n\t\t{0x01F00, 0x01FFF,  30},  // Greek Extended\n\t\t{0x02000, 0x0206F,  31},  // General Punctuation\n\t\t{0x02070, 0x0209F,  32},  // Superscripts and Subscripts\n\t\t{0x020A0, 0x020CF,  33},  // Currency Symbols\n\t\t{0x020D0, 0x020FF,  34},  // Combining Marks for Symbols\n\t\t{0x02100, 0x0214F,  35},  // Letterlike Symbols\n\t\t{0x02150, 0x0218F,  36},  // Number Forms\n\t\t{0x02190, 0x021FF,  37},  // Arrows\n\t\t{0x02200, 0x022FF,  38},  // Mathematical Operators\n\t\t{0x02300, 0x0237F,  39},  // Miscellaneous Technical\n\t\t{0x02400, 0x0243F,  40},  // Control Pictures\n\t\t{0x02440, 0x0245F,  41},  // Optical Character Recognition\n\t\t{0x02460, 0x024FF,  42},  // Enclosed Alphanumerics\n\t\t{0x02500, 0x0257F,  43},  // Box Drawing\n\t\t{0x02580, 0x0259F,  44},  // Block Elements\n\t\t{0x025A0, 0x025FF,  45},  // Geometric Shapes\n\t\t{0x02600, 0x0267F,  46},  // Miscellaneous Symbols\n\t\t{0x02700, 0x027BF,  47},  // Dingbats\n\t\t{0x027C0, 0x027EF,  38},  // Miscellaneous Mathematical Symbols-A\n\t\t{0x027F0, 0x027FF,  37},  // Supplementary Arrows-A\n\t\t{0x02800, 0x028FF,  82},  // Braille Patterns\n\t\t{0x02900, 0x0297F,  37},  // Supplementary Arrows-B\n\t\t{0x02980, 0x02AFF,  38},  // Miscellaneous Mathematical Symbols-B + Supplemental Mathematical Operators\n\t\t{0x02B00, 0x02BFF,  37},  // Miscellaneous Symbols and Arrows\n\t\t{0x02C60, 0x02C7F,  29},  // Latin Extended-C\n\t\t{0x02C80, 0x02CFF,   8},  // Coptic\n\t\t{0x02D00, 0x02D25,  26},  // Georgian Supplement\n\t\t{0x02DE0, 0x02DFF,   9},  // Cyrillic Extended-A\n\t\t{0x02E00, 0x02E7F,  31},  // Supplemental Punctuation\n\t\t{0x02E80, 0x02FFF,  59},  // CJK Radicals Supplement + Kangxi Radicals + Ideographic Description Characters\n\t\t{0x03000, 0x0303F,  48},  // CJK Symbols and Punctuation\n\t\t{0x03040, 0x0309F,  49},  // Hiragana\n\t\t{0x030A0, 0x030FF,  50},  // Katakana\n\t\t{0x03100, 0x0312F,  51},  // Bopomofo\n\t\t{0x03130, 0x0318F,  52},  // Hangul Compatibility Jamo\n\t\t{0x03190, 0x0319F,  59},  // Kanbun\n\t\t{0x031A0, 0x031BF,  51},  // Bopomofo Extended\n\t\t{0x031F0, 0x031FF,  50},  // Katakana Phonetic Extensions\n\t\t{0x03200, 0x032FF,  54},  // Enclosed CJK Letters and Months\n\t\t{0x03300, 0x033FF,  55},  // CJK compatibility\n\t\t{0x03400, 0x04DBF,  59},  // CJK Unified Ideographs Extension A\n\t\t{0x04E00, 0x09FFF,  59},  // CJK Unified Ideographs\n\t\t{0x0A500, 0x0A62B,  12},  // Vai\n\t\t{0x0A640, 0x0A69F,   9},  // Cyrillic Extended-B\n\t\t{0x0A700, 0x0A71F,   5},  // Modifier Tone Letters\n\t\t{0x0A720, 0x0A7FF,  29},  // Latin Extended-D\n\t\t{0x0A840, 0x0A87F,  53},  // Phags-pa\n\t\t{0x0AC00, 0x0D7AF,  56},  // Hangul Syllables\n\t\t{0x0D800, 0x0DFFF,  57},  // Non-Plane 0\n\t\t{0x0E000, 0x0F8FF,  60},  // Private Use Area\n\t\t{0x0F900, 0x0FAFF,  61},  // CJK Compatibility Ideographs\n\t\t{0x0FA2A, 0x0FAFF,  61},  // CJK Compatibility Ideographs\n\t\t{0x0FB00, 0x0FB4F,  62},  // Alphabetic Presentation Forms\n\t\t{0x0FB50, 0x0FDFF,  63},  // Arabic Presentation Forms-A\n\t\t{0x0FE00, 0x0FE0F,  91},  // Variation Selectors\n\t\t{0x0FE20, 0x0FE2F,  64},  // Combining Half Marks\n\t\t{0x0FE30, 0x0FE4F,  65},  // CJK Compatibility Forms\n\t\t{0x0FE50, 0x0FE6F,  66},  // Small Form Variants\n\t\t{0x0FE70, 0x0FEEF,  67},  // Arabic Presentation Forms-B\n\t\t{0x0FF00, 0x0FFEF,  68},  // Halfwidth and Fullwidth Forms\n\t\t{0x0FFF0, 0x0FFFF,  69},  // Specials\n\t\t{0x10900, 0x1091F,  58},  // Phoenician\n\t\t{0x20000, 0x2A6DF,  59},  // CJK Unified Ideographs Extension B\n\t\t{0x2A700, 0x2B73F,  59},  // CJK Unified Ideographs Extension C\n\t\t{0x2B740, 0x2B81F,  59},  // CJK Unified Ideographs Extension D\n\t\t{0x2F800, 0x2FA1F,  61},  // CJK Compatibility Ideographs Supplement\n\t}};\n\tauto it = algo::lower_bound(ucranges, UCRange(codepoint), [](const UCRange &r1, const UCRange &r2) {\n\t\treturn r1.last < r2.first;\n\t});\n\tif (it != ucranges.end() && codepoint >= it->first && codepoint <= it->last)\n\t\treturn it->os2bit;\n\treturn -1;\n}\n\n\n/** Returns the Unicode ranges encompassed by the font. The ranges are encoded by four dwords,\n *  where each of the 128 bits represents a certain range. The returned vector contains the\n *  dwords in little-endian order, i.e. [bits 0-31, bits 32-63, bits 64-95, bits 96-127]. */\nstatic vector<uint32_t> compute_unicode_range_bits (const RangeMap &charmap) {\n\tvector<uint32_t> rangeBits(4, 0);\n\tfor (auto uc2charcode : charmap) {\n\t\tint bit = unicode_range_bit(uc2charcode.first);\n\t\tif (bit >= 0) {\n\t\t\tfor (int i=0; i < 4; i++) {\n\t\t\t\tif (bit < 32*(i+1)) {\n\t\t\t\t\trangeBits[i] |= (1 << (bit-32*i));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn rangeBits;\n}\n"
  },
  {
    "path": "src/ttf/OS2Table.hpp",
    "content": "/*************************************************************************\n** OS2Table.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <array>\n#include \"TTFTable.hpp\"\n\nnamespace ttf {\n\n/** This class provides the functions required to write the OS/2 and Windows metrics\n *  table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/os2.htm */\nclass OS2Table : public TTFTable {\n\tfriend class TTFWriter;\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"OS/2\");}\n\t\tvoid write (std::ostream &os) const override;\n\n\tprotected:\n\t\tint16_t averageCharWidth () const;\n\t\tvoid updateXMinMax (int16_t xmin, int16_t xmax) {_xmax = xmax;}\n\t\tvoid updateYMinMax (int16_t ymin, int16_t ymax) {}\n\n\tprivate:\n\t\tint16_t _xmax=0;\n};\n\n} // namespace ttf"
  },
  {
    "path": "src/ttf/PostTable.cpp",
    "content": "/*************************************************************************\n** PostTable.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"PostTable.hpp\"\n#include \"TTFWriter.hpp\"\n#include \"../Font.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\n#if 0\n/** Writes a string in Pascal format to an output stream. The string should not be\n *  longer than 255 characters. Otherwise, it's truncated accordingly. */\nstatic void write_pascal_string (ostream &os, const string &str) {\n\tsize_t len = std::min(str.length(), size_t(255));\n\twriteUInt8(os, len);   // first byte determines the string length\n\tfor (size_t i=0; i < len; i++)\n\t\twriteUInt8(os, str[i]);\n}\n#endif\n\n\nvoid PostTable::write (ostream &os) const {\n\twriteUInt32(os, 0x30000);   // table version 3\n\twriteInt32(os, 0);   // italic angle\n\twriteInt16(os, 0);   // underline position\n\twriteInt16(os, 0);   // underline thickness\n\twriteUInt32(os, ttfWriter()->isFixedPitch());  // 1 = fixed pitch\n\twriteUInt32(os, 0);  // minMemType42\n\twriteUInt32(os, 0);  // maxMemType42\n\twriteUInt32(os, 0);  // minMemType1\n\twriteUInt32(os, 0);  // maxMemType1\n/*\twriteUInt16(os, ttfWriter()->getUnicodeCharMap().numValues());\n\t// write name indexes in glyph ID order (index 0 = \".notdef\")\n\tuint16_t index=0;\n\tfor (auto cp2charcode : ttfWriter()->getUnicodeCharMap()) {\n\t\tstring name = ttfWriter()->getFont().glyphName(cp2charcode.second);\n\t\twriteUInt16(os, name.empty() || name == \".notdef\" ? 0 : ++index);\n\t}\n\t// write the glyph names in glyph ID order\n\tfor (auto cp2charcode : ttfWriter()->getUnicodeCharMap()) {\n\t\tstring name = ttfWriter()->getFont().glyphName(cp2charcode.second);\n\t\tif (!name.empty() && name != \".notdef\")\n\t\t\twrite_pascal_string(os, name);\n\t}*/\n}\n"
  },
  {
    "path": "src/ttf/PostTable.hpp",
    "content": "/*************************************************************************\n** PostTable.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include \"TTFTable.hpp\"\n\nnamespace ttf {\n\n/** This class provides the functions required to write the PostScript table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/post.htm */\nclass PostTable : public TTFTable {\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"post\");}\n\t\tvoid write (std::ostream &os) const override;\n};\n\n} // namespace ttf"
  },
  {
    "path": "src/ttf/TTFAutohint.cpp",
    "content": "/*************************************************************************\n** TTFAutohint.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <fstream>\n#include <memory>\n#include \"../MessageException.hpp\"\n#include \"../utility.hpp\"\n#include \"TTFAutohint.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\n#ifndef HAVE_TTFAUTOHINT_H\nTTFAutohint::TTFAutohint () {}\n\nbool TTFAutohint::available () const {\n\treturn false;\n}\n\nint TTFAutohint::autohint (const string&, const string&, bool) {\n\treturn 0;\n}\n\nstring TTFAutohint::lastErrorMessage () const {\n\treturn \"\";\n}\n\nstring TTFAutohint::version () const {\n\treturn \"\";\n}\n\n#else  // HAVE_TTFAUTOHINT_H\n\n#include <ttfautohint.h>\n\n#ifndef HAVE_LIBTTFAUTOHINT\nstatic string get_libttfautohint () {\n#ifdef _WIN32\n\treturn \"ttfautohint.dll\";\n#else\n\tstring dlname = \"libttfautohint.so.1\";\n#ifdef __APPLE__\n\tDLLoader loader(dlname);\n\tif (!loader.loaded())\n\t\tdlname = \"libttfautohint.1.dylib\";\n#endif\n\treturn dlname;\n#endif // _WIN32\n}\n#endif // HAVE_LIBTTFAUTOHINT\n\n\nTTFAutohint::TTFAutohint ()\n#ifndef HAVE_LIBTTFAUTOHINT\n\t: DLLoader(get_libttfautohint())\n#endif\n{\n}\n\n\n/** Returns true if the ttfautohint library is present. */\nbool TTFAutohint::available () const {\n#ifdef HAVE_LIBTTFAUTOHINT\n\treturn true;\n#else\n\treturn loaded();\n#endif\n}\n\n\n/** Runs ttfautohint on a given font file.\n *  @param[in] source name of TTF input file\n *  @param[in] target name of TTF output file\n *  @param[in] rehintIfSymbolFont if true, ttfautohint is run again with option \"symbol\" in case regular hinting is rejected.\n *  @return ttfautohint error code (0 = success) */\nint TTFAutohint::autohint (const string &source, const string &target, bool rehintIfSymbolFont) {\n#ifdef HAVE_LIBTTFAUTOHINT\n\tauto fn = &TTF_autohint;\n#else\n\tauto fn = LOAD_SYMBOL(TTF_autohint);\n#endif\n\tint ret=0;\n\tif (fn) {\n\t\t_lastErrorMessage = nullptr;\n\t\tifstream ifs(source, ios::binary|ios::ate);\n\t\tif (!ifs)\n\t\t\tthrow MessageException(\"failed to open '\"+source+\"' for reading\");\n\t\tsize_t inbufSize = ifs.tellg();\n\t\tifs.seekg(0, ios::beg);\n\t\tauto inbuf = util::make_unique<char[]>(inbufSize);\n\t\tif (!ifs.read(inbuf.get(), inbufSize))\n\t\t\tthrow MessageException(\"failed to read from '\"+source+\"'\");\n\t\tchar *outbuf = nullptr;\n\t\tsize_t outbufSize;\n\t\tret = fn(\"in-buffer, in-buffer-len, out-buffer, out-buffer-len, default-script, error-string, alloc-func\",\n\t\t\tinbuf.get(), inbufSize, &outbuf, &outbufSize, \"latn\", &_lastErrorMessage, &std::malloc);\n\t\tif (ret == TA_Err_Missing_Glyph && rehintIfSymbolFont) {\n\t\t\tifs.clear();\n\t\t\tifs.seekg(0, ios::beg);\n\t\t\tstd::free(outbuf);\n\t\t\tret = fn(\"in-buffer, in-buffer-len, out-buffer, out-buffer-len, symbol, error-string, alloc-func\",\n\t\t\t\tinbuf.get(), inbufSize, &outbuf, &outbufSize, true, &_lastErrorMessage, &std::malloc);\n\t\t}\n\t\tif (ret == 0) {\n\t\t\tofstream ofs(target, ios::binary);\n\t\t\tif (ofs)\n\t\t\t\tofs.write(outbuf, outbufSize);\n\t\t\telse\n\t\t\t\tthrow MessageException(\"failed to open '\"+target+\"' for writing\");\n\t\t}\n\t\tstd::free(outbuf);\n\t}\n\treturn ret;\n}\n\n\n/** Returns the error message of the last autohint call. */\nstring TTFAutohint::lastErrorMessage () const {\n\tstring message;\n\tif (_lastErrorMessage)\n\t\tmessage = reinterpret_cast<const char*>(_lastErrorMessage);\n\treturn message;\n}\n\n\n/** Returns the version number of ttfautohint. */\nstring TTFAutohint::version () const {\n#ifdef HAVE_LIBTTFAUTOHINT\n\tauto fn = &TTF_autohint_version;\n#else\n\tauto fn = LOAD_SYMBOL(TTF_autohint_version);\n#endif\n\tstring ret;\n\tif (fn) {\n\t\tint major, minor, revision;\n\t\tfn(&major, &minor, &revision);\n\t\tret = to_string(major)+\".\"+to_string(minor);\n\t\tif (revision)\n\t\t\tret += \".\"+to_string(revision);\n\t}\n\treturn ret;\n}\n\n#endif // HAVE_TTFAUTOHINT_H\n"
  },
  {
    "path": "src/ttf/TTFAutohint.hpp",
    "content": "/*************************************************************************\n** TTFAutohint.hpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <config.h>\n#include <string>\n\n#if defined(HAVE_TTFAUTOHINT_H) && !defined(HAVE_LIBTTFAUTOHINT)\n#include \"../DLLoader.hpp\"\n#endif\n\nnamespace ttf {\n\nclass TTFAutohint\n#if defined(HAVE_TTFAUTOHINT_H) && !defined(HAVE_LIBTTFAUTOHINT)\n\t: public DLLoader\n#endif\n{\n\tpublic:\n\t\tTTFAutohint ();\n\t\tTTFAutohint (const TTFAutohint &ta) =delete;\n\t\tbool available () const;\n\t\tint autohint (const std::string &source, const std::string &target, bool rehintIfSymbolFont);\n\t\tstd::string lastErrorMessage () const;\n\t\tstd::string version () const;\n\n#ifdef HAVE_TTFAUTOHINT_H\n\tprivate:\n\t\tconst unsigned char *_lastErrorMessage;  ///< message created by last call of 'autohint'\n#endif\n};\n\n} // namespace ttf\n\n"
  },
  {
    "path": "src/ttf/TTFTable.cpp",
    "content": "/*************************************************************************\n** TTFTable.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <vectorstream.hpp>\n#include <zlib.h>\n#include \"TTFTable.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\n\nTableBuffer::TableBuffer (uint32_t tag, vector<char> data)\n\t: _tag(tag), _unpaddedSize(data.size()), _compressedSize(_unpaddedSize), _data(std::move(data))\n{\n\t_data.resize((_unpaddedSize+3) & ~3, 0);  // ensure data.size() % 4 == 0\n\tfor (size_t i=0; i < paddedSize(); i+=4) {\n\t\tauto *bytes = reinterpret_cast<const uint8_t*>(_data.data());\n\t\t_checksum += bytes[i]*0x1000000 + bytes[i+1]*0x010000 + bytes[i+2]*0x0100 + bytes[i+3];\n\t}\n}\n\n\nTableBuffer::TableBuffer (uint32_t tag, vector<char> data, size_t checksumExcludeOffset)\n\t: TableBuffer(tag, std::move(data))\n{\n\tif (checksumExcludeOffset+4 < _data.size())\n\t\t_checksum -= getUInt32(checksumExcludeOffset);\n}\n\n\nstring TableBuffer::name () const {\n\tstring ret;\n\tfor (int i=3; i >= 0; i--) {\n\t\tchar c = char(_tag >> (8*i));\n\t\tret += (c >= 32 && c <= 126 ? c : '*');\n\t}\n\treturn ret;\n}\n\n\n/** Tries to compress the buffer data. If the size of the compressed buffer data is\n *  greater or equal than the size of the uncompressed data, the buffer stays uncompressed.\n *  @returns true if the data was compressed */\nvoid TableBuffer::compress () {\n\tif (_data.size() < 16)\n\t\treturn;\n\tuLong compressedSize = compressBound(_data.size());\n\tvector<char> compressedData(compressedSize, 0);\n\t// Compress with zlib for now. We could also use zopfli for slightly better but much slower compression.\n\t// Only use the compressed data if it actually leads to a size reduction. Otherwise, use the original table data.\n\tauto source = reinterpret_cast<const Bytef*>(_data.data());\n\tauto target = reinterpret_cast<Bytef*>(&compressedData[0]);\n\tif (compress2(target, &compressedSize, source, _unpaddedSize, Z_BEST_COMPRESSION) == Z_OK && compressedSize < _unpaddedSize) {\n\t\t_compressedSize = compressedSize;\n\t\t_data = std::move(compressedData);\n\t\t_data.resize((compressedSize+3) & ~3, 0);  // reduce buffer to padded compressed size\n\t}\n}\n\n////////////////////////////////////////////////////////////////////////////////////\n\n/** Creates a buffer object containing the binary data represented by this table. */\nTableBuffer TTFTable::createBuffer () const {\n\tovectorstream<vector<char>> vecstream;\n\twrite(vecstream);\n\tvector<char> vec;\n\tvecstream.swap_vector(vec);  // move data from vector stream to vec\n\treturn {tag(), std::move(vec)};\n}\n\n\nstring TTFTable::name () const {\n\tstring ret;\n\tfor (int i=3; i >= 0; i--)\n\t\tret += char(tag() >> (8*i));\n\treturn ret;\n}\n"
  },
  {
    "path": "src/ttf/TTFTable.hpp",
    "content": "/*************************************************************************\n** TTFTable.hpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n#include <cstdint>\n#include <ostream>\n#include <sstream>\n#include <vector>\n\nnamespace ttf {\n\n/** Class to handle the binary TTF table data. */\nclass TableBuffer {\n\tfriend class TTFWriter;\n\tpublic:\n\t\tTableBuffer (uint32_t tag, std::vector<char> data);\n\t\tTableBuffer (uint32_t tag, std::vector<char> data, size_t checksumExcludeOffset);\n\t\tuint32_t tag () const {return _tag;}\n\t\tuint32_t unpaddedSize () const {return _unpaddedSize;}\n\t\tuint32_t paddedSize () const {return uint32_t(_data.size());}\n\t\tuint32_t compressedSize () const {return _compressedSize;}\n\t\tuint32_t checksum () const {return _checksum;}\n\t\tvoid compress ();\n\t\tstd::string name () const;\n\n\t\tuint8_t getUInt8 (size_t offs) const {return _data[offs];}\n\t\tuint16_t getUInt16 (size_t offs) const {return getUInt8(offs)*0x100 + getUInt8(offs+1);}\n\t\tuint32_t getUInt32 (size_t offs) const {return getUInt16(offs)*0x10000 + getUInt16(offs+2);}\n\n\t\t/** Writes the n bytes of a given value in big-endian order to the buffer.\n\t\t *  The buffer must be big enough to take the value at the desired position.\n\t\t *  It is not resized automatically.\n\t\t *  @param[in] offset offset/index the first byte is written to\n\t\t *  @param[in] val the value to write */\n\t\ttemplate <typename T>\n\t\tvoid setData (size_t offset, const T val) {\n\t\t\tif (offset+sizeof(T) <= _data.size()) {\n\t\t\t\ttypename std::make_unsigned<T>::type uval = val;\n\t\t\t\tfor (int i = sizeof(T)-1; i >= 0; i--)\t{\n\t\t\t\t\t_data[offset+i] = uint8_t(uval & 0xff);\n\t\t\t\t\tuval >>= 8;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/** Writes the buffer data to the given output stream. */\n\t\tvoid write (std::ostream &os) const {\n\t\t\tos.write(_data.data(), _data.size());\n\t\t}\n\n\tprivate:\n\t\tuint32_t _tag;            ///< tag/ID of corresponding TTF table\n\t\tuint32_t _unpaddedSize;   ///< size of the buffer excluding pad bytes\n\t\tuint32_t _compressedSize; ///< sizeof compressed buffer excluding pad bytes\n\t\tuint32_t _checksum=0;     ///< checksum of uncompressed data\n\t\tstd::vector<char> _data;  ///< the (compressed/uncompressed) table data including pad bytes\n};\n\n\nclass TTFWriter;\n\n/** Abstract base class for all TTF tables. */\nclass TTFTable {\n\tfriend class TTFWriter;\n\tpublic:\n\t\tvirtual ~TTFTable () =default;\n\t\tvirtual uint32_t tag () const =0;\n\t\tvirtual void write (std::ostream &os) const =0;\n\t\tbool active () const {return _ttfWriter != nullptr;}\n\t\tTableBuffer createBuffer () const;\n\t\tstd::string name () const;\n\n\t\tstatic constexpr uint32_t name2id (const char *str) {\n\t\t\treturn (str[0] << 24) | (str[1] << 16) | (str[2] << 8) | str[3];\n\t\t}\n\n\tprotected:\n\t\tvoid setTTFWriter (TTFWriter *ttfWriter) {_ttfWriter = ttfWriter;}\n\t\tTTFWriter* ttfWriter () const {return _ttfWriter;}\n\n\t\tstatic void writeUInt8 (std::ostream &os, uint8_t val)   {os.put(val);}\n\t\tstatic void writeUInt16 (std::ostream &os, uint16_t val) {os.put(val >> 8); os.put(val & 0xff);}\n\t\tstatic void writeUInt32 (std::ostream &os, uint32_t val) {writeUInt16(os, val >> 16); writeUInt16(os, val & 0xffff);}\n\t\tstatic void writeInt8 (std::ostream &os, int8_t val)     {writeUInt8(os, uint8_t(val));}\n\t\tstatic void writeInt16 (std::ostream &os, int16_t val)   {writeUInt16(os, uint16_t(val));}\n\t\tstatic void writeInt32 (std::ostream &os, int32_t val)   {writeUInt32(os, uint32_t(val));}\n\n\tprivate:\n\t\tTTFWriter *_ttfWriter=nullptr;\n};\n\n} // namespace ttf\n"
  },
  {
    "path": "src/ttf/TTFWriter.cpp",
    "content": "/*************************************************************************\n** TTFWriter.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include <iterator>\n#include <fstream>\n#include <list>\n#include <woff2/encode.h>\n#include \"TTFWriter.hpp\"\n#include \"../algorithm.hpp\"\n#include \"../Font.hpp\"\n#include \"../utility.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\n#ifdef TTFDEBUG\nbool TTFWriter::CREATE_PS_GLYPH_OUTLINES;\n#endif\n\n\nTTFWriter::TTFWriter (const PhysicalFont &font, const set<int> &chars) :\n\t_font(font),\n\t_tracerCallback(),\n\t_tables({&_cmap, &_glyf, &_hmtx, &_hhea, &_loca, &_maxp, &_name, &_os2, &_post, &_head})  // mandatory tables\n{\n\tif (font.verticalLayout()) {  // is font designed for vertical layout?\n\t\t_tables.push_back(&_vmtx);\n\t\t_tables.push_back(&_vhea);\n\t}\n\tfor (TTFTable *table : _tables)\n\t\ttable->setTTFWriter(this);\n\tfor (uint32_t c : chars) {\n\t\tuint32_t codepoint = font.unicode(c);\n\t\t_unicodeCharMap.addRange(codepoint, codepoint, c);\n\t}\n}\n\n\n/** Pseudo table representing the TTF header (aka \"offset table\"). */\nclass TTFHeader : public TTFTable {\n\tpublic:\n\t\texplicit TTFHeader (uint16_t numTables) : _numTables(numTables) {}\n\t\tuint32_t tag () const override {return 0;}\n\n\t\tvoid write (ostream &os) const override {\n\t\t\twriteUInt32(os, 0x00010000);  // sfntVersion\n\t\t\twriteUInt16(os, _numTables);\n\t\t\tuint16_t entrySelector = max(0, util::ilog2(_numTables));\n\t\t\tuint16_t searchRange = (1 << entrySelector)*16;\n\t\t\twriteUInt16(os, searchRange);\n\t\t\twriteUInt16(os, entrySelector);\n\t\t\twriteUInt16(os, _numTables*16-searchRange);  // rangeShift\n\t\t}\n\n\tprivate:\n\t\tuint16_t _numTables;\n};\n\n\n/** Pseudo table representing the table records. */\nclass TTFTableRecords : public TTFTable {\n\tpublic:\n\t\texplicit TTFTableRecords (const list<TableBuffer> &buffers) : _buffers(buffers) {}\n\t\tuint32_t tag () const override {return 0;}\n\n\t\tvoid write (ostream &os) const override {\n\t\t\tsize_t numTables = algo::count_if(_buffers, [](const TableBuffer &buffer) {\n\t\t\t\treturn buffer.tag() != 0;\n\t\t\t});\n\t\t\tuint32_t offset = 12 + 16*numTables;\n\t\t\tfor (const TableBuffer &buffer : _buffers) {\n\t\t\t\tif (buffer.tag()) {\n\t\t\t\t\twriteUInt32(os, buffer.tag());\n\t\t\t\t\twriteUInt32(os, buffer.checksum());\n\t\t\t\t\twriteUInt32(os, offset);\n\t\t\t\t\twriteUInt32(os, buffer.unpaddedSize());\n\t\t\t\t\toffset += buffer.paddedSize();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\tprivate:\n\t\tconst list<TableBuffer> &_buffers;\n};\n\n\n/** Writes the font data in TrueType format to the given output stream. */\nbool TTFWriter::writeTTF (ostream &os) const {\n\t// write TTF data\n\tfor (list<TableBuffer> buffers = createTableBuffers(); !buffers.empty(); buffers.pop_front())\n\t\tbuffers.front().write(os);\n\treturn true; // @@\n}\n\n\n/** Writes the font data in TrueType format to the given file. */\nbool TTFWriter::writeTTF (const string &ttfname) const {\n\tofstream ofs(ttfname, ios::binary);\n\tif (ofs)\n\t\treturn writeTTF(ofs);\n\treturn false;\n}\n\n\n/** Returns a list containing the binary TTF data segmented by the TTF tables.\n *  The first two list entries represent the TTF header (aka \"offset table\") and\n *  the table records, respectively. */\nstd::list<TableBuffer> TTFWriter::createTableBuffers () const {\n\tlist<TableBuffer> buffers;\n\tfor (const TTFTable *table : _tables)\n\t\tbuffers.emplace_back(table->createBuffer());\n\t// sort table buffers according to their tag/ID in ascending order\n\tbuffers.sort([](const TableBuffer &buf1, const TableBuffer &buf2) {\n\t\treturn buf1.tag() < buf2.tag();\n\t});\n\tTTFHeader header(_tables.size());\n\tTTFTableRecords records(buffers);\n\tbuffers.emplace_front(records.createBuffer());\n\tbuffers.emplace_front(header.createBuffer());\n\t// compute global checksum (checkSumAdjustment entry of head table)\n\tuint32_t checksum = algo::accumulate(buffers, 0, [](uint32_t sum, const TableBuffer &buf) {\n\t\treturn sum + buf.checksum();\n\t});\n\tchecksum = 0xB1B0AFBA-checksum;\n\t// write checksum directly to the head table buffer\n\tauto headBufferIt = algo::find_if(buffers, [](const TableBuffer &buf) {\n\t\treturn buf.tag() == TTFTable::name2id(\"head\");\n\t});\n\theadBufferIt->setData(HeadTable::offsetToChecksum(), checksum);\n\treturn buffers;\n}\n\n\n/** Returns a factor c that scales the units per EM of the source font to\n *  a value which is a power of 2, i.e. log2(c*upem) is an integer. */\ndouble TTFWriter::unitsPerEmFactor () const {\n\tdouble target_upem = targetUnitsPerEm();\n\treturn target_upem > 0 ? (target_upem/_font.unitsPerEm()) : 0.0;\n}\n\n\n/** Returns the units per EM of the TTF font to be written.\n *  According to the OTF specification, the value should be a power of 2\n *  if the font contains TTF outlines. */\nint TTFWriter::targetUnitsPerEm () const {\n\tint upem = _font.unitsPerEm();\n\tif (upem == 0)\n\t\treturn 0;\n\n\tif (upem < 16)\n\t\treturn 16;      // minimum allowed upem in TTF/OTF\n\tif (upem > 0x4000)\n\t\treturn 0x4000;  // maximum allowed upem in TTF/OTF\n\tint log2_upem = util::ilog2(upem);\n\tif ((1 << log2_upem) == upem)  // is upem of source font a power of 2?\n\t\treturn upem;\n\treturn 1 << (log2_upem+1);\n}\n\n\nint16_t TTFWriter::hAdvance (uint16_t c) const {\n\tdouble scale = unitsPerEmFactor();\n\tdouble extend = _font.style() ? _font.style()->extend : 1;\n\treturn int16_t(round(scale*extend*_font.hAdvance(c)));\n}\n\n\nvoid TTFWriter::updateGlobalBbox (uint32_t c, int16_t xmin, int16_t ymin, int16_t xmax, int16_t ymax) {\n\tif (xmin != 0 || ymin != 0 || xmax != 0 || ymax != 0)\n\t\t_hhea.updateXMinMax(c, xmin, xmax);\n\tif (xmin == 0 && xmax == 0)\n\t\txmax = hAdvance(c);\n\t_head.updateGlobalBbox(xmin, ymin, xmax, ymax);\n\t_hmtx.updateWidthData(c, xmin, xmax);\n\t_os2.updateXMinMax(xmin, xmax);\n\t_os2.updateYMinMax(ymin, ymax);\n\tif (_vhea.active()) {\n\t\t_vhea.updateYMinMax(c, ymin, ymax);\n\t\t_vmtx.updateHeightData(c, ymin, ymax);\n\t}\n}\n\n\n/** Converts TTF data to WOFF2 and writes the result to an output stream.\n *  @param[in] buffer contents of TTF file\n *  @param[in,out] os WOFF2 output stream\n *  @return true on success */\nstatic bool ttf_to_woff2 (const string &buffer, ostream &os) {\n\tconst auto input_data = reinterpret_cast<const uint8_t*>(buffer.data());\n\tsize_t output_size = woff2::MaxWOFF2CompressedSize(input_data, buffer.size());\n\tstring output(output_size, 0);\n\tauto output_data = reinterpret_cast<uint8_t*>(&output[0]);\n\twoff2::WOFF2Params params;\n\tif (woff2::ConvertTTFToWOFF2(input_data, buffer.size(), output_data, &output_size, params)) {\n\t\toutput.resize(output_size);\n\t\talgo::copy(output, ostream_iterator<uint8_t>(os));\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n\n/** Writes the font data in WOFF2 format to the given output stream. */\nbool TTFWriter::writeWOFF2 (ostream &os) const {\n\tostringstream oss;\n\tif (writeTTF(oss))\n\t\treturn ttf_to_woff2(oss.str(), os);\n\treturn false;\n}\n\n\n/** Writes the font data in WOFF2 format to the given file. */\nbool TTFWriter::writeWOFF2 (const string &woff2name) const {\n\tofstream ofs(woff2name, ios::binary);\n\tif (ofs)\n\t\treturn writeWOFF2(ofs);\n\treturn false;\n}\n\n\n/** Reads TTF data from an input stream, converts it to WOFF2, and\n *  writes the result to an output stream.\n *  @param[in,out] is TTF input stream\n *  @param[in,out] os WOFF2 output stream\n *  @return true on success */\nbool TTFWriter::convertTTFToWOFF2 (istream &is, ostream &os) {\n\tostringstream oss;\n\toss << is.rdbuf();\n\treturn ttf_to_woff2(oss.str(), os);\n}\n\n\n/** Reads TTF data from an input file, converts it to WOFF2, and\n *  writes the result to an output file.\n *  @param[in] ttfname name/path of TTF file\n *  @param[in] woff2name name/path of WOFF2 file\n *  @return true on success */\nbool TTFWriter::convertTTFToWOFF2 (const string &ttfname, const string &woff2name) {\n\tifstream ifs(ttfname, ios::binary);\n\tif (ifs) {\n\t\tofstream ofs(woff2name, ios::binary);\n\t\tif (ofs)\n\t\t\treturn convertTTFToWOFF2(ifs, ofs);\n\t}\n\treturn false;\n}\n\n\n/** Pseudo table representing the WOFF header. */\nclass WOFFHeader : public TTFTable {\n\tpublic:\n\t\tWOFFHeader (uint16_t numTables, uint32_t ttfSize, uint32_t woffSize)\n\t\t\t: _numTables(numTables), _ttfSize(ttfSize), _woffSize(woffSize) {}\n\n\t\tuint32_t tag () const override {return 0;}\n\n\t\tvoid write (ostream &os) const override {\n\t\t\twriteUInt32(os, 0x774F4646);    // \"WOFF\"\n\t\t\twriteUInt32(os, 0x10000);       // version of contained TTF font (1.0)\n\t\t\twriteUInt32(os, _woffSize);     // total length of WOFF file\n\t\t\twriteUInt16(os, _numTables);    // number of tables\n\t\t\twriteUInt16(os, 0);             // reserved\n\t\t\twriteUInt32(os, _ttfSize);      // size of uncompressed TTF data\n\t\t\twriteUInt32(os, 0);             // WOFF version (not required)\n\t\t\twriteUInt32(os, 0);             // offset to metadata block\n\t\t\twriteUInt32(os, 0);             // compressed size of metadata block\n\t\t\twriteUInt32(os, 0);             // uncompressed size of metadata block\n\t\t\twriteUInt32(os, 0);             // offset to private data block\n\t\t\twriteUInt32(os, 0);             // size of private data block\n\t\t}\n\n\tprivate:\n\t\tuint16_t _numTables;  ///< number of tables in WOFF file\n\t\tuint32_t _ttfSize;    ///< total length of TTF file\n\t\tuint32_t _woffSize;   ///< total length of WOFF file\n};\n\n\n/** Pseudo table representing the WOFF table records. */\nclass WOFFTableRecords : public TTFTable {\n\tpublic:\n\t\texplicit WOFFTableRecords (const list<TableBuffer> &buffers) : _buffers(buffers) {}\n\t\tuint32_t tag () const override {return 0;}\n\n\t\tvoid write (ostream &os) const override {\n\t\t\tuint32_t offset = 44 + 20*_buffers.size();      // offset to first byte of table data\n\t\t\tfor (const TableBuffer &buffer : _buffers) {\n\t\t\t\tif (buffer.tag()) {\n\t\t\t\t\twriteUInt32(os, buffer.tag());            // table tag/ID\n\t\t\t\t\twriteUInt32(os, offset);                  // offset to table from beginning of WOFF file\n\t\t\t\t\twriteUInt32(os, buffer.compressedSize()); // compressed length excluding padding\n\t\t\t\t\twriteUInt32(os, buffer.unpaddedSize());   // uncompressed length excluding padding\n\t\t\t\t\twriteUInt32(os, buffer.checksum());       // checksum of the uncompressed table\n\t\t\t\t}\n\t\t\t\toffset += buffer.paddedSize();\n\t\t\t}\n\t\t}\n\n\tprivate:\n\t\tconst list<TableBuffer> &_buffers;\n};\n\n\nstatic bool ttf_to_woff (list<TableBuffer> &&buffers, ostream &os) {\n\tsize_t ttfSize = algo::accumulate(buffers, size_t(0), [](size_t sum, const TableBuffer &buf) {\n\t\treturn sum + buf.paddedSize();\n\t});\n\tbuffers.pop_front();  // remove TTF header\n\tbuffers.pop_front();  // remove TTF table records\n\tfor (TableBuffer &buffer : buffers)\n\t\tbuffer.compress();\n\tsize_t woffSize = algo::accumulate(buffers, size_t(0), [](size_t sum, const TableBuffer &buf) {\n\t\treturn sum + buf.paddedSize();\n\t});\n\twoffSize += 44 + 20*buffers.size();  // add size of header and table records\n\tWOFFHeader header(buffers.size(), ttfSize, woffSize);\n\tWOFFTableRecords records(buffers);\n\tbuffers.emplace_front(records.createBuffer());\n\tbuffers.emplace_front(header.createBuffer());\n\tfor (; !buffers.empty(); buffers.pop_front())\n\t\tbuffers.front().write(os);\n\treturn true; // @@\n}\n\n\n/** Writes the font data in WOFF format to the given output stream. */\nbool TTFWriter::writeWOFF (ostream &os) {\n\treturn ttf_to_woff(createTableBuffers(), os);\n}\n\n\n/** Writes the font data in WOFF format to the given file. */\nbool TTFWriter::writeWOFF (const string &woffname) {\n\tofstream ofs(woffname, ios::binary);\n\tif (ofs)\n\t\treturn writeWOFF(ofs);\n\treturn false;\n}\n\n\n/** Reads TTF data from an input stream, converts it to WOFF, and\n *  writes the result to an output stream.\n *  @param[in,out] is TTF input stream\n *  @param[in,out] os WOFF output stream\n *  @return true on success */\nbool TTFWriter::convertTTFToWOFF (istream &is, ostream &os) {\n\tlist<TableBuffer> buffers;\n\t// read and process TTF header\n\tvector<char> bufvec(12, 0);\n\tis.read(&bufvec[0], 12);\n\tbuffers.emplace_back(0, std::move(bufvec));\n\tint numTables = buffers.back().getUInt16(4);\n\n\t// read and process table records\n\tbufvec.clear();\n\tbufvec.resize(4 * 4 * numTables);\n\tis.read(&bufvec[0], 4 * 4 * numTables);\n\tbuffers.emplace_back(0, std::move(bufvec));\n\n\tstruct TableRecord {\n\t\tTableRecord (const TableBuffer &buf, size_t ofs)\n\t\t\t: tag(buf.getUInt32(ofs)), checksum(buf.getUInt32(ofs+4)), offset(buf.getUInt32(ofs+8)), length(buf.getUInt32(ofs+12)) {}\n\t\tuint32_t tag;\n\t\tuint32_t checksum;\n\t\tuint32_t offset;\n\t\tuint32_t length;\n\t};\n\tvector<TableRecord> tableRecords;\n\ttableRecords.reserve(numTables);\n\tconst TableBuffer &recbuf = buffers.back();\n\tfor (int i=0; i < numTables; i++)\n\t\ttableRecords.emplace_back(recbuf, 16*i);\n\n\t// read and process tables\n\tfor (const TableRecord &record : tableRecords) {\n\t\tbufvec.clear();\n\t\tbufvec.resize(record.length);\n\t\tis.seekg(record.offset);\n\t\tis.read(&bufvec[0], record.length);\n\t\tif (record.tag == TTFTable::name2id(\"head\"))\n\t\t\tbuffers.emplace_back(record.tag, std::move(bufvec), HeadTable::offsetToChecksum());\n\t\telse\n\t\t\tbuffers.emplace_back(record.tag, std::move(bufvec));\n\t}\n\treturn ttf_to_woff(std::move(buffers), os);\n}\n\n\n/** Reads TTF data from an input file, converts it to WOFF, and\n *  writes the result to an output file.\n *  @param[in] ttfname name/path of TTF file\n *  @param[in] woffname name/path of WOFF file\n *  @return true on success */\nbool TTFWriter::convertTTFToWOFF (const string &ttfname, const string &woffname) {\n\tifstream ifs(ttfname, ios::binary);\n\tif (ifs) {\n\t\tofstream ofs(woffname, ios::binary);\n\t\tif (ofs)\n\t\t\treturn convertTTFToWOFF(ifs, ofs);\n\t}\n\treturn false;\n}\n"
  },
  {
    "path": "src/ttf/TTFWriter.hpp",
    "content": "/*************************************************************************\n** TTFWriter.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <set>\n#include <vector>\n#include \"CmapTable.hpp\"\n#include \"GlyfTable.hpp\"\n#include \"HeadTable.hpp\"\n#include \"HheaTable.hpp\"\n#include \"HmtxTable.hpp\"\n#include \"LocaTable.hpp\"\n#include \"MaxpTable.hpp\"\n#include \"NameTable.hpp\"\n#include \"OS2Table.hpp\"\n#include \"PostTable.hpp\"\n#include \"VheaTable.hpp\"\n#include \"VmtxTable.hpp\"\n#include \"../GFGlyphTracer.hpp\"\n#include \"../RangeMap.hpp\"\n\nclass PhysicalFont;\n\nnamespace ttf {\n\nclass TTFWriter {\n\tpublic:\n\t\tTTFWriter (const PhysicalFont &font, const std::set<int> &chars);\n\t\tbool writeTTF (std::ostream &os) const;\n\t\tbool writeWOFF (std::ostream &os);\n\t\tbool writeWOFF2 (std::ostream &os) const;\n\t\tbool writeTTF (const std::string &ttfname) const;\n\t\tbool writeWOFF (const std::string &woffname);\n\t\tbool writeWOFF2 (const std::string &woff2name) const;\n\t\tstatic bool convertTTFToWOFF (std::istream &is, std::ostream &os);\n\t\tstatic bool convertTTFToWOFF2 (std::istream &is, std::ostream &os);\n\t\tstatic bool convertTTFToWOFF (const std::string &ttfname, const std::string &woffname);\n\t\tstatic bool convertTTFToWOFF2 (const std::string &ttfname, const std::string &woff2name);\n\t\tvoid setTracerCallback (GFGlyphTracer::Callback &callback) {_tracerCallback = &callback;}\n\t\tGFGlyphTracer::Callback* getTracerCallback () const {return _tracerCallback;}\n\t\tconst PhysicalFont& getFont () const {return _font;}\n\t\tconst RangeMap& getUnicodeCharMap () const {return _unicodeCharMap;}\n\t\tint targetUnitsPerEm () const;\n\t\tdouble unitsPerEmFactor () const;\n\t\tint16_t hAdvance (uint16_t c) const;\n\t\tvoid updateGlobalBbox (uint32_t c, int16_t xmin, int16_t ymin, int16_t xmax, int16_t ymax);\n\t\tbool isFixedPitch () const {return _hmtx.isFixedPitch();}\n\n\t\tvoid updateContourInfo (uint16_t maxContours, uint16_t maxPoints) {\n\t\t\t_maxp.updateContourInfo(maxPoints, maxContours);\n\t\t}\n\n\t\tvoid updateGlobalAdvanceWidth (uint16_t w, uint16_t numHMetrics) {_hhea.updateAdvanceWidth(w, numHMetrics);}\n\t\tvoid updateGlobalAdvanceHeight (uint16_t h, uint16_t numVMetrics) {\n\t\t\tif (_vhea.active())\n\t\t\t\t_vhea.updateAdvanceHeight(h, numVMetrics);\n\t\t}\n\n\t\tvoid addGlyphOffset (uint32_t offset) {\n\t\t\t_loca.addOffset(offset);\n\t\t\tif (offset > 0xFFFF)\n\t\t\t\t_head.setLongOffsetFormat();\n\t\t}\n\n#ifdef TTFDEBUG\n\t\tstatic bool CREATE_PS_GLYPH_OUTLINES;\n#endif\n\n\tprotected:\n\t\tstd::list<TableBuffer> createTableBuffers () const;\n\n\tprivate:\n\t\tconst PhysicalFont &_font;\n\t\tRangeMap _unicodeCharMap;   ///< Unicode -> character code\n\t\tGFGlyphTracer::Callback *_tracerCallback;\n\t\tCmapTable _cmap;  ///< glyph index to character code mapping table\n\t\tGlyfTable _glyf;  ///< glyph data table\n\t\tHeadTable _head;  ///< font header table\n\t\tHheaTable _hhea;  ///< horizontal header table\n\t\tHmtxTable _hmtx;  ///< horizontal metrics table\n\t\tLocaTable _loca;  ///< glyph index to location/offset table\n\t\tMaxpTable _maxp;  ///< maximum profile table\n\t\tNameTable _name;  ///< naming table\n\t\tOS2Table  _os2;   ///< OS/2 and Windows specific metrics table\n\t\tPostTable _post;  ///< PostScript information table\n\t\tVheaTable _vhea;  ///< vertical header table\n\t\tVmtxTable _vmtx;  ///< vertical metrics table\n\t\t// The following vector contains pointers to the TTF table objects declared above.\n\t\t// If a table t1 contains data that computation depends on data of table t2,\n\t\t// t1 must be inserted after t2. For example, the loca and head tables require data\n\t\t// from the glyf table to compute their data, so that glyf must precede loca and head.\n\t\tstd::vector<TTFTable*> _tables;\n};\n\n} // namespace ttf"
  },
  {
    "path": "src/ttf/VheaTable.cpp",
    "content": "/*************************************************************************\n** VheaTable.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include \"VheaTable.hpp\"\n#include \"TTFWriter.hpp\"\n#include \"../Font.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\n\nvoid VheaTable::write (ostream &os) const {\n\tconst PhysicalFont &font = ttfWriter()->getFont();\n\tdouble scale = ttfWriter()->unitsPerEmFactor();\n\twriteUInt32(os, 0x10000);  // table version 1.0\n\twriteInt16(os, round(font.ascent()*scale));\n\twriteInt16(os, round(-font.descent()*scale));\n\twriteInt16(os, 0);   // line gap, always 0\n\twriteUInt16(os, _advanceHeightMax);\n\twriteInt16(os, _minTopSideBearing);\n\twriteInt16(os, _minBottomSideBearing);\n\twriteInt16(os, _yMaxExtent);\n\twriteInt16(os, 1);   // caretSlopeRise (1 = vertical)\n\twriteInt16(os, 0);   // caretSlopeRun (0 = vertical)\n\twriteInt16(os, 0);   // caretOffset\n\twriteInt16(os, 0);   // reserved\n\twriteInt16(os, 0);   // reserved\n\twriteInt16(os, 0);   // reserved\n\twriteInt16(os, 0);   // reserved\n\twriteInt16(os, 0);   // metricDataFormat (always 0)\n\twriteUInt16(os, _numberOfVMetrics);\n}\n\n\nvoid VheaTable::updateYMinMax (uint32_t c, int16_t ymin, int16_t ymax) {\n\tconst PhysicalFont &font = ttfWriter()->getFont();\n\tdouble extend = font.style() ? font.style()->extend : 1;\n\tdouble scale = ttfWriter()->unitsPerEmFactor();\n\tint16_t advance = (c == 0 ? ymax : round(scale*extend*font.vAdvance(c)));\n\t_yMaxExtent = max(_yMaxExtent, ymax);\n\t_minTopSideBearing = min(_minTopSideBearing, ymin);\n\t_minBottomSideBearing = min(_minBottomSideBearing, int16_t(advance-ymax));\n}\n\n\nvoid VheaTable::updateAdvanceHeight (uint16_t h, uint16_t numberOfVMetrics) {\n\t_advanceHeightMax = max(_advanceHeightMax, h);\n\t_numberOfVMetrics = numberOfVMetrics;\n}\n"
  },
  {
    "path": "src/ttf/VheaTable.hpp",
    "content": "/*************************************************************************\n** VheaTable.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n#include <limits>\n#include \"TTFTable.hpp\"\n\nnamespace ttf {\n\n/** This class provides the functions required to write the vertical header table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/vhea.htm */\nclass VheaTable : public TTFTable {\n\tfriend class TTFWriter;\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"vhea\");}\n\t\tvoid write (std::ostream &os) const override;\n\n\tprotected:\n\t\tvoid updateYMinMax (uint32_t c, int16_t ymin, int16_t ymax);\n\t\tvoid updateAdvanceHeight (uint16_t h, uint16_t numberOfVMetrics);\n\n\tprivate:\n\t\tuint16_t _advanceHeightMax = 0;\n\t\tint16_t _minTopSideBearing = std::numeric_limits<int16_t>::max();\n\t\tint16_t _minBottomSideBearing = std::numeric_limits<int16_t>::max();\n\t\tint16_t _yMaxExtent = std::numeric_limits<int16_t>::min();\n\t\tuint16_t _numberOfVMetrics = 0;\n};\n\n} // namespace ttf\n"
  },
  {
    "path": "src/ttf/VmtxTable.cpp",
    "content": "/*************************************************************************\n** VmtxTable.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cmath>\n#include \"VmtxTable.hpp\"\n#include \"TTFWriter.hpp\"\n#include \"../Font.hpp\"\n\nusing namespace std;\nusing namespace ttf;\n\n\nvoid VmtxTable::write (ostream &os) const {\n\tauto runStart = _heightInfos.end();\n\tif (!_heightInfos.empty())\n\t\trunStart -= _runLengthOfAdvHeight-1;\n\t// write longVerMetrics up to the beginning of the repeating\n\t// advance heights at the end of the container\n\tfor (auto it = _heightInfos.begin(); it != runStart; ++it) {\n\t\twriteUInt16(os, it->advHeight);\n\t\twriteInt16(os, it->tsb);\n\t}\n\t// write the trailing top side bearings\n\tfor (; runStart != _heightInfos.end(); ++runStart)\n\t\twriteInt16(os, runStart->tsb);\n}\n\n\nvoid VmtxTable::updateHeightData (uint32_t c, int16_t ymin, int16_t ymax) {\n\tconst PhysicalFont &font = ttfWriter()->getFont();\n\tdouble extend = font.style() ? font.style()->extend : 1;\n\tdouble scale = ttfWriter()->unitsPerEmFactor();\n\tint16_t h = (c == 0 ? ymax : round(scale*extend*font.vAdvance(c)));\n\tif (_heightInfos.empty() || h == _heightInfos.back().advHeight)\n\t\t_runLengthOfAdvHeight++;\n\telse\n\t\t_runLengthOfAdvHeight = 1;\n\t_heightInfos.emplace_back(ymin, h);\n\tttfWriter()->updateGlobalAdvanceHeight(h, _heightInfos.size()-_runLengthOfAdvHeight+1);\n}"
  },
  {
    "path": "src/ttf/VmtxTable.hpp",
    "content": "/*************************************************************************\n** VmtxTable.hpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#pragma once\n\n#include <vector>\n#include \"TTFTable.hpp\"\n\nnamespace ttf {\n\n/** This class provides the functions required to write the horizontal metrics table of a TTF/OTF font.\n *  https://www.microsoft.com/typography/otspec/vmtx.htm */\nclass VmtxTable : public TTFTable {\n\tfriend TTFWriter;\n\tstruct CharHeightInfo {\n\t\tCharHeightInfo (int16_t l, int16_t h) : tsb(l), advHeight(h) {}\n\t\tuint16_t tsb;        // top side bearing\n\t\tuint16_t advHeight;  // unscaled advance height\n\t};\n\tpublic:\n\t\tuint32_t tag () const override {return name2id(\"vmtx\");}\n\t\tvoid write (std::ostream &os) const override;\n\n\tprotected:\n\t\tvoid updateHeightData (uint32_t c, int16_t ymin, int16_t ymax);\n\n\tprivate:\n\t\tstd::vector<CharHeightInfo> _heightInfos;\n\t\tsize_t _runLengthOfAdvHeight=0;  // number of identical advHeight values at end of _heightInfos\n};\n\n} // namespace ttf\n"
  },
  {
    "path": "src/utility.cpp",
    "content": "/*************************************************************************\n** utility.cpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <cctype>\n#include <cmath>\n#include <fstream>\n#include <functional>\n#include <iterator>\n#include \"algorithm.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n/** Computes the singular value decomposition of a given 2x2 matrix M\n *  so that M = rotate(phi)*scale(sx,sy)*rotate(theta), where\n *  rotate(t):={{cos t, -sin t}, {sin t, cos t}} and scale(sx, sy):={{sx, 0}, {0, sy}}.\n *  The corresponding math can be found in Jim Blinn: \"Consider the Lowly 2x2 Matrix\"\n *  https://ieeexplore.ieee.org/document/486688\n *  Also published in \"Jim Blinn's Corner: Notation, Notation, Notation\", pp. 69--95.\n *  @param[in] m matrix {{m00, m01}, {m10, m11}} where the inner pairs denote the rows\n *  @return vector {phi, sx, sy, theta} */\nvector<double> math::svd (const double (&m)[2][2]) {\n\tdouble phi=0, theta=0, sx=0, sy=0;\n\tif (m[0][0] != 0 || m[0][1] != 0 || m[1][0] != 0 || m[1][1] != 0) {\n\t\tdouble e = (m[0][0] + m[1][1])/2;  // = cos(phi+theta)*(sx+sy)/2\n\t\tdouble f = (m[0][0] - m[1][1])/2;  // = cos(phi-theta)*(sx-sy)/2\n\t\tdouble g = (m[1][0] + m[0][1])/2;  // = sin(phi-theta)*(sx-sy)/2\n\t\tdouble h = (m[1][0] - m[0][1])/2;  // = sin(phi+theta)*(sx+sy)/2\n\t\tdouble hyp1 = hypot(e, h);  // = (sx+sy)/2\n\t\tdouble hyp2 = hypot(f, g);  // = (sx-sy)/2\n\t\tsx = hyp1+hyp2;\n\t\tsy = hyp1-hyp2;\n\t\tif (hyp2 == 0)              // uniformly scaled rotation?\n\t\t\ttheta = atan2(h, e);\n\t\telse if (hyp1 == 0)         // uniformly scaled reflection?\n\t\t\ttheta = -atan2(g, f);\n\t\telse {\n\t\t\tdouble a1 = atan2(g, f); // = phi-theta (g/f = tan(phi-theta))\n\t\t\tdouble a2 = atan2(h, e); // = phi+theta (h/e = tan(phi+theta))\n\t\t\tphi = (a2+a1)/2;\n\t\t\ttheta = (a2-a1)/2;\n\t\t}\n\t}\n\treturn {phi, sx, sy, theta};\n}\n\n\n/** Returns the value of the definite integral of f:R->R over the interval [t0,t1]\n *  using a simple Simpson/Runge-Kutta (rk4) approximation.\n *  @param[in] t0 lower interval boundary\n *  @param[in] t1 upper interval boundary\n *  @param[in] n number of slices the interval is divided into\n *  @param[in] f function to integrate */\ndouble math::integral (double t0, double t1, int n, const function<double(double)> &f) {\n\tdouble ti = t0, ui=0;\n\tdouble h = (t1-t0)/n;\n\tfor (int i=0; i < n; i++) {\n\t\tdouble k1 = f(ti);\n\t\tdouble k2 = f(ti + h/2);\n\t\tdouble k4 = f(ti + h);\n\t\tui += h*(k1 + 4*k2 + k4)/6;\n\t\tti += h;\n\t}\n\treturn ui;\n}\n\n\n/** Normalizes an angle to the interval [-mod, mod). */\ndouble math::normalize_angle (double angle, double mod) {\n\tangle = fmod(angle+mod, 2.0*mod);\n\tif (angle < 0)\n\t\tangle += 2.0*mod;\n\treturn angle-mod;\n}\n\n\ndouble math::normalize_0_2pi (double rad) {\n\trad = fmod(rad, TWO_PI);\n\tif (rad < 0)\n\t\trad += TWO_PI;\n\treturn rad;\n}\n\n\n/** Returns a given string with leading and trailing whitespace removed.\n *  @param[in] str the string to process\n *  @param[in] ws characters treated as whitespace\n *  @return the trimmed string */\nstring util::trim (const string &str, const char *ws) {\n\tauto first = str.find_first_not_of(ws);\n\tif (first == string::npos)\n\t\treturn \"\";\n\tauto last = str.find_last_not_of(ws);\n\treturn str.substr(first, last-first+1);\n}\n\n\n/** Removes leading and trailing whitespace from a given string, and replaces\n *  all other whitespace sequences by single spaces.\n *  @param[in] str the string to process\n *  @param[in] ws characters treated as whitespace\n *  @return the normalized string */\nstring util::normalize_space (string str, const char *ws) {\n\tstr = trim(str);\n\tauto first = str.find_first_of(ws);\n\twhile (first != string::npos) {\n\t\tauto last = str.find_first_not_of(ws, first);\n\t\tstr.replace(first, last-first, \" \");\n\t\tfirst = str.find_first_of(ws, first+1);\n\t}\n\treturn str;\n}\n\n\n/** Replaces all occurrences of a substring with another string.\n *  @param[in] str string to search through\n *  @param[in] find string to look for\n *  @param[in] repl replacement for \"find\"\n *  @return the resulting string */\nstring util::replace (string str, const string &find, const string &repl) {\n\tif (!find.empty() && !repl.empty()) {\n\t\tauto first = str.find(find);\n\t\twhile (first != string::npos) {\n\t\t\tstr.replace(first, find.length(), repl);\n\t\t\tfirst = str.find(find, first+repl.length());\n\t\t}\n\t}\n\treturn str;\n}\n\n\n/** Splits a string at all occurrences of a given separator string and\n *  returns the substrings.\n *  @param[in] str string to split\n *  @param[in] sep separator to look for\n *  @param[in] allowEmptyResult if true, the result vector is empty if str is empty; otherwise an empty string is inserted\n *  @return the substrings between the separators */\nvector<string> util::split (const string &str, const string &sep, bool allowEmptyResult) {\n\tvector<string> parts;\n\tif ((str.empty() && !allowEmptyResult) || sep.empty())\n\t\tparts.push_back(str);\n\telse if (!str.empty()) {\n\t\tstring::size_type left=0;\n\t\twhile (left <= str.length()) {\n\t\t\tauto right = str.find(sep, left);\n\t\t\tif (right == string::npos) {\n\t\t\t\tparts.push_back(str.substr(left));\n\t\t\t\tleft = string::npos;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tparts.push_back(str.substr(left, right-left));\n\t\t\t\tleft = right+sep.length();\n\t\t\t}\n\t\t}\n\t}\n\treturn parts;\n}\n\n\nstring util::tolower (const string &str) {\n\tstring ret=str;\n\talgo::transform(str, ret.begin(), ::tolower);\n\treturn ret;\n}\n\n\n/** Converts a double to a string and strips redundant trailing digits/dots. */\nstring util::to_string (double val) {\n\tstring str = std::to_string(val);\n\tstr.erase(str.find_last_not_of('0')+1, string::npos);\n\tstr.erase(str.find_last_not_of('.')+1, string::npos);\n\treturn str;\n}\n\n\n/** Returns the integer part of log10 of a given integer \\f$n>0\\f$.\n *  If \\f$n<0\\f$, the result is 0. */\nint util::ilog10 (int n) {\n\tint result = 0;\n\twhile (n >= 10) {\n\t\tresult++;\n\t\tn /= 10;\n\t}\n\treturn result;\n}\n\n\n/** Reads an integer string of the form (+|-)?[0-9]+ from an input stream\n *  ana appends it to a given one.\n *  @param[in] is stream to read from\n *  @param[out] str the read string is appended to this one\n *  @param[in] allow_leading_sign true if the first character may be '+' or '-'\n *  @return true if the string could be read successfully */\nstatic bool read_int_string (istream &is, string &str, bool allow_leading_sign=true) {\n\tstring intstr;\n\tif (is.peek() == '-' || is.peek() == '+') {\n\t\tif (!allow_leading_sign)\n\t\t\treturn false;\n\t\tintstr += char(is.get());\n\t\tif (!isdigit(is.peek()))\n\t\t\treturn false;\n\t}\n\twhile (isdigit(is.peek()))\n\t\tintstr += char(is.get());\n\tstr += intstr;\n\treturn !intstr.empty();\n}\n\n\n/** Reads and parses a double from an input stream.\n *  @param[in] is stream to read from\n *  @param[out] value the read double value\n *  @return true if the value was read and parsed successfully */\nbool util::read_double (istream &is, double &value) {\n\tis >> ws;\n\tstring numstr;\n\t// read optional leading sign\n\tbool plusminus = (is.peek() == '-' || is.peek() == '+');\n\tif (plusminus)\n\t\tnumstr += char(is.get());\n\t// read optional integer part (before decimal dot)\n\tread_int_string(is, numstr, !plusminus);\n\tif (is.peek() == '.') {\n\t\tnumstr += char(is.get());\n\t\t// read fractional part (after decimal dot)\n\t\tif (!read_int_string(is, numstr, false))\n\t\t\treturn false;\n\t}\n\t// read optional exponential part\n\tif (std::tolower(is.peek()) == 'e') {\n\t\tnumstr += char(is.get());\n\t\tif (!read_int_string(is, numstr))\n\t\t\treturn false;\n\t}\n\ttry {\n\t\tsize_t count;\n\t\tvalue = stod(numstr, &count);\n\t\treturn count == numstr.length();\n\t}\n\tcatch (...) {\n\t\treturn false;\n\t}\n}\n\n\n/** Returns the contents of a file.\n *  @param[in] fname name/path of the file */\nstring util::read_file_contents (const string &fname) {\n\tifstream ifs(fname, ios::binary);\n\treturn {istreambuf_iterator<char>(ifs.rdbuf()), istreambuf_iterator<char>()};\n}\n\n\n/** Writes a sequence of bytes given as a string to a file.\n *  @param[in] fname name/path of the file to write\n *  @param[in] start iterator pointing to the begin of the byte sequence\n *  @param[in] end iterator pointing to the first byte after the byte sequence to write */\nvoid util::write_file_contents (const string &fname, string::iterator start, string::iterator end) {\n\tofstream ofs(fname, ios::binary);\n\tstd::copy(start, end, ostream_iterator<char>(ofs));\n}\n\n\nstring util::mimetype (const string &fname) {\n\tstring ret;\n\tauto pos = fname.rfind('.');\n\tif (pos != string::npos) {\n\t\tstring suffix = tolower(fname.substr(pos+1));\n\t\tif (suffix == \"svg\")\n\t\t\tret = \"svg+xml\";\n\t\telse if (suffix == \"png\" || suffix == \"gif\")\n\t\t\tret = std::move(suffix);\n\t\telse if (suffix == \"jpg\" || suffix == \"jpeg\")\n\t\t\tret = \"jpeg\";\n\t\telse if (suffix == \"tif\" || suffix == \"tiff\")\n\t\t\tret = \"tiff\";\n\t}\n\tif (!ret.empty())\n\t\tret = \"image/\"+ret;\n\treturn ret;\n}\n"
  },
  {
    "path": "src/utility.hpp",
    "content": "/*************************************************************************\n** utility.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef UTILITY_HPP\n#define UTILITY_HPP\n\n#ifdef HAVE_CONFIG_H\n#include <config.h>\n#endif\n\n#include <cstdint>\n#include <iomanip>\n#include <functional>\n#include <memory>\n#include <sstream>\n#include <string>\n#include <type_traits>\n#include <vector>\n\nnamespace math {\n\nconstexpr const double PI      = 3.141592653589793238462643383279502884;\nconstexpr const double HALF_PI = 1.570796326794896619231321691639751442;\nconstexpr const double TWO_PI  = 6.283185307179586476925286766559005768;\nconstexpr const double SQRT2   = 1.414213562373095048801688724209698079;\n\ninline double deg2rad (double deg) {return PI*deg/180.0;}\ninline double rad2deg (double rad) {return 180.0*rad/PI;}\ndouble normalize_angle (double angle, double mod);\ndouble normalize_0_2pi (double rad);\nstd::vector<double> svd (const double (&m)[2][2]);\ndouble integral (double t0, double t1, int n, const std::function<double(double)> &f);\n\n/** Signum function (returns x/abs(x) if x != 0, and 0 otherwise). */\ntemplate <typename T>\nint sgn (T x) {return (x > T(0)) - (x < T(0));}\n\ninline double clip (double x, double min, double max) {\n\treturn x < min ? min : (x > max ? max : x);\n}\n\n} // namespace math\n\nnamespace util {\n\nstruct IsEmptyString : std::function<bool(std::string)> {\n\tbool operator () (const std::string &str) const {return str.empty();}\n};\n\ntemplate <typename T>\nstd::string tohex (T val) {\n\tstd::ostringstream oss;\n\toss << std::hex << val;\n\treturn oss.str();\n}\n\nstd::string trim (const std::string &str, const char *ws=\" \\t\\n\\r\\f\");\nstd::string normalize_space (std::string str, const char *ws=\" \\t\\n\\r\\f\");\nstd::string tolower (const std::string &str);\nstd::string replace (std::string str, const std::string &find, const std::string &repl);\nstd::string to_string (double val);\nstd::string mimetype (const std::string &fname);\n\nstd::vector<std::string> split (const std::string &str, const std::string &sep, bool allowEmptyResult=false);\nint ilog10 (int n);\n\nbool read_double (std::istream &is, double &value);\nstd::string read_file_contents (const std::string &fname);\nvoid write_file_contents (const std::string &fname, std::string::iterator start, std::string::iterator end);\n\n\n/** Returns a sequence of bytes of a given integral value.\n *  @param[in] val get bytes of this value\n *  @param[in] n number of bytes to extract (from LSB to MSB), all if n == 0\n *  @return vector of bytes in big-endian order */\ntemplate <typename T>\nstd::vector<uint8_t> bytes (T val, int n=0) {\n\tif (n <= 0)\n\t\tn = sizeof(T);\n\tstd::vector<uint8_t> ret(n);\n\tfor (int i=0; i < n; i++) {\n\t\tret[n-i-1] = val & 0xff;\n\t\tval >>= 8;\n\t}\n\treturn ret;\n}\n\n\n/** Encodes the bytes in the half-open range [first,last) to Base64 and writes\n *  the result to the range starting at 'dest'.\n *  @param[in] first initial position of the range to be encoded\n *  @param[in] last final position of the range to be encoded\n *  @param[in] dest first position of the destination range\n *  @param[in] wrap if > 0, add a newline after the given number of characters written */\ntemplate <typename InputIterator, typename OutputIterator>\nvoid base64_encode (InputIterator first, InputIterator last, OutputIterator dest, int wrap= 0) {\n\tstatic const char *base64_chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\tint count=0;\n\twhile (first != last) {\n\t\tint padding = 0;\n\t\tunsigned char c0 = *first++, c1=0, c2=0;\n\t\tif (first == last)\n\t\t\tpadding = 2;\n\t\telse {\n\t\t\tc1 = *first++;\n\t\t\tif (first == last)\n\t\t\t\tpadding = 1;\n\t\t\telse\n\t\t\t\tc2 = *first++;\n\t\t}\n\t\tuint32_t n = (c0 << 16) | (c1 << 8) | c2;\n\t\tfor (int i=0; i <= 3-padding; i++) {\n\t\t\tif (wrap > 0 && ++count > wrap) {\n\t\t\t\tcount = 1;\n\t\t\t\t*dest++ = '\\n';\n\t\t\t}\n\t\t\t*dest++ = base64_chars[(n >> 18) & 0x3f];\n\t\t\tn <<= 6;\n\t\t}\n\t\twhile (padding--) {\n\t\t\tif (wrap > 0 && ++count > wrap) {\n\t\t\t\tcount = 1;\n\t\t\t\t*dest++ = '\\n';\n\t\t\t}\n\t\t\t*dest++ = '=';\n\t\t}\n\t}\n}\n\n\ninline void base64_encode (std::istream &is, std::ostream &os, int wrap= 0) {\n\tbase64_encode(std::istreambuf_iterator<char>(is), std::istreambuf_iterator<char>(),\n\t\t\t\t\t  std::ostreambuf_iterator<char>(os), wrap);\n}\n\n\n/** Simple implementation mimicking std::make_unique introduced in C++14.\n *  Constructs an object of class T on the heap and returns a unique_ptr<T> to it.\n *  @param[in] args arguments forwarded to an constructor of T */\ntemplate<typename T, typename... Args>\nstd::unique_ptr<T> make_unique (Args&&... args) {\n\treturn std::unique_ptr<T>(new T(std::forward<Args>(args)...));\n}\n\n\n/** Simple implementation mimicking array variant of std::make_unique introduced in C++14.\n *  Constructs an array of class T on the heap and returns a unique_ptr<T>(size) to it.\n *  @param[in] size size of array */\ntemplate<typename T>\nstd::unique_ptr<T> make_unique (std::size_t size) {\n\treturn std::unique_ptr<T>(new typename std::remove_extent<T>::type[size]());\n}\n\n\ntemplate<typename T, typename U>\nstd::unique_ptr<T> static_unique_ptr_cast (std::unique_ptr<U> &&old){\n\treturn std::unique_ptr<T>{static_cast<T*>(old.release())};\n}\n\n#ifdef HAVE___BUILTIN_CLZ\n\ntemplate <typename T>\ntypename std::enable_if<sizeof(T) <= sizeof(unsigned int), int>::type\ncount_leading_zeros (T val) {\n\treturn val == 0 ? 8*sizeof(T) : __builtin_clz(val) - 8*(sizeof(unsigned int)-sizeof(T));\n}\n\ntemplate <typename T>\ntypename std::enable_if<sizeof(T) == sizeof(unsigned long) && sizeof(unsigned long) != sizeof(unsigned int), int>::type\ncount_leading_zeros (T val) {\n\treturn val == 0 ? 8*sizeof(T) : __builtin_clzl(val);\n}\n\ntemplate <typename T>\ntypename std::enable_if<sizeof(T) == sizeof(unsigned long long) && sizeof(unsigned long long) != sizeof(unsigned long), int>::type\ncount_leading_zeros (T val) {\n\treturn val == 0 ? 8*sizeof(T) : __builtin_clzll(val);\n}\n\n#elif defined(_MSC_VER)\n\n#include <intrin.h>\n\ntemplate <typename T>\ntypename std::enable_if<sizeof(T) <= 4, int>::type\ncount_leading_zeros (T val) {\n\tunsigned long index;\n\treturn _BitScanReverse(&index, val) ? static_cast<int>(8*sizeof(T)-1-index) : 8*sizeof(T);\n}\n\n#else\n\n// fallback implementation if no built-in clz function is available\ntemplate <typename T>\ntypename std::enable_if<sizeof(T) <= 4, int>::type\ncount_leading_zeros (T val) {\n\tuint32_t val32 = val;\n\tstatic const uint8_t clz_table[16] = {4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0};\n\tint n=0;\n\tif ((val32 & 0xFFFF0000) == 0) {n = 16; val32 <<= 16;}\n\tif ((val32 & 0xFF000000) == 0) {n += 8; val32 <<=  8;}\n\tif ((val32 & 0xF0000000) == 0) {n += 4; val32 <<=  4;}\n\treturn n + clz_table[val32 >> (32-4)] - (32-8*sizeof(T));\n}\n\n#endif\n\n/** Returns floor(log2(n)) where n is a positive integer.\n *  If n < 1, it returns -1. */\ntemplate <typename T>\nint ilog2 (T n) {\n\treturn n > 0 ? 8*sizeof(T)-1-count_leading_zeros(n) : -1;\n}\n\ntemplate <typename T>\nstruct set_const_of {\n\ttemplate <typename U>\n\tstruct by {\n\t\tusing type = typename std::conditional<\n\t\t\tstd::is_const<U>::value,\n\t\t\ttypename std::add_const<T>::type,\n\t\t\ttypename std::remove_const<T>::type\n\t\t>::type;\n\t};\n};\n\n} // namespace util\n\n#endif\n"
  },
  {
    "path": "src/version.hpp",
    "content": "/*************************************************************************\n** version.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef VERSION_HPP\n#define VERSION_HPP\n\nconstexpr const char *PROGRAM_NAME = \"dvisvgm\";\nconstexpr const char *PROGRAM_VERSION = \"3.6\";\n\n#endif\n\n"
  },
  {
    "path": "src/version.hpp.in",
    "content": "/*************************************************************************\n** version.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef VERSION_HPP\n#define VERSION_HPP\n\nconstexpr const char *PROGRAM_NAME = \"dvisvgm\";\nconstexpr const char *PROGRAM_VERSION = \"@VERSION@\";\n\n#endif\n\n"
  },
  {
    "path": "src/windows.hpp",
    "content": "/*************************************************************************\n** windows.hpp                                                          **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#ifndef WINDOWS_HPP\n#define WINDOWS_HPP\n\n// Prevent defining the macros min and max present in windows.h\n#ifndef NOMINMAX\n#define NOMINMAX\n#endif\n\n#ifndef NOGDI\n#define NOGDI\n#endif\n\n#include <windows.h>\n\n#endif\n\n"
  },
  {
    "path": "tests/BezierTest.cpp",
    "content": "/*************************************************************************\n** BezierTest.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"Bezier.hpp\"\n\nusing namespace std;\n\nconst double EPS = 0.001;\n\n#define EXPECT_PAIR_EQ(p1,p2) {EXPECT_DOUBLE_EQ(p1.x(), p2.x()); EXPECT_DOUBLE_EQ(p1.y(), p2.y());}\n#define EXPECT_PAIR_NEAR(p1,p2) {EXPECT_NEAR(p1.x(), p2.x(), EPS); EXPECT_NEAR(p1.y(), p2.y(), EPS);}\n#define EXPECT_BBOX_NEAR(b1,b2) { \\\n\tEXPECT_NEAR(b1.minX(), b2.minX(), EPS); EXPECT_NEAR(b1.maxX(), b2.maxX(), EPS); \\\n\tEXPECT_NEAR(b1.minY(), b2.minY(), EPS); EXPECT_NEAR(b1.maxY(), b2.maxY(), EPS);}\n\n\nTEST(BezierTest, construct) {\n\t// quadratic Bézier curve\n\tQuadBezier bezier1(DPair(0,0), DPair(12,12), DPair(24,6));\n\tEXPECT_EQ(bezier1.point(0), DPair(0,0));\n\tEXPECT_EQ(bezier1.point(1), DPair(12,12));\n\tEXPECT_EQ(bezier1.point(2), DPair(24,6));\n\n\t// cubic from quadratic (elevate degree)\n\tCubicBezier bezier2(bezier1);\n\tEXPECT_EQ(bezier2.point(0), DPair(0,0));\n\tEXPECT_EQ(bezier2.point(1), DPair(8,8));\n\tEXPECT_EQ(bezier2.point(2), DPair(16,10));\n\tEXPECT_EQ(bezier2.point(3), DPair(24,6));\n\n\t// cubic Bézier curve\n\tCubicBezier bezier3(DPair(0,0), DPair(12,12), DPair(24,6), DPair(19,-4));\n\tEXPECT_EQ(bezier3.point(0), DPair(0,0));\n\tEXPECT_EQ(bezier3.point(1), DPair(12,12));\n\tEXPECT_EQ(bezier3.point(2), DPair(24,6));\n\tEXPECT_EQ(bezier3.point(3), DPair(19,-4));\n}\n\n\nTEST(BezierTest, subcurve) {\n\tCubicBezier bezier1(DPair(0,0), DPair(12,12), DPair(24,6), DPair(19,-4));\n\t{\n\t\tCubicBezier subcurve(bezier1, 0, 1);\n\t\tEXPECT_EQ(subcurve.point(0), DPair(0,0));\n\t\tEXPECT_EQ(subcurve.point(1), DPair(12,12));\n\t\tEXPECT_EQ(subcurve.point(2), DPair(24,6));\n\t\tEXPECT_EQ(subcurve.point(3), DPair(19,-4));\n\t}\n\t{\n\t\tCubicBezier subcurve(bezier1, 0, 0.5);\n\t\tEXPECT_EQ(subcurve.point(0), DPair(0,0));\n\t\tEXPECT_EQ(subcurve.point(1), DPair(6,6));\n\t\tEXPECT_EQ(subcurve.point(2), DPair(12,7.5));\n\t\tEXPECT_EQ(subcurve.point(3), DPair(15.875,6.25));\n\t}\n\t{\n\t\tCubicBezier subcurve(bezier1, 1, 0.5);\n\t\tEXPECT_EQ(subcurve.point(0), DPair(15.875,6.25));\n\t\tEXPECT_EQ(subcurve.point(1), DPair(19.75,5));\n\t\tEXPECT_EQ(subcurve.point(2), DPair(21.5,1));\n\t\tEXPECT_EQ(subcurve.point(3), DPair(19,-4));\n\t}\n\t{\n\t\tCubicBezier subcurve(bezier1, 0.2, 0.8);\n\t\tEXPECT_PAIR_NEAR(subcurve.point(0), DPair(7.064,5.152));\n\t\tEXPECT_PAIR_NEAR(subcurve.point(1), DPair(13.856,8.368));\n\t\tEXPECT_PAIR_NEAR(subcurve.point(2), DPair(19.424,6.112));\n\t\tEXPECT_PAIR_NEAR(subcurve.point(3), DPair(20.096,1.408));\n\t}\n\t{\n\t\tCubicBezier subcurve(bezier1, 0, 0);\n\t\tEXPECT_EQ(subcurve.point(0), DPair(0,0));\n\t\tEXPECT_EQ(subcurve.point(1), DPair(0,0));\n\t\tEXPECT_EQ(subcurve.point(2), DPair(0,0));\n\t\tEXPECT_EQ(subcurve.point(3), DPair(0,0));\n\t}\n\t{\n\t\tCubicBezier subcurve(bezier1, 1, 1);\n\t\tEXPECT_EQ(subcurve.point(0), DPair(19,-4));\n\t\tEXPECT_EQ(subcurve.point(1), DPair(19,-4));\n\t\tEXPECT_EQ(subcurve.point(2), DPair(19,-4));\n\t\tEXPECT_EQ(subcurve.point(3), DPair(19,-4));\n\t}\n}\n\n\nTEST(BezierTest, reverse) {\n\tCubicBezier bezier(DPair(0,0), DPair(12,12), DPair(24,6), DPair(19,-4));\n\tbezier.reverse();\n\tEXPECT_EQ(bezier.point(0), DPair(19,-4));\n\tEXPECT_EQ(bezier.point(1), DPair(24,6));\n\tEXPECT_EQ(bezier.point(2), DPair(12,12));\n\tEXPECT_EQ(bezier.point(3), DPair(0,0));\n}\n\n\nTEST(BezierTest, bbox) {\n\tCubicBezier bezier(DPair(0,0), DPair(12,12), DPair(24,6), DPair(30,-5));\n\tEXPECT_BBOX_NEAR(bezier.getBBox(), BoundingBox(0, -5, 30, 6.598));\n}\n\n\nTEST(BezierTest, approximate) {\n\tvector<DPair> points;\n\tvector<double> times;\n\tCubicBezier bezier(DPair(0,0), DPair(12,12), DPair(24,6), DPair(30,-5));\n\tsize_t size = bezier.approximate(0.1, points, &times);\n\tdouble t[] = {0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 1};\n\tDPair p[] = {\n\t\tDPair(0,0), DPair(4.488,3.681), DPair(8.906,5.828), DPair(13.183,6.591),\n\t\tDPair(17.25,6.125), DPair(21.035,4.580), DPair(24.468,2.109), DPair(30,-5)\n\t};\n\tEXPECT_EQ(size, (size_t)sizeof(t)/sizeof(double));\n\tEXPECT_EQ(points.size(), size);\n\tEXPECT_EQ(times.size(), size);\n\tfor (size_t i=0; i < size; i++) {\n\t\tEXPECT_EQ(times[i], t[i]) << \"i=\" << i;\n\t\tEXPECT_PAIR_NEAR(points[i], p[i]);\n\t}\n}\n\n\nTEST(BezierTest, reduceDegree) {\n\tvector<DPair> points;\n\tCubicBezier bezier(QuadBezier(DPair(0,0), DPair(5,10), DPair(10,5)));\n\tint degree = bezier.reduceDegree(0.1, points);\n\tEXPECT_EQ(degree, 2);\n\tEXPECT_EQ(points[0], DPair(0,0));\n\tEXPECT_EQ(points[1], DPair(5,10));\n\tEXPECT_EQ(points[2], DPair(10,5));\n\n\tbezier.setPoints(DPair(3,8), DPair(3,8), DPair(3,8), DPair(3,8));\n\tdegree = bezier.reduceDegree(0.1, points);\n\tEXPECT_EQ(degree, 0);\n\tEXPECT_EQ(points[0], DPair(3,8));\n\n\tbezier.setPoints(DPair(0,0), DPair(5,5), DPair(8,8), DPair(10,10));\n\tdegree = bezier.reduceDegree(0.1, points);\n\tEXPECT_EQ(degree, 1);\n\tEXPECT_EQ(points[0], DPair(0,0));\n\tEXPECT_EQ(points[1], DPair(10,10));\n\n\tbezier.setPoints(DPair(0,0), DPair(5,10), DPair(10,5), DPair(15,10));\n\tdegree = bezier.reduceDegree(0.1, points);\n\tEXPECT_EQ(degree, 3);\n\tEXPECT_EQ(points[0], DPair(0,0));\n\tEXPECT_EQ(points[1], DPair(5,10));\n\tEXPECT_EQ(points[2], DPair(10,5));\n\tEXPECT_EQ(points[3], DPair(15,10));\n}\n"
  },
  {
    "path": "tests/BitmapTest.cpp",
    "content": "/*************************************************************************\n** BitmapTest.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"Bitmap.hpp\"\n\nusing namespace std;\n\n\nTEST(BitmapTest, bbox) {\n\tBitmap bitmap(-4, 10, 3, 10);\n\tEXPECT_EQ(bitmap.width(), 15);\n\tEXPECT_EQ(bitmap.height(), 8);\n\tEXPECT_EQ(bitmap.xshift(), -4);\n\tEXPECT_EQ(bitmap.yshift(), 3);\n\tEXPECT_EQ(bitmap.bytesPerRow(), 2);\n\tEXPECT_EQ(bitmap.empty(), false);\n}\n\n\nTEST(BitmapTest, setBits) {\n\tint w, h;\n\tBitmap bitmap(-4, 10, 3, 10);\n\tbitmap.getExtent(w, h);\n\tEXPECT_EQ(w, 0);\n\tEXPECT_EQ(h, 0);\n\tbitmap.setBits(3, 5, 5);\n\tbitmap.getExtent(w, h);\n\tEXPECT_EQ(w, 5);\n\tEXPECT_EQ(h, 1);\n\n\tEXPECT_EQ(bitmap.rowPtr(3-3)[0], 0);\n\tEXPECT_EQ(bitmap.rowPtr(3-3)[1], 0x7c);\n\n\tEXPECT_EQ(bitmap.rowPtr(10-3)[0], 0);\n\tEXPECT_EQ(bitmap.rowPtr(10-3)[1], 0);\n\tbitmap.setBits(10, -3, 10);\n\tbitmap.getExtent(w, h);\n\tEXPECT_EQ(w, 13);\n\tEXPECT_EQ(h, 8);\n\n\tEXPECT_EQ(bitmap.rowPtr(10-3)[0], 0x7f);\n\tEXPECT_EQ(bitmap.rowPtr(10-3)[1], 0xe0);\n}\n\n\nTEST(BitmapTest, copy) {\n\tBitmap bitmap(-4, 10, 3, 10);\n\tvector<uint16_t> target;\n\tbitmap.setBits(4, 5, 5);\n\tbitmap.copy(target, false);\n\tEXPECT_EQ(target.size(), 8u);\n\tEXPECT_EQ(target[0], 0);\n\tEXPECT_EQ(target[1], 124);\n\tEXPECT_EQ(target[2], 0);\n\tbitmap.copy(target, true);\n\tEXPECT_EQ(target.size(), 8u);\n\tEXPECT_EQ(target[5], 0);\n\tEXPECT_EQ(target[6], 124);\n\tEXPECT_EQ(target[7], 0);\n}\n"
  },
  {
    "path": "tests/BoundingBoxTest.cpp",
    "content": "/*************************************************************************\n** BoundingBoxTest.cpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#define _USE_MATH_DEFINES\n#include <gtest/gtest.h>\n#include <cmath>\n#include <sstream>\n#include \"BoundingBox.hpp\"\n#include \"Length.hpp\"\n#include \"Matrix.hpp\"\n#include \"XMLNode.hpp\"\n\nusing namespace std;\n\nTEST(BoundingBoxTest, construct) {\n\tBoundingBox bbox1;\n\tEXPECT_FALSE(bbox1.valid());\n\tEXPECT_FALSE(bbox1.locked());\n\n\tBoundingBox bbox2(50, 20, 5, 2);\n\tEXPECT_TRUE(bbox2.valid());\n\tEXPECT_FALSE(bbox2.locked());\n\tEXPECT_DOUBLE_EQ(bbox2.minX(), 5);\n\tEXPECT_DOUBLE_EQ(bbox2.maxX(), 50);\n\tEXPECT_DOUBLE_EQ(bbox2.minY(), 2);\n\tEXPECT_DOUBLE_EQ(bbox2.maxY(), 20);\n\tEXPECT_EQ(bbox2, BoundingBox(DPair(50, 20), DPair(5, 2)));\n\n\tBoundingBox bbox3(\" 1bp    2bp  3bp 4bp  \");\n\tEXPECT_TRUE(bbox2.valid());\n\tEXPECT_FALSE(bbox2.locked());\n\tEXPECT_DOUBLE_EQ(bbox3.minX(), 1);\n\tEXPECT_DOUBLE_EQ(bbox3.minY(), 2);\n\tEXPECT_DOUBLE_EQ(bbox3.maxX(), 3);\n\tEXPECT_DOUBLE_EQ(bbox3.maxY(), 4);\n\n\tLength len(2, Length::Unit::CM);\n\tdouble bp = len.bp();\n\tBoundingBox bbox4(len, len, len, len);\n\tEXPECT_DOUBLE_EQ(bbox4.minX(), bp);\n\tEXPECT_DOUBLE_EQ(bbox4.minY(), bp);\n\tEXPECT_DOUBLE_EQ(bbox4.maxX(), bp);\n\tEXPECT_DOUBLE_EQ(bbox4.maxY(), bp);\n}\n\n\nTEST(BoundingBoxTest, extent) {\n\tBoundingBox bbox(5, 10, 30, 30);\n\tEXPECT_DOUBLE_EQ(bbox.width(), 25);\n\tEXPECT_DOUBLE_EQ(bbox.height(), 20);\n}\n\n\nTEST(BoundingBoxTest, set) {\n\tBoundingBox bbox;\n\tbbox.set(\"1bp 2bp 3bp 4bp\");\n\tEXPECT_EQ(bbox, BoundingBox(1, 2, 3, 4));\n\n\tbbox.set(\"4bp 3bp 2bp 1bp\");\n\tEXPECT_EQ(bbox, BoundingBox(2, 1, 4, 3));\n\n\tbbox.set(\"1bp\");\n\tEXPECT_EQ(bbox, BoundingBox(1, 0, 5, 4));\n\n\tbbox.set(\"2bp 3bp\");\n\tEXPECT_EQ(bbox, BoundingBox(-1, -3, 7, 7));\n\n\tEXPECT_THROW(bbox.set(\"\"), BoundingBoxException);\n\tEXPECT_THROW(bbox.set(\"1bp 2bp 3bp\"), BoundingBoxException);\n}\n\n\nTEST(BoundingBoxTest, embed) {\n\tBoundingBox bbox1(3, 4, 10, 15);\n\tBoundingBox bbox2(3, 4, 10, 15);\n\tEXPECT_EQ(bbox1, bbox2);\n\n\tbbox1.embed(6, 6);\n\tEXPECT_EQ(bbox1, bbox2);\n\n\tbbox1.embed(11, 14);\n\tEXPECT_EQ(bbox1, BoundingBox(3, 4, 11, 15));\n\n\tbbox2.embed(DPair(11, 14));\n\tEXPECT_EQ(bbox1, bbox2);\n\n\tbbox1.embed(Pair<int>(0, 0));\n\tEXPECT_EQ(bbox1, BoundingBox(0, 0, 11, 15));\n\tEXPECT_NE(bbox1, bbox2);\n\n\tbbox2.embed(bbox1);\n\tEXPECT_EQ(bbox1, bbox2);\n\n\tbbox1 = BoundingBox(5, 5, 5, 5);\n\tbbox1.embed(DPair(5, 5), 2);\n\tEXPECT_EQ(bbox1, BoundingBox(3, 3, 7, 7));\n\n\tEXPECT_NE(bbox1, bbox2);\n\tbbox1.invalidate();\n\tbbox1.embed(bbox2);\n\tEXPECT_EQ(bbox1, bbox2);\n}\n\n\nTEST(BoundingBoxTest, expand) {\n\tBoundingBox bbox(4, 5, 6, 7);\n\tbbox.expand(3);\n\tEXPECT_EQ(bbox, BoundingBox(1, 2, 9, 10));\n}\n\n\nTEST(BoundingBoxTest, lock) {\n\tBoundingBox bbox(4, 5, 6, 7);\n\tbbox.lock();\n\tbbox.expand(3);\n\tEXPECT_EQ(bbox, BoundingBox(4, 5, 6, 7));\n}\n\n\nTEST(BoundingBoxTest, scale) {\n\tBoundingBox bbox(4, 5, 6, 7);\n\tbbox.scale(2, 2);\n\tEXPECT_EQ(bbox, BoundingBox(8, 10, 12, 14));\n\tbbox.scale(-2, -2);\n\tEXPECT_EQ(bbox, BoundingBox(-24, -28, -16, -20));\n}\n\n\nTEST(BoundingBoxTest, inc) {\n\tBoundingBox bbox(4, 5, 6, 7);\n\tbbox += BoundingBox(8, 9, 10, 11);\n\tEXPECT_EQ(bbox, BoundingBox(12, 14, 16, 18));\n}\n\n\nTEST(BoundingBoxTest, intersect) {\n\tBoundingBox bbox(4, 5, 16, 17);\n\tbbox.intersect(BoundingBox(10, 18, 20, 25));\n\tEXPECT_EQ(bbox, BoundingBox(4, 5, 16, 17));\n\n\tbbox.intersect(BoundingBox(10, 10, 20, 25));\n\tEXPECT_EQ(bbox, BoundingBox(10, 10, 16, 17));\n}\n\n\nTEST(BoundingBoxTest, transform) {\n\tBoundingBox bbox(-5, -5, 5, 5);\n\tMatrix matrix(1);\n\tmatrix.rotate(M_PI/4);\n\tbbox.transform(matrix);\n\tEXPECT_NEAR(bbox.minX(), -5.068, 0.001);\n\tEXPECT_NEAR(bbox.minY(), -5.068, 0.001);\n\tEXPECT_NEAR(bbox.maxX(),  5.068, 0.001);\n\tEXPECT_NEAR(bbox.maxY(),  5.068, 0.001);\n\n\tmatrix.rotate(-M_PI/4).translate(2, 3);\n\tbbox.transform(matrix);\n\tEXPECT_NEAR(bbox.minX(), -3.068, 0.001);\n\tEXPECT_NEAR(bbox.minY(), -2.068, 0.001);\n\tEXPECT_NEAR(bbox.maxX(),  7.068, 0.001);\n\tEXPECT_NEAR(bbox.maxY(),  8.068, 0.001);\n}\n\n\nTEST(BoundingBoxTest, svgViewBox) {\n\tBoundingBox bbox(4, 5, 6, 7);\n\tostringstream oss;\n\toss << bbox.svgViewBoxString();\n\tEXPECT_EQ(oss.str(), \"4 5 2 2\");\n}\n\n\nTEST(BoundingBoxTest, svgRectElement) {\n\tBoundingBox bbox(4, 5, 6, 7);\n\tauto rect = bbox.createSVGRect();\n\tASSERT_NE(rect, nullptr);\n\tEXPECT_EQ(rect->name(), \"rect\");\n\tEXPECT_EQ(string(rect->getAttributeValue(\"x\")), \"4\");\n\tEXPECT_EQ(string(rect->getAttributeValue(\"y\")), \"5\");\n\tEXPECT_EQ(string(rect->getAttributeValue(\"width\")), \"2\");\n\tEXPECT_EQ(string(rect->getAttributeValue(\"height\")), \"2\");\n}\n\n\nTEST(BoundingBoxTest, extractLengths) {\n\tvector<Length> lengths = BoundingBox::extractLengths(\" 1cm,2mm  , 3pt   5in\");\n\tASSERT_EQ(lengths.size(), 4u);\n\tEXPECT_DOUBLE_EQ(lengths[0].cm(), 1);\n\tEXPECT_DOUBLE_EQ(lengths[1].mm(), 2);\n\tEXPECT_DOUBLE_EQ(lengths[2].pt(), 3);\n\tEXPECT_DOUBLE_EQ(lengths[3].in(), 5);\n}\n"
  },
  {
    "path": "tests/CMapManagerTest.cpp",
    "content": "/*************************************************************************\n** CMapManagerTest.cpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <fstream>\n#include \"CMap.hpp\"\n#include \"CMapManager.hpp\"\n#include \"Message.hpp\"\n\n\nTEST(CMapManagerTest, lookup_buildin) {\n\tCMapManager &manager = CMapManager::instance();\n\tCMap *cmap=0;\n\tASSERT_NE((cmap = manager.lookup(\"Identity-H\")), nullptr);\n\tEXPECT_STREQ(cmap->name(), \"Identity-H\");\n\tEXPECT_EQ(cmap->getROString(), \"Adobe-Identity\");\n\tEXPECT_TRUE(cmap->mapsToCID());\n\n\tASSERT_NE((cmap = manager.lookup(\"Identity-V\")), nullptr);\n\tEXPECT_STREQ(cmap->name(), \"Identity-V\");\n\tEXPECT_EQ(cmap->getROString(), \"Adobe-Identity\");\n\tEXPECT_TRUE(cmap->mapsToCID());\n\n\tASSERT_NE((cmap = manager.lookup(\"unicode\")), nullptr);\n\tEXPECT_STREQ(cmap->name(), \"unicode\");\n\tEXPECT_EQ(cmap->getROString(), \"\");\n\tEXPECT_FALSE(cmap->mapsToCID());\n\tEXPECT_EQ(cmap->path(), nullptr);\n}\n\n\nTEST(CMapManagerTest, lookup_file) {\n\tCMapManager &manager = CMapManager::instance();\n\tCMap *cmap = manager.lookup(\"ot1.cmap\");\n\tASSERT_NE(cmap, nullptr);\n\tEXPECT_STREQ(cmap->name(), \"ot1.cmap\");\n\tEXPECT_EQ(cmap->getROString(), \"\");\n\tEXPECT_FALSE(cmap->mapsToCID());\n\tEXPECT_EQ(cmap->bfcode(0x00), 0x0393u);\n\tEXPECT_EQ(cmap->bfcode(0x01), 0x0394u);\n\tEXPECT_EQ(cmap->bfcode(0x02), 0x0398u);\n\tEXPECT_EQ(cmap->bfcode(0x7c), 0x2014u);\n\tEXPECT_EQ(cmap->bfcode(0x7d), 0x02ddu);\n\tEXPECT_EQ(cmap->bfcode(0x7f), 0x00a8u);\n\tEXPECT_EQ(cmap->bfcode(0x80), 0u);\n}\n\n\nTEST(CMapManagerTest, lookup_fail) {\n\tMessage::LEVEL = 0;  // avoid warning messages\n\tCMapManager &manager = CMapManager::instance();\n\tEXPECT_EQ(manager.lookup(\"does-not-exists\"), nullptr);\n}\n"
  },
  {
    "path": "tests/CMapReaderTest.cpp",
    "content": "/*************************************************************************\n** CMapReaderTest.cpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <memory>\n#include \"CMap.hpp\"\n#include \"CMapReader.hpp\"\n\nusing namespace std;\n\n\nclass CMapReaderTest : public ::testing::Test\n{\n\tprotected:\n\t\tCMapReaderTest () {\n\t\t\tistringstream iss(cmapsrc);\n\t\t\tCMapReader reader;\n\t\t\tcmap = reader.read(iss, \"Test-Map\");\n\t\t}\n\n\t\tstatic const char *cmapsrc;\n\t\tunique_ptr<CMap> cmap;\n};\n\n\nconst char *CMapReaderTest::cmapsrc =\n\"% This is a comment line\\n\"\n\"/CIDInit /ProcSet findresource begin\\n\"\n\"12 dict begin\\n\"\n\"begincmap\\n\"\n\"/CIDSystemInfo 3 dict dup begin\\n\"\n\"  /Registry (Adobe) def\\n\"\n\"  /Ordering (Adobe_Japan1_UCS2) def\\n\"\n\"  /Supplement 6 def\\n\"\n\"end def\\n\"\n\"/CMapName /Test-Map def\\n\"\n\"/CMapVersion 8.002 def\\n\"\n\"/CMapType 2 def\\n\"\n\"/XUID [1 10 25335 1212] def\\n\"\n\"/WMode 0 def\\n\"\n\"1 begincodespacerange\\n\"\n\"  <0000> <FFFF>\\n\"\n\"endcodespacerange\\n\"\n\"4 beginbfchar\\n\"\n\"<0000> <fffd>\\n\"\n\"<003d> <00a5>\\n\"\n\"<005d> <00a6>\\n\"\n\"<005e> <007d>\\n\"\n\"endbfchar\\n\"\n\"2 beginbfchar\\n\"\n\"<005f> <0303>\\n\"\n\"<0060> <2019>\\n\"\n\"endbfchar\\n\"\n\"3 beginbfrange\\n\"\n\"<5830> <5831> <8c75>\\n\"\n\"<5833> <5834> <8c86>\\n\"\n\"<5837> <5838> <8c9b>\\n\"\n\"endbfrange\\n\"\n\"3 begincidchar\\n\"\n\"<1000> 50\\n\"\n\"<1005> 60\\n\"\n\"<1008> 70\\n\"\n\"endcidchar\\n\"\n\"2 begincidrange\\n\"\n\"<1234> <1240> 100\\n\"\n\"<1300> <1302> 200\\n\"\n\"endcidrange\\n\"\n\"endcmap\\n\"\n\"CMapName currentdict /CMap defineresource pop\\n\";\n\n\nTEST_F(CMapReaderTest, rostring) {\n\tASSERT_NE(cmap, nullptr);\n\tASSERT_EQ(cmap->getROString(), \"Adobe-Adobe_Japan1_UCS2\");\n\tASSERT_FALSE(cmap->vertical());\n}\n\n\nTEST_F(CMapReaderTest, bfcode) {\n\tASSERT_NE(cmap, nullptr);\n\tASSERT_EQ(cmap->getROString(), \"Adobe-Adobe_Japan1_UCS2\");\n\tASSERT_FALSE(cmap->vertical());\n\tASSERT_EQ(cmap->bfcode(0), 0xfffdu);\n\tASSERT_EQ(cmap->bfcode(0x3d), 0xa5u);\n\tASSERT_EQ(cmap->bfcode(0x5d), 0xa6u);\n\tASSERT_EQ(cmap->bfcode(0x5e), 0x7du);\n\tASSERT_EQ(cmap->bfcode(0x5f), 0x303u);\n\tASSERT_EQ(cmap->bfcode(0x60), 0x2019u);\n\tASSERT_EQ(cmap->bfcode(0x5830), 0x8c75u);\n\tASSERT_EQ(cmap->bfcode(0x5831), 0x8c76u);\n\tASSERT_EQ(cmap->bfcode(0x5833), 0x8c86u);\n\tASSERT_EQ(cmap->bfcode(0x5838), 0x8c9cu);\n\tASSERT_EQ(cmap->bfcode(0x5839), 0u);\n}\n\nTEST_F(CMapReaderTest, cid) {\n\tconst SegmentedCMap *seg_cmap = dynamic_cast<const SegmentedCMap*>(cmap.get());\n\tASSERT_NE(seg_cmap, nullptr);\n\tASSERT_EQ(seg_cmap->numBFRanges(), 9u);\n\tASSERT_EQ(seg_cmap->numCIDRanges(), 5u);\n\tASSERT_EQ(seg_cmap->cid(0x1000), 50u);\n\tASSERT_EQ(seg_cmap->cid(0x1005), 60u);\n\tASSERT_EQ(seg_cmap->cid(0x1008), 70u);\n\n\tASSERT_EQ(seg_cmap->cid(0x1233), 0u);\n\tASSERT_EQ(seg_cmap->cid(0x1234), 100u);\n\tASSERT_EQ(seg_cmap->cid(0x1240), 112u);\n\tASSERT_EQ(seg_cmap->cid(0x1241), 0u);\n\tASSERT_EQ(seg_cmap->cid(0x12FF), 0u);\n\tASSERT_EQ(seg_cmap->cid(0x1300), 200u);\n\tASSERT_EQ(seg_cmap->cid(0x1301), 201u);\n\tASSERT_EQ(seg_cmap->cid(0x1302), 202u);\n\tASSERT_EQ(seg_cmap->cid(0x1303), 0u);\n}\n"
  },
  {
    "path": "tests/CMapTest.cpp",
    "content": "/*************************************************************************\n** CMapTest.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"CMap.hpp\"\n\nusing namespace std;\n\n#define CHECK_RANGE(name, cmap, cmin, cmax, cid_min) \\\n\t{SCOPED_TRACE(name); check_range(cmap, cmin, cmax, cid_min);}\n\n#define CHECK_ZERO(name, cmap, cmin, cmax) \\\n\t{SCOPED_TRACE(name); check_zero(cmap, cmin, cmax);}\n\n\nstatic void check_range (const SegmentedCMap &cmap, int min, int max, int cid_min) {\n\tfor (int i=min; i <= max; i++)\n\t\tASSERT_EQ(cmap.cid(i), uint32_t(cid_min+(i-min)));\n}\n\n\nstatic void check_zero (const SegmentedCMap &cmap, int min, int max) {\n\tfor (int i=min; i <= max; i++)\n\t\tASSERT_EQ(cmap.cid(i), 0u);\n}\n\n\nTEST(SegmentedCMapTest, disjoint_ranges) {\n\tSegmentedCMap cmap(\"test\");\n\tcmap.addCIDRange(5, 8, 1);\n\tASSERT_EQ(cmap.numCIDRanges(), 1u);\n\tCHECK_RANGE(\"A\", cmap, 5, 8, 1);\n\tCHECK_ZERO(\"B\", cmap, 0, 4);\n\tCHECK_ZERO(\"C\", cmap, 9, 20);\n\n\tcmap.addCIDRange(10, 15, 5);\n\tASSERT_EQ(cmap.numCIDRanges(), 2u);\n\tCHECK_RANGE(\"D\", cmap, 5, 8, 1);\n\tCHECK_RANGE(\"E\", cmap, 10, 15, 5);\n\tCHECK_ZERO(\"F\", cmap, 0, 4);\n\tCHECK_ZERO(\"G\", cmap, 9, 9);\n\tCHECK_ZERO(\"H\", cmap, 16, 20);\n\n\tcmap.addCIDRange(0, 3, 50);\n\tASSERT_EQ(cmap.numCIDRanges(), 3u);\n\tCHECK_RANGE(\"I\", cmap, 0, 3, 50);\n\tCHECK_RANGE(\"J\", cmap, 5, 8, 1);\n\tCHECK_RANGE(\"K\", cmap, 10, 15, 5);\n\tCHECK_ZERO(\"L\", cmap, 4, 4);\n\tCHECK_ZERO(\"M\", cmap, 9, 9);\n\tCHECK_ZERO(\"N\", cmap, 16, 20);\n\n\tcmap.addCIDRange(16, 20, 1);\n\tASSERT_EQ(cmap.numCIDRanges(), 4u);\n\tCHECK_RANGE(\"O\", cmap, 5, 8, 1);\n\tCHECK_RANGE(\"P\", cmap, 10, 15, 5);\n\tCHECK_RANGE(\"Q\", cmap, 0, 3, 50);\n\tCHECK_RANGE(\"R\", cmap, 16, 20, 1);\n}\n\n\nTEST(SegmentedCMapTest, touching_ranges) {\n\tSegmentedCMap cmap(\"test\");\n\tcmap.addCIDRange(5, 8, 10);\n\tASSERT_EQ(cmap.numCIDRanges(), 1u);\n\tCHECK_RANGE(\"A\", cmap, 5, 8, 10);\n\n\tcmap.addCIDRange(9, 15, 14);\n\tASSERT_EQ(cmap.numCIDRanges(), 1u);\n\tCHECK_RANGE(\"B\", cmap, 5, 15, 10);\n\n\tcmap.addCIDRange(1, 4, 5);\n\tASSERT_EQ(cmap.numCIDRanges(), 2u);\n\tCHECK_RANGE(\"C\", cmap, 1, 4, 5);\n\tCHECK_RANGE(\"D\", cmap, 5, 15, 10);\n\n\tcmap.addCIDRange(1, 4, 6);\n\tASSERT_EQ(cmap.numCIDRanges(), 1u);\n\tCHECK_RANGE(\"E\", cmap, 1, 15, 6);\n}\n\n\nTEST(SegmentedCMapTest, overlapping_ranges) {\n\tSegmentedCMap cmap(\"test\");\n\tcmap.addCIDRange(5, 8, 10);\n\tcmap.addCIDRange(7, 15, 12);\n\tASSERT_EQ(cmap.numCIDRanges(), 1u);\n\tCHECK_RANGE(\"A\", cmap, 5, 15, 10);\n\n\tcmap.addCIDRange(10, 20, 1);\n\tASSERT_EQ(cmap.numCIDRanges(), 2u);\n\tCHECK_RANGE(\"B\", cmap, 5, 9, 10);\n\tCHECK_RANGE(\"C\", cmap, 10, 20, 1);\n\n\tcmap.addCIDRange(2, 7, 7);\n\tASSERT_EQ(cmap.numCIDRanges(), 2u);\n\tCHECK_RANGE(\"D\", cmap, 2, 9, 7);\n\tCHECK_RANGE(\"E\", cmap, 10, 20, 1);\n\n\tcmap.addCIDRange(1, 12, 100);\n\tASSERT_EQ(cmap.numCIDRanges(), 2u);\n\tCHECK_RANGE(\"F\", cmap, 1, 12, 100);\n\tCHECK_RANGE(\"G\", cmap, 13, 20, 4);\n\n\tcmap.addCIDRange(0, 30, 1);\n\tASSERT_EQ(cmap.numCIDRanges(), 1u);\n\tCHECK_RANGE(\"H\", cmap, 0, 30, 1);\n}\n\n\nTEST(SegmentedCMapTest, inner_ranges) {\n\tSegmentedCMap cmap(\"test\");\n\tcmap.addCIDRange(5, 20, 1);\n\tcmap.addCIDRange(10, 15, 6);\n\tASSERT_EQ(cmap.numCIDRanges(), 1u);\n\tCHECK_RANGE(\"A\", cmap, 5, 20, 1);\n\n\tcmap.addCIDRange(10, 15, 100);\n\tASSERT_EQ(cmap.numCIDRanges(), 3u);\n\tCHECK_RANGE(\"B\", cmap, 5, 9, 1);\n\tCHECK_RANGE(\"C\", cmap, 10, 15, 100);\n\tCHECK_RANGE(\"D\", cmap, 16, 20, 12);\n\n\tcmap.addCIDRange(15, 15, 50);\n\tASSERT_EQ(cmap.numCIDRanges(), 4u);\n\tCHECK_RANGE(\"E\", cmap, 5, 9, 1);\n\tCHECK_RANGE(\"F\", cmap, 10, 14, 100);\n\tCHECK_RANGE(\"G\", cmap, 15, 15, 50);\n\tCHECK_RANGE(\"H\", cmap, 16, 20, 12);\n\n\tcmap.addCIDRange(6, 19, 1);\n\tASSERT_EQ(cmap.numCIDRanges(), 3u);\n\tCHECK_RANGE(\"I\", cmap, 5, 5, 1);\n\tCHECK_RANGE(\"J\", cmap, 6, 19, 1);\n\tCHECK_RANGE(\"K\", cmap, 20, 20, 16);\n}\n"
  },
  {
    "path": "tests/CalculatorTest.cpp",
    "content": "/*************************************************************************\n** CalculatorTest.cpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"Calculator.hpp\"\n#include \"Length.hpp\"\n\n\nTEST(CalculatorTest, eval) {\n\tCalculator calc;\n\tEXPECT_EQ(calc.eval(\"2\"),             2);\n\tEXPECT_EQ(calc.eval(\"-2\"),           -2);\n\tEXPECT_EQ(calc.eval(\"2+3+4\"),         9);\n\tEXPECT_EQ(calc.eval(\" 2 + 3+ 4 \"),    9);\n\tEXPECT_EQ(calc.eval(\"2*3+4\"),        10);\n\tEXPECT_EQ(calc.eval(\"2+3*4\"),        14);\n\tEXPECT_EQ(calc.eval(\"(2+3)*4\"),      20);\n\tEXPECT_EQ(calc.eval(\"2*(3+4)\"),      14);\n\tEXPECT_EQ(calc.eval(\"2(3+4)\"),       14);\n\tEXPECT_EQ(calc.eval(\"(1+2)(3+4)\"),   21);\n\tEXPECT_EQ(calc.eval(\"-(1+2)(3+4)\"), -21);\n\tEXPECT_EQ(calc.eval(\"(1+2)-(3+4)\"),  -4);\n\tEXPECT_EQ(calc.eval(\"-2+3+4\"),        5);\n\tEXPECT_EQ(calc.eval(\"3/2\"),         1.5);\n\tEXPECT_EQ(calc.eval(\"1+3/2\"),       2.5);\n\tEXPECT_EQ(calc.eval(\"3/2+1\"),       2.5);\n\tEXPECT_EQ(calc.eval(\"3%2\"),           1);\n\tEXPECT_EQ(calc.eval(\"1+3%2\"),         2);\n\tEXPECT_EQ(calc.eval(\"3%2+1\"),         2);\n\tEXPECT_EQ(calc.eval(\"-(4)\"),         -4);\n}\n\n\nTEST(CalculatorTest, variables) {\n\tCalculator calc;\n\tcalc.setVariable(\"a\", 1);\n\tEXPECT_EQ(calc.getVariable(\"a\"), 1);\n\n\tcalc.setVariable(\"a\", 2);\n\tEXPECT_EQ(calc.getVariable(\"a\"), 2);\n\n\tcalc.setVariable(\"b\", 3);\n\tEXPECT_EQ(calc.eval(\"a+b\"), 5);\n\tEXPECT_EQ(calc.eval(\"a+a*b\"), 8);\n\tEXPECT_EQ(calc.eval(\"a*a+b\"), 7);\n\tEXPECT_EQ(calc.eval(\"2a+2b\"), 10);\n\tEXPECT_EQ(calc.eval(\"2a(1+2b)\"), 28);\n}\n\n\nTEST(CalculatorTest, exceptions) {\n\tCalculator calc;\n\tASSERT_THROW(calc.eval(\"2++3\"), CalculatorException);\n\tASSERT_THROW(calc.eval(\"c\"), CalculatorException);\n\tASSERT_THROW(calc.eval(\"1/0\"), CalculatorException);\n\tASSERT_THROW(calc.eval(\"1%0\"), CalculatorException);\n\tASSERT_THROW(calc.eval(\"2*(3+4\"), CalculatorException);\n\tASSERT_THROW(calc.eval(\"2*(3+4))\"), CalculatorException);\n\tASSERT_THROW(calc.eval(\"2*3+4)\"), CalculatorException);\n\tASSERT_THROW(calc.eval(\"2(3+4\"), CalculatorException);\n}\n\n\nTEST(CalculatorTest, units) {\n\tCalculator calc;\n\tfor (auto unit : Length::getUnits())\n\t\tcalc.setVariable(unit.first, Length(1, unit.second).bp());\n\tEXPECT_DOUBLE_EQ(calc.eval(\"1bp+3bp\"), 4.0);\n\tEXPECT_DOUBLE_EQ(calc.eval(\"1bp+1in\"), 73.0);\n\tEXPECT_DOUBLE_EQ(calc.eval(\"5cm/1cm\"), 5.0);\n\tEXPECT_DOUBLE_EQ(calc.eval(\"5cm/1cm\"), 5.0);\n\tEXPECT_DOUBLE_EQ(calc.eval(\"5cm\"), 5/2.54*72);\n}\n"
  },
  {
    "path": "tests/ColorSpecialTest.cpp",
    "content": "/*************************************************************************\n** ColorSpecialTest.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"ColorSpecialHandler.hpp\"\n#include \"SpecialActions.hpp\"\n\nusing namespace std;\n\nclass ColorSpecialTest : public ::testing::Test {\n\tprotected:\n\t\tstruct SetColor : EmptySpecialActions {\n\t\t\tvoid setFillColor (const Color &c) override   {fillColor = uint32_t(c);}\n\t\t\tvoid setStrokeColor (const Color &c) override {strokeColor = uint32_t(c);}\n\t\t\tbool equals (uint32_t c) const                {return fillColor == c && strokeColor == c;}\n\t\t\tbool equals (uint32_t fc, uint32_t sc) const  {return fillColor == fc && strokeColor == sc;}\n\t\t\tuint32_t fillColor=0, strokeColor=0;\n\t\t};\n\t\tColorSpecialHandler handler;\n\t\tSetColor actions;\n};\n\n\nTEST_F(ColorSpecialTest, info) {\n\tEXPECT_EQ(handler.name(), \"color\");\n\tEXPECT_EQ(handler.prefixes().size(), 1u);\n\tEXPECT_STREQ(handler.prefixes()[0], \"color\");\n\tASSERT_NE(handler.info(), nullptr);\n\tEXPECT_FALSE(string(handler.info()).empty());\n}\n\n\nTEST_F(ColorSpecialTest, readColor) {\n\tstd::istringstream iss(\"rgb 1 0 1\");\n\tEXPECT_EQ(ColorSpecialHandler::readColor(iss).rgbString(), \"#f0f\");\n\tiss.clear();\n\tiss.str(\"hsb 1 0.5 1\");\n\tEXPECT_EQ(ColorSpecialHandler::readColor(iss).rgbString(), \"#ff8080\");\n\tiss.clear();\n\tiss.str(\"0 1 0\");\n\tEXPECT_EQ(ColorSpecialHandler::readColor(\"rgb\", iss).rgbString(), \"#0f0\");\n\tiss.clear();\n\tiss.str(\"1 0.5 1\");\n\tEXPECT_EQ(ColorSpecialHandler::readColor(\"hsb\", iss).rgbString(), \"#ff8080\");\n}\n\n\nTEST_F(ColorSpecialTest, gray) {\n\tstd::istringstream iss(\"gray 0.2\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0x333333));\n}\n\n\nTEST_F(ColorSpecialTest, rgb) {\n\tstd::istringstream iss(\"rgb 1 0 1\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0xff00ff));\n\tEXPECT_EQ(handler.stackSize(), 1u);\n\tiss.clear();\n\tiss.str(\"fill rgb 1 0 0\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0xff0000, 0xff00ff));\n\tEXPECT_EQ(handler.stackSize(), 1u);\n\tiss.clear();\n\tiss.str(\"stroke rgb 0 1 1\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0xff0000, 0x00ffff));\n\tEXPECT_EQ(handler.stackSize(), 1u);\n}\n\n\nTEST_F(ColorSpecialTest, hsb) {\n\tstd::istringstream iss(\"hsb 1 0.5 1\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0xff8080));\n\tEXPECT_EQ(handler.stackSize(), 1u);\n}\n\n\nTEST_F(ColorSpecialTest, cmyk) {\n\tstd::istringstream iss(\"cmyk 0.1 0.2 0.4 0.6\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0x1a336699));\n\tEXPECT_EQ(handler.stackSize(), 1u);\n}\n\n\nTEST_F(ColorSpecialTest, stack1) {\n\tstd::istringstream iss(\"push rgb 1 0 0\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0xff0000));\n\tEXPECT_EQ(handler.stackSize(), 1u);\n\tiss.clear();\n\tiss.str(\"push Blue\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0x0000ff));\n\tEXPECT_EQ(handler.stackSize(), 2u);\n\tiss.clear();\n\tiss.str(\"pop\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0xff0000));\n\tEXPECT_EQ(handler.stackSize(), 1u);\n\tiss.clear();\n\tiss.str(\"pop\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0x000000));\n\tEXPECT_EQ(handler.stackSize(), 0u);\n}\n\n\nTEST_F(ColorSpecialTest, stack2) {\n\tstd::istringstream iss(\"push rgb 1 0 0\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0xff0000));\n\tEXPECT_EQ(handler.stackSize(), 1u);\n\tiss.clear();\n\tiss.str(\"push rgb 0 1 0\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_EQ(handler.stackSize(), 2u);\n\tiss.clear();\n\tiss.str(\"gray 0.2\");  // clear color stack implicitly\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0x333333));\n\tEXPECT_EQ(handler.stackSize(), 1u);\n\tiss.clear();\n\tiss.str(\"pop\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0x000000));\n\tEXPECT_EQ(handler.stackSize(), 0u);\n}\n\n\nTEST_F(ColorSpecialTest, stack3) {\n\tstd::istringstream iss(\"push fill cmyk 0.1 0.2 0.4 0.6\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0x1a336699, 0));\n\tEXPECT_EQ(handler.stackSize(), 1u);\n\tiss.clear();\n\tiss.str(\"push stroke Blue\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0x1a336699, 0x0000ff));\n\tEXPECT_EQ(handler.stackSize(), 2u);\n\tiss.clear();\n\tiss.str(\"set fill Green\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0x00ff00, 0x0000ff));\n\tEXPECT_EQ(handler.stackSize(), 2u);\n\tiss.clear();\n\tiss.str(\"set White\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0xffffff));\n\tEXPECT_EQ(handler.stackSize(), 2u);\n}\n\n\nTEST_F(ColorSpecialTest, stack4) {\n\tstd::istringstream iss(\"set stroke Cyan\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0, 0x00ffff));\n\tEXPECT_EQ(handler.stackSize(), 0u);\n\tiss.clear();\n\tiss.str(\"push fill Blue\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0x0000ff, 0x00ffff));\n\tEXPECT_EQ(handler.stackSize(), 1u);\n\tiss.clear();\n\tiss.str(\"pop\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0, 0x00ffff));\n\tEXPECT_EQ(handler.stackSize(), 0u);\n}\n\n\nTEST_F(ColorSpecialTest, constant) {\n\tstd::istringstream iss(\"RedViolet\");\n\thandler.process(\"\", iss, actions);\n\tEXPECT_TRUE(actions.equals(0x9600a8));\n}\n\n\nTEST_F(ColorSpecialTest, errors) {\n\tstd::istringstream iss(\"UnknownColor\");\n\tEXPECT_THROW(handler.process(\"\", iss, actions), SpecialException);\n\tiss.clear();\n\tiss.str(\"blue\");\n\tEXPECT_THROW(handler.process(\"\", iss, actions), SpecialException);\n\tiss.clear();\n\tiss.str(\"rgb black\");\n\tEXPECT_THROW(handler.process(\"\", iss, actions), SpecialException);\n}\n\n"
  },
  {
    "path": "tests/ColorTest.cpp",
    "content": "/*************************************************************************\n** ColorTest.cpp                                                        **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"Color.hpp\"\n\nusing namespace std;\n\nTEST(ColorTest, construct) {\n\tEXPECT_EQ(Color(uint8_t(1), uint8_t(2), uint8_t(3)).rgbString(), \"#010203\");\n\tEXPECT_EQ(Color(1.0/255, 2.0/255, 3.0/255).rgbString(), \"#010203\");\n\tEXPECT_EQ(Color(\"Blue\").rgbString(), \"#00f\");\n\tEXPECT_EQ(Color(\"blue\").rgbString(), \"#00f\");\n\tEXPECT_EQ(Color(\"invalid\").rgbString(), \"#000\");\n}\n\n\nTEST(ColorTest, gray) {\n\tColor c;\n\tc.setGray(10.0/255);\n\tEXPECT_EQ(c.rgbString(), \"#0a0a0a\");\n\tc.setGray(uint8_t(15));\n\tEXPECT_EQ(c.rgbString(), \"#0f0f0f\");\n}\n\n\nTEST(ColorTest, hsb) {\n\tColor c;\n\tc.setHSB(20.0/360, 0.75, 0.8);        // i==0\n\tEXPECT_EQ(c.rgbString(), \"#c63\");\n\tc.setHSB(60.0/360, 0.75, 0.8);        // i==1\n\tEXPECT_EQ(c.rgbString(), \"#cc3\");\n\tc.setHSB(120.0/360, 1.0, 1.0);        // i==2\n\tEXPECT_EQ(c.rgbString(), \"#0f0\");\n\tc.setHSB(180.0/360, 1.0, 1.0);        // i==3\n\tEXPECT_EQ(c.rgbString(), \"#0ff\");\n\tc.setHSB(240.0/360, 0.75, 0.8);       // i==4\n\tEXPECT_EQ(c.rgbString(), \"#33c\");\n\tc.setHSB(300.0/360, 0.75, 0.8);       // i==5\n\tEXPECT_EQ(c.rgbString(), \"#c3c\");\n\tc.setHSB(0.0, 1.0, 1.0);\n\tEXPECT_EQ(c.rgbString(), \"#f00\");\n\tc.setHSB(20.0/360, 0, 0.2);           // s==0\n\tEXPECT_EQ(c.rgbString(), \"#333\");\n}\n\n\nTEST(ColorTest, cmyk) {\n\tColor color;\n\tcolor.setCMYK(0.5, 0.4, 0.6, 0.2);\n\tEXPECT_EQ(color.rgbString(), \"#767761\");\n}\n\n\nTEST(ColorTest, name) {\n\tColor c;\n\tEXPECT_TRUE(c.setPSName(\"Magenta\"));\n\tEXPECT_EQ(c.rgbString(), \"#f0f\");\n\tEXPECT_FALSE(c.setPSName(\"mulberry\"));\n\tEXPECT_TRUE(c.setPSName(\"mulberry\", false));\n\tEXPECT_EQ(c.rgbString(), \"#a314f9\");\n\n\tEXPECT_FALSE(c.setPSName(\"#Magenta\"));\n\tEXPECT_FALSE(c.setPSName(\"#bcdefg\"));\n\tEXPECT_TRUE(c.setPSName(\"#abcdef\"));\n\tEXPECT_EQ(c.rgbString(), \"#abcdef\");\n\tEXPECT_TRUE(c.setPSName(\"#89A\"));\n\tEXPECT_EQ(c.rgbString(), \"#00089a\");\n\tEXPECT_TRUE(c.setPSName(\"#A98 \\n \"));\n\tEXPECT_EQ(c.rgbString(), \"#000a98\");\n}\n\n\nTEST(ColorTest, rgbfunc) {\n\tEXPECT_EQ(Color(\"rgb(1,0,1)\").rgbString(), \"#f0f\");\n\tEXPECT_EQ(Color(\"rgb(1)\").rgbString(), \"#f00\");\n\tEXPECT_EQ(Color(\"rgb(1 1)\").rgbString(), \"#ff0\");\n\tEXPECT_EQ(Color(\"rgb(0 0 0.5)\").rgbString(), \"#000080\");\n}\n\n\nTEST(ColorTest, cmykfunc) {\n\tEXPECT_EQ(Color(\"cmyk(1,0,1,0)\").rgbString(), \"#00a650\");\n\tEXPECT_EQ(Color(\"cmyk(1)\").rgbString(), \"#00aeef\");\n\tEXPECT_EQ(Color(\"cmyk(1,1)\").rgbString(), \"#2e3092\");\n\tEXPECT_EQ(Color(\"cmyk(0.5 1 0 0)\").rgbString(), \"#92278f\");\n}\n\n\nTEST(ColorTest, getXYZ) {\n\tColor c;\n\tdouble x, y, z;\n\tc.setRGB(1.0, 0, 0);\n\tc.getXYZ(x, y, z);\n\tEXPECT_NEAR(x, 0.412456, 0.000001);\n\tEXPECT_NEAR(y, 0.212673, 0.000001);\n\tEXPECT_NEAR(z, 0.019334, 0.000001);\n\n\tc.setRGB(0, 1.0, 0);\n\tc.getXYZ(x, y, z);\n\tEXPECT_NEAR(x, 0.357576, 0.000001);\n\tEXPECT_NEAR(y, 0.715152, 0.000001);\n\tEXPECT_NEAR(z, 0.119192, 0.000001);\n\n\tc.setRGB(0, 0, 1.0);\n\tc.getXYZ(x, y, z);\n\tEXPECT_NEAR(x, 0.180437, 0.000001);\n\tEXPECT_NEAR(y, 0.072175, 0.000001);\n\tEXPECT_NEAR(z, 0.950304, 0.000001);\n\n\tvalarray<double> rgb(3), xyz(3);\n\trgb[0] = 0.2;\n\trgb[1] = 0.75;\n\trgb[2] = 0.9;\n\tColor::RGB2XYZ(rgb, xyz);\n\tEXPECT_NEAR(xyz[0], 0.342574, 0.000001);\n\tEXPECT_NEAR(xyz[1], 0.437554, 0.000001);\n\tEXPECT_NEAR(xyz[2], 0.811202, 0.000001);\n}\n\n\nTEST(ColorTest, getLab) {\n\tColor c;\n\tdouble l, a, b;\n\tc.setRGB(1.0, 0, 0);\n\tc.getLab(l, a, b);\n\tEXPECT_NEAR(l, 53.2408, 0.0001);\n\tEXPECT_NEAR(a, 80.0925, 0.0001);\n\tEXPECT_NEAR(b, 67.2032, 0.0001);\n\n\tc.setRGB(0, 1.0, 0);\n\tc.getLab(l, a, b);\n\tEXPECT_NEAR(l, 87.7347, 0.0001);\n\tEXPECT_NEAR(a, -86.1827, 0.0001);\n\tEXPECT_NEAR(b, 83.1793, 0.0001);\n\n\tc.setRGB(0, 0, 1.0);\n\tc.getLab(l, a, b);\n\tEXPECT_NEAR(l, 32.2970, 0.0001);\n\tEXPECT_NEAR(a, 79.1875, 0.0001);\n\tEXPECT_NEAR(b, -107.8602, 0.0001);\n\n\tvalarray<double> rgb(3), lab(3);\n\trgb[0] = 0.2;\n\trgb[1] = 0.75;\n\trgb[2] = 0.9;\n\tColor::RGB2Lab(rgb, lab);\n\tEXPECT_NEAR(lab[0], 72.0647, 0.0001);\n\tEXPECT_NEAR(lab[1], -23.7597, 0.0001);\n\tEXPECT_NEAR(lab[2], -29.4733, 0.0001);\n}\n\n\nTEST(ColorTest, svgColorString) {\n\tEXPECT_EQ(Color(uint32_t(0x000000)).svgColorString(false), \"black\");\n\tEXPECT_EQ(Color(uint32_t(0xffffff)).svgColorString(false), \"white\");\n\tEXPECT_EQ(Color(uint32_t(0xff0000)).svgColorString(false), \"red\");\n\tEXPECT_EQ(Color(uint32_t(0x9400d3)).svgColorString(false), \"darkviolet\");\n\tEXPECT_EQ(Color(uint32_t(0x000001)).svgColorString(false), \"#000001\");\n\n\tEXPECT_EQ(Color(uint32_t(0x000000)).svgColorString(true), \"#000\");\n\tEXPECT_EQ(Color(uint32_t(0xffffff)).svgColorString(true), \"#fff\");\n\tEXPECT_EQ(Color(uint32_t(0xff0000)).svgColorString(true), \"#f00\");\n\tEXPECT_EQ(Color(uint32_t(0x9400d3)).svgColorString(true), \"#9400d3\");\n\tEXPECT_EQ(Color(uint32_t(0x000001)).svgColorString(true), \"#000001\");\n}\n\n\nTEST(ColorTest, components) {\n\tEXPECT_EQ(Color::numComponents(Color::ColorSpace::GRAY), 1);\n\tEXPECT_EQ(Color::numComponents(Color::ColorSpace::RGB), 3);\n\tEXPECT_EQ(Color::numComponents(Color::ColorSpace::LAB), 3);\n\tEXPECT_EQ(Color::numComponents(Color::ColorSpace::CMYK), 4);\n}\n\n\nTEST(ColorTest, scale) {\n\tEXPECT_EQ((Color(uint32_t(0x123456)) *= 0.0).rgbString(), \"#000\");\n\tEXPECT_EQ((Color(uint32_t(0x123456)) *= 1.0).rgbString(), \"#123456\");\n\tEXPECT_EQ((Color(uint32_t(0x123456)) *= 3.0).rgbString(), \"#369d02\");\n\tEXPECT_EQ((Color(uint32_t(0x123456)) *= 0.5).rgbString(), \"#091a2b\");\n}\n\n\nTEST(ColorTest, set) {\n\tColor color;\n\tvector<double> vec{0.1, 0.2, 0.3, 0.4};\n\tVectorIterator<double> it(vec);\n\tcolor.set(Color::ColorSpace::GRAY, it);\n\tEXPECT_EQ(uint32_t(color), 0x1a1a1au);\n\tit.reset();\n\tcolor.set(Color::ColorSpace::RGB, it);\n\tEXPECT_EQ(uint32_t(color), 0x1a334du);\n\tit.reset();\n\tcolor.set(Color::ColorSpace::CMYK, it);\n\tEXPECT_EQ(uint32_t(color), 0x1A334D66u);\n\tit.reset();\n\tcolor.set(Color::ColorSpace::LAB, it);\n\tEXPECT_EQ(uint32_t(color), 0x010000u);\n}\n"
  },
  {
    "path": "tests/CommandLineTest.cpp",
    "content": "/*************************************************************************\n** CommandLineTest.cpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"CommandLine.hpp\"\n\nusing namespace std;\n\nTEST(CommandLineTest, noarg_short) {\n\tCommandLine cmd;\n\tconst char *args[] = {\"progname\", \"-s\", \"-n\", \"-h\"};\n\tchar **argv = const_cast<char**>(args);\n\tcmd.parse(4, argv);\n\n\tEXPECT_TRUE(cmd.stdoutOpt.given());\n\tEXPECT_TRUE(cmd.noFontsOpt.given());\n\tEXPECT_TRUE(cmd.helpOpt.given());\n\tEXPECT_FALSE(cmd.listSpecialsOpt.given());\n\tEXPECT_FALSE(cmd.verbosityOpt.given());\n\tEXPECT_EQ(cmd.verbosityOpt.value(), 15u);\n\tEXPECT_EQ(cmd.filenames().size(), 0u);\n}\n\n\nTEST(CommandLineTest, noarg_long) {\n\tCommandLine cmd;\n\tconst char *args[] = {\"progname\", \"--progress\", \"--no-fonts\", \"--stdout\", \"--help\", \"--verbosity=5\"};\n\tchar **argv = const_cast<char**>(args);\n\tcmd.parse(6, argv);\n\n\tEXPECT_TRUE(cmd.progressOpt.given());\n\tEXPECT_DOUBLE_EQ(cmd.progressOpt.value(), 0.5);\n\tEXPECT_TRUE(cmd.stdoutOpt.given());\n\tEXPECT_TRUE(cmd.noFontsOpt.given());\n\tEXPECT_TRUE(cmd.helpOpt.given());\n\tEXPECT_FALSE(cmd.listSpecialsOpt.given());\n\tEXPECT_FALSE(cmd.stdinOpt.given());\n\tEXPECT_FALSE(cmd.singleDashGiven());\n\tEXPECT_EQ(cmd.filenames().size(), 0u);\n\tEXPECT_TRUE(cmd.verbosityOpt.given());\n\tEXPECT_EQ(cmd.verbosityOpt.value(), 5u);\n}\n\n\nTEST(CommandLineTest, arg_short) {\n\tCommandLine cmd;\n\tconst char *args[] = {\"progname\", \"-P\", \"-p5\", \"-r45\", \"-omyfile.xyz\", \"-ayes\", \"-v3\", \"-\"};\n\tchar **argv = const_cast<char**>(args);\n\tcmd.parse(8, argv);\n\n\tEXPECT_TRUE(cmd.pdfOpt.given());\n\tEXPECT_DOUBLE_EQ(cmd.progressOpt.value(), 0.5);\n\tEXPECT_TRUE(cmd.pageOpt.given());\n\tEXPECT_EQ(cmd.pageOpt.value(), \"5\");\n\tEXPECT_TRUE(cmd.rotateOpt.given());\n\tEXPECT_EQ(cmd.rotateOpt.value(), 45);\n\tEXPECT_TRUE(cmd.outputOpt.given());\n\tEXPECT_EQ(cmd.outputOpt.value(), \"myfile.xyz\");\n\tEXPECT_FALSE(cmd.bboxOpt.given());\n\tEXPECT_FALSE(cmd.stdinOpt.given());\n\tEXPECT_EQ(cmd.bboxOpt.value(), \"min\");\n\tEXPECT_EQ(cmd.filenames().size(), 0u);\n\tEXPECT_TRUE(cmd.traceAllOpt.given());\n\tEXPECT_TRUE(cmd.traceAllOpt.value());\n\tEXPECT_TRUE(cmd.verbosityOpt.given());\n\tEXPECT_TRUE(cmd.singleDashGiven());\n\tEXPECT_EQ(cmd.verbosityOpt.value(), 3u);\n}\n\n\nTEST(CommandLineTest, arg_combined) {\n\tCommandLine cmd;\n\tconst char *args1[] = {\"progname\", \"-lse\", \"-p5\", \"-omyfile.xyz\"};\n\tchar **argv = const_cast<char**>(args1);\n\tcmd.parse(4, argv);\n\tEXPECT_TRUE(cmd.pageOpt.given());\n\tEXPECT_EQ(cmd.pageOpt.value(), \"5\");\n\tEXPECT_TRUE(cmd.listSpecialsOpt.given());\n\tEXPECT_TRUE(cmd.stdoutOpt.given());\n\tEXPECT_TRUE(cmd.exactBboxOpt.given());\n\n\t// can't combine short options that accept optional parameters\n\tconst char *args2[] = {\"progname\", \"-nls\", \"-p5\", \"-omyfile.xyz\"};\n\targv = const_cast<char**>(args2);\n\tEXPECT_THROW(cmd.parse(4, argv), CL::CommandLineException);\n}\n\n\nTEST(CommandLineTest, arg_separated) {\n\tCommandLine cmd;\n\tconst char *args[] = {\"progname\", \"-p\", \"5\", \"-r\",  \"45\", \"myfile.xyz\", \"-afalse\"};\n\tchar **argv = const_cast<char**>(args);\n\tcmd.parse(7, argv);\n\n\tEXPECT_TRUE(cmd.pageOpt.given());\n\tEXPECT_EQ(cmd.pageOpt.value(), \"5\");\n\tEXPECT_TRUE(cmd.rotateOpt.given());\n\tEXPECT_EQ(cmd.rotateOpt.value(), 45);\n\tEXPECT_EQ(cmd.filenames().size(), 1u);\n\tEXPECT_TRUE(cmd.traceAllOpt.given());\n\tEXPECT_FALSE(cmd.traceAllOpt.value());\n}\n\n\nTEST(CommandLineTest, arg_long) {\n\tCommandLine cmd;\n\tconst char *args[] = {\"progname\", \"--page=9\", \"--rotate=-45.5\", \"--trace-all\", \"--output=myfile.zyx\"};\n\tchar **argv = const_cast<char**>(args);\n\tcmd.parse(5, argv);\n\n\tEXPECT_TRUE(cmd.pageOpt.given());\n\tEXPECT_EQ(cmd.pageOpt.value(), \"9\");\n\tEXPECT_TRUE(cmd.rotateOpt.given());\n\tEXPECT_EQ(cmd.rotateOpt.value(), -45.5);\n\tEXPECT_TRUE(cmd.outputOpt.given());\n\tEXPECT_EQ(cmd.outputOpt.value(), \"myfile.zyx\");\n\tEXPECT_FALSE(cmd.bboxOpt.given());\n\tEXPECT_EQ(cmd.bboxOpt.value(), \"min\");\n\tEXPECT_EQ(cmd.filenames().size(), 0u);\n\tEXPECT_TRUE(cmd.traceAllOpt.given());\n\tEXPECT_FALSE(cmd.traceAllOpt.value());\n}\n\n\nTEST(CommandLineTest, string_arg) {\n\tCommandLine cmd;\n\tconst char *args[] = {\"progname\", \"--page=9 - 10\", \"-m first second\"};\n\tchar **argv = const_cast<char**>(args);\n\tcmd.parse(3, argv);\n\n\tEXPECT_TRUE(cmd.pageOpt.given());\n\tEXPECT_EQ(cmd.pageOpt.value(), \"9 - 10\");\n\tEXPECT_TRUE(cmd.fontmapOpt.given());\n\tEXPECT_EQ(cmd.fontmapOpt.value(), \"first second\");\n}\n\n\nTEST(CommandLineTest, abbrev_long) {\n\tCommandLine cmd;\n\tconst char *args[] = {\"progname\", \"--pre=2\", \"--rot=-45.5\", \"--out=myfile.zyx\", \"--color\"};\n\tchar **argv = const_cast<char**>(args);\n\tcmd.parse(5, argv);\n\n\tEXPECT_TRUE(cmd.precisionOpt.given());\n\tEXPECT_EQ(cmd.precisionOpt.value(), 2);\n\tEXPECT_TRUE(cmd.rotateOpt.given());\n\tEXPECT_EQ(cmd.rotateOpt.value(), -45.5);\n\tEXPECT_TRUE(cmd.outputOpt.given());\n\tEXPECT_EQ(cmd.outputOpt.value(), \"myfile.zyx\");\n\tEXPECT_FALSE(cmd.bboxOpt.given());\n\tEXPECT_EQ(cmd.bboxOpt.value(), \"min\");\n\tEXPECT_EQ(cmd.filenames().size(), 0u);\n\tEXPECT_TRUE(cmd.colorOpt.given());\n}\n\n\nTEST(CommandLineTest, error) {\n\tCommandLine cmd;\n\t// error on wrong argument type\n\tconst char *args1[] = {\"progname\", \"--rotate=x\"};\n\tchar **argv = const_cast<char**>(args1);\n\n\tEXPECT_THROW(cmd.parse(2, argv), CL::CommandLineException);\n\n\t// error on missing arguments\n\tconst char *args2[] = {\"progname\", \"--page\", \"--zip\"};\n\targv = const_cast<char**>(args2);\n\tEXPECT_THROW(cmd.parse(3, argv), CL::CommandLineException);\n\tEXPECT_FALSE(cmd.zipOpt.given());\n\tEXPECT_EQ(cmd.zipOpt.value(), 9);\n\tEXPECT_FALSE(cmd.pageOpt.given());\n\tEXPECT_EQ(cmd.pageOpt.value(), \"1\");\n\tEXPECT_FALSE(cmd.rotateOpt.given());\n\tEXPECT_EQ(cmd.filenames().size(), 0u);\n\n\t// error on ambiguous abbreviation of long option\n\tconst char *args3[] = {\"progname\", \"--no\"};\n\targv = const_cast<char**>(args3);\n\tEXPECT_THROW(cmd.parse(2, argv), CL::CommandLineException);\n\n\t// incorrect boolean value\n\tconst char *args4[] = {\"progname\", \"--trace-all=nope\"};\n\targv = const_cast<char**>(args4);\n\tEXPECT_THROW(cmd.parse(2, argv), CL::CommandLineException);\n\tEXPECT_FALSE(cmd.traceAllOpt.given());\n}\n\n\nTEST(CommandLineTest, file) {\n\tCommandLine cmd;\n\tconst char *args1[] = {\"progname\", \"--page=3\", \"-z5\", \"myfile1\", \"-l\", \"myfile2\"};\n\tchar **argv = const_cast<char**>(args1);\n\tcmd.parse(6, argv);\n\n\tEXPECT_TRUE(cmd.pageOpt.given());\n\tEXPECT_EQ(cmd.pageOpt.value(), \"3\");\n\tEXPECT_TRUE(cmd.zipOpt.given());\n\tEXPECT_EQ(cmd.zipOpt.value(), 5);\n\tEXPECT_TRUE(cmd.listSpecialsOpt.given());\n\tEXPECT_EQ(cmd.filenames().size(), 2u);\n\tEXPECT_EQ(cmd.filenames()[0], \"myfile1\");\n\tEXPECT_EQ(cmd.filenames()[1], \"myfile2\");\n}\n\n\nTEST(CommandLineTest, files_only) {\n\tCommandLine cmd;\n\tconst char *args1[] = {\"progname\", \"--page=3\", \"-z5\", \"--\", \"-l\", \"myfile\"};\n\tchar **argv = const_cast<char**>(args1);\n\tcmd.parse(6, argv);\n\n\tEXPECT_TRUE(cmd.pageOpt.given());\n\tEXPECT_EQ(cmd.pageOpt.value(), \"3\");\n\tEXPECT_TRUE(cmd.zipOpt.given());\n\tEXPECT_EQ(cmd.zipOpt.value(), 5);\n\tEXPECT_EQ(cmd.filenames().size(), 2u);\n\tEXPECT_EQ(cmd.filenames()[0], \"-l\");\n\tEXPECT_EQ(cmd.filenames()[1], \"myfile\");\n}\n\n\nTEST(CommandLineTest, help) {\n\t// only check whether help() succeeds\n\tCommandLine cmd;\n\tostringstream oss;\n\tcmd.help(oss, 0);\n\tcmd.help(oss, 1);\n\tcmd.help(oss, 2);\n}\n"
  },
  {
    "path": "tests/DVIReaderTest.cpp",
    "content": "/*************************************************************************\n** DVIReaderTest.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <cstdlib>\n#include <fstream>\n#include <ostream>\n#include <string>\n#include <vector>\n#include \"DVIReader.hpp\"\n#include \"Font.hpp\"\n#include \"Message.hpp\"\n#include \"XMLString.hpp\"\n\nusing namespace std;\n\ntemplate <typename T>\nvoid write (ostream &os, T val) {\n\tos << val;\n}\n\ntemplate<>\nvoid write (ostream &os, double val) {\n\tos << XMLString(val);\n}\n\n\ntemplate <typename T>\nostream& operator << (ostream &os, const vector<T> &vec) {\n\tos << '{';\n\tfor (size_t i=0; i < vec.size(); i++) {\n\t\tif (i > 0)\n\t\t\tos << \", \";\n\t\twrite(os, vec[i]);\n\t}\n\tos << '}';\n\treturn os;\n}\n\n\nclass LoggingDVIReader : public DVIReader {\n\tpublic:\n\t\tLoggingDVIReader (istream& is, ostream &os) : DVIReader (is), _inVirtualFont(false), _os(os) {}\n\n\t\tvoid execute () {\n\t\t\tclearStream();\n\t\t\tseek(0);\n\t\t\texecuteAll();\n\t\t}\n\n\tprotected:\n\t\tvoid dviPre (uint8_t id, uint32_t numer, uint32_t denom, uint32_t mag, const string &comment) override {\n\t\t\t_os << \"pre \" << int(id) << \", \" << numer << \", \" << denom << \", \" <<  mag << \", '\" << comment << \"'\";\n\t\t}\n\n\t\tvoid dviPost (uint16_t stdepth, uint16_t pages, uint32_t pw, uint32_t ph, uint32_t mag, uint32_t num, uint32_t den, uint32_t lbopofs) override {\n\t\t\t_os << \"post \" << stdepth << \", \" << pages << \", \" << pw << \", \" << ph << \", \" <<  mag << \", \" <<  num << \", \" << den << \", \" <<  lbopofs;\n\t\t}\n\n\t\tvoid dviPostPost (uint8_t id, uint32_t postOffset) override {\n\t\t\t_os << \"postpost \" << int(id) << \", \" << postOffset;\n\t\t}\n\n\t\tvoid dviBop (const vector<int32_t> &c, int32_t prevBopOffset) override {\n\t\t\t_os << \"bop \" << c << \", \" << prevBopOffset;\n\t\t}\n\n\t\tvoid dviEop () override {_os << \"eop\";}\n\t\tvoid dviSetChar0 (uint32_t c, const Font *font) override {if (!_inVirtualFont) _os << \"setchar0 \" << c;}\n\t\tvoid dviSetChar (uint32_t c, const Font *font) override  {if (!_inVirtualFont) _os << \"setchar \" << c;}\n\t\tvoid dviPutChar (uint32_t c, const Font *font) override  {if (!_inVirtualFont) _os << \"putchar \" << c;}\n\t\tvoid dviSetRule (double h, double w) override {_os << \"setrule \" << XMLString(h) << \", \" << XMLString(w);}\n\t\tvoid dviPutRule (double h, double w) override {_os << \"putrule \" << XMLString(h) << \", \" << XMLString(w);}\n\t\tvoid dviNop () override  {_os << \"nop\";}\n\t\tvoid dviPush () override {_os << \"push\";}\n\t\tvoid dviPop () override  {_os << \"pop\";}\n\t\tvoid dviRight (double dx) override {_os << \"right \" << XMLString(dx);}\n\t\tvoid dviDown (double dy) override {_os << \"down \" << XMLString(dy);}\n\t\tvoid dviX0 () override {_os << \"x0\";}\n\t\tvoid dviY0 () override {_os << \"y0\";}\n\t\tvoid dviW0 () override {_os << \"w0\";}\n\t\tvoid dviZ0 () override {_os << \"z0\";}\n\t\tvoid dviX (double x) override {_os << \"x \" << XMLString(x);}\n\t\tvoid dviY (double y) override {_os << \"y \" << XMLString(y);}\n\t\tvoid dviW (double w) override {_os << \"w \" << XMLString(w);}\n\t\tvoid dviZ (double z) override {_os << \"z \" << XMLString(z);}\n\t\tvoid dviDir (WritingMode dir) override {_os << \"dir \" << int(dir);}\n\t\tvoid dviXXX (const string &str) override {_os << \"xxx '\" << str << \"'\";}\n\n\t\tvoid dviFontDef (uint32_t fontnum, uint32_t checksum, const Font *font) override {\n\t\t\t_os << \"fontdef \" << fontnum << \", \" << checksum << \", \" << font->name();\n\t\t}\n\n\t\tvoid dviFontNum (uint32_t fontnum, SetFontMode mode, const Font *font) override {\n\t\t\tif (!_inVirtualFont) { // exclude logging of virtual fonts\n\t\t\t\tif (mode == DVIReader::SetFontMode::VF_ENTER)\n\t\t\t\t\t_inVirtualFont = true;\n\t\t\t\telse\n\t\t\t\t\t_os << \"fontnum \" << fontnum << \", \" << font->name();\n\t\t\t}\n\t\t\telse if (mode == DVIReader::SetFontMode::VF_LEAVE)\n\t\t\t\t_inVirtualFont = false;\n\t\t}\n\n\t\tvoid dviXPic (uint8_t box, const vector<int32_t> &matrix, int16_t page, const string &path) override {\n\t\t\t_os << \"xpic \" << int(box) << \", \" << matrix << \", \" << page << \", \" << path;\n\t\t}\n\n\t\tvoid dviXFontDef (uint32_t fontnum, const NativeFont *font) override {\n\t\t\t_os << \"xfontdef \" << fontnum;\n\t\t}\n\n\t\tvoid dviXGlyphArray (vector<double> &dx, vector<double> &dy, vector<uint16_t> &glyphs, const Font &font) override {\n\t\t\t_os << \"xglypharray \" << dx << \", \" << dy << \", \" << glyphs << \", \" << font.name();\n\t\t}\n\n\t\tvoid dviXGlyphString (vector<double> &dx, vector<uint16_t> &glyphs, const Font &font) override {\n\t\t\t_os << \"xglyphstring \" << dx << \", \" << glyphs << \", \" << font.name();\n\t\t}\n\n\t\tvoid dviXTextAndGlyphs (vector<double> &dx, vector<double> &dy, vector<uint16_t> &chars, vector<uint16_t> &glyphs, const Font &font) override {\n\t\t\t_os << \"xtxtglyphs \" << dx << \", \" << dy << \", \" << chars << \", \" << glyphs << \", \" << font.name();\n\t\t}\n\n\t\tint executeCommand () override {\n\t\t\tint ret = DVIReader::executeCommand();\n\t\t\tif (!_inVirtualFont) {\n\t\t\t\t_os << \" [h=\" << XMLString(dviState().h)\n\t\t\t\t\t<< \", v=\" << XMLString(dviState().v)\n\t\t\t\t\t<< \", x=\" << XMLString(dviState().x)\n\t\t\t\t\t<< \", y=\" << XMLString(dviState().y)\n\t\t\t\t\t<< \", w=\" << XMLString(dviState().w)\n\t\t\t\t\t<< \", z=\" << XMLString(dviState().z)\n\t\t\t\t\t<< \", d=\" << int(dviState().d)\n\t\t\t\t\t<< \"]\\n\";\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\n\tprivate:\n\t\tbool _inVirtualFont;  ///< true if reading a char definition of a virtual font\n\t\tostream &_os;\n};\n\n\nstatic void test_dvi_file (const char *fname, const vector<const char*> &expected_lines) {\n\tXMLString::DECIMAL_PLACES = 3;\n\tstring dviname = string(SRCDIR)+\"/data/\"+fname;\n\tifstream ifs(dviname, ios::binary);\n\tASSERT_TRUE(bool(ifs));\n\tstringstream ss;\n\tLoggingDVIReader dviReader(ifs, ss);\n\tdviReader.execute();\n\tss.seekg(0);\n\tint lineno=0;\n\tchar line[512];\n\tfor (const string expected_line : expected_lines) {\n\t\tASSERT_FALSE(ss.eof());\n\t\tss.getline(line, 512);\n\t\tlineno++;\n\t\tEXPECT_EQ(line, expected_line) << \"log line #\" << lineno;\n\t}\n\tss.getline(line, 512);\n\tEXPECT_EQ(*line, '\\0');\n\tEXPECT_TRUE(ss.eof());\n}\n\n\n// test DVI file generated with standard LaTeX (DVI version 2)\nTEST(DVIReaderTest, dvi_v2) {\n\tvector<const char*> expected_lines {\n\t\t\"pre 2, 25400000, 473628672, 1000, ' TeX output 2017.11.22:1132' [h=0, v=0, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"bop {1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -1 [h=0, v=0, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 630.635 [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down -602.74 [h=0, v=27.895, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=0, v=27.895, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=0, v=27.895, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right 61.768 [h=61.768, v=27.895, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"xxx 'color push gray 0' [h=61.768, v=27.895, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right 343.711 [h=405.479, v=27.895, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"xxx 'color pop' [h=405.479, v=27.895, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=0, v=27.895, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=0, v=27.895, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 572.852 [h=0, v=600.747, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=0, v=600.747, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right 61.768 [h=61.768, v=600.747, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down -547.945 [h=61.768, v=52.802, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"xxx 'color push gray 0' [h=61.768, v=52.802, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 9.963 [h=61.768, v=62.765, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=62.765, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"fontdef 7, 1274110073, cmr10 [h=61.768, v=62.765, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"fontnum 7, cmr10 [h=61.768, v=62.765, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 67 [h=68.964, v=62.765, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 111 [h=73.945, v=62.765, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 108 [h=76.712, v=62.765, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 111 [h=81.694, v=62.765, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 114 [h=85.596, v=62.765, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"w 3.321 [h=88.917, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 116 [h=92.791, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 101 [h=97.219, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 115 [h=101.149, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 116 [h=105.023, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 58 [h=107.79, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"right 4.428 [h=112.218, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"xxx 'color push rgb 1 0 0' [h=112.218, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 114 [h=116.12, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 101 [h=120.548, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 100 [h=126.083, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"xxx 'color pop' [h=126.083, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 44 [h=128.85, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"w0 [h=132.171, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"xxx 'color push rgb 0 0 1' [h=132.171, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 98 [h=137.706, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 108 [h=140.473, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 117 [h=146.008, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 101 [h=150.436, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"xxx 'color pop' [h=150.436, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 44 [h=153.204, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"w0 [h=156.524, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"xxx 'color push cmyk 0 1 0 0' [h=156.524, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 109 [h=164.827, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 97 [h=169.808, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 103 [h=174.789, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 101 [h=179.217, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 110 [h=184.752, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"right -.277 [h=184.475, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 116 [h=188.35, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 97 [h=193.331, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"xxx 'color pop' [h=193.331, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 46 [h=196.098, v=62.765, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=62.765, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 44.638 [h=61.768, v=107.402, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=107.402, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 76 [h=67.995, v=107.402, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 105 [h=70.762, v=107.402, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 110 [h=76.297, v=107.402, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 101 [h=80.725, v=107.402, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"w 3.321 [h=84.046, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 111 [h=89.027, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 102 [h=92.071, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"w0 [h=95.392, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 116 [h=99.267, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 101 [h=103.695, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 120 [h=108.953, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 116 [h=112.827, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"w0 [h=116.148, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 119 [h=123.343, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 105 [h=126.111, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 116 [h=129.985, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 104 [h=135.52, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"w0 [h=138.841, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 97 [h=143.822, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"push [h=143.822, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"push [h=143.822, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"right 6.78 [h=150.602, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"xxx 'ps: gsave currentpoint currentpoint translate 30 neg rotate neg exch neg exch translate' [h=150.602, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"push [h=150.602, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 114 [h=154.504, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 111 [h=159.485, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 116 [h=163.36, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 97 [h=168.341, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 116 [h=172.215, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 101 [h=176.643, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 100 [h=182.178, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"pop [h=150.602, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"right 31.576 [h=182.178, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"xxx 'ps: currentpoint grestore moveto' [h=182.178, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"pop [h=143.822, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"pop [h=143.822, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"right 37.446 [h=181.268, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 119 [h=188.463, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"right -.277 [h=188.187, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 111 [h=193.168, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 114 [h=197.07, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 100 [h=202.605, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 46 [h=205.372, v=107.402, x=0, y=0, w=3.321, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=107.402, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 52.873 [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down -31.154 [h=61.768, v=129.121, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"putrule .797, 220.922 [h=61.768, v=129.121, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"y 11.157 [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"right 5.978 [h=67.746, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 12 [h=73.281, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 114 [h=77.183, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 115 [h=81.113, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 116 [h=84.987, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"right 3.321 [h=88.308, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 99 [h=92.736, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 111 [h=97.717, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 108 [h=100.484, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 117 [h=106.019, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 109 [h=114.321, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 110 [h=119.856, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"right 110.558 [h=172.326, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 115 [h=176.256, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 101 [h=180.684, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 99 [h=185.112, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 111 [h=190.093, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 110 [h=195.628, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 100 [h=201.163, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"right 3.321 [h=204.483, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 99 [h=208.911, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 111 [h=213.893, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 108 [h=216.66, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 117 [h=222.195, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 109 [h=230.497, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 110 [h=236.032, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=140.278, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"down 5.8 [h=61.768, v=146.078, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"putrule .498, 220.922 [h=61.768, v=146.078, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"y0 [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"right 5.978 [h=67.746, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 76 [h=73.973, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 111 [h=78.954, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 114 [h=82.856, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 101 [h=87.284, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 109 [h=95.586, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"right 3.321 [h=98.907, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 105 [h=101.674, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 112 [h=107.209, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 115 [h=111.139, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 117 [h=116.674, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 109 [h=124.976, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"right 110.558 [h=172.326, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 100 [h=177.861, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 111 [h=182.842, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 108 [h=185.61, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 111 [h=190.591, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"setchar0 114 [h=194.493, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"w 3.321 [h=197.814, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 115 [h=201.744, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 105 [h=204.511, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 116 [h=208.386, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]\",\n\t\t\"w0 [h=211.706, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 97 [h=216.688, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 109 [h=224.99, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 101 [h=229.418, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 116 [h=233.292, v=157.235, x=0, y=11.157, w=3.321, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=157.235, x=0, y=11.157, w=0, z=0, d=0]\",\n\t\t\"y 11.955 [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"right 5.978 [h=67.746, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 99 [h=72.174, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 111 [h=77.155, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 110 [h=82.69, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 115 [h=86.62, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 101 [h=91.048, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 116 [h=94.922, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 101 [h=99.35, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 116 [h=103.224, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 117 [h=108.759, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 114 [h=112.661, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"right 3.321 [h=115.982, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 115 [h=119.912, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 97 [h=124.893, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 100 [h=130.428, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 105 [h=133.195, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 112 [h=138.73, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 115 [h=142.66, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 99 [h=147.088, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 105 [h=149.855, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 110 [h=155.39, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 103 [h=160.371, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"right 110.558 [h=172.326, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 101 [h=176.754, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 108 [h=179.521, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 105 [h=182.289, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 116 [h=186.163, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 114 [h=190.065, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=169.19, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"y0 [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"right 5.978 [h=67.746, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 115 [h=71.676, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 101 [h=76.104, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 100 [h=81.638, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"w 3.321 [h=84.959, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 100 [h=90.494, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 105 [h=93.261, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 97 [h=98.243, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 109 [h=106.545, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]\",\n\t\t\"w0 [h=109.866, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 110 [h=115.401, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 111 [h=120.382, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]\",\n\t\t\"setchar0 110 [h=125.917, v=181.145, x=0, y=11.955, w=3.321, z=0, d=0]\",\n\t\t\"w -.277 [h=125.64, v=181.145, x=0, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"setchar0 117 [h=131.175, v=181.145, x=0, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"setchar0 109 [h=139.477, v=181.145, x=0, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"w0 [h=139.2, v=181.145, x=0, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"setchar0 121 [h=144.458, v=181.145, x=0, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"right 110.558 [h=172.326, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 101 [h=176.754, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 105 [h=179.521, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 114 [h=183.423, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 109 [h=191.726, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"setchar0 111 [h=196.707, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"w .277 [h=196.984, v=181.145, x=0, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"setchar0 100 [h=202.519, v=181.145, x=0, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"x 3.321 [h=205.84, v=181.145, x=3.321, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"setchar0 116 [h=209.714, v=181.145, x=3.321, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"setchar0 101 [h=214.142, v=181.145, x=3.321, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"setchar0 109 [h=222.444, v=181.145, x=3.321, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"setchar0 112 [h=227.979, v=181.145, x=3.321, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"w0 [h=228.256, v=181.145, x=3.321, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"setchar0 111 [h=233.237, v=181.145, x=3.321, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"setchar0 114 [h=237.139, v=181.145, x=3.321, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"x0 [h=240.46, v=181.145, x=3.321, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"setchar0 105 [h=243.227, v=181.145, x=3.321, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"setchar0 110 [h=248.762, v=181.145, x=3.321, y=11.955, w=.277, z=0, d=0]\",\n\t\t\"w -.277 [h=248.485, v=181.145, x=3.321, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"setchar0 118 [h=253.743, v=181.145, x=3.321, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"setchar0 105 [h=256.511, v=181.145, x=3.321, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"setchar0 100 [h=262.046, v=181.145, x=3.321, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"setchar0 117 [h=267.58, v=181.145, x=3.321, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"setchar0 110 [h=273.115, v=181.145, x=3.321, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"w0 [h=272.838, v=181.145, x=3.321, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"setchar0 116 [h=276.713, v=181.145, x=3.321, y=11.955, w=-.277, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=181.145, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"down 6.099 [h=61.768, v=187.245, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"putrule .797, 220.922 [h=61.768, v=187.245, x=0, y=11.955, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=160.275, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 58.197 [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 2.989 [h=61.768, v=221.461, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=221.461, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=221.461, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down -2.989 [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right 3.387 [h=65.156, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 98 [h=70.69, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right .277 [h=70.967, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 111 [h=75.949, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right -.277 [h=75.672, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 120 [h=80.93, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 101 [h=85.358, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 100 [h=90.893, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right 3.321 [h=94.213, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 116 [h=98.088, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 101 [h=102.516, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 120 [h=107.774, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 116 [h=111.648, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=221.461, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=221.461, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down -9.907 [h=61.768, v=208.565, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"putrule .398, 53.267 [h=61.768, v=208.565, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 13.095 [h=61.768, v=221.66, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=221.66, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setrule 13.295, .398 [h=62.167, v=221.66, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right 52.47 [h=114.637, v=221.66, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setrule 13.295, .398 [h=115.035, v=221.66, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=221.66, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down .199 [h=61.768, v=221.859, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"putrule .398, 53.267 [h=61.768, v=221.859, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=218.472, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=0, v=600.747, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 29.888 [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right 61.768 [h=61.768, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"xxx 'color push gray 0' [h=61.768, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=61.768, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right 169.365 [h=231.133, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 49 [h=236.115, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=61.768, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right 343.711 [h=405.479, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"xxx 'color pop' [h=405.479, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"eop [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"post 10, 1, 405, 630, 1000, 25400000, 473628672, 42 [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"fontdef 7, 1274110073, cmr10 [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"postpost 2, 953 [h=0, v=630.635, x=0, y=0, w=0, z=0, d=0]\",\n\t};\n\ttest_dvi_file(\"sample_v2.dvi\", expected_lines);\n}\n\n\n// test DVI file generated with pLaTeX in vertical mode (DVI version 3)\nTEST(DVIReaderTest, dvi_v3) {\n\tvector<const char*> expected_lines {\n\t\t\"pre 2, 25400000, 473628672, 1000, ' TeX output 2017.11.22:1928' [h=0, v=0, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"bop {1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -1 [h=0, v=0, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 703.125 [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down -678.472 [h=0, v=24.653, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 650.12 [h=0, v=674.773, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=0, v=674.773, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down -601.603 [h=0, v=73.17, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=0, v=73.17, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=0, v=73.17, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right 12.552 [h=12.552, v=73.17, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down -30.128 [h=12.552, v=43.042, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"dir 1 [h=12.552, v=43.042, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"down -15.94 [h=28.492, v=43.042, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"push [h=28.492, v=43.042, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"down 3.404 [h=25.088, v=43.042, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"fontdef 7, 1274110073, cmr10 [h=25.088, v=43.042, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"fontnum 7, cmr10 [h=25.088, v=43.042, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 118 [h=25.088, v=48.3, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"right -.277 [h=25.088, v=48.023, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 101 [h=25.088, v=52.451, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 114 [h=25.088, v=56.353, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 116 [h=25.088, v=60.228, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 105 [h=25.088, v=62.995, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 99 [h=25.088, v=67.423, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 97 [h=25.088, v=72.404, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 108 [h=25.088, v=75.172, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"pop [h=28.492, v=43.042, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"down 15.94 [h=12.552, v=43.042, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"push [h=12.552, v=43.042, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"down 3.404 [h=9.148, v=43.042, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 116 [h=9.148, v=46.916, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 101 [h=9.148, v=51.344, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 120 [h=9.148, v=56.602, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"setchar0 116 [h=9.148, v=60.477, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"pop [h=12.552, v=43.042, x=0, y=0, w=0, z=0, d=1]\",\n\t\t\"pop [h=0, v=73.17, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=0, v=73.17, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=0, v=674.773, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"down 28.352 [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"push [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"right 223.147 [h=223.147, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"setchar0 49 [h=228.128, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"pop [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"eop [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"post 5, 1, 451, 703, 1000, 25400000, 473628672, 42 [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"fontdef 7, 1274110073, cmr10 [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t\t\"postpost 3, 195 [h=0, v=703.125, x=0, y=0, w=0, z=0, d=0]\",\n\t};\n\ttest_dvi_file(\"sample_v3.dvi\", expected_lines);\n}\n"
  },
  {
    "path": "tests/DependencyGraphTest.cpp",
    "content": "/*************************************************************************\n** DependencyGraphTest.cpp                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"optimizer/DependencyGraph.hpp\"\n\nusing namespace std;\n\nstatic void populate (DependencyGraph<int> &tree) {\n\ttree.insert(1);\n\ttree.insert(2);\n\ttree.insert(1, 3);\n\ttree.insert(1, 4);\n\ttree.insert(1, 5);\n\ttree.insert(4, 6);\n\ttree.insert(4, 7);\n}\n\n\nTEST(DependencyGraphTest, getKeys) {\n\tDependencyGraph<int> graph;\n\tpopulate(graph);\n\tauto keys = graph.getKeys();\n\tASSERT_EQ(keys.size(), 7u);\n\tint count=0;\n\tfor (int key : keys) {\n\t\tASSERT_EQ(keys[count++], key);\n\t}\n}\n\n\nTEST(DependencyGraphTest, insert) {\n\tDependencyGraph<int> graph;\n\tpopulate(graph);\n\tfor (int i=1; i <= 7; i++) {\n\t\tASSERT_TRUE(graph.contains(i));\n\t}\n\tASSERT_FALSE(graph.contains(0));\n\tASSERT_FALSE(graph.contains(8));\n}\n\n\nTEST(DependencyGraphTest, removeDependencyPath) {\n\tDependencyGraph<int> graph;\n\tpopulate(graph);\n\tgraph.removeDependencyPath(4);\n\tASSERT_FALSE(graph.contains(1));\n\tASSERT_TRUE(graph.contains(2));\n\tASSERT_TRUE(graph.contains(3));\n\tASSERT_FALSE(graph.contains(4));\n\tASSERT_TRUE(graph.contains(5));\n\tASSERT_TRUE(graph.contains(6));\n\tASSERT_TRUE(graph.contains(7));\n}\n"
  },
  {
    "path": "tests/DirectoryTest.cpp",
    "content": "/*************************************************************************\n** DirectoryTest.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <iostream>\n#include <set>\n#include <unistd.h>\n#include \"Directory.hpp\"\n#include \"FileSystem.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\n\nusing namespace std;\n\nTEST(DirectoryTest, dirs) {\n\tconst char *dirs_to_find[] = {\"doc\", \"src\", 0};\n\tset<string> found_dirs;\n\tDirectory dir(string(SRCDIR)+\"/..\");\n\twhile (const char *dname = dir.read(Directory::ET_DIR))\n\t\tfound_dirs.insert(dname);\n\tfor (const char **p=dirs_to_find; *p; ++p) {\n\t\tEXPECT_NE(found_dirs.find(*p), found_dirs.end()) << *p;\n\t}\n}\n\n\nTEST(DirectoryTest, file) {\n\tconst char *files_to_find[] = {\n\t\t\"Bitmap.cpp\", \"BoundingBox.cpp\", \"Calculator.cpp\",\n\t\t\"Directory.cpp\", \"DVIReader.cpp\", \"DVIToSVG.cpp\", \"DVIToSVGActions.cpp\",\n\t\t\"FileSystem.cpp\", \"Font.cpp\", \"FontEngine.cpp\", \"FontManager.cpp\",\n\t\t\"FontMap.cpp\", \"GFReader.cpp\", \"GFTracer.cpp\", \"FileFinder.cpp\", \"Message.cpp\",\n\t\t\"MetafontWrapper.cpp\", \"PageSize.cpp\", \"StreamReader.cpp\",\n\t\t\"TFM.cpp\", \"VFReader.cpp\", \"XMLDocument.cpp\", \"XMLNode.cpp\", \"XMLString.cpp\",\n\t\t0\n\t};\n\tset<string> found_files;\n\tDirectory dir(string(SRCDIR)+\"/../src\");\n\twhile (const char *fname = dir.read(Directory::ET_FILE))\n\t\tfound_files.insert(fname);\n\tfor (const char **p=files_to_find; *p; ++p) {\n\t\tEXPECT_NE(found_files.find(*p), found_files.end()) << *p;\n\t}\n\tEXPECT_EQ(found_files.find(\"tests\"), found_files.end());\n}\n"
  },
  {
    "path": "tests/DvisvgmSpecialTest.cpp",
    "content": "/*************************************************************************\n** DvisvgmSpecialTest.cpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <array>\n#include <regex>\n#include <sstream>\n#include \"DvisvgmSpecialHandler.hpp\"\n#include \"SpecialActions.hpp\"\n#include \"XMLNode.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\nusing namespace std;\n\n\nclass MyDvisvgmSpecialHandler : public DvisvgmSpecialHandler {\n\tpublic:\n\t\texplicit MyDvisvgmSpecialHandler (EmptySpecialActions &actions) : _actions(actions) {}\n\t\tvoid finishPreprocessing () {dviPreprocessingFinished();}\n\t\tvoid beginPage ()           {dviBeginPage(0, _actions);}\n\t\tvoid finishPage ()          {dviEndPage(0, _actions);}\n\n\tprotected:\n\t\tEmptySpecialActions &_actions;\n};\n\n\nclass DvisvgmSpecialTest : public ::testing::Test {\n\tpublic:\n\t\tDvisvgmSpecialTest () : handler(recorder) {}\n\n\tprotected:\n\t\tclass ActionsRecorder : public EmptySpecialActions {\n\t\t\tpublic:\n\t\t\t\tvoid embed (const BoundingBox &bb) override    {bbox.embed(bb);}\n\t\t\t\tdouble getX () const override                  {return -42;}\n\t\t\t\tdouble getY () const override                  {return 14;}\n\t\t\t\tunsigned getCurrentPageNumber() const override {return 1;}\n\t\t\t\tColor getFillColor () const override           {return Color(0xff0000);}\n\t\t\t\tColor getStrokeColor () const override         {return Color(0x00ff00);}\n\t\t\t\tFilePath getSVGFilePath(unsigned pageno) const override {return FilePath(\"test.svg\");}\n\t\t\t\tbool defsEquals (const string &str) const      {return defsString() == str;}\n\t\t\t\tbool pageEquals (const string &str) const      {return pageString() == str;}\n\t\t\t\tbool pageMatches (const string &pattern) const {return regex_match(pageString(), regex(pattern));}\n\t\t\t\tbool bboxEquals (const string &str) const      {return bbox.svgViewBoxString() == str;}\n\t\t\t\tstring bboxString () const                     {return bbox.svgViewBoxString();}\n\t\t\t\tstring defsString () const                     {return toString(svgTree().defsNode());}\n\t\t\t\tstring pageString () const                     {return toString(svgTree().pageNode());}\n\n\t\t\t\tvoid clear () {\n\t\t\t\t\tSpecialActions::svgTree().reset();\n\t\t\t\t\tSpecialActions::svgTree().newPage(1);\n\t\t\t\t\tbbox = BoundingBox(0, 0, 0, 0);\n\t\t\t\t}\n\n\t\t\tprotected:\n\t\t\t\tstatic string toString (const XMLNode *node) {\n\t\t\t\t\tostringstream oss;\n\t\t\t\t\tif (node)\n\t\t\t\t\t\tnode->write(oss);\n\t\t\t\t\treturn oss.str();\n\t\t\t\t}\n\n\t\t\tprivate:\n\t\t\t\tBoundingBox bbox;\n\t\t};\n\n\t\tvoid SetUp () override {\n\t\t\trecorder.clear();\n\t\t\thandler.beginPage();\n\t\t\tXMLElement::WRITE_NEWLINES = false;\n\t\t}\n\n\tprotected:\n\t\tActionsRecorder recorder;\n\t\tMyDvisvgmSpecialHandler handler;\n};\n\n\nTEST_F(DvisvgmSpecialTest, basic) {\n\tEXPECT_EQ(handler.name(), \"dvisvgm\");\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawText) {\n\tistringstream iss(\"raw first{?nl}{?x},{?y}\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'>first\\n-42,14</g>\")) << recorder.pageString();\n\n\tiss.clear(); iss.str(\"raw \\t ;{?(-x+2*y-5)}{?(-y+2*x-5)}second {?bbox dummy} \\t\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'>first\\n-42,14;65-103second 0 0 0 0</g>\")) << recorder.pageString();\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawPage1) {\n\tistringstream iss(\"raw <elem attr1='1' attr2='20'>text1<inner>&lt;text2</inner>text3</elem>\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'><elem attr1='1' attr2='20'>text1<inner>&lt;text2</inner>text3</elem></g>\")) << recorder.pageString();\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawPage2) {\n\tistringstream iss(\"raw <elem attr1='1' attr2='20'>text1\");\n\thandler.process(\"\", iss, recorder);\n\tiss.clear(); iss.str(\"raw text2<inner>text3</inner><my:empty-elem/>text4\");\n\thandler.process(\"\", iss, recorder);\n\tiss.clear(); iss.str(\"raw </elem>\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'><elem attr1='1' attr2='20'>text1text2<inner>text3</inner><my:empty-elem/>text4</elem></g>\")) << recorder.pageString();\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawPage3) {\n\tistringstream iss(\"raw <elem attr1='1' attr2=\");\n\thandler.process(\"\", iss, recorder);\n\tiss.clear(); iss.str(\"raw '20'>text2<inner>text3</inner>text4</e\");\n\thandler.process(\"\", iss, recorder);\n\tiss.clear(); iss.str(\"raw lem>\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'><elem attr1='1' attr2='20'>text2<inner>text3</inner>text4</elem></g>\")) << recorder.pageString();\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawDefs1) {\n\tistringstream iss(\"rawdef <elem attr1='1' attr2='20'>text1<inner>&lt;text2</inner>text3</elem>\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"<defs><elem attr1='1' attr2='20'>text1<inner>&lt;text2</inner>text3</elem></defs>\")) << recorder.defsString();\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'/>\"));\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawDefs2) {\n\tistringstream iss(\"rawdef <elem attr1='1' attr2='20'>text1\");\n\thandler.process(\"\", iss, recorder);\n\tiss.clear(); iss.str(\"rawdef text2<inner>text3</inner>text4\");\n\thandler.process(\"\", iss, recorder);\n\tiss.clear(); iss.str(\"rawdef </elem>\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"<defs><elem attr1='1' attr2='20'>text1text2<inner>text3</inner>text4</elem></defs>\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'/>\"));\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawDefs3) {\n\tistringstream iss(\"rawdef <elem attr1='1' a\");\n\thandler.process(\"\", iss, recorder);\n\tiss.clear(); iss.str(\"rawdef ttr2='20'>text2<inner>text3</in\");\n\thandler.process(\"\", iss, recorder);\n\tiss.clear(); iss.str(\"rawdef ner>text4</elem>\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"<defs><elem attr1='1' attr2='20'>text2<inner>text3</inner>text4</elem></defs>\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'/>\"));\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawCDATA) {\n\tistringstream iss(\"raw <outer>text1<![CDATA[1 < 2 <!--test-->]]>text2</outer>\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'><outer>text1<![CDATA[1 < 2 <!--test-->]]>text2</outer></g>\")) << recorder.pageString();\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawComments) {\n\tistringstream iss(\"raw <first/><second><!-- 1 < 2 ->--->text</second>\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'><first/><second><!-- 1 < 2 ->--->text</second></g>\")) << recorder.pageString();\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawPI) {\n\tistringstream iss(\"raw <first/><?pi1 whatever?><second><?pi2 whatever?></second>\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'><first/><?pi1 whatever?><second><?pi2 whatever?></second></g>\")) << recorder.pageString();\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawPageFail) {\n\tistringstream iss(\"raw <elem attr1='1' attr2='20'\");\n\tEXPECT_THROW({handler.process(\"\", iss, recorder); handler.finishPage();}, XMLParserException);  // incomplete opening tag\n\tiss.clear(); iss.str(\"raw </elem>\");\n\tEXPECT_THROW(handler.process(\"\", iss, recorder), XMLParserException);  // spurious closing tag\n\tiss.clear(); iss.str(\"raw <open>text</close>\");\n\tEXPECT_THROW(handler.process(\"\", iss, recorder), XMLParserException);  // mismatching tags\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawDefsFail) {\n\tistringstream iss(\"rawdef <elem attr1='1' attr2='20'\");\n\tEXPECT_THROW({handler.process(\"\", iss, recorder); handler.finishPage();}, XMLParserException);  // incomplete opening tag\n\tiss.clear(); iss.str(\"rawdef </elem>\");\n\tEXPECT_THROW(handler.process(\"\", iss, recorder), XMLParserException);  // spurious closing tag\n\tiss.clear(); iss.str(\"rawdef <open>text</close>\");\n\tEXPECT_THROW(handler.process(\"\", iss, recorder), XMLParserException);  // mismatching tags\n}\n\n\nTEST_F(DvisvgmSpecialTest, rawdef) {\n\tstd::istringstream iss(\"rawdef first\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"<defs>first</defs>\")) << recorder.defsString();\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'/>\"));\n\n\tiss.clear(); iss.str(\"rawdef \\t <second></second> \\t\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"<defs>first<second/></defs>\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'/>\"));\n}\n\n\nTEST_F(DvisvgmSpecialTest, pattern1) {\n\tconst auto cmds = {\n\t\t\"rawset pat1\",\n\t\t\"raw text1\",\n\t\t\"raw <elem>text2</elem>\",\n\t\t\"endrawset\",\n\t\t\"raw first\",\n\t\t\"rawput pat1\",\n\t\t\"rawput pat1\",\n\t};\n\tfor (const char *cmd : cmds) {\n\t\tstd::istringstream iss(cmd);\n\t\thandler.preprocess(\"\", iss, recorder);\n\t}\n\thandler.finishPreprocessing();\n\tfor (const char *cmd : cmds) {\n\t\tstd::istringstream iss(cmd);\n\t\thandler.process(\"\", iss, recorder);\n\t}\n\thandler.finishPage();\n\tEXPECT_TRUE(recorder.defsEquals(\"\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'>firsttext1<elem>text2</elem>text1<elem>text2</elem></g>\")) << recorder.pageString();\n}\n\n\nTEST_F(DvisvgmSpecialTest, pattern2) {\n\tconst auto cmds = {\n\t\t\"rawset pat2\",\n\t\t\"rawdef text1\",\n\t\t\"rawdef <elem>text2</elem>\",\n\t\t\"endrawset\",\n\t\t\"rawdef first\",\n\t\t\"rawput pat2\",\n\t\t\"rawput pat2\",\n\t};\n\tfor (const char *cmd : cmds) {\n\t\tstd::istringstream iss(cmd);\n\t\thandler.preprocess(\"\", iss, recorder);\n\t}\n\thandler.finishPreprocessing();\n\tfor (const char *cmd : cmds) {\n\t\tstd::istringstream iss(cmd);\n\t\thandler.process(\"\", iss, recorder);\n\t}\n\thandler.finishPage();\n\tEXPECT_TRUE(recorder.defsEquals(\"<defs>firsttext1<elem>text2</elem></defs>\")) << recorder.defsString();\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'/>\"));\n}\n\n\nTEST_F(DvisvgmSpecialTest, pattern3) {\n\tconst auto cmds = {\n\t\t\"rawset pat3\",\n\t\t\"raw <elem first='a' second='x\\\"y\\\"'>text<empty/></elem>\",\n\t\t\"rawdef <a/>text2\",\n\t\t\"endrawset\",\n\t\t\"rawdef first\",\n\t\t\"raw second\",\n\t\t\"rawput pat3\",\n\t\t\"rawput pat3\",\n\t};\n\tfor (const char *cmd : cmds) {\n\t\tstd::istringstream iss(cmd);\n\t\thandler.preprocess(\"\", iss, recorder);\n\t}\n\thandler.finishPreprocessing();\n\tfor (const char *cmd : cmds) {\n\t\tstd::istringstream iss(cmd);\n\t\thandler.process(\"\", iss, recorder);\n\t}\n\tEXPECT_TRUE(recorder.defsEquals(\"<defs>first<a/>text2</defs>\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'>second<elem first='a' second='x\\\"y\\\"'>text<empty/></elem><elem first='a' second='x\\\"y\\\"'>text<empty/></elem></g>\")) << recorder.pageString();\n\thandler.finishPage();\n}\n\n\nTEST_F(DvisvgmSpecialTest, fail1) {\n\tstd::istringstream iss(\"rawset\");  // pattern name missing\n\tEXPECT_THROW(handler.preprocess(\"\", iss, recorder), SpecialException);\n\thandler.finishPreprocessing();\n}\n\n\nTEST_F(DvisvgmSpecialTest, fail2) {\n\tstd::istringstream iss(\"rawset pat\");  // endrawset missing\n\thandler.preprocess(\"\", iss, recorder);\n\tEXPECT_THROW(handler.finishPreprocessing(), SpecialException);\n}\n\n\nTEST_F(DvisvgmSpecialTest, processImg) {\n\tstd::istringstream iss(\"img 72.27 72.27 \" SRCDIR \"/data/rectangle.png\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"\"));\n\tEXPECT_TRUE(recorder.pageMatches(\"<g id='page1'><image x='-42' y='-58' width='72' height='72' xlink:href='.*rectangle.png'/></g>\")) << recorder.pageString();\n\n\trecorder.clear();\n\tiss.clear();\n\tiss.str(\"img 10bp 20bp \" SRCDIR \"/data/rectangle.png\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.pageMatches(\"<g id='page1'><image x='-42' y='-6' width='10' height='20' xlink:href='.*rectangle.png'/></g>\")) << recorder.pageString();\n}\n\n\nTEST_F(DvisvgmSpecialTest, fail3) {\n\tstd::istringstream iss(\"img 10 20xy test.png\");  // unknown unit\n\tEXPECT_THROW(handler.process(\"\", iss, recorder), SpecialException);\n}\n\n\nTEST_F(DvisvgmSpecialTest, processBBox) {\n\tstd::istringstream iss(\"bbox abs 0 0 72.27 72.27\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.defsEquals(\"\"));\n\tEXPECT_TRUE(recorder.pageEquals(\"<g id='page1'/>\"));\n\tEXPECT_TRUE(recorder.bboxEquals(\"0 0 72 72\"));\n\n\trecorder.clear();\n\tiss.clear();\n\tiss.str(\"bbox 72.27 72.27\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.bboxEquals(\"-42 -58 72 72\"));\n\n\trecorder.clear();\n\tiss.clear();\n\tiss.str(\"bbox 72bp 72bp\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.bboxEquals(\"-42 -58 72 72\"));\n\n\trecorder.clear();\n\tiss.clear();\n\tiss.str(\"bbox rel 72.27 72.27\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.bboxEquals(\"-42 -58 72 72\"));\n\n\trecorder.clear();\n\tiss.clear();\n\tiss.str(\"bbox new name\");\n\thandler.process(\"\", iss, recorder);\n\tEXPECT_TRUE(recorder.bboxEquals(\"0 0 0 0\"));\n}\n\n\nTEST_F(DvisvgmSpecialTest, expandText) {\n\tEXPECT_EQ(recorder.expandText(\"\"), \"\");\n\tEXPECT_EQ(recorder.expandText(\"static text\"), \"static text\");\n\tEXPECT_EQ(recorder.expandText(\"x={?x}, y={?y}\"), \"x=-42, y=14\");\n\tEXPECT_EQ(recorder.expandText(\"page:{?pageno}, file:{?svgfile}\"), \"page:1, file:test.svg\");\n\tEXPECT_EQ(recorder.expandText(\"xxx{?cmyk(1,0,1,0)}yyy\"), \"xxx#00a650yyy\");\n\tEXPECT_EQ(recorder.expandText(\"xxx{?cmyk(1,0,1,0)}yyy{?cmyk(1,0,0,0)}zzz\"), \"xxx#00a650yyy#00aeefzzz\");\n\tEXPECT_EQ(recorder.expandText(\"fill='{?fillcolor}' stroke='{?strokecolor}'\"), \"fill='#f00' stroke='#0f0'\");\n\tEXPECT_EQ(recorder.expandText(\"stroke='{?color}'\"), \"stroke='#f00'\");\n}\n\n\nTEST_F(DvisvgmSpecialTest, fail4) {\n\tstd::istringstream iss(\"bbox abs 0 0 72.27xx 72.27\");  // unknown unit\n\tEXPECT_THROW(handler.process(\"\", iss, recorder), SpecialException);\n}\n"
  },
  {
    "path": "tests/EllipticalArcTest.cpp",
    "content": "/*************************************************************************\n** EllipticalArcTest.cpp                                                **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"EllipticalArc.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\n#define EXPECT_NEAR_PAIR(p1, p2, eps) \\\n\tEXPECT_NEAR(p1.x(), p2.x(), eps); \\\n\tEXPECT_NEAR(p1.y(), p2.y(), eps)\n\n\nTEST(EllipticalArcTest, construct1) {\n\tEllipticalArc arc(DPair(125,75), 100, 50, math::deg2rad(30), 1, 1, DPair(225, 125));\n\tEXPECT_FALSE(arc.isStraightLine());\n\tEXPECT_EQ(arc.startPoint(), DPair(125,75));\n\tEXPECT_EQ(arc.endPoint(), DPair(225,125));\n\tEXPECT_EQ(arc.rx(), 100);\n\tEXPECT_EQ(arc.ry(), 50);\n\tEXPECT_NEAR(math::rad2deg(arc.rotationAngle()), 30, 0.0001);\n\tEXPECT_TRUE(arc.largeArc());\n\tEXPECT_TRUE(arc.sweepPositive());\n}\n\n\nTEST(EllipticalArcTest, construct2) {\n\t// radii two small, check automatic adaption\n\tEllipticalArc arc(DPair(125,75), 20, 10, math::deg2rad(30), 1, 1, DPair(225, 125));\n\tEXPECT_FALSE(arc.isStraightLine());\n\tEXPECT_EQ(arc.startPoint(), DPair(125,75));\n\tEXPECT_EQ(arc.endPoint(), DPair(225,125));\n\tEXPECT_NEAR(arc.rx(), 56.2, 0.01);\n\tEXPECT_NEAR(arc.ry(), 28.1, 0.01);\n\tEXPECT_NEAR(math::rad2deg(arc.rotationAngle()), 30, 0.0001);\n\tEXPECT_TRUE(arc.largeArc());\n\tEXPECT_TRUE(arc.sweepPositive());\n}\n\n\nTEST(EllipticalArcTest, construct3) {\n\tEXPECT_TRUE(EllipticalArc(DPair(125,75), 0, 10, math::deg2rad(30), 1, 1, DPair(225, 125)).isStraightLine());\n\tEXPECT_TRUE(EllipticalArc(DPair(125,75), 20, 0, math::deg2rad(30), 1, 1, DPair(225, 125)).isStraightLine());\n\tEXPECT_TRUE(EllipticalArc(DPair(125,75), 0, 0, math::deg2rad(30), 1, 1, DPair(225, 125)).isStraightLine());\n}\n\n\nTEST(EllipticalArcTest, construct4) {\n\t// center parameterization\n\tEllipticalArc arc(DPair(100,100), 100, 50, math::deg2rad(30), math::deg2rad(30), math::deg2rad(80));\n\tEXPECT_FALSE(arc.isStraightLine());\n\tEXPECT_NEAR_PAIR(arc.startPoint(), DPair(152.452, 164.952), 0.001);\n\tEXPECT_NEAR_PAIR(arc.endPoint(), DPair(50.856, 123.589), 0.001);\n\tEXPECT_NEAR(arc.rx(), 100, 0.1);\n\tEXPECT_NEAR(arc.ry(), 50, 0.1);\n\tEXPECT_NEAR(math::rad2deg(arc.rotationAngle()), 30, 0.0001);\n\tEXPECT_FALSE(arc.largeArc());\n\tEXPECT_TRUE(arc.sweepPositive());\n}\n\n\nTEST(EllipticalArcTest, transform) {\n\tEllipticalArc arc(DPair(125,75), 100, 50, math::deg2rad(30), 1, 1, DPair(225, 125));\n\tMatrix m(1);\n\tm.scale(1,2).rotate(30).xskewByAngle(15).rotate(20).yskewByAngle(-20);\n\tarc.transform(m);\n\tEXPECT_NEAR_PAIR(arc.startPoint(), DPair(13.8871, 204.752), 0.001);\n\tEXPECT_NEAR_PAIR(arc.endPoint(), DPair(35.957, 350.121), 0.001);\n\tEXPECT_NEAR(arc.rx(), 154.73, 0.001);\n\tEXPECT_NEAR(arc.ry(), 64.629, 0.001);\n\tEXPECT_NEAR(math::rad2deg(arc.rotationAngle()), -81.748, 0.001);\n\tEXPECT_TRUE(arc.largeArc());\n\tEXPECT_TRUE(arc.sweepPositive());\n}\n\n\nTEST(EllipticalArcTest, bbox1) {\n\tEllipticalArc arc(DPair(125,75), 100, 50, math::deg2rad(30), 1, 1, DPair(225, 125));\n\tBoundingBox bbox = arc.getBBox();\n\tEXPECT_NEAR(bbox.minX(), 96.854, 0.001);\n\tEXPECT_NEAR(bbox.minY(), -6.633, 0.001);\n\tEXPECT_NEAR(bbox.width(), 180.278, 0.001);\n  \tEXPECT_NEAR(bbox.height(), 132.288, 0.001);\n}\n\n\nTEST(EllipticalArcTest, bbox2) {\n\tEllipticalArc arc(DPair(125,75), 100, 50, math::deg2rad(30), 0, 1, DPair(225, 125));\n\tBoundingBox bbox = arc.getBBox();\n\tEXPECT_NEAR(bbox.minX(), 125, 0.1);\n\tEXPECT_NEAR(bbox.minY(), 75, 0.1);\n\tEXPECT_NEAR(bbox.width(), 100, 0.1);\n  \tEXPECT_NEAR(bbox.height(), 50, 0.1);\n}\n\n\nTEST(EllipticalArcTest, approximate1) {\n\tEllipticalArc arc(DPair(125,75), 100, 50, math::deg2rad(30), 1, 1, DPair(225, 125));\n\tauto beziers = arc.approximate();\n\tASSERT_EQ(beziers.size(), 4u);\n\tDPair data[4][4] = {\n\t\t{DPair(125, 75),         DPair(96.271, 46.768),   DPair(88.655, 17.402),   DPair(106.223, 2.602)},\n\t\t{DPair(106.223, 2.602),  DPair(123.791, -12.198), DPair(162.434, -8.971),  DPair(201.493, 10.558)},\n\t\t{DPair(201.493, 10.558), DPair(240.551, 30.088),  DPair(270.89, 61.351),   DPair(276.289, 87.635)},\n\t\t{DPair(276.289, 87.635), DPair(281.688, 113.919), DPair(260.884, 129.074), DPair(225, 125)}\n\t};\n\tfor (int i=0; i < 4; i++) {\n\t\tfor (int j=0; j < 4; j++) {\n\t\t\tEXPECT_NEAR_PAIR(beziers[i].point(j), data[i][j], 0.001);\n\t\t}\n\t}\n}\n\n\nTEST(EllipticalArcTest, approximate2) {\n\tEllipticalArc arc(DPair(125,75), 100, 50, math::deg2rad(30), 0, 1, DPair(225, 125));\n\tauto beziers = arc.approximate();\n\tASSERT_EQ(beziers.size(), 1u);\n\tDPair data[] = {DPair(125, 75), DPair(158.522, 78.806), DPair(198.163, 98.627), DPair(225, 125)};\n\tfor (int j=0; j < 4; j++) {\n\t\tEXPECT_NEAR_PAIR(beziers[0].point(j), data[j], 0.001);\n\t}\n}\n"
  },
  {
    "path": "tests/EmSpecialTest.cpp",
    "content": "/*************************************************************************\n** EmSpecialTest.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"EmSpecialHandler.hpp\"\n#include \"SpecialActions.hpp\"\n#include \"XMLNode.hpp\"\n#include \"XMLString.hpp\"\n#include \"SVGTree.hpp\"\n\nusing namespace std;\n\n\nclass EmSpecialTest : public ::testing::Test {\n\tprotected:\n\t\tclass ActionsRecorder : public EmptySpecialActions {\n\t\t\tpublic:\n\t\t\t\tActionsRecorder () : x(), y() {}\n\t\t\t\tvoid embed (const BoundingBox &bb) override   {bbox.embed(bb);}\n\t\t\t\tvoid setX (double xx) override                {x = xx;}\n\t\t\t\tvoid setY (double yy) override                {x = yy;}\n\t\t\t\tdouble getX () const override                 {return x;}\n\t\t\t\tdouble getY () const override                 {return y;}\n\t\t\t\tColor getFillColor () const override          {return fillColor;}\n\t\t\t\tvoid setFillColor (const Color &c) override   {fillColor = c;}\n\t\t\t\tColor getStrokeColor () const override        {return strokeColor;}\n\t\t\t\tvoid setStrokeColor (const Color &c) override {strokeColor = c;}\n\t\t\t\tstring getPageXML () const                    {ostringstream oss; oss << *svgTree().pageNode(); return oss.str();}\n\t\t\t\tconst Matrix& getMatrix () const override     {static Matrix m(1); return m;}\n\n\t\t\t\tvoid clear () {\n\t\t\t\t\tSpecialActions::svgTree().reset();\n\t\t\t\t\tSpecialActions::svgTree().newPage(1);\n\t\t\t\t\tbbox = BoundingBox(0, 0, 0, 0);\n\t\t\t\t}\n\n/*\t\t\t\tvoid write (ostream &os) const {\n\t\t\t\t\tos << \"page: \" << page << '\\n'\n\t\t\t\t\t\t<< \"bbox: \" << bbox.svgViewBoxString() << '\\n';\n\t\t\t\t} */\n\n\t\t\tprivate:\n\t\t\t\tdouble x, y;\n\t\t\t\tBoundingBox bbox;\n\t\t\t\tColor fillColor, strokeColor;\n\t\t};\n\n\n\t\tclass MyEmSpecialHandler : public EmSpecialHandler {\n\t\t\tpublic:\n\t\t\t\texplicit MyEmSpecialHandler (SpecialActions &a) : actions(a) {}\n\t\t\t\tvoid finishPage () {dviEndPage(0, actions);}\n\t\t\t\tvoid processSpecial (const string &str) {stringstream ss;\tss << str; process(\"em\", ss, actions);}\n\n\t\t\tprotected:\n\t\t\t\tSpecialActions &actions;\n\t\t};\n\n\tpublic:\n\t\tEmSpecialTest () : handler(recorder) {}\n\n\t\tvoid SetUp () override {\n\t\t\tXMLString::DECIMAL_PLACES=2;\n\t\t\trecorder.clear();\n\t\t}\n\n\n\tprotected:\n\t\tActionsRecorder recorder;\n\t\tMyEmSpecialHandler handler;\n};\n\n\nTEST_F(EmSpecialTest, basic) {\n\tEXPECT_EQ(handler.name(), \"em\");\n}\n\n\nTEST_F(EmSpecialTest, lines1) {\n\tDPair p[] = {DPair(0,0), DPair(0,10), DPair(10,10), DPair(10,0)};\n\tint n = sizeof(p)/sizeof(DPair);\n\tfor (int i=0; i < n; i++) {\n\t\trecorder.setX(p[i].x());\n\t\trecorder.setY(p[i].y());\n\t\thandler.processSpecial(string(\"point \")+XMLString(i));\n\t}\n\tEXPECT_EQ(recorder.getPageXML(), \"<g id='page1'/>\");\n\thandler.processSpecial(\"linewidth 2bp\");\n\tfor (int i=0; i < n; i++)\n\t\thandler.processSpecial(string(\"line \")+XMLString(i)+\", \"+XMLString((i+1)%n));\n\tEXPECT_EQ(recorder.getPageXML(),\n\t\t\"<g id='page1'>\\n\"\n\t\t\"<line x1='0' y1='0' x2='10' y2='0' stroke-width='2' stroke='#000'/>\\n\"\n\t\t\"<line x1='10' y1='0' x2='10' y2='0' stroke-width='2' stroke='#000'/>\\n\"\n\t\t\"<line x1='10' y1='0' x2='0' y2='0' stroke-width='2' stroke='#000'/>\\n\"\n\t\t\"<line x1='0' y1='0' x2='0' y2='0' stroke-width='2' stroke='#000'/>\\n\"\n\t\t\"</g>\"\n\t);\n}\n\n\nTEST_F(EmSpecialTest, lines2) {\n\tDPair p[] = {DPair(0,0), DPair(0,10), DPair(10,10), DPair(10,0)};\n\tint n = sizeof(p)/sizeof(DPair);\n\thandler.processSpecial(\"linewidth 2bp\");\n\t// define lines prior to the points\n\tfor (int i=0; i < n; i++)\n\t\thandler.processSpecial(string(\"line \")+XMLString(i)+\", \"+XMLString((i+1)%n));\n\t// define points\n\tfor (int i=0; i < n; i++) {\n\t\trecorder.setX(p[i].x());\n\t\trecorder.setY(p[i].y());\n\t\thandler.processSpecial(string(\"point \")+XMLString(i));\n\t}\n\thandler.finishPage();\n\tEXPECT_EQ(recorder.getPageXML(),\n\t\t\"<g id='page1'>\\n\"\n\t\t\"<line x1='0' y1='0' x2='10' y2='0' stroke-width='2' stroke='#000'/>\\n\"\n\t\t\"<line x1='10' y1='0' x2='10' y2='0' stroke-width='2' stroke='#000'/>\\n\"\n\t\t\"<line x1='10' y1='0' x2='0' y2='0' stroke-width='2' stroke='#000'/>\\n\"\n\t\t\"<line x1='0' y1='0' x2='0' y2='0' stroke-width='2' stroke='#000'/>\\n\"\n\t\t\"</g>\"\n\t);\n}\n\n\nTEST_F(EmSpecialTest, pline) {\n\thandler.processSpecial(\"point 1, 10, 10\");\n\thandler.processSpecial(\"point 2, 100, 100\");\n\thandler.processSpecial(\"line 1, 2, 10bp\");\n\tEXPECT_EQ(recorder.getPageXML(), \"<g id='page1'>\\n<line x1='10' y1='10' x2='100' y2='100' stroke-width='10' stroke='#000'/>\\n</g>\");\n}\n\n\nTEST_F(EmSpecialTest, vline) {\n\thandler.processSpecial(\"point 1, 10, 10\");\n\thandler.processSpecial(\"point 2, 100, 100\");\n\thandler.processSpecial(\"line 1v, 2v, 10bp\");  // cut line ends vertically\n\tEXPECT_EQ(recorder.getPageXML(), \"<g id='page1'>\\n<polygon points='10 17.07 10 2.93 100 92.93 100 107.07'/>\\n</g>\");\n}\n\n\nTEST_F(EmSpecialTest, hline) {\n\thandler.processSpecial(\"point 1, 10, 10\");\n\thandler.processSpecial(\"point 2, 100, 100\");\n\thandler.processSpecial(\"line 1h, 2h, 10bp\");  // cut line ends horizontally\n\tEXPECT_EQ(recorder.getPageXML(), \"<g id='page1'>\\n<polygon points='2.93 10 17.07 10 107.07 100 92.93 100'/>\\n</g>\");\n}\n\n\nTEST_F(EmSpecialTest, hvline) {\n\thandler.processSpecial(\"point 1, 10, 10\");\n\thandler.processSpecial(\"point 2, 100, 100\");\n\thandler.processSpecial(\"line 1h, 2v, 10bp\");  // cut line ends horizontally\n\tEXPECT_EQ(recorder.getPageXML(), \"<g id='page1'>\\n<polygon points='2.93 10 17.07 10 100 92.93 100 107.07'/>\\n</g>\");\n\n\trecorder.clear();\n\trecorder.setFillColor(Color(0.0, 0.0, 1.0));\n\thandler.processSpecial(\"point 1, 10, 10\");\n\thandler.processSpecial(\"point 2, 100, 100\");\n\thandler.processSpecial(\"line 1v, 2h, 10bp\");  // cut line ends horizontally\n\tEXPECT_EQ(recorder.getPageXML(), \"<g id='page1'>\\n<polygon points='10 17.07 10 2.93 107.07 100 92.93 100' fill='#00f'/>\\n</g>\");\n}\n\n\nTEST_F(EmSpecialTest, lineto) {\n\tDPair p[] = {DPair(0,0), DPair(0,10), DPair(10,10), DPair(10,0)};\n\tint n = sizeof(p)/sizeof(DPair);\n\trecorder.setStrokeColor(Color(1.0, 0.0, 0.0));\n\tfor (int i=0; i <= n; i++) {\n\t\trecorder.setX(p[i%n].x());\n\t\trecorder.setY(p[i%n].y());\n\t\thandler.processSpecial(\"linewidth \"+XMLString(2*i)+\"bp\");\n\t\thandler.processSpecial(i == 0 ? \"moveto\" : \"lineto\");\n\t}\n\tEXPECT_EQ(recorder.getPageXML(),\n\t\t\"<g id='page1'>\\n\"\n\t\t\"<line x1='0' y1='0' x2='10' y2='0' stroke-width='2' stroke='#f00'/>\\n\"\n\t\t\"<line x1='10' y1='0' x2='10' y2='0' stroke-width='4' stroke='#f00'/>\\n\"\n\t\t\"<line x1='10' y1='0' x2='0' y2='0' stroke-width='6' stroke='#f00'/>\\n\"\n\t\t\"<line x1='0' y1='0' x2='0' y2='0' stroke-width='8' stroke='#f00'/>\\n\"\n\t\t\"</g>\"\n\t);\n}\n\n"
  },
  {
    "path": "tests/FileFinderTest.cpp",
    "content": "/*************************************************************************\n** FileFinderTest.cpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <fstream>\n#include \"FileFinder.hpp\"\n#include \"testutil.hpp\"\n\nusing std::ifstream;\n\n\nTEST(FileFinderTest, find_base_file) {\n\tconst char *path = FileFinder::instance().lookup(\"FileFinderTest.cpp\");\n\tEXPECT_TRUE(path);\n\tpath = FileFinder::instance().lookup(\"Does-not-exist\");\n\tEXPECT_FALSE(path);\n\tpath = FileFinder::instance().lookup(\"frktest.dvi\");\n\tEXPECT_TRUE(path);\n\tpath = FileFinder::instance().lookup(\"cmr10.tfm\");\n\tEXPECT_TRUE(path);\n\tifstream ifs(path);\n\tEXPECT_TRUE(bool(ifs)) << \"path=\" << path;\n}\n\n\nTEST(FileFinderTest, find_mapped_file) {\n\t// mapped base tfm file => should be resolved by kpathsea\n\t// circle10.tfm is usually mapped to lcircle.tfm\n\tif (const char *path = FileFinder::instance().lookup(\"circle10.tfm\")) {\n\t\tEXPECT_TRUE(path);\n\t\tifstream ifs(path);\n\t\tEXPECT_TRUE(bool(ifs));\n\t}\n\telse\n\t\tWARNING(\"circle10.tfm not found\");\n\n\t// mapped lm font => should be resolved using dvisvgm's FontMap\n\t// cork-lmr10 is usually mapped to lmr10\n\tbool have_lmodern = FileFinder::instance().lookup(\"lmodern.sty\");\n\tif (have_lmodern) {  // package lmodern installed?\n\t\tif (const char *path = FileFinder::instance().lookup(\"cork-lmr10.pfb\")) {\n\t\t\tifstream ifs(path);\n\t\t\tEXPECT_TRUE(bool(ifs));\n\t\t}\n\t\telse\n\t\t\tWARNING(\"cork-lmr10.pfb not found\");\n\t}\n\telse\n\t\tWARNING(\"lmodern.sty not found\");\n}\n\n\nTEST(FileFinderTest, mktexmf) {\n\t// ensure availability of ec font => call mktexmf if necessary\n\tif (const char *path = FileFinder::instance().lookup(\"ecrm2000.mf\")) {\n\t\tifstream ifs(path);\n\t\tEXPECT_TRUE(bool(ifs));\n\t}\n}\n\n\nTEST(FileFinderTest, find_unavailable_file) {\n\tconst char *path = FileFinder::instance().lookup(\"not-available.xyz\");\n\tEXPECT_FALSE(path);\n}\n"
  },
  {
    "path": "tests/FilePathTest.cpp",
    "content": "/*************************************************************************\n** FilePathTest.cpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <string>\n#include \"FilePath.hpp\"\n#include \"FileSystem.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\nusing namespace std;\n\n\nTEST(FilePathTest, empty) {\n\tFilePath path;\n\tASSERT_TRUE(path.empty());\n\tpath.set(\"/a/b/c/d\", FilePath::PT_DIR, \"/\");\n\tASSERT_FALSE(path.empty());\n\tASSERT_EQ(path.absolute(), \"/a/b/c/d\");\n}\n\n\nTEST(FilePathTest, dir1) {\n\tFilePath fp(\"a/b/c/d\", FilePath::PT_DIR, \"/\");\n\tASSERT_EQ(fp.absolute(), \"/a/b/c/d\");\n\tASSERT_EQ(fp.relative(\"/\"), \"a/b/c/d\");\n\tASSERT_EQ(fp.relative(\"/a/b\"), \"c/d\");\n\tASSERT_EQ(fp.relative(\"/a/b/c\"), \"d\");\n\tASSERT_EQ(fp.relative(\"/a/b/c/d\"), \".\");\n\tASSERT_EQ(fp.relative(\"/a/b/x\"), \"../c/d\");\n\tASSERT_EQ(fp.relative(\"/a/b/x/y\"), \"../../c/d\");\n}\n\n\nTEST(FilePathTest, dir2) {\n\tFilePath fp(\"a/b/c/d\", FilePath::PT_DIR, \"/x/y\");\n\tASSERT_EQ(fp.absolute(), \"/x/y/a/b/c/d\");\n\tASSERT_EQ(fp.relative(\"/\"), \"x/y/a/b/c/d\");\n\tASSERT_EQ(fp.relative(\"/x/y/a/b\"), \"c/d\");\n\tASSERT_EQ(fp.relative(\"/x/y/a/b/c\"), \"d\");\n\tASSERT_EQ(fp.relative(\"/x/y/a/b/c/d\"), \".\");\n\tASSERT_EQ(fp.relative(\"/x/y/a/b/x\"), \"../c/d\");\n\tASSERT_EQ(fp.relative(\"/x/y/a/b/x/y\"), \"../../c/d\");\n}\n\n\nTEST(FilePathTest, file1) {\n\tFilePath fp(\"a/b/c/d/f.ext\", FilePath::PT_FILE, \"/\");\n\tASSERT_EQ(fp.absolute(), \"/a/b/c/d/f.ext\");\n\tASSERT_EQ(fp.relative(\"/\"), \"a/b/c/d/f.ext\");\n\tASSERT_EQ(fp.relative(\"/a/b\"), \"c/d/f.ext\");\n\tASSERT_EQ(fp.relative(\"/a/b/c\"), \"d/f.ext\");\n\tASSERT_EQ(fp.relative(\"/a/b/c/d\"), \"f.ext\");\n\tASSERT_EQ(fp.relative(\"/a/b/x\"), \"../c/d/f.ext\");\n\tASSERT_EQ(fp.relative(\"/a/b/x/y\"), \"../../c/d/f.ext\");\n\tASSERT_EQ(fp.basename(), \"f\");\n\tASSERT_EQ(fp.suffix(), \"ext\");\n\tfp.suffix(\"new\");\n\tASSERT_EQ(fp.suffix(), \"new\");\n\tASSERT_EQ(fp.relative(\"/a/b/x/y\"), \"../../c/d/f.new\");\n\tfp.suffix(\"\");\n\tASSERT_EQ(fp.suffix(), \"\");\n\tASSERT_EQ(fp.relative(\"/a/b/x/y\"), \"../../c/d/f\");\n}\n\n\nTEST(FilePathTest, file2) {\n\tFilePath fp(\"/f.ext\", FilePath::PT_FILE, \"/\");\n\tASSERT_EQ(fp.absolute(), \"/f.ext\");\n\tASSERT_EQ(fp.relative(\"/a/b\"), \"../../f.ext\");\n}\n\n\nTEST(FilePathTest, file3) {\n\tFilePath fp(\"/f.ext\", FilePath::PT_FILE, \"/x/y\");\n\tASSERT_EQ(fp.absolute(), \"/f.ext\");\n\tASSERT_EQ(fp.relative(\"/a/b\"), \"../../f.ext\");\n}\n\n\nTEST(FilePathTest, autodetect) {\n\tFileSystem::chdir(SRCDIR);\n\tFilePath fp1(\"FilePathTest.cpp\");\n\tASSERT_TRUE(fp1.isFile());\n\tASSERT_FALSE(fp1.empty());\n\tstring cwd = FileSystem::getcwd();\n#ifdef _WIN32\n\tif (cwd.length() >=2 && isalpha(cwd[0]) && cwd[1] == ':')\n\t\tcwd[0] = tolower(cwd[0]);\n#endif\n\tASSERT_EQ(fp1.absolute(), cwd + \"/FilePathTest.cpp\") << \"fp1=\" << fp1.absolute();\n\n\tFilePath fp2(\"\");\n\tASSERT_FALSE(fp2.isFile());\n\tASSERT_FALSE(fp2.empty());\n\tASSERT_EQ(fp2.absolute(), cwd);\n}\n"
  },
  {
    "path": "tests/FileSystemTest.cpp",
    "content": "/*************************************************************************\n** FileSystemTest.cpp                                                   **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <fstream>\n#include \"FileSystem.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\nusing namespace std;\n\n\nTEST(FileSystemTest, exists) {\n\tEXPECT_TRUE(FileSystem::exists(SRCDIR\"/FileSystemTest.cpp\"));\n\tEXPECT_FALSE(FileSystem::exists(SRCDIR\"/FileSystemTest.cxx\"));\n}\n\n\nTEST(FileSystemTest, filetype) {\n\tEXPECT_TRUE(FileSystem::isFile(SRCDIR\"/FileSystemTest.cpp\"));\n\tEXPECT_FALSE(FileSystem::isDirectory(SRCDIR\"/FileSystemTest.cpp\"));\n\tEXPECT_TRUE(FileSystem::isDirectory(\"../tests\"));\n\tEXPECT_FALSE(FileSystem::isFile(\"../tests\"));\n}\n\n\nTEST(FileSystemTest, remove) {\n\tconst char *tmpfile = \"out.tmp\";\n\tofstream ofs(tmpfile);\n\tofs << \"FileSystemTest::remove\\n\";\n\tofs.close();\n\tEXPECT_TRUE(FileSystem::exists(tmpfile));\n\tFileSystem::remove(tmpfile);\n\tEXPECT_FALSE(FileSystem::exists(tmpfile));\n}\n\n\nTEST(FileSystemTest, rename) {\n\tconst char *tmpfile1 = \"out.tmp\";\n\tconst char *tmpfile2 = \"out-new.tmp\";\n\tofstream ofs(tmpfile1);\n\tofs << \"FileSystemTest::remove\\n\";\n\tofs.close();\n\tEXPECT_TRUE(FileSystem::exists(tmpfile1));\n\tFileSystem::rename(tmpfile1, tmpfile2);\n#ifndef __WIN32__\n\tEXPECT_FALSE(FileSystem::exists(tmpfile1));\n#endif\n\tEXPECT_TRUE(FileSystem::exists(tmpfile2));\n\tFileSystem::remove(tmpfile2);\n\tEXPECT_FALSE(FileSystem::exists(tmpfile2));\n}\n\n\nTEST(FileSystemTest, filesize) {\n\tconst char *tmpfile = \"out.tmp\";\n\tofstream ofs(tmpfile, ios::binary);\n\tfor (int i=0; i < 123; ++i)\n\t\tofs.put(i);\n\tofs.close();\n\tEXPECT_EQ(FileSystem::filesize(tmpfile), 123u);\n\tFileSystem::remove(tmpfile);\n}\n\n\nTEST(FileSystemTest, copy) {\n\tconst char *tmpfile1 = \"out.tmp\";\n\tconst char *tmpfile2 = \"out-new.tmp\";\n\tofstream ofs(tmpfile1);\n\tofs << \"FileSystemTest::copy\\n\";\n\tofs.close();\n\tFileSystem::copy(tmpfile1, tmpfile2);\n\tifstream ifs1(tmpfile1);\n\tifstream ifs2(tmpfile2);\n\tEXPECT_TRUE(ifs1 && ifs2);\n\twhile (!ifs1.eof()) {\n\t\tEXPECT_EQ(ifs1.get(), ifs2.get());\n\t}\n\tEXPECT_TRUE(ifs2.eof());\n\tifs1.close();\n\tifs2.close();\n\tFileSystem::remove(tmpfile1);\n\tFileSystem::remove(tmpfile2);\n}\n\n\nTEST(FileSystemTest, move) {\n\tconst char *tmpfile1 = \"out.tmp\";\n\tconst char *tmpfile2 = \"out-new.tmp\";\n\tofstream ofs(tmpfile1);\n\tconst char *str = \"FileSystemTest::copy\\n\";\n\tofs << str;\n\tofs.close();\n\tFileSystem::copy(tmpfile1, tmpfile2, true);\n\tifstream ifs1(tmpfile1);\n\tifstream ifs2(tmpfile2);\n\tEXPECT_TRUE(!ifs1 && ifs2);\n\twhile (*str) {\n\t\tEXPECT_EQ(*str++, ifs2.get());\n\t}\n\tifs2.get();\n\tEXPECT_TRUE(ifs2.eof());\n\tifs2.close();\n\tFileSystem::remove(tmpfile2);\n}\n"
  },
  {
    "path": "tests/FontCacheTest.cpp",
    "content": "/*************************************************************************\n** FontCacheTest.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <fstream>\n#include <sstream>\n#include \"FileSystem.hpp\"\n#include \"FontCache.hpp\"\n\n#ifndef BUILDDIR\n#define BUILDDIR \".\"\n#endif\n\nusing namespace std;\n\nclass LocalCache {\n\tpublic:\n\t\tLocalCache (const string &cachedir)\n\t\t\t: _cachedir(cachedir),\n\t\t\t  _created(!FileSystem::exists(cachedir) && FileSystem::mkdir(cachedir))\n\t\t{\n\t\t}\n\n\t\t~LocalCache () {\n\t\t\tif (_created)\n\t\t\t\tFileSystem::rmdir(_cachedir);\n\t\t}\n\n\t\tstring cachedir () const {return _cachedir;}\n\n\tprivate:\n\t\tstring _cachedir;\n\t\tbool _created;\n};\n\n\nstatic LocalCache localCache(BUILDDIR\"/data\");\n\n\nclass FontCacheTest : public testing::Test {\n\tprotected:\n\t\tFontCacheTest () : testing::Test(), cachedir(localCache.cachedir()) {\n\t\t\tglyph1.moveto(0, 0);\n\t\t\tglyph1.lineto(10, 0);\n\t\t\tglyph1.lineto(10, 10);\n\t\t\tglyph1.lineto(0, 10);\n\t\t\tglyph1.closepath();\n\n\t\t\tglyph2.moveto(0, 0);\n\t\t\tglyph2.cubicto(10, 10, 20, 0, 50, 50);\n\t\t\tglyph2.lineto(30, 20);\n\t\t\tglyph2.quadto(20, 40, 20, 20);\n\t\t\tglyph2.closepath();\n\t\t}\n\n\t\t~FontCacheTest () override {\n\t\t\tFileSystem::remove(cachedir+\"/testfont.fgd\");\n\t\t}\n\n\t\tGlyph glyph1, glyph2;\n\t\tFontCache cache;\n\t\tstring cachedir;\n};\n\n\nstatic string toSVG (const Glyph &glyph) {\n\tostringstream oss;\n\tglyph.writeSVG(oss, false);\n\treturn oss.str();\n}\n\n\nTEST_F(FontCacheTest, glyph) {\n\tEXPECT_EQ(toSVG(glyph1), \"M0 0H10V10H0Z\");\n\tEXPECT_EQ(toSVG(glyph2), \"M0 0C10 10 20 0 50 50L30 20Q20 40 20 20Z\");\n\tcache.setGlyph(1, glyph1);\n\tcache.setGlyph(10, glyph2);\n\tASSERT_NE(cache.getGlyph(1), nullptr);\n\tASSERT_EQ(cache.getGlyph(2), nullptr);\n\tASSERT_NE(cache.getGlyph(10), nullptr);\n\tASSERT_EQ(*cache.getGlyph(1), glyph1);\n\tASSERT_EQ(*cache.getGlyph(10), glyph2);\n}\n\n\nTEST_F(FontCacheTest, write1) {\n\tcache.setGlyph(1, glyph1);\n\tASSERT_TRUE(cache.fontname().empty());\n\tASSERT_FALSE(cache.write(cachedir));\n}\n\n\nTEST_F(FontCacheTest, write2) {\n\tcache.setGlyph(1, glyph1);\n\tASSERT_TRUE(FileSystem::exists(cachedir));\n\tASSERT_TRUE(cache.write(\"testfont\", cachedir));\n\tcache.setGlyph(10, glyph2);\n\tEXPECT_TRUE(cache.write(\"testfont\", cachedir));\n\tEXPECT_TRUE(cache.fontname().empty());\n}\n\n\nTEST_F(FontCacheTest, read) {\n\tcache.setGlyph(1, glyph1);\n\tcache.setGlyph(10, glyph2);\n\tASSERT_TRUE(cache.write(\"testfont\", cachedir));\n\t// clear cache object\n\tcache.clear();\n\tEXPECT_EQ(cache.getGlyph(1), nullptr);\n\tEXPECT_EQ(cache.getGlyph(2), nullptr);\n\tEXPECT_EQ(cache.getGlyph(10), nullptr);\n\t// read glyph data from cache file\n\tASSERT_TRUE(cache.read(\"testfont\", cachedir));\n\tEXPECT_EQ(cache.fontname(), \"testfont\");\n\tASSERT_NE(cache.getGlyph(1), nullptr);\n\tEXPECT_EQ(cache.getGlyph(2), nullptr);\n\tASSERT_NE(cache.getGlyph(10), nullptr);\n\tEXPECT_EQ(*cache.getGlyph(1), glyph1);\n\tEXPECT_EQ(*cache.getGlyph(10), glyph2);\n}\n\n\nTEST_F(FontCacheTest, fontinfo1) {\n\tostringstream oss;\n\tcache.clear();\n\tFileSystem::remove(cachedir+\"/testfont.fgd\");\n\tcache.fontinfo(cachedir, oss);\n\tASSERT_EQ(oss.str(), \"cache is empty\\n\");\n\n\t// check removal of invalid cache files\n\tofstream cachefile(cachedir+\"/invalid.fgd\");\n\tcachefile << \"invalid cache file\";\n\tcachefile.close();\n\tASSERT_TRUE(FileSystem::exists(cachedir+\"/invalid.fgd\"));\n\toss.str(\"\");\n\tcache.fontinfo(cachedir, oss, true);\n\tASSERT_EQ(oss.str(),\n\t\t\"cache is empty\\n\"\n\t\t\"invalid cache file invalid.fgd removed\\n\"\n\t);\n\tASSERT_FALSE(FileSystem::exists(cachedir+\"/invalid.fgd\"));\n}\n\n\nTEST_F(FontCacheTest, fontinfo2) {\n\tcache.setGlyph(1, glyph1);\n\tcache.setGlyph(10, glyph2);\n\tASSERT_TRUE(cache.write(\"testfont\", cachedir));\n\n\tostringstream oss;\n\tcache.fontinfo(cachedir, oss);\n\tASSERT_EQ(oss.str(),\n\t\t\"cache format version 5\\n\"\n\t\t\"testfont      2 glyphs        10 cmds          58 bytes  hash:3cb32ab6\\n\"\n\t);\n}\n"
  },
  {
    "path": "tests/FontManagerTest.cpp",
    "content": "/*************************************************************************\n** FontManagerTest.cpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"Font.hpp\"\n#include \"FontManager.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\n\nclass FontManagerTest : public ::testing::Test {\n\tpublic:\n\t\tFontManagerTest () : fm(FontManager::instance()) {\n\t\t\tfm.registerFont(10, \"cmr10\", 1274110073, 10, 10);\n\t\t\tfm.registerFont(11, \"cmr10\", 1274110073, 10, 12);\n\t\t\tfm.registerFont( 9, \"cmr10\", 1274110073, 10, 14);\n\t\t\tfm.registerFont(12, SRCDIR \"/data/lmmono12-regular.otf\", 0, 12, _fontStyle, Color(.0, .0, 1.0));\n\t\t}\n\n\tprotected:\n\t\tFontManager &fm;\n\t\tFontStyle _fontStyle;\n};\n\n\nTEST_F(FontManagerTest, fontID1) {\n\tEXPECT_EQ(fm.fontID(10), 0);\n\tEXPECT_EQ(fm.fontID(11), 1);\n\tEXPECT_EQ(fm.fontID(9), 2);\n\tEXPECT_EQ(fm.fontID(12), 3);\n\tEXPECT_EQ(fm.fontID(1), -1);\n}\n\n\nTEST_F(FontManagerTest, fontID2) {\n\tEXPECT_EQ(fm.fontID(\"cmr10\"), 0);\n\tEXPECT_EQ(fm.fontID(\"nf0\"), 3);\n}\n\n\nTEST_F(FontManagerTest, fontID3) {\n\tEXPECT_EQ(fm.fontID(\"nf0\", 12), 3);\n}\n\n\nTEST_F(FontManagerTest, fontID4) {\n\tEXPECT_EQ(fm.fontID(fm.getFontById(0)), 0);\n\tEXPECT_EQ(fm.fontID(fm.getFontById(1)), 1);\n\tEXPECT_EQ(fm.fontID(fm.getFontById(2)), 2);\n\tEXPECT_EQ(fm.fontID(fm.getFontById(3)), 3);\n}\n\n\nTEST_F(FontManagerTest, fontnum) {\n\tEXPECT_EQ(fm.fontnum(0), 10);\n\tEXPECT_EQ(fm.fontnum(1), 11);\n\tEXPECT_EQ(fm.fontnum(2),  9);\n\tEXPECT_EQ(fm.fontnum(3), 12);\n}\n\n\nTEST_F(FontManagerTest, getFont) {\n\tconst Font *f1 = fm.getFont(10);\n\tEXPECT_TRUE(f1);\n\tEXPECT_EQ(f1->name(), \"cmr10\");\n\tEXPECT_TRUE(dynamic_cast<const PhysicalFontImpl*>(f1));\n\tEXPECT_EQ(f1->color(), Color::BLACK);\n\n\tconst Font *f2 = fm.getFont(11);\n\tEXPECT_TRUE(f2);\n\tEXPECT_NE(f1, f2);\n\tEXPECT_EQ(f2->name(), \"cmr10\");\n\tEXPECT_TRUE(dynamic_cast<const PhysicalFontRef*>(f2));\n\tEXPECT_EQ(f2->uniqueFont(), f1);\n\tEXPECT_EQ(f2->color(), Color::BLACK);\n\n\tconst Font *f3 = fm.getFont(12);\n\tEXPECT_TRUE(f3);\n\tEXPECT_NE(f2, f3);\n\tEXPECT_EQ(f3->name(), \"nf0\");\n\tEXPECT_TRUE(dynamic_cast<const NativeFontImpl*>(f3));\n\tEXPECT_TRUE(dynamic_cast<const PhysicalFont*>(f3));\n\tEXPECT_EQ(f3->uniqueFont(), f3);\n\tEXPECT_EQ(f3->color(), Color(.0, .0, 1.0));\n}\n\n\nTEST_F(FontManagerTest, font_cast) {\n\tconst Font *f1 = fm.getFont(10);\n\tEXPECT_TRUE(f1);\n\tEXPECT_EQ(font_cast<const PhysicalFont*>(f1), f1);\n\tEXPECT_EQ(font_cast<const NativeFont*>(f1), nullptr);\n\tEXPECT_EQ(font_cast<const VirtualFont*>(f1), nullptr);\n\n\tconst Font *f2 = fm.getFont(11);\n\tEXPECT_TRUE(f2);\n\tEXPECT_EQ(font_cast<const PhysicalFont*>(f2), f2);\n\tEXPECT_EQ(font_cast<const NativeFont*>(f1), nullptr);\n\tEXPECT_EQ(font_cast<const VirtualFont*>(f1), nullptr);\n\n\tconst Font *f3 = fm.getFont(12);\n\tEXPECT_TRUE(f3);\n\tEXPECT_EQ(font_cast<const PhysicalFont*>(f3), f3);\n\tEXPECT_EQ(font_cast<const NativeFont*>(f3), f3);\n\tEXPECT_EQ(font_cast<const VirtualFont*>(f3), nullptr);\n}\n\n\nTEST_F(FontManagerTest, getFontById) {\n\tEXPECT_EQ(fm.getFont(10), fm.getFontById(0));\n\tEXPECT_EQ(fm.getFont(\"cmr10\"), fm.getFontById(0));\n\tEXPECT_EQ(fm.getFont(12), fm.getFontById(3));\n}\n"
  },
  {
    "path": "tests/FontMapTest.cpp",
    "content": "/*************************************************************************\n** FontMapTest.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <fstream>\n#include \"FontMap.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\nusing namespace std;\n\n\nTEST(FontMapTest, pdf_map) {\n\tstring fname = string(SRCDIR)+\"/data/dvipdfm_test.map\";\n\tFontMap &fm = FontMap::instance();\n\tfm.read(fname);\n\tconst FontMap::Entry *entry;\n\tASSERT_NE(entry = fm.lookup(\"MyriadPro-Bold-8t\"), nullptr);\n\tEXPECT_EQ(entry->fontname, \"MyriadPro-Bold\");\n\tEXPECT_EQ(entry->encname, \"my-lf-t1\");\n\tASSERT_NE(entry = fm.lookup(\"cmbsy8\"), nullptr);\n\tEXPECT_EQ(entry->fontname, \"cmbsy7\");\n\tEXPECT_EQ(entry->encname, \"\");\n\n\t// entry without mapped name\n\tEXPECT_EQ(fm.lookup(\"msam10\"), nullptr);\n\tEXPECT_EQ(fm.lookup(\"msbm10\"), nullptr);\n\tEXPECT_EQ(fm.lookup(\"msbm10\"), nullptr);\n\tEXPECT_EQ(fm.lookup(\"i don't exist\"), nullptr);\n}\n\n\nTEST(FontMapTest, ps_map) {\n\tstring fname = string(SRCDIR)+\"/data/dvips_test.map\";\n\tFontMap &fm = FontMap::instance();\n\tfm.read(fname);\n\tconst FontMap::Entry *entry;\n\tASSERT_NE(entry = fm.lookup(\"MyriadPro-Bold-8t\"), nullptr);\n\tEXPECT_EQ(entry->fontname, \"MyriadPro-Bold\");\n\tEXPECT_EQ(entry->encname, \"my-lf-t1\");\n\tASSERT_NE(entry = fm.lookup(\"cmbsy8\"), nullptr);\n\tEXPECT_EQ(entry->fontname, \"cmbsy7\");\n\tEXPECT_EQ(entry->encname, \"\");\n\n\t// entry without mapped name\n\tEXPECT_EQ(fm.lookup(\"msam10\"), nullptr);\n\tEXPECT_EQ(fm.lookup(\"msbm10\"), nullptr);\n\tEXPECT_EQ(fm.lookup(\"msbm10\"), nullptr);\n\tEXPECT_EQ(fm.lookup(\"i don't exist\"), nullptr);\n}\n"
  },
  {
    "path": "tests/GFGlyphTracerTest.cpp",
    "content": "/*************************************************************************\n** GFGlyphTracerTest.cpp                                                **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <string>\n#include \"GFGlyphTracer.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\nusing namespace std;\n\nclass Callback : public GFGlyphTracer::Callback {\n\tpublic:\n\t\tvoid beginChar (uint8_t c) {_oss << \"begin(\" << int(c) << \")\";}\n\t\tvoid endChar (uint8_t c)   {_oss << \"end(\" << int(c) << \")\";}\n\t\tvoid emptyChar (uint8_t c) {_oss << \"empty(\" << int(c) << \")\";}\n\t\tstring getLog () const   {return _oss.str();}\n\t\tvoid reset ()            {_oss.str(\"\");}\n\n\tprivate:\n\t\tostringstream _oss;\n};\n\n\n// Returns an SVG path string with scaled values.\nstatic string scaled_pathstr (const Glyph &glyph) {\n\tostringstream oss;\n\tglyph.writeSVG(oss, false);\n\tistringstream iss(oss.str());\n\tostringstream resultstream;\n\tXMLString::DECIMAL_PLACES = 1;\n\twhile (iss.peek() > 0) {\n\t\tif (isalpha(iss.peek()) || isspace(iss.peek()))\n\t\t\tresultstream << char(iss.get());\n\t\telse {\n\t\t\tint num;\n\t\t\tiss >> num;\n\t\t\tresultstream << XMLString(double(num)/10000);\n\t\t}\n\t}\n\treturn resultstream.str();\n}\n\n\nTEST(GFGlyphTracerTest, executeChar) {\n\tstring gfname = string(SRCDIR)+\"/data/cmr10.600gf\";\n\tCallback callback;\n\tGFGlyphTracer tracer(gfname, 10000, &callback);\n\tGlyph glyph;\n\ttracer.setGlyph(glyph);\n\tEXPECT_FALSE(tracer.executeChar(128));\n\tEXPECT_EQ(callback.getLog(), \"begin(128)empty(128)\");\n\n\tcallback.reset();\n\tEXPECT_TRUE(tracer.executeChar('g'));\n\tostringstream oss;\n\tglyph.closeOpenSubPaths();\n\tEXPECT_EQ(scaled_pathstr(glyph),\n\t\t\"M3.5 4.3C3.2 4.1 3.1 4.1 2.9 4.3C1.9 4.8 .6 4 .6 3C.6 2.8 .7 2.4 .8 2.3C.9 2.1 1 2 .9 1.7\"\n\t\t\"C.7 1.3 .7 .8 .9 .5C1 .3 1 .3 .6-.1C0-.7 .1-1.4 1.1-1.9C1.7-2.2 3.3-2.2 3.8-1.9\"\n\t\t\"C4.4-1.6 4.7-1.2 4.7-.8C4.7 .2 3.9 .7 2.4 .7C1.3 .7 1 .9 1.1 1.4C1.1 1.7 1.2 1.7 1.4 1.7\"\n\t\t\"C1.5 1.7 1.8 1.6 2 1.6C3.2 1.4 4.2 2.8 3.5 3.7C3.4 3.9 3.4 4 3.6 4.1C4 4.4 4.3 4.4 4.2 4.1\"\n\t\t\"C4.2 3.9 4.4 3.7 4.6 3.8C4.7 3.8 4.8 4 4.8 4.1C4.8 4.6 4.2 4.7 3.5 4.3Z\"\n\t\t\"M2.7 3.9C2.9 3.8 2.9 3.5 2.9 3C2.9 2.2 2.7 1.8 2.2 1.8C1.6 1.8 1.4 2.2 1.4 3C1.4 3.8 1.6 4.2 2.2 4.2C2.3 4.2 2.6 4.1 2.7 3.9Z\"\n\t\t\"M3.5-.1C4-.2 4.2-.7 4-1.1C3.6-2 1.7-2.2 1.1-1.4C.8-1 .8-.6 1.1-.2C1.3 .1 1.4 .1 2.2 .1C2.7 .1 3.3 0 3.5-.1Z\");\n\tEXPECT_EQ(callback.getLog(), \"begin(103)end(103)\");\n\n\ttracer.reset(gfname, 1000);\n\tglyph.clear();\n\tcallback.reset();\n\tEXPECT_TRUE(tracer.executeChar('I'));\n\tglyph.closeOpenSubPaths();\n\toss.str(\"\");\n\tEXPECT_EQ(scaled_pathstr(glyph),\n\t\t\"M0 .7C0 .7 0 .6 .1 .6L.1 .6V.3V0L.1 0C0 0 0 0 0 0C0 0 .1 0 .2 0C.3 0 .3 0 .3 0\"\n\t\t\"C.3 0 .3 0 .3 0L.2 0V.3V.6L.3 .6C.3 .6 .3 .7 .3 .7C.3 .7 .3 .7 .2 .7C.1 .7 0 .7 0 .7Z\");\n\tEXPECT_EQ(callback.getLog(), \"begin(73)end(73)\");\n}\n\n\nTEST(GFGlyphTracerTest, defaultCallback) {\n\tstring gfname = string(SRCDIR)+\"/data/cmr10.600gf\";\n\tGFGlyphTracer::Callback callback;\n\tGFGlyphTracer tracer(gfname, 1000, &callback);\n\tGlyph glyph;\n\ttracer.setGlyph(glyph);\n\ttracer.closePath();\n\tEXPECT_FALSE(tracer.executeChar(128));\n\tEXPECT_TRUE(tracer.executeChar('g'));\n}\n\n\nTEST(GFGlyphTracerTest, fail) {\n\tGFGlyphTracer tracer;\n\tEXPECT_FALSE(tracer.executeChar('M'));\n\n\tGlyph glyph;\n\ttracer.setGlyph(glyph);\n\tEXPECT_THROW(tracer.executeChar('M'), GFException);\n\n\tstring gfname = string(SRCDIR)+\"/data/cmr10.600gf\";\n\ttracer.reset(gfname, 1000);\n\tEXPECT_TRUE(tracer.executeChar('M'));\n}\n"
  },
  {
    "path": "tests/GFReaderTest.cpp",
    "content": "/*************************************************************************\n** GFReaderTest.cpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <cstdlib>\n#include <fstream>\n#include <string>\n#include <vector>\n#include \"GFReader.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\nusing namespace std;\n\n\nstruct PixelActions : public Bitmap::Callback {\n\tvoid pixel (int x, int y, bool set, const Bitmap &bm) {\n\t\tif (charmap.size() == 0) {\n\t\t\tcharmap.resize(bm.height());\n\t\t\tfor (int i=0; i < bm.height(); i++)\n\t\t\t\tcharmap[i] = string(bm.width(), ' ');\n\t\t}\n\t\tEXPECT_GE(x, 0);\n\t\tEXPECT_LT(x, bm.width());\n\t\tEXPECT_GE(y, 0);\n\t\tEXPECT_LT(y, bm.height());\n\t\tcharmap[y][x] = (set ? '*' : '-');\n\t}\n\n\tvector<string> charmap;\n};\n\n\nconst char *letter_a[] = {\n\t\"-----------********--------------------\",\n\t\"--------**************-----------------\",\n\t\"------*****-------******---------------\",\n\t\"-----***------------*****--------------\",\n\t\"----*****------------******------------\",\n\t\"---*******------------******-----------\",\n\t\"---********-----------******-----------\",\n\t\"---********------------******----------\",\n\t\"---********------------******----------\",\n\t\"---********-------------******---------\",\n\t\"----******--------------******---------\",\n\t\"-----****---------------******---------\",\n\t\"------------------------******---------\",\n\t\"------------------------******---------\",\n\t\"------------------------******---------\",\n\t\"------------------------******---------\",\n\t\"-----------------*************---------\",\n\t\"-------------*****************---------\",\n\t\"----------*********-----******---------\",\n\t\"--------*******---------******---------\",\n\t\"------*******-----------******---------\",\n\t\"----********------------******---------\",\n\t\"---*******--------------******---------\",\n\t\"--********--------------******---------\",\n\t\"-********---------------******---------\",\n\t\"-*******----------------******---------\",\n\t\"-*******----------------******------**-\",\n\t\"*******-----------------******------**-\",\n\t\"*******-----------------******------**-\",\n\t\"*******-----------------******------**-\",\n\t\"*******----------------*******------**-\",\n\t\"*******----------------*******------**-\",\n\t\"********--------------********------**-\",\n\t\"-*******-------------***-*****------**-\",\n\t\"-********------------**---*****----**--\",\n\t\"--********---------****---*****----**--\",\n\t\"----*******------****------*********---\",\n\t\"------**************--------*******----\",\n\t\"---------********------------*****-----\",\n};\n\n\nconst char *letter_g[] = {\n\t\"------------------------------******---\",\n\t\"------------********--------*********--\",\n\t\"----------************----****----****-\",\n\t\"--------*****------*****-***-----*****-\",\n\t\"-------*****--------*******------*****-\",\n\t\"------*****----------*****-------*****-\",\n\t\"-----*****------------*****--------*---\",\n\t\"----******------------******-----------\",\n\t\"----******------------******-----------\",\n\t\"---******--------------******----------\",\n\t\"---******--------------******----------\",\n\t\"---******--------------******----------\",\n\t\"---******--------------******----------\",\n\t\"---******--------------******----------\",\n\t\"---******--------------******----------\",\n\t\"---******--------------******----------\",\n\t\"---******--------------******----------\",\n\t\"----******------------******-----------\",\n\t\"----******------------******-----------\",\n\t\"-----*****------------*****------------\",\n\t\"------*****----------*****-------------\",\n\t\"------******--------*****--------------\",\n\t\"------*******------*****---------------\",\n\t\"-----***--************-----------------\",\n\t\"-----**-----********-------------------\",\n\t\"----***--------------------------------\",\n\t\"----***--------------------------------\",\n\t\"----***--------------------------------\",\n\t\"----***--------------------------------\",\n\t\"----****-------------------------------\",\n\t\"----****-------------------------------\",\n\t\"----******-----------------------------\",\n\t\"-----*********************-------------\",\n\t\"-----************************----------\",\n\t\"------*************************--------\",\n\t\"-------**************************------\",\n\t\"------****************************-----\",\n\t\"----*****----------------**********----\",\n\t\"---*****--------------------********---\",\n\t\"--*****-----------------------******---\",\n\t\"-*****-------------------------*****---\",\n\t\"-*****-------------------------******--\",\n\t\"*****---------------------------*****--\",\n\t\"*****---------------------------*****--\",\n\t\"*****---------------------------*****--\",\n\t\"*****---------------------------*****--\",\n\t\"*****---------------------------*****--\",\n\t\"******-------------------------******--\",\n\t\"-*****-------------------------*****---\",\n\t\"--*****-----------------------*****----\",\n\t\"--******---------------------******----\",\n\t\"----*****-------------------*****------\",\n\t\"-----******---------------******-------\",\n\t\"-------*******---------*******---------\",\n\t\"---------*******************-----------\",\n\t\"-------------***********---------------\",\n};\n\n\nconst char *letter_M[] = {\n\t\"****************-------------------------------------****************-\",\n\t\"*****************-----------------------------------*****************-\",\n\t\"*****************-----------------------------------*****************-\",\n\t\"-------**********-----------------------------------**********--------\",\n\t\"--------**-*******---------------------------------**-*******---------\",\n\t\"--------**-*******---------------------------------**-*******---------\",\n\t\"--------**--*******-------------------------------**--*******---------\",\n\t\"--------**--*******-------------------------------**--*******---------\",\n\t\"--------**--*******-------------------------------**--*******---------\",\n\t\"--------**---*******-----------------------------**---*******---------\",\n\t\"--------**---*******-----------------------------**---*******---------\",\n\t\"--------**---*******-----------------------------**---*******---------\",\n\t\"--------**----*******---------------------------**----*******---------\",\n\t\"--------**----*******---------------------------**----*******---------\",\n\t\"--------**-----*******-------------------------**-----*******---------\",\n\t\"--------**-----*******-------------------------**-----*******---------\",\n\t\"--------**-----*******-------------------------**-----*******---------\",\n\t\"--------**------*******-----------------------**------*******---------\",\n\t\"--------**------*******-----------------------**------*******---------\",\n\t\"--------**-------*******---------------------**-------*******---------\",\n\t\"--------**-------*******---------------------**-------*******---------\",\n\t\"--------**-------*******---------------------**-------*******---------\",\n\t\"--------**--------*******-------------------**--------*******---------\",\n\t\"--------**--------*******-------------------**--------*******---------\",\n\t\"--------**--------*******-------------------**--------*******---------\",\n\t\"--------**---------*******-----------------**---------*******---------\",\n\t\"--------**---------*******-----------------**---------*******---------\",\n\t\"--------**----------*******---------------**----------*******---------\",\n\t\"--------**----------*******---------------**----------*******---------\",\n\t\"--------**----------*******---------------**----------*******---------\",\n\t\"--------**-----------*******-------------**-----------*******---------\",\n\t\"--------**-----------*******-------------**-----------*******---------\",\n\t\"--------**------------*******-----------**------------*******---------\",\n\t\"--------**------------*******-----------**------------*******---------\",\n\t\"--------**------------*******-----------**------------*******---------\",\n\t\"--------**-------------*******---------**-------------*******---------\",\n\t\"--------**-------------*******---------**-------------*******---------\",\n\t\"--------**-------------*******---------**-------------*******---------\",\n\t\"--------**--------------*******-------**--------------*******---------\",\n\t\"--------**--------------*******-------**--------------*******---------\",\n\t\"--------**---------------*******-----**---------------*******---------\",\n\t\"--------**---------------*******-----**---------------*******---------\",\n\t\"--------**---------------*******-----**---------------*******---------\",\n\t\"--------**----------------*******---**----------------*******---------\",\n\t\"--------**----------------*******---**----------------*******---------\",\n\t\"--------**-----------------*******-**-----------------*******---------\",\n\t\"--------**-----------------*******-**-----------------*******---------\",\n\t\"--------**-----------------*******-**-----------------*******---------\",\n\t\"--------**------------------********------------------*******---------\",\n\t\"--------**------------------********------------------*******---------\",\n\t\"--------**------------------********------------------*******---------\",\n\t\"-------****------------------******-------------------*******---------\",\n\t\"------******-----------------******-------------------*******---------\",\n\t\"----**********----------------****-------------------*********--------\",\n\t\"******************------------****------------***********************-\",\n\t\"******************------------****------------***********************-\",\n\t\"******************-------------**-------------***********************-\",\n};\n\n\nstatic void check_letter (const char **lettermap, const vector<string> &charmap) {\n\tfor (size_t i=0; i < charmap.size(); i++)\n\t\tASSERT_EQ(lettermap[i], charmap[charmap.size()-i-1]);\n}\n\n\nclass LoggingGFReader : public GFReader {\n\tpublic:\n\t\tLoggingGFReader (istream &is) : GFReader(is) {}\n\t\tvoid preamble (const string &str) override {_info = str;}\n\t\tstring getInfo () const {return _info;}\n\n\tprivate:\n\t\tstring _info;\n};\n\n\nTEST(GFReaderTest, preamble) {\n\tstring gf = string(SRCDIR)+\"/data/cmr10.600gf\";\n\tifstream ifs(gf, ios::binary);\n\tASSERT_TRUE(bool(ifs));\n\tLoggingGFReader gfReader(ifs);\n\tgfReader.executePreamble();\n\tASSERT_EQ(gfReader.getInfo(), \" METAFONT output 2010.06.18:1911\");\n}\n\n\nTEST(GFReaderTest, postamble) {\n\tstring gf = string(SRCDIR)+\"/data/cmr10.600gf\";\n\tifstream ifs(gf, ios::binary);\n\tASSERT_TRUE(bool(ifs));\n\tGFReader gfReader(ifs);\n\tgfReader.executePostamble();\n\tconst double bp2pt = 72.27/72.0;\n\tASSERT_DOUBLE_EQ(gfReader.getDesignSize()*bp2pt, 10);\n\tASSERT_NEAR(gfReader.getHPixelsPerPoint(), 8.333, 0.001);\n\tASSERT_NEAR(gfReader.getVPixelsPerPoint(), 8.333, 0.001);\n}\n\n\nTEST(GFReaderTest, executeChar) {\n\tstring gf = string(SRCDIR)+\"/data/cmr10.600gf\";\n\tifstream ifs(gf, ios::binary);\n\tASSERT_TRUE(bool(ifs));\n\tGFReader gfReader(ifs);\n\tPixelActions actions;\n\t{  gfReader.executeChar('a');\n\t\tASSERT_EQ(gfReader.getBitmap().width(), 39);\n\t\tASSERT_EQ(gfReader.getBitmap().height(), 39);\n\t\tSCOPED_TRACE(\"A\");\n\t\tgfReader.getBitmap().forAllPixels(actions);\n\t\tcheck_letter(letter_a, actions.charmap);\n\t}{\tactions.charmap.clear();\n\t\tgfReader.executeChar('g');\n\t\tASSERT_EQ(gfReader.getBitmap().width(), 39);\n\t\tASSERT_EQ(gfReader.getBitmap().height(), 56);\n\t\tSCOPED_TRACE(\"B\");\n\t\tgfReader.getBitmap().forAllPixels(actions);\n\t\tcheck_letter(letter_g, actions.charmap);\n\t}{\tactions.charmap.clear();\n\t\tgfReader.executeChar('M');\n\t\tASSERT_EQ(gfReader.getBitmap().width(), 70);\n\t\tASSERT_EQ(gfReader.getBitmap().height(), 57);\n\t\tSCOPED_TRACE(\"C\");\n\t\tgfReader.getBitmap().forAllPixels(actions);\n\t\tcheck_letter(letter_M, actions.charmap);\n\t}\n}\n\n\nTEST(GFReaderTest, executeAllChars) {\n\tstring gf = string(SRCDIR)+\"/data/cmr10.600gf\";\n\tifstream ifs(gf, ios::binary);\n\tASSERT_TRUE(bool(ifs));\n\tGFReader gfReader(ifs);\n\tgfReader.executeAllChars();\n\tconst double bp2pt = 72.27/72.0;\n\tASSERT_NEAR(gfReader.getCharWidth('M')*bp2pt, 0.573, 0.001);\n\tASSERT_NEAR(gfReader.getCharWidth('g')*bp2pt, 0.313, 0.001);\n}\n"
  },
  {
    "path": "tests/GhostscriptTest.cpp",
    "content": "/*************************************************************************\n** GhostscriptTest.cpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"Ghostscript.hpp\"\n\n\nTEST(GhostscriptTest, available1) {\n\tconst char *args[] = {\"test\", \"-q\", \"-dNODISPLAY\"};\n\tGhostscript gs(3, args);\n\tASSERT_TRUE(gs.available());\n}\n\n\nTEST(GhostscriptTest, available2) {\n\tGhostscript gs;\n\tASSERT_TRUE(gs.available());\n}\n\n\nTEST(GhostscriptTest, revision) {\n\tGhostscript gs;\n\tASSERT_GT(gs.revision(), 0);\n\tASSERT_FALSE(gs.revisionstr().empty());\n}\n\n\nTEST(Ghostscript, error_name) {\n\tGhostscript gs;\n\tASSERT_EQ(gs.error_name(0), (const char*)0);\n\tASSERT_STREQ(gs.error_name(-1), \"unknownerror\");\n\tASSERT_STREQ(gs.error_name(1), \"unknownerror\");\n\tASSERT_STREQ(gs.error_name(2), \"dictfull\");\n}\n"
  },
  {
    "path": "tests/GraphicsPathParserTest.cpp",
    "content": "/*************************************************************************\n** GraphicsPathParserTest.cpp                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"GraphicsPathParser.hpp\"\n\nusing namespace std;\n\nTEST(GraphicsPathParserTest, empty) {\n\tGraphicsPathParser<int> parser;\n\tauto path = parser.parse(\"\");\n\tEXPECT_TRUE(path.empty());\n\tpath = parser.parse(\"   \\n\\t \\r \");\n\tEXPECT_TRUE(path.empty());\n}\n\n\nTEST(GraphicsPathParserTest, moveto) {\n\tGraphicsPathParser<int> parser;\n\tauto path = parser.parse(\"M10 10 20 20 ,30 0 -10 10\");\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10L20 20L30 0L-10 10\");\n\toss.str(\"\");\n\tpath = parser.parse(\"m10 -10 20, 20 ,30 0 -10 10\");\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10-10L30 10H60L50 20\");\n}\n\n\nTEST(GraphicsPathParserTest, lineto) {\n\tGraphicsPathParser<int> parser;\n\tauto path = parser.parse(\"L10 10 20 20 ,30 0 -10 10\");\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"L10 10L20 20L30 0L-10 10\");\n\toss.str(\"\");\n\tpath = parser.parse(\"l10 -10 20, 20 ,30 0 -10 10\");\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"L10-10L30 10H60L50 20\");\n}\n\n\nTEST(GraphicsPathParserTest, hvlineto) {\n\tGraphicsPathParser<int> parser;\n\tauto path = parser.parse(\"H 10 20 V10 20\");\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"H10H20V10V20\");\n\toss.str(\"\");\n\tpath = parser.parse(\"h 10 20 v10 20\");\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"H10H30V10V30\");\n}\n\n\nTEST(GraphicsPathParserTest, cubicto) {\n\tGraphicsPathParser<int> parser;\n\tauto path = parser.parse(\"C 10 20 30 40 50 60 -100 -200 -300 -400 -500 -600\");\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"C10 20 30 40 50 60C-100-200-300-400-500-600\");\n\toss.str(\"\");\n\tpath = parser.parse(\"c 10 20 30 40 50 60 -100 -200 -300 -400 -500 -600\");\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"C10 20 30 40 50 60C-50-140-250-340-450-540\");\n}\n\n\nTEST(GraphicsPathParserTest, quadto) {\n\tGraphicsPathParser<int> parser;\n\tauto path = parser.parse(\"Q 10 20 30 40 -100 -200 -300 -400\");\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"Q10 20 30 40Q-100-200-300-400\");\n\toss.str(\"\");\n\tpath = parser.parse(\"q 10 20 30 40 -100 -200 -300 -400\");\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"Q10 20 30 40Q-70-160-270-360\");\n}\n\n\nTEST(GraphicsPathParserTest, scubicto) {\n\tGraphicsPathParser<int> parser;\n\tauto path = parser.parse(\"S 10 20 30 40 -100 -200 -300 -400\");\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"C0 0 10 20 30 40S-100-200-300-400\");\n\toss.str(\"\");\n\tpath = parser.parse(\"s 10 20 30 40 -100 -200 -300 -400\");\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"C0 0 10 20 30 40S-70-160-270-360\");\n}\n\n\nTEST(GraphicsPathParserTest, squadto) {\n\tGraphicsPathParser<int> parser;\n\tauto path = parser.parse(\"T 10 20 -100 -200\");\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"Q0 0 10 20T-100-200\");\n\toss.str(\"\");\n\tpath = parser.parse(\"t 10 20 -100 -200\");\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"Q0 0 10 20T-90-180\");\n}\n\n\nTEST(GraphicsPathParserTest, arcto) {\n\tGraphicsPathParser<int> parser;\n\tauto path = parser.parse(\"A 10 20 90 1 0 100 200, -10 -20 45 0 1 -100 -200\");\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"A10 20 90 1 0 100 200A10 20 45 0 1-100-200\");\n\toss.str(\"\");\n\tpath = parser.parse(\"a 10 20 90 1 0 100 200, -10 -20 45 0 1 -100 -200\");\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"A10 20 90 1 0 100 200A10 20 45 0 1 0 0\");\n}\n\n\nTEST(GraphicsPathParserTest, combined) {\n\tGraphicsPathParser<int> parser;\n\tauto path = parser.parse(\"M10 10L20 50Q 100 100 -10 -10 Z C 10 20 30 40 50 60Z\");\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10L20 50Q100 100-10-10ZC10 20 30 40 50 60Z\");\n\toss.str(\"\");\n\tpath = parser.parse(\"m10 10l20 50q 100 100 -10 -10 z c 10 20 30 40 50 60 z\");\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10L30 60Q130 160 20 50ZC20 30 40 50 60 70Z\");\n}\n\n\nTEST(GraphicsPathParserTest, floats) {\n\tGraphicsPathParser<double> parser;\n\tauto path = parser.parse(\"M10 10.1L20.2 50.3Q 100 100 -10.1 -10.2 Z C 10e-1 2e2 30 40 50 60Z\");\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10.1L20.2 50.3Q100 100-10.1-10.2ZC1 200 30 40 50 60Z\");\n\toss.str(\"\");\n\tpath = parser.parse(\"m10 10.1l20.2 50.3q 100 100 -10.1 -10.2 z c 10 20 30 40 50 60 z\");\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10.1L30.2 60.4Q130.2 160.4 20.1 50.2ZC20 30.1 40 50.1 60 70.1Z\");\n}\n\n\nTEST(GraphicsPathParserTest, error1) {\n\tGraphicsPathParser<int> parser;\n\tEXPECT_THROW(parser.parse(\"10 20\"), GraphicsPathParserException);  // missing command\n\tEXPECT_THROW(parser.parse(\"M10 \"), GraphicsPathParserException);  // missing y-coordinate\n\tEXPECT_THROW(parser.parse(\"M10 20.5\"), GraphicsPathParserException); // invalid number type\n\tEXPECT_THROW(parser.parse(\"J 10 20.5\"), GraphicsPathParserException); // unknown command\n\tEXPECT_THROW(parser.parse(\"M,10 20\"), GraphicsPathParserException); // invalid comma\n\tEXPECT_THROW(parser.parse(\"M10 20,\"), GraphicsPathParserException); // missing parameters\n\tEXPECT_THROW(parser.parse(\"A 10 20 45 2 0 100 100\"), GraphicsPathParserException); // invalid large-arc-flag\n\tEXPECT_THROW(parser.parse(\"A 10 20 45 0 5 100 100\"), GraphicsPathParserException); // invalid sweep-flag\n}\n\n\nTEST(GraphicsPathParserTest, error2) {\n\tGraphicsPathParser<double> parser;\n\tEXPECT_THROW(parser.parse(\"10 20\"), GraphicsPathParserException);  // missing command\n\tEXPECT_THROW(parser.parse(\"M\"), GraphicsPathParserException);  // missing coordinates\n\tEXPECT_THROW(parser.parse(\"M10.1 \"), GraphicsPathParserException);  // missing y-coordinate\n\tEXPECT_THROW(parser.parse(\"M 10 20..5\"), GraphicsPathParserException); // invalid double dots\n\tEXPECT_THROW(parser.parse(\"M 10 20.5.\"), GraphicsPathParserException); // invalid trailing dot\n\tEXPECT_THROW(parser.parse(\"M 10-20.1+\"), GraphicsPathParserException); // invalid trailing plus\n\tEXPECT_THROW(parser.parse(\"M.+10.20\"), GraphicsPathParserException); // invalid plus after dot\n}\n"
  },
  {
    "path": "tests/GraphicsPathTest.cpp",
    "content": "/*************************************************************************\n** GraphicsPathTest.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"GraphicsPath.hpp\"\n\nusing namespace std;\n\nTEST(GraphicsPathTest, svg) {\n\tGraphicsPath<int> path;\n\tpath.moveto(0,0);\n\tpath.lineto(10,10);\n\tpath.cubicto(20,20,30,30,40,40);\n\tpath.closepath();\n\tEXPECT_FALSE(path.empty());\n\tEXPECT_EQ(path.size(), 4u);\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M0 0L10 10C20 20 30 30 40 40Z\");\n\tpath.clear();\n\tEXPECT_TRUE(path.empty());\n}\n\n\nTEST(GraphicsPathTest, optimize) {\n\tGraphicsPath<int> path;\n\tpath.moveto(0,0);\n\tpath.lineto(10,0);\n\tpath.lineto(10,20);\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M0 0H10V20\");\n}\n\n\nTEST(GraphicsPathTest, transform) {\n\tGraphicsPath<double> path;\n\tpath.moveto(0,0);\n\tpath.lineto(1,0);\n\tpath.lineto(1,1);\n\tpath.lineto(0,1);\n\tpath.closepath();\n\tMatrix m(1);\n\tm.scale(2,2);\n\tm.translate(10, 100);\n\tm.rotate(90);\n\tpath.transform(m);\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M-100 10V12H-102V10Z\");\n}\n\n\nTEST(GraphicsPathTest, closeOpenSubPaths) {\n\tGraphicsPath<double> path;\n\tpath.moveto(0,0);\n\tpath.lineto(1,0);\n\tpath.lineto(1,1);\n\tpath.lineto(0,1);\n\tpath.moveto(10,10);\n\tpath.lineto(11,10);\n\tpath.lineto(11,11);\n\tpath.lineto(10,11);\n\tpath.closeOpenSubPaths();\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M0 0H1V1H0ZM10 10H11V11H10Z\");\n}\n\n\nTEST(GraphicsPathTest, relative1) {\n\tGraphicsPath<int> path;\n\tpath.moveto(0,0);\n\tpath.lineto(10,10);\n\tpath.lineto(10,20);\n\tpath.cubicto(20,20,30,30,40,40);\n\tpath.quadto(50, 50, 60, 60);\n\tpath.lineto(100,60);\n\tpath.closepath();\n\tostringstream oss;\n\tpath.writeSVG(oss, true);\n\tEXPECT_EQ(oss.str(), \"m0 0l10 10v10c10 0 20 10 30 20q10 10 20 20h40z\");\n}\n\n\nTEST(GraphicsPathTest, computeBBox) {\n\tGraphicsPath<int> path;\n\tpath.moveto(10,10);\n\tpath.lineto(100,10);\n\tpath.quadto(10, 100, 40, 80);\n\tpath.cubicto(5,5,30,10,90,70);\n\tpath.lineto(20,30);\n\tpath.closepath();\n\tBoundingBox bbox = path.computeBBox();\n\tEXPECT_EQ(bbox, BoundingBox(5, 5, 100, 100));\n\n\tpath.clear();\n\tpath.rect(10, 20, 30, 40);\n\tbbox = path.computeBBox();\n\tEXPECT_EQ(bbox, BoundingBox(10, 20, 30, 40));\n}\n\n\nTEST(GraphicsPathTest, removeRedundantCommands) {\n\tGraphicsPath<int> path;\n\tpath.moveto(10,10);\n\tpath.lineto(100,10);\n\tpath.quadto(10, 100, 40, 80);\n\tpath.cubicto(5,5,30,10,90,70);\n\tpath.moveto(10,10);\n\tpath.moveto(15,10);\n\tpath.moveto(20,20);\n\tpath.lineto(20,30);\n\tpath.moveto(10,10);\n\tpath.moveto(20,20);\n\tpath.removeRedundantCommands();\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10H100Q10 100 40 80C5 5 30 10 90 70M20 20V30\");\n}\n\nTEST(GraphicsPathTest, cmd_equals) {\n\tusing Point = Pair<int>;\n\tgp::MoveTo<int> m1(Point(1, 2));\n\tgp::MoveTo<int> m2(Point(1, 2));\n\tgp::MoveTo<int> m3(Point(2, 1));\n\tEXPECT_EQ(m1, m2);\n\tEXPECT_EQ(m2, m1);\n\tEXPECT_NE(m1, m3);\n\tEXPECT_NE(m3, m1);\n\tgp::LineTo<int> l1(Point(1, 2));\n\tEXPECT_NE(l1, m1);\n\tEXPECT_NE(m1, l1);\n\tgp::CubicTo<int> c1(Point(1, 2), Point(3, 4), Point(5, 6));\n\tgp::CubicTo<int> c2(Point(1, 2), Point(3, 4), Point(5, 6));\n\tgp::CubicTo<int> c3(Point(1, 2), Point(0, 4), Point(5, 6));\n\tEXPECT_EQ(c1, c2);\n\tEXPECT_EQ(c2, c1);\n\tEXPECT_NE(c1, c3);\n\tEXPECT_NE(c3, c1);\n}\n\n\nTEST(GraphicsPathTest, equals) {\n\tGraphicsPath<int> path1;\n\tEXPECT_TRUE(path1 == path1);\n\tpath1.moveto(10,10);\n\tpath1.lineto(100,10);\n\tpath1.quadto(10, 100, 40, 80);\n\tpath1.cubicto(5,5,30,10,90,70);\n\tpath1.lineto(20,30);\n\tpath1.closepath();\n\tEXPECT_TRUE(path1 == path1);\n\n\tGraphicsPath<int> path2;\n\tEXPECT_FALSE(path1 == path2);\n\tpath2.moveto(10,10);\n\tpath2.lineto(100,10);\n\tpath2.quadto(10, 100, 40, 80);\n\tpath2.cubicto(5,5,30,10,90,70);\n\tpath2.lineto(20,30);\n\tEXPECT_FALSE(path1 == path2);\n\tEXPECT_FALSE(path2 == path1);\n\tpath2.closepath();\n\tEXPECT_TRUE(path1 == path2);\n\tEXPECT_TRUE(path2 == path1);\n\n\tpath2.clear();\n\tpath2.moveto(10,10);\n\tpath2.lineto(100,10);\n\tpath2.quadto(10, 100, 40, 80);\n\tpath2.cubicto(5,5,10,10,90,70);\n\tpath2.lineto(20,30);\n\tpath2.closepath();\n\tEXPECT_FALSE(path1 == path2);\n\tEXPECT_FALSE(path2 == path1);\n}\n\n\nTEST(GraphicsPathTest, unequals) {\n\tGraphicsPath<int> path1;\n\tEXPECT_FALSE(path1 != path1);\n\tpath1.moveto(10,10);\n\tpath1.lineto(100,10);\n\tpath1.quadto(10, 100, 40, 80);\n\tpath1.cubicto(5,5,30,10,90,70);\n\tpath1.lineto(20,30);\n\tpath1.closepath();\n\tEXPECT_FALSE(path1 != path1);\n\n\tGraphicsPath<int> path2;\n\tEXPECT_TRUE(path1 != path2);\n\tpath2.moveto(10,10);\n\tpath2.lineto(100,10);\n\tpath2.quadto(10, 100, 40, 80);\n\tpath2.cubicto(5,5,30,10,90,70);\n\tpath2.lineto(20,30);\n\tEXPECT_TRUE(path1 != path2);\n\tEXPECT_TRUE(path2 != path1);\n\tpath2.closepath();\n\tEXPECT_FALSE(path1 != path2);\n\tEXPECT_FALSE(path2 != path1);\n\n\tpath2.clear();\n\tpath2.moveto(10,10);\n\tpath2.lineto(100,10);\n\tpath2.quadto(10, 100, 40, 80);\n\tpath2.cubicto(5,5,10,10,90,70);\n\tpath2.lineto(20,30);\n\tpath2.closepath();\n\tEXPECT_TRUE(path1 != path2);\n\tEXPECT_TRUE(path2 != path1);\n}\n\n\nTEST(GraphicsPathTest, approximate_arcs) {\n\tGraphicsPath<double> path;\n\tXMLString::DECIMAL_PLACES = 2;\n\tpath.moveto(10, 10);\n\tpath.lineto(20, 0);\n\tpath.arcto(30, 20, 20, 1, 1, DPair(50, 50));\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10L20 0A30 20 20 1 1 50 50\");\n\tpath.approximateArcs();\n\toss.str(\"\");\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10L20 0C25.05-7.15 34.02-8.12 42.72-2.44S58.14 14.42 59.73 25.91S57.48 46.9 50 50\");\n}\n\n\nTEST(GraphicsPathTest, smooth_quadto) {\n\tGraphicsPath<int> path;\n\tpath.moveto(10, 10);\n\tpath.quadto(DPair(30, 20), DPair(40, 10));\n\tpath.quadto(DPair(100, 30));\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10Q30 20 40 10T100 30\");\n}\n\n\nTEST(GraphicsPathTest, smooth_cubicto) {\n\tGraphicsPath<int> path;\n\tpath.moveto(10, 10);\n\tpath.cubicto(DPair(30, 20), DPair(40, 0), DPair(20, 50));\n\tpath.cubicto(DPair(80, 100), DPair(100, 30));\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10C30 20 40 0 20 50S80 100 100 30\");\n}\n\n\nTEST(GraphicsPathTest, rect) {\n\tGraphicsPath<int> path;\n\tpath.rect(DPair(30, 20), DPair(40, 0));\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M30 20H40V0H30Z\");\n}"
  },
  {
    "path": "tests/HashFunctionTest.cpp",
    "content": "/*************************************************************************\n** HashFunctionTest.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"MD5HashFunction.hpp\"\n#include \"XXHashFunction.hpp\"\n\nusing namespace std;\n\n\nTEST(HashFunctionTest, md5) {\n\tMD5HashFunction md5;\n\tASSERT_EQ(md5.digestSize(), 16);\n\tmd5.update(\"0123456789\");\n\tEXPECT_EQ(md5.digestString(), \"781e5e245d69b566979b86e28d23f2c7\");\n\tmd5.update(\"abcdefghij\");\n\tEXPECT_EQ(md5.digestString(), \"644be06dfc54061fd1e67f5ebbabcd58\");\n\tmd5.reset();\n\tmd5.update(\"0123456789\");\n\tEXPECT_EQ(md5.digestString(), \"781e5e245d69b566979b86e28d23f2c7\");\n\tvector<uint8_t> bytes = {0x78, 0x1e, 0x5e, 0x24, 0x5d, 0x69, 0xb5, 0x66, 0x97, 0x9b, 0x86, 0xe2, 0x8d, 0x23, 0xf2, 0xc7};\n\tEXPECT_EQ(md5.digestBytes(), bytes);\n}\n\n\nTEST(HashFunctionTest, xxh32) {\n\tXXH32HashFunction xxh32;\n\tASSERT_EQ(xxh32.digestSize(), 4);\n\txxh32.update(\"0123456789\");\n\tEXPECT_EQ(xxh32.digestString(), \"950c9c0a\");\n\txxh32.update(\"abcdefghij\");\n\tEXPECT_EQ(xxh32.digestString(), \"35600916\");\n\txxh32.reset();\n\txxh32.update(\"0123456789\");\n\tEXPECT_EQ(xxh32.digestString(), \"950c9c0a\");\n\tvector<uint8_t> bytes = {0x95, 0x0c, 0x9c, 0x0a};\n\tEXPECT_EQ(xxh32.digestBytes(), bytes);\n}\n\n\nTEST(HashFunctionTest, xxh64) {\n\tXXH64HashFunction xxh64;\n\tASSERT_EQ(xxh64.digestSize(), 8);\n\txxh64.update(\"0123456789\");\n\tEXPECT_EQ(xxh64.digestString(), \"3f5fc178a81867e7\");\n\txxh64.update(\"abcdefghij\");\n\tEXPECT_EQ(xxh64.digestString(), \"45c2c0e1eb35a0b6\");\n\txxh64.reset();\n\txxh64.update(\"0123456789\");\n\tEXPECT_EQ(xxh64.digestString(), \"3f5fc178a81867e7\");\n\tvector<uint8_t> bytes = {0x3f, 0x5f, 0xc1, 0x78, 0xa8, 0x18, 0x67, 0xe7};\n\tEXPECT_EQ(xxh64.digestBytes(), bytes);\n}\n\n\n#ifdef ENABLE_XXH128\nTEST(HashFunctionTest, xxh128) {\n\tXXH128HashFunction xxh128;\n\tASSERT_EQ(xxh128.digestSize(), 16);\n\txxh128.update(\"0123456789\");\n\tEXPECT_EQ(xxh128.digestString(), \"e353667619ec664b49655fc9692165fb\");\n\txxh128.update(\"abcdefghij\");\n\tEXPECT_EQ(xxh128.digestString(), \"5f64782bdc987c162389e97fd11aed64\");\n\txxh128.reset();\n\txxh128.update(\"0123456789\");\n\tEXPECT_EQ(xxh128.digestString(), \"e353667619ec664b49655fc9692165fb\");\n\tvector<uint8_t> bytes = {0xe3, 0x53, 0x66, 0x76, 0x19, 0xec, 0x66, 0x4b, 0x49, 0x65, 0x5F, 0xc9, 0x69, 0x21, 0x65, 0xfb};\n\tEXPECT_EQ(xxh128.digestBytes(), bytes);\n}\n#endif\n\n\nTEST(HashFunctionTest, createMD5) {\n\tauto hashfunc = HashFunction::create(\"md5\");\n\tASSERT_TRUE(dynamic_cast<MD5HashFunction*>(hashfunc.get()) != nullptr);\n\thashfunc->update(\"0123456789\");\n\tEXPECT_EQ(hashfunc->digestString(), \"781e5e245d69b566979b86e28d23f2c7\");\n\n\thashfunc = HashFunction::create(\"md5\", \"0123456789\");\n\tASSERT_TRUE(dynamic_cast<MD5HashFunction*>(hashfunc.get()) != nullptr);\n\tEXPECT_EQ(hashfunc->digestString(), \"781e5e245d69b566979b86e28d23f2c7\");\n}\n\n\nTEST(HashFunctionTest, createXXH32) {\n\tauto hashfunc = HashFunction::create(\"xxh32\");\n\tASSERT_TRUE(dynamic_cast<XXH32HashFunction*>(hashfunc.get()) != nullptr);\n\thashfunc->update(\"0123456789\");\n\tEXPECT_EQ(hashfunc->digestString(), \"950c9c0a\");\n\n\thashfunc = HashFunction::create(\"xxh32\", \"0123456789\");\n\tASSERT_TRUE(dynamic_cast<XXH32HashFunction*>(hashfunc.get()) != nullptr);\n\tEXPECT_EQ(hashfunc->digestString(), \"950c9c0a\");\n}\n\n\nTEST(HashFunctionTest, createXXH64) {\n\tauto hashfunc = HashFunction::create(\"xxh64\");\n\tASSERT_TRUE(dynamic_cast<XXH64HashFunction*>(hashfunc.get()) != nullptr);\n\thashfunc->update(\"0123456789\");\n\tEXPECT_EQ(hashfunc->digestString(), \"3f5fc178a81867e7\");\n\n\thashfunc = HashFunction::create(\"xxh64\", \"0123456789\");\n\tASSERT_TRUE(dynamic_cast<XXH64HashFunction*>(hashfunc.get()) != nullptr);\n\tEXPECT_EQ(hashfunc->digestString(), \"3f5fc178a81867e7\");\n}\n\n\n#ifdef ENABLE_XXH128\nTEST(HashFunctionTest, createXXH128) {\n\tauto hashfunc = HashFunction::create(\"xxh128\");\n\tASSERT_TRUE(dynamic_cast<XXH128HashFunction*>(hashfunc.get()) != nullptr);\n\thashfunc->update(\"0123456789\");\n\tEXPECT_EQ(hashfunc->digestString(), \"e353667619ec664b49655fc9692165fb\");\n\n\thashfunc = HashFunction::create(\"xxh128\", \"0123456789\");\n\tASSERT_TRUE(dynamic_cast<XXH128HashFunction*>(hashfunc.get()) != nullptr);\n\tEXPECT_EQ(hashfunc->digestString(), \"e353667619ec664b49655fc9692165fb\");\n}\n#endif\n\n\nTEST(HashFunctionTest, createFail) {\n\tASSERT_TRUE(HashFunction::create(\"not-available\") == nullptr);\n}\n"
  },
  {
    "path": "tests/JFMReaderTest.cpp",
    "content": "/*************************************************************************\n** JFMReaderTest.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <cstdlib>\n#include <fstream>\n#include <memory>\n#include <string>\n#include <vector>\n#include \"JFM.hpp\"\n#include \"utility.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\nusing namespace std;\n\n\nclass JFMReaderTest : public ::testing::Test {\n\tpublic:\n\t\tvoid SetUp () override {\n\t\t\tstring fname = string(SRCDIR)+\"/data/cidjmgr0-h.tfm\";\n\t\t\tifstream ifs(fname, ios::binary);\n\t\t\tASSERT_TRUE(ifs.is_open()) << \"failed opening \" << fname;\n\t\t\tjfm = util::make_unique<JFM>();\n\t\t\tjfm->read(ifs);\n\t\t}\n\n\tprotected:\n\t\tunique_ptr<JFM> jfm;\n};\n\n\nTEST_F(JFMReaderTest, properties) {\n\tEXPECT_EQ(jfm->getChecksum(), 0u);\n\tEXPECT_FALSE(jfm->verticalLayout());\n\tEXPECT_EQ(jfm->firstChar(), 0u);\n\tEXPECT_EQ(jfm->lastChar(), 1u);\n\tEXPECT_EQ(jfm->minChar(), 13143u);\n\tEXPECT_EQ(jfm->maxChar(), 14696u);\n\tEXPECT_DOUBLE_EQ(jfm->getDesignSize(), 10.0*72.0/72.27);\n}\n\n\nTEST_F(JFMReaderTest, charWidth) {\n\tuint32_t minchar = jfm->minChar();\n\tuint32_t maxchar = jfm->maxChar();\n\tEXPECT_NEAR(jfm->getCharWidth(0), 9.963, 0.001);\n\tEXPECT_NEAR(jfm->getCharWidth(minchar), 4.981, 0.001);\n\tEXPECT_NEAR(jfm->getCharWidth(minchar+1), 4.981, 0.001);\n\tEXPECT_NEAR(jfm->getCharWidth(maxchar), 4.981, 0.001);\n\tEXPECT_NEAR(jfm->getCharWidth(maxchar+1), 9.963, 0.001);\n}\n\n\nTEST_F(JFMReaderTest, charHeight) {\n\tuint32_t minchar = jfm->minChar();\n\tuint32_t maxchar = jfm->maxChar();\n\tEXPECT_NEAR(jfm->getCharHeight(0), 8.767, 0.001);\n\tEXPECT_NEAR(jfm->getCharHeight(minchar), 8.767, 0.001);\n\tEXPECT_NEAR(jfm->getCharHeight(minchar+1), 8.767, 0.001);\n\tEXPECT_NEAR(jfm->getCharHeight(maxchar), 8.767, 0.001);\n\tEXPECT_NEAR(jfm->getCharHeight(maxchar+1), 8.767, 0.001);\n}\n\n\nTEST_F(JFMReaderTest, charDepth) {\n\tuint32_t minchar = jfm->minChar();\n\tuint32_t maxchar = jfm->maxChar();\n\tEXPECT_NEAR(jfm->getCharDepth(0), 1.195, 0.001);\n\tEXPECT_NEAR(jfm->getCharDepth(minchar), 1.195, 0.001);\n\tEXPECT_NEAR(jfm->getCharDepth(minchar+1), 1.195, 0.001);\n\tEXPECT_NEAR(jfm->getCharDepth(maxchar), 1.195, 0.001);\n\tEXPECT_NEAR(jfm->getCharDepth(maxchar+1), 1.195, 0.001);\n}\n\n\nTEST_F(JFMReaderTest, italicCorr) {\n\tuint32_t minchar = jfm->minChar();\n\tuint32_t maxchar = jfm->maxChar();\n\tEXPECT_DOUBLE_EQ(jfm->getItalicCorr(0), 0);\n\tEXPECT_DOUBLE_EQ(jfm->getItalicCorr(minchar), 0);\n\tEXPECT_DOUBLE_EQ(jfm->getItalicCorr(minchar+1), 0);\n\tEXPECT_DOUBLE_EQ(jfm->getItalicCorr(maxchar), 0);\n\tEXPECT_DOUBLE_EQ(jfm->getItalicCorr(maxchar+1), 0);\n}\n\n\nTEST_F(JFMReaderTest, params) {\n\tEXPECT_DOUBLE_EQ(jfm->getSpace(), 0);\n\tEXPECT_DOUBLE_EQ(jfm->getSpaceShrink(), 0.);\n\tEXPECT_NEAR(jfm->getSpaceStretch(), 0.996, 0.001);\n\tEXPECT_NEAR(jfm->getQuad(), 9.963, 0.001);\n}\n"
  },
  {
    "path": "tests/LengthTest.cpp",
    "content": "/*************************************************************************\n** LengthTest.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <string>\n#include \"Length.hpp\"\n\nusing namespace std;\n\nTEST(LengthTest, set1) {\n\tLength len;\n\tlen.set(1, Length::Unit::PT);\n\tEXPECT_DOUBLE_EQ(len.pt(), 1);\n\n\tlen.set(72, Length::Unit::BP);\n\tEXPECT_DOUBLE_EQ(len.pt(), 72.27);\n\tEXPECT_DOUBLE_EQ(len.bp(), 72);\n\tEXPECT_DOUBLE_EQ(len.in(), 1);\n\n\tlen.set(1, Length::Unit::IN);\n\tEXPECT_DOUBLE_EQ(len.pt(), 72.27);\n\n\tlen.set(1, Length::Unit::PC);\n\tEXPECT_DOUBLE_EQ(len.pt(), 12);\n\tEXPECT_DOUBLE_EQ(len.pc(), 1);\n\n\tlen.set(2.54, Length::Unit::CM);\n\tEXPECT_DOUBLE_EQ(len.pt(), 72.27);\n\tEXPECT_DOUBLE_EQ(len.cm(), 2.54);\n\tEXPECT_DOUBLE_EQ(len.mm(), 25.4);\n\n\tlen.set(25.4, Length::Unit::MM);\n\tEXPECT_DOUBLE_EQ(len.pt(), 72.27);\n\tEXPECT_DOUBLE_EQ(len.cm(), 2.54);\n\tEXPECT_DOUBLE_EQ(len.mm(), 25.4);\n\n\tlen.set(1, Length::Unit::DD);\n\tEXPECT_DOUBLE_EQ(len.pt(), 1238.0/1157);\n\n\tlen.set(1, Length::Unit::CC);\n\tEXPECT_DOUBLE_EQ(len.dd(), 12.0);\n\tEXPECT_DOUBLE_EQ(len.cc(), 1);\n\n\tlen.set(1, Length::Unit::SP);\n\tEXPECT_DOUBLE_EQ(len.pt(), 1.0/65536);\n\tEXPECT_DOUBLE_EQ(len.sp(), 1);\n}\n\n\nTEST(LengthTest, set2) {\n\tLength len;\n\tlen.set(1, \"pt\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 1);\n\n\tlen.set(72, \"bp\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 72.27);\n\tEXPECT_DOUBLE_EQ(len.bp(), 72);\n\tEXPECT_DOUBLE_EQ(len.in(), 1);\n\n\tlen.set(1, \"in\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 72.27);\n\n\tlen.set(1, \"pc\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 12);\n\tEXPECT_DOUBLE_EQ(len.pc(), 1);\n\n\tlen.set(2.54, \"cm\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 72.27);\n\tEXPECT_DOUBLE_EQ(len.cm(), 2.54);\n\tEXPECT_DOUBLE_EQ(len.mm(), 25.4);\n\n\tlen.set(10, \"mm\");\n\tEXPECT_DOUBLE_EQ(len.cm(), 1);\n\tEXPECT_DOUBLE_EQ(len.mm(), 10);\n\n\tlen.set(1, \"dd\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 1238.0/1157);\n\n\tlen.set(1, \"cc\");\n\tEXPECT_DOUBLE_EQ(len.dd(), 12.0);\n\n\tlen.set(1, \"sp\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 1.0/65536);\n\n\tlen.set(1, \"\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 1);\n\n\tASSERT_THROW(len.set(1, \"xy\"), UnitException);\n}\n\nTEST(LengthTest, set3) {\n\tLength len;\n\tlen.set(\"1pt\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 1);\n\n\tlen.set(\"72bp\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 72.27);\n\tEXPECT_DOUBLE_EQ(len.bp(), 72);\n\tEXPECT_DOUBLE_EQ(len.in(), 1);\n\n\tlen.set(\"1in\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 72.27);\n\n\tlen.set(\"1pc\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 12);\n\tEXPECT_DOUBLE_EQ(len.pc(), 1);\n\n\tlen.set(\"2.54cm\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 72.27);\n\tEXPECT_DOUBLE_EQ(len.cm(), 2.54);\n\tEXPECT_DOUBLE_EQ(len.mm(), 25.4);\n\n\tlen.set(\"10mm\");\n\tEXPECT_DOUBLE_EQ(len.cm(), 1);\n\tEXPECT_DOUBLE_EQ(len.mm(), 10);\n\n\tlen.set(\"10dd\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 12380.0/1157);\n\n\tlen.set(\"10cc\");\n\tEXPECT_DOUBLE_EQ(len.dd(), 120.0);\n\n\tlen.set(\"10sp\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 10.0/65536);\n\n\n\tlen.set(\"1\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 1);\n\n\tlen.set(\"10\");\n\tEXPECT_DOUBLE_EQ(len.pt(), 10);\n\n\tASSERT_THROW(len.set(\"1xy\"), UnitException);\n\tASSERT_THROW(len.set(\"pt\"), UnitException);\n}\n\n\nTEST(LengthTest, get) {\n\tLength len;\n\tlen.set(\"1pt\");\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::PT), 1);\n\n\tlen.set(\"72bp\");\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::PT), 72.27);\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::BP), 72);\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::IN), 1);\n\n\tlen.set(\"1in\");\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::PT), 72.27);\n\n\tlen.set(\"1pc\");\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::PT), 12);\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::PC), 1);\n\n\tlen.set(\"2.54cm\");\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::PT), 72.27);\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::CM), 2.54);\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::MM), 25.4);\n\n\tlen.set(\"10mm\");\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::CM), 1);\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::MM), 10);\n\n\tlen.set(\"10dd\");\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::PT), 12380.0/1157);\n\n\tlen.set(\"10cc\");\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::DD), 120.0);\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::CC), 10.0);\n\n\tlen.set(\"10sp\");\n\tEXPECT_DOUBLE_EQ(len.get(Length::Unit::SP), 10.0);\n}\n\n\nTEST(LengthTest, str2unit) {\n\tEXPECT_EQ(Length::stringToUnit(\"pt\"), Length::Unit::PT);\n\tEXPECT_EQ(Length::stringToUnit(\"bp\"), Length::Unit::BP);\n\tEXPECT_EQ(Length::stringToUnit(\"in\"), Length::Unit::IN);\n\tEXPECT_EQ(Length::stringToUnit(\"cm\"), Length::Unit::CM);\n\tEXPECT_EQ(Length::stringToUnit(\"mm\"), Length::Unit::MM);\n\tEXPECT_EQ(Length::stringToUnit(\"pc\"), Length::Unit::PC);\n\tEXPECT_EQ(Length::stringToUnit(\"cc\"), Length::Unit::CC);\n\tEXPECT_EQ(Length::stringToUnit(\"dd\"), Length::Unit::DD);\n\tEXPECT_EQ(Length::stringToUnit(\"sp\"), Length::Unit::SP);\n\n\tASSERT_THROW(Length::stringToUnit(\"\"), UnitException);\n\tASSERT_THROW(Length::stringToUnit(\"CM\"), UnitException);\n\tASSERT_THROW(Length::stringToUnit(\"pta\"), UnitException);\n}\n\n\nTEST(LengthTest, unit2str) {\n\tEXPECT_EQ(Length::unitToString(Length::Unit::PT), string(\"pt\"));\n\tEXPECT_EQ(Length::unitToString(Length::Unit::BP), string(\"bp\"));\n\tEXPECT_EQ(Length::unitToString(Length::Unit::IN), string(\"in\"));\n\tEXPECT_EQ(Length::unitToString(Length::Unit::CM), string(\"cm\"));\n\tEXPECT_EQ(Length::unitToString(Length::Unit::MM), string(\"mm\"));\n\tEXPECT_EQ(Length::unitToString(Length::Unit::PC), string(\"pc\"));\n\tEXPECT_EQ(Length::unitToString(Length::Unit::CC), string(\"cc\"));\n\tEXPECT_EQ(Length::unitToString(Length::Unit::DD), string(\"dd\"));\n\tEXPECT_EQ(Length::unitToString(Length::Unit::SP), string(\"sp\"));\n\n\tEXPECT_EQ(Length::unitToString(Length::Unit(300)), string(\"??\"));\n}\n\n\nTEST(LengthTest, toString) {\n\tEXPECT_EQ(Length(10, Length::Unit::PT).toString(Length::Unit::PT), \"10pt\");\n\tEXPECT_EQ(Length(10, Length::Unit::BP).toString(Length::Unit::BP), \"10bp\");\n\tEXPECT_EQ(Length(10, Length::Unit::IN).toString(Length::Unit::IN), \"10in\");\n\tEXPECT_EQ(Length(10, Length::Unit::CM).toString(Length::Unit::CM), \"10cm\");\n\tEXPECT_EQ(Length(10, Length::Unit::MM).toString(Length::Unit::MM), \"10mm\");\n\tEXPECT_EQ(Length(10, Length::Unit::PC).toString(Length::Unit::PC), \"10pc\");\n\tEXPECT_EQ(Length(10, Length::Unit::DD).toString(Length::Unit::DD), \"10dd\");\n\tEXPECT_EQ(Length(10, Length::Unit::CC).toString(Length::Unit::CC), \"10cc\");\n\tEXPECT_EQ(Length(10, Length::Unit::SP).toString(Length::Unit::SP), \"10sp\");\n}\n\n\nTEST(LengthTest, literals) {\n\tEXPECT_EQ(1_pt, Length(1, \"pt\"));\n\tEXPECT_EQ(2_bp, Length(2, \"bp\"));\n\tEXPECT_EQ(3_in, Length(3, \"in\"));\n\tEXPECT_EQ(5_mm, Length(5, \"mm\"));\n}\n\n\nTEST(LengthTest, getUnits) {\n\tfor (auto unit : Length::getUnits()) {\n\t\tEXPECT_EQ(unit.first, Length::unitToString(unit.second));\n\t\tEXPECT_EQ(unit.second, Length::stringToUnit(unit.first));\n\t}\n}\n"
  },
  {
    "path": "tests/Makefile.am",
    "content": "## This file is part of dvisvgm\n## Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>\n##\n## Process this file with automake.\n\nSUBDIRS = data\n\ncheck_LTLIBRARIES = libgtest.la\nlibgtest_la_SOURCES = gtest/src/gtest-all.cc testmain.cpp\nlibgtest_la_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include -I$(dvisvgm_srcdir)/tests/gtest\nlibgtest_la_LDFLAGS = -pthread\nEXTRA_DIST = gtest/LICENSE \\\n\tgtest/include \\\n\tgtest/src/gtest.cc \\\n\tgtest/src/gtest-assertion-result.cc \\\n\tgtest/src/gtest-death-test.cc \\\n\tgtest/src/gtest-filepath.cc \\\n\tgtest/src/gtest-internal-inl.h \\\n\tgtest/src/gtest_main.cc \\\n\tgtest/src/gtest-matchers.cc \\\n\tgtest/src/gtest-port.cc \\\n\tgtest/src/gtest-printers.cc \\\n\tgtest/src/gtest-test-part.cc \\\n\tgtest/src/gtest-typed-test.cc\n\ninclude ../libs/defs.am\n\nLIBS_CFLAGS = $(XXHASH_CFLAGS) -I$(dvisvgm_srcdir)/libs/md5\nLIBS_LIBS   = $(POTRACE_LIBS) $(XXHASH_LIBS) ../libs/md5/libmd5.a\n\nif ENABLE_WOFF\nLIBS_LIBS  += $(WOFF2_LIBS) $(BROTLI_LIBS)\nendif\n\nAM_CXXFLAGS = -I$(dvisvgm_srcdir)/src -I$(dvisvgm_srcdir)/libs/variant/include \\\n\t-Wall -Wno-mismatched-tags \\\n\t-DBUILDDIR='\"$(abs_builddir)\"' -DSRCDIR='\"$(abs_srcdir)\"' \\\n\t$(CODE_COVERAGE_CFLAGS)\n\nTESTS = hashcheck\ncheck_PROGRAMS = hashcheck\nnodist_hashcheck_SOURCES = hashcheck.cpp\nhashcheck_CPPFLAGS = $(LIBS_CFLAGS)\nhashcheck_LDADD = $(LIBS_LIBS)\n\nhashcheck.cpp: genhashcheck.py $(dvisvgm_srcdir)/src/AGLTable.hpp $(dvisvgm_srcdir)/libs/xxHash/xxhash.h\n\tpython $^ >$@\n\nTESTLIBS = libgtest.la ../src/libdvisvgm.la $(LIBS_LIBS) -lfreetype\nTESTLIBS += $(CODE_COVERAGE_LDFLAGS)\n\nTESTS += BezierTest\ncheck_PROGRAMS += BezierTest\nBezierTest_SOURCES = BezierTest.cpp testutil.hpp\nBezierTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nBezierTest_LDADD = $(TESTLIBS)\n\nTESTS += BitmapTest\ncheck_PROGRAMS += BitmapTest\nBitmapTest_SOURCES = BitmapTest.cpp testutil.hpp\nBitmapTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nBitmapTest_LDADD = $(TESTLIBS)\n\nTESTS += BoundingBoxTest\ncheck_PROGRAMS += BoundingBoxTest\nBoundingBoxTest_SOURCES = BoundingBoxTest.cpp testutil.hpp\nBoundingBoxTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nBoundingBoxTest_LDADD = $(TESTLIBS)\n\nTESTS += CalculatorTest\ncheck_PROGRAMS += CalculatorTest\nCalculatorTest_SOURCES = CalculatorTest.cpp testutil.hpp\nCalculatorTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nCalculatorTest_LDADD = $(TESTLIBS)\n\nTESTS += CMapManagerTest\ncheck_PROGRAMS += CMapManagerTest\nCMapManagerTest_SOURCES = CMapManagerTest.cpp testutil.hpp\nCMapManagerTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nCMapManagerTest_LDADD = $(TESTLIBS)\n\nTESTS += CMapReaderTest\ncheck_PROGRAMS += CMapReaderTest\nCMapReaderTest_SOURCES = CMapReaderTest.cpp testutil.hpp\nCMapReaderTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nCMapReaderTest_LDADD = $(TESTLIBS)\n\nTESTS += CMapTest\ncheck_PROGRAMS += CMapTest\nCMapTest_SOURCES = CMapTest.cpp testutil.hpp\nCMapTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nCMapTest_LDADD = $(TESTLIBS)\n\nTESTS += ColorSpecialTest\ncheck_PROGRAMS += ColorSpecialTest\nColorSpecialTest_SOURCES = ColorSpecialTest.cpp testutil.hpp\nColorSpecialTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nColorSpecialTest_LDADD = $(TESTLIBS)\n\nTESTS += ColorTest\ncheck_PROGRAMS += ColorTest\nColorTest_SOURCES = ColorTest.cpp testutil.hpp\nColorTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nColorTest_LDADD = $(TESTLIBS)\n\nTESTS += CommandLineTest\ncheck_PROGRAMS += CommandLineTest\nCommandLineTest_SOURCES = CommandLineTest.cpp testutil.hpp\nCommandLineTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nCommandLineTest_LDADD = $(TESTLIBS)\n\nTESTS += DependencyGraphTest\ncheck_PROGRAMS += DependencyGraphTest\nDependencyGraphTest_SOURCES = DependencyGraphTest.cpp testutil.hpp\nDependencyGraphTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nDependencyGraphTest_LDADD = $(TESTLIBS)\n\nTESTS += DirectoryTest\ncheck_PROGRAMS += DirectoryTest\nDirectoryTest_SOURCES = DirectoryTest.cpp testutil.hpp\nDirectoryTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nDirectoryTest_LDADD = $(TESTLIBS)\n\nTESTS += DVIReaderTest\ncheck_PROGRAMS += DVIReaderTest\nDVIReaderTest_SOURCES = DVIReaderTest.cpp testutil.hpp\nDVIReaderTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nDVIReaderTest_LDADD = $(TESTLIBS)\n\nTESTS += DvisvgmSpecialTest\ncheck_PROGRAMS += DvisvgmSpecialTest\nDvisvgmSpecialTest_SOURCES = DvisvgmSpecialTest.cpp testutil.hpp\nDvisvgmSpecialTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nDvisvgmSpecialTest_LDADD = $(TESTLIBS)\n\nTESTS += EllipticalArcTest\ncheck_PROGRAMS += EllipticalArcTest\nEllipticalArcTest_SOURCES = EllipticalArcTest.cpp testutil.hpp\nEllipticalArcTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nEllipticalArcTest_LDADD = $(TESTLIBS)\n\nTESTS += EmSpecialTest\ncheck_PROGRAMS += EmSpecialTest\nEmSpecialTest_SOURCES = EmSpecialTest.cpp testutil.hpp\nEmSpecialTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nEmSpecialTest_LDADD = $(TESTLIBS)\n\nTESTS += FileFinderTest\ncheck_PROGRAMS += FileFinderTest\nFileFinderTest_SOURCES = FileFinderTest.cpp testutil.hpp\nFileFinderTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nFileFinderTest_LDADD = $(TESTLIBS)\n\nTESTS += FilePathTest\ncheck_PROGRAMS += FilePathTest\nFilePathTest_SOURCES = FilePathTest.cpp testutil.hpp\nFilePathTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nFilePathTest_LDADD = $(TESTLIBS)\n\nTESTS += FileSystemTest\ncheck_PROGRAMS += FileSystemTest\nFileSystemTest_SOURCES = FileSystemTest.cpp testutil.hpp\nFileSystemTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nFileSystemTest_LDADD = $(TESTLIBS)\n\nTESTS += FontCacheTest\ncheck_PROGRAMS += FontCacheTest\nFontCacheTest_SOURCES = FontCacheTest.cpp testutil.hpp\nFontCacheTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nFontCacheTest_LDADD = $(TESTLIBS)\n\nTESTS += FontManagerTest\ncheck_PROGRAMS += FontManagerTest\nFontManagerTest_SOURCES = FontManagerTest.cpp testutil.hpp\nFontManagerTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nFontManagerTest_LDADD = $(TESTLIBS)\n\nTESTS += FontMapTest\ncheck_PROGRAMS += FontMapTest\nFontMapTest_SOURCES = FontMapTest.cpp testutil.hpp\nFontMapTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nFontMapTest_LDADD = $(TESTLIBS)\n\nTESTS += GFGlyphTracerTest\ncheck_PROGRAMS += GFGlyphTracerTest\nGFGlyphTracerTest_SOURCES = GFGlyphTracerTest.cpp testutil.hpp\nGFGlyphTracerTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nGFGlyphTracerTest_LDADD = $(TESTLIBS)\n\nTESTS += GFReaderTest\ncheck_PROGRAMS += GFReaderTest\nGFReaderTest_SOURCES = GFReaderTest.cpp testutil.hpp\nGFReaderTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nGFReaderTest_LDADD = $(TESTLIBS)\n\nTESTS += GhostscriptTest\ncheck_PROGRAMS += GhostscriptTest\nGhostscriptTest_SOURCES = GhostscriptTest.cpp testutil.hpp\nGhostscriptTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nGhostscriptTest_LDADD = $(TESTLIBS)\n\nTESTS += GraphicsPathParserTest\ncheck_PROGRAMS += GraphicsPathParserTest\nGraphicsPathParserTest_SOURCES = GraphicsPathParserTest.cpp testutil.hpp\nGraphicsPathParserTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nGraphicsPathParserTest_LDADD = $(TESTLIBS)\n\nTESTS += GraphicsPathTest\ncheck_PROGRAMS += GraphicsPathTest\nGraphicsPathTest_SOURCES = GraphicsPathTest.cpp testutil.hpp\nGraphicsPathTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nGraphicsPathTest_LDADD = $(TESTLIBS)\n\nTESTS += HashFunctionTest\ncheck_PROGRAMS += HashFunctionTest\nHashFunctionTest_SOURCES = HashFunctionTest.cpp testutil.hpp\nHashFunctionTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nHashFunctionTest_LDADD = $(TESTLIBS)\n\nTESTS += JFMReaderTest\ncheck_PROGRAMS += JFMReaderTest\nJFMReaderTest_SOURCES = JFMReaderTest.cpp testutil.hpp\nJFMReaderTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nJFMReaderTest_LDADD = $(TESTLIBS)\n\nTESTS += LengthTest\ncheck_PROGRAMS += LengthTest\nLengthTest_SOURCES = LengthTest.cpp testutil.hpp\nLengthTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nLengthTest_LDADD = $(TESTLIBS)\n\nTESTS += MapLineTest\ncheck_PROGRAMS += MapLineTest\nMapLineTest_SOURCES = MapLineTest.cpp testutil.hpp\nMapLineTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nMapLineTest_LDADD = $(TESTLIBS)\n\nTESTS += MatrixTest\ncheck_PROGRAMS += MatrixTest\nMatrixTest_SOURCES = MatrixTest.cpp testutil.hpp\nMatrixTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nMatrixTest_LDADD = $(TESTLIBS)\n\nTESTS += MessageExceptionTest\ncheck_PROGRAMS += MessageExceptionTest\nMessageExceptionTest_SOURCES = MessageExceptionTest.cpp testutil.hpp\nMessageExceptionTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nMessageExceptionTest_LDADD = $(TESTLIBS)\n\nTESTS += NumericRangesTest\ncheck_PROGRAMS += NumericRangesTest\nNumericRangesTest_SOURCES = NumericRangesTest.cpp testutil.hpp\nNumericRangesTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nNumericRangesTest_LDADD = $(TESTLIBS)\n\nTESTS += OFMReaderTest\ncheck_PROGRAMS += OFMReaderTest\nOFMReaderTest_SOURCES = OFMReaderTest.cpp testutil.hpp\nOFMReaderTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nOFMReaderTest_LDADD = $(TESTLIBS)\n\nTESTS += PageRagesTest\ncheck_PROGRAMS += PageRagesTest\nPageRagesTest_SOURCES = PageRagesTest.cpp testutil.hpp\nPageRagesTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nPageRagesTest_LDADD = $(TESTLIBS)\n\nTESTS += PageSizeTest\ncheck_PROGRAMS += PageSizeTest\nPageSizeTest_SOURCES = PageSizeTest.cpp testutil.hpp\nPageSizeTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nPageSizeTest_LDADD = $(TESTLIBS)\n\nTESTS += PairTest\ncheck_PROGRAMS += PairTest\nPairTest_SOURCES = PairTest.cpp testutil.hpp\nPairTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nPairTest_LDADD = $(TESTLIBS)\n\nTESTS += PapersizeSpecialTest\ncheck_PROGRAMS += PapersizeSpecialTest\nPapersizeSpecialTest_SOURCES = PapersizeSpecialTest.cpp testutil.hpp\nPapersizeSpecialTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nPapersizeSpecialTest_LDADD = $(TESTLIBS)\n\nTESTS += PDFParserTest\ncheck_PROGRAMS += PDFParserTest\nPDFParserTest_SOURCES = PDFParserTest.cpp testutil.hpp\nPDFParserTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nPDFParserTest_LDADD = $(TESTLIBS)\n\nTESTS += PSInterpreterTest\ncheck_PROGRAMS += PSInterpreterTest\nPSInterpreterTest_SOURCES = PSInterpreterTest.cpp testutil.hpp\nPSInterpreterTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nPSInterpreterTest_LDADD = $(TESTLIBS)\n\nTESTS += RangeMapTest\ncheck_PROGRAMS += RangeMapTest\nRangeMapTest_SOURCES = RangeMapTest.cpp testutil.hpp\nRangeMapTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nRangeMapTest_LDADD = $(TESTLIBS)\n\nTESTS += ShadingPatchTest\ncheck_PROGRAMS += ShadingPatchTest\nShadingPatchTest_SOURCES = ShadingPatchTest.cpp testutil.hpp\nShadingPatchTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nShadingPatchTest_LDADD = $(TESTLIBS)\n\nTESTS += SpecialManagerTest\ncheck_PROGRAMS += SpecialManagerTest\nSpecialManagerTest_SOURCES = SpecialManagerTest.cpp testutil.hpp\nSpecialManagerTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nSpecialManagerTest_LDADD = $(TESTLIBS)\n\nTESTS += SplittedCharInputBufferTest\ncheck_PROGRAMS += SplittedCharInputBufferTest\nSplittedCharInputBufferTest_SOURCES = SplittedCharInputBufferTest.cpp testutil.hpp\nSplittedCharInputBufferTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nSplittedCharInputBufferTest_LDADD = $(TESTLIBS)\n\nTESTS += StreamInputBufferTest\ncheck_PROGRAMS += StreamInputBufferTest\nStreamInputBufferTest_SOURCES = StreamInputBufferTest.cpp testutil.hpp\nStreamInputBufferTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nStreamInputBufferTest_LDADD = $(TESTLIBS)\n\nTESTS += StreamReaderTest\ncheck_PROGRAMS += StreamReaderTest\nStreamReaderTest_SOURCES = StreamReaderTest.cpp testutil.hpp\nStreamReaderTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nStreamReaderTest_LDADD = $(TESTLIBS)\n\nTESTS += StreamWriterTest\ncheck_PROGRAMS += StreamWriterTest\nStreamWriterTest_SOURCES = StreamWriterTest.cpp testutil.hpp\nStreamWriterTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nStreamWriterTest_LDADD = $(TESTLIBS)\n\nTESTS += StringMatcherTest\ncheck_PROGRAMS += StringMatcherTest\nStringMatcherTest_SOURCES = StringMatcherTest.cpp testutil.hpp\nStringMatcherTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nStringMatcherTest_LDADD = $(TESTLIBS)\n\nTESTS += SubfontTest\ncheck_PROGRAMS += SubfontTest\nSubfontTest_SOURCES = SubfontTest.cpp testutil.hpp\nSubfontTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nSubfontTest_LDADD = $(TESTLIBS)\n\nTESTS += SVGOutputTest\ncheck_PROGRAMS += SVGOutputTest\nSVGOutputTest_SOURCES = SVGOutputTest.cpp testutil.hpp\nSVGOutputTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nSVGOutputTest_LDADD = $(TESTLIBS)\n\nTESTS += TensorProductPatchTest\ncheck_PROGRAMS += TensorProductPatchTest\nTensorProductPatchTest_SOURCES = TensorProductPatchTest.cpp testutil.hpp\nTensorProductPatchTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nTensorProductPatchTest_LDADD = $(TESTLIBS)\n\nTESTS += TFMReaderTest\ncheck_PROGRAMS += TFMReaderTest\nTFMReaderTest_SOURCES = TFMReaderTest.cpp testutil.hpp\nTFMReaderTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nTFMReaderTest_LDADD = $(TESTLIBS)\n\nTESTS += ToUnicodeMapTest\ncheck_PROGRAMS += ToUnicodeMapTest\nToUnicodeMapTest_SOURCES = ToUnicodeMapTest.cpp testutil.hpp\nToUnicodeMapTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nToUnicodeMapTest_LDADD = $(TESTLIBS)\n\nTESTS += TpicSpecialTest\ncheck_PROGRAMS += TpicSpecialTest\nTpicSpecialTest_SOURCES = TpicSpecialTest.cpp testutil.hpp\nTpicSpecialTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nTpicSpecialTest_LDADD = $(TESTLIBS)\n\nTESTS += TriangularPatchTest\ncheck_PROGRAMS += TriangularPatchTest\nTriangularPatchTest_SOURCES = TriangularPatchTest.cpp testutil.hpp\nTriangularPatchTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nTriangularPatchTest_LDADD = $(TESTLIBS)\n\nTESTS += UnicodeTest\ncheck_PROGRAMS += UnicodeTest\nUnicodeTest_SOURCES = UnicodeTest.cpp testutil.hpp\nUnicodeTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nUnicodeTest_LDADD = $(TESTLIBS)\n\nTESTS += UtilityTest\ncheck_PROGRAMS += UtilityTest\nUtilityTest_SOURCES = UtilityTest.cpp testutil.hpp\nUtilityTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nUtilityTest_LDADD = $(TESTLIBS)\n\nTESTS += VectorIteratorTest\ncheck_PROGRAMS += VectorIteratorTest\nVectorIteratorTest_SOURCES = VectorIteratorTest.cpp testutil.hpp\nVectorIteratorTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nVectorIteratorTest_LDADD = $(TESTLIBS)\n\nTESTS += XMLNodeTest\ncheck_PROGRAMS += XMLNodeTest\nXMLNodeTest_SOURCES = XMLNodeTest.cpp testutil.hpp\nXMLNodeTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nXMLNodeTest_LDADD = $(TESTLIBS)\n\nTESTS += XMLStringTest\ncheck_PROGRAMS += XMLStringTest\nXMLStringTest_SOURCES = XMLStringTest.cpp testutil.hpp\nXMLStringTest_CPPFLAGS = -I$(dvisvgm_srcdir)/tests/gtest/include $(LIBS_CFLAGS)\nXMLStringTest_LDADD = $(TESTLIBS)\n\nEXTRA_DIST += check-conv genhashcheck.py normalize.xsl\nTESTS += check-conv\n\nCLEANFILES = *.gcda *.gcno hashcheck.cpp\n"
  },
  {
    "path": "tests/MapLineTest.cpp",
    "content": "/*************************************************************************\n** MapLineTest.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"MapLine.hpp\"\n#include \"Subfont.hpp\"\n#include \"testutil.hpp\"\n\nusing namespace std;\n\nTEST(MapLineTest, psline1) {\n\tistringstream iss(\"texname0 TEXNAME0 <texname.pfb <encname.enc\");\n\tMapLine mapline(iss);\n\tEXPECT_EQ(mapline.texname(), \"texname0\");\n\tEXPECT_EQ(mapline.psname(), \"TEXNAME0\");\n\tEXPECT_EQ(mapline.fontfname(), \"texname.pfb\");\n\tEXPECT_EQ(mapline.encname(), \"encname\");\n\tEXPECT_DOUBLE_EQ(mapline.slant(), 0);\n\tEXPECT_DOUBLE_EQ(mapline.extend(), 1);\n\tEXPECT_DOUBLE_EQ(mapline.bold(), 0);\n}\n\nTEST(MapLineTest, psline2) {\n\tistringstream iss(\"texname0 TEXNAME0 <<texname.pfb <encname.enc\");\n\tMapLine mapline(iss);\n\tEXPECT_EQ(mapline.texname(), \"texname0\");\n\tEXPECT_EQ(mapline.psname(), \"TEXNAME0\");\n\tEXPECT_EQ(mapline.fontfname(), \"texname.pfb\");\n\tEXPECT_EQ(mapline.encname(), \"encname\");\n\tEXPECT_DOUBLE_EQ(mapline.slant(), 0);\n\tEXPECT_DOUBLE_EQ(mapline.extend(), 1);\n\tEXPECT_DOUBLE_EQ(mapline.bold(), 0);\n}\n\nTEST(MapLineTest, psline3) {\n\tistringstream iss(\"texname0 TEXNAME0 \\\".123 SlantFont .456 ExtendFont\\\" <encname.enc <[texname.ttf\");\n\tMapLine mapline(iss);\n\tEXPECT_EQ(mapline.texname(), \"texname0\");\n\tEXPECT_EQ(mapline.psname(), \"TEXNAME0\");\n\tEXPECT_EQ(mapline.fontfname(), \"texname.ttf\");\n\tEXPECT_EQ(mapline.encname(), \"encname\");\n\tEXPECT_DOUBLE_EQ(mapline.slant(), 0.123);\n\tEXPECT_DOUBLE_EQ(mapline.extend(), 0.456);\n\tEXPECT_DOUBLE_EQ(mapline.bold(), 0);\n}\n\nTEST(MapLineTest, psline4) {\n\tistringstream iss(\"texname0 TEXNAME0 <encname.enc \\\".123 SlantFont IgnoreMe .456 ExtendFont\\\" <texname.ttf\");\n\tMapLine mapline(iss);\n\tEXPECT_EQ(mapline.texname(), \"texname0\");\n\tEXPECT_EQ(mapline.psname(), \"TEXNAME0\");\n\tEXPECT_EQ(mapline.fontfname(), \"texname.ttf\");\n\tEXPECT_EQ(mapline.encname(), \"encname\");\n\tEXPECT_DOUBLE_EQ(mapline.slant(), 0.123);\n\tEXPECT_DOUBLE_EQ(mapline.extend(), 0.456);\n\tEXPECT_DOUBLE_EQ(mapline.bold(), 0);\n}\n\nTEST(MapLineTest, pdfline1) {\n\tistringstream iss(\"texname\");\n\tMapLine mapline(iss);\n   EXPECT_EQ(mapline.texname(), \"texname\");\n   EXPECT_EQ(mapline.psname(), \"\");\n   EXPECT_EQ(mapline.encname(), \"\");\n   EXPECT_EQ(mapline.fontfname(), \"\");\n}\n\nTEST(MapLineTest, pdfline2) {\n\tistringstream iss(\"gbk unicode simsun.ttc\");\n\tMapLine mapline(iss);\n   EXPECT_EQ(mapline.texname(), \"gbk\");\n   EXPECT_EQ(mapline.psname(), \"\");\n   EXPECT_EQ(mapline.encname(), \"unicode\");\n   EXPECT_EQ(mapline.fontfname(), \"simsun.ttc\");\n\tEXPECT_EQ(mapline.fontindex(), 0);\n\tEXPECT_TRUE(mapline.sfd() == 0);\n   EXPECT_EQ(mapline.fontindex(), 0);\n   EXPECT_DOUBLE_EQ(mapline.slant(), 0);\n   EXPECT_DOUBLE_EQ(mapline.extend(), 1);\n}\n\nTEST(MapLineTest, pdfline3) {\n\tistringstream iss(\"gbk@UGBK@10 unicode simsun.ttc -v 50 -r -s .123 -b 1 -e 0.456\");\n\tMapLine mapline(iss);\n   EXPECT_EQ(mapline.texname(), \"gbk10\");\n   EXPECT_EQ(mapline.psname(), \"\");\n   EXPECT_EQ(mapline.encname(), \"unicode\");\n   EXPECT_EQ(mapline.fontfname(), \"simsun.ttc\");\n\tEXPECT_EQ(mapline.fontindex(), 0);\n\tEXPECT_DOUBLE_EQ(mapline.slant(), 0.123);\n\tEXPECT_DOUBLE_EQ(mapline.extend(), 0.456);\n\tEXPECT_DOUBLE_EQ(mapline.bold(), 1);\n\tif (mapline.sfd() != 0)  // if UGBK.sfd is installed, check SFD name\n\t\tEXPECT_EQ(mapline.sfd()->name(), \"UGBK\");\n\telse\n\t\tWARNING(\"UGBK.sfd not found\");\n}\n\nTEST(MapLineTest, pdfline4) {\n\tistringstream iss(\"gbk@UGBK@ default :1:!simsun.ttc/UCS,Bold -e.345\");\n\tMapLine mapline(iss);\n   EXPECT_EQ(mapline.texname(), \"gbk\");\n   EXPECT_EQ(mapline.psname(), \"\");\n   EXPECT_EQ(mapline.encname(), \"\");  // encodings \"default\" and \"none\" are replaced with \"\"\n\tEXPECT_EQ(mapline.fontfname(), \"simsun.ttc\");\n\tEXPECT_EQ(mapline.fontindex(), 1);\n\tEXPECT_DOUBLE_EQ(mapline.slant(), 0);\n\tEXPECT_DOUBLE_EQ(mapline.extend(), 0.345);\n\tif (mapline.sfd() != 0)  // if UGBK.sfd is installed, check SFD name\n\t\tEXPECT_EQ(mapline.sfd()->name(), \"UGBK\");\n\telse\n\t\tWARNING(\"UGBK.sfd not found\");\n}\n\n\nTEST(MapLineTest, fail) {\n\tEXPECT_THROW(MapLine(\"texname -\"), MapLineException);\n\tEXPECT_THROW(MapLine(\"texname -s\"), MapLineException);\n\tEXPECT_THROW(MapLine(\"texname -e\"), MapLineException);\n\tEXPECT_THROW(MapLine(\"texname -b\"), MapLineException);\n\tEXPECT_THROW(MapLine(\"texname -i\"), MapLineException);\n\tEXPECT_THROW(MapLine(\"texname -p\"), MapLineException);\n\tEXPECT_THROW(MapLine(\"texname -v\"), MapLineException);\n\tEXPECT_THROW(MapLine(\"texname -w\"), MapLineException);\n\tEXPECT_THROW(MapLine(\"texname -Z\"), MapLineException);\n}\n"
  },
  {
    "path": "tests/MatrixTest.cpp",
    "content": "/*************************************************************************\n** MatrixTest.cpp                                                       **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include <vector>\n#include <XMLString.hpp>\n#include \"Calculator.hpp\"\n#include \"Matrix.hpp\"\n\nusing namespace std;\n\n\nTEST(MatrixTest, construct1) {\n\tconst vector<double> vec{1, 2, 3, 4, 5, 6, 7, 8, 9};\n\tMatrix m1(vec);\n\tfor (int row=0; row < 3; row++)\n\t\tfor (int col=0; col < 3; col++)\n\t\t\tASSERT_EQ(m1.get(row, col), vec[row*3+col]) << \"row=\" << row << \", col=\" << col;\n\n\tint startIndex=4;\n\tMatrix m2(vec, startIndex);\n\tfor (int row=0; row < 3; row++) {\n\t\tfor (int col=0; col < 3; col++) {\n\t\t\tint index = row*3+col+startIndex;\n\t\t\tASSERT_EQ(m2.get(row, col), index < 9 ? vec[index] : (row == col ? 1 : 0)) << \"row=\" << row << \", col=\" << col;\n\t\t}\n\t}\n\tEXPECT_TRUE(Matrix(1).isIdentity());\n}\n\n\nTEST(MatrixTest, construct2) {\n\tMatrix m1{1, 2, 3, 4, 5, 6, 7, 8, 9};\n\tfor (int row=0; row < 3; row++)\n\t\tfor (int col=0; col < 3; col++)\n\t\t\tASSERT_EQ(m1.get(row, col), 3*row+col+1) << \"row=\" << row << \", col=\" << col;\n\n\tMatrix m2{1, 2, 3, 4, 5, 6};\n\tfor (int row=0; row < 2; row++)\n\t\tfor (int col=0; col < 3; col++)\n\t\t\tASSERT_EQ(m2.get(row, col), 3*row+col+1) << \"row=\" << row << \", col=\" << col;\n\tASSERT_EQ(m2.get(2, 0), 0);\n\tASSERT_EQ(m2.get(2, 1), 0);\n\tASSERT_EQ(m2.get(2, 2), 1);\n}\n\n\nTEST(MatrixTest, svg) {\n\tdouble v1[] = {1,2,3,4,5,6,7,8,9};\n\tMatrix m1(v1);\n\tostringstream oss;\n\tm1.write(oss);\n\tEXPECT_EQ(oss.str(), \"((1,2,3),(4,5,6),(7,8,9))\");\n\tEXPECT_EQ(m1.toSVG(), \"matrix(1 4 2 5 3 6)\");\n\n\tdouble v2[] = {1,2};\n\tMatrix m2(v2, 2);\n\toss.str(\"\");\n\tm2.write(oss);\n\tEXPECT_EQ(oss.str(), \"((1,2,0),(0,1,0),(0,0,1))\");\n\tEXPECT_EQ(m2.toSVG(), \"matrix(1 0 2 1 0 0)\");\n}\n\n\nTEST(MatrixTest, transpose) {\n\tdouble v[] = {1,2,3,4,5,6,7,8,9};\n\tMatrix m(v);\n\tm.transpose();\n\tostringstream oss;\n\tm.write(oss);\n\tEXPECT_EQ(oss.str(), \"((1,4,7),(2,5,8),(3,6,9))\");\n\tEXPECT_EQ(m.toSVG(), \"matrix(1 2 4 5 7 8)\");\n}\n\n\nTEST(MatrixTest, scale) {\n\tScalingMatrix m(2,2);\n\tDPair p = m*DPair(3,3);\n\tEXPECT_DOUBLE_EQ(p.x(), 6);\n\tEXPECT_DOUBLE_EQ(p.y(), 6);\n\n\tm = ScalingMatrix(-2,-2);\n\tp = m*DPair(3,3);\n\tEXPECT_DOUBLE_EQ(p.x(), -6);\n\tEXPECT_DOUBLE_EQ(p.y(), -6);\n}\n\n\nTEST(MatrixTest, rotate) {\n\tRotationMatrix m(90);\n\tDPair p = m*DPair(2,0);\n\tEXPECT_NEAR(p.x(), 0, 0.0000000001);\n\tEXPECT_NEAR(p.y(), 2, 0.0000000001);\n\n\tp = m*p;\n\tEXPECT_NEAR(p.x(), -2, 0.0000000001);\n\tEXPECT_NEAR(p.y(), 0, 0.0000000001);\n}\n\n\nTEST(MatrixTest, isTranslation) {\n\tMatrix m(1);\n\tEXPECT_TRUE(m.isIdentity());\n\tdouble tx, ty;\n\tEXPECT_TRUE(m.isTranslation(tx, ty));\n\tEXPECT_EQ(tx, 0);\n\tEXPECT_EQ(ty, 0);\n\tm.translate(1,2);\n\tEXPECT_TRUE(m.isTranslation(tx, ty));\n\tEXPECT_EQ(tx, 1);\n\tEXPECT_EQ(ty, 2);\n\tm.scale(2, 2);\n\tEXPECT_FALSE(m.isTranslation(tx, ty));\n}\n\n\nTEST(MatrixTest, rmultiply) {\n\tconst Matrix m1({1, 2, 3, 4, 5, 6, 7, 8, 9});\n\tconst Matrix m2({9, 8, 7, 6, 5, 4, 3, 2, 1});\n\tEXPECT_NE(m1, m2);\n\tMatrix m3;\n\tEXPECT_EQ((m3 = m1).rmultiply(m2), Matrix({30, 24, 18, 84, 69, 54, 138, 114, 90}));\n\tEXPECT_EQ((m3 = m2).rmultiply(m1), Matrix({90, 114, 138, 54, 69, 84, 18, 24, 30}));\n\tEXPECT_EQ((m3 = m1).rmultiply(Matrix(1)), m1);\n}\n\n\nTEST(MatrixTest, lmultiply) {\n\tconst Matrix m1({1, 2, 3, 4, 5, 6, 7, 8, 9});\n\tconst Matrix m2({9, 8, 7, 6, 5, 4, 3, 2, 1});\n\tEXPECT_NE(m1, m2);\n\tMatrix m3;\n\tEXPECT_EQ((m3 = m1).lmultiply(m2), Matrix({90, 114, 138, 54, 69, 84, 18, 24, 30}));\n\tEXPECT_EQ((m3 = m2).lmultiply(m1), Matrix({30, 24, 18, 84, 69, 54, 138, 114, 90}));\n\tEXPECT_EQ((m3 = m1).lmultiply(Matrix(1)), m1);\n}\n\n\nTEST(MatrixTest, vec) {\n\tvector<double> v;\n\tfor (int i=1; i <= 15; ++i)\n\t\tv.push_back(i);\n\tMatrix m(v);\n\tostringstream oss;\n\tm.write(oss);\n\tEXPECT_EQ(oss.str(), \"((1,2,3),(4,5,6),(7,8,9))\");\n\toss.str(\"\");\n\n\tm.set(v, 2);\n\tm.write(oss);\n\tEXPECT_EQ(oss.str(), \"((3,4,5),(6,7,8),(9,10,11))\");\n}\n\n\nTEST(MatrixTest, det) {\n\tMatrix m1(1);\n\tEXPECT_EQ(det(m1), 1);\n\n\tdouble v2[] = {1,2,3, 4,5,6, 7,8,9};\n\tMatrix m2(v2);\n\tEXPECT_EQ(det(m2), 1*5*9 + 2*6*7 + 3*4*8 - 3*5*7 - 2*4*9 - 1*6*8);\n\n\tEXPECT_EQ(det(m2, 0, 0), 5*9-6*8);\n\tEXPECT_EQ(det(m2, 0, 1), 4*9-6*7);\n\tEXPECT_EQ(det(m2, 0, 2), 4*8-5*7);\n\tEXPECT_EQ(det(m2, 1, 0), 2*9-3*8);\n\n\tdouble v3[] = {1,1,1, 2,2,2, 3,3,3};\n\tMatrix m3(v3);\n\tEXPECT_EQ(det(m2), 0);\n\tm3.transpose();\n\tEXPECT_EQ(det(m2), 0);\n}\n\n\nTEST(MatrixTest, invert) {\n\tMatrix m1(1);\n\tEXPECT_EQ(m1.invert(), m1);\n\n\tdouble v2[] = {1,2,3, 2,3,1, 3,1,2};\n\tMatrix m2(v2);\n\tEXPECT_EQ(det(m2), -18);\n\n\tdouble v3[] = {5,-1,-7, -1,-7,5, -7,5,-1};\n\tMatrix m3(v3);\n\n\tm3 *= 1.0/det(m2);\n\tm2.invert();\n\tfor (int i=0; i < 3; ++i)\n\t\tfor (int j=0; j < 3; ++j)\n\t\t\tEXPECT_DOUBLE_EQ(m2.get(i,j), m3.get(i,j));\n\tMatrix m4{0};\n\tEXPECT_THROW(m4.invert(), exception);\n}\n\n\nTEST(MatrixTest, parse) {\n\tCalculator calc;\n\tcalc.setVariable(\"ux\", 0);\n\tcalc.setVariable(\"uy\", 0);\n\tcalc.setVariable(\"w\", 0);\n\tcalc.setVariable(\"h\", 0);\n\tEXPECT_EQ(Matrix(\"T1,-2\", calc), TranslationMatrix(1, -2));\n\tEXPECT_EQ(Matrix(\"R45\", calc), RotationMatrix(45));\n\tEXPECT_EQ(Matrix(\"S2,3\", calc), ScalingMatrix(2, 3));\n\tEXPECT_EQ(Matrix(\"FH1\", calc), Matrix({1, 0, 0, 0, -1, 2, 0, 0, 1}));\n\tEXPECT_EQ(Matrix(\"FV1\", calc), Matrix({-1, 0, 2, 0, 1, 0, 0, 0, 1}));\n\tEXPECT_EQ(Matrix(\"KX45\", calc), Matrix({1, 1, 0, 0, 1, 0, 0, 0, 1}));\n\tEXPECT_EQ(Matrix(\"KY45\", calc), Matrix({1, 0, 0, 1, 1, 0, 0, 0, 1}));\n\tEXPECT_EQ(Matrix(\"M1,2,3,4,5,6\", calc), Matrix({1, 2, 3, 4, 5, 6, 0, 0, 1}));\n\n\tMatrix m;\n\tm.set(\"R90 T1,1 S2\", calc);\n\tEXPECT_EQ(m, Matrix({0, -2, 2, 2, 0, 2, 0, 0, 1}));\n}\n\n\nTEST(MatrixTest, write) {\n\tostringstream oss;\n\tMatrix m(3);\n\toss << m;\n\tEXPECT_EQ(oss.str(), \"((3,0,0),(0,3,0),(0,0,3))\");\n}\n\n\nTEST(MatrixTest, fail) {\n\tCalculator calc;\n\tEXPECT_THROW(Matrix(\"R45\", calc), CalculatorException);\n\n\tcalc.setVariable(\"ux\", 0);\n\tcalc.setVariable(\"uy\", 0);\n\tcalc.setVariable(\"w\", 0);\n\tcalc.setVariable(\"h\", 0);\n\tEXPECT_THROW(Matrix(\"ABC\", calc), ParserException);   // invalid command\n\tEXPECT_THROW(Matrix(\"F1\", calc), ParserException);    // missing H or V\n\tEXPECT_THROW(Matrix(\"K45\", calc), ParserException);   // missing X or Y\n\tEXPECT_THROW(Matrix(\"KX\", calc), ParserException);    // missing argument\n\tEXPECT_THROW(Matrix(\"KX90\", calc), ParserException);  // invalid argument (pole at 90+180k degrees)\n\tEXPECT_THROW(Matrix(\"KY270\", calc), ParserException); // invalid argument (pole at 90+180k degrees)\n\tEXPECT_THROW(Matrix(\"S2,\", calc), ParserException);   // missing argument\n}\n\n\nTEST(MatrixTest, parseSVGTransform) {\n\tXMLString::DECIMAL_PLACES = 3;\n\tEXPECT_EQ(\n\t\tMatrix::parseSVGTransform(\"translate(50, 90)\").toSVG(),\n\t\t\"matrix(1 0 0 1 50 90)\");\n\tEXPECT_EQ(\n\t\tMatrix::parseSVGTransform(\"scale(10 20)\").toSVG(),\n\t\t\"matrix(10 0 0 20 0 0)\");\n\tEXPECT_EQ(\n\t\tMatrix::parseSVGTransform(\"rotate(-45)\").toSVG(),\n\t\t\"matrix(.707 -.707 .707 .707 0 0)\");\n\tEXPECT_EQ(\n\t\tMatrix::parseSVGTransform(\"translate(50, 90) rotate(-45) \").toSVG(),\n\t\t\"matrix(.707 -.707 .707 .707 50 90)\");\n\tEXPECT_EQ(\n\t\tMatrix::parseSVGTransform(\"translate(50, 90) rotate(-45) , translate(130 160)\").toSVG(),\n\t\t\"matrix(.707 -.707 .707 .707 255.061 111.213)\");\n}\n"
  },
  {
    "path": "tests/MessageExceptionTest.cpp",
    "content": "/*************************************************************************\n** MessageExceptionTest.cpp                                             **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <string>\n#include \"MessageException.hpp\"\n\nusing namespace std;\n\nstatic void throw_exception (const string &msg) {\n\tthrow MessageException(msg);\n}\n\n\nTEST(MessageExceptionTest, catch_direct) {\n\tbool caught=false;\n\ttry {\n\t\tthrow_exception(\"test message\");\n\t\tFAIL();\n\t}\n\tcatch (MessageException &e) {\n\t\tASSERT_STREQ(e.what(), \"test message\");\n\t\tcaught = true;\n\t}\n\tcatch (...) {\n\t\tFAIL();\n\t}\n\tASSERT_TRUE(caught);\n}\n\n\nTEST(MessageExceptionTest, catch_indirect1) {\n\tbool caught=false;\n\ttry {\n\t\tthrow_exception(\"test message\");\n\t\tFAIL();\n\t}\n\tcatch (exception &e) {\n\t\tASSERT_STREQ(e.what(), \"test message\");\n\t\tcaught = true;\n\t}\n\tcatch (...) {\n\t\tFAIL();\n\t}\n\tASSERT_TRUE(caught);\n}\n\n\nTEST(MessageExceptionTest, catch_indirect2) {\n\tbool caught=false;\n\ttry {\n\t\tthrow_exception(\"test message\");\n\t\tFAIL();\n\t}\n\tcatch (...) {\n\t\tcaught = true;\n\t}\n\tASSERT_TRUE(caught);\n}\n\n"
  },
  {
    "path": "tests/NumericRangesTest.cpp",
    "content": "/*************************************************************************\n** NumericRagesTest.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"NumericRanges.hpp\"\n\nusing namespace std;\n\nTEST(NumericRangesTest, construct) {\n\tNumericRanges<int> ranges{{5,9}, {20,31}};\n\tEXPECT_EQ(ranges.size(), 2u);\n\tauto it = ranges.begin();\n\tASSERT_NE(it, ranges.end());\n\tEXPECT_EQ(it->first, 5);\n\tEXPECT_EQ(it->second, 9);\n\t++it;\n\tEXPECT_EQ(it->first, 20);\n\tEXPECT_EQ(it->second, 31);\n\t++it;\n\tEXPECT_EQ(it, ranges.end());\n}\n\nTEST(NumericRangesTest, addRange1) {\n\tNumericRanges<int> ranges;\n\tEXPECT_EQ(ranges.size(), 0u);\n\tranges.addRange (5);\n\tranges.addRange (2);\n\tEXPECT_EQ(ranges.size(), 2u);\n\tauto it = ranges.begin();\n\tASSERT_NE(it, ranges.end());\n\tEXPECT_EQ(it->first, 2);\n\tEXPECT_EQ(it->second, 2);\n\t++it;\n\tEXPECT_EQ(it->first, 5);\n\tEXPECT_EQ(it->second, 5);\n\t++it;\n\tEXPECT_EQ(it, ranges.end());\n}\n\nTEST(NumericRangesTest, addRange2) {\n\tNumericRanges<int> ranges;\n\tEXPECT_EQ(ranges.size(), 0u);\n\tranges.addRange (5);\n\tranges.addRange (4);\n\tEXPECT_EQ(ranges.size(), 1u);\n\tauto it = ranges.begin();\n\tASSERT_NE(it, ranges.end());\n\tEXPECT_EQ(it->first, 4);\n\tEXPECT_EQ(it->second, 5);\n\t++it;\n\tEXPECT_EQ(it, ranges.end());\n}\n\nTEST(NumericRangesTest, addRange3) {\n\tNumericRanges<int> ranges;\n\tEXPECT_EQ(ranges.size(), 0u);\n\tranges.addRange (5);\n\tranges.addRange (6);\n\tEXPECT_EQ(ranges.size(), 1u);\n\tauto it = ranges.begin();\n\tASSERT_NE(it, ranges.end());\n\tEXPECT_EQ(it->first, 5);\n\tEXPECT_EQ(it->second, 6);\n\t++it;\n\tEXPECT_EQ(it, ranges.end());\n}\n\nTEST(NumericRangesTest, addRange4) {\n\tNumericRanges<int> ranges;\n\tEXPECT_EQ(ranges.size(), 0u);\n\tranges.addRange (5, 10);\n\tranges.addRange (4, 1);\n\tEXPECT_EQ(ranges.size(), 1u);\n\tauto it = ranges.begin();\n\tASSERT_NE(it, ranges.end());\n\tEXPECT_EQ(it->first, 1);\n\tEXPECT_EQ(it->second, 10);\n\t++it;\n\tEXPECT_EQ(it, ranges.end());\n}\n\nTEST(NumericRangesTest, addRange5) {\n\tNumericRanges<int> ranges;\n\tEXPECT_EQ(ranges.size(), 0u);\n\tranges.addRange (5, 10);\n\tranges.addRange (1, 8);\n\tEXPECT_EQ(ranges.size(), 1u);\n\tauto it = ranges.begin();\n\tASSERT_NE(it, ranges.end());\n\tEXPECT_EQ(it->first, 1);\n\tEXPECT_EQ(it->second, 10);\n\t++it;\n\tEXPECT_EQ(it, ranges.end());\n}\n\nTEST(NumericRangesTest, addRange6) {\n\tNumericRanges<int> ranges;\n\tEXPECT_EQ(ranges.size(), 0u);\n\tranges.addRange (5, 10);\n\tranges.addRange (1, 11);\n\tEXPECT_EQ(ranges.size(), 1u);\n\tauto it = ranges.begin();\n\tASSERT_NE(it, ranges.end());\n\tEXPECT_EQ(it->first, 1);\n\tEXPECT_EQ(it->second, 11);\n\t++it;\n\tEXPECT_EQ(it, ranges.end());\n}\n\nTEST(NumericRangesTest, addRange7) {\n\tNumericRanges<int> ranges;\n\tEXPECT_EQ(ranges.size(), 0u);\n\tranges.addRange (5, 10);\n\tranges.addRange (0, 3);\n\tEXPECT_EQ(ranges.size(), 2u);\n\tauto it = ranges.begin();\n\tASSERT_NE(it, ranges.end());\n\tEXPECT_EQ(it->first, 0);\n\tEXPECT_EQ(it->second, 3);\n\t++it;\n\tEXPECT_EQ(it->first, 5);\n\tEXPECT_EQ(it->second, 10);\n\t++it;\n\tEXPECT_EQ(it, ranges.end());\n}\n\nTEST(NumericRangesTest, valueExists) {\n\tNumericRanges<int> ranges;\n\tEXPECT_EQ(ranges.size(), 0u);\n\tranges.addRange (8, 15);\n\tranges.addRange (0, 3);\n\tEXPECT_FALSE(ranges.valueExists(-1));\n\tfor (int i=0; i <= 15; ++i)\n\t\tEXPECT_NE(ranges.valueExists(i), i > 3 && i < 8) << i;\n\tEXPECT_FALSE(ranges.valueExists(16));\n}\n\n\nTEST(NumericRangesTest, iterate1) {\n\tNumericRanges<int> ranges({{3, 9}, {15, 20}});\n\tauto it = ranges.valueIterator();\n\tASSERT_TRUE(it.valid());\n\tfor (int i=3; i <= 9; i++) {\n\t\tEXPECT_EQ(*it, i);\n\t\tASSERT_TRUE(it.valid());\n\t\t++it;\n\t}\n\tfor (int i=15; i <= 20; i++) {\n\t\tEXPECT_EQ(*it, i);\n\t\tASSERT_TRUE(it.valid());\n\t\t++it;\n\t}\n\tASSERT_FALSE(it.valid());\n}\n\n\nTEST(NumericRangesTest, iterate2) {\n\tNumericRanges<int> ranges({{3, 9}});\n\tauto it = ranges.valueIterator();\n\tEXPECT_EQ(*it, 3);\n\t++it;\n\tEXPECT_EQ(*it, 4);\n\tit++;\n\tEXPECT_EQ(*it, 5);\n\tEXPECT_EQ(*it++, 5);\n\tEXPECT_EQ(*it, 6);\n}"
  },
  {
    "path": "tests/OFMReaderTest.cpp",
    "content": "/*************************************************************************\n** OFMReaderTest.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <fstream>\n#include <string>\n#include <vector>\n#include \"Length.hpp\"\n#include \"OFM.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\nusing namespace std;\n\n\nclass OFMReaderTest : public ::testing::Test {\n\tpublic:\n\t\tvoid SetUp () override {\n\t\t\tstring fname = string(SRCDIR)+\"/data/omarab.ofm\";\n\t\t\tifstream ifs(fname, ios::binary);\n\t\t\tASSERT_TRUE(ifs.is_open()) << \"failed to open \" << fname;\n\t\t\tofm0.read(ifs);\n\t\t\tscale0 = ofm0.getDesignSize();\n\t\t\tifs.close();\n\n\t\t\tfname = string(SRCDIR)+\"/data/upjf-g.ofm\";\n\t\t\tifs.open(fname, ios::binary);\n\t\t\tASSERT_TRUE(ifs.is_open()) << \"failed to open \" << fname;\n\t\t\tofm1.read(ifs);\n\t\t\tscale1 = ofm1.getDesignSize();\n\t\t}\n\n\tprotected:\n\t\tOFM0 ofm0;\n\t\tOFM1 ofm1;\n\t\tdouble scale0=0, scale1=0;\n};\n\n\nTEST_F(OFMReaderTest, properties) {\n\tEXPECT_EQ(ofm0.getChecksum(), 0x9DCC4880u);\n\tEXPECT_FALSE(ofm0.verticalLayout());\n\tEXPECT_EQ(ofm0.firstChar(), 0x21u);\n\tEXPECT_EQ(ofm0.lastChar(), 0x059Fu);\n\tEXPECT_NEAR(ofm0.getDesignSize(), 10.0*Length::pt2bp, 0.000001);\n\n\tEXPECT_EQ(ofm1.getChecksum(), 0u);\n\tEXPECT_FALSE(ofm1.verticalLayout());\n\tEXPECT_EQ(ofm1.firstChar(), 0x2600u);\n\tEXPECT_EQ(ofm1.lastChar(), 0xFFFFu);\n\tEXPECT_NEAR(ofm1.getDesignSize(), 10.0*Length::pt2bp, 0.000001);\n}\n\n\nTEST_F(OFMReaderTest, charWidth) {\n\tEXPECT_NEAR(ofm0.getCharWidth(0x029D), 0.853*scale0, 0.0001);\n\tEXPECT_NEAR(ofm0.getCharWidth(0x02A0), 0.444*scale0, 0.0001);\n\tEXPECT_NEAR(ofm0.getCharWidth(0x1000), 0, 0.0001);\n\n\tEXPECT_NEAR(ofm1.getCharWidth(0x2600), 1.0*scale1, 0.0001);\n\tEXPECT_NEAR(ofm1.getCharWidth(0xFF00), 0.5*scale1, 0.0001);\n\tEXPECT_NEAR(ofm1.getCharWidth(0xFF01), 0.5*scale1, 0.0001);\n}\n\n\nTEST_F(OFMReaderTest, charHeight) {\n\tEXPECT_NEAR(ofm0.getCharHeight(0x029D), 0.298*scale0, 0.0001);\n\tEXPECT_NEAR(ofm0.getCharHeight(0x02A0), 0.685*scale0, 0.0001);\n\tEXPECT_DOUBLE_EQ(ofm0.getCharHeight(0x1000), 0);\n\n\tEXPECT_NEAR(ofm1.getCharHeight(0x2600), 0.9*scale1, 0.0001);\n\tEXPECT_NEAR(ofm1.getCharHeight(0xFF00), 0.9*scale1, 0.0001);\n\tEXPECT_NEAR(ofm1.getCharHeight(0xFF01), 0.9*scale1, 0.0001);\n}\n\n\nTEST_F(OFMReaderTest, charDepth) {\n\tEXPECT_NEAR(ofm0.getCharDepth(0x029D), 0.3*scale0, 0.0001);\n\tEXPECT_NEAR(ofm0.getCharDepth(0x02A0), 0, 0.0001);\n\tEXPECT_NEAR(ofm0.getCharDepth(0x1000), 0, 0.0001);\n\n\tEXPECT_NEAR(ofm1.getCharDepth(0x2600), 0.1*scale1, 0.0001);\n\tEXPECT_NEAR(ofm1.getCharDepth(0xFF00), 0.1*scale1, 0.0001);\n\tEXPECT_NEAR(ofm1.getCharDepth(0xFF01), 0.1*scale1, 0.0001);\n}\n\n\nTEST_F(OFMReaderTest, italicCorr) {\n\tEXPECT_DOUBLE_EQ(ofm0.getItalicCorr(0x029D), 0);\n\tEXPECT_DOUBLE_EQ(ofm0.getItalicCorr(0x02A0), 0);\n\tEXPECT_DOUBLE_EQ(ofm0.getItalicCorr(0x1000), 0);\n\n\tEXPECT_DOUBLE_EQ(ofm1.getItalicCorr(0x2600), 0);\n\tEXPECT_DOUBLE_EQ(ofm1.getItalicCorr(0xFF00), 0);\n\tEXPECT_DOUBLE_EQ(ofm1.getItalicCorr(0xFF01), 0);\n}\n\n\nTEST_F(OFMReaderTest, params) {\n\tEXPECT_NEAR(ofm0.getSpace(), 0.5*scale0, 0.0001);\n\tEXPECT_NEAR(ofm0.getSpaceShrink(), 0.1*scale0, 0.0001);\n\tEXPECT_NEAR(ofm0.getSpaceStretch(), 0.3*scale0, 0.0001);\n\tEXPECT_NEAR(ofm0.getQuad(), 1.0*scale0, 0.0001);\n\n\tEXPECT_NEAR(ofm1.getSpace(), 0, 0.0001);\n\tEXPECT_NEAR(ofm1.getSpaceShrink(), 0, 0.0001);\n\tEXPECT_NEAR(ofm1.getSpaceStretch(), 0.1*scale1, 0.0001);\n\tEXPECT_NEAR(ofm1.getQuad(), 1.0*scale1, 0.0001);\n}\n"
  },
  {
    "path": "tests/PDFParserTest.cpp",
    "content": "/*************************************************************************\n** PDFParserTest.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"PDFParser.hpp\"\n\nusing namespace std;\n\nTEST(PDFParserTest, empty) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(\"\");\n\tEXPECT_TRUE(objects.empty());\n\tobjects = parser.parse(\"  \\n   \\r  %comment 1 2 3 \");\n\tEXPECT_TRUE(objects.empty());\n}\n\n\nTEST(PDFParserTest, numbers) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(\"5 1 +2 -3 1.1 9. .1 -7.2\");\n\tASSERT_EQ(objects.size(), 8u);\n\n\tsize_t count=0;\n\tfor (int n : {5, 1, 2, -3}) {\n\t\tASSERT_NE(objects[count].get<int>(), nullptr);\n\t\tEXPECT_EQ(*objects[count++].get<int>(), n);\n\t}\n\tfor (double n : {1.1, 9.0, 0.1, -7.2}) {\n\t\tASSERT_NE(objects[count].get<double>(), nullptr);\n\t\tEXPECT_DOUBLE_EQ(*objects[count++].get<double>(), n);\n\t}\n}\n\n\nTEST(PDFParserTest, literal_strings) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(\"()\");\n\tASSERT_EQ(objects.size(), 1u);\n\tASSERT_NE(objects[0].get<string>(), nullptr);\n\tEXPECT_TRUE(objects[0].get<string>()->empty());\n\n\tobjects = parser.parse(\"(literal string) (balanced (bra(ck)ets) inside)(a\\\\n\\\\(b\\\\c)\");\n\tASSERT_EQ(objects.size(), 3u);\n\n\tsize_t count=0;\n\tfor (string str : {\"literal string\", \"balanced (bra(ck)ets) inside\", \"a\\n(bc\"}) {\n\t\tASSERT_NE(objects[count].get<string>(), nullptr);\n\t\tASSERT_EQ(*objects[count++].get<string>(), str);\n\t}\n\n\tobjects = parser.parse(R\"*( ( octal \\1\\12\\123\\1234 ))*\");\n\tASSERT_EQ(objects.size(), 1u);\n\tASSERT_NE(objects[0].get<string>(), nullptr);\n\tEXPECT_EQ(objects[0].get<string>()->size(), 13u);\n\tEXPECT_EQ(*objects[0].get<string>(), \" octal \\001\\012\\123\\1234 \");\n\n\tobjects = parser.parse(\"(split \\\\\\nline)\");\n\tASSERT_EQ(objects.size(), 1u);\n\tASSERT_NE(objects[0].get<string>(), nullptr);\n\tEXPECT_EQ(*objects[0].get<string>(), \"split line\");\n\n\tEXPECT_THROW(parser.parse(\"(missing parentheses\"), PDFException);\n}\n\n\nTEST(PDFParserTest, hex_strings) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(\"<>< ><\\n\\r\\f>\");\n\tASSERT_EQ(objects.size(), 3u);\n\tfor (size_t i=0; i < objects.size(); i++) {\n\t\tASSERT_NE(objects[i].get<string>(), nullptr);\n\t\tEXPECT_TRUE(objects[i].get<string>()->empty());\n\t}\n\n\tobjects = parser.parse(\"<202>\");\n\tASSERT_EQ(objects.size(), 1u);\n\tASSERT_NE(objects[0].get<string>(), nullptr);\n\tEXPECT_EQ(*objects[0].get<string>(), \"  \");\n\n\tobjects = parser.parse(\"<616263646566 6768\\n696A6b6c6D6E6F 7>\");\n\tASSERT_EQ(objects.size(), 1u);\n\tASSERT_NE(objects[0].get<string>(), nullptr);\n\tEXPECT_EQ(*objects[0].get<string>(), \"abcdefghijklmnop\");\n\n\tEXPECT_THROW(parser.parse(\"<abcdefinvalid>\"), PDFException);\n\tEXPECT_THROW(parser.parse(\"<missing parentheses\"), PDFException);\n}\n\n\nTEST(PDFParserTest, arrays) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(\"[1 2.0/name(string) [5] <6162>]\");\n\tASSERT_EQ(objects.size(), 1u);\n\tconst PDFArray *arr = objects[0].get<PDFArray>();\n\tASSERT_NE(arr, nullptr);\n\tASSERT_EQ(arr->size(), 6u);\n\n\t// integer number\n\tASSERT_NE((*arr)[0].get<int>(), nullptr);\n\tASSERT_EQ(*(*arr)[0].get<int>(), 1);\n\n\t// real number\n\tASSERT_NE((*arr)[1].get<double>(), nullptr);\n\tASSERT_DOUBLE_EQ(*(*arr)[1].get<double>(), 2.0);\n\n\t// name\n\tASSERT_NE((*arr)[2].get<PDFName>(), nullptr);\n\tASSERT_EQ(*(*arr)[2].get<PDFName>(), PDFName(\"name\"));\n\n\t// literal string\n\tASSERT_NE((*arr)[3].get<string>(), nullptr);\n\tASSERT_EQ(*(*arr)[3].get<string>(), \"string\");\n\n\t// inner array\n\tASSERT_NE((*arr)[4].get<PDFArray>(), nullptr);\n\tASSERT_EQ((*arr)[4].get<PDFArray>()->size(), 1u);\n\tASSERT_NE((*arr)[4].get<PDFArray>()->at(0).get<int>(), nullptr);\n\tASSERT_EQ(*(*arr)[4].get<PDFArray>()->at(0).get<int>(), 5);\n\n\t// hex string\n\tASSERT_NE((*arr)[5].get<string>(), nullptr);\n\tASSERT_EQ(*(*arr)[5].get<string>(), \"ab\");\n}\n\n\nTEST(PDFParserTest, dictionary) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(\"<< >>\");\n\tASSERT_EQ(objects.size(), 1u);\n\tconst PDFDict *dict = objects[0].get<PDFDict>();\n\tASSERT_NE(dict, nullptr);\n\tASSERT_TRUE(dict->empty());\n\n\tobjects = parser.parse(\"<</int 4 /real 5.5/str(string value)/color[0 1 1]>>\");\n\tASSERT_EQ(objects.size(), 1u);\n\tdict = objects[0].get<PDFDict>();\n\tASSERT_NE(dict, nullptr);\n\tASSERT_EQ(dict->size(), 4u);\n\n\t// integer number\n\tASSERT_NE(dict->find(\"int\"), dict->end());\n\tASSERT_NE(dict->find(\"int\")->second.get<int>(), nullptr);\n\tEXPECT_EQ(*dict->find(\"int\")->second.get<int>(), 4);\n\n\tASSERT_NE(dict->find(\"real\"), dict->end());\n\tASSERT_NE(dict->find(\"real\")->second.get<double>(), nullptr);\n\tEXPECT_DOUBLE_EQ(*dict->find(\"real\")->second.get<double>(), 5.5);\n\n\tASSERT_NE(dict->find(\"str\"), dict->end());\n\tASSERT_NE(dict->find(\"str\")->second.get<string>(), nullptr);\n\tEXPECT_EQ(*dict->find(\"str\")->second.get<string>(), \"string value\");\n\n\tASSERT_NE(dict->find(\"color\"), dict->end());\n\tASSERT_NE(dict->find(\"color\")->second.get<PDFArray>(), nullptr);\n\tconst PDFArray &arr = *dict->find(\"color\")->second.get<PDFArray>();\n\tASSERT_EQ(arr.size(), 3u);\n\tEXPECT_EQ(*arr[0].get<int>(), 0);\n\tEXPECT_EQ(*arr[1].get<int>(), 1);\n\tEXPECT_EQ(*arr[2].get<int>(), 1);\n\n\tEXPECT_EQ(dict->find(\"nokey\"), dict->end());\n\n\tEXPECT_THROW(parser.parse(\"<</int >>\"), PDFException);  // missing value\n\tEXPECT_THROW(parser.parse(\"<</int 4>\"), PDFException);  // missing \">\"\n\tEXPECT_THROW(parser.parse(\"<</int 4\"), PDFException);   // missing \">>\"\n}\n\n\nTEST(PDFParserTest, indirect_objects) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(\"1 0 obj\\n1 2 3 4 5endobj 2 5 R\");\n\tASSERT_EQ(objects.size(), 2u);\n\tASSERT_NE(objects[0].get<PDFIndirectObject>(), nullptr);\n\tEXPECT_EQ(objects[0].get<PDFIndirectObject>()->objnum, 1);\n\tEXPECT_EQ(objects[0].get<PDFIndirectObject>()->gennum, 0);\n\n\tASSERT_NE(objects[1].get<PDFObjectRef>(), nullptr);\n\tEXPECT_EQ(objects[1].get<PDFObjectRef>()->objnum, 2);\n\tEXPECT_EQ(objects[1].get<PDFObjectRef>()->gennum, 5);\n\n\tEXPECT_THROW(parser.parse(\"1 obj\\n1 2 3 4 5endobj\"), PDFException);\n\tEXPECT_THROW(parser.parse(\"1 (string)obj\\n1 2 3 4 5endobj\"), PDFException);\n\n\tEXPECT_THROW(parser.parse(\"1 R\"), PDFException);\n\tEXPECT_THROW(parser.parse(\"1 (string)R\"), PDFException);\n}\n\n\nTEST(PDFParserTest, stream) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(\"stream\\n1 2 3 4 endstream\");\n\tASSERT_EQ(objects.size(), 1u);\n\tASSERT_NE(objects[0].get<PDFStream>(), nullptr);\n}\n\n\nTEST(PDFParserTest, ops1) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(\"@xpos 1op op2 1..2\");\n\tASSERT_EQ(objects.size(), 4u);\n\tsize_t count=0;\n\tfor (string str : {\"@xpos\", \"1op\", \"op2\", \"1..2\"}) {\n\t\tASSERT_NE(objects[count].get<PDFOperator>(), nullptr);\n\t\tASSERT_EQ(objects[count++].get<PDFOperator>()->opname, str);\n\t}\n}\n\n\nTEST(PDFParserTest, ops2) {\n\tPDFParser parser;\n\tvector<PDFObject> objects = parser.parse(\"@xpos 1op op2 @ypos\", [](const string &str, vector<PDFObject> &objects) {\n\t\tif (str == \"@xpos\" || str == \"@ypos\")\n\t\t\tobjects.emplace_back(PDFObject(str == \"@xpos\" ? 1.23 : 3.21));\n\t\telse\n\t\t\tobjects.emplace_back(PDFOperator(str));\n\t});\n\tASSERT_EQ(objects.size(), 4u);\n\tsize_t count=0;\n\tfor (string str : {\"1.23\", \"1op\", \"op2\", \"3.21\"}) {\n\t\tASSERT_EQ(string(objects[count++]), str);\n\t}\n}\n"
  },
  {
    "path": "tests/PSInterpreterTest.cpp",
    "content": "/*************************************************************************\n** PSInterpreterTest.cpp                                                **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"PSInterpreter.hpp\"\n\n#include <sstream>\n#include <vector>\n\nusing namespace std;\n\nclass PSTestActions : public PSActions {\n\tpublic:\n\t\tvoid applyscalevals (vector<double> &p) override         {print(\"applyscalevals\", p);}\n\t\tvoid clip (vector<double> &p) override                   {print(\"clip\", p);}\n\t\tvoid clippath (vector<double> &p) override               {print(\"clippath\", p);}\n\t\tvoid closepath (vector<double> &p) override              {print(\"closepath\", p);}\n\t\tvoid curveto (vector<double> &p) override                {print(\"curveto\", p);}\n\t\tvoid eoclip (vector<double> &p) override                 {print(\"eoclip\", p);}\n\t\tvoid eofill (vector<double> &p) override                 {print(\"eofill\", p);}\n\t\tvoid fill (vector<double> &p) override                   {print(\"fill\", p);}\n\t\tvoid gsave (vector<double> &p) override                  {print(\"gsave\", p);}\n\t\tvoid grestore (vector<double> &p) override               {print(\"grestore\", p);}\n\t\tvoid grestoreall (std::vector<double> &p) override       {print(\"grestoreall\", p);}\n\t\tvoid image (std::vector<double> &p) override             {print(\"image\", p);}\n\t\tvoid initclip (vector<double> &p) override               {print(\"initclip\", p);}\n\t\tvoid lineto (vector<double> &p) override                 {print(\"lineto\", p);}\n\t\tvoid moveto (vector<double> &p) override                 {print(\"moveto\", p);}\n\t\tvoid makepattern (vector<double> &p) override            {print(\"makepattern\", p);}\n\t\tvoid setpattern (vector<double> &p) override             {print(\"setpattern\", p);}\n\t\tvoid setpagedevice (vector<double> &p) override          {print(\"setpagedevice\", p);}\n\t\tvoid newpath (vector<double> &p) override                {print(\"newpath\", p);}\n\t\tvoid querypos (vector<double> &p) override               {print(\"querypos\", p);}\n\t\tvoid restore(std::vector<double> &p) override            {print(\"restore\", p);}\n\t\tvoid rotate (vector<double> &p) override                 {print(\"rotate\", p);}\n\t\tvoid save(std::vector<double> &p) override               {print(\"save\", p);}\n\t\tvoid scale (vector<double> &p) override                  {print(\"scale\", p);}\n\t\tvoid setalphaisshape (vector<double> &p) override        {print(\"setalphaisshape\", p);}\n\t\tvoid setblendmode (vector<double> &p) override           {print(\"setblendmode\", p);}\n\t\tvoid setcolorspace (vector<double> &p) override          {print(\"setcolorspace\", p);}\n\t\tvoid setcmykcolor (vector<double> &p) override           {print(\"setcmykcolor\", p);}\n\t\tvoid setdash (vector<double> &p) override                {print(\"setdash\", p);}\n\t\tvoid setfillconstantalpha (vector<double> &p) override   {print(\"setfillconstantalpha\", p);}\n\t\tvoid setgray (vector<double> &p) override                {print(\"setgray\", p);}\n\t\tvoid sethsbcolor (vector<double> &p) override            {print(\"sethsbcolor\", p);}\n\t\tvoid setlinecap (vector<double> &p) override             {print(\"setlinecap\", p);}\n\t\tvoid setlinejoin (vector<double> &p) override            {print(\"setlinejoin\", p);}\n\t\tvoid setlinewidth (vector<double> &p) override           {print(\"setlinewidth\", p);}\n\t\tvoid setmatrix (vector<double> &p) override              {print(\"setmatrix\", p);}\n\t\tvoid setmiterlimit (vector<double> &p) override          {print(\"setmiterlimit\", p);}\n\t\tvoid setnulldevice (vector<double> &p) override          {print(\"setnulldevice\", p);}\n\t\tvoid setrgbcolor (vector<double> &p) override            {print(\"setrgbcolor\", p);}\n\t\tvoid setstrokeconstantalpha (vector<double> &p) override {print(\"setstrokeconstantalpha\", p);}\n\t\tvoid shfill (vector<double> &p) override                 {print(\"shfill\", p);}\n\t\tvoid stroke (vector<double> &p) override                 {print(\"stroke\", p);}\n\t\tvoid translate (vector<double> &p) override              {print(\"translate\", p);}\n\n\n\t\tstring result () const {return _oss.str();}\n\t\tvoid clear ()          {_oss.str(\"\");}\n\n\tprotected:\n\t\tvoid print (const char *op, const vector<double> &p) {\n\t\t\t_oss << op;\n\t\t\tfor (size_t i=0; i < p.size(); ++i)\n\t\t\t\t_oss << ' ' << p[i];\n\t\t\t_oss << ';';\n\t\t}\n\n\tprivate:\n\t\tostringstream _oss;\n};\n\n\nTEST(PSInterpreterTest, init) {\n\tPSTestActions actions;\n\tPSInterpreter psi(&actions);\n\tASSERT_TRUE(psi.active());\n\tEXPECT_EQ(actions.result(), \"\");\n}\n\n\nTEST(PSInterpreterTest, gsave_grestore) {\n\tPSTestActions actions;\n\tPSInterpreter psi(&actions);\n\tpsi.execute(\"gsave \");\n\tEXPECT_EQ(actions.result(), \"gsave;\");\n\tactions.clear();\n\n\tpsi.execute(\"grestore \");\n\tif (psi.hasFullOpacitySupport())\n\t\tEXPECT_EQ(actions.result(), \"setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setlinewidth 1;setlinecap 0;setlinejoin 0;setmiterlimit 10;setblendmode 0;setalphaisshape 0;setstrokeconstantalpha 1;setfillconstantalpha 1;setcolorspace 0;setrgbcolor 0 0 0;setdash 0;grestore;\");\n\telse\n\t\tEXPECT_EQ(actions.result(), \"setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setlinewidth 1;setlinecap 0;setlinejoin 0;setmiterlimit 10;setcolorspace 0;setrgbcolor 0 0 0;setdash 0;grestore;\");\n\tactions.clear();\n\n\tpsi.execute(\"1 setlinecap 5 setmiterlimit 0 1 0 setrgbcolor gsave 0 setlinecap 10 setmiterlimit \");\n\tEXPECT_EQ(actions.result(), \"setlinecap 1;setmiterlimit 5;setrgbcolor 0 1 0;gsave;setlinecap 0;setmiterlimit 10;\");\n\tactions.clear();\n\n\tpsi.execute(\"grestore \");\n\tif (psi.hasFullOpacitySupport())\n\t\tEXPECT_EQ(actions.result(), \"setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setlinewidth 1;setlinecap 1;setlinejoin 0;setmiterlimit 5;setblendmode 0;setalphaisshape 0;setstrokeconstantalpha 1;setfillconstantalpha 1;setcolorspace 0;setrgbcolor 0 1 0;setdash 0;grestore;\");\n\telse\n\t\tEXPECT_EQ(actions.result(), \"setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;setlinewidth 1;setlinecap 1;setlinejoin 0;setmiterlimit 5;setcolorspace 0;setrgbcolor 0 1 0;setdash 0;grestore;\");\n}\n\n\nTEST(PSInterpreterTest, stroke_fill) {\n\tPSTestActions actions;\n\tPSInterpreter psi(&actions);\n\tpsi.execute(\"0 0 moveto 10 10 lineto 0 10 lineto closepath stroke \");\n\tEXPECT_EQ(actions.result(), \"setcolorspace 0;setrgbcolor 0 0 0;newpath 0;moveto 0 0;lineto 10 10;lineto 0 10;closepath;stroke;\");\n\tactions.clear();\n\n\tpsi.execute(\"0 0 moveto 10 10 lineto 0 10 lineto closepath fill \");\n\tEXPECT_EQ(actions.result(), \"setcolorspace 0;setrgbcolor 0 0 0;newpath 0;moveto 0 0;lineto 10 10;lineto 0 10;closepath;fill;\");\n}\n\n\nTEST(PSInterpreterTest, clip) {\n\tPSTestActions actions;\n\tPSInterpreter psi(&actions);\n\tpsi.execute(\"initclip \");\n\tEXPECT_EQ(actions.result(), \"initclip;\");\n\tactions.clear();\n\n\tpsi.execute(\"0 0 moveto 10 10 lineto 0 10 lineto closepath clip \");\n\tEXPECT_EQ(actions.result(), \"newpath 0;moveto 0 0;lineto 10 10;lineto 0 10;closepath;clip;\");\n}\n\n\nTEST(PSInterpreterTest, transform) {\n\tPSTestActions actions;\n\tPSInterpreter psi(&actions);\n\tpsi.execute(\"10 10 scale 90 rotate 100 -100 translate \");\n\tEXPECT_EQ(actions.result(), \"scale 10 10;applyscalevals 10 10 1;rotate 90;applyscalevals 10 10 0;translate 100 -100;\");\n}\n\n\nTEST(PSInterpreterTest, calculate) {\n\tPSTestActions actions;\n\tPSInterpreter psi(&actions);\n\tpsi.execute(\"2 3 add 4 mul 5 div rotate \");\n\tASSERT_EQ(actions.result(), \"rotate 4;applyscalevals 1 1 0.997564;\");\n}\n\n\nTEST(PSInterpreterTest, setlinewidth) {\n\tPSTestActions actions;\n\tPSInterpreter psi(&actions);\n\tpsi.execute(\"10 setlinewidth \");\n\tEXPECT_EQ(actions.result(), \"setlinewidth 10;\");\n\tactions.clear();\n\n\tpsi.execute(\"5 5 scale 10 setlinewidth \");\n\tEXPECT_EQ(actions.result(), \"scale 5 5;applyscalevals 5 5 1;setlinewidth 10;\");\n\tactions.clear();\n\n\tpsi.execute(\"90 rotate 10 setlinewidth \");\n\tEXPECT_EQ(actions.result(), \"rotate 90;applyscalevals 5 5 0;setlinewidth 10;\");\n\tactions.clear();\n\n\tpsi.execute(\"-30 rotate 10 setlinewidth \");\n\tEXPECT_EQ(actions.result(), \"rotate -30;applyscalevals 5 5 0.5;setlinewidth 10;\");\n}\n\n\nTEST(PSInterpreterTest, matrix) {\n\tPSTestActions actions;\n\tPSInterpreter psi(&actions);\n\tpsi.execute(\"matrix setmatrix \");\n\tEXPECT_EQ(actions.result(), \"setmatrix 1 0 0 1 0 0;applyscalevals 1 1 1;\");\n\tactions.clear();\n\tpsi.execute(\"10 100 translate 30 rotate matrix currentmatrix setmatrix \");\n\tEXPECT_EQ(actions.result(), \"translate 10 100;rotate 30;applyscalevals 1 1 0.866025;setmatrix 0.866025 0.5 -0.5 0.866025 10 100;applyscalevals 1 1 0.866025;\");\n}\n"
  },
  {
    "path": "tests/PageRagesTest.cpp",
    "content": "/*************************************************************************\n** PageRagesTest.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <ostream>\n#include \"PageRanges.hpp\"\n\nusing namespace std;\n\n\nstruct Range\n{\n\tint l, r;\n};\n\n\nstatic bool is_equal (const PageRanges &pr, const Range *r) {\n\tint i=0;\n\tfor (PageRanges::ConstIterator it=pr.begin(); it != pr.end(); ++it) {\n\t\tif (it->first != r[i].l || it->second != r[i].r)\n\t\t\treturn false;\n\t\t++i;\n\t}\n\treturn true;\n}\n\n\nTEST(PageRangesTest, single) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"123\"));\n\tASSERT_FALSE(pr.empty());\n\tASSERT_EQ(pr.ranges().front(), PageRanges::Range(123,123));\n\tASSERT_EQ(pr.numberOfPages(), 1u);\n}\n\n\nTEST(PageRangesTest, single_range) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"3-19\"));\n\tASSERT_FALSE(pr.empty());\n\tASSERT_EQ(pr.ranges().front(), PageRanges::Range(3,19));\n\tASSERT_EQ(pr.numberOfPages(), 17u);\n}\n\n\nTEST(PageRangesTest, single_range_inv) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"19-3\"));\n\tASSERT_FALSE(pr.empty());\n\tASSERT_EQ(pr.ranges().front(), PageRanges::Range(3,19));\n\tASSERT_EQ(pr.numberOfPages(), 17u);\n}\n\n\nTEST(PageRangesTest, single_range_lopen) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"-19\"));\n\tASSERT_FALSE(pr.empty());\n\tASSERT_EQ(pr.ranges().front(), PageRanges::Range(1,19));\n\tASSERT_EQ(pr.numberOfPages(), 19u);\n}\n\n\nTEST(PageRangesTest, single_range_ropen) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"4-\", 100));\n\tASSERT_FALSE(pr.empty());\n\tASSERT_EQ(pr.ranges().front(), PageRanges::Range(4,100));\n\tASSERT_EQ(pr.numberOfPages(), 97u);\n}\n\n\nTEST(PageRangesTest, out_of_bounds1) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"11\", 10));\n\tASSERT_TRUE(pr.empty());\n\tASSERT_EQ(pr.numberOfPages(), 0u);\n\tpr.clear();\n\tASSERT_TRUE(pr.parse(\"11-20\", 10));\n\tASSERT_TRUE(pr.empty());\n\tASSERT_EQ(pr.numberOfPages(), 0u);\n}\n\n\nTEST(PageRangesTest, out_of_bounds2) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"10-20\", 10));\n\tASSERT_FALSE(pr.empty());\n\tASSERT_EQ(pr.ranges().front(), PageRanges::Range(10,10));\n\tASSERT_EQ(pr.numberOfPages(), 1u);\n\tpr.clear();\n\tASSERT_TRUE(pr.parse(\"10-20\"));\n\tASSERT_FALSE(pr.empty());\n\tASSERT_EQ(pr.ranges().front(), PageRanges::Range(10,20));\n\tASSERT_EQ(pr.numberOfPages(), 11u);\n}\n\n\nTEST(PageRangesTest, out_of_bounds3) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"10-20,20-,20-30,8-\", 10));\n\tASSERT_FALSE(pr.empty());\n\tASSERT_EQ(pr.ranges().front(), PageRanges::Range(8,10));\n\tASSERT_EQ(pr.numberOfPages(), 3u);\n}\n\n\nTEST(PageRangesTest, multiple1) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"11,6,9,1,75,6,3\"));\n\tASSERT_EQ(pr.size(), 6u);\n\tRange cmp[] = {{1,1},{3,3},{6,6},{9,9},{11,11},{75,75}};\n\tASSERT_TRUE(is_equal(pr, cmp));\n\tASSERT_EQ(pr.numberOfPages(), 6u);\n}\n\n\nTEST(PageRangesTest, multiple2) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"2,6,9,1,75,6,3\"));\n\tASSERT_EQ(pr.size(), 4u);\n\tRange cmp[] = {{1,3},{6,6},{9,9},{75,75}};\n\tASSERT_TRUE(is_equal(pr, cmp));\n}\n\n\nTEST(PageRangesTest, multiple3) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"2,6,9-11,1,25-,19-13,6,3\", 100));\n\tASSERT_EQ(pr.size(), 5u);\n\tRange cmp[] = {{1,3},{6,6},{9,11},{13,19},{25,100}};\n\tASSERT_TRUE(is_equal(pr, cmp));\n}\n\n\nTEST(PageRangesTest, overlap1) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"5-11, 8-15\"));\n\tASSERT_EQ(pr.size(), 1u);\n\tRange cmp[] = {{5,15}};\n\tASSERT_TRUE(is_equal(pr, cmp));\n}\n\n\nTEST(PageRangesTest, overlap2) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"23-30, 5-11, 17-23, 12-19\"));\n\tASSERT_EQ(pr.size(), 1u);\n\tRange cmp[] = {{5,30}};\n\tASSERT_TRUE(is_equal(pr, cmp));\n}\n\n\nTEST(PageRangesTest, overlap3) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"22-30, 5-11, 21-23, 12-19\"));\n\tASSERT_EQ(pr.size(), 2u);\n\tRange cmp[] = {{5,19},{21,30}};\n\tASSERT_TRUE(is_equal(pr, cmp));\n}\n\n\nTEST(PageRangesTest, overlap4) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"-15, 20-, 8, 12-16, 18-19\", 100));\n\tASSERT_EQ(pr.size(), 2u);\n\tRange cmp[] = {{1,16},{18,100}};\n\tASSERT_TRUE(is_equal(pr, cmp));\n\tASSERT_TRUE(pr.parse(\"17\"));\n\tASSERT_EQ(pr.size(), 1u);\n\tASSERT_EQ(pr.ranges().front(), PageRanges::Range(1,100));\n}\n\n\nTEST(PageRangesTest, even1) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"3-7, 1, 6-9:even\"));\n\tEXPECT_EQ(pr.size(), 3u);\n\tRange cmp[] = {{4,4},{6,6},{8,8}};\n\tEXPECT_TRUE(is_equal(pr, cmp));\n}\n\n\nTEST(PageRangesTest, even2) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"1,3,5:even\"));\n\tEXPECT_EQ(pr.size(), 0u);\n}\n\n\nTEST(PageRangesTest, odd1) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"3-7, 1, 6-9:odd\"));\n\tEXPECT_EQ(pr.size(), 5u);\n\tRange cmp[] = {{1,1},{3,3},{5,5},{7,7},{9,9}};\n\tEXPECT_TRUE(is_equal(pr, cmp));\n}\n\n\nTEST(PageRangesTest, odd2) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"2,8,10:odd\"));\n\tEXPECT_EQ(pr.size(), 0u);\n}\n\n\nTEST(PageRangesTest, expr1) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"%P\", 10));\n\tEXPECT_EQ(pr.size(), 1u);\n\tEXPECT_EQ(pr.ranges().front(), PageRanges::Range(10,10));\n\tpr.clear();\n\tASSERT_TRUE(pr.parse(\"-%P\", 10));\n\tEXPECT_EQ(pr.size(), 1u);\n\tEXPECT_EQ(pr.ranges().front(), PageRanges::Range(1,10));\n\tpr.clear();\n\tASSERT_TRUE(pr.parse(\"%P-\", 10));\n\tEXPECT_EQ(pr.size(), 1u);\n\tEXPECT_EQ(pr.ranges().front(), PageRanges::Range(10,10));\n\tpr.clear();\n\tASSERT_TRUE(pr.parse(\"5-%P\", 10));\n\tEXPECT_EQ(pr.size(), 1u);\n\tEXPECT_EQ(pr.ranges().front(), PageRanges::Range(5,10));\n\tpr.clear();\n\tASSERT_TRUE(pr.parse(\"1,%P,2\", 10));\n\tEXPECT_EQ(pr.size(), 2u);\n\tEXPECT_EQ(pr.ranges().front(), PageRanges::Range(1,2));\n\tEXPECT_EQ(pr.ranges().back(), PageRanges::Range(10,10));\n}\n\n\nTEST(PageRangesTest, expr2) {\n\tPageRanges pr;\n\tASSERT_TRUE(pr.parse(\"%(P-1)\", 10));\n\tEXPECT_EQ(pr.size(), 1u);\n\tEXPECT_EQ(pr.ranges().front(), PageRanges::Range(9,9));\n\tpr.clear();\n\tASSERT_TRUE(pr.parse(\"%(P-2)-\", 10));\n\tEXPECT_EQ(pr.size(), 1u);\n\tEXPECT_EQ(pr.ranges().front(), PageRanges::Range(8,10));\n\tpr.clear();\n\tASSERT_TRUE(pr.parse(\"-%(P-2)\", 10));\n\tEXPECT_EQ(pr.size(), 1u);\n\tEXPECT_EQ(pr.ranges().front(), PageRanges::Range(1,8));\n}\n\n\nTEST(PageRangesTest, error) {\n\tPageRanges pr;\n\tEXPECT_FALSE(pr.parse(\"x\"));\n\tEXPECT_FALSE(pr.parse(\"5-x\"));\n\tEXPECT_FALSE(pr.parse(\"5 6\"));\n\tEXPECT_FALSE(pr.parse(\"5,\"));\n\tEXPECT_FALSE(pr.parse(\"1-9:dummy\"));\n\tEXPECT_FALSE(pr.parse(\"%p\"));\n\tEXPECT_FALSE(pr.parse(\"%(p-1)\"));\n\tEXPECT_FALSE(pr.parse(\"%(1/0)\"));\n}\n"
  },
  {
    "path": "tests/PageSizeTest.cpp",
    "content": "/*************************************************************************\n** PageSizeTest.cpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <vector>\n#include \"PageSize.hpp\"\n\nusing namespace std;\n\n\nstruct PageData {\n\tconst char *name;\n\tdouble width, height;  // in mm\n};\n\n\nconst vector<PageData> pageData = {\n\t{\"A4\", 210, 297},\n\t{\"a4\", 210, 297},\n\t{\"a4-p\", 210, 297},\n\t{\"a4-portrait\", 210, 297},\n\t{\"a4-l\", 297, 210},\n\t{\"a4-landscape\", 297, 210},\n\t{\"a5\", 148, 210},\n\t{\"b2\", 500, 707},\n\t{\"c10\", 28, 40},\n\t{\"D3\", 272, 385},\n\t{\"letter\", 216, 279}\n};\n\n\nTEST(PageSizeTest, resize) {\n\tPageSize pageSize;\n\tEXPECT_FALSE(pageSize.valid());\n\tfor (const PageData &data : pageData) {\n\t\tpageSize.resize(data.name);\n\t\tEXPECT_DOUBLE_EQ(pageSize.width().mm(), data.width) << data.name;\n\t\tEXPECT_DOUBLE_EQ(pageSize.height().mm(), data.height) << data.name;\n\t}\n}\n\n\nTEST(PageSizeTest, exceptions) {\n\tPageSize pageSize;\n\tEXPECT_THROW(pageSize.resize(\"a\"), PageSizeException);\n\tEXPECT_THROW(pageSize.resize(\"e4\"), PageSizeException);\n\tEXPECT_THROW(pageSize.resize(\"a4-unknown\"), PageSizeException);\n}\n"
  },
  {
    "path": "tests/PairTest.cpp",
    "content": "/*************************************************************************\n** PairTest.cpp                                                         **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"Pair.hpp\"\n\nusing namespace std;\n\nTEST(PairTest, constructor) {\n\tDPair p(-1.5, 2);\n\tASSERT_EQ(p.x(), -1.5);\n\tASSERT_EQ(p.y(), 2);\n\tDPair q = p;\n\tASSERT_EQ(q.x(), -1.5);\n\tASSERT_EQ(q.y(), 2);\n}\n\n\nTEST(PairTest, setter) {\n\tDPair p(1,2);\n\tASSERT_EQ(p, DPair(1,2));\n\tp.x(3);\n\tASSERT_EQ(p, DPair(3,2));\n\tp.y(5);\n\tASSERT_EQ(p, DPair(3,5));\n}\n\n\nTEST(PairTest, length) {\n\tASSERT_EQ(DPair(0,0).length(), 0);\n\tASSERT_EQ(DPair(1,0).length(), 1);\n\tASSERT_EQ(DPair(0,1).length(), 1);\n\tASSERT_EQ(DPair(-1,0).length(), 1);\n\tASSERT_EQ(DPair(0,-1).length(), 1);\n\n\t// check some Pythagorean triples\n\tfor (int i=1; i < 10; ++i) {\n\t\tfor (int j=i+1; j <= 10; ++j) {\n\t\t\tint a = j*j-i*i;\n\t\t\tint b = 2*i*j;\n\t\t\tint c = j*j+i*i;\n\t\t\tASSERT_EQ(DPair(a, b).length(), c);\n\t\t\tASSERT_EQ(DPair(b, a).length(), c);\n\t\t\tASSERT_EQ(DPair(-a, b).length(), c);\n\t\t\tASSERT_EQ(DPair(-b, a).length(), c);\n\t\t\tASSERT_EQ(DPair(-a, -b).length(), c);\n\t\t}\n\t}\n}\n\n\nTEST(PairTest, add) {\n\tASSERT_EQ(DPair(2,3)+DPair(0,0), DPair(2,3));\n\tASSERT_EQ(DPair(2,3)+DPair(4,5), DPair(6,8));\n\tASSERT_EQ(DPair(2,3)+DPair(-4,-5), DPair(-2,-2));\n}\n\n\nTEST(PairTest, sub) {\n\tASSERT_EQ(DPair(2,3)-DPair(0,0), DPair(2,3));\n\tASSERT_EQ(DPair(2,3)-DPair(4,5), DPair(-2,-2));\n\tASSERT_EQ(DPair(2,3)-DPair(-4,-5), DPair(6,8));\n}\n\n\nTEST(PairTest, mul) {\n\tASSERT_EQ(DPair(2,3)*0.0, DPair(0,0));\n\tASSERT_EQ(DPair(2,3)*1.0, DPair(2,3));\n\tASSERT_EQ(DPair(2,3)*2.0, DPair(4,6));\n\tASSERT_EQ(DPair(2,3)*(-2.0), DPair(-4,-6));\n}\n\n\nTEST(PairTest, div) {\n\tASSERT_EQ(DPair(2,3)/1.0, DPair(2,3));\n\tASSERT_EQ(DPair(2,3)/2.0, DPair(1,1.5));\n\tASSERT_EQ(DPair(2,3)/(-2.0), DPair(-1,-1.5));\n}\n\n\nTEST(PairTest, neg) {\n\tEXPECT_EQ(-DPair(0, 0), DPair(0, 0));\n\tEXPECT_EQ(-DPair(1, 2), DPair(-1, -2));\n\tEXPECT_EQ(-DPair(-1, -2), DPair(1, 2));\n\tEXPECT_EQ(-DPair(-1, 2), DPair(1, -2));\n\tEXPECT_EQ(-DPair(1, -2), DPair(-1, 2));\n}\n\n\nTEST(PairTest, abs) {\n\tEXPECT_EQ(abs(DPair(0, 0)), DPair(0, 0));\n\tEXPECT_EQ(abs(DPair(1, 2)), DPair(1, 2));\n\tEXPECT_EQ(abs(DPair(-1, -2)), DPair(1, 2));\n\tEXPECT_EQ(abs(DPair(-1, 2)), DPair(1, 2));\n\tEXPECT_EQ(abs(DPair(1, -2)), DPair(1, 2));\n}\n\n\nTEST(PairTest, equality) {\n\tASSERT_TRUE(DPair(2,3) == DPair(2,3));\n\tASSERT_FALSE(DPair(2,3) == DPair(-2,-3));\n\tASSERT_TRUE(DPair(2,3)+DPair(4,5) == DPair(6,8));\n\tASSERT_FALSE(DPair(2,3)+DPair(4,5) != DPair(6,8));\n}\n\n\nTEST(PairTest, ortho) {\n\tASSERT_EQ(DPair(0,0).ortho(), DPair(0,0));\n\tASSERT_EQ(DPair(1,0).ortho(), DPair(0,1));\n\tASSERT_EQ(DPair(0,1).ortho(), DPair(-1,0));\n\tASSERT_EQ(DPair(-1,0).ortho(), DPair(0,-1));\n\tASSERT_EQ(DPair(0,-1).ortho(), DPair(1,0));\n}\n\n\nTEST(PairTest, write) {\n\tostringstream oss;\n\tDPair p(3,4);\n\toss << p;\n\tASSERT_EQ(oss.str(), \"(3,4)\");\n\tp *= 2;\n\toss.str(\"\");\n\toss << p;\n\tASSERT_EQ(oss.str(), \"(6,8)\");\n}\n"
  },
  {
    "path": "tests/PapersizeSpecialTest.cpp",
    "content": "/*************************************************************************\n** PapersizeSpecialTest.cpp                                             **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"PapersizeSpecialHandler.hpp\"\n#include \"SpecialActions.hpp\"\n\nusing namespace std;\n\nclass PapersizeSpecialTest : public ::testing::Test {\n\tprotected:\n\t\tclass PapersizeSpecialActions : public EmptySpecialActions {\n\t\t\tpublic:\n\t\t\t\tPapersizeSpecialActions () : _pageno(0) {}\n\t\t\t\tBoundingBox& bbox () override {return _bbox;}\n\t\t\t\tstring getBBoxFormatString () const override    {return _bboxFormatString;}\n\t\t\t\tvoid setBBoxFormatString (const string &str)    {_bboxFormatString = str;}\n\t\t\t\tunsigned getCurrentPageNumber () const override {return _pageno;}\n\t\t\t\tvoid setCurrentPageNumber (unsigned pageno)     {_pageno = pageno;}\n\n\t\t\tprivate:\n\t\t\t\tBoundingBox _bbox;\n\t\t\t\tstring _bboxFormatString;\n\t\t\t\tunsigned _pageno;\n\t\t};\n\n\t\tclass MyPapersizeSpecialHandler : public PapersizeSpecialHandler {\n\t\t\tpublic:\n\t\t\t\tvoid endPage (PapersizeSpecialActions &actions) {dviEndPage(actions.getCurrentPageNumber(), actions);}\n\t\t};\n\n\n\t\tvoid SetUp () override {\n\t\t\thandler.reset();\n\t\t}\n\n\t\tstring bboxString () {\n\t\t\treturn actions.bbox().svgViewBoxString();\n\t\t}\n\n\t\tvoid preprocess (const string &str) {\n\t\t\tistringstream iss(str);\n\t\t\thandler.preprocess(\"\", iss, actions);\n\t\t}\n\n\t\tbool process (const string &str) {\n\t\t\tistringstream iss(str);\n\t\t\treturn handler.process(\"\", iss, actions);\n\t\t}\n\n\t\tvoid endPage () {\n\t\t\thandler.endPage(actions);\n\t\t}\n\n\tprotected:\n\t\tMyPapersizeSpecialHandler handler;\n\t\tPapersizeSpecialActions actions;\n};\n\n\nTEST_F(PapersizeSpecialTest, name) {\n\tEXPECT_EQ(handler.name(), \"papersize\");\n\tASSERT_EQ(handler.prefixes().size(), 1u);\n\tASSERT_STREQ(handler.prefixes()[0], \"papersize=\");\n}\n\n\nTEST_F(PapersizeSpecialTest, disabled) {\n\tactions.setBBoxFormatString(\"min\");  // --bbox=min => ignore papersize specials\n\tactions.setCurrentPageNumber(1);\n\tASSERT_EQ(bboxString(), \"0 0 0 0\");\n\tpreprocess(\"123,456\");\n\tendPage();\n\tASSERT_EQ(bboxString(), \"0 0 0 0\");\n\tASSERT_TRUE(process(\"dummy\"));\n}\n\n\nTEST_F(PapersizeSpecialTest, singlePage1) {\n\tactions.setBBoxFormatString(\"papersize\");  // --bbox=papersize => evaluate papersize specials\n\tactions.setCurrentPageNumber(1);\n\tASSERT_EQ(bboxString(), \"0 0 0 0\");\n\tpreprocess(\"123bp,456bp\");\n\tendPage();\n\tASSERT_EQ(bboxString(), \"-72 -72 123 456\");\n}\n\n\nTEST_F(PapersizeSpecialTest, singlePage2) {\n\tactions.setBBoxFormatString(\"papersize\");\n\tactions.setCurrentPageNumber(1);\n\tASSERT_EQ(bboxString(), \"0 0 0 0\");\n\tpreprocess(\"123bp,456bp\");\n\tpreprocess(\"333bp,444bp\");\n\tpreprocess(\"321bp,654bp\");\n\tendPage();\n\tASSERT_EQ(bboxString(), \"-72 -72 321 654\");\n}\n\n\nTEST_F(PapersizeSpecialTest, multiPage1) {\n\tactions.setBBoxFormatString(\"papersize\");\n\tactions.setCurrentPageNumber(1);\n\tASSERT_EQ(bboxString(), \"0 0 0 0\");\n\tpreprocess(\"123bp,456bp\");\n\tpreprocess(\"333bp,444bp\");\n\tpreprocess(\"321bp,654bp\");\n\tendPage();\n\tASSERT_EQ(bboxString(), \"-72 -72 321 654\");\n\tactions.setCurrentPageNumber(2);\n\tendPage();\n\tASSERT_EQ(bboxString(), \"-72 -72 321 654\");\n\tactions.setCurrentPageNumber(3);\n\tendPage();\n\tASSERT_EQ(bboxString(), \"-72 -72 321 654\");\n}\n\n\nTEST_F(PapersizeSpecialTest, multiPage2) {\n\tactions.setBBoxFormatString(\"papersize\");\n\tactions.setCurrentPageNumber(1);\n\tASSERT_EQ(bboxString(), \"0 0 0 0\");\n\tpreprocess(\"123bp,456bp\");\n\tpreprocess(\"333bp\");\n\tendPage();\n\tASSERT_EQ(bboxString(), \"-72 -72 333 333\");\n\tactions.setCurrentPageNumber(2);\n\tendPage();\n\tASSERT_EQ(bboxString(), \"-72 -72 333 333\");\n\tactions.setCurrentPageNumber(3);\n\tpreprocess(\"321bp,456bp\");\n\tendPage();\n\tASSERT_EQ(bboxString(), \"-72 -72 321 456\");\n}\n"
  },
  {
    "path": "tests/RangeMapTest.cpp",
    "content": "/*************************************************************************\n** RangeMapTest.cpp                                                     **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"RangeMap.hpp\"\n\nusing namespace std;\n\n#define CHECK_RANGE(name, cmap, cmin, cmax, cid_min) \\\n\t{SCOPED_TRACE(name); check_range(cmap, cmin, cmax, cid_min);}\n\n#define CHECK_ZERO(name, cmap, cmin, cmax) \\\n\t{SCOPED_TRACE(name); check_zero(cmap, cmin, cmax);}\n\n\nstatic void check_range (const RangeMap &rangemap, int min, int max, int minval) {\n\tfor (int i=min; i <= max; i++)\n\t\tASSERT_EQ((int)rangemap.valueAt(i), minval+(i-min));\n}\n\n\nstatic void check_zero (const RangeMap &rangemap, int min, int max) {\n\tfor (int i=min; i <= max; i++)\n\t\tASSERT_EQ(rangemap.valueAt(i), 0u);\n}\n\n\nTEST(RangeMapTest, disjoint_ranges) {\n\tRangeMap rangemap;\n\trangemap.addRange(5, 8, 1);\n\tASSERT_EQ(rangemap.numRanges(), 1u);\n\tEXPECT_EQ(rangemap.numValues(), 4u);\n\tCHECK_RANGE(\"A\", rangemap, 5, 8, 1);\n\tCHECK_ZERO(\"B\", rangemap, 0, 4);\n\tCHECK_ZERO(\"C\", rangemap, 9, 20);\n\n\trangemap.addRange(10, 15, 5);\n\tASSERT_EQ(rangemap.numRanges(), 2u);\n\tEXPECT_EQ(rangemap.numValues(), 10u);\n\tCHECK_RANGE(\"D\", rangemap, 5, 8, 1);\n\tCHECK_RANGE(\"E\", rangemap, 10, 15, 5);\n\tCHECK_ZERO(\"F\", rangemap, 0, 4);\n\tCHECK_ZERO(\"G\", rangemap, 9, 9);\n\tCHECK_ZERO(\"H\", rangemap, 16, 20);\n\n\trangemap.addRange(0, 3, 50);\n\tASSERT_EQ(rangemap.numRanges(), 3u);\n\tEXPECT_EQ(rangemap.numValues(), 14u);\n\tCHECK_RANGE(\"I\", rangemap, 0, 3, 50);\n\tCHECK_RANGE(\"J\", rangemap, 5, 8, 1);\n\tCHECK_RANGE(\"K\", rangemap, 10, 15, 5);\n\tCHECK_ZERO(\"L\", rangemap, 4, 4);\n\tCHECK_ZERO(\"M\", rangemap, 9, 9);\n\tCHECK_ZERO(\"N\", rangemap, 16, 20);\n\n\trangemap.addRange(16, 20, 1);\n\tASSERT_EQ(rangemap.numRanges(), 4u);\n\tEXPECT_EQ(rangemap.numValues(), 19u);\n\tCHECK_RANGE(\"O\", rangemap, 5, 8, 1);\n\tCHECK_RANGE(\"P\", rangemap, 10, 15, 5);\n\tCHECK_RANGE(\"Q\", rangemap, 0, 3, 50);\n\tCHECK_RANGE(\"R\", rangemap, 16, 20, 1);\n}\n\n\nTEST(RangeMapTest, touching_ranges1) {\n\tRangeMap rangemap;\n\trangemap.addRange(5, 8, 10);\n\tASSERT_EQ(rangemap.numRanges(), 1u);\n\tEXPECT_EQ(rangemap.numValues(), 4u);\n\tCHECK_RANGE(\"A\", rangemap, 5, 8, 10);\n\n\trangemap.addRange(9, 15, 14);\n\tASSERT_EQ(rangemap.numRanges(), 1u);\n\tEXPECT_EQ(rangemap.numValues(), 11u);\n\tCHECK_RANGE(\"B\", rangemap, 5, 15, 10);\n\n\trangemap.addRange(1, 4, 5);\n\tASSERT_EQ(rangemap.numRanges(), 2u);\n\tEXPECT_EQ(rangemap.numValues(), 15u);\n\tCHECK_RANGE(\"C\", rangemap, 1, 4, 5);\n\tCHECK_RANGE(\"D\", rangemap, 5, 15, 10);\n\n\trangemap.addRange(1, 4, 6);\n\tASSERT_EQ(rangemap.numRanges(), 1u);\n\tEXPECT_EQ(rangemap.numValues(), 15u);\n\tCHECK_RANGE(\"E\", rangemap, 1, 15, 6);\n}\n\n\nTEST(RangeMapTest, touching_ranges2) {\n\tRangeMap rangemap;\n\trangemap.addRange(7, 8, 10);\n\tASSERT_EQ(rangemap.numRanges(), 1u);\n\tCHECK_RANGE(\"A\", rangemap, 7, 8, 10);\n\n\trangemap.addRange(2, 3, 1);\n\tASSERT_EQ(rangemap.numRanges(), 2u);\n\tCHECK_RANGE(\"B\", rangemap, 2, 3, 1);\n\tCHECK_RANGE(\"C\", rangemap, 7, 8, 10);\n\n\trangemap.addRange(4, 4, 3);\n\tASSERT_EQ(rangemap.numRanges(), 2u);\n\tCHECK_RANGE(\"D\", rangemap, 2, 4, 1);\n\tCHECK_RANGE(\"E\", rangemap, 7, 8, 10);\n}\n\n\nTEST(RangeMapTest, overlapping_ranges) {\n\tRangeMap rangemap;\n\trangemap.addRange(5, 8, 10);\n\trangemap.addRange(7, 15, 12);\n\tASSERT_EQ(rangemap.numRanges(), 1u);\n\tCHECK_RANGE(\"A\", rangemap, 5, 15, 10);\n\n\trangemap.addRange(10, 20, 1);\n\tASSERT_EQ(rangemap.numRanges(), 2u);\n\tCHECK_RANGE(\"B\", rangemap, 5, 9, 10);\n\tCHECK_RANGE(\"C\", rangemap, 10, 20, 1);\n\n\trangemap.addRange(2, 7, 7);\n\tASSERT_EQ(rangemap.numRanges(), 2u);\n\tCHECK_RANGE(\"D\", rangemap, 2, 9, 7);\n\tCHECK_RANGE(\"E\", rangemap, 10, 20, 1);\n\n\trangemap.addRange(1, 12, 100);\n\tASSERT_EQ(rangemap.numRanges(), 2u);\n\tCHECK_RANGE(\"F\", rangemap, 1, 12, 100);\n\tCHECK_RANGE(\"G\", rangemap, 13, 20, 4);\n\n\trangemap.addRange(0, 30, 1);\n\tASSERT_EQ(rangemap.numRanges(), 1u);\n\tCHECK_RANGE(\"H\", rangemap, 0, 30, 1);\n}\n\n\nTEST(RangeMapTest, inner_ranges) {\n\tRangeMap rangemap;\n\trangemap.addRange(5, 20, 1);\n\trangemap.addRange(10, 15, 6);\n\tASSERT_EQ(rangemap.numRanges(), 1u);\n\tCHECK_RANGE(\"A\", rangemap, 5, 20, 1);\n\n\trangemap.addRange(10, 15, 100);\n\tASSERT_EQ(rangemap.numRanges(), 3u);\n\tCHECK_RANGE(\"B\", rangemap, 5, 9, 1);\n\tCHECK_RANGE(\"C\", rangemap, 10, 15, 100);\n\tCHECK_RANGE(\"D\", rangemap, 16, 20, 12);\n\n\trangemap.addRange(15, 15, 50);\n\tASSERT_EQ(rangemap.numRanges(), 4u);\n\tCHECK_RANGE(\"E\", rangemap, 5, 9, 1);\n\tCHECK_RANGE(\"F\", rangemap, 10, 14, 100);\n\tCHECK_RANGE(\"G\", rangemap, 15, 15, 50);\n\tCHECK_RANGE(\"H\", rangemap, 16, 20, 12);\n\n\trangemap.addRange(6, 19, 1);\n\tASSERT_EQ(rangemap.numRanges(), 3u);\n\tCHECK_RANGE(\"I\", rangemap, 5, 5, 1);\n\tCHECK_RANGE(\"J\", rangemap, 6, 19, 1);\n\tCHECK_RANGE(\"K\", rangemap, 20, 20, 16);\n}\n\n\nTEST(RangeMapTest, iterators) {\n\tRangeMap rangemap;\n\trangemap.addRange(5, 10, 1);\n\trangemap.addRange(20, 25, 60);\n\tASSERT_EQ(rangemap.numRanges(), 2u);\n\tusing Pair32 = pair<uint32_t,uint32_t>;\n\tvector<Pair32> pairs = {\n\t\tPair32(5, 1), Pair32(6, 2), Pair32(7, 3), Pair32(8, 4), Pair32(9, 5), Pair32(10, 6),\n\t\tPair32(20, 60), Pair32(21, 61), Pair32(22, 62), Pair32(23, 63), Pair32(24, 64), Pair32(25, 65)\n\t};\n\tint count=0;\n\tfor (auto p : rangemap)\n\t\tASSERT_EQ(p, pairs[count++]);\n}\n"
  },
  {
    "path": "tests/SVGOutputTest.cpp",
    "content": "/*************************************************************************\n** SVGOutputTest.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <fstream>\n#include \"FileSystem.hpp\"\n#include \"MessageException.hpp\"\n#include \"SVGOutput.hpp\"\n#include \"ZLibOutputStream.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\nusing namespace std;\n\nstruct SVGOutputTest : public ::testing::Test {\n\tvoid SetUp () override {FileSystem::chdir(SRCDIR);}\n};\n\n\nTEST_F(SVGOutputTest, defaults) {\n\tSVGOutput out(\"SVGOutputTest.cpp\", \"\");\n\tEXPECT_EQ(out.filepath(1, 1).relative(), \"SVGOutputTest.svg\");\n\tEXPECT_EQ(out.filepath(5, 9).relative(), \"SVGOutputTest-5.svg\");\n\tEXPECT_EQ(out.filepath(5, 10).relative(), \"SVGOutputTest-05.svg\");\n\tEXPECT_EQ(out.filepath(5, 256).relative(), \"SVGOutputTest-005.svg\");\n}\n\n\nTEST_F(SVGOutputTest, widthSpecifier) {\n\t{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f--%3p\");\n\t\tEXPECT_EQ(out.filepath(5, 9).relative(), \"SVGOutputTest--005.svg\");\n\t\tEXPECT_EQ(out.filepath(54, 65).relative(), \"SVGOutputTest--054.svg\");\n\t\tEXPECT_EQ(out.filepath(543, 654).relative(), \"SVGOutputTest--543.svg\");\n\t}{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f--%3p--%P\");\n\t\tEXPECT_EQ(out.filepath(5, 9).relative(), \"SVGOutputTest--005--9.svg\");\n\t\tEXPECT_EQ(out.filepath(54, 65).relative(), \"SVGOutputTest--054--65.svg\");\n\t\tEXPECT_EQ(out.filepath(543, 654).relative(), \"SVGOutputTest--543--654.svg\");\n\t}{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f--%3p--%3P\");\n\t\tEXPECT_EQ(out.filepath(5, 9).relative(), \"SVGOutputTest--005--009.svg\");\n\t\tEXPECT_EQ(out.filepath(54, 65).relative(), \"SVGOutputTest--054--065.svg\");\n\t\tEXPECT_EQ(out.filepath(543, 654).relative(), \"SVGOutputTest--543--654.svg\");\n\t}{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%5f--%3p--%3P\");\n\t\tEXPECT_EQ(out.filepath(5, 9).relative(), \"SVGOutputTest--005--009.svg\");\n\t\tEXPECT_EQ(out.filepath(54, 65).relative(), \"SVGOutputTest--054--065.svg\");\n\t\tEXPECT_EQ(out.filepath(543, 654).relative(), \"SVGOutputTest--543--654.svg\");\n\t}\n}\n\n\nTEST_F(SVGOutputTest, expressions) {\n\t{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"no-macro\");\n\t\tEXPECT_EQ(out.filepath(5, 9).relative(), \"no-macro.svg\");\n\t\tEXPECT_EQ(out.filepath(54, 65).relative(), \"no-macro.svg\");\n\t\tEXPECT_EQ(out.filepath(543, 654).relative(), \"no-macro.svg\");\n\t}{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f--%(p-1)\");\n\t\tEXPECT_EQ(out.filepath(5, 9).relative(), \"SVGOutputTest--4.svg\");\n\t\tEXPECT_EQ(out.filepath(54, 65).relative(), \"SVGOutputTest--53.svg\");\n\t\tEXPECT_EQ(out.filepath(543, 654).relative(), \"SVGOutputTest--542.svg\");\n\t}{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f--%3(p-1)\");\n\t\tEXPECT_EQ(out.filepath(5, 9).relative(), \"SVGOutputTest--004.svg\");\n\t\tEXPECT_EQ(out.filepath(54, 65).relative(), \"SVGOutputTest--053.svg\");\n\t\tEXPECT_EQ(out.filepath(543, 654).relative(), \"SVGOutputTest--542.svg\");\n\t}{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f--%3(P+2p)\");\n\t\tEXPECT_EQ(out.filepath(5, 9).relative(), \"SVGOutputTest--019.svg\");\n\t\tEXPECT_EQ(out.filepath(54, 65).relative(), \"SVGOutputTest--173.svg\");\n\t\tEXPECT_EQ(out.filepath(543, 654).relative(), \"SVGOutputTest--1740.svg\");\n\t}\n}\n\n\nTEST_F(SVGOutputTest, hashes) {\n\tSVGOutput::HashTriple hashes(\"dvihash\", \"opthash\", \"cmbhash\");\n\t{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f-%hd-x\");\n\t\tEXPECT_EQ(out.filepath(1, 10).relative(), \"SVGOutputTest--x.svg\");\n\t\tEXPECT_EQ(out.filepath(1, 10, hashes).relative(), \"SVGOutputTest-dvihash-x.svg\");\n\t}{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f-%hd-x-%hc%ho\");\n\t\tEXPECT_EQ(out.filepath(1, 10).relative(), \"SVGOutputTest--x-.svg\");\n\t\tEXPECT_EQ(out.filepath(1, 10, hashes).relative(), \"SVGOutputTest-dvihash-x-cmbhashopthash.svg\");\n\t}{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f-%hd%p%ho\");\n\t\tEXPECT_EQ(out.filepath(1, 10).relative(), \"SVGOutputTest-01.svg\");\n\t\tEXPECT_EQ(out.filepath(1, 10, hashes).relative(), \"SVGOutputTest-dvihash01opthash.svg\");\n\t}\n}\n\n\nTEST_F(SVGOutputTest, hashes_fail) {\n\tSVGOutput::HashTriple hashes(\"dvihash\", \"opthash\", \"cmbhash\");\n\t{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f-%h-x\");\n\t\tEXPECT_THROW(out.filepath(1, 10).relative(), MessageException);\n\t\tEXPECT_THROW(out.filepath(1, 10, hashes).relative(), MessageException);\n\t}{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f-%hd-x-%ha%ho\");\n\t\tEXPECT_THROW(out.filepath(1, 10).relative(), MessageException);\n\t\tEXPECT_THROW(out.filepath(1, 10, hashes).relative(), MessageException);\n\t}\n}\n\n\nTEST_F(SVGOutputTest, getPageStream) {\n\t{\n\t\tSVGOutput out(\"\", \"\");\n\t\tostream &os = out.getPageStream(1, 10);\n\t\tEXPECT_EQ(&os, &cout);\n\t}{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f-%p\");\n\t\tostream *os1 = &out.getPageStream(1, 10);\n\t\tEXPECT_TRUE(dynamic_cast<ofstream*>(os1));\n\t\tostream *os2 = &out.getPageStream(1, 10);\n\t\tEXPECT_EQ(os1, os2);\n\t}\n\tFileSystem::remove(\"SVGOutputTest-01.svg\");\n\t{\n\t\tSVGOutput out(\"SVGOutputTest.cpp\", \"%f-%p\", 9);\n\t\tostream *os = &out.getPageStream(1, 10);\n\t\tEXPECT_TRUE(dynamic_cast<ZLibOutputStream*>(os));\n\t}\n\tFileSystem::remove(\"SVGOutputTest-01.svgz\");\n}\n\n\nTEST_F(SVGOutputTest, ignore) {\n\tSVGOutput out(\"SVGOutputTest.cpp\", \"%x %y\");\n\tEXPECT_EQ(out.filepath(5, 9).relative(), \"SVGOutputTest-5.svg\");\n}\n\n\nTEST_F(SVGOutputTest, error) {\n\tSVGOutput out(\"SVGOutputTest.cpp\", \"%(p/0)\");\n\tEXPECT_THROW(out.filepath(5, 9).relative(), MessageException);\n}\n"
  },
  {
    "path": "tests/ShadingPatchTest.cpp",
    "content": "/*************************************************************************\n** ShadingPatchTest.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"ShadingPatch.hpp\"\n#include \"TensorProductPatch.hpp\"\n#include \"TriangularPatch.hpp\"\n\nusing namespace std;\n\n\nTEST(ShadingPatchTest, create) {\n\tauto patch = ShadingPatch::create(4, Color::ColorSpace::RGB);\n\tEXPECT_TRUE(dynamic_cast<TriangularPatch*>(patch.get()));\n\tpatch = ShadingPatch::create(5, Color::ColorSpace::RGB);\n\tEXPECT_TRUE(dynamic_cast<LatticeTriangularPatch*>(patch.get()));\n\tpatch = ShadingPatch::create(6, Color::ColorSpace::RGB);\n\tEXPECT_TRUE(dynamic_cast<CoonsPatch*>(patch.get()));\n\tpatch = ShadingPatch::create(7, Color::ColorSpace::RGB);\n\tEXPECT_TRUE(dynamic_cast<TensorProductPatch*>(patch.get()));\n}\n\n\nTEST(ShadingPatchTest, fail) {\n\tfor (int i=0; i < 4; i++) {\n\t\tEXPECT_THROW(ShadingPatch::create(i, Color::ColorSpace::RGB), ShadingException);\n\t}\n}\n\n\nTEST(ShadingPatchTest, colorQueryFuncs) {\n\tvector<DPair> points(3);\n\tvector<Color> colors(3);\n\tcolors[0].setRGB(1.0, 0.0, 0.0);\n\tcolors[1].setRGB(0.0, 1.0, 0.0);\n\tcolors[2].setRGB(0.0, 0.0, 1.0);\n\tTriangularPatch tp1(points, colors, Color::ColorSpace::RGB, 0, nullptr);\n\tEXPECT_EQ(tp1.colorAt(0, 0).rgbString(), \"#f00\");\n\tEXPECT_EQ(tp1.colorAt(1, 0).rgbString(), \"#0f0\");\n\tEXPECT_EQ(tp1.colorAt(0, 1).rgbString(), \"#00f\");\n\n\tcolors[0].setGray(0.2);\n\tcolors[1].setGray(0.4);\n\tcolors[2].setGray(0.6);\n\tTriangularPatch tp2(points, colors, Color::ColorSpace::GRAY, 0, nullptr);\n\tEXPECT_EQ(tp2.colorAt(0, 0).rgbString(), \"#333\");\n\tEXPECT_EQ(tp2.colorAt(1, 0).rgbString(), \"#666\");\n\tEXPECT_EQ(tp2.colorAt(0, 1).rgbString(), \"#999\");\n\n\tcolors[0].setCMYK(1.0, 0.0, 0.0, 0.2);\n\tcolors[1].setCMYK(0.0, 1.0, 0.0, 0.4);\n\tcolors[2].setCMYK(0.0, 0.0, 1.0, 0.6);\n\tTriangularPatch tp3(points, colors, Color::ColorSpace::CMYK, 0, nullptr);\n\tEXPECT_EQ(tp3.colorAt(0, 0).rgbString(), \"#0092c9\");\n\tEXPECT_EQ(tp3.colorAt(1, 0).rgbString(), \"#9e005e\");\n\tEXPECT_EQ(tp3.colorAt(0, 1).rgbString(), \"#827a00\");\n\n\tcolors[0].setLab(55, 80, 68);\n\tcolors[1].setLab(30, 62, -108);\n\tcolors[2].setLab(85, -72, 61);\n\tTriangularPatch tp4(points, colors, Color::ColorSpace::LAB, 0, nullptr);\n\tEXPECT_EQ(tp4.colorAt(0, 0).rgbString(), \"#040404\");\n\tEXPECT_EQ(tp4.colorAt(1, 0).rgbString(), \"#020000\");\n\tEXPECT_EQ(tp4.colorAt(0, 1).rgbString(), \"#040000\");\n}\n"
  },
  {
    "path": "tests/SpecialManagerTest.cpp",
    "content": "/*************************************************************************\n** SpecialManagerTest.cpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"SpecialManager.hpp\"\n#include \"BgColorSpecialHandler.hpp\"\n#include \"ColorSpecialHandler.hpp\"\n#include \"DvisvgmSpecialHandler.hpp\"\n#include \"EmSpecialHandler.hpp\"\n#include \"HtmlSpecialHandler.hpp\"\n#include \"NoPsSpecialHandler.hpp\"\n#include \"PapersizeSpecialHandler.hpp\"\n#include \"PdfSpecialHandler.hpp\"\n#include \"TpicSpecialHandler.hpp\"\n#include \"utility.hpp\"\n\nusing namespace std;\n\nclass SpecialManagerTest : public ::testing::Test {\n\tpublic:\n\t\tSpecialManagerTest () {\n\t\t\thandlers.emplace_back(util::make_unique<BgColorSpecialHandler>());\n\t\t\thandlers.emplace_back(util::make_unique<ColorSpecialHandler>());\n\t\t\thandlers.emplace_back(util::make_unique<DvisvgmSpecialHandler>());\n\t\t\thandlers.emplace_back(util::make_unique<EmSpecialHandler>());\n\t\t\thandlers.emplace_back(util::make_unique<HtmlSpecialHandler>());\n\t\t\thandlers.emplace_back(util::make_unique<PapersizeSpecialHandler>());\n\t\t\thandlers.emplace_back(util::make_unique<PdfSpecialHandler>());\n\t\t\thandlers.emplace_back(util::make_unique<TpicSpecialHandler>());\n\t\t\thandlers.emplace_back(util::make_unique<NoPsSpecialHandler>());\n\t\t}\n\n\t\tvector<unique_ptr<SpecialHandler>> handlers;\n};\n\n\nTEST_F(SpecialManagerTest, info1) {\n\tSpecialManager &sm = SpecialManager::instance();\n\tsm.unregisterHandlers();\n\tsm.registerHandlers(handlers, \"\");\n\tostringstream oss;\n\tsm.writeHandlerInfo(oss);\n\tstring expected =\n\t\t\"bgcolor    background color special\\n\"\n\t\t\"color      complete support of color specials\\n\"\n\t\t\"dvisvgm    special set for embedding raw SVG fragments\\n\"\n\t\t\"em         line drawing statements of the emTeX special set\\n\"\n\t\t\"html       hyperref specials\\n\"\n\t\t\"papersize  special to set the page size\\n\"\n\t\t\"pdf        PDF hyperlink, font map, and pagesize specials\\n\"\n\t\t\"tpic       TPIC specials\\n\";\n\tEXPECT_EQ(oss.str(), expected);\n}\n\n\nTEST_F(SpecialManagerTest, info2) {\n\tSpecialManager &sm = SpecialManager::instance();\n\tsm.unregisterHandlers();\n\tsm.registerHandlers(handlers, \"color,em\");\n\tostringstream oss;\n\tsm.writeHandlerInfo(oss);\n\tstring expected =\n\t\t\"bgcolor    background color special\\n\"\n\t\t\"dvisvgm    special set for embedding raw SVG fragments\\n\"\n\t\t\"html       hyperref specials\\n\"\n\t\t\"papersize  special to set the page size\\n\"\n\t\t\"pdf        PDF hyperlink, font map, and pagesize specials\\n\"\n\t\t\"tpic       TPIC specials\\n\";\n\tEXPECT_EQ(oss.str(), expected);\n}\n"
  },
  {
    "path": "tests/SplittedCharInputBufferTest.cpp",
    "content": "/*************************************************************************\n** SplittedCharInputBufferTest.cpp                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <cstring>\n#include <sstream>\n#include \"InputBuffer.hpp\"\n#include \"InputReader.hpp\"\n\nusing std::istringstream;\n\nTEST(SplittedCharInputBufferTest, get) {\n\tconst char *buf1 = \"abcdef\";\n\tconst char *buf2 = \"ghijklmnopqrstuvwxyz\";\n\tSplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2));\n\tBufferInputReader in(buffer);\n\tbool ok=true;\n\tfor (int i=0; !in.eof() && ok; i++) {\n\t\tEXPECT_LT(i, 26);\n\t\tEXPECT_EQ(in.get(), 'a'+i);\n\t\tok = (i < 26);\n\t}\n}\n\n\nTEST(SplittedCharInputBufferTest, peek) {\n\tconst char *buf1 = \"abcdef\";\n\tconst char *buf2 = \"ghijklmnopqrstuvwxyz\";\n\tSplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2));\n\tBufferInputReader in(buffer);\n\tEXPECT_EQ(in.peek(), 'a');\n\tfor (int i=0; i < 26; i++)\n\t\tEXPECT_EQ(in.peek(i), 'a'+i);\n\tEXPECT_EQ(in.peek(26), -1);\n}\n\n\nTEST(SplittedCharInputBufferTest, check) {\n\tconst char *buf1 = \"abcde\";\n\tconst char *buf2 = \"fghijklmnopqrstuvwxyz\";\n\tSplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2));\n\tBufferInputReader in(buffer);\n\tEXPECT_TRUE(in.check(\"abc\", false));\n\tEXPECT_TRUE(in.check(\"abc\", true));\n\tEXPECT_TRUE(in.check(\"def\", true));\n\tEXPECT_TRUE(in.check(\"ghi\", true));\n\tEXPECT_TRUE(in.check(\"jkl\", true));\n\tEXPECT_TRUE(in.check(\"mnopqrst\", false));\n\tEXPECT_TRUE(in.check(\"mnopqrst\", true));\n\tEXPECT_TRUE(in.check(\"uvwxyz\", true));\n\tEXPECT_EQ(in.get(), -1);\n}\n\n\nTEST(SplittedCharInputBufferTest, skip) {\n\tconst char *buf1 = \"abcde\";\n\tconst char *buf2 = \"fghijklmnopqrstuvwxyz\";\n\tSplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2));\n\tBufferInputReader in(buffer);\n\tin.skip(3);\n\tEXPECT_EQ(in.peek(), 'd');\n\tin.skipUntil(\"ijk\");\n\tEXPECT_EQ(in.peek(), 'l');\n\tin.skipUntil(\"z\");\n\tEXPECT_TRUE(in.eof());\n}\n\n\nTEST(SplittedCharInputBufferTest, parseInt) {\n\tconst char *buf1 = \"1234,-\";\n\tconst char *buf2 = \"5,+6,10.-\";\n\tSplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2));\n\tBufferInputReader in(buffer);\n\tint n;\n\tEXPECT_TRUE(in.parseInt(n));\n\tEXPECT_EQ(n, 1234);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseInt(n));\n\tEXPECT_EQ(n, -5);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseInt(n));\n\tEXPECT_EQ(n, 6);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseInt(n));\n\tEXPECT_EQ(n, 10);\n\tEXPECT_EQ(in.get(), '.');\n\n\tEXPECT_FALSE(in.parseInt(n));\n\tEXPECT_EQ(in.get(), '-');\n}\n\n\nTEST(SplittedCharInputBufferTest, parseUInt_base) {\n\tconst char *buf1 = \"1234,-5,10,1a\";\n\tconst char *buf2 = \"bc,1234a\";\n\tSplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2));\n\tBufferInputReader in(buffer);\n\tunsigned n;\n\tEXPECT_TRUE(in.parseUInt(10, n));\n\tEXPECT_EQ(n, 1234u);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_FALSE(in.parseUInt(10, n));\n\tin.get();\n\tEXPECT_TRUE(in.parseUInt(10, n));\n\tEXPECT_EQ(n, 5u);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseUInt(16, n));\n\tEXPECT_EQ(n, 16u);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseUInt(16, n));\n\tEXPECT_EQ(n, 0x1ABCu);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseUInt(8, n));\n\tEXPECT_EQ(n, 01234u);\n\tEXPECT_EQ(in.get(), 'a');\n}\n\n\nTEST(SplittedCharInputBufferTest, parseDouble) {\n\tconst char *buf1 = \"1234,-5,6.12,-3\";\n\tconst char *buf2 = \".1415,-.1,12e2,10.-\";\n\tSplittedCharInputBuffer buffer(buf1, strlen(buf1), buf2, strlen(buf2));\n\tBufferInputReader in(buffer);\n\tdouble d;\n\tEXPECT_EQ(in.parseDouble(d), 'i');\n\tEXPECT_EQ(d, 1234.0);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'i');\n\tEXPECT_EQ(d, -5.0);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'f');\n\tEXPECT_EQ(d, 6.12);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'f');\n\tEXPECT_EQ(d, -3.1415);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'f');\n\tEXPECT_EQ(d, -0.1);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'f');\n\tEXPECT_EQ(d, 1200);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'f');\n\tEXPECT_EQ(d, 10.0);\n\tEXPECT_EQ(in.peek(), '-');\n\n\tEXPECT_FALSE(in.parseDouble(d));\n\tEXPECT_EQ(in.get(), '-');\n}\n"
  },
  {
    "path": "tests/StreamInputBufferTest.cpp",
    "content": "/*************************************************************************\n** StreamInputBufferTest.cpp                                            **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <map>\n#include <sstream>\n#include <stdexcept>\n#include <string>\n#include \"InputBuffer.hpp\"\n#include \"InputReader.hpp\"\n\nusing std::istringstream;\nusing std::map;\nusing std::string;\n\nTEST(StreamInputBufferTest, get) {\n\tistringstream iss(\"abcdefghijklmnopqrstuvwxyz\");\n\tStreamInputBuffer buffer(iss, 10);\n\tBufferInputReader in(buffer);\n\tbool ok=true;\n\tfor (int i=0; !in.eof() && ok; i++) {\n\t\tEXPECT_LT(i, 26);\n\t\tEXPECT_EQ(in.get(), 'a'+i);\n\t\tok = (i < 26);\n\t}\n}\n\n\nTEST(StreamInputBufferTest, read) {\n\tistringstream iss(\"abcdefghijklmnopqrst\");\n\tStreamInputReader ir(iss);\n\tchar buf[10];\n\tauto count = ir.read(buf, 9);\n\tASSERT_EQ(count, 9);\n\tbuf[count] = 0;\n\tEXPECT_EQ(string(buf), \"abcdefghi\");\n\n\tcount = ir.read(buf, 9);\n\tASSERT_EQ(count, 9);\n\tbuf[count] = 0;\n\tEXPECT_EQ(string(buf), \"jklmnopqr\");\n\n\tcount = ir.read(buf, 9);\n\tASSERT_EQ(count, 2);\n\tbuf[count] = 0;\n\tEXPECT_EQ(string(buf), \"st\");\n}\n\n\nTEST(StreamInputBufferTest, peek) {\n\tistringstream iss(\"abcdefghijklmnopqrstuvwxyz\");\n\tStreamInputBuffer buffer(iss, 10);\n\tBufferInputReader in(buffer);\n\tEXPECT_EQ(in.peek(), 'a');\n\tfor (int i=0; i < 20; i++)\n\t\tEXPECT_EQ(in.peek(i), 'a'+i);\n\t// we can't look forward more than BUFSIZE characters (10 in this case)\n\tfor (int i=21; i < 26; i++)\n\t\tEXPECT_EQ(in.peek(i), -1);\n}\n\n\nTEST(StreamInputBufferTest, check) {\n\tistringstream iss(\"abcdefghijklmnopqrstuvwxyz\");\n\tStreamInputBuffer buffer(iss, 10);\n\tBufferInputReader in(buffer);\n\tEXPECT_TRUE(in.check(\"abc\", false));\n\tEXPECT_TRUE(in.check(\"abc\", true));\n\tEXPECT_TRUE(in.check(\"def\", true));\n\tEXPECT_TRUE(in.check(\"ghi\", true));\n\tEXPECT_TRUE(in.check(\"jkl\", true));\n\tEXPECT_TRUE(in.check(\"mnopqrst\", false));\n\tEXPECT_TRUE(in.check(\"mnopqrst\", true));\n\tEXPECT_TRUE(in.check(\"uvwxyz\", true));\n}\n\n\nTEST(StreamInputBufferTest, skip) {\n\tistringstream iss(\"abcdefghijklmnopqrstuvwxyz\");\n\tStreamInputBuffer buffer(iss, 10);\n\tBufferInputReader in(buffer);\n\tin.skip(3);\n\tEXPECT_EQ(in.peek(), 'd');\n\tin.skipUntil(\"ijk\");\n\tEXPECT_EQ(in.peek(), 'l');\n\tin.skipUntil(\"z\");\n\tEXPECT_TRUE(in.eof());\n}\n\n\nTEST(StreamInputBufferTest, readUntil) {\n\tistringstream iss(\"abcdefghijklmnopqrstuvwxyz\");\n\tStreamInputBuffer buffer(iss, 10);\n\tBufferInputReader in(buffer);\n\tEXPECT_EQ(in.readUntil(\"ijk\"), \"abcdefghijk\");\n\tEXPECT_EQ(in.peek(), 'l');\n\tEXPECT_EQ(in.readUntil(\"q\"), \"lmnopq\");\n\tEXPECT_EQ(in.peek(), 'r');\n\tEXPECT_EQ(in.readUntil(\"X\"), \"rstuvwxyz\");\n\tEXPECT_LT(in.peek(), 0);\n\tEXPECT_TRUE(in.eof());\n}\n\n\nTEST(StreamInputBufferTest, parseInt) {\n\tistringstream iss(\"1234,-5,+6,10.-\");\n\tStreamInputBuffer buffer(iss, 10);\n\tBufferInputReader in(buffer);\n\tint n;\n\tEXPECT_TRUE(in.parseInt(n));\n\tEXPECT_EQ(n, 1234);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseInt(n));\n\tEXPECT_EQ(n, -5);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseInt(n));\n\tEXPECT_EQ(n, 6);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseInt(n));\n\tEXPECT_EQ(n, 10);\n\tEXPECT_EQ(in.get(), '.');\n\n\tEXPECT_FALSE(in.parseInt(n));\n\tEXPECT_EQ(in.get(), '-');\n}\n\n\nTEST(StreamInputBufferTest, parseUInt_base) {\n\tistringstream iss(\"1234,-5,10,1abc,1234a\");\n\tStreamInputBuffer buffer(iss, 10);\n\tBufferInputReader in(buffer);\n\tunsigned n;\n\tEXPECT_TRUE(in.parseUInt(10, n));\n\tEXPECT_EQ(n, 1234u);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_FALSE(in.parseUInt(10, n));\n\tin.get();\n\tEXPECT_TRUE(in.parseUInt(10, n));\n\tEXPECT_EQ(n, 5u);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseUInt(16, n));\n\tEXPECT_EQ(n, 16u);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseUInt(16, n));\n\tEXPECT_EQ(n, 0x1ABCu);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_TRUE(in.parseUInt(8, n));\n\tEXPECT_EQ(n, 01234u);\n\tEXPECT_EQ(in.get(), 'a');\n}\n\n\nTEST(StreamInputBufferTest, parseDouble) {\n\tistringstream iss(\"1234,-5,6.12,-3.1415,-0.5,-.1,12e2,10.-\");\n\tStreamInputBuffer buffer(iss, 10);\n\tBufferInputReader in(buffer);\n\tdouble d;\n\tEXPECT_EQ(in.parseDouble(d), 'i');\n\tEXPECT_EQ(d, 1234.0);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'i');\n\tEXPECT_EQ(d, -5.0);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'f');\n\tEXPECT_EQ(d, 6.12);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'f');\n\tEXPECT_EQ(d, -3.1415);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'f');\n\tEXPECT_EQ(d, -0.5);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'f');\n\tEXPECT_EQ(d, -0.1);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'f');\n\tEXPECT_EQ(d, 1200);\n\tEXPECT_EQ(in.get(), ',');\n\n\tEXPECT_EQ(in.parseDouble(d), 'f');\n\tEXPECT_EQ(d, 10.0);\n\tEXPECT_EQ(in.peek(), '-');\n\n\tEXPECT_FALSE(in.parseDouble(d));\n\tEXPECT_EQ(in.get(), '-');\n}\n\n\nTEST(StreamInputBufferTest, attribs1) {\n\tistringstream iss(\"aaa=1 bbb=2 c-c-c=3 3d=4 e\");\n\tStreamInputBuffer buffer(iss, 10);\n\tBufferInputReader in(buffer);\n\tmap<string,string> attr;\n\tint s = in.parseAttributes(attr, true);\n\tEXPECT_EQ(s, 3);\n\tEXPECT_EQ(attr[\"aaa\"], \"1\");\n\tEXPECT_EQ(attr[\"bbb\"], \"2\");\n\tEXPECT_EQ(attr[\"c-c-c\"], \"3\");\n\tEXPECT_THROW(attr.at(\"3d\"), std::out_of_range);\n\tEXPECT_THROW(attr.at(\"e\"), std::out_of_range);\n}\n\n\nTEST(StreamInputBufferTest, attribs2) {\n\tistringstream iss(\"aaa='1' bbb='2' c-c-c='3' d e='value'\");\n\tStreamInputBuffer buffer(iss, 10);\n\tBufferInputReader in(buffer);\n\tmap<string,string> attr;\n\tint s = in.parseAttributes(attr, false, \"'\");\n\tEXPECT_EQ(s, 5);\n\tEXPECT_EQ(attr[\"aaa\"], \"1\");\n\tEXPECT_EQ(attr[\"bbb\"], \"2\");\n\tEXPECT_EQ(attr[\"c-c-c\"], \"3\");\n\tEXPECT_EQ(attr[\"e\"], \"value\");\n\tEXPECT_NO_THROW(attr.at(\"d\"));\n\tEXPECT_TRUE(attr.at(\"d\").empty());\n}\n\n\nTEST(StreamInputBufferTest, invalidate) {\n\tistringstream iss(\"aaa=1 bbb=2 ccc=3 d e\");\n\tStreamInputBuffer buffer(iss, 10);\n\tEXPECT_EQ(buffer.get(), 'a');\n\tEXPECT_EQ(buffer.get(), 'a');\n\tEXPECT_EQ(buffer.get(), 'a');\n\tEXPECT_EQ(buffer.get(), '=');\n\tbuffer.invalidate();\n\tEXPECT_TRUE(buffer.eof());\n}\n\n\nTEST(StreamInputBufferTest, find) {\n\tistringstream iss(\"abcd efgh ijklmn abc\");\n\tStreamInputBuffer buffer(iss);\n\tBufferInputReader reader(buffer);\n\tEXPECT_EQ(reader.find('x'), -1);\n\tEXPECT_EQ(reader.find('c'), 2);\n\tEXPECT_EQ(reader.find(' '), 4);\n}\n\n\nTEST(StreamInputBufferTest, getString) {\n\tistringstream iss(\"abcd efgh \\\"ij'klm\\\"n abcdef '012\\\"34'xyz\");\n\tStreamInputBuffer buffer(iss);\n\tBufferInputReader reader(buffer);\n\tEXPECT_EQ(reader.getString(), \"abcd\");\n\tEXPECT_EQ(reader.getString(), \"efgh\");\n\tEXPECT_EQ(reader.getQuotedString(\"\\\"\"), \"ij'klm\");\n\tEXPECT_EQ(reader.getQuotedString(\"\\\"\"), \"\");\n\tEXPECT_EQ(reader.getString(4), \"n ab\");\n\tEXPECT_EQ(reader.getQuotedString(0), \"cdef\");\n\tEXPECT_EQ(reader.getQuotedString(\"\\\"'\"), \"012\\\"34\");\n}\n"
  },
  {
    "path": "tests/StreamReaderTest.cpp",
    "content": "/*************************************************************************\n** StreamReaderTest.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <fstream>\n#include <sstream>\n#include <string>\n#include \"StreamReader.hpp\"\n#include \"XXHashFunction.hpp\"\n\nusing namespace std;\n\nTEST(StreamReaderTest, readString) {\n\tstring str1 = \"dvisvgm converts DVI files to SVG.\";\n\tistringstream iss(str1);\n\tASSERT_TRUE(bool(iss));\n\tStreamReader reader(iss);\n\tstring str2 = reader.readString(iss.str().length());\n\tEXPECT_EQ(str1, str2);\n\tiss.clear();\n\tiss.str(str1);\n\tstr2 = reader.readString();\n\tEXPECT_EQ(str1, str2);\n}\n\n\nTEST(StreamReaderTest, readString_hashed) {\n\tstring str1 = \"dvisvgm converts DVI files to SVG.\";\n\tistringstream iss(str1);\n\tASSERT_TRUE(bool(iss));\n\tStreamReader reader(iss);\n\tXXH32HashFunction hashfunc;\n\tstring str2 = reader.readString(iss.str().length(), hashfunc);\n\tEXPECT_EQ(str1, str2);\n\tEXPECT_EQ(hashfunc.digestString(), \"190cc9d2\");\n\tiss.clear();\n\tiss.str(str1);\n\thashfunc.reset();\n\tstr2 = reader.readString(hashfunc, false);\n\tEXPECT_EQ(hashfunc.digestString(), \"190cc9d2\");\n}\n\n\nTEST(StreamReaderTest, readUnsigned) {\n\tstring str = \"\\x01\\x02\\x03\\x04\";\n\tistringstream iss(str);\n\tStreamReader reader(iss);\n\tuint32_t val = reader.readUnsigned(4);\n\tEXPECT_EQ(val, 0x01020304u);\n}\n\n\nTEST(StreamReaderTest, readUnsigned_hashed) {\n\tstring str = \"\\x01\\x02\\x03\\x04\";\n\tistringstream iss(str);\n\tStreamReader reader(iss);\n\tXXH32HashFunction hashfunc;\n\tuint32_t val = reader.readUnsigned(4, hashfunc);\n\tEXPECT_EQ(val, 0x01020304u);\n\tEXPECT_EQ(hashfunc.digestString(), \"fe96d19c\");\n}\n\n\nTEST(StreamReaderTest, readSigned) {\n\tstring str = \"\\xff\\xee\\xdd\\xcc\";\n\tistringstream iss(str);\n\tStreamReader reader(iss);\n\tint32_t val = reader.readSigned(4);\n\tEXPECT_EQ(val, int32_t(0xffeeddcc));\n}\n\n\nTEST(StreamReaderTest, readSigned_hashed) {\n\tstring str = \"\\xff\\xee\\xdd\\xcc\";\n\tistringstream iss(str);\n\tStreamReader reader(iss);\n\tXXH32HashFunction hashfunc;\n\tint32_t val = reader.readSigned(4, hashfunc);\n\tEXPECT_EQ(val, int32_t(0xffeeddcc));\n\tEXPECT_EQ(hashfunc.digestString(), \"8baa29bd\");\n}\n\n\nTEST(StreamReaderTest, readBytes) {\n\tstring str = \"\\xff\\xee\\xdd\\xcc\";\n\tistringstream iss(str);\n\tStreamReader reader(iss);\n\tvector<uint8_t> bytes = reader.readBytes(3);\n\tEXPECT_EQ(bytes.size(), 3u);\n\tEXPECT_EQ(bytes[0], 0xff);\n\tEXPECT_EQ(bytes[1], 0xee);\n\tEXPECT_EQ(bytes[2], 0xdd);\n}\n\n\nTEST(StreamReaderTest, readBytes_hashed) {\n\tstring str = \"\\xff\\xee\\xdd\\xcc\";\n\tistringstream iss(str);\n\tStreamReader reader(iss);\n\tXXH32HashFunction hashfunc;\n\tvector<uint8_t> bytes = reader.readBytes(3, hashfunc);\n\tEXPECT_EQ(bytes.size(), 3u);\n\tEXPECT_EQ(bytes[0], 0xff);\n\tEXPECT_EQ(bytes[1], 0xee);\n\tEXPECT_EQ(bytes[2], 0xdd);\n\tEXPECT_EQ(hashfunc.digestString(), \"5eda43a0\");\n\tint byte = reader.readByte(hashfunc);\n\tEXPECT_EQ(byte, 0xcc);\n\tEXPECT_EQ(hashfunc.digestString(), \"8baa29bd\");\n}\n\n"
  },
  {
    "path": "tests/StreamWriterTest.cpp",
    "content": "/*************************************************************************\n** StreamWriterTest.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include <string>\n#include \"StreamWriter.hpp\"\n#include \"XXHashFunction.hpp\"\n\nusing namespace std;\n\nTEST(StreamWriterTest, writeString) {\n\tostringstream oss;\n\tStreamWriter writer(oss);\n\tstring str = \"dvisvgm converts DVI files to SVG.\";\n\twriter.writeString(str);\n\tEXPECT_EQ(oss.str(), str);\n\n\toss.str(\"\");\n\twriter.writeString(str, true);\n\tstr.push_back('\\0');\n\tEXPECT_EQ(oss.str(), str);\n}\n\n\nTEST(StreamWriterTest, writeString_hashed) {\n\tostringstream oss;\n\tStreamWriter writer(oss);\n\tXXH32HashFunction hashfunc;\n\tstring str = \"dvisvgm converts DVI files to SVG.\";\n\twriter.writeString(str, hashfunc);\n\tEXPECT_EQ(oss.str(), str);\n\tEXPECT_EQ(hashfunc.digestString(), \"190cc9d2\");\n\n\toss.str(\"\");\n\thashfunc.reset();\n\twriter.writeString(str, hashfunc, true);\n\tstr.push_back('\\0');\n\tEXPECT_EQ(oss.str(), str);\n\tEXPECT_EQ(hashfunc.digestString(), \"f82e1606\");\n}\n\n\nTEST(StreamWriterTest, writeUnsigned) {\n\tostringstream oss;\n\tStreamWriter writer(oss);\n\twriter.writeUnsigned(0x00010203, 4);\n\tstring str;\n\tstr.push_back('\\x00');\n\tstr.push_back('\\x01');\n\tstr.push_back('\\x02');\n\tstr.push_back('\\x03');\n\tEXPECT_EQ(oss.str(), str);\n}\n\n\nTEST(StreamWriterTest, writeUnsigned_hashed) {\n\tostringstream oss;\n\tStreamWriter writer(oss);\n\tXXH32HashFunction hashfunc;\n\twriter.writeUnsigned(0x00010203, 4, hashfunc);\n\tstring str;\n\tstr.push_back('\\x00');\n\tstr.push_back('\\x01');\n\tstr.push_back('\\x02');\n\tstr.push_back('\\x03');\n\tEXPECT_EQ(oss.str(), str);\n\tEXPECT_EQ(hashfunc.digestString(), \"80691e66\");\n}\n\n\nTEST(StreamWriterTest, writeSigned) {\n\tostringstream oss;\n\tStreamWriter writer(oss);\n\twriter.writeSigned(0xffeeddcc, 4);\n\tstring str = \"\\xff\\xee\\xdd\\xcc\";\n\tEXPECT_EQ(oss.str(), str);\n}\n\n\nTEST(StreamWriterTest, writeSigned_hashed) {\n\tostringstream oss;\n\tStreamWriter writer(oss);\n\tXXH32HashFunction hashfunc;\n\twriter.writeSigned(0xffeeddcc, 4, hashfunc);\n\tstring str = \"\\xff\\xee\\xdd\\xcc\";\n\tEXPECT_EQ(oss.str(), str);\n\tEXPECT_EQ(hashfunc.digestString(), \"8baa29bd\");\n}\n"
  },
  {
    "path": "tests/StringMatcherTest.cpp",
    "content": "/*************************************************************************\n** StringMatcherTest.cpp                                                **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"InputReader.hpp\"\n\nusing namespace std;\n\nTEST(StringMatcherTest, match1) {\n\tistringstream iss;\n\tStringMatcher matcher(\"pattern\");\n\tStreamInputReader ir(iss);\n\tEXPECT_FALSE(matcher.match(ir));\n\tEXPECT_EQ(matcher.charsRead(), 0u);\n\tEXPECT_LT(ir.peek(), 0);\n}\n\n\nTEST(StringMatcherTest, match2) {\n\tistringstream iss(\"abcpatpatternxyz\");\n\tStringMatcher matcher(\"\");\n\tStreamInputReader ir(iss);\n\tEXPECT_TRUE(matcher.match(ir));\n\tEXPECT_EQ(matcher.charsRead(), 1u);\n\tEXPECT_EQ(ir.peek(), 'b');\n}\n\n\nTEST(StringMatcherTest, match3) {\n\tistringstream iss(\"abcpatatternxyz\");\n\tStringMatcher matcher(\"pattern\");\n\tStreamInputReader ir(iss);\n\tEXPECT_FALSE(matcher.match(ir));\n\tEXPECT_EQ(matcher.charsRead(), 15u);\n\tEXPECT_LT(ir.peek(), 0);\n}\n\n\nTEST(StringMatcherTest, match4) {\n\tistringstream iss(\"abcpatpatternxyz\");\n\tStringMatcher matcher(\"pattern\");\n\tStreamInputReader ir(iss);\n\tEXPECT_TRUE(matcher.match(ir));\n\tEXPECT_EQ(matcher.charsRead(), 13u);\n\tEXPECT_EQ(ir.peek(), 'x');\n\tiss.clear();\n\tiss.str(\"abcpatpattern\");\n\tEXPECT_TRUE(matcher.match(ir));\n\tEXPECT_EQ(matcher.charsRead(), 13u);\n\tEXPECT_LT(ir.peek(), 0);\n\tiss.clear();\n\tiss.str(\"pattern\");\n\tEXPECT_TRUE(matcher.match(ir));\n\tEXPECT_EQ(matcher.charsRead(), 7u);\n\tEXPECT_LT(ir.peek(), 0);\n}\n\n\nTEST(StringMatcherTest, match5) {\n\tistringstream iss(\"abcpatpatternxyz\");\n\tStringMatcher matcher(\"pattern\");\n\tStreamInputReader ir(iss);\n\tEXPECT_TRUE(matcher.match(ir));\n\tEXPECT_EQ(matcher.charsRead(), 13u);\n\tEXPECT_EQ(ir.peek(), 'x');\n}\n\n\nTEST(StringMatcherTest, read1) {\n\tistringstream iss;\n\tStringMatcher matcher(\"pattern\");\n\tStreamInputReader ir(iss);\n\tEXPECT_TRUE(matcher.read(ir).empty());\n\tEXPECT_EQ(matcher.charsRead(), 0u);\n\tEXPECT_LT(ir.peek(), 0);\n}\n\n\nTEST(StringMatcherTest, read2) {\n\tistringstream iss(\"abcpatpatternxyz\");\n\tStringMatcher matcher(\"\");\n\tStreamInputReader ir(iss);\n\tEXPECT_EQ(matcher.read(ir), \"a\");\n\tEXPECT_EQ(matcher.charsRead(), 1u);\n\tEXPECT_EQ(ir.peek(), 'b');\n}\n\n\nTEST(StringMatcherTest, read3) {\n\tistringstream iss(\"abcpatatternxyz\");\n\tStringMatcher matcher(\"pattern\");\n\tStreamInputReader ir(iss);\n\tEXPECT_EQ(matcher.read(ir), \"abcpatatternxyz\");\n\tEXPECT_EQ(matcher.charsRead(), 15u);\n\tEXPECT_LT(ir.peek(), 0);\n}\n\n\nTEST(StringMatcherTest, read4) {\n\tistringstream iss(\"abcpatpatternxyz\");\n\tStringMatcher matcher(\"pattern\");\n\tStreamInputReader ir(iss);\n\tEXPECT_EQ(matcher.read(ir), \"abcpatpattern\");\n\tEXPECT_EQ(matcher.charsRead(), 13u);\n\tEXPECT_EQ(ir.peek(), 'x');\n\tiss.clear();\n\tiss.str(\"abcpatpattern\");\n\tEXPECT_EQ(matcher.read(ir), \"abcpatpattern\");\n\tEXPECT_EQ(matcher.charsRead(), 13u);\n\tEXPECT_LT(ir.peek(), 0);\n\tiss.clear();\n\tiss.str(\"pattern\");\n\tEXPECT_EQ(matcher.read(ir), \"pattern\");\n\tEXPECT_EQ(matcher.charsRead(), 7u);\n\tEXPECT_LT(ir.peek(), 0);\n}\n\n\nTEST(StringMatcherTest, read5) {\n\tistringstream iss(\"abcpatpatternxyz\");\n\tStringMatcher matcher(\"pattern\");\n\tStreamInputReader ir(iss);\n\tEXPECT_EQ(matcher.read(ir), \"abcpatpattern\");\n\tEXPECT_EQ(matcher.charsRead(), 13u);\n\tEXPECT_EQ(ir.peek(), 'x');\n}\n"
  },
  {
    "path": "tests/SubfontTest.cpp",
    "content": "/*************************************************************************\n** SubfontTest.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"Subfont.hpp\"\n#include \"testutil.hpp\"\n\nusing namespace std;\n\nTEST(SubfontTest, collect_subfonts) {\n\ttry {\n\t\tif (SubfontDefinition *sfd = SubfontDefinition::lookup(\"sample\")) {\n\t\t\tvector<Subfont*> subfonts = sfd->subfonts();\n\t\t\tconst char *ids_cmp[] = {\"00\", \"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"x1\"};\n\t\t\tsize_t size = sizeof(ids_cmp)/sizeof(Subfont*);\n\t\t\tEXPECT_EQ(subfonts.size(), size);\n\t\t\tfor (size_t i=0; i < size; i++) {\n\t\t\t\tEXPECT_EQ(subfonts[i]->id(), ids_cmp[i]);\n\t\t\t}\n\t\t}\n\t}\n\tcatch (SubfontException &e) {\n\t\tFAIL() << e.what();\n\t}\n}\n\n\nTEST(SubfontTest, read_table) {\n\ttry {\n\t\tif (SubfontDefinition *sfd = SubfontDefinition::lookup(\"sample\")) {\n\t\t\t// check scanning of single value entries\n\t\t\tSubfont *subfont = sfd->subfont(\"02\");\n\t\t\tASSERT_NE(subfont, nullptr);\n\t\t\tEXPECT_EQ(subfont->id(), \"02\");\n\t\t\tEXPECT_EQ(subfont->decode(0), 0xff45);\n\t\t\tEXPECT_EQ(subfont->decode(1), 0xff46);\n\t\t\tEXPECT_EQ(subfont->decode(2), 0xff47);\n\t\t\tEXPECT_EQ(subfont->decode(8), 0xff4d);\n\t\t\tEXPECT_EQ(subfont->decode(32), 0x3047);\n\t\t\tEXPECT_EQ(subfont->decode(255), 0x03ba);\n\n\t\t\t// check scanning of ranges\n\t\t\tsubfont = sfd->subfont(\"x1\");\n\t\t\tASSERT_NE(subfont, nullptr);\n\t\t\tEXPECT_EQ(subfont->id(), \"x1\");\n\t\t\tEXPECT_EQ(subfont->decode(0), 0x0010);\n\t\t\tEXPECT_EQ(subfont->decode(1), 0x0011);\n\t\t\tEXPECT_EQ(subfont->decode(2), 0x0012);\n\t\t\tEXPECT_EQ(subfont->decode(0x20), 0x0030);\n\t\t\tEXPECT_EQ(subfont->decode(0x21), 0x1010);\n\t\t\tEXPECT_EQ(subfont->decode(0x41), 0x1030);\n\t\t\tEXPECT_EQ(subfont->decode(0x42), 0xe000);\n\t\t\tEXPECT_EQ(subfont->decode(0x43), 0);\n\n\t\t\t//check scanning of offset values\n\t\t\tEXPECT_EQ(subfont->decode(0x9f), 0);\n\t\t\tEXPECT_EQ(subfont->decode(0xa0), 0x1000);\n\t\t\tEXPECT_EQ(subfont->decode(0xa1), 0x2000);\n\t\t\tEXPECT_EQ(subfont->decode(0xa2), 0);\n\t\t}\n\t\telse\n\t\t\tWARNING(\"sample.sfd not found\");\n\t}\n\tcatch (SubfontException &e) {\n\t\tFAIL() << e.what() << \" in line \" << e.lineno();\n\t}\n}\n"
  },
  {
    "path": "tests/TFMReaderTest.cpp",
    "content": "/*************************************************************************\n** TFMReaderTest.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <cstdlib>\n#include <memory>\n#include <fstream>\n#include <string>\n#include <vector>\n#include \"TFM.hpp\"\n#include \"utility.hpp\"\n\n#ifndef SRCDIR\n#define SRCDIR \".\"\n#endif\n\nusing namespace std;\n\n\nclass TFMReaderTest : public ::testing::Test {\n\tpublic:\n\t\tvoid SetUp () override {\n\t\t\tstring fname = string(SRCDIR)+\"/data/cmr10.tfm\";\n\t\t\tifstream ifs(fname, ios::binary);\n\t\t\tASSERT_TRUE(ifs.is_open()) << \"failed opening \" << fname;\n\t\t\ttfm = util::make_unique<TFM>();\n\t\t\ttfm->read(ifs);\n\t\t}\n\n\tprotected:\n\t\tunique_ptr<TFM> tfm;\n};\n\n\nTEST_F(TFMReaderTest, properties) {\n\tASSERT_NE(tfm, nullptr);\n\tEXPECT_EQ(tfm->getChecksum(), 0x4BF16079u);\n\tEXPECT_FALSE(tfm->verticalLayout());\n\tEXPECT_EQ(tfm->firstChar(), 0u);\n\tEXPECT_EQ(tfm->lastChar(), 127u);\n\tEXPECT_DOUBLE_EQ(tfm->getDesignSize(), 10.0*72.0/72.27);\n}\n\nTEST_F(TFMReaderTest, ascent_descent) {\n\tASSERT_NE(tfm, nullptr);\n\tEXPECT_DOUBLE_EQ(tfm->getAscent(), 0.75*tfm->getDesignSize());\n\tEXPECT_DOUBLE_EQ(tfm->getDescent(), 0.25*tfm->getDesignSize());\n}\n\nTEST_F(TFMReaderTest, charWidth) {\n\tASSERT_NE(tfm, nullptr);\n\tEXPECT_NEAR(tfm->getCharWidth('M'), 9.132, 0.001);\n\tEXPECT_NEAR(tfm->getCharWidth('g'), 4.981, 0.001);\n\tEXPECT_DOUBLE_EQ(tfm->getCharWidth(200), 0);\n}\n\n\nTEST_F(TFMReaderTest, charHeight) {\n\tASSERT_NE(tfm, nullptr);\n\tEXPECT_NEAR(tfm->getCharHeight('M'), 6.808, 0.001);\n\tEXPECT_NEAR(tfm->getCharHeight('g'), 4.289, 0.001);\n\tEXPECT_DOUBLE_EQ(tfm->getCharHeight(200), 0);\n}\n\n\nTEST_F(TFMReaderTest, charDepth) {\n\tASSERT_NE(tfm, nullptr);\n\tEXPECT_DOUBLE_EQ(tfm->getCharDepth('M'), 0);\n\tEXPECT_NEAR(tfm->getCharDepth('g'), 1.937, 0.001);\n\tEXPECT_DOUBLE_EQ(tfm->getCharDepth(200), 0);\n}\n\n\nTEST_F(TFMReaderTest, italicCorr) {\n\tASSERT_NE(tfm, nullptr);\n\tEXPECT_DOUBLE_EQ(tfm->getItalicCorr('M'), 0);\n\tEXPECT_NEAR(tfm->getItalicCorr('g'), 0.138, 0.001);\n\tEXPECT_DOUBLE_EQ(tfm->getItalicCorr(200), 0);\n}\n\n\nTEST_F(TFMReaderTest, params) {\n\tASSERT_NE(tfm, nullptr);\n\tEXPECT_NEAR(tfm->getSpace(), 3.321, 0.001);\n\tEXPECT_NEAR(tfm->getSpaceShrink(), 1.107, 0.001);\n\tEXPECT_NEAR(tfm->getSpaceStretch(), 1.66, 0.001);\n\tEXPECT_NEAR(tfm->getQuad(), 9.963, 0.001);\n}\n"
  },
  {
    "path": "tests/TensorProductPatchTest.cpp",
    "content": "/*************************************************************************\n** TensorProductPatchTest.cpp                                           **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <vector>\n#include \"Color.hpp\"\n#include \"TensorProductPatch.hpp\"\n\nusing namespace std;\n\n\n#define EXPECT_NEAR_PAIR(name, p1, p2, eps) \\\n\t{SCOPED_TRACE(name); expect_near_pair(p1, p2, eps);}\n\n#define EXPECT_EQUAL_PAIR(name, p1, p2) \\\n\t{SCOPED_TRACE(name); expect_equal_pair(p1, p2);}\n\n#define CHECK_BEZIER_POINTS(name, bezier, p1, p2, p3, p4) \\\n\t{SCOPED_TRACE(name); checkBezierPoints(bezier, p1, p2, p3, p4);}\n\n\nstatic void expect_near_pair (const DPair &p1, const DPair &p2, double eps) {\n\tEXPECT_NEAR(p1.x(), p2.x(), eps);\n\tEXPECT_NEAR(p1.y(), p2.y(), eps);\n}\n\n\nstatic void expect_equal_pair (const DPair &p1, const DPair &p2) {\n\tEXPECT_DOUBLE_EQ(p1.x(), p2.x());\n\tEXPECT_DOUBLE_EQ(p1.y(), p2.y());\n}\n\n\nclass TensorProductPatchTest : public ::testing::Test {\n\tprotected:\n\t\tvoid SetUp () override {\n\t\t\t_points.resize(16);\n\t\t\t_points[0]  = DPair(10, 10);\n\t\t\t_points[1]  = DPair(0, 30);\n\t\t\t_points[2]  = DPair(20, 40);\n\t\t\t_points[3]  = DPair(10, 70);\n\t\t\t_points[4]  = DPair(20, 100);\n\t\t\t_points[5]  = DPair(70, 100);\n\t\t\t_points[6]  = DPair(100, 70);\n\t\t\t_points[7]  = DPair(90, 60);\n\t\t\t_points[8]  = DPair(80, 50);\n\t\t\t_points[9]  = DPair(70, 20);\n\t\t\t_points[10] = DPair(50, 30);\n\t\t\t_points[11] = DPair(20, 0);\n\t\t\t_points[12] = DPair(30, 40);\n\t\t\t_points[13] = DPair(40, 80);\n\t\t\t_points[14] = DPair(60, 70);\n\t\t\t_points[15] = DPair(40, 40);\n\t\t\t_patch.setPoints(_points, 0, nullptr);\n\n\t\t\tvector<Color> colors(4);\n\t\t\tcolors[0].setRGB(1.0, 0.0, 0.0);\n\t\t\tcolors[1].setRGB(1.0, 1.0, 0.0);\n\t\t\tcolors[2].setRGB(1.0, 0.0, 1.0);\n\t\t\tcolors[3].setRGB(0.0, 1.0, 0.0);\n\t\t\t_patch.setColors(colors, 0, 0);\n\t\t}\n\n\t\tvoid checkBezierPoints (const CubicBezier &b, const DPair &p1, const DPair &p2, const DPair &p3, const DPair &p4) const {\n\t\t\tEXPECT_EQ(b.point(0), p1);\n\t\t\tEXPECT_EQ(b.point(1), p2);\n\t\t\tEXPECT_EQ(b.point(2), p3);\n\t\t\tEXPECT_EQ(b.point(3), p4);\n\t\t}\n\n\n\tprotected:\n\t\tvector<DPair> _points;\n\t\tTensorProductPatch _patch;\n};\n\n\nTEST_F(TensorProductPatchTest, construct) {\n\tEXPECT_EQ(_patch.psShadingType(), 7);\n\tEXPECT_EQ(_patch.numPoints(0), 16);\n\tEXPECT_EQ(_patch.numColors(0), 4);\n\tEXPECT_EQ(_patch.numPoints(1), 12);\n\tEXPECT_EQ(_patch.numColors(1), 2);\n\n\tCoonsPatch cp(Color::ColorSpace::RGB);\n\tEXPECT_EQ(cp.psShadingType(), 6);\n\tEXPECT_EQ(cp.numPoints(0), 12);\n\tEXPECT_EQ(cp.numColors(0), 4);\n\tEXPECT_EQ(cp.numPoints(1), 8);\n\tEXPECT_EQ(cp.numColors(1), 2);\n}\n\n\nTEST_F(TensorProductPatchTest, valueAt) {\n\tEXPECT_EQ(_patch.valueAt(0, 0), DPair(10, 10));\n\tEXPECT_EQ(_patch.valueAt(1, 0), DPair(70, 20));\n\tEXPECT_EQ(_patch.valueAt(0, 1), DPair(10, 70));\n\tEXPECT_EQ(_patch.valueAt(1, 1), DPair(100, 70));\n\n\tvector<DPair> points = _points;\n\tvector<Color> colors(2);\n\tpoints.resize(12);\n\tTensorProductPatch tpp1(points, colors, Color::ColorSpace::RGB, 1, &_patch);\n\tEXPECT_EQ(tpp1.valueAt(0, 0), DPair(10, 70));\n\tEXPECT_EQ(tpp1.valueAt(0, 1), DPair(100, 70));\n\tEXPECT_EQ(tpp1.valueAt(1, 0), DPair(70, 100));\n\tEXPECT_EQ(tpp1.valueAt(1, 1), DPair(20, 40));\n\n\tTensorProductPatch tpp2(points, colors, Color::ColorSpace::RGB, 2, &_patch);\n\tEXPECT_EQ(tpp2.valueAt(0, 0), DPair(100, 70));\n\tEXPECT_EQ(tpp2.valueAt(0, 1), DPair(70, 20));\n\tEXPECT_EQ(tpp2.valueAt(1, 0), DPair(70, 100));\n\tEXPECT_EQ(tpp2.valueAt(1, 1), DPair(20, 40));\n\n\tTensorProductPatch tpp3(points, colors, Color::ColorSpace::RGB, 3, &_patch);\n\tEXPECT_EQ(tpp3.valueAt(0, 0), DPair(70, 20));\n\tEXPECT_EQ(tpp3.valueAt(0, 1), DPair(10, 10));\n\tEXPECT_EQ(tpp3.valueAt(1, 0), DPair(70, 100));\n\tEXPECT_EQ(tpp3.valueAt(1, 1), DPair(20, 40));\n\n\tcolors.resize(4);\n\tCoonsPatch cp1(points, colors, Color::ColorSpace::RGB, 0, nullptr);\n\tEXPECT_EQ(cp1.valueAt(0, 0), DPair(10, 10));\n\tEXPECT_EQ(cp1.valueAt(0, 1), DPair(10, 70));\n\tEXPECT_EQ(cp1.valueAt(1, 0), DPair(70, 20));\n\tEXPECT_EQ(cp1.valueAt(1, 1), DPair(100, 70));\n\n\tpoints.resize(8);\n\tcolors.resize(2);\n\tCoonsPatch cp2(points, colors, Color::ColorSpace::RGB, 1, &cp1);\n\tEXPECT_EQ(cp2.valueAt(0, 0), DPair(10, 70));\n\tEXPECT_EQ(cp2.valueAt(0, 1), DPair(100, 70));\n\tEXPECT_EQ(cp2.valueAt(1, 0), DPair(70, 100));\n\tEXPECT_EQ(cp2.valueAt(1, 1), DPair(20, 40));\n\n\tCoonsPatch cp3(points, colors, Color::ColorSpace::RGB, 2, &cp1);\n\tEXPECT_EQ(cp3.valueAt(0, 0), DPair(100, 70));\n\tEXPECT_EQ(cp3.valueAt(0, 1), DPair(70, 20));\n\tEXPECT_EQ(cp3.valueAt(1, 0), DPair(70, 100));\n\tEXPECT_EQ(cp3.valueAt(1, 1), DPair(20, 40));\n\n\tCoonsPatch cp4(points, colors, Color::ColorSpace::RGB, 3, &cp1);\n\tEXPECT_EQ(cp4.valueAt(0, 0), DPair(70, 20));\n\tEXPECT_EQ(cp4.valueAt(0, 1), DPair(10, 10));\n\tEXPECT_EQ(cp4.valueAt(1, 0), DPair(70, 100));\n\tEXPECT_EQ(cp4.valueAt(1, 1), DPair(20, 40));\n}\n\n\nTEST_F(TensorProductPatchTest, vertices) {\n\tEXPECT_EQ(_patch.valueAt(0,0), DPair(10,10));\n\tEXPECT_EQ(_patch.valueAt(0,1), DPair(10,70));\n\tEXPECT_EQ(_patch.valueAt(1,1), DPair(100,70));\n\tEXPECT_EQ(_patch.valueAt(1,0), DPair(70,20));\n\n\tEXPECT_EQ(_patch.colorAt(0,0).rgbString(), \"#f00\");\n\tEXPECT_EQ(_patch.colorAt(0,1).rgbString(), \"#ff0\");\n\tEXPECT_EQ(_patch.colorAt(1,1).rgbString(), \"#f0f\");\n\tEXPECT_EQ(_patch.colorAt(1,0).rgbString(), \"#0f0\");\n}\n\n\nTEST_F(TensorProductPatchTest, curves) {\n\tCubicBezier bezier;\n\tbezier = _patch.horizontalCurve(0);\n\tCHECK_BEZIER_POINTS(\"A\", bezier, DPair(10, 10), DPair(20, 0), DPair(50, 30), DPair(70, 20));\n\tbezier = _patch.horizontalCurve(1);\n\tCHECK_BEZIER_POINTS(\"B\", bezier, DPair(10, 70), DPair(20, 100), DPair(70, 100), DPair(100, 70));\n\tbezier = _patch.verticalCurve(0);\n\tCHECK_BEZIER_POINTS(\"C\", bezier, DPair(10, 10), DPair(0, 30), DPair(20, 40), DPair(10, 70));\n\tbezier = _patch.verticalCurve(1);\n\tCHECK_BEZIER_POINTS(\"D\", bezier, DPair(70, 20), DPair(80, 50), DPair(90, 60), DPair(100, 70));\n}\n\n\nTEST_F(TensorProductPatchTest, blossom_outer) {\n\tEXPECT_EQ(_patch.blossomValue(0,0,0,0,0,0), DPair(10, 10));\n\tEXPECT_EQ(_patch.blossomValue(0,0,0,1,0,0), DPair(0, 30));\n\tEXPECT_EQ(_patch.blossomValue(0,0,0,1,1,0), DPair(20, 40));\n\tEXPECT_EQ(_patch.blossomValue(0,0,0,1,1,1), DPair(10, 70));\n\n\tEXPECT_EQ(_patch.blossomValue(1,1,1,0,0,0), DPair(70, 20));\n\tEXPECT_EQ(_patch.blossomValue(1,1,1,1,0,0), DPair(80, 50));\n\tEXPECT_EQ(_patch.blossomValue(1,1,1,1,1,0), DPair(90, 60));\n\tEXPECT_EQ(_patch.blossomValue(1,1,1,1,1,1), DPair(100, 70));\n\n\tEXPECT_EQ(_patch.blossomValue(1,0,0,0,0,0), DPair(20, 0));\n\tEXPECT_EQ(_patch.blossomValue(1,1,0,0,0,0), DPair(50, 30));\n\tEXPECT_EQ(_patch.blossomValue(1,1,1,0,0,0), DPair(70, 20));\n\n\tEXPECT_EQ(_patch.blossomValue(0,0,0,1,1,1), DPair(10, 70));\n\tEXPECT_EQ(_patch.blossomValue(1,0,0,1,1,1), DPair(20, 100));\n\tEXPECT_EQ(_patch.blossomValue(1,1,0,1,1,1), DPair(70, 100));\n}\n\n\nTEST_F(TensorProductPatchTest, blossom_inner) {\n\tEXPECT_EQ(_patch.blossomValue(1,0,0,1,0,0), DPair(30, 40));\n\tEXPECT_EQ(_patch.blossomValue(1,1,0,1,0,0), DPair(40, 40));\n\tEXPECT_EQ(_patch.blossomValue(1,0,0,1,1,0), DPair(40, 80));\n\tEXPECT_EQ(_patch.blossomValue(1,1,0,1,1,0), DPair(60, 70));\n}\n\n\nTEST_F(TensorProductPatchTest, values) {\n\tEXPECT_EQUAL_PAIR(\"A\", _patch.valueAt(0.25, 0.5), _patch.blossomValue(0.25, 0.25, 0.25, 0.5, 0.5, 0.5));\n\tEXPECT_NEAR_PAIR(\"B\", _patch.valueAt(0.25, 0.5), DPair(26.1133, 48.457), 0.0001);\n\n\tEXPECT_EQUAL_PAIR(\"C\", _patch.valueAt(0.8, 0.2), _patch.blossomValue(0.8, 0.8, 0.8, 0.2, 0.2, 0.2));\n\tEXPECT_NEAR_PAIR(\"D\", _patch.valueAt(0.8, 0.2), DPair(59.5974, 35.4502), 0.0001);\n}\n\n\nTEST_F(TensorProductPatchTest, boundaryPath) {\n\tGraphicsPath<double> path = _patch.getBoundaryPath();\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10C20 0 50 30 70 20C80 50 90 60 100 70C70 100 20 100 10 70C20 40 0 30 10 10Z\");\n}\n\n\nTEST_F(TensorProductPatchTest, subpatch) {\n\tTensorProductPatch tpp;\n\t_patch.subpatch(0, 0.5, 0, 0.5, tpp);\n\tGraphicsPath<double> path = tpp.getBoundaryPath();\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M10 10C5 20 7.5 27.5 10 36.25C20.625 46.875 31.25 52.1875 43.28125 54.21875C40 40.9375 36.25 27.5 36.25 15C25 10 15 5 10 10Z\");\n\tEXPECT_EQ(tpp.colorAt(0, 0).rgbString(), \"#f00\");\n\tEXPECT_EQ(tpp.colorAt(0, 1).rgbString(), \"#ff8000\");\n\tEXPECT_EQ(tpp.colorAt(1, 0).rgbString(), \"#808000\");\n\tEXPECT_EQ(tpp.colorAt(1, 1).rgbString(), \"#bf8040\");\n}\n\n\nTEST_F(TensorProductPatchTest, bbox) {\n\tBoundingBox bbox = _patch.getBBox();\n\tEXPECT_NEAR(bbox.minX(), 7.1132, 0.0001);\n\tEXPECT_NEAR(bbox.minY(), 7.9289, 0.0001);\n\tEXPECT_DOUBLE_EQ(bbox.maxX(), 100.0);\n\tEXPECT_DOUBLE_EQ(bbox.maxY(), 92.5);\n}\n\n\nclass Callback : public ShadingPatch::Callback {\n\tpublic:\n\t\tvoid patchSegment (GraphicsPath<double> &path, const Color &color) override {\n\t\t\tostringstream oss;\n\t\t\tpath.writeSVG(oss, false);\n\t\t\t_pathstr += oss.str();\n\t\t\t_colorstr += color.rgbString();\n\t\t}\n\t\tstring pathstr() const  {return _pathstr;}\n\t\tstring colorstr() const {return _colorstr;}\n\t\tvoid reset ()           {_pathstr.clear(); _colorstr.clear();}\n\n\tprivate:\n\t\tstring _pathstr;\n\t\tstring _colorstr;\n};\n\n\nTEST_F(TensorProductPatchTest, approximate) {\n\tCallback callback;\n\tvector<Color> colors(4);\n\tTensorProductPatch tpp(_points, colors, Color::ColorSpace::RGB, 0, nullptr);\n\ttpp.approximate(2, false, 0.1, callback);\n\tEXPECT_EQ(callback.pathstr(),\n\t\t\"M10 10C15 5 25 10 36.25 15C36.25 27.5 40 40.9375 43.28125 54.21875C31.25 52.1875 20.625 46.875 10 36.25\"\n\t\t\"C7.5 27.5 5 20 10 10ZM36.25 15C47.5 20 60 25 70 20C75 35 80 45 85 52.5C68.75 55 55.3125 56.25 43.28125 54.21875\"\n\t\t\"C40 40.9375 36.25 27.5 36.25 15ZM10 36.25C20.625 46.875 31.25 52.1875 43.28125 54.21875C46.5625 67.5 49.375 80.625 47.5 92.5\"\n\t\t\"C30 92.5 15 85 10 70C15 55 12.5 45 10 36.25ZM43.28125 54.21875C55.3125 56.25 68.75 55 85 52.5C90 60 95 65 100 70\"\n\t\t\"C85 85 65 92.5 47.5 92.5C49.375 80.625 46.5625 67.5 43.28125 54.21875Z\");\n\tEXPECT_EQ(callback.colorstr(), \"#000#000#000#000\");\n\n\tcallback.reset();\n\t_patch.approximate(2, false, 0.1, callback);\n\tEXPECT_EQ(\n\t\tcallback.pathstr(),\n\t   \"M10 10C15 5 25 10 36.25 15C36.25 27.5 40 40.9375 43.28125 54.21875C31.25 52.1875 20.625 46.875 10 36.25C7.5 27.5 5 20 10 10Z\"\n\t\t\"M36.25 15C47.5 20 60 25 70 20C75 35 80 45 85 52.5C68.75 55 55.3125 56.25 43.28125 54.21875C40 40.9375 36.25 27.5 36.25 15Z\"\n\t\t\"M10 36.25C20.625 46.875 31.25 52.1875 43.28125 54.21875C46.5625 67.5 49.375 80.625 47.5 92.5C30 92.5 15 85 10 70C15 55 12.5 45 10 36.25Z\"\n\t\t\"M43.28125 54.21875C55.3125 56.25 68.75 55 85 52.5C90 60 95 65 100 70C85 85 65 92.5 47.5 92.5C49.375 80.625 46.5625 67.5 43.28125 54.21875Z\");\n\tEXPECT_EQ(callback.colorstr(), \"#cf6010#709f30#ef9f30#cf608f\");\n}\n\n\nTEST_F(TensorProductPatchTest, fail) {\n\t// edge flag == 0\n\tvector<DPair> points(15);\n\tEXPECT_THROW(_patch.setPoints(points, 0, nullptr), ShadingException);\n\tpoints.resize(17);  // too many points\n\tEXPECT_THROW(_patch.setPoints(points, 0, nullptr), ShadingException);\n\n\tvector<Color> colors(2); // too few colors\n\tEXPECT_THROW(_patch.setColors(colors, 0, nullptr), ShadingException);\n\tcolors.resize(5);  // too many colors\n\tEXPECT_THROW(_patch.setColors(colors, 0, nullptr), ShadingException);\n\n\t// edge flag > 0\n\tpoints.resize(16);\n\tEXPECT_THROW(_patch.setPoints(points, 1, nullptr), ShadingException);\n\tpoints.resize(11);  // too few points\n\tEXPECT_THROW(_patch.setPoints(points, 1, &_patch), ShadingException);\n\tpoints.resize(13);  // too many points\n\tEXPECT_THROW(_patch.setPoints(points, 1, &_patch), ShadingException);\n\n\tcolors.resize(4);\n\tEXPECT_THROW(_patch.setColors(colors, 1, nullptr), ShadingException);\n\tcolors.resize(1);  // too few colors\n\tEXPECT_THROW(_patch.setColors(colors, 1, &_patch), ShadingException);\n\tcolors.resize(3);  // too many colors\n\tEXPECT_THROW(_patch.setColors(colors, 1, &_patch), ShadingException);\n\n\tCoonsPatch cp;\n\tpoints.resize(8);\n\tEXPECT_THROW(cp.setPoints(points, 1, nullptr), ShadingException);\n\tpoints.resize(11);\n\tEXPECT_THROW(cp.setPoints(points, 0, nullptr), ShadingException);\n\tcolors.resize(2);\n\tEXPECT_THROW(cp.setColors(colors, 1, nullptr), ShadingException);\n\tcolors.resize(5);\n\tEXPECT_THROW(cp.setColors(colors, 0, nullptr), ShadingException);\n}\n"
  },
  {
    "path": "tests/ToUnicodeMapTest.cpp",
    "content": "/*************************************************************************\n** ToUnicodeMapTest.cpp                                                 **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include <string>\n#include \"ToUnicodeMap.hpp\"\n\nusing namespace std;\n\n#define CHECK_RANGE(name, ucmap, min, max, minval) \\\n\t{SCOPED_TRACE(name); check_range(ucmap, min, max, minval);}\n\n\nstatic void check_range (const ToUnicodeMap &ucmap, uint32_t min, uint32_t max, uint32_t minval) {\n\tfor (uint32_t i=min; i <= max; i++)\n\t\tASSERT_EQ(ucmap.valueAt(i), minval+(i-min)) << \"i=\" << i;\n}\n\n\nTEST(ToUnicodeMapTest, addMissingMappings1) {\n\tToUnicodeMap ucmap;\n\tASSERT_TRUE(ucmap.addMissingMappings(20));\n\tASSERT_EQ(ucmap.numRanges(), 1u);\n\tCHECK_RANGE(\"A\", ucmap, 1, 20, 1);\n}\n\n\nTEST(ToUnicodeMapTest, addMissingMappings2) {\n\tToUnicodeMap ucmap;\n\tucmap.addRange(5, 8, 40);\n\tASSERT_EQ(ucmap.numRanges(), 1u);\n\tCHECK_RANGE(\"A\", ucmap, 5, 8, 40);\n\n\tucmap.addRange(10, 15, 50);\n\tASSERT_EQ(ucmap.numRanges(), 2u);\n\tCHECK_RANGE(\"B\", ucmap, 5, 8, 40);\n\tCHECK_RANGE(\"C\", ucmap, 10, 15, 50);\n\n\tASSERT_TRUE(ucmap.addMissingMappings(20));\n\tASSERT_EQ(ucmap.numRanges(), 2u);\n\tCHECK_RANGE(\"D\", ucmap, 1, 9, 36);\n\tCHECK_RANGE(\"E\", ucmap, 10, 20, 50);\n}\n"
  },
  {
    "path": "tests/TpicSpecialTest.cpp",
    "content": "/*************************************************************************\n** TpicSpecialTest.cpp                                                  **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <sstream>\n#include \"SpecialActions.hpp\"\n#include \"TpicSpecialHandler.hpp\"\n#include \"utility.hpp\"\n#include \"XMLNode.hpp\"\n#include \"XMLString.hpp\"\n\nusing namespace std;\n\n\nclass TpicSpecialTest : public ::testing::Test {\n\tprotected:\n\t\tclass ActionsRecorder : public EmptySpecialActions {\n\t\t\tpublic:\n\t\t\t\tActionsRecorder () : x(), y() {}\n\t\t\t\tvoid embed (const BoundingBox &bb) override  {bbox.embed(bb);}\n\t\t\t\tvoid setX (double xx) override               {x = xx;}\n\t\t\t\tvoid setY (double yy) override               {x = yy;}\n\t\t\t\tdouble getX () const override                {return x;}\n\t\t\t\tdouble getY () const override                {return y;}\n\t\t\t\tColor getFillColor () const override         {return color;}\n\t\t\t\tvoid setFillColor (const Color &c) override  {color = c;}\n\t\t\t\tconst Matrix& getMatrix () const override    {static Matrix m(1); return m;}\n\n\t\t\t\tstring getXMLSnippet () const {\n\t\t\t\t\tostringstream oss;\n\t\t\t\t\tfor (XMLNode *child : *svgTree().pageNode())\n\t\t\t\t\t\tchild->write(oss);\n\t\t\t\t\treturn oss.str();\n\t\t\t\t}\n\n\t\t\t\tvoid clear () {\n\t\t\t\t\tSpecialActions::svgTree().reset();\n\t\t\t\t\tSpecialActions::svgTree().newPage(1);\n\t\t\t\t\tbbox = BoundingBox(0, 0, 0, 0);\n\t\t\t\t}\n\n\t\t\tprivate:\n\t\t\t\tdouble x, y;\n\t\t\t\tColor color;\n\t\t\t\tBoundingBox bbox;\n\t\t};\n\n\n\t\tclass MyTpicSpecialHandler : public TpicSpecialHandler {\n\t\t\tpublic:\n\t\t\t\texplicit MyTpicSpecialHandler (SpecialActions &a) : actions(a) {}\n\t\t\t\tvoid finishPage () {dviEndPage(0, actions);}\n\t\t\t\tbool processSpecial (const string &cmd, string params=\"\") {\n\t\t\t\t\tstringstream ss;\n\t\t\t\t\tss << params;\n\t\t\t\t\treturn process(cmd, ss, actions);\n\t\t\t\t}\n\n\t\t\tprotected:\n\t\t\t\tSpecialActions &actions;\n\t\t};\n\n\tpublic:\n\t\tTpicSpecialTest () : handler(recorder) {}\n\n\t\tvoid SetUp () override {\n\t\t\tXMLString::DECIMAL_PLACES=2;\n\t\t\trecorder.clear();\n\t\t}\n\n\n\tprotected:\n\t\tActionsRecorder recorder;\n\t\tMyTpicSpecialHandler handler;\n};\n\n\nTEST_F(TpicSpecialTest, name) {\n\tEXPECT_EQ(handler.name(), \"tpic\");\n}\n\n\nTEST_F(TpicSpecialTest, fail) {\n\tEXPECT_FALSE(handler.processSpecial(\"\"));\n\tEXPECT_FALSE(handler.processSpecial(\"x\"));\n\tEXPECT_FALSE(handler.processSpecial(\"xy\"));\n\tEXPECT_FALSE(handler.processSpecial(\"xyz\"));\n\tEXPECT_FALSE(handler.processSpecial(\"bk \"));\n}\n\n\nTEST_F(TpicSpecialTest, set_fill_intensity) {\n\tEXPECT_LT(handler.grayLevel(), 0);  // no fill color set by default\n\tEXPECT_TRUE(handler.processSpecial(\"bk\"));\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1);\n\tEXPECT_TRUE(handler.processSpecial(\"wh\"));\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 0);\n\tEXPECT_TRUE(handler.processSpecial(\"sh\"));\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 0.5);\n\tEXPECT_TRUE(handler.processSpecial(\"sh\", \"0.1\"));\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 0.1);\n\tEXPECT_TRUE(handler.processSpecial(\"sh\", \"0.6\"));\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 0.6);\n\tEXPECT_TRUE(handler.processSpecial(\"sh\", \"2\"));\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1);\n\tEXPECT_TRUE(handler.processSpecial(\"sh\", \"-2\"));\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 0);\n}\n\n\nTEST_F(TpicSpecialTest, set_penwidth) {\n\tconst double mi2bp=0.072;  // milli-inch to PS points\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1);\n\thandler.processSpecial(\"pn\", \"1000\");\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1000*mi2bp);\n\thandler.processSpecial(\"pn\", \"-10\");\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 0);\n}\n\n\nTEST_F(TpicSpecialTest, dot) {\n\thandler.processSpecial(\"pn\", \"1000\");\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"bk\");\n\thandler.processSpecial(\"fp\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<circle cx='0' cy='0' r='36'/>\"\n\t);\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1.0);\n\tEXPECT_LT(handler.grayLevel(), 0);\n}\n\n\nTEST_F(TpicSpecialTest, stroke_polyline) {\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"pa\", \"1000 1000\");\n\thandler.processSpecial(\"pa\", \"1000 0\");\n\thandler.processSpecial(\"fp\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<polyline fill='none' stroke-linecap='round' points='0 0 72 72 72 0' stroke='#000'/>\"\n\t);\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1.0);\n\tEXPECT_LT(handler.grayLevel(), 0);\n}\n\n\nTEST_F(TpicSpecialTest, stroke_polygon) {\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"pa\", \"1000 1000\");\n\thandler.processSpecial(\"pa\", \"1000 0\");\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"fp\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<polygon fill='none' points='0 0 72 72 72 0' stroke='#000'/>\"\n\t);\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1.0);\n\tEXPECT_LT(handler.grayLevel(), 0);\n}\n\n\nTEST_F(TpicSpecialTest, fill_polygon) {\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"pa\", \"1000 1000\");\n\thandler.processSpecial(\"pa\", \"1000 0\");\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"wh\");\n\thandler.processSpecial(\"fp\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<polygon fill='#fff' points='0 0 72 72 72 0' stroke='#000'/>\"\n\t);\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1.0);\n\tEXPECT_LT(handler.grayLevel(), 0);\n\trecorder.clear();\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"pa\", \"1000 1000\");\n\thandler.processSpecial(\"pa\", \"1000 0\");\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"wh\");\n\thandler.processSpecial(\"ip\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<polygon fill='#fff' points='0 0 72 72 72 0'/>\"\n\t);\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1.0);\n\tEXPECT_LT(handler.grayLevel(), 0);\n}\n\n\nTEST_F(TpicSpecialTest, fill_dashed_polygon) {\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"pa\", \"1000 1000\");\n\thandler.processSpecial(\"pa\", \"1000 0\");\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"wh\");\n\thandler.processSpecial(\"da\", \"2\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<polygon fill='#fff' points='0 0 72 72 72 0' stroke='#000' stroke-dasharray='144'/>\"\n\t);\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1.0);\n\tEXPECT_LT(handler.grayLevel(), 0);\n}\n\n\nTEST_F(TpicSpecialTest, fill_dotted_polygon) {\n\thandler.processSpecial(\"pn\", \"500\");\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"pa\", \"1000 1000\");\n\thandler.processSpecial(\"pa\", \"1000 0\");\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"wh\");\n\thandler.processSpecial(\"dt\", \"2 2\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<polygon fill='#fff' points='0 0 72 72 72 0' stroke='#000' stroke-width='36' stroke-dasharray='36 144'/>\"\n\t);\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1.0);\n\tEXPECT_LT(handler.grayLevel(), 0);\n}\n\n\nTEST_F(TpicSpecialTest, stroke_spline) {\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"pa\", \"1000 1000\");\n\thandler.processSpecial(\"sp\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<polyline fill='none' stroke-linecap='round' points='0 0 72 72' stroke='#000'/>\"\n\t);\n\trecorder.clear();\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"pa\", \"1000 1000\");\n\thandler.processSpecial(\"pa\", \"1500 500\");\n\thandler.processSpecial(\"pa\", \"2000 1000\");\n\thandler.processSpecial(\"pa\", \"3000 2000\");\n\thandler.processSpecial(\"pa\", \"1000 500\");\n\thandler.processSpecial(\"sp\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<path fill='none' d='M0 0L36 36Q72 72 90 54T126 54T180 108T144 90L72 36' stroke='#000'/>\"\n\t);\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1.0);\n\tEXPECT_LT(handler.grayLevel(), 0);\n}\n\n\nTEST_F(TpicSpecialTest, stroke_dashed_spline) {\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"pa\", \"1000 1000\");\n\thandler.processSpecial(\"pa\", \"1500 500\");\n\thandler.processSpecial(\"pa\", \"2000 1000\");\n\thandler.processSpecial(\"pa\", \"3000 2000\");\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"sp\", \"1\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<path fill='none' d='M0 0L36 36Q72 72 90 54T126 54T180 108T108 72Z' stroke='#000' stroke-dasharray='72'/>\"\n\t);\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1.0);\n\tEXPECT_LT(handler.grayLevel(), 0);\n}\n\n\nTEST_F(TpicSpecialTest, stroke_dotted_spline) {\n\thandler.processSpecial(\"pa\", \"0 0\");\n\thandler.processSpecial(\"pa\", \"1000 1000\");\n\thandler.processSpecial(\"pa\", \"1500 500\");\n\thandler.processSpecial(\"pa\", \"2000 1000\");\n\thandler.processSpecial(\"pa\", \"3000 2000\");\n\thandler.processSpecial(\"pa\", \"1000 500\");\n\thandler.processSpecial(\"sp\", \"-1\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<path fill='none' d='M0 0L36 36Q72 72 90 54T126 54T180 108T144 90L72 36' stroke='#000' stroke-dasharray='1 72'/>\"\n\t);\n\tEXPECT_DOUBLE_EQ(handler.penwidth(), 1.0);\n\tEXPECT_LT(handler.grayLevel(), 0);\n}\n\n\nTEST_F(TpicSpecialTest, stroke_ellipse) {\n\thandler.processSpecial(\"ar\", \"0 0 500 500 0 7\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<circle cx='0' cy='0' r='36' stroke='#000' fill='none'/>\"\n\t);\n\trecorder.clear();\n\thandler.processSpecial(\"ar\", \"0 0 1000 500 0 7\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<ellipse cx='0' cy='0' rx='72' ry='36' stroke='#000' fill='none'/>\"\n\t);\n\trecorder.clear();\n\thandler.processSpecial(\"pn\", \"100\");\n\thandler.processSpecial(\"ar\", \"0 0 1000 500 -1 -8\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<ellipse cx='0' cy='0' rx='72' ry='36' stroke-width='7.2' stroke='#000' fill='none'/>\"\n\t);\n}\n\n\nTEST_F(TpicSpecialTest, fill_ellipse) {\n\thandler.processSpecial(\"bk\");\n\thandler.processSpecial(\"ia\", \"0 0 500 500 0 7\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<circle cx='0' cy='0' r='36'/>\"\n\t);\n\trecorder.clear();\n\thandler.processSpecial(\"bk\");\n\thandler.processSpecial(\"ia\", \"0 0 1000 500 0 7\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<ellipse cx='0' cy='0' rx='72' ry='36'/>\"\n\t);\n\trecorder.clear();\n\thandler.processSpecial(\"pn\", \"100\");\n\thandler.processSpecial(\"wh\");\n\thandler.processSpecial(\"ia\", \"0 0 1000 500 -1 -8\");\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<ellipse cx='0' cy='0' rx='72' ry='36' fill='#fff'/>\"\n\t);\n}\n\n\nTEST_F(TpicSpecialTest, stroke_arc) {\n\thandler.processSpecial(\"ar\", \"0 0 1000 500 0 \"+to_string(math::PI/4));\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<path d='M72 0A72 36 0 0 1 50.91 25.46' stroke='#000' stroke-linecap='round' fill='none'/>\"\n\t);\n\trecorder.clear();\n\thandler.processSpecial(\"ar\", \"0 0 1000 500 0 \"+to_string(math::PI/2));\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<path d='M72 0A72 36 0 0 1 0 36' stroke='#000' stroke-linecap='round' fill='none'/>\"\n\t);\n\trecorder.clear();\n\thandler.processSpecial(\"ar\", \"0 0 1000 500 0 \"+to_string(3*math::PI/4));\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<path d='M72 0A72 36 0 0 1-50.91 25.46' stroke='#000' stroke-linecap='round' fill='none'/>\"\n\t);\n\trecorder.clear();\n\thandler.processSpecial(\"ar\", \"0 0 1000 500 0 \"+to_string(math::PI));\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<path d='M72 0A72 36 0 1 1-72 0' stroke='#000' stroke-linecap='round' fill='none'/>\"\n\t);\n\trecorder.clear();\n\thandler.processSpecial(\"ar\", \"0 0 1000 500 0 \"+to_string(5*math::PI/4));\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<path d='M72 0A72 36 0 1 1-50.91-25.46' stroke='#000' stroke-linecap='round' fill='none'/>\"\n\t);\n\trecorder.clear();\n\thandler.processSpecial(\"ar\", \"0 0 1000 500 0 \"+to_string(3*math::PI/2));\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<path d='M72 0A72 36 0 1 1 0-36' stroke='#000' stroke-linecap='round' fill='none'/>\"\n\t);\n\trecorder.clear();\n\thandler.processSpecial(\"ar\", \"0 0 1000 500 0 \"+to_string(-3*math::PI/2));\n\tEXPECT_EQ(recorder.getXMLSnippet(),\n\t\t\"<path d='M72 0A72 36 0 0 1 0 36' stroke='#000' stroke-linecap='round' fill='none'/>\"\n\t);\n}\n\n\nTEST_F(TpicSpecialTest, bit_pattern) {\n\thandler.processSpecial(\"tx\", \"\");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1);\n\thandler.processSpecial(\"tx\", \" \\t   \\n  \");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1);\n\thandler.processSpecial(\"tx\", \"INVALID\");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1);\n\thandler.processSpecial(\"tx\", \"0\");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1);\n\thandler.processSpecial(\"tx\", \"f\");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 0);\n\thandler.processSpecial(\"tx\", \"1248\");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-4.0/16.0);\n\thandler.processSpecial(\"tx\", \"12480\");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-4.0/20.0);\n\thandler.processSpecial(\"tx\", \"DEAD BEEF\");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-24.0/32.0);\n\thandler.processSpecial(\"tx\", \"123456789abcdef\");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-32.0/60.0);\n\thandler.processSpecial(\"tx\", \"123456789ABCDEF0\");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-32.0/64.0);\n\thandler.processSpecial(\"tx\", \"1234 5678 9abc def \");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-32.0/60.0);\n\thandler.processSpecial(\"tx\", \"1234 5678 X 9abc def\");\n\tEXPECT_DOUBLE_EQ(handler.grayLevel(), 1.0-13.0/32.0);\n}\n"
  },
  {
    "path": "tests/TriangularPatchTest.cpp",
    "content": "/*************************************************************************\n** TriangularPatchTest.cpp                                              **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"TriangularPatch.hpp\"\n\nusing namespace std;\n\n\nTEST(TriangularPatchTest, construct) {\n\tTriangularPatch tp1(Color::ColorSpace::RGB);\n\tEXPECT_EQ(tp1.psShadingType(), 4);\n\tEXPECT_EQ(tp1.numPoints(0), 3);\n\tEXPECT_EQ(tp1.numColors(0), 3);\n\tEXPECT_EQ(tp1.numPoints(1), 1);\n\tEXPECT_EQ(tp1.numColors(1), 1);\n\n\tvector<DPair> points(1);\n\tpoints[0] = DPair(10, 0);\n\tvector<Color> colors(1);\n\tTriangularPatch tp2(points, colors, Color::ColorSpace::RGB, 1, &tp1);\n\tEXPECT_EQ(tp1.psShadingType(), 4);\n\n\tLatticeTriangularPatch tp3(Color::ColorSpace::RGB);\n\tEXPECT_EQ(tp3.psShadingType(), 5);\n}\n\n\nTEST(TriangularPatchTest, valueAt) {\n\tvector<DPair> points(3);\n\tpoints[0] = DPair(0, 0);\n\tpoints[1] = DPair(10, 0);\n\tpoints[2] = DPair(0, 10);\n\tvector<Color> colors(3);\n\tTriangularPatch tp1(points, colors, Color::ColorSpace::RGB, 0, 0);\n\tEXPECT_EQ(tp1.valueAt(0, 0), DPair(0,0));\n\tEXPECT_EQ(tp1.valueAt(1, 0), DPair(10,0));\n\tEXPECT_EQ(tp1.valueAt(0, 1), DPair(0,10));\n\n\tpoints.resize(1);\n\tcolors.resize(1);\n\tpoints[0] = DPair(10, 10);\n\tTriangularPatch tp2(points, colors, Color::ColorSpace::RGB, 1, &tp1);\n\tEXPECT_EQ(tp2.valueAt(0, 0), DPair(10,10));\n\tEXPECT_EQ(tp2.valueAt(1, 0), DPair(10,0));\n\tEXPECT_EQ(tp2.valueAt(0, 1), DPair(0,10));\n\n\tTriangularPatch tp3(points, colors, Color::ColorSpace::RGB, 2, &tp1);\n\tEXPECT_EQ(tp3.valueAt(0, 0), DPair(10,10));\n\tEXPECT_EQ(tp3.valueAt(1, 0), DPair(0,10));\n\tEXPECT_EQ(tp3.valueAt(0, 1), DPair(0,0));\n\n\ttp1.setPoints(DPair(20,20), DPair(20,40), DPair(40,20));\n\tEXPECT_EQ(tp1.valueAt(0, 0), DPair(20,20));\n\tEXPECT_EQ(tp1.valueAt(1, 0), DPair(20,40));\n\tEXPECT_EQ(tp1.valueAt(0, 1), DPair(40,20));\n}\n\n\nTEST(TriangularPatchTest, colorAt) {\n\tvector<DPair> points(3);\n\tvector<Color> colors(3);\n\tcolors[0] = Color(1.0, 0.0, 0.0);\n\tcolors[1] = Color(0.0, 1.0, 0.0);\n\tcolors[2] = Color(0.0, 0.0, 1.0);\n\tTriangularPatch tp1(points, colors, Color::ColorSpace::RGB, 0, 0);\n\tEXPECT_EQ(tp1.colorAt(0, 0), Color(1.0, 0.0, 0.0));\n\tEXPECT_EQ(tp1.colorAt(1, 0), Color(0.0, 1.0, 0.0));\n\tEXPECT_EQ(tp1.colorAt(0, 1), Color(0.0, 0.0, 1.0));\n\n\tpoints.resize(1);\n\tcolors.resize(1);\n\tcolors[0] = Color(1.0, 1.0, 0.0);\n\tTriangularPatch tp2(points, colors, Color::ColorSpace::RGB, 1, &tp1);\n\tEXPECT_EQ(tp2.colorAt(0, 0), Color(1.0, 1.0, 0.0));\n\tEXPECT_EQ(tp2.colorAt(1, 0), Color(0.0, 1.0, 0.0));\n\tEXPECT_EQ(tp2.colorAt(0, 1), Color(0.0, 0.0, 1.0));\n\n\tTriangularPatch tp3(points, colors, Color::ColorSpace::RGB, 2, &tp1);\n\tEXPECT_EQ(tp3.colorAt(0, 0), Color(1.0, 1.0, 0.0));\n\tEXPECT_EQ(tp3.colorAt(1, 0), Color(0.0, 0.0, 1.0));\n\tEXPECT_EQ(tp3.colorAt(0, 1), Color(1.0, 0.0, 0.0));\n\n\ttp1.setColors(Color(1.0, 1.0, 0.0), Color(1.0, 0.0, 1.0), Color(0.0, 1.0, 1.0));\n\tEXPECT_EQ(tp1.colorAt(0, 0), Color(1.0, 1.0, 0.0));\n\tEXPECT_EQ(tp1.colorAt(1, 0), Color(1.0, 0.0, 1.0));\n\tEXPECT_EQ(tp1.colorAt(0, 1), Color(0.0, 1.0, 1.0));\n}\n\n\nTEST(TriangularPatchTest, bbox) {\n\tvector<DPair> points(3);\n\tpoints[0] = DPair(0, 0);\n\tpoints[1] = DPair(10, 0);\n\tpoints[2] = DPair(0, 10);\n\tvector<Color> colors(3);\n\tTriangularPatch tp(points, colors, Color::ColorSpace::RGB, 0, 0);\n\tBoundingBox bbox = tp.getBBox();\n\tEXPECT_EQ(bbox, BoundingBox(0, 0, 10, 10));\n}\n\n\nTEST(TriangularPatchTest, boundaryPath) {\n\tvector<DPair> points(3);\n\tpoints[0] = DPair(0, 0);\n\tpoints[1] = DPair(10, 0);\n\tpoints[2] = DPair(0, 10);\n\tvector<Color> colors(3);\n\tTriangularPatch tp(points, colors, Color::ColorSpace::RGB, 0, 0);\n\tGraphicsPath<double> path = tp.getBoundaryPath();\n\tostringstream oss;\n\tpath.writeSVG(oss, false);\n\tEXPECT_EQ(oss.str(), \"M0 0H10L0 10Z\");\n}\n\n\nclass Callback : public ShadingPatch::Callback {\n\tpublic:\n\t\tvoid patchSegment (GraphicsPath<double> &path, const Color &color) {\n\t\t\tostringstream oss;\n\t\t\tpath.writeSVG(oss, false);\n\t\t\t_pathstr += oss.str();\n\t\t\t_colorstr += color.rgbString();\n\t\t}\n\t\tstring pathstr() const  {return _pathstr;}\n\t\tstring colorstr() const {return _colorstr;}\n\t\tvoid reset ()           {_pathstr.clear(); _colorstr.clear();}\n\n\tprivate:\n\t\tstring _pathstr;\n\t\tstring _colorstr;\n};\n\n\nTEST(TriangularPatchTest, approximate) {\n\tvector<DPair> points(3);\n\tpoints[0] = DPair(0, 0);\n\tpoints[1] = DPair(10, 0);\n\tpoints[2] = DPair(0, 10);\n\tvector<Color> colors(3);\n\tTriangularPatch tp(points, colors, Color::ColorSpace::RGB, 0, 0);\n\tCallback callback;\n\ttp.approximate(2, false, 0.1, callback);\n\tEXPECT_EQ(callback.pathstr(), \"M0 0H10L0 10Z\");\n\tEXPECT_EQ(callback.colorstr(), \"#000\");\n\n\tcallback.reset();\n\ttp.setColors(Color(1.0, 0.0, 0.0), Color(0.0, 1.0, 0.0), Color(0.0, 0.0, 1.0));\n\ttp.approximate(2, false, 0.1, callback);\n\tEXPECT_EQ(callback.pathstr(), \"M0 0H5L0 5ZM0 5L5 0V5ZM0 5H5L0 10ZM5 0H10L5 5Z\");\n\tEXPECT_EQ(callback.colorstr(), \"#aa2b2b#555#2b2baa#2baa2b\");\n}\n\n\nTEST(TriangularPatchTest, fail) {\n\tvector<DPair> points(3);\n\tvector<Color> colors(3);\n\tTriangularPatch tp(points, colors, Color::ColorSpace::RGB, 0, 0);\n\tEXPECT_THROW(tp.setColors(colors, 1, 0), ShadingException);\n\n\tfor (int i=1; i <= 3; i++) {\n\t\tEXPECT_THROW(TriangularPatch(points, colors, Color::ColorSpace::RGB, i, 0), ShadingException);\n\t}\n\tpoints.resize(2);\n\tEXPECT_THROW(TriangularPatch(points, colors, Color::ColorSpace::RGB, 0, 0), ShadingException);\n\tpoints.resize(3);\n\tcolors.resize(2);\n\tEXPECT_THROW(TriangularPatch(points, colors, Color::ColorSpace::RGB, 0, 0), ShadingException);\n}\n"
  },
  {
    "path": "tests/UnicodeTest.cpp",
    "content": "/*************************************************************************\n** UnicodeTest.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"Unicode.hpp\"\n\nusing namespace std;\n\n\nTEST(UnicodeTest, isValidCodepoint) {\n\tfor (uint32_t i=0; i <= 0x20; i++)\n\t\tEXPECT_FALSE(Unicode::isValidCodepoint(i)) << \"i=\" << i;\n\tfor (uint32_t i=0x21; i <= 0x7e; i++)\n\t\tEXPECT_TRUE(Unicode::isValidCodepoint(i)) << \"i=\" << i;\n\tEXPECT_FALSE(Unicode::isValidCodepoint(0xfffe));\n\tEXPECT_FALSE(Unicode::isValidCodepoint(0xffff));\n\tEXPECT_TRUE(Unicode::isValidCodepoint(0x10000));\n}\n\n\nTEST(UnicodeTest, charToCodepoint) {\n\tfor (uint32_t i=0; i <= 0x20; i++)\n\t\tEXPECT_EQ(Unicode::charToCodepoint(i), 0xe000+i) << \"i=\" << i;\n\tfor (uint32_t i=0x21; i <= 0x7e; i++)\n\t\tEXPECT_EQ(Unicode::charToCodepoint(i), i) << \"i=\" << i;\n\tfor (uint32_t i=0x7f; i <= 0x9f; i++)\n\t\tEXPECT_EQ(Unicode::charToCodepoint(i), 0xe021+i-0x7f) << \"i=\" << i;\n\tEXPECT_EQ(Unicode::charToCodepoint(0x10fffd), 0x10fffdu);\n\tEXPECT_EQ(Unicode::charToCodepoint(0x10fffe), 0xe887u);\n\tEXPECT_EQ(Unicode::charToCodepoint(0x10ffff), 0xe888u);\n}\n\n\nTEST(UnicodeTest, utf8) {\n\tEXPECT_EQ(Unicode::utf8(0x1), string(\"\\x01\"));\n\tEXPECT_EQ(Unicode::utf8(0x47), string(\"\\x47\"));\n\tEXPECT_EQ(Unicode::utf8(0x7f), string(\"\\x7f\"));\n\tEXPECT_EQ(Unicode::utf8(0x80), string(\"\\xc2\\x80\"));\n\tEXPECT_EQ(Unicode::utf8(0x07ff), string(\"\\xdf\\xbf\"));\n\tEXPECT_EQ(Unicode::utf8(0x0800), string(\"\\xe0\\xa0\\x80\"));\n\tEXPECT_EQ(Unicode::utf8(0x7fff), string(\"\\xe7\\xbf\\xbf\"));\n\tEXPECT_EQ(Unicode::utf8(0xfffe), string(\"\\xef\\xbf\\xbe\"));\n\tEXPECT_EQ(Unicode::utf8(0xffff), string(\"\\xef\\xbf\\xbf\"));\n\tEXPECT_EQ(Unicode::utf8(0x10000), string(\"\\xf0\\x90\\x80\\x80\"));\n\tEXPECT_EQ(Unicode::utf8(0x10ffff), string(\"\\xf4\\x8f\\xbf\\xbf\"));\n\tEXPECT_TRUE(Unicode::utf8(0x110000).empty());\n}\n\n\nTEST(UnicodeTest, fromSurrogate1) {\n\tEXPECT_EQ(Unicode::fromSurrogate(0xd800dc00), 0x10000u);\n\tEXPECT_EQ(Unicode::fromSurrogate(0xd83cdd10), 0x1f110u);\n\n\t// invalid surrogates\n\tEXPECT_EQ(Unicode::fromSurrogate(0xd7ffdc00), 0u);\n\tEXPECT_EQ(Unicode::fromSurrogate(0xdc00dc00), 0u);\n\tEXPECT_EQ(Unicode::fromSurrogate(0xd800dbff), 0u);\n\tEXPECT_EQ(Unicode::fromSurrogate(0xd800e000), 0u);\n}\n\n\nTEST(UnicodeTest, fromSurrogate2) {\n\tEXPECT_EQ(Unicode::fromSurrogate(0xd800, 0xdc00), 0x10000u);\n\tEXPECT_EQ(Unicode::fromSurrogate(0xd83c, 0xdd10), 0x1f110u);\n\n\t// invalid surrogates\n\tEXPECT_EQ(Unicode::fromSurrogate(0xd7ff, 0xdc00), 0u);\n\tEXPECT_EQ(Unicode::fromSurrogate(0xdc00, 0xdc00), 0u);\n\tEXPECT_EQ(Unicode::fromSurrogate(0xd800, 0xdbff), 0u);\n\tEXPECT_EQ(Unicode::fromSurrogate(0xd800, 0xe000), 0u);\n}\n\n\nTEST(UnicodeTest, toSurrogate) {\n\tEXPECT_EQ(Unicode::toSurrogate(0x10000), 0xd800dc00u);\n\tEXPECT_EQ(Unicode::toSurrogate(0x1f110), 0xd83cdd10u);\n\n\t// invalid code points\n\tEXPECT_EQ(Unicode::toSurrogate(0xffff), 0u);\n\tEXPECT_EQ(Unicode::toSurrogate(0x110000), 0u);\n}\n\n\nTEST(UnicodeTest, aglNameToCodepoint1) {\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"does not exist\"), 0);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"Eogonek\"), 0x118);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"alpha\"), 0x03b1);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"Alpha\"), 0x0391);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"alphatonos\"), 0x03ac);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"SF460000\"), 0x2568);\n}\n\n\nTEST(UnicodeTest, aglNameToCodepoint2) {\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uni1234\"), 0x1234);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uni1234.suffix\"), 0x1234);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uni1234_part2\"), 0x1234);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uni12345678\"), 0x1234);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uni123\"), 0);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uni12345\"), 0);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uni1234567\"), 0);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uni100000\"), 0);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uni123E\"), 0x123e);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uni123e\"), 0);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uniD7FF\"), 0xd7ff);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uniD800\"), 0);\n\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"u1234\"), 0x1234);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"u1234.suffix\"), 0x1234);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"u1234_part2\"), 0x1234);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"u12345678\"), 0);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"u123.suffix\"), 0);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"u123\"), 0);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"u12345\"), 0x12345);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"u1234567\"), 0);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"u100000\"), 0x100000);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"u123E\"), 0x123e);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"u123e\"), 0);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uD7FF\"), 0xd7ff);\n\tEXPECT_EQ(Unicode::aglNameToCodepoint(\"uD800\"), 0);\n}\n"
  },
  {
    "path": "tests/UtilityTest.cpp",
    "content": "/*************************************************************************\n** UtilityTest.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <algorithm>\n#include <cmath>\n#include <limits>\n#include <sstream>\n#include \"utility.hpp\"\n\nusing namespace util;\nusing namespace std;\n\n\nTEST(UtilityTest, trim) {\n\tASSERT_EQ(trim(\"\"), \"\");\n\tASSERT_EQ(trim(\"   \"), \"\");\n\tASSERT_EQ(trim(\" \\n \\t  \"), \"\");\n\tASSERT_EQ(trim(\"abcdefg\"), \"abcdefg\");\n\tASSERT_EQ(trim(\"  abcdefg\"), \"abcdefg\");\n\tASSERT_EQ(trim(\"abcdefg  \"), \"abcdefg\");\n\tASSERT_EQ(trim(\"   abcdefg  \"), \"abcdefg\");\n\tASSERT_EQ(trim(\"   abc   defg  \"), \"abc   defg\");\n\tASSERT_EQ(trim(\"   abc \\n  defg  \\n \\r\"), \"abc \\n  defg\");\n}\n\n\nTEST(UtilityTest, normalize_space) {\n\tASSERT_EQ(normalize_space(\"\"), \"\");\n\tASSERT_EQ(normalize_space(\"   \"), \"\");\n\tASSERT_EQ(normalize_space(\" \\n \\t  \"), \"\");\n\tASSERT_EQ(normalize_space(\"abcdefg\"), \"abcdefg\");\n\tASSERT_EQ(normalize_space(\"  abcdefg\"), \"abcdefg\");\n\tASSERT_EQ(normalize_space(\"abcdefg  \"), \"abcdefg\");\n\tASSERT_EQ(normalize_space(\"   abcdefg  \"), \"abcdefg\");\n\tASSERT_EQ(normalize_space(\"   abc   defg  \"), \"abc defg\");\n\tASSERT_EQ(normalize_space(\"   abc \\n  defg  \\n \\r\"), \"abc defg\");\n\tASSERT_EQ(normalize_space(\"   abc \\n  de\\r\\ffg  \\n \\r\"), \"abc de fg\");\n}\n\n\nTEST(UtilityTest, tolower) {\n\tASSERT_EQ(tolower(\"\"), \"\");\n\tASSERT_EQ(tolower(\"abcdefg\"), \"abcdefg\");\n\tASSERT_EQ(tolower(\"ABCDEFG\"), \"abcdefg\");\n\tASSERT_EQ(tolower(\"123XyZ456\"), \"123xyz456\");\n\tASSERT_EQ(tolower(\"123\\nXyZ 456\"), \"123\\nxyz 456\");\n}\n\n\nTEST(UtilityTest, replace) {\n\tASSERT_EQ(replace(\"abcdebcxyb\", \"bc\", \",\"), \"a,de,xyb\");\n\tASSERT_EQ(replace(\"abcdebcxyb\", \"bc\", \" : \"), \"a : de : xyb\");\n\tASSERT_EQ(replace(\"abcdebcxyb\", \"\", \",\"), \"abcdebcxyb\");\n\tASSERT_EQ(replace(\"abcdebcxyb\", \"bc\", \"\"), \"abcdebcxyb\");\n\tASSERT_EQ(replace(\"abcdebcxyb\", \"b\", \" B \"), \"a B cde B cxy B \");\n\tASSERT_EQ(replace(\"\", \"b\", \" B \"), \"\");\n\tASSERT_EQ(replace(\"a,b, c ,d , e\", \" ,\", \",\"), \"a,b, c,d, e\");\n}\n\n\nTEST(UtilityTest, split) {\n\tvector<string> parts = split(\"\", \",\");\n\tASSERT_EQ(parts.size(), 1u);\n\tEXPECT_EQ(parts[0], \"\");\n\n\tparts = split(\"\", \",\", true);\n\tASSERT_EQ(parts.size(), 0u);\n\n\tparts = split(\"abcde\", \"\");\n\tASSERT_EQ(parts.size(), 1u);\n\tEXPECT_EQ(parts[0], \"abcde\");\n\n\tparts = split(\"abcde\", \",\");\n\tASSERT_EQ(parts.size(), 1u);\n\tEXPECT_EQ(parts[0], \"abcde\");\n\n\tparts = split(\"1,2 , 3, 4 ,,5\", \",\");\n\tASSERT_EQ(parts.size(), 6u);\n\tsize_t count=0;\n\tfor (string part : {\"1\", \"2 \", \" 3\", \" 4 \", \"\", \"5\"}) {\n\t\tEXPECT_EQ(parts[count++], part);\n\t}\n\n\tparts = split(\"1 sep2sep3, sep\", \"sep\");\n\tASSERT_EQ(parts.size(), 4u);\n\tcount=0;\n\tfor (string part : {\"1 \", \"2\", \"3, \", \"\"}) {\n\t\tEXPECT_EQ(parts[count++], part);\n\t}\n}\n\n\nTEST(UtilityTest, ilog10) {\n\tASSERT_EQ(ilog10(-10), 0);\n\tASSERT_EQ(ilog10(-1), 0);\n\tASSERT_EQ(ilog10(0), 0);\n\tfor (int i=1; i <= 1000; i++) {\n\t\tASSERT_EQ(ilog10(i), static_cast<int>(log10(i))) << \"i=\" << i;\n\t}\n\tfor (int i=1000; i < numeric_limits<int>::max()/10; i*=10) {\n\t\tASSERT_EQ(ilog10(i-1), static_cast<int>(log10(i-1))) << \"i=\" << i;\n\t\tASSERT_EQ(ilog10(i), static_cast<int>(log10(i))) << \"i=\" << i;\n\t\tASSERT_EQ(ilog10(i+1), static_cast<int>(log10(i+1))) << \"i=\" << i;\n\t}\n}\n\n\nTEST(UtilityTest, to_string) {\n\tASSERT_EQ(util::to_string(0), \"0\");\n\tASSERT_EQ(util::to_string(1), \"1\");\n\tASSERT_EQ(util::to_string(100), \"100\");\n\tASSERT_EQ(util::to_string(-1), \"-1\");\n\tASSERT_EQ(util::to_string(2.123), \"2.123\");\n\tASSERT_EQ(util::to_string(-2.123), \"-2.123\");\n\tASSERT_EQ(util::to_string(1.500e-5), \"0.000015\");\n}\n\n\nstatic string base64 (const string &str) {\n\tistringstream iss(str);\n\tostringstream oss;\n\tbase64_encode(istreambuf_iterator<char>(iss), istreambuf_iterator<char>(), ostreambuf_iterator<char>(oss));\n\treturn oss.str();\n}\n\n\nTEST(UtilityTest, base64_encode) {\n\tASSERT_EQ(base64(\"\"), \"\");\n\tASSERT_EQ(base64(\"a\"), \"YQ==\");\n\tASSERT_EQ(base64(\"ab\"), \"YWI=\");\n\tASSERT_EQ(base64(\"abc\"), \"YWJj\");\n\tASSERT_EQ(base64(\"abcd\"), \"YWJjZA==\");\n\tASSERT_EQ(base64(\"aBcDe\\nFgHiJ\\n\"), \"YUJjRGUKRmdIaUoK\");\n}\n\n\nTEST(UtilityTest, count_leading_zeros) {\n\tEXPECT_EQ(count_leading_zeros(int8_t(0)), 8);\n\tEXPECT_EQ(count_leading_zeros(int16_t(0)), 16);\n\tEXPECT_EQ(count_leading_zeros(int32_t(0)), 32);\n\tfor (int i=0; i < 8; i++) {\n\t\tEXPECT_EQ(count_leading_zeros(uint8_t(1 << i)), 7-i);\n\t\tEXPECT_EQ(count_leading_zeros(uint8_t((1 << i) | 1)), 7-i);\n\t\tEXPECT_EQ(count_leading_zeros(uint8_t(0xff >> i)), i);\n\t}\n\tfor (int i=0; i < 16; i++) {\n\t\tEXPECT_EQ(count_leading_zeros(uint16_t(1 << i)), 15-i);\n\t\tEXPECT_EQ(count_leading_zeros(uint16_t((1 << i) | 1)), 15-i);\n\t\tEXPECT_EQ(count_leading_zeros(uint16_t(0xffff >> i)), i);\n\t}\n\tfor (int i=0; i < 32; i++) {\n\t\tEXPECT_EQ(count_leading_zeros(uint32_t(1 << i)), 31-i);\n\t\tEXPECT_EQ(count_leading_zeros(uint32_t((1 << i) | 1)), 31-i);\n\t\tEXPECT_EQ(count_leading_zeros(uint32_t(0xffffffff >> i)), i);\n\t}\n}\n\n\nTEST(UtilityTest, ilog2) {\n\tEXPECT_EQ(ilog2(0), -1);\n\tfor (int i=0; i < 8; i++) {\n\t\tEXPECT_EQ(ilog2(uint8_t(1 << i)), i);\n\t\tEXPECT_EQ(ilog2(uint8_t((1 << i)|1)), i);\n\t\tEXPECT_EQ(ilog2(uint8_t(0xff >> i)), 7-i);\n\t}\n\tfor (int i=0; i < 16; i++) {\n\t\tEXPECT_EQ(ilog2(uint16_t(1 << i)), i);\n\t\tEXPECT_EQ(ilog2(uint16_t((1 << i)|1)), i);\n\t\tEXPECT_EQ(ilog2(uint16_t(0xffff >> i)), 15-i);\n\t}\n\tfor (int i=0; i < 32; i++) {\n\t\tEXPECT_EQ(ilog2(uint32_t(1 << i)), i);\n\t\tEXPECT_EQ(ilog2(uint32_t((1 << i)|1)), i);\n\t\tEXPECT_EQ(ilog2(uint32_t(0xffffffff >> i)), 31-i);\n\t}\n}\n\n\nTEST(UtilityTest, read_double) {\n\tistringstream iss(\"123 -456 .123 -.456 0.123 -0.456 +123.456 -123.456 10e-3 -1e-3 4.5e2 1.23e-3 2.30.4\");\n\tdouble value=0;\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, 123.0, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, -456.0, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, .123, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, -.456, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, .123, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, -.456, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, 123.456, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, -123.456, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, 10e-3, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, -1e-3, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, 4.5e2, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, 1.23e-3, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, 2.3, 0.000001);\n\tEXPECT_TRUE(util::read_double(iss, value));\n\tEXPECT_NEAR(value, .4, 0.000001);\n\tEXPECT_FALSE(util::read_double(iss, value));  // eof, no further characters to read\n}\n\n\nTEST(UtilityTest, is_empty_string) {\n\tEXPECT_TRUE(util::IsEmptyString()(\"\"));\n\tEXPECT_FALSE(util::IsEmptyString()(\"x\"));\n\tvector<string> vec{\"1\", \"\", \" \", \"2\", \"3\", \"\", \"4\"};\n\tint count = std::count_if(vec.begin(), vec.end(), util::IsEmptyString());\n\tEXPECT_EQ(count, 2);\n\tEXPECT_EQ(vec.size(), 7u);\n\tvec.erase(std::remove_if(vec.begin(), vec.end(), util::IsEmptyString()), vec.end());\n\tEXPECT_EQ(vec.size(), 5u);\n\tostringstream oss;\n\tstd::copy(vec.begin(), vec.end(), ostream_iterator<string>(oss));\n\tEXPECT_EQ(oss.str(), \"1 234\");\n}\n"
  },
  {
    "path": "tests/VectorIteratorTest.cpp",
    "content": "/*************************************************************************\n** VectorIteratorTest.cpp                                               **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"VectorIterator.hpp\"\n\nusing namespace std;\n\n\nTEST(VectorIteratorTest, inc) {\n\tvector<int> vec{4,3,2,9,8,7,10};\n\tVectorIterator<int> it(vec);\n\tEXPECT_TRUE(it.valid());\n\tEXPECT_EQ(*it++, 4);\n\tEXPECT_EQ(*it, 3);\n\tEXPECT_EQ(*++it, 2);\n\tEXPECT_TRUE(it.valid());\n\tfor (size_t i=2; it.valid(); i++) {\n\t\tEXPECT_LT(i, vec.size()) << \"i=\" << i;\n\t\tEXPECT_EQ(*it, vec[i]) << \"*it=\" << *it << \", vec[\" << i << \"]=\" << vec[i];\n\t\t++it;\n\t}\n}\n\n\nTEST(VectorIteratorTest, addsub) {\n\tvector<int> vec{4,3,2,9,8,7,10};\n\tVectorIterator<int> it(vec);\n\tEXPECT_EQ(*(it += 4), 8);\n\tEXPECT_EQ(*(it -= 3), 3);\n\tEXPECT_EQ(*(it + 4), 7);\n\tEXPECT_EQ(*(it - 1), 4);\n}\n\n\nTEST(VectorIteratorTest, dec) {\n\tvector<int> vec{4,3,2,9,8,7,10};\n\tVectorIterator<int> it(vec);\n\tit += 6;\n\tEXPECT_EQ(*it, 10);\n\tEXPECT_EQ(*it--, 10);\n\tEXPECT_EQ(*it, 7);\n\tEXPECT_EQ(*--it, 8);\n\tEXPECT_TRUE(it.valid());\n\tfor (size_t i=4; it.valid(); i--) {\n\t\tEXPECT_LT(i, vec.size()) << \"i=\" << i;\n\t\tEXPECT_EQ(*it, vec[i]) << \"*it=\" << *it << \", vec[\" << i << \"]=\" << vec[i];\n\t\t--it;\n\t}\n}\n\n\nTEST(VectorIteratorTest, invalidate) {\n\tvector<int> vec{4,3,2,9,8,7,10};\n\tVectorIterator<int> it(vec);\n\t--it;\n\tEXPECT_FALSE(it.valid());\n\t++it;\n\tEXPECT_TRUE(it.valid());\n\tit += 10;\n\tEXPECT_FALSE(it.valid());\n\tit -= 10;\n\tEXPECT_TRUE(it.valid());\n\tit.invalidate();\n\tEXPECT_FALSE(it.valid());\n\tit.reset();\n\tASSERT_TRUE(it.valid());\n\tEXPECT_EQ(*it, 4);\n}\n\n\nTEST(VectorIteratorTest, compare) {\n\tvector<int> vec{4,3,2,9,8,7,10};\n\tVectorIterator<int> it1(vec);\n\tVectorIterator<int> it2 = it1 + 1;\n\tEXPECT_NE(it1, it2);\n\t++it1;\n\tEXPECT_EQ(it1, it2);\n\tEXPECT_LE(it1, it2);\n\tEXPECT_GE(it1, it2);\n\t++it2;\n\tEXPECT_LT(it1, it2);\n\tEXPECT_GT(it2, it1);\n}\n\n\nstruct MyPair {\n\tint number;\n\tconst char *str;\n}\nmypair[] = {\n\t{3, \"text\"},\n\t{5, \"string\"}\n};\n\nTEST(VectorIteratorTest, deref) {\n\tvector<MyPair> vec(mypair, mypair+2);\n\tVectorIterator<MyPair> it(vec);\n\tEXPECT_TRUE(it.valid());\n\tEXPECT_EQ((*it).number, 3);\n\tEXPECT_EQ((*it).str, mypair[0].str);\n\tEXPECT_EQ(it->number, 3);\n\tEXPECT_EQ(it->str, mypair[0].str);\n\t++it;\n\tEXPECT_EQ(it->number, 5);\n\tEXPECT_EQ(it->str, mypair[1].str);\n}\n\n\nTEST(VectorIteratorTest, fail) {\n\tvector<MyPair> vec(mypair, mypair+2);\n\tVectorIterator<MyPair> it(vec);\n\t--it;\n\tEXPECT_FALSE(it.valid());\n\tEXPECT_THROW(*it, IteratorException);\n\tEXPECT_THROW(it->number, IteratorException);\n}\n"
  },
  {
    "path": "tests/XMLNodeTest.cpp",
    "content": "/*************************************************************************\n** XMLNodeTest.cpp                                                      **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include <algorithm>\n#include <cstring>\n#include <memory>\n#include \"utility.hpp\"\n#include \"XMLNode.hpp\"\n#include \"XMLString.hpp\"\n\nusing namespace std;\n\n\nTEST(XMLNodeTest, downcast) {\n\tunique_ptr<XMLNode> elem = util::make_unique<XMLElement>(\"element\");\n\tEXPECT_EQ(elem->toElement(), elem.get());\n\tEXPECT_EQ(elem->toText(), nullptr);\n\tEXPECT_EQ(elem->toCData(), nullptr);\n\tEXPECT_EQ(elem->toComment(), nullptr);\n\n\tunique_ptr<XMLNode> text = util::make_unique<XMLText>(\"text\");\n\tEXPECT_EQ(text->toElement(), nullptr);\n\tEXPECT_EQ(text->toText(), text.get());\n\tEXPECT_EQ(text->toCData(), nullptr);\n\tEXPECT_EQ(text->toComment(), nullptr);\n\n\tunique_ptr<XMLNode> cdata = util::make_unique<XMLCData>(\"cdata\");\n\tEXPECT_EQ(cdata->toElement(), nullptr);\n\tEXPECT_EQ(cdata->toText(), nullptr);\n\tEXPECT_EQ(cdata->toCData(), cdata.get());\n\tEXPECT_EQ(cdata->toComment(), nullptr);\n\n\tunique_ptr<XMLNode> comment = util::make_unique<XMLComment>(\"comment\");\n\tEXPECT_EQ(comment->toElement(), nullptr);\n\tEXPECT_EQ(comment->toText(), nullptr);\n\tEXPECT_EQ(comment->toCData(), nullptr);\n\tEXPECT_EQ(comment->toComment(), comment.get());\n}\n\n\nstatic int number_of_children (XMLElement &elem) {\n\tint count=0;\n\tfor (XMLNode *node = elem.firstChild(); node; node=node->next())\n\t\tcount++;\n\treturn count;\n}\n\n\nTEST(XMLNodeTest, appendElement) {\n\tXMLElement root(\"root\");\n\troot.append(util::make_unique<XMLElement>(\"child1\"));\n\troot.append(util::make_unique<XMLElement>(\"child2\"));\n\tEXPECT_EQ(number_of_children(root), 2);\n\tEXPECT_FALSE(root.empty());\n\tXMLElement *child1 = root.firstChild()->toElement();\n\tXMLElement *child2 = root.lastChild()->toElement();\n\tASSERT_NE(child1, nullptr);\n\tEXPECT_EQ(child1->parent(), &root);\n\tEXPECT_EQ(child1->prev(), nullptr);\n\tEXPECT_EQ(child1->next(), child2);\n\tEXPECT_EQ(child1->firstChild(), nullptr);\n\tEXPECT_EQ(child1->lastChild(), nullptr);\n\tEXPECT_EQ(child1->name(), \"child1\");\n\n\tASSERT_NE(child2, nullptr);\n\tEXPECT_EQ(child2->parent(), &root);\n\tEXPECT_EQ(child2->prev(), child1);\n\tEXPECT_EQ(child2->next(), nullptr);\n\tEXPECT_EQ(child2->firstChild(), nullptr);\n\tEXPECT_EQ(child2->lastChild(), nullptr);\n\tEXPECT_EQ(child2->name(), \"child2\");\n\troot.clear();\n\tEXPECT_TRUE(root.empty());\n}\n\n\nTEST(XMLNodeTest, prependElement) {\n\tXMLElement root(\"root\");\n\troot.prepend(util::make_unique<XMLElement>(\"child1\"));\n\troot.prepend(util::make_unique<XMLElement>(\"child2\"));\n\tEXPECT_EQ(number_of_children(root), 2);\n\tXMLElement *child1 = root.lastChild()->toElement();\n\tXMLElement *child2 = root.firstChild()->toElement();\n\tASSERT_NE(child1, nullptr);\n\tEXPECT_EQ(child1->parent(), &root);\n\tEXPECT_EQ(child1->prev(), child2);\n\tEXPECT_EQ(child1->next(), nullptr);\n\tEXPECT_EQ(child1->firstChild(), nullptr);\n\tEXPECT_EQ(child1->lastChild(), nullptr);\n\tEXPECT_EQ(child1->name(), \"child1\");\n\n\tASSERT_NE(child2, nullptr);\n\tEXPECT_EQ(child2->parent(), &root);\n\tEXPECT_EQ(child2->prev(), nullptr);\n\tEXPECT_EQ(child2->next(), child1);\n\tEXPECT_EQ(child2->firstChild(), nullptr);\n\tEXPECT_EQ(child2->lastChild(), nullptr);\n\tEXPECT_EQ(child2->name(), \"child2\");\n}\n\n\nTEST(XMLNodeTest, appendText) {\n\tXMLElement root(\"root\");\n\troot.append(util::make_unique<XMLText>(\"first string\"));\n\tEXPECT_EQ(number_of_children(root), 1);\n\tXMLText *lastChild = root.lastChild()->toText();\n\tASSERT_NE(lastChild, nullptr);\n\tEXPECT_EQ(lastChild->getText(), \"first string\");\n\tEXPECT_EQ(lastChild->parent(), &root);\n\tEXPECT_EQ(lastChild->prev(), nullptr);\n\tEXPECT_EQ(lastChild->next(), nullptr);\n\tEXPECT_EQ(root.firstChild(), root.lastChild());\n\n\troot.append(util::make_unique<XMLText>(\",second string\"));\n\tEXPECT_EQ(number_of_children(root), 1);\n\tlastChild = root.lastChild()->toText();\n\tASSERT_NE(lastChild, nullptr);\n\tEXPECT_EQ(lastChild->getText(), \"first string,second string\");\n\tEXPECT_EQ(lastChild->parent(), &root);\n\tEXPECT_EQ(lastChild->prev(), nullptr);\n\tEXPECT_EQ(lastChild->next(), nullptr);\n\tEXPECT_EQ(root.firstChild(), root.lastChild());\n\n\troot.append(\",third string\");\n\tEXPECT_EQ(number_of_children(root), 1);\n\tlastChild = root.lastChild()->toText();\n\tASSERT_NE(lastChild, nullptr);\n\tEXPECT_EQ(lastChild->getText(), \"first string,second string,third string\");\n\tEXPECT_EQ(lastChild->parent(), &root);\n\tEXPECT_EQ(lastChild->prev(), nullptr);\n\tEXPECT_EQ(lastChild->next(), nullptr);\n\n\troot.append(util::make_unique<XMLElement>(\"separator\"));\n\troot.append(\",fourth string\");\n\tEXPECT_EQ(number_of_children(root), 3);\n\tlastChild = root.lastChild()->toText();\n\tASSERT_NE(lastChild, nullptr);\n\tEXPECT_EQ(lastChild->getText(), \",fourth string\");\n\n\troot.append(util::make_unique<XMLElement>(\"separator\"));\n\troot.append(util::make_unique<XMLText>(\",fifth string\"));\n\tEXPECT_EQ(number_of_children(root), 5);\n\tlastChild = root.lastChild()->toText();\n\tASSERT_NE(lastChild, nullptr);\n\tEXPECT_EQ(lastChild->getText(), \",fifth string\");\n\n\troot.clear();\n\tEXPECT_TRUE(root.empty());\n}\n\n\nTEST(XMLNodeTest, prependText) {\n\tXMLElement root(\"root\");\n\troot.prepend(util::make_unique<XMLText>(\"first string\"));\n\tEXPECT_EQ(number_of_children(root), 1);\n\tXMLText *firstChild = root.firstChild()->toText();\n\tASSERT_NE(firstChild, nullptr);\n\tEXPECT_EQ(firstChild->getText(), \"first string\");\n\tEXPECT_EQ(firstChild->parent(), &root);\n\tEXPECT_EQ(firstChild->prev(), nullptr);\n\tEXPECT_EQ(firstChild->next(), nullptr);\n\n\troot.prepend(util::make_unique<XMLText>(\"second string,\"));\n\tEXPECT_EQ(number_of_children(root), 1);\n\tfirstChild = root.firstChild()->toText();\n\tASSERT_NE(firstChild, nullptr);\n\tEXPECT_EQ(firstChild->getText(), \"second string,first string\");\n\tEXPECT_EQ(firstChild->parent(), &root);\n\tEXPECT_EQ(firstChild->prev(), nullptr);\n\tEXPECT_EQ(firstChild->next(), nullptr);\n\n\troot.prepend(util::make_unique<XMLElement>(\"separator\"));\n\troot.prepend(util::make_unique<XMLText>(\"third string,\"));\n\tEXPECT_EQ(number_of_children(root), 3);\n\tfirstChild = root.firstChild()->toText();\n\tASSERT_NE(firstChild, nullptr);\n\tEXPECT_EQ(firstChild->getText(), \"third string,\");\n\tEXPECT_EQ(firstChild->parent(), &root);\n\tEXPECT_EQ(firstChild->prev(), nullptr);\n\tEXPECT_EQ(firstChild->next()->next(), root.lastChild());\n\tEXPECT_EQ(root.lastChild()->prev()->prev(), root.firstChild());\n}\n\n\nTEST(XMLNodeTest, attributes1) {\n\tXMLElement root(\"root\");\n\troot.addAttribute(\"string\", \"text\");\n\troot.addAttribute(\"integer\", 42);\n\troot.addAttribute(\"double\", 42.24);\n\tEXPECT_TRUE(root.empty());\n\tEXPECT_TRUE(root.hasAttribute(\"string\"));\n\tEXPECT_TRUE(root.hasAttribute(\"integer\"));\n\tEXPECT_TRUE(root.hasAttribute(\"double\"));\n\tEXPECT_FALSE(root.hasAttribute(\"noname\"));\n\tEXPECT_STREQ(root.getAttributeValue(\"string\"), \"text\");\n\tEXPECT_STREQ(root.getAttributeValue(\"integer\"), \"42\");\n\tEXPECT_STREQ(root.getAttributeValue(\"double\"), \"42.24\");\n\tEXPECT_EQ(root.getAttributeValue(\"none\"), nullptr);\n}\n\n\nTEST(XMLNodeTest, attributes2) {\n\tXMLElement root(\"root\");\n\troot.addAttributes({{\"attr1\", \"val1\"}, {\"attr2\", \"val2\"}, {\"attr3\", \"val3\"}});\n\tEXPECT_TRUE(root.empty());\n\tEXPECT_TRUE(root.hasAttribute(\"attr1\"));\n\tEXPECT_TRUE(root.hasAttribute(\"attr2\"));\n\tEXPECT_TRUE(root.hasAttribute(\"attr3\"));\n\tEXPECT_FALSE(root.hasAttribute(\"noname\"));\n\tEXPECT_STREQ(root.getAttributeValue(\"attr1\"), \"val1\");\n\tEXPECT_STREQ(root.getAttributeValue(\"attr2\"), \"val2\");\n\tEXPECT_STREQ(root.getAttributeValue(\"attr3\"), \"val3\");\n\tEXPECT_EQ(root.getAttributeValue(\"none\"), nullptr);\n}\n\n\nTEST(XMLNodeTest, clone) {\n\tXMLElement root (\"root\");\n\troot.addAttribute(\"string\", \"text\");\n\troot.addAttribute(\"integer\", 42);\n\troot.addAttribute(\"double\", 42.24);\n\troot.append(\"text\");\n\tunique_ptr<XMLElement> clone = util::static_unique_ptr_cast<XMLElement>(root.clone());\n\tEXPECT_EQ(number_of_children(root), 1);\n\tEXPECT_STREQ(clone->getAttributeValue(\"string\"), \"text\");\n\tEXPECT_STREQ(clone->getAttributeValue(\"integer\"), \"42\");\n\tEXPECT_STREQ(clone->getAttributeValue(\"double\"), \"42.24\");\n}\n\n\nTEST(XMLNodeTest, insertBefore) {\n\tXMLElement root(\"root\");\n\tauto child1 = util::make_unique<XMLElement>(\"child1\");\n\tauto child2 = util::make_unique<XMLElement>(\"child2\");\n\tXMLNode* child1Ptr = root.append(std::move(child1));\n\tXMLNode* child2Ptr = root.append(std::move(child2));\n\tauto node = util::make_unique<XMLElement>(\"node\");\n\tEXPECT_FALSE(root.insertBefore(util::make_unique<XMLElement>(\"dummy\"), node.get()));\n\tEXPECT_EQ(number_of_children(root), 2);\n\tEXPECT_TRUE(root.insertBefore(util::make_unique<XMLElement>(\"child3\"), child1Ptr));\n\tEXPECT_EQ(number_of_children(root), 3);\n\tXMLElement *child = root.firstChild()->toElement();\n\tEXPECT_EQ(child->name(), \"child3\");\n\tEXPECT_TRUE(root.insertBefore(util::make_unique<XMLElement>(\"child4\"), child2Ptr));\n\tconst char *names[] = {\"child3\", \"child1\", \"child4\", \"child2\"};\n\tconst char **p = names;\n\tfor (XMLNode *node=root.firstChild(); node; node=node->next()) {\n\t\tXMLElement *elem = node->toElement();\n\t\tASSERT_NE(elem, nullptr);\n\t\tEXPECT_EQ(elem->name(), *p++) << \"name=\" << elem->name();\n\t\tEXPECT_EQ(elem->parent(), &root);\n\t\tif (elem->prev()) {\n\t\t\tEXPECT_EQ(elem->prev()->next(), elem);\n\t\t}\n\t}\n}\n\n\nTEST(XMLNodeTest, insertAfter) {\n\tXMLElement root(\"root\");\n\tauto child1 = util::make_unique<XMLElement>(\"child1\");\n\tauto child2 = util::make_unique<XMLElement>(\"child2\");\n\tXMLNode *child1Ptr = root.append(std::move(child1));\n\tXMLNode *child2Ptr =root.append(std::move(child2));\n\tauto node = util::make_unique<XMLElement>(\"node\");\n\tEXPECT_FALSE(root.insertAfter(util::make_unique<XMLElement>(\"dummy\"), node.get()));\n\tEXPECT_EQ(number_of_children(root), 2);\n\tEXPECT_TRUE(root.insertAfter(util::make_unique<XMLElement>(\"child3\"), child1Ptr));\n\tEXPECT_TRUE(root.insertAfter(util::make_unique<XMLElement>(\"child4\"), child2Ptr));\n\tEXPECT_EQ(number_of_children(root), 4);\n\tconst char *names[] = {\"child1\", \"child3\", \"child2\", \"child4\"};\n\tconst char **p = names;\n\tfor (XMLNode *node=root.firstChild(); node; node=node->next()) {\n\t\tXMLElement *elem = node->toElement();\n\t\tASSERT_NE(elem, nullptr);\n\t\tEXPECT_EQ(elem->name(), *p++) << \"name=\" << elem->name();\n\t\tEXPECT_EQ(elem->parent(), &root);\n\t\tif (elem->prev()) {\n\t\t\tEXPECT_EQ(elem->prev()->next(), elem);\n\t\t}\n\t}\n}\n\n\nTEST(XMLNodeTest, getDescendants) {\n\tXMLElement root(\"root\");\n\tauto child1 = util::make_unique<XMLElement>(\"child\");\n\tauto child2 = util::make_unique<XMLElement>(\"childX\");\n\tauto child3 = util::make_unique<XMLElement>(\"child\");\n\tauto child4 = util::make_unique<XMLElement>(\"child\");\n\tchild1->addAttribute(\"attr\", \"value\");\n\tchild2->addAttribute(\"attr\", \"value\");\n\tchild3->addAttribute(\"attr\", \"value\");\n\tchild3->append(\"text\");\n\tXMLElement *child3Ptr = static_cast<XMLElement*>(child2->append(std::move(child3)));\n\tXMLElement *child2Ptr = static_cast<XMLElement*>(child1->append(std::move(child2)));\n\tXMLElement *child1Ptr = static_cast<XMLElement*>(root.append(std::move(child1)));\n\tXMLElement *child4Ptr = static_cast<XMLElement*>(root.append(std::move(child4)));\n\tvector<XMLElement*> elements;\n\troot.getDescendants(\"child\", nullptr, elements);\n\tEXPECT_EQ(elements.size(), 3u);\n\t{\n\t\tXMLElement *nodes[] = {child1Ptr, child3Ptr, child4Ptr};\n\t\tXMLElement **p = nodes;\n\t\tfor (const XMLElement *elem : elements)\n\t\t\tEXPECT_EQ(elem, *p++);\n\t}{\n\t\telements.clear();\n\t\troot.getDescendants(\"child\", \"attr\", elements);\n\t\tEXPECT_EQ(elements.size(), 2u);\n\t\tXMLElement *nodes[] = {child1Ptr, child3Ptr};\n\t\tXMLElement **p = nodes;\n\t\tfor (const XMLElement *elem : elements)\n\t\t\tEXPECT_EQ(elem, *p++);\n\t}{\n\t\telements.clear();\n\t\troot.getDescendants(nullptr, \"attr\", elements);\n\t\tEXPECT_EQ(elements.size(), 3u);\n\t\tXMLElement *nodes[] = {child1Ptr, child2Ptr, child3Ptr};\n\t\tXMLElement **p = nodes;\n\t\tfor (const XMLElement *elem : elements)\n\t\t\tEXPECT_EQ(elem, *p++);\n\t}\n}\n\n\nTEST(XMLNodeTest, getFirstDescendant) {\n\tXMLElement root(\"root\");\n\tauto child1 = util::make_unique<XMLElement>(\"child\");\n\tauto child2 = util::make_unique<XMLElement>(\"childX\");\n\tauto child3 = util::make_unique<XMLElement>(\"child\");\n\tauto child4 = util::make_unique<XMLElement>(\"child\");\n\tchild1->addAttribute(\"attr\", \"valueX\");\n\tchild2->addAttribute(\"attr\", \"value\");\n\tchild3->addAttribute(\"attrX\", \"value\");\n\tchild3->append(\"text\");\n\tXMLNode *child3Ptr = child2->append(std::move(child3));\n\tchild1->append(std::move(child2));\n\tXMLNode *child1Ptr = root.append(std::move(child1));\n\troot.append(std::move(child4));\n\tEXPECT_EQ(root.getFirstDescendant(\"child\", nullptr, nullptr), child1Ptr);\n\tEXPECT_EQ(root.getFirstDescendant(\"child\", \"attr\", nullptr), child1Ptr);\n\tEXPECT_EQ(root.getFirstDescendant(\"child\", \"attrX\", nullptr), child3Ptr);\n\tEXPECT_EQ(root.getFirstDescendant(\"child\", \"attrX\", \"value\"), child3Ptr);\n\tEXPECT_EQ(root.getFirstDescendant(0, \"attrX\", \"value\"), child3Ptr);\n\tEXPECT_EQ(root.getFirstDescendant(0, \"attrX\", nullptr), child3Ptr);\n\tEXPECT_EQ(root.getFirstDescendant(\"child\", \"attr\", \"value\"), nullptr);\n}\n\n\nTEST(XMLNodeTest, write) {\n\tXMLElement root(\"root\");\n\tauto child1 = util::make_unique<XMLElement>(\"child\");\n\tauto child2 = util::make_unique<XMLElement>(\"childX\");\n\tauto child3 = util::make_unique<XMLElement>(\"child\");\n\tauto child4 = util::make_unique<XMLElement>(\"child\");\n\tchild1->addAttribute(\"attr\", \"valueX\");\n\tchild2->addAttribute(\"attr\", \"value\");\n\tchild3->addAttribute(\"attrX\", \"value\");\n\tchild3->append(\"text\");\n\tchild2->append(std::move(child3));\n\tchild1->append(std::move(child2));\n\troot.append(std::move(child1));\n\troot.append(std::move(child4));\n\tostringstream oss;\n\troot.write(oss);\n\tstring str = oss.str();\n\tstr.erase(remove(str.begin(), str.end(), '\\n'), str.end());\n\tEXPECT_EQ(str, \"<root><child attr='valueX'><childX attr='value'><child attrX='value'>text</child></childX></child><child/></root>\");\n}\n\n\nTEST(XMLNodeTest, cdata) {\n\tXMLElement root(\"root\");\n\tauto cdataNode = util::make_unique<XMLCData>(\"text & <text>\");\n\tXMLNode *cdataNodePtr = root.append(std::move(cdataNode));\n\troot.append(util::make_unique<XMLElement>(\"element\"));\n\troot.append(cdataNodePtr->clone());\n\tostringstream oss;\n\troot.write(oss);\n\tstring str = oss.str();\n\tstr.erase(remove(str.begin(), str.end(), '\\n'), str.end());\n\tEXPECT_EQ(str, \"<root><![CDATA[text & <text>]]><element/><![CDATA[text & <text>]]></root>\");\n\n\tcdataNodePtr->clear();\n\toss.str(\"\");\n\troot.write(oss);\n\tstr = oss.str();\n\tstr.erase(remove(str.begin(), str.end(), '\\n'), str.end());\n\tEXPECT_EQ(str, \"<root><element/><![CDATA[text & <text>]]></root>\");\n}\n\n\nTEST(XMLNodeTest, empty) {\n\tXMLElement root(\"root\");\n\tEXPECT_TRUE(root.empty());\n\tEXPECT_TRUE(root.empty(true));\n\tEXPECT_TRUE(root.attributes().empty());\n\n\troot.append(XMLString(\" \\n \"));\n\tEXPECT_FALSE(root.empty());\n\tEXPECT_TRUE(root.empty(true));\n\n\troot.append(XMLString(\"\\n\"));\n\tEXPECT_FALSE(root.empty());\n\tEXPECT_TRUE(root.empty(true));\n\n\troot.append(util::make_unique<XMLElement>(\"child\"));\n\tEXPECT_FALSE(root.empty());\n\tEXPECT_FALSE(root.empty(true));\n\n\troot.append(XMLString(\"\\n\"));\n\tEXPECT_FALSE(root.empty());\n\tEXPECT_FALSE(root.empty(true));\n}\n"
  },
  {
    "path": "tests/XMLStringTest.cpp",
    "content": "/*************************************************************************\n** XMLStringTest.cpp                                                    **\n**                                                                      **\n** This file is part of dvisvgm -- a fast DVI to SVG converter          **\n** Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n*************************************************************************/\n\n#include <gtest/gtest.h>\n#include \"XMLString.hpp\"\n\nusing namespace std;\n\n\nTEST(XMLStringTest, stringcast) {\n\tconst char *cstr = \"special characters: &\\\"'<>\";\n\tstring str = cstr;\n\tEXPECT_EQ(XMLString(cstr, true), string(\"special characters: &\\\"'<>\"));\n\tEXPECT_EQ(XMLString(cstr), string(\"special characters: &amp;&quot;&apos;&lt;>\"));\n\tEXPECT_EQ(XMLString(str, true), string(\"special characters: &\\\"'<>\"));\n\tEXPECT_EQ(XMLString(str), string(\"special characters: &amp;&quot;&apos;&lt;>\"));\n}\n\n\nTEST(XMLStringTest, intcast) {\n\tEXPECT_EQ(XMLString(65, true), string(\"65\"));\n\tEXPECT_EQ(XMLString(65, false), string(\"A\"));\n\tEXPECT_EQ(XMLString(1000, true), string(\"1000\"));\n\tEXPECT_EQ(XMLString(1000, false), string(\"\\xCF\\xA8\"));  // UTF-8\n}\n\n\nTEST(XMLStringTest, doublecast) {\n\tEXPECT_EQ(XMLString(1.2345), string(\"1.2345\"));\n\tXMLString::DECIMAL_PLACES = 3;\n\tEXPECT_EQ(XMLString(1.2345), string(\"1.235\"));\n\tXMLString::DECIMAL_PLACES = 2;\n\tEXPECT_EQ(XMLString(1.2345), string(\"1.23\"));\n\tXMLString::DECIMAL_PLACES = 1;\n\tEXPECT_EQ(XMLString(1.2345), string(\"1.2\"));\n\tXMLString::DECIMAL_PLACES = 0;\n\tEXPECT_EQ(XMLString(1.2345), string(\"1.2345\"));\n\n\tEXPECT_EQ(XMLString(-1.2345), string(\"-1.2345\"));\n\tXMLString::DECIMAL_PLACES = 3;\n\tEXPECT_EQ(XMLString(-1.2345), string(\"-1.235\"));\n\tXMLString::DECIMAL_PLACES = 2;\n\tEXPECT_EQ(XMLString(-1.2345), string(\"-1.23\"));\n\tXMLString::DECIMAL_PLACES = 1;\n\tEXPECT_EQ(XMLString(-1.2345), string(\"-1.2\"));\n\tXMLString::DECIMAL_PLACES = 0;\n\tEXPECT_EQ(XMLString(-1.2345), string(\"-1.2345\"));\n\n\tEXPECT_EQ(XMLString(10.0), string(\"10\"));\n\tEXPECT_EQ(XMLString(-10.0), string(\"-10\"));\n}\n"
  },
  {
    "path": "tests/check-conv",
    "content": "#!/bin/bash\n# This file is part of the dvisvgm package and published under the \n# terms of the GNU General Public License version 3 or later.\n# See file COPYING for further details.\n# Copyright (C) 2009-2025 Martin Gieseking <martin.gieseking@uos.de>\n\n\nfiles=(sample frktest)\nstate=0\n\nBLUE=\"\\E[0;34m\"\nGREEN=\"\\E[0;32m\"\nRED=\"\\E[0;31m\"\nCOLOR_OFF=\"\\E[0m\"\n\nif [ \\! -e enable-check-conv ]; then\n\techo -e \"${BLUE}conversion checks skipped${COLOR_OFF}\"\n\texit 0\nfi\n\nfor f in ${files[@]}; do\n\tfor m in \"wf\" \"nf\"; do\n\t\tinfile=${srcdir}/$f\n\t\toutfile=$f-$m.svg\n\t\tcmpfile=${srcdir}/$f-$m-cmp.svg\n\t\tif [ $m = \"wf\" ]; then\n\t\t\t../src/dvisvgm -v0 -o$outfile $infile\n\t\telse\n\t\t\t../src/dvisvgm -v0 -n  -o$outfile $infile\n\t\tfi\n\t\txsltproc --novalid ${srcdir}/normalize.xsl $outfile | xmllint --format - >tmp1.svg\n\t\txsltproc --novalid ${srcdir}/normalize.xsl $cmpfile | xmllint --format - >tmp2.svg\n\t\tmv tmp1.svg $outfile\n\n\t\tdiff $outfile tmp2.svg >$f-$m.diff #>/dev/null\n\t\tif [ $? -ne 0 ]; then\n\t\t\techo -en \"${RED}FAILED $COLOR_OFF\"\n\t\t\tstate=1\n\t\telse\n\t\t\techo -en \"${GREEN}PASSED $COLOR_OFF\"\n\t\t\trm $outfile\n\t\tfi\n\t\techo \"converting $f.dvi (mode $m)\"\n\t\tif [ \\! -s $f-$m.diff ]; then\n\t\t\trm $f-$m.diff\n\t\tfi\n\t\trm tmp2.svg\n\tdone\ndone\nexit $state\n"
  },
  {
    "path": "tests/create-makefile",
    "content": "#!/bin/sh\n# This file is part of the dvisvgm package and published under the\n# terms of the GNU General Public License version 3 or later.\n# See file COPYING for further details.\n# Copyright (C) 2009-2025 Martin Gieseking <martin.gieseking@uos.de>\n\nout=Makefile.am\ncat >$out <<EOT\n## This file is part of dvisvgm\n## Copyright (C) 2005-2025 Martin Gieseking <martin.gieseking@uos.de>\n##\n## Process this file with automake.\n\nSUBDIRS = data\n\ncheck_LTLIBRARIES = libgtest.la\nlibgtest_la_SOURCES = gtest/src/gtest-all.cc testmain.cpp\nlibgtest_la_CPPFLAGS = -I\\$(dvisvgm_srcdir)/tests/gtest/include -I\\$(dvisvgm_srcdir)/tests/gtest\nlibgtest_la_LDFLAGS = -pthread\nEXTRA_DIST = gtest/LICENSE \\\\\n\tgtest/include \\\\\n\tgtest/src/gtest.cc \\\\\n\tgtest/src/gtest-assertion-result.cc \\\\\n\tgtest/src/gtest-death-test.cc \\\\\n\tgtest/src/gtest-filepath.cc \\\\\n\tgtest/src/gtest-internal-inl.h \\\\\n\tgtest/src/gtest_main.cc \\\\\n\tgtest/src/gtest-matchers.cc \\\\\n\tgtest/src/gtest-port.cc \\\\\n\tgtest/src/gtest-printers.cc \\\\\n\tgtest/src/gtest-test-part.cc \\\\\n\tgtest/src/gtest-typed-test.cc\n\ninclude ../libs/defs.am\n\nLIBS_CFLAGS = \\$(XXHASH_CFLAGS) -I\\$(dvisvgm_srcdir)/libs/md5\nLIBS_LIBS   = \\$(POTRACE_LIBS) \\$(XXHASH_LIBS) ../libs/md5/libmd5.a\n\nif ENABLE_WOFF\nLIBS_LIBS  += \\$(WOFF2_LIBS) \\$(BROTLI_LIBS)\nendif\n\nAM_CXXFLAGS = -I\\$(dvisvgm_srcdir)/src -I\\$(dvisvgm_srcdir)/libs/variant/include \\\\\n\t-Wall -Wno-mismatched-tags \\\\\n\t-DBUILDDIR='\"\\$(abs_builddir)\"' -DSRCDIR='\"\\$(abs_srcdir)\"' \\\\\n\t\\$(CODE_COVERAGE_CFLAGS)\n\nTESTS = hashcheck\ncheck_PROGRAMS = hashcheck\nnodist_hashcheck_SOURCES = hashcheck.cpp\nhashcheck_CPPFLAGS = \\$(LIBS_CFLAGS)\nhashcheck_LDADD = \\$(LIBS_LIBS)\n\nhashcheck.cpp: genhashcheck.py \\$(dvisvgm_srcdir)/src/AGLTable.hpp \\$(dvisvgm_srcdir)/libs/xxHash/xxhash.h\n\tpython \\$^ >\\$@\n\nTESTLIBS = libgtest.la ../src/libdvisvgm.la \\$(LIBS_LIBS) -lfreetype\nTESTLIBS += \\$(CODE_COVERAGE_LDFLAGS)\n\nEOT\n\nfor f in *Test.cpp; do\n\tbase=`basename $f .cpp`\n\tcat >>$out <<EOT\nTESTS += $base\ncheck_PROGRAMS += $base\n${base}_SOURCES = $f testutil.hpp\n${base}_CPPFLAGS = -I\\$(dvisvgm_srcdir)/tests/gtest/include \\$(LIBS_CFLAGS)\n${base}_LDADD = \\$(TESTLIBS)\n\nEOT\ndone\n\n#echo \"TESTDATA =\" >>$out\n#\n#for f in *.dvi; do\n#\tbase=`basename $f .dvi`\n#   echo  \"TESTDATA += ${base}.dvi ${base}-wf-cmp.svg ${base}-nf-cmp.svg\" >>$out\n#done\n\ncat >>$out <<EOT\nEXTRA_DIST += check-conv genhashcheck.py normalize.xsl\nTESTS += check-conv\n\nCLEANFILES = *.gcda *.gcno hashcheck.cpp\nEOT\n\n# vim: set syntax=sh:\n"
  },
  {
    "path": "tests/data/Makefile.am",
    "content": "## This file is part of dvisvgm\n## Copyright (C) 2016-2025 Martin Gieseking <martin.gieseking@uos.de>\n##\n## Process this file with automake.\n\nEXTRA_DIST = \\\n\tcidjmgr0-h.tfm \\\n\tcmr10.600gf \\\n\tcmr10.pfb \\\n\tcmr10.tfm \\\n\tdvipdfm_test.map \\\n\tdvips_test.map \\\n\tfrktest.dvi \\\n\tfrktest-nf-cmp.svg \\\n\tfrktest-wf-cmp.svg \\\n\tlmmono12-regular.otf \\\n\tomarab.ofm \\\n\tot1.cmap \\\n\tsample.dvi \\\n\tsample-nf-cmp.svg \\\n\tsample.sfd \\\n\tsample-wf-cmp.svg \\\n\tsample_v2.dvi \\\n\tsample_v3.dvi \\\n\tupjf-g.ofm\n\n"
  },
  {
    "path": "tests/data/ot1.cmap",
    "content": "%!PS-Adobe-3.0 Resource-CMap\n%%DocumentNeededResources: ProcSet (CIDInit)\n%%IncludeResource: ProcSet (CIDInit)\n%%BeginResource: CMap (TeX-OT1-0)\n%%Title: (TeX-OT1-0 TeX OT1 0)\n%%Version: 1.000\n%%EndComments\n/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo\n<< /Registry (TeX)\n/Ordering (OT1)\n/Supplement 0\n>> def\n/CMapName /TeX-OT1-0 def\n/CMapType 2 def\n1 begincodespacerange\n<00> <7F>\nendcodespacerange\n8 beginbfrange\n<00> <01> <0393>\n<09> <0A> <03A8>\n<23> <26> <0023>\n<28> <3B> <0028>\n<3F> <5B> <003F>\n<5D> <5E> <005D>\n<61> <7A> <0061>\n<7B> <7C> <2013>\nendbfrange\n40 beginbfchar\n<02> <0398>\n<03> <039B>\n<04> <039E>\n<05> <03A0>\n<06> <03A3>\n<07> <03D2>\n<08> <03A6>\n<0B> <00660066>\n<0C> <00660069>\n<0D> <0066006C>\n<0E> <006600660069>\n<0F> <00660066006C>\n<10> <0131>\n<11> <0237>\n<12> <0060>\n<13> <00B4>\n<14> <02C7>\n<15> <02D8>\n<16> <00AF>\n<17> <02DA>\n<18> <00B8>\n<19> <00DF>\n<1A> <00E6>\n<1B> <0153>\n<1C> <00F8>\n<1D> <00C6>\n<1E> <0152>\n<1F> <00D8>\n<21> <0021>\n<22> <201D>\n<27> <2019>\n<3C> <00A1>\n<3D> <003D>\n<3E> <00BF>\n<5C> <201C>\n<5F> <02D9>\n<60> <2018>\n<7D> <02DD>\n<7E> <02DC>\n<7F> <00A8>\nendbfchar\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend\n%%EndResource\n%%EOF\n"
  },
  {
    "path": "tests/data/sample.sfd",
    "content": "00 0x0000_0x00FF\n01 0x3000 0x3001 0x3002 0x00B7 0x02C9 0x02C7 0x00A8 0x3003 \\\n   0x3005 0x2014 0xFF5E 0x2016 0x2026 0x2018 0x2019 0x201C \\\n   0x201D 0x3014 0x3015 0x3008 0x3009 0x300A 0x300B 0x300C \\\n   0x300D 0x300E 0x300F 0x3016 0x3017 0x3010 0x3011 0x00B1 \\\n   0x00D7 0x00F7 0x2236 0x2227 0x2228 0x2211 0x220F 0x222A \\\n   0x2229 0x2208 0x2237 0x221A 0x22A5 0x2225 0x2220 0x2312 \\\n   0x2299 0x222B 0x222E 0x2261 0x224C 0x2248 0x223D 0x221D \\\n   0x2260 0x226E 0x226F 0x2264 0x2265 0x221E 0x2235 0x2234 \\\n   0x2642 0x2640 0x00B0 0x2032 0x2033 0x2103 0xFF04 0x00A4 \\\n   0xFFE0 0xFFE1 0x2030 0x00A7 0x2116 0x2606 0x2605 0x25CB \\\n   0x25CF 0x25CE 0x25C7 0x25C6 0x25A1 0x25A0 0x25B3 0x25B2 \\\n   0x203B 0x2192 0x2190 0x2191 0x2193 0x3013 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0x2488 0x2489 \\\n   0x248A 0x248B 0x248C 0x248D 0x248E 0x248F 0x2490 0x2491 \\\n   0x2492 0x2493 0x2494 0x2495 0x2496 0x2497 0x2498 0x2499 \\\n   0x249A 0x249B 0x2474 0x2475 0x2476 0x2477 0x2478 0x2479 \\\n   0x247A 0x247B 0x247C 0x247D 0x247E 0x247F 0x2480 0x2481 \\\n   0x2482 0x2483 0x2484 0x2485 0x2486 0x2487 0x2460 0x2461 \\\n   0x2462 0x2463 0x2464 0x2465 0x2466 0x2467 0x2468 0x2469 \\\n   0xFFFE 0xFFFE 0x3220 0x3221 0x3222 0x3223 0x3224 0x3225 \\\n   0x3226 0x3227 0x3228 0x3229 0xFFFE 0xFFFE 0x2160 0x2161 \\\n   0x2162 0x2163 0x2164 0x2165 0x2166 0x2167 0x2168 0x2169 \\\n   0x216A 0x216B 0xFFFE 0xFFFE 0xFF01 0xFF02 0xFF03 0xFFE5 \\\n   0xFF05 0xFF06 0xFF07 0xFF08 0xFF09 0xFF0A 0xFF0B 0xFF0C \\\n   0xFF0D 0xFF0E 0xFF0F 0xFF10 0xFF11 0xFF12 0xFF13 0xFF14 \\\n   0xFF15 0xFF16 0xFF17 0xFF18 0xFF19 0xFF1A 0xFF1B 0xFF1C \\\n   0xFF1D 0xFF1E 0xFF1F 0xFF20 0xFF21 0xFF22 0xFF23 0xFF24 \\\n   0xFF25 0xFF26 0xFF27 0xFF28 0xFF29 0xFF2A 0xFF2B 0xFF2C \\\n   0xFF2D 0xFF2E 0xFF2F 0xFF30 0xFF31 0xFF32 0xFF33 0xFF34 \\\n   0xFF35 0xFF36 0xFF37 0xFF38 0xFF39 0xFF3A 0xFF3B 0xFF3C \\\n   0xFF3D 0xFF3E 0xFF3F 0xFF40 0xFF41 0xFF42 0xFF43 0xFF44\n02 0xFF45 0xFF46 0xFF47 0xFF48 0xFF49 0xFF4A 0xFF4B 0xFF4C \\\n   0xFF4D 0xFF4E 0xFF4F 0xFF50 0xFF51 0xFF52 0xFF53 0xFF54 \\\n   0xFF55 0xFF56 0xFF57 0xFF58 0xFF59 0xFF5A 0xFF5B 0xFF5C \\\n   0xFF5D 0xFFE3 0x3041 0x3042 0x3043 0x3044 0x3045 0x3046 \\\n   0x3047 0x3048 0x3049 0x304A 0x304B 0x304C 0x304D 0x304E \\\n   0x304F 0x3050 0x3051 0x3052 0x3053 0x3054 0x3055 0x3056 \\\n   0x3057 0x3058 0x3059 0x305A 0x305B 0x305C 0x305D 0x305E \\\n   0x305F 0x3060 0x3061 0x3062 0x3063 0x3064 0x3065 0x3066 \\\n   0x3067 0x3068 0x3069 0x306A 0x306B 0x306C 0x306D 0x306E \\\n   0x306F 0x3070 0x3071 0x3072 0x3073 0x3074 0x3075 0x3076 \\\n   0x3077 0x3078 0x3079 0x307A 0x307B 0x307C 0x307D 0x307E \\\n   0x307F 0x3080 0x3081 0x3082 0x3083 0x3084 0x3085 0x3086 \\\n   0x3087 0x3088 0x3089 0x308A 0x308B 0x308C 0x308D 0x308E \\\n   0x308F 0x3090 0x3091 0x3092 0x3093 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0x30A1 0x30A2 0x30A3 0x30A4 0x30A5 0x30A6 0x30A7 0x30A8 \\\n   0x30A9 0x30AA 0x30AB 0x30AC 0x30AD 0x30AE 0x30AF 0x30B0 \\\n   0x30B1 0x30B2 0x30B3 0x30B4 0x30B5 0x30B6 0x30B7 0x30B8 \\\n   0x30B9 0x30BA 0x30BB 0x30BC 0x30BD 0x30BE 0x30BF 0x30C0 \\\n   0x30C1 0x30C2 0x30C3 0x30C4 0x30C5 0x30C6 0x30C7 0x30C8 \\\n   0x30C9 0x30CA 0x30CB 0x30CC 0x30CD 0x30CE 0x30CF 0x30D0 \\\n   0x30D1 0x30D2 0x30D3 0x30D4 0x30D5 0x30D6 0x30D7 0x30D8 \\\n   0x30D9 0x30DA 0x30DB 0x30DC 0x30DD 0x30DE 0x30DF 0x30E0 \\\n   0x30E1 0x30E2 0x30E3 0x30E4 0x30E5 0x30E6 0x30E7 0x30E8 \\\n   0x30E9 0x30EA 0x30EB 0x30EC 0x30ED 0x30EE 0x30EF 0x30F0 \\\n   0x30F1 0x30F2 0x30F3 0x30F4 0x30F5 0x30F6 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0x0391 0x0392 \\\n   0x0393 0x0394 0x0395 0x0396 0x0397 0x0398 0x0399 0x039A \\\n   0x039B 0x039C 0x039D 0x039E 0x039F 0x03A0 0x03A1 0x03A3 \\\n   0x03A4 0x03A5 0x03A6 0x03A7 0x03A8 0x03A9 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0x03B1 0x03B2 \\\n   0x03B3 0x03B4 0x03B5 0x03B6 0x03B7 0x03B8 0x03B9 0x03BA\n03 0x03BB 0x03BC 0x03BD 0x03BE 0x03BF 0x03C0 0x03C1 0x03C3 \\\n   0x03C4 0x03C5 0x03C6 0x03C7 0x03C8 0x03C9 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0x0410 0x0411 0x0412 0x0413 \\\n   0x0414 0x0415 0x0401 0x0416 0x0417 0x0418 0x0419 0x041A \\\n   0x041B 0x041C 0x041D 0x041E 0x041F 0x0420 0x0421 0x0422 \\\n   0x0423 0x0424 0x0425 0x0426 0x0427 0x0428 0x0429 0x042A \\\n   0x042B 0x042C 0x042D 0x042E 0x042F 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0x0430 0x0431 0x0432 0x0433 \\\n   0x0434 0x0435 0x0451 0x0436 0x0437 0x0438 0x0439 0x043A \\\n   0x043B 0x043C 0x043D 0x043E 0x043F 0x0440 0x0441 0x0442 \\\n   0x0443 0x0444 0x0445 0x0446 0x0447 0x0448 0x0449 0x044A \\\n   0x044B 0x044C 0x044D 0x044E 0x044F 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0x0101 0x00E1 0x01CE 0x00E0 0x0113 0x00E9 \\\n   0x011B 0x00E8 0x012B 0x00ED 0x01D0 0x00EC 0x014D 0x00F3 \\\n   0x01D2 0x00F2 0x016B 0x00FA 0x01D4 0x00F9 0x01D6 0x01D8 \\\n   0x01DA 0x01DC 0x00FC 0x00EA 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0x3105 0x3106 \\\n   0x3107 0x3108 0x3109 0x310A 0x310B 0x310C 0x310D 0x310E \\\n   0x310F 0x3110 0x3111 0x3112 0x3113 0x3114 0x3115 0x3116 \\\n   0x3117 0x3118 0x3119 0x311A 0x311B 0x311C 0x311D 0x311E \\\n   0x311F 0x3120 0x3121 0x3122 0x3123 0x3124 0x3125 0x3126 \\\n   0x3127 0x3128 0x3129 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0x2500 0x2501 0x2502 0x2503 0x2504 \\\n   0x2505 0x2506 0x2507 0x2508 0x2509 0x250A 0x250B 0x250C\n04 0x250D 0x250E 0x250F 0x2510 0x2511 0x2512 0x2513 0x2514 \\\n   0x2515 0x2516 0x2517 0x2518 0x2519 0x251A 0x251B 0x251C \\\n   0x251D 0x251E 0x251F 0x2520 0x2521 0x2522 0x2523 0x2524 \\\n   0x2525 0x2526 0x2527 0x2528 0x2529 0x252A 0x252B 0x252C \\\n   0x252D 0x252E 0x252F 0x2530 0x2531 0x2532 0x2533 0x2534 \\\n   0x2535 0x2536 0x2537 0x2538 0x2539 0x253A 0x253B 0x253C \\\n   0x253D 0x253E 0x253F 0x2540 0x2541 0x2542 0x2543 0x2544 \\\n   0x2545 0x2546 0x2547 0x2548 0x2549 0x254A 0x254B 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE\n05 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE\n06 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE 0xFFFE \\\n   0xFFFE 0xFFFE 0x554A 0x963F 0x57C3 0x6328 0x54CE 0x5509 \\\n   0x54C0 0x7691 0x764C 0x853C 0x77EE 0x827E 0x788D 0x7231 \\\n   0x9698 0x978D 0x6C28 0x5B89 0x4FFA 0x6309 0x6697 0x5CB8 \\\n   0x80FA 0x6848 0x80AE 0x6602 0x76CE 0x51F9 0x6556 0x71AC \\\n   0x7FF1 0x8884 0x50B2 0x5965 0x61CA 0x6FB3 0x82AD 0x634C \\\n   0x6252 0x53ED 0x5427 0x7B06 0x516B 0x75A4 0x5DF4 0x62D4 \\\n   0x8DCB 0x9776 0x628A 0x8019 0x575D 0x9738 0x7F62 0x7238 \\\n   0x767D 0x67CF 0x767E 0x6446 0x4F70 0x8D25 0x62DC 0x7A17 \\\n   0x6591 0x73ED 0x642C 0x6273 0x822C 0x9881 0x677F 0x7248 \\\n   0x626E 0x62CC 0x4F34 0x74E3 0x534A 0x529E 0x7ECA 0x90A6 \\\n   0x5E2E 0x6886 0x699C 0x8180 0x7ED1 0x68D2 0x78C5 0x868C \\\n   0x9551 0x508D 0x8C24 0x82DE 0x80DE 0x5305 0x8912 0x5265 \\\n   0x8584 0x96F9 0x4FDD 0x5821 0x9971 0x5B9D 0x62B1 0x62A5 \\\n   0x66B4 0x8C79 0x9C8D 0x7206 0x676F 0x7891 0x60B2 0x5351 \\\n   0x5317 0x8F88 0x80CC 0x8D1D 0x94A1 0x500D 0x72C8 0x5907 \\\n   0x60EB 0x7119 0x88AB 0x5954 0x82EF 0x672C 0x7B28 0x5D29\n07 0x7EF7 0x752D 0x6CF5 0x8E66 0x8FF8 0x903C 0x9F3B 0x6BD4 \\\n   0x9119 0x7B14 0x5F7C 0x78A7 0x84D6 0x853D 0x6BD5 0x6BD9 \\\n   0x6BD6 0x5E01 0x5E87 0x75F9 0x95ED 0x655D 0x5F0A 0x5FC5 \\\n   0x8F9F 0x58C1 0x81C2 0x907F 0x965B 0x97AD 0x8FB9 0x7F16 \\\n   0x8D2C 0x6241 0x4FBF 0x53D8 0x535E 0x8FA8 0x8FA9 0x8FAB \\\n   0x904D 0x6807 0x5F6A 0x8198 0x8868 0x9CD6 0x618B 0x522B \\\n   0x762A 0x5F6C 0x658C 0x6FD2 0x6EE8 0x5BBE 0x6448 0x5175 \\\n   0x51B0 0x67C4 0x4E19 0x79C9 0x997C 0x70B3 0x75C5 0x5E76 \\\n   0x73BB 0x83E0 0x64AD 0x62E8 0x94B5 0x6CE2 0x535A 0x52C3 \\\n   0x640F 0x94C2 0x7B94 0x4F2F 0x5E1B 0x8236 0x8116 0x818A \\\n   0x6E24 0x6CCA 0x9A73 0x6355 0x535C 0x54FA 0x8865 0x57E0 \\\n   0x4E0D 0x5E03 0x6B65 0x7C3F 0x90E8 0x6016 0x64E6 0x731C \\\n   0x88C1 0x6750 0x624D 0x8D22 0x776C 0x8E29 0x91C7 0x5F69 \\\n   0x83DC 0x8521 0x9910 0x53C2 0x8695 0x6B8B 0x60ED 0x60E8 \\\n   0x707F 0x82CD 0x8231 0x4ED3 0x6CA7 0x85CF 0x64CD 0x7CD9 \\\n   0x69FD 0x66F9 0x8349 0x5395 0x7B56 0x4FA7 0x518C 0x6D4B \\\n   0x5C42 0x8E6D 0x63D2 0x53C9 0x832C 0x8336 0x67E5 0x78B4 \\\n   0x643D 0x5BDF 0x5C94 0x5DEE 0x8BE7 0x62C6 0x67F4 0x8C7A \\\n   0x6400 0x63BA 0x8749 0x998B 0x8C17 0x7F20 0x94F2 0x4EA7 \\\n   0x9610 0x98A4 0x660C 0x7316 0x573A 0x5C1D 0x5E38 0x957F \\\n   0x507F 0x80A0 0x5382 0x655E 0x7545 0x5531 0x5021 0x8D85 \\\n   0x6284 0x949E 0x671D 0x5632 0x6F6E 0x5DE2 0x5435 0x7092 \\\n   0x8F66 0x626F 0x64A4 0x63A3 0x5F7B 0x6F88 0x90F4 0x81E3 \\\n   0x8FB0 0x5C18 0x6668 0x5FF1 0x6C89 0x9648 0x8D81 0x886C \\\n   0x6491 0x79F0 0x57CE 0x6A59 0x6210 0x5448 0x4E58 0x7A0B \\\n   0x60E9 0x6F84 0x8BDA 0x627F 0x901E 0x9A8B 0x79E4 0x5403 \\\n   0x75F4 0x6301 0x5319 0x6C60 0x8FDF 0x5F1B 0x9A70 0x803B \\\n   0x9F7F 0x4F88 0x5C3A 0x8D64 0x7FC5 0x65A5 0x70BD 0x5145 \\\n   0x51B2 0x866B 0x5D07 0x5BA0 0x62BD 0x916C 0x7574 0x8E0C \\\n   0x7A20 0x6101 0x7B79 0x4EC7 0x7EF8 0x7785 0x4E11 0x81ED \\\n   0x521D 0x51FA 0x6A71 0x53A8 0x8E87 0x9504 0x96CF 0x6EC1 \\\n   0x9664 0x695A 0x7840 0x50A8 0x77D7 0x6410 0x89E6 0x5904\n08 0x63E3 0x5DDD 0x7A7F 0x693D 0x4F20 0x8239 0x5598 0x4E32 \\\n   0x75AE 0x7A97 0x5E62 0x5E8A 0x95EF 0x521B 0x5439 0x708A \\\n   0x6376 0x9524 0x5782 0x6625 0x693F 0x9187 0x5507 0x6DF3 \\\n   0x7EAF 0x8822 0x6233 0x7EF0 0x75B5 0x8328 0x78C1 0x96CC \\\n   0x8F9E 0x6148 0x74F7 0x8BCD 0x6B64 0x523A 0x8D50 0x6B21 \\\n   0x806A 0x8471 0x56F1 0x5306 0x4ECE 0x4E1B 0x51D1 0x7C97 \\\n   0x918B 0x7C07 0x4FC3 0x8E7F 0x7BE1 0x7A9C 0x6467 0x5D14 \\\n   0x50AC 0x8106 0x7601 0x7CB9 0x6DEC 0x7FE0 0x6751 0x5B58 \\\n   0x5BF8 0x78CB 0x64AE 0x6413 0x63AA 0x632B 0x9519 0x642D \\\n   0x8FBE 0x7B54 0x7629 0x6253 0x5927 0x5446 0x6B79 0x50A3 \\\n   0x6234 0x5E26 0x6B86 0x4EE3 0x8D37 0x888B 0x5F85 0x902E \\\n   0x6020 0x803D 0x62C5 0x4E39 0x5355 0x90F8 0x63B8 0x80C6 \\\n   0x65E6 0x6C2E 0x4F46 0x60EE 0x6DE1 0x8BDE 0x5F39 0x86CB \\\n   0x5F53 0x6321 0x515A 0x8361 0x6863 0x5200 0x6363 0x8E48 \\\n   0x5012 0x5C9B 0x7977 0x5BFC 0x5230 0x7A3B 0x60BC 0x9053 \\\n   0x76D7 0x5FB7 0x5F97 0x7684 0x8E6C 0x706F 0x767B 0x7B49 \\\n   0x77AA 0x51F3 0x9093 0x5824 0x4F4E 0x6EF4 0x8FEA 0x654C \\\n   0x7B1B 0x72C4 0x6DA4 0x7FDF 0x5AE1 0x62B5 0x5E95 0x5730 \\\n   0x8482 0x7B2C 0x5E1D 0x5F1F 0x9012 0x7F14 0x98A0 0x6382 \\\n   0x6EC7 0x7898 0x70B9 0x5178 0x975B 0x57AB 0x7535 0x4F43 \\\n   0x7538 0x5E97 0x60E6 0x5960 0x6DC0 0x6BBF 0x7889 0x53FC \\\n   0x96D5 0x51CB 0x5201 0x6389 0x540A 0x9493 0x8C03 0x8DCC \\\n   0x7239 0x789F 0x8776 0x8FED 0x8C0D 0x53E0 0x4E01 0x76EF \\\n   0x53EE 0x9489 0x9876 0x9F0E 0x952D 0x5B9A 0x8BA2 0x4E22 \\\n   0x4E1C 0x51AC 0x8463 0x61C2 0x52A8 0x680B 0x4F97 0x606B \\\n   0x51BB 0x6D1E 0x515C 0x6296 0x6597 0x9661 0x8C46 0x9017 \\\n   0x75D8 0x90FD 0x7763 0x6BD2 0x728A 0x72EC 0x8BFB 0x5835 \\\n   0x7779 0x8D4C 0x675C 0x9540 0x809A 0x5EA6 0x6E21 0x5992 \\\n   0x7AEF 0x77ED 0x953B 0x6BB5 0x65AD 0x7F0E 0x5806 0x5151 \\\n   0x961F 0x5BF9 0x58A9 0x5428 0x8E72 0x6566 0x987F 0x56E4 \\\n   0x949D 0x76FE 0x9041 0x6387 0x54C6 0x591A 0x593A 0x579B \\\n   0x8EB2 0x6735 0x8DFA 0x8235 0x5241 0x60F0 0x5815 0x86FE\n09 0x5CE8 0x9E45 0x4FC4 0x989D 0x8BB9 0x5A25 0x6076 0x5384 \\\n   0x627C 0x904F 0x9102 0x997F 0x6069 0x800C 0x513F 0x8033 \\\n   0x5C14 0x9975 0x6D31 0x4E8C 0x8D30 0x53D1 0x7F5A 0x7B4F \\\n   0x4F10 0x4E4F 0x9600 0x6CD5 0x73D0 0x85E9 0x5E06 0x756A \\\n   0x7FFB 0x6A0A 0x77FE 0x9492 0x7E41 0x51E1 0x70E6 0x53CD \\\n   0x8FD4 0x8303 0x8D29 0x72AF 0x996D 0x6CDB 0x574A 0x82B3 \\\n   0x65B9 0x80AA 0x623F 0x9632 0x59A8 0x4EFF 0x8BBF 0x7EBA \\\n   0x653E 0x83F2 0x975E 0x5561 0x98DE 0x80A5 0x532A 0x8BFD \\\n   0x5420 0x80BA 0x5E9F 0x6CB8 0x8D39 0x82AC 0x915A 0x5429 \\\n   0x6C1B 0x5206 0x7EB7 0x575F 0x711A 0x6C7E 0x7C89 0x594B \\\n   0x4EFD 0x5FFF 0x6124 0x7CAA 0x4E30 0x5C01 0x67AB 0x8702 \\\n   0x5CF0 0x950B 0x98CE 0x75AF 0x70FD 0x9022 0x51AF 0x7F1D \\\n   0x8BBD 0x5949 0x51E4 0x4F5B 0x5426 0x592B 0x6577 0x80A4 \\\n   0x5B75 0x6276 0x62C2 0x8F90 0x5E45 0x6C1F 0x7B26 0x4F0F \\\n   0x4FD8 0x670D 0x6D6E 0x6DAA 0x798F 0x88B1 0x5F17 0x752B \\\n   0x629A 0x8F85 0x4FEF 0x91DC 0x65A7 0x812F 0x8151 0x5E9C \\\n   0x8150 0x8D74 0x526F 0x8986 0x8D4B 0x590D 0x5085 0x4ED8 \\\n   0x961C 0x7236 0x8179 0x8D1F 0x5BCC 0x8BA3 0x9644 0x5987 \\\n   0x7F1A 0x5490 0x5676 0x560E 0x8BE5 0x6539 0x6982 0x9499 \\\n   0x76D6 0x6E89 0x5E72 0x7518 0x6746 0x67D1 0x7AFF 0x809D \\\n   0x8D76 0x611F 0x79C6 0x6562 0x8D63 0x5188 0x521A 0x94A2 \\\n   0x7F38 0x809B 0x7EB2 0x5C97 0x6E2F 0x6760 0x7BD9 0x768B \\\n   0x9AD8 0x818F 0x7F94 0x7CD5 0x641E 0x9550 0x7A3F 0x544A \\\n   0x54E5 0x6B4C 0x6401 0x6208 0x9E3D 0x80F3 0x7599 0x5272 \\\n   0x9769 0x845B 0x683C 0x86E4 0x9601 0x9694 0x94EC 0x4E2A \\\n   0x5404 0x7ED9 0x6839 0x8DDF 0x8015 0x66F4 0x5E9A 0x7FB9 \\\n   0x57C2 0x803F 0x6897 0x5DE5 0x653B 0x529F 0x606D 0x9F9A \\\n   0x4F9B 0x8EAC 0x516C 0x5BAB 0x5F13 0x5DE9 0x6C5E 0x62F1 \\\n   0x8D21 0x5171 0x94A9 0x52FE 0x6C9F 0x82DF 0x72D7 0x57A2 \\\n   0x6784 0x8D2D 0x591F 0x8F9C 0x83C7 0x5495 0x7B8D 0x4F30 \\\n   0x6CBD 0x5B64 0x59D1 0x9F13 0x53E4 0x86CA 0x9AA8 0x8C37 \\\n   0x80A1 0x6545 0x987E 0x56FA 0x96C7 0x522E 0x74DC 0x5250\nx1 0x0010_0x0030 0x1010_0x1030 0xe000 \\\n   0xA0: 0x1000 0x2000\n\n# eof\n"
  },
  {
    "path": "tests/genhashcheck.py",
    "content": "#!/usr/bin/python\n# This file is part of the dvisvgm package and published under the\n# terms of the GNU General Public License version 3 or later.\n# See file COPYING for further details.\n# Copyright (C) 2016-2025 Martin Gieseking <martin.gieseking@uos.de>\n\nimport re\nimport sys\n\ndef extract_hashes (fname):\n    with open(fname) as f:\n        lines = f.readlines()\n        found = False\n        for line in lines:\n            if ' hash2unicode {{\\n' in line:\n                found = True\n            elif found:\n                match = re.match(r'\\s*{(0x[0-9a-f]{8}),\\s*0x[0-9a-f]{4}}, //\\s*(.+)\\s*$', line)\n                if match:\n                    hashval = match.group(1)\n                    name = match.group(2)\n                    print('\\t{}{}, \"{}\"{},'.format('{', hashval, name, '}'))\n                else:\n                    found = False\n\nif (len(sys.argv) < 2):\n    sys.exit(1)\n\nprint(\"\"\"\\\n#include <xxhash.h>\n#include <cstdint>\n#include <iterator>\n#include <iomanip>\n#include <iostream>\n#include <string>\n\nusing namespace std;\n\nstruct NameHash {\n    uint32_t hash;\n    string name;\n} nameHashes[] = {\\\n\"\"\")\nextract_hashes(sys.argv[1])\nprint(r\"\"\"};\n\nint main () {\n    if (distance(begin(nameHashes), end(nameHashes)) == 0) {\n        cout << \"hash table is empty\\n\";\n        return 1;\n    }\n    uint32_t prev_hash=0;\n    for (NameHash &nameHash : nameHashes) {\n        const string &name = nameHash.name;\n        const uint32_t hash = nameHash.hash;\n        if (XXH32(&name[0], name.length(), 0) != hash) {\n            cout << \"hash of '\" << name << \"' doesn't match\\n\";\n            return 1;\n        }\n        if (hash < prev_hash) {\n            cout << \"misplaced hash value \" << hex << setw(8) << setfill('0') << hash << \"\\n\";\n            return 1;\n        }\n        if (hash == prev_hash) {\n            cout << \"colliding hash values \" << hex << setw(8) << setfill('0') << hash << \"\\n\";\n            return 1;\n        }\n        prev_hash = hash;\n    }\n    cout << \"hash check passed\\n\";\n    return 0;\n}\n\"\"\")\n"
  },
  {
    "path": "tests/gtest/LICENSE",
    "content": "Copyright 2008, Google Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest-assertion-result.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// The Google C++ Testing and Mocking Framework (Google Test)\n//\n// This file implements the AssertionResult type.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_ASSERTION_RESULT_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_ASSERTION_RESULT_H_\n\n#include <memory>\n#include <ostream>\n#include <string>\n#include <type_traits>\n\n#include \"gtest/gtest-message.h\"\n#include \"gtest/internal/gtest-port.h\"\n\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(4251                                   \\\n/* class A needs to have dll-interface to be used by clients of class B */)\n\nnamespace testing {\n\n// A class for indicating whether an assertion was successful.  When\n// the assertion wasn't successful, the AssertionResult object\n// remembers a non-empty message that describes how it failed.\n//\n// To create an instance of this class, use one of the factory functions\n// (AssertionSuccess() and AssertionFailure()).\n//\n// This class is useful for two purposes:\n//   1. Defining predicate functions to be used with Boolean test assertions\n//      EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts\n//   2. Defining predicate-format functions to be\n//      used with predicate assertions (ASSERT_PRED_FORMAT*, etc).\n//\n// For example, if you define IsEven predicate:\n//\n//   testing::AssertionResult IsEven(int n) {\n//     if ((n % 2) == 0)\n//       return testing::AssertionSuccess();\n//     else\n//       return testing::AssertionFailure() << n << \" is odd\";\n//   }\n//\n// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5)))\n// will print the message\n//\n//   Value of: IsEven(Fib(5))\n//     Actual: false (5 is odd)\n//   Expected: true\n//\n// instead of a more opaque\n//\n//   Value of: IsEven(Fib(5))\n//     Actual: false\n//   Expected: true\n//\n// in case IsEven is a simple Boolean predicate.\n//\n// If you expect your predicate to be reused and want to support informative\n// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up\n// about half as often as positive ones in our tests), supply messages for\n// both success and failure cases:\n//\n//   testing::AssertionResult IsEven(int n) {\n//     if ((n % 2) == 0)\n//       return testing::AssertionSuccess() << n << \" is even\";\n//     else\n//       return testing::AssertionFailure() << n << \" is odd\";\n//   }\n//\n// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print\n//\n//   Value of: IsEven(Fib(6))\n//     Actual: true (8 is even)\n//   Expected: false\n//\n// NB: Predicates that support negative Boolean assertions have reduced\n// performance in positive ones so be careful not to use them in tests\n// that have lots (tens of thousands) of positive Boolean assertions.\n//\n// To use this class with EXPECT_PRED_FORMAT assertions such as:\n//\n//   // Verifies that Foo() returns an even number.\n//   EXPECT_PRED_FORMAT1(IsEven, Foo());\n//\n// you need to define:\n//\n//   testing::AssertionResult IsEven(const char* expr, int n) {\n//     if ((n % 2) == 0)\n//       return testing::AssertionSuccess();\n//     else\n//       return testing::AssertionFailure()\n//         << \"Expected: \" << expr << \" is even\\n  Actual: it's \" << n;\n//   }\n//\n// If Foo() returns 5, you will see the following message:\n//\n//   Expected: Foo() is even\n//     Actual: it's 5\n//\nclass GTEST_API_ AssertionResult {\n public:\n  // Copy constructor.\n  // Used in EXPECT_TRUE/FALSE(assertion_result).\n  AssertionResult(const AssertionResult& other);\n\n// C4800 is a level 3 warning in Visual Studio 2015 and earlier.\n// This warning is not emitted in Visual Studio 2017.\n// This warning is off by default starting in Visual Studio 2019 but can be\n// enabled with command-line options.\n#if defined(_MSC_VER) && (_MSC_VER < 1910 || _MSC_VER >= 1920)\n  GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 /* forcing value to bool */)\n#endif\n\n  // Used in the EXPECT_TRUE/FALSE(bool_expression).\n  //\n  // T must be contextually convertible to bool.\n  //\n  // The second parameter prevents this overload from being considered if\n  // the argument is implicitly convertible to AssertionResult. In that case\n  // we want AssertionResult's copy constructor to be used.\n  template <typename T>\n  explicit AssertionResult(\n      const T& success,\n      typename std::enable_if<\n          !std::is_convertible<T, AssertionResult>::value>::type*\n      /*enabler*/\n      = nullptr)\n      : success_(success) {}\n\n#if defined(_MSC_VER) && (_MSC_VER < 1910 || _MSC_VER >= 1920)\n  GTEST_DISABLE_MSC_WARNINGS_POP_()\n#endif\n\n  // Assignment operator.\n  AssertionResult& operator=(AssertionResult other) {\n    swap(other);\n    return *this;\n  }\n\n  // Returns true if and only if the assertion succeeded.\n  operator bool() const { return success_; }  // NOLINT\n\n  // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE.\n  AssertionResult operator!() const;\n\n  // Returns the text streamed into this AssertionResult. Test assertions\n  // use it when they fail (i.e., the predicate's outcome doesn't match the\n  // assertion's expectation). When nothing has been streamed into the\n  // object, returns an empty string.\n  const char* message() const {\n    return message_.get() != nullptr ? message_->c_str() : \"\";\n  }\n  // Deprecated; please use message() instead.\n  const char* failure_message() const { return message(); }\n\n  // Streams a custom failure message into this object.\n  template <typename T>\n  AssertionResult& operator<<(const T& value) {\n    AppendMessage(Message() << value);\n    return *this;\n  }\n\n  // Allows streaming basic output manipulators such as endl or flush into\n  // this object.\n  AssertionResult& operator<<(\n      ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) {\n    AppendMessage(Message() << basic_manipulator);\n    return *this;\n  }\n\n private:\n  // Appends the contents of message to message_.\n  void AppendMessage(const Message& a_message) {\n    if (message_.get() == nullptr) message_.reset(new ::std::string);\n    message_->append(a_message.GetString().c_str());\n  }\n\n  // Swap the contents of this AssertionResult with other.\n  void swap(AssertionResult& other);\n\n  // Stores result of the assertion predicate.\n  bool success_;\n  // Stores the message describing the condition in case the expectation\n  // construct is not satisfied with the predicate's outcome.\n  // Referenced via a pointer to avoid taking too much stack frame space\n  // with test assertions.\n  std::unique_ptr< ::std::string> message_;\n};\n\n// Makes a successful assertion result.\nGTEST_API_ AssertionResult AssertionSuccess();\n\n// Makes a failed assertion result.\nGTEST_API_ AssertionResult AssertionFailure();\n\n// Makes a failed assertion result with the given failure message.\n// Deprecated; use AssertionFailure() << msg.\nGTEST_API_ AssertionResult AssertionFailure(const Message& msg);\n\n}  // namespace testing\n\nGTEST_DISABLE_MSC_WARNINGS_POP_()  // 4251\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_ASSERTION_RESULT_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest-death-test.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// The Google C++ Testing and Mocking Framework (Google Test)\n//\n// This header file defines the public API for death tests.  It is\n// #included by gtest.h so a user doesn't need to include this\n// directly.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_\n\n#include \"gtest/internal/gtest-death-test-internal.h\"\n\n// This flag controls the style of death tests.  Valid values are \"threadsafe\",\n// meaning that the death test child process will re-execute the test binary\n// from the start, running only a single death test, or \"fast\",\n// meaning that the child process will execute the test logic immediately\n// after forking.\nGTEST_DECLARE_string_(death_test_style);\n\nnamespace testing {\n\n#if GTEST_HAS_DEATH_TEST\n\nnamespace internal {\n\n// Returns a Boolean value indicating whether the caller is currently\n// executing in the context of the death test child process.  Tools such as\n// Valgrind heap checkers may need this to modify their behavior in death\n// tests.  IMPORTANT: This is an internal utility.  Using it may break the\n// implementation of death tests.  User code MUST NOT use it.\nGTEST_API_ bool InDeathTestChild();\n\n}  // namespace internal\n\n// The following macros are useful for writing death tests.\n\n// Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is\n// executed:\n//\n//   1. It generates a warning if there is more than one active\n//   thread.  This is because it's safe to fork() or clone() only\n//   when there is a single thread.\n//\n//   2. The parent process clone()s a sub-process and runs the death\n//   test in it; the sub-process exits with code 0 at the end of the\n//   death test, if it hasn't exited already.\n//\n//   3. The parent process waits for the sub-process to terminate.\n//\n//   4. The parent process checks the exit code and error message of\n//   the sub-process.\n//\n// Examples:\n//\n//   ASSERT_DEATH(server.SendMessage(56, \"Hello\"), \"Invalid port number\");\n//   for (int i = 0; i < 5; i++) {\n//     EXPECT_DEATH(server.ProcessRequest(i),\n//                  \"Invalid request .* in ProcessRequest()\")\n//                  << \"Failed to die on request \" << i;\n//   }\n//\n//   ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), \"Exiting\");\n//\n//   bool KilledBySIGHUP(int exit_code) {\n//     return WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGHUP;\n//   }\n//\n//   ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, \"Hanging up!\");\n//\n// The final parameter to each of these macros is a matcher applied to any data\n// the sub-process wrote to stderr.  For compatibility with existing tests, a\n// bare string is interpreted as a regular expression matcher.\n//\n// On the regular expressions used in death tests:\n//\n//   On POSIX-compliant systems (*nix), we use the <regex.h> library,\n//   which uses the POSIX extended regex syntax.\n//\n//   On other platforms (e.g. Windows or Mac), we only support a simple regex\n//   syntax implemented as part of Google Test.  This limited\n//   implementation should be enough most of the time when writing\n//   death tests; though it lacks many features you can find in PCRE\n//   or POSIX extended regex syntax.  For example, we don't support\n//   union (\"x|y\"), grouping (\"(xy)\"), brackets (\"[xy]\"), and\n//   repetition count (\"x{5,7}\"), among others.\n//\n//   Below is the syntax that we do support.  We chose it to be a\n//   subset of both PCRE and POSIX extended regex, so it's easy to\n//   learn wherever you come from.  In the following: 'A' denotes a\n//   literal character, period (.), or a single \\\\ escape sequence;\n//   'x' and 'y' denote regular expressions; 'm' and 'n' are for\n//   natural numbers.\n//\n//     c     matches any literal character c\n//     \\\\d   matches any decimal digit\n//     \\\\D   matches any character that's not a decimal digit\n//     \\\\f   matches \\f\n//     \\\\n   matches \\n\n//     \\\\r   matches \\r\n//     \\\\s   matches any ASCII whitespace, including \\n\n//     \\\\S   matches any character that's not a whitespace\n//     \\\\t   matches \\t\n//     \\\\v   matches \\v\n//     \\\\w   matches any letter, _, or decimal digit\n//     \\\\W   matches any character that \\\\w doesn't match\n//     \\\\c   matches any literal character c, which must be a punctuation\n//     .     matches any single character except \\n\n//     A?    matches 0 or 1 occurrences of A\n//     A*    matches 0 or many occurrences of A\n//     A+    matches 1 or many occurrences of A\n//     ^     matches the beginning of a string (not that of each line)\n//     $     matches the end of a string (not that of each line)\n//     xy    matches x followed by y\n//\n//   If you accidentally use PCRE or POSIX extended regex features\n//   not implemented by us, you will get a run-time failure.  In that\n//   case, please try to rewrite your regular expression within the\n//   above syntax.\n//\n//   This implementation is *not* meant to be as highly tuned or robust\n//   as a compiled regex library, but should perform well enough for a\n//   death test, which already incurs significant overhead by launching\n//   a child process.\n//\n// Known caveats:\n//\n//   A \"threadsafe\" style death test obtains the path to the test\n//   program from argv[0] and re-executes it in the sub-process.  For\n//   simplicity, the current implementation doesn't search the PATH\n//   when launching the sub-process.  This means that the user must\n//   invoke the test program via a path that contains at least one\n//   path separator (e.g. path/to/foo_test and\n//   /absolute/path/to/bar_test are fine, but foo_test is not).  This\n//   is rarely a problem as people usually don't put the test binary\n//   directory in PATH.\n//\n\n// Asserts that a given `statement` causes the program to exit, with an\n// integer exit status that satisfies `predicate`, and emitting error output\n// that matches `matcher`.\n#define ASSERT_EXIT(statement, predicate, matcher) \\\n  GTEST_DEATH_TEST_(statement, predicate, matcher, GTEST_FATAL_FAILURE_)\n\n// Like `ASSERT_EXIT`, but continues on to successive tests in the\n// test suite, if any:\n#define EXPECT_EXIT(statement, predicate, matcher) \\\n  GTEST_DEATH_TEST_(statement, predicate, matcher, GTEST_NONFATAL_FAILURE_)\n\n// Asserts that a given `statement` causes the program to exit, either by\n// explicitly exiting with a nonzero exit code or being killed by a\n// signal, and emitting error output that matches `matcher`.\n#define ASSERT_DEATH(statement, matcher) \\\n  ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, matcher)\n\n// Like `ASSERT_DEATH`, but continues on to successive tests in the\n// test suite, if any:\n#define EXPECT_DEATH(statement, matcher) \\\n  EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, matcher)\n\n// Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*:\n\n// Tests that an exit code describes a normal exit with a given exit code.\nclass GTEST_API_ ExitedWithCode {\n public:\n  explicit ExitedWithCode(int exit_code);\n  ExitedWithCode(const ExitedWithCode&) = default;\n  void operator=(const ExitedWithCode& other) = delete;\n  bool operator()(int exit_status) const;\n\n private:\n  const int exit_code_;\n};\n\n#if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA\n// Tests that an exit code describes an exit due to termination by a\n// given signal.\nclass GTEST_API_ KilledBySignal {\n public:\n  explicit KilledBySignal(int signum);\n  bool operator()(int exit_status) const;\n\n private:\n  const int signum_;\n};\n#endif  // !GTEST_OS_WINDOWS\n\n// EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode.\n// The death testing framework causes this to have interesting semantics,\n// since the sideeffects of the call are only visible in opt mode, and not\n// in debug mode.\n//\n// In practice, this can be used to test functions that utilize the\n// LOG(DFATAL) macro using the following style:\n//\n// int DieInDebugOr12(int* sideeffect) {\n//   if (sideeffect) {\n//     *sideeffect = 12;\n//   }\n//   LOG(DFATAL) << \"death\";\n//   return 12;\n// }\n//\n// TEST(TestSuite, TestDieOr12WorksInDgbAndOpt) {\n//   int sideeffect = 0;\n//   // Only asserts in dbg.\n//   EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), \"death\");\n//\n// #ifdef NDEBUG\n//   // opt-mode has sideeffect visible.\n//   EXPECT_EQ(12, sideeffect);\n// #else\n//   // dbg-mode no visible sideeffect.\n//   EXPECT_EQ(0, sideeffect);\n// #endif\n// }\n//\n// This will assert that DieInDebugReturn12InOpt() crashes in debug\n// mode, usually due to a DCHECK or LOG(DFATAL), but returns the\n// appropriate fallback value (12 in this case) in opt mode. If you\n// need to test that a function has appropriate side-effects in opt\n// mode, include assertions against the side-effects.  A general\n// pattern for this is:\n//\n// EXPECT_DEBUG_DEATH({\n//   // Side-effects here will have an effect after this statement in\n//   // opt mode, but none in debug mode.\n//   EXPECT_EQ(12, DieInDebugOr12(&sideeffect));\n// }, \"death\");\n//\n#ifdef NDEBUG\n\n#define EXPECT_DEBUG_DEATH(statement, regex) \\\n  GTEST_EXECUTE_STATEMENT_(statement, regex)\n\n#define ASSERT_DEBUG_DEATH(statement, regex) \\\n  GTEST_EXECUTE_STATEMENT_(statement, regex)\n\n#else\n\n#define EXPECT_DEBUG_DEATH(statement, regex) EXPECT_DEATH(statement, regex)\n\n#define ASSERT_DEBUG_DEATH(statement, regex) ASSERT_DEATH(statement, regex)\n\n#endif  // NDEBUG for EXPECT_DEBUG_DEATH\n#endif  // GTEST_HAS_DEATH_TEST\n\n// This macro is used for implementing macros such as\n// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where\n// death tests are not supported. Those macros must compile on such systems\n// if and only if EXPECT_DEATH and ASSERT_DEATH compile with the same parameters\n// on systems that support death tests. This allows one to write such a macro on\n// a system that does not support death tests and be sure that it will compile\n// on a death-test supporting system. It is exposed publicly so that systems\n// that have death-tests with stricter requirements than GTEST_HAS_DEATH_TEST\n// can write their own equivalent of EXPECT_DEATH_IF_SUPPORTED and\n// ASSERT_DEATH_IF_SUPPORTED.\n//\n// Parameters:\n//   statement -  A statement that a macro such as EXPECT_DEATH would test\n//                for program termination. This macro has to make sure this\n//                statement is compiled but not executed, to ensure that\n//                EXPECT_DEATH_IF_SUPPORTED compiles with a certain\n//                parameter if and only if EXPECT_DEATH compiles with it.\n//   regex     -  A regex that a macro such as EXPECT_DEATH would use to test\n//                the output of statement.  This parameter has to be\n//                compiled but not evaluated by this macro, to ensure that\n//                this macro only accepts expressions that a macro such as\n//                EXPECT_DEATH would accept.\n//   terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED\n//                and a return statement for ASSERT_DEATH_IF_SUPPORTED.\n//                This ensures that ASSERT_DEATH_IF_SUPPORTED will not\n//                compile inside functions where ASSERT_DEATH doesn't\n//                compile.\n//\n//  The branch that has an always false condition is used to ensure that\n//  statement and regex are compiled (and thus syntactically correct) but\n//  never executed. The unreachable code macro protects the terminator\n//  statement from generating an 'unreachable code' warning in case\n//  statement unconditionally returns or throws. The Message constructor at\n//  the end allows the syntax of streaming additional messages into the\n//  macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH.\n#define GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, terminator)             \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_                                                \\\n  if (::testing::internal::AlwaysTrue()) {                                     \\\n    GTEST_LOG_(WARNING) << \"Death tests are not supported on this platform.\\n\" \\\n                        << \"Statement '\" #statement \"' cannot be verified.\";   \\\n  } else if (::testing::internal::AlwaysFalse()) {                             \\\n    ::testing::internal::RE::PartialMatch(\".*\", (regex));                      \\\n    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement);                 \\\n    terminator;                                                                \\\n  } else                                                                       \\\n    ::testing::Message()\n\n// EXPECT_DEATH_IF_SUPPORTED(statement, regex) and\n// ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if\n// death tests are supported; otherwise they just issue a warning.  This is\n// useful when you are combining death test assertions with normal test\n// assertions in one test.\n#if GTEST_HAS_DEATH_TEST\n#define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \\\n  EXPECT_DEATH(statement, regex)\n#define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \\\n  ASSERT_DEATH(statement, regex)\n#else\n#define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \\\n  GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, )\n#define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \\\n  GTEST_UNSUPPORTED_DEATH_TEST(statement, regex, return)\n#endif\n\n}  // namespace testing\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest-matchers.h",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// The Google C++ Testing and Mocking Framework (Google Test)\n//\n// This file implements just enough of the matcher interface to allow\n// EXPECT_DEATH and friends to accept a matcher argument.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_MATCHERS_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_MATCHERS_H_\n\n#include <atomic>\n#include <memory>\n#include <ostream>\n#include <string>\n#include <type_traits>\n\n#include \"gtest/gtest-printers.h\"\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-port.h\"\n\n// MSVC warning C5046 is new as of VS2017 version 15.8.\n#if defined(_MSC_VER) && _MSC_VER >= 1915\n#define GTEST_MAYBE_5046_ 5046\n#else\n#define GTEST_MAYBE_5046_\n#endif\n\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(\n    4251 GTEST_MAYBE_5046_ /* class A needs to have dll-interface to be used by\n                              clients of class B */\n    /* Symbol involving type with internal linkage not defined */)\n\nnamespace testing {\n\n// To implement a matcher Foo for type T, define:\n//   1. a class FooMatcherMatcher that implements the matcher interface:\n//     using is_gtest_matcher = void;\n//     bool MatchAndExplain(const T&, std::ostream*);\n//       (MatchResultListener* can also be used instead of std::ostream*)\n//     void DescribeTo(std::ostream*);\n//     void DescribeNegationTo(std::ostream*);\n//\n//   2. a factory function that creates a Matcher<T> object from a\n//      FooMatcherMatcher.\n\nclass MatchResultListener {\n public:\n  // Creates a listener object with the given underlying ostream.  The\n  // listener does not own the ostream, and does not dereference it\n  // in the constructor or destructor.\n  explicit MatchResultListener(::std::ostream* os) : stream_(os) {}\n  virtual ~MatchResultListener() = 0;  // Makes this class abstract.\n\n  // Streams x to the underlying ostream; does nothing if the ostream\n  // is NULL.\n  template <typename T>\n  MatchResultListener& operator<<(const T& x) {\n    if (stream_ != nullptr) *stream_ << x;\n    return *this;\n  }\n\n  // Returns the underlying ostream.\n  ::std::ostream* stream() { return stream_; }\n\n  // Returns true if and only if the listener is interested in an explanation\n  // of the match result.  A matcher's MatchAndExplain() method can use\n  // this information to avoid generating the explanation when no one\n  // intends to hear it.\n  bool IsInterested() const { return stream_ != nullptr; }\n\n private:\n  ::std::ostream* const stream_;\n\n  MatchResultListener(const MatchResultListener&) = delete;\n  MatchResultListener& operator=(const MatchResultListener&) = delete;\n};\n\ninline MatchResultListener::~MatchResultListener() {}\n\n// An instance of a subclass of this knows how to describe itself as a\n// matcher.\nclass GTEST_API_ MatcherDescriberInterface {\n public:\n  virtual ~MatcherDescriberInterface() {}\n\n  // Describes this matcher to an ostream.  The function should print\n  // a verb phrase that describes the property a value matching this\n  // matcher should have.  The subject of the verb phrase is the value\n  // being matched.  For example, the DescribeTo() method of the Gt(7)\n  // matcher prints \"is greater than 7\".\n  virtual void DescribeTo(::std::ostream* os) const = 0;\n\n  // Describes the negation of this matcher to an ostream.  For\n  // example, if the description of this matcher is \"is greater than\n  // 7\", the negated description could be \"is not greater than 7\".\n  // You are not required to override this when implementing\n  // MatcherInterface, but it is highly advised so that your matcher\n  // can produce good error messages.\n  virtual void DescribeNegationTo(::std::ostream* os) const {\n    *os << \"not (\";\n    DescribeTo(os);\n    *os << \")\";\n  }\n};\n\n// The implementation of a matcher.\ntemplate <typename T>\nclass MatcherInterface : public MatcherDescriberInterface {\n public:\n  // Returns true if and only if the matcher matches x; also explains the\n  // match result to 'listener' if necessary (see the next paragraph), in\n  // the form of a non-restrictive relative clause (\"which ...\",\n  // \"whose ...\", etc) that describes x.  For example, the\n  // MatchAndExplain() method of the Pointee(...) matcher should\n  // generate an explanation like \"which points to ...\".\n  //\n  // Implementations of MatchAndExplain() should add an explanation of\n  // the match result *if and only if* they can provide additional\n  // information that's not already present (or not obvious) in the\n  // print-out of x and the matcher's description.  Whether the match\n  // succeeds is not a factor in deciding whether an explanation is\n  // needed, as sometimes the caller needs to print a failure message\n  // when the match succeeds (e.g. when the matcher is used inside\n  // Not()).\n  //\n  // For example, a \"has at least 10 elements\" matcher should explain\n  // what the actual element count is, regardless of the match result,\n  // as it is useful information to the reader; on the other hand, an\n  // \"is empty\" matcher probably only needs to explain what the actual\n  // size is when the match fails, as it's redundant to say that the\n  // size is 0 when the value is already known to be empty.\n  //\n  // You should override this method when defining a new matcher.\n  //\n  // It's the responsibility of the caller (Google Test) to guarantee\n  // that 'listener' is not NULL.  This helps to simplify a matcher's\n  // implementation when it doesn't care about the performance, as it\n  // can talk to 'listener' without checking its validity first.\n  // However, in order to implement dummy listeners efficiently,\n  // listener->stream() may be NULL.\n  virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0;\n\n  // Inherits these methods from MatcherDescriberInterface:\n  //   virtual void DescribeTo(::std::ostream* os) const = 0;\n  //   virtual void DescribeNegationTo(::std::ostream* os) const;\n};\n\nnamespace internal {\n\nstruct AnyEq {\n  template <typename A, typename B>\n  bool operator()(const A& a, const B& b) const {\n    return a == b;\n  }\n};\nstruct AnyNe {\n  template <typename A, typename B>\n  bool operator()(const A& a, const B& b) const {\n    return a != b;\n  }\n};\nstruct AnyLt {\n  template <typename A, typename B>\n  bool operator()(const A& a, const B& b) const {\n    return a < b;\n  }\n};\nstruct AnyGt {\n  template <typename A, typename B>\n  bool operator()(const A& a, const B& b) const {\n    return a > b;\n  }\n};\nstruct AnyLe {\n  template <typename A, typename B>\n  bool operator()(const A& a, const B& b) const {\n    return a <= b;\n  }\n};\nstruct AnyGe {\n  template <typename A, typename B>\n  bool operator()(const A& a, const B& b) const {\n    return a >= b;\n  }\n};\n\n// A match result listener that ignores the explanation.\nclass DummyMatchResultListener : public MatchResultListener {\n public:\n  DummyMatchResultListener() : MatchResultListener(nullptr) {}\n\n private:\n  DummyMatchResultListener(const DummyMatchResultListener&) = delete;\n  DummyMatchResultListener& operator=(const DummyMatchResultListener&) = delete;\n};\n\n// A match result listener that forwards the explanation to a given\n// ostream.  The difference between this and MatchResultListener is\n// that the former is concrete.\nclass StreamMatchResultListener : public MatchResultListener {\n public:\n  explicit StreamMatchResultListener(::std::ostream* os)\n      : MatchResultListener(os) {}\n\n private:\n  StreamMatchResultListener(const StreamMatchResultListener&) = delete;\n  StreamMatchResultListener& operator=(const StreamMatchResultListener&) =\n      delete;\n};\n\nstruct SharedPayloadBase {\n  std::atomic<int> ref{1};\n  void Ref() { ref.fetch_add(1, std::memory_order_relaxed); }\n  bool Unref() { return ref.fetch_sub(1, std::memory_order_acq_rel) == 1; }\n};\n\ntemplate <typename T>\nstruct SharedPayload : SharedPayloadBase {\n  explicit SharedPayload(const T& v) : value(v) {}\n  explicit SharedPayload(T&& v) : value(std::move(v)) {}\n\n  static void Destroy(SharedPayloadBase* shared) {\n    delete static_cast<SharedPayload*>(shared);\n  }\n\n  T value;\n};\n\n// An internal class for implementing Matcher<T>, which will derive\n// from it.  We put functionalities common to all Matcher<T>\n// specializations here to avoid code duplication.\ntemplate <typename T>\nclass MatcherBase : private MatcherDescriberInterface {\n public:\n  // Returns true if and only if the matcher matches x; also explains the\n  // match result to 'listener'.\n  bool MatchAndExplain(const T& x, MatchResultListener* listener) const {\n    GTEST_CHECK_(vtable_ != nullptr);\n    return vtable_->match_and_explain(*this, x, listener);\n  }\n\n  // Returns true if and only if this matcher matches x.\n  bool Matches(const T& x) const {\n    DummyMatchResultListener dummy;\n    return MatchAndExplain(x, &dummy);\n  }\n\n  // Describes this matcher to an ostream.\n  void DescribeTo(::std::ostream* os) const final {\n    GTEST_CHECK_(vtable_ != nullptr);\n    vtable_->describe(*this, os, false);\n  }\n\n  // Describes the negation of this matcher to an ostream.\n  void DescribeNegationTo(::std::ostream* os) const final {\n    GTEST_CHECK_(vtable_ != nullptr);\n    vtable_->describe(*this, os, true);\n  }\n\n  // Explains why x matches, or doesn't match, the matcher.\n  void ExplainMatchResultTo(const T& x, ::std::ostream* os) const {\n    StreamMatchResultListener listener(os);\n    MatchAndExplain(x, &listener);\n  }\n\n  // Returns the describer for this matcher object; retains ownership\n  // of the describer, which is only guaranteed to be alive when\n  // this matcher object is alive.\n  const MatcherDescriberInterface* GetDescriber() const {\n    if (vtable_ == nullptr) return nullptr;\n    return vtable_->get_describer(*this);\n  }\n\n protected:\n  MatcherBase() : vtable_(nullptr), buffer_() {}\n\n  // Constructs a matcher from its implementation.\n  template <typename U>\n  explicit MatcherBase(const MatcherInterface<U>* impl)\n      : vtable_(nullptr), buffer_() {\n    Init(impl);\n  }\n\n  template <typename M, typename = typename std::remove_reference<\n                            M>::type::is_gtest_matcher>\n  MatcherBase(M&& m) : vtable_(nullptr), buffer_() {  // NOLINT\n    Init(std::forward<M>(m));\n  }\n\n  MatcherBase(const MatcherBase& other)\n      : vtable_(other.vtable_), buffer_(other.buffer_) {\n    if (IsShared()) buffer_.shared->Ref();\n  }\n\n  MatcherBase& operator=(const MatcherBase& other) {\n    if (this == &other) return *this;\n    Destroy();\n    vtable_ = other.vtable_;\n    buffer_ = other.buffer_;\n    if (IsShared()) buffer_.shared->Ref();\n    return *this;\n  }\n\n  MatcherBase(MatcherBase&& other)\n      : vtable_(other.vtable_), buffer_(other.buffer_) {\n    other.vtable_ = nullptr;\n  }\n\n  MatcherBase& operator=(MatcherBase&& other) {\n    if (this == &other) return *this;\n    Destroy();\n    vtable_ = other.vtable_;\n    buffer_ = other.buffer_;\n    other.vtable_ = nullptr;\n    return *this;\n  }\n\n  ~MatcherBase() override { Destroy(); }\n\n private:\n  struct VTable {\n    bool (*match_and_explain)(const MatcherBase&, const T&,\n                              MatchResultListener*);\n    void (*describe)(const MatcherBase&, std::ostream*, bool negation);\n    // Returns the captured object if it implements the interface, otherwise\n    // returns the MatcherBase itself.\n    const MatcherDescriberInterface* (*get_describer)(const MatcherBase&);\n    // Called on shared instances when the reference count reaches 0.\n    void (*shared_destroy)(SharedPayloadBase*);\n  };\n\n  bool IsShared() const {\n    return vtable_ != nullptr && vtable_->shared_destroy != nullptr;\n  }\n\n  // If the implementation uses a listener, call that.\n  template <typename P>\n  static auto MatchAndExplainImpl(const MatcherBase& m, const T& value,\n                                  MatchResultListener* listener)\n      -> decltype(P::Get(m).MatchAndExplain(value, listener->stream())) {\n    return P::Get(m).MatchAndExplain(value, listener->stream());\n  }\n\n  template <typename P>\n  static auto MatchAndExplainImpl(const MatcherBase& m, const T& value,\n                                  MatchResultListener* listener)\n      -> decltype(P::Get(m).MatchAndExplain(value, listener)) {\n    return P::Get(m).MatchAndExplain(value, listener);\n  }\n\n  template <typename P>\n  static void DescribeImpl(const MatcherBase& m, std::ostream* os,\n                           bool negation) {\n    if (negation) {\n      P::Get(m).DescribeNegationTo(os);\n    } else {\n      P::Get(m).DescribeTo(os);\n    }\n  }\n\n  template <typename P>\n  static const MatcherDescriberInterface* GetDescriberImpl(\n      const MatcherBase& m) {\n    // If the impl is a MatcherDescriberInterface, then return it.\n    // Otherwise use MatcherBase itself.\n    // This allows us to implement the GetDescriber() function without support\n    // from the impl, but some users really want to get their impl back when\n    // they call GetDescriber().\n    // We use std::get on a tuple as a workaround of not having `if constexpr`.\n    return std::get<(\n        std::is_convertible<decltype(&P::Get(m)),\n                            const MatcherDescriberInterface*>::value\n            ? 1\n            : 0)>(std::make_tuple(&m, &P::Get(m)));\n  }\n\n  template <typename P>\n  const VTable* GetVTable() {\n    static constexpr VTable kVTable = {&MatchAndExplainImpl<P>,\n                                       &DescribeImpl<P>, &GetDescriberImpl<P>,\n                                       P::shared_destroy};\n    return &kVTable;\n  }\n\n  union Buffer {\n    // Add some types to give Buffer some common alignment/size use cases.\n    void* ptr;\n    double d;\n    int64_t i;\n    // And add one for the out-of-line cases.\n    SharedPayloadBase* shared;\n  };\n\n  void Destroy() {\n    if (IsShared() && buffer_.shared->Unref()) {\n      vtable_->shared_destroy(buffer_.shared);\n    }\n  }\n\n  template <typename M>\n  static constexpr bool IsInlined() {\n    return sizeof(M) <= sizeof(Buffer) && alignof(M) <= alignof(Buffer) &&\n           std::is_trivially_copy_constructible<M>::value &&\n           std::is_trivially_destructible<M>::value;\n  }\n\n  template <typename M, bool = MatcherBase::IsInlined<M>()>\n  struct ValuePolicy {\n    static const M& Get(const MatcherBase& m) {\n      // When inlined along with Init, need to be explicit to avoid violating\n      // strict aliasing rules.\n      const M* ptr =\n          static_cast<const M*>(static_cast<const void*>(&m.buffer_));\n      return *ptr;\n    }\n    static void Init(MatcherBase& m, M impl) {\n      ::new (static_cast<void*>(&m.buffer_)) M(impl);\n    }\n    static constexpr auto shared_destroy = nullptr;\n  };\n\n  template <typename M>\n  struct ValuePolicy<M, false> {\n    using Shared = SharedPayload<M>;\n    static const M& Get(const MatcherBase& m) {\n      return static_cast<Shared*>(m.buffer_.shared)->value;\n    }\n    template <typename Arg>\n    static void Init(MatcherBase& m, Arg&& arg) {\n      m.buffer_.shared = new Shared(std::forward<Arg>(arg));\n    }\n    static constexpr auto shared_destroy = &Shared::Destroy;\n  };\n\n  template <typename U, bool B>\n  struct ValuePolicy<const MatcherInterface<U>*, B> {\n    using M = const MatcherInterface<U>;\n    using Shared = SharedPayload<std::unique_ptr<M>>;\n    static const M& Get(const MatcherBase& m) {\n      return *static_cast<Shared*>(m.buffer_.shared)->value;\n    }\n    static void Init(MatcherBase& m, M* impl) {\n      m.buffer_.shared = new Shared(std::unique_ptr<M>(impl));\n    }\n\n    static constexpr auto shared_destroy = &Shared::Destroy;\n  };\n\n  template <typename M>\n  void Init(M&& m) {\n    using MM = typename std::decay<M>::type;\n    using Policy = ValuePolicy<MM>;\n    vtable_ = GetVTable<Policy>();\n    Policy::Init(*this, std::forward<M>(m));\n  }\n\n  const VTable* vtable_;\n  Buffer buffer_;\n};\n\n}  // namespace internal\n\n// A Matcher<T> is a copyable and IMMUTABLE (except by assignment)\n// object that can check whether a value of type T matches.  The\n// implementation of Matcher<T> is just a std::shared_ptr to const\n// MatcherInterface<T>.  Don't inherit from Matcher!\ntemplate <typename T>\nclass Matcher : public internal::MatcherBase<T> {\n public:\n  // Constructs a null matcher.  Needed for storing Matcher objects in STL\n  // containers.  A default-constructed matcher is not yet initialized.  You\n  // cannot use it until a valid value has been assigned to it.\n  explicit Matcher() {}  // NOLINT\n\n  // Constructs a matcher from its implementation.\n  explicit Matcher(const MatcherInterface<const T&>* impl)\n      : internal::MatcherBase<T>(impl) {}\n\n  template <typename U>\n  explicit Matcher(\n      const MatcherInterface<U>* impl,\n      typename std::enable_if<!std::is_same<U, const U&>::value>::type* =\n          nullptr)\n      : internal::MatcherBase<T>(impl) {}\n\n  template <typename M, typename = typename std::remove_reference<\n                            M>::type::is_gtest_matcher>\n  Matcher(M&& m) : internal::MatcherBase<T>(std::forward<M>(m)) {}  // NOLINT\n\n  // Implicit constructor here allows people to write\n  // EXPECT_CALL(foo, Bar(5)) instead of EXPECT_CALL(foo, Bar(Eq(5))) sometimes\n  Matcher(T value);  // NOLINT\n};\n\n// The following two specializations allow the user to write str\n// instead of Eq(str) and \"foo\" instead of Eq(\"foo\") when a std::string\n// matcher is expected.\ntemplate <>\nclass GTEST_API_ Matcher<const std::string&>\n    : public internal::MatcherBase<const std::string&> {\n public:\n  Matcher() {}\n\n  explicit Matcher(const MatcherInterface<const std::string&>* impl)\n      : internal::MatcherBase<const std::string&>(impl) {}\n\n  template <typename M, typename = typename std::remove_reference<\n                            M>::type::is_gtest_matcher>\n  Matcher(M&& m)  // NOLINT\n      : internal::MatcherBase<const std::string&>(std::forward<M>(m)) {}\n\n  // Allows the user to write str instead of Eq(str) sometimes, where\n  // str is a std::string object.\n  Matcher(const std::string& s);  // NOLINT\n\n  // Allows the user to write \"foo\" instead of Eq(\"foo\") sometimes.\n  Matcher(const char* s);  // NOLINT\n};\n\ntemplate <>\nclass GTEST_API_ Matcher<std::string>\n    : public internal::MatcherBase<std::string> {\n public:\n  Matcher() {}\n\n  explicit Matcher(const MatcherInterface<const std::string&>* impl)\n      : internal::MatcherBase<std::string>(impl) {}\n  explicit Matcher(const MatcherInterface<std::string>* impl)\n      : internal::MatcherBase<std::string>(impl) {}\n\n  template <typename M, typename = typename std::remove_reference<\n                            M>::type::is_gtest_matcher>\n  Matcher(M&& m)  // NOLINT\n      : internal::MatcherBase<std::string>(std::forward<M>(m)) {}\n\n  // Allows the user to write str instead of Eq(str) sometimes, where\n  // str is a string object.\n  Matcher(const std::string& s);  // NOLINT\n\n  // Allows the user to write \"foo\" instead of Eq(\"foo\") sometimes.\n  Matcher(const char* s);  // NOLINT\n};\n\n#if GTEST_INTERNAL_HAS_STRING_VIEW\n// The following two specializations allow the user to write str\n// instead of Eq(str) and \"foo\" instead of Eq(\"foo\") when a absl::string_view\n// matcher is expected.\ntemplate <>\nclass GTEST_API_ Matcher<const internal::StringView&>\n    : public internal::MatcherBase<const internal::StringView&> {\n public:\n  Matcher() {}\n\n  explicit Matcher(const MatcherInterface<const internal::StringView&>* impl)\n      : internal::MatcherBase<const internal::StringView&>(impl) {}\n\n  template <typename M, typename = typename std::remove_reference<\n                            M>::type::is_gtest_matcher>\n  Matcher(M&& m)  // NOLINT\n      : internal::MatcherBase<const internal::StringView&>(std::forward<M>(m)) {\n  }\n\n  // Allows the user to write str instead of Eq(str) sometimes, where\n  // str is a std::string object.\n  Matcher(const std::string& s);  // NOLINT\n\n  // Allows the user to write \"foo\" instead of Eq(\"foo\") sometimes.\n  Matcher(const char* s);  // NOLINT\n\n  // Allows the user to pass absl::string_views or std::string_views directly.\n  Matcher(internal::StringView s);  // NOLINT\n};\n\ntemplate <>\nclass GTEST_API_ Matcher<internal::StringView>\n    : public internal::MatcherBase<internal::StringView> {\n public:\n  Matcher() {}\n\n  explicit Matcher(const MatcherInterface<const internal::StringView&>* impl)\n      : internal::MatcherBase<internal::StringView>(impl) {}\n  explicit Matcher(const MatcherInterface<internal::StringView>* impl)\n      : internal::MatcherBase<internal::StringView>(impl) {}\n\n  template <typename M, typename = typename std::remove_reference<\n                            M>::type::is_gtest_matcher>\n  Matcher(M&& m)  // NOLINT\n      : internal::MatcherBase<internal::StringView>(std::forward<M>(m)) {}\n\n  // Allows the user to write str instead of Eq(str) sometimes, where\n  // str is a std::string object.\n  Matcher(const std::string& s);  // NOLINT\n\n  // Allows the user to write \"foo\" instead of Eq(\"foo\") sometimes.\n  Matcher(const char* s);  // NOLINT\n\n  // Allows the user to pass absl::string_views or std::string_views directly.\n  Matcher(internal::StringView s);  // NOLINT\n};\n#endif  // GTEST_INTERNAL_HAS_STRING_VIEW\n\n// Prints a matcher in a human-readable format.\ntemplate <typename T>\nstd::ostream& operator<<(std::ostream& os, const Matcher<T>& matcher) {\n  matcher.DescribeTo(&os);\n  return os;\n}\n\n// The PolymorphicMatcher class template makes it easy to implement a\n// polymorphic matcher (i.e. a matcher that can match values of more\n// than one type, e.g. Eq(n) and NotNull()).\n//\n// To define a polymorphic matcher, a user should provide an Impl\n// class that has a DescribeTo() method and a DescribeNegationTo()\n// method, and define a member function (or member function template)\n//\n//   bool MatchAndExplain(const Value& value,\n//                        MatchResultListener* listener) const;\n//\n// See the definition of NotNull() for a complete example.\ntemplate <class Impl>\nclass PolymorphicMatcher {\n public:\n  explicit PolymorphicMatcher(const Impl& an_impl) : impl_(an_impl) {}\n\n  // Returns a mutable reference to the underlying matcher\n  // implementation object.\n  Impl& mutable_impl() { return impl_; }\n\n  // Returns an immutable reference to the underlying matcher\n  // implementation object.\n  const Impl& impl() const { return impl_; }\n\n  template <typename T>\n  operator Matcher<T>() const {\n    return Matcher<T>(new MonomorphicImpl<const T&>(impl_));\n  }\n\n private:\n  template <typename T>\n  class MonomorphicImpl : public MatcherInterface<T> {\n   public:\n    explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {}\n\n    void DescribeTo(::std::ostream* os) const override { impl_.DescribeTo(os); }\n\n    void DescribeNegationTo(::std::ostream* os) const override {\n      impl_.DescribeNegationTo(os);\n    }\n\n    bool MatchAndExplain(T x, MatchResultListener* listener) const override {\n      return impl_.MatchAndExplain(x, listener);\n    }\n\n   private:\n    const Impl impl_;\n  };\n\n  Impl impl_;\n};\n\n// Creates a matcher from its implementation.\n// DEPRECATED: Especially in the generic code, prefer:\n//   Matcher<T>(new MyMatcherImpl<const T&>(...));\n//\n// MakeMatcher may create a Matcher that accepts its argument by value, which\n// leads to unnecessary copies & lack of support for non-copyable types.\ntemplate <typename T>\ninline Matcher<T> MakeMatcher(const MatcherInterface<T>* impl) {\n  return Matcher<T>(impl);\n}\n\n// Creates a polymorphic matcher from its implementation.  This is\n// easier to use than the PolymorphicMatcher<Impl> constructor as it\n// doesn't require you to explicitly write the template argument, e.g.\n//\n//   MakePolymorphicMatcher(foo);\n// vs\n//   PolymorphicMatcher<TypeOfFoo>(foo);\ntemplate <class Impl>\ninline PolymorphicMatcher<Impl> MakePolymorphicMatcher(const Impl& impl) {\n  return PolymorphicMatcher<Impl>(impl);\n}\n\nnamespace internal {\n// Implements a matcher that compares a given value with a\n// pre-supplied value using one of the ==, <=, <, etc, operators.  The\n// two values being compared don't have to have the same type.\n//\n// The matcher defined here is polymorphic (for example, Eq(5) can be\n// used to match an int, a short, a double, etc).  Therefore we use\n// a template type conversion operator in the implementation.\n//\n// The following template definition assumes that the Rhs parameter is\n// a \"bare\" type (i.e. neither 'const T' nor 'T&').\ntemplate <typename D, typename Rhs, typename Op>\nclass ComparisonBase {\n public:\n  explicit ComparisonBase(const Rhs& rhs) : rhs_(rhs) {}\n\n  using is_gtest_matcher = void;\n\n  template <typename Lhs>\n  bool MatchAndExplain(const Lhs& lhs, std::ostream*) const {\n    return Op()(lhs, Unwrap(rhs_));\n  }\n  void DescribeTo(std::ostream* os) const {\n    *os << D::Desc() << \" \";\n    UniversalPrint(Unwrap(rhs_), os);\n  }\n  void DescribeNegationTo(std::ostream* os) const {\n    *os << D::NegatedDesc() << \" \";\n    UniversalPrint(Unwrap(rhs_), os);\n  }\n\n private:\n  template <typename T>\n  static const T& Unwrap(const T& v) {\n    return v;\n  }\n  template <typename T>\n  static const T& Unwrap(std::reference_wrapper<T> v) {\n    return v;\n  }\n\n  Rhs rhs_;\n};\n\ntemplate <typename Rhs>\nclass EqMatcher : public ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq> {\n public:\n  explicit EqMatcher(const Rhs& rhs)\n      : ComparisonBase<EqMatcher<Rhs>, Rhs, AnyEq>(rhs) {}\n  static const char* Desc() { return \"is equal to\"; }\n  static const char* NegatedDesc() { return \"isn't equal to\"; }\n};\ntemplate <typename Rhs>\nclass NeMatcher : public ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe> {\n public:\n  explicit NeMatcher(const Rhs& rhs)\n      : ComparisonBase<NeMatcher<Rhs>, Rhs, AnyNe>(rhs) {}\n  static const char* Desc() { return \"isn't equal to\"; }\n  static const char* NegatedDesc() { return \"is equal to\"; }\n};\ntemplate <typename Rhs>\nclass LtMatcher : public ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt> {\n public:\n  explicit LtMatcher(const Rhs& rhs)\n      : ComparisonBase<LtMatcher<Rhs>, Rhs, AnyLt>(rhs) {}\n  static const char* Desc() { return \"is <\"; }\n  static const char* NegatedDesc() { return \"isn't <\"; }\n};\ntemplate <typename Rhs>\nclass GtMatcher : public ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt> {\n public:\n  explicit GtMatcher(const Rhs& rhs)\n      : ComparisonBase<GtMatcher<Rhs>, Rhs, AnyGt>(rhs) {}\n  static const char* Desc() { return \"is >\"; }\n  static const char* NegatedDesc() { return \"isn't >\"; }\n};\ntemplate <typename Rhs>\nclass LeMatcher : public ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe> {\n public:\n  explicit LeMatcher(const Rhs& rhs)\n      : ComparisonBase<LeMatcher<Rhs>, Rhs, AnyLe>(rhs) {}\n  static const char* Desc() { return \"is <=\"; }\n  static const char* NegatedDesc() { return \"isn't <=\"; }\n};\ntemplate <typename Rhs>\nclass GeMatcher : public ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe> {\n public:\n  explicit GeMatcher(const Rhs& rhs)\n      : ComparisonBase<GeMatcher<Rhs>, Rhs, AnyGe>(rhs) {}\n  static const char* Desc() { return \"is >=\"; }\n  static const char* NegatedDesc() { return \"isn't >=\"; }\n};\n\ntemplate <typename T, typename = typename std::enable_if<\n                          std::is_constructible<std::string, T>::value>::type>\nusing StringLike = T;\n\n// Implements polymorphic matchers MatchesRegex(regex) and\n// ContainsRegex(regex), which can be used as a Matcher<T> as long as\n// T can be converted to a string.\nclass MatchesRegexMatcher {\n public:\n  MatchesRegexMatcher(const RE* regex, bool full_match)\n      : regex_(regex), full_match_(full_match) {}\n\n#if GTEST_INTERNAL_HAS_STRING_VIEW\n  bool MatchAndExplain(const internal::StringView& s,\n                       MatchResultListener* listener) const {\n    return MatchAndExplain(std::string(s), listener);\n  }\n#endif  // GTEST_INTERNAL_HAS_STRING_VIEW\n\n  // Accepts pointer types, particularly:\n  //   const char*\n  //   char*\n  //   const wchar_t*\n  //   wchar_t*\n  template <typename CharType>\n  bool MatchAndExplain(CharType* s, MatchResultListener* listener) const {\n    return s != nullptr && MatchAndExplain(std::string(s), listener);\n  }\n\n  // Matches anything that can convert to std::string.\n  //\n  // This is a template, not just a plain function with const std::string&,\n  // because absl::string_view has some interfering non-explicit constructors.\n  template <class MatcheeStringType>\n  bool MatchAndExplain(const MatcheeStringType& s,\n                       MatchResultListener* /* listener */) const {\n    const std::string& s2(s);\n    return full_match_ ? RE::FullMatch(s2, *regex_)\n                       : RE::PartialMatch(s2, *regex_);\n  }\n\n  void DescribeTo(::std::ostream* os) const {\n    *os << (full_match_ ? \"matches\" : \"contains\") << \" regular expression \";\n    UniversalPrinter<std::string>::Print(regex_->pattern(), os);\n  }\n\n  void DescribeNegationTo(::std::ostream* os) const {\n    *os << \"doesn't \" << (full_match_ ? \"match\" : \"contain\")\n        << \" regular expression \";\n    UniversalPrinter<std::string>::Print(regex_->pattern(), os);\n  }\n\n private:\n  const std::shared_ptr<const RE> regex_;\n  const bool full_match_;\n};\n}  // namespace internal\n\n// Matches a string that fully matches regular expression 'regex'.\n// The matcher takes ownership of 'regex'.\ninline PolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex(\n    const internal::RE* regex) {\n  return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, true));\n}\ntemplate <typename T = std::string>\nPolymorphicMatcher<internal::MatchesRegexMatcher> MatchesRegex(\n    const internal::StringLike<T>& regex) {\n  return MatchesRegex(new internal::RE(std::string(regex)));\n}\n\n// Matches a string that contains regular expression 'regex'.\n// The matcher takes ownership of 'regex'.\ninline PolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex(\n    const internal::RE* regex) {\n  return MakePolymorphicMatcher(internal::MatchesRegexMatcher(regex, false));\n}\ntemplate <typename T = std::string>\nPolymorphicMatcher<internal::MatchesRegexMatcher> ContainsRegex(\n    const internal::StringLike<T>& regex) {\n  return ContainsRegex(new internal::RE(std::string(regex)));\n}\n\n// Creates a polymorphic matcher that matches anything equal to x.\n// Note: if the parameter of Eq() were declared as const T&, Eq(\"foo\")\n// wouldn't compile.\ntemplate <typename T>\ninline internal::EqMatcher<T> Eq(T x) {\n  return internal::EqMatcher<T>(x);\n}\n\n// Constructs a Matcher<T> from a 'value' of type T.  The constructed\n// matcher matches any value that's equal to 'value'.\ntemplate <typename T>\nMatcher<T>::Matcher(T value) {\n  *this = Eq(value);\n}\n\n// Creates a monomorphic matcher that matches anything with type Lhs\n// and equal to rhs.  A user may need to use this instead of Eq(...)\n// in order to resolve an overloading ambiguity.\n//\n// TypedEq<T>(x) is just a convenient short-hand for Matcher<T>(Eq(x))\n// or Matcher<T>(x), but more readable than the latter.\n//\n// We could define similar monomorphic matchers for other comparison\n// operations (e.g. TypedLt, TypedGe, and etc), but decided not to do\n// it yet as those are used much less than Eq() in practice.  A user\n// can always write Matcher<T>(Lt(5)) to be explicit about the type,\n// for example.\ntemplate <typename Lhs, typename Rhs>\ninline Matcher<Lhs> TypedEq(const Rhs& rhs) {\n  return Eq(rhs);\n}\n\n// Creates a polymorphic matcher that matches anything >= x.\ntemplate <typename Rhs>\ninline internal::GeMatcher<Rhs> Ge(Rhs x) {\n  return internal::GeMatcher<Rhs>(x);\n}\n\n// Creates a polymorphic matcher that matches anything > x.\ntemplate <typename Rhs>\ninline internal::GtMatcher<Rhs> Gt(Rhs x) {\n  return internal::GtMatcher<Rhs>(x);\n}\n\n// Creates a polymorphic matcher that matches anything <= x.\ntemplate <typename Rhs>\ninline internal::LeMatcher<Rhs> Le(Rhs x) {\n  return internal::LeMatcher<Rhs>(x);\n}\n\n// Creates a polymorphic matcher that matches anything < x.\ntemplate <typename Rhs>\ninline internal::LtMatcher<Rhs> Lt(Rhs x) {\n  return internal::LtMatcher<Rhs>(x);\n}\n\n// Creates a polymorphic matcher that matches anything != x.\ntemplate <typename Rhs>\ninline internal::NeMatcher<Rhs> Ne(Rhs x) {\n  return internal::NeMatcher<Rhs>(x);\n}\n}  // namespace testing\n\nGTEST_DISABLE_MSC_WARNINGS_POP_()  //  4251 5046\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_MATCHERS_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest-message.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// The Google C++ Testing and Mocking Framework (Google Test)\n//\n// This header file defines the Message class.\n//\n// IMPORTANT NOTE: Due to limitation of the C++ language, we have to\n// leave some internal implementation details in this header file.\n// They are clearly marked by comments like this:\n//\n//   // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n//\n// Such code is NOT meant to be used by a user directly, and is subject\n// to CHANGE WITHOUT NOTICE.  Therefore DO NOT DEPEND ON IT in a user\n// program!\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_MESSAGE_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_MESSAGE_H_\n\n#include <limits>\n#include <memory>\n#include <sstream>\n\n#include \"gtest/internal/gtest-port.h\"\n\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \\\n/* class A needs to have dll-interface to be used by clients of class B */)\n\n// Ensures that there is at least one operator<< in the global namespace.\n// See Message& operator<<(...) below for why.\nvoid operator<<(const testing::internal::Secret&, int);\n\nnamespace testing {\n\n// The Message class works like an ostream repeater.\n//\n// Typical usage:\n//\n//   1. You stream a bunch of values to a Message object.\n//      It will remember the text in a stringstream.\n//   2. Then you stream the Message object to an ostream.\n//      This causes the text in the Message to be streamed\n//      to the ostream.\n//\n// For example;\n//\n//   testing::Message foo;\n//   foo << 1 << \" != \" << 2;\n//   std::cout << foo;\n//\n// will print \"1 != 2\".\n//\n// Message is not intended to be inherited from.  In particular, its\n// destructor is not virtual.\n//\n// Note that stringstream behaves differently in gcc and in MSVC.  You\n// can stream a NULL char pointer to it in the former, but not in the\n// latter (it causes an access violation if you do).  The Message\n// class hides this difference by treating a NULL char pointer as\n// \"(null)\".\nclass GTEST_API_ Message {\n private:\n  // The type of basic IO manipulators (endl, ends, and flush) for\n  // narrow streams.\n  typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&);\n\n public:\n  // Constructs an empty Message.\n  Message();\n\n  // Copy constructor.\n  Message(const Message& msg) : ss_(new ::std::stringstream) {  // NOLINT\n    *ss_ << msg.GetString();\n  }\n\n  // Constructs a Message from a C-string.\n  explicit Message(const char* str) : ss_(new ::std::stringstream) {\n    *ss_ << str;\n  }\n\n  // Streams a non-pointer value to this object.\n  template <typename T>\n  inline Message& operator<<(const T& val) {\n        // Some libraries overload << for STL containers.  These\n    // overloads are defined in the global namespace instead of ::std.\n    //\n    // C++'s symbol lookup rule (i.e. Koenig lookup) says that these\n    // overloads are visible in either the std namespace or the global\n    // namespace, but not other namespaces, including the testing\n    // namespace which Google Test's Message class is in.\n    //\n    // To allow STL containers (and other types that has a << operator\n    // defined in the global namespace) to be used in Google Test\n    // assertions, testing::Message must access the custom << operator\n    // from the global namespace.  With this using declaration,\n    // overloads of << defined in the global namespace and those\n    // visible via Koenig lookup are both exposed in this function.\n    using ::operator<<;\n    *ss_ << val;\n    return *this;\n  }\n\n  // Streams a pointer value to this object.\n  //\n  // This function is an overload of the previous one.  When you\n  // stream a pointer to a Message, this definition will be used as it\n  // is more specialized.  (The C++ Standard, section\n  // [temp.func.order].)  If you stream a non-pointer, then the\n  // previous definition will be used.\n  //\n  // The reason for this overload is that streaming a NULL pointer to\n  // ostream is undefined behavior.  Depending on the compiler, you\n  // may get \"0\", \"(nil)\", \"(null)\", or an access violation.  To\n  // ensure consistent result across compilers, we always treat NULL\n  // as \"(null)\".\n  template <typename T>\n  inline Message& operator<<(T* const& pointer) {  // NOLINT\n    if (pointer == nullptr) {\n      *ss_ << \"(null)\";\n    } else {\n      *ss_ << pointer;\n    }\n    return *this;\n  }\n\n  // Since the basic IO manipulators are overloaded for both narrow\n  // and wide streams, we have to provide this specialized definition\n  // of operator <<, even though its body is the same as the\n  // templatized version above.  Without this definition, streaming\n  // endl or other basic IO manipulators to Message will confuse the\n  // compiler.\n  Message& operator<<(BasicNarrowIoManip val) {\n    *ss_ << val;\n    return *this;\n  }\n\n  // Instead of 1/0, we want to see true/false for bool values.\n  Message& operator<<(bool b) { return *this << (b ? \"true\" : \"false\"); }\n\n  // These two overloads allow streaming a wide C string to a Message\n  // using the UTF-8 encoding.\n  Message& operator<<(const wchar_t* wide_c_str);\n  Message& operator<<(wchar_t* wide_c_str);\n\n#if GTEST_HAS_STD_WSTRING\n  // Converts the given wide string to a narrow string using the UTF-8\n  // encoding, and streams the result to this Message object.\n  Message& operator<<(const ::std::wstring& wstr);\n#endif  // GTEST_HAS_STD_WSTRING\n\n  // Gets the text streamed to this object so far as an std::string.\n  // Each '\\0' character in the buffer is replaced with \"\\\\0\".\n  //\n  // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n  std::string GetString() const;\n\n private:\n  // We'll hold the text streamed to this object here.\n  const std::unique_ptr< ::std::stringstream> ss_;\n\n  // We declare (but don't implement) this to prevent the compiler\n  // from implementing the assignment operator.\n  void operator=(const Message&);\n};\n\n// Streams a Message to an ostream.\ninline std::ostream& operator<<(std::ostream& os, const Message& sb) {\n  return os << sb.GetString();\n}\n\nnamespace internal {\n\n// Converts a streamable value to an std::string.  A NULL pointer is\n// converted to \"(null)\".  When the input value is a ::string,\n// ::std::string, ::wstring, or ::std::wstring object, each NUL\n// character in it is replaced with \"\\\\0\".\ntemplate <typename T>\nstd::string StreamableToString(const T& streamable) {\n  return (Message() << streamable).GetString();\n}\n\n}  // namespace internal\n}  // namespace testing\n\nGTEST_DISABLE_MSC_WARNINGS_POP_()  //  4251\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_MESSAGE_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest-param-test.h",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Macros and functions for implementing parameterized tests\n// in Google C++ Testing and Mocking Framework (Google Test)\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_\n\n// Value-parameterized tests allow you to test your code with different\n// parameters without writing multiple copies of the same test.\n//\n// Here is how you use value-parameterized tests:\n\n#if 0\n\n// To write value-parameterized tests, first you should define a fixture\n// class. It is usually derived from testing::TestWithParam<T> (see below for\n// another inheritance scheme that's sometimes useful in more complicated\n// class hierarchies), where the type of your parameter values.\n// TestWithParam<T> is itself derived from testing::Test. T can be any\n// copyable type. If it's a raw pointer, you are responsible for managing the\n// lifespan of the pointed values.\n\nclass FooTest : public ::testing::TestWithParam<const char*> {\n  // You can implement all the usual class fixture members here.\n};\n\n// Then, use the TEST_P macro to define as many parameterized tests\n// for this fixture as you want. The _P suffix is for \"parameterized\"\n// or \"pattern\", whichever you prefer to think.\n\nTEST_P(FooTest, DoesBlah) {\n  // Inside a test, access the test parameter with the GetParam() method\n  // of the TestWithParam<T> class:\n  EXPECT_TRUE(foo.Blah(GetParam()));\n  ...\n}\n\nTEST_P(FooTest, HasBlahBlah) {\n  ...\n}\n\n// Finally, you can use INSTANTIATE_TEST_SUITE_P to instantiate the test\n// case with any set of parameters you want. Google Test defines a number\n// of functions for generating test parameters. They return what we call\n// (surprise!) parameter generators. Here is a summary of them, which\n// are all in the testing namespace:\n//\n//\n//  Range(begin, end [, step]) - Yields values {begin, begin+step,\n//                               begin+step+step, ...}. The values do not\n//                               include end. step defaults to 1.\n//  Values(v1, v2, ..., vN)    - Yields values {v1, v2, ..., vN}.\n//  ValuesIn(container)        - Yields values from a C-style array, an STL\n//  ValuesIn(begin,end)          container, or an iterator range [begin, end).\n//  Bool()                     - Yields sequence {false, true}.\n//  Combine(g1, g2, ..., gN)   - Yields all combinations (the Cartesian product\n//                               for the math savvy) of the values generated\n//                               by the N generators.\n//\n// For more details, see comments at the definitions of these functions below\n// in this file.\n//\n// The following statement will instantiate tests from the FooTest test suite\n// each with parameter values \"meeny\", \"miny\", and \"moe\".\n\nINSTANTIATE_TEST_SUITE_P(InstantiationName,\n                         FooTest,\n                         Values(\"meeny\", \"miny\", \"moe\"));\n\n// To distinguish different instances of the pattern, (yes, you\n// can instantiate it more than once) the first argument to the\n// INSTANTIATE_TEST_SUITE_P macro is a prefix that will be added to the\n// actual test suite name. Remember to pick unique prefixes for different\n// instantiations. The tests from the instantiation above will have\n// these names:\n//\n//    * InstantiationName/FooTest.DoesBlah/0 for \"meeny\"\n//    * InstantiationName/FooTest.DoesBlah/1 for \"miny\"\n//    * InstantiationName/FooTest.DoesBlah/2 for \"moe\"\n//    * InstantiationName/FooTest.HasBlahBlah/0 for \"meeny\"\n//    * InstantiationName/FooTest.HasBlahBlah/1 for \"miny\"\n//    * InstantiationName/FooTest.HasBlahBlah/2 for \"moe\"\n//\n// You can use these names in --gtest_filter.\n//\n// This statement will instantiate all tests from FooTest again, each\n// with parameter values \"cat\" and \"dog\":\n\nconst char* pets[] = {\"cat\", \"dog\"};\nINSTANTIATE_TEST_SUITE_P(AnotherInstantiationName, FooTest, ValuesIn(pets));\n\n// The tests from the instantiation above will have these names:\n//\n//    * AnotherInstantiationName/FooTest.DoesBlah/0 for \"cat\"\n//    * AnotherInstantiationName/FooTest.DoesBlah/1 for \"dog\"\n//    * AnotherInstantiationName/FooTest.HasBlahBlah/0 for \"cat\"\n//    * AnotherInstantiationName/FooTest.HasBlahBlah/1 for \"dog\"\n//\n// Please note that INSTANTIATE_TEST_SUITE_P will instantiate all tests\n// in the given test suite, whether their definitions come before or\n// AFTER the INSTANTIATE_TEST_SUITE_P statement.\n//\n// Please also note that generator expressions (including parameters to the\n// generators) are evaluated in InitGoogleTest(), after main() has started.\n// This allows the user on one hand, to adjust generator parameters in order\n// to dynamically determine a set of tests to run and on the other hand,\n// give the user a chance to inspect the generated tests with Google Test\n// reflection API before RUN_ALL_TESTS() is executed.\n//\n// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc\n// for more examples.\n//\n// In the future, we plan to publish the API for defining new parameter\n// generators. But for now this interface remains part of the internal\n// implementation and is subject to change.\n//\n//\n// A parameterized test fixture must be derived from testing::Test and from\n// testing::WithParamInterface<T>, where T is the type of the parameter\n// values. Inheriting from TestWithParam<T> satisfies that requirement because\n// TestWithParam<T> inherits from both Test and WithParamInterface. In more\n// complicated hierarchies, however, it is occasionally useful to inherit\n// separately from Test and WithParamInterface. For example:\n\nclass BaseTest : public ::testing::Test {\n  // You can inherit all the usual members for a non-parameterized test\n  // fixture here.\n};\n\nclass DerivedTest : public BaseTest, public ::testing::WithParamInterface<int> {\n  // The usual test fixture members go here too.\n};\n\nTEST_F(BaseTest, HasFoo) {\n  // This is an ordinary non-parameterized test.\n}\n\nTEST_P(DerivedTest, DoesBlah) {\n  // GetParam works just the same here as if you inherit from TestWithParam.\n  EXPECT_TRUE(foo.Blah(GetParam()));\n}\n\n#endif  // 0\n\n#include <iterator>\n#include <utility>\n\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-param-util.h\"\n#include \"gtest/internal/gtest-port.h\"\n\nnamespace testing {\n\n// Functions producing parameter generators.\n//\n// Google Test uses these generators to produce parameters for value-\n// parameterized tests. When a parameterized test suite is instantiated\n// with a particular generator, Google Test creates and runs tests\n// for each element in the sequence produced by the generator.\n//\n// In the following sample, tests from test suite FooTest are instantiated\n// each three times with parameter values 3, 5, and 8:\n//\n// class FooTest : public TestWithParam<int> { ... };\n//\n// TEST_P(FooTest, TestThis) {\n// }\n// TEST_P(FooTest, TestThat) {\n// }\n// INSTANTIATE_TEST_SUITE_P(TestSequence, FooTest, Values(3, 5, 8));\n//\n\n// Range() returns generators providing sequences of values in a range.\n//\n// Synopsis:\n// Range(start, end)\n//   - returns a generator producing a sequence of values {start, start+1,\n//     start+2, ..., }.\n// Range(start, end, step)\n//   - returns a generator producing a sequence of values {start, start+step,\n//     start+step+step, ..., }.\n// Notes:\n//   * The generated sequences never include end. For example, Range(1, 5)\n//     returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2)\n//     returns a generator producing {1, 3, 5, 7}.\n//   * start and end must have the same type. That type may be any integral or\n//     floating-point type or a user defined type satisfying these conditions:\n//     * It must be assignable (have operator=() defined).\n//     * It must have operator+() (operator+(int-compatible type) for\n//       two-operand version).\n//     * It must have operator<() defined.\n//     Elements in the resulting sequences will also have that type.\n//   * Condition start < end must be satisfied in order for resulting sequences\n//     to contain any elements.\n//\ntemplate <typename T, typename IncrementT>\ninternal::ParamGenerator<T> Range(T start, T end, IncrementT step) {\n  return internal::ParamGenerator<T>(\n      new internal::RangeGenerator<T, IncrementT>(start, end, step));\n}\n\ntemplate <typename T>\ninternal::ParamGenerator<T> Range(T start, T end) {\n  return Range(start, end, 1);\n}\n\n// ValuesIn() function allows generation of tests with parameters coming from\n// a container.\n//\n// Synopsis:\n// ValuesIn(const T (&array)[N])\n//   - returns a generator producing sequences with elements from\n//     a C-style array.\n// ValuesIn(const Container& container)\n//   - returns a generator producing sequences with elements from\n//     an STL-style container.\n// ValuesIn(Iterator begin, Iterator end)\n//   - returns a generator producing sequences with elements from\n//     a range [begin, end) defined by a pair of STL-style iterators. These\n//     iterators can also be plain C pointers.\n//\n// Please note that ValuesIn copies the values from the containers\n// passed in and keeps them to generate tests in RUN_ALL_TESTS().\n//\n// Examples:\n//\n// This instantiates tests from test suite StringTest\n// each with C-string values of \"foo\", \"bar\", and \"baz\":\n//\n// const char* strings[] = {\"foo\", \"bar\", \"baz\"};\n// INSTANTIATE_TEST_SUITE_P(StringSequence, StringTest, ValuesIn(strings));\n//\n// This instantiates tests from test suite StlStringTest\n// each with STL strings with values \"a\" and \"b\":\n//\n// ::std::vector< ::std::string> GetParameterStrings() {\n//   ::std::vector< ::std::string> v;\n//   v.push_back(\"a\");\n//   v.push_back(\"b\");\n//   return v;\n// }\n//\n// INSTANTIATE_TEST_SUITE_P(CharSequence,\n//                          StlStringTest,\n//                          ValuesIn(GetParameterStrings()));\n//\n//\n// This will also instantiate tests from CharTest\n// each with parameter values 'a' and 'b':\n//\n// ::std::list<char> GetParameterChars() {\n//   ::std::list<char> list;\n//   list.push_back('a');\n//   list.push_back('b');\n//   return list;\n// }\n// ::std::list<char> l = GetParameterChars();\n// INSTANTIATE_TEST_SUITE_P(CharSequence2,\n//                          CharTest,\n//                          ValuesIn(l.begin(), l.end()));\n//\ntemplate <typename ForwardIterator>\ninternal::ParamGenerator<\n    typename std::iterator_traits<ForwardIterator>::value_type>\nValuesIn(ForwardIterator begin, ForwardIterator end) {\n  typedef typename std::iterator_traits<ForwardIterator>::value_type ParamType;\n  return internal::ParamGenerator<ParamType>(\n      new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end));\n}\n\ntemplate <typename T, size_t N>\ninternal::ParamGenerator<T> ValuesIn(const T (&array)[N]) {\n  return ValuesIn(array, array + N);\n}\n\ntemplate <class Container>\ninternal::ParamGenerator<typename Container::value_type> ValuesIn(\n    const Container& container) {\n  return ValuesIn(container.begin(), container.end());\n}\n\n// Values() allows generating tests from explicitly specified list of\n// parameters.\n//\n// Synopsis:\n// Values(T v1, T v2, ..., T vN)\n//   - returns a generator producing sequences with elements v1, v2, ..., vN.\n//\n// For example, this instantiates tests from test suite BarTest each\n// with values \"one\", \"two\", and \"three\":\n//\n// INSTANTIATE_TEST_SUITE_P(NumSequence,\n//                          BarTest,\n//                          Values(\"one\", \"two\", \"three\"));\n//\n// This instantiates tests from test suite BazTest each with values 1, 2, 3.5.\n// The exact type of values will depend on the type of parameter in BazTest.\n//\n// INSTANTIATE_TEST_SUITE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5));\n//\n//\ntemplate <typename... T>\ninternal::ValueArray<T...> Values(T... v) {\n  return internal::ValueArray<T...>(std::move(v)...);\n}\n\n// Bool() allows generating tests with parameters in a set of (false, true).\n//\n// Synopsis:\n// Bool()\n//   - returns a generator producing sequences with elements {false, true}.\n//\n// It is useful when testing code that depends on Boolean flags. Combinations\n// of multiple flags can be tested when several Bool()'s are combined using\n// Combine() function.\n//\n// In the following example all tests in the test suite FlagDependentTest\n// will be instantiated twice with parameters false and true.\n//\n// class FlagDependentTest : public testing::TestWithParam<bool> {\n//   virtual void SetUp() {\n//     external_flag = GetParam();\n//   }\n// }\n// INSTANTIATE_TEST_SUITE_P(BoolSequence, FlagDependentTest, Bool());\n//\ninline internal::ParamGenerator<bool> Bool() { return Values(false, true); }\n\n// Combine() allows the user to combine two or more sequences to produce\n// values of a Cartesian product of those sequences' elements.\n//\n// Synopsis:\n// Combine(gen1, gen2, ..., genN)\n//   - returns a generator producing sequences with elements coming from\n//     the Cartesian product of elements from the sequences generated by\n//     gen1, gen2, ..., genN. The sequence elements will have a type of\n//     std::tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types\n//     of elements from sequences produces by gen1, gen2, ..., genN.\n//\n// Example:\n//\n// This will instantiate tests in test suite AnimalTest each one with\n// the parameter values tuple(\"cat\", BLACK), tuple(\"cat\", WHITE),\n// tuple(\"dog\", BLACK), and tuple(\"dog\", WHITE):\n//\n// enum Color { BLACK, GRAY, WHITE };\n// class AnimalTest\n//     : public testing::TestWithParam<std::tuple<const char*, Color> > {...};\n//\n// TEST_P(AnimalTest, AnimalLooksNice) {...}\n//\n// INSTANTIATE_TEST_SUITE_P(AnimalVariations, AnimalTest,\n//                          Combine(Values(\"cat\", \"dog\"),\n//                                  Values(BLACK, WHITE)));\n//\n// This will instantiate tests in FlagDependentTest with all variations of two\n// Boolean flags:\n//\n// class FlagDependentTest\n//     : public testing::TestWithParam<std::tuple<bool, bool> > {\n//   virtual void SetUp() {\n//     // Assigns external_flag_1 and external_flag_2 values from the tuple.\n//     std::tie(external_flag_1, external_flag_2) = GetParam();\n//   }\n// };\n//\n// TEST_P(FlagDependentTest, TestFeature1) {\n//   // Test your code using external_flag_1 and external_flag_2 here.\n// }\n// INSTANTIATE_TEST_SUITE_P(TwoBoolSequence, FlagDependentTest,\n//                          Combine(Bool(), Bool()));\n//\ntemplate <typename... Generator>\ninternal::CartesianProductHolder<Generator...> Combine(const Generator&... g) {\n  return internal::CartesianProductHolder<Generator...>(g...);\n}\n\n#define TEST_P(test_suite_name, test_name)                                     \\\n  class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)                     \\\n      : public test_suite_name {                                               \\\n   public:                                                                     \\\n    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {}                    \\\n    void TestBody() override;                                                  \\\n                                                                               \\\n   private:                                                                    \\\n    static int AddToRegistry() {                                               \\\n      ::testing::UnitTest::GetInstance()                                       \\\n          ->parameterized_test_registry()                                      \\\n          .GetTestSuitePatternHolder<test_suite_name>(                         \\\n              GTEST_STRINGIFY_(test_suite_name),                               \\\n              ::testing::internal::CodeLocation(__FILE__, __LINE__))           \\\n          ->AddTestPattern(                                                    \\\n              GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name),  \\\n              new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \\\n                  test_suite_name, test_name)>(),                              \\\n              ::testing::internal::CodeLocation(__FILE__, __LINE__));          \\\n      return 0;                                                                \\\n    }                                                                          \\\n    static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_;               \\\n    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)                         \\\n    (const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &) = delete;     \\\n    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=(            \\\n        const GTEST_TEST_CLASS_NAME_(test_suite_name,                          \\\n                                     test_name) &) = delete; /* NOLINT */      \\\n  };                                                                           \\\n  int GTEST_TEST_CLASS_NAME_(test_suite_name,                                  \\\n                             test_name)::gtest_registering_dummy_ =            \\\n      GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry();     \\\n  void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()\n\n// The last argument to INSTANTIATE_TEST_SUITE_P allows the user to specify\n// generator and an optional function or functor that generates custom test name\n// suffixes based on the test parameters. Such a function or functor should\n// accept one argument of type testing::TestParamInfo<class ParamType>, and\n// return std::string.\n//\n// testing::PrintToStringParamName is a builtin test suffix generator that\n// returns the value of testing::PrintToString(GetParam()).\n//\n// Note: test names must be non-empty, unique, and may only contain ASCII\n// alphanumeric characters or underscore. Because PrintToString adds quotes\n// to std::string and C strings, it won't work for these types.\n\n#define GTEST_EXPAND_(arg) arg\n#define GTEST_GET_FIRST_(first, ...) first\n#define GTEST_GET_SECOND_(first, second, ...) second\n\n#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, ...)               \\\n  static ::testing::internal::ParamGenerator<test_suite_name::ParamType>     \\\n      gtest_##prefix##test_suite_name##_EvalGenerator_() {                   \\\n    return GTEST_EXPAND_(GTEST_GET_FIRST_(__VA_ARGS__, DUMMY_PARAM_));       \\\n  }                                                                          \\\n  static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_(  \\\n      const ::testing::TestParamInfo<test_suite_name::ParamType>& info) {    \\\n    if (::testing::internal::AlwaysFalse()) {                                \\\n      ::testing::internal::TestNotEmpty(GTEST_EXPAND_(GTEST_GET_SECOND_(     \\\n          __VA_ARGS__,                                                       \\\n          ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \\\n          DUMMY_PARAM_)));                                                   \\\n      auto t = std::make_tuple(__VA_ARGS__);                                 \\\n      static_assert(std::tuple_size<decltype(t)>::value <= 2,                \\\n                    \"Too Many Args!\");                                       \\\n    }                                                                        \\\n    return ((GTEST_EXPAND_(GTEST_GET_SECOND_(                                \\\n        __VA_ARGS__,                                                         \\\n        ::testing::internal::DefaultParamName<test_suite_name::ParamType>,   \\\n        DUMMY_PARAM_))))(info);                                              \\\n  }                                                                          \\\n  static int gtest_##prefix##test_suite_name##_dummy_                        \\\n      GTEST_ATTRIBUTE_UNUSED_ =                                              \\\n          ::testing::UnitTest::GetInstance()                                 \\\n              ->parameterized_test_registry()                                \\\n              .GetTestSuitePatternHolder<test_suite_name>(                   \\\n                  GTEST_STRINGIFY_(test_suite_name),                         \\\n                  ::testing::internal::CodeLocation(__FILE__, __LINE__))     \\\n              ->AddTestSuiteInstantiation(                                   \\\n                  GTEST_STRINGIFY_(prefix),                                  \\\n                  &gtest_##prefix##test_suite_name##_EvalGenerator_,         \\\n                  &gtest_##prefix##test_suite_name##_EvalGenerateName_,      \\\n                  __FILE__, __LINE__)\n\n// Allow Marking a Parameterized test class as not needing to be instantiated.\n#define GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(T)                  \\\n  namespace gtest_do_not_use_outside_namespace_scope {}                   \\\n  static const ::testing::internal::MarkAsIgnored gtest_allow_ignore_##T( \\\n      GTEST_STRINGIFY_(T))\n\n// Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n#define INSTANTIATE_TEST_CASE_P                                            \\\n  static_assert(::testing::internal::InstantiateTestCase_P_IsDeprecated(), \\\n                \"\");                                                       \\\n  INSTANTIATE_TEST_SUITE_P\n#endif  // GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n}  // namespace testing\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest-printers.h",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Google Test - The Google C++ Testing and Mocking Framework\n//\n// This file implements a universal value printer that can print a\n// value of any type T:\n//\n//   void ::testing::internal::UniversalPrinter<T>::Print(value, ostream_ptr);\n//\n// A user can teach this function how to print a class type T by\n// defining either operator<<() or PrintTo() in the namespace that\n// defines T.  More specifically, the FIRST defined function in the\n// following list will be used (assuming T is defined in namespace\n// foo):\n//\n//   1. foo::PrintTo(const T&, ostream*)\n//   2. operator<<(ostream&, const T&) defined in either foo or the\n//      global namespace.\n//\n// However if T is an STL-style container then it is printed element-wise\n// unless foo::PrintTo(const T&, ostream*) is defined. Note that\n// operator<<() is ignored for container types.\n//\n// If none of the above is defined, it will print the debug string of\n// the value if it is a protocol buffer, or print the raw bytes in the\n// value otherwise.\n//\n// To aid debugging: when T is a reference type, the address of the\n// value is also printed; when T is a (const) char pointer, both the\n// pointer value and the NUL-terminated string it points to are\n// printed.\n//\n// We also provide some convenient wrappers:\n//\n//   // Prints a value to a string.  For a (const or not) char\n//   // pointer, the NUL-terminated string (but not the pointer) is\n//   // printed.\n//   std::string ::testing::PrintToString(const T& value);\n//\n//   // Prints a value tersely: for a reference type, the referenced\n//   // value (but not the address) is printed; for a (const or not) char\n//   // pointer, the NUL-terminated string (but not the pointer) is\n//   // printed.\n//   void ::testing::internal::UniversalTersePrint(const T& value, ostream*);\n//\n//   // Prints value using the type inferred by the compiler.  The difference\n//   // from UniversalTersePrint() is that this function prints both the\n//   // pointer and the NUL-terminated string for a (const or not) char pointer.\n//   void ::testing::internal::UniversalPrint(const T& value, ostream*);\n//\n//   // Prints the fields of a tuple tersely to a string vector, one\n//   // element for each field. Tuple support must be enabled in\n//   // gtest-port.h.\n//   std::vector<string> UniversalTersePrintTupleFieldsToStrings(\n//       const Tuple& value);\n//\n// Known limitation:\n//\n// The print primitives print the elements of an STL-style container\n// using the compiler-inferred type of *iter where iter is a\n// const_iterator of the container.  When const_iterator is an input\n// iterator but not a forward iterator, this inferred type may not\n// match value_type, and the print output may be incorrect.  In\n// practice, this is rarely a problem as for most containers\n// const_iterator is a forward iterator.  We'll fix this if there's an\n// actual need for it.  Note that this fix cannot rely on value_type\n// being defined as many user-defined container types don't have\n// value_type.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PRINTERS_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_PRINTERS_H_\n\n#include <functional>\n#include <memory>\n#include <ostream>  // NOLINT\n#include <sstream>\n#include <string>\n#include <tuple>\n#include <type_traits>\n#include <utility>\n#include <vector>\n\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-port.h\"\n\nnamespace testing {\n\n// Definitions in the internal* namespaces are subject to change without notice.\n// DO NOT USE THEM IN USER CODE!\nnamespace internal {\n\ntemplate <typename T>\nvoid UniversalPrint(const T& value, ::std::ostream* os);\n\n// Used to print an STL-style container when the user doesn't define\n// a PrintTo() for it.\nstruct ContainerPrinter {\n  template <typename T,\n            typename = typename std::enable_if<\n                (sizeof(IsContainerTest<T>(0)) == sizeof(IsContainer)) &&\n                !IsRecursiveContainer<T>::value>::type>\n  static void PrintValue(const T& container, std::ostream* os) {\n    const size_t kMaxCount = 32;  // The maximum number of elements to print.\n    *os << '{';\n    size_t count = 0;\n    for (auto&& elem : container) {\n      if (count > 0) {\n        *os << ',';\n        if (count == kMaxCount) {  // Enough has been printed.\n          *os << \" ...\";\n          break;\n        }\n      }\n      *os << ' ';\n      // We cannot call PrintTo(elem, os) here as PrintTo() doesn't\n      // handle `elem` being a native array.\n      internal::UniversalPrint(elem, os);\n      ++count;\n    }\n\n    if (count > 0) {\n      *os << ' ';\n    }\n    *os << '}';\n  }\n};\n\n// Used to print a pointer that is neither a char pointer nor a member\n// pointer, when the user doesn't define PrintTo() for it.  (A member\n// variable pointer or member function pointer doesn't really point to\n// a location in the address space.  Their representation is\n// implementation-defined.  Therefore they will be printed as raw\n// bytes.)\nstruct FunctionPointerPrinter {\n  template <typename T, typename = typename std::enable_if<\n                            std::is_function<T>::value>::type>\n  static void PrintValue(T* p, ::std::ostream* os) {\n    if (p == nullptr) {\n      *os << \"NULL\";\n    } else {\n      // T is a function type, so '*os << p' doesn't do what we want\n      // (it just prints p as bool).  We want to print p as a const\n      // void*.\n      *os << reinterpret_cast<const void*>(p);\n    }\n  }\n};\n\nstruct PointerPrinter {\n  template <typename T>\n  static void PrintValue(T* p, ::std::ostream* os) {\n    if (p == nullptr) {\n      *os << \"NULL\";\n    } else {\n      // T is not a function type.  We just call << to print p,\n      // relying on ADL to pick up user-defined << for their pointer\n      // types, if any.\n      *os << p;\n    }\n  }\n};\n\nnamespace internal_stream_operator_without_lexical_name_lookup {\n\n// The presence of an operator<< here will terminate lexical scope lookup\n// straight away (even though it cannot be a match because of its argument\n// types). Thus, the two operator<< calls in StreamPrinter will find only ADL\n// candidates.\nstruct LookupBlocker {};\nvoid operator<<(LookupBlocker, LookupBlocker);\n\nstruct StreamPrinter {\n  template <typename T,\n            // Don't accept member pointers here. We'd print them via implicit\n            // conversion to bool, which isn't useful.\n            typename = typename std::enable_if<\n                !std::is_member_pointer<T>::value>::type,\n            // Only accept types for which we can find a streaming operator via\n            // ADL (possibly involving implicit conversions).\n            typename = decltype(std::declval<std::ostream&>()\n                                << std::declval<const T&>())>\n  static void PrintValue(const T& value, ::std::ostream* os) {\n    // Call streaming operator found by ADL, possibly with implicit conversions\n    // of the arguments.\n    *os << value;\n  }\n};\n\n}  // namespace internal_stream_operator_without_lexical_name_lookup\n\nstruct ProtobufPrinter {\n  // We print a protobuf using its ShortDebugString() when the string\n  // doesn't exceed this many characters; otherwise we print it using\n  // DebugString() for better readability.\n  static const size_t kProtobufOneLinerMaxLength = 50;\n\n  template <typename T,\n            typename = typename std::enable_if<\n                internal::HasDebugStringAndShortDebugString<T>::value>::type>\n  static void PrintValue(const T& value, ::std::ostream* os) {\n    std::string pretty_str = value.ShortDebugString();\n    if (pretty_str.length() > kProtobufOneLinerMaxLength) {\n      pretty_str = \"\\n\" + value.DebugString();\n    }\n    *os << (\"<\" + pretty_str + \">\");\n  }\n};\n\nstruct ConvertibleToIntegerPrinter {\n  // Since T has no << operator or PrintTo() but can be implicitly\n  // converted to BiggestInt, we print it as a BiggestInt.\n  //\n  // Most likely T is an enum type (either named or unnamed), in which\n  // case printing it as an integer is the desired behavior.  In case\n  // T is not an enum, printing it as an integer is the best we can do\n  // given that it has no user-defined printer.\n  static void PrintValue(internal::BiggestInt value, ::std::ostream* os) {\n    *os << value;\n  }\n};\n\nstruct ConvertibleToStringViewPrinter {\n#if GTEST_INTERNAL_HAS_STRING_VIEW\n  static void PrintValue(internal::StringView value, ::std::ostream* os) {\n    internal::UniversalPrint(value, os);\n  }\n#endif\n};\n\n// Prints the given number of bytes in the given object to the given\n// ostream.\nGTEST_API_ void PrintBytesInObjectTo(const unsigned char* obj_bytes,\n                                     size_t count, ::std::ostream* os);\nstruct RawBytesPrinter {\n  // SFINAE on `sizeof` to make sure we have a complete type.\n  template <typename T, size_t = sizeof(T)>\n  static void PrintValue(const T& value, ::std::ostream* os) {\n    PrintBytesInObjectTo(\n        static_cast<const unsigned char*>(\n            // Load bearing cast to void* to support iOS\n            reinterpret_cast<const void*>(std::addressof(value))),\n        sizeof(value), os);\n  }\n};\n\nstruct FallbackPrinter {\n  template <typename T>\n  static void PrintValue(const T&, ::std::ostream* os) {\n    *os << \"(incomplete type)\";\n  }\n};\n\n// Try every printer in order and return the first one that works.\ntemplate <typename T, typename E, typename Printer, typename... Printers>\nstruct FindFirstPrinter : FindFirstPrinter<T, E, Printers...> {};\n\ntemplate <typename T, typename Printer, typename... Printers>\nstruct FindFirstPrinter<\n    T, decltype(Printer::PrintValue(std::declval<const T&>(), nullptr)),\n    Printer, Printers...> {\n  using type = Printer;\n};\n\n// Select the best printer in the following order:\n//  - Print containers (they have begin/end/etc).\n//  - Print function pointers.\n//  - Print object pointers.\n//  - Use the stream operator, if available.\n//  - Print protocol buffers.\n//  - Print types convertible to BiggestInt.\n//  - Print types convertible to StringView, if available.\n//  - Fallback to printing the raw bytes of the object.\ntemplate <typename T>\nvoid PrintWithFallback(const T& value, ::std::ostream* os) {\n  using Printer = typename FindFirstPrinter<\n      T, void, ContainerPrinter, FunctionPointerPrinter, PointerPrinter,\n      internal_stream_operator_without_lexical_name_lookup::StreamPrinter,\n      ProtobufPrinter, ConvertibleToIntegerPrinter,\n      ConvertibleToStringViewPrinter, RawBytesPrinter, FallbackPrinter>::type;\n  Printer::PrintValue(value, os);\n}\n\n// FormatForComparison<ToPrint, OtherOperand>::Format(value) formats a\n// value of type ToPrint that is an operand of a comparison assertion\n// (e.g. ASSERT_EQ).  OtherOperand is the type of the other operand in\n// the comparison, and is used to help determine the best way to\n// format the value.  In particular, when the value is a C string\n// (char pointer) and the other operand is an STL string object, we\n// want to format the C string as a string, since we know it is\n// compared by value with the string object.  If the value is a char\n// pointer but the other operand is not an STL string object, we don't\n// know whether the pointer is supposed to point to a NUL-terminated\n// string, and thus want to print it as a pointer to be safe.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n\n// The default case.\ntemplate <typename ToPrint, typename OtherOperand>\nclass FormatForComparison {\n public:\n  static ::std::string Format(const ToPrint& value) {\n    return ::testing::PrintToString(value);\n  }\n};\n\n// Array.\ntemplate <typename ToPrint, size_t N, typename OtherOperand>\nclass FormatForComparison<ToPrint[N], OtherOperand> {\n public:\n  static ::std::string Format(const ToPrint* value) {\n    return FormatForComparison<const ToPrint*, OtherOperand>::Format(value);\n  }\n};\n\n// By default, print C string as pointers to be safe, as we don't know\n// whether they actually point to a NUL-terminated string.\n\n#define GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(CharType)                \\\n  template <typename OtherOperand>                                      \\\n  class FormatForComparison<CharType*, OtherOperand> {                  \\\n   public:                                                              \\\n    static ::std::string Format(CharType* value) {                      \\\n      return ::testing::PrintToString(static_cast<const void*>(value)); \\\n    }                                                                   \\\n  }\n\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char);\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char);\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(wchar_t);\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const wchar_t);\n#ifdef __cpp_lib_char8_t\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char8_t);\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char8_t);\n#endif\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char16_t);\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char16_t);\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(char32_t);\nGTEST_IMPL_FORMAT_C_STRING_AS_POINTER_(const char32_t);\n\n#undef GTEST_IMPL_FORMAT_C_STRING_AS_POINTER_\n\n// If a C string is compared with an STL string object, we know it's meant\n// to point to a NUL-terminated string, and thus can print it as a string.\n\n#define GTEST_IMPL_FORMAT_C_STRING_AS_STRING_(CharType, OtherStringType) \\\n  template <>                                                            \\\n  class FormatForComparison<CharType*, OtherStringType> {                \\\n   public:                                                               \\\n    static ::std::string Format(CharType* value) {                       \\\n      return ::testing::PrintToString(value);                            \\\n    }                                                                    \\\n  }\n\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char, ::std::string);\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char, ::std::string);\n#ifdef __cpp_char8_t\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char8_t, ::std::u8string);\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char8_t, ::std::u8string);\n#endif\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char16_t, ::std::u16string);\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char16_t, ::std::u16string);\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(char32_t, ::std::u32string);\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const char32_t, ::std::u32string);\n\n#if GTEST_HAS_STD_WSTRING\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(wchar_t, ::std::wstring);\nGTEST_IMPL_FORMAT_C_STRING_AS_STRING_(const wchar_t, ::std::wstring);\n#endif\n\n#undef GTEST_IMPL_FORMAT_C_STRING_AS_STRING_\n\n// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc)\n// operand to be used in a failure message.  The type (but not value)\n// of the other operand may affect the format.  This allows us to\n// print a char* as a raw pointer when it is compared against another\n// char* or void*, and print it as a C string when it is compared\n// against an std::string object, for example.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\ntemplate <typename T1, typename T2>\nstd::string FormatForComparisonFailureMessage(const T1& value,\n                                              const T2& /* other_operand */) {\n  return FormatForComparison<T1, T2>::Format(value);\n}\n\n// UniversalPrinter<T>::Print(value, ostream_ptr) prints the given\n// value to the given ostream.  The caller must ensure that\n// 'ostream_ptr' is not NULL, or the behavior is undefined.\n//\n// We define UniversalPrinter as a class template (as opposed to a\n// function template), as we need to partially specialize it for\n// reference types, which cannot be done with function templates.\ntemplate <typename T>\nclass UniversalPrinter;\n\n// Prints the given value using the << operator if it has one;\n// otherwise prints the bytes in it.  This is what\n// UniversalPrinter<T>::Print() does when PrintTo() is not specialized\n// or overloaded for type T.\n//\n// A user can override this behavior for a class type Foo by defining\n// an overload of PrintTo() in the namespace where Foo is defined.  We\n// give the user this option as sometimes defining a << operator for\n// Foo is not desirable (e.g. the coding style may prevent doing it,\n// or there is already a << operator but it doesn't do what the user\n// wants).\ntemplate <typename T>\nvoid PrintTo(const T& value, ::std::ostream* os) {\n  internal::PrintWithFallback(value, os);\n}\n\n// The following list of PrintTo() overloads tells\n// UniversalPrinter<T>::Print() how to print standard types (built-in\n// types, strings, plain arrays, and pointers).\n\n// Overloads for various char types.\nGTEST_API_ void PrintTo(unsigned char c, ::std::ostream* os);\nGTEST_API_ void PrintTo(signed char c, ::std::ostream* os);\ninline void PrintTo(char c, ::std::ostream* os) {\n  // When printing a plain char, we always treat it as unsigned.  This\n  // way, the output won't be affected by whether the compiler thinks\n  // char is signed or not.\n  PrintTo(static_cast<unsigned char>(c), os);\n}\n\n// Overloads for other simple built-in types.\ninline void PrintTo(bool x, ::std::ostream* os) {\n  *os << (x ? \"true\" : \"false\");\n}\n\n// Overload for wchar_t type.\n// Prints a wchar_t as a symbol if it is printable or as its internal\n// code otherwise and also as its decimal code (except for L'\\0').\n// The L'\\0' char is printed as \"L'\\\\0'\". The decimal code is printed\n// as signed integer when wchar_t is implemented by the compiler\n// as a signed type and is printed as an unsigned integer when wchar_t\n// is implemented as an unsigned type.\nGTEST_API_ void PrintTo(wchar_t wc, ::std::ostream* os);\n\nGTEST_API_ void PrintTo(char32_t c, ::std::ostream* os);\ninline void PrintTo(char16_t c, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<char32_t>(c), os);\n}\n#ifdef __cpp_char8_t\ninline void PrintTo(char8_t c, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<char32_t>(c), os);\n}\n#endif\n\n// gcc/clang __{u,}int128_t\n#if defined(__SIZEOF_INT128__)\nGTEST_API_ void PrintTo(__uint128_t v, ::std::ostream* os);\nGTEST_API_ void PrintTo(__int128_t v, ::std::ostream* os);\n#endif  // __SIZEOF_INT128__\n\n// Overloads for C strings.\nGTEST_API_ void PrintTo(const char* s, ::std::ostream* os);\ninline void PrintTo(char* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const char*>(s), os);\n}\n\n// signed/unsigned char is often used for representing binary data, so\n// we print pointers to it as void* to be safe.\ninline void PrintTo(const signed char* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const void*>(s), os);\n}\ninline void PrintTo(signed char* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const void*>(s), os);\n}\ninline void PrintTo(const unsigned char* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const void*>(s), os);\n}\ninline void PrintTo(unsigned char* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const void*>(s), os);\n}\n#ifdef __cpp_char8_t\n// Overloads for u8 strings.\nGTEST_API_ void PrintTo(const char8_t* s, ::std::ostream* os);\ninline void PrintTo(char8_t* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const char8_t*>(s), os);\n}\n#endif\n// Overloads for u16 strings.\nGTEST_API_ void PrintTo(const char16_t* s, ::std::ostream* os);\ninline void PrintTo(char16_t* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const char16_t*>(s), os);\n}\n// Overloads for u32 strings.\nGTEST_API_ void PrintTo(const char32_t* s, ::std::ostream* os);\ninline void PrintTo(char32_t* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const char32_t*>(s), os);\n}\n\n// MSVC can be configured to define wchar_t as a typedef of unsigned\n// short.  It defines _NATIVE_WCHAR_T_DEFINED when wchar_t is a native\n// type.  When wchar_t is a typedef, defining an overload for const\n// wchar_t* would cause unsigned short* be printed as a wide string,\n// possibly causing invalid memory accesses.\n#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)\n// Overloads for wide C strings\nGTEST_API_ void PrintTo(const wchar_t* s, ::std::ostream* os);\ninline void PrintTo(wchar_t* s, ::std::ostream* os) {\n  PrintTo(ImplicitCast_<const wchar_t*>(s), os);\n}\n#endif\n\n// Overload for C arrays.  Multi-dimensional arrays are printed\n// properly.\n\n// Prints the given number of elements in an array, without printing\n// the curly braces.\ntemplate <typename T>\nvoid PrintRawArrayTo(const T a[], size_t count, ::std::ostream* os) {\n  UniversalPrint(a[0], os);\n  for (size_t i = 1; i != count; i++) {\n    *os << \", \";\n    UniversalPrint(a[i], os);\n  }\n}\n\n// Overloads for ::std::string.\nGTEST_API_ void PrintStringTo(const ::std::string& s, ::std::ostream* os);\ninline void PrintTo(const ::std::string& s, ::std::ostream* os) {\n  PrintStringTo(s, os);\n}\n\n// Overloads for ::std::u8string\n#ifdef __cpp_char8_t\nGTEST_API_ void PrintU8StringTo(const ::std::u8string& s, ::std::ostream* os);\ninline void PrintTo(const ::std::u8string& s, ::std::ostream* os) {\n  PrintU8StringTo(s, os);\n}\n#endif\n\n// Overloads for ::std::u16string\nGTEST_API_ void PrintU16StringTo(const ::std::u16string& s, ::std::ostream* os);\ninline void PrintTo(const ::std::u16string& s, ::std::ostream* os) {\n  PrintU16StringTo(s, os);\n}\n\n// Overloads for ::std::u32string\nGTEST_API_ void PrintU32StringTo(const ::std::u32string& s, ::std::ostream* os);\ninline void PrintTo(const ::std::u32string& s, ::std::ostream* os) {\n  PrintU32StringTo(s, os);\n}\n\n// Overloads for ::std::wstring.\n#if GTEST_HAS_STD_WSTRING\nGTEST_API_ void PrintWideStringTo(const ::std::wstring& s, ::std::ostream* os);\ninline void PrintTo(const ::std::wstring& s, ::std::ostream* os) {\n  PrintWideStringTo(s, os);\n}\n#endif  // GTEST_HAS_STD_WSTRING\n\n#if GTEST_INTERNAL_HAS_STRING_VIEW\n// Overload for internal::StringView.\ninline void PrintTo(internal::StringView sp, ::std::ostream* os) {\n  PrintTo(::std::string(sp), os);\n}\n#endif  // GTEST_INTERNAL_HAS_STRING_VIEW\n\ninline void PrintTo(std::nullptr_t, ::std::ostream* os) { *os << \"(nullptr)\"; }\n\n#if GTEST_HAS_RTTI\ninline void PrintTo(const std::type_info& info, std::ostream* os) {\n  *os << internal::GetTypeName(info);\n}\n#endif  // GTEST_HAS_RTTI\n\ntemplate <typename T>\nvoid PrintTo(std::reference_wrapper<T> ref, ::std::ostream* os) {\n  UniversalPrinter<T&>::Print(ref.get(), os);\n}\n\ninline const void* VoidifyPointer(const void* p) { return p; }\ninline const void* VoidifyPointer(volatile const void* p) {\n  return const_cast<const void*>(p);\n}\n\ntemplate <typename T, typename Ptr>\nvoid PrintSmartPointer(const Ptr& ptr, std::ostream* os, char) {\n  if (ptr == nullptr) {\n    *os << \"(nullptr)\";\n  } else {\n    // We can't print the value. Just print the pointer..\n    *os << \"(\" << (VoidifyPointer)(ptr.get()) << \")\";\n  }\n}\ntemplate <typename T, typename Ptr,\n          typename = typename std::enable_if<!std::is_void<T>::value &&\n                                             !std::is_array<T>::value>::type>\nvoid PrintSmartPointer(const Ptr& ptr, std::ostream* os, int) {\n  if (ptr == nullptr) {\n    *os << \"(nullptr)\";\n  } else {\n    *os << \"(ptr = \" << (VoidifyPointer)(ptr.get()) << \", value = \";\n    UniversalPrinter<T>::Print(*ptr, os);\n    *os << \")\";\n  }\n}\n\ntemplate <typename T, typename D>\nvoid PrintTo(const std::unique_ptr<T, D>& ptr, std::ostream* os) {\n  (PrintSmartPointer<T>)(ptr, os, 0);\n}\n\ntemplate <typename T>\nvoid PrintTo(const std::shared_ptr<T>& ptr, std::ostream* os) {\n  (PrintSmartPointer<T>)(ptr, os, 0);\n}\n\n// Helper function for printing a tuple.  T must be instantiated with\n// a tuple type.\ntemplate <typename T>\nvoid PrintTupleTo(const T&, std::integral_constant<size_t, 0>,\n                  ::std::ostream*) {}\n\ntemplate <typename T, size_t I>\nvoid PrintTupleTo(const T& t, std::integral_constant<size_t, I>,\n                  ::std::ostream* os) {\n  PrintTupleTo(t, std::integral_constant<size_t, I - 1>(), os);\n  GTEST_INTENTIONAL_CONST_COND_PUSH_()\n  if (I > 1) {\n    GTEST_INTENTIONAL_CONST_COND_POP_()\n    *os << \", \";\n  }\n  UniversalPrinter<typename std::tuple_element<I - 1, T>::type>::Print(\n      std::get<I - 1>(t), os);\n}\n\ntemplate <typename... Types>\nvoid PrintTo(const ::std::tuple<Types...>& t, ::std::ostream* os) {\n  *os << \"(\";\n  PrintTupleTo(t, std::integral_constant<size_t, sizeof...(Types)>(), os);\n  *os << \")\";\n}\n\n// Overload for std::pair.\ntemplate <typename T1, typename T2>\nvoid PrintTo(const ::std::pair<T1, T2>& value, ::std::ostream* os) {\n  *os << '(';\n  // We cannot use UniversalPrint(value.first, os) here, as T1 may be\n  // a reference type.  The same for printing value.second.\n  UniversalPrinter<T1>::Print(value.first, os);\n  *os << \", \";\n  UniversalPrinter<T2>::Print(value.second, os);\n  *os << ')';\n}\n\n// Implements printing a non-reference type T by letting the compiler\n// pick the right overload of PrintTo() for T.\ntemplate <typename T>\nclass UniversalPrinter {\n public:\n  // MSVC warns about adding const to a function type, so we want to\n  // disable the warning.\n  GTEST_DISABLE_MSC_WARNINGS_PUSH_(4180)\n\n  // Note: we deliberately don't call this PrintTo(), as that name\n  // conflicts with ::testing::internal::PrintTo in the body of the\n  // function.\n  static void Print(const T& value, ::std::ostream* os) {\n    // By default, ::testing::internal::PrintTo() is used for printing\n    // the value.\n    //\n    // Thanks to Koenig look-up, if T is a class and has its own\n    // PrintTo() function defined in its namespace, that function will\n    // be visible here.  Since it is more specific than the generic ones\n    // in ::testing::internal, it will be picked by the compiler in the\n    // following statement - exactly what we want.\n    PrintTo(value, os);\n  }\n\n  GTEST_DISABLE_MSC_WARNINGS_POP_()\n};\n\n// Remove any const-qualifiers before passing a type to UniversalPrinter.\ntemplate <typename T>\nclass UniversalPrinter<const T> : public UniversalPrinter<T> {};\n\n#if GTEST_INTERNAL_HAS_ANY\n\n// Printer for std::any / absl::any\n\ntemplate <>\nclass UniversalPrinter<Any> {\n public:\n  static void Print(const Any& value, ::std::ostream* os) {\n    if (value.has_value()) {\n      *os << \"value of type \" << GetTypeName(value);\n    } else {\n      *os << \"no value\";\n    }\n  }\n\n private:\n  static std::string GetTypeName(const Any& value) {\n#if GTEST_HAS_RTTI\n    return internal::GetTypeName(value.type());\n#else\n    static_cast<void>(value);  // possibly unused\n    return \"<unknown_type>\";\n#endif  // GTEST_HAS_RTTI\n  }\n};\n\n#endif  // GTEST_INTERNAL_HAS_ANY\n\n#if GTEST_INTERNAL_HAS_OPTIONAL\n\n// Printer for std::optional / absl::optional\n\ntemplate <typename T>\nclass UniversalPrinter<Optional<T>> {\n public:\n  static void Print(const Optional<T>& value, ::std::ostream* os) {\n    *os << '(';\n    if (!value) {\n      *os << \"nullopt\";\n    } else {\n      UniversalPrint(*value, os);\n    }\n    *os << ')';\n  }\n};\n\ntemplate <>\nclass UniversalPrinter<decltype(Nullopt())> {\n public:\n  static void Print(decltype(Nullopt()), ::std::ostream* os) {\n    *os << \"(nullopt)\";\n  }\n};\n\n#endif  // GTEST_INTERNAL_HAS_OPTIONAL\n\n#if GTEST_INTERNAL_HAS_VARIANT\n\n// Printer for std::variant / absl::variant\n\ntemplate <typename... T>\nclass UniversalPrinter<Variant<T...>> {\n public:\n  static void Print(const Variant<T...>& value, ::std::ostream* os) {\n    *os << '(';\n#if GTEST_HAS_ABSL\n    absl::visit(Visitor{os, value.index()}, value);\n#else\n    std::visit(Visitor{os, value.index()}, value);\n#endif  // GTEST_HAS_ABSL\n    *os << ')';\n  }\n\n private:\n  struct Visitor {\n    template <typename U>\n    void operator()(const U& u) const {\n      *os << \"'\" << GetTypeName<U>() << \"(index = \" << index\n          << \")' with value \";\n      UniversalPrint(u, os);\n    }\n    ::std::ostream* os;\n    std::size_t index;\n  };\n};\n\n#endif  // GTEST_INTERNAL_HAS_VARIANT\n\n// UniversalPrintArray(begin, len, os) prints an array of 'len'\n// elements, starting at address 'begin'.\ntemplate <typename T>\nvoid UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) {\n  if (len == 0) {\n    *os << \"{}\";\n  } else {\n    *os << \"{ \";\n    const size_t kThreshold = 18;\n    const size_t kChunkSize = 8;\n    // If the array has more than kThreshold elements, we'll have to\n    // omit some details by printing only the first and the last\n    // kChunkSize elements.\n    if (len <= kThreshold) {\n      PrintRawArrayTo(begin, len, os);\n    } else {\n      PrintRawArrayTo(begin, kChunkSize, os);\n      *os << \", ..., \";\n      PrintRawArrayTo(begin + len - kChunkSize, kChunkSize, os);\n    }\n    *os << \" }\";\n  }\n}\n// This overload prints a (const) char array compactly.\nGTEST_API_ void UniversalPrintArray(const char* begin, size_t len,\n                                    ::std::ostream* os);\n\n#ifdef __cpp_char8_t\n// This overload prints a (const) char8_t array compactly.\nGTEST_API_ void UniversalPrintArray(const char8_t* begin, size_t len,\n                                    ::std::ostream* os);\n#endif\n\n// This overload prints a (const) char16_t array compactly.\nGTEST_API_ void UniversalPrintArray(const char16_t* begin, size_t len,\n                                    ::std::ostream* os);\n\n// This overload prints a (const) char32_t array compactly.\nGTEST_API_ void UniversalPrintArray(const char32_t* begin, size_t len,\n                                    ::std::ostream* os);\n\n// This overload prints a (const) wchar_t array compactly.\nGTEST_API_ void UniversalPrintArray(const wchar_t* begin, size_t len,\n                                    ::std::ostream* os);\n\n// Implements printing an array type T[N].\ntemplate <typename T, size_t N>\nclass UniversalPrinter<T[N]> {\n public:\n  // Prints the given array, omitting some elements when there are too\n  // many.\n  static void Print(const T (&a)[N], ::std::ostream* os) {\n    UniversalPrintArray(a, N, os);\n  }\n};\n\n// Implements printing a reference type T&.\ntemplate <typename T>\nclass UniversalPrinter<T&> {\n public:\n  // MSVC warns about adding const to a function type, so we want to\n  // disable the warning.\n  GTEST_DISABLE_MSC_WARNINGS_PUSH_(4180)\n\n  static void Print(const T& value, ::std::ostream* os) {\n    // Prints the address of the value.  We use reinterpret_cast here\n    // as static_cast doesn't compile when T is a function type.\n    *os << \"@\" << reinterpret_cast<const void*>(&value) << \" \";\n\n    // Then prints the value itself.\n    UniversalPrint(value, os);\n  }\n\n  GTEST_DISABLE_MSC_WARNINGS_POP_()\n};\n\n// Prints a value tersely: for a reference type, the referenced value\n// (but not the address) is printed; for a (const) char pointer, the\n// NUL-terminated string (but not the pointer) is printed.\n\ntemplate <typename T>\nclass UniversalTersePrinter {\n public:\n  static void Print(const T& value, ::std::ostream* os) {\n    UniversalPrint(value, os);\n  }\n};\ntemplate <typename T>\nclass UniversalTersePrinter<T&> {\n public:\n  static void Print(const T& value, ::std::ostream* os) {\n    UniversalPrint(value, os);\n  }\n};\ntemplate <typename T, size_t N>\nclass UniversalTersePrinter<T[N]> {\n public:\n  static void Print(const T (&value)[N], ::std::ostream* os) {\n    UniversalPrinter<T[N]>::Print(value, os);\n  }\n};\ntemplate <>\nclass UniversalTersePrinter<const char*> {\n public:\n  static void Print(const char* str, ::std::ostream* os) {\n    if (str == nullptr) {\n      *os << \"NULL\";\n    } else {\n      UniversalPrint(std::string(str), os);\n    }\n  }\n};\ntemplate <>\nclass UniversalTersePrinter<char*> : public UniversalTersePrinter<const char*> {\n};\n\n#ifdef __cpp_char8_t\ntemplate <>\nclass UniversalTersePrinter<const char8_t*> {\n public:\n  static void Print(const char8_t* str, ::std::ostream* os) {\n    if (str == nullptr) {\n      *os << \"NULL\";\n    } else {\n      UniversalPrint(::std::u8string(str), os);\n    }\n  }\n};\ntemplate <>\nclass UniversalTersePrinter<char8_t*>\n    : public UniversalTersePrinter<const char8_t*> {};\n#endif\n\ntemplate <>\nclass UniversalTersePrinter<const char16_t*> {\n public:\n  static void Print(const char16_t* str, ::std::ostream* os) {\n    if (str == nullptr) {\n      *os << \"NULL\";\n    } else {\n      UniversalPrint(::std::u16string(str), os);\n    }\n  }\n};\ntemplate <>\nclass UniversalTersePrinter<char16_t*>\n    : public UniversalTersePrinter<const char16_t*> {};\n\ntemplate <>\nclass UniversalTersePrinter<const char32_t*> {\n public:\n  static void Print(const char32_t* str, ::std::ostream* os) {\n    if (str == nullptr) {\n      *os << \"NULL\";\n    } else {\n      UniversalPrint(::std::u32string(str), os);\n    }\n  }\n};\ntemplate <>\nclass UniversalTersePrinter<char32_t*>\n    : public UniversalTersePrinter<const char32_t*> {};\n\n#if GTEST_HAS_STD_WSTRING\ntemplate <>\nclass UniversalTersePrinter<const wchar_t*> {\n public:\n  static void Print(const wchar_t* str, ::std::ostream* os) {\n    if (str == nullptr) {\n      *os << \"NULL\";\n    } else {\n      UniversalPrint(::std::wstring(str), os);\n    }\n  }\n};\n#endif\n\ntemplate <>\nclass UniversalTersePrinter<wchar_t*> {\n public:\n  static void Print(wchar_t* str, ::std::ostream* os) {\n    UniversalTersePrinter<const wchar_t*>::Print(str, os);\n  }\n};\n\ntemplate <typename T>\nvoid UniversalTersePrint(const T& value, ::std::ostream* os) {\n  UniversalTersePrinter<T>::Print(value, os);\n}\n\n// Prints a value using the type inferred by the compiler.  The\n// difference between this and UniversalTersePrint() is that for a\n// (const) char pointer, this prints both the pointer and the\n// NUL-terminated string.\ntemplate <typename T>\nvoid UniversalPrint(const T& value, ::std::ostream* os) {\n  // A workarond for the bug in VC++ 7.1 that prevents us from instantiating\n  // UniversalPrinter with T directly.\n  typedef T T1;\n  UniversalPrinter<T1>::Print(value, os);\n}\n\ntypedef ::std::vector<::std::string> Strings;\n\n// Tersely prints the first N fields of a tuple to a string vector,\n// one element for each field.\ntemplate <typename Tuple>\nvoid TersePrintPrefixToStrings(const Tuple&, std::integral_constant<size_t, 0>,\n                               Strings*) {}\ntemplate <typename Tuple, size_t I>\nvoid TersePrintPrefixToStrings(const Tuple& t,\n                               std::integral_constant<size_t, I>,\n                               Strings* strings) {\n  TersePrintPrefixToStrings(t, std::integral_constant<size_t, I - 1>(),\n                            strings);\n  ::std::stringstream ss;\n  UniversalTersePrint(std::get<I - 1>(t), &ss);\n  strings->push_back(ss.str());\n}\n\n// Prints the fields of a tuple tersely to a string vector, one\n// element for each field.  See the comment before\n// UniversalTersePrint() for how we define \"tersely\".\ntemplate <typename Tuple>\nStrings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) {\n  Strings result;\n  TersePrintPrefixToStrings(\n      value, std::integral_constant<size_t, std::tuple_size<Tuple>::value>(),\n      &result);\n  return result;\n}\n\n}  // namespace internal\n\ntemplate <typename T>\n::std::string PrintToString(const T& value) {\n  ::std::stringstream ss;\n  internal::UniversalTersePrinter<T>::Print(value, &ss);\n  return ss.str();\n}\n\n}  // namespace testing\n\n// Include any custom printer added by the local installation.\n// We must include this header at the end to make sure it can use the\n// declarations from this file.\n#include \"gtest/internal/custom/gtest-printers.h\"\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_PRINTERS_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest-spi.h",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Utilities for testing Google Test itself and code that uses Google Test\n// (e.g. frameworks built on top of Google Test).\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_SPI_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_SPI_H_\n\n#include \"gtest/gtest.h\"\n\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \\\n/* class A needs to have dll-interface to be used by clients of class B */)\n\nnamespace testing {\n\n// This helper class can be used to mock out Google Test failure reporting\n// so that we can test Google Test or code that builds on Google Test.\n//\n// An object of this class appends a TestPartResult object to the\n// TestPartResultArray object given in the constructor whenever a Google Test\n// failure is reported. It can either intercept only failures that are\n// generated in the same thread that created this object or it can intercept\n// all generated failures. The scope of this mock object can be controlled with\n// the second argument to the two arguments constructor.\nclass GTEST_API_ ScopedFakeTestPartResultReporter\n    : public TestPartResultReporterInterface {\n public:\n  // The two possible mocking modes of this object.\n  enum InterceptMode {\n    INTERCEPT_ONLY_CURRENT_THREAD,  // Intercepts only thread local failures.\n    INTERCEPT_ALL_THREADS           // Intercepts all failures.\n  };\n\n  // The c'tor sets this object as the test part result reporter used\n  // by Google Test.  The 'result' parameter specifies where to report the\n  // results. This reporter will only catch failures generated in the current\n  // thread. DEPRECATED\n  explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result);\n\n  // Same as above, but you can choose the interception scope of this object.\n  ScopedFakeTestPartResultReporter(InterceptMode intercept_mode,\n                                   TestPartResultArray* result);\n\n  // The d'tor restores the previous test part result reporter.\n  ~ScopedFakeTestPartResultReporter() override;\n\n  // Appends the TestPartResult object to the TestPartResultArray\n  // received in the constructor.\n  //\n  // This method is from the TestPartResultReporterInterface\n  // interface.\n  void ReportTestPartResult(const TestPartResult& result) override;\n\n private:\n  void Init();\n\n  const InterceptMode intercept_mode_;\n  TestPartResultReporterInterface* old_reporter_;\n  TestPartResultArray* const result_;\n\n  ScopedFakeTestPartResultReporter(const ScopedFakeTestPartResultReporter&) =\n      delete;\n  ScopedFakeTestPartResultReporter& operator=(\n      const ScopedFakeTestPartResultReporter&) = delete;\n};\n\nnamespace internal {\n\n// A helper class for implementing EXPECT_FATAL_FAILURE() and\n// EXPECT_NONFATAL_FAILURE().  Its destructor verifies that the given\n// TestPartResultArray contains exactly one failure that has the given\n// type and contains the given substring.  If that's not the case, a\n// non-fatal failure will be generated.\nclass GTEST_API_ SingleFailureChecker {\n public:\n  // The constructor remembers the arguments.\n  SingleFailureChecker(const TestPartResultArray* results,\n                       TestPartResult::Type type, const std::string& substr);\n  ~SingleFailureChecker();\n\n private:\n  const TestPartResultArray* const results_;\n  const TestPartResult::Type type_;\n  const std::string substr_;\n\n  SingleFailureChecker(const SingleFailureChecker&) = delete;\n  SingleFailureChecker& operator=(const SingleFailureChecker&) = delete;\n};\n\n}  // namespace internal\n\n}  // namespace testing\n\nGTEST_DISABLE_MSC_WARNINGS_POP_()  //  4251\n\n// A set of macros for testing Google Test assertions or code that's expected\n// to generate Google Test fatal failures (e.g. a failure from an ASSERT_EQ, but\n// not a non-fatal failure, as from EXPECT_EQ).  It verifies that the given\n// statement will cause exactly one fatal Google Test failure with 'substr'\n// being part of the failure message.\n//\n// There are two different versions of this macro. EXPECT_FATAL_FAILURE only\n// affects and considers failures generated in the current thread and\n// EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads.\n//\n// The verification of the assertion is done correctly even when the statement\n// throws an exception or aborts the current function.\n//\n// Known restrictions:\n//   - 'statement' cannot reference local non-static variables or\n//     non-static members of the current object.\n//   - 'statement' cannot return a value.\n//   - You cannot stream a failure message to this macro.\n//\n// Note that even though the implementations of the following two\n// macros are much alike, we cannot refactor them to use a common\n// helper macro, due to some peculiarity in how the preprocessor\n// works.  The AcceptsMacroThatExpandsToUnprotectedComma test in\n// gtest_unittest.cc will fail to compile if we do that.\n#define EXPECT_FATAL_FAILURE(statement, substr)                               \\\n  do {                                                                        \\\n    class GTestExpectFatalFailureHelper {                                     \\\n     public:                                                                  \\\n      static void Execute() { statement; }                                    \\\n    };                                                                        \\\n    ::testing::TestPartResultArray gtest_failures;                            \\\n    ::testing::internal::SingleFailureChecker gtest_checker(                  \\\n        &gtest_failures, ::testing::TestPartResult::kFatalFailure, (substr)); \\\n    {                                                                         \\\n      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(             \\\n          ::testing::ScopedFakeTestPartResultReporter::                       \\\n              INTERCEPT_ONLY_CURRENT_THREAD,                                  \\\n          &gtest_failures);                                                   \\\n      GTestExpectFatalFailureHelper::Execute();                               \\\n    }                                                                         \\\n  } while (::testing::internal::AlwaysFalse())\n\n#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr)                \\\n  do {                                                                        \\\n    class GTestExpectFatalFailureHelper {                                     \\\n     public:                                                                  \\\n      static void Execute() { statement; }                                    \\\n    };                                                                        \\\n    ::testing::TestPartResultArray gtest_failures;                            \\\n    ::testing::internal::SingleFailureChecker gtest_checker(                  \\\n        &gtest_failures, ::testing::TestPartResult::kFatalFailure, (substr)); \\\n    {                                                                         \\\n      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(             \\\n          ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, \\\n          &gtest_failures);                                                   \\\n      GTestExpectFatalFailureHelper::Execute();                               \\\n    }                                                                         \\\n  } while (::testing::internal::AlwaysFalse())\n\n// A macro for testing Google Test assertions or code that's expected to\n// generate Google Test non-fatal failures (e.g. a failure from an EXPECT_EQ,\n// but not from an ASSERT_EQ). It asserts that the given statement will cause\n// exactly one non-fatal Google Test failure with 'substr' being part of the\n// failure message.\n//\n// There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only\n// affects and considers failures generated in the current thread and\n// EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads.\n//\n// 'statement' is allowed to reference local variables and members of\n// the current object.\n//\n// The verification of the assertion is done correctly even when the statement\n// throws an exception or aborts the current function.\n//\n// Known restrictions:\n//   - You cannot stream a failure message to this macro.\n//\n// Note that even though the implementations of the following two\n// macros are much alike, we cannot refactor them to use a common\n// helper macro, due to some peculiarity in how the preprocessor\n// works.  If we do that, the code won't compile when the user gives\n// EXPECT_NONFATAL_FAILURE() a statement that contains a macro that\n// expands to code containing an unprotected comma.  The\n// AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc\n// catches that.\n//\n// For the same reason, we have to write\n//   if (::testing::internal::AlwaysTrue()) { statement; }\n// instead of\n//   GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)\n// to avoid an MSVC warning on unreachable code.\n#define EXPECT_NONFATAL_FAILURE(statement, substr)                    \\\n  do {                                                                \\\n    ::testing::TestPartResultArray gtest_failures;                    \\\n    ::testing::internal::SingleFailureChecker gtest_checker(          \\\n        &gtest_failures, ::testing::TestPartResult::kNonFatalFailure, \\\n        (substr));                                                    \\\n    {                                                                 \\\n      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(     \\\n          ::testing::ScopedFakeTestPartResultReporter::               \\\n              INTERCEPT_ONLY_CURRENT_THREAD,                          \\\n          &gtest_failures);                                           \\\n      if (::testing::internal::AlwaysTrue()) {                        \\\n        statement;                                                    \\\n      }                                                               \\\n    }                                                                 \\\n  } while (::testing::internal::AlwaysFalse())\n\n#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr)             \\\n  do {                                                                        \\\n    ::testing::TestPartResultArray gtest_failures;                            \\\n    ::testing::internal::SingleFailureChecker gtest_checker(                  \\\n        &gtest_failures, ::testing::TestPartResult::kNonFatalFailure,         \\\n        (substr));                                                            \\\n    {                                                                         \\\n      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(             \\\n          ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, \\\n          &gtest_failures);                                                   \\\n      if (::testing::internal::AlwaysTrue()) {                                \\\n        statement;                                                            \\\n      }                                                                       \\\n    }                                                                         \\\n  } while (::testing::internal::AlwaysFalse())\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_SPI_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest-test-part.h",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_TEST_PART_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_TEST_PART_H_\n\n#include <iosfwd>\n#include <vector>\n\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-string.h\"\n\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \\\n/* class A needs to have dll-interface to be used by clients of class B */)\n\nnamespace testing {\n\n// A copyable object representing the result of a test part (i.e. an\n// assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()).\n//\n// Don't inherit from TestPartResult as its destructor is not virtual.\nclass GTEST_API_ TestPartResult {\n public:\n  // The possible outcomes of a test part (i.e. an assertion or an\n  // explicit SUCCEED(), FAIL(), or ADD_FAILURE()).\n  enum Type {\n    kSuccess,          // Succeeded.\n    kNonFatalFailure,  // Failed but the test can continue.\n    kFatalFailure,     // Failed and the test should be terminated.\n    kSkip              // Skipped.\n  };\n\n  // C'tor.  TestPartResult does NOT have a default constructor.\n  // Always use this constructor (with parameters) to create a\n  // TestPartResult object.\n  TestPartResult(Type a_type, const char* a_file_name, int a_line_number,\n                 const char* a_message)\n      : type_(a_type),\n        file_name_(a_file_name == nullptr ? \"\" : a_file_name),\n        line_number_(a_line_number),\n        summary_(ExtractSummary(a_message)),\n        message_(a_message) {}\n\n  // Gets the outcome of the test part.\n  Type type() const { return type_; }\n\n  // Gets the name of the source file where the test part took place, or\n  // NULL if it's unknown.\n  const char* file_name() const {\n    return file_name_.empty() ? nullptr : file_name_.c_str();\n  }\n\n  // Gets the line in the source file where the test part took place,\n  // or -1 if it's unknown.\n  int line_number() const { return line_number_; }\n\n  // Gets the summary of the failure message.\n  const char* summary() const { return summary_.c_str(); }\n\n  // Gets the message associated with the test part.\n  const char* message() const { return message_.c_str(); }\n\n  // Returns true if and only if the test part was skipped.\n  bool skipped() const { return type_ == kSkip; }\n\n  // Returns true if and only if the test part passed.\n  bool passed() const { return type_ == kSuccess; }\n\n  // Returns true if and only if the test part non-fatally failed.\n  bool nonfatally_failed() const { return type_ == kNonFatalFailure; }\n\n  // Returns true if and only if the test part fatally failed.\n  bool fatally_failed() const { return type_ == kFatalFailure; }\n\n  // Returns true if and only if the test part failed.\n  bool failed() const { return fatally_failed() || nonfatally_failed(); }\n\n private:\n  Type type_;\n\n  // Gets the summary of the failure message by omitting the stack\n  // trace in it.\n  static std::string ExtractSummary(const char* message);\n\n  // The name of the source file where the test part took place, or\n  // \"\" if the source file is unknown.\n  std::string file_name_;\n  // The line in the source file where the test part took place, or -1\n  // if the line number is unknown.\n  int line_number_;\n  std::string summary_;  // The test failure summary.\n  std::string message_;  // The test failure message.\n};\n\n// Prints a TestPartResult object.\nstd::ostream& operator<<(std::ostream& os, const TestPartResult& result);\n\n// An array of TestPartResult objects.\n//\n// Don't inherit from TestPartResultArray as its destructor is not\n// virtual.\nclass GTEST_API_ TestPartResultArray {\n public:\n  TestPartResultArray() {}\n\n  // Appends the given TestPartResult to the array.\n  void Append(const TestPartResult& result);\n\n  // Returns the TestPartResult at the given index (0-based).\n  const TestPartResult& GetTestPartResult(int index) const;\n\n  // Returns the number of TestPartResult objects in the array.\n  int size() const;\n\n private:\n  std::vector<TestPartResult> array_;\n\n  TestPartResultArray(const TestPartResultArray&) = delete;\n  TestPartResultArray& operator=(const TestPartResultArray&) = delete;\n};\n\n// This interface knows how to report a test part result.\nclass GTEST_API_ TestPartResultReporterInterface {\n public:\n  virtual ~TestPartResultReporterInterface() {}\n\n  virtual void ReportTestPartResult(const TestPartResult& result) = 0;\n};\n\nnamespace internal {\n\n// This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a\n// statement generates new fatal failures. To do so it registers itself as the\n// current test part result reporter. Besides checking if fatal failures were\n// reported, it only delegates the reporting to the former result reporter.\n// The original result reporter is restored in the destructor.\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nclass GTEST_API_ HasNewFatalFailureHelper\n    : public TestPartResultReporterInterface {\n public:\n  HasNewFatalFailureHelper();\n  ~HasNewFatalFailureHelper() override;\n  void ReportTestPartResult(const TestPartResult& result) override;\n  bool has_new_fatal_failure() const { return has_new_fatal_failure_; }\n\n private:\n  bool has_new_fatal_failure_;\n  TestPartResultReporterInterface* original_reporter_;\n\n  HasNewFatalFailureHelper(const HasNewFatalFailureHelper&) = delete;\n  HasNewFatalFailureHelper& operator=(const HasNewFatalFailureHelper&) = delete;\n};\n\n}  // namespace internal\n\n}  // namespace testing\n\nGTEST_DISABLE_MSC_WARNINGS_POP_()  //  4251\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_TEST_PART_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest-typed-test.h",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_\n\n// This header implements typed tests and type-parameterized tests.\n\n// Typed (aka type-driven) tests repeat the same test for types in a\n// list.  You must know which types you want to test with when writing\n// typed tests. Here's how you do it:\n\n#if 0\n\n// First, define a fixture class template.  It should be parameterized\n// by a type.  Remember to derive it from testing::Test.\ntemplate <typename T>\nclass FooTest : public testing::Test {\n public:\n  ...\n  typedef std::list<T> List;\n  static T shared_;\n  T value_;\n};\n\n// Next, associate a list of types with the test suite, which will be\n// repeated for each type in the list.  The typedef is necessary for\n// the macro to parse correctly.\ntypedef testing::Types<char, int, unsigned int> MyTypes;\nTYPED_TEST_SUITE(FooTest, MyTypes);\n\n// If the type list contains only one type, you can write that type\n// directly without Types<...>:\n//   TYPED_TEST_SUITE(FooTest, int);\n\n// Then, use TYPED_TEST() instead of TEST_F() to define as many typed\n// tests for this test suite as you want.\nTYPED_TEST(FooTest, DoesBlah) {\n  // Inside a test, refer to the special name TypeParam to get the type\n  // parameter.  Since we are inside a derived class template, C++ requires\n  // us to visit the members of FooTest via 'this'.\n  TypeParam n = this->value_;\n\n  // To visit static members of the fixture, add the TestFixture::\n  // prefix.\n  n += TestFixture::shared_;\n\n  // To refer to typedefs in the fixture, add the \"typename\n  // TestFixture::\" prefix.\n  typename TestFixture::List values;\n  values.push_back(n);\n  ...\n}\n\nTYPED_TEST(FooTest, HasPropertyA) { ... }\n\n// TYPED_TEST_SUITE takes an optional third argument which allows to specify a\n// class that generates custom test name suffixes based on the type. This should\n// be a class which has a static template function GetName(int index) returning\n// a string for each type. The provided integer index equals the index of the\n// type in the provided type list. In many cases the index can be ignored.\n//\n// For example:\n//   class MyTypeNames {\n//    public:\n//     template <typename T>\n//     static std::string GetName(int) {\n//       if (std::is_same<T, char>()) return \"char\";\n//       if (std::is_same<T, int>()) return \"int\";\n//       if (std::is_same<T, unsigned int>()) return \"unsignedInt\";\n//     }\n//   };\n//   TYPED_TEST_SUITE(FooTest, MyTypes, MyTypeNames);\n\n#endif  // 0\n\n// Type-parameterized tests are abstract test patterns parameterized\n// by a type.  Compared with typed tests, type-parameterized tests\n// allow you to define the test pattern without knowing what the type\n// parameters are.  The defined pattern can be instantiated with\n// different types any number of times, in any number of translation\n// units.\n//\n// If you are designing an interface or concept, you can define a\n// suite of type-parameterized tests to verify properties that any\n// valid implementation of the interface/concept should have.  Then,\n// each implementation can easily instantiate the test suite to verify\n// that it conforms to the requirements, without having to write\n// similar tests repeatedly.  Here's an example:\n\n#if 0\n\n// First, define a fixture class template.  It should be parameterized\n// by a type.  Remember to derive it from testing::Test.\ntemplate <typename T>\nclass FooTest : public testing::Test {\n  ...\n};\n\n// Next, declare that you will define a type-parameterized test suite\n// (the _P suffix is for \"parameterized\" or \"pattern\", whichever you\n// prefer):\nTYPED_TEST_SUITE_P(FooTest);\n\n// Then, use TYPED_TEST_P() to define as many type-parameterized tests\n// for this type-parameterized test suite as you want.\nTYPED_TEST_P(FooTest, DoesBlah) {\n  // Inside a test, refer to TypeParam to get the type parameter.\n  TypeParam n = 0;\n  ...\n}\n\nTYPED_TEST_P(FooTest, HasPropertyA) { ... }\n\n// Now the tricky part: you need to register all test patterns before\n// you can instantiate them.  The first argument of the macro is the\n// test suite name; the rest are the names of the tests in this test\n// case.\nREGISTER_TYPED_TEST_SUITE_P(FooTest,\n                            DoesBlah, HasPropertyA);\n\n// Finally, you are free to instantiate the pattern with the types you\n// want.  If you put the above code in a header file, you can #include\n// it in multiple C++ source files and instantiate it multiple times.\n//\n// To distinguish different instances of the pattern, the first\n// argument to the INSTANTIATE_* macro is a prefix that will be added\n// to the actual test suite name.  Remember to pick unique prefixes for\n// different instances.\ntypedef testing::Types<char, int, unsigned int> MyTypes;\nINSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);\n\n// If the type list contains only one type, you can write that type\n// directly without Types<...>:\n//   INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, int);\n//\n// Similar to the optional argument of TYPED_TEST_SUITE above,\n// INSTANTIATE_TEST_SUITE_P takes an optional fourth argument which allows to\n// generate custom names.\n//   INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes, MyTypeNames);\n\n#endif  // 0\n\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-port.h\"\n#include \"gtest/internal/gtest-type-util.h\"\n\n// Implements typed tests.\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Expands to the name of the typedef for the type parameters of the\n// given test suite.\n#define GTEST_TYPE_PARAMS_(TestSuiteName) gtest_type_params_##TestSuiteName##_\n\n// Expands to the name of the typedef for the NameGenerator, responsible for\n// creating the suffixes of the name.\n#define GTEST_NAME_GENERATOR_(TestSuiteName) \\\n  gtest_type_params_##TestSuiteName##_NameGenerator\n\n#define TYPED_TEST_SUITE(CaseName, Types, ...)                          \\\n  typedef ::testing::internal::GenerateTypeList<Types>::type            \\\n      GTEST_TYPE_PARAMS_(CaseName);                                     \\\n  typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \\\n  GTEST_NAME_GENERATOR_(CaseName)\n\n#define TYPED_TEST(CaseName, TestName)                                        \\\n  static_assert(sizeof(GTEST_STRINGIFY_(TestName)) > 1,                       \\\n                \"test-name must not be empty\");                               \\\n  template <typename gtest_TypeParam_>                                        \\\n  class GTEST_TEST_CLASS_NAME_(CaseName, TestName)                            \\\n      : public CaseName<gtest_TypeParam_> {                                   \\\n   private:                                                                   \\\n    typedef CaseName<gtest_TypeParam_> TestFixture;                           \\\n    typedef gtest_TypeParam_ TypeParam;                                       \\\n    void TestBody() override;                                                 \\\n  };                                                                          \\\n  static bool gtest_##CaseName##_##TestName##_registered_                     \\\n      GTEST_ATTRIBUTE_UNUSED_ = ::testing::internal::TypeParameterizedTest<   \\\n          CaseName,                                                           \\\n          ::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName,   \\\n                                                                  TestName)>, \\\n          GTEST_TYPE_PARAMS_(                                                 \\\n              CaseName)>::Register(\"\",                                        \\\n                                   ::testing::internal::CodeLocation(         \\\n                                       __FILE__, __LINE__),                   \\\n                                   GTEST_STRINGIFY_(CaseName),                \\\n                                   GTEST_STRINGIFY_(TestName), 0,             \\\n                                   ::testing::internal::GenerateNames<        \\\n                                       GTEST_NAME_GENERATOR_(CaseName),       \\\n                                       GTEST_TYPE_PARAMS_(CaseName)>());      \\\n  template <typename gtest_TypeParam_>                                        \\\n  void GTEST_TEST_CLASS_NAME_(CaseName,                                       \\\n                              TestName)<gtest_TypeParam_>::TestBody()\n\n// Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n#define TYPED_TEST_CASE                                                \\\n  static_assert(::testing::internal::TypedTestCaseIsDeprecated(), \"\"); \\\n  TYPED_TEST_SUITE\n#endif  // GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n// Implements type-parameterized tests.\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Expands to the namespace name that the type-parameterized tests for\n// the given type-parameterized test suite are defined in.  The exact\n// name of the namespace is subject to change without notice.\n#define GTEST_SUITE_NAMESPACE_(TestSuiteName) gtest_suite_##TestSuiteName##_\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Expands to the name of the variable used to remember the names of\n// the defined tests in the given test suite.\n#define GTEST_TYPED_TEST_SUITE_P_STATE_(TestSuiteName) \\\n  gtest_typed_test_suite_p_state_##TestSuiteName##_\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY.\n//\n// Expands to the name of the variable used to remember the names of\n// the registered tests in the given test suite.\n#define GTEST_REGISTERED_TEST_NAMES_(TestSuiteName) \\\n  gtest_registered_test_names_##TestSuiteName##_\n\n// The variables defined in the type-parameterized test macros are\n// static as typically these macros are used in a .h file that can be\n// #included in multiple translation units linked together.\n#define TYPED_TEST_SUITE_P(SuiteName)              \\\n  static ::testing::internal::TypedTestSuitePState \\\n  GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName)\n\n// Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n#define TYPED_TEST_CASE_P                                                 \\\n  static_assert(::testing::internal::TypedTestCase_P_IsDeprecated(), \"\"); \\\n  TYPED_TEST_SUITE_P\n#endif  // GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n#define TYPED_TEST_P(SuiteName, TestName)                             \\\n  namespace GTEST_SUITE_NAMESPACE_(SuiteName) {                       \\\n    template <typename gtest_TypeParam_>                              \\\n    class TestName : public SuiteName<gtest_TypeParam_> {             \\\n     private:                                                         \\\n      typedef SuiteName<gtest_TypeParam_> TestFixture;                \\\n      typedef gtest_TypeParam_ TypeParam;                             \\\n      void TestBody() override;                                       \\\n    };                                                                \\\n    static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \\\n        GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName(       \\\n            __FILE__, __LINE__, GTEST_STRINGIFY_(SuiteName),          \\\n            GTEST_STRINGIFY_(TestName));                              \\\n  }                                                                   \\\n  template <typename gtest_TypeParam_>                                \\\n  void GTEST_SUITE_NAMESPACE_(                                        \\\n      SuiteName)::TestName<gtest_TypeParam_>::TestBody()\n\n// Note: this won't work correctly if the trailing arguments are macros.\n#define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...)                         \\\n  namespace GTEST_SUITE_NAMESPACE_(SuiteName) {                             \\\n    typedef ::testing::internal::Templates<__VA_ARGS__> gtest_AllTests_;    \\\n  }                                                                         \\\n  static const char* const GTEST_REGISTERED_TEST_NAMES_(                    \\\n      SuiteName) GTEST_ATTRIBUTE_UNUSED_ =                                  \\\n      GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \\\n          GTEST_STRINGIFY_(SuiteName), __FILE__, __LINE__, #__VA_ARGS__)\n\n// Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n#define REGISTER_TYPED_TEST_CASE_P                                           \\\n  static_assert(::testing::internal::RegisterTypedTestCase_P_IsDeprecated(), \\\n                \"\");                                                         \\\n  REGISTER_TYPED_TEST_SUITE_P\n#endif  // GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n#define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...)     \\\n  static_assert(sizeof(GTEST_STRINGIFY_(Prefix)) > 1,                     \\\n                \"test-suit-prefix must not be empty\");                    \\\n  static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ =      \\\n      ::testing::internal::TypeParameterizedTestSuite<                    \\\n          SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_,  \\\n          ::testing::internal::GenerateTypeList<Types>::type>::           \\\n          Register(GTEST_STRINGIFY_(Prefix),                              \\\n                   ::testing::internal::CodeLocation(__FILE__, __LINE__), \\\n                   &GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName),           \\\n                   GTEST_STRINGIFY_(SuiteName),                           \\\n                   GTEST_REGISTERED_TEST_NAMES_(SuiteName),               \\\n                   ::testing::internal::GenerateNames<                    \\\n                       ::testing::internal::NameGeneratorSelector<        \\\n                           __VA_ARGS__>::type,                            \\\n                       ::testing::internal::GenerateTypeList<Types>::type>())\n\n// Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n#define INSTANTIATE_TYPED_TEST_CASE_P                                      \\\n  static_assert(                                                           \\\n      ::testing::internal::InstantiateTypedTestCase_P_IsDeprecated(), \"\"); \\\n  INSTANTIATE_TYPED_TEST_SUITE_P\n#endif  // GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// The Google C++ Testing and Mocking Framework (Google Test)\n//\n// This header file defines the public API for Google Test.  It should be\n// included by any test program that uses Google Test.\n//\n// IMPORTANT NOTE: Due to limitation of the C++ language, we have to\n// leave some internal implementation details in this header file.\n// They are clearly marked by comments like this:\n//\n//   // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n//\n// Such code is NOT meant to be used by a user directly, and is subject\n// to CHANGE WITHOUT NOTICE.  Therefore DO NOT DEPEND ON IT in a user\n// program!\n//\n// Acknowledgment: Google Test borrowed the idea of automatic test\n// registration from Barthelemy Dagenais' (barthelemy@prologique.com)\n// easyUnit framework.\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_H_\n\n#include <cstddef>\n#include <limits>\n#include <memory>\n#include <ostream>\n#include <type_traits>\n#include <vector>\n\n#include \"gtest/gtest-assertion-result.h\"\n#include \"gtest/gtest-death-test.h\"\n#include \"gtest/gtest-matchers.h\"\n#include \"gtest/gtest-message.h\"\n#include \"gtest/gtest-param-test.h\"\n#include \"gtest/gtest-printers.h\"\n#include \"gtest/gtest-test-part.h\"\n#include \"gtest/gtest-typed-test.h\"\n#include \"gtest/gtest_pred_impl.h\"\n#include \"gtest/gtest_prod.h\"\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-string.h\"\n\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \\\n/* class A needs to have dll-interface to be used by clients of class B */)\n\n// Declares the flags.\n\n// This flag temporary enables the disabled tests.\nGTEST_DECLARE_bool_(also_run_disabled_tests);\n\n// This flag brings the debugger on an assertion failure.\nGTEST_DECLARE_bool_(break_on_failure);\n\n// This flag controls whether Google Test catches all test-thrown exceptions\n// and logs them as failures.\nGTEST_DECLARE_bool_(catch_exceptions);\n\n// This flag enables using colors in terminal output. Available values are\n// \"yes\" to enable colors, \"no\" (disable colors), or \"auto\" (the default)\n// to let Google Test decide.\nGTEST_DECLARE_string_(color);\n\n// This flag controls whether the test runner should continue execution past\n// first failure.\nGTEST_DECLARE_bool_(fail_fast);\n\n// This flag sets up the filter to select by name using a glob pattern\n// the tests to run. If the filter is not given all tests are executed.\nGTEST_DECLARE_string_(filter);\n\n// This flag controls whether Google Test installs a signal handler that dumps\n// debugging information when fatal signals are raised.\nGTEST_DECLARE_bool_(install_failure_signal_handler);\n\n// This flag causes the Google Test to list tests. None of the tests listed\n// are actually run if the flag is provided.\nGTEST_DECLARE_bool_(list_tests);\n\n// This flag controls whether Google Test emits a detailed XML report to a file\n// in addition to its normal textual output.\nGTEST_DECLARE_string_(output);\n\n// This flags control whether Google Test prints only test failures.\nGTEST_DECLARE_bool_(brief);\n\n// This flags control whether Google Test prints the elapsed time for each\n// test.\nGTEST_DECLARE_bool_(print_time);\n\n// This flags control whether Google Test prints UTF8 characters as text.\nGTEST_DECLARE_bool_(print_utf8);\n\n// This flag specifies the random number seed.\nGTEST_DECLARE_int32_(random_seed);\n\n// This flag sets how many times the tests are repeated. The default value\n// is 1. If the value is -1 the tests are repeating forever.\nGTEST_DECLARE_int32_(repeat);\n\n// This flag controls whether Google Test Environments are recreated for each\n// repeat of the tests. The default value is true. If set to false the global\n// test Environment objects are only set up once, for the first iteration, and\n// only torn down once, for the last.\nGTEST_DECLARE_bool_(recreate_environments_when_repeating);\n\n// This flag controls whether Google Test includes Google Test internal\n// stack frames in failure stack traces.\nGTEST_DECLARE_bool_(show_internal_stack_frames);\n\n// When this flag is specified, tests' order is randomized on every iteration.\nGTEST_DECLARE_bool_(shuffle);\n\n// This flag specifies the maximum number of stack frames to be\n// printed in a failure message.\nGTEST_DECLARE_int32_(stack_trace_depth);\n\n// When this flag is specified, a failed assertion will throw an\n// exception if exceptions are enabled, or exit the program with a\n// non-zero code otherwise. For use with an external test framework.\nGTEST_DECLARE_bool_(throw_on_failure);\n\n// When this flag is set with a \"host:port\" string, on supported\n// platforms test results are streamed to the specified port on\n// the specified host machine.\nGTEST_DECLARE_string_(stream_result_to);\n\n#if GTEST_USE_OWN_FLAGFILE_FLAG_\nGTEST_DECLARE_string_(flagfile);\n#endif  // GTEST_USE_OWN_FLAGFILE_FLAG_\n\nnamespace testing {\n\n// Silence C4100 (unreferenced formal parameter) and 4805\n// unsafe mix of type 'const int' and type 'const bool'\n#ifdef _MSC_VER\n#pragma warning(push)\n#pragma warning(disable : 4805)\n#pragma warning(disable : 4100)\n#endif\n\n// The upper limit for valid stack trace depths.\nconst int kMaxStackTraceDepth = 100;\n\nnamespace internal {\n\nclass AssertHelper;\nclass DefaultGlobalTestPartResultReporter;\nclass ExecDeathTest;\nclass NoExecDeathTest;\nclass FinalSuccessChecker;\nclass GTestFlagSaver;\nclass StreamingListenerTest;\nclass TestResultAccessor;\nclass TestEventListenersAccessor;\nclass TestEventRepeater;\nclass UnitTestRecordPropertyTestHelper;\nclass WindowsDeathTest;\nclass FuchsiaDeathTest;\nclass UnitTestImpl* GetUnitTestImpl();\nvoid ReportFailureInUnknownLocation(TestPartResult::Type result_type,\n                                    const std::string& message);\nstd::set<std::string>* GetIgnoredParameterizedTestSuites();\n\n}  // namespace internal\n\n// The friend relationship of some of these classes is cyclic.\n// If we don't forward declare them the compiler might confuse the classes\n// in friendship clauses with same named classes on the scope.\nclass Test;\nclass TestSuite;\n\n// Old API is still available but deprecated\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\nusing TestCase = TestSuite;\n#endif\nclass TestInfo;\nclass UnitTest;\n\n// The abstract class that all tests inherit from.\n//\n// In Google Test, a unit test program contains one or many TestSuites, and\n// each TestSuite contains one or many Tests.\n//\n// When you define a test using the TEST macro, you don't need to\n// explicitly derive from Test - the TEST macro automatically does\n// this for you.\n//\n// The only time you derive from Test is when defining a test fixture\n// to be used in a TEST_F.  For example:\n//\n//   class FooTest : public testing::Test {\n//    protected:\n//     void SetUp() override { ... }\n//     void TearDown() override { ... }\n//     ...\n//   };\n//\n//   TEST_F(FooTest, Bar) { ... }\n//   TEST_F(FooTest, Baz) { ... }\n//\n// Test is not copyable.\nclass GTEST_API_ Test {\n public:\n  friend class TestInfo;\n\n  // The d'tor is virtual as we intend to inherit from Test.\n  virtual ~Test();\n\n  // Sets up the stuff shared by all tests in this test suite.\n  //\n  // Google Test will call Foo::SetUpTestSuite() before running the first\n  // test in test suite Foo.  Hence a sub-class can define its own\n  // SetUpTestSuite() method to shadow the one defined in the super\n  // class.\n  static void SetUpTestSuite() {}\n\n  // Tears down the stuff shared by all tests in this test suite.\n  //\n  // Google Test will call Foo::TearDownTestSuite() after running the last\n  // test in test suite Foo.  Hence a sub-class can define its own\n  // TearDownTestSuite() method to shadow the one defined in the super\n  // class.\n  static void TearDownTestSuite() {}\n\n  // Legacy API is deprecated but still available. Use SetUpTestSuite and\n  // TearDownTestSuite instead.\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  static void TearDownTestCase() {}\n  static void SetUpTestCase() {}\n#endif  // GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  // Returns true if and only if the current test has a fatal failure.\n  static bool HasFatalFailure();\n\n  // Returns true if and only if the current test has a non-fatal failure.\n  static bool HasNonfatalFailure();\n\n  // Returns true if and only if the current test was skipped.\n  static bool IsSkipped();\n\n  // Returns true if and only if the current test has a (either fatal or\n  // non-fatal) failure.\n  static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); }\n\n  // Logs a property for the current test, test suite, or for the entire\n  // invocation of the test program when used outside of the context of a\n  // test suite.  Only the last value for a given key is remembered.  These\n  // are public static so they can be called from utility functions that are\n  // not members of the test fixture.  Calls to RecordProperty made during\n  // lifespan of the test (from the moment its constructor starts to the\n  // moment its destructor finishes) will be output in XML as attributes of\n  // the <testcase> element.  Properties recorded from fixture's\n  // SetUpTestSuite or TearDownTestSuite are logged as attributes of the\n  // corresponding <testsuite> element.  Calls to RecordProperty made in the\n  // global context (before or after invocation of RUN_ALL_TESTS and from\n  // SetUp/TearDown method of Environment objects registered with Google\n  // Test) will be output as attributes of the <testsuites> element.\n  static void RecordProperty(const std::string& key, const std::string& value);\n  static void RecordProperty(const std::string& key, int value);\n\n protected:\n  // Creates a Test object.\n  Test();\n\n  // Sets up the test fixture.\n  virtual void SetUp();\n\n  // Tears down the test fixture.\n  virtual void TearDown();\n\n private:\n  // Returns true if and only if the current test has the same fixture class\n  // as the first test in the current test suite.\n  static bool HasSameFixtureClass();\n\n  // Runs the test after the test fixture has been set up.\n  //\n  // A sub-class must implement this to define the test logic.\n  //\n  // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM.\n  // Instead, use the TEST or TEST_F macro.\n  virtual void TestBody() = 0;\n\n  // Sets up, executes, and tears down the test.\n  void Run();\n\n  // Deletes self.  We deliberately pick an unusual name for this\n  // internal method to avoid clashing with names used in user TESTs.\n  void DeleteSelf_() { delete this; }\n\n  const std::unique_ptr<GTEST_FLAG_SAVER_> gtest_flag_saver_;\n\n  // Often a user misspells SetUp() as Setup() and spends a long time\n  // wondering why it is never called by Google Test.  The declaration of\n  // the following method is solely for catching such an error at\n  // compile time:\n  //\n  //   - The return type is deliberately chosen to be not void, so it\n  //   will be a conflict if void Setup() is declared in the user's\n  //   test fixture.\n  //\n  //   - This method is private, so it will be another compiler error\n  //   if the method is called from the user's test fixture.\n  //\n  // DO NOT OVERRIDE THIS FUNCTION.\n  //\n  // If you see an error about overriding the following function or\n  // about it being private, you have mis-spelled SetUp() as Setup().\n  struct Setup_should_be_spelled_SetUp {};\n  virtual Setup_should_be_spelled_SetUp* Setup() { return nullptr; }\n\n  // We disallow copying Tests.\n  Test(const Test&) = delete;\n  Test& operator=(const Test&) = delete;\n};\n\ntypedef internal::TimeInMillis TimeInMillis;\n\n// A copyable object representing a user specified test property which can be\n// output as a key/value string pair.\n//\n// Don't inherit from TestProperty as its destructor is not virtual.\nclass TestProperty {\n public:\n  // C'tor.  TestProperty does NOT have a default constructor.\n  // Always use this constructor (with parameters) to create a\n  // TestProperty object.\n  TestProperty(const std::string& a_key, const std::string& a_value)\n      : key_(a_key), value_(a_value) {}\n\n  // Gets the user supplied key.\n  const char* key() const { return key_.c_str(); }\n\n  // Gets the user supplied value.\n  const char* value() const { return value_.c_str(); }\n\n  // Sets a new value, overriding the one supplied in the constructor.\n  void SetValue(const std::string& new_value) { value_ = new_value; }\n\n private:\n  // The key supplied by the user.\n  std::string key_;\n  // The value supplied by the user.\n  std::string value_;\n};\n\n// The result of a single Test.  This includes a list of\n// TestPartResults, a list of TestProperties, a count of how many\n// death tests there are in the Test, and how much time it took to run\n// the Test.\n//\n// TestResult is not copyable.\nclass GTEST_API_ TestResult {\n public:\n  // Creates an empty TestResult.\n  TestResult();\n\n  // D'tor.  Do not inherit from TestResult.\n  ~TestResult();\n\n  // Gets the number of all test parts.  This is the sum of the number\n  // of successful test parts and the number of failed test parts.\n  int total_part_count() const;\n\n  // Returns the number of the test properties.\n  int test_property_count() const;\n\n  // Returns true if and only if the test passed (i.e. no test part failed).\n  bool Passed() const { return !Skipped() && !Failed(); }\n\n  // Returns true if and only if the test was skipped.\n  bool Skipped() const;\n\n  // Returns true if and only if the test failed.\n  bool Failed() const;\n\n  // Returns true if and only if the test fatally failed.\n  bool HasFatalFailure() const;\n\n  // Returns true if and only if the test has a non-fatal failure.\n  bool HasNonfatalFailure() const;\n\n  // Returns the elapsed time, in milliseconds.\n  TimeInMillis elapsed_time() const { return elapsed_time_; }\n\n  // Gets the time of the test case start, in ms from the start of the\n  // UNIX epoch.\n  TimeInMillis start_timestamp() const { return start_timestamp_; }\n\n  // Returns the i-th test part result among all the results. i can range from 0\n  // to total_part_count() - 1. If i is not in that range, aborts the program.\n  const TestPartResult& GetTestPartResult(int i) const;\n\n  // Returns the i-th test property. i can range from 0 to\n  // test_property_count() - 1. If i is not in that range, aborts the\n  // program.\n  const TestProperty& GetTestProperty(int i) const;\n\n private:\n  friend class TestInfo;\n  friend class TestSuite;\n  friend class UnitTest;\n  friend class internal::DefaultGlobalTestPartResultReporter;\n  friend class internal::ExecDeathTest;\n  friend class internal::TestResultAccessor;\n  friend class internal::UnitTestImpl;\n  friend class internal::WindowsDeathTest;\n  friend class internal::FuchsiaDeathTest;\n\n  // Gets the vector of TestPartResults.\n  const std::vector<TestPartResult>& test_part_results() const {\n    return test_part_results_;\n  }\n\n  // Gets the vector of TestProperties.\n  const std::vector<TestProperty>& test_properties() const {\n    return test_properties_;\n  }\n\n  // Sets the start time.\n  void set_start_timestamp(TimeInMillis start) { start_timestamp_ = start; }\n\n  // Sets the elapsed time.\n  void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; }\n\n  // Adds a test property to the list. The property is validated and may add\n  // a non-fatal failure if invalid (e.g., if it conflicts with reserved\n  // key names). If a property is already recorded for the same key, the\n  // value will be updated, rather than storing multiple values for the same\n  // key.  xml_element specifies the element for which the property is being\n  // recorded and is used for validation.\n  void RecordProperty(const std::string& xml_element,\n                      const TestProperty& test_property);\n\n  // Adds a failure if the key is a reserved attribute of Google Test\n  // testsuite tags.  Returns true if the property is valid.\n  // FIXME: Validate attribute names are legal and human readable.\n  static bool ValidateTestProperty(const std::string& xml_element,\n                                   const TestProperty& test_property);\n\n  // Adds a test part result to the list.\n  void AddTestPartResult(const TestPartResult& test_part_result);\n\n  // Returns the death test count.\n  int death_test_count() const { return death_test_count_; }\n\n  // Increments the death test count, returning the new count.\n  int increment_death_test_count() { return ++death_test_count_; }\n\n  // Clears the test part results.\n  void ClearTestPartResults();\n\n  // Clears the object.\n  void Clear();\n\n  // Protects mutable state of the property vector and of owned\n  // properties, whose values may be updated.\n  internal::Mutex test_properties_mutex_;\n\n  // The vector of TestPartResults\n  std::vector<TestPartResult> test_part_results_;\n  // The vector of TestProperties\n  std::vector<TestProperty> test_properties_;\n  // Running count of death tests.\n  int death_test_count_;\n  // The start time, in milliseconds since UNIX Epoch.\n  TimeInMillis start_timestamp_;\n  // The elapsed time, in milliseconds.\n  TimeInMillis elapsed_time_;\n\n  // We disallow copying TestResult.\n  TestResult(const TestResult&) = delete;\n  TestResult& operator=(const TestResult&) = delete;\n};  // class TestResult\n\n// A TestInfo object stores the following information about a test:\n//\n//   Test suite name\n//   Test name\n//   Whether the test should be run\n//   A function pointer that creates the test object when invoked\n//   Test result\n//\n// The constructor of TestInfo registers itself with the UnitTest\n// singleton such that the RUN_ALL_TESTS() macro knows which tests to\n// run.\nclass GTEST_API_ TestInfo {\n public:\n  // Destructs a TestInfo object.  This function is not virtual, so\n  // don't inherit from TestInfo.\n  ~TestInfo();\n\n  // Returns the test suite name.\n  const char* test_suite_name() const { return test_suite_name_.c_str(); }\n\n// Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  const char* test_case_name() const { return test_suite_name(); }\n#endif  // GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  // Returns the test name.\n  const char* name() const { return name_.c_str(); }\n\n  // Returns the name of the parameter type, or NULL if this is not a typed\n  // or a type-parameterized test.\n  const char* type_param() const {\n    if (type_param_.get() != nullptr) return type_param_->c_str();\n    return nullptr;\n  }\n\n  // Returns the text representation of the value parameter, or NULL if this\n  // is not a value-parameterized test.\n  const char* value_param() const {\n    if (value_param_.get() != nullptr) return value_param_->c_str();\n    return nullptr;\n  }\n\n  // Returns the file name where this test is defined.\n  const char* file() const { return location_.file.c_str(); }\n\n  // Returns the line where this test is defined.\n  int line() const { return location_.line; }\n\n  // Return true if this test should not be run because it's in another shard.\n  bool is_in_another_shard() const { return is_in_another_shard_; }\n\n  // Returns true if this test should run, that is if the test is not\n  // disabled (or it is disabled but the also_run_disabled_tests flag has\n  // been specified) and its full name matches the user-specified filter.\n  //\n  // Google Test allows the user to filter the tests by their full names.\n  // The full name of a test Bar in test suite Foo is defined as\n  // \"Foo.Bar\".  Only the tests that match the filter will run.\n  //\n  // A filter is a colon-separated list of glob (not regex) patterns,\n  // optionally followed by a '-' and a colon-separated list of\n  // negative patterns (tests to exclude).  A test is run if it\n  // matches one of the positive patterns and does not match any of\n  // the negative patterns.\n  //\n  // For example, *A*:Foo.* is a filter that matches any string that\n  // contains the character 'A' or starts with \"Foo.\".\n  bool should_run() const { return should_run_; }\n\n  // Returns true if and only if this test will appear in the XML report.\n  bool is_reportable() const {\n    // The XML report includes tests matching the filter, excluding those\n    // run in other shards.\n    return matches_filter_ && !is_in_another_shard_;\n  }\n\n  // Returns the result of the test.\n  const TestResult* result() const { return &result_; }\n\n private:\n#if GTEST_HAS_DEATH_TEST\n  friend class internal::DefaultDeathTestFactory;\n#endif  // GTEST_HAS_DEATH_TEST\n  friend class Test;\n  friend class TestSuite;\n  friend class internal::UnitTestImpl;\n  friend class internal::StreamingListenerTest;\n  friend TestInfo* internal::MakeAndRegisterTestInfo(\n      const char* test_suite_name, const char* name, const char* type_param,\n      const char* value_param, internal::CodeLocation code_location,\n      internal::TypeId fixture_class_id, internal::SetUpTestSuiteFunc set_up_tc,\n      internal::TearDownTestSuiteFunc tear_down_tc,\n      internal::TestFactoryBase* factory);\n\n  // Constructs a TestInfo object. The newly constructed instance assumes\n  // ownership of the factory object.\n  TestInfo(const std::string& test_suite_name, const std::string& name,\n           const char* a_type_param,   // NULL if not a type-parameterized test\n           const char* a_value_param,  // NULL if not a value-parameterized test\n           internal::CodeLocation a_code_location,\n           internal::TypeId fixture_class_id,\n           internal::TestFactoryBase* factory);\n\n  // Increments the number of death tests encountered in this test so\n  // far.\n  int increment_death_test_count() {\n    return result_.increment_death_test_count();\n  }\n\n  // Creates the test object, runs it, records its result, and then\n  // deletes it.\n  void Run();\n\n  // Skip and records the test result for this object.\n  void Skip();\n\n  static void ClearTestResult(TestInfo* test_info) {\n    test_info->result_.Clear();\n  }\n\n  // These fields are immutable properties of the test.\n  const std::string test_suite_name_;  // test suite name\n  const std::string name_;             // Test name\n  // Name of the parameter type, or NULL if this is not a typed or a\n  // type-parameterized test.\n  const std::unique_ptr<const ::std::string> type_param_;\n  // Text representation of the value parameter, or NULL if this is not a\n  // value-parameterized test.\n  const std::unique_ptr<const ::std::string> value_param_;\n  internal::CodeLocation location_;\n  const internal::TypeId fixture_class_id_;  // ID of the test fixture class\n  bool should_run_;           // True if and only if this test should run\n  bool is_disabled_;          // True if and only if this test is disabled\n  bool matches_filter_;       // True if this test matches the\n                              // user-specified filter.\n  bool is_in_another_shard_;  // Will be run in another shard.\n  internal::TestFactoryBase* const factory_;  // The factory that creates\n                                              // the test object\n\n  // This field is mutable and needs to be reset before running the\n  // test for the second time.\n  TestResult result_;\n\n  TestInfo(const TestInfo&) = delete;\n  TestInfo& operator=(const TestInfo&) = delete;\n};\n\n// A test suite, which consists of a vector of TestInfos.\n//\n// TestSuite is not copyable.\nclass GTEST_API_ TestSuite {\n public:\n  // Creates a TestSuite with the given name.\n  //\n  // TestSuite does NOT have a default constructor.  Always use this\n  // constructor to create a TestSuite object.\n  //\n  // Arguments:\n  //\n  //   name:         name of the test suite\n  //   a_type_param: the name of the test's type parameter, or NULL if\n  //                 this is not a type-parameterized test.\n  //   set_up_tc:    pointer to the function that sets up the test suite\n  //   tear_down_tc: pointer to the function that tears down the test suite\n  TestSuite(const char* name, const char* a_type_param,\n            internal::SetUpTestSuiteFunc set_up_tc,\n            internal::TearDownTestSuiteFunc tear_down_tc);\n\n  // Destructor of TestSuite.\n  virtual ~TestSuite();\n\n  // Gets the name of the TestSuite.\n  const char* name() const { return name_.c_str(); }\n\n  // Returns the name of the parameter type, or NULL if this is not a\n  // type-parameterized test suite.\n  const char* type_param() const {\n    if (type_param_.get() != nullptr) return type_param_->c_str();\n    return nullptr;\n  }\n\n  // Returns true if any test in this test suite should run.\n  bool should_run() const { return should_run_; }\n\n  // Gets the number of successful tests in this test suite.\n  int successful_test_count() const;\n\n  // Gets the number of skipped tests in this test suite.\n  int skipped_test_count() const;\n\n  // Gets the number of failed tests in this test suite.\n  int failed_test_count() const;\n\n  // Gets the number of disabled tests that will be reported in the XML report.\n  int reportable_disabled_test_count() const;\n\n  // Gets the number of disabled tests in this test suite.\n  int disabled_test_count() const;\n\n  // Gets the number of tests to be printed in the XML report.\n  int reportable_test_count() const;\n\n  // Get the number of tests in this test suite that should run.\n  int test_to_run_count() const;\n\n  // Gets the number of all tests in this test suite.\n  int total_test_count() const;\n\n  // Returns true if and only if the test suite passed.\n  bool Passed() const { return !Failed(); }\n\n  // Returns true if and only if the test suite failed.\n  bool Failed() const {\n    return failed_test_count() > 0 || ad_hoc_test_result().Failed();\n  }\n\n  // Returns the elapsed time, in milliseconds.\n  TimeInMillis elapsed_time() const { return elapsed_time_; }\n\n  // Gets the time of the test suite start, in ms from the start of the\n  // UNIX epoch.\n  TimeInMillis start_timestamp() const { return start_timestamp_; }\n\n  // Returns the i-th test among all the tests. i can range from 0 to\n  // total_test_count() - 1. If i is not in that range, returns NULL.\n  const TestInfo* GetTestInfo(int i) const;\n\n  // Returns the TestResult that holds test properties recorded during\n  // execution of SetUpTestSuite and TearDownTestSuite.\n  const TestResult& ad_hoc_test_result() const { return ad_hoc_test_result_; }\n\n private:\n  friend class Test;\n  friend class internal::UnitTestImpl;\n\n  // Gets the (mutable) vector of TestInfos in this TestSuite.\n  std::vector<TestInfo*>& test_info_list() { return test_info_list_; }\n\n  // Gets the (immutable) vector of TestInfos in this TestSuite.\n  const std::vector<TestInfo*>& test_info_list() const {\n    return test_info_list_;\n  }\n\n  // Returns the i-th test among all the tests. i can range from 0 to\n  // total_test_count() - 1. If i is not in that range, returns NULL.\n  TestInfo* GetMutableTestInfo(int i);\n\n  // Sets the should_run member.\n  void set_should_run(bool should) { should_run_ = should; }\n\n  // Adds a TestInfo to this test suite.  Will delete the TestInfo upon\n  // destruction of the TestSuite object.\n  void AddTestInfo(TestInfo* test_info);\n\n  // Clears the results of all tests in this test suite.\n  void ClearResult();\n\n  // Clears the results of all tests in the given test suite.\n  static void ClearTestSuiteResult(TestSuite* test_suite) {\n    test_suite->ClearResult();\n  }\n\n  // Runs every test in this TestSuite.\n  void Run();\n\n  // Skips the execution of tests under this TestSuite\n  void Skip();\n\n  // Runs SetUpTestSuite() for this TestSuite.  This wrapper is needed\n  // for catching exceptions thrown from SetUpTestSuite().\n  void RunSetUpTestSuite() {\n    if (set_up_tc_ != nullptr) {\n      (*set_up_tc_)();\n    }\n  }\n\n  // Runs TearDownTestSuite() for this TestSuite.  This wrapper is\n  // needed for catching exceptions thrown from TearDownTestSuite().\n  void RunTearDownTestSuite() {\n    if (tear_down_tc_ != nullptr) {\n      (*tear_down_tc_)();\n    }\n  }\n\n  // Returns true if and only if test passed.\n  static bool TestPassed(const TestInfo* test_info) {\n    return test_info->should_run() && test_info->result()->Passed();\n  }\n\n  // Returns true if and only if test skipped.\n  static bool TestSkipped(const TestInfo* test_info) {\n    return test_info->should_run() && test_info->result()->Skipped();\n  }\n\n  // Returns true if and only if test failed.\n  static bool TestFailed(const TestInfo* test_info) {\n    return test_info->should_run() && test_info->result()->Failed();\n  }\n\n  // Returns true if and only if the test is disabled and will be reported in\n  // the XML report.\n  static bool TestReportableDisabled(const TestInfo* test_info) {\n    return test_info->is_reportable() && test_info->is_disabled_;\n  }\n\n  // Returns true if and only if test is disabled.\n  static bool TestDisabled(const TestInfo* test_info) {\n    return test_info->is_disabled_;\n  }\n\n  // Returns true if and only if this test will appear in the XML report.\n  static bool TestReportable(const TestInfo* test_info) {\n    return test_info->is_reportable();\n  }\n\n  // Returns true if the given test should run.\n  static bool ShouldRunTest(const TestInfo* test_info) {\n    return test_info->should_run();\n  }\n\n  // Shuffles the tests in this test suite.\n  void ShuffleTests(internal::Random* random);\n\n  // Restores the test order to before the first shuffle.\n  void UnshuffleTests();\n\n  // Name of the test suite.\n  std::string name_;\n  // Name of the parameter type, or NULL if this is not a typed or a\n  // type-parameterized test.\n  const std::unique_ptr<const ::std::string> type_param_;\n  // The vector of TestInfos in their original order.  It owns the\n  // elements in the vector.\n  std::vector<TestInfo*> test_info_list_;\n  // Provides a level of indirection for the test list to allow easy\n  // shuffling and restoring the test order.  The i-th element in this\n  // vector is the index of the i-th test in the shuffled test list.\n  std::vector<int> test_indices_;\n  // Pointer to the function that sets up the test suite.\n  internal::SetUpTestSuiteFunc set_up_tc_;\n  // Pointer to the function that tears down the test suite.\n  internal::TearDownTestSuiteFunc tear_down_tc_;\n  // True if and only if any test in this test suite should run.\n  bool should_run_;\n  // The start time, in milliseconds since UNIX Epoch.\n  TimeInMillis start_timestamp_;\n  // Elapsed time, in milliseconds.\n  TimeInMillis elapsed_time_;\n  // Holds test properties recorded during execution of SetUpTestSuite and\n  // TearDownTestSuite.\n  TestResult ad_hoc_test_result_;\n\n  // We disallow copying TestSuites.\n  TestSuite(const TestSuite&) = delete;\n  TestSuite& operator=(const TestSuite&) = delete;\n};\n\n// An Environment object is capable of setting up and tearing down an\n// environment.  You should subclass this to define your own\n// environment(s).\n//\n// An Environment object does the set-up and tear-down in virtual\n// methods SetUp() and TearDown() instead of the constructor and the\n// destructor, as:\n//\n//   1. You cannot safely throw from a destructor.  This is a problem\n//      as in some cases Google Test is used where exceptions are enabled, and\n//      we may want to implement ASSERT_* using exceptions where they are\n//      available.\n//   2. You cannot use ASSERT_* directly in a constructor or\n//      destructor.\nclass Environment {\n public:\n  // The d'tor is virtual as we need to subclass Environment.\n  virtual ~Environment() {}\n\n  // Override this to define how to set up the environment.\n  virtual void SetUp() {}\n\n  // Override this to define how to tear down the environment.\n  virtual void TearDown() {}\n\n private:\n  // If you see an error about overriding the following function or\n  // about it being private, you have mis-spelled SetUp() as Setup().\n  struct Setup_should_be_spelled_SetUp {};\n  virtual Setup_should_be_spelled_SetUp* Setup() { return nullptr; }\n};\n\n#if GTEST_HAS_EXCEPTIONS\n\n// Exception which can be thrown from TestEventListener::OnTestPartResult.\nclass GTEST_API_ AssertionException\n    : public internal::GoogleTestFailureException {\n public:\n  explicit AssertionException(const TestPartResult& result)\n      : GoogleTestFailureException(result) {}\n};\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n// The interface for tracing execution of tests. The methods are organized in\n// the order the corresponding events are fired.\nclass TestEventListener {\n public:\n  virtual ~TestEventListener() {}\n\n  // Fired before any test activity starts.\n  virtual void OnTestProgramStart(const UnitTest& unit_test) = 0;\n\n  // Fired before each iteration of tests starts.  There may be more than\n  // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration\n  // index, starting from 0.\n  virtual void OnTestIterationStart(const UnitTest& unit_test,\n                                    int iteration) = 0;\n\n  // Fired before environment set-up for each iteration of tests starts.\n  virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0;\n\n  // Fired after environment set-up for each iteration of tests ends.\n  virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0;\n\n  // Fired before the test suite starts.\n  virtual void OnTestSuiteStart(const TestSuite& /*test_suite*/) {}\n\n  //  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  virtual void OnTestCaseStart(const TestCase& /*test_case*/) {}\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  // Fired before the test starts.\n  virtual void OnTestStart(const TestInfo& test_info) = 0;\n\n  // Fired when a test is disabled\n  virtual void OnTestDisabled(const TestInfo& /*test_info*/) {}\n\n  // Fired after a failed assertion or a SUCCEED() invocation.\n  // If you want to throw an exception from this function to skip to the next\n  // TEST, it must be AssertionException defined above, or inherited from it.\n  virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0;\n\n  // Fired after the test ends.\n  virtual void OnTestEnd(const TestInfo& test_info) = 0;\n\n  // Fired after the test suite ends.\n  virtual void OnTestSuiteEnd(const TestSuite& /*test_suite*/) {}\n\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {}\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  // Fired before environment tear-down for each iteration of tests starts.\n  virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0;\n\n  // Fired after environment tear-down for each iteration of tests ends.\n  virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0;\n\n  // Fired after each iteration of tests finishes.\n  virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration) = 0;\n\n  // Fired after all test activities have ended.\n  virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0;\n};\n\n// The convenience class for users who need to override just one or two\n// methods and are not concerned that a possible change to a signature of\n// the methods they override will not be caught during the build.  For\n// comments about each method please see the definition of TestEventListener\n// above.\nclass EmptyTestEventListener : public TestEventListener {\n public:\n  void OnTestProgramStart(const UnitTest& /*unit_test*/) override {}\n  void OnTestIterationStart(const UnitTest& /*unit_test*/,\n                            int /*iteration*/) override {}\n  void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) override {}\n  void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) override {}\n  void OnTestSuiteStart(const TestSuite& /*test_suite*/) override {}\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  void OnTestCaseStart(const TestCase& /*test_case*/) override {}\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  void OnTestStart(const TestInfo& /*test_info*/) override {}\n  void OnTestDisabled(const TestInfo& /*test_info*/) override {}\n  void OnTestPartResult(const TestPartResult& /*test_part_result*/) override {}\n  void OnTestEnd(const TestInfo& /*test_info*/) override {}\n  void OnTestSuiteEnd(const TestSuite& /*test_suite*/) override {}\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  void OnTestCaseEnd(const TestCase& /*test_case*/) override {}\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) override {}\n  void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) override {}\n  void OnTestIterationEnd(const UnitTest& /*unit_test*/,\n                          int /*iteration*/) override {}\n  void OnTestProgramEnd(const UnitTest& /*unit_test*/) override {}\n};\n\n// TestEventListeners lets users add listeners to track events in Google Test.\nclass GTEST_API_ TestEventListeners {\n public:\n  TestEventListeners();\n  ~TestEventListeners();\n\n  // Appends an event listener to the end of the list. Google Test assumes\n  // the ownership of the listener (i.e. it will delete the listener when\n  // the test program finishes).\n  void Append(TestEventListener* listener);\n\n  // Removes the given event listener from the list and returns it.  It then\n  // becomes the caller's responsibility to delete the listener. Returns\n  // NULL if the listener is not found in the list.\n  TestEventListener* Release(TestEventListener* listener);\n\n  // Returns the standard listener responsible for the default console\n  // output.  Can be removed from the listeners list to shut down default\n  // console output.  Note that removing this object from the listener list\n  // with Release transfers its ownership to the caller and makes this\n  // function return NULL the next time.\n  TestEventListener* default_result_printer() const {\n    return default_result_printer_;\n  }\n\n  // Returns the standard listener responsible for the default XML output\n  // controlled by the --gtest_output=xml flag.  Can be removed from the\n  // listeners list by users who want to shut down the default XML output\n  // controlled by this flag and substitute it with custom one.  Note that\n  // removing this object from the listener list with Release transfers its\n  // ownership to the caller and makes this function return NULL the next\n  // time.\n  TestEventListener* default_xml_generator() const {\n    return default_xml_generator_;\n  }\n\n private:\n  friend class TestSuite;\n  friend class TestInfo;\n  friend class internal::DefaultGlobalTestPartResultReporter;\n  friend class internal::NoExecDeathTest;\n  friend class internal::TestEventListenersAccessor;\n  friend class internal::UnitTestImpl;\n\n  // Returns repeater that broadcasts the TestEventListener events to all\n  // subscribers.\n  TestEventListener* repeater();\n\n  // Sets the default_result_printer attribute to the provided listener.\n  // The listener is also added to the listener list and previous\n  // default_result_printer is removed from it and deleted. The listener can\n  // also be NULL in which case it will not be added to the list. Does\n  // nothing if the previous and the current listener objects are the same.\n  void SetDefaultResultPrinter(TestEventListener* listener);\n\n  // Sets the default_xml_generator attribute to the provided listener.  The\n  // listener is also added to the listener list and previous\n  // default_xml_generator is removed from it and deleted. The listener can\n  // also be NULL in which case it will not be added to the list. Does\n  // nothing if the previous and the current listener objects are the same.\n  void SetDefaultXmlGenerator(TestEventListener* listener);\n\n  // Controls whether events will be forwarded by the repeater to the\n  // listeners in the list.\n  bool EventForwardingEnabled() const;\n  void SuppressEventForwarding();\n\n  // The actual list of listeners.\n  internal::TestEventRepeater* repeater_;\n  // Listener responsible for the standard result output.\n  TestEventListener* default_result_printer_;\n  // Listener responsible for the creation of the XML output file.\n  TestEventListener* default_xml_generator_;\n\n  // We disallow copying TestEventListeners.\n  TestEventListeners(const TestEventListeners&) = delete;\n  TestEventListeners& operator=(const TestEventListeners&) = delete;\n};\n\n// A UnitTest consists of a vector of TestSuites.\n//\n// This is a singleton class.  The only instance of UnitTest is\n// created when UnitTest::GetInstance() is first called.  This\n// instance is never deleted.\n//\n// UnitTest is not copyable.\n//\n// This class is thread-safe as long as the methods are called\n// according to their specification.\nclass GTEST_API_ UnitTest {\n public:\n  // Gets the singleton UnitTest object.  The first time this method\n  // is called, a UnitTest object is constructed and returned.\n  // Consecutive calls will return the same object.\n  static UnitTest* GetInstance();\n\n  // Runs all tests in this UnitTest object and prints the result.\n  // Returns 0 if successful, or 1 otherwise.\n  //\n  // This method can only be called from the main thread.\n  //\n  // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n  int Run() GTEST_MUST_USE_RESULT_;\n\n  // Returns the working directory when the first TEST() or TEST_F()\n  // was executed.  The UnitTest object owns the string.\n  const char* original_working_dir() const;\n\n  // Returns the TestSuite object for the test that's currently running,\n  // or NULL if no test is running.\n  const TestSuite* current_test_suite() const GTEST_LOCK_EXCLUDED_(mutex_);\n\n// Legacy API is still available but deprecated\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  const TestCase* current_test_case() const GTEST_LOCK_EXCLUDED_(mutex_);\n#endif\n\n  // Returns the TestInfo object for the test that's currently running,\n  // or NULL if no test is running.\n  const TestInfo* current_test_info() const GTEST_LOCK_EXCLUDED_(mutex_);\n\n  // Returns the random seed used at the start of the current test run.\n  int random_seed() const;\n\n  // Returns the ParameterizedTestSuiteRegistry object used to keep track of\n  // value-parameterized tests and instantiate and register them.\n  //\n  // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n  internal::ParameterizedTestSuiteRegistry& parameterized_test_registry()\n      GTEST_LOCK_EXCLUDED_(mutex_);\n\n  // Gets the number of successful test suites.\n  int successful_test_suite_count() const;\n\n  // Gets the number of failed test suites.\n  int failed_test_suite_count() const;\n\n  // Gets the number of all test suites.\n  int total_test_suite_count() const;\n\n  // Gets the number of all test suites that contain at least one test\n  // that should run.\n  int test_suite_to_run_count() const;\n\n  //  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  int successful_test_case_count() const;\n  int failed_test_case_count() const;\n  int total_test_case_count() const;\n  int test_case_to_run_count() const;\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  // Gets the number of successful tests.\n  int successful_test_count() const;\n\n  // Gets the number of skipped tests.\n  int skipped_test_count() const;\n\n  // Gets the number of failed tests.\n  int failed_test_count() const;\n\n  // Gets the number of disabled tests that will be reported in the XML report.\n  int reportable_disabled_test_count() const;\n\n  // Gets the number of disabled tests.\n  int disabled_test_count() const;\n\n  // Gets the number of tests to be printed in the XML report.\n  int reportable_test_count() const;\n\n  // Gets the number of all tests.\n  int total_test_count() const;\n\n  // Gets the number of tests that should run.\n  int test_to_run_count() const;\n\n  // Gets the time of the test program start, in ms from the start of the\n  // UNIX epoch.\n  TimeInMillis start_timestamp() const;\n\n  // Gets the elapsed time, in milliseconds.\n  TimeInMillis elapsed_time() const;\n\n  // Returns true if and only if the unit test passed (i.e. all test suites\n  // passed).\n  bool Passed() const;\n\n  // Returns true if and only if the unit test failed (i.e. some test suite\n  // failed or something outside of all tests failed).\n  bool Failed() const;\n\n  // Gets the i-th test suite among all the test suites. i can range from 0 to\n  // total_test_suite_count() - 1. If i is not in that range, returns NULL.\n  const TestSuite* GetTestSuite(int i) const;\n\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  const TestCase* GetTestCase(int i) const;\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  // Returns the TestResult containing information on test failures and\n  // properties logged outside of individual test suites.\n  const TestResult& ad_hoc_test_result() const;\n\n  // Returns the list of event listeners that can be used to track events\n  // inside Google Test.\n  TestEventListeners& listeners();\n\n private:\n  // Registers and returns a global test environment.  When a test\n  // program is run, all global test environments will be set-up in\n  // the order they were registered.  After all tests in the program\n  // have finished, all global test environments will be torn-down in\n  // the *reverse* order they were registered.\n  //\n  // The UnitTest object takes ownership of the given environment.\n  //\n  // This method can only be called from the main thread.\n  Environment* AddEnvironment(Environment* env);\n\n  // Adds a TestPartResult to the current TestResult object.  All\n  // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc)\n  // eventually call this to report their results.  The user code\n  // should use the assertion macros instead of calling this directly.\n  void AddTestPartResult(TestPartResult::Type result_type,\n                         const char* file_name, int line_number,\n                         const std::string& message,\n                         const std::string& os_stack_trace)\n      GTEST_LOCK_EXCLUDED_(mutex_);\n\n  // Adds a TestProperty to the current TestResult object when invoked from\n  // inside a test, to current TestSuite's ad_hoc_test_result_ when invoked\n  // from SetUpTestSuite or TearDownTestSuite, or to the global property set\n  // when invoked elsewhere.  If the result already contains a property with\n  // the same key, the value will be updated.\n  void RecordProperty(const std::string& key, const std::string& value);\n\n  // Gets the i-th test suite among all the test suites. i can range from 0 to\n  // total_test_suite_count() - 1. If i is not in that range, returns NULL.\n  TestSuite* GetMutableTestSuite(int i);\n\n  // Accessors for the implementation object.\n  internal::UnitTestImpl* impl() { return impl_; }\n  const internal::UnitTestImpl* impl() const { return impl_; }\n\n  // These classes and functions are friends as they need to access private\n  // members of UnitTest.\n  friend class ScopedTrace;\n  friend class Test;\n  friend class internal::AssertHelper;\n  friend class internal::StreamingListenerTest;\n  friend class internal::UnitTestRecordPropertyTestHelper;\n  friend Environment* AddGlobalTestEnvironment(Environment* env);\n  friend std::set<std::string>* internal::GetIgnoredParameterizedTestSuites();\n  friend internal::UnitTestImpl* internal::GetUnitTestImpl();\n  friend void internal::ReportFailureInUnknownLocation(\n      TestPartResult::Type result_type, const std::string& message);\n\n  // Creates an empty UnitTest.\n  UnitTest();\n\n  // D'tor\n  virtual ~UnitTest();\n\n  // Pushes a trace defined by SCOPED_TRACE() on to the per-thread\n  // Google Test trace stack.\n  void PushGTestTrace(const internal::TraceInfo& trace)\n      GTEST_LOCK_EXCLUDED_(mutex_);\n\n  // Pops a trace from the per-thread Google Test trace stack.\n  void PopGTestTrace() GTEST_LOCK_EXCLUDED_(mutex_);\n\n  // Protects mutable state in *impl_.  This is mutable as some const\n  // methods need to lock it too.\n  mutable internal::Mutex mutex_;\n\n  // Opaque implementation object.  This field is never changed once\n  // the object is constructed.  We don't mark it as const here, as\n  // doing so will cause a warning in the constructor of UnitTest.\n  // Mutable state in *impl_ is protected by mutex_.\n  internal::UnitTestImpl* impl_;\n\n  // We disallow copying UnitTest.\n  UnitTest(const UnitTest&) = delete;\n  UnitTest& operator=(const UnitTest&) = delete;\n};\n\n// A convenient wrapper for adding an environment for the test\n// program.\n//\n// You should call this before RUN_ALL_TESTS() is called, probably in\n// main().  If you use gtest_main, you need to call this before main()\n// starts for it to take effect.  For example, you can define a global\n// variable like this:\n//\n//   testing::Environment* const foo_env =\n//       testing::AddGlobalTestEnvironment(new FooEnvironment);\n//\n// However, we strongly recommend you to write your own main() and\n// call AddGlobalTestEnvironment() there, as relying on initialization\n// of global variables makes the code harder to read and may cause\n// problems when you register multiple environments from different\n// translation units and the environments have dependencies among them\n// (remember that the compiler doesn't guarantee the order in which\n// global variables from different translation units are initialized).\ninline Environment* AddGlobalTestEnvironment(Environment* env) {\n  return UnitTest::GetInstance()->AddEnvironment(env);\n}\n\n// Initializes Google Test.  This must be called before calling\n// RUN_ALL_TESTS().  In particular, it parses a command line for the\n// flags that Google Test recognizes.  Whenever a Google Test flag is\n// seen, it is removed from argv, and *argc is decremented.\n//\n// No value is returned.  Instead, the Google Test flag variables are\n// updated.\n//\n// Calling the function for the second time has no user-visible effect.\nGTEST_API_ void InitGoogleTest(int* argc, char** argv);\n\n// This overloaded version can be used in Windows programs compiled in\n// UNICODE mode.\nGTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv);\n\n// This overloaded version can be used on Arduino/embedded platforms where\n// there is no argc/argv.\nGTEST_API_ void InitGoogleTest();\n\nnamespace internal {\n\n// Separate the error generating code from the code path to reduce the stack\n// frame size of CmpHelperEQ. This helps reduce the overhead of some sanitizers\n// when calling EXPECT_* in a tight loop.\ntemplate <typename T1, typename T2>\nAssertionResult CmpHelperEQFailure(const char* lhs_expression,\n                                   const char* rhs_expression, const T1& lhs,\n                                   const T2& rhs) {\n  return EqFailure(lhs_expression, rhs_expression,\n                   FormatForComparisonFailureMessage(lhs, rhs),\n                   FormatForComparisonFailureMessage(rhs, lhs), false);\n}\n\n// This block of code defines operator==/!=\n// to block lexical scope lookup.\n// It prevents using invalid operator==/!= defined at namespace scope.\nstruct faketype {};\ninline bool operator==(faketype, faketype) { return true; }\ninline bool operator!=(faketype, faketype) { return false; }\n\n// The helper function for {ASSERT|EXPECT}_EQ.\ntemplate <typename T1, typename T2>\nAssertionResult CmpHelperEQ(const char* lhs_expression,\n                            const char* rhs_expression, const T1& lhs,\n                            const T2& rhs) {\n  if (lhs == rhs) {\n    return AssertionSuccess();\n  }\n\n  return CmpHelperEQFailure(lhs_expression, rhs_expression, lhs, rhs);\n}\n\nclass EqHelper {\n public:\n  // This templatized version is for the general case.\n  template <\n      typename T1, typename T2,\n      // Disable this overload for cases where one argument is a pointer\n      // and the other is the null pointer constant.\n      typename std::enable_if<!std::is_integral<T1>::value ||\n                              !std::is_pointer<T2>::value>::type* = nullptr>\n  static AssertionResult Compare(const char* lhs_expression,\n                                 const char* rhs_expression, const T1& lhs,\n                                 const T2& rhs) {\n    return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);\n  }\n\n  // With this overloaded version, we allow anonymous enums to be used\n  // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous\n  // enums can be implicitly cast to BiggestInt.\n  //\n  // Even though its body looks the same as the above version, we\n  // cannot merge the two, as it will make anonymous enums unhappy.\n  static AssertionResult Compare(const char* lhs_expression,\n                                 const char* rhs_expression, BiggestInt lhs,\n                                 BiggestInt rhs) {\n    return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);\n  }\n\n  template <typename T>\n  static AssertionResult Compare(\n      const char* lhs_expression, const char* rhs_expression,\n      // Handle cases where '0' is used as a null pointer literal.\n      std::nullptr_t /* lhs */, T* rhs) {\n    // We already know that 'lhs' is a null pointer.\n    return CmpHelperEQ(lhs_expression, rhs_expression, static_cast<T*>(nullptr),\n                       rhs);\n  }\n};\n\n// Separate the error generating code from the code path to reduce the stack\n// frame size of CmpHelperOP. This helps reduce the overhead of some sanitizers\n// when calling EXPECT_OP in a tight loop.\ntemplate <typename T1, typename T2>\nAssertionResult CmpHelperOpFailure(const char* expr1, const char* expr2,\n                                   const T1& val1, const T2& val2,\n                                   const char* op) {\n  return AssertionFailure()\n         << \"Expected: (\" << expr1 << \") \" << op << \" (\" << expr2\n         << \"), actual: \" << FormatForComparisonFailureMessage(val1, val2)\n         << \" vs \" << FormatForComparisonFailureMessage(val2, val1);\n}\n\n// A macro for implementing the helper functions needed to implement\n// ASSERT_?? and EXPECT_??.  It is here just to avoid copy-and-paste\n// of similar code.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n\n#define GTEST_IMPL_CMP_HELPER_(op_name, op)                                \\\n  template <typename T1, typename T2>                                      \\\n  AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \\\n                                     const T1& val1, const T2& val2) {     \\\n    if (val1 op val2) {                                                    \\\n      return AssertionSuccess();                                           \\\n    } else {                                                               \\\n      return CmpHelperOpFailure(expr1, expr2, val1, val2, #op);            \\\n    }                                                                      \\\n  }\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\n\n// Implements the helper function for {ASSERT|EXPECT}_NE\nGTEST_IMPL_CMP_HELPER_(NE, !=)\n// Implements the helper function for {ASSERT|EXPECT}_LE\nGTEST_IMPL_CMP_HELPER_(LE, <=)\n// Implements the helper function for {ASSERT|EXPECT}_LT\nGTEST_IMPL_CMP_HELPER_(LT, <)\n// Implements the helper function for {ASSERT|EXPECT}_GE\nGTEST_IMPL_CMP_HELPER_(GE, >=)\n// Implements the helper function for {ASSERT|EXPECT}_GT\nGTEST_IMPL_CMP_HELPER_(GT, >)\n\n#undef GTEST_IMPL_CMP_HELPER_\n\n// The helper function for {ASSERT|EXPECT}_STREQ.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTREQ(const char* s1_expression,\n                                          const char* s2_expression,\n                                          const char* s1, const char* s2);\n\n// The helper function for {ASSERT|EXPECT}_STRCASEEQ.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* s1_expression,\n                                              const char* s2_expression,\n                                              const char* s1, const char* s2);\n\n// The helper function for {ASSERT|EXPECT}_STRNE.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression,\n                                          const char* s2_expression,\n                                          const char* s1, const char* s2);\n\n// The helper function for {ASSERT|EXPECT}_STRCASENE.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression,\n                                              const char* s2_expression,\n                                              const char* s1, const char* s2);\n\n// Helper function for *_STREQ on wide strings.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTREQ(const char* s1_expression,\n                                          const char* s2_expression,\n                                          const wchar_t* s1, const wchar_t* s2);\n\n// Helper function for *_STRNE on wide strings.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression,\n                                          const char* s2_expression,\n                                          const wchar_t* s1, const wchar_t* s2);\n\n}  // namespace internal\n\n// IsSubstring() and IsNotSubstring() are intended to be used as the\n// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by\n// themselves.  They check whether needle is a substring of haystack\n// (NULL is considered a substring of itself only), and return an\n// appropriate error message when they fail.\n//\n// The {needle,haystack}_expr arguments are the stringified\n// expressions that generated the two real arguments.\nGTEST_API_ AssertionResult IsSubstring(const char* needle_expr,\n                                       const char* haystack_expr,\n                                       const char* needle,\n                                       const char* haystack);\nGTEST_API_ AssertionResult IsSubstring(const char* needle_expr,\n                                       const char* haystack_expr,\n                                       const wchar_t* needle,\n                                       const wchar_t* haystack);\nGTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr,\n                                          const char* haystack_expr,\n                                          const char* needle,\n                                          const char* haystack);\nGTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr,\n                                          const char* haystack_expr,\n                                          const wchar_t* needle,\n                                          const wchar_t* haystack);\nGTEST_API_ AssertionResult IsSubstring(const char* needle_expr,\n                                       const char* haystack_expr,\n                                       const ::std::string& needle,\n                                       const ::std::string& haystack);\nGTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr,\n                                          const char* haystack_expr,\n                                          const ::std::string& needle,\n                                          const ::std::string& haystack);\n\n#if GTEST_HAS_STD_WSTRING\nGTEST_API_ AssertionResult IsSubstring(const char* needle_expr,\n                                       const char* haystack_expr,\n                                       const ::std::wstring& needle,\n                                       const ::std::wstring& haystack);\nGTEST_API_ AssertionResult IsNotSubstring(const char* needle_expr,\n                                          const char* haystack_expr,\n                                          const ::std::wstring& needle,\n                                          const ::std::wstring& haystack);\n#endif  // GTEST_HAS_STD_WSTRING\n\nnamespace internal {\n\n// Helper template function for comparing floating-points.\n//\n// Template parameter:\n//\n//   RawType: the raw floating-point type (either float or double)\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\ntemplate <typename RawType>\nAssertionResult CmpHelperFloatingPointEQ(const char* lhs_expression,\n                                         const char* rhs_expression,\n                                         RawType lhs_value, RawType rhs_value) {\n  const FloatingPoint<RawType> lhs(lhs_value), rhs(rhs_value);\n\n  if (lhs.AlmostEquals(rhs)) {\n    return AssertionSuccess();\n  }\n\n  ::std::stringstream lhs_ss;\n  lhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)\n         << lhs_value;\n\n  ::std::stringstream rhs_ss;\n  rhs_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)\n         << rhs_value;\n\n  return EqFailure(lhs_expression, rhs_expression,\n                   StringStreamToString(&lhs_ss), StringStreamToString(&rhs_ss),\n                   false);\n}\n\n// Helper function for implementing ASSERT_NEAR.\n//\n// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.\nGTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1,\n                                                const char* expr2,\n                                                const char* abs_error_expr,\n                                                double val1, double val2,\n                                                double abs_error);\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n// A class that enables one to stream messages to assertion macros\nclass GTEST_API_ AssertHelper {\n public:\n  // Constructor.\n  AssertHelper(TestPartResult::Type type, const char* file, int line,\n               const char* message);\n  ~AssertHelper();\n\n  // Message assignment is a semantic trick to enable assertion\n  // streaming; see the GTEST_MESSAGE_ macro below.\n  void operator=(const Message& message) const;\n\n private:\n  // We put our data in a struct so that the size of the AssertHelper class can\n  // be as small as possible.  This is important because gcc is incapable of\n  // re-using stack space even for temporary variables, so every EXPECT_EQ\n  // reserves stack space for another AssertHelper.\n  struct AssertHelperData {\n    AssertHelperData(TestPartResult::Type t, const char* srcfile, int line_num,\n                     const char* msg)\n        : type(t), file(srcfile), line(line_num), message(msg) {}\n\n    TestPartResult::Type const type;\n    const char* const file;\n    int const line;\n    std::string const message;\n\n   private:\n    AssertHelperData(const AssertHelperData&) = delete;\n    AssertHelperData& operator=(const AssertHelperData&) = delete;\n  };\n\n  AssertHelperData* const data_;\n\n  AssertHelper(const AssertHelper&) = delete;\n  AssertHelper& operator=(const AssertHelper&) = delete;\n};\n\n}  // namespace internal\n\n// The pure interface class that all value-parameterized tests inherit from.\n// A value-parameterized class must inherit from both ::testing::Test and\n// ::testing::WithParamInterface. In most cases that just means inheriting\n// from ::testing::TestWithParam, but more complicated test hierarchies\n// may need to inherit from Test and WithParamInterface at different levels.\n//\n// This interface has support for accessing the test parameter value via\n// the GetParam() method.\n//\n// Use it with one of the parameter generator defining functions, like Range(),\n// Values(), ValuesIn(), Bool(), and Combine().\n//\n// class FooTest : public ::testing::TestWithParam<int> {\n//  protected:\n//   FooTest() {\n//     // Can use GetParam() here.\n//   }\n//   ~FooTest() override {\n//     // Can use GetParam() here.\n//   }\n//   void SetUp() override {\n//     // Can use GetParam() here.\n//   }\n//   void TearDown override {\n//     // Can use GetParam() here.\n//   }\n// };\n// TEST_P(FooTest, DoesBar) {\n//   // Can use GetParam() method here.\n//   Foo foo;\n//   ASSERT_TRUE(foo.DoesBar(GetParam()));\n// }\n// INSTANTIATE_TEST_SUITE_P(OneToTenRange, FooTest, ::testing::Range(1, 10));\n\ntemplate <typename T>\nclass WithParamInterface {\n public:\n  typedef T ParamType;\n  virtual ~WithParamInterface() {}\n\n  // The current parameter value. Is also available in the test fixture's\n  // constructor.\n  static const ParamType& GetParam() {\n    GTEST_CHECK_(parameter_ != nullptr)\n        << \"GetParam() can only be called inside a value-parameterized test \"\n        << \"-- did you intend to write TEST_P instead of TEST_F?\";\n    return *parameter_;\n  }\n\n private:\n  // Sets parameter value. The caller is responsible for making sure the value\n  // remains alive and unchanged throughout the current test.\n  static void SetParam(const ParamType* parameter) { parameter_ = parameter; }\n\n  // Static value used for accessing parameter during a test lifetime.\n  static const ParamType* parameter_;\n\n  // TestClass must be a subclass of WithParamInterface<T> and Test.\n  template <class TestClass>\n  friend class internal::ParameterizedTestFactory;\n};\n\ntemplate <typename T>\nconst T* WithParamInterface<T>::parameter_ = nullptr;\n\n// Most value-parameterized classes can ignore the existence of\n// WithParamInterface, and can just inherit from ::testing::TestWithParam.\n\ntemplate <typename T>\nclass TestWithParam : public Test, public WithParamInterface<T> {};\n\n// Macros for indicating success/failure in test code.\n\n// Skips test in runtime.\n// Skipping test aborts current function.\n// Skipped tests are neither successful nor failed.\n#define GTEST_SKIP() GTEST_SKIP_(\"\")\n\n// ADD_FAILURE unconditionally adds a failure to the current test.\n// SUCCEED generates a success - it doesn't automatically make the\n// current test successful, as a test is only successful when it has\n// no failure.\n//\n// EXPECT_* verifies that a certain condition is satisfied.  If not,\n// it behaves like ADD_FAILURE.  In particular:\n//\n//   EXPECT_TRUE  verifies that a Boolean condition is true.\n//   EXPECT_FALSE verifies that a Boolean condition is false.\n//\n// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except\n// that they will also abort the current function on failure.  People\n// usually want the fail-fast behavior of FAIL and ASSERT_*, but those\n// writing data-driven tests often find themselves using ADD_FAILURE\n// and EXPECT_* more.\n\n// Generates a nonfatal failure with a generic message.\n#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_(\"Failed\")\n\n// Generates a nonfatal failure at the given source file location with\n// a generic message.\n#define ADD_FAILURE_AT(file, line)        \\\n  GTEST_MESSAGE_AT_(file, line, \"Failed\", \\\n                    ::testing::TestPartResult::kNonFatalFailure)\n\n// Generates a fatal failure with a generic message.\n#define GTEST_FAIL() GTEST_FATAL_FAILURE_(\"Failed\")\n\n// Like GTEST_FAIL(), but at the given source file location.\n#define GTEST_FAIL_AT(file, line)         \\\n  GTEST_MESSAGE_AT_(file, line, \"Failed\", \\\n                    ::testing::TestPartResult::kFatalFailure)\n\n// Define this macro to 1 to omit the definition of FAIL(), which is a\n// generic name and clashes with some other libraries.\n#if !GTEST_DONT_DEFINE_FAIL\n#define FAIL() GTEST_FAIL()\n#endif\n\n// Generates a success with a generic message.\n#define GTEST_SUCCEED() GTEST_SUCCESS_(\"Succeeded\")\n\n// Define this macro to 1 to omit the definition of SUCCEED(), which\n// is a generic name and clashes with some other libraries.\n#if !GTEST_DONT_DEFINE_SUCCEED\n#define SUCCEED() GTEST_SUCCEED()\n#endif\n\n// Macros for testing exceptions.\n//\n//    * {ASSERT|EXPECT}_THROW(statement, expected_exception):\n//         Tests that the statement throws the expected exception.\n//    * {ASSERT|EXPECT}_NO_THROW(statement):\n//         Tests that the statement doesn't throw any exception.\n//    * {ASSERT|EXPECT}_ANY_THROW(statement):\n//         Tests that the statement throws an exception.\n\n#define EXPECT_THROW(statement, expected_exception) \\\n  GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_NO_THROW(statement) \\\n  GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_ANY_THROW(statement) \\\n  GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_THROW(statement, expected_exception) \\\n  GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_)\n#define ASSERT_NO_THROW(statement) \\\n  GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_)\n#define ASSERT_ANY_THROW(statement) \\\n  GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_)\n\n// Boolean assertions. Condition can be either a Boolean expression or an\n// AssertionResult. For more information on how to use AssertionResult with\n// these macros see comments on that class.\n#define GTEST_EXPECT_TRUE(condition)                      \\\n  GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \\\n                      GTEST_NONFATAL_FAILURE_)\n#define GTEST_EXPECT_FALSE(condition)                        \\\n  GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \\\n                      GTEST_NONFATAL_FAILURE_)\n#define GTEST_ASSERT_TRUE(condition) \\\n  GTEST_TEST_BOOLEAN_(condition, #condition, false, true, GTEST_FATAL_FAILURE_)\n#define GTEST_ASSERT_FALSE(condition)                        \\\n  GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \\\n                      GTEST_FATAL_FAILURE_)\n\n// Define these macros to 1 to omit the definition of the corresponding\n// EXPECT or ASSERT, which clashes with some users' own code.\n\n#if !GTEST_DONT_DEFINE_EXPECT_TRUE\n#define EXPECT_TRUE(condition) GTEST_EXPECT_TRUE(condition)\n#endif\n\n#if !GTEST_DONT_DEFINE_EXPECT_FALSE\n#define EXPECT_FALSE(condition) GTEST_EXPECT_FALSE(condition)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_TRUE\n#define ASSERT_TRUE(condition) GTEST_ASSERT_TRUE(condition)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_FALSE\n#define ASSERT_FALSE(condition) GTEST_ASSERT_FALSE(condition)\n#endif\n\n// Macros for testing equalities and inequalities.\n//\n//    * {ASSERT|EXPECT}_EQ(v1, v2): Tests that v1 == v2\n//    * {ASSERT|EXPECT}_NE(v1, v2): Tests that v1 != v2\n//    * {ASSERT|EXPECT}_LT(v1, v2): Tests that v1 < v2\n//    * {ASSERT|EXPECT}_LE(v1, v2): Tests that v1 <= v2\n//    * {ASSERT|EXPECT}_GT(v1, v2): Tests that v1 > v2\n//    * {ASSERT|EXPECT}_GE(v1, v2): Tests that v1 >= v2\n//\n// When they are not, Google Test prints both the tested expressions and\n// their actual values.  The values must be compatible built-in types,\n// or you will get a compiler error.  By \"compatible\" we mean that the\n// values can be compared by the respective operator.\n//\n// Note:\n//\n//   1. It is possible to make a user-defined type work with\n//   {ASSERT|EXPECT}_??(), but that requires overloading the\n//   comparison operators and is thus discouraged by the Google C++\n//   Usage Guide.  Therefore, you are advised to use the\n//   {ASSERT|EXPECT}_TRUE() macro to assert that two objects are\n//   equal.\n//\n//   2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on\n//   pointers (in particular, C strings).  Therefore, if you use it\n//   with two C strings, you are testing how their locations in memory\n//   are related, not how their content is related.  To compare two C\n//   strings by content, use {ASSERT|EXPECT}_STR*().\n//\n//   3. {ASSERT|EXPECT}_EQ(v1, v2) is preferred to\n//   {ASSERT|EXPECT}_TRUE(v1 == v2), as the former tells you\n//   what the actual value is when it fails, and similarly for the\n//   other comparisons.\n//\n//   4. Do not depend on the order in which {ASSERT|EXPECT}_??()\n//   evaluate their arguments, which is undefined.\n//\n//   5. These macros evaluate their arguments exactly once.\n//\n// Examples:\n//\n//   EXPECT_NE(Foo(), 5);\n//   EXPECT_EQ(a_pointer, NULL);\n//   ASSERT_LT(i, array_size);\n//   ASSERT_GT(records.size(), 0) << \"There is no record left.\";\n\n#define EXPECT_EQ(val1, val2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)\n#define EXPECT_NE(val1, val2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)\n#define EXPECT_LE(val1, val2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)\n#define EXPECT_LT(val1, val2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)\n#define EXPECT_GE(val1, val2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)\n#define EXPECT_GT(val1, val2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)\n\n#define GTEST_ASSERT_EQ(val1, val2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)\n#define GTEST_ASSERT_NE(val1, val2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)\n#define GTEST_ASSERT_LE(val1, val2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)\n#define GTEST_ASSERT_LT(val1, val2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)\n#define GTEST_ASSERT_GE(val1, val2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)\n#define GTEST_ASSERT_GT(val1, val2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)\n\n// Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of\n// ASSERT_XY(), which clashes with some users' own code.\n\n#if !GTEST_DONT_DEFINE_ASSERT_EQ\n#define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_NE\n#define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_LE\n#define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_LT\n#define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_GE\n#define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2)\n#endif\n\n#if !GTEST_DONT_DEFINE_ASSERT_GT\n#define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2)\n#endif\n\n// C-string Comparisons.  All tests treat NULL and any non-NULL string\n// as different.  Two NULLs are equal.\n//\n//    * {ASSERT|EXPECT}_STREQ(s1, s2):     Tests that s1 == s2\n//    * {ASSERT|EXPECT}_STRNE(s1, s2):     Tests that s1 != s2\n//    * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case\n//    * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case\n//\n// For wide or narrow string objects, you can use the\n// {ASSERT|EXPECT}_??() macros.\n//\n// Don't depend on the order in which the arguments are evaluated,\n// which is undefined.\n//\n// These macros evaluate their arguments exactly once.\n\n#define EXPECT_STREQ(s1, s2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)\n#define EXPECT_STRNE(s1, s2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)\n#define EXPECT_STRCASEEQ(s1, s2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)\n#define EXPECT_STRCASENE(s1, s2) \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)\n\n#define ASSERT_STREQ(s1, s2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, s1, s2)\n#define ASSERT_STRNE(s1, s2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)\n#define ASSERT_STRCASEEQ(s1, s2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, s1, s2)\n#define ASSERT_STRCASENE(s1, s2) \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)\n\n// Macros for comparing floating-point numbers.\n//\n//    * {ASSERT|EXPECT}_FLOAT_EQ(val1, val2):\n//         Tests that two float values are almost equal.\n//    * {ASSERT|EXPECT}_DOUBLE_EQ(val1, val2):\n//         Tests that two double values are almost equal.\n//    * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error):\n//         Tests that v1 and v2 are within the given distance to each other.\n//\n// Google Test uses ULP-based comparison to automatically pick a default\n// error bound that is appropriate for the operands.  See the\n// FloatingPoint template class in gtest-internal.h if you are\n// interested in the implementation details.\n\n#define EXPECT_FLOAT_EQ(val1, val2)                                         \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \\\n                      val1, val2)\n\n#define EXPECT_DOUBLE_EQ(val1, val2)                                         \\\n  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \\\n                      val1, val2)\n\n#define ASSERT_FLOAT_EQ(val1, val2)                                         \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \\\n                      val1, val2)\n\n#define ASSERT_DOUBLE_EQ(val1, val2)                                         \\\n  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \\\n                      val1, val2)\n\n#define EXPECT_NEAR(val1, val2, abs_error)                                   \\\n  EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, val1, val2, \\\n                      abs_error)\n\n#define ASSERT_NEAR(val1, val2, abs_error)                                   \\\n  ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, val1, val2, \\\n                      abs_error)\n\n// These predicate format functions work on floating-point values, and\n// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g.\n//\n//   EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0);\n\n// Asserts that val1 is less than, or almost equal to, val2.  Fails\n// otherwise.  In particular, it fails if either val1 or val2 is NaN.\nGTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2,\n                                   float val1, float val2);\nGTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2,\n                                    double val1, double val2);\n\n#if GTEST_OS_WINDOWS\n\n// Macros that test for HRESULT failure and success, these are only useful\n// on Windows, and rely on Windows SDK macros and APIs to compile.\n//\n//    * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr)\n//\n// When expr unexpectedly fails or succeeds, Google Test prints the\n// expected result and the actual result with both a human-readable\n// string representation of the error, if available, as well as the\n// hex result code.\n#define EXPECT_HRESULT_SUCCEEDED(expr) \\\n  EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))\n\n#define ASSERT_HRESULT_SUCCEEDED(expr) \\\n  ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))\n\n#define EXPECT_HRESULT_FAILED(expr) \\\n  EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))\n\n#define ASSERT_HRESULT_FAILED(expr) \\\n  ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))\n\n#endif  // GTEST_OS_WINDOWS\n\n// Macros that execute statement and check that it doesn't generate new fatal\n// failures in the current thread.\n//\n//   * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement);\n//\n// Examples:\n//\n//   EXPECT_NO_FATAL_FAILURE(Process());\n//   ASSERT_NO_FATAL_FAILURE(Process()) << \"Process() failed\";\n//\n#define ASSERT_NO_FATAL_FAILURE(statement) \\\n  GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_)\n#define EXPECT_NO_FATAL_FAILURE(statement) \\\n  GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_)\n\n// Causes a trace (including the given source file path and line number,\n// and the given message) to be included in every test failure message generated\n// by code in the scope of the lifetime of an instance of this class. The effect\n// is undone with the destruction of the instance.\n//\n// The message argument can be anything streamable to std::ostream.\n//\n// Example:\n//   testing::ScopedTrace trace(\"file.cc\", 123, \"message\");\n//\nclass GTEST_API_ ScopedTrace {\n public:\n  // The c'tor pushes the given source file location and message onto\n  // a trace stack maintained by Google Test.\n\n  // Template version. Uses Message() to convert the values into strings.\n  // Slow, but flexible.\n  template <typename T>\n  ScopedTrace(const char* file, int line, const T& message) {\n    PushTrace(file, line, (Message() << message).GetString());\n  }\n\n  // Optimize for some known types.\n  ScopedTrace(const char* file, int line, const char* message) {\n    PushTrace(file, line, message ? message : \"(null)\");\n  }\n\n  ScopedTrace(const char* file, int line, const std::string& message) {\n    PushTrace(file, line, message);\n  }\n\n  // The d'tor pops the info pushed by the c'tor.\n  //\n  // Note that the d'tor is not virtual in order to be efficient.\n  // Don't inherit from ScopedTrace!\n  ~ScopedTrace();\n\n private:\n  void PushTrace(const char* file, int line, std::string message);\n\n  ScopedTrace(const ScopedTrace&) = delete;\n  ScopedTrace& operator=(const ScopedTrace&) = delete;\n} GTEST_ATTRIBUTE_UNUSED_;  // A ScopedTrace object does its job in its\n                            // c'tor and d'tor.  Therefore it doesn't\n                            // need to be used otherwise.\n\n// Causes a trace (including the source file path, the current line\n// number, and the given message) to be included in every test failure\n// message generated by code in the current scope.  The effect is\n// undone when the control leaves the current scope.\n//\n// The message argument can be anything streamable to std::ostream.\n//\n// In the implementation, we include the current line number as part\n// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s\n// to appear in the same block - as long as they are on different\n// lines.\n//\n// Assuming that each thread maintains its own stack of traces.\n// Therefore, a SCOPED_TRACE() would (correctly) only affect the\n// assertions in its own thread.\n#define SCOPED_TRACE(message)                                         \\\n  ::testing::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)( \\\n      __FILE__, __LINE__, (message))\n\n// Compile-time assertion for type equality.\n// StaticAssertTypeEq<type1, type2>() compiles if and only if type1 and type2\n// are the same type.  The value it returns is not interesting.\n//\n// Instead of making StaticAssertTypeEq a class template, we make it a\n// function template that invokes a helper class template.  This\n// prevents a user from misusing StaticAssertTypeEq<T1, T2> by\n// defining objects of that type.\n//\n// CAVEAT:\n//\n// When used inside a method of a class template,\n// StaticAssertTypeEq<T1, T2>() is effective ONLY IF the method is\n// instantiated.  For example, given:\n//\n//   template <typename T> class Foo {\n//    public:\n//     void Bar() { testing::StaticAssertTypeEq<int, T>(); }\n//   };\n//\n// the code:\n//\n//   void Test1() { Foo<bool> foo; }\n//\n// will NOT generate a compiler error, as Foo<bool>::Bar() is never\n// actually instantiated.  Instead, you need:\n//\n//   void Test2() { Foo<bool> foo; foo.Bar(); }\n//\n// to cause a compiler error.\ntemplate <typename T1, typename T2>\nconstexpr bool StaticAssertTypeEq() noexcept {\n  static_assert(std::is_same<T1, T2>::value, \"T1 and T2 are not the same type\");\n  return true;\n}\n\n// Defines a test.\n//\n// The first parameter is the name of the test suite, and the second\n// parameter is the name of the test within the test suite.\n//\n// The convention is to end the test suite name with \"Test\".  For\n// example, a test suite for the Foo class can be named FooTest.\n//\n// Test code should appear between braces after an invocation of\n// this macro.  Example:\n//\n//   TEST(FooTest, InitializesCorrectly) {\n//     Foo foo;\n//     EXPECT_TRUE(foo.StatusIsOK());\n//   }\n\n// Note that we call GetTestTypeId() instead of GetTypeId<\n// ::testing::Test>() here to get the type ID of testing::Test.  This\n// is to work around a suspected linker bug when using Google Test as\n// a framework on Mac OS X.  The bug causes GetTypeId<\n// ::testing::Test>() to return different values depending on whether\n// the call is from the Google Test framework itself or from user test\n// code.  GetTestTypeId() is guaranteed to always return the same\n// value, as it always calls GetTypeId<>() from the Google Test\n// framework.\n#define GTEST_TEST(test_suite_name, test_name)             \\\n  GTEST_TEST_(test_suite_name, test_name, ::testing::Test, \\\n              ::testing::internal::GetTestTypeId())\n\n// Define this macro to 1 to omit the definition of TEST(), which\n// is a generic name and clashes with some other libraries.\n#if !GTEST_DONT_DEFINE_TEST\n#define TEST(test_suite_name, test_name) GTEST_TEST(test_suite_name, test_name)\n#endif\n\n// Defines a test that uses a test fixture.\n//\n// The first parameter is the name of the test fixture class, which\n// also doubles as the test suite name.  The second parameter is the\n// name of the test within the test suite.\n//\n// A test fixture class must be declared earlier.  The user should put\n// the test code between braces after using this macro.  Example:\n//\n//   class FooTest : public testing::Test {\n//    protected:\n//     void SetUp() override { b_.AddElement(3); }\n//\n//     Foo a_;\n//     Foo b_;\n//   };\n//\n//   TEST_F(FooTest, InitializesCorrectly) {\n//     EXPECT_TRUE(a_.StatusIsOK());\n//   }\n//\n//   TEST_F(FooTest, ReturnsElementCountCorrectly) {\n//     EXPECT_EQ(a_.size(), 0);\n//     EXPECT_EQ(b_.size(), 1);\n//   }\n#define GTEST_TEST_F(test_fixture, test_name)        \\\n  GTEST_TEST_(test_fixture, test_name, test_fixture, \\\n              ::testing::internal::GetTypeId<test_fixture>())\n#if !GTEST_DONT_DEFINE_TEST_F\n#define TEST_F(test_fixture, test_name) GTEST_TEST_F(test_fixture, test_name)\n#endif\n\n// Returns a path to temporary directory.\n// Tries to determine an appropriate directory for the platform.\nGTEST_API_ std::string TempDir();\n\n#ifdef _MSC_VER\n#pragma warning(pop)\n#endif\n\n// Dynamically registers a test with the framework.\n//\n// This is an advanced API only to be used when the `TEST` macros are\n// insufficient. The macros should be preferred when possible, as they avoid\n// most of the complexity of calling this function.\n//\n// The `factory` argument is a factory callable (move-constructible) object or\n// function pointer that creates a new instance of the Test object. It\n// handles ownership to the caller. The signature of the callable is\n// `Fixture*()`, where `Fixture` is the test fixture class for the test. All\n// tests registered with the same `test_suite_name` must return the same\n// fixture type. This is checked at runtime.\n//\n// The framework will infer the fixture class from the factory and will call\n// the `SetUpTestSuite` and `TearDownTestSuite` for it.\n//\n// Must be called before `RUN_ALL_TESTS()` is invoked, otherwise behavior is\n// undefined.\n//\n// Use case example:\n//\n// class MyFixture : public ::testing::Test {\n//  public:\n//   // All of these optional, just like in regular macro usage.\n//   static void SetUpTestSuite() { ... }\n//   static void TearDownTestSuite() { ... }\n//   void SetUp() override { ... }\n//   void TearDown() override { ... }\n// };\n//\n// class MyTest : public MyFixture {\n//  public:\n//   explicit MyTest(int data) : data_(data) {}\n//   void TestBody() override { ... }\n//\n//  private:\n//   int data_;\n// };\n//\n// void RegisterMyTests(const std::vector<int>& values) {\n//   for (int v : values) {\n//     ::testing::RegisterTest(\n//         \"MyFixture\", (\"Test\" + std::to_string(v)).c_str(), nullptr,\n//         std::to_string(v).c_str(),\n//         __FILE__, __LINE__,\n//         // Important to use the fixture type as the return type here.\n//         [=]() -> MyFixture* { return new MyTest(v); });\n//   }\n// }\n// ...\n// int main(int argc, char** argv) {\n//   ::testing::InitGoogleTest(&argc, argv);\n//   std::vector<int> values_to_test = LoadValuesFromConfig();\n//   RegisterMyTests(values_to_test);\n//   ...\n//   return RUN_ALL_TESTS();\n// }\n//\ntemplate <int&... ExplicitParameterBarrier, typename Factory>\nTestInfo* RegisterTest(const char* test_suite_name, const char* test_name,\n                       const char* type_param, const char* value_param,\n                       const char* file, int line, Factory factory) {\n  using TestT = typename std::remove_pointer<decltype(factory())>::type;\n\n  class FactoryImpl : public internal::TestFactoryBase {\n   public:\n    explicit FactoryImpl(Factory f) : factory_(std::move(f)) {}\n    Test* CreateTest() override { return factory_(); }\n\n   private:\n    Factory factory_;\n  };\n\n  return internal::MakeAndRegisterTestInfo(\n      test_suite_name, test_name, type_param, value_param,\n      internal::CodeLocation(file, line), internal::GetTypeId<TestT>(),\n      internal::SuiteApiResolver<TestT>::GetSetUpCaseOrSuite(file, line),\n      internal::SuiteApiResolver<TestT>::GetTearDownCaseOrSuite(file, line),\n      new FactoryImpl{std::move(factory)});\n}\n\n}  // namespace testing\n\n// Use this function in main() to run all tests.  It returns 0 if all\n// tests are successful, or 1 otherwise.\n//\n// RUN_ALL_TESTS() should be invoked after the command line has been\n// parsed by InitGoogleTest().\n//\n// This function was formerly a macro; thus, it is in the global\n// namespace and has an all-caps name.\nint RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_;\n\ninline int RUN_ALL_TESTS() { return ::testing::UnitTest::GetInstance()->Run(); }\n\nGTEST_DISABLE_MSC_WARNINGS_POP_()  //  4251\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest_pred_impl.h",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Implements a family of generic predicate assertion macros.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_\n\n#include \"gtest/gtest-assertion-result.h\"\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-port.h\"\n\nnamespace testing {\n\n// This header implements a family of generic predicate assertion\n// macros:\n//\n//   ASSERT_PRED_FORMAT1(pred_format, v1)\n//   ASSERT_PRED_FORMAT2(pred_format, v1, v2)\n//   ...\n//\n// where pred_format is a function or functor that takes n (in the\n// case of ASSERT_PRED_FORMATn) values and their source expression\n// text, and returns a testing::AssertionResult.  See the definition\n// of ASSERT_EQ in gtest.h for an example.\n//\n// If you don't care about formatting, you can use the more\n// restrictive version:\n//\n//   ASSERT_PRED1(pred, v1)\n//   ASSERT_PRED2(pred, v1, v2)\n//   ...\n//\n// where pred is an n-ary function or functor that returns bool,\n// and the values v1, v2, ..., must support the << operator for\n// streaming to std::ostream.\n//\n// We also define the EXPECT_* variations.\n//\n// For now we only support predicates whose arity is at most 5.\n// Please email googletestframework@googlegroups.com if you need\n// support for higher arities.\n\n// GTEST_ASSERT_ is the basic statement to which all of the assertions\n// in this file reduce.  Don't use this in your code.\n\n#define GTEST_ASSERT_(expression, on_failure)                   \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_                                 \\\n  if (const ::testing::AssertionResult gtest_ar = (expression)) \\\n    ;                                                           \\\n  else                                                          \\\n    on_failure(gtest_ar.failure_message())\n\n// Helper function for implementing {EXPECT|ASSERT}_PRED1.  Don't use\n// this in your code.\ntemplate <typename Pred, typename T1>\nAssertionResult AssertPred1Helper(const char* pred_text, const char* e1,\n                                  Pred pred, const T1& v1) {\n  if (pred(v1)) return AssertionSuccess();\n\n  return AssertionFailure()\n         << pred_text << \"(\" << e1 << \") evaluates to false, where\"\n         << \"\\n\"\n         << e1 << \" evaluates to \" << ::testing::PrintToString(v1);\n}\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1.\n// Don't use this in your code.\n#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure) \\\n  GTEST_ASSERT_(pred_format(#v1, v1), on_failure)\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED1.  Don't use\n// this in your code.\n#define GTEST_PRED1_(pred, v1, on_failure) \\\n  GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, #v1, pred, v1), on_failure)\n\n// Unary predicate assertion macros.\n#define EXPECT_PRED_FORMAT1(pred_format, v1) \\\n  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_PRED1(pred, v1) GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_PRED_FORMAT1(pred_format, v1) \\\n  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)\n#define ASSERT_PRED1(pred, v1) GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_)\n\n// Helper function for implementing {EXPECT|ASSERT}_PRED2.  Don't use\n// this in your code.\ntemplate <typename Pred, typename T1, typename T2>\nAssertionResult AssertPred2Helper(const char* pred_text, const char* e1,\n                                  const char* e2, Pred pred, const T1& v1,\n                                  const T2& v2) {\n  if (pred(v1, v2)) return AssertionSuccess();\n\n  return AssertionFailure()\n         << pred_text << \"(\" << e1 << \", \" << e2\n         << \") evaluates to false, where\"\n         << \"\\n\"\n         << e1 << \" evaluates to \" << ::testing::PrintToString(v1) << \"\\n\"\n         << e2 << \" evaluates to \" << ::testing::PrintToString(v2);\n}\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2.\n// Don't use this in your code.\n#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure) \\\n  GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2), on_failure)\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED2.  Don't use\n// this in your code.\n#define GTEST_PRED2_(pred, v1, v2, on_failure)                               \\\n  GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, #v1, #v2, pred, v1, v2), \\\n                on_failure)\n\n// Binary predicate assertion macros.\n#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \\\n  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_PRED2(pred, v1, v2) \\\n  GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \\\n  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)\n#define ASSERT_PRED2(pred, v1, v2) \\\n  GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_)\n\n// Helper function for implementing {EXPECT|ASSERT}_PRED3.  Don't use\n// this in your code.\ntemplate <typename Pred, typename T1, typename T2, typename T3>\nAssertionResult AssertPred3Helper(const char* pred_text, const char* e1,\n                                  const char* e2, const char* e3, Pred pred,\n                                  const T1& v1, const T2& v2, const T3& v3) {\n  if (pred(v1, v2, v3)) return AssertionSuccess();\n\n  return AssertionFailure()\n         << pred_text << \"(\" << e1 << \", \" << e2 << \", \" << e3\n         << \") evaluates to false, where\"\n         << \"\\n\"\n         << e1 << \" evaluates to \" << ::testing::PrintToString(v1) << \"\\n\"\n         << e2 << \" evaluates to \" << ::testing::PrintToString(v2) << \"\\n\"\n         << e3 << \" evaluates to \" << ::testing::PrintToString(v3);\n}\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3.\n// Don't use this in your code.\n#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure) \\\n  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3), on_failure)\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED3.  Don't use\n// this in your code.\n#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)                          \\\n  GTEST_ASSERT_(                                                            \\\n      ::testing::AssertPred3Helper(#pred, #v1, #v2, #v3, pred, v1, v2, v3), \\\n      on_failure)\n\n// Ternary predicate assertion macros.\n#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \\\n  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_PRED3(pred, v1, v2, v3) \\\n  GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \\\n  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_)\n#define ASSERT_PRED3(pred, v1, v2, v3) \\\n  GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_)\n\n// Helper function for implementing {EXPECT|ASSERT}_PRED4.  Don't use\n// this in your code.\ntemplate <typename Pred, typename T1, typename T2, typename T3, typename T4>\nAssertionResult AssertPred4Helper(const char* pred_text, const char* e1,\n                                  const char* e2, const char* e3,\n                                  const char* e4, Pred pred, const T1& v1,\n                                  const T2& v2, const T3& v3, const T4& v4) {\n  if (pred(v1, v2, v3, v4)) return AssertionSuccess();\n\n  return AssertionFailure()\n         << pred_text << \"(\" << e1 << \", \" << e2 << \", \" << e3 << \", \" << e4\n         << \") evaluates to false, where\"\n         << \"\\n\"\n         << e1 << \" evaluates to \" << ::testing::PrintToString(v1) << \"\\n\"\n         << e2 << \" evaluates to \" << ::testing::PrintToString(v2) << \"\\n\"\n         << e3 << \" evaluates to \" << ::testing::PrintToString(v3) << \"\\n\"\n         << e4 << \" evaluates to \" << ::testing::PrintToString(v4);\n}\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4.\n// Don't use this in your code.\n#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure) \\\n  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4), on_failure)\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED4.  Don't use\n// this in your code.\n#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)                        \\\n  GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, #v1, #v2, #v3, #v4, pred, \\\n                                             v1, v2, v3, v4),                 \\\n                on_failure)\n\n// 4-ary predicate assertion macros.\n#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \\\n  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_PRED4(pred, v1, v2, v3, v4) \\\n  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \\\n  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)\n#define ASSERT_PRED4(pred, v1, v2, v3, v4) \\\n  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)\n\n// Helper function for implementing {EXPECT|ASSERT}_PRED5.  Don't use\n// this in your code.\ntemplate <typename Pred, typename T1, typename T2, typename T3, typename T4,\n          typename T5>\nAssertionResult AssertPred5Helper(const char* pred_text, const char* e1,\n                                  const char* e2, const char* e3,\n                                  const char* e4, const char* e5, Pred pred,\n                                  const T1& v1, const T2& v2, const T3& v3,\n                                  const T4& v4, const T5& v5) {\n  if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess();\n\n  return AssertionFailure()\n         << pred_text << \"(\" << e1 << \", \" << e2 << \", \" << e3 << \", \" << e4\n         << \", \" << e5 << \") evaluates to false, where\"\n         << \"\\n\"\n         << e1 << \" evaluates to \" << ::testing::PrintToString(v1) << \"\\n\"\n         << e2 << \" evaluates to \" << ::testing::PrintToString(v2) << \"\\n\"\n         << e3 << \" evaluates to \" << ::testing::PrintToString(v3) << \"\\n\"\n         << e4 << \" evaluates to \" << ::testing::PrintToString(v4) << \"\\n\"\n         << e5 << \" evaluates to \" << ::testing::PrintToString(v5);\n}\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5.\n// Don't use this in your code.\n#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)  \\\n  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \\\n                on_failure)\n\n// Internal macro for implementing {EXPECT|ASSERT}_PRED5.  Don't use\n// this in your code.\n#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)                   \\\n  GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, #v1, #v2, #v3, #v4, #v5, \\\n                                             pred, v1, v2, v3, v4, v5),      \\\n                on_failure)\n\n// 5-ary predicate assertion macros.\n#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \\\n  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)\n#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \\\n  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)\n#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \\\n  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)\n#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \\\n  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)\n\n}  // namespace testing\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/gtest_prod.h",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Google C++ Testing and Mocking Framework definitions useful in production\n// code.\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PROD_H_\n#define GOOGLETEST_INCLUDE_GTEST_GTEST_PROD_H_\n\n// When you need to test the private or protected members of a class,\n// use the FRIEND_TEST macro to declare your tests as friends of the\n// class.  For example:\n//\n// class MyClass {\n//  private:\n//   void PrivateMethod();\n//   FRIEND_TEST(MyClassTest, PrivateMethodWorks);\n// };\n//\n// class MyClassTest : public testing::Test {\n//   // ...\n// };\n//\n// TEST_F(MyClassTest, PrivateMethodWorks) {\n//   // Can call MyClass::PrivateMethod() here.\n// }\n//\n// Note: The test class must be in the same namespace as the class being tested.\n// For example, putting MyClassTest in an anonymous namespace will not work.\n\n#define FRIEND_TEST(test_case_name, test_name) \\\n  friend class test_case_name##_##test_name##_Test\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_GTEST_PROD_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/custom/gtest-port.h",
    "content": "// Copyright 2015, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Injection point for custom user configurations. See README for details\n//\n// ** Custom implementation starts here **\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_\n#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PORT_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/custom/gtest-printers.h",
    "content": "// Copyright 2015, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// This file provides an injection point for custom printers in a local\n// installation of gTest.\n// It will be included from gtest-printers.h and the overrides in this file\n// will be visible to everyone.\n//\n// Injection point for custom user configurations. See README for details\n//\n// ** Custom implementation starts here **\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_\n#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_PRINTERS_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/custom/gtest.h",
    "content": "// Copyright 2015, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Injection point for custom user configurations. See README for details\n//\n// ** Custom implementation starts here **\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_\n#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_INTERNAL_CUSTOM_GTEST_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/gtest-death-test-internal.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// The Google C++ Testing and Mocking Framework (Google Test)\n//\n// This header file defines internal utilities needed for implementing\n// death tests.  They are subject to change without notice.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_\n#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_\n\n#include <stdio.h>\n\n#include <memory>\n\n#include \"gtest/gtest-matchers.h\"\n#include \"gtest/internal/gtest-internal.h\"\n\nGTEST_DECLARE_string_(internal_run_death_test);\n\nnamespace testing {\nnamespace internal {\n\n// Names of the flags (needed for parsing Google Test flags).\nconst char kDeathTestStyleFlag[] = \"death_test_style\";\nconst char kDeathTestUseFork[] = \"death_test_use_fork\";\nconst char kInternalRunDeathTestFlag[] = \"internal_run_death_test\";\n\n#if GTEST_HAS_DEATH_TEST\n\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \\\n/* class A needs to have dll-interface to be used by clients of class B */)\n\n// DeathTest is a class that hides much of the complexity of the\n// GTEST_DEATH_TEST_ macro.  It is abstract; its static Create method\n// returns a concrete class that depends on the prevailing death test\n// style, as defined by the --gtest_death_test_style and/or\n// --gtest_internal_run_death_test flags.\n\n// In describing the results of death tests, these terms are used with\n// the corresponding definitions:\n//\n// exit status:  The integer exit information in the format specified\n//               by wait(2)\n// exit code:    The integer code passed to exit(3), _exit(2), or\n//               returned from main()\nclass GTEST_API_ DeathTest {\n public:\n  // Create returns false if there was an error determining the\n  // appropriate action to take for the current death test; for example,\n  // if the gtest_death_test_style flag is set to an invalid value.\n  // The LastMessage method will return a more detailed message in that\n  // case.  Otherwise, the DeathTest pointer pointed to by the \"test\"\n  // argument is set.  If the death test should be skipped, the pointer\n  // is set to NULL; otherwise, it is set to the address of a new concrete\n  // DeathTest object that controls the execution of the current test.\n  static bool Create(const char* statement, Matcher<const std::string&> matcher,\n                     const char* file, int line, DeathTest** test);\n  DeathTest();\n  virtual ~DeathTest() {}\n\n  // A helper class that aborts a death test when it's deleted.\n  class ReturnSentinel {\n   public:\n    explicit ReturnSentinel(DeathTest* test) : test_(test) {}\n    ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); }\n\n   private:\n    DeathTest* const test_;\n    ReturnSentinel(const ReturnSentinel&) = delete;\n    ReturnSentinel& operator=(const ReturnSentinel&) = delete;\n  } GTEST_ATTRIBUTE_UNUSED_;\n\n  // An enumeration of possible roles that may be taken when a death\n  // test is encountered.  EXECUTE means that the death test logic should\n  // be executed immediately.  OVERSEE means that the program should prepare\n  // the appropriate environment for a child process to execute the death\n  // test, then wait for it to complete.\n  enum TestRole { OVERSEE_TEST, EXECUTE_TEST };\n\n  // An enumeration of the three reasons that a test might be aborted.\n  enum AbortReason {\n    TEST_ENCOUNTERED_RETURN_STATEMENT,\n    TEST_THREW_EXCEPTION,\n    TEST_DID_NOT_DIE\n  };\n\n  // Assumes one of the above roles.\n  virtual TestRole AssumeRole() = 0;\n\n  // Waits for the death test to finish and returns its status.\n  virtual int Wait() = 0;\n\n  // Returns true if the death test passed; that is, the test process\n  // exited during the test, its exit status matches a user-supplied\n  // predicate, and its stderr output matches a user-supplied regular\n  // expression.\n  // The user-supplied predicate may be a macro expression rather\n  // than a function pointer or functor, or else Wait and Passed could\n  // be combined.\n  virtual bool Passed(bool exit_status_ok) = 0;\n\n  // Signals that the death test did not die as expected.\n  virtual void Abort(AbortReason reason) = 0;\n\n  // Returns a human-readable outcome message regarding the outcome of\n  // the last death test.\n  static const char* LastMessage();\n\n  static void set_last_death_test_message(const std::string& message);\n\n private:\n  // A string containing a description of the outcome of the last death test.\n  static std::string last_death_test_message_;\n\n  DeathTest(const DeathTest&) = delete;\n  DeathTest& operator=(const DeathTest&) = delete;\n};\n\nGTEST_DISABLE_MSC_WARNINGS_POP_()  //  4251\n\n// Factory interface for death tests.  May be mocked out for testing.\nclass DeathTestFactory {\n public:\n  virtual ~DeathTestFactory() {}\n  virtual bool Create(const char* statement,\n                      Matcher<const std::string&> matcher, const char* file,\n                      int line, DeathTest** test) = 0;\n};\n\n// A concrete DeathTestFactory implementation for normal use.\nclass DefaultDeathTestFactory : public DeathTestFactory {\n public:\n  bool Create(const char* statement, Matcher<const std::string&> matcher,\n              const char* file, int line, DeathTest** test) override;\n};\n\n// Returns true if exit_status describes a process that was terminated\n// by a signal, or exited normally with a nonzero exit code.\nGTEST_API_ bool ExitedUnsuccessfully(int exit_status);\n\n// A string passed to EXPECT_DEATH (etc.) is caught by one of these overloads\n// and interpreted as a regex (rather than an Eq matcher) for legacy\n// compatibility.\ninline Matcher<const ::std::string&> MakeDeathTestMatcher(\n    ::testing::internal::RE regex) {\n  return ContainsRegex(regex.pattern());\n}\ninline Matcher<const ::std::string&> MakeDeathTestMatcher(const char* regex) {\n  return ContainsRegex(regex);\n}\ninline Matcher<const ::std::string&> MakeDeathTestMatcher(\n    const ::std::string& regex) {\n  return ContainsRegex(regex);\n}\n\n// If a Matcher<const ::std::string&> is passed to EXPECT_DEATH (etc.), it's\n// used directly.\ninline Matcher<const ::std::string&> MakeDeathTestMatcher(\n    Matcher<const ::std::string&> matcher) {\n  return matcher;\n}\n\n// Traps C++ exceptions escaping statement and reports them as test\n// failures. Note that trapping SEH exceptions is not implemented here.\n#if GTEST_HAS_EXCEPTIONS\n#define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test)           \\\n  try {                                                                      \\\n    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement);               \\\n  } catch (const ::std::exception& gtest_exception) {                        \\\n    fprintf(                                                                 \\\n        stderr,                                                              \\\n        \"\\n%s: Caught std::exception-derived exception escaping the \"        \\\n        \"death test statement. Exception message: %s\\n\",                     \\\n        ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \\\n        gtest_exception.what());                                             \\\n    fflush(stderr);                                                          \\\n    death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \\\n  } catch (...) {                                                            \\\n    death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \\\n  }\n\n#else\n#define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \\\n  GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)\n\n#endif\n\n// This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*,\n// ASSERT_EXIT*, and EXPECT_EXIT*.\n#define GTEST_DEATH_TEST_(statement, predicate, regex_or_matcher, fail)        \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_                                                \\\n  if (::testing::internal::AlwaysTrue()) {                                     \\\n    ::testing::internal::DeathTest* gtest_dt;                                  \\\n    if (!::testing::internal::DeathTest::Create(                               \\\n            #statement,                                                        \\\n            ::testing::internal::MakeDeathTestMatcher(regex_or_matcher),       \\\n            __FILE__, __LINE__, &gtest_dt)) {                                  \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__);                        \\\n    }                                                                          \\\n    if (gtest_dt != nullptr) {                                                 \\\n      std::unique_ptr< ::testing::internal::DeathTest> gtest_dt_ptr(gtest_dt); \\\n      switch (gtest_dt->AssumeRole()) {                                        \\\n        case ::testing::internal::DeathTest::OVERSEE_TEST:                     \\\n          if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) {                \\\n            goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__);                  \\\n          }                                                                    \\\n          break;                                                               \\\n        case ::testing::internal::DeathTest::EXECUTE_TEST: {                   \\\n          ::testing::internal::DeathTest::ReturnSentinel gtest_sentinel(       \\\n              gtest_dt);                                                       \\\n          GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt);            \\\n          gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE);   \\\n          break;                                                               \\\n        }                                                                      \\\n      }                                                                        \\\n    }                                                                          \\\n  } else                                                                       \\\n    GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__)                                \\\n        : fail(::testing::internal::DeathTest::LastMessage())\n// The symbol \"fail\" here expands to something into which a message\n// can be streamed.\n\n// This macro is for implementing ASSERT/EXPECT_DEBUG_DEATH when compiled in\n// NDEBUG mode. In this case we need the statements to be executed and the macro\n// must accept a streamed message even though the message is never printed.\n// The regex object is not evaluated, but it is used to prevent \"unused\"\n// warnings and to avoid an expression that doesn't compile in debug mode.\n#define GTEST_EXECUTE_STATEMENT_(statement, regex_or_matcher)    \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_                                  \\\n  if (::testing::internal::AlwaysTrue()) {                       \\\n    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement);   \\\n  } else if (!::testing::internal::AlwaysTrue()) {               \\\n    ::testing::internal::MakeDeathTestMatcher(regex_or_matcher); \\\n  } else                                                         \\\n    ::testing::Message()\n\n// A class representing the parsed contents of the\n// --gtest_internal_run_death_test flag, as it existed when\n// RUN_ALL_TESTS was called.\nclass InternalRunDeathTestFlag {\n public:\n  InternalRunDeathTestFlag(const std::string& a_file, int a_line, int an_index,\n                           int a_write_fd)\n      : file_(a_file), line_(a_line), index_(an_index), write_fd_(a_write_fd) {}\n\n  ~InternalRunDeathTestFlag() {\n    if (write_fd_ >= 0) posix::Close(write_fd_);\n  }\n\n  const std::string& file() const { return file_; }\n  int line() const { return line_; }\n  int index() const { return index_; }\n  int write_fd() const { return write_fd_; }\n\n private:\n  std::string file_;\n  int line_;\n  int index_;\n  int write_fd_;\n\n  InternalRunDeathTestFlag(const InternalRunDeathTestFlag&) = delete;\n  InternalRunDeathTestFlag& operator=(const InternalRunDeathTestFlag&) = delete;\n};\n\n// Returns a newly created InternalRunDeathTestFlag object with fields\n// initialized from the GTEST_FLAG(internal_run_death_test) flag if\n// the flag is specified; otherwise returns NULL.\nInternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();\n\n#endif  // GTEST_HAS_DEATH_TEST\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/gtest-filepath.h",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Google Test filepath utilities\n//\n// This header file declares classes and functions used internally by\n// Google Test.  They are subject to change without notice.\n//\n// This file is #included in gtest/internal/gtest-internal.h.\n// Do not include this header file separately!\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_\n#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_\n\n#include \"gtest/internal/gtest-string.h\"\n\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \\\n/* class A needs to have dll-interface to be used by clients of class B */)\n\nnamespace testing {\nnamespace internal {\n\n// FilePath - a class for file and directory pathname manipulation which\n// handles platform-specific conventions (like the pathname separator).\n// Used for helper functions for naming files in a directory for xml output.\n// Except for Set methods, all methods are const or static, which provides an\n// \"immutable value object\" -- useful for peace of mind.\n// A FilePath with a value ending in a path separator (\"like/this/\") represents\n// a directory, otherwise it is assumed to represent a file. In either case,\n// it may or may not represent an actual file or directory in the file system.\n// Names are NOT checked for syntax correctness -- no checking for illegal\n// characters, malformed paths, etc.\n\nclass GTEST_API_ FilePath {\n public:\n  FilePath() : pathname_(\"\") {}\n  FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) {}\n\n  explicit FilePath(const std::string& pathname) : pathname_(pathname) {\n    Normalize();\n  }\n\n  FilePath& operator=(const FilePath& rhs) {\n    Set(rhs);\n    return *this;\n  }\n\n  void Set(const FilePath& rhs) { pathname_ = rhs.pathname_; }\n\n  const std::string& string() const { return pathname_; }\n  const char* c_str() const { return pathname_.c_str(); }\n\n  // Returns the current working directory, or \"\" if unsuccessful.\n  static FilePath GetCurrentDir();\n\n  // Given directory = \"dir\", base_name = \"test\", number = 0,\n  // extension = \"xml\", returns \"dir/test.xml\". If number is greater\n  // than zero (e.g., 12), returns \"dir/test_12.xml\".\n  // On Windows platform, uses \\ as the separator rather than /.\n  static FilePath MakeFileName(const FilePath& directory,\n                               const FilePath& base_name, int number,\n                               const char* extension);\n\n  // Given directory = \"dir\", relative_path = \"test.xml\",\n  // returns \"dir/test.xml\".\n  // On Windows, uses \\ as the separator rather than /.\n  static FilePath ConcatPaths(const FilePath& directory,\n                              const FilePath& relative_path);\n\n  // Returns a pathname for a file that does not currently exist. The pathname\n  // will be directory/base_name.extension or\n  // directory/base_name_<number>.extension if directory/base_name.extension\n  // already exists. The number will be incremented until a pathname is found\n  // that does not already exist.\n  // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'.\n  // There could be a race condition if two or more processes are calling this\n  // function at the same time -- they could both pick the same filename.\n  static FilePath GenerateUniqueFileName(const FilePath& directory,\n                                         const FilePath& base_name,\n                                         const char* extension);\n\n  // Returns true if and only if the path is \"\".\n  bool IsEmpty() const { return pathname_.empty(); }\n\n  // If input name has a trailing separator character, removes it and returns\n  // the name, otherwise return the name string unmodified.\n  // On Windows platform, uses \\ as the separator, other platforms use /.\n  FilePath RemoveTrailingPathSeparator() const;\n\n  // Returns a copy of the FilePath with the directory part removed.\n  // Example: FilePath(\"path/to/file\").RemoveDirectoryName() returns\n  // FilePath(\"file\"). If there is no directory part (\"just_a_file\"), it returns\n  // the FilePath unmodified. If there is no file part (\"just_a_dir/\") it\n  // returns an empty FilePath (\"\").\n  // On Windows platform, '\\' is the path separator, otherwise it is '/'.\n  FilePath RemoveDirectoryName() const;\n\n  // RemoveFileName returns the directory path with the filename removed.\n  // Example: FilePath(\"path/to/file\").RemoveFileName() returns \"path/to/\".\n  // If the FilePath is \"a_file\" or \"/a_file\", RemoveFileName returns\n  // FilePath(\"./\") or, on Windows, FilePath(\".\\\\\"). If the filepath does\n  // not have a file, like \"just/a/dir/\", it returns the FilePath unmodified.\n  // On Windows platform, '\\' is the path separator, otherwise it is '/'.\n  FilePath RemoveFileName() const;\n\n  // Returns a copy of the FilePath with the case-insensitive extension removed.\n  // Example: FilePath(\"dir/file.exe\").RemoveExtension(\"EXE\") returns\n  // FilePath(\"dir/file\"). If a case-insensitive extension is not\n  // found, returns a copy of the original FilePath.\n  FilePath RemoveExtension(const char* extension) const;\n\n  // Creates directories so that path exists. Returns true if successful or if\n  // the directories already exist; returns false if unable to create\n  // directories for any reason. Will also return false if the FilePath does\n  // not represent a directory (that is, it doesn't end with a path separator).\n  bool CreateDirectoriesRecursively() const;\n\n  // Create the directory so that path exists. Returns true if successful or\n  // if the directory already exists; returns false if unable to create the\n  // directory for any reason, including if the parent directory does not\n  // exist. Not named \"CreateDirectory\" because that's a macro on Windows.\n  bool CreateFolder() const;\n\n  // Returns true if FilePath describes something in the file-system,\n  // either a file, directory, or whatever, and that something exists.\n  bool FileOrDirectoryExists() const;\n\n  // Returns true if pathname describes a directory in the file-system\n  // that exists.\n  bool DirectoryExists() const;\n\n  // Returns true if FilePath ends with a path separator, which indicates that\n  // it is intended to represent a directory. Returns false otherwise.\n  // This does NOT check that a directory (or file) actually exists.\n  bool IsDirectory() const;\n\n  // Returns true if pathname describes a root directory. (Windows has one\n  // root directory per disk drive.)\n  bool IsRootDirectory() const;\n\n  // Returns true if pathname describes an absolute path.\n  bool IsAbsolutePath() const;\n\n private:\n  // Replaces multiple consecutive separators with a single separator.\n  // For example, \"bar///foo\" becomes \"bar/foo\". Does not eliminate other\n  // redundancies that might be in a pathname involving \".\" or \"..\".\n  //\n  // A pathname with multiple consecutive separators may occur either through\n  // user error or as a result of some scripts or APIs that generate a pathname\n  // with a trailing separator. On other platforms the same API or script\n  // may NOT generate a pathname with a trailing \"/\". Then elsewhere that\n  // pathname may have another \"/\" and pathname components added to it,\n  // without checking for the separator already being there.\n  // The script language and operating system may allow paths like \"foo//bar\"\n  // but some of the functions in FilePath will not handle that correctly. In\n  // particular, RemoveTrailingPathSeparator() only removes one separator, and\n  // it is called in CreateDirectoriesRecursively() assuming that it will change\n  // a pathname from directory syntax (trailing separator) to filename syntax.\n  //\n  // On Windows this method also replaces the alternate path separator '/' with\n  // the primary path separator '\\\\', so that for example \"bar\\\\/\\\\foo\" becomes\n  // \"bar\\\\foo\".\n\n  void Normalize();\n\n  // Returns a pointer to the last occurrence of a valid path separator in\n  // the FilePath. On Windows, for example, both '/' and '\\' are valid path\n  // separators. Returns NULL if no path separator was found.\n  const char* FindLastPathSeparator() const;\n\n  std::string pathname_;\n};  // class FilePath\n\n}  // namespace internal\n}  // namespace testing\n\nGTEST_DISABLE_MSC_WARNINGS_POP_()  //  4251\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/gtest-internal.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// The Google C++ Testing and Mocking Framework (Google Test)\n//\n// This header file declares functions and macros used internally by\n// Google Test.  They are subject to change without notice.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_\n#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_\n\n#include \"gtest/internal/gtest-port.h\"\n\n#if GTEST_OS_LINUX\n#include <stdlib.h>\n#include <sys/types.h>\n#include <sys/wait.h>\n#include <unistd.h>\n#endif  // GTEST_OS_LINUX\n\n#if GTEST_HAS_EXCEPTIONS\n#include <stdexcept>\n#endif\n\n#include <ctype.h>\n#include <float.h>\n#include <string.h>\n\n#include <cstdint>\n#include <iomanip>\n#include <limits>\n#include <map>\n#include <set>\n#include <string>\n#include <type_traits>\n#include <vector>\n\n#include \"gtest/gtest-message.h\"\n#include \"gtest/internal/gtest-filepath.h\"\n#include \"gtest/internal/gtest-string.h\"\n#include \"gtest/internal/gtest-type-util.h\"\n\n// Due to C++ preprocessor weirdness, we need double indirection to\n// concatenate two tokens when one of them is __LINE__.  Writing\n//\n//   foo ## __LINE__\n//\n// will result in the token foo__LINE__, instead of foo followed by\n// the current line number.  For more details, see\n// http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6\n#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)\n#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo##bar\n\n// Stringifies its argument.\n// Work around a bug in visual studio which doesn't accept code like this:\n//\n//   #define GTEST_STRINGIFY_(name) #name\n//   #define MACRO(a, b, c) ... GTEST_STRINGIFY_(a) ...\n//   MACRO(, x, y)\n//\n// Complaining about the argument to GTEST_STRINGIFY_ being empty.\n// This is allowed by the spec.\n#define GTEST_STRINGIFY_HELPER_(name, ...) #name\n#define GTEST_STRINGIFY_(...) GTEST_STRINGIFY_HELPER_(__VA_ARGS__, )\n\nnamespace proto2 {\nclass MessageLite;\n}\n\nnamespace testing {\n\n// Forward declarations.\n\nclass AssertionResult;  // Result of an assertion.\nclass Message;          // Represents a failure message.\nclass Test;             // Represents a test.\nclass TestInfo;         // Information about a test.\nclass TestPartResult;   // Result of a test part.\nclass UnitTest;         // A collection of test suites.\n\ntemplate <typename T>\n::std::string PrintToString(const T& value);\n\nnamespace internal {\n\nstruct TraceInfo;    // Information about a trace point.\nclass TestInfoImpl;  // Opaque implementation of TestInfo\nclass UnitTestImpl;  // Opaque implementation of UnitTest\n\n// The text used in failure messages to indicate the start of the\n// stack trace.\nGTEST_API_ extern const char kStackTraceMarker[];\n\n// An IgnoredValue object can be implicitly constructed from ANY value.\nclass IgnoredValue {\n  struct Sink {};\n\n public:\n  // This constructor template allows any value to be implicitly\n  // converted to IgnoredValue.  The object has no data member and\n  // doesn't try to remember anything about the argument.  We\n  // deliberately omit the 'explicit' keyword in order to allow the\n  // conversion to be implicit.\n  // Disable the conversion if T already has a magical conversion operator.\n  // Otherwise we get ambiguity.\n  template <typename T,\n            typename std::enable_if<!std::is_convertible<T, Sink>::value,\n                                    int>::type = 0>\n  IgnoredValue(const T& /* ignored */) {}  // NOLINT(runtime/explicit)\n};\n\n// Appends the user-supplied message to the Google-Test-generated message.\nGTEST_API_ std::string AppendUserMessage(const std::string& gtest_msg,\n                                         const Message& user_msg);\n\n#if GTEST_HAS_EXCEPTIONS\n\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(\n    4275 /* an exported class was derived from a class that was not exported */)\n\n// This exception is thrown by (and only by) a failed Google Test\n// assertion when GTEST_FLAG(throw_on_failure) is true (if exceptions\n// are enabled).  We derive it from std::runtime_error, which is for\n// errors presumably detectable only at run time.  Since\n// std::runtime_error inherits from std::exception, many testing\n// frameworks know how to extract and print the message inside it.\nclass GTEST_API_ GoogleTestFailureException : public ::std::runtime_error {\n public:\n  explicit GoogleTestFailureException(const TestPartResult& failure);\n};\n\nGTEST_DISABLE_MSC_WARNINGS_POP_()  //  4275\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\nnamespace edit_distance {\n// Returns the optimal edits to go from 'left' to 'right'.\n// All edits cost the same, with replace having lower priority than\n// add/remove.\n// Simple implementation of the Wagner-Fischer algorithm.\n// See http://en.wikipedia.org/wiki/Wagner-Fischer_algorithm\nenum EditType { kMatch, kAdd, kRemove, kReplace };\nGTEST_API_ std::vector<EditType> CalculateOptimalEdits(\n    const std::vector<size_t>& left, const std::vector<size_t>& right);\n\n// Same as above, but the input is represented as strings.\nGTEST_API_ std::vector<EditType> CalculateOptimalEdits(\n    const std::vector<std::string>& left,\n    const std::vector<std::string>& right);\n\n// Create a diff of the input strings in Unified diff format.\nGTEST_API_ std::string CreateUnifiedDiff(const std::vector<std::string>& left,\n                                         const std::vector<std::string>& right,\n                                         size_t context = 2);\n\n}  // namespace edit_distance\n\n// Constructs and returns the message for an equality assertion\n// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.\n//\n// The first four parameters are the expressions used in the assertion\n// and their values, as strings.  For example, for ASSERT_EQ(foo, bar)\n// where foo is 5 and bar is 6, we have:\n//\n//   expected_expression: \"foo\"\n//   actual_expression:   \"bar\"\n//   expected_value:      \"5\"\n//   actual_value:        \"6\"\n//\n// The ignoring_case parameter is true if and only if the assertion is a\n// *_STRCASEEQ*.  When it's true, the string \" (ignoring case)\" will\n// be inserted into the message.\nGTEST_API_ AssertionResult EqFailure(const char* expected_expression,\n                                     const char* actual_expression,\n                                     const std::string& expected_value,\n                                     const std::string& actual_value,\n                                     bool ignoring_case);\n\n// Constructs a failure message for Boolean assertions such as EXPECT_TRUE.\nGTEST_API_ std::string GetBoolAssertionFailureMessage(\n    const AssertionResult& assertion_result, const char* expression_text,\n    const char* actual_predicate_value, const char* expected_predicate_value);\n\n// This template class represents an IEEE floating-point number\n// (either single-precision or double-precision, depending on the\n// template parameters).\n//\n// The purpose of this class is to do more sophisticated number\n// comparison.  (Due to round-off error, etc, it's very unlikely that\n// two floating-points will be equal exactly.  Hence a naive\n// comparison by the == operation often doesn't work.)\n//\n// Format of IEEE floating-point:\n//\n//   The most-significant bit being the leftmost, an IEEE\n//   floating-point looks like\n//\n//     sign_bit exponent_bits fraction_bits\n//\n//   Here, sign_bit is a single bit that designates the sign of the\n//   number.\n//\n//   For float, there are 8 exponent bits and 23 fraction bits.\n//\n//   For double, there are 11 exponent bits and 52 fraction bits.\n//\n//   More details can be found at\n//   http://en.wikipedia.org/wiki/IEEE_floating-point_standard.\n//\n// Template parameter:\n//\n//   RawType: the raw floating-point type (either float or double)\ntemplate <typename RawType>\nclass FloatingPoint {\n public:\n  // Defines the unsigned integer type that has the same size as the\n  // floating point number.\n  typedef typename TypeWithSize<sizeof(RawType)>::UInt Bits;\n\n  // Constants.\n\n  // # of bits in a number.\n  static const size_t kBitCount = 8 * sizeof(RawType);\n\n  // # of fraction bits in a number.\n  static const size_t kFractionBitCount =\n      std::numeric_limits<RawType>::digits - 1;\n\n  // # of exponent bits in a number.\n  static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount;\n\n  // The mask for the sign bit.\n  static const Bits kSignBitMask = static_cast<Bits>(1) << (kBitCount - 1);\n\n  // The mask for the fraction bits.\n  static const Bits kFractionBitMask = ~static_cast<Bits>(0) >>\n                                       (kExponentBitCount + 1);\n\n  // The mask for the exponent bits.\n  static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask);\n\n  // How many ULP's (Units in the Last Place) we want to tolerate when\n  // comparing two numbers.  The larger the value, the more error we\n  // allow.  A 0 value means that two numbers must be exactly the same\n  // to be considered equal.\n  //\n  // The maximum error of a single floating-point operation is 0.5\n  // units in the last place.  On Intel CPU's, all floating-point\n  // calculations are done with 80-bit precision, while double has 64\n  // bits.  Therefore, 4 should be enough for ordinary use.\n  //\n  // See the following article for more details on ULP:\n  // http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/\n  static const uint32_t kMaxUlps = 4;\n\n  // Constructs a FloatingPoint from a raw floating-point number.\n  //\n  // On an Intel CPU, passing a non-normalized NAN (Not a Number)\n  // around may change its bits, although the new value is guaranteed\n  // to be also a NAN.  Therefore, don't expect this constructor to\n  // preserve the bits in x when x is a NAN.\n  explicit FloatingPoint(const RawType& x) { u_.value_ = x; }\n\n  // Static methods\n\n  // Reinterprets a bit pattern as a floating-point number.\n  //\n  // This function is needed to test the AlmostEquals() method.\n  static RawType ReinterpretBits(const Bits bits) {\n    FloatingPoint fp(0);\n    fp.u_.bits_ = bits;\n    return fp.u_.value_;\n  }\n\n  // Returns the floating-point number that represent positive infinity.\n  static RawType Infinity() { return ReinterpretBits(kExponentBitMask); }\n\n  // Returns the maximum representable finite floating-point number.\n  static RawType Max();\n\n  // Non-static methods\n\n  // Returns the bits that represents this number.\n  const Bits& bits() const { return u_.bits_; }\n\n  // Returns the exponent bits of this number.\n  Bits exponent_bits() const { return kExponentBitMask & u_.bits_; }\n\n  // Returns the fraction bits of this number.\n  Bits fraction_bits() const { return kFractionBitMask & u_.bits_; }\n\n  // Returns the sign bit of this number.\n  Bits sign_bit() const { return kSignBitMask & u_.bits_; }\n\n  // Returns true if and only if this is NAN (not a number).\n  bool is_nan() const {\n    // It's a NAN if the exponent bits are all ones and the fraction\n    // bits are not entirely zeros.\n    return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0);\n  }\n\n  // Returns true if and only if this number is at most kMaxUlps ULP's away\n  // from rhs.  In particular, this function:\n  //\n  //   - returns false if either number is (or both are) NAN.\n  //   - treats really large numbers as almost equal to infinity.\n  //   - thinks +0.0 and -0.0 are 0 DLP's apart.\n  bool AlmostEquals(const FloatingPoint& rhs) const {\n    // The IEEE standard says that any comparison operation involving\n    // a NAN must return false.\n    if (is_nan() || rhs.is_nan()) return false;\n\n    return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_) <=\n           kMaxUlps;\n  }\n\n private:\n  // The data type used to store the actual floating-point number.\n  union FloatingPointUnion {\n    RawType value_;  // The raw floating-point number.\n    Bits bits_;      // The bits that represent the number.\n  };\n\n  // Converts an integer from the sign-and-magnitude representation to\n  // the biased representation.  More precisely, let N be 2 to the\n  // power of (kBitCount - 1), an integer x is represented by the\n  // unsigned number x + N.\n  //\n  // For instance,\n  //\n  //   -N + 1 (the most negative number representable using\n  //          sign-and-magnitude) is represented by 1;\n  //   0      is represented by N; and\n  //   N - 1  (the biggest number representable using\n  //          sign-and-magnitude) is represented by 2N - 1.\n  //\n  // Read http://en.wikipedia.org/wiki/Signed_number_representations\n  // for more details on signed number representations.\n  static Bits SignAndMagnitudeToBiased(const Bits& sam) {\n    if (kSignBitMask & sam) {\n      // sam represents a negative number.\n      return ~sam + 1;\n    } else {\n      // sam represents a positive number.\n      return kSignBitMask | sam;\n    }\n  }\n\n  // Given two numbers in the sign-and-magnitude representation,\n  // returns the distance between them as an unsigned number.\n  static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits& sam1,\n                                                     const Bits& sam2) {\n    const Bits biased1 = SignAndMagnitudeToBiased(sam1);\n    const Bits biased2 = SignAndMagnitudeToBiased(sam2);\n    return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);\n  }\n\n  FloatingPointUnion u_;\n};\n\n// We cannot use std::numeric_limits<T>::max() as it clashes with the max()\n// macro defined by <windows.h>.\ntemplate <>\ninline float FloatingPoint<float>::Max() {\n  return FLT_MAX;\n}\ntemplate <>\ninline double FloatingPoint<double>::Max() {\n  return DBL_MAX;\n}\n\n// Typedefs the instances of the FloatingPoint template class that we\n// care to use.\ntypedef FloatingPoint<float> Float;\ntypedef FloatingPoint<double> Double;\n\n// In order to catch the mistake of putting tests that use different\n// test fixture classes in the same test suite, we need to assign\n// unique IDs to fixture classes and compare them.  The TypeId type is\n// used to hold such IDs.  The user should treat TypeId as an opaque\n// type: the only operation allowed on TypeId values is to compare\n// them for equality using the == operator.\ntypedef const void* TypeId;\n\ntemplate <typename T>\nclass TypeIdHelper {\n public:\n  // dummy_ must not have a const type.  Otherwise an overly eager\n  // compiler (e.g. MSVC 7.1 & 8.0) may try to merge\n  // TypeIdHelper<T>::dummy_ for different Ts as an \"optimization\".\n  static bool dummy_;\n};\n\ntemplate <typename T>\nbool TypeIdHelper<T>::dummy_ = false;\n\n// GetTypeId<T>() returns the ID of type T.  Different values will be\n// returned for different types.  Calling the function twice with the\n// same type argument is guaranteed to return the same ID.\ntemplate <typename T>\nTypeId GetTypeId() {\n  // The compiler is required to allocate a different\n  // TypeIdHelper<T>::dummy_ variable for each T used to instantiate\n  // the template.  Therefore, the address of dummy_ is guaranteed to\n  // be unique.\n  return &(TypeIdHelper<T>::dummy_);\n}\n\n// Returns the type ID of ::testing::Test.  Always call this instead\n// of GetTypeId< ::testing::Test>() to get the type ID of\n// ::testing::Test, as the latter may give the wrong result due to a\n// suspected linker bug when compiling Google Test as a Mac OS X\n// framework.\nGTEST_API_ TypeId GetTestTypeId();\n\n// Defines the abstract factory interface that creates instances\n// of a Test object.\nclass TestFactoryBase {\n public:\n  virtual ~TestFactoryBase() {}\n\n  // Creates a test instance to run. The instance is both created and destroyed\n  // within TestInfoImpl::Run()\n  virtual Test* CreateTest() = 0;\n\n protected:\n  TestFactoryBase() {}\n\n private:\n  TestFactoryBase(const TestFactoryBase&) = delete;\n  TestFactoryBase& operator=(const TestFactoryBase&) = delete;\n};\n\n// This class provides implementation of TeastFactoryBase interface.\n// It is used in TEST and TEST_F macros.\ntemplate <class TestClass>\nclass TestFactoryImpl : public TestFactoryBase {\n public:\n  Test* CreateTest() override { return new TestClass; }\n};\n\n#if GTEST_OS_WINDOWS\n\n// Predicate-formatters for implementing the HRESULT checking macros\n// {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}\n// We pass a long instead of HRESULT to avoid causing an\n// include dependency for the HRESULT type.\nGTEST_API_ AssertionResult IsHRESULTSuccess(const char* expr,\n                                            long hr);  // NOLINT\nGTEST_API_ AssertionResult IsHRESULTFailure(const char* expr,\n                                            long hr);  // NOLINT\n\n#endif  // GTEST_OS_WINDOWS\n\n// Types of SetUpTestSuite() and TearDownTestSuite() functions.\nusing SetUpTestSuiteFunc = void (*)();\nusing TearDownTestSuiteFunc = void (*)();\n\nstruct CodeLocation {\n  CodeLocation(const std::string& a_file, int a_line)\n      : file(a_file), line(a_line) {}\n\n  std::string file;\n  int line;\n};\n\n//  Helper to identify which setup function for TestCase / TestSuite to call.\n//  Only one function is allowed, either TestCase or TestSute but not both.\n\n// Utility functions to help SuiteApiResolver\nusing SetUpTearDownSuiteFuncType = void (*)();\n\ninline SetUpTearDownSuiteFuncType GetNotDefaultOrNull(\n    SetUpTearDownSuiteFuncType a, SetUpTearDownSuiteFuncType def) {\n  return a == def ? nullptr : a;\n}\n\ntemplate <typename T>\n//  Note that SuiteApiResolver inherits from T because\n//  SetUpTestSuite()/TearDownTestSuite() could be protected. This way\n//  SuiteApiResolver can access them.\nstruct SuiteApiResolver : T {\n  // testing::Test is only forward declared at this point. So we make it a\n  // dependent class for the compiler to be OK with it.\n  using Test =\n      typename std::conditional<sizeof(T) != 0, ::testing::Test, void>::type;\n\n  static SetUpTearDownSuiteFuncType GetSetUpCaseOrSuite(const char* filename,\n                                                        int line_num) {\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n    SetUpTearDownSuiteFuncType test_case_fp =\n        GetNotDefaultOrNull(&T::SetUpTestCase, &Test::SetUpTestCase);\n    SetUpTearDownSuiteFuncType test_suite_fp =\n        GetNotDefaultOrNull(&T::SetUpTestSuite, &Test::SetUpTestSuite);\n\n    GTEST_CHECK_(!test_case_fp || !test_suite_fp)\n        << \"Test can not provide both SetUpTestSuite and SetUpTestCase, please \"\n           \"make sure there is only one present at \"\n        << filename << \":\" << line_num;\n\n    return test_case_fp != nullptr ? test_case_fp : test_suite_fp;\n#else\n    (void)(filename);\n    (void)(line_num);\n    return &T::SetUpTestSuite;\n#endif\n  }\n\n  static SetUpTearDownSuiteFuncType GetTearDownCaseOrSuite(const char* filename,\n                                                           int line_num) {\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n    SetUpTearDownSuiteFuncType test_case_fp =\n        GetNotDefaultOrNull(&T::TearDownTestCase, &Test::TearDownTestCase);\n    SetUpTearDownSuiteFuncType test_suite_fp =\n        GetNotDefaultOrNull(&T::TearDownTestSuite, &Test::TearDownTestSuite);\n\n    GTEST_CHECK_(!test_case_fp || !test_suite_fp)\n        << \"Test can not provide both TearDownTestSuite and TearDownTestCase,\"\n           \" please make sure there is only one present at\"\n        << filename << \":\" << line_num;\n\n    return test_case_fp != nullptr ? test_case_fp : test_suite_fp;\n#else\n    (void)(filename);\n    (void)(line_num);\n    return &T::TearDownTestSuite;\n#endif\n  }\n};\n\n// Creates a new TestInfo object and registers it with Google Test;\n// returns the created object.\n//\n// Arguments:\n//\n//   test_suite_name:  name of the test suite\n//   name:             name of the test\n//   type_param:       the name of the test's type parameter, or NULL if\n//                     this is not a typed or a type-parameterized test.\n//   value_param:      text representation of the test's value parameter,\n//                     or NULL if this is not a type-parameterized test.\n//   code_location:    code location where the test is defined\n//   fixture_class_id: ID of the test fixture class\n//   set_up_tc:        pointer to the function that sets up the test suite\n//   tear_down_tc:     pointer to the function that tears down the test suite\n//   factory:          pointer to the factory that creates a test object.\n//                     The newly created TestInfo instance will assume\n//                     ownership of the factory object.\nGTEST_API_ TestInfo* MakeAndRegisterTestInfo(\n    const char* test_suite_name, const char* name, const char* type_param,\n    const char* value_param, CodeLocation code_location,\n    TypeId fixture_class_id, SetUpTestSuiteFunc set_up_tc,\n    TearDownTestSuiteFunc tear_down_tc, TestFactoryBase* factory);\n\n// If *pstr starts with the given prefix, modifies *pstr to be right\n// past the prefix and returns true; otherwise leaves *pstr unchanged\n// and returns false.  None of pstr, *pstr, and prefix can be NULL.\nGTEST_API_ bool SkipPrefix(const char* prefix, const char** pstr);\n\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \\\n/* class A needs to have dll-interface to be used by clients of class B */)\n\n// State of the definition of a type-parameterized test suite.\nclass GTEST_API_ TypedTestSuitePState {\n public:\n  TypedTestSuitePState() : registered_(false) {}\n\n  // Adds the given test name to defined_test_names_ and return true\n  // if the test suite hasn't been registered; otherwise aborts the\n  // program.\n  bool AddTestName(const char* file, int line, const char* case_name,\n                   const char* test_name) {\n    if (registered_) {\n      fprintf(stderr,\n              \"%s Test %s must be defined before \"\n              \"REGISTER_TYPED_TEST_SUITE_P(%s, ...).\\n\",\n              FormatFileLocation(file, line).c_str(), test_name, case_name);\n      fflush(stderr);\n      posix::Abort();\n    }\n    registered_tests_.insert(\n        ::std::make_pair(test_name, CodeLocation(file, line)));\n    return true;\n  }\n\n  bool TestExists(const std::string& test_name) const {\n    return registered_tests_.count(test_name) > 0;\n  }\n\n  const CodeLocation& GetCodeLocation(const std::string& test_name) const {\n    RegisteredTestsMap::const_iterator it = registered_tests_.find(test_name);\n    GTEST_CHECK_(it != registered_tests_.end());\n    return it->second;\n  }\n\n  // Verifies that registered_tests match the test names in\n  // defined_test_names_; returns registered_tests if successful, or\n  // aborts the program otherwise.\n  const char* VerifyRegisteredTestNames(const char* test_suite_name,\n                                        const char* file, int line,\n                                        const char* registered_tests);\n\n private:\n  typedef ::std::map<std::string, CodeLocation> RegisteredTestsMap;\n\n  bool registered_;\n  RegisteredTestsMap registered_tests_;\n};\n\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\nusing TypedTestCasePState = TypedTestSuitePState;\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\nGTEST_DISABLE_MSC_WARNINGS_POP_()  //  4251\n\n// Skips to the first non-space char after the first comma in 'str';\n// returns NULL if no comma is found in 'str'.\ninline const char* SkipComma(const char* str) {\n  const char* comma = strchr(str, ',');\n  if (comma == nullptr) {\n    return nullptr;\n  }\n  while (IsSpace(*(++comma))) {\n  }\n  return comma;\n}\n\n// Returns the prefix of 'str' before the first comma in it; returns\n// the entire string if it contains no comma.\ninline std::string GetPrefixUntilComma(const char* str) {\n  const char* comma = strchr(str, ',');\n  return comma == nullptr ? str : std::string(str, comma);\n}\n\n// Splits a given string on a given delimiter, populating a given\n// vector with the fields.\nvoid SplitString(const ::std::string& str, char delimiter,\n                 ::std::vector<::std::string>* dest);\n\n// The default argument to the template below for the case when the user does\n// not provide a name generator.\nstruct DefaultNameGenerator {\n  template <typename T>\n  static std::string GetName(int i) {\n    return StreamableToString(i);\n  }\n};\n\ntemplate <typename Provided = DefaultNameGenerator>\nstruct NameGeneratorSelector {\n  typedef Provided type;\n};\n\ntemplate <typename NameGenerator>\nvoid GenerateNamesRecursively(internal::None, std::vector<std::string>*, int) {}\n\ntemplate <typename NameGenerator, typename Types>\nvoid GenerateNamesRecursively(Types, std::vector<std::string>* result, int i) {\n  result->push_back(NameGenerator::template GetName<typename Types::Head>(i));\n  GenerateNamesRecursively<NameGenerator>(typename Types::Tail(), result,\n                                          i + 1);\n}\n\ntemplate <typename NameGenerator, typename Types>\nstd::vector<std::string> GenerateNames() {\n  std::vector<std::string> result;\n  GenerateNamesRecursively<NameGenerator>(Types(), &result, 0);\n  return result;\n}\n\n// TypeParameterizedTest<Fixture, TestSel, Types>::Register()\n// registers a list of type-parameterized tests with Google Test.  The\n// return value is insignificant - we just need to return something\n// such that we can call this function in a namespace scope.\n//\n// Implementation note: The GTEST_TEMPLATE_ macro declares a template\n// template parameter.  It's defined in gtest-type-util.h.\ntemplate <GTEST_TEMPLATE_ Fixture, class TestSel, typename Types>\nclass TypeParameterizedTest {\n public:\n  // 'index' is the index of the test in the type list 'Types'\n  // specified in INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, TestSuite,\n  // Types).  Valid values for 'index' are [0, N - 1] where N is the\n  // length of Types.\n  static bool Register(const char* prefix, const CodeLocation& code_location,\n                       const char* case_name, const char* test_names, int index,\n                       const std::vector<std::string>& type_names =\n                           GenerateNames<DefaultNameGenerator, Types>()) {\n    typedef typename Types::Head Type;\n    typedef Fixture<Type> FixtureClass;\n    typedef typename GTEST_BIND_(TestSel, Type) TestClass;\n\n    // First, registers the first type-parameterized test in the type\n    // list.\n    MakeAndRegisterTestInfo(\n        (std::string(prefix) + (prefix[0] == '\\0' ? \"\" : \"/\") + case_name +\n         \"/\" + type_names[static_cast<size_t>(index)])\n            .c_str(),\n        StripTrailingSpaces(GetPrefixUntilComma(test_names)).c_str(),\n        GetTypeName<Type>().c_str(),\n        nullptr,  // No value parameter.\n        code_location, GetTypeId<FixtureClass>(),\n        SuiteApiResolver<TestClass>::GetSetUpCaseOrSuite(\n            code_location.file.c_str(), code_location.line),\n        SuiteApiResolver<TestClass>::GetTearDownCaseOrSuite(\n            code_location.file.c_str(), code_location.line),\n        new TestFactoryImpl<TestClass>);\n\n    // Next, recurses (at compile time) with the tail of the type list.\n    return TypeParameterizedTest<Fixture, TestSel,\n                                 typename Types::Tail>::Register(prefix,\n                                                                 code_location,\n                                                                 case_name,\n                                                                 test_names,\n                                                                 index + 1,\n                                                                 type_names);\n  }\n};\n\n// The base case for the compile time recursion.\ntemplate <GTEST_TEMPLATE_ Fixture, class TestSel>\nclass TypeParameterizedTest<Fixture, TestSel, internal::None> {\n public:\n  static bool Register(const char* /*prefix*/, const CodeLocation&,\n                       const char* /*case_name*/, const char* /*test_names*/,\n                       int /*index*/,\n                       const std::vector<std::string>& =\n                           std::vector<std::string>() /*type_names*/) {\n    return true;\n  }\n};\n\nGTEST_API_ void RegisterTypeParameterizedTestSuite(const char* test_suite_name,\n                                                   CodeLocation code_location);\nGTEST_API_ void RegisterTypeParameterizedTestSuiteInstantiation(\n    const char* case_name);\n\n// TypeParameterizedTestSuite<Fixture, Tests, Types>::Register()\n// registers *all combinations* of 'Tests' and 'Types' with Google\n// Test.  The return value is insignificant - we just need to return\n// something such that we can call this function in a namespace scope.\ntemplate <GTEST_TEMPLATE_ Fixture, typename Tests, typename Types>\nclass TypeParameterizedTestSuite {\n public:\n  static bool Register(const char* prefix, CodeLocation code_location,\n                       const TypedTestSuitePState* state, const char* case_name,\n                       const char* test_names,\n                       const std::vector<std::string>& type_names =\n                           GenerateNames<DefaultNameGenerator, Types>()) {\n    RegisterTypeParameterizedTestSuiteInstantiation(case_name);\n    std::string test_name =\n        StripTrailingSpaces(GetPrefixUntilComma(test_names));\n    if (!state->TestExists(test_name)) {\n      fprintf(stderr, \"Failed to get code location for test %s.%s at %s.\",\n              case_name, test_name.c_str(),\n              FormatFileLocation(code_location.file.c_str(), code_location.line)\n                  .c_str());\n      fflush(stderr);\n      posix::Abort();\n    }\n    const CodeLocation& test_location = state->GetCodeLocation(test_name);\n\n    typedef typename Tests::Head Head;\n\n    // First, register the first test in 'Test' for each type in 'Types'.\n    TypeParameterizedTest<Fixture, Head, Types>::Register(\n        prefix, test_location, case_name, test_names, 0, type_names);\n\n    // Next, recurses (at compile time) with the tail of the test list.\n    return TypeParameterizedTestSuite<Fixture, typename Tests::Tail,\n                                      Types>::Register(prefix, code_location,\n                                                       state, case_name,\n                                                       SkipComma(test_names),\n                                                       type_names);\n  }\n};\n\n// The base case for the compile time recursion.\ntemplate <GTEST_TEMPLATE_ Fixture, typename Types>\nclass TypeParameterizedTestSuite<Fixture, internal::None, Types> {\n public:\n  static bool Register(const char* /*prefix*/, const CodeLocation&,\n                       const TypedTestSuitePState* /*state*/,\n                       const char* /*case_name*/, const char* /*test_names*/,\n                       const std::vector<std::string>& =\n                           std::vector<std::string>() /*type_names*/) {\n    return true;\n  }\n};\n\n// Returns the current OS stack trace as an std::string.\n//\n// The maximum number of stack frames to be included is specified by\n// the gtest_stack_trace_depth flag.  The skip_count parameter\n// specifies the number of top frames to be skipped, which doesn't\n// count against the number of frames to be included.\n//\n// For example, if Foo() calls Bar(), which in turn calls\n// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in\n// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't.\nGTEST_API_ std::string GetCurrentOsStackTraceExceptTop(UnitTest* unit_test,\n                                                       int skip_count);\n\n// Helpers for suppressing warnings on unreachable code or constant\n// condition.\n\n// Always returns true.\nGTEST_API_ bool AlwaysTrue();\n\n// Always returns false.\ninline bool AlwaysFalse() { return !AlwaysTrue(); }\n\n// Helper for suppressing false warning from Clang on a const char*\n// variable declared in a conditional expression always being NULL in\n// the else branch.\nstruct GTEST_API_ ConstCharPtr {\n  ConstCharPtr(const char* str) : value(str) {}\n  operator bool() const { return true; }\n  const char* value;\n};\n\n// Helper for declaring std::string within 'if' statement\n// in pre C++17 build environment.\nstruct TrueWithString {\n  TrueWithString() = default;\n  explicit TrueWithString(const char* str) : value(str) {}\n  explicit TrueWithString(const std::string& str) : value(str) {}\n  explicit operator bool() const { return true; }\n  std::string value;\n};\n\n// A simple Linear Congruential Generator for generating random\n// numbers with a uniform distribution.  Unlike rand() and srand(), it\n// doesn't use global state (and therefore can't interfere with user\n// code).  Unlike rand_r(), it's portable.  An LCG isn't very random,\n// but it's good enough for our purposes.\nclass GTEST_API_ Random {\n public:\n  static const uint32_t kMaxRange = 1u << 31;\n\n  explicit Random(uint32_t seed) : state_(seed) {}\n\n  void Reseed(uint32_t seed) { state_ = seed; }\n\n  // Generates a random number from [0, range).  Crashes if 'range' is\n  // 0 or greater than kMaxRange.\n  uint32_t Generate(uint32_t range);\n\n private:\n  uint32_t state_;\n  Random(const Random&) = delete;\n  Random& operator=(const Random&) = delete;\n};\n\n// Turns const U&, U&, const U, and U all into U.\n#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \\\n  typename std::remove_const<typename std::remove_reference<T>::type>::type\n\n// HasDebugStringAndShortDebugString<T>::value is a compile-time bool constant\n// that's true if and only if T has methods DebugString() and ShortDebugString()\n// that return std::string.\ntemplate <typename T>\nclass HasDebugStringAndShortDebugString {\n private:\n  template <typename C>\n  static auto CheckDebugString(C*) -> typename std::is_same<\n      std::string, decltype(std::declval<const C>().DebugString())>::type;\n  template <typename>\n  static std::false_type CheckDebugString(...);\n\n  template <typename C>\n  static auto CheckShortDebugString(C*) -> typename std::is_same<\n      std::string, decltype(std::declval<const C>().ShortDebugString())>::type;\n  template <typename>\n  static std::false_type CheckShortDebugString(...);\n\n  using HasDebugStringType = decltype(CheckDebugString<T>(nullptr));\n  using HasShortDebugStringType = decltype(CheckShortDebugString<T>(nullptr));\n\n public:\n  static constexpr bool value =\n      HasDebugStringType::value && HasShortDebugStringType::value;\n};\n\ntemplate <typename T>\nconstexpr bool HasDebugStringAndShortDebugString<T>::value;\n\n// When the compiler sees expression IsContainerTest<C>(0), if C is an\n// STL-style container class, the first overload of IsContainerTest\n// will be viable (since both C::iterator* and C::const_iterator* are\n// valid types and NULL can be implicitly converted to them).  It will\n// be picked over the second overload as 'int' is a perfect match for\n// the type of argument 0.  If C::iterator or C::const_iterator is not\n// a valid type, the first overload is not viable, and the second\n// overload will be picked.  Therefore, we can determine whether C is\n// a container class by checking the type of IsContainerTest<C>(0).\n// The value of the expression is insignificant.\n//\n// In C++11 mode we check the existence of a const_iterator and that an\n// iterator is properly implemented for the container.\n//\n// For pre-C++11 that we look for both C::iterator and C::const_iterator.\n// The reason is that C++ injects the name of a class as a member of the\n// class itself (e.g. you can refer to class iterator as either\n// 'iterator' or 'iterator::iterator').  If we look for C::iterator\n// only, for example, we would mistakenly think that a class named\n// iterator is an STL container.\n//\n// Also note that the simpler approach of overloading\n// IsContainerTest(typename C::const_iterator*) and\n// IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++.\ntypedef int IsContainer;\ntemplate <class C,\n          class Iterator = decltype(::std::declval<const C&>().begin()),\n          class = decltype(::std::declval<const C&>().end()),\n          class = decltype(++::std::declval<Iterator&>()),\n          class = decltype(*::std::declval<Iterator>()),\n          class = typename C::const_iterator>\nIsContainer IsContainerTest(int /* dummy */) {\n  return 0;\n}\n\ntypedef char IsNotContainer;\ntemplate <class C>\nIsNotContainer IsContainerTest(long /* dummy */) {\n  return '\\0';\n}\n\n// Trait to detect whether a type T is a hash table.\n// The heuristic used is that the type contains an inner type `hasher` and does\n// not contain an inner type `reverse_iterator`.\n// If the container is iterable in reverse, then order might actually matter.\ntemplate <typename T>\nstruct IsHashTable {\n private:\n  template <typename U>\n  static char test(typename U::hasher*, typename U::reverse_iterator*);\n  template <typename U>\n  static int test(typename U::hasher*, ...);\n  template <typename U>\n  static char test(...);\n\n public:\n  static const bool value = sizeof(test<T>(nullptr, nullptr)) == sizeof(int);\n};\n\ntemplate <typename T>\nconst bool IsHashTable<T>::value;\n\ntemplate <typename C,\n          bool = sizeof(IsContainerTest<C>(0)) == sizeof(IsContainer)>\nstruct IsRecursiveContainerImpl;\n\ntemplate <typename C>\nstruct IsRecursiveContainerImpl<C, false> : public std::false_type {};\n\n// Since the IsRecursiveContainerImpl depends on the IsContainerTest we need to\n// obey the same inconsistencies as the IsContainerTest, namely check if\n// something is a container is relying on only const_iterator in C++11 and\n// is relying on both const_iterator and iterator otherwise\ntemplate <typename C>\nstruct IsRecursiveContainerImpl<C, true> {\n  using value_type = decltype(*std::declval<typename C::const_iterator>());\n  using type =\n      std::is_same<typename std::remove_const<\n                       typename std::remove_reference<value_type>::type>::type,\n                   C>;\n};\n\n// IsRecursiveContainer<Type> is a unary compile-time predicate that\n// evaluates whether C is a recursive container type. A recursive container\n// type is a container type whose value_type is equal to the container type\n// itself. An example for a recursive container type is\n// boost::filesystem::path, whose iterator has a value_type that is equal to\n// boost::filesystem::path.\ntemplate <typename C>\nstruct IsRecursiveContainer : public IsRecursiveContainerImpl<C>::type {};\n\n// Utilities for native arrays.\n\n// ArrayEq() compares two k-dimensional native arrays using the\n// elements' operator==, where k can be any integer >= 0.  When k is\n// 0, ArrayEq() degenerates into comparing a single pair of values.\n\ntemplate <typename T, typename U>\nbool ArrayEq(const T* lhs, size_t size, const U* rhs);\n\n// This generic version is used when k is 0.\ntemplate <typename T, typename U>\ninline bool ArrayEq(const T& lhs, const U& rhs) {\n  return lhs == rhs;\n}\n\n// This overload is used when k >= 1.\ntemplate <typename T, typename U, size_t N>\ninline bool ArrayEq(const T (&lhs)[N], const U (&rhs)[N]) {\n  return internal::ArrayEq(lhs, N, rhs);\n}\n\n// This helper reduces code bloat.  If we instead put its logic inside\n// the previous ArrayEq() function, arrays with different sizes would\n// lead to different copies of the template code.\ntemplate <typename T, typename U>\nbool ArrayEq(const T* lhs, size_t size, const U* rhs) {\n  for (size_t i = 0; i != size; i++) {\n    if (!internal::ArrayEq(lhs[i], rhs[i])) return false;\n  }\n  return true;\n}\n\n// Finds the first element in the iterator range [begin, end) that\n// equals elem.  Element may be a native array type itself.\ntemplate <typename Iter, typename Element>\nIter ArrayAwareFind(Iter begin, Iter end, const Element& elem) {\n  for (Iter it = begin; it != end; ++it) {\n    if (internal::ArrayEq(*it, elem)) return it;\n  }\n  return end;\n}\n\n// CopyArray() copies a k-dimensional native array using the elements'\n// operator=, where k can be any integer >= 0.  When k is 0,\n// CopyArray() degenerates into copying a single value.\n\ntemplate <typename T, typename U>\nvoid CopyArray(const T* from, size_t size, U* to);\n\n// This generic version is used when k is 0.\ntemplate <typename T, typename U>\ninline void CopyArray(const T& from, U* to) {\n  *to = from;\n}\n\n// This overload is used when k >= 1.\ntemplate <typename T, typename U, size_t N>\ninline void CopyArray(const T (&from)[N], U (*to)[N]) {\n  internal::CopyArray(from, N, *to);\n}\n\n// This helper reduces code bloat.  If we instead put its logic inside\n// the previous CopyArray() function, arrays with different sizes\n// would lead to different copies of the template code.\ntemplate <typename T, typename U>\nvoid CopyArray(const T* from, size_t size, U* to) {\n  for (size_t i = 0; i != size; i++) {\n    internal::CopyArray(from[i], to + i);\n  }\n}\n\n// The relation between an NativeArray object (see below) and the\n// native array it represents.\n// We use 2 different structs to allow non-copyable types to be used, as long\n// as RelationToSourceReference() is passed.\nstruct RelationToSourceReference {};\nstruct RelationToSourceCopy {};\n\n// Adapts a native array to a read-only STL-style container.  Instead\n// of the complete STL container concept, this adaptor only implements\n// members useful for Google Mock's container matchers.  New members\n// should be added as needed.  To simplify the implementation, we only\n// support Element being a raw type (i.e. having no top-level const or\n// reference modifier).  It's the client's responsibility to satisfy\n// this requirement.  Element can be an array type itself (hence\n// multi-dimensional arrays are supported).\ntemplate <typename Element>\nclass NativeArray {\n public:\n  // STL-style container typedefs.\n  typedef Element value_type;\n  typedef Element* iterator;\n  typedef const Element* const_iterator;\n\n  // Constructs from a native array. References the source.\n  NativeArray(const Element* array, size_t count, RelationToSourceReference) {\n    InitRef(array, count);\n  }\n\n  // Constructs from a native array. Copies the source.\n  NativeArray(const Element* array, size_t count, RelationToSourceCopy) {\n    InitCopy(array, count);\n  }\n\n  // Copy constructor.\n  NativeArray(const NativeArray& rhs) {\n    (this->*rhs.clone_)(rhs.array_, rhs.size_);\n  }\n\n  ~NativeArray() {\n    if (clone_ != &NativeArray::InitRef) delete[] array_;\n  }\n\n  // STL-style container methods.\n  size_t size() const { return size_; }\n  const_iterator begin() const { return array_; }\n  const_iterator end() const { return array_ + size_; }\n  bool operator==(const NativeArray& rhs) const {\n    return size() == rhs.size() && ArrayEq(begin(), size(), rhs.begin());\n  }\n\n private:\n  static_assert(!std::is_const<Element>::value, \"Type must not be const\");\n  static_assert(!std::is_reference<Element>::value,\n                \"Type must not be a reference\");\n\n  // Initializes this object with a copy of the input.\n  void InitCopy(const Element* array, size_t a_size) {\n    Element* const copy = new Element[a_size];\n    CopyArray(array, a_size, copy);\n    array_ = copy;\n    size_ = a_size;\n    clone_ = &NativeArray::InitCopy;\n  }\n\n  // Initializes this object with a reference of the input.\n  void InitRef(const Element* array, size_t a_size) {\n    array_ = array;\n    size_ = a_size;\n    clone_ = &NativeArray::InitRef;\n  }\n\n  const Element* array_;\n  size_t size_;\n  void (NativeArray::*clone_)(const Element*, size_t);\n};\n\n// Backport of std::index_sequence.\ntemplate <size_t... Is>\nstruct IndexSequence {\n  using type = IndexSequence;\n};\n\n// Double the IndexSequence, and one if plus_one is true.\ntemplate <bool plus_one, typename T, size_t sizeofT>\nstruct DoubleSequence;\ntemplate <size_t... I, size_t sizeofT>\nstruct DoubleSequence<true, IndexSequence<I...>, sizeofT> {\n  using type = IndexSequence<I..., (sizeofT + I)..., 2 * sizeofT>;\n};\ntemplate <size_t... I, size_t sizeofT>\nstruct DoubleSequence<false, IndexSequence<I...>, sizeofT> {\n  using type = IndexSequence<I..., (sizeofT + I)...>;\n};\n\n// Backport of std::make_index_sequence.\n// It uses O(ln(N)) instantiation depth.\ntemplate <size_t N>\nstruct MakeIndexSequenceImpl\n    : DoubleSequence<N % 2 == 1, typename MakeIndexSequenceImpl<N / 2>::type,\n                     N / 2>::type {};\n\ntemplate <>\nstruct MakeIndexSequenceImpl<0> : IndexSequence<> {};\n\ntemplate <size_t N>\nusing MakeIndexSequence = typename MakeIndexSequenceImpl<N>::type;\n\ntemplate <typename... T>\nusing IndexSequenceFor = typename MakeIndexSequence<sizeof...(T)>::type;\n\ntemplate <size_t>\nstruct Ignore {\n  Ignore(...);  // NOLINT\n};\n\ntemplate <typename>\nstruct ElemFromListImpl;\ntemplate <size_t... I>\nstruct ElemFromListImpl<IndexSequence<I...>> {\n  // We make Ignore a template to solve a problem with MSVC.\n  // A non-template Ignore would work fine with `decltype(Ignore(I))...`, but\n  // MSVC doesn't understand how to deal with that pack expansion.\n  // Use `0 * I` to have a single instantiation of Ignore.\n  template <typename R>\n  static R Apply(Ignore<0 * I>..., R (*)(), ...);\n};\n\ntemplate <size_t N, typename... T>\nstruct ElemFromList {\n  using type =\n      decltype(ElemFromListImpl<typename MakeIndexSequence<N>::type>::Apply(\n          static_cast<T (*)()>(nullptr)...));\n};\n\nstruct FlatTupleConstructTag {};\n\ntemplate <typename... T>\nclass FlatTuple;\n\ntemplate <typename Derived, size_t I>\nstruct FlatTupleElemBase;\n\ntemplate <typename... T, size_t I>\nstruct FlatTupleElemBase<FlatTuple<T...>, I> {\n  using value_type = typename ElemFromList<I, T...>::type;\n  FlatTupleElemBase() = default;\n  template <typename Arg>\n  explicit FlatTupleElemBase(FlatTupleConstructTag, Arg&& t)\n      : value(std::forward<Arg>(t)) {}\n  value_type value;\n};\n\ntemplate <typename Derived, typename Idx>\nstruct FlatTupleBase;\n\ntemplate <size_t... Idx, typename... T>\nstruct FlatTupleBase<FlatTuple<T...>, IndexSequence<Idx...>>\n    : FlatTupleElemBase<FlatTuple<T...>, Idx>... {\n  using Indices = IndexSequence<Idx...>;\n  FlatTupleBase() = default;\n  template <typename... Args>\n  explicit FlatTupleBase(FlatTupleConstructTag, Args&&... args)\n      : FlatTupleElemBase<FlatTuple<T...>, Idx>(FlatTupleConstructTag{},\n                                                std::forward<Args>(args))... {}\n\n  template <size_t I>\n  const typename ElemFromList<I, T...>::type& Get() const {\n    return FlatTupleElemBase<FlatTuple<T...>, I>::value;\n  }\n\n  template <size_t I>\n  typename ElemFromList<I, T...>::type& Get() {\n    return FlatTupleElemBase<FlatTuple<T...>, I>::value;\n  }\n\n  template <typename F>\n  auto Apply(F&& f) -> decltype(std::forward<F>(f)(this->Get<Idx>()...)) {\n    return std::forward<F>(f)(Get<Idx>()...);\n  }\n\n  template <typename F>\n  auto Apply(F&& f) const -> decltype(std::forward<F>(f)(this->Get<Idx>()...)) {\n    return std::forward<F>(f)(Get<Idx>()...);\n  }\n};\n\n// Analog to std::tuple but with different tradeoffs.\n// This class minimizes the template instantiation depth, thus allowing more\n// elements than std::tuple would. std::tuple has been seen to require an\n// instantiation depth of more than 10x the number of elements in some\n// implementations.\n// FlatTuple and ElemFromList are not recursive and have a fixed depth\n// regardless of T...\n// MakeIndexSequence, on the other hand, it is recursive but with an\n// instantiation depth of O(ln(N)).\ntemplate <typename... T>\nclass FlatTuple\n    : private FlatTupleBase<FlatTuple<T...>,\n                            typename MakeIndexSequence<sizeof...(T)>::type> {\n  using Indices = typename FlatTupleBase<\n      FlatTuple<T...>, typename MakeIndexSequence<sizeof...(T)>::type>::Indices;\n\n public:\n  FlatTuple() = default;\n  template <typename... Args>\n  explicit FlatTuple(FlatTupleConstructTag tag, Args&&... args)\n      : FlatTuple::FlatTupleBase(tag, std::forward<Args>(args)...) {}\n\n  using FlatTuple::FlatTupleBase::Apply;\n  using FlatTuple::FlatTupleBase::Get;\n};\n\n// Utility functions to be called with static_assert to induce deprecation\n// warnings.\nGTEST_INTERNAL_DEPRECATED(\n    \"INSTANTIATE_TEST_CASE_P is deprecated, please use \"\n    \"INSTANTIATE_TEST_SUITE_P\")\nconstexpr bool InstantiateTestCase_P_IsDeprecated() { return true; }\n\nGTEST_INTERNAL_DEPRECATED(\n    \"TYPED_TEST_CASE_P is deprecated, please use \"\n    \"TYPED_TEST_SUITE_P\")\nconstexpr bool TypedTestCase_P_IsDeprecated() { return true; }\n\nGTEST_INTERNAL_DEPRECATED(\n    \"TYPED_TEST_CASE is deprecated, please use \"\n    \"TYPED_TEST_SUITE\")\nconstexpr bool TypedTestCaseIsDeprecated() { return true; }\n\nGTEST_INTERNAL_DEPRECATED(\n    \"REGISTER_TYPED_TEST_CASE_P is deprecated, please use \"\n    \"REGISTER_TYPED_TEST_SUITE_P\")\nconstexpr bool RegisterTypedTestCase_P_IsDeprecated() { return true; }\n\nGTEST_INTERNAL_DEPRECATED(\n    \"INSTANTIATE_TYPED_TEST_CASE_P is deprecated, please use \"\n    \"INSTANTIATE_TYPED_TEST_SUITE_P\")\nconstexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; }\n\n}  // namespace internal\n}  // namespace testing\n\nnamespace std {\n// Some standard library implementations use `struct tuple_size` and some use\n// `class tuple_size`. Clang warns about the mismatch.\n// https://reviews.llvm.org/D55466\n#ifdef __clang__\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wmismatched-tags\"\n#endif\ntemplate <typename... Ts>\nstruct tuple_size<testing::internal::FlatTuple<Ts...>>\n    : std::integral_constant<size_t, sizeof...(Ts)> {};\n#ifdef __clang__\n#pragma clang diagnostic pop\n#endif\n}  // namespace std\n\n#define GTEST_MESSAGE_AT_(file, line, message, result_type)             \\\n  ::testing::internal::AssertHelper(result_type, file, line, message) = \\\n      ::testing::Message()\n\n#define GTEST_MESSAGE_(message, result_type) \\\n  GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type)\n\n#define GTEST_FATAL_FAILURE_(message) \\\n  return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure)\n\n#define GTEST_NONFATAL_FAILURE_(message) \\\n  GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure)\n\n#define GTEST_SUCCESS_(message) \\\n  GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)\n\n#define GTEST_SKIP_(message) \\\n  return GTEST_MESSAGE_(message, ::testing::TestPartResult::kSkip)\n\n// Suppress MSVC warning 4072 (unreachable code) for the code following\n// statement if it returns or throws (or doesn't return or throw in some\n// situations).\n// NOTE: The \"else\" is important to keep this expansion to prevent a top-level\n// \"else\" from attaching to our \"if\".\n#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \\\n  if (::testing::internal::AlwaysTrue()) {                        \\\n    statement;                                                    \\\n  } else                     /* NOLINT */                         \\\n    static_assert(true, \"\")  // User must have a semicolon after expansion.\n\n#if GTEST_HAS_EXCEPTIONS\n\nnamespace testing {\nnamespace internal {\n\nclass NeverThrown {\n public:\n  const char* what() const noexcept {\n    return \"this exception should never be thrown\";\n  }\n};\n\n}  // namespace internal\n}  // namespace testing\n\n#if GTEST_HAS_RTTI\n\n#define GTEST_EXCEPTION_TYPE_(e) ::testing::internal::GetTypeName(typeid(e))\n\n#else  // GTEST_HAS_RTTI\n\n#define GTEST_EXCEPTION_TYPE_(e) \\\n  std::string { \"an std::exception-derived error\" }\n\n#endif  // GTEST_HAS_RTTI\n\n#define GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception)   \\\n  catch (typename std::conditional<                                            \\\n         std::is_same<typename std::remove_cv<typename std::remove_reference<  \\\n                          expected_exception>::type>::type,                    \\\n                      std::exception>::value,                                  \\\n         const ::testing::internal::NeverThrown&, const std::exception&>::type \\\n             e) {                                                              \\\n    gtest_msg.value = \"Expected: \" #statement                                  \\\n                      \" throws an exception of type \" #expected_exception      \\\n                      \".\\n  Actual: it throws \";                               \\\n    gtest_msg.value += GTEST_EXCEPTION_TYPE_(e);                               \\\n    gtest_msg.value += \" with description \\\"\";                                 \\\n    gtest_msg.value += e.what();                                               \\\n    gtest_msg.value += \"\\\".\";                                                  \\\n    goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__);                \\\n  }\n\n#else  // GTEST_HAS_EXCEPTIONS\n\n#define GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception)\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n#define GTEST_TEST_THROW_(statement, expected_exception, fail)              \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_                                             \\\n  if (::testing::internal::TrueWithString gtest_msg{}) {                    \\\n    bool gtest_caught_expected = false;                                     \\\n    try {                                                                   \\\n      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement);            \\\n    } catch (expected_exception const&) {                                   \\\n      gtest_caught_expected = true;                                         \\\n    }                                                                       \\\n    GTEST_TEST_THROW_CATCH_STD_EXCEPTION_(statement, expected_exception)    \\\n    catch (...) {                                                           \\\n      gtest_msg.value = \"Expected: \" #statement                             \\\n                        \" throws an exception of type \" #expected_exception \\\n                        \".\\n  Actual: it throws a different type.\";         \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__);           \\\n    }                                                                       \\\n    if (!gtest_caught_expected) {                                           \\\n      gtest_msg.value = \"Expected: \" #statement                             \\\n                        \" throws an exception of type \" #expected_exception \\\n                        \".\\n  Actual: it throws nothing.\";                  \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__);           \\\n    }                                                                       \\\n  } else /*NOLINT*/                                                         \\\n    GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__)                   \\\n        : fail(gtest_msg.value.c_str())\n\n#if GTEST_HAS_EXCEPTIONS\n\n#define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_()                \\\n  catch (std::exception const& e) {                               \\\n    gtest_msg.value = \"it throws \";                               \\\n    gtest_msg.value += GTEST_EXCEPTION_TYPE_(e);                  \\\n    gtest_msg.value += \" with description \\\"\";                    \\\n    gtest_msg.value += e.what();                                  \\\n    gtest_msg.value += \"\\\".\";                                     \\\n    goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \\\n  }\n\n#else  // GTEST_HAS_EXCEPTIONS\n\n#define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_()\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n#define GTEST_TEST_NO_THROW_(statement, fail)                            \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_                                          \\\n  if (::testing::internal::TrueWithString gtest_msg{}) {                 \\\n    try {                                                                \\\n      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement);         \\\n    }                                                                    \\\n    GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_()                           \\\n    catch (...) {                                                        \\\n      gtest_msg.value = \"it throws.\";                                    \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__);      \\\n    }                                                                    \\\n  } else                                                                 \\\n    GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__)              \\\n        : fail((\"Expected: \" #statement \" doesn't throw an exception.\\n\" \\\n                \"  Actual: \" +                                           \\\n                gtest_msg.value)                                         \\\n                   .c_str())\n\n#define GTEST_TEST_ANY_THROW_(statement, fail)                       \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_                                      \\\n  if (::testing::internal::AlwaysTrue()) {                           \\\n    bool gtest_caught_any = false;                                   \\\n    try {                                                            \\\n      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement);     \\\n    } catch (...) {                                                  \\\n      gtest_caught_any = true;                                       \\\n    }                                                                \\\n    if (!gtest_caught_any) {                                         \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \\\n    }                                                                \\\n  } else                                                             \\\n    GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__)         \\\n        : fail(\"Expected: \" #statement                               \\\n               \" throws an exception.\\n\"                             \\\n               \"  Actual: it doesn't.\")\n\n// Implements Boolean test assertions such as EXPECT_TRUE. expression can be\n// either a boolean expression or an AssertionResult. text is a textual\n// representation of expression as it was passed into the EXPECT_TRUE.\n#define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_                                       \\\n  if (const ::testing::AssertionResult gtest_ar_ =                    \\\n          ::testing::AssertionResult(expression))                     \\\n    ;                                                                 \\\n  else                                                                \\\n    fail(::testing::internal::GetBoolAssertionFailureMessage(         \\\n             gtest_ar_, text, #actual, #expected)                     \\\n             .c_str())\n\n#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail)                          \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_                                                \\\n  if (::testing::internal::AlwaysTrue()) {                                     \\\n    ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \\\n    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement);                 \\\n    if (gtest_fatal_failure_checker.has_new_fatal_failure()) {                 \\\n      goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__);            \\\n    }                                                                          \\\n  } else                                                                       \\\n    GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__)                    \\\n        : fail(\"Expected: \" #statement                                         \\\n               \" doesn't generate new fatal \"                                  \\\n               \"failures in the current thread.\\n\"                             \\\n               \"  Actual: it does.\")\n\n// Expands to the name of the class that implements the given test.\n#define GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \\\n  test_suite_name##_##test_name##_Test\n\n// Helper macro for defining tests.\n#define GTEST_TEST_(test_suite_name, test_name, parent_class, parent_id)       \\\n  static_assert(sizeof(GTEST_STRINGIFY_(test_suite_name)) > 1,                 \\\n                \"test_suite_name must not be empty\");                          \\\n  static_assert(sizeof(GTEST_STRINGIFY_(test_name)) > 1,                       \\\n                \"test_name must not be empty\");                                \\\n  class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)                     \\\n      : public parent_class {                                                  \\\n   public:                                                                     \\\n    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() = default;            \\\n    ~GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() override = default;  \\\n    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)                         \\\n    (const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &) = delete;     \\\n    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=(            \\\n        const GTEST_TEST_CLASS_NAME_(test_suite_name,                          \\\n                                     test_name) &) = delete; /* NOLINT */      \\\n    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)                         \\\n    (GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) &&) noexcept = delete; \\\n    GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) & operator=(            \\\n        GTEST_TEST_CLASS_NAME_(test_suite_name,                                \\\n                               test_name) &&) noexcept = delete; /* NOLINT */  \\\n                                                                               \\\n   private:                                                                    \\\n    void TestBody() override;                                                  \\\n    static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;      \\\n  };                                                                           \\\n                                                                               \\\n  ::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_suite_name,           \\\n                                                    test_name)::test_info_ =   \\\n      ::testing::internal::MakeAndRegisterTestInfo(                            \\\n          #test_suite_name, #test_name, nullptr, nullptr,                      \\\n          ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id),  \\\n          ::testing::internal::SuiteApiResolver<                               \\\n              parent_class>::GetSetUpCaseOrSuite(__FILE__, __LINE__),          \\\n          ::testing::internal::SuiteApiResolver<                               \\\n              parent_class>::GetTearDownCaseOrSuite(__FILE__, __LINE__),       \\\n          new ::testing::internal::TestFactoryImpl<GTEST_TEST_CLASS_NAME_(     \\\n              test_suite_name, test_name)>);                                   \\\n  void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/gtest-linked_ptr.h",
    "content": "// Copyright 2003 Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// A \"smart\" pointer type with reference tracking.  Every pointer to a\n// particular object is kept on a circular linked list.  When the last pointer\n// to an object is destroyed or reassigned, the object is deleted.\n//\n// Used properly, this deletes the object when the last reference goes away.\n// There are several caveats:\n// - Like all reference counting schemes, cycles lead to leaks.\n// - Each smart pointer is actually two pointers (8 bytes instead of 4).\n// - Every time a pointer is assigned, the entire list of pointers to that\n//   object is traversed.  This class is therefore NOT SUITABLE when there\n//   will often be more than two or three pointers to a particular object.\n// - References are only tracked as long as linked_ptr<> objects are copied.\n//   If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS\n//   will happen (double deletion).\n//\n// A good use of this class is storing object references in STL containers.\n// You can safely put linked_ptr<> in a vector<>.\n// Other uses may not be as good.\n//\n// Note: If you use an incomplete type with linked_ptr<>, the class\n// *containing* linked_ptr<> must have a constructor and destructor (even\n// if they do nothing!).\n//\n// Bill Gibbons suggested we use something like this.\n//\n// Thread Safety:\n//   Unlike other linked_ptr implementations, in this implementation\n//   a linked_ptr object is thread-safe in the sense that:\n//     - it's safe to copy linked_ptr objects concurrently,\n//     - it's safe to copy *from* a linked_ptr and read its underlying\n//       raw pointer (e.g. via get()) concurrently, and\n//     - it's safe to write to two linked_ptrs that point to the same\n//       shared object concurrently.\n// FIXME: rename this to safe_linked_ptr to avoid\n// confusion with normal linked_ptr.\n\n// GOOGLETEST_CM0001 DO NOT DELETE\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_\n\n#include <stdlib.h>\n#include <assert.h>\n\n#include \"gtest/internal/gtest-port.h\"\n\nnamespace testing {\nnamespace internal {\n\n// Protects copying of all linked_ptr objects.\nGTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex);\n\n// This is used internally by all instances of linked_ptr<>.  It needs to be\n// a non-template class because different types of linked_ptr<> can refer to\n// the same object (linked_ptr<Superclass>(obj) vs linked_ptr<Subclass>(obj)).\n// So, it needs to be possible for different types of linked_ptr to participate\n// in the same circular linked list, so we need a single class type here.\n//\n// DO NOT USE THIS CLASS DIRECTLY YOURSELF.  Use linked_ptr<T>.\nclass linked_ptr_internal {\n public:\n  // Create a new circle that includes only this instance.\n  void join_new() {\n    next_ = this;\n  }\n\n  // Many linked_ptr operations may change p.link_ for some linked_ptr\n  // variable p in the same circle as this object.  Therefore we need\n  // to prevent two such operations from occurring concurrently.\n  //\n  // Note that different types of linked_ptr objects can coexist in a\n  // circle (e.g. linked_ptr<Base>, linked_ptr<Derived1>, and\n  // linked_ptr<Derived2>).  Therefore we must use a single mutex to\n  // protect all linked_ptr objects.  This can create serious\n  // contention in production code, but is acceptable in a testing\n  // framework.\n\n  // Join an existing circle.\n  void join(linked_ptr_internal const* ptr)\n      GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) {\n    MutexLock lock(&g_linked_ptr_mutex);\n\n    linked_ptr_internal const* p = ptr;\n    while (p->next_ != ptr) {\n      assert(p->next_ != this &&\n             \"Trying to join() a linked ring we are already in. \"\n             \"Is GMock thread safety enabled?\");\n      p = p->next_;\n    }\n    p->next_ = this;\n    next_ = ptr;\n  }\n\n  // Leave whatever circle we're part of.  Returns true if we were the\n  // last member of the circle.  Once this is done, you can join() another.\n  bool depart()\n      GTEST_LOCK_EXCLUDED_(g_linked_ptr_mutex) {\n    MutexLock lock(&g_linked_ptr_mutex);\n\n    if (next_ == this) return true;\n    linked_ptr_internal const* p = next_;\n    while (p->next_ != this) {\n      assert(p->next_ != next_ &&\n             \"Trying to depart() a linked ring we are not in. \"\n             \"Is GMock thread safety enabled?\");\n      p = p->next_;\n    }\n    p->next_ = next_;\n    return false;\n  }\n\n private:\n  mutable linked_ptr_internal const* next_;\n};\n\ntemplate <typename T>\nclass linked_ptr {\n public:\n  typedef T element_type;\n\n  // Take over ownership of a raw pointer.  This should happen as soon as\n  // possible after the object is created.\n  explicit linked_ptr(T* ptr = NULL) { capture(ptr); }\n  ~linked_ptr() { depart(); }\n\n  // Copy an existing linked_ptr<>, adding ourselves to the list of references.\n  template <typename U> linked_ptr(linked_ptr<U> const& ptr) { copy(&ptr); }\n  linked_ptr(linked_ptr const& ptr) {  // NOLINT\n    assert(&ptr != this);\n    copy(&ptr);\n  }\n\n  // Assignment releases the old value and acquires the new.\n  template <typename U> linked_ptr& operator=(linked_ptr<U> const& ptr) {\n    depart();\n    copy(&ptr);\n    return *this;\n  }\n\n  linked_ptr& operator=(linked_ptr const& ptr) {\n    if (&ptr != this) {\n      depart();\n      copy(&ptr);\n    }\n    return *this;\n  }\n\n  // Smart pointer members.\n  void reset(T* ptr = NULL) {\n    depart();\n    capture(ptr);\n  }\n  T* get() const { return value_; }\n  T* operator->() const { return value_; }\n  T& operator*() const { return *value_; }\n\n  bool operator==(T* p) const { return value_ == p; }\n  bool operator!=(T* p) const { return value_ != p; }\n  template <typename U>\n  bool operator==(linked_ptr<U> const& ptr) const {\n    return value_ == ptr.get();\n  }\n  template <typename U>\n  bool operator!=(linked_ptr<U> const& ptr) const {\n    return value_ != ptr.get();\n  }\n\n private:\n  template <typename U>\n  friend class linked_ptr;\n\n  T* value_;\n  linked_ptr_internal link_;\n\n  void depart() {\n    if (link_.depart()) delete value_;\n  }\n\n  void capture(T* ptr) {\n    value_ = ptr;\n    link_.join_new();\n  }\n\n  template <typename U> void copy(linked_ptr<U> const* ptr) {\n    value_ = ptr->get();\n    if (value_)\n      link_.join(&ptr->link_);\n    else\n      link_.join_new();\n  }\n};\n\ntemplate<typename T> inline\nbool operator==(T* ptr, const linked_ptr<T>& x) {\n  return ptr == x.get();\n}\n\ntemplate<typename T> inline\nbool operator!=(T* ptr, const linked_ptr<T>& x) {\n  return ptr != x.get();\n}\n\n// A function to convert T* into linked_ptr<T>\n// Doing e.g. make_linked_ptr(new FooBarBaz<type>(arg)) is a shorter notation\n// for linked_ptr<FooBarBaz<type> >(new FooBarBaz<type>(arg))\ntemplate <typename T>\nlinked_ptr<T> make_linked_ptr(T* ptr) {\n  return linked_ptr<T>(ptr);\n}\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/gtest-param-util-generated.h",
    "content": "// This file was GENERATED by command:\n//     pump.py gtest-param-util-generated.h.pump\n// DO NOT EDIT BY HAND!!!\n\n// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n// Type and function utilities for implementing parameterized tests.\n// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!\n//\n// Currently Google Test supports at most 50 arguments in Values,\n// and at most 10 arguments in Combine. Please contact\n// googletestframework@googlegroups.com if you need more.\n// Please note that the number of arguments to Combine is limited\n// by the maximum arity of the implementation of tuple which is\n// currently set at 10.\n\n// GOOGLETEST_CM0001 DO NOT DELETE\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_\n\n#include \"gtest/internal/gtest-param-util.h\"\n#include \"gtest/internal/gtest-port.h\"\n\nnamespace testing {\n\n// Forward declarations of ValuesIn(), which is implemented in\n// include/gtest/gtest-param-test.h.\ntemplate <typename ForwardIterator>\ninternal::ParamGenerator<\n  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>\nValuesIn(ForwardIterator begin, ForwardIterator end);\n\ntemplate <typename T, size_t N>\ninternal::ParamGenerator<T> ValuesIn(const T (&array)[N]);\n\ntemplate <class Container>\ninternal::ParamGenerator<typename Container::value_type> ValuesIn(\n    const Container& container);\n\nnamespace internal {\n\n// Used in the Values() function to provide polymorphic capabilities.\ntemplate <typename T1>\nclass ValueArray1 {\n public:\n  explicit ValueArray1(T1 v1) : v1_(v1) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray1(const ValueArray1& other) : v1_(other.v1_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray1& other);\n\n  const T1 v1_;\n};\n\ntemplate <typename T1, typename T2>\nclass ValueArray2 {\n public:\n  ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray2(const ValueArray2& other) : v1_(other.v1_), v2_(other.v2_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray2& other);\n\n  const T1 v1_;\n  const T2 v2_;\n};\n\ntemplate <typename T1, typename T2, typename T3>\nclass ValueArray3 {\n public:\n  ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray3(const ValueArray3& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray3& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4>\nclass ValueArray4 {\n public:\n  ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray4(const ValueArray4& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray4& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\nclass ValueArray5 {\n public:\n  ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray5(const ValueArray5& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray5& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6>\nclass ValueArray6 {\n public:\n  ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray6(const ValueArray6& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray6& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7>\nclass ValueArray7 {\n public:\n  ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray7(const ValueArray7& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray7& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8>\nclass ValueArray8 {\n public:\n  ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,\n      T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray8(const ValueArray8& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray8& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9>\nclass ValueArray9 {\n public:\n  ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,\n      T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray9(const ValueArray9& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray9& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10>\nclass ValueArray10 {\n public:\n  ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray10(const ValueArray10& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray10& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11>\nclass ValueArray11 {\n public:\n  ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),\n      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray11(const ValueArray11& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray11& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12>\nclass ValueArray12 {\n public:\n  ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),\n      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray12(const ValueArray12& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray12& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13>\nclass ValueArray13 {\n public:\n  ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),\n      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),\n      v12_(v12), v13_(v13) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray13(const ValueArray13& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray13& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14>\nclass ValueArray14 {\n public:\n  ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray14(const ValueArray14& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray14& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15>\nclass ValueArray15 {\n public:\n  ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray15(const ValueArray15& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray15& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16>\nclass ValueArray16 {\n public:\n  ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),\n      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),\n      v16_(v16) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray16(const ValueArray16& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray16& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17>\nclass ValueArray17 {\n public:\n  ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,\n      T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray17(const ValueArray17& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray17& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18>\nclass ValueArray18 {\n public:\n  ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray18(const ValueArray18& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray18& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19>\nclass ValueArray19 {\n public:\n  ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),\n      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),\n      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray19(const ValueArray19& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray19& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20>\nclass ValueArray20 {\n public:\n  ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),\n      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),\n      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),\n      v19_(v19), v20_(v20) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray20(const ValueArray20& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray20& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21>\nclass ValueArray21 {\n public:\n  ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),\n      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),\n      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),\n      v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray21(const ValueArray21& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray21& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22>\nclass ValueArray22 {\n public:\n  ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray22(const ValueArray22& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray22& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23>\nclass ValueArray23 {\n public:\n  ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray23(const ValueArray23& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray23& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24>\nclass ValueArray24 {\n public:\n  ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),\n      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),\n      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),\n      v22_(v22), v23_(v23), v24_(v24) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray24(const ValueArray24& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray24& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25>\nclass ValueArray25 {\n public:\n  ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,\n      T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray25(const ValueArray25& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray25& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26>\nclass ValueArray26 {\n public:\n  ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray26(const ValueArray26& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray26& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27>\nclass ValueArray27 {\n public:\n  ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),\n      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),\n      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),\n      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),\n      v26_(v26), v27_(v27) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray27(const ValueArray27& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray27& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28>\nclass ValueArray28 {\n public:\n  ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),\n      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),\n      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),\n      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),\n      v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray28(const ValueArray28& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray28& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29>\nclass ValueArray29 {\n public:\n  ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),\n      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),\n      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),\n      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),\n      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray29(const ValueArray29& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray29& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30>\nclass ValueArray30 {\n public:\n  ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray30(const ValueArray30& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray30& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31>\nclass ValueArray31 {\n public:\n  ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30), v31_(v31) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray31(const ValueArray31& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray31& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32>\nclass ValueArray32 {\n public:\n  ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),\n      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),\n      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),\n      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),\n      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray32(const ValueArray32& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray32& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33>\nclass ValueArray33 {\n public:\n  ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,\n      T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray33(const ValueArray33& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray33& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34>\nclass ValueArray34 {\n public:\n  ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33), v34_(v34) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray34(const ValueArray34& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray34& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35>\nclass ValueArray35 {\n public:\n  ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),\n      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),\n      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),\n      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),\n      v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),\n      v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray35(const ValueArray35& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray35& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36>\nclass ValueArray36 {\n public:\n  ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),\n      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),\n      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),\n      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),\n      v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),\n      v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray36(const ValueArray36& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray36& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37>\nclass ValueArray37 {\n public:\n  ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),\n      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),\n      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),\n      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),\n      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),\n      v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),\n      v36_(v36), v37_(v37) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray37(const ValueArray37& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray37& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38>\nclass ValueArray38 {\n public:\n  ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),\n      v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray38(const ValueArray38& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray38& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39>\nclass ValueArray39 {\n public:\n  ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),\n      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray39(const ValueArray39& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray39& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40>\nclass ValueArray40 {\n public:\n  ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),\n      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),\n      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),\n      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),\n      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),\n      v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),\n      v40_(v40) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray40(const ValueArray40& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_), v40_(other.v40_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray40& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41>\nclass ValueArray41 {\n public:\n  ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,\n      T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),\n      v39_(v39), v40_(v40), v41_(v41) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray41(const ValueArray41& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_), v40_(other.v40_), v41_(other.v41_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray41& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42>\nclass ValueArray42 {\n public:\n  ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),\n      v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray42(const ValueArray42& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray42& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43>\nclass ValueArray43 {\n public:\n  ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),\n      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),\n      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),\n      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),\n      v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),\n      v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),\n      v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray43(const ValueArray43& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),\n      v43_(other.v43_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray43& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44>\nclass ValueArray44 {\n public:\n  ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),\n      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),\n      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),\n      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),\n      v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),\n      v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),\n      v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),\n      v43_(v43), v44_(v44) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray44(const ValueArray44& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),\n      v43_(other.v43_), v44_(other.v44_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray44& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45>\nclass ValueArray45 {\n public:\n  ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),\n      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),\n      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),\n      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),\n      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),\n      v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),\n      v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),\n      v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray45(const ValueArray45& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),\n      v43_(other.v43_), v44_(other.v44_), v45_(other.v45_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray45& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46>\nclass ValueArray46 {\n public:\n  ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),\n      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),\n      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),\n      v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_), static_cast<T>(v46_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray46(const ValueArray46& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),\n      v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray46& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n  const T46 v46_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47>\nclass ValueArray47 {\n public:\n  ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),\n      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),\n      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),\n      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),\n      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),\n      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),\n      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),\n      v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),\n      v47_(v47) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray47(const ValueArray47& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),\n      v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),\n      v47_(other.v47_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray47& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n  const T46 v46_;\n  const T47 v47_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48>\nclass ValueArray48 {\n public:\n  ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),\n      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),\n      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),\n      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),\n      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),\n      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),\n      v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),\n      v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),\n      v46_(v46), v47_(v47), v48_(v48) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),\n        static_cast<T>(v48_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray48(const ValueArray48& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),\n      v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),\n      v47_(other.v47_), v48_(other.v48_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray48& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n  const T46 v46_;\n  const T47 v47_;\n  const T48 v48_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48, typename T49>\nclass ValueArray49 {\n public:\n  ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,\n      T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),\n      v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),\n      v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),\n        static_cast<T>(v48_), static_cast<T>(v49_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray49(const ValueArray49& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),\n      v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),\n      v47_(other.v47_), v48_(other.v48_), v49_(other.v49_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray49& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n  const T46 v46_;\n  const T47 v47_;\n  const T48 v48_;\n  const T49 v49_;\n};\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10,\n    typename T11, typename T12, typename T13, typename T14, typename T15,\n    typename T16, typename T17, typename T18, typename T19, typename T20,\n    typename T21, typename T22, typename T23, typename T24, typename T25,\n    typename T26, typename T27, typename T28, typename T29, typename T30,\n    typename T31, typename T32, typename T33, typename T34, typename T35,\n    typename T36, typename T37, typename T38, typename T39, typename T40,\n    typename T41, typename T42, typename T43, typename T44, typename T45,\n    typename T46, typename T47, typename T48, typename T49, typename T50>\nclass ValueArray50 {\n public:\n  ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,\n      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,\n      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,\n      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,\n      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,\n      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,\n      T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),\n      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),\n      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),\n      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),\n      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),\n      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),\n      v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),\n      v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {\n    const T array[] = {static_cast<T>(v1_), static_cast<T>(v2_),\n        static_cast<T>(v3_), static_cast<T>(v4_), static_cast<T>(v5_),\n        static_cast<T>(v6_), static_cast<T>(v7_), static_cast<T>(v8_),\n        static_cast<T>(v9_), static_cast<T>(v10_), static_cast<T>(v11_),\n        static_cast<T>(v12_), static_cast<T>(v13_), static_cast<T>(v14_),\n        static_cast<T>(v15_), static_cast<T>(v16_), static_cast<T>(v17_),\n        static_cast<T>(v18_), static_cast<T>(v19_), static_cast<T>(v20_),\n        static_cast<T>(v21_), static_cast<T>(v22_), static_cast<T>(v23_),\n        static_cast<T>(v24_), static_cast<T>(v25_), static_cast<T>(v26_),\n        static_cast<T>(v27_), static_cast<T>(v28_), static_cast<T>(v29_),\n        static_cast<T>(v30_), static_cast<T>(v31_), static_cast<T>(v32_),\n        static_cast<T>(v33_), static_cast<T>(v34_), static_cast<T>(v35_),\n        static_cast<T>(v36_), static_cast<T>(v37_), static_cast<T>(v38_),\n        static_cast<T>(v39_), static_cast<T>(v40_), static_cast<T>(v41_),\n        static_cast<T>(v42_), static_cast<T>(v43_), static_cast<T>(v44_),\n        static_cast<T>(v45_), static_cast<T>(v46_), static_cast<T>(v47_),\n        static_cast<T>(v48_), static_cast<T>(v49_), static_cast<T>(v50_)};\n    return ValuesIn(array);\n  }\n\n  ValueArray50(const ValueArray50& other) : v1_(other.v1_), v2_(other.v2_),\n      v3_(other.v3_), v4_(other.v4_), v5_(other.v5_), v6_(other.v6_),\n      v7_(other.v7_), v8_(other.v8_), v9_(other.v9_), v10_(other.v10_),\n      v11_(other.v11_), v12_(other.v12_), v13_(other.v13_), v14_(other.v14_),\n      v15_(other.v15_), v16_(other.v16_), v17_(other.v17_), v18_(other.v18_),\n      v19_(other.v19_), v20_(other.v20_), v21_(other.v21_), v22_(other.v22_),\n      v23_(other.v23_), v24_(other.v24_), v25_(other.v25_), v26_(other.v26_),\n      v27_(other.v27_), v28_(other.v28_), v29_(other.v29_), v30_(other.v30_),\n      v31_(other.v31_), v32_(other.v32_), v33_(other.v33_), v34_(other.v34_),\n      v35_(other.v35_), v36_(other.v36_), v37_(other.v37_), v38_(other.v38_),\n      v39_(other.v39_), v40_(other.v40_), v41_(other.v41_), v42_(other.v42_),\n      v43_(other.v43_), v44_(other.v44_), v45_(other.v45_), v46_(other.v46_),\n      v47_(other.v47_), v48_(other.v48_), v49_(other.v49_), v50_(other.v50_) {}\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const ValueArray50& other);\n\n  const T1 v1_;\n  const T2 v2_;\n  const T3 v3_;\n  const T4 v4_;\n  const T5 v5_;\n  const T6 v6_;\n  const T7 v7_;\n  const T8 v8_;\n  const T9 v9_;\n  const T10 v10_;\n  const T11 v11_;\n  const T12 v12_;\n  const T13 v13_;\n  const T14 v14_;\n  const T15 v15_;\n  const T16 v16_;\n  const T17 v17_;\n  const T18 v18_;\n  const T19 v19_;\n  const T20 v20_;\n  const T21 v21_;\n  const T22 v22_;\n  const T23 v23_;\n  const T24 v24_;\n  const T25 v25_;\n  const T26 v26_;\n  const T27 v27_;\n  const T28 v28_;\n  const T29 v29_;\n  const T30 v30_;\n  const T31 v31_;\n  const T32 v32_;\n  const T33 v33_;\n  const T34 v34_;\n  const T35 v35_;\n  const T36 v36_;\n  const T37 v37_;\n  const T38 v38_;\n  const T39 v39_;\n  const T40 v40_;\n  const T41 v41_;\n  const T42 v42_;\n  const T43 v43_;\n  const T44 v44_;\n  const T45 v45_;\n  const T46 v46_;\n  const T47 v47_;\n  const T48 v48_;\n  const T49 v49_;\n  const T50 v50_;\n};\n\n# if GTEST_HAS_COMBINE\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Generates values from the Cartesian product of values produced\n// by the argument generators.\n//\ntemplate <typename T1, typename T2>\nclass CartesianProductGenerator2\n    : public ParamGeneratorInterface< ::testing::tuple<T1, T2> > {\n public:\n  typedef ::testing::tuple<T1, T2> ParamType;\n\n  CartesianProductGenerator2(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2)\n      : g1_(g1), g2_(g2) {}\n  virtual ~CartesianProductGenerator2() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current2_;\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return current_value_.get(); }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_.reset(new ParamType(*current1_, *current2_));\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    linked_ptr<ParamType> current_value_;\n  };  // class CartesianProductGenerator2::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator2& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n};  // class CartesianProductGenerator2\n\n\ntemplate <typename T1, typename T2, typename T3>\nclass CartesianProductGenerator3\n    : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3> > {\n public:\n  typedef ::testing::tuple<T1, T2, T3> ParamType;\n\n  CartesianProductGenerator3(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3)\n      : g1_(g1), g2_(g2), g3_(g3) {}\n  virtual ~CartesianProductGenerator3() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current3_;\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return current_value_.get(); }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_.reset(new ParamType(*current1_, *current2_, *current3_));\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    linked_ptr<ParamType> current_value_;\n  };  // class CartesianProductGenerator3::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator3& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n};  // class CartesianProductGenerator3\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4>\nclass CartesianProductGenerator4\n    : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4> > {\n public:\n  typedef ::testing::tuple<T1, T2, T3, T4> ParamType;\n\n  CartesianProductGenerator4(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}\n  virtual ~CartesianProductGenerator4() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current4_;\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return current_value_.get(); }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_.reset(new ParamType(*current1_, *current2_, *current3_,\n            *current4_));\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    linked_ptr<ParamType> current_value_;\n  };  // class CartesianProductGenerator4::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator4& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n};  // class CartesianProductGenerator4\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5>\nclass CartesianProductGenerator5\n    : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5> > {\n public:\n  typedef ::testing::tuple<T1, T2, T3, T4, T5> ParamType;\n\n  CartesianProductGenerator5(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}\n  virtual ~CartesianProductGenerator5() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current5_;\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return current_value_.get(); }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_.reset(new ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_));\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    linked_ptr<ParamType> current_value_;\n  };  // class CartesianProductGenerator5::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator5& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n};  // class CartesianProductGenerator5\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6>\nclass CartesianProductGenerator6\n    : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5,\n        T6> > {\n public:\n  typedef ::testing::tuple<T1, T2, T3, T4, T5, T6> ParamType;\n\n  CartesianProductGenerator6(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,\n      const ParamGenerator<T6>& g6)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}\n  virtual ~CartesianProductGenerator6() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5,\n      const ParamGenerator<T6>& g6,\n      const typename ParamGenerator<T6>::iterator& current6)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),\n          begin6_(g6.begin()), end6_(g6.end()), current6_(current6)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current6_;\n      if (current6_ == end6_) {\n        current6_ = begin6_;\n        ++current5_;\n      }\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return current_value_.get(); }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_ &&\n          current6_ == typed_other->current6_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_),\n        begin6_(other.begin6_),\n        end6_(other.end6_),\n        current6_(other.current6_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_.reset(new ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_, *current6_));\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_ ||\n          current6_ == end6_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    const typename ParamGenerator<T6>::iterator begin6_;\n    const typename ParamGenerator<T6>::iterator end6_;\n    typename ParamGenerator<T6>::iterator current6_;\n    linked_ptr<ParamType> current_value_;\n  };  // class CartesianProductGenerator6::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator6& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n  const ParamGenerator<T6> g6_;\n};  // class CartesianProductGenerator6\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7>\nclass CartesianProductGenerator7\n    : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,\n        T7> > {\n public:\n  typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;\n\n  CartesianProductGenerator7(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,\n      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}\n  virtual ~CartesianProductGenerator7() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,\n        g7_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5,\n      const ParamGenerator<T6>& g6,\n      const typename ParamGenerator<T6>::iterator& current6,\n      const ParamGenerator<T7>& g7,\n      const typename ParamGenerator<T7>::iterator& current7)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),\n          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),\n          begin7_(g7.begin()), end7_(g7.end()), current7_(current7)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current7_;\n      if (current7_ == end7_) {\n        current7_ = begin7_;\n        ++current6_;\n      }\n      if (current6_ == end6_) {\n        current6_ = begin6_;\n        ++current5_;\n      }\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return current_value_.get(); }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_ &&\n          current6_ == typed_other->current6_ &&\n          current7_ == typed_other->current7_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_),\n        begin6_(other.begin6_),\n        end6_(other.end6_),\n        current6_(other.current6_),\n        begin7_(other.begin7_),\n        end7_(other.end7_),\n        current7_(other.current7_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_.reset(new ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_, *current6_, *current7_));\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_ ||\n          current6_ == end6_ ||\n          current7_ == end7_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    const typename ParamGenerator<T6>::iterator begin6_;\n    const typename ParamGenerator<T6>::iterator end6_;\n    typename ParamGenerator<T6>::iterator current6_;\n    const typename ParamGenerator<T7>::iterator begin7_;\n    const typename ParamGenerator<T7>::iterator end7_;\n    typename ParamGenerator<T7>::iterator current7_;\n    linked_ptr<ParamType> current_value_;\n  };  // class CartesianProductGenerator7::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator7& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n  const ParamGenerator<T6> g6_;\n  const ParamGenerator<T7> g7_;\n};  // class CartesianProductGenerator7\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8>\nclass CartesianProductGenerator8\n    : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,\n        T7, T8> > {\n public:\n  typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;\n\n  CartesianProductGenerator8(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,\n      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,\n      const ParamGenerator<T8>& g8)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),\n          g8_(g8) {}\n  virtual ~CartesianProductGenerator8() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,\n        g7_.begin(), g8_, g8_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,\n        g8_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5,\n      const ParamGenerator<T6>& g6,\n      const typename ParamGenerator<T6>::iterator& current6,\n      const ParamGenerator<T7>& g7,\n      const typename ParamGenerator<T7>::iterator& current7,\n      const ParamGenerator<T8>& g8,\n      const typename ParamGenerator<T8>::iterator& current8)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),\n          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),\n          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),\n          begin8_(g8.begin()), end8_(g8.end()), current8_(current8)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current8_;\n      if (current8_ == end8_) {\n        current8_ = begin8_;\n        ++current7_;\n      }\n      if (current7_ == end7_) {\n        current7_ = begin7_;\n        ++current6_;\n      }\n      if (current6_ == end6_) {\n        current6_ = begin6_;\n        ++current5_;\n      }\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return current_value_.get(); }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_ &&\n          current6_ == typed_other->current6_ &&\n          current7_ == typed_other->current7_ &&\n          current8_ == typed_other->current8_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_),\n        begin6_(other.begin6_),\n        end6_(other.end6_),\n        current6_(other.current6_),\n        begin7_(other.begin7_),\n        end7_(other.end7_),\n        current7_(other.current7_),\n        begin8_(other.begin8_),\n        end8_(other.end8_),\n        current8_(other.current8_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_.reset(new ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_, *current6_, *current7_, *current8_));\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_ ||\n          current6_ == end6_ ||\n          current7_ == end7_ ||\n          current8_ == end8_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    const typename ParamGenerator<T6>::iterator begin6_;\n    const typename ParamGenerator<T6>::iterator end6_;\n    typename ParamGenerator<T6>::iterator current6_;\n    const typename ParamGenerator<T7>::iterator begin7_;\n    const typename ParamGenerator<T7>::iterator end7_;\n    typename ParamGenerator<T7>::iterator current7_;\n    const typename ParamGenerator<T8>::iterator begin8_;\n    const typename ParamGenerator<T8>::iterator end8_;\n    typename ParamGenerator<T8>::iterator current8_;\n    linked_ptr<ParamType> current_value_;\n  };  // class CartesianProductGenerator8::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator8& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n  const ParamGenerator<T6> g6_;\n  const ParamGenerator<T7> g7_;\n  const ParamGenerator<T8> g8_;\n};  // class CartesianProductGenerator8\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9>\nclass CartesianProductGenerator9\n    : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,\n        T7, T8, T9> > {\n public:\n  typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;\n\n  CartesianProductGenerator9(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,\n      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,\n      const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),\n          g9_(g9) {}\n  virtual ~CartesianProductGenerator9() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,\n        g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,\n        g8_.end(), g9_, g9_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5,\n      const ParamGenerator<T6>& g6,\n      const typename ParamGenerator<T6>::iterator& current6,\n      const ParamGenerator<T7>& g7,\n      const typename ParamGenerator<T7>::iterator& current7,\n      const ParamGenerator<T8>& g8,\n      const typename ParamGenerator<T8>::iterator& current8,\n      const ParamGenerator<T9>& g9,\n      const typename ParamGenerator<T9>::iterator& current9)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),\n          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),\n          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),\n          begin8_(g8.begin()), end8_(g8.end()), current8_(current8),\n          begin9_(g9.begin()), end9_(g9.end()), current9_(current9)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current9_;\n      if (current9_ == end9_) {\n        current9_ = begin9_;\n        ++current8_;\n      }\n      if (current8_ == end8_) {\n        current8_ = begin8_;\n        ++current7_;\n      }\n      if (current7_ == end7_) {\n        current7_ = begin7_;\n        ++current6_;\n      }\n      if (current6_ == end6_) {\n        current6_ = begin6_;\n        ++current5_;\n      }\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return current_value_.get(); }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_ &&\n          current6_ == typed_other->current6_ &&\n          current7_ == typed_other->current7_ &&\n          current8_ == typed_other->current8_ &&\n          current9_ == typed_other->current9_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_),\n        begin6_(other.begin6_),\n        end6_(other.end6_),\n        current6_(other.current6_),\n        begin7_(other.begin7_),\n        end7_(other.end7_),\n        current7_(other.current7_),\n        begin8_(other.begin8_),\n        end8_(other.end8_),\n        current8_(other.current8_),\n        begin9_(other.begin9_),\n        end9_(other.end9_),\n        current9_(other.current9_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_.reset(new ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_, *current6_, *current7_, *current8_,\n            *current9_));\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_ ||\n          current6_ == end6_ ||\n          current7_ == end7_ ||\n          current8_ == end8_ ||\n          current9_ == end9_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    const typename ParamGenerator<T6>::iterator begin6_;\n    const typename ParamGenerator<T6>::iterator end6_;\n    typename ParamGenerator<T6>::iterator current6_;\n    const typename ParamGenerator<T7>::iterator begin7_;\n    const typename ParamGenerator<T7>::iterator end7_;\n    typename ParamGenerator<T7>::iterator current7_;\n    const typename ParamGenerator<T8>::iterator begin8_;\n    const typename ParamGenerator<T8>::iterator end8_;\n    typename ParamGenerator<T8>::iterator current8_;\n    const typename ParamGenerator<T9>::iterator begin9_;\n    const typename ParamGenerator<T9>::iterator end9_;\n    typename ParamGenerator<T9>::iterator current9_;\n    linked_ptr<ParamType> current_value_;\n  };  // class CartesianProductGenerator9::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator9& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n  const ParamGenerator<T6> g6_;\n  const ParamGenerator<T7> g7_;\n  const ParamGenerator<T8> g8_;\n  const ParamGenerator<T9> g9_;\n};  // class CartesianProductGenerator9\n\n\ntemplate <typename T1, typename T2, typename T3, typename T4, typename T5,\n    typename T6, typename T7, typename T8, typename T9, typename T10>\nclass CartesianProductGenerator10\n    : public ParamGeneratorInterface< ::testing::tuple<T1, T2, T3, T4, T5, T6,\n        T7, T8, T9, T10> > {\n public:\n  typedef ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;\n\n  CartesianProductGenerator10(const ParamGenerator<T1>& g1,\n      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,\n      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,\n      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,\n      const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9,\n      const ParamGenerator<T10>& g10)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),\n          g9_(g9), g10_(g10) {}\n  virtual ~CartesianProductGenerator10() {}\n\n  virtual ParamIteratorInterface<ParamType>* Begin() const {\n    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,\n        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,\n        g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());\n  }\n  virtual ParamIteratorInterface<ParamType>* End() const {\n    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),\n        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,\n        g8_.end(), g9_, g9_.end(), g10_, g10_.end());\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<ParamType> {\n   public:\n    Iterator(const ParamGeneratorInterface<ParamType>* base,\n      const ParamGenerator<T1>& g1,\n      const typename ParamGenerator<T1>::iterator& current1,\n      const ParamGenerator<T2>& g2,\n      const typename ParamGenerator<T2>::iterator& current2,\n      const ParamGenerator<T3>& g3,\n      const typename ParamGenerator<T3>::iterator& current3,\n      const ParamGenerator<T4>& g4,\n      const typename ParamGenerator<T4>::iterator& current4,\n      const ParamGenerator<T5>& g5,\n      const typename ParamGenerator<T5>::iterator& current5,\n      const ParamGenerator<T6>& g6,\n      const typename ParamGenerator<T6>::iterator& current6,\n      const ParamGenerator<T7>& g7,\n      const typename ParamGenerator<T7>::iterator& current7,\n      const ParamGenerator<T8>& g8,\n      const typename ParamGenerator<T8>::iterator& current8,\n      const ParamGenerator<T9>& g9,\n      const typename ParamGenerator<T9>::iterator& current9,\n      const ParamGenerator<T10>& g10,\n      const typename ParamGenerator<T10>::iterator& current10)\n        : base_(base),\n          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),\n          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),\n          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),\n          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),\n          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),\n          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),\n          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),\n          begin8_(g8.begin()), end8_(g8.end()), current8_(current8),\n          begin9_(g9.begin()), end9_(g9.end()), current9_(current9),\n          begin10_(g10.begin()), end10_(g10.end()), current10_(current10)    {\n      ComputeCurrentValue();\n    }\n    virtual ~Iterator() {}\n\n    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    virtual void Advance() {\n      assert(!AtEnd());\n      ++current10_;\n      if (current10_ == end10_) {\n        current10_ = begin10_;\n        ++current9_;\n      }\n      if (current9_ == end9_) {\n        current9_ = begin9_;\n        ++current8_;\n      }\n      if (current8_ == end8_) {\n        current8_ = begin8_;\n        ++current7_;\n      }\n      if (current7_ == end7_) {\n        current7_ = begin7_;\n        ++current6_;\n      }\n      if (current6_ == end6_) {\n        current6_ = begin6_;\n        ++current5_;\n      }\n      if (current5_ == end5_) {\n        current5_ = begin5_;\n        ++current4_;\n      }\n      if (current4_ == end4_) {\n        current4_ = begin4_;\n        ++current3_;\n      }\n      if (current3_ == end3_) {\n        current3_ = begin3_;\n        ++current2_;\n      }\n      if (current2_ == end2_) {\n        current2_ = begin2_;\n        ++current1_;\n      }\n      ComputeCurrentValue();\n    }\n    virtual ParamIteratorInterface<ParamType>* Clone() const {\n      return new Iterator(*this);\n    }\n    virtual const ParamType* Current() const { return current_value_.get(); }\n    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const Iterator* typed_other =\n          CheckedDowncastToActualType<const Iterator>(&other);\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      return (AtEnd() && typed_other->AtEnd()) ||\n         (\n          current1_ == typed_other->current1_ &&\n          current2_ == typed_other->current2_ &&\n          current3_ == typed_other->current3_ &&\n          current4_ == typed_other->current4_ &&\n          current5_ == typed_other->current5_ &&\n          current6_ == typed_other->current6_ &&\n          current7_ == typed_other->current7_ &&\n          current8_ == typed_other->current8_ &&\n          current9_ == typed_other->current9_ &&\n          current10_ == typed_other->current10_);\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : base_(other.base_),\n        begin1_(other.begin1_),\n        end1_(other.end1_),\n        current1_(other.current1_),\n        begin2_(other.begin2_),\n        end2_(other.end2_),\n        current2_(other.current2_),\n        begin3_(other.begin3_),\n        end3_(other.end3_),\n        current3_(other.current3_),\n        begin4_(other.begin4_),\n        end4_(other.end4_),\n        current4_(other.current4_),\n        begin5_(other.begin5_),\n        end5_(other.end5_),\n        current5_(other.current5_),\n        begin6_(other.begin6_),\n        end6_(other.end6_),\n        current6_(other.current6_),\n        begin7_(other.begin7_),\n        end7_(other.end7_),\n        current7_(other.current7_),\n        begin8_(other.begin8_),\n        end8_(other.end8_),\n        current8_(other.current8_),\n        begin9_(other.begin9_),\n        end9_(other.end9_),\n        current9_(other.current9_),\n        begin10_(other.begin10_),\n        end10_(other.end10_),\n        current10_(other.current10_) {\n      ComputeCurrentValue();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_.reset(new ParamType(*current1_, *current2_, *current3_,\n            *current4_, *current5_, *current6_, *current7_, *current8_,\n            *current9_, *current10_));\n    }\n    bool AtEnd() const {\n      // We must report iterator past the end of the range when either of the\n      // component iterators has reached the end of its range.\n      return\n          current1_ == end1_ ||\n          current2_ == end2_ ||\n          current3_ == end3_ ||\n          current4_ == end4_ ||\n          current5_ == end5_ ||\n          current6_ == end6_ ||\n          current7_ == end7_ ||\n          current8_ == end8_ ||\n          current9_ == end9_ ||\n          current10_ == end10_;\n    }\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.\n    // current[i]_ is the actual traversing iterator.\n    const typename ParamGenerator<T1>::iterator begin1_;\n    const typename ParamGenerator<T1>::iterator end1_;\n    typename ParamGenerator<T1>::iterator current1_;\n    const typename ParamGenerator<T2>::iterator begin2_;\n    const typename ParamGenerator<T2>::iterator end2_;\n    typename ParamGenerator<T2>::iterator current2_;\n    const typename ParamGenerator<T3>::iterator begin3_;\n    const typename ParamGenerator<T3>::iterator end3_;\n    typename ParamGenerator<T3>::iterator current3_;\n    const typename ParamGenerator<T4>::iterator begin4_;\n    const typename ParamGenerator<T4>::iterator end4_;\n    typename ParamGenerator<T4>::iterator current4_;\n    const typename ParamGenerator<T5>::iterator begin5_;\n    const typename ParamGenerator<T5>::iterator end5_;\n    typename ParamGenerator<T5>::iterator current5_;\n    const typename ParamGenerator<T6>::iterator begin6_;\n    const typename ParamGenerator<T6>::iterator end6_;\n    typename ParamGenerator<T6>::iterator current6_;\n    const typename ParamGenerator<T7>::iterator begin7_;\n    const typename ParamGenerator<T7>::iterator end7_;\n    typename ParamGenerator<T7>::iterator current7_;\n    const typename ParamGenerator<T8>::iterator begin8_;\n    const typename ParamGenerator<T8>::iterator end8_;\n    typename ParamGenerator<T8>::iterator current8_;\n    const typename ParamGenerator<T9>::iterator begin9_;\n    const typename ParamGenerator<T9>::iterator end9_;\n    typename ParamGenerator<T9>::iterator current9_;\n    const typename ParamGenerator<T10>::iterator begin10_;\n    const typename ParamGenerator<T10>::iterator end10_;\n    typename ParamGenerator<T10>::iterator current10_;\n    linked_ptr<ParamType> current_value_;\n  };  // class CartesianProductGenerator10::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductGenerator10& other);\n\n  const ParamGenerator<T1> g1_;\n  const ParamGenerator<T2> g2_;\n  const ParamGenerator<T3> g3_;\n  const ParamGenerator<T4> g4_;\n  const ParamGenerator<T5> g5_;\n  const ParamGenerator<T6> g6_;\n  const ParamGenerator<T7> g7_;\n  const ParamGenerator<T8> g8_;\n  const ParamGenerator<T9> g9_;\n  const ParamGenerator<T10> g10_;\n};  // class CartesianProductGenerator10\n\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Helper classes providing Combine() with polymorphic features. They allow\n// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is\n// convertible to U.\n//\ntemplate <class Generator1, class Generator2>\nclass CartesianProductHolder2 {\n public:\nCartesianProductHolder2(const Generator1& g1, const Generator2& g2)\n      : g1_(g1), g2_(g2) {}\n  template <typename T1, typename T2>\n  operator ParamGenerator< ::testing::tuple<T1, T2> >() const {\n    return ParamGenerator< ::testing::tuple<T1, T2> >(\n        new CartesianProductGenerator2<T1, T2>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder2& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n};  // class CartesianProductHolder2\n\ntemplate <class Generator1, class Generator2, class Generator3>\nclass CartesianProductHolder3 {\n public:\nCartesianProductHolder3(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3)\n      : g1_(g1), g2_(g2), g3_(g3) {}\n  template <typename T1, typename T2, typename T3>\n  operator ParamGenerator< ::testing::tuple<T1, T2, T3> >() const {\n    return ParamGenerator< ::testing::tuple<T1, T2, T3> >(\n        new CartesianProductGenerator3<T1, T2, T3>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder3& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n};  // class CartesianProductHolder3\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4>\nclass CartesianProductHolder4 {\n public:\nCartesianProductHolder4(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}\n  template <typename T1, typename T2, typename T3, typename T4>\n  operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >() const {\n    return ParamGenerator< ::testing::tuple<T1, T2, T3, T4> >(\n        new CartesianProductGenerator4<T1, T2, T3, T4>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder4& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n};  // class CartesianProductHolder4\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5>\nclass CartesianProductHolder5 {\n public:\nCartesianProductHolder5(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5>\n  operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >() const {\n    return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5> >(\n        new CartesianProductGenerator5<T1, T2, T3, T4, T5>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder5& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n};  // class CartesianProductHolder5\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5, class Generator6>\nclass CartesianProductHolder6 {\n public:\nCartesianProductHolder6(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5,\n    const Generator6& g6)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5,\n      typename T6>\n  operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >() const {\n    return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6> >(\n        new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_),\n        static_cast<ParamGenerator<T6> >(g6_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder6& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n  const Generator6 g6_;\n};  // class CartesianProductHolder6\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5, class Generator6, class Generator7>\nclass CartesianProductHolder7 {\n public:\nCartesianProductHolder7(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5,\n    const Generator6& g6, const Generator7& g7)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5,\n      typename T6, typename T7>\n  operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6,\n      T7> >() const {\n    return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7> >(\n        new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_),\n        static_cast<ParamGenerator<T6> >(g6_),\n        static_cast<ParamGenerator<T7> >(g7_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder7& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n  const Generator6 g6_;\n  const Generator7 g7_;\n};  // class CartesianProductHolder7\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5, class Generator6, class Generator7,\n    class Generator8>\nclass CartesianProductHolder8 {\n public:\nCartesianProductHolder8(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5,\n    const Generator6& g6, const Generator7& g7, const Generator8& g8)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),\n          g8_(g8) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5,\n      typename T6, typename T7, typename T8>\n  operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7,\n      T8> >() const {\n    return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(\n        new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_),\n        static_cast<ParamGenerator<T6> >(g6_),\n        static_cast<ParamGenerator<T7> >(g7_),\n        static_cast<ParamGenerator<T8> >(g8_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder8& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n  const Generator6 g6_;\n  const Generator7 g7_;\n  const Generator8 g8_;\n};  // class CartesianProductHolder8\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5, class Generator6, class Generator7,\n    class Generator8, class Generator9>\nclass CartesianProductHolder9 {\n public:\nCartesianProductHolder9(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5,\n    const Generator6& g6, const Generator7& g7, const Generator8& g8,\n    const Generator9& g9)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),\n          g9_(g9) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5,\n      typename T6, typename T7, typename T8, typename T9>\n  operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,\n      T9> >() const {\n    return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8,\n        T9> >(\n        new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_),\n        static_cast<ParamGenerator<T6> >(g6_),\n        static_cast<ParamGenerator<T7> >(g7_),\n        static_cast<ParamGenerator<T8> >(g8_),\n        static_cast<ParamGenerator<T9> >(g9_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder9& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n  const Generator6 g6_;\n  const Generator7 g7_;\n  const Generator8 g8_;\n  const Generator9 g9_;\n};  // class CartesianProductHolder9\n\ntemplate <class Generator1, class Generator2, class Generator3,\n    class Generator4, class Generator5, class Generator6, class Generator7,\n    class Generator8, class Generator9, class Generator10>\nclass CartesianProductHolder10 {\n public:\nCartesianProductHolder10(const Generator1& g1, const Generator2& g2,\n    const Generator3& g3, const Generator4& g4, const Generator5& g5,\n    const Generator6& g6, const Generator7& g7, const Generator8& g8,\n    const Generator9& g9, const Generator10& g10)\n      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),\n          g9_(g9), g10_(g10) {}\n  template <typename T1, typename T2, typename T3, typename T4, typename T5,\n      typename T6, typename T7, typename T8, typename T9, typename T10>\n  operator ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,\n      T10> >() const {\n    return ParamGenerator< ::testing::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9,\n        T10> >(\n        new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,\n            T10>(\n        static_cast<ParamGenerator<T1> >(g1_),\n        static_cast<ParamGenerator<T2> >(g2_),\n        static_cast<ParamGenerator<T3> >(g3_),\n        static_cast<ParamGenerator<T4> >(g4_),\n        static_cast<ParamGenerator<T5> >(g5_),\n        static_cast<ParamGenerator<T6> >(g6_),\n        static_cast<ParamGenerator<T7> >(g7_),\n        static_cast<ParamGenerator<T8> >(g8_),\n        static_cast<ParamGenerator<T9> >(g9_),\n        static_cast<ParamGenerator<T10> >(g10_)));\n  }\n\n private:\n  // No implementation - assignment is unsupported.\n  void operator=(const CartesianProductHolder10& other);\n\n  const Generator1 g1_;\n  const Generator2 g2_;\n  const Generator3 g3_;\n  const Generator4 g4_;\n  const Generator5 g5_;\n  const Generator6 g6_;\n  const Generator7 g7_;\n  const Generator8 g8_;\n  const Generator9 g9_;\n  const Generator10 g10_;\n};  // class CartesianProductHolder10\n\n# endif  // GTEST_HAS_COMBINE\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/gtest-param-util.h",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Type and function utilities for implementing parameterized tests.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_\n#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_\n\n#include <ctype.h>\n\n#include <cassert>\n#include <iterator>\n#include <memory>\n#include <set>\n#include <tuple>\n#include <type_traits>\n#include <utility>\n#include <vector>\n\n#include \"gtest/gtest-printers.h\"\n#include \"gtest/gtest-test-part.h\"\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-port.h\"\n\nnamespace testing {\n// Input to a parameterized test name generator, describing a test parameter.\n// Consists of the parameter value and the integer parameter index.\ntemplate <class ParamType>\nstruct TestParamInfo {\n  TestParamInfo(const ParamType& a_param, size_t an_index)\n      : param(a_param), index(an_index) {}\n  ParamType param;\n  size_t index;\n};\n\n// A builtin parameterized test name generator which returns the result of\n// testing::PrintToString.\nstruct PrintToStringParamName {\n  template <class ParamType>\n  std::string operator()(const TestParamInfo<ParamType>& info) const {\n    return PrintToString(info.param);\n  }\n};\n\nnamespace internal {\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n// Utility Functions\n\n// Outputs a message explaining invalid registration of different\n// fixture class for the same test suite. This may happen when\n// TEST_P macro is used to define two tests with the same name\n// but in different namespaces.\nGTEST_API_ void ReportInvalidTestSuiteType(const char* test_suite_name,\n                                           CodeLocation code_location);\n\ntemplate <typename>\nclass ParamGeneratorInterface;\ntemplate <typename>\nclass ParamGenerator;\n\n// Interface for iterating over elements provided by an implementation\n// of ParamGeneratorInterface<T>.\ntemplate <typename T>\nclass ParamIteratorInterface {\n public:\n  virtual ~ParamIteratorInterface() {}\n  // A pointer to the base generator instance.\n  // Used only for the purposes of iterator comparison\n  // to make sure that two iterators belong to the same generator.\n  virtual const ParamGeneratorInterface<T>* BaseGenerator() const = 0;\n  // Advances iterator to point to the next element\n  // provided by the generator. The caller is responsible\n  // for not calling Advance() on an iterator equal to\n  // BaseGenerator()->End().\n  virtual void Advance() = 0;\n  // Clones the iterator object. Used for implementing copy semantics\n  // of ParamIterator<T>.\n  virtual ParamIteratorInterface* Clone() const = 0;\n  // Dereferences the current iterator and provides (read-only) access\n  // to the pointed value. It is the caller's responsibility not to call\n  // Current() on an iterator equal to BaseGenerator()->End().\n  // Used for implementing ParamGenerator<T>::operator*().\n  virtual const T* Current() const = 0;\n  // Determines whether the given iterator and other point to the same\n  // element in the sequence generated by the generator.\n  // Used for implementing ParamGenerator<T>::operator==().\n  virtual bool Equals(const ParamIteratorInterface& other) const = 0;\n};\n\n// Class iterating over elements provided by an implementation of\n// ParamGeneratorInterface<T>. It wraps ParamIteratorInterface<T>\n// and implements the const forward iterator concept.\ntemplate <typename T>\nclass ParamIterator {\n public:\n  typedef T value_type;\n  typedef const T& reference;\n  typedef ptrdiff_t difference_type;\n\n  // ParamIterator assumes ownership of the impl_ pointer.\n  ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {}\n  ParamIterator& operator=(const ParamIterator& other) {\n    if (this != &other) impl_.reset(other.impl_->Clone());\n    return *this;\n  }\n\n  const T& operator*() const { return *impl_->Current(); }\n  const T* operator->() const { return impl_->Current(); }\n  // Prefix version of operator++.\n  ParamIterator& operator++() {\n    impl_->Advance();\n    return *this;\n  }\n  // Postfix version of operator++.\n  ParamIterator operator++(int /*unused*/) {\n    ParamIteratorInterface<T>* clone = impl_->Clone();\n    impl_->Advance();\n    return ParamIterator(clone);\n  }\n  bool operator==(const ParamIterator& other) const {\n    return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_);\n  }\n  bool operator!=(const ParamIterator& other) const {\n    return !(*this == other);\n  }\n\n private:\n  friend class ParamGenerator<T>;\n  explicit ParamIterator(ParamIteratorInterface<T>* impl) : impl_(impl) {}\n  std::unique_ptr<ParamIteratorInterface<T>> impl_;\n};\n\n// ParamGeneratorInterface<T> is the binary interface to access generators\n// defined in other translation units.\ntemplate <typename T>\nclass ParamGeneratorInterface {\n public:\n  typedef T ParamType;\n\n  virtual ~ParamGeneratorInterface() {}\n\n  // Generator interface definition\n  virtual ParamIteratorInterface<T>* Begin() const = 0;\n  virtual ParamIteratorInterface<T>* End() const = 0;\n};\n\n// Wraps ParamGeneratorInterface<T> and provides general generator syntax\n// compatible with the STL Container concept.\n// This class implements copy initialization semantics and the contained\n// ParamGeneratorInterface<T> instance is shared among all copies\n// of the original object. This is possible because that instance is immutable.\ntemplate <typename T>\nclass ParamGenerator {\n public:\n  typedef ParamIterator<T> iterator;\n\n  explicit ParamGenerator(ParamGeneratorInterface<T>* impl) : impl_(impl) {}\n  ParamGenerator(const ParamGenerator& other) : impl_(other.impl_) {}\n\n  ParamGenerator& operator=(const ParamGenerator& other) {\n    impl_ = other.impl_;\n    return *this;\n  }\n\n  iterator begin() const { return iterator(impl_->Begin()); }\n  iterator end() const { return iterator(impl_->End()); }\n\n private:\n  std::shared_ptr<const ParamGeneratorInterface<T>> impl_;\n};\n\n// Generates values from a range of two comparable values. Can be used to\n// generate sequences of user-defined types that implement operator+() and\n// operator<().\n// This class is used in the Range() function.\ntemplate <typename T, typename IncrementT>\nclass RangeGenerator : public ParamGeneratorInterface<T> {\n public:\n  RangeGenerator(T begin, T end, IncrementT step)\n      : begin_(begin),\n        end_(end),\n        step_(step),\n        end_index_(CalculateEndIndex(begin, end, step)) {}\n  ~RangeGenerator() override {}\n\n  ParamIteratorInterface<T>* Begin() const override {\n    return new Iterator(this, begin_, 0, step_);\n  }\n  ParamIteratorInterface<T>* End() const override {\n    return new Iterator(this, end_, end_index_, step_);\n  }\n\n private:\n  class Iterator : public ParamIteratorInterface<T> {\n   public:\n    Iterator(const ParamGeneratorInterface<T>* base, T value, int index,\n             IncrementT step)\n        : base_(base), value_(value), index_(index), step_(step) {}\n    ~Iterator() override {}\n\n    const ParamGeneratorInterface<T>* BaseGenerator() const override {\n      return base_;\n    }\n    void Advance() override {\n      value_ = static_cast<T>(value_ + step_);\n      index_++;\n    }\n    ParamIteratorInterface<T>* Clone() const override {\n      return new Iterator(*this);\n    }\n    const T* Current() const override { return &value_; }\n    bool Equals(const ParamIteratorInterface<T>& other) const override {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const int other_index =\n          CheckedDowncastToActualType<const Iterator>(&other)->index_;\n      return index_ == other_index;\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        : ParamIteratorInterface<T>(),\n          base_(other.base_),\n          value_(other.value_),\n          index_(other.index_),\n          step_(other.step_) {}\n\n    // No implementation - assignment is unsupported.\n    void operator=(const Iterator& other);\n\n    const ParamGeneratorInterface<T>* const base_;\n    T value_;\n    int index_;\n    const IncrementT step_;\n  };  // class RangeGenerator::Iterator\n\n  static int CalculateEndIndex(const T& begin, const T& end,\n                               const IncrementT& step) {\n    int end_index = 0;\n    for (T i = begin; i < end; i = static_cast<T>(i + step)) end_index++;\n    return end_index;\n  }\n\n  // No implementation - assignment is unsupported.\n  void operator=(const RangeGenerator& other);\n\n  const T begin_;\n  const T end_;\n  const IncrementT step_;\n  // The index for the end() iterator. All the elements in the generated\n  // sequence are indexed (0-based) to aid iterator comparison.\n  const int end_index_;\n};  // class RangeGenerator\n\n// Generates values from a pair of STL-style iterators. Used in the\n// ValuesIn() function. The elements are copied from the source range\n// since the source can be located on the stack, and the generator\n// is likely to persist beyond that stack frame.\ntemplate <typename T>\nclass ValuesInIteratorRangeGenerator : public ParamGeneratorInterface<T> {\n public:\n  template <typename ForwardIterator>\n  ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end)\n      : container_(begin, end) {}\n  ~ValuesInIteratorRangeGenerator() override {}\n\n  ParamIteratorInterface<T>* Begin() const override {\n    return new Iterator(this, container_.begin());\n  }\n  ParamIteratorInterface<T>* End() const override {\n    return new Iterator(this, container_.end());\n  }\n\n private:\n  typedef typename ::std::vector<T> ContainerType;\n\n  class Iterator : public ParamIteratorInterface<T> {\n   public:\n    Iterator(const ParamGeneratorInterface<T>* base,\n             typename ContainerType::const_iterator iterator)\n        : base_(base), iterator_(iterator) {}\n    ~Iterator() override {}\n\n    const ParamGeneratorInterface<T>* BaseGenerator() const override {\n      return base_;\n    }\n    void Advance() override {\n      ++iterator_;\n      value_.reset();\n    }\n    ParamIteratorInterface<T>* Clone() const override {\n      return new Iterator(*this);\n    }\n    // We need to use cached value referenced by iterator_ because *iterator_\n    // can return a temporary object (and of type other then T), so just\n    // having \"return &*iterator_;\" doesn't work.\n    // value_ is updated here and not in Advance() because Advance()\n    // can advance iterator_ beyond the end of the range, and we cannot\n    // detect that fact. The client code, on the other hand, is\n    // responsible for not calling Current() on an out-of-range iterator.\n    const T* Current() const override {\n      if (value_.get() == nullptr) value_.reset(new T(*iterator_));\n      return value_.get();\n    }\n    bool Equals(const ParamIteratorInterface<T>& other) const override {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      return iterator_ ==\n             CheckedDowncastToActualType<const Iterator>(&other)->iterator_;\n    }\n\n   private:\n    Iterator(const Iterator& other)\n        // The explicit constructor call suppresses a false warning\n        // emitted by gcc when supplied with the -Wextra option.\n        : ParamIteratorInterface<T>(),\n          base_(other.base_),\n          iterator_(other.iterator_) {}\n\n    const ParamGeneratorInterface<T>* const base_;\n    typename ContainerType::const_iterator iterator_;\n    // A cached value of *iterator_. We keep it here to allow access by\n    // pointer in the wrapping iterator's operator->().\n    // value_ needs to be mutable to be accessed in Current().\n    // Use of std::unique_ptr helps manage cached value's lifetime,\n    // which is bound by the lifespan of the iterator itself.\n    mutable std::unique_ptr<const T> value_;\n  };  // class ValuesInIteratorRangeGenerator::Iterator\n\n  // No implementation - assignment is unsupported.\n  void operator=(const ValuesInIteratorRangeGenerator& other);\n\n  const ContainerType container_;\n};  // class ValuesInIteratorRangeGenerator\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Default parameterized test name generator, returns a string containing the\n// integer test parameter index.\ntemplate <class ParamType>\nstd::string DefaultParamName(const TestParamInfo<ParamType>& info) {\n  Message name_stream;\n  name_stream << info.index;\n  return name_stream.GetString();\n}\n\ntemplate <typename T = int>\nvoid TestNotEmpty() {\n  static_assert(sizeof(T) == 0, \"Empty arguments are not allowed.\");\n}\ntemplate <typename T = int>\nvoid TestNotEmpty(const T&) {}\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Stores a parameter value and later creates tests parameterized with that\n// value.\ntemplate <class TestClass>\nclass ParameterizedTestFactory : public TestFactoryBase {\n public:\n  typedef typename TestClass::ParamType ParamType;\n  explicit ParameterizedTestFactory(ParamType parameter)\n      : parameter_(parameter) {}\n  Test* CreateTest() override {\n    TestClass::SetParam(&parameter_);\n    return new TestClass();\n  }\n\n private:\n  const ParamType parameter_;\n\n  ParameterizedTestFactory(const ParameterizedTestFactory&) = delete;\n  ParameterizedTestFactory& operator=(const ParameterizedTestFactory&) = delete;\n};\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// TestMetaFactoryBase is a base class for meta-factories that create\n// test factories for passing into MakeAndRegisterTestInfo function.\ntemplate <class ParamType>\nclass TestMetaFactoryBase {\n public:\n  virtual ~TestMetaFactoryBase() {}\n\n  virtual TestFactoryBase* CreateTestFactory(ParamType parameter) = 0;\n};\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// TestMetaFactory creates test factories for passing into\n// MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives\n// ownership of test factory pointer, same factory object cannot be passed\n// into that method twice. But ParameterizedTestSuiteInfo is going to call\n// it for each Test/Parameter value combination. Thus it needs meta factory\n// creator class.\ntemplate <class TestSuite>\nclass TestMetaFactory\n    : public TestMetaFactoryBase<typename TestSuite::ParamType> {\n public:\n  using ParamType = typename TestSuite::ParamType;\n\n  TestMetaFactory() {}\n\n  TestFactoryBase* CreateTestFactory(ParamType parameter) override {\n    return new ParameterizedTestFactory<TestSuite>(parameter);\n  }\n\n private:\n  TestMetaFactory(const TestMetaFactory&) = delete;\n  TestMetaFactory& operator=(const TestMetaFactory&) = delete;\n};\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// ParameterizedTestSuiteInfoBase is a generic interface\n// to ParameterizedTestSuiteInfo classes. ParameterizedTestSuiteInfoBase\n// accumulates test information provided by TEST_P macro invocations\n// and generators provided by INSTANTIATE_TEST_SUITE_P macro invocations\n// and uses that information to register all resulting test instances\n// in RegisterTests method. The ParameterizeTestSuiteRegistry class holds\n// a collection of pointers to the ParameterizedTestSuiteInfo objects\n// and calls RegisterTests() on each of them when asked.\nclass ParameterizedTestSuiteInfoBase {\n public:\n  virtual ~ParameterizedTestSuiteInfoBase() {}\n\n  // Base part of test suite name for display purposes.\n  virtual const std::string& GetTestSuiteName() const = 0;\n  // Test suite id to verify identity.\n  virtual TypeId GetTestSuiteTypeId() const = 0;\n  // UnitTest class invokes this method to register tests in this\n  // test suite right before running them in RUN_ALL_TESTS macro.\n  // This method should not be called more than once on any single\n  // instance of a ParameterizedTestSuiteInfoBase derived class.\n  virtual void RegisterTests() = 0;\n\n protected:\n  ParameterizedTestSuiteInfoBase() {}\n\n private:\n  ParameterizedTestSuiteInfoBase(const ParameterizedTestSuiteInfoBase&) =\n      delete;\n  ParameterizedTestSuiteInfoBase& operator=(\n      const ParameterizedTestSuiteInfoBase&) = delete;\n};\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Report a the name of a test_suit as safe to ignore\n// as the side effect of construction of this type.\nstruct GTEST_API_ MarkAsIgnored {\n  explicit MarkAsIgnored(const char* test_suite);\n};\n\nGTEST_API_ void InsertSyntheticTestCase(const std::string& name,\n                                        CodeLocation location, bool has_test_p);\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// ParameterizedTestSuiteInfo accumulates tests obtained from TEST_P\n// macro invocations for a particular test suite and generators\n// obtained from INSTANTIATE_TEST_SUITE_P macro invocations for that\n// test suite. It registers tests with all values generated by all\n// generators when asked.\ntemplate <class TestSuite>\nclass ParameterizedTestSuiteInfo : public ParameterizedTestSuiteInfoBase {\n public:\n  // ParamType and GeneratorCreationFunc are private types but are required\n  // for declarations of public methods AddTestPattern() and\n  // AddTestSuiteInstantiation().\n  using ParamType = typename TestSuite::ParamType;\n  // A function that returns an instance of appropriate generator type.\n  typedef ParamGenerator<ParamType>(GeneratorCreationFunc)();\n  using ParamNameGeneratorFunc = std::string(const TestParamInfo<ParamType>&);\n\n  explicit ParameterizedTestSuiteInfo(const char* name,\n                                      CodeLocation code_location)\n      : test_suite_name_(name), code_location_(code_location) {}\n\n  // Test suite base name for display purposes.\n  const std::string& GetTestSuiteName() const override {\n    return test_suite_name_;\n  }\n  // Test suite id to verify identity.\n  TypeId GetTestSuiteTypeId() const override { return GetTypeId<TestSuite>(); }\n  // TEST_P macro uses AddTestPattern() to record information\n  // about a single test in a LocalTestInfo structure.\n  // test_suite_name is the base name of the test suite (without invocation\n  // prefix). test_base_name is the name of an individual test without\n  // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is\n  // test suite base name and DoBar is test base name.\n  void AddTestPattern(const char* test_suite_name, const char* test_base_name,\n                      TestMetaFactoryBase<ParamType>* meta_factory,\n                      CodeLocation code_location) {\n    tests_.push_back(std::shared_ptr<TestInfo>(new TestInfo(\n        test_suite_name, test_base_name, meta_factory, code_location)));\n  }\n  // INSTANTIATE_TEST_SUITE_P macro uses AddGenerator() to record information\n  // about a generator.\n  int AddTestSuiteInstantiation(const std::string& instantiation_name,\n                                GeneratorCreationFunc* func,\n                                ParamNameGeneratorFunc* name_func,\n                                const char* file, int line) {\n    instantiations_.push_back(\n        InstantiationInfo(instantiation_name, func, name_func, file, line));\n    return 0;  // Return value used only to run this method in namespace scope.\n  }\n  // UnitTest class invokes this method to register tests in this test suite\n  // right before running tests in RUN_ALL_TESTS macro.\n  // This method should not be called more than once on any single\n  // instance of a ParameterizedTestSuiteInfoBase derived class.\n  // UnitTest has a guard to prevent from calling this method more than once.\n  void RegisterTests() override {\n    bool generated_instantiations = false;\n\n    for (typename TestInfoContainer::iterator test_it = tests_.begin();\n         test_it != tests_.end(); ++test_it) {\n      std::shared_ptr<TestInfo> test_info = *test_it;\n      for (typename InstantiationContainer::iterator gen_it =\n               instantiations_.begin();\n           gen_it != instantiations_.end(); ++gen_it) {\n        const std::string& instantiation_name = gen_it->name;\n        ParamGenerator<ParamType> generator((*gen_it->generator)());\n        ParamNameGeneratorFunc* name_func = gen_it->name_func;\n        const char* file = gen_it->file;\n        int line = gen_it->line;\n\n        std::string test_suite_name;\n        if (!instantiation_name.empty())\n          test_suite_name = instantiation_name + \"/\";\n        test_suite_name += test_info->test_suite_base_name;\n\n        size_t i = 0;\n        std::set<std::string> test_param_names;\n        for (typename ParamGenerator<ParamType>::iterator param_it =\n                 generator.begin();\n             param_it != generator.end(); ++param_it, ++i) {\n          generated_instantiations = true;\n\n          Message test_name_stream;\n\n          std::string param_name =\n              name_func(TestParamInfo<ParamType>(*param_it, i));\n\n          GTEST_CHECK_(IsValidParamName(param_name))\n              << \"Parameterized test name '\" << param_name\n              << \"' is invalid, in \" << file << \" line \" << line << std::endl;\n\n          GTEST_CHECK_(test_param_names.count(param_name) == 0)\n              << \"Duplicate parameterized test name '\" << param_name << \"', in \"\n              << file << \" line \" << line << std::endl;\n\n          test_param_names.insert(param_name);\n\n          if (!test_info->test_base_name.empty()) {\n            test_name_stream << test_info->test_base_name << \"/\";\n          }\n          test_name_stream << param_name;\n          MakeAndRegisterTestInfo(\n              test_suite_name.c_str(), test_name_stream.GetString().c_str(),\n              nullptr,  // No type parameter.\n              PrintToString(*param_it).c_str(), test_info->code_location,\n              GetTestSuiteTypeId(),\n              SuiteApiResolver<TestSuite>::GetSetUpCaseOrSuite(file, line),\n              SuiteApiResolver<TestSuite>::GetTearDownCaseOrSuite(file, line),\n              test_info->test_meta_factory->CreateTestFactory(*param_it));\n        }  // for param_it\n      }    // for gen_it\n    }      // for test_it\n\n    if (!generated_instantiations) {\n      // There are no generaotrs, or they all generate nothing ...\n      InsertSyntheticTestCase(GetTestSuiteName(), code_location_,\n                              !tests_.empty());\n    }\n  }  // RegisterTests\n\n private:\n  // LocalTestInfo structure keeps information about a single test registered\n  // with TEST_P macro.\n  struct TestInfo {\n    TestInfo(const char* a_test_suite_base_name, const char* a_test_base_name,\n             TestMetaFactoryBase<ParamType>* a_test_meta_factory,\n             CodeLocation a_code_location)\n        : test_suite_base_name(a_test_suite_base_name),\n          test_base_name(a_test_base_name),\n          test_meta_factory(a_test_meta_factory),\n          code_location(a_code_location) {}\n\n    const std::string test_suite_base_name;\n    const std::string test_base_name;\n    const std::unique_ptr<TestMetaFactoryBase<ParamType>> test_meta_factory;\n    const CodeLocation code_location;\n  };\n  using TestInfoContainer = ::std::vector<std::shared_ptr<TestInfo>>;\n  // Records data received from INSTANTIATE_TEST_SUITE_P macros:\n  //  <Instantiation name, Sequence generator creation function,\n  //     Name generator function, Source file, Source line>\n  struct InstantiationInfo {\n    InstantiationInfo(const std::string& name_in,\n                      GeneratorCreationFunc* generator_in,\n                      ParamNameGeneratorFunc* name_func_in, const char* file_in,\n                      int line_in)\n        : name(name_in),\n          generator(generator_in),\n          name_func(name_func_in),\n          file(file_in),\n          line(line_in) {}\n\n    std::string name;\n    GeneratorCreationFunc* generator;\n    ParamNameGeneratorFunc* name_func;\n    const char* file;\n    int line;\n  };\n  typedef ::std::vector<InstantiationInfo> InstantiationContainer;\n\n  static bool IsValidParamName(const std::string& name) {\n    // Check for empty string\n    if (name.empty()) return false;\n\n    // Check for invalid characters\n    for (std::string::size_type index = 0; index < name.size(); ++index) {\n      if (!IsAlNum(name[index]) && name[index] != '_') return false;\n    }\n\n    return true;\n  }\n\n  const std::string test_suite_name_;\n  CodeLocation code_location_;\n  TestInfoContainer tests_;\n  InstantiationContainer instantiations_;\n\n  ParameterizedTestSuiteInfo(const ParameterizedTestSuiteInfo&) = delete;\n  ParameterizedTestSuiteInfo& operator=(const ParameterizedTestSuiteInfo&) =\n      delete;\n};  // class ParameterizedTestSuiteInfo\n\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\ntemplate <class TestCase>\nusing ParameterizedTestCaseInfo = ParameterizedTestSuiteInfo<TestCase>;\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// ParameterizedTestSuiteRegistry contains a map of\n// ParameterizedTestSuiteInfoBase classes accessed by test suite names. TEST_P\n// and INSTANTIATE_TEST_SUITE_P macros use it to locate their corresponding\n// ParameterizedTestSuiteInfo descriptors.\nclass ParameterizedTestSuiteRegistry {\n public:\n  ParameterizedTestSuiteRegistry() {}\n  ~ParameterizedTestSuiteRegistry() {\n    for (auto& test_suite_info : test_suite_infos_) {\n      delete test_suite_info;\n    }\n  }\n\n  // Looks up or creates and returns a structure containing information about\n  // tests and instantiations of a particular test suite.\n  template <class TestSuite>\n  ParameterizedTestSuiteInfo<TestSuite>* GetTestSuitePatternHolder(\n      const char* test_suite_name, CodeLocation code_location) {\n    ParameterizedTestSuiteInfo<TestSuite>* typed_test_info = nullptr;\n    for (auto& test_suite_info : test_suite_infos_) {\n      if (test_suite_info->GetTestSuiteName() == test_suite_name) {\n        if (test_suite_info->GetTestSuiteTypeId() != GetTypeId<TestSuite>()) {\n          // Complain about incorrect usage of Google Test facilities\n          // and terminate the program since we cannot guaranty correct\n          // test suite setup and tear-down in this case.\n          ReportInvalidTestSuiteType(test_suite_name, code_location);\n          posix::Abort();\n        } else {\n          // At this point we are sure that the object we found is of the same\n          // type we are looking for, so we downcast it to that type\n          // without further checks.\n          typed_test_info = CheckedDowncastToActualType<\n              ParameterizedTestSuiteInfo<TestSuite>>(test_suite_info);\n        }\n        break;\n      }\n    }\n    if (typed_test_info == nullptr) {\n      typed_test_info = new ParameterizedTestSuiteInfo<TestSuite>(\n          test_suite_name, code_location);\n      test_suite_infos_.push_back(typed_test_info);\n    }\n    return typed_test_info;\n  }\n  void RegisterTests() {\n    for (auto& test_suite_info : test_suite_infos_) {\n      test_suite_info->RegisterTests();\n    }\n  }\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  template <class TestCase>\n  ParameterizedTestCaseInfo<TestCase>* GetTestCasePatternHolder(\n      const char* test_case_name, CodeLocation code_location) {\n    return GetTestSuitePatternHolder<TestCase>(test_case_name, code_location);\n  }\n\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n private:\n  using TestSuiteInfoContainer = ::std::vector<ParameterizedTestSuiteInfoBase*>;\n\n  TestSuiteInfoContainer test_suite_infos_;\n\n  ParameterizedTestSuiteRegistry(const ParameterizedTestSuiteRegistry&) =\n      delete;\n  ParameterizedTestSuiteRegistry& operator=(\n      const ParameterizedTestSuiteRegistry&) = delete;\n};\n\n// Keep track of what type-parameterized test suite are defined and\n// where as well as which are intatiated. This allows susequently\n// identifying suits that are defined but never used.\nclass TypeParameterizedTestSuiteRegistry {\n public:\n  // Add a suite definition\n  void RegisterTestSuite(const char* test_suite_name,\n                         CodeLocation code_location);\n\n  // Add an instantiation of a suit.\n  void RegisterInstantiation(const char* test_suite_name);\n\n  // For each suit repored as defined but not reported as instantiation,\n  // emit a test that reports that fact (configurably, as an error).\n  void CheckForInstantiations();\n\n private:\n  struct TypeParameterizedTestSuiteInfo {\n    explicit TypeParameterizedTestSuiteInfo(CodeLocation c)\n        : code_location(c), instantiated(false) {}\n\n    CodeLocation code_location;\n    bool instantiated;\n  };\n\n  std::map<std::string, TypeParameterizedTestSuiteInfo> suites_;\n};\n\n}  // namespace internal\n\n// Forward declarations of ValuesIn(), which is implemented in\n// include/gtest/gtest-param-test.h.\ntemplate <class Container>\ninternal::ParamGenerator<typename Container::value_type> ValuesIn(\n    const Container& container);\n\nnamespace internal {\n// Used in the Values() function to provide polymorphic capabilities.\n\n#ifdef _MSC_VER\n#pragma warning(push)\n#pragma warning(disable : 4100)\n#endif\n\ntemplate <typename... Ts>\nclass ValueArray {\n public:\n  explicit ValueArray(Ts... v) : v_(FlatTupleConstructTag{}, std::move(v)...) {}\n\n  template <typename T>\n  operator ParamGenerator<T>() const {  // NOLINT\n    return ValuesIn(MakeVector<T>(MakeIndexSequence<sizeof...(Ts)>()));\n  }\n\n private:\n  template <typename T, size_t... I>\n  std::vector<T> MakeVector(IndexSequence<I...>) const {\n    return std::vector<T>{static_cast<T>(v_.template Get<I>())...};\n  }\n\n  FlatTuple<Ts...> v_;\n};\n\n#ifdef _MSC_VER\n#pragma warning(pop)\n#endif\n\ntemplate <typename... T>\nclass CartesianProductGenerator\n    : public ParamGeneratorInterface<::std::tuple<T...>> {\n public:\n  typedef ::std::tuple<T...> ParamType;\n\n  CartesianProductGenerator(const std::tuple<ParamGenerator<T>...>& g)\n      : generators_(g) {}\n  ~CartesianProductGenerator() override {}\n\n  ParamIteratorInterface<ParamType>* Begin() const override {\n    return new Iterator(this, generators_, false);\n  }\n  ParamIteratorInterface<ParamType>* End() const override {\n    return new Iterator(this, generators_, true);\n  }\n\n private:\n  template <class I>\n  class IteratorImpl;\n  template <size_t... I>\n  class IteratorImpl<IndexSequence<I...>>\n      : public ParamIteratorInterface<ParamType> {\n   public:\n    IteratorImpl(const ParamGeneratorInterface<ParamType>* base,\n                 const std::tuple<ParamGenerator<T>...>& generators,\n                 bool is_end)\n        : base_(base),\n          begin_(std::get<I>(generators).begin()...),\n          end_(std::get<I>(generators).end()...),\n          current_(is_end ? end_ : begin_) {\n      ComputeCurrentValue();\n    }\n    ~IteratorImpl() override {}\n\n    const ParamGeneratorInterface<ParamType>* BaseGenerator() const override {\n      return base_;\n    }\n    // Advance should not be called on beyond-of-range iterators\n    // so no component iterators must be beyond end of range, either.\n    void Advance() override {\n      assert(!AtEnd());\n      // Advance the last iterator.\n      ++std::get<sizeof...(T) - 1>(current_);\n      // if that reaches end, propagate that up.\n      AdvanceIfEnd<sizeof...(T) - 1>();\n      ComputeCurrentValue();\n    }\n    ParamIteratorInterface<ParamType>* Clone() const override {\n      return new IteratorImpl(*this);\n    }\n\n    const ParamType* Current() const override { return current_value_.get(); }\n\n    bool Equals(const ParamIteratorInterface<ParamType>& other) const override {\n      // Having the same base generator guarantees that the other\n      // iterator is of the same type and we can downcast.\n      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())\n          << \"The program attempted to compare iterators \"\n          << \"from different generators.\" << std::endl;\n      const IteratorImpl* typed_other =\n          CheckedDowncastToActualType<const IteratorImpl>(&other);\n\n      // We must report iterators equal if they both point beyond their\n      // respective ranges. That can happen in a variety of fashions,\n      // so we have to consult AtEnd().\n      if (AtEnd() && typed_other->AtEnd()) return true;\n\n      bool same = true;\n      bool dummy[] = {\n          (same = same && std::get<I>(current_) ==\n                              std::get<I>(typed_other->current_))...};\n      (void)dummy;\n      return same;\n    }\n\n   private:\n    template <size_t ThisI>\n    void AdvanceIfEnd() {\n      if (std::get<ThisI>(current_) != std::get<ThisI>(end_)) return;\n\n      bool last = ThisI == 0;\n      if (last) {\n        // We are done. Nothing else to propagate.\n        return;\n      }\n\n      constexpr size_t NextI = ThisI - (ThisI != 0);\n      std::get<ThisI>(current_) = std::get<ThisI>(begin_);\n      ++std::get<NextI>(current_);\n      AdvanceIfEnd<NextI>();\n    }\n\n    void ComputeCurrentValue() {\n      if (!AtEnd())\n        current_value_ = std::make_shared<ParamType>(*std::get<I>(current_)...);\n    }\n    bool AtEnd() const {\n      bool at_end = false;\n      bool dummy[] = {\n          (at_end = at_end || std::get<I>(current_) == std::get<I>(end_))...};\n      (void)dummy;\n      return at_end;\n    }\n\n    const ParamGeneratorInterface<ParamType>* const base_;\n    std::tuple<typename ParamGenerator<T>::iterator...> begin_;\n    std::tuple<typename ParamGenerator<T>::iterator...> end_;\n    std::tuple<typename ParamGenerator<T>::iterator...> current_;\n    std::shared_ptr<ParamType> current_value_;\n  };\n\n  using Iterator = IteratorImpl<typename MakeIndexSequence<sizeof...(T)>::type>;\n\n  std::tuple<ParamGenerator<T>...> generators_;\n};\n\ntemplate <class... Gen>\nclass CartesianProductHolder {\n public:\n  CartesianProductHolder(const Gen&... g) : generators_(g...) {}\n  template <typename... T>\n  operator ParamGenerator<::std::tuple<T...>>() const {\n    return ParamGenerator<::std::tuple<T...>>(\n        new CartesianProductGenerator<T...>(generators_));\n  }\n\n private:\n  std::tuple<Gen...> generators_;\n};\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/gtest-port-arch.h",
    "content": "// Copyright 2015, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// The Google C++ Testing and Mocking Framework (Google Test)\n//\n// This header file defines the GTEST_OS_* macro.\n// It is separate from gtest-port.h so that custom/gtest-port.h can include it.\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_\n#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_\n\n// Determines the platform on which Google Test is compiled.\n#ifdef __CYGWIN__\n#define GTEST_OS_CYGWIN 1\n#elif defined(__MINGW__) || defined(__MINGW32__) || defined(__MINGW64__)\n#define GTEST_OS_WINDOWS_MINGW 1\n#define GTEST_OS_WINDOWS 1\n#elif defined _WIN32\n#define GTEST_OS_WINDOWS 1\n#ifdef _WIN32_WCE\n#define GTEST_OS_WINDOWS_MOBILE 1\n#elif defined(WINAPI_FAMILY)\n#include <winapifamily.h>\n#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)\n#define GTEST_OS_WINDOWS_DESKTOP 1\n#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)\n#define GTEST_OS_WINDOWS_PHONE 1\n#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)\n#define GTEST_OS_WINDOWS_RT 1\n#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_TV_TITLE)\n#define GTEST_OS_WINDOWS_PHONE 1\n#define GTEST_OS_WINDOWS_TV_TITLE 1\n#else\n// WINAPI_FAMILY defined but no known partition matched.\n// Default to desktop.\n#define GTEST_OS_WINDOWS_DESKTOP 1\n#endif\n#else\n#define GTEST_OS_WINDOWS_DESKTOP 1\n#endif  // _WIN32_WCE\n#elif defined __OS2__\n#define GTEST_OS_OS2 1\n#elif defined __APPLE__\n#define GTEST_OS_MAC 1\n#include <TargetConditionals.h>\n#if TARGET_OS_IPHONE\n#define GTEST_OS_IOS 1\n#endif\n#elif defined __DragonFly__\n#define GTEST_OS_DRAGONFLY 1\n#elif defined __FreeBSD__\n#define GTEST_OS_FREEBSD 1\n#elif defined __Fuchsia__\n#define GTEST_OS_FUCHSIA 1\n#elif defined(__GNU__)\n#define GTEST_OS_GNU_HURD 1\n#elif defined(__GLIBC__) && defined(__FreeBSD_kernel__)\n#define GTEST_OS_GNU_KFREEBSD 1\n#elif defined __linux__\n#define GTEST_OS_LINUX 1\n#if defined __ANDROID__\n#define GTEST_OS_LINUX_ANDROID 1\n#endif\n#elif defined __MVS__\n#define GTEST_OS_ZOS 1\n#elif defined(__sun) && defined(__SVR4)\n#define GTEST_OS_SOLARIS 1\n#elif defined(_AIX)\n#define GTEST_OS_AIX 1\n#elif defined(__hpux)\n#define GTEST_OS_HPUX 1\n#elif defined __native_client__\n#define GTEST_OS_NACL 1\n#elif defined __NetBSD__\n#define GTEST_OS_NETBSD 1\n#elif defined __OpenBSD__\n#define GTEST_OS_OPENBSD 1\n#elif defined __QNX__\n#define GTEST_OS_QNX 1\n#elif defined(__HAIKU__)\n#define GTEST_OS_HAIKU 1\n#elif defined ESP8266\n#define GTEST_OS_ESP8266 1\n#elif defined ESP32\n#define GTEST_OS_ESP32 1\n#elif defined(__XTENSA__)\n#define GTEST_OS_XTENSA 1\n#endif  // __CYGWIN__\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_ARCH_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/gtest-port.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Low-level types and utilities for porting Google Test to various\n// platforms.  All macros ending with _ and symbols defined in an\n// internal namespace are subject to change without notice.  Code\n// outside Google Test MUST NOT USE THEM DIRECTLY.  Macros that don't\n// end with _ are part of Google Test's public API and can be used by\n// code outside Google Test.\n//\n// This file is fundamental to Google Test.  All other Google Test source\n// files are expected to #include this.  Therefore, it cannot #include\n// any other Google Test header.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_\n#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_\n\n// Environment-describing macros\n// -----------------------------\n//\n// Google Test can be used in many different environments.  Macros in\n// this section tell Google Test what kind of environment it is being\n// used in, such that Google Test can provide environment-specific\n// features and implementations.\n//\n// Google Test tries to automatically detect the properties of its\n// environment, so users usually don't need to worry about these\n// macros.  However, the automatic detection is not perfect.\n// Sometimes it's necessary for a user to define some of the following\n// macros in the build script to override Google Test's decisions.\n//\n// If the user doesn't define a macro in the list, Google Test will\n// provide a default definition.  After this header is #included, all\n// macros in this list will be defined to either 1 or 0.\n//\n// Notes to maintainers:\n//   - Each macro here is a user-tweakable knob; do not grow the list\n//     lightly.\n//   - Use #if to key off these macros.  Don't use #ifdef or \"#if\n//     defined(...)\", which will not work as these macros are ALWAYS\n//     defined.\n//\n//   GTEST_HAS_CLONE          - Define it to 1/0 to indicate that clone(2)\n//                              is/isn't available.\n//   GTEST_HAS_EXCEPTIONS     - Define it to 1/0 to indicate that exceptions\n//                              are enabled.\n//   GTEST_HAS_POSIX_RE       - Define it to 1/0 to indicate that POSIX regular\n//                              expressions are/aren't available.\n//   GTEST_HAS_PTHREAD        - Define it to 1/0 to indicate that <pthread.h>\n//                              is/isn't available.\n//   GTEST_HAS_RTTI           - Define it to 1/0 to indicate that RTTI is/isn't\n//                              enabled.\n//   GTEST_HAS_STD_WSTRING    - Define it to 1/0 to indicate that\n//                              std::wstring does/doesn't work (Google Test can\n//                              be used where std::wstring is unavailable).\n//   GTEST_HAS_SEH            - Define it to 1/0 to indicate whether the\n//                              compiler supports Microsoft's \"Structured\n//                              Exception Handling\".\n//   GTEST_HAS_STREAM_REDIRECTION\n//                            - Define it to 1/0 to indicate whether the\n//                              platform supports I/O stream redirection using\n//                              dup() and dup2().\n//   GTEST_LINKED_AS_SHARED_LIBRARY\n//                            - Define to 1 when compiling tests that use\n//                              Google Test as a shared library (known as\n//                              DLL on Windows).\n//   GTEST_CREATE_SHARED_LIBRARY\n//                            - Define to 1 when compiling Google Test itself\n//                              as a shared library.\n//   GTEST_DEFAULT_DEATH_TEST_STYLE\n//                            - The default value of --gtest_death_test_style.\n//                              The legacy default has been \"fast\" in the open\n//                              source version since 2008. The recommended value\n//                              is \"threadsafe\", and can be set in\n//                              custom/gtest-port.h.\n\n// Platform-indicating macros\n// --------------------------\n//\n// Macros indicating the platform on which Google Test is being used\n// (a macro is defined to 1 if compiled on the given platform;\n// otherwise UNDEFINED -- it's never defined to 0.).  Google Test\n// defines these macros automatically.  Code outside Google Test MUST\n// NOT define them.\n//\n//   GTEST_OS_AIX      - IBM AIX\n//   GTEST_OS_CYGWIN   - Cygwin\n//   GTEST_OS_DRAGONFLY - DragonFlyBSD\n//   GTEST_OS_FREEBSD  - FreeBSD\n//   GTEST_OS_FUCHSIA  - Fuchsia\n//   GTEST_OS_GNU_HURD - GNU/Hurd\n//   GTEST_OS_GNU_KFREEBSD - GNU/kFreeBSD\n//   GTEST_OS_HAIKU    - Haiku\n//   GTEST_OS_HPUX     - HP-UX\n//   GTEST_OS_LINUX    - Linux\n//     GTEST_OS_LINUX_ANDROID - Google Android\n//   GTEST_OS_MAC      - Mac OS X\n//     GTEST_OS_IOS    - iOS\n//   GTEST_OS_NACL     - Google Native Client (NaCl)\n//   GTEST_OS_NETBSD   - NetBSD\n//   GTEST_OS_OPENBSD  - OpenBSD\n//   GTEST_OS_OS2      - OS/2\n//   GTEST_OS_QNX      - QNX\n//   GTEST_OS_SOLARIS  - Sun Solaris\n//   GTEST_OS_WINDOWS  - Windows (Desktop, MinGW, or Mobile)\n//     GTEST_OS_WINDOWS_DESKTOP  - Windows Desktop\n//     GTEST_OS_WINDOWS_MINGW    - MinGW\n//     GTEST_OS_WINDOWS_MOBILE   - Windows Mobile\n//     GTEST_OS_WINDOWS_PHONE    - Windows Phone\n//     GTEST_OS_WINDOWS_RT       - Windows Store App/WinRT\n//   GTEST_OS_ZOS      - z/OS\n//\n// Among the platforms, Cygwin, Linux, Mac OS X, and Windows have the\n// most stable support.  Since core members of the Google Test project\n// don't have access to other platforms, support for them may be less\n// stable.  If you notice any problems on your platform, please notify\n// googletestframework@googlegroups.com (patches for fixing them are\n// even more welcome!).\n//\n// It is possible that none of the GTEST_OS_* macros are defined.\n\n// Feature-indicating macros\n// -------------------------\n//\n// Macros indicating which Google Test features are available (a macro\n// is defined to 1 if the corresponding feature is supported;\n// otherwise UNDEFINED -- it's never defined to 0.).  Google Test\n// defines these macros automatically.  Code outside Google Test MUST\n// NOT define them.\n//\n// These macros are public so that portable tests can be written.\n// Such tests typically surround code using a feature with an #if\n// which controls that code.  For example:\n//\n// #if GTEST_HAS_DEATH_TEST\n//   EXPECT_DEATH(DoSomethingDeadly());\n// #endif\n//\n//   GTEST_HAS_DEATH_TEST   - death tests\n//   GTEST_HAS_TYPED_TEST   - typed tests\n//   GTEST_HAS_TYPED_TEST_P - type-parameterized tests\n//   GTEST_IS_THREADSAFE    - Google Test is thread-safe.\n//   GTEST_USES_RE2         - the RE2 regular expression library is used\n//   GTEST_USES_POSIX_RE    - enhanced POSIX regex is used. Do not confuse with\n//                            GTEST_HAS_POSIX_RE (see above) which users can\n//                            define themselves.\n//   GTEST_USES_SIMPLE_RE   - our own simple regex is used;\n//                            the above RE\\b(s) are mutually exclusive.\n\n// Misc public macros\n// ------------------\n//\n//   GTEST_FLAG(flag_name)  - references the variable corresponding to\n//                            the given Google Test flag.\n\n// Internal utilities\n// ------------------\n//\n// The following macros and utilities are for Google Test's INTERNAL\n// use only.  Code outside Google Test MUST NOT USE THEM DIRECTLY.\n//\n// Macros for basic C++ coding:\n//   GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning.\n//   GTEST_ATTRIBUTE_UNUSED_  - declares that a class' instances or a\n//                              variable don't have to be used.\n//   GTEST_MUST_USE_RESULT_   - declares that a function's result must be used.\n//   GTEST_INTENTIONAL_CONST_COND_PUSH_ - start code section where MSVC C4127 is\n//                                        suppressed (constant conditional).\n//   GTEST_INTENTIONAL_CONST_COND_POP_  - finish code section where MSVC C4127\n//                                        is suppressed.\n//   GTEST_INTERNAL_HAS_ANY - for enabling UniversalPrinter<std::any> or\n//                            UniversalPrinter<absl::any> specializations.\n//   GTEST_INTERNAL_HAS_OPTIONAL - for enabling UniversalPrinter<std::optional>\n//   or\n//                                 UniversalPrinter<absl::optional>\n//                                 specializations.\n//   GTEST_INTERNAL_HAS_STRING_VIEW - for enabling Matcher<std::string_view> or\n//                                    Matcher<absl::string_view>\n//                                    specializations.\n//   GTEST_INTERNAL_HAS_VARIANT - for enabling UniversalPrinter<std::variant> or\n//                                UniversalPrinter<absl::variant>\n//                                specializations.\n//\n// Synchronization:\n//   Mutex, MutexLock, ThreadLocal, GetThreadCount()\n//                            - synchronization primitives.\n//\n// Regular expressions:\n//   RE             - a simple regular expression class using\n//                     1) the RE2 syntax on all platforms when built with RE2\n//                        and Abseil as dependencies\n//                     2) the POSIX Extended Regular Expression syntax on\n//                        UNIX-like platforms,\n//                     3) A reduced regular exception syntax on other platforms,\n//                        including Windows.\n// Logging:\n//   GTEST_LOG_()   - logs messages at the specified severity level.\n//   LogToStderr()  - directs all log messages to stderr.\n//   FlushInfoLog() - flushes informational log messages.\n//\n// Stdout and stderr capturing:\n//   CaptureStdout()     - starts capturing stdout.\n//   GetCapturedStdout() - stops capturing stdout and returns the captured\n//                         string.\n//   CaptureStderr()     - starts capturing stderr.\n//   GetCapturedStderr() - stops capturing stderr and returns the captured\n//                         string.\n//\n// Integer types:\n//   TypeWithSize   - maps an integer to a int type.\n//   TimeInMillis   - integers of known sizes.\n//   BiggestInt     - the biggest signed integer type.\n//\n// Command-line utilities:\n//   GetInjectableArgvs() - returns the command line as a vector of strings.\n//\n// Environment variable utilities:\n//   GetEnv()             - gets the value of an environment variable.\n//   BoolFromGTestEnv()   - parses a bool environment variable.\n//   Int32FromGTestEnv()  - parses an int32_t environment variable.\n//   StringFromGTestEnv() - parses a string environment variable.\n//\n// Deprecation warnings:\n//   GTEST_INTERNAL_DEPRECATED(message) - attribute marking a function as\n//                                        deprecated; calling a marked function\n//                                        should generate a compiler warning\n\n#include <ctype.h>   // for isspace, etc\n#include <stddef.h>  // for ptrdiff_t\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include <cerrno>\n// #include <condition_variable>  // Guarded by GTEST_IS_THREADSAFE below\n#include <cstdint>\n#include <iostream>\n#include <limits>\n#include <locale>\n#include <memory>\n#include <string>\n// #include <mutex>  // Guarded by GTEST_IS_THREADSAFE below\n#include <tuple>\n#include <type_traits>\n#include <vector>\n\n#ifndef _WIN32_WCE\n#include <sys/stat.h>\n#include <sys/types.h>\n#endif  // !_WIN32_WCE\n\n#if defined __APPLE__\n#include <AvailabilityMacros.h>\n#include <TargetConditionals.h>\n#endif\n\n#include \"gtest/internal/custom/gtest-port.h\"\n#include \"gtest/internal/gtest-port-arch.h\"\n\n#if GTEST_HAS_ABSL\n#include \"absl/flags/declare.h\"\n#include \"absl/flags/flag.h\"\n#include \"absl/flags/reflection.h\"\n#endif\n\n#if !defined(GTEST_DEV_EMAIL_)\n#define GTEST_DEV_EMAIL_ \"googletestframework@@googlegroups.com\"\n#define GTEST_FLAG_PREFIX_ \"gtest_\"\n#define GTEST_FLAG_PREFIX_DASH_ \"gtest-\"\n#define GTEST_FLAG_PREFIX_UPPER_ \"GTEST_\"\n#define GTEST_NAME_ \"Google Test\"\n#define GTEST_PROJECT_URL_ \"https://github.com/google/googletest/\"\n#endif  // !defined(GTEST_DEV_EMAIL_)\n\n#if !defined(GTEST_INIT_GOOGLE_TEST_NAME_)\n#define GTEST_INIT_GOOGLE_TEST_NAME_ \"testing::InitGoogleTest\"\n#endif  // !defined(GTEST_INIT_GOOGLE_TEST_NAME_)\n\n// Determines the version of gcc that is used to compile this.\n#ifdef __GNUC__\n// 40302 means version 4.3.2.\n#define GTEST_GCC_VER_ \\\n  (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)\n#endif  // __GNUC__\n\n// Macros for disabling Microsoft Visual C++ warnings.\n//\n//   GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 4385)\n//   /* code that triggers warnings C4800 and C4385 */\n//   GTEST_DISABLE_MSC_WARNINGS_POP_()\n#if defined(_MSC_VER)\n#define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) \\\n  __pragma(warning(push)) __pragma(warning(disable : warnings))\n#define GTEST_DISABLE_MSC_WARNINGS_POP_() __pragma(warning(pop))\n#else\n// Not all compilers are MSVC\n#define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings)\n#define GTEST_DISABLE_MSC_WARNINGS_POP_()\n#endif\n\n// Clang on Windows does not understand MSVC's pragma warning.\n// We need clang-specific way to disable function deprecation warning.\n#ifdef __clang__\n#define GTEST_DISABLE_MSC_DEPRECATED_PUSH_()                            \\\n  _Pragma(\"clang diagnostic push\")                                      \\\n      _Pragma(\"clang diagnostic ignored \\\"-Wdeprecated-declarations\\\"\") \\\n          _Pragma(\"clang diagnostic ignored \\\"-Wdeprecated-implementations\\\"\")\n#define GTEST_DISABLE_MSC_DEPRECATED_POP_() _Pragma(\"clang diagnostic pop\")\n#else\n#define GTEST_DISABLE_MSC_DEPRECATED_PUSH_() \\\n  GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996)\n#define GTEST_DISABLE_MSC_DEPRECATED_POP_() GTEST_DISABLE_MSC_WARNINGS_POP_()\n#endif\n\n// Brings in definitions for functions used in the testing::internal::posix\n// namespace (read, write, close, chdir, isatty, stat). We do not currently\n// use them on Windows Mobile.\n#if GTEST_OS_WINDOWS\n#if !GTEST_OS_WINDOWS_MOBILE\n#include <direct.h>\n#include <io.h>\n#endif\n// In order to avoid having to include <windows.h>, use forward declaration\n#if GTEST_OS_WINDOWS_MINGW && !defined(__MINGW64_VERSION_MAJOR)\n// MinGW defined _CRITICAL_SECTION and _RTL_CRITICAL_SECTION as two\n// separate (equivalent) structs, instead of using typedef\ntypedef struct _CRITICAL_SECTION GTEST_CRITICAL_SECTION;\n#else\n// Assume CRITICAL_SECTION is a typedef of _RTL_CRITICAL_SECTION.\n// This assumption is verified by\n// WindowsTypesTest.CRITICAL_SECTIONIs_RTL_CRITICAL_SECTION.\ntypedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;\n#endif\n#elif GTEST_OS_XTENSA\n#include <unistd.h>\n// Xtensa toolchains define strcasecmp in the string.h header instead of\n// strings.h. string.h is already included.\n#else\n// This assumes that non-Windows OSes provide unistd.h. For OSes where this\n// is not the case, we need to include headers that provide the functions\n// mentioned above.\n#include <strings.h>\n#include <unistd.h>\n#endif  // GTEST_OS_WINDOWS\n\n#if GTEST_OS_LINUX_ANDROID\n// Used to define __ANDROID_API__ matching the target NDK API level.\n#include <android/api-level.h>  // NOLINT\n#endif\n\n// Defines this to true if and only if Google Test can use POSIX regular\n// expressions.\n#ifndef GTEST_HAS_POSIX_RE\n#if GTEST_OS_LINUX_ANDROID\n// On Android, <regex.h> is only available starting with Gingerbread.\n#define GTEST_HAS_POSIX_RE (__ANDROID_API__ >= 9)\n#else\n#define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS && !GTEST_OS_XTENSA)\n#endif\n#endif\n\n// Select the regular expression implementation.\n#if GTEST_HAS_ABSL\n// When using Abseil, RE2 is required.\n#include \"absl/strings/string_view.h\"\n#include \"re2/re2.h\"\n#define GTEST_USES_RE2 1\n#elif GTEST_HAS_POSIX_RE\n#include <regex.h>  // NOLINT\n#define GTEST_USES_POSIX_RE 1\n#else\n// Use our own simple regex implementation.\n#define GTEST_USES_SIMPLE_RE 1\n#endif\n\n#ifndef GTEST_HAS_EXCEPTIONS\n// The user didn't tell us whether exceptions are enabled, so we need\n// to figure it out.\n#if defined(_MSC_VER) && defined(_CPPUNWIND)\n// MSVC defines _CPPUNWIND to 1 if and only if exceptions are enabled.\n#define GTEST_HAS_EXCEPTIONS 1\n#elif defined(__BORLANDC__)\n// C++Builder's implementation of the STL uses the _HAS_EXCEPTIONS\n// macro to enable exceptions, so we'll do the same.\n// Assumes that exceptions are enabled by default.\n#ifndef _HAS_EXCEPTIONS\n#define _HAS_EXCEPTIONS 1\n#endif  // _HAS_EXCEPTIONS\n#define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS\n#elif defined(__clang__)\n// clang defines __EXCEPTIONS if and only if exceptions are enabled before clang\n// 220714, but if and only if cleanups are enabled after that. In Obj-C++ files,\n// there can be cleanups for ObjC exceptions which also need cleanups, even if\n// C++ exceptions are disabled. clang has __has_feature(cxx_exceptions) which\n// checks for C++ exceptions starting at clang r206352, but which checked for\n// cleanups prior to that. To reliably check for C++ exception availability with\n// clang, check for\n// __EXCEPTIONS && __has_feature(cxx_exceptions).\n#define GTEST_HAS_EXCEPTIONS (__EXCEPTIONS && __has_feature(cxx_exceptions))\n#elif defined(__GNUC__) && __EXCEPTIONS\n// gcc defines __EXCEPTIONS to 1 if and only if exceptions are enabled.\n#define GTEST_HAS_EXCEPTIONS 1\n#elif defined(__SUNPRO_CC)\n// Sun Pro CC supports exceptions.  However, there is no compile-time way of\n// detecting whether they are enabled or not.  Therefore, we assume that\n// they are enabled unless the user tells us otherwise.\n#define GTEST_HAS_EXCEPTIONS 1\n#elif defined(__IBMCPP__) && __EXCEPTIONS\n// xlC defines __EXCEPTIONS to 1 if and only if exceptions are enabled.\n#define GTEST_HAS_EXCEPTIONS 1\n#elif defined(__HP_aCC)\n// Exception handling is in effect by default in HP aCC compiler. It has to\n// be turned of by +noeh compiler option if desired.\n#define GTEST_HAS_EXCEPTIONS 1\n#else\n// For other compilers, we assume exceptions are disabled to be\n// conservative.\n#define GTEST_HAS_EXCEPTIONS 0\n#endif  // defined(_MSC_VER) || defined(__BORLANDC__)\n#endif  // GTEST_HAS_EXCEPTIONS\n\n#ifndef GTEST_HAS_STD_WSTRING\n// The user didn't tell us whether ::std::wstring is available, so we need\n// to figure it out.\n// Cygwin 1.7 and below doesn't support ::std::wstring.\n// Solaris' libc++ doesn't support it either.  Android has\n// no support for it at least as recent as Froyo (2.2).\n#define GTEST_HAS_STD_WSTRING                                         \\\n  (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \\\n     GTEST_OS_HAIKU || GTEST_OS_ESP32 || GTEST_OS_ESP8266 || GTEST_OS_XTENSA))\n\n#endif  // GTEST_HAS_STD_WSTRING\n\n// Determines whether RTTI is available.\n#ifndef GTEST_HAS_RTTI\n// The user didn't tell us whether RTTI is enabled, so we need to\n// figure it out.\n\n#ifdef _MSC_VER\n\n#ifdef _CPPRTTI  // MSVC defines this macro if and only if RTTI is enabled.\n#define GTEST_HAS_RTTI 1\n#else\n#define GTEST_HAS_RTTI 0\n#endif\n\n// Starting with version 4.3.2, gcc defines __GXX_RTTI if and only if RTTI is\n// enabled.\n#elif defined(__GNUC__)\n\n#ifdef __GXX_RTTI\n// When building against STLport with the Android NDK and with\n// -frtti -fno-exceptions, the build fails at link time with undefined\n// references to __cxa_bad_typeid. Note sure if STL or toolchain bug,\n// so disable RTTI when detected.\n#if GTEST_OS_LINUX_ANDROID && defined(_STLPORT_MAJOR) && !defined(__EXCEPTIONS)\n#define GTEST_HAS_RTTI 0\n#else\n#define GTEST_HAS_RTTI 1\n#endif  // GTEST_OS_LINUX_ANDROID && __STLPORT_MAJOR && !__EXCEPTIONS\n#else\n#define GTEST_HAS_RTTI 0\n#endif  // __GXX_RTTI\n\n// Clang defines __GXX_RTTI starting with version 3.0, but its manual recommends\n// using has_feature instead. has_feature(cxx_rtti) is supported since 2.7, the\n// first version with C++ support.\n#elif defined(__clang__)\n\n#define GTEST_HAS_RTTI __has_feature(cxx_rtti)\n\n// Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if\n// both the typeid and dynamic_cast features are present.\n#elif defined(__IBMCPP__) && (__IBMCPP__ >= 900)\n\n#ifdef __RTTI_ALL__\n#define GTEST_HAS_RTTI 1\n#else\n#define GTEST_HAS_RTTI 0\n#endif\n\n#else\n\n// For all other compilers, we assume RTTI is enabled.\n#define GTEST_HAS_RTTI 1\n\n#endif  // _MSC_VER\n\n#endif  // GTEST_HAS_RTTI\n\n// It's this header's responsibility to #include <typeinfo> when RTTI\n// is enabled.\n#if GTEST_HAS_RTTI\n#include <typeinfo>\n#endif\n\n// Determines whether Google Test can use the pthreads library.\n#ifndef GTEST_HAS_PTHREAD\n// The user didn't tell us explicitly, so we make reasonable assumptions about\n// which platforms have pthreads support.\n//\n// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0\n// to your compiler flags.\n#define GTEST_HAS_PTHREAD                                                      \\\n  (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX || GTEST_OS_QNX ||          \\\n   GTEST_OS_FREEBSD || GTEST_OS_NACL || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA || \\\n   GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_OPENBSD ||          \\\n   GTEST_OS_HAIKU || GTEST_OS_GNU_HURD)\n#endif  // GTEST_HAS_PTHREAD\n\n#if GTEST_HAS_PTHREAD\n// gtest-port.h guarantees to #include <pthread.h> when GTEST_HAS_PTHREAD is\n// true.\n#include <pthread.h>  // NOLINT\n\n// For timespec and nanosleep, used below.\n#include <time.h>  // NOLINT\n#endif\n\n// Determines whether clone(2) is supported.\n// Usually it will only be available on Linux, excluding\n// Linux on the Itanium architecture.\n// Also see http://linux.die.net/man/2/clone.\n#ifndef GTEST_HAS_CLONE\n// The user didn't tell us, so we need to figure it out.\n\n#if GTEST_OS_LINUX && !defined(__ia64__)\n#if GTEST_OS_LINUX_ANDROID\n// On Android, clone() became available at different API levels for each 32-bit\n// architecture.\n#if defined(__LP64__) || (defined(__arm__) && __ANDROID_API__ >= 9) || \\\n    (defined(__mips__) && __ANDROID_API__ >= 12) ||                    \\\n    (defined(__i386__) && __ANDROID_API__ >= 17)\n#define GTEST_HAS_CLONE 1\n#else\n#define GTEST_HAS_CLONE 0\n#endif\n#else\n#define GTEST_HAS_CLONE 1\n#endif\n#else\n#define GTEST_HAS_CLONE 0\n#endif  // GTEST_OS_LINUX && !defined(__ia64__)\n\n#endif  // GTEST_HAS_CLONE\n\n// Determines whether to support stream redirection. This is used to test\n// output correctness and to implement death tests.\n#ifndef GTEST_HAS_STREAM_REDIRECTION\n// By default, we assume that stream redirection is supported on all\n// platforms except known mobile ones.\n#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \\\n    GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266 || GTEST_OS_XTENSA\n#define GTEST_HAS_STREAM_REDIRECTION 0\n#else\n#define GTEST_HAS_STREAM_REDIRECTION 1\n#endif  // !GTEST_OS_WINDOWS_MOBILE\n#endif  // GTEST_HAS_STREAM_REDIRECTION\n\n// Determines whether to support death tests.\n// pops up a dialog window that cannot be suppressed programmatically.\n#if (GTEST_OS_LINUX || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS ||             \\\n     (GTEST_OS_MAC && !GTEST_OS_IOS) ||                                   \\\n     (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER) || GTEST_OS_WINDOWS_MINGW ||  \\\n     GTEST_OS_AIX || GTEST_OS_HPUX || GTEST_OS_OPENBSD || GTEST_OS_QNX || \\\n     GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_FUCHSIA ||           \\\n     GTEST_OS_DRAGONFLY || GTEST_OS_GNU_KFREEBSD || GTEST_OS_HAIKU ||     \\\n     GTEST_OS_GNU_HURD)\n#define GTEST_HAS_DEATH_TEST 1\n#endif\n\n// Determines whether to support type-driven tests.\n\n// Typed tests need <typeinfo> and variadic macros, which GCC, VC++ 8.0,\n// Sun Pro CC, IBM Visual Age, and HP aCC support.\n#if defined(__GNUC__) || defined(_MSC_VER) || defined(__SUNPRO_CC) || \\\n    defined(__IBMCPP__) || defined(__HP_aCC)\n#define GTEST_HAS_TYPED_TEST 1\n#define GTEST_HAS_TYPED_TEST_P 1\n#endif\n\n// Determines whether the system compiler uses UTF-16 for encoding wide strings.\n#define GTEST_WIDE_STRING_USES_UTF16_ \\\n  (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_AIX || GTEST_OS_OS2)\n\n// Determines whether test results can be streamed to a socket.\n#if GTEST_OS_LINUX || GTEST_OS_GNU_KFREEBSD || GTEST_OS_DRAGONFLY || \\\n    GTEST_OS_FREEBSD || GTEST_OS_NETBSD || GTEST_OS_OPENBSD ||       \\\n    GTEST_OS_GNU_HURD\n#define GTEST_CAN_STREAM_RESULTS_ 1\n#endif\n\n// Defines some utility macros.\n\n// The GNU compiler emits a warning if nested \"if\" statements are followed by\n// an \"else\" statement and braces are not used to explicitly disambiguate the\n// \"else\" binding.  This leads to problems with code like:\n//\n//   if (gate)\n//     ASSERT_*(condition) << \"Some message\";\n//\n// The \"switch (0) case 0:\" idiom is used to suppress this.\n#ifdef __INTEL_COMPILER\n#define GTEST_AMBIGUOUS_ELSE_BLOCKER_\n#else\n#define GTEST_AMBIGUOUS_ELSE_BLOCKER_ \\\n  switch (0)                          \\\n  case 0:                             \\\n  default:  // NOLINT\n#endif\n\n// Use this annotation at the end of a struct/class definition to\n// prevent the compiler from optimizing away instances that are never\n// used.  This is useful when all interesting logic happens inside the\n// c'tor and / or d'tor.  Example:\n//\n//   struct Foo {\n//     Foo() { ... }\n//   } GTEST_ATTRIBUTE_UNUSED_;\n//\n// Also use it after a variable or parameter declaration to tell the\n// compiler the variable/parameter does not have to be used.\n#if defined(__GNUC__) && !defined(COMPILER_ICC)\n#define GTEST_ATTRIBUTE_UNUSED_ __attribute__((unused))\n#elif defined(__clang__)\n#if __has_attribute(unused)\n#define GTEST_ATTRIBUTE_UNUSED_ __attribute__((unused))\n#endif\n#endif\n#ifndef GTEST_ATTRIBUTE_UNUSED_\n#define GTEST_ATTRIBUTE_UNUSED_\n#endif\n\n// Use this annotation before a function that takes a printf format string.\n#if (defined(__GNUC__) || defined(__clang__)) && !defined(COMPILER_ICC)\n#if defined(__MINGW_PRINTF_FORMAT)\n// MinGW has two different printf implementations. Ensure the format macro\n// matches the selected implementation. See\n// https://sourceforge.net/p/mingw-w64/wiki2/gnu%20printf/.\n#define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \\\n  __attribute__((                                             \\\n      __format__(__MINGW_PRINTF_FORMAT, string_index, first_to_check)))\n#else\n#define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check) \\\n  __attribute__((__format__(__printf__, string_index, first_to_check)))\n#endif\n#else\n#define GTEST_ATTRIBUTE_PRINTF_(string_index, first_to_check)\n#endif\n\n// Tell the compiler to warn about unused return values for functions declared\n// with this macro.  The macro should be used on function declarations\n// following the argument list:\n//\n//   Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_;\n#if defined(__GNUC__) && !defined(COMPILER_ICC)\n#define GTEST_MUST_USE_RESULT_ __attribute__((warn_unused_result))\n#else\n#define GTEST_MUST_USE_RESULT_\n#endif  // __GNUC__ && !COMPILER_ICC\n\n// MS C++ compiler emits warning when a conditional expression is compile time\n// constant. In some contexts this warning is false positive and needs to be\n// suppressed. Use the following two macros in such cases:\n//\n// GTEST_INTENTIONAL_CONST_COND_PUSH_()\n// while (true) {\n// GTEST_INTENTIONAL_CONST_COND_POP_()\n// }\n#define GTEST_INTENTIONAL_CONST_COND_PUSH_() \\\n  GTEST_DISABLE_MSC_WARNINGS_PUSH_(4127)\n#define GTEST_INTENTIONAL_CONST_COND_POP_() GTEST_DISABLE_MSC_WARNINGS_POP_()\n\n// Determine whether the compiler supports Microsoft's Structured Exception\n// Handling.  This is supported by several Windows compilers but generally\n// does not exist on any other system.\n#ifndef GTEST_HAS_SEH\n// The user didn't tell us, so we need to figure it out.\n\n#if defined(_MSC_VER) || defined(__BORLANDC__)\n// These two compilers are known to support SEH.\n#define GTEST_HAS_SEH 1\n#else\n// Assume no SEH.\n#define GTEST_HAS_SEH 0\n#endif\n\n#endif  // GTEST_HAS_SEH\n\n#ifndef GTEST_IS_THREADSAFE\n\n#define GTEST_IS_THREADSAFE                                                 \\\n  (GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ ||                                     \\\n   (GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT) || \\\n   GTEST_HAS_PTHREAD)\n\n#endif  // GTEST_IS_THREADSAFE\n\n#if GTEST_IS_THREADSAFE\n// Some platforms don't support including these threading related headers.\n#include <condition_variable>  // NOLINT\n#include <mutex>               // NOLINT\n#endif                         // GTEST_IS_THREADSAFE\n\n// GTEST_API_ qualifies all symbols that must be exported. The definitions below\n// are guarded by #ifndef to give embedders a chance to define GTEST_API_ in\n// gtest/internal/custom/gtest-port.h\n#ifndef GTEST_API_\n\n#ifdef _MSC_VER\n#if GTEST_LINKED_AS_SHARED_LIBRARY\n#define GTEST_API_ __declspec(dllimport)\n#elif GTEST_CREATE_SHARED_LIBRARY\n#define GTEST_API_ __declspec(dllexport)\n#endif\n#elif __GNUC__ >= 4 || defined(__clang__)\n#define GTEST_API_ __attribute__((visibility(\"default\")))\n#endif  // _MSC_VER\n\n#endif  // GTEST_API_\n\n#ifndef GTEST_API_\n#define GTEST_API_\n#endif  // GTEST_API_\n\n#ifndef GTEST_DEFAULT_DEATH_TEST_STYLE\n#define GTEST_DEFAULT_DEATH_TEST_STYLE \"fast\"\n#endif  // GTEST_DEFAULT_DEATH_TEST_STYLE\n\n#ifdef __GNUC__\n// Ask the compiler to never inline a given function.\n#define GTEST_NO_INLINE_ __attribute__((noinline))\n#else\n#define GTEST_NO_INLINE_\n#endif\n\n#if defined(__clang__)\n// Nested ifs to avoid triggering MSVC warning.\n#if __has_attribute(disable_tail_calls)\n// Ask the compiler not to perform tail call optimization inside\n// the marked function.\n#define GTEST_NO_TAIL_CALL_ __attribute__((disable_tail_calls))\n#endif\n#elif __GNUC__\n#define GTEST_NO_TAIL_CALL_ \\\n  __attribute__((optimize(\"no-optimize-sibling-calls\")))\n#else\n#define GTEST_NO_TAIL_CALL_\n#endif\n\n// _LIBCPP_VERSION is defined by the libc++ library from the LLVM project.\n#if !defined(GTEST_HAS_CXXABI_H_)\n#if defined(__GLIBCXX__) || (defined(_LIBCPP_VERSION) && !defined(_MSC_VER))\n#define GTEST_HAS_CXXABI_H_ 1\n#else\n#define GTEST_HAS_CXXABI_H_ 0\n#endif\n#endif\n\n// A function level attribute to disable checking for use of uninitialized\n// memory when built with MemorySanitizer.\n#if defined(__clang__)\n#if __has_feature(memory_sanitizer)\n#define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ __attribute__((no_sanitize_memory))\n#else\n#define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_\n#endif  // __has_feature(memory_sanitizer)\n#else\n#define GTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_\n#endif  // __clang__\n\n// A function level attribute to disable AddressSanitizer instrumentation.\n#if defined(__clang__)\n#if __has_feature(address_sanitizer)\n#define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_ \\\n  __attribute__((no_sanitize_address))\n#else\n#define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_\n#endif  // __has_feature(address_sanitizer)\n#else\n#define GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_\n#endif  // __clang__\n\n// A function level attribute to disable HWAddressSanitizer instrumentation.\n#if defined(__clang__)\n#if __has_feature(hwaddress_sanitizer)\n#define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_ \\\n  __attribute__((no_sanitize(\"hwaddress\")))\n#else\n#define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_\n#endif  // __has_feature(hwaddress_sanitizer)\n#else\n#define GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_\n#endif  // __clang__\n\n// A function level attribute to disable ThreadSanitizer instrumentation.\n#if defined(__clang__)\n#if __has_feature(thread_sanitizer)\n#define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ __attribute__((no_sanitize_thread))\n#else\n#define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_\n#endif  // __has_feature(thread_sanitizer)\n#else\n#define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_\n#endif  // __clang__\n\nnamespace testing {\n\nclass Message;\n\n// Legacy imports for backwards compatibility.\n// New code should use std:: names directly.\nusing std::get;\nusing std::make_tuple;\nusing std::tuple;\nusing std::tuple_element;\nusing std::tuple_size;\n\nnamespace internal {\n\n// A secret type that Google Test users don't know about.  It has no\n// definition on purpose.  Therefore it's impossible to create a\n// Secret object, which is what we want.\nclass Secret;\n\n// A helper for suppressing warnings on constant condition.  It just\n// returns 'condition'.\nGTEST_API_ bool IsTrue(bool condition);\n\n// Defines RE.\n\n#if GTEST_USES_RE2\n\n// This is almost `using RE = ::RE2`, except it is copy-constructible, and it\n// needs to disambiguate the `std::string`, `absl::string_view`, and `const\n// char*` constructors.\nclass GTEST_API_ RE {\n public:\n  RE(absl::string_view regex) : regex_(regex) {}                  // NOLINT\n  RE(const char* regex) : RE(absl::string_view(regex)) {}         // NOLINT\n  RE(const std::string& regex) : RE(absl::string_view(regex)) {}  // NOLINT\n  RE(const RE& other) : RE(other.pattern()) {}\n\n  const std::string& pattern() const { return regex_.pattern(); }\n\n  static bool FullMatch(absl::string_view str, const RE& re) {\n    return RE2::FullMatch(str, re.regex_);\n  }\n  static bool PartialMatch(absl::string_view str, const RE& re) {\n    return RE2::PartialMatch(str, re.regex_);\n  }\n\n private:\n  RE2 regex_;\n};\n\n#elif GTEST_USES_POSIX_RE || GTEST_USES_SIMPLE_RE\n\n// A simple C++ wrapper for <regex.h>.  It uses the POSIX Extended\n// Regular Expression syntax.\nclass GTEST_API_ RE {\n public:\n  // A copy constructor is required by the Standard to initialize object\n  // references from r-values.\n  RE(const RE& other) { Init(other.pattern()); }\n\n  // Constructs an RE from a string.\n  RE(const ::std::string& regex) { Init(regex.c_str()); }  // NOLINT\n\n  RE(const char* regex) { Init(regex); }  // NOLINT\n  ~RE();\n\n  // Returns the string representation of the regex.\n  const char* pattern() const { return pattern_; }\n\n  // FullMatch(str, re) returns true if and only if regular expression re\n  // matches the entire str.\n  // PartialMatch(str, re) returns true if and only if regular expression re\n  // matches a substring of str (including str itself).\n  static bool FullMatch(const ::std::string& str, const RE& re) {\n    return FullMatch(str.c_str(), re);\n  }\n  static bool PartialMatch(const ::std::string& str, const RE& re) {\n    return PartialMatch(str.c_str(), re);\n  }\n\n  static bool FullMatch(const char* str, const RE& re);\n  static bool PartialMatch(const char* str, const RE& re);\n\n private:\n  void Init(const char* regex);\n  const char* pattern_;\n  bool is_valid_;\n\n#if GTEST_USES_POSIX_RE\n\n  regex_t full_regex_;     // For FullMatch().\n  regex_t partial_regex_;  // For PartialMatch().\n\n#else  // GTEST_USES_SIMPLE_RE\n\n  const char* full_pattern_;  // For FullMatch();\n\n#endif\n};\n\n#endif  // ::testing::internal::RE implementation\n\n// Formats a source file path and a line number as they would appear\n// in an error message from the compiler used to compile this code.\nGTEST_API_ ::std::string FormatFileLocation(const char* file, int line);\n\n// Formats a file location for compiler-independent XML output.\n// Although this function is not platform dependent, we put it next to\n// FormatFileLocation in order to contrast the two functions.\nGTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char* file,\n                                                               int line);\n\n// Defines logging utilities:\n//   GTEST_LOG_(severity) - logs messages at the specified severity level. The\n//                          message itself is streamed into the macro.\n//   LogToStderr()  - directs all log messages to stderr.\n//   FlushInfoLog() - flushes informational log messages.\n\nenum GTestLogSeverity { GTEST_INFO, GTEST_WARNING, GTEST_ERROR, GTEST_FATAL };\n\n// Formats log entry severity, provides a stream object for streaming the\n// log message, and terminates the message with a newline when going out of\n// scope.\nclass GTEST_API_ GTestLog {\n public:\n  GTestLog(GTestLogSeverity severity, const char* file, int line);\n\n  // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program.\n  ~GTestLog();\n\n  ::std::ostream& GetStream() { return ::std::cerr; }\n\n private:\n  const GTestLogSeverity severity_;\n\n  GTestLog(const GTestLog&) = delete;\n  GTestLog& operator=(const GTestLog&) = delete;\n};\n\n#if !defined(GTEST_LOG_)\n\n#define GTEST_LOG_(severity)                                           \\\n  ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \\\n                                __FILE__, __LINE__)                    \\\n      .GetStream()\n\ninline void LogToStderr() {}\ninline void FlushInfoLog() { fflush(nullptr); }\n\n#endif  // !defined(GTEST_LOG_)\n\n#if !defined(GTEST_CHECK_)\n// INTERNAL IMPLEMENTATION - DO NOT USE.\n//\n// GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition\n// is not satisfied.\n//  Synopsis:\n//    GTEST_CHECK_(boolean_condition);\n//     or\n//    GTEST_CHECK_(boolean_condition) << \"Additional message\";\n//\n//    This checks the condition and if the condition is not satisfied\n//    it prints message about the condition violation, including the\n//    condition itself, plus additional message streamed into it, if any,\n//    and then it aborts the program. It aborts the program irrespective of\n//    whether it is built in the debug mode or not.\n#define GTEST_CHECK_(condition)               \\\n  GTEST_AMBIGUOUS_ELSE_BLOCKER_               \\\n  if (::testing::internal::IsTrue(condition)) \\\n    ;                                         \\\n  else                                        \\\n    GTEST_LOG_(FATAL) << \"Condition \" #condition \" failed. \"\n#endif  // !defined(GTEST_CHECK_)\n\n// An all-mode assert to verify that the given POSIX-style function\n// call returns 0 (indicating success).  Known limitation: this\n// doesn't expand to a balanced 'if' statement, so enclose the macro\n// in {} if you need to use it as the only statement in an 'if'\n// branch.\n#define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \\\n  if (const int gtest_error = (posix_call))    \\\n  GTEST_LOG_(FATAL) << #posix_call << \"failed with error \" << gtest_error\n\n// Transforms \"T\" into \"const T&\" according to standard reference collapsing\n// rules (this is only needed as a backport for C++98 compilers that do not\n// support reference collapsing). Specifically, it transforms:\n//\n//   char         ==> const char&\n//   const char   ==> const char&\n//   char&        ==> char&\n//   const char&  ==> const char&\n//\n// Note that the non-const reference will not have \"const\" added. This is\n// standard, and necessary so that \"T\" can always bind to \"const T&\".\ntemplate <typename T>\nstruct ConstRef {\n  typedef const T& type;\n};\ntemplate <typename T>\nstruct ConstRef<T&> {\n  typedef T& type;\n};\n\n// The argument T must depend on some template parameters.\n#define GTEST_REFERENCE_TO_CONST_(T) \\\n  typename ::testing::internal::ConstRef<T>::type\n\n// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.\n//\n// Use ImplicitCast_ as a safe version of static_cast for upcasting in\n// the type hierarchy (e.g. casting a Foo* to a SuperclassOfFoo* or a\n// const Foo*).  When you use ImplicitCast_, the compiler checks that\n// the cast is safe.  Such explicit ImplicitCast_s are necessary in\n// surprisingly many situations where C++ demands an exact type match\n// instead of an argument type convertible to a target type.\n//\n// The syntax for using ImplicitCast_ is the same as for static_cast:\n//\n//   ImplicitCast_<ToType>(expr)\n//\n// ImplicitCast_ would have been part of the C++ standard library,\n// but the proposal was submitted too late.  It will probably make\n// its way into the language in the future.\n//\n// This relatively ugly name is intentional. It prevents clashes with\n// similar functions users may have (e.g., implicit_cast). The internal\n// namespace alone is not enough because the function can be found by ADL.\ntemplate <typename To>\ninline To ImplicitCast_(To x) {\n  return x;\n}\n\n// When you upcast (that is, cast a pointer from type Foo to type\n// SuperclassOfFoo), it's fine to use ImplicitCast_<>, since upcasts\n// always succeed.  When you downcast (that is, cast a pointer from\n// type Foo to type SubclassOfFoo), static_cast<> isn't safe, because\n// how do you know the pointer is really of type SubclassOfFoo?  It\n// could be a bare Foo, or of type DifferentSubclassOfFoo.  Thus,\n// when you downcast, you should use this macro.  In debug mode, we\n// use dynamic_cast<> to double-check the downcast is legal (we die\n// if it's not).  In normal mode, we do the efficient static_cast<>\n// instead.  Thus, it's important to test in debug mode to make sure\n// the cast is legal!\n//    This is the only place in the code we should use dynamic_cast<>.\n// In particular, you SHOULDN'T be using dynamic_cast<> in order to\n// do RTTI (eg code like this:\n//    if (dynamic_cast<Subclass1>(foo)) HandleASubclass1Object(foo);\n//    if (dynamic_cast<Subclass2>(foo)) HandleASubclass2Object(foo);\n// You should design the code some other way not to need this.\n//\n// This relatively ugly name is intentional. It prevents clashes with\n// similar functions users may have (e.g., down_cast). The internal\n// namespace alone is not enough because the function can be found by ADL.\ntemplate <typename To, typename From>  // use like this: DownCast_<T*>(foo);\ninline To DownCast_(From* f) {         // so we only accept pointers\n  // Ensures that To is a sub-type of From *.  This test is here only\n  // for compile-time type checking, and has no overhead in an\n  // optimized build at run-time, as it will be optimized away\n  // completely.\n  GTEST_INTENTIONAL_CONST_COND_PUSH_()\n  if (false) {\n    GTEST_INTENTIONAL_CONST_COND_POP_()\n    const To to = nullptr;\n    ::testing::internal::ImplicitCast_<From*>(to);\n  }\n\n#if GTEST_HAS_RTTI\n  // RTTI: debug mode only!\n  GTEST_CHECK_(f == nullptr || dynamic_cast<To>(f) != nullptr);\n#endif\n  return static_cast<To>(f);\n}\n\n// Downcasts the pointer of type Base to Derived.\n// Derived must be a subclass of Base. The parameter MUST\n// point to a class of type Derived, not any subclass of it.\n// When RTTI is available, the function performs a runtime\n// check to enforce this.\ntemplate <class Derived, class Base>\nDerived* CheckedDowncastToActualType(Base* base) {\n#if GTEST_HAS_RTTI\n  GTEST_CHECK_(typeid(*base) == typeid(Derived));\n#endif\n\n#if GTEST_HAS_DOWNCAST_\n  return ::down_cast<Derived*>(base);\n#elif GTEST_HAS_RTTI\n  return dynamic_cast<Derived*>(base);  // NOLINT\n#else\n  return static_cast<Derived*>(base);  // Poor man's downcast.\n#endif\n}\n\n#if GTEST_HAS_STREAM_REDIRECTION\n\n// Defines the stderr capturer:\n//   CaptureStdout     - starts capturing stdout.\n//   GetCapturedStdout - stops capturing stdout and returns the captured string.\n//   CaptureStderr     - starts capturing stderr.\n//   GetCapturedStderr - stops capturing stderr and returns the captured string.\n//\nGTEST_API_ void CaptureStdout();\nGTEST_API_ std::string GetCapturedStdout();\nGTEST_API_ void CaptureStderr();\nGTEST_API_ std::string GetCapturedStderr();\n\n#endif  // GTEST_HAS_STREAM_REDIRECTION\n// Returns the size (in bytes) of a file.\nGTEST_API_ size_t GetFileSize(FILE* file);\n\n// Reads the entire content of a file as a string.\nGTEST_API_ std::string ReadEntireFile(FILE* file);\n\n// All command line arguments.\nGTEST_API_ std::vector<std::string> GetArgvs();\n\n#if GTEST_HAS_DEATH_TEST\n\nstd::vector<std::string> GetInjectableArgvs();\n// Deprecated: pass the args vector by value instead.\nvoid SetInjectableArgvs(const std::vector<std::string>* new_argvs);\nvoid SetInjectableArgvs(const std::vector<std::string>& new_argvs);\nvoid ClearInjectableArgvs();\n\n#endif  // GTEST_HAS_DEATH_TEST\n\n// Defines synchronization primitives.\n#if GTEST_IS_THREADSAFE\n\n#if GTEST_OS_WINDOWS\n// Provides leak-safe Windows kernel handle ownership.\n// Used in death tests and in threading support.\nclass GTEST_API_ AutoHandle {\n public:\n  // Assume that Win32 HANDLE type is equivalent to void*. Doing so allows us to\n  // avoid including <windows.h> in this header file. Including <windows.h> is\n  // undesirable because it defines a lot of symbols and macros that tend to\n  // conflict with client code. This assumption is verified by\n  // WindowsTypesTest.HANDLEIsVoidStar.\n  typedef void* Handle;\n  AutoHandle();\n  explicit AutoHandle(Handle handle);\n\n  ~AutoHandle();\n\n  Handle Get() const;\n  void Reset();\n  void Reset(Handle handle);\n\n private:\n  // Returns true if and only if the handle is a valid handle object that can be\n  // closed.\n  bool IsCloseable() const;\n\n  Handle handle_;\n\n  AutoHandle(const AutoHandle&) = delete;\n  AutoHandle& operator=(const AutoHandle&) = delete;\n};\n#endif\n\n#if GTEST_HAS_NOTIFICATION_\n// Notification has already been imported into the namespace.\n// Nothing to do here.\n\n#else\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \\\n/* class A needs to have dll-interface to be used by clients of class B */)\n\n// Allows a controller thread to pause execution of newly created\n// threads until notified.  Instances of this class must be created\n// and destroyed in the controller thread.\n//\n// This class is only for testing Google Test's own constructs. Do not\n// use it in user tests, either directly or indirectly.\n// TODO(b/203539622): Replace unconditionally with absl::Notification.\nclass GTEST_API_ Notification {\n public:\n  Notification() : notified_(false) {}\n  Notification(const Notification&) = delete;\n  Notification& operator=(const Notification&) = delete;\n\n  // Notifies all threads created with this notification to start. Must\n  // be called from the controller thread.\n  void Notify() {\n    std::lock_guard<std::mutex> lock(mu_);\n    notified_ = true;\n    cv_.notify_all();\n  }\n\n  // Blocks until the controller thread notifies. Must be called from a test\n  // thread.\n  void WaitForNotification() {\n    std::unique_lock<std::mutex> lock(mu_);\n    cv_.wait(lock, [this]() { return notified_; });\n  }\n\n private:\n  std::mutex mu_;\n  std::condition_variable cv_;\n  bool notified_;\n};\nGTEST_DISABLE_MSC_WARNINGS_POP_()  // 4251\n#endif  // GTEST_HAS_NOTIFICATION_\n\n// On MinGW, we can have both GTEST_OS_WINDOWS and GTEST_HAS_PTHREAD\n// defined, but we don't want to use MinGW's pthreads implementation, which\n// has conformance problems with some versions of the POSIX standard.\n#if GTEST_HAS_PTHREAD && !GTEST_OS_WINDOWS_MINGW\n\n// As a C-function, ThreadFuncWithCLinkage cannot be templated itself.\n// Consequently, it cannot select a correct instantiation of ThreadWithParam\n// in order to call its Run(). Introducing ThreadWithParamBase as a\n// non-templated base class for ThreadWithParam allows us to bypass this\n// problem.\nclass ThreadWithParamBase {\n public:\n  virtual ~ThreadWithParamBase() {}\n  virtual void Run() = 0;\n};\n\n// pthread_create() accepts a pointer to a function type with the C linkage.\n// According to the Standard (7.5/1), function types with different linkages\n// are different even if they are otherwise identical.  Some compilers (for\n// example, SunStudio) treat them as different types.  Since class methods\n// cannot be defined with C-linkage we need to define a free C-function to\n// pass into pthread_create().\nextern \"C\" inline void* ThreadFuncWithCLinkage(void* thread) {\n  static_cast<ThreadWithParamBase*>(thread)->Run();\n  return nullptr;\n}\n\n// Helper class for testing Google Test's multi-threading constructs.\n// To use it, write:\n//\n//   void ThreadFunc(int param) { /* Do things with param */ }\n//   Notification thread_can_start;\n//   ...\n//   // The thread_can_start parameter is optional; you can supply NULL.\n//   ThreadWithParam<int> thread(&ThreadFunc, 5, &thread_can_start);\n//   thread_can_start.Notify();\n//\n// These classes are only for testing Google Test's own constructs. Do\n// not use them in user tests, either directly or indirectly.\ntemplate <typename T>\nclass ThreadWithParam : public ThreadWithParamBase {\n public:\n  typedef void UserThreadFunc(T);\n\n  ThreadWithParam(UserThreadFunc* func, T param, Notification* thread_can_start)\n      : func_(func),\n        param_(param),\n        thread_can_start_(thread_can_start),\n        finished_(false) {\n    ThreadWithParamBase* const base = this;\n    // The thread can be created only after all fields except thread_\n    // have been initialized.\n    GTEST_CHECK_POSIX_SUCCESS_(\n        pthread_create(&thread_, nullptr, &ThreadFuncWithCLinkage, base));\n  }\n  ~ThreadWithParam() override { Join(); }\n\n  void Join() {\n    if (!finished_) {\n      GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, nullptr));\n      finished_ = true;\n    }\n  }\n\n  void Run() override {\n    if (thread_can_start_ != nullptr) thread_can_start_->WaitForNotification();\n    func_(param_);\n  }\n\n private:\n  UserThreadFunc* const func_;  // User-supplied thread function.\n  const T param_;  // User-supplied parameter to the thread function.\n  // When non-NULL, used to block execution until the controller thread\n  // notifies.\n  Notification* const thread_can_start_;\n  bool finished_;  // true if and only if we know that the thread function has\n                   // finished.\n  pthread_t thread_;  // The native thread object.\n\n  ThreadWithParam(const ThreadWithParam&) = delete;\n  ThreadWithParam& operator=(const ThreadWithParam&) = delete;\n};\n#endif  // !GTEST_OS_WINDOWS && GTEST_HAS_PTHREAD ||\n        // GTEST_HAS_MUTEX_AND_THREAD_LOCAL_\n\n#if GTEST_HAS_MUTEX_AND_THREAD_LOCAL_\n// Mutex and ThreadLocal have already been imported into the namespace.\n// Nothing to do here.\n\n#elif GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT\n\n// Mutex implements mutex on Windows platforms.  It is used in conjunction\n// with class MutexLock:\n//\n//   Mutex mutex;\n//   ...\n//   MutexLock lock(&mutex);  // Acquires the mutex and releases it at the\n//                            // end of the current scope.\n//\n// A static Mutex *must* be defined or declared using one of the following\n// macros:\n//   GTEST_DEFINE_STATIC_MUTEX_(g_some_mutex);\n//   GTEST_DECLARE_STATIC_MUTEX_(g_some_mutex);\n//\n// (A non-static Mutex is defined/declared in the usual way).\nclass GTEST_API_ Mutex {\n public:\n  enum MutexType { kStatic = 0, kDynamic = 1 };\n  // We rely on kStaticMutex being 0 as it is to what the linker initializes\n  // type_ in static mutexes.  critical_section_ will be initialized lazily\n  // in ThreadSafeLazyInit().\n  enum StaticConstructorSelector { kStaticMutex = 0 };\n\n  // This constructor intentionally does nothing.  It relies on type_ being\n  // statically initialized to 0 (effectively setting it to kStatic) and on\n  // ThreadSafeLazyInit() to lazily initialize the rest of the members.\n  explicit Mutex(StaticConstructorSelector /*dummy*/) {}\n\n  Mutex();\n  ~Mutex();\n\n  void Lock();\n\n  void Unlock();\n\n  // Does nothing if the current thread holds the mutex. Otherwise, crashes\n  // with high probability.\n  void AssertHeld();\n\n private:\n  // Initializes owner_thread_id_ and critical_section_ in static mutexes.\n  void ThreadSafeLazyInit();\n\n  // Per https://blogs.msdn.microsoft.com/oldnewthing/20040223-00/?p=40503,\n  // we assume that 0 is an invalid value for thread IDs.\n  unsigned int owner_thread_id_;\n\n  // For static mutexes, we rely on these members being initialized to zeros\n  // by the linker.\n  MutexType type_;\n  long critical_section_init_phase_;  // NOLINT\n  GTEST_CRITICAL_SECTION* critical_section_;\n\n  Mutex(const Mutex&) = delete;\n  Mutex& operator=(const Mutex&) = delete;\n};\n\n#define GTEST_DECLARE_STATIC_MUTEX_(mutex) \\\n  extern ::testing::internal::Mutex mutex\n\n#define GTEST_DEFINE_STATIC_MUTEX_(mutex) \\\n  ::testing::internal::Mutex mutex(::testing::internal::Mutex::kStaticMutex)\n\n// We cannot name this class MutexLock because the ctor declaration would\n// conflict with a macro named MutexLock, which is defined on some\n// platforms. That macro is used as a defensive measure to prevent against\n// inadvertent misuses of MutexLock like \"MutexLock(&mu)\" rather than\n// \"MutexLock l(&mu)\".  Hence the typedef trick below.\nclass GTestMutexLock {\n public:\n  explicit GTestMutexLock(Mutex* mutex) : mutex_(mutex) { mutex_->Lock(); }\n\n  ~GTestMutexLock() { mutex_->Unlock(); }\n\n private:\n  Mutex* const mutex_;\n\n  GTestMutexLock(const GTestMutexLock&) = delete;\n  GTestMutexLock& operator=(const GTestMutexLock&) = delete;\n};\n\ntypedef GTestMutexLock MutexLock;\n\n// Base class for ValueHolder<T>.  Allows a caller to hold and delete a value\n// without knowing its type.\nclass ThreadLocalValueHolderBase {\n public:\n  virtual ~ThreadLocalValueHolderBase() {}\n};\n\n// Provides a way for a thread to send notifications to a ThreadLocal\n// regardless of its parameter type.\nclass ThreadLocalBase {\n public:\n  // Creates a new ValueHolder<T> object holding a default value passed to\n  // this ThreadLocal<T>'s constructor and returns it.  It is the caller's\n  // responsibility not to call this when the ThreadLocal<T> instance already\n  // has a value on the current thread.\n  virtual ThreadLocalValueHolderBase* NewValueForCurrentThread() const = 0;\n\n protected:\n  ThreadLocalBase() {}\n  virtual ~ThreadLocalBase() {}\n\n private:\n  ThreadLocalBase(const ThreadLocalBase&) = delete;\n  ThreadLocalBase& operator=(const ThreadLocalBase&) = delete;\n};\n\n// Maps a thread to a set of ThreadLocals that have values instantiated on that\n// thread and notifies them when the thread exits.  A ThreadLocal instance is\n// expected to persist until all threads it has values on have terminated.\nclass GTEST_API_ ThreadLocalRegistry {\n public:\n  // Registers thread_local_instance as having value on the current thread.\n  // Returns a value that can be used to identify the thread from other threads.\n  static ThreadLocalValueHolderBase* GetValueOnCurrentThread(\n      const ThreadLocalBase* thread_local_instance);\n\n  // Invoked when a ThreadLocal instance is destroyed.\n  static void OnThreadLocalDestroyed(\n      const ThreadLocalBase* thread_local_instance);\n};\n\nclass GTEST_API_ ThreadWithParamBase {\n public:\n  void Join();\n\n protected:\n  class Runnable {\n   public:\n    virtual ~Runnable() {}\n    virtual void Run() = 0;\n  };\n\n  ThreadWithParamBase(Runnable* runnable, Notification* thread_can_start);\n  virtual ~ThreadWithParamBase();\n\n private:\n  AutoHandle thread_;\n};\n\n// Helper class for testing Google Test's multi-threading constructs.\ntemplate <typename T>\nclass ThreadWithParam : public ThreadWithParamBase {\n public:\n  typedef void UserThreadFunc(T);\n\n  ThreadWithParam(UserThreadFunc* func, T param, Notification* thread_can_start)\n      : ThreadWithParamBase(new RunnableImpl(func, param), thread_can_start) {}\n  virtual ~ThreadWithParam() {}\n\n private:\n  class RunnableImpl : public Runnable {\n   public:\n    RunnableImpl(UserThreadFunc* func, T param) : func_(func), param_(param) {}\n    virtual ~RunnableImpl() {}\n    virtual void Run() { func_(param_); }\n\n   private:\n    UserThreadFunc* const func_;\n    const T param_;\n\n    RunnableImpl(const RunnableImpl&) = delete;\n    RunnableImpl& operator=(const RunnableImpl&) = delete;\n  };\n\n  ThreadWithParam(const ThreadWithParam&) = delete;\n  ThreadWithParam& operator=(const ThreadWithParam&) = delete;\n};\n\n// Implements thread-local storage on Windows systems.\n//\n//   // Thread 1\n//   ThreadLocal<int> tl(100);  // 100 is the default value for each thread.\n//\n//   // Thread 2\n//   tl.set(150);  // Changes the value for thread 2 only.\n//   EXPECT_EQ(150, tl.get());\n//\n//   // Thread 1\n//   EXPECT_EQ(100, tl.get());  // In thread 1, tl has the original value.\n//   tl.set(200);\n//   EXPECT_EQ(200, tl.get());\n//\n// The template type argument T must have a public copy constructor.\n// In addition, the default ThreadLocal constructor requires T to have\n// a public default constructor.\n//\n// The users of a TheadLocal instance have to make sure that all but one\n// threads (including the main one) using that instance have exited before\n// destroying it. Otherwise, the per-thread objects managed for them by the\n// ThreadLocal instance are not guaranteed to be destroyed on all platforms.\n//\n// Google Test only uses global ThreadLocal objects.  That means they\n// will die after main() has returned.  Therefore, no per-thread\n// object managed by Google Test will be leaked as long as all threads\n// using Google Test have exited when main() returns.\ntemplate <typename T>\nclass ThreadLocal : public ThreadLocalBase {\n public:\n  ThreadLocal() : default_factory_(new DefaultValueHolderFactory()) {}\n  explicit ThreadLocal(const T& value)\n      : default_factory_(new InstanceValueHolderFactory(value)) {}\n\n  ~ThreadLocal() override { ThreadLocalRegistry::OnThreadLocalDestroyed(this); }\n\n  T* pointer() { return GetOrCreateValue(); }\n  const T* pointer() const { return GetOrCreateValue(); }\n  const T& get() const { return *pointer(); }\n  void set(const T& value) { *pointer() = value; }\n\n private:\n  // Holds a value of T.  Can be deleted via its base class without the caller\n  // knowing the type of T.\n  class ValueHolder : public ThreadLocalValueHolderBase {\n   public:\n    ValueHolder() : value_() {}\n    explicit ValueHolder(const T& value) : value_(value) {}\n\n    T* pointer() { return &value_; }\n\n   private:\n    T value_;\n    ValueHolder(const ValueHolder&) = delete;\n    ValueHolder& operator=(const ValueHolder&) = delete;\n  };\n\n  T* GetOrCreateValue() const {\n    return static_cast<ValueHolder*>(\n               ThreadLocalRegistry::GetValueOnCurrentThread(this))\n        ->pointer();\n  }\n\n  ThreadLocalValueHolderBase* NewValueForCurrentThread() const override {\n    return default_factory_->MakeNewHolder();\n  }\n\n  class ValueHolderFactory {\n   public:\n    ValueHolderFactory() {}\n    virtual ~ValueHolderFactory() {}\n    virtual ValueHolder* MakeNewHolder() const = 0;\n\n   private:\n    ValueHolderFactory(const ValueHolderFactory&) = delete;\n    ValueHolderFactory& operator=(const ValueHolderFactory&) = delete;\n  };\n\n  class DefaultValueHolderFactory : public ValueHolderFactory {\n   public:\n    DefaultValueHolderFactory() {}\n    ValueHolder* MakeNewHolder() const override { return new ValueHolder(); }\n\n   private:\n    DefaultValueHolderFactory(const DefaultValueHolderFactory&) = delete;\n    DefaultValueHolderFactory& operator=(const DefaultValueHolderFactory&) =\n        delete;\n  };\n\n  class InstanceValueHolderFactory : public ValueHolderFactory {\n   public:\n    explicit InstanceValueHolderFactory(const T& value) : value_(value) {}\n    ValueHolder* MakeNewHolder() const override {\n      return new ValueHolder(value_);\n    }\n\n   private:\n    const T value_;  // The value for each thread.\n\n    InstanceValueHolderFactory(const InstanceValueHolderFactory&) = delete;\n    InstanceValueHolderFactory& operator=(const InstanceValueHolderFactory&) =\n        delete;\n  };\n\n  std::unique_ptr<ValueHolderFactory> default_factory_;\n\n  ThreadLocal(const ThreadLocal&) = delete;\n  ThreadLocal& operator=(const ThreadLocal&) = delete;\n};\n\n#elif GTEST_HAS_PTHREAD\n\n// MutexBase and Mutex implement mutex on pthreads-based platforms.\nclass MutexBase {\n public:\n  // Acquires this mutex.\n  void Lock() {\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_));\n    owner_ = pthread_self();\n    has_owner_ = true;\n  }\n\n  // Releases this mutex.\n  void Unlock() {\n    // Since the lock is being released the owner_ field should no longer be\n    // considered valid. We don't protect writing to has_owner_ here, as it's\n    // the caller's responsibility to ensure that the current thread holds the\n    // mutex when this is called.\n    has_owner_ = false;\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_));\n  }\n\n  // Does nothing if the current thread holds the mutex. Otherwise, crashes\n  // with high probability.\n  void AssertHeld() const {\n    GTEST_CHECK_(has_owner_ && pthread_equal(owner_, pthread_self()))\n        << \"The current thread is not holding the mutex @\" << this;\n  }\n\n  // A static mutex may be used before main() is entered.  It may even\n  // be used before the dynamic initialization stage.  Therefore we\n  // must be able to initialize a static mutex object at link time.\n  // This means MutexBase has to be a POD and its member variables\n  // have to be public.\n public:\n  pthread_mutex_t mutex_;  // The underlying pthread mutex.\n  // has_owner_ indicates whether the owner_ field below contains a valid thread\n  // ID and is therefore safe to inspect (e.g., to use in pthread_equal()). All\n  // accesses to the owner_ field should be protected by a check of this field.\n  // An alternative might be to memset() owner_ to all zeros, but there's no\n  // guarantee that a zero'd pthread_t is necessarily invalid or even different\n  // from pthread_self().\n  bool has_owner_;\n  pthread_t owner_;  // The thread holding the mutex.\n};\n\n// Forward-declares a static mutex.\n#define GTEST_DECLARE_STATIC_MUTEX_(mutex) \\\n  extern ::testing::internal::MutexBase mutex\n\n// Defines and statically (i.e. at link time) initializes a static mutex.\n// The initialization list here does not explicitly initialize each field,\n// instead relying on default initialization for the unspecified fields. In\n// particular, the owner_ field (a pthread_t) is not explicitly initialized.\n// This allows initialization to work whether pthread_t is a scalar or struct.\n// The flag -Wmissing-field-initializers must not be specified for this to work.\n#define GTEST_DEFINE_STATIC_MUTEX_(mutex) \\\n  ::testing::internal::MutexBase mutex = {PTHREAD_MUTEX_INITIALIZER, false, 0}\n\n// The Mutex class can only be used for mutexes created at runtime. It\n// shares its API with MutexBase otherwise.\nclass Mutex : public MutexBase {\n public:\n  Mutex() {\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, nullptr));\n    has_owner_ = false;\n  }\n  ~Mutex() { GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_)); }\n\n private:\n  Mutex(const Mutex&) = delete;\n  Mutex& operator=(const Mutex&) = delete;\n};\n\n// We cannot name this class MutexLock because the ctor declaration would\n// conflict with a macro named MutexLock, which is defined on some\n// platforms. That macro is used as a defensive measure to prevent against\n// inadvertent misuses of MutexLock like \"MutexLock(&mu)\" rather than\n// \"MutexLock l(&mu)\".  Hence the typedef trick below.\nclass GTestMutexLock {\n public:\n  explicit GTestMutexLock(MutexBase* mutex) : mutex_(mutex) { mutex_->Lock(); }\n\n  ~GTestMutexLock() { mutex_->Unlock(); }\n\n private:\n  MutexBase* const mutex_;\n\n  GTestMutexLock(const GTestMutexLock&) = delete;\n  GTestMutexLock& operator=(const GTestMutexLock&) = delete;\n};\n\ntypedef GTestMutexLock MutexLock;\n\n// Helpers for ThreadLocal.\n\n// pthread_key_create() requires DeleteThreadLocalValue() to have\n// C-linkage.  Therefore it cannot be templatized to access\n// ThreadLocal<T>.  Hence the need for class\n// ThreadLocalValueHolderBase.\nclass ThreadLocalValueHolderBase {\n public:\n  virtual ~ThreadLocalValueHolderBase() {}\n};\n\n// Called by pthread to delete thread-local data stored by\n// pthread_setspecific().\nextern \"C\" inline void DeleteThreadLocalValue(void* value_holder) {\n  delete static_cast<ThreadLocalValueHolderBase*>(value_holder);\n}\n\n// Implements thread-local storage on pthreads-based systems.\ntemplate <typename T>\nclass GTEST_API_ ThreadLocal {\n public:\n  ThreadLocal()\n      : key_(CreateKey()), default_factory_(new DefaultValueHolderFactory()) {}\n  explicit ThreadLocal(const T& value)\n      : key_(CreateKey()),\n        default_factory_(new InstanceValueHolderFactory(value)) {}\n\n  ~ThreadLocal() {\n    // Destroys the managed object for the current thread, if any.\n    DeleteThreadLocalValue(pthread_getspecific(key_));\n\n    // Releases resources associated with the key.  This will *not*\n    // delete managed objects for other threads.\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_));\n  }\n\n  T* pointer() { return GetOrCreateValue(); }\n  const T* pointer() const { return GetOrCreateValue(); }\n  const T& get() const { return *pointer(); }\n  void set(const T& value) { *pointer() = value; }\n\n private:\n  // Holds a value of type T.\n  class ValueHolder : public ThreadLocalValueHolderBase {\n   public:\n    ValueHolder() : value_() {}\n    explicit ValueHolder(const T& value) : value_(value) {}\n\n    T* pointer() { return &value_; }\n\n   private:\n    T value_;\n    ValueHolder(const ValueHolder&) = delete;\n    ValueHolder& operator=(const ValueHolder&) = delete;\n  };\n\n  static pthread_key_t CreateKey() {\n    pthread_key_t key;\n    // When a thread exits, DeleteThreadLocalValue() will be called on\n    // the object managed for that thread.\n    GTEST_CHECK_POSIX_SUCCESS_(\n        pthread_key_create(&key, &DeleteThreadLocalValue));\n    return key;\n  }\n\n  T* GetOrCreateValue() const {\n    ThreadLocalValueHolderBase* const holder =\n        static_cast<ThreadLocalValueHolderBase*>(pthread_getspecific(key_));\n    if (holder != nullptr) {\n      return CheckedDowncastToActualType<ValueHolder>(holder)->pointer();\n    }\n\n    ValueHolder* const new_holder = default_factory_->MakeNewHolder();\n    ThreadLocalValueHolderBase* const holder_base = new_holder;\n    GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base));\n    return new_holder->pointer();\n  }\n\n  class ValueHolderFactory {\n   public:\n    ValueHolderFactory() {}\n    virtual ~ValueHolderFactory() {}\n    virtual ValueHolder* MakeNewHolder() const = 0;\n\n   private:\n    ValueHolderFactory(const ValueHolderFactory&) = delete;\n    ValueHolderFactory& operator=(const ValueHolderFactory&) = delete;\n  };\n\n  class DefaultValueHolderFactory : public ValueHolderFactory {\n   public:\n    DefaultValueHolderFactory() {}\n    ValueHolder* MakeNewHolder() const override { return new ValueHolder(); }\n\n   private:\n    DefaultValueHolderFactory(const DefaultValueHolderFactory&) = delete;\n    DefaultValueHolderFactory& operator=(const DefaultValueHolderFactory&) =\n        delete;\n  };\n\n  class InstanceValueHolderFactory : public ValueHolderFactory {\n   public:\n    explicit InstanceValueHolderFactory(const T& value) : value_(value) {}\n    ValueHolder* MakeNewHolder() const override {\n      return new ValueHolder(value_);\n    }\n\n   private:\n    const T value_;  // The value for each thread.\n\n    InstanceValueHolderFactory(const InstanceValueHolderFactory&) = delete;\n    InstanceValueHolderFactory& operator=(const InstanceValueHolderFactory&) =\n        delete;\n  };\n\n  // A key pthreads uses for looking up per-thread values.\n  const pthread_key_t key_;\n  std::unique_ptr<ValueHolderFactory> default_factory_;\n\n  ThreadLocal(const ThreadLocal&) = delete;\n  ThreadLocal& operator=(const ThreadLocal&) = delete;\n};\n\n#endif  // GTEST_HAS_MUTEX_AND_THREAD_LOCAL_\n\n#else  // GTEST_IS_THREADSAFE\n\n// A dummy implementation of synchronization primitives (mutex, lock,\n// and thread-local variable).  Necessary for compiling Google Test where\n// mutex is not supported - using Google Test in multiple threads is not\n// supported on such platforms.\n\nclass Mutex {\n public:\n  Mutex() {}\n  void Lock() {}\n  void Unlock() {}\n  void AssertHeld() const {}\n};\n\n#define GTEST_DECLARE_STATIC_MUTEX_(mutex) \\\n  extern ::testing::internal::Mutex mutex\n\n#define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex\n\n// We cannot name this class MutexLock because the ctor declaration would\n// conflict with a macro named MutexLock, which is defined on some\n// platforms. That macro is used as a defensive measure to prevent against\n// inadvertent misuses of MutexLock like \"MutexLock(&mu)\" rather than\n// \"MutexLock l(&mu)\".  Hence the typedef trick below.\nclass GTestMutexLock {\n public:\n  explicit GTestMutexLock(Mutex*) {}  // NOLINT\n};\n\ntypedef GTestMutexLock MutexLock;\n\ntemplate <typename T>\nclass GTEST_API_ ThreadLocal {\n public:\n  ThreadLocal() : value_() {}\n  explicit ThreadLocal(const T& value) : value_(value) {}\n  T* pointer() { return &value_; }\n  const T* pointer() const { return &value_; }\n  const T& get() const { return value_; }\n  void set(const T& value) { value_ = value; }\n\n private:\n  T value_;\n};\n\n#endif  // GTEST_IS_THREADSAFE\n\n// Returns the number of threads running in the process, or 0 to indicate that\n// we cannot detect it.\nGTEST_API_ size_t GetThreadCount();\n\n#if GTEST_OS_WINDOWS\n#define GTEST_PATH_SEP_ \"\\\\\"\n#define GTEST_HAS_ALT_PATH_SEP_ 1\n#else\n#define GTEST_PATH_SEP_ \"/\"\n#define GTEST_HAS_ALT_PATH_SEP_ 0\n#endif  // GTEST_OS_WINDOWS\n\n// Utilities for char.\n\n// isspace(int ch) and friends accept an unsigned char or EOF.  char\n// may be signed, depending on the compiler (or compiler flags).\n// Therefore we need to cast a char to unsigned char before calling\n// isspace(), etc.\n\ninline bool IsAlpha(char ch) {\n  return isalpha(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsAlNum(char ch) {\n  return isalnum(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsDigit(char ch) {\n  return isdigit(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsLower(char ch) {\n  return islower(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsSpace(char ch) {\n  return isspace(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsUpper(char ch) {\n  return isupper(static_cast<unsigned char>(ch)) != 0;\n}\ninline bool IsXDigit(char ch) {\n  return isxdigit(static_cast<unsigned char>(ch)) != 0;\n}\n#ifdef __cpp_char8_t\ninline bool IsXDigit(char8_t ch) {\n  return isxdigit(static_cast<unsigned char>(ch)) != 0;\n}\n#endif\ninline bool IsXDigit(char16_t ch) {\n  const unsigned char low_byte = static_cast<unsigned char>(ch);\n  return ch == low_byte && isxdigit(low_byte) != 0;\n}\ninline bool IsXDigit(char32_t ch) {\n  const unsigned char low_byte = static_cast<unsigned char>(ch);\n  return ch == low_byte && isxdigit(low_byte) != 0;\n}\ninline bool IsXDigit(wchar_t ch) {\n  const unsigned char low_byte = static_cast<unsigned char>(ch);\n  return ch == low_byte && isxdigit(low_byte) != 0;\n}\n\ninline char ToLower(char ch) {\n  return static_cast<char>(tolower(static_cast<unsigned char>(ch)));\n}\ninline char ToUpper(char ch) {\n  return static_cast<char>(toupper(static_cast<unsigned char>(ch)));\n}\n\ninline std::string StripTrailingSpaces(std::string str) {\n  std::string::iterator it = str.end();\n  while (it != str.begin() && IsSpace(*--it)) it = str.erase(it);\n  return str;\n}\n\n// The testing::internal::posix namespace holds wrappers for common\n// POSIX functions.  These wrappers hide the differences between\n// Windows/MSVC and POSIX systems.  Since some compilers define these\n// standard functions as macros, the wrapper cannot have the same name\n// as the wrapped function.\n\nnamespace posix {\n\n// Functions with a different name on Windows.\n\n#if GTEST_OS_WINDOWS\n\ntypedef struct _stat StatStruct;\n\n#ifdef __BORLANDC__\ninline int DoIsATTY(int fd) { return isatty(fd); }\ninline int StrCaseCmp(const char* s1, const char* s2) {\n  return stricmp(s1, s2);\n}\ninline char* StrDup(const char* src) { return strdup(src); }\n#else  // !__BORLANDC__\n#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_ZOS || GTEST_OS_IOS || \\\n    GTEST_OS_WINDOWS_PHONE || GTEST_OS_WINDOWS_RT || defined(ESP_PLATFORM)\ninline int DoIsATTY(int /* fd */) { return 0; }\n#else\ninline int DoIsATTY(int fd) { return _isatty(fd); }\n#endif  // GTEST_OS_WINDOWS_MOBILE\ninline int StrCaseCmp(const char* s1, const char* s2) {\n  return _stricmp(s1, s2);\n}\ninline char* StrDup(const char* src) { return _strdup(src); }\n#endif  // __BORLANDC__\n\n#if GTEST_OS_WINDOWS_MOBILE\ninline int FileNo(FILE* file) { return reinterpret_cast<int>(_fileno(file)); }\n// Stat(), RmDir(), and IsDir() are not needed on Windows CE at this\n// time and thus not defined there.\n#else\ninline int FileNo(FILE* file) { return _fileno(file); }\ninline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); }\ninline int RmDir(const char* dir) { return _rmdir(dir); }\ninline bool IsDir(const StatStruct& st) { return (_S_IFDIR & st.st_mode) != 0; }\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n#elif GTEST_OS_ESP8266\ntypedef struct stat StatStruct;\n\ninline int FileNo(FILE* file) { return fileno(file); }\ninline int DoIsATTY(int fd) { return isatty(fd); }\ninline int Stat(const char* path, StatStruct* buf) {\n  // stat function not implemented on ESP8266\n  return 0;\n}\ninline int StrCaseCmp(const char* s1, const char* s2) {\n  return strcasecmp(s1, s2);\n}\ninline char* StrDup(const char* src) { return strdup(src); }\ninline int RmDir(const char* dir) { return rmdir(dir); }\ninline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); }\n\n#else\n\ntypedef struct stat StatStruct;\n\ninline int FileNo(FILE* file) { return fileno(file); }\ninline int DoIsATTY(int fd) { return isatty(fd); }\ninline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); }\ninline int StrCaseCmp(const char* s1, const char* s2) {\n  return strcasecmp(s1, s2);\n}\ninline char* StrDup(const char* src) { return strdup(src); }\ninline int RmDir(const char* dir) { return rmdir(dir); }\ninline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); }\n\n#endif  // GTEST_OS_WINDOWS\n\ninline int IsATTY(int fd) {\n  // DoIsATTY might change errno (for example ENOTTY in case you redirect stdout\n  // to a file on Linux), which is unexpected, so save the previous value, and\n  // restore it after the call.\n  int savedErrno = errno;\n  int isAttyValue = DoIsATTY(fd);\n  errno = savedErrno;\n\n  return isAttyValue;\n}\n\n// Functions deprecated by MSVC 8.0.\n\nGTEST_DISABLE_MSC_DEPRECATED_PUSH_()\n\n// ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and\n// StrError() aren't needed on Windows CE at this time and thus not\n// defined there.\n\n#if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && \\\n    !GTEST_OS_WINDOWS_RT && !GTEST_OS_ESP8266 && !GTEST_OS_XTENSA\ninline int ChDir(const char* dir) { return chdir(dir); }\n#endif\ninline FILE* FOpen(const char* path, const char* mode) {\n#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW\n  struct wchar_codecvt : public std::codecvt<wchar_t, char, std::mbstate_t> {};\n  std::wstring_convert<wchar_codecvt> converter;\n  std::wstring wide_path = converter.from_bytes(path);\n  std::wstring wide_mode = converter.from_bytes(mode);\n  return _wfopen(wide_path.c_str(), wide_mode.c_str());\n#else   // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW\n  return fopen(path, mode);\n#endif  // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW\n}\n#if !GTEST_OS_WINDOWS_MOBILE\ninline FILE* FReopen(const char* path, const char* mode, FILE* stream) {\n  return freopen(path, mode, stream);\n}\ninline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); }\n#endif\ninline int FClose(FILE* fp) { return fclose(fp); }\n#if !GTEST_OS_WINDOWS_MOBILE\ninline int Read(int fd, void* buf, unsigned int count) {\n  return static_cast<int>(read(fd, buf, count));\n}\ninline int Write(int fd, const void* buf, unsigned int count) {\n  return static_cast<int>(write(fd, buf, count));\n}\ninline int Close(int fd) { return close(fd); }\ninline const char* StrError(int errnum) { return strerror(errnum); }\n#endif\ninline const char* GetEnv(const char* name) {\n#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE || \\\n    GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266 || GTEST_OS_XTENSA\n  // We are on an embedded platform, which has no environment variables.\n  static_cast<void>(name);  // To prevent 'unused argument' warning.\n  return nullptr;\n#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)\n  // Environment variables which we programmatically clear will be set to the\n  // empty string rather than unset (NULL).  Handle that case.\n  const char* const env = getenv(name);\n  return (env != nullptr && env[0] != '\\0') ? env : nullptr;\n#else\n  return getenv(name);\n#endif\n}\n\nGTEST_DISABLE_MSC_DEPRECATED_POP_()\n\n#if GTEST_OS_WINDOWS_MOBILE\n// Windows CE has no C library. The abort() function is used in\n// several places in Google Test. This implementation provides a reasonable\n// imitation of standard behaviour.\n[[noreturn]] void Abort();\n#else\n[[noreturn]] inline void Abort() { abort(); }\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n}  // namespace posix\n\n// MSVC \"deprecates\" snprintf and issues warnings wherever it is used.  In\n// order to avoid these warnings, we need to use _snprintf or _snprintf_s on\n// MSVC-based platforms.  We map the GTEST_SNPRINTF_ macro to the appropriate\n// function in order to achieve that.  We use macro definition here because\n// snprintf is a variadic function.\n#if _MSC_VER && !GTEST_OS_WINDOWS_MOBILE\n// MSVC 2005 and above support variadic macros.\n#define GTEST_SNPRINTF_(buffer, size, format, ...) \\\n  _snprintf_s(buffer, size, size, format, __VA_ARGS__)\n#elif defined(_MSC_VER)\n// Windows CE does not define _snprintf_s\n#define GTEST_SNPRINTF_ _snprintf\n#else\n#define GTEST_SNPRINTF_ snprintf\n#endif\n\n// The biggest signed integer type the compiler supports.\n//\n// long long is guaranteed to be at least 64-bits in C++11.\nusing BiggestInt = long long;  // NOLINT\n\n// The maximum number a BiggestInt can represent.\nconstexpr BiggestInt kMaxBiggestInt = (std::numeric_limits<BiggestInt>::max)();\n\n// This template class serves as a compile-time function from size to\n// type.  It maps a size in bytes to a primitive type with that\n// size. e.g.\n//\n//   TypeWithSize<4>::UInt\n//\n// is typedef-ed to be unsigned int (unsigned integer made up of 4\n// bytes).\n//\n// Such functionality should belong to STL, but I cannot find it\n// there.\n//\n// Google Test uses this class in the implementation of floating-point\n// comparison.\n//\n// For now it only handles UInt (unsigned int) as that's all Google Test\n// needs.  Other types can be easily added in the future if need\n// arises.\ntemplate <size_t size>\nclass TypeWithSize {\n public:\n  // This prevents the user from using TypeWithSize<N> with incorrect\n  // values of N.\n  using UInt = void;\n};\n\n// The specialization for size 4.\ntemplate <>\nclass TypeWithSize<4> {\n public:\n  using Int = std::int32_t;\n  using UInt = std::uint32_t;\n};\n\n// The specialization for size 8.\ntemplate <>\nclass TypeWithSize<8> {\n public:\n  using Int = std::int64_t;\n  using UInt = std::uint64_t;\n};\n\n// Integer types of known sizes.\nusing TimeInMillis = int64_t;  // Represents time in milliseconds.\n\n// Utilities for command line flags and environment variables.\n\n// Macro for referencing flags.\n#if !defined(GTEST_FLAG)\n#define GTEST_FLAG_NAME_(name) gtest_##name\n#define GTEST_FLAG(name) FLAGS_gtest_##name\n#endif  // !defined(GTEST_FLAG)\n\n// Pick a command line flags implementation.\n#if GTEST_HAS_ABSL\n\n// Macros for defining flags.\n#define GTEST_DEFINE_bool_(name, default_val, doc) \\\n  ABSL_FLAG(bool, GTEST_FLAG_NAME_(name), default_val, doc)\n#define GTEST_DEFINE_int32_(name, default_val, doc) \\\n  ABSL_FLAG(int32_t, GTEST_FLAG_NAME_(name), default_val, doc)\n#define GTEST_DEFINE_string_(name, default_val, doc) \\\n  ABSL_FLAG(std::string, GTEST_FLAG_NAME_(name), default_val, doc)\n\n// Macros for declaring flags.\n#define GTEST_DECLARE_bool_(name) \\\n  ABSL_DECLARE_FLAG(bool, GTEST_FLAG_NAME_(name))\n#define GTEST_DECLARE_int32_(name) \\\n  ABSL_DECLARE_FLAG(int32_t, GTEST_FLAG_NAME_(name))\n#define GTEST_DECLARE_string_(name) \\\n  ABSL_DECLARE_FLAG(std::string, GTEST_FLAG_NAME_(name))\n\n#define GTEST_FLAG_SAVER_ ::absl::FlagSaver\n\n#define GTEST_FLAG_GET(name) ::absl::GetFlag(GTEST_FLAG(name))\n#define GTEST_FLAG_SET(name, value) \\\n  (void)(::absl::SetFlag(&GTEST_FLAG(name), value))\n#define GTEST_USE_OWN_FLAGFILE_FLAG_ 0\n\n#else  // GTEST_HAS_ABSL\n\n// Macros for defining flags.\n#define GTEST_DEFINE_bool_(name, default_val, doc)  \\\n  namespace testing {                               \\\n  GTEST_API_ bool GTEST_FLAG(name) = (default_val); \\\n  }                                                 \\\n  static_assert(true, \"no-op to require trailing semicolon\")\n#define GTEST_DEFINE_int32_(name, default_val, doc)         \\\n  namespace testing {                                       \\\n  GTEST_API_ std::int32_t GTEST_FLAG(name) = (default_val); \\\n  }                                                         \\\n  static_assert(true, \"no-op to require trailing semicolon\")\n#define GTEST_DEFINE_string_(name, default_val, doc)         \\\n  namespace testing {                                        \\\n  GTEST_API_ ::std::string GTEST_FLAG(name) = (default_val); \\\n  }                                                          \\\n  static_assert(true, \"no-op to require trailing semicolon\")\n\n// Macros for declaring flags.\n#define GTEST_DECLARE_bool_(name)          \\\n  namespace testing {                      \\\n  GTEST_API_ extern bool GTEST_FLAG(name); \\\n  }                                        \\\n  static_assert(true, \"no-op to require trailing semicolon\")\n#define GTEST_DECLARE_int32_(name)                 \\\n  namespace testing {                              \\\n  GTEST_API_ extern std::int32_t GTEST_FLAG(name); \\\n  }                                                \\\n  static_assert(true, \"no-op to require trailing semicolon\")\n#define GTEST_DECLARE_string_(name)                 \\\n  namespace testing {                               \\\n  GTEST_API_ extern ::std::string GTEST_FLAG(name); \\\n  }                                                 \\\n  static_assert(true, \"no-op to require trailing semicolon\")\n\n#define GTEST_FLAG_SAVER_ ::testing::internal::GTestFlagSaver\n\n#define GTEST_FLAG_GET(name) ::testing::GTEST_FLAG(name)\n#define GTEST_FLAG_SET(name, value) (void)(::testing::GTEST_FLAG(name) = value)\n#define GTEST_USE_OWN_FLAGFILE_FLAG_ 1\n\n#endif  // GTEST_HAS_ABSL\n\n// Thread annotations\n#if !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_)\n#define GTEST_EXCLUSIVE_LOCK_REQUIRED_(locks)\n#define GTEST_LOCK_EXCLUDED_(locks)\n#endif  // !defined(GTEST_EXCLUSIVE_LOCK_REQUIRED_)\n\n// Parses 'str' for a 32-bit signed integer.  If successful, writes the result\n// to *value and returns true; otherwise leaves *value unchanged and returns\n// false.\nGTEST_API_ bool ParseInt32(const Message& src_text, const char* str,\n                           int32_t* value);\n\n// Parses a bool/int32_t/string from the environment variable\n// corresponding to the given Google Test flag.\nbool BoolFromGTestEnv(const char* flag, bool default_val);\nGTEST_API_ int32_t Int32FromGTestEnv(const char* flag, int32_t default_val);\nstd::string OutputFlagAlsoCheckEnvVar();\nconst char* StringFromGTestEnv(const char* flag, const char* default_val);\n\n}  // namespace internal\n}  // namespace testing\n\n#if !defined(GTEST_INTERNAL_DEPRECATED)\n\n// Internal Macro to mark an API deprecated, for googletest usage only\n// Usage: class GTEST_INTERNAL_DEPRECATED(message) MyClass or\n// GTEST_INTERNAL_DEPRECATED(message) <return_type> myFunction(); Every usage of\n// a deprecated entity will trigger a warning when compiled with\n// `-Wdeprecated-declarations` option (clang, gcc, any __GNUC__ compiler).\n// For msvc /W3 option will need to be used\n// Note that for 'other' compilers this macro evaluates to nothing to prevent\n// compilations errors.\n#if defined(_MSC_VER)\n#define GTEST_INTERNAL_DEPRECATED(message) __declspec(deprecated(message))\n#elif defined(__GNUC__)\n#define GTEST_INTERNAL_DEPRECATED(message) __attribute__((deprecated(message)))\n#else\n#define GTEST_INTERNAL_DEPRECATED(message)\n#endif\n\n#endif  // !defined(GTEST_INTERNAL_DEPRECATED)\n\n#if GTEST_HAS_ABSL\n// Always use absl::any for UniversalPrinter<> specializations if googletest\n// is built with absl support.\n#define GTEST_INTERNAL_HAS_ANY 1\n#include \"absl/types/any.h\"\nnamespace testing {\nnamespace internal {\nusing Any = ::absl::any;\n}  // namespace internal\n}  // namespace testing\n#else\n#ifdef __has_include\n#if __has_include(<any>) && __cplusplus >= 201703L\n// Otherwise for C++17 and higher use std::any for UniversalPrinter<>\n// specializations.\n#define GTEST_INTERNAL_HAS_ANY 1\n#include <any>\nnamespace testing {\nnamespace internal {\nusing Any = ::std::any;\n}  // namespace internal\n}  // namespace testing\n// The case where absl is configured NOT to alias std::any is not\n// supported.\n#endif  // __has_include(<any>) && __cplusplus >= 201703L\n#endif  // __has_include\n#endif  // GTEST_HAS_ABSL\n\n#if GTEST_HAS_ABSL\n// Always use absl::optional for UniversalPrinter<> specializations if\n// googletest is built with absl support.\n#define GTEST_INTERNAL_HAS_OPTIONAL 1\n#include \"absl/types/optional.h\"\nnamespace testing {\nnamespace internal {\ntemplate <typename T>\nusing Optional = ::absl::optional<T>;\ninline ::absl::nullopt_t Nullopt() { return ::absl::nullopt; }\n}  // namespace internal\n}  // namespace testing\n#else\n#ifdef __has_include\n#if __has_include(<optional>) && __cplusplus >= 201703L\n// Otherwise for C++17 and higher use std::optional for UniversalPrinter<>\n// specializations.\n#define GTEST_INTERNAL_HAS_OPTIONAL 1\n#include <optional>\nnamespace testing {\nnamespace internal {\ntemplate <typename T>\nusing Optional = ::std::optional<T>;\ninline ::std::nullopt_t Nullopt() { return ::std::nullopt; }\n}  // namespace internal\n}  // namespace testing\n// The case where absl is configured NOT to alias std::optional is not\n// supported.\n#endif  // __has_include(<optional>) && __cplusplus >= 201703L\n#endif  // __has_include\n#endif  // GTEST_HAS_ABSL\n\n#if GTEST_HAS_ABSL\n// Always use absl::string_view for Matcher<> specializations if googletest\n// is built with absl support.\n#define GTEST_INTERNAL_HAS_STRING_VIEW 1\n#include \"absl/strings/string_view.h\"\nnamespace testing {\nnamespace internal {\nusing StringView = ::absl::string_view;\n}  // namespace internal\n}  // namespace testing\n#else\n#ifdef __has_include\n#if __has_include(<string_view>) && __cplusplus >= 201703L\n// Otherwise for C++17 and higher use std::string_view for Matcher<>\n// specializations.\n#define GTEST_INTERNAL_HAS_STRING_VIEW 1\n#include <string_view>\nnamespace testing {\nnamespace internal {\nusing StringView = ::std::string_view;\n}  // namespace internal\n}  // namespace testing\n// The case where absl is configured NOT to alias std::string_view is not\n// supported.\n#endif  // __has_include(<string_view>) && __cplusplus >= 201703L\n#endif  // __has_include\n#endif  // GTEST_HAS_ABSL\n\n#if GTEST_HAS_ABSL\n// Always use absl::variant for UniversalPrinter<> specializations if googletest\n// is built with absl support.\n#define GTEST_INTERNAL_HAS_VARIANT 1\n#include \"absl/types/variant.h\"\nnamespace testing {\nnamespace internal {\ntemplate <typename... T>\nusing Variant = ::absl::variant<T...>;\n}  // namespace internal\n}  // namespace testing\n#else\n#ifdef __has_include\n#if __has_include(<variant>) && __cplusplus >= 201703L\n// Otherwise for C++17 and higher use std::variant for UniversalPrinter<>\n// specializations.\n#define GTEST_INTERNAL_HAS_VARIANT 1\n#include <variant>\nnamespace testing {\nnamespace internal {\ntemplate <typename... T>\nusing Variant = ::std::variant<T...>;\n}  // namespace internal\n}  // namespace testing\n// The case where absl is configured NOT to alias std::variant is not supported.\n#endif  // __has_include(<variant>) && __cplusplus >= 201703L\n#endif  // __has_include\n#endif  // GTEST_HAS_ABSL\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/gtest-string.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// The Google C++ Testing and Mocking Framework (Google Test)\n//\n// This header file declares the String class and functions used internally by\n// Google Test.  They are subject to change without notice. They should not used\n// by code external to Google Test.\n//\n// This header file is #included by gtest-internal.h.\n// It should not be #included by other files.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_\n#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_\n\n#ifdef __BORLANDC__\n// string.h is not guaranteed to provide strcpy on C++ Builder.\n#include <mem.h>\n#endif\n\n#include <string.h>\n\n#include <cstdint>\n#include <string>\n\n#include \"gtest/internal/gtest-port.h\"\n\nnamespace testing {\nnamespace internal {\n\n// String - an abstract class holding static string utilities.\nclass GTEST_API_ String {\n public:\n  // Static utility methods\n\n  // Clones a 0-terminated C string, allocating memory using new.  The\n  // caller is responsible for deleting the return value using\n  // delete[].  Returns the cloned string, or NULL if the input is\n  // NULL.\n  //\n  // This is different from strdup() in string.h, which allocates\n  // memory using malloc().\n  static const char* CloneCString(const char* c_str);\n\n#if GTEST_OS_WINDOWS_MOBILE\n  // Windows CE does not have the 'ANSI' versions of Win32 APIs. To be\n  // able to pass strings to Win32 APIs on CE we need to convert them\n  // to 'Unicode', UTF-16.\n\n  // Creates a UTF-16 wide string from the given ANSI string, allocating\n  // memory using new. The caller is responsible for deleting the return\n  // value using delete[]. Returns the wide string, or NULL if the\n  // input is NULL.\n  //\n  // The wide string is created using the ANSI codepage (CP_ACP) to\n  // match the behaviour of the ANSI versions of Win32 calls and the\n  // C runtime.\n  static LPCWSTR AnsiToUtf16(const char* c_str);\n\n  // Creates an ANSI string from the given wide string, allocating\n  // memory using new. The caller is responsible for deleting the return\n  // value using delete[]. Returns the ANSI string, or NULL if the\n  // input is NULL.\n  //\n  // The returned string is created using the ANSI codepage (CP_ACP) to\n  // match the behaviour of the ANSI versions of Win32 calls and the\n  // C runtime.\n  static const char* Utf16ToAnsi(LPCWSTR utf16_str);\n#endif\n\n  // Compares two C strings.  Returns true if and only if they have the same\n  // content.\n  //\n  // Unlike strcmp(), this function can handle NULL argument(s).  A\n  // NULL C string is considered different to any non-NULL C string,\n  // including the empty string.\n  static bool CStringEquals(const char* lhs, const char* rhs);\n\n  // Converts a wide C string to a String using the UTF-8 encoding.\n  // NULL will be converted to \"(null)\".  If an error occurred during\n  // the conversion, \"(failed to convert from wide string)\" is\n  // returned.\n  static std::string ShowWideCString(const wchar_t* wide_c_str);\n\n  // Compares two wide C strings.  Returns true if and only if they have the\n  // same content.\n  //\n  // Unlike wcscmp(), this function can handle NULL argument(s).  A\n  // NULL C string is considered different to any non-NULL C string,\n  // including the empty string.\n  static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs);\n\n  // Compares two C strings, ignoring case.  Returns true if and only if\n  // they have the same content.\n  //\n  // Unlike strcasecmp(), this function can handle NULL argument(s).\n  // A NULL C string is considered different to any non-NULL C string,\n  // including the empty string.\n  static bool CaseInsensitiveCStringEquals(const char* lhs, const char* rhs);\n\n  // Compares two wide C strings, ignoring case.  Returns true if and only if\n  // they have the same content.\n  //\n  // Unlike wcscasecmp(), this function can handle NULL argument(s).\n  // A NULL C string is considered different to any non-NULL wide C string,\n  // including the empty string.\n  // NB: The implementations on different platforms slightly differ.\n  // On windows, this method uses _wcsicmp which compares according to LC_CTYPE\n  // environment variable. On GNU platform this method uses wcscasecmp\n  // which compares according to LC_CTYPE category of the current locale.\n  // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the\n  // current locale.\n  static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs,\n                                               const wchar_t* rhs);\n\n  // Returns true if and only if the given string ends with the given suffix,\n  // ignoring case. Any string is considered to end with an empty suffix.\n  static bool EndsWithCaseInsensitive(const std::string& str,\n                                      const std::string& suffix);\n\n  // Formats an int value as \"%02d\".\n  static std::string FormatIntWidth2(int value);  // \"%02d\" for width == 2\n\n  // Formats an int value to given width with leading zeros.\n  static std::string FormatIntWidthN(int value, int width);\n\n  // Formats an int value as \"%X\".\n  static std::string FormatHexInt(int value);\n\n  // Formats an int value as \"%X\".\n  static std::string FormatHexUInt32(uint32_t value);\n\n  // Formats a byte as \"%02X\".\n  static std::string FormatByte(unsigned char value);\n\n private:\n  String();  // Not meant to be instantiated.\n};           // class String\n\n// Gets the content of the stringstream's buffer as an std::string.  Each '\\0'\n// character in the buffer is replaced with \"\\\\0\".\nGTEST_API_ std::string StringStreamToString(::std::stringstream* stream);\n\n}  // namespace internal\n}  // namespace testing\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/gtest-tuple.h",
    "content": "// This file was GENERATED by command:\n//     pump.py gtest-tuple.h.pump\n// DO NOT EDIT BY HAND!!!\n\n// Copyright 2009 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n// Implements a subset of TR1 tuple needed by Google Test and Google Mock.\n\n// GOOGLETEST_CM0001 DO NOT DELETE\n\n#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_\n#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_\n\n#include <utility>  // For ::std::pair.\n\n// The compiler used in Symbian has a bug that prevents us from declaring the\n// tuple template as a friend (it complains that tuple is redefined).  This\n// bypasses the bug by declaring the members that should otherwise be\n// private as public.\n// Sun Studio versions < 12 also have the above bug.\n#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)\n# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:\n#else\n# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \\\n    template <GTEST_10_TYPENAMES_(U)> friend class tuple; \\\n   private:\n#endif\n\n// Visual Studio 2010, 2012, and 2013 define symbols in std::tr1 that conflict\n// with our own definitions. Therefore using our own tuple does not work on\n// those compilers.\n#if defined(_MSC_VER) && _MSC_VER >= 1600  /* 1600 is Visual Studio 2010 */\n# error \"gtest's tuple doesn't compile on Visual Studio 2010 or later. \\\nGTEST_USE_OWN_TR1_TUPLE must be set to 0 on those compilers.\"\n#endif\n\n// GTEST_n_TUPLE_(T) is the type of an n-tuple.\n#define GTEST_0_TUPLE_(T) tuple<>\n#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \\\n    void, void, void>\n#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \\\n    void, void, void>\n#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \\\n    void, void, void>\n#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \\\n    void, void, void>\n#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \\\n    void, void, void>\n#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \\\n    void, void, void>\n#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \\\n    void, void, void>\n#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \\\n    T##7, void, void>\n#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \\\n    T##7, T##8, void>\n#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \\\n    T##7, T##8, T##9>\n\n// GTEST_n_TYPENAMES_(T) declares a list of n typenames.\n#define GTEST_0_TYPENAMES_(T)\n#define GTEST_1_TYPENAMES_(T) typename T##0\n#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1\n#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2\n#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3\n#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4\n#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4, typename T##5\n#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4, typename T##5, typename T##6\n#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4, typename T##5, typename T##6, typename T##7\n#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4, typename T##5, typename T##6, \\\n    typename T##7, typename T##8\n#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \\\n    typename T##3, typename T##4, typename T##5, typename T##6, \\\n    typename T##7, typename T##8, typename T##9\n\n// In theory, defining stuff in the ::std namespace is undefined\n// behavior.  We can do this as we are playing the role of a standard\n// library vendor.\nnamespace std {\nnamespace tr1 {\n\ntemplate <typename T0 = void, typename T1 = void, typename T2 = void,\n    typename T3 = void, typename T4 = void, typename T5 = void,\n    typename T6 = void, typename T7 = void, typename T8 = void,\n    typename T9 = void>\nclass tuple;\n\n// Anything in namespace gtest_internal is Google Test's INTERNAL\n// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.\nnamespace gtest_internal {\n\n// ByRef<T>::type is T if T is a reference; otherwise it's const T&.\ntemplate <typename T>\nstruct ByRef { typedef const T& type; };  // NOLINT\ntemplate <typename T>\nstruct ByRef<T&> { typedef T& type; };  // NOLINT\n\n// A handy wrapper for ByRef.\n#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type\n\n// AddRef<T>::type is T if T is a reference; otherwise it's T&.  This\n// is the same as tr1::add_reference<T>::type.\ntemplate <typename T>\nstruct AddRef { typedef T& type; };  // NOLINT\ntemplate <typename T>\nstruct AddRef<T&> { typedef T& type; };  // NOLINT\n\n// A handy wrapper for AddRef.\n#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type\n\n// A helper for implementing get<k>().\ntemplate <int k> class Get;\n\n// A helper for implementing tuple_element<k, T>.  kIndexValid is true\n// iff k < the number of fields in tuple type T.\ntemplate <bool kIndexValid, int kIndex, class Tuple>\nstruct TupleElement;\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 0, GTEST_10_TUPLE_(T) > {\n  typedef T0 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 1, GTEST_10_TUPLE_(T) > {\n  typedef T1 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 2, GTEST_10_TUPLE_(T) > {\n  typedef T2 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 3, GTEST_10_TUPLE_(T) > {\n  typedef T3 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 4, GTEST_10_TUPLE_(T) > {\n  typedef T4 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 5, GTEST_10_TUPLE_(T) > {\n  typedef T5 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 6, GTEST_10_TUPLE_(T) > {\n  typedef T6 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 7, GTEST_10_TUPLE_(T) > {\n  typedef T7 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 8, GTEST_10_TUPLE_(T) > {\n  typedef T8 type;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct TupleElement<true, 9, GTEST_10_TUPLE_(T) > {\n  typedef T9 type;\n};\n\n}  // namespace gtest_internal\n\ntemplate <>\nclass tuple<> {\n public:\n  tuple() {}\n  tuple(const tuple& /* t */)  {}\n  tuple& operator=(const tuple& /* t */) { return *this; }\n};\n\ntemplate <GTEST_1_TYPENAMES_(T)>\nclass GTEST_1_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {}\n\n  tuple(const tuple& t) : f0_(t.f0_) {}\n\n  template <GTEST_1_TYPENAMES_(U)>\n  tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_1_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_1_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_1_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    return *this;\n  }\n\n  T0 f0_;\n};\n\ntemplate <GTEST_2_TYPENAMES_(T)>\nclass GTEST_2_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0),\n      f1_(f1) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {}\n\n  template <GTEST_2_TYPENAMES_(U)>\n  tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {}\n  template <typename U0, typename U1>\n  tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_2_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_2_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n  template <typename U0, typename U1>\n  tuple& operator=(const ::std::pair<U0, U1>& p) {\n    f0_ = p.first;\n    f1_ = p.second;\n    return *this;\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_2_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n};\n\ntemplate <GTEST_3_TYPENAMES_(T)>\nclass GTEST_3_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}\n\n  template <GTEST_3_TYPENAMES_(U)>\n  tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_3_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_3_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_3_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n};\n\ntemplate <GTEST_4_TYPENAMES_(T)>\nclass GTEST_4_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2),\n      f3_(f3) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {}\n\n  template <GTEST_4_TYPENAMES_(U)>\n  tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_4_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_4_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_4_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n};\n\ntemplate <GTEST_5_TYPENAMES_(T)>\nclass GTEST_5_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3,\n      GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_) {}\n\n  template <GTEST_5_TYPENAMES_(U)>\n  tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_5_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_5_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_5_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n};\n\ntemplate <GTEST_6_TYPENAMES_(T)>\nclass GTEST_6_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,\n      GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),\n      f5_(f5) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_), f5_(t.f5_) {}\n\n  template <GTEST_6_TYPENAMES_(U)>\n  tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_6_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_6_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_6_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    f5_ = t.f5_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n  T5 f5_;\n};\n\ntemplate <GTEST_7_TYPENAMES_(T)>\nclass GTEST_7_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,\n      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2),\n      f3_(f3), f4_(f4), f5_(f5), f6_(f6) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}\n\n  template <GTEST_7_TYPENAMES_(U)>\n  tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_7_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_7_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_7_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    f5_ = t.f5_;\n    f6_ = t.f6_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n  T5 f5_;\n  T6 f6_;\n};\n\ntemplate <GTEST_8_TYPENAMES_(T)>\nclass GTEST_8_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,\n      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6,\n      GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),\n      f5_(f5), f6_(f6), f7_(f7) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}\n\n  template <GTEST_8_TYPENAMES_(U)>\n  tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_8_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_8_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_8_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    f5_ = t.f5_;\n    f6_ = t.f6_;\n    f7_ = t.f7_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n  T5 f5_;\n  T6 f6_;\n  T7 f7_;\n};\n\ntemplate <GTEST_9_TYPENAMES_(T)>\nclass GTEST_9_TUPLE_(T) {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,\n      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,\n      GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),\n      f5_(f5), f6_(f6), f7_(f7), f8_(f8) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}\n\n  template <GTEST_9_TYPENAMES_(U)>\n  tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_9_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_9_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_9_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    f5_ = t.f5_;\n    f6_ = t.f6_;\n    f7_ = t.f7_;\n    f8_ = t.f8_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n  T5 f5_;\n  T6 f6_;\n  T7 f7_;\n  T8 f8_;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nclass tuple {\n public:\n  template <int k> friend class gtest_internal::Get;\n\n  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),\n      f9_() {}\n\n  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,\n      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,\n      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,\n      GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2),\n      f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {}\n\n  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),\n      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}\n\n  template <GTEST_10_TYPENAMES_(U)>\n  tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),\n      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),\n      f9_(t.f9_) {}\n\n  tuple& operator=(const tuple& t) { return CopyFrom(t); }\n\n  template <GTEST_10_TYPENAMES_(U)>\n  tuple& operator=(const GTEST_10_TUPLE_(U)& t) {\n    return CopyFrom(t);\n  }\n\n  GTEST_DECLARE_TUPLE_AS_FRIEND_\n\n  template <GTEST_10_TYPENAMES_(U)>\n  tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) {\n    f0_ = t.f0_;\n    f1_ = t.f1_;\n    f2_ = t.f2_;\n    f3_ = t.f3_;\n    f4_ = t.f4_;\n    f5_ = t.f5_;\n    f6_ = t.f6_;\n    f7_ = t.f7_;\n    f8_ = t.f8_;\n    f9_ = t.f9_;\n    return *this;\n  }\n\n  T0 f0_;\n  T1 f1_;\n  T2 f2_;\n  T3 f3_;\n  T4 f4_;\n  T5 f5_;\n  T6 f6_;\n  T7 f7_;\n  T8 f8_;\n  T9 f9_;\n};\n\n// 6.1.3.2 Tuple creation functions.\n\n// Known limitations: we don't support passing an\n// std::tr1::reference_wrapper<T> to make_tuple().  And we don't\n// implement tie().\n\ninline tuple<> make_tuple() { return tuple<>(); }\n\ntemplate <GTEST_1_TYPENAMES_(T)>\ninline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) {\n  return GTEST_1_TUPLE_(T)(f0);\n}\n\ntemplate <GTEST_2_TYPENAMES_(T)>\ninline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) {\n  return GTEST_2_TUPLE_(T)(f0, f1);\n}\n\ntemplate <GTEST_3_TYPENAMES_(T)>\ninline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) {\n  return GTEST_3_TUPLE_(T)(f0, f1, f2);\n}\n\ntemplate <GTEST_4_TYPENAMES_(T)>\ninline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3) {\n  return GTEST_4_TUPLE_(T)(f0, f1, f2, f3);\n}\n\ntemplate <GTEST_5_TYPENAMES_(T)>\ninline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4) {\n  return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4);\n}\n\ntemplate <GTEST_6_TYPENAMES_(T)>\ninline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4, const T5& f5) {\n  return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5);\n}\n\ntemplate <GTEST_7_TYPENAMES_(T)>\ninline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4, const T5& f5, const T6& f6) {\n  return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6);\n}\n\ntemplate <GTEST_8_TYPENAMES_(T)>\ninline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) {\n  return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7);\n}\n\ntemplate <GTEST_9_TYPENAMES_(T)>\ninline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,\n    const T8& f8) {\n  return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8);\n}\n\ntemplate <GTEST_10_TYPENAMES_(T)>\ninline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,\n    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,\n    const T8& f8, const T9& f9) {\n  return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);\n}\n\n// 6.1.3.3 Tuple helper classes.\n\ntemplate <typename Tuple> struct tuple_size;\n\ntemplate <GTEST_0_TYPENAMES_(T)>\nstruct tuple_size<GTEST_0_TUPLE_(T) > {\n  static const int value = 0;\n};\n\ntemplate <GTEST_1_TYPENAMES_(T)>\nstruct tuple_size<GTEST_1_TUPLE_(T) > {\n  static const int value = 1;\n};\n\ntemplate <GTEST_2_TYPENAMES_(T)>\nstruct tuple_size<GTEST_2_TUPLE_(T) > {\n  static const int value = 2;\n};\n\ntemplate <GTEST_3_TYPENAMES_(T)>\nstruct tuple_size<GTEST_3_TUPLE_(T) > {\n  static const int value = 3;\n};\n\ntemplate <GTEST_4_TYPENAMES_(T)>\nstruct tuple_size<GTEST_4_TUPLE_(T) > {\n  static const int value = 4;\n};\n\ntemplate <GTEST_5_TYPENAMES_(T)>\nstruct tuple_size<GTEST_5_TUPLE_(T) > {\n  static const int value = 5;\n};\n\ntemplate <GTEST_6_TYPENAMES_(T)>\nstruct tuple_size<GTEST_6_TUPLE_(T) > {\n  static const int value = 6;\n};\n\ntemplate <GTEST_7_TYPENAMES_(T)>\nstruct tuple_size<GTEST_7_TUPLE_(T) > {\n  static const int value = 7;\n};\n\ntemplate <GTEST_8_TYPENAMES_(T)>\nstruct tuple_size<GTEST_8_TUPLE_(T) > {\n  static const int value = 8;\n};\n\ntemplate <GTEST_9_TYPENAMES_(T)>\nstruct tuple_size<GTEST_9_TUPLE_(T) > {\n  static const int value = 9;\n};\n\ntemplate <GTEST_10_TYPENAMES_(T)>\nstruct tuple_size<GTEST_10_TUPLE_(T) > {\n  static const int value = 10;\n};\n\ntemplate <int k, class Tuple>\nstruct tuple_element {\n  typedef typename gtest_internal::TupleElement<\n      k < (tuple_size<Tuple>::value), k, Tuple>::type type;\n};\n\n#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type\n\n// 6.1.3.4 Element access.\n\nnamespace gtest_internal {\n\ntemplate <>\nclass Get<0> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))\n  Field(Tuple& t) { return t.f0_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))\n  ConstField(const Tuple& t) { return t.f0_; }\n};\n\ntemplate <>\nclass Get<1> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))\n  Field(Tuple& t) { return t.f1_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))\n  ConstField(const Tuple& t) { return t.f1_; }\n};\n\ntemplate <>\nclass Get<2> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))\n  Field(Tuple& t) { return t.f2_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))\n  ConstField(const Tuple& t) { return t.f2_; }\n};\n\ntemplate <>\nclass Get<3> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))\n  Field(Tuple& t) { return t.f3_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))\n  ConstField(const Tuple& t) { return t.f3_; }\n};\n\ntemplate <>\nclass Get<4> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))\n  Field(Tuple& t) { return t.f4_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))\n  ConstField(const Tuple& t) { return t.f4_; }\n};\n\ntemplate <>\nclass Get<5> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))\n  Field(Tuple& t) { return t.f5_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))\n  ConstField(const Tuple& t) { return t.f5_; }\n};\n\ntemplate <>\nclass Get<6> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))\n  Field(Tuple& t) { return t.f6_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))\n  ConstField(const Tuple& t) { return t.f6_; }\n};\n\ntemplate <>\nclass Get<7> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))\n  Field(Tuple& t) { return t.f7_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))\n  ConstField(const Tuple& t) { return t.f7_; }\n};\n\ntemplate <>\nclass Get<8> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))\n  Field(Tuple& t) { return t.f8_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))\n  ConstField(const Tuple& t) { return t.f8_; }\n};\n\ntemplate <>\nclass Get<9> {\n public:\n  template <class Tuple>\n  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))\n  Field(Tuple& t) { return t.f9_; }  // NOLINT\n\n  template <class Tuple>\n  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))\n  ConstField(const Tuple& t) { return t.f9_; }\n};\n\n}  // namespace gtest_internal\n\ntemplate <int k, GTEST_10_TYPENAMES_(T)>\nGTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))\nget(GTEST_10_TUPLE_(T)& t) {\n  return gtest_internal::Get<k>::Field(t);\n}\n\ntemplate <int k, GTEST_10_TYPENAMES_(T)>\nGTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k,  GTEST_10_TUPLE_(T)))\nget(const GTEST_10_TUPLE_(T)& t) {\n  return gtest_internal::Get<k>::ConstField(t);\n}\n\n// 6.1.3.5 Relational operators\n\n// We only implement == and !=, as we don't have a need for the rest yet.\n\nnamespace gtest_internal {\n\n// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the\n// first k fields of t1 equals the first k fields of t2.\n// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if\n// k1 != k2.\ntemplate <int kSize1, int kSize2>\nstruct SameSizeTuplePrefixComparator;\n\ntemplate <>\nstruct SameSizeTuplePrefixComparator<0, 0> {\n  template <class Tuple1, class Tuple2>\n  static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {\n    return true;\n  }\n};\n\ntemplate <int k>\nstruct SameSizeTuplePrefixComparator<k, k> {\n  template <class Tuple1, class Tuple2>\n  static bool Eq(const Tuple1& t1, const Tuple2& t2) {\n    return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&\n        ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);\n  }\n};\n\n}  // namespace gtest_internal\n\ntemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>\ninline bool operator==(const GTEST_10_TUPLE_(T)& t,\n                       const GTEST_10_TUPLE_(U)& u) {\n  return gtest_internal::SameSizeTuplePrefixComparator<\n      tuple_size<GTEST_10_TUPLE_(T) >::value,\n      tuple_size<GTEST_10_TUPLE_(U) >::value>::Eq(t, u);\n}\n\ntemplate <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>\ninline bool operator!=(const GTEST_10_TUPLE_(T)& t,\n                       const GTEST_10_TUPLE_(U)& u) { return !(t == u); }\n\n// 6.1.4 Pairs.\n// Unimplemented.\n\n}  // namespace tr1\n}  // namespace std\n\n#undef GTEST_0_TUPLE_\n#undef GTEST_1_TUPLE_\n#undef GTEST_2_TUPLE_\n#undef GTEST_3_TUPLE_\n#undef GTEST_4_TUPLE_\n#undef GTEST_5_TUPLE_\n#undef GTEST_6_TUPLE_\n#undef GTEST_7_TUPLE_\n#undef GTEST_8_TUPLE_\n#undef GTEST_9_TUPLE_\n#undef GTEST_10_TUPLE_\n\n#undef GTEST_0_TYPENAMES_\n#undef GTEST_1_TYPENAMES_\n#undef GTEST_2_TYPENAMES_\n#undef GTEST_3_TYPENAMES_\n#undef GTEST_4_TYPENAMES_\n#undef GTEST_5_TYPENAMES_\n#undef GTEST_6_TYPENAMES_\n#undef GTEST_7_TYPENAMES_\n#undef GTEST_8_TYPENAMES_\n#undef GTEST_9_TYPENAMES_\n#undef GTEST_10_TYPENAMES_\n\n#undef GTEST_DECLARE_TUPLE_AS_FRIEND_\n#undef GTEST_BY_REF_\n#undef GTEST_ADD_REF_\n#undef GTEST_TUPLE_ELEMENT_\n\n#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_\n"
  },
  {
    "path": "tests/gtest/include/gtest/internal/gtest-type-util.h",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Type utilities needed for implementing typed and type-parameterized\n// tests.\n\n// IWYU pragma: private, include \"gtest/gtest.h\"\n// IWYU pragma: friend gtest/.*\n// IWYU pragma: friend gmock/.*\n\n#ifndef GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_\n#define GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_\n\n#include \"gtest/internal/gtest-port.h\"\n\n// #ifdef __GNUC__ is too general here.  It is possible to use gcc without using\n// libstdc++ (which is where cxxabi.h comes from).\n#if GTEST_HAS_CXXABI_H_\n#include <cxxabi.h>\n#elif defined(__HP_aCC)\n#include <acxx_demangle.h>\n#endif  // GTEST_HASH_CXXABI_H_\n\nnamespace testing {\nnamespace internal {\n\n// Canonicalizes a given name with respect to the Standard C++ Library.\n// This handles removing the inline namespace within `std` that is\n// used by various standard libraries (e.g., `std::__1`).  Names outside\n// of namespace std are returned unmodified.\ninline std::string CanonicalizeForStdLibVersioning(std::string s) {\n  static const char prefix[] = \"std::__\";\n  if (s.compare(0, strlen(prefix), prefix) == 0) {\n    std::string::size_type end = s.find(\"::\", strlen(prefix));\n    if (end != s.npos) {\n      // Erase everything between the initial `std` and the second `::`.\n      s.erase(strlen(\"std\"), end - strlen(\"std\"));\n    }\n  }\n  return s;\n}\n\n#if GTEST_HAS_RTTI\n// GetTypeName(const std::type_info&) returns a human-readable name of type T.\ninline std::string GetTypeName(const std::type_info& type) {\n  const char* const name = type.name();\n#if GTEST_HAS_CXXABI_H_ || defined(__HP_aCC)\n  int status = 0;\n  // gcc's implementation of typeid(T).name() mangles the type name,\n  // so we have to demangle it.\n#if GTEST_HAS_CXXABI_H_\n  using abi::__cxa_demangle;\n#endif  // GTEST_HAS_CXXABI_H_\n  char* const readable_name = __cxa_demangle(name, nullptr, nullptr, &status);\n  const std::string name_str(status == 0 ? readable_name : name);\n  free(readable_name);\n  return CanonicalizeForStdLibVersioning(name_str);\n#else\n  return name;\n#endif  // GTEST_HAS_CXXABI_H_ || __HP_aCC\n}\n#endif  // GTEST_HAS_RTTI\n\n// GetTypeName<T>() returns a human-readable name of type T if and only if\n// RTTI is enabled, otherwise it returns a dummy type name.\n// NB: This function is also used in Google Mock, so don't move it inside of\n// the typed-test-only section below.\ntemplate <typename T>\nstd::string GetTypeName() {\n#if GTEST_HAS_RTTI\n  return GetTypeName(typeid(T));\n#else\n  return \"<type>\";\n#endif  // GTEST_HAS_RTTI\n}\n\n// A unique type indicating an empty node\nstruct None {};\n\n#define GTEST_TEMPLATE_ \\\n  template <typename T> \\\n  class\n\n// The template \"selector\" struct TemplateSel<Tmpl> is used to\n// represent Tmpl, which must be a class template with one type\n// parameter, as a type.  TemplateSel<Tmpl>::Bind<T>::type is defined\n// as the type Tmpl<T>.  This allows us to actually instantiate the\n// template \"selected\" by TemplateSel<Tmpl>.\n//\n// This trick is necessary for simulating typedef for class templates,\n// which C++ doesn't support directly.\ntemplate <GTEST_TEMPLATE_ Tmpl>\nstruct TemplateSel {\n  template <typename T>\n  struct Bind {\n    typedef Tmpl<T> type;\n  };\n};\n\n#define GTEST_BIND_(TmplSel, T) TmplSel::template Bind<T>::type\n\ntemplate <GTEST_TEMPLATE_ Head_, GTEST_TEMPLATE_... Tail_>\nstruct Templates {\n  using Head = TemplateSel<Head_>;\n  using Tail = Templates<Tail_...>;\n};\n\ntemplate <GTEST_TEMPLATE_ Head_>\nstruct Templates<Head_> {\n  using Head = TemplateSel<Head_>;\n  using Tail = None;\n};\n\n// Tuple-like type lists\ntemplate <typename Head_, typename... Tail_>\nstruct Types {\n  using Head = Head_;\n  using Tail = Types<Tail_...>;\n};\n\ntemplate <typename Head_>\nstruct Types<Head_> {\n  using Head = Head_;\n  using Tail = None;\n};\n\n// Helper metafunctions to tell apart a single type from types\n// generated by ::testing::Types\ntemplate <typename... Ts>\nstruct ProxyTypeList {\n  using type = Types<Ts...>;\n};\n\ntemplate <typename>\nstruct is_proxy_type_list : std::false_type {};\n\ntemplate <typename... Ts>\nstruct is_proxy_type_list<ProxyTypeList<Ts...>> : std::true_type {};\n\n// Generator which conditionally creates type lists.\n// It recognizes if a requested type list should be created\n// and prevents creating a new type list nested within another one.\ntemplate <typename T>\nstruct GenerateTypeList {\n private:\n  using proxy = typename std::conditional<is_proxy_type_list<T>::value, T,\n                                          ProxyTypeList<T>>::type;\n\n public:\n  using type = typename proxy::type;\n};\n\n}  // namespace internal\n\ntemplate <typename... Ts>\nusing Types = internal::ProxyTypeList<Ts...>;\n\n}  // namespace testing\n\n#endif  // GOOGLETEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_\n"
  },
  {
    "path": "tests/gtest/src/gtest-all.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n//\n// Google C++ Testing and Mocking Framework (Google Test)\n//\n// Sometimes it's desirable to build Google Test by compiling a single file.\n// This file serves this purpose.\n\n// This line ensures that gtest.h can be compiled on its own, even\n// when it's fused.\n#include \"gtest/gtest.h\"\n\n// The following lines pull in the real gtest *.cc files.\n#include \"src/gtest-assertion-result.cc\"\n#include \"src/gtest-death-test.cc\"\n#include \"src/gtest-filepath.cc\"\n#include \"src/gtest-matchers.cc\"\n#include \"src/gtest-port.cc\"\n#include \"src/gtest-printers.cc\"\n#include \"src/gtest-test-part.cc\"\n#include \"src/gtest-typed-test.cc\"\n#include \"src/gtest.cc\"\n"
  },
  {
    "path": "tests/gtest/src/gtest-assertion-result.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// The Google C++ Testing and Mocking Framework (Google Test)\n//\n// This file defines the AssertionResult type.\n\n#include \"gtest/gtest-assertion-result.h\"\n\n#include <string>\n#include <utility>\n\n#include \"gtest/gtest-message.h\"\n\nnamespace testing {\n\n// AssertionResult constructors.\n// Used in EXPECT_TRUE/FALSE(assertion_result).\nAssertionResult::AssertionResult(const AssertionResult& other)\n    : success_(other.success_),\n      message_(other.message_.get() != nullptr\n                   ? new ::std::string(*other.message_)\n                   : static_cast< ::std::string*>(nullptr)) {}\n\n// Swaps two AssertionResults.\nvoid AssertionResult::swap(AssertionResult& other) {\n  using std::swap;\n  swap(success_, other.success_);\n  swap(message_, other.message_);\n}\n\n// Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE.\nAssertionResult AssertionResult::operator!() const {\n  AssertionResult negation(!success_);\n  if (message_.get() != nullptr) negation << *message_;\n  return negation;\n}\n\n// Makes a successful assertion result.\nAssertionResult AssertionSuccess() { return AssertionResult(true); }\n\n// Makes a failed assertion result.\nAssertionResult AssertionFailure() { return AssertionResult(false); }\n\n// Makes a failed assertion result with the given failure message.\n// Deprecated; use AssertionFailure() << message.\nAssertionResult AssertionFailure(const Message& message) {\n  return AssertionFailure() << message;\n}\n\n}  // namespace testing\n"
  },
  {
    "path": "tests/gtest/src/gtest-death-test.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n//\n// This file implements death tests.\n\n#include \"gtest/gtest-death-test.h\"\n\n#include <functional>\n#include <utility>\n\n#include \"gtest/internal/custom/gtest.h\"\n#include \"gtest/internal/gtest-port.h\"\n\n#if GTEST_HAS_DEATH_TEST\n\n#if GTEST_OS_MAC\n#include <crt_externs.h>\n#endif  // GTEST_OS_MAC\n\n#include <errno.h>\n#include <fcntl.h>\n#include <limits.h>\n\n#if GTEST_OS_LINUX\n#include <signal.h>\n#endif  // GTEST_OS_LINUX\n\n#include <stdarg.h>\n\n#if GTEST_OS_WINDOWS\n#include <windows.h>\n#else\n#include <sys/mman.h>\n#include <sys/wait.h>\n#endif  // GTEST_OS_WINDOWS\n\n#if GTEST_OS_QNX\n#include <spawn.h>\n#endif  // GTEST_OS_QNX\n\n#if GTEST_OS_FUCHSIA\n#include <lib/fdio/fd.h>\n#include <lib/fdio/io.h>\n#include <lib/fdio/spawn.h>\n#include <lib/zx/channel.h>\n#include <lib/zx/port.h>\n#include <lib/zx/process.h>\n#include <lib/zx/socket.h>\n#include <zircon/processargs.h>\n#include <zircon/syscalls.h>\n#include <zircon/syscalls/policy.h>\n#include <zircon/syscalls/port.h>\n#endif  // GTEST_OS_FUCHSIA\n\n#endif  // GTEST_HAS_DEATH_TEST\n\n#include \"gtest/gtest-message.h\"\n#include \"gtest/internal/gtest-string.h\"\n#include \"src/gtest-internal-inl.h\"\n\nnamespace testing {\n\n// Constants.\n\n// The default death test style.\n//\n// This is defined in internal/gtest-port.h as \"fast\", but can be overridden by\n// a definition in internal/custom/gtest-port.h. The recommended value, which is\n// used internally at Google, is \"threadsafe\".\nstatic const char kDefaultDeathTestStyle[] = GTEST_DEFAULT_DEATH_TEST_STYLE;\n\n}  // namespace testing\n\nGTEST_DEFINE_string_(\n    death_test_style,\n    testing::internal::StringFromGTestEnv(\"death_test_style\",\n                                          testing::kDefaultDeathTestStyle),\n    \"Indicates how to run a death test in a forked child process: \"\n    \"\\\"threadsafe\\\" (child process re-executes the test binary \"\n    \"from the beginning, running only the specific death test) or \"\n    \"\\\"fast\\\" (child process runs the death test immediately \"\n    \"after forking).\");\n\nGTEST_DEFINE_bool_(\n    death_test_use_fork,\n    testing::internal::BoolFromGTestEnv(\"death_test_use_fork\", false),\n    \"Instructs to use fork()/_exit() instead of clone() in death tests. \"\n    \"Ignored and always uses fork() on POSIX systems where clone() is not \"\n    \"implemented. Useful when running under valgrind or similar tools if \"\n    \"those do not support clone(). Valgrind 3.3.1 will just fail if \"\n    \"it sees an unsupported combination of clone() flags. \"\n    \"It is not recommended to use this flag w/o valgrind though it will \"\n    \"work in 99% of the cases. Once valgrind is fixed, this flag will \"\n    \"most likely be removed.\");\n\nGTEST_DEFINE_string_(\n    internal_run_death_test, \"\",\n    \"Indicates the file, line number, temporal index of \"\n    \"the single death test to run, and a file descriptor to \"\n    \"which a success code may be sent, all separated by \"\n    \"the '|' characters.  This flag is specified if and only if the \"\n    \"current process is a sub-process launched for running a thread-safe \"\n    \"death test.  FOR INTERNAL USE ONLY.\");\n\nnamespace testing {\n\n#if GTEST_HAS_DEATH_TEST\n\nnamespace internal {\n\n// Valid only for fast death tests. Indicates the code is running in the\n// child process of a fast style death test.\n#if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA\nstatic bool g_in_fast_death_test_child = false;\n#endif\n\n// Returns a Boolean value indicating whether the caller is currently\n// executing in the context of the death test child process.  Tools such as\n// Valgrind heap checkers may need this to modify their behavior in death\n// tests.  IMPORTANT: This is an internal utility.  Using it may break the\n// implementation of death tests.  User code MUST NOT use it.\nbool InDeathTestChild() {\n#if GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA\n\n  // On Windows and Fuchsia, death tests are thread-safe regardless of the value\n  // of the death_test_style flag.\n  return !GTEST_FLAG_GET(internal_run_death_test).empty();\n\n#else\n\n  if (GTEST_FLAG_GET(death_test_style) == \"threadsafe\")\n    return !GTEST_FLAG_GET(internal_run_death_test).empty();\n  else\n    return g_in_fast_death_test_child;\n#endif\n}\n\n}  // namespace internal\n\n// ExitedWithCode constructor.\nExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) {}\n\n// ExitedWithCode function-call operator.\nbool ExitedWithCode::operator()(int exit_status) const {\n#if GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA\n\n  return exit_status == exit_code_;\n\n#else\n\n  return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_;\n\n#endif  // GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA\n}\n\n#if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA\n// KilledBySignal constructor.\nKilledBySignal::KilledBySignal(int signum) : signum_(signum) {}\n\n// KilledBySignal function-call operator.\nbool KilledBySignal::operator()(int exit_status) const {\n#if defined(GTEST_KILLED_BY_SIGNAL_OVERRIDE_)\n  {\n    bool result;\n    if (GTEST_KILLED_BY_SIGNAL_OVERRIDE_(signum_, exit_status, &result)) {\n      return result;\n    }\n  }\n#endif  // defined(GTEST_KILLED_BY_SIGNAL_OVERRIDE_)\n  return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_;\n}\n#endif  // !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA\n\nnamespace internal {\n\n// Utilities needed for death tests.\n\n// Generates a textual description of a given exit code, in the format\n// specified by wait(2).\nstatic std::string ExitSummary(int exit_code) {\n  Message m;\n\n#if GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA\n\n  m << \"Exited with exit status \" << exit_code;\n\n#else\n\n  if (WIFEXITED(exit_code)) {\n    m << \"Exited with exit status \" << WEXITSTATUS(exit_code);\n  } else if (WIFSIGNALED(exit_code)) {\n    m << \"Terminated by signal \" << WTERMSIG(exit_code);\n  }\n#ifdef WCOREDUMP\n  if (WCOREDUMP(exit_code)) {\n    m << \" (core dumped)\";\n  }\n#endif\n#endif  // GTEST_OS_WINDOWS || GTEST_OS_FUCHSIA\n\n  return m.GetString();\n}\n\n// Returns true if exit_status describes a process that was terminated\n// by a signal, or exited normally with a nonzero exit code.\nbool ExitedUnsuccessfully(int exit_status) {\n  return !ExitedWithCode(0)(exit_status);\n}\n\n#if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA\n// Generates a textual failure message when a death test finds more than\n// one thread running, or cannot determine the number of threads, prior\n// to executing the given statement.  It is the responsibility of the\n// caller not to pass a thread_count of 1.\nstatic std::string DeathTestThreadWarning(size_t thread_count) {\n  Message msg;\n  msg << \"Death tests use fork(), which is unsafe particularly\"\n      << \" in a threaded context. For this test, \" << GTEST_NAME_ << \" \";\n  if (thread_count == 0) {\n    msg << \"couldn't detect the number of threads.\";\n  } else {\n    msg << \"detected \" << thread_count << \" threads.\";\n  }\n  msg << \" See \"\n         \"https://github.com/google/googletest/blob/master/docs/\"\n         \"advanced.md#death-tests-and-threads\"\n      << \" for more explanation and suggested solutions, especially if\"\n      << \" this is the last message you see before your test times out.\";\n  return msg.GetString();\n}\n#endif  // !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA\n\n// Flag characters for reporting a death test that did not die.\nstatic const char kDeathTestLived = 'L';\nstatic const char kDeathTestReturned = 'R';\nstatic const char kDeathTestThrew = 'T';\nstatic const char kDeathTestInternalError = 'I';\n\n#if GTEST_OS_FUCHSIA\n\n// File descriptor used for the pipe in the child process.\nstatic const int kFuchsiaReadPipeFd = 3;\n\n#endif\n\n// An enumeration describing all of the possible ways that a death test can\n// conclude.  DIED means that the process died while executing the test\n// code; LIVED means that process lived beyond the end of the test code;\n// RETURNED means that the test statement attempted to execute a return\n// statement, which is not allowed; THREW means that the test statement\n// returned control by throwing an exception.  IN_PROGRESS means the test\n// has not yet concluded.\nenum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED, THREW };\n\n// Routine for aborting the program which is safe to call from an\n// exec-style death test child process, in which case the error\n// message is propagated back to the parent process.  Otherwise, the\n// message is simply printed to stderr.  In either case, the program\n// then exits with status 1.\nstatic void DeathTestAbort(const std::string& message) {\n  // On a POSIX system, this function may be called from a threadsafe-style\n  // death test child process, which operates on a very small stack.  Use\n  // the heap for any additional non-minuscule memory requirements.\n  const InternalRunDeathTestFlag* const flag =\n      GetUnitTestImpl()->internal_run_death_test_flag();\n  if (flag != nullptr) {\n    FILE* parent = posix::FDOpen(flag->write_fd(), \"w\");\n    fputc(kDeathTestInternalError, parent);\n    fprintf(parent, \"%s\", message.c_str());\n    fflush(parent);\n    _exit(1);\n  } else {\n    fprintf(stderr, \"%s\", message.c_str());\n    fflush(stderr);\n    posix::Abort();\n  }\n}\n\n// A replacement for CHECK that calls DeathTestAbort if the assertion\n// fails.\n#define GTEST_DEATH_TEST_CHECK_(expression)                              \\\n  do {                                                                   \\\n    if (!::testing::internal::IsTrue(expression)) {                      \\\n      DeathTestAbort(::std::string(\"CHECK failed: File \") + __FILE__ +   \\\n                     \", line \" +                                         \\\n                     ::testing::internal::StreamableToString(__LINE__) + \\\n                     \": \" + #expression);                                \\\n    }                                                                    \\\n  } while (::testing::internal::AlwaysFalse())\n\n// This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for\n// evaluating any system call that fulfills two conditions: it must return\n// -1 on failure, and set errno to EINTR when it is interrupted and\n// should be tried again.  The macro expands to a loop that repeatedly\n// evaluates the expression as long as it evaluates to -1 and sets\n// errno to EINTR.  If the expression evaluates to -1 but errno is\n// something other than EINTR, DeathTestAbort is called.\n#define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression)                      \\\n  do {                                                                   \\\n    int gtest_retval;                                                    \\\n    do {                                                                 \\\n      gtest_retval = (expression);                                       \\\n    } while (gtest_retval == -1 && errno == EINTR);                      \\\n    if (gtest_retval == -1) {                                            \\\n      DeathTestAbort(::std::string(\"CHECK failed: File \") + __FILE__ +   \\\n                     \", line \" +                                         \\\n                     ::testing::internal::StreamableToString(__LINE__) + \\\n                     \": \" + #expression + \" != -1\");                     \\\n    }                                                                    \\\n  } while (::testing::internal::AlwaysFalse())\n\n// Returns the message describing the last system error in errno.\nstd::string GetLastErrnoDescription() {\n  return errno == 0 ? \"\" : posix::StrError(errno);\n}\n\n// This is called from a death test parent process to read a failure\n// message from the death test child process and log it with the FATAL\n// severity. On Windows, the message is read from a pipe handle. On other\n// platforms, it is read from a file descriptor.\nstatic void FailFromInternalError(int fd) {\n  Message error;\n  char buffer[256];\n  int num_read;\n\n  do {\n    while ((num_read = posix::Read(fd, buffer, 255)) > 0) {\n      buffer[num_read] = '\\0';\n      error << buffer;\n    }\n  } while (num_read == -1 && errno == EINTR);\n\n  if (num_read == 0) {\n    GTEST_LOG_(FATAL) << error.GetString();\n  } else {\n    const int last_error = errno;\n    GTEST_LOG_(FATAL) << \"Error while reading death test internal: \"\n                      << GetLastErrnoDescription() << \" [\" << last_error << \"]\";\n  }\n}\n\n// Death test constructor.  Increments the running death test count\n// for the current test.\nDeathTest::DeathTest() {\n  TestInfo* const info = GetUnitTestImpl()->current_test_info();\n  if (info == nullptr) {\n    DeathTestAbort(\n        \"Cannot run a death test outside of a TEST or \"\n        \"TEST_F construct\");\n  }\n}\n\n// Creates and returns a death test by dispatching to the current\n// death test factory.\nbool DeathTest::Create(const char* statement,\n                       Matcher<const std::string&> matcher, const char* file,\n                       int line, DeathTest** test) {\n  return GetUnitTestImpl()->death_test_factory()->Create(\n      statement, std::move(matcher), file, line, test);\n}\n\nconst char* DeathTest::LastMessage() {\n  return last_death_test_message_.c_str();\n}\n\nvoid DeathTest::set_last_death_test_message(const std::string& message) {\n  last_death_test_message_ = message;\n}\n\nstd::string DeathTest::last_death_test_message_;\n\n// Provides cross platform implementation for some death functionality.\nclass DeathTestImpl : public DeathTest {\n protected:\n  DeathTestImpl(const char* a_statement, Matcher<const std::string&> matcher)\n      : statement_(a_statement),\n        matcher_(std::move(matcher)),\n        spawned_(false),\n        status_(-1),\n        outcome_(IN_PROGRESS),\n        read_fd_(-1),\n        write_fd_(-1) {}\n\n  // read_fd_ is expected to be closed and cleared by a derived class.\n  ~DeathTestImpl() override { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); }\n\n  void Abort(AbortReason reason) override;\n  bool Passed(bool status_ok) override;\n\n  const char* statement() const { return statement_; }\n  bool spawned() const { return spawned_; }\n  void set_spawned(bool is_spawned) { spawned_ = is_spawned; }\n  int status() const { return status_; }\n  void set_status(int a_status) { status_ = a_status; }\n  DeathTestOutcome outcome() const { return outcome_; }\n  void set_outcome(DeathTestOutcome an_outcome) { outcome_ = an_outcome; }\n  int read_fd() const { return read_fd_; }\n  void set_read_fd(int fd) { read_fd_ = fd; }\n  int write_fd() const { return write_fd_; }\n  void set_write_fd(int fd) { write_fd_ = fd; }\n\n  // Called in the parent process only. Reads the result code of the death\n  // test child process via a pipe, interprets it to set the outcome_\n  // member, and closes read_fd_.  Outputs diagnostics and terminates in\n  // case of unexpected codes.\n  void ReadAndInterpretStatusByte();\n\n  // Returns stderr output from the child process.\n  virtual std::string GetErrorLogs();\n\n private:\n  // The textual content of the code this object is testing.  This class\n  // doesn't own this string and should not attempt to delete it.\n  const char* const statement_;\n  // A matcher that's expected to match the stderr output by the child process.\n  Matcher<const std::string&> matcher_;\n  // True if the death test child process has been successfully spawned.\n  bool spawned_;\n  // The exit status of the child process.\n  int status_;\n  // How the death test concluded.\n  DeathTestOutcome outcome_;\n  // Descriptor to the read end of the pipe to the child process.  It is\n  // always -1 in the child process.  The child keeps its write end of the\n  // pipe in write_fd_.\n  int read_fd_;\n  // Descriptor to the child's write end of the pipe to the parent process.\n  // It is always -1 in the parent process.  The parent keeps its end of the\n  // pipe in read_fd_.\n  int write_fd_;\n};\n\n// Called in the parent process only. Reads the result code of the death\n// test child process via a pipe, interprets it to set the outcome_\n// member, and closes read_fd_.  Outputs diagnostics and terminates in\n// case of unexpected codes.\nvoid DeathTestImpl::ReadAndInterpretStatusByte() {\n  char flag;\n  int bytes_read;\n\n  // The read() here blocks until data is available (signifying the\n  // failure of the death test) or until the pipe is closed (signifying\n  // its success), so it's okay to call this in the parent before\n  // the child process has exited.\n  do {\n    bytes_read = posix::Read(read_fd(), &flag, 1);\n  } while (bytes_read == -1 && errno == EINTR);\n\n  if (bytes_read == 0) {\n    set_outcome(DIED);\n  } else if (bytes_read == 1) {\n    switch (flag) {\n      case kDeathTestReturned:\n        set_outcome(RETURNED);\n        break;\n      case kDeathTestThrew:\n        set_outcome(THREW);\n        break;\n      case kDeathTestLived:\n        set_outcome(LIVED);\n        break;\n      case kDeathTestInternalError:\n        FailFromInternalError(read_fd());  // Does not return.\n        break;\n      default:\n        GTEST_LOG_(FATAL) << \"Death test child process reported \"\n                          << \"unexpected status byte (\"\n                          << static_cast<unsigned int>(flag) << \")\";\n    }\n  } else {\n    GTEST_LOG_(FATAL) << \"Read from death test child process failed: \"\n                      << GetLastErrnoDescription();\n  }\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd()));\n  set_read_fd(-1);\n}\n\nstd::string DeathTestImpl::GetErrorLogs() { return GetCapturedStderr(); }\n\n// Signals that the death test code which should have exited, didn't.\n// Should be called only in a death test child process.\n// Writes a status byte to the child's status file descriptor, then\n// calls _exit(1).\nvoid DeathTestImpl::Abort(AbortReason reason) {\n  // The parent process considers the death test to be a failure if\n  // it finds any data in our pipe.  So, here we write a single flag byte\n  // to the pipe, then exit.\n  const char status_ch = reason == TEST_DID_NOT_DIE       ? kDeathTestLived\n                         : reason == TEST_THREW_EXCEPTION ? kDeathTestThrew\n                                                          : kDeathTestReturned;\n\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1));\n  // We are leaking the descriptor here because on some platforms (i.e.,\n  // when built as Windows DLL), destructors of global objects will still\n  // run after calling _exit(). On such systems, write_fd_ will be\n  // indirectly closed from the destructor of UnitTestImpl, causing double\n  // close if it is also closed here. On debug configurations, double close\n  // may assert. As there are no in-process buffers to flush here, we are\n  // relying on the OS to close the descriptor after the process terminates\n  // when the destructors are not run.\n  _exit(1);  // Exits w/o any normal exit hooks (we were supposed to crash)\n}\n\n// Returns an indented copy of stderr output for a death test.\n// This makes distinguishing death test output lines from regular log lines\n// much easier.\nstatic ::std::string FormatDeathTestOutput(const ::std::string& output) {\n  ::std::string ret;\n  for (size_t at = 0;;) {\n    const size_t line_end = output.find('\\n', at);\n    ret += \"[  DEATH   ] \";\n    if (line_end == ::std::string::npos) {\n      ret += output.substr(at);\n      break;\n    }\n    ret += output.substr(at, line_end + 1 - at);\n    at = line_end + 1;\n  }\n  return ret;\n}\n\n// Assesses the success or failure of a death test, using both private\n// members which have previously been set, and one argument:\n//\n// Private data members:\n//   outcome:  An enumeration describing how the death test\n//             concluded: DIED, LIVED, THREW, or RETURNED.  The death test\n//             fails in the latter three cases.\n//   status:   The exit status of the child process. On *nix, it is in the\n//             in the format specified by wait(2). On Windows, this is the\n//             value supplied to the ExitProcess() API or a numeric code\n//             of the exception that terminated the program.\n//   matcher_: A matcher that's expected to match the stderr output by the child\n//             process.\n//\n// Argument:\n//   status_ok: true if exit_status is acceptable in the context of\n//              this particular death test, which fails if it is false\n//\n// Returns true if and only if all of the above conditions are met.  Otherwise,\n// the first failing condition, in the order given above, is the one that is\n// reported. Also sets the last death test message string.\nbool DeathTestImpl::Passed(bool status_ok) {\n  if (!spawned()) return false;\n\n  const std::string error_message = GetErrorLogs();\n\n  bool success = false;\n  Message buffer;\n\n  buffer << \"Death test: \" << statement() << \"\\n\";\n  switch (outcome()) {\n    case LIVED:\n      buffer << \"    Result: failed to die.\\n\"\n             << \" Error msg:\\n\"\n             << FormatDeathTestOutput(error_message);\n      break;\n    case THREW:\n      buffer << \"    Result: threw an exception.\\n\"\n             << \" Error msg:\\n\"\n             << FormatDeathTestOutput(error_message);\n      break;\n    case RETURNED:\n      buffer << \"    Result: illegal return in test statement.\\n\"\n             << \" Error msg:\\n\"\n             << FormatDeathTestOutput(error_message);\n      break;\n    case DIED:\n      if (status_ok) {\n        if (matcher_.Matches(error_message)) {\n          success = true;\n        } else {\n          std::ostringstream stream;\n          matcher_.DescribeTo(&stream);\n          buffer << \"    Result: died but not with expected error.\\n\"\n                 << \"  Expected: \" << stream.str() << \"\\n\"\n                 << \"Actual msg:\\n\"\n                 << FormatDeathTestOutput(error_message);\n        }\n      } else {\n        buffer << \"    Result: died but not with expected exit code:\\n\"\n               << \"            \" << ExitSummary(status()) << \"\\n\"\n               << \"Actual msg:\\n\"\n               << FormatDeathTestOutput(error_message);\n      }\n      break;\n    case IN_PROGRESS:\n    default:\n      GTEST_LOG_(FATAL)\n          << \"DeathTest::Passed somehow called before conclusion of test\";\n  }\n\n  DeathTest::set_last_death_test_message(buffer.GetString());\n  return success;\n}\n\n#if GTEST_OS_WINDOWS\n// WindowsDeathTest implements death tests on Windows. Due to the\n// specifics of starting new processes on Windows, death tests there are\n// always threadsafe, and Google Test considers the\n// --gtest_death_test_style=fast setting to be equivalent to\n// --gtest_death_test_style=threadsafe there.\n//\n// A few implementation notes:  Like the Linux version, the Windows\n// implementation uses pipes for child-to-parent communication. But due to\n// the specifics of pipes on Windows, some extra steps are required:\n//\n// 1. The parent creates a communication pipe and stores handles to both\n//    ends of it.\n// 2. The parent starts the child and provides it with the information\n//    necessary to acquire the handle to the write end of the pipe.\n// 3. The child acquires the write end of the pipe and signals the parent\n//    using a Windows event.\n// 4. Now the parent can release the write end of the pipe on its side. If\n//    this is done before step 3, the object's reference count goes down to\n//    0 and it is destroyed, preventing the child from acquiring it. The\n//    parent now has to release it, or read operations on the read end of\n//    the pipe will not return when the child terminates.\n// 5. The parent reads child's output through the pipe (outcome code and\n//    any possible error messages) from the pipe, and its stderr and then\n//    determines whether to fail the test.\n//\n// Note: to distinguish Win32 API calls from the local method and function\n// calls, the former are explicitly resolved in the global namespace.\n//\nclass WindowsDeathTest : public DeathTestImpl {\n public:\n  WindowsDeathTest(const char* a_statement, Matcher<const std::string&> matcher,\n                   const char* file, int line)\n      : DeathTestImpl(a_statement, std::move(matcher)),\n        file_(file),\n        line_(line) {}\n\n  // All of these virtual functions are inherited from DeathTest.\n  virtual int Wait();\n  virtual TestRole AssumeRole();\n\n private:\n  // The name of the file in which the death test is located.\n  const char* const file_;\n  // The line number on which the death test is located.\n  const int line_;\n  // Handle to the write end of the pipe to the child process.\n  AutoHandle write_handle_;\n  // Child process handle.\n  AutoHandle child_handle_;\n  // Event the child process uses to signal the parent that it has\n  // acquired the handle to the write end of the pipe. After seeing this\n  // event the parent can release its own handles to make sure its\n  // ReadFile() calls return when the child terminates.\n  AutoHandle event_handle_;\n};\n\n// Waits for the child in a death test to exit, returning its exit\n// status, or 0 if no child process exists.  As a side effect, sets the\n// outcome data member.\nint WindowsDeathTest::Wait() {\n  if (!spawned()) return 0;\n\n  // Wait until the child either signals that it has acquired the write end\n  // of the pipe or it dies.\n  const HANDLE wait_handles[2] = {child_handle_.Get(), event_handle_.Get()};\n  switch (::WaitForMultipleObjects(2, wait_handles,\n                                   FALSE,  // Waits for any of the handles.\n                                   INFINITE)) {\n    case WAIT_OBJECT_0:\n    case WAIT_OBJECT_0 + 1:\n      break;\n    default:\n      GTEST_DEATH_TEST_CHECK_(false);  // Should not get here.\n  }\n\n  // The child has acquired the write end of the pipe or exited.\n  // We release the handle on our side and continue.\n  write_handle_.Reset();\n  event_handle_.Reset();\n\n  ReadAndInterpretStatusByte();\n\n  // Waits for the child process to exit if it haven't already. This\n  // returns immediately if the child has already exited, regardless of\n  // whether previous calls to WaitForMultipleObjects synchronized on this\n  // handle or not.\n  GTEST_DEATH_TEST_CHECK_(WAIT_OBJECT_0 ==\n                          ::WaitForSingleObject(child_handle_.Get(), INFINITE));\n  DWORD status_code;\n  GTEST_DEATH_TEST_CHECK_(\n      ::GetExitCodeProcess(child_handle_.Get(), &status_code) != FALSE);\n  child_handle_.Reset();\n  set_status(static_cast<int>(status_code));\n  return status();\n}\n\n// The AssumeRole process for a Windows death test.  It creates a child\n// process with the same executable as the current process to run the\n// death test.  The child process is given the --gtest_filter and\n// --gtest_internal_run_death_test flags such that it knows to run the\n// current death test only.\nDeathTest::TestRole WindowsDeathTest::AssumeRole() {\n  const UnitTestImpl* const impl = GetUnitTestImpl();\n  const InternalRunDeathTestFlag* const flag =\n      impl->internal_run_death_test_flag();\n  const TestInfo* const info = impl->current_test_info();\n  const int death_test_index = info->result()->death_test_count();\n\n  if (flag != nullptr) {\n    // ParseInternalRunDeathTestFlag() has performed all the necessary\n    // processing.\n    set_write_fd(flag->write_fd());\n    return EXECUTE_TEST;\n  }\n\n  // WindowsDeathTest uses an anonymous pipe to communicate results of\n  // a death test.\n  SECURITY_ATTRIBUTES handles_are_inheritable = {sizeof(SECURITY_ATTRIBUTES),\n                                                 nullptr, TRUE};\n  HANDLE read_handle, write_handle;\n  GTEST_DEATH_TEST_CHECK_(::CreatePipe(&read_handle, &write_handle,\n                                       &handles_are_inheritable,\n                                       0)  // Default buffer size.\n                          != FALSE);\n  set_read_fd(\n      ::_open_osfhandle(reinterpret_cast<intptr_t>(read_handle), O_RDONLY));\n  write_handle_.Reset(write_handle);\n  event_handle_.Reset(::CreateEvent(\n      &handles_are_inheritable,\n      TRUE,       // The event will automatically reset to non-signaled state.\n      FALSE,      // The initial state is non-signalled.\n      nullptr));  // The even is unnamed.\n  GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != nullptr);\n  const std::string filter_flag = std::string(\"--\") + GTEST_FLAG_PREFIX_ +\n                                  \"filter=\" + info->test_suite_name() + \".\" +\n                                  info->name();\n  const std::string internal_flag =\n      std::string(\"--\") + GTEST_FLAG_PREFIX_ +\n      \"internal_run_death_test=\" + file_ + \"|\" + StreamableToString(line_) +\n      \"|\" + StreamableToString(death_test_index) + \"|\" +\n      StreamableToString(static_cast<unsigned int>(::GetCurrentProcessId())) +\n      // size_t has the same width as pointers on both 32-bit and 64-bit\n      // Windows platforms.\n      // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx.\n      \"|\" + StreamableToString(reinterpret_cast<size_t>(write_handle)) + \"|\" +\n      StreamableToString(reinterpret_cast<size_t>(event_handle_.Get()));\n\n  char executable_path[_MAX_PATH + 1];  // NOLINT\n  GTEST_DEATH_TEST_CHECK_(_MAX_PATH + 1 != ::GetModuleFileNameA(nullptr,\n                                                                executable_path,\n                                                                _MAX_PATH));\n\n  std::string command_line = std::string(::GetCommandLineA()) + \" \" +\n                             filter_flag + \" \\\"\" + internal_flag + \"\\\"\";\n\n  DeathTest::set_last_death_test_message(\"\");\n\n  CaptureStderr();\n  // Flush the log buffers since the log streams are shared with the child.\n  FlushInfoLog();\n\n  // The child process will share the standard handles with the parent.\n  STARTUPINFOA startup_info;\n  memset(&startup_info, 0, sizeof(STARTUPINFO));\n  startup_info.dwFlags = STARTF_USESTDHANDLES;\n  startup_info.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE);\n  startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE);\n  startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE);\n\n  PROCESS_INFORMATION process_info;\n  GTEST_DEATH_TEST_CHECK_(\n      ::CreateProcessA(\n          executable_path, const_cast<char*>(command_line.c_str()),\n          nullptr,  // Returned process handle is not inheritable.\n          nullptr,  // Returned thread handle is not inheritable.\n          TRUE,  // Child inherits all inheritable handles (for write_handle_).\n          0x0,   // Default creation flags.\n          nullptr,  // Inherit the parent's environment.\n          UnitTest::GetInstance()->original_working_dir(), &startup_info,\n          &process_info) != FALSE);\n  child_handle_.Reset(process_info.hProcess);\n  ::CloseHandle(process_info.hThread);\n  set_spawned(true);\n  return OVERSEE_TEST;\n}\n\n#elif GTEST_OS_FUCHSIA\n\nclass FuchsiaDeathTest : public DeathTestImpl {\n public:\n  FuchsiaDeathTest(const char* a_statement, Matcher<const std::string&> matcher,\n                   const char* file, int line)\n      : DeathTestImpl(a_statement, std::move(matcher)),\n        file_(file),\n        line_(line) {}\n\n  // All of these virtual functions are inherited from DeathTest.\n  int Wait() override;\n  TestRole AssumeRole() override;\n  std::string GetErrorLogs() override;\n\n private:\n  // The name of the file in which the death test is located.\n  const char* const file_;\n  // The line number on which the death test is located.\n  const int line_;\n  // The stderr data captured by the child process.\n  std::string captured_stderr_;\n\n  zx::process child_process_;\n  zx::channel exception_channel_;\n  zx::socket stderr_socket_;\n};\n\n// Utility class for accumulating command-line arguments.\nclass Arguments {\n public:\n  Arguments() { args_.push_back(nullptr); }\n\n  ~Arguments() {\n    for (std::vector<char*>::iterator i = args_.begin(); i != args_.end();\n         ++i) {\n      free(*i);\n    }\n  }\n  void AddArgument(const char* argument) {\n    args_.insert(args_.end() - 1, posix::StrDup(argument));\n  }\n\n  template <typename Str>\n  void AddArguments(const ::std::vector<Str>& arguments) {\n    for (typename ::std::vector<Str>::const_iterator i = arguments.begin();\n         i != arguments.end(); ++i) {\n      args_.insert(args_.end() - 1, posix::StrDup(i->c_str()));\n    }\n  }\n  char* const* Argv() { return &args_[0]; }\n\n  int size() { return static_cast<int>(args_.size()) - 1; }\n\n private:\n  std::vector<char*> args_;\n};\n\n// Waits for the child in a death test to exit, returning its exit\n// status, or 0 if no child process exists.  As a side effect, sets the\n// outcome data member.\nint FuchsiaDeathTest::Wait() {\n  const int kProcessKey = 0;\n  const int kSocketKey = 1;\n  const int kExceptionKey = 2;\n\n  if (!spawned()) return 0;\n\n  // Create a port to wait for socket/task/exception events.\n  zx_status_t status_zx;\n  zx::port port;\n  status_zx = zx::port::create(0, &port);\n  GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK);\n\n  // Register to wait for the child process to terminate.\n  status_zx =\n      child_process_.wait_async(port, kProcessKey, ZX_PROCESS_TERMINATED, 0);\n  GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK);\n\n  // Register to wait for the socket to be readable or closed.\n  status_zx = stderr_socket_.wait_async(\n      port, kSocketKey, ZX_SOCKET_READABLE | ZX_SOCKET_PEER_CLOSED, 0);\n  GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK);\n\n  // Register to wait for an exception.\n  status_zx = exception_channel_.wait_async(port, kExceptionKey,\n                                            ZX_CHANNEL_READABLE, 0);\n  GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK);\n\n  bool process_terminated = false;\n  bool socket_closed = false;\n  do {\n    zx_port_packet_t packet = {};\n    status_zx = port.wait(zx::time::infinite(), &packet);\n    GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK);\n\n    if (packet.key == kExceptionKey) {\n      // Process encountered an exception. Kill it directly rather than\n      // letting other handlers process the event. We will get a kProcessKey\n      // event when the process actually terminates.\n      status_zx = child_process_.kill();\n      GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK);\n    } else if (packet.key == kProcessKey) {\n      // Process terminated.\n      GTEST_DEATH_TEST_CHECK_(ZX_PKT_IS_SIGNAL_ONE(packet.type));\n      GTEST_DEATH_TEST_CHECK_(packet.signal.observed & ZX_PROCESS_TERMINATED);\n      process_terminated = true;\n    } else if (packet.key == kSocketKey) {\n      GTEST_DEATH_TEST_CHECK_(ZX_PKT_IS_SIGNAL_ONE(packet.type));\n      if (packet.signal.observed & ZX_SOCKET_READABLE) {\n        // Read data from the socket.\n        constexpr size_t kBufferSize = 1024;\n        do {\n          size_t old_length = captured_stderr_.length();\n          size_t bytes_read = 0;\n          captured_stderr_.resize(old_length + kBufferSize);\n          status_zx =\n              stderr_socket_.read(0, &captured_stderr_.front() + old_length,\n                                  kBufferSize, &bytes_read);\n          captured_stderr_.resize(old_length + bytes_read);\n        } while (status_zx == ZX_OK);\n        if (status_zx == ZX_ERR_PEER_CLOSED) {\n          socket_closed = true;\n        } else {\n          GTEST_DEATH_TEST_CHECK_(status_zx == ZX_ERR_SHOULD_WAIT);\n          status_zx = stderr_socket_.wait_async(\n              port, kSocketKey, ZX_SOCKET_READABLE | ZX_SOCKET_PEER_CLOSED, 0);\n          GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK);\n        }\n      } else {\n        GTEST_DEATH_TEST_CHECK_(packet.signal.observed & ZX_SOCKET_PEER_CLOSED);\n        socket_closed = true;\n      }\n    }\n  } while (!process_terminated && !socket_closed);\n\n  ReadAndInterpretStatusByte();\n\n  zx_info_process_t buffer;\n  status_zx = child_process_.get_info(ZX_INFO_PROCESS, &buffer, sizeof(buffer),\n                                      nullptr, nullptr);\n  GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK);\n\n  GTEST_DEATH_TEST_CHECK_(buffer.flags & ZX_INFO_PROCESS_FLAG_EXITED);\n  set_status(static_cast<int>(buffer.return_code));\n  return status();\n}\n\n// The AssumeRole process for a Fuchsia death test.  It creates a child\n// process with the same executable as the current process to run the\n// death test.  The child process is given the --gtest_filter and\n// --gtest_internal_run_death_test flags such that it knows to run the\n// current death test only.\nDeathTest::TestRole FuchsiaDeathTest::AssumeRole() {\n  const UnitTestImpl* const impl = GetUnitTestImpl();\n  const InternalRunDeathTestFlag* const flag =\n      impl->internal_run_death_test_flag();\n  const TestInfo* const info = impl->current_test_info();\n  const int death_test_index = info->result()->death_test_count();\n\n  if (flag != nullptr) {\n    // ParseInternalRunDeathTestFlag() has performed all the necessary\n    // processing.\n    set_write_fd(kFuchsiaReadPipeFd);\n    return EXECUTE_TEST;\n  }\n\n  // Flush the log buffers since the log streams are shared with the child.\n  FlushInfoLog();\n\n  // Build the child process command line.\n  const std::string filter_flag = std::string(\"--\") + GTEST_FLAG_PREFIX_ +\n                                  \"filter=\" + info->test_suite_name() + \".\" +\n                                  info->name();\n  const std::string internal_flag = std::string(\"--\") + GTEST_FLAG_PREFIX_ +\n                                    kInternalRunDeathTestFlag + \"=\" + file_ +\n                                    \"|\" + StreamableToString(line_) + \"|\" +\n                                    StreamableToString(death_test_index);\n  Arguments args;\n  args.AddArguments(GetInjectableArgvs());\n  args.AddArgument(filter_flag.c_str());\n  args.AddArgument(internal_flag.c_str());\n\n  // Build the pipe for communication with the child.\n  zx_status_t status;\n  zx_handle_t child_pipe_handle;\n  int child_pipe_fd;\n  status = fdio_pipe_half(&child_pipe_fd, &child_pipe_handle);\n  GTEST_DEATH_TEST_CHECK_(status == ZX_OK);\n  set_read_fd(child_pipe_fd);\n\n  // Set the pipe handle for the child.\n  fdio_spawn_action_t spawn_actions[2] = {};\n  fdio_spawn_action_t* add_handle_action = &spawn_actions[0];\n  add_handle_action->action = FDIO_SPAWN_ACTION_ADD_HANDLE;\n  add_handle_action->h.id = PA_HND(PA_FD, kFuchsiaReadPipeFd);\n  add_handle_action->h.handle = child_pipe_handle;\n\n  // Create a socket pair will be used to receive the child process' stderr.\n  zx::socket stderr_producer_socket;\n  status = zx::socket::create(0, &stderr_producer_socket, &stderr_socket_);\n  GTEST_DEATH_TEST_CHECK_(status >= 0);\n  int stderr_producer_fd = -1;\n  status =\n      fdio_fd_create(stderr_producer_socket.release(), &stderr_producer_fd);\n  GTEST_DEATH_TEST_CHECK_(status >= 0);\n\n  // Make the stderr socket nonblocking.\n  GTEST_DEATH_TEST_CHECK_(fcntl(stderr_producer_fd, F_SETFL, 0) == 0);\n\n  fdio_spawn_action_t* add_stderr_action = &spawn_actions[1];\n  add_stderr_action->action = FDIO_SPAWN_ACTION_CLONE_FD;\n  add_stderr_action->fd.local_fd = stderr_producer_fd;\n  add_stderr_action->fd.target_fd = STDERR_FILENO;\n\n  // Create a child job.\n  zx_handle_t child_job = ZX_HANDLE_INVALID;\n  status = zx_job_create(zx_job_default(), 0, &child_job);\n  GTEST_DEATH_TEST_CHECK_(status == ZX_OK);\n  zx_policy_basic_t policy;\n  policy.condition = ZX_POL_NEW_ANY;\n  policy.policy = ZX_POL_ACTION_ALLOW;\n  status = zx_job_set_policy(child_job, ZX_JOB_POL_RELATIVE, ZX_JOB_POL_BASIC,\n                             &policy, 1);\n  GTEST_DEATH_TEST_CHECK_(status == ZX_OK);\n\n  // Create an exception channel attached to the |child_job|, to allow\n  // us to suppress the system default exception handler from firing.\n  status = zx_task_create_exception_channel(\n      child_job, 0, exception_channel_.reset_and_get_address());\n  GTEST_DEATH_TEST_CHECK_(status == ZX_OK);\n\n  // Spawn the child process.\n  status = fdio_spawn_etc(child_job, FDIO_SPAWN_CLONE_ALL, args.Argv()[0],\n                          args.Argv(), nullptr, 2, spawn_actions,\n                          child_process_.reset_and_get_address(), nullptr);\n  GTEST_DEATH_TEST_CHECK_(status == ZX_OK);\n\n  set_spawned(true);\n  return OVERSEE_TEST;\n}\n\nstd::string FuchsiaDeathTest::GetErrorLogs() { return captured_stderr_; }\n\n#else  // We are neither on Windows, nor on Fuchsia.\n\n// ForkingDeathTest provides implementations for most of the abstract\n// methods of the DeathTest interface.  Only the AssumeRole method is\n// left undefined.\nclass ForkingDeathTest : public DeathTestImpl {\n public:\n  ForkingDeathTest(const char* statement, Matcher<const std::string&> matcher);\n\n  // All of these virtual functions are inherited from DeathTest.\n  int Wait() override;\n\n protected:\n  void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; }\n\n private:\n  // PID of child process during death test; 0 in the child process itself.\n  pid_t child_pid_;\n};\n\n// Constructs a ForkingDeathTest.\nForkingDeathTest::ForkingDeathTest(const char* a_statement,\n                                   Matcher<const std::string&> matcher)\n    : DeathTestImpl(a_statement, std::move(matcher)), child_pid_(-1) {}\n\n// Waits for the child in a death test to exit, returning its exit\n// status, or 0 if no child process exists.  As a side effect, sets the\n// outcome data member.\nint ForkingDeathTest::Wait() {\n  if (!spawned()) return 0;\n\n  ReadAndInterpretStatusByte();\n\n  int status_value;\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(waitpid(child_pid_, &status_value, 0));\n  set_status(status_value);\n  return status_value;\n}\n\n// A concrete death test class that forks, then immediately runs the test\n// in the child process.\nclass NoExecDeathTest : public ForkingDeathTest {\n public:\n  NoExecDeathTest(const char* a_statement, Matcher<const std::string&> matcher)\n      : ForkingDeathTest(a_statement, std::move(matcher)) {}\n  TestRole AssumeRole() override;\n};\n\n// The AssumeRole process for a fork-and-run death test.  It implements a\n// straightforward fork, with a simple pipe to transmit the status byte.\nDeathTest::TestRole NoExecDeathTest::AssumeRole() {\n  const size_t thread_count = GetThreadCount();\n  if (thread_count != 1) {\n    GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count);\n  }\n\n  int pipe_fd[2];\n  GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1);\n\n  DeathTest::set_last_death_test_message(\"\");\n  CaptureStderr();\n  // When we fork the process below, the log file buffers are copied, but the\n  // file descriptors are shared.  We flush all log files here so that closing\n  // the file descriptors in the child process doesn't throw off the\n  // synchronization between descriptors and buffers in the parent process.\n  // This is as close to the fork as possible to avoid a race condition in case\n  // there are multiple threads running before the death test, and another\n  // thread writes to the log file.\n  FlushInfoLog();\n\n  const pid_t child_pid = fork();\n  GTEST_DEATH_TEST_CHECK_(child_pid != -1);\n  set_child_pid(child_pid);\n  if (child_pid == 0) {\n    GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[0]));\n    set_write_fd(pipe_fd[1]);\n    // Redirects all logging to stderr in the child process to prevent\n    // concurrent writes to the log files.  We capture stderr in the parent\n    // process and append the child process' output to a log.\n    LogToStderr();\n    // Event forwarding to the listeners of event listener API mush be shut\n    // down in death test subprocesses.\n    GetUnitTestImpl()->listeners()->SuppressEventForwarding();\n    g_in_fast_death_test_child = true;\n    return EXECUTE_TEST;\n  } else {\n    GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1]));\n    set_read_fd(pipe_fd[0]);\n    set_spawned(true);\n    return OVERSEE_TEST;\n  }\n}\n\n// A concrete death test class that forks and re-executes the main\n// program from the beginning, with command-line flags set that cause\n// only this specific death test to be run.\nclass ExecDeathTest : public ForkingDeathTest {\n public:\n  ExecDeathTest(const char* a_statement, Matcher<const std::string&> matcher,\n                const char* file, int line)\n      : ForkingDeathTest(a_statement, std::move(matcher)),\n        file_(file),\n        line_(line) {}\n  TestRole AssumeRole() override;\n\n private:\n  static ::std::vector<std::string> GetArgvsForDeathTestChildProcess() {\n    ::std::vector<std::string> args = GetInjectableArgvs();\n#if defined(GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_)\n    ::std::vector<std::string> extra_args =\n        GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_();\n    args.insert(args.end(), extra_args.begin(), extra_args.end());\n#endif  // defined(GTEST_EXTRA_DEATH_TEST_COMMAND_LINE_ARGS_)\n    return args;\n  }\n  // The name of the file in which the death test is located.\n  const char* const file_;\n  // The line number on which the death test is located.\n  const int line_;\n};\n\n// Utility class for accumulating command-line arguments.\nclass Arguments {\n public:\n  Arguments() { args_.push_back(nullptr); }\n\n  ~Arguments() {\n    for (std::vector<char*>::iterator i = args_.begin(); i != args_.end();\n         ++i) {\n      free(*i);\n    }\n  }\n  void AddArgument(const char* argument) {\n    args_.insert(args_.end() - 1, posix::StrDup(argument));\n  }\n\n  template <typename Str>\n  void AddArguments(const ::std::vector<Str>& arguments) {\n    for (typename ::std::vector<Str>::const_iterator i = arguments.begin();\n         i != arguments.end(); ++i) {\n      args_.insert(args_.end() - 1, posix::StrDup(i->c_str()));\n    }\n  }\n  char* const* Argv() { return &args_[0]; }\n\n private:\n  std::vector<char*> args_;\n};\n\n// A struct that encompasses the arguments to the child process of a\n// threadsafe-style death test process.\nstruct ExecDeathTestArgs {\n  char* const* argv;  // Command-line arguments for the child's call to exec\n  int close_fd;       // File descriptor to close; the read end of a pipe\n};\n\n#if GTEST_OS_QNX\nextern \"C\" char** environ;\n#else   // GTEST_OS_QNX\n// The main function for a threadsafe-style death test child process.\n// This function is called in a clone()-ed process and thus must avoid\n// any potentially unsafe operations like malloc or libc functions.\nstatic int ExecDeathTestChildMain(void* child_arg) {\n  ExecDeathTestArgs* const args = static_cast<ExecDeathTestArgs*>(child_arg);\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd));\n\n  // We need to execute the test program in the same environment where\n  // it was originally invoked.  Therefore we change to the original\n  // working directory first.\n  const char* const original_dir =\n      UnitTest::GetInstance()->original_working_dir();\n  // We can safely call chdir() as it's a direct system call.\n  if (chdir(original_dir) != 0) {\n    DeathTestAbort(std::string(\"chdir(\\\"\") + original_dir +\n                   \"\\\") failed: \" + GetLastErrnoDescription());\n    return EXIT_FAILURE;\n  }\n\n  // We can safely call execv() as it's almost a direct system call. We\n  // cannot use execvp() as it's a libc function and thus potentially\n  // unsafe.  Since execv() doesn't search the PATH, the user must\n  // invoke the test program via a valid path that contains at least\n  // one path separator.\n  execv(args->argv[0], args->argv);\n  DeathTestAbort(std::string(\"execv(\") + args->argv[0] + \", ...) in \" +\n                 original_dir + \" failed: \" + GetLastErrnoDescription());\n  return EXIT_FAILURE;\n}\n#endif  // GTEST_OS_QNX\n\n#if GTEST_HAS_CLONE\n// Two utility routines that together determine the direction the stack\n// grows.\n// This could be accomplished more elegantly by a single recursive\n// function, but we want to guard against the unlikely possibility of\n// a smart compiler optimizing the recursion away.\n//\n// GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining\n// StackLowerThanAddress into StackGrowsDown, which then doesn't give\n// correct answer.\nstatic void StackLowerThanAddress(const void* ptr,\n                                  bool* result) GTEST_NO_INLINE_;\n// Make sure sanitizers do not tamper with the stack here.\n// Ideally, we want to use `__builtin_frame_address` instead of a local variable\n// address with sanitizer disabled, but it does not work when the\n// compiler optimizes the stack frame out, which happens on PowerPC targets.\n// HWAddressSanitizer add a random tag to the MSB of the local variable address,\n// making comparison result unpredictable.\nGTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_\nGTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_\nstatic void StackLowerThanAddress(const void* ptr, bool* result) {\n  int dummy = 0;\n  *result = std::less<const void*>()(&dummy, ptr);\n}\n\n// Make sure AddressSanitizer does not tamper with the stack here.\nGTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_\nGTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_\nstatic bool StackGrowsDown() {\n  int dummy = 0;\n  bool result;\n  StackLowerThanAddress(&dummy, &result);\n  return result;\n}\n#endif  // GTEST_HAS_CLONE\n\n// Spawns a child process with the same executable as the current process in\n// a thread-safe manner and instructs it to run the death test.  The\n// implementation uses fork(2) + exec.  On systems where clone(2) is\n// available, it is used instead, being slightly more thread-safe.  On QNX,\n// fork supports only single-threaded environments, so this function uses\n// spawn(2) there instead.  The function dies with an error message if\n// anything goes wrong.\nstatic pid_t ExecDeathTestSpawnChild(char* const* argv, int close_fd) {\n  ExecDeathTestArgs args = {argv, close_fd};\n  pid_t child_pid = -1;\n\n#if GTEST_OS_QNX\n  // Obtains the current directory and sets it to be closed in the child\n  // process.\n  const int cwd_fd = open(\".\", O_RDONLY);\n  GTEST_DEATH_TEST_CHECK_(cwd_fd != -1);\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(fcntl(cwd_fd, F_SETFD, FD_CLOEXEC));\n  // We need to execute the test program in the same environment where\n  // it was originally invoked.  Therefore we change to the original\n  // working directory first.\n  const char* const original_dir =\n      UnitTest::GetInstance()->original_working_dir();\n  // We can safely call chdir() as it's a direct system call.\n  if (chdir(original_dir) != 0) {\n    DeathTestAbort(std::string(\"chdir(\\\"\") + original_dir +\n                   \"\\\") failed: \" + GetLastErrnoDescription());\n    return EXIT_FAILURE;\n  }\n\n  int fd_flags;\n  // Set close_fd to be closed after spawn.\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(fd_flags = fcntl(close_fd, F_GETFD));\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(\n      fcntl(close_fd, F_SETFD, fd_flags | FD_CLOEXEC));\n  struct inheritance inherit = {0};\n  // spawn is a system call.\n  child_pid = spawn(args.argv[0], 0, nullptr, &inherit, args.argv, environ);\n  // Restores the current working directory.\n  GTEST_DEATH_TEST_CHECK_(fchdir(cwd_fd) != -1);\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(close(cwd_fd));\n\n#else  // GTEST_OS_QNX\n#if GTEST_OS_LINUX\n  // When a SIGPROF signal is received while fork() or clone() are executing,\n  // the process may hang. To avoid this, we ignore SIGPROF here and re-enable\n  // it after the call to fork()/clone() is complete.\n  struct sigaction saved_sigprof_action;\n  struct sigaction ignore_sigprof_action;\n  memset(&ignore_sigprof_action, 0, sizeof(ignore_sigprof_action));\n  sigemptyset(&ignore_sigprof_action.sa_mask);\n  ignore_sigprof_action.sa_handler = SIG_IGN;\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(\n      sigaction(SIGPROF, &ignore_sigprof_action, &saved_sigprof_action));\n#endif  // GTEST_OS_LINUX\n\n#if GTEST_HAS_CLONE\n  const bool use_fork = GTEST_FLAG_GET(death_test_use_fork);\n\n  if (!use_fork) {\n    static const bool stack_grows_down = StackGrowsDown();\n    const auto stack_size = static_cast<size_t>(getpagesize() * 2);\n    // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead.\n    void* const stack = mmap(nullptr, stack_size, PROT_READ | PROT_WRITE,\n                             MAP_ANON | MAP_PRIVATE, -1, 0);\n    GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED);\n\n    // Maximum stack alignment in bytes:  For a downward-growing stack, this\n    // amount is subtracted from size of the stack space to get an address\n    // that is within the stack space and is aligned on all systems we care\n    // about.  As far as I know there is no ABI with stack alignment greater\n    // than 64.  We assume stack and stack_size already have alignment of\n    // kMaxStackAlignment.\n    const size_t kMaxStackAlignment = 64;\n    void* const stack_top =\n        static_cast<char*>(stack) +\n        (stack_grows_down ? stack_size - kMaxStackAlignment : 0);\n    GTEST_DEATH_TEST_CHECK_(\n        static_cast<size_t>(stack_size) > kMaxStackAlignment &&\n        reinterpret_cast<uintptr_t>(stack_top) % kMaxStackAlignment == 0);\n\n    child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args);\n\n    GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1);\n  }\n#else\n  const bool use_fork = true;\n#endif  // GTEST_HAS_CLONE\n\n  if (use_fork && (child_pid = fork()) == 0) {\n    ExecDeathTestChildMain(&args);\n    _exit(0);\n  }\n#endif  // GTEST_OS_QNX\n#if GTEST_OS_LINUX\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(\n      sigaction(SIGPROF, &saved_sigprof_action, nullptr));\n#endif  // GTEST_OS_LINUX\n\n  GTEST_DEATH_TEST_CHECK_(child_pid != -1);\n  return child_pid;\n}\n\n// The AssumeRole process for a fork-and-exec death test.  It re-executes the\n// main program from the beginning, setting the --gtest_filter\n// and --gtest_internal_run_death_test flags to cause only the current\n// death test to be re-run.\nDeathTest::TestRole ExecDeathTest::AssumeRole() {\n  const UnitTestImpl* const impl = GetUnitTestImpl();\n  const InternalRunDeathTestFlag* const flag =\n      impl->internal_run_death_test_flag();\n  const TestInfo* const info = impl->current_test_info();\n  const int death_test_index = info->result()->death_test_count();\n\n  if (flag != nullptr) {\n    set_write_fd(flag->write_fd());\n    return EXECUTE_TEST;\n  }\n\n  int pipe_fd[2];\n  GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1);\n  // Clear the close-on-exec flag on the write end of the pipe, lest\n  // it be closed when the child process does an exec:\n  GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1);\n\n  const std::string filter_flag = std::string(\"--\") + GTEST_FLAG_PREFIX_ +\n                                  \"filter=\" + info->test_suite_name() + \".\" +\n                                  info->name();\n  const std::string internal_flag = std::string(\"--\") + GTEST_FLAG_PREFIX_ +\n                                    \"internal_run_death_test=\" + file_ + \"|\" +\n                                    StreamableToString(line_) + \"|\" +\n                                    StreamableToString(death_test_index) + \"|\" +\n                                    StreamableToString(pipe_fd[1]);\n  Arguments args;\n  args.AddArguments(GetArgvsForDeathTestChildProcess());\n  args.AddArgument(filter_flag.c_str());\n  args.AddArgument(internal_flag.c_str());\n\n  DeathTest::set_last_death_test_message(\"\");\n\n  CaptureStderr();\n  // See the comment in NoExecDeathTest::AssumeRole for why the next line\n  // is necessary.\n  FlushInfoLog();\n\n  const pid_t child_pid = ExecDeathTestSpawnChild(args.Argv(), pipe_fd[0]);\n  GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1]));\n  set_child_pid(child_pid);\n  set_read_fd(pipe_fd[0]);\n  set_spawned(true);\n  return OVERSEE_TEST;\n}\n\n#endif  // !GTEST_OS_WINDOWS\n\n// Creates a concrete DeathTest-derived class that depends on the\n// --gtest_death_test_style flag, and sets the pointer pointed to\n// by the \"test\" argument to its address.  If the test should be\n// skipped, sets that pointer to NULL.  Returns true, unless the\n// flag is set to an invalid value.\nbool DefaultDeathTestFactory::Create(const char* statement,\n                                     Matcher<const std::string&> matcher,\n                                     const char* file, int line,\n                                     DeathTest** test) {\n  UnitTestImpl* const impl = GetUnitTestImpl();\n  const InternalRunDeathTestFlag* const flag =\n      impl->internal_run_death_test_flag();\n  const int death_test_index =\n      impl->current_test_info()->increment_death_test_count();\n\n  if (flag != nullptr) {\n    if (death_test_index > flag->index()) {\n      DeathTest::set_last_death_test_message(\n          \"Death test count (\" + StreamableToString(death_test_index) +\n          \") somehow exceeded expected maximum (\" +\n          StreamableToString(flag->index()) + \")\");\n      return false;\n    }\n\n    if (!(flag->file() == file && flag->line() == line &&\n          flag->index() == death_test_index)) {\n      *test = nullptr;\n      return true;\n    }\n  }\n\n#if GTEST_OS_WINDOWS\n\n  if (GTEST_FLAG_GET(death_test_style) == \"threadsafe\" ||\n      GTEST_FLAG_GET(death_test_style) == \"fast\") {\n    *test = new WindowsDeathTest(statement, std::move(matcher), file, line);\n  }\n\n#elif GTEST_OS_FUCHSIA\n\n  if (GTEST_FLAG_GET(death_test_style) == \"threadsafe\" ||\n      GTEST_FLAG_GET(death_test_style) == \"fast\") {\n    *test = new FuchsiaDeathTest(statement, std::move(matcher), file, line);\n  }\n\n#else\n\n  if (GTEST_FLAG_GET(death_test_style) == \"threadsafe\") {\n    *test = new ExecDeathTest(statement, std::move(matcher), file, line);\n  } else if (GTEST_FLAG_GET(death_test_style) == \"fast\") {\n    *test = new NoExecDeathTest(statement, std::move(matcher));\n  }\n\n#endif  // GTEST_OS_WINDOWS\n\n  else {  // NOLINT - this is more readable than unbalanced brackets inside #if.\n    DeathTest::set_last_death_test_message(\"Unknown death test style \\\"\" +\n                                           GTEST_FLAG_GET(death_test_style) +\n                                           \"\\\" encountered\");\n    return false;\n  }\n\n  return true;\n}\n\n#if GTEST_OS_WINDOWS\n// Recreates the pipe and event handles from the provided parameters,\n// signals the event, and returns a file descriptor wrapped around the pipe\n// handle. This function is called in the child process only.\nstatic int GetStatusFileDescriptor(unsigned int parent_process_id,\n                                   size_t write_handle_as_size_t,\n                                   size_t event_handle_as_size_t) {\n  AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE,\n                                                 FALSE,  // Non-inheritable.\n                                                 parent_process_id));\n  if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) {\n    DeathTestAbort(\"Unable to open parent process \" +\n                   StreamableToString(parent_process_id));\n  }\n\n  GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t));\n\n  const HANDLE write_handle = reinterpret_cast<HANDLE>(write_handle_as_size_t);\n  HANDLE dup_write_handle;\n\n  // The newly initialized handle is accessible only in the parent\n  // process. To obtain one accessible within the child, we need to use\n  // DuplicateHandle.\n  if (!::DuplicateHandle(parent_process_handle.Get(), write_handle,\n                         ::GetCurrentProcess(), &dup_write_handle,\n                         0x0,    // Requested privileges ignored since\n                                 // DUPLICATE_SAME_ACCESS is used.\n                         FALSE,  // Request non-inheritable handler.\n                         DUPLICATE_SAME_ACCESS)) {\n    DeathTestAbort(\"Unable to duplicate the pipe handle \" +\n                   StreamableToString(write_handle_as_size_t) +\n                   \" from the parent process \" +\n                   StreamableToString(parent_process_id));\n  }\n\n  const HANDLE event_handle = reinterpret_cast<HANDLE>(event_handle_as_size_t);\n  HANDLE dup_event_handle;\n\n  if (!::DuplicateHandle(parent_process_handle.Get(), event_handle,\n                         ::GetCurrentProcess(), &dup_event_handle, 0x0, FALSE,\n                         DUPLICATE_SAME_ACCESS)) {\n    DeathTestAbort(\"Unable to duplicate the event handle \" +\n                   StreamableToString(event_handle_as_size_t) +\n                   \" from the parent process \" +\n                   StreamableToString(parent_process_id));\n  }\n\n  const int write_fd =\n      ::_open_osfhandle(reinterpret_cast<intptr_t>(dup_write_handle), O_APPEND);\n  if (write_fd == -1) {\n    DeathTestAbort(\"Unable to convert pipe handle \" +\n                   StreamableToString(write_handle_as_size_t) +\n                   \" to a file descriptor\");\n  }\n\n  // Signals the parent that the write end of the pipe has been acquired\n  // so the parent can release its own write end.\n  ::SetEvent(dup_event_handle);\n\n  return write_fd;\n}\n#endif  // GTEST_OS_WINDOWS\n\n// Returns a newly created InternalRunDeathTestFlag object with fields\n// initialized from the GTEST_FLAG(internal_run_death_test) flag if\n// the flag is specified; otherwise returns NULL.\nInternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() {\n  if (GTEST_FLAG_GET(internal_run_death_test) == \"\") return nullptr;\n\n  // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we\n  // can use it here.\n  int line = -1;\n  int index = -1;\n  ::std::vector< ::std::string> fields;\n  SplitString(GTEST_FLAG_GET(internal_run_death_test), '|', &fields);\n  int write_fd = -1;\n\n#if GTEST_OS_WINDOWS\n\n  unsigned int parent_process_id = 0;\n  size_t write_handle_as_size_t = 0;\n  size_t event_handle_as_size_t = 0;\n\n  if (fields.size() != 6 || !ParseNaturalNumber(fields[1], &line) ||\n      !ParseNaturalNumber(fields[2], &index) ||\n      !ParseNaturalNumber(fields[3], &parent_process_id) ||\n      !ParseNaturalNumber(fields[4], &write_handle_as_size_t) ||\n      !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) {\n    DeathTestAbort(\"Bad --gtest_internal_run_death_test flag: \" +\n                   GTEST_FLAG_GET(internal_run_death_test));\n  }\n  write_fd = GetStatusFileDescriptor(parent_process_id, write_handle_as_size_t,\n                                     event_handle_as_size_t);\n\n#elif GTEST_OS_FUCHSIA\n\n  if (fields.size() != 3 || !ParseNaturalNumber(fields[1], &line) ||\n      !ParseNaturalNumber(fields[2], &index)) {\n    DeathTestAbort(\"Bad --gtest_internal_run_death_test flag: \" +\n                   GTEST_FLAG_GET(internal_run_death_test));\n  }\n\n#else\n\n  if (fields.size() != 4 || !ParseNaturalNumber(fields[1], &line) ||\n      !ParseNaturalNumber(fields[2], &index) ||\n      !ParseNaturalNumber(fields[3], &write_fd)) {\n    DeathTestAbort(\"Bad --gtest_internal_run_death_test flag: \" +\n                   GTEST_FLAG_GET(internal_run_death_test));\n  }\n\n#endif  // GTEST_OS_WINDOWS\n\n  return new InternalRunDeathTestFlag(fields[0], line, index, write_fd);\n}\n\n}  // namespace internal\n\n#endif  // GTEST_HAS_DEATH_TEST\n\n}  // namespace testing\n"
  },
  {
    "path": "tests/gtest/src/gtest-filepath.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include \"gtest/internal/gtest-filepath.h\"\n\n#include <stdlib.h>\n\n#include \"gtest/gtest-message.h\"\n#include \"gtest/internal/gtest-port.h\"\n\n#if GTEST_OS_WINDOWS_MOBILE\n#include <windows.h>\n#elif GTEST_OS_WINDOWS\n#include <direct.h>\n#include <io.h>\n#else\n#include <limits.h>\n\n#include <climits>  // Some Linux distributions define PATH_MAX here.\n#endif              // GTEST_OS_WINDOWS_MOBILE\n\n#include \"gtest/internal/gtest-string.h\"\n\n#if GTEST_OS_WINDOWS\n#define GTEST_PATH_MAX_ _MAX_PATH\n#elif defined(PATH_MAX)\n#define GTEST_PATH_MAX_ PATH_MAX\n#elif defined(_XOPEN_PATH_MAX)\n#define GTEST_PATH_MAX_ _XOPEN_PATH_MAX\n#else\n#define GTEST_PATH_MAX_ _POSIX_PATH_MAX\n#endif  // GTEST_OS_WINDOWS\n\nnamespace testing {\nnamespace internal {\n\n#if GTEST_OS_WINDOWS\n// On Windows, '\\\\' is the standard path separator, but many tools and the\n// Windows API also accept '/' as an alternate path separator. Unless otherwise\n// noted, a file path can contain either kind of path separators, or a mixture\n// of them.\nconst char kPathSeparator = '\\\\';\nconst char kAlternatePathSeparator = '/';\nconst char kAlternatePathSeparatorString[] = \"/\";\n#if GTEST_OS_WINDOWS_MOBILE\n// Windows CE doesn't have a current directory. You should not use\n// the current directory in tests on Windows CE, but this at least\n// provides a reasonable fallback.\nconst char kCurrentDirectoryString[] = \"\\\\\";\n// Windows CE doesn't define INVALID_FILE_ATTRIBUTES\nconst DWORD kInvalidFileAttributes = 0xffffffff;\n#else\nconst char kCurrentDirectoryString[] = \".\\\\\";\n#endif  // GTEST_OS_WINDOWS_MOBILE\n#else\nconst char kPathSeparator = '/';\nconst char kCurrentDirectoryString[] = \"./\";\n#endif  // GTEST_OS_WINDOWS\n\n// Returns whether the given character is a valid path separator.\nstatic bool IsPathSeparator(char c) {\n#if GTEST_HAS_ALT_PATH_SEP_\n  return (c == kPathSeparator) || (c == kAlternatePathSeparator);\n#else\n  return c == kPathSeparator;\n#endif\n}\n\n// Returns the current working directory, or \"\" if unsuccessful.\nFilePath FilePath::GetCurrentDir() {\n#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_PHONE ||         \\\n    GTEST_OS_WINDOWS_RT || GTEST_OS_ESP8266 || GTEST_OS_ESP32 || \\\n    GTEST_OS_XTENSA\n  // These platforms do not have a current directory, so we just return\n  // something reasonable.\n  return FilePath(kCurrentDirectoryString);\n#elif GTEST_OS_WINDOWS\n  char cwd[GTEST_PATH_MAX_ + 1] = {'\\0'};\n  return FilePath(_getcwd(cwd, sizeof(cwd)) == nullptr ? \"\" : cwd);\n#else\n  char cwd[GTEST_PATH_MAX_ + 1] = {'\\0'};\n  char* result = getcwd(cwd, sizeof(cwd));\n#if GTEST_OS_NACL\n  // getcwd will likely fail in NaCl due to the sandbox, so return something\n  // reasonable. The user may have provided a shim implementation for getcwd,\n  // however, so fallback only when failure is detected.\n  return FilePath(result == nullptr ? kCurrentDirectoryString : cwd);\n#endif  // GTEST_OS_NACL\n  return FilePath(result == nullptr ? \"\" : cwd);\n#endif  // GTEST_OS_WINDOWS_MOBILE\n}\n\n// Returns a copy of the FilePath with the case-insensitive extension removed.\n// Example: FilePath(\"dir/file.exe\").RemoveExtension(\"EXE\") returns\n// FilePath(\"dir/file\"). If a case-insensitive extension is not\n// found, returns a copy of the original FilePath.\nFilePath FilePath::RemoveExtension(const char* extension) const {\n  const std::string dot_extension = std::string(\".\") + extension;\n  if (String::EndsWithCaseInsensitive(pathname_, dot_extension)) {\n    return FilePath(\n        pathname_.substr(0, pathname_.length() - dot_extension.length()));\n  }\n  return *this;\n}\n\n// Returns a pointer to the last occurrence of a valid path separator in\n// the FilePath. On Windows, for example, both '/' and '\\' are valid path\n// separators. Returns NULL if no path separator was found.\nconst char* FilePath::FindLastPathSeparator() const {\n  const char* const last_sep = strrchr(c_str(), kPathSeparator);\n#if GTEST_HAS_ALT_PATH_SEP_\n  const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator);\n  // Comparing two pointers of which only one is NULL is undefined.\n  if (last_alt_sep != nullptr &&\n      (last_sep == nullptr || last_alt_sep > last_sep)) {\n    return last_alt_sep;\n  }\n#endif\n  return last_sep;\n}\n\n// Returns a copy of the FilePath with the directory part removed.\n// Example: FilePath(\"path/to/file\").RemoveDirectoryName() returns\n// FilePath(\"file\"). If there is no directory part (\"just_a_file\"), it returns\n// the FilePath unmodified. If there is no file part (\"just_a_dir/\") it\n// returns an empty FilePath (\"\").\n// On Windows platform, '\\' is the path separator, otherwise it is '/'.\nFilePath FilePath::RemoveDirectoryName() const {\n  const char* const last_sep = FindLastPathSeparator();\n  return last_sep ? FilePath(last_sep + 1) : *this;\n}\n\n// RemoveFileName returns the directory path with the filename removed.\n// Example: FilePath(\"path/to/file\").RemoveFileName() returns \"path/to/\".\n// If the FilePath is \"a_file\" or \"/a_file\", RemoveFileName returns\n// FilePath(\"./\") or, on Windows, FilePath(\".\\\\\"). If the filepath does\n// not have a file, like \"just/a/dir/\", it returns the FilePath unmodified.\n// On Windows platform, '\\' is the path separator, otherwise it is '/'.\nFilePath FilePath::RemoveFileName() const {\n  const char* const last_sep = FindLastPathSeparator();\n  std::string dir;\n  if (last_sep) {\n    dir = std::string(c_str(), static_cast<size_t>(last_sep + 1 - c_str()));\n  } else {\n    dir = kCurrentDirectoryString;\n  }\n  return FilePath(dir);\n}\n\n// Helper functions for naming files in a directory for xml output.\n\n// Given directory = \"dir\", base_name = \"test\", number = 0,\n// extension = \"xml\", returns \"dir/test.xml\". If number is greater\n// than zero (e.g., 12), returns \"dir/test_12.xml\".\n// On Windows platform, uses \\ as the separator rather than /.\nFilePath FilePath::MakeFileName(const FilePath& directory,\n                                const FilePath& base_name, int number,\n                                const char* extension) {\n  std::string file;\n  if (number == 0) {\n    file = base_name.string() + \".\" + extension;\n  } else {\n    file =\n        base_name.string() + \"_\" + StreamableToString(number) + \".\" + extension;\n  }\n  return ConcatPaths(directory, FilePath(file));\n}\n\n// Given directory = \"dir\", relative_path = \"test.xml\", returns \"dir/test.xml\".\n// On Windows, uses \\ as the separator rather than /.\nFilePath FilePath::ConcatPaths(const FilePath& directory,\n                               const FilePath& relative_path) {\n  if (directory.IsEmpty()) return relative_path;\n  const FilePath dir(directory.RemoveTrailingPathSeparator());\n  return FilePath(dir.string() + kPathSeparator + relative_path.string());\n}\n\n// Returns true if pathname describes something findable in the file-system,\n// either a file, directory, or whatever.\nbool FilePath::FileOrDirectoryExists() const {\n#if GTEST_OS_WINDOWS_MOBILE\n  LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str());\n  const DWORD attributes = GetFileAttributes(unicode);\n  delete[] unicode;\n  return attributes != kInvalidFileAttributes;\n#else\n  posix::StatStruct file_stat{};\n  return posix::Stat(pathname_.c_str(), &file_stat) == 0;\n#endif  // GTEST_OS_WINDOWS_MOBILE\n}\n\n// Returns true if pathname describes a directory in the file-system\n// that exists.\nbool FilePath::DirectoryExists() const {\n  bool result = false;\n#if GTEST_OS_WINDOWS\n  // Don't strip off trailing separator if path is a root directory on\n  // Windows (like \"C:\\\\\").\n  const FilePath& path(IsRootDirectory() ? *this\n                                         : RemoveTrailingPathSeparator());\n#else\n  const FilePath& path(*this);\n#endif\n\n#if GTEST_OS_WINDOWS_MOBILE\n  LPCWSTR unicode = String::AnsiToUtf16(path.c_str());\n  const DWORD attributes = GetFileAttributes(unicode);\n  delete[] unicode;\n  if ((attributes != kInvalidFileAttributes) &&\n      (attributes & FILE_ATTRIBUTE_DIRECTORY)) {\n    result = true;\n  }\n#else\n  posix::StatStruct file_stat{};\n  result =\n      posix::Stat(path.c_str(), &file_stat) == 0 && posix::IsDir(file_stat);\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n  return result;\n}\n\n// Returns true if pathname describes a root directory. (Windows has one\n// root directory per disk drive.)\nbool FilePath::IsRootDirectory() const {\n#if GTEST_OS_WINDOWS\n  return pathname_.length() == 3 && IsAbsolutePath();\n#else\n  return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]);\n#endif\n}\n\n// Returns true if pathname describes an absolute path.\nbool FilePath::IsAbsolutePath() const {\n  const char* const name = pathname_.c_str();\n#if GTEST_OS_WINDOWS\n  return pathname_.length() >= 3 &&\n         ((name[0] >= 'a' && name[0] <= 'z') ||\n          (name[0] >= 'A' && name[0] <= 'Z')) &&\n         name[1] == ':' && IsPathSeparator(name[2]);\n#else\n  return IsPathSeparator(name[0]);\n#endif\n}\n\n// Returns a pathname for a file that does not currently exist. The pathname\n// will be directory/base_name.extension or\n// directory/base_name_<number>.extension if directory/base_name.extension\n// already exists. The number will be incremented until a pathname is found\n// that does not already exist.\n// Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'.\n// There could be a race condition if two or more processes are calling this\n// function at the same time -- they could both pick the same filename.\nFilePath FilePath::GenerateUniqueFileName(const FilePath& directory,\n                                          const FilePath& base_name,\n                                          const char* extension) {\n  FilePath full_pathname;\n  int number = 0;\n  do {\n    full_pathname.Set(MakeFileName(directory, base_name, number++, extension));\n  } while (full_pathname.FileOrDirectoryExists());\n  return full_pathname;\n}\n\n// Returns true if FilePath ends with a path separator, which indicates that\n// it is intended to represent a directory. Returns false otherwise.\n// This does NOT check that a directory (or file) actually exists.\nbool FilePath::IsDirectory() const {\n  return !pathname_.empty() &&\n         IsPathSeparator(pathname_.c_str()[pathname_.length() - 1]);\n}\n\n// Create directories so that path exists. Returns true if successful or if\n// the directories already exist; returns false if unable to create directories\n// for any reason.\nbool FilePath::CreateDirectoriesRecursively() const {\n  if (!this->IsDirectory()) {\n    return false;\n  }\n\n  if (pathname_.length() == 0 || this->DirectoryExists()) {\n    return true;\n  }\n\n  const FilePath parent(this->RemoveTrailingPathSeparator().RemoveFileName());\n  return parent.CreateDirectoriesRecursively() && this->CreateFolder();\n}\n\n// Create the directory so that path exists. Returns true if successful or\n// if the directory already exists; returns false if unable to create the\n// directory for any reason, including if the parent directory does not\n// exist. Not named \"CreateDirectory\" because that's a macro on Windows.\nbool FilePath::CreateFolder() const {\n#if GTEST_OS_WINDOWS_MOBILE\n  FilePath removed_sep(this->RemoveTrailingPathSeparator());\n  LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str());\n  int result = CreateDirectory(unicode, nullptr) ? 0 : -1;\n  delete[] unicode;\n#elif GTEST_OS_WINDOWS\n  int result = _mkdir(pathname_.c_str());\n#elif GTEST_OS_ESP8266 || GTEST_OS_XTENSA\n  // do nothing\n  int result = 0;\n#else\n  int result = mkdir(pathname_.c_str(), 0777);\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n  if (result == -1) {\n    return this->DirectoryExists();  // An error is OK if the directory exists.\n  }\n  return true;  // No error.\n}\n\n// If input name has a trailing separator character, remove it and return the\n// name, otherwise return the name string unmodified.\n// On Windows platform, uses \\ as the separator, other platforms use /.\nFilePath FilePath::RemoveTrailingPathSeparator() const {\n  return IsDirectory() ? FilePath(pathname_.substr(0, pathname_.length() - 1))\n                       : *this;\n}\n\n// Removes any redundant separators that might be in the pathname.\n// For example, \"bar///foo\" becomes \"bar/foo\". Does not eliminate other\n// redundancies that might be in a pathname involving \".\" or \"..\".\nvoid FilePath::Normalize() {\n  auto out = pathname_.begin();\n\n  for (const char character : pathname_) {\n    if (!IsPathSeparator(character)) {\n      *(out++) = character;\n    } else if (out == pathname_.begin() || *std::prev(out) != kPathSeparator) {\n      *(out++) = kPathSeparator;\n    } else {\n      continue;\n    }\n  }\n\n  pathname_.erase(out, pathname_.end());\n}\n\n}  // namespace internal\n}  // namespace testing\n"
  },
  {
    "path": "tests/gtest/src/gtest-internal-inl.h",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Utility functions and classes used by the Google C++ testing framework.//\n// This file contains purely Google Test's internal implementation.  Please\n// DO NOT #INCLUDE IT IN A USER PROGRAM.\n\n#ifndef GOOGLETEST_SRC_GTEST_INTERNAL_INL_H_\n#define GOOGLETEST_SRC_GTEST_INTERNAL_INL_H_\n\n#ifndef _WIN32_WCE\n#include <errno.h>\n#endif  // !_WIN32_WCE\n#include <stddef.h>\n#include <stdlib.h>  // For strtoll/_strtoul64/malloc/free.\n#include <string.h>  // For memmove.\n\n#include <algorithm>\n#include <cstdint>\n#include <memory>\n#include <string>\n#include <vector>\n\n#include \"gtest/internal/gtest-port.h\"\n\n#if GTEST_CAN_STREAM_RESULTS_\n#include <arpa/inet.h>  // NOLINT\n#include <netdb.h>      // NOLINT\n#endif\n\n#if GTEST_OS_WINDOWS\n#include <windows.h>  // NOLINT\n#endif                // GTEST_OS_WINDOWS\n\n#include \"gtest/gtest-spi.h\"\n#include \"gtest/gtest.h\"\n\nGTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \\\n/* class A needs to have dll-interface to be used by clients of class B */)\n\n// Declares the flags.\n//\n// We don't want the users to modify this flag in the code, but want\n// Google Test's own unit tests to be able to access it. Therefore we\n// declare it here as opposed to in gtest.h.\nGTEST_DECLARE_bool_(death_test_use_fork);\n\nnamespace testing {\nnamespace internal {\n\n// The value of GetTestTypeId() as seen from within the Google Test\n// library.  This is solely for testing GetTestTypeId().\nGTEST_API_ extern const TypeId kTestTypeIdInGoogleTest;\n\n// A valid random seed must be in [1, kMaxRandomSeed].\nconst int kMaxRandomSeed = 99999;\n\n// g_help_flag is true if and only if the --help flag or an equivalent form\n// is specified on the command line.\nGTEST_API_ extern bool g_help_flag;\n\n// Returns the current time in milliseconds.\nGTEST_API_ TimeInMillis GetTimeInMillis();\n\n// Returns true if and only if Google Test should use colors in the output.\nGTEST_API_ bool ShouldUseColor(bool stdout_is_tty);\n\n// Formats the given time in milliseconds as seconds.\nGTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms);\n\n// Converts the given time in milliseconds to a date string in the ISO 8601\n// format, without the timezone information.  N.B.: due to the use the\n// non-reentrant localtime() function, this function is not thread safe.  Do\n// not use it in any code that can be called from multiple threads.\nGTEST_API_ std::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms);\n\n// Parses a string for an Int32 flag, in the form of \"--flag=value\".\n//\n// On success, stores the value of the flag in *value, and returns\n// true.  On failure, returns false without changing *value.\nGTEST_API_ bool ParseFlag(const char* str, const char* flag, int32_t* value);\n\n// Returns a random seed in range [1, kMaxRandomSeed] based on the\n// given --gtest_random_seed flag value.\ninline int GetRandomSeedFromFlag(int32_t random_seed_flag) {\n  const unsigned int raw_seed =\n      (random_seed_flag == 0) ? static_cast<unsigned int>(GetTimeInMillis())\n                              : static_cast<unsigned int>(random_seed_flag);\n\n  // Normalizes the actual seed to range [1, kMaxRandomSeed] such that\n  // it's easy to type.\n  const int normalized_seed =\n      static_cast<int>((raw_seed - 1U) %\n                       static_cast<unsigned int>(kMaxRandomSeed)) +\n      1;\n  return normalized_seed;\n}\n\n// Returns the first valid random seed after 'seed'.  The behavior is\n// undefined if 'seed' is invalid.  The seed after kMaxRandomSeed is\n// considered to be 1.\ninline int GetNextRandomSeed(int seed) {\n  GTEST_CHECK_(1 <= seed && seed <= kMaxRandomSeed)\n      << \"Invalid random seed \" << seed << \" - must be in [1, \"\n      << kMaxRandomSeed << \"].\";\n  const int next_seed = seed + 1;\n  return (next_seed > kMaxRandomSeed) ? 1 : next_seed;\n}\n\n// This class saves the values of all Google Test flags in its c'tor, and\n// restores them in its d'tor.\nclass GTestFlagSaver {\n public:\n  // The c'tor.\n  GTestFlagSaver() {\n    also_run_disabled_tests_ = GTEST_FLAG_GET(also_run_disabled_tests);\n    break_on_failure_ = GTEST_FLAG_GET(break_on_failure);\n    catch_exceptions_ = GTEST_FLAG_GET(catch_exceptions);\n    color_ = GTEST_FLAG_GET(color);\n    death_test_style_ = GTEST_FLAG_GET(death_test_style);\n    death_test_use_fork_ = GTEST_FLAG_GET(death_test_use_fork);\n    fail_fast_ = GTEST_FLAG_GET(fail_fast);\n    filter_ = GTEST_FLAG_GET(filter);\n    internal_run_death_test_ = GTEST_FLAG_GET(internal_run_death_test);\n    list_tests_ = GTEST_FLAG_GET(list_tests);\n    output_ = GTEST_FLAG_GET(output);\n    brief_ = GTEST_FLAG_GET(brief);\n    print_time_ = GTEST_FLAG_GET(print_time);\n    print_utf8_ = GTEST_FLAG_GET(print_utf8);\n    random_seed_ = GTEST_FLAG_GET(random_seed);\n    repeat_ = GTEST_FLAG_GET(repeat);\n    recreate_environments_when_repeating_ =\n        GTEST_FLAG_GET(recreate_environments_when_repeating);\n    shuffle_ = GTEST_FLAG_GET(shuffle);\n    stack_trace_depth_ = GTEST_FLAG_GET(stack_trace_depth);\n    stream_result_to_ = GTEST_FLAG_GET(stream_result_to);\n    throw_on_failure_ = GTEST_FLAG_GET(throw_on_failure);\n  }\n\n  // The d'tor is not virtual.  DO NOT INHERIT FROM THIS CLASS.\n  ~GTestFlagSaver() {\n    GTEST_FLAG_SET(also_run_disabled_tests, also_run_disabled_tests_);\n    GTEST_FLAG_SET(break_on_failure, break_on_failure_);\n    GTEST_FLAG_SET(catch_exceptions, catch_exceptions_);\n    GTEST_FLAG_SET(color, color_);\n    GTEST_FLAG_SET(death_test_style, death_test_style_);\n    GTEST_FLAG_SET(death_test_use_fork, death_test_use_fork_);\n    GTEST_FLAG_SET(filter, filter_);\n    GTEST_FLAG_SET(fail_fast, fail_fast_);\n    GTEST_FLAG_SET(internal_run_death_test, internal_run_death_test_);\n    GTEST_FLAG_SET(list_tests, list_tests_);\n    GTEST_FLAG_SET(output, output_);\n    GTEST_FLAG_SET(brief, brief_);\n    GTEST_FLAG_SET(print_time, print_time_);\n    GTEST_FLAG_SET(print_utf8, print_utf8_);\n    GTEST_FLAG_SET(random_seed, random_seed_);\n    GTEST_FLAG_SET(repeat, repeat_);\n    GTEST_FLAG_SET(recreate_environments_when_repeating,\n                   recreate_environments_when_repeating_);\n    GTEST_FLAG_SET(shuffle, shuffle_);\n    GTEST_FLAG_SET(stack_trace_depth, stack_trace_depth_);\n    GTEST_FLAG_SET(stream_result_to, stream_result_to_);\n    GTEST_FLAG_SET(throw_on_failure, throw_on_failure_);\n  }\n\n private:\n  // Fields for saving the original values of flags.\n  bool also_run_disabled_tests_;\n  bool break_on_failure_;\n  bool catch_exceptions_;\n  std::string color_;\n  std::string death_test_style_;\n  bool death_test_use_fork_;\n  bool fail_fast_;\n  std::string filter_;\n  std::string internal_run_death_test_;\n  bool list_tests_;\n  std::string output_;\n  bool brief_;\n  bool print_time_;\n  bool print_utf8_;\n  int32_t random_seed_;\n  int32_t repeat_;\n  bool recreate_environments_when_repeating_;\n  bool shuffle_;\n  int32_t stack_trace_depth_;\n  std::string stream_result_to_;\n  bool throw_on_failure_;\n} GTEST_ATTRIBUTE_UNUSED_;\n\n// Converts a Unicode code point to a narrow string in UTF-8 encoding.\n// code_point parameter is of type UInt32 because wchar_t may not be\n// wide enough to contain a code point.\n// If the code_point is not a valid Unicode code point\n// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted\n// to \"(Invalid Unicode 0xXXXXXXXX)\".\nGTEST_API_ std::string CodePointToUtf8(uint32_t code_point);\n\n// Converts a wide string to a narrow string in UTF-8 encoding.\n// The wide string is assumed to have the following encoding:\n//   UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin)\n//   UTF-32 if sizeof(wchar_t) == 4 (on Linux)\n// Parameter str points to a null-terminated wide string.\n// Parameter num_chars may additionally limit the number\n// of wchar_t characters processed. -1 is used when the entire string\n// should be processed.\n// If the string contains code points that are not valid Unicode code points\n// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output\n// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding\n// and contains invalid UTF-16 surrogate pairs, values in those pairs\n// will be encoded as individual Unicode characters from Basic Normal Plane.\nGTEST_API_ std::string WideStringToUtf8(const wchar_t* str, int num_chars);\n\n// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file\n// if the variable is present. If a file already exists at this location, this\n// function will write over it. If the variable is present, but the file cannot\n// be created, prints an error and exits.\nvoid WriteToShardStatusFileIfNeeded();\n\n// Checks whether sharding is enabled by examining the relevant\n// environment variable values. If the variables are present,\n// but inconsistent (e.g., shard_index >= total_shards), prints\n// an error and exits. If in_subprocess_for_death_test, sharding is\n// disabled because it must only be applied to the original test\n// process. Otherwise, we could filter out death tests we intended to execute.\nGTEST_API_ bool ShouldShard(const char* total_shards_str,\n                            const char* shard_index_str,\n                            bool in_subprocess_for_death_test);\n\n// Parses the environment variable var as a 32-bit integer. If it is unset,\n// returns default_val. If it is not a 32-bit integer, prints an error and\n// and aborts.\nGTEST_API_ int32_t Int32FromEnvOrDie(const char* env_var, int32_t default_val);\n\n// Given the total number of shards, the shard index, and the test id,\n// returns true if and only if the test should be run on this shard. The test id\n// is some arbitrary but unique non-negative integer assigned to each test\n// method. Assumes that 0 <= shard_index < total_shards.\nGTEST_API_ bool ShouldRunTestOnShard(int total_shards, int shard_index,\n                                     int test_id);\n\n// STL container utilities.\n\n// Returns the number of elements in the given container that satisfy\n// the given predicate.\ntemplate <class Container, typename Predicate>\ninline int CountIf(const Container& c, Predicate predicate) {\n  // Implemented as an explicit loop since std::count_if() in libCstd on\n  // Solaris has a non-standard signature.\n  int count = 0;\n  for (auto it = c.begin(); it != c.end(); ++it) {\n    if (predicate(*it)) ++count;\n  }\n  return count;\n}\n\n// Applies a function/functor to each element in the container.\ntemplate <class Container, typename Functor>\nvoid ForEach(const Container& c, Functor functor) {\n  std::for_each(c.begin(), c.end(), functor);\n}\n\n// Returns the i-th element of the vector, or default_value if i is not\n// in range [0, v.size()).\ntemplate <typename E>\ninline E GetElementOr(const std::vector<E>& v, int i, E default_value) {\n  return (i < 0 || i >= static_cast<int>(v.size())) ? default_value\n                                                    : v[static_cast<size_t>(i)];\n}\n\n// Performs an in-place shuffle of a range of the vector's elements.\n// 'begin' and 'end' are element indices as an STL-style range;\n// i.e. [begin, end) are shuffled, where 'end' == size() means to\n// shuffle to the end of the vector.\ntemplate <typename E>\nvoid ShuffleRange(internal::Random* random, int begin, int end,\n                  std::vector<E>* v) {\n  const int size = static_cast<int>(v->size());\n  GTEST_CHECK_(0 <= begin && begin <= size)\n      << \"Invalid shuffle range start \" << begin << \": must be in range [0, \"\n      << size << \"].\";\n  GTEST_CHECK_(begin <= end && end <= size)\n      << \"Invalid shuffle range finish \" << end << \": must be in range [\"\n      << begin << \", \" << size << \"].\";\n\n  // Fisher-Yates shuffle, from\n  // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle\n  for (int range_width = end - begin; range_width >= 2; range_width--) {\n    const int last_in_range = begin + range_width - 1;\n    const int selected =\n        begin +\n        static_cast<int>(random->Generate(static_cast<uint32_t>(range_width)));\n    std::swap((*v)[static_cast<size_t>(selected)],\n              (*v)[static_cast<size_t>(last_in_range)]);\n  }\n}\n\n// Performs an in-place shuffle of the vector's elements.\ntemplate <typename E>\ninline void Shuffle(internal::Random* random, std::vector<E>* v) {\n  ShuffleRange(random, 0, static_cast<int>(v->size()), v);\n}\n\n// A function for deleting an object.  Handy for being used as a\n// functor.\ntemplate <typename T>\nstatic void Delete(T* x) {\n  delete x;\n}\n\n// A predicate that checks the key of a TestProperty against a known key.\n//\n// TestPropertyKeyIs is copyable.\nclass TestPropertyKeyIs {\n public:\n  // Constructor.\n  //\n  // TestPropertyKeyIs has NO default constructor.\n  explicit TestPropertyKeyIs(const std::string& key) : key_(key) {}\n\n  // Returns true if and only if the test name of test property matches on key_.\n  bool operator()(const TestProperty& test_property) const {\n    return test_property.key() == key_;\n  }\n\n private:\n  std::string key_;\n};\n\n// Class UnitTestOptions.\n//\n// This class contains functions for processing options the user\n// specifies when running the tests.  It has only static members.\n//\n// In most cases, the user can specify an option using either an\n// environment variable or a command line flag.  E.g. you can set the\n// test filter using either GTEST_FILTER or --gtest_filter.  If both\n// the variable and the flag are present, the latter overrides the\n// former.\nclass GTEST_API_ UnitTestOptions {\n public:\n  // Functions for processing the gtest_output flag.\n\n  // Returns the output format, or \"\" for normal printed output.\n  static std::string GetOutputFormat();\n\n  // Returns the absolute path of the requested output file, or the\n  // default (test_detail.xml in the original working directory) if\n  // none was explicitly specified.\n  static std::string GetAbsolutePathToOutputFile();\n\n  // Functions for processing the gtest_filter flag.\n\n  // Returns true if and only if the user-specified filter matches the test\n  // suite name and the test name.\n  static bool FilterMatchesTest(const std::string& test_suite_name,\n                                const std::string& test_name);\n\n#if GTEST_OS_WINDOWS\n  // Function for supporting the gtest_catch_exception flag.\n\n  // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the\n  // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise.\n  // This function is useful as an __except condition.\n  static int GTestShouldProcessSEH(DWORD exception_code);\n#endif  // GTEST_OS_WINDOWS\n\n  // Returns true if \"name\" matches the ':' separated list of glob-style\n  // filters in \"filter\".\n  static bool MatchesFilter(const std::string& name, const char* filter);\n};\n\n// Returns the current application's name, removing directory path if that\n// is present.  Used by UnitTestOptions::GetOutputFile.\nGTEST_API_ FilePath GetCurrentExecutableName();\n\n// The role interface for getting the OS stack trace as a string.\nclass OsStackTraceGetterInterface {\n public:\n  OsStackTraceGetterInterface() {}\n  virtual ~OsStackTraceGetterInterface() {}\n\n  // Returns the current OS stack trace as an std::string.  Parameters:\n  //\n  //   max_depth  - the maximum number of stack frames to be included\n  //                in the trace.\n  //   skip_count - the number of top frames to be skipped; doesn't count\n  //                against max_depth.\n  virtual std::string CurrentStackTrace(int max_depth, int skip_count) = 0;\n\n  // UponLeavingGTest() should be called immediately before Google Test calls\n  // user code. It saves some information about the current stack that\n  // CurrentStackTrace() will use to find and hide Google Test stack frames.\n  virtual void UponLeavingGTest() = 0;\n\n  // This string is inserted in place of stack frames that are part of\n  // Google Test's implementation.\n  static const char* const kElidedFramesMarker;\n\n private:\n  OsStackTraceGetterInterface(const OsStackTraceGetterInterface&) = delete;\n  OsStackTraceGetterInterface& operator=(const OsStackTraceGetterInterface&) =\n      delete;\n};\n\n// A working implementation of the OsStackTraceGetterInterface interface.\nclass OsStackTraceGetter : public OsStackTraceGetterInterface {\n public:\n  OsStackTraceGetter() {}\n\n  std::string CurrentStackTrace(int max_depth, int skip_count) override;\n  void UponLeavingGTest() override;\n\n private:\n#if GTEST_HAS_ABSL\n  Mutex mutex_;  // Protects all internal state.\n\n  // We save the stack frame below the frame that calls user code.\n  // We do this because the address of the frame immediately below\n  // the user code changes between the call to UponLeavingGTest()\n  // and any calls to the stack trace code from within the user code.\n  void* caller_frame_ = nullptr;\n#endif  // GTEST_HAS_ABSL\n\n  OsStackTraceGetter(const OsStackTraceGetter&) = delete;\n  OsStackTraceGetter& operator=(const OsStackTraceGetter&) = delete;\n};\n\n// Information about a Google Test trace point.\nstruct TraceInfo {\n  const char* file;\n  int line;\n  std::string message;\n};\n\n// This is the default global test part result reporter used in UnitTestImpl.\n// This class should only be used by UnitTestImpl.\nclass DefaultGlobalTestPartResultReporter\n    : public TestPartResultReporterInterface {\n public:\n  explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test);\n  // Implements the TestPartResultReporterInterface. Reports the test part\n  // result in the current test.\n  void ReportTestPartResult(const TestPartResult& result) override;\n\n private:\n  UnitTestImpl* const unit_test_;\n\n  DefaultGlobalTestPartResultReporter(\n      const DefaultGlobalTestPartResultReporter&) = delete;\n  DefaultGlobalTestPartResultReporter& operator=(\n      const DefaultGlobalTestPartResultReporter&) = delete;\n};\n\n// This is the default per thread test part result reporter used in\n// UnitTestImpl. This class should only be used by UnitTestImpl.\nclass DefaultPerThreadTestPartResultReporter\n    : public TestPartResultReporterInterface {\n public:\n  explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test);\n  // Implements the TestPartResultReporterInterface. The implementation just\n  // delegates to the current global test part result reporter of *unit_test_.\n  void ReportTestPartResult(const TestPartResult& result) override;\n\n private:\n  UnitTestImpl* const unit_test_;\n\n  DefaultPerThreadTestPartResultReporter(\n      const DefaultPerThreadTestPartResultReporter&) = delete;\n  DefaultPerThreadTestPartResultReporter& operator=(\n      const DefaultPerThreadTestPartResultReporter&) = delete;\n};\n\n// The private implementation of the UnitTest class.  We don't protect\n// the methods under a mutex, as this class is not accessible by a\n// user and the UnitTest class that delegates work to this class does\n// proper locking.\nclass GTEST_API_ UnitTestImpl {\n public:\n  explicit UnitTestImpl(UnitTest* parent);\n  virtual ~UnitTestImpl();\n\n  // There are two different ways to register your own TestPartResultReporter.\n  // You can register your own repoter to listen either only for test results\n  // from the current thread or for results from all threads.\n  // By default, each per-thread test result repoter just passes a new\n  // TestPartResult to the global test result reporter, which registers the\n  // test part result for the currently running test.\n\n  // Returns the global test part result reporter.\n  TestPartResultReporterInterface* GetGlobalTestPartResultReporter();\n\n  // Sets the global test part result reporter.\n  void SetGlobalTestPartResultReporter(\n      TestPartResultReporterInterface* reporter);\n\n  // Returns the test part result reporter for the current thread.\n  TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread();\n\n  // Sets the test part result reporter for the current thread.\n  void SetTestPartResultReporterForCurrentThread(\n      TestPartResultReporterInterface* reporter);\n\n  // Gets the number of successful test suites.\n  int successful_test_suite_count() const;\n\n  // Gets the number of failed test suites.\n  int failed_test_suite_count() const;\n\n  // Gets the number of all test suites.\n  int total_test_suite_count() const;\n\n  // Gets the number of all test suites that contain at least one test\n  // that should run.\n  int test_suite_to_run_count() const;\n\n  // Gets the number of successful tests.\n  int successful_test_count() const;\n\n  // Gets the number of skipped tests.\n  int skipped_test_count() const;\n\n  // Gets the number of failed tests.\n  int failed_test_count() const;\n\n  // Gets the number of disabled tests that will be reported in the XML report.\n  int reportable_disabled_test_count() const;\n\n  // Gets the number of disabled tests.\n  int disabled_test_count() const;\n\n  // Gets the number of tests to be printed in the XML report.\n  int reportable_test_count() const;\n\n  // Gets the number of all tests.\n  int total_test_count() const;\n\n  // Gets the number of tests that should run.\n  int test_to_run_count() const;\n\n  // Gets the time of the test program start, in ms from the start of the\n  // UNIX epoch.\n  TimeInMillis start_timestamp() const { return start_timestamp_; }\n\n  // Gets the elapsed time, in milliseconds.\n  TimeInMillis elapsed_time() const { return elapsed_time_; }\n\n  // Returns true if and only if the unit test passed (i.e. all test suites\n  // passed).\n  bool Passed() const { return !Failed(); }\n\n  // Returns true if and only if the unit test failed (i.e. some test suite\n  // failed or something outside of all tests failed).\n  bool Failed() const {\n    return failed_test_suite_count() > 0 || ad_hoc_test_result()->Failed();\n  }\n\n  // Gets the i-th test suite among all the test suites. i can range from 0 to\n  // total_test_suite_count() - 1. If i is not in that range, returns NULL.\n  const TestSuite* GetTestSuite(int i) const {\n    const int index = GetElementOr(test_suite_indices_, i, -1);\n    return index < 0 ? nullptr : test_suites_[static_cast<size_t>(i)];\n  }\n\n  //  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  const TestCase* GetTestCase(int i) const { return GetTestSuite(i); }\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  // Gets the i-th test suite among all the test suites. i can range from 0 to\n  // total_test_suite_count() - 1. If i is not in that range, returns NULL.\n  TestSuite* GetMutableSuiteCase(int i) {\n    const int index = GetElementOr(test_suite_indices_, i, -1);\n    return index < 0 ? nullptr : test_suites_[static_cast<size_t>(index)];\n  }\n\n  // Provides access to the event listener list.\n  TestEventListeners* listeners() { return &listeners_; }\n\n  // Returns the TestResult for the test that's currently running, or\n  // the TestResult for the ad hoc test if no test is running.\n  TestResult* current_test_result();\n\n  // Returns the TestResult for the ad hoc test.\n  const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; }\n\n  // Sets the OS stack trace getter.\n  //\n  // Does nothing if the input and the current OS stack trace getter\n  // are the same; otherwise, deletes the old getter and makes the\n  // input the current getter.\n  void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter);\n\n  // Returns the current OS stack trace getter if it is not NULL;\n  // otherwise, creates an OsStackTraceGetter, makes it the current\n  // getter, and returns it.\n  OsStackTraceGetterInterface* os_stack_trace_getter();\n\n  // Returns the current OS stack trace as an std::string.\n  //\n  // The maximum number of stack frames to be included is specified by\n  // the gtest_stack_trace_depth flag.  The skip_count parameter\n  // specifies the number of top frames to be skipped, which doesn't\n  // count against the number of frames to be included.\n  //\n  // For example, if Foo() calls Bar(), which in turn calls\n  // CurrentOsStackTraceExceptTop(1), Foo() will be included in the\n  // trace but Bar() and CurrentOsStackTraceExceptTop() won't.\n  std::string CurrentOsStackTraceExceptTop(int skip_count)\n      GTEST_NO_INLINE_ GTEST_NO_TAIL_CALL_;\n\n  // Finds and returns a TestSuite with the given name.  If one doesn't\n  // exist, creates one and returns it.\n  //\n  // Arguments:\n  //\n  //   test_suite_name: name of the test suite\n  //   type_param:      the name of the test's type parameter, or NULL if\n  //                    this is not a typed or a type-parameterized test.\n  //   set_up_tc:       pointer to the function that sets up the test suite\n  //   tear_down_tc:    pointer to the function that tears down the test suite\n  TestSuite* GetTestSuite(const char* test_suite_name, const char* type_param,\n                          internal::SetUpTestSuiteFunc set_up_tc,\n                          internal::TearDownTestSuiteFunc tear_down_tc);\n\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  TestCase* GetTestCase(const char* test_case_name, const char* type_param,\n                        internal::SetUpTestSuiteFunc set_up_tc,\n                        internal::TearDownTestSuiteFunc tear_down_tc) {\n    return GetTestSuite(test_case_name, type_param, set_up_tc, tear_down_tc);\n  }\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  // Adds a TestInfo to the unit test.\n  //\n  // Arguments:\n  //\n  //   set_up_tc:    pointer to the function that sets up the test suite\n  //   tear_down_tc: pointer to the function that tears down the test suite\n  //   test_info:    the TestInfo object\n  void AddTestInfo(internal::SetUpTestSuiteFunc set_up_tc,\n                   internal::TearDownTestSuiteFunc tear_down_tc,\n                   TestInfo* test_info) {\n#if GTEST_HAS_DEATH_TEST\n    // In order to support thread-safe death tests, we need to\n    // remember the original working directory when the test program\n    // was first invoked.  We cannot do this in RUN_ALL_TESTS(), as\n    // the user may have changed the current directory before calling\n    // RUN_ALL_TESTS().  Therefore we capture the current directory in\n    // AddTestInfo(), which is called to register a TEST or TEST_F\n    // before main() is reached.\n    if (original_working_dir_.IsEmpty()) {\n      original_working_dir_.Set(FilePath::GetCurrentDir());\n      GTEST_CHECK_(!original_working_dir_.IsEmpty())\n          << \"Failed to get the current working directory.\";\n    }\n#endif  // GTEST_HAS_DEATH_TEST\n\n    GetTestSuite(test_info->test_suite_name(), test_info->type_param(),\n                 set_up_tc, tear_down_tc)\n        ->AddTestInfo(test_info);\n  }\n\n  // Returns ParameterizedTestSuiteRegistry object used to keep track of\n  // value-parameterized tests and instantiate and register them.\n  internal::ParameterizedTestSuiteRegistry& parameterized_test_registry() {\n    return parameterized_test_registry_;\n  }\n\n  std::set<std::string>* ignored_parameterized_test_suites() {\n    return &ignored_parameterized_test_suites_;\n  }\n\n  // Returns TypeParameterizedTestSuiteRegistry object used to keep track of\n  // type-parameterized tests and instantiations of them.\n  internal::TypeParameterizedTestSuiteRegistry&\n  type_parameterized_test_registry() {\n    return type_parameterized_test_registry_;\n  }\n\n  // Sets the TestSuite object for the test that's currently running.\n  void set_current_test_suite(TestSuite* a_current_test_suite) {\n    current_test_suite_ = a_current_test_suite;\n  }\n\n  // Sets the TestInfo object for the test that's currently running.  If\n  // current_test_info is NULL, the assertion results will be stored in\n  // ad_hoc_test_result_.\n  void set_current_test_info(TestInfo* a_current_test_info) {\n    current_test_info_ = a_current_test_info;\n  }\n\n  // Registers all parameterized tests defined using TEST_P and\n  // INSTANTIATE_TEST_SUITE_P, creating regular tests for each test/parameter\n  // combination. This method can be called more then once; it has guards\n  // protecting from registering the tests more then once.  If\n  // value-parameterized tests are disabled, RegisterParameterizedTests is\n  // present but does nothing.\n  void RegisterParameterizedTests();\n\n  // Runs all tests in this UnitTest object, prints the result, and\n  // returns true if all tests are successful.  If any exception is\n  // thrown during a test, this test is considered to be failed, but\n  // the rest of the tests will still be run.\n  bool RunAllTests();\n\n  // Clears the results of all tests, except the ad hoc tests.\n  void ClearNonAdHocTestResult() {\n    ForEach(test_suites_, TestSuite::ClearTestSuiteResult);\n  }\n\n  // Clears the results of ad-hoc test assertions.\n  void ClearAdHocTestResult() { ad_hoc_test_result_.Clear(); }\n\n  // Adds a TestProperty to the current TestResult object when invoked in a\n  // context of a test or a test suite, or to the global property set. If the\n  // result already contains a property with the same key, the value will be\n  // updated.\n  void RecordProperty(const TestProperty& test_property);\n\n  enum ReactionToSharding { HONOR_SHARDING_PROTOCOL, IGNORE_SHARDING_PROTOCOL };\n\n  // Matches the full name of each test against the user-specified\n  // filter to decide whether the test should run, then records the\n  // result in each TestSuite and TestInfo object.\n  // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests\n  // based on sharding variables in the environment.\n  // Returns the number of tests that should run.\n  int FilterTests(ReactionToSharding shard_tests);\n\n  // Prints the names of the tests matching the user-specified filter flag.\n  void ListTestsMatchingFilter();\n\n  const TestSuite* current_test_suite() const { return current_test_suite_; }\n  TestInfo* current_test_info() { return current_test_info_; }\n  const TestInfo* current_test_info() const { return current_test_info_; }\n\n  // Returns the vector of environments that need to be set-up/torn-down\n  // before/after the tests are run.\n  std::vector<Environment*>& environments() { return environments_; }\n\n  // Getters for the per-thread Google Test trace stack.\n  std::vector<TraceInfo>& gtest_trace_stack() {\n    return *(gtest_trace_stack_.pointer());\n  }\n  const std::vector<TraceInfo>& gtest_trace_stack() const {\n    return gtest_trace_stack_.get();\n  }\n\n#if GTEST_HAS_DEATH_TEST\n  void InitDeathTestSubprocessControlInfo() {\n    internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag());\n  }\n  // Returns a pointer to the parsed --gtest_internal_run_death_test\n  // flag, or NULL if that flag was not specified.\n  // This information is useful only in a death test child process.\n  // Must not be called before a call to InitGoogleTest.\n  const InternalRunDeathTestFlag* internal_run_death_test_flag() const {\n    return internal_run_death_test_flag_.get();\n  }\n\n  // Returns a pointer to the current death test factory.\n  internal::DeathTestFactory* death_test_factory() {\n    return death_test_factory_.get();\n  }\n\n  void SuppressTestEventsIfInSubprocess();\n\n  friend class ReplaceDeathTestFactory;\n#endif  // GTEST_HAS_DEATH_TEST\n\n  // Initializes the event listener performing XML output as specified by\n  // UnitTestOptions. Must not be called before InitGoogleTest.\n  void ConfigureXmlOutput();\n\n#if GTEST_CAN_STREAM_RESULTS_\n  // Initializes the event listener for streaming test results to a socket.\n  // Must not be called before InitGoogleTest.\n  void ConfigureStreamingOutput();\n#endif\n\n  // Performs initialization dependent upon flag values obtained in\n  // ParseGoogleTestFlagsOnly.  Is called from InitGoogleTest after the call to\n  // ParseGoogleTestFlagsOnly.  In case a user neglects to call InitGoogleTest\n  // this function is also called from RunAllTests.  Since this function can be\n  // called more than once, it has to be idempotent.\n  void PostFlagParsingInit();\n\n  // Gets the random seed used at the start of the current test iteration.\n  int random_seed() const { return random_seed_; }\n\n  // Gets the random number generator.\n  internal::Random* random() { return &random_; }\n\n  // Shuffles all test suites, and the tests within each test suite,\n  // making sure that death tests are still run first.\n  void ShuffleTests();\n\n  // Restores the test suites and tests to their order before the first shuffle.\n  void UnshuffleTests();\n\n  // Returns the value of GTEST_FLAG(catch_exceptions) at the moment\n  // UnitTest::Run() starts.\n  bool catch_exceptions() const { return catch_exceptions_; }\n\n private:\n  friend class ::testing::UnitTest;\n\n  // Used by UnitTest::Run() to capture the state of\n  // GTEST_FLAG(catch_exceptions) at the moment it starts.\n  void set_catch_exceptions(bool value) { catch_exceptions_ = value; }\n\n  // The UnitTest object that owns this implementation object.\n  UnitTest* const parent_;\n\n  // The working directory when the first TEST() or TEST_F() was\n  // executed.\n  internal::FilePath original_working_dir_;\n\n  // The default test part result reporters.\n  DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_;\n  DefaultPerThreadTestPartResultReporter\n      default_per_thread_test_part_result_reporter_;\n\n  // Points to (but doesn't own) the global test part result reporter.\n  TestPartResultReporterInterface* global_test_part_result_repoter_;\n\n  // Protects read and write access to global_test_part_result_reporter_.\n  internal::Mutex global_test_part_result_reporter_mutex_;\n\n  // Points to (but doesn't own) the per-thread test part result reporter.\n  internal::ThreadLocal<TestPartResultReporterInterface*>\n      per_thread_test_part_result_reporter_;\n\n  // The vector of environments that need to be set-up/torn-down\n  // before/after the tests are run.\n  std::vector<Environment*> environments_;\n\n  // The vector of TestSuites in their original order.  It owns the\n  // elements in the vector.\n  std::vector<TestSuite*> test_suites_;\n\n  // Provides a level of indirection for the test suite list to allow\n  // easy shuffling and restoring the test suite order.  The i-th\n  // element of this vector is the index of the i-th test suite in the\n  // shuffled order.\n  std::vector<int> test_suite_indices_;\n\n  // ParameterizedTestRegistry object used to register value-parameterized\n  // tests.\n  internal::ParameterizedTestSuiteRegistry parameterized_test_registry_;\n  internal::TypeParameterizedTestSuiteRegistry\n      type_parameterized_test_registry_;\n\n  // The set holding the name of parameterized\n  // test suites that may go uninstantiated.\n  std::set<std::string> ignored_parameterized_test_suites_;\n\n  // Indicates whether RegisterParameterizedTests() has been called already.\n  bool parameterized_tests_registered_;\n\n  // Index of the last death test suite registered.  Initially -1.\n  int last_death_test_suite_;\n\n  // This points to the TestSuite for the currently running test.  It\n  // changes as Google Test goes through one test suite after another.\n  // When no test is running, this is set to NULL and Google Test\n  // stores assertion results in ad_hoc_test_result_.  Initially NULL.\n  TestSuite* current_test_suite_;\n\n  // This points to the TestInfo for the currently running test.  It\n  // changes as Google Test goes through one test after another.  When\n  // no test is running, this is set to NULL and Google Test stores\n  // assertion results in ad_hoc_test_result_.  Initially NULL.\n  TestInfo* current_test_info_;\n\n  // Normally, a user only writes assertions inside a TEST or TEST_F,\n  // or inside a function called by a TEST or TEST_F.  Since Google\n  // Test keeps track of which test is current running, it can\n  // associate such an assertion with the test it belongs to.\n  //\n  // If an assertion is encountered when no TEST or TEST_F is running,\n  // Google Test attributes the assertion result to an imaginary \"ad hoc\"\n  // test, and records the result in ad_hoc_test_result_.\n  TestResult ad_hoc_test_result_;\n\n  // The list of event listeners that can be used to track events inside\n  // Google Test.\n  TestEventListeners listeners_;\n\n  // The OS stack trace getter.  Will be deleted when the UnitTest\n  // object is destructed.  By default, an OsStackTraceGetter is used,\n  // but the user can set this field to use a custom getter if that is\n  // desired.\n  OsStackTraceGetterInterface* os_stack_trace_getter_;\n\n  // True if and only if PostFlagParsingInit() has been called.\n  bool post_flag_parse_init_performed_;\n\n  // The random number seed used at the beginning of the test run.\n  int random_seed_;\n\n  // Our random number generator.\n  internal::Random random_;\n\n  // The time of the test program start, in ms from the start of the\n  // UNIX epoch.\n  TimeInMillis start_timestamp_;\n\n  // How long the test took to run, in milliseconds.\n  TimeInMillis elapsed_time_;\n\n#if GTEST_HAS_DEATH_TEST\n  // The decomposed components of the gtest_internal_run_death_test flag,\n  // parsed when RUN_ALL_TESTS is called.\n  std::unique_ptr<InternalRunDeathTestFlag> internal_run_death_test_flag_;\n  std::unique_ptr<internal::DeathTestFactory> death_test_factory_;\n#endif  // GTEST_HAS_DEATH_TEST\n\n  // A per-thread stack of traces created by the SCOPED_TRACE() macro.\n  internal::ThreadLocal<std::vector<TraceInfo> > gtest_trace_stack_;\n\n  // The value of GTEST_FLAG(catch_exceptions) at the moment RunAllTests()\n  // starts.\n  bool catch_exceptions_;\n\n  UnitTestImpl(const UnitTestImpl&) = delete;\n  UnitTestImpl& operator=(const UnitTestImpl&) = delete;\n};  // class UnitTestImpl\n\n// Convenience function for accessing the global UnitTest\n// implementation object.\ninline UnitTestImpl* GetUnitTestImpl() {\n  return UnitTest::GetInstance()->impl();\n}\n\n#if GTEST_USES_SIMPLE_RE\n\n// Internal helper functions for implementing the simple regular\n// expression matcher.\nGTEST_API_ bool IsInSet(char ch, const char* str);\nGTEST_API_ bool IsAsciiDigit(char ch);\nGTEST_API_ bool IsAsciiPunct(char ch);\nGTEST_API_ bool IsRepeat(char ch);\nGTEST_API_ bool IsAsciiWhiteSpace(char ch);\nGTEST_API_ bool IsAsciiWordChar(char ch);\nGTEST_API_ bool IsValidEscape(char ch);\nGTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch);\nGTEST_API_ bool ValidateRegex(const char* regex);\nGTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str);\nGTEST_API_ bool MatchRepetitionAndRegexAtHead(bool escaped, char ch,\n                                              char repeat, const char* regex,\n                                              const char* str);\nGTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str);\n\n#endif  // GTEST_USES_SIMPLE_RE\n\n// Parses the command line for Google Test flags, without initializing\n// other parts of Google Test.\nGTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, char** argv);\nGTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv);\n\n#if GTEST_HAS_DEATH_TEST\n\n// Returns the message describing the last system error, regardless of the\n// platform.\nGTEST_API_ std::string GetLastErrnoDescription();\n\n// Attempts to parse a string into a positive integer pointed to by the\n// number parameter.  Returns true if that is possible.\n// GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use\n// it here.\ntemplate <typename Integer>\nbool ParseNaturalNumber(const ::std::string& str, Integer* number) {\n  // Fail fast if the given string does not begin with a digit;\n  // this bypasses strtoXXX's \"optional leading whitespace and plus\n  // or minus sign\" semantics, which are undesirable here.\n  if (str.empty() || !IsDigit(str[0])) {\n    return false;\n  }\n  errno = 0;\n\n  char* end;\n  // BiggestConvertible is the largest integer type that system-provided\n  // string-to-number conversion routines can return.\n  using BiggestConvertible = unsigned long long;  // NOLINT\n\n  const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10);  // NOLINT\n  const bool parse_success = *end == '\\0' && errno == 0;\n\n  GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed));\n\n  const Integer result = static_cast<Integer>(parsed);\n  if (parse_success && static_cast<BiggestConvertible>(result) == parsed) {\n    *number = result;\n    return true;\n  }\n  return false;\n}\n#endif  // GTEST_HAS_DEATH_TEST\n\n// TestResult contains some private methods that should be hidden from\n// Google Test user but are required for testing. This class allow our tests\n// to access them.\n//\n// This class is supplied only for the purpose of testing Google Test's own\n// constructs. Do not use it in user tests, either directly or indirectly.\nclass TestResultAccessor {\n public:\n  static void RecordProperty(TestResult* test_result,\n                             const std::string& xml_element,\n                             const TestProperty& property) {\n    test_result->RecordProperty(xml_element, property);\n  }\n\n  static void ClearTestPartResults(TestResult* test_result) {\n    test_result->ClearTestPartResults();\n  }\n\n  static const std::vector<testing::TestPartResult>& test_part_results(\n      const TestResult& test_result) {\n    return test_result.test_part_results();\n  }\n};\n\n#if GTEST_CAN_STREAM_RESULTS_\n\n// Streams test results to the given port on the given host machine.\nclass StreamingListener : public EmptyTestEventListener {\n public:\n  // Abstract base class for writing strings to a socket.\n  class AbstractSocketWriter {\n   public:\n    virtual ~AbstractSocketWriter() {}\n\n    // Sends a string to the socket.\n    virtual void Send(const std::string& message) = 0;\n\n    // Closes the socket.\n    virtual void CloseConnection() {}\n\n    // Sends a string and a newline to the socket.\n    void SendLn(const std::string& message) { Send(message + \"\\n\"); }\n  };\n\n  // Concrete class for actually writing strings to a socket.\n  class SocketWriter : public AbstractSocketWriter {\n   public:\n    SocketWriter(const std::string& host, const std::string& port)\n        : sockfd_(-1), host_name_(host), port_num_(port) {\n      MakeConnection();\n    }\n\n    ~SocketWriter() override {\n      if (sockfd_ != -1) CloseConnection();\n    }\n\n    // Sends a string to the socket.\n    void Send(const std::string& message) override {\n      GTEST_CHECK_(sockfd_ != -1)\n          << \"Send() can be called only when there is a connection.\";\n\n      const auto len = static_cast<size_t>(message.length());\n      if (write(sockfd_, message.c_str(), len) != static_cast<ssize_t>(len)) {\n        GTEST_LOG_(WARNING) << \"stream_result_to: failed to stream to \"\n                            << host_name_ << \":\" << port_num_;\n      }\n    }\n\n   private:\n    // Creates a client socket and connects to the server.\n    void MakeConnection();\n\n    // Closes the socket.\n    void CloseConnection() override {\n      GTEST_CHECK_(sockfd_ != -1)\n          << \"CloseConnection() can be called only when there is a connection.\";\n\n      close(sockfd_);\n      sockfd_ = -1;\n    }\n\n    int sockfd_;  // socket file descriptor\n    const std::string host_name_;\n    const std::string port_num_;\n\n    SocketWriter(const SocketWriter&) = delete;\n    SocketWriter& operator=(const SocketWriter&) = delete;\n  };  // class SocketWriter\n\n  // Escapes '=', '&', '%', and '\\n' characters in str as \"%xx\".\n  static std::string UrlEncode(const char* str);\n\n  StreamingListener(const std::string& host, const std::string& port)\n      : socket_writer_(new SocketWriter(host, port)) {\n    Start();\n  }\n\n  explicit StreamingListener(AbstractSocketWriter* socket_writer)\n      : socket_writer_(socket_writer) {\n    Start();\n  }\n\n  void OnTestProgramStart(const UnitTest& /* unit_test */) override {\n    SendLn(\"event=TestProgramStart\");\n  }\n\n  void OnTestProgramEnd(const UnitTest& unit_test) override {\n    // Note that Google Test current only report elapsed time for each\n    // test iteration, not for the entire test program.\n    SendLn(\"event=TestProgramEnd&passed=\" + FormatBool(unit_test.Passed()));\n\n    // Notify the streaming server to stop.\n    socket_writer_->CloseConnection();\n  }\n\n  void OnTestIterationStart(const UnitTest& /* unit_test */,\n                            int iteration) override {\n    SendLn(\"event=TestIterationStart&iteration=\" +\n           StreamableToString(iteration));\n  }\n\n  void OnTestIterationEnd(const UnitTest& unit_test,\n                          int /* iteration */) override {\n    SendLn(\"event=TestIterationEnd&passed=\" + FormatBool(unit_test.Passed()) +\n           \"&elapsed_time=\" + StreamableToString(unit_test.elapsed_time()) +\n           \"ms\");\n  }\n\n  // Note that \"event=TestCaseStart\" is a wire format and has to remain\n  // \"case\" for compatibility\n  void OnTestSuiteStart(const TestSuite& test_suite) override {\n    SendLn(std::string(\"event=TestCaseStart&name=\") + test_suite.name());\n  }\n\n  // Note that \"event=TestCaseEnd\" is a wire format and has to remain\n  // \"case\" for compatibility\n  void OnTestSuiteEnd(const TestSuite& test_suite) override {\n    SendLn(\"event=TestCaseEnd&passed=\" + FormatBool(test_suite.Passed()) +\n           \"&elapsed_time=\" + StreamableToString(test_suite.elapsed_time()) +\n           \"ms\");\n  }\n\n  void OnTestStart(const TestInfo& test_info) override {\n    SendLn(std::string(\"event=TestStart&name=\") + test_info.name());\n  }\n\n  void OnTestEnd(const TestInfo& test_info) override {\n    SendLn(\"event=TestEnd&passed=\" +\n           FormatBool((test_info.result())->Passed()) + \"&elapsed_time=\" +\n           StreamableToString((test_info.result())->elapsed_time()) + \"ms\");\n  }\n\n  void OnTestPartResult(const TestPartResult& test_part_result) override {\n    const char* file_name = test_part_result.file_name();\n    if (file_name == nullptr) file_name = \"\";\n    SendLn(\"event=TestPartResult&file=\" + UrlEncode(file_name) +\n           \"&line=\" + StreamableToString(test_part_result.line_number()) +\n           \"&message=\" + UrlEncode(test_part_result.message()));\n  }\n\n private:\n  // Sends the given message and a newline to the socket.\n  void SendLn(const std::string& message) { socket_writer_->SendLn(message); }\n\n  // Called at the start of streaming to notify the receiver what\n  // protocol we are using.\n  void Start() { SendLn(\"gtest_streaming_protocol_version=1.0\"); }\n\n  std::string FormatBool(bool value) { return value ? \"1\" : \"0\"; }\n\n  const std::unique_ptr<AbstractSocketWriter> socket_writer_;\n\n  StreamingListener(const StreamingListener&) = delete;\n  StreamingListener& operator=(const StreamingListener&) = delete;\n};  // class StreamingListener\n\n#endif  // GTEST_CAN_STREAM_RESULTS_\n\n}  // namespace internal\n}  // namespace testing\n\nGTEST_DISABLE_MSC_WARNINGS_POP_()  //  4251\n\n#endif  // GOOGLETEST_SRC_GTEST_INTERNAL_INL_H_\n"
  },
  {
    "path": "tests/gtest/src/gtest-matchers.cc",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// The Google C++ Testing and Mocking Framework (Google Test)\n//\n// This file implements just enough of the matcher interface to allow\n// EXPECT_DEATH and friends to accept a matcher argument.\n\n#include \"gtest/gtest-matchers.h\"\n\n#include <string>\n\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-port.h\"\n\nnamespace testing {\n\n// Constructs a matcher that matches a const std::string& whose value is\n// equal to s.\nMatcher<const std::string&>::Matcher(const std::string& s) { *this = Eq(s); }\n\n// Constructs a matcher that matches a const std::string& whose value is\n// equal to s.\nMatcher<const std::string&>::Matcher(const char* s) {\n  *this = Eq(std::string(s));\n}\n\n// Constructs a matcher that matches a std::string whose value is equal to\n// s.\nMatcher<std::string>::Matcher(const std::string& s) { *this = Eq(s); }\n\n// Constructs a matcher that matches a std::string whose value is equal to\n// s.\nMatcher<std::string>::Matcher(const char* s) { *this = Eq(std::string(s)); }\n\n#if GTEST_INTERNAL_HAS_STRING_VIEW\n// Constructs a matcher that matches a const StringView& whose value is\n// equal to s.\nMatcher<const internal::StringView&>::Matcher(const std::string& s) {\n  *this = Eq(s);\n}\n\n// Constructs a matcher that matches a const StringView& whose value is\n// equal to s.\nMatcher<const internal::StringView&>::Matcher(const char* s) {\n  *this = Eq(std::string(s));\n}\n\n// Constructs a matcher that matches a const StringView& whose value is\n// equal to s.\nMatcher<const internal::StringView&>::Matcher(internal::StringView s) {\n  *this = Eq(std::string(s));\n}\n\n// Constructs a matcher that matches a StringView whose value is equal to\n// s.\nMatcher<internal::StringView>::Matcher(const std::string& s) { *this = Eq(s); }\n\n// Constructs a matcher that matches a StringView whose value is equal to\n// s.\nMatcher<internal::StringView>::Matcher(const char* s) {\n  *this = Eq(std::string(s));\n}\n\n// Constructs a matcher that matches a StringView whose value is equal to\n// s.\nMatcher<internal::StringView>::Matcher(internal::StringView s) {\n  *this = Eq(std::string(s));\n}\n#endif  // GTEST_INTERNAL_HAS_STRING_VIEW\n\n}  // namespace testing\n"
  },
  {
    "path": "tests/gtest/src/gtest-port.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include \"gtest/internal/gtest-port.h\"\n\n#include <limits.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include <cstdint>\n#include <fstream>\n#include <memory>\n\n#if GTEST_OS_WINDOWS\n#include <io.h>\n#include <sys/stat.h>\n#include <windows.h>\n\n#include <map>  // Used in ThreadLocal.\n#ifdef _MSC_VER\n#include <crtdbg.h>\n#endif  // _MSC_VER\n#else\n#include <unistd.h>\n#endif  // GTEST_OS_WINDOWS\n\n#if GTEST_OS_MAC\n#include <mach/mach_init.h>\n#include <mach/task.h>\n#include <mach/vm_map.h>\n#endif  // GTEST_OS_MAC\n\n#if GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \\\n    GTEST_OS_NETBSD || GTEST_OS_OPENBSD\n#include <sys/sysctl.h>\n#if GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD\n#include <sys/user.h>\n#endif\n#endif\n\n#if GTEST_OS_QNX\n#include <devctl.h>\n#include <fcntl.h>\n#include <sys/procfs.h>\n#endif  // GTEST_OS_QNX\n\n#if GTEST_OS_AIX\n#include <procinfo.h>\n#include <sys/types.h>\n#endif  // GTEST_OS_AIX\n\n#if GTEST_OS_FUCHSIA\n#include <zircon/process.h>\n#include <zircon/syscalls.h>\n#endif  // GTEST_OS_FUCHSIA\n\n#include \"gtest/gtest-message.h\"\n#include \"gtest/gtest-spi.h\"\n#include \"gtest/internal/gtest-internal.h\"\n#include \"gtest/internal/gtest-string.h\"\n#include \"src/gtest-internal-inl.h\"\n\nnamespace testing {\nnamespace internal {\n\n#if GTEST_OS_LINUX || GTEST_OS_GNU_HURD\n\nnamespace {\ntemplate <typename T>\nT ReadProcFileField(const std::string& filename, int field) {\n  std::string dummy;\n  std::ifstream file(filename.c_str());\n  while (field-- > 0) {\n    file >> dummy;\n  }\n  T output = 0;\n  file >> output;\n  return output;\n}\n}  // namespace\n\n// Returns the number of active threads, or 0 when there is an error.\nsize_t GetThreadCount() {\n  const std::string filename =\n      (Message() << \"/proc/\" << getpid() << \"/stat\").GetString();\n  return ReadProcFileField<size_t>(filename, 19);\n}\n\n#elif GTEST_OS_MAC\n\nsize_t GetThreadCount() {\n  const task_t task = mach_task_self();\n  mach_msg_type_number_t thread_count;\n  thread_act_array_t thread_list;\n  const kern_return_t status = task_threads(task, &thread_list, &thread_count);\n  if (status == KERN_SUCCESS) {\n    // task_threads allocates resources in thread_list and we need to free them\n    // to avoid leaks.\n    vm_deallocate(task, reinterpret_cast<vm_address_t>(thread_list),\n                  sizeof(thread_t) * thread_count);\n    return static_cast<size_t>(thread_count);\n  } else {\n    return 0;\n  }\n}\n\n#elif GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \\\n    GTEST_OS_NETBSD\n\n#if GTEST_OS_NETBSD\n#undef KERN_PROC\n#define KERN_PROC KERN_PROC2\n#define kinfo_proc kinfo_proc2\n#endif\n\n#if GTEST_OS_DRAGONFLY\n#define KP_NLWP(kp) (kp.kp_nthreads)\n#elif GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD\n#define KP_NLWP(kp) (kp.ki_numthreads)\n#elif GTEST_OS_NETBSD\n#define KP_NLWP(kp) (kp.p_nlwps)\n#endif\n\n// Returns the number of threads running in the process, or 0 to indicate that\n// we cannot detect it.\nsize_t GetThreadCount() {\n  int mib[] = {\n    CTL_KERN,\n    KERN_PROC,\n    KERN_PROC_PID,\n    getpid(),\n#if GTEST_OS_NETBSD\n    sizeof(struct kinfo_proc),\n    1,\n#endif\n  };\n  u_int miblen = sizeof(mib) / sizeof(mib[0]);\n  struct kinfo_proc info;\n  size_t size = sizeof(info);\n  if (sysctl(mib, miblen, &info, &size, NULL, 0)) {\n    return 0;\n  }\n  return static_cast<size_t>(KP_NLWP(info));\n}\n#elif GTEST_OS_OPENBSD\n\n// Returns the number of threads running in the process, or 0 to indicate that\n// we cannot detect it.\nsize_t GetThreadCount() {\n  int mib[] = {\n      CTL_KERN,\n      KERN_PROC,\n      KERN_PROC_PID | KERN_PROC_SHOW_THREADS,\n      getpid(),\n      sizeof(struct kinfo_proc),\n      0,\n  };\n  u_int miblen = sizeof(mib) / sizeof(mib[0]);\n\n  // get number of structs\n  size_t size;\n  if (sysctl(mib, miblen, NULL, &size, NULL, 0)) {\n    return 0;\n  }\n\n  mib[5] = static_cast<int>(size / static_cast<size_t>(mib[4]));\n\n  // populate array of structs\n  struct kinfo_proc info[mib[5]];\n  if (sysctl(mib, miblen, &info, &size, NULL, 0)) {\n    return 0;\n  }\n\n  // exclude empty members\n  size_t nthreads = 0;\n  for (size_t i = 0; i < size / static_cast<size_t>(mib[4]); i++) {\n    if (info[i].p_tid != -1) nthreads++;\n  }\n  return nthreads;\n}\n\n#elif GTEST_OS_QNX\n\n// Returns the number of threads running in the process, or 0 to indicate that\n// we cannot detect it.\nsize_t GetThreadCount() {\n  const int fd = open(\"/proc/self/as\", O_RDONLY);\n  if (fd < 0) {\n    return 0;\n  }\n  procfs_info process_info;\n  const int status =\n      devctl(fd, DCMD_PROC_INFO, &process_info, sizeof(process_info), nullptr);\n  close(fd);\n  if (status == EOK) {\n    return static_cast<size_t>(process_info.num_threads);\n  } else {\n    return 0;\n  }\n}\n\n#elif GTEST_OS_AIX\n\nsize_t GetThreadCount() {\n  struct procentry64 entry;\n  pid_t pid = getpid();\n  int status = getprocs64(&entry, sizeof(entry), nullptr, 0, &pid, 1);\n  if (status == 1) {\n    return entry.pi_thcount;\n  } else {\n    return 0;\n  }\n}\n\n#elif GTEST_OS_FUCHSIA\n\nsize_t GetThreadCount() {\n  int dummy_buffer;\n  size_t avail;\n  zx_status_t status =\n      zx_object_get_info(zx_process_self(), ZX_INFO_PROCESS_THREADS,\n                         &dummy_buffer, 0, nullptr, &avail);\n  if (status == ZX_OK) {\n    return avail;\n  } else {\n    return 0;\n  }\n}\n\n#else\n\nsize_t GetThreadCount() {\n  // There's no portable way to detect the number of threads, so we just\n  // return 0 to indicate that we cannot detect it.\n  return 0;\n}\n\n#endif  // GTEST_OS_LINUX\n\n#if GTEST_IS_THREADSAFE && GTEST_OS_WINDOWS\n\nAutoHandle::AutoHandle() : handle_(INVALID_HANDLE_VALUE) {}\n\nAutoHandle::AutoHandle(Handle handle) : handle_(handle) {}\n\nAutoHandle::~AutoHandle() { Reset(); }\n\nAutoHandle::Handle AutoHandle::Get() const { return handle_; }\n\nvoid AutoHandle::Reset() { Reset(INVALID_HANDLE_VALUE); }\n\nvoid AutoHandle::Reset(HANDLE handle) {\n  // Resetting with the same handle we already own is invalid.\n  if (handle_ != handle) {\n    if (IsCloseable()) {\n      ::CloseHandle(handle_);\n    }\n    handle_ = handle;\n  } else {\n    GTEST_CHECK_(!IsCloseable())\n        << \"Resetting a valid handle to itself is likely a programmer error \"\n           \"and thus not allowed.\";\n  }\n}\n\nbool AutoHandle::IsCloseable() const {\n  // Different Windows APIs may use either of these values to represent an\n  // invalid handle.\n  return handle_ != nullptr && handle_ != INVALID_HANDLE_VALUE;\n}\n\nMutex::Mutex()\n    : owner_thread_id_(0),\n      type_(kDynamic),\n      critical_section_init_phase_(0),\n      critical_section_(new CRITICAL_SECTION) {\n  ::InitializeCriticalSection(critical_section_);\n}\n\nMutex::~Mutex() {\n  // Static mutexes are leaked intentionally. It is not thread-safe to try\n  // to clean them up.\n  if (type_ == kDynamic) {\n    ::DeleteCriticalSection(critical_section_);\n    delete critical_section_;\n    critical_section_ = nullptr;\n  }\n}\n\nvoid Mutex::Lock() {\n  ThreadSafeLazyInit();\n  ::EnterCriticalSection(critical_section_);\n  owner_thread_id_ = ::GetCurrentThreadId();\n}\n\nvoid Mutex::Unlock() {\n  ThreadSafeLazyInit();\n  // We don't protect writing to owner_thread_id_ here, as it's the\n  // caller's responsibility to ensure that the current thread holds the\n  // mutex when this is called.\n  owner_thread_id_ = 0;\n  ::LeaveCriticalSection(critical_section_);\n}\n\n// Does nothing if the current thread holds the mutex. Otherwise, crashes\n// with high probability.\nvoid Mutex::AssertHeld() {\n  ThreadSafeLazyInit();\n  GTEST_CHECK_(owner_thread_id_ == ::GetCurrentThreadId())\n      << \"The current thread is not holding the mutex @\" << this;\n}\n\nnamespace {\n\n#ifdef _MSC_VER\n// Use the RAII idiom to flag mem allocs that are intentionally never\n// deallocated. The motivation is to silence the false positive mem leaks\n// that are reported by the debug version of MS's CRT which can only detect\n// if an alloc is missing a matching deallocation.\n// Example:\n//    MemoryIsNotDeallocated memory_is_not_deallocated;\n//    critical_section_ = new CRITICAL_SECTION;\n//\nclass MemoryIsNotDeallocated {\n public:\n  MemoryIsNotDeallocated() : old_crtdbg_flag_(0) {\n    old_crtdbg_flag_ = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);\n    // Set heap allocation block type to _IGNORE_BLOCK so that MS debug CRT\n    // doesn't report mem leak if there's no matching deallocation.\n    (void)_CrtSetDbgFlag(old_crtdbg_flag_ & ~_CRTDBG_ALLOC_MEM_DF);\n  }\n\n  ~MemoryIsNotDeallocated() {\n    // Restore the original _CRTDBG_ALLOC_MEM_DF flag\n    (void)_CrtSetDbgFlag(old_crtdbg_flag_);\n  }\n\n private:\n  int old_crtdbg_flag_;\n\n  MemoryIsNotDeallocated(const MemoryIsNotDeallocated&) = delete;\n  MemoryIsNotDeallocated& operator=(const MemoryIsNotDeallocated&) = delete;\n};\n#endif  // _MSC_VER\n\n}  // namespace\n\n// Initializes owner_thread_id_ and critical_section_ in static mutexes.\nvoid Mutex::ThreadSafeLazyInit() {\n  // Dynamic mutexes are initialized in the constructor.\n  if (type_ == kStatic) {\n    switch (\n        ::InterlockedCompareExchange(&critical_section_init_phase_, 1L, 0L)) {\n      case 0:\n        // If critical_section_init_phase_ was 0 before the exchange, we\n        // are the first to test it and need to perform the initialization.\n        owner_thread_id_ = 0;\n        {\n          // Use RAII to flag that following mem alloc is never deallocated.\n#ifdef _MSC_VER\n          MemoryIsNotDeallocated memory_is_not_deallocated;\n#endif  // _MSC_VER\n          critical_section_ = new CRITICAL_SECTION;\n        }\n        ::InitializeCriticalSection(critical_section_);\n        // Updates the critical_section_init_phase_ to 2 to signal\n        // initialization complete.\n        GTEST_CHECK_(::InterlockedCompareExchange(&critical_section_init_phase_,\n                                                  2L, 1L) == 1L);\n        break;\n      case 1:\n        // Somebody else is already initializing the mutex; spin until they\n        // are done.\n        while (::InterlockedCompareExchange(&critical_section_init_phase_, 2L,\n                                            2L) != 2L) {\n          // Possibly yields the rest of the thread's time slice to other\n          // threads.\n          ::Sleep(0);\n        }\n        break;\n\n      case 2:\n        break;  // The mutex is already initialized and ready for use.\n\n      default:\n        GTEST_CHECK_(false)\n            << \"Unexpected value of critical_section_init_phase_ \"\n            << \"while initializing a static mutex.\";\n    }\n  }\n}\n\nnamespace {\n\nclass ThreadWithParamSupport : public ThreadWithParamBase {\n public:\n  static HANDLE CreateThread(Runnable* runnable,\n                             Notification* thread_can_start) {\n    ThreadMainParam* param = new ThreadMainParam(runnable, thread_can_start);\n    DWORD thread_id;\n    HANDLE thread_handle = ::CreateThread(\n        nullptr,  // Default security.\n        0,        // Default stack size.\n        &ThreadWithParamSupport::ThreadMain,\n        param,        // Parameter to ThreadMainStatic\n        0x0,          // Default creation flags.\n        &thread_id);  // Need a valid pointer for the call to work under Win98.\n    GTEST_CHECK_(thread_handle != nullptr)\n        << \"CreateThread failed with error \" << ::GetLastError() << \".\";\n    if (thread_handle == nullptr) {\n      delete param;\n    }\n    return thread_handle;\n  }\n\n private:\n  struct ThreadMainParam {\n    ThreadMainParam(Runnable* runnable, Notification* thread_can_start)\n        : runnable_(runnable), thread_can_start_(thread_can_start) {}\n    std::unique_ptr<Runnable> runnable_;\n    // Does not own.\n    Notification* thread_can_start_;\n  };\n\n  static DWORD WINAPI ThreadMain(void* ptr) {\n    // Transfers ownership.\n    std::unique_ptr<ThreadMainParam> param(static_cast<ThreadMainParam*>(ptr));\n    if (param->thread_can_start_ != nullptr)\n      param->thread_can_start_->WaitForNotification();\n    param->runnable_->Run();\n    return 0;\n  }\n\n  // Prohibit instantiation.\n  ThreadWithParamSupport();\n\n  ThreadWithParamSupport(const ThreadWithParamSupport&) = delete;\n  ThreadWithParamSupport& operator=(const ThreadWithParamSupport&) = delete;\n};\n\n}  // namespace\n\nThreadWithParamBase::ThreadWithParamBase(Runnable* runnable,\n                                         Notification* thread_can_start)\n    : thread_(\n          ThreadWithParamSupport::CreateThread(runnable, thread_can_start)) {}\n\nThreadWithParamBase::~ThreadWithParamBase() { Join(); }\n\nvoid ThreadWithParamBase::Join() {\n  GTEST_CHECK_(::WaitForSingleObject(thread_.Get(), INFINITE) == WAIT_OBJECT_0)\n      << \"Failed to join the thread with error \" << ::GetLastError() << \".\";\n}\n\n// Maps a thread to a set of ThreadIdToThreadLocals that have values\n// instantiated on that thread and notifies them when the thread exits.  A\n// ThreadLocal instance is expected to persist until all threads it has\n// values on have terminated.\nclass ThreadLocalRegistryImpl {\n public:\n  // Registers thread_local_instance as having value on the current thread.\n  // Returns a value that can be used to identify the thread from other threads.\n  static ThreadLocalValueHolderBase* GetValueOnCurrentThread(\n      const ThreadLocalBase* thread_local_instance) {\n#ifdef _MSC_VER\n    MemoryIsNotDeallocated memory_is_not_deallocated;\n#endif  // _MSC_VER\n    DWORD current_thread = ::GetCurrentThreadId();\n    MutexLock lock(&mutex_);\n    ThreadIdToThreadLocals* const thread_to_thread_locals =\n        GetThreadLocalsMapLocked();\n    ThreadIdToThreadLocals::iterator thread_local_pos =\n        thread_to_thread_locals->find(current_thread);\n    if (thread_local_pos == thread_to_thread_locals->end()) {\n      thread_local_pos =\n          thread_to_thread_locals\n              ->insert(std::make_pair(current_thread, ThreadLocalValues()))\n              .first;\n      StartWatcherThreadFor(current_thread);\n    }\n    ThreadLocalValues& thread_local_values = thread_local_pos->second;\n    ThreadLocalValues::iterator value_pos =\n        thread_local_values.find(thread_local_instance);\n    if (value_pos == thread_local_values.end()) {\n      value_pos =\n          thread_local_values\n              .insert(std::make_pair(\n                  thread_local_instance,\n                  std::shared_ptr<ThreadLocalValueHolderBase>(\n                      thread_local_instance->NewValueForCurrentThread())))\n              .first;\n    }\n    return value_pos->second.get();\n  }\n\n  static void OnThreadLocalDestroyed(\n      const ThreadLocalBase* thread_local_instance) {\n    std::vector<std::shared_ptr<ThreadLocalValueHolderBase> > value_holders;\n    // Clean up the ThreadLocalValues data structure while holding the lock, but\n    // defer the destruction of the ThreadLocalValueHolderBases.\n    {\n      MutexLock lock(&mutex_);\n      ThreadIdToThreadLocals* const thread_to_thread_locals =\n          GetThreadLocalsMapLocked();\n      for (ThreadIdToThreadLocals::iterator it =\n               thread_to_thread_locals->begin();\n           it != thread_to_thread_locals->end(); ++it) {\n        ThreadLocalValues& thread_local_values = it->second;\n        ThreadLocalValues::iterator value_pos =\n            thread_local_values.find(thread_local_instance);\n        if (value_pos != thread_local_values.end()) {\n          value_holders.push_back(value_pos->second);\n          thread_local_values.erase(value_pos);\n          // This 'if' can only be successful at most once, so theoretically we\n          // could break out of the loop here, but we don't bother doing so.\n        }\n      }\n    }\n    // Outside the lock, let the destructor for 'value_holders' deallocate the\n    // ThreadLocalValueHolderBases.\n  }\n\n  static void OnThreadExit(DWORD thread_id) {\n    GTEST_CHECK_(thread_id != 0) << ::GetLastError();\n    std::vector<std::shared_ptr<ThreadLocalValueHolderBase> > value_holders;\n    // Clean up the ThreadIdToThreadLocals data structure while holding the\n    // lock, but defer the destruction of the ThreadLocalValueHolderBases.\n    {\n      MutexLock lock(&mutex_);\n      ThreadIdToThreadLocals* const thread_to_thread_locals =\n          GetThreadLocalsMapLocked();\n      ThreadIdToThreadLocals::iterator thread_local_pos =\n          thread_to_thread_locals->find(thread_id);\n      if (thread_local_pos != thread_to_thread_locals->end()) {\n        ThreadLocalValues& thread_local_values = thread_local_pos->second;\n        for (ThreadLocalValues::iterator value_pos =\n                 thread_local_values.begin();\n             value_pos != thread_local_values.end(); ++value_pos) {\n          value_holders.push_back(value_pos->second);\n        }\n        thread_to_thread_locals->erase(thread_local_pos);\n      }\n    }\n    // Outside the lock, let the destructor for 'value_holders' deallocate the\n    // ThreadLocalValueHolderBases.\n  }\n\n private:\n  // In a particular thread, maps a ThreadLocal object to its value.\n  typedef std::map<const ThreadLocalBase*,\n                   std::shared_ptr<ThreadLocalValueHolderBase> >\n      ThreadLocalValues;\n  // Stores all ThreadIdToThreadLocals having values in a thread, indexed by\n  // thread's ID.\n  typedef std::map<DWORD, ThreadLocalValues> ThreadIdToThreadLocals;\n\n  // Holds the thread id and thread handle that we pass from\n  // StartWatcherThreadFor to WatcherThreadFunc.\n  typedef std::pair<DWORD, HANDLE> ThreadIdAndHandle;\n\n  static void StartWatcherThreadFor(DWORD thread_id) {\n    // The returned handle will be kept in thread_map and closed by\n    // watcher_thread in WatcherThreadFunc.\n    HANDLE thread =\n        ::OpenThread(SYNCHRONIZE | THREAD_QUERY_INFORMATION, FALSE, thread_id);\n    GTEST_CHECK_(thread != nullptr);\n    // We need to pass a valid thread ID pointer into CreateThread for it\n    // to work correctly under Win98.\n    DWORD watcher_thread_id;\n    HANDLE watcher_thread = ::CreateThread(\n        nullptr,  // Default security.\n        0,        // Default stack size\n        &ThreadLocalRegistryImpl::WatcherThreadFunc,\n        reinterpret_cast<LPVOID>(new ThreadIdAndHandle(thread_id, thread)),\n        CREATE_SUSPENDED, &watcher_thread_id);\n    GTEST_CHECK_(watcher_thread != nullptr)\n        << \"CreateThread failed with error \" << ::GetLastError() << \".\";\n    // Give the watcher thread the same priority as ours to avoid being\n    // blocked by it.\n    ::SetThreadPriority(watcher_thread,\n                        ::GetThreadPriority(::GetCurrentThread()));\n    ::ResumeThread(watcher_thread);\n    ::CloseHandle(watcher_thread);\n  }\n\n  // Monitors exit from a given thread and notifies those\n  // ThreadIdToThreadLocals about thread termination.\n  static DWORD WINAPI WatcherThreadFunc(LPVOID param) {\n    const ThreadIdAndHandle* tah =\n        reinterpret_cast<const ThreadIdAndHandle*>(param);\n    GTEST_CHECK_(::WaitForSingleObject(tah->second, INFINITE) == WAIT_OBJECT_0);\n    OnThreadExit(tah->first);\n    ::CloseHandle(tah->second);\n    delete tah;\n    return 0;\n  }\n\n  // Returns map of thread local instances.\n  static ThreadIdToThreadLocals* GetThreadLocalsMapLocked() {\n    mutex_.AssertHeld();\n#ifdef _MSC_VER\n    MemoryIsNotDeallocated memory_is_not_deallocated;\n#endif  // _MSC_VER\n    static ThreadIdToThreadLocals* map = new ThreadIdToThreadLocals();\n    return map;\n  }\n\n  // Protects access to GetThreadLocalsMapLocked() and its return value.\n  static Mutex mutex_;\n  // Protects access to GetThreadMapLocked() and its return value.\n  static Mutex thread_map_mutex_;\n};\n\nMutex ThreadLocalRegistryImpl::mutex_(Mutex::kStaticMutex);  // NOLINT\nMutex ThreadLocalRegistryImpl::thread_map_mutex_(\n    Mutex::kStaticMutex);  // NOLINT\n\nThreadLocalValueHolderBase* ThreadLocalRegistry::GetValueOnCurrentThread(\n    const ThreadLocalBase* thread_local_instance) {\n  return ThreadLocalRegistryImpl::GetValueOnCurrentThread(\n      thread_local_instance);\n}\n\nvoid ThreadLocalRegistry::OnThreadLocalDestroyed(\n    const ThreadLocalBase* thread_local_instance) {\n  ThreadLocalRegistryImpl::OnThreadLocalDestroyed(thread_local_instance);\n}\n\n#endif  // GTEST_IS_THREADSAFE && GTEST_OS_WINDOWS\n\n#if GTEST_USES_POSIX_RE\n\n// Implements RE.  Currently only needed for death tests.\n\nRE::~RE() {\n  if (is_valid_) {\n    // regfree'ing an invalid regex might crash because the content\n    // of the regex is undefined. Since the regex's are essentially\n    // the same, one cannot be valid (or invalid) without the other\n    // being so too.\n    regfree(&partial_regex_);\n    regfree(&full_regex_);\n  }\n  free(const_cast<char*>(pattern_));\n}\n\n// Returns true if and only if regular expression re matches the entire str.\nbool RE::FullMatch(const char* str, const RE& re) {\n  if (!re.is_valid_) return false;\n\n  regmatch_t match;\n  return regexec(&re.full_regex_, str, 1, &match, 0) == 0;\n}\n\n// Returns true if and only if regular expression re matches a substring of\n// str (including str itself).\nbool RE::PartialMatch(const char* str, const RE& re) {\n  if (!re.is_valid_) return false;\n\n  regmatch_t match;\n  return regexec(&re.partial_regex_, str, 1, &match, 0) == 0;\n}\n\n// Initializes an RE from its string representation.\nvoid RE::Init(const char* regex) {\n  pattern_ = posix::StrDup(regex);\n\n  // Reserves enough bytes to hold the regular expression used for a\n  // full match.\n  const size_t full_regex_len = strlen(regex) + 10;\n  char* const full_pattern = new char[full_regex_len];\n\n  snprintf(full_pattern, full_regex_len, \"^(%s)$\", regex);\n  is_valid_ = regcomp(&full_regex_, full_pattern, REG_EXTENDED) == 0;\n  // We want to call regcomp(&partial_regex_, ...) even if the\n  // previous expression returns false.  Otherwise partial_regex_ may\n  // not be properly initialized can may cause trouble when it's\n  // freed.\n  //\n  // Some implementation of POSIX regex (e.g. on at least some\n  // versions of Cygwin) doesn't accept the empty string as a valid\n  // regex.  We change it to an equivalent form \"()\" to be safe.\n  if (is_valid_) {\n    const char* const partial_regex = (*regex == '\\0') ? \"()\" : regex;\n    is_valid_ = regcomp(&partial_regex_, partial_regex, REG_EXTENDED) == 0;\n  }\n  EXPECT_TRUE(is_valid_)\n      << \"Regular expression \\\"\" << regex\n      << \"\\\" is not a valid POSIX Extended regular expression.\";\n\n  delete[] full_pattern;\n}\n\n#elif GTEST_USES_SIMPLE_RE\n\n// Returns true if and only if ch appears anywhere in str (excluding the\n// terminating '\\0' character).\nbool IsInSet(char ch, const char* str) {\n  return ch != '\\0' && strchr(str, ch) != nullptr;\n}\n\n// Returns true if and only if ch belongs to the given classification.\n// Unlike similar functions in <ctype.h>, these aren't affected by the\n// current locale.\nbool IsAsciiDigit(char ch) { return '0' <= ch && ch <= '9'; }\nbool IsAsciiPunct(char ch) {\n  return IsInSet(ch, \"^-!\\\"#$%&'()*+,./:;<=>?@[\\\\]_`{|}~\");\n}\nbool IsRepeat(char ch) { return IsInSet(ch, \"?*+\"); }\nbool IsAsciiWhiteSpace(char ch) { return IsInSet(ch, \" \\f\\n\\r\\t\\v\"); }\nbool IsAsciiWordChar(char ch) {\n  return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') ||\n         ('0' <= ch && ch <= '9') || ch == '_';\n}\n\n// Returns true if and only if \"\\\\c\" is a supported escape sequence.\nbool IsValidEscape(char c) {\n  return (IsAsciiPunct(c) || IsInSet(c, \"dDfnrsStvwW\"));\n}\n\n// Returns true if and only if the given atom (specified by escaped and\n// pattern) matches ch.  The result is undefined if the atom is invalid.\nbool AtomMatchesChar(bool escaped, char pattern_char, char ch) {\n  if (escaped) {  // \"\\\\p\" where p is pattern_char.\n    switch (pattern_char) {\n      case 'd':\n        return IsAsciiDigit(ch);\n      case 'D':\n        return !IsAsciiDigit(ch);\n      case 'f':\n        return ch == '\\f';\n      case 'n':\n        return ch == '\\n';\n      case 'r':\n        return ch == '\\r';\n      case 's':\n        return IsAsciiWhiteSpace(ch);\n      case 'S':\n        return !IsAsciiWhiteSpace(ch);\n      case 't':\n        return ch == '\\t';\n      case 'v':\n        return ch == '\\v';\n      case 'w':\n        return IsAsciiWordChar(ch);\n      case 'W':\n        return !IsAsciiWordChar(ch);\n    }\n    return IsAsciiPunct(pattern_char) && pattern_char == ch;\n  }\n\n  return (pattern_char == '.' && ch != '\\n') || pattern_char == ch;\n}\n\n// Helper function used by ValidateRegex() to format error messages.\nstatic std::string FormatRegexSyntaxError(const char* regex, int index) {\n  return (Message() << \"Syntax error at index \" << index\n                    << \" in simple regular expression \\\"\" << regex << \"\\\": \")\n      .GetString();\n}\n\n// Generates non-fatal failures and returns false if regex is invalid;\n// otherwise returns true.\nbool ValidateRegex(const char* regex) {\n  if (regex == nullptr) {\n    ADD_FAILURE() << \"NULL is not a valid simple regular expression.\";\n    return false;\n  }\n\n  bool is_valid = true;\n\n  // True if and only if ?, *, or + can follow the previous atom.\n  bool prev_repeatable = false;\n  for (int i = 0; regex[i]; i++) {\n    if (regex[i] == '\\\\') {  // An escape sequence\n      i++;\n      if (regex[i] == '\\0') {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1)\n                      << \"'\\\\' cannot appear at the end.\";\n        return false;\n      }\n\n      if (!IsValidEscape(regex[i])) {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1)\n                      << \"invalid escape sequence \\\"\\\\\" << regex[i] << \"\\\".\";\n        is_valid = false;\n      }\n      prev_repeatable = true;\n    } else {  // Not an escape sequence.\n      const char ch = regex[i];\n\n      if (ch == '^' && i > 0) {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i)\n                      << \"'^' can only appear at the beginning.\";\n        is_valid = false;\n      } else if (ch == '$' && regex[i + 1] != '\\0') {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i)\n                      << \"'$' can only appear at the end.\";\n        is_valid = false;\n      } else if (IsInSet(ch, \"()[]{}|\")) {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << \"'\" << ch\n                      << \"' is unsupported.\";\n        is_valid = false;\n      } else if (IsRepeat(ch) && !prev_repeatable) {\n        ADD_FAILURE() << FormatRegexSyntaxError(regex, i) << \"'\" << ch\n                      << \"' can only follow a repeatable token.\";\n        is_valid = false;\n      }\n\n      prev_repeatable = !IsInSet(ch, \"^$?*+\");\n    }\n  }\n\n  return is_valid;\n}\n\n// Matches a repeated regex atom followed by a valid simple regular\n// expression.  The regex atom is defined as c if escaped is false,\n// or \\c otherwise.  repeat is the repetition meta character (?, *,\n// or +).  The behavior is undefined if str contains too many\n// characters to be indexable by size_t, in which case the test will\n// probably time out anyway.  We are fine with this limitation as\n// std::string has it too.\nbool MatchRepetitionAndRegexAtHead(bool escaped, char c, char repeat,\n                                   const char* regex, const char* str) {\n  const size_t min_count = (repeat == '+') ? 1 : 0;\n  const size_t max_count = (repeat == '?') ? 1 : static_cast<size_t>(-1) - 1;\n  // We cannot call numeric_limits::max() as it conflicts with the\n  // max() macro on Windows.\n\n  for (size_t i = 0; i <= max_count; ++i) {\n    // We know that the atom matches each of the first i characters in str.\n    if (i >= min_count && MatchRegexAtHead(regex, str + i)) {\n      // We have enough matches at the head, and the tail matches too.\n      // Since we only care about *whether* the pattern matches str\n      // (as opposed to *how* it matches), there is no need to find a\n      // greedy match.\n      return true;\n    }\n    if (str[i] == '\\0' || !AtomMatchesChar(escaped, c, str[i])) return false;\n  }\n  return false;\n}\n\n// Returns true if and only if regex matches a prefix of str. regex must\n// be a valid simple regular expression and not start with \"^\", or the\n// result is undefined.\nbool MatchRegexAtHead(const char* regex, const char* str) {\n  if (*regex == '\\0')  // An empty regex matches a prefix of anything.\n    return true;\n\n  // \"$\" only matches the end of a string.  Note that regex being\n  // valid guarantees that there's nothing after \"$\" in it.\n  if (*regex == '$') return *str == '\\0';\n\n  // Is the first thing in regex an escape sequence?\n  const bool escaped = *regex == '\\\\';\n  if (escaped) ++regex;\n  if (IsRepeat(regex[1])) {\n    // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so\n    // here's an indirect recursion.  It terminates as the regex gets\n    // shorter in each recursion.\n    return MatchRepetitionAndRegexAtHead(escaped, regex[0], regex[1], regex + 2,\n                                         str);\n  } else {\n    // regex isn't empty, isn't \"$\", and doesn't start with a\n    // repetition.  We match the first atom of regex with the first\n    // character of str and recurse.\n    return (*str != '\\0') && AtomMatchesChar(escaped, *regex, *str) &&\n           MatchRegexAtHead(regex + 1, str + 1);\n  }\n}\n\n// Returns true if and only if regex matches any substring of str.  regex must\n// be a valid simple regular expression, or the result is undefined.\n//\n// The algorithm is recursive, but the recursion depth doesn't exceed\n// the regex length, so we won't need to worry about running out of\n// stack space normally.  In rare cases the time complexity can be\n// exponential with respect to the regex length + the string length,\n// but usually it's must faster (often close to linear).\nbool MatchRegexAnywhere(const char* regex, const char* str) {\n  if (regex == nullptr || str == nullptr) return false;\n\n  if (*regex == '^') return MatchRegexAtHead(regex + 1, str);\n\n  // A successful match can be anywhere in str.\n  do {\n    if (MatchRegexAtHead(regex, str)) return true;\n  } while (*str++ != '\\0');\n  return false;\n}\n\n// Implements the RE class.\n\nRE::~RE() {\n  free(const_cast<char*>(pattern_));\n  free(const_cast<char*>(full_pattern_));\n}\n\n// Returns true if and only if regular expression re matches the entire str.\nbool RE::FullMatch(const char* str, const RE& re) {\n  return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str);\n}\n\n// Returns true if and only if regular expression re matches a substring of\n// str (including str itself).\nbool RE::PartialMatch(const char* str, const RE& re) {\n  return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str);\n}\n\n// Initializes an RE from its string representation.\nvoid RE::Init(const char* regex) {\n  pattern_ = full_pattern_ = nullptr;\n  if (regex != nullptr) {\n    pattern_ = posix::StrDup(regex);\n  }\n\n  is_valid_ = ValidateRegex(regex);\n  if (!is_valid_) {\n    // No need to calculate the full pattern when the regex is invalid.\n    return;\n  }\n\n  const size_t len = strlen(regex);\n  // Reserves enough bytes to hold the regular expression used for a\n  // full match: we need space to prepend a '^', append a '$', and\n  // terminate the string with '\\0'.\n  char* buffer = static_cast<char*>(malloc(len + 3));\n  full_pattern_ = buffer;\n\n  if (*regex != '^')\n    *buffer++ = '^';  // Makes sure full_pattern_ starts with '^'.\n\n  // We don't use snprintf or strncpy, as they trigger a warning when\n  // compiled with VC++ 8.0.\n  memcpy(buffer, regex, len);\n  buffer += len;\n\n  if (len == 0 || regex[len - 1] != '$')\n    *buffer++ = '$';  // Makes sure full_pattern_ ends with '$'.\n\n  *buffer = '\\0';\n}\n\n#endif  // GTEST_USES_POSIX_RE\n\nconst char kUnknownFile[] = \"unknown file\";\n\n// Formats a source file path and a line number as they would appear\n// in an error message from the compiler used to compile this code.\nGTEST_API_ ::std::string FormatFileLocation(const char* file, int line) {\n  const std::string file_name(file == nullptr ? kUnknownFile : file);\n\n  if (line < 0) {\n    return file_name + \":\";\n  }\n#ifdef _MSC_VER\n  return file_name + \"(\" + StreamableToString(line) + \"):\";\n#else\n  return file_name + \":\" + StreamableToString(line) + \":\";\n#endif  // _MSC_VER\n}\n\n// Formats a file location for compiler-independent XML output.\n// Although this function is not platform dependent, we put it next to\n// FormatFileLocation in order to contrast the two functions.\n// Note that FormatCompilerIndependentFileLocation() does NOT append colon\n// to the file location it produces, unlike FormatFileLocation().\nGTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char* file,\n                                                               int line) {\n  const std::string file_name(file == nullptr ? kUnknownFile : file);\n\n  if (line < 0)\n    return file_name;\n  else\n    return file_name + \":\" + StreamableToString(line);\n}\n\nGTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line)\n    : severity_(severity) {\n  const char* const marker = severity == GTEST_INFO      ? \"[  INFO ]\"\n                             : severity == GTEST_WARNING ? \"[WARNING]\"\n                             : severity == GTEST_ERROR   ? \"[ ERROR ]\"\n                                                         : \"[ FATAL ]\";\n  GetStream() << ::std::endl\n              << marker << \" \" << FormatFileLocation(file, line).c_str()\n              << \": \";\n}\n\n// Flushes the buffers and, if severity is GTEST_FATAL, aborts the program.\nGTestLog::~GTestLog() {\n  GetStream() << ::std::endl;\n  if (severity_ == GTEST_FATAL) {\n    fflush(stderr);\n    posix::Abort();\n  }\n}\n\n// Disable Microsoft deprecation warnings for POSIX functions called from\n// this class (creat, dup, dup2, and close)\nGTEST_DISABLE_MSC_DEPRECATED_PUSH_()\n\n#if GTEST_HAS_STREAM_REDIRECTION\n\n// Object that captures an output stream (stdout/stderr).\nclass CapturedStream {\n public:\n  // The ctor redirects the stream to a temporary file.\n  explicit CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) {\n#if GTEST_OS_WINDOWS\n    char temp_dir_path[MAX_PATH + 1] = {'\\0'};   // NOLINT\n    char temp_file_path[MAX_PATH + 1] = {'\\0'};  // NOLINT\n\n    ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path);\n    const UINT success = ::GetTempFileNameA(temp_dir_path, \"gtest_redir\",\n                                            0,  // Generate unique file name.\n                                            temp_file_path);\n    GTEST_CHECK_(success != 0)\n        << \"Unable to create a temporary file in \" << temp_dir_path;\n    const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE);\n    GTEST_CHECK_(captured_fd != -1)\n        << \"Unable to open temporary file \" << temp_file_path;\n    filename_ = temp_file_path;\n#else\n    // There's no guarantee that a test has write access to the current\n    // directory, so we create the temporary file in a temporary directory.\n    std::string name_template;\n\n#if GTEST_OS_LINUX_ANDROID\n    // Note: Android applications are expected to call the framework's\n    // Context.getExternalStorageDirectory() method through JNI to get\n    // the location of the world-writable SD Card directory. However,\n    // this requires a Context handle, which cannot be retrieved\n    // globally from native code. Doing so also precludes running the\n    // code as part of a regular standalone executable, which doesn't\n    // run in a Dalvik process (e.g. when running it through 'adb shell').\n    //\n    // The location /data/local/tmp is directly accessible from native code.\n    // '/sdcard' and other variants cannot be relied on, as they are not\n    // guaranteed to be mounted, or may have a delay in mounting.\n    name_template = \"/data/local/tmp/\";\n#elif GTEST_OS_IOS\n    char user_temp_dir[PATH_MAX + 1];\n\n    // Documented alternative to NSTemporaryDirectory() (for obtaining creating\n    // a temporary directory) at\n    // https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Articles/RaceConditions.html#//apple_ref/doc/uid/TP40002585-SW10\n    //\n    // _CS_DARWIN_USER_TEMP_DIR (as well as _CS_DARWIN_USER_CACHE_DIR) is not\n    // documented in the confstr() man page at\n    // https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/confstr.3.html#//apple_ref/doc/man/3/confstr\n    // but are still available, according to the WebKit patches at\n    // https://trac.webkit.org/changeset/262004/webkit\n    // https://trac.webkit.org/changeset/263705/webkit\n    //\n    // The confstr() implementation falls back to getenv(\"TMPDIR\"). See\n    // https://opensource.apple.com/source/Libc/Libc-1439.100.3/gen/confstr.c.auto.html\n    ::confstr(_CS_DARWIN_USER_TEMP_DIR, user_temp_dir, sizeof(user_temp_dir));\n\n    name_template = user_temp_dir;\n    if (name_template.back() != GTEST_PATH_SEP_[0])\n      name_template.push_back(GTEST_PATH_SEP_[0]);\n#else\n    name_template = \"/tmp/\";\n#endif\n    name_template.append(\"gtest_captured_stream.XXXXXX\");\n\n    // mkstemp() modifies the string bytes in place, and does not go beyond the\n    // string's length. This results in well-defined behavior in C++17.\n    //\n    // The const_cast is needed below C++17. The constraints on std::string\n    // implementations in C++11 and above make assumption behind the const_cast\n    // fairly safe.\n    const int captured_fd = ::mkstemp(const_cast<char*>(name_template.data()));\n    if (captured_fd == -1) {\n      GTEST_LOG_(WARNING)\n          << \"Failed to create tmp file \" << name_template\n          << \" for test; does the test have access to the /tmp directory?\";\n    }\n    filename_ = std::move(name_template);\n#endif  // GTEST_OS_WINDOWS\n    fflush(nullptr);\n    dup2(captured_fd, fd_);\n    close(captured_fd);\n  }\n\n  ~CapturedStream() { remove(filename_.c_str()); }\n\n  std::string GetCapturedString() {\n    if (uncaptured_fd_ != -1) {\n      // Restores the original stream.\n      fflush(nullptr);\n      dup2(uncaptured_fd_, fd_);\n      close(uncaptured_fd_);\n      uncaptured_fd_ = -1;\n    }\n\n    FILE* const file = posix::FOpen(filename_.c_str(), \"r\");\n    if (file == nullptr) {\n      GTEST_LOG_(FATAL) << \"Failed to open tmp file \" << filename_\n                        << \" for capturing stream.\";\n    }\n    const std::string content = ReadEntireFile(file);\n    posix::FClose(file);\n    return content;\n  }\n\n private:\n  const int fd_;  // A stream to capture.\n  int uncaptured_fd_;\n  // Name of the temporary file holding the stderr output.\n  ::std::string filename_;\n\n  CapturedStream(const CapturedStream&) = delete;\n  CapturedStream& operator=(const CapturedStream&) = delete;\n};\n\nGTEST_DISABLE_MSC_DEPRECATED_POP_()\n\nstatic CapturedStream* g_captured_stderr = nullptr;\nstatic CapturedStream* g_captured_stdout = nullptr;\n\n// Starts capturing an output stream (stdout/stderr).\nstatic void CaptureStream(int fd, const char* stream_name,\n                          CapturedStream** stream) {\n  if (*stream != nullptr) {\n    GTEST_LOG_(FATAL) << \"Only one \" << stream_name\n                      << \" capturer can exist at a time.\";\n  }\n  *stream = new CapturedStream(fd);\n}\n\n// Stops capturing the output stream and returns the captured string.\nstatic std::string GetCapturedStream(CapturedStream** captured_stream) {\n  const std::string content = (*captured_stream)->GetCapturedString();\n\n  delete *captured_stream;\n  *captured_stream = nullptr;\n\n  return content;\n}\n\n#if defined(_MSC_VER) || defined(__BORLANDC__)\n// MSVC and C++Builder do not provide a definition of STDERR_FILENO.\nconst int kStdOutFileno = 1;\nconst int kStdErrFileno = 2;\n#else\nconst int kStdOutFileno = STDOUT_FILENO;\nconst int kStdErrFileno = STDERR_FILENO;\n#endif  // defined(_MSC_VER) || defined(__BORLANDC__)\n\n// Starts capturing stdout.\nvoid CaptureStdout() {\n  CaptureStream(kStdOutFileno, \"stdout\", &g_captured_stdout);\n}\n\n// Starts capturing stderr.\nvoid CaptureStderr() {\n  CaptureStream(kStdErrFileno, \"stderr\", &g_captured_stderr);\n}\n\n// Stops capturing stdout and returns the captured string.\nstd::string GetCapturedStdout() {\n  return GetCapturedStream(&g_captured_stdout);\n}\n\n// Stops capturing stderr and returns the captured string.\nstd::string GetCapturedStderr() {\n  return GetCapturedStream(&g_captured_stderr);\n}\n\n#endif  // GTEST_HAS_STREAM_REDIRECTION\n\nsize_t GetFileSize(FILE* file) {\n  fseek(file, 0, SEEK_END);\n  return static_cast<size_t>(ftell(file));\n}\n\nstd::string ReadEntireFile(FILE* file) {\n  const size_t file_size = GetFileSize(file);\n  char* const buffer = new char[file_size];\n\n  size_t bytes_last_read = 0;  // # of bytes read in the last fread()\n  size_t bytes_read = 0;       // # of bytes read so far\n\n  fseek(file, 0, SEEK_SET);\n\n  // Keeps reading the file until we cannot read further or the\n  // pre-determined file size is reached.\n  do {\n    bytes_last_read =\n        fread(buffer + bytes_read, 1, file_size - bytes_read, file);\n    bytes_read += bytes_last_read;\n  } while (bytes_last_read > 0 && bytes_read < file_size);\n\n  const std::string content(buffer, bytes_read);\n  delete[] buffer;\n\n  return content;\n}\n\n#if GTEST_HAS_DEATH_TEST\nstatic const std::vector<std::string>* g_injected_test_argvs =\n    nullptr;  // Owned.\n\nstd::vector<std::string> GetInjectableArgvs() {\n  if (g_injected_test_argvs != nullptr) {\n    return *g_injected_test_argvs;\n  }\n  return GetArgvs();\n}\n\nvoid SetInjectableArgvs(const std::vector<std::string>* new_argvs) {\n  if (g_injected_test_argvs != new_argvs) delete g_injected_test_argvs;\n  g_injected_test_argvs = new_argvs;\n}\n\nvoid SetInjectableArgvs(const std::vector<std::string>& new_argvs) {\n  SetInjectableArgvs(\n      new std::vector<std::string>(new_argvs.begin(), new_argvs.end()));\n}\n\nvoid ClearInjectableArgvs() {\n  delete g_injected_test_argvs;\n  g_injected_test_argvs = nullptr;\n}\n#endif  // GTEST_HAS_DEATH_TEST\n\n#if GTEST_OS_WINDOWS_MOBILE\nnamespace posix {\nvoid Abort() {\n  DebugBreak();\n  TerminateProcess(GetCurrentProcess(), 1);\n}\n}  // namespace posix\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n// Returns the name of the environment variable corresponding to the\n// given flag.  For example, FlagToEnvVar(\"foo\") will return\n// \"GTEST_FOO\" in the open-source version.\nstatic std::string FlagToEnvVar(const char* flag) {\n  const std::string full_flag =\n      (Message() << GTEST_FLAG_PREFIX_ << flag).GetString();\n\n  Message env_var;\n  for (size_t i = 0; i != full_flag.length(); i++) {\n    env_var << ToUpper(full_flag.c_str()[i]);\n  }\n\n  return env_var.GetString();\n}\n\n// Parses 'str' for a 32-bit signed integer.  If successful, writes\n// the result to *value and returns true; otherwise leaves *value\n// unchanged and returns false.\nbool ParseInt32(const Message& src_text, const char* str, int32_t* value) {\n  // Parses the environment variable as a decimal integer.\n  char* end = nullptr;\n  const long long_value = strtol(str, &end, 10);  // NOLINT\n\n  // Has strtol() consumed all characters in the string?\n  if (*end != '\\0') {\n    // No - an invalid character was encountered.\n    Message msg;\n    msg << \"WARNING: \" << src_text\n        << \" is expected to be a 32-bit integer, but actually\"\n        << \" has value \\\"\" << str << \"\\\".\\n\";\n    printf(\"%s\", msg.GetString().c_str());\n    fflush(stdout);\n    return false;\n  }\n\n  // Is the parsed value in the range of an int32_t?\n  const auto result = static_cast<int32_t>(long_value);\n  if (long_value == LONG_MAX || long_value == LONG_MIN ||\n      // The parsed value overflows as a long.  (strtol() returns\n      // LONG_MAX or LONG_MIN when the input overflows.)\n      result != long_value\n      // The parsed value overflows as an int32_t.\n  ) {\n    Message msg;\n    msg << \"WARNING: \" << src_text\n        << \" is expected to be a 32-bit integer, but actually\"\n        << \" has value \" << str << \", which overflows.\\n\";\n    printf(\"%s\", msg.GetString().c_str());\n    fflush(stdout);\n    return false;\n  }\n\n  *value = result;\n  return true;\n}\n\n// Reads and returns the Boolean environment variable corresponding to\n// the given flag; if it's not set, returns default_value.\n//\n// The value is considered true if and only if it's not \"0\".\nbool BoolFromGTestEnv(const char* flag, bool default_value) {\n#if defined(GTEST_GET_BOOL_FROM_ENV_)\n  return GTEST_GET_BOOL_FROM_ENV_(flag, default_value);\n#else\n  const std::string env_var = FlagToEnvVar(flag);\n  const char* const string_value = posix::GetEnv(env_var.c_str());\n  return string_value == nullptr ? default_value\n                                 : strcmp(string_value, \"0\") != 0;\n#endif  // defined(GTEST_GET_BOOL_FROM_ENV_)\n}\n\n// Reads and returns a 32-bit integer stored in the environment\n// variable corresponding to the given flag; if it isn't set or\n// doesn't represent a valid 32-bit integer, returns default_value.\nint32_t Int32FromGTestEnv(const char* flag, int32_t default_value) {\n#if defined(GTEST_GET_INT32_FROM_ENV_)\n  return GTEST_GET_INT32_FROM_ENV_(flag, default_value);\n#else\n  const std::string env_var = FlagToEnvVar(flag);\n  const char* const string_value = posix::GetEnv(env_var.c_str());\n  if (string_value == nullptr) {\n    // The environment variable is not set.\n    return default_value;\n  }\n\n  int32_t result = default_value;\n  if (!ParseInt32(Message() << \"Environment variable \" << env_var, string_value,\n                  &result)) {\n    printf(\"The default value %s is used.\\n\",\n           (Message() << default_value).GetString().c_str());\n    fflush(stdout);\n    return default_value;\n  }\n\n  return result;\n#endif  // defined(GTEST_GET_INT32_FROM_ENV_)\n}\n\n// As a special case for the 'output' flag, if GTEST_OUTPUT is not\n// set, we look for XML_OUTPUT_FILE, which is set by the Bazel build\n// system.  The value of XML_OUTPUT_FILE is a filename without the\n// \"xml:\" prefix of GTEST_OUTPUT.\n// Note that this is meant to be called at the call site so it does\n// not check that the flag is 'output'\n// In essence this checks an env variable called XML_OUTPUT_FILE\n// and if it is set we prepend \"xml:\" to its value, if it not set we return \"\"\nstd::string OutputFlagAlsoCheckEnvVar() {\n  std::string default_value_for_output_flag = \"\";\n  const char* xml_output_file_env = posix::GetEnv(\"XML_OUTPUT_FILE\");\n  if (nullptr != xml_output_file_env) {\n    default_value_for_output_flag = std::string(\"xml:\") + xml_output_file_env;\n  }\n  return default_value_for_output_flag;\n}\n\n// Reads and returns the string environment variable corresponding to\n// the given flag; if it's not set, returns default_value.\nconst char* StringFromGTestEnv(const char* flag, const char* default_value) {\n#if defined(GTEST_GET_STRING_FROM_ENV_)\n  return GTEST_GET_STRING_FROM_ENV_(flag, default_value);\n#else\n  const std::string env_var = FlagToEnvVar(flag);\n  const char* const value = posix::GetEnv(env_var.c_str());\n  return value == nullptr ? default_value : value;\n#endif  // defined(GTEST_GET_STRING_FROM_ENV_)\n}\n\n}  // namespace internal\n}  // namespace testing\n"
  },
  {
    "path": "tests/gtest/src/gtest-printers.cc",
    "content": "// Copyright 2007, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Google Test - The Google C++ Testing and Mocking Framework\n//\n// This file implements a universal value printer that can print a\n// value of any type T:\n//\n//   void ::testing::internal::UniversalPrinter<T>::Print(value, ostream_ptr);\n//\n// It uses the << operator when possible, and prints the bytes in the\n// object otherwise.  A user can override its behavior for a class\n// type Foo by defining either operator<<(::std::ostream&, const Foo&)\n// or void PrintTo(const Foo&, ::std::ostream*) in the namespace that\n// defines Foo.\n\n#include \"gtest/gtest-printers.h\"\n\n#include <stdio.h>\n\n#include <cctype>\n#include <cstdint>\n#include <cwchar>\n#include <ostream>  // NOLINT\n#include <string>\n#include <type_traits>\n\n#include \"gtest/internal/gtest-port.h\"\n#include \"src/gtest-internal-inl.h\"\n\nnamespace testing {\n\nnamespace {\n\nusing ::std::ostream;\n\n// Prints a segment of bytes in the given object.\nGTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_\nGTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_\nGTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_\nGTEST_ATTRIBUTE_NO_SANITIZE_THREAD_\nvoid PrintByteSegmentInObjectTo(const unsigned char* obj_bytes, size_t start,\n                                size_t count, ostream* os) {\n  char text[5] = \"\";\n  for (size_t i = 0; i != count; i++) {\n    const size_t j = start + i;\n    if (i != 0) {\n      // Organizes the bytes into groups of 2 for easy parsing by\n      // human.\n      if ((j % 2) == 0)\n        *os << ' ';\n      else\n        *os << '-';\n    }\n    GTEST_SNPRINTF_(text, sizeof(text), \"%02X\", obj_bytes[j]);\n    *os << text;\n  }\n}\n\n// Prints the bytes in the given value to the given ostream.\nvoid PrintBytesInObjectToImpl(const unsigned char* obj_bytes, size_t count,\n                              ostream* os) {\n  // Tells the user how big the object is.\n  *os << count << \"-byte object <\";\n\n  const size_t kThreshold = 132;\n  const size_t kChunkSize = 64;\n  // If the object size is bigger than kThreshold, we'll have to omit\n  // some details by printing only the first and the last kChunkSize\n  // bytes.\n  if (count < kThreshold) {\n    PrintByteSegmentInObjectTo(obj_bytes, 0, count, os);\n  } else {\n    PrintByteSegmentInObjectTo(obj_bytes, 0, kChunkSize, os);\n    *os << \" ... \";\n    // Rounds up to 2-byte boundary.\n    const size_t resume_pos = (count - kChunkSize + 1) / 2 * 2;\n    PrintByteSegmentInObjectTo(obj_bytes, resume_pos, count - resume_pos, os);\n  }\n  *os << \">\";\n}\n\n// Helpers for widening a character to char32_t. Since the standard does not\n// specify if char / wchar_t is signed or unsigned, it is important to first\n// convert it to the unsigned type of the same width before widening it to\n// char32_t.\ntemplate <typename CharType>\nchar32_t ToChar32(CharType in) {\n  return static_cast<char32_t>(\n      static_cast<typename std::make_unsigned<CharType>::type>(in));\n}\n\n}  // namespace\n\nnamespace internal {\n\n// Delegates to PrintBytesInObjectToImpl() to print the bytes in the\n// given object.  The delegation simplifies the implementation, which\n// uses the << operator and thus is easier done outside of the\n// ::testing::internal namespace, which contains a << operator that\n// sometimes conflicts with the one in STL.\nvoid PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count,\n                          ostream* os) {\n  PrintBytesInObjectToImpl(obj_bytes, count, os);\n}\n\n// Depending on the value of a char (or wchar_t), we print it in one\n// of three formats:\n//   - as is if it's a printable ASCII (e.g. 'a', '2', ' '),\n//   - as a hexadecimal escape sequence (e.g. '\\x7F'), or\n//   - as a special escape sequence (e.g. '\\r', '\\n').\nenum CharFormat { kAsIs, kHexEscape, kSpecialEscape };\n\n// Returns true if c is a printable ASCII character.  We test the\n// value of c directly instead of calling isprint(), which is buggy on\n// Windows Mobile.\ninline bool IsPrintableAscii(char32_t c) { return 0x20 <= c && c <= 0x7E; }\n\n// Prints c (of type char, char8_t, char16_t, char32_t, or wchar_t) as a\n// character literal without the quotes, escaping it when necessary; returns how\n// c was formatted.\ntemplate <typename Char>\nstatic CharFormat PrintAsCharLiteralTo(Char c, ostream* os) {\n  const char32_t u_c = ToChar32(c);\n  switch (u_c) {\n    case L'\\0':\n      *os << \"\\\\0\";\n      break;\n    case L'\\'':\n      *os << \"\\\\'\";\n      break;\n    case L'\\\\':\n      *os << \"\\\\\\\\\";\n      break;\n    case L'\\a':\n      *os << \"\\\\a\";\n      break;\n    case L'\\b':\n      *os << \"\\\\b\";\n      break;\n    case L'\\f':\n      *os << \"\\\\f\";\n      break;\n    case L'\\n':\n      *os << \"\\\\n\";\n      break;\n    case L'\\r':\n      *os << \"\\\\r\";\n      break;\n    case L'\\t':\n      *os << \"\\\\t\";\n      break;\n    case L'\\v':\n      *os << \"\\\\v\";\n      break;\n    default:\n      if (IsPrintableAscii(u_c)) {\n        *os << static_cast<char>(c);\n        return kAsIs;\n      } else {\n        ostream::fmtflags flags = os->flags();\n        *os << \"\\\\x\" << std::hex << std::uppercase << static_cast<int>(u_c);\n        os->flags(flags);\n        return kHexEscape;\n      }\n  }\n  return kSpecialEscape;\n}\n\n// Prints a char32_t c as if it's part of a string literal, escaping it when\n// necessary; returns how c was formatted.\nstatic CharFormat PrintAsStringLiteralTo(char32_t c, ostream* os) {\n  switch (c) {\n    case L'\\'':\n      *os << \"'\";\n      return kAsIs;\n    case L'\"':\n      *os << \"\\\\\\\"\";\n      return kSpecialEscape;\n    default:\n      return PrintAsCharLiteralTo(c, os);\n  }\n}\n\nstatic const char* GetCharWidthPrefix(char) { return \"\"; }\n\nstatic const char* GetCharWidthPrefix(signed char) { return \"\"; }\n\nstatic const char* GetCharWidthPrefix(unsigned char) { return \"\"; }\n\n#ifdef __cpp_char8_t\nstatic const char* GetCharWidthPrefix(char8_t) { return \"u8\"; }\n#endif\n\nstatic const char* GetCharWidthPrefix(char16_t) { return \"u\"; }\n\nstatic const char* GetCharWidthPrefix(char32_t) { return \"U\"; }\n\nstatic const char* GetCharWidthPrefix(wchar_t) { return \"L\"; }\n\n// Prints a char c as if it's part of a string literal, escaping it when\n// necessary; returns how c was formatted.\nstatic CharFormat PrintAsStringLiteralTo(char c, ostream* os) {\n  return PrintAsStringLiteralTo(ToChar32(c), os);\n}\n\n#ifdef __cpp_char8_t\nstatic CharFormat PrintAsStringLiteralTo(char8_t c, ostream* os) {\n  return PrintAsStringLiteralTo(ToChar32(c), os);\n}\n#endif\n\nstatic CharFormat PrintAsStringLiteralTo(char16_t c, ostream* os) {\n  return PrintAsStringLiteralTo(ToChar32(c), os);\n}\n\nstatic CharFormat PrintAsStringLiteralTo(wchar_t c, ostream* os) {\n  return PrintAsStringLiteralTo(ToChar32(c), os);\n}\n\n// Prints a character c (of type char, char8_t, char16_t, char32_t, or wchar_t)\n// and its code. '\\0' is printed as \"'\\\\0'\", other unprintable characters are\n// also properly escaped using the standard C++ escape sequence.\ntemplate <typename Char>\nvoid PrintCharAndCodeTo(Char c, ostream* os) {\n  // First, print c as a literal in the most readable form we can find.\n  *os << GetCharWidthPrefix(c) << \"'\";\n  const CharFormat format = PrintAsCharLiteralTo(c, os);\n  *os << \"'\";\n\n  // To aid user debugging, we also print c's code in decimal, unless\n  // it's 0 (in which case c was printed as '\\\\0', making the code\n  // obvious).\n  if (c == 0) return;\n  *os << \" (\" << static_cast<int>(c);\n\n  // For more convenience, we print c's code again in hexadecimal,\n  // unless c was already printed in the form '\\x##' or the code is in\n  // [1, 9].\n  if (format == kHexEscape || (1 <= c && c <= 9)) {\n    // Do nothing.\n  } else {\n    *os << \", 0x\" << String::FormatHexInt(static_cast<int>(c));\n  }\n  *os << \")\";\n}\n\nvoid PrintTo(unsigned char c, ::std::ostream* os) { PrintCharAndCodeTo(c, os); }\nvoid PrintTo(signed char c, ::std::ostream* os) { PrintCharAndCodeTo(c, os); }\n\n// Prints a wchar_t as a symbol if it is printable or as its internal\n// code otherwise and also as its code.  L'\\0' is printed as \"L'\\\\0'\".\nvoid PrintTo(wchar_t wc, ostream* os) { PrintCharAndCodeTo(wc, os); }\n\n// TODO(dcheng): Consider making this delegate to PrintCharAndCodeTo() as well.\nvoid PrintTo(char32_t c, ::std::ostream* os) {\n  *os << std::hex << \"U+\" << std::uppercase << std::setfill('0') << std::setw(4)\n      << static_cast<uint32_t>(c);\n}\n\n// gcc/clang __{u,}int128_t\n#if defined(__SIZEOF_INT128__)\nvoid PrintTo(__uint128_t v, ::std::ostream* os) {\n  if (v == 0) {\n    *os << \"0\";\n    return;\n  }\n\n  // Buffer large enough for ceil(log10(2^128))==39 and the null terminator\n  char buf[40];\n  char* p = buf + sizeof(buf);\n\n  // Some configurations have a __uint128_t, but no support for built in\n  // division. Do manual long division instead.\n\n  uint64_t high = static_cast<uint64_t>(v >> 64);\n  uint64_t low = static_cast<uint64_t>(v);\n\n  *--p = 0;\n  while (high != 0 || low != 0) {\n    uint64_t high_mod = high % 10;\n    high = high / 10;\n    // This is the long division algorithm specialized for a divisor of 10 and\n    // only two elements.\n    // Notable values:\n    //   2^64 / 10 == 1844674407370955161\n    //   2^64 % 10 == 6\n    const uint64_t carry = 6 * high_mod + low % 10;\n    low = low / 10 + high_mod * 1844674407370955161 + carry / 10;\n\n    char digit = static_cast<char>(carry % 10);\n    *--p = '0' + digit;\n  }\n  *os << p;\n}\nvoid PrintTo(__int128_t v, ::std::ostream* os) {\n  __uint128_t uv = static_cast<__uint128_t>(v);\n  if (v < 0) {\n    *os << \"-\";\n    uv = -uv;\n  }\n  PrintTo(uv, os);\n}\n#endif  // __SIZEOF_INT128__\n\n// Prints the given array of characters to the ostream.  CharType must be either\n// char, char8_t, char16_t, char32_t, or wchar_t.\n// The array starts at begin, the length is len, it may include '\\0' characters\n// and may not be NUL-terminated.\ntemplate <typename CharType>\nGTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_\n    GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_\n        GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ static CharFormat\n        PrintCharsAsStringTo(const CharType* begin, size_t len, ostream* os) {\n  const char* const quote_prefix = GetCharWidthPrefix(*begin);\n  *os << quote_prefix << \"\\\"\";\n  bool is_previous_hex = false;\n  CharFormat print_format = kAsIs;\n  for (size_t index = 0; index < len; ++index) {\n    const CharType cur = begin[index];\n    if (is_previous_hex && IsXDigit(cur)) {\n      // Previous character is of '\\x..' form and this character can be\n      // interpreted as another hexadecimal digit in its number. Break string to\n      // disambiguate.\n      *os << \"\\\" \" << quote_prefix << \"\\\"\";\n    }\n    is_previous_hex = PrintAsStringLiteralTo(cur, os) == kHexEscape;\n    // Remember if any characters required hex escaping.\n    if (is_previous_hex) {\n      print_format = kHexEscape;\n    }\n  }\n  *os << \"\\\"\";\n  return print_format;\n}\n\n// Prints a (const) char/wchar_t array of 'len' elements, starting at address\n// 'begin'.  CharType must be either char or wchar_t.\ntemplate <typename CharType>\nGTEST_ATTRIBUTE_NO_SANITIZE_MEMORY_ GTEST_ATTRIBUTE_NO_SANITIZE_ADDRESS_\n    GTEST_ATTRIBUTE_NO_SANITIZE_HWADDRESS_\n        GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_ static void\n        UniversalPrintCharArray(const CharType* begin, size_t len,\n                                ostream* os) {\n  // The code\n  //   const char kFoo[] = \"foo\";\n  // generates an array of 4, not 3, elements, with the last one being '\\0'.\n  //\n  // Therefore when printing a char array, we don't print the last element if\n  // it's '\\0', such that the output matches the string literal as it's\n  // written in the source code.\n  if (len > 0 && begin[len - 1] == '\\0') {\n    PrintCharsAsStringTo(begin, len - 1, os);\n    return;\n  }\n\n  // If, however, the last element in the array is not '\\0', e.g.\n  //    const char kFoo[] = { 'f', 'o', 'o' };\n  // we must print the entire array.  We also print a message to indicate\n  // that the array is not NUL-terminated.\n  PrintCharsAsStringTo(begin, len, os);\n  *os << \" (no terminating NUL)\";\n}\n\n// Prints a (const) char array of 'len' elements, starting at address 'begin'.\nvoid UniversalPrintArray(const char* begin, size_t len, ostream* os) {\n  UniversalPrintCharArray(begin, len, os);\n}\n\n#ifdef __cpp_char8_t\n// Prints a (const) char8_t array of 'len' elements, starting at address\n// 'begin'.\nvoid UniversalPrintArray(const char8_t* begin, size_t len, ostream* os) {\n  UniversalPrintCharArray(begin, len, os);\n}\n#endif\n\n// Prints a (const) char16_t array of 'len' elements, starting at address\n// 'begin'.\nvoid UniversalPrintArray(const char16_t* begin, size_t len, ostream* os) {\n  UniversalPrintCharArray(begin, len, os);\n}\n\n// Prints a (const) char32_t array of 'len' elements, starting at address\n// 'begin'.\nvoid UniversalPrintArray(const char32_t* begin, size_t len, ostream* os) {\n  UniversalPrintCharArray(begin, len, os);\n}\n\n// Prints a (const) wchar_t array of 'len' elements, starting at address\n// 'begin'.\nvoid UniversalPrintArray(const wchar_t* begin, size_t len, ostream* os) {\n  UniversalPrintCharArray(begin, len, os);\n}\n\nnamespace {\n\n// Prints a null-terminated C-style string to the ostream.\ntemplate <typename Char>\nvoid PrintCStringTo(const Char* s, ostream* os) {\n  if (s == nullptr) {\n    *os << \"NULL\";\n  } else {\n    *os << ImplicitCast_<const void*>(s) << \" pointing to \";\n    PrintCharsAsStringTo(s, std::char_traits<Char>::length(s), os);\n  }\n}\n\n}  // anonymous namespace\n\nvoid PrintTo(const char* s, ostream* os) { PrintCStringTo(s, os); }\n\n#ifdef __cpp_char8_t\nvoid PrintTo(const char8_t* s, ostream* os) { PrintCStringTo(s, os); }\n#endif\n\nvoid PrintTo(const char16_t* s, ostream* os) { PrintCStringTo(s, os); }\n\nvoid PrintTo(const char32_t* s, ostream* os) { PrintCStringTo(s, os); }\n\n// MSVC compiler can be configured to define whar_t as a typedef\n// of unsigned short. Defining an overload for const wchar_t* in that case\n// would cause pointers to unsigned shorts be printed as wide strings,\n// possibly accessing more memory than intended and causing invalid\n// memory accesses. MSVC defines _NATIVE_WCHAR_T_DEFINED symbol when\n// wchar_t is implemented as a native type.\n#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)\n// Prints the given wide C string to the ostream.\nvoid PrintTo(const wchar_t* s, ostream* os) { PrintCStringTo(s, os); }\n#endif  // wchar_t is native\n\nnamespace {\n\nbool ContainsUnprintableControlCodes(const char* str, size_t length) {\n  const unsigned char* s = reinterpret_cast<const unsigned char*>(str);\n\n  for (size_t i = 0; i < length; i++) {\n    unsigned char ch = *s++;\n    if (std::iscntrl(ch)) {\n      switch (ch) {\n        case '\\t':\n        case '\\n':\n        case '\\r':\n          break;\n        default:\n          return true;\n      }\n    }\n  }\n  return false;\n}\n\nbool IsUTF8TrailByte(unsigned char t) { return 0x80 <= t && t <= 0xbf; }\n\nbool IsValidUTF8(const char* str, size_t length) {\n  const unsigned char* s = reinterpret_cast<const unsigned char*>(str);\n\n  for (size_t i = 0; i < length;) {\n    unsigned char lead = s[i++];\n\n    if (lead <= 0x7f) {\n      continue;  // single-byte character (ASCII) 0..7F\n    }\n    if (lead < 0xc2) {\n      return false;  // trail byte or non-shortest form\n    } else if (lead <= 0xdf && (i + 1) <= length && IsUTF8TrailByte(s[i])) {\n      ++i;  // 2-byte character\n    } else if (0xe0 <= lead && lead <= 0xef && (i + 2) <= length &&\n               IsUTF8TrailByte(s[i]) && IsUTF8TrailByte(s[i + 1]) &&\n               // check for non-shortest form and surrogate\n               (lead != 0xe0 || s[i] >= 0xa0) &&\n               (lead != 0xed || s[i] < 0xa0)) {\n      i += 2;  // 3-byte character\n    } else if (0xf0 <= lead && lead <= 0xf4 && (i + 3) <= length &&\n               IsUTF8TrailByte(s[i]) && IsUTF8TrailByte(s[i + 1]) &&\n               IsUTF8TrailByte(s[i + 2]) &&\n               // check for non-shortest form\n               (lead != 0xf0 || s[i] >= 0x90) &&\n               (lead != 0xf4 || s[i] < 0x90)) {\n      i += 3;  // 4-byte character\n    } else {\n      return false;\n    }\n  }\n  return true;\n}\n\nvoid ConditionalPrintAsText(const char* str, size_t length, ostream* os) {\n  if (!ContainsUnprintableControlCodes(str, length) &&\n      IsValidUTF8(str, length)) {\n    *os << \"\\n    As Text: \\\"\" << str << \"\\\"\";\n  }\n}\n\n}  // anonymous namespace\n\nvoid PrintStringTo(const ::std::string& s, ostream* os) {\n  if (PrintCharsAsStringTo(s.data(), s.size(), os) == kHexEscape) {\n    if (GTEST_FLAG_GET(print_utf8)) {\n      ConditionalPrintAsText(s.data(), s.size(), os);\n    }\n  }\n}\n\n#ifdef __cpp_char8_t\nvoid PrintU8StringTo(const ::std::u8string& s, ostream* os) {\n  PrintCharsAsStringTo(s.data(), s.size(), os);\n}\n#endif\n\nvoid PrintU16StringTo(const ::std::u16string& s, ostream* os) {\n  PrintCharsAsStringTo(s.data(), s.size(), os);\n}\n\nvoid PrintU32StringTo(const ::std::u32string& s, ostream* os) {\n  PrintCharsAsStringTo(s.data(), s.size(), os);\n}\n\n#if GTEST_HAS_STD_WSTRING\nvoid PrintWideStringTo(const ::std::wstring& s, ostream* os) {\n  PrintCharsAsStringTo(s.data(), s.size(), os);\n}\n#endif  // GTEST_HAS_STD_WSTRING\n\n}  // namespace internal\n\n}  // namespace testing\n"
  },
  {
    "path": "tests/gtest/src/gtest-test-part.cc",
    "content": "// Copyright 2008, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n//\n// The Google C++ Testing and Mocking Framework (Google Test)\n\n#include \"gtest/gtest-test-part.h\"\n\n#include \"gtest/internal/gtest-port.h\"\n#include \"src/gtest-internal-inl.h\"\n\nnamespace testing {\n\nusing internal::GetUnitTestImpl;\n\n// Gets the summary of the failure message by omitting the stack trace\n// in it.\nstd::string TestPartResult::ExtractSummary(const char* message) {\n  const char* const stack_trace = strstr(message, internal::kStackTraceMarker);\n  return stack_trace == nullptr ? message : std::string(message, stack_trace);\n}\n\n// Prints a TestPartResult object.\nstd::ostream& operator<<(std::ostream& os, const TestPartResult& result) {\n  return os << internal::FormatFileLocation(result.file_name(),\n                                            result.line_number())\n            << \" \"\n            << (result.type() == TestPartResult::kSuccess ? \"Success\"\n                : result.type() == TestPartResult::kSkip  ? \"Skipped\"\n                : result.type() == TestPartResult::kFatalFailure\n                    ? \"Fatal failure\"\n                    : \"Non-fatal failure\")\n            << \":\\n\"\n            << result.message() << std::endl;\n}\n\n// Appends a TestPartResult to the array.\nvoid TestPartResultArray::Append(const TestPartResult& result) {\n  array_.push_back(result);\n}\n\n// Returns the TestPartResult at the given index (0-based).\nconst TestPartResult& TestPartResultArray::GetTestPartResult(int index) const {\n  if (index < 0 || index >= size()) {\n    printf(\"\\nInvalid index (%d) into TestPartResultArray.\\n\", index);\n    internal::posix::Abort();\n  }\n\n  return array_[static_cast<size_t>(index)];\n}\n\n// Returns the number of TestPartResult objects in the array.\nint TestPartResultArray::size() const {\n  return static_cast<int>(array_.size());\n}\n\nnamespace internal {\n\nHasNewFatalFailureHelper::HasNewFatalFailureHelper()\n    : has_new_fatal_failure_(false),\n      original_reporter_(\n          GetUnitTestImpl()->GetTestPartResultReporterForCurrentThread()) {\n  GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this);\n}\n\nHasNewFatalFailureHelper::~HasNewFatalFailureHelper() {\n  GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(\n      original_reporter_);\n}\n\nvoid HasNewFatalFailureHelper::ReportTestPartResult(\n    const TestPartResult& result) {\n  if (result.fatally_failed()) has_new_fatal_failure_ = true;\n  original_reporter_->ReportTestPartResult(result);\n}\n\n}  // namespace internal\n\n}  // namespace testing\n"
  },
  {
    "path": "tests/gtest/src/gtest-typed-test.cc",
    "content": "// Copyright 2008 Google Inc.\n// All Rights Reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include \"gtest/gtest-typed-test.h\"\n\n#include \"gtest/gtest.h\"\n\nnamespace testing {\nnamespace internal {\n\n// Skips to the first non-space char in str. Returns an empty string if str\n// contains only whitespace characters.\nstatic const char* SkipSpaces(const char* str) {\n  while (IsSpace(*str)) str++;\n  return str;\n}\n\nstatic std::vector<std::string> SplitIntoTestNames(const char* src) {\n  std::vector<std::string> name_vec;\n  src = SkipSpaces(src);\n  for (; src != nullptr; src = SkipComma(src)) {\n    name_vec.push_back(StripTrailingSpaces(GetPrefixUntilComma(src)));\n  }\n  return name_vec;\n}\n\n// Verifies that registered_tests match the test names in\n// registered_tests_; returns registered_tests if successful, or\n// aborts the program otherwise.\nconst char* TypedTestSuitePState::VerifyRegisteredTestNames(\n    const char* test_suite_name, const char* file, int line,\n    const char* registered_tests) {\n  RegisterTypeParameterizedTestSuite(test_suite_name, CodeLocation(file, line));\n\n  typedef RegisteredTestsMap::const_iterator RegisteredTestIter;\n  registered_ = true;\n\n  std::vector<std::string> name_vec = SplitIntoTestNames(registered_tests);\n\n  Message errors;\n\n  std::set<std::string> tests;\n  for (std::vector<std::string>::const_iterator name_it = name_vec.begin();\n       name_it != name_vec.end(); ++name_it) {\n    const std::string& name = *name_it;\n    if (tests.count(name) != 0) {\n      errors << \"Test \" << name << \" is listed more than once.\\n\";\n      continue;\n    }\n\n    if (registered_tests_.count(name) != 0) {\n      tests.insert(name);\n    } else {\n      errors << \"No test named \" << name\n             << \" can be found in this test suite.\\n\";\n    }\n  }\n\n  for (RegisteredTestIter it = registered_tests_.begin();\n       it != registered_tests_.end(); ++it) {\n    if (tests.count(it->first) == 0) {\n      errors << \"You forgot to list test \" << it->first << \".\\n\";\n    }\n  }\n\n  const std::string& errors_str = errors.GetString();\n  if (errors_str != \"\") {\n    fprintf(stderr, \"%s %s\", FormatFileLocation(file, line).c_str(),\n            errors_str.c_str());\n    fflush(stderr);\n    posix::Abort();\n  }\n\n  return registered_tests;\n}\n\n}  // namespace internal\n}  // namespace testing\n"
  },
  {
    "path": "tests/gtest/src/gtest.cc",
    "content": "// Copyright 2005, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n//\n// The Google C++ Testing and Mocking Framework (Google Test)\n\n#include \"gtest/gtest.h\"\n\n#include <ctype.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <time.h>\n#include <wchar.h>\n#include <wctype.h>\n\n#include <algorithm>\n#include <chrono>  // NOLINT\n#include <cmath>\n#include <cstdint>\n#include <initializer_list>\n#include <iomanip>\n#include <iterator>\n#include <limits>\n#include <list>\n#include <map>\n#include <ostream>  // NOLINT\n#include <sstream>\n#include <unordered_set>\n#include <vector>\n\n#include \"gtest/gtest-assertion-result.h\"\n#include \"gtest/gtest-spi.h\"\n#include \"gtest/internal/custom/gtest.h\"\n\n#if GTEST_OS_LINUX\n\n#include <fcntl.h>   // NOLINT\n#include <limits.h>  // NOLINT\n#include <sched.h>   // NOLINT\n// Declares vsnprintf().  This header is not available on Windows.\n#include <strings.h>   // NOLINT\n#include <sys/mman.h>  // NOLINT\n#include <sys/time.h>  // NOLINT\n#include <unistd.h>    // NOLINT\n\n#include <string>\n\n#elif GTEST_OS_ZOS\n#include <sys/time.h>  // NOLINT\n\n// On z/OS we additionally need strings.h for strcasecmp.\n#include <strings.h>   // NOLINT\n\n#elif GTEST_OS_WINDOWS_MOBILE  // We are on Windows CE.\n\n#include <windows.h>  // NOLINT\n#undef min\n\n#elif GTEST_OS_WINDOWS  // We are on Windows proper.\n\n#include <windows.h>  // NOLINT\n#undef min\n\n#ifdef _MSC_VER\n#include <crtdbg.h>  // NOLINT\n#endif\n\n#include <io.h>         // NOLINT\n#include <sys/stat.h>   // NOLINT\n#include <sys/timeb.h>  // NOLINT\n#include <sys/types.h>  // NOLINT\n\n#if GTEST_OS_WINDOWS_MINGW\n#include <sys/time.h>  // NOLINT\n#endif                 // GTEST_OS_WINDOWS_MINGW\n\n#else\n\n// cpplint thinks that the header is already included, so we want to\n// silence it.\n#include <sys/time.h>  // NOLINT\n#include <unistd.h>    // NOLINT\n\n#endif  // GTEST_OS_LINUX\n\n#if GTEST_HAS_EXCEPTIONS\n#include <stdexcept>\n#endif\n\n#if GTEST_CAN_STREAM_RESULTS_\n#include <arpa/inet.h>   // NOLINT\n#include <netdb.h>       // NOLINT\n#include <sys/socket.h>  // NOLINT\n#include <sys/types.h>   // NOLINT\n#endif\n\n#include \"src/gtest-internal-inl.h\"\n\n#if GTEST_OS_WINDOWS\n#define vsnprintf _vsnprintf\n#endif  // GTEST_OS_WINDOWS\n\n#if GTEST_OS_MAC\n#ifndef GTEST_OS_IOS\n#include <crt_externs.h>\n#endif\n#endif\n\n#if GTEST_HAS_ABSL\n#include \"absl/debugging/failure_signal_handler.h\"\n#include \"absl/debugging/stacktrace.h\"\n#include \"absl/debugging/symbolize.h\"\n#include \"absl/flags/parse.h\"\n#include \"absl/flags/usage.h\"\n#include \"absl/strings/str_cat.h\"\n#include \"absl/strings/str_replace.h\"\n#endif  // GTEST_HAS_ABSL\n\nnamespace testing {\n\nusing internal::CountIf;\nusing internal::ForEach;\nusing internal::GetElementOr;\nusing internal::Shuffle;\n\n// Constants.\n\n// A test whose test suite name or test name matches this filter is\n// disabled and not run.\nstatic const char kDisableTestFilter[] = \"DISABLED_*:*/DISABLED_*\";\n\n// A test suite whose name matches this filter is considered a death\n// test suite and will be run before test suites whose name doesn't\n// match this filter.\nstatic const char kDeathTestSuiteFilter[] = \"*DeathTest:*DeathTest/*\";\n\n// A test filter that matches everything.\nstatic const char kUniversalFilter[] = \"*\";\n\n// The default output format.\nstatic const char kDefaultOutputFormat[] = \"xml\";\n// The default output file.\nstatic const char kDefaultOutputFile[] = \"test_detail\";\n\n// The environment variable name for the test shard index.\nstatic const char kTestShardIndex[] = \"GTEST_SHARD_INDEX\";\n// The environment variable name for the total number of test shards.\nstatic const char kTestTotalShards[] = \"GTEST_TOTAL_SHARDS\";\n// The environment variable name for the test shard status file.\nstatic const char kTestShardStatusFile[] = \"GTEST_SHARD_STATUS_FILE\";\n\nnamespace internal {\n\n// The text used in failure messages to indicate the start of the\n// stack trace.\nconst char kStackTraceMarker[] = \"\\nStack trace:\\n\";\n\n// g_help_flag is true if and only if the --help flag or an equivalent form\n// is specified on the command line.\nbool g_help_flag = false;\n\n// Utility function to Open File for Writing\nstatic FILE* OpenFileForWriting(const std::string& output_file) {\n  FILE* fileout = nullptr;\n  FilePath output_file_path(output_file);\n  FilePath output_dir(output_file_path.RemoveFileName());\n\n  if (output_dir.CreateDirectoriesRecursively()) {\n    fileout = posix::FOpen(output_file.c_str(), \"w\");\n  }\n  if (fileout == nullptr) {\n    GTEST_LOG_(FATAL) << \"Unable to open file \\\"\" << output_file << \"\\\"\";\n  }\n  return fileout;\n}\n\n}  // namespace internal\n\n// Bazel passes in the argument to '--test_filter' via the TESTBRIDGE_TEST_ONLY\n// environment variable.\nstatic const char* GetDefaultFilter() {\n  const char* const testbridge_test_only =\n      internal::posix::GetEnv(\"TESTBRIDGE_TEST_ONLY\");\n  if (testbridge_test_only != nullptr) {\n    return testbridge_test_only;\n  }\n  return kUniversalFilter;\n}\n\n// Bazel passes in the argument to '--test_runner_fail_fast' via the\n// TESTBRIDGE_TEST_RUNNER_FAIL_FAST environment variable.\nstatic bool GetDefaultFailFast() {\n  const char* const testbridge_test_runner_fail_fast =\n      internal::posix::GetEnv(\"TESTBRIDGE_TEST_RUNNER_FAIL_FAST\");\n  if (testbridge_test_runner_fail_fast != nullptr) {\n    return strcmp(testbridge_test_runner_fail_fast, \"1\") == 0;\n  }\n  return false;\n}\n\n}  // namespace testing\n\nGTEST_DEFINE_bool_(\n    fail_fast,\n    testing::internal::BoolFromGTestEnv(\"fail_fast\",\n                                        testing::GetDefaultFailFast()),\n    \"True if and only if a test failure should stop further test execution.\");\n\nGTEST_DEFINE_bool_(\n    also_run_disabled_tests,\n    testing::internal::BoolFromGTestEnv(\"also_run_disabled_tests\", false),\n    \"Run disabled tests too, in addition to the tests normally being run.\");\n\nGTEST_DEFINE_bool_(\n    break_on_failure,\n    testing::internal::BoolFromGTestEnv(\"break_on_failure\", false),\n    \"True if and only if a failed assertion should be a debugger \"\n    \"break-point.\");\n\nGTEST_DEFINE_bool_(catch_exceptions,\n                   testing::internal::BoolFromGTestEnv(\"catch_exceptions\",\n                                                       true),\n                   \"True if and only if \" GTEST_NAME_\n                   \" should catch exceptions and treat them as test failures.\");\n\nGTEST_DEFINE_string_(\n    color, testing::internal::StringFromGTestEnv(\"color\", \"auto\"),\n    \"Whether to use colors in the output.  Valid values: yes, no, \"\n    \"and auto.  'auto' means to use colors if the output is \"\n    \"being sent to a terminal and the TERM environment variable \"\n    \"is set to a terminal type that supports colors.\");\n\nGTEST_DEFINE_string_(\n    filter,\n    testing::internal::StringFromGTestEnv(\"filter\",\n                                          testing::GetDefaultFilter()),\n    \"A colon-separated list of glob (not regex) patterns \"\n    \"for filtering the tests to run, optionally followed by a \"\n    \"'-' and a : separated list of negative patterns (tests to \"\n    \"exclude).  A test is run if it matches one of the positive \"\n    \"patterns and does not match any of the negative patterns.\");\n\nGTEST_DEFINE_bool_(\n    install_failure_signal_handler,\n    testing::internal::BoolFromGTestEnv(\"install_failure_signal_handler\",\n                                        false),\n    \"If true and supported on the current platform, \" GTEST_NAME_\n    \" should \"\n    \"install a signal handler that dumps debugging information when fatal \"\n    \"signals are raised.\");\n\nGTEST_DEFINE_bool_(list_tests, false, \"List all tests without running them.\");\n\n// The net priority order after flag processing is thus:\n//   --gtest_output command line flag\n//   GTEST_OUTPUT environment variable\n//   XML_OUTPUT_FILE environment variable\n//   ''\nGTEST_DEFINE_string_(\n    output,\n    testing::internal::StringFromGTestEnv(\n        \"output\", testing::internal::OutputFlagAlsoCheckEnvVar().c_str()),\n    \"A format (defaults to \\\"xml\\\" but can be specified to be \\\"json\\\"), \"\n    \"optionally followed by a colon and an output file name or directory. \"\n    \"A directory is indicated by a trailing pathname separator. \"\n    \"Examples: \\\"xml:filename.xml\\\", \\\"xml::directoryname/\\\". \"\n    \"If a directory is specified, output files will be created \"\n    \"within that directory, with file-names based on the test \"\n    \"executable's name and, if necessary, made unique by adding \"\n    \"digits.\");\n\nGTEST_DEFINE_bool_(\n    brief, testing::internal::BoolFromGTestEnv(\"brief\", false),\n    \"True if only test failures should be displayed in text output.\");\n\nGTEST_DEFINE_bool_(print_time,\n                   testing::internal::BoolFromGTestEnv(\"print_time\", true),\n                   \"True if and only if \" GTEST_NAME_\n                   \" should display elapsed time in text output.\");\n\nGTEST_DEFINE_bool_(print_utf8,\n                   testing::internal::BoolFromGTestEnv(\"print_utf8\", true),\n                   \"True if and only if \" GTEST_NAME_\n                   \" prints UTF8 characters as text.\");\n\nGTEST_DEFINE_int32_(\n    random_seed, testing::internal::Int32FromGTestEnv(\"random_seed\", 0),\n    \"Random number seed to use when shuffling test orders.  Must be in range \"\n    \"[1, 99999], or 0 to use a seed based on the current time.\");\n\nGTEST_DEFINE_int32_(\n    repeat, testing::internal::Int32FromGTestEnv(\"repeat\", 1),\n    \"How many times to repeat each test.  Specify a negative number \"\n    \"for repeating forever.  Useful for shaking out flaky tests.\");\n\nGTEST_DEFINE_bool_(\n    recreate_environments_when_repeating,\n    testing::internal::BoolFromGTestEnv(\"recreate_environments_when_repeating\",\n                                        false),\n    \"Controls whether global test environments are recreated for each repeat \"\n    \"of the tests. If set to false the global test environments are only set \"\n    \"up once, for the first iteration, and only torn down once, for the last. \"\n    \"Useful for shaking out flaky tests with stable, expensive test \"\n    \"environments. If --gtest_repeat is set to a negative number, meaning \"\n    \"there is no last run, the environments will always be recreated to avoid \"\n    \"leaks.\");\n\nGTEST_DEFINE_bool_(show_internal_stack_frames, false,\n                   \"True if and only if \" GTEST_NAME_\n                   \" should include internal stack frames when \"\n                   \"printing test failure stack traces.\");\n\nGTEST_DEFINE_bool_(shuffle,\n                   testing::internal::BoolFromGTestEnv(\"shuffle\", false),\n                   \"True if and only if \" GTEST_NAME_\n                   \" should randomize tests' order on every run.\");\n\nGTEST_DEFINE_int32_(\n    stack_trace_depth,\n    testing::internal::Int32FromGTestEnv(\"stack_trace_depth\",\n                                         testing::kMaxStackTraceDepth),\n    \"The maximum number of stack frames to print when an \"\n    \"assertion fails.  The valid range is 0 through 100, inclusive.\");\n\nGTEST_DEFINE_string_(\n    stream_result_to,\n    testing::internal::StringFromGTestEnv(\"stream_result_to\", \"\"),\n    \"This flag specifies the host name and the port number on which to stream \"\n    \"test results. Example: \\\"localhost:555\\\". The flag is effective only on \"\n    \"Linux.\");\n\nGTEST_DEFINE_bool_(\n    throw_on_failure,\n    testing::internal::BoolFromGTestEnv(\"throw_on_failure\", false),\n    \"When this flag is specified, a failed assertion will throw an exception \"\n    \"if exceptions are enabled or exit the program with a non-zero code \"\n    \"otherwise. For use with an external test framework.\");\n\n#if GTEST_USE_OWN_FLAGFILE_FLAG_\nGTEST_DEFINE_string_(\n    flagfile, testing::internal::StringFromGTestEnv(\"flagfile\", \"\"),\n    \"This flag specifies the flagfile to read command-line flags from.\");\n#endif  // GTEST_USE_OWN_FLAGFILE_FLAG_\n\nnamespace testing {\nnamespace internal {\n\n// Generates a random number from [0, range), using a Linear\n// Congruential Generator (LCG).  Crashes if 'range' is 0 or greater\n// than kMaxRange.\nuint32_t Random::Generate(uint32_t range) {\n  // These constants are the same as are used in glibc's rand(3).\n  // Use wider types than necessary to prevent unsigned overflow diagnostics.\n  state_ = static_cast<uint32_t>(1103515245ULL * state_ + 12345U) % kMaxRange;\n\n  GTEST_CHECK_(range > 0) << \"Cannot generate a number in the range [0, 0).\";\n  GTEST_CHECK_(range <= kMaxRange)\n      << \"Generation of a number in [0, \" << range << \") was requested, \"\n      << \"but this can only generate numbers in [0, \" << kMaxRange << \").\";\n\n  // Converting via modulus introduces a bit of downward bias, but\n  // it's simple, and a linear congruential generator isn't too good\n  // to begin with.\n  return state_ % range;\n}\n\n// GTestIsInitialized() returns true if and only if the user has initialized\n// Google Test.  Useful for catching the user mistake of not initializing\n// Google Test before calling RUN_ALL_TESTS().\nstatic bool GTestIsInitialized() { return GetArgvs().size() > 0; }\n\n// Iterates over a vector of TestSuites, keeping a running sum of the\n// results of calling a given int-returning method on each.\n// Returns the sum.\nstatic int SumOverTestSuiteList(const std::vector<TestSuite*>& case_list,\n                                int (TestSuite::*method)() const) {\n  int sum = 0;\n  for (size_t i = 0; i < case_list.size(); i++) {\n    sum += (case_list[i]->*method)();\n  }\n  return sum;\n}\n\n// Returns true if and only if the test suite passed.\nstatic bool TestSuitePassed(const TestSuite* test_suite) {\n  return test_suite->should_run() && test_suite->Passed();\n}\n\n// Returns true if and only if the test suite failed.\nstatic bool TestSuiteFailed(const TestSuite* test_suite) {\n  return test_suite->should_run() && test_suite->Failed();\n}\n\n// Returns true if and only if test_suite contains at least one test that\n// should run.\nstatic bool ShouldRunTestSuite(const TestSuite* test_suite) {\n  return test_suite->should_run();\n}\n\n// AssertHelper constructor.\nAssertHelper::AssertHelper(TestPartResult::Type type, const char* file,\n                           int line, const char* message)\n    : data_(new AssertHelperData(type, file, line, message)) {}\n\nAssertHelper::~AssertHelper() { delete data_; }\n\n// Message assignment, for assertion streaming support.\nvoid AssertHelper::operator=(const Message& message) const {\n  UnitTest::GetInstance()->AddTestPartResult(\n      data_->type, data_->file, data_->line,\n      AppendUserMessage(data_->message, message),\n      UnitTest::GetInstance()->impl()->CurrentOsStackTraceExceptTop(1)\n      // Skips the stack frame for this function itself.\n  );  // NOLINT\n}\n\nnamespace {\n\n// When TEST_P is found without a matching INSTANTIATE_TEST_SUITE_P\n// to creates test cases for it, a synthetic test case is\n// inserted to report ether an error or a log message.\n//\n// This configuration bit will likely be removed at some point.\nconstexpr bool kErrorOnUninstantiatedParameterizedTest = true;\nconstexpr bool kErrorOnUninstantiatedTypeParameterizedTest = true;\n\n// A test that fails at a given file/line location with a given message.\nclass FailureTest : public Test {\n public:\n  explicit FailureTest(const CodeLocation& loc, std::string error_message,\n                       bool as_error)\n      : loc_(loc),\n        error_message_(std::move(error_message)),\n        as_error_(as_error) {}\n\n  void TestBody() override {\n    if (as_error_) {\n      AssertHelper(TestPartResult::kNonFatalFailure, loc_.file.c_str(),\n                   loc_.line, \"\") = Message() << error_message_;\n    } else {\n      std::cout << error_message_ << std::endl;\n    }\n  }\n\n private:\n  const CodeLocation loc_;\n  const std::string error_message_;\n  const bool as_error_;\n};\n\n}  // namespace\n\nstd::set<std::string>* GetIgnoredParameterizedTestSuites() {\n  return UnitTest::GetInstance()->impl()->ignored_parameterized_test_suites();\n}\n\n// Add a given test_suit to the list of them allow to go un-instantiated.\nMarkAsIgnored::MarkAsIgnored(const char* test_suite) {\n  GetIgnoredParameterizedTestSuites()->insert(test_suite);\n}\n\n// If this parameterized test suite has no instantiations (and that\n// has not been marked as okay), emit a test case reporting that.\nvoid InsertSyntheticTestCase(const std::string& name, CodeLocation location,\n                             bool has_test_p) {\n  const auto& ignored = *GetIgnoredParameterizedTestSuites();\n  if (ignored.find(name) != ignored.end()) return;\n\n  const char kMissingInstantiation[] =  //\n      \" is defined via TEST_P, but never instantiated. None of the test cases \"\n      \"will run. Either no INSTANTIATE_TEST_SUITE_P is provided or the only \"\n      \"ones provided expand to nothing.\"\n      \"\\n\\n\"\n      \"Ideally, TEST_P definitions should only ever be included as part of \"\n      \"binaries that intend to use them. (As opposed to, for example, being \"\n      \"placed in a library that may be linked in to get other utilities.)\";\n\n  const char kMissingTestCase[] =  //\n      \" is instantiated via INSTANTIATE_TEST_SUITE_P, but no tests are \"\n      \"defined via TEST_P . No test cases will run.\"\n      \"\\n\\n\"\n      \"Ideally, INSTANTIATE_TEST_SUITE_P should only ever be invoked from \"\n      \"code that always depend on code that provides TEST_P. Failing to do \"\n      \"so is often an indication of dead code, e.g. the last TEST_P was \"\n      \"removed but the rest got left behind.\";\n\n  std::string message =\n      \"Parameterized test suite \" + name +\n      (has_test_p ? kMissingInstantiation : kMissingTestCase) +\n      \"\\n\\n\"\n      \"To suppress this error for this test suite, insert the following line \"\n      \"(in a non-header) in the namespace it is defined in:\"\n      \"\\n\\n\"\n      \"GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(\" +\n      name + \");\";\n\n  std::string full_name = \"UninstantiatedParameterizedTestSuite<\" + name + \">\";\n  RegisterTest(  //\n      \"GoogleTestVerification\", full_name.c_str(),\n      nullptr,  // No type parameter.\n      nullptr,  // No value parameter.\n      location.file.c_str(), location.line, [message, location] {\n        return new FailureTest(location, message,\n                               kErrorOnUninstantiatedParameterizedTest);\n      });\n}\n\nvoid RegisterTypeParameterizedTestSuite(const char* test_suite_name,\n                                        CodeLocation code_location) {\n  GetUnitTestImpl()->type_parameterized_test_registry().RegisterTestSuite(\n      test_suite_name, code_location);\n}\n\nvoid RegisterTypeParameterizedTestSuiteInstantiation(const char* case_name) {\n  GetUnitTestImpl()->type_parameterized_test_registry().RegisterInstantiation(\n      case_name);\n}\n\nvoid TypeParameterizedTestSuiteRegistry::RegisterTestSuite(\n    const char* test_suite_name, CodeLocation code_location) {\n  suites_.emplace(std::string(test_suite_name),\n                  TypeParameterizedTestSuiteInfo(code_location));\n}\n\nvoid TypeParameterizedTestSuiteRegistry::RegisterInstantiation(\n    const char* test_suite_name) {\n  auto it = suites_.find(std::string(test_suite_name));\n  if (it != suites_.end()) {\n    it->second.instantiated = true;\n  } else {\n    GTEST_LOG_(ERROR) << \"Unknown type parameterized test suit '\"\n                      << test_suite_name << \"'\";\n  }\n}\n\nvoid TypeParameterizedTestSuiteRegistry::CheckForInstantiations() {\n  const auto& ignored = *GetIgnoredParameterizedTestSuites();\n  for (const auto& testcase : suites_) {\n    if (testcase.second.instantiated) continue;\n    if (ignored.find(testcase.first) != ignored.end()) continue;\n\n    std::string message =\n        \"Type parameterized test suite \" + testcase.first +\n        \" is defined via REGISTER_TYPED_TEST_SUITE_P, but never instantiated \"\n        \"via INSTANTIATE_TYPED_TEST_SUITE_P. None of the test cases will run.\"\n        \"\\n\\n\"\n        \"Ideally, TYPED_TEST_P definitions should only ever be included as \"\n        \"part of binaries that intend to use them. (As opposed to, for \"\n        \"example, being placed in a library that may be linked in to get other \"\n        \"utilities.)\"\n        \"\\n\\n\"\n        \"To suppress this error for this test suite, insert the following line \"\n        \"(in a non-header) in the namespace it is defined in:\"\n        \"\\n\\n\"\n        \"GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(\" +\n        testcase.first + \");\";\n\n    std::string full_name =\n        \"UninstantiatedTypeParameterizedTestSuite<\" + testcase.first + \">\";\n    RegisterTest(  //\n        \"GoogleTestVerification\", full_name.c_str(),\n        nullptr,  // No type parameter.\n        nullptr,  // No value parameter.\n        testcase.second.code_location.file.c_str(),\n        testcase.second.code_location.line, [message, testcase] {\n          return new FailureTest(testcase.second.code_location, message,\n                                 kErrorOnUninstantiatedTypeParameterizedTest);\n        });\n  }\n}\n\n// A copy of all command line arguments.  Set by InitGoogleTest().\nstatic ::std::vector<std::string> g_argvs;\n\n::std::vector<std::string> GetArgvs() {\n#if defined(GTEST_CUSTOM_GET_ARGVS_)\n  // GTEST_CUSTOM_GET_ARGVS_() may return a container of std::string or\n  // ::string. This code converts it to the appropriate type.\n  const auto& custom = GTEST_CUSTOM_GET_ARGVS_();\n  return ::std::vector<std::string>(custom.begin(), custom.end());\n#else   // defined(GTEST_CUSTOM_GET_ARGVS_)\n  return g_argvs;\n#endif  // defined(GTEST_CUSTOM_GET_ARGVS_)\n}\n\n// Returns the current application's name, removing directory path if that\n// is present.\nFilePath GetCurrentExecutableName() {\n  FilePath result;\n\n#if GTEST_OS_WINDOWS || GTEST_OS_OS2\n  result.Set(FilePath(GetArgvs()[0]).RemoveExtension(\"exe\"));\n#else\n  result.Set(FilePath(GetArgvs()[0]));\n#endif  // GTEST_OS_WINDOWS\n\n  return result.RemoveDirectoryName();\n}\n\n// Functions for processing the gtest_output flag.\n\n// Returns the output format, or \"\" for normal printed output.\nstd::string UnitTestOptions::GetOutputFormat() {\n  std::string s = GTEST_FLAG_GET(output);\n  const char* const gtest_output_flag = s.c_str();\n  const char* const colon = strchr(gtest_output_flag, ':');\n  return (colon == nullptr)\n             ? std::string(gtest_output_flag)\n             : std::string(gtest_output_flag,\n                           static_cast<size_t>(colon - gtest_output_flag));\n}\n\n// Returns the name of the requested output file, or the default if none\n// was explicitly specified.\nstd::string UnitTestOptions::GetAbsolutePathToOutputFile() {\n  std::string s = GTEST_FLAG_GET(output);\n  const char* const gtest_output_flag = s.c_str();\n\n  std::string format = GetOutputFormat();\n  if (format.empty()) format = std::string(kDefaultOutputFormat);\n\n  const char* const colon = strchr(gtest_output_flag, ':');\n  if (colon == nullptr)\n    return internal::FilePath::MakeFileName(\n               internal::FilePath(\n                   UnitTest::GetInstance()->original_working_dir()),\n               internal::FilePath(kDefaultOutputFile), 0, format.c_str())\n        .string();\n\n  internal::FilePath output_name(colon + 1);\n  if (!output_name.IsAbsolutePath())\n    output_name = internal::FilePath::ConcatPaths(\n        internal::FilePath(UnitTest::GetInstance()->original_working_dir()),\n        internal::FilePath(colon + 1));\n\n  if (!output_name.IsDirectory()) return output_name.string();\n\n  internal::FilePath result(internal::FilePath::GenerateUniqueFileName(\n      output_name, internal::GetCurrentExecutableName(),\n      GetOutputFormat().c_str()));\n  return result.string();\n}\n\n// Returns true if and only if the wildcard pattern matches the string. Each\n// pattern consists of regular characters, single-character wildcards (?), and\n// multi-character wildcards (*).\n//\n// This function implements a linear-time string globbing algorithm based on\n// https://research.swtch.com/glob.\nstatic bool PatternMatchesString(const std::string& name_str,\n                                 const char* pattern, const char* pattern_end) {\n  const char* name = name_str.c_str();\n  const char* const name_begin = name;\n  const char* const name_end = name + name_str.size();\n\n  const char* pattern_next = pattern;\n  const char* name_next = name;\n\n  while (pattern < pattern_end || name < name_end) {\n    if (pattern < pattern_end) {\n      switch (*pattern) {\n        default:  // Match an ordinary character.\n          if (name < name_end && *name == *pattern) {\n            ++pattern;\n            ++name;\n            continue;\n          }\n          break;\n        case '?':  // Match any single character.\n          if (name < name_end) {\n            ++pattern;\n            ++name;\n            continue;\n          }\n          break;\n        case '*':\n          // Match zero or more characters. Start by skipping over the wildcard\n          // and matching zero characters from name. If that fails, restart and\n          // match one more character than the last attempt.\n          pattern_next = pattern;\n          name_next = name + 1;\n          ++pattern;\n          continue;\n      }\n    }\n    // Failed to match a character. Restart if possible.\n    if (name_begin < name_next && name_next <= name_end) {\n      pattern = pattern_next;\n      name = name_next;\n      continue;\n    }\n    return false;\n  }\n  return true;\n}\n\nnamespace {\n\nbool IsGlobPattern(const std::string& pattern) {\n  return std::any_of(pattern.begin(), pattern.end(),\n                     [](const char c) { return c == '?' || c == '*'; });\n}\n\nclass UnitTestFilter {\n public:\n  UnitTestFilter() = default;\n\n  // Constructs a filter from a string of patterns separated by `:`.\n  explicit UnitTestFilter(const std::string& filter) {\n    // By design \"\" filter matches \"\" string.\n    std::vector<std::string> all_patterns;\n    SplitString(filter, ':', &all_patterns);\n    const auto exact_match_patterns_begin = std::partition(\n        all_patterns.begin(), all_patterns.end(), &IsGlobPattern);\n\n    glob_patterns_.reserve(static_cast<size_t>(\n        std::distance(all_patterns.begin(), exact_match_patterns_begin)));\n    std::move(all_patterns.begin(), exact_match_patterns_begin,\n              std::inserter(glob_patterns_, glob_patterns_.begin()));\n    std::move(\n        exact_match_patterns_begin, all_patterns.end(),\n        std::inserter(exact_match_patterns_, exact_match_patterns_.begin()));\n  }\n\n  // Returns true if and only if name matches at least one of the patterns in\n  // the filter.\n  bool MatchesName(const std::string& name) const {\n    return exact_match_patterns_.count(name) > 0 ||\n           std::any_of(glob_patterns_.begin(), glob_patterns_.end(),\n                       [&name](const std::string& pattern) {\n                         return PatternMatchesString(\n                             name, pattern.c_str(),\n                             pattern.c_str() + pattern.size());\n                       });\n  }\n\n private:\n  std::vector<std::string> glob_patterns_;\n  std::unordered_set<std::string> exact_match_patterns_;\n};\n\nclass PositiveAndNegativeUnitTestFilter {\n public:\n  // Constructs a positive and a negative filter from a string. The string\n  // contains a positive filter optionally followed by a '-' character and a\n  // negative filter. In case only a negative filter is provided the positive\n  // filter will be assumed \"*\".\n  // A filter is a list of patterns separated by ':'.\n  explicit PositiveAndNegativeUnitTestFilter(const std::string& filter) {\n    std::vector<std::string> positive_and_negative_filters;\n\n    // NOTE: `SplitString` always returns a non-empty container.\n    SplitString(filter, '-', &positive_and_negative_filters);\n    const auto& positive_filter = positive_and_negative_filters.front();\n\n    if (positive_and_negative_filters.size() > 1) {\n      positive_filter_ = UnitTestFilter(\n          positive_filter.empty() ? kUniversalFilter : positive_filter);\n\n      // TODO(b/214626361): Fail on multiple '-' characters\n      // For the moment to preserve old behavior we concatenate the rest of the\n      // string parts with `-` as separator to generate the negative filter.\n      auto negative_filter_string = positive_and_negative_filters[1];\n      for (std::size_t i = 2; i < positive_and_negative_filters.size(); i++)\n        negative_filter_string =\n            negative_filter_string + '-' + positive_and_negative_filters[i];\n      negative_filter_ = UnitTestFilter(negative_filter_string);\n    } else {\n      // In case we don't have a negative filter and positive filter is \"\"\n      // we do not use kUniversalFilter by design as opposed to when we have a\n      // negative filter.\n      positive_filter_ = UnitTestFilter(positive_filter);\n    }\n  }\n\n  // Returns true if and only if test name (this is generated by appending test\n  // suit name and test name via a '.' character) matches the positive filter\n  // and does not match the negative filter.\n  bool MatchesTest(const std::string& test_suite_name,\n                   const std::string& test_name) const {\n    return MatchesName(test_suite_name + \".\" + test_name);\n  }\n\n  // Returns true if and only if name matches the positive filter and does not\n  // match the negative filter.\n  bool MatchesName(const std::string& name) const {\n    return positive_filter_.MatchesName(name) &&\n           !negative_filter_.MatchesName(name);\n  }\n\n private:\n  UnitTestFilter positive_filter_;\n  UnitTestFilter negative_filter_;\n};\n}  // namespace\n\nbool UnitTestOptions::MatchesFilter(const std::string& name_str,\n                                    const char* filter) {\n  return UnitTestFilter(filter).MatchesName(name_str);\n}\n\n// Returns true if and only if the user-specified filter matches the test\n// suite name and the test name.\nbool UnitTestOptions::FilterMatchesTest(const std::string& test_suite_name,\n                                        const std::string& test_name) {\n  // Split --gtest_filter at '-', if there is one, to separate into\n  // positive filter and negative filter portions\n  return PositiveAndNegativeUnitTestFilter(GTEST_FLAG_GET(filter))\n      .MatchesTest(test_suite_name, test_name);\n}\n\n#if GTEST_HAS_SEH\n// Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the\n// given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise.\n// This function is useful as an __except condition.\nint UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) {\n  // Google Test should handle a SEH exception if:\n  //   1. the user wants it to, AND\n  //   2. this is not a breakpoint exception, AND\n  //   3. this is not a C++ exception (VC++ implements them via SEH,\n  //      apparently).\n  //\n  // SEH exception code for C++ exceptions.\n  // (see http://support.microsoft.com/kb/185294 for more information).\n  const DWORD kCxxExceptionCode = 0xe06d7363;\n\n  bool should_handle = true;\n\n  if (!GTEST_FLAG_GET(catch_exceptions))\n    should_handle = false;\n  else if (exception_code == EXCEPTION_BREAKPOINT)\n    should_handle = false;\n  else if (exception_code == kCxxExceptionCode)\n    should_handle = false;\n\n  return should_handle ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH;\n}\n#endif  // GTEST_HAS_SEH\n\n}  // namespace internal\n\n// The c'tor sets this object as the test part result reporter used by\n// Google Test.  The 'result' parameter specifies where to report the\n// results. Intercepts only failures from the current thread.\nScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter(\n    TestPartResultArray* result)\n    : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD), result_(result) {\n  Init();\n}\n\n// The c'tor sets this object as the test part result reporter used by\n// Google Test.  The 'result' parameter specifies where to report the\n// results.\nScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter(\n    InterceptMode intercept_mode, TestPartResultArray* result)\n    : intercept_mode_(intercept_mode), result_(result) {\n  Init();\n}\n\nvoid ScopedFakeTestPartResultReporter::Init() {\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  if (intercept_mode_ == INTERCEPT_ALL_THREADS) {\n    old_reporter_ = impl->GetGlobalTestPartResultReporter();\n    impl->SetGlobalTestPartResultReporter(this);\n  } else {\n    old_reporter_ = impl->GetTestPartResultReporterForCurrentThread();\n    impl->SetTestPartResultReporterForCurrentThread(this);\n  }\n}\n\n// The d'tor restores the test part result reporter used by Google Test\n// before.\nScopedFakeTestPartResultReporter::~ScopedFakeTestPartResultReporter() {\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  if (intercept_mode_ == INTERCEPT_ALL_THREADS) {\n    impl->SetGlobalTestPartResultReporter(old_reporter_);\n  } else {\n    impl->SetTestPartResultReporterForCurrentThread(old_reporter_);\n  }\n}\n\n// Increments the test part result count and remembers the result.\n// This method is from the TestPartResultReporterInterface interface.\nvoid ScopedFakeTestPartResultReporter::ReportTestPartResult(\n    const TestPartResult& result) {\n  result_->Append(result);\n}\n\nnamespace internal {\n\n// Returns the type ID of ::testing::Test.  We should always call this\n// instead of GetTypeId< ::testing::Test>() to get the type ID of\n// testing::Test.  This is to work around a suspected linker bug when\n// using Google Test as a framework on Mac OS X.  The bug causes\n// GetTypeId< ::testing::Test>() to return different values depending\n// on whether the call is from the Google Test framework itself or\n// from user test code.  GetTestTypeId() is guaranteed to always\n// return the same value, as it always calls GetTypeId<>() from the\n// gtest.cc, which is within the Google Test framework.\nTypeId GetTestTypeId() { return GetTypeId<Test>(); }\n\n// The value of GetTestTypeId() as seen from within the Google Test\n// library.  This is solely for testing GetTestTypeId().\nextern const TypeId kTestTypeIdInGoogleTest = GetTestTypeId();\n\n// This predicate-formatter checks that 'results' contains a test part\n// failure of the given type and that the failure message contains the\n// given substring.\nstatic AssertionResult HasOneFailure(const char* /* results_expr */,\n                                     const char* /* type_expr */,\n                                     const char* /* substr_expr */,\n                                     const TestPartResultArray& results,\n                                     TestPartResult::Type type,\n                                     const std::string& substr) {\n  const std::string expected(type == TestPartResult::kFatalFailure\n                                 ? \"1 fatal failure\"\n                                 : \"1 non-fatal failure\");\n  Message msg;\n  if (results.size() != 1) {\n    msg << \"Expected: \" << expected << \"\\n\"\n        << \"  Actual: \" << results.size() << \" failures\";\n    for (int i = 0; i < results.size(); i++) {\n      msg << \"\\n\" << results.GetTestPartResult(i);\n    }\n    return AssertionFailure() << msg;\n  }\n\n  const TestPartResult& r = results.GetTestPartResult(0);\n  if (r.type() != type) {\n    return AssertionFailure() << \"Expected: \" << expected << \"\\n\"\n                              << \"  Actual:\\n\"\n                              << r;\n  }\n\n  if (strstr(r.message(), substr.c_str()) == nullptr) {\n    return AssertionFailure()\n           << \"Expected: \" << expected << \" containing \\\"\" << substr << \"\\\"\\n\"\n           << \"  Actual:\\n\"\n           << r;\n  }\n\n  return AssertionSuccess();\n}\n\n// The constructor of SingleFailureChecker remembers where to look up\n// test part results, what type of failure we expect, and what\n// substring the failure message should contain.\nSingleFailureChecker::SingleFailureChecker(const TestPartResultArray* results,\n                                           TestPartResult::Type type,\n                                           const std::string& substr)\n    : results_(results), type_(type), substr_(substr) {}\n\n// The destructor of SingleFailureChecker verifies that the given\n// TestPartResultArray contains exactly one failure that has the given\n// type and contains the given substring.  If that's not the case, a\n// non-fatal failure will be generated.\nSingleFailureChecker::~SingleFailureChecker() {\n  EXPECT_PRED_FORMAT3(HasOneFailure, *results_, type_, substr_);\n}\n\nDefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter(\n    UnitTestImpl* unit_test)\n    : unit_test_(unit_test) {}\n\nvoid DefaultGlobalTestPartResultReporter::ReportTestPartResult(\n    const TestPartResult& result) {\n  unit_test_->current_test_result()->AddTestPartResult(result);\n  unit_test_->listeners()->repeater()->OnTestPartResult(result);\n}\n\nDefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter(\n    UnitTestImpl* unit_test)\n    : unit_test_(unit_test) {}\n\nvoid DefaultPerThreadTestPartResultReporter::ReportTestPartResult(\n    const TestPartResult& result) {\n  unit_test_->GetGlobalTestPartResultReporter()->ReportTestPartResult(result);\n}\n\n// Returns the global test part result reporter.\nTestPartResultReporterInterface*\nUnitTestImpl::GetGlobalTestPartResultReporter() {\n  internal::MutexLock lock(&global_test_part_result_reporter_mutex_);\n  return global_test_part_result_repoter_;\n}\n\n// Sets the global test part result reporter.\nvoid UnitTestImpl::SetGlobalTestPartResultReporter(\n    TestPartResultReporterInterface* reporter) {\n  internal::MutexLock lock(&global_test_part_result_reporter_mutex_);\n  global_test_part_result_repoter_ = reporter;\n}\n\n// Returns the test part result reporter for the current thread.\nTestPartResultReporterInterface*\nUnitTestImpl::GetTestPartResultReporterForCurrentThread() {\n  return per_thread_test_part_result_reporter_.get();\n}\n\n// Sets the test part result reporter for the current thread.\nvoid UnitTestImpl::SetTestPartResultReporterForCurrentThread(\n    TestPartResultReporterInterface* reporter) {\n  per_thread_test_part_result_reporter_.set(reporter);\n}\n\n// Gets the number of successful test suites.\nint UnitTestImpl::successful_test_suite_count() const {\n  return CountIf(test_suites_, TestSuitePassed);\n}\n\n// Gets the number of failed test suites.\nint UnitTestImpl::failed_test_suite_count() const {\n  return CountIf(test_suites_, TestSuiteFailed);\n}\n\n// Gets the number of all test suites.\nint UnitTestImpl::total_test_suite_count() const {\n  return static_cast<int>(test_suites_.size());\n}\n\n// Gets the number of all test suites that contain at least one test\n// that should run.\nint UnitTestImpl::test_suite_to_run_count() const {\n  return CountIf(test_suites_, ShouldRunTestSuite);\n}\n\n// Gets the number of successful tests.\nint UnitTestImpl::successful_test_count() const {\n  return SumOverTestSuiteList(test_suites_, &TestSuite::successful_test_count);\n}\n\n// Gets the number of skipped tests.\nint UnitTestImpl::skipped_test_count() const {\n  return SumOverTestSuiteList(test_suites_, &TestSuite::skipped_test_count);\n}\n\n// Gets the number of failed tests.\nint UnitTestImpl::failed_test_count() const {\n  return SumOverTestSuiteList(test_suites_, &TestSuite::failed_test_count);\n}\n\n// Gets the number of disabled tests that will be reported in the XML report.\nint UnitTestImpl::reportable_disabled_test_count() const {\n  return SumOverTestSuiteList(test_suites_,\n                              &TestSuite::reportable_disabled_test_count);\n}\n\n// Gets the number of disabled tests.\nint UnitTestImpl::disabled_test_count() const {\n  return SumOverTestSuiteList(test_suites_, &TestSuite::disabled_test_count);\n}\n\n// Gets the number of tests to be printed in the XML report.\nint UnitTestImpl::reportable_test_count() const {\n  return SumOverTestSuiteList(test_suites_, &TestSuite::reportable_test_count);\n}\n\n// Gets the number of all tests.\nint UnitTestImpl::total_test_count() const {\n  return SumOverTestSuiteList(test_suites_, &TestSuite::total_test_count);\n}\n\n// Gets the number of tests that should run.\nint UnitTestImpl::test_to_run_count() const {\n  return SumOverTestSuiteList(test_suites_, &TestSuite::test_to_run_count);\n}\n\n// Returns the current OS stack trace as an std::string.\n//\n// The maximum number of stack frames to be included is specified by\n// the gtest_stack_trace_depth flag.  The skip_count parameter\n// specifies the number of top frames to be skipped, which doesn't\n// count against the number of frames to be included.\n//\n// For example, if Foo() calls Bar(), which in turn calls\n// CurrentOsStackTraceExceptTop(1), Foo() will be included in the\n// trace but Bar() and CurrentOsStackTraceExceptTop() won't.\nstd::string UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) {\n  return os_stack_trace_getter()->CurrentStackTrace(\n      static_cast<int>(GTEST_FLAG_GET(stack_trace_depth)), skip_count + 1\n      // Skips the user-specified number of frames plus this function\n      // itself.\n  );  // NOLINT\n}\n\n// A helper class for measuring elapsed times.\nclass Timer {\n public:\n  Timer() : start_(std::chrono::steady_clock::now()) {}\n\n  // Return time elapsed in milliseconds since the timer was created.\n  TimeInMillis Elapsed() {\n    return std::chrono::duration_cast<std::chrono::milliseconds>(\n               std::chrono::steady_clock::now() - start_)\n        .count();\n  }\n\n private:\n  std::chrono::steady_clock::time_point start_;\n};\n\n// Returns a timestamp as milliseconds since the epoch. Note this time may jump\n// around subject to adjustments by the system, to measure elapsed time use\n// Timer instead.\nTimeInMillis GetTimeInMillis() {\n  return std::chrono::duration_cast<std::chrono::milliseconds>(\n             std::chrono::system_clock::now() -\n             std::chrono::system_clock::from_time_t(0))\n      .count();\n}\n\n// Utilities\n\n// class String.\n\n#if GTEST_OS_WINDOWS_MOBILE\n// Creates a UTF-16 wide string from the given ANSI string, allocating\n// memory using new. The caller is responsible for deleting the return\n// value using delete[]. Returns the wide string, or NULL if the\n// input is NULL.\nLPCWSTR String::AnsiToUtf16(const char* ansi) {\n  if (!ansi) return nullptr;\n  const int length = strlen(ansi);\n  const int unicode_length =\n      MultiByteToWideChar(CP_ACP, 0, ansi, length, nullptr, 0);\n  WCHAR* unicode = new WCHAR[unicode_length + 1];\n  MultiByteToWideChar(CP_ACP, 0, ansi, length, unicode, unicode_length);\n  unicode[unicode_length] = 0;\n  return unicode;\n}\n\n// Creates an ANSI string from the given wide string, allocating\n// memory using new. The caller is responsible for deleting the return\n// value using delete[]. Returns the ANSI string, or NULL if the\n// input is NULL.\nconst char* String::Utf16ToAnsi(LPCWSTR utf16_str) {\n  if (!utf16_str) return nullptr;\n  const int ansi_length = WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, nullptr,\n                                              0, nullptr, nullptr);\n  char* ansi = new char[ansi_length + 1];\n  WideCharToMultiByte(CP_ACP, 0, utf16_str, -1, ansi, ansi_length, nullptr,\n                      nullptr);\n  ansi[ansi_length] = 0;\n  return ansi;\n}\n\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n// Compares two C strings.  Returns true if and only if they have the same\n// content.\n//\n// Unlike strcmp(), this function can handle NULL argument(s).  A NULL\n// C string is considered different to any non-NULL C string,\n// including the empty string.\nbool String::CStringEquals(const char* lhs, const char* rhs) {\n  if (lhs == nullptr) return rhs == nullptr;\n\n  if (rhs == nullptr) return false;\n\n  return strcmp(lhs, rhs) == 0;\n}\n\n#if GTEST_HAS_STD_WSTRING\n\n// Converts an array of wide chars to a narrow string using the UTF-8\n// encoding, and streams the result to the given Message object.\nstatic void StreamWideCharsToMessage(const wchar_t* wstr, size_t length,\n                                     Message* msg) {\n  for (size_t i = 0; i != length;) {  // NOLINT\n    if (wstr[i] != L'\\0') {\n      *msg << WideStringToUtf8(wstr + i, static_cast<int>(length - i));\n      while (i != length && wstr[i] != L'\\0') i++;\n    } else {\n      *msg << '\\0';\n      i++;\n    }\n  }\n}\n\n#endif  // GTEST_HAS_STD_WSTRING\n\nvoid SplitString(const ::std::string& str, char delimiter,\n                 ::std::vector< ::std::string>* dest) {\n  ::std::vector< ::std::string> parsed;\n  ::std::string::size_type pos = 0;\n  while (::testing::internal::AlwaysTrue()) {\n    const ::std::string::size_type colon = str.find(delimiter, pos);\n    if (colon == ::std::string::npos) {\n      parsed.push_back(str.substr(pos));\n      break;\n    } else {\n      parsed.push_back(str.substr(pos, colon - pos));\n      pos = colon + 1;\n    }\n  }\n  dest->swap(parsed);\n}\n\n}  // namespace internal\n\n// Constructs an empty Message.\n// We allocate the stringstream separately because otherwise each use of\n// ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's\n// stack frame leading to huge stack frames in some cases; gcc does not reuse\n// the stack space.\nMessage::Message() : ss_(new ::std::stringstream) {\n  // By default, we want there to be enough precision when printing\n  // a double to a Message.\n  *ss_ << std::setprecision(std::numeric_limits<double>::digits10 + 2);\n}\n\n// These two overloads allow streaming a wide C string to a Message\n// using the UTF-8 encoding.\nMessage& Message::operator<<(const wchar_t* wide_c_str) {\n  return *this << internal::String::ShowWideCString(wide_c_str);\n}\nMessage& Message::operator<<(wchar_t* wide_c_str) {\n  return *this << internal::String::ShowWideCString(wide_c_str);\n}\n\n#if GTEST_HAS_STD_WSTRING\n// Converts the given wide string to a narrow string using the UTF-8\n// encoding, and streams the result to this Message object.\nMessage& Message::operator<<(const ::std::wstring& wstr) {\n  internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this);\n  return *this;\n}\n#endif  // GTEST_HAS_STD_WSTRING\n\n// Gets the text streamed to this object so far as an std::string.\n// Each '\\0' character in the buffer is replaced with \"\\\\0\".\nstd::string Message::GetString() const {\n  return internal::StringStreamToString(ss_.get());\n}\n\nnamespace internal {\n\nnamespace edit_distance {\nstd::vector<EditType> CalculateOptimalEdits(const std::vector<size_t>& left,\n                                            const std::vector<size_t>& right) {\n  std::vector<std::vector<double> > costs(\n      left.size() + 1, std::vector<double>(right.size() + 1));\n  std::vector<std::vector<EditType> > best_move(\n      left.size() + 1, std::vector<EditType>(right.size() + 1));\n\n  // Populate for empty right.\n  for (size_t l_i = 0; l_i < costs.size(); ++l_i) {\n    costs[l_i][0] = static_cast<double>(l_i);\n    best_move[l_i][0] = kRemove;\n  }\n  // Populate for empty left.\n  for (size_t r_i = 1; r_i < costs[0].size(); ++r_i) {\n    costs[0][r_i] = static_cast<double>(r_i);\n    best_move[0][r_i] = kAdd;\n  }\n\n  for (size_t l_i = 0; l_i < left.size(); ++l_i) {\n    for (size_t r_i = 0; r_i < right.size(); ++r_i) {\n      if (left[l_i] == right[r_i]) {\n        // Found a match. Consume it.\n        costs[l_i + 1][r_i + 1] = costs[l_i][r_i];\n        best_move[l_i + 1][r_i + 1] = kMatch;\n        continue;\n      }\n\n      const double add = costs[l_i + 1][r_i];\n      const double remove = costs[l_i][r_i + 1];\n      const double replace = costs[l_i][r_i];\n      if (add < remove && add < replace) {\n        costs[l_i + 1][r_i + 1] = add + 1;\n        best_move[l_i + 1][r_i + 1] = kAdd;\n      } else if (remove < add && remove < replace) {\n        costs[l_i + 1][r_i + 1] = remove + 1;\n        best_move[l_i + 1][r_i + 1] = kRemove;\n      } else {\n        // We make replace a little more expensive than add/remove to lower\n        // their priority.\n        costs[l_i + 1][r_i + 1] = replace + 1.00001;\n        best_move[l_i + 1][r_i + 1] = kReplace;\n      }\n    }\n  }\n\n  // Reconstruct the best path. We do it in reverse order.\n  std::vector<EditType> best_path;\n  for (size_t l_i = left.size(), r_i = right.size(); l_i > 0 || r_i > 0;) {\n    EditType move = best_move[l_i][r_i];\n    best_path.push_back(move);\n    l_i -= move != kAdd;\n    r_i -= move != kRemove;\n  }\n  std::reverse(best_path.begin(), best_path.end());\n  return best_path;\n}\n\nnamespace {\n\n// Helper class to convert string into ids with deduplication.\nclass InternalStrings {\n public:\n  size_t GetId(const std::string& str) {\n    IdMap::iterator it = ids_.find(str);\n    if (it != ids_.end()) return it->second;\n    size_t id = ids_.size();\n    return ids_[str] = id;\n  }\n\n private:\n  typedef std::map<std::string, size_t> IdMap;\n  IdMap ids_;\n};\n\n}  // namespace\n\nstd::vector<EditType> CalculateOptimalEdits(\n    const std::vector<std::string>& left,\n    const std::vector<std::string>& right) {\n  std::vector<size_t> left_ids, right_ids;\n  {\n    InternalStrings intern_table;\n    for (size_t i = 0; i < left.size(); ++i) {\n      left_ids.push_back(intern_table.GetId(left[i]));\n    }\n    for (size_t i = 0; i < right.size(); ++i) {\n      right_ids.push_back(intern_table.GetId(right[i]));\n    }\n  }\n  return CalculateOptimalEdits(left_ids, right_ids);\n}\n\nnamespace {\n\n// Helper class that holds the state for one hunk and prints it out to the\n// stream.\n// It reorders adds/removes when possible to group all removes before all\n// adds. It also adds the hunk header before printint into the stream.\nclass Hunk {\n public:\n  Hunk(size_t left_start, size_t right_start)\n      : left_start_(left_start),\n        right_start_(right_start),\n        adds_(),\n        removes_(),\n        common_() {}\n\n  void PushLine(char edit, const char* line) {\n    switch (edit) {\n      case ' ':\n        ++common_;\n        FlushEdits();\n        hunk_.push_back(std::make_pair(' ', line));\n        break;\n      case '-':\n        ++removes_;\n        hunk_removes_.push_back(std::make_pair('-', line));\n        break;\n      case '+':\n        ++adds_;\n        hunk_adds_.push_back(std::make_pair('+', line));\n        break;\n    }\n  }\n\n  void PrintTo(std::ostream* os) {\n    PrintHeader(os);\n    FlushEdits();\n    for (std::list<std::pair<char, const char*> >::const_iterator it =\n             hunk_.begin();\n         it != hunk_.end(); ++it) {\n      *os << it->first << it->second << \"\\n\";\n    }\n  }\n\n  bool has_edits() const { return adds_ || removes_; }\n\n private:\n  void FlushEdits() {\n    hunk_.splice(hunk_.end(), hunk_removes_);\n    hunk_.splice(hunk_.end(), hunk_adds_);\n  }\n\n  // Print a unified diff header for one hunk.\n  // The format is\n  //   \"@@ -<left_start>,<left_length> +<right_start>,<right_length> @@\"\n  // where the left/right parts are omitted if unnecessary.\n  void PrintHeader(std::ostream* ss) const {\n    *ss << \"@@ \";\n    if (removes_) {\n      *ss << \"-\" << left_start_ << \",\" << (removes_ + common_);\n    }\n    if (removes_ && adds_) {\n      *ss << \" \";\n    }\n    if (adds_) {\n      *ss << \"+\" << right_start_ << \",\" << (adds_ + common_);\n    }\n    *ss << \" @@\\n\";\n  }\n\n  size_t left_start_, right_start_;\n  size_t adds_, removes_, common_;\n  std::list<std::pair<char, const char*> > hunk_, hunk_adds_, hunk_removes_;\n};\n\n}  // namespace\n\n// Create a list of diff hunks in Unified diff format.\n// Each hunk has a header generated by PrintHeader above plus a body with\n// lines prefixed with ' ' for no change, '-' for deletion and '+' for\n// addition.\n// 'context' represents the desired unchanged prefix/suffix around the diff.\n// If two hunks are close enough that their contexts overlap, then they are\n// joined into one hunk.\nstd::string CreateUnifiedDiff(const std::vector<std::string>& left,\n                              const std::vector<std::string>& right,\n                              size_t context) {\n  const std::vector<EditType> edits = CalculateOptimalEdits(left, right);\n\n  size_t l_i = 0, r_i = 0, edit_i = 0;\n  std::stringstream ss;\n  while (edit_i < edits.size()) {\n    // Find first edit.\n    while (edit_i < edits.size() && edits[edit_i] == kMatch) {\n      ++l_i;\n      ++r_i;\n      ++edit_i;\n    }\n\n    // Find the first line to include in the hunk.\n    const size_t prefix_context = std::min(l_i, context);\n    Hunk hunk(l_i - prefix_context + 1, r_i - prefix_context + 1);\n    for (size_t i = prefix_context; i > 0; --i) {\n      hunk.PushLine(' ', left[l_i - i].c_str());\n    }\n\n    // Iterate the edits until we found enough suffix for the hunk or the input\n    // is over.\n    size_t n_suffix = 0;\n    for (; edit_i < edits.size(); ++edit_i) {\n      if (n_suffix >= context) {\n        // Continue only if the next hunk is very close.\n        auto it = edits.begin() + static_cast<int>(edit_i);\n        while (it != edits.end() && *it == kMatch) ++it;\n        if (it == edits.end() ||\n            static_cast<size_t>(it - edits.begin()) - edit_i >= context) {\n          // There is no next edit or it is too far away.\n          break;\n        }\n      }\n\n      EditType edit = edits[edit_i];\n      // Reset count when a non match is found.\n      n_suffix = edit == kMatch ? n_suffix + 1 : 0;\n\n      if (edit == kMatch || edit == kRemove || edit == kReplace) {\n        hunk.PushLine(edit == kMatch ? ' ' : '-', left[l_i].c_str());\n      }\n      if (edit == kAdd || edit == kReplace) {\n        hunk.PushLine('+', right[r_i].c_str());\n      }\n\n      // Advance indices, depending on edit type.\n      l_i += edit != kAdd;\n      r_i += edit != kRemove;\n    }\n\n    if (!hunk.has_edits()) {\n      // We are done. We don't want this hunk.\n      break;\n    }\n\n    hunk.PrintTo(&ss);\n  }\n  return ss.str();\n}\n\n}  // namespace edit_distance\n\nnamespace {\n\n// The string representation of the values received in EqFailure() are already\n// escaped. Split them on escaped '\\n' boundaries. Leave all other escaped\n// characters the same.\nstd::vector<std::string> SplitEscapedString(const std::string& str) {\n  std::vector<std::string> lines;\n  size_t start = 0, end = str.size();\n  if (end > 2 && str[0] == '\"' && str[end - 1] == '\"') {\n    ++start;\n    --end;\n  }\n  bool escaped = false;\n  for (size_t i = start; i + 1 < end; ++i) {\n    if (escaped) {\n      escaped = false;\n      if (str[i] == 'n') {\n        lines.push_back(str.substr(start, i - start - 1));\n        start = i + 1;\n      }\n    } else {\n      escaped = str[i] == '\\\\';\n    }\n  }\n  lines.push_back(str.substr(start, end - start));\n  return lines;\n}\n\n}  // namespace\n\n// Constructs and returns the message for an equality assertion\n// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.\n//\n// The first four parameters are the expressions used in the assertion\n// and their values, as strings.  For example, for ASSERT_EQ(foo, bar)\n// where foo is 5 and bar is 6, we have:\n//\n//   lhs_expression: \"foo\"\n//   rhs_expression: \"bar\"\n//   lhs_value:      \"5\"\n//   rhs_value:      \"6\"\n//\n// The ignoring_case parameter is true if and only if the assertion is a\n// *_STRCASEEQ*.  When it's true, the string \"Ignoring case\" will\n// be inserted into the message.\nAssertionResult EqFailure(const char* lhs_expression,\n                          const char* rhs_expression,\n                          const std::string& lhs_value,\n                          const std::string& rhs_value, bool ignoring_case) {\n  Message msg;\n  msg << \"Expected equality of these values:\";\n  msg << \"\\n  \" << lhs_expression;\n  if (lhs_value != lhs_expression) {\n    msg << \"\\n    Which is: \" << lhs_value;\n  }\n  msg << \"\\n  \" << rhs_expression;\n  if (rhs_value != rhs_expression) {\n    msg << \"\\n    Which is: \" << rhs_value;\n  }\n\n  if (ignoring_case) {\n    msg << \"\\nIgnoring case\";\n  }\n\n  if (!lhs_value.empty() && !rhs_value.empty()) {\n    const std::vector<std::string> lhs_lines = SplitEscapedString(lhs_value);\n    const std::vector<std::string> rhs_lines = SplitEscapedString(rhs_value);\n    if (lhs_lines.size() > 1 || rhs_lines.size() > 1) {\n      msg << \"\\nWith diff:\\n\"\n          << edit_distance::CreateUnifiedDiff(lhs_lines, rhs_lines);\n    }\n  }\n\n  return AssertionFailure() << msg;\n}\n\n// Constructs a failure message for Boolean assertions such as EXPECT_TRUE.\nstd::string GetBoolAssertionFailureMessage(\n    const AssertionResult& assertion_result, const char* expression_text,\n    const char* actual_predicate_value, const char* expected_predicate_value) {\n  const char* actual_message = assertion_result.message();\n  Message msg;\n  msg << \"Value of: \" << expression_text\n      << \"\\n  Actual: \" << actual_predicate_value;\n  if (actual_message[0] != '\\0') msg << \" (\" << actual_message << \")\";\n  msg << \"\\nExpected: \" << expected_predicate_value;\n  return msg.GetString();\n}\n\n// Helper function for implementing ASSERT_NEAR.\nAssertionResult DoubleNearPredFormat(const char* expr1, const char* expr2,\n                                     const char* abs_error_expr, double val1,\n                                     double val2, double abs_error) {\n  const double diff = fabs(val1 - val2);\n  if (diff <= abs_error) return AssertionSuccess();\n\n  // Find the value which is closest to zero.\n  const double min_abs = std::min(fabs(val1), fabs(val2));\n  // Find the distance to the next double from that value.\n  const double epsilon =\n      nextafter(min_abs, std::numeric_limits<double>::infinity()) - min_abs;\n  // Detect the case where abs_error is so small that EXPECT_NEAR is\n  // effectively the same as EXPECT_EQUAL, and give an informative error\n  // message so that the situation can be more easily understood without\n  // requiring exotic floating-point knowledge.\n  // Don't do an epsilon check if abs_error is zero because that implies\n  // that an equality check was actually intended.\n  if (!(std::isnan)(val1) && !(std::isnan)(val2) && abs_error > 0 &&\n      abs_error < epsilon) {\n    return AssertionFailure()\n           << \"The difference between \" << expr1 << \" and \" << expr2 << \" is \"\n           << diff << \", where\\n\"\n           << expr1 << \" evaluates to \" << val1 << \",\\n\"\n           << expr2 << \" evaluates to \" << val2 << \".\\nThe abs_error parameter \"\n           << abs_error_expr << \" evaluates to \" << abs_error\n           << \" which is smaller than the minimum distance between doubles for \"\n              \"numbers of this magnitude which is \"\n           << epsilon\n           << \", thus making this EXPECT_NEAR check equivalent to \"\n              \"EXPECT_EQUAL. Consider using EXPECT_DOUBLE_EQ instead.\";\n  }\n  return AssertionFailure()\n         << \"The difference between \" << expr1 << \" and \" << expr2 << \" is \"\n         << diff << \", which exceeds \" << abs_error_expr << \", where\\n\"\n         << expr1 << \" evaluates to \" << val1 << \",\\n\"\n         << expr2 << \" evaluates to \" << val2 << \", and\\n\"\n         << abs_error_expr << \" evaluates to \" << abs_error << \".\";\n}\n\n// Helper template for implementing FloatLE() and DoubleLE().\ntemplate <typename RawType>\nAssertionResult FloatingPointLE(const char* expr1, const char* expr2,\n                                RawType val1, RawType val2) {\n  // Returns success if val1 is less than val2,\n  if (val1 < val2) {\n    return AssertionSuccess();\n  }\n\n  // or if val1 is almost equal to val2.\n  const FloatingPoint<RawType> lhs(val1), rhs(val2);\n  if (lhs.AlmostEquals(rhs)) {\n    return AssertionSuccess();\n  }\n\n  // Note that the above two checks will both fail if either val1 or\n  // val2 is NaN, as the IEEE floating-point standard requires that\n  // any predicate involving a NaN must return false.\n\n  ::std::stringstream val1_ss;\n  val1_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)\n          << val1;\n\n  ::std::stringstream val2_ss;\n  val2_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)\n          << val2;\n\n  return AssertionFailure()\n         << \"Expected: (\" << expr1 << \") <= (\" << expr2 << \")\\n\"\n         << \"  Actual: \" << StringStreamToString(&val1_ss) << \" vs \"\n         << StringStreamToString(&val2_ss);\n}\n\n}  // namespace internal\n\n// Asserts that val1 is less than, or almost equal to, val2.  Fails\n// otherwise.  In particular, it fails if either val1 or val2 is NaN.\nAssertionResult FloatLE(const char* expr1, const char* expr2, float val1,\n                        float val2) {\n  return internal::FloatingPointLE<float>(expr1, expr2, val1, val2);\n}\n\n// Asserts that val1 is less than, or almost equal to, val2.  Fails\n// otherwise.  In particular, it fails if either val1 or val2 is NaN.\nAssertionResult DoubleLE(const char* expr1, const char* expr2, double val1,\n                         double val2) {\n  return internal::FloatingPointLE<double>(expr1, expr2, val1, val2);\n}\n\nnamespace internal {\n\n// The helper function for {ASSERT|EXPECT}_STREQ.\nAssertionResult CmpHelperSTREQ(const char* lhs_expression,\n                               const char* rhs_expression, const char* lhs,\n                               const char* rhs) {\n  if (String::CStringEquals(lhs, rhs)) {\n    return AssertionSuccess();\n  }\n\n  return EqFailure(lhs_expression, rhs_expression, PrintToString(lhs),\n                   PrintToString(rhs), false);\n}\n\n// The helper function for {ASSERT|EXPECT}_STRCASEEQ.\nAssertionResult CmpHelperSTRCASEEQ(const char* lhs_expression,\n                                   const char* rhs_expression, const char* lhs,\n                                   const char* rhs) {\n  if (String::CaseInsensitiveCStringEquals(lhs, rhs)) {\n    return AssertionSuccess();\n  }\n\n  return EqFailure(lhs_expression, rhs_expression, PrintToString(lhs),\n                   PrintToString(rhs), true);\n}\n\n// The helper function for {ASSERT|EXPECT}_STRNE.\nAssertionResult CmpHelperSTRNE(const char* s1_expression,\n                               const char* s2_expression, const char* s1,\n                               const char* s2) {\n  if (!String::CStringEquals(s1, s2)) {\n    return AssertionSuccess();\n  } else {\n    return AssertionFailure()\n           << \"Expected: (\" << s1_expression << \") != (\" << s2_expression\n           << \"), actual: \\\"\" << s1 << \"\\\" vs \\\"\" << s2 << \"\\\"\";\n  }\n}\n\n// The helper function for {ASSERT|EXPECT}_STRCASENE.\nAssertionResult CmpHelperSTRCASENE(const char* s1_expression,\n                                   const char* s2_expression, const char* s1,\n                                   const char* s2) {\n  if (!String::CaseInsensitiveCStringEquals(s1, s2)) {\n    return AssertionSuccess();\n  } else {\n    return AssertionFailure()\n           << \"Expected: (\" << s1_expression << \") != (\" << s2_expression\n           << \") (ignoring case), actual: \\\"\" << s1 << \"\\\" vs \\\"\" << s2 << \"\\\"\";\n  }\n}\n\n}  // namespace internal\n\nnamespace {\n\n// Helper functions for implementing IsSubString() and IsNotSubstring().\n\n// This group of overloaded functions return true if and only if needle\n// is a substring of haystack.  NULL is considered a substring of\n// itself only.\n\nbool IsSubstringPred(const char* needle, const char* haystack) {\n  if (needle == nullptr || haystack == nullptr) return needle == haystack;\n\n  return strstr(haystack, needle) != nullptr;\n}\n\nbool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) {\n  if (needle == nullptr || haystack == nullptr) return needle == haystack;\n\n  return wcsstr(haystack, needle) != nullptr;\n}\n\n// StringType here can be either ::std::string or ::std::wstring.\ntemplate <typename StringType>\nbool IsSubstringPred(const StringType& needle, const StringType& haystack) {\n  return haystack.find(needle) != StringType::npos;\n}\n\n// This function implements either IsSubstring() or IsNotSubstring(),\n// depending on the value of the expected_to_be_substring parameter.\n// StringType here can be const char*, const wchar_t*, ::std::string,\n// or ::std::wstring.\ntemplate <typename StringType>\nAssertionResult IsSubstringImpl(bool expected_to_be_substring,\n                                const char* needle_expr,\n                                const char* haystack_expr,\n                                const StringType& needle,\n                                const StringType& haystack) {\n  if (IsSubstringPred(needle, haystack) == expected_to_be_substring)\n    return AssertionSuccess();\n\n  const bool is_wide_string = sizeof(needle[0]) > 1;\n  const char* const begin_string_quote = is_wide_string ? \"L\\\"\" : \"\\\"\";\n  return AssertionFailure()\n         << \"Value of: \" << needle_expr << \"\\n\"\n         << \"  Actual: \" << begin_string_quote << needle << \"\\\"\\n\"\n         << \"Expected: \" << (expected_to_be_substring ? \"\" : \"not \")\n         << \"a substring of \" << haystack_expr << \"\\n\"\n         << \"Which is: \" << begin_string_quote << haystack << \"\\\"\";\n}\n\n}  // namespace\n\n// IsSubstring() and IsNotSubstring() check whether needle is a\n// substring of haystack (NULL is considered a substring of itself\n// only), and return an appropriate error message when they fail.\n\nAssertionResult IsSubstring(const char* needle_expr, const char* haystack_expr,\n                            const char* needle, const char* haystack) {\n  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsSubstring(const char* needle_expr, const char* haystack_expr,\n                            const wchar_t* needle, const wchar_t* haystack) {\n  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsNotSubstring(const char* needle_expr,\n                               const char* haystack_expr, const char* needle,\n                               const char* haystack) {\n  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsNotSubstring(const char* needle_expr,\n                               const char* haystack_expr, const wchar_t* needle,\n                               const wchar_t* haystack) {\n  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsSubstring(const char* needle_expr, const char* haystack_expr,\n                            const ::std::string& needle,\n                            const ::std::string& haystack) {\n  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsNotSubstring(const char* needle_expr,\n                               const char* haystack_expr,\n                               const ::std::string& needle,\n                               const ::std::string& haystack) {\n  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);\n}\n\n#if GTEST_HAS_STD_WSTRING\nAssertionResult IsSubstring(const char* needle_expr, const char* haystack_expr,\n                            const ::std::wstring& needle,\n                            const ::std::wstring& haystack) {\n  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);\n}\n\nAssertionResult IsNotSubstring(const char* needle_expr,\n                               const char* haystack_expr,\n                               const ::std::wstring& needle,\n                               const ::std::wstring& haystack) {\n  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);\n}\n#endif  // GTEST_HAS_STD_WSTRING\n\nnamespace internal {\n\n#if GTEST_OS_WINDOWS\n\nnamespace {\n\n// Helper function for IsHRESULT{SuccessFailure} predicates\nAssertionResult HRESULTFailureHelper(const char* expr, const char* expected,\n                                     long hr) {  // NOLINT\n#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_WINDOWS_TV_TITLE\n\n  // Windows CE doesn't support FormatMessage.\n  const char error_text[] = \"\";\n\n#else\n\n  // Looks up the human-readable system message for the HRESULT code\n  // and since we're not passing any params to FormatMessage, we don't\n  // want inserts expanded.\n  const DWORD kFlags =\n      FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;\n  const DWORD kBufSize = 4096;\n  // Gets the system's human readable message string for this HRESULT.\n  char error_text[kBufSize] = {'\\0'};\n  DWORD message_length = ::FormatMessageA(kFlags,\n                                          0,  // no source, we're asking system\n                                          static_cast<DWORD>(hr),  // the error\n                                          0,  // no line width restrictions\n                                          error_text,  // output buffer\n                                          kBufSize,    // buf size\n                                          nullptr);  // no arguments for inserts\n  // Trims tailing white space (FormatMessage leaves a trailing CR-LF)\n  for (; message_length && IsSpace(error_text[message_length - 1]);\n       --message_length) {\n    error_text[message_length - 1] = '\\0';\n  }\n\n#endif  // GTEST_OS_WINDOWS_MOBILE\n\n  const std::string error_hex(\"0x\" + String::FormatHexInt(hr));\n  return ::testing::AssertionFailure()\n         << \"Expected: \" << expr << \" \" << expected << \".\\n\"\n         << \"  Actual: \" << error_hex << \" \" << error_text << \"\\n\";\n}\n\n}  // namespace\n\nAssertionResult IsHRESULTSuccess(const char* expr, long hr) {  // NOLINT\n  if (SUCCEEDED(hr)) {\n    return AssertionSuccess();\n  }\n  return HRESULTFailureHelper(expr, \"succeeds\", hr);\n}\n\nAssertionResult IsHRESULTFailure(const char* expr, long hr) {  // NOLINT\n  if (FAILED(hr)) {\n    return AssertionSuccess();\n  }\n  return HRESULTFailureHelper(expr, \"fails\", hr);\n}\n\n#endif  // GTEST_OS_WINDOWS\n\n// Utility functions for encoding Unicode text (wide strings) in\n// UTF-8.\n\n// A Unicode code-point can have up to 21 bits, and is encoded in UTF-8\n// like this:\n//\n// Code-point length   Encoding\n//   0 -  7 bits       0xxxxxxx\n//   8 - 11 bits       110xxxxx 10xxxxxx\n//  12 - 16 bits       1110xxxx 10xxxxxx 10xxxxxx\n//  17 - 21 bits       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\n// The maximum code-point a one-byte UTF-8 sequence can represent.\nconstexpr uint32_t kMaxCodePoint1 = (static_cast<uint32_t>(1) << 7) - 1;\n\n// The maximum code-point a two-byte UTF-8 sequence can represent.\nconstexpr uint32_t kMaxCodePoint2 = (static_cast<uint32_t>(1) << (5 + 6)) - 1;\n\n// The maximum code-point a three-byte UTF-8 sequence can represent.\nconstexpr uint32_t kMaxCodePoint3 =\n    (static_cast<uint32_t>(1) << (4 + 2 * 6)) - 1;\n\n// The maximum code-point a four-byte UTF-8 sequence can represent.\nconstexpr uint32_t kMaxCodePoint4 =\n    (static_cast<uint32_t>(1) << (3 + 3 * 6)) - 1;\n\n// Chops off the n lowest bits from a bit pattern.  Returns the n\n// lowest bits.  As a side effect, the original bit pattern will be\n// shifted to the right by n bits.\ninline uint32_t ChopLowBits(uint32_t* bits, int n) {\n  const uint32_t low_bits = *bits & ((static_cast<uint32_t>(1) << n) - 1);\n  *bits >>= n;\n  return low_bits;\n}\n\n// Converts a Unicode code point to a narrow string in UTF-8 encoding.\n// code_point parameter is of type uint32_t because wchar_t may not be\n// wide enough to contain a code point.\n// If the code_point is not a valid Unicode code point\n// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be converted\n// to \"(Invalid Unicode 0xXXXXXXXX)\".\nstd::string CodePointToUtf8(uint32_t code_point) {\n  if (code_point > kMaxCodePoint4) {\n    return \"(Invalid Unicode 0x\" + String::FormatHexUInt32(code_point) + \")\";\n  }\n\n  char str[5];  // Big enough for the largest valid code point.\n  if (code_point <= kMaxCodePoint1) {\n    str[1] = '\\0';\n    str[0] = static_cast<char>(code_point);  // 0xxxxxxx\n  } else if (code_point <= kMaxCodePoint2) {\n    str[2] = '\\0';\n    str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[0] = static_cast<char>(0xC0 | code_point);                   // 110xxxxx\n  } else if (code_point <= kMaxCodePoint3) {\n    str[3] = '\\0';\n    str[2] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[0] = static_cast<char>(0xE0 | code_point);                   // 1110xxxx\n  } else {  // code_point <= kMaxCodePoint4\n    str[4] = '\\0';\n    str[3] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[2] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx\n    str[0] = static_cast<char>(0xF0 | code_point);                   // 11110xxx\n  }\n  return str;\n}\n\n// The following two functions only make sense if the system\n// uses UTF-16 for wide string encoding. All supported systems\n// with 16 bit wchar_t (Windows, Cygwin) do use UTF-16.\n\n// Determines if the arguments constitute UTF-16 surrogate pair\n// and thus should be combined into a single Unicode code point\n// using CreateCodePointFromUtf16SurrogatePair.\ninline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) {\n  return sizeof(wchar_t) == 2 && (first & 0xFC00) == 0xD800 &&\n         (second & 0xFC00) == 0xDC00;\n}\n\n// Creates a Unicode code point from UTF16 surrogate pair.\ninline uint32_t CreateCodePointFromUtf16SurrogatePair(wchar_t first,\n                                                      wchar_t second) {\n  const auto first_u = static_cast<uint32_t>(first);\n  const auto second_u = static_cast<uint32_t>(second);\n  const uint32_t mask = (1 << 10) - 1;\n  return (sizeof(wchar_t) == 2)\n             ? (((first_u & mask) << 10) | (second_u & mask)) + 0x10000\n             :\n             // This function should not be called when the condition is\n             // false, but we provide a sensible default in case it is.\n             first_u;\n}\n\n// Converts a wide string to a narrow string in UTF-8 encoding.\n// The wide string is assumed to have the following encoding:\n//   UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin)\n//   UTF-32 if sizeof(wchar_t) == 4 (on Linux)\n// Parameter str points to a null-terminated wide string.\n// Parameter num_chars may additionally limit the number\n// of wchar_t characters processed. -1 is used when the entire string\n// should be processed.\n// If the string contains code points that are not valid Unicode code points\n// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output\n// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding\n// and contains invalid UTF-16 surrogate pairs, values in those pairs\n// will be encoded as individual Unicode characters from Basic Normal Plane.\nstd::string WideStringToUtf8(const wchar_t* str, int num_chars) {\n  if (num_chars == -1) num_chars = static_cast<int>(wcslen(str));\n\n  ::std::stringstream stream;\n  for (int i = 0; i < num_chars; ++i) {\n    uint32_t unicode_code_point;\n\n    if (str[i] == L'\\0') {\n      break;\n    } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) {\n      unicode_code_point =\n          CreateCodePointFromUtf16SurrogatePair(str[i], str[i + 1]);\n      i++;\n    } else {\n      unicode_code_point = static_cast<uint32_t>(str[i]);\n    }\n\n    stream << CodePointToUtf8(unicode_code_point);\n  }\n  return StringStreamToString(&stream);\n}\n\n// Converts a wide C string to an std::string using the UTF-8 encoding.\n// NULL will be converted to \"(null)\".\nstd::string String::ShowWideCString(const wchar_t* wide_c_str) {\n  if (wide_c_str == nullptr) return \"(null)\";\n\n  return internal::WideStringToUtf8(wide_c_str, -1);\n}\n\n// Compares two wide C strings.  Returns true if and only if they have the\n// same content.\n//\n// Unlike wcscmp(), this function can handle NULL argument(s).  A NULL\n// C string is considered different to any non-NULL C string,\n// including the empty string.\nbool String::WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs) {\n  if (lhs == nullptr) return rhs == nullptr;\n\n  if (rhs == nullptr) return false;\n\n  return wcscmp(lhs, rhs) == 0;\n}\n\n// Helper function for *_STREQ on wide strings.\nAssertionResult CmpHelperSTREQ(const char* lhs_expression,\n                               const char* rhs_expression, const wchar_t* lhs,\n                               const wchar_t* rhs) {\n  if (String::WideCStringEquals(lhs, rhs)) {\n    return AssertionSuccess();\n  }\n\n  return EqFailure(lhs_expression, rhs_expression, PrintToString(lhs),\n                   PrintToString(rhs), false);\n}\n\n// Helper function for *_STRNE on wide strings.\nAssertionResult CmpHelperSTRNE(const char* s1_expression,\n                               const char* s2_expression, const wchar_t* s1,\n                               const wchar_t* s2) {\n  if (!String::WideCStringEquals(s1, s2)) {\n    return AssertionSuccess();\n  }\n\n  return AssertionFailure()\n         << \"Expected: (\" << s1_expression << \") != (\" << s2_expression\n         << \"), actual: \" << PrintToString(s1) << \" vs \" << PrintToString(s2);\n}\n\n// Compares two C strings, ignoring case.  Returns true if and only if they have\n// the same content.\n//\n// Unlike strcasecmp(), this function can handle NULL argument(s).  A\n// NULL C string is considered different to any non-NULL C string,\n// including the empty string.\nbool String::CaseInsensitiveCStringEquals(const char* lhs, const char* rhs) {\n  if (lhs == nullptr) return rhs == nullptr;\n  if (rhs == nullptr) return false;\n  return posix::StrCaseCmp(lhs, rhs) == 0;\n}\n\n// Compares two wide C strings, ignoring case.  Returns true if and only if they\n// have the same content.\n//\n// Unlike wcscasecmp(), this function can handle NULL argument(s).\n// A NULL C string is considered different to any non-NULL wide C string,\n// including the empty string.\n// NB: The implementations on different platforms slightly differ.\n// On windows, this method uses _wcsicmp which compares according to LC_CTYPE\n// environment variable. On GNU platform this method uses wcscasecmp\n// which compares according to LC_CTYPE category of the current locale.\n// On MacOS X, it uses towlower, which also uses LC_CTYPE category of the\n// current locale.\nbool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs,\n                                              const wchar_t* rhs) {\n  if (lhs == nullptr) return rhs == nullptr;\n\n  if (rhs == nullptr) return false;\n\n#if GTEST_OS_WINDOWS\n  return _wcsicmp(lhs, rhs) == 0;\n#elif GTEST_OS_LINUX && !GTEST_OS_LINUX_ANDROID\n  return wcscasecmp(lhs, rhs) == 0;\n#else\n  // Android, Mac OS X and Cygwin don't define wcscasecmp.\n  // Other unknown OSes may not define it either.\n  wint_t left, right;\n  do {\n    left = towlower(static_cast<wint_t>(*lhs++));\n    right = towlower(static_cast<wint_t>(*rhs++));\n  } while (left && left == right);\n  return left == right;\n#endif  // OS selector\n}\n\n// Returns true if and only if str ends with the given suffix, ignoring case.\n// Any string is considered to end with an empty suffix.\nbool String::EndsWithCaseInsensitive(const std::string& str,\n                                     const std::string& suffix) {\n  const size_t str_len = str.length();\n  const size_t suffix_len = suffix.length();\n  return (str_len >= suffix_len) &&\n         CaseInsensitiveCStringEquals(str.c_str() + str_len - suffix_len,\n                                      suffix.c_str());\n}\n\n// Formats an int value as \"%02d\".\nstd::string String::FormatIntWidth2(int value) {\n  return FormatIntWidthN(value, 2);\n}\n\n// Formats an int value to given width with leading zeros.\nstd::string String::FormatIntWidthN(int value, int width) {\n  std::stringstream ss;\n  ss << std::setfill('0') << std::setw(width) << value;\n  return ss.str();\n}\n\n// Formats an int value as \"%X\".\nstd::string String::FormatHexUInt32(uint32_t value) {\n  std::stringstream ss;\n  ss << std::hex << std::uppercase << value;\n  return ss.str();\n}\n\n// Formats an int value as \"%X\".\nstd::string String::FormatHexInt(int value) {\n  return FormatHexUInt32(static_cast<uint32_t>(value));\n}\n\n// Formats a byte as \"%02X\".\nstd::string String::FormatByte(unsigned char value) {\n  std::stringstream ss;\n  ss << std::setfill('0') << std::setw(2) << std::hex << std::uppercase\n     << static_cast<unsigned int>(value);\n  return ss.str();\n}\n\n// Converts the buffer in a stringstream to an std::string, converting NUL\n// bytes to \"\\\\0\" along the way.\nstd::string StringStreamToString(::std::stringstream* ss) {\n  const ::std::string& str = ss->str();\n  const char* const start = str.c_str();\n  const char* const end = start + str.length();\n\n  std::string result;\n  result.reserve(static_cast<size_t>(2 * (end - start)));\n  for (const char* ch = start; ch != end; ++ch) {\n    if (*ch == '\\0') {\n      result += \"\\\\0\";  // Replaces NUL with \"\\\\0\";\n    } else {\n      result += *ch;\n    }\n  }\n\n  return result;\n}\n\n// Appends the user-supplied message to the Google-Test-generated message.\nstd::string AppendUserMessage(const std::string& gtest_msg,\n                              const Message& user_msg) {\n  // Appends the user message if it's non-empty.\n  const std::string user_msg_string = user_msg.GetString();\n  if (user_msg_string.empty()) {\n    return gtest_msg;\n  }\n  if (gtest_msg.empty()) {\n    return user_msg_string;\n  }\n  return gtest_msg + \"\\n\" + user_msg_string;\n}\n\n}  // namespace internal\n\n// class TestResult\n\n// Creates an empty TestResult.\nTestResult::TestResult()\n    : death_test_count_(0), start_timestamp_(0), elapsed_time_(0) {}\n\n// D'tor.\nTestResult::~TestResult() {}\n\n// Returns the i-th test part result among all the results. i can\n// range from 0 to total_part_count() - 1. If i is not in that range,\n// aborts the program.\nconst TestPartResult& TestResult::GetTestPartResult(int i) const {\n  if (i < 0 || i >= total_part_count()) internal::posix::Abort();\n  return test_part_results_.at(static_cast<size_t>(i));\n}\n\n// Returns the i-th test property. i can range from 0 to\n// test_property_count() - 1. If i is not in that range, aborts the\n// program.\nconst TestProperty& TestResult::GetTestProperty(int i) const {\n  if (i < 0 || i >= test_property_count()) internal::posix::Abort();\n  return test_properties_.at(static_cast<size_t>(i));\n}\n\n// Clears the test part results.\nvoid TestResult::ClearTestPartResults() { test_part_results_.clear(); }\n\n// Adds a test part result to the list.\nvoid TestResult::AddTestPartResult(const TestPartResult& test_part_result) {\n  test_part_results_.push_back(test_part_result);\n}\n\n// Adds a test property to the list. If a property with the same key as the\n// supplied property is already represented, the value of this test_property\n// replaces the old value for that key.\nvoid TestResult::RecordProperty(const std::string& xml_element,\n                                const TestProperty& test_property) {\n  if (!ValidateTestProperty(xml_element, test_property)) {\n    return;\n  }\n  internal::MutexLock lock(&test_properties_mutex_);\n  const std::vector<TestProperty>::iterator property_with_matching_key =\n      std::find_if(test_properties_.begin(), test_properties_.end(),\n                   internal::TestPropertyKeyIs(test_property.key()));\n  if (property_with_matching_key == test_properties_.end()) {\n    test_properties_.push_back(test_property);\n    return;\n  }\n  property_with_matching_key->SetValue(test_property.value());\n}\n\n// The list of reserved attributes used in the <testsuites> element of XML\n// output.\nstatic const char* const kReservedTestSuitesAttributes[] = {\n    \"disabled\",    \"errors\", \"failures\", \"name\",\n    \"random_seed\", \"tests\",  \"time\",     \"timestamp\"};\n\n// The list of reserved attributes used in the <testsuite> element of XML\n// output.\nstatic const char* const kReservedTestSuiteAttributes[] = {\n    \"disabled\", \"errors\", \"failures\",  \"name\",\n    \"tests\",    \"time\",   \"timestamp\", \"skipped\"};\n\n// The list of reserved attributes used in the <testcase> element of XML output.\nstatic const char* const kReservedTestCaseAttributes[] = {\n    \"classname\",  \"name\",        \"status\", \"time\",\n    \"type_param\", \"value_param\", \"file\",   \"line\"};\n\n// Use a slightly different set for allowed output to ensure existing tests can\n// still RecordProperty(\"result\") or \"RecordProperty(timestamp\")\nstatic const char* const kReservedOutputTestCaseAttributes[] = {\n    \"classname\",   \"name\", \"status\", \"time\",   \"type_param\",\n    \"value_param\", \"file\", \"line\",   \"result\", \"timestamp\"};\n\ntemplate <size_t kSize>\nstd::vector<std::string> ArrayAsVector(const char* const (&array)[kSize]) {\n  return std::vector<std::string>(array, array + kSize);\n}\n\nstatic std::vector<std::string> GetReservedAttributesForElement(\n    const std::string& xml_element) {\n  if (xml_element == \"testsuites\") {\n    return ArrayAsVector(kReservedTestSuitesAttributes);\n  } else if (xml_element == \"testsuite\") {\n    return ArrayAsVector(kReservedTestSuiteAttributes);\n  } else if (xml_element == \"testcase\") {\n    return ArrayAsVector(kReservedTestCaseAttributes);\n  } else {\n    GTEST_CHECK_(false) << \"Unrecognized xml_element provided: \" << xml_element;\n  }\n  // This code is unreachable but some compilers may not realizes that.\n  return std::vector<std::string>();\n}\n\n// TODO(jdesprez): Merge the two getReserved attributes once skip is improved\nstatic std::vector<std::string> GetReservedOutputAttributesForElement(\n    const std::string& xml_element) {\n  if (xml_element == \"testsuites\") {\n    return ArrayAsVector(kReservedTestSuitesAttributes);\n  } else if (xml_element == \"testsuite\") {\n    return ArrayAsVector(kReservedTestSuiteAttributes);\n  } else if (xml_element == \"testcase\") {\n    return ArrayAsVector(kReservedOutputTestCaseAttributes);\n  } else {\n    GTEST_CHECK_(false) << \"Unrecognized xml_element provided: \" << xml_element;\n  }\n  // This code is unreachable but some compilers may not realizes that.\n  return std::vector<std::string>();\n}\n\nstatic std::string FormatWordList(const std::vector<std::string>& words) {\n  Message word_list;\n  for (size_t i = 0; i < words.size(); ++i) {\n    if (i > 0 && words.size() > 2) {\n      word_list << \", \";\n    }\n    if (i == words.size() - 1) {\n      word_list << \"and \";\n    }\n    word_list << \"'\" << words[i] << \"'\";\n  }\n  return word_list.GetString();\n}\n\nstatic bool ValidateTestPropertyName(\n    const std::string& property_name,\n    const std::vector<std::string>& reserved_names) {\n  if (std::find(reserved_names.begin(), reserved_names.end(), property_name) !=\n      reserved_names.end()) {\n    ADD_FAILURE() << \"Reserved key used in RecordProperty(): \" << property_name\n                  << \" (\" << FormatWordList(reserved_names)\n                  << \" are reserved by \" << GTEST_NAME_ << \")\";\n    return false;\n  }\n  return true;\n}\n\n// Adds a failure if the key is a reserved attribute of the element named\n// xml_element.  Returns true if the property is valid.\nbool TestResult::ValidateTestProperty(const std::string& xml_element,\n                                      const TestProperty& test_property) {\n  return ValidateTestPropertyName(test_property.key(),\n                                  GetReservedAttributesForElement(xml_element));\n}\n\n// Clears the object.\nvoid TestResult::Clear() {\n  test_part_results_.clear();\n  test_properties_.clear();\n  death_test_count_ = 0;\n  elapsed_time_ = 0;\n}\n\n// Returns true off the test part was skipped.\nstatic bool TestPartSkipped(const TestPartResult& result) {\n  return result.skipped();\n}\n\n// Returns true if and only if the test was skipped.\nbool TestResult::Skipped() const {\n  return !Failed() && CountIf(test_part_results_, TestPartSkipped) > 0;\n}\n\n// Returns true if and only if the test failed.\nbool TestResult::Failed() const {\n  for (int i = 0; i < total_part_count(); ++i) {\n    if (GetTestPartResult(i).failed()) return true;\n  }\n  return false;\n}\n\n// Returns true if and only if the test part fatally failed.\nstatic bool TestPartFatallyFailed(const TestPartResult& result) {\n  return result.fatally_failed();\n}\n\n// Returns true if and only if the test fatally failed.\nbool TestResult::HasFatalFailure() const {\n  return CountIf(test_part_results_, TestPartFatallyFailed) > 0;\n}\n\n// Returns true if and only if the test part non-fatally failed.\nstatic bool TestPartNonfatallyFailed(const TestPartResult& result) {\n  return result.nonfatally_failed();\n}\n\n// Returns true if and only if the test has a non-fatal failure.\nbool TestResult::HasNonfatalFailure() const {\n  return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0;\n}\n\n// Gets the number of all test parts.  This is the sum of the number\n// of successful test parts and the number of failed test parts.\nint TestResult::total_part_count() const {\n  return static_cast<int>(test_part_results_.size());\n}\n\n// Returns the number of the test properties.\nint TestResult::test_property_count() const {\n  return static_cast<int>(test_properties_.size());\n}\n\n// class Test\n\n// Creates a Test object.\n\n// The c'tor saves the states of all flags.\nTest::Test() : gtest_flag_saver_(new GTEST_FLAG_SAVER_) {}\n\n// The d'tor restores the states of all flags.  The actual work is\n// done by the d'tor of the gtest_flag_saver_ field, and thus not\n// visible here.\nTest::~Test() {}\n\n// Sets up the test fixture.\n//\n// A sub-class may override this.\nvoid Test::SetUp() {}\n\n// Tears down the test fixture.\n//\n// A sub-class may override this.\nvoid Test::TearDown() {}\n\n// Allows user supplied key value pairs to be recorded for later output.\nvoid Test::RecordProperty(const std::string& key, const std::string& value) {\n  UnitTest::GetInstance()->RecordProperty(key, value);\n}\n\n// Allows user supplied key value pairs to be recorded for later output.\nvoid Test::RecordProperty(const std::string& key, int value) {\n  Message value_message;\n  value_message << value;\n  RecordProperty(key, value_message.GetString().c_str());\n}\n\nnamespace internal {\n\nvoid ReportFailureInUnknownLocation(TestPartResult::Type result_type,\n                                    const std::string& message) {\n  // This function is a friend of UnitTest and as such has access to\n  // AddTestPartResult.\n  UnitTest::GetInstance()->AddTestPartResult(\n      result_type,\n      nullptr,  // No info about the source file where the exception occurred.\n      -1,       // We have no info on which line caused the exception.\n      message,\n      \"\");  // No stack trace, either.\n}\n\n}  // namespace internal\n\n// Google Test requires all tests in the same test suite to use the same test\n// fixture class.  This function checks if the current test has the\n// same fixture class as the first test in the current test suite.  If\n// yes, it returns true; otherwise it generates a Google Test failure and\n// returns false.\nbool Test::HasSameFixtureClass() {\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  const TestSuite* const test_suite = impl->current_test_suite();\n\n  // Info about the first test in the current test suite.\n  const TestInfo* const first_test_info = test_suite->test_info_list()[0];\n  const internal::TypeId first_fixture_id = first_test_info->fixture_class_id_;\n  const char* const first_test_name = first_test_info->name();\n\n  // Info about the current test.\n  const TestInfo* const this_test_info = impl->current_test_info();\n  const internal::TypeId this_fixture_id = this_test_info->fixture_class_id_;\n  const char* const this_test_name = this_test_info->name();\n\n  if (this_fixture_id != first_fixture_id) {\n    // Is the first test defined using TEST?\n    const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId();\n    // Is this test defined using TEST?\n    const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId();\n\n    if (first_is_TEST || this_is_TEST) {\n      // Both TEST and TEST_F appear in same test suite, which is incorrect.\n      // Tell the user how to fix this.\n\n      // Gets the name of the TEST and the name of the TEST_F.  Note\n      // that first_is_TEST and this_is_TEST cannot both be true, as\n      // the fixture IDs are different for the two tests.\n      const char* const TEST_name =\n          first_is_TEST ? first_test_name : this_test_name;\n      const char* const TEST_F_name =\n          first_is_TEST ? this_test_name : first_test_name;\n\n      ADD_FAILURE()\n          << \"All tests in the same test suite must use the same test fixture\\n\"\n          << \"class, so mixing TEST_F and TEST in the same test suite is\\n\"\n          << \"illegal.  In test suite \" << this_test_info->test_suite_name()\n          << \",\\n\"\n          << \"test \" << TEST_F_name << \" is defined using TEST_F but\\n\"\n          << \"test \" << TEST_name << \" is defined using TEST.  You probably\\n\"\n          << \"want to change the TEST to TEST_F or move it to another test\\n\"\n          << \"case.\";\n    } else {\n      // Two fixture classes with the same name appear in two different\n      // namespaces, which is not allowed. Tell the user how to fix this.\n      ADD_FAILURE()\n          << \"All tests in the same test suite must use the same test fixture\\n\"\n          << \"class.  However, in test suite \"\n          << this_test_info->test_suite_name() << \",\\n\"\n          << \"you defined test \" << first_test_name << \" and test \"\n          << this_test_name << \"\\n\"\n          << \"using two different test fixture classes.  This can happen if\\n\"\n          << \"the two classes are from different namespaces or translation\\n\"\n          << \"units and have the same name.  You should probably rename one\\n\"\n          << \"of the classes to put the tests into different test suites.\";\n    }\n    return false;\n  }\n\n  return true;\n}\n\n#if GTEST_HAS_SEH\n\n// Adds an \"exception thrown\" fatal failure to the current test.  This\n// function returns its result via an output parameter pointer because VC++\n// prohibits creation of objects with destructors on stack in functions\n// using __try (see error C2712).\nstatic std::string* FormatSehExceptionMessage(DWORD exception_code,\n                                              const char* location) {\n  Message message;\n  message << \"SEH exception with code 0x\" << std::setbase(16) << exception_code\n          << std::setbase(10) << \" thrown in \" << location << \".\";\n\n  return new std::string(message.GetString());\n}\n\n#endif  // GTEST_HAS_SEH\n\nnamespace internal {\n\n#if GTEST_HAS_EXCEPTIONS\n\n// Adds an \"exception thrown\" fatal failure to the current test.\nstatic std::string FormatCxxExceptionMessage(const char* description,\n                                             const char* location) {\n  Message message;\n  if (description != nullptr) {\n    message << \"C++ exception with description \\\"\" << description << \"\\\"\";\n  } else {\n    message << \"Unknown C++ exception\";\n  }\n  message << \" thrown in \" << location << \".\";\n\n  return message.GetString();\n}\n\nstatic std::string PrintTestPartResultToString(\n    const TestPartResult& test_part_result);\n\nGoogleTestFailureException::GoogleTestFailureException(\n    const TestPartResult& failure)\n    : ::std::runtime_error(PrintTestPartResultToString(failure).c_str()) {}\n\n#endif  // GTEST_HAS_EXCEPTIONS\n\n// We put these helper functions in the internal namespace as IBM's xlC\n// compiler rejects the code if they were declared static.\n\n// Runs the given method and handles SEH exceptions it throws, when\n// SEH is supported; returns the 0-value for type Result in case of an\n// SEH exception.  (Microsoft compilers cannot handle SEH and C++\n// exceptions in the same function.  Therefore, we provide a separate\n// wrapper function for handling SEH exceptions.)\ntemplate <class T, typename Result>\nResult HandleSehExceptionsInMethodIfSupported(T* object, Result (T::*method)(),\n                                              const char* location) {\n#if GTEST_HAS_SEH\n  __try {\n    return (object->*method)();\n  } __except (internal::UnitTestOptions::GTestShouldProcessSEH(  // NOLINT\n      GetExceptionCode())) {\n    // We create the exception message on the heap because VC++ prohibits\n    // creation of objects with destructors on stack in functions using __try\n    // (see error C2712).\n    std::string* exception_message =\n        FormatSehExceptionMessage(GetExceptionCode(), location);\n    internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure,\n                                             *exception_message);\n    delete exception_message;\n    return static_cast<Result>(0);\n  }\n#else\n  (void)location;\n  return (object->*method)();\n#endif  // GTEST_HAS_SEH\n}\n\n// Runs the given method and catches and reports C++ and/or SEH-style\n// exceptions, if they are supported; returns the 0-value for type\n// Result in case of an SEH exception.\ntemplate <class T, typename Result>\nResult HandleExceptionsInMethodIfSupported(T* object, Result (T::*method)(),\n                                           const char* location) {\n  // NOTE: The user code can affect the way in which Google Test handles\n  // exceptions by setting GTEST_FLAG(catch_exceptions), but only before\n  // RUN_ALL_TESTS() starts. It is technically possible to check the flag\n  // after the exception is caught and either report or re-throw the\n  // exception based on the flag's value:\n  //\n  // try {\n  //   // Perform the test method.\n  // } catch (...) {\n  //   if (GTEST_FLAG_GET(catch_exceptions))\n  //     // Report the exception as failure.\n  //   else\n  //     throw;  // Re-throws the original exception.\n  // }\n  //\n  // However, the purpose of this flag is to allow the program to drop into\n  // the debugger when the exception is thrown. On most platforms, once the\n  // control enters the catch block, the exception origin information is\n  // lost and the debugger will stop the program at the point of the\n  // re-throw in this function -- instead of at the point of the original\n  // throw statement in the code under test.  For this reason, we perform\n  // the check early, sacrificing the ability to affect Google Test's\n  // exception handling in the method where the exception is thrown.\n  if (internal::GetUnitTestImpl()->catch_exceptions()) {\n#if GTEST_HAS_EXCEPTIONS\n    try {\n      return HandleSehExceptionsInMethodIfSupported(object, method, location);\n    } catch (const AssertionException&) {  // NOLINT\n      // This failure was reported already.\n    } catch (const internal::GoogleTestFailureException&) {  // NOLINT\n      // This exception type can only be thrown by a failed Google\n      // Test assertion with the intention of letting another testing\n      // framework catch it.  Therefore we just re-throw it.\n      throw;\n    } catch (const std::exception& e) {  // NOLINT\n      internal::ReportFailureInUnknownLocation(\n          TestPartResult::kFatalFailure,\n          FormatCxxExceptionMessage(e.what(), location));\n    } catch (...) {  // NOLINT\n      internal::ReportFailureInUnknownLocation(\n          TestPartResult::kFatalFailure,\n          FormatCxxExceptionMessage(nullptr, location));\n    }\n    return static_cast<Result>(0);\n#else\n    return HandleSehExceptionsInMethodIfSupported(object, method, location);\n#endif  // GTEST_HAS_EXCEPTIONS\n  } else {\n    return (object->*method)();\n  }\n}\n\n}  // namespace internal\n\n// Runs the test and updates the test result.\nvoid Test::Run() {\n  if (!HasSameFixtureClass()) return;\n\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  impl->os_stack_trace_getter()->UponLeavingGTest();\n  internal::HandleExceptionsInMethodIfSupported(this, &Test::SetUp, \"SetUp()\");\n  // We will run the test only if SetUp() was successful and didn't call\n  // GTEST_SKIP().\n  if (!HasFatalFailure() && !IsSkipped()) {\n    impl->os_stack_trace_getter()->UponLeavingGTest();\n    internal::HandleExceptionsInMethodIfSupported(this, &Test::TestBody,\n                                                  \"the test body\");\n  }\n\n  // However, we want to clean up as much as possible.  Hence we will\n  // always call TearDown(), even if SetUp() or the test body has\n  // failed.\n  impl->os_stack_trace_getter()->UponLeavingGTest();\n  internal::HandleExceptionsInMethodIfSupported(this, &Test::TearDown,\n                                                \"TearDown()\");\n}\n\n// Returns true if and only if the current test has a fatal failure.\nbool Test::HasFatalFailure() {\n  return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure();\n}\n\n// Returns true if and only if the current test has a non-fatal failure.\nbool Test::HasNonfatalFailure() {\n  return internal::GetUnitTestImpl()\n      ->current_test_result()\n      ->HasNonfatalFailure();\n}\n\n// Returns true if and only if the current test was skipped.\nbool Test::IsSkipped() {\n  return internal::GetUnitTestImpl()->current_test_result()->Skipped();\n}\n\n// class TestInfo\n\n// Constructs a TestInfo object. It assumes ownership of the test factory\n// object.\nTestInfo::TestInfo(const std::string& a_test_suite_name,\n                   const std::string& a_name, const char* a_type_param,\n                   const char* a_value_param,\n                   internal::CodeLocation a_code_location,\n                   internal::TypeId fixture_class_id,\n                   internal::TestFactoryBase* factory)\n    : test_suite_name_(a_test_suite_name),\n      name_(a_name),\n      type_param_(a_type_param ? new std::string(a_type_param) : nullptr),\n      value_param_(a_value_param ? new std::string(a_value_param) : nullptr),\n      location_(a_code_location),\n      fixture_class_id_(fixture_class_id),\n      should_run_(false),\n      is_disabled_(false),\n      matches_filter_(false),\n      is_in_another_shard_(false),\n      factory_(factory),\n      result_() {}\n\n// Destructs a TestInfo object.\nTestInfo::~TestInfo() { delete factory_; }\n\nnamespace internal {\n\n// Creates a new TestInfo object and registers it with Google Test;\n// returns the created object.\n//\n// Arguments:\n//\n//   test_suite_name:  name of the test suite\n//   name:             name of the test\n//   type_param:       the name of the test's type parameter, or NULL if\n//                     this is not a typed or a type-parameterized test.\n//   value_param:      text representation of the test's value parameter,\n//                     or NULL if this is not a value-parameterized test.\n//   code_location:    code location where the test is defined\n//   fixture_class_id: ID of the test fixture class\n//   set_up_tc:        pointer to the function that sets up the test suite\n//   tear_down_tc:     pointer to the function that tears down the test suite\n//   factory:          pointer to the factory that creates a test object.\n//                     The newly created TestInfo instance will assume\n//                     ownership of the factory object.\nTestInfo* MakeAndRegisterTestInfo(\n    const char* test_suite_name, const char* name, const char* type_param,\n    const char* value_param, CodeLocation code_location,\n    TypeId fixture_class_id, SetUpTestSuiteFunc set_up_tc,\n    TearDownTestSuiteFunc tear_down_tc, TestFactoryBase* factory) {\n  TestInfo* const test_info =\n      new TestInfo(test_suite_name, name, type_param, value_param,\n                   code_location, fixture_class_id, factory);\n  GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info);\n  return test_info;\n}\n\nvoid ReportInvalidTestSuiteType(const char* test_suite_name,\n                                CodeLocation code_location) {\n  Message errors;\n  errors\n      << \"Attempted redefinition of test suite \" << test_suite_name << \".\\n\"\n      << \"All tests in the same test suite must use the same test fixture\\n\"\n      << \"class.  However, in test suite \" << test_suite_name << \", you tried\\n\"\n      << \"to define a test using a fixture class different from the one\\n\"\n      << \"used earlier. This can happen if the two fixture classes are\\n\"\n      << \"from different namespaces and have the same name. You should\\n\"\n      << \"probably rename one of the classes to put the tests into different\\n\"\n      << \"test suites.\";\n\n  GTEST_LOG_(ERROR) << FormatFileLocation(code_location.file.c_str(),\n                                          code_location.line)\n                    << \" \" << errors.GetString();\n}\n}  // namespace internal\n\nnamespace {\n\n// A predicate that checks the test name of a TestInfo against a known\n// value.\n//\n// This is used for implementation of the TestSuite class only.  We put\n// it in the anonymous namespace to prevent polluting the outer\n// namespace.\n//\n// TestNameIs is copyable.\nclass TestNameIs {\n public:\n  // Constructor.\n  //\n  // TestNameIs has NO default constructor.\n  explicit TestNameIs(const char* name) : name_(name) {}\n\n  // Returns true if and only if the test name of test_info matches name_.\n  bool operator()(const TestInfo* test_info) const {\n    return test_info && test_info->name() == name_;\n  }\n\n private:\n  std::string name_;\n};\n\n}  // namespace\n\nnamespace internal {\n\n// This method expands all parameterized tests registered with macros TEST_P\n// and INSTANTIATE_TEST_SUITE_P into regular tests and registers those.\n// This will be done just once during the program runtime.\nvoid UnitTestImpl::RegisterParameterizedTests() {\n  if (!parameterized_tests_registered_) {\n    parameterized_test_registry_.RegisterTests();\n    type_parameterized_test_registry_.CheckForInstantiations();\n    parameterized_tests_registered_ = true;\n  }\n}\n\n}  // namespace internal\n\n// Creates the test object, runs it, records its result, and then\n// deletes it.\nvoid TestInfo::Run() {\n  TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater();\n  if (!should_run_) {\n    if (is_disabled_ && matches_filter_) repeater->OnTestDisabled(*this);\n    return;\n  }\n\n  // Tells UnitTest where to store test result.\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  impl->set_current_test_info(this);\n\n  // Notifies the unit test event listeners that a test is about to start.\n  repeater->OnTestStart(*this);\n  result_.set_start_timestamp(internal::GetTimeInMillis());\n  internal::Timer timer;\n  impl->os_stack_trace_getter()->UponLeavingGTest();\n\n  // Creates the test object.\n  Test* const test = internal::HandleExceptionsInMethodIfSupported(\n      factory_, &internal::TestFactoryBase::CreateTest,\n      \"the test fixture's constructor\");\n\n  // Runs the test if the constructor didn't generate a fatal failure or invoke\n  // GTEST_SKIP().\n  // Note that the object will not be null\n  if (!Test::HasFatalFailure() && !Test::IsSkipped()) {\n    // This doesn't throw as all user code that can throw are wrapped into\n    // exception handling code.\n    test->Run();\n  }\n\n  if (test != nullptr) {\n    // Deletes the test object.\n    impl->os_stack_trace_getter()->UponLeavingGTest();\n    internal::HandleExceptionsInMethodIfSupported(\n        test, &Test::DeleteSelf_, \"the test fixture's destructor\");\n  }\n\n  result_.set_elapsed_time(timer.Elapsed());\n\n  // Notifies the unit test event listener that a test has just finished.\n  repeater->OnTestEnd(*this);\n\n  // Tells UnitTest to stop associating assertion results to this\n  // test.\n  impl->set_current_test_info(nullptr);\n}\n\n// Skip and records a skipped test result for this object.\nvoid TestInfo::Skip() {\n  if (!should_run_) return;\n\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  impl->set_current_test_info(this);\n\n  TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater();\n\n  // Notifies the unit test event listeners that a test is about to start.\n  repeater->OnTestStart(*this);\n\n  const TestPartResult test_part_result =\n      TestPartResult(TestPartResult::kSkip, this->file(), this->line(), \"\");\n  impl->GetTestPartResultReporterForCurrentThread()->ReportTestPartResult(\n      test_part_result);\n\n  // Notifies the unit test event listener that a test has just finished.\n  repeater->OnTestEnd(*this);\n  impl->set_current_test_info(nullptr);\n}\n\n// class TestSuite\n\n// Gets the number of successful tests in this test suite.\nint TestSuite::successful_test_count() const {\n  return CountIf(test_info_list_, TestPassed);\n}\n\n// Gets the number of successful tests in this test suite.\nint TestSuite::skipped_test_count() const {\n  return CountIf(test_info_list_, TestSkipped);\n}\n\n// Gets the number of failed tests in this test suite.\nint TestSuite::failed_test_count() const {\n  return CountIf(test_info_list_, TestFailed);\n}\n\n// Gets the number of disabled tests that will be reported in the XML report.\nint TestSuite::reportable_disabled_test_count() const {\n  return CountIf(test_info_list_, TestReportableDisabled);\n}\n\n// Gets the number of disabled tests in this test suite.\nint TestSuite::disabled_test_count() const {\n  return CountIf(test_info_list_, TestDisabled);\n}\n\n// Gets the number of tests to be printed in the XML report.\nint TestSuite::reportable_test_count() const {\n  return CountIf(test_info_list_, TestReportable);\n}\n\n// Get the number of tests in this test suite that should run.\nint TestSuite::test_to_run_count() const {\n  return CountIf(test_info_list_, ShouldRunTest);\n}\n\n// Gets the number of all tests.\nint TestSuite::total_test_count() const {\n  return static_cast<int>(test_info_list_.size());\n}\n\n// Creates a TestSuite with the given name.\n//\n// Arguments:\n//\n//   a_name:       name of the test suite\n//   a_type_param: the name of the test suite's type parameter, or NULL if\n//                 this is not a typed or a type-parameterized test suite.\n//   set_up_tc:    pointer to the function that sets up the test suite\n//   tear_down_tc: pointer to the function that tears down the test suite\nTestSuite::TestSuite(const char* a_name, const char* a_type_param,\n                     internal::SetUpTestSuiteFunc set_up_tc,\n                     internal::TearDownTestSuiteFunc tear_down_tc)\n    : name_(a_name),\n      type_param_(a_type_param ? new std::string(a_type_param) : nullptr),\n      set_up_tc_(set_up_tc),\n      tear_down_tc_(tear_down_tc),\n      should_run_(false),\n      start_timestamp_(0),\n      elapsed_time_(0) {}\n\n// Destructor of TestSuite.\nTestSuite::~TestSuite() {\n  // Deletes every Test in the collection.\n  ForEach(test_info_list_, internal::Delete<TestInfo>);\n}\n\n// Returns the i-th test among all the tests. i can range from 0 to\n// total_test_count() - 1. If i is not in that range, returns NULL.\nconst TestInfo* TestSuite::GetTestInfo(int i) const {\n  const int index = GetElementOr(test_indices_, i, -1);\n  return index < 0 ? nullptr : test_info_list_[static_cast<size_t>(index)];\n}\n\n// Returns the i-th test among all the tests. i can range from 0 to\n// total_test_count() - 1. If i is not in that range, returns NULL.\nTestInfo* TestSuite::GetMutableTestInfo(int i) {\n  const int index = GetElementOr(test_indices_, i, -1);\n  return index < 0 ? nullptr : test_info_list_[static_cast<size_t>(index)];\n}\n\n// Adds a test to this test suite.  Will delete the test upon\n// destruction of the TestSuite object.\nvoid TestSuite::AddTestInfo(TestInfo* test_info) {\n  test_info_list_.push_back(test_info);\n  test_indices_.push_back(static_cast<int>(test_indices_.size()));\n}\n\n// Runs every test in this TestSuite.\nvoid TestSuite::Run() {\n  if (!should_run_) return;\n\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  impl->set_current_test_suite(this);\n\n  TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater();\n\n  // Call both legacy and the new API\n  repeater->OnTestSuiteStart(*this);\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  repeater->OnTestCaseStart(*this);\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  impl->os_stack_trace_getter()->UponLeavingGTest();\n  internal::HandleExceptionsInMethodIfSupported(\n      this, &TestSuite::RunSetUpTestSuite, \"SetUpTestSuite()\");\n\n  const bool skip_all = ad_hoc_test_result().Failed();\n\n  start_timestamp_ = internal::GetTimeInMillis();\n  internal::Timer timer;\n  for (int i = 0; i < total_test_count(); i++) {\n    if (skip_all) {\n      GetMutableTestInfo(i)->Skip();\n    } else {\n      GetMutableTestInfo(i)->Run();\n    }\n    if (GTEST_FLAG_GET(fail_fast) &&\n        GetMutableTestInfo(i)->result()->Failed()) {\n      for (int j = i + 1; j < total_test_count(); j++) {\n        GetMutableTestInfo(j)->Skip();\n      }\n      break;\n    }\n  }\n  elapsed_time_ = timer.Elapsed();\n\n  impl->os_stack_trace_getter()->UponLeavingGTest();\n  internal::HandleExceptionsInMethodIfSupported(\n      this, &TestSuite::RunTearDownTestSuite, \"TearDownTestSuite()\");\n\n  // Call both legacy and the new API\n  repeater->OnTestSuiteEnd(*this);\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  repeater->OnTestCaseEnd(*this);\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  impl->set_current_test_suite(nullptr);\n}\n\n// Skips all tests under this TestSuite.\nvoid TestSuite::Skip() {\n  if (!should_run_) return;\n\n  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();\n  impl->set_current_test_suite(this);\n\n  TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater();\n\n  // Call both legacy and the new API\n  repeater->OnTestSuiteStart(*this);\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  repeater->OnTestCaseStart(*this);\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  for (int i = 0; i < total_test_count(); i++) {\n    GetMutableTestInfo(i)->Skip();\n  }\n\n  // Call both legacy and the new API\n  repeater->OnTestSuiteEnd(*this);\n  // Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  repeater->OnTestCaseEnd(*this);\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  impl->set_current_test_suite(nullptr);\n}\n\n// Clears the results of all tests in this test suite.\nvoid TestSuite::ClearResult() {\n  ad_hoc_test_result_.Clear();\n  ForEach(test_info_list_, TestInfo::ClearTestResult);\n}\n\n// Shuffles the tests in this test suite.\nvoid TestSuite::ShuffleTests(internal::Random* random) {\n  Shuffle(random, &test_indices_);\n}\n\n// Restores the test order to before the first shuffle.\nvoid TestSuite::UnshuffleTests() {\n  for (size_t i = 0; i < test_indices_.size(); i++) {\n    test_indices_[i] = static_cast<int>(i);\n  }\n}\n\n// Formats a countable noun.  Depending on its quantity, either the\n// singular form or the plural form is used. e.g.\n//\n// FormatCountableNoun(1, \"formula\", \"formuli\") returns \"1 formula\".\n// FormatCountableNoun(5, \"book\", \"books\") returns \"5 books\".\nstatic std::string FormatCountableNoun(int count, const char* singular_form,\n                                       const char* plural_form) {\n  return internal::StreamableToString(count) + \" \" +\n         (count == 1 ? singular_form : plural_form);\n}\n\n// Formats the count of tests.\nstatic std::string FormatTestCount(int test_count) {\n  return FormatCountableNoun(test_count, \"test\", \"tests\");\n}\n\n// Formats the count of test suites.\nstatic std::string FormatTestSuiteCount(int test_suite_count) {\n  return FormatCountableNoun(test_suite_count, \"test suite\", \"test suites\");\n}\n\n// Converts a TestPartResult::Type enum to human-friendly string\n// representation.  Both kNonFatalFailure and kFatalFailure are translated\n// to \"Failure\", as the user usually doesn't care about the difference\n// between the two when viewing the test result.\nstatic const char* TestPartResultTypeToString(TestPartResult::Type type) {\n  switch (type) {\n    case TestPartResult::kSkip:\n      return \"Skipped\\n\";\n    case TestPartResult::kSuccess:\n      return \"Success\";\n\n    case TestPartResult::kNonFatalFailure:\n    case TestPartResult::kFatalFailure:\n#ifdef _MSC_VER\n      return \"error: \";\n#else\n      return \"Failure\\n\";\n#endif\n    default:\n      return \"Unknown result type\";\n  }\n}\n\nnamespace internal {\nenum class GTestColor { kDefault, kRed, kGreen, kYellow };\n\n// Prints a TestPartResult to an std::string.\nstatic std::string PrintTestPartResultToString(\n    const TestPartResult& test_part_result) {\n  return (Message() << internal::FormatFileLocation(\n                           test_part_result.file_name(),\n                           test_part_result.line_number())\n                    << \" \"\n                    << TestPartResultTypeToString(test_part_result.type())\n                    << test_part_result.message())\n      .GetString();\n}\n\n// Prints a TestPartResult.\nstatic void PrintTestPartResult(const TestPartResult& test_part_result) {\n  const std::string& result = PrintTestPartResultToString(test_part_result);\n  printf(\"%s\\n\", result.c_str());\n  fflush(stdout);\n  // If the test program runs in Visual Studio or a debugger, the\n  // following statements add the test part result message to the Output\n  // window such that the user can double-click on it to jump to the\n  // corresponding source code location; otherwise they do nothing.\n#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE\n  // We don't call OutputDebugString*() on Windows Mobile, as printing\n  // to stdout is done by OutputDebugString() there already - we don't\n  // want the same message printed twice.\n  ::OutputDebugStringA(result.c_str());\n  ::OutputDebugStringA(\"\\n\");\n#endif\n}\n\n// class PrettyUnitTestResultPrinter\n#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && \\\n    !GTEST_OS_WINDOWS_RT && !GTEST_OS_WINDOWS_MINGW\n\n// Returns the character attribute for the given color.\nstatic WORD GetColorAttribute(GTestColor color) {\n  switch (color) {\n    case GTestColor::kRed:\n      return FOREGROUND_RED;\n    case GTestColor::kGreen:\n      return FOREGROUND_GREEN;\n    case GTestColor::kYellow:\n      return FOREGROUND_RED | FOREGROUND_GREEN;\n    default:\n      return 0;\n  }\n}\n\nstatic int GetBitOffset(WORD color_mask) {\n  if (color_mask == 0) return 0;\n\n  int bitOffset = 0;\n  while ((color_mask & 1) == 0) {\n    color_mask >>= 1;\n    ++bitOffset;\n  }\n  return bitOffset;\n}\n\nstatic WORD GetNewColor(GTestColor color, WORD old_color_attrs) {\n  // Let's reuse the BG\n  static const WORD background_mask = BACKGROUND_BLUE | BACKGROUND_GREEN |\n                                      BACKGROUND_RED | BACKGROUND_INTENSITY;\n  static const WORD foreground_mask = FOREGROUND_BLUE | FOREGROUND_GREEN |\n                                      FOREGROUND_RED | FOREGROUND_INTENSITY;\n  const WORD existing_bg = old_color_attrs & background_mask;\n\n  WORD new_color =\n      GetColorAttribute(color) | existing_bg | FOREGROUND_INTENSITY;\n  static const int bg_bitOffset = GetBitOffset(background_mask);\n  static const int fg_bitOffset = GetBitOffset(foreground_mask);\n\n  if (((new_color & background_mask) >> bg_bitOffset) ==\n      ((new_color & foreground_mask) >> fg_bitOffset)) {\n    new_color ^= FOREGROUND_INTENSITY;  // invert intensity\n  }\n  return new_color;\n}\n\n#else\n\n// Returns the ANSI color code for the given color. GTestColor::kDefault is\n// an invalid input.\nstatic const char* GetAnsiColorCode(GTestColor color) {\n  switch (color) {\n    case GTestColor::kRed:\n      return \"1\";\n    case GTestColor::kGreen:\n      return \"2\";\n    case GTestColor::kYellow:\n      return \"3\";\n    default:\n      return nullptr;\n  }\n}\n\n#endif  // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE\n\n// Returns true if and only if Google Test should use colors in the output.\nbool ShouldUseColor(bool stdout_is_tty) {\n  std::string c = GTEST_FLAG_GET(color);\n  const char* const gtest_color = c.c_str();\n\n  if (String::CaseInsensitiveCStringEquals(gtest_color, \"auto\")) {\n#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MINGW\n    // On Windows the TERM variable is usually not set, but the\n    // console there does support colors.\n    return stdout_is_tty;\n#else\n    // On non-Windows platforms, we rely on the TERM variable.\n    const char* const term = posix::GetEnv(\"TERM\");\n    const bool term_supports_color =\n        String::CStringEquals(term, \"xterm\") ||\n        String::CStringEquals(term, \"xterm-color\") ||\n        String::CStringEquals(term, \"xterm-256color\") ||\n        String::CStringEquals(term, \"screen\") ||\n        String::CStringEquals(term, \"screen-256color\") ||\n        String::CStringEquals(term, \"tmux\") ||\n        String::CStringEquals(term, \"tmux-256color\") ||\n        String::CStringEquals(term, \"rxvt-unicode\") ||\n        String::CStringEquals(term, \"rxvt-unicode-256color\") ||\n        String::CStringEquals(term, \"linux\") ||\n        String::CStringEquals(term, \"cygwin\");\n    return stdout_is_tty && term_supports_color;\n#endif  // GTEST_OS_WINDOWS\n  }\n\n  return String::CaseInsensitiveCStringEquals(gtest_color, \"yes\") ||\n         String::CaseInsensitiveCStringEquals(gtest_color, \"true\") ||\n         String::CaseInsensitiveCStringEquals(gtest_color, \"t\") ||\n         String::CStringEquals(gtest_color, \"1\");\n  // We take \"yes\", \"true\", \"t\", and \"1\" as meaning \"yes\".  If the\n  // value is neither one of these nor \"auto\", we treat it as \"no\" to\n  // be conservative.\n}\n\n// Helpers for printing colored strings to stdout. Note that on Windows, we\n// cannot simply emit special characters and have the terminal change colors.\n// This routine must actually emit the characters rather than return a string\n// that would be colored when printed, as can be done on Linux.\n\nGTEST_ATTRIBUTE_PRINTF_(2, 3)\nvoid ColoredPrintf(GTestColor color, const char* fmt, ...) {\n  va_list args;\n  va_start(args, fmt);\n\n  static const bool in_color_mode =\n      ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0);\n  const bool use_color = in_color_mode && (color != GTestColor::kDefault);\n\n  if (!use_color) {\n    vprintf(fmt, args);\n    va_end(args);\n    return;\n  }\n\n#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && \\\n    !GTEST_OS_WINDOWS_RT && !GTEST_OS_WINDOWS_MINGW\n  const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE);\n\n  // Gets the current text color.\n  CONSOLE_SCREEN_BUFFER_INFO buffer_info;\n  GetConsoleScreenBufferInfo(stdout_handle, &buffer_info);\n  const WORD old_color_attrs = buffer_info.wAttributes;\n  const WORD new_color = GetNewColor(color, old_color_attrs);\n\n  // We need to flush the stream buffers into the console before each\n  // SetConsoleTextAttribute call lest it affect the text that is already\n  // printed but has not yet reached the console.\n  fflush(stdout);\n  SetConsoleTextAttribute(stdout_handle, new_color);\n\n  vprintf(fmt, args);\n\n  fflush(stdout);\n  // Restores the text color.\n  SetConsoleTextAttribute(stdout_handle, old_color_attrs);\n#else\n  printf(\"\\033[0;3%sm\", GetAnsiColorCode(color));\n  vprintf(fmt, args);\n  printf(\"\\033[m\");  // Resets the terminal to default.\n#endif  // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE\n  va_end(args);\n}\n\n// Text printed in Google Test's text output and --gtest_list_tests\n// output to label the type parameter and value parameter for a test.\nstatic const char kTypeParamLabel[] = \"TypeParam\";\nstatic const char kValueParamLabel[] = \"GetParam()\";\n\nstatic void PrintFullTestCommentIfPresent(const TestInfo& test_info) {\n  const char* const type_param = test_info.type_param();\n  const char* const value_param = test_info.value_param();\n\n  if (type_param != nullptr || value_param != nullptr) {\n    printf(\", where \");\n    if (type_param != nullptr) {\n      printf(\"%s = %s\", kTypeParamLabel, type_param);\n      if (value_param != nullptr) printf(\" and \");\n    }\n    if (value_param != nullptr) {\n      printf(\"%s = %s\", kValueParamLabel, value_param);\n    }\n  }\n}\n\n// This class implements the TestEventListener interface.\n//\n// Class PrettyUnitTestResultPrinter is copyable.\nclass PrettyUnitTestResultPrinter : public TestEventListener {\n public:\n  PrettyUnitTestResultPrinter() {}\n  static void PrintTestName(const char* test_suite, const char* test) {\n    printf(\"%s.%s\", test_suite, test);\n  }\n\n  // The following methods override what's in the TestEventListener class.\n  void OnTestProgramStart(const UnitTest& /*unit_test*/) override {}\n  void OnTestIterationStart(const UnitTest& unit_test, int iteration) override;\n  void OnEnvironmentsSetUpStart(const UnitTest& unit_test) override;\n  void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) override {}\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  void OnTestCaseStart(const TestCase& test_case) override;\n#else\n  void OnTestSuiteStart(const TestSuite& test_suite) override;\n#endif  // OnTestCaseStart\n\n  void OnTestStart(const TestInfo& test_info) override;\n  void OnTestDisabled(const TestInfo& test_info) override;\n\n  void OnTestPartResult(const TestPartResult& result) override;\n  void OnTestEnd(const TestInfo& test_info) override;\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  void OnTestCaseEnd(const TestCase& test_case) override;\n#else\n  void OnTestSuiteEnd(const TestSuite& test_suite) override;\n#endif  // GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  void OnEnvironmentsTearDownStart(const UnitTest& unit_test) override;\n  void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) override {}\n  void OnTestIterationEnd(const UnitTest& unit_test, int iteration) override;\n  void OnTestProgramEnd(const UnitTest& /*unit_test*/) override {}\n\n private:\n  static void PrintFailedTests(const UnitTest& unit_test);\n  static void PrintFailedTestSuites(const UnitTest& unit_test);\n  static void PrintSkippedTests(const UnitTest& unit_test);\n};\n\n// Fired before each iteration of tests starts.\nvoid PrettyUnitTestResultPrinter::OnTestIterationStart(\n    const UnitTest& unit_test, int iteration) {\n  if (GTEST_FLAG_GET(repeat) != 1)\n    printf(\"\\nRepeating all tests (iteration %d) . . .\\n\\n\", iteration + 1);\n\n  std::string f = GTEST_FLAG_GET(filter);\n  const char* const filter = f.c_str();\n\n  // Prints the filter if it's not *.  This reminds the user that some\n  // tests may be skipped.\n  if (!String::CStringEquals(filter, kUniversalFilter)) {\n    ColoredPrintf(GTestColor::kYellow, \"Note: %s filter = %s\\n\", GTEST_NAME_,\n                  filter);\n  }\n\n  if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) {\n    const int32_t shard_index = Int32FromEnvOrDie(kTestShardIndex, -1);\n    ColoredPrintf(GTestColor::kYellow, \"Note: This is test shard %d of %s.\\n\",\n                  static_cast<int>(shard_index) + 1,\n                  internal::posix::GetEnv(kTestTotalShards));\n  }\n\n  if (GTEST_FLAG_GET(shuffle)) {\n    ColoredPrintf(GTestColor::kYellow,\n                  \"Note: Randomizing tests' orders with a seed of %d .\\n\",\n                  unit_test.random_seed());\n  }\n\n  ColoredPrintf(GTestColor::kGreen, \"[==========] \");\n  printf(\"Running %s from %s.\\n\",\n         FormatTestCount(unit_test.test_to_run_count()).c_str(),\n         FormatTestSuiteCount(unit_test.test_suite_to_run_count()).c_str());\n  fflush(stdout);\n}\n\nvoid PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart(\n    const UnitTest& /*unit_test*/) {\n  ColoredPrintf(GTestColor::kGreen, \"[----------] \");\n  printf(\"Global test environment set-up.\\n\");\n  fflush(stdout);\n}\n\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\nvoid PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) {\n  const std::string counts =\n      FormatCountableNoun(test_case.test_to_run_count(), \"test\", \"tests\");\n  ColoredPrintf(GTestColor::kGreen, \"[----------] \");\n  printf(\"%s from %s\", counts.c_str(), test_case.name());\n  if (test_case.type_param() == nullptr) {\n    printf(\"\\n\");\n  } else {\n    printf(\", where %s = %s\\n\", kTypeParamLabel, test_case.type_param());\n  }\n  fflush(stdout);\n}\n#else\nvoid PrettyUnitTestResultPrinter::OnTestSuiteStart(\n    const TestSuite& test_suite) {\n  const std::string counts =\n      FormatCountableNoun(test_suite.test_to_run_count(), \"test\", \"tests\");\n  ColoredPrintf(GTestColor::kGreen, \"[----------] \");\n  printf(\"%s from %s\", counts.c_str(), test_suite.name());\n  if (test_suite.type_param() == nullptr) {\n    printf(\"\\n\");\n  } else {\n    printf(\", where %s = %s\\n\", kTypeParamLabel, test_suite.type_param());\n  }\n  fflush(stdout);\n}\n#endif  // GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\nvoid PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) {\n  ColoredPrintf(GTestColor::kGreen, \"[ RUN      ] \");\n  PrintTestName(test_info.test_suite_name(), test_info.name());\n  printf(\"\\n\");\n  fflush(stdout);\n}\n\nvoid PrettyUnitTestResultPrinter::OnTestDisabled(const TestInfo& test_info) {\n  ColoredPrintf(GTestColor::kYellow, \"[ DISABLED ] \");\n  PrintTestName(test_info.test_suite_name(), test_info.name());\n  printf(\"\\n\");\n  fflush(stdout);\n}\n\n// Called after an assertion failure.\nvoid PrettyUnitTestResultPrinter::OnTestPartResult(\n    const TestPartResult& result) {\n  switch (result.type()) {\n    // If the test part succeeded, we don't need to do anything.\n    case TestPartResult::kSuccess:\n      return;\n    default:\n      // Print failure message from the assertion\n      // (e.g. expected this and got that).\n      PrintTestPartResult(result);\n      fflush(stdout);\n  }\n}\n\nvoid PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) {\n  if (test_info.result()->Passed()) {\n    ColoredPrintf(GTestColor::kGreen, \"[       OK ] \");\n  } else if (test_info.result()->Skipped()) {\n    ColoredPrintf(GTestColor::kGreen, \"[  SKIPPED ] \");\n  } else {\n    ColoredPrintf(GTestColor::kRed, \"[  FAILED  ] \");\n  }\n  PrintTestName(test_info.test_suite_name(), test_info.name());\n  if (test_info.result()->Failed()) PrintFullTestCommentIfPresent(test_info);\n\n  if (GTEST_FLAG_GET(print_time)) {\n    printf(\" (%s ms)\\n\",\n           internal::StreamableToString(test_info.result()->elapsed_time())\n               .c_str());\n  } else {\n    printf(\"\\n\");\n  }\n  fflush(stdout);\n}\n\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\nvoid PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) {\n  if (!GTEST_FLAG_GET(print_time)) return;\n\n  const std::string counts =\n      FormatCountableNoun(test_case.test_to_run_count(), \"test\", \"tests\");\n  ColoredPrintf(GTestColor::kGreen, \"[----------] \");\n  printf(\"%s from %s (%s ms total)\\n\\n\", counts.c_str(), test_case.name(),\n         internal::StreamableToString(test_case.elapsed_time()).c_str());\n  fflush(stdout);\n}\n#else\nvoid PrettyUnitTestResultPrinter::OnTestSuiteEnd(const TestSuite& test_suite) {\n  if (!GTEST_FLAG_GET(print_time)) return;\n\n  const std::string counts =\n      FormatCountableNoun(test_suite.test_to_run_count(), \"test\", \"tests\");\n  ColoredPrintf(GTestColor::kGreen, \"[----------] \");\n  printf(\"%s from %s (%s ms total)\\n\\n\", counts.c_str(), test_suite.name(),\n         internal::StreamableToString(test_suite.elapsed_time()).c_str());\n  fflush(stdout);\n}\n#endif  // GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\nvoid PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart(\n    const UnitTest& /*unit_test*/) {\n  ColoredPrintf(GTestColor::kGreen, \"[----------] \");\n  printf(\"Global test environment tear-down\\n\");\n  fflush(stdout);\n}\n\n// Internal helper for printing the list of failed tests.\nvoid PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) {\n  const int failed_test_count = unit_test.failed_test_count();\n  ColoredPrintf(GTestColor::kRed, \"[  FAILED  ] \");\n  printf(\"%s, listed below:\\n\", FormatTestCount(failed_test_count).c_str());\n\n  for (int i = 0; i < unit_test.total_test_suite_count(); ++i) {\n    const TestSuite& test_suite = *unit_test.GetTestSuite(i);\n    if (!test_suite.should_run() || (test_suite.failed_test_count() == 0)) {\n      continue;\n    }\n    for (int j = 0; j < test_suite.total_test_count(); ++j) {\n      const TestInfo& test_info = *test_suite.GetTestInfo(j);\n      if (!test_info.should_run() || !test_info.result()->Failed()) {\n        continue;\n      }\n      ColoredPrintf(GTestColor::kRed, \"[  FAILED  ] \");\n      printf(\"%s.%s\", test_suite.name(), test_info.name());\n      PrintFullTestCommentIfPresent(test_info);\n      printf(\"\\n\");\n    }\n  }\n  printf(\"\\n%2d FAILED %s\\n\", failed_test_count,\n         failed_test_count == 1 ? \"TEST\" : \"TESTS\");\n}\n\n// Internal helper for printing the list of test suite failures not covered by\n// PrintFailedTests.\nvoid PrettyUnitTestResultPrinter::PrintFailedTestSuites(\n    const UnitTest& unit_test) {\n  int suite_failure_count = 0;\n  for (int i = 0; i < unit_test.total_test_suite_count(); ++i) {\n    const TestSuite& test_suite = *unit_test.GetTestSuite(i);\n    if (!test_suite.should_run()) {\n      continue;\n    }\n    if (test_suite.ad_hoc_test_result().Failed()) {\n      ColoredPrintf(GTestColor::kRed, \"[  FAILED  ] \");\n      printf(\"%s: SetUpTestSuite or TearDownTestSuite\\n\", test_suite.name());\n      ++suite_failure_count;\n    }\n  }\n  if (suite_failure_count > 0) {\n    printf(\"\\n%2d FAILED TEST %s\\n\", suite_failure_count,\n           suite_failure_count == 1 ? \"SUITE\" : \"SUITES\");\n  }\n}\n\n// Internal helper for printing the list of skipped tests.\nvoid PrettyUnitTestResultPrinter::PrintSkippedTests(const UnitTest& unit_test) {\n  const int skipped_test_count = unit_test.skipped_test_count();\n  if (skipped_test_count == 0) {\n    return;\n  }\n\n  for (int i = 0; i < unit_test.total_test_suite_count(); ++i) {\n    const TestSuite& test_suite = *unit_test.GetTestSuite(i);\n    if (!test_suite.should_run() || (test_suite.skipped_test_count() == 0)) {\n      continue;\n    }\n    for (int j = 0; j < test_suite.total_test_count(); ++j) {\n      const TestInfo& test_info = *test_suite.GetTestInfo(j);\n      if (!test_info.should_run() || !test_info.result()->Skipped()) {\n        continue;\n      }\n      ColoredPrintf(GTestColor::kGreen, \"[  SKIPPED ] \");\n      printf(\"%s.%s\", test_suite.name(), test_info.name());\n      printf(\"\\n\");\n    }\n  }\n}\n\nvoid PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test,\n                                                     int /*iteration*/) {\n  ColoredPrintf(GTestColor::kGreen, \"[==========] \");\n  printf(\"%s from %s ran.\",\n         FormatTestCount(unit_test.test_to_run_count()).c_str(),\n         FormatTestSuiteCount(unit_test.test_suite_to_run_count()).c_str());\n  if (GTEST_FLAG_GET(print_time)) {\n    printf(\" (%s ms total)\",\n           internal::StreamableToString(unit_test.elapsed_time()).c_str());\n  }\n  printf(\"\\n\");\n  ColoredPrintf(GTestColor::kGreen, \"[  PASSED  ] \");\n  printf(\"%s.\\n\", FormatTestCount(unit_test.successful_test_count()).c_str());\n\n  const int skipped_test_count = unit_test.skipped_test_count();\n  if (skipped_test_count > 0) {\n    ColoredPrintf(GTestColor::kGreen, \"[  SKIPPED ] \");\n    printf(\"%s, listed below:\\n\", FormatTestCount(skipped_test_count).c_str());\n    PrintSkippedTests(unit_test);\n  }\n\n  if (!unit_test.Passed()) {\n    PrintFailedTests(unit_test);\n    PrintFailedTestSuites(unit_test);\n  }\n\n  int num_disabled = unit_test.reportable_disabled_test_count();\n  if (num_disabled && !GTEST_FLAG_GET(also_run_disabled_tests)) {\n    if (unit_test.Passed()) {\n      printf(\"\\n\");  // Add a spacer if no FAILURE banner is displayed.\n    }\n    ColoredPrintf(GTestColor::kYellow, \"  YOU HAVE %d DISABLED %s\\n\\n\",\n                  num_disabled, num_disabled == 1 ? \"TEST\" : \"TESTS\");\n  }\n  // Ensure that Google Test output is printed before, e.g., heapchecker output.\n  fflush(stdout);\n}\n\n// End PrettyUnitTestResultPrinter\n\n// This class implements the TestEventListener interface.\n//\n// Class BriefUnitTestResultPrinter is copyable.\nclass BriefUnitTestResultPrinter : public TestEventListener {\n public:\n  BriefUnitTestResultPrinter() {}\n  static void PrintTestName(const char* test_suite, const char* test) {\n    printf(\"%s.%s\", test_suite, test);\n  }\n\n  // The following methods override what's in the TestEventListener class.\n  void OnTestProgramStart(const UnitTest& /*unit_test*/) override {}\n  void OnTestIterationStart(const UnitTest& /*unit_test*/,\n                            int /*iteration*/) override {}\n  void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) override {}\n  void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) override {}\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  void OnTestCaseStart(const TestCase& /*test_case*/) override {}\n#else\n  void OnTestSuiteStart(const TestSuite& /*test_suite*/) override {}\n#endif  // OnTestCaseStart\n\n  void OnTestStart(const TestInfo& /*test_info*/) override {}\n  void OnTestDisabled(const TestInfo& /*test_info*/) override {}\n\n  void OnTestPartResult(const TestPartResult& result) override;\n  void OnTestEnd(const TestInfo& test_info) override;\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  void OnTestCaseEnd(const TestCase& /*test_case*/) override {}\n#else\n  void OnTestSuiteEnd(const TestSuite& /*test_suite*/) override {}\n#endif  // GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n  void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) override {}\n  void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) override {}\n  void OnTestIterationEnd(const UnitTest& unit_test, int iteration) override;\n  void OnTestProgramEnd(const UnitTest& /*unit_test*/) override {}\n};\n\n// Called after an assertion failure.\nvoid BriefUnitTestResultPrinter::OnTestPartResult(\n    const TestPartResult& result) {\n  switch (result.type()) {\n    // If the test part succeeded, we don't need to do anything.\n    case TestPartResult::kSuccess:\n      return;\n    default:\n      // Print failure message from the assertion\n      // (e.g. expected this and got that).\n      PrintTestPartResult(result);\n      fflush(stdout);\n  }\n}\n\nvoid BriefUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) {\n  if (test_info.result()->Failed()) {\n    ColoredPrintf(GTestColor::kRed, \"[  FAILED  ] \");\n    PrintTestName(test_info.test_suite_name(), test_info.name());\n    PrintFullTestCommentIfPresent(test_info);\n\n    if (GTEST_FLAG_GET(print_time)) {\n      printf(\" (%s ms)\\n\",\n             internal::StreamableToString(test_info.result()->elapsed_time())\n                 .c_str());\n    } else {\n      printf(\"\\n\");\n    }\n    fflush(stdout);\n  }\n}\n\nvoid BriefUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test,\n                                                    int /*iteration*/) {\n  ColoredPrintf(GTestColor::kGreen, \"[==========] \");\n  printf(\"%s from %s ran.\",\n         FormatTestCount(unit_test.test_to_run_count()).c_str(),\n         FormatTestSuiteCount(unit_test.test_suite_to_run_count()).c_str());\n  if (GTEST_FLAG_GET(print_time)) {\n    printf(\" (%s ms total)\",\n           internal::StreamableToString(unit_test.elapsed_time()).c_str());\n  }\n  printf(\"\\n\");\n  ColoredPrintf(GTestColor::kGreen, \"[  PASSED  ] \");\n  printf(\"%s.\\n\", FormatTestCount(unit_test.successful_test_count()).c_str());\n\n  const int skipped_test_count = unit_test.skipped_test_count();\n  if (skipped_test_count > 0) {\n    ColoredPrintf(GTestColor::kGreen, \"[  SKIPPED ] \");\n    printf(\"%s.\\n\", FormatTestCount(skipped_test_count).c_str());\n  }\n\n  int num_disabled = unit_test.reportable_disabled_test_count();\n  if (num_disabled && !GTEST_FLAG_GET(also_run_disabled_tests)) {\n    if (unit_test.Passed()) {\n      printf(\"\\n\");  // Add a spacer if no FAILURE banner is displayed.\n    }\n    ColoredPrintf(GTestColor::kYellow, \"  YOU HAVE %d DISABLED %s\\n\\n\",\n                  num_disabled, num_disabled == 1 ? \"TEST\" : \"TESTS\");\n  }\n  // Ensure that Google Test output is printed before, e.g., heapchecker output.\n  fflush(stdout);\n}\n\n// End BriefUnitTestResultPrinter\n\n// class TestEventRepeater\n//\n// This class forwards events to other event listeners.\nclass TestEventRepeater : public TestEventListener {\n public:\n  TestEventRepeater() : forwarding_enabled_(true) {}\n  ~TestEventRepeater() override;\n  void Append(TestEventListener* listener);\n  TestEventListener* Release(TestEventListener* listener);\n\n  // Controls whether events will be forwarded to listeners_. Set to false\n  // in death test child processes.\n  bool forwarding_enabled() const { return forwarding_enabled_; }\n  void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; }\n\n  void OnTestProgramStart(const UnitTest& unit_test) override;\n  void OnTestIterationStart(const UnitTest& unit_test, int iteration) override;\n  void OnEnvironmentsSetUpStart(const UnitTest& unit_test) override;\n  void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) override;\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  void OnTestCaseStart(const TestSuite& parameter) override;\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  void OnTestSuiteStart(const TestSuite& parameter) override;\n  void OnTestStart(const TestInfo& test_info) override;\n  void OnTestDisabled(const TestInfo& test_info) override;\n  void OnTestPartResult(const TestPartResult& result) override;\n  void OnTestEnd(const TestInfo& test_info) override;\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  void OnTestCaseEnd(const TestCase& parameter) override;\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n  void OnTestSuiteEnd(const TestSuite& parameter) override;\n  void OnEnvironmentsTearDownStart(const UnitTest& unit_test) override;\n  void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) override;\n  void OnTestIterationEnd(const UnitTest& unit_test, int iteration) override;\n  void OnTestProgramEnd(const UnitTest& unit_test) override;\n\n private:\n  // Controls whether events will be forwarded to listeners_. Set to false\n  // in death test child processes.\n  bool forwarding_enabled_;\n  // The list of listeners that receive events.\n  std::vector<TestEventListener*> listeners_;\n\n  TestEventRepeater(const TestEventRepeater&) = delete;\n  TestEventRepeater& operator=(const TestEventRepeater&) = delete;\n};\n\nTestEventRepeater::~TestEventRepeater() {\n  ForEach(listeners_, Delete<TestEventListener>);\n}\n\nvoid TestEventRepeater::Append(TestEventListener* listener) {\n  listeners_.push_back(listener);\n}\n\nTestEventListener* TestEventRepeater::Release(TestEventListener* listener) {\n  for (size_t i = 0; i < listeners_.size(); ++i) {\n    if (listeners_[i] == listener) {\n      listeners_.erase(listeners_.begin() + static_cast<int>(i));\n      return listener;\n    }\n  }\n\n  return nullptr;\n}\n\n// Since most methods are very similar, use macros to reduce boilerplate.\n// This defines a member that forwards the call to all listeners.\n#define GTEST_REPEATER_METHOD_(Name, Type)              \\\n  void TestEventRepeater::Name(const Type& parameter) { \\\n    if (forwarding_enabled_) {                          \\\n      for (size_t i = 0; i < listeners_.size(); i++) {  \\\n        listeners_[i]->Name(parameter);                 \\\n      }                                                 \\\n    }                                                   \\\n  }\n// This defines a member that forwards the call to all listeners in reverse\n// order.\n#define GTEST_REVERSE_REPEATER_METHOD_(Name, Type)      \\\n  void TestEventRepeater::Name(const Type& parameter) { \\\n    if (forwarding_enabled_) {                          \\\n      for (size_t i = listeners_.size(); i != 0; i--) { \\\n        listeners_[i - 1]->Name(parameter);             \\\n      }                                                 \\\n    }                                                   \\\n  }\n\nGTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest)\nGTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest)\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\nGTEST_REPEATER_METHOD_(OnTestCaseStart, TestSuite)\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\nGTEST_REPEATER_METHOD_(OnTestSuiteStart, TestSuite)\nGTEST_REPEATER_METHOD_(OnTestStart, TestInfo)\nGTEST_REPEATER_METHOD_(OnTestDisabled, TestInfo)\nGTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult)\nGTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest)\nGTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest)\nGTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest)\nGTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo)\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\nGTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestSuite)\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\nGTEST_REVERSE_REPEATER_METHOD_(OnTestSuiteEnd, TestSuite)\nGTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest)\n\n#undef GTEST_REPEATER_METHOD_\n#undef GTEST_REVERSE_REPEATER_METHOD_\n\nvoid TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test,\n                                             int iteration) {\n  if (forwarding_enabled_) {\n    for (size_t i = 0; i < listeners_.size(); i++) {\n      listeners_[i]->OnTestIterationStart(unit_test, iteration);\n    }\n  }\n}\n\nvoid TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test,\n                                           int iteration) {\n  if (forwarding_enabled_) {\n    for (size_t i = listeners_.size(); i > 0; i--) {\n      listeners_[i - 1]->OnTestIterationEnd(unit_test, iteration);\n    }\n  }\n}\n\n// End TestEventRepeater\n\n// This class generates an XML output file.\nclass XmlUnitTestResultPrinter : public EmptyTestEventListener {\n public:\n  explicit XmlUnitTestResultPrinter(const char* output_file);\n\n  void OnTestIterationEnd(const UnitTest& unit_test, int iteration) override;\n  void ListTestsMatchingFilter(const std::vector<TestSuite*>& test_suites);\n\n  // Prints an XML summary of all unit tests.\n  static void PrintXmlTestsList(std::ostream* stream,\n                                const std::vector<TestSuite*>& test_suites);\n\n private:\n  // Is c a whitespace character that is normalized to a space character\n  // when it appears in an XML attribute value?\n  static bool IsNormalizableWhitespace(unsigned char c) {\n    return c == '\\t' || c == '\\n' || c == '\\r';\n  }\n\n  // May c appear in a well-formed XML document?\n  // https://www.w3.org/TR/REC-xml/#charsets\n  static bool IsValidXmlCharacter(unsigned char c) {\n    return IsNormalizableWhitespace(c) || c >= 0x20;\n  }\n\n  // Returns an XML-escaped copy of the input string str.  If\n  // is_attribute is true, the text is meant to appear as an attribute\n  // value, and normalizable whitespace is preserved by replacing it\n  // with character references.\n  static std::string EscapeXml(const std::string& str, bool is_attribute);\n\n  // Returns the given string with all characters invalid in XML removed.\n  static std::string RemoveInvalidXmlCharacters(const std::string& str);\n\n  // Convenience wrapper around EscapeXml when str is an attribute value.\n  static std::string EscapeXmlAttribute(const std::string& str) {\n    return EscapeXml(str, true);\n  }\n\n  // Convenience wrapper around EscapeXml when str is not an attribute value.\n  static std::string EscapeXmlText(const char* str) {\n    return EscapeXml(str, false);\n  }\n\n  // Verifies that the given attribute belongs to the given element and\n  // streams the attribute as XML.\n  static void OutputXmlAttribute(std::ostream* stream,\n                                 const std::string& element_name,\n                                 const std::string& name,\n                                 const std::string& value);\n\n  // Streams an XML CDATA section, escaping invalid CDATA sequences as needed.\n  static void OutputXmlCDataSection(::std::ostream* stream, const char* data);\n\n  // Streams a test suite XML stanza containing the given test result.\n  //\n  // Requires: result.Failed()\n  static void OutputXmlTestSuiteForTestResult(::std::ostream* stream,\n                                              const TestResult& result);\n\n  // Streams an XML representation of a TestResult object.\n  static void OutputXmlTestResult(::std::ostream* stream,\n                                  const TestResult& result);\n\n  // Streams an XML representation of a TestInfo object.\n  static void OutputXmlTestInfo(::std::ostream* stream,\n                                const char* test_suite_name,\n                                const TestInfo& test_info);\n\n  // Prints an XML representation of a TestSuite object\n  static void PrintXmlTestSuite(::std::ostream* stream,\n                                const TestSuite& test_suite);\n\n  // Prints an XML summary of unit_test to output stream out.\n  static void PrintXmlUnitTest(::std::ostream* stream,\n                               const UnitTest& unit_test);\n\n  // Produces a string representing the test properties in a result as space\n  // delimited XML attributes based on the property key=\"value\" pairs.\n  // When the std::string is not empty, it includes a space at the beginning,\n  // to delimit this attribute from prior attributes.\n  static std::string TestPropertiesAsXmlAttributes(const TestResult& result);\n\n  // Streams an XML representation of the test properties of a TestResult\n  // object.\n  static void OutputXmlTestProperties(std::ostream* stream,\n                                      const TestResult& result);\n\n  // The output file.\n  const std::string output_file_;\n\n  XmlUnitTestResultPrinter(const XmlUnitTestResultPrinter&) = delete;\n  XmlUnitTestResultPrinter& operator=(const XmlUnitTestResultPrinter&) = delete;\n};\n\n// Creates a new XmlUnitTestResultPrinter.\nXmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file)\n    : output_file_(output_file) {\n  if (output_file_.empty()) {\n    GTEST_LOG_(FATAL) << \"XML output file may not be null\";\n  }\n}\n\n// Called after the unit test ends.\nvoid XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test,\n                                                  int /*iteration*/) {\n  FILE* xmlout = OpenFileForWriting(output_file_);\n  std::stringstream stream;\n  PrintXmlUnitTest(&stream, unit_test);\n  fprintf(xmlout, \"%s\", StringStreamToString(&stream).c_str());\n  fclose(xmlout);\n}\n\nvoid XmlUnitTestResultPrinter::ListTestsMatchingFilter(\n    const std::vector<TestSuite*>& test_suites) {\n  FILE* xmlout = OpenFileForWriting(output_file_);\n  std::stringstream stream;\n  PrintXmlTestsList(&stream, test_suites);\n  fprintf(xmlout, \"%s\", StringStreamToString(&stream).c_str());\n  fclose(xmlout);\n}\n\n// Returns an XML-escaped copy of the input string str.  If is_attribute\n// is true, the text is meant to appear as an attribute value, and\n// normalizable whitespace is preserved by replacing it with character\n// references.\n//\n// Invalid XML characters in str, if any, are stripped from the output.\n// It is expected that most, if not all, of the text processed by this\n// module will consist of ordinary English text.\n// If this module is ever modified to produce version 1.1 XML output,\n// most invalid characters can be retained using character references.\nstd::string XmlUnitTestResultPrinter::EscapeXml(const std::string& str,\n                                                bool is_attribute) {\n  Message m;\n\n  for (size_t i = 0; i < str.size(); ++i) {\n    const char ch = str[i];\n    switch (ch) {\n      case '<':\n        m << \"&lt;\";\n        break;\n      case '>':\n        m << \"&gt;\";\n        break;\n      case '&':\n        m << \"&amp;\";\n        break;\n      case '\\'':\n        if (is_attribute)\n          m << \"&apos;\";\n        else\n          m << '\\'';\n        break;\n      case '\"':\n        if (is_attribute)\n          m << \"&quot;\";\n        else\n          m << '\"';\n        break;\n      default:\n        if (IsValidXmlCharacter(static_cast<unsigned char>(ch))) {\n          if (is_attribute &&\n              IsNormalizableWhitespace(static_cast<unsigned char>(ch)))\n            m << \"&#x\" << String::FormatByte(static_cast<unsigned char>(ch))\n              << \";\";\n          else\n            m << ch;\n        }\n        break;\n    }\n  }\n\n  return m.GetString();\n}\n\n// Returns the given string with all characters invalid in XML removed.\n// Currently invalid characters are dropped from the string. An\n// alternative is to replace them with certain characters such as . or ?.\nstd::string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters(\n    const std::string& str) {\n  std::string output;\n  output.reserve(str.size());\n  for (std::string::const_iterator it = str.begin(); it != str.end(); ++it)\n    if (IsValidXmlCharacter(static_cast<unsigned char>(*it)))\n      output.push_back(*it);\n\n  return output;\n}\n\n// The following routines generate an XML representation of a UnitTest\n// object.\n//\n// This is how Google Test concepts map to the DTD:\n//\n// <testsuites name=\"AllTests\">        <-- corresponds to a UnitTest object\n//   <testsuite name=\"testcase-name\">  <-- corresponds to a TestSuite object\n//     <testcase name=\"test-name\">     <-- corresponds to a TestInfo object\n//       <failure message=\"...\">...</failure>\n//       <failure message=\"...\">...</failure>\n//       <failure message=\"...\">...</failure>\n//                                     <-- individual assertion failures\n//     </testcase>\n//   </testsuite>\n// </testsuites>\n\n// Formats the given time in milliseconds as seconds.\nstd::string FormatTimeInMillisAsSeconds(TimeInMillis ms) {\n  ::std::stringstream ss;\n  ss << (static_cast<double>(ms) * 1e-3);\n  return ss.str();\n}\n\nstatic bool PortableLocaltime(time_t seconds, struct tm* out) {\n#if defined(_MSC_VER)\n  return localtime_s(out, &seconds) == 0;\n#elif defined(__MINGW32__) || defined(__MINGW64__)\n  // MINGW <time.h> provides neither localtime_r nor localtime_s, but uses\n  // Windows' localtime(), which has a thread-local tm buffer.\n  struct tm* tm_ptr = localtime(&seconds);  // NOLINT\n  if (tm_ptr == nullptr) return false;\n  *out = *tm_ptr;\n  return true;\n#elif defined(__STDC_LIB_EXT1__)\n  // Uses localtime_s when available as localtime_r is only available from\n  // C23 standard.\n  return localtime_s(&seconds, out) != nullptr;\n#else\n  return localtime_r(&seconds, out) != nullptr;\n#endif\n}\n\n// Converts the given epoch time in milliseconds to a date string in the ISO\n// 8601 format, without the timezone information.\nstd::string FormatEpochTimeInMillisAsIso8601(TimeInMillis ms) {\n  struct tm time_struct;\n  if (!PortableLocaltime(static_cast<time_t>(ms / 1000), &time_struct))\n    return \"\";\n  // YYYY-MM-DDThh:mm:ss.sss\n  return StreamableToString(time_struct.tm_year + 1900) + \"-\" +\n         String::FormatIntWidth2(time_struct.tm_mon + 1) + \"-\" +\n         String::FormatIntWidth2(time_struct.tm_mday) + \"T\" +\n         String::FormatIntWidth2(time_struct.tm_hour) + \":\" +\n         String::FormatIntWidth2(time_struct.tm_min) + \":\" +\n         String::FormatIntWidth2(time_struct.tm_sec) + \".\" +\n         String::FormatIntWidthN(static_cast<int>(ms % 1000), 3);\n}\n\n// Streams an XML CDATA section, escaping invalid CDATA sequences as needed.\nvoid XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream,\n                                                     const char* data) {\n  const char* segment = data;\n  *stream << \"<![CDATA[\";\n  for (;;) {\n    const char* const next_segment = strstr(segment, \"]]>\");\n    if (next_segment != nullptr) {\n      stream->write(segment,\n                    static_cast<std::streamsize>(next_segment - segment));\n      *stream << \"]]>]]&gt;<![CDATA[\";\n      segment = next_segment + strlen(\"]]>\");\n    } else {\n      *stream << segment;\n      break;\n    }\n  }\n  *stream << \"]]>\";\n}\n\nvoid XmlUnitTestResultPrinter::OutputXmlAttribute(\n    std::ostream* stream, const std::string& element_name,\n    const std::string& name, const std::string& value) {\n  const std::vector<std::string>& allowed_names =\n      GetReservedOutputAttributesForElement(element_name);\n\n  GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) !=\n               allowed_names.end())\n      << \"Attribute \" << name << \" is not allowed for element <\" << element_name\n      << \">.\";\n\n  *stream << \" \" << name << \"=\\\"\" << EscapeXmlAttribute(value) << \"\\\"\";\n}\n\n// Streams a test suite XML stanza containing the given test result.\nvoid XmlUnitTestResultPrinter::OutputXmlTestSuiteForTestResult(\n    ::std::ostream* stream, const TestResult& result) {\n  // Output the boilerplate for a minimal test suite with one test.\n  *stream << \"  <testsuite\";\n  OutputXmlAttribute(stream, \"testsuite\", \"name\", \"NonTestSuiteFailure\");\n  OutputXmlAttribute(stream, \"testsuite\", \"tests\", \"1\");\n  OutputXmlAttribute(stream, \"testsuite\", \"failures\", \"1\");\n  OutputXmlAttribute(stream, \"testsuite\", \"disabled\", \"0\");\n  OutputXmlAttribute(stream, \"testsuite\", \"skipped\", \"0\");\n  OutputXmlAttribute(stream, \"testsuite\", \"errors\", \"0\");\n  OutputXmlAttribute(stream, \"testsuite\", \"time\",\n                     FormatTimeInMillisAsSeconds(result.elapsed_time()));\n  OutputXmlAttribute(\n      stream, \"testsuite\", \"timestamp\",\n      FormatEpochTimeInMillisAsIso8601(result.start_timestamp()));\n  *stream << \">\";\n\n  // Output the boilerplate for a minimal test case with a single test.\n  *stream << \"    <testcase\";\n  OutputXmlAttribute(stream, \"testcase\", \"name\", \"\");\n  OutputXmlAttribute(stream, \"testcase\", \"status\", \"run\");\n  OutputXmlAttribute(stream, \"testcase\", \"result\", \"completed\");\n  OutputXmlAttribute(stream, \"testcase\", \"classname\", \"\");\n  OutputXmlAttribute(stream, \"testcase\", \"time\",\n                     FormatTimeInMillisAsSeconds(result.elapsed_time()));\n  OutputXmlAttribute(\n      stream, \"testcase\", \"timestamp\",\n      FormatEpochTimeInMillisAsIso8601(result.start_timestamp()));\n\n  // Output the actual test result.\n  OutputXmlTestResult(stream, result);\n\n  // Complete the test suite.\n  *stream << \"  </testsuite>\\n\";\n}\n\n// Prints an XML representation of a TestInfo object.\nvoid XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,\n                                                 const char* test_suite_name,\n                                                 const TestInfo& test_info) {\n  const TestResult& result = *test_info.result();\n  const std::string kTestsuite = \"testcase\";\n\n  if (test_info.is_in_another_shard()) {\n    return;\n  }\n\n  *stream << \"    <testcase\";\n  OutputXmlAttribute(stream, kTestsuite, \"name\", test_info.name());\n\n  if (test_info.value_param() != nullptr) {\n    OutputXmlAttribute(stream, kTestsuite, \"value_param\",\n                       test_info.value_param());\n  }\n  if (test_info.type_param() != nullptr) {\n    OutputXmlAttribute(stream, kTestsuite, \"type_param\",\n                       test_info.type_param());\n  }\n\n  OutputXmlAttribute(stream, kTestsuite, \"file\", test_info.file());\n  OutputXmlAttribute(stream, kTestsuite, \"line\",\n                     StreamableToString(test_info.line()));\n  if (GTEST_FLAG_GET(list_tests)) {\n    *stream << \" />\\n\";\n    return;\n  }\n\n  OutputXmlAttribute(stream, kTestsuite, \"status\",\n                     test_info.should_run() ? \"run\" : \"notrun\");\n  OutputXmlAttribute(stream, kTestsuite, \"result\",\n                     test_info.should_run()\n                         ? (result.Skipped() ? \"skipped\" : \"completed\")\n                         : \"suppressed\");\n  OutputXmlAttribute(stream, kTestsuite, \"time\",\n                     FormatTimeInMillisAsSeconds(result.elapsed_time()));\n  OutputXmlAttribute(\n      stream, kTestsuite, \"timestamp\",\n      FormatEpochTimeInMillisAsIso8601(result.start_timestamp()));\n  OutputXmlAttribute(stream, kTestsuite, \"classname\", test_suite_name);\n\n  OutputXmlTestResult(stream, result);\n}\n\nvoid XmlUnitTestResultPrinter::OutputXmlTestResult(::std::ostream* stream,\n                                                   const TestResult& result) {\n  int failures = 0;\n  int skips = 0;\n  for (int i = 0; i < result.total_part_count(); ++i) {\n    const TestPartResult& part = result.GetTestPartResult(i);\n    if (part.failed()) {\n      if (++failures == 1 && skips == 0) {\n        *stream << \">\\n\";\n      }\n      const std::string location =\n          internal::FormatCompilerIndependentFileLocation(part.file_name(),\n                                                          part.line_number());\n      const std::string summary = location + \"\\n\" + part.summary();\n      *stream << \"      <failure message=\\\"\" << EscapeXmlAttribute(summary)\n              << \"\\\" type=\\\"\\\">\";\n      const std::string detail = location + \"\\n\" + part.message();\n      OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str());\n      *stream << \"</failure>\\n\";\n    } else if (part.skipped()) {\n      if (++skips == 1 && failures == 0) {\n        *stream << \">\\n\";\n      }\n      const std::string location =\n          internal::FormatCompilerIndependentFileLocation(part.file_name(),\n                                                          part.line_number());\n      const std::string summary = location + \"\\n\" + part.summary();\n      *stream << \"      <skipped message=\\\"\"\n              << EscapeXmlAttribute(summary.c_str()) << \"\\\">\";\n      const std::string detail = location + \"\\n\" + part.message();\n      OutputXmlCDataSection(stream, RemoveInvalidXmlCharacters(detail).c_str());\n      *stream << \"</skipped>\\n\";\n    }\n  }\n\n  if (failures == 0 && skips == 0 && result.test_property_count() == 0) {\n    *stream << \" />\\n\";\n  } else {\n    if (failures == 0 && skips == 0) {\n      *stream << \">\\n\";\n    }\n    OutputXmlTestProperties(stream, result);\n    *stream << \"    </testcase>\\n\";\n  }\n}\n\n// Prints an XML representation of a TestSuite object\nvoid XmlUnitTestResultPrinter::PrintXmlTestSuite(std::ostream* stream,\n                                                 const TestSuite& test_suite) {\n  const std::string kTestsuite = \"testsuite\";\n  *stream << \"  <\" << kTestsuite;\n  OutputXmlAttribute(stream, kTestsuite, \"name\", test_suite.name());\n  OutputXmlAttribute(stream, kTestsuite, \"tests\",\n                     StreamableToString(test_suite.reportable_test_count()));\n  if (!GTEST_FLAG_GET(list_tests)) {\n    OutputXmlAttribute(stream, kTestsuite, \"failures\",\n                       StreamableToString(test_suite.failed_test_count()));\n    OutputXmlAttribute(\n        stream, kTestsuite, \"disabled\",\n        StreamableToString(test_suite.reportable_disabled_test_count()));\n    OutputXmlAttribute(stream, kTestsuite, \"skipped\",\n                       StreamableToString(test_suite.skipped_test_count()));\n\n    OutputXmlAttribute(stream, kTestsuite, \"errors\", \"0\");\n\n    OutputXmlAttribute(stream, kTestsuite, \"time\",\n                       FormatTimeInMillisAsSeconds(test_suite.elapsed_time()));\n    OutputXmlAttribute(\n        stream, kTestsuite, \"timestamp\",\n        FormatEpochTimeInMillisAsIso8601(test_suite.start_timestamp()));\n    *stream << TestPropertiesAsXmlAttributes(test_suite.ad_hoc_test_result());\n  }\n  *stream << \">\\n\";\n  for (int i = 0; i < test_suite.total_test_count(); ++i) {\n    if (test_suite.GetTestInfo(i)->is_reportable())\n      OutputXmlTestInfo(stream, test_suite.name(), *test_suite.GetTestInfo(i));\n  }\n  *stream << \"  </\" << kTestsuite << \">\\n\";\n}\n\n// Prints an XML summary of unit_test to output stream out.\nvoid XmlUnitTestResultPrinter::PrintXmlUnitTest(std::ostream* stream,\n                                                const UnitTest& unit_test) {\n  const std::string kTestsuites = \"testsuites\";\n\n  *stream << \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\";\n  *stream << \"<\" << kTestsuites;\n\n  OutputXmlAttribute(stream, kTestsuites, \"tests\",\n                     StreamableToString(unit_test.reportable_test_count()));\n  OutputXmlAttribute(stream, kTestsuites, \"failures\",\n                     StreamableToString(unit_test.failed_test_count()));\n  OutputXmlAttribute(\n      stream, kTestsuites, \"disabled\",\n      StreamableToString(unit_test.reportable_disabled_test_count()));\n  OutputXmlAttribute(stream, kTestsuites, \"errors\", \"0\");\n  OutputXmlAttribute(stream, kTestsuites, \"time\",\n                     FormatTimeInMillisAsSeconds(unit_test.elapsed_time()));\n  OutputXmlAttribute(\n      stream, kTestsuites, \"timestamp\",\n      FormatEpochTimeInMillisAsIso8601(unit_test.start_timestamp()));\n\n  if (GTEST_FLAG_GET(shuffle)) {\n    OutputXmlAttribute(stream, kTestsuites, \"random_seed\",\n                       StreamableToString(unit_test.random_seed()));\n  }\n  *stream << TestPropertiesAsXmlAttributes(unit_test.ad_hoc_test_result());\n\n  OutputXmlAttribute(stream, kTestsuites, \"name\", \"AllTests\");\n  *stream << \">\\n\";\n\n  for (int i = 0; i < unit_test.total_test_suite_count(); ++i) {\n    if (unit_test.GetTestSuite(i)->reportable_test_count() > 0)\n      PrintXmlTestSuite(stream, *unit_test.GetTestSuite(i));\n  }\n\n  // If there was a test failure outside of one of the test suites (like in a\n  // test environment) include that in the output.\n  if (unit_test.ad_hoc_test_result().Failed()) {\n    OutputXmlTestSuiteForTestResult(stream, unit_test.ad_hoc_test_result());\n  }\n\n  *stream << \"</\" << kTestsuites << \">\\n\";\n}\n\nvoid XmlUnitTestResultPrinter::PrintXmlTestsList(\n    std::ostream* stream, const std::vector<TestSuite*>& test_suites) {\n  const std::string kTestsuites = \"testsuites\";\n\n  *stream << \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\";\n  *stream << \"<\" << kTestsuites;\n\n  int total_tests = 0;\n  for (auto test_suite : test_suites) {\n    total_tests += test_suite->total_test_count();\n  }\n  OutputXmlAttribute(stream, kTestsuites, \"tests\",\n                     StreamableToString(total_tests));\n  OutputXmlAttribute(stream, kTestsuites, \"name\", \"AllTests\");\n  *stream << \">\\n\";\n\n  for (auto test_suite : test_suites) {\n    PrintXmlTestSuite(stream, *test_suite);\n  }\n  *stream << \"</\" << kTestsuites << \">\\n\";\n}\n\n// Produces a string representing the test properties in a result as space\n// delimited XML attributes based on the property key=\"value\" pairs.\nstd::string XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(\n    const TestResult& result) {\n  Message attributes;\n  for (int i = 0; i < result.test_property_count(); ++i) {\n    const TestProperty& property = result.GetTestProperty(i);\n    attributes << \" \" << property.key() << \"=\"\n               << \"\\\"\" << EscapeXmlAttribute(property.value()) << \"\\\"\";\n  }\n  return attributes.GetString();\n}\n\nvoid XmlUnitTestResultPrinter::OutputXmlTestProperties(\n    std::ostream* stream, const TestResult& result) {\n  const std::string kProperties = \"properties\";\n  const std::string kProperty = \"property\";\n\n  if (result.test_property_count() <= 0) {\n    return;\n  }\n\n  *stream << \"      <\" << kProperties << \">\\n\";\n  for (int i = 0; i < result.test_property_count(); ++i) {\n    const TestProperty& property = result.GetTestProperty(i);\n    *stream << \"        <\" << kProperty;\n    *stream << \" name=\\\"\" << EscapeXmlAttribute(property.key()) << \"\\\"\";\n    *stream << \" value=\\\"\" << EscapeXmlAttribute(property.value()) << \"\\\"\";\n    *stream << \"/>\\n\";\n  }\n  *stream << \"      </\" << kProperties << \">\\n\";\n}\n\n// End XmlUnitTestResultPrinter\n\n// This class generates an JSON output file.\nclass JsonUnitTestResultPrinter : public EmptyTestEventListener {\n public:\n  explicit JsonUnitTestResultPrinter(const char* output_file);\n\n  void OnTestIterationEnd(const UnitTest& unit_test, int iteration) override;\n\n  // Prints an JSON summary of all unit tests.\n  static void PrintJsonTestList(::std::ostream* stream,\n                                const std::vector<TestSuite*>& test_suites);\n\n private:\n  // Returns an JSON-escaped copy of the input string str.\n  static std::string EscapeJson(const std::string& str);\n\n  //// Verifies that the given attribute belongs to the given element and\n  //// streams the attribute as JSON.\n  static void OutputJsonKey(std::ostream* stream,\n                            const std::string& element_name,\n                            const std::string& name, const std::string& value,\n                            const std::string& indent, bool comma = true);\n  static void OutputJsonKey(std::ostream* stream,\n                            const std::string& element_name,\n                            const std::string& name, int value,\n                            const std::string& indent, bool comma = true);\n\n  // Streams a test suite JSON stanza containing the given test result.\n  //\n  // Requires: result.Failed()\n  static void OutputJsonTestSuiteForTestResult(::std::ostream* stream,\n                                               const TestResult& result);\n\n  // Streams a JSON representation of a TestResult object.\n  static void OutputJsonTestResult(::std::ostream* stream,\n                                   const TestResult& result);\n\n  // Streams a JSON representation of a TestInfo object.\n  static void OutputJsonTestInfo(::std::ostream* stream,\n                                 const char* test_suite_name,\n                                 const TestInfo& test_info);\n\n  // Prints a JSON representation of a TestSuite object\n  static void PrintJsonTestSuite(::std::ostream* stream,\n                                 const TestSuite& test_suite);\n\n  // Prints a JSON summary of unit_test to output stream out.\n  static void PrintJsonUnitTest(::std::ostream* stream,\n                                const UnitTest& unit_test);\n\n  // Produces a string representing the test properties in a result as\n  // a JSON dictionary.\n  static std::string TestPropertiesAsJson(const TestResult& result,\n                                          const std::string& indent);\n\n  // The output file.\n  const std::string output_file_;\n\n  JsonUnitTestResultPrinter(const JsonUnitTestResultPrinter&) = delete;\n  JsonUnitTestResultPrinter& operator=(const JsonUnitTestResultPrinter&) =\n      delete;\n};\n\n// Creates a new JsonUnitTestResultPrinter.\nJsonUnitTestResultPrinter::JsonUnitTestResultPrinter(const char* output_file)\n    : output_file_(output_file) {\n  if (output_file_.empty()) {\n    GTEST_LOG_(FATAL) << \"JSON output file may not be null\";\n  }\n}\n\nvoid JsonUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test,\n                                                   int /*iteration*/) {\n  FILE* jsonout = OpenFileForWriting(output_file_);\n  std::stringstream stream;\n  PrintJsonUnitTest(&stream, unit_test);\n  fprintf(jsonout, \"%s\", StringStreamToString(&stream).c_str());\n  fclose(jsonout);\n}\n\n// Returns an JSON-escaped copy of the input string str.\nstd::string JsonUnitTestResultPrinter::EscapeJson(const std::string& str) {\n  Message m;\n\n  for (size_t i = 0; i < str.size(); ++i) {\n    const char ch = str[i];\n    switch (ch) {\n      case '\\\\':\n      case '\"':\n      case '/':\n        m << '\\\\' << ch;\n        break;\n      case '\\b':\n        m << \"\\\\b\";\n        break;\n      case '\\t':\n        m << \"\\\\t\";\n        break;\n      case '\\n':\n        m << \"\\\\n\";\n        break;\n      case '\\f':\n        m << \"\\\\f\";\n        break;\n      case '\\r':\n        m << \"\\\\r\";\n        break;\n      default:\n        if (ch < ' ') {\n          m << \"\\\\u00\" << String::FormatByte(static_cast<unsigned char>(ch));\n        } else {\n          m << ch;\n        }\n        break;\n    }\n  }\n\n  return m.GetString();\n}\n\n// The following routines generate an JSON representation of a UnitTest\n// object.\n\n// Formats the given time in milliseconds as seconds.\nstatic std::string FormatTimeInMillisAsDuration(TimeInMillis ms) {\n  ::std::stringstream ss;\n  ss << (static_cast<double>(ms) * 1e-3) << \"s\";\n  return ss.str();\n}\n\n// Converts the given epoch time in milliseconds to a date string in the\n// RFC3339 format, without the timezone information.\nstatic std::string FormatEpochTimeInMillisAsRFC3339(TimeInMillis ms) {\n  struct tm time_struct;\n  if (!PortableLocaltime(static_cast<time_t>(ms / 1000), &time_struct))\n    return \"\";\n  // YYYY-MM-DDThh:mm:ss\n  return StreamableToString(time_struct.tm_year + 1900) + \"-\" +\n         String::FormatIntWidth2(time_struct.tm_mon + 1) + \"-\" +\n         String::FormatIntWidth2(time_struct.tm_mday) + \"T\" +\n         String::FormatIntWidth2(time_struct.tm_hour) + \":\" +\n         String::FormatIntWidth2(time_struct.tm_min) + \":\" +\n         String::FormatIntWidth2(time_struct.tm_sec) + \"Z\";\n}\n\nstatic inline std::string Indent(size_t width) {\n  return std::string(width, ' ');\n}\n\nvoid JsonUnitTestResultPrinter::OutputJsonKey(std::ostream* stream,\n                                              const std::string& element_name,\n                                              const std::string& name,\n                                              const std::string& value,\n                                              const std::string& indent,\n                                              bool comma) {\n  const std::vector<std::string>& allowed_names =\n      GetReservedOutputAttributesForElement(element_name);\n\n  GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) !=\n               allowed_names.end())\n      << \"Key \\\"\" << name << \"\\\" is not allowed for value \\\"\" << element_name\n      << \"\\\".\";\n\n  *stream << indent << \"\\\"\" << name << \"\\\": \\\"\" << EscapeJson(value) << \"\\\"\";\n  if (comma) *stream << \",\\n\";\n}\n\nvoid JsonUnitTestResultPrinter::OutputJsonKey(\n    std::ostream* stream, const std::string& element_name,\n    const std::string& name, int value, const std::string& indent, bool comma) {\n  const std::vector<std::string>& allowed_names =\n      GetReservedOutputAttributesForElement(element_name);\n\n  GTEST_CHECK_(std::find(allowed_names.begin(), allowed_names.end(), name) !=\n               allowed_names.end())\n      << \"Key \\\"\" << name << \"\\\" is not allowed for value \\\"\" << element_name\n      << \"\\\".\";\n\n  *stream << indent << \"\\\"\" << name << \"\\\": \" << StreamableToString(value);\n  if (comma) *stream << \",\\n\";\n}\n\n// Streams a test suite JSON stanza containing the given test result.\nvoid JsonUnitTestResultPrinter::OutputJsonTestSuiteForTestResult(\n    ::std::ostream* stream, const TestResult& result) {\n  // Output the boilerplate for a new test suite.\n  *stream << Indent(4) << \"{\\n\";\n  OutputJsonKey(stream, \"testsuite\", \"name\", \"NonTestSuiteFailure\", Indent(6));\n  OutputJsonKey(stream, \"testsuite\", \"tests\", 1, Indent(6));\n  if (!GTEST_FLAG_GET(list_tests)) {\n    OutputJsonKey(stream, \"testsuite\", \"failures\", 1, Indent(6));\n    OutputJsonKey(stream, \"testsuite\", \"disabled\", 0, Indent(6));\n    OutputJsonKey(stream, \"testsuite\", \"skipped\", 0, Indent(6));\n    OutputJsonKey(stream, \"testsuite\", \"errors\", 0, Indent(6));\n    OutputJsonKey(stream, \"testsuite\", \"time\",\n                  FormatTimeInMillisAsDuration(result.elapsed_time()),\n                  Indent(6));\n    OutputJsonKey(stream, \"testsuite\", \"timestamp\",\n                  FormatEpochTimeInMillisAsRFC3339(result.start_timestamp()),\n                  Indent(6));\n  }\n  *stream << Indent(6) << \"\\\"testsuite\\\": [\\n\";\n\n  // Output the boilerplate for a new test case.\n  *stream << Indent(8) << \"{\\n\";\n  OutputJsonKey(stream, \"testcase\", \"name\", \"\", Indent(10));\n  OutputJsonKey(stream, \"testcase\", \"status\", \"RUN\", Indent(10));\n  OutputJsonKey(stream, \"testcase\", \"result\", \"COMPLETED\", Indent(10));\n  OutputJsonKey(stream, \"testcase\", \"timestamp\",\n                FormatEpochTimeInMillisAsRFC3339(result.start_timestamp()),\n                Indent(10));\n  OutputJsonKey(stream, \"testcase\", \"time\",\n                FormatTimeInMillisAsDuration(result.elapsed_time()),\n                Indent(10));\n  OutputJsonKey(stream, \"testcase\", \"classname\", \"\", Indent(10), false);\n  *stream << TestPropertiesAsJson(result, Indent(10));\n\n  // Output the actual test result.\n  OutputJsonTestResult(stream, result);\n\n  // Finish the test suite.\n  *stream << \"\\n\" << Indent(6) << \"]\\n\" << Indent(4) << \"}\";\n}\n\n// Prints a JSON representation of a TestInfo object.\nvoid JsonUnitTestResultPrinter::OutputJsonTestInfo(::std::ostream* stream,\n                                                   const char* test_suite_name,\n                                                   const TestInfo& test_info) {\n  const TestResult& result = *test_info.result();\n  const std::string kTestsuite = \"testcase\";\n  const std::string kIndent = Indent(10);\n\n  *stream << Indent(8) << \"{\\n\";\n  OutputJsonKey(stream, kTestsuite, \"name\", test_info.name(), kIndent);\n\n  if (test_info.value_param() != nullptr) {\n    OutputJsonKey(stream, kTestsuite, \"value_param\", test_info.value_param(),\n                  kIndent);\n  }\n  if (test_info.type_param() != nullptr) {\n    OutputJsonKey(stream, kTestsuite, \"type_param\", test_info.type_param(),\n                  kIndent);\n  }\n\n  OutputJsonKey(stream, kTestsuite, \"file\", test_info.file(), kIndent);\n  OutputJsonKey(stream, kTestsuite, \"line\", test_info.line(), kIndent, false);\n  if (GTEST_FLAG_GET(list_tests)) {\n    *stream << \"\\n\" << Indent(8) << \"}\";\n    return;\n  } else {\n    *stream << \",\\n\";\n  }\n\n  OutputJsonKey(stream, kTestsuite, \"status\",\n                test_info.should_run() ? \"RUN\" : \"NOTRUN\", kIndent);\n  OutputJsonKey(stream, kTestsuite, \"result\",\n                test_info.should_run()\n                    ? (result.Skipped() ? \"SKIPPED\" : \"COMPLETED\")\n                    : \"SUPPRESSED\",\n                kIndent);\n  OutputJsonKey(stream, kTestsuite, \"timestamp\",\n                FormatEpochTimeInMillisAsRFC3339(result.start_timestamp()),\n                kIndent);\n  OutputJsonKey(stream, kTestsuite, \"time\",\n                FormatTimeInMillisAsDuration(result.elapsed_time()), kIndent);\n  OutputJsonKey(stream, kTestsuite, \"classname\", test_suite_name, kIndent,\n                false);\n  *stream << TestPropertiesAsJson(result, kIndent);\n\n  OutputJsonTestResult(stream, result);\n}\n\nvoid JsonUnitTestResultPrinter::OutputJsonTestResult(::std::ostream* stream,\n                                                     const TestResult& result) {\n  const std::string kIndent = Indent(10);\n\n  int failures = 0;\n  for (int i = 0; i < result.total_part_count(); ++i) {\n    const TestPartResult& part = result.GetTestPartResult(i);\n    if (part.failed()) {\n      *stream << \",\\n\";\n      if (++failures == 1) {\n        *stream << kIndent << \"\\\"\"\n                << \"failures\"\n                << \"\\\": [\\n\";\n      }\n      const std::string location =\n          internal::FormatCompilerIndependentFileLocation(part.file_name(),\n                                                          part.line_number());\n      const std::string message = EscapeJson(location + \"\\n\" + part.message());\n      *stream << kIndent << \"  {\\n\"\n              << kIndent << \"    \\\"failure\\\": \\\"\" << message << \"\\\",\\n\"\n              << kIndent << \"    \\\"type\\\": \\\"\\\"\\n\"\n              << kIndent << \"  }\";\n    }\n  }\n\n  if (failures > 0) *stream << \"\\n\" << kIndent << \"]\";\n  *stream << \"\\n\" << Indent(8) << \"}\";\n}\n\n// Prints an JSON representation of a TestSuite object\nvoid JsonUnitTestResultPrinter::PrintJsonTestSuite(\n    std::ostream* stream, const TestSuite& test_suite) {\n  const std::string kTestsuite = \"testsuite\";\n  const std::string kIndent = Indent(6);\n\n  *stream << Indent(4) << \"{\\n\";\n  OutputJsonKey(stream, kTestsuite, \"name\", test_suite.name(), kIndent);\n  OutputJsonKey(stream, kTestsuite, \"tests\", test_suite.reportable_test_count(),\n                kIndent);\n  if (!GTEST_FLAG_GET(list_tests)) {\n    OutputJsonKey(stream, kTestsuite, \"failures\",\n                  test_suite.failed_test_count(), kIndent);\n    OutputJsonKey(stream, kTestsuite, \"disabled\",\n                  test_suite.reportable_disabled_test_count(), kIndent);\n    OutputJsonKey(stream, kTestsuite, \"errors\", 0, kIndent);\n    OutputJsonKey(\n        stream, kTestsuite, \"timestamp\",\n        FormatEpochTimeInMillisAsRFC3339(test_suite.start_timestamp()),\n        kIndent);\n    OutputJsonKey(stream, kTestsuite, \"time\",\n                  FormatTimeInMillisAsDuration(test_suite.elapsed_time()),\n                  kIndent, false);\n    *stream << TestPropertiesAsJson(test_suite.ad_hoc_test_result(), kIndent)\n            << \",\\n\";\n  }\n\n  *stream << kIndent << \"\\\"\" << kTestsuite << \"\\\": [\\n\";\n\n  bool comma = false;\n  for (int i = 0; i < test_suite.total_test_count(); ++i) {\n    if (test_suite.GetTestInfo(i)->is_reportable()) {\n      if (comma) {\n        *stream << \",\\n\";\n      } else {\n        comma = true;\n      }\n      OutputJsonTestInfo(stream, test_suite.name(), *test_suite.GetTestInfo(i));\n    }\n  }\n  *stream << \"\\n\" << kIndent << \"]\\n\" << Indent(4) << \"}\";\n}\n\n// Prints a JSON summary of unit_test to output stream out.\nvoid JsonUnitTestResultPrinter::PrintJsonUnitTest(std::ostream* stream,\n                                                  const UnitTest& unit_test) {\n  const std::string kTestsuites = \"testsuites\";\n  const std::string kIndent = Indent(2);\n  *stream << \"{\\n\";\n\n  OutputJsonKey(stream, kTestsuites, \"tests\", unit_test.reportable_test_count(),\n                kIndent);\n  OutputJsonKey(stream, kTestsuites, \"failures\", unit_test.failed_test_count(),\n                kIndent);\n  OutputJsonKey(stream, kTestsuites, \"disabled\",\n                unit_test.reportable_disabled_test_count(), kIndent);\n  OutputJsonKey(stream, kTestsuites, \"errors\", 0, kIndent);\n  if (GTEST_FLAG_GET(shuffle)) {\n    OutputJsonKey(stream, kTestsuites, \"random_seed\", unit_test.random_seed(),\n                  kIndent);\n  }\n  OutputJsonKey(stream, kTestsuites, \"timestamp\",\n                FormatEpochTimeInMillisAsRFC3339(unit_test.start_timestamp()),\n                kIndent);\n  OutputJsonKey(stream, kTestsuites, \"time\",\n                FormatTimeInMillisAsDuration(unit_test.elapsed_time()), kIndent,\n                false);\n\n  *stream << TestPropertiesAsJson(unit_test.ad_hoc_test_result(), kIndent)\n          << \",\\n\";\n\n  OutputJsonKey(stream, kTestsuites, \"name\", \"AllTests\", kIndent);\n  *stream << kIndent << \"\\\"\" << kTestsuites << \"\\\": [\\n\";\n\n  bool comma = false;\n  for (int i = 0; i < unit_test.total_test_suite_count(); ++i) {\n    if (unit_test.GetTestSuite(i)->reportable_test_count() > 0) {\n      if (comma) {\n        *stream << \",\\n\";\n      } else {\n        comma = true;\n      }\n      PrintJsonTestSuite(stream, *unit_test.GetTestSuite(i));\n    }\n  }\n\n  // If there was a test failure outside of one of the test suites (like in a\n  // test environment) include that in the output.\n  if (unit_test.ad_hoc_test_result().Failed()) {\n    OutputJsonTestSuiteForTestResult(stream, unit_test.ad_hoc_test_result());\n  }\n\n  *stream << \"\\n\"\n          << kIndent << \"]\\n\"\n          << \"}\\n\";\n}\n\nvoid JsonUnitTestResultPrinter::PrintJsonTestList(\n    std::ostream* stream, const std::vector<TestSuite*>& test_suites) {\n  const std::string kTestsuites = \"testsuites\";\n  const std::string kIndent = Indent(2);\n  *stream << \"{\\n\";\n  int total_tests = 0;\n  for (auto test_suite : test_suites) {\n    total_tests += test_suite->total_test_count();\n  }\n  OutputJsonKey(stream, kTestsuites, \"tests\", total_tests, kIndent);\n\n  OutputJsonKey(stream, kTestsuites, \"name\", \"AllTests\", kIndent);\n  *stream << kIndent << \"\\\"\" << kTestsuites << \"\\\": [\\n\";\n\n  for (size_t i = 0; i < test_suites.size(); ++i) {\n    if (i != 0) {\n      *stream << \",\\n\";\n    }\n    PrintJsonTestSuite(stream, *test_suites[i]);\n  }\n\n  *stream << \"\\n\"\n          << kIndent << \"]\\n\"\n          << \"}\\n\";\n}\n// Produces a string representing the test properties in a result as\n// a JSON dictionary.\nstd::string JsonUnitTestResultPrinter::TestPropertiesAsJson(\n    const TestResult& result, const std::string& indent) {\n  Message attributes;\n  for (int i = 0; i < result.test_property_count(); ++i) {\n    const TestProperty& property = result.GetTestProperty(i);\n    attributes << \",\\n\"\n               << indent << \"\\\"\" << property.key() << \"\\\": \"\n               << \"\\\"\" << EscapeJson(property.value()) << \"\\\"\";\n  }\n  return attributes.GetString();\n}\n\n// End JsonUnitTestResultPrinter\n\n#if GTEST_CAN_STREAM_RESULTS_\n\n// Checks if str contains '=', '&', '%' or '\\n' characters. If yes,\n// replaces them by \"%xx\" where xx is their hexadecimal value. For\n// example, replaces \"=\" with \"%3D\".  This algorithm is O(strlen(str))\n// in both time and space -- important as the input str may contain an\n// arbitrarily long test failure message and stack trace.\nstd::string StreamingListener::UrlEncode(const char* str) {\n  std::string result;\n  result.reserve(strlen(str) + 1);\n  for (char ch = *str; ch != '\\0'; ch = *++str) {\n    switch (ch) {\n      case '%':\n      case '=':\n      case '&':\n      case '\\n':\n        result.append(\"%\" + String::FormatByte(static_cast<unsigned char>(ch)));\n        break;\n      default:\n        result.push_back(ch);\n        break;\n    }\n  }\n  return result;\n}\n\nvoid StreamingListener::SocketWriter::MakeConnection() {\n  GTEST_CHECK_(sockfd_ == -1)\n      << \"MakeConnection() can't be called when there is already a connection.\";\n\n  addrinfo hints;\n  memset(&hints, 0, sizeof(hints));\n  hints.ai_family = AF_UNSPEC;  // To allow both IPv4 and IPv6 addresses.\n  hints.ai_socktype = SOCK_STREAM;\n  addrinfo* servinfo = nullptr;\n\n  // Use the getaddrinfo() to get a linked list of IP addresses for\n  // the given host name.\n  const int error_num =\n      getaddrinfo(host_name_.c_str(), port_num_.c_str(), &hints, &servinfo);\n  if (error_num != 0) {\n    GTEST_LOG_(WARNING) << \"stream_result_to: getaddrinfo() failed: \"\n                        << gai_strerror(error_num);\n  }\n\n  // Loop through all the results and connect to the first we can.\n  for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != nullptr;\n       cur_addr = cur_addr->ai_next) {\n    sockfd_ = socket(cur_addr->ai_family, cur_addr->ai_socktype,\n                     cur_addr->ai_protocol);\n    if (sockfd_ != -1) {\n      // Connect the client socket to the server socket.\n      if (connect(sockfd_, cur_addr->ai_addr, cur_addr->ai_addrlen) == -1) {\n        close(sockfd_);\n        sockfd_ = -1;\n      }\n    }\n  }\n\n  freeaddrinfo(servinfo);  // all done with this structure\n\n  if (sockfd_ == -1) {\n    GTEST_LOG_(WARNING) << \"stream_result_to: failed to connect to \"\n                        << host_name_ << \":\" << port_num_;\n  }\n}\n\n// End of class Streaming Listener\n#endif  // GTEST_CAN_STREAM_RESULTS__\n\n// class OsStackTraceGetter\n\nconst char* const OsStackTraceGetterInterface::kElidedFramesMarker =\n    \"... \" GTEST_NAME_ \" internal frames ...\";\n\nstd::string OsStackTraceGetter::CurrentStackTrace(int max_depth, int skip_count)\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n#if GTEST_HAS_ABSL\n  std::string result;\n\n  if (max_depth <= 0) {\n    return result;\n  }\n\n  max_depth = std::min(max_depth, kMaxStackTraceDepth);\n\n  std::vector<void*> raw_stack(max_depth);\n  // Skips the frames requested by the caller, plus this function.\n  const int raw_stack_size =\n      absl::GetStackTrace(&raw_stack[0], max_depth, skip_count + 1);\n\n  void* caller_frame = nullptr;\n  {\n    MutexLock lock(&mutex_);\n    caller_frame = caller_frame_;\n  }\n\n  for (int i = 0; i < raw_stack_size; ++i) {\n    if (raw_stack[i] == caller_frame &&\n        !GTEST_FLAG_GET(show_internal_stack_frames)) {\n      // Add a marker to the trace and stop adding frames.\n      absl::StrAppend(&result, kElidedFramesMarker, \"\\n\");\n      break;\n    }\n\n    char tmp[1024];\n    const char* symbol = \"(unknown)\";\n    if (absl::Symbolize(raw_stack[i], tmp, sizeof(tmp))) {\n      symbol = tmp;\n    }\n\n    char line[1024];\n    snprintf(line, sizeof(line), \"  %p: %s\\n\", raw_stack[i], symbol);\n    result += line;\n  }\n\n  return result;\n\n#else   // !GTEST_HAS_ABSL\n  static_cast<void>(max_depth);\n  static_cast<void>(skip_count);\n  return \"\";\n#endif  // GTEST_HAS_ABSL\n}\n\nvoid OsStackTraceGetter::UponLeavingGTest() GTEST_LOCK_EXCLUDED_(mutex_) {\n#if GTEST_HAS_ABSL\n  void* caller_frame = nullptr;\n  if (absl::GetStackTrace(&caller_frame, 1, 3) <= 0) {\n    caller_frame = nullptr;\n  }\n\n  MutexLock lock(&mutex_);\n  caller_frame_ = caller_frame;\n#endif  // GTEST_HAS_ABSL\n}\n\n// A helper class that creates the premature-exit file in its\n// constructor and deletes the file in its destructor.\nclass ScopedPrematureExitFile {\n public:\n  explicit ScopedPrematureExitFile(const char* premature_exit_filepath)\n      : premature_exit_filepath_(\n            premature_exit_filepath ? premature_exit_filepath : \"\") {\n    // If a path to the premature-exit file is specified...\n    if (!premature_exit_filepath_.empty()) {\n      // create the file with a single \"0\" character in it.  I/O\n      // errors are ignored as there's nothing better we can do and we\n      // don't want to fail the test because of this.\n      FILE* pfile = posix::FOpen(premature_exit_filepath_.c_str(), \"w\");\n      fwrite(\"0\", 1, 1, pfile);\n      fclose(pfile);\n    }\n  }\n\n  ~ScopedPrematureExitFile() {\n#if !defined GTEST_OS_ESP8266\n    if (!premature_exit_filepath_.empty()) {\n      int retval = remove(premature_exit_filepath_.c_str());\n      if (retval) {\n        GTEST_LOG_(ERROR) << \"Failed to remove premature exit filepath \\\"\"\n                          << premature_exit_filepath_ << \"\\\" with error \"\n                          << retval;\n      }\n    }\n#endif\n  }\n\n private:\n  const std::string premature_exit_filepath_;\n\n  ScopedPrematureExitFile(const ScopedPrematureExitFile&) = delete;\n  ScopedPrematureExitFile& operator=(const ScopedPrematureExitFile&) = delete;\n};\n\n}  // namespace internal\n\n// class TestEventListeners\n\nTestEventListeners::TestEventListeners()\n    : repeater_(new internal::TestEventRepeater()),\n      default_result_printer_(nullptr),\n      default_xml_generator_(nullptr) {}\n\nTestEventListeners::~TestEventListeners() { delete repeater_; }\n\n// Returns the standard listener responsible for the default console\n// output.  Can be removed from the listeners list to shut down default\n// console output.  Note that removing this object from the listener list\n// with Release transfers its ownership to the user.\nvoid TestEventListeners::Append(TestEventListener* listener) {\n  repeater_->Append(listener);\n}\n\n// Removes the given event listener from the list and returns it.  It then\n// becomes the caller's responsibility to delete the listener. Returns\n// NULL if the listener is not found in the list.\nTestEventListener* TestEventListeners::Release(TestEventListener* listener) {\n  if (listener == default_result_printer_)\n    default_result_printer_ = nullptr;\n  else if (listener == default_xml_generator_)\n    default_xml_generator_ = nullptr;\n  return repeater_->Release(listener);\n}\n\n// Returns repeater that broadcasts the TestEventListener events to all\n// subscribers.\nTestEventListener* TestEventListeners::repeater() { return repeater_; }\n\n// Sets the default_result_printer attribute to the provided listener.\n// The listener is also added to the listener list and previous\n// default_result_printer is removed from it and deleted. The listener can\n// also be NULL in which case it will not be added to the list. Does\n// nothing if the previous and the current listener objects are the same.\nvoid TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) {\n  if (default_result_printer_ != listener) {\n    // It is an error to pass this method a listener that is already in the\n    // list.\n    delete Release(default_result_printer_);\n    default_result_printer_ = listener;\n    if (listener != nullptr) Append(listener);\n  }\n}\n\n// Sets the default_xml_generator attribute to the provided listener.  The\n// listener is also added to the listener list and previous\n// default_xml_generator is removed from it and deleted. The listener can\n// also be NULL in which case it will not be added to the list. Does\n// nothing if the previous and the current listener objects are the same.\nvoid TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) {\n  if (default_xml_generator_ != listener) {\n    // It is an error to pass this method a listener that is already in the\n    // list.\n    delete Release(default_xml_generator_);\n    default_xml_generator_ = listener;\n    if (listener != nullptr) Append(listener);\n  }\n}\n\n// Controls whether events will be forwarded by the repeater to the\n// listeners in the list.\nbool TestEventListeners::EventForwardingEnabled() const {\n  return repeater_->forwarding_enabled();\n}\n\nvoid TestEventListeners::SuppressEventForwarding() {\n  repeater_->set_forwarding_enabled(false);\n}\n\n// class UnitTest\n\n// Gets the singleton UnitTest object.  The first time this method is\n// called, a UnitTest object is constructed and returned.  Consecutive\n// calls will return the same object.\n//\n// We don't protect this under mutex_ as a user is not supposed to\n// call this before main() starts, from which point on the return\n// value will never change.\nUnitTest* UnitTest::GetInstance() {\n  // CodeGear C++Builder insists on a public destructor for the\n  // default implementation.  Use this implementation to keep good OO\n  // design with private destructor.\n\n#if defined(__BORLANDC__)\n  static UnitTest* const instance = new UnitTest;\n  return instance;\n#else\n  static UnitTest instance;\n  return &instance;\n#endif  // defined(__BORLANDC__)\n}\n\n// Gets the number of successful test suites.\nint UnitTest::successful_test_suite_count() const {\n  return impl()->successful_test_suite_count();\n}\n\n// Gets the number of failed test suites.\nint UnitTest::failed_test_suite_count() const {\n  return impl()->failed_test_suite_count();\n}\n\n// Gets the number of all test suites.\nint UnitTest::total_test_suite_count() const {\n  return impl()->total_test_suite_count();\n}\n\n// Gets the number of all test suites that contain at least one test\n// that should run.\nint UnitTest::test_suite_to_run_count() const {\n  return impl()->test_suite_to_run_count();\n}\n\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\nint UnitTest::successful_test_case_count() const {\n  return impl()->successful_test_suite_count();\n}\nint UnitTest::failed_test_case_count() const {\n  return impl()->failed_test_suite_count();\n}\nint UnitTest::total_test_case_count() const {\n  return impl()->total_test_suite_count();\n}\nint UnitTest::test_case_to_run_count() const {\n  return impl()->test_suite_to_run_count();\n}\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n// Gets the number of successful tests.\nint UnitTest::successful_test_count() const {\n  return impl()->successful_test_count();\n}\n\n// Gets the number of skipped tests.\nint UnitTest::skipped_test_count() const {\n  return impl()->skipped_test_count();\n}\n\n// Gets the number of failed tests.\nint UnitTest::failed_test_count() const { return impl()->failed_test_count(); }\n\n// Gets the number of disabled tests that will be reported in the XML report.\nint UnitTest::reportable_disabled_test_count() const {\n  return impl()->reportable_disabled_test_count();\n}\n\n// Gets the number of disabled tests.\nint UnitTest::disabled_test_count() const {\n  return impl()->disabled_test_count();\n}\n\n// Gets the number of tests to be printed in the XML report.\nint UnitTest::reportable_test_count() const {\n  return impl()->reportable_test_count();\n}\n\n// Gets the number of all tests.\nint UnitTest::total_test_count() const { return impl()->total_test_count(); }\n\n// Gets the number of tests that should run.\nint UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); }\n\n// Gets the time of the test program start, in ms from the start of the\n// UNIX epoch.\ninternal::TimeInMillis UnitTest::start_timestamp() const {\n  return impl()->start_timestamp();\n}\n\n// Gets the elapsed time, in milliseconds.\ninternal::TimeInMillis UnitTest::elapsed_time() const {\n  return impl()->elapsed_time();\n}\n\n// Returns true if and only if the unit test passed (i.e. all test suites\n// passed).\nbool UnitTest::Passed() const { return impl()->Passed(); }\n\n// Returns true if and only if the unit test failed (i.e. some test suite\n// failed or something outside of all tests failed).\nbool UnitTest::Failed() const { return impl()->Failed(); }\n\n// Gets the i-th test suite among all the test suites. i can range from 0 to\n// total_test_suite_count() - 1. If i is not in that range, returns NULL.\nconst TestSuite* UnitTest::GetTestSuite(int i) const {\n  return impl()->GetTestSuite(i);\n}\n\n//  Legacy API is deprecated but still available\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\nconst TestCase* UnitTest::GetTestCase(int i) const {\n  return impl()->GetTestCase(i);\n}\n#endif  //  GTEST_REMOVE_LEGACY_TEST_CASEAPI_\n\n// Returns the TestResult containing information on test failures and\n// properties logged outside of individual test suites.\nconst TestResult& UnitTest::ad_hoc_test_result() const {\n  return *impl()->ad_hoc_test_result();\n}\n\n// Gets the i-th test suite among all the test suites. i can range from 0 to\n// total_test_suite_count() - 1. If i is not in that range, returns NULL.\nTestSuite* UnitTest::GetMutableTestSuite(int i) {\n  return impl()->GetMutableSuiteCase(i);\n}\n\n// Returns the list of event listeners that can be used to track events\n// inside Google Test.\nTestEventListeners& UnitTest::listeners() { return *impl()->listeners(); }\n\n// Registers and returns a global test environment.  When a test\n// program is run, all global test environments will be set-up in the\n// order they were registered.  After all tests in the program have\n// finished, all global test environments will be torn-down in the\n// *reverse* order they were registered.\n//\n// The UnitTest object takes ownership of the given environment.\n//\n// We don't protect this under mutex_, as we only support calling it\n// from the main thread.\nEnvironment* UnitTest::AddEnvironment(Environment* env) {\n  if (env == nullptr) {\n    return nullptr;\n  }\n\n  impl_->environments().push_back(env);\n  return env;\n}\n\n// Adds a TestPartResult to the current TestResult object.  All Google Test\n// assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call\n// this to report their results.  The user code should use the\n// assertion macros instead of calling this directly.\nvoid UnitTest::AddTestPartResult(TestPartResult::Type result_type,\n                                 const char* file_name, int line_number,\n                                 const std::string& message,\n                                 const std::string& os_stack_trace)\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n  Message msg;\n  msg << message;\n\n  internal::MutexLock lock(&mutex_);\n  if (impl_->gtest_trace_stack().size() > 0) {\n    msg << \"\\n\" << GTEST_NAME_ << \" trace:\";\n\n    for (size_t i = impl_->gtest_trace_stack().size(); i > 0; --i) {\n      const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1];\n      msg << \"\\n\"\n          << internal::FormatFileLocation(trace.file, trace.line) << \" \"\n          << trace.message;\n    }\n  }\n\n  if (os_stack_trace.c_str() != nullptr && !os_stack_trace.empty()) {\n    msg << internal::kStackTraceMarker << os_stack_trace;\n  }\n\n  const TestPartResult result = TestPartResult(\n      result_type, file_name, line_number, msg.GetString().c_str());\n  impl_->GetTestPartResultReporterForCurrentThread()->ReportTestPartResult(\n      result);\n\n  if (result_type != TestPartResult::kSuccess &&\n      result_type != TestPartResult::kSkip) {\n    // gtest_break_on_failure takes precedence over\n    // gtest_throw_on_failure.  This allows a user to set the latter\n    // in the code (perhaps in order to use Google Test assertions\n    // with another testing framework) and specify the former on the\n    // command line for debugging.\n    if (GTEST_FLAG_GET(break_on_failure)) {\n#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT\n      // Using DebugBreak on Windows allows gtest to still break into a debugger\n      // when a failure happens and both the --gtest_break_on_failure and\n      // the --gtest_catch_exceptions flags are specified.\n      DebugBreak();\n#elif (!defined(__native_client__)) &&            \\\n    ((defined(__clang__) || defined(__GNUC__)) && \\\n     (defined(__x86_64__) || defined(__i386__)))\n      // with clang/gcc we can achieve the same effect on x86 by invoking int3\n      asm(\"int3\");\n#else\n      // Dereference nullptr through a volatile pointer to prevent the compiler\n      // from removing. We use this rather than abort() or __builtin_trap() for\n      // portability: some debuggers don't correctly trap abort().\n      *static_cast<volatile int*>(nullptr) = 1;\n#endif  // GTEST_OS_WINDOWS\n    } else if (GTEST_FLAG_GET(throw_on_failure)) {\n#if GTEST_HAS_EXCEPTIONS\n      throw internal::GoogleTestFailureException(result);\n#else\n      // We cannot call abort() as it generates a pop-up in debug mode\n      // that cannot be suppressed in VC 7.1 or below.\n      exit(1);\n#endif\n    }\n  }\n}\n\n// Adds a TestProperty to the current TestResult object when invoked from\n// inside a test, to current TestSuite's ad_hoc_test_result_ when invoked\n// from SetUpTestSuite or TearDownTestSuite, or to the global property set\n// when invoked elsewhere.  If the result already contains a property with\n// the same key, the value will be updated.\nvoid UnitTest::RecordProperty(const std::string& key,\n                              const std::string& value) {\n  impl_->RecordProperty(TestProperty(key, value));\n}\n\n// Runs all tests in this UnitTest object and prints the result.\n// Returns 0 if successful, or 1 otherwise.\n//\n// We don't protect this under mutex_, as we only support calling it\n// from the main thread.\nint UnitTest::Run() {\n  const bool in_death_test_child_process =\n      GTEST_FLAG_GET(internal_run_death_test).length() > 0;\n\n  // Google Test implements this protocol for catching that a test\n  // program exits before returning control to Google Test:\n  //\n  //   1. Upon start, Google Test creates a file whose absolute path\n  //      is specified by the environment variable\n  //      TEST_PREMATURE_EXIT_FILE.\n  //   2. When Google Test has finished its work, it deletes the file.\n  //\n  // This allows a test runner to set TEST_PREMATURE_EXIT_FILE before\n  // running a Google-Test-based test program and check the existence\n  // of the file at the end of the test execution to see if it has\n  // exited prematurely.\n\n  // If we are in the child process of a death test, don't\n  // create/delete the premature exit file, as doing so is unnecessary\n  // and will confuse the parent process.  Otherwise, create/delete\n  // the file upon entering/leaving this function.  If the program\n  // somehow exits before this function has a chance to return, the\n  // premature-exit file will be left undeleted, causing a test runner\n  // that understands the premature-exit-file protocol to report the\n  // test as having failed.\n  const internal::ScopedPrematureExitFile premature_exit_file(\n      in_death_test_child_process\n          ? nullptr\n          : internal::posix::GetEnv(\"TEST_PREMATURE_EXIT_FILE\"));\n\n  // Captures the value of GTEST_FLAG(catch_exceptions).  This value will be\n  // used for the duration of the program.\n  impl()->set_catch_exceptions(GTEST_FLAG_GET(catch_exceptions));\n\n#if GTEST_OS_WINDOWS\n  // Either the user wants Google Test to catch exceptions thrown by the\n  // tests or this is executing in the context of death test child\n  // process. In either case the user does not want to see pop-up dialogs\n  // about crashes - they are expected.\n  if (impl()->catch_exceptions() || in_death_test_child_process) {\n#if !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT\n    // SetErrorMode doesn't exist on CE.\n    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT |\n                 SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);\n#endif  // !GTEST_OS_WINDOWS_MOBILE\n\n#if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE\n    // Death test children can be terminated with _abort().  On Windows,\n    // _abort() can show a dialog with a warning message.  This forces the\n    // abort message to go to stderr instead.\n    _set_error_mode(_OUT_TO_STDERR);\n#endif\n\n#if defined(_MSC_VER) && !GTEST_OS_WINDOWS_MOBILE\n    // In the debug version, Visual Studio pops up a separate dialog\n    // offering a choice to debug the aborted program. We need to suppress\n    // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement\n    // executed. Google Test will notify the user of any unexpected\n    // failure via stderr.\n    if (!GTEST_FLAG_GET(break_on_failure))\n      _set_abort_behavior(\n          0x0,                                    // Clear the following flags:\n          _WRITE_ABORT_MSG | _CALL_REPORTFAULT);  // pop-up window, core dump.\n\n    // In debug mode, the Windows CRT can crash with an assertion over invalid\n    // input (e.g. passing an invalid file descriptor).  The default handling\n    // for these assertions is to pop up a dialog and wait for user input.\n    // Instead ask the CRT to dump such assertions to stderr non-interactively.\n    if (!IsDebuggerPresent()) {\n      (void)_CrtSetReportMode(_CRT_ASSERT,\n                              _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);\n      (void)_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);\n    }\n#endif\n  }\n#endif  // GTEST_OS_WINDOWS\n\n  return internal::HandleExceptionsInMethodIfSupported(\n             impl(), &internal::UnitTestImpl::RunAllTests,\n             \"auxiliary test code (environments or event listeners)\")\n             ? 0\n             : 1;\n}\n\n// Returns the working directory when the first TEST() or TEST_F() was\n// executed.\nconst char* UnitTest::original_working_dir() const {\n  return impl_->original_working_dir_.c_str();\n}\n\n// Returns the TestSuite object for the test that's currently running,\n// or NULL if no test is running.\nconst TestSuite* UnitTest::current_test_suite() const\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n  internal::MutexLock lock(&mutex_);\n  return impl_->current_test_suite();\n}\n\n// Legacy API is still available but deprecated\n#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_\nconst TestCase* UnitTest::current_test_case() const\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n  internal::MutexLock lock(&mutex_);\n  return impl_->current_test_suite();\n}\n#endif\n\n// Returns the TestInfo object for the test that's currently running,\n// or NULL if no test is running.\nconst TestInfo* UnitTest::current_test_info() const\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n  internal::MutexLock lock(&mutex_);\n  return impl_->current_test_info();\n}\n\n// Returns the random seed used at the start of the current test run.\nint UnitTest::random_seed() const { return impl_->random_seed(); }\n\n// Returns ParameterizedTestSuiteRegistry object used to keep track of\n// value-parameterized tests and instantiate and register them.\ninternal::ParameterizedTestSuiteRegistry&\nUnitTest::parameterized_test_registry() GTEST_LOCK_EXCLUDED_(mutex_) {\n  return impl_->parameterized_test_registry();\n}\n\n// Creates an empty UnitTest.\nUnitTest::UnitTest() { impl_ = new internal::UnitTestImpl(this); }\n\n// Destructor of UnitTest.\nUnitTest::~UnitTest() { delete impl_; }\n\n// Pushes a trace defined by SCOPED_TRACE() on to the per-thread\n// Google Test trace stack.\nvoid UnitTest::PushGTestTrace(const internal::TraceInfo& trace)\n    GTEST_LOCK_EXCLUDED_(mutex_) {\n  internal::MutexLock lock(&mutex_);\n  impl_->gtest_trace_stack().push_back(trace);\n}\n\n// Pops a trace from the per-thread Google Test trace stack.\nvoid UnitTest::PopGTestTrace() GTEST_LOCK_EXCLUDED_(mutex_) {\n  internal::MutexLock lock(&mutex_);\n  impl_->gtest_trace_stack().pop_back();\n}\n\nnamespace internal {\n\nUnitTestImpl::UnitTestImpl(UnitTest* parent)\n    : parent_(parent),\n      GTEST_DISABLE_MSC_WARNINGS_PUSH_(4355 /* using this in initializer */)\n          default_global_test_part_result_reporter_(this),\n      default_per_thread_test_part_result_reporter_(this),\n      GTEST_DISABLE_MSC_WARNINGS_POP_() global_test_part_result_repoter_(\n          &default_global_test_part_result_reporter_),\n      per_thread_test_part_result_reporter_(\n          &default_per_thread_test_part_result_reporter_),\n      parameterized_test_registry_(),\n      parameterized_tests_registered_(false),\n      last_death_test_suite_(-1),\n      current_test_suite_(nullptr),\n      current_test_info_(nullptr),\n      ad_hoc_test_result_(),\n      os_stack_trace_getter_(nullptr),\n      post_flag_parse_init_performed_(false),\n      random_seed_(0),  // Will be overridden by the flag before first use.\n      random_(0),       // Will be reseeded before first use.\n      start_timestamp_(0),\n      elapsed_time_(0),\n#if GTEST_HAS_DEATH_TEST\n      death_test_factory_(new DefaultDeathTestFactory),\n#endif\n      // Will be overridden by the flag before first use.\n      catch_exceptions_(false) {\n  listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter);\n}\n\nUnitTestImpl::~UnitTestImpl() {\n  // Deletes every TestSuite.\n  ForEach(test_suites_, internal::Delete<TestSuite>);\n\n  // Deletes every Environment.\n  ForEach(environments_, internal::Delete<Environment>);\n\n  delete os_stack_trace_getter_;\n}\n\n// Adds a TestProperty to the current TestResult object when invoked in a\n// context of a test, to current test suite's ad_hoc_test_result when invoke\n// from SetUpTestSuite/TearDownTestSuite, or to the global property set\n// otherwise.  If the result already contains a property with the same key,\n// the value will be updated.\nvoid UnitTestImpl::RecordProperty(const TestProperty& test_property) {\n  std::string xml_element;\n  TestResult* test_result;  // TestResult appropriate for property recording.\n\n  if (current_test_info_ != nullptr) {\n    xml_element = \"testcase\";\n    test_result = &(current_test_info_->result_);\n  } else if (current_test_suite_ != nullptr) {\n    xml_element = \"testsuite\";\n    test_result = &(current_test_suite_->ad_hoc_test_result_);\n  } else {\n    xml_element = \"testsuites\";\n    test_result = &ad_hoc_test_result_;\n  }\n  test_result->RecordProperty(xml_element, test_property);\n}\n\n#if GTEST_HAS_DEATH_TEST\n// Disables event forwarding if the control is currently in a death test\n// subprocess. Must not be called before InitGoogleTest.\nvoid UnitTestImpl::SuppressTestEventsIfInSubprocess() {\n  if (internal_run_death_test_flag_.get() != nullptr)\n    listeners()->SuppressEventForwarding();\n}\n#endif  // GTEST_HAS_DEATH_TEST\n\n// Initializes event listeners performing XML output as specified by\n// UnitTestOptions. Must not be called before InitGoogleTest.\nvoid UnitTestImpl::ConfigureXmlOutput() {\n  const std::string& output_format = UnitTestOptions::GetOutputFormat();\n  if (output_format == \"xml\") {\n    listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter(\n        UnitTestOptions::GetAbsolutePathToOutputFile().c_str()));\n  } else if (output_format == \"json\") {\n    listeners()->SetDefaultXmlGenerator(new JsonUnitTestResultPrinter(\n        UnitTestOptions::GetAbsolutePathToOutputFile().c_str()));\n  } else if (output_format != \"\") {\n    GTEST_LOG_(WARNING) << \"WARNING: unrecognized output format \\\"\"\n                        << output_format << \"\\\" ignored.\";\n  }\n}\n\n#if GTEST_CAN_STREAM_RESULTS_\n// Initializes event listeners for streaming test results in string form.\n// Must not be called before InitGoogleTest.\nvoid UnitTestImpl::ConfigureStreamingOutput() {\n  const std::string& target = GTEST_FLAG_GET(stream_result_to);\n  if (!target.empty()) {\n    const size_t pos = target.find(':');\n    if (pos != std::string::npos) {\n      listeners()->Append(\n          new StreamingListener(target.substr(0, pos), target.substr(pos + 1)));\n    } else {\n      GTEST_LOG_(WARNING) << \"unrecognized streaming target \\\"\" << target\n                          << \"\\\" ignored.\";\n    }\n  }\n}\n#endif  // GTEST_CAN_STREAM_RESULTS_\n\n// Performs initialization dependent upon flag values obtained in\n// ParseGoogleTestFlagsOnly.  Is called from InitGoogleTest after the call to\n// ParseGoogleTestFlagsOnly.  In case a user neglects to call InitGoogleTest\n// this function is also called from RunAllTests.  Since this function can be\n// called more than once, it has to be idempotent.\nvoid UnitTestImpl::PostFlagParsingInit() {\n  // Ensures that this function does not execute more than once.\n  if (!post_flag_parse_init_performed_) {\n    post_flag_parse_init_performed_ = true;\n\n#if defined(GTEST_CUSTOM_TEST_EVENT_LISTENER_)\n    // Register to send notifications about key process state changes.\n    listeners()->Append(new GTEST_CUSTOM_TEST_EVENT_LISTENER_());\n#endif  // defined(GTEST_CUSTOM_TEST_EVENT_LISTENER_)\n\n#if GTEST_HAS_DEATH_TEST\n    InitDeathTestSubprocessControlInfo();\n    SuppressTestEventsIfInSubprocess();\n#endif  // GTEST_HAS_DEATH_TEST\n\n    // Registers parameterized tests. This makes parameterized tests\n    // available to the UnitTest reflection API without running\n    // RUN_ALL_TESTS.\n    RegisterParameterizedTests();\n\n    // Configures listeners for XML output. This makes it possible for users\n    // to shut down the default XML output before invoking RUN_ALL_TESTS.\n    ConfigureXmlOutput();\n\n    if (GTEST_FLAG_GET(brief)) {\n      listeners()->SetDefaultResultPrinter(new BriefUnitTestResultPrinter);\n    }\n\n#if GTEST_CAN_STREAM_RESULTS_\n    // Configures listeners for streaming test results to the specified server.\n    ConfigureStreamingOutput();\n#endif  // GTEST_CAN_STREAM_RESULTS_\n\n#if GTEST_HAS_ABSL\n    if (GTEST_FLAG_GET(install_failure_signal_handler)) {\n      absl::FailureSignalHandlerOptions options;\n      absl::InstallFailureSignalHandler(options);\n    }\n#endif  // GTEST_HAS_ABSL\n  }\n}\n\n// A predicate that checks the name of a TestSuite against a known\n// value.\n//\n// This is used for implementation of the UnitTest class only.  We put\n// it in the anonymous namespace to prevent polluting the outer\n// namespace.\n//\n// TestSuiteNameIs is copyable.\nclass TestSuiteNameIs {\n public:\n  // Constructor.\n  explicit TestSuiteNameIs(const std::string& name) : name_(name) {}\n\n  // Returns true if and only if the name of test_suite matches name_.\n  bool operator()(const TestSuite* test_suite) const {\n    return test_suite != nullptr &&\n           strcmp(test_suite->name(), name_.c_str()) == 0;\n  }\n\n private:\n  std::string name_;\n};\n\n// Finds and returns a TestSuite with the given name.  If one doesn't\n// exist, creates one and returns it.  It's the CALLER'S\n// RESPONSIBILITY to ensure that this function is only called WHEN THE\n// TESTS ARE NOT SHUFFLED.\n//\n// Arguments:\n//\n//   test_suite_name: name of the test suite\n//   type_param:      the name of the test suite's type parameter, or NULL if\n//                    this is not a typed or a type-parameterized test suite.\n//   set_up_tc:       pointer to the function that sets up the test suite\n//   tear_down_tc:    pointer to the function that tears down the test suite\nTestSuite* UnitTestImpl::GetTestSuite(\n    const char* test_suite_name, const char* type_param,\n    internal::SetUpTestSuiteFunc set_up_tc,\n    internal::TearDownTestSuiteFunc tear_down_tc) {\n  // Can we find a TestSuite with the given name?\n  const auto test_suite =\n      std::find_if(test_suites_.rbegin(), test_suites_.rend(),\n                   TestSuiteNameIs(test_suite_name));\n\n  if (test_suite != test_suites_.rend()) return *test_suite;\n\n  // No.  Let's create one.\n  auto* const new_test_suite =\n      new TestSuite(test_suite_name, type_param, set_up_tc, tear_down_tc);\n\n  const UnitTestFilter death_test_suite_filter(kDeathTestSuiteFilter);\n  // Is this a death test suite?\n  if (death_test_suite_filter.MatchesName(test_suite_name)) {\n    // Yes.  Inserts the test suite after the last death test suite\n    // defined so far.  This only works when the test suites haven't\n    // been shuffled.  Otherwise we may end up running a death test\n    // after a non-death test.\n    ++last_death_test_suite_;\n    test_suites_.insert(test_suites_.begin() + last_death_test_suite_,\n                        new_test_suite);\n  } else {\n    // No.  Appends to the end of the list.\n    test_suites_.push_back(new_test_suite);\n  }\n\n  test_suite_indices_.push_back(static_cast<int>(test_suite_indices_.size()));\n  return new_test_suite;\n}\n\n// Helpers for setting up / tearing down the given environment.  They\n// are for use in the ForEach() function.\nstatic void SetUpEnvironment(Environment* env) { env->SetUp(); }\nstatic void TearDownEnvironment(Environment* env) { env->TearDown(); }\n\n// Runs all tests in this UnitTest object, prints the result, and\n// returns true if all tests are successful.  If any exception is\n// thrown during a test, the test is considered to be failed, but the\n// rest of the tests will still be run.\n//\n// When parameterized tests are enabled, it expands and registers\n// parameterized tests first in RegisterParameterizedTests().\n// All other functions called from RunAllTests() may safely assume that\n// parameterized tests are ready to be counted and run.\nbool UnitTestImpl::RunAllTests() {\n  // True if and only if Google Test is initialized before RUN_ALL_TESTS() is\n  // called.\n  const bool gtest_is_initialized_before_run_all_tests = GTestIsInitialized();\n\n  // Do not run any test if the --help flag was specified.\n  if (g_help_flag) return true;\n\n  // Repeats the call to the post-flag parsing initialization in case the\n  // user didn't call InitGoogleTest.\n  PostFlagParsingInit();\n\n  // Even if sharding is not on, test runners may want to use the\n  // GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding\n  // protocol.\n  internal::WriteToShardStatusFileIfNeeded();\n\n  // True if and only if we are in a subprocess for running a thread-safe-style\n  // death test.\n  bool in_subprocess_for_death_test = false;\n\n#if GTEST_HAS_DEATH_TEST\n  in_subprocess_for_death_test =\n      (internal_run_death_test_flag_.get() != nullptr);\n#if defined(GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_)\n  if (in_subprocess_for_death_test) {\n    GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_();\n  }\n#endif  // defined(GTEST_EXTRA_DEATH_TEST_CHILD_SETUP_)\n#endif  // GTEST_HAS_DEATH_TEST\n\n  const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex,\n                                        in_subprocess_for_death_test);\n\n  // Compares the full test names with the filter to decide which\n  // tests to run.\n  const bool has_tests_to_run =\n      FilterTests(should_shard ? HONOR_SHARDING_PROTOCOL\n                               : IGNORE_SHARDING_PROTOCOL) > 0;\n\n  // Lists the tests and exits if the --gtest_list_tests flag was specified.\n  if (GTEST_FLAG_GET(list_tests)) {\n    // This must be called *after* FilterTests() has been called.\n    ListTestsMatchingFilter();\n    return true;\n  }\n\n  random_seed_ = GetRandomSeedFromFlag(GTEST_FLAG_GET(random_seed));\n\n  // True if and only if at least one test has failed.\n  bool failed = false;\n\n  TestEventListener* repeater = listeners()->repeater();\n\n  start_timestamp_ = GetTimeInMillis();\n  repeater->OnTestProgramStart(*parent_);\n\n  // How many times to repeat the tests?  We don't want to repeat them\n  // when we are inside the subprocess of a death test.\n  const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG_GET(repeat);\n\n  // Repeats forever if the repeat count is negative.\n  const bool gtest_repeat_forever = repeat < 0;\n\n  // Should test environments be set up and torn down for each repeat, or only\n  // set up on the first and torn down on the last iteration? If there is no\n  // \"last\" iteration because the tests will repeat forever, always recreate the\n  // environments to avoid leaks in case one of the environments is using\n  // resources that are external to this process. Without this check there would\n  // be no way to clean up those external resources automatically.\n  const bool recreate_environments_when_repeating =\n      GTEST_FLAG_GET(recreate_environments_when_repeating) ||\n      gtest_repeat_forever;\n\n  for (int i = 0; gtest_repeat_forever || i != repeat; i++) {\n    // We want to preserve failures generated by ad-hoc test\n    // assertions executed before RUN_ALL_TESTS().\n    ClearNonAdHocTestResult();\n\n    Timer timer;\n\n    // Shuffles test suites and tests if requested.\n    if (has_tests_to_run && GTEST_FLAG_GET(shuffle)) {\n      random()->Reseed(static_cast<uint32_t>(random_seed_));\n      // This should be done before calling OnTestIterationStart(),\n      // such that a test event listener can see the actual test order\n      // in the event.\n      ShuffleTests();\n    }\n\n    // Tells the unit test event listeners that the tests are about to start.\n    repeater->OnTestIterationStart(*parent_, i);\n\n    // Runs each test suite if there is at least one test to run.\n    if (has_tests_to_run) {\n      // Sets up all environments beforehand. If test environments aren't\n      // recreated for each iteration, only do so on the first iteration.\n      if (i == 0 || recreate_environments_when_repeating) {\n        repeater->OnEnvironmentsSetUpStart(*parent_);\n        ForEach(environments_, SetUpEnvironment);\n        repeater->OnEnvironmentsSetUpEnd(*parent_);\n      }\n\n      // Runs the tests only if there was no fatal failure or skip triggered\n      // during global set-up.\n      if (Test::IsSkipped()) {\n        // Emit diagnostics when global set-up calls skip, as it will not be\n        // emitted by default.\n        TestResult& test_result =\n            *internal::GetUnitTestImpl()->current_test_result();\n        for (int j = 0; j < test_result.total_part_count(); ++j) {\n          const TestPartResult& test_part_result =\n              test_result.GetTestPartResult(j);\n          if (test_part_result.type() == TestPartResult::kSkip) {\n            const std::string& result = test_part_result.message();\n            printf(\"%s\\n\", result.c_str());\n          }\n        }\n        fflush(stdout);\n      } else if (!Test::HasFatalFailure()) {\n        for (int test_index = 0; test_index < total_test_suite_count();\n             test_index++) {\n          GetMutableSuiteCase(test_index)->Run();\n          if (GTEST_FLAG_GET(fail_fast) &&\n              GetMutableSuiteCase(test_index)->Failed()) {\n            for (int j = test_index + 1; j < total_test_suite_count(); j++) {\n              GetMutableSuiteCase(j)->Skip();\n            }\n            break;\n          }\n        }\n      } else if (Test::HasFatalFailure()) {\n        // If there was a fatal failure during the global setup then we know we\n        // aren't going to run any tests. Explicitly mark all of the tests as\n        // skipped to make this obvious in the output.\n        for (int test_index = 0; test_index < total_test_suite_count();\n             test_index++) {\n          GetMutableSuiteCase(test_index)->Skip();\n        }\n      }\n\n      // Tears down all environments in reverse order afterwards. If test\n      // environments aren't recreated for each iteration, only do so on the\n      // last iteration.\n      if (i == repeat - 1 || recreate_environments_when_repeating) {\n        repeater->OnEnvironmentsTearDownStart(*parent_);\n        std::for_each(environments_.rbegin(), environments_.rend(),\n                      TearDownEnvironment);\n        repeater->OnEnvironmentsTearDownEnd(*parent_);\n      }\n    }\n\n    elapsed_time_ = timer.Elapsed();\n\n    // Tells the unit test event listener that the tests have just finished.\n    repeater->OnTestIterationEnd(*parent_, i);\n\n    // Gets the result and clears it.\n    if (!Passed()) {\n      failed = true;\n    }\n\n    // Restores the original test order after the iteration.  This\n    // allows the user to quickly repro a failure that happens in the\n    // N-th iteration without repeating the first (N - 1) iterations.\n    // This is not enclosed in \"if (GTEST_FLAG(shuffle)) { ... }\", in\n    // case the user somehow changes the value of the flag somewhere\n    // (it's always safe to unshuffle the tests).\n    UnshuffleTests();\n\n    if (GTEST_FLAG_GET(shuffle)) {\n      // Picks a new random seed for each iteration.\n      random_seed_ = GetNextRandomSeed(random_seed_);\n    }\n  }\n\n  repeater->OnTestProgramEnd(*parent_);\n\n  if (!gtest_is_initialized_before_run_all_tests) {\n    ColoredPrintf(\n        GTestColor::kRed,\n        \"\\nIMPORTANT NOTICE - DO NOT IGNORE:\\n\"\n        \"This test program did NOT call \" GTEST_INIT_GOOGLE_TEST_NAME_\n        \"() before calling RUN_ALL_TESTS(). This is INVALID. Soon \" GTEST_NAME_\n        \" will start to enforce the valid usage. \"\n        \"Please fix it ASAP, or IT WILL START TO FAIL.\\n\");  // NOLINT\n#if GTEST_FOR_GOOGLE_\n    ColoredPrintf(GTestColor::kRed,\n                  \"For more details, see http://wiki/Main/ValidGUnitMain.\\n\");\n#endif  // GTEST_FOR_GOOGLE_\n  }\n\n  return !failed;\n}\n\n// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file\n// if the variable is present. If a file already exists at this location, this\n// function will write over it. If the variable is present, but the file cannot\n// be created, prints an error and exits.\nvoid WriteToShardStatusFileIfNeeded() {\n  const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile);\n  if (test_shard_file != nullptr) {\n    FILE* const file = posix::FOpen(test_shard_file, \"w\");\n    if (file == nullptr) {\n      ColoredPrintf(GTestColor::kRed,\n                    \"Could not write to the test shard status file \\\"%s\\\" \"\n                    \"specified by the %s environment variable.\\n\",\n                    test_shard_file, kTestShardStatusFile);\n      fflush(stdout);\n      exit(EXIT_FAILURE);\n    }\n    fclose(file);\n  }\n}\n\n// Checks whether sharding is enabled by examining the relevant\n// environment variable values. If the variables are present,\n// but inconsistent (i.e., shard_index >= total_shards), prints\n// an error and exits. If in_subprocess_for_death_test, sharding is\n// disabled because it must only be applied to the original test\n// process. Otherwise, we could filter out death tests we intended to execute.\nbool ShouldShard(const char* total_shards_env, const char* shard_index_env,\n                 bool in_subprocess_for_death_test) {\n  if (in_subprocess_for_death_test) {\n    return false;\n  }\n\n  const int32_t total_shards = Int32FromEnvOrDie(total_shards_env, -1);\n  const int32_t shard_index = Int32FromEnvOrDie(shard_index_env, -1);\n\n  if (total_shards == -1 && shard_index == -1) {\n    return false;\n  } else if (total_shards == -1 && shard_index != -1) {\n    const Message msg = Message() << \"Invalid environment variables: you have \"\n                                  << kTestShardIndex << \" = \" << shard_index\n                                  << \", but have left \" << kTestTotalShards\n                                  << \" unset.\\n\";\n    ColoredPrintf(GTestColor::kRed, \"%s\", msg.GetString().c_str());\n    fflush(stdout);\n    exit(EXIT_FAILURE);\n  } else if (total_shards != -1 && shard_index == -1) {\n    const Message msg = Message()\n                        << \"Invalid environment variables: you have \"\n                        << kTestTotalShards << \" = \" << total_shards\n                        << \", but have left \" << kTestShardIndex << \" unset.\\n\";\n    ColoredPrintf(GTestColor::kRed, \"%s\", msg.GetString().c_str());\n    fflush(stdout);\n    exit(EXIT_FAILURE);\n  } else if (shard_index < 0 || shard_index >= total_shards) {\n    const Message msg =\n        Message() << \"Invalid environment variables: we require 0 <= \"\n                  << kTestShardIndex << \" < \" << kTestTotalShards\n                  << \", but you have \" << kTestShardIndex << \"=\" << shard_index\n                  << \", \" << kTestTotalShards << \"=\" << total_shards << \".\\n\";\n    ColoredPrintf(GTestColor::kRed, \"%s\", msg.GetString().c_str());\n    fflush(stdout);\n    exit(EXIT_FAILURE);\n  }\n\n  return total_shards > 1;\n}\n\n// Parses the environment variable var as an Int32. If it is unset,\n// returns default_val. If it is not an Int32, prints an error\n// and aborts.\nint32_t Int32FromEnvOrDie(const char* var, int32_t default_val) {\n  const char* str_val = posix::GetEnv(var);\n  if (str_val == nullptr) {\n    return default_val;\n  }\n\n  int32_t result;\n  if (!ParseInt32(Message() << \"The value of environment variable \" << var,\n                  str_val, &result)) {\n    exit(EXIT_FAILURE);\n  }\n  return result;\n}\n\n// Given the total number of shards, the shard index, and the test id,\n// returns true if and only if the test should be run on this shard. The test id\n// is some arbitrary but unique non-negative integer assigned to each test\n// method. Assumes that 0 <= shard_index < total_shards.\nbool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) {\n  return (test_id % total_shards) == shard_index;\n}\n\n// Compares the name of each test with the user-specified filter to\n// decide whether the test should be run, then records the result in\n// each TestSuite and TestInfo object.\n// If shard_tests == true, further filters tests based on sharding\n// variables in the environment - see\n// https://github.com/google/googletest/blob/master/googletest/docs/advanced.md\n// . Returns the number of tests that should run.\nint UnitTestImpl::FilterTests(ReactionToSharding shard_tests) {\n  const int32_t total_shards = shard_tests == HONOR_SHARDING_PROTOCOL\n                                   ? Int32FromEnvOrDie(kTestTotalShards, -1)\n                                   : -1;\n  const int32_t shard_index = shard_tests == HONOR_SHARDING_PROTOCOL\n                                  ? Int32FromEnvOrDie(kTestShardIndex, -1)\n                                  : -1;\n\n  const PositiveAndNegativeUnitTestFilter gtest_flag_filter(\n      GTEST_FLAG_GET(filter));\n  const UnitTestFilter disable_test_filter(kDisableTestFilter);\n  // num_runnable_tests are the number of tests that will\n  // run across all shards (i.e., match filter and are not disabled).\n  // num_selected_tests are the number of tests to be run on\n  // this shard.\n  int num_runnable_tests = 0;\n  int num_selected_tests = 0;\n  for (auto* test_suite : test_suites_) {\n    const std::string& test_suite_name = test_suite->name();\n    test_suite->set_should_run(false);\n\n    for (size_t j = 0; j < test_suite->test_info_list().size(); j++) {\n      TestInfo* const test_info = test_suite->test_info_list()[j];\n      const std::string test_name(test_info->name());\n      // A test is disabled if test suite name or test name matches\n      // kDisableTestFilter.\n      const bool is_disabled =\n          disable_test_filter.MatchesName(test_suite_name) ||\n          disable_test_filter.MatchesName(test_name);\n      test_info->is_disabled_ = is_disabled;\n\n      const bool matches_filter =\n          gtest_flag_filter.MatchesTest(test_suite_name, test_name);\n      test_info->matches_filter_ = matches_filter;\n\n      const bool is_runnable =\n          (GTEST_FLAG_GET(also_run_disabled_tests) || !is_disabled) &&\n          matches_filter;\n\n      const bool is_in_another_shard =\n          shard_tests != IGNORE_SHARDING_PROTOCOL &&\n          !ShouldRunTestOnShard(total_shards, shard_index, num_runnable_tests);\n      test_info->is_in_another_shard_ = is_in_another_shard;\n      const bool is_selected = is_runnable && !is_in_another_shard;\n\n      num_runnable_tests += is_runnable;\n      num_selected_tests += is_selected;\n\n      test_info->should_run_ = is_selected;\n      test_suite->set_should_run(test_suite->should_run() || is_selected);\n    }\n  }\n  return num_selected_tests;\n}\n\n// Prints the given C-string on a single line by replacing all '\\n'\n// characters with string \"\\\\n\".  If the output takes more than\n// max_length characters, only prints the first max_length characters\n// and \"...\".\nstatic void PrintOnOneLine(const char* str, int max_length) {\n  if (str != nullptr) {\n    for (int i = 0; *str != '\\0'; ++str) {\n      if (i >= max_length) {\n        printf(\"...\");\n        break;\n      }\n      if (*str == '\\n') {\n        printf(\"\\\\n\");\n        i += 2;\n      } else {\n        printf(\"%c\", *str);\n        ++i;\n      }\n    }\n  }\n}\n\n// Prints the names of the tests matching the user-specified filter flag.\nvoid UnitTestImpl::ListTestsMatchingFilter() {\n  // Print at most this many characters for each type/value parameter.\n  const int kMaxParamLength = 250;\n\n  for (auto* test_suite : test_suites_) {\n    bool printed_test_suite_name = false;\n\n    for (size_t j = 0; j < test_suite->test_info_list().size(); j++) {\n      const TestInfo* const test_info = test_suite->test_info_list()[j];\n      if (test_info->matches_filter_) {\n        if (!printed_test_suite_name) {\n          printed_test_suite_name = true;\n          printf(\"%s.\", test_suite->name());\n          if (test_suite->type_param() != nullptr) {\n            printf(\"  # %s = \", kTypeParamLabel);\n            // We print the type parameter on a single line to make\n            // the output easy to parse by a program.\n            PrintOnOneLine(test_suite->type_param(), kMaxParamLength);\n          }\n          printf(\"\\n\");\n        }\n        printf(\"  %s\", test_info->name());\n        if (test_info->value_param() != nullptr) {\n          printf(\"  # %s = \", kValueParamLabel);\n          // We print the value parameter on a single line to make the\n          // output easy to parse by a program.\n          PrintOnOneLine(test_info->value_param(), kMaxParamLength);\n        }\n        printf(\"\\n\");\n      }\n    }\n  }\n  fflush(stdout);\n  const std::string& output_format = UnitTestOptions::GetOutputFormat();\n  if (output_format == \"xml\" || output_format == \"json\") {\n    FILE* fileout = OpenFileForWriting(\n        UnitTestOptions::GetAbsolutePathToOutputFile().c_str());\n    std::stringstream stream;\n    if (output_format == \"xml\") {\n      XmlUnitTestResultPrinter(\n          UnitTestOptions::GetAbsolutePathToOutputFile().c_str())\n          .PrintXmlTestsList(&stream, test_suites_);\n    } else if (output_format == \"json\") {\n      JsonUnitTestResultPrinter(\n          UnitTestOptions::GetAbsolutePathToOutputFile().c_str())\n          .PrintJsonTestList(&stream, test_suites_);\n    }\n    fprintf(fileout, \"%s\", StringStreamToString(&stream).c_str());\n    fclose(fileout);\n  }\n}\n\n// Sets the OS stack trace getter.\n//\n// Does nothing if the input and the current OS stack trace getter are\n// the same; otherwise, deletes the old getter and makes the input the\n// current getter.\nvoid UnitTestImpl::set_os_stack_trace_getter(\n    OsStackTraceGetterInterface* getter) {\n  if (os_stack_trace_getter_ != getter) {\n    delete os_stack_trace_getter_;\n    os_stack_trace_getter_ = getter;\n  }\n}\n\n// Returns the current OS stack trace getter if it is not NULL;\n// otherwise, creates an OsStackTraceGetter, makes it the current\n// getter, and returns it.\nOsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() {\n  if (os_stack_trace_getter_ == nullptr) {\n#ifdef GTEST_OS_STACK_TRACE_GETTER_\n    os_stack_trace_getter_ = new GTEST_OS_STACK_TRACE_GETTER_;\n#else\n    os_stack_trace_getter_ = new OsStackTraceGetter;\n#endif  // GTEST_OS_STACK_TRACE_GETTER_\n  }\n\n  return os_stack_trace_getter_;\n}\n\n// Returns the most specific TestResult currently running.\nTestResult* UnitTestImpl::current_test_result() {\n  if (current_test_info_ != nullptr) {\n    return &current_test_info_->result_;\n  }\n  if (current_test_suite_ != nullptr) {\n    return &current_test_suite_->ad_hoc_test_result_;\n  }\n  return &ad_hoc_test_result_;\n}\n\n// Shuffles all test suites, and the tests within each test suite,\n// making sure that death tests are still run first.\nvoid UnitTestImpl::ShuffleTests() {\n  // Shuffles the death test suites.\n  ShuffleRange(random(), 0, last_death_test_suite_ + 1, &test_suite_indices_);\n\n  // Shuffles the non-death test suites.\n  ShuffleRange(random(), last_death_test_suite_ + 1,\n               static_cast<int>(test_suites_.size()), &test_suite_indices_);\n\n  // Shuffles the tests inside each test suite.\n  for (auto& test_suite : test_suites_) {\n    test_suite->ShuffleTests(random());\n  }\n}\n\n// Restores the test suites and tests to their order before the first shuffle.\nvoid UnitTestImpl::UnshuffleTests() {\n  for (size_t i = 0; i < test_suites_.size(); i++) {\n    // Unshuffles the tests in each test suite.\n    test_suites_[i]->UnshuffleTests();\n    // Resets the index of each test suite.\n    test_suite_indices_[i] = static_cast<int>(i);\n  }\n}\n\n// Returns the current OS stack trace as an std::string.\n//\n// The maximum number of stack frames to be included is specified by\n// the gtest_stack_trace_depth flag.  The skip_count parameter\n// specifies the number of top frames to be skipped, which doesn't\n// count against the number of frames to be included.\n//\n// For example, if Foo() calls Bar(), which in turn calls\n// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in\n// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't.\nGTEST_NO_INLINE_ GTEST_NO_TAIL_CALL_ std::string\nGetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/, int skip_count) {\n  // We pass skip_count + 1 to skip this wrapper function in addition\n  // to what the user really wants to skip.\n  return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1);\n}\n\n// Used by the GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_ macro to\n// suppress unreachable code warnings.\nnamespace {\nclass ClassUniqueToAlwaysTrue {};\n}  // namespace\n\nbool IsTrue(bool condition) { return condition; }\n\nbool AlwaysTrue() {\n#if GTEST_HAS_EXCEPTIONS\n  // This condition is always false so AlwaysTrue() never actually throws,\n  // but it makes the compiler think that it may throw.\n  if (IsTrue(false)) throw ClassUniqueToAlwaysTrue();\n#endif  // GTEST_HAS_EXCEPTIONS\n  return true;\n}\n\n// If *pstr starts with the given prefix, modifies *pstr to be right\n// past the prefix and returns true; otherwise leaves *pstr unchanged\n// and returns false.  None of pstr, *pstr, and prefix can be NULL.\nbool SkipPrefix(const char* prefix, const char** pstr) {\n  const size_t prefix_len = strlen(prefix);\n  if (strncmp(*pstr, prefix, prefix_len) == 0) {\n    *pstr += prefix_len;\n    return true;\n  }\n  return false;\n}\n\n// Parses a string as a command line flag.  The string should have\n// the format \"--flag=value\".  When def_optional is true, the \"=value\"\n// part can be omitted.\n//\n// Returns the value of the flag, or NULL if the parsing failed.\nstatic const char* ParseFlagValue(const char* str, const char* flag_name,\n                                  bool def_optional) {\n  // str and flag must not be NULL.\n  if (str == nullptr || flag_name == nullptr) return nullptr;\n\n  // The flag must start with \"--\" followed by GTEST_FLAG_PREFIX_.\n  const std::string flag_str =\n      std::string(\"--\") + GTEST_FLAG_PREFIX_ + flag_name;\n  const size_t flag_len = flag_str.length();\n  if (strncmp(str, flag_str.c_str(), flag_len) != 0) return nullptr;\n\n  // Skips the flag name.\n  const char* flag_end = str + flag_len;\n\n  // When def_optional is true, it's OK to not have a \"=value\" part.\n  if (def_optional && (flag_end[0] == '\\0')) {\n    return flag_end;\n  }\n\n  // If def_optional is true and there are more characters after the\n  // flag name, or if def_optional is false, there must be a '=' after\n  // the flag name.\n  if (flag_end[0] != '=') return nullptr;\n\n  // Returns the string after \"=\".\n  return flag_end + 1;\n}\n\n// Parses a string for a bool flag, in the form of either\n// \"--flag=value\" or \"--flag\".\n//\n// In the former case, the value is taken as true as long as it does\n// not start with '0', 'f', or 'F'.\n//\n// In the latter case, the value is taken as true.\n//\n// On success, stores the value of the flag in *value, and returns\n// true.  On failure, returns false without changing *value.\nstatic bool ParseFlag(const char* str, const char* flag_name, bool* value) {\n  // Gets the value of the flag as a string.\n  const char* const value_str = ParseFlagValue(str, flag_name, true);\n\n  // Aborts if the parsing failed.\n  if (value_str == nullptr) return false;\n\n  // Converts the string value to a bool.\n  *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F');\n  return true;\n}\n\n// Parses a string for an int32_t flag, in the form of \"--flag=value\".\n//\n// On success, stores the value of the flag in *value, and returns\n// true.  On failure, returns false without changing *value.\nbool ParseFlag(const char* str, const char* flag_name, int32_t* value) {\n  // Gets the value of the flag as a string.\n  const char* const value_str = ParseFlagValue(str, flag_name, false);\n\n  // Aborts if the parsing failed.\n  if (value_str == nullptr) return false;\n\n  // Sets *value to the value of the flag.\n  return ParseInt32(Message() << \"The value of flag --\" << flag_name, value_str,\n                    value);\n}\n\n// Parses a string for a string flag, in the form of \"--flag=value\".\n//\n// On success, stores the value of the flag in *value, and returns\n// true.  On failure, returns false without changing *value.\ntemplate <typename String>\nstatic bool ParseFlag(const char* str, const char* flag_name, String* value) {\n  // Gets the value of the flag as a string.\n  const char* const value_str = ParseFlagValue(str, flag_name, false);\n\n  // Aborts if the parsing failed.\n  if (value_str == nullptr) return false;\n\n  // Sets *value to the value of the flag.\n  *value = value_str;\n  return true;\n}\n\n// Determines whether a string has a prefix that Google Test uses for its\n// flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_.\n// If Google Test detects that a command line flag has its prefix but is not\n// recognized, it will print its help message. Flags starting with\n// GTEST_INTERNAL_PREFIX_ followed by \"internal_\" are considered Google Test\n// internal flags and do not trigger the help message.\nstatic bool HasGoogleTestFlagPrefix(const char* str) {\n  return (SkipPrefix(\"--\", &str) || SkipPrefix(\"-\", &str) ||\n          SkipPrefix(\"/\", &str)) &&\n         !SkipPrefix(GTEST_FLAG_PREFIX_ \"internal_\", &str) &&\n         (SkipPrefix(GTEST_FLAG_PREFIX_, &str) ||\n          SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str));\n}\n\n// Prints a string containing code-encoded text.  The following escape\n// sequences can be used in the string to control the text color:\n//\n//   @@    prints a single '@' character.\n//   @R    changes the color to red.\n//   @G    changes the color to green.\n//   @Y    changes the color to yellow.\n//   @D    changes to the default terminal text color.\n//\nstatic void PrintColorEncoded(const char* str) {\n  GTestColor color = GTestColor::kDefault;  // The current color.\n\n  // Conceptually, we split the string into segments divided by escape\n  // sequences.  Then we print one segment at a time.  At the end of\n  // each iteration, the str pointer advances to the beginning of the\n  // next segment.\n  for (;;) {\n    const char* p = strchr(str, '@');\n    if (p == nullptr) {\n      ColoredPrintf(color, \"%s\", str);\n      return;\n    }\n\n    ColoredPrintf(color, \"%s\", std::string(str, p).c_str());\n\n    const char ch = p[1];\n    str = p + 2;\n    if (ch == '@') {\n      ColoredPrintf(color, \"@\");\n    } else if (ch == 'D') {\n      color = GTestColor::kDefault;\n    } else if (ch == 'R') {\n      color = GTestColor::kRed;\n    } else if (ch == 'G') {\n      color = GTestColor::kGreen;\n    } else if (ch == 'Y') {\n      color = GTestColor::kYellow;\n    } else {\n      --str;\n    }\n  }\n}\n\nstatic const char kColorEncodedHelpMessage[] =\n    \"This program contains tests written using \" GTEST_NAME_\n    \". You can use the\\n\"\n    \"following command line flags to control its behavior:\\n\"\n    \"\\n\"\n    \"Test Selection:\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"list_tests@D\\n\"\n    \"      List the names of all tests instead of running them. The name of\\n\"\n    \"      TEST(Foo, Bar) is \\\"Foo.Bar\\\".\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"filter=@YPOSITIVE_PATTERNS\"\n    \"[@G-@YNEGATIVE_PATTERNS]@D\\n\"\n    \"      Run only the tests whose name matches one of the positive patterns \"\n    \"but\\n\"\n    \"      none of the negative patterns. '?' matches any single character; \"\n    \"'*'\\n\"\n    \"      matches any substring; ':' separates two patterns.\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"also_run_disabled_tests@D\\n\"\n    \"      Run all disabled tests too.\\n\"\n    \"\\n\"\n    \"Test Execution:\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"repeat=@Y[COUNT]@D\\n\"\n    \"      Run the tests repeatedly; use a negative count to repeat forever.\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"shuffle@D\\n\"\n    \"      Randomize tests' orders on every iteration.\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"random_seed=@Y[NUMBER]@D\\n\"\n    \"      Random number seed to use for shuffling test orders (between 1 and\\n\"\n    \"      99999, or 0 to use a seed based on the current time).\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"recreate_environments_when_repeating@D\\n\"\n    \"      Sets up and tears down the global test environment on each repeat\\n\"\n    \"      of the test.\\n\"\n    \"\\n\"\n    \"Test Output:\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"color=@Y(@Gyes@Y|@Gno@Y|@Gauto@Y)@D\\n\"\n    \"      Enable/disable colored output. The default is @Gauto@D.\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"brief=1@D\\n\"\n    \"      Only print test failures.\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"print_time=0@D\\n\"\n    \"      Don't print the elapsed time of each test.\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"output=@Y(@Gjson@Y|@Gxml@Y)[@G:@YDIRECTORY_PATH@G\" GTEST_PATH_SEP_\n    \"@Y|@G:@YFILE_PATH]@D\\n\"\n    \"      Generate a JSON or XML report in the given directory or with the \"\n    \"given\\n\"\n    \"      file name. @YFILE_PATH@D defaults to @Gtest_detail.xml@D.\\n\"\n#if GTEST_CAN_STREAM_RESULTS_\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"stream_result_to=@YHOST@G:@YPORT@D\\n\"\n    \"      Stream test results to the given server.\\n\"\n#endif  // GTEST_CAN_STREAM_RESULTS_\n    \"\\n\"\n    \"Assertion Behavior:\\n\"\n#if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"death_test_style=@Y(@Gfast@Y|@Gthreadsafe@Y)@D\\n\"\n    \"      Set the default death test style.\\n\"\n#endif  // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"break_on_failure@D\\n\"\n    \"      Turn assertion failures into debugger break-points.\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"throw_on_failure@D\\n\"\n    \"      Turn assertion failures into C++ exceptions for use by an external\\n\"\n    \"      test framework.\\n\"\n    \"  @G--\" GTEST_FLAG_PREFIX_\n    \"catch_exceptions=0@D\\n\"\n    \"      Do not report exceptions as test failures. Instead, allow them\\n\"\n    \"      to crash the program or throw a pop-up (on Windows).\\n\"\n    \"\\n\"\n    \"Except for @G--\" GTEST_FLAG_PREFIX_\n    \"list_tests@D, you can alternatively set \"\n    \"the corresponding\\n\"\n    \"environment variable of a flag (all letters in upper-case). For example, \"\n    \"to\\n\"\n    \"disable colored text output, you can either specify \"\n    \"@G--\" GTEST_FLAG_PREFIX_\n    \"color=no@D or set\\n\"\n    \"the @G\" GTEST_FLAG_PREFIX_UPPER_\n    \"COLOR@D environment variable to @Gno@D.\\n\"\n    \"\\n\"\n    \"For more information, please read the \" GTEST_NAME_\n    \" documentation at\\n\"\n    \"@G\" GTEST_PROJECT_URL_ \"@D. If you find a bug in \" GTEST_NAME_\n    \"\\n\"\n    \"(not one in your own code or tests), please report it to\\n\"\n    \"@G<\" GTEST_DEV_EMAIL_ \">@D.\\n\";\n\nstatic bool ParseGoogleTestFlag(const char* const arg) {\n#define GTEST_INTERNAL_PARSE_FLAG(flag_name)  \\\n  do {                                        \\\n    auto value = GTEST_FLAG_GET(flag_name);   \\\n    if (ParseFlag(arg, #flag_name, &value)) { \\\n      GTEST_FLAG_SET(flag_name, value);       \\\n      return true;                            \\\n    }                                         \\\n  } while (false)\n\n  GTEST_INTERNAL_PARSE_FLAG(also_run_disabled_tests);\n  GTEST_INTERNAL_PARSE_FLAG(break_on_failure);\n  GTEST_INTERNAL_PARSE_FLAG(catch_exceptions);\n  GTEST_INTERNAL_PARSE_FLAG(color);\n  GTEST_INTERNAL_PARSE_FLAG(death_test_style);\n  GTEST_INTERNAL_PARSE_FLAG(death_test_use_fork);\n  GTEST_INTERNAL_PARSE_FLAG(fail_fast);\n  GTEST_INTERNAL_PARSE_FLAG(filter);\n  GTEST_INTERNAL_PARSE_FLAG(internal_run_death_test);\n  GTEST_INTERNAL_PARSE_FLAG(list_tests);\n  GTEST_INTERNAL_PARSE_FLAG(output);\n  GTEST_INTERNAL_PARSE_FLAG(brief);\n  GTEST_INTERNAL_PARSE_FLAG(print_time);\n  GTEST_INTERNAL_PARSE_FLAG(print_utf8);\n  GTEST_INTERNAL_PARSE_FLAG(random_seed);\n  GTEST_INTERNAL_PARSE_FLAG(repeat);\n  GTEST_INTERNAL_PARSE_FLAG(recreate_environments_when_repeating);\n  GTEST_INTERNAL_PARSE_FLAG(shuffle);\n  GTEST_INTERNAL_PARSE_FLAG(stack_trace_depth);\n  GTEST_INTERNAL_PARSE_FLAG(stream_result_to);\n  GTEST_INTERNAL_PARSE_FLAG(throw_on_failure);\n  return false;\n}\n\n#if GTEST_USE_OWN_FLAGFILE_FLAG_\nstatic void LoadFlagsFromFile(const std::string& path) {\n  FILE* flagfile = posix::FOpen(path.c_str(), \"r\");\n  if (!flagfile) {\n    GTEST_LOG_(FATAL) << \"Unable to open file \\\"\" << GTEST_FLAG_GET(flagfile)\n                      << \"\\\"\";\n  }\n  std::string contents(ReadEntireFile(flagfile));\n  posix::FClose(flagfile);\n  std::vector<std::string> lines;\n  SplitString(contents, '\\n', &lines);\n  for (size_t i = 0; i < lines.size(); ++i) {\n    if (lines[i].empty()) continue;\n    if (!ParseGoogleTestFlag(lines[i].c_str())) g_help_flag = true;\n  }\n}\n#endif  // GTEST_USE_OWN_FLAGFILE_FLAG_\n\n// Parses the command line for Google Test flags, without initializing\n// other parts of Google Test.  The type parameter CharType can be\n// instantiated to either char or wchar_t.\ntemplate <typename CharType>\nvoid ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) {\n  std::string flagfile_value;\n  for (int i = 1; i < *argc; i++) {\n    const std::string arg_string = StreamableToString(argv[i]);\n    const char* const arg = arg_string.c_str();\n\n    using internal::ParseFlag;\n\n    bool remove_flag = false;\n    if (ParseGoogleTestFlag(arg)) {\n      remove_flag = true;\n#if GTEST_USE_OWN_FLAGFILE_FLAG_\n    } else if (ParseFlag(arg, \"flagfile\", &flagfile_value)) {\n      GTEST_FLAG_SET(flagfile, flagfile_value);\n      LoadFlagsFromFile(flagfile_value);\n      remove_flag = true;\n#endif  // GTEST_USE_OWN_FLAGFILE_FLAG_\n    } else if (arg_string == \"--help\" || HasGoogleTestFlagPrefix(arg)) {\n      // Both help flag and unrecognized Google Test flags (excluding\n      // internal ones) trigger help display.\n      g_help_flag = true;\n    }\n\n    if (remove_flag) {\n      // Shift the remainder of the argv list left by one.  Note\n      // that argv has (*argc + 1) elements, the last one always being\n      // NULL.  The following loop moves the trailing NULL element as\n      // well.\n      for (int j = i; j != *argc; j++) {\n        argv[j] = argv[j + 1];\n      }\n\n      // Decrements the argument count.\n      (*argc)--;\n\n      // We also need to decrement the iterator as we just removed\n      // an element.\n      i--;\n    }\n  }\n\n  if (g_help_flag) {\n    // We print the help here instead of in RUN_ALL_TESTS(), as the\n    // latter may not be called at all if the user is using Google\n    // Test with another testing framework.\n    PrintColorEncoded(kColorEncodedHelpMessage);\n  }\n}\n\n// Parses the command line for Google Test flags, without initializing\n// other parts of Google Test.\nvoid ParseGoogleTestFlagsOnly(int* argc, char** argv) {\n#if GTEST_HAS_ABSL\n  if (*argc > 0) {\n    // absl::ParseCommandLine() requires *argc > 0.\n    auto positional_args = absl::flags_internal::ParseCommandLineImpl(\n        *argc, argv, absl::flags_internal::ArgvListAction::kRemoveParsedArgs,\n        absl::flags_internal::UsageFlagsAction::kHandleUsage,\n        absl::flags_internal::OnUndefinedFlag::kReportUndefined);\n    // Any command-line positional arguments not part of any command-line flag\n    // (or arguments to a flag) are copied back out to argv, with the program\n    // invocation name at position 0, and argc is resized. This includes\n    // positional arguments after the flag-terminating delimiter '--'.\n    // See https://abseil.io/docs/cpp/guides/flags.\n    std::copy(positional_args.begin(), positional_args.end(), argv);\n    if (static_cast<int>(positional_args.size()) < *argc) {\n      argv[positional_args.size()] = nullptr;\n      *argc = static_cast<int>(positional_args.size());\n    }\n  }\n#else\n  ParseGoogleTestFlagsOnlyImpl(argc, argv);\n#endif\n\n  // Fix the value of *_NSGetArgc() on macOS, but if and only if\n  // *_NSGetArgv() == argv\n  // Only applicable to char** version of argv\n#if GTEST_OS_MAC\n#ifndef GTEST_OS_IOS\n  if (*_NSGetArgv() == argv) {\n    *_NSGetArgc() = *argc;\n  }\n#endif\n#endif\n}\nvoid ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) {\n  ParseGoogleTestFlagsOnlyImpl(argc, argv);\n}\n\n// The internal implementation of InitGoogleTest().\n//\n// The type parameter CharType can be instantiated to either char or\n// wchar_t.\ntemplate <typename CharType>\nvoid InitGoogleTestImpl(int* argc, CharType** argv) {\n  // We don't want to run the initialization code twice.\n  if (GTestIsInitialized()) return;\n\n  if (*argc <= 0) return;\n\n  g_argvs.clear();\n  for (int i = 0; i != *argc; i++) {\n    g_argvs.push_back(StreamableToString(argv[i]));\n  }\n\n#if GTEST_HAS_ABSL\n  absl::InitializeSymbolizer(g_argvs[0].c_str());\n\n  // When using the Abseil Flags library, set the program usage message to the\n  // help message, but remove the color-encoding from the message first.\n  absl::SetProgramUsageMessage(absl::StrReplaceAll(\n      kColorEncodedHelpMessage,\n      {{\"@D\", \"\"}, {\"@R\", \"\"}, {\"@G\", \"\"}, {\"@Y\", \"\"}, {\"@@\", \"@\"}}));\n#endif  // GTEST_HAS_ABSL\n\n  ParseGoogleTestFlagsOnly(argc, argv);\n  GetUnitTestImpl()->PostFlagParsingInit();\n}\n\n}  // namespace internal\n\n// Initializes Google Test.  This must be called before calling\n// RUN_ALL_TESTS().  In particular, it parses a command line for the\n// flags that Google Test recognizes.  Whenever a Google Test flag is\n// seen, it is removed from argv, and *argc is decremented.\n//\n// No value is returned.  Instead, the Google Test flag variables are\n// updated.\n//\n// Calling the function for the second time has no user-visible effect.\nvoid InitGoogleTest(int* argc, char** argv) {\n#if defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)\n  GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_(argc, argv);\n#else   // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)\n  internal::InitGoogleTestImpl(argc, argv);\n#endif  // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)\n}\n\n// This overloaded version can be used in Windows programs compiled in\n// UNICODE mode.\nvoid InitGoogleTest(int* argc, wchar_t** argv) {\n#if defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)\n  GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_(argc, argv);\n#else   // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)\n  internal::InitGoogleTestImpl(argc, argv);\n#endif  // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)\n}\n\n// This overloaded version can be used on Arduino/embedded platforms where\n// there is no argc/argv.\nvoid InitGoogleTest() {\n  // Since Arduino doesn't have a command line, fake out the argc/argv arguments\n  int argc = 1;\n  const auto arg0 = \"dummy\";\n  char* argv0 = const_cast<char*>(arg0);\n  char** argv = &argv0;\n\n#if defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)\n  GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_(&argc, argv);\n#else   // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)\n  internal::InitGoogleTestImpl(&argc, argv);\n#endif  // defined(GTEST_CUSTOM_INIT_GOOGLE_TEST_FUNCTION_)\n}\n\n#if !defined(GTEST_CUSTOM_TEMPDIR_FUNCTION_)\n// Return value of first environment variable that is set and contains\n// a non-empty string. If there are none, return the \"fallback\" string.\n// Since we like the temporary directory to have a directory separator suffix,\n// add it if not provided in the environment variable value.\nstatic std::string GetTempDirFromEnv(\n    std::initializer_list<const char*> environment_variables,\n    const char* fallback, char separator) {\n  for (const char* variable_name : environment_variables) {\n    const char* value = internal::posix::GetEnv(variable_name);\n    if (value != nullptr && value[0] != '\\0') {\n      if (value[strlen(value) - 1] != separator) {\n        return std::string(value).append(1, separator);\n      }\n      return value;\n    }\n  }\n  return fallback;\n}\n#endif\n\nstd::string TempDir() {\n#if defined(GTEST_CUSTOM_TEMPDIR_FUNCTION_)\n  return GTEST_CUSTOM_TEMPDIR_FUNCTION_();\n#elif GTEST_OS_WINDOWS || GTEST_OS_WINDOWS_MOBILE\n  return GetTempDirFromEnv({\"TEST_TMPDIR\", \"TEMP\"}, \"\\\\temp\\\\\", '\\\\');\n#elif GTEST_OS_LINUX_ANDROID\n  return GetTempDirFromEnv({\"TEST_TMPDIR\", \"TMPDIR\"}, \"/data/local/tmp/\", '/');\n#else\n  return GetTempDirFromEnv({\"TEST_TMPDIR\", \"TMPDIR\"}, \"/tmp/\", '/');\n#endif\n}\n\n// Class ScopedTrace\n\n// Pushes the given source file location and message onto a per-thread\n// trace stack maintained by Google Test.\nvoid ScopedTrace::PushTrace(const char* file, int line, std::string message) {\n  internal::TraceInfo trace;\n  trace.file = file;\n  trace.line = line;\n  trace.message.swap(message);\n\n  UnitTest::GetInstance()->PushGTestTrace(trace);\n}\n\n// Pops the info pushed by the c'tor.\nScopedTrace::~ScopedTrace() GTEST_LOCK_EXCLUDED_(&UnitTest::mutex_) {\n  UnitTest::GetInstance()->PopGTestTrace();\n}\n\n}  // namespace testing\n"
  },
  {
    "path": "tests/gtest/src/gtest_main.cc",
    "content": "// Copyright 2006, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n#include <cstdio>\n\n#include \"gtest/gtest.h\"\n\n#if GTEST_OS_ESP8266 || GTEST_OS_ESP32\n#if GTEST_OS_ESP8266\nextern \"C\" {\n#endif\nvoid setup() { testing::InitGoogleTest(); }\n\nvoid loop() { RUN_ALL_TESTS(); }\n\n#if GTEST_OS_ESP8266\n}\n#endif\n\n#else\n\nGTEST_API_ int main(int argc, char **argv) {\n  printf(\"Running main() from %s\\n\", __FILE__);\n  testing::InitGoogleTest(&argc, argv);\n  return RUN_ALL_TESTS();\n}\n#endif\n"
  },
  {
    "path": "tests/normalize.xsl",
    "content": "<?xml version=\"1.0\"?>\n<!-- *********************************************************************\n** Stylesheet to rearrange font-/path-elements in an SVG file.          **\n** It's part of the dvisvgm package.                                    **\n** Copyright (C) 2009-2025 Martin Gieseking <martin.gieseking@uos.de>   **\n**                                                                      **\n** This program is free software; you can redistribute it and/or        **\n** modify it under the terms of the GNU General Public License as       **\n** published by the Free Software Foundation; either version 3 of       **\n** the License, or (at your option) any later version.                  **\n**                                                                      **\n** This program is distributed in the hope that it will be useful, but  **\n** WITHOUT ANY WARRANTY; without even the implied warranty of           **\n** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the         **\n** GNU General Public License for more details.                         **\n**                                                                      **\n** You should have received a copy of the GNU General Public License    **\n** along with this program; if not, see <http://www.gnu.org/licenses/>. **\n**                                                                      **\n** The code generated by this script is also licensed under the terms   **\n** of the GNU general public license version 3 or later.                **\n***********************************************************************-->\n<xsl:stylesheet version=\"1.0\" \n  xmlns=\"http://www.w3.org/2000/svg\"\n  xmlns:svg=\"http://www.w3.org/2000/svg\"\n  xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\n  xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n  xmlns:exsl=\"http://exslt.org/common\"\n  xmlns:str=\"http://exslt.org/strings\"\n  xmlns:mg=\"my-namespace\"\n  extension-element-prefixes=\"exsl str\"\n  exclude-result-prefixes=\"svg xlink exsl str mg\">\n\n  <xsl:key name=\"path-by-id\" match=\"/svg:defs/svg:path\" use=\"@id\"/>\n\n\n  <xsl:variable name=\"styles-rtf\">\n    <xsl:for-each select=\"str:tokenize(/*/svg:style[@type='text/css'], '&#10;')\">\n      <xsl:sort select=\"substring-after(., ' ')\"/>\n      <mg:style new-id=\"f{position()}\" id=\"{substring-before(substring-after(., '.'), ' ')}\">\n        <xsl:value-of select=\"substring-after(., ' ')\"/>\n      </mg:style>\n    </xsl:for-each>\n  </xsl:variable>\n\n  <xsl:variable name=\"styles\" select=\"exsl:node-set($styles-rtf)/mg:style\"/>\n\n  <xsl:variable name=\"num-paths\" select=\"count(/*/svg:defs/svg:path)\"/>\n\n  <xsl:variable name=\"defs-rtf\">\n    <xsl:for-each select=\"/*/svg:defs/svg:path\">\n      <xsl:sort select=\"@d\"/>\n      <mg:path id=\"{@id}\" new-id=\"g{position()}\"/>\n    </xsl:for-each>\n    <xsl:for-each select=\"/*/svg:defs/svg:use\">\n      <xsl:sort select=\"concat(key('path-by-id', substring(@xlink:href, 2))/@d, @transform)\"/>\n      <mg:use id=\"{@id}\" new-id=\"g{position()+$num-paths}\"/>\n    </xsl:for-each>\n  </xsl:variable>\n\n  <xsl:variable name=\"defs\" select=\"exsl:node-set($defs-rtf)\"/>\n\n\n  <xsl:template match=\"*|@*\">\n    <xsl:copy>\n      <xsl:apply-templates select=\"@*|node()\"/>\n    </xsl:copy>\n  </xsl:template>\n\n\n  <xsl:template match=\"svg:defs[svg:path]\">\n    <xsl:copy>\n      <xsl:apply-templates select=\"svg:path\">\n        <xsl:sort select=\"@d\"/>\n      </xsl:apply-templates>\n      <xsl:apply-templates select=\"svg:use\">\n        <xsl:sort select=\"$defs/mg:use[@id=current()/@id]/@new-id\"/>\n      </xsl:apply-templates>\n    </xsl:copy>\n  </xsl:template>\n\n\n  <xsl:template match=\"svg:defs[svg:font]\">\n    <xsl:copy>\n      <xsl:apply-templates>\n        <xsl:sort select=\"@id\"/>\n      </xsl:apply-templates>\n    </xsl:copy>\n  </xsl:template>\n\n\n  <xsl:template match=\"svg:defs/svg:path\">\n    <path id=\"{$defs/mg:path[@id=current()/@id]/@new-id}\" d=\"{@d}\"/>\n  </xsl:template>\n\n\n  <xsl:template match=\"svg:defs/text()\"/>\n\n\n  <xsl:template match=\"svg:use\">\n    <xsl:variable name=\"href\" select=\"substring(@xlink:href, 2)\"/>\n    <xsl:copy>\n      <xsl:apply-templates select=\"@*\"/>\n      <xsl:if test=\"ancestor::svg:defs\">\n        <xsl:attribute name=\"id\">\n          <xsl:value-of select=\"$defs/mg:use[@id=current()/@id]/@new-id\"/>\n        </xsl:attribute>\n      </xsl:if>\n      <xsl:attribute name=\"xlink:href\">\n        <xsl:value-of select=\"concat('#', $defs/*[@id=$href]/@new-id)\"/>\n      </xsl:attribute>\n    </xsl:copy>\n  </xsl:template>\n\n\n  <xsl:template match=\"svg:style[@type='text/css']\">\n    <style type=\"text/css\">\n      <xsl:for-each select=\"$styles\">\n        <xsl:value-of select=\"concat('text.f', position(), ' ', ., '&#10;')\"/>\n      </xsl:for-each>\n    </style>\n  </xsl:template>\n\n\n  <xsl:template match=\"svg:text\">\n    <xsl:copy>\n      <xsl:copy-of select=\"@*\"/>\n      <xsl:attribute name=\"class\">\n        <xsl:value-of select=\"$styles[@id=current()/@class]/@new-id\"/>\n      </xsl:attribute>\n      <xsl:apply-templates/>\n    </xsl:copy>\n  </xsl:template>\n</xsl:stylesheet>\n\n"
  },
  {
    "path": "vc/README",
    "content": "In order to build dvisvgm for MiKTeX with Microsoft Visual Studio 2022 you\nneed to download the source code archives of the following libraries\nwhich are not bundled with the dvisvgm sources:\n\nFreeType:    https://freetype.org\nzlib:        http://zlib.net\nttfautohint: https://github.com/mgieseki/ttfautohint-dll\n\nExtract the contents of the usually versioned root folders present in the\nlibrary archives to the corresponding subfolders in the \"vc\" directory, e.g.\nthe contents of zlib-1.2.13, should go to vc\\zlib.\n\nThe contents of the ttfautohint-dll release archive including the subfolders\nmust be extracted to vc\\ttfautohint.\n\nNow open the Visual Studio IDE, load dvisvgm.sln, and start the build process.\n\nAlternatively, you can trigger the build process on the command-line with\n  msbuild /p:Configuration=Release /p:Platform=<platform> dvisvgm.sln\nwhere <platform> is either \"win32\" or \"x64\" for the 32- and 64-bit binaries,\nrespectively.\n\n"
  },
  {
    "path": "vc/brotli/brotli.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{C72BB6A5-318E-4D3F-8714-786094E2C6EB}</ProjectGuid>\r\n    <RootNamespace>brotli</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CLRSupport>false</CLRSupport>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CLRSupport>false</CLRSupport>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CLRSupport>false</CLRSupport>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CLRSupport>false</CLRSupport>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"Shared\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <LinkIncremental>true</LinkIncremental>\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <LinkIncremental>false</LinkIncremental>\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\brotli\\common;..\\..\\libs\\brotli\\include</AdditionalIncludeDirectories>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n    <Link>\r\n      <AdditionalDependencies />\r\n    </Link>\r\n    <Lib>\r\n      <TargetMachine>MachineX86</TargetMachine>\r\n    </Lib>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\brotli\\common;..\\..\\libs\\brotli\\include</AdditionalIncludeDirectories>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n    <Link>\r\n      <AdditionalDependencies />\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\brotli\\common;..\\..\\libs\\brotli\\include</AdditionalIncludeDirectories>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n      <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    </ClCompile>\r\n    <Link>\r\n      <AdditionalDependencies />\r\n    </Link>\r\n    <Lib>\r\n      <TargetMachine>MachineX86</TargetMachine>\r\n      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r\n    </Lib>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\brotli\\common;..\\..\\libs\\brotli\\include</AdditionalIncludeDirectories>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n      <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    </ClCompile>\r\n    <Link>\r\n      <AdditionalDependencies />\r\n    </Link>\r\n    <Lib>\r\n      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r\n    </Lib>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\common\\constants.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\common\\context.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\common\\dictionary.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\common\\platform.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\common\\transform.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\backward_references.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\backward_references_hq.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\bit_cost.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\block_splitter.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\brotli_bit_stream.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\cluster.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\command.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\compound_dictionary.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\compress_fragment.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\compress_fragment_two_pass.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\dictionary_hash.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\encode.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\encoder_dict.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\entropy_encode.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\fast_log.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\histogram.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\literal_cost.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\memory.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\metablock.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\static_dict.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\static_dict_lut.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\static_init.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\utf8_util.c\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\constants.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\context.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\dictionary.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\platform.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\shared_dictionary_internal.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\transform.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\version.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\backward_references.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\backward_references_hq.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\backward_references_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\bit_cost.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\bit_cost_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\block_encoder_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\block_splitter.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\block_splitter_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\brotli_bit_stream.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\cluster.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\cluster_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\command.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\compound_dictionary.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\compress_fragment.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\compress_fragment_two_pass.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\dictionary_hash.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\dictionary_hash_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\encoder_dict.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\entropy_encode.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\entropy_encode_static.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\fast_log.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\find_match_length.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_base.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_composite_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_forgetful_chain_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_longest_match64_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_longest_match64_simd_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_longest_match_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_longest_match_quickly_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_longest_match_simd_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_rolling_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_to_binary_tree_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\histogram.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\histogram_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\literal_cost.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\matching_tag_mask.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\memory.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\metablock.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\metablock_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\params.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\prefix.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\quality.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\ringbuffer.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\state.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\static_dict.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\static_dict_lut.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\static_dict_lut_inc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\static_init.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\utf8_util.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\write_bits.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\include\\brotli\\decode.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\include\\brotli\\encode.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\include\\brotli\\port.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\include\\brotli\\shared_dictionary.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\include\\brotli\\types.h\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "vc/brotli/brotli.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"Quelldateien\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Headerdateien\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Ressourcendateien\">\r\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\backward_references.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\bit_cost.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\block_splitter.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\brotli_bit_stream.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\cluster.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\compress_fragment.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\compress_fragment_two_pass.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\encode.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\entropy_encode.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\histogram.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\literal_cost.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\memory.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\metablock.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\static_dict.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\utf8_util.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\common\\dictionary.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\backward_references_hq.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\dictionary_hash.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\encoder_dict.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\common\\constants.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\common\\context.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\common\\platform.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\common\\transform.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\command.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\fast_log.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\compound_dictionary.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\static_dict_lut.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\brotli\\enc\\static_init.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\constants.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\dictionary.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\version.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\include\\brotli\\decode.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\include\\brotli\\encode.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\include\\brotli\\port.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\include\\brotli\\types.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\backward_references.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\backward_references_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\bit_cost.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\bit_cost_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\block_encoder_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\block_splitter.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\block_splitter_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\brotli_bit_stream.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\cluster.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\cluster_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\command.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\compress_fragment.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\compress_fragment_two_pass.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\dictionary_hash.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\entropy_encode.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\entropy_encode_static.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\fast_log.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\find_match_length.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_forgetful_chain_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_longest_match_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_longest_match_quickly_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\histogram.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\histogram_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\literal_cost.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\memory.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\metablock.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\metablock_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\prefix.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\quality.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\ringbuffer.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\static_dict.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\static_dict_lut.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\utf8_util.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\write_bits.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\backward_references_hq.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_longest_match64_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_to_binary_tree_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\encoder_dict.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\params.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\context.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\platform.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\transform.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\common\\shared_dictionary_internal.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\compound_dictionary.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\state.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\include\\brotli\\shared_dictionary.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\dictionary_hash_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_base.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_composite_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_longest_match_simd_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_longest_match64_simd_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\hash_rolling_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\matching_tag_mask.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\static_dict_lut_inc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\brotli\\enc\\static_init.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "vc/clipper/clipper.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{98D8E34D-75B4-48B6-B175-C3A7DF11E52C}</ProjectGuid>\r\n    <RootNamespace>clipper</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <TargetExt>.lib</TargetExt>\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <TargetExt>.lib</TargetExt>\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <Link>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <Link>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <Link>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <CompileAs>Default</CompileAs>\r\n    </ClCompile>\r\n    <Link>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\clipper\\clipper.hpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\clipper\\clipper.cpp\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "vc/clipper/clipper.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"Header Files\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Source Files\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\clipper\\clipper.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\clipper\\clipper.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "vc/config.h",
    "content": "/* Basic header file used to compile dvisvgm on Windows. */\n#if !defined(DVISVGM_CONFIG_H) && defined(__cplusplus)\n#define DVISVGM_CONFIG_H\n#include \"../src/version.hpp\"\n\n/* Name of package */\n#define PACKAGE PROGRAM_NAME\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"martin.gieseking@uos.de\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME PROGRAM_NAME\n\n/* Version number of package */\n#define VERSION PROGRAM_VERSION\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING PROGRAM_NAME+std::string(\" \")+PROGRAM_VERSION\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME PROGRAM_NAME\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION VERSION\n\n#define HAVE_STRING_H 1\n\n#ifdef _WIN64\n  #define HOST_SYSTEM \"x86_64-pc-win64\"\n#else\n  #define HOST_SYSTEM \"i686-pc-win32\"\n#endif\n#endif\n"
  },
  {
    "path": "vc/dvisvgm.rc",
    "content": "#include <winver.h>\n\n#define DVISVGM_VERSION 3,6,0,0\n#define DVISVGM_VERSION_STR \"3.6\\0\"\n\nVS_VERSION_INFO  VERSIONINFO\n  FILEVERSION    DVISVGM_VERSION\n  PRODUCTVERSION DVISVGM_VERSION\n  FILEFLAGSMASK  VS_FFI_FILEFLAGSMASK\n  FILEFLAGS      0\n  FILEOS         VOS__WINDOWS32\n  FILETYPE       VFT_APP\n  FILESUBTYPE    0\nBEGIN\n  BLOCK \"StringFileInfo\"\n  BEGIN\n    BLOCK \"040904E4\" // US English (0x409), ANSI codepage (1252)\n    BEGIN\n      VALUE \"FileDescription\", \"Converts DVI, EPS, and PDF files to SVG\\0\"\n      VALUE \"FileVersion\", DVISVGM_VERSION_STR\n      VALUE \"InternalName\", \"dvisvgm\\0\"\n      VALUE \"LegalCopyright\",\t\"\\251 2005\\2262025 Martin Gieseking\\0\"\n      VALUE \"OriginalFilename\", \"dvisvgm.exe\\0\"\n      VALUE \"ProductName\",\t\"dvisvgm\\0\"\n      VALUE \"ProductVersion\", DVISVGM_VERSION_STR\n      VALUE \"Comments\", \"For more information visit https://dvisvgm.de\\0\"\n    END\n  END\n  BLOCK \"VarFileInfo\"\n    BEGIN\n      VALUE \"Translation\", 0x409, 1252\n    END\nEND\n\n"
  },
  {
    "path": "vc/dvisvgm.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{86046918-771F-4654-AFC5-AF4F8AC974EF}</ProjectGuid>\r\n    <RootNamespace>dvisvgm-vc</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <CharacterSet>NotSet</CharacterSet>\r\n    <WholeProgramOptimization>false</WholeProgramOptimization>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup>\r\n    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <EmbedManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</EmbedManifest>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <EmbedManifest Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</EmbedManifest>\r\n    <GenerateManifest Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</GenerateManifest>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <Optimization>Disabled</Optimization>\r\n      <AdditionalIncludeDirectories>..\\vc;..\\libs\\boost;..\\libs\\clipper;..\\libs\\brotli\\include;..\\libs\\md5;..\\libs\\potrace;..\\libs\\variant\\include;..\\libs\\woff2\\include;..\\libs\\xxhash;..\\vc\\freetype\\include;..\\vc\\miktex-com\\$(Platform)\\$(Configuration);..\\vc\\ttfautohint\\include;..\\vc\\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n      <PreprocessorDefinitions>MIKTEX;HAVE_TTFAUTOHINT_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <MinimalRebuild>true</MinimalRebuild>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <DisableLanguageExtensions>false</DisableLanguageExtensions>\r\n      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>\r\n      <WarningLevel>Level1</WarningLevel>\r\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r\n      <OmitDefaultLibName>false</OmitDefaultLibName>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <LanguageStandard>stdcpp14</LanguageStandard>\r\n      <StringPooling>true</StringPooling>\r\n      <EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>\r\n      <OpenMPSupport>false</OpenMPSupport>\r\n    </ClCompile>\r\n    <Link>\r\n      <AdditionalLibraryDirectories>..;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r\n      <IgnoreAllDefaultLibraries>\r\n      </IgnoreAllDefaultLibraries>\r\n      <IgnoreSpecificDefaultLibraries>\r\n      </IgnoreSpecificDefaultLibraries>\r\n      <DelayLoadDLLs>\r\n      </DelayLoadDLLs>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r\n      <DataExecutionPrevention>\r\n      </DataExecutionPrevention>\r\n      <AssemblyDebug>true</AssemblyDebug>\r\n      <LinkErrorReporting>PromptImmediately</LinkErrorReporting>\r\n      <SubSystem>Console</SubSystem>\r\n      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>\r\n      <ImageHasSafeExceptionHandlers />\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Midl>\r\n      <TargetEnvironment>X64</TargetEnvironment>\r\n    </Midl>\r\n    <ClCompile>\r\n      <Optimization>Disabled</Optimization>\r\n      <AdditionalIncludeDirectories>..\\vc;..\\libs\\boost;..\\libs\\clipper;..\\libs\\brotli\\include;..\\libs\\md5;..\\libs\\potrace;..\\libs\\variant\\include;..\\libs\\woff2\\include;..\\libs\\xxhash;..\\vc\\freetype\\include;..\\vc\\miktex-com\\$(Platform)\\$(Configuration);..\\vc\\ttfautohint\\include;..\\vc\\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n      <PreprocessorDefinitions>MIKTEX;HAVE_TTFAUTOHINT_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <MinimalRebuild>true</MinimalRebuild>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <DisableLanguageExtensions>false</DisableLanguageExtensions>\r\n      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>\r\n      <WarningLevel>Level1</WarningLevel>\r\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r\n      <OmitDefaultLibName>false</OmitDefaultLibName>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <LanguageStandard>stdcpp14</LanguageStandard>\r\n      <StringPooling>true</StringPooling>\r\n      <EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>\r\n      <OpenMPSupport>false</OpenMPSupport>\r\n    </ClCompile>\r\n    <Link>\r\n      <AdditionalLibraryDirectories>..;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r\n      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>\r\n      <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>\r\n      <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r\n      <DataExecutionPrevention>\r\n      </DataExecutionPrevention>\r\n      <TargetMachine>MachineX64</TargetMachine>\r\n      <MinimumRequiredVersion />\r\n      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>\r\n      <SubSystem>Console</SubSystem>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <AdditionalIncludeDirectories>..\\vc;..\\libs\\boost;..\\libs\\clipper;..\\libs\\brotli\\include;..\\libs\\md5;..\\libs\\potrace;..\\libs\\variant\\include;..\\libs\\woff2\\include;..\\libs\\xxhash;..\\vc\\freetype\\include;..\\vc\\miktex-com\\$(Platform)\\$(Configuration);..\\vc\\ttfautohint\\include;..\\vc\\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n      <PreprocessorDefinitions>MIKTEX;HAVE_TTFAUTOHINT_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <DisableLanguageExtensions>false</DisableLanguageExtensions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <LanguageStandard>stdcpp14</LanguageStandard>\r\n      <WholeProgramOptimization>true</WholeProgramOptimization>\r\n      <OpenMPSupport>false</OpenMPSupport>\r\n      <StringPooling>true</StringPooling>\r\n    </ClCompile>\r\n    <Link>\r\n      <AdditionalLibraryDirectories>..;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r\n      <DataExecutionPrevention>\r\n      </DataExecutionPrevention>\r\n      <SubSystem>Console</SubSystem>\r\n      <AdditionalOptions>notelemetry.obj %(AdditionalOptions)</AdditionalOptions>\r\n      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>\r\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r\n      <ImageHasSafeExceptionHandlers />\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Midl>\r\n      <TargetEnvironment>X64</TargetEnvironment>\r\n    </Midl>\r\n    <ClCompile>\r\n      <WholeProgramOptimization>true</WholeProgramOptimization>\r\n      <AdditionalIncludeDirectories>..\\vc;..\\libs\\boost;..\\libs\\clipper;..\\libs\\brotli\\include;..\\libs\\md5;..\\libs\\potrace;..\\libs\\variant\\include;..\\libs\\woff2\\include;..\\libs\\xxhash;..\\vc\\freetype\\include;..\\vc\\miktex-com\\$(Platform)\\$(Configuration);..\\vc\\ttfautohint\\include;..\\vc\\zlib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r\n      <PreprocessorDefinitions>MIKTEX;HAVE_TTFAUTOHINT_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <DisableLanguageExtensions>false</DisableLanguageExtensions>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <LanguageStandard>stdcpp14</LanguageStandard>\r\n      <OpenMPSupport>false</OpenMPSupport>\r\n      <StringPooling>true</StringPooling>\r\n    </ClCompile>\r\n    <Link>\r\n      <AdditionalLibraryDirectories>..;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r\n      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>\r\n      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r\n      <DataExecutionPrevention>\r\n      </DataExecutionPrevention>\r\n      <TargetMachine>MachineX64</TargetMachine>\r\n      <MinimumRequiredVersion />\r\n      <AdditionalOptions>notelemetry.obj %(AdditionalOptions)</AdditionalOptions>\r\n      <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>\r\n      <SubSystem>Console</SubSystem>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\src\\BasicDVIReader.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Bezier.cpp\" />\r\n    <ClCompile Include=\"..\\src\\BgColorSpecialHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Bitmap.cpp\" />\r\n    <ClCompile Include=\"..\\src\\BoundingBox.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Calculator.cpp\" />\r\n    <ClCompile Include=\"..\\src\\CharMapID.cpp\" />\r\n    <ClCompile Include=\"..\\src\\CLCommandLine.cpp\" />\r\n    <ClCompile Include=\"..\\src\\CMap.cpp\" />\r\n    <ClCompile Include=\"..\\src\\CMapManager.cpp\" />\r\n    <ClCompile Include=\"..\\src\\CMapReader.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Color.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ColorSpecialHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Directory.cpp\" />\r\n    <ClCompile Include=\"..\\src\\DLLoader.cpp\" />\r\n    <ClCompile Include=\"..\\src\\EllipticalArc.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\Base14Fonts.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\Dingbats.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusMonoPS-Bold.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusMonoPS-BoldItalic.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusMonoPS-Italic.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusMonoPS-Regular.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusRoman-Bold.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusRoman-BoldItalic.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusRoman-Italic.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusRoman-Regular.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusSans-Bold.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusSans-BoldItalic.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusSans-Italic.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusSans-Regular.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\fonts\\StandardSymbolsPS.cff.cpp\" />\r\n    <ClCompile Include=\"..\\src\\HashFunction.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ImageToSVG.cpp\" />\r\n    <ClCompile Include=\"..\\src\\OFM.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Opacity.cpp\" />\r\n    <ClCompile Include=\"..\\src\\optimizer\\AttributeExtractor.cpp\" />\r\n    <ClCompile Include=\"..\\src\\optimizer\\ClipPathReassigner.cpp\" />\r\n    <ClCompile Include=\"..\\src\\optimizer\\GroupCollapser.cpp\" />\r\n    <ClCompile Include=\"..\\src\\optimizer\\RedundantElementRemover.cpp\" />\r\n    <ClCompile Include=\"..\\src\\optimizer\\SVGOptimizer.cpp\" />\r\n    <ClCompile Include=\"..\\src\\optimizer\\TextSimplifier.cpp\" />\r\n    <ClCompile Include=\"..\\src\\optimizer\\TransformSimplifier.cpp\" />\r\n    <ClCompile Include=\"..\\src\\optimizer\\WSNodeRemover.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PDFHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PDFToSVG.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PSPreviewHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PsSpecialHandlerProxy.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SourceInput.cpp\" />\r\n    <ClCompile Include=\"..\\src\\DVIReader.cpp\" />\r\n    <ClCompile Include=\"..\\src\\dvisvgm.cpp\" />\r\n    <ClCompile Include=\"..\\src\\DvisvgmSpecialHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\DVIToSVG.cpp\" />\r\n    <ClCompile Include=\"..\\src\\DVIToSVGActions.cpp\" />\r\n    <ClCompile Include=\"..\\src\\EmSpecialHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\EncFile.cpp\" />\r\n    <ClCompile Include=\"..\\src\\EPSFile.cpp\" />\r\n    <ClCompile Include=\"..\\src\\FileFinder.cpp\">\r\n      <MultiProcessorCompilation Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</MultiProcessorCompilation>\r\n      <MultiProcessorCompilation Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</MultiProcessorCompilation>\r\n      <MultiProcessorCompilation Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</MultiProcessorCompilation>\r\n      <MultiProcessorCompilation Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\FilePath.cpp\" />\r\n    <ClCompile Include=\"..\\src\\FileSystem.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Font.cpp\" />\r\n    <ClCompile Include=\"..\\src\\FontCache.cpp\" />\r\n    <ClCompile Include=\"..\\src\\FontEncoding.cpp\" />\r\n    <ClCompile Include=\"..\\src\\FontEngine.cpp\" />\r\n    <ClCompile Include=\"..\\src\\FontManager.cpp\" />\r\n    <ClCompile Include=\"..\\src\\FontMap.cpp\" />\r\n    <ClCompile Include=\"..\\src\\FontMetrics.cpp\" />\r\n    <ClCompile Include=\"..\\src\\FontWriter.cpp\" />\r\n    <ClCompile Include=\"..\\src\\GFGlyphTracer.cpp\" />\r\n    <ClCompile Include=\"..\\src\\GFReader.cpp\" />\r\n    <ClCompile Include=\"..\\src\\GFTracer.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Ghostscript.cpp\" />\r\n    <ClCompile Include=\"..\\src\\HtmlSpecialHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\HyperlinkManager.cpp\" />\r\n    <ClCompile Include=\"..\\src\\InputBuffer.cpp\" />\r\n    <ClCompile Include=\"..\\src\\InputReader.cpp\" />\r\n    <ClCompile Include=\"..\\src\\JFM.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Length.cpp\" />\r\n    <ClCompile Include=\"..\\src\\MapLine.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Matrix.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Message.cpp\" />\r\n    <ClCompile Include=\"..\\src\\MetafontWrapper.cpp\" />\r\n    <ClCompile Include=\"..\\src\\MiKTeXCom.cpp\">\r\n      <MultiProcessorCompilation Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">false</MultiProcessorCompilation>\r\n      <EnableParallelCodeGeneration Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</EnableParallelCodeGeneration>\r\n      <EnableParallelCodeGeneration Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">true</EnableParallelCodeGeneration>\r\n      <MultiProcessorCompilation Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">false</MultiProcessorCompilation>\r\n      <MultiProcessorCompilation Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">false</MultiProcessorCompilation>\r\n      <MultiProcessorCompilation Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">false</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\NoPsSpecialHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PageRanges.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PageSize.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PapersizeSpecialHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PathClipper.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PDFParser.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PdfSpecialHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PreScanDVIReader.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Process.cpp\" />\r\n    <ClCompile Include=\"..\\src\\psdefs.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PSInterpreter.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PSPattern.cpp\" />\r\n    <ClCompile Include=\"..\\src\\PsSpecialHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\RangeMap.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ShadingPatch.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SignalHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SpecialActions.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SpecialManager.cpp\" />\r\n    <ClCompile Include=\"..\\src\\StreamReader.cpp\" />\r\n    <ClCompile Include=\"..\\src\\StreamWriter.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Subfont.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SVGCharHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SVGCharHandlerFactory.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SVGCharPathHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SVGElement.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SVGSingleCharTextHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SVGCharTspanTextHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SVGOutput.cpp\" />\r\n    <ClCompile Include=\"..\\src\\SVGTree.cpp\" />\r\n    <ClCompile Include=\"..\\src\\System.cpp\" />\r\n    <ClCompile Include=\"..\\src\\TensorProductPatch.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Terminal.cpp\" />\r\n    <ClCompile Include=\"..\\src\\TFM.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ToUnicodeMap.cpp\" />\r\n    <ClCompile Include=\"..\\src\\TpicSpecialHandler.cpp\" />\r\n    <ClCompile Include=\"..\\src\\TriangularPatch.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\CmapTable.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\GlyfTable.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\HeadTable.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\HheaTable.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\HmtxTable.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\MaxpTable.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\NameTable.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\OS2Table.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\PostTable.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\TTFAutohint.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\TTFTable.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\TTFWriter.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\VheaTable.cpp\" />\r\n    <ClCompile Include=\"..\\src\\ttf\\VmtxTable.cpp\" />\r\n    <ClCompile Include=\"..\\src\\Unicode.cpp\" />\r\n    <ClCompile Include=\"..\\src\\utility.cpp\" />\r\n    <ClCompile Include=\"..\\src\\VFReader.cpp\" />\r\n    <ClCompile Include=\"..\\src\\XMLDocument.cpp\" />\r\n    <ClCompile Include=\"..\\src\\XMLNode.cpp\" />\r\n    <ClCompile Include=\"..\\src\\XMLParser.cpp\" />\r\n    <ClCompile Include=\"..\\src\\XMLString.cpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\src\\AGLTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\algorithm.hpp\" />\r\n    <ClInclude Include=\"..\\src\\BasicDVIReader.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Bezier.hpp\" />\r\n    <ClInclude Include=\"..\\src\\BgColorSpecialHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Bitmap.hpp\" />\r\n    <ClInclude Include=\"..\\src\\BoundingBox.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Calculator.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Character.hpp\" />\r\n    <ClInclude Include=\"..\\src\\CharMapID.hpp\" />\r\n    <ClInclude Include=\"..\\src\\CLCommandLine.hpp\" />\r\n    <ClInclude Include=\"..\\src\\CMap.hpp\" />\r\n    <ClInclude Include=\"..\\src\\CMapManager.hpp\" />\r\n    <ClInclude Include=\"..\\src\\CMapReader.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Color.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ColorSpecialHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\CommandLine.hpp\" />\r\n    <ClInclude Include=\"..\\src\\EllipticalArc.hpp\" />\r\n    <ClInclude Include=\"..\\src\\fonts\\Base14Fonts.hpp\" />\r\n    <ClInclude Include=\"..\\src\\GraphicsPathParser.hpp\" />\r\n    <ClInclude Include=\"..\\src\\HashFunction.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ImageToSVG.hpp\" />\r\n    <ClInclude Include=\"..\\src\\MD5HashFunction.hpp\" />\r\n    <ClInclude Include=\"..\\src\\OFM.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Opacity.hpp\" />\r\n    <ClInclude Include=\"..\\src\\optimizer\\AttributeExtractor.hpp\" />\r\n    <ClInclude Include=\"..\\src\\optimizer\\ClipPathReassigner.hpp\" />\r\n    <ClInclude Include=\"..\\src\\optimizer\\DependencyGraph.hpp\" />\r\n    <ClInclude Include=\"..\\src\\optimizer\\GroupCollapser.hpp\" />\r\n    <ClInclude Include=\"..\\src\\optimizer\\OptimizerModule.hpp\" />\r\n    <ClInclude Include=\"..\\src\\optimizer\\RedundantElementRemover.hpp\" />\r\n    <ClInclude Include=\"..\\src\\optimizer\\SVGOptimizer.hpp\" />\r\n    <ClInclude Include=\"..\\src\\optimizer\\TextSimplifier.hpp\" />\r\n    <ClInclude Include=\"..\\src\\optimizer\\TransformSimplifier.hpp\" />\r\n    <ClInclude Include=\"..\\src\\optimizer\\WSNodeRemover.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PDFHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PDFToSVG.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PSPreviewHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PsSpecialHandlerProxy.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SourceInput.hpp\" />\r\n    <ClInclude Include=\"..\\src\\EncFile.hpp\" />\r\n    <ClInclude Include=\"..\\src\\EPSFile.hpp\" />\r\n    <ClInclude Include=\"..\\src\\EPSToSVG.hpp\" />\r\n    <ClInclude Include=\"..\\src\\FilePath.hpp\" />\r\n    <ClInclude Include=\"..\\src\\FixWord.hpp\" />\r\n    <ClInclude Include=\"..\\src\\FontMetrics.hpp\" />\r\n    <ClInclude Include=\"..\\src\\FontWriter.hpp\" />\r\n    <ClInclude Include=\"..\\src\\HtmlSpecialHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\JFM.hpp\" />\r\n    <ClInclude Include=\"..\\src\\macros.hpp\" />\r\n    <ClInclude Include=\"..\\src\\MapLine.hpp\" />\r\n    <ClInclude Include=\"..\\src\\MiKTeXCom.hpp\" />\r\n    <ClInclude Include=\"..\\src\\NoPsSpecialHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\NumericRanges.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PageRanges.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PapersizeSpecialHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PathClipper.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PDFParser.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PdfSpecialHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PreScanDVIReader.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Process.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PSInterpreter.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PSPattern.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PsSpecialHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\RangeMap.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ShadingPatch.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SignalHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Subfont.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SVGCharHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SVGCharHandlerFactory.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SVGCharPathHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SVGElement.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SVGSingleCharTextHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SVGCharTspanTextHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SVGOutput.hpp\" />\r\n    <ClInclude Include=\"..\\src\\System.hpp\" />\r\n    <ClInclude Include=\"..\\src\\TensorProductPatch.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Terminal.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ToUnicodeMap.hpp\" />\r\n    <ClInclude Include=\"..\\src\\TriangularPatch.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\CmapTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\GlyfTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\HeadTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\HheaTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\HmtxTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\LocaTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\MaxpTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\NameTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\OS2Table.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\PostTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\TTFAutohint.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\TTFTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\TTFWriter.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\VheaTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ttf\\VmtxTable.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Unicode.hpp\" />\r\n    <ClInclude Include=\"..\\src\\utility.hpp\" />\r\n    <ClInclude Include=\"..\\src\\VectorIterator.hpp\" />\r\n    <ClInclude Include=\"..\\src\\XMLParser.hpp\" />\r\n    <ClInclude Include=\"..\\src\\XXHashFunction.hpp\" />\r\n    <ClInclude Include=\"..\\src\\ZLibOutputStream.hpp\" />\r\n    <ClInclude Include=\"config.h\" />\r\n    <ClInclude Include=\"..\\src\\DVIActions.hpp\" />\r\n    <ClInclude Include=\"..\\src\\DVIReader.hpp\" />\r\n    <ClInclude Include=\"..\\src\\DvisvgmSpecialHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\DVIToSVG.hpp\" />\r\n    <ClInclude Include=\"..\\src\\DVIToSVGActions.hpp\" />\r\n    <ClInclude Include=\"..\\src\\FileFinder.hpp\" />\r\n    <ClInclude Include=\"..\\src\\FileSystem.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Font.hpp\" />\r\n    <ClInclude Include=\"..\\src\\FontCache.hpp\" />\r\n    <ClInclude Include=\"..\\src\\FontEngine.hpp\" />\r\n    <ClInclude Include=\"..\\src\\FontManager.hpp\" />\r\n    <ClInclude Include=\"..\\src\\FontMap.hpp\" />\r\n    <ClInclude Include=\"..\\src\\GFGlyphTracer.hpp\" />\r\n    <ClInclude Include=\"..\\src\\GFReader.hpp\" />\r\n    <ClInclude Include=\"..\\src\\GFTracer.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Ghostscript.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Glyph.hpp\" />\r\n    <ClInclude Include=\"..\\src\\InputBuffer.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Length.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Message.hpp\" />\r\n    <ClInclude Include=\"..\\src\\MessageException.hpp\" />\r\n    <ClInclude Include=\"..\\src\\MetafontWrapper.hpp\" />\r\n    <ClInclude Include=\"..\\src\\PageSize.hpp\" />\r\n    <ClInclude Include=\"..\\src\\Pair.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SpecialActions.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SpecialHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\SpecialManager.hpp\" />\r\n    <ClInclude Include=\"..\\src\\StreamWriter.hpp\" />\r\n    <ClInclude Include=\"..\\src\\TFM.hpp\" />\r\n    <ClInclude Include=\"..\\src\\TpicSpecialHandler.hpp\" />\r\n    <ClInclude Include=\"..\\src\\XMLDocument.hpp\" />\r\n    <ClInclude Include=\"..\\src\\XMLNode.hpp\" />\r\n    <ClInclude Include=\"..\\src\\XMLString.hpp\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"brotli\\brotli.vcxproj\">\r\n      <Project>{c72bb6a5-318e-4d3f-8714-786094e2c6eb}</Project>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"clipper\\clipper.vcxproj\">\r\n      <Project>{98d8e34d-75b4-48b6-b175-c3a7df11e52c}</Project>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"freetype\\freetype.vcxproj\">\r\n      <Project>{78b079bd-9fc7-4b9e-b4a6-96da0f00248b}</Project>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"md5\\md5.vcxproj\">\r\n      <Project>{01089eea-d32a-4a70-bdd4-221791380931}</Project>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"potrace\\libpotrace.vcxproj\">\r\n      <Project>{6f17fbf1-4304-4af2-81a8-c78787e8d0a5}</Project>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"woff2\\woff2.vcxproj\">\r\n      <Project>{52c2c7c6-3bce-4434-9a02-ea920c15fb65}</Project>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"xxHash\\xxhash.vcxproj\">\r\n      <Project>{b3a84395-d889-4419-b313-b410350727fa}</Project>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"zlib\\zlib.vcxproj\">\r\n      <Project>{f296e0c2-0d37-44cd-961d-87681418683f}</Project>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ResourceCompile Include=\"dvisvgm.rc\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "vc/dvisvgm.vcxproj.filters",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"Header Files\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Source Files\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Resources\">\r\n      <UniqueIdentifier>{5c0e8de5-5203-477a-a1e9-265973e55172}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"Source Files\\optimizer\">\r\n      <UniqueIdentifier>{64ff1813-983e-4360-bc0b-6857f8e321c7}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"Header Files\\optimizer\">\r\n      <UniqueIdentifier>{30c147de-3bba-4bb4-9415-c0b6f86f88a1}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"Header Files\\ttf\">\r\n      <UniqueIdentifier>{31f4f80d-a4a2-41cb-a416-6e71a96c1492}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"Source Files\\ttf\">\r\n      <UniqueIdentifier>{e5a10433-9776-43ca-97d3-50b07775bfb7}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"Header Files\\base14fonts\">\r\n      <UniqueIdentifier>{1aa822ed-3e57-4fa1-979e-541b9f566f3a}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"Source Files\\base14fonts\">\r\n      <UniqueIdentifier>{86a9739b-3253-4e35-a202-1571d8e2605f}</UniqueIdentifier>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\src\\BgColorSpecialHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Bitmap.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\BoundingBox.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Calculator.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Color.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ColorSpecialHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Directory.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\DLLoader.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\DVIReader.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\dvisvgm.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\DvisvgmSpecialHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\DVIToSVG.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\DVIToSVGActions.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\EmSpecialHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\FileFinder.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\FileSystem.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Font.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\FontCache.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\FontEncoding.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\FontEngine.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\FontManager.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\FontMap.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\GFGlyphTracer.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\GFReader.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\GFTracer.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Ghostscript.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\InputBuffer.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\InputReader.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Length.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Matrix.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Message.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\MetafontWrapper.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PageSize.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PSInterpreter.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PsSpecialHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SpecialManager.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\StreamReader.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\StreamWriter.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SVGTree.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\TFM.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\TpicSpecialHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\VFReader.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\XMLDocument.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\XMLNode.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\XMLString.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\FilePath.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PageRanges.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Terminal.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\System.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SignalHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Process.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\MiKTeXCom.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\MapLine.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PdfSpecialHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Subfont.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\EPSFile.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PSPattern.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\psdefs.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\NoPsSpecialHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\JFM.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\HtmlSpecialHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\CMap.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\CMapManager.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\CMapReader.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\EncFile.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\FontMetrics.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\CharMapID.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\RangeMap.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Unicode.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ToUnicodeMap.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\BasicDVIReader.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PreScanDVIReader.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PathClipper.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Bezier.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\TensorProductPatch.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\TriangularPatch.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ShadingPatch.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SVGOutput.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SVGCharHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SVGCharHandlerFactory.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SVGCharPathHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SVGSingleCharTextHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SVGCharTspanTextHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PapersizeSpecialHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\CLCommandLine.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\FontWriter.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\utility.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\HyperlinkManager.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PDFParser.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\CmapTable.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\GlyfTable.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\HeadTable.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\HheaTable.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\HmtxTable.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\MaxpTable.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\NameTable.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\OS2Table.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\PostTable.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\TTFWriter.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\TTFTable.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\TTFAutohint.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\VheaTable.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ttf\\VmtxTable.cpp\">\r\n      <Filter>Source Files\\ttf</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SourceInput.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\ImageToSVG.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\HashFunction.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\optimizer\\AttributeExtractor.cpp\">\r\n      <Filter>Source Files\\optimizer</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\optimizer\\GroupCollapser.cpp\">\r\n      <Filter>Source Files\\optimizer</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\optimizer\\RedundantElementRemover.cpp\">\r\n      <Filter>Source Files\\optimizer</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\optimizer\\SVGOptimizer.cpp\">\r\n      <Filter>Source Files\\optimizer</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\optimizer\\TransformSimplifier.cpp\">\r\n      <Filter>Source Files\\optimizer</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\optimizer\\WSNodeRemover.cpp\">\r\n      <Filter>Source Files\\optimizer</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\EllipticalArc.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\optimizer\\TextSimplifier.cpp\">\r\n      <Filter>Source Files\\optimizer</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\Opacity.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SVGElement.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\optimizer\\ClipPathReassigner.cpp\">\r\n      <Filter>Source Files\\optimizer</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\XMLParser.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\Base14Fonts.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\Dingbats.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusMonoPS-Bold.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusMonoPS-BoldItalic.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusMonoPS-Italic.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusMonoPS-Regular.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusRoman-Bold.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusRoman-BoldItalic.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusRoman-Italic.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusRoman-Regular.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusSans-Bold.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusSans-BoldItalic.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusSans-Italic.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\NimbusSans-Regular.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\fonts\\StandardSymbolsPS.cff.cpp\">\r\n      <Filter>Source Files\\base14fonts</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PDFHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PDFToSVG.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\OFM.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PSPreviewHandler.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\SpecialActions.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\src\\PsSpecialHandlerProxy.cpp\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\src\\BgColorSpecialHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Bitmap.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\BoundingBox.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Calculator.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Color.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ColorSpecialHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\CommandLine.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"config.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\DVIActions.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\DVIReader.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\DvisvgmSpecialHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\DVIToSVG.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\DVIToSVGActions.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\FileFinder.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\FileSystem.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Font.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\FontCache.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\FontEngine.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\FontManager.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\FontMap.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\GFGlyphTracer.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\GFReader.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\GFTracer.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Ghostscript.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Glyph.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\InputBuffer.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Length.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Message.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\MessageException.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\MetafontWrapper.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PageSize.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Pair.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SpecialActions.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SpecialHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SpecialManager.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\StreamWriter.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\TFM.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\TpicSpecialHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\XMLDocument.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\XMLNode.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\XMLString.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\FilePath.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PageRanges.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Terminal.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\System.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SignalHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Process.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\MiKTeXCom.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\MapLine.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PdfSpecialHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Subfont.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\EPSFile.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\EPSToSVG.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PSInterpreter.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PSPattern.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PsSpecialHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\NoPsSpecialHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\JFM.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\HtmlSpecialHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\CMap.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\CMapManager.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\CMapReader.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\EncFile.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Character.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\FontMetrics.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\CharMapID.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\RangeMap.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Unicode.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\NumericRanges.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ToUnicodeMap.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\BasicDVIReader.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PreScanDVIReader.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PathClipper.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Bezier.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\TensorProductPatch.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\TriangularPatch.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ShadingPatch.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\VectorIterator.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SVGOutput.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SVGCharHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SVGCharHandlerFactory.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SVGCharPathHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SVGSingleCharTextHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SVGCharTspanTextHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PapersizeSpecialHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\AGLTable.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\FixWord.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ZLibOutputStream.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\CLCommandLine.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\FontWriter.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\utility.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\macros.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PDFParser.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\CmapTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\GlyfTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\HeadTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\HheaTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\HmtxTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\LocaTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\MaxpTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\NameTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\OS2Table.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\PostTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\TTFTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\TTFWriter.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\TTFAutohint.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\VheaTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ttf\\VmtxTable.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SourceInput.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\ImageToSVG.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PDFToSVG.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\HashFunction.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\MD5HashFunction.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\XXHashFunction.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\optimizer\\AttributeExtractor.hpp\">\r\n      <Filter>Header Files\\optimizer</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\optimizer\\DependencyGraph.hpp\">\r\n      <Filter>Header Files\\optimizer</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\optimizer\\GroupCollapser.hpp\">\r\n      <Filter>Header Files\\optimizer</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\optimizer\\RedundantElementRemover.hpp\">\r\n      <Filter>Header Files\\optimizer</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\optimizer\\SVGOptimizer.hpp\">\r\n      <Filter>Header Files\\optimizer</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\optimizer\\TransformSimplifier.hpp\">\r\n      <Filter>Header Files\\optimizer</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\optimizer\\WSNodeRemover.hpp\">\r\n      <Filter>Header Files\\optimizer</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\optimizer\\OptimizerModule.hpp\">\r\n      <Filter>Header Files\\optimizer</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\EllipticalArc.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\optimizer\\TextSimplifier.hpp\">\r\n      <Filter>Header Files\\optimizer</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\Opacity.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\SVGElement.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\optimizer\\ClipPathReassigner.hpp\">\r\n      <Filter>Header Files\\optimizer</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\GraphicsPathParser.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\XMLParser.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\fonts\\Base14Fonts.hpp\">\r\n      <Filter>Header Files\\base14fonts</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PDFHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\OFM.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PSPreviewHandler.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\PsSpecialHandlerProxy.hpp\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\src\\algorithm.hpp\">\r\n      <Filter>Header Files\\ttf</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ResourceCompile Include=\"dvisvgm.rc\">\r\n      <Filter>Resources</Filter>\r\n    </ResourceCompile>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "vc/freetype/freetype.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\" DefaultTargets=\"Build\" ToolsVersion=\"15.0\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}</ProjectGuid>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseOfMfc>false</UseOfMfc>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <PropertyGroup>\r\n    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\r\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\r\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\r\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\r\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" />\r\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" />\r\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">AllRules.ruleset</CodeAnalysisRuleSet>\r\n    <CodeAnalysisRuleSet Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">AllRules.ruleset</CodeAnalysisRuleSet>\r\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\r\n    <CodeAnalysisRules Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\r\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" />\r\n    <CodeAnalysisRuleAssemblies Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" />\r\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(ProjectName)</TargetName>\r\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(ProjectName)</TargetName>\r\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(ProjectName)</TargetName>\r\n    <TargetName Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(ProjectName)</TargetName>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile />\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0409</Culture>\r\n    </ResourceCompile>\r\n    <Lib>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Lib>\r\n    <ClCompile>\r\n      <AdditionalIncludeDirectories>include;..\\zlib</AdditionalIncludeDirectories>\r\n      <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;FT_CONFIG_OPTION_SYSTEM_ZLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <MinimalRebuild>false</MinimalRebuild>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile />\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0409</Culture>\r\n    </ResourceCompile>\r\n    <Lib>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n      <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r\n    </Lib>\r\n    <ClCompile>\r\n      <AdditionalIncludeDirectories>include;../zlib</AdditionalIncludeDirectories>\r\n      <MinimalRebuild>false</MinimalRebuild>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;FT_CONFIG_OPTION_SYSTEM_ZLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n      <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    </ClCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile />\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0409</Culture>\r\n    </ResourceCompile>\r\n    <Lib>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Lib>\r\n    <ClCompile>\r\n      <AdditionalIncludeDirectories>include</AdditionalIncludeDirectories>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile />\r\n    <ResourceCompile>\r\n      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <Culture>0x0409</Culture>\r\n    </ResourceCompile>\r\n    <Lib>\r\n      <SuppressStartupBanner>true</SuppressStartupBanner>\r\n    </Lib>\r\n    <ClCompile>\r\n      <AdditionalIncludeDirectories>include</AdditionalIncludeDirectories>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"src\\autofit\\autofit.c\" />\r\n    <ClCompile Include=\"src\\base\\ftcid.c\" />\r\n    <ClCompile Include=\"src\\bdf\\bdf.c\" />\r\n    <ClCompile Include=\"src\\cff\\cff.c\" />\r\n    <ClCompile Include=\"src\\base\\ftbase.c\" />\r\n    <ClCompile Include=\"src\\base\\ftbitmap.c\" />\r\n    <ClCompile Include=\"src\\cache\\ftcache.c\" />\r\n    <ClCompile Include=\"builds\\windows\\ftdebug.c\" />\r\n    <ClCompile Include=\"src\\base\\ftfstype.c\" />\r\n    <ClCompile Include=\"src\\base\\ftgasp.c\" />\r\n    <ClCompile Include=\"src\\base\\ftglyph.c\" />\r\n    <ClCompile Include=\"src\\gzip\\ftgzip.c\" />\r\n    <ClCompile Include=\"src\\base\\ftinit.c\" />\r\n    <ClCompile Include=\"src\\lzw\\ftlzw.c\" />\r\n    <ClCompile Include=\"src\\base\\ftstroke.c\" />\r\n    <ClCompile Include=\"src\\base\\ftsystem.c\" />\r\n    <ClCompile Include=\"src\\sdf\\ftsdfcommon.c\" />\r\n    <ClCompile Include=\"src\\sdf\\sdf.c\" />\r\n    <ClCompile Include=\"src\\smooth\\smooth.c\" />\r\n    <ClCompile Include=\"src\\base\\ftbbox.c\" />\r\n    <ClCompile Include=\"src\\base\\ftmm.c\" />\r\n    <ClCompile Include=\"src\\base\\ftpfr.c\" />\r\n    <ClCompile Include=\"src\\base\\ftsynth.c\" />\r\n    <ClCompile Include=\"src\\base\\fttype1.c\" />\r\n    <ClCompile Include=\"src\\base\\ftwinfnt.c\" />\r\n    <ClCompile Include=\"src\\base\\ftgxval.c\" />\r\n    <ClCompile Include=\"src\\base\\ftotval.c\" />\r\n    <ClCompile Include=\"src\\base\\ftpatent.c\" />\r\n    <ClCompile Include=\"src\\pcf\\pcf.c\" />\r\n    <ClCompile Include=\"src\\pfr\\pfr.c\" />\r\n    <ClCompile Include=\"src\\psaux\\psaux.c\" />\r\n    <ClCompile Include=\"src\\pshinter\\pshinter.c\" />\r\n    <ClCompile Include=\"src\\psnames\\psmodule.c\" />\r\n    <ClCompile Include=\"src\\raster\\raster.c\" />\r\n    <ClCompile Include=\"src\\sfnt\\sfnt.c\" />\r\n    <ClCompile Include=\"src\\svg\\ftsvg.c\" />\r\n    <ClCompile Include=\"src\\svg\\svg.c\" />\r\n    <ClCompile Include=\"src\\truetype\\truetype.c\" />\r\n    <ClCompile Include=\"src\\type1\\type1.c\" />\r\n    <ClCompile Include=\"src\\cid\\type1cid.c\" />\r\n    <ClCompile Include=\"src\\type42\\type42.c\" />\r\n    <ClCompile Include=\"src\\winfonts\\winfnt.c\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"include\\ft2build.h\" />\r\n    <ClInclude Include=\"include\\config\\ftconfig.h\" />\r\n    <ClInclude Include=\"include\\config\\ftheader.h\" />\r\n    <ClInclude Include=\"include\\config\\ftmodule.h\" />\r\n    <ClInclude Include=\"include\\config\\ftoption.h\" />\r\n    <ClInclude Include=\"include\\config\\ftstdlib.h\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "vc/freetype/freetype.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"Header Files\">\r\n      <UniqueIdentifier>{e6cf6a0f-0404-4024-8bf8-ff5b29f35657}</UniqueIdentifier>\r\n      <Extensions>h;hpp;hxx;hm;inl</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Source Files\">\r\n      <UniqueIdentifier>{b4c15893-ec11-491d-9507-0ac184f9cc78}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Source Files\\FT_MODULES\">\r\n      <UniqueIdentifier>{4d3e4eff-3fbc-4b20-b413-2743b23b7109}</UniqueIdentifier>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"src\\autofit\\autofit.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\bdf\\bdf.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\cff\\cff.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftbase.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftbitmap.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\cache\\ftcache.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftfstype.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftgasp.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftglyph.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\gzip\\ftgzip.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftinit.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\lzw\\ftlzw.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftstroke.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftsystem.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\smooth\\smooth.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftbbox.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftmm.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftpfr.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftsynth.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\fttype1.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftwinfnt.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftgxval.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftotval.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftpatent.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\pcf\\pcf.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\pfr\\pfr.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\psaux\\psaux.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\pshinter\\pshinter.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\psnames\\psmodule.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\raster\\raster.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\sfnt\\sfnt.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\truetype\\truetype.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\type1\\type1.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\cid\\type1cid.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\type42\\type42.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\winfonts\\winfnt.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\base\\ftcid.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"builds\\windows\\ftdebug.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\sdf\\ftsdfcommon.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\sdf\\sdf.c\">\r\n      <Filter>Source Files\\FT_MODULES</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\svg\\ftsvg.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"src\\svg\\svg.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"include\\ft2build.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"include\\config\\ftconfig.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"include\\config\\ftheader.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"include\\config\\ftmodule.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"include\\config\\ftoption.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"include\\config\\ftstdlib.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "vc/md5/md5.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <VCProjectVersion>15.0</VCProjectVersion>\r\n    <ProjectGuid>{01089EEA-D32A-4A70-BDD4-221791380931}</ProjectGuid>\r\n    <RootNamespace>md5</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"Shared\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <ConformanceMode>false</ConformanceMode>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n    <Link>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <ConformanceMode>false</ConformanceMode>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <ConformanceMode>false</ConformanceMode>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <ConformanceMode>false</ConformanceMode>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n    <Link>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\md5\\md5.h\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\md5\\md5.c\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "vc/md5/md5.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"Quelldateien\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Headerdateien\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Ressourcendateien\">\r\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\md5\\md5.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\md5\\md5.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "vc/miktex-com/miktex-com.vcxproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Midl Include=\"miktex-session.idl\" />\r\n    <Midl Include=\"miktexidl.idl\" />\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <VCProjectVersion>16.0</VCProjectVersion>\r\n    <ProjectGuid>{E22874EE-D0EE-4AAC-A7A5-7795917203F7}</ProjectGuid>\r\n    <RootNamespace>miktexcom</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n    <ProjectName>miktex-session</ProjectName>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>Application</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"Shared\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(Platform)\\$(Configuration)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(Platform)\\$(Configuration)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <ConformanceMode>true</ConformanceMode>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n    <Midl>\r\n      <GenerateClientFiles>Stub</GenerateClientFiles>\r\n    </Midl>\r\n    <Midl>\r\n      <GenerateServerFiles>None</GenerateServerFiles>\r\n      <HeaderFileName>%(Filename).h</HeaderFileName>\r\n      <OutputDirectory>$(IntDir)</OutputDirectory>\r\n      <TypeLibraryName>$(ProjectName).tlb</TypeLibraryName>\r\n    </Midl>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <ConformanceMode>true</ConformanceMode>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n    </Link>\r\n    <Midl>\r\n      <GenerateClientFiles>Stub</GenerateClientFiles>\r\n    </Midl>\r\n    <Midl>\r\n      <GenerateServerFiles>None</GenerateServerFiles>\r\n      <HeaderFileName>%(Filename).h</HeaderFileName>\r\n      <OutputDirectory>$(IntDir)</OutputDirectory>\r\n      <TypeLibraryName>$(ProjectName).tlb</TypeLibraryName>\r\n    </Midl>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <SDLCheck>true</SDLCheck>\r\n      <ConformanceMode>true</ConformanceMode>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n    </Link>\r\n    <Midl>\r\n      <GenerateClientFiles>Stub</GenerateClientFiles>\r\n    </Midl>\r\n    <Midl>\r\n      <GenerateServerFiles>None</GenerateServerFiles>\r\n      <HeaderFileName>%(Filename).h</HeaderFileName>\r\n      <OutputDirectory>$(IntDir)</OutputDirectory>\r\n      <TypeLibraryName>$(ProjectName).tlb</TypeLibraryName>\r\n    </Midl>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <SDLCheck>true</SDLCheck>\r\n      <ConformanceMode>true</ConformanceMode>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Console</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n    <Midl>\r\n      <GenerateClientFiles>Stub</GenerateClientFiles>\r\n    </Midl>\r\n    <Midl>\r\n      <GenerateServerFiles>None</GenerateServerFiles>\r\n      <HeaderFileName>%(Filename).h</HeaderFileName>\r\n      <OutputDirectory>$(IntDir)</OutputDirectory>\r\n      <TypeLibraryName>$(ProjectName).tlb</TypeLibraryName>\r\n    </Midl>\r\n  </ItemDefinitionGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "vc/miktex-com/miktex-com.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"Quelldateien\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Headerdateien\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Ressourcendateien\">\r\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Midl Include=\"miktex-session.idl\">\r\n      <Filter>Quelldateien</Filter>\r\n    </Midl>\r\n    <Midl Include=\"miktexidl.idl\">\r\n      <Filter>Quelldateien</Filter>\r\n    </Midl>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "vc/miktex-com/miktex-session.idl",
    "content": "/* session.idl:\t\t\t\t\t\t\t-*- IDL -*-\r\n\r\n   Copyright (C) 2006-2007 Christian Schenk\r\n\r\n   This file is part of the MiKTeX Core Library.\r\n\r\n   The MiKTeX Core Library is free software; you can redistribute it\r\n   and/or modify it under the terms of the GNU General Public License\r\n   as published by the Free Software Foundation; either version 2, or\r\n   (at your option) any later version.\r\n   \r\n   The MiKTeX Core Library is distributed in the hope that it will be\r\n   useful, but WITHOUT ANY WARRANTY; without even the implied warranty\r\n   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r\n   GNU General Public License for more details.\r\n   \r\n   You should have received a copy of the GNU General Public License\r\n   along with the MiKTeX Core Library; if not, write to the Free\r\n   Software Foundation, 59 Temple Place - Suite 330, Boston, MA\r\n   02111-1307, USA. */\r\n\r\n/// @file session.idl\r\n/// @brief The MiKTeX core COM objetcs.\r\n\r\nimport \"oaidl.idl\";\r\nimport \"ocidl.idl\";\r\n\r\nimport \"miktexidl.idl\";\r\n\r\n/* _________________________________________________________________________\r\n   \r\n   MiKTeXSetupInfo\r\n   _________________________________________________________________________ */\r\n\r\n/// @brief Information about the MiKTeX setup.\r\ntypedef [uuid(A889D812-7E98-4E73-A453-30C9B69A32B1)] struct MiKTeXSetupInfo\r\n{\r\n  /// @brief Shared MiKTeX setup indicator.\r\n  VARIANT_BOOL sharedSetup;\r\n  /// @brief MiKTeX version number.\r\n  BSTR version;\r\n  /// @brief MiKTeX series number.\r\n  /// The MiKTeX series denoted as an integer (e.g., 209).\r\n  LONG series;\r\n  /// @brief MiKTeX bin directory.\r\n  BSTR binDirectory;\r\n  /// @brief Number of configured TEXMF root directories.\r\n  LONG numRoots;\r\n  /// @brief MiKTeX installation root directory.\r\n  BSTR installRoot;\r\n  /// @brief MiKTeX common configuration root directory.\r\n  /// Valid only for shared MiKTeX setup. \r\n  BSTR commonConfigRoot;\r\n  /// @brief MiKTeX common data root directory.\r\n  /// Valid only for a shared MiKTeX setup. \r\n  BSTR commonDataRoot;\r\n  /// @brief MiKTeX user configuration root directory.\r\n  BSTR userConfigRoot;\r\n  /// @brief MiKTeX user data root directory.\r\n  BSTR userDataRoot;\r\n} MiKTeXSetupInfo;\r\n\r\n/* _________________________________________________________________________\r\n   \r\n   ISession\r\n   _________________________________________________________________________ */\r\n\r\n/// @brief The MiKTeX session interface.\r\n///\r\n/// This interface provides MiKTeX core functionality.\r\n[\r\n  object,\r\n  uuid(8BE9F539-B949-4C7B-991C-DB6C6F737EC7),\r\n  dual,\r\n  nonextensible,\r\n  helpstring(\"ISession Interface\"),\r\n  pointer_default(unique)\r\n]\r\ninterface ISession : IDispatch\r\n{\r\n  /// @brief Register MiKTeX root directories.\r\n  /// @param[in] rootDirectories A semicolon-separated list of path names.\r\n  [\r\n    id(1),\r\n    helpstring(\"method RegisterRootDirectories\")\r\n  ]\r\n  HRESULT\r\n  RegisterRootDirectories ([in] BSTR rootDirectories);\r\n\r\n  /// @brief Find a Pk file.\r\n  /// @param[in] fontName The name of the font (e.g. \"cmr10\").\r\n  /// @param[in] mode The METAFONT mode to be used (e.g. \"ljfour\").\r\n  /// @param[in] dpi The resolution to be used (e.g. 600).\r\n  /// @param[out] path The fully qualified path to the Pk file.\r\n  /// @return Returns VARIANT_TRUE, if the Pk file exists.\r\n  [\r\n    id(2),\r\n    helpstring(\"method FindPkFile\")\r\n  ]\r\n  HRESULT\r\n  FindPkFile ([in] BSTR fontName,\r\n\t      [in] BSTR mode,\r\n\t      [in] LONG dpi,\r\n\t      [out] BSTR * path,\r\n\t      [out,retval] VARIANT_BOOL * found);\r\n\r\n  /// @brief Get information about the last error.\r\n  /// @return Returns an error information record.\r\n  [\r\n    id(3),\r\n    helpstring(\"method GetErrorInfo\")\r\n  ]\r\n  HRESULT\r\n  GetErrorInfo ([out,retval] ErrorInfo * errorInfo);\r\n\r\n  /// @brief Get information about the MiKTeX setup.\r\n  /// @return Returns an MiKTeX setup info record.\r\n  [\r\n    id(4),\r\n    helpstring(\"method GetMiKTeXSetupInfo\")\r\n  ]\r\n  HRESULT\r\n  GetMiKTeXSetupInfo ([out,retval] MiKTeXSetupInfo * setupInfo);\r\n\r\n  /// @brief Get a configured root directory.\r\n  /// @param[in] rootIdx Index of the requested root directory.\r\n  /// @return Returns the requested root directory.\r\n  [\r\n    id(5),\r\n    helpstring(\"method GetRootDirectory\")\r\n  ]\r\n  HRESULT\r\n  GetRootDirectory ([in] LONG rootIdx,\r\n\t\t    [out,retval] BSTR * rootDirectory);\r\n};\r\n\r\n/* _________________________________________________________________________\r\n   \r\n   ISession2\r\n   _________________________________________________________________________ */\r\n\r\n/// @brief The MiKTeX session interface (version 2).\r\n///\r\n/// This interface provides MiKTeX core functionality.\r\n[\r\n  object,\r\n  uuid(49C9F0B8-3DF6-4BBA-9DCD-3FE289DF95D8),\r\n  dual,\r\n  nonextensible,\r\n  helpstring(\"ISession2 Interface\"),\r\n  pointer_default(unique)\r\n]\r\ninterface ISession2 : ISession\r\n{\r\n\r\n  /// @brief Find a file.\r\n  /// @param[in] fileName The name of the file (e.g. \"ptmr.vf\").\r\n  /// @param[out] path The fully qualified path to the file.\r\n  /// @return Returns VARIANT_TRUE, if the file exists.\r\n  [\r\n    id(6),\r\n    helpstring(\"method FindFile\")\r\n  ]\r\n  HRESULT\r\n  FindFile ([in] BSTR fileName,\r\n\t    [out] BSTR * path,\r\n\t    [out,retval] VARIANT_BOOL * found);\r\n};\r\n\r\n/* _________________________________________________________________________\r\n   \r\n   MiKTeXSession2_9\r\n   _________________________________________________________________________ */\r\n\r\n/// @brief The MiKTeX Session type library.\r\n[\r\n  uuid(392BFC08-8CD2-487F-87EE-B2DA213BBD20),\r\n  version(1.0),\r\n  helpstring(\"MiKTeX 2.9 Session\")\r\n]\r\nlibrary MiKTeXSession2_9\r\n{\r\n  importlib(\"stdole2.tlb\");\r\n\r\n  /// @brief The MiKTeX session COM object.\r\n  ///\r\n  /// This COM object implements the\r\n  /// @link ISession @endlink\r\n  /// and \r\n  /// @link ISession2 @endlink\r\n  /// interfaces.\r\n  [\r\n    uuid(A2662D75-3286-4A8D-8050-C0FD76393A31),\r\n    helpstring(\"MiKTeX 2.9 Session\")\r\n  ]\r\n  coclass MiKTeXSession2_9\r\n  {\r\n    interface ISession;\r\n    [default] interface ISession2;\r\n  };\r\n};\r\n"
  },
  {
    "path": "vc/miktex-com/miktexidl.idl",
    "content": "/* miktexidl.idl:\n\n   Copyright (C) 2006-2007 Christian Schenk\n\n   This file is part of the MiKTeX Core Library.\n\n   The MiKTeX Core Library is free software; you can redistribute it\n   and/or modify it under the terms of the GNU General Public License\n   as published by the Free Software Foundation; either version 2, or\n   (at your option) any later version.\n   \n   The MiKTeX Core Library is distributed in the hope that it will be\n   useful, but WITHOUT ANY WARRANTY; without even the implied warranty\n   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n   GNU General Public License for more details.\n   \n   You should have received a copy of the GNU General Public License\n   along with the MiKTeX Core Library; if not, write to the Free\n   Software Foundation, 59 Temple Place - Suite 330, Boston, MA\n   02111-1307, USA. */\n\n/// @file miktexidl.idl\n/// @brief Common data types.\n\nimport \"oaidl.idl\";\nimport \"ocidl.idl\";\n\n/* _________________________________________________________________________\n   \n   ErrorInfo\n   _________________________________________________________________________ */\n\n/// @brief Information about a MiKTeX error.\ntypedef [uuid(6AEC83E4-BF9A-4C21-8CC4-151D3E5A7C38)] struct ErrorInfo\n{\n  /// @brief The error message.\n  BSTR message;\n  /// Additional information.\n  BSTR info;\n  /// @brief The name of the source file.\n  BSTR sourceFile;\n  /// @brief The line number in the source file.\n  LONG sourceLine;\n} ErrorInfo;\n\n"
  },
  {
    "path": "vc/potrace/libpotrace.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectName>libpotrace</ProjectName>\r\n    <ProjectGuid>{6F17FBF1-4304-4AF2-81A8-C78787E8D0A5}</ProjectGuid>\r\n    <RootNamespace>libpotrace</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup>\r\n    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <TargetName>$(ProjectName)</TargetName>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <TargetName>$(ProjectName)</TargetName>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <TargetName>$(ProjectName)</TargetName>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <TargetName>$(ProjectName)</TargetName>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <BuildLog>\r\n      <Path>$(TargetDir)\\BuildLog.htm</Path>\r\n    </BuildLog>\r\n    <ClCompile>\r\n      <Optimization>Disabled</Optimization>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\potrace</AdditionalIncludeDirectories>\r\n      <PreprocessorDefinitions>HAVE_CONFIG_H;HAVE_INTTYPES_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <MinimalRebuild>false</MinimalRebuild>\r\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <Lib>\r\n      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r\n    </Lib>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <BuildLog>\r\n      <Path>$(TargetDir)\\BuildLog.htm</Path>\r\n    </BuildLog>\r\n    <ClCompile>\r\n      <Optimization>Full</Optimization>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\potrace</AdditionalIncludeDirectories>\r\n      <PreprocessorDefinitions>HAVE_CONFIG_H;HAVE_INTTYPES_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n      <DisableLanguageExtensions>true</DisableLanguageExtensions>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <Lib>\r\n      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r\n    </Lib>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <BuildLog>\r\n      <Path>$(TargetDir)\\BuildLog.htm</Path>\r\n    </BuildLog>\r\n    <Midl>\r\n      <TargetEnvironment>X64</TargetEnvironment>\r\n    </Midl>\r\n    <ClCompile>\r\n      <Optimization>Disabled</Optimization>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\potrace</AdditionalIncludeDirectories>\r\n      <PreprocessorDefinitions>HAVE_CONFIG_H;HAVE_INTTYPES_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <MinimalRebuild>false</MinimalRebuild>\r\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <Lib>\r\n      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r\n    </Lib>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <BuildLog>\r\n      <Path>$(TargetDir)\\BuildLog.htm</Path>\r\n    </BuildLog>\r\n    <Midl>\r\n      <TargetEnvironment>X64</TargetEnvironment>\r\n    </Midl>\r\n    <ClCompile>\r\n      <Optimization>Full</Optimization>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\potrace</AdditionalIncludeDirectories>\r\n      <PreprocessorDefinitions>HAVE_CONFIG_H;HAVE_INTTYPES_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <Lib>\r\n      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r\n    </Lib>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\potrace\\curve.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\potrace\\decompose.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\potrace\\potracelib.c\" />\r\n    <ClCompile Include=\"..\\..\\libs\\potrace\\trace.c\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\auxiliary.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\bitmap.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\config.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\curve.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\decompose.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\lists.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\potracelib.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\progress.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\trace.h\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "vc/potrace/libpotrace.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"Header Files\">\r\n      <UniqueIdentifier>{cd909116-5008-4ff1-8d69-0be4cbd05f90}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"Source Files\">\r\n      <UniqueIdentifier>{2533df69-1701-41b5-9d5c-40e0fc3f36cc}</UniqueIdentifier>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\potrace\\curve.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\potrace\\decompose.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\potrace\\potracelib.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\potrace\\trace.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\auxiliary.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\bitmap.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\curve.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\decompose.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\lists.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\potracelib.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\progress.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\trace.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\potrace\\config.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "vc/woff2/woff2.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{52C2C7C6-3BCE-4434-9A02-EA920C15FB65}</ProjectGuid>\r\n    <RootNamespace>woff2</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>Unicode</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"Shared\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\woff2\\include;..\\..\\libs\\brotli\\include</AdditionalIncludeDirectories>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n    </Link>\r\n    <Lib>\r\n      <TargetMachine>MachineX86</TargetMachine>\r\n    </Lib>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\woff2\\include;..\\..\\libs\\brotli\\include</AdditionalIncludeDirectories>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\woff2\\include;..\\..\\libs\\brotli\\include</AdditionalIncludeDirectories>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n    <Lib>\r\n      <TargetMachine>MachineX86</TargetMachine>\r\n    </Lib>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <AdditionalIncludeDirectories>..\\..\\libs\\woff2\\include;..\\..\\libs\\brotli\\include</AdditionalIncludeDirectories>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n    <Link>\r\n      <SubSystem>Windows</SubSystem>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\font.cc\" />\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\glyph.cc\" />\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\normalize.cc\" />\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\table_tags.cc\" />\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\transform.cc\" />\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\variable_length.cc\" />\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\woff2_common.cc\" />\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\woff2_enc.cc\" />\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\woff2_out.cc\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\buffer.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\font.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\glyph.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\normalize.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\port.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\round.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\store_bytes.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\table_tags.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\transform.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\variable_length.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\woff2_common.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\woff2_dec.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\woff2_enc.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\woff2_out.h\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "vc/woff2/woff2.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"Headerdateien\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Source Files\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\font.cc\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\glyph.cc\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\normalize.cc\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\table_tags.cc\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\transform.cc\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\variable_length.cc\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\woff2_common.cc\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\woff2_enc.cc\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"..\\..\\libs\\woff2\\src\\woff2_out.cc\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\buffer.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\font.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\glyph.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\normalize.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\port.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\round.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\store_bytes.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\table_tags.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\transform.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\variable_length.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\woff2_common.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\woff2_dec.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\woff2_enc.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\woff2\\src\\woff2_out.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "vc/xxHash/xxhash.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{B3A84395-D889-4419-B313-B410350727FA}</ProjectGuid>\r\n    <RootNamespace>xxhash</RootNamespace>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>true</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <UseDebugLibraries>false</UseDebugLibraries>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <OutDir>$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <IntDir>$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n    <Link>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>Disabled</Optimization>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n    <Link>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n    <Link>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <ClCompile>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <Optimization>MaxSpeed</Optimization>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n    </ClCompile>\r\n    <Link>\r\n      <GenerateDebugInformation>true</GenerateDebugInformation>\r\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\r\n      <OptimizeReferences>true</OptimizeReferences>\r\n    </Link>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\xxHash\\xxh3.h\" />\r\n    <ClInclude Include=\"..\\..\\libs\\xxHash\\xxhash.h\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\xxHash\\xxhash.c\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "vc/xxHash/xxhash.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Include=\"Quelldateien\">\r\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r\n    </Filter>\r\n    <Filter Include=\"Headerdateien\">\r\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r\n      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>\r\n    </Filter>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"..\\..\\libs\\xxHash\\xxhash.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"..\\..\\libs\\xxHash\\xxh3.h\">\r\n      <Filter>Headerdateien</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"..\\..\\libs\\xxHash\\xxhash.c\">\r\n      <Filter>Quelldateien</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "vc/zlib/zlib.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project DefaultTargets=\"Build\" ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|Win32\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|Win32\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>Win32</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup Label=\"Globals\">\r\n    <ProjectGuid>{F296E0C2-0D37-44CD-961D-87681418683F}</ProjectGuid>\r\n    <RootNamespace>zlib</RootNamespace>\r\n    <Keyword>Win32Proj</Keyword>\r\n    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <WholeProgramOptimization>true</WholeProgramOptimization>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\r\n    <ConfigurationType>StaticLibrary</ConfigurationType>\r\n    <CharacterSet>MultiByte</CharacterSet>\r\n    <PlatformToolset>v143</PlatformToolset>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\r\n  <ImportGroup Label=\"ExtensionSettings\">\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\r\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\r\n  </ImportGroup>\r\n  <PropertyGroup Label=\"UserMacros\" />\r\n  <PropertyGroup>\r\n    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n    <OutDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\</OutDir>\r\n    <IntDir Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">$(SolutionDir)$(Platform)\\$(Configuration)\\$(ProjectName)\\</IntDir>\r\n  </PropertyGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\r\n    <ClCompile>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <MinimalRebuild>false</MinimalRebuild>\r\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <RuntimeTypeInfo>false</RuntimeTypeInfo>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\r\n    <ClCompile>\r\n      <Optimization>Full</Optimization>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n      <CompileAsManaged>false</CompileAsManaged>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\r\n    <Midl>\r\n      <TargetEnvironment>X64</TargetEnvironment>\r\n    </Midl>\r\n    <ClCompile>\r\n      <Optimization>Disabled</Optimization>\r\n      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <MinimalRebuild>false</MinimalRebuild>\r\n      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\r\n      <RuntimeTypeInfo>false</RuntimeTypeInfo>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\r\n    <Midl>\r\n      <TargetEnvironment>X64</TargetEnvironment>\r\n    </Midl>\r\n    <ClCompile>\r\n      <Optimization>Full</Optimization>\r\n      <IntrinsicFunctions>true</IntrinsicFunctions>\r\n      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r\n      <FunctionLevelLinking>true</FunctionLevelLinking>\r\n      <PrecompiledHeader>\r\n      </PrecompiledHeader>\r\n      <WarningLevel>Level3</WarningLevel>\r\n      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r\n      <CompileAs>CompileAsC</CompileAs>\r\n      <MultiProcessorCompilation>true</MultiProcessorCompilation>\r\n    </ClCompile>\r\n  </ItemDefinitionGroup>\r\n  <ItemGroup>\r\n    <ClCompile Include=\"adler32.c\" />\r\n    <ClCompile Include=\"compress.c\" />\r\n    <ClCompile Include=\"crc32.c\" />\r\n    <ClCompile Include=\"deflate.c\" />\r\n    <ClCompile Include=\"gzclose.c\" />\r\n    <ClCompile Include=\"gzlib.c\" />\r\n    <ClCompile Include=\"gzread.c\" />\r\n    <ClCompile Include=\"gzwrite.c\" />\r\n    <ClCompile Include=\"infback.c\" />\r\n    <ClCompile Include=\"inffast.c\" />\r\n    <ClCompile Include=\"inflate.c\" />\r\n    <ClCompile Include=\"inftrees.c\" />\r\n    <ClCompile Include=\"trees.c\" />\r\n    <ClCompile Include=\"uncompr.c\" />\r\n    <ClCompile Include=\"zutil.c\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"crc32.h\" />\r\n    <ClInclude Include=\"deflate.h\" />\r\n    <ClInclude Include=\"inffast.h\" />\r\n    <ClInclude Include=\"inffixed.h\" />\r\n    <ClInclude Include=\"inflate.h\" />\r\n    <ClInclude Include=\"inftrees.h\" />\r\n    <ClInclude Include=\"trees.h\" />\r\n    <ClInclude Include=\"zconf.h\" />\r\n    <ClInclude Include=\"zlib.h\" />\r\n    <ClInclude Include=\"zutil.h\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\r\n  <ImportGroup Label=\"ExtensionTargets\">\r\n  </ImportGroup>\r\n</Project>"
  },
  {
    "path": "vc/zlib/zlib.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <ClCompile Include=\"adler32.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"compress.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"crc32.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"deflate.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"gzclose.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"gzlib.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"gzread.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"gzwrite.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"infback.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"inffast.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"inflate.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"inftrees.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"trees.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"uncompr.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n    <ClCompile Include=\"zutil.c\">\r\n      <Filter>Source Files</Filter>\r\n    </ClCompile>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ClInclude Include=\"crc32.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"deflate.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"inffast.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"inffixed.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"inflate.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"inftrees.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"trees.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"zconf.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"zlib.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n    <ClInclude Include=\"zutil.h\">\r\n      <Filter>Header Files</Filter>\r\n    </ClInclude>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Filter Include=\"Header Files\">\r\n      <UniqueIdentifier>{57dd7597-7a34-481c-af4b-29135424e271}</UniqueIdentifier>\r\n    </Filter>\r\n    <Filter Include=\"Source Files\">\r\n      <UniqueIdentifier>{19b01253-40c8-416b-9ec5-28414e9b99a3}</UniqueIdentifier>\r\n    </Filter>\r\n  </ItemGroup>\r\n</Project>"
  }
]